2017-01-14 4 views
0

저는 k- 평균을 구현하기 위해 제곱의 합계, 스퀘어의 합계 및 스퀘어의 합계 사이의 함수를 작성하려고합니다.스퀘어 불일치의 총합을 계산합니다

제곱의 합계 내에서 함수를 성공적으로 작성했지만 제곱근 합계 (따라서 bss)에 문제가 있습니다. 내가 얻은 결과는 R 's 자신의 kmeans 함수가 계산하는 것보다 상당히 크다. 수식이 제공하는 것을 정확하게 따르기 때문에 혼란 스럽습니다. 내 데이터는 다음과 같습니다.

A = 

36  3 
73  3 
30  3 
49  3 
47 11 
47 11 
0  7 
46  5 
16  3 
52  4 
0  8 
21  3 
0  4 
57  6 
31  5 
0  6 
40  3 
31  5 
38  4 
0  5 
59  4 
61  6 
48  7 
29  2 
0  4 
19  4 
19  3 
48  9 
48  4 
21  5 

각 열은 기능입니다. 이것은 지금까지 tss에 대해 작성한 함수입니다.

tot_sumoSq <- function(data){ 

    avg = mean(as.matrix(data)) 
    r = matrix(avg, nrow(data), ncol(data)) 

    tot_sumoSq = sum((data - r)^2) 

} 

결과는 24342.4이지만, R은 13244.8이됩니다. 완전히 빠진 것이 있습니까?

답변

0

후자의 값은 열 수단을 사용하여 계산됩니다. 평균을 계산할 때 이것을 사용하면 동일한 답을 얻을 수 있습니다.

avg = colMeans(data) 
    r = matrix(avg, nrow(data), ncol(data), byrow=T) 
[1] 13244.8 
+0

감사합니다. 이것은 많은 것을 명확하게했다. – user1723196

0

프로그램에 이상이있을 수 있습니다. 데이터 프레임에서 행렬을 뺍니다. 다음을 사용하십시오 -

tot_sumoSq <- function(data){ 
    data = as.matrix(data) 
    x = sum((data - mean(data))^2) 
    return(x) 
} 

내 대답은 정답입니다.

+0

감사합니다. 이것은 내 문제를 해결하지 못했지만 해결책을 찾는 데 도움이되었습니다! – user1723196

0

처음 두 명의 주석가가 제공 한 솔루션을 결합하여 문제를 해결했습니다. 이전에 저지른 실수를보고 미래의 과학자들에게 혼란을 없애고 싶습니다.

tot_sumoSq <- function(data){ 

    avg = colMeans(data) 
    r = matrix(avg, nrow(data), ncol(data), byrow = T) 

    data = as.matrix(data) 

    return(sum((data - r)^2)) 

} 

각 열은 다른 기능에 대한 전체 샘플이기 때문에, 우리는 각각의 컬럼에 대한 평균을 계산하면, 하나의 특징에 대한 전체 샘플의 평균 수단이다. 이전의 개념상의 실수는 두 특징을 결합하여 전체적인 평균을 계산하는 것이 었습니다.