精华内容
下载资源
问答
  • 数据拟合方法

    万次阅读 多人点赞 2018-12-27 15:35:19
    1.2 数据拟合方法  曲线拟合也称为曲线逼近,它和插值函数有一些区别,只要求拟合的曲线合理的反应数据的基本趋势,而并不要求曲线一定经过数据点。曲线拟合有几种不同的判别准则,如使偏差的绝对值之和最小、使...

    数据拟合方法
      曲线拟合也称为曲线逼近,它和插值函数有一些区别,只要求拟合的曲线合理的反应数据的基本趋势,而并不要求曲线一定经过数据点。曲线拟合有几种不同的判别准则,如使偏差的绝对值之和最小、使偏差的最大绝对值最小和使偏差的平方和最小(即最小二乘法)。最常用的方法是最后一种。
    1. polyfit(X,Y,N)函数和polyval函数
    1.1 polyfit(X,Y,N)函数
      多项式曲线拟合。
    1.1.1语法
    p = polyfit(x,y,n) 返回阶数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中)。p 中的系数按降幂排列,p 的长度为 n+1。
    p ( x ) = p 1 x n + p 2 x n − 1 + . . . + p n x + p n + 1 p(x)=p_1x^{n}+p_2x^{n-1}+...+p_nx+p_{n+1} p(x)=p1xn+p2xn1+...+pnx+pn+1

    1) p = polyfit(x,y,n) 返回阶数为 n 的多项式 p(x) 的系数
    2)[p,S] = polyfit(x,y,n) 返回一个结构体 S,后者可用作 polyval 的输入来获取误差估计值。
    3) [p,S,mu] = polyfit(x,y,n) 返回值mu是二元素向量,表示预测值误差的均值mean(x)和方差std(x)分布

    说明:matlab 实现polyfit函数使用的是最小二乘+QR矩阵分解算法,所以以n阶拟合的时候,n应该不大于length(x)。
    1.2 polyval函数
    对应多项式拟合,多项式求值函数。
    1.2.1 语法

    y = polyval(p,x); 返回拟合后多项式的值

    [y,delta] = polyval(p,x,S)
    使用 polyfit 生成的可选输出结构体 S 来生成误差估计值 delta。delta 是使用 p(x) 预测 x 处的未来观测值时的误差标准差估计值。如果 p 中的系数是 polyfit 计算的最小二乘估计值,polyfit 数据输入中的误差呈独立正态分布,并拥有常量方差,则 y±delta 至少包含 x 处 50% 的未来观测值。

    y = polyval(p,x,[],mu)或[y,delta] =polyval(p,x,S,mu)
    使用 x 1 = ( x − μ 1 ) / μ 2 x_1=(x-μ_1)/μ_2 x1=(xμ1)/μ2 取代 x。在此方程中, μ 1 μ_1 μ1=mean(x) 且 μ 2 μ_2 μ2=std(x)。中心化和缩放参数 mu = [μ1,μ2] 是由 polyfit 计算的可选输出。

    结合polyfit的例子,可以尝试将拟合曲线画出来
    1.3 示例

    x = (-5:0.1:5);
    y = 3*x.^2+6*x + 5 + randn(size(x));
    p,S=polyfit(x,y,2)
    yy = polyval(p,x); 
    plot(x,y,'.');
    hold on;
    plot(x,yy,'r','LineWidth',1);
    legend('y','yy');
    

    运行结果:
    在这里插入图片描述

    >   p =
    >        25.7141   17.4310    5.1192
    >     S = 
    >             R: [3x3 double]
    >            df: 98
    >         normr: 9.8892
    >     mu =
    >         0.0000
    >         2.9300
    

    结果说明:
    (1)p - 最小二乘拟合多项式系数(向量)
    (2)S - 误差估计结构体(结构体)
    误差估计结构体。此可选输出结构体主要用作 polyval 函数的输入,以获取误差估计值。S 包含以下字段:

    字段说明
    RVandermonde 矩阵 x 的 QR 分解的三角因子
    df自由度
    normr残差的范数

    (3)mu - 中心化值和缩放值(二元素向量)
    中心化值和缩放值,以一个二元素向量形式返回。mu(1) 为 mean(x),并且 mu(2) 为 std(x)。这些值以单位标准差将 x 中的查询点的中心置于零值处。
    使用 mu 作为 polyval 的第四个输入以计算 p 在缩放点 (x - mu(1))/mu(2) 处的解。
    2、 fittype函数和fit函数
    满足自定义复杂的拟合公式。
    使用fittype函数可以自定义拟合函数,可以满足线性拟合和非线性拟合。
    Fittype函数具有很灵活的配置,基本满足各种复杂场景,有相应的cftool工具箱。
    2.1 fittype函数
    满足自定义复杂的拟合公式。
    使用fittype函数可以自定义拟合函数,可以满足线性拟合和非线性拟合。
    2.1.1语法
    1)

    aFittype = fittype(libraryModelName)
    通过指定库模型名称来构造拟合类型。
    构造库模型rat33的拟合类型(分子和分母的第三度的有理模型)。

    例子:f = fittype('rat33')

    f = 
         General model Rat33:
         f(p1,p2,p3,p4,q1,q2,q3,x) = (p1*x^3 + p2*x^2 + p3*x + p4) /
                   (x^3 + q1*x^2 + q2*x + q3)
    

    2)

    aFittype = fittype(expression)

    为MATLAB®表达式指定的模型创建拟合类型。

    例子: ft = fittype({'x','sin(x)','1'})

    ft = 
         Linear model:
         ft(a,b,c,x) = a*x + b*sin(x) + c
    

    加系数说明:

     ft3 = fittype({'cos(x)','1'},'coefficients',{'a1','a2'})
    
    > ft3 = 
    >      Linear model:
    >      ft3(a1,a2,x) = a1*cos(x) + a2
    

    3)

    aFittype = fittype(expression,Name,Value)
    使用由一个或多个Name,Value对参数指定的其他选项构造fit类型。

    构造自定义非线性模型的拟合类型,指定与问题相关的参数和自变量。
    构造自定义非线性模型的拟合类型,将n指定为与问题相关的参数,将u指定为自变量。

    g = fittype('a*u+b*exp(n*u)',...
                'problem','n',...
                'independent','u')
    
    g = 
         General model:
         g(a,b,n,u) = a*u+b*exp(n*u)
    

    构造自定义非线性模型的拟合类型,将时间指定为自变量。

    g = fittype('a*time^2+b*time+c','independent','time','dependent','height')
    g = 
         General model:
         g(a,b,c,time) = a*time^2+b*time+c
    

    构造适合某些数据的对数拟合类型,使用拟合类型创建拟合,并绘制拟合。

    x = linspace(1,100);  
    y = 5 + 7*log(x);
    myfittype = fittype('a + b*log(x)',...
        'dependent',{'y'},'independent',{'x'},...
        'coefficients',{'a','b'})
    myfit = fit(x',y',myfittype)
    plot(myfit,x,y)
    

    运行结果:

    myfittype = 
         General model:
         myfittype(a,b,x) = a + b*log(x)
    myfit = 
         General model:
         myfit(x) = a + b*log(x)
         Coefficients (with 95% confidence bounds):
           a =           5  (5, 5)
           b =           7  (7, 7)
    

    在这里插入图片描述
    4)

    aFittype = fittype(linearModelTerms)
    为自定义线性模型创建拟合类型,其中的术语由linearModelTerms中的字符向量表达式的单元格数组指定。
    要使用线性拟合算法,请指定术语的单元格数组。

    确定输入fittype所需的线性模型项:a * x + b * sin(x)+ c。 该模型在a,b和c中是线性的。 它有三个项x,sin(x)和1(因为c = c * 1)。 要指定此模型,请使用此单元格数组:LinearModelTerms = {‘x’,‘sin(x)’,‘1’}。

    使用线性模型术语的单元格数组作为fittype的输入。

    ft = fittype({'x','sin(x)','1'})
    ft = 
         Linear model:
         ft(a,b,c,x) = a*x + b*sin(x) + c
    

    再次创建拟合类型并指定系数名称。

    ft3 = fittype({'cos(x)','1'},'coefficients',{'a1','a2'})
    ft3 = 
         Linear model:
         ft3(a1,a2,x) = a1*cos(x) + a2
    

    5)

    aFittype = fittype(linearModelTerms,Name,Value)
    使用由一个或多个Name,Value对参数指定的其他选项构造fit类型。

    再次创建拟合类型并指定系数名称。

    ft3 = fittype({'cos(x)','1'},'coefficients',{'a1','a2'})
    ft3 = 
         Linear model:
         ft3(a1,a2,x) = a1*cos(x) + a2
    

    7)

    aFittype = fittype(anonymousFunction)
    为anonymousFunction指定的模型创建适合类型。

    使用匿名函数创建适合类型。

    g = fittype( @(a, b, c, x) a*x.^2+b*x+c )
    

    使用匿名函数创建拟合类型,并指定独立参数和从属参数。

    g = fittype( @(a, b, c, d, x, y) a*x.^2+b*x+c*exp(...
     -(y-d).^2 ), 'independent', {'x', 'y'},...
         'dependent', 'z' );
    

    使用匿名函数为曲面创建拟合类型,并指定独立参数和相关参数,以及稍后在调用fit时指定的问题参数。

    g = fittype( @(a,b,c,d,x,y) a*x.^2+b*x+c*exp( -(y-d).^2 ), ...
            'problem', {'c','d'}, 'independent', {'x', 'y'}, ...
            'dependent', 'z' ); 
    

    8)

    aFittype = fittype(anonymousFunction,Name,Value)
    使用由一个或多个Name,Value对参数指定的其他选项构造fit类型。

    使用匿名函数将工作空间数据传递到fittype和fit函数。

    创建并绘制S形曲线。 在后面的步骤中,您可以拉伸并移动此曲线以适合某些数据。
    2.2 fit函数
    将曲线或曲面拟合成数据
    2.2.1 语法
    1)

    fitobject = fit(x,y,fitType)
    创建适合于对数据x和y由指定的型号fitType。

    加载一些数据,适合于变量二次曲线cdate和pop,并绘制拟合和数据。

    load census;
    f = fit(cdate,pop,'poly2')
    

    f =
    线性模型 Poly2:
    f(x)= p1 * x ^ 2 + p2 * x + p3
    系数(95%置信区间):
    p1 = 0.006541(0.006124,0.006958)
    p2 = -23.51(-25.09,-21.93)
    p3 = 2.113e + 04(1.964e + 04,2.226e + 04)

    plot(F,cdate,pop)
    

    在这里插入图片描述
    2)

    fitobject = fit([x,y],z,fitType)
    创建一个表面拟合到数据中的载体x,y和z。

    加载一些数据并拟合 2 x度和3 度的多项式曲面y。绘制适合度和数据。

    load franke 
    sf = fit([x,y],z,'poly23')
    

    线性模型Poly23:
    sf(x,y)= p00 + p10 * x + p01 * y + p20 * x ^ 2 + p11 * x * y + p02 * y ^ 2 + p21 * x ^ 2 * y
    + p12 * x * y ^ 2 + p03 * y ^ 3
    系数(95%置信区间):
    p00 = 1.118(0.9149,1.321)
    p10 = -0.0002941(-0.000502,-8.623e-05)
    p01 = 1.533(0.7032,2.364)
    p20 = -1.966e-08(-7.084e-08,3.1552e-08)
    p11 = 0.0003427(-0.0001009,0.0007863)
    p02 = -6.951(-8.421,-5.481)
    p21 = 9.563e-08(6.276e-09,1.85e-07)
    p12 = -0.0004401(-0.0007082,-0.0001721)
    p03 = 4.999(4.082,5.917)

    plot(sf,[x,y],z)
    

    在这里插入图片描述

    展开全文
  • 数据拟合教程

    千次阅读 2017-04-24 12:15:13
    数据拟合教程 1.搭建环境 1.1所需软件 1) VMware Workstation Pro(VMware-workstation-full-12.0.0) 2) CentosIOS(详细版本CentOS-7-x86_64-DVD-1611) 3) FileZilla Client(文件上传软件) 4) Putty(SSH...

    数据拟合教程
    1.搭建环境
    1.1所需软件
    1) VMware Workstation Pro(VMware-workstation-full-12.0.0)
    2) CentosIOS(详细版本CentOS-7-x86_64-DVD-1611)
    3) FileZilla Client(文件上传软件)
    4) Putty(SSH链接工具)
    以上软件请到网上自行搜索下载,安装虚拟系统指定的目录为:E:\vmos\centos01,IP地址规划为:192.168.174.100。也可自行进行修改。
    1.2详细步骤
    1.2.1安装VMware
    下载相关软件后,按照提示进行操作即可,此处省略几万字。
    1.2.2安装FileZilla
    也省略几千字
    1.2.3新建centos系统虚拟机
    安装完VMware软件,启动之后的主界面如下:
    这里写图片描述
    创新建的虚拟机,按照提示点击“下一步”
    这里写图片描述
    为减少系统的性能影响,移除一些不必要的设备硬件
    这里写图片描述

    此处为了方便克隆更多的系统,点击生成,得到一个MAC地址。
    这里写图片描述
    这里写图片描述
    选择IOS镜像的位置
    这里写图片描述
    1.2.4开始安装
    这里写图片描述
    设置安装过程中使用的语言提示
    这里写图片描述
    设置系统时区,设置好之后,点击“Done”
    这里写图片描述
    这里写图片描述
    设置系统支持的语言,选择简体中文,设置好之后,点击“Done”
    这里写图片描述
    这里写图片描述
    选择以下安装源,不用改动,点击“Done”
    这里写图片描述
    这里写图片描述
    接下来进行网络相关的设置
    这里写图片描述
    这里写图片描述
    使用静态IP
    这里写图片描述
    这里写图片描述
    选择需要安装的软件,预测的图表需要图形包的支持
    这里写图片描述
    这里写图片描述
    点击“Begin Install”启动安装过程
    这里写图片描述
    设置以下root账户的密码
    这里写图片描述
    这里写图片描述
    为方便我设置的密码为123,此密码是root账户的密码。设置好密码,点击两次“Done”。
    安装开始了,需要等待一会,
    这里写图片描述
    喝杯caffe,回来看见了此界面,点击“Reboot”。重启之后,需要输入账号和密码
    这里写图片描述
    这里写图片描述
    至此,我们已经成功安装了centos系统。
    这里写图片描述
    1.2.5配置centos系统
    右击,选择“打开终端”,切换到root账号,输入命令:su –回车
    输入密码:123回车
    看到#,我们已成功进入到系统了,关闭并禁止自启动防火墙服务
    Systemctl stop firewalld.service
    Systemctl disable firewalld.service
    这里写图片描述
    查看以下IP地址:ip addr
    这里写图片描述
    IP地址就是我们刚才设置的192.168.174.100。

    1.2.6连接centos系统
    为方便复制、粘贴命令,我们使用putty连接此服务器。
    这里写图片描述
    同样输入账户密码,连接成功了。
    这里写图片描述
    查看python版本:python –version
    这里写图片描述
    1.2.7安装python相关包
    需要使用到的一些包,按照下面的命令执行即可:(不同的Iso镜像,稍有不同)
    yum update -y && yum install zip unzip python python-devel gcc glibc.i686 epel-release.noarch
    yum update -y && yum install -y tkinter
    yum -y install python-pip
    这里写图片描述
    Yum clean all,清理一下下载的缓存。先前的安装中,我们安装了一个很重要的包工具pip,此工具可以方便地为我们安装python所需要的包软件以及相关的依赖包等。按照顺序依次执行即可,安装过程中,会受网络的影响出现红色告警文字,不用担心,多尝试几次即可。
    pip install –upgrade pip
    这里写图片描述
    pip install scikit-learn numpy scipy
    pip install tflearn
    pip install h5py
    pip search matplotlib
    pip install matplotlib
    pip install pandas
    pip install seaborn
    pip install tensorflow
    pip install –upgrade tensorboard

    说明:
    python的科学计算有三剑客:numpy,scipy,matplotlib。
    numpy负责数值计算,矩阵操作等;
    scipy负责常见的数学算法,插值、拟合等;
    matplotlib负责画图;
    pandas负责数据的读取;
    1.2.8测试
    以上所有操作完成之后,我们需要的环境就已经搭建完毕。测试一下吧。
    这里写图片描述
    2.基础知识
    2.1矩阵
    在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。高等代数学中的常见工具,也常见于统计分析等应用数学学科中。
    2.1.1定义
    由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。记作:
    这里写图片描述
    2.1.2基本运算
    矩阵运算在科学计算中非常重要,而矩阵的基本运算包括矩阵的加法,减法,数乘,转置,共轭和共轭转置。
    2.1.2.1加法
    这里写图片描述
    2.1.2.2减法
    这里写图片描述
    2.1.2.3数乘
    这里写图片描述
    矩阵的数乘满足以下运算律:
    这里写图片描述
    这里写图片描述
    这里写图片描述
    矩阵的加减法和矩阵的数乘合称矩阵的线性运算。
    2.1.2.4转置
    把矩阵A的行和列互相交换所产生的矩阵称为A的转置矩阵,这一过程称为矩阵的转置
    这里写图片描述
    矩阵的转置满足以下运算律:
    这里写图片描述
    这里写图片描述
    这里写图片描述
    2.1.2.5共轭
    矩阵的共轭定义为:
    这里写图片描述
    共轭根式
    这里写图片描述都是有理根式,而 这里写图片描述这里写图片描述 中至少有一个是无理根式时,称 这里写图片描述
    这里写图片描述互为“共轭根式”。
    共轭矩阵
    共轭矩阵又称Hermite阵。Hermite阵中每一个第i 行第j 列的元素都与第j 行第i 列的元素的共轭相等。
    一个2×2复数矩阵的共轭如下所示 : ,则
    2.1.2.6共轭转置
    矩阵的共轭转置定义为:
    这里写图片描述
    也可以写为:
    这里写图片描述
    一个2×2复数矩阵的共轭如下所示:
    这里写图片描述

    这里写图片描述
    2.1.3乘法
    两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵
    这里写图片描述,它的一个元素:
    这里写图片描述
    并将此乘积记为:
    这里写图片描述.
    例如:
    这里写图片描述
    矩阵的乘法满足以下运算律:
    结合律:
    这里写图片描述
    左分配律:
    这里写图片描述
    右分配律:
    这里写图片描述
    矩阵乘法不满足交换律。
    3.数据预测案例
    3.1预测特定房子的价值
    这里写图片描述
    我们想预测特定房子的价值,预测依据是房屋面积。
    我们有下面的数据集:
    编号 平方英尺 价格
    1 150 6450
    2 200 7450
    3 250 8450
    4 300 9450
    5 350 11450
    6 400 15450
    7 600 18450

    根据上面的数据,我们来预测700平方英尺值的价格数值是多少?
    在线性回归中,我们都知道必须在数据中找出一种线性关系,以使我们可以得到a和b。 我们的假设方程式如下所示:
    y(x)=a+bx
    其中: y(x)是关于特定平方英尺的价格值(我们要预测的值),意思是价格是平方英尺的线性函数; a是一个常数; b是回归系数。
    思路:
    1)把数据存储成一个.csv文件,名字为input_data.csv 中,X值(平方英尺:square_feet)、Y值(价格:price),这一步很简单的,可以先用Excel来存储数据,记得写上列名。之后保存的时候另存为csv格式即可。
    2)编写python代码(完整代码如下,#开始的部分为注视,红色粗体部分内容在运行前可删除)

    中文显示乱码处理

    -- encoding=utf-8 --

    程序中要用到下面的包

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    from sklearn import datasets, linear_model

    M = []
    N = []

    将.csv数据读入Pandas数据帧并转换为X_parameter和Y_parameter数据返回

    def get_data(file_name):
    data = pd.read_csv(file_name)
    X_parameter = []
    Y_parameter = []
    for single_square_feet ,single_price_value in zip(data[‘square_feet’],data[‘price’]):
    X_parameter.append([float(single_square_feet)])
    Y_parameter.append(float(single_price_value))
    return X_parameter,Y_parameter

    把X_parameter和Y_parameter拟合为线性回归模型。我们要写一个函数,输入为X_parameters、Y_parameter和

    要预测的平方英尺值,返回a、b和预测出的价格值。

    这里使用的是scikit-learn机器学习算法包。该算法包是目前python实现的机器算法包最好的一个。

    创建一个线性模型,用我们的X_parameters和Y_parameter训练它。

    创建一个名称为predictions的字典,存着a、b和预测值,并返回输出

    def linear_model_main(X_parameters,Y_parameters,predict_value):
    regr = linear_model.LinearRegression() #定义使用的线性模型
    regr.fit(X_parameters, Y_parameters) #训练模型
    predict_outcome = regr.predict(predict_value) #测试数据,返回标记
    predictions = {}
    predictions[‘intercept’] = regr.intercept_ #则存放截距
    predictions[‘coefficient’] = regr.coef_ #存放相关系数
    predictions[‘predicted_value’] = predict_outcome
    return predictions

    调用函数,要预测的平方英尺值为700

    X,Y = get_data(‘input_data.csv’)
    for i in range(600,1000,50):
    predictvalue = i
    result = linear_model_main(X,Y,predictvalue)
    print “Intercept value ” , result[‘intercept’]
    print “coefficient” , result[‘coefficient’]
    print “Predicted value: “,result[‘predicted_value’]

    M.append([predictvalue])
    N.append(np.floor(result[‘predicted_value’]))

    加入预测的数值和结果到图形显示区域中

    X.append([predictvalue])
    Y.append(np.floor(result[‘predicted_value’]))

    这里,Intercept value(截距值)就是a的值

    coefficient value(系数)就是b的值

    得到预测的价格值为21915.4255

    意味着我们已经把预测房子价格的工作做完了!

    为了验证,需要看看我们的数据怎么拟合线性回归。

    所以需要写一个函数,输入为X_parameters和Y_parameters,显示出数据拟合的直线。

    def show_linear_line(X_parameters,Y_parameters):
    regr = linear_model.LinearRegression()
    regr.fit(X_parameters, Y_parameters)
    plt.scatter(X_parameters,Y_parameters,color=’blue’)
    plt.plot(X_parameters,regr.predict(X_parameters),color=’red’,linewidth=4)
    plt.xticks(X_parameters)
    plt.yticks(Y_parameters)

    regr2 = linear_model.LinearRegression()
    regr2.fit(M, N)
    plt.scatter(M,N,color=’blue’)
    plt.plot(M,regr2.predict(M),color=’green’,linestyle=”:”,linewidth=2)dd
    plt.xticks(M)
    plt.yticks(N)

    plt.show()
    show_linear_line(X,Y)

    调用一下show_linear_line函数吧:show_linear_line(X,Y)

    这里写图片描述
    从图形中,我们很直观地看到了700平方英尺房屋对应的房价数值为21915。
    实线部分表示训练数据,虚线部分表示预测数据。
    3.2拟合温度曲线

    根据某地每月的平均温度[17, 19, 21, 28, 33, 38, 37, 37, 31, 23, 19, 18]拟合温度函数。
    思路:
    scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。
    这里写图片描述
    可以看出温度是以年为单位的周期为12的正弦函数,构建函数y=a*sin(x*pi/6+b)+c,使用optimize.curve_fit函数求出a、b、c的值。

    实现代码:

    -- encoding=utf-8 --

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import optimize
    x=np.arange(1,13,1)
    x1=np.arange(1,13,0.1)
    ymax=np.array([17, 19, 21, 28, 33, 38, 37, 37, 31, 23, 19, 18 ])
    def fmax(x,a,b,c):
    return a*np.sin(x*np.pi/6+b)+c
    fita,fitb=optimize.curve_fit(fmax,x,ymax,[1,1,1])
    print(fita)
    plt.plot(x,ymax)
    plt.plot(x1,fmax(x1,fita[0],fita[1],fita[2]))
    plt.show()
    以下为拟合曲线,求出a b c的值为[ 10.93254952 -1.9496096 26.75]
    这里写图片描述
    3.3拟合对数曲线
    对数函数:
    y = a * log(x) + b
    实现代码:

    -- encoding=utf-8 --

    import matplotlib.pyplot as plt
    import numpy
    from scipy import log
    from scipy import optimize

    def polyfit(x, a, b):
    y = a * log(x) + b
    return y

    x=[ 1 ,2 ,3 ,4 ,5 ,6]
    y=[ 2.5 ,3.51 ,4.45 ,5.52 ,6.47 ,7.51]

    fita,fitb=optimize.curve_fit(polyfit,x,y,[1,1])

    print(fita)
    plt.scatter(x,y,color=’blue’)
    plt.plot(x,y)
    plt.scatter(x,polyfit(x,fita[0],fita[1]),color=’yellow’)
    plt.plot(x,polyfit(x,fita[0],fita[1]),linestyle=’:’,color=’red’)
    plt.show()
    运行显示结果如下,a=2.72873961,b=2.00115611
    这里写图片描述

    3.4多元线性回归
    1、多元线性回归模型定义
    当y值的影响因素不唯一时,采用多元线性回归模型。
    y =β0+β1x1+β2x2+…+βnxn
    2、销售数据样例
    TV Radio Newspaper Sales
    1 230.1 37.8 69.2 22.1
    2 44.5 39.3 45.1 10.4
    3 17.2 45.9 69.3 9.3
    4 151.5 41.3 58.5 18.5
    … … … … …
    191 39.5 41.1 5.8 10.8
    192 75.5 10.8 6 9.9
    193 17.2 4.1 31.6 5.9
    194 166.8 42 3.6 19.6
    195 149.7 35.6 6 17.3
    196 38.2 3.7 13.8 7.6
    商品销售额可能与电视广告投入,收音机广告投入,报纸广告投入有关系,可假设公式:
    sales =β0+β1 * TV +β2 * Radio +β3 * Newspaper
    3、分析数据
    1)特征:
     TV:对于一个给定市场中单一产品,用于电视上的广告费用(以千为单位)
     Radio:在广播媒体上投资的广告费用
     Newspaper:用于报纸媒体的广告费用
    2)响应:
     Sales:对应产品的销量
    在这个案例中,我们通过不同的广告投入,预测产品销量。因为响应变量是一个连续的值,所以这个问题是一个回归问题。数据集一共有200个观测值,每一组观测对应一个市场的情况。
    这里我们首先选择TV、Radio、Newspaper 作为特征,Sales作为观测值
    这里写图片描述
    seaborn的pairplot函数绘制X的每一维度和对应Y的散点图。通过设置size和aspect参数来调节显示的大小和比例。可以从图中看出,TV特征和销量是有比较强的线性关系的,而Radio和Sales线性关系弱一些,Newspaper和Sales线性关系更弱。通过加入一个参数kind=’reg’,seaborn可以添加一条最佳拟合直线和95%的置信带。
    4、线性回归模型
     优点:快速;没有调节参数;可轻易解释;可理解。
     缺点:相比其他复杂一些的模型,其预测准确率不是太高,因为它假设特征和响应之间存在确定的线性关系,这种假设对于非线性的关系,线性回归模型显然不能很好的对这种数据建模。
    线性模型表达式: y=β0+β1x1+β2x2+…+βnxnn
    其中
    • y是响应
    • β0是截距
    • β1是x1的系数,以此类推
    在这个案例中: y=β0+β1 * TV +β2 * Radio +β3 * Newspaper
    5、回归问题的评价测度
    (1) 评价测度
    对于分类问题,评价测度是准确率,但这种方法不适用于回归问题。我们使用针对连续数值的评价测度(evaluation metrics)。
    这里介绍3种常用的针对线性回归的测度。
    1) 平均绝对误差(Mean Absolute Error, MAE)
    1) 均方误差(Mean Squared Error, MSE)
    2) 均方根误差(Root Mean Squared Error, RMSE)
    这里我使用RMES。
    6、完整代码

    -- encoding=utf-8 --

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    from sklearn.cross_validation import train_test_split
    from sklearn.linear_model import LinearRegression
    from sklearn import metrics

    使用pandas加载数据集

    data = pd.read_csv(‘/renyuwo/Advertising.csv’)

    选择TV、Radio、Newspaper 作为特征,Sales作为观测值

    sns.pairplot(data, x_vars=[‘TV’,’Radio’,’Newspaper’], y_vars=’Sales’, size=7, aspect=0.8, kind=’reg’)

    使用pandas来构建X(特征向量)和y(标签列)

    X = data[[‘TV’, ‘Radio’, ‘Newspaper’]]
    y = data[‘Sales’]

    构建训练集与测试集(默认: 75% 的数据进行训练 25% 的数据进行测试)

    X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1)

    sklearn的线性回归

    linreg = LinearRegression()
    model=linreg.fit(X_train, y_train)

    预测

    y_pred = linreg.predict(X_test)

    使用RMES评价测度

    sum_mean=0
    for i in range(len(y_pred)):
    sum_mean+=(y_pred[i]-y_test.values[i])**2
    sum_erro=np.sqrt(sum_mean/50)

    做ROC曲线

    plt.figure()
    plt.plot(range(len(y_pred)),y_pred,’b’,label=”predict”)
    plt.plot(range(len(y_pred)),y_test,’r’,label=”test”)
    plt.legend(loc=”upper right”)
    plt.xlabel(“the number of sales”)
    plt.ylabel(‘value of sales’)
    plt.show()
    运行效果如下:
    这里写图片描述
    最后的结果如下:

    -- encoding=utf-8 --

    import tensorflow as tf
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd

    x=tf.placeholder(tf.float32,[None,1])

    W=tf.Variable(tf.zeros([1,1]))
    b=tf.Variable(tf.zeros([1]))

    y=tf.matmul(x,W)+b

    y_=tf.placeholder(tf.float32,[None,1])

    cost=tf.reduce_sum(tf.pow((y-y_),2))

    train_step=tf.train.GradientDescentOptimizer(0.0001). minimize(cost)

    init = tf. global_variables_initializer ()

    with tf.Session() as sess:
    sess.run(init)
    for I in range(100):
    xs=np.array([[i]])
    ys=np.array([[2*i+ tf.random_normal([1])]])
    sess.run(train_step,feed_dict={x:xs,y_:ys})
    4.6tensorboard可视化
    上面的代码已经成功运行了,那有没有一种可视化的工具,让我们更加深入了解前面的内容?google作为一个伟大的企业,已经为我们考虑到了,那就是tensorboard。
    当前的版本已经更新到1.0.1,很多api接口发生了变化,具体参考地址为:https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/4-1-tensorboard1/

    -- encoding=utf-8 --

    import tensorflow as tf
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt

    with tf.name_scope(‘x’):
    x=tf.placeholder(tf.float32,[None,1])

    with tf.name_scope(‘W’):
    W=tf.Variable(tf.zeros([1,1]))

    with tf.name_scope(‘b’):
    b=tf.Variable(tf.zeros([1]))

    with tf.name_scope(‘y’):
    y=tf.matmul(x,W)+b

    with tf.name_scope(‘y_’):
    y_=tf.placeholder(tf.float32,[None,1])

    with tf.name_scope(‘cost’):
    cost=tf.reduce_sum(tf.pow((y-y_),2))

    with tf.name_scope(‘train_op’):
    train_op=tf.train.GradientDescentOptimizer(0.0001). minimize(cost)

    init = tf. global_variables_initializer ()

    with tf.Session() as sess:
    writer = tf.summary.FileWriter(“/zjs/log/”, sess.graph)
    sess.run(init)
    for i in range(100):
    xs=np.array([[i]])
    ys=np.array([[2*i]])

    sess.run(train_step,feed_dict={x:xs,y_:ys})

    用putty开启一个新的session连接,输入
    tensorboard –logdir=’/zjs/log’
    运行后,会在相应的目录里生成一个文件,在浏览器中输入
    http://192.168.174.100:6006/
    我们可以看见可视化的tensorflow了。Tensorboard可视化模块详情:
    • Scalars: 展示训练过程中的统计数据(最值,均值等)变化情况
    • Image: 展示训练过程中记录的图像
    • Audio: 展示训练过程中记录的音频
    • Histogram: 展示训练过程中记录的数据分布图,更细节的取值概率信息
    • Distribution:显示取值范围
    编码说明:
    • Summary:所有需要在TensorBoard上展示的统计结果。
    • tf.name_scope():为Graph中的Tensor添加层级,TensorBoard会按照代码指定的层级进行展示,初始状态下只绘制最高层级的效果,点击后可展开层级看到下一层的细节。
    • tf.summary.scalar():添加标量统计结果。
    • tf.summary.histogram():添加任意shape的Tensor,统计这个Tensor的取值分布。
    • tf.summary.merge_all():添加一个操作,代表执行所有summary操作,这样可以避免人工执行每一个summary op。
    • tf.summary.FileWrite:用于将Summary写入磁盘,需要制定存储路径logdir,如果传递了Graph对象,则在Graph Visualization会显示Tensor Shape Information。执行summary op后,将返回结果传递给add_summary()方法即可。
    这里写图片描述

    展开全文
  • 数据拟合求解的基本步骤 一、数据拟合的基本原理 数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,...

    本篇文章主要讲解数学建模中的数据拟合相关的概念知识

    具体的MATLAB相关的计算可参考:一篇文章带你搞定使用 MATLAB 实现数学建模中的数据拟合

    一、数据拟合的基本原理

    数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合(fitting)。
    在这里插入图片描述

    展开全文
  • 1.数据准备 实际的数据大家可以通过pandas等package读入。 此处的数据是自己造的。 %matplotlib inline import numpy as np import tensorflow as tf import matplotlib.pyplot as plt plt.rcParams["figure....

    一,简单的线性回归

    1.数据准备

    实际的数据大家可以通过pandas等package读入。

    此处的数据是自己造的。

    %matplotlib inline
    import numpy as np
    import tensorflow as tf
    import matplotlib.pyplot as plt
    plt.rcParams["figure.figsize"] = (14,8)
    
    n_observations = 100
    xs = np.linspace(-3, 3, n_observations)
    ys = np.sin(xs) + np.random.uniform(-0.5, 0.5, n_observations)
    plt.scatter(xs, ys)
    plt.show()

    2.准备好placeholder

    X = tf.placeholder(tf.float32, name='X')
    Y = tf.placeholder(tf.float32, name='Y')

    3.初始化参数/权重

    W = tf.Variable(tf.random_normal([1]), name='weight')
    b = tf.Variable(tf.random_normal([1]), name='bias')

    4.计算预测结果

    Y_pred = tf.add(tf.multiply(X, W), b)

    5.计算损失函数值

    loss = tf.square(Y - Y_pred, name='loss')

    6.初始化optimizer

    learning_rate = 0.01
    optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

    7.指定迭代次数,并在session里执行graph


    n_samples = xs.shape[0]
    with tf.Session() as sess:
    	# 记得初始化所有变量
    	sess.run(tf.global_variables_initializer()) 
    	
    	writer = tf.summary.FileWriter('./graphs/linear_reg', sess.graph)
    	
    	# 训练模型
    	for i in range(50):
    		total_loss = 0
    		for x, y in zip(xs, ys):
    			# 通过feed_dic把数据灌进去
    			_, l = sess.run([optimizer, loss], feed_dict={X: x, Y:y}) 
    			total_loss += l
    		if i%5 ==0:
    			print('Epoch {0}: {1}'.format(i, total_loss/n_samples))
    
    	# 关闭writer
    	writer.close() 
    	
    	# 取出w和b的值
    	W, b = sess.run([W, b]) 


    plt.plot(xs, ys, 'bo', label='Real data')
    plt.plot(xs, xs * W + b, 'r', label='Predicted data')
    plt.legend()
    plt.show()

    拟合结果如下图所示:








    展开全文
  • MATLAB 数据拟合方法

    万次阅读 多人点赞 2018-08-01 23:26:32
    MATLAB 数据拟合方法 MATLAB 数据拟合方法 多项式拟合 1 多项式拟合指令 2 工具包拟合   曲线拟合也叫曲线逼近,与插值函数有些区别,其只要求拟合的曲线能合理地反映数据的基本趋势,并不要求曲线...
  • matlab中cftool拟合步骤

    2012-10-24 16:58:50
    Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合
  • 三维曲线(非线性)拟合步骤1 设定目标函数.(M函数书写)% 可以是任意的例如:functionf=mydata(a,data)%y的值目标函数值或者是第三维的,a=[a(1),a(2)]列向量x=data(1,:);�ta 是一2维数组,x=x1y=data(2,:);�ta 是一...
  • 基于Matlab平台的BP神经网络进行数据拟合 上次讨论了基于Hopfield神经网络的数字识别,BP(Back Propagation)神经网络也可以进行相关的数字识别如手写数字识别等,由于BP神经网络的特性,该网络需要一定的样本进行...
  • labview的曲线拟合

    2018-11-10 10:14:34
    这个用于线性函数拟合,具有良好的拟合度,有很号的利用价值
  • 本期视频时长约85分钟,通过三个具体的应用案例,详细地讲解了拟合的数学定义,使用拟合方法必备的...重点讲解了使用MATLAB实现线性拟合和多项式拟合的具体步骤和方法,并对典型函数的线性化处理方法,做了详细的介绍。
  • 本期视频时长约85分钟,通过三个具体的应用案例,详细地讲解了拟合的数学定义,使用拟合方法必备的...重点讲解了使用MATLAB实现线性拟合和多项式拟合的具体步骤和方法,并对典型函数的线性化处理方法,做了详细的介绍。
  • 数据拟合的最小二乘方法的实现

    千次阅读 2020-11-10 13:04:19
    数据拟合的最小二乘方法的实现一、实验任务二、编程环境三、实验原理与算法五、程序代码六、实验结果及分析七、心得体会 一、实验任务 给定离散样本点,采用最小二乘方法拟合样本数据,涉及的线性方程组请用高斯...
  • 不论是 matlab 还是 R 语言,根据一组数据拟合分布函数时,只能拟合出特定分布的参数值,并不能给出最适合这组数据的分布函数。例如,matlab 有 normfit 函数来计算一组数据拟合成正态分布时的均值和方差,wblfit ...
  • XPS峰拟合步骤及规则

    千次阅读 2020-12-22 07:49:43
    将需拟合元素(如Ir)的结合能-(+)α,得标准化数据。注:若得到的C1s不平滑,先怀疑是否测试过程出现问题。若无测试问题,数据可信,将C1s进行拟合得到一个最高点(可用XPSPEAK,origin等)。拟合元素...
  • 使用Origin软件对数据进行指数拟合的方法 一、绘制散点图 1、选中数据 2、菜单栏->plot->Scatter 二、进行拟合 1、选中所画散点图 选择数据点——“Analysis”——“Fitting”——“Exponential Fit”; 在...
  • 因为curvefit给你一个常量(一条直线),因为你给它传递的是一个使用你定义的模型不相关的数据集!在让我先重新创建您的设置:argon = np.genfromtxt('argon.dat')copper = np.genfromtxt('copper.dat')f1 = 1 - np....
  • 利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。 拟合 在实际...
  • EIS电路拟合AZSimDemo

    2018-06-07 19:44:25
    EIS电路拟合AZSimDemo,非常好用,
  • 作者:sumjess目前内容:第一章 数学建模常规方法及其MATLAB实现---数据拟合方法一、多项式拟合将数据点按多项式的形式进行拟合,使用最小二乘法,可以确定多项式的系数。多项式拟合有指令语句和图形窗口两种方法:1...
  • 利用Matlab对采样数据进行曲线拟合

    千次阅读 2019-03-14 08:11:42
    我们在做数据处理或者采集的时候难免会遇到实际值和采样结果之间存在误差的情况,这就需要我们通过对实验结果进行曲线拟合,从而得到较为准确的结果。 这几天在做变换器的时候就遇到了处理器采样结果和实际输入电压...
  • MATLAB 中BP神经网络算法用于回归拟合的实现

    万次阅读 多人点赞 2018-07-21 17:08:02
    BP神经网络算法提供了一种普遍并且实用的方法从样例中学习值为实数、...具体步骤   这里以一个普遍实用的简单案例为例子进行编程的说明。 假设一组x1,x2,x3的值对应一个y值,有2000组这样的数字,我们选...
  • EXAFS数据的分析和拟合 一般原理程序和体会 孙治湖 中国科学技术大学国家同步辐射实验室 2015年8月13日合肥 主要内容 1. 数据分析的基础EXAFS的基本原理 2. EXAFS数据处理的一般步骤 3... 多数据拟合 8. 一些需要注意的
  • 摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识。接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识。介绍多项式...
  • python运用sklearn进行数据拟合和回归

    万次阅读 2019-04-12 18:26:05
    对于线性回归来说,无论是用什么工具实现,步骤都是大同小异的: 初始化多项式方程 对多项式方程进行多次迭代,通过最小二乘法求出使平方损失函数最小情况下的拟合方程。 对模型预测结果进行评估 调整参数...
  • 对于机器学习来说,最简单的模型就是线性回归,线性回归往往作为机器学习的入门模型来学习,线性回归,顾名思义就是数据集合的分布可以用一条直线(二维)或者一个平面(三维)或者更多维度的线性方程 来进行划分...
  • 1、数据拟合 曲线拟合也叫曲线逼近,只要求拟合曲线能合理的反映数据的基本趋势,并不要求曲线一定通过数据点。曲线拟合有不同的判别准则,包括偏差的绝对值之和最小、偏差的最大绝对值最小和使偏差的平方和最小(即...
  • MATLAB遗传算法求解数据拟合和多参数优化问题代码实例 MATLAB遗传算法求解数据拟合和多参数优化问题代码实例 遗传算法单参数/多参数寻优 多参数寻优和单一参数寻优的基本思路是相同的,不过在种群初始化时,...
  • 使用最小二乘法拟合给定数据

    千次阅读 2020-04-27 23:19:57
    数据拟合的目的: 1.从大量实验数据(xi,yi) (i=0,1,2…m)中寻找其函数关系 y = f(x)的近似表达式y=p(x) 2.插值法要求插值曲线严格通过每个数据点,在n比较大时,差值多项式往往是告辞多项式,容易出现震荡现象。 3....
  • 高斯曲线拟合详细步骤

    万次阅读 2018-08-24 09:07:33
    已知一组数据:Yi={x1,x2,...,xn},需要拟合成高斯函数。  令 F(x)=lnf(x), ,化简可得到式(1), F(x)=lnA-x0^2/2*simga^2+xi*x0/sigma^2-xi^2/2*sigma^2....................................................

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,023
精华内容 23,209
关键字:

数据拟合的步骤

友情链接: AN160.zip