PU learning 算法笔记1-- 论文《Learning Classifiers from Only Positive and Unlabeled Data》中的方法

PU learning(Positive-unlabeled learning)是当样本集中只有部分标注好的正样本和其余未标注的样本时,如何学习一个二分类器。

这篇笔记记录一下论文《Learning Classifiers from Only Positive and Unlabeled Data》中提出的一种PU learning方法。

x x x是一个样本,而 y ∈ { 0 , 1 } y \in \{0, 1\} y{0,1}是二元标签。如果样本 x x x被标注,记为 s = 1 s=1 s=1; 如果样本 x x x未标注,记为 s = 0 s=0 s=0

因为只有正样本被标注,所以当 s = 1 s=1 s=1时肯定有 y = 1 y=1 y=1,但是当 s = 0 s=0 s=0时,那么 y = 1 y=1 y=1 y = 0 y=0 y=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 = 1 s=1 s=1)、“未标注”( s = 0 s=0 s=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 ) / c p(y=1|x)=p(s=1|x)/c p(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=1s=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可以得到几个结论:

  1. 分类器f是分类器g的增函数(increasing function)。也就意味着如果分类器f只是根据样本x属于类别 y = 1 y=1 y=1的概率来对样本排序,那么可以直接使用分类器g而不是分类器f。
  2. 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) gp(s=1∣y=1)是一个有效定义的概率 f ≤ 1 f \le 1 f1。也就是说 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)呢?设有一个跟训练集同分布的验证集 V V V,设 P P P V V V中有标注的子集(全是正样本),那么我们有三种方法来估计 c = p ( s = 1 ∣ y = 1 ) c=p(s=1|y=1) c=p(s=1∣y=1)

  1. 使用 g ( x ) g(x) g(x)在子集P的预测均值: 1 n ∑ x ∈ P g ( x ) \frac{1}{n} \sum_{x \in P} g(x) n1xPg(x), n是P的大小。

  2. 使用 g ( x ) g(x) g(x)在子集P的预测值之和与在验证集V的预测值之和的比值: ∑ x ∈ P g ( x ) / ∑ x ∈ V g ( x ) \sum_{x \in P} g(x)/\sum_{x\in V} g(x) xPg(x)/xVg(x)

  3. 使用 g ( x ) g(x) g(x)在验证集的预测最大值: m a x x ∈ V g ( x ) max_{x \in V} g(x) maxxVg(x)
    实际使用时,一般使用第一种方法。

所以可按照如下步骤来对一个样本 k k k进行分类:

  1. 使用标注数据和未标注数据训练分类器 g ( x ) g(x) g(x) p ( s = 1 ∣ x ) p(s=1|x) p(s=1∣x)
  2. 计算 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 = 1 n ∑ x ∈ P g ( x ) c=\frac{1}{n} \sum_{x \in P} g(x) c=n1xPg(x)
  3. 使用分类器 g ( x ) g(x) g(x)预测样本 k被标注的概率 p ( s = 1 ∣ k ) p(s=1|k) p(s=1∣k)
  4. 计算样本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)

参考资料

  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.

  2. https://github.com/pulearn/pulearn

  3. https://github.com/phuijse/bagging_pu

  4. https://dtai.cs.kuleuven.be/tutorials/pulearning/

你可能感兴趣的:(机器学习,算法,笔记,机器学习,PU,learning)