怎么安装scikit learn(如何掌握数据科学利器)(1)

Scikit-learn 是众多专门研究机器学习的 scikit(即 SciPy Toolkits 的简称)之一。 scikit 代表一个包,它太专业了,无法包含在 SciPy 中,因此被打包为许多 scikit 之一。另一个流行的 scikit 是 scikit-image(即图像处理算法的集合)。

Scikit-learn 是 Python 机器学习的支柱之一,因为它允许您构建机器学习模型并提供用于数据准备、模型后分析和评估的实用函数。

在本文中,我们将探索掌握 scikit-learn 以开始数据科学所需的基本知识。我尽量通过使用关键概念的手绘插图以及可用于自己项目的代码片段来提炼 scikit-learn 库的精髓。

scikit-learn 中的数据表示

让我们从基础开始,考虑 scikit-learn 中使用的数据表示,它本质上是一个表格数据集。

在高层次上,对于监督学习问题,表格数据集将由 X 和 y 变量组成,而无监督学习问题将仅由 X 个变量组成。

在高层次上,X 变量也称为自变量,它们可以是对感兴趣样本的定量或定性描述,而 y 变量也称为因变量,它们本质上是预测模型的目标或响应变量是为了预测而构建的。

scikit-learn 中使用的典型表格数据的卡通插图如下所示。

怎么安装scikit learn(如何掌握数据科学利器)(2)

例如,如果我们正在构建一个预测模型来预测个体是否患有疾病,疾病/非疾病状态是 y 变量,而通过临床测试结果获得的健康指标则用作 X 变量。

通过 Pandas 从 CSV 文件加载数据

实际上,数据集的内容可以存储在 CSV 文件中,并且可以通过 pd.read_csv() 函数使用 Pandas 库读取。因此,加载数据的数据结构称为 Pandas DataFrame。

让我们看看这个。

怎么安装scikit learn(如何掌握数据科学利器)(3)

然后,可以使用广泛的 Pandas 函数在 DataFrame 上执行数据处理,用于处理缺失数据(即删除缺失数据或用估算值填充它们)、选择特定列或列范围、执行特征转换、条件过滤数据等

在下面的示例中,我们将 DataFrame 分离为 X 和 y 变量,这些变量将很快用于模型构建。

怎么安装scikit learn(如何掌握数据科学利器)(4)

这产生了以下 X 数据矩阵:

怎么安装scikit learn(如何掌握数据科学利器)(5)

以及以下 y 变量:

怎么安装scikit learn(如何掌握数据科学利器)(6)

来自 scikit-learn 的实用函数

除了机器学习能力之外,scikit-learn 的一大优点是它的效用函数。

创建人工数据集

例如,您可以使用 scikit-learn(如下所示)创建人工数据集,用于尝试您可能设计的不同机器学习工作流程。

怎么安装scikit learn(如何掌握数据科学利器)(7)

特征缩放

由于特征可能具有多个幅度差异的异构尺度,因此执行特征缩放是必不可少的。

常见的方法包括归一化(将特征缩放到 0 和 1 的统一范围)和标准化(缩放特征,使它们具有居中的均值和单位方差,即所有 X 特征的均值为 0,标准差为 1)。

在 scikit-learn 中,标准化可以使用 normalize() 函数执行,而标准化可以通过 StandardScaler() 函数执行。

特征选择

我喜欢使用的一种常见特征选择方法是简单地丢弃具有低方差的特征,因为它们提供的信号最少(如果我们从信号和噪声的角度考虑的话)。

怎么安装scikit learn(如何掌握数据科学利器)(8)

特征工程

通常情况下,提供的特征可能并不适合模型构建。例如,分类特征要求我们将这些特征编码为与 scikit-learn 中的机器学习算法兼容的形式(即从字符串到整数或二进制数字形式)。

两种常见的分类特征类型包括:

1. 名义特征——特征的分类值没有逻辑 order 并且彼此独立。例如,与洛杉矶、尔湾和曼谷等城市有关的分类值是名义值。

2. 有序特征——特征的分类值具有逻辑顺序并且相互关联。例如,遵循低、中和高等尺度的分类值具有逻辑顺序和关系,使得低 < 中 < 高。

可以使用原生 Python(数值映射)、Pandas(get_dummies() 函数和 map() 方法)以及从 scikit-learn 内部(OneHotEncoder()、OrdinalEncoder()、LabelBinarizer()、LabelEncoder() 执行此类特征编码) , 等等。)。

输入缺失数据

Scikit-learn 还支持缺失值的插补,这是构建机器学习模型之前数据预处理的重要组成部分。用户可以通过 sklearn.impute 子模块中的 SimpleImputer() 和 IterativeImpute() 函数使用单变量或多变量插补方法。

数据拆分

一个常用的函数必须是数据拆分,我们可以将给定的输入 X 和 y 变量分离为训练和测试子集(X_train、y_train、X_test 和 y_test)。

下面的代码片段使用 train_test_split() 执行数据拆分,其中其输入参数是输入 X 和 y 变量,测试集的大小设置为 0.2(或 20%),随机种子数设置为 42 (这样代码块如果多次运行将产生相同的数据拆分)。

怎么安装scikit learn(如何掌握数据科学利器)(9)

使用 Pipeline 创建工作流

顾名思义,我们可以利用 Pipeline() 函数来创建一个任务链或任务序列,这些任务涉及构建机器学习模型。例如,这可能是一个由特征插补、特征编码和模型训练组成的序列。

我们可以将管道视为使用一组类似乐高积木的模块化构建块来构建机器学习工作流。

有关使用 scikit-learn 构建自己的机器学习管道的更多信息,来自 Machine Learning Mastery 的 Jason Brownlee 在以下教程中提供了详细说明:

Modeling Pipeline Optimization With scikit-learn - Machine Learning Mastery

This tutorial presents two essential concepts in data science and automated learning. One is the machine learning…

machinelearningmastery.com

使用 scikit-learn 的高级概述

构建和评估模型的核心步骤

简而言之,如果我可以总结在 scikit-learn 中使用学习算法的核心本质,它将包括以下 5 个步骤:

from sklearn.modulename import EstimatorName # 0. Import model = EstimatorName() # 1. Instantiate model.fit(X_train, y_train) # 2. Fit model.predict(X_test) # 3. Predict model.score(X_test, y_test) # 4. Score

以随机森林算法为例,将上述伪代码转换为实际模型(例如分类模型)的构建将产生以下代码块:

from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(max_features=5, n_estimators=100) rf.fit(X_train, y_train) rf.predict(X_test) rf.score(X_test, y_test)

步骤 0. 从 scikit-learn 的模块中导入估计器函数。估计器用于指学习算法,例如 RandomForestClassifier,用于在给定输入 X 值的情况下估计输出 y 值。

简单地说,这可以用方程 y = f(X) 最好地概括,其中 y 可以在给定 X 的已知值的情况下估计。

步骤 1. 实例化估计器或模型。这是通过调用 estimator 函数并将其简单地分配给一个变量来完成的。特别是,我们可以将此变量命名为模型、clf 或 rf(即所用学习算法的缩写,随机森林)。

实例化的模型可以被认为是一个空盒子,没有来自数据的训练知识,因为还没有训练发生。

步骤 2. 现在允许实例化模型在称为模型构建或模型训练的过程中从训练数据集中学习。

训练是通过使用 fit() 函数启动的,其中训练数据被指定为 fit() 函数的输入参数,如 rf.fit(X_train),字面意思是允许实例化的 rf 估计器从中学习X_train 数据。计算完成后,模型现在在训练集上进行训练。

第 3 步。现在将通过使用 predict() 来应用训练后的模型对新的和未见过的数据(例如 X_test)进行预测功能。

结果,生成了预测的 y 值 (y_test)(并且可以存储到诸如 y_test_pred 之类的变量中,该变量稍后可用于计算模型性能)。

步骤 4. 现在可以计算模型性能。最简单快捷的方法是使用 model.score(X_test, y_test) 中的 score() 函数。

如果此函数用于分类模型,则 score() 函数会生成准确度值,而如果是回归模型,则 score() 函数会计算 R2 值。

为了完整起见,我们可以扩展这个核心工作流程,以包括其他额外的步骤,这些步骤可以进一步提高构建模型的稳健性和可用性。

我将在以下各节中分别讨论这些附加步骤。

模型解读

模型只有在可以从中提取洞察力以推动决策过程时才有用。

继续上面建立的随机森林模型,存储在实例化 rf 模型中的重要特征可以提取如下:

# Model interpretationrf.feature_importances_

上面的代码将为模型构建中使用的特征生成以下重要值数组:

怎么安装scikit learn(如何掌握数据科学利器)(10)

然后,我们可以通过将其与特征名称组合来整理表示,以生成一个干净的 DataFrame,如下所示:

怎么安装scikit learn(如何掌握数据科学利器)(11)

最后,可以使用这些值来创建特征重要性图,如下所示:

怎么安装scikit learn(如何掌握数据科学利器)(12)

简而言之,顾名思义,特征重要性图提供了根据重要性值判断的特征的相对重要性,例如从随机森林模型产生的基尼指数中获得的那些。

超参数调优

通常,我会在构建前几个模型时使用默认超参数。在最初的几次尝试中,目标是确保整个工作流程同步工作并且不会出现错误。

我的首选机器学习算法是随机森林,我将其用作基线模型。在许多情况下,它也被选为最终的学习算法,因为它在稳健的性能和出色的模型可解释性之间提供了良好的混合。

一旦工作流程到位,下一个目标是执行超参数调整以实现最佳性能。

尽管随机森林开箱即用可能效果很好,但通过一些超参数调整,它可以实现稍高的性能。对于支持向量机等学习算法,为了获得稳健的性能,必须进行超参数调优。

现在让我们执行超参数调整,我们可以通过使用 GridSearchCV() 函数来执行。

1. 首先,我们将创建一个人工数据集并进行数据拆分,然后将其作为构建后续模型的数据。

怎么安装scikit learn(如何掌握数据科学利器)(13)

2. 其次,我们现在将执行实际的超参数调整

怎么安装scikit learn(如何掌握数据科学利器)(14)

3. 最后,我们可以在可视化表示中显示超参数调整的结果。

怎么安装scikit learn(如何掌握数据科学利器)(15)

您可以下载完整的 Jupyter 笔记本,上面的代码片段来自于该笔记本。如果您喜欢视频,我还创建了一个 YouTube 视频,展示如何使用 scikit-learn 执行超参数调整。

机器学习工作流程示例

在本节中,我将提供一个示例工作流程,您可以将其用作适用于您自己的项目的一般指南。随意尝试和调整这里提到的程序。

前 6 个步骤可以使用 Pandas 执行,而后续步骤使用 scikit-learn、Pandas(在 DataFrame 中显示结果)和 matplotlib(用于显示模型性能图或特征重要性图)执行。

1. 将数据作为 Pandas DataFrame 读入并显示前几行和最后几行。

2. 显示数据集维度(多少行和多少列)。

3. 显示列的数据类型并总结有多少列是分类和数值数据类型。

4. 处理缺失数据。首先检查是否有缺失数据。如果有,请决定是删除缺失的数据还是填充缺失的数据。另外,准备好提供一个理由来证明你的决定。

5. 执行探索性数据分析。将 Pandas groupby 函数(在分类变量上)与聚合函数一起使用,并创建绘图来探索数据。

6.将自变量赋值给X变量,同时将因变量赋值给y变量

7. 进行数据拆分(使用scikit-learn),使用80/20的拆分比例(记得设置随机种子数)将其作为训练集和测试集分开。

8. 使用训练集使用随机森林算法(使用 scikit-learn)构建机器学习模型。

9. 通过使用 GridSearchCV() 函数执行超参数调整和交叉验证。

10.应用经过训练的模型通过 predict() 函数对测试集进行预测。

11. 在 Pandas 的帮助下将获得的模型性能指标解释为汇总表(我喜欢将合并后的模型性能显示为 DataFrame)或在 matplotlib 的帮助下将其显示为可视化。

12. 解释随机森林模型确定的重要特征。

Scikit-learn 的资源

所有有抱负的数据科学从业者通常都会发现有必要不时浏览一下 API 文档甚至备忘单,以快速找到 scikit-learn 提供的无数函数的精确函数或输入参数。

因此,本节提供了一些可能对您的数据科学项目有所帮助的惊人资源、备忘单和书籍。

文档

是的,这是对的!最好的资源之一是 scikit-learn 网站上提供的 API 文档、用户指南和示例。

我发现跳转到 API 文档以详细描述可用的输入参数以及每个参数的作用非常有用且快速。示例和用户指南也有助于提供可能有助于我们自己的数据科学项目的想法和灵感。

备忘单

Scikit-学习

scikit-learn 提供了一个非常方便的备忘单,通过回答有关数据的几个问题来帮助选择合适的机器学习算法。

需要注意的是,上图是 scikit-learn 算法备忘单的预览。要充分利用此备忘单(您可以单击算法以查看感兴趣的算法的基础文档),请转到以下链接以继续查看备忘单:

Choosing the right estimator - scikit-learn 0.24.2 documentation

Often the hardest part of solving a machine learning problem can be finding the right estimator for the job. Different…

scikit-learn.org

数据营

另一个有用的备忘单是来自 DataCamp 的备忘单,它提供了一个打印友好的 PDF 格式和 HTML 版本的单页表格。

这个备忘单的好处是为各种机器学习任务提供的代码片段,这些任务可以由 scikit-learn 执行。

备忘单的 PDF 和 HTML 版本可从以下链接获得:

https://www.datacamp.com/community/blog/scikit-learn-cheat-sheet

图书

没有什么能比得上您办公桌上的一些好书,您可以偶尔阅读或浏览这些好书,为您的项目寻找想法和灵感。有时,我会从书中提供的示例中找到一种处理事物的新方法。

Aurélien Géron 的 《Hands-On Machine Learning》 一书是经典书籍之一,它很好地涵盖了在 Python 中实现机器学习和深度学习模型的概念和实践方面。还有一个附录部分提供了一些关于如何建立机器学习项目的实用建议,这也可能对有抱负的数据科学家有所帮助。

Jake VanderPlas 的《Python Data Science Handbook: Essential Tools for Working with Data》也是另一本很棒的书,它涵盖了一些用于实施数据科学项目的重要库。特别是,这本书涵盖了如何使用 Jupyter notebooks、NumPy、Pandas、Matplotlib 和 Scikit-learn。

该书的免费在线版本网上可获得,此外,书中提到的 Jupyter notebooks,它在 GitHub 上提供。

结论

恭喜您到达本文的结尾,这也标志着使用 scikit-learn 探索数据科学的无数可能性的开始。

我们希望这篇文章对您的数据科学之旅有所帮助,如果遗漏了 scikit-learn 中对您 自己的数据科学有用的任何方法或资源,请随在评论区评论。

,