STA333第25章回归和分类树(第1部分)25.1说明当我们运用回归分析时,其中一个主要目的是决定因变量Y与自变量X存在什么样的关系.然而在练习中,我们并不局限于只是考虑一个自变量:通过使用许多自变量(X1,X2,…,Xk)去确定因变量Y的价值的概念在数据分析中广泛的运用。举个例子,考虑下列情形:•你患上心脏病的风险也许同时受很多潜在因素的影响:你的体重,你是否有心脏病的家族遗传史,是否有糖尿病,运动的时间,你的血压,等等.•汽车的汽油英里数受到很多方面的影响:汽车的重量,发动机有多少气缸,汽车外形是否符合空气动力学,等等.•一个邮件过滤器能识别出一封收到的邮件是否是垃圾邮件也许与许多潜在因素有关:例如.主要信件的文字总长,金钱这个词在信件中出现的频率,在信件中出现“XXX”的特征,等等.在实际中,标准数据分析工具用于这样的问题就是多元回归.在多元回归中,我们试图运用一些规定的数学函数将因变量Y与自变量联系起来。Y=0+1X1+2X2+…+kXk+被估计的参数β和过去经常发生预测的Y并且去决定哪一个变量对Y最具影响.明显地,这是一种参数方法推理关于Y取决于参数β的估计值和回归误差的假定。描述潜在自变量如何影响因变量的另一种方法是为了全面地辨别Y的值而考虑用关于X的值划定最后界限。举个例子,假定心脏收缩的血压水平“划定最后界限”为144将比我们划定其他心脏收缩的血压水平界限更好的去分一个人是否患有心脏病。事实上,划分取样分为两组:•心脏收缩的血压水平≤144.•心脏收缩的血压水平144.在每个组内,心脏病流行依据有最全面的相似点,但是组间却有最全面的不同点。换句话说,我们选择自变量X的分裂点以便使因变量Y的值在每个组内尽可能的同质并且在组织间尽可能的不同。没有理由就只分裂一次,如果要最大限度的决定Y我们可以在自变量的很多部分进行分裂。举个例子,我们可以得到两个以上的基于血压水平的组。更普遍的,我们可以在几个不同的自变量同时执行分裂。这种处理方式称作递归的分区,并且这是在数据挖掘技术中经常使用的主要统计工具。23725.2什么是数据挖掘技术?也许在这一点上,简单介绍一下“数据挖掘技术”是必要的。数据挖掘技术是一种处理方法可以分析得自不同观点的数据并且汇总出有用信息比如可以提高税收,降低成本等。技术上而言,数据挖掘技术是一种在大有关联的数据库中从许多变量中寻找一种模式或结构的处理方法。例如:YourKrogerPluscard.位于美国中西部的连锁店Kroger使用数据挖掘技术来分析当地人的购买模式。他们在你刷你的KrogerPlus卡时收集数据.它是如何工作的?通过数据挖掘技术假定消费者们的购物模式,他们发现在周四和周六男人购买尿布时,他们通常会购买啤酒。让我们进一步来分析这个现象发现这些消费者在每周六购买他们的所需品非常有代表性。然而在周四,他们只购买一点儿商品。Kroger决定他们可以为即将当来的周末买啤酒。连锁店可以利用这个信息在个方便提高收益。举个例子,他们可以把啤酒显示接近尿布显示。或者,他们可在周四确定啤酒和尿布是全价。你将得到下表。数据挖掘技术有五步构成:•从数据“warehouse”中提取并装载数据(例如:购买交易)。•在多维数据库系统中储存并控制数据。•向商业分析师和IT专业人员提供数据。•用软件分析数据。•在应用格式中呈现分析结果,例如图形或表格形式。许多类型的数据挖掘分析是可能的,但是我们将要谈论的一个(暂时地!)称为决策树。树状结构代表一套决策,并且这些决策生成数据及的分类规则。发展中的决策树的非参数统计方法就是分类和回归树(CART)。这些规定了一系列的规则以至于你可以适应于新的数据集去预测将要得到的结果。这些“规则”通过寻找最佳的数据“溢出点”被开发,这就是递归分区发挥作用的过程。23825.3递归分区101递归分区的背后想法是去重复的选择最优作用的预测变量并且用它来对数据分层。每层里,我们选择数据中最有作用的自变量和子分层直到这个层非常小我们已经将数据用完为止。这些的结果就是决策树。如果因变量Y是一个类别变量(e.g.你是否患有心脏病?),这个决策树也可以叫做分类树.如果Y是一个连续数变量(e.g.考虑到汽车的油耗是多少?),又可以叫做回归树。故意地,每层种的因变量都尽可能的相似。递归分区在给数据提供模型或者制定详细的预测方面并不是特别的好,这个数据挖掘技术程序的有效性是不但找到数据的主要分部而且是最有作用的预测变量。首先,让我们重游(再一次)这个musclemass数据。这是一个只有一个自变量的小数据集,但是我们可以用它作为基础例子来介绍发生了什么。例:肌肉质量.探究女人肌肉质量和年龄之间的关系,一个营养学家随机的挑选15个女人从40岁到79岁每10岁为一组。数据集中的变量是质量和年龄。让我们建立决定质量和年龄的回归树。解决方案。我们可以在R软件中用附加的包裹rpart来执行递归分区。一次安装和加载,我们可以通过以下运行得到回归树:library(rpart)tree1-rpart(mass~age,data=musclemass)plot(tree1)text(tree1)以下是单一自变量年龄的回归树结果:读取这个树如下所示:如果满足节点上规定的条件,我们使分支向左。因此,如果年龄大于等于56.5,我将分支向左。于是得到另一个决定:年龄是否大于或等于65.5?如果不是,我们将分支向右。这两个分支的组合以为一个人的年龄在[56.5,65.5)这个年龄组。因为这个相对地同类的年龄组,这个预测的肌肉质量是Y=80.12.可见结果的另一种方法可以被适用于依下列各项:print(tree1)n=60node),split,n,deviance,yval*denotesterminalnode1)root6015501.930084.966672)age=56.5373674.919074.594594)age=65.5201929.800069.900008)age=75.591042.000065.66667*9)age75.511594.545573.36364*5)age65.517785.764780.11765*3)age56.5231443.2170101.652206)age=46.513348.000097.00000*7)age46.510448.1000107.70000*这个树将年龄划分为五个段,如上所示的终端节点:•年龄小于46.5预测平均肌肉质量=107.7•年龄在区间[46.5,56.5)预测平均肌肉质量=97.0•年龄在区间[56.5,65.5)预测平均肌肉质量=80.12•年龄在区间[65.5,75.5)预测平均肌肉质量=73.36•年龄大于等于75.5预测平均肌肉质量=65.66这当然是另一种方法去考虑预测反应。迄今为止,我们已经有两种不同的方法通过使用女人年龄的信息去“建模”因变量质量。1.简单线性回归(强加于一些关于分布误差和关系结构的假设)2.LOESS模型工具(用非参数方法去描述一个关于反映和预测之间关系的明显趋势)只是做一个说明,情节在下一页显示从这两种方法中产生的模型,旁边是在使用递归分区拟合回归树的结果:先前的例子是简单回归树,换言之,就是对于一个连续的数值测量结果的决定树。当结果是定性的或无条件的时候,我们也可以建立决定树。既然那样,这个树就叫做分类树。这是另一这只含有一个自变量的简单例子,眼下因变量是无条件的。我们的目的是预测一个基于因变量值的分类。例子:癌症普遍性.一个从病人记录中抽取200个年龄60岁的人的随机抽样被提供去调查一个在多年抽烟和患有肺癌症的人群。这个数据出现在我们的储存库的R数据框架cancerprev中。Yrssmoke多年来一直抽烟cancer变量说明是否有癌症(YorN)1建立一个分类树为了预测在60岁的老人中的癌症的比例。解决方案。首先,它可能是有益的数据。用箱形线形象的比较这个抽样组:boxplot(yrssmoke~cancer,data=cancerprev,main=SmokingprevalencebyCancergroup,xlab=Iscancerpresent?,ylab=Yearsofsmoking)我们将在课堂上讨论这个情节。现在,这是一个分类树使用rpart的工具:library(rpart)tree2-rpart(cancer~yrssmoke,data=cancerprev,method=class)print(tree2)n=200node),split,n,loss,yval,(yprob)*denotesterminalnode1)root20051N(0.745000000.25500000)2)yrssmoke10.513213N(0.901515150.09848485)*3)yrssmoke=10.56830Y(0.441176470.55882353)6)yrssmoke355426N(0.518518520.48148148)12)yrssmoke=28.5187N(0.611111110.38888889)*13)yrssmoke28.53617Y(0.472222220.52777778)26)yrssmoke26.52813N(0.535714290.46428571)52)yrssmoke=2282N(0.750000000.25000000)*53)yrssmoke22209Y(0.450000000.55000000)106)yrssmoke18104N(0.600000000.40000000)*107)yrssmoke=18103Y(0.300000000.70000000)*27)yrssmoke=26.582Y(0.250000000.75000000)*7)yrssmoke=35142Y(0.142857140.85714286)*242这个树有七个终极节点,我们可以同这个放着画出:plot(tree2)text(tree2)这是一些观察报告:•在开始节点(根节点),这个组中有n=200个人(i.e.整个样本)。其中74.5%的人为患有癌症(cancer=N)剩下的25.5%的人患有癌症(cancer=Y)。•假设一个人抽烟的年数少于10.5。然后他们将第一个分支向左。有132个这样的人。其中,90.15%的人没有的癌症而剩下的9.85%的人患有癌症。对这个组的预测分类为“N”:换言之,我们预测一个抽烟少于10.5年的人在60岁时将不得癌症。这是我们的预测因为在这个组中的大多数人未得癌症(90.15%vs.9.85%)。然而你将会注意到这个树状模型并不完美:仅在这个段,我们对132×0.0985=13个人进行错误的分类。简讯:没有模型是完美的!•看看你是否能做出类似决定其它分支的树。在任何建模运行(线性回归,LOESS,树,等等),我们想要要一个在数据里可以解释基本特征和结构的模型,但是我们也想要一个并不过度复杂的模型。分裂的选择在上面的例子中做好癌症存在和未存在的区分,但是对做有效估计有更多的分裂点是有必要的。所以,就像回归,我们可能想要消除不必要的分歧。实际上,我们最终可能想要修剪树!稍后我们将看到这一点,但是在下一章,当你有许多因变量时我将扩展树的构建情况。第25章练习1.儿童的呼吸率.高呼吸速率是一个潜在的儿童呼吸道感染的诊断指标。然而为了判断呼吸速率是否确实“高”,一个医师必须要给出一个清楚正规的呼吸速率分布图.在最后,意大利的研究人员们测量出了年龄在15天到三岁之间的618名儿童的呼吸速率。数据显示在R的工作空间里。RData.适用和解释这些数据的基础回归树。2.鸟类的居住.在鸟类学研究上进行了确定两个不同的特征将如何影响一个特定种类的鸟在一个给定的岛上居住的可能性。在这个例子中,自变量被称为已占用:在问题中1的值意味着这个给定的岛已被一种物种占用,0的