ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Machine Learning —— Logistic Regression

2021-05-03 19:01:52  阅读:149  来源: 互联网

标签:function Logistic feature Machine Learning model hat Regression


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^*=arg\mathop{max}\limits_{w,b}L(w,b)=arg\mathop{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-\mu\sum_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}_{x\in class1} \hat{y}= \begin{bmatrix} 0\\ 1\\ 0\\ \end{bmatrix}_{x\in class2} \hat{y}= \begin{bmatrix} 0\\ 0\\ 1\\ \end{bmatrix}_{x\in 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}^3\hat{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

标签:function,Logistic,feature,Machine,Learning,model,hat,Regression
来源: https://blog.csdn.net/David_B/article/details/116376778

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有