决策树之构造决策树(一)

机器学习实战之决策树(一)构造决策树 决策树(一)构造决策树1.简介1.1优缺点1.2 流程1.3决策树的构造1.4海洋生物数据2.信息增益2.1几个概念 1.简介 本文内容基本来自机器学习实战这本书。 k-近邻算法最大的缺点就是无法给出数据的内在含义,决策树的主要优势就在于数据形式非常容易理解。 下图所示决策树,长方形代表判断模块(decision block),椭圆形代表终止模块(terminating block),表示已经得出... 阅读详情

     决策树时一种常用的数据挖掘算法,其优势在于数据形式非常容易理解,缺点在于很可能产生过度匹配的问题(即过拟合问题,如何解决过拟合问题待续.......)。决策树的一个重要任务就是为了理解数据中所蕴含的数据信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列的规则,这些机器根据数据集创建规则的过程,就是机器学习的过程。决策树给出的结果往往可以匹敌在当前领域具有几十年工作经验的人类专家。

    构造决策树:

面临的第一个问题:当前数据集上哪个特征在划分数据分类时起到决定性作用??为了找到决定性的特征,划分出最好的结果,我们需要对每个特征进行评估。创建决策树步骤大致如下:

  1.     寻找数据集中最好的特征
  2.     根据最好的特征划分数据集
  3.     再到划分好的数据集中去寻找这个子数据集中最好的特征,就是重复1,2步,直到检测到数据集中每个子项属于同一分类,或遍历完所有的特征,循环结束。创建分支函数createBranch()的伪代码如下:

     检测数据集中的每个子项是否属于同一分类:

              If so return 类标签

              Else 

                      寻找到划分数据集的最好特征

                      根据这个最好特征划分数据集

                      创建分支节点

                                    for 每个划分的子集

                                          调用函数createBranch并增加返回结果到分支节点中

                        return  分支节点                          


那么问题又来了,在一个数据集中,我们怎么找到一个最好特征来划分数据集呢??用什么衡量一个特征的好坏??划分数据的原则就是,将无序的数据变得更加有序。划分数据集的方法有多种,本文是通过信息增益(信息论知识)来衡量。信息增益是指数据集在划分之前之后的信息变化。信息熵通常用来度量集合信息。熵定义为信息的期望值。

信息计算公式如下:

                                           l(x_{i}) = - log_{2}p(x_{i})                                             其中p(x_{i})为x_{i}发生的概率

熵的计算公式如下:

                                        H = -\sum_{1}^{n}p(x_{i})log_{2}p(x_{i})

计算数据集信息熵的python代码实现如下:

from math import log
import operator
# 求数据集的信息熵,熵越大,说明不确定性就越高,说明类别就越多
def calcShannonEnt(dataSet):
    numEntrise = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:
        if len(featVec) > 0 :
            currentLabel = featVec[-1]
            if currentLabel not in labelCounts.keys():
                labelCounts[currentLabel] = 0
            labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntrise  # 求概率
        shannonEnt -= prob * log(prob,2) #求熵
    return shannonEnt

创建测试数据集可以用如下代码:

# 创建数据集
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

数据集的信息熵我们知道怎么求了,那么如何每个特征的信息增益呢?(信息增益最大的那个特征则是数据集中最好的那个特征,我们就可以根据这个特征去划分数据集了)信息增益是数据集划分前后的一个信息熵的变化差值,所以数据集被每个特征划分前数据集的信息熵和划分后的数据集的信息熵。那么我们有面临一个问题,如何根据特征来划分数据据呢??具体代码如下:

# 按照给定特征划分数据集
'''
dataSet:待划分的数据集
axis:划分数据集的特征
value:需要返回的特征的值(一个值对应一个数据集)
'''
def splitDataSet(dataSet,axis,value):
    retDataSet = []
    for featVec in dataSet:
        if featVec[axis] == value:
            reducedFeatVec = featVec[:axis]
            reducedFeatVec.extend(featVec[axis+1:])
            retDataSet.append(reducedFeatVec)
    return retDataSet

现在可以根据特征和需要返回的特征值来划分数据集了,接下来需要求的就是每个特征划分数据集时的信息增益了,信息增益最大的那个特征,就是最好划分数据集的特征,具体代码实现如下:

# 选择最好的数据集划分方式
def chooseBestFeatureToSplit(dataSet):
    numFeatures = len(dataSet[0])-1 # 获取特征的个数
    baseEntropy = calcShannonEnt(dataSet)  # 数据集的信息熵
    bastInfoGain = 0.0 ; bastFeature = -1 ;
    for i in range(numFeatures):
        featList = [example[i] for example in dataSet]  # 获取数据集中的某列
        uniqueVals = set(featList) # 转为set集合,达到去重效果
        newEntropy = 0.0
        for value in uniqueVals:
            subDataSet = splitDataSet(dataSet,i,value)
            prob = len(subDataSet)/float(len(dataSet))
            newEntropy += prob*calcShannonEnt(subDataSet)
        infoGain = baseEntropy - newEntropy     # 信息增益
        if(infoGain > bastInfoGain):           #求最好特征逻辑
            bastInfoGain = infoGain          
            bastFeature = i
    return bastFeature

现在求最好特征已经实现了,那么就可以开始递归构建决策树了。工作原理如下:获取原始数据集,然后基于最好的特征去划分数据集,由于特征值可能多于两个,因此可能存在两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点上,我们可以再次划分数据集,所以可以采用递归的思想。递归结束的条件有两个:1.程序遍历完所有的划分数据集的特征 2.每个分支下所有的实例都具有相同的分类。

构造决策树还有其他算法,如C4.5和CART,待后续研究....

当前算法任然存在问题,如:当所有的特征都遍历完了,类标签(特征值)仍然不唯一,此时应该如何定义这叶子节点呢?通常这种情况我们采用多数表决法,即少数服从多数的方法。具体代码实现如下:

# 多数表决法决定叶子节点的分类
def majorityCnt(classList):
    classCount = {}
    for vote in classList:
        if vote not in classCount.keys():
            classCount[vote] = 0
        classCount[vote] +=1
    sortedClassCount = sorted(classCount.__iter__(),key=operator.itemgetter(1),reverse=True)
    return  sortedClassCount[0][0]

接下来就是激动人心的时刻了,决策树构造。具体代码实现如下:

#创建树的函数代码
def createTree(dataSet,labels):
    classList = [example[-1] for example in dataSet]
    if classList.count(classList[0]) == len(classList):   # 递归停止条件之一:类别完全相同则停止继续划分
        return classList[0]
    if len(dataSet[0]) == 1 :                             # 递归停止条件之二:遍历完所有特征时返回出现次数最多的类别,多数表决法
        return majorityCnt(classList)
    bestFeat = chooseBestFeatureToSplit(dataSet)           #求划分数据集的最好的特征
    bestFeatLabel = labels[bestFeat]
    myTree = {bestFeatLabel:{}}
    del(labels[bestFeat])
    featValues = [example[bestFeat] for example in dataSet]
    uniqueVals = set(featValues)
    for value in uniqueVals:
        subLabels = labels[:]
        myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,bestFeat,value),subLabels)  #划分数据集等步骤
    return myTree

最终构造决策树如下:

       ps:哈哈哈,表述出来不容易啊,对决策树理解更清晰了。机器学习新手上路,老司机们多多关照,后续还有更新哦~~~

超声波雾化驱动设计:专用芯片FM8118替代MCU的工程实践 超声波雾化是一种基于压电陶瓷谐振原理的高频能量转换技术,其核心在于在1.6–2.4MHz频段精准激励雾化片以实现高效水分子破碎。传统采用通用MCU配合分立MOSFET的方案受限于PWM频率上限、栅极驱动能力不足及EMI控制困难,导致雾化效率低、温升高、可靠性差。专用雾化芯片(如FM8118)通过集成2.1MHz振荡器、零电压开关(ZVS)控制与过流/过热双重保护,从架构层面解决高频功率驱动的本质约束,显著提升驱动效率(达83.7%)与系统鲁棒性。该技术广泛适用于桌面加湿器、医疗雾化器、农业微喷等对体积、功耗 阅读详情

相关推荐

两轮差速移动机器人运动分析、建模和控制

两轮差速运动分析及建模运动学分析三种运动状态分析函数模型仿真验证直线验证曲线验证旋转验证运动控制 运动学分析 运动特性为两轮差速驱动,其底部后方两个同构驱动轮的转动为其提供动力,前方的随动轮起支撑作用并不推动其运动,如图1两轮差速驱动示意图所示。 定义其左右驱动轮的中心分别为Wl和Wr,且对应线速度为Vl和Vr,该值可以通过电机驱动接口输出的角转速ωl,ωr2和驱动轮半径r求得,即: Vl=r⋅...

启小新的博客 8万+

算法杂货铺——分类算法之决策树(Decision tree)

3.1、摘要       在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法。这两种算法都以贝叶斯定理为基础,可以对分类及决策问题进行概率推断。在这一篇文章中,将讨论另一种被广泛使用的分类算法——决策树(decision tree)。相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。 3.2、决策...

weixin_34009794的博客 800

K210开发板学习笔记(三)——STM32+K210+SD卡实现人脸识别(完整K210代码)

更新日记:2022年4月26日 更新了串口通信部分的内容,本文写的略为粗糙,恐有不当之处,希望大家不吝赐教。 人脸识别 一、MaixPy IDE开发 参考博主晨少hc的博文(https://blog.youkuaiyun.com/HuangChen666/article/details/113995079)来实现人脸识别功能,我用的硬件是亚博智能的K210开发板,在配置工程中有几步和这个博主的不一样,需要注意。 所需要的文件有:模型文件),脚本文件,ide需要的bin文件...

Embedded learner的博客 4万+

【Ch3】决策树

决策树原理 决策树(decision tree):是一种基本的分类与回归方法,此处主要讨论分类的决策树。在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。 用决策树分类:从根节点开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子节点,此时每个子节点对应着该特征的一个取值,如此递归的对实例进行测试并分配,直到到达叶节点,最后将实例分到叶节点的类中。 决策树基本知识 决策树学习的目标:根据给定的训练数据集构建一个决

qq_24887131的博客 323

空间数据库(1):Arcgis10.2连接PostgreSQL9.1,创建空间数据库,导入空间数据

1、arcgis的安装对于gis人员来说想必并不陌生,此处就不赘述了。那么就先从PostgreSQL说吧,我这里用的是跟Arcgis desktop 10.2所支持的9.1或者9.2版本,大家也可以用相对应的更高的版本来配置,注意的是版本一定要相互匹配,不仅是Arcgis与PostgreSQL的匹配,还有PostgreSQL与PostGIS匹配。 按道理desktop是32位的,应该用PostgreSQL的32位,但是我实在找不到32位的PostGIS9.1,所以就用64位的吧,后面配置部分可能需

XIAOHUA的博客 1318

模型算力需求估算

(Billion Parameters,简称B)和训练/推理的计算任务复杂度,结合硬件计算能力(例如每秒浮点运算次数,FLOPS)来估算。以下是详细的方法和公式说明,以及实际的计算示例。算力需求的估算依赖于参数量、模型架构及硬件性能,结合训练/推理场景的特定要求来计算。通过上述公式和示例,我们可以定量分析不同任务的算力需求,并合理配置硬件资源以优化运行效率。结论:推理任务相对较轻,单台H100可以在30秒内完成此任务。推理算力需求一般远低于训练,因为只需要执行前向传播。,可以将训练时间缩短到约。

形上得其象,形下合于数;阴阳自济,玄理自明。 8955

决策树 Decision Tree

本文主要简单介绍了决策树的基本概念,优缺点,应用场景,决策树建模时的注意事项,python的实现方法,案例和模型参数等。

JasonH2021的博客 5395

IsaacLab从入门到精通(二) 导入自定义机器人

IsaacLab系列第二讲,导入自定义的机器人及设置

DejaWu33的博客 8467

HCIA-AI 3.0题库

(多选)1.下列哪些属于 AI 的子领域? A.机器学习 B.计算机视觉 C.语音识别 D.自然语言处理 答案:ABCD (判断)2.语音识别指的是将音频数据识别为文本数据。 A.TRUE B.FALSE 答案:A (单选)3.人工智能的三个阶段包含了计算智能、() 、认知智能。 A.弱人工智能 B.感知智能 C.行为智能 D.强人工智能 答案:B (单选)4.下列选项中不属于华为全栈解决方案范畴的是? A.应用使能 B.边缘计算 C.开源框架 D.芯片使能 答案:B (多选)5.人工智能包括哪些要素? A

别不开心ovo 1万+

ChatGPT启蒙之旅:弟弟妹妹的关键概念入门

本文主要介绍了ChatGPT启蒙之旅:弟弟妹妹的关键概念探险,希望能对初学大模型的同学们有所帮助。 文章目录 1. 背景 2. GPT是个什么样的人? 3. GPT使用的核心思维 4. GPT使用的场景介绍

herosunly的博客 16万+

将 AMDP Function Implementations 讲透:从 SAP CDS View 表函数到 AMDP 方法的完整实战与最佳实践

AMDP函数实现:连接ABAP与HANA的高效桥梁 本文面向ABAP开发者,详细解析AMDP函数实现技术,帮助在SAP HANA环境中充分发挥数据库算力。核心内容包括: 技术价值:解决复杂计算场景(窗口函数、跨表聚合等)中Open SQL和CDS的局限性 两种实现类型:内部复用函数与CDS表函数实现,对比其声明规则和用途差异 关键语法要点:FOR TABLE FUNCTION绑定、只读约束、参数与返回类型自动生成机制 实战应用:以采购订单聚合为例,展示AMDP在实时报表中的性能优势 完整示例:提供基于航线数

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 386

机器学习——决策树的创建

简单来说决策树就是一棵树,一颗决策树包含一个根节点、若干个内部结点和若干个叶结点,叶结点就是问题的决策结果。也就是说一棵树包括根节点、父节点、子节点、叶子节点。子节点由父节点分裂出来,然后子节点作为新的父节点继续分裂,直到得出最终结果。优点:易于理解和解释,决策树分类很快,可以处理不相关特征数据。缺点: 对缺失数据的数据集处理困难。它构建过程是一个递归的过程,需要确定停止条件,否则过程将不会结束。很容易出现过拟合问题。

Gucciwei的博客 4268

【AI Agent 记忆共享实战】【下篇】多 Agent 会话 Session 统一共享实战:全链路工程落地、采集归一、MCP 服务、私有化部署、源码级实战

中篇我们已经锁定最终最优架构方案: 非侵入式、外部旁路采集、只读归一、中心化存储、MCP 按需检索注入。摒弃「改 Agent 源码」「软链接互通」「原生 Session 互导」等不现实方案。本篇直接落地可上线、可简历复用、可个人私有化部署多 Agent 异构 Session专属采集器(Claude/CODex/DSH/OpenCode/Kimi/WorkBuddy/ 豆包)统一消息归一化解析层(解决所有 Schema 异构)增量同步、去重、时间戳对齐核心逻辑。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 483

决策树(decision tree)(一)——构造决策树方法

决策树(decision tree) 说明:这篇博客是看周志华老师的《机器学习》(西瓜书)的笔记总结,博客中有大段文字摘自周老师的《机器学习》书,仅供学习交流使用。转载博客务必注明出处和作者,谢谢。 决策树算法起源于E.B.Hunt等人于1966年发表的论文“experiments in Induction”,但真正让决策树成为机器学习主流算法的还是Quinlan(罗斯.昆兰)大神(2011年

天泽28的专栏 10万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

决策树(decision tree)(一)——构造决策树方法

决策树(decision tree)(一)——构造决策树方法 转载自:https://blog.youkuaiyun.com/u012328159/article/details/70...

qq_23018775的博客 475

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

决策树模型案例_树模型(一)——树的构造

前言树模型是最常见的机器学习方法之一,也是入门机器学习必须掌握的基础。树模型通常分为分类树和回归树。在分类树中,即主要针对目标变量是离散变量(一般为二元变量)的情形,树模型的普遍使用是源于其构造方法成熟且相对简单,易于从概念上理解。一棵树的构建可以简单理解为多个判断规则的多路径分类,根据单个样本分到其中一类。从数据的分类规则上看,树模型可以理解为一系列if-then-else组合;从统计...

weixin_35698035的博客 2190

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

决策树的经典构造算法(一)——ID3

ID3算法是1986年由Quilan提出的,它是一个从上到下、分而治之的归纳过程。ID3算法的核心是:在决策树各级结点上选择属性时,通过计算信息增益来选择属性,以使得在每一个非叶结点进行测试时,能获得关于被测试记录最大的类别信息...

cuanyangpa3685的博客 580

决策树

决策树(decision tree) 决策树构造 转载于:https://www.cnblogs.com/yangwenhuan/p/7750100.html

weixin_30451709的博客 70

机器学习算法(三) 决策树 (一) 构造决策树的方法

决策树模型 适用对象 : 分类和回归方法 主要优点 :模型具有可读性,分类速度快 学习步骤 :特征选择、决策树的生成、决策树的修剪 主要来源:Quinlan 在 1986 年提出的 ID3 算法和 1993 年提出的C4.5算法,       Breiman在1984年提出的CART算法 学习本质 : 是从训练数据集中归纳出一组分类规则。 本文先介绍构造分类决策树的方法,然后会在后面的...

NaLaEur的博客 659

机器学习笔记(六) 决策树

决策树是一种基本的分类与回归的方法。在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。        决策树的学习过程通常包括三个步骤:特征选择,决策树的生成,决策树的剪枝。        决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现很适用。   1.  决

lllzy的博客 786

根据信息增益率构造决策树_机器学习实战:决策树(一)信息增益

优快云:https://blog.youkuaiyun.com/weixin_45814668微信公众号:qiongjian0427Git:https://github.com/qiongjian/Machine-learning/​github.com运行环境:anaconda—jupyter notebookPython版本:Python31. 简介 k-近邻算法最大的缺点就是无法给出数据的内在含义,决...

weixin_34725044的博客 1938

决策树(机器学习)

决策树是一种常见的机器学习算法,它被广泛用于分类和回归问题。决策树模型的主要思想是通过对特征进行递归分割,构建一棵树状的结构来对数据进行预测。在决策树中,每个内部节点表示对一个特征的判断,每个叶子节点表示一个类别或一个回归值。决策树的构建过程主要包括特征选择、节点划分和剪枝三个主要步骤。特征选择决定了在每个节点上选择哪个特征来进行划分,常用的特征选择指标包括信息增益、信息增益比、基尼系数等。节点划分是通过选择一个划分点将数据划分为更纯的子节点,常见的划分方法有ID3、C4.5、CART等。

m0_72115396的博客 639

机器学习——决策树(Decision Tree)

决策树是一种模仿人类决策过程的机器学习算法,它通过学习简单的决策规则来预测目标变量的值。决策树模型由节点和边组成,形成一个树状结构。树的每个内部节点表示一个特征上的判断,每个边代表判断的结果,而每个叶子节点代表一个类别或决策结果。今天由我来向大家介绍决策树的相关算法以及如何构造和实现决策树。决策树(Decision Tree)是从一组无次序、无规则,但有类别标号的样本集中推导出的、树形表示的分类规则。一般的,一棵决策树包含一个根结点、若干个内部结点(中间结点)和若干个叶子结点。

zdx2585503940的博客 5480

分类算法 - 决策树(构造、推导、计算、剪枝过程)

决策树是一种基本分类和和回归方法,本篇主要讨论分类决策树,主要从决策树的构造、决策树的修剪等方面进行介绍,本文主要参考《机器学习实战》、《统计学习方法》和网上的一些帖子,进行的总结学习。 分类算法 - 决策树1.概念2. 决策树的构造2.1 特征选择2.1.1 信息增益2.1.2 信息增益率2.1.3 基尼指数2.2 决策树的生成2.2.1 ID3算法2.2.2 C4.5算法2.2.3 CART数算法2.3 剪枝3.决策树的存储4.决策树实例5. 总结6. 参考 1.概念 决策树是一种通过抓取数据中所隐含

qq602683200的博客 1922

机器学习实战之决策树

决策树1、决策树的构造1、决策树的一般算法流程 学习《机器学习实战》 1、决策树的构造 1、决策树的一般算法流程

不想做咸鱼的咸鱼的专栏 1371
上一篇: LVM(逻辑卷管理)
下一篇: python中yield关键字
斜杆小刘
博客等级 码龄10年 6粉丝 19原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值