重生归来,我要成功 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

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

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

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

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

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

相关推荐
lzjava20242 小时前
Spring AI使用知识库增强对话功能
人工智能·python·spring
星释2 小时前
Rust 练习册 :Proverb与字符串处理
开发语言·后端·rust
B站_计算机毕业设计之家2 小时前
深度血虚:Django水果检测识别系统 CNN卷积神经网络算法 python语言 计算机 大数据✅
python·深度学习·计算机视觉·信息可视化·分类·cnn·django
Q_Q5110082852 小时前
python+django/flask的校园活动中心场地预约系统
spring boot·python·django·flask·node.js·php
工会主席-阿冰2 小时前
数据索引是无序时,直接用这个数据去画图的话,显示的图是错误的
开发语言·python·数据挖掘
麦麦鸡腿堡2 小时前
Java_TreeSet与TreeMap源码解读
java·开发语言
Naiva2 小时前
【小技巧】PyCharm建立项目,VScode+CodeX+WindowsPowerShell开发Python pyQT6 (二)
vscode·python·pycharm
gladiator+2 小时前
Java中的设计模式------策略设计模式
java·开发语言·设计模式
Lucifer__hell3 小时前
【python+tkinter】图形界面简易计算器的实现
开发语言·python·tkinter