提交 4c867477 编写于 作者: W wizardforcel

2021-03-10 14:11:28

上级 5ae3d29c
......@@ -28,7 +28,7 @@
* 从左上角的飞镖板开始,您可以看到我们的点都分散在中心周围。 因此,总的来说,您知道平均误差非常接近实际。 我们的偏见实际上非常低,因为我们的预测都围绕着相同的正确点。 但是,我们的方差很高,因为这些点散布在整个地方。 因此,这是低偏差和高方差的示例。
* 如果我们继续移动到右上角的飞镖板上,就会看到我们的点始终一致地从其应有的位置偏向西北。 因此,这是我们的预测中存在高度偏见的一个示例,在这些偏见中始终存在一定偏差。 我们的差异很小,因为它们都紧密地聚集在错误的位置,但是至少它们彼此靠近,因此我们的预测是一致的。 那是低方差。 但是,偏见很高。 同样,这是高偏差,低方差。
* 在左下角的飞镖板上,您可以看到我们的预测分散在错误的均值周围。 因此,我们有很高的偏见。 一切都偏向了不该有的地方。 但是我们的差异也很大。 因此,这是两个世界中最糟糕的一个。 在此示例中,我们具有较高的偏见和较高的方差。
* 最后,在一个奇妙的完美世界中,您将看到一个示例,例如右下方向的飞镖盘,其中我们的偏见低,所有事物都集中在应该放置的地方,而方差很小,所有事物都紧密地聚集在应该放置的地方。 因此,在一个完美的世界中,这就是最终的结果。
* 最后,在一个奇妙的完美世界中,您将看到一个示例,例如右下方向的飞镖盘,其中我们的偏见低,所有事物都集中在应该放置的地方,而方差很小,所有事物都紧密地聚集在应该放置的地方。 因此,在一个完美的世界中,这就是最终的结果。
实际上,您通常需要在偏差和方差之间进行选择。 归结为过度拟合对数据的拟合不足。 让我们看下面的例子:
......@@ -77,7 +77,7 @@
现在,这一切在实践中的工作方式是您将要尝试调整一个模型,并且该模型将具有不同的变体,您可能需要对其进行调整的不同参数,对吗?
例如,多项式拟合的多项式次数。 因此,我们的想法是尝试使用模型的不同值,不同的变体,使用 K 折交叉验证对它们进行度量,然后找到一个对测试数据集最小化误差的变量。 那是您在那里的最佳去处。 在实践中,您想使用 K 折交叉验证来衡量模型相对于测试数据集的准确性,并且只是不断完善该模型,继续尝试其中的不同值,继续尝试该模型的不同变体,甚至尝试不同的方法 完全建模,直到您找到使用 K 折交叉验证最大程度地减少错误的技术为止。
例如,多项式拟合的多项式次数。 因此,我们的想法是尝试使用模型的不同值,不同的变体,使用 K 折交叉验证对它们进行度量,然后找到一个对测试数据集最小化误差的变量。 那是您在那里的最佳去处。 在实践中,您想使用 K 折交叉验证来衡量模型相对于测试数据集的准确性,并且只是不断完善该模型,继续尝试其中的不同值,继续尝试该模型的不同变体,甚至尝试完全不同的建模方法,直到您找到使用 K 折交叉验证最大程度地减少错误的技术为止。
让我们深入一个例子,看看它是如何工作的。 我们将再次将其应用于鸢尾花数据集,重新访问 SVC,然后我们将进行 K 折交叉验证,看看它有多简单。 我们实际上使用一些真实的 Python 代码在此处进行 K 折交叉验证和训练/测试。 您会发现它实际上非常易于使用,这是一件好事,因为这是您应使用的一种技术,用于在监督学习中测量模型的准确性和有效性。
......@@ -504,7 +504,7 @@ for result in results[:20]:
![](img/a5aa652b-c518-403f-821e-576828f6d14a.png)
最后,我们得到了一些似乎有意义的结果! 因此,看起来像是,我小的 No-Hate News 网站上实际人类所要求的首页是首页,然后是`orlando-headlines`,接着是世界新闻,接着是漫画,接着是天气,以及有关 屏幕。 因此,这开始看起来更加合法。
最后,我们得到了一些似乎有意义的结果! 因此,看起来像是,我小的 No-Hate News 网站上实际人类所要求的首页是首页,然后是`orlando-headlines`,接着是世界新闻,接着是漫画,接着是天气,以及关于屏幕。 因此,这开始看起来更加合法。
如果您要进行更深入的研究,您会发现此分析仍然存在问题。 例如,那些提要页面仍然来自机器人,只是试图从我的网站获取 RSS 数据。 因此,这在看似简单的分析如何在获得有意义的结果之前需要进行大量的预处理和清理源数据方面是一个很好的寓言。
......
......@@ -14,7 +14,7 @@
在本节中,我将为您设置使用 Apache Spark 的设置,并向您展示一些实际使用 Apache Spark 解决与本书过去使用单计算机解决的相同问题的示例。 我们需要做的第一件事是在您的计算机上设置 Spark。 因此,在接下来的两节中,我们将引导您完成该操作。 这是非常简单的东西,但是有一些陷阱。 因此,不要只跳过这些部分; 要使 Spark 成功运行,需要特别注意一些事项,尤其是在 Windows 系统上。 让我们在系统上进行 Apache Spark 的设置,这样您就可以真正开始使用它了。
现在,我们将仅在您自己的桌面上运行它。 但是,我们将在本章中编写的相同程序可以在实际的 Hadoop 集群上运行。 因此,您可以采用我们在 Spark 独立模式下在桌面上本地编写和运行的这些脚本,并从实际 Hadoop 集群的主节点实际运行它们,然后使其扩展到 Hadoop 集群的全部功能 并以这种方式处理海量数据集。 即使我们打算将事情设置为在您自己的计算机上本地运行,但请记住,这些相同的概念也可以扩展到在群集上运行。
现在,我们将仅在您自己的桌面上运行它。 但是,我们将在本章中编写的相同程序可以在实际的 Hadoop 集群上运行。 因此,您可以采用我们在 Spark 独立模式下在桌面上本地编写和运行的这些脚本,并从实际 Hadoop 集群的主节点实际运行它们,然后使其扩展到 Hadoop 集群的全部功能并以这种方式处理海量数据集。 即使我们打算将事情设置为在您自己的计算机上本地运行,但请记住,这些相同的概念也可以扩展到在群集上运行。
# 在 Windows 上安装 Spark
......@@ -24,8 +24,8 @@
2. **安装 Python**:显然,您将需要 Python,但是如果您到此为止,则应该已经建立了 Python 环境,并希望使用 Enthought Canopy。 因此,我们可以跳过此步骤。
3. **安装适用于 Hadoop 的 Spark 的预构建版本**:幸运的是,Apache 网站提供了可用的 Spark 的预构建版本,这些预构建版本可以立即使用为最新 Hadoop 版本进行预编译的版本。 您无需构建任何东西,只需将其下载到计算机上,然后将其放置在正确的位置即可,大部分时间都很好。
4. **创建`conf/log4j.properties`文件**:我们需要处理一些配置事项。 我们要做的一件事就是调整警告级别,这样我们在工作时就不会收到很多警告垃圾邮件。 我们将逐步介绍如何做到这一点。 基本上,您需要重命名其中一个属性文件,然后在其中调整错误设置。
5. **添加一个`SPARK_HOME`环境变量**:接下来,我们需要设置一些环境变量,以确保您可以实际从任何路径运行 Spark。 我们将添加一个指向您安装 Spark 的位置的`SPARK_HOME`环境变量,然后将`%SPARK_HOME%\bin`添加到您的系统路径中,以便在您运行 Spark Submit,PySpark 或所需的任何 Spark 命令时,Windows 会知道 在哪里找到它。
6. **设置一个`HADOOP_HOME`变量**:在 Windows 上,我们还需要做一件事,我们还需要设置一个`HADOOP_HOME`变量,因为它将期望找到一点点 Hadoop,即使您 不要在独立系统上使用 Hadoop。
5. **添加一个`SPARK_HOME`环境变量**:接下来,我们需要设置一些环境变量,以确保您可以实际从任何路径运行 Spark。 我们将添加一个指向您安装 Spark 的位置的`SPARK_HOME`环境变量,然后将`%SPARK_HOME%\bin`添加到您的系统路径中,以便在您运行 Spark Submit,PySpark 或所需的任何 Spark 命令时,Windows 会知道在哪里找到它。
6. **设置一个`HADOOP_HOME`变量**:在 Windows 上,我们还需要做一件事,我们还需要设置一个`HADOOP_HOME`变量,因为它将期望找到一点点 Hadoop,即使您在独立系统上使用 Hadoop。
7. **安装`winutils.exe`**:最后,我们需要安装一个名为`winutils.exe`的文件。 本书的资源中有指向`winutils.exe`的链接,因此您可以在那里找到它。
如果您想详细了解这些步骤,可以参考后面的章节。
......@@ -86,7 +86,7 @@
![](img/a3e884d4-be31-4274-b858-9c7ed7e14ed6.jpg)
因此,让我们继续解压缩 TGZ 文件。 我将打开我的`Downloads`文件夹以找到我们下载的 Spark 存档,然后继续右键单击该存档并将其解压缩到我选择的文件夹中-我将放置它 现在在我的`Downloads`文件夹中。 再次,WinRAR 现在为我执行此操作:
因此,让我们继续解压缩 TGZ 文件。 我将打开我的`Downloads`文件夹以找到我们下载的 Spark 存档,然后继续右键单击该存档并将其解压缩到我选择的文件夹中-我现在将它放置在我的`Downloads`文件夹中。 再次,WinRAR 现在为我执行此操作:
![](img/edaa679b-44dd-4811-bbed-52b39f6488bc.png)
......@@ -247,7 +247,7 @@ Spark 是一项非常热门的技术,并且相对来说还很年轻,因此
* 无需编译,管理依赖项等。
* 较少的编码开销
* 您已经知道 Python
* 让我们专注于概念而非 新语言
* 让我们专注于概念而非新语言
|
......@@ -265,7 +265,7 @@ Spark 是一项非常热门的技术,并且相对来说还很年轻,因此
# Spark 和弹性分布式数据集(RDD)
让我们更深入地了解 Spark 的工作方式。 我们将讨论称为 RDD 的弹性分布式数据集。 这是您在 Spark 中编程时使用的核心,我们将提供一些代码片段来尝试使其成为现实。 我们将在这里为您提供 Apache Spark 速成班。 除了我们在接下来的几节中将要介绍的内容之外,它还涉及很多其他内容,但是我只是向您提供一些基本知识,您需要它们才能真正理解这些示例中发生的事情,并希望可以开始并 指向正确的方向。
让我们更深入地了解 Spark 的工作方式。 我们将讨论称为 RDD 的弹性分布式数据集。 这是您在 Spark 中编程时使用的核心,我们将提供一些代码片段来尝试使其成为现实。 我们将在这里为您提供 Apache Spark 速成班。 除了我们在接下来的几节中将要介绍的内容之外,它还涉及很多其他内容,但是我只是向您提供一些基本知识,您需要它们才能真正理解这些示例中发生的事情,并希望可以开始并指向正确的方向。
如上所述,Spark 的最基本部分称为弹性分布式数据集(RDD),它将成为您用来实际加载和转换并从正在尝试的数据中获取所需答案的对象 处理。 了解这是非常重要的事情。 RDD 中的最后一个字母代表数据集,而到了最后,一切都结束了。 它只是一堆信息行,可以包含几乎所有内容。 但是关键是 R 和第一个 D。
......@@ -381,7 +381,7 @@ rdd.map(lambda x: x*x)
那么,MLlib 可以做什么? 好吧,其中之一就是特征提取。
您可以按比例做的一件事是术语频率和逆文档频率,这对于例如创建搜索索引很有用。 实际上,本章后面将通过一个示例。 同样,关键是它可以使用海量数据集在整个集群中做到这一点,因此您可以潜在地为网络创建自己的搜索引擎。 它还提供基本的统计功能,卡方检验,Pearson 或 Spearman 相关性,以及一些更简单的内容,例如最小值,最大值,均值和方差。 这些本身并不十分令人兴奋,但令人兴奋的是,您实际上可以跨庞大的数据集计算方差,均值或其他任何东西或相关分数,并且实际上会将数据集分解为多个块 并在必要时在整个群集中运行。
您可以按比例做的一件事是术语频率和逆文档频率,这对于例如创建搜索索引很有用。 实际上,本章后面将通过一个示例。 同样,关键是它可以使用海量数据集在整个集群中做到这一点,因此您可以潜在地为网络创建自己的搜索引擎。 它还提供基本的统计功能,卡方检验,Pearson 或 Spearman 相关性,以及一些更简单的内容,例如最小值,最大值,均值和方差。 这些本身并不十分令人兴奋,但令人兴奋的是,您实际上可以跨庞大的数据集计算方差,均值或其他任何东西或相关分数,并且实际上会将数据集分解为多个块并在必要时在整个群集中运行。
因此,即使其中的一些操作不是很有趣,但有趣的是它可以运行的规模。 它还可以支持线性回归和逻辑回归等功能,因此,如果您需要将函数拟合到大量数据并将其用于预测,则也可以这样做。 它还支持支持向量机。 我们将在这里介绍一些更高级的算法,一些更高级的算法,并且它们也可以使用 Spark 的 MLlib 扩展到海量数据集。 MLlib 中内置了一个朴素的贝叶斯分类器,因此,还记得我们在本书前面构建的垃圾邮件分类器吗? 实际上,您可以使用 Spark 在整个电子邮件系统中执行此操作,然后将其扩展到所需的范围。
......@@ -393,7 +393,7 @@ rdd.map(lambda x: x*x)
# 向量数据类型
还记得本书前面提到的电影相似之处和电影推荐吗? 向量的一个示例可能是给定用户评分的所有电影的列表。 向量有两种类型:稀疏和密集。 让我们看一个例子。 世界上有很多电影,无论用户是否实际观看,密集的向量实际上代表每个电影的数据。 例如,假设我有一个用户观看过《玩具总动员》,显然我会存储他们对玩具总动员的评分,但是如果他们不看电影《星球大战》,我实际上会存储一个事实,那就是没有数字 为星球大战。 因此,我们最终以密集的向量为所有这些丢失的数据点占用了空间。 稀疏向量仅存储存在的数据,因此不会在丢失的数据上浪费任何内存空间,好的。 因此,它是内部表示向量的一种更紧凑的形式,但是显然在处理时会引入一些复杂性。 因此,如果您知道向量中会有很多丢失的数据,那么这是节省内存的好方法。
还记得本书前面提到的电影相似之处和电影推荐吗? 向量的一个示例可能是给定用户评分的所有电影的列表。 向量有两种类型:稀疏和密集。 让我们看一个例子。 世界上有很多电影,无论用户是否实际观看,密集的向量实际上代表每个电影的数据。 例如,假设我有一个用户观看过《玩具总动员》,显然我会存储他们对玩具总动员的评分,但是如果他们不看电影《星球大战》,我实际上会存储一个事实,那就是《星球大战》没有数字。 因此,我们最终以密集的向量为所有这些丢失的数据点占用了空间。 稀疏向量仅存储存在的数据,因此不会在丢失的数据上浪费任何内存空间,好的。 因此,它是内部表示向量的一种更紧凑的形式,但是显然在处理时会引入一些复杂性。 因此,如果您知道向量中会有很多丢失的数据,那么这是节省内存的好方法。
# LabeledPoint 数据类型
......
......@@ -1114,7 +1114,7 @@ In: section = soup.find_all(id='mw-normal-catlinks')[0]
# 使用 NumPy 进行数据处理
引入了基本的 Pandas 命令后,您可以在数据科学流水线的这一点上完全,小批量甚至单个数据行上载和预处理数据到内存中,您必须对其进行处理以准备合适的数据 监督和非监督学习程序的数据矩阵
引入了基本的 Pandas 命令后,您可以在数据科学流水线的这一点上完全,小批量甚至单个数据行上载和预处理数据到内存中,您必须处理监督和非监督学习程序的数据矩阵来准备合适的数据
作为最佳实践,我们建议您在数据仍然是异构的(数字和符号值的混合)工作阶段和将其转换为数据数字表的另一个阶段之间划分任务。 数据表或矩阵排列在代表示例的行中,而列则包含示例的特征观察值(即变量)。
......@@ -1301,7 +1301,7 @@ In: # Check if a NumPy array is of the desired numeric type
# 从列表到多维数组
如果将包含数字或文本对象的列表渲染为一维数组(例如,可以表示系数向量),则列表列表转换为二维数组,并且列表列表变为三维 一
如果将包含数字或文本对象的列表渲染为一维数组(例如,可以表示系数向量),则列表的列表转换为二维数组,并且列表的列表的列表变为三维
```py
In: import numpy as np
......@@ -1554,7 +1554,7 @@ In: import numpy as np
结果,该操作将按元素进行; 也就是说,数组的每个元素都可以通过标量值或另一个数组的相应元素来操作。
当对不同维数的数组进行操作时,如果其中一个维数为 1,则仍然可以进行元素操作,而不必重新构建数据。实际上,在这种情况下,大小为 1 的维数会一直扩展匹配相应数组的尺寸。 这种转换称为广播。
当对不同维数的数组进行操作时,如果其中一个维数为 1,则仍然可以进行元素操作,而不必重新构建数据。实际上,在这种情况下,大小为 1 的维数会一直扩展匹配相应数组的尺寸。 这种转换称为广播。
例如:
......@@ -1807,7 +1807,7 @@ In: bias = np.ones(10).reshape(10,1)
np.hstack((dataset,bias))
```
2. 无需更改`bias`的形状(因此,它可以是与数组行相同长度的任何数据序列),您可以使用`column_stack()`函数将其作为序列添加,该函数可获得相同的结果,但数量较少 有关数据重塑的问题
2. 无需更改`bias`的形状(因此,它可以是与数组行相同长度的任何数据序列),您可以使用`column_stack()`函数将其作为序列添加,该函数可获得相同的结果,但数据重塑的问题数量较少
```py
In: bias = np.ones(10)
......@@ -1830,7 +1830,7 @@ In: np.dstack((dataset*1,dataset*2,dataset*3))
In: np.insert(dataset, 3, bias, axis=1)
```
您只需要定义要插入的数组(`dataset`),位置(索引`3`),要插入的序列(在本例中为数组`bias`)以及沿其插入的轴 您想要操作插入(轴`1`是垂直轴)。
您只需要定义要插入的数组(`dataset`),位置(索引`3`),要插入的序列(在本例中为数组`bias`)以及沿其插入的轴(轴`1`是垂直轴)。
自然地,您可以通过确保要插入的数组与操作插入的尺寸对齐来插入整个数组(而不仅仅是向量),例如偏移。 在此示例中,为了将相同的数组插入自身,我们必须将其作为插入的元素进行转置:
......@@ -1871,7 +1871,7 @@ You can find all of SciPy's documentation about sparse matrices at [https://docs
让我们开始创建一个稀疏矩阵:
1. 为了创建稀疏矩阵,您可以从 NumPy 数组生成它(仅通过将数组传递给 SciPy 的稀疏矩阵格式之一),或通过向 COO 提供包含行索引,列索引和数据值的三个向量 矩阵分别为
1. 为了创建稀疏矩阵,您可以从 NumPy 数组生成它(仅通过将数组传递给 SciPy 的稀疏矩阵格式之一),或通过向 COO 矩阵分别提供包含行索引,列索引和数据值的三个向量
```py
In: row_idx = np.array([0, 1, 3, 3, 4])
......@@ -1911,12 +1911,12 @@ In: print(sparse_coo) Out: (0, 1) 1.0
(1, 2) 1.0 (3, 2) 2.0 (3, 4) 1.0 (4, 2) 2.0
```
从输出表示中,我们可以得出一个稀疏坐标格式矩阵的工作原理是将打印值存储在三个单独的存储数组中:一个用于`x`坐标,一个用于`y`坐标,以及 一个值。 这意味着在插入信息时,COO 矩阵的确非常快(每个新元素是每个存储阵列中的新行),但是处理起来缓慢,因为它无法立即找出行或列中的值以进行扫描 数组
从输出表示中,我们可以得出一个稀疏坐标格式矩阵的工作原理是将打印值存储在三个单独的存储数组中:一个用于`x`坐标,一个用于`y`坐标,以及一个用于值。 这意味着在插入信息时,COO 矩阵的确非常快(每个新元素是每个存储阵列中的新行),但是处理起来缓慢,因为它无法通过扫描数组立即找出行或列中的值
对于键字典(DOK)和列表的列表(LIL)也是如此。 第一个使用坐标字典操作(因此它可以快速检索单个元素),第二个使用两个列表,两个列表被排列来代表行,包含该行中的非零坐标以及其他值(很容易 通过添加更多行进行扩展)。
对于键字典(DOK)和列表的列表(LIL)也是如此。 第一个使用坐标字典操作(因此它可以快速检索单个元素),第二个使用两个列表,两个列表被排列来代表行,包含该行中的非零坐标以及其他值(很容易通过添加更多行进行扩展)。
COO 矩阵的另一个优点是,它们可以立即转换为专门用于在行或列级别有效工作的其他类型的矩阵:CSR 和 CSC 矩阵。
**压缩的稀疏行****CSR**)和**压缩的稀疏列****CSC**)是创建稀疏矩阵后最常用的格式 他们。 他们使用的索引系统更支持对 CSR 的行和对 CSC 的列进行计算。 但是,这使得编辑的计算量很大(因此,创建它们后更改它们并不方便)。
**压缩的稀疏行****CSR**)和**压缩的稀疏列****CSC**)是创建稀疏矩阵后用于操作它们的最常用的格式。 他们使用的索引系统更支持对 CSR 的行和对 CSC 的列进行计算。 但是,这使得编辑的计算量很大(因此,创建它们后更改它们并不方便)。
CSR 和 CSC 的性能实际上取决于所使用的算法及其优化参数的方式。 您必须实际对算法进行试验,以找出效果最佳的算法。
......
此差异已折叠。
......@@ -57,7 +57,7 @@
# 使用 CNN 对图像进行分类
现在让我们将深度神经网络应用于图像分类问题。 在这里,我们将尝试根据其图像预测交通标志。 对于此任务,我们将使用 **CNN****卷积神经网络**),该技术能够利用图像中附近像素之间的空间相关性,这是目前的水平 在解决此类问题时进行深度学习
现在让我们将深度神经网络应用于图像分类问题。 在这里,我们将尝试根据其图像预测交通标志。 对于此任务,我们将使用 **CNN****卷积神经网络**),该技术能够利用图像中附近像素之间的空间相关性,这是目前在解决此类问题时的深度学习水平
[数据集可在此处找到](http://benchmark.ini.rub.de/?section=gtsrb&subsection=dataset)。 我们要感谢团队免费发布了数据集,并参考了涉及该数据集的出版物:
......
......@@ -433,7 +433,7 @@ Out: {'chars': 5535014, 'words': 959893, 'lines': 149689}
5. 我们翻转键和值并创建一个新的 RDD。 这是一个地图操作。
6. 我们将 RDD 降序排列,然后提取(获取)第一个元素。 这是一项操作,可以通过`takeOrdered`方法执行一次操作。
我们实际上可以进一步改进该解决方案,将第二步和第三步合并在一起(`flatMap`-为每个单词分配一个键-值对,其中键是小写单词,值是出现的次数),并且 第五步和第六步(将 RDD 中的第一个元素按值排序,即该对中的第二个元素):
我们实际上可以进一步改进该解决方案,将第二步和第三步合并在一起(`flatMap`-为每个单词分配一个键-值对,其中键是小写单词,值是出现的次数),以及第五步和第六步(将 RDD 中的第一个元素按值排序,即该对中的第二个元素):
```py
In: import re
......@@ -723,7 +723,7 @@ Out: +-------+------+-------+
In: df.na.drop(subset=["gender"]).show()
```
另外,如果要为每列设置默认值而不是删除行数据,则可以使用`fill`方法,传递由列名组成的字典(作为字典键)和默认值以替换丢失的数据 在该列中(作为字典中键的值)
另外,如果要为每列设置默认值而不是删除行数据,则可以使用`fill`方法,传递由列名组成的字典(作为字典键)和默认值(作为字典中键的值)以替换该列中丢失的数据
例如,如果要确保将变量平衡(缺少的地方)设置为`0`并将变量性别(缺少的地方)设置为`U`,则只需执行以下操作:
......@@ -1051,7 +1051,7 @@ Out: root
类似地,我们可以使用单热编码器生成数值观察矩阵。 对于单编码器,在`DataFrame`中将有多个输出列,每个分类特征的每个级别对应一个输出列。 为此,Spark 提供了`pyspark.ml.feature.OneHotEncoderEstimator`类。
从 Spark 2.3.1 开始,[Python 可用的功能操作包含在以下详尽列表中](https://spark.apache.org/docs/latest/ml-features.html)(所有这些 可以在`pyspark.ml.feature`包中找到)。 除了几个名称外,其他名称应直观易懂,这些内容将以内联或稍后的方式进行解释。
从 Spark 2.3.1 开始,[Python 可用的功能操作包含在以下详尽列表中](https://spark.apache.org/docs/latest/ml-features.html)(所有这些可以在`pyspark.ml.feature`包中找到)。 除了几个名称外,其他名称应直观易懂,这些内容将以内联或稍后的方式进行解释。
回到该示例,我们现在想将每个分类变量中的级别编码为离散数字。 正如我们所解释的,为此,我们将为每个变量使用`StringIndexer`对象。 此外,我们可以使用 ML 管道并将其设置为其阶段。
......
......@@ -166,7 +166,7 @@ else:
b_dict.get('a_key')
```
最后,您可以使用集合模块中的数据结构`defaultdict`,它将永远不会引发`KeyError`,因为它是由不带任何参数并为它可能想要的任何不存在的键提供默认值的函数实例化的 要求
最后,您可以使用集合模块中的数据结构`defaultdict`,它将永远不会引发`KeyError`,因为它是由不带任何参数,并为它可能想要的任何不存在的键提供默认值的函数实例化的
```py
from collections import defaultdict
......@@ -200,7 +200,7 @@ def sigmoid(x):
return 1.0
```
最后,您可以使用`lambda`函数来创建匿名函数。 将匿名函数视为简单函数,您可以在代码中的任何位置内联定义,而无需使用`verbose`构造函数(以`def`开头的函数)。 只需调用`lambda`,然后输入其输入参数即可; 然后,冒号将发信号通知要由`lambda`功能执行的命令的开始,这些命令必须在同一行上。 (没有`return`命令!这些命令将从`lambda`函数返回。)您可以将`lambda`函数用作另一个函数的参数,如先前在`defaultdict`中看到的那样,也可以使用它 为了在一行中表达一个功能。 在我们的示例中就是这种情况,我们通过返回`lambda`函数并结合第一个参数来定义函数:
最后,您可以使用`lambda`函数来创建匿名函数。 将匿名函数视为简单函数,您可以在代码中的任何位置内联定义,而无需使用`verbose`构造函数(以`def`开头的函数)。 只需调用`lambda`,然后输入其输入参数即可; 然后,冒号将发信号通知要由`lambda`功能执行的命令的开始,这些命令必须在同一行上。 (没有`return`命令!这些命令将从`lambda`函数返回。)您可以将`lambda`函数用作另一个函数的参数,如先前在`defaultdict`中看到的那样,也可以使用它在一行中表达一个功能。 在我们的示例中就是这种情况,我们通过返回`lambda`函数并结合第一个参数来定义函数:
```py
def sum_a_const(c):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册