特徵工程系列之降維:用PCA壓縮數據

引言

降維是關於擺脫「無信息的信息」的同時保留關鍵點。有不少方法能夠定義「無信息」。PCA 側重於線性依賴的概念。咱們將數據矩陣的列空間描述爲全部特徵向量的跨度。若是列空間與特徵的總數相比較小,則大多數特徵是幾個關鍵特徵的線性組合。若是在下一步管道是一個線性模型,而後線性相關的特徵會浪費空間和計算能力。爲了不這種狀況,主成分分析嘗試去經過將數據壓縮成更低維的線性來減小這種「絨毛」子空間。html

在特徵空間中繪製一組數據點。每一個數據點都是一個點,整個數據點集合造成一個 blob。在圖 6-1(a)中,數據點在兩個特徵維度上均勻分佈,blob 填充空間。在這個示例中,列空間具備完整的等級。可是,若是其中一些特徵是其餘特徵的線性組合,那麼該 blob 看起來不會那麼豐滿; 它看起來更像圖 6-1(b),這是一個平面斑點,其中特徵 1 是特徵 2 的重複(或標量倍數)。在這種狀況下,咱們說該 blob 的本徵維數是 1,即便它位於二維空間之中。git

在實踐中,事情不多徹底相同。這更多是咱們看到很是接近平等但不徹底相同的特徵。在這種狀況下,數據 blob 可能如圖 6-1(c)所示。這是一個憔悴的一團。要是咱們想要減小傳遞給模型的特徵的數量,那麼咱們能夠用一個新特徵替換特徵 1 和特徵 2,可能稱之爲位於兩個特徵之間的對線的 1.5 特徵。原始數據集能夠是用一個數字充分表示——沿着特徵方 1.5 的方向——而不是兩個維度和。算法

圖 6-1

圖 6-1網絡

圖 6-1 特徵空間中的數據 blobs(a),滿秩數據 blob(b),低維數據 blob(c),近似低維的數據 blobapp

這裏的關鍵思想是用一些充分總結原始特徵空間中包含的信息的新特徵取代冗餘特徵。當只有兩個特徵的時候新特徵很容易獲得。這在當原始特徵空間具備數百或數千個維度時將變得很難。咱們須要一種數學描述咱們正在尋找的新功能的方法。這樣咱們就可使用優化技術來找到它們。函數

數學上定義「充分總結信息」的一種方法要求就是這樣說新數據 blob 應該保留儘量多的原來的列。咱們是將數據塊壓扁成平坦的數據餅,但咱們但願數據餅儘量在正確的方向上。這意味着咱們須要一種衡量特徵列的方法。特徵列與距離有關。可是在一些數據點中距離的概念有些模糊。能夠測量任意兩對之間的最大距離點。但事實證實,這是一個很是困難的數學優化功能。另外一種方法是測量任意一對點之間的平均距離,或者等價地,每一個點與它們的平均值之間的平均距離,即方差。事實證實,這優化起來要容易得多。(生活很難,統計學家已經學會了採起簡便方法)在數學上,這體現爲最大化新特徵空間中數據點的方差。學習

導航線性代數公式的提示

爲了保持面向線性代數的世界,保持跟蹤哪些數量標量,它們是向量,向量的方向是垂直仍是水平。知道你的矩陣的維度,由於他們常常告訴你感興趣的向量是否在行或列中。繪製矩陣和向量做爲頁面上的矩形,並確保形狀匹配。就像經過記錄測量單位(距離以英里,速度以英里/小時計)同樣,在代數中能夠獲得很大的代數,在線性代數中,全部人都須要的是尺寸。測試

求導

提示和符號

如前所述,讓表示數據矩陣,其中是數據點的數量是特徵的數量。令是包含單個數據點的列向量(因此是中其中一行的轉置)。設表示咱們試圖找到的新的特徵向量或主要份量之一。優化

矩陣的奇異值分解(SVD)

任何矩形矩陣均可以分解爲三個特定形狀和特徵的矩陣:this

 

這裏, 和是正交矩陣(即 而且, 是對角線包含的奇異值的矩陣,它能夠是正的,零的或負的。

假設 有行列且,那麼的大小爲,和的大小爲。(請參閱「奇異值分解(SVD)」來得到矩陣的 SVD 和特徵分解的完整評論。)

公式 6-1 有用的平方和標識

線性投影

讓咱們逐步分解 PCA 的推導。PCA 使用線性投影將數據轉換爲新的特徵空間。 圖 6-2(c)說明了線性投影是什麼樣子。當咱們將投影到 時,投影的長度與二者之間的內積成正比,用 (它與它自己的內積)進行規範歸一化。稍後,咱們將 單位化。因此只有相關部分是分子。

公式 6-2 投影座標

請注意,是一個標量,而 和是列向量。因爲有一堆的數據點,咱們能夠制定全部投影座標的向量在新特徵 。這裏, 是熟悉的數據矩陣,其中每行是數據點,獲得的 是一個列向量。

公式6-4 投影座標向量

圖6-2 PCA 的插圖

圖6-2 PCA 的插圖

(a)特徵空間中的原始數據,(b)以數據爲中心 (c)將數據向量投影到另外一向量上,(d)使投影座標的方差最大化的方向是 的主要特徵向量。

方差和經驗方差

下一步是計算投影的方差。方差定義爲到均值的距離的平方的指望。

公式 6-6 隨機變量的方差

有一個小問題:咱們提出的問題沒有提到平均值 ;它是一個自由變量。一個解決方案是從公式中刪除它,從每一個數據點中減去平均值。結果數據集的平均值爲零,這意味着方差僅僅是 幾何的指望值,減去平均值會產生數據居中效應。 (見圖 6-2())。密切相關的量是兩個隨機變量和之間的協方差。把它看做是方差思想的擴展(單個隨機變量)到兩個隨機變量。

公式 6-8 兩個隨機變量和之間的協方差

當隨機變量的均值爲零時,它們的協方差與它們的線性相一致相關性 。 稍後咱們會聽到更多關於這個概念的信息。

數據上定義了統計量,如方差和指望值分配。

在實踐中,咱們沒有真正的分佈,但只有一堆觀察數據點。這被稱爲經驗分佈,它給咱們一個方差的經驗估計。

公式 6-10 基於觀察獲得的經驗方差

公式法:第一個要素

結合公式 6-2中 的定義,咱們有如下公式用於最大化投影數據的方差。(咱們從中刪除分母n-1經驗方差的定義,由於它是一個全局常數而不是影響價值最大化的地方。)

公式 6-12 主成分的目標函數

這裏的約束迫使 與其自身的內積爲 1,這是至關於說向量必須有單位長度。這是由於咱們只關心 的方向而不是的大小。的大小是 1 沒必要要的自由度,因此咱們把它設置爲任意的值。

主要成分:矩陣-向量表達式

接下來是棘手的一步。公式 6-12中的平方和是至關的繁瑣。它在矩陣向量格式中會更清晰。咱們能作到嗎?答案是確定的。關鍵在於平方和的同一性:一組平方項的和等於向量的平方範數,其元素是那些項,這至關於向量的內積。有了這個標識,咱們能夠用矩陣向量表示法重寫公式 6-12

6-4 主成分的目標函數,矩陣-向量表達式

PCA 的這種表述更明確地提出了目標:咱們尋找一個輸入最大化輸出的標準的方向。這聽起來很熟悉嗎? 答案在於的奇異值分解(SVD)。最優 是 的主要左奇異向量,它也是的主特徵向量。投影數據被稱爲原始數據的主成分。

主成分的通常解決方案

這個過程能夠重複。一旦找到第一個主成分,咱們就能夠從新運行公式 6-14,並添加新向量與之正交的約束條件先前發現的向量.

公式 6-16 目標函數的k + 1個主成分

該解是的第個左奇異向量,按奇異值降序排序。所以,前個主成分對應於前個的左奇異向量。

轉換功能

一旦找到主成分,咱們可使用線性轉換特徵投影。令 是和的 SVD,第列中包含的矩陣前個左奇異向量。的維數爲,其中是個數原始特徵,而且 具備尺寸。 而不是單個投影如公式 6-4 中的向量,咱們能夠同時投影到中的多個向量投影矩陣。

公式 6-18 PCA 投影矩陣

投影座標矩陣易於計算,而且可使用奇異向量彼此正交的事實來進一步簡化。

公式 6-19 簡單的 PCA 轉換

投影值僅僅是第一個按比例縮放的前k個右向奇異向量個奇異值。所以,整個 PCA 解決方案,成分和投影能夠經過的 SVD 方便地得到。

實現 PCA

PCA 的許多推導涉及首先集中數據,而後採起特徵協方差矩陣的分解。但實現 PCA 的最簡單方法是通對中心數據矩陣進行奇異值分解。

PCA 實現步驟

公式 6-20 數據矩陣中心化

,其中`1`是所有是 1 的列向量,而且是包含的平均行數的列向量。 公式 6-21 計算 SVD

公式 6-22 主成分

前個主份量是的前列,即右奇異向量對應於個最大奇異值。

公式 6-23 轉換數據

轉換後的數據只是的前列。(若是須要 whitening,而後經過逆奇異值對向量進行縮放。這須要選擇奇異值不爲零。

使用PCA

讓咱們更好地瞭解 PCA 如何將其應用於某些圖像數據。MNIST 數據集包含從 0 到 9 的手寫數字的圖像。原始圖像是28 x 28像素。使用 scikit-learn 分發圖像的較低分辨率子集,其中每一個圖像被下采樣爲8×8像素。原始數據在 scikit 學習有 64 個維度。咱們應用 PCA 並使用第一個可視化數據集三個主要部分。

示例 6-1:scikit-learn 數字數據集(MNIST 數據集的一個子集)的主成分分析

from sklearn import datasets
from sklearn.decomposition import PCA
# Load the data
digits_data = datasets.load_digits()
n = len(digits_data.images)
print(n)

輸出:1797

# Each image is represented as an 8-by-8 array.
# Flatten this array as input to PCA.
image_data = digits_data.images.reshape((n, -1))
print(image_data.shape)

輸出:(1797, 64)

# Fit a PCA transformer to the dataset.
# The number of components is automatically chosen to account for 
# at least 80% of the total variance.
pca_transformer = PCA(n_components=0.8)
pca_images = pca_transformer.fit_transform(image_data)
print(pca_transformer.explained_variance_ratio_)

輸出:array([0.14890594, 0.13618771, 0.11794594, 0.08409979, 0.05782415, 0.0491691 , 0.04315987, 0.03661373, 0.03353248, 0.03078806, 0.02372341, 0.02272697, 0.01821863])

print(pca_transformer.explained_variance_ratio_[:3].sum())

輸出:0.4030395858767508

# Groundtruth label of the number appearing in each image
labels = digits_data.target
print(labels)

輸出:array([0, 1, 2, ..., 8, 9, 8])

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
%matplotlib notebook
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for i in range(100):
    ax.scatter(
        pca_images[i, 0],
        pca_images[i, 1],
        pca_images[i, 2],
        marker=r'${}$'.format(labels[i]),
        s=64)

ax.set_xlabel('Principal component 1')
ax.set_ylabel('Principal component 2')
ax.set_zlabel('Principal component 3')

輸出:Text(0.5,0,'Principal component 3') 圖 6-3 PCA 預測 MNIST 數據的子集。標記對應於圖像標籤。

前 6 個投影圖像的圖片顯示在圖 6-3 的 3D 圖中。標記對應於標籤。前三個主成分大約佔數據集總差的 40%。這毫不是完美的,但它容許方便的低維可視化。咱們看到 PCA 組相似數字彼此接近。數字 0 和 6 位於同一區域,如同 1 和 17,3 和 9。該空間大體分爲 0,4 和 6 一側,其他數字是其餘類的。

因爲數字之間有至關多的重疊,所以很難清楚的將它們在投影空間中使用線性分類器分開。所以,若是任務是分類手寫數字而且選擇的模型是一個線性分類器,前三個主成分不足以做爲功能。儘管如此有趣的是隻有 3 個能夠捕獲多少個 64 維數據集尺寸。

白化和 PCA

因爲目標函數中的正交性約束,PCA 變換產生了很好的附帶做用:轉換後的特徵再也不相關。再換句話說,特徵向量對之間的內積是零。這很容易使用奇異向量的正交性來證實這一點:結果是包含奇異值的平方的對角矩陣表示每一個特徵向量與其自身的相關性,也稱爲其 L2 範數。

有時候,將特徵的比例標準化爲1.在信號中是有用的處理方式,這就是所謂的白化。 它產生了一組與自身具備單位相關性,而且彼此之間的相關性爲零的結果。在數學上,白化能夠經過將 PCA 變換乘以反奇異值。

公式 6-24 PCA 白化

白化與維度下降無關;能夠獨立執行不受其餘的干擾。例如,零相份量分析(ZCA)(Bell 和 Sejnowski,1996)是一種與 PCA 密切相關的白化轉化,但事實並不是減小特徵的數量。ZCA 白化使用全套主要特徵 沒有減小,而且包括一個額外的乘法回到)。

公式 6-25 ZCA 白化

簡單的 PCA 投影(公式 6-19)在新特徵中產生座標空間,主成分做爲基礎。這些座標表示只有投影向量的長度,而不是方向。乘以主成分給咱們的長度和方向。另外一個有效解釋是,多餘的乘法將座標旋轉回原點原始特徵空間。(是正交矩陣,而且正交矩陣旋轉他們的輸入不拉伸或壓縮)。因此 ZCA 白化產生的數據儘量接近原始數據(歐幾里德距離)。

主成分分析的侷限性

當使用 PCA 進行降維時,必須解決使用多少個主成分()的問題。像全部的超參數同樣,這個數字能夠根據最終模型的質量進行調整。但也有啓發式算法不涉及高度的計算方法。

一種可能性是選擇k來解釋總方差的所需比例。(該選項在 scikit-learn 軟件包的 PCA 中可用)投影到第個份量上:,這是正方形 的第個最大奇異值。的奇異值的有序列表矩陣被稱爲其頻譜。所以,爲了肯定要使用多少個成分,人們能夠對數據矩陣進行簡單的頻譜分析並選擇閾值保留足夠的差別。

基於佔用方差的k選擇

要保留足夠的成分覆蓋數據總方差的80%,請這樣選擇:

另外一種選擇的方法涉及數據集的固有維度。這個是一個更朦朧的概念,但也能夠從頻譜中肯定。基本上,若是譜包含一些很大的奇異值和一些小奇異值,那麼可能只是收穫最大的奇異值並丟棄其他的值。有時候其他的頻譜不是很小,但頭部和尾部值之間有很大差距。這也是一個合理的截止點。 該方法須要光譜進行視覺檢查,所以不能做爲自動化管線的一部分執行。

對 PCA 的一個關鍵批評是轉變至關複雜,而且結果所以很難解釋。主成分和投影向量是真實的價值,多是積極的或消極的。主成分是(居中)行的基本線性組合,以及投影值爲列的線性組合。例如,在股票申報中,每一個因素都是股票收益時間片的線性組合。那是什麼意思?學習因素很難附加人爲的理解緣由。所以,分析師很難相信結果。若是你不能解釋你爲何正在把數十億其餘人的錢放在特定的股票上,你可能會這樣作將不會選擇使用該模型。

PCA 在計算上是繁雜的的。它依賴於 SVD,這是一個昂貴的過程。計算一個矩陣的全 SVD 須要 操做 [Golub 和 Van Loan,2012],假設,即數據點比特徵更多。即便咱們只須要個主成分,計算截斷 SVD(個最大奇異值和向量)仍然須要 操做。這是使人望而生畏的當有大量數據點或特徵時。

以流媒體方式,批量更新或者從 PCA 執行 PCA是 很困難的完整數據的樣本。SVD 的流式計算,更新 SVD 和從一個子樣本計算 SVD 都是很難研究的問題。算法存在,但代價是精度下降。一個含義是人們應該期待將測試數據投影到主成分上時表明性較低在訓練集上找到。隨着數據分佈的變化,人們不得不這樣作從新計算當前數據集中的主成分。

最後,最好不要將 PCA 應用於原始計數(字數,音樂播放次數,電影觀看次數等)。這是由於這種計數一般包含在內大的異常值。(這個機率很是高,有粉絲觀看了 314,582 次「指環王」,這讓其他的人望而生畏計數)。正如咱們所知,PCA 在特徵中查找線性相關性。相關性和方差統計對大的異常值很是敏感; 單一大量的數據可能會改變不少。 因此,首先修剪是個好主意大數值的數據(「基於頻率的濾波」)或應用縮放變換如 tf-idf(第 4 章)或日誌轉換(「日誌轉換」)。

用例

PCA 經過查找線性相關模式來減小特徵空間維度功能之間。因爲涉及 SVD,PCA 計算數千個功能的代價很高。可是對於少許的實值特徵而言,它很是重要值得嘗試。

PCA 轉換會丟棄數據中的信息。所以,下游模型可能會訓練成本更低,但可能不太準確。在 MNIST 數據集上,有一些觀察到使用來自 PCA 的降維數據致使不太準確分類模型。在這些狀況下,使用 PCA 有好處和壞處。

PCA 最酷的應用之一是時間序列的異常檢測。Lakhina,Crovella 和 Diot [2004] 使用 PCA 來檢測和診斷異常互聯網流量。他們專一於數量異常狀況,即當出現波動或波動時減小從一個網絡區域到另外一個網絡區域的通訊量。這些忽然更改可能表示配置錯誤的網絡或協調的拒絕服務攻擊。不管哪一種方式,知道什麼時候何地發生這種變化對互聯網都是有價值的運營商。

因爲互聯網上的交通總量很是之多,孤立的激增規模很小地區很難被發現。一個相對較小的主幹鏈路處理不少交通。 他們的重要看法是,數量異常會影響到多個連接同時(由於網絡數據包須要跳過多個節點才能到達他們的網絡目的地)。將每一個連接視爲一項功能,並將每一個連接的流量數量對待時間步驟做爲測量。數據點是流量測量的時間片跨越網絡上的全部連接。這個矩陣的主成分代表了網絡上的總體流量趨勢。其他的成分表明了剩餘信號,其中包含異常。

PCA 也常常用於金融建模。在這些用例中,它做爲一種類型工做因子分析,一組旨在描述觀察結果的統計方法使用少許未觀察因素的數據變異性。在因素分析中應用程序,目標是找到解釋性成分,而不是轉換數據。

像股票收益這樣的財務數量每每是相互關聯的。股票能夠同時上下移動(正相關),也能夠相反移動方向(負相關)。爲了平衡波動和下降風險,投資組合須要多種不相關的股票其餘。(若是籃子要下沉,不要把全部的雞蛋放在一個籃子裏)尋找強大的相關模式有助於決定投資策略。

股票關聯模式可能在行業範圍內。 例如,科技股可能會上漲並一塊兒下跌,而當油價高企時,航空股每每下跌。 但行業可能不是解釋結果的最好方式。 分析師也在尋找觀察到的統計數據中意外的相關性 特別是文體因素模型 [Connor,1995] 在個體股票時間序列矩陣上運行 PCA 返回尋找共同變化的股票。 在這個用例中,最終目標是主成分自己,而不是轉換後的數據。

從圖像中學習時,ZCA 可做爲預處理步驟。在天然的圖像中,相鄰像素一般具備類似的顏色。ZCA 白化能夠消除這種相關性,這容許後續的建模工做集中在更有趣的圖像上結構。Alex Krizhevsky 的「學習多層特徵」的論文圖像「包含很好的示例,說明 ZCA 影響天然圖片。

許多深度學習模型使用 PCA 或 ZCA 做爲預處理步驟,但事實並不是如此老是顯示是必要的。在「Factored 3-Way Restricted Boltzmann Machines forModeling Natural Images」中,Ranzato et al,評論,「白化不是必要的,但加快了算法的收斂速度。在「An Analysis of Single-Layer Networks in Unsupervised Feature Learning」中,Coates 等人 發現 ZCA 白化是有幫助的對於某些號,但不是所有。(請注意,本文中的模型是無監督功能學習模型。 因此 ZCA 被用做其餘功能的特徵方法工程方法。方法的堆疊和連接在機器中很常見學習管道。)

總結

關於 PCA 須要記住的兩件事是其機制(線性投影)和目標(最大化方差預計數據)。該解決方案涉及協方差的特徵分解矩陣,它與數據矩陣的 SVD 密切相關。人們還能夠記住 PCA 的精神圖像將數據擠壓成像蓬鬆同樣的煎餅可能。PCA 是模型驅動特徵工程的一個示例。(應該當即懷疑當一個目標函數進入時,一個模型潛伏在背景中場景)。這裏的建模假設是方差充分表明了包含在數據中的信息。等價地,該模型尋找線性特徵之間的相關性。這在幾個應用程序中用於減小相關性或在輸入中找到共同因素。PCA 是一種衆所周知的降維方法。但它有其侷限性做爲高計算成本和沒法解釋的結果。它做爲一個預先定義好處理步驟,特別是在特徵之間存在線性相關時。當被看做是一種消除線性相關的方法時,PCA 與其相關白化的概念。其表兄 ZCA 以可解釋的方式使數據變白,可是不會下降維度。

相關文章
相關標籤/搜索