24/8/8算法笔记 决策树构建鸢尾花

news/2024/11/15 5:50:28/

决策树是一种由算法自动设计的模型。在机器学习中,构建决策树的过程通常遵循以下步骤:

  1. 特征选择算法会评估每个特征,并选择一个特征作为节点分裂的依据。这个选择基于某种准则,如信息增益(ID3算法)或Gini不纯度(CART算法)。

  2. 最佳分裂点确定算法会计算每个特征的所有可能分裂点,并选择一个使得不纯度最小(或信息增益最大)的分裂点。

  3. 递归分裂:在选择了特征和分裂点后,算法会递归地对数据集的每个子集重复上述过程,直到满足停止条件。

  4. 停止条件:停止条件可以是多种因素,例如:

    • 数据集的不纯度低于某个阈值。
    • 达到预设的最大树深度。
    • 节点中的样本数量低于某个阈值。
    • 没有更多的特征可以用来分裂。
  5. 剪枝:为了防止过拟合,算法可能会采用剪枝技术来减少树的复杂度。这包括预剪枝(在生长过程中限制树的大小)和后剪枝(先生长整棵树,然后从底部剪除不必要的分支)。

  6. 输出模型:最终,算法会输出一个决策树模型,该模型可以通过一系列的问题(特征和分裂点)来对新的数据点进行分类。

首先导入库和数据,分割数据集,创建 DecisionTreeClassifier 的实例并使用训练集数据对其进行训练。预测分数

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
import graphviz
from sklearn.model_selection import train_test_split
from sklearn import treeiris = datasets.load_iris()
X = iris['data']
y = iris['target']feature_names = iris['feature_names']X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state =256)model = DecisionTreeClassifier()
model.fit(X_train,y_train)print('测试数据得分',model.score(X_test,y_test))print('算法预测结果',model.predict(X_test))
print('真实结果    ',y_test)

#逻辑斯蒂回归中,手动计算过概率
model.predict_proba(X_test)

构建决策树

dot_data = tree.export_graphviz(model,filled=True,rounded=True,feature_names=feature_names)graphviz.Source(dot_data)

我们可以分析出构建的决策树使用了以下特征和策略:

  1. 特征选择决策树使用了鸢尾花数据集中的以下特征:

    • petal length (cm):花瓣长度
    • petal width (cm):花瓣宽度
    • sepal width (cm):萼片宽度
  2. 分裂准则决策树的每个节点都基于某个特征的阈值进行分裂,例如 "petal length (cm) <= 2.45" 表示如果花瓣长度小于或等于2.45厘米,则按照这个条件进行数据的分裂。

  3. Gini不纯度:每个节点都显示了Gini不纯度值,这是衡量数据集纯度的指标。Gini不纯度越低,表示数据集的纯度越高。例如,一个节点显示 "gini = 0.666" 表示该节点的不纯度较高,而 "gini = 0.0" 表示该节点的样本全部属于同一类别。

  4. 样本数量:每个节点都显示了该节点下的样本数量,例如 "samples = 120" 表示该节点下有120个样本。

  5. 类别分布:每个节点都显示了该节点下各个类别的样本数量,例如 "value = [39, 39, 42]" 表示该节点下有39个样本属于第一类,39个样本属于第二类,42个样本属于第三类。

  6. 递归分裂决策树通过递归的方式进行分裂,直到满足停止条件,例如Gini不纯度降至0(所有样本属于同一类别)或者达到预设的最大深度。

  7. 停止条件:当一个节点的Gini不纯度降至0,或者样本数量很少时,分裂会停止。例如,"gini = 0.0" 表示该节点下的所有样本都属于同一类别,不需要进一步分裂。

  8. 特征重要性:从截图中可以看出,花瓣长度和宽度的特征在多个节点中被用作分裂准则,这表明这些特征对于分类可能更为重要。

  9. 树的深度:从截图中可以看出,树的深度相对较浅,这意味着模型可能没有过拟合,但也可能没有捕捉到数据的所有特征。

  10. 预测结果:最终,每个叶节点都会给出一个预测结果,通常是多数投票的结果。


http://www.ppmy.cn/news/1508725.html

相关文章

《王道》课后练习1:栈

03: 栈的初态和终态均为空&#xff0c;以I和O分别表示入栈和出栈&#xff0c;则出入栈的操作序列可表示为由I和O组成的序列&#xff0c;可以操作的序列称为合法序列&#xff0c;否则称为非法序列。 1&#xff09;下面所示的序列中哪些是合法的&#xff1f; 分析&#xff1a;…

redis 入门,一起学习redis

文章目录 一、什么是redis? redis的作用&#xff1f;二、redis的特点三、redis的基本数据结构类型四、redis 的三种特殊数据类型五、redis 作为缓存六、redis 作为缓存存在的问题6.1 数据一致性6.2 缓存雪崩6.3 缓存穿透6.4 缓存击穿 七、redis为什么那么快&#xff1f;八、re…

C语言——预处理详解(下)

目录 前言 #和## 1.#运算符 2.##运算符 命名约定 #undef 命令行定义 条件编译 1.单分支条件编译 2.多分支条件编译 3.判断是否被定义 4.嵌套指令 头文件的包含 1.头文件被包含的方式 (1)本地文件包含 (2)库文件包含 2.嵌套文件包含 其他预处理指令 1.#error…

第三章 zookeeper+kafka群集

消息队列 概念 消息&#xff08;Message&#xff09;是指在应用间传送的数据消息队列&#xff08;Message Queue&#xff09;是一种应用间的通信方式解决方法&#xff0c;确保消息的可靠传递 特征 存储 将消息存储在某种类型的缓冲区中&#xff0c;直到目标进程读取这些消…

【HarmonyOS NEXT星河版开发学习】小型测试案例11-购物车数字框

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 经过一周的学习&#xff0c;我发现还是进行拆分讲解效果会比较好&#xff0c;因为鸿蒙和前端十分的相识。主要就是表达的方式不同罢了…

设计模式-单例设计模式

单例模式的设计和线程安全 单例模式是一种创建型设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。实现单例模式时&#xff0c;线程安全性是一个重要考虑因素&#xff0c;特别是在多线程环境中。 1. C11 之前的线程安全实现 在 C11 之前&#…

电商平台的推荐算法需要备案吗?

答案是肯定的&#xff01; 政策要求&#xff1a; 根据我国《互联网信息服务算法推荐管理规定》&#xff08;以下简称《规定》&#xff09;第六条&#xff0c;具有舆论属性或社会动员能力的互联网信息服务&#xff0c;包括电商平台的推荐算法&#xff0c;需要进行备案。 电商平…

Openlayers6 图形绘制和修改功能(结合React)

Openlayers常用的API了解的差不多了&#xff0c;就开始进入实战了&#xff0c;首先从绘制基本的图形开始&#xff0c;这里主要介绍一下绘制圆形、矩形和多边形。 通过使用openlayers的ol.interaction.Draw和ol.interaction.Modify模块实现地图上绘制圆形、矩形、多边形并修改编…