聚类算法总结

本文介绍了聚类算法的相关知识,包括数据的凸集和非凸集概念,以及距离和相似度的衡量方法如欧几里得距离、曼哈顿距离等。接着详细讲解了层次聚类、基于划分的方法、基于密度的聚类和基于网格单元的聚类等常见算法,重点阐述了DBSCAN算法的原理和步骤。最后提到了层次聚类法、k-means和自组织映射模型(SOM)等其他聚类方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近整理一下聚类相关的东西;

数据说明

  1. 凸集:在欧氏空间中,凸集是对于集合内的每一对点,连接该对点的直线段上的每个点也在该集合内;
  2. 非凸(non-convex)数据:类比上述可知;

距离&相似度

首先我们要了解衡量对象间差异的方法对象可能是一个值,也可能是序列,聚类的方式的大都通过距离或相似度来衡量,常用距离如下:
对于两个对象的n维指标(x1,x2,….xn)|(y1,y2,…yn);

  • 欧几里得距离:要求指标间可比
  • 曼哈顿距离
  • 切比雪夫距离
  • 明氏距离:欧几里得距离的扩展,是多个距离公式的拓展性表述。包括欧几里得距离、曼哈顿距离
  • 马氏距离:解决了欧几里得距离在指标度量上的缺陷,基于个指标维度进行标准化后再利用欧几里得公式计算,相当于改进版。
  • 向量空间余弦相似度
  • 皮尔逊相关系数
  • Jaccard相似系数:基于两者指标中相同的个数的比例
  • 调整余弦相似度:为了衡量每个维数值的差异,通过各个维度上的数值都减去均值,修正差异,当然需结合实际,进行减各维度的均值需保证可加减,属同一属性。
  • 其中距离与余弦相似度的区别在于余弦相似度体现的是空间方向上的差距,距离体现的是绝对距离。距离能够体现个体数值特征的绝对差异,从维度的数值大小体现差异,受度量标准的影响;余弦相似度对绝对的数值不敏感,更多用来体现用户兴趣的相似度和差异,同时修正了
聚类算法是一种常用的无监督学习方法,可以将数据集分成若干个组,每个组内的数据具有相似性。下面是一些常用的聚类算法及对应实例代码。 1. K-Means算法 K-Means算法是一种基于距离的聚类算法,其核心思想是将数据集分成K个簇,使得每个数据点都属于离其最近的簇。K-Means算法的步骤如下: 1. 随机选择K个质心(簇中心)。 2. 将每个数据点分配到距离其最近的质心所在的簇中。 3. 重新计算每个簇的质心。 4. 重复步骤23,直到簇中心不再改变或达到最大迭代次数。 下面是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、付费专栏及课程。

余额充值