에서 값을 반환하며 반환 된 개체의 속성 tot.withinss totss 와 의 차이가 무엇인지 궁금했다. 문서에서 그들은 똑같은 것을 반환하는 것처럼 보였지만 내 데이터 세트에 적용된 값은 토트의 값은 66213.63이고 tot.withinss의 값은 6893.50입니다. 당신이 mroe 세부 사항에 익숙하다면 알려주십시오. 감사합니다.kmeans 내가 kmeans() R의 기능을 사용하고 R
마리우스.
에서 값을 반환하며 반환 된 개체의 속성 tot.withinss totss 와 의 차이가 무엇인지 궁금했다. 문서에서 그들은 똑같은 것을 반환하는 것처럼 보였지만 내 데이터 세트에 적용된 값은 토트의 값은 66213.63이고 tot.withinss의 값은 6893.50입니다. 당신이 mroe 세부 사항에 익숙하다면 알려주십시오. 감사합니다.kmeans 내가 kmeans() R의 기능을 사용하고 R
마리우스.
은 주어진 사각형 betweenss
의 합과 각 클러스터 withinss
에 대한 제곱의 합에서의 벡터 사이의 공식이 있습니다 : 하나 개의 클러스터이 있다면
totss = tot.withinss + betweenss
tot.withinss = sum(withinss)
예를 들어, 다음 betweenss
이 0
것, withinss
및 totss = 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
방법 우리는 지금 장착 방법은 코멘트 위의 후행에 맞는 방법을 보여줍니다 코드 라인.
나는 당신이 말하는 문서에 오류가 ... 발견 한 생각 :
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 메일 링리스트에 도움말 페이지 수정을 요청하는 요청을 작성하십시오. 네가 원하지 않는다면 그렇게 할 수있어.
빠른 반응에 감사드립니다. 나는 같은 것을 생각하고 있었다. .. 내가 보았던 것에 따라 불행하게도 단 한사람의. 당신은 그들에게 요청을 원하면 쓸 수 있습니다. 요점은 유전 적 k-means 알고리즘을 사용하고 있으며 그 결과를 비교하고 싶다는 것입니다. 이제 나는 고려해야 할 것이 무엇인지 알지 못합니다. – Marius
무엇을 할 것입니까? (너무 많은 대명사와 형용사가있어 혼란 스럽거나 내 질문에 충분한 명사가 없습니다.) –
:/프로그래밍 언어 구문이 없으면 문법을 선택합니까? 나는 유전자 k-means 알고리즘의 결과를 R의 kmeans 함수의 결과와 비교하기를 원했다. 핵심 포인트는 클러스터 내에서의 변화를 최소화하는 것이다. R에있는 반환 된 kmeans 객체에는 doc에 정의 된 두 개의 속성이 있습니다.비교할 결과가 하나뿐입니다. – Marius
Ahum. 따라서 * tot.withinss *는 클러스터 변형 내에서 합계가되어야하고 * totss *는 전체 데이터 변형이어야합니다. 클러스터 변동 내 합계 + 클러스터 센터의 합계. 권리? – Marius
몇 가지 추가 설명을 추가했습니다. –
따라서 클러스터 변형 내에서 전체를 찾으려면 * tot.whitinss *가 하나입니다. 고맙습니다. – Marius