码迷,mamicode.com
首页 > 其他好文 > 详细

最小二乘法

时间:2020-02-07 22:40:33      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:nbsp   form   mat   value   http   def   line   image   最小   

线性最小二乘法

1. 原理:

通过最小化误差的平方和寻找数据的最佳函数匹配,如图(点到直线距离最短)

技术图片

 

2. 求解

假设直线为:

技术图片

最小二乘模型:

技术图片

 求解:

技术图片

 方程化:

技术图片

 解得:

技术图片

 

 代码实现:

###最小二乘实现
import numpy as np
import matplotlib.pyplot as plt

def linear_least_squares(x, y):
    if not len(x) == len(y) :
        raise ValueError("横纵坐标数据个数不同")
    if len(x) == 1 or len(y) == 1:
        raise ValueError("传入坐标数为1")
    X, Y = np.array(x), np.array(y)
    XX, XY = X * X, X * Y
    sumX, sumY, sumXY, sumXX = sum(X), sum(Y), sum(XY), sum(XX)
    n = len(x)
    a = (sumXX*sumY - sumX*sumXY)/(n*sumXX - sumX**2)
    b = (n*sumXY - sumX*sumY)/(n*sumXX - sumX**2)
    s = n*a + b*sumX - sumY
    return a, b, s
x_data = [1.12,2.62,2.99,4,5,6.52,7.31,8.62, 9.41, 10.58]
y_data = [0.69*2, 1.99*2,3.41*2, 4*2, 5.12*2,6.01*2,6.98*2,8.11*2,9.01*2,10*2]
a, b, s = linear_least_squares(x_data, y_data)
print(s)
x = np.linspace(0,11)
y = x * b + a
plt.title(s = {0:.4f}e-14.format(s*(10**14)))
plt.plot(x, y)
plt.scatter(x_data, y_data)
plt.show()

结果

技术图片

 

最小二乘法

标签:nbsp   form   mat   value   http   def   line   image   最小   

原文地址:https://www.cnblogs.com/shish/p/12274646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!