提交 f9fb715c 编写于 作者: W wizardforcel

2021-03-11 21:52:16

上级 d43f92b3
......@@ -228,7 +228,7 @@ Array[10 10 10 10]
Pandas库由 Wes McKinny 在 AQR Capital Management 工作时开发。 他想要一种足够灵活的工具来对财务数据进行定量分析。 后来,Chang She 加入了他,并帮助进一步开发了该软件包。
Pandas 库是一个开源代码 Python 库,专门用于数据分析。 它建立在 NumPy 上,可以轻松处理数据。 NumPy 是一个相当底层的工具,可以很好地处理矩阵。
Pandas 库是一个开源代码 Python 库,专门用于数据分析。 它建立在 NumPy 上,可以轻松处理数据。 NumPy 是一个相当底层的工具,可以很好地处理矩阵。
Pandas 库在 Python 世界中带来了 R 的丰富功能,可以处理数据。 它具有高效的数据结构,可以处理数据,执行快速连接以及从各种来源读取数据,仅举几例。
......
......@@ -174,7 +174,7 @@ $> easy_install --version
最后,要搜索和浏览可用于 Python 的 Python 软件包,请查看 [pypi.org](https://pypi.org/)
# 套餐升级
# 包的升级
很多时候,您会发现自己不得不升级软件包,因为依赖项需要新版本,或者它具有您要使用的其他功能。 首先,通过浏览`__version__`属性来检查已安装的库的版本,如以下示例`numpy`所示:
......@@ -207,7 +207,7 @@ $> pip install -U numpy
$> easy_install --upgrade numpy
```
# 科学发行
# 科学发行
到目前为止,您已经了解到,创建工作环境对于数据科学家而言是一项耗时的操作。 首先,您需要安装 Python,然后可以一个接一个地安装所有需要的库(有时,安装过程可能不如您先前希望的那样顺利)。
......@@ -215,7 +215,7 @@ $> easy_install --upgrade numpy
我们建议您首先立即下载并安装科学发行版,例如 Anaconda(这是最完整的发行版),然后在练习本书中的示例之后,决定是否完全卸载发行版并单独设置 Python。 可以仅随附项目所需的软件包。
# 水蟒
# Anaconda
[**Anaconda**](https://www.anaconda.com/download/) 是 Continuum Analytics 提供的 Python 发行版,包含近 200 个软件包,其中包括 NumPy,SciPy,pandas,Jupyter ,Matplotlib,Scikit-learn 和 NLTK。 它是一个跨平台发行版(Windows,Linux 和 macOS),可以安装在具有其他现有 Python 发行版和版本的计算机上。 它的基本版本是免费的。 相反,包含高级功能的加载项将单独收费。 Anaconda 引入了二进制软件包管理器`conda`,作为管理软件包安装的命令行工具。
......@@ -279,7 +279,7 @@ $> conda remove <package-name>
如果您想进一步了解`conda`,可以在[这个页面](http://conda.pydata.org/docs/index.html)阅读其文档。 总而言之,它的主要优点是处理二进制文件甚至比`easy_install`更好(通过始终在 Windows 上提供成功的安装,而无需从源代码编译软件包),但没有问题和局限性。 使用`conda`,程序包易于安装(安装始终成功),更新甚至卸载。 另一方面,`conda`无法直接从`git`服务器安装(因此它无法访问许多正在开发中的软件包的最新版本),并且它无法像`pip`本身那样涵盖 PyPI 上的所有可用软件包。
# 有思想的檐篷
# Enthought Canopy
[**Enthought Canopy**](https://www.enthought.com/products/canopy/) 是 Enthought Inc.的 Python 发行版本。它包含 200 多个预装的软件包,例如 NumPy, SciPy,Matplotlib,Jupyter 和Pandas。 此分发针对工程师,数据科学家,定量和数据分析师以及企业。 它的基本版本是免费的(称为 Canopy Express),但是如果您需要高级功能,则必须购买一个前端版本。 它是一个多平台发行版,其命令行安装工具为`canopy_cli`
......@@ -287,7 +287,7 @@ $> conda remove <package-name>
[**WinPython**](http://winpython.github.io/) 是由社区维护的免费开源 Python 发行版。 它是为科学家设计的,包括许多软件包,例如 NumPy,SciPy,Matplotlib 和 Jupyter。 它还包括 Spyder 作为 IDE。 它是免费和便携式的。 您可以将 WinPython 放入任何目录,甚至可以放入 USB 闪存驱动器,同时在系统上维护它的多个副本和版本。 它仅适用于 Microsoft Windows,其命令行工具为 **WinPython 程序包管理器****WPPM**)。
# 解释虚拟环境
# 虚拟环境
无论您是选择安装独立的 Python 还是使用科学发行版,您都可能已经注意到您实际上已在系统上绑定到已安装的 Python 版本。 对于 Windows 用户,唯一的例外是使用 WinPython 发行版,因为它是可移植的安装,您可以根据需要进行任意多个安装。
......@@ -418,7 +418,7 @@ $> deactivate
$> conda remove -n python36 --all
```
# 一览基本包装
# 基本包一览
前面我们提到过,Python 的两个最相关的特征是它与其他语言集成的能力和成熟的软件包系统,而 PyPI(Python 软件包索引: [pypi.org](https://pypi.org/) )很好地体现了这一点。 大多数 Python 开源软件包的存储库,这些软件包不断维护和更新。
......@@ -442,7 +442,7 @@ import numpy as np
在本书的整个过程中,我们都会这样做。
# 科学
# SciPy
SciPy 由 Travis Oliphant,Pearu Peterson 和 Eric Jones 共同发起的原始项目完善了 NumPy 的功能,该功能为线性代数,稀疏矩阵,信号和图像处理,优化,快速傅立叶变换等提供了更多科学算法:
......@@ -464,7 +464,7 @@ Pandas软件包处理 NumPy 和 SciPy 无法执行的所有操作。 借助其
import pandas as pd
```
# Pandas分析
# Pandas 分析
这是一个 GitHub 项目,可以轻松地从 Pandas `DataFrame`创建报告。 该软件包将在交互式 HTML 报告中提供以下措施,该报告用于评估数据科学项目中的手头数据:
......@@ -491,7 +491,7 @@ import pandas as pd
请注意,导入的模块名为`sklearn`
# 朱皮特
# Jupyter
科学方法要求以可重复的方式对不同的假设进行快速实验。 Jupyter 最初命名为 IPython,并且仅限于使用 Python 语言,它是由 Fernando Perez 创建的,旨在满足对具有图形化集成的交互式 Python 命令 shell(基于 shell,Web 浏览器和应用程序界面)的需求。 ,可自定义的命令,丰富的历史记录(以 JSON 格式)和计算并行性以提高性能。 Jupyter 是本书中我们最喜欢的选择。 它用于清楚有效地说明脚本和数据的操作及其结果:
......@@ -537,7 +537,7 @@ import matplotlib.pyplot as plt
import seaborn as sns
```
# 状态模型
# `statsmodels`
`statsmodels`以前是 SciKits 的一部分,被认为是 SciPy 统计功能的补充。 它具有广义线性模型,离散选择模型,时间序列分析,一系列描述性统计以及参数和非参数测试:
......@@ -545,7 +545,7 @@ import seaborn as sns
* **打印时的版本**:0.9.0
* **建议的安装命令**`pip install statsmodels`
# 美丽的汤
# BeautifulSoup
**BeautifulSoup** 是 Leonard Richardson 的作品,是一种从 HTML 和 XML 文件中提取数据的出色工具,这些文件是从互联网检索的。 即使在*标签的汤*(因此得名)的情况下,它的效果也非常好,这些汤是畸形,矛盾和不正确标签的集合。 选择解析器(Python 标准库中包含的 HTML 解析器可以正常工作)之后,借助 BeautifulSoup,您可以浏览页面中的对象并提取文本,表格和其他可能有用的信息:
......@@ -555,7 +555,7 @@ import seaborn as sns
请注意,导入的模块名为`bs4`
# 网络 X
# NetworkX
**NetworkX** 由美国洛斯阿拉莫斯国家实验室开发,是专门用于创建,处理,分析和图形表示真实网络数据的程序包(它可以轻松地使用由一百万个节点组成的图形进行操作, 边缘)。 除了用于图形的专用数据结构和精细的可视化方法(2D 和 3D)之外,它还为用户提供了许多标准的图形度量和算法,例如最短路径,中心,组件,社区,聚类和 PageRank。 我们将在第 6 章,“社交网络分析”中主要使用此软件包:
......@@ -585,7 +585,7 @@ import networkx as nx
* **打印时的版本**:3.4.0
* **建议的安装命令**`pip install gensim`
# y
# PyPy
**PyPy** 不是软件包; 它是 Python 3.5.3 的替代实现,它支持大多数常用的 Python 标准软件包(不幸的是,当前尚未完全支持 NumPy)。 优点是,它可以提高速度和内存处理能力。 因此,对于大数据量的重型操作非常有用,它应该成为大数据处理策略的一部分:
......@@ -700,7 +700,7 @@ import lightgbm as lgbm
您也可以使用 MPI 构建用于并行计算体系结构,HDFS 或 GPU 版本的软件包。 您可以在[这个页面](https://github.com/Microsoft/LightGBM/blob/master/docs/Installation-Guide.rst)中找到所有详细说明。
# 猫助推器
# CatBoost
由 Yandex 研究人员和工程师开发的 **CatBoost**(代表**类别增强**)是一种基于决策树的梯度提升算法,该算法在处理类别特征方面进行了优化,无需太多预处理(非 -表示质量的数字特征,例如颜色,品牌或类型。 由于在大多数数据库中,大多数功能都是分类的,因此 CatBoost 确实可以提高预测结果:
......@@ -730,7 +730,7 @@ TensorFlow 最初由 Google Brain 团队开发,可在 Google 内部使用,
完成所有必要步骤后,`pip install tensorflow-gpu`将安装针对 GPU 计算优化的 TensorFlow 软件包。
# 难的
# Keras
**Keras** 是使用 Python 编写的极简和高度模块化的神经网络库,能够在 TensorFlow(由 Google 发布的用于数值计算的源软件库)以及 Microsoft Cognitive Toolkit(以前称为 CNTK),Theano 或 MXNet。 它的主要开发者和维护者是 FrançoisChollet,他是 Google 的机器学习研究人员:
......@@ -975,7 +975,7 @@ In: !pwd
/Users/mycomputer
```
# 直接从 Jupyter笔记本安装软件包
# 直接从 Jupyter 笔记本安装软件包
Jupyter 魔术命令在完成不同任务方面确实非常有效,但是有时您可能会发现在 Jupyter 会话期间很难安装新软件包(并且由于您使用的基于`conda``env`的不同环境,这种情况经常发生)。 正如 Jake VanderPlas 在他的博客文章中解释的那样,[《从 Jupyter 笔记本电脑安装 Python 软件包》](https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/),事实上,Jupyter 内核与您启动时使用的外壳不同,也就是说,当您发出魔术命令(例如`!pip install numpy``!conda install --yes numpy`)时,您可能会升级错误的环境 。
......@@ -1183,7 +1183,7 @@ $> rodeo .
所有提供的代码将在笔记本中提供,该笔记本可在 Packt 网站上找到(“前言”中指出)。 至于数据,我们将提供不同的数据集示例。
# Scikit-learn玩具数据集
# Scikit-learn 玩具数据集
Scikit-learn玩具数据集模块嵌入在 Scikit-learn包中。 这样的数据集可以通过`import`命令轻松地直接加载到 Python 中,并且不需要从任何外部互联网资源库中下载任何内容。 这种数据集的一些示例是鸢尾花,波士顿和数字数据集,以列举无数出版物和书籍中提到的主要数据集,以及一些用于分类和回归的其他经典数据集。
......@@ -1256,7 +1256,7 @@ In: import pandas as pd
无论如何,尽管它们对于您的学习活动有用且有趣,但是玩具数据集将开始限制您可以实现的各种不同实验的种类。 尽管提供了见解,但为了取得进展,您将需要访问复杂而现实的数据科学主题。 因此,我们将不得不求助于一些外部数据。
# MLdata.org 和其他开源数据的公共存储库
# MLdata.org 和其他开源数据的公共存储库
我们将提供的第二种示例数据集可以直接从机器学习数据集存储库或 **LIBSVM** 数据网站下载。 与以前的数据集相反,在这种情况下,您将需要访问互联网。
......@@ -1279,7 +1279,7 @@ In: from sklearn.datasets import fetch_mldata
[LIBSVM 数据](http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/)是一个页面,可从许多其他集合中收集数据。 它由 LIBSVM 的作者之一 Chih-Jen LiN 维护,LIBSVM 是一种用于预测的支持向量机学习算法(`Chih-Chung Chang and Chih-Jen Lin, LIBSVM: a library for support vector machines. ACM Transactions on Intelligent Systems and Technology, 2:27:1--27:27, 2011`)。 这提供了以 LIBSVM 格式存储的不同回归,二进制和多标签分类数据集。 如果您想尝试使用支持向量机的算法,该存储库将非常有趣,并且再次免费供您下载和使用数据。
如果要加载数据集,请首先转到网页,您可以在该网页上可视化浏览器上的数据。 在我们的示例中,请访问[这个页面](http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/a1a)并记下地址(`a1a`是数据集 (最初来自 UC Irvine 机器学习存储库,另一个开源数据存储库)。 然后,您可以使用该地址执行直接下载:
如果要加载数据集,请首先转到网页,您可以在该网页上可视化浏览器上的数据。 在我们的示例中,请访问[这个页面](http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/a1a)并记下地址(`a1a`是数据集 (最初来自 UC Irvine 机器学习存储库,另一个开源数据存储库)。 然后,您可以使用该地址执行直接下载:
```py
In: import urllib2
......@@ -1378,7 +1378,7 @@ In: iris_data = iris.values[:,:4]
print (iris_data.shape, iris_target.shape) Out: (150, 4) (150,)
```
# Scikit-learn样本生成器
# Scikit-learn 样本生成器
作为最后的学习资源,Scikit-learn 软件包还提供了快速创建用于回归,二进制和多标签分类,聚类分析和降维的综合数据集的可能性。
......
......@@ -852,7 +852,7 @@ In: from sklearn.preprocessing import OneHotEncoder
基本上,`LabelEncoder`将文本映射到 0 到 N 的整数(请注意,在这种情况下,它仍然是类别变量,因为对其进行排名没有意义)。 现在,这五个值映射到五个二进制变量。
# 特殊类型的数据-文本
# 特殊类型的数据——文本
让我们介绍另一种类型的数据。 文本数据是机器学习算法的常用输入,因为它包含了我们语言中数据的自然表示形式。 它是如此丰富,它也包含了我们所寻找的答案。 处理文本时,最常见的方法是使用词袋方法。 根据这种方法,每个单词都成为一个特征,文本成为一个向量,其中包含体内所有特征(即单词)的非零元素。 给定一个文本数据集,特征数量是多少? 很简单。 只需提取其中的所有唯一单词并将其枚举即可。 对于使用所有英语单词的非常丰富的文本,该数字在 100 万范围内。 如果您不打算对其进行进一步处理(删除任何第三人称,缩写,缩略语和首字母缩写词),则可能会发现自己处理的不止这些,但这是非常罕见的情况。 用简单而简单的方法(这是本书的目标),我们让 Python 尽力而为。
......@@ -1052,7 +1052,7 @@ In: from sklearn.feature_extraction.text import HashingVectorizer
请注意,您不能反转哈希过程(因为它是摘要操作)。 因此,在完成此转换之后,您将必须按原样处理散列特征。 散列具有许多优点:允许将一袋单词快速转换为特征向量(在这种情况下,散列桶是我们的特征),可以轻松地在特征之间容纳从未见过的单词,并通过使不相关的单词在同一特征中碰撞在一起,来避免过拟合。
# 用美丽的汤刮网
# 使用 BeatifulSoup 爬取网络
在上一节中,鉴于已经有了数据集,我们讨论了如何对文本数据进行操作。 如果我们需要抓取网络并手动下载该怎么办? 这个过程的发生频率超出您的预期,这是数据科学中非常受欢迎的话题。 例如:
......@@ -1112,7 +1112,7 @@ In: section = soup.find_all(id='mw-normal-catlinks')[0]
关于抓取的最后一点:永远不要总是禁止这种做法,在这种情况下,请记住调低下载速率(高速率时,网站的服务器可能会认为您正在进行小规模的 DoS 攻击, 最终可能会将其列入黑名单/禁止您的 IP 地址)。 有关更多信息,您可以阅读网站的条款和条件,或直接联系管理员。
# 使用 NumPy 进行数据处理
# 使用 NumPy 数据处理
引入了基本的 Pandas 命令后,您可以在数据科学流水线的这一点上完全,小批量甚至单个数据行上载和预处理数据到内存中,您必须处理监督和非监督学习程序的数据矩阵来准备合适的数据。
......@@ -1662,7 +1662,7 @@ NumPy 还提供了一个对象类矩阵,它实际上是`ndarray`的子类,
然后,表示公式的代码将具有更高的可读性,因此变得更易于阅读和解释。 您将不再需要一起评估运算符(`+ - / *`)和方法(`.`),只需评估运算符(`+ - / * @`)。
您可以了解有关此介绍的更多信息(这只是形式上的-使用`.dot`方法可与`@`运算符一起使用之前可以应用的所有内容),并通过阅读 **Python** 查看一些应用示例。 [Python 基金会网站上的**增强提案**(**PEP465**)](https://www.python.org/dev/peps/pep-0465/)
# 使用 NumPy 数组进行切片和索引
# NumPy 数组的切片和索引
索引使我们可以通过指出要可视化的列和行的切片或索引来查看`ndarray`
......
......@@ -110,7 +110,7 @@ In: distr = iris.petal_width.plot(kind='hist', alpha=0.5, bins=20)
我们建议您探索所有功能,以检查它们之间的关系并估计其分布。 实际上,鉴于其分布,您可能决定对每个特征进行不同的处理,以便随后获得最大的分类或回归性能。
# 建立新功能
# 建立新特征
有时,您会发现自己与功能和`target`变量没有真正的联系。 在这种情况下,您可以修改输入数据集。 您可以应用线性或非线性变换来提高系统的精度,等等。 这是整个过程中非常重要的一步,因为它完全取决于数据科学家的技能,后者是人为地更改数据集并调整输入数据以更好地适合学习模型的人。 尽管此步骤直观地增加了复杂性,但是这种方法通常可以提高学习者的表现; 这就是为什么它被诸如深度学习之类的尖端技术所使用的原因。
......@@ -328,7 +328,7 @@ In: pca_95pc = PCA(n_components=0.95)
(150, 2)
```
# 大数据 PCA 随机 PCA
# 大数据 PCA ——随机 PCA
PCA 的主要问题是进行还原操作的基础**奇异值分解****SVD**)算法的复杂性,使得整个过程很难扩展。 Scikit-learn中有一种基于随机 SVD 的更快算法。 这是一种较轻但近似的迭代分解方法。 使用随机 SVD,全秩重构并不完美,并且在每次迭代过程中都对基向量进行了局部优化。 另一方面,它只需要几个步骤就可以得到一个很好的近似值,证明了随机 SVD 比传统 SVD 算法要快得多。 因此,如果训练数据集很大,则此约简算法是一个不错的选择。 在以下代码中,我们将其应用于鸢尾花数据集。 由于问题的规模很小,因此输出非常接近经典 PCA。 但是,将算法应用于大型数据集时,结果会有很大不同:
......@@ -348,7 +348,7 @@ Out: 0.97763177502480414
![](img/85b9e4e2-69eb-4703-90ed-285e78daae9d.png)
# 潜在因分析
# 潜在因分析
**潜在因子分析****LFA**)是另一种帮助您降低数据集维数的技术。 总体思路类似于 PCA。 但是,在这种情况下,输入信号没有正交分解,因此没有输出基础。 一些数据科学家认为 LFA 是 PCA 的概括,它消除了正交性的约束。 通常,当预期在系统中存在潜在因子或构建体时,将使用 LFA。 在这种假设下,所有特征都是对变量的观察,这些变量是由线性变换的潜因子导出或影响的,并且具有**任意波形发生器****AWG**)噪声。 通常假设潜因子具有高斯分布和一元协方差。 因此,在这种情况下,不是破坏信号的能量/方差,而是在输出数据集中说明变量之间的协方差。 Scikit-learn 工具箱实现了迭代算法,使其适用于大型数据集。
......@@ -586,7 +586,7 @@ Scikit-learn 软件包提供了两个类,这些类可以直接为您自动工
这两种课程都基于不同的统计和机器学习方法,需要在建模阶段进行了解和应用。
# 椭圆形信封
# `EllipticEnvelope`
`EllipticEnvelope`是一项函数,它通过假设您的整个数据是基础多元高斯分布的表达式来尝试找出数据总体分布的关键参数。 这个假设不能适用于所有数据集,但是当它成立时,就证明了一种发现异常值的有效方法。 我们可以说,它尽可能地简化了算法背后的复杂估计,它可以检查每个观测值相对于考虑到数据集中所有变量的均值的距离。 因此,它可以发现单变量和多变量离群值。
......@@ -710,7 +710,7 @@ In: # Draw the distribution and the detected outliers
在离开此示例之前,请注意,为了同时适合 PCA 和`EllipticEnvelope`,我们使用了一个名为`normalized_data`的数组,该数组仅包含标准化的连续数据集变量。 请始终注意,使用非标准化数据并将二进制或分类数据与连续数据混合可能会导致`EllipticEnvelope`算法的错误和近似估计。
# OneClassSVM
# `OneClassSVM`
由于`EllipticEnvelope`利用参数和统计假设拟合假设的高斯分布,因此`OneClassSVM`是一种机器学习算法,可从数据本身学习特征的分布,因此适用于多种情况,其中您希望能够捕获所有离群值以及异常数据示例。
......@@ -901,7 +901,7 @@ In: from sklearn.metrics import classification_report
在数据科学实践中,**精度****召回****准确率**更为广泛地使用,因为数据问题中的大多数数据集倾向于不平衡。 为了解决这种不平衡,数据科学家经常以**精度****召回****F1 分数**来表示其结果。 此外,我们必须注意**准确率****精度****召回****F1 分数**如何采用`[0.0, 1.0]`范围。 完美的分类器在所有这些指标上的得分都达到`1.0`(但是要当心任何完美的分类,如果太令人难以置信,请当心,因为这通常意味着出了点问题;现实世界中的数据问题永远不会有完美的解决方案)。
# 二进制分类
# 二分类
除了上一节中显示的错误度量之外,在只有两个输出类的问题中(例如,如果您必须猜测用户的性别或预测用户是否会点击/购买/喜欢该商品), 还有一些其他措施。 因为它非常有用,所以使用最多的是受试者工作特性(**ROC**)的曲线下面积(**AUC**)。
......@@ -1136,7 +1136,7 @@ Out: LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
* 一组预测变量(`X`
* `target`变量(`y`
* 交叉验证倍数(`cv`
* 计分功能`scoring`
* 评分函数`scoring`
* 要使用的 CPU 数(`n_jobs`
给定这样的输入,该函数将包装一些其他复杂函数。 它创建 n 个重复项,训练 n 个交叉验证样本中的模型,测试结果,并存储从样本外折叠中每次迭代得出的分数。 最后,该功能将报告此类记录的分数列表:
......@@ -1200,7 +1200,7 @@ In: h1.fit(X[train_idx],y[train_idx])
这种方法通常称为跨验证倍数预测。
# 采样和引导
# 采样和自举
在说明了基于折叠,p-out 和自定义方案的迭代器之后,我们将继续对交叉验证迭代器进行概述,并引用所有基于采样的迭代器。
......@@ -1351,9 +1351,9 @@ n_jobs=-1, iid=False, refit=True, cv=10)
4. `iid`参数设置为`False`。 此参数决定如何计算有关类的错误度量。 如果类是平衡的(如本例所示),则设置`iid`不会有太大影响。 但是,如果它们不平衡,则默认情况下,`iid=True`将使带有更多示例的类在全局误差的计算上更具权重。 相反,`iid=False`意味着应将所有类都视为相同。 由于我们希望 SVC 能够识别从 0 到 9 的每个手写数字,无论给每个手写数字提供了多少示例,将`iid`参数设置为`False`是正确的选择。 根据您的数据科学项目,您可以决定实际上更喜欢将默认值设置为`True`
# 建立自定义评分功能
# 建立自定义评分函数
对于我们的实验,我们选择了预定义的计分功能。 对于分类,有五种可用的度量(准确性,AUC,精确度,召回率和 F1 得分),对于回归,有三种度量(R²,MAE 和 MSE)。 尽管它们是一些最常见的度量,但您可能不得不使用其他度量。 在我们的示例中,我们发现使用损失函数来找出正确答案的可能性仍然很高,即使分类器是错误的(因此请考虑正确答案是否是第二个或第三个选项) 算法)。 我们该如何处理?
对于我们的实验,我们选择了预定义的评分函数。 对于分类,有五种可用的度量(准确性,AUC,精确度,召回率和 F1 得分),对于回归,有三种度量(R²,MAE 和 MSE)。 尽管它们是一些最常见的度量,但您可能不得不使用其他度量。 在我们的示例中,我们发现使用损失函数来找出正确答案的可能性仍然很高,即使分类器是错误的(因此请考虑正确答案是否是第二个或第三个选项) 算法)。 我们该如何处理?
`sklearn.metrics`模块中,实际上有一个`log_loss`功能。 我们要做的就是将其包装为`GridSearchCV`可以使用的方式:
......@@ -1492,7 +1492,7 @@ James Bergstra 和 Yoshua Bengio 设计了随机搜索,以使深度学习中
统计测试表明,要使随机搜索取得良好的效果,您应尝试从最少 30 次试验到最多 60 次试验(此经验法则是基于最佳覆盖了 5% 至 10% 超参数的假设空间,并且 95% 的成功率是可以接受的)。 因此,如果您的网格搜索需要类似的搜索(这样您就可以利用随机搜索的属性)或需要进行大量的实验(从而可以节省计算量),通常可以选择随机搜索。
# 功能选择
# 特征选择
对于将要使用的机器学习算法,不相关且多余的功能可能会导致结果模型的可解释性不足,训练时间长,最重要的是过拟合和泛化性差。
......@@ -1500,13 +1500,13 @@ James Bergstra 和 Yoshua Bengio 设计了随机搜索,以使深度学习中
除了降维(这需要您转换数据)之外,特征选择还可以解决上述问题。 通过选择最具预测性的变量集,可以简化高维结构。 也就是说,即使某些功能在独立级别上并不是很好的预测指标,它也会选择能够很好地协同工作的功能。
Scikit-learn 软件包提供了广泛的功能选择方法:
Scikit-learn 软件包提供了广泛的特征选择方法:
* 基于方差的选择
* 单变量选择
* 递归消除
* 随机逻辑回归/稳定性选择
* 基于 L1 的功能选择
* 基于 L1 的特征选择
* 基于树的特征选择
方差,单变量和递归消除可以在`feature_selection`模块中找到。 其他是特定机器学习算法的副产品。 除了基于树的选择(将在第 4 章,“机器学习”中提到)之外,我们还将介绍所有前面的方法,并指出它们如何帮助您改善您从数据中学习的结果。
......@@ -1719,7 +1719,7 @@ Out: [(0, 1.0),
不出所料,权重非零的特征数为`4`。 选择它们,因为它们是进行任何进一步分析的最有用的信息。 也就是说,演示该方法的有效性,您可以在大多数特征选择情况下安全地应用该方法,以便快速选择适用于逻辑或线性回归模型以及其他线性模型的有用特征。
# 包装管道中的所有内容
# 在管道中包装所有内容
作为最后一个主题,我们将讨论如何将到目前为止已经看到的转换和选择操作包装到一个命令中,该命令将把您的数据从源到机器学习算法。
......@@ -1828,7 +1828,7 @@ Out: precision recall f1-score support
avg / total 0.93 0.93 0.93 30
```
# 构建自定义转换功能
# 构建自定义转换函数
就像您将注意到的那样,在我们的示例中,我们使用了两个自定义转换函数,一个标识和一个逆函数,以使原始特征与转换后的特征保持一致并使特征逆。 自定义转换可以帮助您处理针对您的问题的特定解决方案,并且您还将发现它们很有用,因为它们可以通过过滤不必要或错误的值来充当过滤器。
......
......@@ -71,7 +71,7 @@ In: import os
print ("Current directory is: "%s"" % (os.getcwd()))
```
您可以使用其他开源代码测试本书中的所有算法,并可以随意使用数据集。 Google 提供了一个搜索引擎,可以在[这个页面](https://toolbox.google.com/datasetsearch)上为您的实验寻找合适的数据:您只需要询问搜索引擎想要的内容即可。
您可以使用其他开源代码测试本书中的所有算法,并可以随意使用数据集。 Google 提供了一个搜索引擎,可以在[这个页面](https://toolbox.google.com/datasetsearch)上为您的实验寻找合适的数据:您只需要询问搜索引擎想要的内容即可。
# 线性和逻辑回归
......@@ -495,13 +495,13 @@ In: import pickle
'Cottonwood/Willow', 'Aspen', 'Douglas-fir', 'Krummholz']
```
# 通过随机样本粘贴
# 随机样本的粘贴
**粘贴**是我们将讨论的第一类平均集成。 在粘贴过程中,使用从数据中获取的小样本来构建一定数量的估算器(使用不替换的样本)。 最后,将结果汇总起来,通过对结果进行平均(在回归的情况下)或在处理分类时采用投票率最高的类别来获得估计值。 当处理非常大的数据时(例如无法容纳到内存中的情况),粘贴非常有用,因为它只允许处理计算机的可用 RAM 和计算资源可管理的那些数据部分。
作为一种方法,随机森林算法的创建者 Leo Breiman 首先设计了这种策略。 尽管可以通过使用可用的装袋算法(下段主题`BaggingClassifier``BaggingRegressor`,并将其`bootstrap`设置为)轻松实现,但 Scikit-learn 软件包中没有使用粘贴的特定算法。 `False``max_features`设为 1.0。
# 套用弱分类器
# 弱分类器的装袋
**装袋**用于样品的方式与粘贴类似,但是可以替换。 同样,在理论上由 Leo Breiman 阐述,装袋是在特定的 Scikit-learn 类中进行回归的,而在分类中进行。 您只需要决定要用于训练的算法即可。 将其插入`BaggingClassifier``BaggingRegressor`中以解决回归问题,并设置足够多的估计量(因此要设置大量的样本):
......@@ -650,7 +650,7 @@ In: %matplotlib inline
![](img/48d3ba86-a515-4cb4-896a-6cb0173a4bed.png)
# 模型序列 AdaBoost
# 模型序列—— AdaBoost
**AdaBoost** 是基于梯度下降优化方法的增强算法。 它适合数据重新加权版本上的一系列弱学习者(最初是树桩,即单级决策树)。 根据案例的可预测性分配权重。 较难处理的案件的权重更高。 想法是,树首先学习简单的示例,然后将更多的精力集中在困难的示例上。 最后,对弱学习者的顺序进行加权以最大程度地提高整体表现:
......@@ -891,7 +891,7 @@ In: y_probs = bst.predict(covertype_test_X,
[ 36 1 0 0 0 0 146]]
```
# 猫助推器
# CatBoost
2017 年 7 月,另一种有趣的 GBM 算法由俄罗斯搜索引擎 Yandex 公开:它是 [CatBoost](https://catboost.yandex/),其名称来自两个词 Category 和 Boosting。 实际上,它的最强之处是能够处理分类变量,该变量实际上通过采用“一键编码”和“均值编码”的混合策略来充分利用大多数关系数据库中的信息(一种通过分配变量来表达分类级别的方法) 适当的数值来解决手头的问题;稍后再讨论)。
......@@ -1089,7 +1089,7 @@ In: from sklearn.linear_model import SGDClassifier
最终,从第十批开始,我们将在使用新算法更新训练之前,在每个新接收的批上记录学习算法的准确性。 最后,对累计的准确性得分进行平均,以提供整体性能评估。
# 跟上速度
# 速度
各种算法都使用增量学习来工作。 对于分类,我们将回忆以下内容:
......@@ -1285,7 +1285,7 @@ tt.tokenize(tweet) Out: [':', 'I', 'looove', 'this', 'city', '!', '!', '!', '#lo
'#foreverhere']
```
# 抽干
# 词干提取
**词干提取**是减少单词的变形形式并将单词带入其核心概念的动作。 例如,`is``be``are``am`后面的概念相同。 同样,`go``goes`以及`table``tables`后面的概念相同。 推导每个单词的词根概念的操作称为词干。 在 NLTK 中,您可以选择要使用的词干(有几种获取词根的方法)。 我们将向您展示其中一个,让 Jupyter笔记本中的其他内容与本书的这一部分相关联:
......@@ -1383,7 +1383,7 @@ In: import nltk
# 停用词
**停用词**是文本中信息最少的片(或标记),因为它们是最常见的词(例如,`the``it``is``as``not`)。 停用词通常会被删除。 而且,如果将其删除,则与在功能选择阶段中发生的情况完全相同,处理所需的时间更少,内存也更少。 此外,有时它更准确。 删除停用词会降低文本的整体熵,从而使其中的任何信号更明显,更易于在特征中表示。
**停用词**是文本中信息最少的片(或标记),因为它们是最常见的词(例如,`the``it``is``as``not`)。 停用词通常会被删除。 而且,如果将其删除,则与在特征选择阶段中发生的情况完全相同,处理所需的时间更少,内存也更少。 此外,有时它更准确。 删除停用词会降低文本的整体熵,从而使其中的任何信号更明显,更易于在特征中表示。
在 Scikit-learn 中也可以找到英语停用词列表。 有关其他语言的停用词,请查看 NLTK:
......@@ -1408,7 +1408,7 @@ Out: ['aber', 'alle', 'allem', 'allen', 'aller', 'alles', 'als', 'also',
'auf', 'au', ...
```
# 完整的数据科学示例文本分类
# 完整的数据科学示例——文本分类
现在,这是一个完整的示例,可让您将每个文本放在正确的类别中。 我们将使用`20newsgroup`数据集,该数据集已在第 1 章,“第一步”中引入。 为了使事情更真实,并防止分类器过拟合数据,我们将删除电子邮件标头,页脚(例如签名)和引号。 另外,在这种情况下,目标是在两个相似的类别之间进行分类:`sci.med``sci.space`。 我们将使用准确性度量来评估分类:
......@@ -1558,7 +1558,7 @@ In: K_dataset_2 = 4
在实际情况下,您可以考虑使用轮廓系数来了解群集的定义良好程度。 它是组内一致性的评估指标,适用于各种聚类结果,甚至适用于监督学习中的班级结构。 您可以在[这个页面](http://scikit-learn.org/stable/modules/clustering.html#silhouette-coefficient)上了解有关剪影系数的更多信息。
# DBSCAN-一种基于密度的聚类技术
# DBSCAN ——一种基于密度的聚类技术
现在,我们将向您介绍 **DBSCAN**,这是一种基于密度的聚类技术。 这是一种非常简单的技术。 它选择一个随机点; 如果该点位于密集区域(如果它的邻居数超过 N 个),则它将开始扩展群集,包括所有邻居以及邻居的邻居,直到达到不再有邻居的点。
......@@ -1601,9 +1601,9 @@ In: dbs_2 = DBSCAN(eps=0.5)
在本节的最后,最后一个重要说明是,在 K 均值和 DBSCAN 的基本介绍中,我们一直使用欧几里得距离,因为它是这些函数中的默认距离度量(尽管如果您认为合适的话,其他距离度量也可以使用)。 在实际情况下使用此距离时,请记住您必须对每个特征进行归一化(z 归一化),以便每个特征对最终失真的贡献均相等。 如果未对数据集进行规范化,则具有更大支持的功能将对输出标签具有更大的决策权,而这正是我们所不希望的。
# 潜在狄利克雷分(LDA)
# 潜在狄利克雷分(LDA)
对于文本,可以使用**潜在狄利克雷分****LDA** 作为流行的无监督算法,该算法可用于理解文档集合中的一组常见单词。
对于文本,可以使用**潜在狄利克雷分****LDA** 作为流行的无监督算法,该算法可用于理解文档集合中的一组常见单词。
请注意,另一种算法,线性判别分析,也具有相同的首字母缩写词,但是这两种算法是完全不相关的。
......
......@@ -12,7 +12,7 @@
* 了解并以视觉方式传达变量的重要性及其与目标结果的关系
* 设置使用 HTTP 接受并提供预测作为服务的预测服务器
# 介绍 Matplotlib 的基础知识
# Matplotlib 的基础知识介绍
**可视化**是数据科学的基本方面,它使数据科学家可以更好,更有效地将其发现传达给他们所从事的组织,数据专家和非专家。 提供信息交流和精心制作引人入胜的可视化效果背后的原理的基本知识超出了本书的范围,但是如果您想提高自己的技能,我们可以建议合适的资源。
......@@ -98,7 +98,7 @@ In: mpl.rcParams['axes.prop_cycle'] = mpl.cycler('color',
请注意,您还可以设置图形标题,并用标题`pyplot`中的`xlabel``ylabel`标记轴。
# 使用面板更清晰的表示
# 使用面板的更清晰表示
我们的第二个示例将向您演示如何创建多个图形面板并在每个图形面板上绘制表示形式。 我们还将尝试通过使用不同的颜色,大小和样式来个性化绘制的曲线。 这是示例:
......@@ -418,7 +418,7 @@ In: from pandas.plotting import scatter_matrix
一些参数可以控制散点图矩阵的各个方面。 `alpha`参数控制透明度的量,`figsize`提供以英寸为单位的矩阵的宽度和高度。 最后,`color`接受一个列表,该列表指示图中每个点的颜色,从而允许描绘数据中的不同组。 另外,通过在`diagonal`参数上选择`'kde'``'hist'`,您可以选择在散布矩阵对角线上代表每个变量的密度曲线或直方图。
# 通过平行坐标发现图案
# 通过平行坐标发现模式
散点图矩阵可以通知您有关要素的联合分布。 它可以帮助您找到数据中的组并验证它们是否可区分。 平行坐标是另一种绘图,有助于为您提供有关数据中存在的最多区分组变量的提示。
......@@ -448,7 +448,7 @@ In: from pandas.tools.plotting import parallel_coordinates
在接下来的页面中,我们将介绍 Seaborn,并提供一些构建块以利用它们在您的数据科学项目中的可视化效果。
# 介绍 Seaborn
# Seaborn 介绍
Seaborn 由 Michael Waskom 创建并托管在 [PyData 网站](http://seaborn.pydata.org/)上,是一个将底层 Matplotlib 与整个 pyData 堆栈包装在一起的库,允许集成图表和来自 NumPy 和 Pandas 的数据结构,以及 SciPy 和 StatModels 的统计例程。 借助内置主题以及专为揭示数据模式而设计的调色板,所有这些工作都特别注重美学。
......@@ -737,7 +737,7 @@ In: with sns.axes_style("whitegrid"):
![](img/251cc96e-fbe8-4fd2-84a1-80ec22d0b304.png)
# 高级数据学习表示
# 学习高级数据的表示
一些有用的表示可以从数据科学过程中得出。 也就是说,表示不是直接从数据中完成,而是通过使用机器学习过程来实现的,机器学习过程向我们介绍了算法的运行方式,并为我们提供了每个预测变量在获得的预测中的作用的更精确概述。 特别地,学习曲线可以提供快速诊断以改善模型。 这可以帮助您确定是需要更多观察还是需要丰富变量。
......@@ -850,7 +850,7 @@ In: from sklearn.learning_curve import validation_curve
`validation_curve`类的语法类似于先前看到的`learning_curve`的语法,但对于`param_name``param_range`参数,应分别为它们提供超参数和必须测试的范围。 至于结果,训练和测试结果以数组形式返回。
# 随机森林功能的重要性
# 随机森林的特征重要性
正如在第 3 章,“数据管道”的结论中所讨论的那样,选择正确的变量可以通过减少噪声,估计方差和过多计算负担来改善学习过程 。 集成方法(例如,随机森林)可以为您提供与数据集中其他变量一起使用时变量所扮演角色的不同视图。
......@@ -895,7 +895,7 @@ In: from sklearn.datasets import load_boston
在我们的 LSTAT 分析中,该区域中处于较低地位的人口百分比和 RM(即每个住宅的平均房间数)被指出是我们随机森林模型中最具决定性的变量。
# 梯度助推树部分依赖图
# 梯度提升树的部分依赖图
对功能重要性的估计是一条信息,可以帮助您根据最佳选择来确定要使用的功能。 有时,您可能需要更好地理解为什么变量对预测特定结果很重要。 通过控制分析中涉及的所有其他变量的效果,梯度增强树为您提供了变量与预测结果之间关系的清晰观点。 与使用非常有效的 EDA 可能获得的信息相比,此类信息可以为您提供更多因果关系动态的见解:
......
......@@ -323,7 +323,7 @@ In: nx.clustering(G) Out: {0: 0.6666666666666666,
在图表的高度连接的部分中可以看到较高的值,而在连接最少的区域中可以看到较低的值。
# 分网络
# 分网络
现在,让我们看一下将网络划分为节点的多个子网络的方式。 最常用的算法之一是 Louvain 方法,该方法专门用于精确检测大型图形(具有一百万个节点)中的社区。 我们将首先介绍模块化措施。 这是对图形结构的度量(它不是面向节点的),其形式上的数学定义非常长且复杂,并且超出了本书的范围(读者可以在[这个页面](https://sites.google.com/site/findcommunities/))。 它直观地衡量将图划分为社区的质量,将实际的社区联系与随机的联系进行比较。 模块化得分在 -0.5 至 +1.0 之间; 值越高,划分就越好(组内连接密集,而组间连接稀疏)。
......@@ -394,7 +394,7 @@ In: G = nx.krackhardt_kite_graph()
正如预期的那样,链接的节点具有不同的颜色。 似乎对于这种网络配置,需要四种颜色。 如果这代表一个电信网络,它将向我们显示需要四个频率来避免干扰。
# 图加载,转储和采样
# 图加载,转储和采样
除了`NetworkX`以外,还可以使用其他软件来生成和分析图形和网络。 可用于分析的最佳开源多平台软件之一称为 Gephi。 这是一种视觉工具,不需要编程技能。 可在[这个页面](http://gephi.github.io/)免费获得。
......
......@@ -55,7 +55,7 @@
现在让我们看一些实用的东西:如何用神经网络解决分类问题。 在此示例中,我们将使用 Keras。 第一个是用于低级基元的 Python 库,通常用于深度学习,并能够利用最新的 GPU 和数值加速来有效处理多维数组。 Keras 是用于神经网络的高级,快速且模块化的 Python 库,能够在不同的数值计算框架之上运行,例如 TensorFlow,Microsoft Cognitive Tool(以前称为 CNTK)或 Theano。
# 使用 CNN 对图像进行分类
# 使用 CNN 的图像分类
现在让我们将深度神经网络应用于图像分类问题。 在这里,我们将尝试根据其图像预测交通标志。 对于此任务,我们将使用 **CNN****卷积神经网络**),该技术能够利用图像中附近像素之间的空间相关性,这是目前在解决此类问题时的深度学习水平。
......@@ -391,12 +391,12 @@ Out:
显然,错误分类的数量已大大减少。 现在,让我们尝试通过更改参数来做更好的事情。
# 使用预训练的模型
# 使用预训练的模型
如您在前面的示例中所见,增加网络的复杂性会增加时间和训练所需的内存。 有时,我们必须接受我们没有足够强大的机器来尝试所有组合的机器。 在那种情况下我们该怎么办? 基本上,我们可以做两件事:
* 简化网络; 也就是说,通过删除参数和变量
* 使用预训练的网络,该网络已经由功能足够强大的人进行过训练
* 使用预训练的网络,该网络已经由功能足够强大的人进行过训练
在这两种情况下,我们都将在次优条件下工作,因为深度网络不会像我们曾经使用的那样强大。 更具体地说,在第一种情况下,网络的精度不是很高,因为我们的参数较少。 在第二种情况下,我们必须应对其他人的决策和培训。 尽管这不是一件容易的事,但预训练的模型也可以根据您的数据集进行微调。 在这种情况下,网络将不会随机初始化参数。 尽管这很有趣,但是此操作不在本书的讨论范围之内。
......@@ -406,9 +406,9 @@ Out:
* 迁移学习,以将更多特征(来自一层或模型层的系数)以及观察向量添加到模型中
* 预言; 也就是说,计算标签
现在让我们看看如何使用预训练的网络来实现我们的目的。
现在让我们看看如何使用预训练的网络来实现我们的目的。
在 Keras 中,[可以从此处获得各种预训练的模型](https://keras.io/applications)
在 Keras 中,[可以从此处获得各种预训练的模型](https://keras.io/applications)
首先下载一些图像进行测试。 在以下示例中,我们将使用 Caltech 提供的数据集,[该数据集可在此处使用](http://www.vision.caltech.edu/Image_Datasets/Caltech101/)
......
# 大数据火花
# 大数据和 Spark
世界上存储的数据量正以准指数的方式增长。 如今,对于数据科学家而言,每天必须处理几 TB 的数据已不再是不寻常的请求,并且要使事情变得更加复杂,这意味着必须处理来自许多不同的异构系统的数据。 此外,尽管您需要处理的数据量很大,但您的业务期望是在短时间内不断生成模型,因为您只是在处理玩具数据集。
......@@ -99,7 +99,7 @@ HDFS 的体系结构是主从结构。 如果主服务器(称为**名称节点
在 Hadoop 提供的 MapReduce 实现中,随机分配操作被分配,从而优化了通信成本,并且每个节点可以运行多个映射器和归约器,从而充分利用了节点上可用的硬件资源。 此外,Hadoop 基础架构还提供了冗余和容错功能,因为同一任务可以分配给多个工作人员。
# 介绍 Apache Spark
# Apache Spark 介绍
**Apache Spark** 是 Hadoop 的演进,并在最近几年变得非常流行。 与 Hadoop 及其以 Java 和批量为重点的设计相比,Spark 能够以快速简便的方式生成迭代算法。 此外,它具有用于多种编程语言的非常丰富的 API 套件,并且本身支持许多不同类型的数据处理(机器学习,流传输,图形分析,SQL 等)。
......@@ -521,7 +521,7 @@ Out: In the file there are 13053 lines
And 2666 lines are empty
```
# 广播变量和累加器变量一起-示例
# 广播变量和累加器变量一起——示例
尽管广播和累加器变量很简单,并且变量非常有限(一个变量是只读变量,另一个变量是只写变量),但是可以将它们有效地用于创建非常复杂的操作。 例如,让我们尝试在分布式环境中的`iris`数据集上应用不同的机器学习算法。 我们将通过以下方式构建 Spark 作业:
......@@ -926,7 +926,7 @@ In: for table in sqlContext.tableNames():
从 Spark 1.3 开始,在执行数据科学操作时,`DataFrame`已成为对数据集进行操作的首选方式。
# 使用 Spark 进行机器学习
# Spark 机器学习
在本章的这一点上,我们完成了您的主要任务:创建一个模型来预测数据集中缺少的一个或多个属性。 对于此任务,我们可以使用一些机器学习建模,而 Spark 可以在这种情况下为我们提供帮助。
......@@ -938,7 +938,7 @@ In: for table in sqlContext.tableNames():
Spark 是一款高级,分布式且复杂的软件,应仅在大数据上以及具有多个节点的集群使用; 实际上,如果数据集可以容纳在内存中,那么使用其他库(例如 Scikit-learn 或类似库)就更方便了,这些库仅关注问题的数据科学方面。 在小型数据集的单个节点上运行 Spark 的速度可能比 Scikit-learn 等价算法慢五倍。
# 在 KDD99 数据集上火花
# KDD99 数据集上的 Spark
让我们使用真实数据集:KDD99 数据集进行此探索。 竞赛的目的是创建一个网络入侵检测系统,该系统能够识别哪个网络流是恶意的,哪些不是。 而且,数据集中有许多不同的攻击。 目标是使用数据集中包含的数据包流的特征准确预测它们。
......@@ -1148,7 +1148,7 @@ Out: Row(features=SparseVector(41, {1: 8.0, 7: 181.0, 15: 1.0, 16: 2.0, 22:
40: 0.11}), target_cat=2.0)
```
# 培训学习者
# 训练学习器
最后,我们到达了任务的热点:训练分类器。 分类器包含在`pyspark.ml.classification`包中,对于本示例,我们使用随机森林。 对于 Spark 2.3.1,可以在[这个页面](https://spark.apache.org/docs/2.3.1/ml-classification-regression.html)中找到可用的算法的广泛列表。 算法列表非常完整,包括线性模型,SVM,朴素贝叶斯和树集成。 请注意,并非所有这些工具都能够处理多类问题,并且可能具有不同的参数。 始终检查与使用版本有关的文档。 除分类器外,Spark 2.3.1 中使用 Python 接口实现的其他学习器如下:
......@@ -1197,9 +1197,9 @@ Out: First observation after classification stage:
prediction=2.0)
```
# 评估学习的表现
# 评估学习的表现
任何数据科学任务的下一步都是检查学习在训练和测试数据集上的表现。 对于此任务,我们将使用`F1-score`,因为它是合并精度和召回性能的好指标。 评估指标包含在`pyspark.ml.evaluation`软件包中; 在我们拥有的几种选择中,我们正在使用一种来评估多类分类器:`MulticlassClassificationEvaluator`。 作为参数,我们提供指标(`precision``recall``accuracy``F1-score`等)以及包含真实标签和预测标签的列的名称:
任何数据科学任务的下一步都是检查学习在训练和测试数据集上的表现。 对于此任务,我们将使用`F1-score`,因为它是合并精度和召回性能的好指标。 评估指标包含在`pyspark.ml.evaluation`软件包中; 在我们拥有的几种选择中,我们正在使用一种来评估多类分类器:`MulticlassClassificationEvaluator`。 作为参数,我们提供指标(`precision``recall``accuracy``F1-score`等)以及包含真实标签和预测标签的列的名称:
```py
In: from pyspark.ml.evaluation import MulticlassClassificationEvaluator
......@@ -1480,7 +1480,7 @@ In: bc_sample_rates.unpersist()
在本章中,我们向您介绍了 Hadoop 生态系统,包括体系结构,HDFS 和 PySpark。 介绍之后,我们开始设置本地 Spark 实例,并在群集节点之间共享变量后,我们使用 RDD 和`DataFrame`在 Spark 中进行了数据处理。
在本章的稍后部分,我们学习了使用 Spark 进行机器学习的知识,其中包括读取数据集,培训学习,机器学习管道的功能,交叉验证,甚至测试通过示例数据集获得的知识。
在本章的稍后部分,我们学习了使用 Spark 进行机器学习的知识,其中包括读取数据集,培训学习,机器学习管道的功能,交叉验证,甚至测试通过示例数据集获得的知识。
到此结束我们围绕 Python 进行数据科学基础研究的旅程,下一章只是刷新和增强 Python 基础的附录。 总之,通过本书的所有章节,我们已经完成了数据科学项目的介绍,接触了项目的所有关键步骤,并向您展示了使用 Python 成功操作自己的项目的所有基本工具。 作为学习工具,这本书陪同您完成了数据科学的所有阶段,从数据加载到机器学习和可视化,阐述了无论数据大小的最佳实践和避免常见陷阱的方法。 作为参考,本书涉及各种命令和程序包,为您提供了简单明了的说明和示例,如果在项目中重复使用这些示例和示例,则可以在工作期间节省大量时间。
......
......@@ -9,22 +9,22 @@
* 通过直接编写和测试代码来学习 Python 的最佳资源
* 通过阅读学习 Python 的最佳资源
# 您的学习清单
# 您的学习列表
这是您需要学习像数据科学家一样熟练的基本 Python 数据结构。 除了实际的基础知识(数字,算术,字符串,布尔值,变量赋值和比较)之外,列表确实很短。 我们将通过仅涉及数据科学项目中的递归结构来简要地处理它。 请记住,这些主题颇具挑战性,但是如果您想编写有效的代码,则必须掌握这些主题:
* 清单
* 列表
* 字典
* 类,对象和面向对象的编程
* 例外情况
* 迭代器和生成器
* 有条件的
* 理解力
* 功能
* 条件
* 推导式
* 函数
根据您对 Python 语言的实际了解,将其作为复习或学习清单。 但是,请检查所有建议的示例,因为在本书学习过程中您将再次遇到它们。
根据您对 Python 语言的实际了解,将其作为复习或学习列表。 但是,请检查所有建议的示例,因为在本书学习过程中您将再次遇到它们。
# 清单
# 列表
列表是元素的集合。 元素可以是整数,浮点数,字符串或一般对象。 此外,您可以将不同的类型混合在一起。 此外,列表比数组更灵活,因为数组仅允许单个数据类型。 要创建列表,可以使用方括号或`list()`构造函数,如下所示:
......@@ -177,9 +177,9 @@ c_dict['a_key']
可以使用`def``lambda`命令定义`defaultdict`使用的`default`功能,如下节所述。
# 定义功能
# 定义函数
功能是指令的集合,通常会从您那里接收特定的输入,并提供与这些输入相关的一组特定的输出。 您可以将它们定义为单线,如下所示:
函数是指令的集合,通常会从您那里接收特定的输入,并提供与这些输入相关的一组特定的输出。 您可以将它们定义为单线,如下所示:
```py
def half(x):
......@@ -325,7 +325,7 @@ Hello world, I'm the constructor
请注意前面代码的最后一行,您可以在其中访问内部变量。 请记住,在 Python 中,默认情况下对象的所有内部属性都是公共的,并且可以在外部读取,写入和更改它们。
# 例外情况
# 异常
异常和错误密切相关,但是它们是不同的东西。 例如,可以很好地处理异常。 以下是一些例外示例:
......@@ -416,9 +416,9 @@ for i in incrementer():
# 4
```
# 有条件的
# 条件
因为您可以分支程序,所以条件条件常用于数据科学中。 最常用的是`if`语句。 它的工作原理与其他编程语言大致相同。 这是一个例子:
因为您可以分支程序,所以条件常用于数据科学中。 最常用的是`if`语句。 它的工作原理与其他编程语言大致相同。 这是一个例子:
```py
def is_positive(val):
......@@ -443,9 +443,9 @@ is_positive(0)
注意,`elif``else`不是必需的。
# 列表和字典的理解
# 列表和字典的推导式
使用通过迭代器和有条件的条件构建为一线式的理解,列表和字典:
使用通过迭代器和条件构建为一行的推导式,列表和字典:
```py
a_list = [1,2,3,4,5]
......@@ -467,7 +467,7 @@ a_dictionary = {key:value for value, key in zip(a_list, another_list)}
理解是过滤和转换迭代器中存在的数据的快速方法。
# 通过观看,阅读和做事来学习
# 通过观看,阅读和实践来学习
如果进修课程和我们的学习列表还不够,您需要更多支持以增强您的 Python 知识怎么办? 我们将建议您在网上免费获得更多资源。 通过观看教程视频,您可以尝试复杂且不同的示例,并通过一项艰巨的任务挑战自己,该任务需要您与其他数据科学家和 Python 专家进行互动。
......
......@@ -82,7 +82,7 @@ PixieGateway 是一项突破性的创新,具有可以显着加快分析操作
* **调试技术**:介绍 PixieDust 提供的各种调试技术,包括称为 PixieDebugger 的可视化 Python 调试器和用于显示 Python 日志记录消息的`%%PixiedustLog`魔术。
* **运行 Node.js 代码的能力**:我们讨论`pixiedust_node`扩展,该扩展管理负责直接从 Python笔记本中执行任意 Node.js 脚本的 Node.js 进程的生命周期。
由于开源代码模型具有透明的开发过程,并且不断增长的用户社区提供了一些有价值的反馈,因此随着时间的推移,我们能够优先考虑和实现许多这些高级功能。 我要说明的重点是遵循具有适当许可证的开源模型(PixieDust 使用此处提供的 [Apache 2.0 许可证](https://www.apache.org/licenses/LICENSE-2.0)运作良好。 它帮助我们发展了用户社区,从而为我们提供了必要的反馈,以优先考虑我们认为具有很高价值的新功能,并在某些情况下以 GitHub 拉取请求的形式提供了代码。
由于开源代码模型具有透明的开发过程,并且不断增长的用户社区提供了一些有价值的反馈,因此随着时间的推移,我们能够优先考虑和实现许多这些高级功能。 我要说明的重点是遵循具有适当许可证的开源模型(PixieDust 使用此处提供的 [Apache 2.0 许可证](https://www.apache.org/licenses/LICENSE-2.0)运作良好。 它帮助我们发展了用户社区,从而为我们提供了必要的反馈,以优先考虑我们认为具有很高价值的新功能,并在某些情况下以 GitHub 拉取请求的形式提供了代码。
第 6 章“使用 TensorFlow 进行图像识别”,我将深入探讨四个行业案例中的第一个。 我从机器学习的高级介绍开始,然后是机器学习的子领域深度学习和 TensorFlow 框架的介绍,该框架使构建神经网络模型更加容易。 然后我继续构建图像识别示例应用程序,包括四个部分的相关 PixieApp:
......
......@@ -149,7 +149,7 @@
好吧,答案可能是所有事情的一点点,再加上一项更关键的技能:特定领域的专业知识。
关于是否将通用数据科学技术应用于任何数据集而没有深入了解其含义的争论正在展开,这是否会导致期望的业务成果。 许多公司都倾向于确保数据科学家拥有大量的领域专业知识,其基本原理是,如果没有它,您可能会在不知不觉中在任何步骤上引入偏见,例如在填补数据清理阶段或功能选择过程中的空白时,以及最终建立的模型很适合给定的数据集,但最终仍然毫无价值。 想象一下,一位没有化学背景的数据科学家,正在为一家开发新药的制药公司研究有害分子之间的相互作用。 这也可能就是为什么我们看到专门针对特定领域的统计课程的繁多的原因,例如生物学的生物统计学,或用于分析与供应链相关的运营管理的供应链分析等等。
关于是否将通用数据科学技术应用于任何数据集而没有深入了解其含义的争论正在展开,这是否会导致期望的业务成果。 许多公司都倾向于确保数据科学家拥有大量的领域专业知识,其基本原理是,如果没有它,您可能会在不知不觉中在任何步骤上引入偏见,例如在填补数据清理阶段或特征选择过程中的空白时,以及最终建立的模型很适合给定的数据集,但最终仍然毫无价值。 想象一下,一位没有化学背景的数据科学家,正在为一家开发新药的制药公司研究有害分子之间的相互作用。 这也可能就是为什么我们看到专门针对特定领域的统计课程的繁多的原因,例如生物学的生物统计学,或用于分析与供应链相关的运营管理的供应链分析等等。
总而言之,数据科学家理论上应该在以下方面有所精通:
......@@ -305,7 +305,7 @@ Twitter 情感分析实景仪表板
对于数据科学家而言,笔记本是进行迭代实验的理想之选,因为它使他们能够快速加载,浏览和可视化数据。 笔记本也是一种出色的协作工具; 它们可以导出为 JSON 文件,并可以在团队中轻松共享,从而可以重复进行相同的实验并在需要时进行调试。 此外,由于笔记本也是 Web 应用程序,因此可以轻松地将它们集成到基于云的多用户环境中,从而提供更好的协作体验。
这些环境还可以通过使用 Apache Spark 等框架将笔记本电脑与计算机集群连接,从而按需访问大型计算资源。 这些基于云的笔记本服务器的需求正在快速增长,因此,我们看到越来越多的 **SaaS****软件即服务**)解决方案,以商业化为例,都使用 [IBM Data Science Experience](https://datascience.ibm.com)[DataBricks](https://databricks.com/try-databricks) 并使用 [JupyterHub](https://jupyterhub.readthedocs.io/en/latest)源代码。
这些环境还可以通过使用 Apache Spark 等框架将笔记本电脑与计算机集群连接,从而按需访问大型计算资源。 这些基于云的笔记本服务器的需求正在快速增长,因此,我们看到越来越多的 **SaaS****软件即服务**)解决方案,以商业化为例,都使用 [IBM Data Science Experience](https://datascience.ibm.com)[DataBricks](https://databricks.com/try-databricks) 并使用 [JupyterHub](https://jupyterhub.readthedocs.io/en/latest) 开源代码。
对于业务分析师来说,笔记本电脑可以用作演示工具,在大多数情况下,其[...] Markdown 支持为提供足够的功能,以取代传统的 PowerPoint。 生成的图表可以直接用于有效地传达复杂分析的结果; 不再需要复制和粘贴,并且算法的更改会自动反映在最终演示中。 例如,某些笔记本实现(例如 Jupyter)可将单元格布局自动转换为幻灯片显示,从而使整个体验更加无缝。
......
......@@ -345,7 +345,7 @@ display(london_info)
在大多数情况下,在受控实验中工作与在现实世界中工作不同。 我的意思是,在开发过程中,我们通常会选择(或者我应该说是制造)一个旨在表现出来的样本数据集。 它具有正确的格式,符合架构规范,没有数据丢失,依此类推。 目标是专注于验证假设并构建算法,而不是集中在数据清理上,这可能非常痛苦且耗时。 但是,在开发过程中尽早获得尽可能接近真实数据的数据具有不可否认的优势。 为了帮助完成此任务,我与 IBM 的两个同事 Jamie Jennings 和 Terry Antony 合作,他们自愿为 PixieDust 扩展了名为`pixiedust_rosie`的扩展。
该 Python 包实现了一个简单的`wrangle_data()`方法,以自动执行原始数据的清理。 `pixiedust_rosie`软件包当前支持 CSV 和 JSON,但是将来会添加更多格式。 底层数据处理引擎使用 **Rosie 模式语言****RPL**)开源组件,这是一个正则表达式引擎,旨在使开发人员更容易使用,性能更高, 并可以扩展到大数据。 [您可以在此处找到有关 Rosie 的更多信息](http://rosie-lang.org)
该 Python 包实现了一个简单的`wrangle_data()`方法,以自动执行原始数据的清理。 `pixiedust_rosie`软件包当前支持 CSV 和 JSON,但是将来会添加更多格式。 底层数据处理引擎使用 **Rosie 模式语言****RPL**)开源组件,这是一个正则表达式引擎,旨在使开发人员更容易使用,性能更高, 并可以扩展到大数据。 [您可以在此处找到有关 Rosie 的更多信息](http://rosie-lang.org)
首先,您需要使用以下命令安装`pixiedust_rosie`软件包:
......
......@@ -540,7 +540,7 @@ app.run(crimes)
对于我们的图像识别示例应用程序的 MVP,我们将使用以下要求:
* 不要从头开始构建模型; 相反,请重用已公开的预训练的通用**卷积神经网络**[**CNN**](https://en.wikipedia.org/wiki/Convolutional_neural_network))模型之一,例如 MobileNet。 [我们以后总是可以使用传递学习](https://en.wikipedia.org/wiki/Transfer_learning)使用自定义训练图像来重新训练这些模型。
* 不要从头开始构建模型; 相反,请重用已公开的预训练的通用**卷积神经网络**[**CNN**](https://en.wikipedia.org/wiki/Convolutional_neural_network))模型之一,例如 MobileNet。 [我们以后总是可以使用传递学习](https://en.wikipedia.org/wiki/Transfer_learning)使用自定义训练图像来重新训练这些模型。
* 对于 MVP,虽然我们只关注得分而不是训练,但我们仍然应该使用户感兴趣。 因此,让我们构建一个 PixieApp,该应用程序允许用户输入网页的 URL 并显示从该页面抓取的所有图像,包括由我们的模型推断出的分类输出。
* 由于我们正在学习深度学习神经网络和 TensorFlow,因此如果可以在 Jupyter笔记本中直接显示 [TensorBoard Graph Visualization](https://www.tensorflow.org/programmers_guide/graph_viz) 会很棒,而不会强迫用户使用其他工具。 这将提供更好的用户体验并增加他们对应用程序的参与度。
......
......@@ -1338,7 +1338,7 @@ app.run()
### 注意
**注意**:我们可以使用其他开源代码框架来处理流数据,例如 [Apache Flink](https://flink.apache.org) 或 [Apache Storm](http://storm.apache.org)。
**注意**:我们可以使用其他开源代码框架来处理流数据,例如 [Apache Flink](https://flink.apache.org) 或 [Apache Storm](http://storm.apache.org)。
* 在当前实现中,数据存储为 CSV 文件,然后我们以输出目录作为源创建一个 Spark Streaming `DataFrame`。 此步骤会消耗笔记本电脑和本地环境上的时间和资源。 取而代之的是,我们可以让 Streaming Analytics 写回另一个主题中的丰富事件,并创建一个以 Message Hub 服务作为 Kafka 输入源的 Spark Streaming `DataFrame`。
......@@ -1716,7 +1716,7 @@ KafkaClient {
[现在,我们已经完成了示例应用程序的第 4 部分。 您可以在此处找到完整的笔记本](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%207/Twitter%20Sentiment%20Analysis%20-%20Part%204.ipynb)。
我们必须在本节末尾编写的额外代码提醒我们,处理数据的过程绝非直线。 我们必须准备应对本质上可能不同的障碍:依赖库中的错误或外部服务中的限制。 克服这些障碍并不需要长时间停止该项目。 由于我们主要使用开源代码组件,因此我们可以在 Stack Overflow 等社交网站上利用志趣相投的开发人员组成的庞大社区,获得新的想法和代码示例,并在 Jupyter笔记本上快速进行实验。
我们必须在本节末尾编写的额外代码提醒我们,处理数据的过程绝非直线。 我们必须准备应对本质上可能不同的障碍:依赖库中的错误或外部服务中的限制。 克服这些障碍并不需要长时间停止该项目。 由于我们主要使用开源代码组件,因此我们可以在 Stack Overflow 等社交网站上利用志趣相投的开发人员组成的庞大社区,获得新的想法和代码示例,并在 Jupyter笔记本上快速进行实验。
# 总结
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册