【R扩展包】caret包运用
在大数据如火如荼的时候,机器学习无疑成为了炙手可热的工具,机器学习是计算机科学和统计学的交叉学科,旨在通过收集和分析数据的基础上,建立一系列的算法,模型对实际问题进行预测或分类。R语言无疑为我们提供了很好的工具,它正是计算机科学和统计科学结合的产物,开源免费,相对于Python、Orange Canvas、Weka、Kinme这些免费的数据挖掘软件来说,更容易上手,统计图形也更加美观。今天在这里和大家介绍一下Caret机器学习包的一些基本用法。
一、数据收集
下载kernlab包里的spam数据集,spam是一个邮件数据集,共有4601个观测值,58个变量,最后一个变量是一个二值变量,“spam”和“no spam”,我们要做的工作就是通过建立模型了预测观测值是否为“spam”。首先加载软件包和数据集:
library(caret) library(kernlab)
data(spam)
head(spam)
make address all num3d our over remove internet order mail receive will people report
1 0.00 0.64 0.64 0 0.32 0.00 0.00 0.00 0.00 0.00 0.00 0.64 0.00 0.00
2 0.21 0.28 0.50 0 0.14 0.28 0.21 0.07 0.00 0.94 0.21 0.79 0.65 0.21
3 0.06 0.00 0.71 0 1.23 0.19 0.19 0.12 0.64 0.25 0.38 0.45 0.12 0.00
4 0.00 0.00 0.00 0 0.63 0.00 0.31 0.63 0.31 0.63 0.31 0.31 0.31 0.00
5 0.00 0.00 0.00 0 0.63 0.00 0.31 0.63 0.31 0.63 0.31 0.31 0.31 0.00
6 0.00 0.00 0.00 0 1.85 0.00 0.00 1.85 0.00 0.00 0.00 0.00 0.00 0.00
、、、、、、
二、数据划分
机器学习一般将数据划分成训练数据、验证数据(可选)、测试数据、三个部分,训练数据和验证数据用来训练模型,估计模型的具体参数,测试数据用来验证模型预测的准确程度。下面我们就对spam这个数据进行划分
inTrain <- createDataPartition(y=spam$type,p=0.75,list=FALSE)
training <- spam[inTrain, ]
testing <- spam[-inTrain, ]
以上命令中createDataPartition( )就是数据划分函数,对象是spam$typ,p=0.75表示训练数据所占的比例为75%,list是输出结果的格式,默认list=FALSE。 training <- spam[inTrain, ],testing <- spam[-inTrain, ]分别制定具体的训练数据和测试数据。
三、训练模型
以上的工作完成后就可以将训练数据放入训练器中对模型参数进行训练了
modelFit <- train(type~.,data=training,method="glm") train( )函数就是我们的训练器,type~是回归方程,data=training指定数据集,method="glm"指定具体的模型形式,这里我们用的是glm估计,当然读者也可以用SVM(支持向量机),nnet神经网络等其他模型形式,以下是模型的具体内容:
modelFit$finalModel
Coefficients:
(Intercept) make address all num3d
-1.989e+00 -5.022e-01 -1.702e-01 1.553e-01 3.368e+00
our over remove internet order
7.554e-01 6.682e-01 2.220e+00 5.586e-01 1.144e+00
mail receive will people report
Degrees of Freedom: 3450 Total (i.e. Null); 3393 Residual
Null Deviance: 4628
Residual Deviance: 1335 AIC: 1451(篇幅有限,中间有删减)
四、验证模型
当模型的参数全部训练完毕后,就要将测试数据带入模型中进行验证预测了
predictions <- predict(modelFit,newdata=testing)
predictions####预测结果如下
[1] spam spam spam spam spam spam spam spam spam spam spam
[12] spam spam spam spam spam spam spam spam spam spam spam
[23] nonspam spam spam spam spam spam spam nonspam spam spam spam
[34] spam spam spam spam spam spam spam spam spam spam spam
[45] spam spam spam spam spam spam spam spam spam spam spam
五、错误分类矩阵
想知道模型预测的准确率如何呢?这个时候就要用到错误分类矩阵了,将模型预测的值和真实的值进行比较,计算错误分类率。通过观察错误分类矩阵,我们可知准确率为0.9252,结果还是很理想的。
confusionMatrix(predictions,testing$type)####输出结果如下
Confusion Matrix and Statistics
Reference
Prediction nonspam spam
nonspam 658 47
spam 39 406
Accuracy : 0.9252
95% CI : (0.9085, 0.9398)
No Information Rate : 0.6061
P-Value [Acc > NIR] : <2e-16
Kappa : 0.8429
Mcnemar's Test P-Value : 0.4504
Sensitivity : 0.9440
Specificity : 0.8962
Pos Pred Value : 0.9333
Neg Pred Value : 0.9124
Prevalence : 0.6061
Detection Rate : 0.5722
Detection Prevalence : 0.6130
Balanced Accuracy : 0.9201
来自:Cousera机器学习课程学习心得
更多精彩内容,请点击阅读原文。
数据人网(http://shujuren.org),数据人学习、交流和分享的家园,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值。为“让人懂数据、用数据”之使命坚持做点事情。大家可以来投稿,做分享和传播,可以给反馈。您有什么想法,请反馈给我们,谢谢。数据人网,我们共建和共享。
数据人网构建了数据人圈子,诚邀热爱数据和利用数据朋友入群。加小编微信:luqin360,注明入圈子。
数据人网官方公众号:数据科学自媒体,分享数据科学干货。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!