轉(zhuǎn)帖|使用教程|編輯:龔雪|2017-04-18 10:57:48.000|閱讀 437 次
概述:如果你是一個(gè)機(jī)器學(xué)習(xí)的初學(xué)者,本系列文章將教你用R語言開啟機(jī)器學(xué)習(xí)之旅
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
文|陸勤
現(xiàn)在,我們需要?jiǎng)?chuàng)建一些模型來對(duì)我們模型里一些未知的值進(jìn)行精度的評(píng)估。
我們現(xiàn)在需要進(jìn)行以下步驟操作:
1用10交叉驗(yàn)證建立測(cè)試用具
2建立5個(gè)不同的模型對(duì)每種不同的花進(jìn)行預(yù)測(cè)。
3選出最佳模型。
我們要通過10交叉驗(yàn)證進(jìn)行模型精度評(píng)估。
這時(shí)我們要把我們的數(shù)據(jù)集分成10個(gè)部分,9個(gè)部分用于訓(xùn)練,1個(gè)用于測(cè)試,而且我們還會(huì)釋放每個(gè)測(cè)試部分的所有組合。我們也會(huì)對(duì)每個(gè)算法和10個(gè)數(shù)據(jù)集部分重復(fù)這個(gè)過程3次,就是為了能得到模型的精度評(píng)估。
1 # Run algorithms using 10-fold cross validation 2 control <- trainControl(method=”cv”, number=10) 3 metric <- “Accuracy”
我們現(xiàn)在使用“精準(zhǔn)度”這個(gè)度量來評(píng)估模型。這是一個(gè)源自每個(gè)分開的部分里所得到的一個(gè)比率,表示正確的預(yù)測(cè)實(shí)例的數(shù)量的比率,它通過正確的預(yù)測(cè)實(shí)例數(shù)除以總實(shí)例數(shù)乘于100%所得的一個(gè)百分?jǐn)?shù)(比如精度為95%)。我們還會(huì)在接下來建立與評(píng)估每個(gè)模型的時(shí)候使用metic這個(gè)變量。
我們并不知道怎樣的算法適合解決這個(gè)問題,也不知道它到底是怎樣的結(jié)構(gòu)。我們可以從一些圖像中得到相關(guān)信息,而這些圖像則是一些層次部分地線性分離到一些維度里,所以,我們通常都期待這是一個(gè)不錯(cuò)的結(jié)果。
現(xiàn)在,我們?cè)u(píng)估5個(gè)不同的算法:
線性判別分析(LDA)
分類樹和回歸樹(CART)
K近鄰(kNN)
有線性核的支持向量機(jī)(SVM)
隨機(jī)森林(RF)
這是一個(gè)很好的簡(jiǎn)單線性混合(LDA),非線性(CART,kNN)和復(fù)雜的非線性方法(SVM,RF)。我們?cè)谶\(yùn)行之前重新設(shè)定隨機(jī)數(shù),并保證每個(gè)算法的評(píng)估都是在使用相同的數(shù)據(jù)拆分的條件下運(yùn)行的。這可以保證所有的結(jié)果都具有可比性。
現(xiàn)在,我們建立這5個(gè)模型:
1# a) linear algorithms 2 set.seed(7) 3 fit.lda <- train(Species~., data=dataset, method=”lda”, metric=metric, trControl=control) 4 # b) nonlinear algorithms 5 # CART 6 set.seed(7) 7 fit.cart <- train(Species~., data=dataset, method=”rpart”, metric=metric, trControl=control) 8 # kNN 9 set.seed(7) 10 fit.knn <- train(Species~., data=dataset, method=”knn”, metric=metric, trControl=control) 11 # c) advanced algorithms 12 # SVM 13 set.seed(7) 14 fit.svm <- train(Species~., data=dataset, method=”svmRadial”, metric=metric, trControl=control) 15 # Random Forest 16set.seed(7) 17fit.rf <- train(Species~., data=dataset, method=”rf”, metric=metric, trControl=control)
Caret支持每個(gè)模型的結(jié)構(gòu)和協(xié)調(diào)配置結(jié)構(gòu),但是我們并不會(huì)在這個(gè)教程里展示。
我們現(xiàn)在得到了5個(gè)模型,并知道了每個(gè)模型的評(píng)估情況。我們需要對(duì)這些模型進(jìn)行相互比較,從而選出精度更好的模型。
我們首先可以對(duì)每個(gè)模型創(chuàng)建一系列已經(jīng)建立好的模型并使用summary函數(shù)來報(bào)告它們的精度。
1 # summarize accuracy of models 2 results <- resamples(list(lda=fit.lda, cart=fit.cart, knn=fit.knn, svm=fit.svm, rf=fit.rf)) 3 summary(results)
我們可以查看每個(gè)分離器的精度,也可以看一下諸如Kappa度量:
4 Models: lda, cart, knn, svm, rf 5 Number of resamples: 10 6 Accuracy 7 Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s 8 lda 0.9167 0.9375 1.0000 0.9750 1 1 0 9 cart 0.8333 0.9167 0.9167 0.9417 1 1 0 10 knn 0.8333 0.9167 1.0000 0.9583 1 1 0 11 svm 0.8333 0.9167 0.9167 0.9417 1 1 0 12 rf 0.8333 0.9167 0.9583 0.9500 1 1 0 13 Kappa 14 Min. 1st Qu. Median Mean3rd Qu. Max. NA’s 15 lda 0.875 0.9062 1.0000 0.9625 1 1 0 16 cart 0.750 0.8750 0.8750 0.9125 1 1 0 17 knn 0.750 0.8750 1.0000 0.9375 1 1 0 18 svm 0.750 0.8750 0.8750 0.9125 1 1 0 19 rf 0.750 0.8750 0.9375 0.9250 1 1 0
我們也可以根據(jù)某些的評(píng)估結(jié)果作圖然后比較它們的擴(kuò)散情況以及每個(gè)模型的均值精度。這里有一個(gè)針對(duì)每個(gè)算法的容量的精度測(cè)試,由于每個(gè)算法都進(jìn)行了10次預(yù)測(cè)(10交叉驗(yàn)證)。
1.1 # compare accuracy of models 2. 3.2 dotplot(results)
我們可以看到,精度最高的算法是LDA:

我們可以對(duì)LDA的結(jié)果進(jìn)行匯總:
print(fit.lda)
這個(gè)匯總做的很不錯(cuò),它很好的歸納了用什么訓(xùn)練模型,同時(shí),它的均值和標(biāo)準(zhǔn)差(SD)均在一個(gè)理想的范圍內(nèi),所以模型精度不錯(cuò),為97.5%+/-4%。
1 Linear Discriminant Analysis 2 3 120 samples 4 4 predictor 5 3 classes: ‘setosa’, ‘versicolor’, ‘virginica’ 6 7 No pre-processing 8 Resampling: Cross-Validated (10 fold) 9 Summary of sample sizes: 108, 108, 108, 108, 108, 108, … 10 Resampling results 11 12 Accuracy Kappa Accuracy SD Kappa SD 13 0.975 0.9625 0.04025382 0.06038074
做預(yù)測(cè)
LDA是精度最高的算法。我們現(xiàn)在要從你的測(cè)試數(shù)據(jù)集那里找到這個(gè)模型精度的相關(guān)信息。
這時(shí),我們需要對(duì)所得的最佳模型進(jìn)行最后的模型精度檢驗(yàn)。如果你不小心犯了一些小錯(cuò)誤如測(cè)試時(shí)在你的訓(xùn)練數(shù)據(jù)集中出現(xiàn)了過度擬合情況,或者數(shù)據(jù)被泄露了出去,那么保留一個(gè)測(cè)試數(shù)據(jù)集是應(yīng)付這種情況的好辦法。
現(xiàn)在我們?cè)跍y(cè)試數(shù)據(jù)集上直接運(yùn)行LDA模型,并對(duì)所得的含混矩陣的結(jié)果進(jìn)行匯總。
1 # estimate skill of LDA on the validation dataset 2 predictions <- predict(fit.lda, validation) 3 confusionMatrix(predictions, validation$Species)
我們看到精度高達(dá)100%。這是一個(gè)小的測(cè)試數(shù)據(jù)集(20%),但是這個(gè)結(jié)果在97%+/-4%范圍內(nèi),這告訴我們,這個(gè)模型也許就是精度高且可靠性好的模型。
1 Confusion Matrix and Statistics 2 3 Reference 4 Prediction setosa versicolor virginica 5 setosa 10 0 0 6 versicolor 0 10 0 7 virginica 0 0 10 8 9 Overall Statistics 10 11 Accuracy : 1 12 95% CI : (0.8843, 1) 13 No Information Rate : 0.3333 14 P-Value [Acc > NIR] : 4.857e-15 15 16 Kapp: 1 17 Mcnemar’s Test P-Value : NA 18 19 Statistics by Class: 20 21 Class: setosa Class: versicolor Class: virginica 22 Sensitivity 1.0000 1.0000 1.0000 23 Specificity 1.0000 1.0000 1.0000 24 Pos Pred Value 1.0000 1.0000 1.0000 25 Neg Pred Value 1.0000 1.0000 1.0000 26 Prevalence 0.3333 0.3333 0.3333 27 Detection Rate 0.3333 0.3333 0.3333 28 Detection Prevalence 0.3333 0.3333 0.3333 29 Balanced Accuracy 1.0000 1.0000 1.0000
你現(xiàn)在可以運(yùn)行機(jī)器學(xué)習(xí)項(xiàng)目了
根據(jù)這個(gè)教程進(jìn)行操作,你能在5-10分鐘內(nèi)就能完成,最多不超過10分鐘!
你并不需要明白所有事情。(最少不是現(xiàn)在)你的目標(biāo)就是根據(jù)這個(gè)教程運(yùn)行一個(gè)端到端的項(xiàng)目,并得到相關(guān)結(jié)果。就目前而已,你不需要對(duì)所有的事情都一清二楚。在你執(zhí)行的時(shí)候,你可以把你的問題列舉出來。你可以多使用?函數(shù)名、幫助文檔的語法結(jié)構(gòu)來獲悉你目前所用的函數(shù)的相關(guān)信息。
你并不需要知道這些算法是怎么運(yùn)行的。知道其中的局限性很重要,怎樣配置好的機(jī)器學(xué)習(xí)算法也很重要。但是,學(xué)習(xí)算法可以遲一點(diǎn)學(xué)。你需要在接下來的一段時(shí)間內(nèi)慢慢的學(xué)習(xí)算法的相關(guān)知識(shí)。今天,你就好好享受一下在這個(gè)平臺(tái)里運(yùn)行算法所給你帶來的樂趣吧。
你并不需要成為R程序員。R語言的語法結(jié)構(gòu)其實(shí)看起來確實(shí)挺讓人費(fèi)解的。就像我們學(xué)習(xí)其它語言那樣,專注于函數(shù)的調(diào)用功能(諸如function())以及任務(wù)(比如a<-“b”)。這里已經(jīng)給你提供了很多操作上的便利。你是一個(gè)開發(fā)人員,你知道如何選擇一個(gè)真正運(yùn)行速度快的基礎(chǔ)語言,然后,你就開始學(xué)習(xí)它,更多的細(xì)節(jié)以后慢慢了解。
你并不需要成為機(jī)器學(xué)習(xí)方面的專家。你在學(xué)習(xí)的過程中,到了后面,你就會(huì)知道你在學(xué)習(xí)過程中獲得什么益處,也知道哪方面存在不足。往后,你能看到足夠多的文章來整理機(jī)器學(xué)習(xí)項(xiàng)目的執(zhí)行步驟,同時(shí)也會(huì)知道使用交叉檢驗(yàn)對(duì)于評(píng)估精度的重要性。
那么,機(jī)器學(xué)習(xí)項(xiàng)目還有沒有別的步驟?我們并不需要在一篇文章里講完所有的步驟,因?yàn)檫@是你的第一個(gè)項(xiàng)目,而且,你需要更多的落實(shí)到核心的步驟。
換句話說, 觀察數(shù)據(jù),評(píng)估一些算法以及作出相關(guān)預(yù)測(cè)。在后續(xù)的教程中,我們還能看到其它展示數(shù)據(jù)的方法以及如何改良執(zhí)行任務(wù)所得的結(jié)果。
原文鏈接:

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn