当前位置:   article > 正文

KMeans++的初始化方法_kmeans初始化方法

kmeans初始化方法

KMeans++ 的初始化方法:
1、随机选一个样本作为第一个簇中心。
2、计算每个样本到最近簇中心的距离。
3、以距离为概率随机选择下一个簇中心。
4、重复步骤2和3,直到找到K个簇中心。


vlfeat \ kmeans.c \ _vl_kmeans_init_centers_plus_plus_ 中的代码片段如下:

  1. x = vl_rand_uindex (rand, numData) ;
  2. c = 0 ;
  3. while (1) {
  4. TYPE energy = 0 ;
  5. TYPE acc = 0 ;
  6. TYPE thresh = (TYPE) vl_rand_real1 (rand) ;
  7. //把随机选的样本作为簇中心。
  8. memcpy ((TYPE*)self->centers + c * dimension,
  9. data + x * dimension,
  10. sizeof(TYPE) * dimension) ;
  11. c ++ ;
  12. if (c == numCenters) break ;
  13. //计算所有样本到当前簇中心的距离。
  14. VL_XCAT(vl_eval_vector_comparison_on_all_pairs_, SFX)
  15. (distances,
  16. dimension,
  17. (TYPE*)self->centers + (c - 1) * dimension, 1,
  18. data, numData,
  19. distFn) ;
  20. //计算所有样本到最近簇中心的距离,并求和。
  21. for (x = 0 ; x < numData ; ++x) {
  22. minDistances[x] = VL_MIN(minDistances[x], distances[x]) ;
  23. energy += minDistances[x] ;
  24. }
  25. //随机数落在距离和中的哪一段,就以对应样本为下一个簇中心。
  26. for (x = 0 ; x < numData - 1 ; ++x) {
  27. acc += minDistances[x] ;
  28. if (acc >= thresh * energy) break ;
  29. }
  30. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/812968
推荐阅读
  

闽ICP备14008679号