You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

决策树模型获100%准确率但随机森林仅75%:模型问题还是数据集适配性咨询

决策树模型获100%准确率但随机森林仅75%:模型问题还是数据集适配性咨询

嗨,Jack!这种情况其实挺常见的,咱们一步步拆解问题,看看是哪里出了状况:

可能的核心原因

  • 决策树大概率发生了过拟合:测试集上100%的准确率其实非常可疑,这说明你的决策树完全“记住”了训练数据的细节,甚至包括噪声。因为默认参数的DecisionTreeClassifier没有限制树的深度、叶节点数量等,很容易无限制生长,把训练集里的所有样本特征都精准匹配,导致在测试集上看起来表现完美,但泛化能力极差。而随机森林本来就是靠多棵树的投票来降低过拟合风险,它给出的75%准确率反而更接近模型的真实泛化水平。
  • 随机森林的默认参数可能不适配你的数据集:sklearn的RandomForestClassifier默认参数(比如树的数量n_estimators、树的最大深度max_depth)不一定适合你的数据。比如如果树的数量太少,或者深度限制过严,可能导致模型欠拟合;当然也可能是其他参数需要调整,这需要进一步调优。
  • 数据集本身特性(可能性较低):如果你的数据集规模很小,或者特征和标签的关联极其直接,单棵决策树就能完全捕捉规律,但随机森林的采样过程可能因为样本量不足,导致单棵树的学习偏差被放大,最终投票结果不如单棵树。不过这种情况相对少见,优先考虑前两种原因。

针对你的代码的具体建议

  1. 验证决策树的过拟合问题
    给决策树加上参数限制,控制其生长,再观察测试集准确率变化:

    from sklearn.tree import DecisionTreeClassifier
    # 限制树的最大深度,或者最小叶节点样本数
    classifier = DecisionTreeClassifier(max_depth=5, min_samples_leaf=5, random_state=30)
    classifier.fit(X_train, y_train)
    y_pred = classifier.predict(X_test)
    from sklearn.metrics import accuracy_score
    print("限制参数后的决策树准确率:", accuracy_score(y_test, y_pred))
    

    如果准确率明显下降,就坐实了之前的过拟合问题。

  2. 调优随机森林的参数
    替换成随机森林并尝试调整关键参数,比如:

    from sklearn.ensemble import RandomForestClassifier
    # 先尝试增加树的数量,同时限制树的深度
    rf_classifier = RandomForestClassifier(n_estimators=150, max_depth=10, random_state=30)
    rf_classifier.fit(X_train, y_train)
    y_pred_rf = rf_classifier.predict(X_test)
    print("调参后随机森林准确率:", accuracy_score(y_test, y_pred_rf))
    

    你还可以尝试调整min_samples_splitmin_samples_leaf等参数,甚至用GridSearchCV来自动寻找最优参数组合。

  3. 省略不必要的标准化步骤
    决策树和随机森林是基于特征分裂的模型,完全不需要做特征标准化,你代码里的StandardScaler步骤可以直接去掉,这一步不会影响准确率,但能减少无用操作。

总结

大概率是决策树过拟合带来了“虚假的100%准确率”,随机森林的75%才是更真实的泛化性能。建议先验证决策树的过拟合情况,再针对性调优随机森林的参数,应该能得到更合理的结果。

备注:内容来源于stack exchange,提问作者Jack Tam

火山引擎 最新活动