logistic regression笔记

333 阅读5分钟
原文链接: blog.stupidme.me

Logistic Regression

逻辑回归(Logistic regression)是一种分类算法,名字包含regression是由于历史原因。

Sigmod function和Logistic function基本上是一回事。特点是函数值取值范围在[0,1]之间。

函数如下:

g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1​

联合Hypothesis函数:

h θ ( x ) = g ( Θ T x ) h_{\theta}(x)=g(\Theta^Tx) hθ​(x)=g(ΘTx)

可以得到:

h θ ( x ) = 1 1 + e − Θ T x h_\theta(x)=\frac{1}{1+e^{-\Theta^Tx}} hθ​(x)=1+e−ΘTx1​

训练过程就是用训练集不断拟合 Θ \ThetaΘ参数。

Hypothesis函数的输出,就是对于输入x的一个预测概率。
对于二分类问题:

h θ ( x ) = P ( y = 1 ∣ x ; Θ ) h_\theta(x) = P(y=1|x;\Theta) hθ​(x)=P(y=1∣x;Θ)

Hypothesis函数的输出是,对于每一个输入特征x,分类结果y属于类别1的概率,这个概率是h关于 Θ \ThetaΘ的函数。

类似的

h θ ( x ) = P ( y = 0 ∣ x ; Θ ) h_\theta(x) = P(y=0|x;\Theta) hθ​(x)=P(y=0∣x;Θ)

表示,对于输入特征x,分类结果y属于类别0的概率。

上述两种分类的概率和应该是1。

Hypothesis函数

Hypothesis函数即假设函数
要判断类别属于0还是1,需要一个决策边界(Decision boundary)

将Hypothesis函数展开,可以得到一下公式(举个例子):

h θ ( x ) = g ( Θ 0 + Θ 1 x 1 + Θ 2 x 2 ) h_\theta(x) = g(\Theta_0+\Theta_1x_1+\Theta_2x_2) hθ​(x)=g(Θ0​+Θ1​x1​+Θ2​x2​)

因此,实际上,使用训练集训练的过程,就是在用输入张量x和张量 θ \thetaθ 进行矩阵乘法,然后计算loss。为了使loss最小,需要不断调整张量 θ \thetaθ 的值,这就是拟合的过程。

决策边界Hypothesis函数的属性,不是训练集的属性。一旦Hypothesis函数的 Θ \ThetaΘ参数确定,就有了确定的决策边界

为了能够处理更复杂的分类,我们必须让决策边界变得更复杂,办法就是给函数g增加多项式

前面

g ( θ 0 + θ 1 x 1 + θ 2 x 2 ) g(\theta_0+\theta_1x_1+\theta_2x_2) g(θ0​+θ1​x1​+θ2​x2​)

的决策边界是直线,如果我们需要决策边界是一个圆形,那么就需要拓展多项式,如下所示:

g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 ) g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1^2+\theta_4x_2^2) g(θ0​+θ1​x1​+θ2​x2​+θ3​x12​+θ4​x22​)

以此类推,我们可以得到更加复杂的决策边界。也就是说更加复杂的决策边界需要更加高阶的多项式

Logistic regression的损失函数

训练的过程就是拟合 Θ \ThetaΘ参数的过程。

首先需要定义loss function(cost function)。
损失函数是关于 Θ \ThetaΘ的函数,表示成 J ( Θ ) J(\Theta)J(Θ)。

损失函数的选择非常多样,比如可以参考线性回归定义一个简单的函数,用这个函数来度量损失:

C o s t ( h θ ( x ) , y ) = 1 2 ( h θ ( x ) − y ) 2 Cost(h_\theta(x),y)=\frac{1}{2}(h_\theta(x)-y)^2 Cost(hθ​(x),y)=21​(hθ​(x)−y)2

这是一个方差函数。

但是对于逻辑回归(Logistic regression),这个函数很容易造成 J ( Θ ) J(\Theta)J(Θ)成为一个非凸函数。这也就意味着,损失函数肯能存在非常多的局部最优值,这样就无法使用梯度下降算法求得全局最优。

注:
非凸函数,举个例子,笑脸改成波浪线。

所以,选取一个合适的损失函数是很关键的

定义好了损失函数,我们需要让损失函数最小,比如使用梯度下降的方法。当损失最小的时候,我们就确定了 Θ \ThetaΘ参数,也就确定了决策边界。这个降低loss,调整 Θ \ThetaΘ参数的过程,就是拟合(fitting)

对于logistic有一个常用的损失函数:

J ( Θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J(\Theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_\theta(x^{(i)}),y^{(i)}) J(Θ)=m1​i=1∑m​Cost(hθ​(x(i)),y(i))

令:

C o s t ( h θ ( x ) , y ) = − y log ⁡ ( h θ ( x ) ) − ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) Cost(h_\theta(x),y)=-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x)) Cost(hθ​(x),y)=−ylolog(hθ​(x))−(1−y)lolog(1−hθ​(x))

得到:

J ( Θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] \begin{aligned} J(\Theta)&=\frac{1}{m}\sum_{i=1}^{m}Cost(h_\theta(x^{(i)}),y^{(i)}) \\ &=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))] \end{aligned} J(Θ)​=m1​i=1∑m​Cost(hθ​(x(i)),y(i))=−m1​[i=1∑m​y(i)lologhθ​(x(i))+(1−y(i))lolog(1−hθ​(x(i)))]​

这个式子是从统计学的极大似然概率得来的。
它有一个很好的性质,它是凸函数

梯度下降最小化损失函数

为了拟合 Θ \ThetaΘ参数,我们需要让 J ( Θ ) J(\Theta)J(Θ)最小,我们采用梯度下降(Gradient Descent)

我们需要对 J ( Θ ) J(\Theta)J(Θ)求关于 θ \thetaθ的偏导数。也就是整个过程需要计算以下两项:

J ( Θ ) J(\Theta) J(Θ) σ σ θ j J ( Θ ) \frac{\sigma}{\sigma\theta_j}J(\Theta) σθj​σ​J(Θ)

那么梯度下降的过程就是,循环计算:

θ j : = θ j − α σ σ θ j J ( Θ ) \theta_j:=\theta_j-\alpha\frac{\sigma}{\sigma\theta_j}J(\Theta) θj​:=θj​−ασθj​σ​J(Θ)

其中, α \alphaα 就是 学习率(learning rate)

注:

  • 除了梯度下降能够最小化损失函数,也还有其他算法

共享此文章: