决策树回归效果优于随机森林?原因及性能优化问询
随机森林回归性能不如决策树的原因及优化方案
问题背景
我有一个包含11800行、约50列的数据集,分别用决策树回归和随机森林回归建模,并且为两个模型添加了样本权重以处理右删失问题。
决策树建模流程
- 变量重要性分析代码:
# 变量重要性分析 reg= DecisionTreeRegressor() reg.fit(X_train,y_train) predictors=list(X_train) reg.feature_importances_ import pandas as pd from matplotlib import pyplot as plt feat_imp = pd.Series(reg.feature_importances_, predictors).sort_values(ascending=False) feat_imp.plot(kind='bar', title='变量重要性') plt.show()
对应的变量重要性柱状图:
- 网格搜索调参:
grid=GridSearchCV(reg,param_grid=param_dict,cv=10,verbose=1,n_jobs=-1) grid.fit(X_train,y_train,sample_weight=Vect_Poids)
- 使用最优参数训练模型:
reg= DecisionTreeRegressor(criterion='friedman_mse', max_depth=17, min_samples_leaf=1, min_samples_split=16, splitter='random',random_state = random.seed(1234)) reg.fit(X_train,y_train,sample_weight=Vect_Poids)
- 结果评估:
print('R2 score for REF',r2_score(y_test,y_pred)) print('Root Mean Square error REF',sqrt(mean_squared_error(y_test,y_pred)))
决策树的R²约为0.58,预测值与测试值的差异图:
随机森林建模结果
使用与决策树相同的流程训练随机森林,但其R²仅为0.30,预测值与测试值偏差较大:
可能的原因
- 参数适配问题:你给决策树做了针对性的网格搜索调参,但随机森林的核心参数(如
n_estimators、max_features)和决策树完全不同,若直接沿用决策树的参数逻辑或用默认参数,必然无法发挥其集成优势。 - 样本权重传递问题:随机森林在网格搜索时,若未将
sample_weight=Vect_Poids传入fit方法,会导致调参过程忽略权重,最终得到的最优参数不适合带权重的数据集。 - 数据集特性影响:从变量重要性图看,数据存在占比极高的强特征,单棵决策树能精准捕捉这类特征的模式;但随机森林的特征采样机制(默认随机选部分特征)可能稀释强特征的作用,导致单棵树性能拉胯,集成后效果反而不如单树。
- 模型复杂度失衡:若随机森林的
n_estimators太小,集成效果不足;或max_depth设置过大导致单树过拟合,集成后反而放大误差;反之,参数过于保守也会导致欠拟合。
优化建议
- 针对性调参随机森林:重点调整这些核心参数,重新做网格搜索:
n_estimators:测试50、100、200、300、500的取值max_depth:尝试5-20的范围,或设为None同时限制min_samples_leaf(如2-10)max_features:测试"sqrt"、"log2"或0.3-0.7的比例(若强特征重要性高,可适当调大该值)- 注意网格搜索时必须把
sample_weight=Vect_Poids传入fit方法,和决策树保持一致
- 验证权重传递正确性:确认随机森林的
fit方法以及网格搜索过程中,样本权重都被正确传递,避免调参和训练阶段的权重不一致。 - 调整集成随机性:增大
n_estimators提升集成稳定性;若强特征占比高,可调大max_features,让更多核心特征被单棵树用到,减少随机采样的负面影响。 - 尝试变体集成模型:比如
ExtraTreesRegressor,它的随机性更强(随机选择分割点),有时能在强特征场景下取得更好效果;也可尝试关闭bootstrap参数(设为False)做对比。 - 强化特征信号:针对变量重要性高的特征,尝试特征组合、分箱或转换,放大其有效信号,帮助模型更好捕捉规律。
内容的提问来源于stack exchange,提问作者Marie
相关产品推荐
相关产品推荐

