决策树概述和实现

这两天学习了决策树,并看到了一篇写得很详细的博客,总结如下。

1. 信息增益和熵

  信息增益是选择最佳属性常用且容易上手的方法之一。它使用另一种叫做熵的属性计算出来。

  熵是物理学和数学中的概念,指系统的随机性或混乱度。在信息论中,它指的是一组样本的混乱度。 我们通过一个例子来说明:

你有两个装满巧克力的袋子。巧克力有红的也有蓝的。你想通过计算巧克力的
数量来测量袋子的熵。所以你坐下来开始数。2 分钟后,你发现第一袋有 50块
巧克力。其中 25 块是红色的,25 块是蓝色的。第二袋也有 50 块巧克力,都
是蓝色的。

  在这种情况下,第一个袋子的熵是 1,因为里面的巧克力呈均匀分布。第二个袋子的熵为零,因为里面的巧克力没有随机性。
我们用下面这个公式计算一个系统的熵:

Entropy(s)=i=1npilog2pi E n t r o p y ( s ) = ∑ i = 1 n − p i log 2 ⁡ p i

  在这个公式中,c 代表类别或属性的总数, pi p i 代表属于第 i 类的样本数量。是不是有点懵?我们通过例子了解一下:
  让我们回到刚刚的巧克力袋子。我们有两个类别:红色(R)和蓝色(B)。第一个袋子里有 25 块红色巧克力。巧克力总数是 50。因此, pi p i =25/50。蓝色类别也是这样处理。把这些值代入熵方程,我们得到以下结果:

Entropy(C)=2550log225502550log22550 E n t r o p y ( C ) = − 25 50 log 2 ⁡ 25 50 − − 25 50 log 2 ⁡ 25 50

解方程,结果如下:

2550=0.5 25 50 = 0.5
log22550=log212 log 2 ⁡ 25 50 = log 2 ⁡ 1 2
=log21log22 = log 2 ⁡ 1 − log 2 ⁡ 2
=01=1 = 0 − 1 = − 1
Entropy(C)=(0.5×(1))(0.5×(1)) E n t r o p y ( C ) = − ( 0.5 × ( − 1 ) ) − ( 0.5 × ( − 1 ) )
=0.5+0.5=1 = 0.5 + 0.5 = 1

如果想验证结果或尝试其他例子,请移步 Wolfram Alpha

继续计算第二个袋子的熵,里面有 50 块红色巧克力,0 块蓝色巧克力。得到的熵是 0。

2. 信息增益

信息增益是由基于给定属性的样本分割导致的熵下降。从数学角度上看,信息增益的定义为:

Gain(S,A)=Entropy(S)vValues(A)|Sv||S|Entropy(Sv) G a i n ( S , A ) = E n t r o p y ( S ) − ∑ v ∈ V a l u e s ( A ) | S v | | S | E n t r o p y ( S v )

S 代表整个样本集,A 代表我们想要分割的属性。 |S| | S | 代表样本数量, |Sv| | S v | 表示属性 A 当前值的样本数量。

3. 构建决策树

首先,给巧克力的例子添加一些细节。我们已经知道袋 1 中有 25 块红色巧克力、25 块蓝色巧克力。现在,我们还要考虑巧克力的品牌。红色巧克力中,有 15 块是士力架,10 块是 Kit Kat 牌。蓝色巧克力中,20 块是 Kit Kat 牌,5 块是士力架。假设我们只想吃红色的士力架。那么这里,红色士力架(15)是正例,其他的巧克力(如红色 Kit Kat 和蓝色士力架)都是负例。

现在,与我们的类别(吃/不吃)相关的数据集的熵是:

现在我们来回顾一下,我们有 50 块巧克力。如果只看属性「颜色」,则我们有 25 个红色的、25 个蓝色的。如果看属性「品牌」,则我们有 20 块士力架、30 块 Kit Kat 巧克力。

为了构建决策树,我们需要选择其中一个属性作为根节点。我们想要选择具备最高信息增益的属性。现在我们来计算这些属性的信息增益。

颜色相关的信息增益是:

我们刚才计算了与类别相关的巧克力的熵,是 0.8812。如果我们想吃 15 块士力架而不是 10 块 Kit Kat,则红色巧克力的熵是:

如果我们不想吃蓝色巧克力,则熵为 0。
我们的信息增益计算就变成了:

入门|机器学习第一课:决策树学习概述与实现
如果我们分割颜色,则信息增益是 0.3958。
现在我们来看下品牌。如果我们想吃 15 块士力架(共有 20 块),不想吃 Kit Kat。则士力架的熵是:

如果我们不吃 Kit Kat,则熵为 0。信息增益为:

品牌分割的信息增益是 0.5567。

由于品牌的信息增益较大,我们将基于品牌进行分割。下一级,我们只要左边的颜色。我们可以轻松地根据颜色进行分割,无需进行任何计算。决策树如下:

4. 使用 Python 3 实现决策树

现在我们继续为巧克力数据集构建决策树。

代码和数据地址:https://github.com/ishansharma/decision_trees_tutorial/
1. 创建新文件夹。
2. 从 GitHub 下载 data.csv
3. 你可能需要安装 Scipy、Scikit-Learn 和 Pandas,如果没有安装的话。我推荐使用虚拟环境,参见:http://docs.python-guide.org/en/latest/dev/virtualenvs/。从终端运行以下命令行,安装 Pandas 和 Scikit-Learn:

pip install scikit-learnpip install scipypip install pandas
  1. 安装后,创建新文件 decision_tree.py,并将以下两行添加进去:
from pandas import read_csvfrom sklearn import tree
  1. 使用 Pandas 加载数据:
data = read_csv("data.csv")
  1. Pandas 可以处理大型数据集,且具备大量可视化功能。它在使用 Python 的大数据流程中广泛使用,因此使用 Pandas 是个好主意。在 Pandas 中你可以使用 head() 方法快速查看加载数据:
print(data.head())

5. 继续研究

经过以上学习,你应该对决策树有所了解,同时学会了简单的实现。如果希望进一步探索,你可以参考这些资源:

  1. Scikit-Learn上的决策树页面,讨论在更大的数据集和其他度量下分割数据:http://scikit-learn.org/stable/modules/tree.html
  2. Kaggle 上的机器学习教程,一个深度教程,教你参与 Kaggle 竞赛,并构建一个住房数据的决策树模型:https://www.kaggle.com/learn/machine-learning
  3. Saving your Scikit Models:本教程中,每次运行都会训练一遍模型。这在小数据集中还可以接受,但对于更大的数据集来说最好是一次训练,随后仅使用。这个教程可以教你如何保存自己的模型:http://scikit-learn.org/stable/modules/model_persistence.html
  4. 将训练好的模型转换为 Core ML:如果你为另一个数据集训练了自己的决策树,并希望在 iOS 设备上运行,那么你就需要将已训练模型转换为 Core ML 框架版本:https://developer.apple.com/documentation/coreml/converting_trained_models_to_core_ml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值