標籤: 半監督學習,文本分類
做者:煉己者
---
歡迎你們訪問個人簡書以及個人博客,你們若是感受格式看着不舒服,也能夠去看個人簡書,裏面也會有發佈
本博客全部內容以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,而且是非商業用途,謝謝!html
用半監督算法作文本分類(sklearn)
sklearn半監督學習(sklearn)算法
以前調用sklearn庫裏的半監督算法——標籤傳播算法作文本分類,可是它沒法支持大數據量的操做,因此就放棄了。小的數據量是能夠跑的,詳情你們能夠看以上兩篇文章。性能
本文主要講述的是基於自訓練的半監督學習算法作文本分類,自訓練算法是半監督學習中比較常見的方法之一,可是自訓練方法有一個很大的問題,在迭代過程當中,若是初始訓練樣本集中已標註樣本的數量過少,則可能會出現錯誤標註,並經過迭代使錯誤逐漸被放大,最終致使錯誤累積。因此咱們採用對未標註樣本重複標記策略來優化自訓練算法。學習
把文本轉爲TFIDF向量的過程,這裏的操做能夠看如下文章:
中文文本的預處理(sklearn)
使用不一樣的方法計算TF-IDF值
分類算法
xgboost分類算法
也可調用sklearn庫裏的算法來操做,這裏可自由發揮,拿各類算法包去試試大數據
樣本集是由少許已標註的數據和大量未標註的數據組成優化
- 首先用監督學習算法(好比SVM)訓練已標註數據,而後再用訓練所得的初始分類器對未經標註數據進行預測,預測得出的預測類別機率越大,表明分類取得的置信度越高,將置信度較高的文本連同其分類標註一塊兒加入到已標記的數據中,從新訓練分類器(每次都要從未標註樣本扣除被選擇的樣本),迭代訓練直到未標註樣本爲空集結束。
- 很顯然自訓練算法的核心問題即是選擇高置信度的未標記樣本,完成訓練集的擴充。這裏面問題很明顯,若是未標註的數據預測類別錯誤,那麼每次迭代都會形成錯誤累積,久而久之分類器的性能勢必降低,因此咱們對未標記樣本進行重複標記,減小分類錯誤在訓練過程的積累,進而提升分類效果
- 重複標記策略的具體思想是在第t次迭代中,先對未標記數據進行預測,而後選擇數量大於第 t-1 次迭代的未標記數據來擴充樣本集,而且這些被選擇的未標記數據再也不從原始的未標記數據集中刪除,而是每次迭代過程都對其進行重複標記,以此來保證錯誤標記的樣本能在後續迭代過程當中被修正。
若是不是很理解的話你們能夠看一下算法步驟3d
輸入:標註數據集X1 ,未標註數據集X2,參數:預測機率p,預測機率的減少速率c
輸出:最終分類器
1)初始化預測機率>p的樣本集U1爲空,初始化樣本集U2爲空htm
註釋:blog
- U1的做用是添加每次迭代知足條件的未標註數據集
- U2的做用是把符合要求的數據添加訓練數據中,起的是中間過分做用
- 這裏劃分U1和U2緣由是U1每次迭代後要重置爲空,而U2纔是真正把符合要求的未標註數據加入到已標註數據中。U2就是個中間人
2)while(len(U2) < len(x2))get
註釋:
這裏的意思是說只要知足條件的未標註數據量等於未標註數據的總量則跳出循環。
如下內容都是在while循環中完成
3)利用X1訓練初始分類器clf0
4)利用clf0對X2進行標記
5)選擇預測機率>p的數據放到U1中,準備對X1進行擴充
6) if: len(U2) != 0 and len(U1) <= len(U2),則p = p - c(預測機率下降)
else: U2 = U1
註釋:
這裏的意思是指若是本次預測機率>p的未標註樣本集比上一次迭代的小並且上一次的不能夠是空,那麼讓預測機率下降,不然把U1賦值給U2
7)重置U1爲空集
8)把U2添加到X1中(更新樣本集),再去訓練分類器
如此循環往復,直到知足循環跳出條件,獲得最終的分類器
理解要點:
- 未標記數據從頭至尾沒有減小過
- 每次迭代只是從中取出知足條件的數據,用來訓練分類器,讓分類器愈來愈好。知道最終產生的分類器可讓全部未標記數據知足條件。這裏的條件是在變化的,預測機率在下降
基於自訓練的半監督學習算法作出來的效果有點奇怪,模型效果先降低後上升,因爲數據量很大,代碼還在運行,效果目前未知,後面代碼運行結果出來再更新在這裏。但願本文會對你們有所幫助