小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
日后总结我的大学四年,虽然没有尽善尽美,但是真的尽心尽力地去做了每一件想做的事。
算法思想
决策树不止是一棵二叉树,还可以多叉。
简答来说,就是逐层判断从而得到最终结果。
🥕 树形结构
椭圆是内部结点,代表了特征或属性,最上面的结点是根结点,所有分叉都从这里出发
矩形是叶结点,代表了类。
If-Then规则:
信息增益
决策树是根据每个结点的特征来逐层判断从而得到最终分类结果,而信息增益的出现就是为了寻找出最优特征,该怎么给各个特征排序能够使最终判断出的结果是最合理的。
1.熵的概念
信息增益是由熵构建而成的。熵表示的是随机变量的不确定性,不确定性越大,代表着熵越大。
由于熵和随机变量的分布有关,我们可以得到:
随机变量的取值等概率分布时,相应的熵最大。也就是说,特征的所有取值相同时,所包含的信息是最多的,此时就是不确定性最大的情况。
2.信息增益
输入:训练数据集D和特征A。
输出:特征A对训练数据集D的信息增益g(D,A)。
🚶♂️三步走~
step 1 计算数据集D的经验熵 H(D)
step 2 计算特征A对数据集D的经验条件熵 H(D|A)
step 3 计算信息增益公式
信息增益表示得知特征A而使类Y的信息的不确定性减少的程度。
公式很多,晕了?😅看例题马上就清楚啦~
3.例题解说
输入:训练数据集D
输出:通过计算信息增益来选出最优特征
step 1 计算经验熵公式
在本训练数据集中,D=15,最终分类情况有两类:是(9)、否(6)
代入计算得到经验熵:
step 2 计算经验条件熵公式
令 A1:年龄,A2:是否有工作,A3:是否有自己的房子,A4:信贷情况
① 年龄
代入计算分别得到青年、中年、老年的经验条件熵:
i=1青年时:
i=2中年时:
i=3老年时:
最终经验条件熵:
step 3 计算信息增益公式
同理,我们可计算出其他特征的信息增益
继续上面三步走的计算,将结果汇总到表格中:
可以看出,有自己的房子这一特征对应的经验条件熵最小,信息增益最大,意味着选择这个特征的话,对应的不确定性最小,分类选择最为明确,那么就可以设为最优特征👍
当然,细心的小伙伴会发现如果不同特征内的分类个数不同,有点是3个,比如年龄(青年、中年、老年),有的是2个,比如是否有自己的房子,分类个数较多时有可能计算出的信息增益会更大,可以看出,信息增益会更倾向于取值较多的特征。
🤔那该怎么降低取值较多的影响呢?
别急,信息增益比来啦~
信息增益比
训练数据集D关于特征A的熵:
信息增益比:
那怎么计算呢?
以特征 为例:
同理,我们继续计算 A2,A3,A4 特征对应的信息增益比,列在表格中:
可以对比一下有工作和信贷情况这两个特征,可以看出从信息增益的角度出发,那么选择 信贷情况 作为最优特征最合适;而从信息增益比的角度出发,选择 有工作 作为最优特征更合适
综上,信息增益倾向于取值较多的特征,信息增益比倾向于取值较少的特征
决策树生成算法
1. ID3算法
输入:训练数据集,特征集,阈值
输出:决策树
step 1 判断是否需要选择特征生成决策树
Case 1 若中所有实例属于同一类,则T为单结点数,记录实例类别,以此作为该结点的类标记,并返回
Case 2 若中所有实例无任何特征(),则为单结点树,记录中实例个数最多类别,并根据多数表决原则,以此作为该结点的类标记,并返回。
step 2 否则,计算A中各特征的信息增益,并选择信息增益最大的特征Ag
Case 1 若的信息增益小于,则为单结点树,记录中实例个数最多类别,
Case 2 否则,按照的每个可能值,将分为若干非空子集,将中的实例个数最多的类别作为标记,构建子结点,以结点和其子结点构成,并返回
step 3 第个子结点,以为训练集,为特征集合,递归地调用以上步骤,得到子树
晕了吧😏看例题就简单多啦~
例题解说
仍然是上次的例子
输入:训练数据集D
输出:决策树。
step 1 判断是否需要选择特征生成决策树
- 训练集中最终分类有2类
- 训练集中存在年龄、有工作、有自己的房子和信贷情况多个特征
∴ 需要选择特征生成决策树
step 2 计算A中各特征的信息增益,并选择信息增益最大的特征Ag
可以人为地给定,而从上文已求出的信息增益值看出都大于,所以没有理由说这是单结点树
根据上文已经算出的各个特征的信息增益计算值
于是,我们可以确定根结点为信息增益最大的 是否有自己的房子 这一特征,可以根据这一特征将训练集划分为和
可以看出有自己房子的都是同意贷款,于是此时就可以得到一个单一的叶结点。而无自己的房子的中既有同意贷款和不同意贷款,于是就需要根据特征选择(计算这三个特征下的最大信息增益)来找到内部结点所对应的特征。
首先,对于 年龄 这一特征:
从上表 是否有自己的房子训练集 中可以看出,没有自己的房子的实例共有9个,其中6个同意贷款,3个不同意贷款,则 经验熵 为
青年时:
中年时:
可以看出对于这个子集都是不同意贷款,那么它的经验条件熵就为0
老年时:
最终的经验条件熵为:
年龄的信息增益为:
同理,计算出是否有工作、信贷情况的信息增益,列出下表:
对比可得,其中信息增益最大的是 有工作 这一特征,那么我们下一个特征就选它。
在有工作这一特征下,若有工作,则全部同意贷款;若无工作,则不同意贷款,可发现 在这之下不再有其他的分类。
满足了单一叶结点的要求,因此决策树生成到这就结束啦~🎈
2. C4.5算法
如果你学会了ID3算法,那C4.5算法就超级简单。
C4.5算法与ID3算法很相似,区别就在于C4.5是用信息增益比来选择特征,选出信息增益比最大的作最优特征
以上例题的代码在👉 gitee.com/xin-yue-qin…
欢迎巨佬指点~
参考资料:简博士-决策树生成