计算平方不一致的总和

Calculate Total Sum of Square Inconsistency

我正在尝试在 R Studio 中为我自己的 k-means 实现编写自己的总平方和、总平方和和介于平方和之间的函数。

我已经成功地编写了平方和内的函数,但是我在总平方和(以及 bss)方面遇到了困难。我得到的结果明显大于 R 自己的 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。我完全错过了什么吗?

可能你的程序有问题。您从数据框中减去矩阵。使用以下 -

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

我这边给出了正确答案。

后一个值是使用列平均值计算的。如果你用它来计算均值,你会得到相同的答案。

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

结合前两位评论员提供的解决方案,我找到了解决问题的方法。我知道我之前的错误是什么,并希望为未来的科学家们消除任何困惑。

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 ) )

}

每一列都是不同特征的整个样本,所以当我们计算每一列的均值时,它是一个特征的整个样本的均值。我之前的概念错误是结合这两个特征来计算总体平均值。