一、介绍
决策树 (decision tree) 是一类常见的机器学习方法。它是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。
例如,我们要对"这是好瓜吗?"这样的问题进行决策时,通常会进行一系列的判断或"子决策"我们先看"它是什么颜色?",如果是"青绿色",则我们再看"它的根蒂是什么形态?",如果是"蜷缩",我们再判断"它敲起来是什么声音?",最后?我们得出最终决策:这是个好瓜.这个决策过程如图所示.
二、决策树的步骤
决策树的算法是,根据许多个属性的值,得到一个明确的分类。也就是n个数据-->1个数据的过程。在一个数据有n个特征维度时,你会觉得很混乱不知道怎么做出判断,衡量这种混乱程度的就称为信息熵。决策的过程就是混乱度减轻,信息熵下降的过程。
(1)选择最优属性(根节点)
决策树判断一个属性是不是当前数据集的最优属性,是依靠信息熵变化的程度来选择的。选择某个属性,依照这个属性的值,对训练集进行划分,划分后的子训练集的信息熵之和,相比未分割前的数据集信息熵,下降最多的,就是当前的最优属性。也就是说,根据这个属性,我们就可以对数据集进行很大程度上的区分,例如猫和狗之间用耳朵区分,非常快。
(2)生成决策树。(叶子节点的选择)
选取最优属性后,根据此属性的取值,对原始数据集划分,得到子数据集,再将每个子数据集当作完整数据集,迭代进行最优属性的选取,直到数据集中样本都是同一个分类标签时,决策树生成过程结束。
有时根据场景业务需求的不同,也不要求数据集分割到无法再分类的程度,而是指定迭代的次数,即决策树到第几层就不再分割了,直接把当前叶子数据集中数量最多的分类标签作为叶子节点。这是不同的停止规则。
而决策树的三种常见算法,则是根据选择最优属性时计算的信息熵函数不同划分的。ID3 是根据信息熵,C4.5是根据信息增益率。CART是采用了基尼Gini系数。
(3)剪枝(防止过拟合)
剪枝是把通过训练集得到的决策树,切掉一些叶子节点,一方面可以减少判决步骤,提高判决效率。但更主要的是,防决策树模型对训练集数据过拟合。
三、代码实现
参考:
什么是决策树 | IBM
决策树(Decision Tree):通俗易懂之介绍