标签: 半监督学习,文本分类
做者:炼己者
---
欢迎你们访问个人简书以及个人博客,你们若是感受格式看着不舒服,也能够去看个人简书,里面也会有发布
本博客全部内容以学习、研究和分享为主,如需转载,请联系本人,标明做者和出处,而且是非商业用途,谢谢!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中(更新样本集),再去训练分类器
如此循环往复,直到知足循环跳出条件,获得最终的分类器
理解要点:
- 未标记数据从头至尾没有减小过
- 每次迭代只是从中取出知足条件的数据,用来训练分类器,让分类器愈来愈好。知道最终产生的分类器可让全部未标记数据知足条件。这里的条件是在变化的,预测几率在下降
基于自训练的半监督学习算法作出来的效果有点奇怪,模型效果先降低后上升,因为数据量很大,代码还在运行,效果目前未知,后面代码运行结果出来再更新在这里。但愿本文会对你们有所帮助