我想知道是否有一个(最好是开源的)库,用于根据Python源代码的相似性聚类Python源代码 - 或者代码克隆检测器。
它应该基于已发表论文的算法(如AST指纹识别),并应清楚地描述它。
我补充说这是用于聚类“Python源代码”,而不是聚合任何数据。
答案 0 :(得分:1)
将数据聚合在一起有多种方法。我在这里举两个例子。
k-mean群集
您可以使用scikit-learn
使用KMeans
模型将数据群集到群组中。基本上每个数据点都将分配到一个组中。
from sklearn.cluster import KMeans
X = np.array([[1, 2], [2, 3], [2, 3], [3, 5], [4, 2], [1, 1.5]])
kmean_model = KMeans(n_clusters=5, random_state=0)
kmean_model.fit_predict(X)
# return array([4, 2, 2, 3, 0, 1], dtype=int32)
k-mean聚类算法现在可以在大多数书籍中找到,所以你可以参考它。
分层聚类
对于分层聚类,您必须首先找到距离矩阵,在这种情况下将是6 x 6,因为我们在X
中有6个数据点。我们得到的结果将是分区号,因此您可以根据输出分区对数据点进行排名。
import numpy as np
from scipy.cluster.hierarchy import fcluster, linkage
from scipy.spatial.distance import cdist
X = np.array([[1, 2], [2, 3], [2, 3], [3, 5], [4, 2], [1, 1.5]])
D = cdist(X, X) # euclidean distance matrix (you can custom distance here as you like)
linkage = linkage(D)
partition = fcluster(linkage, t=0.01, criterion='distance')
# return array([2, 1, 1, 5, 4, 3], dtype=int32)
参见相关论文here。