文章目录
一,概述
1,什么是决策树
首先看一组图
决策树的本身就是一种树形结构,可以通过一些精心设计的问题,对数据进行分类
决策树(Decision Tree)是监督学习中的一种算法,并且是一种基本的分类与回归的方法。
决策树有两种:分类树 和 回归树
需要了解的三个概念:
可以把决策树看作是一个 if-then 规则的集合:
— 由决策树的根节点到叶节点的每一条路径构建一条规则
2,特征选择
随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,也就是节点的纯度(purity)越来越高。
下边三个图表示纯度越来越低的过程:
度量不纯度的指标有很多种,比如:熵、增益率、基尼值数。
这里我们使用的是熵,也叫作香农熵。
3,香农熵及计算函数
二,代码实现
1,需要用到的库(pandas传送门)
import numpy as np
import pandas as pd
2,数据集
这里使用书上的数据集
def createDatas():
rew_data = {
'no surfacing':[1,1,1,0,0],
'flippers':[1,1,0,1,1],
'fish':['yes','yes','no','no','no']}
dataSet = pd.DataFrame(rew_data)
return dataSet
dataSet = createDatas()
dataSet
3,计算香农熵
输入:原始数据集
输出:熵
def calEnt(dataSet):
n = dataSet.shape[0]
iset = dataSet.iloc[:,-1].value_counts()
p = iset / n
ent = (-p * np.log2(p)).sum()
return ent
计算一下看看
熵越高,信息的不纯度就越高。也就说明混合的数据就越多。
calEnt(dataSet)
>>>0.9709505944546686
4,信息增益
我们来计算一下 第0列 的信息增益
a = (3/5)*(-(2/3)*np.log2(2/3)-(