2017-12-06 16 views
1

사용중인 데이터 세트가 아래에 나와 있습니다. K- 평균 클러스터 분석은 이러한 클러스터의 중심을 쉽게 찾을 수 있다고 생각합니다. 그러나K-means 클러스터링이 데이터의 모든 클러스터를 찾지 못함

Initial Data

, 내가 클러스터 분석을 K가-의미 나는이를 얻을 센터를 플롯 실행합니다.

K-means Cluster Centers

난 단지 기본적인 kmeans 코드를 사용하고 있습니다 : kmeans에 대해 조금 알려진 사실, 당신은 많은 무작위 초기화와 반복 알고리즘을 실행하는 데 필요한 즉 신뢰할 수있는 결과를 얻을 수 있습니다

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

Kmeans가 결정적 알고리즘되지 않고, 초기 센터 랜덤 최종 영향을 미칠 것이다해야 결과. 예상되는 결과가 있다면 초기 중심을 미리 정의하거나 다른 알고리즘을 찾으십시오. – Dave2e

+0

약 5,000 데이터 포인트입니다. 그러나 이들은 구조화 된 클러스터 (클러스터 당 약 40-60 데이터 포인트)로 배열됩니다. – tylerp

+0

다른 클러스터링 알고리즘을 사용하여 센터를 찾은 다음 센터를 k- 수단으로 보냈습니까? [예 : h-clust] (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은 센터 기반이 아니므로 버그를 직접 쉽게 계산할 수 있습니다. –