您的位置:首页 > 大数据

经典聚类算法总结

2015-04-02 09:49 218 查看
时间复杂度只跟循环次数有关,与循环里有多少条语句无关。
DBSCAN:

density-based clustering:聚类参数:eps,min-samples(一个点在eps范围内有最小min-samples个点则定义为core point)
有三类点:core points,none-core point(在一个core point 的eps范围内,但是自己不是),outlier(既不是core point,也不在任何一个core point的eps内)
噪声点会被滤除,不产生完全聚类。
目的是寻找被低密度区域分离出的高密度区域。
时间复杂度:O(N*找到eps领域内点的时间),最坏O( N**2),最好O(N*logN)

k-means:
适用于凸状的,不适用于细长的或是不规则的形状的。
对于高维数据,欧式距离会膨胀,可以先用PCA降维。PCA:主成分分析,从原来的几个维度中提取综合出新的正交的代表原来变量的少数维度。
基于初始点的选择,算法很可能陷入局部最优,可以进行多次聚类减少这一误差,在python中,使用设置
init='kmeans++'参数可以将初始点设置的尽量远一些。

时间复杂度可以通过设置n_jobs多线程,牺牲内存来提高速度。

主要步骤:
1.选定初始点。
2.分配每个点到没各类
3.重新计算聚类中心。
O(N) 类数k,维度m,迭代次数l为常数时,不然都要乘进去。
适用范围:一般用途,类的大小比较平均,类数不太多。此外spectral clustering也是适用于类大小较平均的,其他的
聚类算法不需要,但是kmeans需要是flat形状的,spectral和其他的不用。

mini-batch k-means:
普通k-means的一个时间优化,分块计算,得到的结果略差于k-means。
与k-means的区别是,每一次随机选取一部分点进行中心点的更新和数据点的重新分配,比如:计算出一套中心点,再重新选取一部分样本分配到这些中心点,得到的结果更新中心点,之前的点也分配到这些更新的中心点中,再重复该过程。
优点:每次计算的量少了,时间加快。
缺点:效果略差一点

meanshift:基于中心的,每一套初始点根据其周围的一些数据点计算出一个m(平均偏移向量),在一个距离范围内中心点指向每个sample点的向量的均值,总是指向概率密度增大的最大方向,即求均值用,核函数实现,更新中心点。优化:使得每个点的权重不一样。一般用于目标跟踪,图像聚类。
Mean Shift算法的特性之一是该算法不需要提供一个要聚类的数目(K-Means聚类算法是需要的),而且该算法还能根据数据的特征发现任意形状的聚类簇。和dbscan一样找到最密集的区域。
步骤:
1.可自动seeding(或指定),即找到开始点。如果找到的点距离太近则留下其中一个。
2.指定窗口半径,可自动估计。
3.每个窗口和初始中心开始执行,根据计算出来的均值漂移向量移动到一个新的位置,并且开始新的循环。使用核函数,变部步长,每个样本点的权重也不同。始终指向密度增大最大的方向。循环退出的条件是当通过本地密度函数计算出来的向量变到很小的时候,满足一个阈值就退出。

affinity propagation(吸引子传播算法):
不需要指定聚类数k,时间空间复杂度高。
靠选取一些点作为其他点的代表,在节点间传递信息,迭代更新这些代表的点
缺点:时间复杂度,空间复杂度大
使用范围:中小型数据集

spectral clustering:在特征空间使用k-means等对低维数据点聚类,需要指定聚类类数,在类数小时效果好。用于图像分割效果好。

层次聚类:贪婪形式,一类的算法,是将nested cluster由一个开始进行分裂或者将一个点看做一个类开始合并,
一般用到的是凝聚型的层次聚类(根据距离算法不一样分为:SL层次聚类(smallest),CL层次聚类(max),AL层次聚类(均值)。。),具体流程:

将每个对象归为一类, 共得到N类, 每类仅包含一个对象. 类与类之间的距离就是它们所包含的对象之间的距离.

找到最接近的两个类并合并成一类, 于是总的类数少了一个.

重新计算新的类与所有旧类之间的距离.

重复第2步和第3步, 直到最后合并成一个类为止(此类包含了N个对象).

得到的是一个聚类层次树,算法最后得到的肯定是一个类,可以设置每一步得到的距离和阈值比较,类与类的最小距离如果大于阈值则跳出结束算法。每一次计算减少一个类,也可以以达到目标类数来结束。
缺点:每次计算新类与旧类之间的距离,时间复杂度高,不适合于大数集。
有三种距离模式,ward(欧氏距离,对每一次合并后总的类内离散程度增加最小为准则,类似k-means),complete 距离(两类间的maximum,效果最差),average距离(两类之间的任意点间的)后两者可以用很多距离,affinity(相似度,即距离)=Euclidean
distance (l2), Manhattan distance(city block距离)、cosine distance
因为要将距离近的类聚合,可能对于某些数据集不适合,每种都可以加上constraint(connectivity=true),设定一个connectivity matrix,只有有值得才可以被连接,学习又数据集学习到。才外,这样子大大减少了计算量,使得其可以夸大其使用范围到大数据集。
sklearn里使用的是凝聚型的层次聚类。
O(N**2(logN))

谱聚类:
优点:它具有能在任意形状的样本空间上聚类且收敛于全局最优解的优点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息