【吴恩达机器学习笔记】线性回归模型之多变量线性回归

1.多变量线性回归模型(Linear Regression with Multiple Variables)

1.1 假设函数(Hypothesis function)

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_θ(x) = θ_0 + θ_1x_1 + θ_2x_2 + ... + θ_nx_n hθ(x)=θ0+θ1x1+θ2x2+...+θnxn
为了表示方便,定义 x 0 = 1 ( 即 x 0 ( i ) = 1 ) x_0=1(即x_0^{(i)}=1) x0=1(x0(i)=1),从而
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n = θ T x h_θ(x) = θ_0x_0 + θ_1x_1 + θ_2x_2 + ... + θ_nx_n = θ^Tx hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn=θTx
其中θ、x均为(n+1)维的列向量
注:模型参数(Parameters): θ 1 , θ 2 , . . . θ n → θ_1,θ_2,...θ_n \to θ1,θ2,...θnθ((n+1)维列向量)

1.2 代价函数(Cost function)

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(θ) = \frac{1}{2m}\sum_{i=1}^{m}(h_θ(x^{(i)})-y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2
其中,θ为m维的向量, x ( i ) x^{(i)} x(i)表示特征向量x在第i条样本的取值, y ( i ) y^{(i)} y(i)则表示第i条样本的标签值。

代价函数的向量形式
J ( θ ) = 1 2 m ( X θ − y ⃗ ) T ( X θ − y ⃗ ) J(θ) = \frac{1}{2m}(Xθ-\vec y)^T(Xθ-\vec y) J(θ)=2m1(Xθy )T(Xθy )
其中, X = [ ⋯ ( x ( 1 ) ) T ⋯ ⋯ ( x ( 2 ) ) T ⋯ ⋮ ⋯ ( x ( m ) ) T ⋯ ] , y ⃗ = [ y ( 1 ) y ( 2 ) ⋮ y ( m ) ] X = \begin{bmatrix} \cdots & (x^{(1)})^T & \cdots \\ \cdots & (x^{(2)})^T & \cdots \\ & \vdots & \\ \cdots & (x^{(m)})^T & \cdots \end{bmatrix}, \qquad \vec y = \begin{bmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{bmatrix} X=(x(1))T(x(2))T(x(m))T,y =y(1)y(2)y(m), x ( i ) x^{(i)} x(i)为行向量,X为m*(n+1)维的矩阵, y ⃗ \vec y y 为m维列向量,θ为(n+1)维的列向量。

1.3 批量梯度下降法(Batch Gradient Descent Algorithm)

更新公式:
repeat until convergence{
θ j = θ j − α ∂ ∂ θ j J ( θ ) ( f o r j = 0 , 1 , 2 , . . . , n + 1 ) θ_j = θ_j - α \frac\partial{\partial θ_{j}}J(θ)(for j = 0,1,2,...,n+1) θj=θjαθjJ(θ)(forj=0,1,2,...,n+1)
}(同步更新 θ j θ_j θj)

将代价函数代入更新公式:
repeat until convergence{
θ j = θ j − α 1 m ∑ i = 1 m ( h ( θ ) ( x ( i ) ) − y ( i ) ) x j ( i ) ( f o r j = 0 , 1 , 2 , . . . , n + 1 ) θ_j = θ_j - α \frac{1}{m}\sum_{i=1}^{m}(h(θ)(x^{(i)})-y^{(i)})x_j^{(i)}(for j = 0,1,2,...,n+1) θj=θjαm1i=1m(h(θ)(x(i))y(i))xj(i)(forj=0,1,2,...,n+1)
}(同步更新 θ j θ_j θj)

进而将假设函数代入更新公式,有更新公式的向量形式:
repeat until convergence{
θ j = θ j − α 1 m ( X θ − y ⃗ ) x j θ_{j} = θ_{j} - α \frac{1}{m}(Xθ-\vec{y})x_j θj=θjαm1(Xθy )xj
}(同步更新 θ j θ_j θj)
其中, X = [ ⋯ ( x ( 1 ) ) T ⋯ ⋯ ( x ( 2 ) ) T ⋯ ⋮ ⋯ ( x ( m ) ) T ⋯ ] , y ⃗ = [ y ( 1 ) y ( 2 ) ⋮ y ( m ) ] X = \begin{bmatrix} \cdots & (x^{(1)})^T & \cdots \\ \cdots & (x^{(2)})^T & \cdots \\ & \vdots & \\ \cdots & (x^{(m)})^T & \cdots \end{bmatrix}, \qquad \vec y = \begin{bmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{bmatrix} X=(x(1))T(x(2))T(x(m))T,y =y(1)y(2)y(m), x ( i ) x^{(i)} x(i)为行向量,X为m*(n+1)维的矩阵, y ⃗ \vec y y x j x_j xj为m维列向量,θ为(n+1)维的列向量。

2.梯度下降算法中的实用技巧

2.1 特征缩放(Feature Scaling)

2.1.1 特征缩放目的:

特征缩放即使每个特征的值的范围在一个类似 − 1 ≤ x i ≤ 1 -1\leq x_{i}\leq1 1xi1的范围内。特征缩放的目的是使梯度下降法收敛更快一些,因此这个-1和1并不是严格要求,也就是说特征缩放不需要那么精确,即各特征范围在一个相似的范围内即可。例子如下:
0 ≤ x 1 ≤ 3 ✔ , − 2 ≤ x 2 ≤ 0.5 ✔ 0\leq x_{1}\leq3 ✔,-2\leq x_{2}\leq0.5 ✔ 0x132x20.5
− 100 ≤ x 3 ≤ 100 ✖ ( 过 大 ) , − 0.0001 ≤ x 3 ≤ 0.0001 ✖ ( 过 小 ) -100\leq x_{3}\leq100 ✖(过大),-0.0001\leq x_{3}\leq0.0001 ✖(过小) 100x3100()0.0001x30.0001()

2.1.2特征缩放方法

(1)方法一:
x i = x i m a x ( x i ) x_i = \frac{x_i}{max(x_i)} xi=max(xi)xi
(2)方法二:均值归一化(Mean normalization)
x i = x i − μ i S i x_i = \frac{x_i - μ_i}{S_i} xi=Sixiμi
其中 μ i μ_i μi为数据集中 x i x_i xi的均值, S i S_i Si为数据集中特征 x i x_i xi的取值范围(即max-min)或者样本中 x i x_i xi的标准差

2.2 选择合适的学习率α

2.2.1 确保梯度下降法正常工作。

如果梯度下降法正常工作的话,每一步迭代之后J(θ)都应下降,如下图
在这里插入图片描述
该图主要有两个作用:
(1)看梯度下降法是否正常工作
(2)判断梯度下降法何时收敛(还有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值 ϵ \epsilon ϵ(例如 0.001)进行比较,在某次迭代中变化值小于该阈值 ϵ \epsilon ϵ,即已收敛。但是选择一个合适的 ϵ \epsilon ϵ比较困难,故通常用上图判断较好。)

梯度下降算法的每次迭代受到学习率 α 的影响:

  • α 过小,梯度下降法收敛会很慢(只要α足够小,J(θ)在每次迭代之后都会变小)
  • α 过大,J(θ)不会在每次迭代中都变下,或者收敛很慢,甚至不收敛

2.2.2 如何选择合适的α

通常可以考虑尝试些学习率:

   ..., 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, ...

根据选择的学习率α画出上述J(θ)随着迭代次数变化的图,选择一个使J(θ)快速下降的一个α值,取最大可能值或者比最大可能值略小一些的α值。

3.特征选取和多项式回归

3.1 特征选取

选择合适的特征,有时可以得到更好的模型。数据和特征决定了机器学习的上限,而模型和算法只是逼近这一上限。

3.2 多项式回归(Polynomial regression)

线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个三次方
模型:
h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 h_θ(x) = θ_0 + θ_1x + θ_2x^2 + θ_3x^3 hθ(x)=θ0+θ1x+θ2x2+θ3x3
只需令 x 1 = x , x 2 = x 2 , x 3 = x 3 x_1 = x,x_2 = x^2, x_3 = x^3 x1=x,x2=x2,x3=x3,则 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 h_θ(x) = θ_0 + θ_1x_1 + θ_2x_2 + θ_3x_3 hθ(x)=θ0+θ1x1+θ2x2+θ3x3,这样即可用多元线性回归方法来求解。

4.正规方程组(Normal equations)

4.1 正规方程组介绍

正规方程组方法是一种求解上述多元线性回归模型中θ的解析解法,对于某些线性回归问题,它会使我们更好地求得θ的最优值。
公式:
θ = ( X T X ) − 1 X T y θ = (X^TX)^{-1}X^Ty θ=(XTX)1XTy
注:

  • (1)使用正规方程求解θ时,不用特征缩放
  • (2)正规方程原理:令 ∂ ∂ θ j J ( θ ) = 0 \frac\partial{\partial θ_{j}}J(θ) = 0 θjJ(θ)=0(for every j)解出 ( θ 0 , θ 1 , . . . , θ n ) (θ_0, θ_1, ..., θ_n) (θ0,θ1,...,θn)即θ的最优解。

4.2 正规方程与梯度下降法的比较

在这里插入图片描述
总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数 θ 的替代方
法。具体地说,只要特征变量数量小于10000,通常使用标准方程法,而不使用梯度下降法。

4.3 正规方程的特殊情况(选看)

正规方程需要求解 θ = ( X T X ) − 1 X T y θ = (X^TX)^{-1}X^Ty θ=(XTX)1XTy,但有些时候 X T X X^TX XTX不可逆:

  • (1)有冗余特征(即有线性相关的特征),此时去掉冗余特征即可。
  • (2)特征过多(比如 m ≤ n m\leq n mn),此时删掉一些特征或者用正则化(regularization)

5.代价函数及梯度下降的python实现(python 3.6)

5.1 代价函数

代价函数的向量形式
J ( θ ) = 1 2 m ( X θ − y ⃗ ) T ( X θ − y ⃗ ) J(θ) = \frac{1}{2m}(Xθ-\vec y)^T(Xθ-\vec y) J(θ)=2m1(Xθy )T(Xθy )

def computeCost(X, y, theta):
	inner = np.power(((X*theta)-y),2)
	Cost = np.sum(inner)/(2*len(X))
    return Cost

5.1 梯度下降法

梯度下降法更新公式的向量形式:
repeat until convergence{
θ j = θ j − α 1 m ( X θ − y ⃗ ) x j θ_{j} = θ_{j} - α \frac{1}{m}(Xθ-\vec{y})x_j θj=θjαm1(Xθy )xj
}(同步更新 θ j θ_j θj)

def gradientDescent(X, y, theta, alpha, iters):
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)
    
    for i in range(iters):
        error = (X * theta) - y
        for j in range(parameters):
            term = np.multiply(error, X[:,j])
            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
        theta = temp
        cost[i] = computeCost(X, y, theta)
    return theta, cost
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值