
我在python中找不到任何这样的函数,所以我用手实现了距离测量,(p-norm where p=2).现在我有一个3×3的距离矩阵(我相信在这种情况下也是一个相似矩阵).
我现在正在尝试生成树状图.这是我的代码,这就是错误的.我想生成一个图形(如果可能的话,树形图),显示最相似的矩阵的簇.矩阵0,1,2,0和2是相同的并且应该首先聚集在一起,并且1是不同的.
距离矩阵如下所示:
> 0 1 2 0 0.0 2.0 3.85e-161 2.0 0.0 2.02 3.85e-16 2.0 0.0
码:
from scipy.cluster.hIErarchy import dendrogramimport matplotlib.pyplot as pltimport numpy as npfrom scipy.cluster.hIErarchy import linkagemat = np.array([[0.0,2.0,3.8459253727671276e-16],[2.0,0.0,2.0],[3.8459253727671276e-16,0.0]])dist_mat = matlinkage_matrix = linkage(dist_mat,"single")dendrogram(linkage_matrix,color_threshold=1,labels=["0","1","2"],show_leaf_counts=True)plt.Title=("test")plt.show() 这是输出:
联系的意义是什么(dist_mat,’single’)?我会假设输出图看起来像这样,其中距离是2.0在0和1之间(例如).
有更好的方法来表示这些数据吗?是否有一个函数可以接受几个矩阵而不是点,比较并形成距离矩阵,然后聚类?我对如何可视化这些矩阵之间的差异的其他建议持开放态度.
解决方法linkage的第一个参数不应该是方形距离矩阵.它必须是 condensed distance matrix.在你的情况下,那将是np.array([2.0,3.8459253727671276e-16,2]).您可以使用 scipy.spatial.distance.squareform将方形距离矩阵转换为压缩形式 如果将二维数组传递给与形状(m,n)的链接,则会将其视为n维空间中m个点的数组,并计算这些点本身的距离.这就是为什么当你通过方形距离矩阵时没有得到错误 – 但是你得到了一个不正确的情节. (这是联系的无证“特征”.)
另请注意,由于距离3.8e-16太小,与点0和2之间的链接相关联的水平线可能在图中不可见 – 它位于x轴上.
这是您脚本的修改版本.对于此示例,我将该小距离更改为0.1,因此关联的群集不会被x轴遮挡.
import numpy as npfrom scipy.cluster.hIErarchy import dendrogram,linkagefrom scipy.spatial.distance import squareformimport matplotlib.pyplot as pltmat = np.array([[0.0,0.1],[0.1,0.0]])dists = squareform(mat)linkage_matrix = linkage(dists,"2"])plt.Title("test")plt.show() 这是脚本创建的图:
总结以上是内存溢出为你收集整理的python – 距离矩阵的树形图或其他图全部内容,希望文章能够帮你解决python – 距离矩阵的树形图或其他图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)