Problems using Jama in java for LSA

大憨熊 提交于 2019-12-13 00:54:33

问题


i am making using of the jama package for finding the lsa . I was told to reduce the dimensionality and hence i have reduced it to 3 in this case and i reconstruct the matrix . But the resultant matrix is very different from the one i had given to the system

heres the code

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

}

A sample output with just 3 files of which two are the similar

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 

The array after 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:


Go through the example Here

In the example, we take first 2 columns from U,S and V . And then we multiply them. It wont result to give you the same matrix but will enhance the performance in similarity.

If you have gone through the example, you will find that the similarity between user and human was in -ve. But after we performed SVD , similarity increased to a +ve value close to 1.

I think the way you are moving is correct. Just go through the example once.



来源:https://stackoverflow.com/questions/9060168/problems-using-jama-in-java-for-lsa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!