機器學習之資料清洗與特徵提取

騰訊雲加社群發表於2017-12-14

歡迎大家前往騰訊雲社群,獲取更多騰訊海量技術實踐乾貨哦~

作者:汪毅雄

導語:本文詳細的解釋了機器學習中,經常會用到資料清洗與特徵提取的方法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,也從程式碼的角度告訴了怎麼降維的過程。實際操作可能會比較簡單,但是原理個人覺得還是有學習的地方的。

相關閱讀

此文已由作者授權騰訊雲技術社群釋出,轉載請註明原文出處


相關文章