组合分类方法简介
基本思想:组合分类把k个学习得到的模型(或基分类器)M1,M2,···,Mk组合在一起,旨在创建一个改进的复合分类器模型M*。使用给定的数据集D创建k个训练集D1,D2,···,Dk,其中Di用于创建分类器Mi。现在给定一个待分类的新数据元组,每个基分类器通过返回类预测进行投票。组合分类器基于基分类器的投票返回类预测。
目前常用的组合分类器有:装袋、提升和随机森林。下面就对这三种分类器依次作介绍。
装袋(bagging)
算法:装袋。装袋算法——为学习方案创建组合分类模型,其中每个模型给出等权重预测。
输入:
- D:d个训练元组的集合
- k:组合分类器中的模型数
- 一种学习方案(例如,决策树算法、后向传播等)
输出:组合分类器——复合模型
方法:
- for i = 1 to k do
- 通过对
D 有放回抽样,创建自助样本Di - 使用
Di 和学习方法导出模型Mi - endfor
使用组合分类器对元组x分类:让k个模型都对x分类并返回多数表决
注意:这里的每个基分类器具有相同的投票权重
提升(boosting)
在提升方法中,权重赋予每个训练元组。迭代地学习
Adaboost(Adaptive Boosting)是一种流行的提升算法。
算法:Adaboost.一种提升算法——创建分类器的组合。每个给出一个加权投票。
输入:
- D:类标记的训练元组集。
- k:轮数(每轮产生一个分类器)。
- 一种分类学习方案。
输出:一个复合模型。
方法:
- 将D中每个元组的权重初始化为
1/d - for
i = 1 to do - 根据元组的权重从
D 中又放回抽样,得到Di - 使用训练集
Di 导出模型Mi - 计算
Mi 的错误率error(Mi)=∑dj=1wi×err(Xj) ,其中,err(Xj)={0,Xj被正确分类1,Xj被误分类 ,wi 表示元组的权重值 - if
error(Mi) > 0.5 then//这一步的作用是为了避免所产生的分类器效果太差
- 转步骤3重试
- endif
- for
Di 的每个被正确分类的元组 do// 这一步是用来更新被正确分类的元组的权重值
- 元组的权重
wi=wi×error(Mi)1−error(Mi) - 规范化每个元组的权重
//将所有元组的权重值进行规范化,规范化后的结果,会发现被正确分类的元组权重降低,而被误分类元组的权重值上升
- endfor
使用组合分类器对元组x分类:
- 将每个类的权重初始化为0
- for
i = 1 tok do -
wi=log1−error(Mi)error(Mi) //获得基分类器的权重值
-
c=Mi(x) //获得基分类器的分类结果
- 将
wi 加到类c 的权重//将不同类的基分类器权重进行求和
- endfor
- 返回具有最大权重的类
需要注意的是,这个方法存在结果复合模型对数据过分拟合的危险。
随机森林
随机森林可以使用装袋与随机属性选择结合起来构建。
算法:Forest-RI.一种随机森林算法
输入:
-
D :类标记的训练元组集 -
k :分类器中的模型树 -
F :节点划分时,候选属性的个数 - 一种属性选择算法
输出:一个随机森林
方法:
- for
i=1 tok do - 通过对
D 有放回抽样,创建自助样本Di - 从自主样本
Di 的属性集合中,随机选择F 个属性作为节点划分时的候选属性 - 根据属性选择算法,选择节点的分裂属性,对
Di 进行一次分裂 - 再次执行第3步,直到被选择的属性集都在之前的分裂中使用过,即无法再进行决策树的构建,从而得到最终的决策树模型
Mi - endfor
随机森林对于属性个数的选择很敏感,通常选取
类不平衡数据
类不平衡问题与代价敏感学习密切相关。传统的分类方法,将假正例和假负例的代价视为相等,所以不适合类平衡数据分类。
这里介绍四种通用的解决方案:(1)过抽样;(2)欠抽样;(3)阈值移动;(4)组合技术。第四种技术,前面已经做过介绍,下面主要对前三种技术做一下说明。注意,这里的类不平衡解决方案,都是只假定两种类别,对于多类的不平衡数据,目前还没有很好的解决措施:
过抽样
过抽样就是通过对训练集中的正元组进行重复采样,直到结果训练集包含相同个数的正元组和负元组。
欠抽样
欠抽样是通过对训练集中的多数类随机进行删除元组,直到结果训练集包含相同个数的正元组和负元组。
阈值移动
这种方法适用于对于给定输入元组返回一个连续输出值得分类器。即对于输入元组
对于某个阈值
阈值移动就是通过改变