逻辑回归(机器学习笔记)

461 阅读4分钟
原文链接: www.jianshu.com

什么是逻辑回归? 它与线性回归有什么关系呢?

简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。(注意,这里用的是“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘)

逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。

伯努利分布 : zh.wikipedia.org/wiki/%E4%BC…

高斯分布 : zh.wikipedia.org/wiki/%E6%AD…

逻辑回归

假设有下面数据集合,它表示对于不同的肿瘤大小(tumor size),病人患癌症的概率y:

pic1.png

假设h_{\theta}(x) = y, 从上图我们大致可以预测:

if \ h_{\theta}(x) > 0.5 \quad y = 1 \\ if \ h_{\theta}(x) < 0.5 \quad y = 0

上面这个数据看上去是可以使用线性方程来拟合,但是如果一个 y = 1的数据样本出现在了一个不稳定的位置,那么就可能导致整个线性回归失败:

pic2.png

对于这种问题,我们希望我们的回归方程:

0 <= h_{\theta}(x) <= 1

并且:

P(y=0 | x, \theta) + P(y=1 | x, \theta) = 1

Sigmoid Fuction (Logisitic Function)就可以很好的满足上面的要求,它的函数表达式是:

g(z) = \frac{1}{1 + e^{-z}}

它的函数图像是:

pic3.png

所以对于上面的肿瘤问题,可以假设:

h_{\theta}(x) = g(\theta^{T}x)

z = \theta^{T}x

g(z) = \frac{1}{1 + e^{-z}}

即:

h_{\theta}(x) = \frac{1}{1 + e^{-\theta^{T}x}}

所以\theta^{T}x取什么值可以正确的回归上面的肿瘤大小与患癌症概率的数据集呢?

决策边界

在具体求\theta^{T}之前,我们先来了解一下决策边界的概念,以下面数据为例:

pic4.png

假设\theta_{0} = -3,\theta_{1} = 1,\theta_{2} = 1,可以正确的回归左面的数据模型, 则:

如果
-3 + x_{1} + x_{2} >= 0

那么g(z) = \frac{1}{1 + e^{-z}} > 0.5, 那么此时 y = 1

pic5.png

-3 + x_{1} + x_{2} >= 0 就是决策边界,即以它为边界,我们可以知道在\theta^{T}确定了的情况下, 数据集在什么时候 h_{\theta}(x) = 1,什么时候h_{\theta}(x) = 0

决策边界就是用来划清界限的边界,边界的形态可以不定,可以是点,可以是线,也可以是平面。决策边界是预测函数 h_{\theta}(x)的属性,而不是训练集属性。

求解逻辑回归问题的 \theta^{T}

逻辑回归方程我们已经找到了:

h_{\theta}(x) = \frac{1}{1 + e^{-\theta^{T}x}}

那如何求解\theta^{T}呢?回顾一下线性回归的代价函数J_{\theta}:

J_{\theta} = \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i}) - y^{i})^{2}

它也可以表述成下面这种形式, 不过对于逻辑回归来说 h_{\theta}(x) = \frac{1}{1 + e^{-\theta^{T}x}}

Cost(h_{\theta}(x), y) = \frac{1}{2m}(h_{\theta}(x) - y)^{2}

但是它的代价函数的图形为下凹的波浪状,这样波浪状的代价曲线会使我们在做梯度下降的时候陷入迷茫,任何一个极小值都有可能被错认为最小值,但无法获得最优预测精度。但在右图的代价曲线中,就像滑梯一样,我们就很容易达到最小值:

pic6.png

所以逻辑回归的代价函数不能简单的套用线性回归的模型,对于逻辑回归来说,它的代价函数是:

Cost(h_{\theta}(x), y) = \begin{cases} -\log(h_{\theta}(x))& if & y = 1\\ -\log(1 - h_{\theta}(x))& if& y = 0 \end{cases}

如果 y = 1 , Cost(h_{\theta}(x), y)的 像如下:

pic7.png

上图h_{\theta}(x) = 1时, Cost = 0, 这时可以得到最佳的\theta^{T}, 但是当h_{\theta}(x)趋近于0时,Cost趋向于无穷。即此时的预测是是十分不合理的,在这种情况下:

P(y=1 | x, \theta) = 0

如果 y = 0, 代价函数图像如下:

pic8.png

其实上面Cost(h_{\theta}(x), y)可以化简为下面这种形式:

Cost(h_{\theta}(x), y) = -y\log(h_{\theta}(x)) - (1-y)\log(1 - h_{\theta}(x))

这种写法是通过统计学中的极大似然法得来的 : zhuanlan.zhihu.com/p/26614750

所以逻辑回归的代价函数为:

J(\theta) = -\frac{1}{m}\sum_{i=1}^{m}[ y\log(h_{\theta}(x)) +(1-y)\log(1 - h_{\theta}(x))]

可以利用梯度下降算法来求解minJ(\theta):

\theta_{j} := \theta_{j} - \alpha\sum_{i=1}^{m}(h_{\theta}(x^{(i)} - y^{(i)})x_{j}^{(i)}

上面梯度下降的公式其实和线性回归相似,但是不同的是:

h_{\theta}(x) = \frac{1}{1 + e^{-\theta^{T}x}}

我们可以编写代码通过梯度下降来求minJ(\theta),不过除了梯度下降以外,还有一些更高级的算法可以求解minJ(\theta):

pic9.png

上面这些算法我们并不需要自己去实现,我们可以调用一些现有的库:

pic10.png

fminunc可以求出函数在无约束下的最小值, 在octave上运行上面的函数可以求出:

optTheta = \begin{bmatrix} 5 \\ 5 \end{bmatrix} \\ funtionVal = 0 \\ exitFlag = 1

exitFlag=1代表算法已经收敛。

对于逻辑回归来说我们只需要替换上面算法的:

jVal = J_{(\theta)} \\ gradient = \begin{bmatrix} \frac{\partial}{\partial\theta_{1}}J_{(\theta)}\\ \frac{\partial}{\partial\theta_{2}}J_{(\theta)}\\ ... \end{bmatrix}

一对多分类

什么是一对多分类(多分类)问题呢?

比如你把一个邮件分别放到工作、朋友、爱好等不同的文件夹。

可以通过把一对多转化为一对一来解决多分类问题:

pic11.png

即有几个类别我们就要训练几个逻辑回归分类器,上图需要实现3个分类器,他们满足:

h_{\theta}^{(i)} = P(y = i|x;\theta) \quad (i=1,2,3)

但是如果输入了一个x,那么我们应该选取哪一个分类器呢?

我们只需要选取计算结果最大的那一个即可

pic12.png

参考文章:

zhuanlan.zhihu.com/p/28408516