LSA

http://blog.csdn.net/aalbertini/archive/2011/03/18/6259066.aspx

 

1) 将Term Document矩阵进行svd, 得到 TSD'     

 

2) 对于新文档构成的列向量Q, 计算其文档坐标 Dq=Q'TS"

 

3) Dq 与 DS的行向量计算夹角, 判断距离

 

因此看, LSA的作用是进行相关性判断

 

SVD的作用: 降维。 降维的同时达到了潜在语义索引的目的。

 

SVD、降维之后得到近似term document矩阵A

A*A'中的元素(i,j)表示第i个term与第j个term的相关性

A'*A中的元素(i,j)表示第i个doc与第j个doc的相关性

A = TSD = TSh (DSh)' 中的元素(i,j)表示第i个term在各个doc中的权重   Sh表示S的1/2次

 

可以采用TS DS从而不用计算A*A'的方式完成所有计算

 

 

Matrix trainMatrix = new Matrix(trainValues); //Term Document // svd requires rows >= columns, so transpose data if necessary if (m_numAttributes < m_numInstances) { m_transpose = true; trainMatrix = trainMatrix.transpose(); } SingularValueDecomposition trainSVD = trainMatrix.svd(); m_u = trainSVD.getU(); // left singular vectors m_s = trainSVD.getS(); // singular values m_v = trainSVD.getV(); // right singular vectors // find actual rank to use int maxSingularValues = trainSVD.rank(); for (int i = 0; i < m_s.getRowDimension(); i++) { m_sumSquaredSingularValues += m_s.get(i, i) * m_s.get(i, i); } //TODO 计算、得到要求的特征值个数及其值。 特征值个数保存在m_actualRank中 // lower matrix ranks, adjust for transposition (if necessary), and // compute matrix for transforming future instances if (m_transpose) { Matrix tempMatrix = m_u; m_u = m_v; m_v = tempMatrix; } //降维。。。。。。。。 m_u = m_u.getMatrix(0, m_u.getRowDimension() - 1, 0, m_actualRank - 1); m_s = m_s.getMatrix(0, m_actualRank - 1, 0, m_actualRank - 1); m_v = m_v.getMatrix(0, m_v.getRowDimension() - 1, 0, m_actualRank - 1); //what。。。??? /** Will hold the matrix used to transform instances to the new feature space */ // Dq=Q'TS", 得到文档q在new space中的坐标. 该式从何而来??? //TS" 作何理解? DS" 作何理解? "表示求逆 m_transformationMatrix = m_u.times(m_s.inverse());

你可能感兴趣的:(文档,Matrix)