一、K-means
(一)思想
优化目标
![]()
(二)流程
- 随机选择k个点作为初始质心
- 将每个点指派到最近的质心,形成k个簇,重新计算每个簇的质心
- 簇不发生变化或达到最大迭代次数停止。
(三)缺点
- k值需要指定
- 初始聚类中心敏感
- 对离群点敏感
- 需要对数据做标准化
- 对于类别数据无法聚类
- 可能收敛于局部最小值,在大规模数据集上收敛慢
- 任意形状的簇无法聚类
- 和样本呈线性关系
(四)实战
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, n_init=10, max_iter=200)
kmeans.fit(data)
clusters = np.asarray(kmeans.cluster_centers_, dtype=np.unit8)
labels = np.asarray(kmeans.labels_, dtype=np.unit8)
二、K-modes
(一)解决问题
对分类属性型数据进行聚类
(二)步骤
- 假设有N个样本,M个属性,均为离散的,随机确定k个聚类中心C1,C2...Ck,Ci是长度为M的向量
- 对于样本xj,分别比较其与k个中心之间的距离(不同属性值的个数,如x1=[1,2,1,3]和C1=[1,2,3,4]之间的距离为2)
- 将xj划分到距离最小的簇,在全部的样本都被划分完毕之后,重新确定簇中心,向量Ci中的每一个分量都更新为簇i中的众数
- 重复直到总距离(各个簇中样本与各自簇中心距离之和)不再降低,返回最后的聚类结果
三、K-medoids
(一)解决问题
对异常值敏感
(二)简介
与K-means算法类似,区别在于中心点的选取
- K-means:当前类中所有点的重心
- K-medoids:当前类中所有其他点到该点的距离之和最小
在一定程度上削弱了异常值的影响,但计算较为复杂。
(三)步骤
- 任意选取k个点作为medoids
- 将剩余的n-k个点分配到最佳的类中
- 对于第i个类中除对应medoids点外的所有其他点,按顺序计算当其为新的medoids时,准则函数的值,遍历所有可能,选取准则函数最小时对应的点作为新的medoids
- 重复,直到所有的medoids点不再发生变化或已达到设定的最大迭代次数
四、层次聚类
(一)两种
层次聚类试图在不同层次对数据集进行划分,形成树形的聚类结果
- 分裂法:由上向下把大的类别分割
- 凝聚法:由下向上对小的类别聚合
(二)分裂法
- 将所有样本归为1类
- 在同一类中计算两两样本之间的距离,找出最远的两个点a,b
- 将样本a,b分配到不同的类簇c1和c2中
- 计算原类簇c中其他样本点与a,b之间的距离,归到c1或c2中
- 重复,达到聚类数据或设定条件停止
(三)凝聚法
- 将所有样本作为一个独立的类簇
- 计算两两类簇之间的距离,找到距离最小的c1和c2
- 把c1和c2合并为一个类
- 重复直至达到聚类数据或设定条件停止
五、DBSCAN
(一)基本概念
- 核心对象:r领域内点数量不少于minPts的点
- 直接密度可达:p在q的领域内,q是核心对象,p-q直接密度可达
- 密度可达:q0,q1,...,qn,qi-qi-1密度可达,则q0-qn密度可达
- 边界点:非核心点,不能再发展
- 噪声点:无论哪个核心对象都密度不可达
(二)流程
DBSCAN流程