1

L2正規化された機能マトリックスで「Distance」、「cosine」、「EmptyAction」、「drop」を使用してMatlabの通常のkmeansアルゴリズムを使用していますが、問題があります。1.00000Matlab が生成する出力は、k=20 の場合でも、すべてのデータポイントを cluster に割り当てるだけであり、C のすべての重心はNaNです。これを引き起こしている可能性のあるものについて誰か提案がありますか?

行列のレイアウトは ([0,1,...,1,0,1],[...],[0,1,...,1,0,1]) です。numpy.linalg.normファイルをMatlabに渡す前に、Pythonを使用してL2正規化を行いました。これは、私が kmeans を実行している正確な方法です。

m=importdata('matrix.txt');
data=m'; % transpose, because kmeans treats columns as features instead of rows
[L, C]=kmeans(data, 20, 'Distance', 'cosine', 'EmptyAction', 'drop')

これが私の正規化されたデータセットのサンプルです:

10.3440804328
12.6885775404
15.5884572681
15.9059737206
17.4355957742
17.0
17.3493515729
17.3205080757
18.6279360102
19.7230829233
21.400934559
22.0
22.5831795813
23.0
24.0416305603
25.2388589282
26.8141753556
22.5388553392
9.2736184955
13.5277492585
15.2970585408

どんな助けや提案も大歓迎です。さらに情報が必要な場合はお知らせください。

4

1 に答える 1

1

それを失敗させているのは余弦距離であり、sqEuclidean で動作します。コサイン距離にはより多くの情報が必要だと思います。さもないと、データセットでは意味がありません。

編集:ドキュメントがここでは少しあいまいであることに同意します...しかし、Matlab の pdist 関数の余弦距離の定義は、「1 から点間の夾角の余弦を引いたもの (ベクトルとして扱われる)」です。

そのことから、角度を含める必要があることがわかります (次の列で想定しています)。しかし、それは目的に反しているように思えます。cosine similarity もう一度編集: 含まれているということは、「2 つのベクトル間の含まれる角度」を意味する可能性が高いと思います。この場合、コサインは 2 つ以上の列が機能することを期待していると思います。

また、すでに python を使用している場合は、優れた機械学習ツールもいくつかあります。ここに私が使用したものがあります。MILKもありますが、私自身は使ったことはありません。

于 2012-05-08T17:30:33.330 に答える