基於協同訓練的半監督文本分類算法

標籤: 半監督學習,文本分類
做者:煉己者
---
本博客全部內容以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,而且是非商業用途,謝謝!
若是你們以爲格式看着不舒服,也歡迎你們去看個人簡書python


半監督學習文本分類系列

用半監督算法作文本分類(sklearn)
sklearn半監督學習(sklearn)
基於自訓練的半監督文本分類算法算法


一. 摘要

本文主要講述基於協同訓練的半監督算法作文本分類,用三個差別性比較大的分類器對未標註數據進行標註,它們能夠進行交叉驗證,大大提高了對未標註數據標記的置信度(簡單理解就是三個分類器同時對一個未標註數據標記同樣的標籤,那麼這個標籤就可信了),從而提升分類器標註的準確率函數

二. 操做流程

1. 文本預處理

這裏就再也不贅述,參考這篇文章:中文文本預處理流程
這上面的流程很完整,並且有代碼,你只須要按着那個操做來便可學習

2. 協同訓練的操做方法

操做思路:

  1. 數據data平均分紅三份data1,data2,data3(也就是把上面操做以後獲得的文本向量均分紅三份)
  2. 寫一個函數:包含三個分類算法。就是構建三個差別性較大的分類器,我採用的是SVM,貝葉斯,xgboost三種算法。
  3. 用data1訓練SVM分類器,用data2訓練貝葉斯分類器,用data3訓練xgboost分類器。這樣咱們就獲得了三個初步訓練好的分類器。
  4. 接下來就是對剩下的全部未標註數據進行操做了,未標註數據一條一條過
    操做思路:假設有10條未標註數據,第一條取出來了,三個分類器對它進行預測。有如下三種可能:測試

    • 若是你們預測的都同樣,那就把它連同預測的標籤加入到總的訓練集data裏。
    • 若是有兩個預測的同樣,另一個分類器預測的不同,好比SVM和貝葉斯預測的同樣,xgboost的不同,就把它們倆的標註結果放到data3裏,而後再讓xgboost對更新的data3進行訓練。
    • 若是你們都預測的不同,就把它放回未標註數據中

這樣操做的目的就是爲了避免斷地訓練三個分類器,讓它們最終對未標註數據預測的結果同樣。這樣一條一條未標註數據地過,直到未標註數據爲空,最終過完。3d

3. 測試結果

我選了5000條數據進行預測。blog

測試的操做流程

  1. 把測試數據用一樣的方法轉化成文本向量
  2. 上面訓練過程當中會保存模型,怎麼操做能夠看這篇文章 :
    如何保存sklearn訓練好的算法模型
  3. 你把全部的模型都保存到一個目錄下了,那麼咱們進行預測的時候怎麼批量地讀取這些模型呢?簡單地說就是怎麼把目錄下全部的文件的文件名讀取到一個列表上。看這裏—— python如何獲取目錄下的全部文件名
  4. 讀取模型,調用sklearn裏的函數計算精度。由於保存的模型太多了,我是每種模型取100個左右,作測試,而後畫折線圖,看看精度的變化狀況。

先放圖,看結果

1)這是svm的結果,咱們發現訓練到後面,模型的效果在下降

svm

2)這是bayes的結果,一開始有點詭異,但後面趨於穩定

bayes

3)這是xgboost的結果,很鬼畜,不知道爲何會如此波動

xgboost

從模型效果上來說,我選出了每種模型效果最好的狀況

SVM:0.62
bayes:0.67
xgboost:0.75get

4.結論

從圖中觀察,咱們發現:svm先升後降,bayes先升後穩定,而xgboost很鬼畜。可是效果xgboost是最強的。這裏面的緣由我知識有限,暫時沒法解釋,大夥要是有什麼想法能夠在底下評論,咱們能夠交流交流博客

相關文章
相關標籤/搜索