我有大约 10,000 条推文样本,我想将它们分类为“相关”和“不相关”类别。我正在为此模型使用 Python 的 scikit-learn。我手动将 1,000 条推文编码为“相关”或“不相关”。然后,我运行了一个 SVM 模型,使用 80% 的手动编码数据作为训练数据,其余作为测试数据。我获得了不错的结果(预测准确率约为 0.90),但为了避免过度拟合,我决定对所有 1,000 条手动编码的推文使用交叉验证。
下面是我的代码,它已经获得了样本中推文的 tf-idf 矩阵。 “target”是一个数组,列出了推文是被标记为“相关”还是“不相关”。
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
clf = SGDClassifier()
scores = cross_val_score(clf, X_tfidf, target, cv=10)
predicted = cross_val_predict(clf, X_tfidf, target, cv=10)
通过这段代码,我能够预测这 1,000 条推文属于哪些类别,并且我可以将其与我的手动编码进行比较。
为了使用我的模型对我未手动编码的其他约 9,000 条推文进行分类,我不知道下一步该怎么做。我正在考虑再次使用 cross_val_predict,但我不确定在第三个参数中放入什么,因为类是我要预测的。
提前感谢您的所有帮助!
请您参考如下方法:
cross_val_predict 不是从模型中实际获得预测的方法。交叉验证是一种用于模型选择/评估的技术,而不是训练模型。 cross_val_predict 是非常具体的功能(它为您提供许多模型的预测,在交叉验证过程中训练)。对于实际的模型构建,您应该使用 fit 来训练您的模型并使用 predict 来获得预测。这里不涉及交叉验证 - 如前所述 - 这是用于模型选择(选择分类器、超参数等)而不是训练实际模型。
