zoukankan      html  css  js  c++  java
  • 机器学习公开课笔记(2):多元线性回归

    多元线性回归

    一元线性回归只有一个特征$x$,而多元线性回归可以有多个特征$x_1, x_2, ldots, x_n$

    假设 (Hypothesis):$h_ heta(x)= heta^Tx= heta_0x_0+ heta_1x_1+ldots+ heta_nx_n$

    参数 (Parameters):$ heta_0,  heta_1, ldots, heta_n$

    代价函数 (Cost function):$J( heta_0,  heta_1, ldots,  heta_n)=frac{1}{2m}sumlimits_{i=1}^{m}(h_ heta(x^{(i)}) - y^{(i)})^2$

    目标 (Goal):$min_ heta J( heta)$

    梯度下降 (Gradient Descent)

    迭代更新参数$ heta$: $ heta_j =  heta_j - alpha frac{1}{m}sumlimits_{i=1}^{m}(h_ heta(x^{(i)})-y^{(i)})x_j^{(i)}$   for $j = 0, 1, 2, ldots, n$

    向量化实现 (Vectorized Implementation):$ heta =  heta - alpha frac{1}{m}(X^T(X heta-y))$

    Feature Scaling

    动机:如果不同特征之间的数值量级差别太大,那么梯度下降的速度非常慢,为了加快算法的收敛速度,将各个特征划归到统一数量级,一般是[0, 1]或者[-1, 1]之间

    Trick1: $x_j = frac{x_j - mu_j}{s_j}$, 其中 $mu_j$表示第j个特征的均值, $s_j$表示第j个特征的范围(max - min)或者标准差(standard deviation)

    Trick2: 学习速率的选择

    • 合理的选择学习速率,保证$J( heta)$的值在每一次迭代后都是下降的;
    • 如果$J( heta)$随迭代次数单调递增或者$J( heta)$随迭代次数成波浪形(例如: //////), 这时候应该考虑选择较小的$alpha$; 但是$alpha$太小会导致收敛速度过慢
    • 为了正确的选择 $alpha$,尝试序列 0.001, 0.01, 0.1, 1等

    Normal Equation的数学推导

    解析推导过程:
    $$J( heta)=frac{1}{2m}sumlimits_{i=1}^{m}left(h_ heta(x^{x(i)})-y^{(i)} ight)$$
    可以简化写成向量的形式:
    $$J( heta)=frac{1}{2m}||X heta-y||^2=frac{1}{2m}(X heta-y)^T(X heta-y)$$
    展开可得:
    $$J( heta)=frac{1}{2m}[ heta^TX^TX heta-y^TX heta- heta^TX^Ty+y^Ty]$$ 注意到$y^TX heta$是一个标量,因此它与其转置$ heta^TX^Ty$是相等的,即中间两项是相等的,从而$J( heta)$可以进一步化简为:
    $$J( heta) = frac{1}{2m}[X^TX heta-2 heta^TX^Ty+y^Ty]$$
    对向量的求导与单变量的求导法则有诸多不同,这里不加证明给出如下两个重要的向量求导结论(具体可参照向量矩阵求导
    egin{equation}d(X^TAX)/dX = (dX^T/dX)AX + (d(AX)^T/dX)X = AX + A^TX end{equation}
    egin{equation}d(X^TA)/dX = (dX^T/dX)A + (dA/dX)X^T = IA + 0X^T = Aend{equation}
    根据结论(1), 第一项的求导结果为$X^TX heta+X^TX heta=2X^TX heta$; 根据结论(2),第二项的求导结果为$-2x^Ty$;第三项不含$ heta$,求导结果当然为0,整合三项我们可以得到$J( heta)$的导数$frac{dJ( heta)}{d heta}$,
    $$frac{dJ( heta)}{d heta}=frac{1}{2m}(2X^TX heta-2X^Ty)$$
    令该导数等于0,我们很容易得到
    $$ heta=(X^X)^{-1}X^Ty$$
    这就是使得代价函数$J( heta)$取得最小值对应的$ heta$。

    梯度下降和Normal Equation优劣对比

     
    Gradient Descent Normal Equation
    需要选择合适的$alpha$ 不需要选择$alpha$
    需要不断的迭代 不需要迭代
    当特征非常多时(n非常大),算法依然表现良好 当n非常大时,计算速度非常慢,因为需要计算$(X^TX)^{-1}$复杂度为$O(n^3)$

    参考文献

    [1] Andrew Ng Coursera 公开课第二周

  • 相关阅读:
    按某列分表程序
    vba里设置读取背景和字体颜色
    今天写代码的一点心得!
    vba十进制转二进制
    我的心情
    数据按列拆分(可选择)
    HashMap源码分析(一):JDK源码分析系列
    HashMap源码分析(二):看完彻底了解HashMap
    JDK源码阅读(三):ArraryList源码解析
    SpringBoot使用Docker快速部署项目
  • 原文地址:https://www.cnblogs.com/python27/p/MachineLearningWeek02.html
Copyright © 2011-2022 走看看