Enuriru
@Enuriru
Дизайнер, веб-разработчик

Как выполнить кластеризацию?

Имеется достаточно объемная база данных, включающая в себя документы, пользователей и множественные связи документ->пользователи (т.е. над каждый документом "работает" несколько пользователей).

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

Какими алгоритмами можно воспользоваться? Возможно, есть готовые решения или библиотеки?
Также хотелось бы некую управляемость, с помощью которой можно было бы регулировать размеры найденных групп, находить и большие, и маленькие.

Пример:
Документ1 — Вася, Коля, Саша
Документ2 — Вася, Коля, Нина
Документ3 — Нина, Саша, Вася

В данном случае должны быть выделены группы Вася+Коля (работали над 1 и 2) и Вася+Нина (работали над 2 и 3)

Немного забегая вперед, хотелось бы еще отображать связи между группами и как-то все это визуализировать (возможно, есть какие-то подобные библиотеки?)

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

Буду благодарен за помощь!
  • Вопрос задан
  • 572 просмотра
Пригласить эксперта
Ответы на вопрос 2
@zaplokee
В R можно скрамливать данные из MySQL, csv, xls, json, txt. И там довольно быстро (ну, конечно, в зависимости от объема данных) можно сделать дендрограмму для иерархической кластеризации с расчетом расстояний по умолчанию евклидовым методом (или по желанию другим). Вроде бы дендрограммы разукрашиваются даже. Графики из R экспортятся, правда, не особо шикарно (ограниченное число форматов). Впрочем, можно и другой инструмент найти. Но иерархическая кластеризация как раз позволит отобразить связи разных уровней и независимо от количества человек. Если, например, 3 человека наиболее часто работают друг с другом - они будут на одном уровне.
Ответ написан
Комментировать
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Kruskal алгоритм на Union-Find множестве связей Heap оптимизированном по весу связей. Если вес параметризован критериями, то задавать его Hamming расстоянием. И я не шучу, я это делал в коде на реальной задаче.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы