При расчете ARI с использованием scikit я заметил странный случай. Для некоторых списков, которые выглядят так, как будто в маркировке был высокий консенсус, ARI все еще составляет 0,0 или даже хуже.
Я перепробовал несколько ярлыков, причем следующее было самым странным из наблюдаемых:
from sklearn import metrics as m
labels_true = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
labels_pred = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1]
res = m.adjusted_rand_score(labels_true,labels_pred)
>>> res = 0.0
Результат равен 0.0, что является показателем того, что два списка являются абсолютно случайными метками. Глядя на них, интуитивно можно сказать, что это довольно хорошая маркировка, за исключением одной записи списка, которая является меткой для класса 0 вместо класса 1. Это даже реалистичный результат кластеризации, например, если в кластере только один кластер. небольшой набор данных без шума и одна точка ошибочно классифицируются (класс 0).
Мой вопрос: мое понимание "хороших" надписей совершенно неверно, или есть какая-то ошибка или даже недокументированные ограничения ввода для алгоритма?
Нет и да
Нет: реализация кажется правильной, и да: ваше понимание неверно.
Скорректированный рандовый индекс сравнивает данный результат с любой случайной перестановкой меток. Результат хорош, только если он лучше случайного.
Теперь, если вы посмотрите на даты, любая случайная перестановка будет точно такой же хорошей. Таким образом, правильное отрегулированное значение равно 0: точно так же, как и случайная перестановка.
Тем не менее, я согласен с вашей оценкой того, что ARI нельзя использовать с проблемой одного класса. Потому что на таких данных все перестановки равны. Неправильный инструмент для вашей проблемы: он сравнивает разделение набора данных, а у вас нет разделенных данных...