本系列主要以Python为主,介绐我们在日常机器学习中所要应用到的一些程序库, 后续我们还会介绍它们如何安装,如何使用以及一些经典的建模故事。
首先我们来认识一下,我们在日常机器学习中所要应用到的一些Python程序库
Numpy
Matplotlib
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等
matplotlib旨在用Python实现matlab的功能,是Python下最出色的绘图库,功能很完善,其风格跟matlib很相似。同时也继承了Python的简单明了的风格,其可以很方便的设计和输出二维以及三维的数据,其提供了常规的笛而卡坐标,极坐标,球坐标,三维坐标等,其输出的图片质量也达到了科技论文中的印刷质量,日常的基本绘图更不在话下。
Scikit-learn
scikit-learn提供了机器学习和数据挖掘所需要的所有工具。它是目前Python机器学习的标准库。要使用任何成熟的机器学习算法都推荐使用这个库。scikit-learn支持分类和回归,实现了基本所有的经典算法(支持向量机,随机森林,朴素贝叶斯等等)。程序库的设计让迁移算法十分容易,使用不同的算法做实验非常轻松。这些经典算法可用性很强,能用于大量不同的情况。
NLTK
NLTK不算是一个机器学习的程序库,但它是做自然语言处理(NLP)必须的一个库。除了用于文字处理的功能,例如聚类,分词,词干提取,标记,解析等,它还包含了大量的数据集和其他关于词法的资源(可用于模型训练)。把所有这些打包在一起的好处就不用再多说了。如果你对NLP感兴趣,可以看看这些教程!
Theano
Theano被广泛应用于工业界和学术界,它是所有深度学习架构的鼻祖。Theano是用Python,结合Numpy实现的。你可以用它来构建用多维数组实现神经网络。Theano会处理所有数学计算,你不需要知道底层的数学公式实现。早在支持使用GPU进行计算不像今天这样普及的时候,Theano就已经提供了对GPU计算的支持。这个程序库目前已经非常成熟,能够支持很多不同类型的操作。这使得Theano可以在和其他库比较的时候胜出。目前关于Theano最大的问题是API不是很好用,对于新手来说上手困难。不过市面上已经有了解决这个问题的封装包,比如Keras, Blocks 和 Lasagne,都可以简化Theano的使用。
TensorFlow
谷歌大脑团队为了内部使用创造了TensorFlow,2015年将其开源化。设计初衷是取代他们已有的封闭机器学习框架DistBelief,据说该构架太过于依赖Google的整体构架,也不够灵活,在分享代码的时候非常不方便。于是就有了TensorFlow。谷歌从以前的错误中吸取了教训。许多人认为TensorFlow是Theano的改进版,它提供了更灵活和好用的API。可以用于科研和工业界,同时支持使用大量的GPU进行模型训练。TensorFlow支持的操作没有Theano多,但是它的计算可视化比Theano好。
TensorFlow目前非常流行。如果今天这篇文章里面提到的名字你只听说了一个,那很有可能是这个。每天都有新的提到TensorFlow的博文或学术文章发表。这个流行度提供了大量的用户和教程,新人很容易上手。
Keras
Keras是一个提供更高层神经网络API的库,它可以基于Theano或者TensorFlow。它拥有这两个库强大的功能却又同时大大地简化了使用难度。它将用户的体验放在首要地位,提供简单的API和很有用的错误信息。
同时Keras的设计基于模块,这就使得你能自由组合不同的模型(神经层,成本函数等等),而且模型的可扩展性很好,因为你只需要简单的将新模块跟已有的连起来即可。
个人觉得Keras太好用了。如果你开始用深度学习,可以看看例子 和 文档,对于你可以用它做什么有个数。如果你要学习使用它,可以从 这个教程开始。
两个类似的库有Lasagne 和 Blocks, 但它们只支持Theano。如果你试过了Keras但是你不喜欢它你可以试试这些其他的库,也许它们更适合你。
Xgboost
xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,其中包括两个以上kaggle比赛的夺冠方案。在工业界规模方面,xgboost的分布式版本有广泛的可移植性,支持在YARN, MPI, Sungrid Engine等各个平台上面运行,并且保留了单机并行版本的各种优化,使得它可以很好地解决于工业界规模的问题。
lightGBM
LightGBM 是一个梯度 boosting 框架,使用基于学习算法的决策树。它可以说是分布式的,高效的,它有以下优势:
- 更快的训练效率
- 低内存使用
- 更好的准确率
- 支持并行学习
- 可处理大规模数据
Randomforest
随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器。该分类器最早由Leo Breiman和Adele Cutler提出,并被注册成了商标。简单来说,随机森林就是由多棵CART(Classification And Regression Tree)构成的。对于每棵树,它们使用的训练集是从总的训练集中有放回采样出来的,这意味着,总的训练集中的有些样本可能多次出现在一棵树的训练集中,也可能从未出现在一棵树的训练集中。在训练每棵树的节点时,使用的特征是从所有特征中按照一定比例随机地无放回的抽取的,根据Leo Breiman的建议,假设总的特征数量为M,这个比例可以是sqrt(M),1/2sqrt(M),2sqrt(M)。
Extratree
ET或Extra-Trees(Extremely randomized trees,极端随机树)是由PierreGeurts等人于2006年提出。该算法与随机森林算法十分相似,都是由许多决策树构成。但该算法与随机森林有两点主要的区别:
1、随机森林应用的是Bagging模型,而ET是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本;2、随机森林是在一个随机子集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。