Machine Learning —— Logistic Regression
Review
在classification章节中,讨论了利用样本点的均值和协方差来计算
P
(
C
1
)
,
P
(
x
∣
C
1
)
,
P
(
C
2
)
,
P
(
x
∣
C
2
)
P(C_1),P(x|C_1),P(C_2),P(x|C_2)
P(C1?),P(x∣C1?),P(C2?),P(x∣C2?),进而计算得到新的样本点x属于class1的概率
之后还推导了
P
(
C
1
∣
X
)
=
σ
(
z
)
=
1
1
+
e
?
z
P(C_1|X)=sigma(z)=frac{1}{1+e^{-z}}
P(C1?∣X)=σ(z)=1+e?z1?,并且在Gaussian distribution下考虑class1和class2共用
Σ
Sigma
Σ,可以得到一个线性的
z
z
z
P w , b ( C 1 ∣ X ) = σ ( z ) = 1 1 + e ? z P_{w,b}(C_1|X)=sigma(z)=frac{1}{1+e^{-z}} Pw,b?(C1?∣X)=σ(z)=1+e?z1?
z = w x + b = ∑ i w i x i + b z=wx+b=sum_iw_ix_i+b z=wx+b=∑i?wi?xi?+b
此处的w和x都是vector,两者的乘积是inner product,这个model是受w和b控制的,也称作——Logistic Regression
Three Steps of machine learning
Step1: function set
function set就是Logistic Regression
w
i
w_i
wi?:weight
b
b
b:bias
σ
(
z
)
sigma(z)
σ(z):sigmoid function
x
i
x_i
xi?input

Step2: Goodness of a function
现在有N笔Training data,每一笔data都要标注它属于哪一类
假设这些Training data是从我们定义的posterior probability(后置概率)中产生的,而w和b决定了概率的大小,可以计算某一组w和b产生这N笔training data的概率,利用极大似然估计思想,最好的那组参数就是有最大可能性产生当前N笔Training data分布的w和b
(这里是二元分类,class2的概率为1-class)

为方便计算,将上式做变换:
w ? , b ? = a r g m a x w , b L ( w , b ) = a r g m i n w , b ( ? l n L ( w , b ) ) w^*,b^*=argmathop{max}limits_{w,b}L(w,b)=argmathop{min}limits_{w,b}(-lnL(w,b)) w?,b?=argw,bmax?L(w,b)=argw,bmin?(?lnL(w,b))
? l n L ( w , b ) = ? l n f w , b ( x 1 ) ? l n f w , b ( x 2 ) ? l n ( 1 ? f w , b ( x 3 ) ) ? . . . -lnL(w,b)=-lnf_{w,b}(x^1)-lnf_{w,b}(x^2)-ln(1-f_{w,b}(x^3))-... ?lnL(w,b)=?lnfw,b?(x1)?lnfw,b?(x2)?ln(1?fw,b?(x3))?...
为统一格式,将所有的Training data都打上0和1的标签

于是上式可改写为:
?
l
n
L
(
w
,
b
)
=
?
[
y
^
1
l
n
f
w
,
b
(
x
1
)
+
(
1
?
y
^
1
)
l
n
(
1
?
f
w
,
b
(
x
1
)
)
]
-lnL(w,b)=-[hat{y}^1lnf_{w,b}(x^1)+(1-hat{y}^1)ln(1-f_{w,b}(x^1))]
?lnL(w,b)=?[y^?1lnfw,b?(x1)+(1?y^?1)ln(1?fw,b?(x1))]
??
?
[
y
^
2
l
n
f
w
,
b
(
x
2
)
+
(
1
?
y
^
2
)
l
n
(
1
?
f
w
,
b
(
x
2
)
)
]
-[hat{y}^2lnf_{w,b}(x^2)+(1-hat{y}^2)ln(1-f_{w,b}(x^2))]
?[y^?2lnfw,b?(x2)+(1?y^?2)ln(1?fw,b?(x2))]
??
?
[
y
^
3
l
n
f
w
,
b
(
x
3
)
+
(
1
?
y
^
3
)
l
n
(
1
?
f
w
,
b
(
x
3
)
)
]
-[hat{y}^3lnf_{w,b}(x^3)+(1-hat{y}^3)ln(1-f_{w,b}(x^3))]
?[y^?3lnfw,b?(x3)+(1?y^?3)ln(1?fw,b?(x3))]
??
?
.
.
.
-...
?...
写成summation的形式:
?
l
n
L
(
w
,
b
)
=
∑
n
?
[
y
^
n
l
n
f
w
,
b
(
x
n
)
+
(
1
?
y
^
n
)
l
n
(
1
?
f
w
,
b
(
x
n
)
)
]
-lnL(w,b)=sum_n-[hat{y}^nlnf_{w,b}(x^n)+(1-hat{y}^n)ln(1-f_{w,b}(x^n))]
?lnL(w,b)=∑n??[y^?nlnfw,b?(xn)+(1?y^?n)ln(1?fw,b?(xn))]
x
n
x^n
xn表示第n个样本点,最终的summation形式是两个Bernouli distribution的cross entropy

cross entropy(交叉熵)的含义是表达这两个distribution有多接近,如果上图中p和q这两个distribution一模一样的话,那它们算出来的cross entropy=0,而这里
f
(
x
n
)
f(x^n)
f(xn)表示function的output,
y
^
n
hat{y}^n
y^?n表示预期的target,因此交叉熵表达的是希望这个function的output(预测概率)和其target(实际)越接近越好
Step3: Find the best function
实际上就是找到使交叉熵之后最小的那组参数w和b,这里用gradient descent的方法进行运算
(sigmoid function的微分可以直接作为公式记下来: ? σ ( z ) ? z = σ ( z ) ( 1 ? σ ( z ) ) frac{partial sigma(z)}{partial z}=sigma(z)(1-sigma(z)) ?z?σ(z)?=σ(z)(1?σ(z)))
先计算
?
l
n
L
(
w
,
b
)
=
∑
n
?
[
y
^
n
l
n
f
w
,
b
(
x
n
)
+
(
1
?
y
^
n
)
l
n
(
1
?
f
w
,
b
(
x
n
)
)
]
-lnL(w,b)=sum_n-[hat{y}^nlnf_{w,b}(x^n)+(1-hat{y}^n)ln(1-f_{w,b}(x^n))]
?lnL(w,b)=∑n??[y^?nlnfw,b?(xn)+(1?y^?n)ln(1?fw,b?(xn))]对
w
i
w_i
wi?的微分,这里
y
^
n
hat{y}^n
y^?n和
1
?
y
^
n
1-hat{y}^n
1?y^?n是常数



对式子进一步简化:

于是gradient descent每次update只需要做:
w i + 1 = w i ? μ ∑ n ? ( y ^ n ? f w , b ( x n ) ) x i n w_{i+1}=w_i-musum_n-(hat{y}^n-f_{w,b}(x^n))x^n_i wi+1?=wi??μ∑n??(y^?n?fw,b?(xn))xin?
Logistic Regression 与 Linear Regression
compare in step1
Logistic Regression是:每一个feature加权求和,加上bias后,再通过sigmoid function
Logistic Regression的output一定介于0~1,而Linear Regression没有经过sigmoid function,输出可以是任何值
compare in step2
Logistic Regression中,我们定义的loss function是所有example的output( f ( x n ) f(x^n) f(xn))和实际target( y ^ n hat{y}^n y^?n)的交叉熵之后,即将 f ( x n ) f(x^n) f(xn)和 y ^ n hat{y}^n y^?n各看做是一个Bernouli distribution,两者的交叉熵就是要minimize的对象
Linear Regression的loss function用square error来表示
compare in step3
Logistic Regression和Linear Regression的wi的update的方式一样


Logistic Regression + Square Error
重做machine learning的三个步骤


如果遇到一个问题:如果第n个点的目标target是class1,则 y ^ n = 1 hat{y}^n=1 y^?n=1,此时函数的 f w , b ( x n ) = 1 f_{w,b}(x^n)=1 fw,b?(xn)=1的话,说明两者很相近, f w , b ( x n ) ? y ^ = 0 f_{w,b}(x^n)-hat{y}=0 fw,b?(xn)?y^?=0,于是微分就会变成0,这是合理的;但是当 f w , b ( x n ) = 0 f_{w,b}(x^n)=0 fw,b?(xn)=0的话,说明离targer很远,但是此时计算得到的微分也是0,不合理
把参数的变化对total loss作图的哈,loss function分布选择cross entropy和square error

综上,尽管square error可以使用,但是update会十分缓慢;而使用cross entropy可以训练得更顺利
Discriminative 与 Generative
same model but different currency
Logistic Regression的方法,把它称为discriminative(判别);用Gaussian来描述posterior probability这件事,称之为generative(生成)

实际上两者所用的mode(function set)都是一样的,如果用Logistic Regression的话,可以用梯度下降法自己找到w和b;如果用generative model的话,要先算
μ
1
,
μ
2
,
Σ
?
1
mu_1,mu_2,Sigma^{-1}
μ1?,μ2?,Σ?1,然后算出w和b
尽管function set是相同的,但是用这两种方法得到的w和b是不一样的
在Logistic Regression中,我们没有做任何实质性的假设,只是单纯地找w和b;而在generative model中,我们对probability distribution假设的是Gaussian,最终找到w和b
两者的预测结果如下:

实际上discriminative的方法常常会比generative的方法表现更好
Discriminative model与Generative model的差别在于,Generative model做了某些假设,假设data来自于某个概率模型;Discriminative model完全不做任何假设
Conclusion
对于二分类的问题,我们一般有两种方法进行处理,一种是Generative方法,另一种是Discriminative方法,Generative model的好处在于,它对data的依赖没有Discriminative model那么大,在data数量少或者data本身存在noise的情况下受到的影响更小,而它可以做到将prior部分与class-dependent部分分开处理
而Discirminative model的好处是,在data充足的情况下,model的准确率更高
Multi-class Classification
softmax
多元分类问题与二元分类基本一致
假设有三个class: C 1 , C 2 , C 3 C_1,C_2,C_3 C1?,C2?,C3?,每一个class都有自己的weight和bias,此处的 w 1 , w 2 , w 3 w_1,w_2,w_3 w1?,w2?,w3?分布代表三个vector, b 1 , b 2 , b 3 b_1,b_2,b_3 b1?,b2?,b3?代表三个const,input x也是一个vector
softmax的意思是对最大值强化,使大值与小值之间差距拉开
我们把 z 1 , z 2 , z 3 z_1,z_2,z_3 z1?,z2?,z3?丢进一个softmax的function中:
- 取exponential,得到 e z 1 , e z 2 , e z 3 e^{z_1},e^{z_2},e^{z_3} ez1?,ez2?,ez3?
- 把三个exponential累加求和,得到 ∑ j = 1 3 e z j sum_{j=1}^3e^{z_j} ∑j=13?ezj?
- 归一化处理,得到
y
1
=
e
z
1
∑
j
=
1
3
e
z
j
,
y
2
=
e
z
2
∑
j
=
1
3
e
z
j
,
y
3
=
e
z
3
∑
j
=
1
3
e
z
j
y_1=frac{e^{z_1}}{sum_{j=1}^3e^{z_j}},y_2=frac{e^{z_2}}{sum_{j=1}^3e^{z_j}},y_3=frac{e^{z_3}}{sum_{j=1}^3e^{z_j}}
y1?=∑j=13?ezj?ez1??,y2?=∑j=13?ezj?ez2??,y3?=∑j=13?ezj?ez3??

在做完softmax后,output y i y_i yi?值介于0~1之间
multi-class classification过程
如下图所示,input x经过三个式中分别生成
z
1
,
z
2
,
z
3
z_1,z_2,z_3
z1?,z2?,z3?,经过softmax转化为output
y
1
,
y
2
,
y
3
y_1,y_2,y_3
y1?,y2?,y3?,它们分别是这三个class的posterior probability,由于summation=1,因此做完softmax后就可以把y的分布当做是一个probability distribution,我们训练时还需要一个target,因为是三个class,output是三维的,对应的target也是三维的,为了满足交叉熵的条件,target
y
^
hat{y}
y^?也必须是probability distribution,为了保证所有的class之间的关系是一样的,这里使用类似one-hot编码的方式,即:
y
^
=
[
1
0
0
]
x
∈
c
l
a
s
s
1
y
^
=
[
0
1
0
]
x
∈
c
l
a
s
s
2
y
^
=
[
0
0
1
]
x
∈
c
l
a
s
s
3
hat{y}= begin{bmatrix} 1\ 0\ 0\ end{bmatrix}_{xin class1} hat{y}= begin{bmatrix} 0\ 1\ 0\ end{bmatrix}_{xin class2} hat{y}= begin{bmatrix} 0\ 0\ 1\ end{bmatrix}_{xin class3}
y^?=???100????x∈class1?y^?=???010????x∈class2?y^?=???001????x∈class3?

这时候计算一下output
y
y
y和target
y
^
hat{y}
y^?之间的交叉熵,即
?
∑
i
=
1
3
y
^
i
l
n
y
i
-sum_{i=1}^3hat{y}_ilny_i
?∑i=13?y^?i?lnyi?,同二元分类一样,多元分类问题也是通过极大似然估计得到最终的交叉熵表达式的
Limitation of Logistic Regression
Logistic Regression有很强的限制性,例如给出下图中的training data,是没有办法利用Logistic Regression进行分类的

因为Logistic Regression在两个class之间的boundary是一条直线
Feature Transformation
如果坚持要用Logistic Regression的话,有一个方法是 Feature Transformation,原来的feature分布不好划分,我们可以将之转化以后,找一个比较好的feature space,让Logistic Regression可以处理

但是麻烦的是我们并不知道怎么做feature transformation,于是我们希望机器自己产生transformation,为了让机器自己产生,我们可以让很多Logistic Regression cascade(连接)起来
我们让一个input x的两个feature
x
1
,
x
2
x_1,x_2
x1?,x2?经过两个Logistic Regression的transform,得到新的feature
x
1
′
,
x
2
′
x_1^{'},x_2^{'}
x1′?,x2′?,在这个新的feature space上,class1和class2是可以用一条直线分开的,那么最后只要再接另外一个Logistic Regression的model(对它来说,
x
1
′
,
x
2
′
x_1^{'},x_2^{'}
x1′?,x2′?才是每一个样本点的feature),它根据新的feature就可以把class1和class2分开

因此这整个流程是,先用n个Logistic Regression做feature transformation,生成n个新的feature,再用一个Logistic Regression做classifier
Logistic Regression的boundary一定是一条直线,它可以有任何的画法,但肯定是按照某个方向从高到底的等高线分布,具体的分布时由Logistic Regression的参数决定的,每一条直线都是有 z = b + ∑ i n w i x i z=b+sum_i^nw_ix_i z=b+∑in?wi?xi?组成的
下图是二维feature的例子,分别表示四个点经过transform之后的
x
1
,
x
2
x_1,x_2
x1?,x2?,在新的feature space中可以通过最后的Logistic Regression划分开来

这里的Logistic Regression只是一条直线,它指的是“属于这个类”或“不属于这个类”这两种情况,因此最后的这个Logistic Regression是跟要检测的目标类相关的,当只是二元分类的时候,最后只需要一个Logistic Regression即可,当面对多元分类问题,需要用到多个Logistic Regression来画出多条直线划分所有的类,每一个Logistic Regression对应它要检测的那个类
Power Cascading Logistic Regression
通过上面的例子,我们发现,多个Logistic Regression连接起来会产生powerful的效果,我们把每一个Logistic Regression叫做一个neuron(神经元),把Logistic Regression串起来形成的network叫做Neural Network

参考
https://github.com/sakura-gh/ml-notes
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!