У меня проблемы с оптимизацией порога для бинарной классификации. Я использую 3 модели: Logisti c Regression, Catboost и Sklearn RandomForestClassifier.
Для каждой модели я делаю следующие шаги:
1) подходит модель
2) получает 0,0 отзыва для первого класса (который принадлежит 5% набора данных) и 1,0 отзыв для нулевого класса. (это нельзя исправить с помощью gridsearch и class_weight = сбалансированного параметра.)>: (* 1007 *
3) Найти оптимальный порог
fpr, tpr, thresholds = roc_curve(y_train, model.predict_proba(X_train)[:, 1])
optimal_threshold = thresholds[np.argmax(tpr - fpr)]
4) Наслаждайтесь ~ 70 коэффициентами отзыва для обоих классы.
5) Предсказать вероятности для набора тестовых данных и использовать оптимальный_порог, который я рассчитал выше, чтобы получить классы.
Здесь возникает вопрос: когда я снова запускаю код и снова, если я не исправляю random_state, оптимальный порог является вариантом и резко меняется. Это приводит к драматическим c изменениям метрик точности на основе тестового образца.
Нужно ли рассчитывать некоторый средний порог и использовать его в качестве постоянного жесткого значения? Или, может быть, я должен исправить везде random_state? Или, возможно, метод нахождения оптимального_порога не верен?