Jama和Matlab LMNN以及特征值

3
我将LMNN(最大边缘最近邻)度量学习算法的matlab代码改写为Java,并使用Jama库。结果与Matlab不同,我认为这是由于在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]]

你能具体说明一下你用这两种语言得到的结果有什么不同吗? - Andrew Janke
A = [2 4 2; 6 8 1;5 7 5] Matlab 结果:V = -0.3486 -0.8276 0.1922 -0.5798 0.5601 -0.4032 -0.7364 0.0374 0.8947L = 12.8778 0 0 0 -0.7978 0 0 0 2.9200Java 使用 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]] - saha
我已经为了可读性,将这些结果作为代码格式并添加到你的问题中。你能否展示一下在Java代码中如何初始化ideM值? - Andrew Janke
就此而言,我下载了JAMA 1.0.3,并且可以在Matlab R2014a中重现您的精确结果。但是我不知道是什么原因导致了这些结果。 - Andrew Janke
1个回答

0

嗯,由于某些原因,Jama 是不正确的(列没有 1 的范数)。重新排序和改变符号是正常的(你只是得到正交向量,它们映射到特征值 * 自身)。你可以尝试对列进行归一化或使用 jlapack。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接