主页

产生式模型与判别式模型:建模对象是最大的不同

概述 以分类问题来说,判别式模型就是只有一个模型,你把测试用例往里面一丢,分类结果就出来了,如 SVM。生成式模型则是有多个模型(一般有多少类就有多少个),你得把测试用例分别丢到各个模型里面,最后比较其结果,选择最优的作为分类结果,如朴素贝叶斯。 具体来说,对于已知变量 $X$ 和未知变量 $Y$: 产生式方法(generative approach)由数据学习到联合概率分布 $P(X,Y)$,然后求出条件概率分布 $P(Y\mid X)$ 作为预测的模型,即产生式模型: \[P(Y\mid X)=\frac{P(X,Y)}{P(X)}\] 之所以称为产生式模型,是因为模型表示了给定输入 $X$ 产生输出 $Y$ 的产生关系,产生式模型就是产生数据分布...

阅读更多

TextRank算法提取关键词和摘要:把PageRank运用到自然语言处理上

提到从文本中提取关键词,我们第一想到的肯定是通过计算词语的 TF-IDF 值来完成,简单又粗暴。但是由于 TF-IDF 的结构过于简单,有时提取关键词的效果会很不理想。 本文将介绍一个由 Google 著名的网页排序算法 PageRank 改编而来的算法——TextRank,它利用图模型来提取文章中的关键词。 PageRank PageRank 是一种通过网页之间的超链接来计算网页重要性的技术,以 Google 创办人 Larry Page 之姓来命名,Google 用它来体现网页的相关性和重要性。PageRank 通过网络浩瀚的超链接关系来确定一个页面的等级,把从 A 页面到 B 页面的链接解释为 A 页面给 B 页面投票,Google 根据 A 页面(甚至链接到 A 的页面)...

阅读更多

Python 多进程、多线程(下):让你的程序飞起来吧

本文摘自廖雪峰《Python教程》,部分内容有修改。 进程 vs 线程 在上一篇《Python 多进程、多线程(上)》中我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。接下来我们讨论一下这两种方式的优缺点。 要实现多任务,通常我们会设计 Master-Worker 模式,Master 负责分配任务,Worker 负责执行任务。因此,多任务环境下,通常是一个 Master,多个 Worker。如果用多进程实现 Master-Worker,主进程就是 Master,其他进程就是 Worker。如果用多线程实现 Master-Worker,主线程就是 Master,其他线程就是 Worker。 多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和...

阅读更多

Python 多进程、多线程(上):让你的程序飞起来吧

本文摘自廖雪峰《Python教程》,部分内容有修改。 多进程与多线程 我们都知道,操作系统中所有的程序都是以进程的方式来运行的,或者说我们把运行着的程序称为进程(Process)。例如运行记事本程序就是启动一个记事本进程,运行两个记事本就是启动两个记事本进程。 很多时候,进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。由于每个进程至少要干一件事,所以,一个进程至少有一个线程。 进程和线程的区别主要有: 进程之间是相互独立的,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,且互不影响;而同一个进程的多个线程是内存共享的...

阅读更多

HMM 隐马尔可夫模型(下):使用 Viterbi 算法寻找隐藏状态

在上一篇《HMM 隐马尔可夫模型(上)》中,我们通过一个掷骰子的例子,简单地阐述了一下 HMM 的基本概念,以及 HMM 关注问题的解决方法。文本将正式介绍隐马尔可夫模型的数学定义,并通过一个实例,演示具体问题的求解过程。 隐马尔可夫模型 隐马尔可夫模型中的变量可分为两组。第一组是状态变量 ${y_1,y_2,\cdots,y_n}$,其中 $y_i\in Y$ 表示第 $i$ 时刻的系统状态。通常假定状态变量是隐藏的、不可被观测的,因此状态变量亦称隐变量(hidden variable)。第二组是观测变量 ${x_1,x_2,\cdots,x_n}$,其中 $x_i \in X$ 表示第 $i$ 时刻的观测值。在隐马尔可夫模型中,系统通常在多个状态 ${s_1,s_2,\cdot...

阅读更多

HMM 隐马尔可夫模型(上):看见不可见

前言:概率图模型 机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推断。概率模型(probabilistic model)提供了一种描述框架,将学习任务归结为计算变量的概率分布。在概率模型中,利用已知变量推测未知变量的分布称为推断(inference),其核心是如何基于可观测变量推测出未知变量的条件分布。 假定所关心的变量集合为 $Y$,可观测变量集合为 $O$,其他变量的集合为 $R$。产生式模型(generative model)考虑联合分布 $P(Y,R,O)$,判别式模型(discriminative model)考虑条件分布 $P(Y,R\mid O)$。给定一组观测变量值,推断就是要由 $P(Y,R,O)...

阅读更多

Python 模块、包和程序:程序组织结构与标准库

在“远离” Python 很久之后,再回看之前的代码,感觉对 Python 的 import 语句还是存在困惑。总是对 Python 程序的结构不是很清楚,不知道什么时候直接用 import xxx,什么时候又要用 from xxx import xxx。正好借这篇文章,梳理一下。而且要写出实用的大型 Python 程序,也确实要理清楚这些细节。废话不多说,我们开始。 独立的程序 独立的 Python 程序存放在以 .py 为后缀的文件中,例如创建一个文件 test1.py,包含以下代码: print("This standalone program works!") 如果要在文本终端或者终端窗口运行 Python,需要键入 Python 程序名,后面跟上程序的文件名: $...

阅读更多

信息的度量和作用:信息论基本概念

本文摘自吴军《数学之美》,部分内容有修改。 我们在生活中一直谈论信息,但是信息这个概念依然有些抽象。我们经常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。比如,一本 50 多万字的《史记》到底有多少的信息量?我们也常说信息有用,那么它的作用又是如何客观、定量地体现出来的呢? 对于这两个问题,几千年来都没有人给出很好的解答。直到 1948 年,香农(Claude Elwood Shannon)在他著名的论文《通信的数学原理》(A Mathematic Theory of Communication)中提出了“信息熵”的概念,才解决了信息的度量问题,并且量化出信息的作用。 信息熵 一条信息的信息量与其不确定性有着直接的关系。比如说,我们要搞清楚一件非常非常不确定的事,或...

阅读更多