Python 为什么列车测试拆分和管道交叉验证评分之间的r2评分有很大差异?

Python 为什么列车测试拆分和管道交叉验证评分之间的r2评分有很大差异?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我想知道为什么列车测试分离和管道交叉测试分数之间的r2分数有很大不同?我怀疑这是因为模型可以通过管道中的CountVectorizer()看到未知单词。但基于管道的概念,CountVectorizer()应该只在按cross_val分割的训练集上工作 pipe=Pipeline([('Vect', CountVectorizer()), ('rf', RandomForestRegressor(random_state=1)) ]) X_train, X_test, y_train, y_te

我想知道为什么列车测试分离和管道交叉测试分数之间的r2分数有很大不同?我怀疑这是因为模型可以通过管道中的CountVectorizer()看到未知单词。但基于管道的概念,CountVectorizer()应该只在按cross_val分割的训练集上工作

pipe=Pipeline([('Vect', CountVectorizer()), ('rf', RandomForestRegressor(random_state=1)) ])

X_train, X_test, y_train, y_test=train_test_split(df['X'], df['price'], shuffle= False, test_size=0.5)

reg=pipe.fit(X_train,y_train )
mypred= reg.predict(X_test)
r2_score(mypred, y_test)
# result is -0.2
cross_val_score(pipe,df['X'], df['price'],cv=2)
# result is about 0.3
这是错误的

您需要提供真实值作为第一个输入,预测值作为第二个输入。更正为:

r2_score(y_test, mypred)
然后检查结果

这是错误的

您需要提供真实值作为第一个输入,预测值作为第二个输入。更正为:

r2_score(y_test, mypred)

然后检查结果。

在训练测试分割中设置shuffle=True时,您是否仍然存在此问题?我设置shuffle=False是为了使这两种情况具有可比性。当shuffle=True(默认值)时,结果也非常不同。您是否可以尝试使用cv=KFold(n_splits=2)而不是cv=2?因此,你的例子不具有可比性。谢谢你的建议。我按照你的建议换成了KFold。仍然存在很大的差异。在训练测试分割中设置shuffle=True时,您是否仍然存在此问题?我设置shuffle=False是为了使这两种情况具有可比性。当shuffle=True(默认值)时,结果也非常不同。您是否可以尝试使用cv=KFold(n_splits=2)而不是cv=2?因此,你的例子不具有可比性。谢谢你的建议。我按照你的建议换成了KFold。仍然存在巨大的差异,非常感谢!!这正是问题所在。非常感谢!又比你多了!非常感谢!!这正是问题所在。非常感谢!又比你多了!