然后,每一个自助数据集都被独立地用于训练一个“分量分类器”,最终的分类判决将根据这些“分量分类器”各自的判决结果投票来决定。
通常,这些分量分类器的模型形式都是一样的,例如,他们可能是都是HMM分类器,或者都是神经网络分类器,或者都是判定树,等等。
当然它们的具体模型参数可能不同,这是由于各自的训练集的不同而引起的。
Bagging算法是一个“多分类器系统”,其中,最后的分类结果取决于许多分量分类器的输出。
而Bagging算法中的最基本的判决规则,就是对各个分量分类器的判决结果使用投票表决原则。
【算法分析】
Bagging方法中,各学习器的训练集由从原始训练集中随机选取若干示例组成,训练集
的规模通常与原始训练集相当,训练示例允许重复选取。
这样,原始训练集中某些示例可
能在新的训练集中出现多次,而另外一些示例则可能一次也不出现。
Bagging方法通过重新
选取训练集增加了集成学习的差异度,从而提高了泛化能力。
Breiman指出,稳定性是该算法能否发挥作用的关键因素,Bagging能提高不稳定学习算法的预测精度,而对稳定的学习算法效果不明显,有时甚至使预测精度降低。
如果训练数据的较小变化,就能够导致分类器的显著改变,以及分类准确率的较大变化,那么这种分类或学习算法就可以被非正式的称为“不稳定”。
例如使用“贪心算法”训练的判定树,就有可能是不稳定的—仅仅由于单个样本点的位置微小变化,都有可能导致最后的判定树完全不同,一般说来,Bagging算法能够提高“不稳定”分类器的识别率,因为它相当于对不连续处进行了平均化处理。
然而并没有理论推导或仿真实验表明它可以适用于所有的“不稳定”分类器。
【算法框架】
fort=1,2,…,T
1、从数据集S中取样(放回选样)训练得到模型Ht。
2、对未知样本X分类时,每个模型Ht都得出一个分类,得票最高的即为未知样本X的分类。
3、也可通过得票的平均值用于连续值的预测
forend
【仿真实验】
采用diabetes数据集,分量分类器的构造分别采用决策树和KNN(K=10),进行10次实验,比较分类结果如下表所示:
实验次数
Bagging-决策树
Bagging-KNN
1
0.242188
0.305360
2
0.279274
0.286970
3
0.262188
0.282622
4
0.269579
0.347838
5
0.247840
0.334795
6
0.226101
0.308708
7
0.226101
0.300013
8
0.252188
0.343490
9
0.230449
0.260883
10
0.248840
0.311751
average
0.248274
0.308143
【实验分析】
由上表可知,采用不同的分量分类器构造算法将得到不同的分类性能且可能差异较大,在本实验中,采用决策树比KNN性能更优,这可能与KNN算法本身有关,因为KNN对K值的选取比较敏感。
人工智能实验
(二)Adaboost算法
【实验目的】
熟悉Adaboost算法原理、框架及应用场景,并在Matlab中采用Adaboost算法对数据集进行进行分类,分析算法特性。
【算法思想】
针对同一个训练集合训练出不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个性能更加强大的分类器(强分类器)。
强分类器对数据进行分类,是通过弱分类器采用加权投票机制进行的。
【算法分析】
每个样本都赋予一个权重,进行T次迭代。
每次迭代后,对分类错误的样本加大权重,使得下一次的迭代更加关注这些样本,每次迭代得到一个最优弱分类器。
每次迭代改变的是样本权重的分布,而不是重复采样。
样本权重分布的改变取决于样本是否被正确分类,总是分类正确的样本权值低,分类错误的样本权值高。
最终的结果是若分类器的加权组合,权值表示该弱分类器的性能。
【算法框架】
假设样本数m,特征维数n,S表示样本,A表示特征,D表示样本权重,Y表示类标,总体矩阵信息如下所示:
A1
A2
...
An
Dt(i)
Y{+1,-1}
S1
S2
...
Sm
给定样本
,其中
,
,
初始化样本权重
,其中
表示第t次训练中第i个样本的权重,
算法框架如下:
Fort=1...T进行T次训练,每次训练产生一个最优弱分类器
将弱学习算法在当前的权重分布
进行训练,得到弱分类器
:
计算该弱分类器在权值
下的错误率:
计算该弱分类器的权重:
更新样本权重:
,其中
是归一化使所有样本权重之和为1的归一化因子
Forend
经过T轮训练,得到最终的分类器
【仿真实验】
为了便于画图,我们采用随机生成的数据集,具有两维特征,横坐标大于纵坐标的为正类,反之为负类。
共生成训练样本200个,测试样本200个,最大训练次数20,即最多生成20个弱分类器,弱分类器的构造采用阈值分类算法。
对1-20次训练分别计算训练集错误率和测试集错误率,从中简要的分析Adaboost算法的特性。
仿真结果如下图所示:
图2-1
【实验分析】
通过多组实验,我们得出Adaboost的两个特性:
1、训练错误率的上界随着训练次数的增加(弱分类器的增多),会逐渐下降。
关于这个结论,我们在文献中有找到数学上的证明。
2、即使训练次数很多,也不会出现过拟合的问题:
通常说,过拟合是指随着模型训练误差的下降,实际上,模型的泛化误差(测试误差)在上升。
在上述实验中,可以观察到Adaboost算法并没有出现这样的情况,即当训练误差小到一定程度后,继续训练,泛化误差仍然不会增加。
【比较分析】
与Bagging算法进行比较,它们之间思想基本相同,它们都主持一个观点:
任一个弱学习算法可以通过加强提升到一个任意正确率的强学习算法,并通过构造一种多项式级的算法来实现这一加强的过程,它们的主要区别在于:
Bagging是随机选择、重复采样,各轮的训练集相互独立,每个个体分类器所采用的训练样本都是从训练集中按等概率抽取的,因此Bagging的各子网能够很好的覆盖训练样本空间,从而有着良好的稳定性;而Adaboost各轮的训练集不独立,它的选择与上一轮的结果有关,它在每次弱学习之后调整样本空间分布,更新所有训练样本的权重,把样本空间中被正确分类的样本的权重降低,被错误分类的样本权重提高,这样下一次弱学习算法更能关注这些被错误分类的样本。
由于该算法可能会将噪声样本或分类边界样本的权重过分累积,因此很不稳定,但其在通常情况下,其泛化能力是最理想的集成算法之一。
【总结】
Adaboost算法是机器学习中一种比较重要的特征分类算法,已被广泛应用人脸表情识别、图像检索等应用中,也已有人将它运用在交通管理信息系统中。
就目前而言,对Adaboost算法的研究以及应用大多集中于分类问题,在一些回归问题上也有所应用。
Adaboost主要解决的问题有:
两类问题、多类单标签问题、多类多标签问题、回归问题。
人工智能实验(三)RandomForest算法
【实验目的】
熟悉RandomForest算法原理、框架及应用。
通过weka工具包的仿真并与bagging方法和决策树J48的结果进行比较,分析RandomForest的性能。
【算法思想】
RandomForest(RF)是利用bootsrap重抽样方法从原始样本中抽取多个样本,对每个bootsrap样本进行决策树建模,然后组合多棵决策树的预测,通过投票得出最终预测结果。
RF通过构造不同的训练集增加分类模型间的差异,从而提高组合分类模型的外推预测能力。
【算法性能】
大量的理论和实证研究都证明了RF具有很高的预测准确率,对异常值和噪声具有很好的容忍度,且不容易出现过拟合。
可以说,RF是一种自然的非线性建模工具,是目前数据挖掘、生物信息学的最热门的前沿研究领域之一。
【算法步骤】
RFC的基本步骤:
1、利用bootstrap抽样从原始训练集抽取
个样本,且每个样本的样本容量都与原始训练集一样;
2、对
个样本分别进行训练,建立
个决策树模型
建立如下的多分类模型系统
其中,
表示组合分类模型,
是单个决策树分类模型,
表示输出变量
为示性函数。
最后,该系统的最终分类结果采用简单多数投票法。
【实验结果】
用weka工具进行分析,选择工具包自带的segment-challenge.arff数据集(1500条数据,20个特征变量,7分类问题)。
通过与begging方法和决策树J48进行比较分析。
在仿真过程中选择数据集中的66%作为训练集,即其中的510个数据作为测试集。
(1)bagging分类的结果
图3-1
(2)决策树J48的分类结果
图3-2
(3)RandomForests的分类结果
A.5棵树的情况
图3-3
B.10棵树的情况
图3-4
C.20棵树的情况
图3-5
【结果分析】
结果对照表:
分类器
Bagging
J48
RandomForests(5)
RandomForests(10)
RandomForests(20)
误分率
3.33%
4.90%
2.55%
1.57%
1.57%
运行时间(s)
0.40
0.13
0.22
0.42
0.8
1.由分类的结果得知,在对本数据segment-challenge.arff数据集进行分类时,RandomForests算法得到的组合模型的预测误差要小于Bagging模型和决策树J48模型。
由于结果是在测试集上产生,说明的RandomForests在泛化能力上具有更好的特性。
2.当RandomForests树的数量由5增加到10时,误差率有一定的减小,但同时运行时间也相应的增加,且当继续增加到20棵树的过程中误差率没有减小,而运行时间也成倍的增加,所以选择适当的树的数量对分类的效果较为重要。