2015-07-14 2 views
5

Я использую LogisticRegression из пакета sklearn и задаю быстрый вопрос о классификации. Я построил кривую ROC для моего классификатора, и оказалось, что оптимальный порог для моих данных обучения составляет около 0,25. Я предполагаю, что по умолчанию при создании прогнозов в 0.5. Как изменить эту настройку по умолчанию, чтобы узнать, какая точность находится в моей модели при выполнении кросс-валидации в 10 раз? В принципе, я хочу, чтобы моя модель предсказала «1» для кого-то большего, чем 0,25, а не 0,5. Я просматривал всю документацию, и, похоже, я ничего не могу найти.sklearn LogisticRegression и изменение порога по умолчанию для классификации

Заранее за вашу помощь.

ответ

4

Это не встроенная функция. Вы можете «добавить» его, обернув класс LogisticRegression в свой собственный класс и добавив атрибут threshold, который вы используете внутри настраиваемого метода predict().

Однако некоторые меры предосторожности:

  1. Пороговое значение по умолчанию является фактически 0. LogisticRegression.decision_function() возвращает подписанный расстояние до выбранной гиперплоскости разделения. Если вы смотрите на predict_proba(), то вы смотрите на logit() расстояния по гиперплоскости с порогом 0,5. Но это дорого стоить.
  2. Выбрав «оптимальный» порог, подобный этому, вы используете информационное пост-обучение, которое портит ваш тестовый набор (т. Е. Ваш тест или набор проверки больше не предоставляет объективную оценку ошибки вне выборки). Поэтому вы можете вызвать дополнительную переустановку, если только вы не выберете порог внутри цикла перекрестной проверки только на своем учебном наборе, а затем используйте его и обученный классификатор с вашим тестовым набором.
  3. Рассмотрите возможность использования class_weight, если у вас есть неуравновешенная проблема, а не ручная установка порога. Это должно заставить классификатор выбрать гиперплоскость дальше от класса, представляющего серьезный интерес.
+0

У меня такая же проблема, когда мои ложные негативы и истинные негативы очень низкие. Можно ли перекосить вход 'z' в функции logit (сигмоидальная функция) через параметр, поставив проблему, когда« z = 2 »- .5, вместо того, чтобы« z = 0 »составляло 0,5? Спасибо. – Moondra

+0

До сих пор нет способа изменить порог принятия решения? –

Смежные вопросы