半监督学习
当我们的训练集标签缺失,也就是有训练集X1=[(x.y)....],X2=[(x)...]。前者数据有标签,后者数据无标签。我们训练一个模型时,如果只使用前者对后者来说是一种浪费。如果我们要补全后者,又有极大的成本。
我们能否找到一个学习方法,能利用两者学习到一个模型呢?这就是半监督模型
为什么加入无标签数据还能增强模型呢?
首先我们做一个假设,所有的样本都由高斯混合模型生成。其概率密度如下
半监督学习前者x是某个样本,后者是高斯模型的参数
我们需要计算的概率是
半监督学习由推导可知,后验概率可以分解为两个概率乘积。前一个概率与标签有关,而后面的概率与标签无关。那么我们无标签数据实际上就是在学习后一个概率。研究指出,无标签数据可使模型得到增强。
但要利用无标签数据需要满足条件。最常见的是聚类条件和流型条件。前者假设数据可分为多个簇,也就是相同类数据具有相似性。后者要求相邻样本输出相邻,因为输出没有一定要是某个类,输出范围更大了,所以后者可以看做是前者的一个推广。
半监督模型可以分为两种,一种是pure纯监督,一种是直推学习。
前者不把无标签模型看做待测数据。后者将无标签模型看做待测数据。
co-train
也叫做协同训练。是一种直推模型
它是作为多视图模型出现。何为视图,一个属性集可以看做一个视图。
算法前提:各个视图之间满足条件独立(实际上真正独立的情况很少,但是在弱条件下也能提高性能),且两个视图间充分冗余(也就是说一个视图足够产生最优学习器的信息,或者说这个视图可以由其他视图推出)
假设我们有两个视图的数据,我们对每一个有标签的视图数据进行训练,得到两个model。然后我们用两个model对无标签的数据进行训练。模型1从输出标签中选出置信度最高的数据作为模型2训练数据,模型2也从输出标签中选出置信度最高分数据作为模型1的训练数据。两个模型进行第二轮训练,训练完后重复操作,直到模型不在变化。
对于有大量的特征值情况下,可以把属性集随机划分为两个视图也有很好效果。
co-forest
用森林来代替学习器,出手于周志华老师
代码实现目前只有java还未进行过尝试。
主要思想,对于森林中的每一棵树,首先也是用带标签的数据先训练。而后,取除了本树以外其他树为该树的伴随集成,该集成对无标签数据进行预测,预测投票超过阈值theta就加入训练集。
也有置信度判断和采样方法,不详细说明。
tri-train
不要求两个独立的视图,使用更泛化。
也属于是直推模型。
我们一共有3个分类器,首先将数据有放回的抽样,抽得3组数据,并用于训练这三个分类器。
训练好后,我们将无标签样本作为预测集,分别让三个分类器进行预测。预测出的标签可以分为两类,一类是三个分类器都预测得一样,一类是2个分类器一个结果另一个结果不一样(由于是二分类问题)。我们以少数服从多数的原则,将后一类数据的标签定为多数投票的结果,并将其放入预测错的训练器进行训练...反复这个过程直到模型不再变化。
用该模型进行预测时,我们仍然采用这种投票的集成学习方法。
且最终生成的3个学习器必须强于弱学习器,且有较大的分歧
如果出现噪声,会令少数一类是正确,这样训练的数据将是错误的。研究表明,少量的噪声的负面效果会被大量未标记结果抵消。
TSVM
该模型属于直推模型,其首字母t就是直推的意思
该模型没有广泛使用的原因就是,太慢了太慢了太慢了。
先讲讲其原理,其目标也是一个分类器。
半监督学习第一步,用标签数据训练出一个标准的svm模型,让模型对无标签数据进行预测,从预测结果中选出两个最可能错误的数据(要求两数据类别相反),交换它们的标签值并喂进模型。反复如此,直到惩罚稀疏Cl=Cu
半监督学习
网友评论