From f9e1d2e2ffb5a8490c1cc67354b1af0599d2cd0c Mon Sep 17 00:00:00 2001 From: chenyyx Date: Mon, 21 Aug 2017 20:04:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=203.=E5=86=B3=E7=AD=96?= =?UTF-8?q?=E6=A0=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/3.决策树.md | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/docs/3.决策树.md b/docs/3.决策树.md index e4a57698..4db4f482 100644 --- a/docs/3.决策树.md +++ b/docs/3.决策树.md @@ -26,12 +26,14 @@ ### 决策树 须知概念 -在数据集中度量一致性 +#### 信息增益 划分数据集的最大原则是: 将无序的数据变得更加有序。我们可以使用多种方法划分数据集,但是每种方法都有各自的优缺点。组织杂乱无章数据的一种方法就是使用信息论度量信息,信息论是量化处理信息的分支科学。我们可以在划分数据之前或之后使用信息论量化度量信息的内容。 在划分数据集之前之后信息发生的变化称为信息增益,知道如何计算信息增益,我们就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。 +集合信息的度量方式称为香农熵或者简称为熵。 + 学习了如何度量数据集的无序程度之后,分类算法除了需要测量信息熵,还需要划分数据集,度量划分数据集的熵,以便判断当前是否正确地划分了数据集。我们将对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式。 @@ -61,11 +63,11 @@ * 缺点:可能会产生过度匹配问题。 * 适用数据类型:数值型和标称型。 -## 决策树 项目实战 +## 决策树 项目案例 -### 项目实战1: 判定鱼类和非鱼类 +### 项目案例1: 判定鱼类和非鱼类 -#### 概述 +#### 项目概述 根据以下 2 个特征,将动物分成两类:鱼类和非鱼类。 @@ -73,10 +75,34 @@ 1. 不浮出水面是否可以生存 2. 是否有脚蹼 -#### 已知数据 +#### 开发流程 + +``` +收集数据:可以使用任何方法 +准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。 +分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。 +训练算法:构造树的数据结构 +测试算法:使用经验树计算错误率 +使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。 +``` + +> 收集数据:可以使用任何方法 ![海洋生物数据](/images/3.DecisionTree/DT_海洋生物数据.png) +我们利用 createDataSet() 函数输入数据 + +```Python +def createDataSet(): + dataSet = [[1, 1, 'yes'], + [1, 1, 'yes'], + [1, 0, 'no'], + [0, 1, 'no'], + [0, 1, 'no']] + labels = ['no surfacing', 'flippers'] + return dataSet, labels +``` + * 计算给定数据集的香农熵 ```Python @@ -94,7 +120,7 @@ def calcShannonEnt(dataSet): labelCounts[currentLabel] = 0 labelCounts[currentLabel] += 1 - # 对于label标签的占比,求出label标签的香农熵 + # 对于 label 标签的占比,求出 label 标签的香农熵 shannonEnt = 0.0 for key in labelCounts: # 使用所有类标签的发生频率计算类别出现的概率。