主页

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)中提出了“信息熵”的概念,才解决了信息的度量问题,并且量化出信息的作用。 信息熵 一条信息的信息量与其不确定性有着直接的关系。比如说,我们要搞清楚一件非常非常不确定的事,或...

阅读更多

LDA 入门:预测文档的主题

本文转载自《LDA入门与Java实现》,版权归原作者 hankcs 所有。部分内容有修改。 什么是主题模型 在我的博客上,有篇文章《基于双数组Trie树的Aho Corasick自动机极速多模式匹配》被归入算法目录,算法即为该文章的主题。而该文章因为涉及到中文分词,又被我归入了分词目录。所以该文章的主题并不单一,具体来说文中 80% 在讲算法,20% 稍微讲了下在分词中的应用。 传统的文本分类器,比如贝叶斯、kNN 和 SVM,只能将其分到一个确定的类别中。假设我给出 3 个分类“算法”“分词”“文学”让其判断,如果某个分类器将该文归入算法类,我觉得还凑合,如果分入分词,那我觉得这个分类器不够准确。 假设一个文艺小青年来看我的博客,他完全不懂算法和分词,自然也给不出具体的备选...

阅读更多

使用 LaTeX 编辑数学公式:优雅地展示数学公式

前言 在网页或者书本上,我们经常会看到很多排版优美的数学公式。可是目前已有的公式编辑器,要么使用方法复杂,要么功能过于简陋,总是很难满足我们的需求。于是当我们需要插入公式时,往往直接通过截图这种简单粗暴的方法来解决。 LaTeX 是一个非常强大的排版工具,通过各种 package 资源几乎能构造出你需要的任何效果,编辑数学公式更不在话下。本文将介绍如何使用 LaTeX 来编辑数学公式,只会使用到 LaTeX 最基础的语法,即使你从未接触过 LaTeX 也可以轻松上手。 通过本文,你将知道: 数学符号的表示和数学公式的构造 数学公式的排版 使用 MathJax 引擎在网页上显示公式 基础知识 LaTeX 的数学模式有两种:行内模式(inline)和行间模式(d...

阅读更多