LoginSignup
2
0

More than 5 years have passed since last update.

JuliaでLSAの実装

Last updated at Posted at 2018-10-14

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の説明.png

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

参考文献

トピックモデルによる統計的潜在意味解析
著者:佐藤一誠

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0