机器学习模型2——决策树

news/2024/5/6 12:28:17/文章来源:https://blog.csdn.net/littleyy666/article/details/126961197

前置知识

信息熵
信息增益
信息增益率
基尼系数

主要内容

在这里插入图片描述

决策树

本质是⼀颗由多个判断节点组成的树。

在这里插入图片描述

信息熵

信息熵:用来描述信息源各可能事件发生的不确定性。信息熵的值越小,说明样本的纯度越高。
在这里插入图片描述
以两点分布 X~§为例:
在这里插入图片描述

信息增益(ID3决策树)

在这里插入图片描述

信息增益率(C4.5决策树算法)

实际上,信息增益准则对可取值数⽬较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的 C4.5 决策树算法 [Quinlan, 1993J 不直接使⽤信息增益,⽽是使⽤"增益率" (gain ratio) 来选择最优划分属性.
增益率:增益率是⽤前⾯的信息增益Gain(D, a)和属性a对应的"固有值"(intrinsic value) [Quinlan , 1993J的⽐值来共同定义的。
在这里插入图片描述
为什么使⽤C4.5要好?
1.⽤信息增益率来选择属性,克服了⽤信息增益来选择属性时偏向选择值多的属性的不⾜。
2.采⽤了⼀种后剪枝⽅法,避免树的⾼度⽆节制的增⻓,避免过度拟合数据
3.对于缺失值的处理。
在某些情况下,可供使⽤的数据可能缺少某些属性的值。 假如〈x,c(x)〉是样本集S中的⼀个训练实例,但是其属性A 的值A(x)未知。 处理缺少属性值的⼀种策略是赋给它结点n所对应的训练实例中该属性的最常⻅值; 另外⼀种更复杂的策略是为A的每个可能值赋予⼀个概率。 例如,给定⼀个布尔属性A,如果结点n包含6个已知A=1和4个A=0的实例,那么A(x)=1的概率是0.6,⽽A(x)=0的概率 是0.4。于是,实例x的60%被分配到A=1的分⽀,40%被分配到另⼀个分⽀。
C4.5就是使⽤这种⽅法处理缺少的属性值
4.可以处理连续数值型属性
缺点: 在构造树的过程中,需要对数据集进⾏多次的顺序扫描和排序,因⽽导致算法的低效。 此外,C4.5只适合于能够驻留于内存的数据集,当训练集⼤得⽆法在内存容纳时程序⽆法运⾏。

基尼值与基尼指数(CART 决策树)

CART 决策树 [Breiman et al., 1984] 使⽤"基尼指数" (Gini index)来选择划分属性.
CART 是Classification and Regression Tree的简称,这是⼀种著名的决策树学习算法,分类和回归任务都可⽤
基尼值Gini(D):从数据集D中随机抽取两个样本,其类别标记不⼀致的概率。故,Gini(D)值越⼩,数据集D的纯度越⾼。
数据集 D 的纯度可⽤基尼值来度量:
在这里插入图片描述
基尼指数Gini_index(D):⼀般,选择使划分后基尼系数最⼩的属性作为最优化分属性。
属性a的基尼指数定义为:
在这里插入图片描述
取Gini指数最⼩的属性作为决策树的根节点属性,选择使划分后基尼指数最小的属性作为最优划分属性。
CART算法相⽐C4.5算法的分类⽅法,采⽤了简化的⼆叉树模型,同时特征选择采⽤了近似的基尼系数来简化计算。 C4.5不⼀定是⼆叉树,但CART⼀定是⼆叉树。

剪枝

为什么剪枝?降低过拟合

  • 噪声、样本冲突,即错误的样本数据
  • 特征即属性不能完全作为分类标准
  • 巧合的规律性,数据量不够⼤。
    决策树剪枝的基本策略有"预剪枝" (pre-pruning)和"后剪枝"(post- pruning) 。
    预剪枝是指在决策树⽣成过程中,对每个结点在划分前先进⾏估计,若当前结点的划分不能带来决策树泛化性能提升,则停⽌划分并将当前结点标记为叶结点;
    后剪枝则是先从训练集⽣成⼀棵完整的决策树,然后⾃底向上地对⾮叶结点进⾏考察,若将该结点对应的⼦树替换 为叶结点能带来决策树泛化性能提升,则将该⼦树替换为叶结点。

预剪枝

在构建树的过程中,同时剪枝

  • 限制节点最⼩样本数
  • 指定数据⾼度
  • 指定熵值的最⼩值

后剪枝

把⼀棵树,构建完成之后,再进⾏从下往上的剪枝

对比

对⽐两种剪枝⽅法, 后剪枝决策树通常⽐预剪枝决策树保留了更多的分⽀。 ⼀般情形下,后剪枝决策树的⽋拟合⻛险很⼩,泛化性能往往优于预剪枝决策树。 但后剪枝过程是在⽣成完全决策树之后进⾏的。 并且要⾃底向上地对树中的所有⾮叶结点进⾏逐⼀考察,因此其 训练时间开销⽐未剪枝决策树和预剪枝决策树都要⼤得多.

回归决策树(看看就好,我也不想去记它)

⼀个回归树对应着输⼊空间(即特征空间)的⼀个划分以及在划分单元上的输出值。分类树中,我们采⽤信息论中的⽅法,通过计算选择最佳划分点。
⽽在回归树中,采⽤的是启发式的⽅法。假如我们有n个特征,每个特征有si(i ∈ (1, n))个取值,那我们遍历所有特征, 尝试该特征所有取值,对空间进⾏划分,直到取到特征 j 的取值 s,使得损失函数最⼩,这样就得到了⼀个划分点。描 述该过程的公式如下:
在这里插入图片描述
算法描述:
在这里插入图片描述

决策树的API

tree.DecisionTreeClassifier(*[, criterion, ...])A decision tree classifier.
tree.DecisionTreeRegressor(*[, criterion, ...])A decision tree regressor.tree.ExtraTreeClassifier(*[, criterion, ...])An extremely randomized tree classifier.
tree.ExtraTreeRegressor(*[, criterion, ...])An extremely randomized tree regressor.tree.export_graphviz(decision_tree[, ...])Export a decision tree in DOT format.
tree.export_text(decision_tree, *[, ...])Build a text report showing the rules of a decision tree.tree.plot_tree(decision_tree, *[, ...])Plot a decision tree.

决策树分类器

 class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0)

参数:

  • criterion: {“gini”, “entropy”, “log_loss”}, default=”gini”
    衡量分割质量的函数。特征选择标准 “gini"或者"entropy”,前者代表基尼系数,后者代表信息增益。⼀默认"gini",即CART算法。

  • splitter:{“best”, “random”}, default=”best”
    用于选择每个节点上的拆分的策略。支持的策略是“最佳”选择最佳分割,“随机”选择最佳随机分割。

  • max_depth: int,default=None
    树的最大深度。如果为“无”,则节点将展开,直到所有叶都是纯叶或所有叶包含的采样数小于min_samples_split。
    决策树最⼤深度 决策树的最⼤深度,默认可以不输⼊,如果不输⼊的话,决策树在建⽴⼦树的时候不会限制⼦树的深度。 ⼀般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制 这个最⼤深度,具体的取值取决于数据的分布。常⽤的可以取值10-100之间.

  • min_samples_split: int或float,default=2
    分割内部节点所需的最小样本数:
    如果为int,则将min_samples_split视为最小值。
    如果是float,则min_samples_split是一个分数,而ceil(min_samples _split*n_samples)是每个分割的最小采样数。

  • min_samples_leaf:int或float,default=1
    叶节点所需的最小样本数。只有在每个左分支和右分支中至少保留min_samples_leaf训练样本时,才会考虑任何深度的分割点。这可能会产生平滑模型的效果,尤其是在回归中。
    如果为int,则将min_samples_leaf视为最小值。
    如果是float,那么min_samples_leaf是一个分数,ceil(min_samples _leaf*n_samples)是每个节点的最小采样数。

  • min_weight_fraction_leaf: float,default=0.0
    叶节点所需的(所有输入样本)权重总和的最小加权分数。未提供sample_weight时,样本具有相等的权重。

  • max_features:int, float or {“auto”, “sqrt”, “log2”}, default=None
    寻找最佳分割时要考虑的功能数量:
    如果为int,则考虑每次拆分时的max_features特性。
    如果是float,那么max_features是一个分数,每次拆分时都会考虑max(1,int(max_feetures*n_feature in))特性。
    如果为“auto”,则max_features=sqrt(n_feature)。
    如果为“sqrt”,则max_features=sqrt(n_feature)。
    如果为“log2”,则max_features=log2(n_feature)。
    如果无,则max_features=n_feature。
    自版本1.1以来已弃用:“auto”选项在1.1中已弃用,将在1.3中删除。
    注意:在找到节点样本的至少一个有效分区之前,对分割的搜索不会停止,即使它需要有效检查超过max_features的功能。

  • random_state: int, RandomState instance or None, default=None
    控制估计器的随机性。即使拆分器设置为“最佳”,功能也总是在每次拆分时随机排列。当max_features<n_feature时,算法将在每次分割时随机选择max_feetures,然后在其中找到最佳分割。但是,即使max_features=n_feature,最佳分割在不同的运行中也可能不同。在这种情况下,如果对多个分割的标准改进是相同的,并且必须随机选择一个分割。为了在拟合期间获得确定性行为,random_state必须固定为整数。有关详细信息,请参阅词汇表。

  • max_leaf_nodes: int,default=None
    用max_leaf_nodes以最佳方式生长一棵树。最佳节点定义为杂质的相对减少。如果为“无”,则叶节点的数量不受限制。

  • min_impurity_declease: float,default=0.0
    如果此拆分导致杂质减少大于或等于此值,则节点将被拆分。

  • class_weight: dict, list of dict or “balanced”, default=None
    与{class_label:weight}形式的类关联的权重。如果没有,则所有类都应该有一个权重。对于多输出问题,可以按照与y列相同的顺序提供dict列表。
    请注意,对于多输出(包括multilabel),应该在其自己的dict中为每个列的每个类定义权重。例如,对于四类multillabel分类,权重应该是[{0:1,1:1},{0:1、1:5},}0:1、1:1},而不是[{1:1}、{2:5}、}3:1}和{4:1}]。
    “balanced”模式使用y值自动调整权重,权重与输入数据中的类频率成反比,即n_samples/(n_classes*np.bincount(y))
    对于多输出,y的每个列的权重将相乘。
    请注意,如果指定了sample_weight,则这些权重将与sample_tweight(通过fit方法传递)相乘。

  • ccp_alpha: non-negative float, default=0.0
    用于最小成本复杂性修剪的复杂性参数。将选择成本复杂性最大且小于ccp_alpha的子树。默认情况下,不执行修剪。有关详细信息,请参见最小成本复杂性修剪。

属性:

  • classes_: ndarray of shape (n_classes,) or list of ndarray
    类标签(单输出问题),或类标签数组列表(多输出问题)。
  • feature_importances_: ndarray of shape (n_features,)
    返回功能重要性。
  • max_features_: int
    max_features的推断值。
  • n_classes_: int or list of int
    类的数量(对于单输出问题),或包含每个输出的类数量的列表(对于多输出问题)。
  • n_features_: int
    已弃用:属性n_features_在1.0中已弃用,将在1.2中删除。
  • n_features_in : int
    装配过程中看到的特征数量。
  • feature_names_in_: ndarray of shape (n_features_in_,)
    配合期间看到的特征名称。仅当X具有全部为字符串的要素名称时才定义。
  • n_outputs_: int
    执行拟合时的输出数。
  • tree_: Tree instance
    基础Tree对象。有关tree对象的属性,请参阅帮助(sklearn.tree._tree.tree);有关这些属性的基本用法,请参阅了解决策树结构。
    在这里插入图片描述

决策树回归器

 class sklearn.tree.DecisionTreeRegressor(*, criterion='squared_error', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, ccp_alpha=0.0)[source]

随机森林(集成学习再学)

在这里插入图片描述在样本和特征上做随机

在这里插入图片描述
①Bootstrap,这个奇怪的名字来源于文学作品 The Adventures of Baron Munchausen(吹牛大王历险记),这个作品中的一个角色用提着自己鞋带的方法把自己从湖底下提了上来。因此采用意译的方式,叫做自助法。自助法顾名思义,是从样本自身中再生成很多可用的同等规模的新样本,不借助其他样本数据。

这个方法在样本比较小的时候很有用,比如我们的样本很小,但是我们希望留出一部分用来做验证,那如果传统方法做train-validation的分割的话,样本就更小了,bias会更大,这是不希望的。而自助法不会降低训练样本的规模,又能留出验证集(因为训练集有重复的,但是这种重复又是随机的),因此有一定的优势。

至于自助法能留出多少验证,或者说,m个样本的每个新样本里比原来的样本少了多少?可以这样计算:每抽一次,任何一个样本没抽中的概率为 (1-1/N),一共抽了N次,所以任何一个样本没进入新样本的概率为(1-1/N)N。那么从统计意义上来说,就意味着大概有(1-1/N)N比例的样本作为验证集。当N→infinite时,这个值大概是1/e,36.8%。以这些为验证集的方式叫做包外估计(out of bag estimate)。

②Bagging,它的名称来源于(Bootstrap aggregating),意思是自助抽样集成,这种方法将训练集分成m个新的训练集,然后在每个新训练集上构建一个模型,各自不相干,最后预测时我们将这m个模型的结果进行整合,得到最终结果。整合方式就是:分类问题用majority voting,回归用均值。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_11355.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集成学习思想

集成学习算法 集成学习&#xff08;ensemble learning&#xff09;是时下非常流行的机器学习算法&#xff0c;它本身不是一个单独的机器学习算法&#xff0c;而是通过在数据上构建多个模型&#xff0c;集成所有模型的建模结果。 我们前面介绍的单一模型可以被称为“个体学习器…

Java真的不难(四十八)Redis的入门及使用(1)

Redis的入门及使用: 一、什么是Redis&#xff1f; REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库,Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、…

Tableau文件管理

Tableau文件管理 可以使用多种不同的Tableau文件类型&#xff0c;如工作簿、打包工作簿、数据提取、数据源和书签等&#xff0c;来保存和共享工作成果和数据源&#xff0c;见下表。 下面对常用的文件类型分别进行介绍。 Tableau工作簿&#xff08;.twb&#xff09;&#xff1…

XML 测试用例分类Variants参数

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

#2 我们有多少技术债务,每年花费多少?

#2 我们有多少技术债务,每年花费多少? 从系列中,董事会成员应该问的 7 个问题让我们从定义技术债务开始。 传统定义: 将快速交付优先于好的代码。 仁的定义: 将交付速度置于所有其他工作之上,几乎总是包括关键任务,导致工作积压不断累积,成本不断增加。 累积的技术债务…

国泰环保递交注册:年营收3.3亿同比降28% 陈柏校夫妇为实控人

雷递网 雷建平 9月20日杭州国泰环保科技股份有限公司&#xff08;简称&#xff1a;“国泰环保”&#xff09;日前递交注册&#xff0c;准备在深交所创业板上市。国泰环保计划募资3.3亿元&#xff0c;其中&#xff0c;1.58亿元用于成套设备制造基地项目&#xff0c;1.71亿元用于…

Windows 11 22H2 (2022 年更新) 发布,简体中文版、英文版下载

2022 年 9 月 20 日 今天&#xff0c;Windows 11 2022 更新在 190 多个国家/地区推出。 随着去年 Windows 11 的推出&#xff0c;我们对 PC 进行了现代更新&#xff0c;让您可以更快、更轻松地完成您最依赖于 PC 的任务。我们在家庭和工作场所的 Windows 中添加了内置的基础安…

【元宇宙欧米说】SchrodingerHQ:如何玩转NFT+盲盒的商业新模式

闲置的NFT如何更好地再进入市场流通&#xff1f;NFT与盲盒结合如何创造“11&#xff1e;2”的商业价值&#xff1f; 9月27日下午四点&#xff0c;SchrodingerHQ项目商务拓展TJ将以“SchrodingerHQ&#xff1a;如何玩转NFT盲盒的商业新模式”为题&#xff0c;与大家共同探讨现如…

【毕业设计】单片机森林火灾监控防护预警系统 - 物联网 嵌入式

文章目录0 前言1 简介2 主要器件3 实现效果4 硬件设计SIM800L模块的工作原理基于物联网的森林火灾探测系统框图Arduino火灾检测系统的电路图5 软件说明用于基于物联网的森林火灾检测的Arduino程序设置Thingspeak帐户6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的…

【牛客 - 剑指offer】JZ7 重建二叉树 Java实现 两种方案(递归+非递归stack)

文章目录剑指offer题解汇总 Java实现本题链接题目方案一 递归方案二 非递归 用栈实现剑指offer题解汇总 Java实现 https://blog.csdn.net/guliguliguliguli/article/details/126089434 本题链接 知识分类篇 - 树 - JZ7 重建二叉树 题目 题目的主要信息 根据二叉树的前序和中…

计算机组成原理笔记(王道考研) 第一章:计算机系统概述

内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记。 感谢LY&#xff0c;他帮我做了一部分笔记。由于听的时间不一样&#xff0c;第四章前的内容看起来可能稍显啰嗦&#xff0c;后面会记得简略一些。 西电的计算机组织与体系结构课讲法和王道考研的课不太一样&…

Affinity Propagation (AP)近邻传播聚类

近邻传播聚类&#xff1a;根据 N 个数据点之间的相似度聚类&#xff0c;相似度可以是对称的&#xff0c;即两个数据点互相之间的相似度一样(如欧氏距离)&#xff1b;也可以是不对称的&#xff0c;即两个数据点互相之间的相似度不等。这些相似度组成 NN 的相似度矩阵 S (N代表N个…

IP静态路由

IP静态路由基础概述 为了实现数据的转发,路由器必须有能力建立、刷新路由表,并根据路由表转发数据包 定义 路由是数据通信网络中的最基本的要素。路由信息就是知道报文发送的路径信息,路由的过程就是报文中继转发的过程 目的 为了实现数据的转发,路由器、路由表和路由协议是…

selenium工具之find_element(by=By.xx, value=xxx) find_elements(by=By.xx, value=xxx)详解

前言 selenium是一款十分强大的Web应用自动化框架,我们可以通过它来自动操控浏览器。操控浏览器的实质是操控浏览器的界面元素,因此定位元素是使用selenium的关键,selenium中通过 find_element() 方法来完成定位。 用法 1、通过webdriver对象的 find_element(by="属性名…

【教程】在 visual studio 共享和重用项目属性

环境 os&#xff1a;windows 10IDE&#xff1a;visual studio 2015 前言 在 visual studio 下开发项目时&#xff0c;通常会配置项目的属性&#xff0c;比如引入外部头文件&#xff0c;引入外部库之类的 尤其是不同的开发模式&#xff0c;debug 和 release&#xff0c;不同…

PHP+经贸时间轴 毕业设计-附源码211617

基于php经贸时间轴小程序 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;经贸时间轴小程序被用户普遍使用…

Cache与内存映射

全相联 主存的某一Block可以映射到Cache中的任意一Block&#xff0c;多对多N<>M&#xff1b; 全相联地址格式&#xff1a; 高位为块地址与tag比较&#xff0c;offset负责取出Block内的字节 放一道例题把&#xff1a; 既然新开了一章写就写的细一点&#xff0c;Cache全…

深度学习入门:基于Python的理论与实现

1.Python入门 python中使用class关键字来定义类&#xff1a; class 类名&#xff1a;def __init__(self, 参数,...):#构造函数...def 方法1(self, 参数, ...): # 方法1...def 方法2(self, 参数, ...): # 方法2...这里有一股特殊的__init__方法&#xff0c;这是进行初始化的方…

合成/聚合复用原则

合成/聚合复用原则 很多情况继承会带来麻烦:对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常密切的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当需要复用子类时,如果继承下来的实现不适合解决新…

港科夜闻|香港科大为庆祝建校30周年举办慈善义卖,限量推出一批具有收藏价值的非同质化代币(NFT)艺术精品...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大为庆祝建校30周年举办慈善义卖&#xff0c;限量推出一批具有收藏价值的非同质化代币(NFT)艺术精品。这系列NFT艺术收藏品的亮点&#xff0c;就是26款按英文字母A至Z排列、重现香港科大生活点滴的原创数码图像&#…