經常在面試過程中被問到:「你是否嘗試了其他方法」或者「你還了解其他的方法嗎?」,在遇到這種問題時,一個我認為是初級者的回答是「我還使用了某某某方法」。我本身對研究各種分類方法沒有特別大的興趣,所以往往會回答「我沒用過其他方法,效果恐怕也一般。」但是這樣的回答雖然是實踐總結出來的事實,但往往會使你丟失掉一次機會,或者會讓面試你的人覺得你沒什麼水平。被迫或者說也是用證據來證明在演算法上改進來提升分類的效果不太可行,因此特意搜集並整理了這篇文章。

模型選擇經驗

在《信息檢索導論》這本書中有下邊的幾條分類演算法選擇原則,當然這裡也有我自己實踐的心得。

  1. 一個普遍的事實是,採用領域相關的文本特徵在效果上會比採用新的機器學習方法獲得更大的提升。
  2. Jackson和Moulinier(2002年)指出:「對數據的理解是分類成功的關鍵之一」。
  3. 當面對一個具體的分類需求時,第一個要問的問題是:訓練數據(已準確標註的數據)有多少?如果有足夠的時間用於系統實現的話,那麼大部分時間可能要花在數據的準備上。
  4. 在沒有標註數據的情況下,一般首先採用編製規則的方法分類數據。一個基本合理的時間長度是每個類別需要標註兩天時間
  5. 已標註數據的情況下,一般採用高偏差低方差的分類器比如樸素貝葉斯分類器,這樣可以有效避免過擬合。當然,無論採用何種模型,模型的質量始終會因訓練數據有限而受到不利影響。
  6. 快速標註數據的方法有bootstraping方法。將分類器有所猶豫的文本交給人工進行標註。
  7. 快速進行錯誤糾正的方法是在分類器之上,再建立一個基於布爾規則的分類器人工干預
  8. 如果具有極大規模的數據,那麼分類器的選擇也許對最後的效果沒有什麼影響。在這種情況下,一般可以從訓練模型擴展性運行效率這兩方面來選擇分類演算法。
  9. 一個通用的經驗法則是,訓練數據規模每增加一倍,那麼分類器的效果將得到線性提高
  10. 對於類別數目很多的分類問題,應當採用多類別分類器比如樸素貝葉斯,或者對類目體系分層以達到性能和效果的提升。
  11. 從特徵選擇上下功夫,比如抽取短語特徵。比如將實體特徵(ISBN號,化學式等)按照類別統一編號。

模型選擇圖

上圖為sklearn提供的關於模型選擇的參考圖。該圖的源網頁為(scikit-learn.org/stable)。圖中左上為分類演算法,左下為聚類演算法。在聚類演算法中,GMM、VBGMM為語音處理演算法。MeanShift為圖像處理演算法。因此應用於文本的聚類演算法有KMeans(數據量小於1萬)、MiniBatchKMeans(數據量大於1萬)、Spectral Clustering(數據量小於1萬),它們都是用來解決已知簇數量的演算法,對於未知簇數量的情況,可以採用增量聚類演算法比如single-pass。在分類演算法中當數據量小於10萬時,使用分類器LinearSVC或者NaiveBayes。當數據量大於10萬時採用隨機梯度下降線性分類器SGD Classifier

模型選擇表

上邊的表參考了這篇知乎的文章後總結出來的原文地址為(機器學習演算法優缺點對比及選擇(匯總篇))實在無法在知乎上寫表,拆開了又不好看了,所以只能截圖了。

這裡加粗的幾種分類聚類方法會在專欄中詳細寫出,請關注專欄。


推薦閱讀:
相关文章