Các thuật toán phân cụm hoạt động trên các ma trận dữ liệu thưa thớt [đã đóng]


18

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à:

  1. Thực hiện trong R
  2. 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:

  1. Phân cụm bộ dữ liệu lớn và thưa thớt
  2. Phân cụm dữ liệu nhị phân thưa chiều cao
  3. Tìm kiếm thực hiện phân cụm thưa thớt và chiều cao
  4. 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 đó?


Bạn có nghĩa là thưa thớt như trong "rất nhiều số không" hoặc như trong "rất nhiều giá trị bị thiếu"?
cbeleites hỗ trợ Monica

Câu hỏi này dường như lạc đề theo nhiều tiêu chí tại stats.stackexchange.com/help/dont-ask : mọi câu trả lời đều có giá trị như nhau, bạn mong đợi nhiều câu trả lời hơn những câu hỏi được cung cấp và không có vấn đề thực sự nào giải quyết.
whuber

Tôi nhận ra điều này đã bị đóng, nhưng tôi đã vấp phải tất cả các câu hỏi của bạn về vấn đề này khi tôi duyệt SO vì tôi gặp vấn đề tương tự;) Tôi thấy thư viện này sử dụng xu hướng ái lực có thể hoạt động với ma trận thưa thớt: bioinf.jku.at / phần mềm / apcluster
MarkeD

1
@MarkeD Cảm ơn rất nhiều! Các khuyến nghị phần mềm thực sự quá tệ ở đây không có chủ đề, vì tôi không tìm thấy nơi nào khác trên mạng để yêu cầu chúng.
Zach

3
một lần nữa câu hỏi rất hữu ích được đóng lại :( nếu bạn không biết câu trả lời thì đừng bỏ phiếu cho đóng!
MonsterMMORPG

Câu trả lời:


1

Tôi không sử dụng R. Nó thường rất chậm và không có hỗ trợ lập chỉ mục. Nhưng dù sao đề xuất phần mềm được coi là lạc đề.

Lưu ý rằng nhiều thuật toán không quan tâm đến cách bạn lưu trữ dữ liệu của mình. Nếu bạn muốn có một ma trận thưa thớt, đó nên là lựa chọn của bạn, không phải là sự lựa chọn thuật toán.

Những người sử dụng quá nhiều R có xu hướng bị mắc kẹt trong suy nghĩ trong các hoạt động ma trận (bởi vì đó là cách duy nhất để viết mã nhanh trong R). Nhưng đó là một cách suy nghĩ hạn chế. Ví dụ k-nghĩa là: nó không quan tâm. Đặc biệt, nó hoàn toàn không sử dụng khoảng cách theo cặp. Nó chỉ cần một cách để tính toán đóng góp phương sai; tương đương với tính toán khoảng cách Euclide bình phương.

Hoặc DBSCAN. Tất cả những gì nó cần là một vị ngữ "hàng xóm". Nó có thể làm việc với các biểu đồ tùy ý; đó chỉ là khoảng cách Euclide và ngưỡng Epsilon là cách phổ biến nhất để tính toán biểu đồ lân cận mà nó sử dụng.

PS Câu hỏi của bạn không chính xác lắm. Bạn có đề cập đến ma trận dữ liệu thưa thớt hoặc ma trận tương tự thưa thớt ?


1
ma trận dữ liệu thưa thớt
Zach

Hầu hết các thuật toán có thể hoạt động trên ma trận dữ liệu thưa thớt. Ví dụ: AGNES, PAM, DBSCAN, OPTICS, CLARA, ...
Anony-Mousse -Reinstate Monica

Không chắc chắn tại sao bạn thậm chí trả lời nếu bạn thậm chí không biết R.
user3932000

Tôi biết R. Có lẽ thậm chí còn tốt hơn người dùng R trung bình. Tôi biết đánh giá không chuẩn trong R và tôi biết rằng hầu hết các mô-đun được viết bằng C, vì vậy khi bạn vượt qua một ma trận thưa thớt, đầu tiên nó được sao chép vào một ma trận cảm giác trước khi chuyển nó sang mã thực tế. Và mỗi gói sử dụng một cách làm khác nhau ... Điều đó không hiệu quả. Bạn không chọn R nếu bạn cần hiệu quả hoặc tích hợp tốt hoặc tương thích ngược hoặc phát triển phối hợp.
Anony-Mousse -Reinstate Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.