Jama и Matlab LMNN и собственные значения

Я изменил код алгоритма обучения метрики 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

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

person saha    schedule 26.03.2014    source источник
comment
Можете ли вы уточнить, в чем разница между результатами, которые вы получаете с двумя языками?   -  person Andrew Janke    schedule 27.03.2014
comment
А = [2 4 2; 6 8 1; 5 7 5] Результат matlab: v = -0.3486 -0.8276 0.1922 -0.5798 0.1922 -0.5798 0.5601 -0.4032 -0.7364 0.0374 0,8947 l = 12,8778 0 0 0 - 0,7978 0 0 0 0 0 0 0-0,7978 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,7978 0 0 0 0 2,9200, -0.349346545121139 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]]   -  person saha    schedule 27.03.2014
comment
Я позволил себе включить эти результаты в ваш вопрос и отформатировать их как код для удобства чтения. Можете ли вы также показать, как вы инициализируете значение ideM в коде Java?   -  person Andrew Janke    schedule 28.03.2014
comment
Что бы это ни стоило, я скачал JAMA 1.0.3 и могу воспроизвести ваши точные результаты с его помощью и Matlab R2014a. Но я не знаю, что их вызывает.   -  person Andrew Janke    schedule 28.03.2014


Ответы (1)


Ну, по какой-то причине Джама неверен (столбцы не имеют нормы 1). Переупорядочивание и смена знака нормальны (вы просто получаете ортогональные векторы, которые сами сопоставляются с eigenval *). Вы можете попробовать нормализовать столбцы или использовать jlapack.

person user3970006    schedule 26.08.2014