1.决策树算法实现的三个过程:
2.算法的实现步骤:
输入:数据集(训练集)S及属性A 输出:属性A对训练数据集S的信息增益
- 计算按照属性A划分S的信息增益
- 计算属性的分裂信息及信息增益率
- 属性取值数目越大,分裂信息越大,从而抵消了属性取值数目所带来的影响,但增益率准则对可取值数目较少的属性有所偏好,所以应先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的属性.
- 将该属性作为决策树的节点,在该节点的子节点上使用剩余属性递归执行①~⑤。
- 对生成的决策树进行剪枝处理。
3.算法实例
例题:以下是某公司招录人员的信息表,运用C4.5算法构建决策树模型。
性别 |
学历 |
学校 |
经验 |
是否录用 |
男 |
本科 |
985 |
无 |
是 |
女 |
本科 |
211 |
无 |
是 |
男 |
研究生 |
普通院校 |
有 |
是 |
男 |
大专 |
普通院校 |
有 |
否 |
女 |
本科 |
985 |
无 |
是 |
男 |
研究生 |
普通院校 |
有 |
是 |
男 |
本科 |
211 |
无 |
是 |
男 |
大专 |
普通院校 |
有 |
否 |
男 |
本科 |
普通院校 |
无 |
否 |
女 |
本科 |
普通院校 |
有 |
否 |
男 |
本科 |
211 |
无 |
是 |
男 |
研究生 |
211 |
无 |
是 |
① 计算数据集S的信息熵
该数据集的样本数为12,目标属性有{是,否}两个取值,其中取值为“是”的有8个,取值为“否”的有4个,因此对应的p1=2/3,p2=1/3。所以数据集S的信息熵为
② 计算各个属性A对数据集S的信息熵、信息增益、属性的分裂信息及信息增益率
a.对于属性性别:有两个取值{男,女}分别为,,每个取值对应的情况分别为:
男----9个:其中录取的有6个,不录取的有3个
女----3个:其中录取的有2个,不录取的有1个
因此
信息熵:
信息增益:
分裂信息:
信息增益率:
b.对于属性学历:有三个取值{大专,本科,研究生}分别为,,,每个取值对应的情况分别为:
大专----2个:其中录取的有0个,不录取的有2个
本科----7个:其中录取的有5个,不录取的有2个
研究生--3个:其中录取的有3个,不录取的有0个
因此
信息熵:
信息增益:
分裂信息:
信息增益率:
c.对于属性学校:有三个取值{985,211,普通院校}分别为,,,每个取值对应的情况分别为:
985-------2个:其中录取的有2个,不录取的有0个
211-------4个:其中录取的有4个,不录取的有0个
普通院校--6个:其中录取的有2个,不录取的有4个
因此
信息熵:
信息增益:
分裂信息:
信息增益率:
d.对于属性经验:有两个取值{有,无}分别为,,每个取值对应的情况分别为:
有----5个:其中录取的有2个,不录取的有3个
无----7个:其中录取的有6个,不录取的有1个
因此
信息熵:
信息增益:
分裂信息:
信息增益率:
③ 从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的属性.
所有属性的平均信息增益:
其中学历和学校的信息增益高于平均水平的属性,两者中增益率最高的是学校。
④ 以学校作为根节点,
按照其他三个属性对属性学校中的985进行划分,
性别 |
学历 |
学校 |
经验 |
是否录用 |
男 |
本科 |
985 |
无 |
是 |
女 |
本科 |
985 |
无 |
是 |
由表可知对属性学校中的985分支划分后的子节点已经是纯的,因此不再需要继续划分节点。
按照其他三个属性对属性学校中的211进行划分,
性别 |
学历 |
学校 |
经验 |
是否录用 |
女 |
本科 |
211 |
无 |
是 |
男 |
本科 |
211 |
无 |
是 |
男 |
本科 |
211 |
无 |
是 |
男 |
研究生 |
211 |
无 |
是 |
由表可知对属性学校中的211分支划分后的子节点已经是纯的,因此不再需要继续划分节点。
按照其他三个属性对属性学校中的普通院校进行划分,计算步骤同上:
性别 |
学历 |
学校 |
经验 |
是否录用 |
男 |
研究生 |
普通院校 |
有 |
是 |
男 |
大专 |
普通院校 |
有 |
否 |
男 |
研究生 |
普通院校 |
有 |
是 |
男 |
大专 |
普通院校 |
有 |
否 |
男 |
本科 |
普通院校 |
无 |
否 |
女 |
本科 |
普通院校 |
有 |
否 |
1).计算数据集普通院校的信息熵,共6个数据,其中录用的有2人,不录用的有4人。
2). 计算各个属性A对数据集S的信息熵、信息增益、属性的分裂信息及信息增益率
a.对于属性性别:有两个取值{男,女}分别为,
信息熵:
信息增益:
分裂信息:
信息增益率:
b.对于属性学历: 有三个取值{大专,本科,研究生}分别为,,,
信息熵:
信息增益:
分裂信息:
信息增益率:
c.对于属性经验:有两个取值{有,无}分别为S1,S2,
信息熵:
信息增益:
分裂信息:
信息增益率:
从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的属性.
所有属性的平均信息增益:
其中学历信息增益高于平均水平的属性,且增益率最高的也是学历。
⑤ 把学校的子节点中的普通学校节点的子节点设为学历。
以学历为父节点:如图所示:
按照其他两个属性对属性学历中大专的进行划分,
性别 |
学历 |
经验 |
是否录用 |
男 |
大专 |
有 |
否 |
男 |
大专 |
有 |
否 |
由表可知对属性学历中的大专分支划分后的子节点已经是纯的,因此不再需要继续划分节点。
按照其他两个属性对属性学历中本科的进行划分,
性别 |
学历 |
经验 |
是否录用 |
男 |
本科 |
无 |
是 |
女 |
本科 |
无 |
是 |
女 |
本科 |
无 |
是 |
男 |
本科 |
无 |
是 |
男 |
本科 |
无 |
否 |
女 |
本科 |
有 |
否 |
男 |
本科 |
无 |
是 |
1).计算数据集学历的信息熵,共7个数据,其中录用的有5人,不录用的有2人。
2). 计算各个属性A对数据集S的信息熵、信息增益、属性的分裂信息及信息增益率
a.对于属性性别:有两个取值{男,女}分别为,
信息熵:
信息增益:
分裂信息:
信息增益率:
b.对于属性经验:有两个取值{有,无}分别为,,
信息熵:
信息增益:
分裂信息:
信息增益率:
其中经验增益率高于性别,所以学历节点中本科的子节点是经验。
按照其他两个属性对属性学历中研究生的进行划分,
性别 |
学历 |
经验 |
是否录用 |
男 |
研究生 |
有 |
是 |
男 |
研究生 |
有 |
是 |
男 |
研究生 |
无 |
是 |
由表可知对属性学历中的研究生分支划分后的子节点已经是纯的,因此不再需要继续划分节点。
划分结果如下图所示: