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

机器学习实战之决策树(一)构造决策树 决策树(一)构造决策树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:哈哈哈,表述出来不容易啊,对决策树理解更清晰了。机器学习新手上路,老司机们多多关照,后续还有更新哦~~~

42页Claude 3技术报告解读(Opus, Sonnet, Haiku) 在Claude 3模型中,增加了一个额外的原则到Claude的宪法中,以鼓励尊重残疾人权利,这一原则源自对集体宪法AI的研究。Claude 3模型的训练基于专有的混合数据集,包括截至2023年8月互联网上公开可用的信息,以及第三方提供的非公开数据、数据标注服务和付费承包商提供的数据,还有内部生成的数据。这些初始响应通常包含有害和有毒的内容。Claude 3模型家族在推理、编码和问答任务上展现出卓越的性能,特别是在行业标准基准测试中取得了显著的提升,证明了其在处理复杂问题和提供准确答案方面的能力。 阅读详情

相关推荐

02-Cesium-实现天地图标记

首先天地图申请token,然后Cesium-实现天地图标记详细说明

m0_62785037的博客 1171

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

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

weixin_34009794的博客 800

跨阻放大器(TIA)的输入输出阻抗的定义、分析和影响因素

跨阻放大器(Transimpedance Amplifier,简称TIA)是一种常用于将电流信号转换为电压信号的放大器。在TIA电路中,输入阻抗是指输入端对电流信号的响应能力,输出阻抗是指输出端对负载电阻的驱动能力。本文将分别介绍TIA的输入和输出阻抗的定义、分析以及影响因素。

weixin_44378594的博客 1万+

【Ch3】决策树

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

qq_24887131的博客 323

Tessent ICL语法详解:如何高效定义SIB、TDR和TAP模块

本文深入解析Tessent ICL语法,指导如何高效定义SIB、TDR和TAP模块以构建芯片测试网络。通过实战代码示例,详细阐述了各模块的端口声明、接口角色与核心寄存器定义,并提供了顶层集成连接方法与调试技巧,帮助DFT工程师精准描述测试仪器拓扑,提升Tessent工具链使用效率。

silver的专栏 492

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 473

决策树 Decision Tree

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

JasonH2021的博客 5395

Xilinx Aurora 8B/10B IP核详解和仿真

Xilinx Aurora 8b/10b IP核的详解,以及使用与仿真示例,对IP核的配置和如何仿真有非常详细的说明,除了对IP核官方文档的内容进行了解析以外,还对GTX引脚的选择等比较容易混淆和不好理解的地方进行了说明。最后对IP核的仿真运行进行了STEP BY STEP 的说明,对仿真的结果也进行了简要的说明。 该文档对Xilinx FPGA和ZYNQ SOC下 AURORA 8B/10B IP核的使用提供了一个快速上手的指导。

weixin_43354598的博客 1万+

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万+

译码器Multisim电路仿真汇总——硬件工程师笔记

本文详细介绍了74LS139D和74LS138D两种TTL译码器的功能特点及应用。74LS139D是2线-4线译码器,具有低电平有效输出和使能控制功能,常用于地址译码和数据分配。74LS138D是3线-8线译码器,通过3位输入实现8路输出控制,广泛应用于微处理器系统。文中提供了两种芯片的引脚说明、真值表和典型应用电路,并附有硬件工程师笔试面试相关资源链接。这些基础知识对数字电路设计和硬件工程师面试准备具有重要参考价值。

XU157303764的博客 1262

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(一)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)A. genvarB. integerC. wireD.reg参考答案:AA.综合的时候,define无法跨文件列表生效B.宏定义文件最好放在一个文件中集中管理,防止出现不同的项目需要修改不同的宏定义值,但是却漏改了某些地方的情况出现。

qq_42135020的博客 5781

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

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

Gucciwei的博客 4268

【原创教程】AB上位机FactoryTalk View的使用教程

条形图主要的作用就是根据绑定的变量中数字大小的变化来反映到图形中,随着数字的增加填充的颜色不断上升或随着数字的减小填充的颜色不断下降。绘图功能中常用的功能主要是:数字输入,数字输出,字符输入,字符输出,各种类型的的按钮,条状图,各类控件,系统自带的图形库。颜色指的是根据PLC变量的变化来改变图形的颜色,可以绑定BOOL量来显示两种颜色,也可以绑定字节,字,双字等来显示多种颜色。打开软件后右键点击画面选项然后点击新建则新建出一个画面,画面画好后点击保存并更改标题后新建的画面则会出现在画面选项的文件夹下。

Qinmingyue13的博客 4678

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

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

天泽28的专栏 10万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

qq_23018775的博客 475

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

weixin_35698035的博客 2190

lwip-2.0.3

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

决策树的经典构造算法(一)——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、付费专栏及课程。

余额充值