1
I have a matrix x=  
[[0,1,1,1,0,0,0,0],
[1,0,1,1,0,0,0,0],
[1,1,0,1,0,0,0,0],
[1,1,1,0,0,0,0,0],
[0,0,0,0,0,1,1,1],
[0,0,0,0,1,0,1,1],
[0,0,0,0,1,1,0,1],
[0,0,0,0,1,1,1,0],]

AgglomerativeClusteringを呼び出した後、データが 2 つのクラスター (0-3) と (4-7) に分割されることを期待していました。つまり、labels_=[0,0,0,0,1,1,1,1] ですが、labels_ list [0, 0, 0, 1, 0, 0, 0, 1] です

私のコードは次のとおりです s=AgglomerativeClustering(affinity='precomputed',n_clusters=2,linkage='complete) s.fit(x)

コードにエラーが含まれていませんか? クラスタリングが期待どおりにならない理由

4

2 に答える 2

1

いくつかの例で遊んだ後AgglomerativeClustering、「アフィニティ」マトリックスを距離マトリックスとして解釈するように見えますが、これはどこにも指定されていません。これは、0 と 1 を入れ替える必要があることを意味します。

また、行列の上三角部分のみを考慮しているようです (他のすべては冗長です)。

私は次のように定義すると信じてxいます:

x=  
[[0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],]

期待される結果が得られます。

于 2016-03-29T15:32:37.127 に答える
0

エラーは、接続マトリックスの指定方法にあります。あなたの説明から、あなたのマトリックスはポイント間のリンケージを示していると思います.[0/1]は[リンク/リンクなし]を示します. ただし、アルゴリズムはこれをペアごとの距離の行列として扱うため、予期しない結果が得られます。

単純な変換を使用して、アフィニティ マトリックスを一種の距離マトリックスに変換できます。例えば

>>> x = np.array(x)
>>> s.fit(np.exp(-x))
>>> s.labels_
array([1, 1, 1, 1, 0, 0, 0, 0])

このアフィニティ マトリックスを生成するために使用されるデータに対して、実際の距離メトリックを使用することをお勧めします。

于 2015-10-24T14:49:26.057 に答える