희소 데이터 수학에서 작동하는 클러스터링 알고리즘 [닫기]


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))

다음 알고리즘은 호의적 인 언급을 얻습니다.이 알고리즘은 클러스터링 알고리즘은 아니지만 희소 행렬에서 작동합니다.

apriori : 협회 규칙 마이닝

로부터 arules 패키지 . 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 지원 Monica

이 질문은 stats.stackexchange.com/help/dont-ask의 여러 기준에 따라 주제가 맞지 않는 것으로 보입니다 . 모든 답변은 똑같이 유효하며 제공된 답변 외에도 더 많은 답변을 기대하며 실제 문제는 없습니다. 해결되었습니다.
whuber

나는 이것이 닫혔다는 것을 알고 있지만 비슷한 문제가 있었으므로 SO를 탐색 할 때 이것에 대한 모든 질문을 넘어 섰다.) 나는 희소 행렬과 함께 작동 할 수있는 친화력을 사용하는이 라이브러리를 발견했다 : bioinf.jku.at / software / apcluster
MarkeD

1
@MarkeD 감사합니다! 온라인에서 다른 곳에서는 찾을 수 없기 때문에 소프트웨어 권장 사항이 너무 좋지 않습니다.
Zach

3
다시 한번 매우 유용한 질문은 닫혀 :( 당신이 대답을 가까운 단지 해달라고 투표를 잘 모릅니다 경우!
MonsterMMORPG

답변:


1

R을 사용하지 않습니다. 종종 매우 느리고 색인 지원이 없습니다. 그러나 소프트웨어 권장 사항은 어쨌든 주제를 벗어난 것으로 간주됩니다.

참고 많이 알고리즘은 데이터를 저장하는 방법을 상관하지 않습니다. 희소 행렬을 선호하는 경우 알고리즘 선택이 아니라 선택해야합니다.

너무 많은 R을 사용하는 사람들은 매트릭스 작업에서 생각하는 경향이 있습니다 (R에서 빠른 코드를 작성하는 유일한 방법이기 때문에). 그러나 그것은 제한된 사고 방식입니다. 예를 들어 k는 의미하지 않습니다. 특히, 쌍으로 거리를 전혀 사용하지 않습니다. 분산 기여도를 계산하는 방법 만 있으면됩니다. 이는 제곱 유클리드 거리를 계산하는 것과 같습니다.

또는 DBSCAN. 필요한 것은 "이웃"술어입니다. 임의의 그래프로 작업 할 수 있습니다. 유클리드 거리와 Epsilon 임계 값이 사용하는 주변 그래프를 계산하는 가장 일반적인 방법입니다.

추신 당신의 질문은 매우 정확하지 않습니다. 당신은 참조 마 스파 스 데이터 매트릭스 또는 스파 스 유사성 매트릭스 ?


1
스파 스 데이터 매트릭스
Zach

대부분의 알고리즘은 스파 스 데이터 매트릭스에서 작동 할 수 있습니다. 예 : AGNES, PAM, DBSCAN, OPTICS, CLARA, ...
익명-무스

R을 모르는 경우 왜 응답했는지 확실하지 않습니다.
user3932000

나는 R을 알고있다. 아마 일반 R 사용자보다 훨씬 나을 것이다. R의 비표준 평가를 알고 있으며 대부분의 모듈이 C로 작성되어 있음을 알고 있으므로 희소 행렬을 전달하면 실제 코드로 전달하기 전에 먼저 감지 행렬로 복사됩니다. 그리고 모든 패키지는 서로 다른 방식을 사용합니다 ... 효율적이지 않습니다. 효율성이나 우수한 통합 또는 이전 버전과의 호환성 또는 조정 된 개발이 필요한 경우 R을 선택하지 마십시오.
익명-무스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.