提交 60eff465 编写于 作者: W wizardforcel

2021-03-11 22:49:36

上级 89159c72
......@@ -6,7 +6,7 @@
# 这本书涵盖的内容
第 1 课, “Jupyter 基础知识”,涵盖了 Jupyter 中的数据分析基础。 我们将从 Jupyter 的用法说明和功能入手,例如魔术功能和制表符补全。 然后,我们将过渡到特定于数据科学的材料。 我们将在实时 Jupyter笔记本中进行探索性分析。 我们将使用视觉辅助,例如散点图,直方图和提琴图,以加深我们对数据的理解。 我们还将执行简单的预测建模。
第 1 课, “Jupyter 基础知识”,涵盖了 Jupyter 中的数据分析基础。 我们将从 Jupyter 的用法说明和功能入手,例如魔术功能和制表符补全。 然后,我们将过渡到特定于数据科学的材料。 我们将在实时 Jupyter笔记本中进行探索性分析。 我们将使用视觉辅助,例如散点图,直方图和提琴图,以加深我们对数据的理解。 我们还将执行简单的预测建模。
第 2 课,“数据清理和高级机器学习”显示了如何在 Jupyter笔记本中训练预测模型。 我们将讨论如何计划机器学习策略。 本课还说明了机器学习术语,例如监督学习,非监督学习,分类和回归。 我们将讨论使用 Scikit-learn 和 Pandas 预处理数据的方法。
......@@ -17,34 +17,34 @@
本书将要求以下最低硬件要求:
* 处理器:Intel i5(或等效版本)
* 记忆体:8GB RAM
* 内存:8GB RAM
* 硬盘:10 GB
* 互联网连接
在本书中,我们将使用 Python 和 Jupyter笔记本运行代码。 此外,还需要 Anaconda 环境才能运行 Python 和 Jupyter 笔记本。 请确保在计算机上安装了以下软件:
* Python 3.5+
* 水蟒 4.3+
* Anaconda 4.3+
Anaconda 安装随附的 Python 库:
* matplotlib 2.1.0 以上
* ipython 6.1.0+
* 要求 2.18.4+
* beautifulsoup4 4.6.0+
* numpy 的 1.13.1+
* Matplotlib 2.1.0 以上
* IPython 6.1.0+
* Requests 2.18.4+
* BeautifulSoup4 4.6.0+
* NumPy 1.13.1+
* Pandas 0.20.3+
* Scikit-learn 0.19.0+
* Seaborn 0.8.0+
* 散景 0.12.10+
* Bokeh 0.12.10+
需要手动安装的 Python 库:
* 毫升
* 版本信息
* mlxtend
* version_information
* ipython-sql
* pdir2
* Graphviz
* GraphViz
## 安装和设置
......
......@@ -184,7 +184,7 @@ Jupyter 具有的许多吸引人的功能,这些特征使高效的 Python 编
* 导入外部库时列出可用的模块
* 列出导入的外部库的可用模块
* 功能和变量完成
* 功能和变量补全
当您需要了解模块的可用输入参数,探索新库,发现新模块或只是加快工作流程时,尤其有用。 它们将节省写出变量名或函数的时间,并减少了拼写错误。 制表符的完成效果非常好,以至于您可能在今天以后难以在其他编辑器中编写 Python 代码!
......@@ -311,7 +311,7 @@ scikit_learn==0.19.0
就像常规 Python 脚本一样,可以随时将库导入到笔记本中。 最佳做法是将您使用的大多数软件包放在文件顶部。 有时在笔记本中途加载东西是有意义的,这完全可以。
2. 运行单元导入外部库并设置绘图选项:
2. 运行单元导入外部库并设置绘图选项:
![Import Jupyter Notebooksplotting environment, setting upthe external libraries and set up the plotting environment](img/image1_043.jpg)
......@@ -344,9 +344,9 @@ scikit_learn==0.19.0
我们进行此分析的一般方法是执行以下操作:
* 使用 Pandas `DataFrame`将数据加载到 Jupyter 中
* 定量了解功能
* 了解定量特征
* 寻找模式并提出问题
* 回答问题的问题
* 回答问题
## 子主题 A:使用 Pandas `DataFrame`将数据加载到 Jupyter 中
......@@ -895,7 +895,7 @@ scikit_learn==0.19.0
让我们看看通过新功能`AGE_category`进行细分时目标变量的分布情况。
5. 通过运行以下代码制作提琴图:
5. 通过运行以下代码制作提琴图:
```py
sns.violinplot(x='MEDV', y='AGE_category', data=df,
......@@ -904,11 +904,11 @@ scikit_learn==0.19.0
![Create categorical fieldscreatingcategorical fields from continuous variables and make segmented visualizations](img/image1-145.jpg)
提琴图显示了每个年龄类别的房屋中值分布的核密度估计。 我们看到它们都类似于正态分布。 “非常老”组的房价中位数样本最低,并且宽度相对较大,而其他组则更紧密地围绕其平均值。 青年组偏向高端,这可以从右半部分的放大和白点在分布主体内的粗黑线中的位置明显看出。
提琴图显示了每个年龄类别的房屋中值分布的核密度估计。 我们看到它们都类似于正态分布。 “非常老”组的房价中位数样本最低,并且宽度相对较大,而其他组则更紧密地围绕其平均值。 青年组偏向高端,这可以从右半部分的放大和白点在分布主体内的粗黑线中的位置明显看出。
这个白点代表平均值,粗黑线跨越了大约 50% 的总体(填充到白点两侧的第一个分位数)。 黑色的细线代表箱线图的晶须,覆盖 95% 的人口。 通过将`inner='point'`传递给`sns.violinplot()`,可以修改此内部可视化以显示各个数据点。 现在开始吧。
6. 重做提琴图,将`inner='point'`参数添加到`sns.violinplot`调用中:
6. 重做提琴图,将`inner='point'`参数添加到`sns.violinplot`调用中:
![Create categorical fieldscreatingcategorical fields from continuous variables and make segmented visualizations](img/image1-147.jpg)
......@@ -925,13 +925,13 @@ scikit_learn==0.19.0
![Create categorical fieldscreatingcategorical fields from continuous variables and make segmented visualizations](img/image1_149.jpg)
查看直方图上的,对于`RM`和`TAX`,每个段的基础分布显得相似。 另一方面,`LSTAT`分布看起来更加不同。 我们可以再次使用提琴图来更详细地关注它们。
查看直方图上的,对于`RM`和`TAX`,每个段的基础分布显得相似。 另一方面,`LSTAT`分布看起来更加不同。 我们可以再次使用提琴图来更详细地关注它们。
8. 制作一个提琴图,比较每个`AGE_category`段的`LSTAT`分布:
8. 制作一个提琴图,比较每个`AGE_category`段的`LSTAT`分布:
![Create categorical fieldscreatingcategorical fields from continuous variables and make segmented visualizations](img/image1_151.jpg)
`MEDV`小提琴图不同,在每个小提琴图中,分布图的宽度大致相同,而这里的宽度随`AGE`的增加而增加。 以旧房屋为主的社区(“非常旧”的部分)的居民数量很少,甚至很多,而相对较新的社区更可能是较高阶级的人群,超过 95% 的样本的低阶级百分比低于“非常旧”的社区。 这是有道理的,因为相对而言,新街区会更昂贵。
`MEDV`提琴图不同,在每个提琴图中,分布图的宽度大致相同,而这里的宽度随`AGE`的增加而增加。 以旧房屋为主的社区(“非常旧”的部分)的居民数量很少,甚至很多,而相对较新的社区更可能是较高阶级的人群,超过 95% 的样本的低阶级百分比低于“非常旧”的社区。 这是有道理的,因为相对而言,新街区会更昂贵。
# 总结
......@@ -939,6 +939,6 @@ scikit_learn==0.19.0
我们从 Jupyter 的用法说明和功能开始,例如魔术功能和制表符补全。 然后,过渡到特定于数据科学的材料,我们介绍了使用 Python 进行数据科学最重要的库。
在课程的后半部分,我们在现场 Jupyter笔记本中进行了探索性分析。 在这里,我们使用了视觉辅助工具,例如散点图,直方图和提琴图,以加深我们对数据的理解。 我们还执行了简单的预测建模,这是本书下一课的重点。
在课程的后半部分,我们在现场 Jupyter笔记本中进行了探索性分析。 在这里,我们使用了视觉辅助工具,例如散点图,直方图和提琴图,以加深我们对数据的理解。 我们还执行了简单的预测建模,这是本书下一课的重点。
在下一课中,我们将讨论如何进行预测分析,在准备用于建模的数据时应考虑的事项以及如何使用 Jupyter笔记本实现和比较各种模型。
\ No newline at end of file
......@@ -12,11 +12,11 @@
在本课程中,您将:
* 划机器学习分类策略
* 划机器学习分类策略
* 预处理数据以准备进行机器学习
* 火车分类模型
* 训练分类模型
* 使用验证曲线调整模型参数
* 使用降维来增强模型性能
* 使用降维来增强模型表现
# 准备训练预测模型
......@@ -398,7 +398,7 @@ print(df.left.isnull().sum())
![Activity A: Preparing to Train a Predictive Model for the Employee-Retention Problem](img/image2_028.jpg)
2. 通过运行以下代码来显示功能部件分发
2. 通过运行以下代码来显示特征部件分布
```py
for f in df.columns:try:fig = plt.figure()…
......@@ -480,7 +480,7 @@ print(df.left.isnull().sum())
assert df.isnull().sum().sum() == 0
```
8. 最后,我们将字符串和布尔值字段转换为整数表示形式。 特别是,我们将手动将目标变量`left``yes``no`转换为`1``0`,并构建一键编码的特征。 通过运行以下代码来执行此操作:
8. 最后,我们将字符串和布尔值字段转换为整数表示形式。 特别是,我们将手动将目标变量`left``yes``no`转换为`1``0`,并构建单热编码的特征。 通过运行以下代码来执行此操作:
```py
df.left = df.left.map({'no': 0, 'yes': 1})
......@@ -525,7 +525,7 @@ print(df.left.isnull().sum())
在最简单的情况下,只有两个可能的类,这意味着我们正在执行二进制分类。 本课中的示例问题就是这种情况,我们尝试预测员工是否离开。 如果我们有两个以上的类标签,则我们正在进行多类分类。
尽管在使用 Scikit-learn 训练模型时,二进制分类和多类分类之间几乎没有区别,但是在“黑匣子”内部进行的操作却明显不同。 特别是,多类别分类模型通常使用“一休”方法。 对于具有三个类别标签的情况,其工作原理如下。 当模型与数据“拟合”时,将训练三个模型,并且每个模型都会预测样本是属于单个类别还是属于某个其他类别。 这可能使我们想到了以前对功能进行的一键编码。 当对样本进行预测时,将返回具有最高置信度的类别标签。
尽管在使用 Scikit-learn 训练模型时,二进制分类和多类分类之间几乎没有区别,但是在“黑匣子”内部进行的操作却明显不同。 特别是,多类别分类模型通常使用“一休”方法。 对于具有三个类别标签的情况,其工作原理如下。 当模型与数据“拟合”时,将训练三个模型,并且每个模型都会预测样本是属于单个类别还是属于某个其他类别。 这可能使我们想到了以前对功能进行的单热编码。 当对样本进行预测时,将返回具有最高置信度的类别标签。
在本课程中,我们将训练三种类型的分类模型:支持向量机,随机森林和 K 最近邻分类器。 这些算法中的每一个都有很大的不同。 但是,正如我们将看到的,由于 Scikit-learn,它们与训练和用于预测非常相似。 在切换到 Jupyter笔记本并实现它们之前,我们将简要了解它们的工作原理。
......@@ -966,7 +966,7 @@ K 折交叉验证算法如下:
有关完整的代码,请参考`Lesson 2`文件夹中的`Lesson 2.txt`文件。
查看功能名称,回想一下每个功能的值。 向上滚动到我们在第一个活动中创建的直方图集,以帮助您慢走记忆。 前两个特征是连续的。 这些是我们在前两个练习中用于训练模型的内容。 之后,我们有一些离散的功能,例如`number_project`和`time_spend_company`,然后是一些二进制字段,例如`work_accident`和`promotion_last_5years`。 我们还具有一堆二进制功能,例如`department_IT`和`department_accounting`,它们是通过一键编码创建的。
查看功能名称,回想一下每个功能的值。 向上滚动到我们在第一个活动中创建的直方图集,以帮助您慢走记忆。 前两个特征是连续的。 这些是我们在前两个练习中用于训练模型的内容。 之后,我们有一些离散的功能,例如`number_project`和`time_spend_company`,然后是一些二进制字段,例如`work_accident`和`promotion_last_5years`。 我们还具有一堆二进制功能,例如`department_IT`和`department_accounting`,它们是通过单热编码创建的。
考虑到类似的功能,随机森林是一种非常有吸引力的模型。 一方面,它们与由连续数据和分类数据组成的功能集兼容,但这并不是特别的; 例如,也可以对 SVM 进行混合特征类型的训练(只要进行适当的预处理)。
......@@ -977,7 +977,7 @@ K 折交叉验证算法如下:
一种简单的方法是如下预处理数据:
* 标准化连续变量
* 一键编码分类特征
* 单热编码分类特征
* 将二进制值从`0`和`1`移至`-1`和`1`
* 然后,可以使用混合特征数据来训练各种分类模型
......@@ -1047,7 +1047,7 @@ K 折交叉验证算法如下:
![Training a predictive model for the employee retention problem](img/image2_56.jpg)
一键编码变量`department`和`salary`的有用贡献看来,我们并没有从中获得太多。 同样,`promotion_last_5years`和`work_accident`功能似乎不太有用。
单热编码变量`department`和`salary`的有用贡献看来,我们并没有从中获得太多。 同样,`promotion_last_5years`和`work_accident`功能似乎不太有用。
让我们使用主成分分析(PCA)将所有这些弱功能浓缩为几个主要成分。
......
......@@ -731,7 +731,7 @@ Bokeh 是一个用于 Python 的交互式可视化库。 其目标是提供与 D
我们需要运行`output_notebook()`以便在 Jupyter 笔记本中渲染交互式视觉效果。
3. 通过运行以下代码生成随机数据以进行绘图:
3. 通过运行以下代码生成随机数据用于绘图:
```py
np.random.seed(30)data = pd.Series(np.random.randn(200),index=list(range(200)))\.cumsum()x = data.indexy = data.values
......
......@@ -4,7 +4,7 @@
在本章中,我们将首先在可运行的 Python 环境中安装并做好准备:
* 安装有思想的顶篷
* 安装 Enthought Canopy
* 安装 Python 库
* 如何使用 IPython/Jupyter 笔记本
* 如何使用,阅读和运行本书的代码文件
......
......@@ -893,7 +893,7 @@ In: y_probs = bst.predict(covertype_test_X,
# CatBoost
2017 年 7 月,另一种有趣的 GBM 算法由俄罗斯搜索引擎 Yandex 公开:它是 [CatBoost](https://catboost.yandex/),其名称来自两个词 Category 和 Boosting。 实际上,它的最强之处是能够处理分类变量,该变量实际上通过采用“一键编码”和“均值编码”的混合策略来充分利用大多数关系数据库中的信息(一种通过分配变量来表达分类级别的方法) 适当的数值来解决手头的问题;稍后再讨论)。
2017 年 7 月,另一种有趣的 GBM 算法由俄罗斯搜索引擎 Yandex 公开:它是 [CatBoost](https://catboost.yandex/),其名称来自两个词 Category 和 Boosting。 实际上,它的最强之处是能够处理分类变量,该变量实际上通过采用“单热编码”和“均值编码”的混合策略来充分利用大多数关系数据库中的信息(一种通过分配变量来表达分类级别的方法) 适当的数值来解决手头的问题;稍后再讨论)。
正如[《CatBoost:具有分类特征的梯度增强支持》](https://pdfs.semanticscholar.org/9a85/26132d3e05814dca7661b96b3f3208d676cc.pdf)所解释的,因为其他 GBM 解决方案都通过一次热编码来处理分类变量(就数据矩阵的内存打印而言而言非常昂贵)或通过将任意数字代码分配给分类级别(至多一种不精确的方法,需要大的分支才能生效),CatBoost 的解决方法有所不同。
......
......@@ -713,7 +713,7 @@ In: with sns.axes_style("darkgrid"):
![](img/b730fc3d-50ad-483e-9747-3db8e1d67418.png)
至于评估跨班级的数据分布,Seaborn 提供了另一种工具,即[小提琴图](https://medium.com/@bioturing/5-reasons-you-should-use-a-violin-graph-31a9cdf2d0c6)。 小提琴图只是一个箱形图,其框是根据密度估计来成形的,因此可以直观地传达信息:
至于评估跨班级的数据分布,Seaborn 提供了另一种工具,即[提琴图](https://medium.com/@bioturing/5-reasons-you-should-use-a-violin-graph-31a9cdf2d0c6)提琴图只是一个箱形图,其框是根据密度估计来成形的,因此可以直观地传达信息:
```py
In: with sns.axes_style("whitegrid"):
......@@ -722,7 +722,7 @@ In: with sns.axes_style("whitegrid"):
sns.despine(offset=10, trim=True)
```
先前代码生成的提琴图可以为数据集提供有趣的见解:
先前代码生成的提琴图可以为数据集提供有趣的见解:
![](img/43c267db-5e37-46d5-8197-5c0a2571037b.png)
......
......@@ -455,7 +455,7 @@ Out: [('the', 29998)]
广播变量是驱动程序节点共享的变量; 也就是说,该节点在我们的配置中运行 IPython笔记本,并且所有节点都在集群中。 这是一个只读变量,因为该变量由一个节点广播,并且如果另一个节点对其进行更改,则永远不会回读。
现在,让我们在一个简单的示例中查看其工作方式:我们希望对仅包含性别信息作为字符串的数据集进行一次热编码。 虚拟数据集仅包含一个特征,该特征可以是男性`M`,女性`F`或未知`U`(如果信息丢失)。 具体来说,我们希望所有节点都使用定义的“一键编码”,如以下词典中列出:
现在,让我们在一个简单的示例中查看其工作方式:我们希望对仅包含性别信息作为字符串的数据集进行一次热编码。 虚拟数据集仅包含一个特征,该特征可以是男性`M`,女性`F`或未知`U`(如果信息丢失)。 具体来说,我们希望所有节点都使用定义的“单热编码”,如以下词典中列出:
```py
In: one_hot_encoding = {"M": (1, 0, 0), "F": (0, 1, 0),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册