Как пороги модели sklearn SGDClassifier связаны с оценками модели?

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

X = labeled_data[features].reset_index(drop=True)
Y = np.array(labeled_data['fraud'].reset_index(drop=True))

# (train/test etc.. settle on an acceptable model)

grad_des = SGDClassifier(alpha=alpha_optimum, l1_ratio=l1_optimum, loss='log')
grad_des.fit(X, Y)

score_Y = grad_des.predict_proba(X)
precision, recall, thresholds = precision_recall_curve(Y, score_Y[:,1])

Итак, теперь я строю график точности и отзыва по сравнению с порогом и решаю, что хочу, чтобы мой порог был равен 0,4.

Что такое порог?

Коэффициенты моей модели, которые, как я понимаю, являются «оценкой» событий путем вычисления coefficients['x']*event_values['x'], в сумме дают 29. Порог находится в диапазоне от 0 до 1.

Как мне понять перевод от порога к тому, что, я думаю, является необработанной оценкой? Будет ли событие с 1 для всех признаков (все они бинарные) иметь расчетную оценку 29, поскольку это сумма всех коэффициентов?

Нужно ли мне вычислять эту «необработанную» метрику оценки для всех событий, а затем отображать ее в зависимости от точности, а не от порога?

Изменить и обновить:

Так что мой вопрос зависел от непонимания логистической функции, как указал ниже Михаил Коробов. Независимо от «исходной оценки» логистическая функция устанавливает значение в диапазоне [0, 1].

Чтобы «развернуть» это значение обратно в «необработанную оценку», которую я искал, я могу сделать scipy.special.logit(0.8) - grad_des.intercept_, и это вернет «оценку» строки.


person Tyler Wood    schedule 15.12.2016    source источник
comment
Помогает ли вообще этот ответ?   -  person Prune    schedule 15.12.2016


Ответы (1)


  1. Вероятности — это не просто coefficients['x']*event_values['x'] — к этим показателям применяется логистическая функция, чтобы получить значения вероятности в [ 0, 1] диапазон.

  2. метод predict_proba возвращает эти вероятности; они находятся в диапазоне [0, 1].

  3. Чтобы получить конкретный прогноз «да/нет», нужно выбрать порог вероятности. Очевидным и разумным способом является использование 0,5: если вероятность больше 0,5, то предсказать «да», в противном случае предсказать «нет». Это то, что делает метод .predict().

  4. precision_recall_curve пробует разные пороги вероятности и вычисляет для них точность и полноту. Если на основе оценок точности и отзыва вы считаете, что какой-то другой порог лучше для вашего приложения, вы можете использовать его вместо 0,5, например. bool_prediction = score_Y[:,1] > threshold.

person Mikhail Korobov    schedule 15.12.2016
comment
Есть ли аргумент, который расширит .predict_proba, чтобы он функционировал как логический классификатор с заданным порогом? Я использую .predict_proba с оболочкой, как вы предлагаете, но я бы предпочел замариновать модель с порогом, а не передавать ее позже. - person MyopicVisage; 24.03.2017
comment
Нет, такого аргумента нет. Если вы хотите замариновать порог, вы всегда можете создать класс-оболочку и вместо этого замариновать его. - person Mikhail Korobov; 24.03.2017