mirror of
https://github.com/apachecn/ailearning.git
synced 2026-05-08 14:52:28 +08:00
更新 AdaBoost 部分的注视
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
* 注意:`SVM几何含义比较直观,但其算法实现较复杂,牵扯大量数学公式的推导。`
|
||||
|
||||
```
|
||||
优点:泛化错误率低,计算开销不大,结果易理解。
|
||||
优点:泛化(由具体的、个别的扩大为一般的,就是说:模型训练完后的新样本)错误率低,计算开销不大,结果易理解。
|
||||
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适合于处理二分类问题。
|
||||
使用数据类型:数值型和标称型数据。
|
||||
```
|
||||
@@ -47,13 +47,13 @@ This is the simplest kind of SVM (Called an LSVM) Support Vectors are those data
|
||||
|
||||
1. 直觉上是安全的
|
||||
2. 如果我们在边界的位置发生了一个小错误(它在垂直方向上被颠倒),这给我们最小的错误分类机会。
|
||||
3. CV很容易,因为该模型对任何非支持向量数据点的去除是免疫的。
|
||||
3. CV(Computer Vision 计算机视觉 - 这缩写看着可怕)很容易,因为该模型对任何非支持向量数据点的去除是免疫的。
|
||||
4. 有一些理论,这是一件好事。
|
||||
5. 通常它的工作非常好。
|
||||
```
|
||||
|
||||
* 选择D会比B、C分隔的效果要好很多,原因是上述的5个结论。
|
||||
* 所有的点看作地雷吧,那么我们(超平面)得找到最近所有的地雷,并保证我们离它最远。
|
||||
* 如果把所有的点看作地雷,那么我们(超平面)得找到最近所有的地雷,并保证我们离它最远。
|
||||

|
||||
|
||||
### 怎么寻找最大间隔
|
||||
@@ -70,7 +70,7 @@ This is the simplest kind of SVM (Called an LSVM) Support Vectors are those data
|
||||
* 类别标签用-1、1,是为了后期方便 \\(lable*(w^Tx+b)\\) 的标识和距离计算;如果 \\(lable*(w^Tx+b)>0\\) 表示预测正确,否则预测错误。
|
||||
* 现在目标很明确,就是要找到`w`和`b`,因此我们必须要找到最小间隔的数据点,也就是前面所说的`支持向量`。
|
||||
* 也就说,让最小的距离取最大.(最小的距离:就是最小间隔的数据点;最大:就是最大间距,为了找出最优超平面--最终就是支持向量)
|
||||
* 怎么理解呢? 例如: 所有的点看作地雷吧,那么我们(超平面)得找到最近所有的地雷,并保证我们离它最远。
|
||||
* 怎么理解呢? 例如: 如果把所有的点看作地雷,那么我们(超平面)得找到最近所有的地雷,并保证我们离它最远。
|
||||
* 目标函数:\\(arg: max\ \{min\ [lable*(w^Tx+b)/||w||]\}\\)
|
||||
* 1.如果 \\(lable*(w^Tx+b)>0\\) 表示预测正确,也称`函数间隔`,\\(||w||\\) 可以理解为归一化,也称`几何间隔`,我们始终可以找到一个阈值让 \\(lable*(w^Tx+b)>=1\\)
|
||||
* 2.所以令 \\(lable*(w^Tx+b)=1\\),我们本质上是求 \\(arg: max\{关于w, b\}\ (1/||w||)\\);也就说,我们约束(前提)条件是: \\(lable*(w^Tx+b)=1\\)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 第7章 利用AdaBoost元算法提高分类
|
||||
# 第7.1章 利用AdaBoost元算法提高分类
|
||||
|
||||

|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* 概念:是对其他算法进行组合的一种形式。
|
||||
* 通俗来说: 当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见。
|
||||
机器学习处理问题时又何尝不是如此? 这就是元算法(meta-algorithm)背后的思想。
|
||||
* 集成方法: 1. 投票选举 2. 再学习
|
||||
* 集成方法: 1. 投票选举(bagging) 2. 再学习(boosting)
|
||||
|
||||
> bagging:基于数据随机重抽样的分类器构造方法
|
||||
|
||||
@@ -18,41 +18,45 @@
|
||||
2. 每个数据集都是通过在原始数据集中随机选择一个样本来进行替换(替换:意味着可以多次选择同一个样本,也就有重复值)而得到的。
|
||||
3. 该算法作用的数据集就会得到S个分类器,与此同时,选择分类器投票结果中最多的类别作为最后的分类结果。
|
||||
4. 例如:随机森林(random forest)
|
||||
* 追美女:美女选择择偶对象的时候,会问几个闺蜜的建议,最后选择一个综合得分最高的一个作为男朋友
|
||||
* 选帅哥:美女选择择偶对象的时候,会问几个闺蜜的建议,最后选择一个综合得分最高的一个作为男朋友
|
||||
|
||||
> boosting
|
||||
> boosting:是基于所有分类器的加权求和的方法
|
||||
|
||||
* boosting是一种与bagging很类似的技术。
|
||||
* 不过boosting分类的结果是基于所有分类器的加权求和结果的。不论是boosting还是bagging当中,所使用的多个分类器的类型都是一致的。
|
||||
* 区别是什么?
|
||||
1. bagging:不同的分类器是通过串形训练而获得的,每个新分类器斗根据已训练出的分类器的性能来进行训练。
|
||||
2. boosting:是通过集中关注被已有分类器错分的那些数据来获得新的分类器。
|
||||
3. 由于boosting分类的结果是基于所有分类器的加权求和结果的,因此boosting与bagging不太一样。
|
||||
4. bagging中的分类器权重是相等的,而boosting中的分类器权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。
|
||||
* 目前boosting方法最流行的版本是: AdaBoost。
|
||||
* 追美女:第1个帅哥失败->(传授经验:姓名、家庭情况) 第2个帅哥失败->(传授经验:兴趣爱好、性格特点) 第3个帅哥成功
|
||||
|
||||
## 应用AdaBoost算法
|
||||
> bagging 和 boosting 区别是什么?
|
||||
|
||||
1. bagging:不同的分类器是通过串形训练而获得的,每个新分类器斗根据已训练出的分类器的性能来进行训练。
|
||||
2. boosting:是通过集中关注被已有分类器错分的那些数据来获得新的分类器。
|
||||
3. 由于 boosting 分类的结果是基于所有分类器的加权求和结果的,因此 boosting 与 bagging 不太一样。
|
||||
4. bagging 中的分类器权重是相等的,而 boosting 中的分类器权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。
|
||||
|
||||
## 应用 AdaBoost 算法
|
||||
|
||||
> AdaBoost(adaptive boosting: 自适应boosting)
|
||||
|
||||
```
|
||||
能否使用弱分类器和多个实例来构建一个强分类器? 这是一个非常有趣的理论问题。
|
||||
|
||||
* 优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调节。
|
||||
* 优点:泛化(由具体的、个别的扩大为一般的,就是说:模型训练完后的新样本)错误率低,易编码,可以应用在大部分分类器上,无参数调节。
|
||||
* 缺点:对离群点敏感。
|
||||
* 适用数据类型:数值型和标称型数据。
|
||||
```
|
||||
|
||||
> AdaBoost的一般流程
|
||||
> AdaBoost 的一般流程
|
||||
|
||||
```
|
||||
收集数据:可以使用任意方法
|
||||
准备数据:依赖于所使用的弱分类器类型,本章使用的是单层决策树,这种分类器可以处理任何数据类型。当然也可以使用任意分类器作为弱分类器,第2章到第6章中的任一分类器都可以充当弱分类器。作为弱分类器,简单分类器的效果更好。
|
||||
准备数据:依赖于所使用的弱分类器类型,本章使用的是单层决策树,这种分类器可以处理任何数据类型。
|
||||
当然也可以使用任意分类器作为弱分类器,第2章到第6章中的任一分类器都可以充当弱分类器。
|
||||
作为弱分类器,简单分类器的效果更好。
|
||||
分析数据:可以使用任意方法。
|
||||
训练数据:AdaBoost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。
|
||||
训练数据:AdaBoost 的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。
|
||||
测试数据:计算分类的错误率。
|
||||
使用算法:通SVM一样,AdaBoost预测两个类别中的一个。如果想把它应用到多个类别的场景,那么就要像多类SVM中的做法一样对AdaBoost进行修改。
|
||||
使用算法:通SVM一样,AdaBoost 预测两个类别中的一个。如果想把它应用到多个类别的场景,那么就要像多类 SVM 中的做法一样对 AdaBoost 进行修改。
|
||||
```
|
||||
|
||||
* 训练算法: 基于错误提升分类器的性能
|
||||
@@ -70,15 +74,15 @@
|
||||
|
||||
```
|
||||
发现:
|
||||
alpha目的主要是计算每一个分类器实例的权重(组合就是分类结果)
|
||||
分类的权重值:最大的值=alpha的加和,最小值=-最大值
|
||||
D的目的是为了计算错误概率: weightedError = D.T*errArr,求最佳分类器
|
||||
特征的权重值:如果一个值误判的几率越小,那么D的特征权重越少
|
||||
alpha 目的主要是计算每一个分类器实例的权重(组合就是分类结果)
|
||||
分类的权重值:最大的值= alpha 的加和,最小值=-最大值
|
||||
D 的目的是为了计算错误概率: weightedError = D.T*errArr,求最佳分类器
|
||||
特征的权重值:如果一个值误判的几率越小,那么 D 的特征权重越少
|
||||
```
|
||||
|
||||

|
||||
|
||||
## 完整AdaBoost算法的实现
|
||||
## 完整 AdaBoost 算法的实现
|
||||
|
||||
整个实现的伪代码如下:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 第7章 随机森林的使用(个人补充,非课本内容)
|
||||
# 第7.2章 随机森林的使用(个人补充,非课本内容)
|
||||
|
||||
## 基本介绍
|
||||
|
||||
|
||||
@@ -257,9 +257,9 @@ def plotROC(predStrengths, classLabels):
|
||||
plt.show()
|
||||
'''
|
||||
参考说明:http://blog.csdn.net/wenyusuran/article/details/39056013
|
||||
为了计算AUC,我们需要对多个小矩形的面积进行累加。这些小矩形的宽度是xStep,因此
|
||||
可以先对所有矩形的高度进行累加,最后再乘以xStep得到其总面积。所有高度的和(ySum)随
|
||||
着x轴的每次移动而渐次增加。
|
||||
为了计算 AUC ,我们需要对多个小矩形的面积进行累加。
|
||||
这些小矩形的宽度是xStep,因此可以先对所有矩形的高度进行累加,最后再乘以xStep得到其总面积。
|
||||
所有高度的和(ySum)随着x轴的每次移动而渐次增加。
|
||||
'''
|
||||
print "the Area Under the Curve is: ", ySum*xStep
|
||||
|
||||
|
||||
Reference in New Issue
Block a user