本文主要介绍如何用Python实现聚类功能。
一、K-Means聚类
K-Means聚类是一种基于距离度量的聚类算法。它的基本思路是,在样本数据集中随机选取K个点作为初始质心,然后根据到每个质心的距离将样本点划分为K个簇。接着计算每个簇的中心点,再将每个中心点作为新的质心,重复上述过程直到质心不再变化为止。
下面是K-Means聚类的Python实现代码:
import numpy as np def k_means(data, n_clusters): n_samples = data.shape[0] # 随机选择初始质心 centroids = data[np.random.choice(n_samples, n_clusters, replace=False)] # 根据距离划分簇 while True: # 计算距离 distances = np.sqrt(((data - centroids[:, np.newaxis])**2).sum(axis=2)) # 分配簇 labels = distances.argmin(axis=0) # 计算中心点 new_centroids = np.array([data[labels == i].mean(axis=0) for i in range(n_clusters)]) # 判断是否收敛 if np.allclose(new_centroids, centroids): break centroids = new_centroids return labels
其中data是样本数据,n_clusters是簇的数目。通过调用k_means函数就可以得到样本的聚类结果。
二、层次聚类
层次聚类是一种基于树形结构的聚类算法。它的基本思路是将所有样本点都看作单独的簇,逐步合并相邻的簇直到所有样本点都属于同一个簇为止。
下面是层次聚类的Python实现代码:
from scipy.spatial.distance import pdist,squareform from scipy.cluster.hierarchy import linkage,dendrogram def hierarchical_clustering(data): # 计算距离矩阵 dist_mat = pdist(data) # 构建簇之间的关系 linkage_mat = linkage(dist_mat) # 根据关系构建树形图 dendrogram(linkage_mat)
其中data是样本数据。通过调用hierarchical_clustering函数就可以得到样本的层次聚类结果,并将结果可视化为树形图。
三、DBSCAN聚类
DBSCAN聚类是一种基于密度的聚类算法。它的基本思路是,将“密度可达”的样本划分到同一个簇中,并将非核心样本归为噪声点。
下面是DBSCAN聚类的Python实现代码:
from sklearn.cluster import DBSCAN def dbscan_clustering(data, eps=0.5, min_samples=5): # 训练模型 model = DBSCAN(eps=eps, min_samples=min_samples) model.fit(data) # 获取簇标签 labels = model.labels_ # 去除噪声点 labels[labels==-1] = max(labels)+1 return labels
其中data是样本数据,eps是密度半径,min_samples是簇的最小样本数。通过调用dbscan_clustering函数就可以得到样本的DBSCAN聚类结果。
四、总结
本文介绍了K-Means聚类、层次聚类和DBSCAN聚类的Python实现方法。这些方法都是常用的聚类算法,在实际工作中具有广泛的应用。