ID3 决策树

这篇具有很好参考价值的文章主要介绍了ID3 决策树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

西瓜数据集D如下:

编号 色泽 根蒂 敲声 纹理 脐部 触感 好瓜
1 青绿 蜷缩 浊响 清晰 凹陷 硬滑
2 乌黑 蜷缩 沉闷 清晰 凹陷 硬滑
3 乌黑 蜷缩 浊响 清晰 凹陷 硬滑
4 青绿 蜷缩 沉闷 清晰 凹陷 硬滑
5 浅白 蜷缩 浊响 清晰 凹陷 硬滑
6 青绿 稍蜷 浊响 清晰 稍凹 软粘
7 乌黑 稍蜷 浊响 稍糊 稍凹 软粘
8 乌黑 稍蜷 浊响 清晰 稍凹 硬滑
9 乌黑 稍蜷 沉闷 稍糊 稍凹 硬滑
10 青绿 硬挺 清脆 清晰 平坦 软粘
11 浅白 硬挺 清脆 模糊 平坦 硬滑
12 浅白 蜷缩 浊响 模糊 平坦 软粘
13 青绿 稍蜷 浊响 稍糊 凹陷 硬滑
14 浅白 稍蜷 沉闷 稍糊 凹陷 硬滑
15 乌黑 稍蜷 浊响 清晰 稍凹 软粘
16 浅白 蜷缩 浊响 模糊 平坦 硬滑
17 青绿 蜷缩 沉闷 稍糊 稍凹 硬滑
即集合D为分类问题,分类瓜的好坏是一个二分类问题,故|y| =2 ,故只存在p1,p2

信息熵为衡量信息混乱程度的量
记好瓜比例为p1,坏瓜比例为p2

1. 若全是好瓜 , 则 p 1 = 1 , p 2 = 0 E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k = − ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) = 1 ⋅ l o g 2 ⋅ 1 + 0 ⋅ l o g 2 ⋅ 0 = 0 1.若全是好瓜,则p_1=1,p_2=0 \\ \begin{align} Ent(D) &= -\sum\limits _{k=1}^{|y|}p_klog_2p_k \\ &= -(p_1log_2p_1 + p_2log_2p_2 ) \\ &=1\cdot log_2\cdot 1 + 0\cdot log_2\cdot 0 \\ &=0\\ \end{align} 1.若全是好瓜,p1=1,p2=0Ent(D)=k=1ypklog2pk=(p1log2p1+p2log2p2)=1log21+0log20=0
2. 若全是坏瓜 , 则 p 1 = 0 , p 2 = 1 E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k = − ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) = 0 ⋅ l o g 2 ⋅ 0 + 1 ⋅ l o g 2 ⋅ 1 = 0 则完全不混乱为全是好瓜或全是坏瓜 , E n t ( D ) = 0 2.若全是坏瓜,则p_1=0,p_2=1 \\ \begin{align} Ent(D)&= -\sum\limits _{k=1}^{|y|}p_klog_2p_k \\ &= -(p_1log_2p_1 + p_2log_2p_2 ) \\ &=0\cdot log_2\cdot 0 + 1\cdot log_2\cdot 1 \\ &=0\\ \end{align}\\ 则完全不混乱为全是好瓜或全是坏瓜,Ent(D) = 0\\ 2.若全是坏瓜,p1=0,p2=1Ent(D)=k=1ypklog2pk=(p1log2p1+p2log2p2)=0log20+1log21=0则完全不混乱为全是好瓜或全是坏瓜,Ent(D)=0
3. 若好坏瓜个一半 , 则 p 1 = 1 2 , p 2 = 1 2 E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k = − ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) = − ( 1 2 ⋅ l o g 2 ⋅ 1 2 + 1 2 ⋅ l o g 2 ⋅ 1 2 ) = 1 则最混乱为 E n t ( D ) = 1 3.若好坏瓜个一半,则p_1=\frac12,p_2=\frac12 \\ \begin{align} Ent(D) &= -\sum\limits _{k=1}^{|y|}p_klog_2p_k \\ &= -(p_1log_2p_1 + p_2log_2p_2 ) \\ &=-(\frac12\cdot log_2\cdot \frac12 + \frac12\cdot log_2\cdot \frac12 )\\ &=1\\ \end{align}\\ 则最混乱为Ent(D) = 1 3.若好坏瓜个一半,p1=21,p2=21Ent(D)=k=1ypklog2pk=(p1log2p1+p2log2p2)=(21log221+21log221)=1则最混乱为Ent(D)=1

  • 注:在二分类问题中,信息熵最大为1. 如多分类(y分类)问题,则最大值为:
    l o g 2 ∣ y ∣ log_2|y| log2y
  • 例如3分类问题,则信息熵最大为:
    l o g 2 3 ≈ 1.58 log_23 \approx 1.58 log231.58

当前样本集合D中第k类样本所占比例为pk(k=1,2,3,…,|y|),则D的信息熵为:

E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k Ent(D) = -\sum\limits _{k=1}^{|y|}p_klog_2p_k Ent(D)=k=1ypklog2pk

信息增益为:

G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a) = Ent(D) - \sum\limits _{v=1}^V \frac{|Dv|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)文章来源地址https://www.toymoban.com/news/detail-645330.html

import math
D = [
['青绿','蜷缩','浊响','清晰','凹陷','硬滑','是'],
['乌黑','蜷缩','沉闷','清晰','凹陷','硬滑','是'],
['乌黑','蜷缩','浊响','清晰','凹陷','硬滑','是'],
['青绿','蜷缩','沉闷','清晰','凹陷','硬滑','是'],
['浅白','蜷缩','浊响','清晰','凹陷','硬滑','是'],
['青绿','稍蜷','浊响','清晰','稍凹','软粘','是'],
['乌黑','稍蜷','浊响','稍糊','稍凹','软粘','是'],
['乌黑','稍蜷','浊响','清晰','稍凹','硬滑','是'],
['乌黑','稍蜷','沉闷','稍糊','稍凹','硬滑','否'],
['青绿','硬挺','清脆','清晰','平坦','软粘','否'],
['浅白','硬挺','清脆','模糊','平坦','硬滑','否'],
['浅白','蜷缩','浊响','模糊','平坦','软粘','否'],
['青绿','稍蜷','浊响','稍糊','凹陷','硬滑','否'],
['浅白','稍蜷','沉闷','稍糊','凹陷','硬滑','否'],
['乌黑','稍蜷','浊响','清晰','稍凹','软粘','否'],
['浅白','蜷缩','浊响','模糊','平坦','硬滑','否'],
['青绿','蜷缩','沉闷','稍糊','稍凹','硬滑','否']
]
A = ['色泽','根蒂','敲声','纹理','脐部','触感','好瓜']


# 当前样本集合D中第k类样本所占比例为pk(k=1,2,3,…,|y|)
# 计算A的信息熵,以数据最后一列为分类
def getEnt(D):
    # 获取一个类型k->出现次数的map
    kMap = dict()
    for dLine in D:
        # 获取分类值k
        k = dLine[len(dLine) - 1]
        # 获取当前k出现的次数
        kNum = kMap.get(k)
        if  kNum is None:
            kMap[k] = 1
        else:
            kMap[k] = kNum + 1
    # 遍历map
    dLen = len(D)
    rs = 0
    for kk in kMap:
        pk = kMap[kk]/dLen
        rs = rs + pk * math.log2(pk)
    return -rs

# 求信息增益,aIndex为属性列号
def getGain(D,aIndex):
    dMap = dict()
    for dLine in D:
        # 获取属性
        k = dLine[aIndex]
        # 属性所属的数组
        dChildren = dMap.get(k)
        if  dChildren is None:
            dChildren = []
            dMap[k] = dChildren
        dChildren.append(dLine)
    rs = 0    
    for key in dMap:
        dChildren = dMap[key]
        entx = getEnt(dChildren)
        r = len(dChildren)/len(D) * entx
        rs = rs + r
    return getEnt(D) - rs

# 求信息增益最大的属性列号
def getMaxtGainIndex(D):
    i = 0
    nowMaxIndex = 0
    nowMaxGain = 0
    while i < len(D[0]) - 1:
        gainI = getGain(D,i)
        print("第:" ,i , "列Gain为:" , gainI)
        if gainI > nowMaxGain:
            nowMaxGain = gainI
            nowMaxIndex = i
        i += 1
    return nowMaxIndex

到了这里,关于ID3 决策树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【数据挖掘】决策树归纳中ID3算法讲解及构建决策树实战(图文解释 超详细)

    【数据挖掘】决策树归纳中ID3算法讲解及构建决策树实战(图文解释 超详细)

    需要完整PPT请点赞关注收藏后评论区留言私信~~~ 分类是一种重要的数据分析形式。数据分类也称为监督学习,包括学习阶段(构建分类模型)和分类阶段(使用模型预测给定数据的类标号)两个阶段。数据分类方法主要有决策树归纳、贝叶斯分类、K-近邻分类、支持向量机

    2023年04月09日
    浏览(13)
  • ID3 决策树

    西瓜数据集D如下: 编号 色泽 根蒂 敲声 纹理 脐部 触感 好瓜 1 青绿 蜷缩 浊响 清晰 凹陷 硬滑 是 2 乌黑 蜷缩 沉闷 清晰 凹陷 硬滑 是 3 乌黑 蜷缩 浊响 清晰 凹陷 硬滑 是 4 青绿 蜷缩 沉闷 清晰 凹陷 硬滑 是 5 浅白 蜷缩 浊响 清晰 凹陷 硬滑 是 6 青绿 稍蜷 浊响 清晰 稍凹 软粘

    2024年02月13日
    浏览(41)
  • 决策树ID3

    决策树ID3

    学习地址: https://www.bilibili.com/video/BV1Cq4y1S7k1/?spm_id_from=333.1007.top_right_bar_window_history.content.clickvd_source=de1f9cbc33f7115533aa33c9d6b5257b ID3算法画出决策树 关系: gain=E-info 先算天气的信息增益 算气温的信息增益 算湿度的信息增益 算风的信息增益 选择信息增益最大的作为根节点 画出根

    2024年02月12日
    浏览(45)
  • 基于weka手工实现ID3决策树

    相比于logistic回归、BP网络、支持向量机等基于超平面的方法,决策树更像一种算法,里面的数学原理并不是很多,较好理解。 决策树就是一个不断地属性选择、属性划分地过程,直到满足某一情况就停止划分。 当前样本全部属于同一类别了(信息增益为0); 已经是空叶子

    2024年02月14日
    浏览(44)
  • 决策树之ID3的matlab实现

    森林内的两条分叉路,我选择了人迹罕见的一条,从此一切变得不一样。 ------佛洛斯特Robert Frost 目录 一 .决策树介绍 1.1 相关概念 1.2 图形表示 1.3 规则表示 二.决策树的信息计算 三.ID3相关介绍 3.1 ID3算法概述 3.2 算法流程 四.matlab实现

    2024年02月11日
    浏览(45)
  • ID3决策树及Python实现(详细)

    ID3决策树及Python实现(详细)

    目录 一、划分特征的评价指标: 二、决策树学习算法伪代码: 三、决策树生成实例: 四、Python实现ID3决策树: 1、信息熵 Ent(D): 信息熵,是度量样本集合纯度的一种指标,Ent(D)的值越小,则样本集D的纯度越高; 2、信息增益 Gain(D,a): 信息增益越大,则意味着使用属性a来

    2024年02月09日
    浏览(43)
  • 吃透《西瓜书》第四章 决策树定义与构造、ID3决策树、C4.5决策树、CART决策树

    吃透《西瓜书》第四章 决策树定义与构造、ID3决策树、C4.5决策树、CART决策树

    目录 一、基本概念 1.1 什么是信息熵? 1.2 决策树的定义与构造 二、决策树算法 2.1 ID3 决策树 2.2 C4.5 决策树 2.3 CART 决策树  信息熵: 熵是 度量样本集合纯度 最常用的一种指标,代表一个系统中蕴含多少信息量, 信息量越大 表明一个 系统不确定性就越大, 就存在越多的可

    2024年02月11日
    浏览(7)
  • ID3 决策树的原理、构造及可视化(附完整源代码)

    ID3 决策树的原理、构造及可视化(附完整源代码)

    目录 一、本文的问题定义和(决策树中)信息熵的回顾 ① 本文的问题定义 ②(决策树中)信息熵的回顾 二、ID3 决策树的原理及构造 三、ID3 决策树的可视化源码(含构造过程) 四、ID3 决策树可视化的效果及测试结果 ① ID3 决策树可视化的效果 ② ID3 决策树的文本化结果和

    2023年04月23日
    浏览(10)
  • 机器学习 | 决策树算法

    机器学习 | 决策树算法

    1、树模型         决策树:从根节点开始一步步走到叶子节点(决策)。所有的数据最终都会落到叶子节点, 既可以做分类也可以做回归。         在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上

    2024年02月07日
    浏览(8)
  • 经典机器学习算法——决策树

    经典机器学习算法——决策树

    优质博文:IT-BLOG-CN 树模型是机器学习中最常用的一类模型,包括随机森林、AdaBoost、GBDT(XGBoost和Lightgbm)等,基本原理都是通过集成弱学习器的即式来进一步提升准确度。这里的弱学习器包括线性模型和决策树模型,本期介绍的就是决策树模型(DecisionTree)。 决策树属于有

    2024年04月29日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包