最近项目需要,用到了 Logistic 回归(Logistic Regression),因此又跟着 Andrew Ng 的机器学习课程复习了一遍相关知识,整理如下:
一、问题的引入
使用线性回归方法是可以引申来处理分类问题的,一般是用回归得到假设值 hθ(x) 来决定类别归属。例如:hθ(x)<0.5 时,y = 0;hθ(x)>0.5 时,y = 1。
然而,线性回归得到的假设值 hθ(x) 有可能 >1 或是 <0,而且有可能会超出很多,这种情况下使用线性回归似乎不是很好的选择。
为了解决这个问题,我们引入 Logistic 回归方法,将 hθ(x) 限制在 (0,1) 范围内。
注意,Logistic 回归是一种分类方法,而不是回归方法,名字中的「回归」是历史原因造成的。
二、Logistic 函数(Logistic Function)
线性回归中,假设函数 hθ(x)=θ⊤x,这里将截距"藏"在了向量中,即θ=[θ0,θ1,⋯,θn]⊤,x=[1,x1,x2,⋯,xn]⊤。
而在 Logistic 回归中,我们使用一个函数来限制假设函数的值域,这个函数就叫做 Logistic 函数(Logistic Function,也叫 Sigmoid Function)。
Logistic Function:
g(z)=1+e−z1
它的函数图像:
从图像中可以看出,逻辑回归函数将输入的(−∞,∞)空间映射到了(0,1)空间,即将值域限制在了(0,1)之内。 限制后的假设函数为:
hθ(x)=g(θ⊤x)=1+e−θ⊤x1
注意该假设函数中,只有一个参数:θ,我们接下来就需要通过优化来求解这个参数,以确定分类模型。
三、假设函数的直观解释
由于假设函数的值域为(0,1),而hθ(x)值越接近1,就越有可能是 y=1 类;反之hθ(x)值越接近0,越有可能是 y=0 类。
这样看来,假设函数 hθ(x) 可以看做是给定 x,其类别 y=1 的估计概率,即
hθ(x)=P(y=1∣x;θ)
四、寻求优化参数 θ
一般来说,寻找参数的过程就是优化目标函数的过程。
4.1 线性回归的目标函数
在线性回归中,我们的目标函数为:
J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2
其中,21(hθ(x(i))−y(i))2 部分就是损失函数,即Cost(hθ(x(i)),y(i))
线性回归的优化目标就是最小化这个目标函数,即让各个样本点的误差达到最小。
4.2 Logistic 回归的目标函数
4.2.1 平方形式的损失函数
我们把 Logistic 回归的假设函数 hθ(x)=1+e−θ⊤x1 代入到线性回归的损失函数中,得到:
Cost(hθ(x),y)=21(hθ(x)−y)2=1+e−θ⊤x1
为简便起见,这里以后,将各个点的误差hθ(x(i))−y(i)简写为hθ(x)−y。
然而,这样的损失函数代入J(θ)=m1i=1∑mCost(hθx,y) 中,得到的目标函数 J(θ) 并非凸函数,其函数图像类似下图的左子图。
只有目标函数是凸函数时,我们才能通过各种优化方法(如梯度下降、牛顿法等)找到极值点,进而得到最优值对应的参数。 因此,Logistic 回归需要调整其损失函数形式,以使得目标函数为凸函数。
4.2.2 对数形式的损失函数
Logistic 回归采用的损失函数为:
Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0
这两个函数 −log(hθ(x)),−log(1−hθ(x)) 的函数图像如下图所示。可以看出,当 y=1 时,随着 hθ(x) 逐渐趋近于 0(即趋向于「分错类别」),损失函数将剧烈上升,趋向于 ∞,而当 hθ(x) 逐渐趋近于 1(即趋向于「分对类别」) 时,损失函数则会逐渐减小到 0。当 y=0 时,情况类似。
可见,当分错类别时,这个损失函数会得到一个比较大的损失,进而来惩罚分类算法。
简化损失函数
上面对数形式损失函数是分段形式的,我们可以将两个式子压缩成一个式子:
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
当 y=0 时,取后半段;当 y=1 时,取前半段。
由此,我们终于得到了 Logistic 回归的目标函数J(θ):
J(θ) =m1i=1∑mCost(hθ(x(i)),y(i))=−m1[i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
4.3 优化目标函数求参
优化目标函数:minθJ(θ),即可得到参数 θ
那么,如何优化目标函数呢?优化方法有很多种,这里讲一下「梯度下降法」:
4.3.1 梯度下降法(Gradient Descent)
梯度下降法的原理这里不详细解释了,方法比较直观,网上有很多教程可以参考。
梯度下降法的使用很简单:在目标函数上任找一点开始,让参数 θ 不断朝着梯度方向迭代,直到收敛,收敛时函数位于极小值处,此时的 θ 即为 minθJ(θ)。
每一步迭代的形式化定义如下:
θj:=θj−α∂θj∂J(θ)
这里引入了一个新的参数:α,表示迭代速度,在这里作为调控因子。另外式子中 J(θ) 关于 θ 的梯度可以计算得到:
∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
此外,还要注意的是,梯度下降法迭代时,是所有参数:θ0,θ1,⋯,θn 同时迭代的,这个可以以向量形式进行批量计算。
在梯度下降中,需要计算∑i=1m(hθ(x(i))−y(i))xj(i),也就是每一个样本 x(i) 都要参与计算。这样在样本量较大时,难免效率底下。有一些改进的方法来解决这个问题,例如随机梯度下降法等,这里就不展开了。
五、用求得的参数进行分类
使用求得的参数 θ,进而预测新的未知变量 x:
hθ(x)=1+e−θ⊤x1
之前提过了,这个 hθ(x) 直观意义为:给定 x,其类别 y=1 的估计概率,即hθ(x)=P(y=1∣x;θ) 因此,我们有了 hθ(x),就能确定未知样本的分类了。