最小二乘法
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()
结果
以上是关于最小二乘法的主要内容,如果未能解决你的问题,请参考以下文章