Автор: Марк Страхов Редактура: Илья Бакалец

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

Рисунок 1. Найденные сэмплы с неправильными метками в MNIST