公众号:尤而小屋
作者:Peter
编辑:Peter
吴恩达机器学习-3-逻辑回归与正则化问题
第三周主要讲解的内容包含:
- 逻辑回归
- 代价函数
- 线性回归和逻辑回归的比较
- 正则化问题
逻辑回归
分类问题
假设预测的变量y
是离散的值,需要使用逻辑回归Logistic Regression,LR
的算法,实际上它是一种分类算法
二元分类问题
将因变量dependent variable
可能属于的两个类分别称为负向类negative class
和正向类positive class
,因变量y的取值只能在0
和1
之间,其中0表示负类,1表示正类
假说表示Hypothesis Representation
分类器的输出值在0
和1
之间,因此,希望找出一个满足某个性质的假设函数,这个性质是它的预测值要在0和1之间
引入一个新的模型:逻辑回归
,该模型的输出变量范围始终在0和1之间。 逻辑回归模型的假设是:
h
(
θ
)
=
g
(
θ
T
X
)
h(\theta) = g(\theta^TX)
h(θ)=g(θTX) 其中X
代表的是特征向量g
的逻辑函数,常用的S
型函数(上图的右边,sigmoid function
)公式为
g
(
z
)
=
1
1
+
e
−
z
g(z)= \frac{1}{1+e^{-z}}
g(z)=1+e−z1 Python代码实现sigmod
激活函数:
import numpy as np
def sigmod(z):
return 1 / (1 + np.exp(-z))
h θ ( x ) = g ( z ) = 1 1 + e − θ T X h_\theta(x)=g(z)= \frac{1}{1+e^{{-\theta^T}X}} hθ(x)=g(z)=1+e−θTX1
h θ ( x ) h_{\theta}(x) hθ(x)作用是对于给定的输入变量,根据选择的参数计算输出变量=1的可能性,即: h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_{\theta}(x)=P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ)
例如:对于给定的x,通过已经确定的参数计算得出 h θ ( x ) = 0.7 h_{\theta}(x)=0.7 hθ(x)=0.7,则表示有70%的几率y属于正类
决策边界decision boundary
解释逻辑回归
- 在逻辑回归中 h ≥ 0.5 h \geq 0.5 h≥0.5预测 y = 1 y=1 y=1;反之y=0
- 在激活函数 g ( z ) g(z) g(z)中:
当 z ≥ 0 z \geq 0 z≥0则 g ( z ) ≥ 0.5 g(z) \geq 0.5 g(z)≥0.5
当 z < 0 z < 0 z<0则 g ( z ) < 0.5 g(z) < 0.5 g(z)<0.5
又因为 z = θ T x z={\theta^{T}}x z=θTx,那么当 θ T x ≥ 0 {\theta^T}x \geq 0 θTx≥0的时候,则有 y = 1 y=1 y=1;反之 y = 0 y=0 y=0
又因为 z = θ T x z={\theta^{T}}x z=θTx ,即: θ T x > = 0 {\theta^{T}}x>=0 θTx>=0 时,预测 y = 1 y=1 y=1 ;反之: θ T x < 0 {\theta^{T}}x<0 θTx<0 时,预测 y = 0 y=0 y=0
实例demo
在下图的中实例中,参数
θ
\theta
θ满足[-3,1,1]
,当
−
3
+
x
1
+
x
2
≥
0
-3+x_1+x_2 \geq0
−3+x1+x2≥0,即
x
1
+
x
2
≥
3
x_1+x_2\geq3
x1+x2≥3时,模型预测y=1;说明此时:直线
x
1
+
x
2
=
3
x_1+x_2=3
x1+x2=3就是决策边界
复杂的模型边界问题
代价函数Cost Function
如何拟合LR模型的参数 θ \theta θ
1. 线性模型中代价函数是模型误差的平方和 :
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum^m_{i=1}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
如果直接使用线性模型中的代价函数,即误差平方和,得到的代价函数是个**“非凸函数”**,但是实际上我们期望看的是凸函数(右边)
-
重新定义逻辑回归的代价函数
h θ ( x ) = g ( θ T X ) = 1 1 + e − θ T X h_\theta(x)=g(\theta^TX)= \frac{1}{1+e^{-\theta^TX}} hθ(x)=g(θTX)=1+e−θTX1
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J(\theta)=\frac{1}{m}\sum^m_{i=1}Cost(h_\theta(x^{(i)}),y^{(i)}) J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
C o s t ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) , y=1 − log ( 1 − h θ ( x ) ) , y=0 Cost(h_\theta(x), y) = \begin{cases} -\log(h_\theta(x)), & \text{y=1} \ -\log(1-h_\theta(x)), & \text{y=0} \ \end{cases} Cost(hθ(x),y)={−log(hθ(x)),y=1 −log(1−hθ(x)),y=0
将上面的两个式子进行合并:
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)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
- h θ ( x ) h_\theta(x) hθ(x)和 C o s t ( h θ ( x ) , y ) Cost(h_\theta(x),y) Cost(hθ(x),y)之间的关系
根据y的不同取值来进行分别判断,同时需要注意的是:假设函数h的取值只在[0,1]之间
y=1的情形
y=0的情形
Python代码实现代价函数
利用Python
实现下面的代价函数
first
表示的是右边第一项second
表示的是右边第二项
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)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
import numpy as np
def cost(theta, X, y):
# 实现代价函数
theta=np.matrix(theta)
X = np.matrix(X)
y = np.matrxi(y)
first = np.multiply(-y, np.log(sigmod(X * theta.T)))
second = np.multiply((1 - y), np.log(1-sigmod(X * theta.T)))
return np.sum(first - second) / (len(X))
利用梯度下降来求解LR最小参数
1、LR中的代价函数是
J ( θ ) = − 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x i ) ) ] J(\theta)=-\frac{1}{m}\sum^m_{i=1}[-y^{(i)}\log(h_\theta(x^{(i)}))-(1-y^{(i)})\log(1-h_\theta(x^{i}))] J(θ)=−m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(xi))]
2、最终结果
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j}=\frac{1}{m}\sum^m_{i=1}[h_\theta(x^{(i)})-y^{(i)}]x_j^{(i)} ∂θj∂J(θ)=m1i=1∑m[hθ(x(i))−y(i)]xj(i)
3、具体过程
不断地迭代更新 θ j : \theta_{j}: θj:
θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_{j} := \theta_j-\alpha\frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α∂θj∂J(θ)
θ j : = θ j − α 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) \theta_{j} := \theta_j-\alpha\frac{1}{m}\sum^m_{i=1}[h_\theta(x^{(i)})-y^{(i)}]x_j^{(i)} θj:=θj−αm1i=1∑m[hθ(x(i))−y(i)]xj(i)
如果存在n个特征,也就是 θ = [ θ 0 , θ 1 , … , θ n ] T \theta=[\theta_0,\theta_1,…,\theta_n]^T θ=[θ0,θ1,…,θn]T。那么就需要根据上面的式子从 0 n 0~n 0 n来更新所有的 θ \theta θ
线性回归 VS 逻辑回归
- 假设的定义规则发生变化
线性回归:
h θ ( x ) = θ T X = θ 0 x 0 + . . . + θ n x n h_{\theta}{(x)}=\theta^TX=\theta_0x_0+...+\theta_nx_n hθ(x)=θTX=θ0x0+...+θnxn
逻辑回归:
h θ ( x ) = 1 1 + e − θ T X h_\theta{(x)}= \frac{1}{1+e^{-\theta^{T}X}} hθ(x)=1+e−θTX1
因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
其他求解代价函数最小的算法
- 共轭梯度
conjugate gradient
- 局部优化法
Broyden fletcher goldfarb shann,BFGS
- 有限内存局部优化法
LBFGS
多类别分类one-vs-all
我们举一个实际中的例子来说明:
假如现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作、朋友、家人或者有关兴趣爱好的邮件,那么,就有了这样一个分类问题:其类别有4个,分别用 y = 1 , 2 , 3 , 4 y=1,2,3,4 y=1,2,3,4 来代表。
](
正则化问题Regularization
正则化基础
正则化技术主要是为了解决过拟合的问题。过拟合指的是:对样本数据具有很好的判断能力,但是对新的数据预测能力很差。
- 第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集
- 第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据
- 中间的模型似乎最合适
如果是多项式拟合,x
的次数越高,拟合的效果越好,但是相应的预测能力就可能变差。对于过拟合的处理:
- 丢弃一些不能正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法,例如PCA
- 正则化。 保留所有的特征,但是减少参数的大小
magnitude
*
加入正则化参数
在模型 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4 hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4中,主要是高次项产生的过拟合问题:
加入正则化参数后能够防止过拟合问题,其中
λ
\lambda
λ是正则化参数Regularization Parameter
那么,相应的代价函数变成为:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 J(\theta)=\frac{1}{2m}\sum^m_{i=1}(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda \sum^n_{j=1}\theta^2_{j} J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2
Attention:
- 一般地,不对 θ 0 \theta_0 θ0进行惩罚;加上正则化参数实际上是对参数 θ \theta θ进行惩罚。经过正则化处理后的模型和原模型的对比:
- 如果 λ \lambda λ过大,所有的参数最小化,模型变成了 h θ ( x ) = θ 0 h_\theta(x)=\theta_0 hθ(x)=θ0,造成了过拟合
正则化线性回归Regularized Linear Regression
正则化线性回归的代价函数:
J ( θ ) = 1 2 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2m}\sum^m_{i=1}[(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda \sum^n_{j=1}\theta^2_{j}] J(θ)=2m1i=1∑m[(hθ(x(i))−y(i))2+λj=1∑nθj2]
Attention:在线性回归中,不对 θ 0 \theta_0 θ0进行正则化:
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}} θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i)
当 j = 1 , 2 , … , n j=1,2,…,n j=1,2,…,n时:
θ j : = θ j − a [ 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] ; j = 1 , 2 , . . . , n {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}] ;j=1,2,...,n θj:=θj−a[m1i=1∑m((hθ(x(i))−y(i))xj(i)+mλθj];j=1,2,...,n
调整下变成:
θ j : = θ j ( 1 − λ m ) − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) {\theta_j}:={\theta_j}(1-\frac{\lambda }{m})-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}} θj:=θj(1−mλ)−am1i=1∑m((hθ(x(i))−y(i))xj(i)
正则化逻辑回归Regularized Logistic Regression
LR
问题两种优化方法:
- 梯度下降法
- 更高级优化算法
加上正则惩罚项后的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x i ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=\frac{1}{m}\sum^m_{i=1}[-y^{(i)}\log(h_\theta(x^{(i)}))-(1-y^{(i)})\log(1-h_\theta(x^{i}))]+\frac{\lambda}{2m}\sum^n_{j=1}\theta^2_j J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(xi))]+2mλj=1∑nθj2
python代码实现
import numpy as np
# 实现代价函数
def costReg(theta, X, y, lr):
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)))
reg = (lr / (2 * len(X)) * np.sum(np.power(theta[:, 1:theta.shape[1]], 2)) # theta[:, 1:theta.shape[1]] 代表的是 \theta_j
return np.sum(first - second) / len((X)) + reg
通过求导,得到梯度下降算法,本质上就是对 θ \theta θ的不断更新:
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}}) θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i))
θ j : = θ j − a [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] ; j = 1 , 2 , . . . , n {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}] ; j=1,2,...,n θj:=θj−a[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj];j=1,2,...,n