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

二分类

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

R 逻辑回归 交互效应 logistic回归模型交互作用_逻辑回归

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

R 逻辑回归 交互效应 logistic回归模型交互作用_逻辑回归_02
Sigmoid函数输入记为z,公式为:
R 逻辑回归 交互效应 logistic回归模型交互作用_逻辑回归_03
也可以写成向量的形式:
R 逻辑回归 交互效应 logistic回归模型交互作用_logistic回归_04

Sigmoid函数的形状如下:

R 逻辑回归 交互效应 logistic回归模型交互作用_logistic回归_05

Sigmoid函数处处可导,其导数为:

R 逻辑回归 交互效应 logistic回归模型交互作用_二分类_06

如下图:

R 逻辑回归 交互效应 logistic回归模型交互作用_人工智能_07

回归函数

我们使用之前线性回归中的参数命名来改写一下上面的方程来得到Logistic回归函数:
R 逻辑回归 交互效应 logistic回归模型交互作用_人工智能_08

我们可以看到上面分母中的R 逻辑回归 交互效应 logistic回归模型交互作用_二分类_09

R 逻辑回归 交互效应 logistic回归模型交互作用_二分类_10

代价函数

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

R 逻辑回归 交互效应 logistic回归模型交互作用_二分类_11

因此在Logistic回归中,我们将使用下面的代价函数:
R 逻辑回归 交互效应 logistic回归模型交互作用_logistic回归_12
那么上面的代价函数为什么是凸函数呢,我们先来看看y=1的情况。

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

R 逻辑回归 交互效应 logistic回归模型交互作用_logistic回归_13

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

R 逻辑回归 交互效应 logistic回归模型交互作用_R 逻辑回归 交互效应_14

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

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

R 逻辑回归 交互效应 logistic回归模型交互作用_logistic回归_15

把上面的代价函数合起来:
R 逻辑回归 交互效应 logistic回归模型交互作用_人工智能_16
那么在所有数据上,代价函数为:
R 逻辑回归 交互效应 logistic回归模型交互作用_logistic回归_17

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

多分类

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

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

回顾一下上面回归函数中,一个样本属于某个类的概率:
R 逻辑回归 交互效应 logistic回归模型交互作用_二分类_18

将它展开:
R 逻辑回归 交互效应 logistic回归模型交互作用_R 逻辑回归 交互效应_19

softmax回归代价函数

知道了h(x)的形式之后,我们可以写出它的代价函数:
R 逻辑回归 交互效应 logistic回归模型交互作用_二分类_20
其中,如果y=c为真,则sign(y=c)=1,否则为0。