提交 0a41e336 编写于 作者: W wizardforcel

2021-02-20 21:52:46

上级 ca74f736
......@@ -60,7 +60,7 @@
因此,您有三种不同的类型。 有数字,分类和有序数据。 让我们看看它是否沉入其中。不要担心,我不会让您参与工作或其他任何事情。
**快速测验:**对于这些示例中的每个,数据是数字的,分类的还是有序的?
**快速测验**对于这些示例中的每个,数据是数字的,分类的还是有序的?
1. 让我们从您的油箱中有多少气体开始。 你怎么认为? 好吧,正确的答案是数字。 这是一个连续的数值,因为您的储罐中可能存在无限范围的气体。 是的,我的意思是,您可以容纳多少气体可能有一个上限,但是您拥有多少气体的可能值的数量没有尽头。 它可能是储罐的四分之三,可能是储罐的六分之一,可能是储罐的 *1 / pi* ,我的意思是谁知道,对吗?
......
......@@ -396,11 +396,11 @@ K 均值聚类是机器学习中一种非常普遍的技术,您仅尝试获取
这是简单的英语算法:
1. **随机选择 K 个质心(k 均值):**我们从一组随机选择的质心开始。 因此,如果我们的 K 为 3,我们将在组中寻找三个聚类,然后在散点图中分配三个随机定位的质心。
2. **将每个数据点分配给最接近的质心:**然后,我们将每个数据点分配给最接近其的随机分配质心。
1. **随机选择 K 个质心(k 均值)**我们从一组随机选择的质心开始。 因此,如果我们的 K 为 3,我们将在组中寻找三个聚类,然后在散点图中分配三个随机定位的质心。
2. **将每个数据点分配给最接近的质心**然后,我们将每个数据点分配给最接近其的随机分配质心。
3. **根据每个质心点的平均位置重新计算质心**:然后为我们得出的每个聚类重新计算质心。 也就是说,对于最终得到的给定簇,我们将质心移动为所有这些点的实际中心。
4. **迭代直到点停止更改对质心的分配:**我们将再次执行所有操作,直到这些质心停止移动,达到一个确定的阈值,确定,我们在这里进行了收敛。
5. **预测新点的聚类:**要预测我以前从未见过的新点的聚类,我们可以遍历质心位置并找出最接近哪个质心来预测其聚类。
4. **迭代直到点停止更改对质心的分配**我们将再次执行所有操作,直到这些质心停止移动,达到一个确定的阈值,确定,我们在这里进行了收敛。
5. **预测新点的聚类**要预测我以前从未见过的新点的聚类,我们可以遍历质心位置并找出最接近哪个质心来预测其聚类。
让我们看一个图形示例,使它更有意义。 我们在下图中将第一个数字称为 A,第二个称为 B,第三个称为 C,第四个称为 D。
......@@ -418,9 +418,9 @@ K 均值聚类是机器学习中一种非常普遍的技术,您仅尝试获取
因此,k 均值聚类存在一些限制。 他们来了:
1. **选择 K:**首先,我们需要选择正确的 K 值,这根本不是一件容易的事情。 选择 K 的主要方法是从低开始,并根据想要的组数不断增加 K 的值,直到不再大幅度减少平方误差为止。 如果查看每个点到其质心的距离,可以将其视为误差度量。 在停止减少该错误指标的那一刻,您知道您可能有太多的群集。 因此,此时您无法通过添加其他集群真正获得任何更多信息。
2. **避免局部最小值:**此外,存在局部最小值的问题。 您可能会对最初选择的质心感到非常不走运,而且它们最终可能只收敛于局部现象,而不是更多的全局簇,因此通常,您需要运行几次并可能求平均结果。 我们称这种集成学习。 我们稍后再讨论,但是使用一组不同的随机初始值多次运行 k-means 总是一个好主意,只是看看您是否最终得到相同的总体结果 或不。
3. **标记集群:**最后,k-means 集群的主要问题是没有针对您获得的集群的标签。 它只会告诉您这组数据点在某种程度上是相关的,但是您不能在上面加上名称。 它无法告诉您该群集的实际含义。 假设我正在看一堆电影,并且 k 均值聚类告诉我这堆科幻电影就在这里,但我不会将它们称为“科幻”电影。 我要真正去研究数据并弄清楚,这些东西到底有什么共同点? 我怎么用英语来描述? 那是最困难的部分,而 k-means 并不能帮助您。 再次说明,scikit-learn 使执行此操作变得非常容易。
1. **选择 K**首先,我们需要选择正确的 K 值,这根本不是一件容易的事情。 选择 K 的主要方法是从低开始,并根据想要的组数不断增加 K 的值,直到不再大幅度减少平方误差为止。 如果查看每个点到其质心的距离,可以将其视为误差度量。 在停止减少该错误指标的那一刻,您知道您可能有太多的群集。 因此,此时您无法通过添加其他集群真正获得任何更多信息。
2. **避免局部最小值**此外,存在局部最小值的问题。 您可能会对最初选择的质心感到非常不走运,而且它们最终可能只收敛于局部现象,而不是更多的全局簇,因此通常,您需要运行几次并可能求平均结果。 我们称这种集成学习。 我们稍后再讨论,但是使用一组不同的随机初始值多次运行 k-means 总是一个好主意,只是看看您是否最终得到相同的总体结果 或不。
3. **标记集群**最后,k-means 集群的主要问题是没有针对您获得的集群的标签。 它只会告诉您这组数据点在某种程度上是相关的,但是您不能在上面加上名称。 它无法告诉您该群集的实际含义。 假设我正在看一堆电影,并且 k 均值聚类告诉我这堆科幻电影就在这里,但我不会将它们称为“科幻”电影。 我要真正去研究数据并弄清楚,这些东西到底有什么共同点? 我怎么用英语来描述? 那是最困难的部分,而 k-means 并不能帮助您。 再次说明,scikit-learn 使执行此操作变得非常容易。
现在让我们来看一个例子,将 k 均值聚类付诸实践。
......@@ -748,18 +748,18 @@ print clf.predict([[10, 0, 4, 0, 0, 0]])
几年前的一个很好的例子是 Netflix 奖。 Netflix 举办了一场竞赛,他们向可以超越现有电影推荐算法的任何研究人员提供一百万美元。 获胜的方法是整体方法,实际上他们可以一次运行多个推荐算法,然后让他们都对最终结果进行投票。 因此,集成学习可以是一种非常强大但简单的工具,可以提高机器学习中最终结果的质量。 现在让我们尝试探索各种类型的集成学习:
* **引导程序聚集或装袋:**现在,随机森林使用一种称为袋装的技术,是引导程序聚集的简称。 这意味着我们将从训练数据中随机抽取一些子样本,并将其输入相同模型的不同版本中,然后让它们全部对最终结果进行投票。 如果您还记得的话,随机森林采用了许多不同的决策树,它们使用训练数据的不同随机样本进行训练,然后它们最终聚集在一起,对最终结果进行投票。 套袋。
* **Boosting:** Boosting 是一个替代模型,这里的想法是从一个模型开始,但是每个后续模型都会增强处理那些被先前模型错误分类的区域的属性。 因此,您在模型上进行训练/测试,找出根本上出错的属性,然后在后续模型中增强这些属性-希望那些后续模型会更多地关注它们并得到它们 正确的。 因此,这就是推动发展的总体思路。 您可以运行一个模型,找出其薄弱环节,并在不断发展时将重点放在这些薄弱环节上,并基于前一个薄弱环节,继续构建越来越多的模型以不断完善该模型。
* **模型桶:** Netflix 获奖者所做的另一项技术称为模型桶,您可能会使用完全不同的模型来预测某些事物。 也许我正在使用 k 均值,决策树和回归。 我可以在一组训练数据上同时运行所有这三个模型,并在我试图预测某些结果时让它们全部对最终分类结果进行投票。 也许这比孤立使用其中任何一个模型要好。
* **堆叠:**堆叠具有相同的想法。 因此,您可以对数据运行多个模型,并以某种方式将结果组合在一起。 在存储桶和堆叠模型之间的细微区别是,您选择了获胜的模型。 因此,您将进行训练/测试,找到最适合您的数据的模型,然后使用该模型。 相比之下,堆叠会将所有这些模型的结果组合在一起,以得出最终结果。
* **引导程序聚集或装袋**现在,随机森林使用一种称为袋装的技术,是引导程序聚集的简称。 这意味着我们将从训练数据中随机抽取一些子样本,并将其输入相同模型的不同版本中,然后让它们全部对最终结果进行投票。 如果您还记得的话,随机森林采用了许多不同的决策树,它们使用训练数据的不同随机样本进行训练,然后它们最终聚集在一起,对最终结果进行投票。 套袋。
* **Boosting** Boosting 是一个替代模型,这里的想法是从一个模型开始,但是每个后续模型都会增强处理那些被先前模型错误分类的区域的属性。 因此,您在模型上进行训练/测试,找出根本上出错的属性,然后在后续模型中增强这些属性-希望那些后续模型会更多地关注它们并得到它们 正确的。 因此,这就是推动发展的总体思路。 您可以运行一个模型,找出其薄弱环节,并在不断发展时将重点放在这些薄弱环节上,并基于前一个薄弱环节,继续构建越来越多的模型以不断完善该模型。
* **模型桶** Netflix 获奖者所做的另一项技术称为模型桶,您可能会使用完全不同的模型来预测某些事物。 也许我正在使用 k 均值,决策树和回归。 我可以在一组训练数据上同时运行所有这三个模型,并在我试图预测某些结果时让它们全部对最终分类结果进行投票。 也许这比孤立使用其中任何一个模型要好。
* **堆叠**堆叠具有相同的想法。 因此,您可以对数据运行多个模型,并以某种方式将结果组合在一起。 在存储桶和堆叠模型之间的细微区别是,您选择了获胜的模型。 因此,您将进行训练/测试,找到最适合您的数据的模型,然后使用该模型。 相比之下,堆叠会将所有这些模型的结果组合在一起,以得出最终结果。
现在,有一个关于集成学习的整个研究领域,试图找到进行集成学习的最佳方法,如果您想听起来很聪明,通常需要大量使用贝叶斯一词。 因此,有一些非常高级的整体学习方法,但是它们都有缺点,我认为这是又一课,因为我们应该始终使用最适合自己的简单技术。
现在,所有这些都是非常复杂的技术,我在本书的范围内无法真正涉及到,但是总而言之,很难仅胜过我们已经讨论过的简单技术。 这里列出了一些复杂的技术:
* **Bayes 光学分类器:**从理论上讲,有一种称为 Bayes 最佳分类器的东西总是最好的,但是这是不切实际的,因为这样做在计算上是令人望而却步的。
* **贝叶斯参数平均:**许多人试图对贝叶斯最佳分类器进行变型以使其更实用,例如贝叶斯参数平均变型。 但是它仍然容易过度拟合,并且经常由于套袋而表现不佳,这与随机森林的想法相同。 您只需多次对数据进行重新采样,运行不同的模型,然后让它们全部对最终结果进行投票。 事实证明,该方法同样有效,而且简单得多!
* **贝叶斯模型组合:**最后,有一种称为贝叶斯模型组合的东西试图解决贝叶斯最佳分类器和贝叶斯参数平均的所有缺点。 但是,归根结底,它并没有比对模型组合进行交叉验证做得更好。
* **Bayes 光学分类器**从理论上讲,有一种称为 Bayes 最佳分类器的东西总是最好的,但是这是不切实际的,因为这样做在计算上是令人望而却步的。
* **贝叶斯参数平均**许多人试图对贝叶斯最佳分类器进行变型以使其更实用,例如贝叶斯参数平均变型。 但是它仍然容易过度拟合,并且经常由于套袋而表现不佳,这与随机森林的想法相同。 您只需多次对数据进行重新采样,运行不同的模型,然后让它们全部对最终结果进行投票。 事实证明,该方法同样有效,而且简单得多!
* **贝叶斯模型组合**最后,有一种称为贝叶斯模型组合的东西试图解决贝叶斯最佳分类器和贝叶斯参数平均的所有缺点。 但是,归根结底,它并没有比对模型组合进行交叉验证做得更好。
同样,这些都是非常复杂的技术,很难使用。 在实践中,最好使用我们已详细讨论过的简单方法。 但是,如果您想听起来很聪明,并且经常使用贝叶斯一词,那么至少要熟悉这些技术并知道它们是什么是很好的。
......
......@@ -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)
......
......@@ -598,7 +598,7 @@ import networkx as nx
**XGBoost** 是可伸缩,可移植且分布式的梯度提升库(树型集成机器学习算法)。 它最初是由华盛顿大学的 Chen Tianqi 创建的,并由 Bing Xu 的 Python 包装程序和 Tong He 的 R 接口进行了完善(您可以直接从其主要创建者的[这个页面](http://homes.cs.washington.edu/~tqchen/2016/03/10/story-and-lessons-behind-the-evolution-of-xgboost.html)上阅读 XGBoost 背后的故事。 XGBoost 适用于 Python,R,Java,Scala,Julia 和 C ++,并且可以在 Hadoop 和 Spark 集群中的单台机器上使用(利用多线程):
* [**网站**](https://xgboost.readthedocs.io/en/latest/)
* **打印时的版本:** 0.80
* **打印时的版本**0.80
* [**下载页面**](https://github.com/dmlc/xgboost)
可以在[这个页面](https://xgboost.readthedocs.io/en/latest/build.html#)上找到在系统上安装 XGBoost 的详细说明。
......@@ -668,7 +668,7 @@ In graph terminology, LightGBM is pursuing a depth-first search strategy than a
它被设计为分布式的(支持并行和 GPU 学习),并且其独特的方法确实以较低的内存使用量实现了更快的训练速度(从而允许处理更大范围的数据):
* [**网站**](https://github.com/Microsoft/LightGBM)
* **打印时的版本:** 2.1.0
* **打印时的版本**2.1.0
XGBoost 的安装需要比常规 Python 软件包更多的操作。 如果您在 Windows 系统上运行,请打开外壳并发出以下命令:
......@@ -705,7 +705,7 @@ import lightgbm as lgbm
由 Yandex 研究人员和工程师开发的 **CatBoost**(代表**类别增强**)是一种基于决策树的梯度提升算法,该算法在处理类别特征方面进行了优化,无需太多预处理(非 -表示质量的数字特征,例如颜色,品牌或类型。 由于在大多数数据库中,大多数功能都是分类的,因此 CatBoost 确实可以提高预测结果:
* [**网站**](https://catboost.yandex)
* **打印时的版本:** 0.8.1.1
* **打印时的版本**0.8.1.1
* **建议的安装命令**`pip install catboost`
* [**下载页面**](https://github.com/catboost/catboost)
......@@ -718,7 +718,7 @@ TensorFlow 最初由 Google Brain 团队开发,可在 Google 内部使用,
在本书中,我们将 TensorFlow 用作 Keras 的后端,也就是说,我们不会直接使用它,但是我们需要在系统上运行它:
* [**网站**](https://tensorflow.org/)
* **打印时的版本:** 1.8.0
* **打印时的版本**1.8.0
在 CPU 系统上安装 TensorFlow 非常简单:只需使用`pip install tensorflow`。 但是,如果您的系统上装有 NVIDIA GPU(您实际上需要具有 CUDA Compute Capability 3.0 或更高版本的 GPU 卡),则要求会不断提高,因此您首先必须安装以下设备:
......@@ -735,7 +735,7 @@ TensorFlow 最初由 Google Brain 团队开发,可在 Google 内部使用,
**Keras** 是使用 Python 编写的极简和高度模块化的神经网络库,能够在 TensorFlow(由 Google 发布的用于数值计算的源软件库)以及 Microsoft Cognitive Toolkit(以前称为“ CNTK),Theano 或 MXNet。 它的主要开发者和维护者是 FrançoisChollet,他是 Google 的机器学习研究人员:
* [**网站**](https://keras.io/)
* **打印时的版本:** 2.2.0
* **打印时的版本**2.2.0
* **建议的安装命令**`pip install keras`
或者,您可以使用以下命令来安装最新的可用版本(建议使用此软件包,因为该软件包正在持续开发中):
......
......@@ -99,7 +99,7 @@ In: list(nx.generate_adjlist(G)) Out: ['1 2 4', '2 3', '3 4', '4']
In: nx.to_dict_of_lists(G) Out: {1: [2, 4], 2: [1, 3], 3: [2, 4], 4: [1, 3]}
```
另一方面,您可以将图形描述为边的**集合。 在输出中,每个元组的第三个元素是边的属性。 实际上,每个边缘都可以具有一个或多个属性(例如其权重,其基数等)。 由于我们创建了一个非常简单的图,因此在以下示例中,我们没有属性:**
另一方面,您可以将图形描述为边的**集合**。 在输出中,每个元组的第三个元素是边的属性。 实际上,每个边缘都可以具有一个或多个属性(例如其权重,其基数等)。 由于我们创建了一个非常简单的图,因此在以下示例中,我们没有属性:
```py
In: nx.to_edgelist(G) Out: [(1, 2, {}), (1, 4, {}), (2, 3, {}), (3, 4, {})]
......@@ -271,7 +271,7 @@ In: nx.closeness_centrality(G) Out: {0: 0.5294117647058824,
具有高度接近中心性的节点是`5``6``3`。 实际上,它们是存在于网络中间的节点,平均而言,它们可以通过几跳到达所有其他节点。 最低分属于节点`9`。 实际上,它到达所有其他节点的平均距离相当高。
* **谐波中心点:**此度量类似于接近中心点,但不是距离的倒数之和的倒数,而是距离的倒数的总和。 这样做强调了距离的极限。 让我们看看我们的网络中的谐波距离是什么样的:
* **谐波中心点**此度量类似于接近中心点,但不是距离的倒数之和的倒数,而是距离的倒数的总和。 这样做强调了距离的极限。 让我们看看我们的网络中的谐波距离是什么样的:
```py
In: nx.harmonic_centrality(G) Out: {0: 6.083333333333333,
......
......@@ -1426,7 +1426,7 @@ self.producer = KafkaProducer(**kafka_conf)
### 注意
**注意**:我们需要指定`api_version`键,因为否则,该库将尝试自动发现其值,这会导致`kafka-python`库中的错误可重现,从而引发`NoBrokerAvailable`异常。 仅在 Mac 上。 在编写本书时,尚未提供针对此错误的修复程序。
**注意**:我们需要指定`api_version`键,因为否则,该库将尝试自动发现其值,这会导致`kafka-python`库中的错误可重现,从而引发`NoBrokerAvailable`异常。 仅在 Mac 上。 在编写本书时,尚未提供针对此错误的修复程序。
现在我们需要更新`on_data`方法,以使用`tweets`主题将推文数据发送到 Kafka。 Kafka 主题就像应用程序可以发布或订阅的渠道。 重要的是在尝试写入主题之前已经创建了该主题,否则将引发异常。 这是通过以下`ensure_topic_exists`方法完成的:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册