zoukankan      html  css  js  c++  java
  • K-Means ++ 和 kmeans 区别

    Kmeans算法的缺陷

    聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适
    Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(可以使用Kmeans++算法来解决)
    针对上述第2个缺陷,可以使用Kmeans++算法来解决
    K-Means ++ 算法
     k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。
    从输入的数据点集合中随机选择一个点作为第一个聚类中心
    对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
    选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
    重复2和3直到k个聚类中心被选出来
    利用这k个初始的聚类中心来运行标准的k-means算法
     从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:
    先从我们的数据库随机挑个随机点当“种子点”
    对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。
    然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。
    重复2和3直到k个聚类中心被选出来
    利用这k个初始的聚类中心来运行标准的k-means算法
    可以看到算法的第三步选取新中心的方法,这样就能保证距离D(x)较大的点,会被选出来作为聚类中心了。至于为什么原因比较简单,如下图 所示:  

                                                    

          假设A、B、C、D的D(x)如上图所示,当算法取值Sum(D(x))*random时,该值会以较大的概率落入D(x)较大的区间内,所以对应的点会以较大的概率被选中作为新的聚类中心。
    ---------------------

    摘自:https://blog.csdn.net/chlele0105/article/details/12997391

  • 相关阅读:
    转载:生产级实践之集群搭建方案系列PostgreSQL主从部署搭建与配置 规格严格
    在my.cnf中设置lower_case_table_names = 1 无效的解决方法【转载】 规格严格
    Druid sql解析 规格严格
    powa 规格严格
    【snmp】snmpwalk 指定端口 规格严格
    Chrome您的连接不是私密连接解决办法 规格严格
    MEF程序设计指南九:重组(Recomposition)MEF部件
    MEF程序设计指南八:部件生命周期(Parts Lifetime)托管
    项目管理学习笔记二:信息系统服务管理
    项目管理学习笔记一:信息化知识
  • 原文地址:https://www.cnblogs.com/bonelee/p/10461476.html
Copyright © 2011-2022 走看看