Train()插入符-bestTune模型的准确性不同于重采样的准确性

时间:2019-04-24 14:36:19

标签: r caret resampling

我正在使用R's 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

1 个答案:

答案 0 :(得分:0)

主要原因是您需要引导数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(v0.2.1)于2019-04-25创建