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

  • 相关阅读:
    HDU 1010 Tempter of the Bone
    HDU 4421 Bit Magic(奇葩式解法)
    HDU 2614 Beat 深搜DFS
    HDU 1495 非常可乐 BFS 搜索
    Road to Cinema
    Sea Battle
    Interview with Oleg
    Spotlights
    Substring
    Dominating Patterns
  • 原文地址:https://www.cnblogs.com/houkai/p/6369870.html
Copyright © 2011-2022 走看看