http://blog.csdn.net/pipisorry/article/details/49804441

常见的曲线拟合方法

1.使偏差绝对值之和最小

2.使偏差绝对值最大的最小

     

3.使偏差平方和最小

按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。

皮皮blog

多项式拟合

多项式拟合公式

多项式阶数对数据拟合的影响

数据量较少,阶数过高,可能过拟合。

多项式拟合问题描述

假定给定一个训练数据集:T={(x1,y1),(x2,y2),⋯,(xN,yN)}

其中,xi∈R是输入x的观测值,yi∈R是相应的输出y的观测值,i=1,2,⋯,N,多项式函数拟合的任务是假设给定数据由M次多项式函数生成,选择最有可能产生这些数据的M次多项式函数,即在M次多项式函数中选择一个对已知数据以及未知数据都有很好预测能力的函数。

设M次多项式为fM(x,w)=w0+w1x+w2x2+⋯+wMxM=∑j=0Mwjxj,式中x式单变量输入,w0,w1,⋯,wm是M+1个参数。

参数W求解1

{实际上是一个最小二乘法多项式曲线拟合问题,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x)。}

用平方损失作为损失函数,系数12是为了方便计算,将模型与训练数据代入,有L(w)=12∑i=1N(∑j=0Mwjxji−yi)2

对wj求偏导并令其为0

set∂ L(w)∂wk=0⇒12∑i=1N2(∑j=0Mwjxji−yi)×xki=0⇒∑i=1N∑j=0Mwjxji=∑i=1Nxkiyi(k=0,1,2,⋯,M)

所以要求拟合多项式系数 w∗0,w∗1,⋯,w∗M需要解下面这个线性方程组,求和符号上下限都是 i=1到 N。

⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢N∑xi∑x2i⋮∑xMi∑xi∑x2i∑x3i⋮∑xM+1i∑x2i∑x3i∑x4i⋮∑xM+2i⋯⋯⋯⋱⋯∑xMi∑xM+1i∑xM+2i⋯∑x2Mi⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎛⎝⎜⎜⎜⎜⎜⎜⎜w0w1w2⋮wm⎞⎠⎟⎟⎟⎟⎟⎟⎟=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∑yi∑xiyi∑x2iyi⋮∑xMiyi⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

所以计算出∑i=1Nxji(j=0,1,2,⋯,2M)和∑i=1Nxjiyi(j=0,1,2,⋯,M)然后将这些值带入上述线性方程组求解即可。

但是上面这个矩阵方程组求解是可以化简的:

参数求解2

{实际上是一个最小二乘法多项式曲线拟合问题,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x)。}

1. 设拟合多项式为:

2. 各点到这条曲线的距离之和,即偏差平方和如下:

3. 为了求得符合条件的a值,对等式右边求ai偏导数,因而我们得到了:

.......

4. 将等式左边进行一下化简,然后应该可以得到下面的等式:

.......

5. 把这些等式表示成矩阵的形式,就可以得到下面的矩阵:

6. 将这个范德蒙得矩阵化简后可得到:

7. 也就是说X*A=Y,那么A = (X'*X)-1*X'*Y,便得到了系数矩阵A,同时,我们也就得到了拟合曲线。

这里的X就是6中方程左边的矩阵

皮皮blog

多项式拟合的python代码实现

{注意安装相关python库}

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = '多项式曲线拟合'
__author__ = '皮'
__mtime__ = '11/8/2015-008'
__email__ = 'pipisorry@126.com'
"""
import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg, stats# 要拟合的函数
func = lambda x: np.sin(2 * np.pi * x)def genPoints(p_no):
    '''
    获取要拟合的模拟数据
    '''
    x = np.random.rand(p_no)# x = np.linspace(0, 1, 10)
    # y要加上一个高斯分布N(0,0.01)随机偏差
    y = func(x) + stats.norm.rvs(loc=0, scale=0.1, size=10)return x, ydef drawCurveFitting(ax, w, x, y, order):
    '''
    绘制拟合曲线
    '''

    def drawSinCurve(ax):
        x = np.linspace(0, 1, 20)y = func(x)ax.plot(x, y, '--', alpha=0.6, label='sin curve')drawSinCurve(ax)def drawOriginData(ax, x, y):
        ax.scatter(x, y)drawOriginData(ax, x, y)def drawFittingCurve(ax, w, order):
        x = np.linspace(0, 1, 20)X = np.array([[xi ** i for i in range(order + 1)] for xi in x])y = X.dot(w)ax.plot(x, y, 'r', label='polynomial fitting curve')ax.set_ylim(-2, 2)drawFittingCurve(ax, w, order)def plotSetting(ax):
        ax.legend(loc='lower right')# plt.title('Polynomial Curve Fitting')
        # plt.xlabel('x')
        # plt.ylabel('y',rotation='horizontal')
        ax.set_title('Polynomial Curve Fitting')ax.set_xlabel('x', rotation='horizontal', lod=True)ax.set_ylabel('y', rotation='horizontal', lod=True)plotSetting(ax)plt.show()def polynomialFit(x, y, order):
    X = np.array([[xi ** i for i in range(order + 1)] for xi in x])Y = np.array(y).reshape((-1, 1))# W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y)
    W, _, _, _ = linalg.lstsq(X, Y)# print(W)
    return Wif __name__ == '__main__':
    order = 3  # 拟合多项式的阶数
    p_no = 10  # 拟合的数据点的个数

    ax = plt.subplot(111)x, y = genPoints(p_no)# print(x, '\n', y)

    W = polynomialFit(x, y, order=order)drawCurveFitting(ax, W, x, y, order=order)

运行结果

from:http://blog.csdn.net/pipisorry/article/details/49804441

ref:李航《统计学习方法》

多项式函数拟合问题V2

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

数据拟合:多项式拟合polynomial curve fitting相关推荐

  1. 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning 书,章节1.1,多项式曲线拟合(Polynomial Curve Fitting)

    转载自:http://blog.csdn.net/xbinworld/article/details/8834155 Pattern Recognition and Machine Learning ...

  2. [Python] 多项式曲线拟合(Polynomial Curve Fitting)

    多项式曲线拟合 Polynomial Curve Fitting 实验目标 实现过程 - Step 1 :生成观测集和目标函数 - Step 2 :比较不同阶数多项式的拟合效果 - Step 3 :通 ...

  3. 多项式曲线拟合(Polynomial Curve Fitting)

    多项式曲线拟合(Polynomial Curve Fitting) 标签:监督学习 @ author : duanxxnj@163.com @ time : 2016-06-19 原文链接 多项式特征 ...

  4. 数据拟合: 直线拟合--多项式拟合

    数据拟合: 直线拟合--多项式拟合 1.问题概述 在实际问题中,常常需要从一组观察数据        (xi,yi)  i=1,2,,..,n 去预测函数 y=f(x) 的表达式,从几何角度来说,这个 ...

  5. matlab中数据的多项式拟合

    1.序言 很多时候我们需要对数据进行拟合,使用一次拟合或者多项式拟合,同时绘制拟合的置信区间以及多项式拟合图. 2.使用的数据和方法 使用matlab读取存储在excel中的数据,然后采用一次或者多次 ...

  6. 多项式拟合lm_数据趋势拟合--多项式拟合

    前篇写的线性拟合,这种纯线性的方式很简单,但是实际应用中这种直上直下的场景还是很少.有复杂的情况怎么办呢? 来复习一个东西.一元N次多项式. y=a+b*x+c*x^2+d*x^3+....+n*x^ ...

  7. PRML 学习: (1) Polynomial Curve Fitting

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/75534111 多项式曲线拟合是比较基础 ...

  8. 多项式拟合忆阻器的相关数据,超详细解决忆阻器数据的拟合问题(还有很大改进空间)

    将CSV中的数据导入,并且指定自己想要的数据 import pandas as pddf = pd.read_csv('E:\I-V数据\RRAM_forming.csv') data = df.il ...

  9. matlab三次拟合多项式,matlab三次多项式拟合

    暂无评价|0人阅读|0次下载|举报文档 DSC曲线的三次样条拟合与Matlab实现_能源/化工_工程科技_专业资料.DSC曲线拟合与Matlab实现第... 人阅读|次下载 曲线拟合的最小二乘法mat ...

最新文章

  1. 前端学习(3217):prop的基本使用
  2. 第三十六期:人工智能统计调查:86%的消费者更喜欢人工客服
  3. [JZOJ P1288] [DP]矩阵取数
  4. 使用CucumberJS,让JavaScript与行为驱动开发结合
  5. 帧大小超过交换机mtu_三层交换机与路由器区别在哪里?
  6. 高兴与愉快的心情,难以言语。
  7. 【转载保存】Ubuntu14.04安装pycharm用于Python开发环境部署,并且支持pycharm使用中文输入
  8. 大话2虚拟服务器怎么弄,大话西游2公益服风云1.0虚拟机镜像手工启动服务端+启动教程+客户端IP修改教程+数据库工具...
  9. Visio有用的画图技巧
  10. python安装pyqt4_如何使用pip在Windows上安装PyQt4?
  11. C#-Winform知识点
  12. 【数据结构】图邻接矩阵的创建完整代码
  13. 基于安卓的备忘录文件加密_苹果备忘录、锤子便签、印象笔记哪个更好用?
  14. 电脑快捷操作方式大全
  15. python重新执行条件_Python 基础(二)
  16. python编写简单脚本
  17. Application.mk Android.mk
  18. VUE项目移动端H5调用摄像头扫码
  19. 涉密计算机及涉密网络使用自查,网络安全自查报告(2)
  20. 【工控安全产品】工业控制系统信息安全检查工具箱

热门文章

  1. 雅思7+、托福110+的英语大神,原来都偷偷关注了这几个视频号!
  2. 供应YB5200原厂2A单节锂电充电IC 开关式2A内置MOS 单节锂电池充电IC
  3. 台式计算机显示器发蓝,电脑屏幕颜色偏蓝的四种解决方法
  4. java 发送会议邮件模板_使用javamail发送会议邀请
  5. 常用布局简介(单列布局、两列布局、三列布局、sticky footer粘连布局)
  6. Android App 国际化详解
  7. java楼盘管理系统_基于Java的楼盘销售管理系统的设计与实现
  8. 如何利用python自动办公-用Python自动办公,做职场高手全16讲(无需程序员基础) | 樱花庄...
  9. Unity3D 5 官方教程:标准着色器之材质参数(二)
  10. VR影视“万事俱备只欠东风”,它会成为下一个内容发展的风口吗?