凌云时刻 · 技术
导读:在这一篇笔记中我们来学习目前应用比较广泛的一个分类算法逻辑回归(Logistic Regression)。
作者 | 计缘
来源 | 凌云时刻(微信号:linuxpk)
什么是逻辑回归
首先大家应该有会有一个疑问,为什么既然叫逻辑回归,但是解决的却是分类问题呢。因为逻辑回归是将样本的特征和样本发生的概率联系起来,在拟合样本数据发生概率的时候,其实是在解决一个回归问题,当概率计算出来后,再根据概率进行分类处理。所以逻辑回归在解决分类问题时,其实中间还是进行了回归问题的处理,但是逻辑回归只能解决二分类问题,这一点要注意。
逻辑回归在解决概率这个回归问题时,和线性回归、多项式回归有一个不同的地方,那就是后者训练出的模型,预测其他样本数据的目标值时值域理论上是在负无穷到正无穷的,换句话说也就是对值域是没有什么限制的。而对于表示概率的数而言,一般值域都是在0到1之间,真实世界中,概率不都是按从0%到100%表示嘛。所以这就引出了逻辑回归和线性回归的相似和不同处,继而体现在公式模型上。在第四篇笔记中,我们知道多元线性回归的公式模型是:
因为 的值域为(−∞,+∞),所以如果要在逻辑回顾中运用在求解概率的公式模型上就需要另外一个函数将其值域限定在(0,1),我们将这个函数称为Sigmoid函数:
最终逻辑回归求解概率的模型为:
Sigmoid函数
我们先来看看这个Sigmoid函数为什么将值域限定在(0,1),将这个函数绘制出来看一下:
import numpy as np
import matplotlib.pyplot as plt
# 定义Sigmoid函数
def sigmoid(t):
return 1 / (1 + np.exp(-t))
# 构建向量x,随机生成500个数,范围从-10到10
x = np.linspace(-10, 10, 500)
# y值通过Sigmoid计算出
y = sigmoid(x)
plt.plot(x, y)
plt.show()
从曲线图可以看出,yy的值最小不会小于0,最大不会大于1,表明了它的值域是(0,1),我将Sigmoid函数再写出来看一下:
当 无穷大时, 无穷小,那么当1除以无穷小时,它的值就无限接近于1。那么当 无穷小时, 无穷大,那么当1除以无穷大时,它的值就无限接近于0。
我将坐标轴在Sigmoid曲线图上绘制出来,可以看到当 时,越接近0,概率 越接近0.5, 越远离0时,概率 越大于0.5,并且当 大到一定程度时,概率 基本稳定在1附近。当 时,越接近0,概率 越接近0.5。 越远离0时,概率 越小于0.5,并且当 小到一定程度时,概率 基本稳定在0附近。这就是Sigmoid函数在逻辑回归中的数学意义。
逻辑回归的损失函数
我们再将逻辑回归中计算概率的公式写出来:
现在的问题是我们如何求出上面的 值,也就是在逻辑回归问题中,损失函数如何定义。
前面说过,逻辑回归只能解决二分类问题,既当概率估计值 大于等于0.5时,我们记 为1,当 小于等于0.5时,记 为0,即:
那么我们先将损失函数也分为两种情况来看:
如果 , 越小, 越大(损失越大) 如果 , 越大, 越大(损失越大)
也就是说,在真实的分类为1的情况下,如果概率越小,那么说明损失越大,因为概率越小,分类应该越趋向0。在真实的分类为0的情况下,如果概率越大,那么也说明损失越大,因为概率越大,分类应该越趋向1。
上面我们只是根据逻辑回归分类的方式,定义出了逻辑回归损失函数的损失趋势和语言解释,那么我们需要在数学的海洋中找到符合这种趋势的数学工具,或者说函数。再次之前,我们先来回顾一下高中学过的数学知识对数。
对数
在数学中,如果有 , 是 的指数,那么可以说以 为底 的对数是 ,记为:
对数有一些简便的写法:
如果底数为2,可以省略底数记为
如果底数为10,可以省略底数记为
如果底数为 ,可以省略底数记为
对数的主要作用是解幂比如:
对数的存在使得求这种复杂幂的问题更快更方便。
我们再来看看对数在几何意义上的曲线:
对数曲线
可以很容易的算出,对数的曲线始终是过(1,0)点的。
定义损失函数
回顾完对数后,我们再来看看逻辑回归的损失函数,没错,我们就是要使用对数的函数来表示:
如果 ,那么损失函数为: 如果 ,那么损失函数为:
我们来看看这两个函数为什么符合之前我们定义的损失函数的描述。首先 的曲线为:
之前说了,概率的值域在(0,1)之间,所以上图曲线的x轴以下的曲线是没有意义的,所以对于 ,它的曲线是:
从上面的曲线图可以很容易的发现,当 趋近于0的时候, 趋近于正无穷,这个正无穷其实就是一个很大的损失惩罚,因为当 趋近于0时, 应该也是趋近于0,但是这里 定义的是1。当 在不断趋近1的过程中, 的值逐渐减小,既损失逐渐减小,当 趋近于1时, 应该也是趋近于0,和这里定义的是一致的,所以 的值是0,说明没有损失。
下面再来看看 的曲线:
同理因为概率的值域在(0,1)之间,所以 的曲线为:
这条曲线同样可以解释我们之前定义的损失趋势。
此时我们找到的损失函数还是根据不同的分类分成了两个,其实将其合成一个也很简单:
如此一来,当y=0时,损失函数为 ,当y=1时,损失函数为 。
上面的公式,是针对一个样本数据的,那么如果有多个样本数据,其实就是将这些样本数据的损失值加起来然后在求一下平均值:
下面我们要做的就是找到一组 值,使得上面的 达到最小值。
END
往期精彩文章回顾
机器学习笔记(十八):模型正则化
机器学习笔记(十七):交叉验证
机器学习笔记(十六):多项式回归、拟合程度、模型泛化
机器学习笔记(十五):人脸识别
机器学习笔记(十四):主成分分析法(PCA)(2)
机器学习笔记(十三):主成分分析法(PCA)
机器学习笔记(十二):随机梯度下降
机器学习笔记(十一):优化梯度公式机器学习笔记(十):梯度下降
机器学习笔记(九):多元线性回归
长按扫描二维码关注凌云时刻
每日收获前沿技术与科技洞见