聚类算法---Kmeans,K-mediods,bisecting K-means,DBSCAN,STING

聚类算法---Kmeans,K-mediods,bisecting K-means,DBSCAN,STING_第1张图片
Kmeans
learn URL
https://blog.csdn.net/loveliuzz/article/details/78783773
spark MLlib kmeans 参数解释:
https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice4/
聚类算法---Kmeans,K-mediods,bisecting K-means,DBSCAN,STING_第2张图片

优点:
1、解决聚类问题的经典算法,简单、快速
2、当处理大数据集时,该算法保持可伸缩性和高效率
3、当簇近似为高斯分布时,它的效果较好
缺点:
1、在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用
2、必须实现给出k(要生成簇的数目),而且对初值敏感,即对于不同的初值,可能会导致不同结果
3、不适合非凸形状的簇或者大小差别很大的簇
4、对噪声和孤立点敏感
思想
1,选择K个点作为初始质心
2,repeat
将每个点指派到最近的质心,形成K个簇
重新计算每个簇的质心
until 簇不发生变化或达到最大迭代次数
缺陷
1. K值需要预先给定,属于预先知识,很多情况下K值的估计是非常困难的,对于像计算全部微信用户的交往圈这样的场景就完全的没办法用K-Means进行。对于可以确定K值不会太大但不明确精确的K值的场景,可以进行迭代运算,然后找出Cost Function最小时所对应的K值,这个值往往能较好的描述有多少个簇类。
2. K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同
3. K均值算法并不是很所有的数据类型。它不能处理非球形簇、不同尺寸和不同密度的簇,银冠指定足够大的簇的个数是他通常可以发现纯子簇。
4. 对离群点的数据进行聚类时,K均值也有问题

K-mediods算法
算法流程:
a) 首先随机选取一组聚类样本作为中心点集
b) 每个中心点对应一个簇
c) 计算各样本点到各个中心点的距离(如欧几里德距离),将样本点放入距离中心点最短的那个簇中
d) 计算各簇中,距簇内各样本点距离的绝度误差最小的点,作为新的中心点
e) 如果新的中心点集与原中心点集相同,算法终止;如果新的中心点集与原中心点集不完全相同,返回b)
举例
a) 设有(A,B,C,D,E,F)一组样本
b) 随机选择B、E为中心点
c) 计算D和F到B的距离最近,A和C到E的距离最近,则B,D,F为簇X1,A,C,E为簇X2
d) 计算X1发现,D作为中心点的绝对误差最小,X2中依然是E作为中心点绝对误差最小
e) 重新以D、E作为中心点,重复c)、d)步骤后,不再变换,则簇划分确定。
优缺点
a) K-mediods算法具有能够处理大型数据集,结果簇相当紧凑,并且簇与簇之间明显分明的优点,这一点和K-means算法相同。
b) 该算法也有K-means同样的缺点,如:必须事先确定类簇数和中心点,簇数和中心点的选择对结果影响很大;一般在获得一个局部最优的解后就停止了;对于除数值型以外的数据不适合;只适用于聚类结果为凸形的数据集等。
c) 与K-means相比,K-mediods算法对于噪声不那么敏感,这样对于离群点就不会造成划分的结果偏差过大,少数数据不会造成重大影响。
d) K-mediods由于上述原因被认为是对K-means的改进,但由于按照中心点选择的方式进行计算,算法的时间复杂度也比K-means上升了O(n)。
层次聚类
great learning URL
http://home.deib.polimi.it/matteucc/Clustering/tutorial_html/hierarchical.html
http://bluewhale.cc/2016-04-19/hierarchical-clustering.html
二分K-均值(bisecting K-means)
一种层次聚类方法
主要思想是:首先将所有点作为一个簇,然后将该簇一分为二。之后选择能最大程度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。以此进行下去,直到簇的数目等于用户给定的数目K为止。
以上隐含着一个原则是:因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点月接近于它们的质心,聚类效果就越好。所以我们就需要对误差平方和最大的簇进行再一次的划分,因为误差平方和越大,表示该簇聚类越不好,越有可能是多个簇被当成一个簇了,所以我们首先需要对这个簇进行划分。
伪代码:
1)将所有的点看成一个簇
2)当簇数目小于k时
对每一个簇:
计算总误差
在给定的簇上面进行k-均值聚类k=2
计算将该簇一分为二后的总误差
选择使得误差最小的那个簇进行划分操作
优缺点
同k-means算法一样,Bisecting k-means算法不适用于非球形簇的聚类,而且不同尺寸和密度的类型的簇,也不太适合。

基于密度聚类算法的主要特点是:
  (1) 发现任意形状的簇
  (2) 处理噪声
  (3) 一次扫描
  (4) 需要密度参数作为终止条件
  
DBSCAN
具有噪声应用的基于密度的空间聚类
找出核心对象,即其领域稠密的对象。它连接核心对象和它们的领域,形成稠密区域作为簇
伪代码:
聚类算法---Kmeans,K-mediods,bisecting K-means,DBSCAN,STING_第3张图片
(1) 首先将数据集D中的所有对象标记为未处理状态
(2) for(数据集D中每个对象p) do
(3) if (p已经归入某个簇或标记为噪声) then
(4) continue;
(5) else
(6) 检查对象p的Eps邻域 NEps(p) ;
(7) if (NEps(p)包含的对象数小于MinPts) then
(8) 标记对象p为边界点或噪声点;
(9) else
(10) 标记对象p为核心点,并建立新簇C, 并将p邻域内所有点加入C
(11) for (NEps(p)中所有尚未被处理的对象q) do
(12) 检查其Eps邻域NEps(q),若NEps(q)包含至少MinPts个对象,则将NEps(q)中未归入任何一个簇的对象加入C;
(13) end for
(14) end if
(15) end if
(16) end for
优点:
1. 与K-means方法相比,DBSCAN不需要事先知道要形成的簇类的数量。
2. 与K-means方法相比,DBSCAN可以发现任意形状的簇类。
3. 同时,DBSCAN能够识别出噪声点。对离群点有较好的鲁棒性,甚至可以检测离群点。
4.DBSCAN对于数据库中样本的顺序不敏感,即Pattern的输入顺序对结果的影响不大。但是,对于处于簇类之间边界样本,可能会根据哪个簇类优先被探测到而其归属有所摆动。
5.DBSCAN被设计与数据库一同使用,可以加速区域的查询。例如 使用R*树
缺点:
1. DBScan不能很好反映高维数据。
2. DBScan不能很好反映数据集以变化的密度。
3. 输入参数敏感,确定参数Eps , MinPts困难 ,若选取不当 ,将造成聚类质量下降。
4. 由于经典的DBSCAN算法中参数Eps和MinPts在聚类过程中是不变的,使得该算法难以适应密度不均匀的数据集
STING统计信息表格
一个基于网格的多分辨率聚类技术,它将空间区域划分为矩形单元。针对不同级别的分辨率,通常存在多个级别的矩形单元,这些单元形成了一个层次结构:高层的每个单元被划分为多个低一层的单元。关于每个网格单元属性的统计信息(例如平均值,最大值,和最小值)被预先计算和存储。这些统计变量可以方便下面描述的查询处理使用。 高层单元的统计变量可以很容易地从低层单元的变量计算得到。这些统计变量包括:属性无关的变量 count;属性相关的变量 m(平均值),s(标准偏差),min(最小值),max(最大值),以及该单元中属性值遵循的分布类型 distribution,例如正态的,均衡的,指数的,或无(如果分布未知)。当数据被装载进数据库,最底层单元的变量 count,m,s,min,和 max 直接进行计算。如果分布的类型事先知道,distribution 的值可以由用户指定,也可以通过假设检验来获得。一个高层单元的分布类型可以基于它对应的低层单元多数的分布类型,用一个阈值过滤过程来计算。如果低层单元的分布彼此不同,阈值检验失败,高层单元的分布类型被置为 none。
网格中常用的参数:
  (1) count 网格中对象数目
  (2) mean网格中所有值的平均值
  (3) stdev网格中属性值的标准偏差
  (4) min 网格中属性值的最小值
  (5) max 网格中属性值的最大值
  (6) distribution 网格中属性值符合的分布类型。如正分布,均匀分布
优点:
 (1) 基于网格的计算是独立于查询的,因为存储在每个单元的统计信息提供了单元中数据汇总信息,不依赖于查询。
 (2) 网格结构有利于增量更新和并行处理。
 (3) 效率高。STING扫描数据库一次开计算单元的统计信息,因此产生聚类的时间复杂度为O(n),在层次结构建立之后,查询处理时间为)O(g),其中g为最底层网格单元的数目,通常远远小于n。
 缺点:
 (1) 由于STING采用了一种多分辨率的方法来进行聚类分析,因此STING的聚类质量取决于网格结构的最底层的粒度。如果最底层的粒度很细,则处理的代价会显著增加。然而如果粒度太粗,聚类质量难以得到保证。
 (2) STING在构建一个父亲单元时没有考虑到子女单元和其他相邻单元之间的联系。所有的簇边界不是水平的,就是竖直的,没有斜的分界线。降低了聚类质量。
 与其它聚类算法相比,STING有几个优点:
(1)由于存储在每个单元中的统计信息描述了单元中数据的与查询无关的概要信息,所以基于网格的计算是独立于查询的;
(2)网格结构有利于并行处理和增量更新;
(3)该方法的效率很高:STING 扫描数据库一次来计算单元的统计信息,因此产生聚类的时间复杂度是 O(n),n 是对象的数目。

你可能感兴趣的:(数据挖掘)