Вопрос или проблема
Я новичок в машинном обучении. Это мой $1^{st}$ проект в области машинного обучения, и я работаю над классификацией на несбалансированном наборе данных. В целевой переменной также имеется несколько классов.
Мне хотелось бы узнать, какие метрики наиболее подходят для оценки производительности в GridSearchCV.
Я думаю
- roc_au иногда используется для несбалансированных наборов данных. Но есть несколько
‘roc_auc’
‘roc_auc_ovo’
‘roc_auc_ovr’
Что мне использовать?
- В качестве альтернативы также используется precision-recall_auc. Но я не могу найти эту метрику оценки для GridSearchCV. Как мне использовать её в GridSearchCV?
Спасибо
X_train, X_test, y_train, y_test = train_test_split(X_total, Y_total, random_state=0, test_size=0.25)
kfold =GroupKFold(n_splits=3)
grid_search = GridSearchCV(RandomForestClassifier(random_state=0), hyperF, cv = kfold, scoring=, verbose = 1, n_jobs = -1)
Одно из возможных решений – использовать average_precision_score из scikit-learn, который очень похож на площадь под кривой точности-отзыва.
Поскольку average_precision_score является метрикой, она будет работать с GridSearchCV из scikit-learn.
Перед выполнением деления на обучающую и тестовую выборки, самый основной шаг для работы с несбалансированными данными – это выполнить UnderSampling или OverSampling, большинство рекомендуемых методов – это SMOTE для несбалансированных данных. Вы можете использовать пакет python imblearn для выполнения SMOTE.
Я бы предложил в первую очередь определить ваши основные и второстепенные классы, определить, какую величину из True Positive, True Negative, False Positive и False Negative вы хотите оптимизировать, а затем выбрать соответствующую метрику.
Для выбора метрики я бы предложил выбрать или Precision, Recall или F1 score (основной или второстепенный) в зависимости от выбранной выше величины.
Ответ или решение
Когда вы работаете с набором данных, имеющим неравномерное распределение классов, выбор подходящей метрики для оценки модели становится критически важным. Давайте рассмотрим, какие метрики лучше всего подходят для использования в GridSearchCV в контексте многоклассовой классификации с несбалансированными данными, а также как правильно их применять.
1. Метрические показатели для несбалансированных данных
1.1 ROC AUC и его варианты
Вы упомянули roc_auc
, roc_auc_ovo
и roc_auc_ovr
. Давайте разберем их:
-
roc_auc
: Это общая метрика, которая вычисляет площадь под кривой ROC для бинарной классификации. Она может быть использована для оценки модели на множественных классах, но лучше всего подходит для бинарных задач. -
roc_auc_ovr
(One-Versus-Rest): Эта метрика вычисляет AUC для каждой отдельной категории против остальных. Это подходящий выбор, когда у вас несколько классов, так как он позволяет оценить каждую категорию независимо. -
roc_auc_ovo
(One-Versus-One): Эта метрика вычисляет AUC для каждой пары классов. Она может быть вычислительно затратной при большом количестве классов, так как требует оценки множества пар.
Рекомендация: Для многоклассовых задач я бы рекомендовал использовать roc_auc_ovr
, так как она даст вам более релевантное и интуитивное представление о работе вашей модели, особенно с несбалансированными классами.
1.2 Precision-Recall AUC
Метрика precision-recall_auc
может быть более полезной для несбалансированных наборов данных, так как она фокусируется на наиболее важных аспектах: точности (precision) и полноте (recall). В scikit-learn вы можете использовать average_precision_score
, чтобы получить AUC для кривой precision-recall.
Для того чтобы использовать average_precision_score
в GridSearchCV, можно определить свою собственную функцию оценки:
from sklearn.metrics import make_scorer, average_precision_score
scoring = make_scorer(average_precision_score, average='macro', multi_class='ovr')
grid_search = GridSearchCV(RandomForestClassifier(random_state=0), hyperF, cv=kfold, scoring=scoring, verbose=1, n_jobs=-1)
2. Выбор метрики в зависимости от задачи
Перед тем как выбрать метрику, вы должны определить, что вы хотите оптимизировать:
- True Positives (TP): Важны для случаев, когда необходимо минимизировать пропуски положительных классов.
- False Positives (FP): Критичны, когда важно уменьшить количество ложных срабатываний.
- False Negatives (FN): Важно, если нужно максимизировать захват всех классов.
В зависимости от ваших целей вы также можете рассмотреть такие метрики, как:
- Precision: Если вам важно минимизировать ложные срабатывания.
- Recall: Если важно найти как можно больше положительных примеров.
- F1 Score: Если нужно сбалансировать между точностью и полнотой.
3. Подготовка данных
Как вы правильно заметили, перед началом работы с вашими данными стоит применить методы управления несбалансированными данными, такие как Oversampling или Undersampling. Использование методов, таких как SMOTE, может значительно улучшить прогнозные способности вашей модели. Библиотека imblearn
содержит удобные инструменты для этой задачи.
Заключение
Так, выбор метрики для оценки моделей с несбалансированными классами должен опираться на понимание ваших данных и бизнес-целей. Рекомендуется использовать roc_auc_ovr
для многоклассовых задач и average_precision_score
как более чувствительную метрику для несбалансированных наборов данных. Определение метрики также должно основываться на ключевых аспектах, которые вы хотите оптимизировать, что поможет в дальнейшем улучшить качество вашей модели.