决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树
熵(Entropy) :物理学上是“混乱”程度的量度,系统越有序,熵值越低;系统越混乱或者分散,熵值越高
1948年香农提出了信息熵(Entropy)的概念,假如事件A的分类划分是(A1,A2,...,An),每部分发生的概率是(p1,p2,...,pn),那信息熵定义为公式如下:(log是以2为底,lg是以10为底)
信息增益:以某特征划分数据集前后的熵的差值。熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏
信息增益 = entroy(前) - entroy(后)
定义与公式:特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为
其中,信息熵H(D)与条件熵H(D|A)分别为
表示属于某个类别的样本数,信息增益表示得知特征X的信息而使得类Y的信息熵减少的程度
举例如下
左图第一列为论坛号码,第二列为性别,第三列为活跃度,最后一列用户是否流失,要解决一个问题:性别和活跃度两个特征,哪个对用户流失影响更大
通过计算信息增益可以解决这个问题,统计上右表信息,其中Positive为正样本(已流失),Negative为负样本(未流失),下面的数值为不同划分下对应的人数
可得到三个熵
性别熵:
性别信息增益:
活跃度熵:
活跃度信息增益:
活跃度的信息增益比性别的信息增益大,即活跃度对用户流失的影响比性别大,在做特征选择或者数据分析的时候,我们应该重点考察活跃度这个指标
增益率:增益比率度量是用前面的增益度量Gain(S,A)和所分离信息度量SplitInformation(如上例的性别,活跃度等)的比值来共同定义的
基尼值Gini(D):从数据集D中随机抽取两个样本,其类别标记不一致的概率。故,Gini(D)值越小,数据集D的纯度越高
基尼指数Gini_index(D):一般选择使划分后基尼系数最小的属性作为最优化分属性
举例如下
1、对数据集非类标号属性{是否有房,婚姻状况,年收入}分别计算它们的Gini系数增益,取Gini系数增益值最大的属性作为决策树的根节点属性
3、当根据是否有房来进行划分时,Gini系数增益计算过程为:
4、若按婚姻状况属性来划分,属性婚姻状况有三个可能的取值{married,single,divorced},分别计算划分后的Gini系数增益
①分组为{married} | {single,divorced}时:
②当分组为{single} | {married,divorced}时:
③当分组为{divorced} | {single,married}时:
对比计算结果,根据婚姻状况属性来划分根节点时取Gini系数增益最大的分组作为划分结果,即:{married} | {single,divorced}
5、同理可得年收入Gini:对于年收入属性为数值型属性,首先需要对数据按升序排序,然后从小到大依次用相邻值的中间值作为分隔将样本划分为两组。例如当面对年收入为60和70这两个值时,算得其中间值为65,以中间值65作为分割点求出Gini系数增益
最大化增益等价于最小化子女结点的不纯性度量(Gini系数)的加权平均值,现在我们希望最大化Gini系数的增益。根据计算知道,三个属性划分根节点的增益最大的有两个:年收入属性和婚姻状况,他们的增益都为0.12。此时,选取首先出现的属性作为第一次划分
6、采用同样的方法,分别计算剩下属性,其中根节点的Gini系数为(此时是否拖欠贷款的各有3个records)
7、对于是否有房属性,可得
8、对于年收入属性则有
小结
决策树构建的基本步骤如下:
决策树的变量可以有两种:
评估分割点的好坏
如果一个分割点可以将当前的所有节点分为两类,使得每一类都很“纯”,也就是同一类的记录较多,那么就是一个好分割点
比如上面的例子,“拥有房产”,可以将记录分成了两类
C4.5算法的优缺点
CART算法相比C4.5算法的分类方法,采用了简化的二叉树模型,同时特征选择采用了近似的基尼系数来简化计算,C4.5不一定是二叉树,但CART一定是二叉树
无论是ID3,C4.5还是CART,在做特征选择的时候都是选择最优的一个特征来做分类决策,但是大多数分类决策不应该是由某一个特征决定的,而是应该由一组特征决定的,这样决策得到的决策树更加准确,这个决策树叫做多变量决策树(multi-variate decision tree),在选择最优特征的时候,多变量决策树不是选择某一个最优特征,而是选择最优的一个特征线性组合来做决策,这个算法的代表是OC1
如果样本发生一点点的改动,就会导致树结构的剧烈改变,可通过集成学习里面的随机森林之类的方法解决
出现这种情况的原因:
常用剪枝方式
学习导航:http://xqnav.top