DS&ML_分类算法笔记之决策树模型

本文详述了决策树模型的基本思想、关键步骤、主要算法(如ID3、C4.5、C5.0、CART和CHAID)以及剪枝策略。讨论了模型的优缺点、评判标准,并提供了相关算法的改进方法,如信息增益率和基尼系数,以应对过拟合问题。
摘要由CSDN通过智能技术生成

其他相关文章

DS&ML_关联分析笔记
DS&ML_分类算法笔记之支持自动机SVM模型
DS&ML_分类算法笔记之随机森林、梯度提升树、XGBoost模型
DS&ML_分类算法笔记之k-近邻、KD-Tree模型
DS&ML_降维算法笔记之主成分分析PCA模型
DS&ML_分类算法笔记之朴素贝叶斯模型
DS&ML_聚类算法笔记之k-means模型
DS&ML_分类算法笔记之逻辑回归模型

对于决策树模型的相关知识点的总结与整理

简单描述一下决策树模型的思想,决策树是什么?

决策树模型,是一种树状分类结构模型,本质是自顶向下的分治算法构造树。具体就是通过对训练样本的学习,建立分类规则;依据分类规则,实现对新样本的分类;属于有监督式的学习方法,有两类变量:目标变量(输出变量),属性变量(输入变量)。

决策树模型与一般统计分类模型的主要区别:决策树的分类是基于逻辑的,一般统计分类模型是基于非逻辑的。

两个关键步骤

  • 特征的筛选:对特征空间按照变量对分类效果影响的大小,对变量和变量值进行选择
  • 对数据的划分(有各种算法)

具体算法

从最顶部的根节点开始从输入数据的各个变量中的某一特征进行测试,根据测试结果,将实例分配到其下属的一个子节点中,在到达叶节点之前,该过程将会持续递归,直到满足某些条件(如当前数据子集已经基本可以被正确分类、节点深度达到阈值等),那么将构建叶节点,将当前的子集划分到对应的叶节点输出类。

每一条从根节点到叶节点的路径对应的都是一条规则,即记录在各个对应字段上应满足的若干条件,这些规则间有一个重要的性质:互斥且完备。

不同的训练算法的目标都是让模型不确定性降低得越快越好

(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

ID3

从根节点开始,根据每次计算各个变量信息增益的大小,选择信息增益最高的特征来作为分裂特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。

节点选择:使用信息增益来进行特征选择,当没有可以选择的特征也就是特征集合为空集时,输出当前目标变量中实例数最多的类别

ID3相当于用极大似然法进行概率模型的选择,优先选择分类较多的变量(训练集)。

缺点:

  • 偏向取值较多的特征
  • ID3是非递增算法,单变量决策树(在分枝节点上只考虑单个属性)
  • 对缺失值、极端值敏感
  • 只考虑属性变量是离散型,对连续型的的变量(在一定区间内可以任意取值的变量,如年龄,0-120内可以任意取值)不能很好的处理
  • ID3算法在搜索过程中不进行回溯,每当选择了一个属性进行分类后,以后的处理过程就不会再考虑该属性了,这样算法很容易收敛到局部最优而不是全局最优
  • ID3算法对于较小的数据集很有效,但用于非常大的数据库挖掘时,算法效率成为瓶颈。

对于不能处理连续型变量的解决:

好的,下面是 python 项目神奇时钟代码_micropython 学习笔记之 RTC 时钟模块(DS3231)。 首先,我们需要导入相应的模块: ```python from machine import Pin, I2C import utime ``` 然后,我们需要设置 I2C 总线和 RTC 模块的地址: ```python i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000) rtc_addr = 0x68 ``` 接下来,我们需要定义几个函数来读取和设置 RTC 模块的时间: ```python def bcd2dec(bcd): return (bcd>>4)*10 + (bcd & 0x0f) def dec2bcd(dec): return ((dec//10)<<4) + (dec%10) def get_time(): time = i2c.readfrom_mem(rtc_addr, 0x00, 7) year = bcd2dec(time[6])+2000 month = bcd2dec(time[5]) date = bcd2dec(time[4]) day = bcd2dec(time[3]) hour = bcd2dec(time[2]) minute = bcd2dec(time[1]) second = bcd2dec(time[0]) return year, month, date, day, hour, minute, second def set_time(year, month, date, day, hour, minute, second): i2c.writeto_mem(rtc_addr, 0x00, bytes([dec2bcd(second), dec2bcd(minute), dec2bcd(hour), dec2bcd(day), dec2bcd(date), dec2bcd(month), dec2bcd(year-2000)])) ``` 这些函数分别用于将 BCD 码转换为十进制数、将十进制数转换为 BCD 码、读取当前时间和设置时间。 最后,我们可以写一个循环来不断显示当前时间: ```python while True: year, month, date, day, hour, minute, second = get_time() print("%d-%02d-%02d %02d:%02d:%02d %d" % (year, month, date, hour, minute, second, day)) utime.sleep(1) ``` 这里我们使用了 MicroPython 的时间模块 `utime` 来实现延时功能,每秒钟刷新一次时间。 这就是 python 项目神奇时钟代码_micropython 学习笔记之 RTC 时钟模块(DS3231)的全部内容,希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值