我正在尝试推断我的数据
14 , 18 , 38 , 57 , 100 , 130 , 191
18 , 26 , 48 , 74 , 79 , 130 , 165
3 , 3 , 3 , 3 , 3 , 3 , 6
323 , 470 , 655 , 889 , 1128 , 1701 , 203
0 , 0 , 0 , 0 , 1 , 1 , 1
977 , 1261 , 1766 , 2337 , 3150 , 3736 , 433
9 , 13 , 25 , 33 , 58 , 84 , 120
作为:
import matplotlib.pyplot as plt
import numpy as np
import pandas
from lmfit import Model
from lmfit.models import ExponentialModel, LorentzianModel, PolynomialModel
from pandas.plotting import scatter_matrix
names = ["A", "B", "C", "D", "E", "F", "G"]
data = (np.genfromtxt("trial.dat", delimiter=','))
dataset = pandas.DataFrame(data=data.T, columns=names)
x=dataset.index.values
x_pre=np.linspace(0,10, 10)
print(x_pre)
model = PolynomialModel(5)
for name in names:
print(name)
color = next(plt.gca()._get_lines.prop_cycler)['color']
params = model.guess(dataset[name], x=x)
result = model.fit(dataset[name], params, x=x)
plt.plot(dataset.index.values, dataset[name], 'o', color=color, label=name)
# plt.plot(dataset.index.values, result.best_fit, '-', color=color)
pred = model.eval(x=x_pre)
print(pred)
# print(result.fit_report())
plt.legend(loc='best')
plt.show()
如这里定义的
您可以将此复合模型应用于其他数据集,或者评估模型的其他值为x。您可能希望这样做以给出更精细的或数据点的粗间距,或在适用范围。这可以通过以下方式完成:
xwide=np.linspace(-5,253001(预测=mod.eval(x=xwide(
但是,这不起作用,因为pred
只返回0
。
那么,我如何用lmfit
来拟合extrapolate
的数据呢?
您可能想要使用
pred = result.eval(x=x_pre)
也就是说,您希望使用拟合的结果,而不是模型本身。