2017-02-03 3 views
0

Я работаю над подготовкой и тестированием данных с использованием SVM (scikit). Я тренирую СВМ и готовлю марихуану. Затем я использую этот маринован для проверки своей системы. Сначала я читаю данные обучения и данные тестирования в переменных train_data и test_data соответственно.Python-Scikit. Обучение и тестирование данных с использованием SVM

После этого код, я использую для обучения:

vectorizer = TfidfVectorizer(max_df = 0.8, 
          sublinear_tf=True, 
          use_idf=True) 
train_vectors = vectorizer.fit_transform(train_data) 
test_vectors = vectorizer.transform(test_data) 

classifier_rbf = svm.SVC() 
classifier_rbf.fit(train_vectors, train_labels) 
from sklearn.externals import joblib 
joblib.dump(classifier_rbf, 'pickl/train_rbf_SVM.pkl',1) 

Снова во время тестирования, я читаю обучающие данные и данные тестирования в переменных train_data и test_data соответственно. Код, который я использую для тестирования:

vectorizer = TfidfVectorizer(max_df = 0.8, 
          sublinear_tf=True, 
          use_idf=True) 
train_vectors = vectorizer.fit_transform(train_data) 
test_vectors = vectorizer.transform(test_data) 
from sklearn.externals import joblib 
classifier_rbf = joblib.load('pickl/train_rbf_SVM.pkl') 
prediction_rbf = classifier_rbf.predict(test_vectors) 

Этот код работает нормально и дает правильный результат. Мой вопрос: обязательно ли читать учебные данные всякий раз, когда я хочу провести тестирование?

спасибо.

ответ

2

В вашем случае, да. Потому что вы не сохраняете (травление) tfidfVectorizer. Данные испытаний должны быть преобразованы точно так же, как данные поезда преобразуются, чтобы дать какие-либо промежуточные предсказания. Итак, если вы хотите снова и снова не читать данные поезда, разберите tfidfVectorizer вместе с некоторой оценкой и распечатайте ее во время тестирования.

Также вы можете посмотреть на трубопровода предусмотренного в scikit-научиться комбинировать данные предварительной обработки и оценивающий в один объект, который можно замариновать и unpicke легко, без необходимости беспокоиться о засолки и погрузки различных частей обучения

Edit - Добавлен код

в то время как обучение в первый раз, добавьте эту строку в ваш код в конце:

joblib.dump(vectorizer, 'pickl/train_vectorizer.pkl',1) 

Теперь при тестировании данных нет необходимости загружать данные обучения. Просто загрузите уже установленный векторизатор:

classifier_rbf = joblib.load('pickl/train_rbf_SVM.pkl') 
vectorizer = joblib.load('pickl/train_vectorizer.pkl') 

test_vectors = vectorizer.transform(test_data) 
prediction_rbf = classifier_rbf.predict(test_vectors) 
+0

Я мариновал свой «train_vector», а также «train_labels». Даже тогда, если я удаляю строку с вызовом 'fit_transform', это дает мне ошибку, что словарный запас не установлен. – Himadri

+0

Trainvector и trainlabels doest matter .. То, что вы должны рассолить, - это векторизатор и classifier_rbf –

+0

Это то, что я сделал в коде, показанном в моем вопросе. Можете ли вы написать код в своем ответе за меня. Спасибо. – Himadri

 Смежные вопросы

  • Нет связанных вопросов^_^