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

随机森林在泰坦尼克数据集上交叉验证得分为1.0是否存在问题?

为什么我的随机森林在泰坦尼克数据集上交叉验证得分全为1.0?

嘿,作为机器学习新手碰到这种情况太正常了,别担心!全1.0的准确率绝对是不合理的——毕竟泰坦尼克数据集不存在能完美区分存活/遇难的特征,这肯定是操作中出现了小疏漏,我们一步步来排查:

可能的核心原因

  • 标签/数据泄露:这是最常见的问题——你可能不小心把目标变量(y,也就是Survived列)或者和目标变量完全相关的特征留在了特征矩阵X里。比如如果X里包含了“是否获救”的直接标识,模型当然能轻松得到全对的结果。
  • 特征与目标完全相关:某个特征经过处理后和y完全一致,比如你复制了y列到X中,或者衍生特征的逻辑错误导致它直接等于标签。

具体排查步骤

  1. 检查特征矩阵和目标变量的内容
    先打印X和y的前几行,确认X里没有和y重复的列:

    print(X.head())
    print(y.head())
    

    比如如果y是Survived列,那X里绝对不能出现这个列。

  2. 计算特征与目标的相关性
    用相关性分析找出是否有特征和y完全相关:

    print(X.corrwith(y))
    

    如果输出里有某个特征的相关系数为1.0或-1.0,那这个特征就是问题所在。

  3. 手动拆分数据集验证
    跳过交叉验证,手动拆分训练集和测试集,看看模型在测试集上的表现:

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    forest_clf.fit(X_train, y_train)
    print("测试集准确率:", forest_clf.score(X_test, y_test))
    

    如果这个结果还是1.0,那肯定是X里存在和标签直接相关的内容;如果是正常的分数(比如和SGD的0.81接近),再去检查交叉验证的参数设置(不过这种情况概率极低)。

补充说明

你提到SGD分类器的得分是0.81,这反而更合理——因为如果存在轻微的泄露,不同模型的敏感度可能不同,但全1.0的结果绝对是异常的。泰坦尼克数据集的基准准确率大概在0.7-0.85之间,未调优的随机森林也不会超过这个范围太多。

放心,这是新手很容易踩的坑,排查出来就是很棒的学习经验!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:33:43