机器学习算法-决策树

[复制链接]
发表于 2025-7-24 01:10:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

🌳 决策树是什么?

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

  •         你心里想一个东西(比如「苹果」)
  •         朋友通过一系列问题猜(「是水果吗?」→「是红色的吗?」→...)
  •         问的问题越精准,猜得越快!
机器学习中的决策树:通过一系列「假如...那么...」的规则,把数据一步步分类。

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

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

  •         年龄(青年/中年/老年)
  •         外貌(帅/平凡)
  •         收入(高/中/低)
  •         是否成功(是/否)
如今有个新小伙:「青年、外貌帅、收入中」,要不要安排相亲?
📊 汗青数据

年龄外貌收入是否成功青年帅高是青年平凡高是中年帅高是老年平凡中否............
🌟 决策树原理

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

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

  •         信息增益:问完这个问题后,数据更「纯净」(比如「收入高」的人群中成功率显着更高)。
  •         基尼系数:类似,值越小阐明分类越准。
2. 构建决策树(伪代码
  1. def 构建决策树(数据):
  2.     if 所有数据都属于同一类别:
  3.         return 叶子节点(类别)
  4.    
  5.     选择最佳问题 = 找信息增益最大的特征(如「收入」)
  6.     树 = {最佳问题: {}}
  7.    
  8.     for 该问题的每个选项(如「高/中/低」):
  9.         子数据 = 筛选出符合该选项的数据
  10.         树[最佳问题][选项] = 构建决策树(子数据)
  11.    
  12.     return 树
复制代码
  1. [/code][size=2]3. [b]本例大概的决策树[/b][/size]
  2. [code]
  3. 1. 收入=高?
  4.    ├─ 是 → 相亲(历史数据中高收入全部成功)
  5.    └─ 否 →
  6.        2. 外貌=帅?
  7.           ├─ 是 → 相亲(青年+帅+中收入曾成功)
  8.           └─ 否 → 不相亲(老年+普通+中收入失败)
复制代码
对新数据「青年、帅、中收入」的预测

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

🛠️ 代码实现(Python)

用 scikit-learn 快速实现:
  1. from sklearn.tree import DecisionTreeClassifier
  2. import pandas as pd
  3. # 1. 准备数据(这里简化特征为数值)
  4. data = {
  5.     '年龄': ['青年', '青年', '中年', '老年'],  # 实际需要转为数字
  6.     '外貌': ['帅', '普通', '帅', '普通'],
  7.     '收入': ['高', '高', '高', '中'],
  8.     '是否成功': [1, 1, 1, 0]  # 1=是,0=否
  9. }
  10. df = pd.DataFrame(data)
  11. # 2. 特征编码(文本转数字)
  12. from sklearn.preprocessing import LabelEncoder
  13. le = LabelEncoder()
  14. df['年龄'] = le.fit_transform(df['年龄'])
  15. df['外貌'] = le.fit_transform(df['外貌'])
  16. df['收入'] = le.fit_transform(df['收入'])
  17. # 3. 训练决策树
  18. X = df[['年龄', '外貌', '收入']]
  19. y = df['是否成功']
  20. model = DecisionTreeClassifier(criterion='entropy')  # 用信息增益
  21. model.fit(X, y)
  22. # 4. 预测新数据
  23. new_person = pd.DataFrame([['青年', '帅', '中']], columns=['年龄', '外貌', '收入'])
  24. new_person['年龄'] = le.transform(new_person['年龄'])
  25. new_person['外貌'] = le.transform(new_person['外貌'])
  26. new_person['收入'] = le.transform(new_person['收入'])
  27. pred = model.predict(new_person)
  28. print("安排相亲吗?", "是" if pred[0] == 1 else "否")
复制代码
  1. [/code][b]输出[/b]:
  2. [code]
  3. 安排相亲吗? 是
复制代码

🌍 决策树的优缺点

✅ 优点


  •         像人类思索:规则直观易懂(适合向老板解释!)。
  •         无需特征缩放:对数据范围不敏感。
  •         处理混合类型:数值和类别特征都能用。
❌ 缺点


  •         容易过拟合:树太深会死记硬背训练数据(解决方法:剪枝、限制树深度)。
  •         不稳定:数据微小变化大概导致完全不同的树(解决方法:用随机森林)。

🎨 可视化决策树

安装 graphviz 后,可以画出树的布局:
  1. from sklearn.tree import export_graphviz
  2. import graphviz
  3. dot_data = export_graphviz(model, out_file=None,
  4.                           feature_names=['年龄', '外貌', '收入'],  
  5.                           class_names=['否', '是'], filled=True)
  6. graph = graphviz.Source(dot_data)
  7. graph.render("decision_tree")  # 保存为PDF
复制代码
  1. [/code]你会看到类似如许的树:
  2. [code]
  3. 收入 <= 1.5?
  4. ├─ 是 → 类别: 是
  5. └─ 否 → 外貌 <= 0.5?
  6.    ├─ 是 → 类别: 是
  7.    └─ 否 → 类别: 否
复制代码

🤖 实际应用场景


  •         医疗诊断:根据症状判定疾病。
  •         金融风控:根据用户信息预测贷款违约。
  •         保举系统:根据用户行为决定保举内容。

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表