自我学习 (self-training)

自我训练就是通过一系列的步骤,用已有的有标签的数据(labelled data),去对剩下的还未标记的数据打标签。从而使得训练数据(training data)更多。具体步骤如下:

  1. 初始化有标签数据和无标签数据
  2. 重复:a) 用有标签的数据去训练一个模型

b) 用这个模型来对没有标签的数据做预测

c) 只选取最有把握的预测结果来标记数据(unlabelled data)

d) 把新标记好的数据加入到原来的标记好的数据集中,同时把他们从原来的数据集中删除

  1. 直到数据集不发生变化

注意不发生变化的可能性有两种,一种是所有的数据最终都被打了标签,另一种是该模型找不到「有把握」的预测结果了。

下面以KNN (K-Nearest Neighbour) 为例:每一次都只找一个最有把握的预测结果。三角形表示为未做标记的数据集。圆形和正方形就是2类数据。

协同学习 (co-training)

和自我学习一样,协同学习的目的也是为了用现有的有标签的数据去标记其他数据。具体步骤如下:假设现在有数据集,每组数据有2个特征(feature): x1 和 x2。我们把其中有标签的那部分数据集称为L (表示为[x1,x2,y]),没有标签的数据集称为U (表示为[x1,x2])。

  1. 初始化数据,把L 分为L1 ([x1,y]) 和L2 ([x2,y])。这里注意,L 是一个数据集,里面包涵了很多数据,我就顺便提醒一下。
  2. 重复:a) 分别用L1和L2训练出一个模型 F1和F2

b) 分别用模型F1和F2去预测U (给U打标签),同样这里也是只选出最有把握的一些结果。

c) 把F1预测的结果放入L2,把F2预测的结果放入L1 (交叉放置)

d) 更新L 和 U

3. 直到数据集不发生变化 (和自我学习一样)

推荐阅读:

相关文章