主页

让你的 Python 代码优雅又地道:教你如何写出pythonic的代码

转载自《[译]让你的Python代码优雅又地道》,翻译者 lightxue,部分内容有修改。 译序 如果说优雅也有缺点的话,那就是你需要艰巨的工作才能得到它,需要良好的教育才能欣赏它。 —— Edsger Wybe Dijkstra 在 Python 社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用 Python,这就是常说的 pythonic。一般说地道(idiomatic)的 python 代码,就是指这份代码很 pythonic。Python 的语法和标准库设计,处处契合着 pythonic 的思想。而且 Python 社区十分注重编码风格一的一致性,他们极力推行和处处实践着 pythonic。所以经常能看到基于某份代码 P vs NP (...

阅读更多

Docker 快速入门:第一个 Docker 化的 Java 应用

本文参考慕课网《第一个docker化的java应用》课程编写,感谢课程讲师 刘果国。 1. 什么是 Docker 稍微有些经验的人都知道,在一台电脑上能跑起来的程序,拿到令一台电脑上未必就可以运行,因为两台电脑可能拥有完全不同的环境,而 Docker 就是为解决这种问题而生。简单来说 Docker 就是一个装应用的容器,我们可以将任何形式的程序放入其中,为这些应用创建一个轻量级的、可移植的、自给自足的容器。这样我们在自己笔记本上编译测试通过的容器就可以批量地在生产环境中部署,包括 VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。 Docker 思想 Docker 的图标是一条运输集装箱的鲸鱼,这个图标很贴切地描述了 Docker 的核...

阅读更多

MongoDB 权限管理:裸奔很快乐,后果很严重

前言 最近部署在阿里云上的 MongoDB 数据库被人黑了,因为这个项目只是一个 Demo,所以当时就偷懒直接使用了 MongoDB 默认的配置,既没有设置数据库的访问权限,也没有修改访问的端口,处于门户大开的全裸奔状态。虽然从 2016 年底到 2017 年初,有大量 MongoDB 数据库都因为未配置安全权限被黑,但抱着自己这个小项目应该没人感兴趣的侥幸心理,一直都没有补上这个漏洞,没想到在项目演示时才发现数据被清空了…… 攻击者删除了所有的数据,只留下了下面勒索比特币的信息: { "_id" : ObjectId("594658f3c108c36b5cecf868"), "email" : "request@tfwno.gf", "btc_wa...

阅读更多

浅谈集成学习:Boosting与随机森林

本文摘自周志华《机器学习》,部分内容有修改。 个体与集成 集成学习 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。 上图显示出集成学习的一般结构:先产生一组个体学习器(individual learner),再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据中产生,例如 $\text{C4.5}$ 决策算法、$\text{BP}$ 神经网络算法等。 若集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,这样的集成是...

阅读更多

维基百科中文语料库词向量的训练:处理维基百科中文语料

在 NLP 自然语言处理中,语义层面的理解一直是一大难题,其中度量词语或句子的语义相关性又是语义理解的基础。目前的主流做法大多首先把词语转化为词向量,然后通过计算向量之间的距离来衡量词语的相关性。目前主要使用 Google 提出的 Word2Vec 方法来训练词向量,文本将简单梳理一下从数据处理到词向量训练的全过程。 获取并处理维基百科中文语料库 中文维基百科语料库的下载链接为:https://dumps.wikimedia.org/zhwiki/, 里面按照日期提供了多个版本的中文语料,每个版本都提供了很多类型的可选项,例如只包含标题、摘要等等。我们选用的是最新版本包含标题和正文的 zhwiki-latest-pages-articles.xml.bz2。 抽取内容 Wiki...

阅读更多

Python 下解析 XML:比 DOM 更好的 ElementTree

转载自《深入解读Python解析XML的几种方式》,部分内容有修改。 在 Python 自带的标准库中,提供了大量可以用于处理 XML 语言的包和工具,有点让人无从选择。本文将介绍利用 Python 语言解析 XML 文件的几种方式,并以 ElementTree 模块为例,演示具体使用方法和场景。 什么是 XML XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的标记(markup)是关键部分。你可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。 标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)...

阅读更多

CRF 条件随机场:使用 Viterbi 算法寻找最优标注序列

概率无向图模型的因子分解 无向图 $G$ 中任何两个结点均有边连接的结点子集称为团(clique)。若 $C$ 是无向图 $G$ 的一个团,并且不能再加进任何一个 $G$ 的结点使其成为一个更大的团,则称此 $C$ 为最大团(maximal clique)。 下图表示由 4 个结点组成的无向图。图中由 2 个结点组成的团有 5 个:${x_1,x_2}$,${x_2,x_3}$,${x_3,x_4}$,${x_4,x_2}$,${x_1,x_3}$。有 2 个最大团:${x_1,x_2.x_3}$ 和 ${x_2,x_3,x_4}$。而 ${x_1,x_2,x_3,x_4}$ 不是一个团,因为 $x_1$ 和 $x_4$ 没有边连接。 将概率无向图模型的联合概率分布表示为其最...

阅读更多

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

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

阅读更多