3

我将 LMNN (Largest Margin Nearest Neighbor) 度量学习算法 matlab 代码更改为 java,并使用Jama 库。我得到了不同的结果,出现了差异,我认为是因为 Matlab 和 Jama 中的特征值分解(特征值和特征向量)。如果您以前遇到过此类问题,请给我评论。另外,是不是一定要在这样的条件下得到类似的结果。

在 Matlab 中:

[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] 

Matlab结果:

>> [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

Java 使用 Jama 库:

[[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)。符号的重新排序和更改是正常的(您只是得到映射到 eigenval * 本身的正交向量)。您可以尝试规范化列或使用 jlapack。

于 2014-08-26T09:56:30.060 回答