机器学习之树模型 决策树决策树顾名思义就是用决策树来做决定,可分为分类树和回归树,如下所示。 优点: 模型可解释。 可处理数值和类别的特征。 缺点: 非常不稳定(集成学习可解决这个问题)。 复杂的决策树会造成过拟合(剪枝可解决这个问题)。 难以并行计算。 随机森林(Bagging)随机森林的想法是既然一棵树不行,那就生成很多棵树。训练多个决策树来提升稳定性。每棵树独立地进行训练,训练结束后,所有树一起作 2025-02-25 Machine Learning #Tree Model
机器学习算法总览 机器学习 监督学习(Supervised Learning): 在有标号的数据上训练模型,模型的任务是预测标号。最近备受关注的一类算法: 自监督学习(Self-Supervised Learning),其数据的标号来自于数据本身。 半监督学习(Semi-Supervised Learning): 有一些已经标注好的数据,还有大量没有标注的数据。这里有两个任务,一个任务和监督学习一样去预测标号,但是 2025-02-02 Machine Learning #Machine Learning
灵神基础算法精讲-27-学习笔记 239.滑动窗口最大值给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 思路举个例子,比如数组元素为 2 1 4 2 3 2,求出每个长为 3 的连续子数组的最大值。假设我们坐在一架飞机上向下看,数组元素值为山的高度,一开始看到 2 1 4,最高为4,随着飞 2025-01-12 LeetCode #单调队列
灵神基础算法精讲-25-学习笔记 树形DP968.监控二叉树给定一个二叉树,在树的节点上安装摄像头。 节点上的每个摄像头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 首先分析根节点装不装摄像头,比如根节点不装摄像头,那么它至少有一个儿子要装摄像头。 除了根节点以外,根据选或不选的思想,有以下三种方式: 选,在这个节点装摄像头 不选,在它的父节点装摄像头 不选,在它的左/右儿子装 2025-01-10 LeetCode #动态规划
灵神基础算法精讲-17-学习笔记 198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路参考子集型回溯,有(1)选或不选(2)选哪个,这两种思路,对于很多动态规划问题,也 2025-01-02 LeetCode #动态规划
灵神基础算法精讲-16-学习笔记 46. 全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路数组元素各不相同,那么全排列的个数就是数组长度的阶乘。 相比组合,在排列中,元素的顺序是有区别的。 用一个数组 $path$ 记录路径上的数字(已选数字)。集合 $s$ 记录剩余未选数字。 回溯三问: 当前操作:从 $s$ 中枚举 $path[i]$ 要填入的数字 $x$。 子问 2025-01-01 LeetCode #回溯
灵神基础算法精讲-15-学习笔记 77. 组合给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路回顾子集型回溯,如果要从 3, 2, 1 中选出子集,按照每次选一个数的做法,可以得到一颗搜索树,搜索树每一层的数字个数是相同的,他们恰好可以表示从三个数中选择一个数的三种情况,选择两个数的三种情况和选择三个数的一种情况,这刚好就是我们要求的组合问题。 所以只需要在求子 2024-12-31 LeetCode #回溯
灵神基础算法精讲-14-学习笔记 回溯问题套路 子集型回溯0-1背包问题也可以算作一种子集型回溯。 子集本质上就是看集合的每个元素是选它还是不选它。 比如集合有两个元素,第一个元素选或者不选,有两种情况,第二个元素同理,那么总共有2*2=4种情况。 要想生成所有子集,有两种思路,区别在于当前操作是什么。如果站在输入的角度思考,那就是枚举第i个数,选它还是不选它;子问题就是从下标大于等于i的数字中构造子集;下一个子问题就是从下标大 2024-12-30 LeetCode #回溯
灵神基础算法精讲-13-学习笔记 102. 二叉树的层序遍历(广度优先搜索)给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 思路层序遍历是一行一行地遍历。 做法1初始化一个 cur 数组,把根节点放进去,然后开始循环,再创建一个 nxt(next) 数组,遍历 cur 数组中的每个节点,把他的左右儿子都放到 nxt 数组中,如果儿子是空的就不放,把 cur 遍历完之后就得到下一 2024-12-29 LeetCode #二叉树
灵神基础算法精讲-12-学习笔记 236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 思路分类讨论,对于当前节点,一共有四种情况,1.它是空节点;2.它是 p;3.它是 q;4.其它情况(是否找到 p 或 q 2024-12-28 LeetCode #二叉树