为什么我的数据不适合我的Python函数? (它完全适合Mathematica)

时间:2019-11-12 14:18:16

标签: python data-fitting gamma-distribution

我有一个要适合伽玛分布的数据集。我正在尝试在这里找到的方法:http://scipy-lectures.org/intro/scipy/auto_examples/plot_curve_fit.html,但似乎不适用于我的数据。我也尝试过其他方法(Scipy的stats.gamma.fit,来自具有相同名称的软件包的Fitter)。

我的数据可以在这里找到:https://www.filehosting.org/file/details/832322/data.csv。它同时包含x轴和y轴。

这是我当前的代码:

import csv
import numpy as np
import math
import matplotlib.pyplot as plt
from scipy import integrate as scint
from scipy import optimize

def gengamma_fit(x, a, b):
        return 2 / (b**(2*a) * math.gamma(a)) * x**(2 * a - 1) * math.exp(-x / b)**2

gen_gamma_fit = np.vectorize(gengamma_fit)

filename = r'data.csv'

x1 = np.zeros(200)
y1 = np.zeros(200)
output1 = np.zeros((200,2))

with open(filename, newline='\n') as file:
    data = csv.reader(file, delimiter=',')
    i = 0
    for row in data:
        x1[i] = row[0]
        y1[i] = row[1]
        output1[i][0] = row[0]
        output1[i][1] = float(row[1])
        i += 1

# check to see if data is normalized
int1 = scint.simps(y1, x1)
print(int1)

plt.figure(figsize=(15,10))

plt.plot(x1,y1, color="red")

params, params_covariance = optimize.curve_fit(gen_gamma_fit, x1, y1, p0=[2.0, 0.04])
plt.plot(x1, gen_gamma_fit(x1, params[0], params[1]))

plt.show()
plt.close()

当我尝试使用Mathematica进行拟合时,它非常适合我。当我在Python中执行此操作时,我得到了:

enter image description here

(对我来说)很奇怪:当我使用Mathematica提供的参数时,Python不会将其绘制成相同的样子。我使用以下代码行绘制了参数:

plt.plot(x1, gen_gamma_fit(x1, 2.57465, 0.10187))

如您所见,a = 2.57465,b = 0.10187。

我在这里犯了一些明显的错误吗?

0 个答案:

没有答案