决策树的验证曲线解释

数据挖掘 scikit-学习 决策树
2021-10-07 16:23:11

我正在学习机器学习课程,我们现在正在使用监督学习,从决策树开始。我正在使用 UCI 信用卡数据集(无论某些人是否会因为过去的历史而拖欠付款)。

使用决策树分类器进行此尝试。使用 scikit-learn 运行验证曲线,我得到一个我不太确定如何解释的图。从轴上可以看出,参数是 min_samples_leaf,我将其从 1 更改为 30(乘以 2)。

min_samples_leaf 验证曲线

基于这个情节和一些谷歌搜索,我相信解释这个的正确方法是这个数据集具有高偏差,没有方差,并且没有真正学到任何东西。或者,换句话说,决策树不是这个数据集的好算法,因为似乎没有真正的权衡。

对于最大深度,我得到如下所示的验证曲线:

max_depth 验证曲线

根据我在这里看到的情况,在较小的集合中存在相当多的偏差,并且随着深度的增加而出现更多的差异。鉴于返回5 和19GridSearchCV的理想值。(编辑:更正的数字)。这些数字似乎表明存在非常高的偏差,使用决策树确实没有什么可学的。max_depthmin_samples_leaf

总的来说,基于min_samples_leaf,我会毫不犹豫地为这个数据集推荐一个决策树。然而,学习曲线和max_depth验证曲线似乎都表明可能存在一些价值。

令我困惑的是,准确度得分(使用metrics.accuracy_score和 的理想参数GridSearchCV)为 82%,这似乎还不错。如何将这些糟糕的验证曲线与准确度得分相协调?

2个回答

一些评论在我的头顶:

  • 这两个参数对于决策树都不是很重要min_samples_leafmax_depth因此在不同的值之间没有看到太多变化(或不是全部)也就不足为奇了:
    • 不影响性能的事实min_sample_leaf仅仅意味着该算法在特征中找到了足够好的预测因子来创建具有大量实例的叶子,显然总是超过 30 个。
    • 我不太确定max_depth,但我认为它是一个用于修剪树以避免过度拟合的参数。这正是当它增加到 5 以上时发生的情况:该算法通过在特征上使用非常具体的条件来创建更深(更复杂)的树,这些条件被证明是特定于训练集的,因此训练分数和CV 分数(这是过度拟合的明显迹象)。
  • 值 5max_depth确实是最优的,如第二张图所示(由于对较高值的过度拟合)。网格搜索返回的值 19min_samples_leaf与 1 到 30 之间的任何其他值一样最佳,如第一张图所示:网格搜索恰好选择了这个值,但无论如何它没有任何影响。
  • 82% 的准确率是完全正常的:那是两张图上的 Y 轴;)它确实看起来不错的性能,但我们不能肯定地说,因为没有比较:也许数据集非常简单,82% 只是多数班,或者可能是超级难,82% 是一个了不起的成就。

实际上,这些图表并没有显示太多关于学习的信息,它们只是表明所研究的参数并不真正相关。要观察更有趣的尝试:

  • 消融研究:选择训练集实例的随机子集并仅使用该子集进行训练。对 10%、20%、...、100% 的数据执行此操作,然后将性能绘制为训练集大小的函数。这将显示模型需要多少实例才能达到其最大性能(有根据的猜测:没有那么多)。
  • 特征选择:仅使用 N 个信息量最大的特征(例如通过信息增益来衡量)并绘制不同 N 值的性能。如果幸运的话,您可能会看到一个增加,直到 N 的特定最佳值然后是一个小的添加无信息功能时减少。如果发生这种情况,最后一部分将是由于过度拟合。

我想到一件事,您正在通过仅调整一个超参数来绘制验证曲线,但在 GridSearchCV 函数中,您实际上是将两个超参数一起转动。在 Validation_curve 函数中,您可能希望将这两个参数组合在一起并制作 3D 验证图,以查看对您的高矩阵准确度得分的良好解释。