最小二乘法多项式曲线拟合及其python实现
最小二乘法多项式曲线拟合及其python实现
- 多项式曲线拟合问题描述
- 最小二乘法
- 针对overfitting,加入正则项
- python实现
- 运行结果
多项式曲线拟合问题描述
问题描述:给定一些数据点,用一个多项式尽可能好的拟合出这些点排布的轨迹,并给出解析解
判断拟合的好坏常用的误差衡量方法是均方根误差,要求均方根误差先要求平方和误差:
然后计算均方根误差:
多项式拟合问题本质是一个优化问题,目标函数是使RMS误差最小。
本文关注于最小二乘法优化。
最小二乘法
最小二乘法推导:RMS误差与E(W)成正比,E(W)最优等价于RMS最优
E(W):
对E(W)求导:
令导数=0:
通过给定X和T,可以直接求得W,W就是多项式拟合中的系数矩阵。
针对overfitting,加入正则项
求导:
求出W:
python实现
import numpy as np
import math
import matplotlib.pyplot as plt
SAMPLE_NUM=200#要生成的sample个数
M=9#多项式阶数#产生带有高斯噪声的信号
mid, sigma = 0, 0.3 # 设置均值和方差
noise = np.random.normal(mid, sigma, SAMPLE_NUM).reshape(SAMPLE_NUM,1) #生成SAMPLE_NUM个数据#产生SAMPLE_NUM个序号(范围是2pi)
x = np.arange(0, SAMPLE_NUM).reshape(SAMPLE_NUM,1)/(SAMPLE_NUM-1)*(2*math.pi)#generate y and y_noise, and both y's and y_noise's shape is (SAMPLE_NUM*1)
y=np.sin(x)
y_noise=np.sin(x)+noise#绿色曲线显示x - y,散点显示x - y_noise
plt.title("")
plt.plot(x,y,'g',lw=4.0)
plt.plot(x,y_noise,'bo')#generate Matrix X which has M order
X=x
for i in range(2,M+1):X = np.column_stack((X, pow(x,i)))#add 1 on the first column of X, now X's shape is (SAMPLE_NUM*(M+1))
X = np.insert(X,0,[1],1)
#print(X)#calculate W, W's shape is ((M+1)*1)#
#W=np.linalg.inv((X.T.dot(X))).dot(X.T).dot(y_noise)#have no regularization
W=np.linalg.inv((X.T.dot(X))+np.exp(-8) * np.eye(M+1)).dot(X.T).dot(y_noise)#introduce regularization
y_estimate=X.dot(W)#红色曲线显示x - y_estimate
plt.plot(x,y_estimate,'r',lw=4.0)
plt.show()
运行结果
绿色曲线 x-y
蓝色散点 x-y_noise
红色曲线 x-y_eatimate
sample number=10,3th
sample number=10,9th
sample number=15,9th
sample number=100,9th
sample number=10,9th 加入正则项
加入正则项会有效缓解overfitting问题。
最小二乘法多项式曲线拟合及其python实现相关推荐
- 最小二乘法多项式曲线拟合原理与实现--转
原文地址:http://blog.csdn.net/jairuschan/article/details/7517773/ 概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过 ...
- 最小二乘法多项式曲线拟合原理与实现
概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...
- 最小二乘法多项式曲线拟合原理与实现(错误地方已经修改底层补充自己写的java实现)
目录(?) [-] 概念 原理 运行前提 代码 运行效果 概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原 ...
- 最小二乘法多项式曲线拟合数学原理及其C++实现
目录 0 前言 1 最小二乘法概述 2 最小二乘法求解多项式曲线系数向量的数学推导 2.1 代数法 2.2 矩阵法 3 代码实现 4 总结 参考 0 前言 自动驾驶开发中经常涉及到多项式曲线拟合,本文 ...
- c++ 三次多项式拟合_最小二乘法多项式曲线拟合数学原理及其C++实现
本文使用 Zhihu On VSCode 创作并发布 0 前言 自动驾驶开发中经常涉及到多项式曲线拟合,本文详细描述了使用最小二乘法进行多项式曲线拟合的数学原理,通过样本集构造范德蒙德矩阵,将一元 N ...
- 最小二乘法进行曲线拟合(Python)
本文不手动实现最小二乘,调用scipy库中实现好的相关优化函数. 考虑如下的含有4个参数的函数式: f(x)=A−D1+(x/C)B+D f(x)=\frac{A-D}{1+(x/C)^B}+D 构造 ...
- 多项式曲线拟合最小二乘法
对给定的试验数据点(xi,yi)(i=1,2,--,n),可以构造m次多项式 数据拟合的最简单的做法就是使误差p(xi)-yi的平方和最小 当前任务就是求一个P(x)使得 从几何意义上讲就是寻求给与定 ...
- 多项式曲线拟合之最小二乘法推导
1.多项式曲线拟合之最小二乘法 1.1 问题来源 1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星.经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置.随后 ...
- python最小二乘法拟合三维曲线_python_numpy最小二乘法的曲线拟合
在了解了最小二乘法的基本原理之后python_numpy实用的最小二乘法理解,就可以用最小二乘法做曲线拟合了 1.直线拟合 直线拟合 已知图中拟合数据的坐标,对图中的拟合数据进行直线拟合. 依旧使用最 ...
最新文章
- .NET常见线程简介
- 【报错】:Char 5: error: non-void f
- 如果你很迷茫,就好好读读这8句话
- 神经网络中的病态曲率-Pathological Curve-举例
- 计算机信息系统安全保卫工作,对计算机信息系统安全保护工作的检查
- Mac中显示和隐藏隐藏文件命令行
- winform倒计时
- win7误删文件怎么恢复?
- leetcode-739:每日温度
- 性能测试基础培训 - PPT下载
- mysql索引与md5_MySQL理解索引、添加索引的原则
- 张大哥笔记-从零开始自己创建一个网站的操作指南
- poll, ppoll
- 瑞利、莱斯、高斯信道模型
- linux命令格式和常用命令
- 总结2012年世界经济形势主要特征
- 浙江省杭州职称评审申报时间
- java静态代码块、构造代码块、构造器执行顺序
- 【Linux修炼】2.常见指令(中)
- 笔记本各种接口功能介绍