当前位置: 首页 > news >正文

python 实现decision tree决策树算法

decision tree决策树算法介绍

决策树算法(Decision Tree Algorithm)是一种基于输入特征对实例进行分类的树结构模型,主要用于分类和回归任务。其基本原理是根据训练数据的特征属性和类别标签之间的关系,生成一个能够对新样本进行分类或回归的模型。以下是对决策树算法的详细解释:

一、基本概念

决策树:一种树形结构,每个非叶子节点表示一个特征或划分实例类别的条件,每个叶子节点表示一个类别或回归值。
分类与回归:决策树既可用于分类问题,也可用于回归问题。
典型算法:ID3、C4.5、CART等。

二、基本原理

数据预处理:对原始数据进行处理,如特征选择、数据清洗等。
决策树的生成:
使用训练数据集,根据特征属性和类别标签之间的关系,构建决策树。
决策树的生成过程通常包括特征选择、节点分裂等步骤。
决策树的剪枝:对生成的决策树进行检验、校正和修剪,以提高模型的泛化能力。

三、应用领域

决策树算法广泛应用于各个领域,如:

金融风险评估:通过对客户的信用、还款能力等特征进行分析,识别高风险客户。
疾病诊断:根据病人的症状和检查结果,辅助医生进行疾病的诊断。
营销推荐:根据用户的历史消费行为和个人特征,推荐感兴趣的产品或服务。
网络安全:通过对网络流量数据的分析,检测和预防网络攻击和滥用。

四、优缺点

优点:
模型具有可读性,分类速度快。
能够处理多种类型的数据,包括数值型和类别型。
对异常值不敏感。
缺点:
容易过拟合,需要通过剪枝等技术进行处理。
对缺失值敏感,需要进行适当的处理。

五、总结

决策树算法是一种有效的分类和回归方法,通过构建树形结构来对数据进行分类或预测。在实际应用中,需要注意选择合适的算法参数和进行必要的预处理工作,以提高模型的性能和泛化能力。

decision tree决策树算法python实现样例

下面是一个使用Python实现决策树算法的示例代码:

import pandas as pd
import numpy as npdef entropy(y):"""计算给定数据集的熵:param y: 数据集标签:return: 熵"""_, counts = np.unique(y, return_counts=True)probabilities = counts / len(y)entropy = -np.sum(probabilities * np.log2(probabilities))return entropydef information_gain(X, y, split_feature):"""计算给定特征对应的信息增益:param X: 数据集特征:param y: 数据集标签:param split_feature: 待计算信息增益的特征:return: 信息增益"""total_entropy = entropy(y)feature_values = np.unique(X[:, split_feature])feature_entropy = 0for value in feature_values:y_subset = y[X[:, split_feature] == value]subset_entropy = entropy(y_subset)weight = len(y_subset) / len(y)feature_entropy += weight * subset_entropyinformation_gain = total_entropy - feature_entropyreturn information_gaindef get_best_split(X, y):"""在给定的数据集上找到最佳分裂特征:param X: 数据集特征:param y: 数据集标签:return: 最佳分裂特征的索引"""num_features = X.shape[1]best_info_gain = -1best_feature = -1for i in range(num_features):info_gain = information_gain(X, y, i)if info_gain > best_info_gain:best_info_gain = info_gainbest_feature = ireturn best_featuredef create_decision_tree(X, y, feature_names):"""创建决策树:param X: 数据集特征:param y: 数据集标签:param feature_names: 特征名称列表:return: 决策树"""# 如果数据集只包含一个类别,则返回该类别if len(set(y)) == 1:return y[0]# 如果数据集的特征为空,则返回出现次数最多的类别if X.shape[1] == 0:return np.argmax(np.bincount(y))best_feature = get_best_split(X, y)best_feature_name = feature_names[best_feature]decision_tree = {best_feature_name: {}}feature_values = np.unique(X[:, best_feature])for value in feature_values:value_indices = np.where(X[:, best_feature] == value)[0]subset_X = X[value_indices]subset_y = y[value_indices]subset_feature_names = feature_names[:best_feature] + feature_names[best_feature+1:]decision_tree[best_feature_name][value] = create_decision_tree(subset_X, subset_y, subset_feature_names)return decision_treedef predict(X, decision_tree):"""使用决策树进行预测:param X: 待预测的样本:param decision_tree: 决策树:return: 预测结果"""if not isinstance(decision_tree, dict):return decision_treeroot = next(iter(decision_tree))subtree = decision_tree[root]feature_index = feature_names.index(root)feature_value = X[feature_index]if feature_value in subtree:return predict(X, subtree[feature_value])else:return np.argmax(np.bincount(y))# 构造示例数据集
data = np.array([[1, 1, 1],[1, 1, 0],[1, 0, 1],[0, 1, 0],[0, 0, 1]])
X = data[:, :-1]
y = data[:, -1]
feature_names = ['feature1', 'feature2']# 创建决策树
decision_tree = create_decision_tree(X, y, feature_names)# 预测样本
sample = np.array([1, 0])
prediction = predict(sample, decision_tree)
print(f"预测结果:{prediction}")

这个示例实现了决策树算法的基本功能。使用的数据集是一个简单的二分类问题,特征集合包含2个特征值。算法使用信息增益作为分裂准则来构建决策树,并使用预测函数对新样本进行预测。

相关文章:

python 实现decision tree决策树算法

decision tree决策树算法介绍 决策树算法(Decision Tree Algorithm)是一种基于输入特征对实例进行分类的树结构模型,主要用于分类和回归任务。其基本原理是根据训练数据的特征属性和类别标签之间的关系,生成一个能够对新样本进行…...

前端大模型入门:实战篇之Vue3+Antdv+transformers+本地模型实现增强搜索

本文将之前的文章,实现一个场景的实战应用,包含代码等内容。利用纯前端实现增强的列表搜索,抛弃字符串匹配,目标是使用番茄关键字可以搜索到西红柿 1 准备工作 1.1 了解llm和web开发 web端的ai开发参考 前端大模型入门&#xff…...

《向量数据库指南》——Fivetran 的 Partner SDK:构建自定义连接器和目标

哈哈,说到 Fivetran 的 Partner SDK,这可真是个好东西啊!作为向量数据库领域的“老司机”,我今天就来给大家详细讲讲这个 SDK 的厉害之处,以及如何用它来构建自定义连接器和目标,实现与 Fivetran 自动化数据移动平台的无缝集成。 一、Fivetran Partner SDK:开启自定义连…...

微信小程序的 button 标签的边框如何去除?

目录 问题描述: 问题原因: 解决办法: 方案一 方案二 问题描述: 实际开发中会发现这个 button 自带有样式,当背景颜色设置为白色的时候还有一个黑色的边框,刚开始那个边框怎么都去不掉 无法去除的边框…...

20240926 关于Goland处理wsl-GOROOT原理猜测

GOROOT的原理 go sdk与java jdk类似,是go的编译工具链的集合。 在windows上,我们通过在系统环境变量中添加GOROOT并设置为go sdk地址,使得命令行可以访问到go sdk并执行go test、build等命令,这样设置的变量是全局生效的&#x…...

Anki 学习日记 - 卡片模版 - 单选ABCD(纯操作)

摘要:在不懂前端语言的情况下自定义卡片模版,卡片模版的字段 安装(官网):Anki - powerful, intelligent flashcards (ankiweb.net) 一、在哪能修改卡片模版 管理笔记模板 - > 添加 -> 问答题 -> 设置名称 二…...

钉钉x昇腾:用AI一体机撬动企业数字资产智能化

“走红”近两年后,大模型正在加速走进千行万业。 由于大模型的主要模态是文字和图片,恰好是数字化办公最基础的内容要素,办公于是成了离AI最近的场景。 公文写作、表格生成、提炼大纲、文本翻译、代码润色、数据统计、智能问答……越来越多…...

【C/C++】 秋招常考面试题最全总结(让你有一种相见恨晚的感觉)

目录 1.C程序编译链接过程 2.浅拷贝和move有区别吗 3.深拷贝和浅拷贝的区别 4.空类的大小 5.类的继承有几种方式,区别是什么? 六、extern 关键字的作用 七、static关键字的作用 八、指针和引用的区别 九、C内存分配方式 十、结构体对齐…...

CSS面试真题 part1

CSS面试真题 part1 1、说说你对盒子模型的理解2、谈谈你对BFC的理解3、什么是响应式设计?响应式设计的基本原理是什么?如何做?4、元素水平垂直居中的方法有哪些?如果元素不定宽高呢?5、如何实现两栏布局,右…...

针对考研的C语言学习(定制化快速掌握重点5)

顺序表 特点: 写代码主要就是增删改查!!! 写代码的边界性非常重要以及考研插入和删除的位置都是从1开始,而数组下标是从0开始 【注】下标和位置的关系 线性表最重要的是插入和删除会涉及边界问题以及判断是否合法 …...

构建高效房屋租赁系统:Spring Boot应用

1 绪论 1.1 研究背景 中国的科技的不断进步,计算机发展也慢慢的越来越成熟,人们对计算机也是越来越更加的依赖,科研、教育慢慢用于计算机进行管理。从第一台计算机的产生,到现在计算机已经发展到我们无法想象。给我们的生活改变很…...

学习单片机编程和硬件设计步骤

学习单片机编程和硬件设计可以分为几个步骤: 理解基本概念:首先需要了解单片机的基本概念、硬件结构和工作原理 。 选择开发平台:选择一个合适的单片机系列作为起点,如Arduino、ESP8266/ESP32或STM32系列 。 准备工具和环境&…...

.net Framework 4.6 WebAPI 使用Hangfire

C# 使用 Hangfire 第一章 .net Framework 4.6 WebAPI 使用Hangfire 文章目录 C# 使用 Hangfire前言一、hangfire是什么?二、hangfire的特点三、.net Framework 中hangfire的使用方法第一步:创建WebAPI控制器第二步:添加nuget包第三步 创建startup类新建项目startup类Startu…...

两个向量所在平面的法线,外积,叉积,行列式

偶尔在一个数学题里面看到求两向量所在平面的法线,常规方法可以通过法线与两向量垂直这一特点,列两个方程求解;另外一种方法可以通过求解两个向量的叉积,用矩阵行列式 (determinant) 的方式,之前还没见过,在…...

C++之 友元重载 以及最常用的几种友元函数

在之前的友元中就曾经讲过,我们为了去访问修改私有成员中的数据时,只能通过公有的办法去进行访问操作,非常的局限。所以C引用了友元函数,只要加上friend关键字,C的这个类,会自动把这个函数的权限拉到类内&a…...

动态规划(3)——dp多状态问题Ⅰ

题一.按摩师(LeetCode) 题目描述 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集…...

在Mac电脑上安装adb环境

当你在命令行输入 adb version 或adb devices, 报错:zsh: command not found: adb ,那么说明你的 Mac 上没有安装 ADB(Android Debug Bridge),或者它没有添加到你的路径中。你可以按照以下步骤安装和配置 ADB&#xff…...

分糖果C++

题目&#xff1a; 样例解释&#xff1a; 样例1解释 拿 k20 块糖放入篮子里。 篮子里现在糖果数 20≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 13≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 6<n7&#xf…...

Spring中如何为静态变量注入值

在 Spring 中&#xff0c;如果使用 Value 注解注入值&#xff0c;不能将其应用于 static 字段。Spring 只能为实例变量注入值&#xff0c;不能直接对静态变量进行注入。 使用 PostConstruct 初始化&#xff1a; 如果确实需要在静态上下文中使用该值&#xff0c;可以使用 Post…...

HTML5实现唐朝服饰网站模板源码

文章目录 1.设计来源1.1 网站首页-界面效果1.2 唐装演变-界面效果1.3 唐装配色-界面效果1.4 唐装花纹-界面效果1.5 唐装文化-界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcL…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...