疎データ行列で動作するクラスタリングアルゴリズム[非公開]


18

次のクラスタリングアルゴリズムのリストをコンパイルしようとしています。

  1. Rで実装
  2. sparseMatrix関数によって作成されるような、スパースデータ行列((非)非類似度行列ではない)で操作します。

CVにはこの概念を説明する他のいくつかの質問がありますが、スパース行列で直接操作できるRパッケージにリンクするものはありません。

  1. 大規模で疎なデータセットのクラスタリング
  2. 高次元のスパースバイナリデータのクラスタリング
  3. 疎で高次元のクラスタリング実装を探しています
  4. スペース効率の高いクラスタリング

これまでのところ、スパース行列をクラスター化できるRの関数を1つだけ見つけました。

skmeans:球面kmeans

skmeansパッケージから。コサイン距離を使用したkmeans 。dgTMatrixオブジェクトを操作します。遺伝的k-meansアルゴリズム、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はモニカをサポートします

この質問は、stats.stackexchange.com / help / dont - askの複数の基準によればトピック外であるように見えます。すべての回答は同等に有効であり、提供されたものに加えてより多くの回答が期待され、実際の問題はありません解決しました。
whuber

私はこれが閉じられたことに気づきましたが、同様の問題があったので、私はSOを閲覧するときにこれに関するすべての質問につまずいてき
MarkeD

1
@MarkeDどうもありがとう!ソフトウェアの推奨事項はあまりにも悪いので、ここでは話題になりません。オンラインでそれらを求める場所は他にありません。
ザック

3
もう一度、非常に便利な疑問が閉じている:(あなたは答えに近いためだけではいけないの票を知らない場合!
MonsterMMORPG

回答:


1

私はRを使用しません。多くの場合非常に遅く、インデックス作成のサポートはほとんどありません。ただし、ソフトウェアの推奨事項はトピックに関係ないと見なされます。

注ことをたくさんのアルゴリズムは、あなたがあなたのデータを保存する方法を気にしません。スパース行列を使用する場合は、アルゴリズムを選択するのではなく、選択する必要があります。

Rを使いすぎている人は、行列演算で考えることにこだわる傾向があります(Rで高速コードを記述する唯一の方法だからです)。しかし、それは限られた考え方です。たとえば、k-means:気にしません。特に、ペアワイズ距離をまったく使用しません。分散の寄与を計算する方法が必要なだけです。これは、ユークリッド距離の2乗を計算することに相当します。

またはDBSCAN。必要なのは「隣人」述語だけです。任意のグラフで機能します。ユークリッド距離とイプシロンしきい値が、使用する近傍グラフを計算する最も一般的な方法であるだけです。

PSあなたの質問はあまり正確ではありません。疎データ行列または疎類似行列を参照していますか?


1
疎データ行列
ザック14年

ほとんどのアルゴリズムは、スパースデータマトリックスで動作できます。例えば、AGNES、PAM、DBSCAN、光学、クララ、...
Anony-ムース-Reinstateモニカ

あなたもR.がわからない場合必ずあなたも答えないのはなぜ
user3932000

私はRを知っています。おそらく、平均的なRユーザーよりも優れています。Rでの非標準評価を知っており、ほとんどのモジュールがCで書かれていることを知っているので、スパース行列を渡すと、実際のコードに渡す前にセンス行列に最初にコピーされます。そして、すべてのパッケージは異なる方法を使用しています...それは効率的ではありません。効率性や優れた統合、後方互換性、または協調開発が必要な場合は、Rを選択しません。
アノニムース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.