不确定是否过拟合

数据挖掘 机器学习 分类 scikit-学习 过拟合
2022-02-25 02:11:38

我这样训练数据:
有四个类,数据分布均匀(标签数量相同)。

  1. 用过的min_max_scaler
  2. 用过的train_test_split(X,y,test_size=0.3,random_state=42,stratify=y)
  3. Ran GradientBoostingClassifier- once with n_estimators=32, and once withn_estimators=500在训练数据上
  4. 在测试数据上使用 predict
  5. 得到 accuracy=0.94 onn_estimators=32和 accuracy=1 on n_estimators=500
    分类报告中的准确率和召回率也是所有类的 1

看起来很可疑,但我不知道为什么......我做错了什么?

3个回答

根据您的数据,您可能会过度拟合,但这不一定是最终答案。

梯度提升树是一种强大的算法,并且在一段时间内被用作最先进的算法。如果您的数据碰巧以您尚未发现的系统方式表示目标值,那么算法很可能通过 500 棵估计树找到了完美的解决方案。这并非闻所未闻。

另一方面,我对您的数据了解不多。你有多少样品?100?100,000?前者更容易完美建模。如果类之间的差异是可预测的,则后者也可能是可预测的(尽管可能性较小)。特征的数量也可能起作用,以及每个特征的重要性。

正如评论中所建议的,交叉验证可以帮助您发现这里发生了什么。我强烈建议阅读我上面链接的论文,以查看严格的简历示例。仔细阅读他们所做的,了解如何为自己的 CV 设置建模。

您可以考虑检查分类器返回的特征重要性。如果一个特征非常重要,它可能表明该特征与目标变量之间存在密切相关性(这应该表明您需要仔细研究该特征)。

从理论上讲,您不允许对所有数据使用 min_max_scaler,因为您的测试集不再独立。但这仅在您拥有非常小的数据集时才会出现问题。

选项 :

  1. 你的问题太容易解决了,你的类可能不需要机器学习就可以分离

  2. 您正在将信息从目标泄漏到测试集,因此准确性很高,请在不同的测试集上尝试缩放您的整个数据(并且应该学习所有其他估计操作并应用训练数据,然后传播到测试集。

  3. 您严重过度拟合(32 的估计量并不多),这让我认为您没有太多数据。