简介
在本实验中,我们将学习归纳聚类,这是一种通过从聚类标签中归纳出分类器来扩展聚类的方法。我们将使用 Python 中的 scikit-learn 库来实现一个扩展聚类的元估计器。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
生成训练数据
在这一步中,我们将通过聚类生成一些训练数据。我们将使用 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 库实现了一个扩展聚类的元估计器,并在生成的训练数据上训练了一个聚类算法。我们还生成了新样本,并使用归纳学习模型来预测新样本的聚类成员身份。