Machine learning 将弱学习者组合成强分类器

Machine learning 将弱学习者组合成强分类器,machine-learning,artificial-intelligence,decision-tree,classification,adaboost,Machine Learning,Artificial Intelligence,Decision Tree,Classification,Adaboost,如何将少数弱学习者组合成强分类器?我知道这个公式,但问题是,在我读到的每一篇关于AdaBoost的文章中,只有没有任何例子的公式。我的意思是——我有一些弱学习者和他们的体重,所以我可以按照公式告诉我的去做(将学习者的体重乘以它的体重,再加上另一个乘以它的体重,再加上另一个等等),但我到底怎么做呢?我的弱学习者是决策障碍。它们有属性和treshold,那么我应该乘什么呢?在vanilla Ada Boost中,学习者不能乘任何权重。相反,您会增加错误分类数据的权重。假设你有一个数组,比如[1..1

如何将少数弱学习者组合成强分类器?我知道这个公式,但问题是,在我读到的每一篇关于AdaBoost的文章中,只有没有任何例子的公式。我的意思是——我有一些弱学习者和他们的体重,所以我可以按照公式告诉我的去做(将学习者的体重乘以它的体重,再加上另一个乘以它的体重,再加上另一个等等),但我到底怎么做呢?我的弱学习者是决策障碍。它们有属性和treshold,那么我应该乘什么呢?

在vanilla Ada Boost中,学习者不能乘任何权重。相反,您会增加错误分类数据的权重。假设你有一个数组,比如[1..1000],你想用神经网络来估计哪些数字是素数。(愚蠢的例子,但足以证明)

想象一下你有一门神经网络课。实例化第一个,n1=NeuralNet.new。然后你有了训练集,也就是说,从1到1000的另一个素数数组。(您需要为一个数字组成一些功能集,例如数字)。然后训练n1识别训练集中的素数。让我们假设n1是弱的,所以在训练期结束后,它将无法正确地将所有数字1..1000分为素数和非素数。假设n1错误地说27是素数,113是非素数,并且犯了一些其他错误。你是做什么的?实例化另一个NeuralNet n2,并将27、113和其他错误数字的权重从1增加到1.5,将正确分类的数字的权重从1减少到0.667。然后你训练n2。经过训练,你会发现n2纠正了n1的大部分错误,包括27号错误,但113号错误仍然存在。因此,实例化n3,将权重113增加到2,将权重27和其他现在正确分类的数字的权重减少到1,并将旧的正确分类数字的权重减少到0.5。等等


我说得够具体了吗?

如果我正确理解了你的问题,你就可以很好地解释boosting是如何用这些课堂讲稿中的大量图像将弱分类器归纳为强分类器的:

基本上,你是通过采用分离超平面的加权组合来创建一个更复杂的决策面(在课堂讲稿中展示了这一点的很棒的图)

希望这有帮助

编辑

要切实做到这一点:

在第42页,你可以看到αt=1/2*ln((1-e_t)/e_t)的公式,它可以很容易地在for循环中计算,或者如果你使用一些数字库(我使用的是numpy,它非常棒),直接通过向量运算。alpha\u t的
是在adaboost内部计算的,所以我假设您已经有了这些

你在第38页有数学公式,大西格玛代表总和。
h_t
是弱分类器函数,它返回-1(否)或1(是)。
alpha_t
基本上是弱分类器有多好,因此它在强分类器的最终决策中要说多少(不是很民主)

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

这在数学上称为权重和弱响应之间的点积(基本上:强(x)=α*弱(x))

EDIT2

这就是strongclassifier(x)中发生的情况:
分离超平面基本上是由函数弱(x)决定的,因此所有弱(x)=1的x都位于超平面的一侧,而弱(x)=-1位于超平面的另一侧。如果你认为它在一个平面上有直线,你就有一个平面将平面分成两部分(总是),一边是(-),另一边是(+)。如果现在有3条三角形形状的无限直线,其负边朝外,则三角形内部有3(+),外部有1或2(-),这将导致(在强分类器中)三角形区域为正,其余为负。这是一个过度的简化,但重点仍然存在,在更高的维度上,它的工作方式完全类似

这不是我想要的答案。你告诉了我一些我已经知道的事情。也许我应该告诉你我的应用程序是什么样子的:我的输入数据是一个大象的数组列表。每头大象都有大小、重量和类型(可以是亚洲或非洲)。我的弱分类器根据大象的大小或重量来分类它是亚洲人还是非洲人。我按大象的重量或大小对数据进行排序,并创建所有可能的分类器(在决策树桩的情况下,这些分类器是在每个数据点之间带有treshold的分类器)。(下一篇评论中有更多…)然后我选择了最好的一个(错误率最低)。我使用一个分类器对数据进行分类,并更新样本的权重(增加误分类样本的权重,减少正确分类样本的权重)。然后,我选择样本权重最大的样本(错误分类的样本),并匹配一个分类器,该分类器将正确分类。“等等…”但我仍然不知道我的最终结果是什么,我如何“提取”它?例如,通过多数投票。这个想法是,在迭代之间,你不会改变那么多权重,你会做很多迭代,你会在过度训练之前停止,也就是说,不要试图在最后1%中分类。然后让他们投票决定每个元素的分类。当有很多不一致时,你甚至可以引入模糊函数,这表明你的系统对每头大象的分类是多么有信心。我感谢你的帮助,但还有一些事情我不知道。我认为你正确地理解了我的问题,这些课堂讲稿非常好,但我仍然不知道如何实施它。假设我在ArrayList(JAVA)中有我的输入数据,我训练了一些classifi
strongclassifier(x):
    response=0
    for t in T: #over all weakclassifiers indices
        response += alpha[t]*h[t](x)
    return sign(response)