Интересно, есть ли функция потерь, которая может измерять перекрытие двух коллекций/наборов (порядок не имеет значения). Например. основная истина — это набор [a, b, c], а прогноз моей модели — это набор [b, e, f], перекрытие — [b]. Моя цель состоит в том, чтобы максимизировать перекрытие моего прогноза. Есть ли у нас функция потерь, которая может измерять размер перекрытия, который я могу минимизировать (отрицательно) метрику, в результате я могу максимизировать перекрытие. (Я знаю, что одно решение может следовать за обучением REIFORCE, которое рассматривает перекрытие как вознаграждение за каждую выборку данных и использует вознаграждение, чтобы взвесить потерю, но у нас есть другое решение) Спасибо.
Потеря для минимизации перекрытия двух коллекций/наборов
Ответы (2)
Как заметил П-Гн, проблема с такими коэффициентами заключается в их дифференцируемости. Однако можно определить аналогичные меры для этих коэффициентов, которые являются дифференцируемыми. Долговая расписка (пересечение над объединением), предложенная Prune, является хорошей мерой. Для задач глубокого обучения более популярен аналогичный коэффициент Дайса:
2 * len(A intersect B)/(len(A)+ len(B))
который колеблется от 0, если нет перекрытия, до 1 для идентичных наборов. Для бинарных векторов это можно сформулировать как
2 * abs(a.b)/(a**2 + b**2)
где векторы представляют собой представление набора с горячим кодированием.
Теперь, если ваш последний слой в вашей нейронной сети имеет активацию softmax (например, когда вы используете кросс-энтропию), вы можете интерпретировать выходные данные как вероятности этого конкретного элемента, принадлежащего вашему предсказанному набору. Предыдущая формула по-прежнему является хорошей мерой пересечения между вашими наборами, но остается дифференцируемой. Так называемая потеря Dice (1 – коэффициент Dice) впервые была представлена в этой статье, где вы можете прочитать больше. об этом.
Для этой метрики нет предопределенной функции потерь; вам придется написать свой собственный. Однако установить метрики перекрытия достаточно легко. Например, len(A intersect B) / len(A union B)
достаточно просто: отсутствие перекрытия равно 0,0; равенство равно 1,0; ваш случай будет 0,2: 20% доступных элементов находятся в перекрытии.
Это заставляет вас двигаться?