提交 7035ab9a 编写于 作者: W wizardforcel

2021-03-12 17:56:50

上级 e0e44c0a
......@@ -228,7 +228,7 @@
总结本节,我们将准备简单表以训练机器学习算法。 不用担心,我们实际上不会尝试在如此小的数据集上训练任何模型! 我们通过编码分类数据的类标签开始此过程。
12. 在对标签进行编码之前,请运行“建筑训练数据集”部分中的第一个单元格,以添加另一列代表平均产品评分的数据:
12. 在对标签进行编码之前,请运行“构建训练数据集”部分中的第一个单元格,以添加另一列代表平均产品评分的数据:
![Explore data preprocessing tools and methods](img/image2_16.jpg)
......@@ -1012,7 +1012,7 @@ K 折交叉验证算法如下:
对于较小的最大深度,我们看到该模型无法拟合数据。 通过使决策树更深,并在数据中编码更复杂的模式,总精度会急剧增加。 随着最大深度的进一步增加和的准确性接近 100%,我们发现该模型过拟合了数据,导致训练和验证的准确性不断提高。 基于此图,让我们为模型选择`6`的`max_depth`。
我们确实应该对`n_estimators`做同样的事情,但是出于节省时间的精神,我们将跳过它。 欢迎您自己绘制。 您应该在训练和验证集之间找到适用于各种值的协议。 通常,最好在“随机森林”中使用更多的决策树估计器,但这是以增加训练时间为代价的。 我们将使用 200 个估算器来训练我们的模型。
我们确实应该对`n_estimators`做同样的事情,但是出于节省时间的精神,我们将跳过它。 欢迎您自己绘制。 您应该在训练和验证集之间找到适用于各种值的协议。 通常,最好在“随机森林”中使用更多的决策树估计器,但这是以增加训练时间为代价的。 我们将使用 200 个估算器来训练我们的模型。
5. 使用`cross_val_class_score`(我们之前创建的按类进行 K 折交叉验证)来测试所选模型,即`max_depth = 6``n_estimators = 200`的随机森林:
......
......@@ -99,7 +99,7 @@
![](img/54ec0bbe-fb6c-447a-a671-b7ed06498363.png)
正如您在此处看到的那样,笔记本的结构方式使我可以在实际代码本身中散布有关您在此处看到的内容的小注释和评论,并且可以在 Web 浏览器中实际运行此代码! 因此,对于我来说,这是一种非常方便的格式,可以为您提供一些参考,您可以在以后的生活中使用它来提醒自己,我们将要讨论这些算法的工作原理,并实际对其进行实验和自己玩转它们。
正如您在此处看到的那样,笔记本的结构方式使我可以在实际代码本身中散布有关您在此处看到的内容的注释和提示,并且可以在 Web 浏览器中实际运行此代码! 因此,对于我来说,这是一种非常方便的格式,可以为您提供一些参考,您可以在以后的生活中使用它来提醒自己,我们将要讨论这些算法的工作原理,并实际对其进行实验和自己玩转它们。
IPython/Jupyter 笔记本文件的工作方式是,它们实际上是从您的浏览器内部运行的,就像网页一样,但是它们受到您安装的 Python 引擎的支持。 因此,您应该看到的屏幕类似于上一个屏幕快照中显示的屏幕。
......
......@@ -510,7 +510,7 @@ incomes.var()
我想让您潜入这里并真正玩转它,使其真实,因此在生成正常数据时尝试不同的参数。 记住,这是对数据分布形状的度量,因此,如果我更改该中心点会怎样? 有关系吗? 它实际上会影响形状吗? 您为什么不尝试一下并找出答案?
尝试弄乱我们指定的实际标准差,以了解对图形形状的影响。 也许尝试使用 30 的标准差,就可以知道它实际如何影响事物。 让我们将其变得更加生动,例如 50。只要玩一下 50。您将看到图形开始变得有点胖。 尝试不同的价值观,只需要了解这些价值观的运作方式即可。 这是真正直观地了解标准差和方差的唯一方法。 来看看一些不同的例子,看看它的效果。
尝试弄乱我们指定的实际标准差,以了解对图形形状的影响。 也许尝试使用 30 的标准差,就可以知道它实际如何影响事物。 让我们将其变得更加生动,例如 50。只要玩一下 50。您将看到图形开始变得有点胖。 尝试不同的值,只需要了解这些值的运作方式即可。 这是真正直观地了解标准差和方差的唯一方法。 来看看一些不同的例子,看看它的效果。
这就是实践中的标准差和方差。 您在那里接触了其中的一些东西,我希望您能花一点时间来熟悉它。 这些是非常重要的概念,我们将在整本书中谈论很多标准差,而且毫无疑问,在您从事数据科学的整个职业中,因此请确保掌握这一点。 让我们继续。
......
......@@ -271,7 +271,7 @@ p4 = np.poly1d(np.polyfit(x, y, 3))
让我们谈谈多元回归,它有点复杂。 多元回归的想法是这样的:如果有多个因素影响您要预测的事物怎么办?
在前面的示例中,我们研究了线性回归。 例如,我们谈到了根据体重来预测人们的身高。 我们认为重量是影响身高的唯一因素,但也许还有其他因素。 我们还研究了页面速度对购买金额的影响。 也许影响购买量的不仅仅是页面速度,我们还想找到这些不同因素如何结合在一起来影响该值。 这就是多元回归的地方。
在前面的示例中,我们研究了线性回归。 例如,我们谈到了根据体重来预测人们的身高。 我们认为重量是影响身高的唯一因素,但也许还有其他因素。 我们还研究了页面速度对购买金额的影响。 也许影响购买量的不仅仅是页面速度,我们还想找到这些不同因素如何结合在一起来影响该值。 这就是多元回归的地方。
我们现在来看的示例如下。 假设您正在尝试预测汽车的销售价格。 它可能基于该车的许多不同功能,例如车身样式,品牌,行驶里程; 谁知道,甚至关于轮胎的质量。 在预测汽车价格时,其中一些功能将比其他功能更重要,但您希望同时考虑所有这些功能。
......
......@@ -251,7 +251,7 @@ R 平方值原来是`0.6`,这并不奇怪,因为我们在训练数据上对
但是,英语中的所有其他单词呢? 因此,我们的垃圾邮件分类程序不仅仅应了解“免费”一词,还应了解更多。 理想情况下,它应该自动选择邮件中的每个单词,并弄清楚这对特定电子邮件是垃圾邮件的可能性有多大贡献。 因此,我们可以做的是在训练过程中遇到的每个单词上训练模型,抛出诸如`a``the``and`之类的东西以及诸如此类的无意义的单词。 然后,当我们浏览新电子邮件中的所有单词时,我们可以将每个单词被视为垃圾邮件的概率相乘,从而获得该电子邮件为垃圾邮件的总体概率。
现在有一个原因叫朴素贝叶斯。 天真是因为我们假设单词本身之间没有任何关系。 我们只是在消息中单独查看每个单词,然后基本上将每个单词对垃圾邮件的贡献的所有概率结合起来。 我们不是在看单词之间的关系。 因此,更好的垃圾邮件分类器可以做到这一点,但显然要困难得多。
现在有一个原因叫朴素贝叶斯。 朴素是因为我们假设单词本身之间没有任何关系。 我们只是在消息中单独查看每个单词,然后基本上将每个单词对垃圾邮件的贡献的所有概率结合起来。 我们不是在看单词之间的关系。 因此,更好的垃圾邮件分类器可以做到这一点,但显然要困难得多。
因此,这听起来很麻烦。 但是总体想法并不难,Python 中的 Scikit-learn 使它实际上很容易实现。 它提供了一个称为`CountVectorizer`的功能,使将电子邮件实际拆分到其所有组成词并分别处理这些词变得非常简单。 然后它具有`MultinomialNB`功能,其中 NB 代表朴素贝叶斯,它将为我们完成朴素贝叶斯的所有繁重工作。
......@@ -484,7 +484,7 @@ plt.show()
您需要做的就是从 Scikit-learn 的`cluster`包中导入`KMeans`。 我们还将导入`matplotlib`,以便我们可以可视化事物,还可以导入`scale`,以便我们了解其工作原理。
因此,我们使用`createClusteredData()`函数说出 5 个簇附近的 100 个随机人。 因此,对于我正在创建的数据,有 5 个自然簇。 然后,我们创建一个模型,即 K 均值模型,其 k 为 5,因此我们选择了 5 个聚类,因为我们知道这是正确的答案。 但是同样,在无监督学习中,您不一定知道`k`的真正值是什么。 您需要自己迭代并收敛。 然后,我们使用已有的数据,使用我的 K 均值`model`调用`model.fit`
因此,我们使用`createClusteredData()`函数说出 5 个簇附近的 100 个随机人。 因此,对于我正在创建的数据,有 5 个自然簇。 然后,我们创建一个模型,即 K 均值模型,其 k 为 5,因此我们选择了 5 个聚类,因为我们知道这是正确的答案。 但是同样,在无监督学习中,您不一定知道`k`的真正值是什么。 您需要自己迭代并收敛。 然后,我们使用已有的数据,使用我的 K 均值`model`调用`model.fit`
现在我提到的规模是对数据进行标准化。 使用 K 均值的重要一件事是,如果所有数据均被标准化,则其效果最佳。 这意味着一切都在相同的规模上。 所以我这里的问题是我的年龄从 20 岁到 70 岁不等,但是我的收入一直到 20 万。 因此,这些值并不是真正可比的。 收入远大于年龄值。 `Scale`将获取所有数据并将其按比例缩放到一致的比例,这样我就可以将这些东西像苹果与苹果进行实际比较,这将对您的 K 均值结果大有帮助。
......
......@@ -493,7 +493,7 @@ filteredSims.head(10)
好的,这些推荐结果还有很多改进的余地。 关于如何根据您对该项目的评价,或者您希望为对两部给定电影的评价的最低人数选择一个阈值,我们做出了很多决定。 因此,您可以调整很多事情,可以尝试许多不同的算法,并且尝试从系统中提出更好的电影推荐可以带来很多乐趣。 因此,如果您感到满意,我正在挑战您去做!
以下是一些有关如何实际尝试改善本章结果的想法。 首先,您可以继续播放`ItembasedCF.ipynb`文件并进行修改。 因此,例如,我们看到相关方法实际上具有一些用于相关性计算的参数,我们在示例中使用了 Pearson,但是您还可以查找并尝试其他参数,看看它对结果有什么作用。 我们使用了最小周期值 100,也许这太高了,也许它太低了; 我们只是随意选择了它。 如果您使用该值怎么办? 例如,如果您降低该值,我希望您会看一些也许您从未听说过的新电影,但对于该人可能仍然是一个不错的推荐。 或者,如果您将其提高,您将看到,除了大片之外,您一无所知。
以下是一些有关如何实际尝试改善本章结果的想法。 首先,您可以继续播放`ItembasedCF.ipynb`文件并进行修改。 因此,例如,我们看到相关方法实际上具有一些用于相关性计算的参数,我们在示例中使用了 Pearson,但是您还可以查找并尝试其他参数,看看它对结果有什么作用。 我们使用了最小周期值 100,也许这太高了,也许它太低了; 我们只是随意选择了它。 如果您使用该值怎么办? 例如,如果您降低该值,我希望您会看一些也许您从未听说过的新电影,但对于该人可能仍然是一个不错的推荐。 或者,如果您将其提高,您将看到,除了大片之外,您一无所知。
有时,您必须考虑要从推荐系统中得到的结果。 在向人们展示他们听过的电影和他们从未听过的电影之间有一个很好的平衡吗? 对于发现这些新电影而言,与通过观看很多他们听说过的电影对推荐系统产生信心相比,对他们来说有多重要? 再说一遍,这是一种艺术。
......
......@@ -2,7 +2,7 @@
在本章中,我们将讨论更多的数据挖掘和机器学习技术。 我们将讨论一种非常简单的技术,称为 **K 最近邻****KNN**)。 然后,我们将使用 KNN 来预测电影的收视率。 之后,我们将继续讨论降维和主成分分析。 我们还将看一下 PCA 的示例,在该示例中,我们将 4D 数据缩小为二维,同时仍保留其方差。
然后,我们将遍历数据仓库的概念,并查看较新的 ELT 流程相对于 ETL 流程的优势。 我们将学习强化学习的有趣概念,并了解 PacMan 游戏中智能 PacMan 代理背后使用的技术。 最后,我们将看到一些用于强化学习的奇特术语。
然后,我们将遍历数据仓库的概念,并查看较新的 ELT 流程相对于 ETL 流程的优势。 我们将学习强化学习的有趣概念,并了解 PacMan 游戏中智能 PacMan 智能体背后使用的技术。 最后,我们将看到一些用于强化学习的奇特术语。
我们将涵盖以下主题:
......@@ -33,7 +33,7 @@ KNN 听起来很花哨,但实际上它是其中最简单的技术之一! 假
这就是全部,就这么简单。 因此,这是一种非常简单的技术。 您要做的只是从散点图上选出`k`个最近的邻居,然后让他们全部对分类投票。 它确实属于监督学习,因为它使用一组已知点(即已知分类)的训练数据来告知新点的分类。
但是,让我们对其进行一些复杂的操作,并根据它们的元数据实际播放电影。 让我们看看是否可以仅根据这些电影的内在值,例如该电影的等级,其流派信息,来真正找出该电影的最近邻居:
但是,让我们对其进行一些复杂的操作,并根据它们的元数据实际播放电影。 让我们看看是否可以仅根据这些电影的内在值,例如该电影的等级,其流派信息,来真正找出该电影的最近邻居:
![](img/22a520fc-4ebf-43d3-9427-5974ced51f65.jpg)
......@@ -421,31 +421,31 @@ ETL 是一种古老的做法,您需要先脱机转换一堆数据,然后再
# 强化学习
下一个主题是一个有趣的主题:强化学习。 我们可以通过吃豆人的例子来实际使用这个想法。 实际上,我们可以创建一个小小的智能 PacMan 代理,该代理可以很好地玩 PacMan 游戏。 您会惊讶于在这种智能吃豆人背后建立智能的技术多么简单。 让我们来看看!
下一个主题是一个有趣的主题:强化学习。 我们可以通过吃豆人的例子来实际使用这个想法。 实际上,我们可以创建一个小小的智能 PacMan 智能体,该智能体可以很好地玩 PacMan 游戏。 您会惊讶于在这种智能吃豆人背后建立智能的技术多么简单。 让我们来看看!
因此,强化学习背后的想法是,您有某种媒介,在本例中为“吃豆人”,它探索某种空间,而在我们的示例中,空间将是“吃豆人”所在的迷宫。 ,它将了解不同条件下不同状态变化的值。
因此,强化学习背后的想法是,您有某种媒介,在本例中为“吃豆人”,它探索某种空间,而在我们的示例中,空间将是“吃豆人”所在的迷宫。 ,它将了解不同条件下不同状态变化的值。
![](img/d79e079f-b596-42a2-ad11-58c39caf615f.png)
例如,在上图中,“吃豆人”的状态可能是由于它对南方有一个幽灵,对西方有一个墙以及对北方和东方具有空的空间而定义的, 吃豆人的当前状态。 可以采取的状态更改是沿给定方向移动。 然后,我可以学习朝某个方向前进的值。 因此,例如,如果我要向北迁移,则什么都不会发生,因此没有任何实际的回报。 但是,如果我向南移动,我会被幽灵摧毁,那将是一个负值。
例如,在上图中,“吃豆人”的状态可能是由于它对南方有一个幽灵,对西方有一个墙以及对北方和东方具有空的空间而定义的, 吃豆人的当前状态。 可以采取的状态更改是沿给定方向移动。 然后,我可以学习朝某个方向前进的值。 因此,例如,如果我要向北迁移,则什么都不会发生,因此没有任何实际的回报。 但是,如果我向南移动,我会被幽灵摧毁,那将是一个负值。
在探索整个空间的过程中,我可以建立一套吃豆人可能处于的所有可能状态,以及在每个状态中沿给定方向移动所关联的值,这就是强化学习。 在探索整个空间时,它会针对给定状态优化这些奖励值,然后可以使用这些存储的奖励值来选择最佳决策,以在给定当前条件的情况下做出决定。 除《吃豆人》外,还有一个名为《猫与老鼠》的游戏,该游戏是一个常用的示例,稍后我们将进行介绍。
这种技术的好处是,一旦您探究了代理可能处于的所有可能状态集,那么当您运行此代理的不同迭代时,您很快就会获得非常好的性能。 因此,您知道,您可以基本地做出智能的吃豆人,通过运行强化学习,并让其探索可以在不同状态下做出的不同决策的值,然后存储该信息,从而给定它在未知条件下看到的未来状态时,快速做出正确的决策。
这种技术的好处是,一旦您探究了智能体可能处于的所有可能状态集,那么当您运行此智能体的不同迭代时,您很快就会获得非常好的性能。 因此,您知道,您可以基本地做出智能的吃豆人,通过运行强化学习,并让其探索可以在不同状态下做出的不同决策的值,然后存储该信息,从而给定它在未知条件下看到的未来状态时,快速做出正确的决策。
# Q 学习
因此,强化学习的一个非常具体的实现称为 Q 学习,这使我们刚才讨论的内容正式化了:
* 同样,从代理的一组环境状态开始(我旁边有鬼吗?在我面前有药丸吗?类似的事情。),我们将其称为`s`
* 同样,从智能体的一组环境状态开始(我旁边有鬼吗?在我面前有药丸吗?类似的事情。),我们将其称为`s`
* 在这些状态下,我可以执行一组可能的操作,我们将其称为`a`。 对于吃豆人,这些可能的动作是向上,向下,向左或向右移动。
* 然后我们为每个状态/动作对都有一个值,我们将其称为`Q`; 这就是为什么我们将其称为 Q 学习。 因此,对于每个状态,围绕吃豆人的一组给定条件,给定动作将具有值`Q`。 因此,例如,向上移动可能具有给定的值`Q`,而向下移动可能具有负的`Q`值,例如,这意味着遇到重影。
因此,对于吃豆人可能处于的每种可能状态,我们从`Q`值开始为 0。而且,当吃豆人探索迷宫时,随着吃豆人的坏事发生,我们减少了 “吃豆人”当时所处状态的`Q`值。 因此,如果吃豆人最终被鬼魂吞噬,我们将惩罚他在当前状态下所做的一切。 吃豆人吃东西或吃鬼东西时,吃豆人都会遇到好事,我们会为该动作增加`Q`值,以了解他所处的状态。然后, 可以做的就是使用这些`Q`值来告知 PacMan 未来的选择,并建立一种性能最佳的智能代理,从而制作出完美的 PacMan。 从上面看到的相同的 PacMan 图像,我们可以进一步定义 PacMan 的当前状态,方法是定义他在西边有一堵墙,在北边和东边有空白空间,在南边有个幽灵。
因此,对于吃豆人可能处于的每种可能状态,我们从`Q`值开始为 0。而且,当吃豆人探索迷宫时,随着吃豆人的坏事发生,我们减少了 “吃豆人”当时所处状态的`Q`值。 因此,如果吃豆人最终被鬼魂吞噬,我们将惩罚他在当前状态下所做的一切。 吃豆人吃东西或吃鬼东西时,吃豆人都会遇到好事,我们会为该动作增加`Q`值,以了解他所处的状态。然后, 可以做的就是使用这些`Q`值来告知 PacMan 未来的选择,并建立一种性能最佳的智能智能体,从而制作出完美的 PacMan。 从上面看到的相同的 PacMan 图像,我们可以进一步定义 PacMan 的当前状态,方法是定义他在西边有一堵墙,在北边和东边有空白空间,在南边有个幽灵。
我们可以看看他可以采取的行动:他实际上根本不能向左移动,但是他可以向上,向下或向右移动,我们可以为所有这些动作分配一个值。 向上或向右走,实际上什么也没有发生,没有药丸或点药可消耗。 但是,如果他走了,那绝对是一个负值。 可以说,对于吃豆人所处的当前状况所给出的状态,下移将是一个非常糟糕的选择。 为此,应该有一个负的`Q`值。 根本无法向左移动。 向上或向右移动或保持中性,对于给定状态的那些动作选择,`Q`值将保持为 0。
现在,您还可以稍作展望,以打造一个更加智能的代理。 所以,我实际上距离这里获得药丸只有两步之遥。 因此,当吃豆人探索这个状态时,如果我想在下一个状态下吃该药的情况,我实际上可以将其计入上一个状态的`Q`值中。 如果您只是某种折扣因素,则根据您的时间间隔,距离的步数,您可以将所有因素综合考虑在内。 因此,这实际上是在系统中构建一点内存的一种方式。 您可以在计算`Q`时使用折扣因子“向前看”多个步骤(此处`s`是先前状态, `s'`是当前状态):
现在,您还可以稍作展望,以打造一个更加智能的智能体。 所以,我实际上距离这里获得药丸只有两步之遥。 因此,当吃豆人探索这个状态时,如果我想在下一个状态下吃该药的情况,我实际上可以将其计入上一个状态的`Q`值中。 如果您只是某种折扣因素,则根据您的时间间隔,距离的步数,您可以将所有因素综合考虑在内。 因此,这实际上是在系统中构建一点内存的一种方式。 您可以在计算`Q`时使用折扣因子“向前看”多个步骤(此处`s`是先前状态, `s'`是当前状态):
```py
Q(s,a) += discount * (reward(s,a) + max(Q(s')) - Q(s,a))
......@@ -465,7 +465,7 @@ Q(s,a) += discount * (reward(s,a) + max(Q(s')) - Q(s,a))
# 更好的方法
因此,一种更好的方法是在我探索时在我的动作中引入一些随机变化。 因此,我们称其为`ε`项。 因此,假设我们有一些值,我掷骰子,我有一个随机数。 如果最终小于该`ε`值,则我实际上不遵循最高的`Q`值; 我没有做有意义的事情,我只是随意走一条路尝试一下,看看会发生什么。 实际上,这使我能够在探索阶段更有效地探索更广泛的可能性,更广泛的行动,从而更有效地应对更广泛的国家。
因此,一种更好的方法是在我探索时在我的动作中引入一些随机变化。 因此,我们称其为`ε`项。 因此,假设我们有一些值,我掷骰子,我有一个随机数。 如果最终小于该`ε`值,则我实际上不遵循最高的`Q`值; 我没有做有意义的事情,我只是随意走一条路尝试一下,看看会发生什么。 实际上,这使我能够在探索阶段更有效地探索更广泛的可能性,更广泛的行动,从而更有效地应对更广泛的国家。
因此,我们所做的工作可以用非常花哨的数学术语来描述,但是从概念上讲,这很简单。
......@@ -507,7 +507,7 @@ Q(s,a) += discount * (reward(s,a) + max(Q(s')) - Q(s,a))
我们有一个复杂的探索阶段,该阶段寻找给定状态下与每个动作相关的最佳奖励。 一旦有了针对给定状态要采取的正确行动的表格,我们就可以非常快速地使用它来使“吃豆人”以最佳方式移动,这是他之前从未见过的全新迷宫。 因此,强化学习也是动态规划的一种形式。 哇!
概括地说,您可以通过半随机地探索给定不同条件的运动的不同选择来制作智能的 PacMan 代理,其中,这些选择是动作,而这些条件是状态。 我们会随时跟踪与每个动作或状态相关的奖励或惩罚,实际上,我们可以打折,如果您想使其更好的话,可以分多个步骤进行。
概括地说,您可以通过半随机地探索给定不同条件的运动的不同选择来制作智能的 PacMan 智能体,其中,这些选择是动作,而这些条件是状态。 我们会随时跟踪与每个动作或状态相关的奖励或惩罚,实际上,我们可以打折,如果您想使其更好的话,可以分多个步骤进行。
然后,我们存储最终与每个状态相关联的`Q`值,并可以使用它来告知其将来的选择。 因此,我们可以进入一个全新的迷宫,并拥有一个真正聪明的吃豆人,可以独自避开鬼魂并有效地将它们吃掉。 这是一个非常简单的概念,但是功能非常强大。 您也可以说您了解很多花哨的术语,因为它们全称为同一件事。 Q 学习,强化学习,马尔可夫决策过程,动态规划:所有这些都捆绑在同一个概念中。
......@@ -515,7 +515,7 @@ Q(s,a) += discount * (reward(s,a) + max(Q(s')) - Q(s,a))
有一个 Python Markov 决策过程工具箱,将其包装在我们所讨论的所有术语中。 您可以查看一个示例,一个类似于猫和老鼠游戏的示例。 而且,实际上还有一个“吃豆人”示例,您也可以在网上查看,该示例与我们所讨论的内容更直接相关。 随意探索这些链接,并进一步了解它。
因此,这就是强化学习。 更一般而言,这是一种用于构建代理的有用技术,该代理可以通过可能的不同状态集进行导航,该状态集可能具有与每个状态相关联的一组动作。 因此,我们主要是在迷宫游戏中谈论它。 但是,您可以进行更广泛的思考,并且知道在遇到某种情况时,需要根据给定的一组当前条件和可以采取的行动来预测某项行为。 强化学习和 Q 学习可能是一种方法。 所以记住这一点!
因此,这就是强化学习。 更一般而言,这是一种用于构建智能体的有用技术,该智能体可以通过可能的不同状态集进行导航,该状态集可能具有与每个状态相关联的一组动作。 因此,我们主要是在迷宫游戏中谈论它。 但是,您可以进行更广泛的思考,并且知道在遇到某种情况时,需要根据给定的一组当前条件和可以采取的行动来预测某项行为。 强化学习和 Q 学习可能是一种方法。 所以记住这一点!
# 总结
......
......@@ -21,7 +21,7 @@
方差只是衡量预测的分散程度和分散程度的指标。 因此,如果您的预测无处不在,那么差异就很大。 但是,如果他们非常关注正确的值,或者在高偏差的情况下甚至不正确的值,那么您的差异就很小。
让我们看一些例子。 让我们想象一下,以下飞镖代表了我们所做的一系列预测,而我们试图预测的实际值位于靶心的中心:
让我们看一些例子。 让我们想象一下,以下飞镖代表了我们所做的一系列预测,而我们试图预测的实际值位于靶心的中心:
![](img/fae2cf23-43e6-4526-b005-39df58463d04.png)
......@@ -48,7 +48,7 @@
决策树是另一个例子。 我们知道,单个决策树很容易过拟合,因此可能暗示它具有很大的方差。 但是,随机森林寻求权衡一些方差以减少偏差,并且它通过拥有多个随机变异的树并将其所有解决方案求平均来做到这一点。 就像当我们通过增加 KNN 中的 K 来对事物进行平均时:我们可以通过使用多个使用相似森林的随机森林决策树来平均决策树的结果。
这是偏差方差的权衡。 您知道必须在价值的整体准确性,价值的分散程度或紧密程度之间做出决定。 那就是偏差-方差的权衡,它们都会导致整体误差,这是您真正关心的要最小化的事情。 因此,请记住这些条款!
这是偏差方差的权衡。 您知道必须在值的整体准确性,值的分散程度或紧密程度之间做出决定。 那就是偏差-方差的权衡,它们都会导致整体误差,这是您真正关心的要最小化的事情。 因此,请记住这些条款!
# 用于避免过拟合的 K 折交叉验证
......
......@@ -82,7 +82,7 @@
确保您获得了预构建的版本,然后选择“直接下载”选项,以便所有这些默认设置都可以正常使用。 继续并单击说明 4 旁边的链接以下载该软件包。
现在,它下载了您可能不熟悉的 **TGZ**(GZip 中的 Tar)。 老实说,Windows 是 Spark 的事后想法,因为在 Windows 上,您将没有内置的实用程序来实际解压缩 TGZ 文件。 这意味着,如果您还没有一个,则可能需要安装它。 我使用的一个称为 WinRAR,您可以从[这个页面](http://www.rarlab.com)中进行选择。 如果需要,请转到“下载”页面,然后下载 32 位或 64 位 WinRAR 的安装程序,具体取决于您的操作系统。 正常安装 WinRAR,这将允许您在 Windows 上实际解压缩 TGZ 文件:
现在,它下载了您可能不熟悉的 **TGZ**(GZip 中的 Tar)。 老实说,Windows 是 Spark 的事后想法,因为在 Windows 上,您将没有内置的工具来实际解压缩 TGZ 文件。 这意味着,如果您还没有一个,则可能需要安装它。 我使用的一个称为 WinRAR,您可以从[这个页面](http://www.rarlab.com)中进行选择。 如果需要,请转到“下载”页面,然后下载 32 位或 64 位 WinRAR 的安装程序,具体取决于您的操作系统。 正常安装 WinRAR,这将允许您在 Windows 上实际解压缩 TGZ 文件:
![](img/a3e884d4-be31-4274-b858-9c7ed7e14ed6.jpg)
......
......@@ -53,7 +53,7 @@ A/B 测试会将人们分成看到橙色按钮的人们和看到蓝色按钮的
也许您真正想衡量的是利润,而这可能是一件非常棘手的事情,因为很多事情都会削减给定产品可能赚到的钱,而这些事情可能并不总是显而易见的。 再说一次,如果您有损失负责人,则此实验将抵消那些应有的损失。 也许您只是关心增加网站上的广告点击量,或订购数量以减少差异,也许人们对此表示满意。
最重要的是,您必须与正在测试的区域的企业所有者交谈,并弄清他们正在针对哪些领域进行优化。 他们在衡量什么? 他们的成功基于什么? 他们的关键绩效指标是什么?或者 NBA 想称其为什么? 并确保我们正在衡量对他们而言至关重要的事物。
最重要的是,您必须与正在测试的区域的企业所有者交谈,并弄清他们正在针对哪些领域进行优化。 他们在衡量什么? 他们的成功基于什么? 他们的关键表现指标是什么?或者 NBA 想称其为什么? 并确保我们正在衡量对他们而言至关重要的事物。
您也可以一次测量多个事物,而不必选择一个事物,实际上可以报告许多不同事物的影响:
......@@ -206,7 +206,7 @@ stats.ttest_ind(A, B)
![](img/f580eba5-7fdb-41e9-a9fd-303797a27454.jpg)
但是这些仍然是很高的值。 同样,这只是随机方差的影响,它可能会带来比您想象的更多的影响。 特别是在谈论订单金额的网站上。
但是这些仍然是很高的值。 同样,这只是随机方差的影响,它可能会带来比您想象的更多的影响。 特别是在谈论订单金额的网站上。
# 样本数量增加了七位数
......@@ -224,7 +224,7 @@ stats.ttest_ind(A, B)
![](img/7b3983dd-a665-431d-adee-6de6bb8b15ee.jpg)
那是做什么的? 好吧,现在,我们的 T 统计量回到了 1 以下,我们的值约为 35%。
那是做什么的? 好吧,现在,我们的 T 统计量回到了 1 以下,我们的值约为 35%。
随着样本数量的增加,我们会在任一方向上看到这种波动。 这意味着从 10,000 个样本增加到 100,000 个至 1,000,000 个样本并不会改变您的结果。 进行这样的实验是一种良好的直觉,可以使您感觉需要进行多长时间。 实际需要多少个样本才能得出明显的结果? 而且,如果您提前知道有关数据分布的信息,则可以实际运行这些模型。
......
......@@ -276,7 +276,7 @@ p 值是当假设被证明是正确的时,否定原假设的概率。 零假
```
现在,让我们获得值:
现在,让我们获得值:
```py
>>> prob = 1 - stats.norm.cdf(zscore)
......
......@@ -61,7 +61,7 @@
![Reinforcement learning](img/B03450_05_03.jpg)
主体采取的行动导致其从结果中学习,而不是被明确地教导,并且其选择的行动基于其过去的经验以及其做出的新鲜选择,这基本上意味着其正在通过试错来学习。 代理以数字奖励的形式接收增强信号,该信号对成功进行编码,并且代理试图教自己采取会随着时间的推移增加累积奖励的行动。
主体采取的行动导致其从结果中学习,而不是被明确地教导,并且其选择的行动基于其过去的经验以及其做出的新鲜选择,这基本上意味着其正在通过试错来学习。 智能体以数字奖励的形式接收增强信号,该信号对成功进行编码,并且智能体试图教自己采取会随着时间的推移增加累积奖励的行动。
强化学习在机器人技术中大量使用,而在数据科学中则很少使用。 以下是强化学习下的算法:
......@@ -163,7 +163,7 @@ y = 1.405405405 x + 57.87687688
# 朴素贝叶斯分类器
朴素贝叶斯分类器是基于贝叶斯定理的简单概率分类器。 所做的假设是,要素之间存在很强的相互依赖性,因此将其称为天真。 以下是贝叶斯定理:
朴素贝叶斯分类器是基于贝叶斯定理的简单概率分类器。 所做的假设是,要素之间存在很强的相互依赖性,因此将其称为朴素。 以下是贝叶斯定理:
![The naive Bayes classifier](img/B03450_05_09.jpg)
......
......@@ -885,7 +885,7 @@ In: print ("This is a test")
有关运行 IPython 内核时所有 Jupyter 功能的完整论述,请参阅以下 Packt Publishing 书籍:
* Cyrille Rossant 撰写的《IPython 交互式计算和可视化食谱》,Packt Publishing,2014 年 9 月 25 日
* Cyrille Rossant 撰写的《IPython 交互式计算和可视化秘籍》,Packt Publishing,2014 年 9 月 25 日
* 《学习用于交互式计算和数据可视化的 IPython》,Cyrille Rossant,Packt Publishing,2013 年 4 月 25 日
......
......@@ -156,7 +156,7 @@ In: from sklearn.preprocessing import StandardScaler
print ("MAE=", mean_squared_error(Y_test, Y_est)) Out: MAE= 0.402334179429
```
借助这一简单的步骤,我们将 MAE 降低了一半以上,现在的值约为`0.40`
借助这一简单的步骤,我们将 MAE 降低了一半以上,现在的值约为`0.40`
请注意,我们没有使用原始功能。 我们使用了它们的线性修改,这更适合使用 KNN 回归器进行学习。
......
......@@ -233,7 +233,7 @@ Out: 685 µs ± 9.86 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
![](img/0dae1c59-ccf3-43d0-8dca-beb2572b834e.png)
天真的假设是,当与每个类别相关时,每个功能都被认为有条件地独立于其他功能。 因此,概率可以简单地相乘。 公式如下:
朴素的假设是,当与每个类别相关时,每个功能都被认为有条件地独立于其他功能。 因此,概率可以简单地相乘。 公式如下:
![](img/2bf137b0-1347-423d-9fa2-8c22a27fa3ef.png)
......@@ -438,7 +438,7 @@ In: import numpy as np
在我们开始处理超参数(根据实现通常是不同的参数集)之前,在使用 SVM 算法时有两个方面需要澄清。
首先是关于 SVM 对不同规模和大量变量的敏感性。 与基于线性组合的其他学习算法类似,具有不同比例的变量会使该算法被具有较大范围或方差的特征所控制。 而且,极高或极低的数目可能在学习算法的优化过程中引起问题。 建议以有限的时间间隔缩放所有数据,例如`[0, +1]`,这是使用稀疏数组时的必要选择。 实际上,希望保留零个条目。 否则,数据将变得密集,从而消耗更多的内存。 您也可以将数据缩放到`[-1, +1]`间隔。 或者,您可以将它们标准化为零均值和单位方差。 您可以从预处理模块中使用`MinMaxScaler``StandardScaler`实用程序类,方法是先将它们拟合到训练数据上,然后转换训练和测试集。
首先是关于 SVM 对不同规模和大量变量的敏感性。 与基于线性组合的其他学习算法类似,具有不同比例的变量会使该算法被具有较大范围或方差的特征所控制。 而且,极高或极低的数目可能在学习算法的优化过程中引起问题。 建议以有限的时间间隔缩放所有数据,例如`[0, +1]`,这是使用稀疏数组时的必要选择。 实际上,希望保留零个条目。 否则,数据将变得密集,从而消耗更多的内存。 您也可以将数据缩放到`[-1, +1]`间隔。 或者,您可以将它们标准化为零均值和单位方差。 您可以从预处理模块中使用`MinMaxScaler``StandardScaler`工具类,方法是先将它们拟合到训练数据上,然后转换训练和测试集。
第二个方面是关于不平衡的阶级。 该算法倾向于偏爱频繁类。 除了重采样或下采样(将多数类减少为较小的相同数目)之外,一种解决方案是根据类的频率加权`C`惩罚参数(低值将对类进行更多的惩罚,高值将对类进行更多的惩罚) 。 对于不同的实现,有两种方法可以实现此目的。 首先,SVC 中有`class_weight`参数(可以将其设置为关键字`balanced`,或提供包含每个类的特定值的字典)。 然后,在`SVC``NuSVC``SVR``NuSVR``OneClassSVM``.fit()`方法中还有`sample_weight`参数(它需要一维数组作为输入,其中每个位置是指每个训练示例的权重)。
......@@ -730,7 +730,7 @@ XGBoost 算法在 [Kaggle](http://www.kaggle.com) 和 KDD-cup 2015 等数据科
从实际的角度来看,XGBoost 具有与 Scikit-learn 的 GBT 几乎相同的参数。 关键参数如下:
* `eta`:相当于 Scikit-learn 的 GTB 中的学习率。 它影响算法学习的速度,从而影响需要多少棵树。 较高的值有助于更好地融合学习过程,但代价是要花费更多的训练时间和更多的树木。
* `gamma`:这是树开发中的停止标准,因为它表示在树的叶节点上进行进一步分区所需的最小损失减少。 更高的值使学习更加保守。
* `gamma`:这是树开发中的停止标准,因为它表示在树的叶节点上进行进一步分区所需的最小损失减少。 更高的值使学习更加保守。
* `min_child_weight`:这些代表树的叶子节点上存在的最小权重(示例)。 较高的值可防止过拟合和树的复杂性。
* `max_depth`:树的最大深度。
* `subsample`:训练数据中示例的一部分,将在每次迭代中使用。
......@@ -1153,7 +1153,7 @@ In: from sklearn.naive_bayes import MultinomialNB
哈希技巧使用哈希函数和稀疏矩阵来节省时间,资源和麻烦。 哈希函数是以确定性的方式映射它们收到的任何输入的函数。 不管您给它们提供数字还是字符串,它们都将始终为您提供一定范围内的整数。 相反,稀疏矩阵是仅记录不为零的值的数组,因为其行和列的任何组合的默认值为零。 因此,哈希技巧限制了所有可能的输入。 以前是否未在相应的输入稀疏矩阵上看到某个范围或位置没有关系,该稀疏矩阵的值不为 0。
除了 Python 中的内置哈希函数外,[`hashlib`](https://docs.python.org/2/library/hashlib.html)。 有趣的是,Scikit-learn 在许多函数和方法中也大量使用了哈希函数,并且可以使用 [MurmurHash 32](https://github.com/aappleby/smhasher)[可以在针对开发人员的实用程序中找到它](http://scikit-learn.org/stable/developers/utilities.html); 只需将其导入并直接使用即可:
除了 Python 中的内置哈希函数外,[`hashlib`](https://docs.python.org/2/library/hashlib.html)。 有趣的是,Scikit-learn 在许多函数和方法中也大量使用了哈希函数,并且可以使用 [MurmurHash 32](https://github.com/aappleby/smhasher)[可以在针对开发人员的工具中找到它](http://scikit-learn.org/stable/developers/utilities.html); 只需将其导入并直接使用即可:
```py
In: from sklearn.utils import murmurhash3_32
......
......@@ -18,7 +18,7 @@
对于基本的可视化规则,您可以访问[这个页面](https://lifehacker.com/5909501/how-to-choose-the-best-chart-for-your-data)。 我们还推荐 Edward Tufte 教授有关分析设计和可视化的书。
取而代之的是,我们可以提供一系列快速,重要的基本食谱,使您可以开始使用 Python 进行可视化,并且可以在需要创建特定图形图表时随时参考。 将所有代码片段都视为可视化构建块; 您只需使用我们将为您提供的大量参数,就可以为它们安排不同的配置和功能。
取而代之的是,我们可以提供一系列快速,重要的基本秘籍,使您可以开始使用 Python 进行可视化,并且可以在需要创建特定图形图表时随时参考。 将所有代码片段都视为可视化构建块; 您只需使用我们将为您提供的大量参数,就可以为它们安排不同的配置和功能。
`matplotlib`是用于绘制图形的 Python 软件包。 它是由约翰·亨特(John Hunter)创建的,旨在解决 Python 与具有图形功能(例如 MATLAB 或 gnuplot)的外部软件之间缺乏集成的问题。 `matplotlib`在很大程度上受到 MATLAB 的操作方式和功能的影响,其语法非常相似。 特别是,与 MATLAB 完全兼容的`matplotlib.pyplot`模块将成为我们介绍所有必要的图形工具以表示数据和分析的基本介绍的核心。 MATLAB 确实是数据分析和科学界可视化的标准,因为它在探索性分析方面具有公认的功能,这主要是因为它具有平滑且易于使用的绘图功能。
......@@ -753,7 +753,7 @@ In: with sns.axes_style("whitegrid"):
至于交叉验证,我们可以注意到两种行为:
* 高偏见的假设往往始于低绩效,但增长很快,直到达到与训练几乎相同的绩效。 然后,它停止增长。
* 高偏见的假设往往始于低表现,但增长很快,直到达到与训练几乎相同的表现。 然后,它停止增长。
* 高方差的假设往往始于非常低的性能。 然后,随着更多案例的推广,它稳步但缓慢地改善了。 它几乎不读取样本中的演奏,并且它们之间始终存在差距。
能够估计您的机器学习解决方案表现为高偏差还是高方差假设,将立即帮助您决定如何改善数据科学项目。 尽管有了`learning_curve`类,但 Scikit-learn 使得计算可视化图形所需的所有统计信息更为简单,尽管正确地可视化它们还需要一些进一步的计算和命令:
......@@ -916,7 +916,7 @@ In: from sklearn.ensemble.partial_dependence import
在您提供分析计划后,`plot_partial_dependence`类将自动为您提供可视化效果。 您需要提供要单独绘制的特征的索引列表,以及要在热图上绘制的那些索引的元组(特征是轴,并且热值对应于结果) 。
在前面的示例中,平均房间数和较低身份人口的百分比均已表示,因此显示了预期的行为。 有趣的是,热图解释了它们如何共同为结果的值做出贡献,它揭示了它们没有以任何特定的方式相互作用(这是一次爬坡)。 但是,还显示出 LSTAT 大于 5 时,它是所得房屋价值的有力分隔符。
在前面的示例中,平均房间数和较低身份人口的百分比均已表示,因此显示了预期的行为。 有趣的是,热图解释了它们如何共同为结果的值做出贡献,它揭示了它们没有以任何特定的方式相互作用(这是一次爬坡)。 但是,还显示出 LSTAT 大于 5 时,它是所得房屋价值的有力分隔符。
# 使用机器学习即服务创建预测服务器
......@@ -993,6 +993,6 @@ Bottle 是一个 Python 网络框架,是 HTTP 上微型应用的起点。 这
# 总结
本章通过提供数据,机器学习过程和结果的基本和高级图形表示的示例,概述了基本数据科学。 我们探索了来自 Matplotlib 的`pylab`模块,该模块可让您最轻松,最快地访问该软件包的图形功能。 我们将 Pandas 用于 EDA,并测试了 Scikit-learn 提供的图形实用程序。 所有示例都像构建块一样,并且都易于定制,以便为您提供快速的可视化模板。
本章通过提供数据,机器学习过程和结果的基本和高级图形表示的示例,概述了基本数据科学。 我们探索了来自 Matplotlib 的`pylab`模块,该模块可让您最轻松,最快地访问该软件包的图形功能。 我们将 Pandas 用于 EDA,并测试了 Scikit-learn 提供的图形工具。 所有示例都像构建块一样,并且都易于定制,以便为您提供快速的可视化模板。
在下一章中,将向您介绍**图**,它们是与预测变量/目标平坦矩阵的有趣偏差。 现在,它们已成为数据科学中的热门话题。 期望深入研究非常复杂和复杂的网络。
\ No newline at end of file
......@@ -53,7 +53,7 @@
* [使用 Python 进行深度学习视频](https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-python-video)
* [使用 TensorFlow 进行深度学习视频](https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-tensorflow-video)
现在让我们看一些实用的东西:如何用神经网络解决分类问题。 在此示例中,我们将使用 Keras。 第一个是用于低级基元的 Python 库,通常用于深度学习,并能够利用最新的 GPU 和数值加速来有效处理多维数组。 Keras 是用于神经网络的高级,快速且模块化的 Python 库,能够在不同的数值计算框架之上运行,例如 TensorFlow,Microsoft Cognitive Tool(以前称为 CNTK)或 Theano。
现在让我们看一些实用的东西:如何用神经网络解决分类问题。 在此示例中,我们将使用 Keras。 第一个是用于低级原语的 Python 库,通常用于深度学习,并能够利用最新的 GPU 和数值加速来有效处理多维数组。 Keras 是用于神经网络的高级,快速且模块化的 Python 库,能够在不同的数值计算框架之上运行,例如 TensorFlow,Microsoft Cognitive Tool(以前称为 CNTK)或 Theano。
# 使用 CNN 的图像分类
......
......@@ -88,7 +88,7 @@ HDFS 的架构是主从结构。 如果主服务器(称为**名称节点**)
* **数据分块器**:从文件系统读取数据并将其拆分为块。 块是输入数据集的一部分,通常是固定大小的块(例如,从**数据节点**读取的 HDFS 块)或另一个更合适的拆分。 例如,如果我们要计算文本文件中的字符,单词和行数,则很好的拆分可以是一行文本。
* **映射器**:从每个块中生成一系列键值对。 每个映射器实例将相同的映射函数应用于不同的数据块。 继续前面的示例,对于每一行,在此步骤中生成了三个键值对-一个键值对包含该行中的字符数(键可以简单地是*字符串*),其中一个包含单词个数(在这种情况下,密钥必须不同,所以假设是*单词*),其中一个包含行数,该行数始终为 1(在这种情况下,密钥可以是*行*)。
* **打乱器**:从可用键的数量和可用的化简器的数量,混洗器将具有相同键的所有键-值对分配给同一异化器。 通常,此操作是计算键的哈希值,将其除以精简器的数量,然后使用余数来指出特定的精简器。 这应确保每个异径管有足够数量的钥匙。 该功能不是用户可编程的,而是由 MapReduce 框架提供的。
* **归约器**:每个简化器都接收一组特定键的所有键值对,并且可以产生零个或多个聚合结果。 在该示例中,所有与*单词*键相关的值都到达简化器; 它的工作只是总结所有值。 其他键也一样,这将产生三个最终值:字符数,单词数和行数。 请注意,这些结果可能在不同的减速器上。
* **归约器**:每个简化器都接收一组特定键的所有键值对,并且可以产生零个或多个聚合结果。 在该示例中,所有与*单词*键相关的值都到达简化器; 它的工作只是总结所有值。 其他键也一样,这将产生三个最终值:字符数,单词数和行数。 请注意,这些结果可能在不同的减速器上。
* **输出编写器**:减速器的输出写在文件系统(或 HDFS)上。 在默认的 Hadoop 配置中,每个归约器都会写入一个文件(`part-r-00000`是第一个归约器的输出,`part-r-00001`是第二个归约器的输出,依此类推)。 要在文件上显示完整的结果列表,应将所有结果连接起来。
在视觉上,可以简单地传达和理解此操作,如下所示:
......@@ -274,7 +274,7 @@ RDD 仅支持两种类型的操作:
典型的 Spark 程序是一系列转换,最后是一个动作。 默认情况下,RDD 上的所有转换都是在您每次执行操作时执行的(即,不保存每个转换器之后的中间状态)。 但是,只要您想`cache`转换后的元素的值,就可以使用`persist`方法(在 RDD 上)覆盖此行为。 `persist`方法允许内存和磁盘持久性。
在下面的示例中,我们将对 RDD 中包含的所有值求平方,然后对其求和; 该算法可以通过一个映射器(正方形元素),然后是一个约简器(对数组求和)来执行。 根据 Spark 的说法,`map`方法是一种转换器,因为它只是逐个元素地转换数据。 归约是一个动作,因为它可以从所有元素中共同创造出值。
在下面的示例中,我们将对 RDD 中包含的所有值求平方,然后对其求和; 该算法可以通过一个映射器(正方形元素),然后是一个约简器(对数组求和)来执行。 根据 Spark 的说法,`map`方法是一种转换器,因为它只是逐个元素地转换数据。 归约是一个动作,因为它可以从所有元素中共同创造出值。
让我们逐步解决此问题,以了解可以进行操作的多种方式。 首先,我们将使用一个函数来转换(映射)所有数据:首先定义一个函数,该函数返回输入参数的平方,然后将该函数传递给 RDD 中的`map`方法, 最后,我们收集 RDD 中的元素:
......
# 前言
“开发人员是当今商业中最重要,最有价值的选区,而与行业无关。”
“开发人员是当今商业中最重要,最有价值的领域,而与行业无关。”
————《The New Kingmakers》作者 Stephen O'Grady
......
......@@ -106,7 +106,7 @@
数据管道工作流程
数据管道的主要目标是在可扩展,可重复的过程中以高度自动化的方式来操作(即*提供直接业务价值*)数据科学分析结果。 分析的示例可以是一个推荐引擎,以诱使消费者购买更多产品,例如,亚马逊推荐的列表,或者显示可以帮助以下方面的信息的仪表板:**关键绩效指标****KPI**)。 首席执行官为公司制定未来决策。
数据管道的主要目标是在可扩展,可重复的过程中以高度自动化的方式来操作(即*提供直接业务价值*)数据科学分析结果。 分析的示例可以是一个推荐引擎,以诱使消费者购买更多产品,例如,亚马逊推荐的列表,或者显示可以帮助以下方面的信息的仪表板:**关键表现指标****KPI**)。 首席执行官为公司制定未来决策。
数据管道的构建涉及多个人:
......
......@@ -99,7 +99,7 @@ my_data = [
此外,PixieDust 在数据处理和渲染级别都具有高度可扩展性。 例如,您可以添加要由可视化框架渲染的新数据类型,或者如果您想利用自己喜欢的绘图库,则可以轻松地将其添加到 PixieDust 支持的渲染器列表中(更多信息请参见下一章)。
您还将发现 PixieDust 包含一些与 Apache Spark 相关的额外实用程序,例如:
您还将发现 PixieDust 包含一些与 Apache Spark 相关的额外工具,例如:
* **包管理器**:这使您可以在 Python 笔记本中安装 Spark 软件包。
* **Scala 桥接**:您可以使用`%%scala`魔术在 Python 笔记本中直接使用 Scala 。 变量自动从 Python 传输到 Scala,反之亦然。
......
......@@ -1508,7 +1508,7 @@ def on_data(self, data):
* 处理和分析部分的**代码**:它将包含调用 Watson NLU 服务的数据丰富 Python 代码。 我们将运算符重命名为`Enrichment`。
* 面板的目标部分中的 **消息中心:丰富数据的输出源**。 我们将其重命名为`Target Message Hub`。
接下来,我们在**源消息中心**和**扩展**之间以及**扩展**和**目标消息中心**之间创建连接。 要在两个操作员之间建立连接,只需抓住第一个操作员末端的输出端口并将其拖到另一个操作员的输入端口即可。 请注意,源操作员在框的右侧仅具有一个输出端口,以表示它仅支持传出连接,而目标操作员在左侧仅具有一个输入端口,以表示仅支持传入连接。 **处理和分析**部分中的任何操作员在左侧和右侧都有两个端口,因为它们都接受传入和传出连接。
接下来,我们在**源消息中心**和**扩展**之间以及**扩展**和**目标消息中心**之间创建连接。 要在两个运算符之间建立连接,只需抓住第一个运算符末端的输出端口并将其拖到另一个运算符的输入端口即可。 请注意,源运算符在框的右侧仅具有一个输出端口,以表示它仅支持传出连接,而目标运算符在左侧仅具有一个输入端口,以表示仅支持传入连接。 **处理和分析**部分中的任何运算符在左侧和右侧都有两个端口,因为它们都接受传入和传出连接。
以下屏幕截图显示了完整完成的画布:
......
......@@ -979,7 +979,7 @@ def setup(self):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%209/sampleCode23.json)
假设我们可以从最短的路径生成此 GeoJSON 有效负载,我们可能想知道如何将其传递给 PixieDust Mapbox 渲染器,以便可以显示它。 好了,机制很简单:Mapbox 渲染器将对主机 PixieApp 进行内省,以查找符合特定格式的任何类变量,然后使用它来生成要显示的 Mapbox 图层。 为了帮助遵循此机制,我们使用了我们先前简要介绍的`MapboxBase`实用程序类。 此类具有`get_layer_index()`方法,该方法采用唯一名称(我们使用`centrality`索引)作为参数并返回其索引。 它还需要一个额外的可选参数,以在尚不存在的情况下创建该图层。 然后,我们调用`toggleLayer()`方法,将图层索引作为参数传递以打开和关闭图层。
假设我们可以从最短的路径生成此 GeoJSON 有效负载,我们可能想知道如何将其传递给 PixieDust Mapbox 渲染器,以便可以显示它。 好了,机制很简单:Mapbox 渲染器将对主机 PixieApp 进行内省,以查找符合特定格式的任何类变量,然后使用它来生成要显示的 Mapbox 图层。 为了帮助遵循此机制,我们使用了我们先前简要介绍的`MapboxBase`工具类。 此类具有`get_layer_index()`方法,该方法采用唯一名称(我们使用`centrality`索引)作为参数并返回其索引。 它还需要一个额外的可选参数,以在尚不存在的情况下创建该图层。 然后,我们调用`toggleLayer()`方法,将图层索引作为参数传递以打开和关闭图层。
以下代码显示`compute_toggle_centrality_layer()`方法的实现,该方法实现了上述步骤:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册