2017-01-05 11 views
0

私はpythonのsklearnのDBSCANを使用していくつかのデータポイントをクラスター化しています。私はポイントをクラスタ化するために事前計算された距離行列を使用しています。DBSCANのクラスターラベルの変更

import sklearn.cluster as cl 
C = cl.DBSCAN(eps = 2, metric = 'precomputed', min_samples =2) 
db = C.fit(Dist_Matrix) 

Dist_Matrixは私が使用している事前計算された距離行列です。コードを実行するたびに、データポイントのクラスターラベルが異なります。クラスタの数も ように変え、最初の実行では、ラベルは別の実行に

[ 2 3 3 0 3 0 2 2 2 4 2 -1 0 0 0 1 4 0 1 0 1 3 0 3 0 
0 1 -1 0 3 1 3 0 0 2 0 2 0 -1 0 0 3 0 0 0 1 0 1 0 0] 

あるが、それはどのように私はこの問題を解決することができます

[ 0 2 2 1 2 1 0 0 0 3 0 -1 1 1 1 0 3 1 0 1 0 2 1 2 1 
1 0 -1 1 2 0 2 1 1 0 1 0 1 -1 1 1 2 1 1 1 0 1 0 1 1] 

のようなものですか?助けてください

+0

「min_samples = 2」が小さすぎます。 DBSCANではなく、シングルリンクをしています! –

答えて

0

クラスタリング通常は同じラベルを割り当てません。

ラベル自体がの意味がないので、です。唯一の有益な情報は、どのオブジェクトがと一緒にになるかです。

sklearnに関しては、古いバージョンを使用すると、ランダムにシャッフルされます(不必要に)。だから、ラベルのランダムな順列を得るのは驚くべきことではありません。

通常、安定したラベルが必要な場合は、何か問題があります。

Butifあなたは本当に必要なことを知っています。単純なロジックを実装します。クラスターを最小のオブジェクトでソートし、それに応じてラベルを付け直します。私。第1のオブジェクトクラスタはクラスタ0である。第2のオブジェクトクラスタ(同一でない場合を除く)は、第1のクラスタ等である。

関連する問題