【zt】TSVD

提要:

下面匯集了幾篇文章的部分內(nèi)容:

文章目錄:

1. scikit-learn:通過(guò)TruncatedSVD實(shí)現(xiàn)LSA(隱含語(yǔ)義分析)

2. 用截?cái)嗥娈愔捣纸饨稻S

3.?機(jī)器學(xué)習(xí)_用SVD奇異值分解給數(shù)據(jù)降維(理論講解)

4. sklearn中的降維:SVD和LSA

=====================================================================

TSVD實(shí)現(xiàn)LSA(隱含語(yǔ)義分析)

http://scikit-learn.org/stable/modules/decomposition.html#lsa

第2.5.2部分:

2.5.2. Truncated singular value decomposition and latent semantic analysis(截?cái)郤VD和LSA/LSA)

先說(shuō)明:latent semantic indexing, LSI和latent semantic analysis,?LSA本質(zhì)一樣。

TruncatedSVD是SVD的變形,只計(jì)算用戶指定的最大的K砾隅,個(gè)奇異值。

runcated SVD 用于term-document matrices (as returned by?CountVectorizer?or?TfidfVectorizer), 就是所謂的?latent semantic analysis(LSA), because 他將term-document matrices?轉(zhuǎn)換到低維的“semantic” space抖所。

再說(shuō)一點(diǎn),TruncatedSVD?類似于PCA,痕囱,不同的是TSVD直接處理樣本矩陣X田轧,而不是X的協(xié)方差矩陣。(如果feature-mean被減去后鞍恢,TSVD和PCA的結(jié)果一樣傻粘,也就是說(shuō),PCA是處理X的協(xié)方差矩陣有序,需要將整個(gè)訓(xùn)練樣本矩陣X還原成鄰人討厭的high-dimensional sparse marices抹腿,對(duì)于處理一個(gè)中等大小的文本集合這也很容易造成內(nèi)存溢滿。但TSVD直接使用scipy.sparse矩陣旭寿,不需要densify操作警绩,所以推薦使用TSVD而不是PCA!

使用TSVD走LSA/document處理時(shí)盅称,推薦用tf-idf矩陣肩祥,而不是tf矩陣。特別的缩膝,需要設(shè)置?(sublinear_tf=True,use_idf=True)使特征值近似于高斯分布混狠,這能彌補(bǔ)LSA對(duì)于文本數(shù)據(jù)的錯(cuò)誤的前提假設(shè)(compensating for LSA’s erroneous assumptions about textual data) 。

最后給一個(gè)例子:Clustering text documents using k-means

http://scikit-learn.org/stable/auto_examples/text/document_clustering.html#example-text-document-clustering-py

原帖鏈接:https://blog.csdn.net/mmc2015/article/details/46867773

--------------------------------------------------------------------------------------------

【其他】

用截?cái)嗥娈愔捣纸饨稻S:https://blog.csdn.net/u013719780/article/details/51767427

截?cái)嗥娈愔捣纸猓═runcated singular value decomposition疾层,TSVD)是一種矩陣因式分解(factorization)技術(shù)将饺,將矩陣分解成,和痛黎。它與PCA很像予弧,只是SVD分解是在數(shù)據(jù)矩陣上進(jìn)行,而PCA是在數(shù)據(jù)的協(xié)方差矩陣上進(jìn)行湖饱。通常掖蛤,SVD用于發(fā)現(xiàn)矩陣的主成份。

Getting ready

TSVD與一般SVD不同的是它可以產(chǎn)生一個(gè)指定維度的分解矩陣井厌。例如蚓庭,有一個(gè)矩陣致讥,通過(guò)SVD分解后仍然是一個(gè)矩陣,而TSVD可以生成指定維度的矩陣器赞。這樣就可以實(shí)現(xiàn)降維了垢袱。

這里我們還用iris數(shù)據(jù)集來(lái)演示TSVD:

from sklearn.datasets import load_iris

iris=load_iris()

iris_data=iris.data

TSVD對(duì)象的用法和其他對(duì)象類似。首先導(dǎo)入需要的類港柜,初始化惶桐,然后擬合:

from sklearn.decomposition import TruncatedSVD

svd=TruncatedSVD(2)

iris_transformed=svd.fit_transform(iris_data)

iris_data[:5]

iris_transformed[:5]

最終結(jié)果如下圖所示:

%matplotlib inline

import matplotlib.pyplot as plt

f=plt.figure(figsize=(5,5))

ax=f.add_subplot(111)

ax.scatter(iris_transformed[:,0],iris_transformed[:,1],c=iris.target)

ax.set_title("Truncated SVD, 2 Components")


There's more...

TruncatedSVD還有一些細(xì)節(jié)需要注意。

符號(hào)翻轉(zhuǎn)(Sign flipping)

TruncatedSVD有個(gè)“陷阱”潘懊。隨著隨機(jī)數(shù)生成器狀態(tài)的變化,TruncatedSVD連續(xù)地?cái)M合會(huì)改變輸出的符合贿衍。為了避免這個(gè)問(wèn)題授舟,建議只用TruncatedSVD擬合一次,然后用其他變換贸辈。這正是管線命令的另一個(gè)用處释树。

要避免這種情況,可以這樣:

tsvd=TruncatedSVD(2)

tsvd.fit(iris_data)

tsvd.transform(iris_data)[:5]

稀疏矩陣

TruncatedSVD相比PCA的一個(gè)優(yōu)勢(shì)是TruncatedSVD可以操作PCA處理不了的矩陣擎淤。這是因?yàn)镻CA必須計(jì)算協(xié)方差矩陣奢啥,需要在整個(gè)矩陣上操作,如果矩陣太大嘴拢,計(jì)算資源可能會(huì)不夠用桩盲。

---------------------------------------------------------------------------------------------------------------------

【其他】

TSVD截?cái)嗥娈愔捣纸猓篽ttps://blog.csdn.net/zhangweiguo_717/article/details/71778470

TSVD經(jīng)常被用在特征提取和病態(tài)問(wèn)題的解決上。

從某種程度上來(lái)說(shuō)席吴,PCA和SVD是一對(duì)表親赌结,PCA對(duì)特征的協(xié)方差矩陣進(jìn)行分解,找到一堆特征的線性組合孝冒,盡可能多的表示出原始特征中成分柬姚,SVD則對(duì)原始數(shù)據(jù)直接進(jìn)行奇異值分解,找到原始數(shù)據(jù)中盡可能大的特征值庄涡,以這些特征值多對(duì)應(yīng)的特征向量作為新的特征量承。對(duì)于病態(tài)矩陣,目前主要的處理辦法有預(yù)調(diào)節(jié)矩陣方法穴店、區(qū)域分解法撕捍、正則化方法等,截?cái)嗥娈愔捣纸饧夹g(shù)TSVD就是一種正則化方法迹鹅,它犧牲部分精度換去解的穩(wěn)定性卦洽,使得結(jié)果具有更高的泛化能力。

對(duì)于原始數(shù)據(jù)矩陣A(N*M) 斜棚,N代表樣本個(gè)數(shù)阀蒂,M代表維度该窗,對(duì)其進(jìn)行SVD分解:

上式中的delta就是數(shù)據(jù)的奇異值,且delta(1)>delta(2)>delta(3)...蚤霞,通常如果A非常病態(tài)酗失,delta的后面就越趨向于0,delta(1)/delta(n)就是數(shù)據(jù)的病態(tài)程度昧绣,越大說(shuō)明病態(tài)程度越高规肴,無(wú)用的特征越多,通常會(huì)截取前p個(gè)最大的奇異值夜畴,相應(yīng)的U截取前p列拖刃,V截取前p列,這樣A依然是N*M的矩陣贪绘,用這樣的計(jì)算出來(lái)的A代替原始的A兑牡,就會(huì)比原始的A更穩(wěn)定。

那么税灌,提取的出的特征在哪里呢均函?delta(i)*U(:,i)*V(i,:)就是我們最終得到的第i重要的一個(gè)特征。

截?cái)鄥?shù)p的選取是TSVD方法的一個(gè)難點(diǎn)菱涤,確定何時(shí)開(kāi)始舍棄小奇異值得貢獻(xiàn)苞也,統(tǒng)計(jì)學(xué)領(lǐng)域中該技術(shù)被稱為主成分分析,本文在后面的數(shù)值計(jì)算中采用L曲線法求得p粘秆。

------------------------------------------------------------------------------------------------------------

【其他】

機(jī)器學(xué)習(xí)_用SVD奇異值分解給數(shù)據(jù)降維?https://blog.csdn.net/xieyan0811/article/details/78603789

本想把PCA和SVD寫(xiě)在一起如迟,可上篇PCA還沒(méi)寫(xiě)清楚就已經(jīng)4頁(yè)word了。再把SVD和特征工程的內(nèi)容加上攻走,實(shí)在是太長(zhǎng)了氓涣,一下說(shuō)太多也記不住,于是重開(kāi)一篇陋气。

SVD用到的原理和 PCA非常相似劳吠,就不再此贅述了,如果對(duì)特征值巩趁、特征向量相關(guān)問(wèn)題不清楚請(qǐng)參見(jiàn)前篇《機(jī)器學(xué)習(xí)_用PCA主成分分析給數(shù)據(jù)降維》

1. 原理

先回憶一下特征值分解:把向量x往特征向量方向上分解痒玩,然后每個(gè)方向上做伸縮,最后再把結(jié)果加起來(lái)即可议慰。也可以理解為將向量x轉(zhuǎn)到正交坐標(biāo)系蠢古,在各個(gè)坐標(biāo)軸的方向上縮放后,再轉(zhuǎn)換回原來(lái)的坐標(biāo)系别凹。只有方陣才能做特征值分解草讶,因此我們?cè)赑CA中不是直接對(duì)數(shù)據(jù)做分解,而是對(duì)參數(shù)的協(xié)方差矩陣做分解炉菲。

我們知道堕战,任何矩陣都可以分解為三個(gè)矩陣的乘積 A=U * Sigma * VT坤溃,也就是奇異值分解.其中 U 和VT 均是酉陣(正交陣在復(fù)數(shù)域的推廣),而 Sigma 為增廣對(duì)角陣嘱丢。從直觀上講薪介,U 和 VT 可視為旋轉(zhuǎn)操作,Sigma 可視為縮放操作越驻。因此奇異值分解的含義就是說(shuō)汁政,若將矩陣看做一個(gè)變換,那么任何這樣的變換可以看做是兩個(gè)旋轉(zhuǎn)和一個(gè)縮放變換的復(fù)合缀旁,這點(diǎn)和特征值分解基本一樣记劈。它也可以通過(guò)對(duì)Sigma的調(diào)整實(shí)現(xiàn)降維,通過(guò)U和VT在高維和低維間轉(zhuǎn)換并巍。相比特征值分解抠蚣,奇異值分解可處理的不只是協(xié)方差矩陣(方陣),還可以直接處理數(shù)據(jù)履澳。

但SVD也有一些問(wèn)題,比如數(shù)據(jù)多的時(shí)候怀跛,奇異值分解的計(jì)算量會(huì)很大距贷,不像PCA做特征值分解時(shí),矩陣的大小只和屬性個(gè)數(shù)相關(guān)吻谋。

中間略過(guò)一些內(nèi)容忠蝗。。漓拾。

3. 具體應(yīng)用

(1) 圖片壓縮

?把圖片的像素放一個(gè)矩陣?yán)锔笞睿鯯VD分解,只保留Sigma中值大的前N項(xiàng)骇两。則存儲(chǔ)時(shí)只需保存三個(gè)矩陣速种,假設(shè)原圖大小100x100,N為5低千,則原圖要10000點(diǎn)存儲(chǔ)配阵,而拆分后100x5+100x5+5=1005,圖像大小變?yōu)樵瓉?lái)的1/10示血。

(2) 數(shù)據(jù)降維

矩陣中記20人試吃這5種套餐的評(píng)價(jià)(5x20)棋傍,先對(duì)整體數(shù)據(jù)做SVD分解,假設(shè)保留Sigma的前3項(xiàng)难审,把原矩陣轉(zhuǎn)置并和U,Sigma相乘瘫拣,矩陣就從520維變成了35維。再套用各種學(xué)習(xí)算法時(shí)告喊,數(shù)據(jù)就大大縮減了(從高維到低維投影)麸拄。不過(guò)20個(gè)維度變?yōu)?個(gè)維度后派昧,屬性意義也不像之前那么直觀了,我們可以使用VT矩陣把數(shù)據(jù)恢復(fù)到原來(lái)的維度感帅。

------------------------------------------------------------------------------------------------------------------

【其他】

sklearn中的降維:SVD和LSA:http://d0evi1.com/sklearn/svd/

svd和LSA

TruncatedSVD?實(shí)現(xiàn)了奇異值分解(SVD)的一個(gè)變種斗锭,它只需要計(jì)算k個(gè)最大的奇異值,參數(shù)k由用戶指定失球。

當(dāng)TruncatedSVD用于term-doc矩陣上時(shí)(通過(guò)CountVectorizer 或 TfidfVectorizer返回)岖是,該變換就是LSA(潛語(yǔ)義分析),因?yàn)樗鼘⑦@樣的矩陣轉(zhuǎn)換到一個(gè)隱含(semantic)的低維空間上实苞。特別的豺撑,LDA與同義(synonymy)和多義(polysemy)經(jīng)常對(duì)比(兩者都意味著每個(gè)詞都有多個(gè)意思),這造成了term-doc矩陣過(guò)于稀疏黔牵,以至于使用余弦相似度進(jìn)行計(jì)算時(shí)通常不相似聪轿。

注意:LSA經(jīng)常以LSI(latent semantic indexing)的方式被大家熟知,盡管它嚴(yán)格意義上指的是在信息檢索領(lǐng)域用于保存索引猾浦。

數(shù)學(xué)上陆错,TruncatedSVD將訓(xùn)練樣本X,產(chǎn)生一個(gè)低維的近似矩陣Xk:

在這項(xiàng)操作后金赦,

是轉(zhuǎn)換后帶有k個(gè)features的訓(xùn)練集(在API中稱為: n_components)音瓷。

為了在測(cè)試集X上進(jìn)行這樣的轉(zhuǎn)換,我們也需要乘上Vk:

注意:大多數(shù)在自然語(yǔ)言處理(NLP)以及信息檢索(IR)文獻(xiàn)中的LSA方法夹抗,交換了矩陣X的axes绳慎,它的shape為:n_features × n_samples。而我們以不同的方式來(lái)表示以便更好地適配sklearn API漠烧,但奇異值本身是一致的杏愤。

TruncatedSVD和PCA很相似,但不同的是已脓,它在樣本矩陣X上直接運(yùn)行珊楼,而非它們的協(xié)方差矩陣(covariance matrices)。當(dāng)X的列(每個(gè)feature)已經(jīng)從feature值中提取后度液,在結(jié)果矩陣上進(jìn)行TruncatedSVD與PCA相同亥曹。在實(shí)際上術(shù)語(yǔ)中, 這意味著TruncatedSVD轉(zhuǎn)換器接受scipy.sparse 參數(shù)矩陣恨诱,不需要dense矩陣媳瞪;即使對(duì)于中等size的docment集,使用dense矩陣會(huì)填滿整個(gè)內(nèi)存照宝。

TruncatedSVD轉(zhuǎn)換器可以在任何(稀疏)特征矩陣上運(yùn)行蛇受,推薦在LDA文檔處理時(shí)對(duì)原始詞頻TF進(jìn)行tf-idf矩陣轉(zhuǎn)換。特別的厕鹃,次線性歸一化(sublinear scaling)和IDF可以通過(guò)參數(shù)(sublinear_tf=True, use_idf=True) 進(jìn)行設(shè)置兢仰,使得feature的值更接近高斯分布(Gaussian distribution)乍丈,從而補(bǔ)償對(duì)文本數(shù)據(jù)進(jìn)行LSA的誤差。

示例:

Clustering text documents using k-means

參考:

1.http://scikit-learn.org/stable/modules/decomposition.html#lsa

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末把将,一起剝皮案震驚了整個(gè)濱河市轻专,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌察蹲,老刑警劉巖请垛,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異洽议,居然都是意外死亡宗收,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)亚兄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)混稽,“玉大人,你說(shuō)我怎么就攤上這事审胚⌒傺” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵膳叨,是天一觀的道長(zhǎng)洽洁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)懒鉴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任碎浇,我火速辦了婚禮临谱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奴璃。我一直安慰自己悉默,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布苟穆。 她就那樣靜靜地躺著抄课,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雳旅。 梳的紋絲不亂的頭發(fā)上跟磨,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音攒盈,去河邊找鬼抵拘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛型豁,可吹牛的內(nèi)容都是我干的僵蛛。 我是一名探鬼主播尚蝌,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼充尉!你這毒婦竟也來(lái)了飘言?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驼侠,失蹤者是張志新(化名)和其女友劉穎姿鸿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體泪电,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡般妙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了相速。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碟渺。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖突诬,靈堂內(nèi)的尸體忽然破棺而出苫拍,到底是詐尸還是另有隱情,我是刑警寧澤旺隙,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布绒极,位于F島的核電站,受9級(jí)特大地震影響蔬捷,放射性物質(zhì)發(fā)生泄漏垄提。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一周拐、第九天 我趴在偏房一處隱蔽的房頂上張望铡俐。 院中可真熱鬧,春花似錦妥粟、人聲如沸审丘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滩报。三九已至捞高,卻和暖如春夭委,著一層夾襖步出監(jiān)牢的瞬間灌危,已是汗流浹背沛膳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工裂七, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屏箍,地道東北人汞斧。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓瞪浸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沉噩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捺宗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容