三、线性回归和逻辑回归

回归问题的条件/前提:

1) 收集的数据

2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数。然后利用这个模型去预测/分类新的数据。

(1)线性回归的定义

(2)单变量线性回归

(3)cost function:评价线性回归是否拟合训练集的方法

(4)梯度下降:解决线性回归的方法之一

(5)feature scaling:加快梯度下降执行速度的方法

(6)多变量线性回归

3.1 线性回归

3.1.1 单变量线性回归的模型

线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(即此函数是否足够拟合训练集数据),挑选出最好的函数(cost function最小)即可

注意:

(1)因为是线性回归,所以学习到的函数为线性函数,即直线函数;

(2)因为是单变量,因此只有一个x

 

我们能够给出单变量线性回归的模型:


怎么样能够看出线性函数拟合的好不好呢?

使用最小二乘法计算Cost Function(代价函数),代价函数越小,说明线性回归地越好(和训练集拟合地越好),当然最小就是0,即完全拟合;

“最小二乘法”的思想求解,这里的“二乘”指的是用平方来度量观测点与估计点的距离(远近),“最小”指的是参数值要保证各个观测点与估计点的距离的平方和达到最小时的值即为最优模型的参数值

三、线性回归和逻辑回归_第1张图片

接下来,就是求解这个函数的方法梯度下降法。

梯度下降:能够找出cost function函数的最小值

2.梯度下降方法求解过程(单变量的线性回归,即只有一个特征变量):

梯度下降:能够找出cost function函数的最小值

方法

(1)先确定向下一步的步伐大小,我们称为Learning rate

(2)任意给定一个初始值:

(3)确定一个向下的方向,并向下走预先规定的步伐,并更新

(4)当下降的高度小于某个定义的值,则停止下降;

三、线性回归和逻辑回归_第2张图片


下降的方向:由于随着越接近最小值,函数切线的斜率逐渐变小。这就是下降的方向。

特点

(1)初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;

(2)越接近最小值时,下降速度越慢;

问题:如果

初始值就在local minimum的位置,则会如何变化?

答:因为已经在local minimum位置,所以derivative 肯定是0,因此不会变化;


如果取到一个正确的值,则cost function应该越来越小;

问题:怎么取值?

答:随时观察值,如果cost function变小了,则ok,反之,则再取一个更小的值;



3.1.2 多变量的线性回归

1.多变量线性回归之前必须要Feature Scaling

此种方法应用于梯度下降,为了加快梯度下降的执行速度

思想:将各个feature的值标准化,使得取值范围大致都在-1<=x<=1之间;

常用的方法是Mean Normalization,即

 

2.

单变量线性回归的模型:


 

这里我们可以定义出多变量线性回归的模型:

 

 

Cost function如下:


 

如果要用梯度下降解决多变量的线性回归,则我们还是可以用传统的梯度下降算法进行计算:

 

 三、线性回归和逻辑回归_第3张图片

3.1.3   L1正则化和L2正则化

机器学习监督算法的基本思路是 让拟合的模型尽量接近真实数据 。在这个贴近的过程可能存在两个截然相反的问题:过拟合和拟合不够。拟合不够是模型预测值与真实值之间误差较大,梯度下降就是讨论解决问题(求损失函数最小)。 而正则化则是探讨过拟合的问题正则化通过降低模型的复杂性, 达到避免过拟合的问题。

1.L1正则化和L2正则化简述

损失函数后面会添加一个额外项,常用的额外项一般有两种:L1正则化L2正则化

L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。下图是PythonLasso回归的损失函数,式中加号后面一项α||w||1即为L1正则化项。

 

损失函数式中加号后面一项α||w||22即为L2正则化项。

 

一般回归分析中回归w表示特征的系数,从上式可以看到正则化项是对系数做了处理(限制)。L1正则化和L2正则化的说明如下:

L1正则化是指权值向量w中各个元素的绝对值之和,通常表示为


L2正则化是指权值向量w中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为

一般都会在正则化项之前添加一个系数,Python中用α表示,一些文章也用λ表示。这个系数需要用户指定。

2.L1和L2正则化作用

L1L2正则化有什么用?下面是L1正则化和L2正则化的作用

L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择

     L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合

(1)L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择的原因为:

稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0. 通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,或者贡献微小(因为它们前面的系数是0或者是很小的值,即使去掉对模型也没有什么影响),此时我们就可以只关注系数是非零值的特征。这就是稀疏模型与特征选择的关系。

(2)L2正则化和过拟合

拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。

 

L2正则化可以获得值很小的参数?

以线性回归中的梯度下降法为例。假设要求的参数为θhθ(x)是我们的假设函数,那么线性回归的代价函数如下:


在梯度下降法中,最终用于迭代计算参数θ的迭代式为:

其中αlearning rate. 上式是没有添加L2正则化项的迭代公式,如果在原始代价函数之后添加L2正则化,则迭代公式会变成下面的样子:


 

λ就是正则化参数。从上式可以看到,与未添加L2正则化的迭代公式相比,每一次迭代,θj都要先乘以一个小于1的因子,从而使得θj不断减小,因此总得来看,θ是不断减小的。

最开始也提到L1正则化一定程度上也可以防止过拟合。之前做了解释,当L1的正则化系数很小时,得到的最优解会很小,可以达到和L2正则化类似的效果。

注:

L1正则化是权值的绝对值之和,J是带有绝对值符号的函数,因此J是不完全可微的。机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。当我们在原始损失函数J0后添加L1正则化项时,相当于对J0做了一个约束。令L=α∑w|w|,则J=J0+L,此时我们的任务变成在L约束下求出J0取最小值的解。考虑二维的情况,即只有两个权值w1w2,此时L=|w1|+|w2|对于梯度下降法,求解J0的过程可以画出等值线,同时L1正则化的函数L也可以在w1w2的二维平面上画出来。如下图:

三、线性回归和逻辑回归_第4张图片

图中等值线是J0的等值线,黑色方形是L函数的图形。在图中,当J0等值线与L首次相交的地方就是最优解。上图中J0LL的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是(w1,w2)=(0,w)。可以直观想象,因为L函数有很多『突出的角』(二维情况下四个,多维情况下更多),J0与这些角接触的机率会远大于与L其它部位接触的机率,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。

类似,假设有如下带L2正则化的损失函数J=J0+α∑ww2(2)同样可以画出他们在二维平面上的图形,如下:

三、线性回归和逻辑回归_第5张图片

二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此J0L相交时使得w1w2等于零的机率小了许多,这就是为什么L2正则化不具有稀疏性的原因。

 

注:

1. L2 regularizer :使得模型的解偏向于 norm 较小的 W,通过限制 W norm 的大小实现了对模型空间的限制,从而在一定程度上避免了 overfitting 。不过 ridge regression 并不具有产生稀疏解的能力,得到的系数 仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。
2. L1 regularizer : 它的优良性质是能产生稀疏性,导致 W 中许多项变成零。 稀疏的解除了计算量上的好处之外,更重要的是更具有可解释性



3.2 逻辑回归

逻辑回归的模型是一个非线性模型,sigmoid函数,又称逻辑回归函数。但是它本质上又是一个线性回归模型,因为除去sigmoid映射函数关系,其他的步骤,算法都是线性回归的。可以说,逻辑回归,都是以线性回归为理论支持的。使得线性回归的值变换为(01.

 

logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同。逻辑回归既可以做分类也可以做回归。

logistic回归概率预测,也可用于分类。

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

 

1)线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。

2)线性回归要求因变量是连续性数值变量,而logistic回归要求因变量是分类型变量。

3)线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系

4)logistic回归是分析因变量取某个值的概率与自变量的关系,而线性回归是直接分析因变量与自变量的关系。

 

1. 逻辑回归分类是(01分类,根据逻辑回归函数,逻辑回归函数最后的值只有01

给定输入x,参数化的θ(参数空间), y=1时的概率。

数学上可以如下表示:




对于因变量y=01这样的二分类问题:

 

(1)Logistic回归算法基于Sigmoid函数,或者说Sigmoid就是逻辑回归函数。Sigmoid函数定义如下:


函数值域范围(0,1)

(2)因此逻辑回归函数的表达式如下:

 

 


三、线性回归和逻辑回归_第6张图片

g(z)≥0.5,z≥0;

对于hθ(x)=g(θTx)≥0.5, θTx≥0, 此时意味着预估y=1;

反之,当预测y = 0时,θTx<0;

可以认为θTx= 0是一个决策边界,当它大于0或小于0时,逻辑回归模型分别预测不同的分类结果.

 

(3)其导数形式为:


三、线性回归和逻辑回归_第7张图片 

(4)逻辑回归的代价函数:

 

 

 

 

线性回归的Cost Function是凸函数,具有碗状的形状,而凸函数具有良好的性质:对于凸函数来说局部最小值点即为全局最小值点,因此只要能求得这类函数的一个最小值点,该点一定为全局最小值点。

三、线性回归和逻辑回归_第8张图片 

代价函数公式为:

逻辑回归函数代价函数(交叉熵)。

逻辑回归中概率为01的概率分别为:

 



三、线性回归和逻辑回归_第9张图片

三、线性回归和逻辑回归_第10张图片


三、线性回归和逻辑回归_第11张图片

 

 

(3)代价函数最小化求解最优参数值

 三、线性回归和逻辑回归_第12张图片

Gradient descent 又叫 steepest descent,是利用一阶的梯度信息找到函数局部最优解的一种方法,也是机器学习里面最简单最常用的一种优化方法。它的思想很简单,和我开篇说的那样,要找最小值,我只需要每一步都往下走(也就是每一步都可以让代价函数小一点),然后不断的走,那肯定能走到最小值的地方,例如下图所示:

 三、线性回归和逻辑回归_第13张图片

但,我同时也需要更快的到达最小值啊,怎么办呢?我们需要每一步都找下坡最快的地方,也就是每一步我走某个方向,都比走其他方法,要离最小值更近。而这个下坡最快的方向,就是梯度的负方向了。

logistic Regression来说,梯度下降算法新鲜出炉,如下:

 

其中,参数α叫学习率,就是每一步走多远,这个参数蛮关键的。如果设置的太多,那么很容易就在最优值附加徘徊,因为你步伐太大了。例如要从广州到上海,但是你的一步的距离就是广州到北京那么远,没有半步的说法,自己能迈那么大步,是幸运呢?还是不幸呢?事物总有两面性嘛,它带来的好处是能很快的从远离最优值的地方回到最优值附近,只是在最优值附近的时候,它有心无力了。但如果设置的太小,那收敛速度就太慢了,向蜗牛一样,虽然会落在最优的点,但是这速度如果是猴年马月,我们也没这耐心啊。所以有的改进就是在这个学习率这个地方下刀子的。我开始迭代是,学习率大,慢慢的接近最优值的时候,我的学习率变小就可以了。所谓采两者之精华啊!

http://blog.csdn.net/ljn113399/article/details/52725736

(4)随机梯度下降算法算法优化:

(5)评价一个优化算法的优劣主要是看它是否收敛,也就是说参数是否达到稳定值,是否还会不断的变化?收敛速度是否快?

三、线性回归和逻辑回归_第14张图片

(7)   上图展示了随机梯度下降算法在200次迭代中(请先看第三和第四节再回来看这里。我们的数据库有100个二维样本,每个样本都对系数调整一次,所以共有200*100=20000次调整)三个回归系数的变化过程。其中系数X2经过50次迭代就达到了稳定值。但系数X1X0100次迭代后稳定。而且可恨的是系数X1X2还在很调皮的周期波动,迭代次数很大了,心还停不下来。产生这个现象的原因是存在一些无法正确分类的样本点,也就是我们的数据集并非线性可分,但我们的logistic regression是线性分类模型,对非线性可分情况无能为力。然而我们的优化程序并没能意识到这些不正常的样本点,还一视同仁的对待,调整系数去减少对这些样本的分类误差,从而导致了在每次迭代时引发系数的剧烈改变。对我们来说,我们期待算法能避免来回波动,从而快速稳定和收敛到某个值。

(8)   对随机梯度下降算法,我们做两处改进来避免上述的波动问题:

(9)1)在每次迭代时,调整更新步长alpha的值。随着迭代的进行,alpha越来越小,这会缓解系数的高频波动(也就是每次迭代系数改变得太大,跳的跨度太大)。当然了,为了避免alpha随着迭代不断减小到接近于0(这时候,系数几乎没有调整,那么迭代也没有意义了),我们约束alpha一定大于一个稍微大点的常数项,具体见代码。

(10)2)每次迭代,改变样本的优化顺序。也就是随机选择样本来更新回归系数。这样做可以减少周期性的波动,因为样本顺序的改变,使得每次迭代不再形成周期性。

(11)   改进的随机梯度下降算法的伪代码如下:

(12)################################################

(13)初始化回归系数为1

(14)重复下面步骤直到收敛{

(15)   对随机遍历的数据集中的每个样本

(16)       随着迭代的逐渐进行,减小alpha的值

(17)       计算该样本的梯度

(18)       使用alpha x gradient来更新回归系数

(19) }

(20)返回回归系数值

(21)################################################

三、线性回归和逻辑回归_第15张图片(22)

(23)   比较原始的随机梯度下降和改进后的梯度下降,可以看到两点不同:

1)系数不再出现周期性波动。2)系数可以很快的稳定下来,也就是快速收敛。这里只迭代了20次就收敛了。而上面的随机梯度下降需要迭代200次才能稳定




你可能感兴趣的:(机器学习算法)