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

人工智能直通车系列15【机器学习基础】(决策树算法原理(ID3、C4.5、CART)决策树模型实现)

目录

决策树算法原理

1. 决策树概述

2. ID3 算法原理

3. C4.5 算法原理

4. CART 算法原理

决策树模型实现(scikit - learn)

代码实现步骤

代码解释

场景示例

贷款审批

疾病诊断


决策树算法原理

1. 决策树概述

决策树是一种基本的分类与回归方法,它通过对特征进行递归划分,将数据集分割成不同的子集,直到每个子集都尽可能属于同一类别(分类树)或具有相似的数值输出(回归树)。决策树由节点和边组成,内部节点表示一个特征上的测试,分支表示测试输出,叶节点表示类别或值。

2. ID3 算法原理
  • 核心思想:ID3 算法以信息增益作为特征选择的准则,倾向于选择信息增益大的特征进行划分。
  • 信息增益:信息增益是基于信息熵的概念。信息熵是衡量数据不确定性的指标,对于一个分类问题,设数据集 D 中第 k 类样本所占的比例为 p_k(k = 1,2,\cdots,K),则数据集 D 的信息熵为:
    H(D)=-\sum_{k = 1}^{K}p_k\log_2p_k
    假设使用特征 A 对数据集D 进行划分,划分后得到 V 个子集D_1,D_2,\cdots,D_V,每个子集 D_v 的样本数占总样本数的比例为\frac{|D_v|}{|D|}​,则特征 A 对数据集 D 的信息增益为:
    g(D,A)=H(D)-\sum_{v = 1}^{V}\frac{|D_v|}{|D|}H(D_v)
  • 算法步骤
    1. 计算数据集 D 的信息熵 H(D)
    2. 对每个特征 A,计算其对数据集 D 的信息增益 g(D,A)
    3. 选择信息增益最大的特征作为当前节点的划分特征。
    4. 根据该特征的不同取值将数据集D划分为不同的子集,对每个子集递归地重复上述步骤,直到子集的样本都属于同一类别或没有可用的特征为止。
3. C4.5 算法原理
  • 核心思想:C4.5 算法是对 ID3 算法的改进,它使用信息增益比作为特征选择的准则,克服了 ID3 算法倾向于选择取值较多的特征的缺点。
  • 信息增益比:信息增益比是信息增益与特征 A 的固有值 IV(A)的比值,特征A 的固有值定义为:
    IV(A)=-\sum_{v = 1}^{V}\frac{|D_v|}{|D|}\log_2\frac{|D_v|}{|D|}
    特征A对数据集D的信息增益比为:
    g_R(D,A)=\frac{g(D,A)}{IV(A)}
  • 算法步骤:与 ID3 算法类似,只是在选择划分特征时使用信息增益比代替信息增益。
4. CART 算法原理
  • 核心思想:CART(Classification and Regression Trees)算法既可以用于分类问题,也可以用于回归问题。对于分类问题,使用基尼指数作为特征选择的准则;对于回归问题,使用均方误差作为划分准则。
  • 基尼指数:对于一个分类问题,数据集 D 的基尼指数定义为:
    Gini(D)=1-\sum_{k = 1}^{K}p_k^2
    假设使用特征A及其取值a对数据集D进行划分,得到两个子集D_1D_2,则特征A在取值 a处的基尼指数为:
    Gini(D,A,a)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
  • 算法步骤
    • 分类树
      1. 对于每个特征A及其每个可能的取值a,计算基尼指数Gini(D,A,a)
      2. 选择基尼指数最小的特征和取值作为当前节点的划分条件。
      3. 根据划分条件将数据集D划分为两个子集,对每个子集递归地重复上述步骤,直到满足停止条件(如子集样本数小于某个阈值)。
    • 回归树:选择使得划分后两个子集的均方误差之和最小的特征和划分点进行划分。

决策树模型实现(scikit - learn)

代码实现步骤
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

# 1. 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 创建决策树分类器
# 使用 CART 算法(默认)
clf = DecisionTreeClassifier(random_state=42)

# 4. 训练模型
clf.fit(X_train, y_train)

# 5. 进行预测
y_pred = clf.predict(X_test)

# 6. 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy}")

# 7. 可视化决策树
plt.figure(figsize=(12, 8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()
代码解释
  1. 数据加载:使用 load_iris 函数加载鸢尾花数据集,该数据集包含 4 个特征和 3 个类别。
  2. 数据划分:使用 train_test_split 函数将数据集划分为训练集和测试集,测试集占比 20%。
  3. 模型创建:创建 DecisionTreeClassifier 类的实例 clf,使用默认的 CART 算法。
  4. 模型训练:调用 fit 方法,使用训练集数据 X_train 和对应的标签 y_train 对模型进行训练。
  5. 模型预测:使用训练好的模型对测试集数据 X_test 进行预测,得到预测结果 y_pred
  6. 模型评估:使用 accuracy_score 函数计算模型的准确率。
  7. 模型可视化:使用 plot_tree 函数将决策树可视化,展示决策树的结构和划分规则。

场景示例

贷款审批

银行在进行贷款审批时,可以收集客户的各种信息,如年龄、收入、信用记录等作为特征,客户是否违约作为目标变量。使用决策树模型,银行可以根据客户的信息判断客户是否有违约风险,从而决定是否批准贷款。

疾病诊断

在医疗领域,医生可以收集患者的症状、检查结果等信息作为特征,患者是否患有某种疾病作为目标变量。通过决策树模型,医生可以根据患者的信息进行初步的疾病诊断,辅助制定治疗方案。

相关文章:

  • CENTOS7虚拟机硬盘不停机扩容
  • 【NLP 29、项目 Ⅰ:电商评论分类(好评 / 差评) 】
  • 基于MCAL的S32K3 GPIO外部中断使用
  • Redux 和 MobX 高频面试题
  • 类变量和类方法
  • 《高效迁移学习:Keras与EfficientNet花卉分类项目全解析》
  • 大脑宏观结构中的富集俱乐部:图论分析视角
  • 嵌入式硬件篇---手柄控制控制麦克纳姆轮子
  • Webpack Vite 前端高频面试题
  • 详解部分依赖
  • go函数详解
  • H-vmunet: High-order Vision Mamba UNet for Medical Image Segmentation模型详解及代码复现
  • Drools规则引擎在临床路径逻辑中的编程实例讨论汇总
  • java通配符?, T, E, K, V, N(简单易懂)
  • 树莓派4B使用Ubuntu20.04连接不上热点
  • 从零开始学习PX4源码10(启动过程)
  • AI Agent系列(三) -Agent实现
  • 云原生服务网格:微服务通信的智能中
  • vue3-computed计算属性和reactive响应式系统结合使用
  • 01、Hive从入门到放弃,第一章:简单入门与安装
  • 天算星座二期首批卫星成功发射,将助力6G空天信息基础设施建设
  • 特朗普指控FBI前局长“暗示刺杀总统”,“8647”藏着什么玄机?
  • 竞彩湃|欧联杯决赛前,曼联、热刺继续划水?
  • 再现五千多年前“古国时代”:凌家滩遗址博物馆今开馆
  • 四川内江警方通报一起持刀伤人致死案:因车辆停放引起,嫌犯被抓获
  • 娃哈哈:调整产销布局致部分工厂停工,布局新产线可实现自主生产,不排除推新品牌