对半监督学习一直都是一知半解,基本就知道使用了有标签数据和无标签数据,但是怎么使用就没有做过了。正好毕设遇到了标签数据太少的问题,看了看半监督学习。
半监督学习
半监督学习中用了有标签和无标签两种数据,且无标签数据远大于有标签。但是半监督学习对无标签数据有一定要求,没要求的话我们就不用标数据了,机器学习中数据稀缺的问题直接就解决了。通常来说需要:
- 无标签类别平衡
- 无标签的分布需要和有标签相似
- 无标签是有标签的某一个类别
半监督学习可以划分为纯半监督学习和直推学习。纯半监督假定未标记数据不是待预测数据,也就是说我们用未标记数据中的知识,期望学习数据上的假设进而预测其他数据。而直推学习认为未标记数据就是待预测数据,我们用了这些数据来训练模型是为了预测这些数据。
其实这里的有些想法之前本能的会想到试试,但是没有像上面这样系统的归类学习。比如在比赛中,当给出测试集的时候我会用有标签训练一个模型,再预测无标签,找那些输出概率非常确定的加入模型再训练。或者对所有数据聚类找有标签数据周围很近的点作为label。这就是直推学习。而在NLP中常用的就是用开放语料训练一个词向量,这就是纯半监督。
半监督分类
半监督学习按实际算法来说可以分为以下几类:
1.简单自训练
用有标签训练,模型对无标签分类,找概率最大最确定的一些作为label
2.协同训练
认为每个数据可以从不同的角度进行分类,不同的角度训练出不同的分类器,再用这些分类器对无标签样本分类。
定义感觉比较难理解,角度不同其实就是分类器不同。举个栗子,我们将有标签数据分成三份,分别用SVM,xgboost,CNN来分类,就是用三个差异比较大的分类器去训练这三分数据。然后我们用这三个分类器去预测无标签样本,如果这一条预测的都一样那么给它打上标签,如果预测的都不一样那么就放回未标注数据中,如果有两个一样的那么给它打上标签给第三个分类器。
3.标签传播算法
一种基于图的半监督算法,构造图来寻找图中有标签和无标签样本点间的关系。和聚类比较相似,只不过用图的形式来描述,在图中,一个无标签节点的标签是它周围有标签点中同类标签最多的那类。
4.半监督字典学习
用有标签数据作为字典来分类无标签,再加入字典
5.半监督SVM
SVM本质是找间隔最大的分离超平面,半监督SVM的分离超平面在此基础上还要穿过无标签数据中密度最低的区域
半监督深度学习
以上的方法中,如3和5,用到了数据点在向量空间中的分布。但是有的时候数据分布并不是线性的,想象一下如果我们用来描述数据的feature并不完全,这就导致高维信息在一个低维空间中表示,导致数据是非线性的,相互之间的距离并不能准确的描述分类。所以我们引入深度学习,用更复杂的神经网络模型来学习无标签中的信息。
1.无监督预训练
这种方法有人归类于迁移学习,也可以看做半监督学习,在图像或文本中使用比较广泛。例如在图像处理中,我们会用已经训练好的分类器去训练自己的数据,例如用VGG,ImageNet这些网络来训练。在NLP中,我们会用大量的文本来训练词向量然后在自己的文本上分类达到更好的效果
2.自编码预训练
自编码早期是为了训练深层网络的时候让模型更加稳定,采用每一层训练一个自编码器,之后再加一层再训练。在半监督学习中,自编码器可以最大限度的提取无标签数据中的特征,然后我们用这个学习到数据特征的网络去对有标签数据分类
3.伪标签
是上面简单自训练在深度学习中的应用,用标签数据训练的模型分类无标签数据,将确信的标签继续作为有标签训练
资料
半监督:https://zhuanlan.zhihu.com/p/33196506
标签传播算法:https://www.cnblogs.com/given/p/7040606.html