最小二乘法多项式曲线拟合及其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

  1. sample number=10,3th

  2. sample number=10,9th

  3. sample number=15,9th

  4. sample number=100,9th

  5. sample number=10,9th 加入正则项

    加入正则项会有效缓解overfitting问题。

最小二乘法多项式曲线拟合及其python实现相关推荐

  1. 最小二乘法多项式曲线拟合原理与实现--转

    原文地址:http://blog.csdn.net/jairuschan/article/details/7517773/ 概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过 ...

  2. 最小二乘法多项式曲线拟合原理与实现

    概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...

  3. 最小二乘法多项式曲线拟合原理与实现(错误地方已经修改底层补充自己写的java实现)

    目录(?) [-] 概念 原理 运行前提 代码 运行效果 概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原 ...

  4. 最小二乘法多项式曲线拟合数学原理及其C++实现

    目录 0 前言 1 最小二乘法概述 2 最小二乘法求解多项式曲线系数向量的数学推导 2.1 代数法 2.2 矩阵法 3 代码实现 4 总结 参考 0 前言 自动驾驶开发中经常涉及到多项式曲线拟合,本文 ...

  5. c++ 三次多项式拟合_最小二乘法多项式曲线拟合数学原理及其C++实现

    本文使用 Zhihu On VSCode 创作并发布 0 前言 自动驾驶开发中经常涉及到多项式曲线拟合,本文详细描述了使用最小二乘法进行多项式曲线拟合的数学原理,通过样本集构造范德蒙德矩阵,将一元 N ...

  6. 最小二乘法进行曲线拟合(Python)

    本文不手动实现最小二乘,调用scipy库中实现好的相关优化函数. 考虑如下的含有4个参数的函数式: f(x)=A−D1+(x/C)B+D f(x)=\frac{A-D}{1+(x/C)^B}+D 构造 ...

  7. 多项式曲线拟合最小二乘法

    对给定的试验数据点(xi,yi)(i=1,2,--,n),可以构造m次多项式 数据拟合的最简单的做法就是使误差p(xi)-yi的平方和最小 当前任务就是求一个P(x)使得 从几何意义上讲就是寻求给与定 ...

  8. 多项式曲线拟合之最小二乘法推导

    1.多项式曲线拟合之最小二乘法 1.1 问题来源 1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星.经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置.随后 ...

  9. python最小二乘法拟合三维曲线_python_numpy最小二乘法的曲线拟合

    在了解了最小二乘法的基本原理之后python_numpy实用的最小二乘法理解,就可以用最小二乘法做曲线拟合了 1.直线拟合 直线拟合 已知图中拟合数据的坐标,对图中的拟合数据进行直线拟合. 依旧使用最 ...

最新文章

  1. .NET常见线程简介
  2. 【报错】:Char 5: error: non-void f
  3. 如果你很迷茫,就好好读读这8句话
  4. 神经网络中的病态曲率-Pathological Curve-举例
  5. 计算机信息系统安全保卫工作,对计算机信息系统安全保护工作的检查
  6. Mac中显示和隐藏隐藏文件命令行
  7. winform倒计时
  8. win7误删文件怎么恢复?
  9. leetcode-739:每日温度
  10. 性能测试基础培训 - PPT下载
  11. mysql索引与md5_MySQL理解索引、添加索引的原则
  12. 张大哥笔记-从零开始自己创建一个网站的操作指南
  13. poll, ppoll
  14. 瑞利、莱斯、高斯信道模型
  15. linux命令格式和常用命令
  16. 总结2012年世界经济形势主要特征
  17. 浙江省杭州职称评审申报时间
  18. java静态代码块、构造代码块、构造器执行顺序
  19. 【Linux修炼】2.常见指令(中)
  20. 笔记本各种接口功能介绍

热门文章

  1. Intellij Idea 将Java项目打包成jar
  2. 机器学习-白板推导-系列(十)笔记:EM算法
  3. 网络直播系统的架构,基础版直播间搭建 1
  4. 读研计算机统计学怎样,干货!想要出国读研,你关心的问题答案在这里
  5. Oracle-创建Oracle用户修改密码并赋权限
  6. vue-admin-template 把默认英文版改回中文
  7. 【Python】list数组赋值
  8. 什么是纯函数_以及为什么要用纯函数?
  9. ERP系統借贷关系表
  10. Word文档替换功能怎么使用