gpt4 book ai didi

python - cross_val_score 与 .score 的回归评分结果显着不同

转载 作者:行者123 更新时间:2023-12-01 08:11:45 26 4
gpt4 key购买 nike

我正在运行 RandomForestRegressor()。我使用 R 平方进行评分。为什么使用 .score 和 cross_val_score 会得到截然不同的结果?相关代码如下:

X = df.drop(['y_var'], axis=1)
y = df['y_var']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

# Random Forest Regression
rfr = RandomForestRegressor()
model_rfr = rfr.fit(X_train,y_train)
pred_rfr = rfr.predict(X_test)
result_rfr = model_rfr.score(X_test, y_test)

# cross-validation
rfr_cv_r2 = cross_val_score(rfr, X, y, cv=5, scoring='r2')

我知道交叉验证是多次评分,而 .score 则一次评分,但结果截然不同,显然有些问题。结果如下:

R2-dot-score: .99072
R2-cross-val: [0.5349302 0.65832268 0.52918704 0.74957719 0.45649582]

我做错了什么?或者什么可以解释这种差异?

编辑:

好吧,我可能已经解决了这个问题。 cross_val_score 似乎没有对数据进行混洗,当数据分组在一起时,这可能会导致更糟糕的预测。我发现(通过 this answer )的最简单的解决方案是在运行模型之前简单地对数据帧进行洗牌:

shuffled_df = df.reindex(np.random.permutation(df.index))

完成此操作后,我开始在 .score 和 cross_val_score 之间得到类似的结果:

R2-dot-score: 0.9910715555903232
R2-cross-val: [0.99265184 0.9923142 0.9922923 0.99259524 0.99195022]

最佳答案

好吧,我可能已经解决了这个问题。 cross_val_score 似乎没有随机化数据,当相似的数据分组在一起时,这可能会导致更糟糕的预测。我发现(通过 this answer )的最简单的解决方案是在运行模型之前简单地对数据帧进行洗牌:

shuffled_df = df.reindex(np.random.permutation(df.index))

完成此操作后,我开始在 .score 和 cross_val_score 之间得到类似的结果:

R2-dot-score: 0.9910715555903232
R2-cross-val: [0.99265184 0.9923142 0.9922923 0.99259524 0.99195022]

关于python - cross_val_score 与 .score 的回归评分结果显着不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55203946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com