决策树是常见且强大的分类器,简单地解释为,if-then判断规则组成的形如树状的预测模型。
我在这里总结了几种常见决策树模型(不做过多原理解释,只总结方法),ID3(多叉树),C4.5(多叉树),C5.0(多叉树),CART(二叉树),CHAID(多叉树),RandomForest(二叉树群)。其生成树的思想大同小异,区别在于属性选择指标和树的形式。
几个基础概念需要了解,熵,信息增益,信息增益率,Gini指数等。
熵:
物理意义 - - 描述了物质的混乱程度。
数学定义 - - Entropy=−∑iPi∗lnPi
其中, Pi 表示 y=i 的样本的比例(概率)。
信息增益:
物理意义 - - 用于衡量属性F降低样本集合S混乱程度多少。
数学定义 - -
G(S,F)=Entropy(S)−∑j|Sj||S|∗Entropy(Sj)
其中, j 表示按属性 F 分的类别表示, |Sj| 表示属性 F=j 的样本, |Sj||S| 表示按照属性 F 中各类别的比例, Entropy(Sj) 表示属性 F=j 的样本的熵。
信息增益率:
物理定义- - 将纯度作为分母考虑进来,计算混乱降低的程度。
数学定义- - GainRatio(S,F)=Gain(S,F)Split(S,F)
其中 Split(S,F)=−∑j|Sj||S|∗ln|Sj||S|
Gini指数:
物理意义 - - 表示一个随机选中的样本被分错的概率。
数学定义 - - Gini(P)=∑Kj=1Pj∗(1−Pj)=∑Kj=1(Pj−P2j)=1−∑Kj=1P2j
其中,类别越多,Gini指数越大,跟熵的概念有些相似。Gini=0表示类别完全一样。
生成树的关键在于节点属性选择及分裂值的标准,剪枝的关键在于衡量全局损失的代价函数。 ID3 用信息增益作为选择属性的评估指标, C4.5 用信息增益率, C5.0 用?, CART 用Gini指数, RandomForest 用Gini指数(CART)。
ID3 用信息增益作为选择属性的评估指标。其算法过程如下。
输入:X-数据;y-标签;
输出:决策树
过程:
1. 属性集Fea = {F1, F2, F3, ... Fn}。
计算属性集内所有属性对应的信息增益G(S, Fi)。
2. 选择信息增益最大值对应的属性,作为当前分裂节点属性Fopt。
按照Fopt属性的类别,划分子集(分叉)。
剔除已经选择的属性,Fea = Fea - Fopt。
重复步骤1和2,直到属性集Fea为空。
3. 剪枝
C4.5是ID3的改进算法。
输入:X-数据;y-标签;
输出:决策树
过程:
1. 离散化处理,将连续型的属性变量进行离散化处理,形成训练集
1.1 按照连续变量从大到小的顺序排序
1.2 假设有N个属性值,则计算两两之间的中间值,N-1个候选属性值分割点。
1.3 用信息增益率选择最佳属性。
缺失值处理,处理空缺的属性值策略。
1.4 策略一:丢弃该样本
1.5 策略二:赋值为该属性对应的均值
1.6 策略三:赋予其可能值的概率。(计算信息增益如何使用?)
2. 属性集Fea = {F1, F2, F3, … Fn}。
计算属性集内所有属性的信息增益率GainRatio(S, Fi)。
3. 选择信息增益率最大值对应的属性,作为当前分裂节点属性Fopt。
按照Fopt属性的类别,划分子集(分叉)。
剔除已选的属性,Fea = Fea – Fopt。
重复步骤2和3,知道属性集Fea为空。
4. 剪枝。
Classification and Regression Tree(CART)是一种大样本的统计分析方法,样本量较小时,模型不稳定。
1. 连续值的处理:
1.1 对取值进行升序排序。
1.2 取相邻两点的中点,作为可能的分裂点。
1.3 #计算GiniGain,选择最佳属性分裂点。
(修正GiniGain,则减去log2(N-1)/|D|,N是连续特征取值个数,D是训练数据数量)
缺失值的处理
2. 属性集Fea = {F1, F2, F3, … Fn}。
2.1 回归树-利用方差选择分支特征。
(计算组内方差最小,组间方差最大,使得左右分支的差异化最大。)
方差计算方法:数据集均值std,计算每个数据点与std的方差,然后平方求和。
组间方差:两组的均值,求方差。
2.2 分类树-利用GiniGain选择分支特征。
将所有二分情况下可能存在的GiniGain计算一遍,选择最小值对应的属性及分裂值,作为当前分裂属性Fopt和分裂点。
如果:左右分支上的Fopt的取值>=2,则Fopt保存,
否则:Fea = Fea – Fopt
重复2.1和2.2步骤
(终止条件,计算X2,X2很小时表示分类条件和类别是独立的,此时节点停止分裂。)
3. 剪枝。
CHAID从统计显著检验角度建树。chi-squared automatic interaction detection-卡方自动交互检测。
1. 属性变量的预处理。
1.1 如果是离散变量,则进行卡方检验;如果是连续变量,则进行F检验。
1.2 如果仅有一个或者两个分组,则不做合并处理。
1.3 离散变量,在其多个分类水平中找到对目标变量取值影响不显著(P-value > a-merge)的分类,并合并它们。连续变量,先按分位点分组,然后再合并具有同质性的组(P-value > a-merge)。若是还考虑合并的问题,则新近合并的组中如果包括三个以上的原始分组,根据P-value < a-split 拆分为两组。
2. 确定当前分裂变量和分裂值。
2.1 计算各属性变量于目标变量的卡方检验值和P-值。
2.2 选择P-值最小的变量(于目标变量联系最为紧密)作为当前的最佳分支变量,该变量的所有分组形成该分支下的子节点。
3. 判断停止条件,达到最大深度或者所有分支都符合P值条件。
随机森林的树用CART,引入了集成学习的思想。
随机森林的树生成过程如下:
1. 在M个原始训练集中,采用有放回的方法随机抽样M次得到新的训练集,根据树的个数K,生成K个新训练样本集。
2. 每个节点的候选分裂属性集选择策略。
当属性较多时,随机采样L=log2(N+1)个属性,作为当前节点的候选分裂属性集。N是原始属性集的属性个数。
当属性较少时,采用随机选择+线性组合的方法生成候选属性。假设随机选择x个属性,用服从[-1, +1]均匀分布的随机权重加权求和,作为一个候选分裂属性,共这样生成L个候选分裂属性。
3. 按照CART的策略最大化生成每一棵树,不剪枝。
只要是决策树,就要解决两个问题,当前节点的最优分裂属性选择,和分裂点的选择。根据不同的选择标准,分成了不同的决策树方法。(又有将决策树集成的想法,于是引入了随机森林算法)