为了确保模型能够对未知或者新到达对象进行正确预测,需要对模型性进行评估,避免模型可能存在的过度适度的问题。我们可以利用包括caret、rminer和rocr这样一些算法包来评估模型性能以防止过度适应的问题。对模型性能进行评估还有助于我们得到更优、健壮性更好的模型,以便准确地预测未知数据的响应。
k折交叉验证技术能够解决过度适应问题,因此被广泛的应用于分类器性能评测领域。k折交叉验证并不需要使用整个数据集。它将数据分为训练集和测试集,基于训练集得到的模型就可以通过测试集来完成性能评测,重复执行完K次交叉验证后,就能根据N次检验的平均正确率实现对模型性能的真实评估。
调用cut函数将索引分成10折
library(e1071)
ind = cut(1:nrow(churnTrain),breaks = 10,labels = F)
使用for循环执行10折交叉验证
accuracies = c()
for(i in 1:10){
fit = svm(churn ~ .,churnTrain[ind != i,])
predictions2 = predict(fit,churnTrain[ind == i ,!names(churnTrain) %in% c("churn")])
correct_count = sum(predictions2 == churnTrain[ind == i,c("churn")])
accuracies = append(correct_count / nrow(churnTrain[ind == i,]),accuracies)
}
输出准确率:
accuracies
[1] 0.8952096 0.8468468 0.8558559 0.9039039 0.8588589 0.9041916 0.8978979 0.9219219 0.8888889 0.9071856
计算平均准备:
mean(accuracies)
[1] 0.8880761
使用简单脚本实现10折交叉验证的过程,我们首先调用cut函数得到 一个10折的索引,然后使用一个for循环执行10遍的交叉验证。我们使用9折作为训练集并应用SVM训练模型,然后在使用训练得到的模型去预测剩下的数据(测试集)的类标号,然后根据正确预测分类的总和计算预测正确率,这样循环将得到10个准备率,再调用mean函数得到预测的平均正确率。
如果希望使用10折交叉交叉验证评估朴素贝叶斯的分类模型性能,只要把原来为svm的函数改为navieBayes.
利用turning函数(turn.nnet,turn.randomForest,turn.rpart,turn.svm,turn.knn),获取最小误差,下面讨论turn.svm进行10折交叉验证。
之前章节有介绍。
设置训练控制参数,进行重复3次的10折交叉检验
library(lattice)
library(ggplot2)
library(caret)
control = trainControl(method = "repeatedcv",number = 10,repeats = 3)
调用rpart处理telecom churn数据集产生的分类模型
model = train(churn~.,data = trainset,method = "rpart",preProcess = "scale" ,trControl = control)
查看模型的输出信息
model
CART
2315 samples
16 predictor
2 classes: 'yes', 'no'
Pre-processing: scaled (16)
Resampling: Cross-Validated (10 fold, repeated 3 times)
Summary of sample sizes: 2083, 2084, 2084, 2083, 2083, 2084, ...
Resampling results across tuning parameters:
cp Accuracy Kappa
0.05555556 0.9059571 0.5494405
0.07456140 0.8676676 0.2568734
0.07602339 0.8571672 0.1607621
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was cp = 0.05555556.
进行3遍10折交叉检验,重复的k折交叉验证常用来检测模型的稳定性,如果模型稳定,用户将获得类似的测试结果。接下来,我们用rpart方法处理训练数据集,此时先对数据集与进行中心化与标准化的预处理,再选择与之前的方法相同的配置进行模型训练。
训练过程完成后,模型将输出3次重新采样的结果,其中cp=0.556的模型准确率最高(0.904),因而被确认最优分类模型。
可以在trainControl中设置重采样参数。