文章目录
实验二 聚类技术—细胞聚类
随着单细胞数据的出现,一个重要的问题是如何对不同的细胞进行聚类,可以使用不同的聚类算法对细胞聚类。
1、单细胞数据如表1 所示;
2、由于单细胞数据的高维度,使用降维方法进行降维;
3、 将聚类结果与金标结果进行对比,计算ARI/NMI指标;
4、可视化聚类结果。
单细胞数据 | 细胞数 | 基因数 | 类型数 |
---|---|---|---|
Klein | 2717 | 24175 | 4 |
Lake | 3042 | 25123 | 16 |
Romanov | 24341 | 24175 | 7 |
Xin | 1600 | 39851 | 8 |
Zeisel | 3005 | 19972 | 9 |
注:
.rds后缀为数据文件,里面行表示基因,列表示细胞。
.rds_leave为细胞类型(金标结果)。
一、分析及设计
先使用PCA对数据进行预处理,再用K-means聚类算法对数据进行聚类。
二、详细实现
1. 数据的读取及预处理
本实验的第一个难点可能在于.rds文件的读取,但其实,直接使用pd.read就可读入。
#读入数据
#data = pd.read_csv('klein.rds',sep = '\t')
#data = pd.read_csv('lake.rds',sep = '\t')
#data = pd.read_csv('romanov.rds',sep = '\t')
#data = pd.read_csv('xin.rds',sep = '\t')
data = pd.read_csv('zeisel.rds',sep = '\t')
data_T = data.T
2. 对数据进行降维
from sklearn.decomposition import PCA
pca = PCA(0.95)
pca.fit(data.T)
X = pca.transform(data.T)
3. 使用K-means聚类算法进行聚类
from sklearn.cluster import KMeans
km = KMeans(n_clusters=9,random_state=1)
km.fit(X)
y_predict = km.predict(X) # 预测
4. 可视化聚类结果
plt.scatter(X[:,0],X[:,1],c=y_predict) # 预测为同一簇的样本同颜色
plt.show()
5. 将聚类结果与金标结果进行对比
from sklearn.metrics.cluster import normalized_mutual_info_score,adjusted_mutual_info_score
NMI = lambda x, y: normalized_mutual_info_score(x, y, average_method='arithmetic')
AMI = lambda x, y: adjusted_mutual_info_score(x, y, average_method='arithmetic')
#label = pd.read_csv('klein.rds_label',sep = '\t')
#label = pd.read_csv('lake.rds_label',sep = '\t')
#label = pd.read_csv('romanov.rds_label',sep = '\t')
#label = pd.read_csv('xin.rds_label',sep = '\t')
label = pd.read_csv('zeisel.rds_label',sep = '\t')
label_1 = np.asarray(label)
label_true = label_1[:,0]
NMI(label_true,y_predict)
AMI(label_true,y_predict)
三、实验结果
1. Klein数据
(1)降维后的数据量
(2)聚类结果
(3)聚类结果与金标结果对比(NMI&ARI指标)
2. Lake数据
(1)降维后的数据量
(2)聚类结果
(3)聚类结果与金标结果对比(NMI&ARI指标)
3. Romanov数据
(1)降维后的数据量
(2)聚类结果
(3)聚类结果与金标结果对比(NMI&ARI指标)
4. Xin数据
(1)降维后的数据量
(2)聚类结果
(3)聚类结果与金标结果对比(NMI&ARI指标)
5. Zeisel数据
(1)降维后的数据量
(2)聚类结果
(3)聚类结果与金标结果对比(NMI&ARI指标)
总结
虽然完成了这次实验,但是从NMI和ARI指标值可以看出,K均值聚类算法在这次实验的效果并不是很理想,应当继续探索其他更适合这个数据的聚类算法。