一、前言
博主最近在學習機器學習的PCA降維算法的時候,對於維度災難和特征稀疏有了新的認識。這篇文章主要講解什么是維度災難,並從幾何的角度來對其進行形象的解釋。
二、維度災難的概念
維度災難(Curse of Dimensionality),什么是維度呢?在機器學習的表示中,我們常常用\(X\)表示數據集,\(x_{i}\)表示其中的一個樣本,\(x_{i}^{(j)}\)表示第i個樣本匯總的第j個特征。樣本的特征個數也就是維度。而維度災難就是說,我們在訓練樣本的時候,在樣本數目不變的情況下,隨着維度的增高,我們的模型效果會隨着維度的增高而降低。也就是說,如果想要達到相同的模型效果,在使用高維度時所需要的樣本數量要比低維度的樣本數量大的多。這個關系,一般會呈2的指數分布,即 \(i =2^j\) 。
而以上說的這種情況,實際上就是指的是機器學習的"過擬合"現象。我們通過離散化增加特征維度的同時引入很多非線性信息。雖然非線性信息能夠增強擬合能力,但是這並不是完全正相關的。而根據 奧卡姆剃刀定律,一個滿足預測性能條件下盡量簡單,才能夠有比較好的泛化能力。所以,增加特征維度和提高模型本身的復雜性效果是一致的,模型的復雜性可以使用正則化來自動控制,而特征維度只能通過人為方式來權衡調整。
三、從幾何角度解釋維度災難
當我們試圖去自己想象一個高維空間時,直覺的思維方式往往行不懂。我們甚至很難想象四維超立方體是什么樣子的。

圖:點、線段、正方形、立方體和網絡(0維到四維超立方體)
我們畫出下面這張二維平面下的圖,邊長為1.
假設這個正方形表示二維的特征空間,特征空間的平均值是這個正方形的中心,離這個圓點中心距離為1的樣本分布在單位圓中,不在圓中的樣本相對於中心更接近正方形的邊角部分。如果樣本都落在了元內,分類將會很簡單;如果樣本落到了圓外(邊角部分),就會很難分類。我們來給出一個大致的公式證明:
假設此時維度為\(j\)維。不管維度是多少,超立方體的體積都是 \(1^j = 1\)。而對於j維度的超球面,其體積為 $$V(j) = k * r^j $$
其中\(k = \frac{\pi^{d/2}}{\Gamma(\frac{d}{2} + 1 )} 0.5^d,r=0.5\)
那么,當維度\(j\)趨近於無窮大時,超球面的體積趨近於0(也就是說,在高維度球面球體基本上是空的),然而超立方體體積沒有變換。那么在分類的時候,大多數的樣本都不在超球面內,都在超立方體內。這樣就會導致樣本更加的難以分類。此時樣本是具有稀疏性的,也就是維度非常高,而樣本少,且在高維度的空間中樣本分布不均勻,導致其難以分類。*
除此之外,另外一個問題就是,如果我們在這個二維平面內隨機挑兩個點,這兩個點的平均距離大約為0.52,如果在三維的單位立方體里隨機挑兩個點,兩點之間的距離大約是0.66。但是,如果在一個100萬維度的超立方體中隨機挑兩個點,它的距離大約為408(\(\sqrt{(1000000/6)}\) )!!這個事實也說明了高維數據有很大可能是稀疏的。大多數訓練的實例可能彼此之間距離很遠。這也意味着新的實例很可能遠離任何一個訓練實例,導致跟低維度比起來,預測更加的不可靠,更容易過擬合。
四、維度災難的解決方法
在處理維度災難的時候,我們可以通過增加數據集、正則化、降低維度等方法來解決。
雖然增大數據集可以使訓練實例達到足夠的密度,可以解決維度災難的問題。但是要達到給定密度,所需要的訓練集數量隨着維度的增加呈指數式的上升。比如100個特征,要讓所有訓練實例(假設在所有維度上平均分布)之間的距離小於0.1,這時需要的訓練實例數量就比可觀察的宇宙中的原子數量還要多.......所以在解決維度災難時,我們常常會采用降維。
對於降低維度,我們主要有三種方法:
- 直接降維 : 特征選擇(人工或者自動。如Lasso方法)
- 線性降維 : PCA、MDS
- 非線性降維:流行學方法,包括Isomap 以及 LLE(局部線性嵌入)方法
五、不同算法維度權衡
當模型比較復雜時,不要選擇太高的維度;當模型比較簡單時,可以選擇較高的維度。其實就是要去考慮:是否要去增加維度,提供非線性的問題。
-
非線性決策邊界的分類器(例如神經網絡、KNN分類器、決策樹等)分類效果好但是泛化能力差且容易發生過擬合。因此,維度不能太高。
-
使用泛化能力好的分類器(例如貝葉斯分類器、線性分類器),可以使用更多的特征,因為分類器模型並不復雜。
因此,過擬合只在高維空間中預測相對少的參數和低維空間中預測多參數這兩種情況下發生。