《机器学习实战》学习笔记三:决策树

第三章:决策树

决策树就是一个树状结构的判别模式:这棵树的每个非叶节点都包含一个判断条件,每个叶节点都是一种特定的分出来的类别。

优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据

缺点:可能产生匹配过度

关于优缺点,个人理解:对中间值的缺失不敏感就是说可以处理有缺失值的特征数据,匹配过度应该是对于分出来的类别中存在父子类这种情况来说的

一、决策树总体过程

文字描述:不断地对正在处理的数据集进行划分,找出最佳的特征及其特征的具体阈值进行划分(如何判断最佳:可以有自己的评判标准,书中给出的是用信息熵来确定是否分类最佳),直到当前处理的数据集都属于一个类别(注:数据的类别已知)

伪代码:        

createTree(DataSet):
    if (数据集中数据为同一分类)
        返回类标签
    else
        寻找最佳划分特征
        根据最佳划分特征划分数据集
        对每个划分的子集
            创建节点
            调用此函数并将结果添加到树中
        返回当前节点
二、编程过程中的关键问题

1. 最佳特征判别标准:使用信息论度量信息

在划分数据集之前之后信息发生的变化称为信息增益,而计算信息增益需要知道集合信息的度量方式,即香农熵(简称熵):

信息的定义:   

l(x) = -log(p(x))

熵的定义:所有类别所有可能值包含的信息期望值(期望:p(x)*l(x) ):

H = Sum(p(xi)*l(xi))

理解:(想看详细的:信息增益)熵,通俗点说就是“不确定性”,当你的选择很少,少到极限就是只有一个选择(没有选择),此时不确定性为0,此时熵最小亦为0;当你的各个选择的概率相同时,你最不确定,此时熵最大为1 。

因此,只需要在每次划分前后比对熵的大小,熵减少最大的那种划分方案即为当前的最佳划分方案

注意:划分前还好,就一个当前数据集,一个集合直接按公式计算即可;划分后需要按‘Sum(划分后的集合的熵 * 划分集系数)’来计算,划分集系数等于划分后的集合长度占原数据集长度的比值

2. 树的构建过程: 使用python字典数据结构

creatTree(DataSet):
    BestLabel = 最佳划分特征对应的标签名
    Tree = {BestLabel:{}}
    for each value in BestFeature.values():
        Tree[BestLabel][value] = createTree(SubDataSet)
    return Tree

在递归的过程中以字典的方式实现了决策树的构建,在此还是不推荐大家直接去type书上的代码,自己动手实践一下,熟悉这种编程的思路对自己更加有益(至少对笔者是这样)

猜你喜欢

转载自blog.csdn.net/wm64195135/article/details/80359681