экстраполировать pandas фрейм данных с помощью lmfit - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь экстраполировать свои данные

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, 25, 3001) предсказано = mod.eval (x = xwide)

, но это не работает , поскольку pred возвращает только 0.

Итак, как я могу extrapolate данные, снабженные lmfit?

1 Ответ

0 голосов
/ 01 апреля 2020

Возможно, вы хотите использовать

 pred = result.eval(x=x_pre)

То есть вы хотите использовать результат подбора, а не саму модель.

...