【发布时间】:2017-09-27 00:51:44
【问题描述】:
我正在处理一个文本分类问题,我已经这样设置(为了简洁起见,我省略了数据处理步骤,但它们会生成一个名为 data 的数据框,其中包含 X 列和y):
import sklearn.model_selection as ms
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.ensemble import RandomForestClassifier
sim = Pipeline([('vec', TfidfVectorizer((analyzer="word", ngram_range=(1, 2))),
("rdf", RandomForestClassifier())])
现在我尝试通过在 2/3 的数据上对其进行训练并在剩余的 1/3 上对其进行评分来验证该模型,如下所示:
train, test = ms.train_test_split(data, test_size = 0.33)
sim.fit(train.X, train.y)
sim.score(test.X, test.y)
# 0.533333333333
我想对三个不同的测试集执行此操作 3 次,但使用 cross_val_score 得到的结果要低得多。
ms.cross_val_score(sim, data.X, data.y)
# [ 0.29264069 0.36729223 0.22977941]
据我所知,该数组中的每个分数都应该通过对 2/3 的数据进行训练并使用 sim.score 方法对剩余的 1/3 进行评分来产生。那么为什么它们都低这么多呢?
【问题讨论】:
标签: python python-3.x scikit-learn cross-validation