自然言語処理の技法の1つに、潜在的意味解析(LSA)というものがある。 単語文書行列Aがあった場合、特異値分解(SVD)により A=UΣV に分解し、特異値を大きいほうからk個使って Ak=UkΣkVk のように階数の低減を行うことで、階数kのAへの近似を最小誤差で得ることができる。 つまり特異値分解の計算さえできてしまえばLSAもすぐできるわけだが、 pythonの数値解析モジュールScipyにかかれば特異値分解もあっという間である。 まずは特異値分解まで↓ from numpy import * from scipy import linalg A = matrix([ [5, 8, 9, -4, 2, 4], [2, -4, 9, 4, 3, 3], [-3, 4, 8, 0, 5, 6], [-2, 5, 4, 7, 0, 2] ]) u, sigma, v = linalg.sv