DecisionTreeRegressor未拆分至单样本叶节点的原因及强制过拟合方法
现象原因
出现该现象主要来自两方面原因:
- 数据集本身限制:如果数据集中存在多组特征(X)完全一致,但对应标签(y)不同的样本,决策树没有可用于区分这些样本的特征维度,无法继续分裂,最终这些样本会落在同一个叶节点中。
- 默认参数的隐含停止规则:scikit-learn的
DecisionTreeRegressor默认参数虽然没有显式限制树深、叶节点样本数,但是会在无法通过分裂降低节点不纯度时自动停止生长。如果当前节点所有特征的所有可能分裂方式都不能带来不纯度的下降,哪怕节点内还有上千个样本,树也会停止分裂。
强制过拟合的实现方法
如果要让树尽可能分裂到叶节点内样本完全一致,首先要确认你的数据集中不存在完全重复的特征行(X完全相同的样本),存在重复特征的场景下无论怎么调参都不可能拆分这些样本到不同叶节点。
在特征无重复的前提下,将所有限制分裂的参数调整到最宽松的阈值即可:
tree = DecisionTreeRegressor( min_samples_split=2, min_samples_leaf=1, min_impurity_decrease=0, max_depth=None, max_leaf_nodes=None, min_weight_fraction_leaf=0 ) tree.fit(X,y)
调整后训练出来的树会一直分裂到每个叶节点要么只有1个样本,要么节点内所有样本的y值完全一致,训练集的预测误差会降到0,也就是你需要的完全过拟合状态。
内容的提问来源于stack exchange,提问作者Diego Kiedanski
相关产品推荐
相关产品推荐

