随机算法

有哪些令人拍案叫绝的算法?

帅比萌擦擦* 提交于 2020-03-09 13:57:06
介绍一个简单易懂然后又让你拍案叫绝的算法! 这个算法的代码量很少,却很惊艳。 它就是传说中的 洗牌算法 ! 小技巧:看到一个好答案,想点赞又嫌麻烦,可以双击屏幕自动点,既能鼓舞作者,又能很方便自己下次再看。我用这个方法,已经快速标记 10 来个好文章了。 先来思考一个问题:有一个大小为 100 的数组,里面的元素是从 1 到 100 按顺序排列,怎样随机的从里面选择 1 个数? 最简单的方法是利用系统的方法 Math.random() * 100 ,这样就可以拿到一个 0 到 99 的随机数,然后去数组找对应的位置就即可。 接下来在思考一个问题: 有一个大小为100的数组,里面的元素是从 1 到 100 按顺序排列,怎样随机的从里面选择 50 个数? 注意数字不能重复! 注意数字不能重复! 注意数字不能重复! 如果根据上面的思路,你第一想法是:随机 50 次不就行了? 但是,这样做有个很明显的 bug :数字是会重复的。 修改一下? 弄一个数组,把每一次随机的数都放到数组里,下一次随机就看这个数组里面有没有这数,有的话就继续随机,直到这个数组里面有 50 个数字就停止。 这样是可以的! 但,还是有个小问题,考虑一下极端情况:有一个大小为100的数组,里面的元素是从 1 到 100 按顺序排列,怎样随机的从里面选择 99 个数。 如果按照上面的方法操作

Machine Learning系列--CRF条件随机场总结

对着背影说爱祢 提交于 2020-03-02 22:57:08
根据《统计学习方法》一书中的描述,条件随机场(conditional random field, CRF)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔科夫随机场。 条件随机场是一种判别式模型。 一、理解条件随机场 1.1 HMM简单介绍 HMM即 隐马尔可夫模型 ,它是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成 不可观测的状态随机序列 ,然后各个状态分别生成一个观测,从而产生观测随机序列。 在这个过程中,不可观测的序列称为状态序列(state sequence), 由此产生的序列称为观测序列(observation sequence)。 该过程可通过下图描述: 上图中, $X_1,X_2,…X_T$是隐含序列,而$O_1, O_2,..O_T$是观察序列。 隐马尔可夫模型由三个概率确定: 初始概率分布 ,即初始的隐含状态的概率分布,记为$\pi$; 状态转移概率分布 ,即隐含状态间的转移概率分布, 记为$A$; 观测概率分布 ,即由隐含状态生成观测状态的概率分布, 记为$B$。 以上的三个概率分布可以说就是隐马尔可夫模型的参数,而根据这三个概率,能够确定一个隐马尔可夫模型$\lambda = (A, B, \pi)$。 而隐马尔科夫链的三个基本问题为: 概率计算问题 。即给定模型$\lambda = (A,

算法之洗牌算法(随机置乱算法)

孤者浪人 提交于 2020-03-02 02:15:47
排序算法用于将一个序列变成有序的,而洗牌算法则用于将一个序列打“乱”,可以认为是排序算法相反。洗牌算法需要借助随机数实现来打“乱”序列。 洗牌算法正确性的判断准则(“乱”的判断依据):对于包含n个元素的序列,其全排列有n!种可能,故若一个洗牌算法将序列打乱的 不同结果有n!种 则该算法就是正确的洗牌算法。如果打乱的结果可能的种数比n!大,则说明有些情况出现的概率更大。 参阅: https://github.com/labuladong/fucking-algorithm/blob/master/算法思维系列/洗牌算法.md 来源: https://www.cnblogs.com/z-sm/p/12393211.html

Java经典算法编程题目

杀马特。学长 韩版系。学妹 提交于 2020-03-01 07:48:06
1. 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值, 最小值,平均值,和值,并输出出来。 class ArrayNumber{ public static void main(String[] args){ int[] arrayNumber; arrayNumber = new int[10]; System.out.println(“以下是随机的10个整数:”); // 填入随机的 10个整数 for (int i =0; i<arrayNumber.length; i++){ arrayNumber[i] = (int)(100*Math.random()); System.out.print(arrayNumber[i]+” “); } System.out.println(); int max = arrayNumber[0]; int min = arrayNumber[0]; int sum = 0; for (int i =0; i<arrayNumber.length; i++){ if(max < arrayNumber[i]) max = arrayNumber[i]; //求最大值 if(min > arrayNumber[i]) min = arrayNumber[i]; //求最小值 sum +=

机器学习——随机森林算法

穿精又带淫゛_ 提交于 2020-02-28 22:14:56
机器学习——随机森林算法 1、随机森林引入 在之前的文章 机器学习——AdaBoost算法 中,我们引入了集成学习的概念,我们再来回忆一下集成学习的基本框架: 上述的每一个学习器称为弱学习器,通过多个弱学习器,最终构建出集成学习器系统,集成学习系统主要可以分成两个类别,第一个是各个弱学习器之间是有关的,第二种是各个学习器之间是无关的,对于第一种,我们已经讲述了AdaBoost算法,我们接下来是讲述关于第二个分类的代表算法——随机森林。 对于随机森林而言,其也是由多个弱学习器所构建的,每一个若学习器都是一个决策树,关于决策树的相关知识,可以参考我之前的文章 机器学习算法—决策树(ID3)算法 。在这里就不具体描述了。 2、随机森林具体描述 2.1 随机森林的基本流程 根据训练数据,构建出多棵决策树,形成随机森林。 对于测试数据,将测试数据输入到随机森林中,每一棵决策树做出预测结果。 对于每一棵决策的决策结果,根据少数服从多数的投票方法或者加权的方式来决定最终的结果。 2.2 随机森林的构建过程 我们假设训练集包括M个训练样本,具体形式为: D = [ X 1 , X 2 , . . . . . , X M ] D=[X_1,X_2,.....,X_M] D = [ X 1 ​ , X 2 ​ , . . . . . , X M ​ ] 每一个 X i X_i X i ​

D2L-pytorch版 Task07笔记

情到浓时终转凉″ 提交于 2020-02-27 10:45:59
优化算法进阶 1.Momentum 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。对于noisy gradient,我们需要谨慎的选取学习率和batch size, 来控制梯度方差和收敛的结果。 g t = ∂ w 1 ∣ B t ∣ ∑ i ∈ B t f ( x i , w t − 1 ) = 1 ∣ B t ∣ ∑ i ∈ B t g i , t − 1 . \mathbf{g}_t = \partial_{\mathbf{w}} \frac{1}{|\mathcal{B}_t|} \sum_{i \in \mathcal{B}_t} f(\mathbf{x}_{i}, \mathbf{w}_{t-1}) = \frac{1}{|\mathcal{B}_t|} \sum_{i \in \mathcal{B}_t} \mathbf{g}_{i, t-1}. g t ​ = ∂ w ​ ∣ B t ​ ∣ 1 ​ i ∈ B t ​ ∑ ​ f ( x i ​ , w t − 1 ​ ) = ∣ B t ​ ∣ 1 ​ i ∈ B t ​ ∑ ​

随机梯度下降的逻辑回归算法(SGDLR)

浪尽此生 提交于 2020-02-25 20:00:04
由于第一次实验的实验报告不在这台机器,先写这一算法吧。 SGDLR(the Stochastic Gradient Descent for Logistic Regression),要讲解这一算法,首先要把名字拆为几块。 1 随机 2 梯度下降 3逻辑回归 先贴一篇文章: http://blog.csdn.net/zouxy09/article/details/20319673 这篇文章中解释的还不错。 其实这一算法,通俗来讲是这样子的: 1、手中肯定有很多带有label标记的数据,这是训练集。 2、我们期望能够建立一个带参数的式子,来计算某种情况出现的概率,以便于后面预测测试集的类别的时候,计算它在每一类的概率,取概率大的为自己的类。 3、由于sigmoid函数的优势:连续,光滑,严格单调,关于(0,0.5)中心对称,形如下图, 公式① 利用下面这个式子变换得到: 所以我们只需要计算出参数的值,就可以用公式①计算概率。 4、所有在训练集中出现的样本,已经真实存在了,所以它们带入计算出的概率应该是最大的,理想情况为1。根据这一特征来计算参数值。 5、式子并不是一个线性可解的,需要使用极大似然,这一算法不再赘述请自行谷歌。但是后来发现求参数的偏导数的时候,导数为0线性不可解,这时候就要用到梯度下降的算法。 6、所谓梯度下降的算法,事实上是从一个起点,一步步的试探,来回震荡

机器学习(Machine Learning)- 吴恩达(Andrew Ng) 学习笔记(十七)

痞子三分冷 提交于 2020-02-17 15:13:56
Large scale machine learning 大规模机器学习 Learning with large datasets 从事大规模机器学习的前提是拥有大量的数据。 使用合理的方法处理大数据集,如高方差时增加训练集会提高性能,而高偏差时增加训练集却不会有用。 Stochastic gradient descent 之前了解的梯度下降是指批量梯度下降;如果我们一定需要一个大规模的训练集,我们可以尝试使用随机梯度下降法(SGD)来代替批量梯度下降法。 在随机梯度下降法中,我们定义代价函数为一个单一训练实例的代价: \[ cost(\theta,(x^{(i)},y^{(i)})) = \frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2 \] 算法步骤: Randomly shuffle (reorder) training examples 将数据打乱 Repeat{ //外层一般循环1~10次 ​ for \(i := 1,\dots,m\) { ​ \(\theta_j := \theta_j - \alpha(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}\) (for \(j = 0,\dots,n\) ) ​ } } 随机梯度下降算法实际上就是扫描所有的训练样本。先对第1组训练样本进行梯度下降

随机森林算法实现分类

回眸只為那壹抹淺笑 提交于 2020-02-17 06:12:50
文章目录 导入数据 导入pandas,并且重命名为pd。 数据导入 数据处理 建立模型 模型评估 更多内容关注公众号:邯郸路220号子彬院 导入数据 导入pandas,并且重命名为pd。 import pandas as pd #通过互联网读取泰坦尼克乘客档案,并存储在变量titanic中。 titanic = pd.read_csv( ‘titanic.txt’) #引入pandas,并且重命名为pd。 将熊猫作为pd导入 #通过互联网读取泰坦尼克乘客档案,并存储在变量titanic中。 泰坦尼克号= pd.read_csv(‘titanic.txt’) 数据导入 #导入pandas,并且重命名为pd。 import pandas as pd #通过互联网读取泰坦尼克乘客档案,并存储在变量titanic中。 titanic = pd . read_csv ( 'http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt' ) #人工选取pclass、age以及sex作为判别乘客是否能够生还的特征。 x = titanic [ [ 'pclass' , 'age' , 'sex' ] ] y = titanic [ 'survived' ] 数据处理 #对于缺失的年龄信息,我们使用全体乘客的平均年龄代替

受限玻尔兹曼机和深度置信网络

爱⌒轻易说出口 提交于 2020-02-15 15:23:36
2016-07-20 11:21:33 1受限玻尔兹曼机 梯度下降法 (以及相关的L-BFGS算法等)在使用随机初始化权重的深度网络上效果不好的技术原因是:梯度会变得非常小。具体而言,当使用 反向传播方法 计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”[4]。 与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有足够数量神经元的时候,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,对所有层都使用随机初始化的方法训练得到的整个网络的性能将会与训练得到的浅层网络(仅由深度网络的最后几层组成的浅层网络)的性能相似。 梯度弥散一直是困扰着深度神经网络的发展,那么如何解决梯度弥散问题呢?多伦多大学的Geoff Hinton提出了设想:受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)[1],即一类具有两层结构的、对称链接无自反馈的随机神经网络模型(一种特殊的马尔科夫随机场)。 如图1所示,一个RBM包含一个由随机的隐单元构成的 隐藏层 (一般是伯努利分布)和一个由随机的可见(观测