【数据分析】决策树案例详解

时间:2024-05-21 22:39:28

文章来源:公众号-智能化IT系统。


初识决策树

决策树是一个类似于人们决策过程的树结构,从根节点开始,每个分枝代表一个新的决策事件,会生成两个或多个分枝,每个叶子代表一个最终判定所属的类别。


例如,如下是一个决策树,代表薪水大于30W的男性会买车。

【数据分析】决策树案例详解

我们可以很容易的写出IF Else来实现决策树的判定。上述的决策树有两个特征区间,性别和年龄,最终的结果有两个类别,买和不买。


决策树流程

我们在实际的大数据分析中,一般对决策树分为四个步骤:

  1. 生成决策树模型

    上例中的图就是一个决策树模型,具体的生成方式后面会详细介绍。

  2. 产生分类规则

    通过决策树模型产生分类的规则,这一步很简单,如果分枝少,直接的IF Else即可,在上例中,就是

    if (sex=male)

    {

    if(money>30W)

    {

    buy = true;

    }

    else

    buy = fales;

    else

    {

    buy = false;

    }

  3. 测试决策树模型的准确性

    假设我们有1万条数据,可以对前9千条进行决策树模型测试,生成好后,对剩下的1千条数据进行准确性测试,以评估决策树的准确度。

  4. 对新数据进行预测

    这一步没什么说的了,唯一注意的是必须在第三步通过的基础上,决策不是儿戏。


决策树生成

下面我们围绕第一步,说明如何生成决策树。有一个熵的概念,在决策树中需要用到类别熵(H(c))以及特征条件熵(H(c|x)),同时在此基础上计算信息增益(G(x)),以决定决策树的生成。公式如下:

G(x) = H(c) - H(c|x)


概念是虚幻的,下面我们用一个具体的案例来说明,还是前面提到的一个买房的记录:

用户ID 年龄 性别 收入 婚姻状况 是否买房
1 27 15W
2 47 30W
3 32 12W
4 24 45W
5 45 30W
6 56 32W
7 31 15W
8 23 30W


有四个纬度,年龄,性别,收入,婚姻状况,我们先把年龄分为20-30,30-40,40+三个阶段,把收入分为10-20,20-40,40+三个级别。


首先,正对所有数据,一共3人买房,5人没买,条件熵H(c) = - 3/8 * log23/8 - 5/8 * log25/8 = 0.288

我们对这四个纬度逐一计算信息增益。


年龄

我们先按照三个年龄阶段将表划分为如下三张:

用户ID 年龄 性别 收入 婚姻状况 是否买房
1 27 15W
4 24 45W
8 23 30W


用户ID 年龄 性别 收入 婚姻状况 是否买房
3 32 12W
7 31 15W

用户ID 年龄 性别 收入 婚姻状况 是否买房
2 47 30W
5 45 30W
6 56 32W

首先,针对20-30年龄区间的,特征条件熵计算如下:

H(c|x11) = - 1/3 * log21/3 - 2/3 * log22/3 = 0.278(买房的比例乘以其自身对数,加上不买房的比例乘以自身对数)

针对30-40年龄区间的,特征条件熵计算如下:

H(c|x11) = - 0 * log20 - 1 * log21 = 0

针对40+年龄区间的,特征条件熵计算如下:

H(c|x11) = - 2/3 * log22/3 - 1/3 * log21/3 = 0.278

综合上面,年龄的条件熵计算如下:

H(c|x1) = 3/8 * 0.278 + 2/8 * 0 + 3/8 * 0.278 = 0.209 (每个区间的比例,乘以各区间的条件熵,再取总和)

那么年龄这个纬度的信息增益就是 0.288 - 0.209 = 0.079


性别

分表如下:

用户ID 年龄 性别 收入 婚姻状况 是否买房
1 27 15W
3 32 12W
4 24 45W
5 45 30W
6 56 32W
7 31 15W
用户ID 年龄 性别 收入 婚姻状况 是否买房
2 47 30W
8 23 30W

针对男性,特征条件熵:

H(c|x21) = - 2/6 * log22/6 - 4/6 * log24/6 = 0.278

针对女性,特征条件熵:

H(c|x22) = - 1/2 * log21/2 - 1/2 * log21/2 = 0.301

综合上面,性别的条件熵计算如下:

H(c|x2) = 6/8 * 0.278 + 2/8 * 0.301 = 0.284

那么性别这个纬度的信息增益就是 0.288 - 0.284 = 0.004


收入

分表如下:

用户ID 年龄 性别 收入 婚姻状况 是否买房
1 27 15W
3 32 12W
7 31 15W
用户ID 年龄 性别 收入 婚姻状况 是否买房
2 47 30W
5 45 30W
6 56 32W
8 23 30W
用户ID 年龄 性别 收入 婚姻状况 是否买房
4 24 45W

针对10-20W收入者,特征条件熵:

H(c|x31) = - 0 * log20 - 1 * log21 = 0

针对20-40W收入者,特征条件熵:

H(c|x32) = - 2/4 * log22/4 - 2/4 * log22/4 = 0.301

针对40W+收入者,特征条件熵:

H(c|x33) = 0

综合上面,收入的条件熵计算如下:

H(c|x3) = 3/8 * 0 + 4/8 * 0.301 + 1/8 * 0 = 0.151

那么收入这个纬度的信息增益就是 0.288 - 0.151 = 0.137


婚姻状况

分表如下:

用户ID 年龄 性别 收入 婚姻状况 是否买房
1 27 15W
3 32 12W
4 24 45W
7 31 15W


用户ID 年龄 性别 收入 婚姻状况 是否买房
2 47 30W
5 45 30W
6 56 32W
8 23 30W

针对未婚者,特征条件熵:

H(c|x41) = - 3/4 * log23/4 - 1/4 * log21/4 = 0.245

针对已婚者,特征条件熵:

H(c|x31) = - 2/4 * log22/4 - 2/4 * log22/4 = 0.301

综合上面,婚姻状态的条件熵计算如下:

H(c|x3) = 4/8 * 0.245+ 4/8 * 0.301 + 1/8 * 0 = 0.274

那么婚姻状态这个纬度的信息增益就是 0.288 - 0.274 = 0.014


OK,我们现在总结下所有四个纬度的信息增益,如下

年龄:0.079

性别:0.004

收入:0.137

婚姻状况:0.014


可以看到,收入这个纬度的信息增益最大,所以我们就按照收入,做为根节点,分枝如下:

【数据分析】决策树案例详解

收入就是决策树的根节点,可以看到,分枝后,收入在40W+的可以得到结论,是买房,叶子也一并生成;收入在10-20W的也可以得到结论,不买房,叶子也一并生成。对于中间的20到40W的数据,我们将进一步进行决策树的完善,用同样的方式,针对剩余的三个纬度进行计算,此处省略。


这就是决策树的生成,后面针对实际工作中的数据,可能需要有剪枝的操作,针对无意义的枝节。剪枝有预剪枝和后剪枝的方式,目的是精简决策树,减少不必要的匹配计算。



公众号-智能化IT系统。每周都有技术文章推送,包括原创技术干货,以及技术工作的心得分享。扫描下方关注。

【数据分析】决策树案例详解