「機器學習」到底需要多少數據?
本文首發於微調的知乎專欄「數據說」。
機器學習中最值得問的一個問題是,到底需要多少數據才可以得到一個較好的模型?從理論角度,有Probably approximately correct (PAC) learning theory來描述在何種情況下,可以得到一個近似正確的模型。但從實用角度看,PAC的使用範圍還是比較局限的。所以今天我們主要想討論一個問題:到底如何定義有效數據量。
1. 數據的粒度(granularity)
數據的粒度可以理解為數據的細分程度,或者具體程度。舉個簡單例子,我們想預測股票的走勢,那麼我們可以得到以下歷史數據:
每秒鐘的交易數據
每分鐘的交易數據
...
每年的交易數據
換成另一個場景,如果我們打算對一個句子進行截斷,「我今天真高興」,那麼結果可以是:
我 | 今 | 天 | 真 | 高 | 興
我今 | 今天 | 天真 | 真高 | 高興
我今天 | 天真高 | 高興X
隨著細分程度的改變,那麼數據量也有明顯的變化。數據的粒度越細,數據量越大。一般來說,我們追求盡量細分的數據,因為可以通過聚合(aggregation)來實現從具體數據到宏觀數據的還原,但反之則不可得。
但是不是數據越具體越好?不一定,過於具體的數據缺失了特徵,有效的特徵僅在某個特定的粒度才存在。打個比方,人是由原子、分子、細胞、組織、器官構成,但在分子層面我們不一定能分辨它是人,只有到達一定的粒度才可以。因此,數據收集的第一個重點是搞清楚,在什麼粒度可以解決我們的問題,而不是盲目的收集一大堆數據,或者收集過於抽象的數據。
2. 數據量與特徵量的比例
機器學習中對於數據的表達一般是 n*m的矩陣,n代表樣本的數量,一行(row)數據代表一個獨立數據。而m代表特徵變數(attribute/feature/variable)的數量,一列(column)數據代表某個特徵在所有樣本上的數值。比如下圖就代表了一個 4*2(n=4,m=2)的矩陣,即總共有4條數據,每個數據有2個特徵。
人們討論數據量,往往討論的是n,也就是有多少條數據。但這個是不準確的,因為更加適合的評估應該是n/m,也就是樣本量除以特徵數,原因很簡單。如果你只有100條數據,但只有2個特徵。如果用線性函數來擬合,相當於給你100個點來擬合到二次函數上,這個數據量一般來說是比較充裕的。但還是100個數據點,每個數據的特徵數是200,那麼很明顯你的數據是不夠的,過擬合的風險極高。
所以談論數據量,不能光說有多少條數據n,一定也要考慮數據的特徵數m。
3. 特徵間的相關性與有效性
前文所有的討論都建立在一個標準上,那就是我們選擇的數據是有效的。從兩個方向理解:
數據間的重複性低:
樣本間的重複性比較低,不會存在大量的重複樣本。一行數據複製100次還是1行數據,因此拿到數據後去重也是很有必要的。
特徵間的重複性低:這個要回歸到線性代數上,假設你有3個特徵,結果,那麼從某種意義上來看你並沒有3個獨立特徵,即特徵間的相關性比較高。對於表達能力比較弱的模型,我們甚至有時還會人為的手動製造一些這樣的變數,但如果你的數據量大量的變數都是相關的,那麼要謹慎地認為你的數據量很大。舉個極端的例子,你有n個變數,結果,那麼說到底你還是只有1個變數。
數據的有效性:此處的有效性指的是你的變數對於解決問題有幫助,而不是完全無關或者關聯性極低的數據。不要小看無關數據,幾乎無處不在。拿我常舉的例子來說:
圖1. 全球非商業性空間飛船發射數量與美國社會學博士畢業數量之間的關係[1]
4. 數據是否越多越好?
承接上一個部分,數據比模型更重要,數據重要性 >> 模型重要性。機器學習模型的表現高度依賴於數據量 [2],選擇對的模型只是其次,因為巧婦難為無米之炊。
但數據不是越多越好,隨機數據中也可能因為巧合而存在某種關聯。Freedman在1989年做過的模擬實驗 [3]中發現,即使數據全是由噪音構成,在適當的處理後,也能發現數據中顯著的相關性:a. 6個特徵顯著 b. 對回歸的做F-test的p值遠小於0.05,即回歸存在統計學意義
以此為例,大量數據不代表一定有顯著的意義,即使相關性檢驗也不能證明這一點。一般來說,需要先確認數據的來源性,其次要確認顯著的特徵是否正常,最後需要反覆試驗來驗證。最重要的是,要依據人為經驗選取可能有關的數據,這建立在對問題的深入理解上。更多相關的討論可以參考微調:你實踐中學到的最重要的機器學習經驗是什麼?。
5. 數據量與模型選擇
一般來說,在大數據量小特徵數時,簡單模型如邏輯回歸+正則即可。在小數據量多特徵下,集成的樹模型(如隨機森林和xgboost)往往優於神經網路。隨著數據量增大,兩者表現趨於接近,隨著數據量繼續上升,神經網路的優勢會逐步體現。隨著數據量上升,對模型能力的要求增加而過擬合的風險降低,神經網路的優勢終於有了用武之地而集成學習的優勢降低。我在微調:怎麼理解決策樹、xgboost能處理缺失值?而有的模型(svm)對缺失值比較敏感呢?曾經總結過一些根據數據量選擇模型的經驗:
數據量很小,用樸素貝葉斯、邏輯回歸或支持向量機
數據量適中或者較大,用樹模型,優先 xgboost和lightgbm
數據量較大,嘗試使用神經網路
所以說到底,依然不存在定式,而依賴於經驗和理解,供大家參考。
6. 鳴謝
寫這篇的文章的起因是來自
@劉文龍和@陳小一
關於機器學習在水環境中應用時數據量的討論(詳見他們的知乎想法)。此處也特別感謝@張馨宇
在評論區關於信噪比的討論,這對於衡量數據質量也很重要。
[1]http://tylervigen.com/spurious-correlations
[2] Halevy, A., Norvig, P. and Pereira, F., 2009. The unreasonable effectiveness of data. IEEE Intelligent Systems, 24(2), pp.8-12.
[3] Freedman, L.S. and Pee, D., 1989. Return to a note on screening regression equations. The American Statistician, 43(4), pp.279-282.


※《Tensorflow:實戰Google深度學習框架》
※微軟發布的可視化圖像/視頻標記工具 VoTT
TAG:AI研習社 |