分类(5):组合分类器-随机森林

原版:http://www.jianshu.com/p/379018d420c1

一、组合方法

(1)组合分类器原理:

考虑25个二元分类器,每一个分类误差a=0.35。组合分类器通过多数投票,如果基分类器是独立的,则仅当超过一半的基分类器都预测错误时,组合才会错误,则:

eensemble=i=125Ci25ai(1a)25i=0.06

可以看出,其远低于0.35。

(2)组合分类器与基分类器比较:

上图,虚线表示所有基分类器都一样,实线表示所有基分类器都独立。可以看出,当基分类器的错误率大于0.5(仅这个例子吗?)时候,组合分类器的性能不比基分类器的性能好。
组合分类器的性能优于基分类器的条件:

1、基分类器应该是独立的。
2、基分类器应当好于随机猜想。

(3)袋装(bagging)-自助法(bootstrap aggregating)
袋装-自助法(bootstrap):

训练集是对于原数据集的有放回抽样,如果原始数据集N,可以证明,大小为N的自助样本大约包含原数据63.2%的记录。当N充分大的时候,1-(1-1/N)^(N) 概率逼近 1-e^(-1)=0.632。抽样 b 次,产生 b 个bootstrap样本,则,总准确率为(accs为包含所有样本计算的准确率):

accboot=1bi=1b(0.632×εi+0.368×accs)

袋装算法:
设 k 为自助样本的数目
for i = 1 to k do
  生成一个大小为 N 的自助样本 Dt
  在自助样本 Dt 上训练一个基分类器 Ci
C*=argmax(Ci...)
袋装举例理解:

下面的这个数据集,使用决策树,熵值来分裂,可以得到分裂点为:x<=0.35 或 x<=0.75,但是无论是哪个分类点,准确率都最多为70%。

使用袋装抽样:

使用简单的求和,取符号,可以发现,分类正确率为100%:

袋装评价:

1、通过降低基分类器的方差改善了泛化误差
2、袋装的性能依赖于基分类器的稳定性。如果基分类器是不稳定的,袋装有助于降低训练数据的随机波动导致的误差;如果基分类器是稳定的,则组合分类器的误差主要由基分类器的偏倚引起,则这种情况下,袋装可能会降低分类器的性能。
3、袋装中的数据是均概率被选中,所以对特定数据不敏感,对于噪音,不太受过拟合影响。

(4)提升(Boosting)

提升是一个迭代过程,自适应的改变样本的分布,使得基分类器聚焦在那些很难分类的样本上,提升每次给一个训练样本一个权值,在每一轮结束的时候自动地调整权值。

现在又很多提升算法,算法的差别在于:

(1)每轮提升结束时如何更新训练样本权值
(2)如何组合每个分类器的预测

AdaBoost

在该算法中,基分类器 Ci 的重要性依赖于它的错误率,错误率的定义:

errori=1Nj=1NwjI(Ci(xjyj))

对于I,为指示变量,错误个数的加权取平均,基分类器的重要度 α 为:
αi=12ln(1errorierrori)

作出重要度 α 关于 error 的图:

发现错误率接近 0 时候,重要度很大,接近 1 时候,重要度负向很大。
Adaboost 的权值更新有以下给出,第 j 次迭代:

Zj 是一个正规因子,用于确保:

iwj+1i=1

AdaBoost算法:

AdaBoost例子:

1、该组合分类器的训练误差呈指数递减,从而算法很快就会收敛。
2、但是它倾向于那些被误分类的样本,所以提升技术很容易受到过拟合的影响。

二、随机森林(Random Forest)

随机森林的过程图:

已经从理论上证明了,当树的数目足够大的时候,随机森林的泛化误差的上界收敛于下面表达式:

随机森林性质

每棵决策树都使用一个从固定概率分布产生的随机向量。可以使用多种方法将随机向量合并到树中。

不同的随机森立方法:

1、Forest-RI。随机选择 F 个输入特征来对决策树的结点进行分裂,树之后完全增长不进行任何修剪,这有助于减少树的偏倚。之后用多数投票表决来组合预测。为了增加随机性,可以使用自助样本。
2、Forest-RC。d 的数目太小的情况,需要增大特征空间,创建输入特征的线性组合。输入特征用区间[-1,1]的均匀分布产生的系数进行线性组合。
3、对于每个结点,从 F 个最佳划分中随机选择一个,该方法也是比上面两个更花费时间。
4、随机森林的分裂准确率与Adaboost相媲美,但它对噪声更加鲁棒,运行速度也比Adaboost快得多。

随机森林的一些参数选择

通常选取特征数目为:

F=logd2+1

d 为输入特征数。

你可能感兴趣的:(机器学习)