自然語言處理 奇異值分解(截斷)

2021-10-14 09:58:09 字數 1832 閱讀 8552

奇異值分解是 lsa(潛在語義分析)即計算主題向量背後的演算法。

svd 是一種可以將任何矩陣分解成 3 個因子矩陣的演算法,而這 3 個因子矩陣可以相乘來重建原始矩陣。這類似於為乙個大整數找到恰好 3 個整數因子,但是這裡的因子不是標量整數,而是具有特殊性質的二維實矩陣。通過 svd 計算出的 3 個因子矩陣具有一些有用的數學性質,這些性質可以用於降維和 lsa。

用**來實現svd的矩陣分解:

from nlpia.book.examples.ch04_catdog_lsa_sorted import lsa_models, prettify_tdm

import numpy as np

import pandas as pd

# 11 篇文件、詞彙表大小為 6 的語料庫

bow_svd, tfidf_svd = lsa_models(

)print

("資料:\n"

, prettify_tdm(

**bow_svd)

)# 詞項-文件矩陣

tdm = bow_svd[

'tdm'

]print

("詞項-文件矩陣tdm:\n"

, tdm)

# 奇異值分解

u, s, vt = np.linalg.svd(tdm)

# 左奇異向量 u:主題-詞矩陣

# 矩陣中每個元素位置上的權重或得分,分別代表每個詞對每個主題的重要程度

print

("左奇異向量 u:\n"

, pd.dataframe(u, index=tdm.index)

.round(2

))# 奇異值向量 s:

# 奇異值給出了在新的語義(主題)向量空間中每個維度所代表的資訊量。

print

(s.round(1

))s = np.zeros(

(len

(u),

len(vt)))

# np.fill_diagonal() 填充對角線元素

np.fill_diagonal(s, s)

print

("奇異值向量 s:\n"

, pd.dataframe(s)

.round(1

))# 右奇異向量vt:該矩陣將在文件之間提供共享語義,

# 因為它度量了文件在新的文件語義模型中使用相同主題的頻率。

print

("右奇異向量vt:\n"

, pd.dataframe(vt)

.round(2

))# 詞項-文件矩陣重構誤差

# 度量lsa精確率的一種方法是看看從主題-文件矩陣重構詞項-文件矩陣的精確率如何。

print

(tdm.shape)

print

(np.product(tdm.shape)

)err =

for numdim in

range

(len

(s),0,

-1):

s[numdim -

1, numdim -1]

=0reconstructed_tdm = u.dot(s)

.dot(vt)

# 均方根誤差(rmse)

((reconstructed_tdm - tdm)

.values.flatten()**

2).sum()

/ np.product(tdm.shape)))

# 截斷的內容越多,誤差就越大

print

(np.array(err)

.round(2

))

TSVD截斷奇異值分解

tsvd經常被用在特徵提取和病態問題的解決上。從某種程度上來說,pca和svd是一對表親,pca對特徵的協方差矩陣進行分解,找到一堆特徵的線性組合,盡可能多的表示出原始特徵中成分,svd則對原始資料直接進行奇異值分解,找到原始資料中盡可能大的特徵值,以這些特徵值多對應的特徵向量作為新的特徵。對於病態...

奇異值分解

奇異值分解 singular value decomposition 是線性代數中一種重要的 矩陣分解,是矩陣分析中正規矩陣酉對角化的推廣。在訊號處理 統計學等領域有重要應用。1基本介紹 2理論描述 3幾何意義 4範數 5應用 求偽逆 平行奇異值模型 矩陣近似值 奇異值分解在某些方面與 對稱矩陣或 ...

奇異值分解

從幾何 的角度上來看奇異值分解 上圖表明任意的矩陣 a 是可以分解成三個矩陣相乘的形式。v表示了原始域的標準正交基,u表示經過a 變換後的co domain的標準正交基,表示了v 中的向量與u中相對應向量之間的關係。我們仔細觀察上圖發現,線性變換a可以分解為旋轉 縮放 旋轉這三種基本線性變換。接下來...