Vladimir

机器学习背后的数学原理--学习笔记3

心不动则不痛 提交于 2020-11-04 01:27:23
统计学习原理思路总结: 机器学习的实质:估计未知函数在给定点的值的问题。一般有两种学习理论,一是归纳学习,或归纳推理;一是转导推理(Vapnik命名的); 其中,归纳学习是由个别或特殊的知识概括出一般性的结论,其思维过程是由个别到一般,由证据来推导结论,它并不能保证结论的正确性。归纳学习的哲学本源是问如何由真实的前提完全相信归纳的结论。即使前提正确,也不能由此证明归纳结论的真实性。统计学习为某些归纳方法提供部分演绎的数学证明。 参考文献: 1、《统计学习理论基础》 Sanjeev Kulkarni 2、《非参数估计与R语言 》 柳向东 3、《统计学习理论》 Vladimir.N.Vapnik 张学工(译) 来源: oschina 链接: https://my.oschina.net/u/3889482/blog/4701558

java-动态规划算法学习笔记

為{幸葍}努か 提交于 2020-04-29 13:29:04
动态规划(dynamic programming) 是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。 动态规划定义 动态规划实际上是一类题目的总称,并不是指某个固定的算法。动态规划的意义就是通过采用 递推(或者分而治之) 的策略,通过解决大问题的子问题从而解决整体的做法。动态规划的 核心思想 是巧妙的将问题拆分成多个子问题,通过计算子问题而得到整体问题的解。而子问题又可以拆分成更多的子问题,从而用类似递推迭代的方法解决要求的问题。 动态规划的解题核心 动态规划的解题核心主要分为两步: 第一步:状态的定义 第二步:状态转移方程的定义 在这里,我们为了避免混淆用“状态”这个词来替代“问题”这个词。“问题”表示的含义类似:题目、要求解的内容、题干中的疑问句这样的概念。状态表示我们在求解问题之中对问题的分析转化。 第一步:状态的定义 有的问题过于抽象,或者过于啰嗦干扰我们解题的思路,我们要做的就是将题干中的问题进行转化(换一种说法,含义不变)。转化成一系列同类问题的某个解的情况,比如说: 题目:求一个数列中最大连续子序列的和。 我们要将这个原问题转化为: 状态定义:F k 是第k项前的最大序列和,求F 1 ~F N 中最大值。 通过换一种表述方式

关于Yuri Boykov and Vladimir Kolmogorov 于2004年提出的max flow / min cut的算法的详解

醉酒当歌 提交于 2020-04-20 18:18:00
出处: http://blog.csdn.net/euler1983/article/details/5959622 算法 优化 algorithm graph tree 任务 这篇文章说的是Yuri Boykov and Vladimir Kolmogorov在2004年提出的一种基于增广路径的求解最大流最小割的算法,号称大部分情况下会很快。而且在算完之后,会自动完成最小割集的构造。 作者写了一个C的实现: http://vision.csd.uwo.ca/code/maxflow-v3.01.zip 文章参考:《GRAPH BASED ALGORITHMS FOR SCENE RECONSTRUCTION FROM TWO OR MORE VIEWS》这是作者的博士论文,在最后的一章节里详细提到了这种算法的思路。 这个算法的思路并不难懂,但是看起来有点难度。文中充满了q is children of p之类的表述,看着看着就混淆了。而且代码里的变量命名也很随意,花了3,4天的时间,终于搞定。 算法的直观理解 第一个改进: 首先算法采用了两条增广路径,分别从source和sink出发,边搜索边标号,这样当所有的点都被搜索并标号后,最小割集也就形成了。 所有在最前沿的点称为active node,这些点的任务是去发展新的node。而被active node包围起来的那些点

java编辑距离

拈花ヽ惹草 提交于 2020-02-26 10:17:57
概述 编辑距离(Minimum Edit Distance,MED),由俄罗斯科学家 Vladimir Levenshtein 在1965年提出,也因此而得名 Levenshtein Distance。 在信息论、语言学和计算机科学领域,Levenshtein Distance 是用来度量两个序列相似程度的指标。通俗地来讲,编辑距离指的是在两个单词 之间,由其中一个单词 转换为另一个单词 所需要的最少 单字符编辑操作 次数。 在这里定义的单字符编辑操作有且仅有三种: 插入(Insertion) 删除(Deletion) 替换(Substitution) 譬如,"kitten" 和 "sitting" 这两个单词,由 "kitten" 转换为 "sitting" 需要的最少单字符编辑操作有: 1.kitten → sitten (substitution of "s" for "k") 2.sitten → sittin (substitution of "i" for "e") 3.sittin → sitting (insertion of "g" at the end) 因此,"kitten" 和 "sitting" 这两个单词之间的编辑距离为 3 。 JAVA实现 其实看这个概述,只有三种编辑操作方式,但是看起来还不是太明白,根本就不知道怎么实现,又插入?又删除?又替换的