使用 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 编写无监督聚类算法,根据基因表达量对患者进行分组。代码简洁易懂,并附带详细的注释。该算法可以应用于多种场景,例如对患者进行分类、识别不同类型的疾病等。

Python 无监督聚类算法:基于基因表达量对患者进行分组

原文地址: https://www.cveoy.top/t/topic/nfBu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录