歡迎你們前往騰訊雲社區,獲取更多騰訊海量技術實踐乾貨哦~算法
做者:汪毅雄數據庫
導語:本文詳細的解釋了機器學習中,常常會用到數據清洗與特徵提取的方法PCA,從理論、數據、代碼三個層次予以分析。機器學習
機器學習,這個名詞你們都耳熟能詳。雖然這個概念很早就被人提出來了,可是鑑於科技水平的落後,一直髮展的比較緩慢。可是,近些年隨着計算機硬件能力的大幅度提高,這一律念慢慢地回到咱們的視野,並且發展速度之快令不少人另眼相看。尤爲這兩年,阿法狗在圍棋屆的神勇表現,給人在此領域有了巨大的遐想空間。函數
所謂機器學習,通常專業一點的描述其是:機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及機率論、統計學、逼近論、凸分析、算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行爲,以獲取新的知識或技能,從新組織已有的知識結構使之不斷改善自身的性能。性能
機器學習這門技術是多種技術的結合。而在這個結合體中,如何進行數據分析處理是我的認爲最核心的內容。一般在機器學習中,咱們指的數據分析是,從一大堆數據中,篩選出一些有意義的數據,推斷出一個潛在的可能結論。得出這個不知道正確與否的結論,其通過的步驟一般是:學習
一、預處理:把數據處理成一些有意義的特徵,這一步的目的主要是爲了降維。測試
二、建模:這部分主要是創建模型(一般是曲線的擬合),爲分類器搭建一個可能的邊界。spa
三、分類器處理:根據模型把數據分類,並進行數據結論的預測。3d
本文講的主要是數據的預處理(降維),而這裏採用的方式是PCA。blog
假設有一個學生信息管理系統,裏面須要存儲人性別的字段,咱們在數據庫裏能夠有M、F兩個字段,用一、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思想就是如此。簡單點說:假設有x一、x二、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,也從代碼的角度告訴了怎麼降維的過程。實際操做可能會比較簡單,可是原理我的以爲仍是有學習的地方的。