题外话
回家近二十天,一天都没看书。。。
终于又回来了,终于有更新了。。。
惭愧,把书背回去又背回来。。。
暑假过完一本书的革命任务此时变得更加紧迫。。。
基于单层决策树的AdaBoost训练及测试
boosting是通过集中关注被已有分类器错分的那些数据来获得新分类器的。
具体不再赘述,书上很详细,主要就是下面一张图:
两步走:
一是基于单层决策树的AdaBoost进行训练得到各弱分类器的α和一个字典。
二是基于已获得的各弱分类器的α和字典计算类别估计累计值对数据进行分类。
示例:
在病马数据集上应用AdaBoost来分类,测试错误率达到稳定值,迭代次数过多会导致过拟合。
非均衡分类问题
其他分类性能度量指标:正确率,召回率,ROC曲线
前面几章都是基于错误率来衡量分类器任务的成功程度。这种度量掩盖了样例如何被错分的事实,现在引入一些指标:正确率,召回率,ROC曲线,AUC。(具体定义和分析不赘述,书上很详细)
为了画出ROC曲线,分类器必须提供每个样例被判成阳性或阴性的可信程度值,而这些值在最后输出成离散分类标签时就被清除了。朴素贝叶斯能够提供一个可能性,而在Logistic回归中输入到Sigmoid函数中的是一个数值,在AdaBoost和SVM中,都会计算出一个数值然后输入到sign()函数中,所有这些数值都可以用于衡量给定分类器的预测强度。
为了创建ROC曲线,首先要将分类样例按照其预测强度排序。先从排名最低的样例开始,所有排名更低的样例被判为反例,而所有排名更高的样例被判为正例。然后,将其移到排名次低的样例中,如果该样例属于正例,那么对真阳率进行修改,如果该样例属于反例,那么对假阳率进行修改。
PS:书上写道:上述过程听起来容易让人混淆,但阅读一下代码就一目了然了。我想说:看了上面只是感觉混淆,看到代码就是完全看不懂了。。。还是回头看看周志华的西瓜书吧,还好有个印象知道大概意思,不然真是蒙了。
下图:对病马数据集训练后,有10个弱分类器时AdaBoost算法性能结果
下图:对病马数据集训练后,有50个弱分类器时AdaBoost算法性能结果
注:AUC是曲线下面积,它给出的是分类器平均性能,当然它不能完全替代对整条曲线的观察,一个完美分类器的AUC是1.0,随机猜测的AUC是0.5。
基于代价函数的分类器决策控制
用于处理非均衡分类的代价方法,有一种叫做 代价敏感的学习。就是分类正确和分类错误的代价值是不一样的。这样就可以选择代价最小的分类器。
在AdaBoost中,可以基于代价函数来调整错误权重向量D。
在朴素贝叶斯中,可以选择具有最小期望代价而不是最大概率的类别作为最后的结果。
在SVM中,可以在代价函数中对于不同的类别选择不同的参数c。
处理非均衡问题的数据抽样方法
另外一种针对非均衡问题调节分类器的方法,就是对分类器的训练数据进行改造。这可以通过欠抽样和过抽样来实现。即用欠抽样和过抽样来调节数据集中的正例和反例数目。