[Python源码解析]机器学习-决策树

跨界创新:程序员职业流动的新趋势 在当今科技飞速发展的时代,各个行业之间的界限逐渐模糊,跨界创新成为推动社会进步和经济发展的重要力量。程序员作为科技领域的核心群体,其职业流动也呈现出跨界创新的新趋势。本文旨在深入研究这一趋势,分析其产生的原因、表现形式、带来的影响以及未来的发展方向。范围涵盖了程序员在不同行业之间的跨界流动,以及由此引发的技术融合、创新模式等方面的变化。本文将按照以下结构展开:首先介绍相关背景知识,包括目的、预期读者和文档结构概述以及术语表; 阅读详情

在学习机器学习的源码,记录下对该代码的理解。

1.1 计算数据集的熵

待分析的数据集列表如下,首先根据表3-1构建数据集。

源码如下:

def createDataSet():
    dataSet = [[1, 1, 'yes'], #index=0,就是“不浮出水面是否可以生存”,index=1,就是“是否有脚蹼”,最后一个是"是否鱼类"
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
    labels = ['no surfacing','flippers']
    #change to discrete values
    return dataSet, labels

这个比较简单。

计算该数据集熵的源码:

def calcShannonEnt(dataSet):
    numEntries = len(dataSet)#该数据集长度,即有多少个数据,这里等于5
    labelCounts = {}#特征结果字典,比如以index=2,对数据集进行分类,则labelCounts就是yes和no的个数统计,YES:2, no:3;这样的字典。
    for featVec in dataSet: #the the number of unique elements and their occurance,逐行遍历
        currentLabel = featVec[-1]#取每个元素的倒数第一个值,也就是index=2这一列
        if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0#如果字典中,不包含当前特征值,则字典中加入该特征。
        labelCounts[currentLabel] += 1#该特征计数
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries#分别计算YES和NO 出现的概率,这里分别为0.6,和0.4
        shannonEnt -= prob * log(prob,2) #log base 2#根据计数公式,计算熵
    return shannonEnt

1.2 根据特征,划分数据集

dataSet就是数据集,axis就是选择的特征,value,就是对应特征的值。

这个方法比较简单,以上面的dataSet为例,如果axis=0,就是选择第一列特征,即:"不浮出水面是否可以生存";这个特征有两个值,就是1和0,所以对应的value就是1和0;

def splitDataSet(dataSet, axis, value):
    retDataSet = []
    for featVec in dataSet:
        if featVec[axis] == value:
            reducedFeatVec = featVec[:axis]     #chop out axis used for splitting
            reducedFeatVec.extend(featVec[axis+1:])
            retDataSet.append(reducedFeatVec)
    return retDataSet
    

如果分别执行执行以下代码:

subDataSet1 = splitDataSet(dataSet, 0, 1)
subDataSet2= splitDataSet(dataSet, 0, 0)

分别得到结果是:

subDataSet1 =     subDataSet2 = 

可见,这个方法就是根据特征值的不同把数据集划分子数据集。在这里,就是根据特征“不浮出水面是否可以生存”的值1和0,分成了两个上图两个子集。


1.3 选择最佳分类特征

当我们拿到一个数据集,需要用决策树进行分类是,我们如何从众多特征中选择一个特征,作为决策树的第一个分类点呢?比如上述“不浮出水面是否可以生存” 和“是否有脚蹼”这两个特征,我们应该先选哪个特征进行分类呢?

这就需要用到1.1和1.2的分类方法。

def chooseBestFeatureToSplit(dataSet):
    numFeatures = len(dataSet[0]) - 1      #the last column is used for the labels 计算特征个数,这个例子中等于2
    baseEntropy = calcShannonEnt(dataSet)#计算原始数据集的熵
    bestInfoGain = 0.0; bestFeature = -1
    for i in range(numFeatures):        #iterate over all the features,根据特征进行迭代,从index=0,到1;
        #获取index=0的特征对应的所有值,即取dataSet矩阵每列的所有值。     
        featList = [example[i] for example in dataSet]#create a list of all the examples of this feature,
        uniqueVals = set(featList)       #get a set of unique values,统计每个特征对应的值有多少可能,比如这里index=0的特征,只有两个值0,1
        newEntropy = 0.0
        for value in uniqueVals:
            subDataSet = splitDataSet(dataSet, i, value)#针对每个特征,划分子集
            #比如对index=0的特征进行子集划分,特征值为0的有2个,为1的有3个;权重分别为2/5,  3/5
            prob = len(subDataSet)/float(len(dataSet))#计算每个子集的权重,
            newEntropy += prob * calcShannonEnt(subDataSet)#计算总熵值,权重*子熵     
        infoGain = baseEntropy - newEntropy     #calculate the info gain; ie reduction in entropy,计算分类后熵和原来熵的差值
        if (infoGain > bestInfoGain):       #compare this to the best gain so far,差值越大,(也就是子集熵越小),分类越合理。
            bestInfoGain = infoGain         #if better than current best, set to best
            bestFeature = i
    return bestFeature                      #returns an integer

综合来说,就是根据特征值,进行分类,计算每个分类之后熵值的大小,然后进行排序,熵值越小,分类越合理。

就优先以该特征值进行划分。





决策树:机器学习中的分类与回归利器 决策树借树状结构决策,用于分类与回归。经选特征、分割等步骤构建,有优缺点,可用Python的scikit - learn库实现及可视化。 阅读详情

相关推荐

《机器学习实战》源码精讲:从算法原理到工程化实现

机器学习算法是人工智能领域的核心基础,其原理通常通过数学公式进行描述。理解算法从理论到实践的关键,在于掌握如何将抽象的数学公式转化为可执行的代码逻辑。这一过程不仅加深了对算法本质的理解,更能提升工程实践能力,例如通过向量化运算优化性能、实现模型持久化以及进行超参数调优。在实际应用中,诸如支持向量机(SVM)、决策树等经典算法,常被用于分类、回归等场景。本文以《机器学习实战》源码为蓝本,详细剖析了k-近邻、决策树与支持向量机(SVM)等核心算法的代码实现,并分享了从代码调试到工程化改造的实战经验,帮助开发者跨

weixin_30482181的博客 336

参数调优:K折交叉验证与GridSearch网格搜索

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 一、K折交叉验证 在机器学习中,因为训练集和测试集的数据划分是随机的,所以有时会重复地使用数据,以便更好地评估模型的有效性,并选出最好的模型,该做法称为交叉验证。具体而言就是对原始样本数据进行切分,然后组合成为多组不同的训练集和测试集,用训练集训练模型,用测试集评估模型。某次的训练集可能是下次的测试集,故而称为交叉验证。 交叉验证的方法有简单交叉验证、K折交叉验证和留一交叉验证3种。其中K折交叉验证应用较为广泛,它是指将数据集随机等分.

m0_46388544的博客 3206

基于python的决策树源代码

基于python的决策树源代码基于python的决策树源代码基于python的决策树源代码

决策树算法

参考链接: https://blog.youkuaiyun.com/asialee_bird/article/details/81118245 https://blog.youkuaiyun.com/github_39261590/article/details/76546281 决策树算法:ID3、C4.5、CART ID3:选择信息熵增益最大的feature作为node,实现对数据的归纳分类。 C4.5:是ID3的一个改进,比ID3准确率高且快,可以处理连续值和有缺失值的feature。 CART:使用基尼指数的划分准则

gm_Ergou的博客 941

机器学习-决策树python代码实现

基于Python的决策树的代码实现,包含了信息增益的计算,数据集的划分以及使用递归算法进行决策树的构建,还有将决策树的绘制代码

python决策树代码

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

机器学习之决策树详解及Python实现

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别(在分类中)或一个实值(在回归中)。从根到叶节点的每条路径代表了一个分类规则。决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树。

m0_74739796的博客 1727

解读python如何实现决策树算法

数据描述 每条数据项储存在列表中,最后一列储存结果 多条数据项形成数据集 data=[[d1,d2,d3...dn,result], [d1,d2,d3...dn,result], . . [d1,d2,d3...dn,result]] 决策树数据结构 class DecisionNode: '''决策树节点 ''' def __init__(self,col=-1,value=None,results=None,tb=None,fb=None): '''初始化决策树节点 args: col -- 按数据集的

python机器学习算法之决策树入门讲解

决策树(Decision Tree),它是一种以树形数据结构来展示决策规则和分类结果的模型,作为一种归纳学习算法,其重点是将看似无序、杂乱的已知数据,通过某种技术手段将它们转化成可以预测未知数据的树状模型,每一条从根结点(对最终分类结果贡献最大的属性)到叶子结点(最终分类结果)的路径都代表一条决策的规则。上面的说法过于抽象,下面来看一个实际的例子。案例:判断一个水果是不是苹果。

2301_82059354的博客 1996

决策树剪枝算法的python实现方法详解

主要介绍了决策树剪枝算法的python实现方法,结合实例形式较为详细的分析了决策树剪枝算法的概念、原理并结合实例形式分析了Python相关实现技巧,需要的朋友可以参考下

DSP TMS320FF28335程序从FLASH中拷贝到RAM中的两种方法及FLASH烧写方法

程序从FLASH中拷贝到RAM中执行的方法 DSP的程序下载执行方式有两种:一种是下载到RAM中在线执行,一种是下载到FLASH中执行。在RAM中执行时,具有执行速度快,可以无限次下载的特点,但是RAM的特点是掉电丢失数据。FLASH具有掉电不丢失数据的特点,但是同时存在执行速度慢和擦写次数有限的缺点。因此综合两者的特点,在DSP的开发过程中一般会结合使用两者。在前期程序调试过程,由于需要频繁的

AEECREN的博客 1万+

python机器学习:决策树详解

文章目录一、决策树工作原理1.1 定义1.2 决策树结构1.3 核心问题二、sklearn库中的决策树2.1 模块sklearn.tree2.2 sklearn建模基本流程三、分类树3.1构造函数 一、决策树工作原理 1.1 定义 决策时(Decislon Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则。并用树状图的结构来呈现这些规则,**以解决分类和回归问题。**决策树算法的本质是一种图结构, 我们只需要问一系列问题就可以对数据进行分类。 举例:动物类别分类 已知

oax_knud的博客 3万+

【NVIDIA Jetson Orin系列 - 安装NVIDIA SDK Manager】

NVIDIA Jetson Orin - 安装NVIDIA SDK Manager

dally2的博客 2691

《Python机器学习与可视化分析实战》简介

赛季数据可视化分析、聚类算法与可视化实战、线性回归与可视化实战、逻辑回归与可视化实战、决策树算法与可视化实战、基于深度学习的酒店评论情感分类实战、基于深度学习的手写体图像识别实战、本书内容详尽、示例丰富,是机器学习初学者的入门书和必备的参考书,也可作为高等院校计算机及大数据相关专业的教材使用。详解聚类、线性回归、逻辑回归、决策树算法原理、实现及可视化。深度学习从零开始学》《深度学习的数学原理与实现》等图书。酒店评论情感分类可视化实战、手写体图像识别可视化实战。机器学习与可视化入门书,配套示例源码、

夏天又到了的专栏 466

Excel炒股党必备:手把手教你用Power Query免费获取并刷新股票历史数据

本文详细介绍了如何利用Excel中的Power Query工具免费获取并自动刷新股票历史数据,特别适合Excel炒股党。从环境配置、数据源选择到实战操作,手把手教你建立智能数据管道,实现高效投资分析。通过参数化股票代码和定时刷新功能,大幅提升数据更新效率。

weixin_26767391的博客 654

ABB机器人姿态与四元数(笔记)

通常使用机器人作业时,机器人的法兰轴(5轴)往往是垂直与作业平面的,此时需要将机器人的姿态调整(示教)到垂直于工作平面的状态,然后记录当前的姿态,作为之后作业的参考标准姿态。不同机器人表示控件姿态的方式不一样,但也无外乎3中:旋转矩阵、欧拉角和四元数。 ABB机器人使用的是四元数(可转欧拉角)作为机器人控件姿态的表示方式。这里主要是记录在不通过示教的方式下,如何定义四元数,使机器人达到垂直于工作平面的姿态。 5轴竖直向下(常用):此时,各轴角度为 [0,0,0,0,9...

Zythonista的博客 1万+

【Python特征工程系列】8步教你用决策树模型分析特征重要性(源码)

8步教你用决策树模型分析特征重要性(源码)

数据杂坛 2627

基于python的超市历年数据可视化分析

包含:Order_Date Sales Quantity Profit year month。所有这些物品都在美国4个地区的49个州销售,来着793位客户的5009个订单。9994行,21列数据。

m0_74872863的博客 535

机器学习--决策树实验及源码(Python版)

【实验原理】 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3,...

LiuSong的博客 5324

DDR4 硬件设计笔记

DDR4-DRAM是第四代支持双倍数据读取,支持随机位置存取的静态存储器。DDR4-DRAM的工作原理。DDR之T拓扑和Fly-by拓扑。DDR的硬件设计。DDR4 PCB设计要点介绍。DDR4之PCB走线间距的串扰评估。DDR4之内存通道(channel)和内存列(rank)。

qq_26815321的博客 1万+

手把手带你死磕ORBSLAM3源代码(一)目录详解

ORB-SLAM3是一种基于特征点的稀疏实时单目SLAM(Simultaneous Localization and Mapping)系统。它是ORB-SLAM系列模型的第三代版本,用于在无人机、机器人和增强现实等领域中进行实时定位和建图。ORB-SLAM3使用了一种特征点提取和描述算法,称为ORB(Oriented FAST and Rotated BRIEF)。该算法能够提取图像中的稳定特征,并将其用于地图建立和相机定位。

anananajiushiwo的博客 2299

Python实现决策树算法:完整源码逐行解析

接下来,我们需要定义一个表示决策树节点的类 Node 和一个表示决策树本身的类 Tree。feature:节点的划分特征的索引,如果是叶子节点,则为 Nonevalue:节点的划分特征的值,如果是叶子节点,则为 Nonelabel:节点的类别标签,如果是叶子节点,则为该节点所属的类别,如果是非叶子节点,则为该节点所包含的样本中最多的类别left:节点的左子树,如果没有,则为 Noneright:节点的右子树,如果没有,则为 Noneroot:树的根节点,初始为 None。

TaloyerG的博客 8174

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

【机器学习】决策树源码讲解

一、什么是决策树 本章着重对算法部分进行讲解,原理部分不过多叙述,有兴趣的小伙伴可以自行查阅其他文献/文章 决策树(decision tree)是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。 其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根...

LiuZ的博客 2885

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

【Python机器学习系列】建立决策树模型预测心脏疾病(完整实现过程)

建立决策树模型预测心脏疾病(完整实现过程)

数据杂坛 1348

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

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

【Python机器学习系列】一文教你实现决策树模型可视化(案例+源码)

一文教你实现决策树模型可视化(案例+源码)

数据杂坛 884

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

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

上一篇: OC代码规范总结
下一篇: 【Mac】NSTextField And AutoLayout: Autogrow height -> Programmatically
StreamH
博客等级 码龄21年 47粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值