机器学习实战:决策树_ID3算法

机器学习2:决策树--基于信息增益的ID3算法 下表是一个由 16 个样本组成的感冒诊断训练数据集D。每个样本由四个特征组成,即体温、流鼻涕、肌肉疼、头疼。其中体温特征有 3 个可能取值:普通、较高、非常高;流鼻涕,肌肉疼、头疼分别有两个可能取值:是、否; 样本的标注值为是否感冒。 阅读详情

都在代码里了

trees.py

from math import log

def calcShannonEnt(dataSet):
	numEntries = len(dataSet)
	labelCounts = {}
	for featVec in dataSet:
		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])/numEntries
		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

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 # 获取我们样本集中的某一个样本的特征数
   								    #(因为每一个样本的特征数是相同的,相当
   								    # 于这个代码就是我们可以作为分类依据的所
   								    # 有特征个数)我们的样本最后一列是样本所
   								    # 属的类别,所以要减去类别信息,在我们的
   								    # 例子中特征数就是2

    baseEntropy = calcShannonEnt(dataSet) #计算样本的初始香农熵
    bestInfoGain =0.0 #初始化最大信息增益
    bestFeature = -1  #和最佳划分特征

    for i in range(numFeatures): # range(2)那么i的取值就是0,1。 在这里i表示
    							 # 的我们的第几个特征
        featList = [sample[i] for sample in dataSet]
        # 我们首先遍历整个数据集,首先得到第一个特征值可能的取值,然后把它赋值给
        # 一个链表,我们第一个特征值取值是[1,1,1,0,0],其实只有【1,0】两个取值
        uniqueVals = set(featList)# 我们使用集合这个数据类型删除多余重复的原始使
        						  # 得其中只有唯一的值。
        #执行的结果如下所示:
        
        # In [8]: featList=[1,1,1,0,0]

        # In [9]: uniqueVals=set(featList)

        # In [10]: uniqueVals
        # Out[10]: {0, 1}

   
        newEntropy = 0.0
        for value in uniqueVals: # uniqueVals中保存的是我们某个样本的特征值的所有
        						 # 的取值的可能性
            subDataSet = splitDataSet(dataSet,i,value)
            # 在这里划分数据集,比如说第一个特征的第一个取值得到一个子集,第一个
            # 特征的特征又会得到另一个特征。当然这是第二次循环
            prob = len(subDataSet)/float(len(dataSet))# 我们以第一个特征来说明,根
            										  # 据第一个特征可能的取值划分
            										  # 出来的子集的概率
            newEntropy += prob * calcShannonEnt(subDataSet)

        infoGain = baseEntropy - newEntropy # 计算出信息增益
        if(infoGain > bestInfoGain):
            bestInfoGain = infoGain
            bestFeature = i

    return bestFeature

def majorityCnt(classList): # 传入的参数是已经划分完所有特征之后剩余的数据集,
#例如[['yes'],['yes'],['maybe']]
    classCount={} #创建一个字典
    for vote in classList:  
        if vote not in classCount.keys():
            classCount[vote] = 0
        classCount[vote] += 1
        # 根据上述的语句,以及我们的例子,我们最终可以得到的结果如下: 
        # {'yes':2,'maybe':1}
        sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)

# 使用字典iteritems
    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] #stop splitting when all of the classes are equal
    if len(dataSet[0]) == 1: 
        return majorityCnt(classList)
		
    bestFeat = chooseBestFeatureToSplit(dataSet)
    bestFeatLabel = labels[bestFeat]
    myTree = {bestFeatLabel:{}}
    subLabels = labels[:]   #copy all of labels, so trees don't mess up
   									    #existing labels
    del(subLabels[bestFeat])
    featValues = [example[bestFeat] for example in dataSet]
    uniqueVals = set(featValues)
    for value in uniqueVals: 
        myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels)
    return myTree           

treePlotter.py

import matplotlib.pyplot as plt

decisionNode = dict(boxstyle="sawtooth", fc="0.8") # 决策节点的属性。boxstyle为文本框的类型,
                                                    # sawtooth是锯齿形,fc是边框线粗细
# 可以写为decisionNode={boxstyle:'sawtooth',fc:'0.8'}
leafNode = dict(boxstyle="round4", fc="0.8") #决策树叶子节点的属性
arrow_args = dict(arrowstyle = "<-") #箭头的属性

# def plotNode(nodeTxt, centerPt, parentPt, nodeType):
#     createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction', xytext=centerPt, textcoords='axes fraction',
#                             va="center", ha="center", bbox=nodeType, arrowprops=arrow_args)
#     #nodeTxt为要显示的文本,centerPt为文本的中心点,parentPt为箭头指向文本的箭尾点,xy是箭头尾的坐标
#     #xytext -- 为注解内容位置坐标,当该值为None时,注解内容放置在xy处
#     #xycoords和textcoords是坐标xy与xytext的说明(按轴坐标),若textcoords=None,则默认textcoords与xycoords相同,若都未设
#     #置,默认为data
#     #va/ha设置节点框中文字的位置,va为纵向取值为(u'top', u'bottom', u'center', u'baseline'),ha为横向取值
#     #为(u'center', u'right', u'left')

# def createPlot():
#     fig = plt.figure(1, facecolor = 'white') #创建一个画布,背景为白色
#     fig.clf() #画布清空
#     #ax1是函数createPlot的一个属性,这个可以在函数里面定义也可以在函数定义后加入也可以
#     createPlot.ax1 = plt.subplot(111, frameon = True) #frameon表示是否绘制坐标轴矩形
#     plotNode('a decision node', (0.5, 0.1), (0.1, 0.5), decisionNode)
#     plotNode('a leaf node', (0.8, 0.1), (0.3, 0.8), leafNode)
#     plt.show()

# createPlot()

def getNumLeafs(myTree):
    numLeafs = 0
    firstStr = list(myTree.keys())[0]
    secondDict = myTree[firstStr]
    for key in secondDict.keys():
        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes
            numLeafs += getNumLeafs(secondDict[key])
        else:   numLeafs +=1
    return numLeafs

def getTreeDepth(myTree):
    maxDepth = 0
    firstStr = list(myTree.keys())[0]
    secondDict = myTree[firstStr]
    for key in secondDict.keys():
        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes
            thisDepth = 1 + getTreeDepth(secondDict[key])
        else:   thisDepth = 1
        if thisDepth > maxDepth: maxDepth = thisDepth
    return maxDepth

# 画出一个以centerPt为中心的结点 和 一个以parentPt为箭尾,centerPt为箭头的箭,并且结点中会有文字nodeTxt
def plotNode(nodeTxt, centerPt, parentPt, nodeType):
    createPlot.ax1.annotate(nodeTxt, xy=parentPt,  xycoords='axes fraction',\
             xytext=centerPt, textcoords='axes fraction',\
             va="center", ha="center", bbox=nodeType, arrowprops=arrow_args)

# 在点cntrPt和parentPt之间写点文字txtString
def plotMidText(cntrPt, parentPt, txtString):
    xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0]
    yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1]
    createPlot.ax1.text(xMid, yMid, txtString, va="center", ha="center", rotation=30)


def plotTree(myTree, parentPt, nodeTxt):#这里nodeTxt是为箭头准备的,也就是写在箭头中间的文字
    numLeafs = getNumLeafs(myTree)  #this determines the x width of this tree
    depth = getTreeDepth(myTree)
    firstStr = list(myTree.keys())[0]     #the text label for this node should be this
    cntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree.totalW, plotTree.yOff)  #cntr=center
    plotMidText(cntrPt, parentPt, nodeTxt)  # 这里看createPlot函数里的plotTree(inTree, (0.5,1.0), '')
                                            # 得出这里cntrPt、parentPt是同一个点(0.5,1.0),注释nodeTxt为空''
                                            # 所以在这个时候是没有效果的
    plotNode(firstStr, cntrPt, parentPt, decisionNode) # 这里firstStr是myTree这颗字典树的第一个决策结点的属性,比如:'根蒂=?'
                                                       # 同样,cntrPt、parentPt是同一个点(0.5,1.0),所以这里得出的效果是:
                                                       # 看不见箭头的一个带有firstStr文字的decisionNode类型的结点
    secondDict = myTree[firstStr]  #第一个子树secondDict
    plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalD  #结点高度降一度
    for key in secondDict.keys():
        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes   
            plotTree(secondDict[key],cntrPt,str(key))        #从这里开始,箭头中心需要留下父节点到子节点的属性值str(key)
        else:   #it's a leaf node print the leaf node
            plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalW
            plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leafNode)
            plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))
    plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalD #递归结束了,结点高度也要回归一度
#if you do get a dictonary you know it's a tree, and the first element will be another dict

def createPlot(inTree):
    fig = plt.figure(1, facecolor='white')
    fig.clf()
    axprops = dict(xticks=[], yticks=[])
    createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)    #no ticks
    #createPlot.ax1 = plt.subplot(111, frameon=False) #ticks for demo puropses 
    plotTree.totalW = float(getNumLeafs(inTree))
    plotTree.totalD = float(getTreeDepth(inTree))
    plotTree.xOff = -0.5/plotTree.totalW; plotTree.yOff = 1.0;
    plotTree(inTree, (0.5,1.0), '')
    plt.show()

def retrieveTree(i):
    listOfTrees =[{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}},
                  {'no surfacing': {0: 'no', 1: {'flippers': {0: {'head': {0: 'no', 1: 'yes'}}, 1: 'no'}}}}
                  ]
    return listOfTrees[i]

# myTree = retrieveTree(1)
# createPlot(myTree)
【机器学习】机器学习之决策树(基于ID3、CART挑选西瓜) 目录 一、决策树介绍 1. 基本流程 2. 选择划分因素 (1)信息熵(information entropy) (2)信息增益 (information gain) (3)增益率(gain ratio) (4)基尼指数(Gini index) 二、实现基于信息增益准则(ID3)的决策树 1. 数据样本处理 2. 代码实现 (1)建立决策树 (2)绘制决策树 3. 结果分析 三、使用Sklearn库实现决策树 1. 基于信息增益准则( I D 3 ID3 ID3或 C 阅读详情

相关推荐

浅谈决策树算法以及matlab实现ID3算法

决策树方法在分类、预测、规则提取等领域有着广泛的应用。在20世纪70年代后期和80年代初期,机器学习研究者J.Ross Quinilan提出了ID3算法以后,决策树在机器学习、数据挖掘领域得到极大的发展。Quinilan后来又提出了C4.5,成为新的监督学习算法。1984年几位统计学家提出了CART分类算法。ID3和ART算法大约同时被提出,但都是采用类似的方法从训练样本中学习决策树的。决策树是一树

lfdanding的专栏 4万+

《机器学习实战》笔记——决策树(ID3)

闲来无事最近复习了一下ID3决策树算法,并凭着理解用pandas实现了一遍。对pandas更熟悉的朋友可供参考(链接如下)。相比本篇博文,更简明清晰,更适合复习用。 https://github.com/DianeSoHungry/ShallowMachineLearningCodeItOut/blob/master/ID3.ipynb 现在要介绍的是ID3决策...

H114754726的博客 314

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

tomcat启动时,启动过程日志中文乱码的处理方法。

寻码启示 1943

id3决策树_机器学习之决策树ID3(python实现)

机器学习之决策树ID3(python实现)机器学习中,决策树是一个预测模型;代表对象属性和对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉表示某个可能的属性,每个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值。决策树只有单一输出,若想要复数输出,可以建立独立的决策树以处理不同输入。 数据挖掘中常用到决策树,可以用于分析数据,也可以用于预测。简单理解如上图, 前两个是属...

weixin_39540426的博客 284

西门子 S7-200 SMART 系列六:手把手教你配置S7-200 SMART Modbus RTU

最新发表:https://www.ics-pedia.com/%e8%a5%bf%e9%97%a8%e5%ad%90-s7-200-smart-%e7%b3%bb%e5%88%97%e5%85%ad%ef%bc%9a%e6%89%8b%e6%8a%8a%e6%89%8b%e6%95%99%e4%bd%a0%e9%85%8d%e7%bd%aes7-200-smart-modbus-rtu%e5%ae%9e%e4%be%8b/

John_09040211的博客 3279

ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法

本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。

weixin_29189003的博客 407

代码注释:机器学习实战第3章 决策树

在学习的过程中发现书中很多代码并没有注释,这对新入门的同学是一个挑战,特此贴出我对代码做出的注释,仅供参考,欢迎指正。

da_da007的博客 1519

C++五子棋人机对战

使用C++,开发五子棋人机对战,快速提升C++项目开发能力。

程序员Rock的博客 5万+

根据PYTHON3修改机器学习实战之决策树 代码及注释

      from math import log import operator import treePlotter #计算给定数据集的香农熵的函数 def calcShannonEnt(dataSet): # 求list的长度,表示计算参与训练的数据量 numEntries=len(dataSet) labelCounts={} # 计算分类标签l...

毛豆豆的博客 680

航天设备研制中的形态分类:电性件、正样件及其他关键形态详解

航天设备的研制是一个高度复杂且严谨的工程过程,涉及多个阶段的不同产品形态。这些形态各具特点,在研制流程中承担着不同的验证任务和工程目标。本文将系统介绍航天设备研制中的主要形态,包括**电性件(EM)**、**正样件(FM)**以及**结构热控件(STM)**、**鉴定件(QM)**和**初样件(PFM)**等,详细解析它们的定义、用途和工程意义,帮助读者全面理解航天产品从设计到飞行的全生命周期管理。

ScilogyHunter的博客 1658

深入探讨:StoreKit 2的交易处理与收据验证

iOS应用开发中,StoreKit 2带来收据处理和交易验证的新变化。本文通过实例分析,对比传统StoreKit与StoreKit 2的差异,指出直接访问sandboxReceipt文件可能引发错误。解决方案是使用Transaction对象和SKReceiptRefreshRequest,详细介绍了如何初始化ReceiptLoader、处理交易更新及验证收据的完整流程,帮助开发者适应新框架,确保购买流程安全可靠。

m0_74337424的博客 357

机器学习实战:决策树--ID3算法实现

一、决策树概念:本质是一棵树 结构分:【叶子节点(预测结果)】 和 【非叶子节点:内部节点(划分属性----特征)】 可以看做一个if-then规则的集合。我们从决策树的根结点到每一个都叶结点构建一条规则。 如: 数据: 决策树: (图出自《机器学习》周志华) 属性划分可以选取任意一个特征来当作第一个划分的属性,如上图,第一个内部节点选取的是【纹理】这个特征. 但随便选取划...

zqzwzd的博客 657

Redhawk:什么是timing window?

STA timing file中timing window的作用和计算方式

m0_61544122的博客 1万+

python机器学习笔记:ID3决策树算法实战

  ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每一个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美的分类训练样例。 在此之前,推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。 I...

iFlyAI的博客 1188

【智能车Code review】——拐点的寻找

CROSSROAD:十字拐点 ROUNDISLAND:环岛拐点 rightfindflag[i]:表示第i行的右线是否被找到,1为找到,0为没有找到 flag_find_huan_rightdown_point :找到环岛右下拐点标志 flag_find_huan_rightmiddle_point:找到环岛右中拐点标志 找拐点的思路:观察一段数据中数据点的走向趋势,并且保证这段数据是准确的。在摄像头畸变比较严重的情况下这种方法不再适用 关于函数的调用请见:https://blog.youkuaiyun.com/qq.

hanhan的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

啃书 -《机器学习实战》:决策树(ID3算法)

决策树1.决策树的构造1.1 信息增益1.2 划分数据集1.3 构建决策树2 测试和储存分类器2.1测试算法:使用决策树执行分类2.2 使用算法:决策树的存储3.总结 我们经常使用决策树处理分类问题,决策树也是经常使用的数据挖掘算法。 它之所以如此流行,一个很重要的原因就是使用者基本上不用了解机器学习算法,也不用深究它是如何工作的。 图3-1所示的流程图就是一个决策树,正方形代表判断模块 (dec...

qq_43745578的博客 1767

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

机器学习:决策树——ID3和C4.5算法实现贷款审核实战

决策树(Decision Tree)是一种基本的分类与回归方法,在机器学习中被广泛应用,尤其适合处理结构化的、有明显规则逻辑的问题场景。它的核心思想是通过一系列“是/否”判断,不断将样本划分,直到最终落入一个明确的分类结果。比如选择好瓜的时候:我们可以认为色泽、根蒂、敲声是一个西瓜的三个特征,每次我们做出抉择都是基于这三个特征来把一个节点分成好几个新的节点。在上面的例子中,色泽、根蒂、声音特征选取完成后,开始进行决策,在我们的问题中,决策的内容实际上是将结果分成两类,即是(1)否(0)好瓜。

riririch的博客 889

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

机器学习实战Chp3:决策树--ID3算法

机器学习实战Chp3:决策树–ID3算法 绘制 树形图 模块 # -*- coding: utf-8 -*- """ Created on Tue Jun 26 21:55:37 2018 @author: muli """ # 可以作为绘制树的模板,直接调用即可 # 树的形式要求如下: # A={'no surfacing': {0: 'no', 1: {'flipp...

muli 536

决策树ID3算法:从信息熵到实战应用,构建可解释机器学习模型

在机器学习领域,分类与回归是两大核心任务,而决策树作为一种基础且强大的模型,因其出色的可解释性而备受青睐。其原理基于信息论,通过量化特征带来的信息增益,递归地选择最优分裂点,从而将数据划分为更纯净的子集。这种基于概率的决策方式,使得模型从简单的规则判断升级为数据驱动的智能系统,在金融风控、医疗诊断等需要模型透明度的场景中价值显著。以经典的ID3算法为例,它利用信息熵度量数据混乱度,并通过计算信息增益选择特征,有效解决了从数据中自动学习决策规则的问题。理解ID3及其演进算法C4.5和CART,是掌握随机森林、

weixin_29189377的博客 350

机器学习之决策树(ID3)算法与Python实现

机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测。

moxigandashu的博客 2万+

机器学习值决策树算法(上)-ID3实现

决策树算法(上)决策树算法上 决策树算法简介 决策树算法特点及应用 信息概念介绍 生成决策树 总结 1.决策树算法简介 决策树概念介绍 决策树算法是监督学习算法的其中一种,用于根据已有数据训练数据针对未知数据进行分类的一种算法,该算法的核心理念是通过不断的判断,递归,判断,来计算数据的分类。举例说明 概念可能不大好理解,举例就会清楚直观了,相信大多数人都有过生病的体验,找医生看病的时候,医生就会让你

u010867462的博客 1272

机器学习—决策树(ID3)

一、相关知识1 决策树算法     在构造决策树时,第一个需要解决的问题就是,如何确定出哪个特征在划分数据分类是起决定性作用,或者说使用哪个特征分类能实现最好的分类效果。这样,为了找到决定性的特征,划分川最好的结果,我们就需要评估每个特征。当找到最优特征后,依此特征,数据集就被划分为几个数据子集,这些数据自己会分布在该决策点的所有分支中。此时,如果某个分支下的数据属于同一类型,则该分支下的数据分类...

songzhiren5560的博客 802

《机器学习实战》—决策树

1 决策树的构造 在构造决策树之前,我们需要解决的第一个问题就是当前数据集上哪个特征在划分数据集上起决定性作用。为了划分出最好的效果,我们必须评估每个特征。 一般的划分数据采用二分法,而本文采用ID3算法划分数据集 上面的表包含了5个海洋生物的数据,两个特征以及把这些动物分成鱼类和非鱼类,现在我们决定是依据第一个特征还是第二个特征来划分数据。 2. 信息增益

Jipon 621

小白学习机器学习---第四章:决策树(2)

附上实现的ID3算法python代码~~~参考机器学习实战写的#-*- coding: UTF-8 -*- from math import log import operator from matplotlib.font_manager import FontProperties import matplotlib.pyplot as plt import copy #创建测试数据 def cr...

hx14301009的博客 434

机器学习实战第三章----决策树

决策树简介 与k-邻近算法(无法给出数据的内在含义)相比,决策树的主要优势是数据形式非常容易理解(可以自学习,在学习过程中,不需要使用者了解过多的背景知识、领域知识,只需要对训练实例进行较好的标注就可以自学习了) 简要理解呢,决策树就是把一堆散乱的数据按照一定的规则构建成直观明了的树形图!...

yyxyuxueYang的博客 391

机器学习实战-第3章-决策树算法(ID3)

详细介绍了《机器学习实战》书中的第3章-决策树的内容及python实现代码(所有代码使用pycharm测试均通过)。

weixin_43749999的博客 1679
上一篇: 机器学习实战
Fungiii
博客等级 码龄9年 2粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值