【Python学习系列二十三】Scikit_Learn库降维方法(矩阵分解)-PCAFA
1主成分分析PCA
1.1 精確PCA和似然估計
PCA基于最大方差的正交變量分解多維數(shù)據(jù)集。在scikit-learn庫中,PCA的實現(xiàn)是先通過fit方法計算n維的特征值和特征向量,然后通過transformer對象做數(shù)據(jù)轉(zhuǎn)換,轉(zhuǎn)換后的新數(shù)據(jù)可以在n維上得到映射。
可選參數(shù)whiten =True使得可以將數(shù)據(jù)投射到奇異矩陣上,同時將每個屬性縮放到單位方差。這對下步要學(xué)習(xí)的模型來說是非常有用的,如果下步要學(xué)習(xí)的模型具有均質(zhì)性,如RBF內(nèi)核的SVM支持向量機和K-Means聚類算法。
Iris數(shù)據(jù)集有4個特征,PCA后可以用最大方差的2個維度來映射,效果如圖:
PCA對象還給出概率估算,可以根據(jù)其方差量給出數(shù)據(jù)的可能性。因此,PCA也實現(xiàn)了一個評分方法可以用來做交叉驗證。
實現(xiàn)案例:
1)iris數(shù)據(jù)集應(yīng)用LDA和PCA后降維后的2D投射效果比較
http://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-lda-py
2)基于概率PCA和因子分析FA的模型選擇
http://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_fa_model_selection.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-fa-model-selection-py
1.2 增量PCA
PCA對象是非常有用,不過對大容量數(shù)據(jù)集來說也有不足。最大的局限是PCA只支持批量處理,這就意味著所有要處理的數(shù)據(jù)要在主存中完成fit處理。增量PCA對象使用了不同的處理方法,它只處理小型數(shù)據(jù)進行部分計算,就能最大程度接近PCA結(jié)果。
增量PCA使實現(xiàn)非核心主成分分析(out-of-corePrincipal Component Analysis)成為可能,步驟:
1)對從網(wǎng)絡(luò)數(shù)據(jù)庫或硬盤中一次取出來的數(shù)據(jù)塊使用partial_fit方法;
2)使用numpy.memmap在內(nèi)存映射文件上調(diào)用fit方法。
增量 PCA 僅存儲特征和噪聲方差的估計,目的是更新 explained_variance_ratio_incrementally 。這就是為什么內(nèi)存使用取決于每個批次的樣本數(shù)量,而不是在數(shù)據(jù)集中要處理的樣本數(shù)。
案例:
1)增量PCA。
http://scikit-learn.org/stable/auto_examples/decomposition/plot_incremental_pca.html#sphx-glr-auto-examples-decomposition-plot-incremental-pca-py
1.3 基于隨機SVD的PCA
通過拋棄與較低奇異值相關(guān)聯(lián)的分量的奇異向量,能將數(shù)據(jù)投影較低維度空間,同時又保留大部分差異。
舉個例子,如果我們對64x64像素灰度圖片進行臉部識別,數(shù)據(jù)的維度是4096,在如此廣泛的數(shù)據(jù)上訓(xùn)練RBF支持向量機是很慢的。而且,我們知道實際有用的維度遠遠少于4096,因為所有人臉的照片看起來都相像。
樣本集取決于較低維度上的維度數(shù),例如說約200。PCA算法可用于線性變換數(shù)據(jù),同時降低維數(shù)并同時保留最大的差異性。
在這樣的情況下,PCA類使用可選參數(shù)svd_solver='randomized'是非常有用的。在執(zhí)行實際變換時,由于我們將要拋棄大部分奇異向量,所以將計算限制為奇異向量的近似估計是更有效的。
舉個例子,以下顯示的 16 個樣本肖像 ( 以 0.0 為中心 ) 來自 Olivetti 數(shù)據(jù)集。下圖是依據(jù)前 16 個奇異矢量重畫的肖像。由于只需計算前 16 個奇異向量的數(shù)據(jù)集,該數(shù)據(jù)集有 400 個樣本和 4096 個特征,計算時間少于 1 秒。
案例:
1)使用特征臉和SVM進行人臉識別
http://scikit-learn.org/stable/auto_examples/applications/face_recognition.html#sphx-glr-auto-examples-applications-face-recognition-py
2)人臉數(shù)據(jù)集降維
http://scikit-learn.org/stable/auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py
參考:
1)隨機性結(jié)構(gòu)查找:構(gòu)造近似矩陣分解的隨機算法
https://arxiv.org/abs/0909.4061
1.4 內(nèi)核PCA
內(nèi)核 PCA 是 PCA 的擴展,通過使用內(nèi)核函數(shù)實現(xiàn)非線性降維,包括去噪、壓縮和結(jié)構(gòu)預(yù)測(內(nèi)核依賴估計)功能。內(nèi)核 PCA 支持 transform 和 inverse_transform 。
案例:
1)內(nèi)核PCA
http://scikit-learn.org/stable/auto_examples/decomposition/plot_kernel_pca.html#sphx-glr-auto-examples-decomposition-plot-kernel-pca-py
1.5 稀疏PCA和微稀疏PCA
稀疏PCA是PCA的變異,目的是抽取數(shù)據(jù)最優(yōu)重建的稀疏向量集合。微稀疏PCA是稀疏PCA的變異,速度更快但精度低;對于給定的迭代次數(shù),通過迭代該組特征的小量數(shù)據(jù)來達到增加的速度。
PCA的缺點是通過該方法抽取的特征是完全稠密的,即當(dāng)它們表示為原始變量的線性組合時,它們具有非零系數(shù),這給高低維映射帶來困難。在很多情況下,真正的潛在向量可以自然地假設(shè)為稀疏向量,例如在面部識別中,向量可能自然地映射到人臉的部分。
稀疏主成分的產(chǎn)生更簡潔、可解釋的表示、明確強調(diào)哪些原始特征有助于樣本之間的差異。
下面例子闡述了對來自 Olivetti 人臉數(shù)據(jù)集通過稀疏 PCA 抽取 16 個向量,可以看到正則化方法是如何生成很多零特征。此外,數(shù)據(jù)的自然結(jié)構(gòu)導(dǎo)致非零系數(shù)垂直相鄰。
模型不會在數(shù)學(xué)上強制執(zhí)行:每個特征是一個向量,,并沒有垂直相鄰性的概念,除非在人臉友好的可視化中作為64x64像素的圖像。
可視局部的內(nèi)在特征受數(shù)據(jù)固有結(jié)構(gòu)所影響,使得局部模式的重構(gòu)誤差最小化;也存在由稀疏性帶來的規(guī)則,這些規(guī)則考慮到了結(jié)構(gòu)間的相似性和相異性。回顧稀疏 PCA 方法,在使用方面的更多細(xì)節(jié),可以看下文的示例部分。
請注意,對稀疏PCA問題來說有很多不同的提法,其中之一就是本文所提及到的。最優(yōu)問題的解決是基于L1范數(shù)正則懲罰項的PCA問題(字典學(xué)習(xí))。
在幾乎沒有訓(xùn)練樣本可用時, L1正則導(dǎo)致的稀疏性能防止從噪音中學(xué)習(xí)特征。懲罰程度(因而稀疏度)可以通過超參數(shù)alpha進行調(diào)整。小值導(dǎo)致了溫和的正則化因式分解,而較大的值將許多系數(shù)縮小到零。
注意:本著在線算法的原則,由于MiniBatchSparsePCA類并沒有實現(xiàn)partial_fit方法,因為算法沿著特征方向處理,而不是樣本方向。
案例:
1)人臉數(shù)據(jù)集降維
http://scikit-learn.org/stable/auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py
參考:
1)在線詞典學(xué)習(xí)稀疏編碼
http://www.di.ens.fr/sierra/pdfs/icml09.pdf
2)結(jié)構(gòu)化稀疏主成分分析
鏈接失效,可以直接到百度學(xué)術(shù)以文章名搜索該文。
?
2 截斷奇異值分解(TSVD)和潛在語義分析
TSVD是SVD的變異,它只計算k個最大奇異值,其中k是用戶定義的參數(shù)。當(dāng)TSVD應(yīng)用于主題-文檔矩陣時(由CountVectorizer或TfidfVectorizer返回),這種轉(zhuǎn)換被稱為潛在語義分析(LSA),因為它將主題-文檔矩陣轉(zhuǎn)換成低維度的“語義”空間。特別的是,LSA可以消除同義詞和多義詞的影響(這兩個都帶來詞的多重含義),這導(dǎo)致主題-文檔矩陣過度稀疏,并且在諸如余弦相似性的度量下表現(xiàn)出差的相似性。
注意:LSA也被稱為潛在語義索引LSI,盡管嚴(yán)格地說它是指在持久索引中用于信息檢索的目的。
數(shù)學(xué)定義上,TSVD應(yīng)用于訓(xùn)練向量空間X以生成低秩的近似X的向量空間:
注意:自然語言處理(NLP)和信息檢索(IR)文獻中的LSA所采用的大多數(shù)處理方式是交換矩陣的軸,使其具有n_features×n_samples的形狀。這里以與Scikit-learn API相匹配的不同方式提供LSA,但是找到的奇異值是相同的。
TSVD和SVD類似,不同的是,前者是直接計算樣本矩陣而非協(xié)方差矩陣。當(dāng)從特征值中減去x的列(每特征)均值時,得到的矩陣上截斷SVD相當(dāng)于PCA。實際上,這意味著TSVD轉(zhuǎn)換方法接受了scipy.sparse 矩陣,而不需要對它們進行致密,因為即使對于中型文檔集合,致密化也可能填滿內(nèi)存。
當(dāng)TSVD轉(zhuǎn)換方法對任何(稀疏)特征矩陣計算時,建議在LSA /文檔處理設(shè)置中使用tf-idf矩陣進行原始頻率計數(shù)。特別地,應(yīng)該啟用子線性縮放和逆文檔頻率(sublinear_t_t =True,use_idf = True)使特征值更接近高斯分布,補償LSA對文本數(shù)據(jù)的錯誤假設(shè)。
案例:
1)應(yīng)用k-means聚類文本文檔
http://scikit-learn.org/stable/auto_examples/text/document_clustering.html#sphx-glr-auto-examples-text-document-clustering-py
參考:
1)矩陣分解和潛在語義索引
https://nlp.stanford.edu/IR-book/pdf/18lsi.pdf
3 字典學(xué)習(xí)
3.1 預(yù)計算字典的稀疏編碼
SparseCoder對象是一種估計器,可用于將信息轉(zhuǎn)換為來自固定的預(yù)計算字典(例如離散小波基)的原子的稀疏線性組合。因此,該對象不實現(xiàn)fit方法。其轉(zhuǎn)換相當(dāng)于一個稀疏的編碼問題:用盡可能少的字典原子的線性組合表示數(shù)據(jù)。字典學(xué)習(xí)的所有變體實現(xiàn)以下變換方法,可以通過transform_method初始化參數(shù)控制:
1)正交匹配追蹤OMP算法;
2)最小角回歸算法;
3)最小角回歸計算Lasso算法;
4)坐標(biāo)下降法求解Lasso算法;
5)閾值算法;
閾值算法非常快,但不能精準(zhǔn)重構(gòu),在分類任務(wù)的文獻中已被證明是有用的。對于圖像重構(gòu)任務(wù)來說,正交匹配追蹤算法最準(zhǔn)確、無偏見的。
字典學(xué)習(xí)對象通過split_code參數(shù)提供在稀疏編碼的結(jié)果中分離正值和負(fù)值的可能性。當(dāng)使用字典學(xué)習(xí)來提取用于監(jiān)督學(xué)習(xí)的特征時,這是有用的,因為它允許學(xué)習(xí)算法將不同的權(quán)重分配給特定樣本的負(fù)類和正類。
單個樣本的分割代碼的長度為2 * n_components,并使用以下規(guī)則構(gòu)建:首先,計算長度為n_components的正則代碼;然后split_code的第一個n_components條目用正則代碼向量的正部分填充,分割代碼的后半部分用正則代碼向量的負(fù)部分填充,只有一個正號;因此,split_code是非負(fù)數(shù)。
案例:
1)使用預(yù)計算的字典進行稀疏編碼
http://scikit-learn.org/stable/auto_examples/decomposition/plot_sparse_coding.html#sphx-glr-auto-examples-decomposition-plot-sparse-coding-py
3.2通用字典學(xué)習(xí)
詞典學(xué)習(xí)(Dictionary Learning)是一個矩陣因式分解問題,相當(dāng)于找到一個(通常是過完備的)在已fit方法處理的數(shù)據(jù)的稀疏編碼中表現(xiàn)良好的字典。
將數(shù)據(jù)表示為來自過完備字典的稀疏組合的樣本被認(rèn)為是哺乳動物初級視覺皮層的工作方式。因此,應(yīng)用于圖像補丁的字典學(xué)習(xí)已被證明在諸如圖像完成、修復(fù)和去噪以及監(jiān)督識別任務(wù)的圖像處理任務(wù)中給出良好的結(jié)果。
字典學(xué)習(xí)是通過交替更新稀疏代碼解決的優(yōu)化問題,作為解決多個 Lasso 問題的一個解決方案,考慮到字典固定,然后更新字典以最適合稀疏代碼。
在使用這樣一個過程來fit字典之后,transform只是一個稀疏編碼步驟,與所有字典學(xué)習(xí)對象共享相同的實現(xiàn)(參見使用預(yù)計算字典的稀疏編碼)。
以下圖像顯示了從浣熊臉部圖像中提取4x4像素圖像補丁是如何學(xué)習(xí)的。
案例:
1)應(yīng)用字典學(xué)習(xí)進行圖像去噪
http://scikit-learn.org/stable/auto_examples/decomposition/plot_image_denoising.html#sphx-glr-auto-examples-decomposition-plot-image-denoising-py
參考:
1)在線詞典學(xué)習(xí)稀疏編碼
http://www.di.ens.fr/sierra/pdfs/icml09.pdf
3.3 微量字典學(xué)習(xí)
MiniBatchDictionaryLearning類實現(xiàn)了更適合大型數(shù)據(jù)集的字典學(xué)習(xí),算法更快準(zhǔn)確性低。
默認(rèn)情況下,MiniBatchDictionaryLearning將數(shù)據(jù)分成小批量,并通過在指定次數(shù)的迭代中循環(huán)使用小批量,以在線方式進行優(yōu)化。但是,目前它沒有退出迭代的停止條件。
訓(xùn)練器還實現(xiàn)了partial_fit方法,在微批處理中僅迭代一次來更新字典。當(dāng)數(shù)據(jù)開始未準(zhǔn)備好可用,或數(shù)據(jù)未進入內(nèi)存時,該方法適用于在線學(xué)習(xí)。
字典學(xué)習(xí)聚類
注意,當(dāng)使用字典學(xué)習(xí)來提取特征(例如用于稀疏編碼)時,聚類可以是學(xué)習(xí)字典的良好代理。例如,MiniBatchKMeans訓(xùn)練器在計算上是有效的,并使用partial_fit方法實現(xiàn)在線學(xué)習(xí)。
案例:在線學(xué)習(xí)人臉部分字典
4 因子分析
這兩個模型都基本上估計出具有低秩協(xié)方差矩陣的高斯。因為這兩個模型都是概率性的,所以它們可以集成到更復(fù)雜的模型中,例如:因子分析集成。如果假設(shè)隱變量上的非高斯先驗,則得到非常不同的模型(例如Fast ICA)。
因子分析可以產(chǎn)生與 PCA 相似的特征(載荷矩陣的列)。不過,不能對這些特征做出任何一般性的說明(例如他們是否正交)。
因子分析相比于PCA的主要優(yōu)點是可以獨立地對輸入空間的每個方向(異方差噪聲)建模方差:
在異方差噪聲存在的情況下,比概率PCA可做更好的模型選擇:
案例:
1)應(yīng)用概率PCA和因子分析(FA)進行模型選擇
http://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_fa_model_selection.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-fa-model-selection-py
5 獨立成分分析ICA
ICA將多變量信息分解為最大獨立的加性子成分。Scikit-Learn庫中實現(xiàn)了Fast ICA算法。通常,ICA不用于降低維度,而是用于分重復(fù)信息。由于ICA模型不包括噪聲項,因此,為了使模型正確,必須清洗。這可以在內(nèi)部使用whiten參數(shù)或手動使用其中一種PCA變體進行。
ICA 通常用于分離混合信號(稱為盲源分離的問題),如下例所示:
ICA也可以作為一種非線性降維方法,可以找到具有一些稀疏性的特征:
案例:
1)應(yīng)用Fast ICA進行盲源分離
http://scikit-learn.org/stable/auto_examples/decomposition/plot_ica_blind_source_separation.html#sphx-glr-auto-examples-decomposition-plot-ica-blind-source-separation-py
2)2D點圖上的Fast ICA
http://scikit-learn.org/stable/auto_examples/decomposition/plot_ica_vs_pca.html#sphx-glr-auto-examples-decomposition-plot-ica-vs-pca-py
3)人臉數(shù)據(jù)集降維
http://scikit-learn.org/stable/auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py
6 非負(fù)矩陣分解(NMF或NNMF)
NMF是一種替代的分解方法,假設(shè)數(shù)據(jù)和組件是非負(fù)數(shù)的。在數(shù)據(jù)矩陣不包含負(fù)值的情況下,應(yīng)用NMF而不是PCA或其變體。NMF通過對平方Frobenius范數(shù)進行優(yōu)化,將樣本X分解成兩個非負(fù)元素的矩陣W和H:
這個規(guī)范是歐幾里得規(guī)范到矩陣的一個明顯的擴展。(NMF文獻中已經(jīng)提出了其他優(yōu)化目標(biāo),尤其是Kullback-Leibler分歧,但目前尚未實施。)
與PCA不同,通過疊加成分而不減去,以加法方式獲得向量的表示。這種添加模型對于表示圖像和文本是有效的。
在[Hoyer,04]中已經(jīng)觀察到,當(dāng)加以約束時,NMF可以產(chǎn)生基于分量表示的數(shù)據(jù)集,從而可訓(xùn)練模型。
與 PCA 特征臉相比,以下示例顯示了 NMF 從 Olivetti 人臉數(shù)據(jù)集中的圖像中發(fā)現(xiàn)的 16 個稀疏組件:
init屬性確定應(yīng)用的初始化方法,這對方法的性能有很大的影響。NMF實現(xiàn)了非負(fù)雙奇異值分解方法。NNDSVD基于兩個SVD過程,一個近似數(shù)據(jù)矩陣,另一個是使用單位秩矩陣的代數(shù)性質(zhì),得到的部分SVD因子的近似正部分矩陣。基本的NNDSVD算法更適合稀疏分解。其變體NNDSVDa(其中所有零被設(shè)置為等于數(shù)據(jù)的所有元素的平均值)和NNDSVDar(其中將零設(shè)置為小于數(shù)據(jù)平均值的隨機擾動除以100)在稠密案例中適用。
也可以通過設(shè)置init =“random”正確縮放隨機非負(fù)矩陣來初始化NMF。整數(shù)種子或RandomState也可以傳遞給random_state以控制重復(fù)性。
在 NMF 中, L1 和 L2 先驗可以被添加到損失函數(shù)中以使模型正則化。 L2 先驗使用 Frobenius 規(guī)范,而 L1 先驗使用 elementwiseL1 范數(shù)。與 ElasticNet 一樣,我們使用 l1_ratio ( )參數(shù)和 alpha ( )參數(shù)的正則化強度來控制 L1 和 L2 的組合。先驗項:
和正則化目標(biāo)函數(shù):
NMF同時對W和H正則。公共函數(shù)non_negative_factorization允許通過聲明屬性進行更精細(xì)的控制,并且可以僅將W,僅H或兩者正規(guī)化。
案例:
1)人臉數(shù)據(jù)集降維
http://scikit-learn.org/stable/auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py
2)主題提取與非負(fù)矩陣分解和潛在Dirichlet分配
http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-topics-extraction-with-nmf-lda-py
參考:
1)通過非負(fù)矩陣分解學(xué)習(xí)對象的部分
鏈接失效;
2)非負(fù)矩陣因式分解與稀疏約束
http://www.jmlr.org/papers/volume5/hoyer04a/hoyer04a.pdf
3)非負(fù)矩陣分解的投影梯度法
http://www.csie.ntu.edu.tw/~cjlin/nmf/
4)基于SVD的初始化:非負(fù)矩陣分解的開始
http://scgroup.hpclab.ceid.upatras.gr/faculty/stratis/Papers/HPCLAB020107.pdf
5)用于大規(guī)模非負(fù)矩陣和張量因子分解的快速局部算法
鏈接失效。
7潛在狄利克雷分配(LDA)
潛在Dirichlet分配是離散數(shù)據(jù)集(如文本語料庫)的集合的生成概率模型。它也是一個主題模型,用于從文檔集合中發(fā)現(xiàn)抽象主題。
LDA 圖示模型是一個三級貝葉斯模型:
LDA實現(xiàn)在線變分貝葉斯算法,并支持在線和批量更新方法。批處理方法在每次完全傳遞數(shù)據(jù)后更新變分變量,在線方法從微型批量數(shù)據(jù)點更新變分變量。
注意:雖然在線方法保證收斂到局部最優(yōu)點,但最優(yōu)點的質(zhì)量和收斂速度可能取決于小批量大小和學(xué)習(xí)率設(shè)置相關(guān)的屬性。
當(dāng)LDA應(yīng)用于“文檔主題”矩陣時,矩陣將被分解為“主題項”矩陣和“文檔主題”矩陣。雖然“主題”矩陣作為components_?存儲在模型中,但是可以通過transform方法計算“文檔主題”矩陣。
LDA也實現(xiàn)了partial_fit方法,當(dāng)數(shù)據(jù)可以順序提取時使用。
案例:
1)主題提取與非負(fù)矩陣分解和潛在Dirichlet分配
http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-topics-extraction-with-nmf-lda-py
參考:
1)LDA
鏈接失效。
2)LDA在線學(xué)習(xí)
鏈接失效。
3)隨機變量推論
http://www.columbia.edu/~jwp2128/Papers/HoffmanBleiWangPaisley2013.pdf
?
說明:
翻譯自:http://scikit-learn.org/stable/modules/decomposition.html#decompositions
經(jīng)過兩天的努力成稿,里面有很多屬于還是沒有完全翻譯透徹,這和基礎(chǔ)理論還沒掌握有關(guān)系,這部分有些是直譯,有些就參考機器學(xué)習(xí)專欄http://blog.csdn.net/column/details/16315.html來翻譯。
要加強算法基礎(chǔ)數(shù)學(xué)理論的掌握,多閱讀相關(guān)英文文獻,才能提高翻譯水平。
總結(jié)
以上是生活随笔為你收集整理的【Python学习系列二十三】Scikit_Learn库降维方法(矩阵分解)-PCAFA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux基于expect(tcl)实现
- 下一篇: 【正一专栏】评《我的前半生》——我们需要