Train()Caret - bestTune模型精度与重采样精度不同

问题描述 投票:0回答:1

我使用R的Caret包运行KNN模型。我通过使用引导程序1000次来估计模型的准确性,然后在每个引导程序上绘制模型精度的直方图。

使用KNN方法时train()函数通常测试5,7和9个最近邻居的准确度,结果部分提供不同最近邻居的准确度和kappa。

在我的trainControl方法中,我指定模型的重新采样部分只应返回最佳调整模型的重采样。但是,结果部分中最佳调谐模型的准确度高于重采样的平均精度。有人可以解释为什么会这样吗?

library(caret)
library(klaR)

data("iris")

set.seed(10)

train_controlIris <- trainControl(method="boot632", number=1000, returnResamp = 'final',savePredictions = 'final' )

modelIris <- train( Species~.,data=iris, method="knn",trControl=train_controlIris)

modelIris$results

#results are
# k  Accuracy     Kappa AccuracySD    KappaSD AccuracyApparent KappaApparent
# 5 0.9596929 0.9391343 0.02518187 0.03806050        0.9666667          0.95
# 7 0.9636048 0.9450297 0.02477967 0.03746918        0.9733333          0.96
# 9 0.9668314 0.9498840 0.02406576 0.03636270        0.9800000          0.97

mean(modelIris$resample$Accuracy)
#result is 0.9591676
r caret resampling
1个回答
0
投票

主要原因是你要求bootstrap 632估算器,这与简单平均值不同。

library(caret)
#> Loading required package: lattice
#> Loading required package: ggplot2
library(klaR)
#> Loading required package: MASS

data("iris")

set.seed(10)

train_controlIris <-
  trainControl(
    method = "boot",
    number = 1000,
    returnResamp = 'final',
    savePredictions = 'final'
  )

modelIris <-
  train(Species ~ .,
        data = iris,
        method = "knn",
        trControl = train_controlIris)

mean(modelIris$resample$Accuracy)
#> [1] 0.9589355
getTrainPerf(modelIris)
#>   TrainAccuracy TrainKappa method
#> 1     0.9589355  0.9378173    knn

reprex package创建于2019-04-25(v0.2.1)

© www.soinside.com 2019 - 2024. All rights reserved.