Logistic Regression--机器学习

Logistic Regression(简称LR模型)是比较经典的分类方法,虽然名字中有回归两个字,但主要是用来解决分类问题的判别概率问题。话不多说,直入正题。

LR模型的常规步骤:

1.构造预测函数;

2.构造损失函数;

3.损失函数最小,并求得参数《Logistic Regression--机器学习》

4.编程。

1. 构造预测函数

我们知道,在处理线性模型时,函数方程为 

《Logistic Regression--机器学习》 线性方程

在处理二分类问题时,我们希望能够将上述函数的值映射到(0,1)中,这时我们需要一个阶跃函数:sigmoid函数。

函数表达式:

《Logistic Regression--机器学习》 sigmoid函数
《Logistic Regression--机器学习》 sigmoid函数图像

观察函数图像,我们可以知道,该函数值域为(0,1)。在处理二分类问题时,我们可以假设当函数值大于等于0.5时,该类别属于1类;小于0.5时,该类别属于0类。既然知道了预测函数,以及怎么处理预测值,下一步开始构造损失函数吧。

2. 构造损失函数

sigmoid函数还有一重特殊的含义,那就是它本身表示的是该函数取1时的值,因此表示1,0时的概率分别为:

《Logistic Regression--机器学习》 1/0函数值

LR模型,有一个特点,我们用1时的概率值,除以0时的概率值,可以得到《Logistic Regression--机器学习》。我们把这个叫做一个事情的几率,指一个事情发生与不发生的概率比值。

有了1,0时的概率值,我们可以用来表示一个0,1问题的计算概率综合值了。

《Logistic Regression--机器学习》 概率综合值

这个公式,可以理解为,当y取1时,概率值为公式的前半部分;当y取0时,概率值为公式后半部分。一个分类问题,我们可以理解为M重0,1问题。样本概率最大时,我们可以得到最好的分类模型。那怎么求这个M重问题的最大概率P呢?在大学上概率论时,对于这种问题,我们一般用最大似然函数来求极值。首先,构造似然函数,然后变形为对数似然函数形式,然后求导,求极值点。

《Logistic Regression--机器学习》 似然函数
《Logistic Regression--机器学习》 对数似然函数

当时在实际分类问题中,对数似然函数是无法通过求导获取解析解的。通常我们构造损失函数,通过梯度下降来使损失函数最小来构造分类器,以及获取变量的值。梯度下降是用来求函数最小值的,故我们在似然函数前加负号来达到我们的目的。通常我们在实际操作时,还会对损失函数求平均。此时,损失函数为

《Logistic Regression--机器学习》 损失函数

3. 损失函数最小,并求得参数《Logistic Regression--机器学习》

使用梯度下降法来求解。梯度下降法的求解过程为

《Logistic Regression--机器学习》 梯度下降

梯度下降法的原理可以参考:https://zhuanlan.zhihu.com/p/52003491。为了让梯度下降进行下去,下面需要通过损失函数对变量《Logistic Regression--机器学习》求导。

《Logistic Regression--机器学习》 求导

举两个例子,来说明一下梯度下降求解的过程。

1.单标量:y(x)=x^2;对x求导为2x。假设起点为x0=1,学习步长a = 0.4,那么

x1=x0 – a*(2*x0) = 1-0.4*2 = 0.2

x2 = x1 – a*(2*x1) = 0.2 – 0.4*0.4 = 0.04

2.多变量:y(x) = x1^2 + x2^2; 对x求导为<2*x1,2*x2>,此时表示一个向量。假设X0 = (1,3),a=0.1,那么,

X1=(1,3) – 0.1*(2,6) = (0.8,2.4)

X2 = (0.8,2.4) – 0.1*(1.6,4.8) = (0.64,1.92)

现在我们东风都不欠了,我们可以开始LR模型的编程了。

4. 编程

对于机器学习模型,我个人的看法最好是能够自己把代码写一遍。刚开始,没头绪的时候,可以看看别人的代码,理解后,自己再写,最好能够采用矢量化编程的方式。我实在不知道怎么把代码复制进来,格式还跟编译器里面的一样。写到这里我查了一下,需要把富文本改成MArkdown,还只对新建文本生效,好烦,这次还是截图吧,以后的文章通通使用markdown的。

首先加载数据,在这里,我们让x0=1,可以说将函数的常数项b变成了变量《Logistic Regression--机器学习》《Logistic Regression--机器学习》了。

《Logistic Regression--机器学习》 加载数据

构建预测函数:

《Logistic Regression--机器学习》 预测函数

梯度下降迭代求《Logistic Regression--机器学习》

《Logistic Regression--机器学习》 梯度下降

我设置的迭代20000次,学习率为0.001,到最后极值已经很小且下降已经非常不明显了,我们可以认为模型已经达到比较好的收敛效果。由于我比较懒,没有造测试数据,进行测试,朋友们就将就一下吧。

《Logistic Regression--机器学习》 训练
《Logistic Regression--机器学习》 极值与变量值

逻辑回归其实是一个浅层的神经网络,我们不妨用tensorflow来实现一下,展示一下逼格。我在看深度学习交叉熵部分时,上面有句话这么说,交叉熵一般用在分类问题上,表达的意思为预测输入样本属于某一类的概率。其中Y代表真实值,layer_1表示预测值。下面的代码损失函数我用的就是交叉熵。

《Logistic Regression--机器学习》 tensorflow实现LR

好了,以上就是关于LR模型的介绍,以及有关LR模型的编程。

本文Github:https://github.com/NLPxiaoxu/Easy_Machine-Learning

参考:

https://blog.csdn.net/qq_38923076/article/details/82925183

https://segmentfault.com/a/1190000009954640

李航 《统计学习方法》

李金洪等 《深度学习之TensorFlow入门、原理与进阶实战》

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注