Julia에서 LSA 구현

4397 단어 JuliaLSA

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


참고문헌



주제 모델을 통한 통계적 잠재 의미 분석
저자 : 사토 이치 마코토

좋은 웹페이지 즐겨찾기