机器学习中的聚类

machine learningpythondata science

在机器学习中,聚类是一种基本方法,对于从数据集中提取知识和发现隐藏模式至关重要。聚类技术让我们能够搜索大量数据,并通过将相关数据点放在一起来找到重要的结构。此过程有助于数据探索、分割和理解数据片段之间的复杂联系。我们可以从未标记的数据中提取重要的见解,方法是自主定位聚类,而无需预先确定标签。客户细分、异常检测、图片和文档组织以及基因组学研究只是现实世界中聚类至关重要的几个应用。我们将在这篇文章中仔细研究机器学习中的聚类。

了解聚类

根据相关数据点的内在特征组装相关数据点的过程称为聚类,它是一种基本的机器学习方法。不使用标签或类别,聚类旨在揭示数据集中的潜在模式、结构和关系。聚类属于无监督学习的范畴,它使用未标记的数据而不是标记的数据来实现探索和知识发现的目标。

聚类上下文中的数据点是指数据集内的特定实例或观察结果。准确反映这些数据片段特征的特征或属性集合作为其表示。作为聚类中的一个关键思想,数据点之间的相似性表示它们基于其特征值的相似性或相关性。在考虑属性间变异的大小和方向的同时,差异性量化了数据点之间的差异程度。

聚类的类型

K 均值聚类

最著名和最直接的聚类方法之一是 K 均值聚类。数据将被分成 K 个唯一的聚类,其中 K 是预定值。该方法会更新质心,直到达到收敛,然后迭代地将数据点分配给最近的质心(代表点)。对于大数据集,K-means 聚类是有效的,尽管它对质心的初始选择很敏感。

以下是代码示例:

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 创建 K-means 聚类的样本数据集
X = [[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]]

# 应用 K=2 的 K-means 聚类
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)

# 可视化聚类结果
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

for i in range(len(X)):
   plt.scatter(X[i][0], X[i][1], c='blue' if labels[i] == 0 else 'red')

plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=150, linewidths=5, c='black')
plt.show()

输出

代码中,变量 X 表示的样本数据集接受 K 均值聚类技术。聚类使用 scikit-learn 工具包中的 KMeans 类进行。此示例数据集中有 6 个具有二维坐标的数据点。我们通过设置 n_clusters=2 来告诉算法在数据中寻找两个聚类。在 K 均值模型拟合之后,代码绘制数据点和质心,每个数据点根据其分配的聚类进行着色,以显示聚类结果。

层次聚类

通过逐步合并或拆分聚类,层次聚类将它们排列成层次结构。它可以分为两个主要类别:聚集聚类和分裂聚类。聚集聚类首先将每个数据点视为一个单独的聚类,然后逐渐合并最相似的聚类,直到只剩下一个聚类。

另一方面,从整个数据集作为单个簇开始,并在分裂聚类中递归地分成更小的簇,会导致每个数据点生成不同的簇。

以下是代码示例:

from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
import numpy as np

# 创建用于层次聚类的样本数据集
np.random.seed(0)
X = np.random.randn(10, 2)

# 应用层次聚类
hierarchical = AgglomerativeClustering(n_clusters=2)
hierarchical.fit(X)

# 可视化聚类结果
labels = hierarchical.labels_

for i in range(len(X)):
   plt.scatter(X[i, 0], X[i, 1], c='blue' if labels[i] == 0 else 'red')

plt.show()

输出

使用 Scikit-Learn AgglomerativeClustering 类,代码说明了层次聚类。它创建一个样本数据集,由变量 X 表示,具有 10 个数据点和二维坐标。将所需的聚类数 n_clusters=2 应用于层次聚类方法。然后,代码绘制数据点,根据其分配的聚类对每个数据点进行着色,以查看聚类结果。

基于密度的聚类 (DBSCAN)

例如,DBSCAN(基于密度的带噪声应用空间聚类)根据特征空间中数据点的密度查找聚类。在将稀疏区域中的数据点分类为噪声或异常值的同时,它将相当接近且密集的数据点聚集在一起。当处理不均匀形成的簇和可变的簇密度时,基于密度的聚类非常成功。

以下是代码示例:

from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
import numpy as np

# 创建基于密度的聚类的样本数据集
np.random.seed(0)
X = np.concatenate((np.random.randn(10, 2) + 2, np.random.randn(10, 2) - 2))

# 应用 DBSCAN 聚类
dbscan = DBSCAN(eps=0.6, min_samples=2)
dbscan.fit(X)

# 可视化聚类结果
labels = dbscan.labels_

for i in range(len(X)):
   plt.scatter(X[i, 0], X[i, 1], c='blue' if labels[i] == 0 else 'red')

plt.show()

输出

利用 scikit-learn 中的 DBSCAN 类,代码说明了基于密度的聚类。它生成一个由 20 个二维数据点组成的样本数据集,由变量 X 表示。使用 DBSCAN 方法时,使用参数 eps=0.6(两个样本之间的最大距离,使它们被视为属于同一邻域)和 min_samples=2(邻域中最小样本数,使一个点被视为核心点)。然后,代码绘制数据点,根据其所属的聚类对每个数据点进行着色,以查看聚类结果。

结论

聚类对于从数据集中获取有见地的信息和发现隐藏的模式至关重要。聚类技术简化了跨学科的不同应用,并通过自动对相关数据片段进行分组来实现数据驱动的决策。通过理解各种聚类算法、使用合适的评估指标并将它们应用于实际情况,我们能够利用机器学习中聚类的潜力,为知识发现和创造力开辟新的可能性。


相关文章