【ML特征工程】第 6 章 :降维:用 PCA 压缩数据薄饼
???🔎大家好,我是Sonhhxg_柒,希望你看完之后,能對你有所幫助,不足請指正!共同學習交流🔎
📝個人主頁-Sonhhxg_柒的博客_CSDN博客?📃
🎁歡迎各位→點贊👍 + 收藏?? + 留言📝?
📣系列專欄 - 機器學習【ML】?自然語言處理【NLP】? 深度學習【DL】
?
?🖍foreword
?說明?本人講解主要包括Python、機器學習(ML)、深度學習(DL)、自然語言處理(NLP)等內容。
如果你對這個系列感興趣的話,可以關注訂閱喲👋
文章目錄
直覺
導航線性代數公式的技巧
推導
線性投影
方差和經驗方差
主要成分:第一個配方
主成分:矩陣向量公式
主成分通解
轉換特征
實施主成分分析
行動中的主成分分析
Whitening?和ZCA
PCA 的注意事項和局限性
根據核算方差選擇 K
用例
概括
借助自動數據采集和特征生成技術,可以快速獲取大量特征。? 但并非所有這些都有用。在第3章和第4章中,我們討論了基于頻率的過濾和特征縮放作為修剪掉無信息特征的方法。現在我們將仔細研究使用主成分分析(PCA) 進行特征降維的主題。
本章標志著進入基于模型的特征工程技術。在此之前,大多數技術都可以在不引用數據的情況下定義。例如,基于頻率的過濾可能會說,“去掉所有小于n的計數”,該過程無需數據本身的進一步輸入即可執行。
另一方面,基于模型的技術需要來自數據的信息。例如,PCA 是圍繞數據的主軸定義的。在前面的章節中,數據、特征和模型之間總是有著明確的界線。從這一點開始,差異變得越來越模糊。這正是當前特征學習研究令人興奮的地方。
直覺
降維是關于在保留關鍵位的同時去除“無信息信息”。有很多方法可以定義“無信息”。PCA 關注線性相關的概念。在“矩陣剖析”中,我們將數據矩陣的列空間描述為所有特征向量的跨度。如果列空間與特征總數相比很小,那么大部分特征都是少數關鍵特征的線性組合。線性相關的特征會浪費空間和計算能力,因為信息本可以用更少的特征進行編碼。為了避免這種情況,主成分分析試圖通過將數據壓縮到低維線性子空間中來減少這種“絨毛”。
描繪特征空間中的數據點集。每個數據點都是一個點,整組數據點形成一個斑點。在圖 6-1?(a) 中,數據點均勻地分布在兩個特征維度上,并且 blob 填滿了空間。在此示例中,列空間具有滿秩。然而,如果其中一些特征是其他特征的線性組合,那么斑點看起來就不會那么豐滿;它看起來更像圖 6-1?(b),一個扁平的斑點,其中特征 1 是特征 2 的副本(或標量倍數)。在在這種情況下,我們說 blob 的固有維數是 1,即使它位于二維特征空間中。
實際上,事物很少彼此完全相等。我們更有可能看到非常接近相等但不完全相等的特征。在這種情況下,數據 blob 可能類似于圖 6-1?(c)。這是一個消瘦的斑點。如果我們想減少傳遞給模型的特征數量,那么我們可以用一個新特征替換特征 1 和特征 2,可能稱為特征 1.5,它位于原始兩個特征之間的對角線上。然后可以用一個數字(特征 1.5 方向上的位置)而不是兩個數字f1和f2來充分表示原始數據集。
圖 6-1。特征空間中的數據塊:(a) 全秩數據塊,(b) 低維數據塊,和 (c) 近似低維數據塊
這里的關鍵思想是用一些新特征替換冗余特征,這些新特征充分總結了原始特征空間中包含的信息。當只有兩個特征時,很容易判斷新特征應該是什么。當原始特征空間有數百或數千個維度時,這就更難了。我們需要一種方法來數學描述我們正在尋找的新功能。然后我們可以使用優化技術來找到它們。
從數學上定義“充分總結信息”的一種方法是說新數據塊應盡可能多地保留原始數據量。我們正在將數據塊壓成一個扁平的煎餅,但我們希望煎餅在正確的方向上盡可能大。這意味著我們需要一種測量體積的方法。
體積與距離有關。但是一團數據點中的距離概念有些模糊。人們可以測量任意兩對點之間的最大距離,但事實證明這是一個很難進行數學優化的函數。另一種方法是測量點對之間的平均距離,或者等效地,測量每個點與其均值(即方差)之間的平均距離。事實證明這更容易優化。(生活是艱難的。統計學家已經學會了走方便的捷徑。)從數學上講,這轉化為最大化新特征空間中數據點的方差。
導航線性代數公式的技巧
要在線性代數的世界中保持方向性,請跟蹤哪些量是標量,哪些是向量,以及向量的方向——垂直或水平。了解矩陣的維度,因為它們通常會告訴您感興趣的向量是在行中還是在列中。在頁面上將矩陣和向量繪制為矩形,并確保形狀匹配。正如通過注意測量單位(距離以英里為單位,速度以英里/小時為單位)可以在代數中走得更遠一樣,在線性代數中,所有需要的都是維度。
推導
和以前一樣,讓X表示n?×?d數據矩陣,其中n是數據點的數量,d是特征的數量。令x為包含單個數據點的列向量。(因此x是X中其中一行的轉置。)讓v表示我們試圖找到的新特征向量之一或主成分。
矩陣的奇異值分解 (SVD)
任何矩形矩陣都可以分解為三個具有特定形狀和特征的矩陣:
X?=?UΣV?T
這里,U和V是正交矩陣(即U?T?U?= I和V?T?V?= I)。Σ是包含X奇異值的對角矩陣,奇異值可以是正數、零或負數。假設X有n行和d列并且n ≥ d。那么U的形狀為 n?×?d,而Σ和V的形狀為d?×?d。(參見“奇異值分解 (SVD)”以全面了解 SVD 和矩陣的特征分解。)
線性投影
讓我們休息一下下一步步推導PCA。圖 6-2說明了整個過程。
圖 6-2。PCA 示意圖:(a) 特征空間中的原始數據;(b) 集中數據;(c) 將數據向量 x 投影到另一個向量 v 上;(d) 投影坐標的最大方差方向(等于 X?T?X 的主特征向量)
PCA 使用線性投影將數據轉換到新的特征空間。圖 6-2?(c) 說明了線性投影的樣子。當我們將x投影到v上時,投影的長度與兩者之間的內積成正比,由v的范數(它與自身的內積)歸一化。稍后,我們將約束v具有單位范數。因此,唯一相關的部分是分子——我們稱它為v(參見公式 6-1)。
?公式 6-1。投影坐標
z =?x?T?v
請注意,z是標量,而x和v是列向量。由于有一堆數據點,我們可以將它們在新特征v上的所有投影坐標的向量z公式化(等式 6-2)。這里,X是熟悉的數據矩陣,其中每一行都是一個數據點。生成的z是一個列向量。
公式 6-2。投影坐標向量
z?=?X?v
方差和經驗方差
下一步是計算投影的方差。方差定義為均值平方距離的期望值(公式 6-3)。
公式 6-3。隨機變量 Z 的方差
Var(?Z?) = E[?Z?– E(?Z?)]?2
有一個小問題:我們對問題的表述沒有提及均值E(Z);它是一個自由變量。一種解決方案是通過從每個數據點中減去平均值來將其從等式中刪除。生成的數據集的均值為零,這意味著方差只是Z?2的期望值。從幾何上講,減去均值具有使數據居中的效果。(見圖 6-2?(ab)。)
密切相關的量是兩個隨機變量Z?1和Z?2之間的協方差(公式 6-4)。將此視為將(單個隨機變量的)方差概念擴展到兩個隨機變量。
公式 6-4。兩個隨機變量 Z?1和 Z?2之間的協方差
Cov(?Z?1?,?Z?2?) = E[(?Z?1?– E(?Z?1?)(?Z?2?– E(?Z?2?)]
當隨機變量的均值為零時,它們的協方差與它們的線性相關E[Z?1?Z?2?]一致。稍后我們將更多地討論這個概念。
方差和期望等統計量是在數據分布上定義的。實際上,我們沒有真正的分布,只有一堆觀察到的數據點,z?1?, ...,?z?n。這是稱為經驗分布,它為我們提供了方差的經驗估計(公式 6-5)。
公式 6-5。Z 基于觀測值 z 的經驗方差
主要成分:第一個配方
結合公式 6-1中z?i的定義,我們有最大化的公式公式 6-6中給出的預測數據的方差。(我們從經驗方差的定義中刪除分母n?–1,因為它是一個全局常數,不會影響出現最大值的位置。)
公式 6-6。主成分的目標函數
?這里的約束強制w與自身的內積為1,相當于說向量必須有單位長度。這是因為我們只關心方向而不關心w的大小。w的大小是一個不必要的自由度,因此我們通過將其設置為任意值來擺脫它。
主成分:矩陣向量公式
接下來是棘手的步驟。公式 6-6中的平方和項相當繁瑣。矩陣向量格式會更清晰。我們能做到嗎?答案是肯定的。關鍵在于平方和恒等式:一堆平方項的和等于以這些項為元素的向量的范數平方,相當于向量與自身的內積。有了這個恒等式,我們可以用矩陣向量表示法重寫公式 6-6,如公式 6-7所示。
公式 6-7。主成分的目標函數,矩陣向量公式
PCA 的這個公式更清楚地呈現了目標:我們尋找最大化輸出范數的輸入方向。這聽起來很熟悉嗎?答案在于X的奇異值分解(SVD)?。事實證明,最佳w是X的主左奇異向量,它也是X?T?X的主特征向量。投影數據稱為原始數據的主成分。
主成分通解
這個過程可以重復。找到第一個主成分后,我們可以重新運行公式 6-7,并添加新向量與先前找到的向量正交的約束(請參見公式 6-8)。
公式 6-8。k+1 主成分的目標函數
解是X的第k?+1 個左奇異向量,按奇異值降序排列。因此,前k個主成分對應于X的前k個左奇異向量。
轉換特征
一旦找到主成分,我們就可以使用線性投影來轉換特征。設X?=?UΣV?T是X的 SVD ,V?k是其列包含前k個左奇異向量的矩陣。X的維度為 n?×?d,其中d是原始特征的數量,而V?k的維度為d?×?k。與公式 6-2中的單個投影向量不同,我們可以同時投影到投影矩陣(公式 6-9)中的多個向量上。
公式 6-9。PCA投影矩陣
?
?投影坐標矩陣很容易計算,并且可以使用奇異向量彼此正交的事實進一步簡化(參見公式 6-10)。
公式 6-10。簡單的 PCA 變換
?投影值只是前k個右奇異向量按前k個奇異值縮放。因此,可以通過X的 SVD 方便地獲得整個 PCA 解決方案、組件和投影等。
實施主成分分析
PCA 的許多推導涉及首先將數據居中,然后對協方差矩陣進行特征分解。但實現 PCA 的最簡單方法是對中心數據矩陣進行奇異值分解。
PCA 實施步驟
將數據矩陣居中:
C?=?X?–?1μT?_
其中1是包含所有 1 的列向量,μ是包含X的行平均值的列向量。
計算 SVD:
C?=?UΣV?T
找出主要成分。前k個主成分是V的前k列;即,對應于k個最大奇異值的右奇異向量。
轉換數據。轉換后的數據只是U的前k列。(如果需要白化,則按逆奇異值縮放向量。這要求所選奇異值不為零。請參閱“白化和 ZCA”。)
行動中的主成分分析
讓我們通過將 PCA 應用于一些圖像數據來更好地了解 PCA 的工作原理。MNIST數據集包含從 0 到 9 的手寫數字圖像。原始圖像為 28 × 28 像素。圖像的較低分辨率子集隨scikit-learn一起分發,其中每個圖像被下采樣為 8×8 像素。scikit-learn 中的原始數據有 64 個維度。在示例 6-1中,我們應用 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)# 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)) >>> image_data.shape (1797, 64)# Groundtruth label of the number appearing in each image >>> labels = digits_data.target >>> labels array([0, 1, 2, ..., 8, 9, 8])# 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) >>> 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]) >>> pca_transformer.explained_variance_ratio_[:3].sum() 0.40303958587675121# Visualize the results >>> 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')前 100 個投影圖像顯示在圖 6-3的 3D 圖中。標記對應于標簽。前三個主成分約占數據集中總方差的 40%。這絕不是完美的,但它允許方便的低維可視化。我們看到 PCA 將彼此接近的相似數字分組。數字 0 和 6 與 1 和 7,以及 3 和 9 位于同一區域。空間大致分為一側的 0、4 和 6,以及另一側的其余數字。
圖 6-3。MNIST 數據子集的 PCA 投影——標記對應于圖像標簽
由于數字之間存在大量重疊,因此很難在投影空間中使用線性分類器區分它們。因此,如果任務是對手寫數字進行分類并且所選模型是線性分類器,那么前三個主成分不足以作為特征。然而,有趣的是看看 64 維數據集有多少可以僅在 3 維中捕獲。
Whitening?和ZCA
由于目標函數中的正交性約束,PCA 轉換產生了一個很好的副作用:轉換后的特征不再相關。換句話說,特征向量對之間的內積為零。使用奇異向量的正交性很容易證明這一點:
?結果是一個對角矩陣,其中包含奇異值的平方,表示每個特征向量與其自身的相關性,也稱為其??2范數。
有時,將特征的比例歸一化為 1 也很有用。在信號處理術語中,這稱為白化。它產生一組特征,這些特征與自身具有單位相關性并且彼此之間具有零相關性。從數學上講,白化可以通過將 PCA 變換與逆奇異值相乘來完成(請參見公式 6-11)。
公式 6-11。PCA+?whitening
??whitening與降維無關;一個人可以在沒有另一個的情況下執行一個。例如,零相位分量分析(ZCA)(Bell and Sejnowski,1996)是一種與 PCA 密切相關的白化變換,但不會減少特征數量。ZCA 白化使用完整的主成分集V而不進行縮減,并且包括一個額外的乘法返回到V?T(公式 6-12)。
公式 6-12。ZCA?whitening
?簡單的 PCA 投影(公式 6-10)在新的特征空間中生成坐標,其中主要成分作為基礎。這些坐標僅表示投影矢量的長度,而不表示方向。與主成分相乘得到長度和方向。另一個有效的解釋是額外的乘法將坐標旋轉回原始特征空間。(V是正交矩陣,正交矩陣在不拉伸或壓縮的情況下旋轉其輸入。)因此,ZCA 生成盡可能接近(歐幾里得距離)原始數據的白化數據。
PCA 的注意事項和局限性
使用 PCA 進行降維時,必須解決使用多少主成分 (?k?) 的問題。與所有超參數一樣,這個數字可以根據生成模型的質量進行調整。但也有不涉及昂貴計算方法的啟發式方法。
一種可能是選擇k來解釋總方差的所需比例。(此選項在 scikit-learn 包中可用PCA。)投影到第k個分量的方差為:
║?Xv?k?║?2?=║?u?k?σ?k?║?2?=?σ?k?2
這是X的第k個最大奇異值的平方。矩陣奇異值的有序列表稱為它的譜。因此,要確定要使用多少分量,可以對數據矩陣執行簡單的頻譜分析并選擇保留足夠方差的閾值。
根據核算方差選擇 K
要保留足夠的分量以覆蓋數據中總方差的 80%,請選擇k使得
?另一種選擇k的方法涉及數據集的固有維度。這是一個比較模糊的概念,但也可以從光譜中確定。基本上,如果頻譜包含一些大的奇異值和一些小的奇異值,那么人們可能只收獲最大的奇異值并丟棄其余的。有時頻譜的其余部分并不小,但頭部和尾部值之間存在很大差距。這也是一個合理的截止點。此方法需要對光譜進行目視檢查,因此不能作為自動化管道的一部分執行。
對 PCA 的一個主要批評是轉換相當復雜,因此結果難以解釋。主成分和投影向量是實數值的,可以是正數也可以是負數。主成分本質上是(居中)行的線性組合,投影值是列的線性組合。例如,在股票收益應用程序中,每個因素都是股票收益時間片的線性組合。這意味著什么?很難為學習因素表達一個人類可以理解的原因。因此,分析師很難相信結果。如果你無法解釋為什么你應該將其他人的數十億資金投入特定股票,你可能不會選擇使用該模型。
PCA 的計算成本很高。它依賴于 SVD,這是一個昂貴的過程。計算矩陣的完整 SVD 需要O?(?nd?2?+ d?3?) 次操作(Golub 和 Van Loan,2012),假設n ≥?d——即,數據點多于特征。即使我們只需要k個主成分,計算截斷的 SVD(k個最大的奇異值和向量)仍然需要O?((?n+d?)?2?k?) =?O?(?n?2?k?) 次操作。當有大量數據點或特征時,這是禁止的。
很難以流方式、批量更新或從完整數據的樣本中執行 PCA。SVD 的流式計算、更新 SVD 和從子樣本計算SVD 都是困難的研究問題。算法是存在的,但以降低準確性為代價。一種含義是,當將測試數據投影到訓練集中發現的主要成分時,人們應該期望較低的表示精度。隨著數據分布的變化,人們將不得不重新計算當前數據集中的主要成分。
最后,最好不要將 PCA 應用于原始計數(字數、音樂播放數、電影觀看數等)。這樣做的原因是此類計數通常包含較大的異常值。(有一個粉絲觀看了 314,582 次指環王的可能性非常高,這使其他計數相形見絀。)正如我們所知,PCA 尋找特征內的線性相關性。相關性和方差統計對大異常值非常敏感;一個大數字可能會大大改變統計數據。因此,最好先修剪大值數據(“基于頻率的過濾”),或者應用縮放變換,如 tf-idf(第 4 章)或對數變換(“對數變換”)。
用例
PCA 通過尋找特征之間的線性相關模式來降低特征空間維度。由于涉及 SVD,PCA 計算超過幾千個特征的成本很高。但是對于少量有實際價值的特征來說,是非常值得嘗試的。
PCA 轉換會丟棄數據中的信息。因此,下游模型的訓練成本可能較低,但準確性較低。在 MNIST 數據集上,一些人觀察到使用來自 PCA 的降維數據會導致分類模型不太準確。在這些情況下,使用 PCA 既有利也有弊。
最酷的之一PCA的應用是時間序列的異常檢測。Lakhina 等人。(2004) 使用 PCA 檢測和診斷互聯網流量異常。他們專注于流量異常,即從一個網絡區域到另一個網絡區域的流量出現激增或下降時。這些突然的變化可能表明網絡配置錯誤或協同拒絕服務攻擊。無論哪種方式,了解此類更改發生的時間和地點對互聯網運營商都很有價值。
由于互聯網上的總流量如此之大,因此很難檢測到小區域的孤立流量激增。一組相對較小的主干鏈路處理大部分流量。他們的主要見解是流量異常會同時影響多個鏈路(因為網絡數據包需要跳躍通過多個節點才能到達目的地)。將每個鏈接視為一個特征,并將每個時間步長的流量作為度量。數據點是網絡上所有鏈路的流量測量的時間片。該矩陣的主要組成部分表示網絡上的整體流量趨勢。其余分量表示包含異常的殘差信號。
PCA 也經常用于金融建模。在這些用例中,它作為一種因素分析,這個術語描述了一系列統計方法,旨在使用少量未觀察到的因素來描述觀察到的數據變異性。在因子分析應用程序中,目標是找到解釋成分,而不是轉換后的數據。
股票收益等財務數量通常相互關聯。股票可能同時上下波動(正相關),也可能反向波動(負相關)。為了平衡波動性和降低風險,投資組合需要一組彼此不相關的多樣化股票。(不要把所有的雞蛋都放在一個籃子里,如果那個籃子會沉下去的話。)找到強相關模式有助于決定投資策略。
股票相關模式可以是全行業的。例如,科技股可能會一起漲跌,而航空股往往會在油價高時下跌。但行業可能不是解釋結果的最佳方式。分析師還在觀察到的統計數據中尋找意想不到的相關性。特別地,統計因子模型(Connor, 1995) 在個股收益的時間序列矩陣上運行 PCA 以找到通常協變的股票。在此用例中,最終目標是主成分本身,而不是轉換后的數據。
ZCA 在從圖像中學習時作為預處理步驟很有用。在自然圖像中,相鄰像素通常具有相似的顏色。ZCA 白化可以去除這種相關性,這使得后續的建模工作可以專注于更有趣的圖像結構。Krizhevsky (2009) 的論文“從圖像中學習多層特征”包含很好的示例,這些示例說明了 ZCA 白化對自然圖像的影響。
許多深度學習模型使用 PCA 或 ZCA 作為預處理步驟,盡管這并不總是必要的。在“用于自然圖像建模的因式三向受限玻爾茲曼機”中,Ranzato 等人。(2010) 評論,“白化不是必需的,但可以加快算法的收斂速度。”?在“無監督特征學習中單層網絡的分析”中,Coates 等人。(2011) 發現 ZCA 美白對某些模型有幫助,但不是全部。(注意本文中的模型是無監督特征學習模型,因此 ZCA 被用作其他特征工程方法的特征工程方法。方法的堆疊和鏈接在機器學習管道中很常見。)
概括
PCA 的討論到此結束。關于 PCA 要記住的兩個主要事情是它的機制(線性投影)和目標(最大化投影數據的方差)。解決方案涉及協方差矩陣的特征分解,這與數據矩陣的SVD密切相關。人們還可以通過將數據壓成盡可能蓬松的煎餅來記住 PCA?。
PCA就是一個例子模型驅動的特征工程。(當目標函數進入場景時,人們應該立即懷疑模型潛伏在背景中。)這里的建模假設是方差充分表示數據中包含的信息。同樣,該模型尋找特征之間的線性相關性。這在多個應用程序中用于減少相關性或找到輸入中的共同因素。
PCA 是一種眾所周知的降維方法。但它有其局限性,例如高計算成本和無法解釋的結果。它作為預處理步驟很有用,尤其是當特征之間存在線性相關時。
當被視為消除線性相關性的方法時,PCA 與白化的概念有關。它的表親 ZCA 以一種可解釋的方式對數據進行白化處理,但不會降低維度。
總結
以上是生活随笔為你收集整理的【ML特征工程】第 6 章 :降维:用 PCA 压缩数据薄饼的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取域名后的东西,php获取域名_
- 下一篇: 使用 Flutter 快速实现请假与写周