[半监督学习] Tri-Training: Exploiting Unlabeled Data Using Three Classifiers

标准的协同训练算法需要两个充分且冗余的视图, 每组都足以用于学习, 并且在给定类标签的情况下条件独立. 不过这并不容易实现, 在论文中, 提出了一种新的协同训练风格算法, 称为 Tri-Training. 其不需要冗余的视图, 也不需要使用不同的监督学习算法. 与最开始使用两个分类器的算法相比, Tri-Training 使用三个分类器.

论文地址: Tri-Training: Exploiting Unlabeled Data Using Three Classifiers
代码地址: http://www.lamda.nju.edu.cn/code_TriTrain.ashx
期刊: IEEE Transactions on Knowledge and Data Engineering (2005)
任务: 分类

假设除了分类器 h 1 h_1 h1 h 2 h_2 h2 之外, 利用标记数据再训练了一个分类器 h 3 h_3 h3. 那么, 对于任何分类器, 只要其他两个分类器同意这个示例的标签, 则可以将其标记起来, 而分类器标记的置信度不需要明确测量. 例如, 如果 h 2 h_2 h2 h 3 h_3 h3 同意示例 x x x 的标记结果, 则可以将标记 x x x 加入到 h 1 h_1 h1 中.

Tri-Training 算法

Tri-Training 算法如下:
在这里插入图片描述
首先利用 Bootstrap 重采样, 从有标签数据集 L L L 里采样三个子数据集 S i S_i Si, S j S_j Sj, S k S_k Sk. 利用三个子数据集训练三个基分类器 h i h_i hi, h j h_j hj, h k h_k hk. 并初始化 e i ′ = 0.5 e_i'=0.5 ei=0.5, l i ′ = 0 l_i'=0 li=0. 这里 e i ′ e_i' ei 表示 h j & h k h_j \& h_k hj&hk 的分类错误率的上界, 即 h j h_j hj h k h_k hk 组合得出的假设的错误率. l i ′ l_i' li 用作与挑选的未标记示例集 L i L_i Li 的大小做比较.

接着迭代每个分类器, 首先, 初始化挑选数据集 L i = ∅ L_i=\empty Li=; 使用 MeasureError 函数计算 e i e_i ei; 初始化分类器 h i h_i hi 的更新标志 u p d a t e i = F A L S E update_i=FALSE updatei=FALSE.

当满足 e i < e i ′ e_i < e_i' ei<ei 时, 对于分类器 h i h_i hi, 使用另外两个分类器预测所有未标注数据集, 挑选出其中预测结果相同的样本, 作为新的有标签数据 ( x , h j ( x ) ) (x,h_j(x)) (x,hj(x)), 并加入到分类器 h i h_i hi 的训练集 L i L_i Li 中. 当 l i ′ = 0 l_i'=0 li=0 时(即刚初始化, h i h_i hi 还没经过训练进行更新), 通过下式计算 l i ′ l_i' li:
l i ′ = ⌊ e i e i ′ − e i + 1 ⌋ l_i'=\lfloor\frac{e_i}{e_i'-e_i}+1\rfloor li=eieiei+1
l i ′ < ∣ L i ∣ l_i' < \vert L_i\vert li<Li 时, 如果 e i ∣ L i ∣ < e i ′ l i ′ e_i\vert L_i\vert < e_i'l_i' eiLi<eili, 则表示分类器 h i h_i hi 已更新: u p d a t e i = T r u e update_i=True updatei=True, 如果 l i ′ > e i e i ′ − e i l_i'>\frac{e_i}{e_i'-e_i} li>eieiei, 则通过函数 Subsample 从 L i L_i Li 中随机选择 ∣ L i ∣ − ⌈ e i e i ′ − e i + 1 ⌉ \vert L_i\vert-\lceil \frac{e_i}{e_i'-e_i}+1\rceil Lieieiei+1 个示例删除, 同时更新 u p d a t e i = T r u e update_i=True updatei=True.

迭代完成后, 检查每个分类器的更像状态, 如果分类器 i i i 已更新, 则将与之对应的 L i L_i Li 加入到 L L L 中, 利用扩增的数据集 L L L 更新分类器 i i i, 同时用 e i e_i ei 更新 e i ′ e_i' ei, ∣ L ∣ \vert L\vert L 更新 l i ′ l_i' li.

重复上述分类器迭代过程, 直到每个分类器不在变化为止. 最终得到三个训练完成的分类器, 通过 arg max ⁡ y ∈ l a b e l ∑ h i ( x ) = y 1 \argmax_{y\in label} \sum_{h_i(x)=y}1 ylabelargmaxhi(x)=y1 来预测结果, 即投票原则.

补充

  1. 生成伪标签的过程中, 可能会选择到错误的伪标签, 这会在数据集中增加噪声. 这也是 Pseudo-Label 方法的主要缺陷. 不过论文中证明, 当新增加的数据足够多时, 噪声带来的影响可以被抵消.

  2. 算法中 MeasureError 函数试图估计由 h j h_j hj h k h_k hk 组合得到的分类错误率. 由于难以估计未标记示例的分类误差, 所以通过将 h j h_j hj h k h_k hk 都做出错误分类的标记示例的数量除以 h j h_j hj 做出的分类与 h k h_k hk 做出的分类相同的标记示例的数量来近似.

  3. 初始分类器只有在它们具有多样化的情况下才有效. 在标准的协同训练算法中, 充分和冗余视图的使用使得分类器是不同的. 如果属性之间有足够的冗余, 那么一个合理的属性划分也可使协同训练表现出优势. 由于 Tri-Training 算法没有假设足够多的视图和不同的监督学习算法, 因此必须从其他渠道寻求分类器的多样性. 实际上, 这里的多样性是通过操纵原始标记的示例集来获得的, 即初始分类器是从原始标记示例集中通过 BootStrap 采样得到的数据集训练的. 初始分类器的生成比较像集成学习算法(即 Bagging).

猜你喜欢

转载自blog.csdn.net/by6671715/article/details/122968120