当前位置: 首页 > 科技观察

Python语言下的机器学习库

时间:2023-03-14 00:07:02 科技观察

Python是最流行的编程语言之一,广泛应用于科学计算:计算机视觉、人工智能、数学、天文学等领域,同样适用于机器学习也就不足为奇了。当然,它也有一些缺点;其中之一是工具和库过于分散。如果你是一个unix头脑的人,你会发现每个工具只做一件事并且把它做好非常方便。但您还需要了解不同库和工具的优缺点,以便在构建系统时做出明智的决定。工具本身并不能改进系统或产品,但使用正确的工具,我们可以更有效地工作并提高生产力。因此,了解适合您工作领域的正确工具非常重要。本文的目的是列举和描述可用于Python的最有用的机器学习工具和库。在此列表中,我们不要求这些库是用Python编写的,只要它们具有Python接口即可。我们在***也有一个关于深度学习的小部分,因为它最近也引起了相当多的关注。我们的目的不是列出Python中的所有机器学习库(Python包索引(PyPI)在搜索“机器学习”时返回139个结果),而是列出我们知道有用且维护良好的库。此外,尽管某些模块可用于各种机器学习任务,但我们仅列出主要关注机器学习的库。例如,虽然Scipy包括一些聚类算法,但它的主要重点不是机器学习,而是一个综合的科学计算工具集。所以我们排除了Scipy(尽管我们也使用它!)。另外要提到的是,我们还根据它们与其他科学计算库的集成来评估这些库,因为机器学习(监督或非监督)也是数据处理系统的一部分。如果您使用的库与数据处理系统的其余部分不匹配,您将花费大量时间在不同库之间创建中间层。在您的工具集中拥有一个出色的库很重要,但该库与其他库的良好集成也很重要。如果你擅长其他语言,但也想使用Python包,我们也简要介绍如何与Python集成以使用本文列出的库。Scikit-LearnScikitLearn是我们在CBInsights选择的机器学习工具。我们将其用于分类、特征选择、特征提取和聚类。我们的最爱之一是它具有易于使用的一致API,并提供了大量开箱即用的评估、诊断和交叉验证方法(听起来很熟悉?Python还提供了“电池就绪”(译注):指的是开箱即??用的方法。锦上添花的是它在引擎盖下使用了Scipy数据结构,这与使用Scipy、Numpy、Pandas和Matplotlib进行科学计算的Python的其余部分非常吻合。因此,如果您想可视化分类器的性能(例如,使用精确召回图或接收器操作特征(ROC)曲线),Matplotlib可以帮助快速可视化。考虑清理和构建数据所花费的时间,使用这个库可以非常方便,因为它可以与其他科学计算包紧密集成。此外,它还包含有限的自然语言处理特征提取功能,以及词袋(bagofwords),tfidf(TermFrequencyInverseDocumentFrequency算法),预处理(stopwords/stop-words,自定义预处理,分析器)。此外,如果您想在小型数据集(玩具数据集)上快速执行不同的基准测试,它自己的数据集模块提供了通用且有用的数据集。你也可以根据这些数据集创建自己的小数据集,以便在将模型应用到现实世界之前,根据自己的目的测试模型是否符合预期。对于参数优化和参数调整,它还提供网格搜索和随机搜索。如果没有强大的社区支持或维护不善,这些功能都不可能实现。我们期待它的第一个稳定版本。StatsmodelsStatsmodels是另一个专注于统计模型的强大库,主要用于预测和探索性分析。如果您想拟合线性模型、执行统计分析或预测建模,Statsmodels非常有用。它提供的统计测试相当全面,涵盖了大多数验证任务的情况。如果您是R或S用户,它还为某些统计模型提供R语法。它的模型还接受Numpy数组和Pandas数据框,使中间数据结构成为过去!PyMCPyMC是制作贝叶斯曲线的工具。它包含用于贝叶斯模型、统计分布和模型收敛以及一些分层模型的诊断工具。如果你想做贝叶斯分析,你应该去看看。ShogunShogun是一个专注于支持向量机(SVM)的机器学习工具箱,用C++编写。它被积极地开发和维护,提供了一个Python接口,并且是最好的文档化接口。然而,我们发现它的API与Scikit-learn相比很难使用。此外,现成可用的诊断和评估算法并不多。但是,速度是一个很大的优势。GensimGensim被定义为“人类主题建模”。它的主页描述了它的重点是LatentDirichletAllocation(LDA)及其变体。与其他包不同,它支持自然语言处理,更容易将NLP与其他机器学习算法结合起来。如果你的领域是NLP,想做聚合和基础分类,可以看看。目前,他们介绍了word2vec,谷歌基于递归神经网络的文本表示。该库仅用Python编写。OrangeOrange是本文列出的所有库中唯一具有图形用户界面(GUI)的库。它对于分类、聚类和特征选择方法以及一些交叉验证方法来说相当全面。它在某些方面(分类方法、一些预处理能力)优于Scikit-learn,但在适配其他科学计算系统(Numpy、Scipy、Matplotlib、Pandas)方面不如Scikit-learn。但是,包含GUI是一个重要的优势。您可以可视化交叉验证、模型和特征选择方法的结果(某些特征需要安装Graphviz)。对于大多数算法,Orange都有自己的数据结构,因此需要将数据包装成与Orange兼容的数据结构,这使得学习曲线更加陡峭。PyMVPAPyMVPA是另一个统计学习库,其API类似于Scikit-learn。包括交叉验证和诊断工具,但不如Scikit-learn全面。深度学习尽管深度学习是机器学习的一个分支,但我们在这里单独创建一个分支的原因是它确实吸引了Google和Facebook人才招聘部门的大量关注。TheanoTheano是最成熟的深度学习库。它提供了一个很好的数据结构(张量,tensor)来表示神经网络的层,这对于线性代数来说非常高效,类似于Numpy的数组。需要注意的是,它的API可能不是很直观,用户的学习曲线会很高。有许多基于Theano的库利用其数据结构。它还支持开箱即用的GPU编程。PyLearn2还有另一个基于Theano的库PyLearn2,它向Theano引入了模块化和可配置性。您可以通过不同的配置文件来创建神经网络,这样可以更轻松地尝试不同的参数。可以说,如果把神经网络的参数和属性分离到配置文件中,它的模块化就更强大了。DecafDecaf是加州大学伯克利分校最近发布的一个深度学习库。它在Imagenet分类挑战赛中进行了测试,发现其神经网络实现非常先进(stateofart)。Nolearn如果你想在深度学习中使用优秀的Scikit-learn库API,封装了Decaf的Nolearn会让你更容易使用。它是Decaf的包装器,与Scikit-learn(大部分)兼容,使Decaf更加令人难以置信。OverFeatOverFeat是最近猫狗大战(kaggle挑战赛)的获胜者,它是用C++编写的,还包含一个Python包装器(以及Matlab和Lua)。通过Torch库使用GPU,因此速度很快。还赢得了ImageNet分类的检测和定位挑战。如果计算机视觉是你的领域,你可能想看一看。HebelHebel是另一个具有开箱即用的GPU支持的神经网络库。你可以通过YAML文件(类似于Pylearn2)来确定神经网络的属性,它提供了神级网络和代码的友好分离,并且可以快速运行模型。由于开发时间短,文档在深度和广度上都比较匮乏。就神经网络模型而言,也是有限制的,因为只支持一种神经网络模型(正反馈,前馈)。然而,它是用纯Python编写的,并且将成为一个友好的库,因为它包含许多实用功能,例如我们在其他库中找不到的调度程序和监视器。NeurolabNeuroLab是另一个API友好(类似于Matlabapi)的神经网络库。与其他库不同,它包含循环神经网络(RNN)实现的不同变体。如果您想使用RNN,这个库是同类API的最佳选择之一。与其他语言的集成你不会Python但擅长其他语言?不要绝望!Python(以及其他语言)的优势之一是它是一种完美的胶水语言,您可以使用自己喜欢的编程语言通过Python访问这些库。以下各种编程语言的包可用于将其他语言与Python结合:R->RPythonMatlab->matpythonJava->JythonLua->LunaticPythonJulia->PyCall.jlInactivelibraries这些库超过No更新已发布一年,我们列出它们是因为您可能会发现它们很有用,但这些库不太可能获得错误修复,尤其是未来的增强功能。MDPMlPyFFnetPyBrain如果我们错过了您最喜欢的Python机器学习包,请通过评论告诉我们。我们很乐意将其添加到文章中。