news 2025/12/30 13:42:39

【机器学习】案例1.1——决策树进行非线性回归任务(正弦曲线拟合)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【机器学习】案例1.1——决策树进行非线性回归任务(正弦曲线拟合)

一、项目背景与解决方案

1. 项目背景

决策树是机器学习中经典的非参数模型,可同时支持分类和回归任务(决策树回归)。在回归场景中,决策树通过递归划分特征空间,将每个划分后的子区域映射为该区域内样本的均值(以MSE为划分准则),从而实现对连续值的预测。

本项目聚焦非线性回归任务(正弦曲线拟合),核心目标包括:

  • 验证决策树回归器对带噪声非线性数据的拟合能力;
  • 探究决策树核心超参数max_depth(树深度)对拟合效果的影响(深度过小易欠拟合,深度过大易过拟合);
  • 通过可视化对比真实值与不同深度模型的预测值,直观展示超参数选择的重要性。
2. 解决方案

整体流程分为三步:

  1. 数据构建:生成[-3, 3]范围内的随机自变量,基于正弦函数生成因变量并添加轻微噪声,模拟真实场景的非线性带噪声数据;
  2. 基础拟合验证:使用固定深度(3)的决策树回归器拟合数据,可视化预测曲线与真实值的对比;
  3. 超参数对比分析:构建深度为2/4/6/8/10的决策树回归器,分别拟合数据并可视化预测曲线,分析不同深度的拟合效果(欠拟合/过拟合)。

二、带详细注释的代码

# 导入必要的库importnumpyasnp# 数值计算库,用于生成数据、数组处理fromsklearn.treeimportDecisionTreeRegressor# 导入决策树回归器importmatplotlib.pyplotasplt# 可视化库,用于绘制拟合结果# ===================== 第一步:构建带噪声的正弦函数数据集 =====================# 设置样本数量为100N=100# 生成[-3, 3]范围内的随机自变量x:np.random.rand(N)生成[0,1)的随机数,*6后范围是[0,6),-3后范围是[-3,3)x=np.random.rand(N)*6-3# 对x进行排序,方便后续可视化(排序后曲线更易观察)x.sort()# 生成因变量y:基于正弦函数np.sin(x),添加均值为0、方差0.05的随机噪声(模拟真实数据的噪声)y=np.sin(x)+np.random.rand(N)*0.05# 打印y值(可选,用于调试查看数据)print(y)# 重塑x的形状:sklearn模型要求输入特征为二维数组(样本数×特征数),reshape(-1,1)表示将一维数组转为N行1列的二维数组x=x.reshape(-1,1)# 打印重塑后的x(可选,用于调试查看数据维度)print(x)# ===================== 第二步:使用固定深度的决策树回归拟合数据 =====================# 初始化决策树回归器# criterion='mse':划分准则为均方误差(回归任务默认准则,最小化每个节点的均方误差)# max_depth=3:设置决策树最大深度为3,限制树的复杂度,避免过拟合dt_reg=DecisionTreeRegressor(criterion='mse',max_depth=3)# 用训练数据(x,y)拟合决策树模型dt_reg.fit(x,y)# 生成测试集:在[-3,3]范围内生成50个均匀分布的点,用于绘制平滑的预测曲线x_test=np.linspace(-3,3,50).reshape(-1,1)# 使用训练好的模型预测测试集的y值y_hat=dt_reg.predict(x_test)# 可视化真实值与预测值plt.plot(x,y,"y*",label="actual")# 绘制真实值,黄色星号标记plt.plot(x_test,y_hat,"b-",linewidth=2,label="predict")# 绘制预测值,蓝色实线,线宽2plt.legend(loc="upper left")# 显示图例,位置在左上角plt.grid()# 显示网格线,方便观察plt.show()# 展示图像# plt.savefig("./temp_decision_tree_regressor") # 可选:保存图像到指定路径# ===================== 第三步:对比不同深度的决策树拟合效果 =====================# 定义要测试的决策树深度列表depth=[2,4,6,8,10]# 定义对应深度曲线的颜色(r=红,g=绿,b=蓝,m=品红,y=黄)color='rgbmy'# 初始化决策树回归器(暂不指定深度,后续通过set_params动态修改)dt_reg=DecisionTreeRegressor()# 绘制真实值,黑色圆点标记plt.plot(x,y,"ko",label="actual")# 生成测试集(与第二步一致,用于绘制平滑预测曲线)x_test=np.linspace(-3,3,50).reshape(-1,1)# 遍历不同深度和对应颜色,逐一训练并可视化ford,cinzip(depth,color):# 动态设置决策树的最大深度dt_reg.set_params(max_depth=d)# 用训练数据拟合当前深度的决策树dt_reg.fit(x,y)# 预测测试集的y值y_hat=dt_reg.predict(x_test)# 绘制当前深度的预测曲线,指定颜色和线宽,添加图例标签plt.plot(x_test,y_hat,'-',color=c,linewidth=2,label="depth=%d"%d)# 显示图例,位置在左上角plt.legend(loc="upper left")# 显示网格线(b=True为显式开启,默认开启)plt.grid(b=True)# 展示图像plt.show()# plt.savefig("./temp_compare_decision_tree_depth") # 可选:保存对比图像到指定路径

简洁版

importnumpyasnpfromsklearn.treeimportDecisionTreeRegressorimportmatplotlib.pyplotasplt# 生成带噪声的正弦数据集N=100x=np.random.rand(N)*6-3x.sort()y=np.sin(x)+np.random.rand(N)*0.05x=x.reshape(-1,1)# 固定深度决策树回归拟合与可视化dt_reg=DecisionTreeRegressor(criterion='mse',max_depth=3)dt_reg.fit(x,y)x_test=np.linspace(-3,3,50).reshape(-1,1)y_hat=dt_reg.predict(x_test)plt.plot(x,y,"y*",label="actual")plt.plot(x_test,y_hat,"b-",linewidth=2,label="predict")plt.legend(loc="upper left")plt.grid()plt.show()# 对比不同深度决策树拟合效果depth=[2,4,6,8,10]color='rgbmy'dt_reg=DecisionTreeRegressor()plt.plot(x,y,"ko",label="actual")x_test=np.linspace(-3,3,50).reshape(-1,1)ford,cinzip(depth,color):dt_reg.set_params(max_depth=d)dt_reg.fit(x,y)y_hat=dt_reg.predict(x_test)plt.plot(x_test,y_hat,'-',color=c,linewidth=2,label=f"depth={d}")plt.legend(loc="upper left")plt.grid(b=True)plt.show()

三、代码运行结果分析

  1. 固定深度(3)的拟合结果:预测曲线能大致贴合正弦曲线的趋势,但因深度限制,曲线是分段常数(决策树回归的特性),不会过度拟合噪声;
  2. 不同深度的对比结果
    • 深度=2:曲线过于简单,无法捕捉正弦曲线的波动,呈现欠拟合
    • 深度=4/6:曲线能较好贴合正弦曲线趋势,拟合效果最优;
    • 深度=8/10:曲线过度贴合噪声点,呈现过拟合(曲线出现不必要的锯齿状波动)。

该结果验证了决策树深度对拟合效果的核心影响:深度需根据数据复杂度合理选择,过浅欠拟合、过深过拟合。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/28 4:37:38

Symbolic 英文单词学习

1️、基本信息单词:symbolic词性:形容词发音: 🇺🇸 /sɪmˈbɑː.lɪk/🇬🇧 /sɪmˈbɒl.ɪk/词源: 来自希腊语 symbolikos(象征的、符号的),由 s…

作者头像 李华
网站建设 2025/12/29 0:58:39

AI开发全流程工具链:从编码辅助到模型部署的实战指南

在AI开发的浪潮中,工具链已成为效率与质量的决定性因素。本文将系统拆解现代AI开发全流程,涵盖智能编码、数据处理、模型训练、评估部署五大环节,通过5个核心工具、12段实战代码、8个mermaid流程图、15个Prompt示例和6组对比图表,…

作者头像 李华
网站建设 2025/12/29 4:46:51

英语综合练习题

一、综合练习题I 单项选择 (每小题 1 分,共 20 分)( )21. Bruce likes playing ____ football, so his father will buy him ____ football.A. a; an B. the; a C. /; the D. /; a答案D(play 球类运动不加冠词;buy a football 表示 “买一个…

作者头像 李华
网站建设 2025/12/28 18:34:08

电力物联网系统能够发挥什么作用

电力物联网系统作为能源领域数字化转型的核心支撑,通过物联网、大数据、人工智能等技术的深度融合,实现了电力生产、传输、分配、消费全环节的智能化升级。其核心作用可归纳为以下六个方面,覆盖技术、经济、社会及环境多维度价值:…

作者头像 李华
网站建设 2025/12/30 5:05:36

压气站SCADA数据采集远程监控系统方案

压气站作为天然气管网重要的基础设施,对保障天然气稳定输送具有重要作用。通过实时采集SCADA到工业物联网平台中,管理人员能够实现对工艺系统、压缩机组、辅助系统的远程监控与控制,实现操作监护、巡检维护等工作的远程化与智能化&#xff0c…

作者头像 李华
网站建设 2025/12/27 5:56:18

12、高级渗透测试与中间人攻击技术详解

高级渗透测试与中间人攻击技术详解 在渗透测试领域,当成功获取服务器的 shell 后,我们需要提升权限并获取有助于测试的关键信息。本文将深入探讨高级渗透技术,包括密码哈希破解和中间人攻击,为渗透测试人员提供实用的操作指南。 高级渗透:密码哈希破解 在之前的步骤中我…

作者头像 李华