大家的人工智能——Logistic回归

在《大家的人工智能——线性回归》中,什么是拟合,代价函数,梯度下降,相信大家已经对这些基本概念有所了解。线性回归的应用场景是输出为连续的数值,比如下个月的房价多少,明天的气温多少。而在机器学习中还有一类任务,它的输出是离散的,比如明天他会不会去游泳(会或不会),这是狗还是猫,这就是分类任务,而Logistic回归就是处理这种分类任务的,不要看他的名字里面有“回归”两个字,但是它其实是个分类算法。它取名Logistic回归主要是因为是从线性回归转变而来的。

二分类

假设我们有一些数据点,我们使用一条直线对这些点进行拟合,这条线称为最佳拟合直线,这个拟合过程称为回归。利用Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。如下图:

在这里插入图片描述

我们想要得到一个函数,能够接收所有的输入然后预测出类别。例如在两个类的情况下,函数输出0或1。该函数称为海维塞德阶跃函数(Heaviside step function),或者直接称为单位阶跃函数。但是海维塞德阶跃函数的问题在于:该函数在跳跃点上从0瞬间跳跃到1,这个瞬间跳跃过程有时很难处理。不过另外一个函数也有类似的性质,而且数学上更容易处理,它就是Sigmoid函数,具体公式如下:

σ ( z ) = 1 1 + e z \sigma(z) = \frac{1}{1 + e^{-z}}
Sigmoid函数输入记为z,公式为:
z = w 0 x 0 + w 1 x 1 + w 2 x 2 + + w n x n z = w_0x_0 + w_1x_1 + w_2x_2 + ··· + w_nx_n
也可以写成向量的形式:
Z = W T X Z = W^TX

Sigmoid函数的形状如下:

在这里插入图片描述

Sigmoid函数处处可导,其导数为:
σ ( x ) = σ ( x ) ( 1 σ ( x ) ) \sigma^{'}(x) = \sigma(x)(1 - \sigma(x))
如下图:
在这里插入图片描述

回归函数

我们使用之前线性回归中的参数命名来改写一下上面的方程来得到Logistic回归函数:
h Θ ( X ) = 1 1 + e Θ T X h_{\Theta}(X) = \frac{1}{1 + e^{-\Theta^TX}}

我们可以看到上面分母中的 Θ T X \Theta^TX 与线性回归中的那条“直线”形式一模一样,在Logistic回归中就是要找到一条这样的“直线”进行分类。而上面的h(x)表示属于类别1(二分类)的概率:

h Θ ( X ) = P ( y = 1 X ; Θ ) h_{\Theta}(X) = P(y = 1 |X;\Theta)

代价函数

我们现在知道在线性回归中的代价函数是什么样的,但是如果将它作为Logistic回归中的代价函数的话,那么它将会是一个非凸函数,会有很多局部最优值,这是因为使用了非线性的sigmoid:

在这里插入图片描述

因此在Logistic回归中,我们将使用下面的代价函数:
C o s t ( h Θ ( X ) , y ) = { l o g ( h Θ ( X ) ) ,   i f   y = 1 l o g ( 1 h Θ ( X ) ) ,   i f   y = 0 Cost(h_{\Theta}(X), y) = \left\{ \begin{aligned} -log(h_{\Theta}(X)), \space if \space y = 1 \\ -log(1 - h_{\Theta}(X)) , \space if \space y = 0 \end{aligned}\right.
那么上面的代价函数为什么是凸函数呢,我们先来看看y=1的情况。

当y=1时,代价函数为-log(h(x)):

在这里插入图片描述

那么为什么是这样的形状呢,我们可以看看log(z)的样子:

在这里插入图片描述

红色曲线[0,1]的区间就是y=1时的代价函数。

当y=0时,代价函数为-log(1-h(x)):

在这里插入图片描述

把上面的代价函数合起来:
C o s t ( h Θ ( X ) , y ) = [ y l o g ( h Θ ( X ) ) + ( 1 y ) l o g ( h Θ ( X ) ) ] Cost(h_{\Theta}(X), y) = -[ylog(h_{\Theta}(X)) + (1-y)log(h_{\Theta}(X))]
那么在所有数据上,代价函数为:
J ( Θ ) = 1 m i = 1 m [ y ( i ) l o g ( h Θ ( X ( i ) ) ) + ( 1 y ( i ) ) l o g ( h Θ ( X ( i ) ) ) ] J(\Theta) = - \frac{1}{m} \sum_{i = 1}^m [y^{(i)}log(h_{\Theta}(X^{(i)})) + (1-y^{(i)})log(h_{\Theta}(X^{(i)}))]

接下来按照线性回归中提到的方式最小化代价函数即可。

多分类

上面讲述了二分类的情况,现在推广到多分类。但是对于多分类的情况,需要对上面的Logistic进行改进。

  1. 针对每个类别都建立一个二分类器。
  2. 修改logistic回归的损失函数,让其考虑每个样本标记的损失,这种方法叫做softmax回归。

回顾一下上面回归函数中,一个样本属于某个类的概率:
h Θ ( X ) = P ( y = k X ; Θ ) h_{\Theta}(X) = P(y = k |X;\Theta)

将它展开:
h θ ( x ( i ) ) = [ p ( y ( i ) = 1 x ( i ) ; θ ) p ( y ( i ) = 2 x ( i ) ; θ ) p ( y ( i ) = k x ( i ) ; θ ) ] = 1 c = 1 k 1 + e θ c T x ( i ) [ e θ 1 T x ( i ) e θ 2 T x ( i ) e θ k T x ( i ) ] h_{\theta}(x^{(i)}) = \left[ \begin{matrix} p(y^{(i)} = 1 |x^{(i)};\theta) \\ p(y^{(i)} = 2 |x^{(i)};\theta) \\ ⋮ \\ p(y^{(i)} = k |x^{(i)};\theta) \end{matrix} \right] = \frac{1}{\sum_{c=1}^k1+e^{\theta_c^Tx^{(i)}}} \left[ \begin{matrix} e^{\theta_1^Tx^{(i)}} \\ e^{\theta_2^Tx^{(i)}} \\ ⋮ \\ e^{\theta_k^Tx^{(i)}} \end{matrix} \right]

softmax回归代价函数

知道了h(x)的形式之后,我们可以写出它的代价函数:
J ( θ ) = i = 1 m c = 1 k s i g n ( y ( i ) = c ) l o g p ( y ( i ) = c x ( i ) , θ ) = i = 1 m c = 1 k s i g n ( y ( i ) = c ) l o g e θ c T x ( i ) l = 1 k 1 + e θ l T x ( i ) J(\theta) = -\sum_{i=1}^m\sum_{c=1}^ksign(y^{(i)}=c)logp(y^{(i)} = c|x^{(i)}, \theta) = -\sum_{i=1}^m\sum_{c=1}^ksign(y^{(i)} = c)log\frac{e^{\theta_c^Tx^{(i)}}}{\sum_{l=1}^k1+e^{\theta_l^Tx^{(i)}}}
其中,如果y=c为真,则sign(y=c)=1,否则为0。

欢迎爱好人工智能的小伙伴关注公众号:机器工匠,不定时发布一些关于人工智能的技术、资讯文章,更有面向初学者的系列文章。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LXYTSOS/article/details/93136295