vlambda博客
学习文章列表

【简单数据】聚类算法初识



【聚类】


根据数据的相似性进行分组。相似性衡量方法有距离、相似系数、核函数和DTW。介绍5种常用的聚类。


【means聚类】


最优距离求解问题(质心到区域内点距离和最小)。


获取数据 n 个 m 维的数据【聚类数据】

随机生成 K 个 m 维的点【初始质心】


while(t)【停止条件】

    for(int i=0;i < n;i++)【所有数据遍历】

        for(int j=0;j < k;j++)【与每个质心计算距离分类】

            计算点 i 到类 j 的距离

    for(int i=0;i < k;i++)【计算每个类的质心并更新】

        1. 找出所有属于自己这一类的所有数据点

        2. 把自己的坐标修改为这些数据点的中心点坐标

end


关键部分:距离算法、质心更新。

输入条件:聚类数量

输出结果:质心、距离


距离算法;欧式距离(各属性欧式距离),聚类边界。

质心更新:均值(各属性向量均值),也是趋向密度最大,依靠上次聚类值。

评价指标:误差平方和。(目标函数)

局部最优:质心选取不合理(2个质心在一个类)。


【mean-shift聚类】


密度最优求解问题(半径确定,质心趋向密度最大)。


计算某一点A与其周围半径R内的向量距离的平均值M,计算出该点下一步漂移(移动)的方向(A=M+A)。当该点不再移动时,其与周围点形成一个类簇,计算这个类簇与历史类簇的距离,满足小于阈值D即合并为同一个类簇,不满足则自身形成一个类簇。直到所有的数据点选取完毕。


关键部分:质心更新(即密度算法,趋向密度最大)。

输入条件:半径距离(欧式距离)。

输出结果:质心、聚类数量。


密度算法/质心更新:加权向量均值。

改进算法:核函数/高斯函数(半径即带宽),给每个向量赋予权重,距离更近的点贡献更大(权重就是滤波,滤掉距离较远的点/大于带宽)。

质心寻找:依靠遍历并标记。

局部最优:不同的簇不同的密度,最终找到自己的最大。


【DBSCAN聚类】


限定密度条件问题。


密度算法/质心更新:依靠区域内点数。

质心寻找:依靠遍历和标记。


【EM聚类】


如果一组数据有隐式数据,能够更好的帮助聚类,就可以用EM。实质上是反馈和迭代的过程。


GMM是点到质心的密度概率,K-means是点到质心的距离。EM求的是密度最优问题。质心更新依靠上次聚类点。


【层次聚类】


步骤一:(初始化)将每个样本都视为一个聚类;

步骤二:计算各个聚类之间的相似度;

步骤三:寻找最近的两个聚类,将他们归为一类;

步骤四:重复步骤二,步骤三;直到所有样本归为一类或指定几类。


这个比较容易懂。


to be continued