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

常见的曲线拟合方法

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

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

     

3.使偏差平方和最小

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

皮皮blog

多项式拟合

多项式拟合公式

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

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

多项式拟合问题描述

假定给定一个训练数据集:

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

设次多项式为,式中式单变量输入,是个参数。

参数W求解1

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

用平方损失作为损失函数,系数是为了方便计算,将模型与训练数据代入,有

对求偏导并令其为

所以要求拟合多项式系数需要解下面这个线性方程组,求和符号上下限都是到。

所以计算出和然后将这些值带入上述线性方程组求解即可。

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

参数求解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)随机偏差
, )
    return x, y

def drawCurveFitting(ax, w, x, y, order):
    '''
    绘制拟合曲线
    '''

    def drawSinCurve(ax):
, , )
        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 )] for xi in x])
        y = X.dot(w)
        ax.plot(x, y, 'r', label='polynomial fitting curve')
        , )

    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):
)] for xi in x])
    Y , ))
    # W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y)
    W, _, _, _ = linalg.lstsq(X, Y)
    # print(W)
    return W

if __name__ == '__main__':
    order = 3  # 拟合多项式的阶数
    p_no = 10  # 拟合的数据点的个数

)
    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. 一起啃PRML - 1.1 Example: Polynomial Curve Fitting 多项式曲线拟合

    一起啃PRML - 1.1 Example: Polynomial Curve Fitting @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ 前言: ...

  2. 【PRML读书笔记-Chapter1-Introduction】1.1 Example:Polynomial Curve Fitting

    书中给出了一个典型的曲线拟合的例子,给定一定量的x以及对应的t值,要你判断新的x对应的t值多少. 任务就是要我们去发现潜在的曲线方程:sin(2πx) 这时就需要概率论的帮忙,对于这种不确定给t赋何值 ...

  3. [PR & ML 2] [Introduction] Example: Polynomial Curve Fitting

    啊啊啊,竟然不支持latex,竟然HTML代码不能包含javascript,代码编辑器也不支持Matlab!!!我要吐槽博客的编辑器...T_T只能贴图凑合看了,代码不是图,但这次为了省脑细胞,写的不 ...

  4. 数据的平面拟合 Plane Fitting

    数据的平面拟合 Plane Fitting 看到了一些利用Matlab的平面拟合程序 http://www.ilovematlab.cn/thread-220252-1-1.html

  5. 最小二乘法多项式拟合的Java实现

    背景 由项目中需要根据一些已有数据学习出一个y=ax+b的一元二项式,给定了x,y的一些样本数据,通过梯度下降或最小二乘法做多项式拟合得到a.b,解决该问题时,首先想到的是通过spark mllib去 ...

  6. 利用Python进行多项式拟合

    多项式拟合的简单代码: import matplotlib.pyplot as plt import numpy as np x=[,,,,,,,] y=[,,,,,,,] a=np.polyfit( ...

  7. python多项式拟合:np.polyfit 和 np.polyld

    python数据拟合主要可采用numpy库,库的安装可直接用pip install numpy等. 1. 原始数据:假如要拟合的数据yyy来自sin函数,np.sin import numpy as ...

  8. matlab练习程序(最小二乘多项式拟合)

    最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错. 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料. 这个文档介绍的还不错,我估计任何一本 ...

  9. numpy多项式拟合

    关于解决使用numpy.ployfit进行多项式拟合的时候请注意数据类型,解决问题的思路就是统一把数据变成浮点型,就可以了.这是numpy里面的一个bug,非常low希望后面改善. # coding: ...

随机推荐

  1. 【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群

    http://www.csdn.net/article/2014-11-06/2822529/3 大规模流量的网站架构,从来都是慢慢"成长"而来.而这个过程中,会遇到很多问题,在不 ...

  2. java怎样获取CPU占用率和硬盘占用率

    通过jmx可以监控vm内存使用,系统内存使用等,以下是网上某博客代码,特点是通过window和linux命令获得CPU使用率. 利用java程序实现获取计算机cpu利用率和内存使用信息. packag ...

  3. 去除html标记和替换script标记

    1: /// <summary> 2: /// 去除HTML标记 3: /// </summary> 4: /// <param name="NoHTML&qu ...

  4. 一些重要的计算机网络协议(IP、TCP、UDP、HTTP)

    一.计算机网络的发展历程 1.计算机网络发展 与其说计算机改变了世界,倒不如说是计算机网络改变了世界.彼时彼刻,你我都因网络而有了交集,岂非一种缘分? 计算机与网络发展大致经历如下过程:

  5. Java 求n天前的时间或者n月前的时间

    时间格式化 public static String DEFAULT_FORMATDATE = "yyyy-MM-dd"; 1.n天前的日期 /** * luyanlong * 默 ...

  6. 自己创建一个android studio在线依赖compile

    我正参加2016CSDN博客之星评选麻烦帮下 奖品我随机送给投票者(写一个随机数抽取) http://blog.csdn.net/vote/candidate.html?username=qfanmi ...

  7. Gradle 1.12用户指南翻译——第四十七章. Build Init 插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  8. Linux测量kernel子模块加载时间的方法

    1. 在文件kernel/init/main.c里面,在接口do_one_initcall( )中,将initcall_debug设置为true,然后编译boot.img 2. 使用adb shell ...

  9. Playground中格式注释语法

    类似于Ruby的ruby document,Xcode的Playground自身也提供一些嵌入文档中的格式注释的语法. 我们先定义一个简单的类: class A{ } 按住opt点击class A,你 ...

  10. 关于[[NSNotificationCenter defaultCenter] addObserver不remove后续又收到通知crash问题

    今天试了一个小demo,测出一个现象,同步出来:object 作为 observer 监听了通知 A,然后 object 中途被释放执行了dealloc,随后app发出这个通知 A:iOS 6.iOS ...