简介:

上次咱们介绍过Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),而后把这些弱分类器集合起来,形成一个更强的最终分类器(强分类器)。

本次将通过一个简略示例,手撕拆解Adaboost的计算过程。本次是手撕模型系列第一篇,各位看官若有想理解的算法模型,欢送留言,后续会依据集体能力安顿!

一. 初始化阶段

给定下列的训练样本,应用AdaBoost算法学习失去一个强分类器。

序号

0

1

2

3

4

5

6

7

8

9

X

0

1

2

3

4

5

6

7

8

9

Y

1

1

1

-1

-1

-1

1

1

1

-1

初始化训练数据的权值散布,令每个权值W1i = 1/N = 0.1,其中,N = 10,i = 1,2, ..., 10,而后别离对于m = 1,2,3, ...等值进行迭代。

随机设定这10个数据的训练样本后,依据X和Y的对应关系,要把这10个数据分为两类,一类是“Y=1”,一类是“Y=-1”,依据数据的特点发现:“0 1 2”这3个数据对应的类是“1”,“3 4 5”这3个数据对应的类是“-1”,“6 7 8”这3个数据对应的类是“1”,9是比拟独立的,对应类“-1”。抛开独立的9不讲,“0 1 2”、“3 4 5”、“6 7 8”这是3类不同的数据,别离对应的类是1、-1、1,直观上揣测可知,能够找到对应的数据分界点,比方2-3之间(2.5)、5-6之间(5.5)、8-9(8.5)之间将那几类数据分成两类。上面理论计算下这个过程。

二. 迭代计算

第一次迭代m=1,在权值散布为D1(10个数据,每个数据的权值皆初始化为0.1)的训练数据上。

序号

0

1

2

3

4

5

6

7

8

9

X

0

1

2

3

4

5

6

7

8

9

Y

1

1

1

-1

-1

-1

1

1

1

-1

D1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

通过计算下面样本可得:

a.阈值v取2.5时误差率为0.3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.3);

b.阈值v取5.5时误差率最低为0.4(x < 5.5时取1,x > 5.5时取-1,则3 4 5 6 7 8皆分错,误差率0.6大于0.5,不可取。故令x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.4);

c.阈值v取8.5时误差率为0.3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.3)。

所以无论阈值v取2.5,还是8.5,总得分错3个样本,故可任取其中任意一个如2.5,设定成第一个根本分类器为:

                                          image.png

下面说阈值v取2.5时则6 7 8分错,所以误差率为0.3,更加具体的解释是:因为样本集中X={0,1,2}对应的类Y=1,因它们自身都小于2.5,所以被G1(x)分在了相应的类“1”中,分对了。X={3,4,5}自身对应的类Y=-1,因它们自身都大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。但X={6,7,8}自身对应类Y=1,却因它们自身大于2.5而被G1(x)分在了类"-1"中,所以这3个样本被分错了。X=9自身对应的类Y=-1因它自身大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。

而后依据误差率e1计算G1的系数:

image.png

依据误差e1=0.3计算系数1=0.4236。这个1代表G1(x)在最终的分类函数中所占的权重为0.4236。

接着更新训练数据的权值散布,用于下一轮迭代:

image.png

由权值更新的公式可知,每个样本的新权值是变大还是变小,取决于它是被分错还是被分正确。即如果某个样本被分错了,则yi * Gm(xi)为负,负负等正,后果使得整个式子变大(样本权值变大),否则变小。

序号

0

1

2

3

4

5

6

7

8

9

X

0

1

2

3

4

5

6

7

8

9

Y

1

1

1

-1

-1

-1

1

1

1

-1

D1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

D2

0.0715

0.0715

0.0715

0.0715

0.0715

0.0715

0.1666

0.1666

0.1666

0.0715

分类函数f1(x)= 1*G1(x) = 0.4236G1(x)。此时,失去的第一个根本分类器sign(f1(x))在训练数据集上有3个误分类点(即6 7 8)。从上述第一轮的整个迭代过程能够看出:被误分类样本的权值之和影响误差率,误差率影响根本分类器在最终分类器中所占的权重。

第二次迭代m=2,权值散布为D2

通过计算下面样本可得:

a.阈值v取2.5时误差率为0.16663(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.16663);

b.阈值v取5.5时误差率最低为0.07154(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.07153 + 0.0715);

c.阈值v取8.5时误差率为0.07153(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.07153)。

所以,阈值v取8.5时误差率最低,故第二个根本分类器为:

image.png

很显著,G2(x)把样本“3 4 5”分错了,依据D2可知它们的权值为0.0715,所以G2(x)在训练数据集上的误差率e2=P(G2(xi)≠yi)=0.0715*3=0.2143。

依据误差e2=0.2143计算系数2=0.6496。这个2代表G2(x)在最终的分类函数中所占的权重为0.6496。

更新训练数据的权值散布:

序号

0

1

2

3

4

5

6

7

8

9

X

0

1

2

3

4

5

6

7

8

9

Y

1

1

1

-1

-1

-1

1

1

1

-1

D1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

D2

0.0715

0.0715

0.0715

0.0715

0.0715

0.0715

0.1666

0.1666

0.1666

0.0715

D3

0.0455

0.0455

0.0455

0.1667

0.1667

0.1667

0.1060

0.1060

0.1060

0.0455

f2(x)=0.4236G1(x) + 0.6496G2(x)

此时,失去的第二个根本分类器sign(f2(x))在训练数据集上有3个误分类点(即3 4 5)。

第三次迭代m=3,权值散布为D3

通过计算下面样本可得:

a.阈值v取2.5时误差率为0.10603(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.10603);

b.阈值v取5.5时误差率最低为0.04554(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.04553 + 0.0715);

c.阈值v取8.5时误差率为0.16673(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.16673)。

所以,阈值v取5.5时误差率最低,故第三个根本分类器为:

image.png

此时,G3误分类的样本是:0 1 2 9,这4个样本所对应的权值皆为0.0455,所以G3(x)在训练数据集上的误差率e3= P(G3(xi)≠yi) = 0.0455*4 = 0.1820。

依据误差e2=0.1820计算系数2=0.7514。这个3代表G2(x)在最终的分类函数中所占的权重为0.7514。

序号

0

1

2

3

4

5

6

7

8

9

X

0

1

2

3

4

5

6

7

8

9

Y

1

1

1

-1

-1

-1

1

1

1

-1

D1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

0.1

D2

0.0715

0.0715

0.0715

0.0715

0.0715

0.0715

0.1666

0.1666

0.1666

0.0715

D3

0.0455

0.0455

0.0455

0.1667

0.1667

0.1667

0.1060

0.1060

0.1060

0.0455

D2

0.1250

0.1250

0.1250

0.1020

0.1020

0.1020

0.0650

0.0650

0.0650

0.1250

f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)

此时,失去的第三个根本分类器sign(f3(x))在训练数据集上有0个误分类点。至此,整个训练过程完结。

G(x)=sign[f3(x)]=sign[1G1(x)+2G2(x)+3*G3(x)],将下面计算失去的1、2、3各值代入G(x)中,失去最终的分类器为:G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]。

总结:

以上就是一个简略的计算示例,Aadboost算法具备较高的检测效率,且不容易呈现过拟合景象。然而该算法在实现过程中为获得更高的检测精度则须要较大的训练样本集,在每次迭代过程中,训练一个弱分类器则对应该样本集中的每一个样本,每个样本具备很多特色,因而从宏大的特色中训练失去最优弱分类器的计算量增大。