Tôi đang cố gắng biên dịch một danh sách các thuật toán phân cụm đó là:
- Thực hiện trong R
- Hoạt động trên các ma trận dữ liệu thưa thớt (không phải (dis) ma trận tương tự), chẳng hạn như các ma trận được tạo bởi hàm thưa thớt .
Có một số câu hỏi khác trên CV thảo luận về khái niệm này, nhưng không có câu hỏi nào trong số chúng liên kết với các gói R có thể hoạt động trực tiếp trên ma trận thưa thớt:
- Phân cụm bộ dữ liệu lớn và thưa thớt
- Phân cụm dữ liệu nhị phân thưa chiều cao
- Tìm kiếm thực hiện phân cụm thưa thớt và chiều cao
- Phân cụm không gian hiệu quả
Cho đến nay, tôi đã tìm thấy chính xác một hàm trong R có thể phân cụm các ma trận thưa thớt:
skmeans : kmeans hình cầu
Từ gói skmeans . kmeans sử dụng khoảng cách cosine . Hoạt động trên các đối tượng dgTMatrix. Cung cấp giao diện cho thuật toán k-mean di truyền, pclust, CLUTO, gmeans và kmndirs.
Thí dụ:
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))
Các thuật toán sau có được đề cập đáng trân trọng: chúng không hoàn toàn là các thuật toán phân cụm, nhưng hoạt động trên các ma trận thưa thớt.
apriori : quy tắc khai thác hiệp hội
Từ gói arules . Hoạt động trên các đối tượng "giao dịch", có thể được ép buộc từ các đối tượng ngCMatrix. Có thể được sử dụng để đưa ra khuyến nghị.
thí dụ:
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 thưa thớt
Từ gói irlba . Có SVD trên ma trận thưa thớt. Có thể được sử dụng để giảm tính chiều của ma trận thưa thớt trước khi phân cụm với các gói R truyền thống.
thí dụ:
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 : Phân chia mối quan hệ
library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while
Những chức năng khác là gì ngoài đó?