- 博客(23)
- 收藏
- 关注
原创 二叉树(基于Python)
分为深度优先遍历和广度优先遍历。二叉树的深度优先搜索会尽可能深地搜索树的分支,其具有三种形式:1:首先访问根节点,然后递归地遍历左子树,最后遍历右子树。2:首先遍历左子树,然后访问根节点,最后遍历右子树。3:首先遍历左子树,然后遍历右子树,最后访问根节点。尽管深度优先遍历可以使用递归法或迭代法实现,但是用递归法是最为自然的方式。二叉树的广度优先遍历又称为二叉树层次遍历,仅能使用迭代法来实现。其按层级顺序访问树中的每个节点。
2024-08-24 08:16:26
863
原创 回溯算法(基于Python)
结果录入程序写在哪:仅叶子结点记入结果(如46. 全排列),则结果录入这一步放在终止条件成立时的程序内部,每个节点都记入结果(如78. 子集),则结果录入这一步放在递归函数第一行(条件成立时的程序前面)。因此,在使用递归算法时,需要特别注意递归出口的设计,以避免出现死循环或栈溢出等问题。:树形图第一层选择的是第一行放入棋子的位置,第二层选择第二行放入棋子的位置,以此类推。中的情况,以树状图中的第一列第一层到第二层的过程为例,前面的步骤已经选过。回溯是递归过程,算法程序的主体就是递归函数。
2024-08-20 19:17:57
767
原创 动态规划(基于Python)
动态规划算法递归地将原问题划分为多个相互依赖的子问题,直至最小子问题,分解过程中会出现许多重叠子问题。此外动态规划问题还具有另外两大特性:最优子结构(原问题的最优解所包括的子问题的解也是最优的)、无后效性(给定一个确定的状态,它的未来发展只与当前状态有关,而与过去经历的所有状态无关)。动态规划算法的流程为:定义状态(当前步骤的值),建立dp。
2024-08-18 07:05:44
915
原创 二分查找(基于Python)
题目给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。算法:使用标准二分查找,若找到目标值则从mid位置分别向左右搜索开始和结束位置。
2024-08-17 07:14:42
998
1
原创 交叉验证法
交叉验证法(Cross-Validation)是一种评估机器学习模型性能的统计方法,特别是在模型选择和数据集相对较小的情况下。它通过将原始数据集分成多个部分,并在这些部分上分别训练和测试模型,以估计模型的泛化能力。
2024-07-04 15:23:20
379
原创 LeetCode经典题目解法(基于Python)
给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回ture;否则,返回false。例如输入nums=[2,3,1,1,4],则先跳1步,从第1个位置到达第2个位置,再跳3步从第2个位置到达第5个位置。:用i从0到len(nums)-1循环,创建变量max_pos记录当前最远可到达位置,若循环到某个i时有i>max_pos则返回False,否则True。
2024-06-21 22:35:03
1208
原创 RBF神经网络
径向基函数(radial basis function)神经网络是一种单隐层前馈神经网络,使用径向基函数作为隐层神经元的激活函数,输出层为隐层神经元的线性组合,假设输入为,可用随机采样、聚类等方法,第二步利用BP算法训练神经网络来确定。个神经元,输出为实数值(一个神经元),则RBF网络可以表示为。有足够多的隐层神经元的RBF网络能以任意精度逼近连续函数。RBF网络的训练一般是两步,第一步先确定神经元中心。
2024-06-15 10:52:34
254
原创 PyTorch与神经网络
矩阵相乘:torch.matmul(a, b),等价于a@b,对2维张量乘法就是一般的矩阵乘法,高于2维的情况,以4维为例,此时对a和b的最后两个维进行矩阵乘法运算,即a的size为n1×n2×n3×n,b的size为n1×n2×n×n4,则torch.matmul(a, b)的size为n1×n2×n3×n4,实际上就是将多个矩阵并行相乘,注意高于2维的两个张量相乘时除了最后两维需要满足矩阵乘法可行的要求外还需要前面的维要么完全相等要么适用broadcast机制。其不改变原始张量而是返回一个新张量。
2024-06-12 14:23:04
1989
原创 Python基础
range(start, stop, step):返回一个数字组成的列表,其元素以start开始,每次前进step,最后一个元素小于stop(即不包含stop),另有两种用法,range(start, stop)表示step=1的range(start, stop, step),range(stop)表示start=0且step=1的range(start, stop, step)。可变/不可变对象:列表、字典、Numpy数组都是可变对象。
2024-06-03 13:57:34
1704
原创 Anaconda和Python指南
有时特定的项目需要使用特定版本的Python和库/包/模块,项目A需要使用Python3.6+Numpy1.4,项目B需要使用Python3.8+Numpy1.7,则应将Python3.6、Numpy 1.4安装到同一个文件夹,将Python3.8、Numpy 1.7安装到同一个文件夹,在做项目A的时候,用A文件夹内的Python和Numpy,在做项目B的时候,用B文件夹的Python和Numpy。在接下来的对话框中,可以设置虚拟环境的名称和路径,以及所需的Python解释器版本。希望对大家有所帮助。
2024-06-01 17:13:40
728
原创 主成分分析
高维(特征多)情形下出现的样本稀疏是所有机器学习方法面对的共同问题,称为维数灾难,缓解这一问题的一个重要途径是降维,即通过某种数学变换将原始高维空间转变为一个低维空间,在低维空间中样本呢密度大大提高。之所以可以进行降维是因为收集到的样本虽然是高维的,但与学习任务密切相关的可能仅是某个低维分布。若要求原始空间中样品之间的距离在低维空间中与在高维空间中相同,则为多维缩放。一般来说最简单的降维方式为对原始空间进行线性变换,假设原空间的样本为。维实值矩阵,每行表示一个特征,每列表示一个样品,
2024-05-31 17:01:04
582
原创 K-means聚类
聚类(clustering)是无监督学习中研究最多应用最广的分支,作为无监督学习,其训练数据集没有标记信息(因变量),将样本划分为若干不交子集,每个子集成为一个簇(cluster)。来得到簇,其中||·||代表向量的二范数。然而上式的最小化只能通过考察样本。K-means算法通过最小化。∈{1,...,k}表示。,因此聚类结果可以用。
2024-05-30 16:20:57
164
原创 贝叶斯分类器
概率论框架下实施决策的基本方法,对分类任务来说,在所有相关概率都已知的情况下,贝叶斯决策论考虑如何基于这些概率与误判损失来选择最优类别标记。
2024-05-28 20:14:02
263
原创 LightGBM
LightGBM是对XGBoost的改进,相比之下LightGBM在损失了少量精度的情况下极大缩短了训练时间、减少了内存使用,其整体算法框架与XGBoost相似但是其中使用了很多数据压缩方法。与PCA、下采样等数据压缩方法相比,LightGBM的数据压缩损失的信息会少很多。连续变量离散化(等宽分箱)、对这些离散型变量进行EFB(互斥特征捆绑来降维)、GOSS采样(基于梯度的单边下采样,以一个比例(超参数1)划分大梯度样本和下梯度样本,前者不动,后者抽取一部分(抽取的比例是超参数2))。
2024-05-26 13:51:23
123
原创 XGBoost
是正则项,代表对树的复杂度的惩罚,其第一项代表对叶子结点数进行惩罚,第二项是对叶子结点的取值的平方和进行惩罚,前者和树的深度等价,都能反映一棵树的复杂度,后者太大则在集成学习器的预测中占比太高,也会过拟合。是回归树(CART)空间,L是树的叶子结点的数量,q是代表树的结构的函数,其将自变量映射到相应的叶子结点的编号上,\vec{w}是叶子结点的取值向量(w_l是第l个叶子结点的取值)。是可微凸函数,表示集成学习器和数据的拟合程度。XGBoost是Boosting算法的一种,假设原始样本为。
2024-05-24 22:01:10
144
1
原创 集成学习
当个体学习器之间的错误率相互独立时,集成学习的错误率会随着集成中个体学习器的数目T的增大指数下降趋于0,但是现实情况下个体学习器是为解决同一个问题训练出来的,不可能相互独立。个体学习器可以是同种类型的(同质集成),如全是决策树,也可以是不同类型的(异质),如同时包含决策树和神经网络。根据个体学习器的生成方式,集成学习方法可以大致分为两类,一是个体学习器之间存在强依赖关系必须串行生成的序列化方法(Boosting),二是个体学习器之间不存在强依赖关系可同时并行生成的并行化方法(Bagging、随机森林)。
2024-05-21 01:10:41
171
原创 决策树
分类模型,由结点和有向边组成,结点分为内部结点和叶子结点,分别代表特征和类别。用决策树进行预测的方法为将特征取值放入根结点,然后按取值分配到子结点上,直至到达叶子结点。假设样本为。
2024-05-19 16:54:32
282
1
原创 分类方法中的类别不平衡问题
假设样本中是+1类显著多于0类,则下采样去除部分+1类样本使得两类的样本数量接近再进行学习,上采样增加一些0类的数据使得两类样本数量接近再进行学习,阈值移动直接基于原数据集进行学习,用训练好的分类器进行预测时将预测阈值乘以一个参数,如logistic分类在。分类学习方法都有一个假设,即各类别的样本量想当或差别不大,否则会对学习产生负面影响,如样本量100,98个为+1类,2个为0类,则分类器只需在任何情况下都将类别预测为+1即可达到98%的训练集准确率。时将类别预测为+1类,我们现在引入大于1的参数a令。
2024-05-19 09:28:37
226
1
原创 多分类方法
SVM、logistic回归等方法都能进行二分类任务,我们可以直接利用这些方法进行多分类,思路是先将问题进行拆解,变成若干个二分类任务,对每个二分类任务进行学习,再将预测结果集成获得多分类结果。
2024-05-18 22:54:02
134
原创 线性判别分析(LDA)
解决二分类问题,假设两个类各自都服从正态分布。思想为将样本投影到一条直线上,使得同类的样本点投影尽可能接近,异类的样本点投影尽可能远离(组内方差小组间方差大)。训练完成后,给定一个新的点,将其投影到同一直线上,根据在直线上的位置预测其分类。注意空间中的点投影到直线上都变成了一维的实数而非向量,表示投影到直线上之后到原点的距离。表示投影直线的方向向量(模长为1)和第i类样本的集合、均值向量、协方差矩阵。根据协方差矩阵的性质可知其投影点的方差为。两类样本的均值在直线上的投影为。
2024-05-18 12:31:36
226
原创 logistic回归
解决二分类问题的回归方法,希望连接函数取值为[0,1],代表概率,当特征的线性组合经过连接函数的作用后大于0.5则看做一类,小于0.5看做另一类。这里因变量应当看做0-1随机变量,期望表示取1的概率。取符号后用梯度下降法求最小值。可得因变量的对数似然函数。
2024-05-18 02:48:26
207
原创 支持向量机(SVM)
用于解决二分类任务,假设训练样本为因变量支持向量机的思想为当样本线性可分时我们使用一个超平面将样本空间分开,超平面两侧分别是一类样本。若样本不是线性可分的则先将样本空间映射到一个特征空间中,使得特征空间线性可分,然后在特征空间中寻找一个超平面将两类样本分开。
2024-05-17 11:41:45
252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人