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

【数学建模学习笔记】机器学习分类:决策树分类

零基础小白看懂决策树分类

一、什么是决策树?

简单说,决策树就像我们平时做选择的 "流程图"。比如判断一个水果是不是苹果:

  • 第一步看颜色:红色 / 绿色?
  • 第二步看形状:圆形?
  • 第三步看有没有果柄?
  • 最后得出结论

决策树就是用这种 "一步一步提问" 的方式给数据分类,树的每个节点是一个问题(比如 "酒精含量大于 13 吗?"),分支是答案,最后叶子节点就是分类结果(比如 "琴酒")。

二、核心概念:信息增益和 Gini 指数

这两个是决策树用来 "选最好的问题" 的工具,目的是让每次划分后,数据分类更清晰。

  • Gini 指数:衡量 "混乱程度"。值越小,说明这组数据越纯(比如全是琴酒)。
    举例:如果 10 个样本里 8 个是琴酒、2 个是雪莉,混乱程度就比 "5 个琴酒 5 个雪莉" 低。

  • 信息增益:看用某个特征划分后,混乱程度减少了多少。减少越多,这个特征越适合当前划分。

三、用红酒数据做实验的步骤(带代码版)

我们拿红酒数据(含酒精、苹果酸等特征,以及 "琴酒 / 雪莉 / 贝尔摩德" 三类标签)来做例子,步骤如下:

  1. 准备数据
    先导入需要的工具库,再加载红酒数据:

    # 导入工具库
    import pandas as pd  # 处理表格数据
    from sklearn.model_selection import train_test_split  # 划分训练集和测试集
    from sklearn.preprocessing import StandardScaler  # 数据标准化
    from sklearn.tree import DecisionTreeClassifier  # 决策树模型
    from sklearn.metrics import accuracy_score  # 计算准确率
    import matplotlib.pyplot as plt  # 画图
    from sklearn.tree import plot_tree  # 可视化决策树# 加载红酒数据(在线表格)
    df = pd.read_excel('https://labfile.oss.aliyuncs.com/courses/40611/%E7%BA%A2%E9%85%92%E6%95%B0%E6%8D%AE.xlsx')
    df.head()  # 显示前5行数据
    

    运行后会看到表格里有 "酒精"" 苹果酸 " 等特征,最后一列是红酒种类(琴酒 / 雪莉 / 贝尔摩德)。

    接着把中文改成英文(电脑更易处理):

    # 中文列名转英文(比如"酒精"→"Alcohol")
    column_mapping = {'酒精': 'Alcohol','苹果酸': 'Malic_Acid','种类': 'Class'  # 其他列名同理转换
    }
    df.rename(columns=column_mapping, inplace=True)# 红酒种类转英文(比如"琴酒"→"Gin")
    label_mapping = {'雪莉': 'Sherry', '琴酒': 'Gin', '贝尔摩德': 'Vermouth'}
    df['Class'] = df['Class'].replace(label_mapping)
    
  2. 拆分特征和标签
    把 "特征"(比如酒精含量、苹果酸)和 "标签"(红酒种类)分开,就像把 "题目" 和 "答案" 分开:

    X = df.drop('Class', axis=1)  # 特征:所有列除了"Class"
    y = df['Class']  # 标签:只有"Class"列(红酒种类)
    
  3. 数据标准化
    不同特征的数值范围可能差很大(比如 "镁" 是几十,"脯氨酸" 是几百),标准化就是把它们调成差不多的范围,让模型更公平:

    scaler = StandardScaler()  # 创建标准化工具
    X_scaled = scaler.fit_transform(X)  # 对特征进行标准化
    
  4. 分训练集和测试集
    用 80% 的数据让模型学习,20% 的数据检验学习效果:

    # test_size=0.2表示20%做测试集,random_state=42是固定随机数(保证结果可重复)
    X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42
    )
    
  5. 训练决策树模型
    用 Gini 指数作为划分标准,让模型学习如何分类:

    # 创建决策树模型,用Gini指数(criterion='gini')
    clf = DecisionTreeClassifier(criterion='gini', random_state=42)
    clf.fit(X_train, y_train)  # 用训练集训练模型
    
  6. 测试模型效果
    用测试集预测红酒种类,看看准确率多少:

    y_pred = clf.predict(X_test)  # 用模型预测测试集的红酒种类
    accuracy = accuracy_score(y_test, y_pred)  # 计算准确率
    print('准确率:', accuracy)  # 输出结果:0.9166(约92%)
    

    92% 的准确率意味着,100 个测试样本里,模型能猜对 92 个,效果不错!

  7. 可视化决策树
    画出决策树,直观看到模型是怎么一步步判断的:

    plt.figure(figsize=(12, 10))  # 设置图片大小
    # 画决策树:feature_names是特征名,class_names是分类结果
    plot_tree(clf, feature_names=X.columns, class_names=['Sherry', 'Gin','Vermouth'], filled=True)
    plt.show()  # 显示图片
    

    运行后会看到一棵 "树",每个节点都有一个问题(比如 "Proline <= 755.5?"),顺着分支走,最后能得到红酒种类。

四、决策树的优点
  • 简单易懂:就像流程图,能直接看到分类规则。
  • 用途广:除了分类(比如分红酒),还能做回归(比如预测房价)、选重要特征。
  • 不需要太多数学基础,电脑会自动处理复杂计算。
http://www.xdnf.cn/news/20108.html

相关文章:

  • 团队协作与接口联调 Charles抓包工具在多人开发中的高效应用
  • WEBSTORM前端 —— 第4章:JavaScript —— 第7节:函数
  • 安徽造价信息网期刊及工程材料信息价
  • 去中心化投票系统开发教程 第一章:区块链基础知识
  • 新一代Agent(智能体),路在低代码?
  • 【Dify】使用工具节点实现 API 接口调用与 JSON 处理
  • 深入 Spring MVC 底层:从 DispatcherServlet 到自定义组件的全链路解析
  • 隔空盗刷、AI钓鱼、代理劫持…金融黑产竟进化至此?
  • Rewind-你人生的搜索引擎
  • 26、Jenkins流水线
  • 解密llama.cpp:从Prompt到Response的完整技术流程剖析
  • 从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型
  • Loopback for Mac:一键打造虚拟音频矩阵,实现跨应用音频自由流转
  • 用Markdown写自动化用例:Gauge实战全攻略!
  • AV1 OBU Frame解析
  • 系统编程day2-系统调用
  • 游戏世代网页官网入口 - 游戏历史记录和统计工具
  • Guidelines for using Adaptive Platform interfaces
  • 2025年互联网行业专业认证发展路径分析
  • GO学习记录九——数据库触发器的使用+redis缓存策略
  • 第4章 存储系统
  • GitLab Milestones 深度解析:选型、竞品、成本与资源消耗
  • 视频打不开怎么办?教你一键修改默认打开方式
  • zynq 开发系列 新手入门:GPIO 连接 MIO 控制 LED 闪烁(SDK 端代码编写详解)
  • React实现音频文件上传与试听
  • 服务器安装vnc服务端
  • jenkins安装和配置流程
  • 深度学习——CNN实例手写数字
  • 归一化的定义与作用
  • ip地址是硬件自带的还是被分配的