您的位置:首页 > 其它

Cart文本分类算法原理和例子

2014-12-05 11:30 204 查看
       ID3使用信息增益作为属性选择标准,c4.5使用信息增益率作为属性选择标准。Cart算法使用GIni系数来度量对某个属性变量测试输出的狼族取值的差异性,理想的分组应该尽量使两组中样本输出变量的差异性总和达到最小,即“纯度”最大,也就是是两组输出变量取值的差异性下降最快,“纯度”增加最快。

    设t为分类回归树中的某个节点,称函数

     


     为Gini系数,k为当前属性下测试输出的类别数,p(j|t)为节点t中样本测试输出取类别j的概率。对节点t而言,G(t)越小,意味着该节点中所包含的样本越集中在某一类上,即该节点越纯,否则说明越不纯,差异性就越大。当节点样本的测试输出均取同一类别值时,输出变量取值的差异性最小,Gini系数为0,而当各类别取概率值相等时,测试输出取值的差异性最大,GIni系数也最大,为1-(1/k),其中k为目标变量的类别数。

     设t为一个节点,§为该节点的一个属性分枝条件,该分支条件将该节点t中样本分别到左分支Sl和右分支Sr中,则称

     


为在分支条件下节点t的差异性损失,其中,G(t)为划分前测试输出的GIni系数,|Sr|和|Sl|分辨表示划分后的左右分支的样本个数。为了使节点t尽可能的纯,我们需要选择某个属性分支条件,使该节点的差异性宣誓尽可能大。

    (2)对于分类型属性,由于cart只能建立二叉树,对于多个量值得属性变量,需要将多类别合并成两个类别,形成“超类”,然后计算两“超类”,然后计算两“超类”下样本测试输出取值的差异性。
              对于数值型属性,方法就是将数据按升序排序,然后从小到大一次以相邻数值的中间值作为分隔,将样本分为两组,并计算所得组中样本测试输出取值的差异性。

Cart算法的基本描述

函数名:CART(S,F)

输入:样本集数据S,属性集合F

输出:cart树

(1)  if 样本S全部属于同一类别C,then

(2)  创建一个叶节点,并标记类标号C;

(3)   Return;

(4)  Else

(5)    计算属性集合F中每一个属性划分的差异性损失,假定差异性损失罪的大属性为A创建节点,取属性A为该节点的决策属性;

(6)  以属性A划分S得到S1和S2两个子集

(7)  递归调用Cart(S1,F);

(8)  递归调用Cart(S2,F);

    例子

   


    首先对数据集非类标号属性{是否有房,婚姻状况,年收入}分别计算他们的差异性损失,取差异性损失最大的属性作为决策树的根节点属性。

   根节点的Gini系数

   

   

   对于是否有房属性

   


   对于婚姻状况属性

    属性婚姻状况有三个可能的取值{married,single,divorced},分别计算划分后的超{married}/{single,divorce},{single}/{married,divoeced},{divorced}/{single,married}的差异性损失

   (1)当分组为{married}/{single,divorce}时,Sl表示婚姻状况取值为married的分组,Sr表示婚姻状况取值为single或者divorce的分组



   (2)对于分组{single}/{single,married}

 


   (3)对于{divorced}/{single,married}分组



      根据计算结果,属性婚姻状况划分根节点时取差异性最大的分组作为划分结果

     对于年收入属性

      对于年收入属性为数值型属性,首先需要对数据按升序排序,然后从小到大一次以相邻值的中间值作为分隔将样本划分为两组

      下面仅仅介绍中间值65作为分割点。Sl作为年收入小于65的样本,Sr表示年收入大于等于65的样本

      


     


   
  根据计算知道,三个属性划分根节点差异性损失最大的有2个:年收入属性和婚姻状况,他们的差异性损失都为0.12.此时,选取首先出现的属性作为第一次划分

     

第二遍
    采用同样的方法,分别计算剩下属性
    根节点的Gini系数为
    


     6指的是single或者divorced的数目,3就是是否贷款的数目no和yes

     对于是否有房属性

     


     对于年收入属性

      


    最后得出的cart树

    


    代码实现

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息