【问题标题】:Python-Scikit. Training and testing data using SVMPython-Scikit。使用 SVM 训练和测试数据
【发布时间】:2017-06-21 03:53:03
【问题描述】:

我正在使用 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)

此代码运行良好,并为我提供了正确的输出。我的问题是 - 每当我想进行测试时,是否必须阅读训练数据?

谢谢。

【问题讨论】:

    标签: python scikit-learn svm


    【解决方案1】:

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

    您可能还想查看 scikit-learn 中提供的 Pipeline 将数据预处理和估计组合到一个对象中,您可以轻松地腌制和取消腌制,而不必担心腌制和加载各种部分训练

    编辑 - 添加代码

    在第一次训练时,将这一行添加到你的代码中:

    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)
    

    【讨论】:

    • 我腌制了我的train_vectortrain_labels。即便如此,如果我删除了调用fit_transform 的行,它会给我错误,即词汇不合适。
    • Trainvector 和 trainlabels 并不重要。你应该腌制的是 vectorizer 和 classifier_rbf
    • 这就是我在问题中显示的代码中所做的。你能帮我在你的答案中写代码吗?谢谢。
    • 不,在你的代码中你没有腌制vectorizer。我已更改答案以反映相同。
    • 完成!按预期工作。
    猜你喜欢
    • 2015-05-04
    • 2018-05-17
    • 2020-06-22
    • 2013-08-05
    • 2013-10-31
    • 2019-07-12
    • 2013-04-14
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多