- 组合相似的分类器来提高分类性能
- 应用AdaBoost
- 处理非均衡分类问题
【提升算法】
- 提升算法需要解决两个问题:
- 如何改变训练数据的权重或者概率分布
- 如何将弱分类器组合成一个强分类器
【AdaBoost】
- 算法:
- 训练数据集上有N各分类器,m分类器训练的样本权重Dm
- 初始化:每个训练器权重相等1/N
- 计算分类器Gm(x)在训练集合上的分类误差:e_m =sum_所有分类器: { 分类器m的权重* 分类器m的错误分类样本数目/分类器m的所有样本数目)
- 计算Gm(x)的系数: alpha_m = 1/2*log[(1-em)/em]
- 更新分类器权重:
- 分类正确分类器:Di,m+1 = Di,m * e(-alpha)/Sum(D)
- 分类错误分类器:Di,m+1 = Di,m * e(alpha)/Sum(D)
【AdaBoost代码实现】
-
弱分类器:
- stumpClassify ——基于阈值、分类规则、特征分类(决策树桩)
- buildStump
- 输入:datMat,classLabel,D(D是权值分布)
- 输出:D分布下,最优决策树(分割点、特征依据、分类规则)
- 确定最优特征:先遍历所有特征向量:for i in range(n)
- 确定最优分割点:
- 步数
- 遍历区间(特征值的最大、最小间隔)
- 步长
- 遍历分割点
- 基于stumpClassify求决策树
- 计算误差(对比 predict label 和 real label, 结合D)
- 更新最小误差、最优特征、最优分割点
-
权重向量更新:
- Dt+1 = Dtexp(alpha)label*predictlabel/sum(D)
-
初始化
- D = mat(ones((m,1)))
-
每一轮更新
- 利用buildStamp计算当前D分布下,最优的决策树、误差、Gm(X)
- 计算alpha
- 将决策树,加入到决策树组中
- 更新D
- 累计类比估计值(线性迭代分类器)
- 如果错误率=0.0,退出循环
测试 DONE
【非均衡分类问题】
- 基于错误率衡量分类器任务成功程度
- 考虑决策代价的分类器变换算法
- 混淆矩阵
- 考虑二类问题
- 正确率 = 真正例/(真正例+伪正例)
- 召回率 = 真正例(真正例+伪反例)
- 最大化正确率+召回率
- ROC CURVE
- roc: receiver operating characteristic