Вопрос:

Сравните, сколько процентов двух векторов меток совпадают

python cluster-analysis data-science

45 просмотра

1 ответ

3759 Репутация автора

Фон

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

проблема

У меня есть объекты данных с двумя типами меток. Метки являются целыми числами без какого-либо внутреннего значения, кроме тех объектов данных с одинаковой меткой (для каждого типа метки), принадлежащих к той же группе. Я хочу знать, в каком процентном соотношении две маркировки одинаковы.

Например (псевдокод, где == поэлементно):

>>> label1 = [1,1,1,1,2,2,2,3,3,3,3,3,4,4]
>>> label2 = [1,1,2,2,2,2,2,2,2,3,3,4,4,4]
>>> correctness = sum_of_true(label1 == label2) / 14
correctness: 9 / 14 = 0.6428571

Тем не менее, ярлыки могут использоваться не так. Например

>>> label1 = [1,1,1,1,2,2,2,3,3,3,3,3,4,4]
>>> label2 = [2,2,2,2,1,1,1,4,4,4,4,4,3,3]

на самом деле помечены и правильность должна быть 1.0.

Для этого мне нужно переименовать label2 таким образом, чтобы метки были как можно ближе к label1.

Неэффективное решение

Неэффективное решение состоит в том, чтобы просто попытаться переименовать label2все возможные решения, рассчитать для каждого переименования корректность, как указано выше в примере, и принять решение с наилучшей корректностью. Однако количество возможных переименований является перестановкой количества меток. Это может быть очень большое число и делает этот подход непригодным для использования.

Другие решения

Я знаю о нормализованной взаимной информации (nmi) как средство сравнения меток, но это не то, что я ищу. Причины в том, что, во-первых, nmi не является линейным, во-вторых, это трудно понять и общаться, и, в-третьих, я просто хочу что-то еще ;-) - в этом случае, чтобы узнать о количестве (~ процент) тех же помеченных объектов данных. Причина, по которой я хочу что-то еще, связана с последующим применением меток.

Так например

>>> label1 = [1,1,1,1]
>>> label2 = [1,2,3,4]

Я все еще хочу, чтобы это было правильно 1/4. Я не хочу обсуждать здесь, умный это или нет. В моем последующем приложении это то, что мне нужно.

Разрешить слияние

Кроме того, существует проблема, заключающаяся в том, что количество ярлыков может быть разным для разных label1и label2. Для моего приложения мне может быть полезно быть снисходительным к этому, позволяя объединять метки в одну с обеих сторон. Например

>>> label1 = [1,1,1,1]
>>> label2 = [1,2,3,4]

стала бы правильностью, 1если бы она снисходительно относилась к слиянию label2, в то время как это было бы 0.5для

>>> label1 = [1,1,2,2]
>>> label2 = [1,2,3,4]

Вопрос

Как я могу эффективно рассчитать правильность

  1. Слияние не допускается.
  2. Слияние в первом ярлыке разрешено.
  3. Слияние во втором ярлыке разрешено.

где, конечно, решение для 2. и 3. будет таким же.

Примечания

  • Я использую Python для реализации.
  • Скажите, пожалуйста, какие теги использовать для этого вопроса, если вы знаете. Я не уверена.
Автор: Make42 Источник Размещён: 18.03.2017 12:32

Ответы (1)


0 плюса

61972 Репутация автора

Существует несколько устоявшихся методов оценки сходства двух результатов кластеризации. Они уже решили проблему выравнивания, которая усугубляется, если количество кластеров меняется.

Вы должны, вероятно, просто использовать один из них, в частности:

  1. Индекс Рэнда
  2. Скорректированный индекс Рэнд
  3. Jaccard
  4. Индекс Фоулкса-Мэллова
Автор: Anony-Mousse Размещён: 18.03.2017 04:16
Вопросы из категории :
32x32