PU learning 算法笔记1-- 论文《Learning Classifiers from Only Positive and Unlabeled Data》中的方法
PU learning 算法笔记 -- 论文《Learning Classifiers from Only Positive and Unlabeled Data》中的方法。
PU learning(Positive-unlabeled learning)是当样本集中只有部分标注好的正样本和其余未标注的样本时,如何学习一个二分类器。
这篇笔记记录一下论文《Learning Classifiers from Only Positive and Unlabeled Data》中提出的一种PU learning方法。
设xxx是一个样本,而y∈{0,1}y \in \{0, 1\}y∈{0,1}是二元标签。如果样本xxx被标注,记为s=1s=1s=1; 如果样本xxx未标注,记为s=0s=0s=0。
因为只有正样本被标注,所以当s=1s=1s=1时肯定有y=1y=1y=1,但是当s=0s=0s=0时,那么y=1y=1y=1或y=0y=0y=0都有可能。只有正样本被标注的事实可以用如下公式表示:
p(s=1∣x,y=0)=0(1) p(s=1|x, y=0) = 0 \qquad (1) p(s=1∣x,y=0)=0(1)
论文作的基本假设:标注好的正样本是随机的从所有正样本中挑选出来的。在论文中被称为"selected completely at random"假设,用公式表示为如下式:
p(s=1∣x,y=1)=p(s=1∣y=1)(2) p(s=1|x, y=1)= p(s=1|y=1) \qquad (2) p(s=1∣x,y=1)=p(s=1∣y=1)(2)
如果有一个训练集包含了服从满足式(1)和式(2)的分布p(x,y,s)p(x,y,s)p(x,y,s)的随机样本。也就是说这个样本集包含两个子集:”已标注“(s=1s=1s=1)、“未标注”(s=0s=0s=0)。如果把这两个子集作为标准训练算法的输入,这个算法会得到一个函数g(x)g(x)g(x):g(x)=p(s=1∣x)g(x)=p(s=1|x)g(x)=p(s=1∣x),称g(x)g(x)g(x)为nontraditional classifier,论文的主要作用是根据下面的引理1展示如何从g(x)g(x)g(x)获得一个traditional classifier f(x)f(x)f(x):p(y=1∣x)p(y=1|x)p(y=1∣x)。
引理1:如果"selected completely at random"假设成立,那么有p(y=1∣x)=p(s=1∣x)/cp(y=1|x)=p(s=1|x)/cp(y=1∣x)=p(s=1∣x)/c,式中的c=p(s=1∣y=1)c=p(s=1|y=1)c=p(s=1∣y=1)
引理1的证明:我们有式(2)的假设:p(s=1∣x,y=1)=p(s=1∣y=1)p(s=1|x, y=1)= p(s=1|y=1)p(s=1∣x,y=1)=p(s=1∣y=1)。 对于p(s=1∣x)p(s=1|x)p(s=1∣x)有:
p(s=1∣x)=p(y=1∧s=1∣x)=p(y=1∣x)p(s=1∣y=1,x)=p(y=1∣x)p(s=1∣y=1) \begin{aligned} p(s=1|x) & = p(y=1 \wedge s=1|x) \\ &= p(y=1|x)p(s=1|y=1,x) \\ &= p(y=1|x)p(s=1|y=1) \end{aligned} p(s=1∣x)=p(y=1∧s=1∣x)=p(y=1∣x)p(s=1∣y=1,x)=p(y=1∣x)p(s=1∣y=1)当我们将上式的两边都除以p(s=1∣y=1)p(s=1|y=1)p(s=1∣y=1)就得到了p(y=1∣x)p(y=1|x)p(y=1∣x)。
从引理1可以得到几个结论:
- 分类器f是分类器g的增函数(increasing function)。也就意味着如果分类器f只是根据样本x属于类别y=1y=1y=1的概率来对样本排序,那么可以直接使用分类器g而不是分类器f。
- f=g/p(s=1∣y=1)f=g/p(s=1|y=1)f=g/p(s=1∣y=1)只有当g≤p(s=1∣y=1)g \le p(s=1|y=1)g≤p(s=1∣y=1)是一个有效定义的概率f≤1f \le 1f≤1。也就是说g>p(s=1∣y=1)g > p(s=1|y=1)g>p(s=1∣y=1) 是不可能的。
那如何估计c=p(s=1∣y=1)c=p(s=1|y=1)c=p(s=1∣y=1)呢?设有一个跟训练集同分布的验证集VVV,设PPP是VVV中有标注的子集(全是正样本),那么我们有三种方法来估计c=p(s=1∣y=1)c=p(s=1|y=1)c=p(s=1∣y=1):
-
使用g(x)g(x)g(x)在子集P的预测均值:1n∑x∈Pg(x)\frac{1}{n} \sum_{x \in P} g(x)n1∑x∈Pg(x), n是P的大小。
-
使用g(x)g(x)g(x)在子集P的预测值之和与在验证集V的预测值之和的比值:∑x∈Pg(x)/∑x∈Vg(x)\sum_{x \in P} g(x)/\sum_{x\in V} g(x)∑x∈Pg(x)/∑x∈Vg(x)
-
使用g(x)g(x)g(x)在验证集的预测最大值:maxx∈Vg(x)max_{x \in V} g(x)maxx∈Vg(x)
实际使用时,一般使用第一种方法。
所以可按照如下步骤来对一个样本kkk进行分类:
- 使用标注数据和未标注数据训练分类器g(x)g(x)g(x):p(s=1∣x)p(s=1|x)p(s=1∣x)
- 计算c=p(s=1∣y=1)c=p(s=1|y=1)c=p(s=1∣y=1),使用g(x)g(x)g(x)在验证集V的正样本子集P上的预测均值来得到c:c=1n∑x∈Pg(x)c=\frac{1}{n} \sum_{x \in P} g(x)c=n1∑x∈Pg(x)
- 使用分类器g(x)g(x)g(x)预测样本 k被标注的概率p(s=1∣k)p(s=1|k)p(s=1∣k)
- 计算样本k为正样本的概率:p(y=1∣k)=p(s=1∣k)/p(s=1∣y=1)p(y=1|k) = p(s=1|k)/p(s=1|y=1)p(y=1∣k)=p(s=1∣k)/p(s=1∣y=1)
参考资料:
-
Elkan, Charles, and Keith Noto. 2008. “Learning Classifiers from Only Positive and Unlabeled Data.” In Proceedings of the 14th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. doi:10.1145/1401890.1401920.
-
https://github.com/pulearn/pulearn
-
https://github.com/phuijse/bagging_pu
-
https://dtai.cs.kuleuven.be/tutorials/pulearning/
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)