2017-12-15 17 views
0

저는 Kmeans를 사용하여 수치 변수를 이산화하려고합니다. 꽤 잘 작동했지만 클러스터에서 간격을 찾을 수있는 방법이 궁금합니다.k-means 클러스터의 음의 간격을 어떻게 찾을 수 있습니까?

내 kmeans를 수행하려면 FactoMineR과 협력합니다. 나는 다음과 같은 그래프에 따라 3 개 클러스터를 발견 enter image description here

내 포인트는 이제 클러스터 내에서 내 수치 변수의 간격을 식별하는 것입니다.

FactoMineR 또는 다른 패키지에 어떤 옵션이나 방법이 있습니까? 나는 그것을 수동으로 할 수는 있지만 특정 양의 변수에 대해해야하므로, 쉽게 식별 할 수있는 방법을 찾고 싶습니다.

+2

[좋은 질문 올리기] (http://stackoverflow.com/help/how-to-ask) 및 [재현 가능한 예] (http : // stackoverflow.com/questions/5963269). 이렇게하면 다른 사람들이 당신을 도울 수있게됩니다. – Axeman

답변

0

데이터를 제공하지 않았으므로 kmeans 설명서의 예제를 사용 했으므로 두 열 x 및 y가있는 데이터에 대해 두 그룹이 생성됩니다. 각 행이 속한 클러스터에 의해 원본 데이터를 split으로 가져온 다음 각 그룹에서 데이터를 추출 할 수 있습니다. 내 예제 데이터가 귀하의 데이터와 유사한 지 잘 모르겠지만 아래 코드에서는 단순히 min 열 x 값과 max 열 y 값의 차이를 잠재적 인 간격의 경계로 사용했습니다 (이는 유스 케이스에 따라 다릅니다). 또는 아닙니다). 그게 도움이 되니?

data <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), 
      matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) 
colnames(data) <- c("x", "y") 

cl <- kmeans(data, 2) 

data <- as.data.frame(cbind(data, cluster = cl$cluster)) 

lapply(split(data, data$cluster), function(x) { 
    min_x <- min(x$x) 
    max_y <- max(x$y) 
    diff <- max_y-min_x 
    c(min_x = min_x , max_y = max_y, diff = diff) 
}) 

# $`1` 
# min_x  max_y  diff 
# -0.6906124 0.5123950 1.2030074 
# 
# $`2` 
# min_x  max_y  diff 
# 0.2052112 1.6941800 1.4889688 
+0

감사합니다! 정확히 내가 찾고 있었던 것 같습니다. 나는 비슷한 것을 생각했다. 그러나 나는'split'을 사용하지 않았다. –

+0

추가 힌트로 위의 코드 예제에서'str (cl)'('cl')을 사용하여'kmeans' 출력 내용을 검사 할 수 있습니다. 어쩌면 분석을 위해 더 많이 사용할 수 있습니다. –