【R教程】
编者按:
延续R做你的第一个机器学习项目教程(二),大家在阅读过程中有什么建议或者反馈,请给我们留言。
5.评估算法
现在,我们需要创建一些模型来对我们模型里一些未知的值进行精度的评估。
我们现在需要进行以下步骤操作:
1用10交叉验证建立测试用具
2建立5个不同的模型对每种不同的花进行预测。
3选出最佳模型。
5.1测试用具
我们要通过10交叉验证进行模型精度评估。
这时我们要把我们的数据集分成10个部分,9个部分用于训练,1个用于测试,而且我们还会释放每个测试部分的所有组合。我们也会对每个算法和10个数据集部分重复这个过程3次,就是为了能得到模型的精度评估。
1 2 3 |
# Run algorithms using 10-fold cross validation control <- trainControl(method="cv", number=10) metric <- "Accuracy" |
我们现在使用“精准度”这个度量来评估模型。这是一个源自每个分开的部分里所得到的一个比率,表示正确的预测实例的数量的比率,它通过正确的预测实例数除以总实例数乘于100%所得的一个百分数(比如精度为95%)。我们还会在接下来建立与评估每个模型的时候使用metic这个变量。
5.2建模
我们并不知道怎样的算法适合解决这个问题,也不知道它到底是怎样的结构。我们可以从一些图像中得到相关信息,而这些图像则是一些层次部分地线性分离到一些维度里,所以,我们通常都期待这是一个不错的结果。
现在,我们评估5个不同的算法:
线性判别分析(LDA)
分类树和回归树(CART)
K近邻(kNN)
有线性核的支持向量机(SVM)
随机森林(RF)
这是一个很好的简单线性混合(LDA),非线性(CART,kNN)和复杂的非线性方法(SVM,RF)。我们在运行之前重新设定随机数,并保证每个算法的评估都是在使用相同的数据拆分的条件下运行的。这可以保证所有的结果都具有可比性。
现在,我们建立这5个模型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# a) linear algorithms set.seed(7) fit.lda <- train(Species~., data=dataset, method="lda", metric=metric, trControl=control) # b) nonlinear algorithms # CART set.seed(7) fit.cart <- train(Species~., data=dataset, method="rpart", metric=metric, trControl=control) # kNN set.seed(7) fit.knn <- train(Species~., data=dataset, method="knn", metric=metric, trControl=control) # c) advanced algorithms # SVM set.seed(7) fit.svm <- train(Species~., data=dataset, method="svmRadial", metric=metric, trControl=control) # Random Forest set.seed(7) fit.rf <- train(Species~., data=dataset, method="rf", metric=metric, trControl=control) |
Caret支持每个模型的结构和协调配置结构,但是我们并不会在这个教程里展示。
5.3选择最佳模型
我们现在得到了5个模型,并知道了每个模型的评估情况。我们需要对这些模型进行相互比较,从而选出精度更好的模型。
我们首先可以对每个模型创建一系列已经建立好的模型并使用summary函数来报告它们的精度。
1 2 3 |
# summarize accuracy of models results <- resamples(list(lda=fit.lda, cart=fit.cart, knn=fit.knn, svm=fit.svm, rf=fit.rf)) summary(results) |
我们可以查看每个分离器的精度,也可以看一下诸如Kappa度量:
5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Models: lda, cart, knn, svm, rf Number of resamples: 10
Accuracy Min. 1st Qu. Median Mean 3rd Qu. Max. NA's lda 0.9167 0.9375 1.0000 0.9750 1 1 0 cart 0.8333 0.9167 0.9167 0.9417 1 1 0 knn 0.8333 0.9167 1.0000 0.9583 1 1 0 svm 0.8333 0.9167 0.9167 0.9417 1 1 0 rf 0.8333 0.9167 0.9583 0.9500 1 1 0
Kappa Min. 1st Qu. Median Mean 3rd Qu. Max. NA's lda 0.875 0.9062 1.0000 0.9625 1 1 0 cart 0.750 0.8750 0.8750 0.9125 1 1 0 knn 0.750 0.8750 1.0000 0.9375 1 1 0 svm 0.750 0.8750 0.8750 0.9125 1 1 0 rf 0.750 0.8750 0.9375 0.9250 1 1 0 |
我们也可以根据某些的评估结果作图然后比较它们的扩散情况以及每个模型的均值精度。这里有一个针对每个算法的容量的精度测试,由于每个算法都进行了10次预测(10交叉验证)。
1 2 |
# compare accuracy of models dotplot(results) |
我们可以看到,精度最高的算法是LDA:
我们可以对LDA的结果进行汇总:
#summarize Best Model
print(fit.lda)
这个汇总做的很不错,它很好的归纳了用什么训练模型,同时,它的均值和标准差(SD)均在一个理想的范围内,所以模型精度不错,为97.5%+/-4%。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Linear Discriminant Analysis
120 samples 4 predictor 3 classes: 'setosa', 'versicolor', 'virginica'
No pre-processing Resampling: Cross-Validated (10 fold) Summary of sample sizes: 108, 108, 108, 108, 108, 108, … Resampling results
Accuracy Kappa Accuracy SD Kappa SD 0.975 0.9625 0.04025382 0.06038074 |
6. 做预测
LDA是精度最高的算法。我们现在要从你的测试数据集那里找到这个模型精度的相关信息。
这时,我们需要对所得的最佳模型进行最后的模型精度检验。如果你不小心犯了一些小错误如测试时在你的训练数据集中出现了过度拟合情况,或者数据被泄露了出去,那么保留一个测试数据集是应付这种情况的好办法。
现在我们在测试数据集上直接运行LDA模型,并对所得的含混矩阵的结果进行汇总。
1 2 3 |
# estimate skill of LDA on the validation dataset predictions <- predict(fit.lda, validation) confusionMatrix(predictions, validation$Species) |
我们看到精度高达100%。这是一个小的测试数据集(20%),但是这个结果在97%+/-4%范围内,这告诉我们,这个模型也许就是精度高且可靠性好的模型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Confusion Matrix and Statistics
Reference Prediction setosa versicolor virginica setosa 10 0 0 versicolor 0 10 0 virginica 0 0 10
Overall Statistics
Accuracy : 1 95% CI : (0.8843, 1) No Information Rate : 0.3333 P-Value [Acc > NIR] : 4.857e-15
Kappa : 1 Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica Sensitivity 1.0000 1.0000 1.0000 Specificity 1.0000 1.0000 1.0000 Pos Pred Value 1.0000 1.0000 1.0000 Neg Pred Value 1.0000 1.0000 1.0000 Prevalence 0.3333 0.3333 0.3333 Detection Rate 0.3333 0.3333 0.3333 Detection Prevalence 0.3333 0.3333 0.3333 Balanced Accuracy 1.0000 1.0000 1.0000 |
你现在可以运行机器学习项目了
根据这个教程进行操作,你能在5-10分钟内就能完成,最多不超过10分钟!
你 并不需要明白所有事情。(最少不是现在)你的目标就是根据这个教程运行一个端到端的项目,并得到相关结果。就目前而已,你不需要对所有的事情都一清二楚。 在你执行的时候,你可以把你的问题列举出来。你可以多使用?函数名、帮助文档的语法结构来获悉你目前所用的函数的相关信息。
你并不需要知道这些算法是怎么运行的。知道其中的局限性很重要,怎样配置好的机器学习算法也很重要。但是,学习算法可以迟一点学。你需要在接下来的一段时间内慢慢的学习算法的相关知识。今天,你就好好享受一下在这个平台里运行算法所给你带来的乐趣吧。
你 并不需要成为R程序员。R语言的语法结构其实看起来确实挺让人费解的。就像我们学习其它语言那样,专注于函数的调用功能(诸如function())以及 任务(比如a<-“b”)。这里已经给你提供了很多操作上的便利。你是一个开发人员,你知道如何选择一个真正运行速度快的基础语言,然后,你就开始 学习它,更多的细节以后慢慢了解。
你并不需要成为机器学习方面的专家。你在学习的过程中,到了后面,你就会知道你在学习过程中获得什么益处,也知道哪方面存在不足。往后,你能看到足够多的文章来整理机器学习项目的执行步骤,同时也会知道使用交叉检验对于评估精度的重要性。
那么,机器学习项目还有没有别的步骤?我们并不需要在一篇文章里讲完所有的步骤,因为这是你的第一个项目,而且,你需要更多的落实到核心的步骤。换句话说,观察数据,评估一些算法以及作出相关预测。在后续的教程中,我们还能看到其它展示数据的方法以及如何改良执行任务所得的结果。
原文链接:http://machinelearningmastery.com/machine-learning-in-r-step-by-step/
作者介绍:
品言译,陆勤审。
品言,热爱英语和数据科学。
陆勤,深圳数据挖掘师,热爱数据,专注从数据中学习。
严禁修改,可以转载,请注明出自数据人网和原文链接:http://shujuren.org/index.php/Article/update/aid/172
更多精彩内容,请点击阅读原文。
数据人网(http://shujuren.org),数据人学习、交流和分享的家园,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值。为“让人懂数据、用数据”之使命坚持做点事情。大家可以来投稿,做分享和传播,可以给反馈。您有什么想法,请反馈给我们,谢谢。数据人网,我们共建和共享。
数据人网构建了数据人圈子,诚邀热爱数据和利用数据朋友入群。加小编微信:luqin360,注明入圈子。
数据人网官方公众号:数据科学自媒体,分享数据科学干货。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!