R语言进行机器学习方法及实例(一).docx
《R语言进行机器学习方法及实例(一).docx》由会员分享,可在线阅读,更多相关《R语言进行机器学习方法及实例(一).docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、R语言进行机器学习方法及实例(一)11月30日,2021亚马逊云科技re:Invent全球大会,即将浩大开启!2021re:Invent十周年度十分活动,内容的饕餮盛宴,涵盖产品、行业、社区等专题!立即预约版权声明本文为博主原创文章转载请注明出处机器学习的研究领域是创造计算机算法把数据转变为智能行为。机器学习以及数据挖掘的区别可能是机器学习侧重于执行一个已知的任务而数据开掘是在大数据中寻找有价值的东西。机器学习一般步骤采集数据将数据转化为合适分析的电子数据探究以及准备数据机器学习中许多时间花费在数据探究中它要学习更多的数据信息识别它们的微小差异基于数据训练模型根据你要学习什么的设想选择你要使用
2、的一种或者多种算法评价模型的性能需要根据一定的检验标准改良模型的性能有时候需要利用更高级的方法有时候需要更换模型机器学习算法有监视学习算法用于分类k近邻朴素贝叶斯决策树规那么学习神经网络支持向量机用于数值预测线性回归回归树模型树神经网络支持向量机无监视学习算法用于形式识别数据之间联络的严密性关联规那么用于聚类k均值聚类R语言机器学习算法实现kNN(k-NearestNeighbors,k近邻)原理计算间隔找到测试数据的k个近邻根据k个近邻的分类预测测试数据的分类应用k近邻需要将各个特征转换为一个标准的范围归一化处理可以应用min-max标准化所有值落在01范围新数据原数据-最小值/最大值-最小
3、值可以以应用z-score标准化新数据原数据-均值/标准差。对于名义变量表示类别可以进展哑变量编码其中1表示一个类别0表示其它类别对于n个类别的名义变量可以用n-1个特征进展哑变量编码比方高中低可以用高、中两类的哑变量表示这三类高1是0其它中1是0其它优点简单且有效对数据分布没有要求训练阶段很快缺点不产生模型在发现特征之间的关系上的才能有限分类阶段很慢需要大量的内存名义变量以及缺失数据需要额外处理R代码使用class包的knn函数对于测试数据中的每一个实例该函数使用欧氏间隔标识k个近邻然后选出k个近邻中大多数所属的那个类假如票数相等测试实例会被随机分配。dt_pred-knn(traindt_
4、train,testdt_test,classdt_train_labels,k3)#train一个包含数值型训练数据的数据库test:一个包含数值型测试数据的数据框class训练数据每一行分类的一个因子变量k:标识最近邻数据的一个整数通常取实例数的平方根)该函数返回一个向量该向量含有测试数据框中每一行的预测分类尽管kNN是并没有进展任何学习的简单算法但是却能处理及其复杂的任务比方识别肿瘤细胞的肿块。对R自带iris数据用kNN进展训练、预测并与实际结果比照llibrary(class)library(gmodels)#preparedataset.seed(12345)#setrandoms
5、eedinordertorepeattheresultiris_rand-irisorder(runif(150),iris_z-as.data.frame(scale(iris_rand,-5)#zscorenormalizetrain-iris_z1:105,test-iris_z106:150,train.label-iris_rand1:105,5test.label-iris_rand106:150,5#kNNpred-knn(train,test,train.label,k10)#comfusionmatrixCrossTable(pred,test.label,prop.rF,p
6、rop.tF,prop.chisqF)这个结果显示kNN对测试数据全部预测正确朴素贝叶斯分类原理基于朴素贝叶斯定理根据先验概率计算预测实例的属于不同类别的总似然再将某类别的似然除以不同类别似然的以及得到预测实例在某类别的概率应用朴素贝叶斯算法每个特征必须是分类变量对于数值型变量可以将数值型特征离散化分段可以根据直方图查看数据明显的分隔点假如没有明显的分隔点可以使用三分位数四分位数五分位数分段太少会把重要信息丧失拉普拉斯估计对于某些从来没有出现的概率为0的会影响概率的估计拉普拉斯估计本质上是在概率表的每个计数加上一个较小的数这样保证每一类中每个特征发生的概率是非零的。优点简单、快速、有效能处理噪
7、声数据以及缺失数据需要用来训练的例子相对较少但同样能处理好大量的例子很容易获得一个预测的估计概率值缺点依赖于一个常用的错误假设即一样的重要性以及独立特征应用在大量数值特征的数据集时并不理想概率的估计值相对于预测的类而言更加不可靠。R代码使用维也纳理工大学统计系开发的e1071添加包中的naiveBayesm-naiveBayes(train,class,laplace0)#train数据框或包含训练数据的矩阵class包含训练数据每一行的分类的一个因子向量laplace控制拉普拉斯估计的一个数值可以进展调节看是否会进步模型性能该函数返回一个朴素贝叶斯模型对象该对象可以用于预测p-predict
8、(m,test,typeclass)#m:由函数naiveBays()训练的一个模型test数据框或包含测试数据的矩阵包含与用来建立分类器的训练数据的一样特征type:值为class或raw标识预测向量最可能的类别值或原始预测的概率值library(e1071)library(gmodels)set.seed(12345)#setrandomseedinordertorepeattheresultiris_rand-irisorder(runif(150),train-iris_rand1:105,-5test-iris_rand106:150,-5train.label-iris_rand1
9、:105,5test.label-iris_rand106:150,5#tranformnumericalvariabletoclassifiedvariableconver_counts-function(x)q-quantile(x)sect1-which(q1xxq2)sect2-which(q2xxq3)sect3-which(q3xxq4)sect4-which(q4xxq5)xsect1-1xsect2-2xsect3-3xsect4-4return(x)train-apply(train,2,conver_counts)#naiveBayesm-naiveBayes(train,
10、train.label,laplace1)pred-predict(m,test,typeclass)#comfusionmatrixCrossTable(pred,test.label,prop.rF,prop.tF,prop.chisqF)可见对第一类setosa分类上预测错误率很高这可能反映了朴素贝叶斯算法的缺点对于处理大量数值特征数据集时并不理想决策树原理以树形构造建立模型。使用一种称为递归划分的探究法。这种方法通常称为分而治之因为它利用特征的值将数据分解为具有相似类的较小的子集。从代表整个数据集的数据结点开场该算法选择最能预测目的类的特征然后这些案例将被划分到这一特征的不同值的组中这
11、一决定形成了第一组树枝。该算法继续分而治之其他结点每次选择最正确的候选特征直到到达停顿的标准。假如一个节点停顿它可能具有以下情况节点上所有几乎所有的案例都属于同一类没有剩余的特征来分辩案例之间的区别决策树已经到达了预先定义的大小限制。C5.0算法时最知名的决策树算法之一单线程版本的源代码是公开的R中有编写好的该程序。C5.0算法已经成为生成决策树的行业标准因为它适用于大多数类型的问题并且可以直接使用。与其它先进的机器学习模型神经网络以及支持向量机相比一般表现的几乎一样并且更容易理解以及部署选择最正确的分割需要确立分割的标准有信息增益基尼系数卡方统计量以及增益比C5.0算法使用信息增益修剪决策树
12、假如决策树增长过大将会使决策过于详细模型将会过度拟合训练数据解决这个问题的一种方法是一旦到达一定数量的决策或决策节点仅含有少量的案例我们就停顿树的增长这叫做提早停顿法或预剪枝决策树法。分为预剪枝提早规定树的大小以及后剪枝一旦树生长的过大就根据节点处的错误率使用修剪准那么将决策树减少到更适宜的大小通常比预剪枝更有效。自适应增强算法进展许屡次尝试在决策树中是建立许多决策树然后这些决策树通过投票表决的方法为每个案例选择最正确的分类。优点一个适用于大多数问题的通用分类器高度自动化的学习经过可以处理数值型数据、名义特征和缺失数据只使用最重要的特征可以用于只有相对较少训练案例的数据或有相当多训练案例的数据
13、没有数学背景可以解释一个模型的结果对于比拟小的树比其他复杂的模型更有效缺点决策树模型在根据具有大量程度的特征进展划分时往往是有偏的很容易过度拟合或不能充分拟合模型因为依赖于轴平行分割所以在对一些关系建立模型时会有困难训练数据中的小变化可能导致决策逻辑的较大的变化大的决策树可能难以理解给出的决策可能看起来违背直觉。R代码使用R包C50的函数C5.0m-C5.0(train,class,trials1,costsNULL)#train:一个包含训练数据的数据框class包含训练数据每一行的分类的一个因子trials为一个可选数值用于控制自适应增强循环的次数默认值为1一般用10因为研究标明这能降低关
14、于测试数据大约25%的概率costs为一个可选矩阵用于给出与各种类型错误相对应的本钱以及混淆矩阵略微不同行用来表示预测值列用来表示实际值函数返回一个C5.0模型对象该对象可以用于预测p-predict(m,test,typeclass)#m有函数C5.0()训练的一个模型test一个包含训练数据的数据框该数据框以及用来创立分类其的数据框有同样的特征type取值为class或prob,表识预测是最可能的类别值或是原始的预测概率该函数返回一个向量根据参数type的取值该向量含有预测的类别值或原始预测的概率值library(C50)library(gmodels)set.seed(12345)#se
15、trandomseedinordertorepeattheresultiris_rand-irisorder(runif(150),train-iris_rand1:105,-5test-iris_rand106:150,-5train.label-iris_rand1:105,5test.label-iris_rand106:150,5#C50m-C5.0(train,train.label,trials10)pred-predict(m,test,typeclass)#comfusionmatrixCrossTable(pred,test.label,prop.rF,prop.tF,pro
16、p.chisqF)规那么学习分类原理规那么学习算法使用了一种称为独立而治之的探究法。这个经过包括确定训练数据中覆盖一个案例子集的规那么然后再从剩余的数据中别离出该分区。随着规那么的增加更多的数据子集会被别离直到整个数据集都被覆盖不再有案例残留独立而治之以及决策树的分而治之区别很小决策树的每个决策节点会受到过去决策历史的影响而规那么学习不存在这样的沿袭。随着规那么的增加更多的数据子集会被别离知道整个数据集都被覆盖不再有案例被保存单规那么1R算法ZeroR一个规那么学习算法从字面上看没有规那么学习对于一个未标记的案例不用考虑它的特征值就会把它预测为最常见的类单规那么算法1R或者OneR在ZeroR
17、的根底上添加一个规那么。像K近邻一样固然简单但是往往表现的比你预期的要好。优点可以生成一个单一的、易于理解的、人类可读的经历法那么大拇指法那么表现往往出奇的好可以作为更复杂算法的一个基准缺点只使用了一个单一的特征可能会过于简单R代码使用R包RWeka中OneR()函数来实现1R算法m-OneR(classpredictors,datamydata)#class是mydata数据框中需要预测的那一列predictors为一个公式用来指定mydata数据框中用来进展预测的特征data为包含一个class以及predictors所要求的数据的数据框该函数返回一个1R模型对象该对象可以用于预测p-pr
18、edict(m,test)#m:由函数OneR()训练的一个模型test一个包含测试数据的数据框该数据框以及用来创立分类器的训练数据有着一样的特征该函数返回一个含有预测的类别的向量library(RWeka)library(gmodels)set.seed(12345)#setrandomseedinordertorepeattheresultiris_rand-irisorder(runif(150),train-iris_rand1:105,test-iris_rand106:150,-5test.label-iris_rand106:150,5m-OneR(Species.,datatr
19、ain)pred-predict(m,test)CrossTable(pred,test.label,prop.rF,prop.tF,prop.chisqF)查看生成的规那么按照Petal的宽度分成三类正确分类了105个里面的101个对于测试数据的混合矩阵如下可见只使用了一个规那么也能也做到了不错的效果RIPPER算法对于复杂的任务只考虑单个规那么可能过于简单考虑多个因素的更复杂的规那么学习算法可能会有用但可以能因此会变得更加难以理解。早期的规那么学习算法速度慢并且对于噪声数据往往不准确后来出现增量减少误差修剪算法IREP使用了生成复杂规那么的预剪枝以及后剪枝方法的组合并在案例从全部数据集别离
20、之前进展修剪。固然这进步了性能但是还是决策树表现的更好。直到1995年度出现了重复增量修剪算法RIPPER它对IREP算法进展改良后再生成规那么它的性能与决策树相当甚至超过决策树。原理可以笼统的理解为一个三步经过生长修剪优化。生长经过利用独立而治之技术对规那么贪心地添加条件直到该规那么能完全划分出一个数据子集或没有属性用于分割。与决策树类似信息增益准那么可用于确定下一个分割的属性当增加一个特指的规那么而熵值不再减少时该规那么需要立即修剪。重复第一步以及第二步直到到达一个停顿准那么然后使用各种探究法对整套的规那么进展优化。优点生成易于理解的、人类可读的规那么对大数据集以及噪声数据有效通常比决策树
21、产生的模型更简单缺点可能会导致违背常理或者这专家知识的规那么处理数值型数据可能不太理想性能有可能不如复杂的模型R代码使用R包RWeka中JRip()函数是基于Java实现的RIPPER规那么学习算法mJRip(classpredictors,datamydata)#class是mydata数据框中需要预测的那一列predictors为一个R公式用来指定mydata数据框中用来进展预测的特征data为包含class以及predictors所要求的数据的数据框该函数返回一个RIPPER模型对象该对象可以用于预测。p-predict(m,test)#m由函数JRip()训练的一个模型test一个包含
22、测试数据的数据框该数据框以及用来创立分类器的训练数据有同样的特征该函数返回一个含有预测的类别值的向量。library(RWeka)library(gmodels)set.seed(12345)#setrandomseedinordertorepeattheresultiris_rand-irisorder(runif(150),train-iris_rand1:105,test-iris_rand106:150,-5test.label-iris_rand106:150,5m-JRip(Species.,datatrain)pred-predict(m,test)CrossTable(pred
23、,test.label,prop.rF,prop.tF,prop.chisqF)这次使用了三个规那么(Petal.Width1.8为virginicaPetal.Length3为versicolor其它为setosa可见固然增加了规那么但是并没有进步模型的性能预测数值型数据线性回归回归主要关注一个唯一的因变量需要预测的值以及一个或者多个数值型自变量之间的关系。假如只有一个自变量称为一元线性回归或简单线性回归否那么称为多元回归。原理对线性参数的估计使用最小二乘估计广义线性回归它们对线性模型进展了两方面的推广通过设定一个连接函数将响应变量的期望与线性变量相联络和对误差的分布给出一个误差函数。这些推
24、广允许许多线性的方法可以被用于一般的问题。比方逻辑回归可以用来对二元分类的结果建模而泊松回归可以对整型的计数数据进展建模。优点迄今为止它是数值型数据建模最常用的方法可适用于几乎所有的数据提供了特征变量之间关系的强度以及大小的估计缺点对数据作出了很强的假设该模型的形式必须由使用者事先指定不能很好地处理缺失数据只能处理数值特征所以分类数据需要额外的处理需要一些统计学知识来理解模型。LASSO回归算法LASSO回归的特点是在拟合广义线性模型的同时进展变量挑选只选择对因变量有显著影响的自变量以及复杂度调整通过参数控制模型复杂度防止过度拟合。它通过惩罚最大似然来拟合广义线性模型正那么化途径是通过正那么化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 进行 机器 学习方法 实例
限制150内