歡迎大家前往騰訊雲社區,獲取更多騰訊海量技術實踐干貨哦~
作者:汪毅雄
導語:本文詳細的解釋了機器學習中,經常會用到數據清洗與特征提取的方法PCA,從理論、數據、代碼三個層次予以分析。
機器學習,這個名詞大家都耳熟能詳。雖然這個概念很早就被人提出來了,但是鑒於科技水平的落后,一直發展的比較緩慢。但是,近些年隨着計算機硬件能力的大幅度提升,這一概念慢慢地回到我們的視野,而且發展速度之快令很多人刮目相看。尤其這兩年,阿法狗在圍棋屆的神勇表現,給人在此領域有了巨大的遐想空間。
所謂機器學習,一般專業一點的描述其是:機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能。
機器學習這門技術是多種技術的結合。而在這個結合體中,如何進行數據分析處理是個人認為最核心的內容。通常在機器學習中,我們指的數據分析是,從一大堆數據中,篩選出一些有意義的數據,推斷出一個潛在的可能結論。得出這個不知道正確與否的結論,其經過的步驟通常是:
1、預處理:把數據處理成一些有意義的特征,這一步的目的主要是為了降維。
2、建模:這部分主要是建立模型(通常是曲線的擬合),為分類器搭建一個可能的邊界。
3、分類器處理:根據模型把數據分類,並進行數據結論的預測。
本文講的主要是數據的預處理(降維),而這里采用的方式是PCA。
PCA的個人理論分析:
假設有一個學生信息管理系統,里面需要存儲人性別的字段,我們在數據庫里可以有M、F兩個字段,用1、0分別代表是、否。當是男學生的時候其中M列為1,F列為0,為女生時M列為0,F列為1。我們發現,對任意一條記錄,當M為1,F必然為0,反之也是如此。因此實際過程,我們把M列或F列去掉也不會丟失任何信息,因為我們可以反推出結論。這種情況下的M、F列的關聯比是最高的,是100%。
再舉另外一個例子,小明開了家店鋪,他每天在統計其店鋪的訪問量V和成交量D。可以發現,往往V多的時候,D通常也多。D少的時候,V通常也很少。可以猜到V和D是有種必然的聯系,但又沒有絕對的聯系。此時小明如果想根據V、D來衡量這一天的價值,往往可以根據一些歷史數據來計算出V、D的關聯比。拍腦門說一個,如果關聯比大於80%,那么可以取VD其中任意一個即可衡量當天價值。這樣就達到了降維的效果。
當然降維並非只能在比如說2維數據[V,D]中選取其中的1維[V]作為特征值,它有可能是在V+D的情況下,使得對[V, D]的關聯比最大。
但是PCA思想就是如此。簡單點說:假設有x1、x2、x3…xn維數據,我們想把數據降到m維,我們可以根據這n維的歷史數據,算出一個與x1…xn相關m維數據,使得這個m維數據對歷史數據的關聯比達到最大。
數學分析
假設我們有一組二維數據
如果我們必須使用一維來表示這些數據,又希望盡量保留原始的信息,你要如何選擇?
這個問題實際上是要在二維平面中選擇一個方向,將所有數據都投影到這個方向所在直線上,用投影值表示原始記錄。這是一個實際的二維降到一維的問題。
那么如何選擇這個方向才能盡量保留最多的原始信息呢?一種直觀的看法是:希望投影后的投影值盡可能分散,這樣投影的范圍越大,在做分類的時候也就更容易做分類器。
以上圖為例,可以看出如果向x軸投影,那么最左邊的兩個點會重疊在一起,中間的兩個點也會重疊在一起,於是本身四個各不相同的二維點投影后只剩下兩個不同的值了,這是一種嚴重的信息丟失。同理,如果向y軸投影中間的三個點都會重疊,效果更糟。所以看來x和y軸都不是最好的投影選擇。直觀來看,如果向通過第一象限和第三象限的斜線投影,則五個點在投影后還是可以區分的。
我們希望投影后投影值盡可能分散,那什么是衡量分散程度的統計量呢,顯然可以用數學上的方差來表述。
通常,為了方便計算,我們會把每個點都減去均值,這樣得到的點的均值就會為0.這個過程叫做均一化。均一化后:
於是上面的問題被形式化表述為:尋找一個基,使得所有數據變換為這個基上的坐標表示后,方差值最大。
我們跳出剛才的例子,因為很容易把剛才的結論推廣到任意緯度。要求投影點的方差最大值所對應的基u,這時有兩種方法來求解:
方法一:
假設有個投影A:
顯然剛才說的方差V可以用來表示:
而投影A = 原始數據X . U;
這樣方差可以表示為:
求這個方差的最大值,我們可以用拉格朗日插值法來做
L(u,λ)為:
求導L’:
令導數為0:
這樣問題就轉換成求X.XT的特征值和特征向量,問題就迎刃而解了。
同時我們可以知道,特征值和特征向量有很多個,當λ最大的時候所對應的特征向量,我們把它叫作主成份向量。如果需要將m降維為n,只需要去前n大的特征值所對應的特征向量即可。
方法二:
對於上面二維降成一維的問題來說,找到那個使得方差最大的方向就可以了。不過對於更高維,首先我們希望找到一個方向(基)使得投影后方差最大,當我們找第二個方向(基)的時候,為了最大可能還原多的信息,我們顯然不希望第二個方向與第一個方向有重復的信息。這個從向量的角度看,意味這一個向量在另一個向量的投影必須為0.
這就有:
這時候我們思路就很明了:將一組N維向量降為K維(K大於0,小於N),其目標是選擇K個單位(模為1)正交基,使得原始數據變換到這組基上后,各字段兩兩間協方差為0,而字段本身的方差則盡可能大。
還是假設我們原始數據為A
我們做一個處理A.AT得到:
我們發現要是能找到一個基使得這個矩陣變成一個,除了斜對角外,其余全是0的話,那這個基就是我們需要的基。那么問題就轉換成矩陣的對角化了。
先說一個先驗知識:
在線性代數上,我們可以知道實對稱矩陣不同特征值對應的特征向量必然正交。對一個n行n列的實對稱矩陣一定可以找到n個單位正交特征向量,設這n個特征向量為e1,e2,⋯,en。
組合成矩陣的形式如圖:
由上結論又有一個新的結論就是,對於實對稱矩陣A,它的特征向量矩陣為E,必然滿足:
有了這個先驗知識,我們假設原始數據A,基為U,投影后的數據為Y。則有Y=UA。根據上面所說的要是投影后的矩陣Y的Y.YT為一個對角陣,那么就有:
要是Y.YT為對角陣,那么只需要U是
A.AT的特征向量即可,那么問題最終還是轉換為求AAT的特征向量。
代碼實現:
剛才說了兩種PCA的計算思路,我們簡單看下代碼的實現吧,由於matlab自帶了求特征向量的函數,這邊使用matlab進行模擬。
我們用測試數據試試:
當我們只保留0.5的成分時,newA從3維降到1維,當進行還原時,准確性也會稍微差些
當我們保留0.9的成分時,newA從3維降到2維,當進行還原時,還原度會稍微好些。
當我們保留0.97的成分時,就無法降維了。這時候就可以100%還原了。
總結一下:
我們在做機器學習的數據分析的時候,由於數據集的維度可能很高,這時候我們需要對數據進行降維。本文從各個方向介紹了一下降維的經典方法PCA,也從代碼的角度告訴了怎么降維的過程。實際操作可能會比較簡單,但是原理個人覺得還是有學習的地方的。