作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
决策树学习算法根据训练数据来生成决策树,以解决分类和回归问题。比如,你思考一个问题,你想去外面打网球比赛。现在的问题是决定去打哪一场的网球比赛。现在这取决于各种因素,比如时间,天气,温度等等。我们将这些因素称为影响我们决策的特征。如果你能记录下你所做的所有因素和决定,你就可以有更大的概率获得比赛的冠军。
通过上面的这张表格,我们就可以发现你的网球风格了。
这里所有信息都以树的形式表示出来,矩阵框表示树的节点。通过向节点提问来完成数据的分割。分支表示通过在节点上询问问题而获得的各种可能的已知结果。端节点是叶子。它们代表了可以对数据进行分类的各种类。此实例的两个类是 “是” 和 “否”。因此,要获取 类 的最终输出,请向节点提出问题并使用答案遍历分支,直到到达叶节点。
算法
- 从我们称之为 S 的训练数据集开始,它应该具有属性和分类。
- 确定数据集中的最佳属性。(后面我们会讨论最佳属性的定义)
- 将 S 拆分为包含最佳属性的可能值的自己。
- 创建包含最佳属性的决策树节点。
- 通过使用从步骤3创建的数据子集递归生成新的决策树,知道达到无法进一步对数据进行分类的阶段。将类表示为叶节点。
决定 “最佳属性”
现在决策树算法最重要的部分是决定最佳属性。但 “最佳” 究竟意味着什么呢?在决策树算法中,最佳意味着具有最多信息增益的属性。
左侧分割的信息增益较少,因为数据被分为两个类,这两个类几乎平等的分割了 “+” 和 “-”。虽然右侧的分割在一个类中更多 “+” ,另一个类中更多 “-” 。这样分类有更高的信息增益。我们使用 Entropy 来计算最佳属性。
熵 (Entropy)
在机器学习意义上,特别是在这种情况下,熵是数据中混乱度的度量。它的值范围为 0 到 1 。如果所有例子都属于同一个类,并且接近 1,那么它的值接近于 0。则数据几乎相等的分为不同的类。现在计算熵的公式为:
E
n
t
r
o
p
y
(
S
)
=
∑
i
=
1
c
−
p
i
log
2
p
i
E n t r o p y(S)=\sum_{i=1}^{c}-p_{i} \log _{2} p_{i}
Entropy(S)=i=1∑c−pilog2pi
这里 pi 表示具有 i 分类的数据的 比例,c 表示不同类型的分类。
现在,信息增益通过对特定属性的数据进行分类来衡量熵的减少。通过在数据集 S 和属性 A 上分割数据来计算增益的公式是:
Gain
(
S
,
A
)
=
E
n
t
r
o
p
y
(
S
)
−
∑
v
∈
V
alues
(
A
)
∣
S
v
∣
∣
S
∣
Entropy
(
S
v
)
\operatorname{Gain}(S, A)=E n t r o p y(S)-\sum_{v \in V \text { alues }(A)} \frac{\left|S_{v}\right|}{|S|} \operatorname{Entropy}\left(S_{v}\right)
Gain(S,A)=Entropy(S)−v∈V alues (A)∑∣S∣∣Sv∣Entropy(Sv)
这里,熵(S)表示数据集的熵,右边的第二项是分割后获得的不同可能类的加权熵。现在的目标是最大化这种信息收益。选择具有最大信息增益的属性作为父节点,并且在节点上连续的分割数据。
数据集的熵是:
E
n
t
r
o
p
y
(
[
9
+
,
5
−
]
)
=
−
9
14
log
2
9
14
−
5
14
log
2
5
14
=
.
940
E n t r o p y([9+, 5-])=-\frac{9}{14} \log _{2} \frac{9}{14}-\frac{5}{14} \log _{2} \frac{5}{14}=.940
Entropy([9+,5−])=−149log2149−145log2145=.940
现在,我们可以计算信息增益:
我们可以看到 Outlook 属性具有最大的信息增益,因此它被放置在树的顶部。
连续数据问题
现在可能出现的一个问题是在连续数据的情况下如何分割数据。假设属性温度的值为 10 到 45 摄氏度。我们无法对每个离散值进行拆分。这种情况下我们可以做的是将离散值分成连续的类,比如 10-20 可以是 class 1,class 2,class 3 等等,并且特定的离散值被放到特定的类中。
避免过度拟合数据
现在决策树的主要问题是它容易过度拟合。我们可以创建一个可以完美的对数据进行分类的树,或者我们不会留下任何要拆分的属性。这在训练数据集上效果很好,但在测试数据集上会有不好的结果。在决策树中有两种常见的方法可以避免这种情况:在树变得太大之前停止生长树,或者在树变得太大之后修剪树。通常,决策树增长的限制将根据允许的最大层数或者深度来指定。可用于训练决策树的数据将被分成训练集和测试集,并且将基于训练集创建具有各种最大深度的树并且针对测试集进行测试。交叉验证也可以用作此方法的一部分。另一方面,修剪树涉及针对它的修剪版本测试原始树。只要被修剪的树比较大的树对测试数据的性能更好,叶子节点就从树中取出。