Я намагаюся скласти список алгоритмів кластеризації, які є:
- Реалізовано в R
- Оперуйте над матричними матрицями даних (не (не) матрицями подібності), такими, які створені функцією sparseMatrix .
Існує кілька інших питань щодо CV, які обговорюють цю концепцію, але жодне з них не посилається на R-пакети, які можуть працювати безпосередньо на розріджених матрицях:
- Кластеризація великих та розріджених наборів даних
- Кластеризація великомірних розріджених бінарних даних
- Шукаєте розріджену та високомірну реалізацію кластеризації
- Простір-ефективна кластеризація
Поки що я знайшов рівно одну функцію в 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
Які ще функції там?