简介:
上次我们介绍过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 |