R語(yǔ)言利用caret包比較ROC曲線的操作
說(shuō)明
我們之前探討了多種算法,每種算法都有優(yōu)缺點(diǎn),因而當(dāng)我們針對(duì)具體問(wèn)題去判斷選擇那種算法時(shí),必須對(duì)不同的預(yù)測(cè)模型進(jìn)行重做評(píng)估。
為了簡(jiǎn)化這個(gè)過(guò)程,我們使用caret包來(lái)生成并比較不同的模型與性能。
操作
加載對(duì)應(yīng)的包與將訓(xùn)練控制算法設(shè)置為10折交叉驗(yàn)證,重復(fù)次數(shù)為3:
library(ROCR) library(e1071) library("pROC") library(caret) library("pROC") control = trainControl(method = "repaetedcv", number = 10, repeats =3, classProbs = TRUE, summaryFunction = twoClassSummary)
使用glm在訓(xùn)練數(shù)據(jù)集上訓(xùn)練一個(gè)分類器
glm.model = train(churn ~ ., data= trainset, method = "glm", metric = "ROC", trControl = control)
使用svm在訓(xùn)練數(shù)據(jù)集上訓(xùn)練一個(gè)分類器
svm.model = train(churn ~ ., data= trainset, method = "svmRadial", metric = "ROC", trControl = control)
使用rpart函數(shù)查看rpart在訓(xùn)練數(shù)據(jù)集上的運(yùn)行情況
rpart.model = train(churn ~ ., data = trainset, method = "svmRadial", metric = "ROC", trControl = control)
使用不同的已經(jīng)訓(xùn)練好的數(shù)據(jù)分類預(yù)測(cè):
glm.probs = predict(glm.model,testset[,!names(testset) %in% c("churn")],type = "prob") svm.probs = predict(svm.model,testset[,!names(testset) %in% c("churn")],type = "prob") rpart.probs = predict(rpart.model,testset[,!names(testset) %in% c("churn")],type = "prob")
生成每個(gè)模型的ROC曲線,將它們繪制在一個(gè)圖中:
glm.ROC = roc(response = testset[,c("churn")], predictor = glm.probs$yes, levels = levels(testset[,c("churn")])) plot(glm.ROC,type = "S",col = "red") svm.ROC = roc(response = testset[,c("churn")], predictor = svm.probs$yes, levels = levels(testset[,c("churn")])) plot(svm.ROC,add = TRUE,col = "green") rpart.ROC = roc(response = testset[,c("churn")], predictor = rpart.probs$yes, levels = levels(testset[,c("churn")])) plot(rpart.ROC,add = TRUE,col = "blue")
三種分類器的ROC曲線
說(shuō)明
將不同的分類模型的ROC曲線繪制在同一個(gè)圖中進(jìn)行比較,設(shè)置訓(xùn)練過(guò)程的控制參數(shù)為重復(fù)三次的10折交叉驗(yàn)證,模型性能的評(píng)估參數(shù)為twoClassSummary,然后在使用glm,svm,rpart,三種不同的方法建立分類模型。
從圖中可以看出,svm對(duì)訓(xùn)練集的預(yù)測(cè)結(jié)果(未調(diào)優(yōu))是三種分類算法里最好的。
補(bǔ)充:R語(yǔ)言利用caret包比較模型性能差異
說(shuō)明
我們可以通過(guò)重采樣的方法得對(duì)每一個(gè)匹配模型的統(tǒng)計(jì)信息,包括ROC曲線,靈敏度與特異度,然后基于這些統(tǒng)計(jì)信息來(lái)比較不同模型的性能差異。
操作
利用上節(jié)的信息,準(zhǔn)備好glm分類模型,svm分類模型,rpart分類模型,并存放在glm.model,svm.model,rpart.model。
cv.values = resamples(list(glm = glm.model,svm =svm.model,rpart = rpart.model)) > summary(cv.values) Call: summary.resamples(object = cv.values) Models: glm, svm, rpart Number of resamples: 30 ROC Min. 1st Qu. Median Mean 3rd Qu. Max. NA's glm 0.7597790 0.7927740 0.8040455 0.8106454 0.8347961 0.8760824 0 svm 0.8191998 0.8786439 0.8945208 0.8947360 0.9196775 0.9562556 0 rpart 0.6064540 0.7150320 0.7608241 0.7556544 0.8086731 0.8554750 0 Sens Min. 1st Qu. Median Mean 3rd Qu. Max. NA's glm 0.08823529 0.1764706 0.2058824 0.2124930 0.2516807 0.3235294 0 svm 0.44117647 0.5294118 0.5882353 0.5956863 0.6470588 0.7941176 0 rpart 0.20000000 0.4117647 0.4705882 0.4787955 0.5514706 0.7352941 0 Spec Min. 1st Qu. Median Mean 3rd Qu. Max. NA's glm 0.9393939 0.9645119 0.9721581 0.9702721 0.9796954 0.9898477 0 svm 0.9494949 0.9695431 0.9771574 0.9755004 0.9847716 0.9898990 0 rpart 0.9492386 0.9746193 0.9796954 0.9780359 0.9848485 1.0000000 0
使用dotplot函數(shù)繪制重采樣在ROC曲線度量中的結(jié)果:
dotplot(cv.values,metric = "ROC")
使用箱線圖繪制重采樣結(jié)果:
bwplot(cv.values,layout=c(3,1))
重采樣結(jié)果箱線圖
說(shuō)明
我們使用resample函數(shù)生成各個(gè)模型的統(tǒng)計(jì)信息,再調(diào)用summary函數(shù)輸出三個(gè)模型在ROC、靈敏度及特異性上的統(tǒng)計(jì)信息。
使用dotplot方法處理重采樣結(jié)果來(lái)觀測(cè)不同模型ROC差異,最后,采用箱線圖在同一張圖上對(duì)ROC、靈敏度及特異方面的差別進(jìn)行比較。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章

R語(yǔ)言安裝以及手動(dòng)安裝devtools的詳細(xì)圖文教程

R語(yǔ)言繪圖公式與變量對(duì)象混合拼接實(shí)現(xiàn)方法

R語(yǔ)言實(shí)現(xiàn)對(duì)數(shù)據(jù)框按某一列分組求組內(nèi)平均值

R語(yǔ)言學(xué)習(xí)筆記之lm函數(shù)詳解

R語(yǔ)言基礎(chǔ)統(tǒng)計(jì)方法圖文實(shí)例講解