数据挖掘与数据分析:基于R语言- 课件 第3、4章 线性回归、逻辑回归_第1页
数据挖掘与数据分析:基于R语言- 课件 第3、4章 线性回归、逻辑回归_第2页
数据挖掘与数据分析:基于R语言- 课件 第3、4章 线性回归、逻辑回归_第3页
数据挖掘与数据分析:基于R语言- 课件 第3、4章 线性回归、逻辑回归_第4页
数据挖掘与数据分析:基于R语言- 课件 第3、4章 线性回归、逻辑回归_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DataMiningandDataAnalysiswithR数据挖掘与数据分析:基于R语言第三章线性回归线性回归模型的基本概念与构建01线性回归模型的检验02线性回归的R语言实现03章节内容3.1线性回归模型的一般形式

3.2线性回归模型参数的估计

3.3自变量为分类变量的处理分类变量(也称为因子或定性变量)是将观察指标分类的变量。它们具有数量有限的不同值,称为水平。回归分析中需要用数值变量,因此通常需要将分类变量进行重新编码,使其成为一系列二进制的变量,这个新的编码,被称为“哑变量”。R在进行回归分析时会自动创建哑变量,也可手动将分类变量重新编码当分类变量具有大量水平时,将某些水平组合在一起,可以减少哑变量数;某些分类变量的水平是有序的,它们可以被转换为数值(0,1,2,3…)并按连续性变量处理。3.4线性回归模型的显著性检验

F检验

t检验

3.5线性回归中的多重共线问题R中“car”包的vif()函数可以用于多重共线性检验,举例如下:vif取值范围变量之间存在多重共线情况的程度0-10不存在多重共线性10-100存在较强的多重共线性大于100存在严重的多重共线性library(car)vif(m_multicolline)输出:X1X2X3X4X538.537421.682814.75369.68245.3267Vif取值范围对应多重共线情况的程度

3.5

线性回归中的多重共线问题library(leaps)x<-data[,2:7]y<-data[,1]out<-summary(regsubsets(x,y,nbset=2,nvmax=ncol(x)))tab<-cbind(out$which,out$rsq,out$adjr2,out$cp)Tab输出:

(Intercept)X1X2X3X4X5X6111000000.85796970.854024437.674750211100000.89269520.886563522.150747310011010.91457360.907036013.109930410011110.93134420.92302236.646728511111010.93377020.92342187.422476611111110.93857060.92668107.000000

3.5

线性回归中的多重共线问题亦可使用逐步回归方法解决多重共线问题其基本思想是逐个引入自变量,每次引入对因变量影响最显著的自变量,并对方程中的老变量逐个进行检验,把变化不显著的变量逐个从方程中剔除,最终的回归方程既不漏掉对因变量影响显著的变量,又不包含对因变量影响不显著的变量。R语言中的step()函数可以在已有模型的基础上实现逐步回归,其原理是将原模型中的变量逐个剔除,重新进行回归,依据赤池信息量准则(AIC,Akaikeinformationcriterion)确定最终的模型。赤池信息量准则是评估统计模型的复杂度和衡量统计模型拟合效果的一种标准,可以帮助寻找能够最好地解释数据但包含最少自由参数的模型。赤池信息量越小,表明模型的拟合效果越好且出现过度拟合的可能性越小。3.5

线性回归中的多重共线问题tstep<-step(m_stepreg)summary(tstep)输出:Start:AIC=28.76Y~x1+x2+x3+x4DfSumofSqRSSAIC-x310.109147.97324.021-x410.247048.11125.011-x212.972550.83625.728<none>47.86428.764-x1125.950973.81530.576

Step:AIC=24.02Y~x1+x2+x4

DfSumofSqRSSAIC<none>47.9724.021-x419.9357.9025.420-x2126.7974.7628.742-x11820.91868.8860.629逐步回归方法举例:选择最低赤池信息量对应的模型后重复进行变量的剔除操作,当赤池信息量的值不再变小时,终止逐步回归,输出逐步回归结果,举例如下:3.6线性回归模型的拟合优度

3.6线性回归模型的拟合优度

3.7

回归诊断回归模型构建之后,需要确定模型是否符合回归分析的前提假设,包括:样本中是否存在异常点因变量和每个自变量都是线性关系残差值应该是一个均值为0的正态分布(残差的正态性)本节将针对以上前提假设分别介绍相关诊断方法。注:使用R自带函数(par(mfrow=c(2,2),plot(model))绘制残差与杠杆图、QQ图等时,默认显示当前样本最极端的前三个数据点,如图3-1中的点49、30、10。异常点识别图3-1残差与杠杆图中的异常点可以利用库克距离判断某个样本点是否为异常点某个点的库克距离越大,表示剔除该点数据后,回归方程参数的变化越大。一般认为,如果库克距离超过1,则表示该点为对回归模型影响比较大的高影响点。残差与杠杆图可以显示异常点,该图的横轴表示点的杠杆值,纵轴表示点的标准化残差,红色实线为二者的趋势线,红色虚线表示库克距离的等高线。横坐标过大的点为高杠杆点,纵坐标过大的点为离群点,红色虚线外的点为强影响点,这三类点均为异常点,一般异常点出现在图的右上角或右下角.如图,点49的库克距离大于1,且横纵坐标都较大,为异常点。线性关系检验图3-2因变量和每个自变量都是线性关系的残差与拟合因变量和每个自变量之间的线性关系可以使用“残差vs拟合图”进行检验。该图中横坐标为模型在点上的拟合值,纵坐标为对应的残差。红色线条表示二者关系的平滑曲线。这条平滑曲线是通过对残差进行局部平均或局部回归得到的,它有助于直观地观察残差是否随着拟合值的增加而呈现出某种趋势。若满足线性假设,残差应该在y=0附近均匀分布,二者应该不存在任何趋势性的关系,即红色线条应该与y=0基本重合(如右图示例),则可认为因变量与自变量之间都是线性关系。残差的正态性检验图3-3a)QQ图图3-3b)核密度图残差的正态性检验可以通过QQ图与核密度图实现。QQ图是散点图,横坐标为对应分布(此处为正态分布)的概率分位数,纵坐标为数据序列的分位数。若点在QQ图上趋近于落在y=x直线上,表明观测数据的分位数与正态分布的分位数之间存在近似线性的关系,从而说明样本数据服从正态分布。核密度图的横坐标为学生化残差,纵坐标为密度。二者都可以用来鉴别样本数据是否近似于正态分布。若核密度图曲线与标准正态分布曲线近似重合,这表示模型的残差在整体上近似地符合正态分布。3.8线性回归的R语言实现本节以一个汽车燃油效率数据集“FuelEfficiency”为例进行线性回归的R语言示例,拟构建GPM与WT、DIS、NC、HP、ACC、ET之间的线性回归模型。该数据集共有38条数据,记录了不同品牌型号汽车的以下数据:“每加仑英里数(MPG,milespergallon)”“每百英里加仑数(GPM,gallonsper100miles)”“汽车的重量(WT,theweightofthecar,单位:千镑)”“发动机气缸的总容积(DIS,cubicdisplacement,单位:立方英尺)”“气缸数(NC,numberofcylinders)”“马力(HP,horsepower)”“加速度(ACC,acceleration,速度从0-60英里/h所需时间:秒)”“发动机类型(ET,enginetype,1为直型,0为V型,直型发动机的效率往往低于V型发动机,故可将该变量看作连续性变量)”3.8线性回归的R语言实现数据读取:FuelEff<-read.csv("./FuelEfficiency.csv")FuelEff[1:5,]输出:3.8线性回归的R语言实现par(mfrow=c(3,2),mai=c(.6,.6,.3,.3))plot(GPM~WT,data=FuelEff)plot(GPM~DIS,data=FuelEff)plot(GPM~NC,data=FuelEff)plot(GPM~HP,data=FuelEff)plot(GPM~ACC,data=FuelEff)plot(GPM~ET,data=FuelEff)输出:图3-4数据集“FuelEfficiency”中各变量与GPM之间的散点图由各个变量与GPM的散点图可以看出,GPM与WT、DIS、HP之间有着较为明显的线性关系。画散点图,初步确定变量之间的相关性:3.8线性回归的R语言实现使用lm函数建立线性回归模型:

FuelEff<-FuelEff[-1]m1=lm(GPM~.,data=FuelEff)m1输出:3.8线性回归的R语言实现对模型F检验与t检验:R中summary()函数可以完成F统计量与t统计量的计算:summary(m1)输出:3.8线性回归的R语言实现#参考F统计量值(其中0.95为置信水平,6和31为自由度)qf(0.95,6,31)输出:[1]2.409432

#参考t统计量值qt(0.975,31)输出:[1]2.039513

3.8线性回归的R语言实现判断各个自变量之间的相关关系:由以下结果可以发现汽车重量WT与汽车气缸容积DIS,气缸数NC,马力HP有着较强的相关关系,表明模型可能存在多重共线问题cor(FuelEff)输出:3.8线性回归的R语言实现对模型多重共线性检验:由以下结果可以看出自变量WT、DIS、NC、HP对应的VIF值大于10,现有模型存在多重共线性。library(car)vif(m1)输出:3.8线性回归的R语言实现全子集回归:这里使用删除相关变量的方法解决多重共线性问题,为了保证删除一些自变量后模型仍然具有较好的拟合效果,进行全子集回归:基于如下的结果,可以使用NC、HP、ACC、ET作为最终的自变量构建线性回归模型。library(leaps)x<-FuelEff[,2:7]y<-FuelEff[,1]out<-summary(regsubsets(x,y,nbset=2,nvmax=ncol(x)))tab<-cbind(out$which,out$rsq,out$adjr2,out$cp)tab输出:3.8线性回归的R语言实现使用NC、HP、ACC、ET作为最终的自变量构建线性回归模型。m2=lm(GPM~NC+HP+ACC+ET,data=FuelEff)summary(m2)输出:显然,F统计量与t统计量的值比最初建立的模型m1更大,表明新模型m2的总体显著性与回归系数显著性均较高,此时的回归方程为:GPM=-2.64+0.46NC+0.03HP+0.11ACC-1.22ET3.8线性回归的R语言实现vif(m2)输出:对新模型进行多重共线性检验,表明已经不存在明显的多重共线性:3.8线性回归的R语言实现确定模型的回归效果是否显著:为了确定模型的回归效果是否显著,可进行交叉验证回归,常见的方法有单个剔除交叉验证、数据集拆分验证(将数据集的80%作为训练集,20%作为测试集)、K倍交叉验证,重复K倍交叉验证方法等。使用单个剔除交叉验证进行回归的验证,步骤如下:a.剔除一个数据样本,并在其余数据集上建立模型;b.针对在步骤a中剔除的单个数据样本进行模型测试,并记录下与预测相关的预测误差;c.对所有样本重复该过程;d.通过取在步骤b中记录的所有这些测试误差估计的平均值,计算总体预测误差3.8线性回归的R语言实现n<-length(FuelEff$GPM)diff<-dim(n)percdiff<-dim(n)for(kin1:n){train1<-c(1:n)train<-train1[train1!=k]m3<-lm(GPM~NC+HP+ACC+ET,data=FuelEff[train,])pred<-predict(m3,newdat=FuelEff[-train,])obs<-FuelEff$GPM[-train]diff[k]<-obs-predpercdiff[k]<-abs(diff[k])/obs}me<-mean(diff)rmse<-sqrt(mean(diff**2))mape<-100*mean(percdiff)mermsemape输出:0.0010564720.34870597.067888确定模型的回归效果是否显著:使用单个剔除交叉验证,结果如右图所示:3.8线性回归的R语言实现

library(caret)train.control<-trainControl(method="LOOCV")model<-train(GPM~NC+HP+ACC+ET,data=FuelEff,method="lm",trControl=train.control)print(model)输出:本章小结首先介绍了线性回归模型的基本形式及线性回归模型构建过程;接着介绍了线性回归模型的检验,包括模型的显著性检验、多重共线问题、线性回归模型的拟合优度检验及回归诊断;最后,以一个例子展示了使用R语言进行线性回归模型构建与检验的过程。DataMiningandDataAnalysiswithR数据挖掘与数据分析:基于R语言第四章逻辑回归逻辑回归原理01逻辑回归算法示例02模型理解03R编程04章节内容4.1逻辑回归原理图4-1逻辑函数对应的函数图像

逻辑回归模型简介

逻辑回归函数

逻辑回归推导

逻辑回归推导

4.2逻辑回归算法示例现在已知两套房子的面积和朝向以及房子好坏的信息,如下表所示。根据这些信息,利用逻辑回归模型实现房子好坏的分类。房屋面积房屋朝向房屋好坏20011120204.2逻辑回归算法示例1200111202

4.2逻辑回归算法示例

4.2逻辑回归算法示例第二轮迭代:

4.2逻辑回归算法示例

4.3模型理解逻辑回归模型的优点逻辑回归的基础是线性回归,对于问题的抽象相对容易。逻辑回归使用广泛,有着许多开源的资料。比如:逻辑回归在R、Python、Java等众多编程语言方面均有相应的集成。数学角度讲,逻辑回归模型的参数估计很简单,使用简单的梯度下降方法便可以对模型的参数进行估计,并且可以保证找到最优参数。逻辑回归模型的参数估计可以通过可靠的统计理论进行置信区间的检验,这相比于一些神经网络模型具有更好的可信度和解释性。逻辑回归模型简单易懂,且易于拓展,从而适应于不同的场景和任务。逻辑回归模型不仅是一个分类模型,而且还提供概率。这与只能提供最终分类结果的模型相比,是一个很大的优势,通过概率可以更加清楚地知道某一样本被划分为某一类别的量化信息。4.3模型理解逻辑回归模型的缺点逻辑回归模型在预测性能方面通常不是很好,因为可以学习的关系非常有限,并且通常简化了现实场景的复杂程度。逻辑回归模型的解释相比于线性回归更困难,逻辑回归可能会受到完全分离样本的影响。4.4R编程本节利用R语言将逻辑回归建模的整个过程进行实践。对于一个新的问题,逻辑回归建模主要包括四个部分:数据导入、数据预处理、逻辑回归模型训练、逻辑回归模型验证。实例中使用R语言C50包中自带数据集churnTrain和churnTest进行建模过程的演示。数据集中共包含19个变量,其中“是否流失”、“州”、“国际长途计划”、“信箱语言计划”列作为因子型变量,其余变量均为数值型变量。区域编码(area_code)变量对于整个模型的构建过程没有实际意义,因此后续对该变量进行排除,实现数据的预处理。数据导入install.packages("C50")

#导入相关库library(C50)

#导入自带的数据集data(churn)data(mlc_churn)#训练数据集train<-churnTrain#测试数据集test<-churnTeststr(train)输出:该数据集是关于电信行业客户流失的真实数据。数据集导入过程代码如下:属性名称属性解释属性示例数据类型state用户所属州AK字符串account_length用户对应的账号长度128整型international_plan用户对应的国际长途计划yes/no(1/2)布尔类型voice_mail_plan用户对应的信箱语音计划yes/no(1/2)布尔类型number_vmail_messages用户对用的邮件信息25整型total_day_minutes用户白天使用时长265整型total_day_calls用户白天呼叫数110整型total_day_charge用户白天转接数45.1浮点型total_eve_minutes用户傍晚使用时长197.4浮点型变量解释如下:数据导入属性名称属性解释属性示例数据类型total_eve_calls用户傍晚呼叫数99整型total_eve_charge用户傍晚转接数16.78浮点型total_night_minutes用户夜晚使用时长245整型total_night_calls用户夜晚呼叫数91整型total_night_charge用户夜晚转接数11.01浮点型total_intl_minutes用户国际长途使用时长10整型total_intl_calls用户国际长途呼叫数3整型total_intl_charge用户国际长途转接数2.7浮点型number_customer_service_calls用户服务电话数1整型churn用户是否流失yes/no(1/2)布尔型变量解释续表:数据导入数据预处理#剔除区域编码(area_code)列train<-train[,-3]test<-test[,-3]train$churn<-factor(train$churn,levels=c("no","yes"),order=TRUE)test$churn<-factor(test$churn,,levels=c("no","yes"),order=TRUE)对数据进行预处理用户流失数据集中的区域编码(area_code)对于整个模型的构建过程没有实际意义,因此对其进行删除,代码如下:由于整个模型更关心的是用户流失整个结果(churn=yes),所以对churn列的元素进行排序,代码如下:逻辑回归模型训练model<-glm(churn~.,data=train,family="binomial")summary(model)利用训练数据集对逻辑回归模型进行训练逻辑回归模型构建的过程中,以除churn外的其他变量为自变量,以churn为因变量。即该逻辑回归模型旨在通过除churn外的19个特征,对churn进行分类。接着利用summary函数对逻辑回归模型的训练结果进行查看,代码如下:逻辑回归模型训练对逻辑回归模型的训练结果如下图所示:通过实验结果可以看出许多变量对于模型并不显著(“*”越多表示显著性越高,没有“*”则表示不显著利用summary函数对逻辑回归模型的训练结果进行查看逻辑回归模型训练#step函数用于变量选择model2<-step(object=model,trace=0)summary(model2)采用逐步回归法剔除那些不显著的变量逐步回归法是指通过剔除无关特征和一些高度相关的特征,降低变量间多重共线程度的过程。逐步回归法的具体代码实现如下:续:逻

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论