程序员受欢迎的机器学习和数据科学Python库
根据当前技术界的广泛需求,本文将以如下顺序重点介绍,市场上适合于数据科学和机器学习实现的优秀 Python 软件:
数据科学与机器学习的介绍
为什么要使用 Python 进行数据科学和机器学习?
用于数据科学和机器学习的 Python 库
数据科学与机器学习的介绍
众所周知,我们正处在一个大数据的时代,数据是驱动机器模型发展的“燃料”。
实际上,数据科学和机器学习都属于技能范畴,而不仅仅是两项孤立的技术。
它们需要开发人员在技能上具备:从数据中获得实用的见解,通过建立预测模型,进而解决问题的能力。
就字面定义而言:
数据科学,是从数据中提取有用信息,以解决实际问题的过程。
机器学习,是如何通过所提供的大量数据,来解决问题的过程。
那么两者之间的关系可以被描述为:机器学习是数据科学的一部分,它利用机器学习算法和其他统计学技术,来获悉数据是如何影响并发展业务的。
为什么要使用 Python 进行数据科学和机器学习?
Python 在那些用于实现机器学习和数据科学的流行编程语言中排名第一。这是为什么呢?
①易于学习:Python 使用的是非常简单的语法,可被用于实现简单的计算。
例如:将两个字符串添加到复杂的计算过程中,以构建出复杂的机器学习模型。
②更少的代码:虽然为了实现数据科学和机器学习会涉及到许多种的算法,但是得益于 Python 对于预定义包的支持,我们不必从零开始编写算法。
同时,为了简单化,Python 也提供了一种“在编码时就进行检查(check as you code)”的方法,进而有效地减轻了测试代码的工作量。
③预建库:Python 有着 100 多种预建库,可用于实现各种机器学习和深度学习的算法。
因此,用户每次在数据集上运行算法时,只需通过单个命令去安装和加载必要的程序包即可。
其中,比较流行的预构建库包括:NumPy、Keras、Tensorflow、以及 Pytorch 等。
④与平台无关:Python 可以运行在包括:Windows、macOS、Linux、以及 Unix 等多种平台上。
在将代码从一个平台转移到另一个平台时,您可以使用诸如 PyInstaller 之类的软件包,来解决所有依赖性的问题。
⑤大量的社区支持:除了拥有大量的支持者,Python 还拥有多个社区与论坛,各类程序员可以在其中发布他们自己的错误,并互相提供帮助。
用于数据科学和机器学习的 Python 库
Python 在人工智能(AI)和机器学习领域得到广泛使用,其中一项重要的原因是:Python 提供了数千种内置库。
通过各种内置的功能和方法,这些库能够轻松地进行数据分析、处理、整理、以及建模等任务。
下面我们将重点讨论如下类型的任务库:
统计分析
数据可视化
数据建模与机器学习
深度学习
自然语言处理(NLP)
统计分析
统计是数据科学和机器学习的一项基础。所有的机器学习和深度学习(DL)算法、及相关技术均基于统计学的基本原理和概念。而 Python 则专为统计分析提供了大量的软件库。
在此,我们将重点介绍那些能够执行复杂统计计算极具推荐价值的软件包与内置函数。
它们分别是:
NumPy
SciPy
Pandas
StatsModels
①NumPy
NumPy、或称 Numerical Python 是最常用的 Python 库之一。该库的主要功能是:支持用于数学和逻辑运算的多维数组。
用户可以将 NumPy 用于索引、分类、整形、传输图像、以及声波类型的多维实数数组。
下面是 NumPy 的具体功能列表:
执行从简单到复杂的数学和科学计算。
对多维数组对象提供的强大支持,用于处理数组元素的函数和方法集合。
提供傅里叶变换和数据处理例程。
执行线性代数计算,这对于包括:线性回归、逻辑回归、朴素贝叶斯等机器学习算法,是十分必需的。
②SciPy
建立在 NumPy 之上的 SciPy 库,是一组子软件包集合。它能够协助解决与统计分析有关的各种基本问题。
由于适用于处理使用了 NumPy 库定义的数组元素,因此 SciPy 库通常可被用于计算那些使用 NumPy,仍无法完成的数学方程式。
下面是 SciPy 的具体功能列表:
通过与 NumPy 数组一起使用,它提供了一个数值积分和优化方法的平台。
它带有可用于矢量量化、傅立叶变换、积分、插值等子软件包的集合。
提供了完整的线性代数函数堆栈。这些函数可使用诸如 k-means 算法,来进行聚类等高级计算。
提供了对于信号处理、数据结构、数值算法、以及创建稀疏矩阵等方面的支持。
③Pandas
作为另一个重要的统计库,Pandas 主要被用于统计、金融、经济学、数据分析等广泛的领域。
该软件库主要依赖 NumPy 数组,来处理 Pandas 的数据对象。毕竟,NumPy、Pandas 和 SciPy 在执行科学计算、以及数据处理等方面,有着深度的彼此依赖性。
下面是 Pandas 的具体功能列表:
使用预定义和自定义的索引,来快速创建有效的 DataFrame 对象。
可被用于处理大型数据集,并执行子集、数据切片、以及索引等操作。
提供用于创建 Excel 图表,和执行复杂数据分析任务的内置功能,例如:描述性的统计分析,数据整理、转换、操作、以及可视化等。
提供对于处理时序数据的支持。
我个人认为:Pandas 是处理大量数据方面的优秀软件库;NumPy 对于多维数组具有出色的支持;而 Scipy 则提供了一组针对执行大多数据统计分析任务的子软件包。
④StatsModels
建立在 NumPy 和 SciPy 之上的 StatsModels Python 软件包,是创建统计模型、数据处理和模型评估的最佳选择。
除了使用到 SciPy 库中的 NumPy 数组和科学模型之外,它还能够与 Pandas 相集成,以实现有效的数据处理。StatsModels 比较擅长于统计计算、统计测试和数据探索。
下面是 StatsModels 的具体功能列表:
弥补了 NumPy 和 SciPy 库的缺陷,能够执行统计检验和假设检验。
提供了 R-style 公式的实现,以便更好地进行统计分析。统计人员可以沿用 R 语言。
由于它能够广泛地支持统计计算,因此通常可用于实现广义线性模型(GLM,Generalised Linear Models)和普通最小二阶线性回归(OLM,Ordinaryleast-square Linear Regression)模型。
支持包括假设检验(零理论,Null Theory)在内的统计检验。
数据可视化
数据可视化就是通过图形,来有效地表达来自数据的各种关键洞见。它包括:图形、图表、思维导图、热图、直方图、密度图等形式,进而研究各种数据变量之间的相关性。
在此,我们将重点介绍那些可以通过内置函数,来研究各种数据之间依赖关系的 Python 数据可视化包。
它们分别是:
Matplotlib
Seaborn
Plotly
Bokeh
①Matplotlib
Matplotlib 是 Python 中最基本的数据可视化软件包。它支持诸如:直方图、条形图、功率谱、误差图等各类图形。
通过该二维图形库,用户可以生成各种清晰明了的图形,这对于探索性数据分析(EDA)是至关重要的。
下面是 Matplotlib 的具体功能列表:
用户可以针对 Matplotlib 选择合适的线条样式、字体样式、格式化轴等功能,以便轻松地绘制出各种图形。
作为一种推理定量信息的工具,它可通过创建图形,来协助用户了解趋势、模式并进行关联。
作为 Matplotlib 软件包的最佳功能之一,其 Pyplot 模块提供了与 MATLAB 非常相似的用户界面。
提供面向对象的 API 模块,可通过诸如 Tkinter、wxPython、以及 Qt 等 GUI 工具,将图形集成到应用程序中。
②Seaborn
虽然以 Matplotlib 库为基础,但是与 Matplotlib 相比,Seaborn 可用于创建更具吸引力和描述性的统计图表。
除了对数据可视化提供广泛的支持,Seaborn 还自带有一种面向数据集的内置 API,可用于研究多个变量之间的关系。
下面是 Seaborn 的具体功能列表:
可分析和可视化单变量和双变量的数据点,提供了将当前数据与其他数据子集进行比较的选项。
针对各种目标变量的线性回归模型,支持自动化统计估计和图形化表示。
通过提供对于高级抽象功能的执行,可构建多图网格(multi-plotgrids)的复杂可视化。
通过各种内置主题,可实现样式设置,并创建 Matplotlib 图。
③Plotly
作为知名的图形 Python 库之一,Ploty 通过交互式图形,以方便用户了解目标变量和预测变量之间的依赖性。
它可以被用于分析与可视化统计,针对财务、商业和科学数据领域,生成清晰明了的图形、子图、热图、以及 3D 图表等。
下面是 Ploty 的具体功能列表:
具有 30 多种图表类型,包括:3D 图表、科学和统计图、SVG 地图等,可实现清晰的可视化。
通过 Python API,您可以创建由图表、图形、文本和 Web 图像组成的公共/私有的仪表板。
可创建基于 JSON 格式序列化的可视化图像,用户可以在 R、MATLAB、Julia 等不同平台上轻松地访问到它们。
通过名为 Plotly Grid 的内置 API,用户可以直接将数据导入 Ploty 环境。
④Bokeh
Bokeh 是 Python 中交互性最强的库之一,可用于为 Web 浏览器构建描述性的图形表示形式。
它可以轻松处理庞大的数据集,并构建通用图,进而有助于执行广泛的 EDA。
通过定义完善的特征,Bokeh 能够构建交互式的图表、仪表板和数据应用程序。
下面是 Bokeh 的具体功能列表:
可以通过简单的命令,帮助用户快速地创建复杂的统计图。
支持 HTML、Notebook、以及服务器形式的输出。它还支持多种语言的绑定,包括 R、Python、lua、以及 Julia 等。
通过与 Flask 和 Django 的集成,您可以在应用程序上表达特定的可视化效果。
通过提供对于可视化文件的支持,用户可以将其转换为诸如 Matplotlib、Seaborn、以及 ggplot 等其他库。
机器学习
创建可以准确预测的结果、并解决特定问题的机器学习模型,是任何数据科学项目中最重要的部分。
然而,实施机器学习与深度学习往往会涉及到数千行的代码。而当您需要通过神经网络解决复杂问题时,其对应的模型则会变得更加麻烦。
不过值得庆幸的是,通过 Python 自带的多种软件包,我们可以无需编写任何算法,轻松地实现各种机器学习的技术应用。
在此,我们将重点介绍那些可以通过内置函数,来实现各种机器学习算法极具推荐价值的机器学习软件包。
它们分别是:
Scikit-learn
XGBoost
ELI5
①Scikit-learn
作为数据建模和模型评估的 Python 库之一,Scikit-learn 自带了各种监督式和无监督式机器学习算法。
同时,它可以被用于集合式学习(Ensemble Learning)和促进式机器学习(Boosting Machine Learning)的明确定义。
下面是 Scikit 的具体功能列表:
通过提供标准的数据集(如:Iris 和 Boston House Price),以协助用户开展机器学习。
可用于执行监督式和无监督式机器学习的内置方法,包括解析、聚类、分类、回归、以及对各种文件进行异常检测。
带有用于特征提取和特征选择的内置功能,可协助识别数据中的重要属性。
通过执行交叉验证,它提供了评估模型性能的不同方法,可优化模型的性能、并调整各项参数。
②XGBoost
XGBoost 即为“极端梯度增强(Extreme Gradient Boosting)”,它属于 Boosting 机器学习类 Python 软件包。通过梯度增强,XGBoost 能够提高机器学习模型的性能和准确性。
下面是 XGBoost 的具体功能列表:
由于是用 C++ 编写的,因此 XGBoost 被认为是提高机器学习模型性能最快、且有效的软件库之一。
由于 XGBoost 的核心算法是可并行化的,因此它可以有效地利用多核计算机的性能。同时,XGBoost 也可以处理大量数据集、并能够跨多个数据集合开展网络工作。
提供可用于执行交叉验证,参数调整,正则化,以及处理缺失值的内部参数,还能够提供与 Scikit-learn 相兼容的 API。
由于 XGBoost 经常被用于顶级的数据科学和机器学习竞赛中,因此被普遍认为优于其他算法。
③ELI5
作为另一种 Python 库,ELI5 主要致力于改善机器学习模型的性能。由于相对较新,因此它通常会与 XGBoost、LightGBM、以及 CatBoost 等一起被使用,进而提高机器学习模型的准确性。
下面是 ELI5 的具体功能列表:
提供与 Scikit-learn 软件包的集成,以表征特征的重要性,并解释决策树和基于树的集成性预测。
能够分析并解释由 XGBClassifier、XGBRegressor、LGBMClassifier、LGBMRegressor、CatBoostClassifier、CatBoostRegressor 和 Catboost 所做出的预测。
提供了对实现多种算法的支持,并能够检查黑盒模型。其 TextExplainer 模块可以解释由文本分类器所做出的预测。
能够协助分析那些由线性回归器、和分类器给出的 Scikit 学习通用线性模型(GLM,General Linear Models)的权重和预测。
深度学习
机器学习和人工智能的进化离不开深度学习。随着深度学习的引入,我们可以构建出复杂的模型,并处理庞大的数据集。
有了 Python 提供的各种深度学习软件包,我们可以轻松地构建出各种高效的神经网络。
在此,我们将重点介绍那些可以通过内置函数,来实现复杂神经网络极具推荐价值的深度学习软件包。
它们分别是:
TensorFlow
Pytorch
Keras
①TensorFlow
作为深度学习的 Python 库之一,TensorFlow 是一款可用于横跨各项任务进行数据流编程的开源库。
TensorFlow 通过一个符号数学库,来构建出强大而精确的神经网络。它提供了直观的多平台编程界面,可在不同的领域中实现高度扩展性。
下面是 TensorFlow 的具体功能列表:
面对大型项目和数据集合,它可以构建和训练多个神经网络。
除支持神经网络,它还提供了各种执行统计分析的功能与方法。例如:它自带有可用于创建概率模型和贝叶斯网络(包括:Bernoulli、Chi2、Uniform、Gamma 等)的内置功能。
TensorFlow 提供了分层的组件,这些组件可以对权重和偏差执行分层的操作,并且可以通过实施正则化技术(例如:batch normalization、Dropout 等)来提高模型的性能。
它自带有一个被称为 TensorBoard 的可视化程序,该可视化程序能够创建交互式和可视化的图形,以获悉数据特征的依赖性。
②Pytorch
Pytorch 是一个基于 Python 的开源科学计算软件包,可用于在大型的数据集上实施深度学习技术和神经网络。
Facebook 使用此软件库来开发其神经网络,进而实现了面部识别和自动化标记等任务。
下面是 Pytorch 的具体功能列表:
提供了易用的 API,能与其他数据科学和机器学习的框架相集成。
类似于 NumPy,Pytorch 提供了被称为 Tensors 的多维数组,并且可以被使用在 GPU 上。
它不仅可以用于针对大型神经网络进行建模,而且还提供了一个界面,支持多达 200 多种能被用于统计分析的数学运算。
其代码可执行在每个节点上,以创建动态计算图,进而协助时序分析,并能够实时地预测销售量。
③Keras
同样作为 Python 中优秀的深度学习库之一,Keras 能够为构建、分析、评估和改进神经网络提供全面支持。
Keras 是基于 Theano 和 TensorFlow Python 库构建的。它提供了用于构建复杂的大规模深度学习模型所需的各种附加功能。
下面是 Keras 的具体功能列表:
为构建所有类型的神经网络提供支持,包括:完全连接、卷积、池化、循环、以及嵌入等。能够针对大型数据集与问题,通过将各种模型进一步组合,以创建完整的神经网络。
具有执行神经网络计算的内置功能,包括:定义层与目标,激活功能;能够通过优化器和大量的工具,来轻松地处理图像和文本数据。
自带有一些预处理的数据集和经过训练的模型,包括:MNIST、VGG、Inception、SqueezeNet、以及 ResNet 等。
易于扩展,能够对新增功能和方法等模块提供支持。
自然语言处理
Google 运用 Alexa 来准确地预测用户搜索的内容,而在 Siri 等其他聊天机器人的背后都会用到自然语言处理(NLP)技术。
NLP 在设计 AI 的系统中,发挥了巨大的作用。该系统有助于描述出人类语言与计算机之间的交互关系。
在此,我们将重点介绍那些可以通过内置函数,来实现高级 AI 系统极具推荐价值的自然语言处理包。
它们分别是:
NLTK
spaCy
Gensim
①NLTK(自然语言工具包,Natural Language ToolKit)
NLTK 被认为是分析人类语言和行为的优秀 Python 软件包。作为大多数数据科学家的首选,NLTK 库提供了易用的界面,其中包含 50 多种语料库和词汇资源,有助于描述人与人之间的互动,以及构建出诸如推荐引擎之类的 AI 系统。
下面是 NLTK 的具体功能列表:
提供了一整套数据和文本处理的方法,可用于针对文本分析的分类、标记、词干、解析和语义推理。
包含了用于工业级 NLP 库的包装器,通过构建复杂的系统,以协助进行文本分类,并查找人类语音的行为趋势和模式。
它自带有实现计算语言学(Computational Linguistics)的综合指南、以及完整的 API 文档指南,可帮助新手程序员上手使用 NLP。
它拥有庞大的用户和专业人员社区,能够提供全面的教程与快速指南,方便用户学习如何使用 Python 进行计算语言学。
②spaCy
作为一款免费的 Python 开源库,spaCy 可被用于实现高级自然语言处理(NLP)的相关技术。
当您在处理大量文本时,可以通过 spaCy 来轻松地获悉文本的形态学意义,以及如何将其分类成为人类可理解的语言。
下面是 spaCy 的具体功能列表:
除了语言计算之外,spaCy 还提供了单独的模块,可用来构建、训练和测试各种统计模型,进而更好地协助用户理解单词的含义。
它带有各种内置的语言注释,可协助分析句子的语法结构。这不仅有助于理解各种测试,还有助于查找出句子中不同单词之间的关系。
可被用于针对包含缩写和多个标点符号的复杂嵌套标记(nestedtokens),以实现标记化。
除了本身的强大功能和效率,spaCy 还支持 51 种以上的语言。
③Gensim
Gensim 是另一种开源的 Python 软件包,该建模旨在从大型文档和文本中提取语义主题,以通过统计模型和语言计算来予以处理,进而分析和预测人类行为。
无论是原始数据还是非结构化的数据,它都有能力处理和应对庞大的数据集合。
下面是 Genism 的具体功能列表:
通过理解每个单词的统计语义,以构建有效的分类文档模型。
它自带有诸如 Word2Vec、FastText、潜在语义分析(Latent Semantic Analysis)之类的文本处理算法。
这些算法能够研究文档中的统计共现模式,通过过滤掉那些不必要的单词,进而构建出仅有重要特征的模型。
提供可供导入、并支持多种数据格式的 I/O 包装器与读取器。
其简单直观的界面,可供初学者轻松地进行试用。同时,其 API 学习曲线比较平缓,因此备受各界开发人员的喜欢。