gpt4 book ai didi

r - H2O AutoML 留一法的性能比 10 倍交叉验证好太多

转载 作者:行者123 更新时间:2023-11-30 08:42:05 26 4
gpt4 key购买 nike

我有一个机器学习问题:88 个实例,2 个类(40 个“FR”类实例,48 个“RF”类实例)。我自己尝试了几种不同的算法,并通过交叉验证和留一法评估结果,我无法达到超过 0.6 的准确度。以下是 csv 格式数据集的链接:https://drive.google.com/open?id=1lhCOP3Aywk4kGDEStAwL6Uq1H3twSJWS

尝试使用 H2O AutoML 进行 10 倍交叉验证,我得到了或多或少相同的结果:cross-validation-leaderbord 。但是当我尝试留一法时,我意外地得到了更好的结果:leave-one-out-leaderboard

我通过 fold_column 参数执行留一验证,为每个实例分配不同的折叠,代码如下:

train <- read.csv("training_set.csv", header = TRUE)
train$ID <- seq.int(nrow(train))

# Identify predictors and response
y <- "class"
x <- setdiff(setdiff(names(train), y), "ID")

# For binary classification, response should be a factor
train[,y] <- as.factor(train[,y])

# Run AutoML for 20 base models
aml <- h2o.automl(x = x, y = y,
fold_column = "ID",
keep_cross_validation_predictions = TRUE,
keep_cross_validation_fold_assignment = TRUE,
sort_metric = "logloss",
training_frame = as.h2o(train),
max_models = 20,
seed = 1)

# View the AutoML Leaderboard
lb <- aml@leaderboard
print(lb, n = nrow(lb))

首先,我不知道这是否是执行留一法的正确方法,我还尝试将 n_folds 设置为 88,但我得到了或多或少相同的结果。这里是在aml@leader@model[["cross_validation_metrics"]]中找到的信息:

H2OBinomialMetrics: stackedensemble
** Reported on cross-validation data. **
** 88-fold cross-validation on training data (Metrics computed for combined holdout predictions) **

MSE: 0.1248958
RMSE: 0.353406
LogLoss: 0.4083967
Mean Per-Class Error: 0.075
AUC: 0.8635417
pr_auc: 0.7441933
Gini: 0.7270833

Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
FR RF Error Rate
FR 34 6 0.150000 =6/40
RF 0 48 0.000000 =0/48
Totals 34 54 0.068182 =6/88

Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.712894 0.941176 53
2 max f2 0.712894 0.975610 53
3 max f0point5 0.712894 0.909091 53
4 max accuracy 0.712894 0.931818 53
5 max precision 0.712894 0.888889 53
6 max recall 0.712894 1.000000 53
7 max specificity 0.739201 0.975000 0
8 max absolute_mcc 0.712894 0.869227 53
9 max min_per_class_accuracy 0.715842 0.850000 46
10 max mean_per_class_accuracy 0.712894 0.925000 53

虽然这些信息看起来是一致的,但另一件让我认为有问题的事情是上面的混淆矩阵与 h2o.confusionMatrix(aml@leader) 获得的混淆矩阵之间的差异:

Confusion Matrix (vertical: actual; across: predicted)  for max f1 @ threshold = 0.117307738035598:
FR RF Error Rate
FR 18 22 0.550000 =22/40
RF 3 45 0.062500 =3/48
Totals 21 67 0.284091 =25/88

为什么两个混淆矩阵不同?难道他们不应该找到相同的 F1 最佳阈值吗?

有什么问题吗,还是只是 Stacked Ensemble 更好?

最佳答案

  • 只有 88 个数据实例,存在过度拟合的风险。为了确保您不会过度拟合,您应该将数据样本作为保留/测试(模型/训练不会看到),然后使用其余数据进行训练和交叉验证。然后,您可以使用保留数据来查看其性能是否与您在验证中发现的结果类似,并查看 LOO 是否更好。

对于你的问题:为什么两个混淆矩阵不同?难道他们不应该找到相同的 F1 最佳阈值吗?

  • 两个混淆矩阵都使用最大 F1 阈值。差异可能在于用于计算 F1 的数据集。您可以在表“最大指标:各自阈值处的最大指标”表的第一行看到阈值。

  • aml@leader@model[["cross_validation_metrics"]] 看起来正在使用验证数据,而 h2o.confusionMatrix(aml@leader) 正在使用训练数据。您可以尝试 aml@leader@model[["training_metrics"]] 看看它是否与 h2o.confusionMatrix(aml@leader) 匹配。

关于r - H2O AutoML 留一法的性能比 10 倍交叉验证好太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59359438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com