2016-08-29 8 views
0

イメージのクラスタリングにDBSCANメソッドを使用していますが、予期しない結果が発生します。私に10枚の画像があるとしましょう。sklearn.cluster.DBSCANで予期しない結果が発生する

まず、ループ内の画像をcv2.imreadで読み込みます。 次に、各画像間の構造的類似度を計算します。その後、私はこのような行列を持っています:

[ 
[ 1.   -0.00893619 0.   0.   0.   0.50148778  0.47921832 0.   0.   0.  ] 

[-0.00893619 1.   0.   0.   0.   0.00996088  -0.01873205 0.   0.   0.  ] 

[ 0.   0.   1.   0.57884212 0.   0.    0.   0.   0.   0.  ] 

[ 0.   0.   0.57884212 1.   0.   0.    0.   0.   0.   0.  ] 

[ 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] 

[ 0.50148778 0.00996088 0.   0.   0.   1.   0.63224396 0.   0.   0.  ] 

[ 0.47921832 -0.01873205 0.   0.   0.   0.63224396  1.   0.   0.   0.  ] 

[ 0.   0.   0.   0.   0.   0.   0. 1.   0.77507487 0.69697053] 

[ 0.   0.   0.   0.   0.   0.   0. 0.77507487 1.   0.74861881] 

[ 0.   0.   0.   0.   0.   0.   0. 0.69697053 0.74861881 1.  ]] 

いいね。それから私はDBSCANの簡単なinvokationあります

db = DBSCAN(eps=0.4, min_samples=3, metric='precomputed').fit(distances) 
labels = db.labels_ 
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) 

を、結果は

[0 0 0 0 0 0 0 0 0 0] 

私が間違って何をしますかですか?なぜそれはすべてのイメージを1つのクラスタに入れますか?

答えて

0

問題は、私が距離行列を正しく計算しなかったことです。メイン対角線のエントリはすべてゼロです。

1

DBSCANは、通常、の相違点(類似)ではないとみなします。類似性のしきい値でも実装できます(一般化DBSCANを参照)

関連する問題