学习笔记——机器学习–多项式分布及Softmax回归模型推导[通俗易懂]

学习笔记——机器学习–多项式分布及Softmax回归模型推导[通俗易懂]在一个多分类问题,预测变量yyy可以取kkk个离散值中的任何一个,即y∈{1,2,⋯,k}y∈{1,2,⋯,k}y\in\{1,2,\cdots,k\}。例如:在一个邮件分类系统将邮件分为私人邮件,工作邮件和垃圾邮件。由于yyy仍然是一个离散值,这种多分类问题,二分类模型在这里不太适用。多分类问题符合多项分布。有许多算法可用于解决多分类问题,像决策树、朴素贝叶斯等。本文主要讲解多分类算…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

  在一个多分类问题,预测变量 y  y 可以取
k 


k

个离散值中的任何一个,即 y{
1,2,,k}
 
y ∈ { 1 , 2 , ⋯ , k }

例如:在一个邮件分类系统将邮件分为私人邮件,工作邮件和垃圾邮件。由于 y  y 仍然是一个离散值,这种多分类问题,二分类模型在这里不太适用。

  多分类问题符合多项分布。有许多算法可用于解决多分类问题,像决策树、朴素贝叶斯等。本文主要讲解多分类算法中的Softmax回归(Softmax Regression)

推导思路为:首先证明多项分布属于指数分布族,这样就可以使用广义线性模型来拟合这个多项分布,由广义线性模型推导出的目标函数
h θ (x) 





h




θ





(


x


)

即为Softmax回归的分类模型。

多项式分布属于指数分布族的推导

  下面将根据多项式分布建模。考虑样本共有 k  k 类,每一类的概率分别为
ϕ 1 ,,ϕ k  





ϕ




1





,





,





ϕ




k




,由于  i=1 k ϕ i =1  ∑ i = 1 k ϕ i = 1 ,所以通常我们只需要 k1  k − 1 个参数即 ϕ 1 ,,ϕ k1   ϕ 1 , ⋯ , ϕ k − 1
 P(y=i;ϕ)=ϕ i   P(y=k;ϕ)=1 i=1 k1 ϕ i   (397)  (397) P ( y = i ; ϕ ) = ϕ i   P ( y = k ; ϕ ) = 1 − ∑ i = 1 k − 1 ϕ i  
为了推导方便,引入表达式:
T(1)=⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ 1000 ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ , T(2)=⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ 0100 ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ , , T(k1)=⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ 0001 ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ,  T(k)=⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ 0000 ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥   T ( 1 ) = [ 1 0 0 ⋮ 0 ] ,   T ( 2 ) = [ 0 1 0 ⋮ 0 ] ,   ⋯ ,   T ( k − 1 ) = [ 0 0 0 ⋮ 1 ] ,     T ( k ) = [ 0 0 0 ⋮ 0 ]

  上面 T(y)  T ( y ) k1  k − 1 维列向量,其中 y=1, 2, , k  y = 1 ,   2 ,   ⋯ ,   k T(y) i   T ( y ) i 表示向量 T(y)  T ( y ) 的第 i  i 个元素。

  还要引入表达式
1{} 


1


{





}

,如果大括号里面为真,则真个表达式就为1,否则为0。

1{
 ture}=1  ;  1{
 false }=0
 
1 {   t u r e } = 1     ;     1 {   f a l s e   } = 0



例如:1{2=3} = 0和1{3=3} = 1.

则上面的

k  k
个向量就可以表示为:



T(y) i =1{ y=i } 


T





(


y


)




i





=


1


{


 


y


=


i


 


}



因为

y  y
只能属于某一个类别,于是


T(y) 


T


(


y


)


中只能有一个元素为1其他元素都为0,可以求出

k1  k − 1
个元素的期望:


E[T(y) i ]= y=1 k T(y) i ϕ i = y=1 k 1(y=i)ϕ i =ϕ i   E [ T ( y ) i ] = ∑ y = 1 k T ( y ) i ϕ i = ∑ y = 1 k 1 ( y = i ) ϕ i = ϕ i



即:


E[T(y) i ]=P(y=i)=ϕ i   E [ T ( y ) i ] = P ( y = i ) = ϕ i



多项式分布表达式转为指数分布族表达式推导过程如下:


 P(y;ϕ)=ϕ 1{
y=1}
 
1 
ϕ 1{
y=2}
 
2 
ϕ 1{
y=k}
 
k 
           =ϕ T(y) 1  1 ϕ T(y) 2  2 ϕ T(y) k1  k1 ϕ T(y) k  k            =ϕ T(y) 1  1 ϕ T(y) 2  2 ϕ T(y) k1  k1 ϕ 1 i=1 k1 T(y) i  k            =exp(T(y) 1 logϕ 1 ++(1 i=1 k1 T(y) i )logϕ k )           =exp(T(y) 1 logϕ 1 ϕ k  +T(y) 2 logϕ 2 ϕ k  ++T(y) k1 logϕ k1 ϕ k  +logϕ k )            =b(y)exp(η T T(y)a(η))
 
(398)(399)(400)(401)(402)(403)
 
(398) P ( y ; ϕ ) = ϕ 1 1 { y = 1 } ϕ 2 1 { y = 2 } ⋯ ϕ k 1 { y = k } (399)                       = ϕ 1 T ( y ) 1 ϕ 2 T ( y ) 2 ⋯ ϕ k − 1 T ( y ) k − 1 ⋅ ϕ k T ( y ) k (400)                       = ϕ 1 T ( y ) 1 ϕ 2 T ( y ) 2 ⋯ ϕ k − 1 T ( y ) k − 1 ⋅ ϕ k 1 − ∑ i = 1 k − 1 T ( y ) i (401)                       = exp ⁡ ( T ( y ) 1 log ⁡ ϕ 1 + ⋯ + ( 1 − ∑ i = 1 k − 1 T ( y ) i ) log ⁡ ϕ k ) (402)                       = exp ⁡ ( T ( y ) 1 log ⁡ ϕ 1 ϕ k + T ( y ) 2 log ⁡ ϕ 2 ϕ k + ⋯ + T ( y ) k − 1 log ⁡ ϕ k − 1 ϕ k + log ⁡ ϕ k ) (403)                         = b ( y ) exp ⁡ ( η T T ( y ) − a ( η ) )



其中


η=⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ logϕ 1 ϕ k  logϕ 2 ϕ k  logϕ k1 ϕ k   ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ R k1 ,  a(η)=log(ϕ k ),  b(y)=1  η = [ log ⁡ ϕ 1 ϕ k log ⁡ ϕ 2 ϕ k ⋮ log ⁡ ϕ k − 1 ϕ k ] ∈ R k − 1 ,     a ( η ) = − log ⁡ ( ϕ k ) ,     b ( y ) = 1



  多项分布可以表示为指数分布的格式,所以它属于指数分布族,那么就可以用广义线性模型来拟合这个多项式分布模型。

Softmax函数(Softmax Function)

  在使用广义线性模型拟合这个多项式分布模型之前,需要先推导一个函数,这个函数在广义线性模型的目标函数中会用到。这个函数称为Softmax函数(Softmax Function)。
η  η 表达式可得:

η i =logϕ i ϕ k    η i = log ⁡ ϕ i ϕ k



这是

η i   η i
关于

ϕ i   ϕ i
的表达式,把它转化为

ϕ i   ϕ i
关于

η i   η i
的表达式过程为:


e η i  =ϕ i ϕ k      ϕ k e η i  =ϕ i    ϕ k  i=1 k e η i  =  i=1 k ϕ i =1  e η i = ϕ i ϕ k     ⇒     ϕ k e η i = ϕ i     ⇒   ϕ k ∑ i = 1 k e η i =   ∑ i = 1 k ϕ i = 1



所以


ϕ k =1 i=1 k e η i     ϕ k = 1 ∑ i = 1 k e η i



代入上面式子,所以


ϕ i =e η i   j=1 k e η j     ϕ i = e η i ∑ j = 1 k e η j



此函数称为
Softmax函数(Softmax Function)

使用广义线性构建模型

  根据广义线性模型的假设3:

η i =θ T i x  (i=1, ,k1)  η i = θ i T x     ( i = 1 ,   … , k − 1 )



由假设2可得


 h θ (x)=E[T(y)|x;θ]=E⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ 1{
y=1}
1{
y=2}
1{
y=k1}
 
 
|x;θ 
⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ 
          =⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ϕ 1 ϕ 2 ϕ k1  ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥  =⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ exp(θ T 1 x) j=1 k exp(θ T j x) exp(θ T 2 x) j=1 k exp(θ T j x) exp(θ T k1 x) j=1 k exp(θ T j x)  ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ 
 
(480)(481)
 
(480) h θ ( x ) = E [ T ( y ) | x ; θ ] = E [ 1 { y = 1 } 1 { y = 2 } ⋮ 1 { y = k − 1 } | x ; θ ] (481)                     = [ ϕ 1 ϕ 2 ⋮ ϕ k − 1 ]   = [ exp ⁡ ( θ 1 T x ) ∑ j = 1 k exp ⁡ ( θ j T x ) exp ⁡ ( θ 2 T x ) ∑ j = 1 k exp ⁡ ( θ j T x ) ⋮ exp ⁡ ( θ k − 1 T x ) ∑ j = 1 k exp ⁡ ( θ j T x ) ]



就是输出了

x{
1,2,,k1}
 
x ∈ { 1 , 2 , ⋯ , k − 1 }

中每一类的概率,当然属于第

k  k
类的概率就是:


1 i=1 k1 ϕ i  


1










i


=


1




k





1








ϕ




i






.

  下面开始拟合参数,同样使用最大化参数θ的对数似然函数:


 l(θ)= i=1 m logP(y (i) ∣ ∣ x (i) ;θ)       = i=1 m log l=1 k e θ T l x (i)   j=1 k e θ T j x (i)    (482)(483)  (482) l ( θ ) = ∑ i = 1 m log ⁡ P ( y ( i ) | x ( i ) ; θ ) (483)               = ∑ i = 1 m log ⁡ ∏ l = 1 k e θ l T x ( i ) ∑ j = 1 k e θ j T x ( i )



接下来使用梯度下降和牛顿法均可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182893.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql数据库忘记密码时如何修改(本地)「建议收藏」

    mysql数据库忘记密码时如何修改(本地)「建议收藏」mysql数据库忘记密码时如何修改(本地)

  • mysql connector 如何使用_MySQL Connector/Net 的简略使用

    mysql connector 如何使用_MySQL Connector/Net 的简略使用mysqlConnector/Net的简单使用首先,新建工程(WindowsApplication)然后,增加引用(MySql.Data)注意:根据使用.net版本的不同而选择MySql.Data版本之后,放置控件3个TextBox,2个ComboBox,1个DataGridView等等密码框设置下拉框设置数据格设置连接按钮代码:stringconnStr=string.Format…

  • 联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1「建议收藏」

    联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1「建议收藏」在BIOS中有相应调整开关,开机时进入BIOSCONFIGKeyboard/MouseChangeto"f1-f12keys"选项设置为Legacy。完成后保存重启就

  • Arduino 硬件编程语言基础学习入门

    Arduino 硬件编程语言基础学习入门1、Arduino程序必要的setup()和loop()voidsetup(){}voidloop(){}setup()函数中的代码只会被运行一次,通常用来做一些初始化工作;loop()中的代码会被无限次地重复运行,此函数为程序的主体部分。2、程序中的值2.1变量和常量常量是一个字面量,只可以表示一个特定的量。2.2变量类型…

  • Linux中查看redis版本

    Linux中查看redis版本快半年没有在Linux中使用redis了,命令有些生疏了,网上很多博文也不对,不知道博主是否直接复制的来的。以下为重新整理资料,便于忘记时候复习首先进入cd/usr/local目录不用说了我把redis安装到了redis文件夹中了,在bin目录下找到redis-server使用./redis-server–version查看版本信息[red@RedFaceloc…

  • c语言中putchar的用法举例_c语言getchar和gets

    c语言中putchar的用法举例_c语言getchar和gets认识getchar是以行为单位进行存取的当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z,Unix/Linux下为组合键Ctrl+D)那么只有当最后一个输入字符为换行符’\n'(也可以是文件结束符EOF,EOF将在后面讨论)时,getchar才会停止执行,整个程序将会往下执行。譬如下面程序代码:while((c=getchar())!=EOF){putchar(c);}执行程序,输入:abc,然

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号