Tag Archives: Machine Learning

2017年度盘点:15个最流行的GitHub机器学习项目

在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学、机器学习、深度学习中的各种项目,希望能对大家学习、使用有所帮助。另,小编恬不知耻地把机器之心的 Github 项目也加了进来,求 star,求 pull requests。

GitHub 是计算机科学领域最为活跃的社区,在 GitHub 上,来自不同背景的人们分享越来越多的软件工具和资源库。在其中,你不仅可以获取自己所需的工具,还可以观看代码是如何写成并实现的。

作为一名机器学习爱好者,作者在本文中列出了 2017 年 GitHub 平台上最为热门的知识库,其中包含了学习资料与工具。希望对你的学习和研究有所帮助。

目录

1. 学习资源

1. Awesome Data Science

2. Machine Learning / Deep Learning Cheat Sheet

3. Oxford Deep Natural Language Processing Course Lectures

4. PyTorch – Tutorial

5. Resources of NIPS 2017

2. 开源工具

1. TensorFlow

2. TuriCreate – A Simplified Machine Learning Library

3. OpenPose

4. DeepSpeech

5. Mobile Deep Learning

6. Visdom

7. Deep Photo Style Transfer

8. CycleGAN

9. Seq2seq

10. Pix2code

3. 机器之心项目

1. AI00-百家影响人工智能未来的公司

2. Artificial-Intelligence-Terminology

3. ML-Tutorial-Experiment

1. 学习资源

1.1 Awesome Data Science

项目地址: https://github.com/bulutyazilim/awesome-datascience

该 repo 是数据科学的基本资源。多年来的无数贡献构建了此 repo 里面的各种资源,从入门指导、信息图,到社交网络上你需要 follow 的账号。无论你是初学者还是业内老兵,里面都有大量的资源需要学习。

从该 repo 的目录可以看出其深度。

1.2 Machine Learning / Deep Learning Cheat Sheet

项目地址:https://github.com/kailashahirwar/cheatsheets-ai

该项目以 cheatsheet 的形式介绍了机器学习/深度学习中常用的工具与技术,从 pandas 这样的简单工具到深度学习技术都涵盖其中。在收藏或者 fork 该项目之后,你就不用再费事搜索常用的技巧和注意事项了。

简单介绍下,cheatsheets 类型包括 pandas、numpy、scikit learn、matplotlib、ggplot、dplyr、tidyr、pySpark 和神经网络。

1.3 Oxford Deep Natural Language Processing Course Lectures

项目地址:https://github.com/oxford-cs-deepnlp-2017/lectures

斯坦福的 NLP 课程一直是自然语言处理领域的金牌教程。但是近期随着深度学习的发展,在 RNN 和 LSTM 等深度学习架构的帮助下,NLP 出现了大量进步。

该 repo 基于牛津大学的 NLP 课程,涵盖先进技术和术语,如使用 RNN 进行语言建模、语音识别、文本转语音(TTS)等。该 repo 包含该课程从课程材料到实践联系的所有内容。

1.4 PyTorch – Tutorial

项目地址:https://github.com/yunjey/pytorch-tutorial

截至今天,PyTorch 仍是 TensorFlow 的唯一竞争对手,它的功能和声誉使其成为了颇具竞争力的深度学习框架。因其 Pythonic 风格的编程、动态计算图和更快的原型开发,Pytorch 已经获得了深度学习社区的广泛关注。

该知识库包含 PyTorch 上大量的深度学习任务代码,包括 RNN、GAN 和神经风格迁移。其中的大多数模型在实现上仅需 30 余行代码。这充分说明了 PyTorch 的抽象能力,它让研究人员可以专注于找到正确的模型,而无需纠缠于编程语言和工具选择等细节。

1.5 Resources of NIPS 2017

项目地址:https://github.com/hindupuravinash/nips2017

该 repo 包含 NIPS 2017 的资源和所有受邀演讲、教程和研讨会的幻灯片。NIPS 是一年一度的机器学习和计算神经科学会议。

过去几年中,数据科学领域内的大部分突破性研究都曾作为研究结果出现在 NIPS 大会上。如果你想站在领域前沿,那这就是很好的资源!

2. 开源软件库

2.1 TensorFlow

项目地址:https://github.com/tensorflow/tensorflow

TensorFlow 是一种采用数据流图(data flow graph)进行数值计算的开源软件库。其中 Tensor 代表传递的数据为张量(多维数组),Flow 代表使用计算图进行运算。数据流图用「结点」(node)和「边」(edge)组成的有向图来描述数学运算。「结点」一般用来表示施加的数学操作,但也可以表示数据输入的起点和输出的终点,或者是读取/写入持久变量(persistent variable)的终点。边表示结点之间的输入/输出关系。这些数据边可以传送维度可动态调整的多维数据数组,即张量(tensor)。

TensorFlow 自正式发布以来,一直保持着「深度学习/机器学习」顶尖库的位置。谷歌大脑团队和机器学习社区也一直在积极地贡献并保持最新的进展,尤其是在深度学习领域。

TensorFlow 最初是使用数据流图进行数值计算的开源软件库,但从目前来看,它已经成为构建深度学习模型的完整框架。它目前主要支持 TensorFlow,但也支持 C、C++ 和 Java 等语言。此外,今年 11 月谷歌终于发布了新工具的开发者预览版本,这是一款 TensorFlow 用于移动设备和嵌入式设备的轻量级解决方案。

2.2 TuriCreate:一个简化的机器学习库

项目地址:https://github.com/apple/turicreate

TuriCreate 是苹果最近贡献的一个开源项目,它为机器学习模型提供易于使用的创建方法和部署方法,这些机器学习模型包括目标检测、人体姿势识别和推荐系统等复杂任务。

可能我们作为机器学习爱好者会比较熟悉 GraphLab Create,一个非常简便高效的机器学习库,而当初创建该库的公司 TuriCreate 被苹果收购时,造成了很大反响。

TuriCreate 是针对 Python 开发的,且它最强的的特征是将机器学习模型部署到 Core ML 中,用于开发 iOS、macOS、watchOS 和 tvOS 等应用程序。

2.3 OpenPose

项目地址: https://github.com/CMU-Perceptual-Computing-Lab/openpose

OpenPose 是一个多人关键点检测库,它可以帮助我们实时地检测图像或视频中某个人的位置。

OpenPose 软件库由 CMU 的感知计算实验室开发并维护,对于说明开源研究如何快速应用于部署到工业中,它是非常好的一个案例。

OpenPose 的一个使用案例是帮助解决活动检测问题,即演员完成的动作或活动能被实时捕捉到。然后这些关键点和它们的动作可用来制作动画片。OpenPose 不仅有 C++的 API 以使开发者能快速地访问它,同时它还有简单的命令行界面用来处理图像或视频。

2.4 DeepSpeech

项目地址: https://github.com/mozilla/DeepSpeech

DeepSpeech 是百度开发的开源实现库,它提供了当前顶尖的语音转文本合成技术。它基于 TensorFlow 和 Python,但也可以绑定到 NodeJS 或使用命令行运行。

Mozilla 一直是构建 DeepSpeech 和开源软件库的主要研究力量,Mozilla 技术战略副总裁 Sean White 在一篇博文中写道:「目前只有少数商用质量的语音识别引擎是开源的,它们大多数由大型公司主宰。这样就减少了初创公司、研究人员和传统企业为它们的用户定制特定的产品与服务。但我们与机器学习社区的众多开发者和研究者共同完善了该开源库,因此目前 DeepSpeech 已经使用了复杂和前沿的机器学习技术创建语音到文本的引擎。」

2.5 Mobile Deep Learning

项目地址:https://github.com/baidu/mobile-deep-learning

该 repo 将数据科学中的当前最佳技术移植到了移动平台上。该 repo 由百度研究院开发,目的是将深度学习模型以低复杂性和高速度部署到移动设备(例如 Android 和 IOS)上。

该 repo 解释了一个简单的用例,即目标检测。它可以识别目标(例如一张图像中的手机)的准确位置,很棒不是吗?

2.6 Visdom

项目地址:https://github.com/facebookresearch/visdom

Visdom 支持图表、图像和文本在协作者之间进行传播。你可以用编程的方式组织可视化空间,或者通过 UI 为实时数据创建仪表盘,检查实验结果,或者调试实验代码。

绘图函数中的输入会发生改变,尽管大部分输入是数据的张量 X(而非数据本身)和(可选)张量 Y(包含可选数据变量,如标签或时间戳)。它支持所有基本图表类型,以创建 Plotly 支持的可视化。

Visdom 支持使用 PyTorch 和 Numpy。

2.7 Deep Photo Style Transfer

项目地址:https://github.com/luanfujun/deep-photo-styletransfer

该 repo 基于近期论文《Deep Photo Style Transfer》,该论文介绍了一种用于摄影风格迁移的深度学习方法,可处理大量图像内容,同时有效迁移参考风格。该方法成功克服了失真,满足了大量场景中的摄影风格迁移需求,包括时间、天气、季节、艺术编辑等场景。

2.8 CycleGAN

项目地址:https://github.com/junyanz/CycleGAN

CycleGAN 是一个有趣且强大的库,展现了该顶尖技术的潜力。举例来说,下图大致展示了该库的能力:调整图像景深。这里有趣的点在于你事先并没有告诉算法需要注意图像的哪一部分。算法完全依靠自己做到了!

目前该库用 Lua 编写,但是它也可以在命令行中使用。

2.9 Seq2seq

项目地址:https://github.com/google/seq2seq

Seq2seq 最初是为机器翻译而建立的,但已经被开发用于多种其它任务,包括摘要生成、对话建模和图像捕捉。只要一个问题的结构是将输入数据编码为一种格式,并将其解码为另一种格式,就可以使用 Seq2seq 框架。它使用了所有流行的基于 Python 的 TensorFlow 库进行编程。

2.10 Pix2code

项目地址:https://github.com/tonybeltramelli/pix2code

这个深度学习项目非常令人振奋,它尝试为给定的 GUI 自动生成代码。当建立网站或移动设备界面的时候,通常前端工程师必须编写大量枯燥的代码,这很费时和低效。这阻碍了开发者将主要的时间用于实现真正的功能和软件逻辑。Pix2code 的目的是通过将过程自动化来克服这一困难。它基于一种新方法,允许以单个 GUI 截图作为输入来生成计算机 token。

Pix2code 使用 Python 编写,可将移动设备和网站界面的捕捉图像转换成代码。

3. 机器之心项目

机器之心目前在 GitHub 上也有三个项目,分别是评估人工智能各领域优秀公司的 AI00、人工智能领域中英术语集和模型试验与解释项目。

3.1 AI00——机器之心百家影响人工智能未来的公司榜单

项目地址:https://github.com/jiqizhixin/AI00

人工智能是一个复杂庞大的体系,涉及众多学科,也关乎技术、产品、行业和资本等众多要素,本报告的写作团队只代表他们的专业观点,有自己的局限性,需要更多行业专家参与进来加以修正和完善。

我们深刻地理解在没有专业用户反馈的情况下所做出报告的质量局限性,所以希望用工程界「Agile Development」的理念来对待我们的报告,不断收集专业反馈来持续提升报告质量。

为此,我们将邀请人工智能领域的科学家、技术专家、产业专家、专业投资人和读者加入进来,共同完成这项人工智能的长期研究。我们将对参与者提供的信息进行汇总和整理,以月度为单位更新此份报告。

3.2 Artificial-Intelligence-Terminology

项目地址:https://github.com/jiqizhixin/Artificial-Intelligence-Terminology

我们将机器之心在编译技术文章和论文过程中所遇到的专业术语记录下来,希望有助于大家查阅和翻译(第二版)。

本词汇库目前拥有的专业词汇共计 760 个,主要为机器学习基础概念和术语,同时也是该项目的基本词汇。机器之心将继续完善术语的收录和扩展阅读的构建。

词汇更新主要分为两个阶段,第一阶段机器之心将继续完善基础词汇的构建,即通过权威教科书或其它有公信力的资料抽取常见术语。第二阶段机器之心将持续性地把编译论文或其他资料所出现的非常见术语更新到词汇表中。

读者的反馈意见和更新建议将贯穿整个阶段,并且我们将在项目致谢页中展示对该项目起积极作用的读者。因为我们希望术语的更新更具准确度和置信度,所以我们希望读者能附上该术语的来源地址与扩展地址。因此,我们能更客观地更新词汇,并附上可信的来源与扩展。

3.3 ML-Tutorial-Experiment

项目地址:https://github.com/jiqizhixin/ML-Tutorial-Experiment

该项目主要是展示我们在实验机器学习模型中所获得的经验与解释,目前我们解释并实现了卷积神经网络、生成对抗网络和 CapsNet。这些实现都有非常详细的文章以说明模型的结构与实现代码。如下所示为这三个实现项目的说明:

原文链接:https://www.analyticsvidhya.com/blog/2017/12/15-data-science-repositories-github-2017/

声明:本文由机器之心编译出品,原文来自Analytics Vidhya,转载请查看要求,机器之心对于违规侵权者保有法律追诉权。

from:https://www.jiqizhixin.com/articles/2017-12-21-10

机器学习驱动编程:新世界的新编程

如果今天要重新建立Google,这家公司的大部分系统将会是通过学习得来的,而非编写代码而来。Google的25,000名开发者中原本有大概10%精通机器学习,现在这一比例可能会达到100% — Jeff Dean

和天气一样,大家都会抱怨编程,但谁也没有为此做点什么。这种情况正在发生变化,就像突如其来的暴风雨一样,这些变化也来自一个出乎意料的方向:机器学习/深度学习。

我知道很多人对深度学习都听厌了。谁不是呢?但是编程技术很长时间来都处在一成不变的情况下,是时候做点什么改变这一情况了。

各种有关编程的“战斗”还在继续,但解决不了任何问题。函数还是对象,这种语言还是那种语言,这朵公有云还是那朵公有云或者这朵私有云亦或那朵“填补了空白”的云,REST还是Unrest,这种字节级编码还是另一种编码,这个框架还是那个框架,这种方法论还是那种方法论,裸机还是容器或者虚拟机亦或Unikernel,单层还是微服务或者NanoService,最终一致还是事务型,可变(Mutable)还是不可变(Immutable),DevOps还是NoOps或者SysOps,横向扩展还是纵向扩展,中心化还是去中心化,单线程还是大规模并行,同步还是异步。诸如此类永无止境。

年复一年,天天如此。我们只是创造了调用函数的不同方法,但最终的代码还需要我们人类来编写。更强大的方法应该是让机器编写我们需要的函数,这就是机器学习大展拳脚的领域了,可以为我们编写函数。这种年复一年天天如此的无聊活动还是交给机器学习吧。

机器学习驱动的编程

我最初是和Jeff Dean聊过之后开始接触用深度学习方式编程的。当时我针对聊天内容写了篇文章:《Jeff Dean针对Google大规模深度学习的看法》。强烈建议阅读本文了解深度学习技术。围绕本文的主题,本次讨论的重点在于深度学习技术如何有效地取代人工编写的程序代码:

Google的经验是对于大量子系统,其中一些甚至是通过机器学习方式获得的,使用更为通用的端到端机器学习系统取代它们。通常当你有大量复杂的子系统时,必须通过大量复杂代码将它们连接在一起。Google的目标是让大家使用数据和非常简单的算法取代这一切。

机器学习将成为软件工程的敏捷工具

Google研究总监Peter Norvig针对这个话题进行过详细的讨论:用深度学习与可理解性对抗软件工程和验证。他的大致想法如下:

  • 软件。你可以将软件看作为函数构建的规范,而实现相应的函数就可以满足规范的要求。
  • 机器学习。以(x,y)对为例,你会猜测某一函数会使用x作为参数并生成y作为结果,这样就能很好地概括出x这个新值。
  • 深度学习。依然是以(x,y)对为例,可以通过学习知道你所组建的表征(Representation)具备不同级别的抽象,而非简单直接的输入和输出。这样也可以很好地概括出x这个新值。

软件工程师并不需要介入这个循环,只需要将数据流入机器学习组件并流出所需的表征。

表征看起来并不像代码,而是类似这样:

这种全新类型的程序并非人类可以理解的函数分解(Functional decomposition),看起来更像是一堆参数。

在机器学习驱动的编程(MLDP)世界里,依然可以有人类的介入,不过这些人再也不叫“程序员”了,他们更像是数据科学家。

可以通过范例习得程序的部分内容吗?可以。

  • 有一个包含超过 2000 行代码的开源拼写检查软件的例子,这个软件的效果始终不怎么好。但只要通过包含 17 行代码的朴素贝叶斯分类器就能以同样性能实现这个软件的功能,但代码量减少了100倍,效果也变得更好。
  • AlphaGo是另一个例子,该程序的结构是手工编写的,所有参数则是通过学习得到的。

只通过范例可以习得完整的程序吗?简单的程序可以,但大型传统程序目前还不行。

  • 在Jeff Dean的讲话中,他介绍了一些有关使用神经网络进行序列学习的顺序的细节。借助这种方法可以从零开始构建最尖端的机器翻译程序,这将是一种端到端学习获得的完整系统,无需手工编写大量代码或机器学习的模型即可解决一系列细节问题。
  • 另一个例子是学习如何玩Atari出品的游戏,对于大部分游戏机器可以玩得和人一样好,甚至比人玩得更好。如果按照传统方式对不同组件进行长期的规划,效果肯定不会像现在这么好。
  • 神经图灵机(Neural Turing Machine)也是一次学习如何用程序编写更复杂程序的尝试,但Peter认为这种技术不会走的太远。

正如你所期待的,Norvig先生的这次讲话非常棒,很有远见,值得大家一看。

Google正在以开源代码的方式从GitHub收集数据

深度学习需要数据,如果你想要创建一个能通过范例学习如何编程的AI,肯定需要准备大量程序/范例作为学习素材。

目前Google和GitHub已经开始合作让开源数据更可用。他们已经从GitHub Archive将超过3TB的数据集上传至BigQuery,其中包含超过280万个开源GitHub代码库中包含的活动数据,以及超过1.45亿次提交,和超过20亿不同的文件路径。

这些都可以当作很棒的训练数据。

就真的完美无缺吗?

当然不是。神经网络如同“黑匣子”般的本质使其难以与其他技术配合使用,这就像试图将人类潜意识行为与意识行为背后的原因结合在一起一样。

Jeff Dean还提到了Google搜索评级团队在搜索评级研究工作中运用神经网络技术时的犹豫。对于搜索评级,他们想要了解整个模型,了解做出某一决策的原因。当系统出现错误后他们还想了解为什么会出现这样的错误。

为了解决这样的问题,需要创建配套的调试工具,而相关工具必须具备足够的可理解性。

这样的做法会有效的。针对搜索结果提供的机器学习技术RankBrain发布于2015年,现在已成为第三大最重要的搜索评级指标(指标共有100项)。详情可访问:Google将利润丰厚的网页搜索技术交给AI计算机处理

Peter还通过一篇论文《机器学习:技术债的高利率信用卡》进一步介绍了相关问题的更多细节。缺乏明确的抽象层,就算有Bug你也不知道到底在哪。更改任何细节都要改变全局,很难进行纠正,纠正后的结果更是难以预测。反馈环路,机器学习系统生成数据后会将这些数据重新送入系统,导致反馈环路。诱惑性损害(Attractive Nuisance),一旦一个系统使得所有人都想使用,这样的系统很可能根本无法在不同上下文中使用。非稳态(Non-stationarity),随着时间流逝数据会产生变化,因此需要指出到底需要使用哪些数据,但这个问题根本没有明确答案。配置依赖性,数据来自哪里?数据准确吗?其他系统中出现的改动是否会导致这些数据产生变化,以至于今天看到的结果和昨天不一样?训练用数据和生产用数据是否不同?系统加载时是否丢弃了某些数据?缺乏工具,标准化软件开发有很多优秀的工具可以使用,但机器学习编程是全新的,暂时还没有工具可用。

MLDP是未来吗?

这并不是一篇“天呐,世界末日到了”这样的文章,而是一篇类似于“有些事你可能没听说过,世界又将为此产生变化,这多酷啊”的文章。

这种技术依然处于非常早期的阶段。对程序的部分内容进行学习目前已经是可行的,而对大规模复杂程序进行学习目前还不实用。但是当我们看到标题类似于Google如何将自己重塑为一家“机器学习为先”的公司这样的文章,可能还不明白这到底真正意味着什么。这种技术不仅仅是为了开发类似AlphaGo这样的系统,最终结果远比这个还要深刻。

相关文章

查看英文原文Machine Learning Driven Programming: A New Programming for a New World

from:http://www.infoq.com/cn/articles/machine-learning-programing

机器学习算法 Python&R 速查表

原文出处: Cheatsheet – Python & R codes for common Machine Learning Algorithms
在拿破仑•希尔的名著《思考与致富》中讲述了达比的故事:达比经过几年的时间快要挖掘到了金矿,却在离它三英尺的地方离开了!

现在,我不知道这个故事是否真实。但是,我肯定在我的周围有一些跟达比一样的人,这些人认为,不管遇到什么问题, 机器学习的目的就是执行以及使用2 – 3组算法。他们不去尝试更好的算法和技术,因为他们觉得太困难或耗费时间。

像达比一样,他们无疑是在到达最后一步的时候突然消失了!最后,他们放弃机器学习,说计算量非常大、非常困难或者认为自己的模型已经到达优化的临界点——真的是这样吗?

下面这些速查表能让这些“达比”成为机器学习的支持者。这是10个最常用的机器学习算法,这些算法使用了Python和R代码。考虑到机器学习在构建模型中的应用,这些速查表可以很好作为编码指南帮助你学好这些机器学习算法。Good Luck!

PDF版本1

from:http://colobu.com/2015/11/05/full-cheatsheet-machine-learning-algorithms

python机器学习深度学习总结

1、Python环境搭建(Windows)

开发工具:PyCharm Community Edition(free)

Python环境:WinPython 3.5.2.3Qt5
–此环境集成了机器学习和深度学习用到的主要包:
numpy,scipy,matplotlib,pandas,scikit-learn,theano,keras

IPython notebook :

2、示例代码:

scikit-learn sample

keras sample

3、数据集Datasets

GeoHey公共数据

4、kaggle平台

Kaggle是一个数据建模数据分析竞赛平台。企业和研究者可在其上发布数据,统计学者和数据挖掘专家可在其上进行竞赛以产生最好的模型。这一众包模式依赖于这一事实,即有众多策略可以用于解决几乎所有预测建模的问题,而研究者不可能在一开始就了解什么方法对于特定问题是最为有效的。Kaggle的目标则是试图通过众包的形式来解决这一难题,进而使数据科学成为一场运动。(wiki)

5、常见问题处理

Approaching (Almost) Any Machine Learning Problem

 

Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python。离开腾讯创业后,第一个作品课程图谱也 是选择了Python系的Flask框架,渐渐的将自己的绝大部分工作交给了Python。这些年来,接触和使用了很多Python工具包,特别是在文本 处理,科学计算,机器学习和数据挖掘领域,有很多很多优秀的Python工具包可供使用,所以作为Pythoner,也是相当幸福的。其实如果仔细留意微 博,你会发现很多这方面的分享,自己也Google了一下,发现也有同学总结了“Python机器学习库”, 不过总感觉缺少点什么。最近流行一个词,全栈工程师(full stack engineer),作为一个苦逼的创业者,天然的要把自己打造成一个full stack engineer,而这个过程中,这些Python工具包给自己提供了足够的火力,所以想起了这个系列。当然,这也仅仅是抛砖引玉,希望大家能提供更多的 线索,来汇总整理一套Python网页爬虫,文本处理,科学计算,机器学习和数据挖掘的兵器谱。

一、Python网页爬虫工具集

一个真实的项目,一定是从获取数据开始的。无论文本处理,机器学习和数据挖掘,都需要数据,除了通过一些渠道购买或者下载的专业数据外,常常需要大 家自己动手爬数据,这个时候,爬虫就显得格外重要了,幸好,Python提供了一批很不错的网页爬虫工具框架,既能爬取数据,也能获取和清洗数据,我们也 就从这里开始了:

1. Scrapy

Scrapy, a fast high-level screen scraping and web crawling framework for Python.

鼎鼎大名的Scrapy,相信不少同学都有耳闻,课程图谱中的很多课程都是依靠Scrapy抓去的,这方面的介绍文章有很多,推荐大牛pluskid早年的一篇文章:《Scrapy 轻松定制网络爬虫》,历久弥新。

官方主页:http://scrapy.org/
Github代码页: https://github.com/scrapy/scrapy

2. Beautiful Soup

You didn’t write that awful page. You’re just trying to get some data out of it. Beautiful Soup is here to help. Since 2004, it’s been saving programmers hours or days of work on quick-turnaround screen scraping projects.

读书的时候通过《集体智慧编程》这本书知道Beautiful Soup的,后来也偶尔会用用,非常棒的一套工具。客观的说,Beautifu Soup不完全是一套爬虫工具,需要配合urllib使用,而是一套HTML/XML数据分析,清洗和获取工具。

官方主页:http://www.crummy.com/software/BeautifulSoup/

3. Python-Goose

Html Content / Article Extractor, web scrapping lib in Python

Goose最早是用Java写得,后来用Scala重写,是一个Scala项目。Python-Goose用Python重写,依赖了Beautiful Soup。前段时间用过,感觉很不错,给定一个文章的URL, 获取文章的标题和内容很方便。

Github主页:https://github.com/grangier/python-goose

二、Python文本处理工具集

从网页上获取文本数据之后,依据任务的不同,就需要进行基本的文本处理了,譬如对于英文来说,需要基本的tokenize,对于中文,则需要常见的 中文分词,进一步的话,无论英文中文,还可以词性标注,句法分析,关键词提取,文本分类,情感分析等等。这个方面,特别是面向英文领域,有很多优秀的工具 包,我们一一道来。

1. NLTK — Natural Language Toolkit

NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning, and an active discussion forum.

搞自然语言处理的同学应该没有人不知道NLTK吧,这里也就不多说了。不过推荐两本书籍给刚刚接触NLTK或者需要详细了解NLTK的同学: 一个是官方的《Natural Language Processing with Python》,以介绍NLTK里的功能用法为主,同时附带一些Python知识,同时国内陈涛同学友情翻译了一个中文版,这里可以看到:推荐《用Python进行自然语言处理》中文翻译-NLTK配套书;另外一本是《Python Text Processing with NLTK 2.0 Cookbook》,这本书要深入一些,会涉及到NLTK的代码结构,同时会介绍如何定制自己的语料和模型等,相当不错。

官方主页:http://www.nltk.org/
Github代码页:https://github.com/nltk/nltk

2. Pattern

Pattern is a web mining module for the Python programming language.

It has tools for data mining (Google, Twitter and Wikipedia API, a web crawler, a HTML DOM parser), natural language processing (part-of-speech taggers, n-gram search, sentiment analysis, WordNet), machine learning (vector space model, clustering, SVM), network analysis and canvas visualization.

Pattern由比利时安特卫普大学CLiPS实验室出品,客观的说,Pattern不仅仅是一套文本处理工具,它更是一套web数据挖掘工具,囊 括了数据抓取模块(包括Google, Twitter, 维基百科的API,以及爬虫和HTML分析器),文本处理模块(词性标注,情感分析等),机器学习模块(VSM, 聚类,SVM)以及可视化模块等,可以说,Pattern的这一整套逻辑也是这篇文章的组织逻辑,不过这里我们暂且把Pattern放到文本处理部分。我 个人主要使用的是它的英文处理模块Pattern.en, 有很多很不错的文本处理功能,包括基础的tokenize, 词性标注,句子切分,语法检查,拼写纠错,情感分析,句法分析等,相当不错。

官方主页:http://www.clips.ua.ac.be/pattern

3. TextBlob: Simplified Text Processing

TextBlob is a Python (2 and 3) library for processing textual data. It provides a simple API for diving into common natural language processing (NLP) tasks such as part-of-speech tagging, noun phrase extraction, sentiment analysis, classification, translation, and more.

TextBlob是一个很有意思的Python文本处理工具包,它其实是基于上面两个Python工具包NLKT和Pattern做了封装 (TextBlob stands on the giant shoulders of NLTK and pattern, and plays nicely with both),同时提供了很多文本处理功能的接口,包括词性标注,名词短语提取,情感分析,文本分类,拼写检查等,甚至包括翻译和语言检测,不过这个是基于 Google的API的,有调用次数限制。TextBlob相对比较年轻,有兴趣的同学可以关注。

官方主页:http://textblob.readthedocs.org/en/dev/
Github代码页:https://github.com/sloria/textblob

4. MBSP for Python

MBSP is a text analysis system based on the TiMBL and MBT memory based learning applications developed at CLiPS and ILK. It provides tools for Tokenization and Sentence Splitting, Part of Speech Tagging, Chunking, Lemmatization, Relation Finding and Prepositional Phrase Attachment.

MBSP与Pattern同源,同出自比利时安特卫普大学CLiPS实验室,提供了Word Tokenization, 句子切分,词性标注,Chunking, Lemmatization,句法分析等基本的文本处理功能,感兴趣的同学可以关注。

官方主页:http://www.clips.ua.ac.be/pages/MBSP

5. Gensim: Topic modeling for humans

Gensim是一个相当专业的主题模型Python工具包,无论是代码还是文档,我们曾经用《如何计算两个文档的相似度》介绍过Gensim的安装和使用过程,这里就不多说了。

官方主页:http://radimrehurek.com/gensim/index.html
github代码页:https://github.com/piskvorky/gensim

6. langid.py: Stand-alone language identification system

语言检测是一个很有意思的话题,不过相对比较成熟,这方面的解决方案很多,也有很多不错的开源工具包,不过对于Python来说,我使用过 langid这个工具包,也非常愿意推荐它。langid目前支持97种语言的检测,提供了很多易用的功能,包括可以启动一个建议的server,通过 json调用其API,可定制训练自己的语言检测模型等,可以说是“麻雀虽小,五脏俱全”。

Github主页:https://github.com/saffsd/langid.py

7. Jieba: 结巴中文分词

“结巴”中文分词:做最好的Python中文分词组件 “Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module.

好了,终于可以说一个国内的Python文本处理工具包了:结巴分词,其功能包括支持三种分词模式(精确模式、全模式、搜索引擎模式),支持繁体分词,支持自定义词典等,是目前一个非常不错的Python中文分词解决方案。

Github主页:https://github.com/fxsjy/jieba

8. xTAS

xtas, the eXtensible Text Analysis Suite, a distributed text analysis package based on Celery and Elasticsearch.

感谢微博朋友 @大山坡的春 提供的线索:我们组同事之前发布了xTAS,也是基于python的text mining工具包,欢迎使用,链接:http://t.cn/RPbEZOW。看起来很不错的样子,回头试用一下。

Github代码页:https://github.com/NLeSC/xtas

三、Python科学计算工具包

说起科学计算,大家首先想起的是Matlab,集数值计算,可视化工具及交互于一身,不过可惜是一个商业产品。开源方面除了GNU Octave在 尝试做一个类似Matlab的工具包外,Python的这几个工具包集合到一起也可以替代Matlab的相应功 能:NumPy+SciPy+Matplotlib+iPython。同时,这几个工具包,特别是NumPy和SciPy,也是很多Python文本处理 & 机器学习 & 数据挖掘工具包的基础,非常重要。最后再推荐一个系列《用Python做科学计算》,将会涉及到NumPy, SciPy, Matplotlib,可以做参考。

1. NumPy

NumPy is the fundamental package for scientific computing with Python. It contains among other things:

1)a powerful N-dimensional array object

2)sophisticated (broadcasting) functions

3)tools for integrating C/C++ and Fortran code

4) useful linear algebra, Fourier transform, and random number capabilities

Besides its obvious scientific uses, NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.

NumPy几乎是一个无法回避的科学计算工具包,最常用的也许是它的N维数组对象,其他还包括一些成熟的函数库,用于整合C/C++和 Fortran代码的工具包,线性代数、傅里叶变换和随机数生成函数等。NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

官方主页:http://www.numpy.org/

2. SciPy:Scientific Computing Tools for Python

SciPy refers to several related but distinct entities:

1)The SciPy Stack, a collection of open source software for scientific computing in Python, and particularly a specified set of core packages.

2)The community of people who use and develop this stack.

3)Several conferences dedicated to scientific computing in Python – SciPy, EuroSciPy and SciPy.in.

4)The SciPy library, one component of the SciPy stack, providing many numerical routines.

“SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号 处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。其功能与软件MATLAB、Scilab和GNU Octave类似。 Numpy和Scipy常常结合着使用,Python大多数机器学习库都依赖于这两个模块。”—-引用自“Python机器学习库

官方主页:http://www.scipy.org/

3. Matplotlib

matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python and ipython shell (ala MATLAB®* or Mathematica®†), web application servers, and six graphical user interface toolkits.

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入 GUI应用程序中。Matplotlib可以配合ipython shell使用,提供不亚于Matlab的绘图体验,总之用过了都说好。

官方主页:http://matplotlib.org/

4. iPython

IPython provides a rich architecture for interactive computing with:

1)Powerful interactive shells (terminal and Qt-based).

2)A browser-based notebook with support for code, text, mathematical expressions, inline plots and other rich media.

3)Support for interactive data visualization and use of GUI toolkits.

4)Flexible, embeddable interpreters to load into your own projects.

5)Easy to use, high performance tools for parallel computing.

“iPython 是一个Python 的交互式Shell,比默认的Python Shell 好用得多,功能也更强大。 她支持语法高亮、自动完成、代码调试、对象自省,支持 Bash Shell 命令,内置了许多很有用的功能和函式等,非常容易使用。 ” 启动iPython的时候用这个命令“ipython –pylab”,默认开启了matploblib的绘图交互,用起来很方便。

官方主页:http://ipython.org/

四、Python 机器学习 & 数据挖掘 工具包

机器学习和数据挖掘这两个概念不太好区分,这里就放到一起了。这方面的开源Python工具包有很多,这里先从熟悉的讲起,再补充其他来源的资料,也欢迎大家补充。

1. scikit-learn: Machine Learning in Python

scikit-learn (formerly scikits.learn) is an open source machine learning library for the Python programming language. It features various classification, regression and clustering algorithms including support vector machines, logistic regression, naive Bayes, random forests, gradient boosting, k-means and DBSCAN, and is designed to interoperate with the Python numerical and scientific libraries NumPy and SciPy.

首先推荐大名鼎鼎的scikit-learn,scikit-learn是一个基于NumPy, SciPy, Matplotlib的开源机器学习工具包,主要涵盖分类,回归和聚类算法,例如SVM, 逻辑回归,朴素贝叶斯,随机森林,k-means等算法,代码和文档都非常不错,在许多Python项目中都有应用。例如在我们熟悉的NLTK中,分类器 方面就有专门针对scikit-learn的接口,可以调用scikit-learn的分类算法以及训练数据来训练分类器模型。这里推荐一个视频,也是我 早期遇到scikit-learn的时候推荐过的:推荐一个Python机器学习工具包Scikit-learn以及相关视频–Tutorial: scikit-learn – Machine Learning in Python

官方主页:http://scikit-learn.org/

2. Pandas: Python Data Analysis Library

Pandas is a software library written for the Python programming language for data manipulation and analysis. In particular, it offers data structures and operations for manipulating numerical tables and time series.

第一次接触Pandas是由于Udacity上的一门数据分析课程“Introduction to Data Science” 的Project需要用Pandas库,所以学习了一下Pandas。Pandas也是基于NumPy和Matplotlib开发的,主要用于数据分析和 数据可视化,它的数据结构DataFrame和R语言里的data.frame很像,特别是对于时间序列数据有自己的一套分析机制,非常不错。这里推荐一 本书《Python for Data Analysis》,作者是Pandas的主力开发,依次介绍了iPython, NumPy, Pandas里的相关功能,数据可视化,数据清洗和加工,时间数据处理等,案例包括金融股票数据挖掘等,相当不错。

官方主页:http://pandas.pydata.org/

=====================================================================
分割线,以上工具包基本上都是自己用过的,以下来源于其他同学的线索,特别是《Python机器学习库》,《23个python的机器学习包》,做了一点增删修改,欢迎大家补充
=====================================================================

3. mlpy – Machine Learning Python

mlpy is a Python module for Machine Learning built on top of NumPy/SciPy and the GNU Scientific Libraries.

mlpy provides a wide range of state-of-the-art machine learning methods for supervised and unsupervised problems and it is aimed at finding a reasonable compromise among modularity, maintainability, reproducibility, usability and efficiency. mlpy is multiplatform, it works with Python 2 and 3 and it is Open Source, distributed under the GNU General Public License version 3.

官方主页:http://mlpy.sourceforge.net/

4. MDP:The Modular toolkit for Data Processing

Modular toolkit for Data Processing (MDP) is a Python data processing framework.
From the user’s perspective, MDP is a collection of supervised and unsupervised learning algorithms and other data processing units that can be combined into data processing sequences and more complex feed-forward network architectures.
From the scientific developer’s perspective, MDP is a modular framework, which can easily be expanded. The implementation of new algorithms is easy and intuitive. The new implemented units are then automatically integrated with the rest of the library.
The base of available algorithms is steadily increasing and includes signal processing methods (Principal Component Analysis, Independent Component Analysis, Slow Feature Analysis), manifold learning methods ([Hessian] Locally Linear Embedding), several classifiers, probabilistic methods (Factor Analysis, RBM), data pre-processing methods, and many others.

“MDP用于数据处理的模块化工具包,一个Python数据处理框架。 从用户的观点,MDP是能够被整合到数据处理序列和更复杂的前馈网络结构的一批监督学习和非监督学习算法和其他数据处理单元。计算依照速度和内存需求而高 效的执行。从科学开发者的观点,MDP是一个模块框架,它能够被容易地扩展。新算法的实现是容易且直观的。新实现的单元然后被自动地与程序库的其余部件进 行整合。MDP在神经科学的理论研究背景下被编写,但是它已经被设计为在使用可训练数据处理算法的任何情况中都是有用的。其站在用户一边的简单性,各种不 同的随时可用的算法,及应用单元的可重用性,使得它也是一个有用的教学工具。”

官方主页:http://mdp-toolkit.sourceforge.net/

5. PyBrain

PyBrain is a modular Machine Learning Library for Python. Its goal is to offer flexible, easy-to-use yet still powerful algorithms for Machine Learning Tasks and a variety of predefined environments to test and compare your algorithms.

PyBrain is short for Python-Based Reinforcement Learning, Artificial Intelligence and Neural Network Library. In fact, we came up with the name first and later reverse-engineered this quite descriptive “Backronym”.

“PyBrain(Python-Based Reinforcement Learning, Artificial Intelligence and Neural Network)是Python的一个机器学习模块,它的目标是为机器学习任务提供灵活、易应、强大的机器学习算法。(这名字很霸气)

PyBrain正如其名,包括神经网络、强化学习(及二者结合)、无监督学习、进化算法。因为目前的许多问题需要处理连续态和行为空间,必须使用函数逼近(如神经网络)以应对高维数据。PyBrain以神经网络为核心,所有的训练方法都以神经网络为一个实例。”

官方主页:http://www.pybrain.org/

6. PyML – machine learning in Python

PyML is an interactive object oriented framework for machine learning written in Python. PyML focuses on SVMs and other kernel methods. It is supported on Linux and Mac OS X.

“PyML是一个Python机器学习工具包,为各分类和回归方法提供灵活的架构。它主要提供特征选择、模型选择、组合分类器、分类评估等功能。”

项目主页:http://pyml.sourceforge.net/

7. Milk:Machine learning toolkit in Python.

Its focus is on supervised classification with several classifiers available:
SVMs (based on libsvm), k-NN, random forests, decision trees. It also performs
feature selection. These classifiers can be combined in many ways to form
different classification systems.

“Milk是Python的一个机器学习工具箱,其重点是提供监督分类法与几种有效的分类分析:SVMs(基于libsvm),K-NN,随机森林 经济和决策树。它还可以进行特征选择。这些分类可以在许多方面相结合,形成不同的分类系统。对于无监督学习,它提供K-means和affinity propagation聚类算法。”

官方主页:http://luispedro.org/software/milk

http://luispedro.org/software/milk

8. PyMVPA: MultiVariate Pattern Analysis (MVPA) in Python

PyMVPA is a Python package intended to ease statistical learning analyses of large datasets. It offers an extensible framework with a high-level interface to a broad range of algorithms for classification, regression, feature selection, data import and export. It is designed to integrate well with related software packages, such as scikit-learn, and MDP. While it is not limited to the neuroimaging domain, it is eminently suited for such datasets. PyMVPA is free software and requires nothing but free-software to run.

“PyMVPA(Multivariate Pattern Analysis in Python)是为大数据集提供统计学习分析的Python工具包,它提供了一个灵活可扩展的框架。它提供的功能有分类、回归、特征选择、数据导入导出、可视化等”

官方主页:http://www.pymvpa.org/

9. Pyrallel – Parallel Data Analytics in Python

Experimental project to investigate distributed computation patterns for machine learning and other semi-interactive data analytics tasks.

“Pyrallel(Parallel Data Analytics in Python)基于分布式计算模式的机器学习和半交互式的试验项目,可在小型集群上运行”

Github代码页:http://github.com/pydata/pyrallel

10. Monte – gradient based learning in Python

Monte (python) is a Python framework for building gradient based learning machines, like neural networks, conditional random fields, logistic regression, etc. Monte contains modules (that hold parameters, a cost-function and a gradient-function) and trainers (that can adapt a module’s parameters by minimizing its cost-function on training data).

Modules are usually composed of other modules, which can in turn contain other modules, etc. Gradients of decomposable systems like these can be computed with back-propagation.

“Monte (machine learning in pure Python)是一个纯Python机器学习库。它可以迅速构建神经网络、条件随机场、逻辑回归等模型,使用inline-C优化,极易使用和扩展。”

官方主页:http://montepython.sourceforge.net

11. Theano

Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently. Theano features:

1)tight integration with NumPy – Use numpy.ndarray in Theano-compiled functions.

2)transparent use of a GPU – Perform data-intensive calculations up to 140x faster than with CPU.(float32 only)

3)efficient symbolic differentiation – Theano does your derivatives for function with one or many inputs.

4)speed and stability optimizations – Get the right answer for log(1+x) even when x is really tiny.

5)dynamic C code generation – Evaluate expressions faster.

6) extensive unit-testing and self-verification – Detect and diagnose many types of mistake.

Theano has been powering large-scale computationally intensive scientific investigations since 2007. But it is also approachable enough to be used in the classroom (IFT6266 at the University of Montreal).

“Theano 是一个 Python 库,用来定义、优化和模拟数学表达式计算,用于高效的解决多维数组的计算问题。Theano的特点:紧密集成Numpy;高效的数据密集型GPU计算;高 效的符号微分运算;高速和稳定的优化;动态生成c代码;广泛的单元测试和自我验证。自2007年以来,Theano已被广泛应用于科学运算。theano 使得构建深度学习模型更加容易,可以快速实现多种模型。PS:Theano,一位希腊美女,Croton最有权势的Milo的女儿,后来成为了毕达哥拉斯 的老婆。”

12. Pylearn2

Pylearn2 is a machine learning library. Most of its functionality is built on top of Theano. This means you can write Pylearn2 plugins (new models, algorithms, etc) using mathematical expressions, and theano will optimize and stabilize those expressions for you, and compile them to a backend of your choice (CPU or GPU).

“Pylearn2建立在theano上,部分依赖scikit-learn上,目前Pylearn2正处于开发中,将可以处理向量、图像、视频等数据,提供MLP、RBM、SDA等深度学习模型。”

官方主页:http://deeplearning.net/software/pylearn2/

from:http://python.jobbole.com/81153/