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

    万次阅读 2018-10-06 10:07:56
    机器学习中避免不了的会接触到数据拟合的概念,那么什么是数据拟合呢? 数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法...

    机器学习中避免不了的会接触到数据拟合的概念,那么什么是数据拟合呢?

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

    下面是我做的一个数据拟合的操作,且不论我用的是什么数据,这里只是谈论用fit对数据拟合产生的结果,并针对结果中的参数进行必要的解析。

    regr.fit(data[:,0].reshape(-1,1),data[:,1])
    
    
    
    #运行结果如下:
    LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
              intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
              penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
              verbose=0, warm_start=False)

    首先,运行结果表示,数据符合逻辑回归曲线。,那什么是逻辑回归,可以参考逻辑回归

    参数说明如下:

    • penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2。用于指定惩罚项中使用的规范。newton-cg、sag和lbfgs求解算法只支持L2规范。L1规范假设的是模型的参数满足拉普拉斯分布((L1范数)指的是权重参数W的各项元素绝对值之和),L2假设的模型参数满足高斯分布(权重参数W的各项元素的平方和的开方),所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),但是如果要说是不是加了约束就会好,这个没有人能回答,只能说,加约束的情况下,理论上应该可以获得泛化能力更强的结果。
    • dual:对偶或原始方法,bool类型,默认为False。对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。
    • tol:停止求解的标准,float类型,默认为1e-4。就是求解到多少的时候,停止,认为已经求出最优解。
    • c:正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化。
    • fit_intercept:是否存在截距或偏差,bool类型,默认为True。
    • intercept_scaling:仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1。
    • class_weight:用于标示分类模型中各种类型的权重,可以是一个字典或者’balanced’字符串,默认为不输入,也就是不考虑权重,即为None。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者自己输入各个类型的权重。举个例子,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9,1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]。
      • 那么class_weight有什么作用呢?
        • 在分类模型中,我们经常会遇到两类问题:
        • 第一种是误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。
        • 第二种是样本是高度失衡的,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。这时,我们可以选择balanced,让类库自动提高非法用户样本的权重。提高了某种分类的权重,相比不考虑权重,会有更多的样本分类划分到高权重的类别,从而可以解决上面两类问题。
    • random_state:随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用。
    • solver:优化算法选择参数,只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga。默认为liblinear。solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是:
      • liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
      • lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
      • newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
      • sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
      • saga:线性收敛的随机优化算法的的变重。
      • 总结
        • liblinear适用于小数据集,而sag和saga适用于大数据集因为速度更快。
        • 对于多分类问题,只有newton-cg,sag,saga和lbfgs能够处理多项损失,而liblinear受限于一对剩余(OvR)。啥意思,就是用liblinear的时候,如果是多分类问题,得先把一种类别作为一个类别,剩余的所有类别作为另外一个类别。一次类推,遍历所有类别,进行分类。
        • newton-cg,sag和lbfgs这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear和saga通吃L1正则化和L2正则化。
        • 同时,sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化,所以当你有大量的样本,又需要L1正则化的话就要自己做取舍了。要么通过对样本采样来降低样本量,要么回到L2正则化。
        • 从上面的描述,大家可能觉得,既然newton-cg, lbfgs和sag这么多限制,如果不是大样本,我们选择liblinear不就行了嘛!错,因为liblinear也有自己的弱点!我们知道,逻辑回归有二元逻辑回归和多元逻辑回归。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种。而MvM一般比OvR分类相对准确一些。郁闷的是liblinear只支持OvR,不支持MvM,这样如果我们需要相对精确的多元逻辑回归时,就不能选择liblinear了。也意味着如果我们需要相对精确的多元逻辑回归不能使用L1正则化了。
    • max_iter:算法收敛最大迭代次数,int类型,默认为10。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。
    • multi_class:分类方式选择参数,str类型,可选参数为ovr和multinomial,默认为ovr。ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
      • OvR和MvM有什么不同*?*
        • OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。
        • MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。
        • 可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。
    • verbose:日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。
    • warm_start:热启动参数,bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。
    • n_jobs:并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。

    总结:

    • 优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低。
    • 缺点:容易欠拟合,分类精度可能不高。
    • 其他
      • Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法完成。
      • 改进的一些最优化算法,比如sag。它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批量处理。
      • 机器学习的一个重要问题就是如何处理缺失数据。这个问题没有标准答案,取决于实际应用中的需求。现有一些解决方案,每种方案都各有优缺点。
      • 我们需要根据数据的情况,这是Sklearn的参数,以期达到更好的分类效果。

    关于参数的说明参考了名为燕山之边的博客,这里表示感谢!

    展开全文
  • MATLAB数据拟合

    千人学习 2019-05-14 22:12:40
    结合MATLAB曲线拟合工具箱介绍数据拟合,内容包括数据预处理、参数拟合和非参数拟合等。
  • 数据拟合方法

    万次阅读 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)=p1xn+p2xn1+...+pnx+pn+1p(x)=p_1x^{n}+p_2x^{n-1}+...+p_nx+p_{n+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)
    使用 x1=(xμ1)/μ2x_1=(x-μ_1)/μ_2 取代 x。在此方程中, μ1μ_1=mean(x) 且 μ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 包含以下字段:

    字段 说明
    R Vandermonde 矩阵 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)
    

    在这里插入图片描述

    展开全文
  • matlab_数据拟合

    2015-08-25 16:05:18
    数据拟合

    【多项式拟合】

    polyfit(X, Y, N);%多项式拟合,返回降幂排列的多项式系数。
    polyval(P, xi);%计算多项式的值

    function example()
        x = [...];
        y = [...];
        P = polyfit(x, y, 3);
        xi = 0:0.2:10;
        yi = polyval(P, xi);
        plot(xi, yi, x, y, 'r*');
    end
    
    %也可以用plot(x, y, '*r')在工具箱(Tools → Basic Fitting)中进行拟合

    【指定函数拟合】

    样例:f(t) = a cos ( k t ) e ω t

    function example()
        syms t %创建符号对象
        x = [...];
        y = [...];
        f = fittype('a*cos(k*t)*exp(w*t)', 'independent', 't', 'coefficients', {'a', 'k', 'w'});    %构建函数
        cfun = fit(x, y, f);    %拟合
        xi = 0:.1:20;
        yi = cfun(xi);
        plot(x, y, 'r*', xi, yi, 'b-');
    end
    
    %也可以在工具箱Start → Toolboxes → Curve Fitting → Curve Fitting Tool(cftool)中或输入cftool命令进行拟合
    曲线拟合工具箱
    Data: 输出、查看和平滑数据。
    Fitting: 拟合数据、比较拟合曲线和数据集。
    Exclude: 可从拟合曲线中排出特殊的数据点。
    Plotting: 选定区间后,单机按钮可选择原始数据和拟合的数据作图。
    Analysis: 对拟合进行满意度、偏差等分析。

    【实例】

    给出数据,用Logistic曲线模型进行拟合。
    已知函数模型为:

    y = 1 / ( a + b e-t )

    只需令 y’= 1/y, x’= e-t 就可转换成模型:

    y’ = a + b x’

    function example()
        clear
        clc
        %读入数据
        Y = [...];
        X = [...];
        %线性优化处理
        for t = 1:30
            x(t) = exp(-t);
            y(t) = 1/Y(t);
        end
        %计算,并输出回归系数B
        c = zeros(30, 1) + 1;
        x = [c, x'];
        B = inv(X'*X)*X'*y';    %inv求逆矩阵
        for i = 1:30
            %计算回归拟合值
            z(i) = B(1, 1) + B(2,1) * x(i);
            %计算离差
            s(i) = y(i) - sum(y)/30;
            %计算误差
            w(i) = z(i) - y(i);
        end
        %离差平方和S
        S = s * s';
        %回归误差平方和Q
        Q = w * w';
        %回归平方和U
        U = S - Q;
        %计算,并输出F检验值
        F = 28 * U / Q;
        %非线性回归模型的拟合值
        for j = 1:30
            Y(j) = 1/(B(1,1) + B(2,1) * exp(-j));
        end
        %输出拟合曲线
        plot(T, y);
    end


    展开全文
  • MATLAB数据拟合实例(给出两组数据拟合y=ax±b)转-MATLAB插值与拟合(1)2010-03-29 19:45§1曲线拟合实例:温度曲线问题气象部门观测到一天某些时刻的温度变化数据为:t012345678910T1315171416192624262729试描绘出...

    MATLAB数据拟合实例(给出两组数据拟合y=ax±b)

    转-MATLAB插值与拟合(1)

    2010-03-29 19:45

    §1曲线拟合

    实例:温度曲线问题

    气象部门观测到一天某些时刻的温度变化数据为:

    t

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    T

    13

    15

    17

    14

    16

    19

    26

    24

    26

    27

    29

    试描绘出温度变化曲线。

    曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。

    曲线拟合有多种方式,下面是一元函数采用最小二乘法对给定数据进行多项式曲线拟合,最后给出拟合的多项式系数。

    1.线性拟合函数:regress()

    调用格式:?b=regress(y,X)

    ?[b,bint,r,rint,stats]= regress(y,X)

    ?[b,bint,r,rint,stats]= regress(y,X,alpha)

    说明:b=regress(y,X)返回X与y的最小二乘拟合值,及线性模型的参数值β、ε。该函数求解线性模型:

    y=Xβ+ε

    β是p′1的参数向量;ε是服从标准正态分布的随机干扰的n′1的向量;y为n′1的向量;X为n′p矩阵。

    bint返回β的95%的置信区间。r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。

    例1:设y的值为给定的x的线性函数加服从标准正态分布的随机干扰值得到。即y=10+x+ε ;求线性拟合方程系数。

    程序: x=[ones(10,1) (1:10)'];

    ?y=x*[10;1]+normrnd(0,0.1,10,1);

    ?[b,bint]=regress(y,x,0.05)

    结果:?x =

    ?1?1

    ?1?2

    ?1?3

    ?1?4

    ?1?5

    ?1?6

    ?1?7

    ?1?8

    ?1?9

    ?1?10

    y =

    ?10.9567

    ?11.8334

    ?13.0125

    ?14.0288

    ?14.8854

    ?16.1191

    ?17.1189

    ?17.9962

    ?19.0327

    ?20.0175

    b =

    ?9.9213

    ?1.0143

    bint =

    ?9.7889?10.0537

    ?0.9930?1.0357

    即回归方程为:y=9.9213+1.0143x

    2.多项式曲线拟合函数:polyfit( )

    调用格式:?p=polyfit(x,y,n)

    ?[p,s]= polyfit(x,y,n)

    说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。矩阵s用于生成预测值的误差估计。(见下一函数polyval)

    例2:由离散数据

    x

    0

    .1

    .2

    .3

    .4

    .5

    .6

    .7

    .8

    .9

    1

    y

    .3

    .5

    1

    1.4

    1.6

    1.9

    .6

    .4

    .8

    1.5

    2

    拟合出多项式。

    程序:

    ?x=0:.1:1;

    ?y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2];

    ?n=3;

    ?p=polyfit(x,y,n)

    ?xi=linspace(0,1,100);

    ?z=polyval(p,xi);?%多项式求值

    ?plot(x,y,'o',xi,z,'k:',x,y,'b')

    ?legend('原始数据','3阶曲线')

    结果:

    p =

    ?16.7832?-25.7459?10.9802?-0.0035

    多项式为:16.7832x3-25.7459x2+10.9802x-0.0035

    曲线拟合图形:

    如果是n=6,则如下图:

    也可由函数给出数据。

    例3:x=1:20,y=x+3*sin(x)

    程序:

    ?x=1:20;

    ?y=x+3*sin(x);

    ?p=polyfit(x,y,6)

    ?xi=linspace(1,20,100);

    ?z=polyval(p,xi);?%多项式求值函数

    ?plot(x,y,'o',xi,z,'k:',x,y,'b')

    ?legend('原始数据','6阶曲线')

    结果:

    p =

    0.0000?-0.0021?0.0505?-0.5971?3.6472?-9.7295?11.3304

    再用10阶多项式拟合

    ?程序:x=1:20;

    y=x+3*sin(x);

    p=polyfit(x,y,10)

    xi=linspace(1,20,100);

    z=polyval(p,xi);

    plot(x,y,'o',xi,z,'k:',x,y,'b')

    legend('原始数据','10阶多项式')

    结果:p =

    ?Columns 1 through 7

    ?0.0000?-0.0000?0.0004?-0.0114?0.1814?-1.8065?11.2360

    ?Columns 8 through 11

    ?-42.0861?88.5907?-92.8155?40.2671

    可用不同阶的多项式来拟合数

    展开全文
  • matlab数据拟合

    千次阅读 2018-12-17 21:29:15
    cftool工具箱主要是针对数据拟合的。使用起来特别的强大,尤其对于数据的处理超级方便,可以直接对于数据拟合,并且可以预设各种的拟合方案。这里注意的是非线性的也可以进行拟合,例如:幂律,高斯等等。 ...
  • MATLAB 数据拟合方法

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

    万次阅读 2018-03-09 20:13:11
    数据拟合: 直线拟合--多项式拟合1.问题概述在实际问题中,常常需要从一组观察数据 (xi,yi) i=1,2,,..,n去预测函数 y=f(x) 的表达式,从几何角度来说,这个问题就是要由给定的一组数据点(xi,yi)去描绘曲线 y=f(x) ...
  • Python中guiqwt是和MatPlotLib一样优秀的2D绘图库,基于PyQt库,里面有进行曲线数据拟合的专门工具guifit.guifit用起来和matlab中的cftool一样方便,比OriginLab Pro中的曲线拟合工具强.用起来十分简单,下面是示例程序:...
  • matlab之数据拟合

    万次阅读 多人点赞 2018-08-25 01:35:02
    所谓数据拟合是求一个简单的函数,例如是一个低次多项式,不要求通过已知的这些点,而是要求在整体上“尽量好”的逼近原函数。这时,在每个已知点上就会有误差,数据拟合就是从整体上使误差,尽量的小一些。 多项式拟合 ...
  • 数据拟合之Excel篇

    千次阅读 2019-08-13 12:02:20
    要尝试入门数据分析,不如从数据拟合入手,毕竟操作起来非常非常非常简单! #什么是数据拟合 按照百度给出的定义,数据拟合是这样的: 数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入...
  • matlab 数据拟合

    千次阅读 2017-07-03 21:02:13
    目的:matlab数据拟合 描述:假设有一组数据(假设为二元数据,一组x,一组y),希望得到该x与y对应的函数曲线 工具:matlab 操作: 1.载入数据 2.打开拟合界面 拟合界面在matlab2016a里 是在最上面工具栏...
  • 1、引言在之前的文章介绍过了数据插值,今天写一些它的姊妹篇—数据拟合。数据插值的特点是数据插值函数会严格过所有插值节点,而数据拟合只要求拟合函数合理地反映曲线趋势,不要求必须过所有数据点。数据插值的...
  • 数据拟合教程

    千次阅读 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...
  • 实验5 数据拟合

    千次阅读 2017-11-29 10:33:22
    实验5 数据拟合5.1试验目的 初步熟悉Matlab的数据处理基本功能。 掌握数据拟合的原理与工程使用方法。 5.2实验内容 5.2.1 数据分析 气体在容器中被吸引的比率Y与气体的温度X1和吸收液体的蒸汽压力X2有关,其...
  • 数据拟合 百度百科定义: 数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望...
  • 关于数据拟合

    千次阅读 2013-12-10 21:41:36
    昨天做了数据拟合的几道题,复现几张图,见下图所示: 拟合结果:
  • **Matlab根据数据拟合圆及拟合效果对比**前言代码原理 前言 本实例为自己摘录之后根据个人需求更改后上传。 实现的功能为:将txt中的数据进行导入matlab,并拟合圆,求圆心坐标及画圆对比。 txt文件中一共三列,每列...
  • 解决数据拟合问题最重要方法是最小二乘法和回归分析。如,我们需要从一组测定的数据(例如N个点(xi,yi)(i=0,1,…,m))去求得自变量 x 和因变量 y 的一个近似解表达式 y=f(x),这就是由给定的 N 个点(xi,...
  • 本篇文章主要讲解数学建模中的数据拟合相关的概念知识 具体的MATLAB相关的计算可参考:一篇文章带你搞定使用 MATLAB 实现数学建模中的数据拟合 文章目录一、数据拟合的基本原理二、拟合与插值的区别与联系三、数据...
  • Matlab数据拟合

    千次阅读 多人点赞 2020-07-23 18:14:03
      1)拟合数据:https://github.com/InkiInki/data/blob/master/test/linear_regression.txt 1 多项式拟合   代码示例: function [] = test() %%载入数据 data = importdata('linear_regression.txt'); ...
  • python实现2019-nCoV疫情确诊数据拟合与预测

    千次阅读 多人点赞 2020-02-06 15:04:11
    python实现2019-nCoV疫情确诊数据拟合与预测 探索这些数据的规律和内在联系了
  • 根据两组数据拟合曲线

    千次阅读 2017-09-14 11:40:37
    1. 方法一:用Excel拟合: ...趋势线选项:可以选择拟合成哪种线形。 ... 注意: 问题一:有些线形可以拟合但是得不出公式。...问题二:有些线性是不...问题三:因为多项式拟合只能到6次,导致有些数据拟合所得曲线误差较大。
  • 我有一组数据,其中x和y是函数中已知的参数,它们在函数中写成x=x和y=x1,我需要拟合这些数据,这样才能得到未知参数(E,B0,S0)的值。到目前为止,我有这个,但是当我尝试运行这个时,我得到了一个错误:ValueError...
  • 数据拟合与插值方法

    万次阅读 2017-01-04 00:02:20
    数据拟合和插值方法的汇总介绍,线性回归以及非线性回归
  • 如何利用MATLAB进行数据拟合

    千次阅读 2020-04-20 22:04:43
    本文是科学计算与MATLAB语言课程的第5章第5、6小结的学习笔记,通过查阅本文,可以轻松掌握利用MATLAB进行数据拟合了。Enjoy your reading!Enjoy\ your\ reading!Enjoy your reading!...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,458
精华内容 9,783
关键字:

数据拟合