zoukankan      html  css  js  c++  java
  • 最小二乘法

    最小二乘法用于在回归分析中,计算overdetemined system的近似解。overdetemined system是指等式数目多余未知量的问题。其思想是:最小化各个等式的误差的平方和。

    最常见应用于数据拟合(如下),此时优化目标是最小化平方残差,残差即为观测值和模型计算的拟合值的差。

    220px-Linear_least_squares2

    按照残差项是够是线性的,最小二乘法分为两类:线性最小二乘、非线性最小二乘。

    线性最小二乘常见于回归分析,它有封闭的解(解具有等式形式,如 a*x^{2}+b*x+c=0 );非线性最小二乘通常是迭代寻优,每一次迭代中,将问题近似为线性。

    问题描述

    最小二乘问题的数学表示:

    left{
egin{array}{ll}
S=sum_{i=1}^{n}r_i^{2}\
r_{i}=y_{i}-f(x_{i},eta))
end{array}

ight.

    其中 f(x_{i},eta) 为模型, 如直线拟合中: f(x,eta)=eta_{0}+eta_{1}*x

    eta 为模型参数向量,观察值为 (x_{i},y_{i})\,i=1...n 

    算法求解

    min(S) 为问题的目标函数,最小化平方和,即寻找梯度为0的解,设有m个参数,则有:

    frac{partial{S}}{partial{eta_{j}}}=
2sum_{i=1}^{n}{r_{i}*frac{partial{r_{i}}}{partial{eta_{j}}}}=0, 其中 j=1...m.

    带入r_{i}=y_{i}-f(x_{i},eta) , 得到:

    -2sum_{i=1}^{n}{r_{i}*
frac{
partial{f(x_{i},eta)}
}{
partial{eta_{j}}
}
}=0, j=1...m (1)

    线性最小二乘法

    模型是参数的线性组合, f(x,eta)=sum_{j=1}^{m}{eta_{j}*phi_{j}(x)}, 其中 phi_j是x的函数(它是一个确定值)。所以:

    X_{ij}=frac{partial{f(x_{i},eta)}}{partial{eta_{j}}}=phi_{j}(x)

    r_{i}=y_{i}-sum_{j=1}^{m}{eta_{j}*X_{ij}} 带入(1)式子,得到矩阵形式:

    X^{T}Xhat{eta}=X^{T}y 其中X^{T}X是正定矩阵,所有:

    hat{eta}=(X^{T}X)^{-1}X^{T}y

    非线性最小二乘法

    并不存在上述类似的封闭解,而是采用数字算法来寻优hat{eta}, 为参数设置初值,然后进行迭代调优,直至收敛。

    eta_{j}^{k+1}=eta_{j}^{k}+Deltaeta_{j}, k为迭代的次数

    Deltaeta_{j} 称为 shift vector,位移向量。

    每一次迭代,模型可以用关于eta^{k} 的Taylor一阶展开进行线性近似:

    f(x_{i},hat{eta})=f(x_{i},eta^{k})+sum_{j=0}^{m}{
frac{partial{f(x_{i},eta)}}
{partial{eta_{j}}}*(eta_{j}-eta_{j}^{k})
}\
=f(x_{i},eta^{k})+sum_{j=0}^{m}{J_{ij}*Deltaeta_{j}} 

    J是确定数值的Jacobian矩阵(独立于y和参数β)。

    由此得:

    r_{i}=y_{i}-f(x_{i},eta^{k})-sum_{j=1}^{m}{J_{ij}Deltaeta{j}}=
Delta{y_{i}}-sum_{j=1}^{m}{J_{ij}Deltaeta_{j}}

    最小化上式,梯度为0,得:

    -2sum_{i=1}^{n}{r_{i}*J_{ij}}=0 (2)

    r_{i} 带入(2)式,得到结果的矩阵形式:

    J^{T}JDelta{eta}=J^{T}Delta{y}

    所以: Delta{eta}=(J^{T}J)^{-1}J^{T}Delta{y}

    这就是Gauss–Newton algorithm的等式。

    The Gauss–Newton algorithm is used to solve non-linear least squares problems. It is a modification of Newton's method for finding a minimum of a function. Unlike Newton's method, the Gauss–Newton algorithm can only be used to minimize a sum of squared function values, but it has the advantage that second derivatives, which can be challenging to compute, are not required.

    Gauss-Newton算法不同于Newton方法,它只用于最小化平方和问题,但是它具有类似二阶导的优势。

    参考:

    https://en.wikipedia.org/wiki/Least_squares

    https://en.wikipedia.org/wiki/Gauss%E2%80%93Newton_algorithm

    进一步扩展

    最速下降法

    在基本迭代公式中X_{k+1}=X_{k}+t_{k}P_{k} 中,每次迭代搜索方向 P_{k}取为目标函数f(x)的负梯度方向。

    P_{k}=-
abla{f(x_{k})}

    t_{k}为最优步长,由此确定的算法称为最速下降法。

    牛顿法

    设最优问题为:minf(X),其中f二阶可到,Hesse矩阵
abla^{2}{f(X)}正定。

    k次迭代得到x_{k}, 将f(x)在x_{k}处展开为二阶泰勒公式,得:

    f(X)≈Q(X)=f(X_{k})+
abla{f(X_{k})^{T}}(X-X_{k})+frac{1}{2}(X-X_{k})^{T}
abla^{2}f(X_{k})(X-X_{k}) 

    显然Q(X)是正定二次函数,所以Q(X)是凸函数,且存在唯一局部极小值,得

    X-X_{k}=frac{
abla{f(X_{k})}}
{
abla^{2}f(X_{k})}X-X_{k}=-frac{
abla{f(X_{k})}}{
abla^{2}f(X_{k})}

    所以:X=X_{k}-
}[
abla^{2}f(X_{k})]^{-1}{
abla{f(X_{k})}

    相应有:

    P_{k}=
-[
abla^{2}f(X_{k})]^{-1}{
abla{f(X_{k})}

    X_{k+1}=X_{k}+t_{k}P_{k}

    对于二次函数, 一次迭代即可得到最优值。

    Levenberg-Marquart算法

    LM算法实现了在最速下降法和Inverse-Hessian算法之间进行平稳的变化。是求解最小二乘法最常用的方法。

    J^{T}JDelta{eta}=J^{T}Delta{y}

    转化为:(1+lambda)*J^{T}JDeltaeta=J^{T}Delta{y}

    在L-M算法中,每一次迭代都是寻找一个合适的lambda值。算法开始时,通常取 lambda=10^{-3},若结算后的解eta导致误差减少,则接受clip_image002[1]的当前值,并在下一次迭代中以lambda/10代替lambda。若解导致误差的增大,则以10lambda代替lambda并重新求解增量方程。这个过程一直到求出一个使误差clip_image008[1]下降的Delta{eta}为止,构成L-M算法的一次迭代。

    参考:http://blog.csdn.net/wsj998689aa/article/details/40826775

  • 相关阅读:
    JQ_简单版图像点击切换(不是无缝)
    CSS_最简单,最难的对齐,以及其他
    JS_简单无缝图片滚动
    baiduMap
    JS_cookie
    JQ_简单图片无缝滚动
    JS_Flash调用函数
    高性能WEB开发(6) web性能测试工具推荐
    字符编码笔记:ASCII,Unicode和UTF8
    MIME
  • 原文地址:https://www.cnblogs.com/houkai/p/6369870.html
Copyright © 2011-2022 走看看