天道酬勤,学无止境

How can I fit my plots from measured data?

How can I fit my plots?

Up to now, I've got the following code, which plots a variety of graphs from an array (data from an experiment) as it is placed in a loop:

import matplotlib as plt
plt.figure(6)
plt.semilogx(Tau_Array, Correlation_Array, '+-')
plt.ylabel('Correlation')
plt.xlabel('Tau')
plt.title("APD" + str(detector) + "_Correlations_log_graph")
plt.savefig(DataFolder + "/APD" + str(detector) + "_Correlations_log_graph.png")

This works so far with a logarithmic plot, but I am wondering how the fitting process could work right here. In the end I would like to have some kind of a formula or/and a graph which best describes the data I measured.

I would be pleased if someone could help me!

评论

You can use curve_fit from scipy.optimize for this. Here is an example

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x,a):
   return np.exp(a*x)

x,y,z = np.loadtxt("fit3.dat",unpack=True)

popt,pcov = curve_fit(func,x,y)
y_fit = np.exp(popt[0]*x)


plt.plot(x,y,'o')
plt.errorbar(x,y,yerr=z)
plt.plot(x,y_fit)
plt.savefig("fit3_plot.png")
plt.show()

In yourcase, you can define the func accordingly. popt is an array containing the value of your fitting parameters.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 通过 Scipy 和 Numpy 使用 Python 将数据拟合到 ODE 系统(Fitting data to system of ODEs using Python via Scipy & Numpy)
    问题 我在通过 Scipy & Numpy 将我的 MATLAB 代码翻译成 Python 时遇到了一些问题。 我被困在如何为我的 ODE 系统找到最佳参数值(k0 和 k1)以适合我观察到的十个数据点。 我目前对 k0 和 k1 有一个初步的猜测。 在 MATLAB 中,我可以使用称为“fminsearch”的函数,它采用 ODE 系统、观察到的数据点和 ODE 系统的初始值。 然后它将计算一对新的参数 k0 和 k1,它们将适合观察到的数据。 我已经包含了我的代码,看看您是否可以帮助我实现某种“fminsearch”来找到适合我的数据的最佳参数值 k0 和 k1。 我想将任何代码添加到我的 lsqtest.py 文件中。 我有三个 .py 文件 - ode.py、lsq.py 和 lsqtest.py ode.py: def f(y, t, k): return (-k[0]*y[0], k[0]*y[0]-k[1]*y[1], k[1]*y[1]) lsq.py: import pylab as py import numpy as np from scipy import integrate from scipy import optimize import ode def lsq(teta,y0,data): #INPUT teta, the unknowns k0,k1
  • ggplot2: Adding a geom without affecting limits
    I would like to add additional geoms to a ggplot density plot, but without changing the displayed limits of the data and without having to compute the desired limits by custom code. To give an example: set.seed(12345) N = 1000 d = data.frame(measured = ifelse(rbernoulli(N, 0.5), rpois(N, 100), rpois(N,1))) d$fit = dgeom(d$measured, 0.6) ggplot(d, aes(x = measured)) + geom_density() + geom_line(aes(y = fit), color = "blue") ggplot(d, aes(x = measured)) + geom_density() + geom_line(aes(y = fit), color = "blue") + coord_cartesian(ylim = c(0,0.025)) In the first plot, the fit curve (which fits the
  • How to quantitatively measure goodness of fit in SciPy?
    I am tying to find out the best fit for data given. What I did is I loop through various values of n and calculate the residual at each p using the formula ((y_fit - y_actual) / y_actual) x 100. Then I calculate the average of this for each n and then find the minimum residual mean and the corresponding n value and fit using this value. A reproducible code included: import numpy as np import matplotlib.pyplot as plt from scipy import optimize x = np.array([12.4, 18.2, 20.3, 22.9, 27.7, 35.5, 53.9]) y = np.array([1, 50, 60, 70, 80, 90, 100]) y_residual = np.empty(shape=(1, len(y))) residual
  • 如何定量测量 SciPy 中的拟合优度?(How to quantitatively measure goodness of fit in SciPy?)
    问题 我正在寻找最适合给定数据的方法。 我所做的是循环遍历 n 的各种值并使用公式 ((y_fit - y_actual) / y_actual) x 100 计算每个 p 处的残差。然后我计算每个 n 的平均值,然后找到最小残差平均值以及相应的 n 值并使用此值进行拟合。 可重现的代码包括: import numpy as np import matplotlib.pyplot as plt from scipy import optimize x = np.array([12.4, 18.2, 20.3, 22.9, 27.7, 35.5, 53.9]) y = np.array([1, 50, 60, 70, 80, 90, 100]) y_residual = np.empty(shape=(1, len(y))) residual_mean = [] n = np.arange(0.01, 10, 0.01) def fit(x, a, b): return a * x + b for i in range (len(n)): x_fit = 1 / np.log(x) ** n[i] y_fit = y fit_a, fit_b = optimize.curve_fit(fit, x_fit, y_fit)[0] y_fit = (fit_a * x_fit) +
  • 线性/非线性拟合正弦曲线(Linear / Non-Linear Fit to a Sine Curve)
    问题 我看过这个和这个。 但我有一个稍微不同的问题。 我知道我的数据是一条正弦曲线,周期未知,幅度未知,具有附加的非高斯分布噪声。 我正在尝试使用 C 中的 GSL 非线性算法来拟合它,但拟合绝对是糟糕的。 我想知道我是否(错误地)使用了非线性拟合算法,而我应该使用线性拟合算法? 如何判断特定数据集需要线性算法还是非线性算法? 编辑:我的曲线真的很嘈杂,所以用 FFT 来计算频率可能会导致误报和不合适。 我正在寻找一种稍微更强大的拟合方式。 如您所见,上图大约有 170 个点,下图大约有 790 个点。 噪声明显是非高斯噪声,并且与数据幅度相比较大。 我已经在高斯分布噪声上尝试过 FFT,我的拟合非常好。 在这里,它失败得很厉害。 添加:链接到第一个时间序列数据。 文件中的每一列都是不同的时间序列。 回答1 如果您知道您的数据是一条正弦曲线(可以表示为多个复指数),那么您可以使用 Pisarkenko 的谐波分解; http://en.wikipedia.org/wiki/Pisarenko_harmonic_decomposition 但是,如果您可以访问更多数据点,我的方法仍将使用 DFT。 更新: 我对您的数据使用了 Pisarenko 的谐波分解 (PHD),即使您的信号非常短(每个只有 86 个数据点),如果有更多可用数据,PHD 算法肯定具有潜力。 下面包括 24
  • 使用pyMCMC / pyMC将非线性函数拟合到数据/观测(Fit a non-linear function to data/observations with pyMCMC/pyMC)
    问题 我正在尝试使用高斯(和更复杂)的函数拟合一些数据。 我在下面创建了一个小例子。 我的第一个问题是,我做对了吗? 我的第二个问题是,如何在x方向(即观测值/数据的x位置)添加误差? 很难找到有关如何在pyMC中进行这种回归的很好的指南。 也许是因为它更易于使用最小二乘法或类似的方法,但是我最后还是有很多参数,需要查看我们如何能够很好地约束它们并比较不同的模型,pyMC似乎是一个不错的选择。 import pymc import numpy as np import matplotlib.pyplot as plt; plt.ion() x = np.arange(5,400,10)*1e3 # Parameters for gaussian amp_true = 0.2 size_true = 1.8 ps_true = 0.1 # Gaussian function gauss = lambda x,amp,size,ps: amp*np.exp(-1*(np.pi**2/(3600.*180.)*size*x)**2/(4.*np.log(2.)))+ps f_true = gauss(x=x,amp=amp_true, size=size_true, ps=ps_true ) # add noise to the data points noise = np.random
  • 05-06 模型选择
    目录模型选择一、模型选择学习目标二、机器学习基本假设2.1 损失函数2.2 目标函数三、参数模型和非参数模型3.1 参数模型3.2 非参数模型四、过拟合五、过拟合解决方法5.5.1 cross_val_score5.5.2 cross_validate5.5.3 cross_val_predict5.4.1 简单交叉验证5.4.2 k折交叉验证5.4.3 留一法交叉验证5.4.4 时间序列分割5.3.1 L1正则化5.3.2 L2正则化5.2.0.1 示例5.1 收集更多训练数据5.2 选择简单模型5.3 正则化5.4 交叉验证5.5 交叉验证和模型一起使用六、偏差与方差6.1 偏差-方差窘境七、查准率、查全率和F17.1 查准率7.2 查全率7.3 F1值7.4 ROC曲线7.5 AUC面积7.0.1 准确度八、小结更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html模型选择机器学习是在某种假设上对数据的分析,基于该假设即可构造多个模型获得预测值,通过比较多个模型间真实值与预测值之间的误差即可获得一个较优的模型。由于机器学习不是预言而是预测。因此机器学习可能会出现欠拟合和过拟合的现象,即如果模型拟合效果不好,则是欠拟合
  • Plot SVM with Matplotlib?
    I have some interesting user data. It gives some information on the timeliness of certain tasks the users were asked to perform. I am trying to find out, if late - which tells me if users are on time (0), a little late (1), or quite late (2) - is predictable/explainable. I generate late from a column giving traffic light information (green = not late, red = super late). Here is what I do: #imports import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn import preprocessing from sklearn import svm import sklearn.metrics as sm #load user data df = pd.read_csv('April
  • 使用ggplot2如何在图例中表示点和线(Using ggplot2 how can I represent a dot and a line in the legend)
    问题 使用ggplot2,我正在绘制几个函数和一系列点。 我不知道如何表示图例上的点。 我意识到我需要使用aes()函数,但我不完全了解如何执行此操作。 我很抱歉这个例子太长了,但是我不知道该怎么做。 ## add ggplot2 library(ggplot2) # Declare Chart values y_label = expression("y_axis"~~bgroup("(",val / km^{2},")")) x_label = "x_axis" ############################# ## Define functions # Create a list to hold the functions funcs <- list() funcs[] # loop through to define functions for(k in 1:21){ # Make function name funcName <- paste('func', k, sep = '' ) # make function func = paste('function(x){exp(', k, ') * exp(x*0.01)}', sep = '') funcs[[funcName]] = eval(parse(text=func)) } # Specify
  • 这些光谱带过去都是靠肉眼判断的,如何以编程的方式进行判断?(These spectrum bands used to be judged by eye, how to do it programmatically?)
    问题 运营商过去常常检查光谱,知道每个峰的位置和宽度并判断光谱所属的片段。 以新的方式,图像被摄像机捕获到屏幕上。 每个带的宽度必须以编程方式计算。 旧系统:光谱仪->人眼新系统:光谱仪->相机->程序 给定它们大约在X轴的位置,有什么好的方法来计算每个波段的宽度; 鉴于此任务过去可以用肉眼完美地完成,现在必须由程序来执行? 抱歉,如果我缺少详细信息,但缺少这些信息。 产生上一张图的程序清单; 我希望这是相关的: import Image from scipy import * from scipy.optimize import leastsq # Load the picture with PIL, process if needed pic = asarray(Image.open("spectrum.jpg")) # Average the pixel values along vertical axis pic_avg = pic.mean(axis=2) projection = pic_avg.sum(axis=0) # Set the min value to zero for a nice fit projection /= projection.mean() projection -= projection.min() #print projection #
  • 使用Scipy(Python)使经验分布适合理论分布吗?(Fitting empirical distribution to theoretical ones with Scipy (Python)?)
    问题 简介:我列出了30,000多个整数值,范围从0到47(含0和47),例如[0,0,0,0,..,1,1,1,1,...,2,2,2,2,...,47,47,47,...]从一些连续分布中采样。 列表中的值不一定按顺序排列,但顺序对于此问题并不重要。 问题:根据我的分布,我想为任何给定值计算p值(看到更大值的概率)。 例如,您可以看到0的p值将接近1,数字较大的p值将趋向于0。 我不知道我是否正确,但是为了确定概率,我认为我需要使我的数据适合最适合描述我的数据的理论分布。 我假设需要某种拟合优度检验来确定最佳模型。 有没有办法在Python中实现这种分析( Scipy或Numpy )? 你能举个例子吗? 谢谢! 回答1 具有平方误差和(SSE)的分布拟合 这是对Saullo答案的更新和修改,它使用了当前scipy.stats分布的完整列表,并返回分布的直方图和数据的直方图之间SSE最小的分布。 样例拟合 使用statsmodels中的ElNiño数据集,可以拟合分布并确定误差。 返回错误最少的分布。 所有发行 最佳拟合分布 范例程式码 %matplotlib inline import warnings import numpy as np import pandas as pd import scipy.stats as st import statsmodels as sm
  • How to determine what is the probability distribution function from a numpy array?
    I have searched around and to my surprise it seems that this question has not been answered. I have a Numpy array containing 10000 values from measurements. I have plotted a histogram with Matplotlib, and by visual inspection the values seem to be normally distributed: However, I would like to validate this. I have found a normality test implemented under scipy.stats.mstats.normaltest, but the result says otherwise. I get this output: (masked_array(data = [1472.8855375088663], mask = [False], fill_value = 1e+20) , masked_array(data = [ 0.], mask = False, fill_value = 1e+20) ) which means that
  • 数据分析学习总结笔记04:异常值处理
    数据分析学习总结笔记04:异常值处理 1 异常值概述2 如何判断异常值2.1 简单的统计分析2.2 3δ原则2.3 四分位数检验/箱型图分析2.4 格拉布斯检验2.5 基于模型检测2.6 基于距离检测2.7 基于密度检测 3 如何处理异常值 1 异常值概述 数据存在异常值、缺失值和重复值是数据清洗工作中主要可能遇到的三个问题。 异常值是数据中的极端的观测值,即在数据集中存在不合理的值,又称离群点。 在统计学中异常值(outlier)定义为一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值1。 一批数据中的异常值值得关注,忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会带来不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。 响应变量中的异常值:若标准化残差的绝对值大于2,对应的观测点称为异常点。 预测变量中的异常值:若第i个观测点的杠杆值hii大于2(p+1)/n,则称该观测点为高杠杆点。 如果删除一个观测点会导致拟合模型的实质性变化,即系数估计值、拟合值和检验值等发生较大变化,则称这个点为强影响点。 2 如何判断异常值 对于异常值的判断,通常使用的方法有很多种,本文主要介绍以下7种方法。 2.1 简单的统计分析
  • 如何以最小的平滑度用numpy / scipy / matplotlib绘制线(多边形链)(How to plot line (polygonal chain) with numpy/scipy/matplotlib with minimal smoothing)
    问题 我正在尝试在matplotlib中绘制一条线。.我正在寻找正确的插值类型..我想要这样的东西 每条线都经过平滑处理的位置。 我尝试了scipy和matplotlib的几种组合,例如 x_new = np.arange(x, x_length, 1) tck = interpolate.splrep(x, y, s=3) y_new = interpolate.splev(x_new, tck, der=0) ax.plot(x_new, y_new, color+lstyle) 但是我得到的最好结果是 该行表示一个递增的变量..因此它是错误的表示形式。 我可以搜索什么? 谢谢 编辑:我正在考虑从我自己实现一个方法,但我不知道它是否已经完成..伪代码如下 take x and y calculate spline for each three points x[0], x[1], x[2] ... x[1], x[2], x[3] ... and so on for each y[n] sums every computation done for it and divide by number of computations (i.e. y[1] is computed for triplette x[0..2] and x[1..3] so the sum is
  • Fitting a better gaussian to data points?
    I am trying to fit a gaussian to a set of data points that seem to follow a gaussian distribution. I have already checked a lot of possible ways to do that, but I don't really understand most of them. However, I found one solution that seems to work, but the actual fit I get does not look much more like a gaussian than my data points. Here is my code: import numpy as np import matplotlib.pyplot as plt from scipy import asarray as ar, exp, sqrt from scipy.optimize import curve_fit angles = [-8, -6, -4, -2, 0, 2, 4, 6, 8] data = [99, 610, 1271, 1804, 1823, 1346, 635, 125, 24] angles = ar(angles)
  • 在时间(日期)轴上绘制数据(Plotting data on time (date) axis)
    问题 我有这样的数据: 22.10.1980. 100 25.10.1980. 120 26.10.1980. 12 (仅包含更多内容,并且对于每个日期,右侧都会进行几次独立的测量)。 现在,这可能是微不足道的,但是我从未在MATLAB中做过类似的事情,并且在在线查找相似的示例时遇到了问题。 我需要将数据绘制在时间/显示日期轴(x轴)上,所有日期都在其中(因此23和24。...我没有测量值)。 如何获取日期以显示在绘图轴上? 回答1 似乎最好使用datetick 。 用法: datetick('x')或datetick('x', dateformat)及其可用格式,如文档中所述。 回答2 假设您的数据文件具有上述格式,则可以使用textscan读取数据: fid = fopen('data.txt','rt'); C = textscan(fid,'%s %s %s %d','Delimiter','.','CollectOutput',1); fclose(fid); C的第一个单元格将包含字符串的N×3单元格数组(日期的一部分), C的第二个单元格将包含数据测量的N×1的向量。 通过首先将3个较小的字符串连接成一个日期字符串,然后使用datenum函数,可以为每次测量创建日期数字: t = datenum(strcat(C{1}(:,3),'-',C{1}(:,2),'-',C
  • How to compare ROC AUC scores of different binary classifiers and assess statistical significance in Python? (p-value, confidence interval)
    I would like to compare different binary classifiers in Python. For that, I want to calculate the ROC AUC scores, measure the 95% confidence interval (CI), and p-value to access statistical significance. Below is a minimal example in scikit-learn which trains three different models on a binary classification dataset, plots the ROC curves and calculates the AUC scores. Here are my specific questions: How to calculate the 95% confidence interval (CI) of the ROC AUC scores on the test set? (e.g. with bootstrapping). How to compare the AUC scores (on test set) and measure the p-value to assess
  • 建模性能测量的分布(Modeling distribution of performance measurements)
    问题 您将如何对重复的现实生活性能测量的分布进行数学建模 - “现实生活”意味着您不仅在循环有问题的代码,而且它只是在典型用户场景中运行的大型应用程序中的一小段代码? 我的经验表明,您通常在平均执行时间附近有一个峰值,可以使用高斯分布进行充分建模。 此外,还有一个包含异常值的“长尾”——通常是平均时间的倍数。 (考虑到导致首次执行惩罚的因素,这种行为是可以理解的)。 我的目标是对合理反映这一点的聚合值进行建模,并且可以从聚合值中计算出来(例如对于高斯,从 N、值的总和和平方和计算 mu 和 sigma)。 换句话说,重复次数是无限的,但内存和计算要求应该最小化。 正态高斯分布不能对长尾进行适当的建模,即使只有很小比例的异常值,平均值也会有很大的偏差。 我正在寻找想法,特别是如果之前已经尝试/分析过。 我检查了各种分布模型,我想我可以解决一些问题,但是我的统计数据很生疏,最终可能会得到一个过分夸大的解决方案。 哦,一个完整的收缩包装解决方案也可以;) 其他方面/想法:有时你会得到“两个驼峰”分布,这在我的场景中是可以接受的,一个 mu/sigma 覆盖两者,但理想情况下会被单独识别。 推断这一点,另一种方法是“浮动概率密度计算”,它仅使用有限的缓冲区并自动调整到范围(由于长尾,垃圾箱可能不会均匀间隔) - 没有发现任何东西,但有一些关于分布的假设原则上应该是可能的。 为什么
  • AI基础
    AI,AllenIferson 1.AI基础 1.1应用 棋类游戏 自然语言处理 专家系统 视觉系统 语音识别 手写识别 智能机器人 1.2 Python内库 Numpy Scipy matplotlib nltk SimpleAI 1.3 常见机器学习算法 1.3.1有监督 分类:决策树,随机森林,SVM(支持向量机),朴素贝叶斯,KNN 回归:逻辑回归,线性回归 1.3.2无监督 聚类:K-means 关联 1.3.3增强学习 马尔可夫决策 1.4预处理数据 import numpy as np from sklearn import preprocessing 原始数据 input_data = np.array([[2.1, -1.9, 5.5], [-1.5, 2.4, 3.5], [0.5, -7.9, 5.6], [5.9, 2.3, -5.8]]) 二值化,阈值为0.5 data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data) print("\nBinarized data:\n", data_binarized) 平均去除(消除特征向量均值,每个特征都以0为中心) data_scale=preprocessing.scale(input_data) 缩放
  • 如何在Python中使用Kalman过滤器获取位置数据?(How to use Kalman filter in Python for location data?)
    问题 [编辑] @Claudio的答案为我提供了一个很好的技巧,说明了如何过滤异常值。 我确实想开始对数据使用Kalman过滤器。 因此,我更改了下面的示例数据,以使其具有微妙的变化噪声,这些噪声并不是那么极端(我也看到了很多)。 如果其他人能给我一些指导,说明如何在我的数据上使用PyKalman,那将是很棒的。 [/编辑] 对于一个机器人项目,我试图用相机跟踪空中的风筝。 我正在使用Python编程,并在下面粘贴了一些嘈杂的位置结果(每个项目还包含一个datetime对象,但为清楚起见,我将其省略了)。 [ # X Y {'loc': (399, 293)}, {'loc': (403, 299)}, {'loc': (409, 308)}, {'loc': (416, 315)}, {'loc': (418, 318)}, {'loc': (420, 323)}, {'loc': (429, 326)}, # <== Noise in X {'loc': (423, 328)}, {'loc': (429, 334)}, {'loc': (431, 337)}, {'loc': (433, 342)}, {'loc': (434, 352)}, # <== Noise in Y {'loc': (434, 349)}, {'loc': (433, 350)}, {'loc':