教你用R实现第一个机器学习项目_光环大数据推出AI智客计划送2000助学金

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

教你用R实现第一个机器学习项目_光环大数据推出AI智客计划送2000助学金你是否想要用R做机器学习,但又苦恼于怎么开始做?
在这篇文章里你将会用R完成你的第一个机器学习项目。

在这个逐步教程里,你需要做:
1 下载和安装R并且获取用做机器学习非常有用的R包。

2 导入一个数据集并且用统计分析和数据可视化来理解它的结构。

3 创建5个机器学习模型,选择最好和建立精度是可靠的置信。

如果你是一个机器学习新手,而且还在找一个你最终会选择的方案来学习机器学习的话,这个教程就是针对你设计的。

让我们现在开始吧。

怎样用R开始你的机器学习?
学习机器学习最好的方法就是设计并实现一系列小项目。

初学R的时候你可能回觉得这有点可怕
R在编写脚本时所提供的语法结构是比较奇怪的。

这里有几百个R包和几千个函数让你选择,给每个任务提供了多种解决方法,所以这会让你感到有点吃不
消。

所以说,在R上开始机器学习最好的方法就是要完成一个项目。

1 这需要你安装并开始学习使用R(至少会一点点)。

2 它能给你更开阔的视角来理解如何一步步进行机器学习。

3 它会给你自信,来源于你完成一个小项目的成就感。

入门的人需要完成一个端对端的项目
光看书或课程会让你觉得很吃不消,它们给你提供的是一系列的解决方法和代码段,但是,你永远都不知道怎样把他们综合起来使用。

当你要把机器学习运用到你的数据集的时候,其实你就是在做一个项目。

一个机器学习项目可能不是线性的,但是,有些有用的方法你可以按顺序的遵循:
1定义问题
2 准备好数据
3 评估算法
4 改良结果
5 展示最终结果
如果你想要了解更多关于机器学习的步骤,你可以查阅这一清单,这一清单对这个过程讲的更详细。

与一个新的平台或工具达成协议的最好方法就是完成端对端的机器学习项目,并按照之前给的步骤执行。

也就是说,从载入数据开始,然后汇总你的数据,接下来评估你的算法,同时改良你的结果,并在最后作适当的展示。

如果你是这么做的话,你就会在你处理完数据以后,有了一个模板来对新的数据集进行研究。

你甚至还可以通过数据展示和改良相关的结果来填补你先前做任务的时候留下来的空缺。

一旦你这么做了,你就会有信心了。

机器学习的Hello World
利用新的工具进行小项目的最好方法就是首先从iris的分类数据集开始。

这是一个好的项目,因为它简单明了。

1里面的属性是数字,所以,你会觉得导入和处理数据会非常上手。

2 这是一个分类问题,或许能允许你使用简单的监督学习算法进行练习。

3 这是一个多级分类问题(多含义),而它需要一些特别的方法来处理。

4 它只有4个属性和150行数据,说明这对于内存来说很小,而且处理起来很快(一张A4纸大小那样)。

5 所有的数字属性都在同一个单元,它们的规模也相同,它不需要转化成特别的形式或者使用特殊的定位。

在R中让我们开始您的Helloworld机器学习项目。

R中做机器学习:逐步学习的教程(在这里开始)
在这一部分的内容中,我们要完成一个小的端到端机器学习项目。

这里,我们浏览一下我们接下来要干什么:
1 安装R平台
2 载入数据
3 汇总数据集
4 对数据集进行可视化操作
5 评估一些算法
6 做一些相关预测
慢慢来,认真的落实好每一步。

你可以尝试自己写代码,或者从别的地方复制相关的代码来提高工作效率。

如果有什么问题,你可以在文章的最后的地方留言。

1 下载安装并开始使用R
如果你的系统还没有R平台,那就现在安装一个吧。

更新:这个教程是根据R 3.2.3版写的,所以,如果你的版本比较旧,那么,你就需要更新一下了。

我不想在这里讲太多的细节,其他文章已经讲的很清楚了。

这已经讲的直接明了,尤其你是一名开发人员的时候。

如果你需要求助,你可以在留言板写出你的问题。

这里,你要遵循几个步骤:
1 下载R
2 安装R
3 开始使用R
4 下载相关R包
1.1下载R
你可以从 The R Project webpage下载R。

当你点击这个下载链接时,你需要选择镜像。

你可以根据你的操作系统选择R,如Windows、OSX或者Linux。

1.2安装R
安装R很容易的,而且我也相信你可以解决。

这里没有其它特别的要求。

如果你在安装R的时候遇到什么问题需要求助的话,你可以看一下 R Installation and Administration。

1.3开始使用R
你可以在操作系统上看到的选择任意菜单系统使用R。

对于我而已,我更喜欢命令行。

打开你的命令行,改变(或者创建)你的项目目录,并且在命令行输入以下代码:
R
您应该在一个新的窗口或者您的终端上看到一个像如下的屏幕截图:
1.4安装R包
安装我们今天要使用的R包。

这些包是第三方附加组件或者可以在R使用的库。

install.packages("caret")
更新:我们也许需要其它包,但是caret会问到我们是否要安装它。

如果你对于这些包有什么疑问的话,你可以先安装caret包,然后你可以输入下面的代码来看一下你需要什么包:
install.packages("caret", dependencies=c("Depends", "Suggests"))
现在,我们加载一下caret包,然后开始在我们的教程里使用这个包。

library(caret)
caret包给上百个机器学习算法提供了相应接口,并给数据可视化、数据采样、模型调整以模型比较这些功能提供了便利的方法。

我们必须要在R里有进行机器学习的工具。

如果你想要了解更多关于caret这个R包的内容,查阅一下caret package homepage这篇文章。

2载入数据
我们将要使用iris这个数据集。

这个数据集是非常有名的,因为这是机器学习和统计学里的”hello world”类数据集,这对于每个人来说都非常实用。

这个数据集含有150个观测值,而且这个数据集有4列,这些列表示花的直径的测量。

而这个数据集的第五列就是花的类型,而所有的观测值则是3种花里的其中一种。

关于这个数据集的更多细节,你可以上维基百科寻找,网址:https:///wiki/Iris_flower_data_set。

接下来,我们要对这个数据集进行如下操作:
1 以一个简单的方式导入iris数据集
2 以CSV格式(其它格式也可以)导入iris数据集
3 把这个数据集分解成训练数据集和验证数据集
你可以自行选择方法导入这些数据,或者直接按照上面的步骤执行。

2.1以一个简单的方式导入iris数据集
幸运的是,iris这个数据集是系统自带的,也就是说安装好R以后就有。

现在,按照以下操作导入数据:
# attach the iris dataset to the environment
data(iris)
# rename the dataset
dataset <- iris
这时你已经完成了iris数据集的导入,现在,你需要检验这个数据集了。

我喜欢把载入的数据称为“数据集”。

如果你想对你的项目和数据集(它们之间总是名字相同)之间进行代码的粘贴,那么,这里确实会给到你帮助。

2.2载入CSV格式数据
也许,你是一个纯粹主义者,而且,你是想以你自己的方式导入CSV格式的数据集到你的机器学习项目的话,可以参照下面的做法:
从 UCI Machine Learning Repository (这里有一个直接找到这个数据集的链接)这里下载iris数据集。

把文件以iris.csv的形式保存的你的工作目录中。

载入CSV格式数据详细操作如下:
# define the filename
filename <- "iris.csv"
# load the CSV file from the local directory
dataset <- read.csv(filename, header=FALSE)
# set the column names in the dataset
colnames(dataset)
<-
c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species")你现在已经载入好iris数据集,同时也可以使用里面的变量了。

2.3创建一个验证数据集
我们需要知道我们现在所建立的模型足够好。

然后,我们会在那些未知的数据中运用相关统计方法建模以预测这些模型的精度。

我们还需要进行更多高质量的模型精度测试以估计出这个模型是否在这些未知的数据中是最好的,这样我们要通过对真实的未知的数据进行估计。

这时,我们需要看回我们的数据集,而我们所用的算法将看不到这些数据,而我们就是要用这些数据来得到其次而独立的,关于如何知道最好的模型大致是怎样的情况这一定论。

我们要把这个数据集进行分离操作,80%的数据用于进行进行训练,而剩下的20%则用来进行验证。

# create a list of 80% of the rows in the original dataset we can use for training
validation_index <- createDataPartition(dataset$Species, p=0.80, list=FALSE)
# select 20% of the data for validation
validation <- dataset[-validation_index,]
# use the remaining 80% of data to training and testing the models dataset <- dataset[validation_index,]
在数据集中你现在有了训练数据集和将在后来要用到的验证变量的验证集。

注意我们采用80%的样本数据取代我们的数据集,这个尝试为了让我们后面代码更简洁和可读。

3.对数据集进行汇总
现在,是时候要看看我们的数据了。

在这一步,我们会用不同的方法来看这个数据集:
1这个数据集的维度。

2属性的类型。

3查看你的数据集。

4分类属性的层次。

5每一类所产生的异常值。

6对于所有属性的统计归纳。

不要担心,看到的数据都是以一行命令的形式展现。

这些命令是非常有用的,尤其是你想要进行你项目的后续工作时。

3.1数据集的维度
我们快速浏览一下dim函数里一共有多少实例(行)以及多少个属性(列)。

# dimensions of dataset
dim(dataset)
你应该能看到120个实例和5个属性:
[1] 120 5
3.2属性的类型
得到这些属性的相关信息是一个不错的主意。

它们可以是双精度值、整数值、字符串、因子和其它类型。

知道这些类型是很重要的,就像告诉你怎样更好的汇总你所得到的数据以及它们的类型的转换形式那样,你也许在建模之前就会这样的去准备数据。

# list types for each attribute
sapply(dataset, class)
你应该能看到输入值是双精度类型,而它的分类类型则是因子。

Sepal.Length Sepal.Width Petal.Length Petal.Width Species "numeric" "numeric" "numeric" "numeric" "factor"
3.3查看你的数据集
预览一下你的数据也是一个不错的主意。

# take a peek at the first 5 rows of the data
head(dataset)
你可以看一下前5行的数据:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.
2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
5 5.0 3.
6 1.4 0.2 setosa
6 5.4 3.9 1.
7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
3.4分类的层次
分类变量就是因子的一种形式。

一个因子的分类有很多分类标签或层次,让我们看看这些层次:
# list the levels for the class
levels(dataset$Species)
留意一下我们上面是怎样把数据集里的属性转换成合适的名字的形式。

下面的结果我们可以看到3个标签:
[1] "setosa" "versicolor" "virginica"
这是一个多层次或多项的分类问题。

这里如果有2个层次,那么它是一个二次分类问题。

3.5类别的分布
现在,我们看一下数据集里的实例(行)都属于什么类型。

我们可以以绝对值和百分数的形式观察它们:
# summarize the class distribution
percentage <- prop.table(table(dataset$Species)) * 100
cbind(freq=table(dataset$Species), percentage=percentage)
我们可以看到,每个层次都有相同数量的实例(这个数据集的40%或33%)。

freq percentage
setosa 40 33.33333
versicolor 40 33.33333
virginica 40 33.33333
3.6统计归纳
现在到了最后,我们看一下统计归纳以后各属性的相关信息。

这里包含平均值、最值,以及分位数(25分位数、中位数、75分位数等等处在分位点的数,只要我们要求哪个分位点的数表示出来,它都可以在相关属性中展现出来)。

# summarize attribute distributions
summary(dataset)
我们现在看到了所有数值属性都含有相同的刻度(厘米)以及相似的厘米区间[0,0.8]。

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.00 Min. :1.000 Min. :0.100 setosa :40
1st Qu.:5.100 1st Qu.:2.80 1st Qu.:1.575 1st Qu.:0.300 versicolor:40 Median :5.800 Median :3.00 Median :4.300 Median :1.350 virginica :40 Mean :5.834 Mean :3.07 Mean :3.748 Mean :1.213
3rd Qu.:6.400 3rd Qu.:3.40 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.40 Max. :6.900 Max. :2.500
4.数据可视化操作
现在,我们对数据集进行初步的探索。

我们需要运用数据可视化操作进行更深层次的探索。

接下来,我们将要看到2种图像:
1画单变量图以了解每个属性的相关信息。

2画多变量图来了解每个属性之间存在的关系。

4.1单变量图像
我们从单变量图像开始,看看图像里每个变量大致的分布情况。

运用可视化操作把数据里的输入属性和输出属性转化为相关信息。

现在我们开始画单变量图像,且设输入变量为x,输出变量为y(或者层次):
# split input and output
x <- dataset[,1:4]
y <- dataset[,5]
我们看到输入变量是数值形式,接下来,我们画一下箱图和条形图:
# boxplot for each attribute on one image
par(mfrow=c(1,4))
for(i in 1:4) {
boxplot(x[,i], main=names(iris)[i])
}
这样就把输入变量的分布情况清清楚楚的展现出来:
我们也可以对特殊的层次变量作条形图来得到数据里各个分类在图像里的分布情况(通常来说它看起来很无趣,因为这种图像看起来平的)。

plot(y)
4.2多变量图像
现在,我们看一下变量之间的相关关系。

首先,我们对所有的属性两两的作散点图,并通过它们的层次设置不同的颜色。

此外,由于散点图在展示每个层次的点都是分开来的,我们可以在这些点周围画一个椭圆。

# scatterplot matrix
featurePlot(x=x, y=y, plot="ellipse")
现在,我们对分类变量里的输入变量属性和输出变量属性直接的关系有了清楚的认识:
我们也可以再一次以箱图和晶须图的形式观察输入变量,但是这一次我们要根据层次把这些点分开来。

这能让我们在各层次之间的线性分离中有效地提取相关信息。

# box and whisker plots for each attribute
featurePlot(x=x, y=y, plot="box")
这对于我们清楚观察每个层次的值的属性的不同分布是非常有用的。

接下来,我们从每个属性的分布中提取相关信息,我们再一次运用箱图和晶须图,同样把层次的值进行分离。

有时使用直方图能取得良好的效果,但这一次,我们会使用密度函数图像,并配上平滑的曲线来展示每一个属性的分布情况:
# density plots for each attribute by class value
scales <- list(x=list(relation="free"), y=list(relation="free")) featurePlot(x=x, y=y, plot="density", scales=scales)
就像箱图所展示的那样,我们可以看到不同层次里每个熟悉的分布。

我们也可以看到每个属性所呈现的高斯分布(钟形曲线)图像:
5.评估算法
现在,我们需要创建一些模型来对我们模型里一些未知的值进行精度的评估。

我们现在需要进行以下步骤操作:
1用10交叉验证建立测试用具
2建立5个不同的模型对每种不同的花进行预测。

3选出最佳模型。

5.1测试用具
我们要通过10交叉验证进行模型精度评估。

这时我们要把我们的数据集分成10个部分,9个部分用于训练,1个用于测试,而且我们还会释放每个测试部分的所有组合。

我们也会对每个算法和10个数据集部分重复这个过程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个模型:
# 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函数来报告它们的精度。

# 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度量:
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交叉验证)。

# compare accuracy of models
dotplot(results)
我们可以看到,精度最高的算法是LDA:
我们可以对LDA的结果进行汇总:
# summarize Best Model
print(fit.lda)
这个汇总做的很不错,它很好的归纳了用什么训练模型,同时,它的均值和标准差(SD)均在一个理想的范围内,所以模型精度不错,为97.5%+/-4%。

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模型,并对所得的含混矩阵的结果进行汇总。

# estimate skill of LDA on the validation dataset
predictions <- predict(fit.lda, validation)
confusionMatrix(predictions, validation$Species)
我们看到精度高达100%。

这是一个小的测试数据集(20%),但是这个结果在97%+/-4%范围内,这告诉我们,这个模型也许就是精度高且可靠性好的模型。

你现在可以运行机器学习项目了
根据这个教程进行操作,你能在5-10分钟内就能完成,最多不超过10分钟!
你并不需要明白所有事情。

(最少不是现在)你的目标就是根据这个教程运
行一个端到端的项目,并得到相关结果。

就目前而已,你不需要对所有的事情都一清二楚。

在你执行的时候,你可以把你的问题列举出来。

你可以多使用?函数名、帮助文档的语法结构来获悉你目前所用的函数的相关信息。

你并不需要知道这些算法是怎么运行的。

知道其中的局限性很重要,怎样配置好的机器学习算法也很重要。

但是,学习算法可以迟一点学。

你需要在接下来的一段时间内慢慢的学习算法的相关知识。

今天,你就好好享受一下在这个平台里运行算法所给你带来的乐趣吧。

你并不需要成为R程序员。

R语言的语法结构其实看起来确实挺让人费解的。

就像我们学习其它语言那样,专注于函数的调用功能(诸如function())以及任务(比如a<-“b”)。

这里已经给你提供了很多操作上的便利。

你是一个开发人员,你知道如何选择一个真正运行速度快的基础语言,然后,你就开始学习它,更多的细节以后慢慢了解。

你并不需要成为机器学习方面的专家。

你在学习的过程中,到了后面,你就会知道你在学习过程中获得什么益处,也知道哪方面存在不足。

往后,你能看到足够多的文章来整理机器学习项目的执行步骤,同时也会知道使用交叉检验对于评估精度的重要性。

那么,机器学习项目还有没有别的步骤?我们并不需要在一篇文章里讲完所有的步骤,因为这是你的第一个项目,而且,你需要更多的落实到核心的步骤。

换句话说,观察数据,评估一些算法以及作出相关预测。

在后续的教程中,我们还能看到其它展示数据的方法以及如何改良执行任务所得的结果。

为什么大家选择光环大数据!
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请大数据领域具有多年经验的讲师,提高教学的整体质量与教学水准。

讲师团及时掌握时代的技术,将时新的技能融入教学中,让学生所学知识顺应时代所需。

通过深入浅出、通俗易懂的教学方式,指导学生较快的掌握技能知识,帮助莘莘学子实现就业梦想。

光环大数据启动了推进人工智能人才发展的“AI智客计划”。

光环大数据专注国内大数据和人工智能培训,将在人工智能和大数据领域深度合作。

未来三年,光环大数据将联合国内百所大学,通过“AI智客计划”,共同推动人工智能产业人才生态建设,培养和认证5-10万名AI大数据领域的人才。

参加“AI智客计划”,享2000元助学金!
【报名方式、详情咨询】
光环大数据网站报名:
手机报名链接:http:// /mobile/。

相关文档
最新文档