机器学习中的聚类
在机器学习中,聚类是一种基本方法,对于从数据集中提取知识和发现隐藏模式非常重要。聚类技术能够通过把相关的数据点放在一起,搜索大量数据并找到重要的结构。这个过程有助于数据探索、分割和理解数据之间复杂联系。通过自动定位聚类,我们可以从未标记的数据中提取重要的见解,而无需预先确定的标签。客户细分、异常检测、图像和文档组织以及基因组研究等都是聚类至关重要的真实世界应用。在本文中,我们将详细讨论机器学习中的聚类。
理解聚类
根据内在特征将相关数据点组合在一起的过程称为聚类,它是一种基本的机器学习方法。聚类旨在发现数据集中的潜在模式、结构和关系,不使用标签或类别。聚类属于无监督学习的范畴,使用未标记的数据而不是标记数据来实现其探索和知识发现的目标。
聚类中的数据点是指数据集中的特定实例或观测。准确反映数据点特征的属性集合作为它们的表示方式。作为聚类的一个关键思想,数据点之间的相似性表示它们在特征值上有多相似或相关。在考虑属性间变化的大小和方向的同时,差异度量了数据点之间的差异程度。
聚类的类型
K均值聚类
最著名和简单的聚类方法之一是K均值聚类。数据将被分为K个唯一的聚类,其中K是预先确定的值。该方法通过迭代将数据点分配给最近的质心(代表点),直到达到收敛为止来更新质心。对于大型数据集,K均值聚类是有效的,尽管它对初始质心选择很敏感。
以下是代码示例:
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# Creating a sample dataset for K-means clustering
X = [[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]]
# Applying K-means clustering with K=2
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)
# Visualizing the clustering result
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类来执行的。本例的数据集中有2维坐标的6个数据点。通过设置n_clusters=2,我们告诉算法在数据中寻找两个聚类。在完成K−均值模型的拟合后,代码绘制数据点和质心,并根据所分配的聚类对每个数据点进行着色,以展示聚类结果。
层次聚类
通过逐步合并或分割聚类来将聚类按层次排列的方法称为层次聚类。它可以分为凝聚聚类和分割聚类两个主要类别。在凝聚聚类中,首先将每个数据点视为单独的聚类,然后逐渐合并最相似的聚类,直到只剩下一个聚类。
另一方面,在分割聚类中,从整个数据集作为单个聚类开始,并递归地将其分割成更小的聚类,从而为每个数据点生成不同的聚类。
以下是代码示例:
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
import numpy as np
# Creating a sample dataset for hierarchical clustering
np.random.seed(0)
X = np.random.randn(10, 2)
# Applying hierarchical clustering
hierarchical = AgglomerativeClustering(n_clusters=2)
hierarchical.fit(X)
# Visualizing the clustering result
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类,代码展示了层次聚类的示例。它创建了一个包含10个数据点和二维坐标的样本数据集,由变量X表示。将所需的簇数n_clusters=2应用于层次聚类方法。然后,代码绘制数据点,根据其分配的簇进行着色,以查看聚类结果。
基于密度的聚类(DBSCAN)
例如,DBSCAN(基于密度的应用空间聚类)基于特征空间中的数据点密度来找到聚类。在将稀疏区域的数据点分类为噪声或异常值的同时,它将相对接近且密集的数据点聚在一起。在处理非均匀形状的聚类和可变聚类密度时,基于密度的聚类非常成功。
以下是代码示例:
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
import numpy as np
# Creating a sample dataset for density-based clustering
np.random.seed(0)
X = np.concatenate((np.random.randn(10, 2) + 2, np.random.randn(10, 2) - 2))
# Applying DBSCAN clustering
dbscan = DBSCAN(eps=0.6, min_samples=2)
dbscan.fit(X)
# Visualizing the clustering result
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(一个点被认为是核心点的邻域中的最小样本数)。然后,代码绘制数据点,根据其所属的簇对其进行着色,以查看聚类结果。
结论
聚类对于从数据集中获取富有洞察力的信息和发现隐藏模式至关重要。聚类技术简化了跨学科的不同应用,并通过自动将相关数据分组,实现了基于数据的决策。通过理解各种聚类算法,使用适当的评估指标,并将它们应用于实际情况中,我们可以充分利用聚类在机器学习中的潜力,为知识发现和创造力开辟新的可能性。