zoukankan      html  css  js  c++  java
  • 线性拟合之最小二乘方法和最小距离方法

    线性拟合即给定一组输入样本,求一个M阶多项式 的参数向量,使得拟合误差最小。这个M阶多项式虽然是关于x的非线性(当时)函数,但是是关于待求参数向量的线性函数,所以叫“线性”拟合。而拟合误差根据具体应用可以选用不同的标准,最常见、也是教科书上提供的一种误差标准叫做最小化方差,由这个标准导出的就是最小二乘法(Lease Square, LS);还有一种误差标准在轨迹点的拟合上用的比较多,应用于直线拟合情况,它的目标是最小化点到直线的距离和,本质上这也是一种最小二乘法。


    最小化方差

    我们将要拟合的多项式简写为,其中向量

    因此,可以写出目标函数

    这是一个关于的二次函数,通过对其求导数令结果等于0,即可求解。

    得到

    注意到是个数,它的转置是它本身,因此上式等价于

    如果我们定义两个记号,上式可进一步简化,记号定义如下:

    则上式可进一步简化为:

    最后解得

    对于直线拟合即M=1的情形,给出如下结论:


    最小化点到直线的距离和

    对于直线拟合问题,上面的最小化方差方法有几个缺点。第一,它假定了y的系数不为0,即直线不能垂直于x轴。第二,经过试验验证,当输入样本近似分布于一条垂直于x轴的直线附近时,拟合结果往往很不稳定。特别的,第三,对于轨迹点拟合问题,最小化方差没有很好的物理解释,而最小化点到直线的距离则可以很好的解释结果,而且也不存在第一点和第二点中的问题。

    对于以上第三点的说明,考虑这样一个问题,假设输入样本为一系列的经纬度数据,x表示经度(或维度)值,y表示维度(或经度)值。现在要拟合出一条直线来近似求出轨迹点的前进方向。此时,用最小化点到直线的距离拟合出的结果似乎更能说明问题,而且当轨迹点垂直于x轴时,拟合结果也更稳定。下面具体说明求解过程。

    设直线方程为,此时的优化目标为(为了使得目标函数连续可导,转化为最小化距离的平方和):

    不失一般性,假设,则上式无约束优化问题变为带等式约束的优化问题:

    利用拉格朗日方法求解,拉格朗日函数为:

    根据拉格朗日方法,需要先对a、b、c参数求导,令导数等于0:

     由(13)式可得:

    ,则,其中,带入拉格朗日函数得:

    因此,

    利用与前面类似的技巧,记

    上式可简化为:

    推出:

    可以看出,是矩阵A的特征向量,而是对应的特征值。我们只需要求出A的特征向量,即得到参数a和b的值,然后带入(14)式即可求得c。

    A是2X2的矩阵,我们知道它有两个特征值和两个特征向量,因此此问题有两个解。因为A是实对称矩阵,他的两个特征向量是正交的,这说明有两条互相垂直的直行分别对应原问题的两个局部极值点。其中,较小特征值对应的特征向量即为最优解。

    值得注意的是,拉格朗日方法中,要求,因此,在求出矩阵A的特征向量之后,还需要对特征向量归一化。由于我们的目的是求出直线参数a、b和c,其实归不归一化求出来的结果是一样的。

  • 相关阅读:
    Eclipse 导入项目乱码问题(中文乱码)
    sql中视图视图的作用
    Java基础-super关键字与this关键字
    Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解
    Android View和ViewGroup
    工厂方法模式(java 设计模式)
    设计模式(java) 单例模式 单例类
    eclipse乱码解决方法
    No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
    【转】使用 Eclipse 调试 Java 程序的 10 个技巧
  • 原文地址:https://www.cnblogs.com/kane1990/p/4712884.html
Copyright © 2011-2022 走看看