如何确定我的 GBM 模型是否过拟合?

数据挖掘 机器学习 r 准确性 过拟合 gbm
2021-09-20 17:44:46

下面是使用 R 的 iris 数据集的 h2o 梯度提升机器模型的简化示例。该模型经过训练以预测萼片长度。

该示例产生的 r2 值为 0.93,这似乎不切实际。我如何评估这些确实是现实的结果还是只是模型过度拟合?

library(datasets)
library(h2o)

# Get the iris dataset
df <- iris

# Convert to h2o
df.hex <- as.h2o(df)

# Initiate h2o
h2o.init()

# Train GBM model
gbm_model <- h2o.gbm(x = 2:5, y = 1, df.hex, 
                     ntrees=100, max_depth=4, learn_rate=0.1)

# Check Accuracy
perf_gbm <- h2o.performance(gbm_model) 
rsq_gbm <- h2o.r2(perf_gbm)

---------->

> rsq_gbm
[1] 0.9312635
3个回答

过度拟合一词意味着模型正在学习仅存在于该特定数据集中的属性之间的关系,并且不会推广到新的、看不见的数据。仅通过查看用于训练模型的数据的模型准确性,您将无法检测您的模型是否过拟合。

要查看是否过度拟合,请将数据集拆分为两个单独的集合:

  • 一个训练集(用于训练模型)
  • 一个测试集(用于测试模型的准确性)

90% 的训练,10% 的测试拆分是很常见的。在训练测试中训练您的模型并评估其在测试和训练集上的性能。如果测试集上的准确率远低于训练集上的模型准确率,则模型过度拟合。

您还可以使用交叉验证(例如,将数据分成 10 组大小相同的数据,每次迭代使用一组作为测试,其他作为训练)以获得较少受拆分中不规则性影响的结果。

我建议在原始数据集的单独拆分上训练/测试您的分类器,然后打印混淆矩阵: https ://topepo.github.io/caret/measuring-performance.html#

这是一种查看您的分类器正确或错误地预测了多少“真实”分类的方法,对于“错误”分类也是如此。这将为您提供比“准确性”更多的信息,因为例如,在大多数类别为 1 的数据上训练的模型将在大多数情况下预测 1,因为它可能会报告相当高的准确性。混淆矩阵就像对此的健全性检查。

在我看来:在现实世界的案例中,问题的性质在你如何处理过度拟合和对整个分类器的评估方面起着主要作用。

我所做的是查看提供的所有指标,但更重视 AUC 分数和 F 1 分数。这两者的结合也可以提供有关决策边界和泛化的有用信息!!