fit#
- rv_histogram.fit(данные, *args, **kwds)[источник]#
Возвращает оценки параметров формы (если применимо), положения и масштаба из данных. Методом оценки по умолчанию является метод максимального правдоподобия (MLE), но также доступен метод моментов (MM).
Начальные оценки для подгонки задаются входными аргументами; для любых аргументов без начальных оценок,
self._fitstart(data)вызывается для генерации таких.Можно зафиксировать некоторые параметры на определенных значениях, передав аргументы ключевых слов
f0,f1, …,fn(для параметров формы) иflocиfscale(для параметров положения и масштаба, соответственно).- Параметры:
- данныеarray_like или
CensoredDataэкземпляр Данные для оценки параметров распределения.
- arg1, arg2, arg3,…floats, optional
Начальное значение(я) для любых аргументов, характеризующих форму (те, которые не предоставлены, будут определены вызовом
_fitstart(data)). Значение по умолчанию отсутствует.- **kwdsfloats, optional
loc: начальное предположение о параметре положения распределения.
scale: начальное предположение о параметре масштаба распределения.
Специальные ключевые аргументы распознаются как содержащие определённые зафиксированные параметры:
f0…fn : фиксируют соответствующие параметры формы. Альтернативно, параметры формы для фиксации могут быть указаны по имени. Например, если
self.shapes == "a, b",faиfix_aэквивалентныf0, иfbиfix_bэквивалентныf1.floc : фиксирует параметр местоположения на указанном значении.
fscale : зафиксировать параметр масштаба на указанном значении.
optimizer : Оптимизатор для использования. Оптимизатор должен принимать
funcи начальную позицию в качестве первых двух аргументов, плюсargs(для дополнительных аргументов, передаваемых в оптимизируемую функцию) иdisp.fitметод вызывает оптимизатор сdisp=0для подавления вывода. Оптимизатор должен возвращать оцененные параметры.method : Метод для использования. По умолчанию "MLE" (оценка максимального правдоподобия); также доступен "MM" (метод моментов).
- данныеarray_like или
- Возвращает:
- parameter_tupleкортеж чисел с плавающей точкой
Оценки для любых параметров формы (если применимо), затем для параметров положения и масштаба. Для большинства случайных величин будут возвращены статистики формы, но есть исключения (например,
norm).
- Вызывает:
- TypeError, ValueError
Если входные данные недействительны
FitErrorЕсли подгонка не удалась или полученная модель была бы недействительной
Примечания
С
method="MLE"(по умолчанию) подгонка вычисляется путем минимизации функции отрицательного логарифма правдоподобия. Большое, конечное штрафное значение (вместо бесконечного отрицательного логарифма правдоподобия) применяется для наблюдений за пределами носителя распределения.С
method="MM", подгонка вычисляется путем минимизации нормы L2 относительных ошибок между первыми k сырые (около нуля) моменты данных и соответствующие моменты распределения, где k является количеством нефиксированных параметров. Более точно, целевая функция:(((data_moments - dist_moments) / np.maximum(np.abs(data_moments), 1e-8))**2).sum()
где константа
1e-8избегает деления на ноль в случае исчезающих моментов данных. Обычно эту норму ошибки можно уменьшить до нуля. Обратите внимание, что стандартный метод моментов может давать параметры, для которых некоторые данные находятся вне носителя подобранного распределения; эта реализация ничего не делает, чтобы предотвратить это.Для любого метода, возвращаемый ответ не гарантируется глобально оптимальным; он может быть только локально оптимальным, или оптимизация может полностью завершиться неудачей. Если данные содержат любой из
np.nan,np.inf, или-np.inf,fitметод вызоветRuntimeError.При передаче
CensoredDataэкземпляр дляdata, функция правдоподобия определяется как:\[\begin{split}l(\pmb{\theta}; k) & = \sum \log(f(k_u; \pmb{\theta})) + \sum \log(F(k_l; \pmb{\theta})) \\ & + \sum \log(1 - F(k_r; \pmb{\theta})) \\ & + \sum \log(F(k_{\text{high}, i}; \pmb{\theta}) - F(k_{\text{low}, i}; \pmb{\theta}))\end{split}\]где \(f\) и \(F\) являются pdf и cdf соответственно подгоняемой функции, \(\pmb{\theta}\) является вектором параметров, \(u\) являются индексами нецензурированных наблюдений, \(l\) являются индексами левоцензурированных наблюдений, \(r\) являются индексами право-цензурированных наблюдений, индексы "low"/"high" обозначают конечные точки интервально-цензурированных наблюдений, и \(i\) являются индексами интервально-цензурированных наблюдений.
Примеры
Сгенерируйте некоторые данные для подгонки: извлеките случайные величины из
betaраспределение>>> import numpy as np >>> from scipy.stats import beta >>> a, b = 1., 2. >>> rng = np.random.default_rng() >>> x = beta.rvs(a, b, size=1000, random_state=rng)
Теперь мы можем подогнать все четыре параметра (
a,b,locиscale):>>> a1, b1, loc1, scale1 = beta.fit(x) >>> a1, b1, loc1, scale1 (1.0198945204435628, 1.9484708982737828, 4.372241314917588e-05, 0.9979078845964814)
Подгонку также можно выполнить с использованием пользовательского оптимизатора:
>>> from scipy.optimize import minimize >>> def custom_optimizer(func, x0, args=(), disp=0): ... res = minimize(func, x0, args, method="slsqp", options={"disp": disp}) ... if res.success: ... return res.x ... raise RuntimeError('optimization routine failed') >>> a1, b1, loc1, scale1 = beta.fit(x, method="MLE", optimizer=custom_optimizer) >>> a1, b1, loc1, scale1 (1.0198821087258905, 1.948484145914738, 4.3705304486881485e-05, 0.9979104663953395)
Мы также можем использовать некоторые априорные знания о наборе данных: давайте сохраним
locиscaleисправлено:>>> a1, b1, loc1, scale1 = beta.fit(x, floc=0, fscale=1) >>> loc1, scale1 (0, 1)
Мы также можем зафиксировать параметры формы, используя
f-keywords. Чтобы сохранить нулевой параметр формыaравно 1, используйтеf0=1или, что эквивалентно,fa=1:>>> a1, b1, loc1, scale1 = beta.fit(x, fa=1, floc=0, fscale=1) >>> a1 1
Не все распределения возвращают оценки для параметров формы.
normнапример, просто возвращает оценки для местоположения и масштаба:>>> from scipy.stats import norm >>> x = norm.rvs(a, b, size=1000, random_state=123) >>> loc1, scale1 = norm.fit(x) >>> loc1, scale1 (0.92087172783841631, 2.0015750750324668)