我有大约10,000条推文的样本,我希望将其分类为“相关”和“不相关”。我正在为此模型使用Python的scikit-learn。我手动将1,000条推文编码为“相关”或“不相关”。然后,我使用80%的手动编码数据作为训练数据,其余的作为测试数据运行了SVM模型。我获得了良好的结果(预测准确度〜0.90),但是为了避免过度拟合,我决定对所有1,000条手动编码的推文使用交叉验证。
下面是我的代码,已经为示例中的推文获取了tf-idf矩阵。“目标”是一个数组,列出了该推文是否标记为“相关”或“不相关”。
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条推文所属的类,并将其与我的手动编码进行比较。
为了继续使用模型对我没有手动编码的其他约9000条推文进行分类,我坚持下一步要做的事情。我当时在考虑cross_val_predict
再次使用,但是由于类是我要预测的内容,因此我不确定在第三个参数中输入什么。
预先感谢您的所有帮助!
cross_val_predict 不是从模型实际获取预测的方法。交叉验证是一种用于模型选择/评估的技术,无需训练模型。cross_val_predict是非常特定的功能(它为您提供了在交叉验证过程中训练的许多模型的预测)。对于实际的模型构建,yu应该使用拟合来训练模型并预测获得预测。如前所述,此处不涉及交叉验证,这是用于模型选择(选择分类器,超参数等),而不是训练实际模型。