標(biāo)簽: 半監(jiān)督學(xué)習(xí),文本分類
作者:煉己者
本博客所有內(nèi)容以學(xué)習(xí)、研究和分享為主,如需轉(zhuǎn)載,請(qǐng)聯(lián)系本人,標(biāo)明作者和出處,并且是非商業(yè)用途,謝謝!
半監(jiān)督學(xué)習(xí)文本分類系列
用半監(jiān)督算法做文本分類(sklearn)
sklearn半監(jiān)督學(xué)習(xí)
基于自訓(xùn)練的半監(jiān)督文本分類算法
一. 摘要
本文主要講述基于協(xié)同訓(xùn)練的半監(jiān)督算法做文本分類,用三個(gè)差異性比較大的分類器對(duì)未標(biāo)注數(shù)據(jù)進(jìn)行標(biāo)注,它們可以進(jìn)行交叉驗(yàn)證,大大提升了對(duì)未標(biāo)注數(shù)據(jù)標(biāo)記的置信度(簡(jiǎn)單理解就是三個(gè)分類器同時(shí)對(duì)一個(gè)未標(biāo)注數(shù)據(jù)標(biāo)記一樣的標(biāo)簽,那么這個(gè)標(biāo)簽就可信了),從而提高分類器標(biāo)注的準(zhǔn)確率
二. 操作流程
1. 文本預(yù)處理
這里就不再贅述,參考這篇文章:中文文本預(yù)處理流程
這上面的流程很完整,而且有代碼,你只需要按著那個(gè)操作來(lái)即可
2. 協(xié)同訓(xùn)練的操作方法
操作思路:
- 把數(shù)據(jù)data平均分成三份data1,data2,data3(也就是把上面操作之后得到的文本向量均分成三份)
- 寫一個(gè)函數(shù):包含三個(gè)分類算法。就是構(gòu)建三個(gè)差異性較大的分類器,我采用的是SVM,貝葉斯,xgboost三種算法。
- 用data1訓(xùn)練SVM分類器,用data2訓(xùn)練貝葉斯分類器,用data3訓(xùn)練xgboost分類器。這樣我們就得到了三個(gè)初步訓(xùn)練好的分類器。
- 接下來(lái)就是對(duì)剩下的所有未標(biāo)注數(shù)據(jù)進(jìn)行操作了,未標(biāo)注數(shù)據(jù)一條一條過(guò)
操作思路:假設(shè)有10條未標(biāo)注數(shù)據(jù),第一條取出來(lái)了,三個(gè)分類器對(duì)它進(jìn)行預(yù)測(cè)。有以下三種可能:
- 如果大家預(yù)測(cè)的都一樣,那就把它連同預(yù)測(cè)的標(biāo)簽加入到總的訓(xùn)練集data里。
- 如果有兩個(gè)預(yù)測(cè)的一樣,另外一個(gè)分類器預(yù)測(cè)的不一樣,比如SVM和貝葉斯預(yù)測(cè)的一樣,xgboost的不一樣,就把它們倆的標(biāo)注結(jié)果放到data3里,然后再讓xgboost對(duì)更新的data3進(jìn)行訓(xùn)練。
- 如果大家都預(yù)測(cè)的不一樣,就把它放回未標(biāo)注數(shù)據(jù)中
這樣操作的目的就是為了不斷地訓(xùn)練三個(gè)分類器,讓它們最終對(duì)未標(biāo)注數(shù)據(jù)預(yù)測(cè)的結(jié)果一樣。這樣一條一條未標(biāo)注數(shù)據(jù)地過(guò),直到未標(biāo)注數(shù)據(jù)為空,最終過(guò)完。
3. 測(cè)試結(jié)果
我選了5000條數(shù)據(jù)進(jìn)行預(yù)測(cè)。
測(cè)試的操作流程
- 把測(cè)試數(shù)據(jù)用同樣的方法轉(zhuǎn)化成文本向量
- 上面訓(xùn)練過(guò)程中會(huì)保存模型,怎么操作可以看這篇文章 :
如何保存sklearn訓(xùn)練好的算法模型 - 你把所有的模型都保存到一個(gè)目錄下了,那么我們進(jìn)行預(yù)測(cè)的時(shí)候怎么批量地讀取這些模型呢?簡(jiǎn)單地說(shuō)就是怎么把目錄下所有的文件的文件名讀取到一個(gè)列表上??催@里—— python如何獲取目錄下的所有文件名
- 讀取模型,調(diào)用sklearn里的函數(shù)計(jì)算精度。因?yàn)楸4娴哪P吞嗔耍沂敲糠N模型取100個(gè)左右,做測(cè)試,然后畫(huà)折線圖,看看精度的變化情況。
先放圖,看結(jié)果
1)這是svm的結(jié)果,我們發(fā)現(xiàn)訓(xùn)練到后面,模型的效果在降低

2)這是bayes的結(jié)果,一開(kāi)始有點(diǎn)詭異,但后面趨于穩(wěn)定

3)這是xgboost的結(jié)果,很鬼畜,不知道為什么會(huì)如此波動(dòng)

從模型效果上來(lái)講,我選出了每種模型效果最好的情況
SVM:0.62
bayes:0.67
xgboost:0.75
4.結(jié)論
從圖中觀察,我們發(fā)現(xiàn):svm先升后降,bayes先升后穩(wěn)定,而xgboost很鬼畜。但是效果xgboost是最強(qiáng)的。這里面的原因我知識(shí)有限,暫時(shí)無(wú)法解釋,大伙要是有什么想法可以在底下評(píng)論,我們可以交流交流
以下是我所有文章的目錄,大家如果感興趣,也可以前往查看
??戳右邊:打開(kāi)它,也許會(huì)看到很多對(duì)你有幫助的文章