Есть ли ошибка в реализации ARI в scikits или мое понимание алгоритма неверно? - PullRequest
0 голосов
/ 08 января 2019

При вычислении 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).

Мой вопрос: мое понимание «хороших» надписей совершенно неверно, или, может быть, есть какая-то ошибка или даже недокументированные ограничения ввода для алгоритма?

1 Ответ

0 голосов
/ 09 января 2019

Нет и да.

Нет: реализация кажется верной, и да: ваше понимание неверно.

Скорректированный ранд-индекс сравнивает данный результат с любой случайной перестановкой меток. Результат хорош, только если он лучше случайного.

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

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

...