安居多伦多
  • 多市生活
    • 多市生活
    • 加国税务
    • 旅游度假
    • 生活安全
    • 行车安全
    • 窍门集锦
  • 多市书苑
    • 热门
    • 小说
    • 教育
  • 家居信息
    • 家居信息
    • 房屋保养
    • 房屋贷款
    • 房屋租赁
    • 房屋建筑
    • 房前屋后
    • 家居风水
  • 健康保健
    • 健康保健
    • 饮食起居
    • 食品安全
    • 健身锻炼
  • 书苑账户
    • 书苑登入
    • 书苑注册
    • 忘记书苑密码
    • 书苑账户信息
    • 关于我们
    • 联系我们
    • 隐私政策
多伦多书苑
在线书籍:随时阅读,随身听书。
所有书籍 | 人文 | 人物 | 人生 | 健康 | 儿童 | 医学 | 历史 | 历史 | 古典 | 哲学宗教 | 商业 | 外国 | 寓言 | 小说 | 教育 | 风水 | 管理 | 语言 |
为使本公益资源网站能继续提供免费阅读,请勿屏蔽广告。谢谢!报告弹出广告被滥用。
  1. 安居多伦多
  2. 网上书苑
  3. IT
  4. AI
  5. 机器学习实战

机器学习实战

2022-03-09 0人点赞 0条评论
点赞
x
语速1.0: 2.0
进度0:

上一页   |   返回目录   |   下一页

7.6 示例:在一个难数据集上应用AdaBoost

本节我们将在第4章给出的马疝病数据集上应用AdaBoost分类器。在第4章,我们曾经利用Logistic回归来预测患有疝病的马是否能够存活。而在本节,我们则想要知道如果利用多个单层决策树和AdaBoost能不能预测得更准。

示例:在一个难数据集上的AdaBoost应用

1. 收集数据:提供的文本文件。

2. 准备数据:确保类别标签是+1和-1而非1和0。

3. 分析数据:手工检查数据。

4. 训练算法:在数据上,利用adaBoostTrainDS()函数训练出一系列的分类器。

5. 测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对AdaBoost和Logistic回归的结果进行完全对等的比较。

6. 使用算法:观察该例子上的错误率。不过,也可以构建一个Web网站,让驯马师输入马的症状然后预测马是否会死去。

在使用上述程序清单中的代码之前,必须要有向文件中加载数据的方法。一个常见的loadDataset()的程序如下所示。

程序清单7-4 自适应数据加载函数

def loadDataSet(fileName):
numFeat = len(open(fileName).readline().split('\t'))
dataMat = []; labelMat = []
fr = open(fileName)
for line in fr.readlines():
lineArr =[]
curLine = line.strip().split('\t')
for i in range(numFeat-1):
lineArr.append(float(curLine[i]))
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat,labelMat

之前,读者可能多次见过了上述程序清单中的loadDataSet()函数。在这里,并不必指定每个文件中的特征数目,所以这里的函数与前面的稍有不同。该函数能够自动检测出特征的数目。同时,该函数也假定最后一个特征是类别标签。

将上述代码添加到adaboost.py文件中并且将其保存之后,就可以输入如下命令来使用上述函数:

>>> datArr,labelArr = adaboost.loadDataSet('horseColicTraining2.txt')
>>> classifierArray = adaboost.adaBoostTrainDS(datArr,labelArr,10)
total error: 0.284280936455
total error: 0.284280936455
.
.
total error: 0.230769230769
>>> testArr,testLabelArr = adaboost.loadDataSet('horseColicTest2.txt')
>>> prediction10 = adaboost.adaClassify(testArr,classifierArray)
To get the number of misclassified examples type in:
>>> errArr=mat(ones((67,1)))
>>> errArr[prediction10!=mat(testLabelArr).T].sum()
16.0

要得到错误率,只需将上述错分样例的个数除以67即可。

将弱分类器的数目设定为1到10 000之间的几个不同数字,并运行上述过程。这时,得到的结果就会如表7-1所示。在该数据集上得到的错误率相当低。如果没忘的话,在第5章中,我们在同一数据集上采用Logistic回归得到的平均错误率为0.35。而采用AdaBoost,得到的错误率就永远不会那么高了。从表中可以看出,我们仅仅使用50个弱分类器,就达到了较高的性能。

表7-1 不同弱分类器数目情况下的AdaBoost测试和分类错误率。该数据集是个难数据集。通常 情况下,AdaBoost会达到一个稳定的测试错误率,而并不会随分类器数目的增多而提高

分类器数目

训练错误率(%)

测试错误率(%)

1

0.28

0.27

10

0.23

0.24

50

0.19

0.21

100

0.19

0.22

500

0.16

0.25

1000

0.14

0.31

10000

0.11

0.33

观察表7-1中的测试错误率一栏,就会发现测试错误率在达到了一个最小值之后又开始上升了。这类现象称之为过拟合(overfitting,也称过学习)。有文献声称,对于表现好的数据集,AdaBoost的测试错误率就会达到一个稳定值,并不会随着分类器的增多而上升。或许在本例子中的数据集也称不上“表现好”。该数据集一开始有30%的缺失值,对于Logistic回归而言,这些缺失值的假设就是有效的,而对于决策树却可能并不合适。如果回到数据集,将所有的0值替换成其他值,或者给定类别的平均值,那么能否得到更好的性能?

很多人都认为,AdaBoost和SVM是监督机器学习中最强大的两种方法。实际上,这两者之间拥有不少相似之处。我们可以把弱分类器想象成SVM中的一个核函数,也可以按照最大化某个最小间隔的方式重写AdaBoost算法。而它们的不同就在于其所定义的间隔计算方式有所不同,因此导致的结果也不同。特别是在高维空间下,这两者之间的差异就会更加明显。

在下一节中,我们不再讨论AdaBoost,而是转而关注所有分类器中的一个普遍问题。

上一页   |   返回目录   |   下一页

类似书籍

Python机器学习手册:从数据预处理到深度学习
Python机器学习手册:从数据预处理到深度学习
Python机器学习实践指南
Python机器学习实践指南
Python机器学习——预测分析核心算法
Python机器学习——预测分析核心算法
Author:

标签: 暂无
最后更新:2022-03-09
< 上一篇

本书评论

取消回复

©2021 安居多伦多 - 版权所有

本站由 好事来 Hostlike.com 提供技术支持。