【问题标题】:Random forest, auc for training set and testing set随机森林,训练集和测试集的auc
【发布时间】:2020-10-31 14:16:18
【问题描述】:

我正在尝试调整我的随机森林分类器。当我使用GridSearchCV时,最好的参数是min_samples_split = 2min_samples_leaf = 4max_depth = None,我认为这绝对是过拟合。所以我为训练和测试数据绘制了 auc:

图表显示,随着我们增加max_depth,train_auc 和 test_auc 都会增加;那张图有意义吗?因为我认为随着深度的增加,测试数据的性能实际上会下降。

【问题讨论】:

  • 也许这个medium.com/all-things-ai/… 可以帮助你的图表变得有意义,当训练数据和测试数据的分数开始分裂时,你可以提前停止模型并选择好的max_depth,在你的情况下可以是@987654329 @
  • Hi@mjrezaee,但是测试集上更高的 AUC 不是意味着模型的性能更好吗?我应该只是一个没有过度拟合但 AUC 较低的模型,还是一个过度拟合但在测试集上具有较高 AUC 的模型?
  • RandomForestClassifier trains with Accuracy score,最好用这个分数来衡量提前停止点。当 Train Accuracy error (1-accuracy_score) 不断降低但 Test accuracy error 开始增加时,您可能会更清楚地看到分割点。虽然您可以在 AUC 图中看到,训练分数不断增加,而您的测试分数几乎是即时的,0.15 被认为是 AUC 测量的显着差异
  • @mjrezaee, RandomForestClassifier 训练尽量减少对数损失,而不是准确度。

标签: python machine-learning scikit-learn random-forest


【解决方案1】:

我认为您需要限制“max_depth”以避免过度拟合。这应该是你的直觉。因此,我的建议是阅读此https://medium.com/all-things-ai/in-depth-parameter-tuning-for-random-forest-d67bb7e920d。也许对你有帮助

【讨论】:

  • 谢谢!从网上的其他示例中,我看到测试集 AUC 总是有一个最佳值,但在我的情况下,似乎更高的“max_depth”总是会为测试数据带来更好的 AUC,尽管过度拟合。 'min_sample_split' 相同,较低的值总是在测试数据上提供更好的性能。这正常吗?还是我的模型/数据有问题?
  • 我认为数据是正常的所以我认为没有什么问题是正常的,因为随着分支数量的增加,它会开始为每个数据进行自定义,即给出更好的结果。但我们不希望这样,因为这会导致数据过拟合。因此我们尝试为 max_depth 等找到一个好的阈值。注意:我没有足够的经验来概括,我用我有限的知识来写。
  • 我对overfit的理解是,你用的模型太复杂,训练数据的性能好,测试数据的性能差。为什么在我的情况下,当模型过度拟合时,测试数据的 AUC 仍然变得更好?
【解决方案2】:

您认为大的max_depth 会导致过度拟合并最终降低测试分数是正确的。但是,正如您的绘图所示,直到深度 14 之后,您的数据才会发生这种情况。您说最佳 max_depthNone,即全深度树,令人惊讶,但我们需要了解更多关于您的数据、搜索空间等的信息。

现在,在某些情况下,测试分数并不是唯一的考虑因素,您可能需要考虑比提供最佳测试分数的max_depth 更小。参见例如https://datascience.stackexchange.com/q/66350/55122。所以,看看你的情节,也许你更喜欢 10 左右的深度,作为一个可能更稳定但性能稍差的模型。

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 2019-03-09
    • 2021-07-10
    • 2017-11-21
    • 2017-01-22
    • 2019-07-21
    • 2020-11-25
    • 2013-02-13
    • 2014-08-04
    相关资源
    最近更新 更多