本章,将为大家介绍一种新的机器学习问题--逻辑回归(Logistic Regression)。
线性回归 PK 逻辑回归
到目前为止,我们学到了一种hypothesis function,格式如下:
hypothesis function
很明显,这是一条直线,即hθ(x)是一组连续的数值。我们把这种结果值连续的类型,称为线性回归Linear Regression。
在实际应用中,我们还会遇到结果值不连续的问题,比如,根据某人的浏览历史,来判断是否为其推荐机器学习方面的文章。
很明显,这类问题中,机器学习算法只需要回答“是”or“否”即可,如果转换为数值,那么机器学习只需要输出“1”or“0”。
这类问题的结果值是离散的,我们称之为逻辑回归Logistic Regression。
线性回归:结果值是连续的
逻辑回归:结果值是离散的
二分类 VS 多分类
在逻辑回归中,如果结果值只有两种(“是”or“否”),则称为二分类问题;
如果结果值有很多种(“晴”“阴”“雨”....),则称为多分类问题。
逻辑回归中最简单的就是二分类问题,下面我们就从二分类问题入手,揭开逻辑回归的面纱~
Sigmoid函数
我们先思考一个问题:逻辑回归的hypothesis function是什么样的?和线性回归的类似吗?
很不幸,线性回归的hypothesis function,是无法用在逻辑回归中的(一个连续、一个离散)。
看起来,我们需要另外找一个function,这个function的输出值
要么为"0"
要么为"1"
假如我们真的找到了这个function,在坐标系中表示如下:
现在,我们该怎么去求这个hypothesis function的参数?最小二乘法可以吗?sorry,该函数不连续,无法求偏导;梯度下降算法呢?NO!
面对这样一个不连续的函数,我们其实没有多少办法!
所以,我们要找的函数,不止只输出"0"和"1",而且要连续。
大家可以思考下,上面的两个条件,根本就没法同时满足!
那么,逻辑回归是如何解决的呢?
逻辑回归选择了Sigmoid函数作为hypothesis function,我们来看下,Sigmoid在坐标系中的样子:
sigmoid函数图示
What?不是说好要找一个只输出"0"和"1"的函数吗?
这里需要特别说明下,逻辑回归中,hypothesis function的意义。
逻辑回归中,hypothesis function的结果,代表预测值取"0"或"1"的概率,而不是预测值本身
hypothesis function含义更改后,我们再来看sigmoid函数。
毫无疑问,sigmoid函数是连续函数
当sigmoid函数输出 大于 0.5,则认为hypothesis function预测值更倾向于"1";如果输出 小于 0.5,认为hypothesis function预测值更倾向与"0"
逻辑回归通过改变hypothesis function的含义,不仅使预测值(注意不是hypothesis function)只输出"0"or"1",同时还保证了hypothesis function的连续性。不得不说,逻辑回归贼机智!!
逻辑回归的预测函数hypothesis function
看起来,我们已经找到了合适的hypothesis function,那么我们来看看,这个sigmoid长什么样。
sigmoid函数的表达式如下:
sigmoid函数表达式
逻辑函数并不是直接使用上面的函数作为代价函数,而是使用下面的函数:
逻辑回归的hypothesis function
可以看到,逻辑回归,是将sigmoid函数和线性回归的hypothesis function结合在一起。
逻辑回归的cost function
找到了逻辑回归的hypothesis function,接下来,我们来看下逻辑回归的cost function。
与线性回归类似,我们可以使用下面的函数作为cost function:
但是,在逻辑回归中,这样的cost function会存在找不到全局最优解的问题。为什么呢?
如果逻辑回归使用上面的cost function,那么cost function可能是下面的“非凸”函数:
非凸函数
这样的“非凸”函数,如果使用机器学习算法,可能只能找到局部最优解,而找不到全局最优解,这不是我们想要的,因此我们需要重新找一个“凸”函数作为cost function
逻辑回归使用的cost function如下所示,这里面有一些数学推导,如果大家有兴趣,可以自己找下这方面的资料,这里我们不做推导,直接写出来。
逻辑回归的cost function
上面的分段函数,处理起来很不方便,我们将其合并为一个函数,得到我们最终的cost function:
逻辑回归的cost function
下一章,我们将使用梯度下降算法来实现逻辑回归,并用python来实现。