使用 Scikit-Learn 进行归纳聚类

Machine LearningMachine LearningBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将学习归纳聚类,这是一种通过从聚类标签中归纳出分类器来扩展聚类的方法。我们将使用 Python 中的 scikit-learn 库来实现一个扩展聚类的元估计器。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49165{{"使用 Scikit-Learn 进行归纳聚类"}} end

生成训练数据

在这一步中,我们将通过聚类生成一些训练数据。我们将使用 scikit-learn 中的 make_blobs 函数来生成 5000 个样本,这些样本分为 3 个聚类,每个聚类具有不同的标准差和中心。

X, y = make_blobs(
    n_samples=5000,
    cluster_std=[1.0, 1.0, 0.5],
    centers=[(-5, -5), (0, 0), (5, 5)],
    random_state=42,
)

训练聚类算法

在这一步中,我们将在生成的训练数据上训练一个聚类算法,并获取聚类标签。我们将使用 scikit-learn 中的 AgglomerativeClustering 来训练具有 3 个聚类的算法。

clusterer = AgglomerativeClustering(n_clusters=3)
cluster_labels = clusterer.fit_predict(X)

生成新样本

在这一步中,我们将生成新样本,并将它们与原始数据集一起绘制出来。我们将再次使用 make_blobs 函数来生成 10 个新样本。

X_new, y_new = make_blobs(
    n_samples=10, centers=[(-7, -1), (-2, 4), (3, 6)], random_state=42
)

声明归纳学习模型

在这一步中,我们将声明用于预测未知实例的聚类成员身份的归纳学习模型。我们将使用 scikit-learn 中的 RandomForestClassifier 作为分类器。

classifier = RandomForestClassifier(random_state=42)
inductive_learner = InductiveClusterer(clusterer, classifier).fit(X)

预测未知实例的聚类成员身份

在这一步中,我们将使用归纳学习模型来预测生成的新样本的聚类成员身份。我们将使用 InductiveClusterer 类的 predict 函数,并绘制新样本及其可能所属的聚类。

probable_clusters = inductive_learner.predict(X_new)

plt.subplot(133)
plot_scatter(X, cluster_labels)
plot_scatter(X_new, probable_clusters)
plt.title("Classify unknown instances")

总结

在本实验中,我们学习了归纳聚类,这是一种通过从聚类标签中归纳出分类器来扩展聚类的方法。我们使用 Python 中的 scikit-learn 库实现了一个扩展聚类的元估计器,并在生成的训练数据上训练了一个聚类算法。我们还生成了新样本,并使用归纳学习模型来预测新样本的聚类成员身份。