【问题标题】:Calculate Total Sum of Square Inconsistency计算平方不一致的总和
【发布时间】:2017-05-29 23:35:09
【问题描述】:

我正在尝试在 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。我完全错过了什么吗?

【问题讨论】:

    标签: r k-means


    【解决方案1】:

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

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

    从我的角度来看,它给出了正确的答案。

    【讨论】:

    • 谢谢。这并没有解决我的问题,但它确实帮助我找到了解决方案!
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢。这澄清了很多。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2021-08-18
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 2016-11-14
      相关资源
      最近更新 更多