2017-05-26 9 views
1

Pythonソースコードを類似性に基づいてクラスタリングするための(できればオープンソースの)ライブラリ、あるいはコードクローン検出器があるかどうかを知りたいと思います。クラスタリングPythonソースコード

公開された論文のアルゴリズム(ASTフィンガープリントなど)に基づいている必要があります。明確に記述する必要があります。

これは、「Pythonソースコード」をクラスタリングするためのものであり、一般的なデータをクラスタリングするものではありません。

+0

sklearnのドキュメントはかなり良いです、それらの9つのメソッドをリストし、それぞれの公開されたリファレンスを提供します。これは[このリンク](http://scikit-learn.org/stable/modules/clustering.html)で確認できます。 – Mephy

+0

PMDのCPD(コピーペースト検出器)はPythonコードでも動作しますが、ASTレベルでは動作しませんので、すべての変数の名前を変更するだけであれば、それは役に立ちません – Foon

+0

いいえ、それはしません。ここでそれを確認してください:http://pmd.sourceforge.net/pmd-4.3.0/cpd.html(あなたの返信に感謝します) –

答えて

1

複数の方法でデータをクラスタリングできます。ここでは2つの例を挙げます。

K平均クラスタリング

あなたはKMeansモデルを使用してグループにクラスタデータにscikit-learnを使用することができます。基本的に各データポイントはグループに割り当てられます。

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-meansクラスタリングアルゴリズムは、今日のほとんどの書籍で利用できるので、これを参照することができます。

階層的クラスタリングのために階層的クラスタリング

は、あなたは私たちがXで6つのデータポイントを持っているので、6×6になります。この場合には、第1の距離行列を見つける必要があります。結果はパーティション番号になりますので、出力パーティションに基づいてデータポイントをランク付けすることができます。

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を参照してください。

+0

私はPythonのクラスタリングではなく、 "Pythonソースコード"のクラスタリングを意味しました。 回答を削除して、人々がそれを未回答として認識させることはできますか? (あなたの返事を空にすると、返事は削除されます。) –

+0

@JohnJayDoe回答を受け入れるまで、人々は質問を未回答と認識します。 – mkrieger1

関連する問題