matplotlib演示最小二乘法拟合过程
来源:互联网 发布:国史大纲 版本 知乎 编辑:程序博客网 时间:2024/06/06 03:42
matplotlib演示最小二乘法拟合过程
2017 年 04 月 21 日
Wray最小二乘法拟合直线
生成样本点
首先,我们在直线 y = 3 + 5x
附近生成服从正态分布的随机点,作为拟合直线的样本点。
import numpy as npimport matplotlib.pyplot as plt# 在直线 y = 3 + 5x 附近生成随机点X = np.arange(0, 5, 0.1)Z = [3 + 5 * x for x in X]Y = [np.random.normal(z, 0.5) for z in Z]plt.plot(X, Y, 'ro')plt.show()
样本点如图所示:
拟合直线
设 y = a0 + a1*x
,我们利用最小二乘法的正则方程组来求解未知系数 a0 与 a1。
numpy 的 linalg 模块中有一个 solve 函数,它可以根据方程组的系数矩阵和方程右端构成的向量来求解未知量。
def linear_regression(x, y): N = len(x) sumx = sum(x) sumy = sum(y) sumx2 = sum(x**2) sumxy = sum(x*y) A = np.mat([[N, sumx], [sumx, sumx2]]) b = np.array([sumy, sumxy]) return np.linalg.solve(A, b)a0, a1 = linear_regression(X, Y)
绘制直线
此时,我们已经得到了拟合后的直线方程系数 a0 和 a1。接下来,我们绘制出这条直线,并与样本点做对比。
# 生成拟合直线的绘制点_X = [0, 5]_Y = [a0 + a1 * x for x in _X]plt.plot(X, Y, 'ro', _X, _Y, 'b', linewidth=2)plt.title("y = {} + {}x".format(a0, a1))plt.show()
拟合效果如下:
最小二乘法拟合曲线
生成样本点
与生成直线样本点相同,我们在曲线 y = 2 + 3x + 4x^2
附近生成服从正态分布的随机点,作为拟合曲线的样本点。
import numpy as npimport matplotlib.pyplot as plt# y = 2 + 3x + 4x^2X = np.arange(0, 5, 0.1)Z = [2 + 3 * x + 4 * x ** 2 for x in X]Y = np.array([np.random.normal(z,3) for z in Z])plt.plot(X, Y, 'ro')plt.show()
样本点如图所示:
拟合曲线
设该曲线的方程为 y = a0 + a1*x + a2*x^2
,同样,我们通过正则方程组来求解未知量 a0、a1 和 a2。
# 生成系数矩阵Adef gen_coefficient_matrix(X, Y): N = len(X) m = 3 A = [] # 计算每一个方程的系数 for i in range(m): a = [] # 计算当前方程中的每一个系数 for j in range(m): a.append(sum(X ** (i+j))) A.append(a) return A# 计算方程组的右端向量bdef gen_right_vector(X, Y): N = len(X) m = 3 b = [] for i in range(m): b.append(sum(X**i * Y)) return bA = gen_coefficient_matrix(X, Y)b = gen_right_vector(X, Y)a0, a1, a2 = np.linalg.solve(A, b)
绘制曲线
我们根据求得的曲线方程,绘制出曲线的图像。
# 生成拟合曲线的绘制点_X = np.arange(0, 5, 0.1)_Y = np.array([a0 + a1*x + a2*x**2 for x in _X])plt.plot(X, Y, 'ro', _X, _Y, 'b', linewidth=2)plt.title("y = {} + {}x + {}$x^2$ ".format(a0, a1, a2))plt.show()
拟合效果如下:
作者:Wray Zheng
原文: http://www.codebelief.com/article/2017/04/matplotlib-demonstrate-least-square-regression-process/
0 0
- matplotlib演示最小二乘法拟合过程
- 最小二乘法拟合
- 最小二乘法拟合
- 最小二乘法直线拟合、圆拟合
- 最小二乘法直线拟合
- 最小二乘法直线拟合
- 最小二乘法直线拟合
- 最小二乘法直线拟合
- 最小二乘法直线拟合
- 最小二乘法 直线拟合
- 线性拟合(最小二乘法)
- 最小二乘法拟合直线
- 最小二乘法拟合曲线
- 最小二乘法直线拟合
- 最小二乘法直线拟合
- 最小二乘法拟合直线
- 最小二乘法多项式拟合
- 最小二乘法直线拟合
- MySQL小结
- 关于支付宝开放平台RSA密钥的导入方法
- Oracle 物化视图
- 清除浮动的CSS设置
- SQL SERVER数据类型与C#数据类型对照表
- matplotlib演示最小二乘法拟合过程
- poj 2109 Power of Cryptography
- 斯坦福CS20SI:基于Tensorflow的深度学习研究课程笔记,Lecture note3:TensorFlow上的线性回归和逻辑回归
- 理解promise及适用场景
- JSON与XML的区别比较
- 数据库基础第四天
- 目标检测的图像特征提取之(一)HOG特征
- Anaconda使用总结
- 目标检测的图像特征提取之(二)LBP特征