机器学习之决策树的分类树模型及决策树绘制

server/2025/1/12 12:43:55/

决策树分类模型

目录

  • 决策树分类模型
    • 决策树
      • 概念
      • 算法
      • 数据理解
    • 决策树的三种分法
      • ID3(Iterative Dichotomiser 3)
        • 概念
        • 算法步骤
      • C4.5
        • 概念
        • 信息增益比
      • CART决策树
        • 概念
        • 算法
    • 决策分类
    • AUC性能测试指标
      • AUC-ROC曲线
      • 函数
    • 问题测试
      • 问题数据及分析
      • 实际测试

决策树


概念

机器学习中的决策树是一种常用的有监督学习算法,主要用于分类和回归任务。决策树模型通过一系列的判断规则来进行决策,这些规则以树状结构表示。

所有数据从根节点一步步洛到叶子节点,对样本进行学习,并建立分类规则,依据分类规则对新样本进行预测。

组成部分:

  1. 根节点决策树的起始点。
  2. 非叶子节点:代表一个特征或属性,是除根节点、叶子节点的中间节点。
  3. 叶子节点:代表一个决策结果,通常用于分类问题中的类别标签或回归问题中的预测值,最终结果点。

决策树的构建过程:

  1. 特征选择:在构建决策树时,首先要选择一个最优的特征来对数据进行分割。常用的特征选择方法有信息增益、信息增益比、基尼指数等。
  2. 树的生成:根据选择的特征,将数据集分割成多个子集,然后对每个子集递归地进行特征选择和分割,直到满足停止条件。
  3. 剪枝为了避免过拟合,需要对决策树进行剪枝。剪枝策略有预剪枝和后剪枝两种。预剪枝通过提前停止树的生长来防止过拟合,后剪枝则是在树完全生长后,从下到上地对非叶节点进行考察,删除不具统计显著性的节点。

优缺点

决策树的优点:
  1. 易于理解和解释。
  2. 可以处理数值型和类别型数据。
  3. 能够处理缺失值。
  4. 抗噪声能力较强。
决策树的缺点:
  1. 容易过拟合,特别是在没有剪枝的情况下。
  2. 对于连续特征,决策树需要进行离散化处理,可能会损失信息。
  3. 对于类别不平衡的数据,决策树可能会偏向于多数类

概念

表示随机变量的不确定性的度量,也可以表示物体内部的混乱程度

算法

在这里插入图片描述

在这里插入图片描述

数据理解

x1=[1,1,1,2,1]
x2=[1,1,1,1,1]
则x1的熵为 -4/5log(4/5,2)–1/5log(1/5,2)=0.7219280948873623
则x2的熵为 -5/5*log(5/5,2)=0,x2更小,更稳定

决策树的三种分法


ID3(Iterative Dichotomiser 3)

概念

是一种经典的决策树学习算法,ID3算法主要用于构造分类树,其核心思想是以信息增益作为特征选择的标准,递归地构建决策树。信息增益越大,意味着该特征在分类中的重要性越高,因此通常选择信息增益最大的特征来进行决策树的节点分裂

算法步骤
  • 数据
    在这里插入图片描述

  • 计算类别熵
    在这里插入图片描述

  • 通过属性熵———>计算信息增益

    • 信息增益 = 类别熵-属性熵
      在这里插入图片描述
  • 对比信息增益选择最大作为决策树的节点分裂
    - )

在这里插入图片描述

  • 根据该节点的类别和属性重复上述操作至可求出类别
    如上选择天气后,分裂除sunny,overcast,rainy三个节点

其中sunny有以下数据,重新根据sunny下的温度、湿度、是否有风属性和类别是否出去玩,重复上述操作。
在这里插入图片描述

C4.5

概念

其核心思想是以信息增益比作为特征选择的标准,递归地构建决策树。信息增益比越大,意味着该特征在分类中的重要性越高,因此通常选择信息增益比最大的特征来进行决策树的节点分裂

信息增益比

信息增益比=信息增益/分裂信息

**在这里插入图片描述

如天气的分裂信息2hot-2n,2mild-1no-1yes,1cool-yes
-2/5log(2/5,2)-2/5log(2/5,2)-1/5*log(1/5,2)=1.5219280948873621
天气的信息增益是 0.247
则信息增益比为:0.16229413257416767,根据信息增益比分裂,选择更大的信息增益比,步骤于ID3相同

CART决策树

概念

决策树是一种常用的决策树学习方法,它可以用于分类问题(Classification Trees)也可以用于回归问题(Regression Trees),分裂准则:CART使用“基尼指数”(Gini index)来作为分类树的分裂准则,使用“最小二乘回归”(Least Squares Regression)来作为回归树的分裂准则。

算法

在这里插入图片描述

决策分类


决策树分类函数及参数

函数导入
python">from sklearn.tree import DecisionTreeClassifier
函数及参数

DecisionTreeClassifier(criterion=‘gini’,max_depth=25,max_leaf_nodes=90,random_state=0)

  • 1.criterion :gini or entropy 【采用基尼系数还是熵值衡量,默认基尼系数】
  • 2.splitter: best or random 前者是在所有特征中找最好的切分点 后者是在部分特征中(数据量大的时候)【默认best,无需更改】
  • 3.max_features:(表示表示寻找最优分裂时需要考虑的特征数量,默认为None,表示考虑所有特征。),log2,sqrt,N 特征小于50的时候一般使用所有的
  • 4**.max_depth: 表示树的最大深度**,数据少或者特征少的时候可以不管这个值,如果模型样本量多,特征也多的情况下,可以尝试限制下。如果没有设置,那么将会把节点完全展开,直到所有的叶子节点都是纯的,或者达到最小叶子节点的个数阈值设置。
  • 5.min_samples_split :(表示分裂一个内部节点需要的最小样本数,默认为2),如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分,如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值,控制内部节点分裂的情况;
  • 6.min_samples_leaf :(叶子节点最少样本数)
  • 7.min_weight_fraction_leaf:(叶子节点最小的样本权重和)
  • 8.max_leaf_nodes :(最大叶子节点数),通过限制最大叶子节点数,可以防止过拟合,默认是"None”,
    1. min_impurity_decrease :
  • 10.min_impurity_split: 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点。即为叶子节点 。
  • 11.class_weight 指定样本各类别的的权重,

决策树绘制函数及参数

函数导入
python">from sklearn.tree import plot_tree
函数及参数
  • fig,ax = plt.subplots(figsize=(10,10)),显示窗口大小
  • plot_tree(dtr,filled=True,ax=ax)
    • dtr,使用的模型
    • filled=True,
    • ax=ax,窗口
  • plt.show(),显示

AUC性能测试指标

AUC-ROC曲线

可以适用于多分类,二分类分类问题的性能度量,越接近1,样本分离性越好。

函数

y_pre_proba = dtr.predict_proba(data_te)获取概率,data_te,为测试数据
a = y_pre_proba[:,1]
auc_re = metrics.roc_auc_score(tar_te,a),结果

问题测试


问题数据及分析

除最后一列都为特征数据,最后一列为结果类别
在这里插入图片描述

实际测试

代码展示:

python">import matplotlib.pyplot as plt
import pandas as pd
from cv2 import threshold
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
datas = pd.read_excel('cart.xlsx')
data = datas.iloc[:,:-1]
tar = datas.iloc[:,-1]
# 训练集特征,测试集特征,训练集结果,测试集结果,test_size抽取的测试集百分比,train_size 抽取的训练集百分比
data_tr,data_te,tar_tr,tar_te = \train_test_split(data, tar, test_size=0.2,random_state=0)
dtr = DecisionTreeClassifier(criterion='gini',max_depth=20,max_leaf_nodes=80,random_state=0)
dtr.fit(data_tr,tar_tr)
tr_pr = dtr.predict(data_tr)
score = dtr.score(data_tr,tar_tr)
print(score)
print(metrics.classification_report(tar_tr,tr_pr))
te_pr = dtr.predict(data_te)
score = dtr.score(data_te,tar_te)
print(score)
print(metrics.classification_report(tar_te,te_pr))
# auc
y_pre_proba = dtr.predict_proba(data_te)
a = y_pre_proba[:,1]
auc_re = metrics.roc_auc_score(tar_te,a)# auc绘图
fpr,tpr,thre = roc_curve(tar_te,a)
plt.figure()
plt.plot(fpr,tpr,color='darkorange',lw=2,label=f'ROC curve(area={round(auc_re,2)}')
plt.plot([0,1],[0,1],color='navy',lw=2,linestyle='--')
plt.xlim([0.0,1.0])
plt.ylim([0.0,1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend()
plt.show()
# 决策树
from sklearn.tree import plot_tree
fig,ax = plt.subplots(figsize=(8,8))
plot_tree(dtr,filled=True,ax=ax)
plt.show()

运行结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/server/157765.html

相关文章

使用Struts2遇到的Context[项目名称]启动失败问题解决(Java Web学习笔记)

1 引言 读的书中12.1小节的《下载和安装Struts 2 框架》时,按照书中的方法,手工创建一个Web项目,却启动失败。下面完整复原该问题产生过程。 所用环境为: 名称版本Tomcat8.5.78Java1.8Struts2.3.16 在webapps下创建一个目录te…

ARM64 Linux PCIe 枚举与硬件 GPIO 时序图分析

在嵌入式系统中,PCIe(Peripheral Component Interconnect Express) 总线作为高速数据传输接口被广泛应用于各种设备的连接。随着 ARM64 架构的普及,越来越多的嵌入式系统、开发板和服务器开始采用 ARM64 架构来支持 PCIe 总线。在…

javascript-----转义单引号转义双引号

在 JavaScript 中,反斜杠(\)是一个转义字符,用于对特殊字符进行转义。在你提到的 \ 和 \" 中,它们的主要作用如下: \:用于转义单引号。在字符串中,如果你想包含一个单引号字符而…

力扣经典题目之2283. 判断一个数的数字计数是否等于数位的值

今天继续给大家分享一道力扣的做题心得今天这道题目是 题目链接&#xff1a; 2283. 判断一个数的数字计数是否等于数位的值 题目如下&#xff1a; 给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#…

单片机(MCU)-简单认识

简介&#xff1a; 内部集成了CPU&#xff0c;RAM&#xff0c;ROM&#xff0c;定时器&#xff0c;中断系统&#xff0c;通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;&#xff0c;处理&#xff08;依靠CPU&#xff09;&…

USRP X310 Windows 烧录镜像

说明 USRP-X 系列设备包含两个用于两个以太网通道的 SFP 端口。由于 SFP 端口支持 1 千兆 (SFP) 和 10 千兆 (SFP) 收发器&#xff0c;因此 UHD 附带了多个 FPGA 图像&#xff0c;以确定上述接口的行为。 注意&#xff1a;Aurora 图像需要从 FPGA 源代码手动构建。 FPGA 图像…

关于ReLU激活函数的解释以及其在神经网络中的应用

ReLU&#xff08;Rectified Linear Unit&#xff0c;修正线性单元&#xff09;是一种常用的激活函数&#xff0c;广泛应用于神经网络中&#xff0c;特别是深度学习中。它的定义非常简单且直观。ReLU的公式如下&#xff1a; f(x)max⁡(0,x)f(x) \max(0, x) 这意味着&#xff…

Cocos二维Slider

1、可拖动区域计算 根据UI的世界坐标了宽高信息计算出handle的坐标范围 this.posMin new Vec2(this.node.worldPosition.x - this.uiSelf.contentSize.width * 0.5, this.node.worldPosition.y - this.uiSelf.contentSize.height * 0.5); this.posMax new Vec2(this.node.w…