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开发参考 前端大模型入门ÿ…...

《向量数据库指南》——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ÿ…...

分糖果C++
题目: 样例解释: 样例1解释 拿 k20 块糖放入篮子里。 篮子里现在糖果数 20≥n7,因此所有小朋友获得一块糖; 篮子里现在糖果数变成 13≥n7,因此所有小朋友获得一块糖; 篮子里现在糖果数变成 6<n7…...
Spring中如何为静态变量注入值
在 Spring 中,如果使用 Value 注解注入值,不能将其应用于 static 字段。Spring 只能为实例变量注入值,不能直接对静态变量进行注入。 使用 PostConstruct 初始化: 如果确实需要在静态上下文中使用该值,可以使用 Post…...

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

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...