会员中心 |  会员注册  |  兼职信息发布    浏览手机版!    精选9.9元!    人工翻译    英语IT服务 贫困儿童资助 | 留言板 | 设为首页 | 加入收藏  繁體中文
当前位置:首页 > 机翻技术 > 识别技术 > 正文

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

发布时间: 2023-03-14 09:28:13   作者:etogether.net   来源: 网络   浏览次数:
摘要: 我们拥有两个数据集,在不采用随机抽样的方法下,我们就会对AdaBoost和Logistic回归的结果进行完全对等的比较。


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


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

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

(3) 分析数据:手工检查数据。

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

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

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


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


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


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


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


将上述代码添加到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到10000之间的几个不同数字,并运行上述过程。这时,得到的结果就会如表1所示。在该数据集上得到的错误率相当低。我们在同一数据集上采用Logistic回归得到的平均错误率为0.35。而采用AdaBoost,得到的错误率就永远不会那么高了。从表中可以看出,我们仅仅使用50个弱分类器,就达到了较高的性能。


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


表1.png

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


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


责任编辑:admin


微信公众号

  • 上一篇:局部加权线性回归
  • 下一篇:基于数据集多重抽样的分类器


  • 《译聚网》倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请30天内提供版权疑问、身份证明、版权证明、联系方式等发邮件至info@qiqee.net,我们将及时沟通与处理。


我来说两句
评分: 1分 2分 3分 4分 5分
评论内容:
验证码:
【网友评论仅供其表达个人看法,并不表明本站同意其观点或证实其描述。】
评论列表
已有 0 条评论(查看更多评论)