吴恩达 【机器学习】第七章 逻辑回归Logistic Regression
7.1 分类Classification
- 预测离散的变量
- 举例证明线性回归不能很好地处理分类问题
- 逻辑回归(Logistic Regression)是解决分类(Classification)问题的一种算法
7.2 假设函数
- 逻辑回归,该模型的输出变量范围始终在0和1之间。
- 逻辑回归模型的假设是:
h θ ( x ) = g ( θ T x ) h_\theta \left( x \right)=g\left(\theta^{T}x \right) hθ(x)=g(θTx)
g ( z ) = 1 1 + e − z g\left( z \right)=\frac{1}{1+{{e}^{-z}}} g(z)=1+e−z1 - 其中:
- X X X 代表特征向量
- g g g 代表逻辑函数(logistic function)是一个常用的逻辑函数,这里用Sigmoid函数(Sigmoid function),公式为: g ( z ) = 1 1 + e − z g\left( z \right)=\frac{1}{1+{{e}^{-z}}} g(z)=1+e−z1。
python代码实现:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
该函数的图像为:
-
对模型的理解:
h θ ( x ) = g ( θ T x ) h_\theta \left( x \right)=g\left(\theta^{T}x \right) hθ(x)=g(θTx)
g ( z ) = 1 1 + e − z g\left( z \right)=\frac{1}{1+{{e}^{-z}}} g(z)=1+e−z1。 -
h θ ( x ) h_\theta \left( x \right) hθ(x)的作用是:对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)即 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta \left( x \right)=P\left( y=1|x;\theta \right) hθ(x)=P(y=1∣x;θ) 。
例如,如果对于给定的 x x x,通过已经确定的参数计算得出 h θ ( x ) = 0.7 h_\theta \left( x \right)=0.7 hθ(x)=0.7,则表示有70%的几率 y y y为正向类,相应地 y y y为负向类的几率为1-0.7=0.3。
7.3 决策界限Decision Boundary
- 决策边界是由参数 θ \theta θ决定的,而不是由训练集决定的
- 训练集是用来拟合(fit)参数 θ \theta θ的
- 举例:
- 我们可以用非常复杂的模型来适应非常复杂形状的判定边界。
7.4 代价函数
- 如果用线性回归里用的差平方作为cost函数,再加上非线性的sigmiod函数,会使得最终函数非凸(non-convex),有很多局部最小值,梯度下降很难找到全局最优解
- 线性回归的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{1}{2}{{\left( {h_\theta}\left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2 。 - 我们重新定义逻辑回归的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)} J(θ)=m1i=1∑mCost(hθ(x(i)),y(i)), - 其中
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)与
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost\left( {h_\theta}\left( x \right),y \right)
Cost(hθ(x),y)之间的关系如下图所示:
- 这样构建的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost\left( {h_\theta}\left( x \right),y \right)
Cost(hθ(x),y)函数的特点是:
- 当实际的
y
=
1
y=1
y=1 且
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)也为 1 时误差为 0,
当 y = 1 y=1 y=1 但 h θ ( x ) {h_\theta}\left( x \right) hθ(x)不为1时误差随着 h θ ( x ) {h_\theta}\left( x \right) hθ(x)变小而变大; - 当实际的
y
=
0
y=0
y=0 且
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)也为 0 时代价为 0,
当 y = 0 y=0 y=0 但 h θ ( x ) {h_\theta}\left( x \right) hθ(x)不为 0时误差随着 h θ ( x ) {h_\theta}\left( x \right) hθ(x)的变大而变大。
- 当实际的
y
=
1
y=1
y=1 且
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)也为 1 时误差为 0,
- 将构建的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost\left( {h_\theta}\left( x \right),y \right)
Cost(hθ(x),y)简化如下:
C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
- 代入代价函数得到:
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=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
即: 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=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
Python代码实现:
import numpy as np
def cost(theta, X, y):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X* theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))
return np.sum(first - second) / (len(X))
7.5 简化代价函数和梯度下降
- 简化代价函数
- 梯度下降
7.6 高级优化
用来使代价函数最小化的高级算法
- 梯度下降
- 共轭梯度法 (Conjugate Gradient)
- BFGS (变尺度法)
- L-BFGS (限制变尺度法)
7.7 多类别分类问题:一对多
- 举例
- 对比
- 做法:"一对余"方法
- 我们将多个类中的一个类标记为正向类( 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=i∣x;θ)其中: i = ( 1 , 2 , 3.... k ) i=\left( 1,2,3....k \right) i=(1,2,3....k)
- 最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。即:
max
i
h
θ
(
i
)
(
x
)
\mathop{\max}\limits_i h_\theta^{\left( i \right)}\left( x \right)
imaxhθ(i)(x)