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

梯度提升机(GBM)在随机数据上准确率100%问题排查求助

问题分析与解决方案

首先,你遇到的核心问题是随机数据生成时的特征-标签拆分错误,这直接导致GBM能拿到100%准确率,RFC准确率偏高。咱们一步步拆解:

1. 致命错误:随机数据的特征矩阵包含了标签列

看你的随机数据代码:

rand = np.column_stack((random, ran))
X1 = rand[:161]  # 这里是错误的写法!
Y1 = rand[:,-1]

rand的形状是(161, 162):前161列是随机特征,最后1列是标签ran。但你写的X1 = rand[:161]是取所有161行(本来就只有161行),等于把包含标签的全部162列都作为特征输入给模型了!

这就相当于让模型直接“看答案做题”:特征里已经有了目标标签,GBM这类强模型当然能100%拟合,RFC也能轻松捕捉到这个关联,所以准确率异常偏高。

2. 修复第一步:修正特征与标签的拆分

把随机数据的特征提取代码改成:

X1 = rand[:, :-1]  # 取所有行,除了最后一列的标签
Y1 = rand[:, -1]

这样X1才是纯粹的随机特征,和Y1完全无关,此时所有模型在随机数据上的准确率应该接近25%(4分类任务的随机猜测准确率),这才是合理的结果。

3. 其他需要注意的细节

除了这个核心错误,还有几个小细节可以优化:

  • 统一数据处理流程:真实数据你用了MinMaxScaler做特征缩放,但随机数据没有。为了保证对比的公平性,随机数据也应该做同样的缩放处理:
    X1 = MinMaxScaler().fit_transform(rand[:, :-1])
    Y1 = rand[:, -1]
    
  • 废弃参数的替换:你用的GridSearchCV里的iid=False在scikit-learn 0.22版本之后已经被废弃,建议移除这个参数(默认refit=True是合理的)。
  • RFC的过拟合风险:你的RFC参数设置了bootstrap=False,这会让每棵树使用全部训练数据生成,相比默认的bootstrap=True(随机采样)更容易过拟合。如果后续测试中RFC在正确的随机数据上仍有偏高准确率,可以尝试把bootstrap改回True。

预期修复后的结果

修正特征拆分后,所有模型在随机数据上的交叉验证准确率应该围绕25%波动,比如LR、SVM、MLP/Keras会接近25%,GBM和RFC可能因为模型复杂度略高有小幅波动,但绝不会出现100%或62%的异常值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:36:32