zoukankan      html  css  js  c++  java
  • logistic regression教程3

    在线性拟合的基础上,我们实现logistic regression。

    如前所述,样本集是 

    {x1,y1},{x2,y2},...,{xn,yn}[1]


    其中,xi=[1,xi,1,xi,2,xi,3,...,xi,k]T,且yi(0,1)。注意,这里对yi有值上的要求,必须如此,如果值不再这个区间,要以归一化的方式调整到这个区间。对于分类问题,则yi的取值或者是0,或者是1,也就是yi{0,1}

    当然,从严格的意义上说,logistic regression拟合后,yi的值只能无限地逼近0和1,而不能真正达到0和1,但在处理实际问题上,可以设定成形如 ifyi>0.5thenyi=1ifyi<=0.5thenyi=0解决。

    Logistic regression的拟合形式如下: 

    yi=f(zi)[2]
    zi=Wxi[3]


    其中,f(z)=11+ez[4],也就是Logistic函数。

    根据公式[2]和公式[3],则: 

    yi=f(Wxi)[4]

    那么,如果用公式[4]拟合xiyi的关系,需要求解W,使得在公式[1]上误差最小。对应的损失函数就是 

    Loss=12i=1n(yif(Wxi))2[5]

    跟前面的一样,我们用梯度下降法求解。 
    所以,要对公式[5]wj的一阶偏导,于是有 

    Losswj=i=1n(yif(Wxi))×(1)×f(Wxi)wj=i=1n(yif(Wxi))×(1)×f(zi)zi×ziwj[6]

    注意,问题来了,公式[6]的最后一步,实际上是将Wxi视为一个变量zi,分别求导。这一步是在高等数学有详细描述了,不解释。

    公式[6]中的f(zi)zi等价于f(z),因为只有一个自变量z。根据公式[4],可以求出

    f(z)=ez(ez+1)2[7]


    对公式[7]可以做一次变形,以方便求解: 
    根据公式[4],可以知道

    ez=f(z)1f(z)[8]


    将公式[8]代入到公式[7],就可以得到

    f(z)=f(z)×(1f(z))[9]


    也就是说,我们可以根据f(z)得到f(z),而且计算量很小。

    把公式[9]代入公式[6],就得到 

    Losswj=i=1n(yif(Wxi))×(1)×f(zi)zi×ziwj=i=1n(yif(Wxi))×(1)×f(zi)×(1f(zi))×ziwj=i=1n(yif(Wxi))×(1)×f(Wxi)×(1f(Wxi))×(Wxi)wj=i=1n(yif(Wxi))×(1)×f(Wxi)×(1f(Wxi))×(Wxi)wj=i=1n(yif(Wxi))×(1)×f(Wxi)×(1f(Wxi))×xi,j=i=1n(yif(Wxi))×f(Wxi)×(f(Wxi)1)×xi,j[10]


    于是公式[10]可以写成 

    Losswj=i=1n(yif(Wxi))f(Wxi)(f(Wxi)1)xi,j[11]


    那么,wj在梯度下降法的迭代公式就是 

    wj=wj+wj=wjLosswj[12]


    现在,我们开始做最麻烦的一步,将公式[11]进行矩阵化 
    令 

    Y=[y1,y2,...,yn][13]


    W=[w0,w1,w2,...,wk][14]


    X=⎛⎝⎜⎜⎜⎜11...1x1,1x2,1...xn,1x1,2x2,2...xn,2............x1,kx2,k...xn,k⎞⎠⎟⎟⎟⎟[15]


    V=⎛⎝⎜⎜⎜⎜f(Wx1)(f(Wx1)1)0...00f(Wx2)(f(Wx2)1)...0............00...f(Wxn)(f(Wxn)1)⎞⎠⎟⎟⎟⎟[16]


    L=[f(Wx1),f(Wx2),...,f(Wxn)][17]


    公式[16]略有一点复杂,它是对角矩阵。 
    根据上述设定,公式[11]的矩阵化形式就是 

    Losswj=(YL)V⎛⎝⎜⎜⎜⎜x1,jx2,j...xn,j⎞⎠⎟⎟⎟⎟[18]


    那么,对W而言,更新公式就是 

    W=W(YL)VX[19]


    到这里,logisitci regression的梯度下降法推导就结束了。下一篇我们用python实现求解过程。

  • 相关阅读:
    个推推出青少年网络游戏防沉迷解决方案,助力开发者构建完善的青少年保护系统!
    个推2022届校园招聘火热启动!数据岗、算法岗、研发岗,热门技术岗位等你来!
    iOS里的动态库和静态库
    idea中svn回退到指定版本
    稻花香项目接口文档
    Ubuntu系统记录
    获取当前系统名称、获取当前操作系统信息
    Temporary failure in name resolution
    零基础学python:错误与异常
    Python内置函数之输入输出函数
  • 原文地址:https://www.cnblogs.com/developer-ios/p/5014893.html
Copyright © 2011-2022 走看看