- 博客(128)
- 收藏
- 关注
原创 机器学习之多项式回归
维度多项式回归模型复杂度高,可拟合非线性关系决策边界曲线(单变量)/ 超曲面(多变量)过拟合风险高(尤其高次多项式)特征依赖性依赖原始特征及其高次项组合适用场景非线性关系数据(如抛物线、周期函数)多项式回归是连接线性模型与非线性模型的桥梁,通过简洁的特征工程手段,在无需引入复杂算法的前提下提升模型表达能力。原理直观:基于线性回归框架,数学推导清晰易懂;灵活性强:通过调整多项式次数和正则化参数,可平衡拟合能力与泛化能力;计算高效:无需复杂优化算法,适合中小规模数据场景。
2025-05-16 14:54:01
890
原创 机器学习之SVM
适用场景推荐优先选择 SVM小样本、高维数据(如文本、图像特征向量)。线性可分或近似线性可分的数据,或可通过核函数转化为线性可分的场景。需要高泛化性能且计算资源有限的任务。谨慎使用场景样本量极大(\(n > 10^5\)),建议改用深度学习或近似算法(如 SGD-SVM)。特征维度极高且无明显结构(如百万级稀疏特征),需先降维。学习路径理论基础掌握向量空间、凸优化、拉格朗日对偶等数学工具。推导线性 SVM 的最大间隔优化过程,理解核函数的数学本质( Mercer 定理)。工具实操。
2025-05-16 14:35:09
647
原创 机器学习之KNN
维度KNN模型类型懒惰学习、非参数模型训练阶段无(直接存储数据)计算成本预测时高(\(O(N)\))可解释性高(依赖近邻样本直观解释)数据依赖依赖全部训练数据适用场景推荐小规模数据集(如 N<10,000)的快速验证。数据分布复杂、非线性关系明显的场景(如图像、推荐)。需要快速解释预测结果的场景(如医疗诊断辅助)。谨慎使用场景大规模数据集(如 N>100,000,内存与计算效率受限)。高维稀疏数据(如文本特征维度 > 10,000,距离度量失效)。学习路径理论基础。
2025-05-16 10:58:06
756
原创 机器学习之随机森林
维度随机森林模型结构多棵树集成,基树间具有随机性差异过拟合风险低(通过集成和随机性抑制)特征依赖性低(特征随机选择降低相关性)计算成本高(训练多棵树)可解释性低(集成模型难以解读)泛化能力高(集成降低方差)优先选择随机森林结构化数据(表格数据)的分类 / 回归任务(如 Kaggle 竞赛基线模型)。特征维度高且非线性关系复杂的场景(如用户行为分析)。需要快速评估特征重要性的探索性分析。谨慎使用场景实时预测需求(推理速度较慢,需提前训练并序列化模型)。
2025-05-15 18:13:43
982
原创 机器学习之朴素贝叶斯(Naive Bayes)
维度朴素贝叶斯模型类型生成式模型(建模联合分布)假设基础特征条件独立假设计算复杂度低(线性时间)可解释性中(概率值可解读,但特征依赖隐含)数据依赖性对小规模、高维数据友好适用场景文本分类、实时预测优先选择朴素贝叶斯文本 / 自然语言处理任务(如垃圾邮件过滤、情感分析)。特征维度高但样本量不大的场景(如基因表达数据分类)。需要快速搭建基线模型或对计算资源有限的场景。谨慎使用场景特征间存在强依赖关系且无法通过特征工程缓解(如时间序列数据)。
2025-05-15 17:57:46
949
原创 机器学习之逻辑回归
优先选择逻辑回归需要高可解释性的业务场景(如医疗诊断、金融合规)。数据线性可分或特征工程成本较低的任务。快速验证基线模型,为复杂模型(如神经网络)提供对比基准。谨慎使用场景高度非线性数据(如图像、文本)且缺乏特征工程支持。类别数量极多(如超过 100 类)或样本量极小(如少于 1000 条)。
2025-05-15 17:43:59
819
原创 机器学习之决策树
优先选择决策树需要高可解释性的场景(如医疗诊断、金融风控)。数据规模较小或特征维度较低时(如几百个特征)。初步探索性分析,快速验证特征与目标的关系。谨慎使用场景高维稀疏数据(如文本数据,更适合线性模型或深度学习)。严格要求预测精度的复杂任务(需结合集成学习或深度学习)。
2025-05-15 17:27:56
527
原创 正则表达式详解与python指南
建议通过实际项目练习(如清洗 CSV 数据、解析日志文件)加深理解,逐步掌握这一强大工具。:默认尽可能长匹配(量词 +)
2025-05-15 17:12:56
932
原创 动态规划算法全面解析
动态规划是一种强大的算法策略,通过巧妙地利用子问题的重叠性和最优子结构,能够高效地解决许多复杂的问题。在工程实践中,需要根据具体问题的特点,合理设计状态和状态转移方程,并采用适当的优化策略来提高算法的性能和效率。随着深度学习和并行计算等技术的发展,动态规划算法也在不断地创新和发展,为解决更多复杂的实际问题提供了有力的工具。
2025-05-15 16:21:57
605
原创 回溯算法深度解析
回溯算法以其 “暴力搜索 + 智能剪枝” 的特性,成为解决组合搜索问题的核心工具。尽管在大规模场景中面临效率挑战,但其与机器学习、并行计算等技术的结合,正推动其在复杂优化问题中的应用拓展。在实际开发中,合理设计解空间树、优化剪枝策略和状态管理,是发挥回溯算法效能的关键。
2025-05-15 11:29:09
621
1
原创 贪心算法全面解析
贪心算法以其简洁高效的特性成为解决各类优化问题的常用工具,但其正确性高度依赖问题的贪心选择性质。在工程实践中,需结合问题特性设计合理的局部选择规则,并通过算法优化和混合策略提升性能。随着硬件技术和机器学习的发展,贪心算法正与新兴技术深度融合,在更多复杂场景中展现出强大的应用潜力。
2025-05-15 11:24:50
750
原创 克鲁斯卡尔(kruskal)算法——用于求出一个连通图中的最小生成树
通过Kruskal算法与Prim算法的组合使用,工程师可以在不同场景下构建高效的最小生成树解决方案。现代工程实践中,建议将两种算法封装为可互换模块,根据实时输入的图特征动态选择最优算法,这种混合策略在实际项目中可提升30%以上的综合性能。Kruskal算法采用。
2025-05-14 16:25:01
269
原创 最小生成树——Prim算法
Prim 算法通过贪心策略平衡效率与正确性,在不同场景下可通过优化数据结构(如优先队列、斐波那契堆)提升性能。其在网络拓扑优化、资源分配等领域具有广泛应用,是图论算法中的基础且重要的工具。四、时间复杂度深度分析。
2025-05-14 16:02:26
398
原创 迪克斯特拉Dijkstra算法
Dijkstra 算法以贪心策略为核心,通过优先队列优化显著提升了稀疏图的计算效率。其简洁的逻辑和广泛的适用性使其成为图论中解决单源最短路径问题的首选方案,但需注意其对负权边的限制。实际应用中,应根据图的密度和规模选择合适的实现方式,以平衡时间和空间复杂度。O((V+E) log V)(优先队列优化)<br<br>O(V²)(朴素实现,适用于稠密图)的经典算法,由荷兰计算机科学家Edsger W. Dijkstra于1956年提出。,能够高效计算从起点到所有其他节点的最短路径。Dijkstra算法采用。
2025-05-14 14:55:17
978
原创 Floyd算法(Floyd-Warshall Algorithm)
Floyd-Warshall 算法以其简洁性和对负权边的支持,成为解决多源最短路径问题的经典选择。尽管时间复杂度较高,但在中小规模图或需要全局路径信息的场景中表现出色。,支持处理包含负权边(但不含负权环)的图。它以简洁的代码实现多源最短路径问题,是图论中的经典算法之一。稠密图的多源最短路径、需处理负权边的场景。O(V²)(存储距离矩阵和前驱矩阵。的动态规划算法,其核心思想是通过。的负权环,导致最短路径无限减小。可通过额外维护前驱矩阵。O(V³)(V为节点数。
2025-05-14 14:40:14
457
原创 数据结构之BFS广度优先搜索
广度优先搜索(Breadth-First Search, BFS)是一种用于遍历或搜索树/图的算法,其核心思想是逐层扩展探索节点,即先访问所有相邻节点,再访问相邻节点的相邻节点。高炉指标说明O(V+E)(V为顶点数,E为边数)O(V)(队列最多存储所有顶点)最短路径(无权图)、层级遍历、社交网络关系链。
2025-05-14 14:32:29
302
原创 数据结构之DFS深度优先搜索
深度优先搜索(Depth-First Search, DFS)是一种用于遍历或搜索树/图的算法,其核心思想是**尽可能深地探索当前分支,直到无法继续,再回溯到上一个分叉点。DFS 系列指标说明O(V+E)(V为顶点数,E为边数)O(V)(最坏情况下递归栈或显式栈存储所有顶点)路径查找、连通分量检测、拓扑排序、迷宫求解3.算法步骤5.C++实现6.总结。
2025-05-14 14:16:17
369
原创 数据结构之哈希查找
哈希查找(Hash Search)是一种基于**哈希表(Hash Table)将键(Key)直接映射到存储位置(Bucket),从而实现**平均O(1)快速查找、去重、缓存(如Python字典、Redis、HashMap)平均O(1),最坏O(n)(所有键冲突时退化为链表)不稳定(哈希函数可能打乱原始顺序)O(n)(额外空间存储哈希表)
2025-05-14 12:37:14
407
原创 数据结构之树表查找
高频插入删除的动态数据(如Java HashMap)平均O(log n),最坏O(n)(退化为链表)需要范围查询的数据库(如Oracle索引)文件系统、数据库索引(如MySQL)O(log n)(磁盘I/O优化)O(log n)(范围查询更高效)需要稳定查询效率的静态/动态数据。O(n×L)(可能存在冗余存储)字符串前缀匹配(如输入法提示)动态数据且无需严格平衡的场景。O(L)(L为单词长度)严格O(log n)最坏O(log n)稳定O(log n)稳定O(log n)文件系统、数据库索引。
2025-05-14 11:43:34
1286
原创 数据结构之斐波那契查找
通过黄金分割比例(约0.618)减少比较次数。相比二分查找的固定中点分割,斐波那契查找在特定场景下能更高效地逼近目标位置。斐波那契查找是二分查找的另一种优化变种,其核心思想是。
2025-05-14 11:16:16
191
原创 数据结构排序算法—堆排序
堆排序将数据视为完全二叉树进行处理,既保持了选择排序的简单性,又通过堆结构将时间复杂度优化到O(n log n)级别,是理解树形结构在排序中应用的经典案例。堆排序(Heap Sort)是一种基于完全二叉树结构的排序算法,利用堆的性质进行排序。交换10和1 → 调整堆 → 交换5和1 → 调整堆 → ... → 最终有序。:通过反复交换堆顶元素与末尾元素,并调整堆结构,逐步将极值元素移到有序区。:将无序数组构建成一个大顶堆(最大堆)或小顶堆(最小堆):从当前节点向下递归调整,保证父节点始终大于子节点。
2025-05-09 16:06:14
468
原创 数据结构排序算法之希尔排序
希尔排序(Shell Sort)是插入排序的高效改进版本,其核心思想是通过动态缩小的增量将数组分割为多个子序列,分别进行插入排序。随着增量逐渐减小,子序列越来越长,最终当增量为1时,整个数组进行一次插入排序。:取决于增量序列的选择。使用希尔原始序列(N/2, N/4, ..., 1)时,平均时间复杂度约为 O(n log n) 到 O(n²),最坏情况下为 O(n²)。:初始增量(间隔)为数组长度的一半,之后每次缩小为前一次的一半。:重复上述步骤,直至增量为1,完成最后一次全数组插入排序。
2025-04-30 15:09:53
777
原创 数据结构排序算法之归并排序
归并排序是一种典型的分治算法,其核心操作分为两个关键步骤:分解与合并。在分解阶段,它将一个完整的数组不断地递归分割成左右两半。这种递归操作会持续进行,直到每个子数组的长度缩减至 1。为什么要到长度为 1 呢?因为长度为 1 的子数组天然就是有序的。想象一下,一个数组里只有一个元素,它本身就不存在顺序问题。而在合并阶段,归并排序会将两个已经有序的子数组合并成一个新的有序数组。这个过程会持续进行,从最开始的小的有序子数组,逐步合并成更大的有序数组,直到所有的子数组都被合并完成,最终得到一个完全有序的原数组。
2025-04-14 16:00:38
824
原创 数据结构排序算法之快速排序
在快速排序中,分解步骤是通过“划分”操作完成的,而合并步骤则不需要显式执行,因为子数组的排序结果会自然地组合成整个数组的排序结果。这是因为每次划分操作将数组分为两部分,递归深度为O(log n),每次划分操作的时间复杂度为O(n)。2. 重新排列数组:将数组中的元素重新排列,使得所有小于基准值的元素都位于基准值的左侧,所有大于基准值的元素都位于基准值的右侧。3. 递归排序子数组:对基准值左侧的子数组和右侧的子数组分别递归执行上述步骤,直到子数组的大小为1或0,此时整个数组即为有序。• 选择数组的中位数。
2025-03-12 13:47:08
302
原创 数据结构排序算法之冒泡排序
正如计算机科学家Donald Knuth所言:"过早优化是万恶之源",冒泡排序正是这种理念的最佳注脚——在正确的地方使用合适的工具,才是程序设计的真谛。在计算机科学的璀璨星河中,冒泡排序犹如一颗独特的星辰,虽然亮度不及快速排序等高效算法,却以简单优雅的排序哲学照亮了无数初学者的算法之路。这个诞生于1956年的经典算法,至今仍在编程入门课程中占据重要位置,因为它完美诠释了算法设计的本质——用最直观的方式解决问题。第一轮:3↔5,5↔8,6↔8 → [3,5,6,4,8]从第一个元素开始,比较相邻元素。
2025-03-03 16:20:45
323
原创 龙格现象及分段线性插值基于python实现
3.与原函数的图像相比较,当插值节点数n增加时,由于插值多项式的次数也随之增加,拉格朗日插值多项式逼近函数的效果随之下降,插值函数相较于原函数更加失真,振荡现象严重。依据x的值以及所对应的y的值,分别求解出不同的插值点个数n所对应的格朗日插值多项式,并将函数图像可视化。
2023-08-21 15:58:48
1464
1
原创 牛顿插值法基于python的实现方法
插值法利用函数f(x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f(x)的近似值。牛顿插值法相对于拉格朗日插值法具有承袭性的优势,即在增加额外的插值点时,可以利用之前的运算结果以降低运算量。
2023-08-21 15:56:51
2084
1
原创 拉格朗日插值法基于python的实现方法
(x-x1)/(x0-x1)*y0+(x-x0)/(x1-x0)*y1 可以看出当x=x0的时候,函数值y0,当x=x1的时候,函数值为y1.已知,f(xk)=yk(k=0,1....n),在函数类P中寻找一个函数Φ(x)。线性插值:拉格朗日插值法中最简单的是线性插值,我们先来了解线性插值函数的构成。在此基础上了解多次插值,f(x)为被插值函数,Φ(x)为插值函数,x0,x1....xn为插值节点。设函数y=f(x)在区间[a,b]上连续,给定n+1个点。
2023-08-21 15:55:17
1208
原创 高斯消元法基于python的具体实现方法
消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其代入到另一方程中,这就消去了一未知数,得到一解;或将方程组中的一方程倍乘某个常数加到另外一方程中去,也可达到消去一未知数的目的。思路就是根据高斯消元法的特性,先将矩阵化成行阶梯型矩阵,由行阶梯型矩阵得出秩再判断线性方程组解的个数。得出解的个数后,如果存在唯一解,再将之前的矩阵化为行最简形矩阵,得出线性方程组的解。R(A)=R(Ab)<N时方程有无穷个解 (齐次方程称有非0解)R(A)=R(Ab)=N时方程有唯一解 (齐次方程称无非0解)
2023-08-21 15:53:55
492
原创 迭代法基于python的实现方法
令Ux = y,则原线性方程组Ax = b可首先求解向量y 使Ly = b,然后求解 Ux = y,从而达到求解线性方程组Ax= b的目的。再考察公式S会发现A中任一元素aij只在计算lij(j<=i)和uij(u>=j)中用到一次,以后就不再出现了,因为完全可以利用原始数据A的单元,一个个逐次存储L或U中。将系数矩阵A转变成等价的两个矩阵L和U的乘积,其中L和U分别是下三角和上三角矩阵,而且要求L的对角元素都是1;L和U中的三角零元素都不必存储,这样只用一个n阶仿真就可以把L和U存储起来。
2023-08-21 15:52:42
237
原创 基于JSP技术实现网上书城系统设计的基础知识
对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.如何处理应用程序的界面变得越来越有挑战性。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统和具体的DBMS,而是概念级的模型,然后再把模型转换为计算机上某一个DBMS支持的数据模型。
2023-08-21 15:49:37
193
原创 纽约出租车大数据分析
在纽约到处都是单向的、小的小巷,在任何特定的时间点,行人的数量几乎无法计算。本系统采用Hadoop HDFS分布式文件处理系统来存储原始大数据集,采用专为大规模数据处理而设计的快速通用的计算引擎spark进行数据的分析处理,使用Java WEB框架springboot作为底层的应用开发框架,通过spring DATA JPA将数据的处理与分析结果保存在事务性数据库MYSQL中,并使用ECharts(一个优雅的使用 JavaScript 实现的开源可视化库)来作为数据的前端展示页面。
2023-08-21 15:46:28
912
原创 最优化方法-最速下降法
算法的模型参数,即无约束优化问题时,梯度下降是最常采用的方法之一,在求。解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化。的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时。在解决无约束问题时,经常用到的一类算法是最速下降法,在求解机器学习。经过结果分析,每次迭代的结果坐标趋向于精确解。就需要用梯度上升法来迭代了。使用最速下降法求函数的最小值。对运行结果绘制过程图。
2023-05-13 20:04:50
575
原创 Python爬取疫情数据并预测及其可视化
随着节后返乡日期的临近,如何安全有序地掌握职工返乡的真实情况,有效规避二次传播风险,这已成为地方政府和企业的难题,是疫情初期建立起来的一套疫情防控管理体系,使人们及时掌握个人防疫信息资料、防疫资料的收集和使用,施工人员可以在任何时间、任何地点迅速报告有关预防个人传染病的信息。需要采集的数据:由于数据中today和total嵌套着字典,因此不能直接获取,对于id、lastUpdateTime、name、可以直接取出为一个数据,today为一个数据,total为一个数据,最后三个数据合并为一个数据。
2023-04-27 09:55:14
1846
1
原创 利用数据结构知识实现二叉排序树的基本运算算法
新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。被删除的结点可能是二叉排序树中的任何结点,删除结点后要根据其位置不同修改其双亲结点及相关结点的指针,以保持二叉排序树的特性。(1) 由关键字序列(16,74,60,45,43,67,31,29,88,77)创建一棵二叉排序树Bt;从空的二叉排序树开始的,每输入一个结点,经过查找操作将新结点插入到当前二叉排序树的合适位置。(2) 将上述创建的二叉排序树执行树的中序遍历,并输出结果;
2023-04-27 09:52:11
1073
原创 数据结构-图的邻接矩阵和邻接表的存储实现
/输入存在边的两顶点。9.主函数:定义有向图G的邻接矩阵,顶点数为6,边数为10,分别输出G的邻接矩阵和邻接表,销毁邻接表。printf("第%d对:",i+1);printf("图G的邻接矩阵:\n");建立如图1所示的有向图G的邻接矩阵,并输出;实验内容:1.掌握图的邻接矩阵的存储定义;建立如图1所示的有向图G的邻接表,并输出;2.掌握图的邻接表的实现。5.有向图起始点、终点及权值的输入。
2023-04-27 09:48:50
2820
3
原创 数据结构实验-二叉树的基本操作
为空:输出栈顶节点值(stack.peek().val),让 root 指向 stack.pop(),并将 root 重新指向 root.right。递归:若二叉树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点左子树,然后访问根结点,最后中序遍历右子树。递归:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。当根节点(root)与栈(stack)同时不为空,判断 root 是否为空,若二叉树为空,则空操作返回,若二叉树为空,则空操作返回,
2023-04-27 09:47:15
314
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人