这个例子演示如何产生一个数据集,并且用谱系共聚类法(Spectral Co-Clustering algorithm)对它进行双向聚类。所谓“双向聚类”,是指对变量和实例同时聚类。
这里,使用函数make_biclusters产生双向聚类的数据集。该函数产生的矩阵元素较小,但嵌入的双向类bicluster具有较大的值。然后随机重排矩阵的行和列,作为参数传递给算法。再重新排列这个随机重排的矩阵,使得biclusters邻接。这样一来就可以看出算法的准确程度了。
实例详解
首先,导入必需的库。
print(__doc__)
# Author: Kemal Eren <kemal@kemaleren.com>
# License: BSD 3 clause
import numpy as np
from matplotlib import pyplot as plt
from sklearn.datasets import make_biclusters
from sklearn.datasets import samples_generator as sg
from sklearn.cluster.bicluster import SpectralCoclustering
from sklearn.metrics import consensus_score
调用函数make_biclusters, 产生一个300行,300列的数据数组,该数组有一个用于双向聚类的固定对角块结构。预置5个biclusters, 5个标准差的高斯误差。作图显示产生的数据集。
data, rows, columns = make_biclusters(
shape=(300, 300), n_clusters=5, noise=5,
shuffle=False, random_state=0)
plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Original dataset")
plt.show()
随机重排数据集。
data, row_idx, col_idx = sg._shuffle(data, random_state=0)
plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Shuffled dataset")
plt.show()
调用bicluster库的谱系共聚类函数SpectralCoclustering, 设置5个biclusters. 拟合模拟数据集,并计算聚类一致性分数,评价聚类效果。
model = SpectralCoclustering(n_clusters=5, random_state=0)
model.fit(data)
score = consensus_score(model.biclusters_,
(rows[:, row_idx], columns[:, col_idx]))
print("consensus score: {:.3f}".format(score))
consensus score: 1.000
可视化重新排列共聚类后的数据集。
fit_data = data[np.argsort(model.row_labels_)]
fit_data = fit_data[:, np.argsort(model.column_labels_)]
plt.matshow(fit_data, cmap=plt.cm.Blues)
plt.title("After biclustering; rearranged to show biclusters")
plt.show()
---------------------
【转载】作者:Goodsta
原文:https://blog.csdn.net/wong2016/article/details/83615321
|
|