2009-12-07 5 views
3

Есть ли у кого-нибудь опыт работы с MDSJ? Следующий вход дает только результаты NaN, и я не могу понять, почему. Документация довольно скудная.Java MDSJ производит NaN

import mdsj.Data; 
import mdsj.MDSJ; 

public class MDSJDemo { 
    public static void main(String[] args) {           
     double[][] input = { 
     {78.0, 60.0, 30.0, 25.0, 24.0, 7.125, 1600.0, 1.4953271028037383, 15.0, 60.0, 0.0, 0.0, 50.0}, 
     {63.1578947368421, 51.81818181818182, 33.0, 30.0, 10.714285714285715, 6.402877697841727, 794.2857142857143, 0.823045267489712, 15.0, 20.0, 2.8571428571428568, 0.0, 75.0}, 
     {55.714285714285715, 70.0, 16.363636363636363, 27.5, 6.666666666666666, 5.742574257425742, 577.1428571428571, 0.6542056074766355, 12.857142857142856, 10.0, 17.142857142857142, 0.0, 25.0} 
     }; 

     int n=input[0].length; // number of data objects 
     double[][] output=MDSJ.classicalScaling(input); // apply MDS 
     System.out.println(Data.format(output)); 
     for(int i=0; i<n; i++) { // output all coordinates 
      System.out.println(output[0][i]+" "+output[1][i]); 
     } 
    } 
} 

Это выход:

NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 

NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 
NaN NaN 

Возможно, я использую МДС неправильно. Каждый подрамник длиной 13 в input предназначен для представления одного объекта, но MDSJ возвращает 13 пунктов.

Он также не для этого входа:

double[][] input = { 
      {3, 4, 3}, 
      {5, 6, 1}, 
      {0, 1, 2} 
    }; 

EDIT: Оказывается, что я использую это неправильно. Я давал ему вход, как это:

Object A: {30d, 1d, 0d, 4.32, 234.1} 
Object B: {45d, 3.21, 45, 91.2, 9.9} 
Object C: {7.7, 93.1, 401, 0d, 0d} 

Но то, что он на самом деле хочет, чтобы это матрица расстояний, как это:

 A  B  C 
A 0  3  1 
B 3  0  5 
C 1  5  0  

Не совсем, хотя, потому что для этого входа:

double[][] input = { 
      {0, 3, 1}, 
      {3, 0, 5}, 
      {1, 5, 0} 
    }; 

Я получаю этот результат:

0.8713351726043931 -2.361724203891451 2.645016918006963 
NaN NaN NaN 

0.8713351726043931 NaN 
-2.361724203891451 NaN 
2.645016918006963 NaN 

Но если он хочет массив расстояний, в чем смысл использования MDS в первую очередь? Я думал, что он должен сварить множество атрибутов в координатах.

+0

Это может быть слишком поздно, но вам нужно определить метрику, которая сравнивает два объекта. Это даст вам массив A, где каждая запись (A_i, j) содержит значение для метрики (i, j), где метрика - это функция, которая принимает два вектора и возвращает double. В этот момент вы можете использовать MDS на A. – sdasdadas

ответ

1

Многомерное масштабирование превращает расстояния в координаты - если у вас уже есть координаты в высокоразмерном пространстве и вы хотите, чтобы они были внедрены оптимально в низкоразмерном пространстве, анализ основных компонентов (PCA), вероятно, является той техникой, которую вы ищете.

Классические MDS и PCA тесно связаны: во-первых, MDS преобразует входные расстояния в предварительные высокоразмерные координаты (размер которых превышает количество описанных объектов); во-вторых, размерность этих координат уменьшается на этапе, подобном PCA, путем избавления от наименее важных осей.

Точка использования MDS заключается в том, что в некоторых настройках входные расстояния не производятся из существующих координат, а из чего-то другого, что не является геометрическим, например, оценки несходства, сделанные людьми.

Ваша матрица несходства 3x3 не удовлетворяет неравенству треугольника, требуемому в метрических пространствах (поскольку d [1] [0] + d [0] [2] < d [1] [2]) и, таким образом, не может быть точно встроенный в евклидово пространство. Технически значения NaN во втором измерении обусловлены отрицательным вторым собственным значением модифицированной матрицы различий.

+1

Хорошо, возможно, вы правы. У вас есть пакет Java, который вы рекомендуете использовать? Я смотрю вокруг, и ничего похожего на то, что мне нужно. –

 Смежные вопросы

  • Нет связанных вопросов^_^