标准的协同训练算法需要两个充分且冗余的视图, 每组都足以用于学习, 并且在给定类标签的情况下条件独立. 不过这并不容易实现, 在论文中, 提出了一种新的协同训练风格算法, 称为 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′?=?ei′??ei?ei??+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'
ei?∣Li?∣<ei′?li′?, 则表示分类器
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′?>ei′??ei?ei??, 则通过函数 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
∣Li?∣??ei′??ei?ei??+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
y∈labelargmax?∑hi?(x)=y?1 来预测结果, 即投票原则.
补充
-
生成伪标签的过程中, 可能会选择到错误的伪标签, 这会在数据集中增加噪声. 这也是 Pseudo-Label 方法的主要缺陷. 不过论文中证明, 当新增加的数据足够多时, 噪声带来的影响可以被抵消. -
算法中 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? 做出的分类相同的标记示例的数量来近似. -
初始分类器只有在它们具有多样化的情况下才有效. 在标准的协同训练算法中, 充分和冗余视图的使用使得分类器是不同的. 如果属性之间有足够的冗余, 那么一个合理的属性划分也可使协同训练表现出优势. 由于 Tri-Training 算法没有假设足够多的视图和不同的监督学习算法, 因此必须从其他渠道寻求分类器的多样性. 实际上, 这里的多样性是通过操纵原始标记的示例集来获得的, 即初始分类器是从原始标记示例集中通过 BootStrap 采样得到的数据集训练的. 初始分类器的生成比较像集成学习算法(即 Bagging).
|