聚类算法总结

本文介绍了聚类算法,包括K-Means算法、层次聚类和密度聚类。K-Means通过迭代找到类簇中心,层次聚类分为凝聚和分裂两种方式,密度聚类如DBSCAN适用于不规则形状数据。聚类评估涉及聚类趋势、确定簇数和质量,常用霍普金斯统计量和轮廓系数进行量化评估。
摘要由CSDN通过智能技术生成
聚类是指一种学习方法,即把物理或者抽象对象的集合分组为由彼此类似的对象组成的多个类簇的分析过程。

聚类算法介绍

K-Means算法

K-Means算法是最常用的聚类算法之一,具体步骤如下:

  1. 从n个向量对象任意选择K个向量作为初始聚类中心;
  2. 根据1中设置的K个中心向量,计算每个对象与这k个中心向量的距离;
  3. 对于2中的计算,每个向量与这k个向量都有一个距离。把这个向量和距离它最近的中心向量归为一个类簇中;
  4. 重新计算每个类簇的中心向量位置;
  5. 重复3、4,直到类簇的向量归类变化极少为止。例如一次迭代后只有少于1%的向量发生归类漂移,则认为聚类结束。

注意
- 需要事先指定类簇的数量
- 需要事先给定初始的类簇中心

K-Means算法中的距离计算可以选择,简单的话可以选择欧氏距离和曼哈顿距离,还可以选择余弦相似度进行度量。

层次聚类

K-Means算法是直接把样本分成若干类簇,而层次聚类是通过聚类把样本根据距离分成若干类簇,类簇之间相异,类簇内部相似,每个类簇内部又继续划分若干小类簇,最后形成一棵树的结构。
层次聚类有两种思路,一种是凝聚的层次聚类方法,一种是分裂的层次聚类方法。凝聚的层次聚类是指在大量的样本中自底向上找那些距离比较近的样本先聚合成小的类簇,聚合到一定程度再由小的类簇聚合成大的类簇。分裂的层次聚类是先把所有样本分成若干大的类簇,然后每个大类簇中再划分。
分裂的层次聚类比较简单,可以利用K-Means先进行一次聚类,然后每个类簇中再利用K-Means聚类。
凝聚的层次聚类中有一点比较关键,就是小类簇聚合为大类簇的原则,一般是基于连接度的度量来判断是否应该合并,度量有三种不同的策略:

  1. Ward策略:根据类簇中的方差进行判断,使类簇内部方差最小化。
  2. Maximum策略:根据类簇之间的距离判断,使类簇之间的距离最大化。
  3. Average linkage策略:根据类簇之间的距离判断,使类簇之间的距离的平均值最小。

    层次聚类的思路对于实际问题的解决很有价值。

密度聚类

密度聚类用于聚类形状不规则的情况。sklearn提供专门用来做基于密度分类的算法库—sklearn.cluster.DBSCAN.
用法DBSCAN(eps, min_sample).fix(X)
X是样本向量;
eps是阈值,根据密度向外扩展的过程中如果发现这个阈值距离范围内中找不到向量,那么就认为这个聚簇已经聚类结束。
min_sample表示聚簇最小应该拥有多少个向量。如果类簇中的向量少于这个数则认为该聚类为噪声点,在结果中直接被舍弃。
参数需要在实验过程中进行多次调试。

聚类评估

聚类的质量评估包括以下三个方面:
1. 估计聚类的趋势。对于给定的数据集,评估该数据集是否存在非随机结构,也就是分布不均匀的情况。
2. 确定数据集中的簇数。多数算法需要在一开始就确定类簇的数量,并作为参数传递给算法。
3. 测量聚类的质量。可以用量化的方法来测量聚类的质量。

聚类趋势

常用霍普金斯统计量来进行聚类趋势的量化评估。
1. 从所有样本中随机找n个向量,把它们称为p向量,分别为p1,p2,…,pn。对每个向量都在样本空间中找一个离其最近的向量,然后求距离,然后用x1,x2,…xn 来表示。
2. 在所有样本向量中随机找n个向量,称为q向量,分别为q1,q2,…qn 。对每个向量都在样本空间中找一个离其最近的向量,然后求距离,然后用y1,y2,…yn 来表示。
3. 求霍普金斯统计量H

H=sumn

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
聚类算法是一种常用的无监督学习方法,可以将数据集分成若干个组,每个组内的数据具有相似性。下面是一些常用的聚类算法及对应实例代码。 1. K-Means算法 K-Means算法是一种基于距离的聚类算法,其核心思想是将数据集分成K个簇,使得每个数据点都属于离其最近的簇。K-Means算法的步骤如下: 1. 随机选择K个质心(簇中心)。 2. 将每个数据点分配到距离其最近的质心所在的簇中。 3. 重新计算每个簇的质心。 4. 重复步骤2和3,直到簇中心不再改变或达到最大迭代次数。 下面是K-Means算法的Python实现代码: ```python from sklearn.cluster import KMeans # 创建数据集 X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]] # 创建K-Means模型 kmeans = KMeans(n_clusters=2) # 训练模型 kmeans.fit(X) # 预测结果 y_pred = kmeans.predict(X) # 输出聚类结果 print(y_pred) ``` 2. 层次聚类算法 层次聚类算法是一种划分聚类算法,其核心思想是从单个数据点开始,将最相似的点组合成一个簇,逐步合并成更大的簇,直到所有数据点都被合并到同一个簇中。层次聚类算法有两种方式:自下而上的聚合和自上而下的分裂。下面是自下而上的聚合层次聚类算法的Python实现代码: ```python from scipy.cluster.hierarchy import dendrogram, linkage import matplotlib.pyplot as plt # 创建数据集 X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]] # 计算距离矩阵 Z = linkage(X, 'ward') # 绘制树状图 plt.figure(figsize=(10, 5)) dendrogram(Z) plt.show() ``` 3. DBSCAN算法 DBSCAN算法是一种基于密度的聚类算法,其核心思想是将密度相连的数据点划分为同一个簇。DBSCAN算法的步骤如下: 1. 选择一个未访问的数据点。 2. 如果该点周围的密度达到预设的阈值,则将其作为一个新的簇的中心点,并将其密度可达的所有点加入该簇。 3. 重复步骤2,直到所有数据点都被访问。 下面是DBSCAN算法的Python实现代码: ```python from sklearn.cluster import DBSCAN # 创建数据集 X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]] # 创建DBSCAN模型 dbscan = DBSCAN(eps=1, min_samples=2) # 训练模型 dbscan.fit(X) # 预测结果 y_pred = dbscan.labels_ # 输出聚类结果 print(y_pred) ``` 以上就是几种常用的聚类算法及对应实例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值