决策树之ID3算法以及决策树挑西瓜代码实现

本文详细介绍了决策树的基础知识,包括决策树的构造过程、优缺点。重点讲解了ID3算法,阐述了信息增益的概念,并通过实例展示了如何计算西瓜数据集的信息增益。此外,还提供了决策树挑西瓜的Python代码实现,详细展示了构建决策树的过程。

一、决策树

1. 决策树的基本认识

决策树是一种依托决策而建立起来的一种树。在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某个可能的属性值,而每一个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值。决策树仅有单一输出,如果有多个输出,可以分别建立独立的决策树以处理不同的输出。

2. 决策树的构造过程

决策树的构造过程一般分为3个部分,分别是特征选择、决策树生成和决策树裁剪。

(1)特征选择

特征选择表示从众多的特征中选择一个特征作为当前节点分裂的标准,如何选择特征有不同的量化评估方法,从而衍生出不同的决策树,如ID3(通过信息增益选择特征)、C4.5(通过信息增益比选择特征)、CART(通过Gini指数选择特征)等。

(2)决策树的生成

根据选择的特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止生长。这个过程实际上就是使用满足划分准则的特征不断的将数据集划分成纯度更高,不确定行更小的子集的过程。对于当前数据集的每一次划分,都希望根据某个特征划分之后的各个子集的纯度更高,不确定性更小。

(3)决策树的裁剪

决策树容易过拟合,一般需要剪枝来缩小树结构规模、缓解过拟合。

决策树的优缺点

决策树的优点:

  • 具有可读性,如果给定一个模型,那么过呢据所产生的决策树很容易推理出相应的逻辑表达。
  • 分类速度快,能在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

决策树的缺点:

  • 对未知的测试数据未必有好的分类、泛化能力,即可能发生过拟合现象,此时可采用剪枝或随机森林。

二、决策树之ID3算法

1. 信息增益

ID3算法使用的数据特征函数(标准)为信息增益。
假设在数据D中有k个类别,其中第i个类别数据在总数据中占有率为 p i p_i pi,则信息熵的计算公式为: i n f o ( D ) = − ∑ i = 1 k p i l o g 2 ( p i ) info(D)=-\sum_{i=1}^kp_ilog_2(p_i) info(D)=i=1kpilog2(pi)
当我们使用某一特征A对数据分类后,其不确定度会减小(因为数据数据有所划分)。此时的熵也会减小,假设特征A有m个类别,其计算公式为: i n f o A ( D ) = − ∑ j = 1 m ∣ D j ∣ ∣ D ∣ ∗ i n f o ( D j ) info_A(D)=-\sum_{j=1}^m\frac{|D_j|}{|D|}*info(D_j) infoA(D)=j=1mDDjinfo(Dj)
那么分类前后熵减小的差值就是信息增益: G a i n ( A ) = i n f o ( D ) − i n f o A ( D ) Gain(A)=info(D)-info_A(D) Gain(A)=info(D)infoA(D)
我们一一计算所有变量的信息增益,选择信息增益最大的那个变量作为此分类节点。

2. 西瓜数据集信息增益计算

用python代码实现如下:

先导入需要的包,然后读取西瓜数据集:

import numpy as np
import pandas as pd
import math

data = pd.read_csv('./西瓜数据集 (1).txt')
data

先定义一个函数,专门用来计算熵:

def info(x, y):
    if x != y and x != 0:
        # 计算当前情况的熵
        p1 = x / y
        p2 = 1 - p1
        return - (p1 * math.log2(x / y) + p2 * math.log2(p2))
    if x == y or x == 0:
        # 纯度最大,熵值为0
        return 0

西瓜数据集D中一共包含17个样本,那么集合一共只有两类,所以|y|=2,自然k的取值为1和2。其中好瓜一共有8个,所以好瓜的比例为: p 1 = 8 17 p_1=\frac{8}{17} p1=178,坏瓜的比例为: p 2 = 9 17 。 p_2=\frac{9}{17}。 p2=

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值