Управление порогом логистической регрессии в Scikit Learn

Я использую LogisticRegression() метод scikit-learn на сильно несбалансированном наборе данных. Я даже перевернул class_weight функции auto.

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

можно ли узнать, какое пороговое значение находится в каждом из классов One-vs-All LogisticRegression() конструкций методом?

Я ничего не нашел в документации страница.

по умолчанию применяется 0.5 значение в качестве порога для всех классов, независимо от значения параметра?

2 ответов


логистическая регрессия выбирает класс, который имеет наибольшую вероятность. В случае 2 классов порог равен 0,5: если P(Y=0) > 0,5, то, очевидно, P(Y=0) > P (Y=1). То же самое относится к настройке multiclass: опять же, он выбирает класс с наибольшей вероятностью (см., например,НГ нижняя линии).

введение специальных порогов влияет только на долю ложных срабатываний/ложных негативов (и, следовательно, на точность / отзыв), но это не является параметром модели LR. См. также аналогичный вопрос.


есть небольшой трюк, который я использую, вместо того, чтобы использовать model.predict(test_data) использовать model.predict_proba(test_data). Затем используйте диапазон значений порогов для анализа влияния на прогноз;

submission_binary=pd.DataFrame(model.predict_proba(test_data))
for i in [0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,.7,.75,.8,.85,.9,.95,.99]:
    print '\n******** For i = {} ******'.format(i)
    Y_test_pred=submission_binary.applymap(lambda x: 1 if x>i else 0)
    print 'Our testing accuracy is {}'.format(accuracy_score(Y_test.as_matrix().reshape(Y_test.as_matrix().size,1),Y_test_pred.as_matrix().reshape(Y_test_pred.as_matrix().size,1)))
    print confusion_matrix(Y_test.as_matrix().reshape(Y_test.as_matrix().size,1),Y_test_pred.as_matrix().reshape(Y_test_pred.as_matrix().size,1))

Я не запускал этот код, но вы можете понять, что я имею в виду.

лучший!