决策树建模

模型:
          树形结构:根节点为null,枝节点为判断条件,叶子节点为分类
 
算法的步骤:
          1.选取分类的属性
                    用每个属性依次对群组进行分类,根据分类的结果
                    a.基尼不纯度:
                         对每个小群组,统计map(class,num)以及class的在此分类中的概率,遍历map,求一个class与其他所有class的概率的乘积,然后叠加起来,得到此群组的基尼不纯度,选取基尼不纯度最小的分类属性,对群组进行分类
                    b.熵:
                         计算两个小群组的Entrop=H(x)=-∑P(x)logP(x),然后根据每个分组中元素总数占分组前的比例,对两个熵加权平均,用原群组的熵减去此加权值,得到信息增益,选取信息增益最大的元素进行分组;当所有分组的信息增益为负时(越混杂熵越高),分组结束
          2.剪枝:
                    使用训练集得到的决策树会过度拟合于训练集,分类群组的熵要比实际情况的低,所以要进行剪枝
                    先构建决策树,然后将父节点下的两个叶子节点合并,合并前后熵的减少量小于某一个阀值时,将两个叶子节点合并
 
应用模型时的缺失值处理:
          两边分支都走,根据最后的分类结果,统计每个分支分类结果的次数,根据次数求两边分支的权重,再根据true分支分类结果*true分支权重+fasle分支*false分支权重(只计算出现在true分支分类中的分类),递归考虑多个缺失值的情况
 
树的结构:
               a.本次检查用到的模型数据的那一列的标识col
               b.使判断为true时的匹配值value(值为数值型instance,则>=为判断条件,为字符串型时,用"=="判断)
               c.判断结果为true、false时的子树tb、fb
               d.当前分支的分类结果result(为一个字典),除叶子节点外,其它节点值为None;
 

1.分类方法的一种

     用途:商务分析、医疗决策、政策制定、金融风险分析、辅助诊断、交通预测
 
2.模型数据准备
     来源网站     位置     是否阅读过FAQ     浏览网页数     选择服务类型
 
3.构建模型:
     i.决策树的创建:
          树类(decision tree)中的变量声明:
               a.本次检查用到的模型数据的那一列的标识col
               b.使判断为true时的匹配值value(值为数值型instance,则>=为判断条件,为字符串型时,用"=="判断)
               c.判断结果为true、false时的子树tb、fb
               d.当前分支的分类结果result(为一个字典),除叶子节点外,其它节点值为None;
 
     ii.以递归的方式构建决策树:
          先用每个属性可能的取值对群组进行拆分,然后计算新群组的混杂程度,更具混杂程度来决定此次拆分使用哪个属性最为合适,然后对新群组再次进行拆分,直到新的群组混杂程序为0(一般的原理,熵的过程见其具体的步骤
          a.基尼不纯度
               先将数据依次按列进行分组,得到很多集合sets
               计算每个集合set的基尼不纯度:
                    先用每行数据最后一列的分类结果,格式化为res[class,num]
        
                    再求此集合中每行数据的分类出现于错误分类的概率
                    
                    每一项结果出现的次数除以总行数,然后将这些概率的乘机累加,得到某一行数据被随机分配到错误结果的概率,即基尼不纯度(越小标识拆分的结果越理想)
               选取基尼不纯度最小的集合,确定此次拆分的列
   
          b.熵
               含义:代表的是集合的无序程度——集合的混杂程度
               计算公式:Entrop=H(x)=-∑P(x)logP(x),其中x∈X;熵越大,代表群组的混杂度越高
               熵到达峰值的过程相对慢些,其对混乱集合的判罚更重,人们对熵的使用更为普遍些
          具体的步骤:先计算整个群组的熵,然后根据每个属性的可能取值(每个属性、每个属性的值两个维度进行分组熵的度量)对群组进行拆分,并求出两个新群组的熵,根据新分组元素个数占分组前群组的比例,对两个熵进行加权平均,而整个群组的熵与新群组加权平均熵的差值作为信息增益(information gain),根据信息增益最大的属性进行本次拆分;当由熵值最低的一对子集求得的加权平均熵比分组前集合的熵要大时(即所有的信息增益为负时),拆分过程结束
 
     iii.结果展示:
          树形、文本显示
 
     iv.对新的观测数据进行分类
          递归过程:用observation按照构建的决策树进行分类,判断其应走哪条分支,然后用分支对其再次分组,直到叶子节点
 
4.模型的修改:
     用训练数据得到的决策树可能会变得过度拟合,即只能针对训练数据进行分类;训练数据分组的熵值会比实际情况(实际情况群组更加混杂)低,所以过度拟合的决策树得到的分类比实际情况更具特殊性,因此需要对模型进行调整:
           上面的在构建决策树的过程中,会直到熵无法降低时停止,所以一种解决办法是,当熵的减小量小于某个值时,就停止分支的创建:具体的步骤是先按上述方法创建好决策树,然后对其进行剪枝,避免因为过早停止对分类造成的影响
 
     剪枝的过程:对具有相同父节点的一组叶子节点进行检查,如果将其合并,熵的变化量是否会小于某个指定的阀值,如果是,则将两个节点进行合并,合并后的新节点包含了所有可能的结果值,合并的新叶节点也可能成为删除的对象或者合并的对象
   
5.模型应用:处理缺省值
     如果observation的某个属性有缺失值,则在决策树上此判断条件下,先求两边分支上此属性的值占两个分支所有值上比重值,再求左右分支上所有此属性的值与其比重值的乘积之和,来代替:
          

 

 
6.适用范围:
     a.对于只有几个可能结果的问题而言,算法处理会非常有效
     b.只能用大于(小于)、是(不是)作为判断条件,对于分类情况较多的因素,不太适合
     c.最合适处理带分界点、由大量分类数据、数值数据共同构成的数据集
 
posted @ 2017-01-07 10:19  成金之路  阅读(2265)  评论(0编辑  收藏  举报