如何在python中进行数据关联聚类图

问题描述 投票:0回答:1

我有一个数据库,其中包含有关回购的提交信息。例如

commit-sha1 | file1 | 
commit-sha1 | file2 |
commit-sha2 | file2 |
commit-sha2 | file3 | 

等等。基本上,显示sha1更改了文件(file1,file2)和sha2更改(file2,file3)现在我想看看是否有一些文件是相关的,即file1和file2一起提交的可能性等等。为此,首先,我找到了最常提交给我的前50个文件

file1 - 1500
file2 - 1423
file3 - 1222..
  • 对于每个文件f,计算P(f)=包含f /总提交的提交。
  • 对于每对文件f1,f2,计算Q(f1,f2)=包含f1,f2 /总提交的提交
  • 对于每对文件f1,f2,计算D(f1,f2)= P(f1)* P(f2)/ [Q(f1,f2) - P(f1)* P(f2)]或无穷大,如果Q( f1,f2)<= P(f1)* P(f2)按照上面的说法,我现在有两对文件和它们的D(f1,f2)值,看起来像这样 two_pair_list = [['file1','file2'],['file1','file3'] ... ['file49','file50']] d_value = [3.2,-1,0.12,7.6,-1,...]

当Q(f1,f2)<= P(f1)* P(f2)时,我将-1作为d_value,即例如,因为db中没有提交同时包含file1和file3的提交(即Q(file1, file3)= 0),其d_value为-1。现在假设我有文件对的d_value列表,我如何执行层次聚类以查看哪些文件是相关的?我相信python的linkage()API会有所帮助,但我不确定如何将它与这些数据一起使用。任何帮助表示赞赏谢谢

python cluster-analysis hierarchical-clustering
1个回答
1
投票

一个简单的例子:

from scipy.cluster.hierarchy import dendrogram, linkage
import numpy as np
from matplotlib import pyplot as plt

d_value = np.array([ 3.2 , 100,  0.12,  7.6 , 100,  5.2 ])
Z = linkage(dm, 'ward')
fig = plt.figure()
dn = dendrogram(Z)

结果:

enter image description here

请注意,我已将-1更改为100,因为file1和file3的距离在未提交时应该很大。

© www.soinside.com 2019 - 2024. All rights reserved.