2011-12-26 2 views
13

에서 값을 반환하며 반환 된 개체의 속성 tot.withinss totss 의 차이가 무엇인지 궁금했다. 문서에서 그들은 똑같은 것을 반환하는 것처럼 보였지만 내 데이터 세트에 적용된 값은 토트의 값은 66213.63이고 tot.withinss의 값은 6893.50입니다. 당신이 mroe 세부 사항에 익숙하다면 알려주십시오. 감사합니다.kmeans 내가 kmeans() R의 기능을 사용하고 R

마리우스.

답변

19

은 주어진 사각형 betweenss의 합과 각 클러스터 withinss에 대한 제곱의 합에서의 벡터 사이의 공식이 있습니다 : 하나 개의 클러스터이 있다면

totss = tot.withinss + betweenss 
tot.withinss = sum(withinss) 

예를 들어, 다음 betweenss0 것, withinsstotss = tot.withinss = withinss에는 하나의 구성 요소 만 있습니다.

더 명확히하기 위해 클러스터 할당이 주어지면서 이러한 다양한 양을 계산할 수 있으며 그 의미를 분명히하는 데 도움이 될 수 있습니다. x 데이터와 의 예에서 클러스터 할당 cl$cluster을 고려하십시오.

# or ss <- function(x) sum(apply(x, 2, function(x) x - mean(x))^2) 
ss <- function(x) sum(scale(x, scale = FALSE)^2) 

그렇다면 우리는 다음이있다 : 이것은 다음 나머지 행렬의 각 원소의 제곱의 합을 그 열의 X의 각각의 컬럼의 평균을 뺀 - 다음 제곱 함수의 합을 정의한다. cl$centers[cl$cluster, ]은 맞는 값입니다. 즉, i 번째 행이 i 번째 점이 속하는 클러스터의 중심이되도록 점 당 하나의 행을 갖는 행렬입니다.

example(kmeans) # create x and cl 

betweenss <- ss(cl$centers[cl$cluster,]) # or ss(fitted(cl)) 

withinss <- sapply(split(as.data.frame(x), cl$cluster), ss) 
tot.withinss <- sum(withinss) # or resid <- x - fitted(cl); ss(resid) 

totss <- ss(x) # or tot.withinss + betweenss 

cat("totss:", totss, "tot.withinss:", tot.withinss, 
    "betweenss:", betweenss, "\n") 

# compare above to: 

str(cl) 

편집 :이 질문에 대한 답변이 되었기 때문에

, R은 추가했습니다 추가 유사한 kmeans 예 (example(kmeans)) 새로운 fitted.kmeans 방법 우리는 지금 장착 방법은 코멘트 위의 후행에 맞는 방법을 보여줍니다 코드 라인.

+0

Ahum. 따라서 * tot.withinss *는 클러스터 변형 내에서 합계가되어야하고 * totss *는 전체 데이터 변형이어야합니다. 클러스터 변동 내 합계 + 클러스터 센터의 합계. 권리? – Marius

+0

몇 가지 추가 설명을 추가했습니다. –

+0

따라서 클러스터 변형 내에서 전체를 찾으려면 * tot.whitinss *가 하나입니다. 고맙습니다. – Marius

0

나는 당신이 말하는 문서에 오류가 ... 발견 한 생각 :

withinss  The within-cluster sum of squares for each cluster. 
totss  The total within-cluster sum of squares. 
tot.withinss  Total within-cluster sum of squares, i.e., sum(withinss). 

당신은 도움말 페이지의 예에서 샘플 데이터 세트를 사용하는 경우 :

> kmeans(x,2)$tot.withinss 
[1] 15.49669 
> kmeans(x,2)$totss 
[1] 65.92628 
> kmeans(x,2)$withinss 
[1] 7.450607 8.046079 

누군가는해야한다고 생각 r-devel 메일 링리스트에 도움말 페이지 수정을 요청하는 요청을 작성하십시오. 네가 원하지 않는다면 그렇게 할 수있어.

+0

빠른 반응에 감사드립니다. 나는 같은 것을 생각하고 있었다. .. 내가 보았던 것에 따라 불행하게도 단 한사람의. 당신은 그들에게 요청을 원하면 쓸 수 있습니다. 요점은 유전 적 k-means 알고리즘을 사용하고 있으며 그 결과를 비교하고 싶다는 것입니다. 이제 나는 고려해야 할 것이 무엇인지 알지 못합니다. – Marius

+0

무엇을 할 것입니까? (너무 많은 대명사와 형용사가있어 혼란 스럽거나 내 질문에 충분한 명사가 없습니다.) –

+0

:/프로그래밍 언어 구문이 없으면 문법을 선택합니까? 나는 유전자 k-means 알고리즘의 결과를 R의 kmeans 함수의 결과와 비교하기를 원했다. 핵심 포인트는 클러스터 내에서의 변화를 최소화하는 것이다. R에있는 반환 된 kmeans 객체에는 doc에 정의 된 두 개의 속성이 있습니다.비교할 결과가 하나뿐입니다. – Marius

관련 문제