self-trainning, co-trainning

self-trainning, co-trainning

  • 为什么要使用半监督学习算法
  • self-trainning
      • 算法流程
      • 建议
      • 缺点
  • co-trainning
      • 区别
      • 原则
      • 应用
      • 优点
    • 总结
  • co-trainning 改进

为什么要使用半监督学习算法

一般而言,当训练数据量过少时,监督学习得到的模型效果不能满足需求。

  1. 样本的分布不能真正代表真实数据的分布特征
  2. 数据量过少不能满足训练学习的要求

导致训练数据得到的模型会出现不能正确找到真实数据的分类边界问题,因此用半监督学习来增强效。

  1. 利用现有数据模拟出真实数据在特征空间的分布特点
  2. 在此基础上确定分类边界,即确定P(X) P(Y|X)
    self-trainning,co-trainning 都是半监督分类算法。

self-trainning

self-trainning的假设是利用现有训练数据得到的模型,对无标签数据进行预测,置信度高的数据更可能被正确赋予了标签,所以可以用于加入训练集。

算法流程

  1. 利用现有训练数据训练模型,预测无标签数据
  2. 将置信度比较高的一部分无标签数据和它们被模型赋予标签一起加入训练集
  3. 如果满足训练集和模型符合要求,则输出当前的训练集和模型, 否则, 回到1
    这是一个迭代和开放的过程,3里的要求是操作者自身的主观意愿,型的选取也是无限制的(SVM,RM,LR等等都可以)

建议

  1. 选取样本的时候不但要考虑置信度,还要考虑置信度的差值,只有样本在某一类别的置信度明显高于其他所有类别的置信度时,才能选取到训练集中去。
  2. 迭代的过程中需要不断增强对新样本选取的要求。

缺点

容易出现“走偏”

co-trainning

针对self-trainning缺陷,不再是自己学习,而且互相学习。在每次迭代中都得到两个模型,而且各自有独立的训练集。算法过程与self-trainning相似。

区别

有两个训练集(基于原始训练集而来,随机划分得到的,互补),每次迭代各自训练出一个模型,并将置信度高的样本加入到对方的训练集中。注意,是加入到对方的训练集,不是自己的。下次迭代依然是基于各自的训练集再训练得到模型。

原则

在不牺牲性能的前提下,尽量多的使用未带标数据,它从一个小规模的带标的语料库开始,同时使用大规模的未带标语料来进行学习。

应用

Co-training算法应用于属性存在天然可分割性的数据集,即数据集的某些属性能够在某种角度上描绘数据的某种特征,而这些属性不是唯一的,有许多不同的属性能够将同样的特征从不同的角度描绘出来,这样的数据属性集就具有天然可分割性,忽视了数据集特性的可分割性.Co-training算法则利用两个不同学习器在数据集的/分割的特性集上独立学习,并结合两个学习器的学习结果作出最后学习结论,这样来达到降低错误率的目的.

优点

  1. 不用人工干涉,能够从未标注的语料中自动学习到知识。
  2. 两个模型起到了相互校正的效果,一定程度上防止了半监督的“走偏”,但是有前提条件。训练模型所用的特征集合需要时不同的特征集合
    模型的选取同样无所谓,甚至在两个训练集上可以选取不同的算法来训练模型。

总结

大部分情况下验证集数据的选取其实都是来源于最初的有标签的数据,所以训练集的问题,验证集一般同样存在,比如,量过少(缺乏代表性,具有偶然性),分布不均衡。这样的话,使用验证集来评价半监督学习的结果本身是存在问题的。当然,如果你的验证集建立的很完善,那就完全是可以的。

co-trainning 改进

不给未标记的样本分配标记,而是给未标记的样本分配概率标签,这些标签可以通过在每个视图中运行EM(期望和最大化)从一个迭代更改到另一个迭代。这种被称为Co-EM的算法在许多问题上都优于协同训练,但是需要每个视图的分类器来生成类概率。通过概率方法重新构建支持向量机。支持向量机的CO-EM版本。

将协同训练样式算法从分类问题扩展到回归问题。提出了一种名为CoREG的算法,它使用了两个k近邻(kNN)回归函数。在学习过程中,每个回归子都为另一个标记了未标记的数据。为了选择合适的未标记示例进行标记,CoREG通过参考未标记示例的标记对标记示例的影响来估计标记置信度。最后的预测是通过对两个回归函数生成的回归估计进行平均得出的。

你可能感兴趣的:(算法)