• 分类问题经典算法 | 多分类问题 | Softmax回归:梯度下降


    【前景回顾】

    这里我们先来总结Logistic回归算法:

    模型函数 p = s i g m o i d ( w x + b ) p = sigmoid(wx+b) p=sigmoid(wx+b)

    函数解释:Logistic回归不仅可以解决线性分类问题,对于非线性分类问题也可以解决,即通过多项式扩展方式

    目标函数 l o s s = − y l n ( p ) − ( 1 − y ) l n ( 1 − p ) loss = -yln(p)-(1-y)ln(1-p) loss=yln(p)(1y)ln(1p)

    其中,对于参数
    { ω ′ = ω − α ∂ l o s s ∂ w b ′ = b − α ∂ l o s s ∂ b \left\{

    ω=ωαlosswb=bαlossb" role="presentation" style="position: relative;">ω=ωαlosswb=bαlossb
    \right. ω=ωαwlossb=bαbloss

    前面我们在文章中讨论了二分类问题,下面我们来讨论多分类问题

    一. 多分类问题解决策略

    对于有多个类别的样本,我们常采用的策略是:

    1. 一对一策略 OVO (One-vs-One)

    	假设我们现在有A、B、C三类
    		做法:
    			1. 取A和B,用二分类方法对其进行分类
    			    取A和C,用二分类方法对其进行分类
    				取B和C,用二分类方法对其进行分类
    			2. 进行上述操作后,得到三个分类器,即C1,C2,C3
    			3. 对于新进样本,根据投票或者概率最大者来确定最终的类别
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    构造分类器个数: k ( k − 1 ) / 2 ,其中 k 为类别个数 k(k-1)/2,其中k为类别个数 k(k1)/2,其中k为类别个数
    在这里插入图片描述

    2. 一对剩余策略 OVR(One-vs-Rest)

    	假设我们现在有A、B、C三类
    		做法:
    			1. 取A和B、C,用二分类方法对其进行分类
    			    取B和A、C,用二分类方法对其进行分类
    				取C和A、B,用二分类方法对其进行分类
    			2. 进行上述操作后,得到三个分类器,即C1,C2,C3
    			3. 对于新进样本,用得到的分类器一一进行判断,根据概率最大来确定最终的类别
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    二. Softmax回归算法

    对于上面提到的两种多分类策略,在对某个新数据预测时,都存在一个缺点:
        C个分类器预测得到的C个概率之和不等于1
        即:关于某个样本类别,在C个分类器下的预测值无相关性
    针对上面的问题,Softmax回归算法能很好解决这个问题


    假设我们采集到数据后,进行标注,得到数据集如下:

    x 1 ( i ) , x 2 ( i ) , . . . , x N ( i ) , y ( i ) x_{1}^{(i)}, x_{2}^{(i)}, ... , x_{N}^{(i)}, y^{(i)} x1(i),x2(i),...,xN(i),y(i)
    其中,数据集的A分类标记为 y ( i ) = 0 y^{(i)}=0 y(i)=0
          数据集的B分类标记为 y ( i ) = 1 y^{(i)}=1 y(i)=1
          数据集的C分类标记为 y ( i ) = 2 y^{(i)}=2 y(i)=2
          数据集的D分类标记为 y ( i ) = 3 y^{(i)}=3 y(i)=3

    对于共有C个类别的分类问题,我们可以采用上述OVR策略得到C个分类器,并用距离d来衡量某个样本属于某类的可能:
    d = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ N x N ,其中 d 的取值为 ( − ∞ , + ∞ ) d = \theta _{0}+ \theta _{1}x_{1}+\theta _{2}x_{2}+ ... +\theta _{N}x_{N},其中d的取值为(-∞,+∞) d=θ0+θ1x1+θ2x2+...+θNxN,其中d的取值为(,+)

    这里需要重点理解下d的具体含义:
    以三分类OVR策略为例子,就得到了三个分类器

    假设我们得到分类器C1:

    C1:区分A类和B、C类的决策边界

    假设我们用C1作为分类器:

    对新输入数据进行判定时,相当于对该样本点做C1分类器的垂线,即上述式子d

    请注意,这个d值判定的是该样本点属于A类的概率

    这一点与Logistic函数是类似的

    计算的 h θ ( x ) h_{\theta } (x) hθ(x)结果是以正样本为依据
    即所计算的样本属于 正样本/正类 的概率

    我们定义Softmax函数为
    S = e i ∑ e i S = \frac{e^{i} }{\sum e^{i} } S=eiei

    将d带入Softmax函数,即
    h θ ( x ) = S ( d ( θ ) ) = S ( θ 0 + θ 1 x 1 + θ 2 x 2 + . . . ) h_{\theta } (x) = S(d(\theta ))= S(\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2}+... ) hθ(x)=S(d(θ))=S(θ0+θ1x1+θ2x2+...)
    对于OVR策略下的多分类而言,我们得到x属于y时的概率为:
    P ( y ∣ x ; θ ) = h θ ( x ) y ( i ) P(y|x;\theta ) = h_{\theta } (x)^{y^{(i)} } P(yx;θ)=hθ(x)y(i)
    这样我们就可以得到似然函数
    L ( θ ) = ∏ i = 1 M h θ ( x ( i ) ) y ( i ) L(\theta)=\prod_{i=1}^{M} h_{\theta }(x^{(i)} )^{y^{(i)} } L(θ)=i=1Mhθ(x(i))y(i)
    接下来,我们对似然函数求对数,得到公式
    l ( θ ) = l n [ L ( θ ) ] = ∑ i = 1 M y ( i ) l n [ h θ ( x ( i ) ) ] l(\theta )=ln\left [ L(\theta)\right ]=\sum_{i=1}^{M}y^{(i)}ln[h_{\theta}(x^{(i)} )] l(θ)=ln[L(θ)]=i=1My(i)ln[hθ(x(i))]
    结合我们对Logistic回归函数的讲解,softmax回归的损失函数就可以定义为:
    J ( θ ) = − l ( θ ) = ∑ i = 1 M − y ( i ) l n [ h θ ( x ( i ) ) ] J(\theta)=-l(\theta)=\sum_{i=1}^{M} -y^{(i)}ln[h_{\theta}(x^{(i)} )] J(θ)=l(θ)=i=1My(i)ln[hθ(x(i))]
    下面,我们来求解梯度:

    在开始推导前,我们为了好描述,对参数做以下解释:

    若我们有三个分类器:

    C1:假定判定猫和其他类,d是关于 β \beta β的一套参数
    C2:假定判定狗和其他类,d是关于 α \alpha α的一套参数
    C3:假定判定鸟和其他类,d是关于 γ \gamma γ的一套参数

    假设想用分类器判断样本点是猫的概率(且样本点标签值为:猫)

    e z i e^{_z{i} } ezi: 样本点在每个分类器上的预测值,注意每个分类器相关参数不同

    ∑ k = 1 m e z k {\textstyle \sum_{k=1}^{m}} e^{z_{k} } k=1mezk:样本点在三个分类器上的预测总值

    对于二分类而言,样本类别非A即B
    对于多分类而言,样本类别有很多种选择

    但每种选择都包含了我们的目标类
    即分母总是A+B+C

    ∂ J ( θ ) ∂ θ j = − y ( i ) h θ ( x ) \frac{\partial J(\theta )}{\partial \theta _{j} }=-\frac{y^{(i)} }{h_{\theta }(x) } θjJ(θ)=hθ(x)y(i)
    这里为了好描述,我们将h关于 θ \theta θ的函数转换为h关于z的函数

    i = y i=y i=y

    ∂ h j ∂ z i = ∂ ( e z i ∑ k e z k ) ∂ z i \frac{\partial h_{j} }{\partial z_{i} }=\frac{\partial (\frac{e^{z_{i}}}{ {\textstyle \sum_{k}^{}e^{z_{k}}}})}{\partial z_{i} } zihj=zi(kezkezi)

         = e z i ∗ ∑ k e z k − e z i ∗ e z i ( ∑ k e z k ) 2 =\frac{e^{z_{i}}\ast{{\textstyle \sum_{k}^{}e^{z_{k}}}}- e^{z_{i}}\ast e^{z_{i}}}{({{\textstyle \sum_{k}^{}e^{z_{k}}}})^{2}} =(kezk)2ezikezkeziezi

         = e z i ∑ k e z k ∗ ∑ k e z k − e z i ∑ k e z k =\frac{e^{z_{i}}}{{ {\textstyle \sum_{k}^{}e^{z_{k}}}}} \ast \frac{{\textstyle \sum_{k}^{}e^{z_{k}}}-e^{z_{i}}}{{ {\textstyle \sum_{k}^{}e^{z_{k}}}}} =kezkezikezkkezkezi

         = e z i ∑ k e z k ∗ ( 1 − e z i ∑ k e z k ) =\frac{e^{z_{i}}}{{ {\textstyle \sum_{k}^{}e^{z_{k}}}}} \ast (1-\frac{e^{z_{i}}}{{{ {\textstyle \sum_{k}^{}e^{z_{k}}}}} } ) =kezkezi(1kezkezi)

         = h i ∗ ( 1 − h i ) =h_{i}\ast (1-h_{i}) =hi(1hi)

    i ≠ y i\ne y i=y

    ∂ h j ∂ z i = ∂ ( e z i ∑ k e z k ) ∂ z i \frac{\partial h_{j} }{\partial z_{i} }=\frac{\partial (\frac{e^{z_{i}}}{ {\textstyle \sum_{k}^{}e^{z_{k}}}})}{\partial z_{i} } zihj=zi(kezkezi)

         = 0 ∗ ∑ k e z k − e z j ∗ e z i ( ∑ k e z k ) 2 =\frac{0\ast { {\textstyle \sum_{k}^{}e^{z_{k}}}}-e^{z_{j} }\ast e^{z_{i} } }{({ {\textstyle \sum_{k}^{}e^{z_{k}}})}^{2} } =(kezk)20kezkezjezi

         = − e z j ∑ k e z k ∗ e z i ∑ k e z k =-\frac{e^{z_{j}}}{{ {\textstyle \sum_{k}^{}e^{z_{k}}}}}\ast \frac{e^{z_{i}}}{{ {\textstyle \sum_{k}^{}e^{z_{k}}}}} =kezkezjkezkezi

         = − h j h i =-h_{j}h_{i} =hjhi

    即,梯度值为:

    ∂ J ( θ ) ∂ θ j = ∑ i = j ∂ J j ∂ h j ∂ h j ∂ z i + ∑ i ≠ j ∂ J j ∂ h j ∂ h j ∂ z i \frac{\partial J(\theta )}{\partial \theta _{j} }=\sum_{i=j}\frac{\partial J_{j} }{\partial h_{j} }\frac{\partial h_{j} }{\partial z_{i} } +\sum_{i\ne j}\frac{\partial J_{j} }{\partial h_{j} }\frac{\partial h_{j} }{\partial z_{i} } θjJ(θ)=i=jhjJjzihj+i=jhjJjzihj

           = − y i h i ∗ h i ∗ ( 1 − h i ) + ∑ i ≠ j − y j h j ∗ ( − h j h i ) =-\frac{y_{i}}{h_{i} }\ast h_{i}\ast (1-h_{i}) +\sum_{i\ne j}-\frac{y_{j}}{h_{j} }\ast(-h_{j}h_{i}) =hiyihi(1hi)+i=jhjyj(hjhi)

           = h i ∑ j y j − y i =h_{i}\sum_{j}y_{j}-y_{i} =hijyjyi


    感谢阅读🌼
    如果喜欢这篇文章,记得点赞👍和转发🔄哦!
    有任何想法或问题,欢迎留言交流💬,我们下次见!
    本文相关代码存放位置
        【Logictic回归代码实现

    祝愉快🌟!


  • 相关阅读:
    string的部分题目
    3、后台数据库连接以及工具类编写 [木字楠博客]
    机器学习 l2正则化--岭回归
    day06DNS复习演示、IIS之WEB服务器、FTP服务器
    C++进制转换题
    02-uboot启动内核前到底做了哪些必要工作
    码蹄集部分题目(2024OJ赛13期;贪心集训+递归集训)
    飞书与企业微信的异同
    webpack5 css 处理(提取 Css 成单独文件)MiniCssExtractPlugin
    win10 pytorch安装说明
  • 原文地址:https://blog.csdn.net/weixin_49613115/article/details/136375129