Python的Scikit。使用SVM训练和测试数据

时间:2017-02-03 17:37:22

标签: python scikit-learn svm

我正在使用SVM(scikit)进行数据培训和测试。我正在训练SVM并从中准备一个泡菜。然后,我正在使用那个泡菜来测试我的系统。首先,我分别在变量train_datatest_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)

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_datatest_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)

此代码工作正常,并给我正确的输出。我的问题是 - 每当我想进行测试时,是否必须阅读培训数据?

谢谢。

1 个答案:

答案 0 :(得分:2)

在你的情况下,是的。 因为你没有保存(腌制)tfidfVectorizer。 必须以与列车数据转换完全相同的方式转换测试数据,以提供任何有意义的预测。 因此,如果您不想一次又一次地读取火车数据,那么也可以将tfidfVectorizer与一些估算器一起腌制并在测试期间将其取消。

另外,您可能需要查看scikit中提供的管道 - 学习如何将数据预处理和估算合并到一个对象中,您可以轻松地进行拾取和取消,而无需担心酸洗和加载各种部分培训

修改 - 添加代码

首次培训时,最后将此行添加到您的代码中:

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)