机器学习-逻辑回归

查看更多 - https://breezedawn.github.io/

什么是逻辑回归算法

逻辑回归算法是分类算法,可能它的名字里出现了“回归”让我们以为它属于回归问题,但逻辑回归算法实际上是一种分类算法,它主要处理当 y y y 取值离散的情况,如:1 0 。

为什么不使用线性回归算法处理分类问题

假设我们遇到的问题为 二分类问题,那么我们可能将结果分为负向类和正向类,即 y ∈ 0 , 1 y\in 0,1 y0,1 ,其中 0 表示负向类,1 表示正向类。如果我们使用线性回归,那么假设函数的输出值可能远大于 1,或者远小于0,但是我们需要的假设函数输出值需要在0到 1 之间,因此我们需要用到逻辑回归算法。

逻辑回归的假设函数与理解

逻辑回归的假设函数 sigmoid function 表示方法 :

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

理解记忆:

其实里面的 θ T x \theta_Tx θTx就是线性回归时的假设函数 h(x) ,
h ( x ) = θ T x = ∑ j = 0 n θ j x j h(x) = \theta^Tx = \sum_{j=0}^{n}{\theta_jx_j} h(x)=θTx=j=0nθjxj
而逻辑回归的假设函数其实就是将线性回归的表达式 h(x) 以 z 的形式代入到了 S 型函数(sigmoid function) 中 :
g ( h ( x ) ) = g ( z ) = 1 1 + e − z g(h(x)) = g(z) = \frac{1}{1+e^{-z}} g(h(x))=g(z)=1+ez1
ps: 这里我们用 h ( x ) h(x) h(x)表示的是线性回归的假设函数,之后的 h h h都将表示 sigmoid 函数。

对假设函数的解释 :

给定 x ,根据选择的参数计算出y = 1 的概率 ,具体的概率公式如下 :
h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x) = P(y=1|x; \theta) hθ(x)=P(y=1x;θ)

Sigmoid - Python:
import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

判定边界(decision boundary)

如何得出判定边界 :

在 Sigmoid 中,但凡输出结果 h θ ( x ) h_\theta(x) hθ(x)大于 0.5 的,我们都将预测结果 y y y 收敛于 1 ;小于 0.5 的,收敛于 0 ;而恰好等于 0.5 的,收敛1 或 0 都可以,我们可以自己设定它如何收敛。由此,我们的输出值就都在 0 到 1 之间了。而当 h θ ( x ) h_\theta(x) hθ(x) 大于 0.5 时, θ T x \theta^Tx θTx 大于 0.5, h θ ( x ) h_\theta(x) hθ(x) 小于 0.5 时, θ T x \theta^Tx θTx 小于 0.5, h θ ( x ) h_\theta(x) hθ(x) 等于 0.5 时, θ T x \theta^Tx θTx 等于 0.5。
当然,具体的阈值是可以调整的,比如说你是一个比较保守的人,可能将阈值设为 0.9 ,也就是说有超过 90% 的把握,才相信这个 y y y收敛于 1 。

由此,我们能够绘制出判定边界 :
θ T x = 0 \theta^Tx = 0 θTx=0

关于判定边界 :
  1. 决策边界不是训练集的属性,而是假设本身及其参数的属性
  2. 只要给出确定的参数 θ \theta θ,就确定了我们的决策边界
  3. 高阶多项式(多个特征变量)能够让我们得到更复杂的决策边界

逻辑回归的代价函数,梯度下降自动拟合 θ \theta θ,以及代价函数的推导过程

逻辑回归的代价函数 :

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(θ)=m1i=1mCost(hθ(x(i)),y(i))
其中 C o s t Cost Cost :
C o s t ( h θ ( x ) , y ) = − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) Cost(h_\theta(x),y) = -ylog(h_\theta(x)) - (1-y)log(1-h_\theta(x)) Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))
因此 J ( θ ) J(\theta) J(θ) :
J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta) =-\frac{1}{m}[\sum_{i=1}^{m} y^{(i)}log(h_\theta(x^{(i)})) + (1-y^{(i)})log(1-h_\theta(x^{(i)}))] J(θ)=m1[i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

使用对数几率的原因:
  • 代价函数 J ( θ ) J(\theta) J(θ) 会是一个凸函数,并且没有局部最优值。否则我们的代价函数将是一个非凸函数。
逻辑回归的梯度下降算法 :

Repeat {
θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j} J(\theta) θj:=θjαθjJ(θ)
(simultaneously update all )
}

求导后得到:

Repeat {
θ j : = θ j − α ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θjαi=1m(hθ(x(i))y(i))xj(i)
(simultaneously update all )
}

ps : 逻辑回归梯度下降结果与线性回归梯度下降结果一致,但其中的 h θ ( x ) h_\theta(x) hθ(x)并不一样,因此本质上是不同的。

关于特征缩放和均值归一化:

思想:

在有多个特征的情况下,如果你能确保这些不同的特征都处在一个相近的范围,这样梯度下降法就能更快地收敛。使代价函数 J ( θ ) J(θ) J(θ)的轮廓图的形状就会变得更圆一些。

做法:

一般地,我们执行特征缩放时,我们通常将特征的取值约束到接近−1到+1的范围。其中,特征x0总是等于1,因此这已经是在这个范围内了,但对于其他的特征,我们需要通过除以不同的数来让它们处于同一范围内。除了在特征缩放中将特征除以最大值以外,有时候我们也会进行一个称为均值归一化的操作:
x n = x n − μ n s n x_n = \frac{x_n-μ_n}{s_n} xn=snxnμn
其中, μ n μ_n μn是平均值, s n s_n sn是标准差

好处:
  1. 更好的进行梯度下降,提高代价函数的收敛速度
  2. 提高代价函数求解的精度
  3. 更适合解决大型机器学习的问题​

其他相较于梯度下降算法更好的的令代价函数最小的算法(高级优化[超纲])

常用算法:
  • 共轭梯度(Conjugate Gradient)
  • 局部优化法(BFGS - Broyden fletcher goldfarb shann)
  • 有限内存局部优化法(LBFGS)
好处:
  • 这些算法内部有一个智能的内部循环(线性搜索算法),能够尝试不同的 α ​ \alpha​ α 并自动的选择一个好的学习速率 α ​ \alpha​ α ,这样就不需要手动选择 α ​ \alpha​ α
  • 收敛速度通常比梯度下降算法更快速
缺点:
  • 比梯度下降算法更加复杂

使用逻辑回归算法解决多类别问题

思想:

将多分类问题拆分成多个二分类问题并得出多个模型。最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。

做法:

我们将多个类中的一个类标记为正向类 y = 1 y=1 y=1),然后将其他所有类都标记为负向类,这个模型记作 h θ ( 1 ) ( x ) h_\theta^{\left( 1 \right)}\left( x \right) hθ(1)(x)。接着,类似地我们选择另一个类标记为正向类( y = 2 y=2 y=2),再将其它类都标记为负向类,将这个模型记作 h θ ( 2 ) ( x ) h_\theta^{\left( 2 \right)}\left( x \right) hθ(2)(x),依此类推
最后我们得到一系列的模型简记为: h θ ( i ) ( x ) = p ( y = i ∣ x ; θ ) h_\theta^{\left( i \right)}\left( x \right)=p\left( y=i|x;\theta \right) hθ(i)(x)=p(y=ix;θ)其中: i = ( 1 , 2 , 3.... k ) i=\left( 1,2,3....k \right) i=(1,2,3....k)
然后我们将这多个逻辑回归分类器进行训练并得出最终模型: h θ ( i ) ( x ) h_\theta^{\left( i \right)}\left( x \right) hθ(i)(x), 其中 i i i 对应每一个可能的 y = i y=i y=i,最后,当我们需要进行预测时,输入一个新的 x x x 值,我们要做的就是在这多个分类器里面输入 x x x,然后在多个分类器得出的结果中,选出一个最大的$ i , 即 ,即 \mathop{\max}\limits_i,h_\theta^{\left( i \right)}\left( x \right)$。

逻辑回归梯度下降中代价函数求导过程

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{y}^{(i)}\log \left( {h_\theta}\left({x}^{(i)} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

由于 h θ ( x ( i ) ) = 1 1 + e − θ T x ( i ) {h_\theta}\left( {{x}^{(i)}} \right)=\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} hθ(x(i))=1+eθTx(i)1,所以:

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))] = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( 1 1 + e − θ T x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − 1 1 + e − θ T x ( i ) ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( \frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right)]} =m1i=1m[y(i)log(1+eθTx(i)1)+(1y(i))log(11+eθTx(i)1)]
= − 1 m ∑ i = 1 m [ − y ( i ) log ⁡ ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 + e θ T x ( i ) ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^T}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^T}{{x}^{(i)}}}} \right)]} =m1i=1m[y(i)log(1+eθTx(i))(1y(i))log(1+eθTx(i))]

J ( θ ) J(\theta) J(θ) θ \theta θ求偏导
∂ ∂ θ j J ( θ ) \frac{\partial }{\partial {\theta_{j}}}J\left( \theta \right) θjJ(θ)
= ∂ ∂ θ j [ − 1 m ∑ i = 1 m [ − y ( i ) log ⁡ ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 + e θ T x ( i ) ) ] ] =\frac{\partial }{\partial {\theta_{j}}}[-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^{T}}{{x}^{(i)}}}} \right)]}] =θj[m1i=1m[y(i)log(1+eθTx(i))(1y(i))log(1+eθTx(i))]]
= − 1 m ∑ i = 1 m [ − y ( i ) − x j ( i ) e − θ T x ( i ) 1 + e − θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\frac{-x_{j}^{(i)}{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}{1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}}] =m1i=1m[y(i)1+eθTx(i)xj(i)eθTx(i)(1y(i))1+eθTx(i)xj(i)eθTx(i)]
= − 1 m ∑ i = 1 m y ( i ) x j ( i ) 1 + e θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{{y}^{(i)}}\frac{x_j^{(i)}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}] =m1i=1my(i)1+eθTx(i)xj(i)(1y(i))1+eθTx(i)xj(i)eθTx(i)]
= − 1 m ∑ i = 1 m y ( i ) x j ( i ) − x j ( i ) e θ T x ( i ) + y ( i ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}x_j^{(i)}-x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}+{{y}^{(i)}}x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}} =m1i=1m1+eθTx(i)y(i)xj(i)xj(i)eθTx(i)+y(i)xj(i)eθTx(i)
= − 1 m ∑ i = 1 m y ( i ) ( 1 + e θ T x ( i ) ) − e θ T x ( i ) 1 + e θ T x ( i ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}\left( 1\text{+}{{e}^{{\theta^T}{{x}^{(i)}}}} \right)-{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}x_j^{(i)}} =m1i=1m1+eθTx(i)y(i)(1+eθTx(i))eθTx(i)xj(i)
= − 1 m ∑ i = 1 m ( y ( i ) − e θ T x ( i ) 1 + e θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =m1i=1m(y(i)1+eθTx(i)eθTx(i))xj(i)
= − 1 m ∑ i = 1 m ( y ( i ) − 1 1 + e − θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =m1i=1m(y(i)1+eθTx(i)1)xj(i)
= − 1 m ∑ i = 1 m [ y ( i ) − h θ ( x ( i ) ) ] x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}-{h_\theta}\left( {{x}^{(i)}} \right)]x_j^{(i)}} =m1i=1m[y(i)hθ(x(i))]xj(i)
= 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) =\frac{1}{m}\sum\limits_{i=1}^{m}{[{h_\theta}\left( {{x}^{(i)}} \right)-{{y}^{(i)}}]x_j^{(i)}} =m1i=1m[hθ(x(i))y(i)]xj(i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡泡码客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值