我正在使用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
答案 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创建