2017-12-06 29 views
1

私が使用しているデータセットは以下のとおりです。あなたが見ることができるように、k-meansクラスタ分析は、これらのクラスタの中心を容易に見つけると考えるでしょう。しかしK平均クラスタリングでデータ内のすべてのクラスタが見つかりません

Initial Data

、私はクラスター分析をKが-意味し、私はこれを取得センターをプロットし実行します。

K-means Cluster Centers

私は基本的な関数kmeansコード使用しています:関数kmeansについてはほとんど知られて事実が信頼性の高い結果を得るために、あなたは多くのランダムな初期化で繰り返しアルゴリズムを実行する必要があるということです

cluster <- kmeans(mydata,90) 
cluster$centers 
+0

関数kmeansは、決定論的なアルゴリズムではありませんが、初期のセンターのランダム性は、最終的に影響を与える必要があります結果。期待される結果が得られた場合は、初期中心を事前に定義するか、別のアルゴリズムを探します。 – Dave2e

+0

約5,000データポイントです。しかし、それらは構造化されたクラスタ(1クラスタあたり約40〜60データポイント)に配置されます。 – tylerp

+0

別のクラスタリングアルゴリズムを使用してセンターを見つけようとしましたが、センターをk-meansに送信しましたか? [例えば。 h-cluster](https://stackoverflow.com/questions/44547697/cluster-algorithm-with-levenshtein-distance-and-additional-features-variables/44551452#44551452) – AkselA

答えて

1

私がコメントで述べたように、hclust()を使用してセンターを見つけることは実行可能なアプローチかもしれません。

enter image description here

set.seed(1) 

l <- 1e4 
v1 <- sample(1:10, l, replace=TRUE) + rnorm(l, 0, 0.05) 
v2 <- sample(1:13, l, replace=TRUE) + rnorm(l, 0, 0.05) 
dtf <- data.frame(v1, v2) 

par(mar=c(2, 2, 1, 1)) 
plot(dtf, pch=16, cex=0.2, col="#00000044") 

km <- kmeans(dtf, 10*13) 
points(km$centers, cex=2, lwd=0.5, col="red") 

hc <- hclust(dist(dtf)) 
hc <- cutree(hc, 10*13) 
hcent <- aggregate(dtf, list(hc), mean)[, -1] 

hckm <- kmeans(dtf, hcent) 

points(hckm$centers, cex=3, lwd=0.5, col="blue") 
2

を。私は通常kmeans(, nstart = 1000)を使用します。

理論的には、kmeans++アルゴリズムは初期化の問題からそれほど影響を受けませんが、は多くのランダムな再起動を実行し、kmeans++よりも優れたパフォーマンスを示すことがよくあります。それでも、flexclust Rパッケージを使用してkmeans++を試してみるとよいでしょう。

+0

残念ながら、これは私が持っていた問題を解決しませんでした。結果は若干改善されましたが、まだ重複しているクラスタセンターを取得しています。 – tylerp

+0

'nstart = 10000'または' nstart = 100000'までしてみてください。それらのどちらも動作しない場合は、良い初期設定を行う別の方法が必要になります。非常に満足できる答えではありませんが、最適なk-meansクラスタリングはNP完全な問題ですので、他にはできることはそれほどありません。 –

0

このデータセットはDBSCANによってクラスタ化することがはるかに良いと思われます。

クラスター(例えば、10)の距離よりもイプシロン少ない選択し、Minptsはあまり問題、その後、例えば、minpts = 4つの

+0

これは私に探している90のクラスタを与えるようですが、どのように各クラスタの中心/平均を抽出するのですか? – tylerp

+0

DBSCANはセンターベースではありません。バグは簡単に自分で平均を計算できます。 –