特徵工程之降維算法

  1. 數據降維簡介html

    數據降維即對原始數據特徵進行變換,使得特徵的維度減小。git

    依據降維過程是否能夠用一個線性變換表示,降維算法能夠分爲線性降維算法和非線性降維算法,下圖展現了各類降維算法及其類別:github

    yeG8oD.png

    降維的必要性算法

    1. 多重共線性和預測變量之間相互關聯。多重共線性會致使解空間的不穩定,從而可能致使結果的不連貫。
    2. 高維空間自己具備稀疏性。一維正態分佈有68%的值落於正負標準差之間,而在十維空間上只有2%。
    3. 過多的變量,對查找規律形成冗餘麻煩。
    4. 僅在變量層面上分析可能會忽略變量之間的潛在聯繫。例如幾個預測變量可能落入僅反映數據某一方面特徵的一個組內。

    降維的目的app

    1. 減小預測變量的個數。
    2. 確保這些變量是相互獨立的。
    3. 提供一個框架來解釋結果。相關特徵,特別是重要特徵更能在數據中明確的顯示出來;若是隻有兩維或者三維的話,更便於可視化展現。
    4. 數據在低維下更容易處理、更容易使用。
    5. 去除數據噪聲。
    6. 下降算法運算開銷。
  2. SVD框架

    對於n階實對稱矩陣A,若非零向量x和數\(\lambda\)使得:函數

    \[Ax=\lambda x \]

    則稱x和\(\lambda\)爲A的特徵向量和對應的特徵值。對於A的n個特徵值\(\lambda_1\le\lambda_2...\le\lambda_n\)以及對應的特徵向量\(w_1,w_2,...,w_n\),能夠將A作以下分解:性能

    \[A=W\Sigma W^T \]

    其中W爲特徵向量排列成的矩陣,\(\Sigma\)爲特徵值排列成的對角陣。通常咱們會把W的這n個特徵向量標準化,即知足\(w^Tw=1\),此時W的n個特徵向量爲標準正交基,知足\(W^TW=I\)學習

    上面的特徵分解須要A爲實對稱矩陣,對於通常矩陣\(A\in\mathbb{R}^{n*m}\),SVD能夠對其作相似分解:優化

    \[A=U\Sigma V^T \]

    其中U是一個\(n*n\)的矩陣,\(\Sigma\)是一個\(n*m\)的矩陣,除了主對角線上的元素之外全爲0,主對角線上的每一個元素都稱爲奇異值,V是一個\(m*m\)的矩陣。U和V都是單位正交陣,即知足\(U^TU=I,V^TV=I\)。U被稱爲左奇異矩陣,V被稱爲右奇異矩陣。

    能夠經過求\(AA^T\)的特徵向量獲得左奇異矩陣U,求\(A^TA\)的特徵向量獲得右奇異矩陣V,對兩者的任意特徵值開方可獲得\(\Sigma\)

    對於奇異值,它跟咱們特徵分解中的特徵值相似,在奇異值矩陣中也是按照從大到小排列,並且奇異值的減小特別的快,在不少狀況下,前10%甚至1%的奇異值的和就佔了所有的奇異值之和的99%以上的比例。也就是說,咱們也能夠用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。所以,奇異值分解能夠應用於圖像壓縮等領域。

  3. PCA

    通常認爲方差越大的維度越有區分度,方差越小的維度區分度越小,越有多是噪音。PCA的目標就是尋找一組新的正交基\(w_1,w_2,...,w_d\)(從m維降低到d維), 使得m維數據點在該正交基構成的平面上投影后,投影數據點間的距離最大, 即數據間的方差最大,且各個新維度間相關度最小,即協方差爲0。

    設原數據通過零均值化後爲\(X\in\mathbb{R}^{n*m}\),則其協方差矩陣爲\(C=X^TX\),設PCA的投影矩陣爲\(P\in \mathbb{R}^{m*d}\),投影后新的數據爲\(Y\in\mathbb{R}^{n*d}\),則有:

    \[Y=XP \]

    新數據的協方差矩陣爲:

    \[\frac{1}{n}Y^TY=P^T(\frac{1}{n}X^TX)P=P^TCP \]

    根據矩陣P的各列爲單位正交基的約束條件,以最大化方差爲優化目標,由拉格朗日乘子法能夠獲得P即爲矩陣C的前d個最大的特徵值所對應的特徵向量。

    PCA的具體推導過程涉及帶矩陣約束的最優化問題,能夠參考https://datawhalechina.github.io/pumpkin-book/#/chapter10/chapter10,其中關於矩陣的跡的微分能夠參考https://blog.csdn.net/hqh45/article/details/50920904

    以上是從最大方差角度理解,PCA也能夠從最小化平方偏差理解,能夠參考https://www.cnblogs.com/xiaobingqianrui/p/10755867.html

    PCA的求解過程涉及協方差矩陣\(C=\frac{1}{n}X^TX\)的特徵值分解,通常使用對X進行SVD來提升效率,由於存在某些SVD方法能夠不進行特徵值分解。

    設X的SVD分解爲:

    \[X=U\Sigma V^T \]

    其中奇異值按照從大到小排列,V的前k列即對應C的前d個最大的特徵值所對應的特徵向量。

    PCA的總體算法流程爲:

    輸入:原始數據\(X\in\mathbb{R}^{n*m}\);低維空間維數d。

    過程:

    1. 對X的各列進行零均值化,若各列數量級相差很大(量綱等緣由致使),則還須要對數據進行標準化或歸一化使其縮放到一樣大小的區間;
    2. 求處理後的X的奇異值分解\(X=U\Sigma V^T\),其中奇異值按照從大到小排列;
    3. 取右奇異矩陣的錢d列構成變換矩陣P;
    4. 求降維後的數據\(Y=XP\)

    輸出:
    低維數據矩陣\(Y=XP\)

  4. LDA

    不一樣於PCA,LDA降維時須要類別信息,所以LDA是一種監督降維算法。PCA的思想能夠用一句話歸納,「內間均值差最大,類內方差最小」。如下圖的二維數據爲例:

    ynhLi8.png

    咱們但願將這些數據投影到一維的一條直線,讓每一種類別數據的投影點儘量的接近,而紅色和藍色數據中心之間的距離儘量的大。上圖中提供了兩種投影方式,從直觀上能夠看出,右圖要比左圖的投影效果好,由於右圖的黑色數據和藍色數據各個較爲集中,且類別之間的距離明顯。左圖則在邊界處數據混雜。

    當類別數爲2時,設類標分別爲0,1,兩類數據的數目分別爲\(N_0,N_1\),均值分別爲:

    \[m_j=\frac{1}{N_j}\sum_{x\in X_j}x,(j=0,1) \]

    LDA選擇的降維直線的方向向量爲\(w\),由於平移並不影響投影點的相對位置,因此能夠設該直線過原點。則降維後的點的新座標爲:

    \[y=w^Tx \]

    降維後的均值和方差分別爲:

    \[\mu_j=\frac{1}{N_j}\sum_{y\in Y_j}y=\frac{1}{N_j}\sum_{x\in X_j}w^Tx =w^Tm_j,(j=0,1) \\ s_j^2=\sum_{y\in Y_j}(y-\mu_j)^2=\sum_{x\in X_j}(w^Tx-w^Tm_j)(w^Tx-w^Tm_j)^T \\ =w^T(\sum_{x\in X_j}(x-m_j)(x-m_j)^T)w \]

    此處方差並未除以樣本數目。LDA但願最大化類間均值,最小化類內方差,則能夠令優化目標爲:

    \[\arg\max_w J=\frac{(\mu_1-\mu_2)^2}{s_1^2+s_2^2} \\ =\frac{w^T(m_0-m_1)(m_0-m_1)^Tw}{w^T(\sum_{x\in X_0}(x-m_0)(x-m_0)^T+\sum_{x\in X_1}(x-m_1)(x-m_1)^T)w} \]

    令:

    \[S_b=(m_0-m_1)(m_0-m_1)^T \\ S_w=\sum_{x\in X_0}(x-m_0)(x-m_0)^T+\sum_{x\in X_1}(x-m_1)(x-m_1)^T \]

    \(S_b\)爲類間散度矩陣,\(S_w\)爲類內散度矩陣,則:

    \[\arg\max_w J=\frac{w^TS_bw}{w^TS_ww} \]

    上式是廣義瑞利熵的形式,其最大值對應的w爲\(S_w^{-1}S_b\)的最大特徵值所對應的特徵向量。

    當類別數大於2時,\(W=(w_1,w_2,...,w_d)\)\(S_b\)稍有變化,設類別數目爲N,則:

    \[S_b=\sum_{j=1}^NN_j(m_j-m)(m_j-m)^T \\ m=\frac{1}{\sum_{j=1}^NN_j}\sum_{j=1}^NN_jm_j \]

    有一個問題是此時\(W^TS_bW\)\(W^TS_wW\)均爲矩陣,沒法做爲一個標量函數來優化,通常來講,咱們能夠用其餘的一些替代優化目標來實現。常見的一個LDA多類優化目標函數定義爲:

    \[\arg\max_W J=\frac{tr(W^TS_bW)}{tr(W^TS_wW)}=\sum_{i=1}^d\frac{w_i^TS_bw_i}{w_i^TS_ww_i} \]

    上式右邊即爲d個廣義瑞利熵之和,其最大值對應了\(S_w^{-1}S_b\)的前d個最大特徵值所對應的特徵向量。

    因爲:

    \[S_b=\sum_{j=1}^NN_j(m_j-m)(m_j-m)^T \\ =[\sqrt{N_1}(m_1-m),...,\sqrt{N_N}(m_N-m)][\sqrt{N_1}(m_1-m),,...,\sqrt{N_N}(m_N-m)]^T \\ \sum_{i=1}^N\sqrt{N_i}\sqrt{N_i}(m_i-m)=0 \]

    所以\(rank(S_b)=N-1\),因此:

    \[rank(S_w^{-1}S_b)=\min(rank(S_w^{-1}),rank(S_b))=rank(S_b)=N-1 \]

    所以\(S_w^{-1}S_b\)最多有N-1個特徵向量,即LDA降維最多降到類別數N-1的維數,若是咱們降維的維度大於N-1,則不能使用LDA。

    LDA的總體算法流程爲:

    輸入:原始數據\(D=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}\);低維空間維數d,\(d\le N-1\),N爲類別數目。

    過程:

    1. 計算類間散度矩陣\(S_b\),類內散度矩陣\(S_w\)
    2. 計算\(S_w^{-1}S_b\)
    3. \(S_w^{-1}S_b\)進行特徵值分解,獲得其最大的d個特徵值對應的特徵向量,將其拼接成矩陣\(W=(w_1,w_2,...,w_d)\)
    4. 對每個樣本\(x_i\),計算其降維後的座標\(z_i=W^Tx_i\)

    輸出:
    低維數據\(D'=\{(z_1,y_1),(z_2,y_2),...,(z_n,y_n)\}\)

    實際上LDA除了能夠用於降維之外,還能夠用於分類。一個常見的LDA分類基本思想是假設各個類別的樣本數據符合高斯分佈,這樣利用LDA進行投影后,能夠利用極大似然估計計算各個類別投影數據的均值和方差,進而獲得該類別高斯分佈的機率密度函數。當一個新的樣本到來後,咱們能夠將它投影,而後將投影后的樣本特徵分別帶入各個類別的高斯分佈機率密度函數,計算它屬於這個類別的機率,最大的機率對應的類別即爲預測類別。

  5. PCA VS LDA

    相同點:

    • 二者都可以對數據進行降維。

    • 二者在降維時均使用了矩陣特徵分解的思想。

    • 二者都假設數據符合高斯分佈。

    不一樣點:

    • LDA是有監督的降維方法,而PCA是無監督的降維方法

    • LDA降維最多降到類別數N-1的維數,而PCA沒有這個限制。

    • LDA除了能夠用於降維,還能夠用於分類。

    • LDA選擇分類性能最好的投影方向,而PCA選擇樣本點投影具備最大方差的方向。

  6. MDS

    MDS的核心思想是使得原始空間中的樣本距離在低維空間中得以保持。

    設原始空間的距離矩陣爲\(D\in\mathbb{R}^{n*n}\),其中n爲樣本數量,D的第i行第j列的元素\(dist_{ij}\)表示樣本\(x_i\)與樣本\(x_j\)間的距離,MDS但願把數據降維成\(Z\in\mathbb{R}^{d*n},d<m\),其中m爲數據的原始維度數目,d爲新維度數目。而且MDS但願保持樣本間的距離不變,即:

    \[dist_{ij}=||z_i-z_j||_2 \]

    則:

    \[dist_{ij}^2=||z_i-z_j||_2^2=||z_i||_2^2+||z_j||_2^2-2z_i^Tz_j \]

    令內積矩陣\(B=Z^TZ\),則:

    \[b_{ij}=z_i^Tz_j \\ dist_{ij}^2=b_{ii}+b_{jj}-2b_{ij} \]

    因爲在新維度對數據進行平移並不會改變樣本間的距離,所以能夠對Z進行零均值化,即令:

    \[\sum_{i=1}^nz_i=0 \]

    則:

    \[\sum_{j=1}^ndist_{ij}^2=nb_{ii}+\sum_{j=1}^nb_{jj}-2\sum_{j=1}^nb_{ij} \\ =nb_{ii}+tr(B)-2z_i^T\sum_{j=1}^nz_j=nb_{ii}+tr(B) \\ \sum_{i=1}^ndist_{ij}^2=nb_{jj}+\sum_{i=1}^nb_{ii}-2\sum_{i=1}^nb_{ij} \\ =nb_{jj}+tr(B)-2(\sum_{i=1}^nz_i^T)z_j=nb_{jj}+tr(B) \\ \sum_{i=1}^n\sum_{j=1}^ndist_{ij}^2=\sum_{i=1}^n(nb_{ii}+tr(B)) \\ =2ntr(B) \]

    令:

    \[dist_{i.}^2=\frac{1}{n}\sum_{j=1}^ndist_{ij}^2=b_{ii}+\frac{1}{n}tr(B) \\ dist_{.j}^2=\frac{1}{n}\sum_{i=1}^ndist_{ij}^2=b_{jj}+\frac{1}{n}tr(B) \\ dist_{..}^2=\frac{1}{n^2}\sum_{i=1}^n\sum_{j=1}^ndist_{ij}^2=\frac{2}{n}tr(B) \]

    則易獲得:

    \[b_{ij}=-\frac{1}{2}(dist_{ij}^2-dist_{i.}^2-dist_{.j}^2+dist_{..}^2) \]

    便可以由原始距離矩陣Z求得內積矩陣B。對B進行特徵值分解能夠獲得n個特徵值\(\lambda_1\le\lambda_2...\le\lambda_n\)以及對應的特徵向量\(w_1,w_2,...,w_n\),能夠將B作以下分解:

    \[B=W\Sigma W^T \]

    其中W爲特徵向量排列成的矩陣,\(\Sigma\)爲特徵值排列成的對角陣。選取B的前d大的特徵值以及其特徵向量構成\(\Sigma'\)\(W'\),則B能夠近似爲:

    \[B\approx W'\Sigma'W'^T \]

    Z能夠表示爲:

    \[Z=\Sigma'^{\frac{1}{2}}W'^T \]

    MDS的總體算法流程爲:

    輸入:距離矩陣\(D\in\mathbb{R}^{n*n}\),其元素\(dist_{ij}\)表示樣本\(x_i\)與樣本\(x_j\)間的距離;低維空間維數d。

    過程:

    1. 計算\(dist_{ij}^2,dist_{i.}^2,dist_{.j}^2,dist_{..}^2\)
    2. 根據\(b_{ij}=-\frac{1}{2}(dist_{ij}^2-dist_{i.}^2-dist_{.j}^2+dist_{..}^2)\)計算矩陣B;
    3. 對矩陣B做特徵值分解;
    4. 取B的d個最大特徵值以及對應特徵向量構成\(\Sigma'\)\(W'\)

    輸出:
    低維數據矩陣\(Z=\Sigma'^{\frac{1}{2}}W'^T\),每列是一個樣本的低維座標。

  7. Isomap

    流形學習假設所處理的數據點分佈在嵌入於外維歐式空間的一個潛在的流形體上,或者說這些數據點能夠構成這樣一個潛在的流形體。Isomap正是基於這一假設。

    下圖就是一個數據嵌入在流行體的例子,傳統的例如PCA和MDS降維方法效果就不是十分理想。此流行體其實是一個二維分佈的平面,在三維空間中流行體上點與點之間的距離不能使用傳統的歐式空間的距離來計算,而應該用測地線距離表明這兩個點的實際距離。

    yu3Cxs.jpg

    Isomap基於前面所講的MDS算法,所不一樣之處在於Isomap使用最短路徑來計算樣本點在高維空間中的距離。

    Isomap的總體算法流程爲:

    輸入:樣本集\(D=\{x_1,x_2,...,x_n\}\);近鄰數k;低維空間維數d。

    過程:

    1. 對於任意樣本點i,找到其最近的k個鄰居,計算點i與這k個點的距離,以此構建鄰接圖和鄰接矩陣;
    2. 使用Floyd或Dijkstra算法計算任意兩點之間的最短路徑距離,從而構建距離矩陣;
    3. 將距離矩陣輸入到MDS算法獲取輸出。

    輸出:
    樣本點在低維空間的投影\(\{z_1,z_2,...,z_n\}\)

  8. 參考連接

    http://www.javashuo.com/article/p-ssivdpxh-db.html

    https://blog.csdn.net/qq_38800089/article/details/109333248

    http://www.javashuo.com/article/p-wankypvl-dy.html

    https://www.cnblogs.com/poxiaoge/p/7074841.html

    https://zhuanlan.zhihu.com/p/52591878

相關文章
相關標籤/搜索