Соответствие аналогичным предметам из набора

10

Я пытаюсь сопоставить предметы. Учитывая набор из предметов, я могу оценить по шкале от 0 до 100, насколько они похожи друг на друга. Например, если элемент n 1 является молоком, а элемент n 2 также является молоком, то сходство между n 1 и n 2 будет 100%. Если n 3 является содой, то сходство между n 1 и n 3 будет, возможно, 80% и так далее.nn1n2n1n2n3n1n3

Я пытаюсь понять, как сгруппировать элементов в группы похожих элементов, но это сложная проблема. Я сталкиваюсь со следующей проблемой: лошадь похожа на корову, которая похожа на козу, которая частично похожа на козий сыр, который похож на сыр, который соотносится с крекерами. Однако я не ожидал бы, что лошадь будет в той же группе, что и крекеры. Каждый элемент может быть попарно коррелирован, но начало и конец могут не совпадать.n

Любые идеи?

Джейсон
источник
В эволюционной биологии результаты такой попарной кластеризации называются филогенетическими деревьями , поэтому вы можете добавить это к своему набору полезных поисковых терминов.
hardthth

Ответы:

7

Здесь вы хотите разделить N наблюдений на K кластеров, которые обладают похожими свойствами. Это называется кластеризацией, и вы можете найти больше информации здесь .

Поскольку у вас уже есть числовая мера сходства, это заставляет меня задуматься об использовании алгоритма K-Means , в котором вы работаете в несколько этапов:

  • Инициализировать кластерные центроиды случайным образом
  • Назначьте каждое наблюдение кластеру, соответствующему ближайшему центроиду.
  • Обновите центроиды как новое среднее значение элементов в кластере.

Вы можете проверить сходимость, когда центроиды перестали двигаться или находятся в пределах определенного порога.

Это обеспечит некоторую корреляцию элементов в каждом кластере, и вы можете получить более мелкозернистые кластеры, увеличив число кластеров в алгоритме («K»). Определение количества кластеров зависит от каждой проблемы, и я советую вам попробовать несколько значений для ваших проблем, посмотреть, что получается сгруппированными вместе, и посмотреть, что имеет смысл.

Надеюсь, это поможет.

Чарльз Менгу
источник
5

Я думаю, что вы ищете, называется «кластерный анализ» или «кластеризация». Существует много разных алгоритмов. В вашем случае вы хотели бы иметь некоторую «кластеризацию связности», то есть группировать элементы вместе на основе свойства, связывающего каждые два.

Взгляните на алгоритмы кластеризации в scikits.learn (код Python) и ссылки, упомянутые там.

GertVdE
источник