谱聚类算法是一种专门设计的聚类方法,它通过同时考虑数据矩阵的行(样本)和列(特征)来对数据进行分组。这种算法旨在识别样本之间的模式,同时也在样本的子集中寻找模式,从而允许在数据中检测到局部结构。这使得谱聚类算法特别适合于特征顺序固定的数据集,例如图像、时间序列或基因组数据。
在本例中,首先生成样本数据,然后对其进行洗牌,并将洗牌后的数据传递给谱聚类算法。接着,将根据算法找到的子集重新排列行和列,并进行可视化展示。
数据的生成是通过make_checkerboard
函数完成的。该函数生成一个300x300的矩阵,每个像素点的颜色代表一个来自均匀分布的值。添加了来自正态分布的噪声,噪声的标准差被设定为10。可以看到,数据分布在12个不同的簇单元中,并且相对容易区分。
接下来,对数据进行洗牌,目标是使用谱聚类算法重建数据。创建了洗牌后的行和列索引列表,然后重新定义了洗牌后的数据并进行了可视化展示。观察到,原始数据矩阵的结构已经丢失。
在拟合谱聚类模型时,将获得的簇与真实情况进行比较。注意,在创建模型时,指定了与创建数据集时相同的簇数量(4行3列),这将有助于获得良好的结果。
模型的拟合是通过SpectralBiclustering
类完成的,计算了两组子集之间的相似性。相似度得分介于0到1之间,1表示完美的匹配。得分越高,表示聚类的质量越好。
在结果的可视化部分,根据模型分配的行和列标签,按升序重新排列数据,并再次进行可视化展示。行标签的范围是0到3,而列标签的范围是0到2,总共表示每行有4个簇,每列有3个簇。
最后,想要展示模型分配的行和列标签之间的关系。因此,使用numpy.outer
创建了一个网格,它取排序后的行标签和列标签,并在每个标签上加1,以确保标签从1而不是0开始,以便于更好的可视化。
行和列标签向量的外积显示了一个棋盘结构的表示,其中不同的行和列标签组合由不同深浅的蓝色表示。