python中决策树函数 python决策树代码解读( 五 )


建立决策树模型的目标是根据特征尽可能正确地将样本划分到三个不同的“阵营”中 。
根结点的选择基于全部数据集 , 使用了贪婪算法:遍历所有的特征 , 选择可以使信息熵降到最低、基尼不纯度最低的特征 。
如上图,根节点的决策边界为' petal width = 0.8cm ' 。那么这个决策边界是怎么决定的呢?
-遍历所有可能的决策边界(需要注意的是 , 所有可能的决策边界代表的是该子集中该特征所有的值,不是以固定增幅遍历一个区间内的所有值!那样很没有必要的~)
-计算新建的两个子集的基尼不纯度 。
-选择可以使新的子集达到最小基尼不纯度的分割阈值 。这个“最小”可以指两个子集的基尼不纯度的和或平均值 。
ID3是最早提出的决策树算法 。ID3算法的核心是在决策树各个节点上根据 信息增益 来选择进行划分的特征,然后递归地构建决策树 。
- 缺点 :
(1)没有剪枝
(2)只能用于处理离散特征
(3)采用信息增益作为选择最优划分特征的标准,然而信息增益会偏向那些取值较多的特征(例如,如果存在唯一标识属性身份证号,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处 。)
C4.5 与ID3相似,但对ID3进行了改进:
-引入“悲观剪枝”策略进行后剪枝
-信息增益率作为划分标准
-将连续特征离散化 , 假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
-可以处理缺失值
对于缺失值的处理可以分为两个子问题:
(1)在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
C4.5 中对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
(2)选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
C4.5 的做法是将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中 。
(1)剪枝策略可以再优化;
(2)C4.5 用的是多叉树,用二叉树效率更高;
(3)C4.5 只能用于分类;
(4)C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
(5)C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序 , 从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时 , 程序无法运行 。
可以用于分类,也可以用于回归问题 。CART 算法使用了基尼系数取代了信息熵模型,计算复杂度更低 。
CART 包含的基本过程有 分裂,剪枝和树选择。
分裂 :分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;
剪枝 :采用“代价复杂度”剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象 , 直到只剩下根节点 。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;
树选择 :用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证) 。
(1)C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
(2)C4.5 只能分类,CART 既可以分类也可以回归;

推荐阅读