机器学习算法-决策树

今天我们用一个 「相亲决策」 的例子来讲解决策树算法,保证你轻松理解原理和实现!

🌳 决策树是什么?

决策树就像玩 「20个问题」猜谜游戏

  • 你心里想一个东西(比如「苹果」)

  • 朋友通过一系列问题猜(「是水果吗?」→「是红色的吗?」→...)

  • 问的问题越精准,猜得越快!

机器学习中的决策树:通过一系列「如果...那么...」的规则,把数据一步步分类。


💍 例子:用决策树决定是否相亲

假设你是媒婆,手上有历史相亲数据,记录每个人的:

  1. 年龄(青年/中年/老年)

  2. 外貌(帅/普通)

  3. 收入(高/中/低)

  4. 是否成功(是/否)

现在有个新小伙:「青年、外貌帅、收入中」,要不要安排相亲?

📊 历史数据
年龄外貌收入是否成功
青年
青年普通
中年
老年普通
............

🌟 决策树原理

1. 关键问题:如何选择「最佳问题」?

决策树的核心:每一步选一个最能区分数据的问题(比如优先问「收入高吗?」比「年龄大吗?」更能区分成功率)。

衡量标准

  • 信息增益:问完这个问题后,数据更「纯净」(比如「收入高」的人群中成功率明显更高)。

  • 基尼系数:类似,值越小说明分类越准。

2. 构建决策树(伪代码)
def 构建决策树(数据):if 所有数据都属于同一类别:return 叶子节点(类别)选择最佳问题 = 找信息增益最大的特征(如「收入」)树 = {最佳问题: {}}for 该问题的每个选项(如「高/中/低」):子数据 = 筛选出符合该选项的数据树[最佳问题][选项] = 构建决策树(子数据)return 树
 
3. 本例可能的决策树
1. 收入=高?├─ 是 → 相亲(历史数据中高收入全部成功)└─ 否 → 2. 外貌=帅?├─ 是 → 相亲(青年+帅+中收入曾成功)└─ 否 → 不相亲(老年+普通+中收入失败)

对新数据「青年、帅、中收入」的预测

  • 收入≠高 → 问外貌 → 帅 → 相亲!


🛠️ 代码实现(Python)

用 scikit-learn 快速实现:

from sklearn.tree import DecisionTreeClassifier
import pandas as pd# 1. 准备数据(这里简化特征为数值)
data = {'年龄': ['青年', '青年', '中年', '老年'],  # 实际需要转为数字'外貌': ['帅', '普通', '帅', '普通'],'收入': ['高', '高', '高', '中'],'是否成功': [1, 1, 1, 0]  # 1=是,0=否
}
df = pd.DataFrame(data)# 2. 特征编码(文本转数字)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['年龄'] = le.fit_transform(df['年龄'])
df['外貌'] = le.fit_transform(df['外貌'])
df['收入'] = le.fit_transform(df['收入'])# 3. 训练决策树
X = df[['年龄', '外貌', '收入']]
y = df['是否成功']
model = DecisionTreeClassifier(criterion='entropy')  # 用信息增益
model.fit(X, y)# 4. 预测新数据
new_person = pd.DataFrame([['青年', '帅', '中']], columns=['年龄', '外貌', '收入'])
new_person['年龄'] = le.transform(new_person['年龄'])
new_person['外貌'] = le.transform(new_person['外貌'])
new_person['收入'] = le.transform(new_person['收入'])pred = model.predict(new_person)
print("安排相亲吗?", "是" if pred[0] == 1 else "否")
 

输出

安排相亲吗? 是

🌍 决策树的优缺点

✅ 优点
  • 像人类思考:规则直观易懂(适合向老板解释!)。

  • 无需特征缩放:对数据范围不敏感。

  • 处理混合类型:数值和类别特征都能用。

❌ 缺点
  • 容易过拟合:树太深会死记硬背训练数据(解决方法:剪枝、限制树深度)。

  • 不稳定:数据微小变化可能导致完全不同的树(解决方法:用随机森林)。


🎨 可视化决策树

安装 graphviz 后,可以画出树的结构:

from sklearn.tree import export_graphviz
import graphvizdot_data = export_graphviz(model, out_file=None, feature_names=['年龄', '外貌', '收入'],  class_names=['否', '是'], filled=True)
graph = graphviz.Source(dot_data)
graph.render("decision_tree")  # 保存为PDF
 

你会看到类似这样的树:

收入 <= 1.5?
├─ 是 → 类别: 是
└─ 否 → 外貌 <= 0.5?├─ 是 → 类别: 是└─ 否 → 类别: 否

🤖 实际应用场景

  • 医疗诊断:根据症状判断疾病。

  • 金融风控:根据用户信息预测贷款违约。

  • 推荐系统:根据用户行为决定推荐内容。


总结:决策树就是用一系列问题层层拆解数据,简单却强大!试着用它解决你的分类问题吧! 🌟

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

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

相关文章

2025——》VSCode Windows 最新安装指南/VSCode安装完成后如何验证是否成功?2025最新VSCode安装配置全攻略

1.VSCode Windows 最新安装指南: 以下是 2025 年 Windows 系统下安装 Visual Studio Code(VSCode)的最新指南,结合官方文档与实际操作经验整理而成: 一、下载官方安装包: 1.访问官网: 打开浏览器,进入 VSCode 官方下载页面https://code.visualstudio.com/Download 2…

【Elasticsearch】suggest

在Elasticsearch中&#xff0c;suggest 是一个非常强大的功能&#xff0c;用于实现自动补全、拼写纠错和模糊搜索等功能。它可以帮助用户更快地找到他们想要的内容&#xff0c;同时提升搜索体验。以下是关于 suggest 的详细使用方法和常见场景。 1\. Suggest 的基本概念 sugges…

[SAP] 如何查询当前屏幕的Tcode?

事务代码Tcode是SAP中到达特定屏幕的快捷路径 如何查询以下屏幕的事务码Tcode&#xff1f; 要浏览当前所使用的屏幕的事务码&#xff0c;可以选择System | Status 这里的事务代码是[VA22]&#xff0c;它是Change Quotation的事务代码

PostgreSQL的扩展 dblink

PostgreSQL的扩展 dblink dblink 是 PostgreSQL 的一个核心扩展&#xff0c;允许在当前数据库中访问其他 PostgreSQL 数据库的数据&#xff0c;实现跨数据库查询功能。 一、dblink 扩展安装与启用 1. 安装扩展 -- 使用超级用户安装 CREATE EXTENSION dblink;2. 验证安装 -…

ADB推送文件到指定路径解析

您执行的命令 adb push ota.zip /sdcard/Download 中&#xff0c;目标路径 /sdcard/Download 是您显式指定的&#xff0c;因此 ADB 会直接将文件推送到此位置。具体过程如下&#xff1a; 1. 命令结构解析 adb push&#xff1a;ADB 的推送指令。ota.zip&#xff1a;本地计算机上…

Linux 内核中 skb_orphan 的深度解析:从版本差异到核心机制

引言 在 Linux 内核网络子系统中,struct sk_buff(简称 skb)是管理网络数据包的核心数据结构。skb_orphan 作为其生命周期管理的关键函数,负责切断 skb 与所属 socket 的关联,确保数据包在复杂处理流程中的独立性。本文将从代码实现、版本差异、使用场景等多个维度,深入解…

03.MySQL表的操作详解

MySQL表的操作详解 MySQL 表的操作概述创建表 2.1 创建表的基本语法查看表结构修改表 4.1 新增列 4.2 修改列属性 4.3 修改列名 4.4 修改表名 4.5 删除列删除表 1. MySQL表的操作概述 MySQL表的操作是数据库开发和管理中的核心内容&#xff0c;主要涉及**数据定义语言&#…

Flink系列文章列表

把写的文章做一个汇总&#xff0c;会陆续更新的。 Flink流处理原理与实践&#xff1a;状态管理、窗口操作与容错机制-CSDN博客

【目标检测】【AAAI-2022】Anchor DETR

Anchor DETR&#xff1a; Query Design for Transformer-Based Object Detection 锚点DETR&#xff1a;基于Transformer的目标检测查询设计 论文链接 代码链接 摘要 在本文中&#xff0c;我们提出了一种基于Transformer的目标检测新型查询设计。此前的Transformer检测器中&am…

apptrace 的优势以及对 App 的价值

官网地址&#xff1a;AppTrace - 专业的移动应用推广追踪平台 apptrace 的优势以及对 App 的价值​ App 拉起作为移动端深度链接技术的关键应用&#xff0c;能实现从 H5 网页到 App 的无缝跳转&#xff0c;并精准定位到 App 内指定页面。apptrace 凭借专业的技术与丰富的经验…

16-前端Web实战(Tlias案例-部门管理)

在前面的课程中&#xff0c;我们学习了Vue工程化的基础内容、TS、ElementPlus&#xff0c;那接下来呢&#xff0c;我们要通过一个案例&#xff0c;加强大家对于Vue项目的理解&#xff0c;并掌握Vue项目的开发。 这个案例呢&#xff0c;就是我们之前所做的Tlias智能学习辅助系统…

Python爬虫实战:研究Goutte库相关技术

1. 引言 1.1 研究背景与意义 随着互联网信息的爆炸式增长,如何高效、准确地获取和分析 Web 数据成为重要研究课题。网络爬虫作为自动获取网页内容的关键技术,在搜索引擎优化、舆情分析、市场调研等领域具有广泛应用。然而,现代网站越来越多地采用 JavaScript 动态渲染技术…

Python----目标检测(《基于区域提议网络的实时目标检测方法》和Faster R-CNN)

一、《基于区域提议网络的实时目标检测方法》 1.1、基本信息 标题&#xff1a;Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者&#xff1a;任少卿&#xff08;中国科学技术大学、微软研究院&#xff09;、何凯明&#xff08;微软研究…

吴恩达讲解MCP基础概念

简介 MCP 是一个开放协议 标准化了您的语言模型应用如何获取工具和数据资源的上下文。基于客户端-服务器架构,它定义了您的语言模型应用中的MCP客户端与MCP服务器之间的通信方式,MCP服务器提供工具 数据资源和提示模板给您的应用,自Anthropic于2024年11月推出MCP以来,MCP生…

Git入门到精通:30分钟掌握核心技巧

目录 一、基础理论片 Git简介 Git安装 Git仓库 Git基本命令用法 仓库别名 二、实操命令篇 远程分支 分支的新建和合并 实操演示 1 本地新建仓库 2 gitee新建仓库 3 建立关系 4 新建分支 5 开发新功能 6 推送新分支 7 合并新分支到主分支 三、可视化工具篇 G…

零基础设计模式——结构型模式 - 代理模式

第三部分&#xff1a;结构型模式 - 代理模式 (Proxy Pattern) 在学习了享元模式如何通过共享对象来优化资源使用后&#xff0c;我们来探讨结构型模式的最后一个模式——代理模式。代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。 核心思想&#xff1a;为其…

【OSS】 前端如何直接上传到OSS 上返回https链接,如果做到OSS图片资源加密访问

使用阿里云OSS&#xff08;对象存储服务&#xff09;进行前端直接上传并返回HTTPS链接&#xff0c;同时实现图片资源的加密访问&#xff0c;可以通过以下步骤实现&#xff1a; 前端直接上传到OSS并返回HTTPS链接 设置OSS Bucket&#xff1a; 确保你的OSS Bucket已创建&#xf…

TDenigne 集群可视化管理

可视化管理工具 为方便用户更高效地使用和管理 TDengine&#xff0c;TDengine 3.0 版本推出了一个全新的可视化组件 taosExplorer。这个组件旨在帮助用户在不熟悉 SQL 的情况下&#xff0c;也能轻松管理 TDengine 集群。通过 taosExplorer&#xff0c;用户可以轻松查看 TDengi…

Centos7安装gitlab

环境准备&#xff1a; 操作系统&#xff1a;Centos7 内存&#xff1a;2G以上 磁盘&#xff1a;50G 安全&#xff1a;关闭防火墙&#xff0c;selinux 1、安装GitLab所需依赖 yum -y install policycoreutils openssh-server openssh-clients postfix 2、设置postfix开机自启…

【前端面经】云智慧一面

写在前面&#xff1a;面经只是记录博主遇到的题目。每题的答案在编写文档的时候已经有问过deepseek&#xff0c;它只是一种比较普世的答案&#xff0c;要学得深入还是靠自己 Q&#xff1a;手撕代码&#xff0c;两个有序数组排序 A&#xff1a; function mysort(arr1, arr2) {…