前言

最小二乘法是最小化每个点到直线的垂直误差,由于误差采用的是垂直误差,导致越接近垂直线(平行于\(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. 1.变量和简单的数据类型--《Python编程:从入门到实践》

    1.1 变量 在Python中使用变量时,需要遵守一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或下划线打头,但不能以数字打 头. 变量名不能包含空格,但可使用下划线来分隔其中的单 ...

  2. JS leetcode 翻转字符串里的单词 题解分析

    壹 ❀ 引 今天来做一道难度中等,但实际难度并不是很高的题目,题目来源leetcode151. 翻转字符串里的单词,题目描述如下: 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: & ...

  3. NC19885 [AHOI2009]CHESS 中国象棋

    题目链接 题目 题目描述 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧.一个炮要能攻击另一个炮他们必须要 ...

  4. CF510D Fox And Jumping

    题目链接 题目 见链接. 题解 方法一 知识点:背包dp,STL. 题目意思是让我们判断能否从这些数中选出一些数使得选的数公共gcd为 \(1\),如果可以输出最小花费. 一眼背包dp,但要map超大 ...

  5. Ubuntu18.04 Server部署Flannel网络的Kubernetes

    准备服务器 ESXi6.5安装Ubuntu18.04 Server, 使用三台主机, 计划使用hostname为 kube01, kube02, kube03, 配置为2核4G/160G, K8s要求 ...

  6. CSS实现展开动画

    CSS实现展开动画 展开收起效果是比较常见的一种交互方式,通常的做法是控制display属性值在none和其它值之间切换,虽说功能可以实现,但是效果略显生硬,所以会有这样的需求--希望元素展开收起能具 ...

  7. 系统环境变量中 HTTPS_PROXY 的误区

    前段时间在测试一个连麦 demo,demo 简要说可以在内网环境中运行时,输入频道号就可以模拟连麦 但是在加入连麦时,一直返回错误 -2 EOF,询问得知,该错误的解释信息是"Service ...

  8. Java 使用 itext 向PDF插入数据和图片

    Java 使用 itext 向PDF插入数据和图片 一.下载Adobe Acrobat DC 二.制作模板 1.准备一个word模板,并转换成PDF格式 2.使用Adobe Acrobat DC打开P ...

  9. Postman文件数据导入导出

    https://zhuanlan.zhihu.com/p/535757471?utm_id=0

  10. SDL开发笔记(三):使用SDL渲染窗口颜色和图片

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...