怎么用adaboost选取样本的基本方法有哪些训练集中的负样本

在检测的问题中我理解着就不昰那么简单了,因为检测问题需要做的事情是指出哪里有什么也就是既要给出框,又要说明框中是什么在这种情况下,我们所具备的數据就是一些人工标注的图片这些图片上有框,并且会给出框中的物体类别我们需要运用这些数据生成训练中的正负样本数据,参考叻faster以及SSD两种检测框架中对于正负样本的选取样本的基本方法有哪些准则我的理解如下:

首先,检测问题中的正负样本并非人工标注的那些框框而是程序中(网络)生成出来的框框,也就是faster rcnn中的anchor boxes以及SSD中在不同分辨率的feature map中的默认框这些框中的一部分被选为正样本,一部分被选为负样本另外一部分被当作背景或者不参与运算。不同的框架有不同的策略大致都是根据IOU的值,选取样本的基本方法有哪些个阈徝范围进行判定在训练的过程中还需要注意均衡正负样本之间的比例。

我理解着在fast的框架中,也是需要多SS算法生成的框框与GT框进行IOU的判断进而选取样本的基本方法有哪些正负样本,总之正负样本都是针对于程序生成的框框而言,而非GT数据

说到Adaboost公式与代码网上到处都有,《统计学习方法》里面有详细的公式原理Github上面有很多实例,那么为什么还要写这篇文章呢希望从一种更容易理解的角度,来为大家呈现Adaboost算法的很多关键的细节

本文中暂时没有讨论其数学公式,一些基本公式可以参考《统计学习方法》

Adaboost算法基本原理就是将多个弱分類器(弱分类器一般选用单层决策树)进行合理的结合,使其成为一个强分类器

Adaboost采用迭代的思想,每次迭代只训练一个弱分类器训练恏的弱分类器将参与下一次迭代的使用。也就是说在第N次迭代中,一共就有N个弱分类器其中N-1个是以前训练好的,其各种参数都不再改變本次训练第N个分类器。其中弱分类器的关系是第N个弱分类器更可能分对前N-1个弱分类器没分对的数据最终分类输出要看这N个分类器的綜合效果。


Adaboost一般使用单层决策树作为其弱分类器单层决策树是决策树的最简化版本,只有一个决策点也就是说,如果训练数据有多维特征单层决策树也只能选择其中一维特征来做决策,并且还有一个关键点决策的阈值也需要考虑。

关于单层决策树的决策点来看几個例子。比如特征只有一个维度时可以以小于7的分为一类,标记为+1大于(等于)7的分为另一类,标记为-1当然也可以以13作为决策点,決策方向是大于13的分为+1类小于(等于)13的分为-1类。在单层决策树中一共只有一个决策点,所以下图的两个决策点不能同时选取样本的基本方法有哪些

同样的道理,当特征有两个维度时可以以纵坐标7作为决策点,决策方向是小于7分为+1类大于(等于)7分类-1类。当然还鈳以以横坐标13作为决策点决策方向是大于13的分为+1类,小于13的分为-1类在单层决策树中,一共只有一个决策点所以下图的两个决策点不能同时选取样本的基本方法有哪些。

扩展到三维、四维、N维都是一样在单层决策树中,一共只有一个决策点所以只能在其中一个维度Φ选择一个合适的决策阈值作为决策点。


Adaboost算法中有两种权重一种是数据的权重,另一种是弱分类器的权重其中,数据的权重主要用于弱分类器寻找其分类误差最小的决策点找到之后用这个最小误差计算出该弱分类器的权重(发言权),分类器权重越大说明该弱分类器茬最终决策时拥有更大的发言权

Adaboost数据权重与弱分类器

刚刚已经介绍了单层决策树的原理,这里有一个问题如果训练数据保持不变,那麼在数据的某个特定维度上单层决策树找到的最佳决策点每一次必然都是一样的为什么呢?因为单层决策树是把所有可能的决策点都找叻一遍然后选择了最好的如果训练数据不变,那么每次找到的最好的点当然都是同一个点了

所以,这里Adaboost数据权重就派上用场了所谓“数据的权重主要用于弱分类器寻找其分类误差最小的点”,其实在单层决策树计算误差时,Adaboost要求其乘上权重即计算带权重的误差。

舉个例子在以前没有权重时(其实是平局权重时),一共10个点时对应每个点的权重都是0.1,分错1个错误率就加0.1;分错3个,错误率就是0.3现在,每个点的权重不一样了还是10个点,权重依次是[0.01,0.01,0.01,0.01,0.01,0.01, 0.01,0.01,0.01,0.91]如果分错了第1一个点,那么错误率是0.01如果分错了第3个点,那么错误率是0.01要昰分错了最后一个点,那么错误率就是0.91这样,在选择决策点的时候自然是要尽量把权重大的点(本例中是最后一个点)分对才能降低误差率由此可见,权重分布影响着单层决策树决策点的选择权重大的点得到更多的关注,权重小的点得到更少的关注

在Adaboost算法中,每训練完一个弱分类器都就会调整权重上一轮训练中被误分类的点的权重会增加,在本轮训练中由于权重影响,本轮的弱分类器将更有可能把上一轮的误分类点分对如果还是没有分对,那么分错的点的权重将继续增加下一个弱分类器将更加关注这个点,尽量将其分对

這样,达到“你分不对的我来分”下一个分类器主要关注上一个分类器没分对的点,每个分类器都各有侧重

由于Adaboost中若干个分类器的关系是第N个分类器更可能分对第N-1个分类器没分对的数据,而不能保证以前分对的数据也能同时分对所以在Adaboost中,每个弱分类器都有各自最关紸的点每个弱分类器都只关注整个数据集的中一部分数据,所以它们必然是共同组合在一起才能发挥出作用所以最终投票表决时,需偠根据弱分类器的权重来进行加权投票权重大小是根据弱分类器的分类错误率计算得出的,总的规律就是弱分类器错误率越低其权重僦越高。


如图所示为Adaboost分类器的整体结构从右到左,可见最终的求和与符号函数再看到左边求和之前,图中的虚线表示不同轮次的迭代效果第1次迭代时,只有第1行的结构第2次迭代时,包括第1行与第2行的结构每次迭代增加一行结构,图下方的“云”表示不断迭代结构嘚省略

第i轮迭代要做这么几件事:

  1. 通过数据集data与数据权重W(i)训练弱分类器WeakClassifier(i),并得出其分类错误率以此计算出其弱分类器权重alpha(i)
  2. 通过加权投票表决的方法,让所有弱分类器进行加权投票表决的方法得到最终预测输出计算最终分类错误率,如果最终错误率低于设定阈值(比如5%)那么迭代结束;如果最终错误率高于设定阈值,那么更新数据权重得到W(i+1)

关于最终的加权投票表决举几个例子:
比如在一维特征时,經过3次迭代并且知道每次迭代后的弱分类器的决策点与发言权,看看如何实现加权投票表决的

如图所示,3次迭代后得到了3个决策点
朂左边的决策点是小于(等于)7的分为+1类,大于7的分为-1类且分类器的权重为0.5;
中间的决策点是大于(等于)13的分为+1类,小于13分为-1类权偅0.3;
最右边的决策点是小于(等于19)的分为+1类,大于19分为-1类权重0.4。
对于最左边的弱分类器它的投票表示,小于(等于)7的区域得0.5大與7得-0.5,同理对于中间的分类器它的投票表示大于(等于)13的为0.3,小于13分为-0.3最右边的投票结果为小于(等于19)的为0.4,大于19分为-0.4如下图:

最后进行符号函数转化即可得到最终分类结果:

更加直观的,来看一个更复杂的例子对于二维也是一样,刚好有一个实例可以分析一丅原始数据分布如下图:

Adaboost分类器试图把两类数据分开,运行一下程序显示出决策点,如下图:

这样一看似乎是分开了,不过具体参數是怎样呢查看程序的输出,可以得到如其决策点与弱分类器权重在图中标记出来如下:

通过这两个例子,相信你已经明白了Adaboost算法加權投票时怎么回事儿了

说了这么多,也举了这么多例子就是为了让你从细节上明白Adaboost的基本原理,博主认为理解Adaboost的两种权重的关系是理解Adaboost算法的关键所在

所有代码可以在Github上找到:

我要回帖

更多关于 选取样本的基本方法有哪些 的文章

 

随机推荐