Python / SKlearn:在大ROC_AUC变体中使用KFold结果

时间:2018-02-12 09:48:45

标签: machine-learning scikit-learn roc auc

根据我们业务部门提供给我们的数据,我使用了sklearn决策树算法来确定二进制分类问题的ROC_AUC

数据由450行组成,数据中有30个功能。

我使用了10次StratifiedKFold重复/拆分训练和测试数据。结果,我得到了以下ROC_AUC值:

0.624
0.594
0.522
0.623
0.585
0.656
0.629
0.719
0.589
0.589
0.592

由于我是机器学习的新手,我不确定是否可以预期ROC_AUC值的这种变化(最小值为0.522,最大值为0.719)。

我的问题是:

  1. 预计会有如此大的变化吗?
  2. 是否可以使用更多数据(=行)进行缩减?
  3. 如果ROC_AUC变好(“接近1”),ROC_AUC方差是否会变小?

2 个答案:

答案 0 :(得分:0)

好吧,你进行k-fold分裂以实际评估你的模型的概括性。

因此,根据您目前的结果,我假设如下:

  • 这是一个难题,AUC通常很低。
  • 0.71是异常值,你很幸运(可能)。

有助于我们帮助您的重要问题:

  • 二进制类的比例是多少?他们是平衡的吗?
  • 有什么功能?它们都是连续的吗?如果是分类的,它们是序数还是名义上的?
  • 为何选择决策树?你尝试过其他方法吗?例如,Logistic回归是一个很好的开始,然后再继续使用更高级的ML方法。
  • 您应该运行更多迭代,而不是k fold使用ShuffleSplit函数并运行至少100次迭代,计算95%置信区间的平均AUC。这样可以让您更好地了解模型的表现。

希望这有帮助!

答案 1 :(得分:0)

  

预计会有如此大的变化吗?

这是high variance的教科书案例。

根据您的问题的难度,405训练样本可能不足以正确推广,随机森林可能太强大。 尝试通过限制允许树的分割数量来添加一些正则化。这应该可以减少模型中的差异,尽管您可能期望平均性能可能会降低。

  

可以使用更多数据(=行)来减少它吗?

是的,添加数据是降低模型差异的另一种流行方式。如果您熟悉深度学习,您会发现深层模型通常需要大量样本才能正确学习。这是因为它们是非常强大的模型,具有固有的高方差,因此需要大量数据来进行推广。

  

如果ROC_AUC变好(“接近1”),ROC_AUC方差会变小吗?

随着正规化和添加数据,方差将减小,它与您获得的实际性能“数字”无关。

干杯