You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树基算法在重复特征下的表现差异及原因探究

树基分类器处理重复特征的表现差异问题

我不理解为何使用的三种树基分类器表现截然不同,尽管它们本应具有相似特性。我原本预期添加重复特征这类冗余信息会导致模型得分下降,RandomForest的表现符合该预期,但DecisionTree与LGBM的得分却保持稳定。想请教为何后两者未出现得分下降?是否在理论层面存在认知遗漏?

实验代码

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from lightgbm import LGBMClassifier 
from sklearn.model_selection import cross_validate
import matplotlib.pyplot as plt
import numpy as np

# load data
wine = datasets.load_wine()
X = wine.data
y = wine.target

# some helper functions
def repeat_feature(X,which=1,times=1):
    return np.hstack([X,np.hstack([X[:, :which]]*times)])

def do_the_job(X,y,clf):
    return np.mean(cross_validate(clf, X, y,cv=5)['test_score'])

# define the classifiers
clf1=DecisionTreeClassifier(max_depth=25,random_state=42)
clf2=RandomForestClassifier(n_estimators=5,random_state=42)
clf3=LGBMClassifier(n_estimators=5,random_state=42)

# repeat up to 50 times the same feature and test the classifiers
clf1_result=[]
clf2_result=[]
clf3_result=[]

for i in range(1,50):
    my_x=repeat_feature(X,times=i)
    clf1_result.append(do_the_job(my_x,y,clf1))
    clf2_result.append(do_the_job(my_x,y,clf2))
    clf3_result.append(do_the_job(my_x,y,clf3))
    
# plot the mean of the cv-scores for each classifier    
plt.figure(figsize=(12,7))
plt.plot(clf1_result,label='tree')
plt.plot(clf2_result,label='forest')
plt.plot(clf3_result,label='boost')
plt.legend()

实验结果图

实验结果图

核心原因分析

1. 单棵决策树(DecisionTree)的特性

单棵决策树在分裂节点时,会选择最优的分裂特征和阈值——哪怕有一堆重复特征,只要其中一个能带来最大信息增益(或基尼系数下降),树就会优先用它,剩下的重复特征根本没机会被选中。而且你的树设了max_depth=25,远大于wine数据集需要的深度,树完全可以在不依赖冗余特征的情况下学到足够的划分规则,重复特征不会干扰它的决策逻辑,自然不会降低得分。

2. LightGBM的优化机制

LGBM用的是直方图优化和梯度单边采样(GOSS),而且在特征选择上有两个关键设计:

  • 它会对特征进行直方图统计,重复特征的直方图完全一致,在分裂时只会被当成同一个有效特征的“镜像”,不会额外增加计算负担或干扰分裂选择;
  • LGBM默认的特征选择逻辑是每次只选当前最优的分裂点,重复特征无法提供新的分裂增益,所以不会被模型采纳,也就不会影响最终性能。另外,LGBM的boosting过程是逐步修正残差,冗余特征对残差的修正没有帮助,模型会自动忽略它们。

3. 随机森林(RandomForest)的退化原因

随机森林的核心是随机子空间采样——每棵树训练时会随机选一部分特征子集。当你加入大量重复特征后,每次随机采样选中重复特征的概率会大幅提升,相当于每棵树能用到的有效特征数量被稀释了。比如原本有13个有效特征,你加了50个重复的,总特征数变成63,随机采样时很可能选到一堆重复的“无效”特征,导致单棵树的性能下降,而森林的整体性能是多棵树的平均,自然跟着下降。而且你只设了n_estimators=5,树的数量少,这种稀释效应会更明显。

补充验证建议

  • 把随机森林的n_estimators调大(比如到100),你会发现性能下降的幅度会变小——更多的树能抵消部分单棵树的性能损失;
  • 给决策树加上max_features限制(比如设为sqrt),模拟随机森林的子空间采样,这时重复特征也会导致它的性能下降;
  • 观察LGBM的feature_importances_,会发现重复特征的权重几乎为0,说明模型确实没用到它们。

内容的提问来源于stack exchange,提问作者mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:06:38