StatsModels: Почему мы должны соответствовать модели? - PullRequest
0 голосов
/ 15 апреля 2019

В StatsModels (и других библиотеках, таких как scikit-learn), мы сначала должны создать модель:

model = sm.OLS(y, x)

и затем установите его:

results = model.fit()

Почему эти два отдельных шага?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Основная причина, по которой fit является отдельным методом, видна из аргументов в fit.Мы создаем конкретную модель только один раз, но мы можем захотеть, или нам, возможно, придется вызывать fit несколько раз.

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

Другой вариант, который доступен в качестве аргумента fit, это разные cov_type s, это разные методы для вычислениястандартные ошибки оценок параметров.

Другая причина заключается в том, что в нескольких моделях теперь есть несколько методов fit, которые недоступны обычному методу fit.Примерами являются fit_regularized для штрафных оценок и fit_constrained для оценок при линейных ограничениях на параметры.В этих моделях нам не требуется вызывать обычный метод fit.

Более общий вопрос: почему statsmodels использует эту сложную иерархию классов и множество методов вместо того, чтобы помещать все в функции?

Основными причинами являются модульность, возможность повторного использования кода и ленивая оценка.

0 голосов
/ 15 апреля 2019

fit() - это метод класса, который представляет модель. Сначала вы создаете объект из класса (sm.OLS здесь), а затем вызываете метод fit() из этого класса.

В классе часто используются другие методы, такие как score, predict, ...

...