美文网首页
逻辑回归模型

逻辑回归模型

作者: 噗嗤噗哩噗通 | 来源:发表于2019-09-29 17:30 被阅读0次

    逻辑回归推导公式(最大似然方法推导):

    设计sigmoid函数 逻辑回归最大似然定义

    通过最大似然得到的。y的取值为0,1;则认为这是一个伯努力的分布,也称为两点的分布,则公式表示如下:


    image.png image.png

    上图少了一个log


    image.png

    逻辑回归与softmax回归的关系:
    可以认为 对于y|x;θ 逻辑回归是一个两点的分布,而 softmax是一个多项式的分布。利用广义线性模型可得到softmax的表示。

    逻辑回归推导公式(这是和神经网络类似的,利用成本函数推导):

    基本的概念:(x表示为向量,带上标^的y表示预测值,没有的为实际值)
    第一步:线性映射:z=w^Tx+b
    第二步:非线性映射:\hat y=\sigma (z), sigma公式为:\sigma (z)=\frac {1}{1+e^-z}
    第三步:定义损失函数:这个是人为定义的,感觉目的是为了梯度求导比较好计算

    定义代价函数.png
    构建代价函数.png

    L(y,\hat y) =-[ylog \hat y+(1-y)log(1- \hat y)]
    第四步:代价函数,所有样本的所有数据
    \begin{equation}\begin{split} L(w,b)&=\frac1m\sum_{r=1}^m L(y^{(i)},\hat y^{(i)} ) \\ & =-\frac1m\sum_{r=1}^m [y^{(i)}log \hat y^{(i)}+(1-y^{(i)})log(1- \hat y^{(i)})] \end{split}\end{equation}

    第五步:对sigma函数求导,在用链式法则,先对z求导,在对w求导:
    \begin{equation}\begin{split} dz&=\frac {e^-z}{(1+e^-z)^2} \\ & =\sigma (z)(1-\sigma (z)) \end{split}\end{equation}
    第六步:以w为例:

    \begin{equation}\begin{split} w_{j+1}&=w_j+\alpha(\frac {dL}{dw}) \\ &=w_j+\alpha(\frac {dL}{d\hat y}\frac {d\hat y}{dz}\frac {dz}{dw}) \\ & =w_j+\alpha((\frac {y}{\hat y} - \frac {1-y}{1-\hat y})\sigma (z)(1-\sigma (z))x)\\ & =w_j+\alpha((\frac {y}{\hat y} - \frac {1-y}{1-\hat y})\hat y(1-\hat y)x)\\ & =w_j+\alpha((y-\hat y)x) \end{split}\end{equation}

    最终的最优化求解为:
    \left \{ \begin{array}{c} w_{j+1}=w_j+\alpha((y-\hat y)x) \\ b_{j+1}=b_j+\alpha(y-\hat y) \end{array} \right.

    python实现

    1. numpy直接写的实现方式:

    参照的机器学习那本书,由于梯度的筛选中出现了时间复杂度较高的问题,于是做了一个随机优化,我理解为不是一个向量进去计算,而是按照随机顺序一个个把x_i输入,调整w和b的取值。
    python实现与随机梯度优化

    python实现2:防止删除文章

    2. sklearn实现方式

    • penalty参数:设置使用L1正则或者是L2正则。
    • solver参数:
      • liblinear方法:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数
      • lbfgs方法:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
      • newton-cg方法:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
      • sag方法:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候,SAG是一种线性收敛算法,这个速度远比SGD快
    • multi_class参数:ovr(one vs rest)和mvm(many vs many)在二元逻辑回归没有差别,但是在多分类中,ovr是选择的分类为正样本,其他类都会负样本。mvm是筛选m个类为正样本,m个类为负样本
    • class_weight参数:是各种类型的权重,‘banlanced’表示自动计算,而dict类型可以自己设定,或者不用
    • sample_weight参数:设置样本权重,用来解决样本不平衡问题。

    衍生:

    在研究sklearn的逻辑回归算法的时候,在这里只介绍了用定义的损失函数来做梯度下降计算,梯度的逻辑对应sklearn里面的sag,之后看要不要再总结一张最优化算法的页面。

    相关文章

      网友评论

          本文标题:逻辑回归模型

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