机器学习之常见聚类方法

一、kmeans

1、算法流程

1.选择聚类的个数k(kmeans算法传递超参数的时候,只需设置最大的K值) 
2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。 
3.对每个点确定其聚类中心点。 
4.再计算其聚类新中心。 
5.重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变。)

2、使用距离

欧氏距离

3、k值的选择

a、肘部法则:随着K值的变化,误差平方和(SSE)会不断下降,误差平方和下降幅度趋于稳定时,K值最优
b、轮廓系数
c、Canopy算法
d、Calinski-Harabasz Index
类别内部数据的协方差越小越好, 类别之间的协方差越
大越好, 这样的Calinski-Harabasz分数s会高, 分数s高则聚类效果越好

4、算法优化

四种硬聚类算法(K-means++,二分K-means,ISODATA和Kernel K-means)

K-means++:
假设已经选取了n个初始聚类中心(0 < n < K),则在选取第n+1个聚类中心时: 距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。在选取第一个聚类中心(n=1)时同样通过随机的方法。可以说这也符合我们的直觉:聚类中心当然是互相离得越远越好。

ISODATA:
》 类别数目随着聚类过程而变化;
》 对类别数的“合并”: ( 当聚类结果某一类中样本数太少, 或两个类间的距离太近时)(样本太少或太散会被打散)
》 “分裂”( 当聚类结果中某一类的类内方差太大, 将该类进行分裂)

Kernel k-means:
kernel k-means实际上公式上,就是将每个样本进行一个投射到高维空间的处理,然后再将处理后的数据使用普通的k-means算法思想进行聚类。

二分K-means:
首先将所有点作为一个簇,然后将该簇一分为二。之后选择能最大限度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。 以此进行下去,直到簇的数目等于用户给定的数目k为止。

Mini Batch K-Means
对大数据分小批量处理

小结:
优点:
1、原理简单(靠近中心点) ,实现容易
2、聚类效果中上(依赖K的选择)
3、空间复杂度o(N)时间复杂度o(I*K*N)
N为样本点个数,K为中心点个数,I为迭代次数
缺点:
1、对离群点, 噪声敏感 (中心点易偏移)
2、很难发现大小差别很大的簇及进行增量计算
3、结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)

5、K-means 附加问题

1, 处理空簇
2, 离群点
3, 降低SSE
4, 增量更新质心

二、层次聚类

1、流程:

  • 1、每个点作为一个单元簇
  • 重复地合并两个最靠近的簇,直到产生单个的、包含所有点的簇。

2、层次聚类方法

MIN(也叫做单链):定义簇的邻近度为不同簇的两个最近的点之间的邻近度,使用图的术语即:不同结点子集中两个结点之间的最短边。单链技术擅长于处理非椭圆形状的簇,但对噪声和离群点很敏感。
MAX(也叫全链):取不同簇中两个最远的点之间的邻近度作为簇的邻近度,使用图的术语即:不同结点子集中两个结点之间的最长边。完全连接对噪声和离群点不太敏感,但是它可能使大的簇破裂,并且偏好于球形。
组平均(Group Average):定义簇邻近度为取自不同簇的所有点的平均逐对邻近度。如果我们取基于原型的观点,簇用质心代表,则不同的簇邻近度定义就更加自然。使用质心时,簇的邻近度一般定义为簇质心之间的邻近度
Ward方法:也假定簇用其质心代表,但它使用合并两个簇导致的SSE增加来度量两个簇之间的邻近性,像K均值一样,Ward方法也试图最小化点到其簇质心的距离的平方和。当两个点之间的邻近度取它们之间距离的平方时,Ward方法与组平均非常相似。

层次聚类主要问题:
1, 缺乏全局目标函数
2, 处理不同大小簇的能力
3, 合并簇后不撤销

小结:
优点和缺点:使用这类聚类算法是因为基本应用(如创建一种分类法)需要层次结构。凝聚层次聚类算法是昂贵的,所有合并是最终的,对于噪声、高维数据(如文档数据),这也可能造成问题。先使用其他技术(如K均值)进行部分聚类,这两个问题都可以在某种程度上加以解决。
层次聚类的空间复杂度O(m2)。总时间复杂度O(m2logm)。

三、基于密度(DBSCAN)

1、定义

DBSCAN( Density-Based Spatial Clustering of Applications with Noise)
DBSCAN基于密度的聚类:
核心点(core point) : 这些点在基于密度的簇内部。点的邻域由距离函数和用户指定的距离参数Eps决定。核心点的定义是,如果该点的给定邻域的点的个数超过给定的阈值MinPts,其中MinPts也是一个用户指定的参数。
边界点(border point) : 边界点不是核心点,但它落在某个核心点的邻域内。
噪声点(noise point) :噪声点是既非核心点也非边界点的任何点。

2、流程

DBScan需要二个参数: 扫描半径 (eps)和最小包含点数(minPts)。

1) 任选一个未被访问(unvisited)的点开始,找出与其距离在eps之内(包括eps)的所有附近点;
2) 如果 附近点的数量 ≥ minPts,则当前点与其附近点形成一个簇,并且出发点被标记为已访问(visited)。 然后递归,以相同的方法处理该簇内所有未被标记为已访问(visited)的点,从而对簇进行扩展;
3) 如果 附近点的数量 < minPts,则该点暂时被标记作为噪声点;
4) 如果簇充分地被扩展,即簇内的所有点被标记为已访问,然后用同样的算法去处理未被访问的点。

3、K-means与DBSCAN的区别

  • K-means使用簇的基于原型的概念,而DBSCAN使用基于密度的概念。
  • K-means只能用于具有明确定义的质心(如均值)的数据。DBSCAN要求密度定义(基于传统的欧几里得密度概念)对于数据是有意义的。
  • K-means需要指定簇的个数作为参数,DBSCAN不需要事先知道要形成的簇类的数量,DBSCAN自动确定簇个数。
  • 与K-means方法相比,DBSCAN可以发现任意形状的簇类。DBSCAN可以处理不同大小和不同形状的簇,K-means很难处理非球形的簇和不同形状的簇。
  • K-means可以用于稀疏的高纬数据,如文档数据。DBSCAN则不能很好反映高维数据。
  • K-means可以发现不是明显分离的簇,即便簇有重叠也可以发现,但是DBSCAN会合并有重叠的簇。

猜你喜欢

转载自blog.csdn.net/sinat_30353259/article/details/81085976