Как установить intercept_scaling в scikit-learn LogisticRegression

Я использую объект LogisticRegression scikit-learn для упорядоченной двоичной классификации. Я прочитал документацию по intercept_scaling, но не понимаю, как разумно выбирать это значение.

Наборы данных выглядят так:

  • 10-20 признаков, 300-500 повторений
  • Сильно негауссовый, на самом деле большинство наблюдений - нули
  • Выходные классы не обязательно равновероятны. В одних случаях они почти 50/50, в других больше похожи на 90/10.
  • Обычно C=0.001 дает хорошие результаты перекрестной проверки.

Документация содержит предупреждения о том, что сам перехват подлежит регуляризации, как и любая другая функция, и что для решения этой проблемы можно использовать intercept_scaling. Но как выбрать это значение? Один простой ответ — изучить множество возможных комбинаций C и intercept_scaling и выбрать параметры, обеспечивающие наилучшую производительность. Но этот поиск параметров займет довольно много времени, и я хотел бы избежать этого, если это возможно.

В идеале я хотел бы использовать перехват для управления распределением выходных прогнозов. То есть я хотел бы убедиться, что вероятность того, что классификатор предсказывает «класс 1» в обучающем наборе, равна доле данных «класса 1» в обучающем наборе. Я знаю, что это имеет место при определенных обстоятельствах, но в моих данных это не так. Я не знаю, связано ли это с регуляризацией или с негауссовым характером входных данных.

Спасибо за любые предложения!


person cxrodgers    schedule 17.07.2013    source источник


Ответы (1)


Пока вы пытались передискретизировать положительный класс, установив class_weight="auto"? Это эффективно увеличивает выборку недопредставленных классов и занижает выборку класса большинства.

(текущая стабильная документация немного сбивают с толку, так как они, кажется, были скопированы из SVC и не отредактированы для LR; это просто изменилось в последней версии.)

person Fred Foo    schedule 18.07.2013
comment
Спасибо за предложение. Я не использую «авто», потому что не могу понять, что он делает (код включает множественное наследование и поэтому немного сбивает меня с толку). Вместо этого я просто устанавливаю веса классов равными количеству повторений из этого класса, потому что это кажется правильным. Можете ли вы дать ссылку на обновленную документацию? Я не могу найти его, погуглив sklearn на переднем крае или посетив раздел передового края на веб-сайте sklearn. - person cxrodgers; 19.07.2013
comment
@cxrodgers: это должно быть по адресу scikit-learn.org/dev, но патч так далеко, что Я не уверен, что сайт уже перестроен :) - person Fred Foo; 19.07.2013
comment
Не похоже, что это было обновлено, но я буду продолжать проверять. Это было полезно, поэтому я скоро приму этот ответ, если никто не появится, чтобы объяснить мне intercept_scaling. Я хочу, чтобы в документации было явно указано, какая функция потерь оптимизируется, что сделало бы C и intercept_scaling явными. Я предполагаю, что это то же самое, что и в связанной исследовательской статье, но терминология достаточно отличается, поэтому я не уверен, что именно происходит, особенно с class_weight. - person cxrodgers; 23.07.2013
comment
@cxrodgers: scikit-learn.org /dev/модули/сгенерированные/ - person Fred Foo; 23.07.2013