㈠ 常用降維方法之PCA 和 LDA
PCA本質上是將方差最大的方向作為主要特徵,並且在各個正交方向上將數據「離相關」,也就是讓它們在不同正交方向上沒有相關性。而方差最大的那個維度是主成分。
PCA是比較常見的線性降維方法,通過線性投影將高維數據映射到低維數據中,所期望的是在投影的維度上,新特徵自身的方差盡量大,方差越大特徵越有效,盡量使產生的新特徵間的相關性越小。
PCA演算法的具體操作為對所有的樣本進行中心化操作,計算樣本的協方差矩陣,然後對協方差矩陣做特徵值分解,取最大的n個特徵值對應的特徵向量構造投影矩陣。
再舉個栗子:
下面舉一個簡單的例子,說明PCA的過程。
假設我們的數據集有10個二維數據(2.5,2.4), (0.5,0.7), (2.2,2.9), (1.9,2.2), (3.1,3.0), (2.3, 2.7), (2, 1.6), (1, 1.1), (1.5, 1.6), (1.1, 0.9),需要用PCA降到1維特徵。
首先我們對樣本中心化,這里樣本的均值為(1.81, 1.91),所有的樣本減去這個均值向量後,即中心化後的數據集為(0.69, 0.49), (-1.31, -1.21), (0.39, 0.99), (0.09, 0.29), (1.29, 1.09), (0.49, 0.79), (0.19, -0.31), (-0.81, -0.81), (-0.31, -0.31), (-0.71, -1.01)。
現在我們開始求樣本的協方差矩陣,由於我們是二維的,則協方差矩陣為:
對於我們的數據,求出協方差矩陣為:
求出特徵值為(0.0490833989, 1.28402771),對應的特徵向量分別為:
由於最大的k=1個特徵值為1.28402771,對於的k=1個特徵向量為 則我們的W=
我們對所有的數據集進行投影 得到PCA降維後的10個一維數據集為:(-0.827970186, 1.77758033, -0.992197494, -0.274210416, -1.67580142, -0.912949103, 0.0991094375, 1.14457216, 0.438046137, 1.22382056)
在上面的PCA演算法中,我們假設存在一個線性的超平面,可以讓我們對數據進行投影。但是有些時候,數據不是線性的,不能直接進行PCA降維。這里就需要用到和支持向量機一樣的核函數的思想,先把數據集從n維映射到線性可分的高維N>n,然後再從N維降維到一個低維度n', 這里的維度之間滿足n'<n<N。
使用了核函數的主成分分析一般稱之為核主成分分析(Kernelized PCA, 以下簡稱KPCA。假設高維空間的數據是由n維空間的數據通過映射ϕ產生。
則對於n維空間的特徵分解:
映射為:
通過在高維空間進行協方差矩陣的特徵值分解,然後用和PCA一樣的方法進行降維。一般來說,映射ϕ不用顯式的計算,而是在需要計算的時候通過核函數完成。由於KPCA需要核函數的運算,因此它的計算量要比PCA大很多。
這里對PCA演算法做一個總結。作為一個非監督學習的降維方法,它只需要特徵值分解,就可以對數據進行壓縮,去噪。因此在實際場景應用很廣泛。為了克服PCA的一些缺點,出現了很多PCA的變種,比如第六節的為解決非線性降維的KPCA,還有解決內存限制的增量PCA方法Incremental PCA,以及解決稀疏數據降維的PCA方法Sparse PCA等。
PCA演算法的主要優點有:
LDA(線性判別分析,Linear Discriminant Analysis)是另一種常用的降維方法,它是有監督的。LDA在模式識別領域(比如人臉識別,艦艇識別等圖形圖像識別領域)中有非常廣泛的應用,因此我們有必要了解下它的演算法原理。這里需要注意的是,此處的LDA與文本主題模型中的LDA(隱含狄利克雷分布,Latent Dirichlet Allocation)並不相同,他是一種處理文檔的主題模型。
LDA是一種監督學習的降維技術,也就是說它的數據集的每個樣本是有類別輸出的。這點和PCA不同。PCA是不考慮樣本類別輸出的無監督降維技術。
LDA的思想可以用一句話概括,就是「投影後類內方差最小,類間方差最大」。
什麼意思呢? 我們要將數據在低維度上進行投影,投影後希望每一種類別數據的投影點盡可能的接近,而不同類別的數據的類別中心之間的距離盡可能的大。
可能還是有點抽象,我們先看看最簡單的情況。假設我們有兩類數據 分別為紅色和藍色,如下圖所示,這些數據特徵是二維的,我們希望將這些數據投影到一維的一條直線,讓每一種類別數據的投影點盡可能的接近,而紅色和藍色數據中心之間的距離盡可能的大。
以上就是使用LDA進行降維的演算法流程。實際上LDA除了可以用於降維以外,還可以用於分類。一個常見的LDA分類基本思想是假設各個類別的樣本數據符合高斯分布,這樣利用LDA進行投影後,可以利用極大似然估計計算各個類別投影數據的均值和方差,進而得到該類別高斯分布的概率密度函數。當一個新的樣本到來後,我們可以將它投影,然後將投影後的樣本特徵分別帶入各個類別的高斯分布概率密度函數,計算它屬於這個類別的概率,最大的概率對應的類別即為預測類別。
LDA用於降維,和PCA有很多相同,也有很多不同的地方,因此值得好好的比較一下兩者的降維異同點。
這點可以從下圖形象的看出,在某些數據分布下LDA比PCA降維較優。
當然,某些某些數據分布下PCA比LDA降維較優,如下圖所示:
LDA演算法既可以用來降維,又可以用來分類,但是目前來說,主要還是用於降維。在我們進行圖像識別圖像識別相關的數據分析時,LDA是一個有力的工具。下面總結下LDA演算法的優缺點。
LDA演算法的主要優點有:
參考文章: 劉建平老師的博客園
㈡ 降維演算法之LDA(線性判別降維演算法)--有監督
LDA在模式識別領域( 比如人臉識別,艦艇識別等圖形圖像識別領域 )中有非常廣泛的應用,因此我們有必要了解下它的演算法原理。
不同於PCA方差最大化理論, LDA演算法的思想是將數據投影到低維空間之後,使得同一類數據盡可能的緊湊,不同類的數據盡可能的分散 。因此,LDA演算法是一種有監督的機器學習演算法。同時,LDA有如下兩個假設:(1)原始數據根據樣本均值進行分類。(2)不同類的數據擁有相同的協方差矩陣。當然,在實際情況中,不可能滿足以上兩個假設。但是 當數據主要是由均值來區分的時候,LDA一般都可以取得很好的效果 。
(1)計算類內散度矩陣
(2)計算類間散度矩陣
(3)計算矩陣
(4)對矩陣 進行特徵分解,計算最大的d個最大的特徵值對應的特徵向量組成W。
(5)計算投影後的數據點
以上就是使用LDA進行降維的演算法流程。實際上LDA除了可以用於降維以外,還可以用於分類。 一個常見的LDA分類基本思想是假設各個類別的樣本數據符合高斯分布 , 這樣利用LDA進行投影後,可以利用極大似然估計計算各個累唄投影數據的均值和方差,進而得到該類別高斯分布的概率密度函數 。當一個新的樣本到來後,我們可以將它投影,然後將投影後的樣本特徵分別帶入各個類別的高斯分布概率密度函數,計算它屬於這個類別的概率,最大的概率對應的類別即為預測類別。LDA應用於分類現在似乎也不是那麼流行。
class sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
參數:
(1)solver: str類型,默認值為"svd",
svd:使用奇異值分解求解,不用計算協方差矩陣,適用於特徵數量很大的情形,無法使用參數收縮(shrinkage)。
lsqr:最小平方QR分解,可以結合shrinkage使用。
eigen:特徵值分解,可以結合shrinkage使用。
(2)shrinkage: str or float類型,默認值為None
是否使用參數收縮
None:不使用參數收縮
auto:str,使用Ledoit-Wolf lemma
浮點數:自定義收縮比例。
(3)components:int類型,需要保留的特徵個數,小於等於n-1
屬性:
(1)covariances_:每個類的協方差矩陣,shape = [n_features, n_features]
(2)means_:類均值,shape = [n_features, n_feateures]
(3)priors_:歸一化的先驗概率。
(4)rotations_:LDA分析得到的主軸,shape = [n_features, n_component]
(5)scalings_:數組列表,每個高斯分布的方差σ
特點:
降維之後的維數最多為類別數-1。所以當數據維度很高,但是類別數少的時候,演算法並不適用 。LDA演算法既可以用來降維,又可以用來分類。但是目前來說,主要還是用於降維。在我們 進行圖像識別相關的數據分析時,LDA是一個有力的工具 。
優點:
(1) LDA在樣本分類信息依賴均值而不是方差的時候,比PCA之類的演算法較優 。
(2)在降維過程中可以使用類別的先驗知識經驗,而像PCA這樣的無監督學習則無法使用類別先驗知識。
缺點:
(1)LDA不適合非高斯分布樣本進行降維,PCA也存在這個問題。
(2)LDA降維最多降到類別數K-1的維數,如果我們降維的維度大於k-1,則不能使用LDA。 當然目前有一些LDA的進化版演算法可以繞過這個問題 。
(3) LDA在樣本分類信息依賴方差而不是均值的時候,降維效果不好 。
(4)LDA可能過度擬合數據。
二者都有 降維 的作用。
1.左 邊是PCA,屬於無監督方法 ,當數據沒有標簽時可以用它。 右邊是LDA,屬於監督學習方法 。考慮了數據的分類信息,這樣數據在低維空間上就可以分類了,減少了很多的運算量。
2. PCA主要是從特徵的協方差角度考慮,追求的是在降維之後能夠最大化保持數據的內在信息 。它不考慮分類信息,因此降低維度後,信息損失降到最低,但分類上可能會變得更加困難。 LDA追求的是降維後的數據點盡可能容易被區分 。降維後的樣本數據在新的維度空間有最大的類間距離和最小的類內方差,數據在低維空間有最佳的可分離性。
3. PCA降維後的維度數目是和數據維度相關的 ,原始數據是n維,那麼PCA後維度為1、2~n維。 LDA後的維度數目是和類別的個數相關的 ,原始數據是n維,一共有C個類別,那麼LDA後維度為1、2~C-1維。
4. PCA投影的坐標系都是正交的 。 LDA關注分類能力,不保證投影到的坐標系是正交的 。
㈢ 第十五章 降維
第二種類型的無監督學習問題,叫做降維。
這里有一些,你想要使用降維的原因:
① 數據壓縮
數據壓縮不僅能對數據進行壓縮,使得數據佔用較小的內存或硬碟空間。它還能對學習演算法進行加速
② 可視化數據
但首先,讓我們談論降維是什麼。舉個例子,假設我們收集了一個數據集,它有很多很多的特徵,我只在這里繪制兩個特徵。
假如,對我們來說,這兩個特徵,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的一個好的運用。要使用正則化來防止過擬合。
另一個常見的錯誤是,默認地將主要成分分析作為學習過程中的一部分,這雖然很多時候有效果,最好還是從所有原始特徵開始,只在有必要的時候(演算法運行太慢或者佔用太多內存)才考慮採用主要成分分析。
㈣ 第11章 降維
去掉數據集中關聯性不大和冗餘的數據,確保不出現過度適應的前提下降低計算的成本,需要對特徵進行無損規約,數學上叫降維。廣泛用於模式識別、文本檢索以及機器學習領域,主要分為兩類,特徵提取和特徵篩選,前者是高維數據投影到低維空間,後者是特徵子集代替鋒做原始特徵集,包括特徵分級和特徵篩選,分級是找到優化後的特徵子集。
特徵提取可以分成線性抽取和非線性抽取兩種方法,前者是試圖找到一個仿射空間能夠最好的說明數據分布的變化,後者對高維非線性曲線平面分布的數據非常有效。
線性特徵的抽取方法:
首先設定一些標准,然後挑選出滿足標準的特徵。
演算法首先調用一個權重函數得到每個特徵的權重值,權重評價指標是平均精確度下降 importance.type = 1 ,除了上面用的隨機森林,還可以使用 chi.squared, information.gain 。
然後獲取優化的特徵子集,首先5折交叉驗證評估特徵子集的重要性,爬山搜索演算法從原始特徵集中選出優化的特徵子集,也可以選擇其他演算法,比如 forward.search 。還可以使用caret包進行特徵篩選,據說這個包是個寶呀,包羅萬象。
主成分分析是一種應用非常廣泛的線性降維方法,適合數據集包含非常多的特徵,並且特徵間彼此冗餘(相關的情況)。通過將特徵集縮減成一小部分能代表原始特徵集最主要變化的主要特徵分量,實現高維數據到低維數據空間的映射。
特徵選擇過程中會去掉一些彼此關聯但有價值的特徵,需要在特徵製取過程中考慮將這些特徵綜合到單特徵中,PCA採用正交變換將彼此有關行基叢聯的特徵轉化為主成分,以便我們確定方差趨檔櫻勢。
演算法主要包括以下步驟:1)找到平均向量的數據點;2)計算
協方差矩陣;3)計算特徵向量;4)對特徵向量排序並選擇前k個特徵向量;5)構建特徵向量矩陣;最後,將數據樣本轉換成新的子集。
拓展
princomp 是另一個高不成分分析函數,與上面的 prcomp 採用奇異值分解不同,採用相關矩陣或協方差矩陣的特徵值計算方法,一般更習慣用後者。
以上兩個函數均來自stats包,還可以使用psych包中的principal函數進行:
Kaiser方法、scree(碎石測試)和依據挑選規則使用解釋變數比例都可以。碎石測試的主要目的是將主成分結果以碎石圖方式表達,從圖中找到引起曲線斜率變化最快的因素。
主成分為2時,斜率變化最快。也可以使用nfactors以並行分析非圖形方式作Cattell碎石來測試。
biplot繪制數據與原始特徵在前兩個主成分上的投影圖
biplot繪制數據及原始特徵在前兩個主成分上的投影,農業高,教育和檢查低的省份在PC1上得分高;嬰兒死亡率高,農業低的省份在主成分PC2上得分較高。
多維尺度分析通過圖形方式展示多個對象之間的相似或相異程度距離),多維是指映射到一維、二維或多維空間表達CF全家人相對距離,一般使用一或二維空間。
分成計量和非計量兩類,前者是主要考慮如何保證降維後各對象之間的距離盡可能接近它們在原始空間的距離,後者則假設兩個空間中對象的距離排名已知,而且變換後排名不變。
可以通過將投影維度繪制在一個散點圖中比較MDS和PCA的差異,如果MDS採用歐氏距離,投影維度將與PCA完全一致。
奇異值分解是矩陣分解的一種形式,可以將一個矩陣分解為兩個正交矩陣和一個對角矩陣,原始矩陣可由這三個矩陣相乘得到。可以幫助去掉那些從線性代數角度觀察存在線性相關冗餘的矩陣,可以應用在特徵篩選,圖像處理和聚類等。
SVD是一類分解實數或復數矩陣的常見方法,PCA可以被看成SVD的一種特例:
兩個矩陣基本相同。
[圖片上傳失敗...(image-be0ae8-1639570485003)]
圖像壓縮領域應用最為廣泛的標准測試圖像,花花公子當年的模特圖呀!
不知為啥,讀什麼圖片都是負片呢?先繼續:
ISOMAP屬於流形學習方法,支持線性空間到非線性數據結構的轉換,與MDS類似,它也能夠以圖形方式展現對象之間的相似性或相異性(距離),不過,由於數據採用非線性結構表示,以幾何距離代替MDS中有歐氏距離。
ISOMAP是一種等距映射非線性降維方法,如果將計量MDS方法中數據點間成對的歐氏距離替換成鄰接圖間的測地距離,就可以將ISOMAP當做計量MDS方法的擴展。
演算法分為4步:確定鄰近點,構建鄰接圖,計算最短路徑和MDS分析找到數據間的低維嵌入。
擴展
可以將RnavGraph包將圖形作為數據瀏覽的基礎方式來實現高維數據的可視化。
LLE演算法是PCA演算法的擴展,通過嵌入高維空間內的流形映射到低維空間來實現數據壓縮。ISOMAP是全局性非線性降維,LLE主要是局部母性降維演算法,假設每個數據點可以由k個鄰近點的母性組合構成,映射後能保持原來的數據性質。
LLE是一種非線性降維演算法,基於它我們可以得到高維數據在低維空間保持原有數據鄰近嵌入關系的映射。演算法主要分成三步:計算每個點的k個鄰近,然後計算每個鄰近點的權值,使得每個點都能最優地由其鄰近點組合重構,即殘差和最小。
擴展
還可以選擇RDRTollbox包實現非線性降維,支持ISOMAP和LLE演算法。