維數災難:都是孤獨惹的禍

讀芯術發表於2020-10-07

全文共2433字,預計學習時長7分鐘

 

維數災難:都是孤獨惹的禍

圖源:unsplash

維數災難究竟是什麼?除了是機器學習術語中讓人聞風喪膽的主要例項外,還包括特徵數量的增加對資料集的影響。簡言之,維數災難全都與孤獨有關。

 

在具體解釋維數災難之前,讓我們先來先解決一些基礎術語問題。

 

什麼是特徵?特徵是機器學習中的一個詞,在其他學科中可能稱為預測器/(獨立)變數/屬性/訊號。換句話說,它是關於每個資料點的資訊。

 

資料間保持距離非常容易:只需新增一個維度。但對某些演算法來說,這可能是個災難。如果一種機器學習演算法對維數災難非常敏感,該演算法就只有在資料點被空間中的朋友圍繞時才能有最好的執行效果。空間中,資料點周圍的朋友越少,形勢越容易惡化。

 

一維

 

想象自己坐在一個大教室裡,周圍都是好朋友。

維數災難:都是孤獨惹的禍

 

將自己想象成一個資料點,放置在一維空間中,房間一片漆黑,教室後面發出的亮光照射著你,影子投射在前面牆體的一條線上。在那條線上,你一點也不孤獨,大家就像罐頭中的沙丁魚一樣抱團取暖。一維空間真舒適,但可能有點兒舒適過頭了。

維數災難:都是孤獨惹的禍

 

二維

 

為了讓你有呼吸的空間,現在增加一個維度。我們正處於二維空間,下面的平面是房間地板。在這一空間中,你和朋友們更加分散,每個人可以獲得個人空間。

維數災難:都是孤獨惹的禍

 

如果想象成虛構的電子表格對你而言更容易,那就把新增/刪除一個維度換成插入/刪除一列數字。

 

三維

 

現在新增第三維度,把大家隨機分配到原本所在的5層樓中的任意一層。

維數災難:都是孤獨惹的禍

 

突然,周圍的朋友數驟減,孤獨將你包圍。如果你喜歡被朋友緊緊包圍的感覺,可能如今你只能哀怨地盯著好幾張空椅子,於是你淚眼朦朧,但至少周圍可能還有一個朋友......

維數災難:都是孤獨惹的禍

 

四維

 

現在再新增另一個維度——時間維度。

維數災難:都是孤獨惹的禍

 

學生們分散至60分鐘的課堂的不同時段(不同樓層)——我們規定只有9節課,因為老師們也需要休息和生活。因此,如果你有幸在此之前仍然有同伴的情感支援,但現在,筆者可以明確告訴你,你已經與世隔絕了。

 

如果你孤身一人時沒有效率,那就麻煩了,維數災難已經降臨!

維數災難:都是孤獨惹的禍

 

MOAR維度

 

隨著維度增加,你的孤獨感也增加得十分迅速。如果要確保每個同學都像在二維空間中被朋友環繞一樣,就需要非常多的學生。

維數災難:都是孤獨惹的禍

 

這裡最重要的是朋友數量必須呈指數增長,而非線性增長,這樣才能防止“抑鬱”。

 

如果新增兩個維度,那麼甚至兩個教室的學生都遠遠不夠。起初如果教室有50名學生,新增5層樓和9堂課後則需要原來學生數的5x9=45倍才能達到原來只需50個人就能達到的效果。因此,我們需要45x50=2250個學生才能避免孤獨。每個維度增加一個學生遠遠不夠!資料需求飛速上升。

 

如果新增維度,則最小的資料需求也會快速增長。每上升一個維度就要招收更多的學生(資料點)。如對你來說資料十分昂貴,那麼維數災難可不是鬧著玩的。

 

維度佼佼者

 

並非所有的機器學習演算法在面對一些獨處時光時都會失控,k-NN之類的方法就是種子選手。k-NN是k-最近鄰(Nearest Neighbors)的簡稱——該方法被用來計算臨近資料點,因而資料點們“睦鄰友好”相當重要。

 

當涉及到維度時,其他方法則穩健地多。上一節線性迴歸課,你就會知道擁有可觀數量的資料點,增加或去除一個維度並不會造成災難性破壞。雖然依然會承擔代價,但承擔得起了。

 

這並非意味著它能適應所有變更,沒有萬全之策,神經網路也是如此。如果你不知道最小二乘法會引起混亂,比如包含一個單個異常值或增加一個幾乎完全一樣的特徵(多重共線性,又稱犯罪的拿破崙,會捲土重來),那麼你需要警惕起來。

 

你該如何應對?

 

如果實踐中遇到維數災難應該怎麼辦?如果你是機器學習研究人員,最好確認一下自己的演算法是否有這個問題……但你肯定已經確認過了。

 

筆者大膽揣測一下你的想法——你可能會想有沒有可能設計出一種對維度不那麼敏感的演算法。在事物趨向於文字化的情況下,許多使用者更喜歡高大的矩陣。(通常,在矩陣中行代表例項,而列代表特徵,這樣的話,高瘦的矩陣中就有許多例項分佈在少數維度中。)

 

如果你是應用資料科學愛好者,你會按照一直以來的方法處理,即在嘗試所有可能的方法之前,只用一個或幾個可能的特徵獲取演算法的基準。

 

一些方法只適用於高瘦資料集,因此,如果感覺演算法處於維數災難,你需要對資料集進行瘦身。

 

如果你的方法在有限數量的特徵上執行良好,而在你增加維度時卻連連罷工,這就暗示你要麼堅持自己選擇的特徵(或者你留了一手逐步選擇),要麼首先用一些特徵工程技術把幾個超級特徵排除出去。可以試試保守辦法,如主成分分析——時至今日,向量分析仍很重要,它永不過時——也可以嘗試新派做法,如自編碼器或其他神經網路方法。

 

無需瞭解維數災難這一術語就可完成任務,因為過程(從小處著手並逐步建立複雜度)本應該為使用者服務,但是如果它給你帶來困擾,那麼現在就可以擺脫

維數災難:都是孤獨惹的禍

 

總結一下,增加越來越多的特徵(列)需要以指數增長的例項(行)數來解決資料點在空間中的分散問題。一些方法只適用於高瘦資料集,所以如感覺發生維數災難則需要對資料集瘦身。

維數災難:都是孤獨惹的禍

圖源:SOURCE

最後,為了防止大家把“空間封閉性”與規模關聯起來,筆者需要解釋一下,因為這與用英里還是釐米測量產生的影響無關,所以這種困境不能怪不斷擴張的宇宙空間。

 

簡單的乘法運算也不能避免維數災難。相反,也許這張圖能幫你以3D形式感知它:這隻球形奶牛……這隻貓咪有多大並不重要,重要的是,它身上覆蓋著多少塑料泡沫。

維數災難:都是孤獨惹的禍

一起分享AI學習與發展的乾貨

歡迎關注全平臺AI垂類自媒體 “讀芯術”

(新增小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智慧科技哦~)

相關文章