有没有办法为树状图标签动态分配权重

时间:2019-12-11 16:44:46

标签: python cluster-analysis hierarchical-clustering unsupervised-learning

这是假设的树状图(请参见下面的代码-使用随机数生成器可能会得到不同的图)

我的问题是,有没有一种方法可以根据权重的分组方式为每个权重动态分配权重。

例如,在最高级别,我们看到两个单独的集群(ACE)和(DHBIFG),因此为每个组分配50% 下降一个级别,我们看到ACE可以分为A和CE,因此25%分为A,25%分为(CE),最后在C和E之间分为12.5%和12.5。对于其他集群也是如此

最后,您将获得以下分配

A-25% B-12.5% C-12.5% D&E-各12.5% B-12.5% 我-6.25% F&G-每个3.125%

总和应为100%

无论如何,这可以动态完成吗? 我正在使用scipy.cluster.hierarchy生成此代码(以下代码)

enter image description here

from scipy.cluster.hierarchy import linkage, dendrogram

df = pd.DataFrame(np.random.randint(1,100,size=(100, 9)), columns=list('ABCDEFGHI'))
names = df.columns
from sklearn.preprocessing import normalize
movements = df.pct_change().dropna()
movements = movements.transpose()

# Normalize the movements: normalized_movements
normalized_movements = normalize(movements)

# Calculate the linkage: mergings
mergings = linkage(normalized_movements, method='complete')

# Plot the dendrogram
dendrogram(
    mergings,
    labels=names,
    leaf_rotation=90,
    leaf_font_size=6
)

from scipy.cluster.hierarchy import fcluster
labels = fcluster(mergings, 1, criterion='distance')

# Create a DataFrame with labels and varieties as columns: df
df = pd.DataFrame({'labels': labels, 'names': df.columns})

# Create crosstab: ct
ct = pd.crosstab(df['labels'], df['names'])

print(ct)
plt.show()

0 个答案:

没有答案