###LSAの説明
LSAの説明と言ってもコードを見てもらえば一発なのですが,説明すると
与えらたXという行列があります.これは各要素の文章i(i=4)における単語の頻度をが入った行列です.
これを特異値分解します.特異値分解の説明はググってください.
そして図のように近似行列を求めるのですが,特異値分解されたU,S,VのうちS行列が対角に特異値が並んでいます.
今回はk=2として2の幅で行列を取得します.
UとVも同様です.そうすると$\widetilde{U},\widetilde{S},\widetilde{V}^T$を求めることが出来ます.
それを掛ければ近似行列$\widetilde{X}$が求まります.
もっと詳しい情報はウィキペディアか参考文献を参照してください.
LSA.jl
X = [2 3 0 0 0;2 0 2 0 0;0 0 0 2 2;0 0 0 3 1]
U,S,V = svd(X)
"""
U
4×4 Array{Float64,2}:
0.0 0.874642 -0.484769 0.0
0.0 0.484769 0.874642 0.0
0.661803 0.0 0.0 -0.749678
0.749678 0.0 0.0 0.661803
"""
# Sを対角行列にする.
S =diagm(S)
"""
S
4×4 Array{Float64,2}:
4.13065 0.0 0.0 0.0
0.0 3.9009 0.0 0.0
0.0 0.0 2.40479 0.0
0.0 0.0 0.0 0.968371
V
5×4 Adjoint{Float64,Array{Float64,2}}:
7.10101e-17 0.696974 0.324248 3.19545e-16
-4.73401e-17 0.672647 -0.604754 -2.1303e-16
-7.10101e-17 0.248542 0.727417 -3.19545e-16
0.86491 -0.0 0.0 0.501927
0.501927 0.0 0.0 -0.86491
"""
# 低ランク近似行列を求める
k = 2
U2 = U[:,1:k]
S2 = S[1:k,1:k]
V2 = V[:,1:k]
X2 = U2*S2*V2'
"""
U2
4×2 Array{Float64,2}:
0.0 0.874642
0.0 0.484769
0.661803 0.0
0.749678 0.0
S2
4.13065 0.0
0.0 3.9009
V2
5×2 Array{Float64,2}:
7.10101e-17 0.696974
-4.73401e-17 0.672647
-7.10101e-17 0.248542
0.86491 -0.0
0.501927 0.0
# Xの近似行列
X2
4×5 Array{Float64,2}:
2.378 2.295 0.847998 0.0 0.0
1.318 1.272 0.470001 0.0 0.0
1.94118e-16 -1.29412e-16 -1.94118e-16 2.36438 1.3721
2.19894e-16 -1.46596e-16 -2.19894e-16 2.67833 1.5543
###参考文献
トピックモデルによる統計的潜在意味解析
著者:佐藤一誠