zoukankan      html  css  js  c++  java
  • 机器学习线性模型

    线性模型

    最小二乘法(LMS)

    数理推导

    给定数据 (D={(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(N)},y^{(N)})})(h_{ heta}(x)= heta^T x= heta_0x_0+ heta_1x_1+...+ heta_nx_n= heta_0+ heta_1x_1+...+ heta_nx_n)

    给定 (N) 组数据:

    [ heta_0+ heta_1x_1^{(1)}+ heta_2x_2^{(1)}+...+ heta_nx_n^{(1)}=y^{(1)} ]

    [ heta_0+ heta_1x_1^{(2)}+ heta_2x_2^{(2)}+...+ heta_nx_n^{(2)}=y^{(2)}\ vdots ]

    [ heta_0+ heta_1x_1^{(N)}+ heta_2x_2^{(N)}+...+ heta_nx_n^{(N)}=y^{(N)} ]

    求解 ( heta),使得输入 (x),得到 (widehat{y})(y)尽可能相似。求解线性方程组。

    [A =left[egin{matrix} 1& x_1^{(1)} & dots & x_n^{(1)} \ 1 & x_2^{(1)} & dots & x_n^{(2)} \ vdots & vdots & quad & vdots \ 1 & x_1^{(N)} & dots & x_n^{(N)} end{matrix} ight] ]

    [ heta =left[egin{matrix} heta_0 \ heta_1 \ vdots \ heta_nend{matrix} ight] ]

    [Y=left[egin{matrix}y^{(0)} \y^{(1)} \ vdots \ y^{(N)}end{matrix} ight] ]

    (Rightarrow 求解A heta = Y),使得(A heta)尽可能拟合(Y)

    [S=min_{ heta}||A heta-Y||_2^2quad (二范数的平方)\=(A heta-Y)^T(A heta-Y)\=( heta^TA^T-Y^T)(A heta-Y)\= heta^TA^TA heta- heta^TA^TY-Y^TA heta+Y^TY\= heta^TA^TA heta-2 heta^TA^TY+Y^TY ]

    最优解即:

    [frac{partial S}{partial heta}=0 Rightarrow frac{ heta^TA^TA heta-2 heta^TA^TY+Y^TY}{partial heta}=frac{partial ( heta^TA^TA heta)}{partial heta}-2A^TY+0 ]

    因为 (frac{d(u^Tv)}{dx}=frac{du^T}{dx}v+frac{dv^T}{dx}u)

    所以 (frac{d(x^Tx)}{dx}=frac{dx^T}{dx}x+frac{dx^T}{dx}x=2x)

    进一步 (frac{d(x^TBx)}{dx}=frac{dx^T}{dx}Bx+frac{dx^TB^T}{dx}x=Bx+B^Tx=(B+B^T)xquad B是方阵)

    应用到方程中,将 (A^TA) 对应方阵 (B),则 (frac{partial S}{partial heta}=2A^TA heta-2A^TY=0quad Rightarrow A^TA heta = A^TY)

    [ heta=(A^TA)^{-1}A^TY ]

    • 数据较小时(不超百万)用最小二乘法代替梯度下降可以取得不错的结果。
    • 求矩阵的逆是最消耗时间的
    • 用梯度下降会存在收敛问题,步长(alpha) 选不好还会震荡

    几何意义推导

    1. 假设普通二维方程,有解的情况

      [egin{cases}x_1+x_2=3\-x_1+x_2=1end{cases} ]

      写成矩阵形式

      [left[egin{matrix}1&1\-1&1end{matrix} ight]left[egin{matrix}x_1\x_2end{matrix} ight]=left[egin{matrix}3\1end{matrix} ight] ]

      记列向量(left[egin{matrix}1\-1end{matrix} ight])(a_1),列向量(left[egin{matrix}1\1end{matrix} ight])(a_2),转化为

      [a_1x_1+a_2x_2=y ]

      即在向量(a_1)和向量(a_2)张成的空间里表示出向量(y)

      1.png

    2. 推广至方程无解的情况

      假设有三个点(0,2)(1,2)(2,3),求函数(y=ax+b)拟合这三个点。

      写成函数形式

      [egin{cases}acdot0+b=2\acdot1+b=2\acdot2+b=3end{cases} ]

      写成矩阵形式

      [left[egin{matrix}0&1\1&1\2&1end{matrix} ight]left[egin{matrix}x_1\x_2end{matrix} ight]=left[egin{matrix}2\2\3end{matrix} ight] ]

      记列向量(left[egin{matrix}0\1\2end{matrix} ight])(a_1),列向量(left[egin{matrix}1\1\1end{matrix} ight])(a_2)

      2.png

      在向量(a_1)和向量(a_2)张成的空间里无法表示出向量(y),只能表示出向量(y)在该平面上的投影(widehat{y}),记向量(y-widehat{y}=e),其中

      [widehat{y}=A heta ]

      则向量(e)垂直于向量(a_1)和向量(a_2)张成的空间。

      [egin{cases}a_1cdot e=0\a_2cdot e=0end{cases} ]

      (A^Te=0)

      代入得

      [A^T(y-A heta)=0\A^Ty-A^TA heta=0\A^Ty=A^TA heta\ heta=(A^TA)^{-1}A^Ty ]

    极大似然 ( MLE )

    极大似然:“最像”、“最大似然”

    利用已知观察数据反推模型参数值,调整( heta) 使得样本出现概率最大。

    参考:极大似然估计详解

    求最大似然函数估计值的一般步骤:

    (1)写出似然函数;
    (2)对似然函数取对数,并整理;
    (3)求导数,令导数为0,得到似然方程;
    (4)解似然方程,得到的参数即为所求;

    Logistic回归(LR,逻辑回归模型,对数几率回归,二分类)

    1. (0,1) 的连续函数

    2. 构造这样的连续函数,使得函数对于输出大于 0.5 时判为一类,小于 0.5时判为另一类。

      1. Sigmoid Function:(phi(z)=frac{1}{1+e^{-z}})
      2. 把 Sigmoid Function 里的变量 z,构造成线性组合
    3. Equations:(P(y=1|x)=frac{1}{1+exp( - heta^Tx)})

      1. 把线性关系通过 Sigmoid 函数映射到 (0,1)
      2. 线性关系映射为非线性的,还是拟合函数点,但最终结果是做分类
    4. 定义几率 odds

      统计和概率论中,定义一个事件的发生比 (Odds) 是该事件发生和不发生的比率。

      [odds(p)=frac{p}{1-p} ]

      (odds) 取对数,也就是 (logfrac{p}{1-p}=logp-log(1-p))

      (logfrac{P(y=1|x)}{P(y=0|x)}=logfrac{1}{1+exp(- heta^Tx)}-log(1-frac{1}{1+exp(- heta^Tx)})=- heta^Tx)

      1. 几率 odds 还是线性的
    5. 定义损失函数

      [J( heta)=-frac{1}{N}[sum_{i=1}^Nsum_{j=0}^1 I(y^{(i)}=j)logP(y^{(i)}=j|x^{(i)}, heta)]\=-frac{1}{N}[sum_{i=1}^N y^{(i)}logh_{ heta}(x^{(i)})+(1-y^{(i)})log(1-h_{ heta}(x^{(i)}))] ]

      • 累加分对了的部分,加了负号,分得越对函数值越小
      • 使用 log,由乘积形式转为加和形式
    6. 梯度下降求最优值

      [ heta leftarrow heta - alpha frac{partial J( heta)}{partial heta} ]

    Softmax Regression ( Logistic 多分类引申 )

    [P(y=1|x)=frac{1}{1+exp( - heta^Tx)}=frac{exp( heta^Tx)}{exp( heta^Tx)+1} ]

    [P(y=0|x)=frac{1}{exp( heta^Tx)+1} ]

    引申为多分类情况

    [P(y^{(i)}=k|x; heta)=frac{exp( heta_k^T x^{(i)})}{sum_{j=1}^kexp( heta_j^T x^{(i)})} ]

    岭回归 (Ridge Regression)

    前言:回归分析中常用最小二乘法,由 (A heta=y) 采用最小二乘法,定义损失函数为残差的平方,最小化损失函数 (||A heta-y||^2) ,采用梯度下降法求解,也可直接用公式 ( heta=(A^TA)^{-1}A^Ty) 求解,若矩阵 (A) 不能求逆该如何解决问题。

    岭回归

    对损失函数加一些正则项 ( regularization ),对系数加一些条件

    [J( heta)=frac{1}{2N}||x heta-Y||_2^2+frac{1}{2}alpha || heta||_2^2 ]

    • 下角标 2 表示 L-2 norm:(|| heta||_2=sqrt{ heta_1^2+ heta_2^2+...+ heta_n^2})

    • 加入正则项 (frac{1}{2}alpha || heta||_2^2) ,新的损失函数 (J( heta)) 既满足 (x heta)(y) 尽可能逼近,又限制 ( heta) 取得过大的值。

    • (alpha) 值像是一个权重,调整逼近程度与 ( heta) 值之间的关系

    梯度下降

    循环求解 ( Iterative Learning ) ,寻找使得 (J( heta)) 最小的 ( heta)

    [GD:quad heta leftarrow heta-alpha frac{partial J( heta)}{partial( heta)} ]

    • (alpha) 是求解的步长
    • (GD) 就是一个求解的方向
    1. 二维线性拟合

      [h( heta) = heta_1x+ heta_0 ]

      [egin{cases} heta_0 leftarrow heta_0-alpha frac{partial J}{partial heta_0}\ heta_1 leftarrow heta_1-alpha frac{partial J}{partial heta_1}end{cases} ]

      • 迭代一定是同时更新 ( heta_0、 heta_1)(alpha) 有自动修正性能,只要不是太大且沿着正确方向迭代,一定能找到最小值。

      [frac{J}{partial heta_0}=frac{partial}{partial heta_0}(frac{1}{2N}sum_{i=0}^N (h_{ heta}(x^{(i)})-y^{(i)})^2)=frac{1}{N}sum_{i=0}^N(h_{ heta}(x^{(i)})-y^{(i)}) ]

      [frac{J}{partial heta_1}=frac{partial}{partial heta_1}(frac{1}{2N}sum_{i=0}^N (h_{ heta}(x^{(i)})-y^{(i)})^2)=frac{1}{N}sum_{i=0}^N(h_{ heta}(x^{(i)})-y^{(i)})x^{(i)} ]

      • (h( heta) = heta_1x+ heta_0) 写成 (h( heta) = heta_1x_1+ heta_0x_0(x_0=1))(frac{1}{N}sum_{i=0}^N(h_{ heta}(x^{(i)})-y^{(i)})) 相当于 (frac{1}{N}sum_{i=0}^N(h_{ heta}(x^{(i)})-y^{(i)})x_0)
      • (frac{1}{N}sum_{i=0}^N(h_{ heta}(x^{(i)})-y^{(i)})x^{(i)})相当于(frac{1}{N}sum_{i=0}^N(h_{ heta}(x^{(i)})-y^{(i)})x_1^{(i)})
    2. 高维线性拟合

      [h( heta) = heta^Tx=sum_{i=1}^n heta_j x_j = heta_1x_1+ heta_2x_2+...+ heta_nx_n+ heta_0 ]

      • ( heta) 更像每个特征的权重

      [ heta_j leftarrow heta_j-alpha frac{partial J( heta)}{partial heta_j}= heta_j-alpha(frac{1}{N}sum_{i=0}^N(h_{ heta}(x^{(i)})-y^{(i)})x_j^{(i)}) ]

    求解岭回归的损失函数

    梯度下降法

    因为加了惩罚项,所以梯度下降迭代公式为

    [ heta_j leftarrow heta_j-alpha(frac{1}{N}sum_{i=1}^N(h_{ heta}(x^{(i)})-y^{(i)})x_j^{(i)}+frac{lambda}{N} heta_j) ]

    • 梯度下降中用 (alpha) 表示步长,为了区分使用 (lambda) 表示正则项的系数
    • 正则项 (frac{1}{2}lambda || heta||_2^2)( heta) 求导正好等于 (lambda heta)

    [ heta_jleftarrow (1-frac{alpha lambda}{N}) heta_j-alpha(frac{1}{N}sum_{i=1}^N(h_{ heta}(x^{(i)})-y^{(i)})x_j^{(i)} ]

    • (alpha(frac{1}{N}sum_{i=1}^N(h_{ heta}(x^{(i)})-y^{(i)})x_j^{(i)}) 部分每次更新是不变的
    • ((1-frac{alpha lambda}{N})) 中,$ alpha $ 学习速率一般 0.1~0.5,$ lambda$ 相对权重一般也比较小,但 (N) 一般特别大,所以 (frac{alpha lambda}{N}) 是一个很小的小数。每次迭代使得 ( heta_j) 缩小。

    最小二乘法

    最小二乘原始写法:$$ heta=(ATA){-1}A^TY$$

    加上岭回归:$$widehat{ heta}=(A^TA+lambda I){-1}ATY $$

    • (A^TA) 是(n+1)*(n+1)的
    • (I) 也必须是 (n+1)*(n+1),但对角线并不全是1,而是 (diag(0,1,1...)),不算是标准的单位矩阵。因为 ( heta_0) 不需要加惩罚项部分。
    • 对于非满秩矩阵加上惩罚项就可以求逆了
    • 一般应用最小二乘都是加上岭回归的最小二乘

    LASSO回归 ( Least Absolute Shrinkage and Selection Operator)

    正则项加的是(L-1norm)

    [J( heta)=frac{1}{2}||x heta-Y||_2^2+lambda || heta||_1 ]

    • 对特征 ( heta_j) 有选择功能,相当于选择出非 0 的特征
      • 希望 (h_{ heta}(x)= heta_0+ heta_1x_1+ heta_2x_2+...+ heta_nx_n) 中特征向量( heta^T)中有尽可能多的 0,即 (L-0 norm) 尽可能小
      • 但是(L-0norm)不是一个凸函数甚至不是一个连续函数,很难优化
      • 使用 (L-1norm) 逼近 (L-0norm)
    • (L-1norm) 可减少复杂度
    • 1范数连续且是凸函数,但在一些点不可导,所以不可用梯度下降优化

    LASSO优化

    参考:[Lasso回归算法: 坐标轴下降法与最小角回归法小结]

    [J( heta)=Min||x heta-Y||_2^2+lambda || heta||_1=Min||x heta-Y||_2^2+lambda sum_j| heta_j| ]

    一. Coordinate Descent ( 坐标轴梯度下降 )

    先求任何给定 $ heta_j $,在该维度找到最小值,在 ( heta_j) 维度将最小值固定;选取另外一个维度 ( heta_k),从 ( heta_j) 维度最小值出发,寻找 $ heta_k $ 维度最小值,不断调整。

    • 先求 ( heta)(Y) 之间的距离,选取相似度最大的 ( heta_i) 作为起始维度 ( 影响有限 )
    • 每个维度都要搜索

    二.Forward Selection ( 前向选择 )

    (y) 在特征维度组成的平面的投影 $widehat{y} $

    [widehat{y}= heta_1x_1+ heta_2x_2\(y-widehat{y})=e\e perp L(x_1,x_2) ]

    • 导出最小二乘法计算公式
    • 在每一个维度方向求一个 $ heta_i $,使得向量加和等于 $widehat{y} $
    • 只需要执行一次操作,效率高,速度快。但当自变量不是正交的时候,由于每次都是在做投影,所有算法只能给出一个局部近似解

    三.Forward Strategy ( 前向梯度 )

    • 基于计算的形式,求 (y) 在特征维度组成的平面的投影 $widehat{y} $。
    • 在平面内沿着 cost function 减少的方向移动。
    • 每一次更新同时计算 (varepsilon x_i) , 计算在哪个维度损失最小,就往哪个维度走 (varepsilon)
    • 当算法在 (varepsilon) 很小的时候,可以很精确的给出最优解,迭代次数也大大的增加。和前向选择算法相比,前向梯度算法更加精确,但是更加复杂。

    四.Least Angle Regression ( 角回归,LARS )

    • 先一步找到最合适的 ( heta_1x_1)
    • 找到 (x_2)( heta_1x_1) 的角平分线
    • 在角分线上不断加 (varepsilon) 使得损失函数最小
    • 最小角回归法对前向梯度算法和前向选择算法做了折中,保留了前向梯度算法一定程度的精确性,同时简化了前向梯度算法一步步迭代的过程

    线性模型总结

    1. 线性模型就是在高维空间里用线性方程拟合数据
    2. 维度过高时添加约束项,约束项使用 (L-2norm) 可直接优化,使用 (L-1 norm) 就需要角回归等特殊优化方法
    3. 对于如何选择合适系数 ( heta^T) 使得 (widehat{y}) 更逼近期望结果,一般使用损失函数衡量。损失函数一般是 (L-2norm)
  • 相关阅读:
    Python数据库查询中文乱码的问题处理
    Unable to update the EntitySet 'Relationship' because it has a DefiningQuery and no <DeleteFunction> element exists in the <ModificationFunctionMapping> element to support the current operation
    Entity Framework入门教程:通过Entity Framework实现数据库数据的增、删、改
    推荐几款.NET客户端开源报表图
    Entity Framework入门教程:SQLite数据源访问
    Entity Framework入门教程: Entity Framework支持的查询方式
    无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6”
    Entity Framework入门教程:创建实体数据模型
    WPF's Style BasedOn
    在 WPF 中使用 Path 路径
  • 原文地址:https://www.cnblogs.com/ColleenHe/p/11600571.html
Copyright © 2011-2022 走看看