随机森林分类器 - KFold CV 调整非常深的树 --> 过度拟合?

数据挖掘 机器学习 随机森林 交叉验证 阶级失衡
2022-02-18 12:15:18

我在 python 中调整随机森林,想知道我的模型是否/为什么过度拟合。数据集描述如下:

  • 1700 例阳性病例 / 54000 例总病例 ~ 3.2%(不平衡)
  • 50 个数值特征,~450 个标签/热编码特征(后数据缩减)
  • 10Fold CV 使用 85% 的数据,15% 用于最终测试
  • 分类指标 = AUC 或 F1(因为数据不平衡)

我得到的结果倾向于建议使用非常深的树,即深度 18,对每个拆分的样本数没有限制 = 2(默认)。在这种情况下,训练 AUC 为 99.9%,最大测试 AUC 为 84%。我的分数在树的最大深度上也几乎单调增加。鉴于结果和树的深度 - 我怀疑模型过度拟合?如果是这种情况,那么为什么我不会在 AUC 中观察到某种样本外的减少,因为深度和 min_samples_split 通常会限制随机森林?还是我在调音中忽略了什么?

我在 CV Grid Search 中的范围或多或少:

  • n_estimates : 范围(100,1000,by=100)
  • 最大特征:{sqrt(p),0.3,0.4,0.5}
  • 最大深度:范围(2,20,by=1)
  • min_samples_split : 范围(2,50,by=1)
  • 类权重:{平衡,无}

谢谢

3个回答

当模型在测试集上的性能大幅下降时,就会出现过度拟合数据的迹象。

良好的特征工程还可以提高模型的性能。考虑到您有一个不平衡的数据集,您可以查看数据集的重采样技术,例如随机过采样/欠采样和 SMOTE。您还可以从集成学习器或正则化回归模型(如 LASSO)中提取特征重要性,以查看哪些特征在模型的预测中贡献最大的权重。您还可以应用各种统计测试,例如 ANOVA 或卡方检验,以进一步了解您的数据。这里有很多事情要做。

您还可以重新考虑使用 ROC AUC 指标,并选择更适合您数据集中的类别不平衡的指标。ROC 曲线在 x 轴上绘制真阳性率 (TPR),在 y 轴上绘制假阳性率 (FPR),其公式分别对应于

TPR=TPTP+FN
FPR=FPFP+TP
由于 TPR 仅基于 TP 实例,因此 ROC 曲线不会衡量负面实例的影响。AUC 在评估整体模型性能时不考虑类别不平衡,因此我们不能相信它会衡量代表性不足的类别。

解决此问题的一种方法是使用马修斯相关系数,因为它考虑了真假正负。这有助于在模型评估期间更多地代表少数类。

您还可以查看随机网格搜索您的超参数调整;此方法使用从您指定的分布中采样的固定数量的参数设置。这允许您获得参数空间的一般邻域,您可以在更短的参数空间中使用蛮力网格搜索。然后,您可以像往常一样使用交叉验证来评估您的模型。

这只是要考虑的少数几件事,您可能会发现许多其他事情适合您的问题。

训练数据集和测试数据集之间的性能下降是过度拟合的标志。

鉴于极度不平衡的数据,将sample_weight参数传递给RandomForest().fit()以重新平衡类应该会有所帮助。

随机森林不会过拟合,添加的深度越多,获得的准确度越高,性能就越差。