《轉載》14種文本分類中的常用算法

一、14種文本分類中的常用算法

包括8種傳統算法:k臨近、決策樹、多層感知器、樸素貝葉斯(包括伯努利貝葉斯、高斯貝葉斯和多項式貝葉斯)、邏輯迴歸和支持向量機;

4種集成學習算法:隨機森林、AdaBoost、lightGBM和xgBoost;

2種深度學習算法:前饋神經網絡和LSTM。 各篇鏈接如下:

  1. 測試環境搭建與數據預處理: https://blog.csdn.net/qq_43012160/article/details/94993382
  2. 決策樹、樸素貝葉斯(伯努利貝葉斯、高斯貝葉斯和多項式貝葉斯): https://blog.csdn.net/qq_43012160/article/details/95366183
  3. k臨近、邏輯迴歸、SVM支持向量機:https://blog.csdn.net/qq_43012160/article/details/95506126
  4. 隨機森林、AdaBoost、多層感知器: https://blog.csdn.net/qq_43012160/article/details/95762591
  5. lightGBM、xgBoost: https://blog.csdn.net/qq_43012160/article/details/96016265
  6. 前饋神經網絡、LSTM(包括pycharm深度學習環境搭建): https://blog.csdn.net/qq_43012160/article/details/96101078

二、性能評估

先放代碼和數據集:

關注微信公衆號 datayx 然後回覆 文本分類 即可獲取。

所有14種算法我都跑了一遍,其中4種算法要麼把我電腦跑死機了,要麼時間長的令人髮指,就沒跑完。整理了跑出來的10種算法的正確率和耗時如下:

下面這篇博文有一個區別度更大、更完整的排名: https://www.kesci.com/home/project/5cbbe1668c90d7002c810f79

這種簡單的文本分類練習,不同算法的性能分層還是比較明顯的。

三、知識總結

1.機器學習、集成學習和深度學習:

1)機器學習泛指所有的使機器通過建立和調整模型從而實現特定功能的算法。2)深度學習是運用了多層的人工神經網絡(ANN)的機器學習方法。3)集成學習是指通過將多個弱分類器的分類結果進行整合,獲得比單個弱分類器更好效果的機器學習方法。

集成學習和深度學習屬於機器學習。

2.集成學習的bagging和boosting思想:

bagging中的各個弱分類器取值是相互獨立的、無關的,常使用有放回抽樣實現。 boosting中的弱分類器是在基分類器/前一個分類器的基礎上通過迭代不斷優化/調整出來的。

3.三種樸素貝葉斯:

高斯貝葉斯GaussianNB、多項式貝葉斯MultinomialNB和伯努利貝葉斯BernoulliNB。 分別對應數據滿足高斯分佈(正態分佈)、多項式分佈和伯努利分佈的訓練集數據。

1)伯努利貝葉斯即特徵的取值只有取和不取兩類(0和1),對應樸素貝葉斯公式中, p(yi)=標籤爲yi的文本數(句子數)/文本總數(句子總數) p(xj|yi)=(標籤爲yi的文本中出現了單詞xj的文本數+1)/(標籤爲yi的文本數+2)。

2)多項式貝葉斯其實就是伯努利貝葉斯的特徵取值由簡單的0-1擴展爲多個值的情況, p(yi)=標籤爲yi的文本中的單詞總數/訓練集中的單詞總數 p(xj|yi)=(標籤爲yi的文本中單詞xj的出現次數+1)/(標籤爲yi的文本中的單詞總數+詞袋單詞種數)。

3)高斯貝葉斯常被用來處理連續數據(如身高)。

4.AdaBoost、lightGBM(GBDT)和xgBoost

AdaBoosting是Boosting框架+任意基學習器算法+指數損失函數。 GBDT是Boosting框架+CART迴歸樹模型+任意損失函數。 AdaBoosting利用前一輪迭代弱學習器的誤差率來更新訓練集的權重,而GBDT採用梯度下降法:丟掉大梯度的數據而收納梯度較小的數據加入目標決策樹以使樹迴歸(貼近真實值)。 xgBoost的損失函數還考慮了樹不能太複雜且要分配均衡:一棵樹太複雜,鶴立雞羣,就容易產生弱分類器間的過擬合;一棵樹內部的節點間不均衡,就容易導致大節點代表的分類特徵/分裂閾值的權重過大,就會產生樹內部節點之間的過擬合。

值得注意的是AdaBoosting的誤差率、權重和GBDT的梯度都是在弱分類器之間的關係上的,是在分類器迭代時起作用的,而不是用在單個弱分類器的節點分裂層面上的,但其實是有影響的。

這裏就要說到損失函數、決策樹節點分裂閾值和弱分類器迭代、生成之間的關係了。節點分裂閾值和分類特徵的選定是根據損失函數來確定的——假設損失函數爲L(w),w爲目標決策樹的葉節點分裂閾值向量,我們使損失函數最小,求得此時的min(w)作爲目標決策樹的節點分裂閾值。

在這個過程中我們雖然做的是對於單一決策樹的節點分裂特徵/閾值選定,但如果一棵樹的節點分裂特徵/閾值全都確定了,這棵樹也就確定了。所以我們就可以通過使損失函數L(w)取最小值的方式,確定w,同時優化決策樹的節點分裂(通過w)和不同弱分類器間的迭代優化(通過使L(w)最小)。即通過w確定目標決策樹,通過w的取值帶動L(w)取最小,進而實現弱分類器的迭代優化。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章