计算平方不一致的总和

时间:2017-01-14 19:42:21

标签: r k-means

我试图用自己的函数来求平方的总和,在平方和之间,以及在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。我完全错过了什么吗?

3 个答案:

答案 0 :(得分:0)

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

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

从我这边得到了正确答案。

答案 1 :(得分:0)

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

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

答案 2 :(得分: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 ) )

}

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