机器学习算法面试—口述(2):Adaboost算法及常见问题
2015-08-24 17:19
435 查看
这个系列是为了应对找工作面试时面试官问的算法问题,所以只是也谢算法的简要介绍,后期会陆续补充关于此算法的常见面试的问题!
AdaBoost是一种迭代算法,针对同一训练集训练处不同的分类器(弱分类器),将前面训练的分类器以某种方式组合起来,组合成一个强分类器。算法是通过改变数据的分布来实现的。每次训练分类器是参考
1、某样本在上个分类器的分类过程中是否被正确分类
2、上个分类器的准确率
AdaBoost是Adaptive Boosting的缩写,Adaptive在于:前一个分类器分错的样本会得到增强,加强后的全体样本会用于下一次分类器的训练,每一轮加入一个新的弱分类器,知道达到某个预定的足够小的的错误率或达到预定的最大迭代次数。
具体点说,AdaBoost的步骤如下:
1、初始化训练数据的权值分布。开始时,权重都赋予一样;
2、训练弱分类器。如果某个样本正确分类,那么其在下一次的分类过程中的权值会被降低,反之则会升高
3、组合成强分类器。增大分类效果好的分类器占的权重,降低分类效果差的分类器占的权重。
(当然,上面的都是一些文字性的东西,比较抽象,比如增大权重到底是怎么做的,这就需要记忆一些公式了)
详细步骤:
1、训练集:(x1, y1), (x2, y2),......, (xn, yn);刚开始每个样本都赋予一个等值的权重1/n;
2、使用一些特征,得到一个基本分类器,计算其分类的错误率:e = 错误分类 / 样本数,根据得到的错误率可以计算这个分类器在最终的分类中占的权重:a = 1/2 * ln((1-e) / e);
3、更新数据的权值分布(刚开始时都为1 / n);
由(2)知e < 0.5,则a > 0,如果错误分类指数a次方大于1,则下次训练时样本的权重会增大,正确分类样本的权值下次会变小。
之后再组合得到的各个弱分类器
从这个式子也可以看出前面(3)中说的增大分类效果好的分类器占的权重,降低分类效果差的分类器占的权重。错误率e越小,a越大,也即在整个分类中占的权重越大。
其实AdaBoost的主要问题在于如何得到各个弱分类器,这就需要对问题有一个充分的理解,弱分类器的获得可以是一些特征的组合得到的结果,也可以是单个特征的结果!一般开始做的时候是将一些强特征或其组合来获得分类器(比如区分人种用肤色这个强特征)。
AdaBoost是一种迭代算法,针对同一训练集训练处不同的分类器(弱分类器),将前面训练的分类器以某种方式组合起来,组合成一个强分类器。算法是通过改变数据的分布来实现的。每次训练分类器是参考
1、某样本在上个分类器的分类过程中是否被正确分类
2、上个分类器的准确率
AdaBoost是Adaptive Boosting的缩写,Adaptive在于:前一个分类器分错的样本会得到增强,加强后的全体样本会用于下一次分类器的训练,每一轮加入一个新的弱分类器,知道达到某个预定的足够小的的错误率或达到预定的最大迭代次数。
具体点说,AdaBoost的步骤如下:
1、初始化训练数据的权值分布。开始时,权重都赋予一样;
2、训练弱分类器。如果某个样本正确分类,那么其在下一次的分类过程中的权值会被降低,反之则会升高
3、组合成强分类器。增大分类效果好的分类器占的权重,降低分类效果差的分类器占的权重。
(当然,上面的都是一些文字性的东西,比较抽象,比如增大权重到底是怎么做的,这就需要记忆一些公式了)
详细步骤:
1、训练集:(x1, y1), (x2, y2),......, (xn, yn);刚开始每个样本都赋予一个等值的权重1/n;
2、使用一些特征,得到一个基本分类器,计算其分类的错误率:e = 错误分类 / 样本数,根据得到的错误率可以计算这个分类器在最终的分类中占的权重:a = 1/2 * ln((1-e) / e);
3、更新数据的权值分布(刚开始时都为1 / n);
由(2)知e < 0.5,则a > 0,如果错误分类指数a次方大于1,则下次训练时样本的权重会增大,正确分类样本的权值下次会变小。
之后再组合得到的各个弱分类器
从这个式子也可以看出前面(3)中说的增大分类效果好的分类器占的权重,降低分类效果差的分类器占的权重。错误率e越小,a越大,也即在整个分类中占的权重越大。
其实AdaBoost的主要问题在于如何得到各个弱分类器,这就需要对问题有一个充分的理解,弱分类器的获得可以是一些特征的组合得到的结果,也可以是单个特征的结果!一般开始做的时候是将一些强特征或其组合来获得分类器(比如区分人种用肤色这个强特征)。
相关文章推荐
- 程序员的年龄天花板
- 黑马程序员_java基础知识点
- 黑马程序员_流程控制语句之循环语句
- 关于数组的几道面试题
- 程序员的三年创业之路
- 程序员未来发展三大方向
- 剑指offer面试题24-二叉搜索树的后序遍历序列
- 20年资深程序员编程经验分享
- 面试中经常让写的关于链表的代码
- 二叉树中的那些常见的面试题
- 黑马程序员_面向对象之封装
- 黑马程序员——线程Thread二(线程安全)
- 黑马程序员_面向对象之构造方法
- 黑马程序员——java基础—反射
- 机器学习算法面试—口述(1):SVM介绍及常见问题
- 剑指offer面试题23-从上往下打印二叉树
- 黑马程序员_面向对象之继承
- 剑指offer面试题21-包含min函数的栈
- 【面试题之算法部分】LCA最近公共祖先
- 黑马程序员_面向对象之多态