2012-01-30 5 views
1

Я делаю использование пакета jama для поиска lsa. Мне сказали уменьшить размерность, и поэтому я уменьшил ее до 3 в этом случае, и я восстановил матрицу. Но в результате матрица сильно отличается от той, я дал к системеПроблемы с использованием Jama в java для LSA

Херес код

a = new Matrix(termdoc); // get the matrix here 
    a = a.transpose() ; // since the matrix is in the form of doc * terms i transpose it 
    SingularValueDecomposition sv =new SingularValueDecomposition(a) ; 
    u = sv.getU(); 
    v = sv.getV(); 
    s = sv.getS(); 
    uarray = u.getArray(); 
    sarray = s.getArray(); 
    varray = v.getArray(); 
    sarray_mod = new double[3][3]; //reducing dimension 
    uarray_mod = new double[uarray.length][3]; 
    varray_mod = new double[3][varray.length]; 
    move(sarray,3,3,sarray_mod); // my method to move the contents 
    move(uarray,uarray.length,3,uarray_mod); 
    move(varray,3,varray.length,varray_mod); 
    e = new Matrix(uarray_mod); 
    f = new Matrix(sarray_mod); 
    g = new Matrix(varray_mod); 
    Matrix temp =e.times(f); 
    result = temp.times(g); 
    result = result.transpose(); 
    results = result.getArray() ; 
    System.out.println(" The array after svd : \n"); 
    print(results);// my method to print the array 

private static void move(double[][] sarray2, int r, int c, 
     double[][] sarrayMod) { 
    // TODO Auto-generated method stub 
    for(int i=0;i<r;i++) 
     for(int t=0;t<c;t++) 
      sarrayMod[i][t]=sarray2[i][t]; 

} 

Пример вывода с помощью всего 3 файлов, из которых два являются подобны

0.25 0 0 0 0 0 0 0 0.25 0 0.25 0.25 0 

0 0.083 0.083 0.083 0.083 0.083 0.083 0.083 0 0.083 0.083 0.167 0.083 

0.25 0 0 0 0 0 0 0 0.25 0 0.25 0.25 0 

Массив после svd:

0.225 0.029 0.029 0.029 0.029 0.029 0.029 0.029 0.225 0.029 0.253 0.282 0.029 

-0.121 0.077 0.077 0.077 0.077 0.077 0.077 0.077 -0.121 0.077 -0.044 0.033 0.077 

0.245 0.012 0.012 0.012 0.012 0.012 0.012 0.012 0.245 0.012 0.257 0.269 0.012 

ответ

1

Пройдите пример Here

В примере мы берем первые 2 столбца из U, S и V. И затем мы умножаем их. Это не приведет к тому, что вы получите одну и ту же матрицу, но повысите производительность по подобию.

Если вы прошли через пример, вы обнаружите, что сходство между пользователем и человеком было в -ve. Но после того, как мы выполнили SVD, сходство увеличилось до значения + ve, близкого к 1.

Я думаю, что способ, которым вы двигаетесь, верен. Просто повторите пример один раз.

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

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