数据的降维
為何要進行降維
在工作場景中,我們面對的數據通常是現實中直觀觀測的集合。這些數據可能多方面,多角度的描述了目標,因此根據這些數據我們可以很直觀的了解觀測的目標。可是我們在進行機器學習處理數據的時候,過多的數據即數據的維度過多可能會對算法性能有一定的影響或者造成不必要的浪費。例如你想判斷一些人的性別,收集到的數據有年齡,身高,膚色,體重,發色等等。實際上膚色發色這種數據就是冗余的。
對于一個維度為d的數據局,大多數算法的復雜度為O(nd^2),n為數據集中樣本數量。所以當維度增長時,復雜度至少以平方增長,導致算法速度過慢。
而且維度增長對于算法的準確度也會有影響,假設我們在一維空間中對于十個點進行聚類。如果特征空間增長到二維,要想數據保持先前的數據密度,那么樣本數量要提升到10^2=100個。依次類推n維需要10^n個樣本才能到達之前的數據密度。
所以在保持盡量保存數據內所含信息的前提下進行數據的降維,是非常有必要的。
?
特征選擇
如果部分特征的相關度高,容易消耗計算性能,而且有些維度是噪音,對預測結果有負影響。這個時候我們就可以進行特征選擇,特征選擇就是單純地從提取到的所有特征中選擇部分特征作為訓練集特征, 特征在選擇前和選擇后可以改變值、也不改變值,但是選擇后的特征維數肯 定比選擇前小,畢竟我們只選擇了其中的一部分特征。
一個最簡單的方法就是刪除低方差特征,直觀來說低方差的特征對于樣本沒有很好的區分度,所以是不會造成很大影響的。不過缺點也很明顯,這種方法雖然可以降維,但是直接把一整個維度所含的信息都丟掉了,丟失的信息有點多。那么我們可不可以把多個維度的信息減少到少數維度上呢。
?
PCA降維
PCA(Principal Component Analysis),即主成分分析方法,是一種使用最廣泛的數據降維算法。PCA的主要思想是將n維特征映射到k維上,這k維是全新的正交特征也被稱為主成分,是在原有n維特征的基礎上重新構造出來的k維特征。PCA的工作就是從原始的空間中順序地找一組相互正交的坐標軸,新的坐標軸的選擇與數據本身是密切相關的,類似這種情況。
用這條新的直線為坐標軸便可以表示原來的兩個坐標軸。這種情況看起來很像線性回歸。但事實上他與線性回歸還是有差異的。
如上所示,線性回歸計算loss時是計算y值得差異,而PCA計算loss的時候是以點到直線的投影為差異的。
那么具體PCA是如何計算的呢,第一個新坐標軸選擇是原始數據中方差最大的方向,即區分度最高的方向,第二個新坐標軸選取是與第一個坐標軸正交的平面中使得方差最大的,第三個軸是與第1,2個軸正交的平面中方差最大的。依次類推,可以得到n個這樣的坐標軸。通過這種方式獲得的新的坐標軸,我們發現,大部分方差都包含在前面k個坐標軸中,后面的坐標軸所含的方差幾乎為0,即不包含任何信息。于是,我們可以忽略余下的坐標軸,只保留前面k個含有絕大部分方差的坐標軸。事實上,這相當于只保留包含絕大部分方差的維度特征,而忽略包含方差幾乎為0的特征維度,實現對數據特征的降維處理。
我們可以發現,新的坐標軸其實就是對于原先坐標軸的線性變換。這讓我們想到了什么呢,就是矩陣。我們知道每一個矩陣都代表一種線性變換,而矩陣的相乘就是實現矩陣線性變換的過程。
事實上,通過計算數據矩陣的協方差矩陣,然后得到協方差矩陣的特征值特征向量,選擇特征值最大(即方差最大)的k個特征所對應的特征向量組成的矩陣。這樣就可以將數據矩陣轉換到新的空間當中,實現數據特征的降維。
由于得到協方差矩陣的特征值特征向量有兩種方法:特征值分解協方差矩陣、奇異值分解協方差矩陣,所以PCA算法有兩種實現方法:基于特征值分解協方差矩陣實現PCA算法、基于SVD分解協方差矩陣實現PCA算法。具體過程大家有興趣的可以自己推導,本文就不再贅述。
?
總結
- 上一篇: 图像金字塔和特征金字塔
- 下一篇: 机器学习基础(六):贝叶斯分类(贝叶斯决