Я пытаюсь сопоставить предметы. Учитывая набор из предметов, я могу оценить по шкале от 0 до 100, насколько они похожи друг на друга. Например, если элемент n 1 является молоком, а элемент n 2 также является молоком, то сходство между n 1 и n 2 будет 100%. Если n 3 является содой, то сходство между n 1 и n 3 будет, возможно, 80% и так далее.
Я пытаюсь понять, как сгруппировать элементов в группы похожих элементов, но это сложная проблема. Я сталкиваюсь со следующей проблемой: лошадь похожа на корову, которая похожа на козу, которая частично похожа на козий сыр, который похож на сыр, который соотносится с крекерами. Однако я не ожидал бы, что лошадь будет в той же группе, что и крекеры. Каждый элемент может быть попарно коррелирован, но начало и конец могут не совпадать.
Любые идеи?
источник
Ответы:
Здесь вы хотите разделить N наблюдений на K кластеров, которые обладают похожими свойствами. Это называется кластеризацией, и вы можете найти больше информации здесь .
Поскольку у вас уже есть числовая мера сходства, это заставляет меня задуматься об использовании алгоритма K-Means , в котором вы работаете в несколько этапов:
Вы можете проверить сходимость, когда центроиды перестали двигаться или находятся в пределах определенного порога.
Это обеспечит некоторую корреляцию элементов в каждом кластере, и вы можете получить более мелкозернистые кластеры, увеличив число кластеров в алгоритме («K»). Определение количества кластеров зависит от каждой проблемы, и я советую вам попробовать несколько значений для ваших проблем, посмотреть, что получается сгруппированными вместе, и посмотреть, что имеет смысл.
Надеюсь, это поможет.
источник
Я думаю, что вы ищете, называется «кластерный анализ» или «кластеризация». Существует много разных алгоритмов. В вашем случае вы хотели бы иметь некоторую «кластеризацию связности», то есть группировать элементы вместе на основе свойства, связывающего каждые два.
Взгляните на алгоритмы кластеризации в scikits.learn (код Python) и ссылки, упомянутые там.
источник