私はMatlabの通常のkmeansアルゴリズムを「距離」、「余弦」、「EmptyAction」、L2の正規化されたフィーチャマトリックスに「ドロップ」して使用しています。 Matlabが生成する出力は、単にk = 20、Cのすべての重心がNaN
であっても、クラスタ1.00000
にEVERYデータポイントを割り当てるだけです。これを引き起こしている可能性のあることについては誰にも何か提案がありますか?Matlab k-means cosineはすべてを1つのクラスタに割り当てます
マトリックスのレイアウトは([0,1、...、1,0,1]、[...]、[0,1、...、1,0,1])です。私はMatlabにファイルを渡す前に、Pythonのnumpy.linalg.norm
を使って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
すべてのヘルプや提案をいただければ幸いです。より多くの情報が必要なら私に知らせてください!
kmeansはx-y座標のセットで動作しますが、行ごとに1つのフィーチャしか提供しません。データに関連する値がありますか? – Smash
私はこの場合、彼は1つの機能しか持っていなかったと仮定していた – Matt
おそらく1秒の2番目の列を追加しますか? – Smash