提交 de39ada0 编写于 作者: W wizardforcel

2021-03-05 22:42:59

上级 4b6df056
......@@ -793,7 +793,7 @@ K 最近邻分类算法可存储训练数据并根据特征空间中的 K 个最
K 折交叉验证算法如下:
1. 将数据拆分为大小近似相等的 k 个“折叠”。
1. 将数据拆分为大小近似相等的`k`个“折叠”。
2. 在不同的折叠组合上测试并训练`k`模型。 每个模型将包括`k-1`折叠训练数据,剩余的折叠用于测试。 在这种方法中,每个折叠最终仅被用作一次验证数据。
3. 通过取`k`值的平均值来计算模型精度。 还计算标准偏差以在值上提供误差线。
......
......@@ -21,7 +21,7 @@
本着利用互联网作为数据库的精神,我们可以考虑通过抓取内容或与 Web API 接口从网页获取数据。 通常,抓取内容意味着使计算机读取旨在以人类可读格式显示的数据。 这与 Web API 有所不同,Web API 以机器可读格式(最常见的是 JSON)传递数据。
在本主题中,我们将集中在网页抓取上。 确切的执行过程将取决于页面和所需的内容。 但是,正如我们将看到的,只要我们对基本概念和工具有所了解,就很容易从 HTML 页面中抓取所需的任何内容。 在本主题中,我们将以 Wikipedia 为例,并从文章中获取表格内容。 然后,我们将应用相同的技术从完全独立的域中的页面中抓取数据。 但是首先,我们将花一些时间介绍 HTTP 请求。
在本主题中,我们将集中在网页抓取上。 确切的执行过程将取决于页面和所需的内容。 但是,正如我们将看到的,只要我们对基本概念和工具有所了解,就很容易从 HTML 页面中抓取所需的任何内容。 在本主题中,我们将以维基百科为例,并从文章中获取表格内容。 然后,我们将应用相同的技术从完全独立的域中的页面中抓取数据。 但是首先,我们将花一些时间介绍 HTTP 请求。
## 子主题 A:HTTP 请求简介
......@@ -181,7 +181,7 @@ HTTP 方法
1.`lesson-3-workbook.ipynb`文件中,滚动到`Subtopic B: Parsing HTML with Python`的顶部。
在本节中,我们将抓取每个国家的中央银行利率,如 Wikipedia 报道的。 在深入研究代码之前,让我们首先打开包含此数据的网页。
在本节中,我们将抓取每个国家的中央银行利率,如维基百科报道的。 在深入研究代码之前,让我们首先打开包含此数据的网页。
2. 在网络浏览器中打开`https://en.wikipedia.org/wiki/List_of_countries_by_central_bank_interest_rates` URL。 如有可能,请使用 Chrome。在本节的后面,我们将向您展示如何使用 Chrome 的开发人员工具查看和搜索 HTML。
......@@ -250,7 +250,7 @@ HTTP 方法
现在,让我们刮擦桌子。 我们将使用 Chrome 的开发人员工具来查找其中包含的元素。
10. 如果尚未完成,请在 Chrome 中打开我们正在查看的 Wikipedia 页面。 然后,在浏览器中,从**视图**菜单中选择**开发人员工具**。 侧栏将打开。 可从开发人员工具的**元素**标签中查看 HTML。
10. 如果尚未完成,请在 Chrome 中打开我们正在查看的维基百科页面。 然后,在浏览器中,从**视图**菜单中选择**开发人员工具**。 侧栏将打开。 可从开发人员工具的**元素**标签中查看 HTML。
11. 选择工具侧栏左上方的小箭头。 这使我们可以将鼠标悬停在页面上,并在侧栏的“元素”部分中查看 HTML 元素的位置:
![Parsing HTML with Python in a Jupyter Notebook](img/image3_13.jpg)
......@@ -374,7 +374,7 @@ HTTP 方法
### 注意
自创建此文档以来,此页面可能已更改。 如果此 URL 不再指向国家/地区人口表,[请改用此 Wikipedia 页面](https://en.wikipedia.org/wiki/List_of_countries_by_population_(United_Nations))。
自创建此文档以来,此页面可能已更改。 如果此 URL 不再指向国家/地区人口表,[请改用此维基百科页面](https://en.wikipedia.org/wiki/List_of_countries_by_population_(United_Nations))。
1. 对于此页面,可以使用以下代码段抓取数据:
......@@ -509,7 +509,7 @@ HTTP 方法
['Mexico', '129,163,276', '1.27 %']]
```
看来我们已经成功抓取了数据! 请注意,尽管此网页完全不同,但与 Wikipedia 相比,此表的处理过程有多相似。 当然,并不总是将数据包含在表中,但是不管怎样,我们通常可以使用`find_all`作为主要的解析方法。
看来我们已经成功抓取了数据! 请注意,尽管此网页完全不同,但与维基百科相比,此表的处理过程有多相似。 当然,并不总是将数据包含在表中,但是不管怎样,我们通常可以使用`find_all`作为主要的解析方法。
16. 最后,将数据保存到 CSV 文件中,以备后用。 通过运行以下代码来执行此操作:
......
......@@ -4,7 +4,7 @@
《Python 数据科学和机器学习实用指南》确实很全面。 我们将从 Python 速成班开始,并回顾一些基本的统计数据和概率,但随后我们将直接探讨数据挖掘和机器学习中的 60 多个主题。 其中包括贝叶斯定理,聚类,决策树,回归分析,实验设计等; 我们将全部看一下。 其中一些主题真的很有趣。
我们将使用实际的用户电影分级数据来开发实际的电影推荐系统。 我们将创建一个实际上可用于 Wikipedia 数据的搜索引擎。 我们将构建一个垃圾邮件分类器,该分类器可以正确地对您的电子邮件帐户中的垃圾邮件和非垃圾邮件进行分类,并且我们还将在整个章节中介绍如何使用 Apache Spark 将其扩展到在大数据上运行的集群。
我们将使用实际的用户电影分级数据来开发实际的电影推荐系统。 我们将创建一个实际上可用于维基百科数据的搜索引擎。 我们将构建一个垃圾邮件分类器,该分类器可以正确地对您的电子邮件帐户中的垃圾邮件和非垃圾邮件进行分类,并且我们还将在整个章节中介绍如何使用 Apache Spark 将其扩展到在大数据上运行的集群。
如果您是想要过渡到数据科学职业的软件开发人员或程序员,那么本课程将教您最热门的技能,而不会涉及这些主题附带的所有数学符号和伪装。 我们只是要解释这些概念,并向您展示一些实际有效的 Python 代码,您可以深入研究并弄混这些概念,以使这些概念深入人心,如果您是金融行业的数据分析师, 该课程还可以教您如何过渡到科技行业。 您所需要的只是在编程或脚本编写方面的一些先验经验,您应该会很好。
......@@ -51,7 +51,7 @@ spark-submit SparkKMeans.py
```
新术语和重要词以粗体显示。 您在屏幕上看到的字词,例如在菜单或对话框中的字样如下所示:“在 Windows 10 上,您需要打开“开始”菜单,然后转到“ Windows 系统” |“控制面板”以打开 控制面板。”
新术语和重要词以粗体显示。 您在屏幕上看到的字词,例如在菜单或对话框中的字样如下所示:“在 Windows 10 上,您需要打开“开始”菜单,然后转到“Windows 系统” |“控制面板”以打开 控制面板。”
警告或重要提示如下所示。
......
......@@ -825,7 +825,7 @@ while (x < 10):
# 在命令提示符下运行 Python 脚本
我实际上可以在命令提示符下运行脚本。 如果我转到“工具”,则可以转到“ Canopy 命令提示符”,这将打开一个命令窗口,其中已包含用于运行 Python 的所有必要环境变量。 我只需要输入`python test.py`并运行脚本,结果就会出现:
我实际上可以在命令提示符下运行脚本。 如果我转到“工具”,则可以转到“Canopy 命令提示符”,这将打开一个命令窗口,其中已包含用于运行 Python 的所有必要环境变量。 我只需要输入`python test.py`并运行脚本,结果就会出现:
![](img/6299c466-90f8-4d46-a9e2-d69794d19776.png)
......
......@@ -2,7 +2,7 @@
在本章中,我们将学习机器学习以及如何在 Python 中实际实现机器学习模型。
我们将研究有监督和无监督学习的含义,以及它们之间的区别。 我们将看到防止过度拟合的技术,然后看一个有趣的示例,其中实现了垃圾邮件分类器。 我们将分析一个长期的 K-Means 聚类方法,并通过一个工作示例使用 scikit-learn 根据人们的收入和年龄对其聚类!
我们将研究有监督和无监督学习的含义,以及它们之间的区别。 我们将看到防止过度拟合的技术,然后看一个有趣的示例,其中实现了垃圾邮件分类器。 我们将分析一个长期的 K 均值聚类方法,并通过一个工作示例使用 scikit-learn 根据人们的收入和年龄对其聚类!
我们还将介绍称为**决策树**的机器学习一个非常有趣的应用程序,并且将在 Python 中构建一个工作示例来预测公司中的重要决策。 最后,我们将讲解集成学习和 SVM 的迷人概念,这是我最喜欢的机器学习领域!
......@@ -21,7 +21,7 @@
# 机器学习和培训/测试
那么什么是机器学习? 好吧,如果您在 Wikipedia 上或其他任何内容上查找它,就会说这是一种可以从观测数据中学习并可以基于其进行预测的算法。 听起来真的很花哨,对不对? 就像人工智能一样,您的计算机内部也有动荡的大脑。 但实际上,这些技术通常非常简单。
那么什么是机器学习? 好吧,如果您在维基百科上或其他任何内容上查找它,就会说这是一种可以从观测数据中学习并可以基于其进行预测的算法。 听起来真的很花哨,对不对? 就像人工智能一样,您的计算机内部也有动荡的大脑。 但实际上,这些技术通常非常简单。
我们已经研究了回归,在回归中我们获取了一组观测数据,为其拟合了一条线,并使用该线进行了预测。 因此,根据我们的新定义,那就是机器学习! 您的大脑也是如此。
......@@ -73,9 +73,9 @@
# K 折交叉验证
现在有一个解决这个问题的方法,称为 K 折交叉验证,我们将在本书的后面看到一个示例,但是基本概念是您需要多次训练/测试。 因此,您实际上将数据不仅分为一个训练集和一个测试集,还分为多个随机分配的段,即 k 个段。 那就是 k 的来源。 然后将其中一个细分保留为测试数据,然后开始在其余细分上训练模型,并根据测试数据集衡量其性能。 然后,您可以从这些训练集模型的每个结果中获得平均表现,并获得其 R 平方平均得分。
现在有一个解决这个问题的方法,称为 K 折交叉验证,我们将在本书的后面看到一个示例,但是基本概念是您需要多次训练/测试。 因此,您实际上将数据不仅分为一个训练集和一个测试集,还分为多个随机分配的段,即`k`个段。 那就是 k 的来源。 然后将其中一个细分保留为测试数据,然后开始在其余细分上训练模型,并根据测试数据集衡量其性能。 然后,您可以从这些训练集模型的每个结果中获得平均表现,并获得其 R 平方平均得分。
这样一来,您实际上是在对数据的不同部分进行训练,并使用相同的测试集对其进行测量,如果您的模型过度适合您的训练数据的特定部分,则其他模型会将其平均化 有助于 k 倍交叉验证的产品。
这样一来,您实际上是在对数据的不同部分进行训练,并使用相同的测试集对其进行测量,如果您的模型过度适合您的训练数据的特定部分,则其他模型会将其平均化 有助于 K 折交叉验证的产品。
这是 K 折交叉验证步骤:
......@@ -783,7 +783,7 @@ print clf.predict([[10, 0, 4, 0, 0, 0]])
我想指出的是,SVM 是一种监督学习技术。 因此,我们实际上将在一组训练数据上对其进行训练,并且我们可以使用它来对未来看不见的数据或测试数据进行预测。 它与 K 均值聚类有点不同,并且 K 均值完全不受监督。 相比之下,使用支持向量机,它是根据实际训练数据进行训练的,其中您可以对可以学习的某些数据集进行正确分类的答案。 因此,如果您愿意,SVM 对于分类和群集很有用-但这是一种监督技术!
您经常在 SVM 中看到的一个示例是使用一种称为支持向量分类的方法。 典型示例使用 Iris 数据集,该数据集是 scikit-learn 附带的示例数据集之一。 这组是对不同花朵的分类,对不同鸢尾花及其物种的不同观察。 想法是使用有关每朵花的花瓣的长度和宽度以及每朵花的萼片的长度和宽度的信息对这些信息进行分类。 (显然,萼片是花瓣下面的一个支撑结构。到目前为止,我也不知道。)那里有四个维度的属性;每个维度都有一个维度。 你有花瓣的长度和宽度,以及萼片的长度和宽度。 给定该信息,您可以使用它来预测虹膜的种类。
您经常在 SVM 中看到的一个示例是使用一种称为支持向量分类的方法。 典型示例使用鸢尾花数据集,该数据集是 scikit-learn 附带的示例数据集之一。 这组是对不同花朵的分类,对不同鸢尾花及其物种的不同观察。 想法是使用有关每朵花的花瓣的长度和宽度以及每朵花的萼片的长度和宽度的信息对这些信息进行分类。 (显然,萼片是花瓣下面的一个支撑结构。到目前为止,我也不知道。)那里有四个维度的属性;每个维度都有一个维度。 你有花瓣的长度和宽度,以及萼片的长度和宽度。 给定该信息,您可以使用它来预测虹膜的种类。
以下是使用 SVC 进行此操作的示例:基本上,我们将萼片宽度和萼片长度投影到了二维,因此我们可以对其进行可视化显示:
......
......@@ -446,7 +446,7 @@ print simCandidates.head(10)
让我们开始进一步完善这些结果。 我们看到我们正在获得重复的值。 如果我们所拍的电影与我所评价的不止一部电影相似,那么它将在结果中返回不只一次,因此我们希望将它们组合在一起。 如果我确实有同一部电影,也许应该将它们加在一起,形成一个综合的,更强的推荐评分。 例如,《绝地武士》的回归与《星球大战》和《帝国反击战》都很相似。 我们该怎么做?
# 使用 groupby 命令合并行
# 使用`groupby`命令合并行
我们将继续进行探索。 我们将再次使用`groupby`命令将同一电影的所有行组合在一起。 接下来,我们将总结它们的相关性得分并查看结果:
......@@ -463,11 +463,11 @@ simCandidates.head(10)
嘿,看起来真不错!
因此`Return of the Jedi (1983)`的得分最高,为 7,`Raiders of the Lost Ark (1981)`以 5 分紧随其后,然后我们开始进入`Indiana Jones and the Last Crusade (1989)`,还有更多电影`The Bridge on the River Kwai (1957)`[ `Back to the Future (1985),` `The Sting (1973`)。 这些都是我真正喜欢看的电影! 您知道,我实际上也确实喜欢老式的迪斯尼电影,因此`Cinderella (1950)`并不像看起来那样疯狂。
因此`Return of the Jedi (1983)`的得分最高,为 7,`Raiders of the Lost Ark (1981)`以 5 分紧随其后,然后我们开始进入`Indiana Jones and the Last Crusade (1989)`,还有更多电影`The Bridge on the River Kwai (1957)``Back to the Future (1985),` `The Sting (1973`)。 这些都是我真正喜欢看的电影! 您知道,我实际上也确实喜欢老式的迪斯尼电影,因此`Cinderella (1950)`并不像看起来那样疯狂。
我们需要做的最后一件事是过滤掉我已经评分过的电影,因为推荐你已经看过的电影没有意义。
# 使用 drop 命令删除条目
# 使用`drop`命令删除条目
因此,我可以使用以下代码迅速删除原始评分系列中的所有行:
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
......@@ -54,7 +54,7 @@
在本书中,您会发现许多可以区分不同类型信息的文本样式。 以下是这些样式的一些示例,并解释了其含义。
文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字显示如下:“ `json.load()`函数将数据加载到 Python 中。”
文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字显示如下:“`json.load()`函数将数据加载到 Python 中。”
任何命令行输入或输出的编写方式如下:
......
......@@ -577,7 +577,7 @@ T 检验用于将总体平均值与样本进行比较,或在样本量小于 30
```
输出中的第一个值是计算出的 t 统计量,而第二个值是 p 值,p 值表明这两个分布不相同。
输出中的第一个值是计算出的 T 统计量,而第二个值是 p 值,p 值表明这两个分布不相同。
# F 分布
......
......@@ -29,7 +29,7 @@
从上图可以看到,有训练数据,机器学习模型将从中学习。
让我们假设训练数据是一组代表不同新闻文章的文本。 这些新闻文章可以与体育新闻,国际新闻,国家新闻以及其他各种新闻类别相关。 这些类别将充当我们的标签。 从该训练数据中,我们将得出特征向量,其中每个单词可以是一个向量,或者某些向量可以从文本中得出。 例如,单词“ Football”的实例数可以是向量,或者单词“总理”的实例数也可以是向量。
让我们假设训练数据是一组代表不同新闻文章的文本。 这些新闻文章可以与体育新闻,国际新闻,国家新闻以及其他各种新闻类别相关。 这些类别将充当我们的标签。 从该训练数据中,我们将得出特征向量,其中每个单词可以是一个向量,或者某些向量可以从文本中得出。 例如,单词“Football”的实例数可以是向量,或者单词“总理”的实例数也可以是向量。
这些特征向量和标签被馈送到机器学习算法,该算法从数据中学习。 训练完模型后,将其用于新数据,然后再次提取特征,然后将其输入到模型中,从而生成目标数据。
......
......@@ -732,7 +732,7 @@ TensorFlow 最初由 Google Brain 团队开发,可在 Google 内部使用,
# 难的
**Keras** 是使用 Python 编写的极简和高度模块化的神经网络库,能够在 TensorFlow(由 Google 发布的用于数值计算的源软件库)以及 Microsoft Cognitive Toolkit(以前称为“ CNTK),Theano 或 MXNet。 它的主要开发者和维护者是 FrançoisChollet,他是 Google 的机器学习研究人员:
**Keras** 是使用 Python 编写的极简和高度模块化的神经网络库,能够在 TensorFlow(由 Google 发布的用于数值计算的源软件库)以及 Microsoft Cognitive Toolkit(以前称为“CNTK),Theano 或 MXNet。 它的主要开发者和维护者是 FrançoisChollet,他是 Google 的机器学习研究人员:
* [**网站**](https://keras.io/)
* **打印时的版本**:2.2.0
......@@ -867,7 +867,7 @@ $> pip install jupyter
$> jupyter notebook
```
在浏览器中打开 Jupyter 实例后,单击“新建”按钮。 在“笔记本”部分中,选择“ Python 3”(该部分中可能存在其他内核,具体取决于您安装的内核)。
在浏览器中打开 Jupyter 实例后,单击“新建”按钮。 在“笔记本”部分中,选择“Python 3”(该部分中可能存在其他内核,具体取决于您安装的内核)。
此时,您的新空白笔记本将如下图所示:
......@@ -1344,7 +1344,7 @@ In: print (housing[0,:3], 'n', housing_int[0,:3]) Out: [ 6.32000000e-03 1.80
通常,尽管在我们的示例中情况并非总是如此,但文本标题第一行中的文件数据特征包含变量的名称。 在这种情况下,被跳过的参数将指出`loadtxt`文件中的行,从该行开始读取数据。 作为`0`行的标头(在 Python 中,计数始终从 0 开始),`skip=1`参数将节省一天的时间,并允许您避免错误并无法加载数据。
如果要下载位于[这个页面](http://mldata.org/repository/data/viewslug/datasets-uci-iris/) Iris 数据集,情况将略有不同。 实际上,此数据集提供了定性目标变量`class`,它是表达虹膜种类的字符串。 具体来说,它是具有四个级别的类别变量。
如果要下载位于[这个页面](http://mldata.org/repository/data/viewslug/datasets-uci-iris/)鸢尾花数据集,情况将略有不同。 实际上,此数据集提供了定性目标变量`class`,它是表达虹膜种类的字符串。 具体来说,它是具有四个级别的类别变量。
因此,如果要使用`loadtxt`函数,则将出现值错误,因为数组必须具有相同类型的所有元素。 变量类是一个字符串,而其他变量则由浮点值组成。
......@@ -1352,7 +1352,7 @@ In: print (housing[0,:3], 'n', housing_int[0,:3]) Out: [ 6.32000000e-03 1.80
首先,只需下载`datasets-uci-iris.csv`文件并将其保存在本地目录中。
可以从[这个页面](http://archive.ics.uci.edu/ml/machine-learning-databases/iris/)下载数据集。 该档案库是 UC Irvine 机器学习存储库,目前存储着 440 个数据集,作为对机器学习社区的服务。 除了该 Iris 数据集之外,您还可以自由下载并尝试使用存储库中存在的任何其他数据集。
可以从[这个页面](http://archive.ics.uci.edu/ml/machine-learning-databases/iris/)下载数据集。 该档案库是 UC Irvine 机器学习存储库,目前存储着 440 个数据集,作为对机器学习社区的服务。 除了该鸢尾花数据集之外,您还可以自由下载并尝试使用存储库中存在的任何其他数据集。
此时,使用Pandas的`read_csv`非常简单:
......
......@@ -327,7 +327,7 @@ In: with open(iris_filename, 'rt') as data_stream:
在这里,代码更加简单,输出也更加简单,提供了一个包含序列中行值的列表。
至此,基于第二段代码,我们可以创建一个可从 for 循环迭代中调用的生成器。 这将从函数的批量参数定义的大小的块中的文件中即时获取数据:
至此,基于第二段代码,我们可以创建一个可从`for`循环迭代中调用的生成器。 这将从函数的批量参数定义的大小的块中的文件中即时获取数据:
```py
In: def batch_read(filename, batch=5):
......@@ -1067,7 +1067,7 @@ In: from sklearn.feature_extraction.text import HashingVectorizer
对《美丽汤》的完整描述将需要整本书。 在这里,我们只会看到一些。 首先,BeautifulSoup 不是爬虫。 为了下载网页,我们可以(例如)使用`urllib`库:
1. 让我们在 Wikipedia 上下载 William Shakespeare 页面背后的代码:
1. 让我们在维基百科上下载 William Shakespeare 页面背后的代码:
```py
In: import urllib.request
......@@ -1088,7 +1088,7 @@ In: soup.title Out: <title>William Shakespeare - Wikipedia,
the free encyclopedia</title>
```
如您所见,将返回整个标题标签,从而可以更深入地研究嵌套的 HTML 结构。 如果我们想知道与威廉·莎士比亚的维基百科页面相关的类别怎么办? 只需反复下载和解析相邻页面,创建条目图可能非常有用。 我们应该首先手动分析 HTML 页面本身,以找出包含我们所寻找信息的最佳 HTML 标签是什么。 请记住这里的*没有免费午餐*定理:没有自动发现功能,此外,如果 Wikipedia 修改其格式,事情可能会改变。
如您所见,将返回整个标题标签,从而可以更深入地研究嵌套的 HTML 结构。 如果我们想知道与威廉·莎士比亚的维基百科页面相关的类别怎么办? 只需反复下载和解析相邻页面,创建条目图可能非常有用。 我们应该首先手动分析 HTML 页面本身,以找出包含我们所寻找信息的最佳 HTML 标签是什么。 请记住这里的*没有免费午餐*定理:没有自动发现功能,此外,如果维基百科修改其格式,事情可能会改变。
经过手动分析,我们发现类别位于名为`'mw-normal-catlinks'`的 div 中; 除了第一个链接,其他所有都可以。 现在,该进行编程了。 让我们将观察到的内容放入一些代码中,为每个类别打印链接页面的标题及其相对链接:
......@@ -1108,7 +1108,7 @@ In: section = soup.find_all(id='mw-normal-catlinks')[0]
我们已经使用`find_all`方法两次来查找带有参数中包含文本的所有 HTML 标签。 在第一种情况下,我们专门在寻找 ID。 在第二种情况下,我们正在寻找所有的`"a"`标签。
然后,根据给定的输出,并使用与新 URL 相同的代码,可以递归下载 Wikipedia 类别页面,此时到达祖先类别。
然后,根据给定的输出,并使用与新 URL 相同的代码,可以递归下载维基百科类别页面,此时到达祖先类别。
关于抓取的最后一点:永远不要总是禁止这种做法,在这种情况下,请记住调低下载速率(高速率时,网站的服务器可能会认为您正在进行小规模的 DoS 攻击, 最终可能会将其列入黑名单/禁止您的 IP 地址)。 有关更多信息,您可以阅读网站的条款和条件,或直接联系管理员。
......@@ -1135,7 +1135,7 @@ Python 提供了本机数据结构,例如列表和字典,您应尽量使用
NumPy 提供了具有以下属性的`ndarray`对象类(n 维数组):
* 它是内存最佳的(除了其他方面,还配置为以性能最佳的内存块布局将数据传输到 C 或 Fortran 例程)
* 它允许进行快速的线性代数计算(向量化)和逐元素运算(广播),而无需使用带有 for 循环的迭代
* 它允许进行快速的线性代数计算(向量化)和逐元素运算(广播),而无需使用带有`for`循环的迭代
* 诸如 SciPy 或 Scikit-learn 之类的关键库期望数组作为其功能正常运行的输入
所有这些都有一些限制。 实际上,`ndarray`对象具有以下缺点:
......
......@@ -330,7 +330,7 @@ In: pca_95pc = PCA(n_components=0.95)
# 大数据 PCA –随机 PCA
PCA 的主要问题是进行还原操作的基础**奇异值分解****SVD**)算法的复杂性,使得整个过程很难扩展。 Scikit 学习中有一种基于随机 SVD 的更快算法。 这是一种较轻但近似的迭代分解方法。 使用随机 SVD,全秩重构并不完美,并且在每次迭代过程中都对基向量进行了局部优化。 另一方面,它只需要几个步骤就可以得到一个很好的近似值,证明了随机 SVD 比传统 SVD 算法要快得多。 因此,如果训练数据集很大,则此约简算法是一个不错的选择。 在以下代码中,我们将其应用于 Iris 数据集。 由于问题的规模很小,因此输出非常接近经典 PCA。 但是,将算法应用于大型数据集时,结果会有很大不同:
PCA 的主要问题是进行还原操作的基础**奇异值分解****SVD**)算法的复杂性,使得整个过程很难扩展。 Scikit 学习中有一种基于随机 SVD 的更快算法。 这是一种较轻但近似的迭代分解方法。 使用随机 SVD,全秩重构并不完美,并且在每次迭代过程中都对基向量进行了局部优化。 另一方面,它只需要几个步骤就可以得到一个很好的近似值,证明了随机 SVD 比传统 SVD 算法要快得多。 因此,如果训练数据集很大,则此约简算法是一个不错的选择。 在以下代码中,我们将其应用于鸢尾花数据集。 由于问题的规模很小,因此输出非常接近经典 PCA。 但是,将算法应用于大型数据集时,结果会有很大不同:
```py
In: from sklearn.decomposition import PCA
......@@ -352,7 +352,7 @@ Out: 0.97763177502480414
**潜在因子分析****LFA**)是另一种帮助您降低数据集维数的技术。 总体思路类似于 PCA。 但是,在这种情况下,输入信号没有正交分解,因此没有输出基础。 一些数据科学家认为 LFA 是 PCA 的概括,它消除了正交性的约束。 通常,当预期在系统中存在潜在因子或构建体时,将使用 LFA。 在这种假设下,所有特征都是对变量的观察,这些变量是由线性变换的潜因子导出或影响的,并且具有**任意波形发生器****AWG**)噪声。 通常假设潜因子具有高斯分布和一元协方差。 因此,在这种情况下,不是破坏信号的能量/方差,而是在输出数据集中说明变量之间的协方差。 Scikit-learn 工具箱实现了迭代算法,使其适用于大型数据集。
下面的代码通过假设系统中的两个潜在因素来降低 Iris 数据集的维数:
下面的代码通过假设系统中的两个潜在因素来降低鸢尾花数据集的维数:
```py
In: from sklearn.decomposition import FactorAnalysis
......@@ -372,7 +372,7 @@ In: from sklearn.decomposition import FactorAnalysis
严格来说,**线性判别分析****LDA**)是分类器(现代统计之父 Ronald Fisher 开发的一种经典统计方法),但通常用于降维。 它不能很好地扩展到较大的数据集(像许多统计方法一样),但这是有待尝试的方法,它可以带来比其他分类方法(例如逻辑回归)更好的结果。 由于这是一种有监督的方法,因此需要标签集来优化减少步骤。 LDA 输出输入要素的线性组合,从而尝试对最好区分它们的类之间的差异进行建模(因为 LDA 使用标签信息)。 与 PCA 相比,在 LDA 的帮助下获得的输出数据集包含了类之间的精妙区别。 但是,它不能用于回归问题,因为它来自分类过程。
这是 LDA 在 Iris 数据集上的应用:
这是 LDA 在鸢尾花数据集上的应用:
```py
In: from sklearn.lda import LDA
......@@ -463,7 +463,7 @@ In: from sklearn.decomposition import KernelPCA
PCA 是一种广泛的降维技术,但是当我们处理大数据并呈现许多功能时,我们首先需要了解*特征空间中*的情况。 实际上,在 EDA 阶段,您通常会对数据进行几次散点图绘制,以了解要素之间的关系。 在这一点上,T 分布随机邻居嵌入或 T-SNE 可以为您提供帮助,因为它的设计目标是将高维数据嵌入 2D 或 3D 空间中以充分利用 散点图。 它是由 Laurens van der Maaten 和 Geoffrey Hinton 开发的一种非线性降维技术,该算法的核心是基于两个规则:第一个是周期性的相似观测必须对输出有更大的贡献(这是通过概率实现的)。 分配功能); 其次,高维空间中的分布必须类似于小空间中的分布(这是通过最小化 **Kullback-Leibler****KL** 来实现的),两者之间的差异 概率分布函数)。 输出在视觉上是不错的,并允许您猜测要素之间的非线性相互作用。
让我们通过将 T-SNE 应用于 Iris 数据集并将其绘制到二维空间来查看一个简单的示例如何工作:
让我们通过将 T-SNE 应用于鸢尾花数据集并将其绘制到二维空间来查看一个简单的示例如何工作:
```py
In: from sklearn.manifold import TSNE
......@@ -1183,7 +1183,7 @@ In: h1.fit(X[train_idx],y[train_idx])
在其他最有用的迭代器中,值得一提的是:
* `StratifiedKFold`的工作方式与`Kfold`相似,但它始终返回与训练集大致相同的班级百分比的折叠。 这样可以使每个折痕保持平衡; 因此,学习者适合正确的课堂比例。 代替案例数,它需要输入目标变量 y 作为输入参数。 如上一节所述,默认情况下,迭代器包装在`cross_val_score`函数中。
* `LeaveOneOut`的工作方式类似于`Kfold`,但它仅作为一个观测值的验证集返回。 因此,最后,折叠数将等于训练集中的示例数。 我们建议您仅在训练集严重不平衡(例如,在欺诈检测问题中)或很小的训练集时使用此交叉验证方法,尤其是在观察值少于 100 的情况下– k 倍验证会减少训练集 很多。
* `LeaveOneOut`的工作方式类似于`Kfold`,但它仅作为一个观测值的验证集返回。 因此,最后,折叠数将等于训练集中的示例数。 我们建议您仅在训练集严重不平衡(例如,在欺诈检测问题中)或很小的训练集时使用此交叉验证方法,尤其是在观察值少于 100 的情况下– K 倍验证会减少训练集 很多。
* `LeavePOut``LeaveOneOut`的优点和局限性方面相似,但其验证集由 P 个案例组成。 因此,总折叠数将是所有可用案例中 P 个案例的组合(随着数据集大小的增长,实际上可能是相当大的数量)。
* `LeaveOneLabelOut`提供了一种方便的方法,可根据您预先准备或计算的方案进行交叉验证。 实际上,它的行为类似于`Kfolds`,但是对于折叠已经被标记并提供给标签参数这一事实。
* `LeavePLabelOut``LeaveOneLabelOut`的变体。 在这种情况下,根据您事先准备的方案,测试折痕由许多标签组成。
......@@ -1556,7 +1556,7 @@ In: from sklearn.feature_selection import VarianceThreshold
为了使过程自动化,还有一些可用的选择例程:
* `SelectKBest`基于测试的分数,采用 k 个最佳变量。
* `SelectKBest`基于测试的分数,采用`k`个最佳变量。
* 根据测试分数,`SelectPercentile`占执行变量的最高百分比。
* 根据测试的 p 值,选择`SelectFpr`(假阳性率测试),`SelectFdr`(假发现率测试)和`SelectFwe`(家庭错误率程序)。
......
......@@ -182,7 +182,7 @@ y_pred[i] = sign(X[i] * W)
现在让我们尝试高斯朴素贝叶斯分类器的应用示例。 此外,本章结尾给出了文本分类的示例。 您可以通过简单地将示例的 SGDClassifier 替换为 MultinomialNB 来与 Naive Bayes 一起测试它。
在以下示例中,假设要素为高斯要素,我们将使用 Iris 数据集:
在以下示例中,假设要素为高斯要素,我们将使用鸢尾花数据集:
```py
In: from sklearn import datasets
......@@ -1371,7 +1371,7 @@ In: import nltk
./.)
```
对猫王的 Wikipedia 页面的摘录进行了分析和 NER 处理。 此处列出了 NER 认可的一些实体:
对猫王的维基百科页面的摘录进行了分析和 NER 处理。 此处列出了 NER 认可的一些实体:
* **埃尔维斯·亚伦·普雷斯利**:PERSON
* **美国人**:GPE(地缘政治实体)
......@@ -1678,7 +1678,7 @@ In: new_doc = "I've shown the doctor my new car. He loved its big wheels!"
0.008*think + 0.008*cars + 0.007*msg
```
两个主题的得分都在 0.5 和 0.5 左右,这意味着句子包含了主题`car``medicine`的良好平衡。 我们在这里显示的只是两个主题的示例; 但是由于执行库 Gensim,相同的实现也可以在几小时内分配整个英语 Wikipedia 的进程。
两个主题的得分都在 0.5 和 0.5 左右,这意味着句子包含了主题`car``medicine`的良好平衡。 我们在这里显示的只是两个主题的示例; 但是由于执行库 Gensim,相同的实现也可以在几小时内分配整个英语维基百科的进程。
Word2Vec 算法提供了与 LDA 不同的方法,Word2Vec 算法是一种用于在向量中嵌入单词的最新模型。 与 LDA 相比,Word2Vec 跟踪句子中单词的位置,并且此附加上下文有助于更好地消除某些单词的歧义。 Word2Vec 使用类似于深度学习的方法进行培训,但是 Gensim 库提供的实现使培训和使用变得非常容易。 请注意,虽然 LDA 旨在理解文档中的主题,但 Word2Vec 在单词级别起作用,并试图了解低维空间中单词之间的语义关系(即,为每个单词创建一个 n 维向量) 。 让我们看一个例子,使事情变得清楚。
......
......@@ -209,7 +209,7 @@ bins = (max-min) / h
条形图对于比较不同类别的数量很有用。 它们可以水平或垂直排列以呈现平均估计和误差带。 它们可用于显示预测变量的各种统计数据以及它们与目标变量的关系。
在我们的示例中,我们将给出 Iris 数据集的四个变量的平均值和标准差:
在我们的示例中,我们将给出鸢尾花数据集的四个变量的平均值和标准差:
```py
In: from sklearn.datasets import load_iris
......@@ -422,7 +422,7 @@ In: from pandas.plotting import scatter_matrix
散点图矩阵可以通知您有关要素的联合分布。 它可以帮助您找到数据中的组并验证它们是否可区分。 平行坐标是另一种绘图,有助于为您提供有关数据中存在的最多区分组变量的提示。
通过将所有观测值相对于所有可能的变量绘制为平行线(在横坐标上任意对齐),平行坐标将帮助您发现是否有观测流分组为您的类,并了解最能区分这些流的变量( 最有用的预测变量)。 自然地,为了使图表有意义,图中的要素应具有与 Iris 数据集相同的比例尺(否则将其标准化):
通过将所有观测值相对于所有可能的变量绘制为平行线(在横坐标上任意对齐),平行坐标将帮助您发现是否有观测流分组为您的类,并了解最能区分这些流的变量( 最有用的预测变量)。 自然地,为了使图表有意义,图中的要素应具有与鸢尾花数据集相同的比例尺(否则将其标准化):
```py
In: from pandas.tools.plotting import parallel_coordinates
......@@ -967,7 +967,7 @@ Bottle 是一个 Python 网络框架,是 HTTP 上微型应用程序的起点
现在,我们需要为此调用创建一个路由,这就是我们在`do_prediction`函数中所做的。 它的装饰器是/ prediction 页面上的`post`(即与`get`相反;它仅定义`POST`路由)。 数据被解析并转换为 double(默认参数为字符串),然后将特征向量馈送到`classifier`全局变量中以获得预测。 这是使用简单模板返回的。 对象请求包含传递给服务的所有参数,包括我们 *POST* 到路由的整个变量。 最后,似乎我们只需要定义全局变量分类器-即在虹膜数据集上训练的分类器-最后,我们可以调用`run`函数。
对于此虚拟示例,我们将逻辑回归器用作分类器,并在完整的 Iris 数据集上进行训练,而所有参数均保留为默认值。 在实际情况下,这里您将尽可能优化分类器。
对于此虚拟示例,我们将逻辑回归器用作分类器,并在完整的鸢尾花数据集上进行训练,而所有参数均保留为默认值。 在实际情况下,这里您将尽可能优化分类器。
运行此代码后,如果一切正常,则可以将浏览器指向`http://localhost:9099/predict`,您会看到以下表格:
......
......@@ -203,8 +203,8 @@ IBM Watson 在 Jeopardy 中与 Ken Jennings 和 Brad Rutter 作战!
* **焦点**:问题是什么?
* **词汇答案类型**(**LAT**):预期答案的类型是什么,例如,一个人,一个地点等。 在为候选答案评分时,此信息非常重要,因为它为与 LAT 不匹配的答案提供了早期过滤器。
* **命名实体解析**:这将实体解析为标准化名称,例如,“ Big Apple”到“ New York”。
* **回指解析度**:这将代词与该问题的先前用语联系起来,例如,句子“ 1715 年 9 月 1 日,路易十四死于这座城市,一个神话般的宫殿”所建立的代词“他”是指路易十四。
* **命名实体解析**:这将实体解析为标准化名称,例如,“Big Apple”到“New York”。
* **回指解析度**:这将代词与该问题的先前用语联系起来,例如,句子“1715 年 9 月 1 日,路易十四死于这座城市,一个神话般的宫殿”所建立的代词“他”是指路易十四。
* **关系检测**:这可以检测问题中的关系,例如,“她与乔·迪马焦在 1954 年离婚”,其中的关系是“乔·迪马焦已婚 X”。 这些类型的关系(Subject- > Predicate- > Object)可用于查询三元组存储并产生高质量的候选答案。
* **问题类别**:这会将问题映射到 *Jeopardy* 中使用的预定义类型之一,例如,类事实,多项选择题,难题等。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册