在數據量不足的情況下,用哪種數據挖掘模型效果會更好?

我們在機器學習的案例中經常會陷入一種情況,即數據量不足,或者在維度過高的情況下,數據量相對不足。

如果是維度過高造成的數據量不足(維度災難),我們可以用降維的方式來「緩解壓力」,但是在某些情況下,即使降維之後,我們依然沒有足夠的數據。

比如一次調查中,我們只獲得了幾千份樣本,那麼,在數據量已經固定且很少的情況下,我們可以用什麼方法,或者哪種模型來取得更好的預測性能?為什麼?


數據量少的時候應該選擇怎樣的模型,其實只能回答『That depends』,機器學習領域一大類papers都是關於如何在存在假設的數據中尋找一種合適的表示(『降維』或『升維』),以提高分類器、回歸器的性能。

不如,題主舉出幾個具體問題,比如數據的形式(圖像或者文本,是否有缺失),數據的規模(樣本數和維度大小),數據中存在的結構信息(稀疏、低秩)。這樣更容易回答。

----------------------------------------我是分割線-------------------------------------------

題主 @雷天琪 在評論中補充了一個case,如下:

維度非常高1000多維度,並且每個維度都很重要,數據量很少,是調查結果,只有近萬份,數據是很稀疏的,基本上是連續值。在這種情況下,如何選擇模型?為什麼?

這其實還是一個比較一般的問題,我盡量從一個比較一般的角度回答,描述的也都是一些常用的簡單的做法,假設要做的是一個分類問題,我描述一下我拿到這樣一份數據的做法(流程),面對實際情況,我們總是一步一步來,先分析數據,嘗試最簡單的方案,再作調整。已知:1000維的feature,近10000的sample,而且數據是稀疏的。

首先,嘗試一下常用的線性分類器,比如SVM、LR這些,看訓練誤差和測試誤差的差異,這個時候可能出現多種情況。

(1) 如果訓練誤差遠小於測試誤差,說明分類器已經過擬合了,考慮如何避免過擬合。

(2) 如果訓練誤差與測試誤差差不多,但是測試誤差太大,說明模型複雜度很可能不夠。

(3) 如果訓練誤差與測試誤差差不多,而且測試誤差已經足夠小,結束。

針對(1),這個時候產生了嚴重的過擬合,這意味著樣本數目不夠,一般我們沒法補充樣本。那麼就要考慮如何採用提高泛化能力,如果數據沒有很特別的性質(稀疏、低秩等),我們可以考慮添加一些常用正則化項,比如L2-norm,還可以使用一些常用的降維方法(其實也就是常用的假設),比如PCA(假設方差小的數據分布方向是雜訊產生的)、LDA。如果數據中有一些性質,比如題主提到feature是稀疏的,由於數據來自『調查結果』,所以很多時候不是數據稀疏,而是數據不完整(被調查的對象沒有提供這部分數據,而不是它沒有這部分屬性),那麼可以通過補全這些feature來降低缺失帶來的影響,比如假設樣本構成矩陣X,每一列有一個樣本組成,那麼我們可以對X進行低秩分解,比如Xapprox DS,這樣S的一個列就代表了X的一個列,DS的乘積又補全了X,此時,用S作為訓練樣本可能得到更好的結果。再比如,數據中存在大量的污染,一些廢的feature其實對label影響不大,那麼我們可以考慮去除一些feature,降低參數空間,從而提高泛化性,簡單的方法是給訓練參數w加稀疏正則項,比如常用的L1-norm(要是覺得不夠係數還可以用capped L1-norm、Lp-norm、SCAD、MCP這些更加稀疏的正則化項),來過濾掉不重要的feature。總而言之,要依賴於數據的特點(除了上面提到的特性,也許還存在正負樣本不平衡等性質),設計出減小過擬合程度的方案。

針對(2),可以採用更加複雜的模型,比如帶隱變數的模型,比較典型的就是Neural Network,當然這不是唯一的選擇,還有決策樹以及ensemble類的方法GBDT、Random Forest等。

針對不同情況選擇合適的模型之後,觀察現在的訓練誤差和測試誤差。回到第(1),(2),(3)步,繼續考察新方案。針對具體的業務問題,關鍵在於迭代得更新方案(不斷優化泛化性能),發現數據的新的特性,最終設計出合適於具體業務的模型。



如果數據不足,那麼越簡單越好。


謝邀。

在數據量不足或計算資源不多的情況下,就需要人手在feature上下多點功夫,加多點artificial knowledge。


幾千份樣本對於大部分機器學習模型, 已經足夠了(除了深度學習之類的)

根據"No free lunch"原則, 沒有一個模型比另一個模型好的說法, 必須結合具體問題.

建議:

1 做好特徵工程

2 不要用太多的特徵

3 做好交叉驗證


我還是寫一些自己的理解,

其實這裡所說的數據量不足,可以換一種方式去理解:在維度高的情況下,數據相對少。

舉一個特例,比如只有一維,和1萬個數據,那麼這種情況下,我們可以認為數據量其實是足夠的,因為數據密度相對來說很高。

如果數據的維度有1000維,數據量仍然有1萬,這種情況下,數據的密度就相當低了。

引用wiki里的兩句話:

- The common theme of these problems is that when the dimensionality increases, the volume of the space increases so fast that the available data become sparse. This sparsity is problematic for any method that requires statistical significance. In order to obtain a statistically sound and reliable result, the amount of data needed to support the result often grows exponentially with the dimensionality.

- With a fixed number of training samples, the predictive power reduces as the dimensionality increases, and this is known as the Hughes effect

[3]

or Hughes phenomenon

具體可以查看鏈接:Curse of dimensionality

簡單的翻譯過來就是,當維度增加的時候,訓練所需要的數據量需要成指數級別的增長才能滿足要求。

維度很高,且數據量不足的情況下,訓練模型僅僅是去「記憶」數據,而不是去「學習」數據。因為對於高維度來說,空間的自由度非常大,在數據量相對不高的情況下,其實每一個數據都可以看成是一個「特例」,這也是造成過擬合現象的原因。

但是,高維度的情況下也有一個好處:既然空間的自由度很高,那麼數據就更可能線性可分,在維度高到一定程度的時候,我們就可以認為其線性可分的概率為1 (其實這個觀點是缺少嚴謹的數學驗證的,可以參考:如何證明無窮多維的情況下,數據一定線性可分? - 雷天琪的回答)。

所以得出的結論是,在數據量不足的情況下(相對於高維度下的數據量不足問題),我們可以使用線性分類器來解決問題,因為其「更可能線性可分」,比如,使用SVM來分類數據量少的問題。

最近做的一個項目就遇到了這個問題,從上面的分析的基礎上,可以看出線性分類器可以保證在數據量很少的情況下的性能,但是我的實際項目不能驗證這一點。 :(

我的實際項目中,效果最好的還是隨機森林(可以應對線性不可分的情況),而SVM和其他的一些模型並無明顯差別,唯一顯著的效果是,False Positive很少,不過這一點在某些情況下很重要。至於原因,現在只能理解為數據中有錯誤。


偽命題。一,何為「不足」?真正問題是,為什麼sample「少」?獲取更多sample是否可能,什麼代價?二,給定數據,只能cook what you have。真正問題是,如何合理的choose, tune implement model 以提高預測能力,這個無論你有多少數據都是需要做的。

特徵工程很重要,而且是要加入人的knowledge的特徵工程。實習時給醫院做過醫療數據,最簡單的例子就是,血壓的benchmark對於不同性別不同年齡不一樣。所以與其直接加入「血壓數值」,「性別」和「年齡」;不如把血壓按後兩者分成一個category。

其次模型選擇,請google 「VC dimension」

最後tuning,數據過小傳統的Cross validation可能有randomness。可以重複cv,randomizing assignment of data points。這個簡單的方法剛幫我贏了一個INFORMS的全球的數據分析比賽。


如果是分類問題,那就SVM吧


推薦閱讀:

機器學習or電子,我該選哪個?
想從事大數據、海量數據處理相關的工作,如何自學打基礎?
PHP或者python進行數據採集和分析,有什麼比較成熟的框架?
超級菜鳥怎麼學習數據分析?
機器學習中使用「正則化來防止過擬合」到底是一個什麼原理?為什麼正則化項就可以防止過擬合?

TAG:數據挖掘 | 機器學習 |