3

LMNN (Largest Margin Nearest Neighbor) メトリック学習アルゴリズムの matlab コードを Java に変更し、Jama ライブラリを使用します。異なる結果が得られました。違いが発生したのは、Matlab と Jama の固有値分解 (固有値と固有ベクトル) のせいだと思います。以前にそのような問題に遭遇した場合は、コメントしてください。また、そのような条件下で同様の結果が得られる必要がありますか。

マトラブでは:

[V, L] = eig(M);

Java ( IdeM は PSD マトリックス)

Matrix V = ideM.eig().getV();
Matrix L = ideM.eig().getD();

結果

結果の例:

A = [2 4 2; 6 8 1; 5 7 5] 

マトラブの結果:

>> [V,L] = eig(A)
V =
      -0.3486     -0.82756      0.19221
     -0.57978      0.56013     -0.40315
     -0.73643     0.037403      0.89472
L =
       12.878            0            0
            0      -0.7978            0
            0            0         2.92

Jama ライブラリを使用した Java:

[[0.8275575078346545, -0.3493113857121139, 0.24597790205308678],
 [-0.5601335729999509, -0.5809634522691761, -0.5159207870175849],
 [-0.037402561741212, -0.7379374514853343, 1.144995023469712]] 
[[-0.7977988158677061,0.0, 0.0], 
 [0.0, 12.877769427129202, 0.0], 
 [0.0, 0.0,2.9200293887385067]]
4

1 に答える 1

0

なんらかの理由で Jama は正しくありません (列のノルムは 1 ではありません)。並べ替えと符号の変更は正常です (固有値 * 自体にマップされる直交ベクトルを取得しているだけです)。列を正規化するか、jlapack を使用してみてください。

于 2014-08-26T09:56:30.060 に答える