Adaboost新理解

Adaboost有几个难点:

1、弱分类器的权重怎么理解?

  误差大的弱分类器权重小,误差小的弱分类器权重大。这很好理解。在台湾大学林轩田老师的视频中,推导说,这个权值实际上貌似梯度下降,权值定义成1/2ln((1-ε)/ε),实际上是有梯度下降,求梯度取最陡得到。

2、弱分类器怎么通常选啥

  可以选树(不选全树)

3、有了第一个弱分类器模型后,怎么导出其他的弱分类器,怎么理解正确分类的权值变小,错误分类的权值变大?

  形象上讲,忽略正确分类的,重视错误分类的。

  从数学上讲,我们希望各个分类器越不相同越好。弱分类器越不相同(正交就更好,记得垂直和水平切分两类点不?),我们求得的期望错误率会越小。这样,如果我将正确分类的少点重视,错误分类的多点重视,这会导致弱分类器不同程度加大。实际上,这会导致弱分类器会越来越强。(我从例子上看到,因为权值越来越多了)

  补充地是,希望弱分类器不相同,可以从几个方面入手:

  (1)模型

  (2)数据

  (3)参数

  (4)算法(如初始化不同)

4、既然能够通过这样的方式是弱分类器越来越强(感觉是这样,没验证),是否就用最后一个“弱”分类器就可以?

  no,三个凑皮匠赛过一个诸葛亮!

时间: 2024-10-12 20:18:26

Adaboost新理解的相关文章

关于erlang中的进程字典(process dictionary)的新理解及其访问速度 (copy来的)

之前对于erlang的进程字典了解的不够清楚,只是知道put().get()函数,即存值和取值,而每个put.get中都有自己的一对Key--Value(键值对)与之对应.一个Key对应一个Value.在erlang中,启动进程节点之后,进程字典的put.get的值是对缓存的处理,而对数据库的操作,相当于是对硬盘的一个操作,可以理解成是一个数据的备份. 举个简单的例子:在游戏中都有好友操作,启动服务之后,玩家点击添加好友操作,进程的节点已经开启,先从内存中获取玩家的进程字典的Value的值,这里

数据库水平分库,垂直分库的新理解

水平分库:当数据量巨大时,将数据放到不同的表中,比如表1,表2,表3,...: 垂直分库:当一张表的字段太多,可拆分出一张或多张分表,根据主键唯一标示: 新理解: 垂直分库:当一张表中字段不多,当某些字段长度过长,表占用空间很大,检索表的时候需要执行大量的IO(数据库检索的本质是对硬盘中的文件进行io访问), 此时可以考虑对长度较长的字段进行拆分,单独成表,用原表主键进行唯一标示. 相反: 当数据库记录数不多,但字段较多,可对部分字段进行整合,比如用户的信息(电话,手机号...),以json字符

接口测试的新理解

最近一直关注接口测试的方方面面. 慢慢的对接口测试的一些更细节的方面有着一些理解. 简单的说,接口测试的过程中需要关注的一些是: 1. 接口的有效性. 2. 接口数据的冗余性. 先说有效性: 有效性的意思在于接口数据的重用,因为在测试的过程中遇到了一种情况,大概的情况是: App上有一个页面,做成了两个Activity,在app上展示为一个页面,上方是个人信息的图片,头像和评论数等一系列的信息.下方是详细信息的一些内容. 不可以理解的是前端做成了两个Activity,A和B ,两个Xml布局,

auc ks 新理解

转https://www.zybuluo.com/frank-shaw/note/152851 新理解:我认为auc,和ks异曲同工.auc是根据预测概率(由大到小排序)作为阈值,可分割为不多于样本个数n个阈值.即可得到n个recall和precision把这些点连成线即为roc曲线.auc即为roc下的面积.那个点最接近左上角即为最好的阈值.1和0作阈值分别得到(0,0)和(1,1)点.样本点只是曲线上的点,理论上无穷大,不可能描绘完.横:假阳率,纵:recall.n个点为相应阈值分割得到的r

JavaScript——对this指针的新理解

一直以来对this的理解只在可以用,会用,却没有去深究其本质. 这次,借着<JavaScript The Good Parts>,作了一次深刻的理解. 下面我们一起来看看这个this吧. 在我们声明一个函数时,每个函数除了有定义时的parameters(形参),自身还会有额外的两个参数,一个是this,一个是arguments(实参).arguments就是函数实际接受到的参数,是一个类数组.arguments我只做个简略的介绍,重点我们放在this指针上. 在面向对象变成中,this十分重要

对Delphi控件作用的新理解

最近几天,对Delphi控件的含义有了一个新的理解.其实它不仅仅是给程序员提供功能的一个表层调用,控件本身的源代码就是一个很强的工业级源码.而且它的Main例子,往往就已经是半成品.而别的语言里没有那么多控件——换句话说,就是没有那么多工业级项目的源代码(往往都是通用工具类型)供你使用和学习(两层意思).这是我们Delphier独一无二的优势.不得不说,当年设计Delphi的两位老兄Anders Hejlsberg和Chuck Jazdzewski真是双剑合璧,无敌于天下——当然,只是产品无敌于

关于js参数传递矛盾新理解

之前看了很多人的解释,说js中,函数的参数传递都是值传递中不理解. 他们无非举了两个例子 在这两个例子中,第二个例子可以看出参数是由值传递的.因为函数内对象的变化没有影响到函数外对象的变化.但是在第一个例子中,我们却发现,函数内和函数外都指向了一个地址.但是博主并没有说明 既然是值传递,为什么参数里面的改变却影响了外面的值.博主只解释了第二个例子是值传递,却没有解释第一个例子为什么会出现这样的原因,只是一句两个变量指向一个对象 就一笔带过,我觉得这个并没有解决大多数人的理解.所以我觉查看了js高

java-重新理解:“instance = new Singleton();”

在Java指令中创建对象和赋值操作是分开进行的,也就是说instance = new Singleton(); 语句是分两步执行的.但是JVM并不保证这两个操作的先后顺序,也就是说有可能JVM会为 新的Singleton实例分配空间,然后直接赋值给instance成员,然后再去初始化这个Singleton实例. 这在单态设计模式的多线程中,会经常出错. 当一个A线程,执行完该语句但没有初始化这个实例,而B线程调用了该实例,则会报错. 单例模式使用内部类来维护单例的实现,JVM内部的机制能够保证当

新理解 range

aliens=[] for alien_number in range(30): new_alien={'color':'green','point':5,'speed':'slow'} aliens.append(new_alien) 创建一个列表,用range循环30次,将新的字典添加进空列表中,range原来可以或者说应该这么用