版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内部资料,注意保密机器学习与R语言学习笔记2015年7月文档修订记录:版本编号变化状态简要说明日期变更人批准日期批准人vC创立学习笔记2015.7.31余红vA新增余红vA新增余红vA新增余红vA新增理解回归和用线性回归预测医疗费用余红v1.1A新增理CART算法的应用余红*变化状态:C――创立,A——增加,M——修改,D——删除目录TOC\o"1-4"\h\z\u183321机器学习简介7291201.1机器学习的起源72651.2机器如何学习7205451.2.1抽象化和知识表达7145401.2.2一般化8215721.2.3评估学习的成功性8152321.3将机器学习应用于数据中的步骤8281791.4选择机器学习算法876721.4.1考虑输入的数据8302341.4.2考虑机器学习算法的类型8149001.4.3为数据匹配适宜的算法9155112数据的管理和理解9278482.1R数据结构1030322.1.1向量10242402.1.2因子10228492.1.3列表11180962.1.4数据框119482.2用R管理数据1298912.2.1保存和加载R数据结构12128202.2.2用CVS文件导入和保存数据12277622.3探索和理解数据12150942.3.1探索数据的结构12234282.3.2探索数值型变量131723测量中心趋势-平均数和中位数132788测量数据分散程度-四分位数和五数汇总1410157数值型变量可视化-箱图1525975数值型变量可视化-直方图1632726了解数值型数据-均匀分布和正态分布1617651衡量数据的分散程度-方差和标准差17191052.3.3探索分类变量17177802.3.4探索变量之间的关系1820626变量之间关系的可视化-散点图187912检验变量之间的关系-双向交叉表18321383概率学习--朴素贝叶斯分类19313983.1理解朴素贝叶斯2057563.1.1贝叶斯方法的根本概念20120103.1.2朴素贝叶斯算法2129055朴素贝叶斯分类2122289拉普拉斯估计2127543在朴素贝叶斯算法中使用数值特征22140203.2例子-基于贝叶斯算法的收集垃圾短信过滤22291054分而治之-应用决策树和规那么进行分类2219124.1理解决策树23242354.1.1分而治之232793rpart函数241596124211182517889J48函数25273174.1.2255103选择最正确的分割2521259修剪决策树2680774.226117664.2.1第1步-收集数据27129574.2.2第2步-探索和准备数据2712785数据探索2730027数据准备-创立随机的训练数据集和测试数据集28275634.2.3第3步-基于数据训练模型28312194.2.4第4步-评估模型性能3589124.2.5第5步-提高模型的性能3630029提高决策树的准确性3632268犯一些比其他错误更严重的错误66278684.3例子-CART算法建立汽车油耗预测模型67102954.3.1第1步-收集数据6713811数据集概况671994数据预处理68127534.3.2第2步-基于数据训练模型6925355对“油耗”变量建立回归树-数字结果6922428对“油耗”变量建立回归树-树形结果7024215对“分组油耗”变量建立分类树70254204.3.3第3步-对测试集预测目标变量评估模型性能70289735预测数值型数据-回归方法71309095.1理解回归72324895.1.1简单线性回归72175365.1.2普通最小二乘法7280235.1.3相关系数73123365.1.4多元线性回归73278995.2例子-应用线性回归预测医疗费用74118475.2.1第1步-收集数据74292555.2.2第2步-探索和准备数据75462探索特征之间的关系-相关系数矩阵7610005可视化特征之间的关系-散点图矩阵76185245.2.3第3步-基于数据训练模型77192325.2.4第4步-评估模型性能783195.2.5第5步-提高模型性能793342模型的设定-添加非线性关系7925290转换-将一个数值型变量转换为一个二进制指标7911021模型的设定-参加相互作用的影响805905全部放在一一个改良的回归模型80248475.3理解回归树和模型树819325.4例子-用回归树和模型树估计葡萄酒的质量81230795.4.1第1步:收集数据8171765.4.2第2步:探索和准备数据81178175.4.3第3步:基于数据训练模型83319915.4.4第4步:评估模型的性能8430105用相关系数比拟预测值和真实值的接近程度8516053用平均绝对误差〔MeanAbsoluteError,MAE〕度量性能85237545.4.5第5步:提升模型的性能8579336黑箱方法-神经网络和支持向量机90104976.1理解神经网络91264426.1.1从生物神经元到人工神经元92231876.1.2激活函数9359146.1.3网络拓扑933501层的数目9311758信息传播的方向9326605每一层的节点数94137216.1.4用后向传播训练神经网络94137716.2用人工神经网络对混凝土的强度进行建模9494796.2.1第1步-收集数据94178016.2.2第2步-探索和准备数据9482766.2.3第3步-基于数据训练模型9515836.2.4第4步-评估模型的性能97123766.2.5第5步-提高模型的性能9890576.3理解支持向量机98101536.3.1用超平面分类99114756.3.2寻找最大间隔9910433线性可分的数据情形993685非线性可分的数据情况9977106.3.3对非线性空间使用核函数9915906.4用支持向量机进行光学字符识别100287126.4.1第1步-收集数据100105656.4.2第2步-探索和准备数据100150226.4.3第3步-基于数据训练模型101265336.4.4第4步-评估模型的性能102140426.4.5第5步-提高模型的性能10366277探寻模式-基于关联规那么的购物篮分析103179207.1理解关联规那么104113767.2用于关联规那么学习的Apriori算法104147107.2.1度量规那么兴趣度-支持度和置信度10539207.2.2用Apriori原那么建立规那么10574707.3例子-用关联规那么确定经常一起购置的食品杂货105293767.3.1第1步-收集数据106113247.3.2第2步-探索和准备数据10627169数据准备-为交易数据创立一个稀疏矩阵10626256可视化商品支持度-商品的频率图10712123可视化交易数据-绘制稀疏矩阵107146907.3.3第3步-创立规那么集107209977.3.4第4步-评估性能108307588模型性能的评价108146128.1度量分类方法的性能10946158.1.1在R中处理分类预测数据109212298.1.2深入探讨混淆矩阵10941418.1.3使用混淆矩阵度量性能110284209附录A:R的输入和输出11129209.1输入112218729.2输出112317289.2.1文本输出11251449.2.2图形输出112725410附录B:R语言根本数据管理1123031710.1一个例如113841710.2创立新变量11397210.3变量的重编码1142020010.4变量的重命名11549810.5缺失值115714410.5.1重编码某些值为缺失值116926910.5.2在分析中排除缺失值1163134110.6日期值117546810.6.1将日期转换为字符型变量1182738710.7类型转换1181466110.8数据排序1192294810.9数据集的合并1191145610.9.1添加列1202174310.9.2添加行1203207510.10数据集取子集1202078410.10.1选入〔保存〕变量120807410.10.2剔除〔丢弃〕变量12191010.10.3选入观测121888910.10.4subset()函数1213130210.10.5随机抽样1222058011附录C:R语言图形初阶122100111.1使用图形123900211.2绘制多幅图形并随时查看每一个1231783311.3图形的组合123521011.4图形参数124843211.4.1文本标注1243267512附录C:R语言绘图1251916012.1根本图形126543512.1.1条形图1261951912.1.2箱线图1262204112.1.3散点图127602112.1.4折线图1281312213附录C:R语言常用函数129236313.1CrossTable1302872413.2plot130493813.3lines131机器学习简介机器学习于知识表示机器学习两大类算法机器学习任务机器学习的起源机器学习的研究领域是创造计算机算法,把数据转化为智能行为。机器学习的核心主要侧重于找出复杂数据的意义。计算机科学家TomM.Mitchell提出的一个机器学习的定义是:如果机器能够获取经验并且能利用它们,在以后的类似经验〔经历〕中能够提高它的表现,该机器就称为机器学习。数据挖掘是与机器学习紧密相关的学科,它涉及从大型数据库中产生新的洞察。机器学习与数据挖掘一个可能的差异是机器学习侧重执行一个的任务,而数据挖掘那么是侧重寻找有价值的信息。例如,可能会用机器学习方法教一个机器人开车,然而可能会利用数据挖掘了解哪种类型的车是最平安的。机器学习是数据挖掘的先期准备,反之那么不然。挖掘数据是指挑选最适宜的数据来支持某个理论的行为,不要与数据挖掘相混淆。机器如何学习机器学习过程可以分为如下三个局部:数据输入这局部利用观察、记忆及存储,以及回忆来提供进一步推理的事实依据。抽象化这局部涉及把数据转换为更宽泛的表现形式〔broaderrepresentation〕。如果没有深刻的理解,知识就会局限于输入的数据。这意味着除了已经见过的以外,没有获取其他多余的信息。更高级的学习方式要求学习者用他们自己的话来描述学习的主题。一般化这局部应用抽象的数据来形成行动的根底。直到学习者能够把抽象知识应用到将来的行动中去,学习过程才算完成。抽象化和知识表达知识表达将原始输入的数据概括在一个模型里。模型的选择通常不是机器来完成的,而是由学习的任务和所分析数据的类型来决定的。知识表达是通过训练、测试,从而获得性能符合要求的模型的过程。用一个特定的模型来拟合数据集的过程称为训练。当模型被训练后,数据转换为一个汇总了原始信息的抽象形式。该处特定的模型指是分类、聚类、回归等等。一般化一般化被想象成训练过程中对所有可用于数据抽象化的模型〔即理论〕的搜索过程。一般化就是把这个集合里的理论的数量较少到一个可以管理的数目。评估学习的成功性一般化过程的最后一步就是在存在偏差的情况下判断模型的成功性。试图用模型拟合噪声就是过度拟合问题的根底。模型处理噪声数据的好坏是判断模型成功与否的一个重要方面。将机器学习应用于数据中的步骤机器学习任务的步骤如下:收集数据探索数据和准备数据基于数据训练模型评价模型的性能改良模型的性能选择机器学习算法DavidWolpert于1996年提出的没有免费午餐定理:没有一种机器学习方法对所有环境都是最好的。考虑输入的数据输入数据是以案例〔example〕和特征〔feature〕组成的表格形式呈现的。考虑特征的表现形式很重要,因为数据集中特征的种类和数量有助于你找到一个适于学习任务的机器学习算法。考虑机器学习算法的类型机器学习算法可以分为两类:用来建立预测模型的有监督学习算法和用来建立描述模型的无监督学习算法。监督并不是指需要人工干预,它是让目标值担任监督的角色,让它告诉学习者要学习的任务是什么。为数据匹配适宜的算法为了找到与学习任务相适应的机器学习方法,需要从下面4种类型的任务之一开始,它们分别是:分类、数值预测、模式识别或者聚类。模型任务附注有监督学习算法最近邻分类朴素贝叶斯分类决策树分类分类器分类线性回归数值预测回归树数值预测模型树数值预测神经网络双重用处支持向量机双重用处无监督学习算法关联规那么模式识别如:购物篮分析、推荐系统k均值聚类聚类数据的管理和理解学完本章,将理解:根本的R数据结构以及如何使用它们来存储和提取数据如何把不同来源格式的数据导入R理解并可视化复杂数据的常用方法R数据结构机器学习中经常使用的R数据结构是:向量、因子、列表、数组和数据框。向量向量是同一类型的数据元素的有序集合。可以使用组合函数〔combinefunction〕c()来创立向量,并且能通过箭头运算符“<-”来给向量赋一个名字。注意:R中的赋值运算符是“<-”,而不是“=”。误用“=”作为赋值运算符可能会导致不可预知的错误。>subject_name<-c(“JohnDoe”,“JaneDoe”,“SteveGrave”);>temperature<-c(98.1,98.6,101.4);>flu_status<-c(FALSE,FALSE,TRUE);通过向量中元素的序号〔下标〕来访问元素。注意:R数据结构中的下表是从1,而不是从0开始。>temperature[2]通过冒号操作符获得一个范围内的向量元素。>temperature[2:3]通过指定一个负号可以把该项排除在输出数据之外。>temperature[-2]通过使用一个逻辑向量来标识每一项为哪一项否包含在输出数据中。>temperature[c(TRUE,TRUE,FALSE)];因子对用类别值来代表特征的名义属性,尽管可以用一个字符型向量来存储名义属性的数据,但R提供了称为因子〔factor〕的专用数据结构来表示这种属性的数据。要把字符型向量转换为因子,只需要应用factor()函数。>gender<-factor(c(“MALE”,“FEMALE”,“MALE”));>gender;[1]MALEFEMALEMALELevels:FEMALEMALE注意:因子的水平由数据可能取到的所有类别组成。创立因子后,可以参加另外的没有在数据中出现的水平。>blood<-factor(c(“O”,“AB”,“A”),levels=c(“A”,“B”,“AB”,“O”));注意:用levels=语句来给出一个额外的向量,该向量给出了4个可能的血型。存储额外的水平使未来增加其他血型类型称为可能。列表列表是可由不同类型的元素组成的有序集合。列表的创立使用list()函数。建立列表,可以给列表中每一项的值命名。名字不是必须的,但是它使得接下来可以通过名字来访问列表中的值,而不是像向量那样通过位置序号。>subject1<-list(fullname=subject_name[1],temperature=temperature[1],flu_status=flu_status[1],gender=gender[1],blood=blood[1]);列表中的各项是由=构成的名值对列表中的各项是由=构成的名值对通过在列表名后附件一个“$”符号和值的名字,可以直接访问列表元素:>subject1$temperature可以通过指定一个名字向量来获取列表中多个列表项:>subject1[c(“temperature”,“flu_status”)]数据框机器学习中使用的最重要的R数据结构是数据框,它是一个于电子表格或数据库相类似的结构。数据框准确来说是一个向量列表,它结合了向量和列表两个方面的有点。>pt_data<-data.frame(subject_name,temperature,flu_status,gender,blood,stringsAsFactors=FALSE);注意:如果不指定参数stringsAsFactors=FALSE,R将会自动把每个字符向量转化为因子。>pt_datasubject_nametemperatureflu_statusgenderblood1JohnDoe98.1FALSEMALEO......通过名字引用数据框中的数据项:>pt_data$subject_name;于列表相类似,可以用名称向量从数据框中提取多列数据:>pt_data[c(“temperature”,“flu_status”)];通过指定行号和列号,访问数据框的数据项:>pt_data[1,2]提取数据框中多行多列数据:>pt_data[c(1,3),c(2,4)];#提取第1和第3行的第2和第4列数据要提取所有行或者列,主要让行或者列的局部空白就可以了:>pt_data[,1]#提取第1列数据>pt_data[1,]#提取第1行的数据负号也能用来排除特定行或者特定列的数据:>pt_data[-2,c(-1,-3,-5)]#排除第2行及第1,3,5列的数据用R管理数据保存和加载R数据结构可以使用save()函数将R数据结构保存到一个扩展名为.RData的文件中。>save(x,y,z,file=“”);#对象x,y和z保存到指定文件可以使用load()函数将保存在扩展名为.RData中的数据结构加载到当前会话。>load(“”);注意:要特别小心正在加载的数据结构!用load()命令导入的文件中所存储的所有数据结构都会加载工作区,即使它们会覆盖工作区中其他一些正在使用的东西。如果需要结束当前R会话,save.image()命令会把所有的会话写入一个叫做.RData的文件里。默认情况下,R将会在下次启动时寻找这个文件,上次R结束时的会话将会重现。用CVS文件导入和保存数据探索和理解数据在这个步骤里,将开始探索数据的特征和案例,并且找到数据的独特之处。对数据理解越深,就会更好地让机器学习模型匹配你的学习问题。探索数据的结构通过一个二手车打折销售广告的真实数据集,理解数据探索的内容和过程。通过read.csv()函数把数据加载到R数据框中:>usedcars<-read.csv(“usedcars”,stringsAsFactors=FALSE);调查的第一个问题是数据是如何组织的。函数str()提供了一个用来创立数据字典的根本轮廓:>str(usedcars);根据相关领域知识,特征名称和特征值可以对变量所代表的含义做出假定。如变量year可能值汽车制造的时间,也可能指汽车广告贴出的时间。有时候,数据集的特征名称可能是没有具体含义的名字、代号或者像V1这样的简单数字。通过进一步调查,从而确定特征名称确切代表的含义是必不可少的。即使特征名称由具体意义,也要谨慎检查标签含义的真确性。探索数值型变量汇总统计量:普遍使用的一组描述数值的指标,包括两种类型:数据的中心测度和分散程度测度。summary(()给出了几个常用的汇总统计量。>summary(usedcars$year)Min.1stQu.MedianMean3rdQu.Max.200020082009200920102012也可以通过summary()函数同时得到多个数值型变量的汇总统计量:>summary(usedcars[c(“price”,“mileage”)])pricemileageMin.:3800Min.:48671stQu.:109951stQu.:27200Median:13592Mdeian:16385Mean:12962Mean:442613rdQu.:149043rdQu.:55125Max.:21992Max.:151479price的平均值为$12962,mileage的平均值为44261,这些数据告诉我们什么信息呢?因为平均价格相对偏低,所以可以预期数据中包括经济型汽车。数据中也有可能包括新型的豪华汽车,有着高里程数,但是相对较低的平均里程数的统计数据并不提供支持这个假设的证据。另一方面,数据并没有提供证据让我们忽略这个可能性。所以,在进一步检验数据是要留意这一点。测量中心趋势-平均数和中位数中心趋势测度是用来标识一组数据的中间值。平均数:一般当一个数被认为是平均数时,它是落在总体样本的两个极值之间的某个位置。平均数时具有代表性的,它和组里的其他值不会差的太多,可以把它看做一个所有其他值用来进行参照的值。统计学中,平均数也叫做均值,它定义为所有值的总和除以值的个数。R提供了一个函数mean(),它能计算数字向量的均值:>mean(c(36000,44000,56000))均值是最普遍引用的测量数据集中心的统计量,但它不一定是最适宜的。另一个普遍使用的检验中心趋势的指标是中位数。中位数位于排序后值列表的中间。R提供了函数median()来计算中位数。>median(c(36000,44000,56000))44000均值和中位数的区别:落在值域两端的值对均值和中位数的影响是不同的。尤其是均值,它对异常值,或者那些对大多数数据而言异常高或低的值,是非常敏感的,容易受到那一小局部极端值的影响。上述例如中,mileage的均值44261比中位数36385大了超过20%,令人疑心数据集中一些二手车由极高的mileage值。为进一步调查这一点,需要在分析中应用一些额外的汇总统计量。测量数据分散程度-四分位数和五数汇总五数汇总:是一组5个统计量,它们大致描述一个数据集的差异。所有的5个统计量包含在函数summary()的输出结果中。按顺序排列,它们是:最小值〔Min.〕第一四分位数,或者Q1〔1stQu.〕中位数,或Q2〔Median〕第三四分位数,或Q3〔3rdQu.〕最大值〔Max.〕R提供了函数min()和函数max()来分别计算数据向量中的最小值和最大值。最大值和最小值的差值称为值域。在R中,range()函数同时返回最小值和最大值。把range()函数和差值函数diff()相结合,这样能够用一条命令来检验数据的值域。>range(usedcars$price)[1]380021992>diff(range(used$price))18192分位数把一个数据集分成相等数量的数值。我们对Q1和Q3之间50%的数据特别感兴趣,它们是数据分散程度的一个度量。四分位距〔InterQuantileRange〕:Q1和Q3之间的差值。在R中,函数IQR()用来计算四分位距。>IQR(usedcars$price)数值型变量可视化-箱图箱图:一种对五数汇总的常用可视化方式,它以一种特定方式显示数值型变量的中心和分散程度,通过它可很快了解变量的值域和偏度,或者它还可以和其他变量做比拟。R语言提供函数boxplot()绘制箱图。>boxplot(usedcars$price,main=”BoxplotofUsedCarPrices”ylab=”Price($)”)>boxplot(usedcars$mileage,main=”BoxplotofUsedCarMileage”,ylab=”Odometer(mi.)”)箱图用水平线来表示五数汇总的值。箱图中每个盒子的中间水平线从下向上依次代表Q1、Q2〔中位数〕和Q3。中位数用粗黑线表示,最小值和最大值用细线表示,通常仅允许细线延伸到最小为低于Q1的1.5倍IQR的最小值,或者延伸到最大为高于Q3的1.5倍IQR的最大值。任何超出这个临界值的都认为是异常值,用圆圈或点来表示。数值型变量可视化-直方图直方图〔histogram〕是另一种形象化描述数值型变量间差异的方式。它和箱图相似的地方在于,它也把变量值按照预先设定的份数进行分隔,或者说按照预先定义的容纳变量值的分段进行分隔。箱图把数据分成4个局部,直方图可以有相同宽度的任意数量的分段,分段可以包含不同数量的值。R语言用函数hist()绘制直方图。>hist(usedcars$price,main=”HistogramofUsedCarPrices”,xlab=”Price($)”)>hist(usedcars$mileage,main=”HistogramofUsedCarMileage”,xlab=”Odometer(mi.)”)直方图是由一系列的竖条组成,其高度表示落在等长的划分数据值的分段内的数据值的个数或频率。偏度〔skew〕:直方图不对称的程度。能快速识别偏度是直方图作为数据探索工具的有点之一。了解数值型数据-均匀分布和正态分布变量的分布描述了一个值落在不同值域里的可能性大小。尽管有许多非正态分布的类型,但许多现象产生的数据都可以用正态分布来描述。衡量数据的分散程度-方差和标准差正态分布用两个参数来定义:中心和分散程度。中心用均值来定义,分散程度通过标准差来测量。在R中获得方差和标准差,可以用函数var()和函数sd()。>var(usedcars$price)[1]9749892>sd(usedcars$price)方差越大表示数据在均值周围越分散,标准差表示平均来看每个值和均值相差多少。注意:方差定义公式给出的是总体方差〔除以n〕,而R内置函数用的是样本方差〔除以n-1〕。除非数据集很小,否那么这两种结果的区别是很小的。规那么:正态分布中60%的值落在均值左右1个标准差的范围内,而95%和99.7%的值各自落在均值左右2个和3个标准差的范围内。尽管68-95-99.7规那么仅仅局限与正态分布中,但这个根本准那么能应用到所有的数据中,数值落在均值的3个标准差以外是极为罕见的。探索分类变量只要变量的每一个值可以应用到多个案例,尽管它可能是数值型的〔如int〕,根据需要这个变量可以看做是一个分类变量。与数值型数据相比,分类数据是用表格而不是汇总统计量来进行检测的。一元表:表示单个分类变量的表格。R中的函数table()为分类变量产生一元表。>table(usedcars$year)2000200120022003200420052006200720082009201020112012311132611144249161>table(usedcars$model)SESELSES782349一元表列知名义变量的不同类别和该类别的值的数量。R同时也能在table()函数产生的表格上直接应用函数prop.table(),计算表格中格子的比例,如下所示:>model_table<-table(usedcars$model)>prop.table(model_table)SESELSES函数prop.table()的结果能与其他R函数相结合来转换输出结果,参加我们要保存一位小数的百分数表示,如下所示:>color_table<-table(usedcars$color)>color_pct<-prop.table(color_table)*100#为转换为百分数乘以100>round(color_pct,digits=1)#四舍五入保存一位小数BlackBlue探索变量之间的关系变量之间关系的可视化-散点图散点图是一种可视化二变量之间关系的图形,它是一个二维图形,横坐标x是其中一个特征的值,纵坐标y由另一个特征的值来标识,坐标平面内点的排放模式,揭示了两个特征之间的内在关系。按惯例规定,y变量是假定依赖于另一个变量的变量。R语言的函数plot()用来绘制散点图。>plot(x=usedcars$mileage,y=usedcars$price,main=”ScatterplotofPricevs.Mileage”,xlab=”UsedCarOdometer(mi.)”,ylab=”UsedCarPrice($)”);#price和mileage间关系的散点图散点图中一条拟合直线,如是一条水平的线,或者看上去随机分布的点集,证明两个变量完全不相关。正相关看起来是一条向上倾斜的志向,负相关是一条向下倾斜的直线。检验变量之间的关系-双向交叉表双向交叉表〔two-waycross-tabulation,也称交叉表或者列联表〕:与散点图类似,观察一个变量的值是如何随着另一个的值而变化的。行是一个变量的水平,列是另一个变量的水平,单元格中的值表名落在特定行、列的单元格中值的数量。R中有多个函数可以生成交叉表,包括table()函数。由GregoryR.Warnes创立的gmodels添加包里的CrossTable()函数可能是用户最喜欢用的函数。在二手车销售广告数据集中,我们真正感兴趣的是汽车的颜色是否是保守的,而不是各种具体的颜色。为此,将9种颜色分为两组:第一组包括保守的颜色:Black、Gray、Silver和White;第二组包括Blue、Gold、Green、Red和Yellow。创立一个二元指示变量〔常常称为哑变量〕,根据我们的定义来表示汽车的颜色是否是保守的,如果是,指示变量的值就是1,否者值是0。>usedcars$conservative<-usedcars$color%in%c(“Black”,“Gray”,“Silver”,“White”)“%in%”操作符:根据左边的值是否在右边的向量中,为操作符左边向量中的每一个值返回TRUE或者FALSE。简单地说,可以理解为“这辆二手车的颜色是在black、gray、silver和white这组中吗?”>table(usedcars$conservative)TRUEFALSE9951上述输出显示,2/3的汽车有保守的颜色。观察conservative〔保守颜色〕是如何随着model变化而变化的。假设汽车的型号决定了颜色,所以把conservative作为因变量〔y〕。>CrossTable(x=usedcars$model,y=usedcars$conservative)表格中,我们最感兴趣的是保守颜色汽车占每一种型号的行比例。行比例告诉我们0.654(65%)的SE汽车用保守的颜色,SEL汽车的这个比例是0.696(70%),SES汽车是0.653(65%)。这些值的差异相对来说是较小的,者暗示不同型号的汽车选择的颜色类型没有显著的差异。可以在引用CrossTable()函数时增加一个参数,指定chisq=TRUE来获得卡方检验结果。概率学习--朴素贝叶斯分类学习朴素贝叶斯是如何应用时,将学习:用于朴素贝叶斯的根本概率原那么。基于R,用专门的方法、可视化和数据结构分析文本数据。如何运用朴素贝叶斯分类器建立短信过滤器并通过R实现。朴素贝叶斯〔NaiveBayes,NB〕算法之所以这样命名的原因。频率表与双向交叉表相似,表的一个维度表示分类变量的水平,而另一个维度表示特征的水品。理解朴素贝叶斯18世纪的数学家托马斯.贝叶斯创造了用于描述事件的概率以及如何根据附加信息修正概率的根本数学原理〔现在称为贝叶斯方法〕。基于贝叶斯方法的分类器是利用训练数据并根据特征的取值来计算每个类别被观察到的概率。当分类器之后被应用到无标签数据时,分类器就会根据观测到的概率来预测新的特征最有可能属于哪个类。贝叶斯分类已用于以下方面:文本分类,比方垃圾邮件过滤、作者识别和主体分类等。在计算机网络中进行入侵检测或者异常检测。根据一组观察到的病症,诊断身体状况。通常情况下,贝叶斯分类器最适用于解决这样一类问题:在这类问题中,为了估计一个结果的概率,从众多属性中提取的信息应该被同时考虑。贝叶斯方法利用了所有可以获得的证据来巧妙地修正预测。如果有大量特征产生的影响较小,但将它们放在一起,它们的组合影响可能会相当大。贝叶斯方法的根本概念相关事件之间的关系可以用贝叶斯定理来描述,如下面的公式所示。式中,P(B|A)称为似然概率〔likelihood〕,P(A)称为先验概率〔Posterior〕即无任何附加条件下的概率,P(B)称为边际似然概率〔marginallikelihood〕。例如,下面的频率表记录了单词Viagra出现在垃圾邮件和非垃圾邮件中的次数。该表的水平维度表示垃圾邮件或者非垃圾邮件,垂直维度表示单词Viagra是否出现。根据频率表构造的似然表如下面有图所示。Viagra频数Viagra频数YesNo总计垃圾邮件41620非垃圾邮件17980总计595100Viagra似然YesNo总计垃圾邮件4/2016/2020非垃圾邮件1/2079/8080总计5/10095/100100根据似然表,计算后验概率P(垃圾邮件|Viagra),利用贝叶斯定义,有P(垃圾邮件|Viagra)=P(Viagra|垃圾邮件)×P(垃圾邮件)/P(Viagra)=(4/20)×因此,如果电子邮件含有单词Viagra,那么这封电子邮件是垃圾邮件的概率是80%。这就是商业垃圾邮件过滤器的工作方式。朴素贝叶斯算法朴素贝叶斯算法描述应用贝叶斯定理进行分类的一个应用。之所以这样命名是因为该算法对数据有一对“简单”的假设。特别地,朴素贝叶斯假设数据集的所有特征都具有相同的重要性和独立性,而在大多数的实际应用中,这些假设是鲜有成立的。然而,在大多数情况下,当违背这些假设时,朴素贝叶斯依然可以很好地应用。之所以这样,一种解释是:只要预测的分类值是准确的,那么获得精确的概率估计值并不重要。朴素贝叶斯分类利用朴素贝叶斯事件独立性的假设,根据P(A∩B)=P(A)P(B),可以大为降低计算所需资源的要求。本质上讲,在给定特征F1到Fn提供的证据的条件下,类C中水平为L的概率等于每一条证据在类C水平L下的条件概率的乘积,再乘以类C的水平L的先验概率和尺度因子1/Z,尺度因子Z将把上述结果转换为一个概率值:拉普拉斯估计对于类中一个或多个水平,如果一个事件从来没有发生过,在朴素贝叶斯算法中,因为概率是相乘的,为0的概率将会有效抵消后否决所有其它的证据,这将会导致分类错误。这个问题的解决涉及使用拉普拉斯估计〔Laplaceestimator〕方法,该方法的本质是给频率表中的每一个计数加上一个较小的数,这样就保证了每一类中每个特征发生的概率是非零的。在朴素贝叶斯算法中使用数值特征例子-基于贝叶斯算法的收集垃圾短信过滤分而治之-应用决策树和规那么进行分类本章将学习以下知识:每一种方法〔决策树、规那么分类〕是采用什么策略将数据划分成令人感兴趣的类别的。决策树和规那么分类的几种实现方法,包括C5.0算法、1R算法和RIPPER算法。如何使用这些算法进行现实世界的分类任务,比方,确定高风险的银行贷款、识别有毒的蘑菇。理解决策树决策树学习算法以树形结构建立模型,包含一些列逻辑决策,带有说明根据某一属性做出决定的决策节点。决策树由叶节点〔终端节点〕终止,叶节点表示遵循决策组合的结果。决策树本质上是一个流程图,特别适合应用于由于法律因素需要透明化的分类机制以及为了便于决策需要共享成果的分类。事实上,决策树可能是最广泛使用的机器学习技术之一,它几乎可以用于任何类型的数据建模,并且具有无与伦比的性能。分而治之决策树的建立使用一种称为递归划分〔recursivepartitioning〕的探索法,这种方法通常称为分而治之〔DivideandConquer〕,因为它利用特征的值将数据分解成具有相似类的较小的子集。如果一个节点停止,它可能具有以下情况:节点上所有〔几乎所有〕的案例都属于同一类。没有剩余的特征来分辨案例之间的区别。决策树已经到达预先定义的大小限制。由于数据可以继续划分,直到在一个分区内的特征没有区别,所以决策树容易对训练数据进行过度拟合。决策树的生成过程是针对输入数据集,按照一定的划分条件逐层分类,直至不可再分或不需再分,充分生成树。具体的,先找到各个变量自身的最优划分,再比拟各变量间的最优划分,以差异最大者为节点分类变量,并采用其最优划分。树的复杂度由叶节点的数目确定,为控制复杂度,通过剪枝过程对节点数进行删减。树的复杂度太大,会造成数据的过拟合。树的复杂度太大,会造成数据的过拟合。应用最普遍的两种决策树算法是:CART(ClassificationandRegressionTrees)和C4.5(successorofID3)。CART算法既可以建立分类树,也可以构造回归树。它是许多集成分类算法的基分类器,如Boosting及RandomForests等都以此为根底。C4.5是ID3(Iterativedichotomiser3)的改良算法,解决了ID3只能用于离散型变量,且确定判定变量时偏向于选择取值较多的变量这两项缺陷。C5.0在运行效率方面进一步完善且多用于商业用途。决策树算法R实现,主要涉及4个软件包,分别为rpart、rpart.plot、maptree及RWeka。其中rpart主要用于建立分类树及相关递归划分算法的实现;rpart.plot专门用来对rpart模型绘制决策树;maptree用来修剪、绘制不仅仅局限于rpart模型的树型结构;RWeka包提供了R与Weka的连接,Weka中集合了用Java编写的一系列机器学习算法。表R实现决策树的主要软件包和函数算法名称软件包核心函数CARTrpartrpart()、prune.rpart()、post()rpart.plot()maptreedraw.tree()RWekaJ48()rpart函数函数rpart()的根本格式为:rpart(formula,data,weights,subset,na.action=na.rpart,method,model=FALSE,x=FALSE,y=TRUE,parms,control,cost,...)其中,formula中放置想要建立模型的公式,即设置输入/输出变量,格式为y~x1+x2+...,当输出变量为除了y的所有变量时,也可以用y~.来表示;data为待训练的数据集;subset可以选择出data中假设干行样本来建立模型。na.action用来处理缺失值,其默认选择为na.rpart,即仅剔除缺失y值,或缺失所有输入变量的样本数据;method参数用于选择决策树的类型,包括anova、poisson、class和exp四种类型,在不进行设置的默认情况下,R会自行猜想,比方当y为因子型变量时,默认取class。其中,anova对应于我们所说的回归树,而class型那么为分类树。control参数可参照rpart.control,即:rpart.control(minsplit=20,minbucket=round(minsplit/3),cp=0.01,maxcompete=4,maxsurrogate=5,usesurrogate=2,xval=10,surrogatestyle=0,maxdepth=30,...)其中,minsplit表示每个节点中所含样本数的最小值,默认值取20;minbucket那么表示每个叶节点中含样本数的最小值;cp即复杂度参数(complexityparameter),假设取cp=0.03,那么说明在建模过程中仅保存可以使得模型拟合程度提升0.03及以上的节点,该参数的作用在于可以通过剪去对模型奉献不大的分支,提高算法效率;maxdepth可控制树的高度。函数prune.rpart()可根据cp的值对决策树进行剪枝,即剪去cp值较小的不重要分之。其格式为prune(tree,cp,...),放入决策树名称及cp值即可。它们都是用来绘制分类树/回归树的制图函数。J48函数函数J48()是实现C4.5算法的核心函数,其根本格式为:J48(formula,data,subset,na.action,control=Weka_control(),options=NULL)其中的formula放置于构建模型的公式,data为建模数据集,na.action用于处理缺失数据,而control那么是对树的复杂度进行控制的参数,具体取值见下表:表J48()函数中control参数的局部取值及其含义参数名获取全部取值:WOW(J48)U不对树进行剪枝,默认是TRUECM对每个叶节点设置最小观测样本量,默认值是2R按照错误率递减方式进行剪枝,默认为TRUEN设置按照错误率递减方式进行剪枝时,交互验证的折叠次数,默认值为3B每个节点仅分为两个分支,即构建二叉树,默认为TRUEC5.0决策树算法是计算机科学家J.RossQuinlan为改良他之前的算法C4.5开发的新版本,C4.5本身是对他的ID3算法〔IterativeDichotomiser3,迭代二叉树3代〕的一个改良。一个基于Java的开源的流行算法名为J48,可以代替C4.5算法,该算法包含在RWeka包中。C5.0、C4.5和J48算法之间的差异是很小的,这三种算法应该认为是同义的。C5.0算法已经成为生成决策树的行业标准,通过它建立的决策树一般都表现得与其他先进模型几乎一样好,而且更容易理解和部署。该算法的缺点相对来说是较轻微的,而且在很大程度上可以防止。选择最正确的分割决策时面临的第一个挑战就是需要确定根据哪个特征进行分割。一般根据分区中主要包含来源与一个单一类的案例选择特征分割数据。如果一组数据中只包含一个单一的类,那么这些类被认为是纯的。熵度量纯度。样本数据的熵表示分类值如何混杂在一起,最小值0表示样本是完全同质的,而1表示样本凌乱的最大数量。熵的具体定义如下:在熵的公式中,对于给定的数据分割〔S〕,常数c表示类的水平数,pi表示落入类的水平i中的特征值的比例。决策树算法使用熵值来计算由每一个可能特征的分割所引起的同质性〔均匀性〕变化,该计算称为信息增益。对于特征F,信息增益的计算方法是分割前的数据分区〔S1〕的熵值减去由分割产生的数据分区〔S2〕的熵值,即:InfoGain(F)=Entropy(S1)-Enropy(S2)信息增益越高,根据某一特征分割后创立的分组越均衡,如果信息增益为零,那么根据该特征进行分隔后的熵值不会减少。另一方面,最大信息增益等于分割前的熵值,这意味着分割后熵值为零,即决策结果是在完全同质的分组中。注意:信息增益不是构建决策树的唯一分割标准。其他常用的标准有基尼系数、卡方统计量和增益比。修剪决策树修剪决策树是防止对训练数据的过度拟合,分为预剪枝决策树法和后剪枝决策树法。预剪枝决策树法就是一旦决策树到达一定数量的决策,或者决策节点仅含有少量的案例,就停止树的增长,这也称为提前停止法。该方法防止了做不必要的工作,是一个有吸引力的策略。然而,缺乏之处在于没有方法知道决策树是否会错过细微但重要的模式,这种模式只有在决策树生长到足够大时才能学习到。后剪枝决策树法是在一棵决策树生长得过大时,根据节点处的错误率使用修剪准那么将决策树减小到更适宜的大小。该方法比预剪枝法更有效。C5.0算法的优点之一是它可以自动修剪,该算法的总体策略就是事后修剪决策树。它先生成一个过度拟合训练数据的大决策树,然后删除对分类误差影响不大的节点和分枝,修剪的过程就是子树提升或子树替换。例子通过这个例子,将使用C5.0算法建立一个简单的信贷审批模型,同时调整模型的结果,从而使导致机构财务损失的误差最小化。第1步-收集数据credit.csv信贷数据集包含了1000个贷款案例,一个用来表示贷款特征和贷款申请者特征的数值特征与名义特征的组合,一个类变量表示贷款是否陷入违约。第2步-探索和准备数据数据探索由于数据中的大多数特征为名义特征〔变量〕,所以在利用函数read.csv()导入数据时,将忽略参数stringsAsFactors〔即使用默认值TRUE〕。>credit<-read.csv(“”);>str(credit);较大的支票和储蓄账户余额应该与较小的贷款违约可能性相联系。>table(credit$checking_balance);#支票账户余额<0DM>200DM1-200DMunknown27463269394>table(credit$savings_balance);#储蓄账户余额<100DM>1000DM100-500DM500-1000DMunknown6034810363183有些贷款特征是数值型的变量。>summary(credit$months_loan_duration);#贷款期限Min.1stQu.MedianMean3rdQu.Max.>summary(credit$amount);#贷款金额Min.1stQu.MedianMean3rdQu.Max.250136623203271397218420贷款金额介于250~18420马克之间,贷款期限为4~72个月,贷款期限的中位数为18个月,贷款金额的中位数为2320马克。变量default表示贷款申请者是否未能符合约定的付款条件而陷入违约。所有申请贷款有30%陷入违约:>table(credit$default);#30%的贷款违约noyes700300数据准备-创立随机的训练数据集和测试数据集将数据分为两局部:用来建立决策树的训练数据集和用来评估模型性能的测试数据集。credit.csv数据集的数据已经根据贷款的金额对数据进行了排序,在划分数据前,需要通过随机排列信贷数据框,以防止仅根据小额贷款建立模型,而基于大额贷款测试模型的错误。随机数的产生,可以使用函数runif(),该函数在默认情况下产生0~1之间的随机数序列。>set.seed(12345);#设置随机种子,确保重复分析可得到相同的结果>credit_rand<-credit[order(runif(1000)),];#对信贷数据框随机排序注意:order(c(0.25,0.5,0.75,0.1))返回的序列时4123。为了确认得到的是相同的数据,只是排序不同,我们在两个数据框之间比拟特征amount:>summary(credit$amount);Min.1stQu.MedianMean3rdQu.Max.250136623203271397218420>summary(credit_rand$amount);Min.1stQu.MedianMean3rdQu.Max.250136623203271397218420可以使用head()函数来查看每一个数据框中的前几个值:>head(credit$amount);[1]116959512096788248709055>head(credit_rand$amount);[1]119925761103402015011568虽然前几个值不同,但由于主要统计量是相同的,所以这说明我们随机排序的做法是正确的。>credit_train<-credit_rand[1:900,];#构建训练数据集>credit_test<-credit_rand[901:1000,];#构建测试数据集如果一切顺利,在每一个数据集中,我们应该有大约30%的违约贷款。据此检查数据划分是否平衡:>prop.table(table(credit_train$default));noyes>prop.table(table(credit_test$default));noyes第3步-基于数据训练模型使用C50添加包中的C5.0算法来训练决策树模型。创立分类器:m<-C5.0(train,class,trials=1,costs=NULL)train:一个包含训练数据的数据框class:包含训练数据每一行的分类的一个因子向量trials:可选数值,用于控制自助法循环的次数〔默认值为1〕,引入自适应增强算法以提高模型性能,成为事实标准的数字取值10costs:可选矩阵,用于给出与各种类型错误相对应的本钱,用于提高模型某些方面的性能该函数返回一个能够用于预测的C5.0模型对象。进行预测:p<-predict(m,test,type=”class”)m:有函数C5.0()训练的一个模型test:包含测试数据的数据框,与用来创立分类器的训练数据有同样的特征type:取值“class”或者“prob”,标识预测是类别值或者是原始的预测概率该函数返回一个向量,根据参数type的取值,该向量含有预测的类别值或者原始预测的概率值例子:credit_model<-C5.0(credit_train,loan_default)credit_prediction<-predit(credit_model,credit_test)可以通过输入模型名称来查看关于该决策树的一些根本数据:>credit_modelCall:C5.0.default(x=credit_train[-17],y=credit_train$default)ClassificationTreeNumberofsamples:900Numberofpredictors:16Treesize:67#说明有64个决策,决策树够大要查看决策,可以对模型调用summary()函数:>summary(credit_model);C5.0[Release2.07GPLEdition]Classspecifiedbyattribute‘outcome’Decisiontree:checking_balance=unknown:no(358/44)checking_balancein{<0DM,>200DM,1-200DM}::...credit_historyin{perfect,verygood}::...dependents>1:yes(10/1):dependents<=1::..saving_balance=<100DM:yes(39/11)saving_balancein{>1000DM,500-1000DM,unknown}:no(8/1)saving_balance=100-500DM::..chedking_balance=<0DM:no(1)checking_balancein{>200DM,1-200DM}:yes(5/1)summary(credit_model)完整的输出Call:C5.0.default(x=credit_train[-17],y=credit_train$default)C5.0[Release2.07GPLEdition] TueOct1317:36:202015Classspecifiedbyattribute`outcome'Decisiontree:checking_balancein{>200DM,unknown}:no(414/53)checking_balancein{<0DM,1-200DM}::...months_loan_duration<=11::...credit_historyin{critical,good,perfect,poor}:no(71/11):credit_history=verygood:yes(6/1)months_loan_duration>11::...savings_balancein{>1000DM,500-1000DM,unknown}::...checking_balance=1-200DM:no(52/9):checking_balance=<0DM:::...savings_balancein{>1000DM,500-1000DM}:no(8/1):savings_balance=unknown:::...credit_historyin{critical,perfect,poor}:no(3):credit_history=verygood:yes(2):credit_history=good:::...phone=no:yes(10/1):phone=yes:::...job=management:yes(2):jobin{skilled,unemployed,unskilled}:no(6/1)savings_balancein{<100DM,100-500DM}::...months_loan_duration>42:yes(35/5)months_loan_duration<=42::...percent_of_income<=3::...employment_duration=unemployed:::...dependents<=1:no(11/3)::dependents>1:yes(2):employment_duration=<1year:::...other_credit=bank:no(3)::other_credit=store:yes(1)::other_credit=none::::...job=management:no(2/1)::jobin{unemployed,unskilled}:yes(8/1)::job=skilled::::...age>28:no(5)::age<=28::::...amount<=3518:yes(7)::amount>3518:no(3):employment_duration=>7years:::...jobin{unemployed,unskilled}:no(3)::job=management::::...savings_balance=<100DM:no(7/2):::savings_balance=100-500DM:yes(1)::job=skilled::::...savings_balance=100-500DM:no(1)::savings_balance=<100DM::::...other_creditin{bank,store}:yes(4)::other_credit=none:[S1]:employment_duration=1-4years:::...amount>7721:yes(5)::amount<=7721::::...housing=other:yes(1)::housing=own:no(34/8)::housing=rent::::...years_at_residence<=3:no(5)::years_at_residence>3::::...credit_historyin{critical,good,perfect,:::poor}:yes(7/1)::credit_history=verygood:no(1):employment_duration=4-7years:::...savings_balance=100-500DM:no(8):savings_balance=<100DM:::...housingin{other,rent}:no(6):housing=own:::...purposein{car0,renovations}:yes(0):purposein{business,education}:no(4):purposein{car,furniture/appliances}:::...checking_balance=<0DM:yes(5):checking_balance=1-200DM:::...months_loan_duration>18:yes(2):months_loan_duration<=18:::...other_credit=bank:yes(1):other_creditin{none,:store}:no(3)percent_of_income>3::...credit_historyin{perfect,verygood}:yes(16/1)credit_historyin{critical,good,poor}::...purposein{business,car0}:no(11/3)purpose=education:yes(6)purpose=renovations::...years_at_residence<=3:yes(2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- BIM工程师-全国《BIM应用技能资格》押题密卷2
- 沪科版八年级物理全一册《第三章光的世界》单元检测卷带答案
- 广州版小学五年级英语下册知识点和练习题
- 递推技术在信号处理中的使用
- 利用压缩空气实现大规模储能
- 2024高中地理第四章地表形态的塑造章末知识整合学案新人教版必修1
- 2024高中生物第二章动物与人体生命活动的调节第1节通过神经系统的调节训练含解析新人教版必修3
- 2024高考地理一轮复习第十五单元区域生态环境建设考法精练含解析
- 2024高考化学一轮复习第5章物质结构与性质元素周期律第15讲原子结构核外电子排布规律学案
- 2024高考历史一轮复习方案专题三现代中国的政治建设祖国统一与对外关系第7讲现代中国的政治建设与祖国统一教学案+练习人民版
- 气力输灰安装施工方案
- 初三物理寒假课程
- 如何预防心脑血管病
- LY/T 3321-2022草原生态价值评估技术规范
- 《新媒体文案创作与传播》期末试卷1
- 人感染H7N9禽流感流行病学调查和处置
- 高等院校内部控制多模型决策方法研究
- 木栈道专项施工方案(同名3601)
- GB/T 11957-2001煤中腐植酸产率测定方法
- 浙江省普通高中通用技术学科教学指导意见
- HRB500级钢筋施工要点ppt课件
评论
0/150
提交评论