轉帖|使用教程|編輯:龔雪|2017-04-18 10:57:48.000|閱讀 423 次
概述:如果你是一個機器學習的初學者,本系列文章將教你用R語言開啟機器學習之旅
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
文|陸勤
現在,我們需要創建一些模型來對我們模型里一些未知的值進行精度的評估。
我們現在需要進行以下步驟操作:
1用10交叉驗證建立測試用具
2建立5個不同的模型對每種不同的花進行預測。
3選出最佳模型。
我們要通過10交叉驗證進行模型精度評估。
這時我們要把我們的數據集分成10個部分,9個部分用于訓練,1個用于測試,而且我們還會釋放每個測試部分的所有組合。我們也會對每個算法和10個數據集部分重復這個過程3次,就是為了能得到模型的精度評估。
1 # Run algorithms using 10-fold cross validation 2 control <- trainControl(method=”cv”, number=10) 3 metric <- “Accuracy”
我們現在使用“精準度”這個度量來評估模型。這是一個源自每個分開的部分里所得到的一個比率,表示正確的預測實例的數量的比率,它通過正確的預測實例數除以總實例數乘于100%所得的一個百分數(比如精度為95%)。我們還會在接下來建立與評估每個模型的時候使用metic這個變量。
我們并不知道怎樣的算法適合解決這個問題,也不知道它到底是怎樣的結構。我們可以從一些圖像中得到相關信息,而這些圖像則是一些層次部分地線性分離到一些維度里,所以,我們通常都期待這是一個不錯的結果。
現在,我們評估5個不同的算法:
線性判別分析(LDA)
分類樹和回歸樹(CART)
K近鄰(kNN)
有線性核的支持向量機(SVM)
隨機森林(RF)
這是一個很好的簡單線性混合(LDA),非線性(CART,kNN)和復雜的非線性方法(SVM,RF)。我們在運行之前重新設定隨機數,并保證每個算法的評估都是在使用相同的數據拆分的條件下運行的。這可以保證所有的結果都具有可比性。
現在,我們建立這5個模型:
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支持每個模型的結構和協調配置結構,但是我們并不會在這個教程里展示。
我們現在得到了5個模型,并知道了每個模型的評估情況。我們需要對這些模型進行相互比較,從而選出精度更好的模型。
我們首先可以對每個模型創建一系列已經建立好的模型并使用summary函數來報告它們的精度。
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)
我們可以查看每個分離器的精度,也可以看一下諸如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
我們也可以根據某些的評估結果作圖然后比較它們的擴散情況以及每個模型的均值精度。這里有一個針對每個算法的容量的精度測試,由于每個算法都進行了10次預測(10交叉驗證)。
1.1 # compare accuracy of models 2. 3.2 dotplot(results)
我們可以看到,精度最高的算法是LDA:
我們可以對LDA的結果進行匯總:
print(fit.lda)
這個匯總做的很不錯,它很好的歸納了用什么訓練模型,同時,它的均值和標準差(SD)均在一個理想的范圍內,所以模型精度不錯,為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
做預測
LDA是精度最高的算法。我們現在要從你的測試數據集那里找到這個模型精度的相關信息。
這時,我們需要對所得的最佳模型進行最后的模型精度檢驗。如果你不小心犯了一些小錯誤如測試時在你的訓練數據集中出現了過度擬合情況,或者數據被泄露了出去,那么保留一個測試數據集是應付這種情況的好辦法。
現在我們在測試數據集上直接運行LDA模型,并對所得的含混矩陣的結果進行匯總。
1 # estimate skill of LDA on the validation dataset 2 predictions <- predict(fit.lda, validation) 3 confusionMatrix(predictions, validation$Species)
我們看到精度高達100%。這是一個小的測試數據集(20%),但是這個結果在97%+/-4%范圍內,這告訴我們,這個模型也許就是精度高且可靠性好的模型。
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
你現在可以運行機器學習項目了
根據這個教程進行操作,你能在5-10分鐘內就能完成,最多不超過10分鐘!
你并不需要明白所有事情。(最少不是現在)你的目標就是根據這個教程運行一個端到端的項目,并得到相關結果。就目前而已,你不需要對所有的事情都一清二楚。在你執行的時候,你可以把你的問題列舉出來。你可以多使用?函數名、幫助文檔的語法結構來獲悉你目前所用的函數的相關信息。
你并不需要知道這些算法是怎么運行的。知道其中的局限性很重要,怎樣配置好的機器學習算法也很重要。但是,學習算法可以遲一點學。你需要在接下來的一段時間內慢慢的學習算法的相關知識。今天,你就好好享受一下在這個平臺里運行算法所給你帶來的樂趣吧。
你并不需要成為R程序員。R語言的語法結構其實看起來確實挺讓人費解的。就像我們學習其它語言那樣,專注于函數的調用功能(諸如function())以及任務(比如a<-“b”)。這里已經給你提供了很多操作上的便利。你是一個開發人員,你知道如何選擇一個真正運行速度快的基礎語言,然后,你就開始學習它,更多的細節以后慢慢了解。
你并不需要成為機器學習方面的專家。你在學習的過程中,到了后面,你就會知道你在學習過程中獲得什么益處,也知道哪方面存在不足。往后,你能看到足夠多的文章來整理機器學習項目的執行步驟,同時也會知道使用交叉檢驗對于評估精度的重要性。
那么,機器學習項目還有沒有別的步驟?我們并不需要在一篇文章里講完所有的步驟,因為這是你的第一個項目,而且,你需要更多的落實到核心的步驟。
換句話說, 觀察數據,評估一些算法以及作出相關預測。在后續的教程中,我們還能看到其它展示數據的方法以及如何改良執行任務所得的結果。
原文鏈接:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn