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

ops/2025/1/12 21:02:52/

决策树分类模型

目录

  • 决策树分类模型
    • 决策树
      • 概念
      • 算法
      • 数据理解
    • 决策树的三种分法
      • 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/ops/149551.html

相关文章

【k8s】监控metrics-server

metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标,通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…

MySQL入门学习二(SQL语句基础)

2.1 SQL简介 SQL 是结构化查询语言 (Structure Query Language) 的缩写,它是使用关系模型的数据库应用言。 SQL 的起源可以追溯到 20 世纪 70 年代。当时,数据库管理系统主要采用层次模型和网状模型,数据的 存储和检索非常复杂。为了解决…

在线工具箱源码优化版

在线工具箱 前言效果图部分源码源码下载部署教程下期更新 前言 来自缤纷彩虹天地优化后的我爱工具网源码,百度基本全站收录,更能基本都比较全,个人使用或是建站都不错,挑过很多工具箱,这个比较简洁,非常实…

vmware-ubuntu22.04配置虚拟机win10,重新上网成功

打开问题显示 Hardware配置 Options配置 最后的Advanced,第一次用了BIOS,然后启动中有更新,然后关闭,再用UEFI启动

每日学习30分轻松掌握CursorAI:Cursor AI自然语言编程入门

Cursor AI自然语言编程入门 1. 自然语言编程概述 自然语言编程是一种革命性的编程方式,让开发者能够使用日常语言描述需求,由AI将其转换为可执行的代码。让我们通过系统化的学习来掌握这项技能。 2. 自然语言编程基础 2.1 工作原理流程图 2.2 指令模…

Web3 游戏 2024:牛市下的缺席者?

2024 年,Web3 游戏行业呈现复杂态势,在取得重大进展的同时也面临诸多挑战。虽然日活跃用户数激增超 300%,传统游戏公司也开始具体布局该领域,但从市场表现来看,该板块市值仅增长 60.5%,显著落后于 Meme 币和…

shell条件测试

为了能够正确处理Shell程序运行过程中遇到的各种情况,Linux Shell提供了一组测试运算符。 通过这些运算符,Shell程序能够判断某种或者几个条件是否成立。条件测试在各种流程控制语句,例如 判断语句和循环语句中发挥了重要的作用,所…

基于华为ENSP的OSPF不规则区域划分深入浅出(5)

本篇技术博文摘要 🌟 OSPF不规则区域划分及其问题解决方案涉及多个技术手段,包括隧道、虚链路和路由重发布等。合理的网络设计和配置对于避免网络中出现的环路问题至关重要。通过多进程双向重发布等方式,能够有效地优化路由协议的互通性和网络…