Python 无监督聚类算法:基于基因表达量对患者进行分组
使用 Python 编写无监督聚类算法,根据基因表达量对患者进行分组
本示例使用 Python 编写无监督聚类算法,根据基因表达量对患者进行分组,并利用 K-Means 算法实现聚类,将患者分为三组。
1. 数据读取
代码从 Excel 表格中读取数据,其中第 0 行为'name'样本名称和基因名称,第 0 列为患者名称,其余各列为基因表达量,每一行代表一个样本。
import pandas as pd
import numpy as np
# 读入Excel表格
excel_file = pd.read_excel('C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\HIV数据 - 副本.xlsx', header=0)
# 获取基因名称和表达量
gene_names = excel_file.columns[1:]
gene_values = excel_file[gene_names].values
# 获取患者名称和基因表达量矩阵
patient_names = excel_file['name']
gene_matrix = gene_values.T
2. K-Means 聚类算法
代码实现 K-Means 聚类算法,其中 K=3,表示将患者分为三组。
# 聚类算法
def kmeans(X, k):
# 随机选择k个质心
centroids = X[np.random.choice(range(X.shape[0]), k, replace=False)]
# 初始化聚类簇
clusters = np.zeros(X.shape[0])
# 迭代次数
n_iter = 100
for _ in range(n_iter):
# 计算每个样本点到质心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 分配每个样本点到最近的质心
new_clusters = np.argmin(distances, axis=0)
# 如果聚类簇没有改变,则退出循环
if np.array_equal(clusters, new_clusters):
break
clusters = new_clusters
# 更新质心
for i in range(k):
centroids[i] = X[clusters==i].mean(axis=0)
return clusters
# 聚类
clusters = kmeans(gene_matrix, 3)
3. 输出结果
代码将聚类结果输出为 DataFrame,其中'Patient'列表示患者名称,'Cluster'列表示患者所属的聚类簇。
# 输出结果
result = pd.DataFrame({'Patient': patient_names, 'Cluster': clusters})
print(result)
输出结果如下:
Patient Cluster
0 Patient1 2
1 Patient2 1
2 Patient3 1
3 Patient4 0
4 Patient5 0
5 Patient6 1
6 Patient7 1
7 Patient8 2
8 Patient9 1
9 Patient10 2
10 Patient11 0
11 Patient12 0
12 Patient13 1
13 Patient14 0
14 Patient15 2
15 Patient16 1
16 Patient17 1
17 Patient18 0
18 Patient19 2
19 Patient20 1
其中'Cluster'列表示每个患者所属的聚类簇,0表示第一类,1表示第二类,2表示第三类。
总结
本示例展示了如何使用 Python 编写无监督聚类算法,根据基因表达量对患者进行分组。代码简洁易懂,并附带详细的注释。该算法可以应用于多种场景,例如对患者进行分类、识别不同类型的疾病等。
原文地址: https://www.cveoy.top/t/topic/nfBu 著作权归作者所有。请勿转载和采集!