干货 | 从最小二乘法到逻辑回归
源 | 小象 文 | 数据挖掘机
逻辑回归算法是机器学习算法里面最常用的算法之一,然而,直接讲解逻辑回归时很容易让人陷入各种各样复杂的公式中搞得一头雾水,本文将从最小二乘法讲起,逐步过渡到逻辑回归,从而利于理解其演变的始终。
此处先引出一个现实问题,假如我们有以下一组北京房价的数据(如果真这么低就好了!):
平方米
价格(万)
150
645
200
745
250
845
300
945
400
1545
600
1845
那么此时,我们已经知道上面这些房子的大小和价格,然后我问100、80和1000平米的北京房子大概多少钱呢?根据经验我们知道,基本上随着房子平方米的增加,其价格也不断攀升,二者基本呈现线性关系(学区房除外!),那么根据以前的知识,就可以通过画图、描点、求直线的问题来解决,最后大致会画出如下一条直线:
那么如何确定这条直线就是最好的呢?这就需要最小二乘法了。
可以先从一个最基本的问题出发来认识最小二乘法,假设有一系列的点坐标分布在直角坐标系x-y内,且点对应的x、y坐标值如下:
X
X1
X2
X3
X4
X5
X6
Y
Y1
Y2
Y3
Y4
Y5
Y5
这些点分别为(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4)、...、(xn,yn),现在我们需要根据这些点在直角坐标系中的位置来找到这些点所对应的方程(即曲线),也就是我们需要找到一个函数,然后这个函数在这个坐标系内的对应图像正好可以把这些点拟合进来,那么就可以认为这些点是这个函数的某一部分点,而其他所有的点的具体值也可以通过这条曲线计算出来了,这样我们就可以达到这样一个目的:
少数坐标点->找到拟合曲线和对应函数->得到未知点的数值
假设这些点(x1,y1)、(x2,y2)、... 、(xn,yn)在坐标系中的位置如下面的红点所示:
那么现在的目的就是需要找到一条曲线,可以将上面的这些点拟合进去,根据以往所学知识,我们可以大体判断这些散列点基本分布在一条直线附近,而在直角坐标系中,所有的直线方程都可以用Y=aX+b的形式表示出来,所以,我们可以假设这条曲线的方程为y=ax+b,只要求出这条曲线的两个参数a和b即可,下图表示我们假设的方程,因为是通过经验得到的可以称之为经验方程,而画的这条蓝色直线就可以认为是待求的直线,我们的目的是使得这条直线穿过尽可能多的点,还有个问题,就是假如经验方程不知道该怎么办?此问题后面讨论。
那么这个时候我们已经解决了一个问题,就是方程的形式已经知道是y=ax+b,根据初中所学知识,两点确定一条直线,我们只需要在坐标系内随便找两个点(x1,y1)、(x2,y2),然后将这两个点带入方程就可以求出一条直线,于是在已给的点里存在了很多条直线如下图中的黄色、绿色和粉色直线,究竟哪一条直线是最好的、最满足条件的呢?
此时便引出了一个新的问题:我们需要一个评价指标来衡量究竟是哪个直线拟合的最好,不过这个问题在两百多年前已经有人遇到过了,并且想到了解决办法,这个人就是数学天才—高斯。我们只需要理解他的办法即可:
假设方程y=ax+b这条直线已经找到,就是下面这条直线,那么虽然这条直线已经找到,我们可以看出仍旧无法拟合所有的点,显然的,就算是我们找再多条直线都无法拟合所有的点,因为这些点并不在一条直线上。那么此时必然有部分点在直线外,那么我们固定x轴,不断找到这些点的横坐标,假设此点为(xi,yi),那么此时可以得到两个y值,一个是原来点xi对应的yi,另一个就是将xi带入方程后得到的y值,记作y’ i =axi+b
显然的,在同一个横坐标xi的值下由于直线没有拟合到该点,就出现了y值的偏差,我们可以计该偏差为Error = |yi-y’i|,这样就通过绝对值的方式描述出来了该偏差的大小,所以此时的问题就转化成了:我们如何使得该直线在此点的偏差最小?当然可以通过向上平移该直线就可以使得Error=0了,不过平移以后下面的点又拉大了Error,所以我们不但需要考虑一个点的Error还需要考虑所有样本点的Error,即使得所有样本点的Error之和最小。于是,该问题又转化成了一个数学问题:
求函数Error = |y1-y’1|+|y2-y’2|+...+|yn-y’n|的最小值。
很明显,函数Error是绝对值的连续相加,我们在求最值的时候一般需要进行求导,绝对值是不利于求导运算的,于是可以把上面公式写成平方和相加的形式:
求函数Error = |y1-y’1|2+|y2-y’2|2+...+|yn-y’n|2的最小值。
即:
求下面函数的最小值:
这就是最小二乘法,此时,可以给出最小二乘法的定义了:根据偏差的平方和作为最小条件来选择参数a,b的方法称之为最小二乘法。
那么,如何求解Error的最小值呢,该函数是一个二元二次函数,所以属于多元函数求最值问题,关于多元函数求极值的详细过程,建议翻阅高等数学求极值的那章,判断过程如下:
如果该函数在此处有极值,则又有定理:
根据以上两条定理,可知二元函数求最值的一个基本思路:
(1)求出该函数的所有极值点
(2)找到这些极值点,选择最小的极值点就是该函数的最值
(3)驻点可能需要单独判断
由于Error函数是多重可导的,所以对该函数求出所有极值点,其最小极值点就是最小值,于是可以通过联立两个方程对x和对y分别求偏导数并等于0,最终得到关于a、b的方程,既可以解出a和b。
求解过程如下:
求Error的极值点:
假设这几个点为(1,4),(2,7),(3,10),则带入方程后求得如下:
所以,最终求得的方程就是y=3x+1。
通过上面的讲解,基本上搞清楚了什么是最小二乘法,以及最小二乘法是基于那种问题下提出的,回到之前提到的那个问题,如果图像中的点根据当前经验无法假设方程的话怎么办呢?此时一般就假设为多次多项式的方程然后去求解拟合,一般次数越高拟合越好,但是也会出现类似机器学习中的过拟合问题,这一部分还有很多知识,暂不讨论。
接着,了解了最小二乘法以后,可以进一步开始了解线性回归,因为逻辑回归是在线性回归的基础上引申出来的,从上文中我们知道,对于只有二维的平面,拟合的时候是一条直线,假如在一个多维空间里面的话,仍旧存在很多需要拟合的点,此时对应的便不是一条直线,而是一个超平面,可以认为此时,我们需要求解一个平面去拟合多维空间中的那些点,即平面中蓝色的点。
给定一个样本x=(x1,x2,x3,x4,...,xd),其中x1就是该线性空间中的某一维的具体值,即可以认为该样本x为d维空间的一个向量,其中一维的可以认为是坐标系中对应的x轴、y轴或者z轴,一个轴就是一维度,同上,假如我们有许多许多这样的样本,每个样本同x一样分布在空间内,则可以类似于f(x)=ax+b,假设该空间内拟合这些样本点的超平面为:
f(x) = w1x1+w2x2+w3x3+...+wdxd+b,向量表示为:f(x) = WTx+b
其中,函数式里面的w1、w2就类似a,后面的参数b等于b,于是该问题就转化为求得一组变量w1、w2、w3、...、wd和b使得该超平面能够拟合空间内的样本。针对该问题,处理方式同最小二乘法,只不过该问题变成了所有点到该超平面的距离平方和最小。
所以,对于用平面去拟合空间内的点对应到线性回归中就是学的一个函数f(x),使得:
f(xi) = wi*xi+b,满足f(xi)≈yi,即对于任意的一个样本xi,都能根据该函数求得一个预测值f(xi),并且该f(xi)无限近似 xi样本原来的真实值yi。
于是,此处又可以将线性回归转化为带有最小二乘法的问题:
按照上述求解过程即可求的多个极值点,然后最小的极值点就是所要求的最小值,如同下图中(x0,y0),此时的w和b就可以求得了。
上面已经从最小二乘法讲到了线性回归,接着我们开始正式引入最终要讲的逻辑回归,如果前面的知识已经看懂,则此时过渡到逻辑回归就轻车熟路了,并且要注意的是虽然逻辑回归模型称为回归,但是其实它是一个分类模型。显然的,线性回归中f(x) = wTx+b最终输出的是一个具体的数值,该数值类似于f(x) = ax+b中的f(x),只不过是将直线换成了超平面而已,若要进行分类的话,则分类就变成了离散化的,此时如何进行分类呢?显然的,我们可以思考,可以将f(x)转化为一个分类输出,这个过程类似于连续数值的离散化,比如可以考虑如下两个函数:
其中,红色的表示第一个分段函数,蓝色表示第二个指数函数,这两个函数均可以将线性回归得到的具体数值映射到几个确定的值和范围,此时我们可以考虑用第二个函数,原因有两个,一个是第二个函数输出值是一个0~1范围内的值,我们可以认为这个值是一个概率值,从而可以根据这个概率来判断某种分类的可能性大小,第二个原因是因为该函数具有较好的求导性质,是连续可导的,因为最终在转换为数学问题的时候往往需要多次求导,易于求导的性质有利于后期计算。
此时,逻辑回归模型就出来了:
其中,z=wTx+b,若z很大,则f(z) ≈1;若z很小,则f(z)≈0。
可以看出,逻辑回归模型只是将线性回归模型外面套了一层映射函数而已,在实质上与线性模型并无区别,所以,其求解过程如下:
所以,得到了成本函数以后,下一步的目的就是求解如下成本函数的最小值:
对于此函数的求解,使用了随机梯度下降的办法,所谓随机就是初始化参数值是随机的,一般初始化为0,梯度下降指的是通过不断更新w值来得到更小的成本函数值,基本理解如下:
J(w) 在选取初始化参数后,无论是从左边还是右边,都会沿着使得J(w) 减小的方向移动,所以,只要通过这种方式不断更新w值,最终会求得最小化的J(w) , 此时结果就是求完后的结果。
上图中参数的更新公式为
其中a表示学习率,即每次进行更新时梯度的步长,一般0<=a<=1,该值若太小则迭代很慢,若太大则容易越过最小值,所以选取的时候一般用0.2-0.5,具体值还需要自己不断调试。
上面就是从最小二乘法到逻辑回归的基本过程,从最小二乘法讲起,一直讲到逻辑回归,如此再去理解逻辑回归里面的东西就会感觉和所有的东西从头到尾都联系起来了,下面的公式推导是关于逻辑回归中成本函数推导的部分,如果不希望对数学推理有更深入理解就可以看到这里就可以了。
这里,先要对概率进行一下简单的回顾,假设我们有n个独立的训练样本,{(x1,y1) ,(x2, y2),…, (xn, yn)},y={0, 1},则样本(xi,yi)出现的概率就是:
因为当Yi=1时,P(Yi,Xi)=P(Yi=1|Xi);当Yi=0时,P(Yi,Xi)=(1-P(Yi=1|Xi),总之无论Y等于几,该概率公式都可以表示样本(Xi,Yi)的出现概率。又因为这n个样本是互相独立、互不影响的,那么这n个样本同时出现的概率也可以得到了:
此时,我们将问题转化为了一个求该函数最大值的问题,为什么是求最大值,可以参考最大似然函数的部分知识,如果通俗来讲就是我们已经知道分类结果和分类样本,那么如果求参数呢,当然是选择能使得这些样本同时出现概率最大参数,因为如果这些样本几乎不出现或者很少出现那么这个分类结果就不太可能出现,就好比学校里面有很多个男生很多个女生,我走在校园里,我身边经过了8个男孩2个女孩,那么如何知道该校男女比例呢,那么就很简单了,我只需要找到一个男女比例,使得我在校园里走的时候同时经过8个男孩和2个女孩的概率最大就好了,那就是最有可能的比例。
为了方便计算,可以将预测函数改写成如下形式:
其中,构造的预测函数为:
上述粉色划线部分的推导为:
从上述公式中我们可以看出,在求导过程中指数函数的好的求导性质方便了我们的求导过程,这也就是之前为什么要用这个函数作为分类函数,但是在进行参数更新的时候需要遍历整个样本集,如果样本集很大,那速度就会很慢,为了加快速度,就只需遍历部分样本,这就是随机梯度下降算法了,至于该算法,以后会单独详解。
如果你能坚持看完这些公式,那么你可能会觉得讲了这么久但是逻辑回归在现实中能解决什么问题呢,其实逻辑回归是一个通用的算法,针对机器学习的问题基本都可以尝试使用下该方法,至于应用,可以考虑以下场景,如果你是做这一块的不妨尝试下试试:
我们知道肺癌是当今世界死亡率很高的肿瘤疾病,为了防止这种疾病我们需要了解那些习惯会导致该病发生,假如我有一组数据:
病人A:抽烟,喝酒,熬夜,50岁,饮食健康,身材匀称,无病史,有肺癌
病人B:不抽烟,喝酒,不熬夜,25岁,饮食不健康,肥胖,无病史,无肺癌
病人C:不抽烟,不喝酒,不熬夜,80岁,饮食健康,偏瘦,糖尿病史,无肺癌
……
假如上述数据共有1000万条,那么我就可以根据这些数据来使用逻辑回归算法,算出各个属性的w值,也就是权重,那么权重高的得病的概率就大,以后就避免这方面的习惯,比如抽烟,而这些基于大量样本得来的规律还是具备极大价值的,如果你能避免上述不好的习惯,起码得病的几率会大大降低!
-END-
- 干货 | 初二物理期末知识点分析(第一期)
- 明天见!网贷之家高峰论坛干货满满、福利多多!
- 高新兴物联发布最小NB-IoT模组
- 干货|深度解析两种信用评估模型
- 干货|房产抵押那些事儿之老客户的维护
- 干货 | 摄影测量学的前世、今生与未来
- 考上人行的大牛分享备考干货了,你不看一下吗?
- 干货 | 培养英语语感,其实并没你想得那么难!
- 【泰力电池回收冠名】干货 | 电动汽车电池热管理风冷与液冷
- 【欧瑞动力冠名】干货 | 原位生长CNTs修饰SiO2/C复合材料做锂离