У меня есть полумаленькая матрица двоичных объектов размером 250k x 100. Каждая строка является пользователем, а столбцы представляют собой двоичные «теги» некоторого поведения пользователя, например «likes_cats».
user 1 2 3 4 5 ...
-------------------------
A 1 0 1 0 1
B 0 1 0 1 0
C 1 0 0 1 0
Я хотел бы распределить пользователей по 5-10 кластерам и проанализировать нагрузки, чтобы понять, могу ли я интерпретировать группы поведения пользователей. Похоже, существует несколько подходов для подгонки кластеров к двоичным данным - что, по нашему мнению, может быть лучшей стратегией для этих данных?
PCA
Создание матрицы сходства Жакара , подгонка иерархического кластера, а затем использование верхних «узлов».
K-медиана
K-medoids
Агнесса
До сих пор у меня был некоторый успех с использованием иерархической кластеризации, но я действительно не уверен, что это лучший способ пойти ..
tags = read.csv("~/tags.csv")
d = dist(tags, method = "binary")
hc = hclust(d, method="ward")
plot(hc)
cluster.means = aggregate(tags,by=list(cutree(hc, k = 6)), mean)
источник
Ответы:
Анализ латентного класса является одним из возможных подходов.
Возьмите следующее распределение вероятностей, где A, B и C могут принимать значения 1 или 0.
Если бы они были независимы друг от друга, то мы ожидали бы увидеть:
Как только эта возможность будет устранена, мы можем предположить, что любая наблюдаемая зависимость связана с кластеризацией значений внутри ненаблюдаемых подгрупп. Чтобы проверить эту идею, мы можем оценить следующую модель:
Однако попытка определить значимые шаблоны в 100 переменных с 5-10 группами, вероятно, потребует сокращения этого списка до оценки модели, что само по себе является достаточно сложной задачей ( REF ).
источник
На самом деле, частый анализ наборов элементов может быть лучшим выбором, чем кластеризация на таких данных.
Обычный векторный ориентированный набор алгоритмов не имеет большого смысла. K-средства, например, произведут средства, которые больше не являются двоичными.
источник