Кривая соответствует списку точек - PullRequest
0 голосов
/ 15 марта 2020

Один из моих python сценариев дает мне некоторые результаты в зависимости от продолжительности обработки, которые я отображаю так:

enter image description here

Теперь я хотел бы чтобы проследить кривую функции, которая наилучшим образом аппроксимирует эволюцию результатов.

После нескольких исследований лучшим инструментом, который я нашел, является curve_fit из scipy.optimize . Есть только одна проблема: функция curve_fit требует вначале параметра функции (если я хорошо понимаю пример документации), но мои точки на графике не являются результатами функции, поэтому я не знаете, что здесь поставить.

Может ли кто-нибудь помочь мне решить эту проблему или предложить мне другой способ сделать это?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Это похоже на "экспоненциальный подход" тип кривой, которую вы получаете для зарядки конденсатора - см. здесь .

Итак, я бы начал с эта формула:

y = a * ( 1 - n * np.exp(-b*x))

Если я построю это с Matplotlib:

#!/usr/bin/env python3

import numpy as np
import matplotlib.pyplot as plt

# Make 100 samples along x-axis, from 0..10
x = np.linspace(0,10,100)

# Make an exponential approach type of curve
a = 17000
n = 1
b = 3
y = a * ( 1 - n * np.exp(-b*x))

# Plot it
plt.title(f'Plot for a={a}, n={n}, b={b}')
plt.plot(x,y)
plt.show()

enter image description here

enter image description here

enter image description here

0 голосов
/ 17 марта 2020

Когда вы говорите: «Теперь я хотел бы проследить кривую функции, которая наилучшим образом приближается к эволюции результатов», вы должны иметь в виду некую кривую, которая является идеальной формой для данных. Итак, что это за функция? При аппроксимации кривой эта функция называется «функцией модели» - функцией, которая моделирует ваши данные.

Подумайте об этом так: у вас около 50 точек измерения. Вы можете поверить, что каждый из них является абсолютно точным и безошибочным. Но так как вы спросили о подгонке кривой, это, вероятно, не так. То есть, вы, вероятно, полагаете, что в данных есть какой-то шум или ошибки, и что данные могут быть представлены идеализированной функцией со множеством параметров менее 50 (я бы предположил 4 или около того).

Эта идеализированная функция, которая объясняет вашу модель (и позволит прогнозировать «оптимальные» значения в «точках», которые вы не измеряли), является «функцией модели». Если у вас это есть, может помочь подгонка кривой: вы пишете эту функцию (которая, вероятно, зависит от нескольких параметров) для моделирования данных в python и находите наилучшие значения для параметров, чтобы модель соответствовала вашим данным. Если у вас этого нет, что вы подразумеваете под «подгонкой кривой»?

Вы могли бы провести сплайн по данным или иным образом сгладить данные, но это мало что дает для прогнозирования новых значений, которые могли бы отличаться от «интерполировать / экстраполировать данные, не беспокоясь о влиянии шума».

...