機器學習中的維度災害

轉自:https://zhuanlan.zhihu.com/p/27488363

對於大多數數據,在一維空間或者說是低維空間都是很難完全分割的,但是在高緯空間間往往可以找到一個超平面,將其完美分割。

引用The Curse of Dimensionality in Classification的例子來說明:
想象下我們有一系列圖片,每張圖描述的不是貓就是狗。現在我們想利用這些圖片來做一個可以判斷貓狗的分類器。首先,我們需要找到一些描述貓狗特徵,利用這些特徵,分類器能夠識別貓狗。比如可以通過顏色來區分它們,一種分類方法是將紅、綠、藍三種顏色作爲識別特徵。以簡單的線性分類器爲例,將這三種特徵結合起來的分類算法爲:

If 0.5*red + 0.3*green + 0.2*blue > 0.6 : return cat;
else return dog;

然而,將這三種顏色作爲特徵來區分貓狗明顯是不夠的。爲此,我們決定增加一些特徵,比如x、y軸方向上的梯度dx、dy,那麼現在就有5個特徵了。
爲了得到更精確的分類器,基於顏色和、紋理、統計動差等,我們還需要更多的特徵。通過將特徵增加到好幾百,我們能得到一個完美的分類器嗎?回答可能會出乎你們的意料:不能!事實上,過了某個臨界點,如果還持續的增加特徵,那麼分類器的性能會下降。看圖1,這就是我們經常說的“維度災難curse of dimension”。


維度災難和過擬合的關係:
假設在地球上有無數只貓和狗,但由於種種原因,我們總共只有10張描述貓狗的圖片。我們的最終目的是利用這10張圖片訓練出一個很牛的分類器,它能準確的識別我們沒見過的各種無數的貓、狗。
如果只使用一維特徵,例如紅色進行訓練,在一維特徵軸上展開


我們可以發現,分類效果並不好,因此我們準備再加入一個圖像平均綠色的特徵。


在紅綠構成的二維特徵空間中,我們發現還是沒法找到一條線將他們分開。我們準備再加一個特徵,把空間拓展到3維。


終於我們找到了一個平面可以將10個樣本完美的分開。
從這個例子我們好像可以看出,分類器的效果隨着特徵維度的增加變得更好了,我們應該不停的增加特徵維度直到分類器獲得最好的結果爲止,但是我們在上文論述過,從圖1可以看出,實際上這是有問題的。

在1特徵空間爲1維時(如圖2),10個訓練實例覆蓋在一維軸上,假設軸長爲5,那麼每個樣本平均每個單位有2個樣本。特徵空間爲2維時(如圖3),我們仍然用10個實例進行訓練,此時二維空間的面積是5x5=25,樣本密度是10/25=0.4,即每個單位面積有0.4個樣本。在特徵空間爲3維時,10個樣本的密度是10/(5x5x5)=0.08,即每個單位體積有0.08個樣本。
如果我們不斷的增加特徵,特徵維度就會不斷變大,同時變得越來越稀疏。由於稀疏的原因,隨着特徵維度的不斷變大,我們很容易的就找到一個能將樣本按類別完美分開的超平面,因爲訓練樣本落到該空間的最優超平面錯誤一邊的概率會隨着維度增加無限變小。然而,如果將高維分類映射回低維,我們能很容易發現一個嚴重的問題:


圖6:使用太多的特徵導致了過擬合。分類器學習了很多異常特徵(如噪聲等),因此對於新的數據泛化性能不好。

圖6展示了3D分類結果投影到2D空間中的情景,我們可以看不像高維空間中,在低維空間中,數據並沒有顯示出可分性。而實際上,通過增加第三維度來獲得最優分類效果等價於在低維空間使用複雜的非線性分類器,而往往復雜的模型結構也是導致過擬合的原因之一。結果就是分類器學習到了很多數據集中的特例,因此對於現實數據往往會效果較差,因爲現實數據是沒有這些噪聲以及異常特性的。
因此說,過擬合是維度災難帶來的最直接結果。


圖7展示了使用2個特徵的線性分類器的訓練結果,儘管這個分類邊界看起來不如圖5中的分類器,但是簡單的分類器對於未知的數據具有更好的泛化性能,因爲其不會學習到訓練集中偶然出現的特例。換句話說,維度災難可以通過使用更少的特徵來避免,同時這樣分類器就不會對訓練數據過擬合。

下面從另一個角度來闡述,我們假設每個特徵的範圍是從0-1,同時每個貓和狗都具有不同的特徵。如果我們想使用全數據的20%的數據來訓練模型,那麼在一維的情況下,我們的特徵範圍只需要取20%的範圍,也就是0.2就夠了。當上升到2維的情況下,我們需要45%的每維特徵(0.45*0.45=0.2)纔可以覆蓋特徵空間中的20%,當上升到3維空間時,我們則需要每維58%的特徵範圍(0.58^3 = 0.2)。


換句話說,如果特徵數目一定,那麼隨着維度增加過擬合就會出現。另一方面,如果持續增加維度,那麼訓練數據需要指數級的增加才能保持同樣的距離分佈來避免過擬合。
舉個例子:例如在一維空間中,樣本密度是1000個/單位,那麼我們在任意測試樣本0.001的單位距離都可以找到一個樣本。但是如果到2維空間,那麼我們需要1000^2個樣本才能保證,任意樣本的0.001單位距離內都有一個樣本。
換個角度來看,如果我們吧100個點丟到0-1的區間內,並且吧0-1分成每個0.1一共10個區間,那麼極有可能每個區間都會有點存在,但是如果還是100個點丟到2維空間內,那麼邊長爲0.1的單位單元就有100個,幾乎不可能每個單元都有一個點。當拓展到3維就有1000個單元,ur data is “lost in space” as we go to higher dimensions.這就是數據的稀疏性。

在上面的例子中,我們通過演示數據的稀疏性展示了維數災難,即:在分類中我們使用的特徵數量越多,那麼由於高維下數據的稀疏性我們不得不需要更多的訓練數據來對分類器的參數進行估計(高維數下分類器參數的估計將變得更加困難)。維數災難造成的另外一個影響是:數據的稀疏性致使數據的分佈在空間上是不同(實際上,數據在高維空間的中心比在邊緣區域具備更大的稀疏性,數據更傾向於分佈在空間的邊緣區域)。舉個栗子更好理解:
假設一個二維的單位正方形代表了2維空間,特徵的平均值作爲特徵空間的中點,所有距離特徵空間單位距離內得點都在一個特徵空間的內接圓內,而在內接圓外的點則分佈在空間的角落,他們相對來說更難被區分,因爲他們的特徵差距很大。因此單位圓內的樣本越多,那麼分類任務就越簡單:


在這裏一個有趣的問題就是隨着維度的增長,超球體所佔的空間和超立方體的空間的相對比例是如何變化的。超立方體的體積在維度d的情況下永遠是1^d=1,超球題的體積在半徑爲0.5的情況下可以由以下公式計算:


其體積-維度圖畫出來大概是這樣的:


我們可以明顯的發現,當維度不斷增大,內接球的體積會趨於0,而超立方體的體積還是1,這種反直覺的發現解釋了分類器維度災難的相關問題:在高維空間中,大部分訓練數據都位於定義的特徵空間立方體的拐角處。正如前面提到的,樣例在拐角處比樣例在內接球體內是更難分類的。圖11更明顯的展示了這一點:


對於8維的超立方體,大概有98%的數據位於它的256個拐角處。當維度趨近於無窮大時,樣本點到中心點的歐式距離的最大值和最小值的差值與最小值的比例趨近於0,:


因此,在某種意義上,幾乎所有的高維空間都遠離其中心,或者從另一個角度來看,高維單元空間可以說是幾乎完全由超立方體的“邊角”所組成的,沒有“中部”,這對於理解卡方分佈是很重要的直覺理解。 給定一個單一分佈,由於其最小值和最大值與最小值相比收斂於0,因此,其最小值和最大值的距離變得不可辨別。 

因此,在高維空間用距離來衡量樣本相似性的方法已經漸漸失效。所以以距離爲標準的分類算法(歐氏距離,曼哈頓距離,馬氏距離)在低維空間會有更好的表現。類似的,高斯分佈在高維空間會變得更加平坦,而且尾巴也會更長。

對於使用距離測度的機器學習算法的影響:
由於維度災難的影響,正如前面所說的在高維空間中,歐式距離的測度會失去意義,當維度趨於無窮時,數據集中任意兩點的距離會趨向收斂,意思是任意兩點的最大距離和最小距離會變爲相同。
因此基於歐式距離的k-means算法,會無法進行聚類(因爲距離會趨於收斂)。而K-NN會的臨近K個點中,會出現更多非同類的點(遠多於低維度的情況)。

參考網頁:
Curse of dimensionality
The Curse of Dimensionality in Classification

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章