• 线性回归(linear regression)


    线性回归(Linear Regression)

    一、假设函数

    h θ ( x ) = θ T X = ∑ i = 0 n θ i x i = θ 0 + θ 1 x 1 + ⋯ + θ n x n h_\theta(x) = \theta^TX = \sum_{i=0}^{n}\theta_ix_i = \theta_0 + \theta_1x_1 + \cdots + \theta_nx_n hθ(x)=θTX=i=0nθixi=θ0+θ1x1++θnxn

    二、代价函数 - 平方误差函数

    J ( θ ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1m(h(x(i))y(i))2

    三、目标函数

    M i n J ( θ ) Min J(\theta) MinJ(θ)

    四、求解目标函数

    1、梯度下降

    伪代码
    repeat until convergence {
    θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 , . . . ) ( s i m u l a t e − f o r j = 0 , 1 , 2 , . . . ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\theta_0, \theta_1, ...) \qquad (simulate - for \quad j=0,1,2,...) θj:=θjαθjJ(θ0,θ1,...)(simulateforj=0,1,2,...)
    θ j : = θ j − α ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 ( f o r j = 0 , 1 , 2 , . . . ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}\frac{1}{2m}\sum_{i=1}^{m}(h(x^{(i)}) - y^{(i)})^2 \qquad (for \quad j=0,1,2,...) θj:=θjαθj2m1i=1m(h(x(i))y(i))2(forj=0,1,2,...)

    θ j : = θ j − α 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x ( i ) ( f o r j = 0 , 1 , 2 , . . . ) \theta_j := \theta_j - \alpha \frac{1}{m}\sum_{i=1}^{m}(h(x^{(i)}) - y^{(i)})x^{(i)} \qquad (for \quad j=0,1,2,...) θj:=θjαm1i=1m(h(x(i))y(i))x(i)(forj=0,1,2,...)
    }

    开始梯度下降之前:

    • 梯度下降对特征的值敏感,不同的特征取值差别太大会影响收敛效率,所以需要对特征进行归一化,如 x 1 = x 1 − μ 1 s 1 x_1=\frac{x_1-\mu_1}{s_1} x1=s1x1μ1 处理后数据集的均值为0,方差为1

    • 初始点不同可能导致的求解的结果不一样

    • 学习率太小,则学习时间太长;学习率太大,可能会错过最低点,最终在最低点来回摆动而无法到达最优;

    梯度下降ing:

    • 所有的 θ j \theta_j θj需要同一批次更新,即更新 θ 3 \theta_3 θ3的时候用的不是最新一批的 θ 1 , θ 2 \theta_1, \theta_2 θ1,θ2,而是上一批次的值,只有等到n-1个变量全都更新完后,才使用最新的值去计算下一批;
    • 求解的最低点倒数为0,越接近最低点倒数绝对值越小,所以 θ j \theta_j θj的变化也就越小
    • 每次迭代一个 θ j \theta_j θj都需要用全量的数据,消耗资源多

    梯度下降后:

    • 绘制梯度下降曲线,横坐标是迭代次数,纵坐标是损失函数的值。正常情况下曲线应该是单调递减,最后趋近稳定

    几种梯度下降方法:

    • Batch Gradient Descent
      1. 每一次迭代都需要使用全量的训练数据X
      2. 超参数
        学习率eta, 可以用grid search去找一个
        总迭代次数n_iterations, 用两次迭代之间的cost变化值,来衡量最大迭代次数选择的好坏
    • Stochastic Gradient Descent
      picks a random instance in the training set at every step and computes the gradients based only on that single instance随机的选择一个实例进行梯度下降
      1. 优点
        much faster
        makes it possible to train on huge training sets
        has a better chance of finding the global minimum than Batch Gradient Descent does 因为随机,所以更有可能找到全局最优解,而不是局部最优
      2. 缺点
        much less regular than Batch Gradient Descent
        最后只会在最小值附近徘徊,并不会停在最优解上
      3. One Solution
        simulated annealing
        一开始的时候大学习率, 更好的跳出局部最优
        接着就逐渐的降低学习率, 更好的收敛到最优解
      4. learning schedule 控制学习率
        learning rate is reduced too quickly, you may get stuck in a local minimum, or even end up frozen halfway to the minimum
        learning rate is reduced too slowly, you may jump around the minimum for a long time and end up with a suboptimal solution if you halt training too early
      5. 两种随机遍历的方法
        每次从m个实例中随机选取一个实例用以迭代,选择m次作为一次iteration
        先将m个实例shuffle,然后逐一遍历全部实例,也是执行m次作为一个iteration
    • Mini-batch Gradient Descent
      不同于批量梯度下降(每次处理全部实例的梯度),也不同于随机梯度下降(每次只处理一个实例的梯度),每次处理一小批实例的梯度(computes the gradients on small random sets of instances)
      1. 优势
        对比SGD,get a performance boost from hardware optimization of matrix operations, especially when using GPUs
        对比SGD,更加稳定规则,结果更接近最优解
      2. 劣势
        对比SGD,跳出局部最优稍微难一些

    2、正规方程

    居于,最优点的斜率应该为0,直接求解最小损失函数对应的 θ \theta θ向量值

    X = ( x 0 ( 1 ) x 1 ( 1 ) ⋯ x n ( 1 ) x 0 ( 2 ) x 1 ( 2 ) ⋯ x n ( 2 ) ⋯ ⋯ ⋯ ⋯ x 0 ( m ) x 1 ( m ) ⋯ x n ( m ) ) X =

    (x0(1)x1(1)xn(1)x0(2)x1(2)xn(2)x0(m)x1(m)xn(m))" role="presentation" style="position: relative;">(x0(1)x1(1)xn(1)x0(2)x1(2)xn(2)x0(m)x1(m)xn(m))
    X=x0(1)x0(2)x0(m)x1(1)x1(2)x1(m)xn(1)xn(2)xn(m)
    将所有的样本数据转化为一个(m, n+1)维的 X X X
    记住结论

    θ = ( X T X ) − 1 X T Y \theta = (X^TX)^{-1}X^TY θ=(XTX)1XTY

    注意:

    • (XTX){-1},(n+1, m)乘(m, n+1)等于(n+1, n+1)维,求这个矩阵的逆不容易,当n很
      大的时候,求解非常耗时,时间复杂度为 Θ ( n 3 ) \Theta(n^3) Θ(n3)
    • 当求解不可逆的时候,
      可能是因为 x i 和 x j x_i和x_j xixj存在线性关系(特征正规化处理),
      或者因为 m ≤ n m \leq n mn,即样本数量太小(减小n,删除一些特征来处理)

    3、梯度下降 VS 正规方程

    梯度下降正规方程
    需要选择学习率不需要学习率
    需要很多次的迭代不需要迭代
    特征维度n很大的时候可以工作n很大的时候,(n,n)矩阵的逆完全算不出来的

    五、多项式回归

    将原假设函数 h θ ( x ) = θ 0 + θ 1 x 1 + ⋯ + θ n x n h_\theta(x) = \theta_0 + \theta_1x_1 + \cdots + \theta_nx_n hθ(x)=θ0+θ1x1++θnxn中的 x i x_i xi改成多项式的形式,比如 θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 \theta_1x_1 + \theta_2x_2 + \theta_3x_1x_2 + \theta_4x_1^2 + \theta_5x_2^2 θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22

    注意,多项式回归方程中每一项都需要进行归一化

    @ 学必求其心得,业必贵其专精

  • 相关阅读:
    查看哪个docker环境在占用gpu
    接口测试经典面试题:Session、cookie、token有什么区别?
    数据类型的定义
    Java——抽象类+模板设计模式
    项目部署spring
    【毕业设计】基于SSM酒店后台管理系统
    第三方软件测试报告原来有这么多用途?还不知道的你out了!
    微信小程序使用阿里巴巴iconfont,报错Failed to load font http://at.alicdn.com/t/..........
    什么是北向接口和南向接口
    Docker基本操作二 (容器相关命令一)
  • 原文地址:https://blog.csdn.net/huanghaifeng201213/article/details/128045688