逻辑回归&线性回归&梯度下降&正规方程

前一阵面试被问到逻辑回归的问题,没答好,现在对这一部分做个相对彻底的总结。部分内容来源于Andrew Ng的课。

逻辑回归主要解决二分类或者多分类问题,是用回归的思路,套上一个logistic函数,使得输出为0或者1的一种分类策略。

说到逻辑回归,不能不提线性回归,因此先把线性回归捋一遍。

线性回归

简单来说,假如我们有m个特征变量,要通过这m个特征变量预测一个y的数值,不管这数值实际代表什么意义。最直观的就是用中学就学过的一次多项式来拟合,如果一阶次的多项式效果不好,那么可以使用高阶次的。不论你怎么组合这个多项式,总是要有相应的m个系数对应m个特征变量的。那么线性回归想干什么呢,就是采用某种方法,找到最最优的一组m个系数,实现最优拟合。

一旦到这里了,就得定义什么是最优,这很有必要,不然凭什么认为这条线拟合的最好呢?

常见的定义最优的方式是:,这个也被称为代价函数,或者说损失函数。

仔细观察这个式子,其实就是平方误差和的形式。

现在要做的,就是找到一些列的系数“西塔”,使得这个式子结果收敛到一个我们可以接受的误差值范围内。

怎么找?两种方案:

1、梯度下降

2、正规方程

先说梯度下降:

 这个公式就是梯度下降的核心算法。可以看到,针对每一个系数,都采用对其取偏导数,然后使用一个合适的学习率参数a进行相乘并递减,重复这个过程,直到代价函数收敛到某个范围内。

有人会问学习率的选取问题,的确,合适的学习率有助于更快的达到收敛效果。梯度下降算法的每次迭代受到学习率的影响,如果学习率过小,那么需要的迭代次数过多;如果学习率过大,那么有可能会错过局部最小值,导致无法收敛。常用的学习率数值:0.01,0.03,0.1,0.3,1,3,10

还要注意的一点就是,如果我们打算采用多项式回归模型的话,在进行梯度下降算法前,很有必要先进性特征缩放,使其规约到一个相近的范围内。采用的方式常常是:

再来说正规方程:

先上一个公式:可以说这个公式叙述了所有。注意“西塔”在这里表示系数向量,这个式子是一个矩阵运算式。X代表特征矩阵,y代表对应的待预测的实际值。

正规方程法不像梯度下降要一次次地试,它可以一次性给出最优的系数向量解。通常当特征变量小于10000个的时候,这个方法是很好用的,但是凡事有利有弊,这个方法最广泛的应用还是在线性回归领域,而在后面讲的逻辑回归就不能用了。下面是两种方法的比较:

注意,正规方程法只能用于线性回归模型。多项式的高阶模型就不能用,但是如果采用变量替换,将非线性转变为线性,依然可以用。相较于正规方程法,梯度下降法更加具有普适性。

逻辑回归:

可以开始说逻辑回归了。有了前面的铺垫,我们知道,线性回归可以预测一个数值,但是这个数值的大小呢,不一定,然而对于分类问题,我们想要得到0或者1,怎么办?

 

拿这张图片的例子来说,我们想要预测这两类,可以明显的找到一条线性回归直线分开他们,但这时候我们不再需要什么预测数值,我们只想要0和1。假如现在我们找到了这条线,然后,线上方的红叉类元素带入直线方程后一定大于0;线下方的绿色圈圈元素带入直线方程后一定小于0;线之上的元素带入进去肯定等于0.这样我们有了天然的分类属性。

有没有什么函数能把大于0的函数都归类为1,或者把小于0的函数归类为0呢,有的,这就是sigmoid function

但凡大于0的,都收敛于1;小于0的,都收敛于0;等于0的,恰好等于0.5。这样联合起来,得到:

,其含义是输出变量=1的可能性,带有一定的概率含义。

同样的,我们必然要定义代价函数,也叫损失函数。怎么评定这条直线是最好的分类边界呢?

依然如上,我们用平方误差作为代价函数,带入我们的,很不幸,当我们以为自变量,代价函数为因变量时,这个

是一个非凸函数。而非凸函数是极其性质不友好的函数,我们需要得到一个凸函数。

因此,我们不再用平方误差作为代价函数,而是用下面的:

 

 

 

梯度下降算法依然不变,仍然记住,之前的特征缩放很有必要。

 

至此,基本上思路上还有算法层面上的内容都已经搞定。我们可以明确的看出一个通用的道理,衡量任何一个模型好坏都需要一个代价函数,然后是逻辑回归和线性回归的代价函数是极其不一样的。

然后就是最常用的梯度下降算法,求取函数的局部最小值。

以后打算继续写一个牛顿方法的求法。mark一下。

以上!

 

posted @ 2016-06-12 21:22  吕吕吕吕吕  阅读(2649)  评论(2编辑  收藏  举报