标签: curve-fitting

在matlab中拟合二维曲线

有一个名为cftool的曲线拟合工具箱的工具箱功能,可以让曲线拟合到一维数据.二维数据有什么用吗?

matlab curve-fitting

3
推荐指数
1
解决办法
4614
查看次数

将参数传递给函数进行拟合

我试图拟合一个函数,它将输入2个独立变量x,y和3个参数作为输入a,b,c.这是我的测试代码:

import numpy as np
from scipy.optimize import curve_fit

def func(x,y, a, b, c):
    return a*np.exp(-b*(x+y)) + c    

y= x = np.linspace(0,4,50)
z = func(x,y, 2.5, 1.3, 0.5) #works ok
#generate data to be fitted
zn = z + 0.2*np.random.normal(size=len(x))
popt, pcov = curve_fit(func, x,y, zn) #<--------Problem here!!!!!
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:"func()正好接受5个参数(给定51个)".怎么能正确地传递我的论证x,y?

python numpy curve-fitting scipy

3
推荐指数
1
解决办法
4496
查看次数

使用Scipy vs Matlab拟合对数正态分布

我正在尝试使用Scipy拟合对数正态分布.我之前已经使用Matlab完成了它,但由于需要将应用程序扩展到统计分析之外,我正在尝试在Scipy中重现拟合值.

下面是我用来拟合数据的Matlab代码:

% Read input data (one value per line)
x = [];
fid = fopen(file_path, 'r'); % reading is default action for fopen
disp('Reading network degree data...');
if fid == -1
    disp('[ERROR] Unable to open data file.')
else
    while ~feof(fid)
        [x] = [x fscanf(fid, '%f', [1])];

    end
    c = fclose(fid);
    if c == 0
         disp('File closed successfully.');
    else
        disp('[ERROR] There was a problem with closing the file.');
    end
end

[f,xx] = ecdf(x);
y = 1-f;

parmhat  = lognfit(x); % …
Run Code Online (Sandbox Code Playgroud)

python statistics matlab curve-fitting scipy

3
推荐指数
1
解决办法
4376
查看次数

在nlme中拟合数据的技巧?

当我将数据放入nlme中时,我第一次尝试都没有成功,而且nlme(fit.model)习惯了以下情况:

Error in nlme.formula(model = mass ~ SSbgf(day, w.max, t.e, t.m), random = list( :
  step halving factor reduced below minimum in PNLS step

Error in MEestimate(nlmeSt, grpShrunk) : 
  Singularity in backsolve at level 0, block 1
Run Code Online (Sandbox Code Playgroud)

所以我回去

1)更改x轴的单位(例如,从年到天,或者从天到成长度天)。

2)在我的数据集中进行ax = 0,y = 0的测量

3)添加一个 random=pdDiag()

4)缺乏随机性和固定性

5)整理我的数据集,并尝试在不同时间拟合不同的部分

6)实现非常简单的拟合,然后使用update来使模型正确

最终似乎有些工作。还有其他人要添加到此列表吗?什么可以帮助您使nlme处理数据?

我意识到这个问题可能会结束,但是如果对如何改写SO可以接受的任何建议,我将不胜感激。

这是一个示例,其中我尝试了其中一些操作,但到目前为止还没有成功:

数据:https : //www.dropbox.com/s/4inldx7617fip01/proots.csv。这只是整个集合的一部分。

代码:

roots<-read.table("proots.csv", header = TRUE)

#roots$day[roots$year == 2007] <- 0 #when I use a dataset with time=0, mass=0
roots$day[roots$year …
Run Code Online (Sandbox Code Playgroud)

r curve-fitting nlme

3
推荐指数
1
解决办法
3007
查看次数

numpy.polyfit与scipy.odr

我有一个理论上用二次多项式描述的数据集.我想要适应这些数据,我已经习惯numpy.polyfit了.但是,缺点是返回系数的误差不可用.因此我决定使用适合的数据scipy.odr.奇怪的是,多项式的系数彼此偏离.

我不明白这一点,因此决定在我生成自己的一组数据上测试两个拟合例程:

import numpy
import scipy.odr
import matplotlib.pyplot as plt

x = numpy.arange(-20, 20, 0.1)
y = 1.8 * x**2 -2.1 * x + 0.6 + numpy.random.normal(scale = 100, size = len(x))

#Define function for scipy.odr
def fit_func(p, t):
  return p[0] * t**2 + p[1] * t + p[2]

#Fit the data using numpy.polyfit
fit_np = numpy.polyfit(x, y, 2)

#Fit the data using scipy.odr
Model = scipy.odr.Model(fit_func)
Data = scipy.odr.RealData(x, y)
Odr = scipy.odr.ODR(Data, Model, [1.5, …
Run Code Online (Sandbox Code Playgroud)

python numpy curve-fitting scipy

3
推荐指数
1
解决办法
3714
查看次数

Python-根据记录的值拟合指数衰减曲线

我知道有与此相关的线程,但是我对我想要将数据适合的位置感到困惑。

我的数据就这样导入并绘制了。

import matplotlib.pyplot as plt
%matplotlib inline
import pylab as plb
import numpy as np
import scipy as sp
import csv

FreqTime1 = []
DecayCount1 = []
with open('Half_Life.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        FreqTime1.append(row[0])
        DecayCount1.append(row[3])

FreqTime1 = np.array(FreqTime1) 
DecayCount1 = np.array(DecayCount1)

fig1 = plt.figure(figsize=(15,6))
ax1 = fig1.add_subplot(111)
ax1.plot(FreqTime1,DecayCount1, ".", label = 'Run 1')
ax1.set_xlabel('Time (sec)')
ax1.set_ylabel('Count')
plt.legend()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

问题是,我在设置一般指数衰减时遇到困难,其中我不确定如何从数据集中计算参数值。

如果可能的话,我也想让拟合衰减方程的方程与图形一起显示。但是,如果能够产生配合,则可以很容易地应用它。

编辑 ------------------------------------------------- ------------

所以当使用Stanely R提到的拟合函数时

def model_func(x, a, k, b):
    return a * …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib curve-fitting scipy

3
推荐指数
1
解决办法
2891
查看次数

scipy非线性曲线拟合中的过拟合

我有一个模型方程式,我们称它为eq_m:

eq_m

我知道我的数据集如下,因此我试图将数据拟合到eq_m,以便可以使用拟合的参数来预测新数据。

但是,此eq_m是非线性的,因此我使用scipy的curve_fit来获取lambda,mu,sigma参数值,并使用以下代码段:

opt_parms, parm_cov = o.curve_fit(eq_m, x, y,maxfev=50000)
lamb , mu, sigm = opt_parms
Run Code Online (Sandbox Code Playgroud)

我在应该遵循该模型的各种数据组上运行此模型,而55/60则给了我很好的结果,但是其余5组非常适合,并且预测的参数具有高正值。有没有办法使用scipy / numpy或scikit-learn来规范曲线拟合并惩罚高幅值参数值?

我的主管建议使用共轭先验,但我不知道如何在此处这样做。

谁能帮我这个忙吗?如果我必须提供解决这个问题的猜测,是否可以有人告诉我如何计算这些猜测?

python curve-fitting scipy scikit-learn non-linear-regression

3
推荐指数
1
解决办法
751
查看次数

具有积分函数的python拟合曲线

我想用积分函数拟合数据(截断的伽玛分布).我尝试了以下代码,但发生了错误.如果你能帮助我,我感激不尽.非常感谢你提前.

%matplotlib inline
import numpy as np
from scipy import integrate
import scipy.optimize
import matplotlib.pyplot as plt

xlist=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14]
ylist=[1.0, 0.7028985507246377, 0.4782608695652174, 0.36231884057971014,
   0.2536231884057971, 0.1811594202898551, 0.12318840579710147,
   0.08695652173913046, 0.057971014492753645, 0.04347826086956524,
   0.02173913043478263, 0.007246376811594223]

xdata=np.array(xlist)
ydata=np.array(ylist)

parameter_initial=np.array([0.0,0.0,0.0])#a,b,c

def func(x,a,b,c):
    return integrate.quad(lambda t:t^(a-1)*np.exp(-t),x/c,b/c)/integrate.quad(lambda t:t^(a-1)*np.exp(-t),0.0,b/c)

parameter_optimal,cov=scipy.optimize.curve_fit(func,xdata,ydata,p0=parameter_initial) 
print "paramater =", paramater_optimal
y = func(xdata,paramater_optimal[0],paramater_optimal[1],paramater_optimal[2])
plt.plot(xdata, ydata, 'o')
plt.plot(xdata, y, '-')
plt.show()
Run Code Online (Sandbox Code Playgroud)

发生以下错误.

ValueError: The truth value of an array with more than one element is ambiguous. …
Run Code Online (Sandbox Code Playgroud)

python numpy integrate curve-fitting scipy

3
推荐指数
1
解决办法
719
查看次数

在MATLAB中将平面拟合到N个维度点

我有一组尺寸标注N点,k作为size的矩阵N X k

如何通过这些点找到最佳拟合线?该线的k尺寸将是一个平面(曲面)。它将具有k系数和一个偏差项。

现有的函数fit似乎仅可用于2维或3维点。

matlab curve-fitting data-fitting

3
推荐指数
1
解决办法
815
查看次数

Scipy S型曲线拟合

我有一些数据点,想找到一个拟合函数,我想一个累积的高斯S型函数就可以拟合,但是我真的不知道如何实现。

这就是我现在所拥有的:

import numpy as np
import pylab
from scipy.optimize
import curve_fit

def sigmoid(x, a, b):
     y = 1 / (1 + np.exp(-b*(x-a)))
     return y

xdata = np.array([400, 600, 800, 1000, 1200, 1400, 1600])
ydata = np.array([0, 0, 0.13, 0.35, 0.75, 0.89, 0.91])

popt, pcov = curve_fit(sigmoid, xdata, ydata)
print(popt)

x = np.linspace(-1, 2000, 50)
y = sigmoid(x, *popt)

pylab.plot(xdata, ydata, 'o', label='data')
pylab.plot(x,y, label='fit')
pylab.ylim(0, 1.05)
pylab.legend(loc='best')
pylab.show()
Run Code Online (Sandbox Code Playgroud)

但是我收到以下警告:

... / scipy / optimize / minpack.py:779:OptimizeWarning:无法估计参数的协方差category = OptimizeWarning)

有人可以帮忙吗?我也愿意尝试其他任何方式!我只需要一条曲线以任何方式拟合此数据。

python curve-fitting scipy

3
推荐指数
2
解决办法
6143
查看次数