Nano Hash - криптовалюты, майнинг, программирование

Среднее геометрическое точности и отзыва

Я пытаюсь создать пользовательскую метрику для оценки модели ML. Я хочу сделать взвешенное среднее геометрическое точности, вспомнить и взвесить его таким образом, чтобы отзыв был приоритетнее точности. Я знаю, что среднее геометрическое - это sqrt (точность * отзыв), но я не уверен, как его параметризовать, чтобы придать большее значение отзыву в python. Есть эта метрика из библиотеки дисбаланса, но я не вижу никаких весов, которые я могу предоставить.

imblearn.metrics.geometric_mean_score(y_true, y_pred, labels=None, pos_label=1, average='multiclass', sample_weight=None, correction=0.0)

Любая идея о том, как реализовать то, что я хочу, в python?


Ответы:


1

Если вы столкнулись с проблемой class-imbalance, отличным вариантом будет multi-class geometric mean между точностью и полнотой, взвешенной по метке supports (количество выборок позиции для каждой метки) (это разрешено в imblearn API, который вы связали, с параметром average='weighted').

Однако IIUC — это не то, что вам нужно. Вы пытаетесь получить средневзвешенное геометрическое между precision и recall.

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

Вы можете рассчитать precision и recall с помощью sklearn API из y_true и y_pred, а затем использовать функцию для вычисления weighted geometric mean.

Я написал функцию weighted_geometric_mean на основе следующего определения (первая форма со степенями вместо экспонент) -

введите здесь описание изображения

from sklearn.metrics import precision_score, recall_score

y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]

precision = precision_score(y_true, y_pred, average='micro')
recall = recall_score(y_true, y_pred, average='micro')
#parameter 'micro' calculates metrics globally by counting the total TP, FN and FP

scores = [precision, recall]
weights = [0.6,0.4]  #60% precision, 40% recall

def weighted_geometric_mean(scores, weights):
    wgm = np.product(np.power(scores, weights))
    return wgm

weighted_geometric_mean(scores, weights)
0.3333333333333333

Вышеупомянутая реализация использует глобальную точность и отзыв с параметром micro. Если вы хотите учитывать веса классов для расчета точности и отзыва (для ситуаций дисбаланса классов), установите для него значение weighted.


Редактировать. Обратите внимание, что взвешенное среднее геометрическое между глобальной точностью и полнотой с весами, которые в сумме составляют 1 (60:40 или 50:50 и т. д.), всегда будет давать одно и то же конечное значение! Вы можете получить это, написав точность в форме TP, FP и то же самое для отзыва. Поэтому я бы порекомендовал поддерживать метки weighted точности и отзыва.

02.01.2021
  • Большое спасибо за ответ. Единственное, чего я не понимаю, это где в приведенной выше функции каждый из весов соответствует либо точности, либо отзыву (т. Е. Откуда мы знаем, что 3 - это вес отзыва, а 2 - вес точности?) 03.01.2021
  • Я обновил код, чтобы упростить определение. Теперь вы можете рассматривать веса как проценты (0,3 = 30%). 03.01.2021
  • Перейдите по по этой ссылке, чтобы подробнее узнать, как определить веса. Я также добавил это как часть ответа. 03.01.2021
  • Дайте мне знать, если это решило ваш вопрос. Спасибо! 03.01.2021
  • Либо я не понимаю, что средневзвешенное геометрическое среднее геометрическое между глобальной точностью и отзывом с весами, которые в сумме составляют 1 (60:40 или 50:50 и т. д.), всегда будет приводить к одному и тому же конечному значению! или я не понимаю, как это может быть правдой. Вы хотите сказать, что выбор веса не влияет на результат? 05.03.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..