前言

最小二乘法是最小化每个点到直线的垂直误差,由于误差采用的是垂直误差,导致越接近垂直线(平行于\(y\)轴),拟合效果越差,无法拟合垂直线。

通过最小化每个点到直线的距离误差可以解决最小二乘法无法拟合垂直线的问题,也就是总体最小二乘法(Total Least Squares)。

总体最小二乘法

将直线使用如下方程表示:

\[ax+by+c=0 \tag{1}
\]

点\((x_1, y_1)\)到直线的距离可以表示为:

\[\pmb{e} = \frac{|ax_1+bx_1+c|}{\sqrt{a^2+b^2}} \tag{2}
\]

假设\(a^2+b^2=1\),那么点\((x_1, y_1)\)到直线的距离可以表示为:

\[\pmb{e} = |ax_1+by_1+c| \quad , \quad a^2+b^2=1 \tag{3}
\]

如果拟合直线的参数为\(a,b,c\),点到拟合直线距离称为该点的拟合误差,给定\(n\)个点\((x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)\),那么直线的拟合方差为:

\[\begin{Vmatrix}\pmb{\sigma}\end{Vmatrix}^2=\frac{1}{n}\sum\limits_{i=1}^{i=n}{(ax_i+by_i+c)^2} \quad , \quad a^2+b^2=1 \tag{4} \label{4}
\]

方差最小时的\(a,b,c\)为直线的拟合参数。这里把方差记为\(\pmb{E}\),即\(\pmb{E}=\begin{Vmatrix}\pmb{\sigma}\end{Vmatrix}^2\)。由于极值处的偏导为0,先对\(\pmb{E}\)求\(c\)的偏导:

\[\frac{\partial \pmb{E}}{\partial c}=\frac{2}{n}\sum\limits_{i=1}^{i=n}{\big(ax_i+by_i+c\big)}=0 \tag{5}
\]

得到:

\[c=-\frac{a}{n}\sum\limits_{i=1}^{i=n}x_i-\frac{b}{n}\sum\limits_{i=1}^{i=n}y_i=-a\overline{x}-b\overline{y} \tag{6}
\]

代入方差表达式\(\eqref{4}\)得:

\[\begin{align*}
\pmb{E} &=\frac{1}{n}\sum\limits_{i=1}^{i=n}{(ax_i+by_i-a\overline{x}-b\overline{y})^2} \tag{7} \\
&= \frac{1}{n}\sum\limits_{i=1}^{i=n}\Big({a(x_i-\overline{x})+b(y_i-\overline{y})}\Big)^2 \\

&=
\begin{Vmatrix}
\begin{bmatrix}
x_1-\overline{x} & y_1-\overline{y} \\
\vdots & \vdots \\
x_n-\overline{x} & y_n-\overline{y}
\end{bmatrix}
\begin{bmatrix}
a \\
b
\end{bmatrix}

\end{Vmatrix}^2 \\

&=\begin{Vmatrix}\pmb{Bz}\end{Vmatrix}^2
\end{align*}
\]

其中:

\[\pmb{B}= \begin{bmatrix}
x_1-\overline{x} & y_1-\overline{y} \\
\vdots & \vdots \\
x_n-\overline{x} & y_n-\overline{y}
\end{bmatrix} \tag{8}
\]
\[\pmb{z}=\begin{bmatrix}a\\b\end{bmatrix} \tag{9}
\]

由于\(a^2+b^2=1\),即\(\pmb{z}^T\pmb{z}=1\)。可使用Lagrange乘法求解,目标函数为:

\[J(\pmb{z})=\begin{Vmatrix}\pmb{Bz}\end{Vmatrix}^2+\lambda\big(1-\pmb{z}^T\pmb{z}\big) \tag{10}
\]

式中\(\lambda\)为Lagrange乘数,由\(\frac{\partial J(\pmb{z})}{\partial \pmb{z}}=0\),得到:

\[\pmb{B}^T\pmb{B}\pmb{z}=\lambda \pmb{z} \tag{11}
\]

可见\(\lambda\)和\(\pmb{z}\)分别为矩阵\(\pmb{B}^T\pmb{B}\)的特征值和特征向量。

\[\pmb{B}^T\pmb{B} = \begin{bmatrix}
\sum\limits_{i=1}^{i=n}\big(x_1-\overline{x}\big)^2
& \sum\limits_{i=1}^{i=n}\big(x_1-\overline{x}\big)\big(y_1-\overline{y}\big) \\
\sum\limits_{i=1}^{i=n}\big(x_1-\overline{x}\big)\big(y_1-\overline{y}\big) & \sum\limits_{i=1}^{i=n}\big(y_1-\overline{y}\big)^2
\end{bmatrix} \tag{12}
\]

可见矩阵\(\pmb{B}^T\pmb{B}\)为2阶矩阵,因此存在2个特征值和特征向量。\(\pmb{E}=\begin{Vmatrix}\pmb{Bz}\end{Vmatrix}^2=\pmb{z}\pmb{B}^T\pmb{B}\pmb{z}=\pmb{z}^T\lambda\pmb{z}=\lambda\)的最小值为矩阵\(\pmb{B}^T\pmb{B}\)最小的特征值,而直线拟合参数\(a,b\)为最小特征值对应的特征向量。

参考文档

  1. 计算机视觉入门-最小二乘法、随机取样法、鲁棒估计、霍夫变换
  2. 矩阵分析与应用(第2版)张贤达
  3. 直线拟合——最小二乘法、hough变换

总体最小二乘法(Total Least Squares)拟合直线的更多相关文章

  1. halcon之最小二乘拟合直线

    如果不了解最小二乘算法 请先阅读: Least squares的算法细节原理https://en.wikipedia.org/wiki/Least_squares 通常在halcon中拟合直线会用ho ...

  2. [MXNet逐梦之旅]练习一·使用MXNet拟合直线手动实现

    [MXNet逐梦之旅]练习一·使用MXNet拟合直线手动实现 code #%% from matplotlib import pyplot as plt from mxnet import autog ...

  3. python matplotlib拟合直线

    import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.family'] = ['sans-serif'] plt. ...

  4. RANSAC与 最小二乘(LS, Least Squares)拟合直线的效果比较

    代码下载地址: 1.Matlab版本:http://pan.baidu.com/s/1eQIzj3c.进入目录后,请自行定位到该博客的源代码与数据的目录“

  5. Ransac 与 最小二乘(LS, Least Squares)拟合直线的效果比较

    代码下载地址      http://pan.baidu.com/s/1eQIzj3c 进入目录后,请自行定位到该博客的源代码与数据的目录“

  6. golang 实现最小二乘法拟合直线

    func LeastSquares(x[]float64,y[]float64)(a float64,b float64){ // x是横坐标数据,y是纵坐标数据 // a是斜率,b是截距 xi := ...

  7. 最小二乘法(least squares method)

    一.背景 号到北大去听hulu的讲座<推荐系统和计算广告在视频行业应用>,想到能见到传说中的项亮大神,特地拿了本<推荐系统实践>求签名.讲座开始,主讲人先问了下哪些同学有机器学 ...

  8. 分析一则halcon抓边拟合直线的小案例

    例图: 完整算法: read_image (Image, 'C:/Users/Administrator/Desktop/1.png') threshold (Image, Regions, , ) ...

  9. Halcon使用骨架法处理激光条并拟合直线

    dev_close_window () * 设置颜色 dev_set_color ('green') * 读取图像 read_image (Image, 'images3/1') * 获得图像尺寸 g ...

  10. OpenCV2马拉松第25圈——直线拟合与RANSAC算法

    计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/28118095 收入囊中 最小二乘法(least ...

随机推荐

  1. Delphi 官方 MD5

    去官方文档搜就行了,引入System.Hash 单元: http://docwiki.embarcadero.com/Libraries/Athens/en/System.Hash.THashMD5 ...

  2. NC52867 Highway

    题目链接 题目 题目描述 In ICPCCamp there were n towns conveniently numbered with \(1, 2, \dots, n\) connected ...

  3. Codeforces Global Round 22 A-E

    比赛链接 A 题解 知识点:贪心. 显然交错释放最好. 若两类数量不一样,那么较少的一组的一定都可以双倍,剩下的另一组就放进一个优先队列,从大到小和少的一组匹配可以双倍,剩下的直接加. 如果两类数量一 ...

  4. nginx 配置stream模块代理并开启日志配置

    前言 nginx 1.20.1nginx从1.9.0开始,新增加了一个stream模块确保nginx 安装时开启stream模块 ./configure \ -- \--with-stream \ - ...

  5. renren-fast-vue@1.2.2 项目编译报错: build `gulp`

    问题呈现: PS D:\Code\Java\ideaWorkspace\renren-fast-vue> npm run build > renren-fast-vue@1.2.2 bui ...

  6. sensitive-word-admin v1.3.0 发布 如何支持敏感词控台分布式部署?

    拓展阅读 sensitive-word-admin v1.3.0 发布 如何支持分布式部署? sensitive-word-admin 敏感词控台 v1.2.0 版本开源 sensitive-word ...

  7. Oracle代码封装工具和DBMS_DDL包的使用

    The WRAP Utility and the DBMS_DDL Package On occasion it is necessary to hide (obfuscate) your PL/SQ ...

  8. 《系列一》-- 2、XmlBeanFactory 的类图介绍.md

    阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. Spring源码阅读系列--全局目录.md ...

  9. 从零开始学Spring Boot系列-前言

    从零开始学Spring Boot系列-前言 在数字化和信息化的时代,Java作为一种成熟.稳定且广泛应用的编程语言,已经成为构建企业级应用的首选.而在Java生态系统中,Spring框架无疑是其中最为 ...

  10. 项目实战:Qt+iMax6生命探测仪(探测障碍物、静止目标、动态目标、生命目标、探测半径、探测前方雷达显示、动态目标轨迹显示、探测热力图、探测过程存储与回放)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110994486长期持续带来更多项目与技术分享, ...