当前位置: 首页 > news >正文

【生物信息学】使用谱聚类(Spectral Clustering)算法进行聚类分析

目录

一、实验介绍

二、实验环境

1. 配置虚拟环境

2. 库版本介绍

3. IDE

三、实验内容

0. 导入必要的工具

1. 生成测试数据

2. 绘制初始数据分布图

3. 循环尝试不同的参数组合并计算聚类效果

4. 输出最佳参数组合

5. 绘制最佳聚类结果图

6. 代码整合


一、实验介绍

        本实验实现了使用谱聚类(Spectral Clustering)算法进行聚类分析

二、实验环境

    本系列实验使用了PyTorch深度学习框架,相关操作如下(基于深度学习系列文章的环境):

1. 配置虚拟环境

深度学习系列文章的环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn

新增加

conda install pandas
conda install seaborn
conda install networkx
conda install statsmodels
pip install pyHSICLasso

注:本人的实验环境按照上述顺序安装各种库,若想尝试一起安装(天知道会不会出问题)

2. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

新增

networkx2.6.33.1
pandas1.2.32.1.1
pyHSICLasso1.4.21.4.2
seaborn0.12.20.13.0
statsmodels0.13.50.14.0

3. IDE

        建议使用Pycharm(其中,pyHSICLasso库在VScode出错,尚未找到解决办法……)

win11 安装 Anaconda(2022.10)+pycharm(2022.3/2023.1.4)+配置虚拟环境_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/128693741https://blog.csdn.net/m0_63834988/article/details/128693741

三、实验内容

0. 导入必要的工具

import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from numpy import random
from sklearn import metrics

1. 生成测试数据

random.seed(1)
x, y = make_blobs(n_samples=400, centers=4, cluster_std=1.5)

        使用make_blobs方法生成了一个包含400个样本的数据集,共有4个聚类中心,每个聚类中心的标准偏差为1.5。

2. 绘制初始数据分布图

plt.scatter(x[:, 0], x[:, 1], c=y, label=len(np.unique(y)))
plt.title("Initial Data Distribution")
plt.show()

        将生成的数据集绘制成散点图,不同聚类的样本使用不同的颜色进行标记。

3. 循环尝试不同的参数组合并计算聚类效果

gamma_best = 0
k_cluster_best = 0
CH = 0
for index, gamma in enumerate((1, 1.5, 2, 2.5, 5)):for index, k in enumerate((2, 3, 4, 5, 6)):y_pred = SpectralClustering(n_clusters=k, gamma=gamma).fit_predict(x)print("Calinski-Harabasz Score with gamma=", gamma, "n_clusters=", k, "score:",metrics.calinski_harabasz_score(x, y_pred))curr_CH = metrics.calinski_harabasz_score(x, y_pred)if (curr_CH > CH):gamma_best = gammak_cluster_best = kCH = curr_CH
  • 使用嵌套的循环尝试不同的参数组合
    •  其中gamma代表谱聚类中的高斯核参数
    • k代表聚类的簇数。
  •  对于每一组参数,使用SpectralClustering进行聚类,并计算聚类结果的 Calinski-Harabasz 得分(metrics.calinski_harabasz_score)。得分越高表示聚类效果越好。代码会记录得分最高的参数组合。

4. 输出最佳参数组合

print("best gamma:", gamma_best, "best cluster", k_cluster_best)

        输出得分最高的参数组合(即最佳的 gamma 和 k)。

5. 绘制最佳聚类结 果图

f = plt.figure()
sc = SpectralClustering(n_clusters=k_cluster_best, gamma=gamma_best).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=sc)
plt.title("n_clusters: " + str(k_cluster_best))
plt.show()

  

6. 代码整合

import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from numpy import random
from sklearn import metricsSpectralClustering(affinity='rbf', coef0=1, degree=3, gamma=1.0,kernel_params=None, n_clusters=4, n_init=10,n_neighbors=10)# scikit中的make_blobs方法常被用来生成聚类算法的测试数据,make_blobs会根据用户指定的特征数量、中心点数量、范围等来生成几类数据,这些数据可用于测试聚类算法的效果
random.seed(1)
# n_samples:样本数 n_features:int,可选(默认值= 2)centers:要生成的中心数或固定的中心位置 cluster_std: 聚类的标准偏差
x, y = make_blobs(n_samples=400, centers=4, cluster_std=1.5)
plt.scatter(x[:, 0], x[:, 1], c=y, label=len(np.unique(y)))
plt.title("Initial Data Distribution")
plt.show()gamma_best = 0
k_cluster_best = 0
CH = 0
for index, gamma in enumerate((1, 1.5, 2, 2.5, 5)):for index, k in enumerate((2, 3, 4, 5, 6)):y_pred = SpectralClustering(n_clusters=k, gamma=gamma).fit_predict(x)# 卡林斯基哈拉巴斯得分(Calinski Harabasz score),本质是簇间距离与簇内距离的比值,整体计算过程与方差计算方式类似,也称为方差比标准,# 通过计算类内各点与类中心的距离平方和来度量类内的紧密度(类内距离),各个类中心点与数据集中心点距离平方和来度量数据集的分离度(类间距离),# 较高的 Calinski Harabasz 分数意味着更好的聚类print("Calinski-Harabasz Score with gamma=", gamma, "n_clusters=", k, "score:",metrics.calinski_harabasz_score(x, y_pred))curr_CH = metrics.calinski_harabasz_score(x, y_pred)if (curr_CH > CH):gamma_best = gammak_cluster_best = kCH = curr_CHprint("best gamma:", gamma_best, "best cluster", k_cluster_best)f = plt.figure()
sc = SpectralClustering(n_clusters=k_cluster_best, gamma=gamma_best).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=sc)
plt.title("n_clusters: " + str(k_cluster_best))
plt.show()
请详细介绍上述代码

http://www.lryc.cn/news/180751.html

相关文章:

  • CSS基础语法第二天
  • ThreeJS - 封装一个GLB模型展示组件(TypeScript)
  • HashMap面试题
  • Java编程技巧:swagger2、knif4j集成SpringBoot或者SpringCloud项目
  • 第三章:最新版零基础学习 PYTHON 教程(第九节 - Python 运算符—Python 中的除法运算符)
  • 【python】导出mysql数据,输出excel!
  • 【Java 进阶篇】JDBC ResultSet 遍历结果集详解
  • 华为数通方向HCIP-DataCom H12-831题库(单选题:161-180)
  • 【VsCode】SSH远程连接Linux服务器开发,搭配cpolar内网穿透实现公网访问
  • java并发编程 守护线程 用户线程 main
  • wxWidgets(1):在Ubuntu 环境中搭建wxWidgets 库环境,安装库和CodeBlocks的IDE,可以运行demo界面了,继续学习中
  • [VIM]VIM初步学习-3
  • RocketMQ Dashboard说解
  • 【RabbitMQ实战】05 RabbitMQ后台管理
  • PHP8中final关键字的应用-PHP8知识详解
  • 基于Java的校园失物招领平台设计与实现(源码+lw+部署文档+讲解等)
  • 〔024〕Stable Diffusion 之 模型训练 篇
  • 【MySQL入门到精通-黑马程序员】MySQL基础篇-DML
  • 【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDxLDxR)?
  • 华为云云耀云服务器L实例评测 | 实例场景体验之搭建个人博客:通过华为云云耀云服务器构建个人博客
  • 问题记录 springboot 事务方法中使用this调用其它方法
  • 【Spring Cloud】Ribbon 实现负载均衡的原理,策略以及饥饿加载
  • Linux下基本指令(上)
  • C++ 并发编程实战 第十一章 多线程应用的测试和除错
  • Redis实现API访问频率限制
  • BGP服务器租用价格表_腾讯云PK阿里云
  • 时序分解 | Matlab实现SSA-VMD麻雀算法优化变分模态分解时间序列信号分解
  • 【CSS如何实现双飞翼布局】
  • 服务注册发现机制
  • 【postgresql 基础入门】多表联合查询 join与union 并,交,差等集合操作,两者的区别之处