機器學習如何在小樣本高維特徵問題下獲得良好表現?

機器學習如今主要應用在海量數據問題中,樣本量過小會容易過擬合,模型表達能力不足。

但如果某一些現實場景里,樣本很難收集,機器學習應該如何處理這些問題?如何防止過擬合?

有小樣本學習方面的研究嗎?


小樣本學習很多年來一直都是統計機器學習研究的重要問題。

看到已經有人提到了貝葉斯方法以及一些針對小數據量設計的模型(比如SVM)。一般來說還可以適當加入更多的先驗知識(比如假設參數符合某些分布等等)來減少對數據量的需求。比如語音識別里做說話人自適應(把用大量數據訓練好的模型用很少的數據調整到更適合某個說話人的特點)的MAP方法。類似的廣為接受的說話人自適應方法還有把模型分組,進行分組線性變換的MLLR,以及開始就把所有人分為有限的固定類別(類似於線性空間的基),只用少量數據學習基的線性組合的權重的CAT方法等等。類似這樣的trick還有很多。

然後如果一定要用deep learning方法的話,還是可以做貝葉斯。或者把模型的尺寸調小(這樣每個參數的平均統計量就多了)。另外最通用的就是正則化的方式,廣義的正則化的包括L1、L2、dropout、multi-task learning(包括準則的插值等)、early stopping,還有一些空間平滑的方式等等(甚至有人開玩笑說程序有bug也算……)。另外還有人提到transfer learning,比如前面提到的說話人自適應就可以看成某種transfer learning。話說deep learning一開始的時候關注的正是小數據量和無監督學習,只不過後來被大企業帶跑了,於是大家都忘了一開始是怎麼來的(Goodfellow的Deep Learning書里也提了這件事)。


提供幾個關鍵詞:

貝葉斯,active learning,transfer learning


我所接觸的醫療影像、生物信息類的數據,能採集到的樣品數據,相對於商業數據動則幾萬上億來說,基本上都少的可憐。

研究生項目其一,與某種特定手術有關的腦影像,數據質量過關的就22例。項目其二與生物信號有關,受到目前數據採集設備的限制,同一批次最多不過300多樣本。

實驗室其他疾病相關腦影像,少的14、36、72,多的頂天400、1500,全部都在用機器學習嘗試解決問題。生物信息、生物醫學鄰域現狀如此,大量的樣本難收集不是不是特例而是常態。

目前的接觸過的應對方法:

  1. 簡單的可解釋性高的模型,能線性模型就不非線性,特徵提取+特徵工程+統計學習可以的,就不上黑匣子deep Learning。
  2. 簡單的假設,假設特徵稀疏性,只有少量特徵與任務相關,上L1正則化;能二分類不多分類,能樣本平衡就不給自己加戲用更多不平衡的樣本。
  3. 嚴格的交叉驗證,三折五折交叉驗證那是少的,恨不得每個都LOOCV,減少樣本集合劃分的隨機性;有時候超參也用交叉驗證來調,避免人為選擇,就得上嵌套交叉驗證。
  4. 謹慎地特徵工程/特徵選擇/特徵壓縮。先驗知識也好,統計信息也好,PCA也好,把特徵維度降下來,把關鍵特徵找出來,最後哪怕不展示模型只展示關鍵特徵呢,效果不好不要緊,泛化能力好最要緊。
  5. 遷移學習,醫療影像里,拿比較容易獲得標記的數據做訓練,例如ImageNet,公開數據集等,遷移到目標任務上。效果好皆大歡喜,效果不好再試著調調,調了還不好那就是命。

瞎叨叨幾句,不那麼嚴謹,大家看看就好。


概率圖


據我所知沒有,在小樣本情況下不如人,關鍵是不會人的知識傳遞和歸納推理方法。


瀉藥。有,而且這方面的需求有很多。

我們經常會遇到在想訓練某個模型時,找不到合適的公開數據集,或者數據集的收集和標註不方便的情況。如果靠自己標,那麼你可能標不了多少數據。

自然,人們會想辦法怎麼充分利用現有的公開的資源,從而提高工作效率。

舉一個例子,Convolutional Encoder Decoder Network.

除此之外,遷移學習的很多方面都有這方面的問題需要解決。比如 multitask learning, domain adaptation 等。

對這方面感興趣的同學,我們可以私聊。


這個。。。

當樣本遠遠不能覆蓋高維特徵的分布情況時候,誰都救不了


怕不是在參加天池的比賽吧,233


可以關注一下few shot learning 和 meta learning


同樣做醫學影像的,大部分都是通過t test篩選驗證有效性,假陽性很高的可以用permutation test


active learning,可以在query少量樣本(uncertain, informative,diverse )的情況下,獲得巨大的性能提升。


看到前面有人做的醫療影像的,我也是做的相關方面的,結合自己的經驗來拋磚引玉一下吧。

我認為可以嘗試結合先驗知識建立先驗模型,諸如概率密度模型,pca模型等,這種模型可能有兩個作用,一個是可能降低問題的複雜度,減少需要的深度學習網路的層數,另一方面如果模型建立的好的話,可以利用模型產生訓練數據,從而迴避數據不足的問題


說到這個我就想到一個問題了,就是我最近面臨的。

圖像處理,字元識別,深度卷積神經網路,希望有大牛來看看,一起討論一下技術實現 - vista918的文章 - 知乎

http://zhuanlan.zhihu.com/p/32249122


佔個坑,到了單位再寫,目前我做的就是疾病診斷中的sss problem


贊同 @張日天 和 @王勇 的答案。遷移學習和傳統統計模型是唯二出路。

遷移學習大家說的不少,關於傳統統計模型大體分兩部分:參數估計和假設檢驗。比如對於時間序列數據,先後需要acf/pacf驗證並差分去除平穩性,ma/ar模型參數估計,假設檢驗。


這個問題用各種機器學習演算法不如用統計檢驗的方法做前期的特徵工程。

機器學習適合大量海量數據。

統計檢驗適合少量數據。例如著名的T檢驗


數據量小的話就試試transfer learning,用別人pretrained model試試


推薦閱讀:

Kaggle 的比賽在 Machine Learning 領域中屬於什麼地位?

TAG:人工智慧 | 數據挖掘 | 機器學習 | 深度學習DeepLearning | Kaggle |