Кластеризация двоичной матрицы

22

У меня есть полумаленькая матрица двоичных объектов размером 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)

введите описание изображения здесь

wije
источник
1
Для больших (много узлов) и многомерных данных также стоит попробовать алгоритм кластеризации графа (например, с использованием сходства танимото и таких методов, как кластеризация Лувена, RNSC, mcl). У меня есть некоторые сомнения относительно того, будут ли данные вашего типа генерировать значимые кластеры (это, конечно, вполне возможно), но эти сомнения относятся к кластеризации в целом, а не конкретно к конкретному типу кластеризации. PCA определенно что-то попробовать.
micans
6
Честно говоря, я удивлен, что этот вопрос привлек такое небольшое внимание. Почему это так? Для меня это звучит как чрезвычайно интересный вопрос.
Дрор Атария

Ответы:

9

Анализ латентного класса является одним из возможных подходов.

Возьмите следующее распределение вероятностей, где A, B и C могут принимать значения 1 или 0.

п(Aя,ВJ,СК)

Если бы они были независимы друг от друга, то мы ожидали бы увидеть:

п(Aя,ВJ,СК)знак равноп(Aя)п(ВJ)п(СК)

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

п(Aя,ВJ,СК)знак равноп(ИксN)п(Aя|ИксN)п(ВJ|ИксN)п(СК|ИксN)

ИксNN

5N10

Однако попытка определить значимые шаблоны в 100 переменных с 5-10 группами, вероятно, потребует сокращения этого списка до оценки модели, что само по себе является достаточно сложной задачей ( REF ).

DL Dahly
источник
Отлично, интересно. Что, по вашему мнению, является преимуществом использования этой техники по сравнению с другими?
wije
Одним из преимуществ является то, что кластеризация нечеткая, что позволяет вам учитывать неопределенность при любых последующих назначениях классов. Другая причина в том, что это метод, основанный на модели. Вы получаете индексы соответствия, основанные на вероятности, которые могут помочь при выборе модели. Это, конечно, происходит за счет необходимости делать предположения о распределении ... Я уверен, что другие действительные методы будут иметь свои собственные компромиссы.
DL Dahly
5

На самом деле, частый анализ наборов элементов может быть лучшим выбором, чем кластеризация на таких данных.

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

Аноним-Мусс-Восстановить Монику
источник
Имеет ли смысл использовать частые элементы, даже если я хочу кластеризовать пользователей, а не теги (столбцы)?
wije
1
ИМХО да. Но по очевидным причинам правила ассоциации не являются строгим разделением набора данных. Пользователь может быть членом более чем одного "частого набора элементов". Т.е. пользователь может быть как фанатом кошек, так и фанатом собак; эти две группы не должны быть разделены.
Anony-Mousse
Который ИМХО на самом деле хорош. Предположение, что каждый пользователь является членом только одного кластера, кажется мне слишком наивным.
Anony-Mousse