彩票走势图

R做你的第一个机器学习项目教程(三)

转帖|使用教程|编辑:龚雪|2017-04-18 10:57:48.000|阅读 378 次

概述:如果你是一个机器学习的初学者,本系列文章将教你用R语言开启机器学习之旅

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

文|陆勤

5.评估算法

现在,我们需要创建一些模型来对我们模型里一些未知的值进行精度的评估。

我们现在需要进行以下步骤操作:

1用10交叉验证建立测试用具

2建立5个不同的模型对每种不同的花进行预测。

3选出最佳模型。

5.1测试用具

我们要通过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.2建模

我们并不知道怎样的算法适合解决这个问题,也不知道它到底是怎样的结构。我们可以从一些图像中得到相关信息,而这些图像则是一些层次部分地线性分离到一些维度里,所以,我们通常都期待这是一个不错的结果。

现在,我们评估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.3选择最佳模型

我们现在得到了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的结果进行汇总:

summarize Best Model

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@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP