数据聚类方法:KMeans与MeanShift

数据聚类是数据挖掘中的一项重要技术,它能够将数据集中的观测值根据相似性分组。本文将介绍两种常用的数据聚类方法:KMeans聚类和MeanShift聚类。这两种方法在数据分类、图像处理等领域有着广泛的应用。

KMeans聚类

KMeans聚类是一种将n个观测值划分为k个簇的算法。每个观测值被分配到最近的簇中心。在KMeans聚类中,用户可以指定生成的簇的数量,而在MeanShift聚类中,簇的数量是根据数据中发现的密度中心的数量自动检测的。

在Python中,可以使用sklearn库中的KMeans类来实现KMeans聚类。KMeans类的一些参数如下:

  • n_clusters: 生成的簇和中心点的数量,默认为8。
  • n_jobs: 并行运行的作业数量,-1表示使用所有处理器,默认为None。
  • n_init: 算法使用不同的中心点种子运行的次数,默认为10。
  • verbose: 如果设置为1,则显示估计信息。
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聚类

MeanShift聚类是一种模式寻找算法,它通过迭代地将数据点向数据点密度最高的模式移动。与KMeans不同,MeanShift聚类可以自动检测簇的数量。

在Python中,可以使用sklearn库中的MeanShift类来实现MeanShift聚类。MeanShift类的一些参数如下:

  • n_jobs: 并行运行的作业数量,-1表示使用所有处理器,默认为None。
  • bandwidth: 使用的带宽。如果未指定,则使用sklearn.estimate_bandwidth进行估计。
  • verbose: 如果设置为1,则显示估计信息。
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()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485