R做机器学习简易教程
本文介绍如何利用R语言做一个完整的机器学习项目。一个小项目,端到端,遵循机器学习的实施的工作流,系统地完成项目。
-
1 搭建R机器学习环境
-
1.1 R软件下载和安装
-
1.2 R机器学习包
-
2 业务问题和数据理解
-
3 数据准备
-
3.1 数据处理
-
3.2 数据探索
-
3.3 数据分解
-
4 数据建模
-
4.1 交叉验证
-
4.2 构建模型
-
5 模型评价
-
6 模型应用
-
7 总结
1 搭建R机器学习环境
搭建R机器学习环境是一件简单而有趣的事情。
1.1 R软件下载和安装
R语言是跨平台,根据电脑操作系统和位数选择下载和安装合适的R软件。
R软件下载地址:R官网。
1.2 R机器学习包
R做机器学习需要安装R包。R中有很多R包可以完成机器学习里面的某些任务,推荐阅读《RForML核心包》系列文章。
本文使用caret包,安装和加载代码。
if(!require('caret'))
{
install.packages('caret')
require('caret')
}
caret包更详细的资料见The caret Package。
2 业务问题和数据理解
业务问题和数据理解,关键要解决好这些问题:
-
为什么要做这个机器学习项目?
-
这个机器学习项目是做什么?
-
做这个机器学习项目需要什么数据?数据的准确性和完整性目前是什么状况?
本文机器学习项目的目的是介绍R语言解决一个具有确定性类别的分类问题,分类是我们擅长的事情,如何把这种事情让机器来做,从而实现自动化和智能化,这富有挑战也饱含意义。
通过这样的一个项目,给更多人如何基于R语言做机器学习项目提供一种整体思路和系统方案。
本文选择的iris数据集,它是一个经典的公开的数据集。iris数据集详细介绍见Iris flower data set
3 数据准备
当知道了为什么要做这个机器学习项目和这个机器学习是要做什么后,当确定了做这个机器学习项目的数据集是什么以及在哪里后,这个时候,就到了数据准备阶段了。
数据准备阶段是需要花费大量时间和精力去做的事情。数据准备主要包括对数据的处理、探索和分解。
3.1 数据处理
iris数据集是R语言自带的数据集,可以拿来直接使用。顺便说一下,R语言和R包都提供了丰富的数据集,刚开始学习,可以基于这些数据集来解决机器学习各种问题。
数据加载
代码
data(iris)
iris.data <- iris
3.2 数据探索
数据探索,即对数据做探索性分析,从数据源头开始认识和深入理解数据,发现数据里面所含的特性。
数字化描述
1 数据集结构
使用str函数查看数据集结构,获取到如下信息
iris数据集有150个样本和5个变量,前4个变量的类型是数值类型,第5个变量的类型是因子类型。
因子类型的分布
iris数据集类别变量的分布是均匀分布,各占1/3
2 数据集预览
获取数据Top或者Bottom记录,使用head函数或者tail函数。例如
或者
3 数据集摘要
R语言使用summary函数获取数据集摘要,对于数值型变量返回5个数字化特征:最小值,第一分位数,中位数,均值,第三分位数和最大值,对于因子型变量,返回每个类别的频数。
可视化描述
1 单变量可视化
单变量可视化,即针对数据集中的单个变量画图,通过图形观察和理解变量的分布情况。
输入变量可视化
input.val <- iris.data[,1:4]
par(mfrow=c(1,4))
for(i in 1:4) {
boxplot(input.val[,i], main=names(iris.data)[i])
}
输出变量可视化
par(mfrow=c(1,1))
output.val <- iris.data[,5]
plot(output.val)
2 多变量可视化
多变量可视化,即对数据集多变量之间关系进行可视化,主要是双变量可视化。
library(caret)
library(ellipse)
featurePlot(x=input.val, y=output.val, plot = 'ellipse')
观察每一种类别下各种变量的box图
library(caret)
featurePlot(x=input.val, y=output.val, plot = 'box')
3.3 数据分解
为了数据建模中的模型选择,我们把数据集分解为训练数据集和验证数据集或者训练数据集-验证数据集-测试数据集。在这里我们选择了前者,按着8:2比例基于各个样本类别的情况进行了分解。
参考代码
# 获取原数据集的80%的行索引号
validation.index <- createDataPartition(iris.data$Species, p=0.80, list=FALSE)
# 选择20%的数据用来验证模型
validation.data <- iris.data[-validation.index,]
# 选择80%的数据用来训练和测试模型
train.data <- iris.data[validation.index,]
4 数据建模
4.1 交叉验证
为了选择最佳或者最优模型,采用一种典型的处理方法,交叉验证方法。常用10-折交叉验证。
control <- trainControl(method="cv", number=10)
metric <- "Accuracy"
4.2 构建模型
caret包实现了许多机器学习分类算法,在这里选择LDA、CART和RF算法。
# a) 线性算法
library(e1071)
set.seed(7)
lda.model <- train(Species~., data=train.data, method="lda", metric=metric, trControl=control)
# b) 非线性算法
library(rpart)
set.seed(7)
cart.model <- train(Species~., data=train.data, method="rpart", metric=metric, trControl=control)
# c) advanced algorithms
# Random Forest
library(randomForest)
set.seed(7)
rf.model <- train(Species~., data=train.data, method="rf", metric=metric, trControl=control)
5 模型评价
分类模型的常用评价指标采用分类准确率。
根据LDA/CART/RF模型的分类准确率选择最佳模型
代码
results.model <- resamples(list(lda=lda.model, cart=cart.model, rf=rf.model))
summary(results.model)
结果
或者利用可视化,更加直观地做模型择优
代码
dotplot(results.model)
结果
针对iris数据集,LDA算法最佳。
6 模型应用
利用LDA算法对验证的数据集进行测试和分类,计算分类的精度和通过混淆矩阵评价分类的效果。
代码:
pred.result <- predict(lda.model, validation.data)
confusionMatrix(pred.result, validation.data$Species)
部分结果:
关于confusionMatrix函数详细文档,参加help(confusionMatrix)。
7 总结
一个完整的机器学习项目,包括业务问题、数据理解、数据准备、数据建模、模型评价和模型应用,这些环节相辅相成,构成一个系统。因此,在做机器学习项目的时候,每个环节里面要做什么,为什么要做,都要清清楚楚,然后就是怎么有效地做。不断迭代,持续优化的互联网文化和精神,在做机器学习项目中,依然焕发生机。
您在阅读中,有什么建议或者想法,请留言。
想加入数据人圈子,请加微信luqin360。
数据人网http://shujuren.org是数据人学习、交流和分享的平台。数据人网提供和传播优质的省时的稀缺的数据知识。
诚邀各位数据人参与,共建共享数据知识库。
点击【阅读原文】,进入【数据人网】
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!