十种聚类算法的完整 Python 操作示例("Python实战:十种聚类算法详解与操作示例")
原创
一、K-Means 聚类算法
K-Means 是最经典的聚类算法之一,其核心思想是通过迭代寻找K个类别的中心点,让每个样本到其类别中心点的距离之和最小。
1.1 算法步骤
- 随机选择K个样本作为初始中心点。
- 计算每个样本到各个中心点的距离,并将其分配到最近的中心点所在的类别。
- 更新每个类别的中心点。
- 重复步骤2和3,直到中心点不再变化或大致有迭代次数。
1.2 Python 操作示例
import numpy as np
from sklearn.cluster import KMeans
# 创建样本数据
X = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])
# 创建 KMeans 对象
kmeans = KMeans(n_clusters=2, random_state=0)
# 拟合数据
kmeans.fit(X)
# 输出于是
print("Cluster centers:", kmeans.cluster_centers_)
print("Labels:", kmeans.labels_)
print("Inertia:", kmeans.inertia_)
二、DBSCAN 聚类算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是基于密度的聚类算法,它可以将具有足够高密度的区域划分为簇,并可以发现任意形状的簇。
2.1 算法步骤
- 对于每个未访问样本,计算其ε邻域内的样本数量。
- 如果样本数量大于或等于MinPts,则创建一个新的簇。
- 将所有在ε邻域内的样本加入簇中。
- 重复步骤1-3,直到所有样本都被访问。
2.2 Python 操作示例
import numpy as np
from sklearn.cluster import DBSCAN
# 创建样本数据
X = np.array([[1, 2], [2, 2], [2, 3],
[8, 7], [8, 8], [8, 9]])
# 创建 DBSCAN 对象
dbscan = DBSCAN(eps=3, min_samples=2)
# 拟合数据
dbscan.fit(X)
# 输出于是
print("Labels:", dbscan.labels_)
print("Core sample indices:", dbscan.core_sample_indices_)
三、层次聚类算法
四、均值漂移聚类算法
五、高斯混合模型聚类算法
六、谱聚类算法
七、不清晰C-means聚类算法
八、OPTICS聚类算法
九、基于密度的聚类算法(DBSCAN的变种)
十、基于网格的聚类算法
三、层次聚类算法
层次聚类算法(Hierarchical Clustering)是通过逐步合并小簇来形成大簇的算法。它可以是自底向上的(凝聚性层次聚类)或自顶向下的(分裂性层次聚类)。
3.1 算法步骤
- 将每个样本作为一个簇。
- 计算簇与簇之间的距离。
- 合并距离最近的两个簇。
- 重复步骤2和3,直到只剩下一个簇。
3.2 Python 操作示例
import numpy as np
from sklearn.cluster import AgglomerativeClustering
# 创建样本数据
X = np.array([[1, 2], [2, 2], [2, 3],
[8, 7], [8, 8], [8, 9]])
# 创建层次聚类对象
agglo = AgglomerativeClustering(n_clusters=2)
# 拟合数据
agglo.fit(X)
# 输出于是
print("Labels:", agglo.labels_)
print("Children:", agglo.children_)
以上是十种聚类算法中的两种算法的详细解释和Python操作示例。聚类算法在机器学习和数据挖掘中有着广泛的应用,每种算法都有其特点和适用场景。通过实际操作示例,我们可以更好地懂得和应用这些算法。
请注意,由于篇幅束缚,这里只提供了两种聚类算法的详细解释和代码示例。如果需要其他算法的详细解释和代码示例,可以按照上述格式继续添加。