Pythonソースコードを類似性に基づいてクラスタリングするための(できればオープンソースの)ライブラリ、あるいはコードクローン検出器があるかどうかを知りたいと思います。クラスタリングPythonソースコード
公開された論文のアルゴリズム(ASTフィンガープリントなど)に基づいている必要があります。明確に記述する必要があります。
これは、「Pythonソースコード」をクラスタリングするためのものであり、一般的なデータをクラスタリングするものではありません。
Pythonソースコードを類似性に基づいてクラスタリングするための(できればオープンソースの)ライブラリ、あるいはコードクローン検出器があるかどうかを知りたいと思います。クラスタリングPythonソースコード
公開された論文のアルゴリズム(ASTフィンガープリントなど)に基づいている必要があります。明確に記述する必要があります。
これは、「Pythonソースコード」をクラスタリングするためのものであり、一般的なデータをクラスタリングするものではありません。
複数の方法でデータをクラスタリングできます。ここでは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を参照してください。
私はPythonのクラスタリングではなく、 "Pythonソースコード"のクラスタリングを意味しました。 回答を削除して、人々がそれを未回答として認識させることはできますか? (あなたの返事を空にすると、返事は削除されます。) –
@JohnJayDoe回答を受け入れるまで、人々は質問を未回答と認識します。 – mkrieger1
sklearnのドキュメントはかなり良いです、それらの9つのメソッドをリストし、それぞれの公開されたリファレンスを提供します。これは[このリンク](http://scikit-learn.org/stable/modules/clustering.html)で確認できます。 – Mephy
PMDのCPD(コピーペースト検出器)はPythonコードでも動作しますが、ASTレベルでは動作しませんので、すべての変数の名前を変更するだけであれば、それは役に立ちません – Foon
いいえ、それはしません。ここでそれを確認してください:http://pmd.sourceforge.net/pmd-4.3.0/cpd.html(あなたの返信に感謝します) –