1

圖論和數據挖掘是計算機科學的兩個領域,我還是一個新手,所以原諒我的基本理解。使用python的分層聚類樹狀圖

我被要求繪製分層聚類圖的樹狀圖。 我給出的輸入如下:該圖的所有邊的列表。

到目前爲止,我已經能夠從輸入中繪製圖形。

下一步將對圖進行聚類,然後從該聚類圖繪製聚類圖。

我的問題是: 有人可以給我一步一步的指導,遵循?在這個過程的兩個步驟中需要/返回哪些輸入/輸出。 (聚類,得到樹狀圖)

注:

到目前爲止,我一直在使用圖形工具來繪製圖表,我也跑一個測試代碼,我發現在互聯網上從Scipy.clustering.hierarchy包,它似乎具有所有需要的功能。

回答

2

你是對的'Scipy.clustering.hierarchy包'是正確的,這裏有一些python僞代碼來向你展示大概的想法。

從您的陳述'到目前爲止,我已經能夠從輸入中繪製圖形'。 我假設你有一個美好的開始獲取數據輸入到蟒蛇等..

開始蟒蛇聚類僞代碼

我至少需要這些Python包

import scipy.cluster.hierarchy as sch 
import numpy as np 
import sys 

你需要一個「距離度量」,如果輸入的數據是「串」,那麼你會使用這樣的

from Levenshtein import jaro

從標籤的距離矩陣

distanceMatrixDimension= len(p_names)

得到的上三角
upper_triangle=np.triu_indices(distanceMatrixDimension,1)

的座標獲得的距離得到的矩陣尺寸 distances=np.apply_along_axis(dis,0,upper_triangle)

開始從聚類算法'Scipy.clustering.hierarchy'包 得到鏈接矩陣Z這裏'average'是方法的聯動 Z=sch.linkage(distances,'average')

獲取綁定用於從數據 max_dist=distances.max()

0.2產生的度量維度值。max_dist的作用就像一個閾值,實驗使用不同的值 fclster=sch.fcluster(Z,0.2*max_dist,'distance')

端蟒聚類僞代碼

的Z是數據 另一種方式來說這是一個鏈接的分級凝聚羣集它是一個(分層)」樹「,根節點分支到您的葉節點,這些節點通常是您要聚類的輸入數據中的記錄或行

去程序只是此樹的可視化。有很多方法可以做到這一點,您可以從Z的維度中獲得繪圖變量。最好的方法是使用matlab或八度。 通常使用樹形從SciPy的繪製 '樹形圖'

import matplotlib.pyplot as plt

然後

dendrogram(Z, color_threshold=1, labels=[....],show_leaf_counts=True)

+0

閾值範圍爲其中2個值? – gaurus 2017-03-21 17:33:17

+0

門檻好的信息https://github.com/scikit-learn/scikit-learn/issues/3796 – 2017-03-24 14:47:50