【问题标题】:Avoiding overfitting with random forest避免过度拟合随机森林
【发布时间】:2020-06-24 13:54:31
【问题描述】:

我第一次训练随机森林模型,发现了这种情况。

  1. 我在训练集上的准确率,使用默认参数(如 https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html ) 非常高,0.95 或更高,看起来很像过拟合。在测试集上,准确率达到 0.66。我的目标是减少模型的过度拟合,希望能提高测试集的性能。

  2. 我尝试执行 5 折交叉验证,使用像这里 (https://towardsdatascience.com/hyperparameter-tuning-the-random-forest-in-python-using-scikit-learn-28d2aa77dd74) 这样的随机网格搜索和以下网格:

n_estimators = [16,32,64,128]
max_features = ['auto', 'sqrt']
max_depth = [int(x) for x in np.linspace(10, 110, num = 11)]
max_depth.append(None)
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
bootstrap = [True, False]
random_grid = {'n_estimators': n_estimators,
               'max_features': max_features,
               'max_depth': max_depth,
               'min_samples_split': min_samples_split,
               'min_samples_leaf': min_samples_leaf,
               'bootstrap': bootstrap}

最佳模型的折叠精度为 0.7。

  1. 我在第 2 步中对训练集和测试集使用了最佳选择的参数,但在训练集和测试集上的准确度再次为 0.95 和测试集 0.66。

有什么建议吗?你觉得这里发生了什么?如何获得结果以避免过度拟合(并可能提高模型性能)?

【问题讨论】:

  • 你为什么认为你过拟合了?训练集的准确率高于测试集的准确率是可以的。
  • 是的,但准确度差异很大......
  • 抱歉,为什么要投反对票?请在投票前写下改进问题的建议

标签: random-forest training-data


【解决方案1】:

这里有人有同样的问题,并得到了一些有用的答案: https://stats.stackexchange.com/questions/111968/random-forest-how-to-handle-overfitting

您使用 5 折交叉验证的方法已经非常好,也许可以通过改用 10 折交叉验证来改进。

您可以问自己的另一个问题是关于您的数据集的质量。你的班级平衡吗?如果不是,您可以尝试处理类不平衡问题,因为不平衡通常会导致对多数类的偏见。

也有可能是数据集不够大,增加它也可以提高您的性能。

我希望这会有所帮助。

【讨论】:

【解决方案2】:

添加这个迟到的评论以防它帮助其他人。

除了上述参数(n_estimators、max_features、max_depth 和 min_samples_leaf)之外,还可以考虑设置“min_impurity_decrease”。

您可以使用 'gini' 或 'entropy' 作为 Criterion,但是,我建议坚持使用默认值 'gini'。在大多数情况下,它们会产生相同的结果,但“熵”的计算成本更高。

最大深度效果很好,是一种阻止树生长的直观方法,但是,仅仅因为节点小于最大深度并不总是意味着它应该分裂。如果从拆分中获得的信息仅解决一个/几个错误分类,那么拆分该节点可能会支持过度拟合。根据数据集的大小和/或特征空间的大小和复杂性,您可能会也可能不会发现此参数有用,但在调整参数时值得考虑。

您没有描述如何拆分数据集,因此请考虑使用稍小的训练集。还要确保您的特征空间中没有分类变量。如果你这样做了,请使用 OneHotEncoding 或 pd.get_dummies 将它们分开。

我不确定您的特征空间有多大,但您可能希望使用较小的特征子集(取决于您有多少噪声变量)。您可能还想查看较小的 max_depth。您的深度测试一直到 110,非常大。同样,我不知道您的功能空间,但请查看您的范围的低端以从那里开始和扩展。即尝试: [5, 7, 9] 如果 9 是最佳值,则调整为 [9, 11, 13] 等。尽管即使深度为 9 也会导致过度拟合(取决于数据),因此请注意不要太长很多。可能与基尼指数配对。

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 2017-08-11
    • 2021-02-08
    • 2021-02-22
    • 2019-04-01
    • 2017-01-09
    • 2017-04-28
    • 2018-06-07
    • 2021-03-25
    相关资源
    最近更新 更多