通俗易懂的机器学习——不依靠现有机器学习框架手动实现简易决策树

七、手写实现决策树算法 1. 实现决策树的前提:信息增益 信息增益: ​ 数据集合在被处理的之前之后,其信息发生的变化称为信息增益。 香农熵或熵: ​ 集合信息的度量方式称为香农熵或者简称为熵。 熵被定义为信息的期望值: 信息的定义 如果存在有多个分类(分类1、分类2...)的条件下,待分类的事务可能被划分为其中某个分类,则该事务($$x_i$$)的信息定义为: \[l(x_i) = -log_2P(x_i) \... 阅读详情

背景

本示例以面试为背景,选取了三个指标:是否为985,学历,编程语言来评判是否能被录取。

决策树建立过程

1)将所有指标添加进指标列表
2)计算指标列表中每个指标的熵,并按照最小熵的指标进行划分
3)如果能够成功划分则直接得出结果,否则将该指标从指标列表移除后执行步骤2)并将结果添加到决策树中

注:在本文中用字典来表示树的结构(多叉树)

依赖包

import numpy as np
from collections import Counter
from math import log2

计算信息熵

def entropy(y_label):
    counter = Counter(y_label)
    ent = 0.0
    for num in counter.values():
        p = num / len(y_label)
        ent += -p * log2(p)
    return ent

这里除了使用信息熵之外还可以使用基尼系数代替

计算基尼系数

def geni(y_label):
    counter = Counter(y_label)
    g = 1
    for num in counter.values():
        p = num / len(y_label)
        g -= p * p
    return g

定义决策树

class DecisionTree:
    def __init__(self):
        self.tree = {}
    #训练决策树
    def fit(self,X,y):
        cols = list(range(X.shape[1]))
        #对X得每一列数据,计算分割后得信息熵
        self.tree = self._genTree(cols, X, y)
    #递归生成决策树

    def _genTree(self, cols, X, y):
        # 计算最小信息熵得特征
        imin = cols[0] # 最下熵得列
        emin = 100 # 最小熵值
        for i in cols:
            coli = X[:,i]#拿到第i个特征数据
            enti = sum([entropy(y[coli==d]) for d in set(coli)]) # (也可以使用基尼系数计算,下同)
            if enti < emin:
                imin = i
                emin = enti
        #根据最小熵特征有几个值,就生成几个新的子树分支   
        newtree={}
        mincol = X[:,imin]
        cols.remove(imin)
        #针对这个特征得每个值,进一步划分树
        for d in set(mincol):
            entd = entropy(y[mincol==d])  # 计算信息熵
            if entd <1e-10:#已经完全分开
                newtree[d] = y[mincol==d][0]
            else:#还需要进一步细分
                newtree[d] = self._genTree(cols.copy(), X[mincol==d, :], y[mincol==d])
        return {imin: newtree}#将列号作为索引,返回新生成的树

    #预测新样本
    def predict(self, X):
        X = X.tolist()
        y = [None for i in range(len(X))]
        for i in range(len(X)):
            predictDict = self.tree
            while predictDict != 'Yes' and predictDict != 'No':
                col = list(predictDict.keys())[0]
                predictDict = predictDict[col]
                predictDict = predictDict[X[i][col]]
            else:
                y[i] = predictDict
        return y

测试

X=np.array([['Yes985','本科','C++'],
            ['Yes985','本科','Java'],
            ['No985' ,'硕士','Java'],
            ['No985' ,'硕士','C++'],
            ['Yes985','本科','Java'],
            ['No985' ,'硕士','C++'],
            ['Yes985','硕士','Java'],
            ['Yes985','博士','C++'],
            ['No985' ,'博士','Java'],
            ['No985' ,'本科','Java']])
y=np.array(['No','Yes','Yes','No','Yes','No','Yes','Yes','Yes','No'])

dt = DecisionTree()
dt.fit(X, y)
print(dt.tree)
print(dt.predict(X))

测试结果
可以看到在训练数据上测试的结果是非常好的,大家可以自己制造一些数据去测试一下。

代码解释

entropy函数:用于计算信息熵,其中Counter用来统计不同类别的数量,每种类别的数量除以总数得到概率,再通过概率求的信息熵。
DecisonTree.fit:用于训练模型,在这个函数中建立树的根结点。
DecisonTree._genTree:建立树,建立过程如上文所述
DecisonTree.predict:进行预测,在决策树中只有最后的预测结果是叶子节点。
预测过程:
1)选取指标
2)根据选取的指标,并且按照指标子节点与数据对应的值建立选取新的子结点
3)当子节点是指标时,使用该指标重复过程2),当子节点是预测结果时预测结束

python小课堂-机器学习:决策树模型分类 决策树 阅读详情

相关推荐

数据挖掘--决策树

In [9]no=0 # 决策树节点的编号column=0 # 该节点的属性entropy=0 # 交叉熵samples=0 # 该节点下的数据数目value=[] # 记录由该节点划分的不同类别的数据split=0 # 分类临界值clss=-1 # 该节点的分类branch_positive=None # 左分支branch_negative=None # 右分支本项目通过自行搭建决策树和使用sklearn提供的决策树进行实验,在Adult数据集的测试集上取得了一致的结果。

2301_81887304的博客 1577

机器学习-Python手动实现决策树

本文将记录有关决策树的相关内容 文章目录决策树分类树回归树剪枝Python实现 决策树 树模型是在日常工作中使用频率最高的模型之一,因为其较好的模型效果与良好的可解释性经常作为baseline模型使用,在平时使用时经常使用sklearn库使用,最近遇到了一个单子需要完全手动实现决策树相关内容,在此将其记录下来,如果有同学在做相关内容请与我邮件联系zhaoliang19960421@outlook....

赵亮的优快云博客 1322

[Linux外设驱动详解]RK3588 U-Boot网络功能深度分析

本文深入分析了RK3588平台上U-Boot的网络功能实现,主要内容包括: 网络架构:详细剖析了从硬件层到协议层的完整网络栈架构,包括GMAC驱动、TFTP/NFS启动、网络命令等关键组件。 驱动实现:重点介绍了RK3588 GMAC驱动结构,包含关键数据结构、专用操作函数集、设备树兼容性配置和GRF寄存器设置。 功能实现:详细说明了驱动初始化流程、RGMII速度适配机制以及PHY接口配置过程。 高级特性:涵盖了网络启动功能、镜像更新和MAC地址传递到Linux内核的机制。 文档通过代码片段和流程图清晰展示

Just Linux! 1115

机器学习——决策树(手动代码)

首先,构造决策树的过程如下:① 按特征划分群体,并计算衡量指标(信息增益、信息增益率、基尼系数)② 选取衡量指标表现最好的特征,对群体进行划分,并构建第一层树③ 重复①②步骤,当特征全被分完,或是类别唯一确定后,停止划分(还可以是其他条件)

weixin_50348308的博客 482

树莓派5新手必看:保姆级ibus中文输入法安装与配置全流程(含.bashrc设置避坑)

本文详细介绍了在树莓派5上安装和配置ibus中文输入法的完整流程,包括系统环境准备、ibus框架安装、图形界面配置及常见问题解决方案。通过清晰的步骤说明和避坑指南,帮助新手快速实现中文输入功能,提升开发效率。

weixin_29159441的博客 531

[A-21]ARMv8/v9-SMMU系统架构和功能概述

本文简述了SMMU的系统架构和核心功能

基层架构师的分享 1724

决策树算法

决策树是一种基于规则的方法, 它用一组嵌套的规则进行预测。在树的每个决策节点处, 根据判断结果进入一个分支, 反复执行这种操作直到到达叶子节点,得到 预测 / 分类结果。

m0_67804957的博客 1605

从萤石云到GB28181:海康4G摄像机接入第三方平台的曲折之路

本文深入探讨了海康4G摄像机接入第三方平台时遇到的协议冲突问题,特别是GB28181与萤石云服务的互斥性。通过技术分析揭示了4G模块的定向流量限制和协议栈资源竞争等核心问题,并提供了有线接入测试和萤石云API二次开发等解决方案。最后总结了设备选型的关键参数和协议兼容性检查清单,为安防监控系统集成提供实用指导。

mango的博客 996

数据挖掘 | 决策树ID3算法(手动实现)

手动实现决策树ID3算法,详细介绍决策树及ID3算法的原理,并用实验帮助深刻理解和实践算法。

qq_62379939的博客 1538

Python爬虫教程:爬取法院司法拍卖数据全流程实战(附反爬+数据分析方案)

Python爬虫爬取法院司法拍卖数据的核心是模拟真人行为规避反爬+精准解析页面数据+合理处理数据。新手不用一开始就追求高级的反爬技巧和复杂的数据分析,先把基础的分页爬取和数据保存功能跑通,再逐步优化。我做的这个工具现在每周帮朋友爬取全国10个城市的法拍房数据,自动生成分析报告,他说这让他的投资决策效率提升了一倍。如果你们在开发过程中遇到问题,比如反爬失败、数据解析错误,都可以在评论区留言,我会尽力解答。后续我还会出一期爬取京东司法拍卖数据的教程,帮助大家获取更多的法拍数据来源。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2179

《UDS协议从入门到精通》系列——图解0x27:安全访问

什么是安全访问服务?应用场景和基本原理是什么?全网最直观详细的图解UDS-0x27:安全访问服务!!

车载系统攻城狮 7236

【机器学习15】决策树模型详解

决策树算法前言一、决策树算法的概述1.树模型2.树模型基本流程二、熵的作用三、决策树构造实例四、信息增益率和gini系数五、剪枝方法六、分类、回归任务七、树模型的可视化展示八、决策边界展示分析九、决策树预剪枝常用参数十、回归树模型总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的决策树的详细内容。 一、决策树算法的概述 1.树模型 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

lys_828的博客 4万+

ICM20948 DMP代码详解(54)

ICM20948 DMP代码详解(54)

phmatthaus的专栏 424

决策树模型

今天我们来复习决策树模型,并用项目教大家快速了解决策树模型,我会将大家编写代码中常见的错误点在代码注释中指出,希望不会浪费大家的时间,高效学习以上就是今天要讲的内容,本文仅仅简单介绍了决策树模型的推导与实现,还有一些其他的优化决策树模型的方法但本文主旨是便于大家复习模型,就不再赘述以上所有代码在Github仓库。

2403_85773052的博客 1297

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

AI遮天传 ML-决策树(二)

决策树学习第二章

suic009的博客 2870

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

机器学习——决策树

它包含了 150 个鸢尾花样本,涵盖了三种不同品种的鸢尾花(山鸢尾、变色鸢尾和维吉尼亚鸢尾),每个样本有 4 个特征,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。设置固定的随机种子可以保证每次运行代码时,决策树的构建过程都是相同的,从而使得实验结果具有可复现性。通过固定随机数生成器的初始值(随机种子),使得算法在每次运行时使用相同的随机数序列,从而控制了算法中的随机行为,保证了实验结果的可复现性。设置固定的随机种子可以保证每次运行代码时,数据集的划分结果都是相同的,这样便于实验的复现。

2402_87933438的博客 1952

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

机器学习之决策树:原理及ID3算法手动实现,sklearn.tree.DecisionTreeClassifier参数详解

决策树简介 决策树是一种基本的分类与回归方法,这里主要讨论用于分类的决策树。决策树模型是一种树形结构,在分类问题中表示基于特征对实例进行分类的过程。决策树的学习主要包括3个步骤:特征选择,决策树的生成,决策树的剪枝。 决策树模型与学习 决策树模型 分类决策树是一种描述对实例分类的属性结构,决策树由节点和有向边组成,节点分为叶节点(leaf node)和内部节点(internal node),内部节点表示一个特征(根节点也是一个内部节点),而叶节点表示一个类。如图: 对于一棵训练好的决策树,输入一个用于预测

zero33325的博客 3359

决策树模型案例_机器学习进阶 决策树模型

本课程属于 Python人工智能 A 计划,不单独售卖,加入 A 计划可免费观看本课程及所有 Python人工智能 收费课程~Python人工智能 A 计划永久有效期购买链接:http://www.sikiedu.com/classroom/14/introduction> 课程简介与内容本次课程中会给大家详细讲解机器学习中决策树模型,为后面的集成打基础前置知识信息与熵不确定性计算...

weixin_39876450的博客 195

构建鸢尾花决策树模型

构建鸢尾花决策树模型新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 你好! 这是你第一次使用 Markdown...

csdn548364的博客 2931

【机器学习算法】二、决策树

二、决策树 决策树也是机器学习算法中的入门算法,算法原理简单效果良好,尤其是以树模型为基础的各种集成算法,更是功能强大,预测准确,还适用各种数据。决策树作为树一族算法的基模型,我觉得非常有必要认真梳理一下。 (一)决策树的基本原理 语言太苍白,看下图: 1、左边的表格是和决策树算法匹配的数据形式,前面讲KNN时,一开始就是说,了解一个算法之前首先要了解它的数据。决策树算法的数据也是一个二维表格数据,就是有行有列,行表示样本,列表示特征,当然还得有标签列,因为决策树也是一个有监督模型,没标签是没法

因为热爱所以坚持 1991

机器学习 | 决策树面试点+三种算法手动实现+Sklearn实现+ROC曲线+网格搜索

决策树系列知识点1 决策树面试遇到过的问题1.1 为什么决策树会过拟合?1.2 说一说CART树?1.2.1 上面延伸1-说一下最小二乘回归树法的原理?1.2.2 上面延伸2-说一下CART分类的原理?1.2.3 上面延伸3-说一下cart剪枝和普通的剪枝的区别?1.3 比较一下树模型的ID3 C4.5 CART?1.4 剪枝分为哪两种?有什么区别?平常用哪种剪枝比较多?为什么?1.5 什么叫信息...

RUC_Lee的博客 3543

通俗易懂之决策树算法的原理与python案例实现

决策树是一种树形结构的预测模型,用于从数据中学习简单的决策规则,进行分类或回归。每个内部节点表示一个特征的测试,分支代表测试结果,每个叶节点表示一个类别或数值预测。应用领域分类任务(如垃圾邮件识别、疾病预测)回归任务(如房价预测)特征选择和可解释性强的模型构建决策树是一种直观且强大的机器学习算法,适用于分类和回归任务。通过不同的分裂标准(如信息增益、信息增益率、基尼指数),决策树能够有效地选择最优特征进行分裂。然而,决策树也存在过拟合、稳定性差等缺点。

qq_31763735的博客 1364

什么是决策树,常用的决策树模板有哪些?这10个不容错过!

决策树是一种强大的决策分析工具,通过系统化的思维方式帮助我们做出更明智的决策和选择。本文介绍了决策树的概念、绘制方法、基于AI一键生成决策树,并重点推荐了boardmix模板社区作为决策树应用的理想平台。借助boardmix提供的专业模板和AI辅助功能,我们可以更高效地创建和优化决策树,实现个人和团队的决策效率提升,在商业决策、项目管理还是个人发展规划的场景下,决策树都是一个不可多得的可视化决策工具,让正确的事情持续发生。以上就是本次想和各位分享的所有内容,希望能帮到有需要的朋友。

l1m0_的博客 3288

如何用AI快速构建决策树模型?

平台AI会建议是否需要标准化处理,对于决策树这种基于距离的算法,它会提醒"树模型不需要标准化但可以尝试"。有次遇到高维数据,AI建议先用方差阈值筛选,省去了手动计算的麻烦。我有次需要给产品团队演示,直接把训练好的模型部署成Web服务,他们就能用Postman测试预测接口了,整个过程不到3分钟。决策树可视化是直接集成的,不需要额外安装graphviz,点击运行就能看到树形图。平台内置了经典的鸢尾花数据集,直接就能调用。最近在做数据分析项目时,发现决策树是个很直观的分类工具,但手动调参和写代码总有点费时间。

BlackironLynx23的博客 626

【机器学习】决策树案例一:利用决策树进行年龄与音乐类型喜好分类预测

利用决策树进行年龄与音乐类型喜好分类预测1 利用决策树进行年龄与音乐类型喜好分类预测1.1 导入模块与加载数据1.2 划分数据1.3 模型创建与训练1.4 模型应用1.5 模型可视化1.6 数据核验 手动反爬虫,禁止转载:原博地址 https://blog.youkuaiyun.com/lys_828/article/details/122041951(优快云博主:Be_melting) 知识梳理不易,请尊重劳动成果,文章仅发布在优快云网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息 1 利用决策树

lys_828的博客 5613
上一篇: 通俗易懂的机器学习——筛选垃圾邮件(贝叶斯分类)
下一篇: 在Jetson nano(ubuntu)配置tensorflow时遇到的坑点
艾醒(AiXing-w)
艾醒(AiXing-w) 2021年度博客之星AI领域top5 2021年度博客之星AI领域top5
博客等级 码龄7年 1万+粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值