@subpage tutorial_py_knn_understanding_cn 了解kNN的基本知识。 @subpage tutorial_py_knn_opencv_cn 现在让我们在OpenCV中使用kNN进行数字识别(OCR)
1. linear-CRF模型参数学习思路 在linear-CRF模型参数学习问题中,我们给定训练数据集X和对应的标记序列Y,K个特征函数$$f_k(x,y)$$,需要学习linear-CRF的模型参数$$w_k$$和条件概率$$P_w(y|x)$$,其中条件概率$$P_w(y|x)$$和模型参数$$w_k$$满足一下关系:$$P_w(y|x) = P(y|x) = frac{1}{Z_w(x)}
我们经常会从样本观察数据中,找出样本的模型参数。 最常用的方法就是极大化模型分布的对数似然函数。 但是在一些情况下,我们得到的观察数据有未观察到的隐含数据,此时我们未知的有隐含数据和模型参数,因而无法直接用极大化对数似然函数得到模型分布的参数。怎么办呢?这就是EM算法可以派上用场的地方了。 EM算法解决这个的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(
DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。 通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。 2. DBSCAN密度定义 在上一节我们定性描述了密度聚类
BIRCH的全称是利用层次方法的平衡迭代规约和聚类(Balanced Iterative Reducing and Clustering Using Hierarchies),名字实在是太长了,不过没关系,其实只要明白它是用层次方法来聚类和规约数据就可以了。刚才提到了,BIRCH只需要单遍扫描数据集就能进行聚类,那它是怎么做到的呢? BIRCH算法利用了一个树结构来帮助我们快速的聚类,这个数结构类
RR 调度算法实现 RR调度算法的调度思想 是让所有runnable态的进程分时轮流使用CPU时间。RR调度器维护当前runnable进程的有序运行队列。当前进程的时间片用完之后,调度器将当前进程放置到运行队列的尾部,再从其头部取出进程进行调度。RR调度算法的就绪队列在组织结构上也是一个双向链表,只是增加了一个成员变量,表明在此就绪进程队列中的最大执行时间片。而且在进程控制块proc_struct
决策树生成算法 ID3算法 ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。 具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该节点的不同取值建立子节点。再对子节点递归使用同样的方法,构建决策树,直到所有特征的信息增益均很小或者没有特征可以选择为止。 输入:训练数据集$$D$$,特征集$$A$$,阈值$$\var
感知机学习问题转化为求解损失函数的最优化问题,最优化的方法就是随机梯度下降法。 1. 学习算法的原始形式 给定一个训练数据集$$T={(x{(1)},y{(1)}),(x{(2)},y{(2)}),...,(x{(m)},y{(m)})}$$,其中,$$x{(i)}in X= Rn$$,$$y^{(i)}in Y=lbrace+1,-1rbrace$$,$$i=1,2,...,m$$,求参数$$w
你需要在这个练习中实现下面这三个哈希函数: FNV-1a 以创造者Glenn Fowler、Phong Vo 和 Landon Curt Noll的名字命名。这个算法产生合理的数值并且相当快。 Adler-32 以Mark Adler命名。一个比较糟糕的算法,但是由来已久并且适于学习。 DJB Hash 由Dan J. Bernstein (DJB)发明的哈希算法,但是难以找到这个算法的讨论。它非
我将想你介绍涉及到排序的两个算法,你可以用它们操作链表。我首先要警告你,如果你打算对数据排序,不要使用链表,它们对于排序十分麻烦,并且有更好的数据结构作为替代。我向你介绍这两种算法只是因为它们难以在链表上完成,并且让你思考如何高效操作它们。 为了编写这本书,我打算将算法放在两个不同的文件中,list_algos.h和list_algos.c,之后在list_algos_test.c中编写测试。现在
部分参考了《Think Python 2e 中译本 第二十一章:算法分析》 算法分析 (Analysis of algorithms) 是计算机科学的一个分支, 着重研究算法的性能, 特别是它们的运行时间和资源开销。见 http://en.wikipedia.org/wiki/Analysis_ofalgorithms 。 算法分析的实际目的是预测不同算法的性能,用于指导设计决策。 2008年美国
我们在前面的章节中看到,Java 提供了两种List接口的实现,ArrayList和LinkedList。对于一些应用,LinkedList更快;对于其他应用,ArrayList更快。 要确定对于特定的应用,哪一个更好,一种方法是尝试它们,并看看它们需要多长时间。这种称为“性能分析”的方法有一些问题: 在比较算法之前,你必须实现这两个算法。 结果可能取决于你使用什么样的计算机。一种算法可能在一台机
雪花算法 类型:SNOWFLAKE 可配置属性: 属性名称 数据类型 说明 默认值 worker-id (?) long 工作机器唯一标识 0 max-vibration-offset (?) int 最大抖动上限值,范围[0, 4096)。注:若使用此算法生成值作分片值,建议配置此属性。此算法在不同毫秒内所生成的 key 取模 2^n (2^n一般为分库或分表数) 之后结果总为 0 或 1。为防
10.5.2 算法分析实例 本节以本章介绍的若干算法为例来讨论对算法复杂性的分析。 搜索问题的两个算法 对于搜索问题,本章介绍了线性搜索和二分搜索两个算法。 线性搜索算法的思想是逐个检查列表成员,编码时可以用一个循环语句来实现。循环体 的执行次数取决于列表长度:如果列表长度为 n,则循环体最多执行 n 次。因此,如果列表 长度增大一倍,则循环次数最多增加一倍,算法执行的步数或实际运行时间最多增加一
标准库的算法部分进行了如下改进:新增了一些算法函数;通过新语言特性改善了一些算法实现并且更易于使用。下面分别来看一些例子: 新算法: bool all_of(Iter first, Iter last, Pred pred); bool any_of(Iter first, Iter last, Pred pred); bool none_of(Iter first, Iter last, Pre