r - `caret` 包重采样输出中不同模型的准确率完全相同
问题描述
我正在使用R 4.0.4
和包caret 6.0.89
进行机器学习分析。
在我的许多分析中(使用各种方法、调整和预处理),模型精度比较(即基准测试)的重采样结果对于不同的算法是完全相同的。我什至在 ML 学习教程中也看到了这一点,比如“Jason Brownlee 用 r 掌握 ML”:
library(caret)
# attach the iris dataset to the environment
data(iris)
# rename the dataset
dataset <- iris
trainControl <- trainControl(method="cv", number=10)
metric <- "Accuracy"
# LDA
set.seed(7)
fit.lda <- train(Species~., data=dataset, method="lda", metric=metric,
trControl=trainControl)
# CART
set.seed(7)
fit.cart <- train(Species~., data=dataset, method="rpart", metric=metric,
trControl=trainControl)
# KNN
set.seed(7)
fit.knn <- train(Species~., data=dataset, method="knn", metric=metric,
trControl=trainControl)
# SVM
set.seed(7)
fit.svm <- train(Species~., data=dataset, method="svmRadial", metric=metric,
trControl=trainControl)
# Random Forest
set.seed(7)
fit.rf <- train(Species~., data=dataset, method="rf", metric=metric, trControl=trainControl)
# summarize accuracy of models
results <- resamples(list(lda=fit.lda, cart=fit.cart, knn=fit.knn, svm=fit.svm, rf=fit.rf))
summary(results)
我从上面的书中复制了确切的代码,它显示的结果如下(简化):
Accuracy
Min. 1st Qu. Median Mean 3rd
lda 0.9167 0.9375 1.0000 0.9750
cart 0.8333 0.9167 0.9167 0.9417
knn 0.8333 0.9167 1.0000 0.9583
svm 0.8333 0.9167 0.9167 0.9417
rf 0.8333 0.9167 0.9583 0.9500
从上面的准确率结果可以看出,min
四个模型的准确率是完全一样的,最值得注意的是cart
和svm
模型的准确率的所有四分位数都是完全一样的。
在我尝试上面的代码时:
##
## Call:
## summary.resamples(object = results)
##
## Models: lda, cart, knn, svm, rf
## Number of resamples: 10
##
## Accuracy
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## lda 0.9333333 0.9500000 1.0000000 0.9800000 1.0000000 1 0
## cart 0.8666667 0.9333333 0.9333333 0.9400000 0.9833333 1 0
## knn 0.8666667 0.9333333 1.0000000 0.9666667 1.0000000 1 0
## svm 0.8000000 0.9333333 0.9666667 0.9466667 1.0000000 1 0
## rf 0.8666667 0.9333333 0.9666667 0.9600000 1.0000000 1 0
同样,对于不同的算法,许多准确度四分位数是相同的。
我在自己的数据集中多次遇到类似的问题。这是正常的发现还是错误?
解决方案
推荐阅读
- r - 为什么我的地块的 0,0 参考线延伸到绘图区域之外?
- mongodb - MongoDB - 在同一个集合上有不同文档的缺点?
- r - 使用“ifelse”修改字符串因子的内容不起作用
- php - 如何检查何时在 php 中选择/更改了下拉列表或如何保留选定的新值
- java - 创建自定义休眠类型类时是否应该有不同的包装和展开类类型?
- python - 如何按数组分组到python中的新数组
- java - sort 方法只对前半部分进行排序
- python - 如何多次重复多行字符串的子字符串?
- escpos - 如何使用 ESC/POS 命令定义代码 > 126 的自定义字符?
- python - 如何找到一个字符序列在字符串中连续重复的最大次数?