学习笔记1:Logistic回归分类器
Logistic的算法实现非常简单,但它背后的逻辑挺复杂的。前天学完很快又忘了,只记得算法怎么写,推导过程怎么都想不起来了,十分懊恼,所以决定自己动手写一遍推导过程,虽然花了将近五个小时,但感觉记得更牢了一些。 所以说,好记性真的不如烂笔头啊朋友们~~一定要勤记笔记,因为你会忘记,你以为你会记得,但你就是会忘记。尤其年纪大了,学新知识似乎更费劲了,我要更加努力,直到让努力化解了努力的痕迹,知识才会真正进入我的身体。 1. Logistic分类器的适用范围: ※ y必须是二分类变数,比如“是否为垃圾邮件”、“是否为体育新闻”、‘病患是否得了流感’等。 2. 推导步骤: 1)建模:确定x和y之间的关系 2)推导损失函数 3)模型优化:找到最佳拟合的线性回归系数,也就是最大化似然Maximum Likelihood和最小化损失Minimum Loss的过程,最大化似然和最小化损失是一体两面。 3. Logistic模型:简单来说,Logistic是由一个线性模型+一个阈值转换函数组成的。

它的有趣之处在于,它不是直接假设x和P(y=1)之间的关系,而是设计了一个过渡变数z,中介x和P(y=1)的关系,和x线性相关的是z,而不是P(y),然后再使用Sigmoid函数把z投射到一个[0,1]的范围中,投射得到的就是概率P(y=1)。 阈值转换:Sigmoid函数的分布:

Sigmoid函数分布特征: 1) 介于[0,1]之间,可以直接将计算得到的因变量视作类别1的概率。 2) 如果Sigmoid函数的自变项z足够大的话,横坐标会被拉长,Sigmoid函数看起来会非常像一个阶跃函数。 3) 尽管这个函数是单调上升,但它不是匀速上升的,在自变量z很小的时候,它的上升速度缓慢(导数很小),z=0时上升速度最大,z>0以后上升速度放缓。(Sigmoid函数长得很像常态分布的概率累积函数) 光看公式有点太抽象了,我们还是要回到它的使用脉络里,去理解Sigmoid函数的物理意义吧。 Sigmoid函数最初被用于生态学模型中,用来解释一个生态系统中某种生物数量的变化。比如对于【地球人口】,我们有两个基本的认知:①人口基数越大,人口增长率越快,②但人口数不会无止境地增长,当外部资源与环境不变时,地球可容纳的人口是有限的,当迈过某个门槛后,人口增长率会开始放缓,也就是说人口增长率不仅和人口基数有关,也和系统中的空位vaccancy有关。Sigmoid函数正好可以模拟这个情况。 而在新闻文本分类的情况下,我们可以理解为,①如果“体育类新闻”的特徵词汇(比如运动员、奥运会、跑道等)出现次数越多,判断为类别A的概率也越大,②但新闻文本长度有限,特徵词汇出现次数超过某个门槛后,概率上升空间也不多,比如新闻中如果提到6次奥运会,就有九成把握是体育类新闻,九成!很难比这个概率更高了好吗,所以之后“奥运会”的出现次数每增加一次,概率上升的速度会越来越慢...只有一成的上升空间了,要珍惜,慢慢来.... 了解了Sigmoid的特征以及使用情况以后,我们就可以知道为什么我们的分类模型需要拆分成两步骤来执行:一来不用特别限制线性模型因变量的大小,二来也更切合现实情况,概率上升速度是先慢后快再慢。 4. 损失函数Cost Function: 如果一则娱乐新闻被判断有80%可能性是体育新闻,就说明预测出现了80%的错误。我们可以用【对数损失函数】来测量「预测的错误程度」:

也可以表达为:

当y=1时,正确预测的概率是P(y=1),则P(y=1)越大,预测越准确,损失函数越小。 *注:损失函数取负就是似然函数。 *注:用log损失函数,而非平方损失函数,是因为sigmoid的平方损失函数是non-convex非凸函数,有很多个局部最小值,用梯度下降法递归时,容易收敛于不好的答案:

5. 模型优化: 模型优化,是一个变换回归系数w,来达到最小化损失函数的过程。我们可以使用梯度下降法(Gradient Descend)来找到回归系数w的局部最佳解。 梯度,和函数切线很相似,是一个指向函数值上升最快的方向,梯度的长度为导数大小,代表着函数值上升的速度。而梯度取负,表示的就是函数值下降最快的方向。在梯度下降法中,我们希望找到损失函数下降最快的方向,也就是损失函数的梯度取负的方向,而下降的速度,也就是收敛速度,我们可以定一个够小的常数,比如0.001,也可以根据迭代次数,动态设置一个参数,比如0.001+1/i(i为迭代次数,迭代越多,步长越小,收敛越慢)。 具体推导步骤: 1) 计算梯度: 第一种方法:参考这篇文章:

很精彩! 最值得学习的地方是:P(z)导数=P(Z)(1-P(z)),用原函数代表导数,而不是用z去表达P(z)的导数,这样可以抵消前边的导数项,其实这并非是神来之笔,这个求导形式的出处正是前面提到的生态学模型,即P的增长率和P正相关、又和空位数1-P正相关,是先有了导数形式,然后求积分才制造出Sigmoid函数,而不是相反(可能跟逻辑式回归的伯努利分布假设[线性回归是高斯分布假设]也有关,待议)。 第二种方法,老老实实推导,简单粗暴、土耕火种:

(事实上logit regression的log损失函数的求导结果和linear regression的OLS求导结果一样,都是(y'-y)*x) 2) 梯度下降法:已知-▽E(w)是损失函数下降最快的方向,那么我们就按照这个方向对w进行改进,w=w-α▽E(w),α为前面提到的步长,设为常数0.001:

假设我们收集了n个个案,每个个案有m个自变项(X0,X1,X2,...,Xm),则X是一个n x m的矩阵,而y是n x 1的标签列,所以上面这个公式可以转换成以下矩阵表示,其中Xt为X的转置:

*梯度上升法:推导步骤几乎和梯度下降法一致,只不过梯度上升是沿着梯度方向寻找最大值,而梯度下降则是对梯度取负号,往梯度下降最快的方向(即上升的反方向)走,用于寻找最小值。在模型优化时,可以使用梯度上升法求似然函数的最大值,也可以用梯度下降法求损失函数的最小值。 最后贴一张我训练得到的成果图,五个错误哈哈哈哈哈!!开心!!

---------------------------------------- Index: 学习笔记1:Logistic回归分类器 学习笔记2:Bayes和Logistic实作比较 学习笔记3:Hierarchical Dirichlet Process vs Latent Dirichlet Allocation 学习笔记4:Linear Regression, Poisson Regression and Negative Binomial Regression 学习笔记5:又谈sigmoid 学习笔记6:神经网络-梯度下降-反向传播