谱共聚类算法

Beginner

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

简介

本实验展示了如何使用谱共聚类(Spectral Co-Clustering)算法对数据集进行双聚类。该数据集是使用 make_biclusters 函数生成的,该函数创建一个小值矩阵,并植入大值的双聚类。然后对行和列进行洗牌,并将其传递给谱共聚类算法。重新排列洗牌后的矩阵以使双聚类相邻,展示了该算法找到双聚类的准确程度。

虚拟机使用提示

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

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

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

导入必要的库

我们需要导入必要的库,如 numpy、matplotlib、scikit-learn。

import numpy as np
from matplotlib import pyplot as plt

from sklearn.datasets import make_biclusters
from sklearn.cluster import SpectralCoclustering
from sklearn.metrics import consensus_score

生成数据集

我们使用 make_biclusters 函数生成一个形状为 (300, 300) 的数据集,其中包含 5 个双聚类和 5 个噪声。

data, rows, columns = make_biclusters(shape=(300, 300), n_clusters=5, noise=5, shuffle=False, random_state=0)

可视化原始数据集

我们使用 matshow() 函数来可视化原始数据集。

plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Original dataset")

打乱数据集

我们使用 numpy 中的 permutation() 函数来打乱数据集。

rng = np.random.RandomState(0)
row_idx = rng.permutation(data.shape[0])
col_idx = rng.permutation(data.shape[1])
data = data[row_idx][:, col_idx]

可视化打乱后的数据集

我们使用 matshow() 函数来可视化打乱后的数据集。

plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Shuffled dataset")

应用谱共聚类算法

我们将谱共聚类算法应用于具有 5 个聚类的打乱后的数据集。

model = SpectralCoclustering(n_clusters=5, random_state=0)
model.fit(data)

计算一致性分数

我们使用 consensus_score() 函数来计算双聚类的一致性分数。

score = consensus_score(model.biclusters_, (rows[:, row_idx], columns[:, col_idx]))
print("consensus score: {:.3f}".format(score))

重新排列打乱后的数据集

我们使用 numpy 中的 argsort() 函数重新排列打乱后的数据集,以使双聚类相邻。

fit_data = data[np.argsort(model.row_labels_)]
fit_data = fit_data[:, np.argsort(model.column_labels_)]

可视化双聚类

我们使用 matshow() 函数来可视化双聚类。

plt.matshow(fit_data, cmap=plt.cm.Blues)
plt.title("After biclustering; rearranged to show biclusters")

总结

在本实验中,我们学习了如何使用谱共聚类算法生成一个数据集并对其进行双聚类。原始数据集是使用 make_biclusters 函数生成的,该函数创建了一个由小值组成的矩阵,并植入了大值的双聚类。我们对数据集的行和列进行了打乱,然后将其传递给谱共聚类算法。我们计算了双聚类的一致性分数,并重新排列了打乱后的数据集,以使双聚类相邻。最后,我们对双聚类进行了可视化,以展示该算法找到它们的准确程度。