zoukankan      html  css  js  c++  java
  • 恰西瓜 [ 2 ] 决策树

    Decision

    本文仅记录自身学习,本着知识分享的目的,放出来供大家参考交流,故请勿转载。文中若有错误,望不吝赐教。

    【一】 决策树

    1.1 基本流程

    决策树是基于树形结构来进行决策,通过给定训练数据集学得一个模型,用以对新示例进行分类。决策过程中提出的每个 判定问题 都是对某个属性的验证,每个验证的结果或者导出最终结论,或者导出进一步的判定问题。一般的,一棵决策树包含一个根节点,若干个内部节点(表征一个特征或属性)和若干个叶节点(表示一个类);

    输入:

    • 训练集 (D={(x_1,y_1),(x_2,y_2),dots,(x_m,y_m)})
    • 属性集 (A= {a_1,a_2,dots,a_d})
    TreeGenerate(D,A){
        生成结点 node ;
        if D 中样本全属于同一类别 C then{
            将 node 标记为 C 类叶结点;
            return //递归返回,情形(1)
        }
        end if
        
        if A = 空集 || D 中样本在 A 上取值相同 then{
            将 node 标记为叶节点,其类别标记为 D 中样本数最多的类;
        	return	//递归返回,情形(2)
        }
        ende if
        //划分策略 语句,最重要!
            从 A 中选择“最优”划分属性 a*;
            
        for a* 的每一个值 a^v, do{
                为 node 生成一个分支;
                令 Dv 表示 D 中在a*上取值为 a_*v的样本子集;
                if	Dv 为空 then{
                    将分支节点标记为叶节点,其类别表记为 D中样本最多的类;
                    return	//递归返回,情形(3)
                }else{
                    以 TreeGenerate(Dv,A{a*}) 为分支节点//从A集合中去掉 a*
                }
                end if
            }end for
    }
    

    输出:以 node 为根节点的一棵决策树

    1.2 划分选择

    决策树学习的关键在于如何选择最优划分属性,一般而言,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的 purity 越来越高。 那么该如何定量的刻画这个“纯度”呢?

    1.2.0 离散信源及其信息测度(本节主要介绍信息论,可跳过)

    我将首先介绍信源,简要列出信源的统计特性和数学模型,以及离散信源的信息测度-熵 及其性质。

    信源是信息的来源,是产生消息或消息序列的源泉,信息是抽象的,而消息是具体的,他不是信息本身,却携带者信息。

    • 信源输出的消息用随机变量描述

    假设我们仍一颗质地均匀的骰子,研究其落下后朝上一面的点数,每次实验结果必定是(一点,二点dots六点)中的某一面朝上。

    这种信源输出的消息是:

    [cdots\ alpha_i={朝上的面是 i 点} i=1,cdots,6\cdots ]

    这六个不同的消息构成两两互不相容的基本事件集合,样本空间为符号集(A={alpha_1,cdots,alpha_6})由大量实验表明,个消息都是等概率出现的为(frac{1}{6}),因此,可以用一个离散型随机变量(X),而(X)的概率分布就是个消息出现的先验概率,来描述这个信源输出的消息:

    [left[egin{matrix} X\ P(x) end{matrix} ight]= left[egin{matrix} alpha_1 & alpha_2&alpha_3&alpha_4&alpha_5&alpha_6\ frac{1}{6}&frac{1}{6}&frac{1}{6}&frac{1}{6}&frac{1}{6}&frac{1}{6}& end{matrix} ight]\且满足,sum_{i=1}^6P(alpha_i)=1 ]

    上式表明信源的概率空间必定是一个完备集。由上式可推广出最基本的离散信源模型如下:

    [left[egin{matrix} X\ P(x) end{matrix} ight]= left[egin{matrix} alpha_1 & alpha_2&cdots&alpha_q\ P(alpha_1)&P(alpha_2)&cdots&P(alpha_q)& end{matrix} ight]\且满足,sum_{i=1}^qP(alpha_i)=1 ]

    如果信源给定,其相应的概率空间也就给定,反之若概率空间给定,则相应信源相当于给定,所以概率空间能表征离散信源的统计特性,因此有时也把概率空间称为信源空间

    同理可以定义连续信源空间

    [left[egin{matrix} X\ p(x) end{matrix} ight]= left[egin{matrix} (a,b)\ p(x) end{matrix} ight]\且满足,int_{a}^bp(x)=1 ]

    • 信源的输出可以用N维随机矢量(X=(X_1 X_2dots X_N))来描述,其中N可以为有限正整数或可列个,有时又成(X)随机序列,我们假设信源输出的是平稳的随机序列,也就是序列的统计性质与时间增量无关。

    平稳信源又分为无记忆信源和有记忆信源,在某些简单的离散平稳信源情况下,信源先后发出的一个个符号彼此是统计独立的,则(N)维随机矢量的联合概率分布满足:

    [egin{align*} P(X)&=P(X_1 X_2cdots X_N)\ &=P_1(X_1)P_2(X_2)cdots P_N(X_N)\&=prod_{i=1}^NP(X_i)\ end{align*} ]

    即当不同时刻的离散随机变量又取自同一个符号集

    [A:{a_1,a_2,cdots ,a_q},则有\ P(x=alpha_i)=prod_{i_k=1}^qP(a_{i_k}),alpha_i=(a_{i_1}cdots a_{i_k}) ]

    是N维随机矢量的一个取值.

    由符号集(A:{a_1,a_2,cdots ,a_q})与概率测度(leq P(a_{i_k}leq1(i_k=1,cdots ,q))构成一个概率空间

    [left[egin{matrix} X\ P(x) end{matrix} ight]= left[egin{matrix} a_1 & a_2&cdots&a_q\ P(alpha_1)&P(alpha_2)&cdots&P(alpha_q)& end{matrix} ight]\且满足,sum_{i=1}^qP(a_i)=1 ]

    我们称由信源空间([X,P(x)])描述的信源(X)离散无记忆信源 。这种信源在不同时刻发出的符号之间是无依赖的,彼此统计独立的。我们把此信源X 所输出的随机矢量(X)所描述的信源称为 离散无记忆信源(X)的N次扩展信源。离散无记忆信源的N此扩展信源的数学模型是X信源空间的N重空间

    [left[egin{matrix} X^N\ P(alpha_i) end{matrix} ight]= left[egin{matrix} alpha_1 & alpha_2&cdots&alpha_{q^N}\ P(alpha_1)&P(alpha_2)&cdots&P(alpha_{q^N})& end{matrix} ight] ]

    其中,(alpha_i=(a_{i_1}cdots a_{i_k}) (i_1,i_2,cdots ,i_N=1,2,cdots ,q))并满足(0leq P(alpha_i) leq 1)

    [P(alpha_i)=P(a_{i_1}a_{i_2}cdots a_{i_N})=prod_{i_k=1}^qP(a_{i_k})\ sum_{i=1}^{q^N}P(alpha_i)=sum_{i=1}^{q^N}prod_{i_k=1}^qP(a_{i_k})=1 ]

    离散信源的信息熵

    首先我们直观的定义信息量为:

    [egin{align} 收到某消息获得的信息量 &=不确定性减少量\ &=(收到此消息前关于某件事的不确定性)-(收到此消息后关于某事件发生的不确定性)\ &=信源输出的某消息中所含有的信息量 end{align} ]

    我们也知道,事件发生的不确定性与事件发生的概率呈负相关关系,对于发生概率等于1的必然事件,就不存在不确定性,某事件发生所含有的信息量应该是该事件发生的先验概率的函数

    [I(a_i)=f[P(a_i)]=logfrac{1}{P(a_i)}=-log_2P(a_i) (bit) ]

    式中,(P(a_i))是时间ai发生的先验概率,而I表示时间ai发生所含有的信息量,我们称之为 ai 的自信息量.代表某一信源发出某一消息所含有的信息量。

    我们定义自信息的数学期望为信源的平均自信息量,即

    [H(X)=E[logfrac{1}{P(a_i)}]=-sum_{i=1}^qP(a_i)logP(a_i) 称为信息熵 ]

    信源的信息熵H 是从整个信源的统计特性来考虑的,他是平均意义上来表征信源的总体信息测度的,对于确定的信源,其信息熵是一个确定的数值。

    信息熵的基本性质
    • 对称性

    当变量的顺序任意呼唤是,熵函数的值不变:(H(p_1,p_2cdots ,p_q)=cdots=H(p_q,p_1,cdots,p_{q-1}))

    • 确定性

    从总体来说,信源虽然有着不同的输出消息,但他只有一个消息几乎必然出现,而其他消息都是几乎不可能出现,那么此心愿就是个确知信源,熵为零。

    • 非负性

    显然,易证,观察得知,证明略,由文章篇幅限制证明留做习题,易见 qwq

    • 扩展性

    [因为 {lim}_{varepsilon arr0}varepsilon logvarepsilon=0\ lim_{varepsilon arr0}H_{q+1}(p_1,p_2cdots,p_q-varepsilon,varepsilon)=H_q(p_1,cdots,p_q) ]

    信源消息集中的消息数目增多时,若这些消息对应的概率很小,则信源的熵不变,这是信源总体平均性的一种体现。

    • 可加性

    独立统计信源X和Y的联合信源的熵等于分别熵之和:(H(XY)=H(X)+H(Y))

    • 强可加性

    两个相互关联的信源X,Y的联合信源的熵等于:(H(XY)=H(X)+H(Y|X))

    其中,条件熵公式为:(sum_{i=1}^np_iH_m(p_{i1},cdots,p_{im})=sum_{i=1}^np_iH(Y|X=x_i)=H(Y|X))

    • 递增性
    • 极值性

    (H(p_1,cdots,p_q)leq H(1/q,cdots,1/q)=logq),又称为最大离散熵定理

    • 上凸性

    熵函数H(P)是概率矢量P的严格上凸函数,即对于任意(0< heta<1),有

    [H[ heta P_1+(1- heta)P_2]> heta H(P_1)+(1- heta)H(P_2) ]

    1.2.1 信息增熵

    由上节,我们假定当前样本集合 (D) 中第(k)类样本所占的比例为 (p_k,(k=1,2,cdots,|gamma|)),则 (D)信息熵(entropy)定义为

    [Ent(D)=-sum_{k=1}^{|gamma|}p_klog_2p_k ag{2.1} ]

    • 易知 (min Ent(D)=0,max Ent(D)=log_2|gamma|),Ent(D)的值越小,则D的纯度越高。

    [egin{align} max Ent(D)&=-sum_{k=1}^{|gamma|}p_klog_2{p_k}\ &ecause 混乱都最大的情况下,每一特征都自成一种分支\ &=-|gamma|frac{1}{|gamma|}log_2frac{1}{|gamma|}\ &=log_2|gamma| end{align} ag{2.2} ]

    假定离散属性 a 由 V 个可能的取值({a^1,a^2,cdots,a^V}),若用 特征a 来对样本集 D 进行划分,则会产生 V 个分支节点,其中第v个分支节点包含了 D中所有在属性 a 上取值为 (a^v) 的样本,记为(D^v),由(2.1)式可计算出 (D^v) 的信息熵,再考虑到不同的分支节点所包含的样本数也不同,给分支节点赋予权重(frac{|D^v|}{|D|}), 于是可计算出用属性 a 对样本集 D 进行划分所获得的信息增益(information gain)

    [Gain(D,a)=Ent(D)-sum_{v=1}^Vfrac{|D^v|}{|D|}Ent(D^v) ag{2.3} ]

    • 每次划分后信息增益越大,则意味着使用属性 a 来进行划分所获得的“纯度提升“越大。因此,我们可以讲划分策略设定为

    [a_*=arg max_{ain A} Gain(D,a) ag{ID3-Quinlan,1986} ]

    1.2.2 增益率

    信息增益准则对可取值数目较多的属性有所偏好(例如可能将样本的编号作为一种特征),为减少这种偏好可能带来的不良影响,C4.5决策树算法[Quinlan,1993]使用 增益率 来选择最优划分属性.

    [Gain\_ratio(D,a)=frac{Gain(D,a)}{IV(a)} ag{2.4}\ IV(a)=-sum_{v=1}^{V}frac{|D^v|}{|D|}log_2frac{|D^v|}{|D|},固有值(intrinsic value) ]

    值得注意的是,增益率准则可能会对可取值数目较少的属性有所偏好,因此C4.5算法使用了一个启发式[Quinlan, 1993]:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的

    1.2.3 基尼系数

    CART决策树[Breiman et al., 1984] 试图用基尼系数(Gini index)来选择划分属性,数据集 D 的纯度可以通过 基尼系数来度量:

    [egin{align} Gini(D)&=sum_{k=1}^{|gamma|}sum_{k' eq k}p_kp_{k'}\ &=1-sum_{k=1}^{|gamma|}p_k^2 ag{2.5} end{align} ]

    Gini(D) 反映了从数据集D 中随机抽取的两个样本,其类别标记不一致的概率。

    属性a的基尼指数定义为:

    [Gini\_index(D,a)=sum_{v=1}^Vfrac{|D^v|}{|D|}Gini(D^v) ag{2.6} ]

    于是我们在后选属性集合A 中,选择那个使得划分后基尼系数最小的属性作为最优划分属性,即:

    [a_*=arg_{ain A}min Gini\_index(D,a) ]

    1.3 剪支处理

    剪支 pruning是决策树学习算法对付”过拟合“的主要手段。通过主动去掉一些分支来降低过拟合的风险。

    决策树剪枝的基本策略有“预剪枝”和“后剪枝”,预剪枝是说在决策树生成过程中,对每个结点划分前先进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分,并将当前节点标记为叶节点。后剪枝则是先从训练集中生成一颗完整的决策树,然后自底向上的对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来泛化性能提升,则替换。

    后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情况下,后剪枝决策树的欠拟合风险很小(有些分支可能当前的划分不能提升泛化性能,但在其基础上进行的后续划分却有可能导致性能显著提高),泛化性能往往优于预剪枝决策树,但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上的对数中所有非叶节点进行逐一考察,因此训练时间开销要比未减枝决策树和预剪支决策树都要大得多。

    1.4 连续与缺失值

    在数据属性数目较多的情况下,往往会有大量样本出现缺失值,如简单放弃不完整样本,无疑是对信息极大的浪费,如果利用有缺失属性值的训练样例进行学习,我们需要解决两个问题:(1)如何在属性值缺失的情况下进行划分属性选择;(2)给定划分属性,若样本再改属性上得值缺失,该如何对样本进行划分?

    给定训练集 D 和属性 a,令( ilde{D})表示 D 中在属性 a 上没有确实值得样本子集,对于(1)显然我们只可以根据( ilde{D})判断属性a的优劣。假定属性a有V个可取值({a^1,a^2,dots,a^V}),令( ilde{D^v})表示( ilde{D})中在属性a上取值为(a^v)的样本子集,( ilde{D_k})表示( ilde{D})中属于第 k类(k =1,2,...,|y|)的样本子集,显然有( ilde{D}=igcup_{k=1}^{|y|} ilde{D_k}=igcup_{v=1}^{V} ilde{D^v})假定我们对每一个样本x赋予一个权重(omega_x)并定义:

    [egin{align} ho=&frac{sum_{xin ilde{D}}omega_x}{sum_{xin D}omega_x},无缺失值样本所占的比例\ ilde{p}_k=&frac{sum_{xin ilde{D}_k}omega_x}{sum_{xin ilde{D}}omega_x},(1leq kleq{|y|}),无缺失值样本中第k类所占的比例\ ilde{r}_v=&frac{sum_{xin ilde{D}^v}omega_x}{sum_{xin ilde{D}}omega_x},(1leq vleq V),无缺失值样本中在属性a上取值a^v的样本所占的比例 end{align} ]

    显然(sum_{k=1}^{|y|} ilde{p}_k=1,sum_{v=1}^V ilde{r}_v=1)

    基于上述定义,我们把信息增益的计算式推广为:

    [Gain(D,a)= ho imes Gain( ilde D,a)= ho imes{Ent( ilde D)-sum_{v=1}^V ilde r_vEnt( ilde D^v)}\ Ent( ilde D)=-sum_{k=1}^{|gamma|} ilde p_klog_2 ilde p_k ]

    对问题(2),若样本(x)在划分属性 a 上的取值已知,贼将(x)划入于其取值相对应的子节点,且样本权值在子结点中保持为(omega_x),若样本(x)在划分属性 a 上的取值位置,则将(x)同时划入所有子节点,且样本权值在属性值(a^v)对应的子结点中调整为( ilde r_v.omega_x);直观来看,就是让同一个样本以不同的概率划入到不同的子结点中去-C4.5 [quinlan, 1993]

  • 相关阅读:
    TSQL 中游标应用示例
    [转]浅谈数据库设计技巧(上)、(下)
    ASP.NET页面打印技术的总结(转)
    深入理解RIA(转)
    三层架构的bussiness层没用?
    ASP.NET中常用的26个优化性能方法(转)
    基于MapX的GIS动态操作与实现
    web项目经理手册项目经理的工作内容(转)
    ASP.NET中上传文件到数据库
    学习.net中I/O的心得第一篇 初探I/O(转)
  • 原文地址:https://www.cnblogs.com/rrrrraulista/p/12242204.html
Copyright © 2011-2022 走看看