首页
/ 机器学习项目笔记:决策树原理与实现详解

机器学习项目笔记:决策树原理与实现详解

2025-06-07 12:48:08作者:钟日瑜

决策树基础概念

决策树是机器学习中一种简单而强大的监督学习算法,它通过树状结构对数据进行分类或回归。在机器学习项目中,决策树因其直观易懂、可解释性强等特点,常被作为基础模型使用。

信息论基础

信息熵(香农熵)

信息熵是决策树算法的核心概念之一,它量化了信息的不确定性。在决策树中,我们使用信息熵来衡量数据集的纯度:

Ent(D)=k=1ypk2pkEnt(D)=−\sum_{k=1}^y p_k \log_2 p_k

其中:

  • Ent(D)Ent(D) 表示数据集D的信息熵
  • pkp_k 表示第k类样本在数据集D中所占比例
  • y 表示类别总数

信息熵的取值范围为 0H(p)2n0 \leqslant H(p) \leqslant \log_2 n,当所有样本属于同一类别时熵最小(为0),当各类别均匀分布时熵最大。

相对熵与交叉熵

相对熵(KL散度)衡量了两个概率分布之间的差异:

DKL(pq)=i=1np(xi)log(p(xi)q(xi))D_{KL}(p||q)=\sum_{i=1}^n p(x_i) \log \left( \frac{p(x_i)}{q(x_i)} \right)

在机器学习中,我们通常使用交叉熵作为损失函数:

H(p,q)=i=1np(xi)log(q(xi))H(p,q) = -\sum_{i=1}^n p(x_i) \log(q(x_i))

交叉熵在决策树中具有重要意义,特别是在评估模型预测与真实标签之间的差异时。

决策树构建关键指标

信息增益

信息增益是决策树选择划分属性的重要标准:

信息增益 = 父节点的信息熵 - 子节点的加权平均信息熵

信息增益越大,意味着使用该属性进行划分带来的"纯度提升"越大。

基尼指数

CART算法使用基尼指数来选择最优划分属性:

Gini(D)=1k=1ypk2Gini(D)= 1- \sum_{k=1}^y p_k^2

基尼指数反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。基尼指数越小,数据集纯度越高。

决策树实现细节

剪枝技术

决策树容易过拟合,剪枝是防止过拟合的关键技术:

  1. 预剪枝:在树构建过程中进行剪枝

    • 优点:减少不必要的计算,训练速度快
    • 缺点:可能欠拟合,无法恢复被剪枝的分支
  2. 后剪枝:在完整树构建后进行剪枝

    • 优点:保留更多分支机会,泛化性能通常更好
    • 缺点:计算量大,训练时间长

Python实现示例

以下是计算香农熵的Python实现代码:

import numpy as np
import pandas as pd
from collections import Counter

def calcShannonEnt(data):
    """计算数据集的信息熵
    
    参数:
    data -- 包含特征和标签的DataFrame
    
    返回:
    shannonEnt -- 计算得到的信息熵值
    """
    # 获取标签列数据
    labels = data[data.columns.values[-1]]
    
    # 统计各类别出现次数
    labelCounts = Counter(labels)
    
    # 计算信息熵
    shannonEnt = 0.0
    dataLen = len(data)
    for key in labelCounts:
        pro = labelCounts[key] / dataLen
        shannonEnt -= pro * np.log2(pro)
    
    return shannonEnt

# 示例使用
data = pd.read_csv("watermelon_3a.csv")
res = calcShannonEnt(data)
print("香农熵为:", res)

输出结果示例:

香农熵为: 0.9975025463691153

这段代码展示了如何计算数据集的信息熵,这是构建决策树的基础步骤。在实际应用中,我们还需要实现信息增益计算、属性选择、树构建等完整流程。

决策树应用建议

  1. 数据预处理:决策树对数据尺度不敏感,但仍需处理缺失值和类别型变量
  2. 参数调优:合理设置树的最大深度、叶节点最小样本数等参数
  3. 模型评估:使用交叉验证评估模型性能,避免过拟合
  4. 特征重要性:利用决策树提供的特征重要性进行特征选择

决策树虽然简单,但通过集成方法(如随机森林、GBDT等)可以构建更强大的模型,是机器学习项目中的重要基础。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
139
1.91 K
kernelkernel
deepin linux kernel
C
22
6
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
273
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
923
551
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
421
392
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
189
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
74
64
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
344
1.3 K
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
36
8