Автор: Марк Страхов Редактура: Илья Бакалец
CleanLab — это вспомогательная либа для задач классификации. Она поможет вам автоматически сделать следующее:
Изнутри CleanLab базируется на confident learning’e. Его математика подробно описана в статье авторами самой либы. В нашем посте мы не будем разбирать матан, а просто посмотрим, как можно быстро прикрутить либу к вашим задачам. Если кратко: метод основан на подсчете двух матриц:
где $p(\tilde{y} = i, y^{\star} = j)$ — совместная вероятность зашумленной метки $i$ и истинной метки $j$ и различных манипуляций над этими матрицами.
Как установить либу? Нужно лишь прописать pip install cleanlab
в вашем виртуальном окружении.
Поиграемся с библиотекой на игрушечном датасете MNIST. Искать проблемы с метками можно исключительно на out-of-training примерах (примерах, отсутствующих в тренировочной выборке). Поэтому давайте представим: мы провели кросс-валидацию на MNIST’e и получили $K$ моделей, которыми мы можем посчитать $K$ out-of-fold вероятностей. Пусть y_true
— истинные метки, а y_hat_probas
— предсказанные вероятности. Для поиска проблемных меток воспользуемся функцией find_label_issues
. На вход ей нужно подать y_true
, y_hat_probas
и указать, каким способом искать сэмплы с проблемными метками и как их сортировать. Приведем пример:
from cleanlab.filter import find_label_issues
y_true = ... # GT-метки валидационной выборки.
y_hat_probas = ... # Предсказанные вероятности размера (N_samples, 10).
# label_issues - это список с индексами сэмплов, которые по
# мнению cleanlab являются проблемными.
label_issues = find_label_issues(
labels=y_true,
pred_probs=y_hat_probas,
filter_by="prune_by_noise_rate",
return_indices_ranked_by="self_confidence",
)
Параметр filter_by
контролирует правило, согласно которому будут отбираться сэмплы с сомнительными метками, а параметр return_indices_ranked_by
отвечает за способ их сортировки. Подробнее про них можно почитать здесь.
Например, если выполнить код, представленный выше, а затем посмотреть на сэмплы с индексами из функции find_label_issues
, то можно получить следующие результаты:
Рисунок 1. Найденные сэмплы с неправильными метками в MNIST