提交 daf56c5a 编写于 作者: W wizardforcel

2020-12-17 16:45:14

上级 663bfc64
......@@ -36,7 +36,7 @@
第 4 章,“特征选择和特征工程”
通过选择正确的尺寸传递给模型以及发现可以丰富输入数据集的新尺寸,可以提高模型性能。 本章将说明如何从现有功能以及外部资源创建新功能。 它还将介绍如何消除冗余或低值的功能。
通过选择正确的尺寸传递给模型以及发现可以丰富输入数据集的新尺寸,可以提高模型性能。 本章将说明如何从现有功能以及外部资源创建新功能。 它还将介绍如何消除冗余或低值的功能。
第 5 章,“使用监督学习的分类和回归”
......
......@@ -222,7 +222,7 @@
+ `Fifth Av`
+ `Fifth Av.`
作为人类,我们可以快速确定所有这些示例确实具有相同的值。 计算机很难得出这个结论。
作为人类,我们可以快速确定所有这些示例确实具有相同的值。 计算机很难得出这个结论。
解决此问题的两种方法是基于规则的和基于示例的。 当数据中的可变性较小且不会快速更改时,基于规则的系统会更好地工作。 当我们拥有快速移动的数据时,基于规则的方法就会中断。
......
......@@ -342,7 +342,7 @@ def visualize_classifier(classifier, X, y):
min_y, max_y = X[:, 1].min() - 1.0, X[:, 1].max() + 1.0
```
我们还定义了将在网格网格中使用的`X``Y`方向的最小值和最大值。 该网格基本上是用于评估函数的一组值,以便我们可以可视化类的边界。 定义网格的步长并使用最小值和最大值创建它:
我们还定义了将在网格网格中使用的`X``Y`方向的最小值和最大值。 该网格基本上是用于求值函数的一组值,以便我们可以可视化类的边界。 定义网格的步长并使用最小值和最大值创建它:
```py
# Define the step size to use in plotting the mesh grid mesh_step_size = 0.01
......
......@@ -277,7 +277,7 @@ plt.show()
如果数据自然地组织成几个不同的簇,那么很容易在视觉上对其进行检查并得出一些推论。 不幸的是,在现实世界中很少如此。 现实世界中的数据庞大而混乱。 因此,我们需要一种量化聚类质量的方法。
剪影是指用于检查数据中群集一致性的方法。 它提供了每个数据点与其群集的融合程度的估计。 轮廓分数是衡量数据点与其自身群集(与其他群集相比)的相似性的度量。 轮廓分数适用于任何相似度指标。
轮廓是指用于检查数据中群集一致性的方法。 它提供了每个数据点与其群集的融合程度的估计。 轮廓分数是衡量数据点与其自身群集(与其他群集相比)的相似性的度量。 轮廓分数适用于任何相似度指标。
对于每个数据点,使用以下公式计算轮廓分数:
......@@ -285,7 +285,7 @@ plt.show()
这里,`p`是到数据点不属于的最近群集中各点的平均距离,`q`是到所有点的平均群集内距离在其自己的群集中。
轮廓分数范围的值在`-1``1`之间。 接近`1`的分数表示该数据点与群集中的其他数据点非常相似,而接近`-1`的分数指示该数据点与集群中其他数据点不同。 一种思考的方法是,如果有太多带有负轮廓分数的点,那么数据中的簇可能太少或太多。 我们需要再次运行聚类算法以找到最佳数目的聚类。 理想情况下,我们希望具有较高的正值。 根据业务问题,我们不需要优化并具有尽可能高的价值,但是通常,如果我们的剪影得分接近`1`,则表明数据可以很好地聚类。 如果分数接近`-1`,则表明我们用于分类的变量有噪声,并且不包含太多信号。
轮廓分数范围的值在`-1``1`之间。 接近`1`的分数表示该数据点与群集中的其他数据点非常相似,而接近`-1`的分数指示该数据点与集群中其他数据点不同。 一种思考的方法是,如果有太多带有负轮廓分数的点,那么数据中的簇可能太少或太多。 我们需要再次运行聚类算法以找到最佳数目的聚类。 理想情况下,我们希望具有较高的正值。 根据业务问题,我们不需要优化并具有尽可能高的值,但是通常,如果我们的轮廓得分接近`1`,则表明数据可以很好地聚类。 如果分数接近`-1`,则表明我们用于分类的变量有噪声,并且不包含太多信号。
让我们看看如何使用轮廓分数来估计聚类性能。 创建一个新的 Python 文件并导入以下包:
......
......@@ -369,7 +369,7 @@ def create_toolbox(strategy):
creator.create("Individual", list, fitness=creator.FitnessMin)
```
创建`toolbox`并注册评估功能,如下所示:
创建`toolbox`并注册评估函数,如下所示:
```py
toolbox = base.Toolbox()
......@@ -935,7 +935,7 @@ class Prog(object):
return partial(self._progn, out1, out2, out3)
```
为个体定义评估功能
为个体定义评估函数
```py
def eval_func(individual):
......
......@@ -50,7 +50,7 @@ Alpha-Beta 修剪中的 Alpha 和 Beta 参数是指计算过程中使用的两
**Negamax** 算法是 Minimax 的一种变体,在现实世界的实现中经常使用。 两人游戏通常是零和游戏,这意味着一个玩家的损失等于另一个玩家的收益,反之亦然。 Negamax 广泛使用此属性来提出增加其赢得游戏机会的策略。
就游戏而言,给第一位玩家的给定位置的价值是给第二位玩家的价值的否定。 每个玩家都在寻找能够最大程度地伤害对手的举动。 此举所产生的价值应使对手获得最小价值。 这两种方法都可以无缝地工作,这意味着可以使用一种方法来评估头寸。 就简单性而言,这是它比 Minimax 更具优势的地方。 Minimax 要求第一个玩家选择具有最大值的移动,而第二个玩家必须选择具有最小值的移动。 这里也使用 Alpha-Beta 修剪。 现在,我们已经研究了几种最流行的组合搜索算法,下面我们安装一个库,以便我们可以构建一些 AI 并查看这些算法的实际应用。
就游戏而言,给第一位玩家的给定位置的值是给第二位玩家的值的相反数。 每个玩家都在寻找能够最大程度地伤害对手的举动。 此举所产生的值应使对手获得最小值。 这两种方法都可以无缝地工作,这意味着可以使用一种方法来评估位置。 就简单性而言,这是它比 Minimax 更具优势的地方。 Minimax 要求第一个玩家选择具有最大值的移动,而第二个玩家必须选择具有最小值的移动。 这里也使用 Alpha-Beta 修剪。 现在,我们已经研究了几种最流行的组合搜索算法,下面我们安装一个库,以便我们可以构建一些 AI 并查看这些算法的实际应用。
# 安装`easyAI`库
......
......@@ -794,7 +794,7 @@ def run_tests(test_files):
model, label = item
```
评估分数并与最高分数进行比较:
求解分数并与最高分数进行比较:
```py
score = model.compute_score(features_mfcc)
......
......@@ -455,7 +455,7 @@ yy.shape = yy.size, 1
grid_xy = np.concatenate((xx, yy), axis=1)
```
使用神经网络评估点的网格:
使用神经网络求解点的网格:
```py
# Evaluate the input grid of points
......
......@@ -29,9 +29,9 @@ RL 是指学习操作方法并将情况映射到某些动作以最大化回报
当前许多研究都集中在监督学习上。 RL 似乎有点像监督学习,但事实并非如此。 监督学习的过程是指从标记的样本中学习。 尽管这是一种有用的技术,但不足以从交互中开始学习。 当我们想设计一台机器来导航未知的地形时,这种学习将无济于事。 我们事先没有可用的训练样本。
我们需要一个可以通过与未知地形交互来从自身经验中学习的代理。 这是 RL 真正闪耀的地方。
我们需要一个可以通过与未知地形交互来从自身经验中学习的智能体。 这是 RL 真正闪耀的地方。
让我们考虑一下代理与新环境进行交互以进行学习时的探索阶段。 它可以探索多少? 在这一点上,该代理不知道环境有多大,并且在许多情况下,它将无法探索所有可能性。 那么,代理应该做什么? 它是应该从其有限的经验中吸取教训,还是等到进一步探索后再采取行动? 这是 RL 的主要挑战之一。 为了获得更高的报酬,代理必须支持经过尝试和测试的行为。 但是为了发现此类动作,它应继续尝试以前未选择的较新动作。 多年来,研究人员已经广泛研究了在探索与开发之间的这种权衡方案,但它仍然是活跃的话题。
让我们考虑一下智能体与新环境进行交互以进行学习时的探索阶段。 它可以探索多少? 在这一点上,该智能体不知道环境有多大,并且在许多情况下,它将无法探索所有可能性。 那么,智能体应该做什么? 它是应该从其有限的经验中吸取教训,还是等到进一步探索后再采取行动? 这是 RL 的主要挑战之一。 为了获得更高的报酬,智能体必须支持经过尝试和测试的行为。 但是为了发现此类动作,它应继续尝试以前未选择的较新动作。 多年来,研究人员已经广泛研究了在探索与开发之间的这种权衡方案,但它仍然是活跃的话题。
# 强化学习的实际示例
......@@ -49,13 +49,13 @@ RL 是指学习操作方法并将情况映射到某些动作以最大化回报
**婴儿**:机器在使用 RL 方面没有垄断权; 刚开始的几个月里,新生儿经历了几乎相同的过程。 他们通过反复尝试来学习,直到学会平衡为止。 有趣的是,婴儿发现了走路(或跑步!)是最有效的方式之后,发现了不同的运动方法。
如果仔细观察这些示例,您将看到一些共同的特征。 所有这些都涉及与环境的交互。 即使环境不确定,学习智能体(无论是机器,婴儿还是其他设备)也旨在实现某个目标。 代理的动作将改变该环境的未来状态。 随着代理继续与环境交互,这会在以后的时间影响可用的机会。
如果仔细观察这些示例,您将看到一些共同的特征。 所有这些都涉及与环境的交互。 即使环境不确定,学习智能体(无论是机器,婴儿还是其他设备)也旨在实现某个目标。 智能体的动作将改变该环境的未来状态。 随着智能体继续与环境交互,这会在以后的时间影响可用的机会。
在讨论了 RL 是什么之后,并涵盖了一些真实的示例,现在让我们开始研究 RL。 我们将从讨论 RL 系统的构建块开始。
# 强化学习的基础
除了代理与环境之间的交互,RL 系统中还有其他因素在起作用:
除了智能体与环境之间的交互,RL 系统中还有其他因素在起作用:
![](img/B15441_22_01.png)
......@@ -63,11 +63,11 @@ RL 是指学习操作方法并将情况映射到某些动作以最大化回报
通常,RL 智能体执行以下步骤:
1. 有一组与代理和环境有关的状态。 在给定的时间点,代理会观察输入状态以感知环境。
1. 有一组与智能体和环境有关的状态。 在给定的时间点,智能体会观察输入状态以感知环境。
2. 有策略规定需要采取什么措施。 这些策略具有决策功能。 使用这些策略根据输入状态确定操作。
3. 代理根据上一步采取行动。
4. 环境对此动作做出反应。 代理从环境中获得强化,也称为奖励。
5. 代理计算并记录有关该奖励的信息。 重要的是要注意,将为此状态/动作对收到此奖励,以便在给定特定状态的情况下,将来可将其用于采取更多的奖励行动。
3. 智能体根据上一步采取行动。
4. 环境对此动作做出反应。 智能体从环境中获得强化,也称为奖励。
5. 智能体计算并记录有关该奖励的信息。 重要的是要注意,将为此状态/动作对收到此奖励,以便在给定特定状态的情况下,将来可将其用于采取更多的奖励行动。
RL 系统可以同时执行多个事情–通过执行试错搜索来学习,了解所处环境的模型,然后使用该模型来计划下一步。 在下一节中,我们将动手操作,并开始使用流行的框架使用 Python 编写的强化学习系统。
......@@ -319,6 +319,6 @@ $ python3 balancer.py --input-env cartpole
在本章中,我们了解了 RL 系统。 我们讨论了 RL 的前提以及如何设置它。 我们讨论了 RL 和监督学习之间的区别。 我们浏览了一些真实的 RL 示例,并了解了各种系统如何以不同形式使用它。
我们讨论了 RL 的构建块以及诸如代理,环境,策略,奖励等概念。 然后,我们在 Python 中创建了一个环境,以查看其运行情况。 最后,我们使用这些概念来构建 RL 智能体。
我们讨论了 RL 的构建块以及诸如智能体,环境,策略,奖励等概念。 然后,我们在 Python 中创建了一个环境,以查看其运行情况。 最后,我们使用这些概念来构建 RL 智能体。
在下一章中,我们将进入一个截然不同的主题,并学习大数据技术如何帮助我们使机器学习系统更强大,更高效。
\ No newline at end of file
......@@ -26,7 +26,7 @@
第 1 章,“无监督学习入门” 从非常务实的角度介绍了机器学习和数据科学。 讨论了主要概念,并显示了一些简单的示例,特别关注了无监督问题结构。
第 2 章,“聚类基础知识” 开始研究聚类算法。 分析了最常见的方法和评估指标,并给出了具体示例,这些示例演示了如何从不同的角度调整超参数和评估性能
第 2 章,“聚类基础知识” 开始研究聚类算法。 分析了最常见的方法和评估指标,并给出了具体示例,这些示例演示了如何从不同的角度调整超参数和评估表现
第 3 章,“高级聚类”讨论了一些更复杂的算法。 第 2 章,“聚类基础知识”中分析的许多问题都使用更强大,更灵活的方法进行了重新评估,只要基本算法的性能不符合要求,就可以轻松采用这些方法。 。
......
......@@ -340,9 +340,9 @@ x(t) = 1.169t + 0.628
由于本书完全致力于无监督算法,因此我决定不将简单的聚类分析展示为一个“世界”! 例如,而是相当基本的生成模型。 假设我们正在每小时监控一次到达地铁站的火车的数量,因为我们需要确定车站所需的安全代理的数量。 特别是,我们被要求每列火车至少有一名经纪人,每当火车数量减少时,我们将被罚款。
由于本书完全致力于无监督算法,因此我决定不将简单的聚类分析展示为一个“世界”! 例如,而是相当基本的生成模型。 假设我们正在每小时监控一次到达地铁站的火车的数量,因为我们需要确定车站所需的安全智能体的数量。 特别是,我们被要求每列火车至少有一名经纪人,每当火车数量减少时,我们将被罚款。
而且,在每个小时的开始发送一个组变得更容易,而不是一个个地控制代理。 因为问题很简单,所以我们也知道泊松分布很好,它是用`μ`参数化的泊松分布。 从理论上,我们知道,这种分布可以在独立性的主要假设下有效地模拟固定时间范围内发生的随机事件数。 在一般情况下,生成模型基于参数化分布(例如,使用神经网络),并且没有对其族做出特定假设。 仅在某些特定情况下(例如,高斯混合),才可以选择具有特定属性的分布,并且在不失严格性的前提下,我们可以将此示例视为这样的情况。
而且,在每个小时的开始发送一个组变得更容易,而不是一个个地控制智能体。 因为问题很简单,所以我们也知道泊松分布很好,它是用`μ`参数化的泊松分布。 从理论上,我们知道,这种分布可以在独立性的主要假设下有效地模拟固定时间范围内发生的随机事件数。 在一般情况下,生成模型基于参数化分布(例如,使用神经网络),并且没有对其族做出特定假设。 仅在某些特定情况下(例如,高斯混合),才可以选择具有特定属性的分布,并且在不失严格性的前提下,我们可以将此示例视为这样的情况。
泊松分布的概率质量函数为:
......@@ -489,9 +489,9 @@ syn = poisson.rvs(mu, size=2000)
强化学习方案可以看作是一种有监督的方案,其中隐藏的老师在模型的每个决定之后仅提供近似的反馈。 更正式地讲,强化学习的特征在于主体与环境之间的持续交互。 前者负责制定决策(行动),并最终确定其结果以增加回报,而后者则负责为每项行动提供反馈。 反馈通常被认为是一种奖励,其价值可以是积极的(行动已经成功)或消极的(行动不应重复)。 当代理分析环境(状态)的不同配置时,必须将每个奖励都视为绑定到元组(动作,状态)。 因此,最终目标是找到一个最大化预期总回报的策略(一种建议在每个州采取最佳行动的策略)。
强化学习方案可以看作是一种有监督的方案,其中隐藏的老师在模型的每个决定之后仅提供近似的反馈。 更正式地讲,强化学习的特征在于主体与环境之间的持续交互。 前者负责制定决策(行动),并最终确定其结果以增加回报,而后者则负责为每项行动提供反馈。 反馈通常被认为是一种奖励,其值可以是积极的(行动已经成功)或消极的(行动不应重复)。 当智能体分析环境(状态)的不同配置时,必须将每个奖励都视为绑定到元组(动作,状态)。 因此,最终目标是找到一个最大化预期总回报的策略(一种建议在每个州采取最佳行动的策略)。
强化学习的一个非常经典的例子是学习如何玩游戏的代理。 在情节期间,代理会在所有遇到的状态下测试动作并收集奖励。 一种算法会纠正该策略,以减少非积极行为(即那些奖励为正的行为)的可能性,并增加在情节结束时可获得的预期总奖励。
强化学习的一个非常经典的例子是学习如何玩游戏的智能体。 在情节期间,智能体会在所有遇到的状态下测试动作并收集奖励。 一种算法会纠正该策略,以减少非积极行为(即那些奖励为正的行为)的可能性,并增加在情节结束时可获得的预期总奖励。
强化学习有许多有趣的应用,而不仅限于游戏。 例如,推荐系统可以根据用户提供的二进制反馈(例如,拇指向上或向下)来校正建议。 强化学习和监督学习之间的主要区别是环境提供的信息。 实际上,在有监督的情况下,校正通常与校正成比例,而在强化学习中,必须考虑一系列操作和将来的奖励来进行分析。 因此,校正通常基于预期奖励的估计,并且其效果受后续操作的值影响。 例如,一个受监督的模型没有记忆,因此它的修正是即时的,而强化学习智能体必须考虑情节的部分推出,以便确定一个动作是否实际上是负面的。
......
......@@ -4,7 +4,7 @@
在本章中,我们将继续探索可用于非凸任务的更复杂的聚类算法(即,例如,K 均值无法同时获得内聚和分离力。 几何形状)。 我们还将展示如何将基于密度的算法应用于复杂的数据集,以及如何正确选择超参数并根据所需结果评估性能。 这样,数据科学家就可以准备面对各种问题,排除价值较低的解决方案,而只关注最有前途的解决方案。
在本章中,我们将继续探索可用于非凸任务的更复杂的聚类算法(即,例如,K 均值无法同时获得内聚和分离力。 几何形状)。 我们还将展示如何将基于密度的算法应用于复杂的数据集,以及如何正确选择超参数并根据所需结果评估表现。 这样,数据科学家就可以准备面对各种问题,排除价值较低的解决方案,而只关注最有前途的解决方案。
特别是,我们将讨论以下主题:
......@@ -529,7 +529,7 @@ K 中心点的提出(在《基于 L1 范数和相关方法的统计数据分
最后一个基本差异是公制距离。 由于没有限制,所以 K 型药物或多或少具有攻击性。 正如我们在第 2 章,“聚类基本原理”中讨论的那样,最长的距离由曼哈顿度量标准提供(以相同的方式评估每个组件),而当`p`增加(以通用的闵可夫斯基度量),组件之间的最大差异成为主导。 K 均值基于最常见的权衡(欧几里德距离),但是在某些特殊情况下,较大的`p`可以带来更好的性能(比较`p = 1``p > 1)`。 例如,如果`c[1] = (0, 0)``c[2] = (2, 1)``x = (0.55, 1.25)`,曼哈顿距离`d[1](x, c[1])``d[1](x, c[2])`分别为 1.8 和 1.7,而欧几里得距离为 1.37 和 1.47。 因此,在`p = 1`的情况下,该点被分配给第二个簇,而在`p = 2`的情况下,该点被分配给第一个簇。
通常,预测正确的`p`值并不容易,但始终可以使用轮廓和调整后的 Rand 得分等方法测试几种配置,并选择产生更好分割效果的方法(即 ,最大内聚和分离度或更高的调整后的 Rand 得分)。 在我们的示例中,我们将生成一个也包含基本事实的数据集,因此我们可以使用后一个选项轻松评估性能。 因此,我们将使用函数`make_blobs`生成`1000`样本,这些样本在由`[-5.0, 5.0]` 界定的框中分成`8`个 blob,如下所示:
通常,预测正确的`p`值并不容易,但始终可以使用轮廓和调整后的 Rand 得分等方法测试几种配置,并选择产生更好分割效果的方法(即 ,最大内聚和分离度或更高的调整后的 Rand 得分)。 在我们的示例中,我们将生成一个也包含基本事实的数据集,因此我们可以使用后一个选项轻松评估表现。 因此,我们将使用函数`make_blobs`生成`1000`样本,这些样本在由`[-5.0, 5.0]` 界定的框中分成`8`个 blob,如下所示:
```py
from sklearn.datasets import make_blobs
......@@ -722,7 +722,7 @@ mbkm = MiniBatchKMeans(n_clusters=nb_clusters, batch_size=batch_size, reassignme
birch = Birch(n_clusters=nb_clusters, threshold=0.2, branching_factor=350)
```
该示例的目标是现在采用方法`partial_fit()`逐步训练两个模型,并考虑到每个步骤之前处理的全部数据,评估调整后的 Rand 得分,如下所示:
该示例的目标是现在采用方法`partial_fit()`逐步训练两个模型,并考虑到每个步骤之前处理的全部数据,评估调整后的兰德得分,如下所示:
```py
from sklearn.metrics import adjusted_rand_score
......
......@@ -88,7 +88,7 @@
![](img/e01641d3-1ade-4661-8e50-03a1a1e55628.png)
这样的系数在 0 和 1 之间。当`P[C] ≈ 0`时,表示`w[C] ≈ 1 / k`,这意味着平坦的分布和较高的模糊度。 另一方面,当`P[C] ≈ 1`时,则`w[C] ≈ 1`表示几乎是硬分配。 所有其他值都与模糊程度成正比。 因此,给定任务后,数据科学家可以根据所需结果立即评估法的执行情况。 在某些情况下,最好使用硬分配,因此,可以将`P[C]`视为在切换至例如标准 K 均值之前执行的检查。 实际上,当`P[C] ≈1`(并且这样的结果是预期的结果)时,不再使用模糊`c`均值。 相反,小于 1 的值(例如`P[C] = 0.5`)会告诉我们,由于存在许多边界样本,因此可能会出现非常不稳定的硬分配。
这样的系数在 0 和 1 之间。当`P[C] ≈ 0`时,表示`w[C] ≈ 1 / k`,这意味着平坦的分布和较高的模糊度。 另一方面,当`P[C] ≈ 1`时,则`w[C] ≈ 1`表示几乎是硬分配。 所有其他值都与模糊程度成正比。 因此,给定任务后,数据科学家可以根据所需结果立即评估算法法的执行情况。 在某些情况下,最好使用硬分配,因此,可以将`P[C]`视为在切换至例如标准 K 均值之前执行的检查。 实际上,当`P[C] ≈1`(并且这样的结果是预期的结果)时,不再使用模糊`c`均值。 相反,小于 1 的值(例如`P[C] = 0.5`)会告诉我们,由于存在许多边界样本,因此可能会出现非常不稳定的硬分配。
现在,让我们将 scikit-learn 提供的 Fuzzy c-means 算法应用于简化的 MNIST 数据集。 该算法由 Scikit-Fuzzy 库提供,该库实现了所有最重要的模糊逻辑模型。 第一步是加载和规范化样本,如下所示:
......@@ -423,7 +423,7 @@ P([1, 0]=G1) = 0.068 and P([1, 0]=G2) = 0.932
![](img/be138ce2-232e-4f56-bea4-bb9522afbb79.png)
这种方法有两个重要含义。 第一个是关于值本身。 AIC 越小,得分越高。 实际上,考虑到奥卡姆(Occam)的剃刀原理,模型的目的是用最少的参数获得最佳的似然性。 第二个含义与信息理论严格相关(我们不在讨论数学上繁琐的细节),尤其是与数据生成过程和通用概率模型之间的信息丢失有关。 可以证明 AIC 的渐近最小化(即,当样本数量趋于无穷大时)等于信息丢失的最小化。 考虑基于不同成分数量的几种高斯混合(`n[p]`是所有权重,均值和协方差参数的总和),具有最小 AIC 的配置对应于使用最高精度再现数据生成过程的模型。 AIC 的主要局限性在于小型数据集。 在这种情况下,AIC 倾向于针对大量参数达到最小值,这与 Occam 的剃刀原理相反。 但是,在大多数现实生活中,AIC 提供了一种有用的相对措施,可以帮助数据科学家排除许多配置并仅分析最有前途的配置。
这种方法有两个重要含义。 第一个是关于值本身。 AIC 越小,得分越高。 实际上,考虑到奥卡姆(Occam)的剃刀原理,模型的目的是用最少的参数获得最佳的似然性。 第二个含义与信息理论严格相关(我们不在讨论数学上繁琐的细节),尤其是与数据生成过程和通用概率模型之间的信息丢失有关。 可以证明 AIC 的渐近最小化(即,当样本数量趋于无穷大时)等于信息丢失的最小化。 考虑基于不同成分数量的几种高斯混合(`n[p]`是所有权重,均值和协方差参数的总和),具有最小 AIC 的配置对应于使用最高精度再现数据生成过程的模型。 AIC 的主要局限性在于小型数据集。 在这种情况下,AIC 倾向于针对大量参数达到最小值,这与 Occam 的剃刀原理相反。 但是,在大多数现实生活中,AIC 提供了一种有用的相对措施,可以帮助数据科学家排除许多配置并仅分析最有前途的配置。
当需要强制将参数的数量保持在非常低的水平时,可以使用**贝叶斯信息准则****BIC**),其定义如下:
......
......@@ -877,7 +877,7 @@ X_tsne = tsne.fit_transform(Xf)
在最后一部分中,我们分析了可用于执行新颖性检测的两种常用方法。 一类 SVM 利用内核的功能将复杂的数据集投影到可以线性分离的特征空间上。 下一步基于这样的假设:所有训练集(一小部分除外)都是内在者,因此它们属于同一类。 训练该模型的目的是最大程度地缩小内部节点与特征空间原点之间的距离,并且结果基于样本相对于分离超平面的位置。 相反,孤立森林是一种集成模型,基于以下假设:离群值从随机训练的决策树中的根到样本的路径平均较短。
因此,在训练森林之后,可以考虑给定新样本的平均路径长度来计算异常分数。 当该分数接近 1 时,我们可以得出结论,异常的可能性也很大。 相反,非常小的得分值表明该新颖性是潜在的内在值。
因此,在训练森林之后,可以考虑给定新样本的平均路径长度来计算异常分数。 当该分数接近 1 时,我们可以得出结论,异常的可能性也很大。 相反,非常小的得分值表明该新颖性是潜在的内在值。
在下一章中,我们将讨论降维和字典学习的最常用技术,当有必要管理具有大量功能的数据集时,这些技术将非常有用。
......
......@@ -44,7 +44,7 @@
这些生成模型由 Goodfellow 和其他研究人员提出(在《生成对抗网络》中),以利用**对抗训练**的功能以及深度神经网络的灵活性。 无需过多的技术细节,我们就可以将对抗训练的概念作为一种基于博弈论的技术进行介绍,其目标是优化两个相互竞争的代理。 当一个特工试图欺骗其对手时,另一名特工必须学习如何区分正确的输入和伪造的输入。 特别是,GAN 是一个模型,它分为两个定义明确的组件:
这些生成模型由 Goodfellow 和其他研究人员提出(在《生成对抗网络》中),以利用**对抗训练**的功能以及深度神经网络的灵活性。 无需过多的技术细节,我们就可以将对抗训练的概念作为一种基于博弈论的技术进行介绍,其目标是优化两个相互竞争的智能体。 当一个特工试图欺骗其对手时,另一名特工必须学习如何区分正确的输入和伪造的输入。 特别是,GAN 是一个模型,它分为两个定义明确的组件:
* **生成器**
* **判别器**(也称为**评论家**
......@@ -73,7 +73,7 @@
![](img/1c69083f-4200-4599-a7af-1b594ab3bc20.png)
实际上,当两个代理都成功地优化了目标时,判别器将能够区分从`p_data`提取的样本和异常值,并且生成器将能够输出属于`p_data`的合成样本。 但是,必须明确的是,可以通过使用单个目标来表达问题,并且训练过程的目标是找出最佳参数集,`θ = {θ[d], θ[g]}`,因此判别器将其最大化,而生成器将其最小化。 必须同时优化两个代理,但是实际上,过程是交替的(例如,生成器,判别器,生成器等)。 目标可以用更紧凑的形式表示如下:
实际上,当两个智能体都成功地优化了目标时,判别器将能够区分从`p_data`提取的样本和异常值,并且生成器将能够输出属于`p_data`的合成样本。 但是,必须明确的是,可以通过使用单个目标来表达问题,并且训练过程的目标是找出最佳参数集,`θ = {θ[d], θ[g]}`,因此判别器将其最大化,而生成器将其最小化。 必须同时优化两个智能体,但是实际上,过程是交替的(例如,生成器,判别器,生成器等)。 目标可以用更紧凑的形式表示如下:
![](img/304d8dd9-8212-4b27-a550-71c85664a763.png)
......
......@@ -31,11 +31,11 @@ AlphaZero 算法包含三个主要组件:
* 一个深度卷积神经网络,它以棋盘位置(或状态)为输入,并从该位置输出一个值作为预测的博弈结果,该策略是输入棋盘状态下每个可能动作的移动概率列表。
* 一种通用的强化学习算法,该算法通过自玩从头开始学习,除了游戏规则外,没有特定的领域知识。 通过自增强学习学习深度神经网络的参数,以使预测值与实际自游戏结果之间的损失最小,并使预测策略与搜索概率之间的相似性最大化,这来自以下算法。
* 一种通用(与域无关)的**蒙特卡洛树搜索****MCTS**)算法,该算法从头至尾模拟自玩游戏,并通过考虑到从深度神经网络返回的预测值和策略概率值,以及访问节点的频率—有时,选择访问次数较少的节点称为强化学习中的探索(与采取较高预测值的举动相反) 价值和策略,这称为剥削)。 探索与开发之间的良好平衡可以带来更好的结果。
* 一种通用(与域无关)的**蒙特卡洛树搜索****MCTS**)算法,该算法从头至尾模拟自玩游戏,并通过考虑到从深度神经网络返回的预测值和策略概率值,以及访问节点的频率—有时,选择访问次数较少的节点称为强化学习中的探索(与采取较高预测值和策略的举动相反,这称为利用)。 探索与利用之间的良好平衡可以带来更好的结果。
强化学习的历史可以追溯到 1960 年代,当时该术语在工程文献中首次使用。 但是突破发生在 2013 年,当时 DeepMind 将强化学习与深度学习相结合,并开发了深度强化学习应用,该应用学会了从头开始玩 Atari 游戏,以原始像素为输入的,并随后击败了人类。 与监督学习不同,监督学习需要标记数据进行训练,就像我们在前几章中建立或使用的许多模型中所看到的那样,强化学习使用反复试验的方法来获得更好的效果:代理与环境交互并接收在每个状态上采取的每个动作的奖励(正面或负面)。 在 AlphaZero 下象棋的示例中,只有在游戏结束后才能获得奖励,获胜的结果为 +1,失败的为 -1,平局为 0。强化学习 AlphaZero 中的算法对我们前面提到的损失使用梯度下降来更新深层神经网络的参数, 就像一个通用函数近似来学习和编码游戏技巧。
强化学习的历史可以追溯到 1960 年代,当时该术语在工程文献中首次使用。 但是突破发生在 2013 年,当时 DeepMind 将强化学习与深度学习相结合,并开发了深度强化学习应用,该应用学会了从头开始玩 Atari 游戏,以原始像素为输入的,并随后击败了人类。 与监督学习不同,监督学习需要标记数据进行训练,就像我们在前几章中建立或使用的许多模型中所看到的那样,强化学习使用反复试验的方法来获得更好的效果:智能体与环境交互并接收在每个状态上采取的每个动作的奖励(正面或负面)。 在 AlphaZero 下象棋的示例中,只有在游戏结束后才能获得奖励,获胜的结果为 +1,失败的为 -1,平局为 0。强化学习 AlphaZero 中的算法对我们前面提到的损失使用梯度下降来更新深层神经网络的参数, 就像一个通用函数近似来学习和编码游戏技巧。
学习或训练过程的结果可以是由深度神经网络生成的策略,该策略说出对任何状态应采取的行动,或者是将每个状态以及该状态的每个可能动作映射到长期奖励的值函数 。
学习或训练过程的结果可以是由深度神经网络生成的策略,该策略说出对任何状态应采取的行动,或者是将每个状态以及该状态的每个可能动作映射到长期奖励的值函数 。
如果深层神经网络使用自我玩法强化学习所学习的策略是理想的,则我们可能无需让程序在游戏过程中执行任何 MCTS,而程序总是可以最大可能地选择移动。 但是在诸如象棋或围棋的复杂游戏中,无法生成完美的策略,因此 MCTS 必须与训练有素的深度网络一起工作,以指导针对每种游戏状态的最佳可能动作的搜索。
......
......@@ -536,7 +536,7 @@ CartPole 是一种可用于训练机器人以保持平衡的环境-如果它携
在 CartPole 环境中,将杆连接到推车,该推车沿轨道水平移动。 您可以对购物车执行 1(向右加速)或 0(向左加速)操作。 杆子开始直立,目的是防止其跌落。 杆保持直立的每个时间步长都奖励 1。 当极点与垂直方向的夹角超过 15 度,或者手推车从中心移出 2.4 个单位以上时,情节就会结束。
现在让我们使用 CartPole 环境。 首先,创建一个新环境并找出代理可以在该环境中采取的措施:
现在让我们使用 CartPole 环境。 首先,创建一个新环境并找出智能体可以在该环境中采取的措施:
```py
env = gym.make("CartPole-v0")
......@@ -670,7 +670,7 @@ obs, reward, done, info = env.step(0)
环境决定何时将`done`返回`True`时会有一些延迟-尽管前两个步骤已经返回了大于 15 度的度数(当极点与垂直线成 15 度以上时,情节结束了) ,您仍然可以对环境执行 0 操作。 第三步将`done`返回为`True`,并且环境中的另一步骤(最后一步)将导致警告,因为环境已经完成了该情节。
对于 CartPole 环境,每个`step`调用返回的`reward`值始终为 1,信息始终为{}。 这就是关于 CartPole 模拟环境的全部知识。 现在我们了解了 CartPole 的工作原理,让我们看看可以在每种状态(观察)下制定什么样的策略,我们可以让该策略告诉我们要采取的操作(步骤),以便我们可以保持杆直立。换句话说,就是尽可能长的时间,这样我们才能最大化我们的回报。 请记住,强化学习中的一项策略只是一项功能,该功能以智能体所处的状态为输入,并输出智能体接下来应采取的行动,以实现值最大化或长期回报。
对于 CartPole 环境,每个`step`调用返回的`reward`值始终为 1,信息始终为{}。 这就是关于 CartPole 模拟环境的全部知识。 现在我们了解了 CartPole 的工作原理,让我们看看可以在每种状态(观察)下制定什么样的策略,我们可以让该策略告诉我们要采取的操作(步骤),以便我们可以保持杆直立。换句话说,就是尽可能长的时间,这样我们才能最大化我们的回报。 请记住,强化学习中的一项策略只是一项功能,该功能以智能体所处的状态为输入,并输出智能体接下来应采取的行动,以实现值最大化或长期回报。
......@@ -705,7 +705,7 @@ print(np.mean(total_rewards))
# 9.36
```
因此,所有 1,000 集的平均奖励约为 10。请注意, `env.action_space.sample()`对 0 或 1 动作进行采样,与随机输出 0 或 1 相同。您可以通过评估`np.sum([env.action_space.sample() for _ in range(10000)])`,应该接近 5,000。
因此,所有 1,000 集的平均奖励约为 10。请注意, `env.action_space.sample()`对 0 或 1 动作进行采样,与随机输出 0 或 1 相同。您可以通过求值`np.sum([env.action_space.sample() for _ in range(10000)])`,应该接近 5,000。
要查看其他策略如何更好地工作,让我们使用一个简单直观的策略,当极数度数为正(在垂直方向的右侧)时执行 1 动作(向右移动购物车),然后执行 0(将购物车向右移动) 当极数度数为负时(在垂直方向的左侧)。 这项策略是有道理的,因为我们可能会采取尽可能长时间保持平衡的措施:
......@@ -737,7 +737,7 @@ print(np.mean(total_rewards))
现在让我们看看我们是否可以制定出更好,更复杂的策略。 回想一下,策略只是从状态到操作的映射或功能。 在过去的几年中,我们在神经网络的兴起中了解到的一件事是,如果不清楚如何定义复杂的功能(例如强化学习中的策略),请考虑一下神经网络,毕竟这是通用函数近似器 (有关详细信息,请参见[神经网络可以计算任何函数的可视化证明](http://neuralnetworksanddeeplearning.com/chap4.html),Michael Nelson)。
在上一章中我们介绍了 AlphaGo 和 AlphaZero,Jim Fleming 撰写了一篇有趣的博客文章,标题为[“在 AlphaGo 之前的 TD-Gammon”](https://medium.com/jim-fleming/before-alphago-there-was-td-gammon-13deff866197),这是第一个强化学习应用,它使用神经网络作为评估功能来训练自己,以击败五子棋冠军。 博客条目和 Sutton 和 Barto 的《强化学习:入门》一书都对 TD-Gammon 进行了深入的描述。 如果您想了解有关使用神经网络作为强大的通用函数的更多信息,还可以使用 Google 搜索“时差学习和 TD-Gammon”的原始论文。
在上一章中我们介绍了 AlphaGo 和 AlphaZero,Jim Fleming 撰写了一篇有趣的博客文章,标题为[“在 AlphaGo 之前的 TD-Gammon”](https://medium.com/jim-fleming/before-alphago-there-was-td-gammon-13deff866197),这是第一个强化学习应用,它使用神经网络作为评估函数来训练自己,以击败五子棋冠军。 博客条目和 Sutton 和 Barto 的《强化学习:入门》一书都对 TD-Gammon 进行了深入的描述。 如果您想了解有关使用神经网络作为强大的通用函数的更多信息,还可以使用 Google 搜索“时差学习和 TD-Gammon”的原始论文。
......@@ -745,7 +745,7 @@ print(np.mean(total_rewards))
首先,让我们看看如何使用简单的完全连接的(密集)神经网络构建随机策略,该网络将观察中的 4 个值作为输入,使用 4 个神经元的隐藏层,并输出 0 动作的概率,基于 ,代理可以采样 0 到 1 之间的下一个动作:
首先,让我们看看如何使用简单的完全连接的(密集)神经网络构建随机策略,该网络将观察中的 4 个值作为输入,使用 4 个神经元的隐藏层,并输出 0 动作的概率,基于 ,智能体可以采样 0 到 1 之间的下一个动作:
```py
# nn_random_policy.py
......@@ -845,9 +845,9 @@ with tf.Session() as sess:
现在,我们都准备探索如何在此基础上实现策略梯度方法,以使我们的神经网络性能更好,获得的奖励要大几倍。
策略梯度的基本思想是,为了训练神经工作以生成更好的策略,当所有代理从环境中知道的都是从任何给定状态采取行动时所能获得的奖励(这意味着我们不能使用监督学习进行训练),我们可以采用两种新机制:
策略梯度的基本思想是,为了训练神经工作以生成更好的策略,当所有智能体从环境中知道的都是从任何给定状态采取行动时所能获得的奖励(这意味着我们不能使用监督学习进行训练),我们可以采用两种新机制:
* 折扣奖励:每个动作的值都需要考虑其未来动作的奖励。 例如,一个动作获得立即奖励 1,但是在两个动作(步骤)之后结束情节的长期奖励应该比获得立即奖励 1 但在 10 个步骤之后结束情节的动作具有较少的长期奖励。 动作的折现奖励的典型公式是其立即奖励加上其每个未来奖励的倍数和由未来步骤提供动力的折现率的总和。 因此,如果一个动作序列在剧集结束前有 1、1、1、1、1 个奖励,则第一个动作的折扣奖励为`1+(1*discount_rate)+(1*discount_rate**2)+(1*discount_rate**3)+(1*discount_rate**4)`
* 折扣奖励:每个动作的值都需要考虑其未来动作的奖励。 例如,一个动作获得立即奖励 1,但是在两个动作(步骤)之后结束情节的长期奖励应该比获得立即奖励 1 但在 10 个步骤之后结束情节的动作具有较少的长期奖励。 动作的折现奖励的典型公式是其立即奖励加上其每个未来奖励的倍数和由未来步骤提供动力的折现率的总和。 因此,如果一个动作序列在剧集结束前有 1、1、1、1、1 个奖励,则第一个动作的折扣奖励为`1+(1*discount_rate)+(1*discount_rate**2)+(1*discount_rate**3)+(1*discount_rate**4)`
* 测试运行当前策略,查看哪些操作导致较高的折扣奖励,然后使用折扣奖励更新当前策略的梯度(权重损失),以使具有较高折扣奖励的操作在网络更新后, 下次被选中的可能性更高。 重复这样的测试运行并多次更新该过程,以训练神经网络以获得更好的策略。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册