如果只能学习一个算法的话,我选择逻辑回归。
讲个笑话,逻辑回归既不讲逻辑,也不是回归。
本文目的是以大白话的方式介绍逻辑回归。我们先简要以公式的方式回顾什么是逻辑回归,如何训练。然后,我们用大白话的方式重新解释一次逻辑回归。最后,我们介绍逻辑回归和大脑的关系。
逻辑回归的数学描述
什么是逻辑回归
逻辑回归,是个二分类算法,即给定一个输入,输出true/false判断是否属于某个类别,同时还能给出属于这个类别的概率。
数学描述
输入是x,输出是y,中间有个临时变量是t。w和b是模型参数。h(t)是属于某个类别的概率,大于一定值(比如0.5),则被认为属于这个类别,即y=1。
$$ t = wx + b $$
$$ h(t) = \frac{1}{1+e^{-t}} $$
简便起见,我们可以认为b始终和一个值为1的w相乘。于是我们把b放入w。模型简化为
$$ h(x) = \frac{1}{1+e^{-wx}} $$
这就是逻辑回归的公式,非常简单。
数学描述训练过程
极大似然估计
给定输入x1,x2,…,xn,并给定目标输出y1,y2,…,yn;请问w值最应该是多少呢?这句话,不说人话,就是极大似然估计
。
如何进行极大似然估计呢?极大似然估计,顾名思义,就是先有个似然
,然后让它取最大值。说人话: 给定X,经过模型W得到Y的概率,这个概率要最大化。即P(Y|X)在什么W的情况下最大,即求W并使得P(Y|X;W)最大化。
似然定义
那么P(Y|X;W)怎么定义呢?由于我们有多个样本,每个样本都可以得到一个P(y|x;w),概率相乘即可得到总的概率。
$$ L(w) = \prod_{i=1}^{m}P(y_{i}|x_{i};w) $$
这个公式如何进一步深化呢?
h(x)是w模型认为的结果,y是期望的输出,y只可能是0或者1。
- y=1时,h(x)越大越好
- y=0时,h(x)越小越好,1-h(x)越大越好
上述相当于if-else逻辑。如果我们将if-else放到一个公式中就好了。于是,利用一点技巧,我们得到下面公式。
$$ h(x_{i})^{y_{i}} (1-h(x_{i}))^{1-y_{i}} $$
将多个样本的上述公式的值相乘,即可以定义为总的似然函数。
$$ L(w)=\prod_{i=1}^{m}h(x_{i})^{y_{i}} (1-h(x_{i}))^{1-y_{i}} $$
如何极大似然估计
即然是求最大值,那么找到拐点就可以了。由于相乘不好计算,先log一下转为对数似然函数
,即相乘转相加,问题转化为求对数似然函数的最大值时的w。
$$ l(w)=logL(w)=\sum_{i=1}^{m}y_{i}logh(x_{i})+(1-y_{i})log(1-h(x_{i})) $$
这下问题就简单了。就是求导数,梯度下降法。最终得到了迭代更新w的方法。
$$ w_{t+1}=w{t}+a\frac{1}{n}\sum_{i=1}^{n}(y_{i}-h(x_{i}))x_{i} $$
为什么是这个sigmoid函数
至此,我们成功得到了逻辑回归的训练方法。但是,有两个问题,我们忽略了。(1)为什么在线性t=wx+b的基础上又套了一层sigmoid函数,也称logistic函数?(2)为什么使用sigmoid函数,而不是其他的什么奇葩函数?
- 为什么不直接线性回归?
对于二分类问题,线性回归原则上也能解决。然而,二分类问题一般伴随着y的分布是二项分布。线性回归的y不适合。
- 为什么使用sigmoid函数?
参考David Cox在1958年首先提出逻辑回归算法的思路上来。
- 思路一:首先我们定义一个叫做odd的概念,即所有
o = 正例个数/负例个数
。然后我们知道正例概率可以定义为p = 正例个数 / (正例个数 + 负例个数)
,即p = o / (1 + o)
,o是exp(wx+b)。 - 思路二:一个直觉的概念
优势比
p/(1-p),p是true时的概率,1-p是false时的概率,对优势比取log,即t=log(p/(1-p))进行值域转换,转到所有实数域。然后反过来求p,最终即可得到sigmoid函数。
sigmoid函数的有趣特点是,自变量是负无穷到正无穷,应变量是0到1。越接近0变化越大。导函数是p(1-p),导函数很有趣。总之,这个函数充满了数学美
。
逻辑回归大白话
前面讲了一大堆公式。这里我们对逻辑回归进行大白话解释,力求让外行小白也能听懂。
假设我们是一家银行,手里有很多人的收入信息,同时手里还有这些人是否按时还房贷的信息。现在我们想得到一个模型,依此模型来判断是否批复一个新客户的房贷申请。这里x就是收入信息(x为负表示此人现金流为负),y=1表示此人会按时还房贷,我们要得到w。h(x)表示这个人的0~1的信用分。
$$ w_{t+1}=w{t}+a\frac{1}{n}\sum_{i=1}^{n}(y_{i}-h(x_{i}))x_{i} $$
我们不知道怎么取w,不如先随机地取一个值。然后根据公式进行迭代。先h(x)估算出了一个概率,和目标值相差y-h(x)。如果目标值y是1,则y-h(x)是正的,否则是负的。
当y是1时,
- 如果x是正的,(y-h(x))x就是正的,意思就是说w要加大一点。
- 如果x很大,h(x)很小,说明离目标较远偏差太大,就得多多地加大一点。
- 如果x很大,h(x)也很大,说明离目标很近,适当加一点
- 如果x很小,h(x)很大,说明离目标很近,小小地加一点。
- 如果x很小,h(x)很小,说明离目标很远,适当加一点。
- 如果x是负的,(y-h(x))x就是负的。意思是说w要变小一点。
同样道理,当y为0时,若x为正,(y-h(x))x为负,说明w应该变小。
回到银行放贷的例子上。训练时,
- 若模型给一个高收入的人低信用分,说明模型有错误。wx较低而x已经很高,所以,要加大w。
- 若模型给一个低收入的人高信用分,说明模型有错误。wx较高而x已经很低,所以,要减少w。
- 若模型给一个低收入的人低信用分或者高收入的人高信用分,说明模型正确,稍微调整即可。
好了,讲到这里x只是收入一个维度。我们把x变成两个维度,在收入之外,引入学历。在前面的所有描述中,两个维度之间是并行的,不相关的,所以,两个维度各算各的。这样我们很容易地可以引入多个维度。
总结一下,基本意思就是,我这个样本应该高你给我低,你应该加大权重。我这个样本应该低你给我高,你应该减少权重。很多个样本过来,每个人贡献一点调整信息,最后模型被调整到一个合理的位置。
逻辑回归与大脑的关系
大脑的基本单位是神经元。我们目前还不能完全理解大脑的运行机理,但是根据很多实验的到的结论来看,真实的大脑神经元和机器学习的神经元非常相似。这里我们卖个噱头,指的是和机器学习的神经元的关系。具体细节请参考sigmoid神经元。
也有研究表明ReLU效果更好,更接近真实的大脑结构。这里有篇文章比较了ReLU和Sigmoid,从美的角度,我更愿意Sigmoid。
以后的篇幅,我们再更多地介绍神经元。
顺带介绍一个公式编辑器:https://www.codecogs.com/latex/eqneditor.php