1.决策树原理
决策树可以完成对样本的分类。它被看作对于“当前样本是否属于正类”这一问题的决策过程,它模仿人类做决策时的处理机制,基于树的结果进行决策。例如,总的问题是在进行信用卡申请时,估计一个人是否可以通过信用卡申请(分类结果为是与否),这可能需要其多方面特征,如年龄、是否有固定工作、历史信用评价(好或不好)等。人类在做类似的决策时会进行一系列子问题的判断:是否有固定工作;年龄属于青年、中年还是老年;历史信用评价是好还是不好。在决策树过程中,会根据子问题搭建构造中间节点,叶子节点则为总问题的分类结果,即是否通过信用卡申请。
如图4-1所示,先判断“年龄”,如果年龄属于中年,判断“是否有房产”;如果没有房产,再判断“是否有固定工作”;如果有固定工作,则得到最终决策,通过信用卡申请。
图4-1 信用卡申请的决策树
以上为决策树的基本决策过程,决策过程的每个判定问题都是对属性的“测试”,如“年龄”“历史信用评价”等。每个判定结果是最终结论或者下一个判定问题,考虑范围是上次判定结果的限定范围。
一般一棵决策树包含一个根节点、若干个中间节点和若干个叶子节点,叶子节点对应总问题的决策结果,根节点和中间节点对应中间的属性判定问题。每经过一次划分得到符合该结果的一个样本子集,从而完成对样本集的划分过程。
决策树的生成过程是一个递归过程。在决策树的构造过程中,当前节点所包含样本全部属于同一类时,这一个节点则可以作为叶子节点,递归返回;当前节点所有样本在所有属性上取值相同时,只能将其类型设为集合中含样本数最多的类别,这同时也实现了模糊分类的效果。
在树构造过程中,每次在样本特征集中选择最合适的特征作为分支节点,这是决策树学习算法的核心,目标是使决策树能够准确预测每个样本的分类,且树的规模尽可能小。不同的学习算法生成的决策树有所不同,常用的有ID3、C4.5和CART等算法,用户可以在实际应用过程中通过反复测试比较来决定问题所适用的算法。
2.决策树分类实现
scikit-learn的Decision Tree Classifier类实现决策树分类器学习,支持二分类和多分类问题。分类性能评估同样采用metrics实现。相关实现函数格式如下。
案例:使用siki-lemm建立决策树为银行贷款偿还的数据集构造分类器,并评估分类器的性能。
银行贷款偿还数据集共包括15个样本,每个样本包含3个特征项、1个分类标签,保存在文本文件bankdebt.csv中。
例4_1_DecisionTree.py(www.xing528.com)
(1)从文件中读取5个样本,查看是否正确。
执行结果如下:
(2)训练分类器模型时,参数为数值型数组,需要将样本中字符类型的数据替换为数字。统一将“Yes”替换为1,“No”替换为0;婚姻状况“Single”替换为1,“Married”替换为2,“Divorced”替换为3。
替换前5条数据后,执行结果如下:
(3)data前3列数据是特征属性值,取出赋给X,最后1列是分类值(必须为整型)赋给y,训练分类器,分类器的score()函数可以给出分类的Accuracy。
输出的准确率结果为1.0,在此小数据集上,模型预测完全正确。
(4)对分类器的性能进行评估。
执行结果如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。