Алгоритмы кластеризации, работающие с разреженными матрицами данных [закрыто]

18

Я пытаюсь составить список алгоритмов кластеризации, которые:

  1. Реализовано в R
  2. Работа с разреженными матрицами данных (а не матрицами сходства), например, созданными функцией sparseMatrix .

Есть несколько других вопросов в CV, которые обсуждают эту концепцию, но ни один из них не связан с R-пакетами, которые могут работать непосредственно с разреженными матрицами:

  1. Кластеризация больших и редких наборов данных
  2. Кластеризация многомерных разреженных двоичных данных
  3. В поисках разреженной и многомерной реализации кластеризации
  4. Компактная кластеризация

До сих пор я нашел ровно одну функцию в R, которая может кластеризовать разреженные матрицы:

Skmeans : сферические Kmeans

Из пакета skmeans . Kmeans с использованием косинуса расстояния . Работает с объектами dgTMatrix. Предоставляет интерфейс для генетического алгоритма k-средних, pclust, CLUTO, gmeans и kmndirs.

Пример:

library(Matrix)
set.seed(42)

nrow <- 1000
ncol <- 10000
i <- rep(1:nrow, sample(5:100, nrow, replace=TRUE))
nnz <- length(i)
M1 <- sparseMatrix(i = i,
                   j = sample(ncol, nnz, replace = TRUE),
                   x = sample(0:1 , nnz, replace = TRUE), 
                   dims = c(nrow, ncol))
M1 <- M1[rowSums(M1) != 0, colSums(M1) != 0]

library(skmeans)
library(cluster)
clust_sk <- skmeans(M1, 10, method='pclust', control=list(verbose=TRUE))
summary(silhouette(clust_sk))

Следующие алгоритмы заслуживают упоминания: они не совсем алгоритмы кластеризации, но работают с разреженными матрицами.

априори : правила ассоциации майнинг

Из пакета Арулеса . Работает с объектами «транзакции», которые могут быть вызваны из объектов ngCMatrix. Может быть использован для вынесения рекомендаций.

пример:

library(arules)
M1_trans <- as(as(t(M1), 'ngCMatrix'), 'transactions')
rules <- apriori(M1_trans, parameter = 
list(supp = 0.01, conf = 0.01, target = "rules"))
summary(rules)

irlba : редкий SVD

Из пакета irlba . Есть ли СВД на разреженных матрицах. Может использоваться для уменьшения размерности разреженных матриц до кластеризации с традиционными R-пакетами.

пример:

library(irlba)
s <- irlba(M1, nu = 0, nv=10)
M1_reduced <- as.matrix(M1 %*% s$v)
clust_kmeans <- kmeans(M1, 10)
summary(silhouette(clust_kmeans$cluster, dist(M1_reduced)))

apcluster : кластеризация сродства распространения

library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while

Какие еще функции есть?

Zach
источник
Вы имеете в виду разреженные, как в «много нулей» или «много пропущенных значений»?
cbeleites поддерживает Монику
Похоже, что этот вопрос не по теме в соответствии с несколькими критериями на stats.stackexchange.com/help/dont-ask : каждый ответ будет одинаково действительным, вы ожидаете больше ответов в дополнение к предоставленным, и нет реальной проблемы, которая будет решена.
whuber
Я понимаю, что это закрыто, но я перебираю все ваши вопросы по этому вопросу, когда я просматриваю SO, поскольку у меня была похожая проблема;) Я нашел эту библиотеку, которая использует склонность к сродству, которая может работать с разреженными матрицами: bioinf.jku.at / программное обеспечение / apcluster
MarkeD
1
@MarkeD Большое спасибо! Очень плохо, что рекомендации по программному обеспечению здесь не по теме, так как я больше нигде не нашел в Интернете, чтобы их попросить.
Зак
3
еще раз очень полезный вопрос закрыт :( если вы не знаете ответ, просто не голосуйте за закрытие!
MonsterMMORPG

Ответы:

1

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

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

Люди, которые используют слишком много R, обычно зацикливаются на матричных операциях (потому что это единственный способ написать быстрый код на R). Но это ограниченный способ мышления. Например, k-означает: это не волнует. В частности, он вообще не использует попарные расстояния. Ему просто нужен способ для вычисления вклада дисперсии; что эквивалентно вычислению квадрата евклидова расстояния.

Или DBSCAN. Все, что ему нужно - это предикат «сосед». Может работать с произвольными графами; просто евклидово расстояние и порог Эпсилона являются наиболее распространенным способом вычисления графа окрестностей, который он использует.

PS Ваш вопрос не очень точный. Вы имеете в виду разреженные матрицы данных или разреженные матрицы сходства ?

Аноним-Мусс-Восстановить Монику
источник
1
скудные матрицы данных
Зак
Большинство алгоритмов могут работать с разреженными матрицами данных. Например, AGNES, PAM, DBSCAN, OPTICS, CLARA, ...
Anony-Mousse
Не знаю, почему вы даже ответили, если вы даже не знаете R.
user3932000
Я знаю R. Вероятно, даже лучше, чем средний пользователь R. Я знаю нестандартную оценку в R и знаю, что большинство модулей написаны на C, поэтому, когда вы передаете разреженную матрицу, она сначала копируется в матрицу смыслов, а затем передается в реальный код. И каждый пакет использует свой способ ... Это неэффективно. Вы не выбираете R, если вам нужна эффективность, хорошая интеграция, обратная совместимость или скоординированная разработка.
Аноним-Мусс-Восстановить Монику