1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol video solution AI分析

方法思路

  1. 问题分析:决策树可能过拟合训练数据,需要通过剪枝提高泛化能力。对于每个节点,考虑将其转换为叶节点后的F1值,选择最优方案。
  2. 算法选择:使用深度优先搜索(DFS)后序遍历决策树。对于每个节点,计算:
    • 保留子树时的F1值(递归处理左右子树)
    • 剪枝为叶节点时的F1值
  3. 关键操作:比较两种方案的F1值,选择较大的一个,实现贪心剪枝。
  4. 复杂度分析:每个节点处理一次,每次处理需要遍历验证数据子集。时间复杂度为O(N*M),其中N为节点数,M为验证集大小。

解题代码

P3480.第3题-F1值最优的决策树剪枝

    1000ms Tried: 1993 Accepted: 407 Difficulty: 6 所属公司 : 华为
    算法与标签>树

题目内容

决策树生成算法递归地产生决策树,直到不能继续下去为止,这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。

在决策树学习中将已生成的树进行简化的过程称为剪枝。具体地,剪枝从已生成的树上裁掉一些子树或叶节点,并将其根节点或父节点作为新的叶节点,从而简化分类树模型。

小AAA希望通过决策树的方法解决一个二分类任务。在该二分类的任务中,标签 111 是正分类,标签 000 是负分类。现在小A已经训练了一个未剪枝的二分类的决策树。他希望对该决策树进行剪枝,能够在验证集上达到最优的 F1F1F1 值。

给定一个二叉树为待剪枝的二分类决策树,每个节点有 333 个参数 fi、thi、labelif_i、th_i、label_ifi​、thi​、labeli​ 。当节点非叶节点时,fi、thif_i、th_ifi​、thi​ 表示该节点决策应用的特征编号和阈值。在数据的第 fif_ifi​ 个特征小于等于 thith_ithi​ 时决策走左节点,大于 thith_ithi​ 时走右节点。决策树的预测通过该规则推理到叶节点时,叶节点的 labelilabel_ilabeli​ 为该条数据的预测结果。

请输出小AAA通过剪枝在验证集上可以达到的最优 F1F1F1 值。

输入描述

第一行为一个 N、M、KN、M、KN、M、K 。其中,N(1<=N<=100)N(1<=N<=100)N(1<=N<=100) 表示决策树的节点个数。M(1<=M<=300)M(1<=M<=300)M(1<=M<=300) 表示验证集条数。K(1<=K<=100)K(1<=K<=100)K(1<=K<=100) 表示每条验证集特征个数。

随后 NNN 行,第 iii 行表示第 iii 个节点,根节点编号为 111 ,每行包括 555 个整数 li、ri、fi、thi、labelil_i、r_i、f_i、th_i、label_ili​、ri​、fi​、thi​、labeli​ 。其中 li、ril_i、r_ili​、ri​ 分别表示节点的左右子节点编号 (0<=liri<=100)(0<=l_ir_i<=100)(0<=li​ri​<=100) 。若 li=0、ri=0l_i =0、r_i=0li​=0、ri​=0 则表示无子节点,不存在只有一个子节点的情况。当节点非叶节点时,fi、thif_i、th_ifi​、thi​ 表示该节点的特征编号和阈值,否则 fi、thif_i、th_ifi​、thi​ 为 000 。labelilabel_ilabeli​ 表示当该节点作为叶节点时的分类结果( labelilabel_ilabeli​ 取值为 000 或 111 )。

随后 MMM 行为验证集特征和 labellabellabel,每行 K+1K+1K+1 个整数,前 KKK 个整数为该条数据的特征,最后一个整数位该条数据的 labellabellabel 。

输出描述

请输出一个浮点数,为验证集可达到的最优 F1F1F1 值,四舍五入保留小数点后 666 位。

样例1

输入

7 3 2
2 3 1 50 0
4 5 2 50 0
6 7 2 50 1
0 0 0 0 0
0 0 0 0 1
0 0 0 0 0
0 0 0 0 1
30 60 1
30 30 1
60 30 1

输出

0.800000

说明

原始决策树为

image

第一条数据的终止节点为 555 ,节点 predictlabelpredict_labelpredictl​abel 为 111 ,预测正确。

第二条数据的终止节点为 444 ,节点 predictlabelpredict_labelpredictl​abel 为 000 ,预测错误。

第三条数据的终止节点为 666 ,节点 predictlabelpredict_labelpredictl​abel 为 000 ,预测错误。

PrecisionPrecisionPrecision 为 111 , RecallRecallRecall 为 1/3,F11/3,F11/3,F1 ScoreScoreScore 为 1/21/21/2 。

决策树可将节点 6、76、76、7 裁剪掉,裁剪后的决策树为:

image

第一条数据的终止节点为 555 ,节点 predictlabelpredict_labelpredictl​abel 为 111 ,预测正确。

第二条数据的终止节点为 444 ,节点 predictlabelpredict_labelpredictl​abel 为 000 ,预测错误。

第三条数据的终止节点为 333 ,节点 predictlabelpredict_labelpredictl​abel 为 111 ,预测正确。

PrecisionPrecisionPrecision 为 1,Recall1,Recall1,Recall 为 2/3,F12/3,F12/3,F1 ScoreScoreScore 为 4/5=0.8000004/5=0.8000004/5=0.800000 。

样例2

输入

7 3 3
2 3 3 87 1
0 0 1 3 0
4 5 1 38 1
0 0 2 8 1
6 7 2 94 1
0 0 2 44 1
0 0 2 9 0
30 78 73 0
73 99 99 1
72 3 2 0

输出

1.000000

提示

F1F1F1 值计算公式:

F1=2∗(Precision∗Recall)/(Precision+Recall)F1=2*(Precision *Recall) /(Precision + Recall)F1=2∗(Precision∗Recall)/(Precision+Recall)

开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 2, 68ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?