如何将少数弱学习者组合为强分类器?我知道公式,但是问题在于,在我阅读的有关AdaBoost的每篇论文中,都只有公式,而没有任何示例。我的意思是-我的学习者及其体重较弱,所以我可以按照公式告诉我的做(将学习者乘以其体重,再将另一个乘以其体重再乘以另一个,等等),但是我该怎么做呢?我的弱者是决策树桩。他们拥有属性和阈值,那么我要乘以多少?

最佳答案

如果我正确理解了您的问题,则在这些讲义中,您对如何增强将弱分类器编码为具有大量图像的强分类器有了很好的解释:

www.csc.kth.se/utbildning/kth/kurser/DD2427/bik12/DownloadMaterial/Lectures/Lecture8.pdf

基本上,您是通过对分离的超平面进行加权组合来创建更复杂的决策面(在讲义中显示的大图)

希望这可以帮助。

编辑

实际上要执行此操作:

在第42页中,您会看到alpha_t = 1/2*ln((1-e_t)/e_t)的公式,可以轻松地在for循环中计算得出这些公式,或者如果您通过矢量运算直接使用某些数字库(我使用的是numpy确实很棒)。 alpha_t是在adaboost内部计算的,因此我假设您已经拥有这些。

您在第38页上有数学公式,大西格玛表示总和。h_t是弱分类器函数,它返回-1(否)或1(是)。alpha_t基本上是弱分类器的性能如何,因此在强分类器的最终决定(不是很民主)中必须说多少。

我从来没有真正使用过forloops,但是我会更容易理解和更独立于语言(这是pythonish伪代码):

strongclassifier(x):
    response=0
    for t in T: #over all weakclassifiers indices
        response += alpha[t]*h[t](x)
    return sign(response)

在数学上,这被称为权重与弱响应之间的点积(基本上是:strong(x)= alpha * weak(x))。



EDIT2

这是在strongclassifier(x)内部发生的事情:
分离超平面基本上是由函数weak(x)决定的,因此所有具有weak(x)= 1的x都在超平面的一侧,而weak(x)=-1则在超平面的另一侧。如果考虑在平面上有线,则有一个平面将平面分为两部分(始终),一侧是(-),另一侧是(+)。如果现在有3条三角形的无限线且其负边朝外,则三角形内部为3(+),外部为1或2(-)(在强分类器中)变成一个三角形区域,该区域为正,其余为负。这是一个过分的简化,但要点仍然存在,并且在更高的维度上完全类似。

关于machine-learning - 将弱者整合成一个强大的分类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12150810/

10-12 18:04
查看更多