面向不均衡小样本训练集的改进Boosting算法
- 格式:pdf
- 大小:807.36 KB
- 文档页数:6
bagging,boosting,stacking基本流程
以下是bagging、boosting、stacking三种集成学习方法的流程:
1. Bagging:
从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k 轮抽取,得到k个训练集(k个训练集之间相互独立,元素可以有重复)。
对于抽取的k个训练集,可以训练出k个模型。
对于分类问题,由投票表决产生的分类结果。
2. Boosting:
对训练集中的每个样本建立权值wi,表示每个样本的权重。
在随后的运算中,对于被错误分类的样本,权重会在下一轮的分类中获得
更大的权重。
对于误差率较小的弱学习器,加大权值,使其在表决中起到更大的作用。
对于误差率较大的弱学习器,减小权值,使其在表决中起到较小的作用。
Boosting算法基于错误提升模型性能,根据前面分类器分类错误的样本,调整训练集中各个样本的权重,构建新的分类器。
其训练过程是呈阶梯状的,后一个基模型会在前一个基模型的基础上进行学习,最终以某种综合方式,比如加权法,对所有模型的预测结果进行加权来产生最终的结果。
3. Stacking:
将训练数据D划分为两个不相交的子集D1,D2。
用训练集的第一部分D1训练多个不同的基模型。
将多个基模型用于预测训练集的第二部分D2。
将基模型的预测结果当作输入,D2的样本标签当作学习目标,训练一个高层的模型。
以上是三种集成学习方法的基本流程,请注意这些方法各有特点,适用于不同的情况和问题类型。
在实际应用中需要根据具体需求和数据特点来选择合适的方法。
Boosting原理及应用[object Object]Boosting是一种用于提升机器学习模型性能的集成学习方法,它通过训练一系列弱分类器,并将它们组合成一个强分类器。
Boosting的原理是通过迭代的方式,逐步改进弱分类器的性能,使得它们在错误分类的样本上有更高的权重,从而达到提升整体分类性能的目的。
Boosting的核心思想是将多个弱分类器进行加权组合,使得它们能够协同工作,并形成一个更强大的分类器。
在每一轮迭代中,Boosting会根据上一轮分类器的性能调整样本权重,使得对错误分类的样本施加更高的权重,从而在下一轮中更加关注这些难以分类的样本。
这种迭代的过程会一直进行,直到达到一定的迭代次数或者分类器的性能不再提升为止。
1. Adaboost(Adaptive Boosting):Adaboost是Boosting算法最经典的实现之一,它通过迭代的方式训练一系列弱分类器,并将它们加权组合成一个强分类器。
Adaboost的特点是能够适应不同的数据分布,对于难以分类的样本会给予更高的权重,从而提升整体的分类性能。
2. Gradient Boosting:Gradient Boosting是一种通过梯度下降的方式逐步优化模型性能的Boosting算法。
它的核心思想是在每一轮迭代中,计算损失函数的负梯度,并将其作为下一轮训练样本的权重调整。
通过迭代的方式,逐步改进弱分类器的性能,从而提升整体的分类准确率。
3. XGBoost(eXtreme Gradient Boosting):XGBoost是Gradient Boosting的一种优化实现,它在Gradient Boosting的基础上引入了一些创新的技术,如正则化、缺失值处理和并行计算等。
XGBoost在很多机器学习竞赛中取得了优秀的成绩,并被广泛应用于各种实际问题中。
4. LightGBM:LightGBM是一种基于梯度提升树的Boosting算法,它在XGBoost的基础上进行了一些改进,使得它能够更快地训练模型,并具有更低的内存消耗。
Boosting算法总结(adaboosting、GBDT、XGBoost)把之前学习xgb过程中查找的资料整理分享出来,⽅便有需要的朋友查看,求⼤家点赞⽀持,哈哈哈作者:tangg, qq:577305810⼀、Boosting算法boosting算法有许多种具体算法,包括但不限于ada boosting \ GBDT \ XGBoost .所谓 Boosting ,就是将弱分离器 f_i(x) 组合起来形成强分类器 F(x) 的⼀种⽅法。
每个⼦模型模型都在尝试增强(boost)整体的效果,通过不断的模型迭代,更新样本点的权重Ada Boosting没有oob(out of bag ) 的样本,因此需要进⾏ train_test_split原始数据集》某种算法拟合,会产⽣错误》根据上个模型预测结果,更新样本点权重(预测错误的结果权重增⼤)》再次使⽤模型进⾏预测》重复上述过程,继续重点训练错误的预测样本点每⼀次⽣成的⼦模型,都是在⽣成拟合结果更好的模型,(⽤的数据点都是相同的,但是样本点具有不同的权重值)需要指定 Base Estimatorfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.tree import DecisionTreeClassifierada_clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2), n_estimators=500)ada_clf.fit(X_train, y_train)ada_clf.score(X_test, y_test)Gradient Boosting ⼜称为 DBDT (gradient boosting decision tree )训练⼀个模型m1,产⽣错误e1针对e1训练第⼆个模型m2,产⽣错误e2针对e2训练第⼆个模型m3,产⽣错误e3......最终的预测模型是:m1+m2+m3+...Gradient Boosting是基于决策树的,不⽤指定Base Estimatorfrom sklearn.ensemble import GradientBoostingClassifiergb_clf = GradientBoostingClassifier(max_depth=2, n_estimators=30)gb_clf.fit(X_train, y_train)gb_clf.score(X_test, y_test)这个算法的Base Estimator是基于decision tree的Xgboost是在GBDT的基础上进⾏改进,使之更强⼤,适⽤于更⼤范围xgboost可以⽤来确定特征的重要程度强烈推荐博客园上【战争热诚】写的⼀篇介绍xgboost算法的⽂章,⾮常详细地介绍了xgboost的优点、安装、xgboost参数的含义、使⽤xgboost实例代码、保存训练好的模型、并介绍了xgboost参数调优的⼀m1+m2+m3+...般流程。
决策树避免样本不平衡的分类方法
决策树是一种常用的分类方法,但在实际应用中,样本不平衡问题常常会影响分类结果的准确性。
这时候,我们可以通过一些技巧来避免样本不平衡带来的影响。
本文将介绍一些常用的决策树避免样本不平衡的分类方法。
1. 重采样法
重采样法是一种简单有效的样本不平衡处理方法。
该方法通过对样本进行重复或减少来平衡样本数据,其中包括上采样、下采样和组合采样等方法。
其中,上采样是对少数类数据进行复制,使得少数类样本数量增加,下采样是随机删除多数类数据,使得多数类样本数量减少,组合采样则是同时使用上采样和下采样方法。
2. 增加类别权重
在决策树中,通过增加被错误分类的样本的权重,可以弥补样本不平衡带来的影响。
具体来说,可以通过设置分类器的参数,对分类器在判定样本类别时,给少数类样本赋予更大的权重,从而达到增加分类准确率的效果。
3. 集成方法
集成方法是一种将多个弱分类器组合成一个强分类器的方法,常用的集成方法包括Bagging和Boosting等。
在样本不平衡的情况下,可以通过集成多个决策树来提升分类器的准确度。
具体来说,Bagging 方法可以通过对训练集进行随机采样来产生多个子样本,然后使用每个子样本训练一个决策树,最后将多个决策树的分类结果进行投票决
策。
而Boosting方法则是通过逐步增加被错误分类的样本权重,提高分类器对少数类数据的分类准确率。
总的来说,决策树是一种简单易用的分类方法,但在实际应用中需要注意样本不平衡带来的影响。
通过重采样、增加类别权重和集成方法等技巧,可以提高决策树的分类准确率。
Boosting算法(⼀)本章全部来⾃于李航的《统计学》以及他的博客和⾃⼰试验。
仅供个⼈复习使⽤。
Boosting算法通过改变训练样本的权重,学习多个分类器,并将这些分类器进⾏线性组合,提⾼分类性能。
我们以AdaBoost为例。
它的⾃适应在于:前⼀个弱分类器分错的样本的权值(样本对应的权值)会得到加强,权值更新后的样本再次被⽤来训练下⼀个新的弱分类器。
在每轮训练中,⽤总体(样本总体)训练新的弱分类器,产⽣新的样本权值、该弱分类器的话语权,⼀直迭代直到达到预定的错误率或达到指定的最⼤迭代次数。
有两个问题需要回答:1.每⼀轮如何改变训练数据的权重或者是概率分布 =>提⾼那些被前⼀轮若分类器错误分类样本的权重,⽽降低那些被正确分类样本的权重值, so那些没有得到正确分类的数据由于其权重值加⼤⽽受到后⼀轮的弱分类器的更⼤关注。
于是分类问题被⼀系列的弱分类器“分⽽治之”2.如何将如分类器组合成⼀个强分类器 =>弱分类器的组合,adaboost采取加权多数的表决⽅法:加⼤分类误差⼩的分类器的权值,使其在表决中起较⼤的作⽤,减少分类误差率⼤的弱分类器的权值,使其在变绝种起较⼩的作⽤。
那我们总结⼀下:(1)初始化训练数据(每个样本)的权值分布:如果有N个样本,则每⼀个训练的样本点最开始时都被赋予相同的权重:1/N。
(2)训练弱分类器。
具体训练过程中,如果某个样本已经被准确地分类,那么在构造下⼀个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提⾼。
同时,得到弱分类器对应的话语权。
然后,更新权值后的样本集被⽤于训练下⼀个分类器,整个训练过程如此迭代地进⾏下去。
(3)将各个训练得到的弱分类器组合成强分类器。
各个弱分类器的训练过程结束后,分类误差率⼩的弱分类器的话语权较⼤,其在最终的分类函数中起着较⼤的决定作⽤, ⽽分类误差率⼤的弱分类器的话语权较⼩,其在最终的分类函数中起着较⼩的决定作⽤。
Boosting算法之Adaboost和GBDT Boosting是串⾏式集成学习⽅法的代表,它使⽤加法模型和前向分步算法,将弱学习器提升为强学习器。
Boosting系列算法⾥最著名的算法主要有AdaBoost和梯度提升系列算法(Gradient Boost,GB),梯度提升系列算法⾥⾯应⽤最⼴泛的是梯度提升树(Gradient Boosting Decision Tree,GBDT)。
⼀、Adaboost1、Adaboost介绍 Adaboost算法通过在训练集上不断调整样本权重分布,基于不同的样本权重分布,重复训练多个弱分类器,最后通过结合策略将所有的弱分类器组合起来,构成强分类器。
Adaboost算法在训练过程中,注重减少每个弱学习器的误差,在训练下⼀个弱学习器时,根据上⼀次的训练结果,调整样本的权重分布,更加关注那些被分错的样本,使它们在下⼀次训练中得到更多的关注,有更⼤的可能被分类正确。
Adaboost算法框架图2、Adaboost算法过程1)初始化样本权重,⼀共有n个样本,则每个样本的权重为1/n2)在样本分布D t上,训练弱分类器,for t=1,2,……T:a、训练分类器h tb、计算当前弱分类器的分类误差率c、判断误差率是否⼩于0.5,是则继续,否则退出循环d、计算当前弱分类器的权重系数alpha值e、根据alpha值调整样本分布D t+1如果样本被正确分类,则该样本的权重更改为:如果样本被错误分类,则该样本的权重更改为:3)组合弱分类器得到强分类器3、算法伪代码: AdaBoost算法每⼀轮都要判断当前基学习器是否满⾜条件,⼀旦条件不满⾜,则当前学习器被抛弃,且学习过程停⽌。
Adaboost算法使⽤指数损失函数,通过最⼩化指数损失函数,得到在每次迭代中更新的权重参数计算公式。
AdaBoost算法使⽤串⾏⽣成的序列化⽅法,多个基学习器之间存在强依赖关系。
Adaboost的每⼀个弱分类器的⽬标,都是为了最⼩化损失函数,下⼀个弱分类器是在上⼀个分类器的基础上对错分样本进⾏修正,所以, AdaBoost算法是注重减⼩偏差的算法。
boosting算法原理Boosting算法是一种非常常用的机器学习算法,被广泛应用于分类、回归等领域。
它的原理是将若干个弱分类器(weak classifier)通过加权平均的方式组合成一个强分类器(strong classifier),以提高分类的准确率。
下面,我们将介绍Boosting算法的原理和实现方法。
一、原理Boosting算法的核心思想是以一种特殊的方式组合弱分类器,每个弱分类器只能做出比随机猜测稍微好一点的决策。
Boosting将它们组合起来,变成一个强分类器。
具体实现的过程如下:1. 给每个样本赋一个权重值,初始化为1/n,其中n为样本数目。
2. 针对每个样本训练一个弱分类器,例如决策树。
3. 对每个弱分类器计算出它们的误差率,即错误分类样本的权重和。
4. 更新每个样本的权重,在每轮训练中,分类错误的样本会获得更高的权重值。
5. 将所有的弱分类器按照误差率给出权重。
6. 以各个弱分类器的权重作为权重进行加权平均,得到最终的分类器。
二、实现Boosting算法有多种实现方式,其中比较常用的是Adaboost算法,它是一种迭代算法,通过调整样本权重和弱分类器权重实现分类器的训练。
具体实现步骤如下:1. 给每个样本赋一个权重值,初始化为1/n,其中n为样本数目。
2. 针对每个样本训练一个弱分类器,例如决策树。
3. 对每个弱分类器计算出它们的误差率,即错误分类样本的权重和。
4. 计算每个弱分类器的权重,并更新样本的权重,增加分类错误的样本的权重,减少分类正确的样本的权重。
5. 重复上述步骤,直至满足条件为止(例如:弱分类器的数目、误差率等)。
6. 将所有的弱分类器按照误差率给出权重。
7. 以各个弱分类器的权重作为权重进行加权平均,得到最终的分类器。
三、总结在使用Boosting算法时,需要注意选择合适的弱分类器。
这里我们以决策树为例,在实际应用中,我们可以采用其他的算法,如神经网络等。
数据挖掘中的分布不均衡问题与解决方法在数据挖掘的过程中,我们常常会遇到分布不均衡的问题。
所谓分布不均衡,是指在数据集中不同类别的样本数量差距很大,导致模型训练和预测的结果偏向于数量较多的类别。
这种情况下,模型往往难以准确地预测少数类别,影响了数据挖掘的效果。
本文将探讨分布不均衡问题的原因以及解决方法。
一、分布不均衡问题的原因1. 样本收集方式不合理:在数据收集的过程中,如果没有考虑到不同类别样本的分布情况,可能导致样本数量不均衡。
例如,在某个疾病的数据集中,患病样本数量远远小于健康样本数量,就会导致分布不均衡的问题。
2. 样本标签错误:在标注样本的过程中,可能会出现标签错误的情况。
如果错误标注的样本数量较多,就会导致分布不均衡的问题。
3. 样本缺失:某些类别的样本数量本身就很少,或者在数据收集的过程中由于某些原因导致某些类别的样本缺失,也会引发分布不均衡的问题。
二、解决分布不均衡问题的方法1. 重采样方法重采样方法是通过增加少数类别样本或减少多数类别样本的方式来达到样本均衡的目的。
常见的重采样方法有欠采样和过采样。
欠采样是指减少多数类别的样本数量,使其与少数类别的样本数量接近。
常用的欠采样方法有随机欠采样、聚类欠采样等。
随机欠采样是随机地从多数类别中选择一部分样本,使得多数类别的样本数量减少到与少数类别相等。
聚类欠采样是通过聚类算法将多数类别的样本划分为若干个簇,然后从每个簇中选择一个样本作为代表性样本,从而减少多数类别的样本数量。
过采样是指增加少数类别的样本数量,使其与多数类别的样本数量接近。
常用的过采样方法有随机过采样、SMOTE等。
随机过采样是通过随机复制少数类别的样本来增加其数量。
SMOTE(Synthetic Minority Over-sampling Technique)是一种合成少数类别样本的方法,它通过对少数类别样本进行插值生成新的样本,从而增加其数量。
2. 引入惩罚机制在模型训练的过程中,可以引入一些惩罚机制来平衡不同类别样本的权重。
解决样本不均衡问题的集成学习技巧在机器学习领域,训练数据的样本不均衡问题是一个常见的挑战。
当不同类别的样本在数量上存在明显差异时,传统的机器学习算法往往会倾向于预测样本数量较多的类别,而忽视数量较少的类别。
这可能导致模型在预测少数类别时的性能下降。
为了解决这个问题,集成学习技巧被广泛应用于样本不均衡问题的解决。
集成学习是一种将多个弱分类器组合起来形成一个强分类器的技术。
通过利用多个分类器的预测结果,集成学习可以提高模型的准确性和鲁棒性。
针对样本不均衡问题,以下是几种常见的集成学习技巧。
1. 过采样方法:过采样方法通过增加少数类别的样本数量来实现样本平衡。
其中一种常见的过采样方法是SMOTE算法(Synthetic Minority Over-sampling Technique)。
SMOTE算法通过随机选取一个少数类样本中的两个相邻样本,在两个样本之间的线段上生成新的合成样本。
这样,可以有效增加少数类样本的数量,提高模型对少数类别的识别能力。
2. 欠采样方法:相反,欠采样方法通过减少多数类别的样本数量来实现样本平衡。
其中一种常见的欠采样方法是随机下采样。
随机下采样方法随机从多数类样本中删除一些样本,以使得多数类样本数量与少数类样本数量相当。
然而,欠采样方法可能会导致信息的丢失,因为删除样本可能会减少模型的泛化能力。
3. 集成方法:集成方法通过组合多个分类器的预测结果来提高模型性能。
这些分类器可以是使用不同算法训练得到的,也可以是使用相同算法但在不同子样本上训练得到的。
常见的集成方法包括投票法(Voting)、平均法(Averaging)和堆叠法(Stacking)等。
这些方法可以有效平衡不同类别的预测结果,提高模型的整体性能。
4. 阈值调整:在样本不均衡问题中,通常会将分类结果转化为概率值,然后根据阈值将概率值映射为最终的类别。
阈值的调整可以帮助平衡不同类别的预测结果。
对于少数类别,可以通过降低阈值来提高其被预测为正类的概率。
如何处理AI技术中的数据不平衡问题一、引言在人工智能(Artificial Intelligence,简称AI)领域,数据是训练算法和模型的基础。
然而,在现实应用中,我们经常会面临数据不平衡的问题。
所谓数据不平衡是指样本类别之间存在明显的数量差异,这种情况下训练出来的模型往往会对数量较多的类别表现更好,而对数量较少的类别表现欠佳。
为了解决这一问题,我们需要采取一些有效的方法来处理AI技术中的数据不平衡。
二、了解数据不平衡问题1. 定义数据不平衡是指样本类别分布极度不均匀或者存在明显的数量差异。
2. 影响数据不平衡会导致训练出来的模型倾向于偏向数量较多的类别,忽略了数量较少的类别,从而降低了整体模型性能。
3. 常见场景数据集中常见类型包括垃圾邮件识别、金融欺诈检测等。
三、探索处理数据不平衡问题的方法1. 重采样技术重采样技术是一种常见的数据平衡方法,通过增加少数类样本或减少多数类样本,将样本类别分布调整到合理水平。
(1)过采样过采样是指通过复制和添加原始数据中的少数类样本以增加其数量,以实现数据集平衡。
例如,SMOTE(Synthetic Minority Over-sampling Technique)就是一种流行的过采样算法。
(2)欠采样在欠采样中,我们从多数类中随机地删除部分样本来减少其数量,达到数据平衡。
然而需要注意的是,欠采样可能会导致信息丢失,并且只适用于拥有足够多重复或相似特征的大规模数据集。
2. 集成方法集成方法使用一系列分类器或回归器来共同判断最终结果。
对于数据不平衡问题,可以利用集成学习提高模型性能。
(1)BaggingBagging是一种装袋技术,在这个方法中,通过有放回地从原始训练数据集中有放回抽取部分子集进行训练来生成多个基本分类器/回归模型。
然后对所有分类器/回归模型的结果进行投票或求平均值来得出最终结果。
(2)BoostingBoosting 是另一种集成方法,在这个方法中,弱分类器/回归模型是按顺序生成的。
第40卷第2期Vol.40,No.22010年2月JOURNALOFUNIVERSITYOFSCIENCEANDTECHNOLOGYOFCHINAFeb.2010
文章编号:025322778(2010)0220146206
收稿日期:2008206202;修回日期:2008209203基金项目:国家自然科学基金(U0835002),教育部2微软重点实验室研究基金(07122808)资助.作者简介:程有龙,男,1985年生,硕士生.研究方向:机器学习.E2mail:ylcheng@mail.ustc.edu.cn通讯作者:李斌,博士/副教授.E2mail:binli@ustc.edu.cn
面向不均衡小样本训练集的改进Boosting算法程有龙1,庄连生1,李 斌1,2,庄镇泉2(1.微软2教育部多媒体计算与通信联合实验室,安徽合肥230027;2.中国科学技术大学电子科学与技术系,安徽合肥230027)摘要:传统的Boosting算法训练出的分类器常会出现过拟合和向多数类偏移.为此,提出一种基于自适应样本注入和特征置换的Boosting学习算法,通过在训练过程中加入人工合成样本,逐渐平衡训练集,并通过合成的样本对分类器学习进行扰动,使分类器选择更多有效的特征,提高了分类器的泛化能力.最后,在两类和多类图片分类问题上对该算法的有效性进行了考察,实验结果表明,该算法能够在样本数很少,且正负样本数量极不均衡的情况下,有效提高booting算法的泛化能力.关键词:Boosting;小样本集;非平衡训练集;特征置换;扰动;泛化能力中图分类号:TP18 文献标识码:A doi:10.3969/j.issn.025322778.2010.02.007
ImprovedBoostingalgorithmforsmallandimbalancedtrainingsetsCHENGYoulong1,ZHUANGLiansheng1,LIBin1,2,ZHUANGZhenquan2(1.MOE2MicrosoftKeyLaboratoryofMultimediaComputingandCommunication,Hefei230027,China;2.DepartmentofElectronicScienceandTechnology,UniversityofScienceandTechnologyofChina,Hefei230027,China)
Abstract:TraditionalBoostingalgorithmstendtooverfitandbebiasedtowardsthemajorityclassonsmallandimbalancedtrainingsets.Toaddressthisissue,animprovedBoostinglearningalgorithmwithadaptivesampleinjectingandfeatureknockoutwasproposed.Inthetrainingprocess,syntheticsampleswereappendedtotheoriginaltrainingsettorebalanceitanddisturbandenhanceitsgeneralizationability.Themethodwastestedonbothtwo2classandmulti2classimageclassificationproblems.Experimentresultsshowthatwhenthenumberoftrainingsamplesissmall,andthedistributionoftrainingsetisimbalanced,theproposedmethodcanenhancethegeneralizationperformanceofBoostingalgorithmseffectively.Keywords:Boosting;smallsampleset;imbalancedtrainingset;featureknockout;disturbing;generalization
0 引言当前模式识别算法对训练样本的依赖性较大,训练样本集的大小和分布对最终分类器的性能有着很大的影响.当训练样本的特征维数远大于样本集的大小时,目前的学习方法,例如神经网络、Boosting算法等,容易出现过拟合现象,即在训练集上得到很低的分类错误,但在测试集上的分类错误却很大.这就是经典的小样本学习问题.在实际应用中,样本的特征维数经常会很高,如人脸识别的特征维数一般都在数千量级,而样本的获取却总是存在这样或者那样的困难,因此小样本问题是普遍存在的.此外,对于目标检测等问题,正样本获取的难度要远远大于负样本,因此训练集往往是正负样本不均衡的,这也会对算法性能产生很大影响.因此,研究如何在小规模、不均衡的样本集提高学习算法的准确率和泛化能力具有重要的意义.正则化是提高算法泛化能力的一种主要方法,被广泛应用于小样本学习问题.例如,文献[1]提出了基于支持向量机的惩罚回归模型;文献[2]使用基于正则化的嵌入式特征选择模型;Wolf[3]提出了一种融合了特征选择和合成冗余样本来对分类器进行扰动的方法.这些方法的基本思想都认为:一个鲁棒的分类器不应该过度依赖某几个特定的特征,于是通过在学习过程中对权重过大的特征实施惩罚,以削弱其在分类器中的作用.以上方法均在特定问题上取得了很好的效果,但是,他们都没有考虑训练集中样本不均衡的情况.针对样本不均衡问题,也有一些优秀的工作值得参考.例如,SMOTEBoost[4]通过合成一些少数类的样本,以减少过度拟合现象发生的风险;在DataBoost2IM[5]方法中,来源于多数类和少数类的困难样本在Boosting算法的执行中都被识别出来,然后困难样本用于分别产生多数类和少数类的人工样本.人工数据被加入最初的训练集,在新的训练集中,类的分布和不同类之间的总权重被重新平衡.上述方法的目的是通过新产生的合成样本来扩充少数类的样本库,以降低样本不均衡对算法的影响;Viola[6]提出了非对称的AdaBoost算法,即在训练过程中,漏检的正样本的权重惩罚大于误识的负样本,使分类器向着有利于正确分类正样本的方向偏移.这种方法的缺点在于不同类的惩罚项的比例难以确定,只能根据经验来获得.在该文中,训练采用的正样本数为1500,负样本数为5000,这个训练样本集还是比较大的,不属于典型的小样本情况.在目前已发表的工作中,尚未发现有同时针对样本数极少和样本分布极不均衡这两个问题进行研究.而随着应用的发展,这类问题开始大量出现.例如,异常检测等问题中,样本的稀缺和不均衡使得现有算法难以达到理想的分类准确度和泛化能力.为此,本文提出了基于自适应样本注入和特征替换策略的Boosting算法,以提高Boosting算法在极小样本和非均衡训练集上分类器的泛化能力.在典型的两分类问题和多分类问题上的实验表明,本文的算法能有效提高分类器在极少样本和非均衡训练集情况下的泛化能力.
1 基于Boosting的样本注入方法
Boosting是一类优秀的集成学习方法.在每次迭代中,它根据当前样本集上的权重分布,挑选一个错误率最小的弱分类器,加入集成分类器;然后重新调整样本的权重分布,增加被当前弱分类器分错的样本的权重;在下次迭代时,算法将挑选那些对新的权重分布分类错误率最低的弱分类器加入集成分类器,最终获得的强分类器的错误率将会呈指数速度收敛.弱分类器通常是基于桩(stump)的,表示为f(x)=sign(xk-Th)(1)式中,x为特征向量,k为弱分类器选取的特征维数,Th为这个桩的阈值.弱分类器的阈值只在训练集中每个样本的特征上取,当样本数为N,特征数为M时,可选的弱分类器共有N@M个.当训练集很小时,Boosting算法只需使用少量特征就可以在训练集上达到很高的分类准确率.假如基于特征k的弱分类器已对所有样本进行了正确的分类,那么在以后的迭代开始中,所有样本的相对权重将不再改变,因此无论迭代多少次,最终的强分类器都将依赖特征k.这样的分类器在测试集上往往会产生很高的分类错误.文献[3]提出一种基于样本注入的Boosting算法.该算法在每次迭代中加入一个人工合成的样本来扰动分类器的学习,使之前选择的弱分类器难以再次被选中,以达到提高弱分类器多样性、进而提高分类器泛化能力的目的.具体的操作如下:Boosting算法在迭代一次后,设选择特征k组成弱分类器,在初始样本集中随机抽取两个不同的样本xA,xB,其中xA为拷贝源,xB为替换源.拷贝xA
的特征值、类别标号、权重,得到合成样本x^,然后用
xB(k)替换x^(k)的值.这个算法被称为特征替换Boost算法(featureknockoutboost,KOBoost).该算法合成样本的作用在于:如果x^和拷贝源在第k维上的值刚好在桩的两端,这时刚刚选取的弱分类器就会对x^和xA给出相反的判决(但x^和xA类别相同),因此在接下来的迭代中,会降低使用该特征作为弱分类器的概率,
147第2期面向不均衡小样本训练集的改进Boosting算法转而选择别的特征.随着迭代的进行,算法将有更多的机会选择新的特征组成弱分类器.设初始训练集中的正样本所占比例为p,在每次迭代中产生的合成样本对分类器学习形成扰动的概率为2p(1-p).当原始样本集严重不均衡时,p很小,例如p=011时,2p(1-p)=0118,因此大约需要迭代5次才可以获得一个样本对分类器学习形成扰动,这降低了算法的效率.并且该方法合成样本是从原始训练集随机抽取,因此不改变训练集的正负样本比例.但是在文献[4]中,作者指出在不均衡训练集上使用Boosting会导致分类器向多数类偏移,降低了分类器的分类性能.针对KOBoost的上述问题,本文改进了在每次迭代时合成人工样本的策略,提出了在不均衡的小样本训练集上的AdaKOBoost算法.2 自适应特征替换方法2AdaKOBoost2.1 算法介绍为了在合成人工样本扰动分类器学习的同时,保证分类器不向多数类偏移,提出两点改进:(Ñ)在合成人工样本时引入概率机制,拷贝源选择正样本的概率是当前负样本在训练集中的比例,选择负样本的概率是当前正样本在训练集中的比例.因此,在每挑选出一个弱分类器后,新产生的合成样本以较大的概率拷贝自初始训练集中少数类的样本.同时由于新样本的类别属性和拷贝源一致,随着迭代的进行,新的合成样本不断地加入,在扰动分类器的同时逐渐平衡了训练样本集,如图1所示.图1 正负样本的个数随着迭代次数变化的曲线Fig.1 Thenumberofsamplesvsiteration(Ò)替换源从与拷贝源不同类的初始样本集中随机选取,使得每次合成的样本对刚生成的弱分类器均产生扰动,这相比文献[3]的方法更有效率,可以在较少的迭代中获得更大的扰动.具体步骤如下:算法211 AdaKOBoost输入:初始训练集:(x1,y1),(xN,yN),xiIRm,yiI{+1,-1} 输出:强分类器F(x)