2017-11-10 23 views
3

これはあいまいですが、クラスタ化したい特性を備えた100以上のカラムと〜10^6行のデータセットがあります。使用方法Rで最も効率的なkmeansクラスタリングパッケージは何ですか?

kmeans(dataframe, centers = 100, 
      nstart = 20, 
      iter.max = 30) 

i7-6700Kで1時間かかります。それは複数のコアを使用しないので、できることは何ですか?

ありがとうございます!あなたがここClusterR、特に機能MiniBatchKmeans

を使用して試みることができる

+0

はあなたの試してみました[ClusterR](https://cran.r-project.org/web/packages/ClusterR/vignettes/the_clusterR_package.html)をお持ちですか? – missuse

+0

@missuseはクラスタRを試しましたが、特定のデータとそれが属するクラスタからrownameを私の知る限り出力しません。それはクラスターRの可能性ですか? –

答えて

1

は、使い方の例である:(あなたよりも小さい - 30万行と30列)

いくつかのデータ

z <- rbind(replicate(30, rnorm(1e5, 2)), 
      replicate(30, rnorm(1e5, -1)), 
      replicate(30, rnorm(1e5, 5))) 

library(ClusterR) 
km_model <- MiniBatchKmeans(z, clusters = 3, batch_size = 20, num_init = 5, max_iters = 100, 
         init_fraction = 0.2, initializer = 'kmeans++', early_stop_iter = 10, 
         verbose = F) 

pred <- predict_MBatchKMeans(z, km_model$centroids) 

オブジェクトpredには、関連するクラスタが含まれています。

table(pred) 
pred 
    1  2  3 
100000 100000 100000 

私はそれが完璧な分離だと思います。機能が速い場合は、バッチサイズと開始回数を増やすことをお勧めします。

スピード:

library(microbenchmark) 
microbenchmark(km_model <- MiniBatchKmeans(z, clusters = 3, batch_size = 20, num_init = 5, max_iters = 100, 
              init_fraction = 0.2, initializer = 'kmeans++', early_stop_iter = 10, 
              verbose = F)) 

Unit: seconds 
                                                expr 
km_model <- MiniBatchKmeans(z, clusters = 3, batch_size = 20, num_init = 5, max_iters = 100, init_fraction = 0.2, initializer = "kmeans++",  early_stop_iter = 10, verbose = F) 
     min  lq  mean median  uq  max neval 
3.338328 3.366573 3.473403 3.444095 3.518813 4.176116 100 
+0

私の入力データフレームには15列の機能があり、各行は異なる点であり、サンプルを識別する行名が付いています。私はこれらの名前をクラスタ化したいが、必ずしも各クラスタの真ん中を見つける必要はない。普通のkmeansは私にそれをさせる。 ClusterRを使って可能ですか?ありがとう! –

+0

私の例のベクトル 'pred'には、行数と同じ数の要素が含まれています。各行は各ベクトル要素に対応しています。 'pred'ベクトルを入力データフレームに' cbind 'するだけで、各行に適切なクラスターが付けられます。 – missuse

関連する問題