重生归来,我要成功 Python 高手--day33 决策树

决策树:是一种树形结构,树中的每一个内部节点代表了一个特征上的判断,每一个分支代表一个判断结果的输出,每一个叶子节点代表了分类结果

1.每一个叶子节点代表了标签

2,中间的结果是特征

建立过程

1.特征的选择:选择有较强分类能力的特征

2.决策树的形成:根据选择的特征形成决策树

3.决策树容易过拟合:采用剪枝的方式缓解过拟合

ID3树:通过信息增益来决定那个特征当节点,信息增益那个大,那个当节点

信息增益=熵-条件熵

:信息论中代表随机变量不确定性的度量

越大:信息不确定性越高,信息越多

越小:信息不确定性越底,信息越少

可以看作不同的信息越多,信息熵越大

信息熵的计算公式

-(当前的概率*log以2 为底当前的概率)---》每个类别求和

例如:α=ABCDEFGH β=AAAABBCD

α的信息熵为 :-1/8*(log2 1/8)=3

β的信息熵为 :-1/2*log2 1/2 + -1/4*log2 1/4 + -1/8*log2 1/8 + -1/8*log2 1/8=1.75

信息增益:

例如:

有一个样本分布为AAABBB 其中α为 AAAB β为 BB

-- 通过标签来计算的

类别的和为:A的熵 -1/2log2(1/2) B的熵 -1/2log2(1/2) 和为1

条件熵:

先计算阿尔法和β对应的条件熵

阿尔法的条件熵为:-3/4*log2(3/4)+(-1/4)*log2(1/4)=0.81

贝塔的条件熵为:-1log2(1)=0

总的条件熵=阿尔法的占比*阿尔法的条件熵+贝塔的占比*贝塔的条件熵=0.54

信息增益为=1-0.54=0.46

某一个特征的条件熵=特征熵

ID3决策树的构建过程

1,计算每个特征的信息增益

2。用信息增益最大的特征将数据集拆分

3.使用这个特征作为一个节点

4.对于剩余的重复2,3布置

C4.5树:信息增益率=信息增益/特征熵 ---->=信息增益*1/特征熵 1/特征熵 类似于惩罚系数

特征多,特征熵大,特征熵大,对应的1/特征熵就越小

特征少,特征熵小,特征熵小,对应的1/特征熵就越大

特征熵=-特征列A分类的占比*log2(A分类的占比)+ -特征列B分类的占比*log2(B分类的占比)....

信息增益率越大,就选这个特征当分裂特征

Cart 决策树:既可以用于回归也可以用于分类,

回归:使用平方误差最小化策略

分类:通过基尼指数最小化策略

基尼值:从数据集D中随机抽取两个样本,其类别标记不一致的概率,所以基尼值越低数据集越纯

基尼指数:选择是划分后的基尼系数最小的属性作为最优属性 分类占比*基尼值

基尼值:每个类别的概率平方和为基尼值

例如:

有十个球都为红球,抽取两个不一样的概率为0

有十个球五个红球,五个蓝球,抽取两个不一样的概率

1-(红球数/总球数)平方-(蓝球数/总球数)平方=0.5

10个球,五个红,三个蓝,两个绿

基尼值为=1-(5/10)平方-(3/10)平方-(2/10)平方=0.62

总结:信息增益和信息增益率越大,说明优先选择这个特征。基尼指数越小,说明优选选择这个特征

决策树的剪枝:树容易过拟合,这是一种正则化方式,提高泛化能力

剪枝:把字数的节点全部删掉,使用叶子节点代替

预剪枝:在决策树生成的过程中,对每个节点在划分前进行评估,如果当前节点的划分不能带来决策树泛化性能提升,则停止划分并当前节点标记为叶子节点

后剪枝:先生成一个完整的决策树,然后自下而上的对非叶子节点进行评估,如果这个节点对应的子树替换成叶子节点能带来决策树的评估就将这个字数替换成叶子节点

相关推荐
笨鸟先飞,勤能补拙12 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
微学AI12 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
长和信泰光伏储能13 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
豆瓣鸡13 小时前
算法日记 - Day3
java·开发语言·算法
浦信仿真大讲堂13 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
韭菜炒鸡肝天14 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
Gu Gu Study14 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
Aaron - Wistron14 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
卷无止境15 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境15 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python