zoukankan      html  css  js  c++  java
  • 聚类算法(二)--Kmeans++、elkan K-Means、Mini Batch K-Means、Sequential Leader Clustering

    上文原始Kmeans提到,由于Kmeans使用启发式迭代,所以当初始点不当时,导致得不到全局最优。

    Kmeans++

    这个算法思想也很简单,与原始Kmeans唯一不同的是选择初始点的方式。

    如图

    假设,我们的样本如上图分布,准备选择3个初始点,即k=3。

    第一,我随机选择了1作为初始点,求所有样本点与已选择的聚类中心中最近聚类中心的距离(现在只有点1),求出其他所有点与点1的距离D(xi),选择最大的。

    第二,我们现在选到了点9作为初始点(与1距离最远),然后所有样本点与已选择的聚类中心中最近聚类中心的距离,对于点2,3,4,5,6应求到1的距离,7,8求到9的距离,取最大的D(x),

    应该是点1到点4最大,那么点4倍被选为初始点。

    那么一共选出了点1,9,4作为初始点。

     可以重复一、二步骤,选出多个初始点。

    elkan K-Means

    Kmeans一文我们知道,一次质心的更新需要将所有样本点到质心的距离都算一次,比较耗时

    elkan K-Means的思想是

    针对一个样本点,两个质心,如果提前知道质心之间的距离D(a1,a2),那么

    当2D(x,a1)≤D(a1,a2), 必有D(x,a1)≤D(x,a2),不必计算D(x,a2)

    这一条不太明白,原理是三角形任意一边大于等于其他两边之差,怎么简化计算,不得而知

    大样本Mini Batch K-Means

    思想更简单,对大样本进行无放回随机抽样,抽取多次保证准确性。 

    Sequential Leader Clustering

    这种方法不用预先设定K值,不需要迭代,只需将数据过一遍。需要设定一个阈值T。

    用下图说明该思想

    第一,任意一个数据点(假如是点1)作为质心,依次算出其他2-9到质心1的距离d,若d<T(阈值),认为这两个点属于一个簇

    第二,若某样本点与现有质心的距离大于阈值T,则将这个点作为另一个质心。

    重复上述两步

    缺点:阈值的设定没有依据。

    参考https://www.cnblogs.com/pinard/p/6164214.html

    https://www.bilibili.com/video/av23933161/?p=30

    Valar morghulis
  • 相关阅读:
    HDU 5514 Frogs 欧拉函数
    HDU 5521 Meeting 最短路
    HDU 5527 Too Rich 贪心
    HDU 5525 Product 数论
    MFC中 编辑框内组合键的使用
    MyEclipse+Struts+Hibernate+Mysql开发环境配置
    SSH框架介绍
    mysql忘记密码的解决办法
    VS2010 MFC中 窗口分割的实现
    VS2010 MFC中 创建文件夹及文件判空的方法
  • 原文地址:https://www.cnblogs.com/super-yb/p/10862831.html
Copyright © 2011-2022 走看看