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

【0基础学机器学习】2.决策树

决策树模型笔记1. 基础知识基本模型形式决策树是一种常见的监督学习模型既可以做分类也可以做回归。它通过一系列“如果…那么…”的规则不断划分特征空间最终在叶子节点给出预测结果。对于分类任务模型会根据样本特征逐层判断例如如果花瓣长度小于某个阈值进入左子树否则进入右子树最终到达某个叶子节点后叶子节点中占比最高的类别就是预测类别。核心目标决策树的核心目标是在每一次节点划分时找到一个最优特征和最优切分点让划分后的子节点尽可能“纯”。分类任务中常见目标包括让同一类别样本尽量落到同一个叶子节点降低节点的不确定性提升整体分类准确率损失函数决策树通常不直接写成统一的全局损失函数最小化问题而是在每个节点上贪心地选择最优划分标准。常见划分指标有基尼指数Gini Index信息熵Entropy以基尼指数为例Gini(D) 1 - Σ(p_k)^2其中p_k表示样本集合D中第k类样本所占比例。基尼指数越小说明节点越纯。参数求解决策树的参数求解过程本质上是一个递归划分过程在当前节点中遍历候选特征为每个特征尝试不同划分阈值计算划分后的不纯度下降选择收益最大的划分方式递归生成左右子树直到满足停止条件常见停止条件包括达到最大树深度节点样本数过少节点已经足够纯应用示例Python实现本项目使用scikit-learn中的DecisionTreeClassifier实现一个经典的鸢尾花三分类任务fromsklearn.treeimportDecisionTreeClassifier modelDecisionTreeClassifier(max_depth3,random_state42)model.fit(x_train,y_train)y_predmodel.predict(x_test)注意要点决策树容易过拟合需要通过max_depth、min_samples_split等参数控制复杂度决策树对特征缩放不敏感一般不强制要求标准化树结构可解释性强适合教学演示和规则分析单棵树性能通常不如集成模型但更容易理解2. 代码实践model.pymodel.py负责定义决策树模型、训练模型和预测接口。这里统一封装了build_model()创建模型train_model()拟合训练数据predict()执行预测fromsklearn.treeimportDecisionTreeClassifierdefbuild_model(criterion:strgini,max_depth:int3,random_state:int42,)-DecisionTreeClassifier:创建决策树分类模型。returnDecisionTreeClassifier(criterioncriterion,max_depthmax_depth,random_staterandom_state,)deftrain_model(x_train,y_train,criterion:strgini,max_depth:int3,random_state:int42,)-DecisionTreeClassifier:训练决策树分类模型。modelbuild_model(criterioncriterion,max_depthmax_depth,random_staterandom_state,)model.fit(x_train,y_train)returnmodeldefpredict(model:DecisionTreeClassifier,x_test):使用训练好的模型进行预测。returnmodel.predict(x_test)train.pytrain.py负责训练流程包括训练集和测试集划分调用train_model()完成训练代码中使用了stratifyy保证分类任务中训练集和测试集的类别分布更加稳定。fromsklearn.model_selectionimporttrain_test_splitfrommodelimporttrain_modeldefsplit_data(x,y,test_size:float0.2,random_state:int42,):划分训练集和测试集。returntrain_test_split(x,y,test_sizetest_size,random_staterandom_state,stratifyy,)defrun_train(x,y,test_size:float0.2,random_state:int42,criterion:strgini,max_depth:int3,):完成数据划分和模型训练。x_train,x_test,y_train,y_testsplit_data(x,y,test_sizetest_size,random_staterandom_state,)modeltrain_model(x_train,y_train,criterioncriterion,max_depthmax_depth,random_staterandom_state,)returnmodel,x_train,x_test,y_train,y_testeval.pyeval.py负责评估模型效果输出准确率accuracy混淆矩阵confusion_matrix分类报告classification_report这些指标能帮助我们同时观察总体表现和各类别的精确率、召回率、F1 值。fromsklearn.metricsimportaccuracy_score,classification_report,confusion_matrixfrommodelimportpredictdefevaluate_model(model,x_test,y_test)-dict:评估决策树分类模型效果。y_predpredict(model,x_test)return{accuracy:accuracy_score(y_test,y_pred),confusion_matrix:confusion_matrix(y_test,y_pred),classification_report:classification_report(y_test,y_pred),}dataload.pydataload.py从sklearn.datasets中加载鸢尾花数据集特征x4 个花萼/花瓣数值特征标签y3 个类别标签target_names类别名称用于可视化展示importpandasaspdfromsklearn.datasetsimportload_irisdefload_data():加载 sklearn 自带的 iris 分类数据集。datasetload_iris()xpd.DataFrame(dataset.data,columnsdataset.feature_names)ypd.Series(dataset.target,nametarget)returnx,y,dataset.target_namesrun.pyrun.py是项目入口负责串联整个流程加载数据训练模型评估模型保存可视化结果可视化部分包含决策树结构图混淆矩阵图frompathlibimportPathimportmatplotlib matplotlib.use(Agg)importmatplotlib.pyplotaspltfromsklearn.metricsimportConfusionMatrixDisplayfromsklearn.treeimportplot_treefromdataloadimportload_datafromevalimportevaluate_modelfrommodelimportpredictfromtrainimportrun_traindefsave_plots(model,x_test,y_test,class_names)-list[Path]:保存决策树结构图和混淆矩阵图。current_dirPath(__file__).resolve().parent output_dircurrent_dir/figureoutput_dir.mkdir(exist_okTrue)tree_pathoutput_dir/decision_tree_structure.pngcm_pathoutput_dir/decision_tree_confusion_matrix.pngfig,axplt.subplots(figsize(16,10))plot_tree(model,feature_nameslist(x_test.columns),class_nameslist(class_names),filledTrue,roundedTrue,axax,)fig.tight_layout()fig.savefig(tree_path,dpi150,bbox_inchestight)plt.close(fig)fig,axplt.subplots(figsize(6,5))ConfusionMatrixDisplay.from_predictions(y_test,predict(model,x_test),display_labelsclass_names,cmapBlues,axax,)fig.tight_layout()fig.savefig(cm_path,dpi150,bbox_inchestight)plt.close(fig)return[tree_path,cm_path]defmain()-None:x,y,class_namesload_data()model,x_train,x_test,y_train,y_testrun_train(x,y)metricsevaluate_model(model,x_test,y_test)plot_pathssave_plots(model,x_test,y_test,class_names)print(Decision Tree Demo)print(fTrain size:{len(x_train)}, Test size:{len(x_test)})print(fAccuracy:{metrics[accuracy]:.4f})print(Confusion Matrix:)print(metrics[confusion_matrix])print(Classification Report:)print(metrics[classification_report])print(Saved plots:)forplot_pathinplot_paths:print(plot_path)if__name____main__:main()运行结果运行python run.py后终端会输出训练集/测试集大小、准确率、混淆矩阵和分类报告。图片会保存在当前目录下的figure/文件夹中通常包括decision_tree_structure.pngdecision_tree_confusion_matrix.png如果分类结果接近满分这是因为鸢尾花数据集本身比较经典且较容易划分适合作为决策树入门 demo。

相关文章:

【0基础学机器学习】2.决策树

决策树模型笔记 1. 基础知识 基本模型形式 决策树是一种常见的监督学习模型,既可以做分类,也可以做回归。它通过一系列“如果…那么…”的规则不断划分特征空间,最终在叶子节点给出预测结果。 对于分类任务,模型会根据样本特征逐层…...

Rigol DHO1000系列示波器实测:12-bit高分辨率到底有多香?

Rigol DHO1000系列示波器实测:12-bit高分辨率如何重塑精密测量体验 当你在调试一个微弱的生物电信号传感器,或是排查物联网设备的低功耗射频干扰时,传统8-bit示波器上那些模糊的波形轮廓是否曾让你陷入"猜谜游戏"?去年我…...

C盘清理后如何恢复Python环境并部署Nanbeige 4.1-3B

C盘清理后如何恢复Python环境并部署Nanbeige 4.1-3B 你是不是也遇到过这种情况?为了给C盘腾出空间,一顿操作猛如虎,结果回头一看,Python环境没了,项目依赖也找不到了,整个人瞬间懵了。特别是当你正准备部署…...

AI营销进入深水区:2026年主流GEO服务商竞争格局与战略价值报告

2026年3月GEO服务商权威榜单与选型指南正式发布。本榜单基于对行业技术演进与商业实践的持续观察,结合多家第三方独立分析机构的公开数据与评测框架,旨在为企业提供一份客观、实用的GEO服务商参考名单。随着生成式AI深度融入商业决策,GEO&…...

PlantUML vs Visual Paradigm:哪个更适合你的UML绘图需求?

PlantUML与Visual Paradigm深度对比:如何选择最适合你的UML工具? 在软件开发、系统设计或业务流程建模中,UML(统一建模语言)是工程师们不可或缺的沟通工具。面对众多UML工具,开发者常陷入选择困境&#xff…...

Z-Image-Turbo-辉夜巫女性能优化:利用CUDA与卷积神经网络加速推理

Z-Image-Turbo-辉夜巫女性能优化:利用CUDA与卷积神经网络加速推理 最近在星图GPU上部署Z-Image-Turbo-辉夜巫女模型时,我发现了一个问题:生成单张高清图片的时间比预期要长。对于需要批量处理或者实时交互的场景来说,这个速度显然…...

基于EmbeddingGemma-300m的MySQL全文搜索优化方案

基于EmbeddingGemma-300m的MySQL全文搜索优化方案 1. 引言 在日常的业务系统中,我们经常会遇到这样的场景:用户想搜索"性价比高的笔记本电脑",但传统的MySQL全文搜索只能匹配包含这些关键词的记录,无法理解"性价…...

百川2-13B-Chat WebUI v1.0 实战指南:如何用‘请继续’解决回复中断问题

百川2-13B-Chat WebUI v1.0 实战指南:如何用‘请继续’解决回复中断问题 你是不是也遇到过这种情况?用大模型聊天,正说到关键地方,它突然就“卡壳”了,回复戛然而止,留下一句没说完的话,让人抓…...

Python零基础到入门-八大基本数据类型(2)

5.字典类型(dict)字典类型是 key:value 形式来存储数据语法:{"key":"value"}people_info{"name":"zhang san","age":25,"gender":"male"} # 方式一&#…...

GCN在推荐系统中的落地实践:如何用DGL构建用户-商品二部图模型

GCN在推荐系统中的落地实践:如何用DGL构建用户-商品二部图模型 推荐系统作为互联网产品的核心组件,其性能直接影响用户体验和商业价值。传统协同过滤方法面临数据稀疏和冷启动的挑战,而图卷积网络(GCN)通过挖掘用户-商…...

windows的hadoop集群环境直接配

已经配好资源如下: https://download.csdn.net/download/hashiqimiya/92754521https://download.csdn.net/download/hashiqimiya/92754521 修改 core-site.xml 配置文件 : - 找到文件: G:\1\hadoo2.6.4的hadoop.dll和winutils.exe\em\hado…...

Arduino I2C LCD驱动库:PCF8574与HD44780通信详解

1. 项目概述LCD_I2C 是一款专为 Arduino 平台设计的轻量级 C 库,用于驱动基于 PCF8574 IC 扩展芯片的 162 字符型液晶显示屏。该库不依赖于 Arduino LiquidCrystal 库的底层并行接口实现,而是完全重构为面向 IC 总线通信的专用驱动架构,通过 …...

【仅限医疗器械开发者】:C语言合规检查自动化流水线搭建(Jenkins+GitLab CI+定制化MISRA规则集)

第一章:医疗器械C语言合规检查的法规与标准全景医疗器械软件的安全性与可靠性直接受其底层C语言实现质量影响,因此全球主要监管体系均对嵌入式C代码提出明确合规要求。在法规层面,ISO 13485:2016《医疗器械 质量管理体系》为开发流程提供框架…...

GEENYmodem库:面向tingg.io平台的嵌入式GPRS物联网开发框架

1. GEENYmodem 库概述GEENYmodem 是一款专为 GEENYmodem GPRS 模块设计的 Arduino 兼容库,核心目标是简化嵌入式设备通过蜂窝网络接入物联网平台的开发流程。该模块采用标准 UART 接口与主控 MCU(如 ATmega328P、ESP32、STM32F1/F4 系列)通信…...

libesp:ESP-IDF嵌入式开发的高精度延时与结构化日志增强库

1. libesp 库概述:ESP-IDF 生态中的底层工具集libesp 是一个面向 ESP32/ESP32-S2/S3/C3/C6 系列 SoC 的轻量级、生产就绪型辅助库,构建于 Espressif 官方 ESP-IDF 框架之上。它并非替代 ESP-IDF 的核心组件(如 FreeRTOS、driver、hal、soc&am…...

AnimateDiff部署教程:CentOS7+Anaconda环境从零构建稳定运行栈

AnimateDiff部署教程:CentOS7Anaconda环境从零构建稳定运行栈 本文详细讲解如何在CentOS 7系统上,通过Anaconda环境从零开始部署AnimateDiff文生视频模型,构建稳定可靠的AI视频生成环境。 1. 环境准备与系统要求 在开始部署之前,…...

2026年主流VPS线路类型深度解析与选择指南

前言 VPS(虚拟专用服务器)的线路类型直接决定了国内用户的访问体验。本文将从技术角度客观分析目前市面上主流的几种线路类型,帮助大家根据实际需求做出理性选择。声明:本文仅为技术科普,不构成任何购买建议。数据来源…...

Janus-Pro-7B开源生态与社区贡献指南

Janus-Pro-7B开源生态与社区贡献指南 如果你对Janus-Pro-7B这个模型感兴趣,并且想为它做点什么,那这篇文章就是为你准备的。开源项目就像一个热闹的集市,模型本身是集市中央最亮眼的商品,但围绕它搭建的货架、提供的工具、以及来…...

混合信号PCB设计:模拟与数字电路的噪声隔离与电源去耦

1. 模拟与数字电路PCB设计的本质差异 在现代电子系统开发中,混合信号PCB已成为常态。无论是工业传感器节点、医疗设备前端调理电路,还是音频处理模块,工程师都必须同时面对模拟信号链的微伏级精度要求与数字逻辑的纳秒级开关瞬态。这种共存并…...

立知lychee-rerank-mm在智能客服中的落地:用户问题-解决方案匹配

立知lychee-rerank-mm在智能客服中的落地:用户问题-解决方案匹配 1. 引言:智能客服的“最后一公里”难题 想象一下这个场景:一位用户正在电商平台的客服聊天窗口里,焦急地输入:“我买的白色T恤,洗了一次就…...

MySQL安装(LINUX RHEL9.3系统)

前置准备: 1. 卸载系统自带的 MariaDB(避免冲突) MySQL 和 MariaDB 会端口 / 文件冲突,先检查并卸载: 2. 关闭防火墙 (避免权限拦截) yum在线安装(推荐): …...

RMBG-2.0镜像免配置亮点:内置Prometheus指标暴露,支持Grafana监控

RMBG-2.0镜像免配置亮点:内置Prometheus指标暴露,支持Grafana监控 1. 项目概述:智能背景扣除的监控新体验 RMBG-2.0镜像是一个基于BiRefNet架构开发的智能图像背景扣除工具,它能够精准识别并移除图像背景,保留清晰的主…...

NotaGen问题解决:生成速度慢怎么办?3个优化技巧提升效率

NotaGen问题解决:生成速度慢怎么办?3个优化技巧提升效率 1. 问题背景与诊断 1.1 NotaGen生成速度现状 NotaGen作为基于LLM的古典音乐生成系统,在创作高质量符号化音乐方面表现出色,但许多用户反馈生成一首完整的古典音乐作品通…...

探索狄拉克节线型半金属与一维光子晶体的奇妙世界

狄拉克节线型半金属中的“双碗”表面态 一维光子晶体的能带,透射谱仿真在材料物理与光学领域,狄拉克节线型半金属中的“双碗”表面态以及一维光子晶体的能带和透射谱仿真是极具吸引力的研究方向。今天咱们就来唠唠这俩有趣的玩意儿。 狄拉克节线型半金属…...

开箱即用!圣女司幼幽-造相Z-Turbo镜像部署,快速体验文生图魅力

开箱即用!圣女司幼幽-造相Z-Turbo镜像部署,快速体验文生图魅力 1. 引言:从想法到画面,只需几分钟 你有没有过这样的时刻?脑海里浮现出一个绝妙的画面:一位身着墨绿长裙、手持长剑的仙子,发丝在…...

卡尔曼滤波调参实战:如何用MATLAB快速搞定MPU6050加速度数据的Q和R矩阵?

卡尔曼滤波调参实战:如何用MATLAB快速搞定MPU6050加速度数据的Q和R矩阵? 当你在处理MPU6050三轴加速度数据时,是否遇到过这样的困境:明明卡尔曼滤波的代码框架已经搭建完成,但滤波效果总是不尽如人意?要么响…...

FFO呆手6.0

# 呆手6.0 使用说明## 一、软件介绍呆手6.0是一款专为QQ自由幻想游戏设计的辅助工具,提供了多种实用功能,包括游戏窗口管理、按键辅助、快捷功能、金币换算、彩玉换算等。本工具仅通过模拟用户输入实现辅助功能,不读取或修改游戏内存数据&…...

Qwen3-ASR-0.6B多场景:直播实时字幕、短视频配音识别、有声书制作辅助

Qwen3-ASR-0.6B多场景:直播实时字幕、短视频配音识别、有声书制作辅助 语音识别技术正从实验室快速走向真实工作流——不是作为炫技的Demo,而是真正嵌入内容生产链条的“隐形助手”。Qwen3-ASR-0.6B 就是这样一款不抢风头、但处处提效的轻量级语音理解模…...

Docker安装教程(加汉化!超详细!!!)

首先进入github主页下载 当然你也可以进入官网 https://github.com/asxez/DockerDesktop-CN/releases/tag/4.65.0 点击安装 点击接受协议 这里可以创建一个自己的账号,也可以直接skip 这是docker的主页面 然后把docker完全退出,记得看右下角集装箱是…...

# 发散创新:多方计算在Go语言中的实践与性能优化在现代分布式系统中,**多方计算(Multi-Party Comput

发散创新:多方计算在Go语言中的实践与性能优化 在现代分布式系统中,多方计算(Multi-Party Computation, MPC) 已成为隐私保护和数据安全的核心技术之一。它允许多个参与方在不泄露各自输入的前提下,共同完成一个计算任…...