广义线性模型 R--glm函数(一)

R语言glm函数学习: 

【转载时请注明来源】:http://www.cnblogs.com/runner-ljt/

Ljt

作为一个初学者,水平有限,欢迎交流指正。

glm函数介绍:

glm(formula, family=family.generator, data,control = list(...))

family:每一种响应分布(指数分布族)允许各种关联函数将均值和线性预测器关联起来。

常用的family:

binomal(link=‘logit‘)         ----响应变量服从二项分布,连接函数为logit,即logistic回归

binomal(link=‘probit‘)       ----响应变量服从二项分布,连接函数为probit

poisson(link=‘identity‘)     ----响应变量服从泊松分布,即泊松回归

control:控制算法误差和最大迭代次数

glm.control(epsilon = 1e-8, maxit = 25, trace = FALSE)

-----maxit:算法最大迭代次数,改变最大迭代次数:control=list(maxit=100)

 

glm函数使用:

>
> data<-iris[1:100,]
> samp<-sample(100,80)
> names(data)<-c(‘sl‘,‘sw‘,‘pl‘,‘pw‘,‘species‘)
> testdata<-data[samp,]
> traindata<-data[-samp,]
>
> lgst<-glm(testdata$species~pl,binomial(link=‘logit‘),data=testdata)
Warning messages:
1: glm.fit:算法没有聚合
2: glm.fit:拟合機率算出来是数值零或一
> summary(lgst)

Call:
glm(formula = testdata$species ~ pl, family = binomial(link = "logit"),
    data = testdata)

Deviance Residuals:
       Min          1Q      Median          3Q         Max
-1.836e-05  -2.110e-08  -2.110e-08   2.110e-08   1.915e-05  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)   -83.47   88795.25  -0.001    0.999
pl             32.09   32635.99   0.001    0.999

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1.1085e+02  on 79  degrees of freedom
Residual deviance: 1.4102e-09  on 78  degrees of freedom
AIC: 4

Number of Fisher Scoring iterations: 25

>

  

  

注意在使用glm函数就行logistic回归时,出现警告:

Warning messages:
1: glm.fit:算法没有聚合
2: glm.fit:拟合機率算出来是数值零或一

同时也可以发现两个系数的P值都为0.999,说明回归系数不显著。

第一个警告:算法不收敛。
     由于在进行logistic回归时,依照极大似然估计原则进行迭代求解回归系数,glm函数默认的最大迭代次数 maxit=25,当数据不太好时,经过25次迭代可能算法 还不收敛,所以可以通过增大迭代次数尝试解决算法不收敛的问题。但是当增大迭代次数后算法仍然不收敛,此时数据就是真的好了,需要对数据进行奇异值检验等进一步的处理。

>
> lgst<-glm(testdata$species~pl,binomial(link=‘logit‘),data=testdata,control=list(maxit=100))
Warning message:
glm.fit:拟合機率算出来是数值零或一
> summary(lgst)

Call:
glm(formula = testdata$species ~ pl, family = binomial(link = "logit"),
    data = testdata, control = list(maxit = 100))

Deviance Residuals:
       Min          1Q      Median          3Q         Max
-1.114e-05  -2.110e-08  -2.110e-08   2.110e-08   1.162e-05  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept)    -87.18  146399.32  -0.001        1
pl              33.52   53808.49   0.001        1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1.1085e+02  on 79  degrees of freedom
Residual deviance: 5.1817e-10  on 78  degrees of freedom
AIC: 4

Number of Fisher Scoring iterations: 26

>

  

如上,通过增加迭代次数,解决了第一个警告,此时算法收敛。

但是第二个警告仍然存在,且回归系数P=1,仍然不显著。

第二个警告:拟合概率算出来的概率为0或1

首先,这个警告是什么意思?
我们先来看看训练样本的logist回归结果,拟合出的每个样本属于‘setosa‘类的概率为多少?

>
>lgst<-glm(testdata$species~pl,binomial(link=‘logit‘),data=testdata,control=list(maxit=100))
>p<-predict(lgst,type=‘response‘)
>plot(seq(-2,2,length=80),sort(p),col=‘blue‘)
>

                                         

可以看出训练样本为‘setosa‘类的概率不是几乎为0,就是几乎为1,并不是我们预想中的logistic模型的S型曲线,这就是第二个警告的意思。

那么问题来了,为什么会出现这种情况?
 (以下内容只是本人参考一些解释的个人理解,不保证正确)

这种情况的出现可以理解为一种过拟合,由于数据的原因,在回归系数的优化搜索过程中,使得分类的种类属于某一种类(y=1)的线性拟合值趋于大,分类种类为另一   类(y=0)的线性拟合值趋于小。

由于在求解回归系数时,使用的是极大似然估计的原理,即回归系数在搜索过程中使得似然函数极大化:

所以在搜索过程中偏向于使得y=1的h(x)趋向于大,而使得y=0的h(x)趋向于小。

即系数Θ使得 Y=1类的 -ΘTX 趋向于大,使得Y=0类的 -ΘTX 趋向于小。而这样的结果就会导致P(y=1|x;Θ)-->1  ; P(y=0|x;Θ)-->0  .

那么问题又来了,什么样的数据会导致这样的过拟合产生呢?

先来看看上述logistic回归中种类为setosa和versicolor的样本pl值的情况。(横轴代表pl值,为了避免样本pl数据点叠加在一起,增加了一个无关的y值使样本点展开)

可以看出两类数据明显的线性可分。

故在回归系数搜索过程中只要使得一元线性函数h(x)的斜率的绝对值偏大,就可以实现y=1类的h(x)趋向大,y=0类的h(x)趋向小。

所以当样本数据线性可分时,logistic回归往往会导致过拟合的问题,即出现第二个警告:拟合概率算出来的概率为0或1。

出现了第二个警告后的logistic模型进行预测时往往是不适用的,对于这种线性可分的样本数据,其实直接使用规则判断的方法则简单且适用(如当pl<2.5时则直接判断为setosa类,pl>2.5时判断为versicolor类)。

以下,对于线性不可分的二维训练数据展示logistic回归过程。

>
> data<-iris[51:150,]
> samp<-sample(100,80)
> names(data)<-c(‘sl‘,‘sw‘,‘pl‘,‘pw‘,‘species‘)
> testdata<-data[samp,]
> traindata<-data[-samp,]
>
> lgst<-glm(testdata$species~sw+pw,binomial(link=‘logit‘),data=testdata)
> summary(lgst)

Call:
glm(formula = testdata$species ~ sw + pw, family = binomial(link = "logit"),
    data = testdata)

Deviance Residuals:
     Min        1Q    Median        3Q       Max
-1.82733  -0.16423   0.00429   0.11512   2.12846  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  -12.915      5.021  -2.572   0.0101 *
sw            -3.796      1.760  -2.156   0.0310 *
pw            14.735      3.642   4.046 5.21e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 110.85  on 79  degrees of freedom
Residual deviance:  24.40  on 77  degrees of freedom
AIC: 30.4

Number of Fisher Scoring iterations: 7

>#画拟合概率曲线图
> p<-predict(lgst,type=‘response‘)
> plot(seq(-2,2,length=80),sort(p),col=‘blue‘)
>
>#画训练样本数据散点图
>a<-testdata$species==‘versicolor‘
> x1<-testdata[a,‘sw‘]
> y1<-testdata[a,‘pw‘]
> x2<-testdata[!a,‘sw‘]
> y2<-testdata[!a,‘pw‘]
> summary(testdata$sw)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  2.000   2.700   2.900   2.881   3.100   3.800
> summary(testdata$pw)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  1.000   1.300   1.600   1.672   2.000   2.500
>
> plot(x1,y1,xlim=c(1.5,4),ylim=c(.05,3),xlab=‘sw‘,ylab=‘pw‘,col=‘blue‘)
> points(x2,y2,col=‘red‘)
>
> #画分类边界图,即画h(x)=0.5的图像
> x3<-seq(1.5,4,length=100)
> y3<-(3.796/14.735)*x3+13.415/14.735
> lines(x3,y3)

  

拟合概率曲线图:

(基本上符合logistic模型的S型曲线)

训练样本散点图及分类边界:

(画logistic回归的分类边界即画曲线h(x)=0.5)

 
时间: 2024-10-12 15:52:07

广义线性模型 R--glm函数(一)的相关文章

Andrew机器学习课程的学习总结1:监督学习的一种方法论,广义线性模型(GLM)的方法学

1.   监督学习的一种方法学,广义线性模型(GLM)的方法学 [转载时请注明来源]:http://www.cnblogs.com/aria313 ——根据Andrew Ng 2008年课程的第1~4节,以及相关的讲义notes 1,进行总结 网易公开课地址:http://study.163.com/plan/planMain.htm?id=1200146 2015.8.14 1.1.  总体核心 监督学习Supervised learning: 有样本集合,样本是标准的正确答案:以此为根据学习

第三章 广义线性模型(GLM)

广义线性模型 前面我们举了回归和分类得到例子.在回归的例子中,$y \mid x;\theta \sim  N(u,\sigma ^{2})$,在分类例子中,$y\mid x;\theta \sim  Bbernoulli(\phi)$ 广义线性模型是基于指数函数族的,指数函数族原型为: $p(y;\eta) = b(y)exp(\eta^{T}T(y)-a(\eta))$ $\eta$为自然参数,$T(y)$为充分统计量,一般情况下$T(y)=y$.选择固定的T,a,b定义一个分布,参数为$\

广义线性模型(GLM)

一.广义线性模型概念 在讨论广义线性模型之前,先回顾一下基本线性模型,也就是线性回归. 在线性回归模型中的假设中,有两点需要提出: (1)假设因变量服从高斯分布:$Y={{\theta }^{T}}x+\xi $,其中误差项$\xi \sim N(0,{{\sigma }^{2}})$,那么因变量$Y\sim N({{\theta }^{T}}x,{{\sigma }^{2}})$. (2)模型预测的输出为$E[Y]$,根据$Y={{\theta }^{T}}x+\xi $,$E[Y]=E[{{

指数分布族与广义线性模型

整理一下之前所学过的关于回归问题的思路: 问题引入:房屋估价,给定新的房屋信息,预测出相应的房屋价格: 学习过程:构建模型h(θ): 线性回归:最小二乘法.梯度下降法.线性模型的概率解释: 局部加权回归:带权重的线性回归.权值的钟形函数: 逻辑回归:分类方法.梯度上升法.牛顿法.引出感知机学习算法: 广义线性模型:指数分布族.给定概率分布推导出线性模型. 这一节所讨论的重点就是最后的这一条内容,回顾讨论过的线性回归与逻辑回归的假设可知: 在线性回归模型的概率解释中假设: 在逻辑回归模型的推导中假

R语言实战(八)广义线性模型

本文对应<R语言实战>第13章:广义线性模型 广义线性模型扩展了线性模型的框架,包含了非正态因变量的分析. 两种流行模型:Logistic回归(因变量为类别型)和泊松回归(因变量为计数型) glm()函数的参数 分布族 默认的连接函数 binomial (link = "logit") gaussian (link = "identity") gamma (link = "inverse") inverse.gaussian (lin

机器学习—广义线性模型(GLM)

逻辑回归是广义线性模型的一种特殊情况,但是在前面这篇http://blog.csdn.net/zhangzhengyi03539/article/details/46574803 讲逻辑回归的时候没有说明为什么要采用单极型函数,这篇文章将会从浅入深的讲解一下广义线性模型. 一.指数分布族(ExponentialFamily). 如果一个分布函数可以写成如下的形式 p(y,η)=b(y)eηTT(y)?a(η)(1) η:自然参数,标准参数,规范参数 T(y):充分统计量 a(η):对数分函数 其

斯坦福CS229机器学习课程笔记二:GLM广义线性模型与Logistic回归

一直听闻Logistic Regression逻辑回归的大名,比如吴军博士在<数学之美>中提到,Google是利用逻辑回归预测搜索广告的点击率.因为自己一直对个性化广告感兴趣,于是疯狂google过逻辑回归的资料,但没有一个网页资料能很好地讲清到底逻辑回归是什么.幸好,在CS229第三节课介绍了逻辑回归,第四节课介绍了广义线性模型,综合起来总算让我对逻辑回归有了一定的理解.与课程的顺序相反,我认为应该先了解广义线性模型再来看逻辑回归,也许这也是为什么讲逻辑回归的网页资料总让人感觉云里雾里的原因

[读书笔记] R语言实战 (十三) 广义线性模型

广义线性模型扩展了线性模型的框架,它包含了非正态的因变量分析 广义线性模型拟合形式: $$g(\mu_\lambda) = \beta_0 + \sum_{j=1}^m\beta_jX_j$$ $g(\mu_\lambda)为连接函数$. 假设响应变量服从指数分布族中某个分布(不仅仅是正态分布),极大扩展了标准线性模型,模型参数估计的推导依据是极大似然估计,而非最小二乘法. 可以放松Y为正态分布的假设,改为Y服从指数分布族中的一种分布即可 glm()函数:glm(formula,family=f

R语言-广义线性模型

使用场景:结果变量是类别型,二值变量和多分类变量,不满足正态分布  结果变量是计数型,并且他们的均值和方差都是相关的 解决方法:使用广义线性模型,它包含费正太因变量的分析 1.Logistics回归(因变量为类别型) 案例:匹配出发生婚外情的模型 1.查看数据集的统计信息 2 library(AER) 3 data(Affairs,package = 'AER') 4 summary(Affairs) 5 table(Affairs$affairs) 结果:该数据从601位参与者收集了,婚外情次

【R笔记】glm函数报错原因及解析

R语言glm函数学习:  [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. glm函数介绍: glm(formula, family=family.generator, data,control = list(...)) family:每一种响应分布(指数分布族)允许各种关联函数将均值和线性预测器关联起来. 常用的family: binomal(link='logit')         ----响应变量