Logo
Section 1 / 7

使用 PyCaret 进行聚类

学习如何导入必要的库,并使用 PyCaret 生成用于聚类的数据集。

导入

使用 PyCaret 进行聚类

学习如何导入必要的库,并使用 PyCaret 生成用于聚类的数据集。

无监督机器学习中的一项基本任务是聚类。该任务旨在根据数据集中样本的共同特征,将其划分到不同的簇中。聚类在市场调研、社交网络分析、生物信息学、医学等多个领域具有广泛的实际应用。K均值(k-means)聚类是一种简单且广泛应用的方法,其定义如下公式所示:

min⁡C1,…,CK{∑k=1KW(Ck)}\min_{C_{1}, \ldots, C_{K}}\left\{\sum_{k=1}^{K} W(C_{k})\right\}

其中,KK 表示所有簇的数量,CkC_{k} 代表每一个簇。我们的目标是最小化 WW,即簇内差异的度量:

W(Ck)=1∣Ck∣∑i,i′∈Ck∑j=1p(xij−xi′j)2W\left(C_{k}\right)=\frac{1}{\left|C_{k}\right|} \sum_{i, i^{\prime} \in C_{k}} \sum_{j=1}^{p}\left(x_{i j}-x_{i^{\prime} j}\right)^{2}

定义簇内差异的方式有多种,但最常见的是平方欧氏距离,如上式所示。由此得到 k-means 聚类的最终形式为:

min⁡C1,…,CK{∑k=1K1∣Ck∣∑i,i′∈Ck∑j=1p(xij−xi′j)2}\min_{C_{1}, \ldots, C_{K}} \left\{ \sum_{k=1}^{K} \frac{1}{\left|C_{k}\right|} \sum_{i, i^{\prime} \in C_{k}} \sum_{j=1}^{p}\left(x_{i j}-x_{i^{\prime} j}\right)^{2} \right\}

...
Clustering

PyCaret 中的聚类方法

K-Means 是一种广泛使用的聚类方法,但还有许多其他方法,例如:亲和传播(affinity propagation)、谱聚类(spectral clustering)、凝聚聚类(agglomerative clustering)、均值漂移聚类(mean shift clustering)以及基于密度的空间聚类(DBSCAN)。在本章中,我们将学习如何使用 PyCaret 的聚类模块轻松训练模型并评估其性能。

导入必要的库

与前面章节类似,我们首先导入标准的 Python 库,包括 NumPy、pandas、Matplotlib 和 Seaborn。同时导入 PyCaret 的聚类函数,以及 scikit-learn 中用于生成数据集的 make_blobs() 函数。最后,我们将 Matplotlib 图像的 DPI 设置为 300,以便在本课程中获得高分辨率图像。此设置并非必需,可根据需要删除最后一行代码。

注意:将 Matplotlib 图像 DPI 设置为 300 并非必要。

1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4import matplotlib as mpl 5import seaborn as sns 6from pycaret.clustering import * 7from sklearn.datasets import make_blobs 8mpl.rcParams['figure.dpi'] = 300

生成合成数据集

本例不加载真实数据集,而是使用 scikit-learn 提供的 make_blobs() 函数生成一个合成数据集。该函数可生成适用于聚类模型的数据,并提供多个可调节参数以满足不同需求。

1# 生成数据集 2 3cols = ['column1', 'column2', 'column3', 4 'column4', 'column5'] 5arr = make_blobs(n_samples = 1000, n_features = 5, random_state = 20, 6 centers = 3, cluster_std = 1) 7data = pd.DataFrame(data = arr[0], columns = cols) 8data.head()

在此示例中,我们创建了一个包含 1000 个样本、5 个特征和 3 个明确簇的数据集。使用合成数据集测试聚类模型具有诸多优势,最主要的好处是我们已知真实的簇数量,因此可以更方便地评估模型性能。而现实世界中的数据通常更为复杂,因为它们的簇结构往往不够清晰。然而,通过简单的合成数据集,我们可以快速熟悉相关工具和工作流程。

自然语言处理

探索性数据分析