我想知道为什么train_test_split和管道cross_val_score之间的r2_score有很大不同?我怀疑这是因为模型可以通过管道中的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(mypred, y_test)


是错的。

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

r2_score(y_test, mypred)


然后检查结果。

10-06 01:43