Полное разделение данных логистической регрессии - PullRequest
0 голосов
/ 12 января 2019

Я управлял некоторыми большими моделями логистической регрессии в SAS, которые сходятся более 4 часов. Однако недавно я получил доступ к кластеру Hadoop и могу использовать Python, чтобы гораздо быстрее подходить к одним и тем же моделям (что-то около 10-15 минут).

Проблематично, у меня есть некоторое полное / почти полное разделение точек данных в моих данных, что приводит к невозможности схождения; Я использовал команду FIRTH в SAS для получения надежных оценок параметров, несмотря на это, но, похоже, для Python не существует эквивалентных опций ни в sklearn, ни в statsmodels (я в основном использую последнее).

Есть ли другой способ обойти эту проблему в Python?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Условное правдоподобие - это еще один способ обойти идеальное разделение. Это в PR Statsmodels, который в основном готов к использованию:

https://github.com/statsmodels/statsmodels/pull/5304

0 голосов
/ 12 января 2019

AFAIK, в Питоне нет наказания Ферт. У Statsmodels есть открытая проблема, но никто не работает над этим в настоящее время.

В качестве альтернативы можно было бы использовать другой вид наказания, например как доступно в sklearn или возможно statsmodels

Другой вариант - изменить наблюдаемую переменную ответа. Ферт может быть реализован путем увеличения набора данных. Однако я не знаю ни одного рецепта или прототипа для этого в Python.

https://github.com/statsmodels/statsmodels/issues/3561

В Statsmodels ведется постоянная работа по штрафованию, но в настоящее время упор делается на выбор объектов / переменных (эластичная сеть, SCAD) и квадратичное штрафование для обобщенных аддитивных моделей GAM, особенно для сплайнов.

Ферт использует зависящее от данных наказание, которое не соответствует общей структуре наказания, где структура наказания является независимым от данных "предшествующим".

...