簡體   English   中英

樹形圖或距離矩陣的其他圖

[英]Dendrogram or Other Plot from Distance Matrix

我有三個矩陣可供比較。 每個都是5x6。 我最初想要使用層次聚類來聚類矩陣,以便在給定相似性閾值的情況下對最相似的矩陣進行分組。

我在python中找不到任何這樣的函數,所以我手工實現了距離測量, (p-norm,其中p = 2) 現在我有一個3x3距離矩陣(我相信在這種情況下也是一個相似矩陣)。

我現在正在嘗試生成樹狀圖。 這是我的代碼,這就是錯誤的。 生成一個圖形(如果可能的話,樹形圖),顯示最相似的矩陣的簇。 矩陣0,1,2,0和2是相同的並且應該首先聚集在一起,並且1是不同的。

距離矩陣如下所示:

>   0     1    2 
0   0.0    2.0  3.85e-16
1   2.0    0.0  2.0
2 3.85e-16 2.0  0.0

碼:

from scipy.cluster.hierarchy import dendrogram
import matplotlib.pyplot as plt
import numpy as np
from scipy.cluster.hierarchy import linkage
mat = np.array([[0.0, 2.0, 3.8459253727671276e-16], [2.0, 0.0, 2.0], [3.8459253727671276e-16, 2.0, 0.0]])
dist_mat = mat
linkage_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的第一個參數不應該是方形距離矩陣。 它必須是壓縮距離矩陣 在你的情況下,那將是np.array([2.0, 3.8459253727671276e-16, 2]) 您可以使用scipy.spatial.distance.squareform從方形距離矩陣轉換為壓縮形式

如果將二維數組傳遞linkage形狀(m, n) ,則會將其視為n維空間中m個點的數組,並計算這些點本身的距離。 這就是為什么當你通過方形距離矩陣時沒有得到錯誤 - 但是你得到了一個不正確的情節。 (這是一個未記錄的“功能” linkage 。)

另請注意,由於距離3.8e-16太小,與點0和2之間的鏈接相關聯的水平線可能在圖中不可見 - 它位於x軸上。

這是您腳本的修改版本。 對於此示例,我將該小距離更改為0.1,因此關聯的群集不會被x軸遮擋。

import numpy as np

from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial.distance import squareform

import matplotlib.pyplot as plt


mat = np.array([[0.0, 2.0, 0.1], [2.0, 0.0, 2.0], [0.1, 2.0, 0.0]])
dists = squareform(mat)
linkage_matrix = linkage(dists, "single")
dendrogram(linkage_matrix, labels=["0", "1", "2"])
plt.title("test")
plt.show()

這是腳本創建的圖:

樹形圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM