提交 23a69a36 编写于 作者: W wizardforcel

2020-08-27 17:22:12

上级 2ef331ad
......@@ -48,11 +48,11 @@
如果计算机程序在 *T* 上的性能,则据说该计算机程序可以从 *E* 的经验中学习某些任务 *T* 和某些性能指标 *P**P* 所衡量的,会随着经验 *E* 而提高。
该定义以非常简洁的方式很好地捕捉了 ML 的本质。 让我们以现实世界为例,以更好地理解它。 让我们考虑一个任务( *T* )是识别垃圾邮件。 现在,我们可能会向有关垃圾邮件和非垃圾邮件的系统提供许多示例(或经验),从中可以学习而不是对其进行明确编程。 然后可以在学习到的识别垃圾邮件的任务上对程序或系统的性能进行测量( *P* )。 有趣,不是吗?
该定义以非常简洁的方式很好地捕捉了 ML 的本质。 让我们以现实世界为例,以更好地理解它。 让我们考虑一个任务(*T*)是识别垃圾邮件。 现在,我们可能会向有关垃圾邮件和非垃圾邮件的系统提供许多示例(或经验),从中可以学习而不是对其进行明确编程。 然后可以在学习到的识别垃圾邮件的任务上对程序或系统的性能进行测量(*P*)。 有趣,不是吗?
# 浅层和深度学习
因此,ML 的任务是从训练示例中识别模式,并将这些学习到的模式(或表示形式)应用于新的看不见的数据。 ML 有时也称为**浅层学习**,因为它学习*单层表示形式*的性质(在大多数情况下)。 这使我们想到*的表示层是什么?**什么是深度学习?* 我们将在后续章节中回答这些问题。 让我们快速了解一下深度学习。
因此,ML 的任务是从训练示例中识别模式,并将这些学习到的模式(或表示形式)应用于新的看不见的数据。 ML 有时也称为**浅层学习**,因为它学习*单层表示形式*的性质(在大多数情况下)。 这使我们想到*表示层是什么**什么是深度学习*我们将在后续章节中回答这些问题。 让我们快速了解一下深度学习。
深度学习是机器学习的一个子领域,它涉及从训练示例中学习连续的有意义的表示,以解决给定的任务。 深度学习与人工神经网络紧密相关,人工神经网络由一个接一个的堆叠的多层组成,这些层捕获连续的表示。
......@@ -66,7 +66,7 @@ ML 是 AI 的一个流行子领域,涵盖了非常广泛的领域。 如此受
基于人工监督量的分类:
* **有监督的学习**:此类学习涉及人为监督。 在监督学习下的算法利用训练数据和相关的输出来学习两者之间的映射,并将其应用于看不见的数据。 分类和回归是监督学习算法的两种主要类型。
* **监督学习**:此类学习涉及人为监督。 在监督学习下的算法利用训练数据和相关的输出来学习两者之间的映射,并将其应用于看不见的数据。 分类和回归是监督学习算法的两种主要类型。
* **无监督学习**:此类算法尝试从输入数据中学习固有的潜在结构,模式和关系,而没有任何关联的输出/标签(人工监督)。 聚类,降维,关联规则挖掘等是无监督学习算法的几种主要类型。
* **半监督学习**:此类算法是监督学习和无监督学习的混合体。 在这种情况下,该算法可处理少量带标签的训练数据和更多未标记的数据。 因此创造性地利用了监督和非监督方法来解决给定的任务。
* **强化学习**:这类算法与有监督和无监督学习方法有些不同。 这里的中心实体是一个代理,它会在一段时间内进行训练,同时与环境互动以最大化奖励/奖励。 代理基于与环境的交互所获得的奖励/惩罚,反复学习和更改策略/策略。
......@@ -86,39 +86,39 @@ ML 是 AI 的一个流行子领域,涵盖了非常广泛的领域。 如此受
* **训练数据集**:在训练过程中使用的训练样本和相应的输出称为**训练数据**。 形式上,训练数据集是一个由两个元素组成的元组,由输入元素(通常是矢量)和相应的输出元素或信号组成。
* **测试数据集**:用于测试学习功能性能的未知数据集。 该数据集也是一个包含输入数据点和相应输出信号的二元组。 该集合中的数据点不用于训练阶段(此数据集也进一步分为验证集合;我们将在后续章节中对此进行详细讨论)。
* **学习的功能**:这是训练阶段的输出。 也称为*推断功能**模型*。 根据训练数据集中的训练示例(输入数据点及其对应的输出)推断此功能。 理想的模型/学习的函数将以这样的方式学习映射,即可以将结果也推广到看不见的数据。
* **习得函数**:这是训练阶段的输出。 也称为*推断函数**模型*。 根据训练数据集中的训练示例(输入数据点及其对应的输出)推断此功能。 理想的模型/学习的函数将以这样的方式学习映射,即可以将结果也推广到看不见的数据。
有多种可用的监督学习算法。 根据用例需求,可以将它们主要分类为分类和回归模型。
# 分类
简而言之,这些算法可帮助我们回答*客观*问题或*是-否*预测。 例如,这些算法在*这样的场景下有用吗?**该肿瘤会癌变吗?* 等。
简而言之,这些算法可帮助我们回答*客观*问题或*是/否*预测。 例如,这些算法在*这样的场景下有用吗**该肿瘤会癌变吗*等。
形式上,分类算法的主要目标是根据输入数据点预测本质上属于分类的输出标签。 输出标签本质上是分类的; 也就是说,它们每个都属于离散的类或类别。
**Logistic 回归****支持向量机****SVM**),**神经网络****随机森林****k 最近邻****KNN**),**决策树**等是一些流行的分类算法。
**Logistic 回归****支持向量机****SVM**),**神经网络****随机森林****k 最近邻****KNN**),**决策树**等是一些流行的分类算法。
假设我们有一个真实的用例来评估不同的汽车模型。 为简单起见,让我们假设该模型可以根据多个输入训练样本预测每种汽车模型的输出是可接受的还是不可接受的。 输入的训练样本具有诸如购买价格,门数,容量(以人数计)和安全性的属性。
除类标签之外的级别将每个数据点表示为可接受或不可接受。 下图描述了即将出现的二进制分类问题。 分类算法将训练样本作为输入以准备监督模型。 然后,利用该模型来预测新数据点的评估标签:
除类标签之外的级别将每个数据点表示为可接受或不可接受。 下图描述了即将出现的二分类问题。 分类算法将训练样本作为输入以准备监督模型。 然后,利用该模型来预测新数据点的评估标签:
![](img/259513b0-c48f-487c-898c-780cf7700b29.png)
监督学习:用于汽车模型评估的二进制分类
监督学习:用于汽车模型评估的二分类
由于在分类问题中输出标签是离散类,因此如果只有两个可能的输出类,则该任务称为**二进制分类问题**,否则称为多类分类。 预测明天是否下雨将是一个二进制分类问题(输出是“是”或“否”),而从扫描的手写图像中预测数字将是具有 10 个标签(零到九个可能的输出标签)的多类分类。 。
由于在分类问题中输出标签是离散类,因此如果只有两个可能的输出类,则该任务称为**二分类问题**,否则称为多类分类。 预测明天是否下雨将是一个二分类问题(输出是“是”或“否”),而从扫描的手写图像中预测数字将是具有 10 个标签(零到九个可能的输出标签)的多类分类。 。
# 回归
此类有监督的学习算法有助于我们回答*数量**类型的*定量*问题。* 正式而言,回归模型的关键目标是价值估算。 在这种情况下,输出标签本质上是连续的(相对于分类而言是离散的)。
此类监督学习算法有助于我们回答*数量***定量*类型的问题。* 正式而言,回归模型的关键目标是价值估算。 在这种情况下,输出标签本质上是连续的(相对于分类而言是离散的)。
在回归问题的情况下,输入数据点称为*独立**解释变量*,而输出称为*因变量*。 还使用训练数据样本来训练回归模型,该训练数据样本包括输入(或独立)数据点以及输出(或相关)信号。 线性回归,多元回归,回归树等是一些监督式回归算法。
在回归问题的情况下,输入数据点称为*自变量**解释变量*,而输出称为*因变量*。 还使用训练数据样本来训练回归模型,该训练数据样本包括输入(或独立)数据点以及输出(或相关)信号。 线性回归,多元回归,回归树等是一些监督式回归算法。
可以基于建模模型如何对因变量和自变量之间的关系建模来进一步分类。
**简单线性回归**模型适用于单个自变量和单个因变量。 **普通最小二乘****OLS**)回归是一种流行的线性回归模型。 多元回归或多元回归是只有一个因变量的地方,而每个观察值都是由多个解释变量组成的向量。
多项式回归模型是多元回归的一种特殊情况。 在此,因变量被建模为自变量的第 n <sup></sup>。 由于多项式回归模型拟合或映射因变量和自变量之间的非线性关系,因此这些也称为**非线性回归**模型。
多项式回归模型是多元回归的一种特殊情况。 在此,因变量被建模为自变量的第 n 次幂。 由于多项式回归模型拟合或映射因变量和自变量之间的非线性关系,因此这些也称为**非线性回归**模型。
以下是线性回归的示例:
......@@ -126,7 +126,7 @@ ML 是 AI 的一个流行子领域,涵盖了非常广泛的领域。 如此受
监督学习:线性回归
为了理解不同的回归类型,让我们考虑一个真实的用例,它基于汽车的速度来估计汽车的停止距离。 在这里,根据我们拥有的训练数据,我们可以将停车距离建模为速度的线性函数或汽车速度的多项式函数。 请记住,主要目的是在不过拟合训练数据本身的情况下最大程度地减少错误。
为了理解不同的回归类型,让我们考虑一个真实的用例,它基于汽车的速度来估计汽车的停止距离。 在这里,根据我们拥有的训练数据,我们可以将停车距离建模为速度的线性函数或汽车速度的多项式函数。 请记住,主要目的是在不过拟合训练数据本身的情况下最大程度地减少错误。
上图描述了线性拟合,而下图描述了同一数据集的多项式拟合:
......@@ -177,7 +177,7 @@ ML 是 AI 的一个流行子领域,涵盖了非常广泛的领域。 如此受
这类无监督的 ML 算法有助于我们理解事务数据集并从中提取模式。 这些算法也称为**市场篮子分析****MBA**),可帮助我们识别跨交易的项目之间有趣的关系和关联。
使用关联规则挖掘,我们可以回答诸如*之类的问题,人们在给定商店中一起购买了哪些物品?**购买葡萄酒的人也倾向于购买奶酪吗?* 等等。 FP-growth,ECLAT 和 Apriori 是用于关联规则挖掘任务的最广泛使用的算法。
使用关联规则挖掘,我们可以回答诸如*人们在给定商店中一起购买了哪些物品**购买葡萄酒的人也倾向于购买奶酪吗*之类的问题等等。 FP-growth,ECLAT 和 Apriori 是用于关联规则挖掘任务的最广泛使用的算法。
# 异常检测
......@@ -254,7 +254,7 @@ CRISP-DM 模型提供了用于 ML 和相关项目管理的高级工作流。 在
数据收集和提取通常是故事的起点。 数据集有各种形式,包括结构化和非结构化数据,这些数据通常包括丢失或嘈杂的数据。 每种数据类型和格式都需要特殊的机制来进行数据处理和管理。 例如,如果一个项目涉及对推文的分析,我们需要使用 Twitter API 并开发机制以提取所需的推文,这些推文通常为 JSON 格式。
其他场景可能涉及已经存在的结构化或非结构化公共数据集或私有数据集,除了仅开发提取机制外,这两种情况都可能需要其他权限。 Sarkar 和他们的合著者 Springer 在本书的*《使用 Python 进行机器学习》(HTG1)的第 3 章中讨论了与使用各种数据格式有关的相当详细的内容,如果您有兴趣进一步研究,请参阅 2017 年的 Springer。 更多详细信息。*
其他场景可能涉及已经存在的结构化或非结构化公共数据集或私有数据集,除了仅开发提取机制外,这两种情况都可能需要其他权限。 Sarkar 和他们的合著者在《Python 机器学习》的第 3 章中讨论了与使用各种数据格式有关的相当详细的内容,如果您有兴趣进一步研究,请参阅它。
# 资料准备
......@@ -307,7 +307,7 @@ CRISP-DM 模型提供了用于 ML 和相关项目管理的高级工作流。 在
* 根据模型预测与实际值创建混淆矩阵。 这涵盖了诸如**真阳性****TP**),**假阳性****FP**),**真阴性****TN**)和**假阴性****FN**)将其中一个类别视为正类别(通常是感兴趣的类别)。
* 从混淆矩阵得出的度量标准,包括准确性(总体性能),精度(模型的预测能力),召回率(命中率)和 F1 分数(精确度和召回率的谐和平均值)。
* **接收器操作员特征曲线****ROC**)和曲线( **AUC**)下的**面积,表示 AUC。**
* **受试者特征曲线****ROC**)和**曲线下面积****AUC**)。
* R 平方(确定系数),**均方根误差****RMSE**),F 统计量,**赤池信息准则****AIC**),以及专门用于回归模型的 p 值。
评估无监督方法(例如聚类)的流行指标包括:
......@@ -327,7 +327,7 @@ CRISP-DM 模型提供了用于 ML 和相关项目管理的高级工作流。 在
正如在介绍监督学习算法时所讨论的那样,我们利用称为**训练数据集**的数据子集来学习目标函数,然后在称为**测试数据集**的另一个子集上测试性能。 由于该算法仅看到所有可能数据组合的子集,因此在预测输出和观察到的输出之间会出现错误。 这称为**总误差****预测误差**
*总误差=偏差误差+方差误差+不可约误差*
*总误差 = 偏差误差 + 方差误差 + 不可约误差*
不可减少的误差是由于噪声,我们对问题的框架,收集数据的方式等导致的固有误差。 顾名思义,这种错误是无法避免的,从算法的角度来看,我们几乎无能为力。
......@@ -353,7 +353,7 @@ CRISP-DM 模型提供了用于 ML 和相关项目管理的高级工作流。 在
鼓励读者访问[以下链接](https://elitedatascience.com/bias-variance-tradeoff),以更好,更深入地了解偏差方差的折衷方法。
考虑给我们给出一个问题陈述:g *等于一个人的身高,确定他/她的体重*。 我们还为训练数据集提供了相应的身高和体重值。 数据如下图所示:
考虑给我们给出一个问题陈述:*给定一个人的身高,确定他/她的体重*。 我们还为训练数据集提供了相应的身高和体重值。 数据如下图所示:
![](img/72d4d8c2-aaaa-4e37-bca5-cc30ce55657f.png)
......@@ -371,27 +371,27 @@ CRISP-DM 模型提供了用于 ML 和相关项目管理的高级工作流。 在
欠拟合模型
该惰性函数始终预测恒定的输出值。 由于目标函数无法学习数据的基础结构,因此导致**不适合**的情况。 欠拟合模型的预测性能较差。
该惰性函数始终预测恒定的输出值。 由于目标函数无法学习数据的基础结构,因此导致**欠拟合**的情况。 欠拟合模型的预测性能较差。
# 过拟合
# 过拟合
训练阶段的另一个极端称为过拟合。 过拟合图可以表示如下:
训练阶段的另一个极端称为过拟合。 过拟合图可以表示如下:
![](img/f1c31eb8-3da3-4746-af69-1851a2bc27cc.png)
过拟合模型
这显示了一个目标函数,可以完美地映射训练数据集中的每个数据点。 这就是众所周知的**模型过拟合**。 在这种情况下,该算法试图了解包括噪声在内的确切数据特征,因此无法可靠地预测看不见的新数据点。
这显示了一个目标函数,可以完美地映射训练数据集中的每个数据点。 这就是众所周知的**模型过拟合**。 在这种情况下,该算法试图了解包括噪声在内的确切数据特征,因此无法可靠地预测看不见的新数据点。
# 概括
欠拟合和过拟合之间的最佳结合点是我们所说的**良好拟合**。 可以很好地概括给定问题的模型图如下:
欠拟合和过拟合之间的最佳结合点是我们所说的**良好拟合**。 可以很好地概括给定问题的模型图如下:
![](img/12c9ca72-544a-460a-8d0c-023b1eda7747.png)
很好的概括
可以在看不见的数据点以及训练数据上表现良好的学习功能被称为**通用功能**。 因此,泛化指的是基于在训练阶段学到的概念,目标功能在看不见的数据上执行得如何。 上图描绘了很好的概括拟合。
可以在看不见的数据点以及训练数据上表现良好的学习能力被称为**泛化能力**。 因此,泛化指的是基于在训练阶段学到的概念,目标函数在看不见的数据上执行得如何。 上图描绘了很好的概括拟合。
# 模型调整
......@@ -399,9 +399,9 @@ CRISP-DM 模型提供了用于 ML 和相关项目管理的高级工作流。 在
ML 算法具有不同的参数或旋钮,可以根据项目要求和不同的评估结果进行调整。 通过遍历超参数或元参数的不同设置来获得更好的结果,模型调整可以起作用。 超参数是高级抽象上的旋钮,它是在学习过程开始之前设置的。
这与模型级别参数不同,模型级别参数是在训练阶段期间学习的*。 因此,模型调整也称为**超参数优化**。*
这与模型级别参数不同,模型级别参数在训练阶段期间学习。 因此,模型调整也称为**超参数优化**
网格搜索,随机超参数搜索,贝叶斯优化等是执行模型调整的流行方法。 尽管模型调整非常重要,但过度调整可能会对学习过程产生不利影响。 在*偏差方差* *权衡*部分中讨论了与过度调整过程有关的一些问题。
网格搜索,随机超参数搜索,贝叶斯优化等是执行模型调整的流行方法。 尽管模型调整非常重要,但过度调整可能会对学习过程产生不利影响。 在*偏差方差权衡*部分中讨论了与过度调整过程有关的一些问题。
# 部署和监控
......@@ -442,9 +442,9 @@ In [1]: import numpy as np
...: plt.rcParams.update(params)
```
设置和要求到位后,我们可以开始关注数据。 正在考虑进行探索性分析的数据集是`battles.csv`文件,其中包含*权力游戏*(截至第 5 季)的所有主要战役。
设置和要求到位后,我们可以开始关注数据。 正在考虑进行探索性分析的数据集是`battles.csv`文件,其中包含《权力的游戏》(截至第 5 季)的所有主要战役。
*权力游戏*是有史以来最受欢迎的电视连续剧之一,是一部幻想小说,背景是在 *Westeros**Essos* 的虚构大陆上制作的,充满了许多情节 还有大量的角色都在为铁王座而战! 它是 George R. R. Martin 的*冰与火之歌*小说系列的改编。 作为一个受欢迎的系列,它吸引了许多人的注意,并且数据科学家也不排除在外。 [该笔记本在 Myles O'Neill 增强的 Kaggle 数据集上显示了 EDA(更多详细信息](https://www.kaggle.com/mylesoneill/game-of-thrones)。 该数据集基于多个人收集并贡献的多个数据集的组合。 在此分析中,我们使用了`battles.csv`。 原始战斗数据由克里斯·阿尔邦(Chris Albon)提供; 更多详细信息,请参见[这里](https://github.com/chrisalbon/war_of_the_five_kings_dataset)
《权力的游戏》是有史以来最受欢迎的电视连续剧之一,是一部幻想小说,背景是在 *Westeros**Essos* 的虚构大陆上制作的,充满了许多情节 还有大量的角色都在为铁王座而战! 它是 George R. R. Martin 的《冰与火之歌》小说系列的改编。 作为一个受欢迎的系列,它吸引了许多人的注意,并且数据科学家也不排除在外。 [该笔记本在 Myles O'Neill 增强的 Kaggle 数据集上显示了 EDA(更多详细信息](https://www.kaggle.com/mylesoneill/game-of-thrones)。 该数据集基于多个人收集并贡献的多个数据集的组合。 在此分析中,我们使用了`battles.csv`。 原始战斗数据由克里斯·阿尔邦(Chris Albon)提供; 更多详细信息,请参见[这里](https://github.com/chrisalbon/war_of_the_five_kings_dataset)
以下代码段使用`pandas`加载`battles.csv`文件:
......@@ -456,7 +456,7 @@ In [2]: battles_df = pd.read_csv('battles.csv')
![](img/de9875f7-8674-4f2f-909a-828daa8bd1c0.png)
权力游戏的 Battles.csv 中的示例行
权力游戏的 Battles.csv 中的示例行
我们可以分别使用`pandas`实用程序`shape``dtypes``describe()`查看行的总数,每个属性的数据类型以及数字属性的常规统计信息。 我们有 38 场战斗的数据,其中 25 项属性描述了每一场。
......@@ -469,7 +469,7 @@ In [3]: sns.countplot(y='year',data=battles_df)
```
下图显示,在 **299** 年中,战斗次数最多,其次分别是 **300****298**
下图显示,在 **299** 年中,战斗次数最多,其次分别是 **300****298**
![](img/3a4330e8-8f0c-440a-aa0c-b0faf5f172d9.png)
......@@ -609,7 +609,7 @@ In [7]: temp_df = battles_df.dropna(
![](img/4c391b2d-6a89-4c72-93f0-458c55e7e3b6.png)
权力游戏中的大敌
权力游戏中的大敌
我们看到数据集证实了直觉。 **Robb Stark****Joffrey Baratheon** 已经进行了 19 场战斗,其他两对则进行了五场或更少的战斗。
......@@ -633,7 +633,7 @@ EDA 是一种非常强大的机制,可用于在进入 ML 的其他阶段之前
# 处理数值数据
数值数据通常以整数或浮点数的形式在数据集中可用,并且通常称为**连续** **数值数据**,通常是 ML 友好数据类型。 友好地说,我们指的是可以直接在大多数 ML 算法中摄取数字数据的事实。 但是,这并不意味着数字数据不需要其他处理和特征工程步骤。
数值数据通常以整数或浮点数的形式在数据集中可用,并且通常称为**连续数值数据**,通常是 ML 友好数据类型。 友好地说,我们指的是可以直接在大多数 ML 算法中摄取数字数据的事实。 但是,这并不意味着数字数据不需要其他处理和特征工程步骤。
有多种技术可以从数值数据中提取和工程化特征。 让我们看一下本节中的一些技术:
......@@ -646,13 +646,13 @@ EDA 是一种非常强大的机制,可用于在进入 ML 的其他阶段之前
# 处理分类数据
常见的另一类重要数据是分类数据。 分类要素具有离散值,这些离散值属于一组有限的类。 这些类可以表示为文本或数字。 根据分类的顺序,分类特征分别称为**标称****标称**
常见的另一类重要数据是分类数据。 分类要素具有离散值,这些离散值属于一组有限的类。 这些类可以表示为文本或数字。 根据分类的顺序,分类特征分别称为**标称****序数**
名义特征是具有有限值集合但没有任何自然顺序的那些分类特征。 例如,天气季节,电影类型等都是标称特征。 具有有限类集并具有自然顺序的分类特征称为**序数特征**。 例如,星期几,着装大小等都是常规的。
标称特征是具有有限值集合但没有任何自然顺序的那些分类特征。 例如,天气季节,电影类型等都是标称特征。 具有有限类集并具有自然顺序的分类特征称为**序数特征**。 例如,星期几,着装大小等都是常规的。
通常,要素工程中的任何标准工作流程都涉及将这些分类值转换为数字标签的某种形式,然后在这些值上应用某种编码方案。 流行的编码方案简要介绍如下:
* **一键编码**:此策略为分类属性创建 *n* 个二进制值列,假设存在 *n* 个不同类别
* **单热编码**:此策略为分类属性创建 *n* 个二进制值列,假设存在 *n* 个不同类别
* **虚拟编码**:此策略为分类属性创建 *n-1* 个二进制值列,假定存在 *n* 个不同类别
* **特征散列**:如果我们使用散列函数将多个特征添加到单个容器或存储桶(新特征)中,则可以利用此策略,当我们具有大量特征时通常会使用
......@@ -663,7 +663,7 @@ EDA 是一种非常强大的机制,可用于在进入 ML 的其他阶段之前
图像或视觉数据是丰富的数据源,可以使用 ML 算法和深度学习解决几个用例。 图像数据提出了很多挑战,需要经过仔细的预处理和转换,然后才能被任何算法使用。 对图像数据执行特征工程的一些最常见方法如下:
* **利用元数据信息或 EXIF 数据**:诸如图像创建日期,修改日期,尺寸,压缩格式,用于捕获图像的设备,分辨率,焦距等属性。
* **像素和通道信息**:每个图像都可以视为像素值矩阵或([ *m**n**c* )矩阵 其中 *m* 代表行数, *n* 代表列数, *c* 指向颜色通道(例如 R,G 和 B)。 然后可以根据算法和用例的要求将这种矩阵转换为不同的形状。
* **像素和通道信息**:每个图像都可以视为像素值矩阵或([ *m**n**c*)矩阵 其中 *m* 代表行数, *n* 代表列数, *c* 指向颜色通道(例如 R,G 和 B)。 然后可以根据算法和用例的要求将这种矩阵转换为不同的形状。
* **像素强度**:有时很难处理具有多种颜色通道的彩色图像。 基于像素强度的特征提取依赖于基于强度的像素合并,而不是利用原始像素级别的值。
* **边缘检测**:可以利用相邻像素之间对比度和亮度的急剧变化来识别物体边缘。 有不同的算法可用于边缘检测。
* **对象检测**:我们采用边缘检测的概念并将其扩展到对象检测,然后将识别出的对象边界用作有用的功能。 同样,可以基于可用图像数据的类型来利用不同的算法。
......@@ -692,7 +692,7 @@ EDA 是一种非常强大的机制,可用于在进入 ML 的其他阶段之前
* 拼写更正
* 词干和词条去除
在与用例有关的章节中,我们将详细介绍大多数技术。 为了更好地理解,读者可以参考 *Python 实用机器学习的*第 4 章*和*第 7 章*,* Sarkar 及其合著者,Springer,2017 年
在与用例有关的章节中,我们将详细介绍大多数技术。 为了更好地理解,读者可以参考《Python 实用机器学习》的第 4 章和第 7 章(Sarkar 及其合著者,Springer,2017 年)
# 特征工程
......@@ -701,15 +701,15 @@ EDA 是一种非常强大的机制,可用于在进入 ML 的其他阶段之前
* **词袋模型**:这是迄今为止最简单的文本数据矢量化技术。 在此技术中,每个文档都表示为 *N* 维度上的向量,其中 *N* 表示预处理语料库中所有可能的单词,向量的每个组成部分要么表示存在 单词或其频率。
* **TF-IDF model**:The bag-of-words model works under very simplistic assumptions and at certain times leads to various issues. One of the most common issues is related to some words overshadowing the rest of the words due to very high frequency, as the bag-of-words model utilizes absolute frequencies to vectorize. The **Term Frequency-Inverse Document Frequency** (**TF-IDF**) model mitigates this issue by scaling/normalizing the absolute frequencies. Mathematically, the model is defined as follows:
*tfidf(w,D)= tf(W,D)* idf(w,D)*
`tfidf(w, D) = tf(W, D) * idf(w, D)`
在这里, *tfidf(w,D)*表示文档 *D* , *tf(w,D)中每个单词 *w* 的 TF-IDF 分数[ “ HTG7”是文档 *D* 和 *idf(w,D)中单词 *w* 的频率,*表示文档的逆频率,以总文档的对数转换计算 语料库 *C* 中的词数除以出现 *w* 的文档的频率。*
在这里,`tfidf(w, D)`表示每个单词`w`在文档`D`中的 TF-IDF 分数, `tf(w, D)`是中每个单词`w`在文档`D`中的词频,`idf(w, D)`表示逆文档频率,计算为语料库`C`中总文档数除以`w`所在的文档数的对数转换。
除了单词袋和 TF-IDF 外,还有其他转换,例如 N-gram 袋,以及单词嵌入,例如 Word2vec,GloVe 等。 我们将在后续章节中详细介绍其中的几个。
# 功能选择
特征提取和工程设计的过程可帮助我们从基础数据集中提取特征并生成特征。 在某些情况下,这会导致大量输入要处理的算法。 在这种情况下,怀疑输入中的许多功能可能是多余的,并可能导致复杂的模型甚至过度拟合。 特征选择是从可用/生成的完整特征集中识别代表性特征的过程。 预期所选特征集将包含所需信息,以使算法能够解决给定任务而不会遇到处理,复杂性和过度拟合的问题。 功能选择还有助于更好地理解建模过程中使用的数据,并加快处理速度。
特征提取和工程设计的过程可帮助我们从基础数据集中提取特征并生成特征。 在某些情况下,这会导致大量输入要处理的算法。 在这种情况下,怀疑输入中的许多功能可能是多余的,并可能导致复杂的模型甚至过拟合。 特征选择是从可用/生成的完整特征集中识别代表性特征的过程。 预期所选特征集将包含所需信息,以使算法能够解决给定任务而不会遇到处理,复杂性和过拟合的问题。 功能选择还有助于更好地理解建模过程中使用的数据,并加快处理速度。
特征选择方法大致可分为以下三类:
......@@ -717,7 +717,7 @@ EDA 是一种非常强大的机制,可用于在进入 ML 的其他阶段之前
* **包装器方法**:这些方法对特征子集的不同组合的性能进行比较搜索,然后帮助我们选择性能最佳的子集。 向后选择和正向消除是用于特征选择的两种流行的包装方法。
* **嵌入式方法**:这些方法通过了解哪个功能子集将是最好的,从而提供了前面两种方法中的最好方法。 正则化和基于树的方法是流行的选择。
特征选择是构建 ML 系统过程中的重要方面。 如果不谨慎处理,它也是造成系统偏差的主要来源之一。 读者应注意,应该使用与训练数据集分开的数据集来进行特征选择。 将训练数据集用于特征选择将始终导致过拟合,而将测试集用于特征选择则会高估模型的性能。
特征选择是构建 ML 系统过程中的重要方面。 如果不谨慎处理,它也是造成系统偏差的主要来源之一。 读者应注意,应该使用与训练数据集分开的数据集来进行特征选择。 将训练数据集用于特征选择将始终导致过拟合,而将测试集用于特征选择则会高估模型的性能。
最受欢迎的库提供了多种功能选择技术。 诸如`scikit-learn`之类的库提供了开箱即用的这些方法。 在后面的章节中,我们将看到并利用其中的许多内容。
......
......@@ -93,7 +93,7 @@
![](img/ea7fa58f-ba10-4924-a55c-5875ee0b307b.png)
因此,在模型训练期间,我们有一对( *I**S* )图像标题作为输入,其思想是针对上一个方程式优化对数概率的总和 使用有效算法(例如随机梯度下降)来完整训练数据。 考虑到前面公式的 RHS 中的项序列,基于 RNN 的模型是合适的选择,这样,直到 *t-1* 的可变单词数依次由存储状态 *h 表示 <sub>t</sub>* 。 根据先前的 *t-1* 状态和输入对(图像和下一个字) *x <sub>t</sub>* ,使用以下命令在每个步骤中按以下步骤更新此内容: 非线性函数`f(...)`
因此,在模型训练期间,我们有一对(*I**S*)图像标题作为输入,其思想是针对上一个方程式优化对数概率的总和 使用有效算法(例如随机梯度下降)来完整训练数据。 考虑到前面公式的 RHS 中的项序列,基于 RNN 的模型是合适的选择,这样,直到 *t-1* 的可变单词数依次由存储状态 *h 表示 <sub>t</sub>* 。 根据先前的 *t-1* 状态和输入对(图像和下一个字) *x <sub>t</sub>* ,使用以下命令在每个步骤中按以下步骤更新此内容: 非线性函数`f(...)`
*h <sub>t + 1</sub> = f(h <sub>t</sub> ,x <sub>t</sub> )*
......
......@@ -91,7 +91,7 @@ LAB 色彩空间(来源:Holger kkk Everding –自己的作品,CC BY-SA 4.
最近的工作,以及迁移学习的力量,已经巧妙地尝试利用包含灰度通道作为其组成部分之一的颜色模型。 那会响吗? 现在让我们从另一个角度看问题陈述。
除了无所不在的 RGB 颜色空间外,我们还讨论了 LAB。 LAB 色彩空间包含灰度值,因为 *L* 通道(用于亮度),而其余两个通道( *a**b* )赋予颜色属性。 因此,着色问题可以用以下数学方式建模:
除了无所不在的 RGB 颜色空间外,我们还讨论了 LAB。 LAB 色彩空间包含灰度值,因为 *L* 通道(用于亮度),而其余两个通道(*a**b*)赋予颜色属性。 因此,着色问题可以用以下数学方式建模:
![](img/90336338-d933-4938-99f5-5a8295c39919.png)
......@@ -101,7 +101,7 @@ LAB 色彩空间(来源:Holger kkk Everding –自己的作品,CC BY-SA 4.
colornet 转换
简而言之,我们已经将图像着色的任务转换为将一个通道(灰度 **L** 通道)转换为两个颜色通道( **A****B**)的任务 ,说明如下:
简而言之,我们已经将图像着色的任务转换为将一个通道(灰度 **L** 通道)转换为两个颜色通道(**A****B**)的任务 ,说明如下:
![](img/9ff5a5d4-1ebb-4948-9c61-6e45b7a3a6d5.png)
......
......@@ -83,7 +83,7 @@
![](img/38d54157-0b1a-4a50-bced-6460281a2b6f.png)
单击启动实例按钮应带您到该页面,以选择您自己的 **Amazon Machine Image** **AMI**)。 通常,AMI 由构建虚拟服务器所需的各种软件配置组成。 它包括以下内容:
单击启动实例按钮应带您到该页面,以选择您自己的 **Amazon Machine Image****AMI**)。 通常,AMI 由构建虚拟服务器所需的各种软件配置组成。 它包括以下内容:
* 实例的根卷的模板,其中包括服务器的操作系统,应用程序和其他配置设置。
* 启动许可设置,用于控制哪些 AWS 账户可以使用 AMI 启动实例。
......@@ -685,7 +685,7 @@ history = model.fit(X, y, batch_size=5, epochs=30,verbose=2)
| h | ![](img/d6ae84fd-03b3-4511-9ce7-cf04ed45a6c9.png) |
| 恢复 | ![](img/af2bf69a-947a-4c6e-a8f5-09769d6c213b.png)或![](img/7137e27c-ad6f-4d2b-a734-7add27c6a166.png) |
如果我们有一个 k 类( *k > 2* )分类问题,那么我们基本上想学习条件概率分布 *P(y | x)*。 因此,输出层应具有 *k* 个神经元,其值应为 1。为了使网络了解所有 *k* 单位的输出应为 1, 使用 **softmax 激活**功能。 这是乙状结肠激活的概括。 像 S 型函数一样,softmax 函数将每个单元的输出压缩为 0 到 1 之间。
如果我们有一个 k 类(*k > 2*)分类问题,那么我们基本上想学习条件概率分布 *P(y | x)*。 因此,输出层应具有 *k* 个神经元,其值应为 1。为了使网络了解所有 *k* 单位的输出应为 1, 使用 **softmax 激活**功能。 这是乙状结肠激活的概括。 像 S 型函数一样,softmax 函数将每个单元的输出压缩为 0 到 1 之间。
而且,它会将每个输出相除,以使输出的总和等于 1:
......@@ -731,7 +731,7 @@ history = model.fit(X, y, batch_size=5, epochs=30,verbose=2)
# 损失函数
损失函数将神经网络的输出与训练中的目标值进行比较,产生一个损失值/分数,以测量网络的预测与期望值的匹配程度。 在上一节中,我们看到了针对不同任务(例如回归和二进制分类)的不同类型损失函数的需求。 以下是一些其他流行的损失函数:
损失函数将神经网络的输出与训练中的目标值进行比较,产生一个损失值/分数,以测量网络的预测与期望值的匹配程度。 在上一节中,我们看到了针对不同任务(例如回归和二分类)的不同类型损失函数的需求。 以下是一些其他流行的损失函数:
* **二进制交叉熵**:关于逻辑单元的上一节讨论的两类分类问题的对数损失或交叉熵损失。
* **分类交叉熵**:如果我们有 *K* 类分类问题,那么我们将广义交叉熵用于 *K* 类。
......@@ -1036,7 +1036,7 @@ RMSprop 通过采用先前平方梯度的 EWMA 来修改 AdaGrad 算法。 它
**自适应力矩****Adam**)。 它充分利用了基于动量的算法和自适应学习率算法,并将它们组合在一起。 在此,动量算法应用于由 RMSprop 计算的重新缩放的梯度。
# 神经网络中的过拟合和不足拟合
# 神经网络中的过拟合和不足拟合
与其他任何 ML 训练一样,用于训练深度学习模型的数据集也分为训练,测试和验证。 在模型的迭代训练期间,通常,验证误差比训练误差略大。 如果测试误差和验证误差之间的差距随着迭代的增加而增加,则是**过拟合**的情况。 如果训练误差不再减小到足够低的值,我们可以得出结论,该模型是**不适合**的。
......@@ -1049,17 +1049,17 @@ RMSprop 通过采用先前平方梯度的 EWMA 来修改 AdaGrad 算法。 它
![](img/1fa01356-977d-41e1-ab20-36fab28171bf.png)
(左):线性函数根据数据拟合而拟合。 (中):适合数据的二次函数可以很好地推广到看不见的点
(右)适合数据的次数为 9 的多项式存在过拟合的问题
(右)适合数据的次数为 9 的多项式存在过拟合的问题
具有极高容量的模型可能通过训练集中的学习模式而过拟合训练集,而训练模式可能无法很好地推广到看不见的测试集。 而且,它非常适合少量的训练数据。 另一方面,低容量的模型可能难以适应训练集:
具有极高容量的模型可能通过训练集中的学习模式而过拟合训练集,而训练模式可能无法很好地推广到看不见的测试集。 而且,它非常适合少量的训练数据。 另一方面,低容量的模型可能难以适应训练集:
![](img/2ade6f4c-448f-4fad-acd7-2ef73fac4d5e.png)
在培训和验证损失方面过拟合/不足拟合
在培训和验证损失方面过拟合/不足拟合
# 如何避免过拟合-正则化
# 如何避免过拟合-正则化
度拟合是 ML 中的核心问题。 对于神经网络,开发了许多策略来避免过度拟合并减少泛化误差。 这些策略统称为**正则化**
拟合是 ML 中的核心问题。 对于神经网络,开发了许多策略来避免过拟合并减少泛化误差。 这些策略统称为**正则化**
# 重量分享
......
......@@ -72,7 +72,7 @@
自从 Ian Goodfellow 及其合著者在 2014 年 NIPS 论文中首次引入以来,**生成对抗网络****GAN**)就[广受青睐](https://arxiv.org/pdf/1406.2661.pdf)。 现在我们看到了 GAN 在各个领域的应用。 Insilico Medicine 的研究人员提出了一种使用 GAN 进行人工药物发现的方法。 他们还发现了在图像处理和视频处理问题中的应用,例如图像样式转换和**深度卷积生成对抗网络****DCGAN**)。
顾名思义,这是使用神经网络的另一种生成模型。 GAN 具有两个主要组成部分:生成器神经网络和鉴别器神经网络。 生成器网络采用随机噪声输入,并尝试生成数据样本。 鉴别器网络将生成的数据与真实数据进行比较,并使用 S 型输出激活来解决生成的数据是否为伪造的二进制分类问题。 生成器和鉴别器都在不断竞争,并试图互相愚弄-这就是 GAN 也被称为**对抗网络**的原因。 这种竞争驱使两个网络都提高其权重,直到鉴别器开始输出 0.5 的概率为止。 也就是说,直到生成器开始生成真实图像为止。 通过反向传播同时训练两个网络。 这是 GAN 的高级结构图:
顾名思义,这是使用神经网络的另一种生成模型。 GAN 具有两个主要组成部分:生成器神经网络和鉴别器神经网络。 生成器网络采用随机噪声输入,并尝试生成数据样本。 鉴别器网络将生成的数据与真实数据进行比较,并使用 S 型输出激活来解决生成的数据是否为伪造的二分类问题。 生成器和鉴别器都在不断竞争,并试图互相愚弄-这就是 GAN 也被称为**对抗网络**的原因。 这种竞争驱使两个网络都提高其权重,直到鉴别器开始输出 0.5 的概率为止。 也就是说,直到生成器开始生成真实图像为止。 通过反向传播同时训练两个网络。 这是 GAN 的高级结构图:
![](img/e1a9d83e-820d-491b-8427-d1068af52a1e.png)
......@@ -242,7 +242,7 @@ VGG-16:输入大小为 224 x 224 x 3 的 RGB 图像,每层中的滤镜数量
# 残留神经网络
在 ILSVRC 2015 中,由 Kaiming He 及其来自 Microsoft Research Asia 的合著者介绍了一种具有*跳过连接**批量归一化*的新颖 CNN 架构,称为**残留神经网络** ]( **ResNet**)。 这样,他们就可以训练一个具有 152 层(比 VGG 网络深八倍)的神经网络,同时仍比 VGG 网络具有更低的复杂度。 它的前 5 个错误率达到 3.57%,在此数据集上超过了人类水平的性能。
在 ILSVRC 2015 中,由 Kaiming He 及其来自 Microsoft Research Asia 的合著者介绍了一种具有*跳过连接**批量归一化*的新颖 CNN 架构,称为**残留神经网络** ](**ResNet**)。 这样,他们就可以训练一个具有 152 层(比 VGG 网络深八倍)的神经网络,同时仍比 VGG 网络具有更低的复杂度。 它的前 5 个错误率达到 3.57%,在此数据集上超过了人类水平的性能。
该体系结构的主要思想如下。 他们没有希望一组堆叠的层将直接适合所需的基础映射 *H(x)*,而是尝试适应残差映射。 更正式地讲,他们让堆叠的层集学习残差 *R(x)= H(x)-x* ,随后通过跳过连接获得真实映射。 然后将输入添加到学习的残差 *R(x)+ x*
......@@ -276,7 +276,7 @@ print(model.summary())
![](img/86ce06a7-a636-494c-b62f-1addb7e0d1a3.png)
这是一种浅薄的体系结构,需要根据 MNIST 数据(28 x 28 个手写数字图像)进行训练。 这具有两个卷积层。 第一卷积层具有 256 个特征图,具有 9 x 9 内核(步幅= 1)和 ReLu 激活。 因此,每个特征图是(28-9 + 1)x(28-9 + 1)或 20 x20。第二个卷积层又具有 256 个特征图,具有 9 x 9 个内核(步幅= 2)和 ReLu 激活。 这里每个特征图是 6 x 6、6 =((20-9)/ 2 + 1)。 对该图层进行了重塑,或者将特征图重新分组为 32 组,每组具有 8 个特征图(256 = 8 x 32)。 分组过程旨在创建每个大小为 8 的特征向量。为了表示姿势,向量表示是一种更自然的表示。 来自第二层的分组特征图称为**主胶囊**层。 我们有(32 x 6 x 6)八维胶囊向量,其中每个胶囊包含 8 个卷积单元,内核为 9 x 9,步幅为 2。最后一个胶囊层( **DigitCaps**)有十六个 每位类别(10 个类别)的三维胶囊,这些胶囊中的每一个都从主胶囊层中的所有胶囊接收输入。
这是一种浅薄的体系结构,需要根据 MNIST 数据(28 x 28 个手写数字图像)进行训练。 这具有两个卷积层。 第一卷积层具有 256 个特征图,具有 9 x 9 内核(步幅= 1)和 ReLu 激活。 因此,每个特征图是(28-9 + 1)x(28-9 + 1)或 20 x20。第二个卷积层又具有 256 个特征图,具有 9 x 9 个内核(步幅= 2)和 ReLu 激活。 这里每个特征图是 6 x 6、6 =((20-9)/ 2 + 1)。 对该图层进行了重塑,或者将特征图重新分组为 32 组,每组具有 8 个特征图(256 = 8 x 32)。 分组过程旨在创建每个大小为 8 的特征向量。为了表示姿势,向量表示是一种更自然的表示。 来自第二层的分组特征图称为**主胶囊**层。 我们有(32 x 6 x 6)八维胶囊向量,其中每个胶囊包含 8 个卷积单元,内核为 9 x 9,步幅为 2。最后一个胶囊层(**DigitCaps**)有十六个 每位类别(10 个类别)的三维胶囊,这些胶囊中的每一个都从主胶囊层中的所有胶囊接收输入。
胶囊的输出矢量的长度表示由胶囊表示的实体存在于当前输入中的概率。 胶囊向量的长度被归一化,并保持在 0 到 1 之间。此外,在向量的范数上使用了压缩函数,以使短向量缩小到几乎零长度,而长向量缩小到略小于 1 的长度。
......@@ -365,7 +365,7 @@ return vj
我建议您在查看 [Christophers 的博客](http://colah.github.io/posts/2015-08-Understanding-LSTMs/),以获取有关 LSTM 步骤的更详细说明。 我们在这里查看的大多数图表均来自此。
LSTM 可以用于序列预测以及序列分类。 例如,我们可以预测未来的股价。 另外,我们可以使用 LSTM 构建分类器,以预测来自某些健康监控系统的输入信号是致命还是非致命信号(二进制分类器)。 我们甚至可以使用 LSTM 构建文本文档分类器。 单词序列将作为 LSTM 层的输入,LSTM 的隐藏状态将连接到密集的 softmax 层作为分类器。
LSTM 可以用于序列预测以及序列分类。 例如,我们可以预测未来的股价。 另外,我们可以使用 LSTM 构建分类器,以预测来自某些健康监控系统的输入信号是致命还是非致命信号(二分类器)。 我们甚至可以使用 LSTM 构建文本文档分类器。 单词序列将作为 LSTM 层的输入,LSTM 的隐藏状态将连接到密集的 softmax 层作为分类器。
# 堆叠式 LSTM
......
......@@ -68,7 +68,7 @@
![](img/d21e706b-b7fc-4321-8536-06c2f01ee8ce.png)
使用此框架,我们可以将迁移学习定义为旨在改善目标目标功能 *f <sub>T</sub>* (或目标任务, *T <sub>T</sub> )的过程。* ),使用来自 *T* <sub>*S*</sub> 源的知识,在目标域中将 *D <sub>T</sub>* *D <sub>S</sub>* 域中的任务。 这导致以下四种情况:
使用此框架,我们可以将迁移学习定义为旨在改善目标目标功能 *f <sub>T</sub>* (或目标任务, *T <sub>T</sub> )的过程。*),使用来自 *T* <sub>*S*</sub> 源的知识,在目标域中将 *D <sub>T</sub>* *D <sub>S</sub>* 域中的任务。 这导致以下四种情况:
* **特征空间**:源域和目标域的特征空间互不相同,例如χ <sub>s</sub> ≠χ <sub>t</sub> 。 例如,如果我们的任务与文档分类有关,则此方案以不同的语言引用源任务和目标任务。
* **边际概率**:边际概率或源域和目标域不同,例如 P(X <sub>s</sub> )≠P(X <sub>t</sub> )。 这种情况也称为**域适配** *。*
......@@ -174,7 +174,7 @@ Pan 和 Yang 撰写的论文《迁移学习综述》[可以在此处找到](http
# 零镜头学习
零镜头学习是迁移学习的另一个极端变体,它不依赖任何标记的示例来学习任务。 这听起来令人难以置信,尤其是当使用示例学习是大多数监督学习算法所要解决的问题时。 零数据学习或零短学习方法在训练阶段本身进行了巧妙的调整,以利用附加信息来理解看不见的数据。 在他们的 *[Lear Lear* *ning* )一书中,Goodfellow 及其合作者提出了 z *eroshot 学习*作为学习三个变量的场景,例如 传统输入变量 *x* ,传统输出变量 *y* 以及描述任务的其他随机变量 *T* 。 因此,训练模型以学习 *P(y | x,T)*的条件概率分布。 零镜头学习在机器翻译等场景中非常有用,在这种情况下,我们甚至可能没有目标语言的标签。
零镜头学习是迁移学习的另一个极端变体,它不依赖任何标记的示例来学习任务。 这听起来令人难以置信,尤其是当使用示例学习是大多数监督学习算法所要解决的问题时。 零数据学习或零短学习方法在训练阶段本身进行了巧妙的调整,以利用附加信息来理解看不见的数据。 在他们的 *[Lear Lear* *ning*)一书中,Goodfellow 及其合作者提出了 z *eroshot 学习*作为学习三个变量的场景,例如 传统输入变量 *x* ,传统输出变量 *y* 以及描述任务的其他随机变量 *T* 。 因此,训练模型以学习 *P(y | x,T)*的条件概率分布。 零镜头学习在机器翻译等场景中非常有用,在这种情况下,我们甚至可能没有目标语言的标签。
# 迁移学习的挑战
......
......@@ -21,13 +21,13 @@
现在让我们考虑一个现实世界的问题,在本章中,我们还将继续使用它来说明我们不同的深度学习模型,并在同一模型上利用迁移学习。 您必须一次又一次听到深度学习的关键要求之一是,我们需要大量数据和样本来构建可靠的深度学习模型。 其背后的想法是模型可以从大量样本中自动学习特征。 但是,如果我们没有足够的训练样本并且要解决的问题仍然是一个相对复杂的问题,我们该怎么办? 例如,计算机视觉问题,例如图像分类,可能难以使用传统的统计技术或**机器学习****ML**)技术解决。 我们会放弃深度学习吗?
考虑到**图像分类**问题,由于我们要处理的图像本质上是高维张量,因此拥有更多数据可使深度学习模型学习更好的图像基本特征表示。 但是,即使我们每个类别的图像样本的范围从几百到数千,基本的 CNN 模型在正确的体系结构和规范化条件下仍能正常运行。 这里要记住的关键点是,CNN 会学习与缩放,平移和旋转不变的模式和特征,因此我们在这里不需要自定义特征工程技术。 但是,我们可能仍然会遇到模型过拟合之类的问题,我们将在本章稍后部分尝试解决这些问题。
考虑到**图像分类**问题,由于我们要处理的图像本质上是高维张量,因此拥有更多数据可使深度学习模型学习更好的图像基本特征表示。 但是,即使我们每个类别的图像样本的范围从几百到数千,基本的 CNN 模型在正确的体系结构和规范化条件下仍能正常运行。 这里要记住的关键点是,CNN 会学习与缩放,平移和旋转不变的模式和特征,因此我们在这里不需要自定义特征工程技术。 但是,我们可能仍然会遇到模型过拟合之类的问题,我们将在本章稍后部分尝试解决这些问题。
关于迁移学习,已经在著名的 [ImageNet 数据集](http://image-net.org/about-overview)上训练了一些出色的预训练深度学习模型。 我们已经在第 3 章和*了解深度学习架构*中详细介绍了其中一些模型,本章将利用著名的`VGG-16`模型。 想法是使用通常是图像分类专家的预训练模型来解决我们的问题,即数据样本较少。
# 制定我们的现实问题
正如我们前面提到的,我们将在图像分类问题上进行工作,每个类别的训练样本数量较少。 我们的问题的数据集可在 Kaggle 上获得,它是其中最受欢迎的基于计算机视觉的数据集之一。 我们将使用的数据集来自[**猫狗**挑战](https://www.kaggle.com/c/dogs-vs-cats/data),而我们的 主要目标是建立一个可以成功识别图像并将其分类为猫或狗的模型。 就机器学习而言,这是一个基于图像的二进制分类问题。
正如我们前面提到的,我们将在图像分类问题上进行工作,每个类别的训练样本数量较少。 我们的问题的数据集可在 Kaggle 上获得,它是其中最受欢迎的基于计算机视觉的数据集之一。 我们将使用的数据集来自[**猫狗**挑战](https://www.kaggle.com/c/dogs-vs-cats/data),而我们的 主要目标是建立一个可以成功识别图像并将其分类为猫或狗的模型。 就机器学习而言,这是一个基于图像的二分类问题。
首先,从数据集页面下载`train.zip`文件并将其存储在本地系统中。 下载后,将其解压缩到文件夹中。 该文件夹将包含 25,000 张猫和狗的图像; 即每个类别 12500 张图像。
......@@ -199,7 +199,7 @@ print(train_labels[1495:1505], train_labels_enc[1495:1505])
我们将从建立具有三个卷积层的基本 CNN 模型开始,再加上用于从图像中自动提取特征的最大池化,以及对输出卷积特征图进行下采样。 要刷新有关卷积和池化层如何工作的记忆,请查看第 3 章和*了解深度学习架构*中的 CNN 部分。
提取这些特征图后,我们将使用一个密集层以及一个具有 S 型函数的输出层进行分类。 由于我们正在执行二进制分类,因此`binary_crossentropy`损失函数就足够了。 我们将使用流行的 RMSprop 优化器,该优化器可帮助我们使用反向传播来优化网络中单元的权重,从而使网络中的损失降到最低,从而得到一个不错的分类器。 请参阅第 2 章,*深度学习要点*中的*随机梯度下降**SGD 改进*部分,以获取深入的想法 有关优化器如何工作的信息。 简而言之,优化器(如 RMSprop)指定有关损耗梯度如何用于更新传递到我们网络的每批数据中的参数的规则。
提取这些特征图后,我们将使用一个密集层以及一个具有 S 型函数的输出层进行分类。 由于我们正在执行二分类,因此`binary_crossentropy`损失函数就足够了。 我们将使用流行的 RMSprop 优化器,该优化器可帮助我们使用反向传播来优化网络中单元的权重,从而使网络中的损失降到最低,从而得到一个不错的分类器。 请参阅第 2 章,*深度学习要点*中的*随机梯度下降**SGD 改进*部分,以获取深入的想法 有关优化器如何工作的信息。 简而言之,优化器(如 RMSprop)指定有关损耗梯度如何用于更新传递到我们网络的每批数据中的参数的规则。
让我们利用 Keras 并立即构建我们的 CNN 模型架构:
......@@ -317,7 +317,7 @@ l2 = ax2.legend(loc="best")
![](img/d38f922d-b1ed-41c4-888c-146a5fa4c0a1.png)
您可以清楚地看到,在 2-3 个时期之后,模型开始对训练数据进行过拟合。 我们在验证集中获得的平均准确度约为 **72%** ,这不是一个不好的开始! 我们可以改进此模型吗?
您可以清楚地看到,在 2-3 个时期之后,模型开始对训练数据进行过拟合。 我们在验证集中获得的平均准确度约为 **72%** ,这不是一个不好的开始! 我们可以改进此模型吗?
# 具有正则化的 CNN 模型
......@@ -377,9 +377,9 @@ Epoch 30/30
![](img/3f0bcdb3-568a-48e2-8003-b2cd4f4f4b61.png)
从前面的输出中您可以清楚地看到,尽管模型花费了更长的时间,但仍然最终使模型过拟合,并且我们还获得了约 **78%** 的更好的验证精度,这虽然不错,但并不令人惊讶。
从前面的输出中您可以清楚地看到,尽管模型花费了更长的时间,但仍然最终使模型过拟合,并且我们还获得了约 **78%** 的更好的验证精度,这虽然不错,但并不令人惊讶。
模型过拟合的原因是因为我们的训练数据少得多,并且模型在每个时期随着时间的推移不断看到相同的实例。 解决此问题的一种方法是利用图像增强策略,以与现有图像略有不同的图像来增强我们现有的训练数据。 我们将在下一节中详细介绍。 让我们暂时保存该模型,以便以后可以使用它来评估其在测试数据上的性能:
模型过拟合的原因是因为我们的训练数据少得多,并且模型在每个时期随着时间的推移不断看到相同的实例。 解决此问题的一种方法是利用图像增强策略,以与现有图像略有不同的图像来增强我们现有的训练数据。 我们将在下一节中详细介绍。 让我们暂时保存该模型,以便以后可以使用它来评估其在测试数据上的性能:
```py
model.save('cats_dogs_basic_cnn.h5')
......@@ -387,7 +387,7 @@ model.save('cats_dogs_basic_cnn.h5')
# 具有图像增强功能的 CNN 模型
让我们通过使用适当的图像增强策略添加更多数据来改进我们的常规 CNN 模型。 由于我们先前的模型每次都在相同的小数据点样本上进行训练,因此无法很好地推广,并在经过几个时期后最终过拟合。
让我们通过使用适当的图像增强策略添加更多数据来改进我们的常规 CNN 模型。 由于我们先前的模型每次都在相同的小数据点样本上进行训练,因此无法很好地推广,并在经过几个时期后最终过拟合。
图像增强背后的想法是,我们遵循一个既定过程,从训练数据集中获取现有图像,并对它们应用一些图像变换操作,例如旋转,剪切,平移,缩放等,以生成新的,经过修改的版本 现有图像。 由于这些随机转换,我们每次都不会获得相同的图像,我们将利用 Python 生成器在训练过程中将这些新图像提供给我们的模型。
......@@ -444,7 +444,7 @@ print('Labels:', [item[1][0] for item in dog])
l = [ax[i].imshow(dog[i][0][0]) for i in range(0,5)]
```
这向我们展示了图像增强如何帮助创建新图像,以及在其上训练模型应如何帮助对抗过拟合:
这向我们展示了图像增强如何帮助创建新图像,以及在其上训练模型应如何帮助对抗过拟合:
![](img/47937375-d105-4389-89ce-20b30cfda764.png)
......@@ -733,7 +733,7 @@ Epoch 30/30
![](img/ae38af80-e7a5-45ff-a1b9-d7991de028b6.png)
在第五个时期之后,模型训练与验证准确性之间存在相当大的差距,这清楚表明模型在此之后对训练数据过拟合。 但是总的来说,这似乎是迄今为止最好的模型,通过利用 VGG-16 模型作为特征提取器,我们甚至不需要使用图像增强策略就可以接近 **90%** 验证精度。 但是我们还没有充分利用迁移学习的全部潜力。 让我们尝试在此模型上使用我们的图像增强策略。 在此之前,我们使用以下代码将此模型保存到磁盘:
在第五个时期之后,模型训练与验证准确性之间存在相当大的差距,这清楚表明模型在此之后对训练数据过拟合。 但是总的来说,这似乎是迄今为止最好的模型,通过利用 VGG-16 模型作为特征提取器,我们甚至不需要使用图像增强策略就可以接近 **90%** 验证精度。 但是我们还没有充分利用迁移学习的全部潜力。 让我们尝试在此模型上使用我们的图像增强策略。 在此之前,我们使用以下代码将此模型保存到磁盘:
```py
model.save('cats_dogs_tlearn_basic_cnn.h5')
......
......@@ -99,7 +99,7 @@ model.add(Dropout(0.5))
model.add(Dense(NUM_CLASSES, activation='softmax'))
```
为了提高总体泛化性能,该模型还包含`BatchNormalization`层和`DropOut`层。 这些层有助于我们控制过拟合,还可以防止网络存储数据集本身。
为了提高总体泛化性能,该模型还包含`BatchNormalization`层和`DropOut`层。 这些层有助于我们控制过拟合,还可以防止网络存储数据集本身。
我们仅用 25 个纪元来运行模型,以在验证集上达到约 65%的准确性。 以下屏幕快照显示了训练后的模型的输出预测:
......
......@@ -44,7 +44,7 @@
* 多项式朴素贝叶斯
* 支持向量机
* k 最近邻
* k 最近邻
具有线性核的**支持向量机****SVM**)与用于文本分类的基准数据集相比,通常显示出更高的准确性。
......@@ -173,7 +173,7 @@ pd.DataFrame(similar_words).transpose()
GloVe 模型代表全局向量,它是一种无监督的学习模型,可用于获取类似于 Word2Vec 的密集词向量。 但是,该技术不同,并且对聚合的全局单词-单词共现矩阵执行训练,从而为我们提供了具有有意义子结构的向量空间。 该方法发表在 Pennington 及其合作者的论文[《GloVe:用于词表示的全局向量》](https://www.aclweb.org/anthology/D14-1162)。 我们已经讨论了基于计数的矩阵分解方法,例如**潜在语义分析****LSA**)和预测方法,例如 Word2vec。 本文声称,目前这两个家庭都遭受重大弊端。 像 LSA 之类的方法可以有效地利用统计信息,但是它们在词类比任务上的表现相对较差-我们是如何找到语义相似的词的。 像 skip-gram 这样的方法在类比任务上可能会做得更好,但它们在全局级别上却很少利用语料库的统计信息。
GloVe 模型的基本方法是首先创建一个庞大的单词-上下文共现矩阵,该矩阵由(单词,上下文)对组成,这样该矩阵中的每个元素都代表一个单词在上下文中出现的频率(可以是一个单词 单词顺序)。 这个词-语境矩阵 *WC* 与在各种任务的文本分析中普遍使用的术语-文档矩阵非常相似。 矩阵分解用于将矩阵 *WC* 表示为两个矩阵的乘积。 **字特征****WF**)矩阵和**特征上下文****FC**)矩阵。 *WC = WF x FC* 。 用一些随机权重初始化 *WF**FC* ,然后将它们相乘得到 *WC'*(近似于 *WC* )并进行测量 与 *WC* 有多近。 我们使用**随机梯度下降****SGD**)进行多次操作,以最大程度地减少误差。 最后, *WF* 矩阵为我们提供了每个单词的单词嵌入,其中 *F* 可以预设为特定数量的维。 要记住的非常重要的一点是,Word2vec 和 GloVe 模型在工作方式上非常相似。 他们两个的目的都是建立一个向量空间,每个词的位置根据其上下文和语义而受到其相邻词的影响。 Word2vec 从单词共现对的本地单个示例开始,而 GloVe 从整个语料库中所有单词的全局汇总共现统计开始。
GloVe 模型的基本方法是首先创建一个庞大的单词-上下文共现矩阵,该矩阵由(单词,上下文)对组成,这样该矩阵中的每个元素都代表一个单词在上下文中出现的频率(可以是一个单词 单词顺序)。 这个词-语境矩阵 *WC* 与在各种任务的文本分析中普遍使用的术语-文档矩阵非常相似。 矩阵分解用于将矩阵 *WC* 表示为两个矩阵的乘积。 **字特征****WF**)矩阵和**特征上下文****FC**)矩阵。 *WC = WF x FC* 。 用一些随机权重初始化 *WF**FC* ,然后将它们相乘得到 *WC'*(近似于 *WC*)并进行测量 与 *WC* 有多近。 我们使用**随机梯度下降****SGD**)进行多次操作,以最大程度地减少误差。 最后, *WF* 矩阵为我们提供了每个单词的单词嵌入,其中 *F* 可以预设为特定数量的维。 要记住的非常重要的一点是,Word2vec 和 GloVe 模型在工作方式上非常相似。 他们两个的目的都是建立一个向量空间,每个词的位置根据其上下文和语义而受到其相邻词的影响。 Word2vec 从单词共现对的本地单个示例开始,而 GloVe 从整个语料库中所有单词的全局汇总共现统计开始。
在以下各节中,我们将同时使用 Word2vec 和 GloVe 来解决各种分类问题。 我们已经开发了一些实用程序代码,可从文件读取和加载 GloVe 和 Word2vec 向量,并返回嵌入矩阵。 预期的文件格式是标准 GloVe 文件格式。 以下是几个单词的五维嵌入格式示例:单词后跟矢量,所有空格分开:
......@@ -339,7 +339,7 @@ embedding_layer = Embedding(vocab_size,
name='embedding')
```
接下来,我们必须构建单词卷积层。 我们希望在所有句子上应用相同的一维卷积滤波器,也就是说,在所有句子之间共享相同的卷积滤波器权重。 首先,我们使用`Lambda`层将输入分成句子。 然后,如果我们使用 *C* 卷积滤波器,则每个句子的二维张量形状( *SENTENCE_LEN×EMBEDDING _DIM* )将转换为(([ *SENTENCE_LEN-filter + 1)×C)*张量。 以下代码执行相同的操作:
接下来,我们必须构建单词卷积层。 我们希望在所有句子上应用相同的一维卷积滤波器,也就是说,在所有句子之间共享相同的卷积滤波器权重。 首先,我们使用`Lambda`层将输入分成句子。 然后,如果我们使用 *C* 卷积滤波器,则每个句子的二维张量形状(*SENTENCE_LEN×EMBEDDING _DIM*)将转换为(([ *SENTENCE_LEN-filter + 1)×C)*张量。 以下代码执行相同的操作:
```py
#Let's take sentence_len=30, embedding_dim=50, num_sentences = 10
......@@ -481,7 +481,7 @@ holdout_target = test_df['sentiment'].values
holdout_corpus_to_seq = preprocessor.transform(holdout_corpus)
```
让我们使用`GloVe`类用 GloVe 初始化嵌入,并构建文档模型。 我们还需要定义文档模型参数,例如卷积过滤器的数量,激活函数,隐藏单元等。 为了避免网络的过拟合,我们可以在输入层,卷积层甚至最终层或密集层之间插入丢失层。 同样,正如我们在密集层所观察到的,放置高斯噪声层可作为更好的正则化器。 可以使用以下定义的所有这些参数初始化`DocumentModel`类。 为了对模型参数进行良好的初始化,我们从少量的时期和少量的采样训练示例开始。 最初,我们开始使用六个词卷积过滤器(如针对 IMDB 数据的论文所述),然后发现该模型不适合-训练的精度未超过 80%,然后我们继续缓慢地增加词过滤器的数量 。 同样,我们发现了大量的句子卷积过滤器。 我们尝试了卷积层的 ReLU 和 tanh 激活。 如[论文](https://arxiv.org/pdf/1406.3830.pdf)所述,他们将 tanh 激活用于其模型:
让我们使用`GloVe`类用 GloVe 初始化嵌入,并构建文档模型。 我们还需要定义文档模型参数,例如卷积过滤器的数量,激活函数,隐藏单元等。 为了避免网络的过拟合,我们可以在输入层,卷积层甚至最终层或密集层之间插入丢失层。 同样,正如我们在密集层所观察到的,放置高斯噪声层可作为更好的正则化器。 可以使用以下定义的所有这些参数初始化`DocumentModel`类。 为了对模型参数进行良好的初始化,我们从少量的时期和少量的采样训练示例开始。 最初,我们开始使用六个词卷积过滤器(如针对 IMDB 数据的论文所述),然后发现该模型不适合-训练的精度未超过 80%,然后我们继续缓慢地增加词过滤器的数量 。 同样,我们发现了大量的句子卷积过滤器。 我们尝试了卷积层的 ReLU 和 tanh 激活。 如[论文](https://arxiv.org/pdf/1406.3830.pdf)所述,他们将 tanh 激活用于其模型:
```py
glove=GloVe(50)
......@@ -744,7 +744,7 @@ for l_name in ['word_conv','sentence_conv','hidden_0', 'final']:
}
```
训练时,我们使用了另一种技巧来避免过度拟合。 我们在前 10 个时间段后冻结嵌入层(即`train_embedding=False`),仅训练其余层。 经过 50 个纪元后,我们在 IMDB 数据集上实现了 **89%** 的准确度,这是本文提出的结果。 我们观察到,如果我们在训练之前不初始化嵌入权重,则模型将开始过度拟合,并且无法实现 **80%** 以上的准确性验证。
训练时,我们使用了另一种技巧来避免过拟合。 我们在前 10 个时间段后冻结嵌入层(即`train_embedding=False`),仅训练其余层。 经过 50 个纪元后,我们在 IMDB 数据集上实现了 **89%** 的准确度,这是本文提出的结果。 我们观察到,如果我们在训练之前不初始化嵌入权重,则模型将开始过拟合,并且无法实现 **80%** 以上的准确性验证。
# 使用 CNN 模型创建文档摘要
......
......@@ -21,7 +21,7 @@
# 制定我们的现实问题
我们这里的实际案例研究的主要目标是音频事件的识别和分类。 这是一个有监督的学习问题,我们将在音频事件数据集上使用属于特定类别(它们是声音的来源)的音频数据样本进行处理。
我们这里的实际案例研究的主要目标是音频事件的识别和分类。 这是一个监督学习问题,我们将在音频事件数据集上使用属于特定类别(它们是声音的来源)的音频数据样本进行处理。
我们将利用迁移学习和深度学习中的概念来构建可靠的分类器,从而在任何给定音频样本属于我们预定类别之一的情况下,我们都应该能够正确预测该声音的来源。 我们将使用的数据集通常被称为 [UrbanSound8K 数据集](https://urbansounddataset.weebly.com/),并且具有 8,732 个带标签的音频声音文件(其持续时间通常等于或大于 少于 4 秒),其中包含城市常见声音的摘录。 该数据集中的声音的十个类别如下:
......@@ -639,7 +639,7 @@ train_labels_ohe.shape, validation_labels_ohe.shape, test_labels_ohe.shape
((18300, 10), (6100, 10), (6100, 10))
```
现在,我们将使用具有四个隐藏层的完全连接的网络来构建深度学习分类器。 我们将使用常见的组件(如辍学)来防止过拟合,并使用模型的 Adam 优化器。 以下代码描述了模型体系结构的详细信息:
现在,我们将使用具有四个隐藏层的完全连接的网络来构建深度学习分类器。 我们将使用常见的组件(如辍学)来防止过拟合,并使用模型的 Adam 优化器。 以下代码描述了模型体系结构的详细信息:
```py
model = models.Sequential()
......@@ -731,7 +731,7 @@ l2 = ax2.legend(loc="best")
![](img/a164d6a2-685a-4ad5-b1fe-3af618612e17.png)
我们可以看到模型在训练和验证之间的损失和准确性是相当一致的。 也许略有过拟合,但考虑到它们之间的差异很小,可以忽略不计。
我们可以看到模型在训练和验证之间的损失和准确性是相当一致的。 也许略有过拟合,但考虑到它们之间的差异很小,可以忽略不计。
# 评估分类器性能
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册