我有一个任务,我需要为我的训练数据集创建一个基准模型。我需要在编码方面的帮助,以了解我将如何处理这项任务。这5种分类模型分别是KNN、核支持向量机、决策树、Logistic回归和k近邻。
任何有良好解释的例子都会有所帮助。
发布于 2021-04-27 15:28:40
我不知道比较模型是什么,但是使用caret包可以很容易地创建许多不同的模型,使用交叉验证进行参数调整,并比较结果。仅供参考,k近邻和k近邻是一回事。在下面的示例中,我只是在准确性方面比较模型,而不是在速度方面。我使用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"
)调整模型和比较重采样统计信息
下面是支持向量机的列表,因为您没有指定要使用哪种决策树算法或哪种内核,因此我选择C5.0作为决策树,并选择具有径向基函数核的all models available in caret。
#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是如何计算这些统计数据的。
https://stackoverflow.com/questions/67270585
复制相似问题