Я не совсем уверен, что вы пытаетесь сделать.Когда вы говорите, что у вас есть CDF, что это значит?У вас есть какие-то точки данных или сама функция?Было бы полезно, если бы вы могли опубликовать дополнительную информацию или некоторые примеры данных.
Если у вас есть несколько точек данных и вы знаете, что их распределение не сложно сделать с помощью scipy.Если вы не знаете дистрибутив, вы можете просто перебрать все дистрибутивы, пока не найдете тот, который работает достаточно хорошо.
Мы можем определить функции в форме, необходимой для scipy.optimize.curve_fit
.Т.е. первый аргумент должен быть x
, а остальные аргументы - это параметры.
Я использую эту функцию для генерации некоторых тестовых данных на основе CDF нормальной случайной величины с небольшим добавленным шумом.
n = 100
x = np.linspace(-4,4,n)
f = lambda x,mu,sigma: scipy.stats.norm(mu,sigma).cdf(x)
data = f(x,0.2,1) + 0.05*np.random.randn(n)
Теперь используйте curve_fit
для поиска параметров.
mu,sigma = scipy.optimize.curve_fit(f,x,data)[0]
Это дает вывод
>> mu,sigma
0.1828320963531838, 0.9452044983927278
Мы можем построить оригинальный CDF (оранжевый),Шумные данные, и установите CDF (синий) и обратите внимание, что он работает довольно хорошо![true CDF, noisy data, recovered CDF](https://i.stack.imgur.com/pyy4d.png)
Обратите внимание, что curve_fit
может принимать некоторые дополнительные параметры, и что вывод дает дополнительную информацию о том, насколько хороша функция подбора.