数量遗传或生统

不是回归的逻辑回归算法

2019-08-08  本文已影响20人  巴拉巴拉_9515

一、线性回归与逻辑回归的关系

线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类。所以逻辑回归就是将线性回归的(−∞,+∞)结果,通过sigmoid函数映射到(0,1)之间[1]

二、线性回归到逻辑回归

(1)sigmoid函数

什么是sigmoid函数?如何将线性回归的(−∞,+∞)结果映射到(0,1)之间?
由下图sigmoid曲线图可知,值域在(0,1),其中z为线性回归预测值z=w_0x_0+w_1x_1+w_2x_2+...+w_mx_m

(2)逻辑回归

逻辑回归整体流程:

输入[x_0,x_1,x_2,...,x_m]
权重w组合乘积求和,为z=w_0x_0+w_1x_1+w_2x_2+...+w_mx_m;
z代入sigmoid函数结果映射到(0,1)范围;
通过梯度下降法获得最优参数[w'_0,w'_1,w'_2,...,w'_m]
(0,1)值域的预测值做分类处理,例如大于0.5,判断分类为1,小于0.5判断分类为0。

三、最优参数组合

如何获得最优的参数组合[w'_0,w'_1,w'_2,...,w'_m],是的模型的分类效果最好?

(1)线性回归损失函数

还记得在线性回归中我们定义损失函数J为预测值和实际值的均方误差。
J(\theta_0,\theta_1,...,\theta_m) = \frac{1}{2n}\sum_{i=1}^n(h_{\theta}(x^{(i)})-y^{(i)})^2


目标是达到最低点,也就是使得损失函数最小,此时的参数\theta就是最优参数,能够使算法预测误差最小,算法的准确性最高。

(2)逻辑回归损失函数

线性回归的损失函数为平方损失函数,如果将其用于逻辑回归的损失函数,则其数学特性不好,有很多局部极小值,难以用梯度下降法求最优。

因此尝试使用极大似然估计的方法推导最优参数[3]
L(\theta)=\prod_{i=1}^{n}(h_{\theta}(x^{(i)})^{y^{(i)}} (1-h_{\theta}(x^{(i)}))^{1-y^{(i)}})
一个连乘的函数显然是不好计算的,我们可以通过两边同事取log的形式让其变成连加
logL(\theta)=\sum_{i=1}^{n}(y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})(1-logh_{\theta}(x^{(i)})))
这个函数越大,证明我们得到的W就越好。因为在函数最优化的时候习惯让一个函数越小越好,所以我们在前边加一个负号。
得到逻辑回归的损失函数J
J(\theta)=\sum_{i=1}^{n}(-y^{(i)}logh_{\theta}(x^{(i)})-(1-y^{(i)})(1-logh_{\theta}(x^{(i)})))
逻辑回归是分类算法, y=0或者1
其中Cost(h_{\theta}(x),y) = \left\{ \begin{aligned} -log(h_{\theta}(x)) && y=1 \\ -log(1-h_{\theta}(x)) && y=0 \\ \end{aligned} \right.
cost函数曲线分布如下图所示,可见此时的损失函数J(\theta)是理想的效果。

(3)最优参数获得

现以确定逻辑回归的损失函数,使用梯度下降法求解最优参数。

四、逻辑回归算法整体流程

模型训练[4]

=====》输入
【数据源】[X_1,X_2,...X_n],每个X_i包含m个自变量[x_{i1},x_{i2},...,x_{im}],对应的分类结果[y_1,y_2,...,y_n]
【参数设置1】设置一组W的权重初始值[w_0,w_1,w_2,...,w_m]
【参数设置2】学习率\alpha
【精确度设置】accuracy = 0.00001
【划分阈值】0.5
=====》操作
【操作1】基于X预测yPre
z_i=w_{i0}x_{i0}+w_{i1}x_{i1}+w_{i2}x_{i2}+...+w_{im}x_{im}z_i代入sigmoid函数结果映射到(0,1)范围,整个数据集计算后得到yPre矩阵[y'_1,y'_2,...,y'_n]
【操作2】基于yPre矩阵和实际值y计算损失值
J(\theta)=\sum_{i=1}^{n}(-y_ilogy'_i-(1-y_i)(1-logy'_i))
计算的结果是一个数值oldJ。
【操作3】更新权重w_0,w_1,w_2,...,w_m
w'_1 = w_1- \frac{\alpha}{n}\sum_{i=1}^n(y'_i-y_i)x_{i1}
...
w'_m = w_m- \frac{\alpha}{n}\sum_{i=1}^n(y'_i-y_i)x_{im}
【操作4】计算新的损失值
基于更新后的权重w_0,w_1,w_2,...,w_m进行【操作1】【操作2】,获得新的损失值newJ
【操作5】如果新旧损失值没有很大的差别则退出循环,否则继续【操作1-5】直到newJ == oldJ或|newJ - oldJ|<accuracy才退出循环。
=====》输出
此时的权重w_0,w_1,w_2,...,w_m为最优参数,此时的逻辑回归算法为g(z) = \frac{1}{1+e^{-z}}。(其中z = w_0x_0+w_1x_1+...+w_mx_m
如果g(z) >=0.5则判断分类为1,否则判断分类为0
=====》分类预测
当输入新的X=[x_1,...,x_m],代入训练好的逻辑回归模型,可获得预测的分类结果。

五、逻辑回归的重要性

机器学习中,并不是越复杂越好,因为越复杂,解释越难。由于逻辑回归算法应用广,效果好,算法简单。所以:

如果想做分类,
第一步先用逻辑回归试验,看效果。
然后再使用其他算法,如果没有明显优于逻辑回归,则继续使用逻辑回归。

六、参考资料

[1] 线性回归和逻辑回归:https://blog.csdn.net/jiaoyangwm/article/details/81139362
[2] What is the relation between Logistic Regression and Neural Networks and when to use which:https://sebastianraschka.com/faq/docs/logisticregr-neuralnet.html
[3] 逻辑回归:https://blog.csdn.net/weixin_39445556/article/details/83930186
[4]逻辑回归的python实现:https://blog.csdn.net/qq_37667364/article/details/81532339

上一篇下一篇

猜你喜欢

热点阅读