PU learning
背景
PU learning(positive-unlabeled learning),即我们只有正样本和未标注的样本,以此进行分类学习。
其可在以下几个领域内应用:
- 检索
从大量无标注的样本中选取特定的样本,比如人脸标注 - 异常检测
包括inlier-based outlier 检测 - 序列数据检测
负样本的分布随着时间改变,这样传统的分类将不再适合,PU 只需要更新未标注样本,这样的花销更小,比如垃圾邮件检测,由于存在对抗,负样本(垃圾邮件)的形式一直在变,而非垃圾则一般相对稳定状态。
本文介绍了最近pu learning的几个研究进展。
PU 分类
目前 PU的方法可分为两类;
- 第一类方法
也称为两步法:从unlabeled 数据识别出有效的负样本,然后利用正负样本训练分类器。 - 第二类方法
全部将未标注的样本作为负样本训练,同时将负样本的赋予一个较小的权重值。
然而,第一类方法在识别有效负样本时比较依赖于经验,需要对相关的业务背景有良好的理解;第二类方法则依赖于未标注样本权重的设置,并且如果loss函数不合适,将存在biased误差。在第二类方法中,为了改进目前学习存在偏差的问题,无偏 PU learning被引入。
uPU learning
我们有一个正的数据集\chiχ,一个未标注数据集\chi'χ′,即
\chi:=\{x_i\}_{i=1}^n ~=p(x|y=1)\\ \chi':=\{x_j'\}_{j=1}^{n'}~=p(x)\\ p(x):=\pi p(x|y=1)+(1-\pi)p(x|y=-1)χ:={xi}i=1n =p(x∣y=1)χ′:={xj′}j=1n′ =p(x)p(x):=πp(x∣y=1)+(1−π)p(x∣y=−1)
其中\piπ是unlabel样本中正样本的比例,为超参数。
对于普通的分类
\hat R_{pn}(g)=\pi_p\hat R_p^{+} + \pi_n \hat R_n^{-}(g) -----(1)R^pn(g)=πpR^p++πnR^n−(g)−−−−−(1)
风险函数
R_u^-(g)=\frac{1}{n^-}\sum^{n^-}_{x=1}l(g(x_i),-1)\\ =\sum_xp(x)l(g(x_i),-1)\\ =\sum_xp(y=1)p(x|y=1)l(g(x_i),-1)+\sum_xp(y=-1)p(x|y=-1)l(g(x_i),-1)\\ =\pi_p \sum_x p(x|y=1)l(g(x_i),-1) + (1-\pi_p)\sum_xp(x|y=-1)l(g(x_i),-1)\\ =\pi_p\sum_{x_p}p(x)l(g(x(x_i),-1)) + (1-\pi_p)\sum_{x_n}p(x)l(g(x_i),-1)\\ =\pi_pR_p^{-} + (1-\pi_p)R_n^{-}Ru−(g)=n−1x=1∑n−l(g(xi),−1)=x∑p(x)l(g(xi),−1)=x∑p(y=1)p(x∣y=1)l(g(xi),−1)+x∑p(y=−1)p(x∣y=−1)l(g(xi),−1)=πpx∑p(x∣y=1)l(g(xi),−1)+(1−πp)x∑p(x∣y=−1)l(g(xi),−1)=πpxp∑p(x)l(g(x(xi),−1))+(1−πp)xn∑p(x)l(g(xi),−1)=πpRp−+(1−πp)Rn−
因此对于PU learning 其风险函数为
\hat R_{pu}(g)=\pi_p \hat R_p^{+}(g) - \pi_p \hat R_p^{-}(g)+\hat R_u^{-}(g)----- (2)R^pu(g)=πpR^p+(g)−πpR^p−(g)+R^u−(g)−−−−−(2)
其中:\hat R_p^{+} (g) = (1/{n_p})\sum \limits_{i = 1}^{{n_p}} \ell (g(x_i^p), + 1)R^p+(g)=(1/np)i=1∑npℓ(g(xip),+1) , \hat R_u^ - (g) = (1/{n_u})\sum \limits_{i = 1}^{{n_u}} \ell (g(x_i^u), - 1)R^u−(g)=(1/nu)i=1∑nuℓ(g(xiu),−1),\hat R_p^{-} (g) = (1/{n_p})\sum \limits_{i = 1}^{{n_p}} \ell (g(x_i^p), -1)R^p−(g)=(1/np)i=1∑npℓ(g(xip),−1)
上式子的empirical risk estimators函数是无偏的。当损失函数满足一个对称条件时【Analysis of learning from positive and unlabeled data】:
l(t,+1)+l(t,-1)=1l(t,+1)+l(t,−1)=1
我们会得到
\hat R_{pu}(g)=2*\pi_p\hat R_p(g(x), 1) + \hat R_u(g(x), -1) -\pi_p -----(3)R^pu(g)=2∗πpR^p(g(x),1)+R^u(g(x),−1)−πp−−−−−(3)
这样能够通过普通的cost-sensitive learning得到分类器。并且,满足上述对称条件的\hat R_{pu}R^pu一定是关于g非凸的。这样,不仅计算度增加,而且保证得到最优解。另外,满足上式子的损失函数有0-1损失函数,sigmoid函数等等。如果换成其他损失函数,最终的目标函数将比(3)式子多一误差项【1】,最终的求解出现偏差,该类方法中应用比较多的是biased SVM。
我们难道无法得到无偏的最优解了吗?是的,如果我们最终优化的目标函数是(3)。不过,我们可以退一步去做,直接去以(2)作为我们的目标函数。
在15年一篇工作中【1】,提出对P和U样本分别采用不同的损失函数:对U样本采用普通的凸损失函数l(z)l(z),对P样本采用复合损失函数l(z)-l(-z)l(z)−l(−z);如果复合损失函数同样是凸的,那么目标函数将能够凸优化,但是这种条件有限制:复合损失函数关于z必须是线性的,我们的决策函数z关于变量x也需要是线性的。
虽然终于找到一种即无偏差,又可得到最优解的方法,但决策函数的要求大大限制了该方法的应用。另外,如果使用这种方法,需要设计一些特别的损失函数,如下:
而对于一般的复杂的决策函数,尤其将深度学习应用其中,凸优化与无偏估计几乎不可兼得,而两者中,无偏估计更容易获取,只要我们从上式(2)中出发。
但是,我们发现,式(2)中有减号,这就有了一种可能,即\hat R_u^{-}(g)-\pi_p \hat R_p^{-}(g)R^u−(g)−πpR^p−(g)可能为负!
nnPU learning
由公式2可知,进行训练的时候,如果不加限制,“负样本”的目标函数可能为负,这将会导致过拟合,为了最优化,不切实际地将分类超平面远离正样本。为了降低过拟合,【2】提出Non-negative PU learning,即将公式(2)稍作改进:
\hat R_{pu}(g)=\pi_p\hat R_p^{+}(g) + max\{0,\hat R_u^{-}(g)-\pi_p\hat R_p^{-}(g)\}R^pu(g)=πpR^p+(g)+max{0,R^u−(g)−πpR^p−(g)}
在MNIST数据集中,利用多层神经网络结果如下:
最后,注意到,还有一个超参数 \pi_pπp的选择,实验证明其选择的值比实际值高时,要优于比实际值低,即高估该值的效果更好;具体估计该值的方法,可参考【3】,具体如下:
如果知道未标注样本中正样本比例为\thetaθ,那么有
q'(x;\theta)=\theta p(x|y=1) + (1-\theta) p(x|y=-1)q′(x;θ)=θp(x∣y=1)+(1−θ)p(x∣y=−1)
进而求解,利用分布的相似度量f-散度,有\theta :=\arg \,\min_{0\le\theta \le 1}\int f(\frac{q'(x;\theta)}{p(x)})p(x)dxθ:=arg0≤θ≤1min∫f(p(x)q′(x;θ))p(x)dx
然而,我们并不知道正样本的比例,这时可以对原分布部分拟合
q(x;\theta)=\theta p(x|y=1)q(x;θ)=θp(x∣y=1)
然后求
\theta :=\arg \,\min_{0\le\theta \le 1}\int f(\frac{q(x;\theta)}{p(x)})p(x)dxθ:=arg0≤θ≤1min∫f(p(x)q(x;θ))p(x)dx
由于缺失了负样本下x的分布信息,部分拟合将过高估计正例样本的比例。该文通过利用惩罚散度来避免负样本缺失造成的误差,对于各个散度的惩罚形式如下:
同时证明了L_1-distanceL1−distance的惩罚形式能够有效简化估计过程,使得计算更加高效。
def nnpu_loss(self, y_true, y_pred):
'''
y_true: shape[batch_size, 2], 经过labelEncoder处理后的0,1矩阵,0类位于第一列,1类位于第二列,那么这里0类就是已知的标签数据,1类为unlabel数据。
y_pred: shape[batch_size ,2], 模型预测的分类概率,这里我们以模型预测的第一类概率为准。
'''
print("============================== use nnpu_learning !!!! ===========================================")
p = y_true[:, 0] * y_pred[:, 0]
u = y_true[:, 1] * y_pred[:, 0]
p_num = tf.where(K.sum(y_true[:, 0], axis=-1) == 0, 1.0, K.sum(y_true[:, 0], axis=-1))
u_num = tf.where(K.sum(y_true[:, 1], axis=-1) == 0, 1.0, K.sum(y_true[:, 1], axis=-1))
t = self.pi * K.sum(p*1, axis=-1)/p_num
t2 = K.sum(-u, axis=-1)/u_num - self.pi *K.sum(-p, axis=-1)/p_num
t3 = tf.where(t2 > 0.0, t2, 0.0)
loss = t + t2
return -loss
实验
将未标注数据全部作为negative样本训练随机森林
随机选取与positive等量negative 训练分类并对剩余样本预测,重复多次,将概率平均
PU learning
看出PU学习的更好,使用该方法的前提是,unlabeled样本中positive样本特征分布与已知的positive样本分布一致!
参考文献:
[1] Marthinus Christoffel du Plessis, Niu, G. & Masashi, S. Convex Formulation for Learning from Positive and Unlabeled Data. ICML (2015).
[2] Kiryo, R. & Niu, G. Positive-Unlabeled Learning with Non-Negative Risk Estimator. NIPS 11 (2017)
[3] du Plessis, M. C., Niu, G. & Sugiyama, M. Class-prior estimation for learning from positive and unlabeled data. Mach Learn 106, 463–492 (2017).
[4] du Plessis, M. C., Niu, G. & Sugiyama, M. Class-prior estimation for learning from positive and unlabeled data. Mach Learn 106, 463–492 (2017).