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

机器学习算法-决策树

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

🌳 决策树是什么?

决策树就像玩 「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.xdnf.cn/news/9292.html

相关文章:

  • 【CSS】CSS 和 SASS 的区别
  • 【排序算法】快速排序详解--附详细流程代码
  • 鸿蒙 Form Kit(卡片开发服务)
  • 【AI论文】使用检索和代码工具将LLM Agent提取为小型模型
  • python打卡day38@浙大疏锦行
  • ROS学习 进程通信 nodelet
  • 预约按摩小程序源码介绍
  • java集合面试
  • 大语言模型 21 - MCP 自动操作 Figma+Cursor 实现自动原型开发!
  • 2025年该如何备考交安C证呢?
  • 多模态大语言模型arxiv论文略读(九十五)
  • PHP中的语句
  • Linux `pwd` 命令深度解析与高阶应用指南
  • mysql存储过程中rollback、transaction、动态sql的使用
  • 本地服务器搭建的git如何让外网访问?配置公网地址实现远程连接私有仓库
  • 解决el-input输入框输入数组传参报错
  • HarmonyOS NEXT~鸿蒙系统运维:全面解析与最佳实践
  • 鸿蒙OSUniApp 制作倒计时与提醒功能#三方框架 #Uniapp
  • 判断手机屏幕上的横向滑动(左滑和右滑)
  • 智慧康养护理:科技重塑老龄化社会的健康守护体系
  • 攻防世界逆向刷题笔记(新手模式9-1?)
  • (1)课堂 1--5,这五节主要讲解 mysql 的概念,定义,下载安装与卸载
  • LiveData的优势
  • Oracle EBS 12.1 处理ISG 发布的wsdl 被请求时遇到500错误
  • Docker常用操作
  • 无人机多人协同控制技术解析
  • linux ls命令显示目录颜色调整
  • ntp 时钟同步
  • 无人机停机坪运行技术分析!
  • OpenGL Chan视频学习-10 Dealing with Errors in OpenGL