逻辑回归概述

来源:互联网 发布:政府工作量化指标数据 编辑:程序博客网 时间:2024/05/17 08:32
Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。(注意这里是:“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘)

  那么它究竟是什么样的一个东西,又有哪些适用情况和不适用情况呢?

一. 官方定义:

  Figure 1. The logistic function, with z on the horizontal axis and ƒ(z) on the vertical axis

  逻辑回归是一个学习f:X− > Y 方程或者P(Y|X)的方法,这里Y是离散取值的,X= < X1,X2…,Xn > 是任意一个向量其中每个变量离散或者连续取值。

二. 我的解释

  只看公式太痛苦了,分开说一下就好。Logistic Regression 有三个主要组成部分:回归、线性回归、Logsitic方程。

  1)回归

  Logistic Regression 是线性回归的一种,线性回归是一种回归。那么回归是什么呢?

  回归其实就是对已知公式的未知参数进行估计。大家可以简单的理解为,在给定训练样本点和已知的公式后,对于一个或多个未知参数,机器会自动枚举参数的所有可能取值(对于多个参数要枚举它们的不同组合),直到找到那个最符合样本点分布的参数(或参数组合)。(当然,实际运算有一些优化算法,肯定不会去枚举的)

  注意,回归的前提是公式已知,否则回归无法进行。而现实生活中哪里有已知的公式啊(G=m*g 也是牛顿被苹果砸了脑袋之后碰巧想出来的不是?哈哈),因此回归中的公式基本都是数据分析人员通过看大量数据后猜测的(其实大多数是拍脑袋想出来的,嗯…)。根据这些公式的不同,回归分为线性回归和非线性回归。线性回归中公式都是“一次”的(一元一次方程,二元一次方程…),而非线性则可以有各种形式(N元N次方程,log方程 等等)。具体的例子在线性回归中介绍吧。

  2)线性回归

  直接来一个最简单的一元变量的例子:假设要找一个 y 和 x 之间的规律,其中 x 是鞋子价钱,y 是鞋子的销售量。(为什么要找这个规律呢?这样的话可以帮助定价来赚更多的钱嘛,小学的应用题经常做的呵呵)。已知一些往年的销售数据(x0,y0), (x1, y1), … (xn, yn)做样本集, 并假设它们满足线性关系:y = a*x + b (其中a,b的具体取值还不确定),线性回归即根据往年数据找出最佳的 a, b 取值,使 y = a * x + b 在所有样本集上误差最小。

  也许你会觉得…..晕!这么简单! 这需要哪门子的回归呀!我自己在草纸上画个xy坐标系,点几个点就能画出来!(好吧,我承认我们初中时都被这样的画图题折磨过)。事实上一元变量的确很直观,但如果是多元就难以直观的看出来了。比如说除了鞋子的价格外,鞋子的质量,广告的投入,店铺所在街区的人流量都会影响销量,我们想得到这样的公式:sell = a*x + b*y + c*z + d*zz + e。这个时候画图就画不出来了,规律也十分难找,那么交给线性回归去做就好。(线性回归具体是怎么做的请参考相应文献,都是一些数学公式,对程序员来说,我们就把它当成一条程序命令就好)。这就是线性回归算法的价值。

  需要注意的是,这里线性回归能过获得好效果的前提是y = a*x + b 至少从总体上是有道理的(因为我们认为鞋子越贵,卖的数量越少,越便宜卖的越多。另外鞋子质量、广告投入、客流量等都有类似规律);但并不是所有类型的变量都适合用线性回归,比如说x不是鞋子的价格,而是鞋子的尺码),那么无论回归出什么样的(a,b),错误率都会极高(因为事实上尺码太大或尺码太小都会减少销量)。总之:如果我们的公式假设是错的,任何回归都得不到好结果。

  3)Logistic方程

  上面我们的sell是一个具体的实数值,然而很多情况下,我们需要回归产生一个类似概率值的0~1之间的数值(比如某一双鞋子今天能否卖出去?或者某一个广告能否被用户点击? 我们希望得到这个数值来帮助决策鞋子上不上架,以及广告展不展示)。这个数值必须是0~1之间,但sell显然不满足这个区间要求。于是引入了Logistic方程,来做归一化。这里再次说明,该数值并不是数学中定义的概率值。那么既然得到的并不是概率值,为什么我们还要费这个劲把数值归一化为0~1之间呢?归一化的好处在于数值具备可比性和收敛的边界,这样当你在其上继续运算时(比如你不仅仅是关心鞋子的销量,而是要对鞋子卖出的可能、当地治安情况、当地运输成本 等多个要素之间加权求和,用综合的加和结果决策是否在此地开鞋店时),归一化能够保证此次得到的结果不会因为边界 太大/太小 导致 覆盖其他feature 或 被其他feature覆盖。(举个极端的例子,如果鞋子销量最低为100,但最好时能卖无限多个,而当地治安状况是用0~1之间的数值表述的,如果两者直接求和治安状况就完全被忽略了)这是用logistic回归而非直接线性回归的主要原因。到了这里,也许你已经开始意识到,没错,Logistic Regression 就是一个被 Logistic 方程归一化后的线性回归,仅此而已。

  至于所以用 Logistic 而不用其它,是因为这种归一化的方法往往比较合理(人家都说自己叫Logistic 了嘛,呵呵),能够打压过大和过小的结果(往往是噪音),以保证主流的结果不至于被忽视。具体的公式及图形见本文的一、官方定义部分。其中 f(X) 就是我们上面例子中的 sell 的实数值了,而 y 就是得到的0~1之间的卖出可能性数值了。

三. Logistic Regression的适用性

  1) 可用于概率预测,也可用于分类。

  并不是所有的机器学习方法都可以做可能性概率预测(比如 SVM 就不行,它只能得到1或者-1)。可能性预测的好处是结果又可比性:比如我们得到不同广告被点击的可能性后,就可以展现点击可能性最大的 N 个。这样以来,哪怕得到的可能性都很高,或者可能性都很低,我们都能取最优的topN。当用于分类问题时,仅需要设定一个阈值即可,可能性高于阈值是一类,低于阈值是另一类。

  2) 仅能用于线性问题

  只有在 feature 和 target 是线性关系时,才能用 Logistic Regression(不像SVM那样可以应对非线性问题)。这有两点指导意义,一方面当预先知道模型非线性时,果断不使用 Logistic Regression; 另一方面,在使用 Logistic Regression 时注意选择和 target 呈线性关系的 feature。

  3) 各feature之间不需要满足条件独立假设,但各个feature的贡献是独立计算的。

  逻辑回归不像朴素贝叶斯一样需要满足条件独立假设(因为它没有求后验概率)。但每个feature的贡献是独立计算的,即LR是不会自动帮你 combine 不同的 features 产生新 feature 的 (时刻不能抱有这种幻想,那是决策树,LSA,pLSA,LDA或者你自己要干的事情)。举个例子,如果你需要TF*IDF这样的feature,就必须明确的给出来,若仅仅分别给出两维 TF 和 IDF 是不够的,那样只会得到类似 a*TF + b*IDF 的结果,而不会有 c*TF*IDF 的效果



初步接触

谓LR分类器(Logistic Regression Classifier),并没有什么神秘的。在分类的情形下,经过学习之后的LR分类器其实就是一组权值w0,w1,...,wm
当测试样本集中的测试数据来到时,这一组权值按照与测试数据线性加和的方式,求出一个z值:

z = w0+w1*x1+w2*x2+...+wm*xm。  (其中x1,x2,...,xm是某样本数据的各个特征,维度为m)

之后按照sigmoid函数的形式求出:

σ(z) = 1 / (1+exp(z)) 。

由于sigmoid函数的定义域是(-INF, +INF),而值域为(0, 1)。因此最基本的LR分类器适合于对两类目标进行分类。

那么LR分类器的这一组权值w0,w1,...,wm是如何求得的呢?这就需要涉及到极大似然估计MLE和优化算法的概念了。

我们将sigmoid函数看成样本数据的概率密度函数,每一个样本点,都可以通过上述的公式①和计算出其概率密度

 

详细描述

1.逻辑回归模型

 

1.1逻辑回归模型

考虑具有p个独立变量的向量clip_image002,设条件概率clip_image004为根据观测量相对于某事件发生的概率。逻辑回归模型可表示为

clip_image006         (1.1)

上式右侧形式的函数称为称为逻辑函数。下图给出其函数图象形式。

clip_image008

 

其中。如果含有名义变量,则将其变为dummy变量一个具有k个取值的名义变量,将变为k-1个dummy变量。这样,有

(1.2)

  定义不发生事件的条件概率为

 (1.3)

那么,事件发生与事件不发生的概率之比为

clip_image016                                       (1.4)

这个比值称为事件的发生比(the odds of experiencing an event),简称为odds。因为0<p<1,故odds>0。对odds取对数,即得到线性函数

      (1.5),

 

1.2极大似然函数

  假设有n个观测样本,观测值分别为clip_image020clip_image022为给定条件下得到yi=1(原文clip_image024)的概率。在同样条件下得到yi=0(clip_image026)的条件概率为clip_image028。于是,得到一个观测值的概率为

                                                (1.6)     -----此公式实际上是综合前两个等式得出,并无特别之处

 因为各项观测独立,所以它们的联合分布可以表示为各边际分布的乘积。

                                     

上式称为n个观测的似然函数。我们的目标是能够求出使这一似然函数的值最大的参数估计。于是,最大似然估计的关键就是求出参数clip_image034,使上式取得最大值。

对上述函数求对数

   (1.8)

上式称为对数似然函数。为了估计能使clip_image038取得最大的参数clip_image034[1]的值。

对此函数求导,得到p+1个似然方程。

           (1.9)

,j=1,2,..,p.-----p为独立向量个数

 上式称为似然方程。为了解上述非线性方程,应用牛顿-拉斐森(Newton-Raphson)方法进行迭代求解

1.3 牛顿-拉斐森迭代法

  对clip_image038[1]求二阶偏导数,即Hessian矩阵为

clip_image045

clip_image047                                          (1.10)

如果写成矩阵形式,以H表示Hessian矩阵,X表示

clip_image049                                                  (1.11)

                         (1.12)

clip_image053。再令clip_image055(注:前一个矩阵需转置),即似然方程的矩阵形式。

牛顿迭代法的形式为

clip_image057                                                 (1.13)

注意到上式中矩阵H为对称正定的,求解clip_image059为求解线性方程HX=U中的矩阵X。对H进行cholesky分解。

最大似然估计的渐近方差(asymptotic variance)和协方差(covariance)可以由信息矩阵(information matrix)的逆矩阵估计出来。而信息矩阵实际上是clip_image038[2]二阶导数的负值,表示为clip_image062。估计值的方差和协方差表示为clip_image064,也就是说,估计值clip_image066的方差为矩阵I的逆矩阵的对角线上的值,而估计值clip_image066[1]clip_image068的协方差(clip_image066[1]clip_image068的协方差等于clip_image062?不解。。。)为除了对角线以外的值。然而在多数情况,我们将使用估计值clip_image066[2]的标准方差,表示为

clip_image070,for j=0,1,2,…,p                        (1.14)

-----------------------------------------------------------------------------------------------------------------------------------------------

2.显著性检验

下面讨论在逻辑回归模型中自变量clip_image072是否与反应变量显著相关的显著性检验。零假设clip_image074clip_image076=0(表示自变量clip_image072[1]对事件发生可能性无影响作用)。如果零假设被拒绝,说明事件发生可能性依赖于clip_image072[2]的变化。

2.1 Wald test

对回归系数进行显著性检验时,通常使用Wald检验,其公式为

clip_image078 (2.1)

其中, clip_image080clip_image082的标准误差。这个单变量Wald统计量服从自由度等于1的clip_image084分布。

  如果需要检验假设clip_image074[1]clip_image086=0,计算统计量

clip_image088 (2.2)

其中,clip_image090为去掉clip_image092所在的行和列的估计值,相应地,clip_image094为去掉clip_image092[1]所在的行和列的标准误差。这里,Wald统计量服从自由度等于p的clip_image084[1]分布。如果将上式写成矩阵形式,有

clip_image097 (2.3)

矩阵Q是第一列为零的一常数矩阵。例如,如果检验clip_image099,则clip_image101

  然而当回归系数的绝对值很大时,这一系数的估计标准误就会膨胀,于是会导致Wald统计值变得很小,以致第二类错误的概率增加。也就是说,在实际上会导致应该拒绝零假设时却未能拒绝。所以当发现回归系数的绝对值很大时,就不再用Wald统计值来检验零假设,而应该使用似然比检验来代替。

2.2 似然比(Likelihood ratio test)检验

  在一个模型里面,含有变量clip_image103与不含变量clip_image103[1]的对数似然值乘以-2的结果之差,服从clip_image106分布。这一检验统计量称为似然比(likelihood ratio),用式子表示为

clip_image108 (2.4)

计算似然值采用公式(1.8)。

倘若需要检验假设clip_image074[2]clip_image086[1]=0,计算统计量

    (2.5)

式中,clip_image112表示clip_image114=0的观测值的个数,而clip_image116表示clip_image114[1]=1的观测值的个数,那么n就表示所有观测值的个数了。实际上,上式的右端的右半部分clip_image118表示只含有clip_image120的似然值。统计量G服从自由度为p的clip_image106[1]分布

2.3 Score检验

  在零假设clip_image074[3]clip_image076[1]=0下,设参数的估计值为clip_image122,即对应的clip_image076[2]=0。计算Score统计量的公式为

clip_image124          (2.6)

上式中,clip_image126表示在clip_image076[3]=0下的对数似然函数(1.9)的一价偏导数值,而clip_image128表示在clip_image076[4]=0下的对数似然函数(1.9)的二价偏导数值。Score统计量服从自由度等于1的clip_image084[2]分布。

2.4 模型拟合信息

  模型建立后,考虑和比较模型的拟合程度。有三个度量值可作为拟合的判断根据。

(1)-2LogLikelihood

    (2.7)

(2) Akaike信息准则(Akaike Information Criterion,简写为AIC)

clip_image132 (2.8)

 其中K为模型中自变量的数目,S为反应变量类别总数减1,对于逻辑回归有S=2-1=1。-2LogL的值域为0至clip_image134,其值越小说明拟合越好。当模型中的参数数量越大时,似然值也就越大,-2LogL就变小。因此,将2(K+S)加到AIC公式中以抵销参数数量产生的影响。在其它条件不变的情况下,较小的AIC值表示拟合模型较好。

(3)Schwarz准则

  这一指标根据自变量数目和观测数量对-2LogL值进行另外一种调整。SC指标的定义为

clip_image136 (2.9)

其中ln(n)是观测数量的自然对数。这一指标只能用于比较对同一数据所设的不同模型。在其它条件相同时,一个模型的AIC或SC值越小说明模型拟合越好。

 

3.回归系数解释

3.1发生比

odds=[p/(1-p)]clip_image138,即事件发生的概率与不发生的概率之比。而发生比率(odds ration),即clip_image140

(1)连续自变量。对于自变量clip_image072[3],每增加一个单位,odds ration为

clip_image143 (3.1)

(2)二分类自变量的发生比率。变量的取值只能为0或1,称为dummy variable。当clip_image072[4]取值为1,对于取值为0的发生比率为

clip_image145 (3.2)

 

亦即对应系数的幂。

(3)分类自变量的发生比率。

如果一个分类变量包括m个类别,需要建立的dummy variable的个数为m-1,所省略的那个类别称作参照类(reference category)。设dummy variable为clip_image072[5],其系数为clip_image076[5],对于参照类,其发生比率为clip_image148

3.2 逻辑回归系数的置信区间

  对于置信度1-clip_image150,参数clip_image076[6]的100%(1-clip_image150[1])的置信区间为

clip_image154 (3.3)

  上式中,clip_image156为与正态曲线下的临界Z值(critical value), clip_image158为系数估计clip_image160的标准误差,clip_image162clip_image164两值便分别是置信区间的下限和上限。当样本较大时,clip_image150[2]=0.05水平的系数clip_image160[1]的95%置信区间为

clip_image168 (3.4)

-----------------------------------------------------------------------------------------------------------------------------------------------

4.变量选择

4.1前向选择(forward selection):在截距模型的基础上,将符合所定显著水平的自变量一次一个地加入模型。

  具体选择程序如下

(1) 常数(即截距)进入模型。

(2) 根据公式(2.6)计算待进入模型变量的Score检验值,并得到相应的P值。

(3) 找出最小的p值,如果此p值小于显著性水平clip_image170,则此变量进入模型。如果此变量是某个名义变量的单面化(dummy)变量,则此名义变量的其它单面化变理同时也进入模型。不然,表明没有变量可被选入模型。选择过程终止。

(4) 回到(2)继续下一次选择。

4.2 后向选择(backward selection):在模型包括所有候选变量的基础上,将不符合保留要求显著水平的自变量一次一个地删除。

具体选择程序如下

(1) 所有变量进入模型。

(2) 根据公式(2.1)计算所有变量的Wald检验值,并得到相应的p值。

(3) 找出其中最大的p值,如果此P值大于显著性水平clip_image172,则此变量被剔除。对于某个名义变量的单面化变量,其最小p值大于显著性水平clip_image172[1],则此名义变量的其它单面化变量也被删除。不然,表明没有变量可被剔除,选择过程终止。

(4) 回到(2)进行下一轮剔除。

4.3逐步回归(stepwise selection)

(1)基本思想:逐个引入自变量。每次引入对Y影响最显著的自变量,并对方程中的老变量逐个进行检验,把变为不显著的变量逐个从方程中剔除掉,最终得到的方程中既不漏掉对Y影响显著的变量,又不包含对Y影响不显著的变量。

(2)筛选的步骤:首先给出引入变量的显著性水平clip_image170[1]和剔除变量的显著性水平clip_image172[2],然后按下图筛选变量。

(3)逐步筛选法的基本步骤

逐步筛选变量的过程主要包括两个基本步骤:一是从不在方程中的变量考虑引入新变量的步骤;二是从回归方程中考虑剔除不显著变量的步骤。

假设有p个需要考虑引入回归方程的自变量.

① 设仅有截距项的最大似然估计值为clip_image175。对p个自变量每个分别计算Score检验值,

设有最小p值的变量为clip_image177,且有clip_image179,对于单面化(dummy)变量,也如此。若clip_image181,则此变量进入模型,不然停止。如果此变量是名义变量单面化(dummy)的变量,则此名义变量的其它单面化变量也进入模型。其中clip_image183为引入变量的显著性水平。

② 为了确定当变量clip_image177[1]在模型中时其它p-1个变量也是否重要,将clip_image186分别与clip_image177[2]进行拟合。对p-1个变量分别计算Score检验值,其p值设为clip_image188。设有最小p值的变量为clip_image190,且有clip_image192.若clip_image194,则进入下一步,不然停止。对于单面化变量,其方式如同上步。

③ 此步开始于模型中已含有变量clip_image177[3]clip_image190[1]。注意到有可能在变量clip_image190[2]被引入后,变量clip_image177[4]不再重要。本步包括向后删除。根据(2.1)计算变量clip_image177[5]clip_image190[3]的Wald检验值,和相应的p值。设clip_image196为具有最大p值的变量,即clip_image198=max(clip_image188[1]),clip_image201.如果此p值大于clip_image203,则此变量从模型中被删除,不然停止。对于名义变量,如果某个单面化变量的最小p值大于clip_image203[1],则此名义变量从模型中被删除。

④ 如此进行下去,每当向前选择一个变量进入后,都进行向后删除的检查。循环终止的条件是:所有的p个变量都进入模型中或者模型中的变量的p值小于clip_image172[3],不包含在模型中的变量的p值大于clip_image183[1]。或者某个变量进入模型后,在下一步又被删除,形成循环。

本文适合有少许文本分类实践经验的同学。

 

1.什么是文本分类?

简单点说,给定类别,将文本分到某个或某几个类别中。比如,一篇网页,判断它是体育类还是政治类还是娱乐类。当然网页比文本稍微复杂一些,需要先做一些页面解析等预处理工作。文本分类可看作网页分类的一个子问题。

想继续了解文本分类,推荐看计算所王斌老师的PPT ,点击这里。

 

 

2.什么是逻辑回归(LR, logistic regression)?

英文,参考wikipedia的定义,点击这里。

中文,可参考这篇,点击这里。

目前有不少机器学习方面的开源实现,本人采用了liblinear开源库,实现高效,使用简单,它支持LR和SVM,点击这里了解。

 

3.什么是模型调优?

对于文本分类问题,收集若干类别样本,确定好文本特征后,采用一些成熟的分类算法(朴素贝叶斯、SVM、决策树、LR等),即可得到一个分类器,采用交叉验证(cross validation)可得到这个分类器的大致效果。要想达到比较理想的分类效果(准确率/召回率),则需要进行模型调优。以下列举本人在利用LR的实践过程中觉得比较重要的调优点。

 

4. 训练样本调优

理想情况下,对于任何分类算法来讲,只要训练样本足够好(什么算好?),分类效果的差别并不是特别大。训练样本的好坏直接决定了分类效果。矛盾的是,理想中的训练样本几乎无法得到。主要原因有二:1)训练样本无法正确映射出现实世界中的各类别比例。比如现实世界里A类/B类=40,如果按照这个比例来确定训练样本,则显然不行。2)对于有监督学习来说,训练样本往往需要人工标注,这使得训练样本数量无法得到保证。另外人工标注不可避免会产生错误,也会对分类造成影响。

在实践过程当中,要保持对数据的敏感性,对于模型的错误/有偏输出结果,要不断分析和猜测并加以验证。比如某个非政治类词与政治类的关联度特别大,则可断定是训练样本的有偏性造成的(比如训练样本大部分来自新浪政治类网页,则新浪这个词肯定与政治类关联度特别大,要想办法消除这种有偏性)。

 

5. 特征调优

如何表示一个文本?向量空间模型(VSM)是比较常用的。对于文本分类问题,VSM的每一维可以表示一个word,而tfidf是比较常见的权重计算方法,但是tfidf的具体计算方法又有很多种(log形式, normalized形式、tf=1形式等)。任何一种都没有绝对的优劣性。需要在实践中根据具体数据来选择对应形式。

另外,特征的维数及各维定义也需要商榷。维数过大会带来训练时间过长和数据稀疏性问题。维数过小无法完整表示文本显然也不行。一般通过特征选择(feature selection)方法来确定特征维数和组成方式。实际使用过程中CHI和IG是效果比较好的两种。各维数含义则可简单可复杂,简单的,各维可表示一个word,直观明了;复杂的可使用LSI等方法来对其进行重构。

    对于特征选择的计算结果(每维特征与各类别的关联度排序),可稍加分析,看是否存在训练样本的有偏问题。

 

6. 保持对数据的敏感性

模型调优是一个不断迭代的过程,在实践过程中,要善于根据分类器的输出(打分分布、区间样本抽查、误判分析)来发现问题所在。走一步,看一步。不要盲目地去调整,要根据模型目前的状态,分析其可能的问题所在,然后有针对性地去优化。另外还要确保测试集合的开放性,防止over-fitting.

 

7. 保持耐心、细致

模型调优又是一个繁琐的工作,需要不断的迭代优化,需要不断的抽查样本,需要不断的分析和对比数据。往往有时模型的输出结果与预测不符,会令人沮丧。但最重要的是要保持耐心和细心。如果确定目前的方法可以解决这类问题,则要坚定不移地走下去,同时细致地发现可能存在的问题并加以改进。相信总会得到一个令人满意的结果。


0 0