《机器学习实战笔记--第一部分 分类算法:利用adaboost元算法提高分类性能2》

    在第四章曾使用logistic回归来预测患病的马是否能存活。现在将在这个数据集上使用adaboost分类器。

    

    

        加载函数:

def loadDataSet(fileName):      #general function to parse tab -delimited floats
    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])) # 总计22列,最后一个为标签,特征便是从0-20一共21个
        dataMat.append(lineArr)
        labelMat.append(float(curLine[-1]))
    return dataMat,labelMat

    运行结果:

    ...

    

    用错分样例除以总数即可得到错误率。

    将弱分类器的数目设置为1-10000之间不同的数目,并运行上述过程,结果如下所示:

    

    可以看到我们仅仅使用50个弱分类器就达到了较高的性能。而logistic回归的分类错误在35%左右。

    仔细观察上表,在弱分类器的数目到达一定后错误率反而上升了,这就产生了过拟合现象。

    下面我们不再讨论adaboost,而是转为关注所有分类器中的一个普遍问题

   1.非均衡分类问题

    在前六章的介绍中,我们都假设所有类别的分类代价是一样的。在第五章,我们预测了马的死亡,然后主人就会给马实行安乐死,而不是通过喂药来延缓其不可避免的死亡过程,但是我们预测的正确率只有0.8,如果我们预测错误就将会杀死一个昂贵的动物,更不要说主人对马的感情。

    还有垃圾邮件,如果收件箱中会出现某些垃圾邮件,而合法邮件永远不会扔到垃圾邮箱里,人们是否会满意呢?癌症的检测,只要患病的人不会得不到治疗,那么再找一个医生看看会不会更好呢?(即使误判也不愿意漏判)

    在大多数情况下,分类的代价是不一样的,在本节中我们将会学习一种新的分类器度量方法,并通过图像技术对上述的非均衡分类问题下不同分类器性能的可视化处理。然后我们考察这两种分类器的变换算法,他们能够将不同决策的代价考虑在内。

    

    1.1 其他分类性能度量指标:正确率,召回率,ROC曲线

    目前我们都是用错误率来衡量分类器任务的成功程度。错误率是指在所有分类样本中错分样本的比例。实际上,这样的度量错误掩盖了样例如何被错分的事实。在机器学习中,有一个普遍适用的 混淆矩阵 的工具。他可以帮助人们更好的了解分类中的错误。下面是一个混淆矩阵的例子:
    

    利用混淆矩阵就可以很好的理解分类中的错误了。如果矩阵中的非对角元素均为0,就会得到一个完美的分类器。

    接下来,我们考虑另外一个混淆矩阵,这次的矩阵只针对一个简单的二分类问题。

    

    在这个二分类问题中,如果将一个正例判为正例,那么就可以认为产生了一个真正例(TP),如果对一个反例正确的判为反例,就是一个真反例(TN),另外两种情况称为 伪反例(FN)伪正例(FP)。

    在分类中,当某个类别的重要性高于其他类别时,我们就可以利用上述定义来定义出多个比错误率更好的新指标。第一个指标是 正确率,它等于TP/(TP+FP),给出的是预测为正例的样本中真正为正例的比例。第二个是召回率,它等于TP/(TP+FN),给出的是预测为正例的真实正例的比例。在召回率很大的分类器中,真正判错的正例的数目并不多。

    我们可以很容易的构造高正确率或则高召回率的分类器,但是很难保证两者同时成立。

    另一个用于度量分类中的非均衡分类问题的工具是ROC曲线。ROC代表接受者操作特征。

    

    在图中给出了两条曲线。一条实线,一条曲线。图中的横轴是伪正例的比例,纵轴是真正例的比例。ROC曲线给出的是当前阈值变化时假阳率和真阳率的变化情况。左下角的点是将所有样本都判为反例的情况,而右上角的点对应的是将所有样例判为正例的情况。虚线是随机猜测结果的曲线。

    ROC曲线,不但可以比较分类器,还可以基于成本效益分析来做决策。由于是在不同阈值下,不同的分类器的变现情况可能不同,因此某种方式将它们组合起来或许会更有意义。如果只是简单的观察分类的错误率,难以看到深入的效果。

    理想状态下,最佳分类器应该位于左上角,这就意味着在假阳率很低的同时获得了很好的真阳率。例如在过滤垃圾邮件时,过滤了所有的垃圾邮件,但是没有将任何合法的邮件因分错放到垃圾邮箱中去。

    对不同ROC曲线进行比较的一个指标是 曲线下面积(AUC)。AUC给出的是分类器的平均性能。当然他也不能代替整条曲线的观察。一个完美分类器的AUC为1.0,而随机猜测的AUC则为0.5。

    为了画出ROC曲线,分类器必须提供每个样例被判为阳性或则阴性的可信程度。尽管大多数分类器都能做到这一点,但是通常情况下,这些只会在最后输出离散分类标签之前被清除。

   1.2 基于代价函数的分类器决策控制

    除了调节分类器的阈值之外,还有其他处理非均匀分类代价问题的方法,其中一种称为 代价敏感的学习,考虑表7-4的代价矩阵,第一张表给出的是目前为止分类器的代价矩阵(代价不是0就是1).第二张表,基于该代价矩阵的分类代价矩阵代价不一样了。
    
    

    第一张表的计算公式为第二张表则是:

    两种分类的代价是不一样的,在构件分类器时,知道了这些代价值,那么就可以选择最小代价的分类器。

    在分类算法中,我们有很多的方法来引入代价信息。在adaboost中,可以基于代价函数来调整错误权重D。在朴素贝叶斯中,可以选择有最小代价期望而不是最大概率的类别作为最后的结果。在SVM中,可以在代价函数中对于不同的类别选择不同的参数C。上述做法就会给较小类更多的权重,即在训练时,小类只允许犯更小的错误。

 1.3 处理非均衡问题的数据抽样方法

    另一种针对非均衡问题调节分类器的方法,就是对分类器的训练数据进行改造。通过 欠抽样 或则 过抽样 来实现。过抽样以为着复制样例,而欠抽样意味着随机删除样例。不管哪种方式,数据都会从原始形式改造为新的形式。抽样过程可以通过随机或则某个预定方式来实现。

    

    

    2. 小结

        集成学习通过组合多个分类器的分类结果,获得了比简单分类器更好的分类结果。有一些利用不同分类器的集成方法,但是本章只介绍了利用同一种分类器的集成方法。
        多个分类器组合可能会进一步凸显出单分类器的不足,比如过拟合问题。如果分类器之间的差距显著,那么多个分类器组合就能缓解这一问题。
        本章介绍了bagging和boosting。在bagging中通过随机抽样的替换方式,得到了与原始数据集规模一样的数据集。而哦boosting在bagging的思路上更进一步,在数据集上顺序应用了多个不同分类器。而另一个成功的集成学习方法就是随机森林,但是由于随机森林不如adaboost流行,所以就没有介绍。
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值