【Sklearn】基于决策树算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于决策树算法的数据分类预测(Excel可直接替换数据)

  • 1.模型原理
    • 1.1 模型原理
    • 1.2 数学模型
  • 2.模型参数
  • 3.文件结构
  • 4.Excel数据
  • 5.下载地址
  • 6.完整代码
  • 7.运行结果

1.模型原理

决策树是一种基于树状结构的分类和回归模型,它通过一系列的决策规则来将数据划分为不同的类别或预测值。决策树的模型原理和数学模型如下:

1.1 模型原理

决策树的基本思想是从根节点开始,通过一系列的节点和分支,根据不同特征的取值将数据集划分成不同的子集,直到达到叶节点,然后将每个叶节点分配到一个类别或预测值。决策树的构建过程就是确定如何选择特征以及如何划分数据集的过程。

决策树的主要步骤:

  1. 选择特征: 从所有特征中选择一个最佳特征作为当前节点的划分特征,这个选择通常基于某个度量(如信息增益、基尼系数)来评估不同特征的重要性。

  2. 划分数据集: 根据选择的特征,将数据集划分成多个子集,每个子集对应一个分支。

  3. 递归构建: 对每个子集递归地重复步骤1和步骤2,直到满足停止条件,如达到最大深度、样本数不足等。

  4. 叶节点赋值: 在构建过程中,根据训练数据的真实标签或均值等方式,为叶节点分配类别或预测值。

1.2 数学模型

在数学上,决策树可以表示为一个树状结构,其中每个节点表示一个特征的划分,每个分支代表一个特征取值的分支。具体来说,每个节点可以由以下元素定义:

  1. 划分特征: 表示选择哪个特征进行划分。

  2. 划分阈值: 表示在划分特征上的取值阈值,用于将数据分配到不同的子集。

  3. 叶节点值: 表示在达到叶节点时所预测的类别或预测值。

在决策树的训练过程中,我们寻找最优的划分特征和划分阈值,以最大程度地减少不纯度(或最大程度地增加信息增益、降低基尼指数等)。

数学模型可以用以下形式表示:

f ( x ) = { C 1 , if  x belongs to region  R 1 C 2 , if  x belongs to region  R 2 ⋮ ⋮ C k , if  x belongs to region  R k f(x) = \begin{cases} C_1, & \text{if } x \text{ belongs to region } R_1 \\ C_2, & \text{if } x \text{ belongs to region } R_2 \\ \vdots & \vdots \\ C_k, & \text{if } x \text{ belongs to region } R_k \end{cases} f(x)= C1,C2,Ck,if x belongs to region R1if x belongs to region R2if x belongs to region Rk

其中, C i C_i Ci表示叶节点的类别或预测值, R i R_i Ri表示根据特征划分得到的子集。

总之,决策树通过递归地选择最佳特征和阈值,将数据集划分为多个子集,最终形成一个树状结构的模型,用于分类或回归预测。

2.模型参数

DecisionTreeClassifierscikit-learn库中用于构建决策树分类器的类。它具有多个参数,用于调整决策树的构建和性能。以下是一些常用的参数及其说明:

  1. criterion: 衡量分割质量的标准。可以是"gini"(基尼系数)或"entropy"(信息熵)。默认为"gini"。

  2. splitter: 用于选择节点分割的策略。可以是"best"(选择最优的分割)或"random"(随机选择分割)。默认为"best"。

  3. max_depth: 决策树的最大深度。如果为None,则节点会扩展,直到所有叶节点都是纯的,或者包含少于min_samples_split个样本。默认为None。

  4. min_samples_split: 节点分裂所需的最小样本数。如果一个节点的样本数少于这个值,就不会再分裂。默认为2。

  5. min_samples_leaf: 叶节点所需的最小样本数。如果一个叶节点的样本数少于这个值,可以合并到一个叶节点。默认为1。

  6. min_weight_fraction_leaf: 叶节点所需的最小权重分数总和。与min_samples_leaf类似,但是使用样本权重而不是样本数量。默认为0。

  7. max_features: 寻找最佳分割时要考虑的特征数量。可以是整数、浮点数、字符串或None。默认为None。

  8. random_state: 随机数生成器的种子,用于随机性控制。默认为None。

  9. max_leaf_nodes: 最大叶节点数。如果设置,算法会通过去掉最不重要的叶节点来合并其他节点。默认为None。

  10. min_impurity_decrease: 分割需要达到的最小不纯度减少量。如果分割不会降低不纯度超过这个阈值,则节点将被视为叶节点。默认为0。

  11. class_weight: 类别权重,用于处理不平衡数据集。

这些是DecisionTreeClassifier中一些常用的参数。根据你的数据和问题,你可以根据需要调整这些参数的值,以获得更好的模型性能。在实际应用中,根据数据的特点进行调参非常重要。

3.文件结构

在这里插入图片描述

iris.xlsx						% 可替换数据集
Main.py							% 主函数

4.Excel数据

在这里插入图片描述

5.下载地址

- 资源下载地址

6.完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as snsdef decision_tree_classification(data_path, test_size=0.2, random_state=42):# 加载数据data = pd.read_excel(data_path)# 分割特征和标签X = data.iloc[:, :-1]  # 所有列除了最后一列y = data.iloc[:, -1]   # 最后一列# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)# 创建决策树分类器# 1. ** criterion: ** 衡量分割质量的标准。可以是"gini"(基尼系数)或"entropy"(信息熵)。默认为"gini"。# 2. ** splitter: ** 用于选择节点分割的策略。可以是"best"(选择最优的分割)或"random"(随机选择分割)。默认为"best"。# 3. ** max_depth: ** 决策树的最大深度。如果为None,则节点会扩展,直到所有叶节点都是纯的,或者包含少于min_samples_split个样本。默认为None。# 4. ** min_samples_split: ** 节点分裂所需的最小样本数。如果一个节点的样本数少于这个值,就不会再分裂。默认为2。# 5. ** min_samples_leaf: ** 叶节点所需的最小样本数。如果一个叶节点的样本数少于这个值,可以合并到一个叶节点。默认为1。# 6. ** min_weight_fraction_leaf: ** 叶节点所需的最小权重分数总和。与min_samples_leaf类似,但是使用样本权重而不是样本数量。默认为0。# 7. ** max_features: ** 寻找最佳分割时要考虑的特征数量。可以是整数、浮点数、字符串或None。默认为None。# 8. ** random_state: ** 随机数生成器的种子,用于随机性控制。默认为None。# 9. ** max_leaf_nodes: ** 最大叶节点数。如果设置,算法会通过去掉最不重要的叶节点来合并其他节点。默认为None。# 10. ** min_impurity_decrease: ** 分割需要达到的最小不纯度减少量。如果分割不会降低不纯度超过这个阈值,则节点将被视为叶节点。默认为0。# 11. ** class_weight: ** 类别权重,用于处理不平衡数据集。# 使用gini作为分割标准,设置最大深度为3,最小样本数为5model = DecisionTreeClassifier(criterion='gini', max_depth=3, min_samples_split=5)# 在训练集上训练模型model.fit(X_train, y_train)# 在测试集上进行预测y_pred = model.predict(X_test)# 计算准确率accuracy = accuracy_score(y_test, y_pred)return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracyif __name__ == "__main__":# 使用函数进行分类任务data_path = "iris.xlsx"confusion_mat, true_labels, predicted_labels, accuracy = decision_tree_classification(data_path)print("真实值:", true_labels)print("预测值:", predicted_labels)print("准确率:{:.2%}".format(accuracy))# 绘制混淆矩阵plt.figure(figsize=(8, 6))sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")plt.title("Confusion Matrix")plt.xlabel("Predicted Labels")plt.ylabel("True Labels")plt.show()# 用圆圈表示真实值,用叉叉表示预测值# 绘制真实值与预测值的对比结果plt.figure(figsize=(10, 6))plt.plot(true_labels, 'o', label="True Labels")plt.plot(predicted_labels, 'x', label="Predicted Labels")plt.title("True Labels vs Predicted Labels")plt.xlabel("Sample Index")plt.ylabel("Label")plt.legend()plt.show()

7.运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MySql(干货)

写这篇博客的目的不是为了将介绍原理,而是为了Sql中的代码操作属实太多了,在这里进行一个汇总,方便查阅!!! Sql分类 分类全称说明 DDL Data Definintion Language数据定义语言,用来定义数据库对…

微信小程序(由浅到深)

文章目录 一. 项目基本配置1. 项目组成2. 常见的配置文件解析3. app.json全局的五大配置4.单个页面中的page配置5. App函数6.tabBar配置 二. 基本语法,事件,单位1. 语法2. 事件3. 单位 三. 数据响应式修改四 . 内置组件1. button2. image3. input4. 组件…

k8s常用资源管理 控制

目录 Pod(容器组):Pod是Kubernetes中最小的部署单元,可以包含一个或多个容器。Pod提供了一种逻辑上的封装,使得容器可以一起共享网络和存储资源 1、创建一个pod 2、pod管理 pod操作 目录 创建Pod会很慢 Pod&…

什么是事务,并发带来的事务问题以及事务隔离级别(图文详解)

一、什么是事务? 简单说就是逻辑上的一组操作,要么都执行,要么都不执行。 举个例子,假如小明要给小红转账100元,这个转账会涉及到两个关键操作:①将小明的余额减少100元。 ②将小红的余额增加100元 。但…

学习笔记整理-JS-04-流程控制语句

文章目录 一、条件语句1. if语句的基本使用2. if else if多条件分支3. if语句算法题4. switch语句5. 三元运算符 二、循环语句1. for循环语句2. for循环算法题3. while循环语句4. break和continue5. do while语句 三、初识算法1. 什么是算法2. 累加器和累乘器3. 穷举法4. 综合算…

设计模式(2)工厂方法模式

一、 1、介绍:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说…

odoo-034 float 浮点数比较

文章目录 前提问题解决总结 前提 odoo 版本:13 python:3.6.9 问题 比较销售订单行中已送货跟已开票,在 tree 视图显示搜索后的结果。发现搜索条件为已送货 > 已开票时,结果中会包含已送货已开票的。 解决 把这两个值打印出…

LeNet中文翻译

Gradient-Based Learning Applied to Document Recognition 基于梯度的学习应用于文档识别 摘要 使用反向传播算法训练的多层神经网络构成了成功的基于梯度的学习技术的最佳示例。给定适当的网络架构,基于梯度的学习算法可用于合成复杂的决策表面,该决策…

【Vue-Router】使用 prams 路由传参失效

报错信息: [Vue Router warn]: Discarded invalid param(s) “name”, “price”, “id” when navigating. list.json {"data": [{"name": "面","price":300,"id": 1},{"name": "水",&quo…

考研408 | 【计算机网络】 网络层

导图 网络层: 路由器功能:转发&路由选择 数据平面 数据平面执行的主要功能是根据转发表进行转发,这是路由器的本地动作。 控制平面 1.传统方法/每路由器法: 2.SDN方法(Software-Defined Networking) 控制平面中的…

html实现商品图片放大镜,html图片放大镜预览

效果 实现 复制粘贴&#xff0c;修改图片路径即可使用 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>商品图片放大镜</title></head><style>body {margin: 0;padding: 0;}#app {padding: 10px;posit…

关于青少年学习演讲与口才对未来的领导力的塑造的探析

标题&#xff1a;青少年学习演讲与口才对未来领导力的塑造&#xff1a;一项探析 摘要&#xff1a; 本论文旨在探讨青少年学习演讲与口才对未来领导力的塑造的重要性和影响。通过分析演讲和口才对青少年的益处&#xff0c;以及如何培养这些技能来促进领导力的发展&#xff0c;我…

Harmony创建项目ohpm报错

Harmony创建FA模型的项目时报如下错&#xff1a; The registry is empty - edit .ohpmrc file or use "ohpm config set registry your_registry" command to set registry.解决方法&#xff1a; File -> Settings -> Build,Execution,Deployment -> Ohpm …

docker可视化工具Portainer

1:Portainer简介 Portainer是一个docker可视化管理工具&#xff0c;可以非常方便地管理docker镜像容器。官网地址&#xff1a;https://www.portainer.io/ 注&#xff1a;现在Portainer有BE&#xff08;收费&#xff09;和CE&#xff08;免费&#xff09;版本&#xff0c;安装的…

【音视频、chatGpt】h5页面最小化后,再激活后视频停住问题的解决

目录 现象 观察 解决 现象 页面有时候要切换&#xff0c;要最小化&#xff1b;短时间或者几个小时内切换回来&#xff0c;视频可以正常续上&#xff1b;而放置较长时间&#xff0c;几个小时或者一晚上&#xff0c;切换回来后&#xff0c;视频可能卡死 观察 切换页面&#x…

【解读Spikingjelly】使用单层全连接SNN识别MNIST

原文档&#xff1a;使用单层全连接SNN识别MNIST — spikingjelly alpha 文档 代码地址&#xff1a;完整的代码位于activation_based.examples.lif_fc_mnist.py GitHub - fangwei123456/spikingjelly: SpikingJelly is an open-source deep learning framework for Spiking Neur…

【自用】终端设备(ESP32-S3)连接云服务器 HomeAssistant + MQTT 物联网平台

总览 1.流程概述 2.开始搭建&#xff01; 3. 一、流程概述 0.总体流程 二、开始搭建 1.下载 MQTTX 客户端&#xff08; 在PC上 &#xff09; https://mqttx.app/zh/downloads 2.新建 MQTTX 连接 0.点击左侧的加号&#xff0c;开始新建连接。 一共需要填写几个参数&#…

会玩这 10 个 Linux 命令,一定是个有趣的 IT 男!

Linux当中有很多比较有趣的命令&#xff0c;可以动手看看&#xff0c;很简单的。 1.rev命令 一行接一行地颠倒所输入的字符串。 运行&#xff1a; $rev如输入&#xff1a;shiyanlou shiyanlou2.asciiview命令 1.先安装aview $sudo apt-get install aview2.再安装imagema…

vue中封装自动计算比例滑块

此插件为另一位漂亮的前端同事小姐姐封装,觉得非常好用于是决定记载下来,便于复用 如图需要动态传入需要分配权重的数组,平均分配可以自动将100%平均分给数组中的值 如果手动拖拽,则会自动计算可拖动最大区域,便于最终总权重必定为100% <el-alert class"merge-alert&…

zookeeper常用命令

zookeeper常用命令 1. 下载安装2. 配置说明2.1 配置 3. zookeeper的常见命令3.1 server端启动停止等命令3.2 客户端连接等命令3.3 客户端简单常用命令3.3.1 查看目录&#xff08;查看数据结构&#xff09;3.3.2 删除目录3.3.3 创建目录3.3.4 创建目录并写入值 查看节点值3.3.5…