数据聚类是数据挖掘中的一项重要技术,它能够将数据集中的观测值根据相似性分组。本文将介绍两种常用的数据聚类方法:KMeans聚类和MeanShift聚类。这两种方法在数据分类、图像处理等领域有着广泛的应用。
KMeans聚类是一种将n个观测值划分为k个簇的算法。每个观测值被分配到最近的簇中心。在KMeans聚类中,用户可以指定生成的簇的数量,而在MeanShift聚类中,簇的数量是根据数据中发现的密度中心的数量自动检测的。
在Python中,可以使用sklearn库中的KMeans类来实现KMeans聚类。KMeans类的一些参数如下:
from sklearn import datasets
iris = datasets.load_iris()
sepal_data = iris.data[:, :2]
petal_data = iris.data[:, 2:4]
from sklearn.cluster import KMeans
km1 = KMeans(n_clusters=3, n_jobs=-1)
km1.fit(sepal_data)
km2 = KMeans(n_clusters=3, n_jobs=-1)
km2.fit(petal_data)
centroids_sepals = km1.cluster_centers_
labels_sepals = km1.labels_
centroids_petals = km2.cluster_centers_
labels_petals = km2.labels_
MeanShift聚类是一种模式寻找算法,它通过迭代地将数据点向数据点密度最高的模式移动。与KMeans不同,MeanShift聚类可以自动检测簇的数量。
在Python中,可以使用sklearn库中的MeanShift类来实现MeanShift聚类。MeanShift类的一些参数如下:
from sklearn.cluster import MeanShift
ms1 = MeanShift(n_jobs=-1).fit(sepal_data)
centroids_sepals = ms1.cluster_centers_
labels_sepals = ms1.labels_
ms2 = MeanShift(n_jobs=-1).fit(petal_data)
centroids_petals = ms2.cluster_centers_
labels_petals = ms2.labels_
为了可视化聚类结果,可以使用matplotlib库创建散点图。以下是创建散点图的代码示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222, projection='3d')
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224, projection='3d')
# 绘制sepal数据的散点图
ax1.scatter(sepal_data[:, 0], sepal_data[:, 1], c=labels_sepals, s=50)
ax1.scatter(centroids_sepals[:, 0], centroids_sepals[:, 1], c='red', s=100)
ax2.scatter(sepal_data[:, 0], sepal_data[:, 1], c=labels_sepals, s=50)
ax2.scatter(centroids_sepals[:, 0], centroids_sepals[:, 1], c='red', s=100)
# 绘制petal数据的散点图
ax3.scatter(petal_data[:, 0], petal_data[:, 1], c=labels_petals, s=50)
ax3.scatter(centroids_petals[:, 0], centroids_petals[:, 1], c='red', s=100)
ax4.scatter(petal_data[:, 0], petal_data[:, 1], c=labels_petals, s=50)
ax4.scatter(centroids_petals[:, 0], centroids_petals[:, 1], c='red', s=100)
plt.show()