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

发布于:2024-03-02 ⋅ 阅读:(72) ⋅ 点赞:(0)

【前景回顾】

这里我们先来总结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\{\begin{matrix}{\omega}'= \omega-\alpha \frac{\partial loss}{\partial w} \\\\{b}'= b-\alpha \frac{\partial loss}{\partial b} \end{matrix}\right. ω=ωαwlossb=bαbloss

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

一. 多分类问题解决策略

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

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

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

构造分类器个数: 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. 对于新进样本,用得到的分类器一一进行判断,根据概率最大来确定最终的类别

在这里插入图片描述

二. 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回归代码实现

祝愉快🌟!


本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到