Алгоритми кластеризації, які працюють на розріджених матрицях даних [закрито]


18

Я намагаюся скласти список алгоритмів кластеризації, які є:

  1. Реалізовано в R
  2. Оперуйте над матричними матрицями даних (не (не) матрицями подібності), такими, які створені функцією sparseMatrix .

Існує кілька інших питань щодо CV, які обговорюють цю концепцію, але жодне з них не посилається на R-пакети, які можуть працювати безпосередньо на розріджених матрицях:

  1. Кластеризація великих та розріджених наборів даних
  2. Кластеризація великомірних розріджених бінарних даних
  3. Шукаєте розріджену та високомірну реалізацію кластеризації
  4. Простір-ефективна кластеризація

Поки що я знайшов рівно одну функцію в R, яка може кластеризувати малі матриці:

skmeans : сферичні кмеани

З пакету 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))

Наступні алгоритми чесно згадують: вони не зовсім кластеризують алгоритми, але працюють на розріджених матрицях.

apriori : асоціація правила видобутку

Із пакету ручок . Працює над "транзакційними" об'єктами, які можна примусити до об'єктів 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 . Чи SVD на малих матрицях. Можна використовувати для зменшення розмірності розріджених матриць до кластеризації з традиційними пакетами 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

Які ще функції там?


Ви маєте на увазі рідкісні значення, як у "безлічі нулів" або як у "безлічі відсутніх значень"?
cbeleites підтримує Моніку

Це запитання видається поза темою згідно з кількома критеріями на сайті stats.stackexchange.com/help/dont-ask : кожна відповідь була б однаково вірною, ви очікуєте більше відповідей на додаток до наданих, і немає фактичної проблеми. вирішено.
whuber

Я розумію, що це закрито, але я переглядав усі ваші запитання з цього приводу, коли я переглядав так, як у мене була подібна проблема;) Я знайшов цю бібліотеку, яка використовує схильність спорідненості, яка може працювати з рідкими матрицями: bioinf.jku.at / software / apcluster
MarkeD

1
@MarkeD Дякую! Насправді занадто погані рекомендації щодо програмного забезпечення тут не є тематичними, тому що я ніде більше не знайшов в Інтернеті, щоб просити їх.
Зак

3
ще раз дуже корисне питання закрито: (якщо ви не знаєте відповіді, просто не голосуйте за закриття!
MonsterMMORPG

Відповіді:


1

Я не використовую R. Він часто дуже повільний і не має підтримки індексації. Але рекомендації щодо програмного забезпечення все одно вважаються поза темою.

Зауважте, що безліч алгоритмів не байдуже, як ви зберігаєте свої дані. Якщо ви віддаєте перевагу розрідженій матриці, це має бути ваш вибір, а не вибір алгоритмів.

Люди, які використовують занадто багато R, як правило, зациклюються на мисленні в матричних операціях (адже це єдиний спосіб писати швидкий код у R). Але це обмежений спосіб мислення. Наприклад k-означає: це не хвилює. Зокрема, він взагалі не використовує парні відстані. Просто потрібен спосіб обчислення внеску дисперсії; що еквівалентно обчисленню евклідової відстані у квадраті.

Або DBSCAN. Все, що йому потрібно, це присудок «сусід». Він може працювати з довільними графіками; саме ця евклідова відстань і поріг Епсілона є найпоширенішим способом обчислення графіка сусідства, який він використовує.

PS Ваше запитання не дуже точне. Ви посилаєтесь на матриці розріджених даних або матриці зрідженої подібності ?


1
рідкісні матриці даних
Зак

Більшість алгоритмів можуть працювати на розріджених матрицях даних. Наприклад, AGNES, PAM, DBSCAN, OPTICS, CLARA, ...
Anonymous-Mousse -Reinstate Monica

Не знаю, чому ви навіть відповіли, якщо ви навіть не знаєте Р.
user3932000

Я знаю Р. Напевно, навіть краще, ніж середній користувач R. Я знаю нестандартне оцінювання в R, і я знаю, що більшість модулів написані на C, тому коли ви передаєте розріджену матрицю, її спочатку копіюють у матрицю почуттів, перш ніж передавати її фактичному коду. І кожен пакет використовує інший спосіб зробити це ... Це не ефективно. Ви не обираєте R, якщо вам потрібна ефективність або хороша інтеграція або зворотна сумісність або скоординований розвиток.
Anonymous-Mousse -Встановити Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.