Python-Scikit.使用 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)

这段代码工作正常,给了我正确的输出。我的问题是 - 每当我想进行测试时,是否必须读取训练数据?

谢谢。

在您的情况下,是的。因为你没有保存(腌制(tfidfVectorizer.测试数据的转换方式必须与转换训练数据完全相同,以给出任何卑鄙的预测。因此,如果您不想一次又一次地读取训练数据,请将tfidfVectorizer与一些估计器一起挑选,并在测试期间取消选择它。

此外,您可能还想查看scikit-learn中提供的管道,将数据预处理和估计组合成一个对象,您可以轻松腌制和取消拾取,而不必担心酸洗和加载训练的各个部分。

编辑 - 添加的代码

首次训练时,最后将以下行添加到代码中:

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)

相关内容

  • 没有找到相关文章

最新更新