随机森林回归R²为负、线性回归为正,模型拟合问题咨询
问题背景
我用随机森林回归处理数据集,得到的R-squared值为**-0.22**,远低于预期。代码如下:
rsquaredscores = [] x = correcteddf[['sleepiness_resolution_index']] y = correcteddf[['distance']] from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.3,train_size=0.7,random_state=0) from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators = 100,random_state = 0) regressor.fit(x_train,y_train) y_pred = regressor.predict(x_test) from sklearn.metrics import r2_score rsquaredscore = r2_score(y_test,y_pred) rsquaredscores.append(rsquaredscore) print(rsquaredscores)
用相同数据做线性回归时:
resultmodeldistancevariation2sleep = sm.OLS(y,x).fit() resultmodeldistancevariation2sleepsummary = resultmodeldistancevariation2sleep.summary() print(resultmodeldistancevariation2sleepsummary)
得到的R-squared值为0.027,远高于随机森林的结果。
请问:
- 这种一正一负的情况是否正常?
- 负R-squared值是否代表模型拟合效果极差?
- 还是我的代码存在问题?
数据集前10行:
correcteddf['sleepiness_resolution_index'].head(10) sleepiness_resolution_index 0 0.555556 1 1.500000 3 1.000000 6 0.900000 7 0.857143 8 0.875000 9 0.300000 10 0.750000 12 1.400000 13 2.333333 correcteddf[['distance']].head(10) distance 0 -0.251893 1 0.072180 3 -0.555438 6 0.199593 7 -0.378295 8 -0.162809 9 -0.108010 10 0.162275 12 -0.007996 13 4.637838
解答
1. 一正一负的R²是正常的
不同模型对数据的适配性差异很大:线性回归是简单模型,拟合的是全局线性趋势;随机森林是非线性模型,优势在于捕捉复杂多维非线性关系,但你的数据只有1个特征,随机森林的优势无法发挥,反而可能因为树的随机采样、分裂规则,对测试集的预测效果比线性模型还差。
2. 负R²确实代表拟合效果极差
R²的计算公式为:$R^2 = 1 - \frac{SS_{res}}{SS_{tot}}$,其中$SS_{res}$是预测值与真实值的残差平方和,$SS_{tot}$是真实值与均值的平方和。当$SS_{res} > SS_{tot}$时,R²会变为负数——这意味着你的模型预测效果不如直接用测试集的y均值来预测,属于完全无效的拟合。
3. 代码问题排查
你的代码整体逻辑没问题,但有几个细节可以优化:
- 确认
train_test_split划分比例:打印x_train.shape、x_test.shape,验证是否符合7:3的设定 - 调整随机森林参数:单特征下,默认的树深度(
max_depth)可能过大,导致过拟合训练集。可以尝试设置max_depth=3或更小的值,限制模型复杂度 - 统一线性回归的设定:
sm.OLS(y,x)没有加截距项,而sklearn的线性回归默认加截距。若要公平对比,要么给statsmodels的OLS添加截距(sm.add_constant(x)),要么让sklearn线性回归关闭截距项,避免模型设定不一致导致的R²差异
额外建议
从数据集前10行看,distance存在极端值(13号样本的4.637838),这个异常值可能严重干扰模型拟合。建议先做异常值检测和处理,再重新训练模型。另外,单特征的预测能力本身有限,可考虑加入更多相关特征提升模型效果。
内容的提问来源于stack exchange,提问作者Caledonian26
相关产品推荐
相关产品推荐

