资源描述
山东财经大学
金融数据挖掘课程论文
题目:基于Adaboost算法的银行客户数据分析
学 院 计算机科学与技术
专 业 计算机科学与技术
班 级 计算机科学与技术1201班
学 号 201218441442
姓 名 王 健
山东财经大学教务处制
二O一四年 十二 月
1
山东财经大学学士学位论文
基于Adaboost算法的银行客户数据分析
摘 要
分类是一种重要的数据分析形式,它提取刻画重要数据类的模型。这种模型称为分类器,预测分类的(离散的,无序的)类标号。在机器学习中,对分类器的分类进行准确性评估是一个基本问题。我们以此来确定分类器是否可以运用到实际的分类中。组合分类器是一个复合模型,由多个分类器组合而成。组合分类器基于投票返回类标号预测。组合分类器往往比它的成员分类器更准确。传统的学习模型假定数据类是良分布的。然而在现实世界的许多领域中,数据是类不平衡的,其中感兴趣的主类只有少量元祖。这称为类不平衡问题。我们还研究提高类不平衡数据分类准确率的技术。。我们将Adaboost算法应用于银行客户数据分析,分析结果表明,该算法运行可靠。本文最后对Adaboost算法的优缺点进行了总结。
关键词:银行信息;AdaBoost;组合分类
1.引言
1.1组合分类方法简介
袋装、提升和随机森林都是组合分类方法的列子。组合分类把k个学习得到的模型(或基分类器)M1,M2,······Mk组合在一起,旨在创建一个改建的复合分类模型M*。使用给定的数据集D创建k个训练集D1,D2,······,Dk,其中Di用于创建分类器Mi。给定一个待分类的新数据元祖,每个基分类器通过返回类预测投票。组合分类器基于基分类器的投票返回类预测。
组合分类器往往比它的基分类器。列如,考虑一个进行多数表决的组合分类器。也就是说,给定一个待分类元祖X,它收集由基分类器返回的类标号预测,并输入占多数的类。基分类器可能出错时,但是仅当超过一半的基分类器出错时,组合分类器才会误分类X,当模型之间存在显著差异时,组合分类器产生更好的结果。也就说,理想的,基分类器之间几乎不相关。基分类器还应该优于随机预测。
1.2组合分类方法
我们分类中用到很多经典分类算法如:SVM、logistic 等,我们很自然的想到一个方法,我们是否能够整合多个算法优势到解决某一个特定分类问题中去,答案是肯定的!
通过聚合多个分类器的预测来提高分类的准确率。这种技术称为组合方法(ensemble method) 。组合方法由训练数据构建一组基分类器,然后通过对每个基分类器的预测进行权重控制来进行分类。
考虑25个二元分类组合,每个分类误差是0.35 ,如果所有基分类器都是相互独立的(即误差是不相关的),则在超过一半的基分类器预测错误组合分类器才会作出错误预测。这种情况下的组合分类器的误差率:
组合分类器性能优于单个分类器必须满足两个条件:(1)基分类器之间是相互独立的 (2) 基分类器应当好于随机猜测分类器。实践上很难保证基分类器之间完全独立,但是在基分类器轻微相关情况下,组合方法可以提高分类的准确率。
2.背景介绍
2.1 Boosting方法提出和发展
在了解Adaboost方法之前,先了解一下Boosting方法
回答一个是与否的问题,随机猜测可以获得50%的正确率。如果一种方法能获得比随机猜测稍微高一点的正确率,则就可以称该得到这个方法的过程为弱学习;如果一个方法可以显著提高猜测的正确率,则称获取该方法的过程为强学习。1994年,Kearns和Valiant证明,在Valiant的PAC(Probably
ApproximatelyCorrect)模型中,只要数据足够多,就可以将弱学习算法通过集成的方式提高到任意精度。实际上,1990年,SChapire就首先构造出一种多项式级的算法,将弱学习算法提升为强学习算法,就是最初的Boosting算法。Boosting意思为提升、加强,现在一般指将弱学习提升为强学习的一类算法。1993年,Drucker和Schapire首次以神经网络作为弱学习器,利用Boosting算法解决实际问题。前面指出,将弱学习算法通过集成的方式提高到任意精度,是Kearns和Valiant在1994年才证明
的,虽然Boosting方法在1990年已经提出,但它的真正成熟,也是在1994年之后才开始的。1995年,Freund提出了一种效率更高的Boosting算法。
2.2 AdaBoost算法的提出
AdaBoost算法是Freund和Schapire根据在线分配算法提出的,他们详细分析了AdaBoost算法错误率的上界,以及为了使强分类器达到错误率,算法所需要的最多迭代次数等相关问题。与Boosting算法不同的是,adaBoost算法不需要预先知道弱学习算法学习正确率的下限即弱分类器的误差,并且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,这样可以深入挖掘弱分类器算法的能力。
Adaboost是一种基于级联分类模型的分类器。级联分类模型可以用图2-1表示:
所有待检测样本
判决为正例样本
3
2
1
负例样本
图2-1
级联分类器介绍:级联分类器就是将多个强分类器连接在一起进行操作。每一个强分类器都由若干个弱分类器加权组成,例如,有些强分类器可能包含10个弱分类器,有些则包含20个弱分类器,一般情况下一个级联用的强分类器包含20个左右的弱分类器,然后在将10个强分类器级联起来,就构成了一个级联强分类器,这个级联强分类器中总共包括200若分类器。因为每一个强分类器对负样本的判别准确度非常高,所以一旦发现检测到的目标位负样本,就不在继续调用下面的强分类器,减少了很多的检测时间。因为一幅图像中待检测的区域很多都是负样本,这样由级联分类器在分类器的初期就抛弃了很多负样本的复杂检测,所以级联分类器的速度是非常快的;只有正样本才会送到下一个强分类器进行再次检验,这样就保证了最后输出的正样本的伪正(false positive)的可能性非常低。
3.方法
3.1 AdaBoost算法的基本原理
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把
这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用Adaboost分类器可以排除一些不必要的训练数据特征,并将关键放在关键的训练数据上面。
AdaBoost算法中不同的训练集是通过调整每个样本对应的权重来实现的。开始时,每个样本对应的权重是相同的,即其中 n 为样本个数,在此样本分布下训练出一弱分类器。对于分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重,这样分错的样本就被突出出来,从而得到一个新的样本分布。在新的样本分布下,再次对弱分类器进行训练,得到弱分类器。依次类推,经过 T 次循环,得到 T 个弱分类器,把这 T 个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。
AdaBoost实际具体解决了两个问题:
怎么处理训练样本?
在AdaBoost中,每个样本都被赋予一个权重。如果某个样本没有被正确分类,它的权重就会被提高,反之则降低。这样,AdaBoost方法将注意力更多地放在“难分”的样本上。
怎么合并弱分类器成为一个强分类器?
强分类器表示为弱分类器的线性加权和形式,准确率越高的弱学习权重越高。
3.2 AdaBoost算法分析
AdaBoost算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据分类能力。
1、先通过对N个训练样本的学习得到第一个弱分类器;
2、 讲分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
3、 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
4、 最终经过提升的强分类器。即某个数据被分为哪一类要通过······的多数表决。
具体说来,整个Adaboost 迭代算法就3步:
1、 初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权重:1/N。
2、 训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。然后,权重更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
3、 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
3.3 AdaBoost算法流程
1. 给定训练样本集S,其中X和Y分别对应于正例样本和负例样本; T为训练的最大循环次数;
2. 初始化样本权重为1/n ,即为训练样本的初始概率分布;
3. 第一次迭代:
(1) 训练样本的概率分布相当下,训练弱分类器:
(2) 计算弱分类器的错误率:
(3) 选取合适阈值,使得错误率最小
(4) 更新样本权重:
(5) 最终得到的强分类器。
3.4 AdaBoost算法的实现
····
····
图3-1
图3-1就是Adaboost的结构,最后的分类器YM是由数个弱分类器(weak classifier)组合而成的,相当于最后m个弱分类器来投票决定分类,而且每个弱分类器的“话语权”α不一样。
3.5 AdaBoost算法过程
1. 初始化所有训练样列的权重为1/N, 其中N是样列数
2. For m=1,······M;
A).训练弱分类器ym(),使其最小化权重误差函数(weighted error function):
B).计算该弱分类器的话语权:
.
C).更新权重:
其中Zm:
是规范因子,使所有w的和为1.
3.得到最后的分类器:
.
以上过程和AdaBoost算法的结构图一样,前一个分类器改变权重w,同时组成最后的分类器。
- -
-
+ - -
+ + +
+
3.6 AdaBoost算法实例
图中,“+”和“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为分类器来进行分类。
- -
-
+ -
+ + -
+ +
第一步:
- -
-
+ - -
+ + +
+
根据分类的正确率,得到一个新的样本分布,一个子分类器
其中画圈的样本表示被分错了。在下面的图中,比较大的“+”表示对该样本做了加权。
算法最开始给了一个均匀分布的D。所以里的每个点的值是0.1。当划分后,有三个点划分错了,根据算法误差表达式。得到误差为分错了的三个点的值之和,所以=(0.1+0.1+0.1)=0.3,而根据表达式可以算出为0.42。然后根据算法把分错的点权值变大。如此迭代,最终完成AdaBoost算法。
第二步:
- -
-
+ -
+ -
+
+ +
- -
-
+ -
+ + -
+ +
h2
根据分类的正确率,得到一个新的样本分布,一个子分类器
第三步:
- -
-
+ -
+
+ -
+ +
h3
得到一个子分类器
整合所以子分类器:
(0.42图一 + 0.65图二 +0.92图三)=
- -
+ - -
-
+
+ +
+
因此可以得到整合的结果,从结果中看,及时简单的分类器,组合起来也能获得很好的分类效果。
4. 实验与结果
表4-1为AdaBoost算法对银行客户信息的数据分析。
表4-1
id
age
sex
region
income
married
children
car
save_act
current_act
mortgage
pep
ID12101
48
FEMALE
INNER_CITY
17546
NO
1
NO
NO
NO
NO
YES
ID12102
40
MALE
TOWN
30085.1
YES
3
YES
NO
YES
YES
NO
ID12103
51
FEMALE
INNER_CITY
16575.4
YES
0
YES
YES
YES
NO
NO
ID12104
23
FEMALE
TOWN
20375.4
YES
3
NO
NO
YES
NO
NO
ID12105
57
FEMALE
RURAL
50576.3
YES
0
NO
YES
NO
NO
NO
ID12106
57
FEMALE
TOWN
37869.6
YES
2
NO
YES
YES
NO
YES
ID12107
22
MALE
RURAL
8877.07
NO
0
NO
NO
YES
NO
YES
ID12108
58
MALE
TOWN
24946.6
YES
0
YES
YES
YES
NO
NO
ID12109
37
FEMALE
SUBURBAN
25304.3
YES
2
YES
NO
NO
NO
NO
ID12110
54
MALE
TOWN
24212.1
YES
2
YES
YES
YES
NO
NO
ID12111
66
FEMALE
TOWN
59803.9
YES
0
NO
YES
YES
NO
NO
ID12112
52
FEMALE
INNER_CITY
26658.8
NO
0
YES
YES
YES
YES
NO
ID12113
44
FEMALE
TOWN
15735.8
YES
1
NO
YES
YES
YES
YES
ID12114
66
FEMALE
TOWN
55204.7
YES
1
YES
YES
YES
YES
YES
ID12115
36
MALE
RURAL
19474.6
YES
0
NO
YES
YES
YES
NO
ID12116
38
FEMALE
INNER_CITY
22342.1
YES
0
YES
YES
YES
YES
NO
ID12117
37
FEMALE
TOWN
17729.8
YES
2
NO
NO
NO
YES
NO
ID12118
46
FEMALE
SUBURBAN
41016
YES
0
NO
YES
NO
YES
NO
ID12119
62
FEMALE
INNER_CITY
26909.2
YES
0
NO
YES
NO
NO
YES
ID12120
31
MALE
TOWN
22522.8
YES
0
YES
YES
YES
NO
NO
ID12121
61
MALE
INNER_CITY
57880.7
YES
2
NO
YES
NO
NO
YES
ID12122
50
MALE
TOWN
16497.3
YES
2
NO
YES
YES
NO
NO
ID12123
54
MALE
INNER_CITY
38446.6
YES
0
NO
YES
YES
NO
NO
ID12124
27
FEMALE
TOWN
15538.8
NO
0
YES
YES
YES
YES
NO
ID12125
22
MALE
INNER_CITY
12640.3
NO
2
YES
YES
YES
NO
NO
ID12126
56
MALE
INNER_CITY
41034
YES
0
YES
YES
YES
YES
NO
ID12127
45
MALE
INNER_CITY
20809.7
YES
0
NO
YES
YES
YES
NO
ID12128
39
FEMALE
TOWN
20114
YES
1
NO
NO
YES
NO
YES
ID12129
39
FEMALE
INNER_CITY
29359.1
NO
3
YES
NO
YES
YES
NO
ID12130
61
MALE
RURAL
24270.1
YES
1
NO
NO
YES
NO
YES
ID12131
61
FEMALE
RURAL
22942.9
YES
2
NO
YES
YES
NO
NO
ID12132
20
FEMALE
TOWN
16325.8
YES
2
NO
YES
NO
NO
NO
ID12133
45
MALE
SUBURBAN
23443.2
YES
1
YES
YES
YES
NO
YES
ID12134
33
FEMALE
INNER_CITY
29921.3
NO
3
YES
YES
NO
NO
NO
ID12135
43
MALE
SUBURBAN
37521.9
NO
0
NO
YES
YES
NO
YES
ID12136
27
FEMALE
INNER_CITY
19868
YES
2
NO
YES
YES
NO
NO
ID12137
19
MALE
RURAL
10953
YES
3
YES
YES
YES
NO
NO
ID12138
36
FEMALE
RURAL
13381
NO
0
YES
NO
YES
NO
YES
ID12139
43
FEMALE
TOWN
18504.3
YES
0
YES
YES
YES
NO
NO
ID12140
66
FEMALE
SUBURBAN
25391.5
NO
2
NO
NO
YES
NO
NO
ID12141
55
MALE
TOWN
26774.2
YES
0
NO
NO
YES
YES
YES
ID12142
47
FEMALE
INNER_CITY
26952.6
YES
0
YES
NO
YES
NO
NO
ID12143
67
MALE
TOWN
55716.5
NO
2
YES
YES
NO
NO
YES
ID12144
32
FEMALE
TOWN
27571.5
YES
0
YES
NO
YES
YES
NO
ID12145
20
MALE
INNER_CITY
13740
NO
2
YES
YES
YES
YES
NO
ID12146
64
MALE
INNER_CITY
52670.6
YES
2
NO
YES
YES
YES
YES
ID12147
50
FEMALE
INNER_CITY
13283.9
NO
1
YES
YES
YES
NO
YES
ID12148
29
MALE
INNER_CITY
13106.6
NO
2
NO
YES
YES
YES
YES
ID12149
52
MALE
INNER_CITY
39547.8
NO
2
YES
NO
YES
NO
YES
应用AdaBoost算法,得到以下结果:
R1:IF age>40 AND sex=MALE THEN car=YES
R2:IF income<2000 AND sex=MALE THEN marr=no
R3:IF income<2000 AND sex=MALE THEN marr=no
R4:IF marr=NO then chil=0
R5:IF income<1500 AND save=no THEN marr=no
R6:IF marr=YES AND sex=FEMA THEN save=YES
5.结论
本文通过AdaBoost算法对银行客户信息的研究,对银行客户资料做了不同角度的分析,同时也总结了AdaBoost算法的优缺点及对AdaBoost算法的思考。
1)adaboost是一种有很高精度的分类器
2)可以使用各种方法构建子分类器,adaboost算法提供的是框架
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
4)简单,不用做特征筛选
5)不用担心overfitting!
AdaBoost算法的核心思想是当分类器对某些样本正确分类时,则减少这些样本的权值;当错误分类时,则增加这些样本的权值,让学习算法在后续的学习中集中对比较难的训练样本进行学习,从而得到一个识别准确率理想的分类器。当训练样本集包含噪音样本和一些罕见的困难样本时,AdaBoost算法的重心将转移到难分类的样本上,即难分类的样本权重会呈指数增长。
到这里,也许你已经对adaboost算法有了大致的理解。但是也许你会有个问题,为什么每次迭代都要把分错的点的权值变大呢?这样有什么好处呢?不这样不行吗? 这就是我当时的想法,为什么呢?。然后我仔细一想,也许提高错误点可以让后面的分类器权值更高。然后看了adaboost算法,和我最初的想法很接近,但不全是。 注意到算法最后的表到式为,这里面的a 表示的权值,是由得到的。而a是关于误差的表达式,到这里就可以得到比较清晰的答案了,所有的一切都指向了误差。提高错误点的权值,当下一次分类器再次分错了这些点之后,会提高整体的错误率,这样就导致 a 变的很小,最终导致这个分类器在整个混合分类器的权值变低。也就是说,这个算法让优秀的分类器占整体的权值更高,而挫的分类器权值更低。这个就很符合常理了。
最后,我们可以总结下adaboost算法的一些实际可以使用的场景:
1)用于二分类或多分类的应用场景
2)用于做分类任务的baseline无脑化,简单,不会overfitting,不用调分类器
3)用于特征选择(feature selection)
4)Boosting框架用于对badcase的修正只需要增加新的分类器,不需要变动原有分类器
5)应用于人脸检测、目标识别等领域。
由于adaboost算法是一种实现简单,应用也很简单的算法。Adaboost算法通过组合弱分类器而得到强分类器,同时具有分类错误率上界随着训练增加而稳定下降,不会过拟合等的性质,应该说是一种很适合于在各种分类场景下应用的算法。
9
参考文献
[1]于玲;吴铁军;;集成学习:Boosting算法综述[J];模式识别与人工智能;2004年01期
[2]赵江,徐鲁安;基于AdaBoost算法的目标检测[J];计算机工程;2004年04期
[3]陈家辉;付忠良;陈腊梅;;基于模板匹配的AdaBoost演化算法[J];计算机应用;2007年12期
[4]李秋洁;茅耀斌;王执铨;;一种基于boosting的不平衡数据分类算法[A];中国自动化学会控制理论专业委员会C卷[C];2011年
[5]付忠良,关于AdaBoost有效性的分析{J};计算机研究与发展,2008,45(10);1747-1755
[6][赵秀宽;阳建宏;黎敏;徐金梧;;一种改进的不平衡数据集分类方法[A];中国科学院地质与地球物理研究所第11届(2011年度)学术年会论文集(下)[C];2012年
11
7
展开阅读全文