最小二乘法直线拟合

最小二乘法的直线拟合

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt

dots = np.array([[1,6], [2,5], [3,7], [4,10]])

plt.plot([i[0] for i in dots], 
    [i[1] for i in dots], ‘ro‘)

plt.axis([0, 6, 0, 12])

def nihezhixian(k, x, b):
    return k*x + b

sumxy = sum([a[0]*a[1] for a in dots])

#print sumxy

sumxx = sum([a[0] ** 2 for a in dots])
print sumxx

sumx = sum([a[0] for a in dots])
print sumx

sumy = sum([a[1] for a in dots])

#a0 = (∑Yi) / n - a1(∑Xi) / n (式1-8)
#a1 = [n∑Xi Yi - (∑Xi ∑Yi)] / [n∑Xi2 - (∑Xi)2 )] (式1-9)

# print dir(dots)
n = dots.shape[0]

k = float(n*sumxy - sumx*sumy)/float(n*sumxx - sumx*sumx)
# print a1 
b = float(sumy)/n - float(k * sumx) / n

plt.plot([i[0] for i in dots], 
    [nihezhixian(k, i[0], b) for i in dots])

plt.show()

图像输出如下

最小二乘法,实际上解决的问题是:对于给定的一系列点[(x1,y1), (x2,y2)...(xn,yn)],来的到y关于x的函数。

求一个函数y=f(x),使得y=f(x)能够描述这一些列点也就是解决如下方程:

Sum(f(xi) - yi)**2

有最小值,在直线的拟合过程中,y = f(x) = ax + b。带入上面式子,这是一个求最小值的问题,那么只需要对a,b求偏倒数即可.

最小二乘法直线拟合

时间: 2024-07-29 08:09:55

最小二乘法直线拟合的相关文章

【算法研究与实现】最小二乘法直线拟合

1.原理  在现实中经常遇到这样的问题,一个函数并不是以某个数学表达式的形式给出,而是以一些自变量与因变量的对应表给出,老师讲课的时候举的个例子是犯罪人的身高和留下的脚印长,可以测出一些人的数据然后得到一张表,它反应的是一个函数,回归的意思就是将它还原成数学表达式,这个式子也称为经验表达式,之所以叫经验就是说它不完全是实际中的那样准确,是有一定偏差的,只是偏差很小罢了. 最小二乘法 设经验 方程是y=F(x),方程中含有一些待定系数an,给出真实值{(xi,yi)|i=1,2,...n},将这些

直线拟合算法

在计算机视觉的应用中,经常会用到提取一条直线的精确位置这样的工作.这时就要用到直线的拟合算法了. 这里,我也贴一个利用最小二乘法计算最佳拟合直线的代码. 这个代码是我以前学习<机器视觉算法与应用(双语版)>[德] 斯蒂格(Steger C) 著:杨少荣 等 译 的书时写的.所有的公式推导都在书中 3.8.1 ,还算比较有用. 与一元线性回归算法的区别:一元线性回归算法假定 X 是无误差的,只有 Y 有误差. 而这个算法假设每个点的 X Y 坐标的误差都是符合 0 均值的正态分布的. 因此,在计

OpenCV fitline直线拟合函数学习

下图是OpenCV官方文档中,对直线拟合函数的详细介绍: fitLine()函数用于,对二维或三维空间中的点集进行直线拟合.共有六个参数: param 1:输入的点集,可以是Mat或者vector<>,可以是二维点集或三维点集. 例如: vector<Point> points; param 2:拟合结果,即一条直线.在二维空间中,直线可以定义为 Vec4f line; 在二维平面中,(line[0],line[1])表示直线的方向向量,(line[2],line[3])表示直线上

基于EM的多直线拟合实现及思考

作者:桂. 时间:2017-03-22  06:13:50 链接:http://www.cnblogs.com/xingshansi/p/6597796.html 声明:欢迎被转载,不过记得注明出处哦~ 前言 分布拟合与曲线拟合系列本想简单梳理,却啰嗦的没完没了.本文主要介绍:多直线的拟合,多曲线可以依次类推.全文主要包括: 1)背景介绍 2)理论推导 3)代码实现 4)关于拟合的思考 内容多有借鉴他人,最后一并附上链接. 一.背景介绍 对于单个直线,可以借助MLE或者最小二乘进行求参,对于多条

直线拟合算法(续)

直线拟合算法(续) 曾经写过一篇博客.介绍直线拟合算法. http://blog.csdn.net/liyuanbhu/article/details/50866802 给出的代码事实上有一点小问题,就是 den = 0 时会出现除以 0 的错误. 今天正好也有网友问起这个问题. 我就再写一篇短文来说说怎样解决问题. 首先我们知道: den=D2xy+(λ?Dxx)2??????????????√ 那么 den=0 意味着: Dxy=0λ=Dxx 我们还有关于 λ 的计算式: λ=Dxx+Dyy

最小二乘法椭圆拟合

对平面上的一些点拟合有很多手段,其中椭圆拟合在图像轮廓划分等很多方面都很重要,当然,我们一般还是用最小二乘法来拟合椭圆, 在这里,我实现了两种算法,一种是 http://wenku.baidu.com/link?url=7kIrC8LoOMCtlmAH8yqkpUQfiKwWnVe4EoUJekkQSgQ1qTWfLAuEXTYvYTv7SATGIJYX4IxcTIB94-iO0SpUgztWgx661O2VEOwm_dvoSqO 这篇文章给出的,核心也是最小二乘法,利用gauss消去法解方程组

OpenCV 学习(直线拟合)

OpenCV 学习(直线拟合) Hough 变换可以提取图像中的直线.但是提取的直线的精度不高.而很多场合下,我们需要精确的估计直线的参数,这时就需要进行直线拟合. 直线拟合的方法很多,比如一元线性回归就是一种最简单的直线拟合方法.但是这种方法不适合用于提取图像中的直线.因为这种算法假设每个数据点的X 坐标是准确的,Y 坐标是带有高斯噪声的.可实际上,图像中的每个数据点的XY 坐标都是带有噪声的. 下面就来讲讲适用于提取图像中直线的直线拟合算法. 一个点 (xi,yi) 到直线的距离用 ri 来

ax+by+c=0 型直线拟合算法

所谓直线拟合,通常也叫做线性拟合.一元线性回归.指的是当我们有一批数据(xi,yi),这些数据在平面坐标系下落在一条直线上,或近似的落在一条直线上.我们就要求出这条直线的参数.如果这条直线可以写为: y=kx+b 那么 k=∑(xi?xˉ)(yi?yˉ)∑(xi?xˉ)2 b=yˉ?kxˉ 这个关系式许多教科书上都有详细的推导,无需多说. 今天要说的是另一种情况,当我们的数据有可能落在一条竖直的直线上,也就是k 有可能为∞ 时,应该如何做拟合.这时我们肯定就不能用y=kx+b 了,但是可以将这个

(原)opencv直线拟合fitLine

转载请注明出处 http://www.cnblogs.com/darkknightzh/p/5486234.html 参考网址: http://blog.csdn.net/thefutureisour/article/details/7599537 1 Mat img(60, 60, CV_8UC1, Scalar(0)); 2 std::vector<Point2f> points; 3 points.push_back(Point2f(10.5, 10.2)); 4 points.push