最小二乘法

Posted shish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小二乘法相关的知识,希望对你有一定的参考价值。

线性最小二乘法

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()

结果

技术图片

 

以上是关于最小二乘法的主要内容,如果未能解决你的问题,请参考以下文章

关于VC的最小二乘法曲线拟合算法问题

一文速学-最小二乘法曲线拟合算法详解+项目代码

谁懂迭代加权最小二乘法,能否给讲下原理

01_有监督学习--简单线性回归模型(最小二乘法代码实现)

理解最小二乘法

最小二乘法