什麼時候使用PCA和LDA?
在機器學習進行特徵選擇的時候,我們花很大的力氣去挑選變數。但是為什麼還需要進行降維呢? 到底什麼時候應該用PCA這樣的工具? 是當變數數量達到一定的數目么?
如果不降維,將導致 數據分布在一個極小的區域內。也叫維度災難。
比如說,球的體積是 v 正比於 R^3。在R/2的同心球,體積正比於(R/2)^3。同心小球是全球的體積八分之一。
如果是多維球,球的大部分體積 分布在球表面內側的「很薄」的一層,比如千/萬維的話....
所以要降維。不降維,高維特徵沒啥用,比如人臉識別....
PCA是無類別信息,不知道樣本屬於哪個類,用PCA,通常對全體數據操作。
LDA有類別信息,投影到類內間距最小and類間間距最大...
也有一些演算法,先用PCA搞一遍,再用LDA搞一遍,也有相反。反正有論文是這麼搞的,至於是不是普適,要看具體問題。
具體問題具體分析,這是最重要的...當你的特徵數量p過多,甚至多過數據量N的時候,降維是必須的。
為什麼是必須的?有個東西叫curse of dimensionality,維度越高,你的數據在每個特徵維度上的分布就越稀疏,這對機器學習演算法基本都是災難性的。你說特徵數量過多,砍一點就行了嘛?但是對不起,就有這樣的問題存在,砍不了。你要研究某個罕見病跟什麼基因有關?基因很多哦,人類已知的基因有幾千個,可是病例通常也就幾百個,有時連幾百個都沒有……當你的特徵有比較明顯的自相關的時候,也可以考慮降維。
自相關會讓很多模型的效果變差,主要是線性模型。這些模型效果不好,但是算的快,很多時候很有用。先降維再算會好的多。還有的應用跟降維沒多大關係,純粹只是去雜音而已。這是一個典型的應用:分析籃球攻防組合的表現。就是給定一個籃球進攻球員,和他的對位防守球員,求出在一次進攻中這名進攻球員的(1)出手概率(2)如果出手,得分期望根據籃球知識,我們容易知道,如果一個人防「射手A」防的好,但是防「突破手B」防的差,那他防「射手C」也防的好的可能性大過防「突破手D」防的好的可能性。於是這裡有必要把進攻球員(防守球員也類似)做個相似度出來,根據這個相似度再來構建模型(比如可以用Bayes Net)。
相似度怎麼構建?PCA就可以了,把選手的出手位置的分布做成特徵,然後PCA之,取前若干維的相似度即可。(為啥不直接用出手位置的分布來做呢?效果不好唄,去掉雜音會好的多,而且PCA出來的還是正交的,可以直接求距離)在機器學習中,如果都能夠挑選出少而精的特徵了,那PCA等降維演算法確實沒有必要。但一些情況下原始數據維度非常高,然而我們又沒有辦法想出有效的特徵,這個時候就需要用PCA等工具來降低數據的維度,使得數據可以用於統計學習的演算法。我之前所在的一個研究小組就把PCA用在了文字數據上。文字數據處理 (vectorize) 後一個樣本的每一維對應這一個詞。然而可以想像在一個文本數據集中,總的不同的詞的個數是非常多的,因此樣本維度常常上萬。這樣高維度的數據如果直接用來訓練統計學習的演算法得到的模型通常不具有統計學上的顯著性。因此,我們將sparse PCA應用在原始數據上,找到不同的詞之間的線性相關性,將高相關的詞合併為一個特徵,這就是所謂的話題模型 (topic modeling)。
建模描述數據也好,描述自然現象也好,一個很重要的原則就是奧卡姆剃刀(Occam"s razor),也就是簡單化原則。大部分時候,一兩個主要因素,可以解釋80%的數據。降維可以抽離出問題的本質,而且一定程度上抗噪。
能用10維描述的東西我們就不要用50維描述,因為多出來的40維大都是冗餘信息,而且高維數據處理有諸多問題,比如傳說中的維數災難(curse of dimensionality),高維空間要達到同樣的效果需要的數據量呈指數級增長。
首先應該明白這兩個演算法的原理是不一樣的,pca是選擇投影后使得數據方差最大的方向來投影,假設就是方差越大,信息量越多,pca是一種無監督演算法,沒有類別信息,而lda是選擇投影后使得類內方差小而類間方差大的方向來投影,用到了類別信息,所以選擇用哪種演算法來降維應該是根據具體的目的和場景來的,如果你的目的就是分類,那麼顯然lda的選擇標準更合理,如果你沒有類別信息(無監督),那就只能選pca,總之,兩者選擇投影的方向的標準是不一樣的,看哪個和你的需要更契合。
你的特徵相互間有相關性而且分布上是橢圓的,這會帶來複雜性,會更容易造成模型過擬合。
PCA用一組正交基重構你的表達,然後還把分布拉圓,這就相當於找到了數據的結構性,利用這些先驗去簡化問題。這對模型來說是幫了大忙。你可以試試把一個橢圓分布的樣本集直接塞給SVM;再白化後(拉成圓)試試。至於降維,你也可以不降維啊。當你確定信息量少的那些維度對你的問題確實沒幫助,降維肯定是好的,這又使問題簡化了,而且去掉這些沒用信息可以防過擬合。但是信息少往往不意味著沒用,有時候信息少的那部分信息甚至是關鍵信息。舉個例子,比如你招人打籃球,只看身高這一項,普通人的身高是集中分布在一段里的,而且天賦異稟的身高只有極少數,而這極少數恰好是你需要的。「花很大力氣挑選變數」
這個說法比較外行, 變數不是個機器學習的用詞。按通常情況理解,變數,是個一維特徵,
如果你「花了很大力氣挑選變數」,那不會有很多個特徵,直接拿去分類就好了。
特徵、特徵維度是不同的概念, 一個特徵提取出來,可能是個n維數據,無法直接分類操作。所以要降維。挑選特徵無法消除特徵之間的相關性,PCA可以得到一組不相關(正交)的特徵。
反過來思考,數據有A和B兩個不相關的特徵,你可以通過A和B的線性變換得到無數個新特徵,且這些新特徵都是有相關性的。不考慮可解釋性,那一堆新的特徵顯然都不如最初的A和B更能體現數據分布情況。在這裡用PCA就相當於是通過一堆相關特徵的線性組合還原出正交特徵A和B。除了A和B,數據的正交特徵可能還有C、D、E、F……忽略那些數據分布過窄(不具有良好區分性)的特徵,留下少數具有較好區分能力的,就完成了降維。以前上學做聚類演算法的時候也有同樣的疑慮,覺得50維已經夠高了,怎麼會有上萬維的數據?
「在機器學習進行特徵選擇的時候,我們花很大的力氣去挑選變數。」雖然特徵選擇是很重要的一環,但事實上很多情況下,如果特徵太多你是很難去選取合適的特徵的,而且特徵的選擇也是需要經驗。
但是為什麼還需要進行降維呢? 到底什麼時候應該用PCA這樣的工具? 是當變數數量達到一定的數目么?
我就簡單舉個例子,假設要分類的是數據類型是圖片,那麼每一個像素就代表一個特徵,100*100的圖片就有10000個特徵了,特徵太多就難發現模式的規律,你很難發現到底哪個像素對分類是有效的,並且它們可能是相關的,這個時候就需要降維處理。
可以搜索看一下人臉識別的特徵臉eigen face,算是比較簡單的人臉識別演算法,希望對你有幫助。當你一個交易員要盯著幾個貨幣1-50年的利率時 你就會意識到降維還是有用的 最起碼打哪幾個貨幣 哪幾個點位 一目了然
個人覺得pca只對trader有用 因為trader有時候看太多維度 而且同時做很多個trade時 效率很重要 先打哪幾個流動性最好的東西 把最主要幾維先對衝掉 pca還是能有點幫助
我用過信息熵的方法來降維
推薦閱讀:
※假如讓兩個AlphaGo對戰會怎麼樣?
※AlphaGo 代表的是英國嗎?為什麼不是 Google 的所在地美國國旗呢?
※如何看待媒體報道稱「Facebook將關閉人工智慧系統:因AI已經發明語言」?
※AlphaGo 與李世石的第四局比賽中有哪些值得關注之處?
※大師(Master)的驚人戰績,是否說明自然造物敗給了人腦構建?