【发布时间】:2021-07-20 01:26:31
【问题描述】:
我有一项任务需要为我的训练数据集创建一个基准模型。我需要编码方面的帮助,以了解我将如何处理此任务。 5 种分类模型分别是 KNN、Kernal SVM、决策树、Logistic 回归和 k-nearest Neighbour。
任何有很好解释的例子都会有所帮助。
【问题讨论】:
标签: r classification benchmarking stat
我有一项任务需要为我的训练数据集创建一个基准模型。我需要编码方面的帮助,以了解我将如何处理此任务。 5 种分类模型分别是 KNN、Kernal SVM、决策树、Logistic 回归和 k-nearest Neighbour。
任何有很好解释的例子都会有所帮助。
【问题讨论】:
标签: r classification benchmarking stat
我不知道比较模型是什么,但是使用caret 包很容易创建许多不同的模型,使用交叉验证进行参数调整,然后比较结果。仅供参考,KNN 和 k-nearest Neighbor 是一回事。
在下面的示例中,我仅根据准确性而不是速度来比较模型。
我使用caret 包中提供的内置数据集,它具有二进制结果(示例中的列Class,值Good 和Bad)。
流程如下:
数据加载和拆分
library(caret)
data("GermanCredit")
str(GermanCredit[,1:10])
index <- createDataPartition(GermanCredit$Class,p=0.7,list=F)
training <- GermanCredit[index,1:10]
test <- GermanCredit[-index,1:10]
设置重采样方式:10倍交叉验证重复5次
# run multiple algorithms once, with 5 repeated 10 fold cv
trainControl <- trainControl(method="repeatedcv",
number=10,
repeats=5,
savePrediction="final"
)
调整模型并比较重采样统计数据
这里是all models available in caret的列表 由于您没有指定您想要哪种决策树算法或哪种内核,我选择 C5.0 作为决策树和具有径向基函数内核的 SVM。
#list of model to tune
algorithmList <- c('rpart', 'knn', 'glm','svmRadial')
#model tuning
set.seed(5)
models <- lapply(algorithmList,function(x){
train(
Class ~ .,
data = training,
method = x,
trControl = trainControl
)
})
来自交叉验证的重采样统计数据
results <- resamples(models)#results from cv
summary(results)
bwplot(results)
在测试集上测试模型的准确性
predicted <-
list(
c5.0 = predict(models[[1]], test[,-10]),
knn = predict(models[[2]], test[,-10]),
glm = predict(models[[3]], test[,-10]),
svm = predict(models[[4]], test[,-10])
)
cm <- lapply(predicted,confusionMatrix,reference=test$Class,positive="Good")
acc <- lapply(cm,function(x){
o <- x$overall[1:2]
b <- x$byClass[5:7]
df <- c(o,b)
})
df <- round(do.call(rbind,acc),3)
df 对象如下所示:
> df
Accuracy Kappa Precision Recall F1
c5.0 0.697 0.019 0.703 0.981 0.819
knn 0.660 0.008 0.701 0.895 0.787
glm 0.717 0.143 0.726 0.957 0.825
svm 0.723 0.157 0.728 0.967 0.830
查看here 以了解函数confusionMatrix 是如何计算这些统计数据的。
【讨论】: