zoukankan      html  css  js  c++  java
  • 自然语言处理 潜在语义分析LSA背后的奇异值分解SVD

    特征值和特征向量

    \(A \mathbf{x} = \lambda \mathbf{x}\),这里,\(A \in \mathcal{R}^{n \times n}\)\(\mathbf{x} \in \mathcal{R}^{n \times 1}\)\(\lambda \in \mathcal{R}\)\(\lambda\) 是特征值,\(\mathbf{x}\) 是对应的特征向量。因此特征值分解:\(AW=W \Sigma\)\(A=W \Sigma W^{-1}\)。最后,将 \(W\) 中的 n 个向量标准化,可以得到$$A_{n \times n}=W_{n \times n} \Sigma_{n \times n} W^{T}_{n \times n}$$这里要求 \(A\) 必须为方阵。

    SVD奇异值分解

    \(A_{m \times n}=U_{m \times m} \Sigma_{m \times n} V^{T}_{n \times n}\)

    计算左奇异矩阵U:
    \(AA^T \in \mathcal{R}^{m \times m}\)\((AA^T) \mathbf{u}_i = \lambda_i \mathbf{u}_i\)。具体地,\(AA^{T} = U \Sigma V^{T} V \Sigma^T U^T = U \Sigma \Sigma^T U^T\)

    计算右奇异矩阵V:
    \(A^T A \in \mathcal{R}^{n \times n}\)\((A^T A) \mathbf{v}_i = \lambda_i \mathbf{v}_i\)。具体地,\(A^{T} A = V \Sigma^T U^T U \Sigma V^{T} = V \Sigma^T \Sigma V^T\)

    注:可以看出特征值等于奇异值的平方。
    

    计算奇异值:
    \(A=U \Sigma V^{T}\) => \(AV = U \Sigma\) => \(A \mathbf{v}_i = \sigma_i \mathbf{u}_i\) => 求出 \(\sigma_i\)

    潜在的k个主题

    对于奇异值,在奇异值矩阵中按从大到小排序,而且奇异值减少地很快。因此可以用最少的k个奇异值和对应的左右奇异向量来近似A。$$A_{m \times n} = U_{m \times m} \Sigma_{m \times n} V^{T}{n \times n} \approx U{m \times k} \Sigma_{k \times k} V^{T}_{k \times n}$$ \(U_{il}\) 是第i个文本与第l个主题的相关度,\(V_{jm}\) 是第j个单词和第m个主题的相关度,\(\Sigma_{lm}\) 是第l个主题和第m个主题的相关度。

    使用

    对于一个新的文本query:\(\mathbf{q} \in \mathcal{R}^{n \times 1}\),$$\mathbf{newq}{1 \times k} = \mathbf{q}{1 \times n} V_{n \times k} \Sigma^{-1}_{k \times k}$$

  • 相关阅读:
    使用CSS画三角形
    Hello World!
    python学习四(处理数据)
    python学习三(数据保存到文件)
    python学习二(文件与异常)
    python学习一(Python中的列表)
    Hadoop 解除 “Name node is in safe mode”(转)
    Java NIO开发需要注意的陷阱(转)
    Java NIO基本使用介绍
    如何设计企业移动应用 by宋凯
  • 原文地址:https://www.cnblogs.com/viredery/p/nlp_svd.html
Copyright © 2011-2022 走看看