zoukankan      html  css  js  c++  java
  • 机器学习笔记(3)多变量线性回归

    模型介绍

    多变量线性回归类似于单变量线性回归,只是需要考虑的影响特征数目变多,通过对多个变量xi进行分析,进而预测结果y。类似于单变量线性回归的假设函数,给出多变量线性回归的假设函数:

    [h_θ(x)=θ_0+θ_1x_1+θ_2x_2+…+θ_nx_n ]

    利用线性代数的知识,可以将系数θ定义为一个向量:

    [θ=left[ egin{matrix} θ_0 \ θ_1 \ θ_2 \ vdots \ θ_n end{matrix} ight] ]

    变量x定义为:

    [x=left[ egin{matrix} x_0 \ x_1 \ x_2 \ vdots \ x_n end{matrix} ight] ]

    则假设函数可以写成:

    [h_θ=θ^Tx ]

    代价函数

    类似于单变量线性回归,我们有n个特征值,我们写出代价函数:

    [J(θ)=frac{1}{2m}sum_{i=1}^{m} {(h_θ(x^{(i)})-y^{(i)})^2} ]

    梯度下降

    [θ_j:=θ_j-αfrac{∂}{∂θ_j}J(θ) ]

    [(for (j=0,……n)) ]

    解开之后的规律为:

    [θ_j:=θ_j-αfrac{1}{m}sum_{i=1}^{m} {(h_θ(x^{(i)})-y^{(i)})x_j^{(i)}} ]

    当然对于某些情况,例如对于一个多变量的模型,其各个变量的取值范围差异很大,就会导致在执行梯度下降的过程中,速度缓慢且可能产生波动。所以引出一个技巧:

    特征缩放

    对于上述的情况,希望能将各变量的取值范围保持在(-1leq xleq 1)类似的一个范围里,并且使得各变量的取值范围一致。

    利用均值归一化,可以得到一个比较理想的结果:

    [x_i=frac{x_i-μ_i}{s_i} ]

    其中μ为x训练集的平均数,s为范围的标准差。

    学习率α的选择

    可以通过描绘以迭代层数为x轴的J(θ)图像来观察梯度下降算法是否合理运行。以此为依据,调整合理的学习率α。

    正规方程

    梯度下降算法中的偏导数,可能不一定好计算,在之前的单变量线性回归中,分析过当(frac{∂}{∂θ_j}J(θ)=0)时算法到达边界,根据这个条件,给出下列算法:
    对于一组训练集:

    x0 x1 x2 x3 x4 y
    1 2104 5 1 45 460
    1 1416 3 2 40 232
    1 1534 3 2 30 315
    1 852 2 1 36 178

    可以分别写成矩阵:

    [X=left[ egin{matrix} 1 & 2104 & 5 & 1 & 45 \ 1 & 1416 & 3 & 2 & 40 \ 1 & 1534 & 3 & 2 & 30 \ 1 & 852 & 2 & 1 & 36 end{matrix} ight] ]

    和向量:

    [y=left[ egin{matrix} 460 \ 232 \ 315 \ 178 end{matrix} ight] ]

    则θ公式为:

    [θ=(X^TX)^{-1}X^Ty ]

    与梯度下降的选择

    • 梯度下降算法需要选择学习率α,正规方程不需要
    • 梯度下降算法需要很多次迭代,正规方程不需要
    • 梯度下降算法在在特征量很多的时候依然运行良好,而正规方程的时间复杂度为O(n3),在特征量数量很大的时候,效率会变低。(大约为104这个量级)
  • 相关阅读:
    Vue目录查询
    Vue框架学习(五)
    Vue框架学习(四)
    Vue框架学习(三)
    Vue框架学习(二)
    Vue框架学习(一)
    python中定义函数和参数的传递问题
    数据处理
    关于在程序中 文件新生成 在用os.system()程序对新生成的文件处理 举个栗子 如下:
    c++2008 并行配置文件和获取字典的所有key的方法
  • 原文地址:https://www.cnblogs.com/pullself/p/10484477.html
Copyright © 2011-2022 走看看