层次聚类及谱系图 介绍及python实现

层次聚类及谱系图

  • 1.谱系图介绍
  • 2.代码实现
  • 3.参数介绍

1.谱系图介绍

如何看懂谱系图

2.代码实现

数据:test.xlsx层次聚类及谱系图 介绍及python实现_第1张图片

import pandas as pd
import seaborn as sns  #用于画热图的工具包
from scipy.cluster import hierarchy  #用于进行层次聚类,画层次聚类图的工具包
from scipy import cluster
import matplotlib.pyplot as plt
from sklearn import decomposition as skldec #用于主成分分析降维的包

df = pd.read_excel(".../test.xlsx",index_col=0)
#df = df.T    #python默认每行是一个样本,如果数据每列是一个样本的话,转置一下即可

#开始画层次聚类树状图
Z = hierarchy.linkage(df, method ='ward',metric='euclidean')
hierarchy.dendrogram(Z,labels = df.index)

#在某个高度进行剪切
label = cluster.hierarchy.cut_tree(Z,height=0.8)
label = label.reshape(label.size,)

#根据两个最大的主成分进行绘图
pca = skldec.PCA(n_components = 0.95)    #选择方差95%的占比
pca.fit(df)   #主成分分析时每一行是一个输入数据
result = pca.transform(df)  #计算结果
plt.figure()  #新建一张图进行绘制
plt.scatter(result[:, 0], result[:, 1], c=label, edgecolor='k') #绘制两个主成分组成坐标的散点图
for i in range(result[:,0].size):
    plt.text(result[i,0],result[i,1],df.index[i])     #在每个点边上绘制数据名称
x_label = 'PC1(%s%%)' % round((pca.explained_variance_ratio_[0]*100.0),2)   #x轴标签字符串
y_label = 'PC1(%s%%)' % round((pca.explained_variance_ratio_[1]*100.0),2)   #y轴标签字符串
plt.xlabel(x_label)    #绘制x轴标签
plt.ylabel(y_label)    #绘制y轴标签

#层次聚类的热图和聚类图
sns.clustermap(df,method ='ward',metric='euclidean')
plt.show()

层次聚类及谱系图 介绍及python实现_第2张图片
层次聚类及谱系图 介绍及python实现_第3张图片
层次聚类及谱系图 介绍及python实现_第4张图片

3.参数介绍

scipy.cluster.hierarchy.linkage(y, method='single',metric='euclidean',optimal_ordering=False)

y:需要进行层次聚类的数据,这里即可用使用开始读取的数据变量df
method:层次聚类选用的方法,下面罗列了七种方法,比如:

  • single方法代表将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离
    这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。
    两个簇之间的距离公式:
    在这里插入图片描述

  • complete方法与Single Linkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。
    Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。
    两个簇之间的距离公式:
    在这里插入图片描述

  • average方法代表是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。两个簇之间的距离公式:
    在这里插入图片描述

  • weighted 即两个簇之间的距离公式:
    在这里插入图片描述

  • centroid 即两个簇之间的距离公式:
    在这里插入图片描述

  • median 同centroid

  • ward 即两个簇之间的距离公式:
    在这里插入图片描述

metric:距离计算的方法,即上面方法中的dist()函数具体的计算方式,具体方式可以见这个页面。
The distance metric to use. The distance function can be ‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’, ‘kulsinski’, ‘kulczynski1’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’.

————————————————
版权声明:代码实现及参数介绍部分 经CSDN博主「冬之晓东」的原创文章 修改完成。
原文链接:https://blog.csdn.net/qq_19528953/article/details/79133889

你可能感兴趣的:(scipy,聚类,python,机器学习)