本篇博客将接着《机器学习 学习记录》继续阐述机器学习的相关知识
2.Logistic Regression
在上一篇博客中,我们了解了机器学习里最简单的模型Linear Regression,这个模型用于回归问题,而当我们需要处理一个分类问题的时候,想一想线性回归的模型还能不能用?
请看下面的两张图
图1
图2
对于图1的情况来说,如果对该组数据做Regression理论上是可以得到一个比较好的结果。图1中绿色直线可以比较好地将两类数据分开。而对于图2来说,就很难通过Regression来确定一条直线将两类数据分开。所以我们需要一种方法来处理这种分类问题。
下面介绍两种方法:
- 01.Generative:
在引出这种方法之前,我们先来回顾一下要用到的数学知识——贝叶斯公式:
直白地讲就是,取出来一个 B ,
下面我们以分两类的情况阐述Generative方法:
前几天我又做了一次调研(又是假装做了),调研的内容是男生与女生的身高和体重。得到以下数据:
男生(
C1
):
Height:x {175,176,177,178,179}
Weight:y {60,61,62,63,64}
女生( C2 ):
Height:x {160,161,162,163,164,165}
Weight:y {55,56,57,58,59,60}
怎么能把女生编得这么胖!!! 你管我呢?
现在,我想让机器告诉我身高180,体重65的到底是女生还是男生。
当只有两类的时候,贝叶斯公式可以这么写:
我们现在想衡量一下 P(x) 的大小(就是有多大的概率能取出来一个样本里面的数据),根据我们的取样数据, P(C1)=511 , P(C2)=611 ,那么为了得到 P(x) 我们还缺两个东西 P(x|C1)、P(x|C2) 如果这两个知道了 P(C1|x) 也就不难求了。
不知道你有没有发现,到这里我们已经做完了机器学习的第一个步骤,就是找到了一个Function Set,这个函数集合就是我们所说的贝叶斯公式。不仅如此,我们已经做了机器学习第二步骤的一小半,就是我们找到了一个可以衡量模型好坏的函数 P(x) ,而我们要做的就是让机器找到一个最佳函数,使得我们抽样数据概率之积最大(我们假定每次抽样都是独立进行的),直白来说就是使我们得到这组抽样数据的概率最大。所以我们定义下面的函数:
那么怎么去衡量 P(xi) 呢?
我们假定人的身高体重服从高斯分布,高斯分布长这个样子:
假设男生的身高体重服从 N(μ1,Σ21) 的高斯分布,女生的服从 N(μ2,Σ22) (这里的上标表示幂次)
于是这组数据的概率就可以用下面的式子来衡量:
我们可以用最大似然估计来得到上面的式子最大值点。
μ∗1=1N1∑N1i=1xi (男生数据)
μ∗2=1N2∑N2i=1xi (女生数据)
Σ∗1=1N1∑N1i=1(xi−μ1)(xi−μ1)T (男生数据)
Σ∗2=1N2∑N2i=1(xi−μ2)(xi−μ2)T (女生数据)
但是我们发现,这种方法参数有点多,但转念一想,女生的身高体重分布好像跟男生也没差多少,于是我们令 Σ1=Σ2=Σ
其中 Σ=N1N1+N2Σ1+N2N1+N2Σ2 ,于是
从而:
求出 μ1 , μ2 , Σ 之后带入上式求出 P(C1|x) ,如果Output>0.5,则所测试的数据是男生的,相反则是女生的。
- 2.Logistic Regression
终于我们将进入Logistic Regression的探讨
上面我们提到对于两类的分类问题,我们的Function Set选择如下:
在上式情况下我们做如下恒等变形:
令 lnP(x|C1)P(C1)P(x|C2)P(C2)=z
上式可以写作:
其中 σ(z)=11+e−z 称为Sigmoid函数,这是我们将来要说的激活函数中的一种。
下面我们深入去讨论一下这个函数
![]()
![]()
![]()
![]()
![]()
图片引用自李宏毅(台湾大学)《机器学习》
从上面的推导过程我们可以看出来其实这里的
z
可以写成以下形式:
(注意:这里的 w、x 应该是向量,但 z,b 都是数值)
于是,
于是这里的函数就可以表示成如下形式:
到这里,我们又做完了机器学习的第一步,我们已经找到了一个函数集合。下面,就是寻找一种方法,使得机器可以按照这种方法找到一个最佳的函数。我们采用的方法是这样的:
还是采用我们在讨论Generative方法时所假象的男女身高体重数据,将男生数据
x1,x2,⋯,x5
划归为
C1
,女生数据
x6,x7,⋯,x11
划归到
C2
,于是我们的函数便写成如下形式:
我们所要求的就是一堆参数 w,b 使得 L(w,b) 取得最大值。为了求得这一参数,我们做如下等价变形:
我们设定目标值
于是上面的式子就可以写成如下形式:
这个式子其实是两个伯努利分布的交叉熵,那么如何去求解这个交叉熵的最小值呢?当然是用Gradient Descent的方法啦。求出 ∂lnL∂wi,∂lnL∂bi 然后继续更新参数。
上面所说的Logistic Regression都是针对两种类别的情况,那如果是多种类别怎么办呢?
看下面两张图,这里不展开聊了
到这里Logistic Regression我们就已经介绍完了。当然,这种方法也有自己的局限性。当数据的分布不那么规整的时候,一条直线就很难将两组数据分开,所以有的时候需要坐标变换,在变换之后才能找到一条直线将两类数据分开。之后我们聊到Deep Learning的时候会通过另外一种方法来避开坐标变换。