实验环境
- 操作系统:Windows
- 开发工具:Python 3.10.11
- 数据集:Iris(sklearn自带)
安装相关库
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.manifold import TSNE
import umap.umap_ as umap
import seaborn as sns
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.datasets import load_iris
- matplotlib.pyplot:matplotlib是一个用于创建静态、动态和交互式图标的库,pyplot是其中提供MATLAB风格接口的子模块。
- sklearn:导入 SpectralClustering 类,这是一种谱聚类方法;导入了 pairwise_distances 函数,这个函数用于计算一组数据点之间的成对距离;从 sklearn.manifold 模块中导入了 TSNE 类。TSNE 是一种用于数据降维和可视化的方法;从 sklearn.datasets 模块中导入了 load_iris 函数。这个函数用于加载 iris 数据集。
- umap:导入umap的imap_模块,这是一种用于数据降维和可视化的方法。
- scipy.cluster.hierarchy:从 scipy.cluster.hierarchy 模块中导入了 dendrogram 和 linkage 函数。dendrogram 函数用于绘制树状图,linkage 函数用于进行层次聚类。
寻找最佳聚类数目
聚类数目是会直接影响到聚类结果的质量和解释性的重要参数,因此本实验中使用Calinski-Harabasz指数评估聚类的质量,从而选择最佳的聚类数目。编写程序计算聚类数目从2-10的聚类质量并输出。
代码运行结果如下:
观察即可看出,聚类数目为3时聚类效果最好。
使用谱聚类算法
X = iris.data
这行代码将鸢尾花数据集的特征数据赋值给变量 X
。在鸢尾花数据集中,每个样本有四个特征,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。
y = iris.target
这行代码将鸢尾花数据集的标签赋值给变量 y
。在鸢尾花数据集中,标签是一个整数,表示每个样本所属的类别,有三种可能的值,分别对应鸢尾花的三个品种:山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。
聚类结果可视化
绘制相似性矩阵
绘制T-SNE降维图
绘制UMAP降维图
绘制树状图
绘制一致性热力图
代码点击此处免费下载使用