zoukankan      html  css  js  c++  java
  • 【吴恩达机器学习笔记】线性回归模型之多变量线性回归

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

    1.1 假设函数(Hypothesis function)

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

    1.2 代价函数(Cost function)

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

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

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

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

    将代价函数代入更新公式:
    repeat until convergence{
    θj=θjα1mi=1m(h(θ)(x(i))y(i))xj(i)(forj=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)

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

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

    2.1 特征缩放(Feature Scaling)

    2.1.1 特征缩放目的:

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

    2.1.2特征缩放方法

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

    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+θ1x+θ2x2+θ3x3h_θ(x) = θ_0 + θ_1x + θ_2x^2 + θ_3x^3
    只需令x1=x,x2=x2,x3=x3x_1 = x,x_2 = x^2, x_3 = x^3,则hθ(x)=θ0+θ1x1+θ2x2+θ3x3h_θ(x) = θ_0 + θ_1x_1 + θ_2x_2 + θ_3x_3,这样即可用多元线性回归方法来求解。

    4.正规方程组(Normal equations)

    4.1 正规方程组介绍

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

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

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

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

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

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

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

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

    5.1 代价函数

    代价函数的向量形式
    J(θ)=12m(Xθy)T(Xθy)J(θ) = frac{1}{2m}(Xθ-vec y)^T(Xθ-vec 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α1m(Xθy)xjθ_{j} = θ_{j} - α frac{1}{m}(Xθ-vec{y})x_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
    
  • 相关阅读:
    软件需求分析阅读笔记2
    Ubuntu上的Hbase集群搭建
    Form的Load事件的添加
    软件需求与分析大作业进度(二)
    软件需求与分析大作业进度(一)
    第四周学习进度总结
    使用vmware+Ubuntu搭建hadoop集群
    团队十日冲刺10
    用户模板和用户场景
    团队十日冲刺9
  • 原文地址:https://www.cnblogs.com/siplifyit/p/12109229.html
Copyright © 2011-2022 走看看