前言

最小二乘法是最小化每个点到直线的垂直误差,由于误差采用的是垂直误差,导致越接近垂直线(平行于\(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. Buffer Queue原理

    BufferQueue详解 原理一.BufferQueue 简介在工作中,我们经常会和Surface,ImageReader,ImageWriter BufferQueue打交道,它们之间是什么关系呢 ...

  2. 如何查看Linux 内核是AMD、arm

    如何查看Ubuntu的内核是AMD.ARM.x86.x86_64 $ arch 注:x86_64,x64,AMD64基本上是同一个东西

  3. Atom N2600, N2800 安装 Ubuntu22.04 卡住的问题处理

    问题描述 Atom N2600, N2800 的某些旧型号机器, 安装 Ubuntu 时在安装界面选择安装后, 启动过程中会卡住, 或者数秒即黑屏, 再无反应. 这个问题对于Debian系的其他发行版 ...

  4. VueRouter导航守卫

    VueRouter导航守卫 vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航,简单来说导航守卫就是路由跳转过程中的一些钩子函数,路由跳转是一个大的过程,这个大的过程分为跳转前中后 ...

  5. 探秘C语言数组:解锁高效数据管理与多维空间编程技巧"

    欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 引言 前面贝蒂给大家介绍了选择结构与循环结构,今天,贝蒂准备给大家介绍C语言中一个非常重要 ...

  6. MyBaits查询MySQL日期类型结果相差8个小时

    问题描述 在Java项目中使用MyBatis作为ORM框架,但是查询出的MySQL日期类型字段值总是比数据库表里的值多8个小时. 具体说明: MySQL数据库表字段类型为timestamp,映射的Ja ...

  7. 启动HDFS伪分布式环境时报权限错误

    问题描述 操作系统:Ubuntu18.04 LTS HDFS版本:hadoop-3.2.3 普通用户登录,参照官方文档在单机上安装伪分布式环境时,启动HDFS报权限错误. 具体报错信息如下: $ ./ ...

  8. 如何避免Git合并远程分支时出现可读性差的日志

    问题及现象 当某一分支(假设为main)的本地仓库和远程仓库都基于同一个提交进行了修改,并分别创建了新的提交时,在本地执行git push origin main会提示先要执行git pull合并远程 ...

  9. macOS使用CodeRunner快速配置fortran环境

    个人网站:xzajyjs.cn 由于一些项目的缘故,需要有fortran的需求,但由于是M1 mac的缘故,不能像windows那样直接使用vs+ivf这种经典配置.搜了一下网上主流的跨平台方案,主要 ...

  10. OpenCV开发笔记(六十):红胖子8分钟带你深入了解Harris角点检测(图文并茂+浅显易懂+程序源码)

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