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 necessaryif (m_numAttributes < m_numInstances) {m_transpose = true;trainMatrix = trainMatrix.transpose();}SingularValueDecomposition trainSVD = trainMatrix.svd();m_u = trainSVD.getU(); // left singular vectorsm_s = trainSVD.getS(); // singular valuesm_v = trainSVD.getV(); // right singular vectors// find actual rank to useint 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 instancesif (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());
總結
- 上一篇: 特征提取 notes
- 下一篇: 转 LDA入门