我想知道为什么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)
然后检查结果。