本系列前四篇是随手涂鸦,只为讲清问题,有口语化,且有少数符号误写,以及重复絮叨,且不打算修改:) 第5篇提供了一个严谨的学术语言的完整pdf文档,敬请下载!
Logistic Regession是什么
Logistic Regression是线性回归,但最终是用作分类器:它从样本集中学习拟合参数,将目标值拟合到[0,1]之间,然后对目标值进行离散化,实现分类。
为什么叫Logistic呢?因为它使用了Logisitic函数,形如:
这个函数有一些很有趣的性质,后面会谈到。
Logistic regression有一定的复杂度。对新人来说,最好有一个完整的推导指南,然后反复推导N遍(N>=5),直至能独立推导,再用python或者java实现这个推导,然后用这个实现解决一个实际应用,这样差不多算是掌握Logistic regression了。上述过程缺一不可,而且是成本最小的学习方案。
Logistic regression很重要,据说google的Ads广告使用的预测算法就是一个大Logistic regression模型。
Logistic regression涉及机器学习的多个重要概念,样本集,特征,向量,损失函数,最优化方法,梯度下降。如果对logistic regression能做到庖丁屠牛的程度,对未来进行模式识别和机器学习有事半功倍的收益。
我们现从一个最简单的问题开始,然后逐步增加功能,最终实现logistic regression。
先从一个最简单的问题开始
假如有一组样本,形如
xi 的值决定 yi 的值,也就是说 xi 是自变量, yi 是因变量,每个 xi 对应一个 yi 。从脚标可以看出,这组样本一共有 n 个。
xi 是一个向量,也就是说, xi 里有多个元素,也就是可以表示为
实际上 xi 也可以写成
xi=[xi,1,xi,2,...,xi,j,...xi,k] ,如果这样的话,后面的 W 和公式 [6] 就要做一点改动。如果推导过程很熟悉,可以将 W , xi , X , yi , Y 等根据需求随意改变,不作限定。
我们拟合 xi 和 yi 的关系,有了拟合,就可以根据 xi 计算 yi 。最简单的拟合方式是线性拟合,也就是形如:
w0 看起来不够和谐,跟其他元素不太一样,对 xi 做一点修改可以解决这个问题,将所有的 xi 重新表示成
那么,我们就得到:
这个公式的好处是,我们可以用向量方式表示了:
也就是说,
注意,此时的 xi 不再是 k 维了,而是 k+1 维,同样 W 也是 k+1 维,以数学形式表示为 xi∈R(k+1)×1 , W∈R1×(k+1) ,后面我们一直使用这种表示方式。
如果我们在公式 [1] 的样本集上做拟合,就要是公式 [6] 在公式 [1] 上误差最小。通常选择的误差形式是平方和误差,因为它求导方便,做梯度优化的时候计算便捷。误差形式如下
公式 [7] 是二次方程,有最小值,当它取最小值的时候的 W 就是最优拟合参数。
求解优化问题
公式 [7] 的求解不难,它有精确解,但当样本量很大的时候,精确解的求解是有问题的,比如矩阵是奇异阵不能求逆。所以通常会使用梯度下降法求解。
梯度下降法的方式是,先随机给 W 赋值,然后沿着公式 [7] 一阶偏导的反方向计算下降量值,多次重复,最终会让公式 [7] 收敛到一个极小值。那么,这个更新公式就是:
公式 [8] 有些复杂,用更简单的方式,可以写成如下方式:
现在,我们用最原始的方式求解 ∂Loss∂wj 。
注意我们要把公式 [10] 改写成矩阵形式,因为矩阵计算更有效率,方便实现。
将 yi 写成矩阵形式,令
将 xi 写成矩阵形式,令
显然, X∈Rn×(k+1) 。
那么,公式 [10] 最后一个等式中的 ∑ni=1(yi×xi,j) 就可以写成
而 ∑ni=1Wxixi,j 可以写成
所以,公式 [10] 最终可以表示成
注意,现在有一个很有意思的地方, (Y−WXT) 是拟合误差,在更新 W 的过程中,每轮会进行一次计算。
根据公式 [15] ,对 W 而言,我们有了一个更为整体的计算方式:
所以,以梯度下降法计算最优 W 的更新公式是:
下一篇我们用python实现公式[17]