美文网首页数量遗传或生统
不是回归的逻辑回归算法

不是回归的逻辑回归算法

作者: 巴拉巴拉_9515 | 来源:发表于2019-08-08 20:12 被阅读20次

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

    线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类。所以逻辑回归就是将线性回归的(−∞,+∞)结果,通过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)最优参数获得

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

    • 首先确定下降最快的方向(偏导)[3](m为数据集规模/y的个数)

    • 设置每次下山的跨度(学习率)
      学习率\alpha

    • 更新参数
      为了和全文对应,避免引起误解,我们用n表示数据规模/y的数量,用m表示自变量的个数/权重的个数。
      \theta'_j = \theta_j-\alpha\frac{d}{d\theta_j}J(\theta) = \theta_j- \frac{\alpha}{n}\sum_{i=1}^n(h_{\theta}(x_i)-y_i)x_i^j

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

    模型训练[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

    相关文章

      网友评论

        本文标题:不是回归的逻辑回归算法

        本文链接:https://www.haomeiwen.com/subject/mtuadctx.html