python中决策树函数 python决策树代码解读

python中的sklearn中决策树使用的是哪一种算法要弄清楚这个问题,首先要弄懂决策树三大流行算法ID3、C4.5和CART的原理,以及sklearn框架下DecisionTreeClassifier的帮助文档 。
3个算法的主要区别在于度量信息方法、选择节点特征还有分支数量的不同 。
ID3 , 采用熵(entropy)来度量信息不确定度 , 选择“信息增益”最大的作为节点特征 , 它是多叉树,即一个节点可以有多个分支 。
C4.5,同样采用熵(entropy)来度量信息不确定度,选择“信息增益比”最大的作为节点特征 , 同样是多叉树,即一个节点可以有多个分支 。
CART,采用基尼指数(Gini index)来度量信息不纯度,选择基尼指数最小的作为节点特征,它是二叉树 , 即一个节点只分两支 。
然后你认真阅读sklearn的DecisionTreeClassifier的帮助文档,可以发现,度量信息的方法默认是Gini , 但可以改成entropy,请按需选择;构建的树是二叉树;可以通过设置max_deepth、max_leaf等来实现“剪枝”,这是根据CART的损失函数减少的理论进行的 。
所以总结说 , 如果信息度量方法按照默认的设置 , 那么sklearn所用的决策树分类器就是CART,如果改成了entropy,那么只是使用了别的度量方法而已 。其实两者差不多 。
决策树之ID3算法及其Python实现决策树之ID3算法及其Python实现
1. 决策树背景知识
??决策树是数据挖掘中最重要且最常用的方法之一python中决策树函数 , 主要应用于数据挖掘中的分类和预测 。决策树是知识的一种呈现方式,决策树中从顶点到每个结点的路径都是一条分类规则 。决策树算法最先基于信息论发展起来,经过几十年发展,目前常用的算法有:ID3、C4.5、CART算法等 。
2. 决策树一般构建过程
??构建决策树是一个自顶向下的过程 。树的生长过程是一个不断把数据进行切分细分的过程 , 每一次切分都会产生一个数据子集对应的节点 。从包含所有数据的根节点开始,根据选取分裂属性的属性值把训练集划分成不同的数据子集,生成由每个训练数据子集对应新的非叶子节点 。对生成的非叶子节点再重复以上过程,直到满足特定的终止条件,停止对数据子集划分,生成数据子集对应的叶子节点,即所需类别 。测试集在决策树构建完成后检验其性能 。如果性能不达标 , 我们需要对决策树算法进行改善,直到达到预期的性能指标 。
??注:分裂属性的选取是决策树生产过程中的关键 , 它决定python中决策树函数了生成的决策树的性能、结构 。分裂属性选择的评判标准是决策树算法之间的根本区别 。
3. ID3算法分裂属性的选择——信息增益
??属性的选择是决策树算法中的核心 。是对决策树的结构、性能起到决定性的作用 。ID3算法基于信息增益的分裂属性选择 。基于信息增益的属性选择是指以信息熵的下降速度作为选择属性的方法 。它以的信息论为基?。≡窬哂凶罡咝畔⒃鲆娴氖粜宰魑鼻敖诘愕姆至咽粜?。选择该属性作为分裂属性后,使得分裂后的样本的信息量最大,不确定性最?。?即熵最小 。
??信息增益的定义为变化前后熵的差值,而熵的定义为信息的期望值,因此在了解熵和信息增益之前,我们需要了解信息的定义 。
??信息:分类标签xi 在样本集 S 中出现的频率记为 p(xi),则 xi 的信息定义为:?log2p(xi)。
??分裂之前样本集的熵:E(S)=?∑Ni=1p(xi)log2p(xi),其中 N 为分类标签的个数 。
??通过属性A分裂之后样本集的熵:EA(S)=?∑mj=1|Sj||S|E(Sj) , 其中 m 代表原始样本集通过属性A的属性值划分为 m 个子样本集,|Sj| 表示第j个子样本集中样本数量,|S| 表示分裂之前数据集中样本总数量 。

推荐阅读