类别不均衡问题描述:

在很多统计学习任务中,标签为不同类别的样本严重不均衡。即对于数据集
D={(xi,yi)}i=1n,yi∈{0,1}D=\{(x_i,y_i)\}_{i=1}^{n},\quad y_i\in\{0,1\}D={(xi,yi)}i=1n,yi{0,1}
其中少数样本为n1=∑i=1n1(yi=1)n_1=\sum_{i=1}^{n}\mathbf{1}(y_i=1)n1=i=1n1(yi=1),多数样本为n_0=n-n_1,并且n0=n−n1n_0=n-n_1n0=nn1.
Bootstrap方法:
普通的Bootstrap方法是从某个经验分布F^n\hat F_nF^n中有放回地抽取样本nnn次,形成全体数据集的子集D∗={(xik,yik)}k=1n,ik∼Uniform{1,…,n}D^* = \{(x_{i_k},y_{i_k})\}_{k=1}^{n}, \quad i_k \sim \text{Uniform}\{1,\ldots,n\}D={(xik,yik)}k=1n,ikUniform{1,,n}.

分类别Bootstrap方法:

分类别Bootstrap是将数据集按照标签进行切分,对每个类别的数据分别进行bootstrap抽样。对于D0={(xi,yi):yi=0}D_0=\{(x_i,y_i):y_i=0\}D0={(xi,yi):yi=0}, D1={(xi,yi):yi=1}D_1=\{(x_i,y_i):y_i=1\}D1={(xi,yi):yi=1},有D0∗D_0^*D0D1∗D_1^*D1.

Balanced Bootstrap方法:

不妨设少数类数据集D1D_1D1n1n_1n1个样本,那么经过Balanced Bootstrap得到的样本子集为Db∗=D0∗(n1)∪D1∗(n1)D_b^* = D_0^{*(n_1)} \cup D_1^{*(n_1)}Db=D0(n1)D1(n1)D0∗(n1)D_0^{*(n_1)}D0(n1)为从多数类数据集抽样n1n_1n1个样本构成的样本子集,D1∗(n1)D_1^{*(n_1)}D1(n1)为从少数类数据集抽样n1n_1n1个样本构成的样本子集。
简单来说,Balanced Bootstrap方法就是在按照类别抽样的Bootstrap方法的基础上对多数类数据集的有放回抽样个数进行修改,从n0n_0n0个减少到n1n_1n1个,这样就可以保证每次bootstrap抽样得到的数据集都是均衡的。

Bootstrap方法的意义:

一般的,Bootstrap方法是选择数据集的子集。如果我们只进行一轮抽样,似乎显得这样做没什么意义。实际上,我们需要进行多轮抽样,设总轮数为BBB,第bbb轮得到的bootstrap样本子集为Db∗D_b^*Db,对Db∗D_b^*Db的数据进行统计建模,例如估计某个分布参数。这里我们着重关注用Db∗D_b^*Db进行统计学习预测建模,设fb(x)f_b(x)fb(x)为使用Db∗D_b^*Db建立的统计学习预测模型,对每个模型进行平均,得到最终模型f(x)=1B∑b=1Bfb(x)f(x)=\frac{1}{B}\sum_{b=1}^{B} f_b(x)f(x)=B1b=1Bfb(x).
Bootstrap方法其实就是机器学习中的bagging方法。这种方法的优势在于模型的方差较小、稳健性较好。在不平衡数据的分类问题中,少数类样本过少可能会导致模型不稳健,bootstrap方法可以一定程度上弥补这一点。
特别的,Balanced Bootstrap又在每次抽样改变了数据的类别分布,损失函数又随类别分布的改变而改变。对于某些机器学习模型,这样做可以减少模型将少数类样本误分类为多数类样本的机会。
总的来说,Balanced Bootstrap是一种一石二鸟的方法,既提升模型稳健性,又增强模型对少数类样本的分类性能。

算法:

输入:
    训练数据 D = {(x_i, y_i)}_{i=1}^n
    基学习器训练算法 Train()
    bootstrap 次数 B
    少数类标签 minority

步骤:
1. 将训练集按类别拆分:
       D_min = {(x_i, y_i) : y_i = minority}
       D_maj = {(x_i, y_i) : y_i ≠ minority}

2. 记少数类样本数为:
       n_min = |D_min|

3. 对 b = 1, 2, ..., B 重复:
       3.1 从 D_min 中有放回抽取 n_min 个样本,得到 D_min^(b)
       3.2 从 D_maj 中抽取 n_min 个样本,得到 D_maj^(b)
           (可有放回,也可无放回)
       3.3 构造平衡 bootstrap 样本:
               D_b^* = D_min^(b) ∪ D_maj^(b)
       3.4 在 D_b^* 上训练基学习器:
               f_b = Train(D_b^*)
输出:
    集成分类器 {f_1, ..., f_B}
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐