1. 降維的方法主要有
在分析高維數據時,降維(Dimensionality rection,DR)方法是我們不可或缺的好幫手。
作為數據去噪簡化的一種方法,它對處理大多數現代生物數據很有幫助。在這些數據集中,經常存在著為單個樣本同時收集數百甚至數百萬個測量值的情況。
由於「維度災難」(curse of dimensionality)的存在,很多統計方法難以應用到高維數據上。雖然收集到的數據點很多,但是它們會散布在一個龐大的、幾乎不可能進行徹底探索的高維空間中。
通過降低數據的維度,你可以把這個復雜棘手的問題變得簡單輕松。除去噪音但保存了所關注信息的低維度數據,對理解其隱含的結構和模式很有幫助。原始的高維度數據通常包含了許多無關或冗餘變數的觀測值。降維可以被看作是一種潛在特徵提取的方法。它也經常用於數據壓縮、數據探索以及數據可視化。
雖然在標準的數據分析流程中已經開發並實現了許多降維方法,但它們很容易被誤用,並且其結果在實踐中也常被誤解。
本文為從業者提供了一套有用的指南,指導其如何正確進行降維,解釋其輸出並傳達結果。
技巧1:選擇一個合適的方法
當你想從現有的降維方法中選擇一種進行分析時,可用的降維方法的數量似乎令人生畏。事實上,你不必拘泥於一種方法;但是,你應該意識到哪些方法適合你當前的工作。
降維方法的選擇取決於輸入數據的性質。比如說,對於連續數據、分類數據、計數數據、距離數據,它們會需要用到不同的降維方法。你也應該用你的直覺和相關的領域知識來考慮收集到的數據。通常情況下,觀測可以充分捕獲臨近(或類似)數據點之間的小規模關系,但並不能捕獲遠距離觀測之間的長期相互作用。對數據的性質和解析度的考慮是十分重要的,因為降維方法可以還原數據的整體或局部結構。一般來說,線性方法如主成分分析(Principal Component Analysis, PCA)、對應分析(Correspondence Analysis, CA)、多重對應分析(Multiple Correspondence Analysis, MCA)、經典多維尺度分析(classical multidimensional scaling, cMDS)也被稱為主坐標分析(Principal Coordinate Analysis, PCoA) 等方法,常用於保留數據的整體結構;而非線性方法,如核主成分分析(Kernel Principal Component Analysis, Kernel PCA)、非度量多維尺度分析(Nonmetric Multidimensional Scaling, NMDS)、等度量映射(Isomap)、擴散映射(Diffusion Maps)、以及一些包括t分布隨機嵌入(t-Distributed Stochastic Neighbor Embedding, t-SNE)在內的鄰近嵌入技術,更適合於表達數據局部的相互作用關系。NE技術不會保留數據點之間的長期相互作用關系,其可視化報告中的非臨近觀測組的排列並沒有參考價值。因此,NE的圖表不應該被用於數據的大規模結構的推測
2. 機器學習四大數據分析降維方法詳解
【導讀】近幾年來,隨著人們對數據分析領域的情況愈發了解後,很多大數據分析師利用機器學習四大數據分析降維方法來解決一些數據分析過程中的難題,從而更容易更便捷的工作和避免一些工作中的重復動作和流程,今天小編就對機器學習四大數據分析降維方法進行詳細解讀,希望對大家有所幫助。
就像在擁擠的體育場內找到特定人物並不容易,將所有數據都放在同一個物理位置並不一定會使發現變得容易,另外由於來自原始系統的數據復制緩慢且成本高昂,因此相關數據中只有一小部分傾向於存儲在湖泊中,更為復雜的是,許多公司可能擁有數百個分布在多個本地數據中心和雲提供商之間的數據存儲庫,當涉及數據集成時,以原始格式存儲數據並不會消除使數據適應每個機器學習過程的需求,相反它只是將執行該過程的負擔轉移給了數據科學家,盡管湖中可能具有所需的處理能力,但數據科學家通常不具備集成數據所需的技能。
過去幾年中出現了一些數據准備工具,以使數據科學家可以訪問簡單的集成任務
更復雜的任務仍然需要高級技能。IT部門通常需要通過在數據湖中為特定的ML流程創建新的數據集來進行救援,從而大大減慢了進度,數據虛擬化的好處為了應對這些挑戰,組織已開始應用新流程,例如數據虛擬化,可以提供對任何數據的單一訪問點-無論位於何處,也無論其本機格式如何-都無需先將其復制到中央存儲庫中,提供相同物理數據的不同邏輯視圖,而無需創建其他副本。這提供了一種快速而廉價的方式來提供數據的不同視圖,以滿足每種類型的用戶和應用程序的獨特需求,這些邏輯視圖可以通過使用復雜的優化技術在物理數據之上應用復雜的數據轉換和組合功能來創建,以實現最佳性能。
具體而言,數據虛擬化通過以下方式幫助應對兩個主要挑戰
數據發現使數據科學家可以訪問更多數據,由於無需從原始系統復制數據集即可在系統中使用,因此添加新內容會更快,更便宜。這些工具為實際復制哪些數據提供了完全的靈活性。例如,對於某個過程,您可以選擇從源實時訪問所有數據,而對於另一個過程,則可以選擇首先在物理存儲庫(例如數據湖)中實現所有必需的數據,而對於另一個過程,則可以選擇可以選擇僅體現一部分數據的混合策略(例如,將在流程中頻繁使用或可能對許多流程有用的數據)。
提供的所有數據集提供了可搜索的,可瀏覽的目錄
該目錄包含有關每個數據集的大量元數據、標簽,列說明和使用信息,例如誰使用每個數據集,何時以及如何使用,數據集的內容也可以直接從此目錄中搜索和查詢。
工具根據一致的數據表示和查詢模型公開所有數據
這意味著無論數據最初存儲在關系資料庫,Hadoop集群,SaaS應用程序還是NoSQL系統中,數據科學家都可以看到所有數據,就像將其存儲在單個關系資料庫中一樣。可以通過SQL,REST或OData等標准方法訪問此「虛擬資料庫」,這些方法支持包括R,Scala,Python和Spark
ML等標准工具/語言。
使IT數據架構師和數據科學家之間的職責明確,成本有效地分開
IT數據架構師可以使用DV創建「可重用的邏輯數據集」,以對許多流程有用的方式公開信息,這些邏輯數據集也不需要物理復制數據,因此與傳統方法相比,創建和維護它們的工作量要少得多,然後數據科學家可以對這些可重復使用的數據集進行修改,以滿足每個ML流程的需求。根據定義,可重用的邏輯數據集會處理諸如轉換和性能優化之類的復雜問題,因此數據科學家可以根據需要執行最終(且更輕松)的自定義。
現代工具還包括高級管理功能
因此可以集中實施安全策略,可以保留虛擬數據集的沿襲,並且可以在多個ML流程之間重用常見的轉換和計算,數據虛擬化平台還可以將ML分析的結果無縫地呈現給業務用戶和應用程序,因此可以輕松地將其合並到業務流程和報告中,隨著機器學習和數據湖的不斷擴散並支持現代分析,數據虛擬化是大幅提高數據科學家生產率的關鍵,它使他們可以專注於自己的核心技能,而不是數據管理,使數據科學家可以訪問更多數據並利用基於目錄的數據發現,並且極大地簡化了數據集成,因此組織可以真正從手頭的數據中受益。
以上就是小編今天給大家整理發送的關於「機器學習四大數據分析降維方法詳解」的相關內容,希望對大家有所幫助。想了解更多關於數據分析及人工智慧就業崗位分析,關注小編持續更新。
3. 三種常用降維方法的思想總結
LDA降維和PCA的不同是LDA是有監督的降維,其原理是將特徵映射到低維上,原始數據的類別也能清晰的反應在低維的數據上,也就是低維的數據也可以用來判別分類。
我們先看看二維的情況,我們希望找到一個向量,使得數據點映射到這個向量上後,兩個類間的距離盡可能,兩個類內的樣本的距離盡可能小。這樣就得到了一個目標函數,分子是投影後兩個類間均值的差的平方,我們希望這個值盡可能大,分母是投影後的類的散列值的和,是少除以樣本數量的方差,進一步化簡分子得到投影向量的轉置乘以投影前的類均值差向量的外積再乘以投影向量,分母是投影向量的轉置乘以投影前的類間散列矩陣的和再乘以投影向量,此時我們需要求使得目標函數最小的投影向量,由於投影向量擴大或縮小多少倍,目標函數值不變,那麼我們可以讓分母的模長為1,此時可以使用拉格朗日乘子法,最後求得:當類間散列矩陣的和存在逆矩陣時,投影向量就是類間散列矩陣的和的逆矩陣和投影前的類均值差向量的外積的特徵向量。進一步的,我們化簡等式左邊得到類間散列矩陣的逆矩陣乘以投影前類間均值向量的差乘以一個常數,那麼由於投影向量可以放縮常數倍不影響結果,我們約掉兩邊的常數,得到投影向量等於投影前類均值向量的差左乘散列矩陣的逆矩陣,這就是fisher提出的判別分析
PCA是將原始樣本投影到低維的空間上,使得樣本的絕大部分信息得以保留,並且特徵的維度降低使得模型不易過擬合。思想是:對於原始空間中的m維向量而言,找到k個投影向量使得這m維向量投影到這k個投影向量上的方差最大,保留原始的樣本信息最多,我們首先可以看看找第一個向量,使得在這個方向上的投影方差最大。步驟如下:
1.在投影之前,我們對數據做中心化處理,使得原始數據均值為0
2.計算中心化後的樣本的協方差矩陣,這是個m*m維的矩陣,m表示原始特徵的數目。第i行第j列的元素表示數據中第i列和第j列的協方差
3.計算協方差矩陣的特徵值和特徵向量,特徵向量是單位向量,模長為1,
4.選擇帶有最大特徵值的k個特徵向量
5.計算k個最大特徵值對應的k個特徵,對於每一個特徵,都是用原數據矩陣(n行m列)乘以對應的特徵向量(m行1列,m是原始變數的數目):因此最後的特徵有n行一列,表示每個樣本一個特徵值
對數據進行中心化和歸一化,然後將其投影到某個向量上,計算這一維上的數據點的方差,經過化簡就是投影向量的轉置乘以原始數據的協方差矩陣再乘以投影向量,前提是這個投影向量是單位向量,然後我們令這個方差λ最大,得到最大方差時對應的那個投影向量就是第一個主成分,那麼這個向量如何求解呢?因為這個投影向量是單位向量,那麼等式兩邊左乘以投影向量,得到了λu=Σu,則說明這個投影向量u的方向其實就是這個協方差矩陣的特徵向量,那麼最大方差λ對應的就是Σ的最大特徵值對應的特徵向量的方向,就是第一主成分的方向,第二大特徵值對應的特徵向量就是第二主成分的方向
數據的中心化並不是必要的,但是卻方便了表示和計算,PCA是計算樣本協方差矩陣的,因此中心化或者中心化並不改變特徵向量的方向或者特徵值的大小,因此即使不中心化,PCA一樣的起作用,然而如果你中心化數據了,那麼樣本的協方差矩陣的數學表示就會得以簡化,如果你的數據點就是你的數據矩陣的列,那麼協方差矩陣就表示為xx',多麼簡便啊!技術上,PCA是包括數據中心化這一步的,但是那隻是為了計算協方差矩陣,然後對協方差矩陣做特徵值分解,得到各個特徵值和特徵向量
數據的歸一化也不是必須的,如果某些變數有很大或者很小的方差,那麼PCA將會傾向於這些大的方差的變數,例如如果你增加了一個變數的方差,也許這個變數對第一個主成分會從很小的影響到起主導性的作用,因此如果你想要PCA獨立於這樣的變化,歸一化可以做到,當然,如果你的變數在那個規模上很重要,那麼你可以不歸一化,歸一化在PCA中是很重要的,因為PCA是一個方差最大化的實驗,它就是投影你的原始數據到方差最大化的方向上
(1)如果原始的特徵是高度相關的,PCA的結果是不穩定的;
(2)新的特徵是原始特徵的線性組合,所以缺乏解釋性。
(3)原始數據不一定要是多元高斯分布的,除非你使用這個技術來預測性的建模去計算置信區間
矩陣乘法的作用是線性變換,對一個向量乘以一個矩陣,可以使得這個向量發生伸縮、切變和旋轉。我們都知道對稱矩陣的特徵向量是相互正交的,給定一個對稱矩陣M,可以找到一些這樣的正交向量v,使得Mv=λv,即這個矩陣M對向量做了拉伸變換,λ是拉伸的倍數。那麼對於普通的矩陣呢,才能讓一個原來就是相互垂直的網格平面(orthogonal grid), 線性變換成另外一個網格平面同樣垂直呢?
對於一個正交矩陣,其對應的變換叫做正交變換,這個變換的作用是不改變向量的尺寸和向量間的夾角。正交變換中的旋轉變換只是將變換向量用另一組正交基表示,在這個過程中並沒有對向量做拉伸,也不改變向量的空間位置,只是將原坐標系旋轉得到新的坐標系,那麼這個旋轉矩陣怎麼求呢?對於二維空間中的某個向量而言,其經過旋轉變換的結果就是從用一組坐標系表示到用另外一組坐標系表示,新的坐標系下的坐標各個分量相當於是原坐標系下的坐標的各個分量在新的坐標系的兩個正交基下的投影,或者是相當於將原來的二維向量經過旋轉到了新的坐標,因此相當於對向量左乘一個旋轉矩陣,求出這個矩陣就是旋轉變換的矩陣。剛剛說正交變換不改變向量的空間位置是絕對的,但是坐標是相對的,從原來的坐標系的基向量位置看這個二維向量,到從新的坐標系下看這個向量的坐標是變化的
矩陣乘以一個向量的結果仍是同維數的一個向量。因此,矩陣乘法對應了一個變換,把一個向量變成同維數的另一個向量。
對特定的向量,經過一種方陣變換,經過該變換後,向量的方向不變(或只是反向),而只是進行伸縮變化(伸縮值可以是負值,相當於向量的方向反向)?這就是相當於特徵向量的定義
特徵向量的幾何含義是:特徵向量通過方陣A變換只進行伸縮,而保持特徵向量的方向不變。特徵值表示的是這個特徵到底有多重要,類似於權重,而特徵向量在幾何上就是一個點,從原點到該點的方向表示向量的方向。
一個變換(或者說矩陣)的特徵向量就是這樣一種向量,它經過這種特定的變換後保持方向不變,只是進行長度上的伸縮而已。特徵值分解則是對旋轉和縮放兩種效應的歸並。因為特徵值分解中的A為方陣,顯然是不存在投影效應的。或者說,我們找到了一組基(特徵向量們),在這組基下,矩陣的作用效果僅僅是縮放。即矩陣A將一個向量從x這組基的空間旋轉到x這組基的空間上,並在每個方向進行了縮放,由於前後兩組基都是x,即沒有進行旋轉和投影。
詳細分析特徵值分解的過程:首先由於特徵向量是正交的,特徵向量組成的矩陣是正交方陣,兩邊同時右乘以這個方陣的逆矩陣,可以得到矩陣A的表達式為A=UΛU',兩邊同時右乘一個向量,相當於對這個向量左乘矩陣A,對向量做旋轉或拉伸的變換。這個變換的過程分為三個映射:第一個是將向量x進行了旋轉,它將x用新的坐標系來表示;第二個變換是拉伸變化,對x的每一維分量都進行了特徵值大小的拉伸或縮小變換;第三個是對x做第一個變換的逆變換,因為是第一個矩陣的逆矩陣,也是旋轉變換。在第二個拉伸變換中,可以看出,如果矩陣A不是滿秩的,即有的特徵值為0,那麼這里相當於將x映射到了m維空間的子空間(m是矩陣A的維數m*m),此時矩陣A是一個正交投影矩陣,它將m維向量x映射到了它的列空間。如果A是二維的,那麼可以在二維平面上可以找到一個矩形,使得這個矩形經過A變換後還是矩形
在特徵值分解中,矩陣A要求是方陣,那麼對於一個任意的矩陣m*n,能否找到一組正交基使得經過它變換後還是正交基?這就是SVD的精髓所在
A=UΣU',我們來分析矩陣A的作用: 首先是旋轉 ,U的列向量是一組標准正交基,V也是,這表示我們找到了兩組基。A的作用是將一個向量從V這組正交基向量空間旋轉到U這組正交基向量空間; 其次是縮放 ,當V對向量x做了旋轉以後,相當於把向量x旋轉使其用V這組正交基表示坐標,然後Σ對向量x的每個分量做了縮放,縮放的程度就是Σ的主對角線上的元素,是奇異值; 最後是投影 ,如果U的維數小於V的維數,那麼這個過程還包含了投影
現在的目的是找一組正交基,使得經過A矩陣變換後仍然是一組正交基,假設已經找到這樣一組正交基,那麼對這組正交基經過A變換,如何使其仍然是一組正交基呢?只要使得原來的正交基是A'A的特徵向量即可,|AVi|就是A'A的特徵值的開方,也就是奇異值,然後我們求AVi的單位向量Ui,這些Ui也都是正交的,那麼我們就找到了兩組正交基使得從V這組正交基變換到U這組正交基,V稱作右奇異向量,U稱作左奇異向量,AVi的模是奇異值,我們對V1,...,Vk進行擴充Vk+1,..,Vn(Vk+1,..,Vn是Ax=0的零空間)使得V1,...,Vn是n維空間中的一組正交基,對U1,...,Uk進行擴充Uk+1,...,Um,使得U1,..,Um是m維空間中的一組正交基,這個k值是矩陣A的秩,當A是滿秩時,分解後的矩陣相乘等於A,k越接近於n,則分解後的矩陣相乘結果越接近於A
對矩陣A的映射過程分析:如果在n維空間中找到一個超矩形,使其都落在A'A的特徵向量的方向上,那麼經過A變換後的形狀仍為超矩形。Vi是A'A的特徵向量,Ui是AA'的特徵向量,也是AVi的單位向量,σ是A'A的特徵值的開方,根據這個公式可以計算出矩陣A的奇異值分解矩陣
SVD是將一個相互垂直的網格變換到另外一個相互垂直的網格,按照上面的對於U,V的定位,可以實現用矩陣A將一個向量變換的過程,首先將向量x寫成用V這組正交基表示的形式,然後用矩陣A左乘向量x,並帶入AVi=σiUi,最後可以得到A的分解式,不是矩陣分解式,而是向量分解式,可以看出,如果有的奇異值很小甚至為0,那麼本來有n項相加,就最後只有奇異值不為0的項相加了,假如有k項相加,那麼k越接近於n最後A分解的結果越接近於A
(1)可以用來減少元素的存儲
(2)可以用來降噪:去掉奇異值小的項,奇異值小的我們認為是含有樣本重要信息很少,都是雜訊,因此就把這些信息少的給去掉了
(3)數據分析:比如說我們有一些樣本點用於建模,我們通過SVD將數據裡面的奇異值小的都去掉了,最後得到了分解後的數據,用來做分析,更加准確
我們知道PCA裡面,我們對變數進行降維實際上就相當於對數據矩陣Am*n右乘一個矩陣Pn*r,就得到了Am*r,表示每個樣本的特徵向量只有r維的,和這個矩陣P代表了r個列向量是數據矩陣A的協方差矩陣n*n的最大的r的特徵值對應r個特徵向量,都是n維的。和SVD相比,將SVD的表達式兩邊同時右乘一個Vn*r,這樣等式右邊就Vr*n和Vn*r相乘是單位向量,因為Vn*r是A'A的r個特徵向量,是前r個不為0的特徵值對應的特徵向量,且由於A'A是對稱的,那麼各個特徵向量之間是正交的,這樣就得到了剛剛PCA推導出來的公式
同理,對數據矩陣Am*n左乘一個矩陣Pr*m,就得到了Ar*n,表示每個特徵對應的樣本只有r個,矩陣P代表了r個m維向量,每個向量是讓每個特徵對應的樣本向量所要投影的方向向量。和SVD相比,將SVD兩邊同時左乘以一個矩陣Ur*m,就得到了Ar*n,即在行方向上進行了降維,等式右邊是Ur*m和Um*r相乘為單位向量,因為Um*r是AA'的特徵向量,是AA'的前r個不為0的特徵值對應的特徵向量,是m維的,由於AA'是對稱矩陣,那麼各個特徵向量之間是正交的,這樣就得到了剛剛PCA推導出來的公式
可以看出:
--PCA幾乎可以說是對SVD的一個包裝,如果我們實現了SVD,那也就實現了PCA了
--而且更好的地方是,有了SVD,我們就可以得到兩個方向的PCA,如果我們對A』A進行特徵值的分解,只能得到一個方向的PCA。
4. 第十五章 降維
第二種類型的無監督學習問題,叫做降維。
這里有一些,你想要使用降維的原因:
① 數據壓縮
數據壓縮不僅能對數據進行壓縮,使得數據佔用較小的內存或硬碟空間。它還能對學習演算法進行加速
② 可視化數據
但首先,讓我們談論降維是什麼。舉個例子,假設我們收集了一個數據集,它有很多很多的特徵,我只在這里繪制兩個特徵。
假如,對我們來說,這兩個特徵,x_1 是某物體的厘米長度,另一個特徵x_2 是同一物體的英寸長度。這實際上是一種高度冗餘的表示。
對於這兩個單獨的特徵 x_1 和 x_2,它們表示的都是基本長度。或許我們想做的是,把數據減少到一維。只有一個數字來測量某物體的長度。
這個例子可能有點牽強,這與我在行業中所見的完全是兩回事。
如果你有幾百個或成千上萬的特徵,你很容易就會迷失,自己到底有哪些特徵。有時可能有幾個不同的工程團隊,也許一個工程隊給你二百個特徵,第二工程隊給你另外三百個的特徵,第三工程隊給你五百個特徵。最後加起來你就有一千多個特徵,這時就很難去了解某個特徵是從哪個小組得到的,這時就比較容易產生這與高度冗餘的特徵。
並且,如果這里的 厘米 和 英寸 長度都被四捨五入了,這就是這個例子為什麼不是完美地落在一條直線上。
👆另一個例子:如果你想要調查或做這些不同飛行員的測試——你可能有兩個特徵:x_1 是他們的技能(直升機飛行員);x_2 表示他們是否喜歡飛行。也許這兩個特徵將高度相關。你真正關心的可能是這條紅線的方向。它是一個不同的特徵,用來真正測量飛行員能力的特徵。
還是那句話,如果特徵高度冗餘,那麼你可能真的需要降低維數
如果我們將數據從二維(2D)降到一維(1D),究竟意味著什麼?
現在我把不同的樣本,用不同的顏色標出。在這時,通過降維,我的意思是我想找出這條看起來大多數樣本所在的直線(綠色)。所有數據都投影到這條直線上,通過這種做法,我能夠測量出每個樣本在線上的位置,現在我能做的是建立新特徵 z_1。我們只需要一個數,就能確定z_1所在的位置,也就是說z_1是一個全新的特徵。它能夠指定綠線上每一個點位置。
之前的樣本 x_1,它是一個二維向量。在降維後,我們可用一維向量(即,實數)z_1表示第一個樣本。
總結一下:
如果我們允許一個近似於原始數據集的數據集, 該數據集通過投射原始樣本數據到這個綠色線上而得到。那麼,我們只需要一個實數,就能指定點在直線上的位置。所以,我能夠只用一個數字表示樣本的位置,通過把這些原始樣本都投射到綠線上(這是對原始數據集的一種近似,因為我將這些樣本都投射到了同一條直線上)。這樣(樣本從用二維表示,變為用一個實數表示)就能把內存/數據空間的需求減半。
另外,更有趣也更重要的是。在之前的視頻中,我們將能夠了解到,這么做能夠讓學習演算法運行得更快。
另一個例子,將數據從 3D 降到 2D。
降維的第二個應用:可視化數據
在許多及其學習問題中,如果我們能將數據可視化,我們便能尋找到一個更好的解決方案,降維可以幫助我們。
假使我們有關於許多不同國家的數據,每一個特徵向量都有50個特徵(如GDP,人均GDP,平均壽命等)。如果要將這個50維的數據可視化是不可能的。使用降維的方法將其降至2維,我們便可以將其可視化了。
比如,你可能發現,橫軸(z_1)大致相當於國家的總體規模或者國家的總體經濟活躍程度,所以橫軸代表的是GDP、一個國家的經濟規模。而縱軸大致對應於人均GDP。你可能會發現,這50個 特徵,實際上只偏離為兩個主要維度。(這樣做的問題在於,降維的演算法只負責減少維數,新產生的特徵的意義就必須由我們自己去發現了)
一個特殊的演算法:PAC,也叫做「主成分分析」。它可以用來做降維操作,可以用來實現我們之前所提到的壓縮數據。
主成分分析(PCA)是最常見的降維演算法。
在PCA中,我們要做的是找到一個方向向量(Vector direction),當我們把所有的數據都投射到該向量上時,我們希望投射平均均方誤差能盡可能地小。方向向量是一個經過原點的向量,而投射誤差是從特徵向量向該方向向量作垂線的長度。
PCA 問題的公式描述。換句話說,我們會試著用公式准確地表述PCA的用途。
所以,正式的說,PCA做的就是,它會找到一個低維平面(該例子中,是條直線),然後將數據投影在上面,使這些藍色小線段(即,點到平面的距離)長度平方最小。這個藍色小線段的距離,有時也稱投影誤差。
所以,PCA 所做的就是,它會試圖尋找一個投影平面對數據進行投影,使得能最小化這個距離。
另外在應用PCA 之前,常規的做法是,先進行 均值歸一化,使得特徵量 x_1 和 x_2 其均值為0。並且其數值在可比較的范圍之內。(本例中,我們已經處理過了)
後面會詳細講,PCA背景下的均值歸一化問題的細節。
PCA做的就是,如果想將數據從二維降到一維。我們要試著找一個方向向量,使得向量 u^(i) ∈ R^n (本例中, n = 2,即,u^(i) ∈ R^2)投影到這個方向向量上的投影誤差最小。
更通常的情況是:我們會有N維數據,並且我們想其降到K維,這種情況下,我們不只是想找單個向量來對數據進行投影,而是想尋找K個方向來對數據進行投影,來最小化投影誤差。(我們要做的是,將數據投影到這 k 個向量展開的線性子空間上)
u^(1) 和 u^(2) 兩個向量一起定義了一個二維平面。我們將我們的數據投影到上面。
因此,PCA做的是其視圖找出一條直線,或一個平面,或其他維的空間,然後對數據進行投影,以最小化平方投影。90度投影,或正交投影的誤差。
事實上,PCA不是線性回歸,盡管看上去有一些相似,但是它們確實是兩種不同的演算法。
上圖中,左邊的是線性回歸的誤差(垂直於橫軸投影),右邊則是主要成分分析的誤差(垂直於紅線投影)。
主成分分析最小化的是投射誤差(Projected Error),而線性回歸嘗試的是最小化預測誤差。線性回歸的目的是預測結果,而主成分分析不作任何預測。
PCA將n個特徵降維到k個,可以用來進行數據壓縮,如果100維的向量最後可以用10維來表示,那麼壓縮率為90%。同樣圖像處理領域的KL變換使用PCA做圖像壓縮。但PCA 要保證降維後數據的特性損失最小。
PCA技術的一大好處是對數據進行降維的處理。我們可以對新求出的「主元」向量的重要性進行排序,根據需要取前面最重要的部分,將後面的維數省去,可以達到降維從而簡化模型或是對數據進行壓縮的效果。同時最大程度的保持了原有數據的信息。
PCA技術的一個很大的優點是,它是完全無參數限制的。在PCA的計算過程中完全不需要人為的設定參數或是根據任何經驗模型對計算進行干預,最後的結果只與數據相關,與用戶是獨立的。
但是,這一點同時也可以看作是缺點。如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特徵,卻無法通過參數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高。
主成分分析演算法
在使用PCA之前,首先要做的是,進行數據的預處理。
給定一個交易例子的集合,
預處理:
① 一定要做的一個事情是:執行均值歸一化。
② 依據於你的數據,可能也要進行特徵縮放。
這兩個過程,即在我們有監督學習中,均值標准化過程 與 特徵縮放的過程 是相似的。實際上,確實是相同的過程,除了我們現在是對未標記數據 x^(1) 到 x^(m) 做 均值標准化過程 與 特徵縮放過程。
接下來,如果不同的特徵有非常不相同的縮放,例如 x_1 是房子的尺寸, x_2 是卧室的數量。我們縮放每一個特徵,一個相對的價值范圍。
相對於之前的監督學習:x_j^(i) = ( (x_j^(i) - u_j) / s_j )。 s_j = x_j 預測的最大值 - 最小值。更普遍的,s_j 是特徵 j 的標准偏差。
做完這一系列的數據預處理之後,我們來看PCA演算法
我們能從先前的視頻看到,PCA所做的就是,它嘗試著找到一個 低維 子空間,對數據進行投影,我們希望找到一個向量 u^(k) (比如,從 N 維將到 K 維),是的數據到這個向量的投影誤差平方和最小。
給個提示,是什麼減少了數據平均值的維度??
對於左邊的例子,我們給定的樣本 x^(i) 在 R^2 中(即,兩個維度,x_1^(i), x_2^(i))。我們要做的就是在 R 中(一維)找到一個數據集 z^(i) 來代表我們原始的樣本數據。所以,我們的均值從 2維 降到 1維。
所以,PCA要做的就是,要想出一個方法計算兩個東西:
① 計算向量 u^(k)
② 計算 z^(i)
1,首先,我們要做的是計算這個「協方差(covariance matrix)」,通常用希臘字母 Σ。
① 希臘字母 Σ ,表示矩陣
② 累加和標記
『 [U, S, V] = svd(Sigma); 』:計算 矩陣U = S 和 V 協方差矩陣sigma。
再補充一些細節:這個 協方差矩陣sigma,將會是一個 n*n 的矩陣。
矩陣U 的每一列就是 u^(i) ,即,u ∈ R^(n*n) 。所以,我們想減少數據的維度從 n 維 到 k 維,我們需要做的是提取前 k 個向量。u^1, … , u^k ,這給了我們 k 個方向(構成了一個 k維度的 子空間),即,我們想要投影數據的方向。
有了 u^k 後,我們要做的就是:x ∈ R^n ——> z ∈R^k
我們稱 矩陣U 為 U_rece(n*k 矩陣)。這是 矩陣U 被降維的版本,我們將用它來對我們的數據進行降維。
z = (U_rece)^T * x
(U_rece)^T : k * n 矩陣
x 是 「n 維度向量(即,n * 1)」
所以,z 是 「k 維度向量」
在PCA演算法中,我們將N維特徵減少為K維特徵。這個數字 K 是PCA演算法的一個參數。這個數 K 也被稱為 主成分的數字。或者,我們保留的主成分的數字。
在一般情況下,如何考慮選取這個參數 K ?
我們希望在平均均方誤差與訓練集方差的比例盡可能小的情況下選擇盡可能小的k值。
如果我們希望這個比例小於1%,就意味著原本數據的方差有99%都保留下來了,如果我們選擇保留95%的方差,便能非常顯著地降低模型中特徵的維度了。
99%、95%、90% 都是一些具有代表性的范圍。
對於許多數據集,你會驚訝,為了保留99%的方差,你可以減少維度,但仍然保留大部分的方差。因為對於真實世界的數據來說,許多特徵都是高度相關的。因此,結果證明:對數據進行很多壓縮,仍然可以保留99%的方差。
那麼該如何實現了?
但是,👆這個方法非常低效。
在以前的視頻中,我談論PCA作為壓縮演算法。在那裡你可能需要把1000維的數據壓縮100維特徵,或具有三維數據壓縮到一二維表示。所以,如果這是一個壓縮演算法,應該能回到這個壓縮表示,回到你原有的高維數據的一種近似。
所以,給定的z (i),這可能100維,怎麼回到你原來的表示x (i),這可能是1000維的數組?
我們可以把👆這個過程叫做:原始數據的重構。
我們常常使用PCA演算法對監督學習演算法進行加速。
假使我們正在針對一張 100×100像素的圖片進行某個計算機視覺的機器學習,即總共有10000 個特徵。
最後要注意的一點是,PCA所做的是定義一個從 x 到 z 的映射。這個從 x 到 z 的映射只能通過在訓練集上運行PCA來得到。這個映射(注意,這里說的是映射,而不是PCA演算法)也能夠被應用在 交叉校驗 和 測試集 上的其他樣本中。(即,如果我們有交叉驗證集合測試集,也採用對訓練集學習而來的U_rece。 )
總結一下:當在運行PCA時,僅僅在訓練集中的數據上運行,不能用在交叉驗證和測試集上。但,當你定義了 x 到 z 的映射後,你可以應用這個映射到你的交叉驗證集和你的測試集。
順便說一下,實際上,在許多問題中我們確實能減少數據的維度,大概可以減少到 1/5 或者 1/10,而且仍然保留大部分的方差,幾乎不影響性能。而且使用較低的維度數據,我們的學習演算法通常可以運行的更快。
錯誤的主要成分分析情況:一個常見錯誤使用主要成分分析的情況是,將其用於減少過擬合(減少了特徵的數量)。這樣做非常不好,不如嘗試正則化處理。原因在於PCA不需要使用標簽y,它僅僅使用輸入的 x^(i) ,使用它去尋找低緯數據,來近似你的數據。因此PCA會舍掉一些信息,它扔掉或減少數據的維度,不關心 y 值是什麼。所以如果99%的方差信息被保留,你保留了大部分的方差,那麼這樣使用PCA是可以的。但是它也可能會丟掉一些有價值的信息。
事實證明,只使用正則化來防止過擬合常常會給你帶來更好的結果。因為,當你應用 線性回歸 或者 logistic回歸 或其他的一些方法,進行正則化時,這個最小化問題,實際上是知道 y 的值的,所以不太可能損失掉一些有價值的信息。而PCA不使用標簽,更有可能丟失一些有價值的信息。
因此,總結一下,使用PCA比較好的方式,是用它來提高學習演算法的速度。但是使用PCA來防止過擬合,這不是PCA的一個好的運用。要使用正則化來防止過擬合。
另一個常見的錯誤是,默認地將主要成分分析作為學習過程中的一部分,這雖然很多時候有效果,最好還是從所有原始特徵開始,只在有必要的時候(演算法運行太慢或者佔用太多內存)才考慮採用主要成分分析。
5. 降維分析法概念
這種調查問卷或心理測試很明顯要用因子分析,因為這些被訪者的回答都只是個表象罷了,其實決定他們怎麼回答的是內在的因素,比如人們的自信程度啊等等。
用因子分析,分析出這些潛在的變數後,用這些潛在變數做聚類分析,把被訪者分成幾個群體。
6. (十)PCA降維演算法
主成分分析(Principal components analysis,以下簡稱PCA) 是最重要的降維方法之一。在數據壓縮消除冗餘和數據噪音消除等領域都有廣泛的應用。它可以通過 線性變換 將原始數據變換為一組 各維度線性無關 的表示,以此來提取數據的主要線性分量。需要注意的是,PCA一般只用於線性數據降維,對於非線性數據一般採用KPCA。
降維就是找出數據里最主要的方面,用數據里最主要的方面來代替原始數據,並且希望損失盡可能的小。首先看幾張圖,有一個直觀的認識。
這裡面,把橢圓看成是數據:
基於這個知識,如果我們想對數據進行降維的話,比如圖1的兩個維度的數據降成一維,我們可以選擇保留X1這個維度的數據,因為在這個維度上蘊含的信息量更多。同理,圖2就可以保留x2這個維度的數據。但是,問題來了,圖3應該保留哪個維度的數據呢?答案是保留哪個維度都不好,都會丟失較大的信息量。但是,如果我們把圖3的坐標軸旋轉一下
比較容易看出,圖3在新的坐標軸下就能進行降維了。
所以,第一,變換正確的坐標軸(基);第二,保留方差最大的幾個軸作為主成分,這樣的做法就是PCA的核心思想。
從前文可以看出,理想的坐標軸是要求數據投在新坐標軸後,盡可能的分散,也就是數據的方差最大。然後每次選擇方差最大的軸作為主成分。
將前文2維降1維的例子擴展到更高維度,還有一個問題需要解決,考慮三維降到二維問題。與之前相同,首先我們希望找到一個方向使得投影後方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應該是「幾乎重合在一起」,顯然這樣的維度是沒有用的,因為發生了大量的信息重復,起不到降維的作用,因此,應該有其他約束條件——就是正交。 PCA要求軸與軸之間是正交的,也就是不同維度的信息相關性為0。
在表示相關性中,相關系數與協方差是等價的,這里為了方便計算,使用協方差。下面是協方差公式,當協方差為0時,表示兩個特徵a,b線性不相關。
可以發現,當a=b時,協方差公式就變成了方差公式,方差是特殊的協方差。如果運氣更好,特徵a與b的平均數都為0,那麼公式會進一步簡化,得到:
所以說,為了計算方便,PCA降維前,一般都要求將所有特徵屬性中心化,即平均數為0。
因為PCA要求,同一軸內方差最大,不同軸協方差為0,如何把它們放在一塊呢?這里就引入了協方差矩陣的概念:
假設有m個樣本,每個樣本特徵維度是2,每個特徵都經過中心化處理:
我們發現協方差矩陣的對角線是方差,而且是對稱矩陣。方差和協方差都放在了一個矩陣裡面,只需對這個矩陣優化,使它除了對角線的其餘元素都為0,就可以了,美滋滋。
我們知道矩陣乘法,本質上就是一種線性變換的過程。而正交基矩陣的乘法,則是坐標系變換的過程。設原空間的數據為X,協方差矩陣為C,經過正交基矩陣P,得到了新坐標系下的數據Y,即Y=PX。那麼新坐標系下的協方差矩陣D是怎樣的呢?
我們發現,新舊空間的協方差矩陣是有關系的,而且都和變換矩陣P有關系。問題就轉化成了,能不能找到一個矩陣P,使得新空間下的協方差矩陣的非對角線元素都為0.
首先,原始數據矩陣X的協方差矩陣C是一個實對稱矩陣,它有特殊的數學性質:
也就是說,P就是是協方差矩陣的特徵向量單位化後按行排列出的矩陣,其中每一行都是C的一個特徵向量。 如果設P按照中特徵值的從大到小,將特徵向量從上到下排列,則用P的前K行組成的矩陣乘以原始數據矩陣X,就得到了我們需要的降維後的數據矩陣Y 。
其實,經過數學上的推導的,我們就可以知道,特徵值對應的特徵向量就是理想中想取得正確的坐標軸,而特徵值就等於數據在旋轉之後的坐標上對應維度上的方差。
由於協方差矩陣的維度和特徵相同,所以在進行特徵值分解時,得到的特徵值數目不會超過特徵的數目。
在學習線性代數時,我們都會學矩陣的特徵值分解,我們知道一個方陣A經過 特徵值分解 後就得到 特徵向量 和 特徵值 了。那麼,這個所謂的特徵值和特徵向量到底是什麼東西呢?
很多人都會說是那個經典的式子:
首先給出概念上的一種解釋。所謂的特徵值和特徵向量,最重要的是理解「特徵」這兩個字,特徵向量翻譯為eigen vector, eigen這個單詞來自德語,本義是在「本身固有的,本質的」。純數學的定義下,並不能很明白地理解到底為什麼叫做特徵值和特徵向量。但是舉一個應用例子,可能就容易理解多了。
在圖像處理中,有一種方法就是特徵值分解。我們都知道圖像其實就是一個像素值組成的矩陣,假設有一個100x100的圖像, 對這個圖像矩陣做特徵值分解,其實是在提取這個圖像中的特徵,這些提取出來的特徵是一個個的向量,即對應著特徵向量。而這些特徵在圖像中到底有多重要,這個重要性則通過特徵值來表示。 比如這個100x100的圖像矩陣A分解之後,會得到一個100x100的特徵向量組成的矩陣Q,以及一個100x100的只有對角線上的元素不為0的矩陣E,這個矩陣E對角線上的元素就是特徵值,而且還是按照從大到小排列的(取模,對於單個數來說,其實就是取絕對值),也就是說這個圖像A提取出來了100個特徵,這100個特徵的重要性由100個數字來表示,這100個數字存放在對角矩陣E中。 在實際中我們發現,提取出來的這100個特徵從他們的特徵值大小來看,大部分只有前20(這個20不一定,有的是10,有的是30或者更多)個特徵對應的特徵值很大,後面的就都是接近0了,也就是說後面的那些特徵對圖像的貢獻幾乎可以忽略不計。
我們知道,圖像矩陣 A 特徵值分解後可以得到矩陣 P 和矩陣 E (特徵值對角矩陣):
我們可以看到,在只取前20個特徵值和特徵向量對圖像進行恢復的時候,基本上已經可以看到圖像的大體輪廓了,而取到前50的時候,幾乎已經和原圖像無異了。明白了吧,這就是所謂的矩陣的特徵向量和特徵值的作用。
所以歸根結底,特徵向量其實反應的是矩陣A本身固有的一些特徵,本來一個矩陣就是一個線性變換,當把這個矩陣作用於一個向量的時候,通常情況絕大部分向量都會被這個矩陣A變換得「面目全非」,但是偏偏剛好存在這么一些向量,被矩陣A變換之後居然還能保持原來的樣子,於是這些向量就可以作為矩陣的核心代表了。於是我們可以說:一個變換(即一個矩陣)可以由其特徵值和特徵向量完全表述,這是因為從數學上看,這個矩陣所有的特徵向量組成了這個向量空間的一組基底。而矩陣作為變換的本質其實不就把一個基底下的東西變換到另一個基底表示的空間中么?
參考:
https://blog.csdn.net/hjq376247328/article/details/80640544
https://blog.csdn.net/hustqb/article/details/78394058
https://blog.csdn.net/woainishifu/article/details/76418176
7. 用sklearn進行降維的七種方法
在實際的應用中,有時候我們會遇到數據的維度太少,我們需要新生成新的維度,可以用我們之前的分享( 如何自動化進行特徵工程 );有時候維度太多,這時候我們就需要降維了。降維的方法有許多,我們這里介紹了sklearn中介紹的7種,供大家學習和收藏。
主成分分析(PCA)用於將多維的數據集分解為一組具有最大方差的連續正交分量。在sklearn這個包中,PCA是一個transformer對象,使用fit方法可以選擇前n個主成分,並且用於投射到新的數據中。
PCA有兩種實現方式,一種是特徵值分解去實現,一種是奇異值分解去實現。特徵值分解是一個提取矩陣特徵很不錯的方法,但是它只是對方陣而言的,如果不使用SVD,PCA只會尋找每個特徵的中心,但並不會對數據進行縮放(scaled)。使用參數whiten=True ,可以將數據投射到奇異空間中,並且將每個組分縮放到方差為1,這個對於後續分析中,假設每個特徵是isotropy 是很有幫助的,例如SVM和Kmeans聚類。
PCA不僅僅是對高維數據進行降維,更重要的是經過降維去除了雜訊,發現了數據中的模式。PCA把原先的n個特徵用數目更少的m個特徵取代,新特徵是舊特徵的線性組合,這些線性組合最大化樣本方差,盡量使新的m個特徵互不相關。
SVD是一種矩陣分解法,把一個大矩陣分解成易於處理的形式,這種形式可能是兩個或多個矩陣的乘積。
參數
例子2:獲取每個主成分與特徵的關系
PCA雖然很有用,但是需要將數據全部都存入內存,因此當當要分解的數據集太大,會導致內存很大。這時候,增量主成分分析(IPCA)通常用作主成分分析(PCA)的替代,可以通過部分計算的方式,獲得跟PCA一樣的結果。
IPCA使用與輸入數據樣本數無關的內存量為輸入數據建立低秩近似。它仍然依賴於輸入數據功能,但更改批量大小可以控制內存使用量。
該函數,增加了一個batch_size的參數,用來控制批次,其餘都一樣,至此不再贅述。
實例
對於大型矩陣的分解,我們往往會想到用SVD演算法。然而當矩陣的維數與奇異值個數k上升到一定程度時,SVD分解法往往因為內存溢出而失敗。因此,Randomized SVD演算法,相比於SVD,它更能適應大型矩陣分解的要求,且速度更快。
此外,在某些場景下,我們期望丟掉某些lower sigular values,來達到減少噪音,保留盡可能多的方差,從而達到更好的預測效果。比如人臉的識別,如果是64X64的像素,那麼整個維度有4096個。我們利用這個方法,可以保留重要的維度,從而利於後續的分析。
使用 svd_solver='randomized' 可以實現隨機化的SVD,來去掉部分的奇異矩陣。
主成分分析(Principal Components Analysis, PCA)適用於數據的線性降維。而核主成分分析(Kernel PCA,KPCA)可實現數據的非線性降維,用於處理線性不可分的數據集。kernel的選擇有 {'linear', 'poly', 'rbf', 'sigmoid', 'cosine', 'precomputed'},默認是'linear'。
詳細說明見官方說明,與普通的PCA差不多。
SparsePCA 期望找到一組可以最優地重構數據的稀疏主成分。稀疏性的大小由參數alpha給出的L1懲罰系數來控制。Mini-batch sparse PCA是sparsePCA的變種,提高了速度,但是降低了精度。
主成分分析(PCA)的缺點是,該方法提取的成分是一種密集表達式,即用原始變數的線性組合表示時,它們的系數是非零的。這可能會使解釋模型變得困難。在許多情況下,真實的基礎分量可以更自然地想像為稀疏向量;例如,在人臉識別中,主成分會只包含部分的圖像,映射到人臉的某些部分。稀疏主成分產生了一種更簡潔的、可解釋的表示,清楚地強調是哪些原始特徵導致了樣本之間的差異。
通過調節alpha來調整懲罰度,alpha越大,越導致許多系數為0。
TruncatedSVD是普通SVD的一個變種,只計算用戶指定的前K個奇異值。TSVD通常用於語義分析中,是LSA的其中的一部分,可以解決一詞多義和一義多詞的問題。
LSA潛在語義分析的目的,就是要找出詞(terms)在文檔和查詢中真正的含義,也就是潛在語義,從而解決上節所描述的問題。具體說來就是對一個大型的文檔集合使用一個合理的維度建模,並將詞和文檔都表示到該空間,比如有2000個文檔,包含7000個索引詞,LSA使用一個維度為100的向量空間將文檔和詞表示到該空間,進而在該空間進行信息檢索。而將文檔表示到此空間的過程就是SVD奇異值分解和降維的過程。降維是LSA分析中最重要的一步,通過降維,去除了文檔中的「噪音」,也就是無關信息(比如詞的誤用或不相關的詞偶爾出現在一起),語義結構逐漸呈現。相比傳統向量空間,潛在語義空間的維度更小,語義關系更明確。
使用例子如下:
用事先預定義好的字典來對矩陣進行稀疏化編碼,達到降維和簡化的目的。就像人類的所有語言都是由單片語成一樣,因此使用已知的詞典可以減少維度;其次,稀疏化可以減少計算的成本,讓後續的計算更快。
這個對象沒有fit的方法,transformation方法會將數據表示為盡可能少的字典原子的線性組合。可以用transform_method來控制初始化參數,有以下幾種:
使用的函數為sklearn.decomposition.DictionaryLearning,會找到一個可以將fitted data足夠好稀疏化的字典。
將數據表示為一個overcomplete的字典這個過程,同大腦處理數據的過程類似。這個方法在圖像補丁的字典學習已被證明在諸如圖像完成、修復和去噪以及監督識別任務的圖像處理任務中給出良好的結果。
使用函數為sklearn.decomposition.MiniBatchDictionaryLearning,是一種快速的,但是精確度降低的版本,適應於大數據集合。
默認情況下,MiniBatchDictionaryLearning將數據分成小批量,並通過在指定次數的迭代中循環使用小批量,以在線方式進行優化。但是,目前它沒有退出迭代的停止條件。也可以用partial_fit來實現小批次的fit。
從變數中提取共性因子。
因子分析要求原有變數間具有較強的相關性,否則,因子分析無法提取變數間的共性特徵,如果相關系數小於0.3,則變數間的共線性較小,不適合因子分析;因子分析得到因子和原變數的關系,因此能夠對因子進行解釋。
因子分析可以產生與 PCA 相似的特徵(載荷矩陣的列)。不過,不能對這些特徵做出任何一般性的說明(例如他們是否正交)。
使用的函數為sklearn.decomposition.FactorAnalysis。
使用的函數為sklearn.decomposition.FastICA,ICA可以提取出一系列的主成分,彼此最大的獨立。因此,ICA一般不用於降維,而用於區分疊加信號。ICA不考慮noise,為了使模型正確,必須使用whitening,可以使用whiten這個參數。
ICA 通常用於分離混合信號(稱為盲源分離的問題),也可以作為一種非線性降維方法,可以找到具有一些稀疏性的特徵。
主成分分析假設源信號間彼此非相關,獨立成分分析假設源信號間彼此獨立。
主成分分析認為主元之間彼此正交,樣本呈高斯分布;獨立成分分析則不要求樣本呈高斯分布。
非負矩陣分解,顧名思義就是,將非負的大矩陣分解成兩個非負的小矩陣。在數據矩陣不包含負值的情況下,應用NMF而不是PCA或其變體。
NMF可以產生可以代表數據的主成分,從而可以來解釋整個模型。
參數init,可以用來選擇初始化的方法,不同的方法對結果會有不同的表現。
在PCA處理中,假使將特徵降維為600個,那麼降維後的每個人臉都包含了600個特徵(所以我們看到降維後的人臉有種「伏地魔」的感覺 ,這是因為降維處理相當於刪去了部分細節特徵,導致一部分信息丟失,在圖片中最直觀的體現就是變模糊)。而在NMF的處理中,這1000個特徵相當於是被分離了。相當於,一張人臉是由鼻子、耳朵等這些獨立的特徵疊加出來的。
LDA是文檔主題生成模型,對離散數據集(如文本語料庫)的集合的生成概率模型。它也是一個主題模型,用於從文檔集合中發現抽象主題。LDA是一種非監督機器學習技術,可以用來識別大規模文檔集(document collection)或語料庫(corpus)中潛藏的主題信息。
sklearn.decomposition.LatentDirichletAllocation是用於進行LDA的函數。
1、 https://www.jianshu.com/p/1adef2d6dd88
2、 https://www.jianshu.com/p/e574e91070ad
3、 https://scikit-learn.org/stable/moles/decomposition.html#decompositions
4、 https://shankarmsy.github.io/posts/pca-sklearn.html
5、 https://mp.weixin.qq.com/s/Tl9ssjmGdeyNrNuIReo1aw
6、 https://www.cnblogs.com/eczhou/p/5433856.html
7、 https://scikit-learn.org/stable/auto_examples/applications/plot_face_recognition.html#sphx-glr-auto-examples-applications-plot-face-recognition-py
8、 https://blog.csdn.net/fkyyly/article/details/84665361 LSA(Latent semantic analysis)
9、 https://blog.csdn.net/fjssharpsword/article/details/74964127
10、 https://www.jianshu.com/p/e90900a3d03a