精华内容
下载资源
问答
  • 对数据进行线性拟合
    2016-12-29 17:34:00

    http://www.cnblogs.com/softlin/p/5965939.html

    挖坑

    转载于:https://www.cnblogs.com/Macaulish/p/6233890.html

    更多相关内容
  • 使用python来完成数据线性拟合

    千次阅读 2021-12-19 17:50:45
    用最小二乘法或线性回归来拟合直线

            拟合,顾名思义就是通过对数据的分析,找到数据之间的数学关系,把这种关系的本质理解的越深,得到的拟合度就越高,越能清晰描述数据间的相互联系。拟合有线性拟合和非线性拟合(多项式拟合)。本文着重线性拟合的思想,因为非线性拟合通过一定方法可以转换为线性拟合。演示代码用python实现。

           我们有一组点序列(x0,y0),(x1,y1),(x2,y2),...(xn,yn)。假如y与x是线性关系,可以表示为y=ax+b(直线方程),那么拟合就是要得到a和b这两个参数的值。得到最佳的a与b,从而使得点序列中所有点到此直线的距离之和最短。

            完成一个拟合的练习,这里练习代码的思路是:

            1. 指定好a和b的值,即模型已知(便于对比最后结果的准确度),生成一组数据X和Y。

            2. 给数据增加噪声,生成待拟合的样本数据。

            3. 本代码中提供了三种方法来拟合样本。

                    3.1 最小二乘法:   求解出使得最小时的a和b。

                    3.2 常规方程法:   利用线性代数中求解方程 的方法,解出权重系数矩阵θ,结果为 

                    3.3 线性回归法:  用线性回归对此数据序列的建模为=,这里令,便于矩阵的构建,方便求出偏置。  模型方程中的X矩阵为,x0和x1就是y=b*1+a*x 对应的1和x. 权重系数矩阵为其实就是b,就是a。通过梯度下降法来求解使得损失函数取得最小值时的矩阵的值,就是最佳的a和b。

             三种方法中选择1种进行拟合,从样本数据中计算权重参数a_和b_。

            4.将拟合到的结果可视化

    import numpy as np
    from sklearn.linear_model import LinearRegression
    from matplotlib import pyplot as plt
    
    SAMPLE_NUM = 100
    print("您当前的样本数目为:",SAMPLE_NUM)
    
    # 先预设一个结果,假定拟合的结果为 y=-6x+10
    X = np.linspace(-10, 10, SAMPLE_NUM)
    a = -6
    b = 10
    Y = list(map(lambda x: a * x + b, X))
    print("标准答案为:y={}*x+{}".format(a, b))
    
    # 增加噪声,制造数据
    Y_noise = list(map(lambda y: y + np.random.randn()*10, Y))
    plt.scatter(X, Y_noise)
    plt.title("data to be fitted")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.show()
    
    A = np.stack((X, np.ones(SAMPLE_NUM)), axis=1)  # shape=(SAMPLE_NUM,2)
    b = np.array(Y_noise).reshape((SAMPLE_NUM, 1))
    
    print("方法列表如下:"
          "1.最小二乘法 least square method "
          "2.常规方程法 Normal Equation "
          "3.线性回归法 Linear regression")
    method = int(input("请选择您的拟合方法: "))
    
    Y_predict=list()
    if method == 1:
        theta, _, _, _ = np.linalg.lstsq(A, b, rcond=None)
        # theta=np.polyfit(X,Y_noise,deg=1) 也可以换此函数来实现拟合X和Y_noise,注意deg为x的最高次幂,线性模型y=ax+b中,x最高次幂为1.
        # theta=np.linalg.solve(A,b) 不推荐使用
        theta = theta.flatten()
        a_ = theta[0]
        b_ = theta[1]
        print("拟合结果为: y={:.4f}*x+{:.4f}".format(a_, b_))
        Y_predict = list(map(lambda x: a_ * x + b_, X))
    
    elif method == 2:
        AT = A.T
        A1 = np.matmul(AT, A)
        A2 = np.linalg.inv(A1)
        A3 = np.matmul(A2, AT)
        A4 = np.matmul(A3, b)
        A4 = A4.flatten()
        a_ = A4[0]
        b_ = A4[1]
        print("拟合结果为: y={:.4f}*x+{:.4f}".format(a_, b_))
        Y_predict=list(map(lambda x:a_*x+b_,X))
    
    elif method == 3:
        # 利用线性回归模型拟合数据,构建模型
        model = LinearRegression()
        X_normalized = np.stack((X, np.ones(SAMPLE_NUM)), axis=1)  # shape=(50,2)
        Y_noise_normalized = np.array(Y_noise).reshape((SAMPLE_NUM, 1))  #
        model.fit(X_normalized, Y_noise_normalized)
        # 利用已经拟合到的模型进行预测
        Y_predict = model.predict(X_normalized)
        # 求出线性模型y=ax+b中的a和b,确认是否和我们的设定是否一致
        a_ = model.coef_.flatten()[0]
        b_ = model.intercept_[0]
        print("拟合结果为: y={:.4f}*x+{:.4f}".format(a_, b_))
    
    else:
        print("请重新选择")
    
    plt.scatter(X, Y_noise)
    plt.plot(X, Y_predict, c='green')
    plt.title("method {}: y={:.4f}*x+{:.4f}".format(method, a_, b_))
    plt.show()
    

       这里我生成的待拟合数据如下图所示:

     得到的拟合结果如下图所示:

            结果分析,代码中生成的样本为100个点,上图为得到的拟合结果。如果要得到更准确的拟合结果,不妨设置SAMPLE_NUM为更大的数,会得到更好的拟合效果。我这里做了一组测试对比:可以明显看出,随着样本点数目的增多,拟合结果越来越逼近 y= -6*x+10这个标准答案了。

    拟合结果对比
    样本点数目ab
    5
    -6.0153
    10.6758
    50
    -5.9589
    10.0761
    500
    -5.9856
    9.9706
    5000
    -6.0021
    10.0086
    50000
    -6.0002
    10.0002

    展开全文
  • 实验室老师让给数据画一张线性拟合图。不会matlab,就琢磨着用python。参照了网上的一些文章,查看了帮助文档,成功的写了出来 这里用到了三个库 import numpy as np import matplotlib.pyplot as plt from scipy ...
  • 使用python进行线性拟合和曲线拟合,包括多项式函数和幂指数函数等曲线拟合,可以导入excel数据,并进行相关系数、可决系数、均方误差的求取,以及进行曲线可视化。
  • 本文实例讲述了Python线性拟合实现函数与用法。分享给大家供大家参考,具体如下: 1. 参考别人写的: #-*- coding:utf-8 -*- import math import matplotlib.pyplot as plt def linefit(x , y): N = float(len(x))...
  • Python 线性回归方程计算,导入EXCEL数据,计算线性拟合函数K和B值,并用图像展现样本数据和拟合函数
  • Python实现数据线性拟合

    千次阅读 2021-06-21 20:06:27
    Python实现数据线性拟合Python实现数据线性拟合数据拟合会涉及到多种拟合方法,本文旨在把本人所可能使用到的做一个总结 Python实现数据线性拟合 数据拟合会涉及到多种拟合方法,本文旨在把本人所可能使用到的...

    Python实现对实验数据的函数拟合


    数据拟合会涉及到多种拟合方法,本文旨在把本人可能使用到的做一个总结
    持续更新ing

     1. List item  # 线性拟合
    
    from scipy import optimize
    import numpy as np
    import matplotlib.pyplot as plt
    
    def f1(x, k, b):
        return k * x + b
    
    
    x0 = cou_di  # 需要拟合的一维数组,x
    y0 = tdc_di  # 需要拟合的一维数组,y
    
    k1, b1 = optimize.curve_fit(f1, x0, y0)[0]
    x1 = np.arange(0, 75, 0.01)  # 30和75要对应x0的两个端点,0.01为步长
    
    y1 = k1 * x1 + b1
    f = plt.figure()
    plt.plot(x1, y1, "blue", label='k=% .4f' % k1)
    plt.plot(x0, y0, 'r.')
    plt.xlabel('t')
    plt.ylabel('Mt/g')
    plt.legend()
    f.show()
    
    展开全文
  • 用matlab实现已知数据的非线性拟合数据预测
  • #资源达人分享计划#
  • 线性拟合软件,无需赋初值,包含各种求解方式
  • 一维线性拟合 数据为y=4x+5加上噪音 结果: import numpy as np from mpl_toolkits.mplot3d import Axes3D from matplotlib import pyplot as plt from torch.autograd import Variable import torch from torch ...
  • 使用C#的Mathnet类库实现非线性拟合 作者:linbor tinka
  • 在C环境下,编写程序实现对数据的曲线拟合,得出拟合曲线的方程p(x) = a + bx的线性拟合
  • Labview非线性拟合

    2017-09-16 16:33:27
    Labview用LM算法非线性拟合,可以实现一组数据的非线性拟合,而不用知道具体的方程系数,我都觉得很烦了,能两句话说完,要那么多废话干嘛
  • 此代码使用启发式方法随机数据进行采样,从而使残差范数保持在较低水平。 该代码是为所附的 excel 文件编写的,该文件包含 121 个观察值。
  • 分段线性拟合matlab代码 Piecewise linear fitting/regression MATLAB This method can be used in both linear regrassion and nonlinear regression. The dimension of beta depends on the number of coefficient...
  • #资源达人分享计划#
  • 数据拟合,回归算法,一次回归,多次回归,线性拟合,非线性拟合
  • 基于Python和梯度下降算法的物理实验数据一元线性拟合方法.pdf
  • [matlab]简单的线性拟合以及作图

    千次阅读 2020-01-24 15:31:35
    ployfit(x,y,n) —— 进行n阶线性拟合,返回多项式的系数 ployval(Pn,x) —— 返回拟合出的多项式对应各个x的值 Pn= vpa(ploy2sym(Pn),n) —— 返回拟合出的多项式 figure —— 打开...

    [matlab]简单的线性拟合以及作图

    说明

    这是笔者第一次写博客,此文档只用于个人记录,内容来自《matlab完全自学一本通》。

    相关函数

    1. ployfit(x,y,n) —— 进行n阶线性拟合,返回多项式的系数
    2. ployval(Pn,x) —— 返回拟合出的多项式对应各个x的值
    3. Pn= vpa(ploy2sym(Pn),n) —— 返回拟合出的多项式
    4. figure —— 打开作图窗口
    5. plot(x,y,‘bo’)——散点图
    6. plot(x,y,‘r:’)——虚线图
    7. plot(x,y,‘g–’)——短横线图
    8. legend('原始数据’,‘n1阶多项式拟合’,‘n2阶多项式拟合’)——曲线标注
    9. xlable(),ylable()——横纵坐标

    代码

    clear all
    clc
    y= [1 2 3 4 5 2 6 9 2 7];
    x = [3 4 7 9 12 19 28 32 37 45];
    %5阶拟合
    p5 = polyfit(x,y,5);
    y5 = polyval(p5,x);
    %9阶拟合
    p9 = polyfit(x,y,9);
    y9 = polyval(p9,x);
    %开始做图
    figure
    plot(x,y,'bo');
    hold on;%让一个图里可以显示多条线
    plot(x,y5,'r:');
    plot(x,y9,'g--');
    %refine 图像
    legend('原始数据','5阶多项式拟合','9阶多项式拟合');
     xlabel('x');
     ylabel('y');
    

    结果

    在这里插入图片描述

    展开全文
  • 本期视频时长约106分钟,通过两个具体的应用案例,深入地解读了MATLAB非线性拟合函数lsqcurvefit的具体用法;生动地讲解了局部最优解的基本概念;拟合效果的数学评价进行了MATLAB代码实现;视频的最后,还拟合...
  • “基于Python和梯度下降算法的物理实验数据一元线性拟合方法”稿件的评审意见.pdf
  • python里面多元非线性回归有哪些方法SciPy 里面的子函数库optimize, 一般情况下可用curve_fit函数直接拟合或者leastsq做最小二乘第九句:简单的事重复做,你就是专家;重复的事用心做,你就是赢家。Python怎么实现...
  • 文章目录[MATLAB 在科学计算中的应用] 使用MATLAB 进行线性拟合前言引述MATLAB 曲线拟合函数简述一二维数据线性拟合一维数据拟合例子二维数据拟合例子高维数据线性拟合lsqcurvefitnlinfit 函数数据拟合工具箱...
  • MATLAB进行线性拟合

    万次阅读 多人点赞 2020-04-20 16:59:39
    matlab进行线性拟合常用最小二乘法,适用于:已经求解出函数,但含有未知数,不过已经收集到了一系列数据 1.lsqcurvefit 格式:[x, resnorm,r,flag]=lsqcurvefit(fun, c0,xdata,ydata) c0为初始解向量;xdata,...
  • MATLAB 线性拟合

    千次阅读 2021-05-15 15:09:34
    MATLAB 线性拟合 ployfit函数 x = linspace(0,1,20); y = 2*x + 0.2*randn([1,20]); pf = polyfit(x,y,1); figure;plot(x,y,'o',x,polyval(t,x))
  • python 线性拟合实例实现,python实现线性拟合代码,统计学基础,线性拟合的实例实现。
  • 关于回归和拟合,从它们的求解过程以及结果来看,两者似乎没有太大差别,事实也的确如此。从本质上说,回归属于数理统计问题,...并且拟合可以分为线性拟合与非线性拟合,非线性拟合比较常用的是多项式拟合。根据自变
  • 数据结构线性拟合算法,希望广大初学者有所帮助!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,567
精华内容 50,626
关键字:

对数据进行线性拟合