作者:chen_h


决策树算法将原始数据转换为基于规则的决策树。这里 ID3 是最常见的决策树算法之一。首先,它于 1986 年推出,它是 Iterative Dichotomiser 的首字母缩写。

首先,二分法意味着,我们会把东西分成两个完全相反的东西。这就是为什么,算法迭代地将属性分为两组,这两组是最主要的属性,另一组是构造树。然后,它计算每个属性的熵和信息增益。通过这种方式,可以建立最主要的属性。在那之后,最主要的一个被放在树上作为决策节点。此后,将在其他属性中再次计算熵和增益分数。因此,找到了下一个最主要的属性。最后,这个过程一直持续到该分支的结束位置,这就是为什么它被称为 Iterative Dichotomiser。所以,我们将在这篇文章中逐步提到算法。

例如,下表通知了在过去 14 天内在外面打网球的决策因素。

Day

Outlook

Temp.

Humidity

Wind

Decision

1

Sunny

Hot

High

Weak

No

2

Sunny

Hot

High

Strong

No

3

Overcast

Hot

High

Weak

Yes

4

Rain

Mild

High

Weak

Yes

5

Rain

Cool

Normal

Weak

Yes

6

Rain

Cool

Normal

Strong

No

7

Overcast

Cool

Normal

Strong

Yes

8

Sunny

Mild

High

Weak

No

9

Sunny

Cool

Normal

Weak

Yes

10

Rain

Mild

Normal

Weak

Yes

11

Sunny

Mild

Normal

Strong

Yes

12

Overcast

Mild

High

Strong

Yes

13

Overcast

Hot

Normal

Weak

Yes

14

Rain

Mild

High

Strong

No

我们可以总结 ID3 算法,如下所示:

ID3算法强规则python代码 id3算法实例_High

ID3算法强规则python代码 id3算法实例_决策树算法_02

这些公式可能现在会让你大吃一惊,但是后续我们会让他变得更加简单。

熵(Entropy)

我们需要先计算熵,上面的表中决策列由 14 个实例组成,包括两个标签:yes 和 no。他们有 9 个 yes 和 5 个 no 组成。

ID3算法强规则python代码 id3算法实例_High_03

现在,我们需要找到决策最主要的因素。

Wind 因素对决定的影响

ID3算法强规则python代码 id3算法实例_High_04

Wind 属性有两个标签:weak 和 strong。我们会将其反映在公式中。

ID3算法强规则python代码 id3算法实例_High_05

现在,我们需要分别计算 (Decision|Wind=weak) 和 (Decision|Wind=strong) 。

weak wind因素决定

Day

Outlook

Temp.

Humidity

Wind

Decision

1

Sunny

Hot

High

Weak

No

3

Overcast

Hot

High

Weak

Yes

4

Rain

Mild

High

Weak

Yes

5

Rain

Cool

Normal

Weak

Yes

8

Sunny

Mild

High

Weak

No

9

Sunny

Cool

Normal

Weak

Yes

10

Rain

Mild

Normal

Weak

Yes

13

Overcast

Hot

Normal

Weak

Yes

weak 因子有 8 个例子。其中,2个是 no 的决定,6 个是 yes 的决定,如上图所示。

ID3算法强规则python代码 id3算法实例_决策树算法_06

strong wind因素决定

Day

Outlook

Temp.

Humidity

Wind

Decision

2

Sunny

Hot

High

Strong

No

6

Rain

Cool

Normal

Strong

No

7

Overcast

Cool

Normal

Strong

Yes

11

Sunny

Mild

Normal

Strong

Yes

12

Overcast

Mild

High

Strong

Yes

14

Rain

Mild

High

Strong

No

这里有 6 个 strong 因子,Decision 也被分为了两部分:

ID3算法强规则python代码 id3算法实例_Cool_07

现在,我们可以回到 ID3算法强规则python代码 id3算法实例_决策树算法_08

ID3算法强规则python代码 id3算法实例_High_09

所以 wind 因子的计算结束了,现在,我们可以对其它列进行相同的计算,以找到最主要的因素。

另外因子如下计算

我们可以用相同的方法计算 Outlook,Temperature和Humidity 因子的信息增益。

ID3算法强规则python代码 id3算法实例_ID3算法强规则python代码_10

ID3算法强规则python代码 id3算法实例_决策树算法_11

ID3算法强规则python代码 id3算法实例_决策树算法_12

正如我们所看到的,outlook 因子是拥有最高的分数。这也是为什么,outlook 因子会出现在树的根节点的原因。

ID3算法强规则python代码 id3算法实例_Cool_13

现在,我们需要测试 outlook 因子的自定义子集的数据集。

overcast 因子对 outlook 的决策

基本上,如果 outlook = overcast,那么 decision 一直是 yes 。

Day

Outlook

Temp.

Humidity

Wind

Decision

3

Overcast

Hot

High

Weak

Yes

7

Overcast

Cool

Normal

Strong

Yes

12

Overcast

Mild

High

Strong

Yes

13

Overcast

Hot

Normal

Weak

Yes

sunny 因子作为 outlook 的决策

Day

Outlook

Temp.

Humidity

Wind

Decision

1

Sunny

Hot

High

Weak

No

2

Sunny

Hot

High

Strong

No

8

Sunny

Mild

High

Weak

No

9

Sunny

Cool

Normal

Weak

Yes

11

Sunny

Mild

Normal

Strong

Yes

这里有 5 个 outlook = sunny 的实例,decision = yes 的概率是2/5,decision=no 的概率是 3/5 。

ID3算法强规则python代码 id3算法实例_Cool_14

ID3算法强规则python代码 id3算法实例_High_15

ID3算法强规则python代码 id3算法实例_Cool_16

ID3算法强规则python代码 id3算法实例_High_17

ID3算法强规则python代码 id3算法实例_Cool_18

同理,我们可以计算出:

ID3算法强规则python代码 id3算法实例_High_19

ID3算法强规则python代码 id3算法实例_ID3算法强规则python代码_20

现在,我们选择 humidity 作为决策因子,因为它拥有最高分,从表中我们可以看出,如果 humidity=High,那么我们一直不会去打网球。

Day

Outlook

Temp.

Humidity

Wind

Decision

1

Sunny

Hot

High

Weak

No

2

Sunny

Hot

High

Strong

No

8

Sunny

Mild

High

Weak

No

从另一方面说,如果 humidity=Normal,那么我们就一定会去打网球。

Day

Outlook

Temp.

Humidity

Wind

Decision

9

Sunny

Cool

Normal

Weak

Yes

11

Sunny

Mild

Normal

Strong

Yes

最后,这意味着,如果 outlook = Sunny,那么我们只需要检查 humidity 就行了。

rain 因子作为 outlook 的决策

Day

Outlook

Temp.

Humidity

Wind

Decision

4

Rain

Mild

High

Weak

Yes

5

Rain

Cool

Normal

Weak

Yes

6

Rain

Cool

Normal

Strong

No

10

Rain

Mild

Normal

Weak

Yes

14

Rain

Mild

High

Strong

No

ID3算法强规则python代码 id3算法实例_决策树算法_21

ID3算法强规则python代码 id3算法实例_决策树算法_22

ID3算法强规则python代码 id3算法实例_ID3算法强规则python代码_23

大家可以自己计算一下,如果 outlook=rain,那么 wind 因子将会获得最高的分数,这也是为什么我们需要把 wind 因子作为第二层节点。

因此,如果wind=weak,outlook=rain,那么决策将永远是肯定的。

Day

Outlook

Temp.

Humidity

Wind

Decision

4

Rain

Mild

High

Weak

Yes

5

Rain

Cool

Normal

Weak

Yes

10

Rain

Mild

Normal

Weak

Yes

更重要的是,如果wind=strong,outlook=rain,那么决策将永远是否定的,即我不会出去打网球。

Day

Outlook

Temp.

Humidity

Wind

Decision

6

Rain

Cool

Normal

Strong

No

14

Rain

Mild

High

Strong

No

因此,决策树的构建已经结束了,我们可以使用下图来表示。

ID3算法强规则python代码 id3算法实例_ID3算法强规则python代码_24

结论

因此,决策树算法将原始数据转换为基于规则的机制。在这篇文章中,我们提到了一种最常见的决策树算法,名为 ID3。他们可以直接使用特征属性来进行分类,而大多数常见的机器学习算法都是不能的。但是,需要在 ID3 中将数字特征转换为标量。尽管决策树算法功能强大,但是他们的训练时间很长。另一方面,他们倾向于过度拟合。