随机算法

Miller-Rablin与Pollard-Rho算法(素性测试与质因数分解)

坚强是说给别人听的谎言 提交于 2019-11-30 03:51:40
前置 费马小定理(即若P为质数,则 \(A^P\equiv A \pmod{P}\) )。 欧几里得算法(GCD)。 快速幂,龟速乘。 素性测试 引入 素性测试是OI中一个十分重要的事,在数学毒瘤题中有着举足轻重的地位。 常见的素性测试如下: int check(int N){ for(int i=2;i*i<=N;i++) if(N%i==0)return 0; return 1; } 以上是一个 \(O(\sqrt{N})\) 的算法,虽然不优,但在绝大多数情况下是可以的。 但是,假如 \(N\) 的范围达到了 \(1e18\) ,以上算法很明显就不行了,我们得考虑更优的算法。 引入Miller-Rablin算法。 定理1 定理1:如果 \(P\) 为一个 大于2 的素数,那么方程 \(X^2\equiv1 \pmod{P}\) 的解只有1或者-1。 (是真得水的) 证明如下: 由 \(X^2\equiv1 \pmod{P}\) ,得 \((X^2-1)\equiv0 \pmod{P}\) , 即 \({(X+1)(X-1)}\equiv0 \pmod{P}\) 。 则 \(P | (X+1)\) 或 \(P|(X-1)\) , 即 \((X+1)\equiv0 \pmod{P}\) 或 \((X-1)\equiv0 \pmod{P}\) 。 则 \(X\equiv-1

随机森林RF

拜拜、爱过 提交于 2019-11-30 03:33:18
随机森林的一般步骤: 对原始数据集进行可放回随机抽样成K组子数据集 从样本的N个特征随机抽样m个特征 对每个子数据集构建最优学习模型 对于新的输入数据,根据K个最优学习模型,得到最终结果 采用bagging的方法可以降低方差,但不能降低偏差 公式法分析bagging法模型的方差问题: 假设子数据集变量的方差为,两两变量之间的相关性为 所以,bagging法的方差: 由(4)式可得,bagging法的方差减小了 结论:bagging法的模型偏差与子模型的偏差接近,方差较子模型的方差减小。所以,随机森林的主要作用是降低模型的复杂度,解决模型的过拟合问题。 随机森林是指利用多棵决策树对样本进行训练并预测的一种算法。也就是说随机森林算法是一个包含多个决策树的算法,其输出的类别是由个别决策树输出的类别的众树来决定的。在Sklearn模块库中,与随机森林算法相关的函数都位于集成算法模块ensemble中,相关的算法函数包括随机森林算法(RandomForestClassifier)、袋装算法(BaggingClassifier)、完全随机树算法(ExtraTreesClassifier)、迭代算法(Adaboost)、GBT梯度Boosting树算法(GradientBoostingClassifier)、梯度回归算法(GradientBoostingRegressor)、投票算法

随机森林算法OOB_SCORE最佳特征选择

时光毁灭记忆、已成空白 提交于 2019-11-30 00:51:01
RandomForest算法(有监督学习),可以根据输入数据,选择最佳特征组合,减少特征冗余;原理:由于随机决策树生成过程采用的Boostrap,所以在一棵树的生成过程并不会使用所有的样本,未使用的样本就叫(Out_of_bag)袋外样本,通过袋外样本,可以评估这个树的准确度,其他子树叶按这个原理评估,最后可以取平均值,即是随机森林算法的性能;特征选择原理:因为袋外样本的存在,因此不需要进行十字交叉测试(节省时间),通过依次对每个特征赋予一个随机数,观察算法性能的变化,倘若变化大,则说明该特征重要,sklearn中会对每个特征赋予一个分数,分数越大,特征越重要,因此,可以根据特征重要性排序,然后选择最佳特征组合;随机森林算法特征维度,不同于PCA,随机森林算法能够考虑到特征对类别的影响,而PCA是单纯的数据方差;但是随机森林的缺点是需要迭代计算,如果在大数据条件下,进行选择,就难免有点捉襟见肘了;与LDA区别在于:LDA根据标签,通过变换将同标签数据距离缩小,将累间距离方法;LDA是一种有监督方法,PCA属于无监督方法;以上是原理和一些个人见解;现在上代码;已经在工作中跑了,学了Python的应该都能看懂,只要改一下数据路径,初始特征选择数量等就可以使用,不懂的可以问我,博客会常在的, 没全部注释!还有另外一个特征选择,就是通过利用oob对每个特征,迭代进行,评估分数

模拟退火算法理论及其MATLAB实现

邮差的信 提交于 2019-11-29 14:26:17
像遗传算法,模拟退火,免疫算法,粒子群算法,神经网络,蚁群算法,禁忌搜索这样的智能算法,都是 独立于问题 的算法。对于TSP这种NP难问题,不可能有解析的确定的算法去求解全局最优解,只能依靠这种随机搜索算法去求解局部最优解。 这个 “独立于问题” 描述地特别到位,精辟,道出了本质。 来源: https://blog.csdn.net/qq_36607894/article/details/100584628

动手学深度学习(MXNet)4:优化算法

你。 提交于 2019-11-29 06:30:16
优化算法通常只考虑最小化目标函数。其实,任何最大化问题都可以很容易地转化为最小化问题,只需令目标函数的相反数为新的目标函数即可。 由于优化算法的目标函数通常是一个基于训练数据集的损失函数,优化的目标在于降低训练误差。而深度学习的目标在于降低泛化误差。为了降低泛化误差,除了使用优化算法降低训练误差以外,还需要注意应对过拟合。 深度学习中绝大多数目标函数都很复杂。因此,很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法找到近似解,即数值解。本书中讨论的优化算法都是这类基于数值方法的算法。为了求得最小化目标函数的数值解,我们将通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。 两个挑战 ,即局部最小值和鞍点。 梯度下降和随机梯度下降 def train_2d(trainer): # 本函数将保存在d2lzh包中方便以后使用 x1, x2, s1, s2 = -5, -2, 0, 0 # s1和s2是自变量状态,本章后续几节会使用 results = [(x1, x2)] for i in range(20): x1, x2, s1, s2 = trainer(x1, x2, s1, s2) results.append((x1, x2)) print('epoch %d, x1 %f, x2 %f' % (i + 1, x1, x2)) return results

zz神经网络模型量化方法简介

我的未来我决定 提交于 2019-11-29 03:39:46
神经网络模型量化方法简介 https://chenrudan.github.io/blog/2018/10/02/networkquantization.html 2018-10-02 本文主要梳理了模型量化算法的一些文章,阐述了每篇文章主要的内核思想和量化过程,整理了一些对这些文章的分析和看法。 【转载请注明出处】 chenrudan.github.io 随着神经网络算法的发展,网络性能虽然越来越强大,但是也耗费了太多的计算资源和内存,为了得到更有效率的网络以及能部署在移动端,近几年神经网络的压缩算法成了一个研究热点,主要的网络压缩途径有五种,量化、剪枝、低秩分解、教师-学生网络、轻量化网络设计,量化就是将以往用32bit或者64bit表达的浮点数用1bit、2bit占用较少内存空间的形式进行存储。剪枝的目的是为了去掉一些不重要的神经元、连接、通道等,低秩分解主要是通过各种分解方法用精简的张量来表达复杂张量,教师-学生网络间接通过提升小网络性能来压缩学生网络的规模,一般可以与其他压缩方法同时使用,轻量化网络设计主要是类似MobileNet这种设计的非常精简但性能又好的网络。几种方法都各有特点,都是值得研究和讨论的,本文主要针对量化算法近几年的发展做一个梳理和归纳,我觉得量化算法有几个特点, 理论简单,公式少,性能稳定且trick多。 下图1

路径规划: PRM 路径规划算法 (Probabilistic Roadmaps 随机路标图)

坚强是说给别人听的谎言 提交于 2019-11-29 02:03:23
路径规划作为机器人完成各种任务的基础,一直是研究的热点。研究人员提出了许多规划方法如: 1. A* 2. Djstar 3. D* 4. 随机路标图(PRM)法 2. 人工势场法 2. 单元分解法 4. 快速搜索树(RRT)法等。 传统的人工势场、单元分解法需要对空间中的障碍物进行精确建模,当环境中的障碍物较为复杂时,将导致规划算法计算量较大。 基于 随机采样技术 的 PRM法 可以有效解决 “高维空间” 和 “复杂约束” 中的路径规划问题。 1. 简介 如上图所示, PRM(Probabilistic Roadmaps) 是一种基于图搜索的方法,一共分为两个步骤: 学习阶段 , 查询阶段 它将连续空间转换成离散空间,再利用A*等搜索算法在路线图上寻找路径,以提高搜索效率。 这种方法能用相对少的随机采样点来找到一个解,对多数问题而言,相对少的样本足以覆盖大部分可行的空间,并且找到路径的概率为1(随着采样数增加,P(找到一条路径)指数的趋向于1)。显然,当采样点太少,或者分布不合理时,PRM算法是不完备的,但是随着采用点的增加,也可以达到完备。所以PRM是概率完备且不最优的。 用随机路径图(PRM)法寻找给定地图中两点之间的路径,PRM进行路径规划的步骤: 学习阶段: 在给定图的自由空间里随机 撒点 (自定义个数),构建一个 路径网络图 。 a)构造步骤 b)扩张步骤 查询阶段:

RRT路径规划算法概述

自作多情 提交于 2019-11-29 02:02:34
本文主要记录本人之前调研过在三维复杂环境下的路径规划算法。 RRT快速随机搜索树 快速扩展随机树 (Rapidly-exploring Random Trees , RRT) 算法,是近十几年得到广泛发展与应用的基于采样的运动规划算法,它由美国爱荷华州立大学的 Steven M. LaValle 教授在 1998 年提出。 RRT 算法是一种在多维空间中有效率的规划方法。原始的 RRT 算法是通过一个初始点作为根节点,通过随机采样,增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由树节点组成的从初始点到目标点的路径。 RRT是一种通过随机构建空间填充树来有效搜索非凸,高维空间的算法。树是从搜索空间中随机抽取的样本逐步构建的,并且本质上倾向于朝向大部分未探测区域生长。由于它可以轻松处理障碍物和差分约束(非完整和动力学)的问题,并被广泛应用于自主机器人 运动规划 。 RRT也可以被看作是一种为具有状态约束的非线性系统生成开环轨迹的技术。一个RRT也可以被认为是一个 蒙特卡罗 方法。用来将搜索偏向一个配置空间中图形的最大 Voronoi区域 。一些变化甚至可以被认为是随机分形。 改进的RRT算法: 基于概率P的RRT; RRT_Connect’ RRT*; Parallel-RRT; Real-time RRT;

路径规划学习入门

半世苍凉 提交于 2019-11-29 02:02:18
运动规划简介 当虚拟人开始一次漫游时,首先全局规划器根据已有的长期信息进行全局静态规划,确定虚拟人应该经过的最优化路线。然后全局规划器控制执行系统按照该路径运动。在运动过程中,感知系统会持续对周围环境进行感知。当发现动态的物体或未知障碍时,局部规划器根据这些感知到的局部信息,确定短期內的运动。当避障行为的优先级高于沿原路径前进时,局部规划器就能够通过竞争获得执行系统的控制权,使得虚拟人按照局部规划结果运动。完成对当前感知障碍的规避行为后,全局规划器再次取得执行系统的控制权,使得虚拟人重新回到全局规划路径上,继续向目标点运动。 参考 Dijkstra和A*算法做的效果演示动画 A*算法加入了启发函数,用于引导其搜索方向,A*算法会比Dijkstra算法规划速度快不少 最佳优先搜索(BFS)算法  BFS按照类似的流程运行,不同的是它能够评估(称为启发式的)任意结点到目标点的代价。与选择离初始结点最近的结点不同的是,它选择离目标最近的结点。BFS不能保证找到一条最短路径。然而,它比Dijkstra算法快的多,因为它用了一个启发式函数(heuristic function)快速地导向目标结点。例如,如果目标位于出发点的南方,BFS将趋向于导向南方的路径。在下面的图中,越黄的结点代表越高的启发式值(移动到目标的代价高),而越黑的结点代表越低的启发式值(移动到目标的代价低)

机器学习优化器总结

一笑奈何 提交于 2019-11-28 16:32:05
一、梯度下降法 1、标准梯度下降法(GD) 公式: W t + 1 = W t − η t Δ J ( W t ) 其中, W t Wt表示 t t时刻的模型参数。 从表达式来看,模型参数的更新调整,与代价函数关于模型参数的梯度有关,即沿着梯度的方向不断减小模型参数,从而最小化代价函数。 基本策略可以理解为” 在有限视距内寻找最快路径下山 “,因此每走一步,参考当前位置最陡的方向(即 梯度 )进而迈出下一步。可以形象的表示为: 缺点: 训练速度慢: 每走一步都要要计算调整下一步的方向,下山的速度变慢。在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本。会使得训练过程及其缓慢,需要花费很长时间才能得到收敛解。 容易陷入局部最优解: 由于是在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。所谓的局部最优解就是鞍点。落入鞍点,梯度为0,使得模型参数不在继续更新。 2、批量梯度下降法(BGD) 假设批量训练样本总数为nn,每次输入和输出的样本分别为X (i) ,Y (i) ,模型参数为W,代价函数为J(W),每输入一个样本i代价函数关于W的梯度为ΔJi(Wt,X (i) ,Y (i)) ,学习率为ηt,则使用批量梯度下降法更新参数表达式为: W t + 1 = W t − η t ∑ i = 1 n Δ J i (