决策树——ID3算法实现

决策树:构建一个基于属性的树形分类器。
1.每个非叶节点表示一个特征属性上的测试(分割),
2.每个分支代表这个特征属性在某个值域上的输出,
3.每个叶节点存放一个类别。
使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。
采用递归的方法进行建树

递归的结束条件

1.当前结点样本均属于同一类别,无需划分。
2.当前属性集为空。
3.所有样本在当前属性集上取值相同,无法划分。
4.当前结点包含的样本集合为空,不能划分。

决策树的核心

经过属性划分后,不同类样本被更好的分离
理想情况:划分后样本被完美分类。即每个分支的样本都属性同一类。
实际情况:不可能完美划分!尽量使得每个分支某一类样本比例尽量高!即尽量提高划分后子集的纯度。

划分的目标:提升划分后子集的纯度,降低划分后子集的不纯度

决策树算法分类

决策树算法的区别主要在于所采用的纯度判别标准

ID3算法:

使用信息增益作为判别标准
信息熵计算公式:
信息熵
假设属性��有��可能取值{��^1,��^2,⋯⋯,��^��}, ��^��对应划分后的数据子集为��^��.
信息熵
信息增益:
信息增益
信息增益越大,说明当前的划分效果越好
信息增益

C4.5算法

使用信息增益率作为判别准则
信息增益
����(��)称为属性��的“固有值”(Intrinsic Value)
信息增益
信息增益率越大,说明当前划分效果越好

CART算法

使用基尼系数作为判别准则
信息增益

实验环境

python3.6
macOS 10.12

代码思路

BuildTree函数:在该函数中完成递归建树,递归返回条件的判断,建立存储树所用的字典,打印各类信息
ChooseAttr函数:在该函数中完成选出最佳特征的功能,根据Ent函数计算出的所有样本的信息熵和加权的信息熵计算信息增益,信息增越大的意味着该属性的纯度越高,选取信息增益最大的属性为最佳属性。
Ent函数:计算输入样本的信息熵,通过输入Sample的最后一列统计出该正例与反例出现的概率,根据信息熵公式计算信息熵
SpiltData函数:该函数用于对数据进行拆分,去掉已经判断过的属性对应的样本
CreatePlot函数:用于决策树的可视化

数据集

使用西瓜书上的西瓜数据集2.0
为了方便计算,将西瓜数据集的内容转换为数字
色泽: 0:青绿 1:乌黑 2:浅白
根底: 0:蜷缩 1:少蜷 2:硬挺
敲声: 0:浊响 1:沉闷 2:清脆
纹理: 0:清晰 1:稍糊 2:模糊
脐部: 0:凹陷 1:稍凹 2:平坦
触感: 0:硬滑 1:软黏
好瓜: 0:不是 1:是

上代码

import math
import numpy
import DrawTree

数据集,属性列表

#初始化一个属性列表
AttrArr=["色泽","根蒂","敲声","纹理","脐部","触感","好瓜"]
#此处使用西瓜数据集2.0
data = numpy.array(
[[0,0,0,0,0,0,1],
[1,0,1,0,0,0,1],
[1,0,0,0,0,0,1],
[0,0,1,0,0,0,1],
[2,0,0,0,0,0,1],
[0,1,0,0,1,1,1],
[1,1,
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值