微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分类模型基准精度

如何解决分类模型基准精度

我有一项任务,需要为我的训练数据集创建一个基准模型。我需要编码方面的帮助以了解我将如何处理此任务。 5 个分类模型是 KNN、Kernal SVM、决策树、Logistic 回归和 k-nearest Neighbour。

任何具有良好解释的示例都会有所帮助。

解决方法

我不知道比较模型是什么,但是使用 caret 包很容易创建许多不同的模型,使用交叉验证进行参数调整,并比较结果。仅供参考,KNN 和 k-nearest Neighbor 是一回事。 在下面的示例中,我仅根据准确性而不是速度来比较模型。 我使用 caret 包中提供的内置数据集,它具有二进制结果(示例中的列 Class,值为 GoodBad)。 流程如下:

数据加载和拆分

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]],glm = predict(models[[3]],svm = predict(models[[4]],-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 如何计算这些统计信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。