TowardsDataScience-博客中文翻译-2016-2018-二百-

100 阅读1小时+

TowardsDataScience 博客中文翻译 2016~2018(二百)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

Python 中的混合效果随机森林

原文:towardsdatascience.com/mixed-effec…

这篇博文介绍了一个开源 Python 包,用于实现混合效果随机森林(MERFs) 。编写这个包的动机来自于我们在 Manifold 建立的模型。我们遇到的大部分数据都是聚类的,例如来自个人的纵向数据、按人口统计学聚类的数据等。在许多情况下,我们发现与普通随机森林相比,使用 MERFs 提供了实质性的改进。

TL;速度三角形定位法(dead reckoning)

如果你的模型有不可忽略的随机效应,MERFs 是很好的,例如集群有很大的特质。您可以通过输入以下命令从 PyPi 安装我们的软件包:

pip install merf

源代码可在这里获得。投稿吧!该软件包基于 HEC 决策科学系的 Larocque 教授和 l'UQAM 营销系的 Ahlem 教授发表的优秀作品。

用例

大量的野外数据有一个聚集的结构。我们看到的最常见的例子是纵向聚类,在这种情况下,对于您希望建模的现象,每个个体都有多个测量值。例如,假设我们想将数学考试成绩建模为睡眠因素的函数,但我们对每个学生都有多个测量值。在这种情况下,特定的学生是一个集群。另一个常见的例子是分类变量导致的聚类。继续上面的例子,一个学生的特定数学老师是一个集群。聚类也可以是分层的。例如,在上面的示例中,有一个包含在教师集群中的学生集群,教师集群包含在学校集群中。在建立这个模型时,我们希望了解睡眠因素对数学考试成绩的普遍影响,但希望考虑学生、老师和学校的特质。

聚类数据有四种合理的建模策略:

  1. **为每个集群制作一个单独的模型。**这种策略不令人满意,原因有两个:(a)通过聚类进行分片使得任何给定的模型都没有太多的训练数据,以及(b)该模型不能在整个群体中学习。
  2. **为所有集群创建一个全局模型。**使用这种策略,模型可以学习整个群体,但不会学习特定集群的任何特质。例如,不考虑睡眠因素,一些学生可能有更高的数学能力。将这种影响明确地模型化,而不是将其归入睡眠因素,这将是一件好事。
  3. **制作一个全局模型,但是把集群 id 作为一个特征放进去。**这是一个明智的策略,但随着集群规模的增长,会出现扩展问题。具体来说,在随机森林中,在分裂决策变得难以处理之前,单个分类变量只能有很小的基数。在 R 中,大约 n_categories = 30。在 H20 中,n_categories = 64。Python Scikit-learn 中的随机森林实现甚至不支持非二进制分类变量。一个热编码集群是一个选项,但正如这篇出色的博客文章中所解释的,这种方法的性能很差(我们将在下面展示)。长话短说,在模型中直接使用高基数分类变量作为特征很糟糕。
  4. **混合效应模型。**这才是攻击集群数据的正确方法。在混合效应模型中,每个聚类获得一个随机效应,该随机效应是从先验中学习的,而先验本身是从数据中学习的。如下所述,这并不是一个新的想法,统计学家一直都在这么做。但是混合效果随机森林是新颖的——它们结合了线性混合效果模型的优点和非参数建模的能力,在这种情况下,您不需要理解问题的“物理学”。

混合效果建模的历史

线性混合效果(LME)建模是一个经典的技术。让我们更详细地看看这个,因为它激发了 MERF 模型。LME 模型假设一个生成模型,其形式为:

Linear Mixed Effect Model

在上面的等式中:

  • y 是目标变量。
  • x 是固定效果特征。假设 x 是 p 维的,例如有 p 个特征。
  • z 是随机效应特征。假设 z 是 q 维的,例如有 q 个特征。
  • e 是独立同分布(iid)噪声。它分布为 N(0,sigma_e)
  • a 是固定效应系数。它们对所有集群都是一样的。
  • I 是集群索引。我们假设在训练中有 k 个聚类。
  • bi 是随机效应系数。它们在每个聚类 I 中是不同的,但是被假设为来自相同的分布。在经典的 LME 问题中,这种分布被假设为 N(0,适马 _b),其中适马 _b 从数据中学习。

LME 是更一般的分层贝叶斯模型的一个特例。这些模型假设固定效应系数是未知的常数,但随机效应系数是从一些未知的分布中提取的。使用迭代算法一起学习随机效应系数和先验。然而,本文不是关于层次贝叶斯模型的。如果你想了解更多,这是一个很好的资源。

虽然分层贝叶斯建模是一个成熟的领域,但它们要求你指定回归的函数形式,即你需要知道问题的物理性质。不幸的是,在许多情况下,特别是在复杂的系统中,很难指定一个函数形式。这就是随机森林的闪光点。由于它分割了特征空间,可以作为一个通用的函数逼近器。我们在 Manifold 的工作引导我们寻求将随机森林与混合效果的力量结合起来。

混合效果随机森林

我们在蒙特利尔高等商学院决策科学系拉罗克教授团队的出色工作中找到了答案。在一系列论文中,他们阐述了一种将随机森林与线性随机效应相结合的方法。更重要的是,拉罗克教授非常慷慨地提供反馈,使 MERF Python 包成为现实。

与 LME 相似,MERF 模型假设了一个生成模型,其形式为:

Mixed Effects Random Forest Model

注意,除了线性固定效应 a*X 被一个一般的非线性函数 f(.).在本文中,这个非线性函数是使用随机森林学习的。更一般的,f(。)可以是任何非线性回归模型,如梯度推进树或深度神经网络。

一种期望最大化(EM)技术被用于拟合 MERF。有四个参数需要拟合:

  • f(。)
  • 所有已知集群的 bi。
  • 适马 _b
  • 西格玛 _e

我们不会在这里讨论数学——这篇论文做得更好——但 EM 算法背后的基本直觉是替代优化,例如,优化一个参数,同时保持其他参数不变。你不断重复这样做,直到收敛。具体来说,要适应 MERF,步骤如下:

  1. 固定所有 bi 并将 y计算为 y-bi * z。在所有样本中全局拟合一个随机森林,f(X)到 y
  2. 修正 f(),适马 _b,西格玛 _e .优化找到 bi*。假设线性随机效应和高斯先验,有一个封闭形式的解决方案。
  3. 修正 f(),bi。优化以找到适马 b 和西格玛 e。有一个封闭形式的解决方案,假设线性随机效应和高斯先验。

可以在每次迭代中计算的广义对数似然(GLL)是训练损失的度量。随着 GLL 的下降,合身程度提高。一旦它变平,我们通常可以停止迭代——拟合已经收敛。MERF 没有太多过度适应的危险——不会比经典的随机森林更容易过度适应。

一旦拟合出 MERF 就可以用来预测。对于 MERF 在训练中看到的“已知”聚类中的数据,预测包括随机效应校正:

MERF prediction for known clusters

对于 MERF 在训练中没有看到的“新”聚类中的数据,预测仅包括固定效应:

MERF prediction for new clusters

MERF 蟒蛇皮包

我们的贡献是用 Python 实现了一个 MERF 并将其开源。我们实现了尽可能多的遵守 scikit-learn 模型接口。下面我们用一个例子来说明。这个例子可以作为一个可运行的 Jupyter 笔记本在这里下载。

我们有三个矩阵,包含我们的 n_samples =500 个训练数据:

  • X.包含三个固定效果特征的矩阵。尺寸= 500 x 3。
  • y.包含单个目标变量的向量。尺寸= 500 x 1。
  • 集群。包含每个样本的 cluster_id 的向量。尺寸= 500 x1。我们在训练数据中有 k = 100 个唯一的聚类。

在这个例子中,没有明确的 Z 矩阵。我们创建一个来为每个集群建模一个随机平均值。它是一个维数为 500 x 1 的全 1 矩阵。

给定 X、y、集群和 Z 矩阵,我们可以通过实例化 MERF 模型并运行 fit 方法将 MERF 模型固定到该数据。MERF 模型目前有两个超参数:

  • n _ 估计量。为随机森林训练的树的数量。
  • max_iterations。EM 模型运行的最大迭代次数。

我们最终也计划为 EM 算法实现提前停止。这将增加一个额外的两个超级参数,即是否提前停止和应该有多大的耐心。

下面是 fit 的输出样子。请注意,拟合通常需要一些时间来运行——尤其是如果您运行多次迭代的话。这是不可避免的,因为每次 EM 迭代都需要随机森林拟合。即使对随机森林拟合进行并行化,单个 MERF 拟合也可能需要几分钟。

Training using MERF

一旦模型被训练,我们可以通过两个公共变量访问最终的随机森林和最终的已训练 b_is 矩阵:

mrf.trained_rf
mrf.trained_b

我们可以看看 b 的分布。它看起来像预期的方差为适马 _b 的近似高斯分布:

Final distribution of b_i’s

该模型还拥有 EM 迭代的历史。我们可以查看每一步的广义对数似然性(GLL ),适马 b、西格玛 e 和所有 bi 的估计值。

Convergence of MERF fitting

一旦拟合,该模型可用于预测给定 X、Z 和聚类的新样本。预测代码根据在训练中是否看到新样本的 cluster_id 来处理是否应用随机效应校正。

Predicting using MERF

合成数据性能

我们在合成数据上测试了 MERF 的性能。实验装置模仿了 MERF 发表的论文。我们从这个函数中生成数据:

Data Generating Model

在这个等式中:

  • m 是我们选择的固定常数。
  • bi 取自正态分布 N(0,sigma_b)。对于每个簇 I,它们是常数。sigma_b 是我们选择的固定常数。
  • 误差 e 是从正态分布 N(0,sigma_e)的 IID 得出的。sigma_e 是我们选择的固定常数。

在我们的实验中,我们为 m、sigma_e 和 sigma_b 选择不同的值,并从 100 个不同的不平衡集群中生成 500 个样本。我们在下表中总结了这些值,但是具体的值并不那么重要。重要的是两个派生的参数,总效应方差百分比(PTEV)和随机效应方差百分比(前一个)。本文对它们进行了详细定义,但直观上它们是:

  • PTEV =由于随机噪声导致的总方差的量是而不是。它越高,输出 y 越可预测。
  • PREV =由于随机效应产生的 PTEV 量。它越高,随机效应越大。

我们做了一个实验,将 MERF 与两个竞争对手进行比较:

  • 不考虑随机效应的随机森林,即仅在 x 上拟合随机森林。
  • 包括一个热编码簇 id 作为特征的随机森林,即我们创建 k 个新的热编码特征 X_ohe,并将其与 X 连接,并在组合的[X,X_ohe]特征矩阵上训练随机森林。

我们在实验中改变了 PTEV 和 PREV,并在两个不同的测试集上评估了性能:

  • 测试集由模型训练的已知分类组成
  • 测试集由模型在训练时不知道的新(未知)聚类组成

我们使用 10 次运行的平均均方误差(MSE)作为误差度量。我们将 MERF 增益定义为相对于比较算法的百分比增益:

下面的表格和图表总结了结果。MERF在两个对比车型上都有显著的性能提升——特别是当 PREV 很高**(超过 50%!)**。此外,在预测新的聚类时,性能损失可以忽略不计。当数据中存在显著的随机效应时,MERF 是一个严格更好的模型。它是一个胜利者。

我们已经将数据生成器作为实用模块包含在 merf 包中。实验的源代码在 Jupyter 笔记本里。检查一下,并运行您自己的实验!

Experimental Results

Gain of MERF over RF and RF-OHE

真实数据上的性能

Manifold 正在为我们的一个客户解决一个热模型问题。问题是根据许多因素,例如前一天的室外温度、室外湿度、室内温度,每天预测建筑物何时将达到其目标温度。我们有按建筑纵向分组的历史数据。集群高度不平衡。对于一些建筑,我们有多年的数据;对其他人来说,我们只有几周时间。这个问题需要一个混合效应模型。我们希望建立一个模型,它可以在整个人群中学习,但同时也要考虑到每栋建筑的特质。

与上面的实验类似,我们将 MERF 与以下对象进行了比较:

  • 不考虑随机效果的随机森林,即仅在固定效果特征上拟合随机森林。
  • 包括一个热编码建筑物 id 作为特征的随机森林,即我们创建 k 个新的热编码特征 X_ohe,并将其与固定效果特征连接,并在组合的[X,X_ohe]特征矩阵上训练随机森林。

由于异常值,我们将误差度量改为中值绝对误差(MAE ),而不是 MSE。我们在一个小的 N~1000 数据集上使用 5 重交叉验证来比较性能。实验结果总结如下。

MERF Gain doing 5-fold cross validation

对于这个数据集,有一个小的 MERF 增益,但它不是那么显著。通过观察 MERF 收敛图,我们得到了一些线索。

MERF Thermal Model Convergence

GLL 是平坦的,即使我们运行 100 次迭代,其他变量也在收敛。不清楚这是什么意思。此外,估计的误差方差 sigma_e 非常显著。数据似乎有一个非常低的 PTEV(因为离群值?).一个热编码(OHE)模型做得很好,因为建筑物的数量很少——k = 15。随着建筑数量的增加,OHE 模型的性能将会受到更大的影响。

所有这些因素,加上没有那么多数据的事实,让这个实验有点不确定。MERF 的表现并不比它的对手差——所以这并没有什么坏处——事实上平均来说还略有增加。这个实验需要更多的分析——当我们完成分析时,我们会在这个博客上公布它们。

结论

混合效应模型是强大的——而且许多数据都有适合使用它们的结构。将它们添加到您的模型清单中。混合效应随机森林(MERFs)是拼图的一部分。他们结合了最佳的随机森林和最佳的混合效果模型。我们希望它们对您有用。更重要的是,我们正在寻求帮助来扩展 MERF 套餐!我们会喜欢更多的贡献者。我们有一堆未解决的问题要处理:

  • 添加提前停止。
  • 添加更多学习器,例如梯度提升树、xgboost 等。
  • 使用 GMERFs 向分类添加概化。参见论文此处
  • 对使用非线性混合效果而不是纯线性效果进行新的研究。

向我们发送拉取请求!

关于流形

Manifold 是一个 AI 工作室,在硅谷和波士顿都有办公室。当风险很高时,领先的公司会与我们合作开发新的人工智能解决方案。我们加快上市时间,创造新的知识产权,并培养内部能力。Manifold 的团队在构思和部署生产机器学习系统和数据平台方面经验丰富,这些平台位于谷歌、脸书、高通、麻省理工学院和成功的风险投资支持的初创公司。我们的专业领域涵盖电子(消费和工业)、无线、医疗保健和营销。我们有一个广泛的专家网络,我们利用了工业和工程子专业。

想研究这样的东西吗?向 sdey@manifold.com 伸出援手!我们正在招聘数据科学家

专家与协方差的混合

原文:towardsdatascience.com/mixture-of-…

在这里,我将继续探索前沿的神经网络设计,以及如何使用协方差来改善训练时间、泛化和对新环境的适应。(我介绍了负协方差的概念,提供了更多的 细节,以及注意的背景和可交代性问题,在前面。)

很复杂:

神经网络结构正变得越来越复杂。现在,多个网络以协调的方式被使用,并且单个网络有时被分割成一个“专家”(MoE)的混合体。专家的混合使用一个非常大的神经网络中的条件路径——当信号通过网络传播时,一个条件层学习激活哪些专家,这样专家的各种组合在不同的情况下是活跃的。当这些专家中的一些决定其他专家的参与时,一个专家层级就形成了。因为只需要几个专家来处理每个输入,这些巨大的网络能够快速有效地处理输入,尽管它们的规模令人难以置信。

DARPA 希望制造能够边走边学的机器,这是对当前神经网络的一个重大转变,目前的神经网络首先被训练,然后被用作静态实体。要达到他们的目标,需要网络架构保留基本的识别能力,并根据新事件添加或更改解释。专家的组合可能是他们所需要的。但是,这些专家如何在旅途中学习呢?

发展新的联系,增加专家:

DARPA 的“终生学习者”将需要改变他们的联系,而不忘记或弄乱他们在过去学到的东西。就像我们的大脑一样,它们需要连贯地建立新的联系。不幸的是,传统的反向传播无法判断何时应该创建新的导线。(特别重要的是,因为训练可以产生与任何事物都没有联系的细胞!“死 ReLU”是一个常见问题。)

一个为终身学习而设计的 MoE 网络必须让现有的专家保持不变,同时让新的专家加入进来。基于协方差的强化允许网络做到这一点。

在使用来自输出层上的损失函数的反向传播来训练的网络中,没有指示新连接应该在处增长的*。然而,表现出负协方差的神经元可以被直接识别**(正如我在之前的帖子中解释的那样),具有负协方差的神经元是错误检测器。当一个受过训练的 MoE 必须学习新的东西时,它可以在这些错误检测器的下游插入一个神经元集群,并将该集群训练成一个新的专家。我会更详细地解释这一点…***

使用负协方差训练新专家:

当您在具有负协方差的神经元的下游插入一个神经元簇时,它们最初具有随机权重。让我们称这些星团为“noobs”。noob 可能离输出层非常远。这对于反向传播来说是一个问题,因为沿着整个网络的训练无法将训练集中在新的集群上。此外,额外的培训会导致现有专家的变化,导致网络过度适应!****

相反,您可以冻结网络的所有参数,除了 noob 权重的,并从 noob 簇中继续呈现负协方差的任何神经元传播梯度。(负协方差作为一个局部损失函数!)通过将错误分类期间的激活与网络成功期间的激活进行比较来测量负协方差。这样,现有的专业知识都不会丢失,整个网络不会变得过拟合,并且训练集中在观察到的错误上。只有新手才会学习,他们只会从错误中学习。

维持一个连贯的现实:

随着负协方差训练连续的 noobs,网络增长以容纳新的信息。noob 成为应对这些错误的专家。而且,因为负协方差是在整个网络中定义的损失函数,这些网络可以无限增长(就像乌贼大脑……)。以这种方式发展起来的庞大网络需要一个坚实的基础。**

那个基础,无论你的网络是执行翻译,字幕,NLP,操作机器人,设计组件,提供超分辨率,还是完成部分图像,都是 注定 是 3D+时间

我们将需要一个机械土耳其人的军队:来标记 3D 物体和发生在现实的时间场景中的事件。他们还可以标记对象和事件的质量,以及关系陈述。这些标签对应于名词、动词、形容词和介词。学习这些场景片段的神经网络可以从许多角度、许多位置看到猫和自行车,它们被其他物体部分遮挡,并经历各种动作。这个 3D+T 模型就是相干网络**

连贯性是基础:

翻译句子时,考虑连贯网络的重要性。为了理解一个句子,解释器网络必须消化整个句子,它的上下文来自周围的句子,将这个解释传递给连贯网络。如果连贯网络能够成功地将句子实例化为现实模型,它就声明解释者的选择是“连贯的”。这可以防止解释者犯语法上正确,但物理上无意义的错误。****

我们来看一个例子:“狗睡在天花板上。”语法没有错误发生,但是机器需要识别:由于重力,一只狗不能睡在天花板上。一致性网络将无法实例化该语句,并将它标记为“不一致”**

与此同时,Coherence Network 对“猫跳到了天花板上”这一说法没有异议。物理实例化可能显示一只猫在沙发上,一路跳到天花板上。(在 youtube 上看到的;这是有可能发生的。)此外,Coherence Network 会对“狗睡在屋顶上”这种说法感到满意,因为重力允许这样做。(史努比!)

与一致性网络的对话:

继续解释器-示例:当解释器向连贯网络发送可能的语句时,任何不连贯的翻译都可以被抑制,并寻求二次解释,直到找到连贯的实例。如果没有找到一致的解释,网络可以用“我不确定”来回应陈述不确定性是人机交互的关键,并允许通过与人类用户的对话来学习。

此外,人类可以窥视连贯的网络,看看解释者在想什么。这解决了可解释性的关键问题,并允许人类用户容易地识别错误。否则,没有人知道网络是否做出了合理的判断。

大图:

未来的神经网络很可能是巨大的,有许多专家层的混合物。每一项新任务或特殊情况都将是这些庞大网络中的一个“耳垂”,从一个由菜鸟变成专家的层级中成长起来。企业解决方案和个性化应用程序都可以从同一个大规模网络中发展起来,而不会增加计算成本(因为稀疏 moe 只处理其众多路径中的几条),以及而不需要大规模的再培训(因为你冻结了网络的参数,并且只对错误分类的输入进行培训)。**

最重要的是,如果你的大规模网络正在与 3D+T Coherence 网络(也被训练为 MoE with noobs)进行对话,你可以放心,它正在基于真实世界的实例找到答案,而不是随机的像素相关性。你可以看到网络在想什么,并且很容易纠正它的错误。我希望这有所帮助,国防高级研究计划局!

ML 和 AI 合作拯救灾难受害者:援助组织如何利用它的力量

原文:towardsdatascience.com/ml-and-ai-p…

2014 年 9 月 5 日,季风暴雨在几分钟内吞噬了印度、中国和巴基斯坦控制的克什米尔村庄,掩埋了 80%的领土。惊慌失措的市民逃到屋顶,许多人将在没有食物和水的情况下等待救援长达一周。#KashmirFlood 标签成为许多人的生命线,因为受害者在推特上发布他们的位置、需求和失踪的亲人,希望得到救助。

其他人就没那么幸运了。对他们来说,几乎两周过去了,互联网连接才恢复。

一旦恢复,人们通过社交媒体向亲人报告他们的状态。

一些人通过推特和脸书寻求失踪人员的信息,希望他们的努力能被分享,亲人能被找到或获救。

在世界的另一端,2014 年 8 月 14 日,在加利福尼亚州的纳帕县,当 6.0 级地震袭击该地区时,受害者拨打了数千个 911 电话。尽管如此,由于电力和通讯线路受损,求救电话无法发出,整个地区都无法获得帮助。问题是:人们的服务是基于先到先得的原则。能够使用必要的电力和通信线路拨打 911 的受害者首先得到服务,剩下那些生存资源较少的人自己照顾自己。

AI 和 ML Power 拯救生命的自然灾害管理 与此同时,斯坦福大学工程系学生 Ahmad Wani,分享他的经验:

在研究生院的一次休息期间,我去克什米尔看望我的父母,当时一场大洪水席卷了这个邦。80%的克什米尔在几分钟内就沦陷了。大多数人在没有食物和水的情况下,在屋顶上呆了长达七天……大部分救援都是随机的,应急重点也是临时的。

但这还不是全部。在他位于第三世界的家园遭受破坏后,他回到了他位于第一世界的母校,发现了具有讽刺意味的类似场景:在受灾严重的海湾地区(尽管是第一世界),FCFS 的灾难管理方法意味着援助工作也是随机进行的,没有优先考虑那些最危险或最需要的人。

在此之前、期间和之后,曼梯·里和艾把灾难受害者变成幸存者 认识到对更好的灾难管理系统的普遍需要,瓦尼的“关注一个问题”的愿景诞生了。作为一种机器学习(ML)和人工智能(AI)驱动的自然响应解决方案,One Concern 为响应者提供了工具和见解,以便在灾难事件之前、期间和之后采取拯救生命和有效的步骤进行全面恢复。几乎实时的甚至是预测性的损害和受灾地区报告有助于急救人员了解哪些需要优先处理,以及在哪里首先分配救生资源、信息和人员。

依赖人工智能和人工智能与灾难受害者同行,这并不是唯一的担忧。其他科技公司,如 IBM Watson 和 WorkFusion,以及政府组织正在依靠 ML 和 AI 解决方案,在灾害管理的每个阶段将受害者转化为幸存者。

ML 和 AI 提供预防性见解,为预防措施铺平道路 甚至在自然灾害来袭之前,ML 和 AI 解决方案,如 One Concern 的电力预测模拟模型,从而培训和准备特定区域的响应团队,以减轻灾害的端到端影响。

例如,美国疾病控制中心(CDC)报告说,全球每年有 5 万人死于流感和流感相关并发症,这种现象尤其影响第三世界国家。为了减少死亡人数并告知市民预防措施,中国深圳 CDC 汇总了有关空气质量、地理布局、经济状况、人口密度和人口流动性的实时数据。然后,他们通过 ML an AI 自动生成洞察,预测哪些地区风险最大,并以基于位置的资源为目标,以准备和控制灾难影响。

人工智能和人工智能在灾难发生时阻止灾难蔓延 在灾难发生时,人工智能和人工智能相结合,可以帮助响应者:

-跟踪和预测灾害轨迹; -确定基于位置的紧急需求和受影响最大的地区; -获得对哪些资源需要首先分配以及在哪里分配的预测洞察力; -收集和揭示用户生成的关于需求、影响、死亡人数和失踪人员的社交媒体报告的趋势; -向受影响最大或处于危险中的地区发送救生援助; -向潜在受害者发送有针对性的危险警告; -发送基于位置的及时安全信息;和 -定位受害者以协调他们的救援。

回到我们的纳帕县地震现场,由 IBM Watson 最近与公共安全通信官员协会的合作伙伴关系提供支持,应急人员本可以取消 FCFS 政策,代之以最紧急、最先响应的政策,从而拯救生命。

通过这种合作,IBM Watson 使用 ML 来分析最紧急的呼叫是如何展开的,然后将这种洞察力传递给调度员和调度培训员。最终结果是:调度员可以识别最紧急的呼叫,区分它们的优先级,并了解呼叫者的位置和可能的需求。反过来,他们可以提供及时的安全信息、资源和响应人员来拯救更多的生命。

人工智能和人工智能加速恢复以减轻创伤 人工智能和人工智能技术品牌还与保险和筹款公司合作,以加速恢复,从而缩短痛苦和创伤的后果。

例如,保险公司 Metlife Japan 致力于为路透社 14 次最致命地震之一和美国过去十年 10 次最致命海啸之一的社区提供服务。为了更好地服务高危人群,大都会人寿与 WorkFusion 合作。

WorkFusion 带来了 AI 和 ML 支持的产品,以实现无人数据库挖掘、索赔政策的自动验证、索赔与政策的事实匹配、自动化决策以及向下游支付的记录系统(SOR)的数据转换。这意味着保险索赔处理时间减少了 80%。翻译:减少受害者的痛苦时间。

位于野火和地震多发的硅谷的 RevUp 使用 ML 和人工智能支持的 WorkFusion 产品,以创纪录的速度和速度将可能的捐赠者与非营利组织进行匹配。然后,他们的组合解决方案激发捐赠者通过社交媒体共享创建相似的捐赠者,从而产生自动化、有针对性和可盈利的效率的连锁反应。最后,他们自动跟踪捐赠,以确保财务目标,从而满足受害者的需求。

人工智能和人工智能帮助人类更好地帮助人类 在灾害管理的每个阶段,人工智能和人工智能解决方案都为灾害响应者提供必要的实时洞察和自动化决策,以更高效、规模更大、影响最大、最先服务的方法取代 FCFS 救灾管理。

作为一个救灾组织,你可能无法跟随像中国深圳疾控中心这样的大型政府实体的脚步,来增强内部的 ML 和 AI 能力。但是像 RevUp 和 Metlife Japan 这样的品牌提供了一条前进的道路:伙伴关系。WorkFusion、IBM Watson 和无数新兴的人工智能和人工智能公司渴望在灾难管理之旅的每个阶段帮助您更有效地拯救和重建生命。

**你的作业:**简单地联系他们。共同开发商业案例,在人工智能和人工智能的支持下,可以减少自然灾害的死亡人数和创伤影响。

[ML]正式框架—准备工作

原文:towardsdatascience.com/ml-formal-f…

可以找到相当数量的机器学习论文,它们假设要理解良好的预备知识。另一方面,似乎没有那么多的出版物提供了清晰的初步介绍。

分类器

  • 根据某些参数化将输入元素映射到输出元素的函数

Parametrizable Classifier

输入空间、输出空间和参数空间

Domain

Codomain

Parameters Space, where the Training is performed

典型地,在分类任务中,域的维度比共域的维度高得多,然后共域成为高度语义的空间

数据集

  • 通过对未知分布执行 IID 采样获得的输入-输出对的集合(全球相关)

Training Set of N Elements

Latent World Related Distribution sampling which the Dataset is built

损失函数

使用基础真值为分类结果提供分数的函数,其中零是最高分数(即完美分类)

It compares the Classification Result with the Expected Result from the GT and assigns a score where 0 is perfect classification and it can be upper bounded to some L or go to +\infty

如果这在任何地方都是可微分的(典型地,分类器是可微分的),那么可以使用基于梯度的方法来微调分类器参数,以便最小化训练集(可以是数据集的子集)上的损失

学习机

学习机是以数据驱动的方式执行给定模型的参数拟合(其选择是元参数)的算法,即依赖于训练集、要最小化的损失函数和训练/优化策略

Learning Machine performs the Parameters Fitting of the given parametric model according to the Dataset and the Loss Function

ML 简介 3:物流和定制输出单元

原文:towardsdatascience.com/ml-intro-3-…

本帖跟随机器学习入门 2 。我们将把机器学习应用于房屋销售评估。我们将把注意力转向房屋销售建模,让我们探索自定义目标。在机器学习中,我们将探索我们可以通过同一数据集的不同表示来定义的不同目标。这是数据科学家在处理每一个新的机器学习问题时必须做出的共同决定,在这篇文章中,我们探索了一些选项。

此内容旨在介绍关于深度学习的第二次讲座,实现我们在许多情况下都需要的基于非回归的 ML 讨论。

学习目标

这篇文章给出了线性、逻辑和自定义回归目标的真实例子。

听完这堂课后,你应该能熟练使用现成的回归模型以及设计你自己的定制回归目标。

问题设置

假设我们在预测房子需要多长时间才能卖出去。目前,为了激励模型,让我们假设房屋销售市场可以快速卖出一栋房子,以响应低价公告。

在这个模拟的环境中,如果一栋房子的标价非常高,比它的价值低得多,房子几乎会立刻卖出。如果一栋房子以公平价格挂牌出售,它可能会在几周或几个月内卖出,这取决于交易的好坏。如果房子定价过高,房子可能需要几年时间或者永远卖不出去。

数据

在这个问题中,我们输入了关于房屋列表的数据:

  • 房子的平方英尺
  • 位于大城市?(是或否)
  • 离最近城市的距离(英里)
  • 卧室数量
  • 浴室数量
  • 翻新后的年数
  • 索价

这些特征中的每一个看起来都非常简单,我们可以使用我们在之前的会议中学到的知识,从我们的输入中运行回归,以预测房子将出售的时间。

机器学习选项

在这里,我们将讨论不同的机器学习目标,我们可以选择使用来解决这个问题。

经典回归

线性回归学习每个输入要素的乘数。为了进行预测,它将输入乘以乘数,然后将结果相加。我们也可以使用学习特征的线性回归,例如神经网络。

引入逻辑转换

在上一节中,我们讨论了基于元素的非线性转换。它们的工作方式是将单个值作为输入来创建单个输出。一个非常流行的变换是 sigmoid 变换,或逻辑变换。

逻辑单元将从负无穷大到正无穷大的数字映射为输入,将 0–1 映射为输出,如左图所示。

如果我们想要预测 0 和 1 之间的真实概率,或者特别是如果我们想要预测二元(2 级)定性响应变量,这是有价值的。

逻辑回归动机

如果我们只关心预测房子在第一个月会不会卖出去呢?这样,我们的模型应该预测一个介于 0 或 1 之间的数字,0 代表房子没有卖出,1 代表房子在第一周卖出。

我们可以要求我们的预测被解释为置信度或概率。如果它对自己的产出更有信心,那么它的预测应该更接近极限。这样,我们可以将模型的输出解释为房子卖(1)或不卖(0)的概率或信心。

那么如果我们在一个房子里喂食,模型线性输出 3 呢?好吧,看看上面的 sigmoid 曲线,x = 3,曲线的 y 值是 0.95,所以模型有 95%的信心这套房子会在第一周卖出。

所以这就是逻辑回归!它的概念是采用线性回归模型(神经网络或简单的线性回归)并在末尾附加一个逻辑单元。或者像另一个人所说的那样:“逻辑回归不是直接模拟这个响应 Y,而是模拟 Y 属于特定类别的概率”(链接)。

最后一个细节:优化

我骗了你。输出函数并不是逻辑回归不同于线性回归的唯一细节。关于如何实际训练模型,还有第二个区别。

还记得之前的线性回归吗,我们训练模型使其预测的平方误差最小化。但是如果我们对逻辑回归做同样的事情呢?

假设房子挂牌价格低,卖得快,那么它的价值就是一个‘1’。但是让我们假设模型预测。1,估计房子不会在时间框架内出售。那就是 1 - .1 = .9 的线性误差。所以平方误差是 0.81。让我们把它作为参考。

后来,让我们说,模型估计。0001 相同的房子,表明它几乎肯定房子不会出售。在这种情况下,误差仍约为 1,因此误差的平方也是 1。这与. 81 没有太大的不同,即使这个模型现在因为对错误结果的不可思议的信心而可怕地偏离了!

因此,随着模型对错误答案的预测越来越有把握,我们希望对模型进行更多的惩罚。如果正确的值是 1,如果我们的预测接近 0,我们希望我们的损失接近无穷大,反之亦然。这就是逻辑损失的动机,它是预测的对数。当输入接近 0 时,对数接近无穷大,因此我们使用 (Y==1) * log(预测)+(Y = = 0)* log(1-预测) 以便当我们接近关于错误答案的置信度时,我们的损失接近无穷大。

(这个公式也是从最大似然估计中数学推导出来的。有兴趣就去看看吧)

通过我们的 sigmoid 输出函数和对数损失,我们已经详细说明了线性回归和逻辑回归之间的所有差异。

逻辑回归的优点/缺点

逻辑回归的动机是做出是/否的预测。如果我们想在搬进去,而我们所关心的只是是否达到当月销售日期会怎么样?逻辑回归会告诉我们需要知道的一切!

人们经常选择逻辑回归的另一个原因是更容易看到好的结果。例如,所有多年来从未卖出的房子,模型估计它们在第一个月都卖不出去。而且所有在第一天卖出的房子,模型估计他们确实在第一个月卖出!它能准确地估计一切!

这就像接受一个人的图像,并预测这个人的名字。最初,你的准确性很差,所以你改为预测他们的性别,并获得了很高的准确性。

但是我们在那里做了什么?我们并没有更好地解决这些复杂的问题,我们只是建立了一个忽略了其环境的一些细节的模型,通过忽略一些重要的任务就可以得到很高的准确率分数。

线性回归的优点/缺点

对于这个问题,线性回归比逻辑回归更有优势,它可以估计房子出售的日期,而不仅仅是估计是否符合截止日期。它区分了两天和一周,一个月和一年和三年。

另一方面,线性回归解决了具体估计房子何时出售的问题,但它对于这种环境也有重大问题。线性回归的一个问题是,它对 1 天与 11 天之间的差异的影响就像 100 天与 110 天之间的差异一样大。这似乎不合理,因为第一个估计值相差 10 倍,而第二个估计值只相差 10%。对于这个问题,这些应该有不同的损失值。

多类分类

如果我们想预测购房者是年轻的专业人士、中年夫妇还是其他人呢?

现在有三个类需要我们选择,而不是两个,所以我们不能执行逻辑回归!我们如何在一个三选项空间中做决策?我们可以点他们 1,2,3 吗?但是 2 需要在 1 和 3 之间,这在我们的场景中没有意义!

概念检查:多类分类的约束

如果这是课堂设置,请与你的邻座交谈。 你会对模型施加什么约束,使其可以解释为在三个或更多选项之间做出决定? 我们的渐变应该是什么样子,才能帮助我们训练学习分类?它们什么时候最大,什么时候最小?

解决方案:使用交叉熵训练 Softmax 输出层

从统计角度来看,模型需要为每个输出类分配投票的概率质量,每个投票都是非负的,并且概率总和为 1。

我们需要一个损失函数,如果它将一个非常低的概率分配给正确的分类标签,它将严重地惩罚模型(具有大的梯度)。

对于 3 类分类问题,我们使用 3 个输出单元,我们通过 softmax 层。softmax 层通过指数函数映射所有单元,然后除以三个输出的总和,使它们为非负,总和为 1。

例如,对于模型输出 H1,H2,H3,softmax 层计算 o1,o2,o3 = e^(H1,H2,H3)

o '都是正的,但是我们需要它们加到一起,所以我们计算 S1,s2,s3 = [o1,o2,o3]/ (o1 + o2 + o3)将每个单独的值除以三个值的和。

然后,我们用交叉熵损失函数来训练网络,如果我们对一个例子进行了严重的错误分类,该函数会以接近 0 的对数来增加我们的损失。

看看我们如何通过使用 yi(值为 1 的真实 Y 标签)来计算相应的损失-log(yhat_i)来计算上述损失。这样,如果我们的模型预测真实标签的概率 yi 非常小,那么 Loss = log(yi)将非常大。

最后,我们预测具有最大值的输出单元,例如,如果 s2 大于 s1 和 s3,我们将预测 Yhat = S2 的内容,这可能意味着“一对中年夫妇可能会购买这栋房子”

自定义回归

有时我们将线性回归扩展到逻辑回归。但是,通常有更好的定制解决方案。当我们设计一个回归解时,我们需要考虑输出函数和损失函数。

选择输出函数

对于这个房屋销售示例,我们的房子永远不会在负天数内售出,所以让我们选择一个永远不会为负的函数。Softplus 函数怎么样,如果线性回归输出为负,它接近 0,对于正值,它只跟踪回归值。

选择损失函数

也许我们可以用来表示损失的最有意义的方法是估计的百分比误差。这样 1 周 vs 2 周和 1 个月 vs 2 个月的损失是一样的。

总结我们的自定义回归

将上述定制放在一起,我们可以通过使用带有 Softplus 输出函数和估计百分比误差损失函数的回归来预测房子需要多长时间才能卖出。

利用这些新的预测,我们可以确信方向是准确的。具体来说,它们应该在短时间内精确到粒度,在长时间内精确到方向,但不精确到天。

超越传统回归的定制

让我们后退一步,看看我们一直在讨论的内容。我们已经尝试灵活处理我们很聪明的事实,我们可以在我们的回归输出中定制一个损失函数,但是这仍然把我们自己限制在一个回归输出中。

如果你被要求估计,个人而言,房子需要多长时间才能卖出去?有时候你会看着一套房子说*“这是一套非常标准的房子,价格合理,肯定会在一周到一个月内卖出去”。其他时候,你可能会看着一栋房子说“这是一栋非常不寻常的房子。我不太确定,它可能会在一周内售出,也可能需要几年才能售出。”*

有时你对一个狭隘的预测很有信心,有时则不然。因此,如果我们真的想要一个有意义的可解释模型,让它估计其预测的可信度,就像人类会做的那样

置信估计的实现

我们刚才说什么了?我们刚刚完全改变了这里的游戏。现在,模型不是预测一个输出,而是用一个数字来表示它的估计值,现在模型预测两个数字,预测值和置信水平。

这听起来应该很疯狂!但是不要大惊小怪,我们理解它,所以我们可以实施它。

比方说,对于一栋房子,模型估计销售前的时间为 T 并且置信度为 C 。对于置信度,我们只表示预测的标准差。我们的信心是我们允许我们的误差有多大。

我们在估算房子销量的时候,尽量估算准确,尽量用一个小的置信区间来表达自信的答案。但是我们也不想表现出自信和不自信。

所以我们的失落代表了上述欲望。我们有一个损失函数,它是我们的置信区间的平方,表示“我们想要更自信”。我们有另一个损失函数,这是我们的误差,取决于我们的信心,它说“我们不能比我们的信心更不正确”。

所以损耗= ((Y-T)/C) + C

我们的产量预测和置信度都必须大于 0,所以:

t,C = Softplus(回归(特征))

用置信估计结束回归

所以我们完了!我们接受输入并计算两个回归输出,一个用于预测,一个用于置信区间。我们知道这些必须是正数,所以我们首先通过 Softplus 函数传递我们的回归输出,如上图所示。

我们用一个损失函数来训练它,这个损失函数表示“我们想要信心,但是我们也不想过度表示我们的信心”。

最后,我们通过读取一个输出作为模型的预测来解释输出,另一个预测给我们关于模型的置信度的见解。例如,如果模型输出(21,7),我们将解释房子在大约 3 周内出售,加上或减去一周。

回归解决方案的总结比较

所以我们提出了一个评估房屋销售的问题。

我们可以进行标准回归,这有利于估计我们的输出,标准,如果我们使用纯线性回归,我们可以单独解释参数,如前几篇文章所述。

运行时,我们的模型会生成以下图表:

我们可以做逻辑回归,让我们设定一个模型截止阈值,并解释我们是否会在截止日期前卖掉房子。

我们可以通过定制回归损失函数来强制我们的模型在方向上精确。

我们还可以进一步定制我们的问题,以解决预测销售时间的问题,以及定制估计我们自己的信心,让我们学会尽可能准确地预测房屋销售,并在我们无法建立自信的销售估计时进行有意义的表示。

太棒了。我们做到了。我们学习了逻辑回归,这是一个非常流行的工具,认识到它是一个超越逻辑回归的定制,并学习了如何定制我们自己的回归问题。

展望未来

即使到了最后,我们实际上仍然在轻微地限制自己。我们学会了预测一个分布,但只是一个高斯分布。如果我们想预测任意的多模态、非高斯分布会怎样?在未来的一节课中,我们将讨论能量建模,这将使我们学会预测任意分布。

这个问题展开: ML 前言 2

本系列的预期跟进:https://towardsdatascience . com/ml-intro-4-performance-measuring-and-regulatory-c 1973d 96 C5 b 9

对这一条完全理解的人打算跟进的帖子:https://medium . com/@ leetandata/machine-learning-engineering-1-custom-loss-function-for-house-sales-estimation-95 eec6b 12457

对于苦于代码或理解的人可选后续: 本帖代码详细分析:https://medium . com/@ leetandata/machine-learning-python-programming-introduction-for-business-people-10588 e 13 ce 9d

关于 Python 编程的免费综合课程。确保注册,但选择免费的可选项目。所有课堂内容免费提供: https://www . coursera . org/learn/python-programming-introduction/

一个比这个更复杂的机器学习教程,但比下面的(不是我写的)更容易https://www . ka ggle . com/rochelle Silva/simple-tutorial-for-初学者

软件工程师可选后续岗位: 重数学、重 CS 的详解(上):https://medium . com/@ leetandata/neural-network-introduction-for-Software-Engineers-1611d 382 C6 aa

重数学、重 CS 的详解(下):https://medium . com/@ leetandata/neural-network-for-software-engineers-2-mini-batch-training-and-validation-46ee 0a 1269 a 0

Cho 教授可选数学笔记: https://github . com/NYU-dl/Intro _ to _ ML _ Lecture _ Note/raw/master/Lecture _ Note . pdf

ML 简介 4:正规化,验证和营销归因

原文:towardsdatascience.com/ml-intro-4-…

Fitting curves to data

本帖跟随机器学习入门 3 。我们将把机器学习应用于模拟数据集,并探索如何测量机器学习的性能。然后我们将探讨正则化的数学概念。最后,我们将探讨如何在营销中使用规范化来提供有意义的见解。

本次会议的代码将张贴在这里

学习目标

这篇文章给出了一个真实世界的例子,如何使用机器学习获得关于营销影响的见解

听完这个讲座后,你应该明白

  • 我们为什么以及如何判断机器学习系统
  • 多项式回归
  • 如何使用正则化
  • 你如何从读取一个规则化的机器学习系统的输出做出营销决策

(这过于简化,但仍不是我们百事公司的做法,原因有很多,因为我们可以在很多方面做得更好。我们将在未来的会议中讨论其中的一些,其中一些将需要在没有博客帖子的情况下亲自教授。然而,这应该让你对如何解释机器学习来做决策有所体会)

前言问题

我们要讨论的第一个问题是预测一家商店一周会卖出多少香蕉,前提是他们在那一周从当地农民那里购买了多少香蕉。

假设我们只有以下关于历史销售额的数据点:

你可能会认为有上升趋势,如果你买得太多或太少,货架看起来杂乱或稀疏,可能会有额外的复杂性,但也许这只是一个总体的上升趋势。理想情况下,机器应该具有相同的思想。

让我们把预测销售看作一个回归问题。线性回归可以解决这个问题:

卖的香蕉= _ *买的香蕉+_

我们的模型学习了卖出的香蕉= 0.85 *买的香蕉- 10.5,上面可视化了。

这似乎是合理的,它学到了一个积极的关系。但也许它遗漏了一些复杂的东西。

而不是学香蕉卖了= _ *香蕉买了+_:

假设 y 是卖出的香蕉,x 是买入的香蕉。接下来让我们想象一个更复杂的函数,y = _ * x + _ * x + _。这将能够学习更复杂的互动。但是为什么就此打住呢?下面,我们学习

y = _ * x+_ * x+_ * x+_ *x⁴+_ *x⁵+_ *x⁶+_ *x⁷+_ *x⁸+_

模型得知 y = x -178667.84+x * 35887.57+x -3375.53+x⁴ 173.71+x⁵-5.29+x⁶* 0.1+x⁷*-0.0+x⁸* 0.0+16.0

哇哦。这些都是巨大的乘数。它完全符合我们的数据点,但对于任何超出这个范围的东西来说似乎都是不现实的。也许模型被赋予了很好地学习数据的能力,并且在预测超出正常范围的不寻常的高值或低值的未来数据点上不会很好地工作。

引入正规化

正则化是一个偏好简单模型的概念。在我们的多项式回归的情况下,正则化意味着我们惩罚大的乘数。有了正则化,我们将有更小的乘数,拟合数据点不那么完美,但有一个更平滑的曲线。

过度正则化

让我们将正则化添加到我们的模型中,乘数为 1。我们可以从 1 开始,并根据需要进行调整。

模型学习到的 y = x * 0.1638+x * 0.0038+x * 0.0001+x⁴* 0.0+x⁵*-0.0+x⁶*-0.0+x⁷*-0.0+x⁸*-0.0+16.0

肯定是小得多的乘数,但看看曲线,也许我们应用了太多的正则化,现在预测看起来太平了

欠正则化

现在,我们将正则化乘数从 1 改为 1e-20,以降低正则化程度。

模型学习到 y = x -9944.37+x * 2122.76+x -210.91+x⁴ 11.4+x⁵-0.36+x⁶* 0.01+x⁷*-0.0+x⁸* 0.0+16.0

我们可以直观地看出,这个模型看起来需要更多的正则化,因为它的曲线似乎比我们希望的波动更大。

正规的

在 1.0 和 1e-20 之间,我们选择 1e-5 的正则化,这产生了下图。

这个看起来最符合数据的模型学习了

y = x -1.5684+x -0.0823+x * 0.0055+x⁴ 0.0001+x⁵-0.0+x⁶*-0.0+x⁷*-0.0+x⁸* 0.0+16.0

我们还可以将这条新曲线与之前的其他正则化曲线进行比较,如下所示:

量化这些决策:验证

在上一节中,我们做了大量的曲线分析,以决定哪种模型最适合我们的数据。真实数据集比这更复杂,我们更喜欢自动做出这个决定的方式。

我们使用的算法称为训练和验证,工作原理如下:

假设我们有很多不同的模型,我们认为这些模型可能很好地符合数据。我们首先将数据分为训练集和验证集。我们的每个数据点都被随机映射到这些集合中的一个。

然后,我们选取每个模型,训练它们以适应训练集。一旦它学习了它的参数,我们就计算它在它的验证集上会收到的误差。误差最小的模型似乎对数据建模最好,不是基于它训练的特定数据点,而是基于看不见的数据点。

如果我们看上面,轻正则化模型似乎预测疯狂的值,所以它可能会在看不见的点上有很高的误差。强正则化也会由于忽略一些重要趋势而在看不见的点上具有高误差。因此,我们会选择具有中等正则化的模型,而不看这些曲线。

营销测量的规范化

既然我们已经有了数学概念,让我们谈谈学习有意义的营销见解!

模拟环境

对于这个例子,让我们假设我们想要了解我们的哪些营销行为是最有意义的。在这个模拟环境中,我们有多年的数据,可以了解我们在不同品牌的营销预算上花了多少钱,以及每个品牌的日销售额。

本例中我们的营销预算是“交易支出(Trade)”、“搜索支出(Search)”和“展示支出(Display)”。

我们的两个核心数据表如下所示:

一个表告诉我们什么时候进行促销,我们花了多少钱,另一个表告诉我们每个品牌每天的销售额。

营销归因目标

我们想要模拟的是我们营销活动的增量提升。如果我们能够理解我们的每一个营销活动是如何影响销售额的,我们就可以采取投资(促销支出)回报(增量)最高的营销活动。另一个目标可能是提出新的广告方法,但这超出了本练习的范围。

但问题是,我们不能直接测量增量升力。这是因为对于任何一天,如果我们没有进行促销,我们都不知道会有多少销售额。

营销归因方法

我们能做的是,如果我们没有进行促销活动,就估计销售额,然后用促销活动来估计销售额。我们通过将销售额构建为不含促销的基线预测加上促销增量的函数来实现这一点。

在现实世界的场景中,我们会更智能地模拟基线销售,但在这个场景中,让我们将每个品牌的销售模拟为一个常数,每个促销类型根据花费的金额增加一个增量。

预计销售额=基线(品牌)+提升(营销行动)

可能的次优方法:常数建模

我们可以模拟这些数据的一种方法是忽略不同品牌的投资回报率的差异。我们可以直接将全球销售额建模为每个不同营销领域的全球支出的函数。然而,这样一来,我们就失去了很多关于单个品牌的销售额是否与其特定的支出可变性密切相关的信息。我们看到,我们的全局模型受环境中其他噪声的影响要大得多,并且学习到的全局参数不如品牌或产品级别模型的全局聚集参数准确,这将在下面讨论。

促销-品牌互动

我们可能会想到的一个细节是,不同类型的促销可能对一些品牌有更大的影响,而对另一些品牌影响较小。因此,每个品牌都应该能够从每种营销类型中学习到自己的效果。

然而,如果我们为每个品牌、每个促销类型学习一个单独的乘数,在没有正规化的情况下,我们正在学习很多参数。还记得上面的回归模型吗,我们给香蕉数据集拟合了 8 个参数。如果不进行正则化,该模型很容易过度拟合并预测极值。我们的模型也能够过度拟合我们的数据集,类似于本文前半部分讨论的香蕉示例(我们肯定会在真实世界的数据中看到这种情况)。因此,我们可以假设某些类型的促销对大多数品牌应该有一致的影响,但是一些品牌可以偏离这些全球趋势。

我们通过建模来实现这一点:

提升(营销活动)=(全球投资回报率+品牌偏离)*营销支出

我们允许模型学习每种营销支出的全球投资回报率,但我们应用正则化来迫使我们的品牌水平变化接近于 0,这样大多数品牌采用全球投资回报率作为他们在该营销桶中的投资回报率。

模拟数据分析

如上所述运行线性回归,我们的模型学习以下系数:

现在我们正在进行营销归因测量!我们了解到每个品牌都有一个基准销售价值,并衡量了我们营销活动的投资回报。最上面一行的汇总表示表示每增加一美元的支出,您将获得多少美元的销售增量的总体影响。下面的行表示与这些全局参数的特定偏差,但大多数时候它们应该接近全局 ROI。

为了解释上述内容,我们可以看到显示通常具有最高的投资回报率,其次是搜索和交易。软糖的展示似乎非常低效,投资回报率只有 0.6%。搜索 Sparkle Pop,或显示 Sparkle Pop 或 Sugar Buns,都具有极高的 ROI。

为了生成这些数据,我们进行了回归分析。让我们讨论一下这个回归问题的数据点是什么样子的。举个例子,我们用“Gummies”这个品牌,当时我们在交易上花了 100 美元,在搜索上花了 200 美元,在展示上花了 300 美元。这一天的销售额是 1200 美元。

预计销售额=巨美基线销售额+ 100 *贸易投资回报率+ 100 *巨美贸易投资回报率+ 200 *搜索投资回报率+ 200 *巨美搜索投资回报率+ 300 *展示投资回报率+ 300 *巨美展示投资回报率。

我们尽量让预估销售额接近真实销售额,1200。

我们的目标是学习

  • 全球贸易投资回报率,搜索投资回报率,并显示投资回报率
  • 橡皮糖特定的巨美基线销售、巨美交易投资回报率、巨美搜索投资回报率和巨美展示投资回报率

我们会允许全球参数和基线销售容易波动,但我们应该大力规范巨美的具体投资回报率,这样我们就不会了解不切实际的变化。

如果我们在此设置中过度调整我们的参数,我们会看到所有品牌共享相同的全局 ROI,如果我们在此设置中过度调整我们的参数,我们会看到品牌具有疯狂的 ROI,如+10 甚至负值。

最后,当我们实际训练这些模型时,我们将按如下所述进行训练和验证:

  • 首先,我们分离出 30%的数据作为验证数据。
  • 我们使用剩下的 70%的数据来训练许多模型。
  • 对于我们训练的每个模型,我们在验证数据上验证其准确性。为此,我们计算我们的预测和真实销售之间的平均误差。
  • 我们挑选具有最高验证准确性的模型作为最佳模型。它有特定的正规化乘数。
  • 使用来自我们最佳性能模型的参数,我们在完整数据集上训练最终模型。这些是我们用来为营销决策提供信息的参数。

我们(为将来的会谈)遗漏了什么

在这次会议中,我们遗漏了许多细节。

基线

我们没有讨论在学习 ROI 参数的同时构建智能基线估计。

这一点非常重要,因为我们可以把销售的季节性增长归因于我们在旺季花费更多的习惯。

我们需要学会表示每年和每周的季节性趋势,以及节假日和特定的年度事件,如感恩节、夏季、返校季和亚马逊优惠日。

产品级建模

如果可能的话,我们可以通过对产品级别的销售和支出进行建模来了解更多的价值。通过将产品级 ROI 建模为品牌级 ROI 的变体,我们可以了解产品级的洞察力,更重要的是,通过对粒度细节建模,我们可以了解更准确的品牌级洞察力。

这将是一个更细粒度的细分,类似于我们如何将全球趋势划分为品牌趋势,但现在将每个品牌划分为产品成分。

智能报告

我们可以智能地报告产品和品牌,可能如下:

首先,我们确定影响最大的品牌/支出组合,这些组合具有最高或最低的投资回报率,同时也有大量的支出。

然后,在我们想要增加或减少的品牌/广告类型中,我们可以确定最重要的产品来做出改变。

其他广告类型/渠道

我们展示了 3 个广告渠道的建模。当然,这些模型中的每一个都被模型不知道的其他广告渠道所混淆。通过添加更多的广告信息,该模型将得到改进,并且该模型还可以学习(在以后的帖子中进一步讨论)如何提出新的广告渠道。

时间相关性

我们可能有过去 5 年的数据。我们希望使用所有这些数据,但更关注最近的相关数据。

概述

在本次会议中,我们讨论了三个主题:

正规化

我们讨论了正则化来惩罚具有大值参数的复杂函数。这有助于我们学习简单的模型。

确认

我们讨论了培训与验证。验证有助于我们选择听哪个模型。

使用正则化进行营销归因

我们讨论了使用正则化来学习营销活动的 ROI 参数。

解读营销归因

我们在这节课中学到的主要东西是我们简单营销归因的数学方法背后的动机。通过理解动机,我们还学习了如何解释机器学习的输出以进行营销归因。

这个问题展开: 机器学习入门 3

对于完全理解这一条的有意跟进帖子:https://medium . com/@ leetandata/machine-learning-engineering-1-custom-loss-function-for-house-sales-estimating-95 eec6b 12457

对于苦于代码或理解的人可选后续: 本帖代码详细分析:https://medium . com/@ leetandata/machine-learning-python-programming-introduction-for-business-people-10588 e 13 ce 9d

关于 Python 编程的免费综合课程。确保注册,但选择免费的可选项目。所有课堂内容免费提供: https://www . coursera . org/learn/python-programming-introduction/

一个比这个更复杂的机器学习教程,但比下面这个(不是我写的)简单:https://www . ka ggle . com/rochelle Silva/simple-tutorial-for-初学者

软件工程师可选后续岗位: 重数学、重 CS 的详解(上):https://medium . com/@ leetandata/neural-network-introduction-for-Software-Engineers-1611d 382 C6 aa

重数学、重 CS 的详解(下):https://medium . com/@ leetandata/neural-network-for-software-engineers-2-mini-batch-training-and-validation-46ee 0a 1269 a 0

Cho 教授可选数学笔记: https://github . com/NYU-dl/Intro _ to _ ML _ Lecture _ Note/raw/master/Lecture _ Note . pdf

ML Intro 5:一个热编码、循环表示和规范化

原文:towardsdatascience.com/ml-intro-5-…

本帖跟随机器学习入门 4 。在之前的帖子中,我们描述了用于营销归因的机器学习。在本帖中,我们将阐明我们在该部分中忽略的一些细节。我们将检查一个关于营销属性的数据集,对我们的品牌进行一次性编码,操纵我们的一次性编码来学习定制的业务洞察力,标准化我们的功能,检查我们的模型输入,并详细解释我们的输出。

本次会议的代码将被张贴在这里,但是是杂乱无章的,因为这个职位不是以编码为重点

学习目标

这篇文章给出了一个真实世界的例子,说明如何表示数据来推动特定的见解,以及如何消除噪声来提高业务见解的准确性。

听完这个讲座后,你应该明白

  • 分类变量热编码之一
  • 时间变量的循环编码
  • 自定义可解释性的特征表示的自由(理解这种自由可以说是帮助商业用户与机器学习工程师合作的最重要的技能)
  • 数学稳定性的数据标准化
  • 如何解释特定操作的一些模型输出,以及检查您是否信任该模型的其他输出。

问题是

在本帖中,我们将再次查看各种模拟品牌的营销支出和销售数据集。我们的目标是优化我们公司的销售。在此之前,我们需要讨论要问什么问题,以及如何对我们的信息建模

数据

我们有每个品牌的销售和支出数据。

我们的核心数据表如下所示:

Data about spend and sales over time

这些数据总结了我们的历史销售和营销活动。

品牌建模

在这篇文章中,我们直接进入细节。参见机器学习介绍 4 获得更慢的解释。

让我们塑造品牌。在这个介绍系列中,品牌是我们的第一个非数字特征,所以我们不应该真正知道如何对它建模。我们怎么告诉模特第一排是品牌 Caffeinos,第二排是品牌糖包子?

介绍一种热门编码

为了对分类变量建模,我们使用一键编码。由于我们有 8 个品牌,我们创建了 8 个“虚拟”变量,它们被设置为 0 或 1。每个虚拟列被分配 8 个类别中的一个,并为该类别的行赋予值“1”,否则为“0”。

这可以通过转换来可视化:

Initial Representation

变成以下内容:

One-hot representation

这种类型的分类变量二进制表示法称为 one-hot,因为每一行都有一个值为 1 的要素,而其他要素的值为 0。当我说这是一种分类变量二进制表示时,它是分类的,因为我们正在编码的变量是分类的,并且每个特征都是二进制的,这意味着它们采用两个值中的一个,0 或 1。在其他上下文中,我们有其他方法来表示分类变量,比如向量表示,但是这种一键表示对我们的应用程序很有用。

包装品牌建模

现在我们有了一个热门的表现,我们可以学习对特定品牌的偏见。如果我们使用这些功能以及营销支出来预测销售,该模型可以学习每个品牌的线性回归系数(one hot 矩阵的列)。该系数将乘以品牌指标来预测销售额。因此,这些系数将了解每个品牌的偏差(由于特定品牌,您的销售预测应该高出多少)。

时间编码

问题是

让我们假设销售随着季节而变化,基线销售在返校季节最高。如果我们不对此进行建模,模型会认为我们在返校季开展的任何促销活动都是超级有效的,而其他季节则是无效的。

我们可以通过给模型一年中的某一天来告诉模型现在是一年中的什么时候。但是从这个角度来看,12 月 31 日和 1 月 1 日是对立的,尽管我们认为它们非常相似。我们希望附近的日期有相似的表示,即使是在端点。

循环时间建模

一种方法是通过循环表示。这是为了将一年中的每一天建模为它们在一个年轮上的点。

通过使用上述圆圈上的 X,Y 位置作为我们模型的输入,我们的模型可以了解一年中销售额高的时间和销售额低的相反时间,这样它就不会错误地将季节性销售趋势归因于促销。

Cyclical Representation For Seasonality

然后,我们可以使用三角学来检查这些特征的回归系数,以了解什么时候是旺季,季节性对销售的影响有多大。这对于检查模型是否像我们预测的那样合理地学习特别有价值。

目标表征操纵

现在我们有了一个热编码和其他特征,我们可以使用回归来学习品牌水平偏差,使用支出特征来学习支出 ROI,使用周期性时间特征来学习季节性。

但是,如果我们想要了解特定品牌的投资回报率和季节性,这是鼓励类似于全球趋势,但也允许根据需要对每个品牌有所不同?

对于每个特征,我们可以使用该特征作为其全局表示,然后我们可以通过将该特征乘以品牌一热变量来构建品牌变化特征。对于营销支出,这将是一个像“显示品牌口香糖的营销支出”的功能。当我们从该特征以及全球“展示营销支出”特征中学习回归系数时,我们正在学习“展示”营销的全球 ROI,以及来自全球 ROI 的巨美变化。作为一种正规化的形式,我们使特定品牌的变化接近于 0。

现在,我们扩展的数据集看起来像这样:

我们有显示、广播和搜索支出等聚合功能,我们有品牌虚拟功能,我们也有组合术语,如“moon drops”的电视广告。请注意,对于除活动品牌之外的所有品牌,所有特定于品牌的功能在一行中均为 0。

目标陈述总结

想想我们上面做的有多酷!我们现在迫使我们的模型学习全局参数,这迫使不同品牌级别的表示相似,同时允许每个品牌在某种程度上学习他们自己的 ROI 参数。我们可以把同样的推理进行得更深入。

暂停,思考,并陶醉于我们的赋权。

请停下来,花些时间想想你希望模型告诉你什么。请随意阅读以下内容,寻找灵感。

也许你想了解产品的具体参数。你只需要把你的特征和产品的一个重要变量相乘,就可以强迫产品的表现和品牌相似。

也许你不想知道某类支出的投资回报率,而是想知道特定支出地区的投资回报率。如果你假设每个产品的“搜索”花费都应该有一个投资回报率,直到某个日常花费,然后在那个点之后显著降低投资回报率会怎么样?你可以让模型告诉你到某个点的投资回报率,告诉你投资回报率下降的截止点,然后学习该点之后的投资回报率。如果我们认为这就是世界的运行方式,并希望了解不同区域 ROI 的数学细节,以及模型切换的位置,我们可以通过组合二元指标变量和适当的支出特征来构建这些特征(尽管这一具体建议还涉及学习分界点,这需要进行额外的讨论才能实现)。

那不觉得授权了吗?

如果我们想知道产品价格是如何影响销售的,但是我们认为下面这个“一旦价格变得太低,人们会认为它非常便宜,再降低也没有任何帮助。超过这一点,价格波动会显著影响销售,直到销售过高,这时用户会认为太贵,价格效应就会饱和”。我们想知道这些不同行为的分界点是什么,以及不同地区的价格波动有多大影响。

如果我们可以基于这些类型的见解采取业务行动,那么我们肯定可以花费精力对它们进行建模,因为它只是结合了线性和二进制特征!

我们说过,在这篇文章的结尾,你应该理解自定义可解释性的特征表示的自由。这是设计我们模型的功能的力量,因为我们已经以我们期望的有商业意义的方式解释了结果。请尝试理解我们描述的定制,并思考如果模型告诉您一些事情,您将能够采取行动的其他见解,并思考模型将如何向您传递这些见解。

正常化

我们已经准备好了所有的数据,现在我们几乎可以训练一个模型了。然而,一个问题是,数学家们并没有像我让你们相信的那样设计出数学最优化。

假设我们为模型提供数据,其中一个输入值在 0-1 之间变化,另一个输入值在 1,000 到 10,000 之间变化。模型需要为每个要素学习一个乘数,乘数是正则化的,因此不允许它们非常大。模型使用小乘数来听大特征,而完全忽略小特征要容易得多。但是也许这个小特性有意义,我们怎么能允许模型包含它呢?

高斯归一化

为了帮助我们的数学算法工作,我们只是执行一个非常简单的技巧,它足够重要和简单,你们都应该理解它。

我们获取每个特征,并计算平均值和标准差(该特征变化了多少)。在训练之前,我们取每个数据点,减去平均值,然后除以训练之前的标准偏差。这迫使我们的模型的均值为 0,标准差为 1,这非常便于数学家构建算法,因为它具有高斯分布的均值和标准差。

我们也对我们的目标(Y)变量执行同样的转换,因为我们的输出常常难以处理大的或小的目标变量。

反规格化

当模型给我们洞察力时,我们需要记住逆转这种正常化。

假设 X 的标准差是 3,Y 的标准差是 7。我们将它们归一化为偏差为 1,然后学习回归系数为. 6。我们真正的投资回报率是多少?

在标准化空间中,我们的投资回报率为 0.6。但是,如果我们的标准化 X 增加了 1,我们的真实 X 增加了 3,所以要产生这种影响,我们需要花费 3 倍的时间。所以投资回报率应该是 0.6/3 = 0.2

但是. 2 是归一化 Y 的 ROI,实际上,归一化 Y 增加 1,真实 Y 增加 7。所以我们的投资回报率真的是. 2 * 7 = 1.4。

所以为了反规格化,我们只需要计算

real_ROI =归一化 _ROI * std(Y) / std(X)

总结特性和可解释性

总结一下,我们的特性和以前一样,除了标准化:

然后,我们可以运行回归,就像我们在之前的课程中了解到的那样。每个特征都有特定的解释。对于支出列,学习系数是累计的平均 ROI。对于品牌栏,这些是每个品牌销售的偏差。对于周期日期列,这些系数应该通过三角函数来告诉我们模型认为该品牌何时销售最好或最差。

应将品牌/特征组合特征添加到共享特征中,以从全球统计数据中了解特定于品牌的变化。

查看我们的模型输出,我们看到:

这为我们提供了消费类型的投资回报率,并建议每个品牌的高峰月份是什么时候。我们可能知道品牌的旺季是什么时候,并使用这些建议来检查我们是否相信这个模型。

没有业务可操作的季节性洞察,因为我们只模拟了季节性销售,而不是季节性支出的投资回报率(在本文中,我们当然可以模拟季节性支出的投资回报率)。

从上面看,我们可能只是想在一些品牌内转移资金。看看月落广告,由于相应的投资回报率(0.76 比 2.5),我们可能希望在展示广告上花更少的钱,在电视广告上花更多的钱

然而,在我们采取行动之前,我们检查了实际曲线,看看我们是否认为该品牌的销售似乎更受电视支出的影响,以确保我们作为人类信任这些疯狂的 ML 系统建议,我们看到了如下图像:

当然,我们看到销售额可能会因为电视消费的小幅增长而大幅上升,所以也许我们应该尝试一下。实际上,我们将对单个产品参数进行建模,我们将看到一个品牌中每个最有影响力的产品的曲线,如上图所示,以了解为什么模型会提出建议。

概述

在本次会议中,我们讨论了三个主题:

独热向量表示法

我们可以用一键向量来表示分类变量。

循环表示

我们可以使用循环表示来捕捉时间周期,如每年或每天的模式。

组合独热矢量和特征

我们可以结合热点向量、特征和其他概念来设计定制模型,以使我们的机器学习系统更加准确,同时还提供定制的可解释性。

这个问题展开: 机器学习入门 4

对于完全理解这一条的有意跟进帖子:https://medium . com/@ leetandata/machine-learning-engineering-1-custom-loss-function-for-house-sales-estimating-95 eec6b 12457

对于苦于代码或理解的人可选后续: 本帖代码详细分析:https://medium . com/@ leetandata/machine-learning-python-programming-introduction-for-business-people-10588 e 13 ce 9d

关于 Python 编程的免费综合课程。确保注册,但选择免费的可选项目。所有课堂内容免费提供: https://www . coursera . org/learn/python-programming-introduction/

一个比这个更复杂的机器学习教程,但比下面这个(不是我写的)简单:https://www . ka ggle . com/rochelle Silva/simple-tutorial-for-初学者

软件工程师可选后续岗位: 重数学、重 CS 的详解(上):https://medium . com/@ leetandata/neural-network-introduction-for-Software-Engineers-1611d 382 C6 aa

重数学、重 CS 的详解(下):https://medium . com/@ leetandata/neural-network-for-software-engineers-2-mini-batch-training-and-validation-46ee 0a 1269 a 0

Cho 教授可选数学笔记: https://github . com/NYU-dl/Intro _ to _ ML _ Lecture _ Note/raw/master/Lecture _ Note . pdf

ML 简介 6:不可微函数的强化学习

原文:towardsdatascience.com/ml-intro-6-…

这篇文章将在系列的之后发表,但是代表了一个重要的转折点。我们现在已经解决了教授监督学习基础知识的问题,并且正在扩展以处理不可微的问题(激发深度强化学习)。

转变的原因有三:

  1. 我们已经总结了前一部分的所有重要细节;如何设计定制的神经网络来使用网络架构、定制的损失函数和学习潜在的共享表示来解决特定的问题。
  2. 我们已经非常关注营销归因的问题,但是营销的概念会强烈地激发行动的需要,这需要强化学习(RL)来建模。
  3. 我正在 NYU 大学给达维·盖格教授的课程视觉遇见机器学习做讲座(也是我将为百事公司内部做的标准企业讲座),因为我以前教过 RL。这将为在课程项目中使用 RL 提供工具。

我应该指出,现在你已经有了 ML 的基本工具,RL 只是继续学习的许多途径之一。学习机器学习的未来步骤可能是学习现有工具集的复杂的实际应用更深入地理解 ML 的编码/数学,或者通过斯坦福大学在线发布的一些免费讲座/家庭作业学习参数共享(CS231N 用于图像处理,CS224N 用于语言建模)。

强化学习(RL)学习目标

这篇文章介绍了术语、问题类型和可用于解决不可微 ML 问题的 RL 工具。

听完这个讲座后,你应该明白:

  • 术语:环境、状态、主体、行动、模仿学习、匕首、价值函数、政策和奖励
  • ML 在存在不可区分的报酬、学习行动和模拟非确定性环境时的问题。
  • 如何利用专家帮助通过匕首学习?
  • 用政策梯度对不可微报酬建模。
  • 用值函数估计状态值。
  • 通过概率抽样、政策梯度和延迟回报模型学习行动。
  • q-学习同时对状态和价值建模(以及在连续行动空间中这样做的行动者-批评家算法,如营销行动问题)
  • 通过对观测值进行调节来模拟非完全观测的环境。

监督学习不足 0: ML 无数据

对于监督的机器学习,我们需要一个数据集来建模。所以这在一些没有数据的环境中是站不住脚的。

模仿学习:抄袭专家

在学习行动的领域(例如,机器人、游戏或其他交互式决策),我们可以通过模仿专家来学习。如果我们有传感器可以捕捉输入和相应的人类/专家动作,我们可以收集一个数据集,并应用监督学习方法来复制专家的动作。

模仿学习只是模仿专家动作的监督学习。你观察一个代理人在不同的州是如何行动的,然后训练一个模型来复制它。监督学习。

DAgger:交替生成和使用数据

假设我们有一个算法,让人类在模拟环境中行走。我们可以从控制我们行走代理的专家那里训练这个算法,然后训练一个模型来复制专家。但专家永远会走得很完美,我们永远看不到如何改正错误。所以当我们运行我们训练过的模型时,它正确地向前运行,然后一旦偏离正常轨道它不知道该怎么办,所以它很快就崩溃了。

太可怕了!人类/专家知道如何纠正错误。所以我们所做的是让我们的模型控制模拟,并在每一步要求人类采取正确的行动。我们通过训练我们的模型复制新收集的数据来重复,然后向专家寻求更多建议。

那就是 DAgger,只是让你的模型决定如何行动,并从它探索的所有情况中问一个专家如何行动。训练您的模型复制专家的决策,然后使用您更智能的模型运行模拟。

监督学习不足 1:不可区分的奖励

监督学习的工作方式如下:

  1. 预测产量
  2. 计算输出的损失/误差
  3. 更新你的预测系统

如果算法是看到一个物体,然后猜这个物体是什么。例如,你可以看到一个水果,你的输出可能是单词“苹果”。

‘What Fruit is This?’ ‘Apple.’ ‘Wrong!’

如果你猜对了,就给你一个 cookie(或者给定的算法+1)。如果你猜错了,你会被扣分(或者算法给 0 或-1)。

我们未能将此框架为监督学习问题,因为当我们出错时,我们不知道正确的值是什么。我们所能做的就是“当我们把事情做对的时候,多做这类事情”,以及“当我们把事情搞砸的时候,少做这类事情”。

例如,在上面的图片中,假设我们的模型预测了“苹果”,并被惩罚告诉它这是错误的。在监督学习中,我们应该告诉它“在这种情况下,你应该预测到‘西瓜’”,但在这种环境下,我们没有这种监督。我们如何训练模型做得更好?

引入政策梯度

策略梯度让我们在没有可微分损失函数的情况下分配梯度。例如,当我们预测西瓜的标签时,我们实际上预测了可能的单词/标签的概率分布。我们随机抽取了“苹果”这个词,这是错误的。

对于策略梯度,我们为预测“苹果”分配一个负梯度,这使得所有其他预测更有可能。然后,我们执行正常的反向传播,并根据这一损失更新我们的参数。相反,如果我们对“西瓜”取样,并得到正确的预测,我们会给我们的预测分配一个正梯度。

我们可以使用策略梯度来教一个模型去尝试一些事情(随机抽样),并且学会做更多正确的事情,更少的错误。

这是简单的不可微分奖励政策梯度的概念。我们还引入了奖励的概念,即我们从猜测中得到的饼干(+1)或惩罚(-1)。

预算/营销分配的确定性政策梯度(即持续行动的政策梯度)

如果您不想预测一个 Softmax 和样本来执行操作,该怎么办?如果你只想要一个确定性的单个数作为决策呢?政策梯度不能真正做到这一点,因为你不知道在这种情况下,为了获得更好的回报,应该朝哪个方向努力。

我们来提出一个简化的预算分配问题。作为一个州,你有一年中的时间。作为一项行动,你选择了一笔预算支出,作为奖励,你得到了利润(收入减去预算支出)。

对于我们的行动空间,我们不能像在正常政策梯度中那样枚举行动并预测每个行动的 Softmax 概率,但我们可以估计高斯样本的参数。通过这种方式,我们可以预测连续值,因为我们可以从高斯样本中对连续值进行采样,而不需要对每个值进行唯一的概率估计。我们可以学习优化我们的分销以获得更大的利润。这包括首先学习一个估计动作值的函数 f(state,action ),然后我们对该函数进行微分以优化我们的动作生成器。

特别是预算/营销分配的问题是一个持续行动的问题,在我们介绍 Q-Learning 之后,我们将用一个更一般的行动者/批评家算法对此进行进一步的扩展。

监督学习不足 2:行动顺序

现在,我们将通过概率抽样、政策梯度和延迟奖励模型来探索学习行动的概念。

我们来想想象棋和 ML 的博弈。游戏通过开始位置、交替动作和棋盘更新进行,直到僵持或胜利。国际象棋是一种完全可观察的游戏,游戏的所有相关信息都显示在当前的棋盘状态上。

游戏结束时,玩家要么赢(+1),要么输(-1),要么平手(0)。

在 ML 中,我们希望学习最佳的行动策略,以确保无论对手如何打法,我们都能赢得比赛。我们称这种学习为行动的策略,而不是学习一种特定的行动,因为我们不想学习在国际象棋中获胜的最佳行动。例如,要采取的最佳行动取决于当前的棋盘状态,在任何情况下都不存在全局最佳行动。

这就是为什么我们学习策略,这是 RL 中的一个核心概念。策略是根据当前状态选择动作的功能。你可以想象,最好的策略总是在下棋时获胜,因为他们在任何情况下都玩得很完美。在 RL 中,我们经常学习最优策略,这与监督学习不同,在监督学习中,我们试图建立一个观察分布的统计模型。

具体来说,我们将如何编码策略?幸运的是,国际象棋是一个有组织的网格,所以我们可以接受棋盘上的每个位置作为模型的输入,用一个独热向量值表示每个单元格中的棋子(如果有的话)。我们将计算移动哪个棋子的软最大概率,并计算它应该在棋盘上移动的位置的软最大概率,并过滤以仅允许它选择允许的棋子/移动。

但是应该如何训练这个策略呢?在每个序列中我们采取了很多行动,我们的对手也采取了很多行动,然后游戏以+1,-1,或者 0 结束。

让我们具体点。我们的政策是一个函数 f(董事会状态)=行动的概率。然后,如果序列以赢结束,我们可以用正梯度奖励我们的每个行为,如果序列以输结束,我们可以惩罚我们的行为。

折扣延迟奖励

然而,给我们所有的行为分配一个全局的+1 或-1 应该感觉很奇怪。由于动作序列的空间是巨大的,你得到的奖励会很嘈杂,用这样稀疏的奖励训练一般来说是很辛苦的。所以,我们想让奖励更有意义。最直接的方法是避免迅速导致失败的行为(例如,避免接近将死的局面),奖励迅速导致胜利的行为。

我们提出,分配给一个行为的奖励的积极或消极的数量应该随时间呈指数衰减。所以奖励前的最后一个动作应该得到奖励。而在给予奖励前 n 步的行动应该得到较少的奖励,ɣ^n 那里每前一步只得到(0

替代方法:价值函数

我们上面讨论的叫做策略函数优化。我们有一个接收状态并产生动作的函数,我们优化这个函数。

另一种方法是预测每个状态的值,要么通过该状态是否会导致奖励,要么通过它是否会导致良好的未来状态。这个系统特别适合当我们知道一个系统的全部动态时,我们可以从任何状态备份找到精确的最优解。

这是由贝尔曼后备方程式定义的,我们不需要为了这篇文章的目的完全理解它。该等式规定每个状态的值应计算如下:

  1. 迭代每个状态的每个可用动作。
  2. 每个行动的价值是产生的回报加上先前对后续状态的估计值之和。

为了使用这个系统采取行动,我们查看所有我们可能转换到的未来状态,并选择产生最佳未来状态的行动。

考虑行动的价值函数:Q 学习

我们可以结合两个世界的优点,而不是政策函数或价值函数。

Q 函数是评估状态-动作对的函数。Q 函数学习状态-动作对的值,并估计它是报酬加上对未来状态值的估计。在这种情况下,未来状态的值的估计是通过取从该状态可以采取的所有动作的最大值来估计的。

Q-Learning Update Formula

阿尔法可以被视为一个学习率,其余如下。假设 Q 有一个赋值函数 F(s,a) =状态/动作对的值。然后,我们可以根据值的概率软最大值对动作进行采样。

然后我们优化我们的 Q 函数,使其更接近上面的函数值。

深度 Q 学习

深度 Q 学习允许我们将 Q 学习与通用函数逼近器相结合。我们不是更新每个动作的 Q(s,a)值,而是优化神经网络 Q(s,a ),该神经网络使每个状态动作对的值接近所产生的奖励加上未来状态的冻结估计值(以最佳未来动作为条件)。

可惜上面的算法没有一招会不稳定。我们正在优化一个网络,使之等于一个奖励加上它本身。我们可以很容易地优化这两个网络,使它们彼此相等,由奖励抵消,但这似乎产生不太稳定的结果。

取而代之的是,我们冻结我们用来近似我们的回报的内部 Q 函数,并训练外部 Q 函数来近似它。

然后,我们可以定期冻结我们的更新 Q 函数,并将其代入内部 Q 网络,从而允许深度 Q 学习更可靠地训练。

检查点:复制和可计数操作

到目前为止,在 RL 中,我们已经介绍了将衍生工具应用于不可微损失的政策梯度,以及将延迟回报贴现以将损失应用于之前的行动。

我们可以模仿专家,就我们陷入的糟糕情况向专家寻求建议。我们已经讨论了政策(决策过程)、奖励(获胜的 cookies)、价值函数(使国家的价值函数化)和行动(决策)。

我们扩展了价值函数和策略梯度,以建立状态、动作对的 Q 函数。

这些是 RL 的核心构件。剩下的就需要我们理解上面的内容了。

我们如何为不同的 RL 问题建立数据集和训练?

在监督学习中,我们有一个数据集,我们学会了对数据生成分布进行建模。

数据集:模仿学习/匕首

在匕首,我们正在学习复制一个专家。因此,我们收集专家如何决策的数据集。数据集由观察到的状态和专家的行动组成。

数据集:Q 学习

在 Q-Learning 中,我们基于以下奖励和新状态对状态动作对的值进行建模。所以在 Q 学习中,我们的数据集跟踪每个数据点的细节。我们有状态、行动、奖励、在数据收集期间收集的跟随状态组,因为那是我们需要用来训练的。

数据集:策略梯度

在上述强化学习场景中,我们有策略梯度,它可以应用于任何随机监督学习数据集或其他学习问题。

在可行的情况下,我们更喜欢使用我们的监督学习工具,而不是策略梯度,并且我们只在监督学习无法对我们的数据建模时使用策略梯度。我们还可以使用策略梯度来增强监督学习系统,作为辅助奖励。

没有额外数据:我们如何使用策略梯度来增强监督学习系统

想象一下学习生成句子。也许我们有一个监督学习系统,它可以像数据集一样学习生成句子,但起初它会不断生成常见的停用词,如“it it it it it it it it”或“the the the the”。我不会详细解释为什么会经常发生这种情况,但是通过政策梯度,我们可以解决这个问题。我们可以基于真实数据进行训练以建立数据集模型,我们也可以生成完整的句子,并使用策略梯度来惩罚我们自己的重复。例如,如果一个句子在推理过程中重复使用同一个单词(当模型试图自己造句时),我们可以很容易地使用策略梯度来惩罚生成的句子中过度使用的单词的生成。

然后,我们用 actor-critic 算法推广了连续或高维动作空间的 Q 学习。

像预算/营销分配这样的持续行动的学习:行动者-批评家学习

让我们更深入地看看预算分配问题。我们希望在广告上投资,以使我们公司的利润最大化,但现在我们有多种产品销售,多种投资方式,我们希望使全球收入最大化。

  • 状态是每种产品的一年中的某一天、最近的销售和最近的花费。
  • 该活动是每个预算的连续值。
  • 回报是利润的总和。

通过这种方式,我们希望对营销支出如何在不同的状态下产生不同的影响进行建模。

我们知道我们想要更大的回报,但是没有导数告诉我们如何改变我们的行为,所以我们仍然需要用一个批判函数来近似回报曲线。

让我们重申一下 Q 学习更新公式:

Q-Learning Update Formula

上面的 Q 学习算法非常有效,在适当的时候,它是最先进的算法。但是在每一个更新步骤中,它迭代未来状态的所有可能的动作,这在计算上可能是昂贵的。在预测在各种营销活动中投资多少钱的连续值时,从未来状态可以采取无限多的行动,因此我们如何列举所有可能的行动呢?

所以我们想用 Q-learning 的概念,但是不想枚举所有可能的动作。

在不迭代所有可能动作的情况下近似 Q 学习是 actor critic 算法的动机。

Actor Critic Algorithm Visualization

演员评论家算法允许一个函数根据当前状态、未来状态和未来折扣奖励来估计一个连续的动作。该算法通过训练一个单独的 critic 函数来实现这一点,该函数被训练来估计奖励加上贴现的未来奖励(Q 值)。然后我们训练演员最大化评论家的期望值。

监督学习不足 3:部分观察,嘈杂的环境

我们之前提供的工具在部分可观察的环境中仍然会失效。让我们通过假装我们是 FinTech 的黑客来激发这个算法。

假设我们在股票市场上交易股票,我们入侵了一个金融科技数据源以获得关于股票的高频信息,但你的免费交流源并不完美,你错过了所有信息的百分之几(30%),我们获得的信息有一些随机噪声。

在每一个时间点,你可能想根据现有的数据学习交易。你假设你的交易正在影响市场,而且你还模拟了一些一般特征,比如一些股票一起上下波动。

这与 SL 有另一个不同之处,因为我们不能预测市场的运动,我们要选择如何行动。例如,如果我们想成为做市商并避免交易费用,进入和退出市场并不总是成功的。因此,我们需要学会明智地采取行动,这不同于仅仅根据我们预测的市场走势进行交易。

基于模型的 RL 帮助我们在这种环境中行动。我们先建立一个环境的模型,而不是从我们收到的嘈杂数据中进行交易。我们的模型学习什么是最有可能引起我们观察的真实数据,以先前的观察和我们的行动为条件。

观察、状态和环境

在基于模型的 RL 中,我们可以完全定义观察、环境和状态,我们在整个课程中反复使用过。

Forward Propagation Environment Dynamics

观察是我们所感知的。它们可能不准确,但它是我们得到的关于我们环境的任何信息。在股票的例子中,观察值将是我们接入的噪声信号。

状态不同于观察。状态是我们建模的东西,它(希望)给我们做决定所需的所有重要信息。一个简单、全面的状态可以是整个轨迹中所有观察和动作的序列。这种状态是全面的,但是昂贵的。另一个简单的状态是当前观察值,它计算量小,但可能不包括所有相关信息。

Backward looking Environment Dynamics

环境不是观察结果,而是世界上与我们的问题相关的所有事情的综合细节。我们的环境目前可能有一个特定的表示,但我们通常永远不会知道真实的环境状态。通常,有一些控制系统动态的隐藏因素,这些因素控制着系统在旧状态的基础上改变到新状态的可能性(例如,速度继续移动,状态因速度而改变)。我们还可以尝试模拟不同环境状态产生特定观察结果的可能性,或者换句话说,“当环境处于这种状态时,我们将看到什么类型的观察结果”。

包装噪音库存示例:基于模型的 RL:

对于有噪声的股票示例,我们建议基于基于模型的 RL 进行决策。这将涉及建立一个模型,以确定每个环境状态产生不同观察结果的可能性。我们还需要一个模型,来说明我们期望真实的环境在当前状态和我们行动的条件下如何发展。最后,有了定义的模型,我们需要一个模型来接受估计的状态,并选择要采取的行动。这些模型可以是神经网络、高斯模型或我们环境的任何其他概率模型,并且可以是硬编码的或学习的。

基于模型的 RL 如何应用于 Vision Meets ML 项目(使用姿势估计视频进行动作估计)

这个课程项目是关于根据提取的姿势运动来估计视频的内容。我们将此建模为一个代理试图采取什么行动来生成观察结果。把这看作一个 RL 问题,我们有几个选择。

选项 0:

有这样一个环境,它具有规则 P(S+1/S,A ),用于以代理正在采取的动作为条件的状态转移概率。

s 是高维对象,或者可选地,我们可以在三维空间中直接将具有 25 个关节的代理建模为(关节数* (xyz)) = 25*3 =人的 75 维状态,加上额外的 150 来表示当前的速度和加速度。

所以我们模型 P(St+1/St,A)的速度和位置正好等于之前的状态+导数。对于加速度,我们将转移概率作为神经网络(或线性矩阵)(225+1 个输入,75 个输出)来学习,并最小化数据的对数概率,以便尝试我们的连续动作生成功能。我们还可以学习一个残差函数来预测我们的位置和速度的偏差,作为对预测值的调整

我们假设我们的视频/观察是从一些噪声加上我们的状态中采样的,并且我们试图最小化那个(高斯)噪声。

我们还将应用一个损失,该损失着眼于单个动作(环境空间中的预测加速度),以及这些动作作为一个序列发生的状态,并预测损失。它越早预测出正确的损失越好。每个状态预测一个损失,并从正确预测序列的末端获得指数衰减的奖励。

这是专门设计来表示最受物理激励的/简单的方法,用于学习具有 RL 的通用函数逼近器,以解决根据视频的姿态估计来估计动作的问题。

使用这种或类似的方法,我们可以使用 RL 来基于视频中的姿态生成实时动作估计。

总结我们所学的内容,并补充阅读:

在整个会议期间,我们

  • 开始用模仿学习匕首来模仿专家
  • 扩展到策略梯度以学习从离散选项中选择动作,并显示连续动作的变体
  • 讨论了评估状态而非动作的值函数
  • 将我们的策略和价值函数组合成状态和动作的 Q 函数
  • 将 Q 函数推广到连续状态空间的 Actor-Critic 算法中,这样我们就可以在不枚举所有可能行为的情况下获得对未来回报的估计。注意到这恰当地模拟了预算分配问题
  • 讨论了基于模型的 RL ,其中我们构建了一个部分模糊或嘈杂环境的预期模型。我们注意到这种算法的两个版本,它们是视觉与人工智能课程项目的合适模型
  • 讨论了数据收集,并注意到一些 RL 风格如何明确地需要数据收集(如 DAgger),而其他风格(如 policy gradients)可以在现有的监督学习数据集上使用。

我们遗漏了几个核心主题,如果您有兴趣,可以跟进:

  • 有时,我们想故意采取不同于最优的行动,以探索我们可能错误地低估了的新行动。这叫做 勘探/开采权衡
  • 在 RL 有很多新的研究。加州大学伯克利分校慷慨地在网上上传他们的课程视频和家庭作业,最近的是 2017 年的版本,因为他们跳过了 2018 年的版本,这些都可以在T5【这里】T6找到

同系列推荐随访:

https://medium . com/@ leetandata/ml-intro-7-local-connections-and-spatial-parameter-sharing-abstract-convolatile-layers-b 419 e 629 d2d 0

软件工程师可选后续岗位: 重数学、重 CS 的详解(上):https://medium . com/@ leetandata/neural-network-introduction-for-Software-Engineers-1611d 382 C6 aa

重数学、重 CS 的详解(下):https://medium . com/@ leetandata/neural-network-for-software-engineers-2-mini-batch-training-and-validation-46ee 0a 1269 a 0

Cho 教授可选数学笔记: https://github . com/NYU-dl/Intro _ to _ ML _ Lecture _ Note/raw/master/Lecture _ Note . pdf

[ML]网络培训—了解一些细节

原文:towardsdatascience.com/ml-network-…

TL;博士

人工神经网络训练包括一个迭代的正向(推理)和反向(反向传播)过程,目的是调整网络参数,以减少隐含(即采样+噪声)定义的目标函数的相似距离

长版

让我们考虑一个人工神经网络学习传递函数

ANN Transfer Function. X is the Data Space and \Omega the Parameters Space

在监督学习中,训练 ANN 的目的是使网络传递函数逼近目标传递函数,该目标传递函数不是以显式封闭形式而是以隐式采样形式提供,作为一组训练数据点。

此外,不幸的是,样本不仅考虑目标传递函数,还考虑一些附加噪声。我们想让人工神经网络学习尽可能少的噪音,以达到更好的泛化性能

Line1 : Target Function. Line2 : Noise. Line3: Dataset as a collection of Target Function samples with some added Noise

这种目标函数表示提出了两个主要问题

  • 离散与连续信息:人工神经网络传递函数是连续且可微分的(要求能够使用基于梯度的方法),而目标函数表示是离散的,因此人工神经网络本质上应该学会在数据点之间正确插值
  • 噪声:ANN 对噪声了解得越多,它就越不能正确地进行归纳

ANN 训练通常意味着解决网络参数状态空间中的最小化问题,该最小化问题涉及与一些网络参数化相关的 ANN 传递函数和目标之间的相似性度量,因此是我们的噪声目标函数采样。

让我们将这种相似性度量视为关于训练数据点子集定义的目标函数,我们称之为批次作为单个贡献的总和

The Similarity Measure or Error Function is defined with repsect to a Batch of Points as Sum of each single Data-Point Contribution

培训通常包括两种类型的网络信息传播:

  • 前向信息传播,旨在从一些输入(即训练数据)开始执行推理
  • 反向信息传播,旨在根据误差(定义为推断数据与训练数据差异的函数)进行参数拟合

前向信息传播发生在数据空间,而参数空间是固定的

Training Forward Step aimed at computing a specific Data-Point contribution

反向信息传播,称为反向传播,发生在参数空间,而数据空间是固定的

Backpropagation of the Information using Gradient computed on a Batch

训练是一个两级迭代过程:一次迭代包括一个从批量数据到错误的前进步骤和一个从错误到参数更新的后退步骤

  • 第一组迭代旨在覆盖所有训练数据,一批接一批,从而完成一个时期
  • 第二组迭代逐个历元周期地考虑一个历元

当批量大小等于训练集大小时,则使用标准梯度下降方法,并且计算的梯度是真实梯度:相对于所有可用信息计算的梯度。在这种情况下,1 次迭代= 1 个时期。

该算法允许最佳的收敛,但是从内存和计算的角度来看,它都非常昂贵,因为在执行参数更新之前使用了所有可用的信息**,因此有可能提高性能。**

培训成本随着用于执行更新步骤的信息量的增加而增加。

然后,策略可以是使用减少的信息集来执行更新步骤,从而减少批量大小,并因此计算真实梯度的近似值。

近似梯度相对于真实梯度的差异在于,噪声/信号比将随着平均效应的降低而增加。此外,使用这种方法,完成一个时期的迭代次数将增加,但是从计算和存储的角度来看,它们将变得更便宜。

ML 注释:为什么是最小二乘误差?

原文:towardsdatascience.com/ml-notes-wh…

免责声明:

这篇博文属于我的“ML 笔记”类别。它的目标是帮助我确保理解 ML 中使用的工具和理论。我相信,从教育学的角度解释我所学的东西,一步一步地消除任何未知,是实现这一目标的最佳方式。

你需要什么?微积分,代数,概率,机器学习(主要是定义)的一点点数学背景。

如果你发现任何错误,请联系。如果错误的信念留在我的脑海里,我会很难过,因为发现它们时已经太晚了,谢谢!

使对数似然显式化

在我的上一篇笔记中,我已经写了许多实践和理论上的原因来解释为什么对数似然法经常被用在 ML 算法中。但是我没有达到一个可以实现的显式表达式。

让我们通过探索这种对数似然思想如何在两个主要的 ML 概念下产生我们所说的最小平方误差(LSE)来进一步挖掘:监督学习(SL)和加性高斯白噪声模型(AWGN)。

我将只从概率的角度探讨 LSE(我不会探讨 LSE 如何从微积分或线性代数中产生/证明)。在文章的最后(备注 5),你会发现一个链接,它的表亲(均方差或 MSE)的许多有趣的属性。

监督学习

在我的上一篇笔记中,我们最终展示了“在给定数据集的情况下最大化模型参数的可能性”等同于“最大化数据记录概率的总和”(考虑到 I.I.D .假设,请参阅上一篇笔记了解更多信息):

Maximum likelihood with log-probabilities in the general case

现在,我想把重点放在我们所谓的监督学习上,其中:

  • 数据“d”是由输入对象“x”和所需输出值“y”组成的一对“{x,y}”
  • 输出“y”取决于“x”
  • 目标是建立一个模型,在给定“x”的情况下预测“y”

让我们将此设置应用于数据的概率:

The probability of a datum in supervised learning

  • (2)来自监督学习中数据的定义
  • (3)是关于条件概率的联合概率的定义
  • (4)源于输入的内在概率不依赖于模型或其参数的事实。

由于“x”的概率不依赖于“θ”,我们可以在(1)中应用(4)并获得:

Maximum likelihood with log-probabilities in supervised learning

因此,为了最大化监督学习中参数的似然性,我们可以关注在给定相应输入的情况下最大化输出对数概率的总和。这很好,因为从程序上来说,这符合函数的定义。

注意:为了完成优化过程,从理论的角度来看,联合概率符号是非常好的,那么为什么要关注条件符号呢?

这也是由于工程上的限制。为了计算联合,您需要构建一个函数,将“x”和“y”作为输入,输出一个概率:联合概率。为了计算整个联合分布,你必须对给定的“x”的所有“y”进行批处理。现在,如果你想做小批量,你必须批处理这些批次的倍数…这导致了大量所需的 GPU 功率。

实现相同结果的优化方法是直接使用我们的模型来近似条件分布:我们可以构建一个只接受一个输入“x”并立即直接计算所有“y”的函数。我们的模型正在逼近条件概率本身的分布。这大大减少了所需操作的数量,从而提高了我们算法的速度🔥

回到现实生活!我们知道我们可以在 TF 中建立一个参数化的函数来表示我们的模型族。它应该把我们的“x”作为输入,输出一些值,这些值可以解释为给定“x”的“y”的条件分布。我们现在有了模型,我们需要的最后一件事是优化(训练)函数参数的方法,这样我们的函数就可以逼近由数据集中的标签定义的分类分布。

所以,我们需要一个目标。这个目标可以是比较 1-hot 向量标签(分类分布)和我们的函数的输出,以减少它们之间对于每个数据的任何差异。但是如何证明任何比较呢?如何比较这些价值才是有效的、稳健的和实际上有助于概括的?应该用绝对差吗?平方误差?其他一些外来的规范?

有无数种可能的方法可以做到这一点,设计目标函数仍然是一个正在进行的活跃的研究领域。那么,我们如何从概率的角度证明 LSE 的使用呢?

加性高斯白噪声模型(【AWGN】

数据集只不过是来自随机过程的大量样本。无论我们的数据集中反映的随机性的原因是什么(要么来自丢失的信息,要么来自测量误差),我们都可以用噪声对其建模。

假设我们的数据集是一致的(参见备注 1),在问题中引入噪声有两种常见方式:

  • 噪声可以独立于我们的数据,我们称之为噪声添加剂。这通常是由于贴标签时的人为错误和/或传感器不准确造成的。
  • 噪声可能依赖于我们的数据,我们称之为乘法噪声。乘性噪声可以模拟丢失的信息,如丢失的感兴趣的输入特征,以预测输出。

那么,我们应该添加什么噪声呢?我们将采用最简单的可能噪声模型(这一选择是由奥卡姆剃刀发起的):加性高斯白噪声模型,它表示:

  • 存在一个将输入与输出相关联的函数,但我们测得的输出会受到加性噪声的影响。

The additive white Gaussian noise model

  • 所有的噪声都是由白高斯分布产生的:平均值是0并且噪声是同分布的
  • 所有噪声随机变量相互独立,并且独立于我们的数据集的数据

White Gaussian distribution

请记住,我们希望在上面的等式中模拟函数“h”。我们将假设我们选择的模型类(所有可以用我们的模型近似的函数)可以近似,以及我们想要的,这个函数“h”。

Approximation of the underlying mutual information relationship

给定我们的数据之间的关系的模型,我们可以滚动一些数学并且明确地写下给定“x”的“y”的概率:

Step by step demonstration to reach the LSE

  • (8)我们正在替换随机变量 Y 的值
  • (9)我们利用“X”给定,随机变量 Z 独立于 X,“θ”和“m”的事实
  • (10 和 11)我们应用(6)并获取日志
  • (12)我们从“argmin”中去掉任何常数。我们只保留 0.5,因为在计算导数时,数学上比较方便。

一个巨大的平方误差出现了!请注意,我们可以除以元素的数量来免费获取均方差(MSE)。

备注 1

t 已经证明了 如果你为监督学习生成一个随机数据集,你总是可以建立一个足够大的模型(就容量而言),它将过度拟合(记忆)数据并达到*0* 的训练损失😨

这很重要,因为这意味着对于任何数据集,你都可以欺骗自己相信你解决了一个实际上只是“硬编码”数据集关系的任务。

这对于必须严谨的数据集创建者来说更加重要:当一个人收集数据集用于监督学习时,他已经在假设所收集的输入和输出数据具有互信息关系(相关)

举个例子,我可以收集一个数据集,把月亮的位置作为输入,把国家彩票的结果作为输出。即使它们明显不相关,您也可以找到一个模型来过度拟合该数据集。

备注 2

当使用 AWGN 时,我们引入了每个样本不可约的随机误差。您知道预测值不能等于噪声输出值,因为这意味着您过度拟合了您的训练集。

平均而言(意味着对于足够多的点),每个预测应该具有等于加性噪声的标准偏差的误差。

特别是,如果你在“足够多的数据”上计算均方误差,我们应该接近噪声的方差(标准差的平方)。在下面的代码部分可以找到一个具体的例子。

备注 3

我们永远不应该忘记使用监督学习的最大似然估计程序和 AWGN 模型**的成本。**以下是我们为证明 LSE 培训阶段的合理性而做出的假设列表:

  • 我们假设我们在训练集中的数据是独立的。
  • 我们假设在我们的输入和输出之间存在一种交互信息关系
  • 我们假设可以使用我们选择的模型族来近似这种关系。
  • 我们假设只有一个噪声源
  • 我们假设噪声在输出值上是附加的
  • 我们假设这种附加噪声来自白高斯分布
  • 我们假设这种加性噪声是独立的,与我们的数据无关

现在,一系列假设证明了为什么我们的模型应该能够在测试集上具有很高的准确性,并且能够预测新数据:

  • 我们假设测试集中的数据(以及未来的数据)也是独立身份的
  • 我们假设测试集中的数据(以及未来的数据)与训练数据分布相同。例如,现实生活中的概率分布通常不是时间独立的:它们随着时间的推移而演变,有效地打破了这些假设。
  • 我们假设测试集(和未来数据)受到完全相同的噪声源的影响

假设所有这些,我们开发一些巧妙的学习算法,并假装它会工作……很多时候,它真的会工作!🍻

更严重的是,我认为记住这些假设有助于一个人在制作新数据集时非常小心,甚至更好的是,在事后测试它们。

备注 4

关于您可能在野外发现的符号的细微差异的说明:

Difference between conditional probability on multiple r.v. and parametrised function

第一个符号表示“theta”和“m”是随机变量,第二个符号(注意分号)表示“theta”和“m”只是参数(与概率观点无关)。两者都很好,只是解释不同,这影响了你允许自己应用的理论。

在我的例子中,我想说明的是,我们选择了一系列模型及其相应的参数,这些参数是基于一些先验知识,人们可以用概率分布,贝叶斯观点来建模。

在 ML 世界中,符号是非常复杂的,因为这是一个混合了多个数学领域的世界(至少是概率论、线性代数、微积分)。所以请,力求严谨!

备注 5,平方误差的更多性质

我不能在 LSE 上写一篇文章而不提到栈交换上这个关于均方误差(MSE)的可怕问题

去读吧,里面包含了很多真知灼见!

编码时间到了

让我们用科学的方法,让理论与现实对抗吧!为此,我们将构建一个玩具示例:我们将尝试在给定的时间间隔上近似正弦函数。这在 SL 中被称为回归。

让我们深入代码,一切都在注释里。

以下是培训阶段:

Screenshot of the training phase

下面是结果图:

Results of the experiment

关于实验的一些评论:

  • 我们相当成功地重建了窦功能,即使有很强的附加噪声
  • 我们的优化算法损失确实在不可约误差:0.5 附近波动
  • 当我们降低学习率时,我们有了更细粒度的改进
  • 如果测试集与训练集不一致,它就不起作用!这个例子可能看起来很明显,但是如果您使用图像作为输入,那么当您离训练数据集流形太远时,就很难判断了。

无论如何,如果你读到这里,谢谢你!

干杯!🍺

感谢 Alex Orange 的所有反馈!

ML 笔记系列

参考资料:

[## 加性噪声和乘性噪声有什么区别?

回答:让我们考虑一个遵循随机微分方程的变量 x(t)。如果相应的随机…

www.quora.com](www.quora.com/What-is-the…) [## 为什么要求差的平方而不是取标准差中的绝对值?

在标准偏差的定义中,为什么我们必须对平均值的差求平方才能得到平均值(E)和…

stats.stackexchange.com](stats.stackexchange.com/questions/1…) [## 统计学中的正方形事物-一般原理

你为什么在统计中把事情平方?我在数据挖掘和统计课上遇到过很多这样的问题,但是没有人…

stats.stackexchange.com](stats.stackexchange.com/questions/1…) [## 监督学习-维基百科

监督学习是从标记的训练数据推断函数的机器学习任务。训练数据…

en.wikipedia.org](en.wikipedia.org/wiki/Superv…) [## 加性高斯白噪声-维基百科

AWGN 经常被用作信道模型,在该模型中,对通信的唯一损害是宽带或频带的线性增加

en.wikipedia.org](en.wikipedia.org/wiki/Additi…)

机器学习简介 2:我们的第一个例子

原文:towardsdatascience.com/ml-preface-…

本帖跟随机器学习简介 1 。我们将把机器学习应用于营销分析,作为一个简单的商业应用用例。我们将调查流行的机器学习方法,并将每种方法应用于市场分析。我们观察到,一些方法在衡量不同营销活动的投资回报率(ROI)时更具解释性,而其他方法提供了更准确的销售预测。参见第一堂课,了解本文中使用的每一种方法的解释。

这个内容是深度学习第一讲的后半部分。

学习目标

这篇文章给出了回归、特征工程和使用神经网络建模数据集的真实例子。它激励并展示了每种方法。

问题设置

在这个问题中,我们是一个虚构的营销组织。我们查看我们的历史支出和销售额,并将每日营销支出映射到每日销售额。

我们的环境经过简化,适合作为入门机器学习的学习工具。在这种设定下,我们有很多天的品牌销售,但是每一天品牌的销售额只取决于公司在那一天花了多少钱。

在这个例子中,有两种类型的营销支出,品牌营销(brand)创造品牌形象,直接面向消费者营销(d2c)推动销售。

我们根据这两种类型的营销都会增加销售额的规则来模拟这些数据,但是如果两者之间存在平衡,它们的贡献最大。支出与销售的图表如下:

单个结果可以像 excel 表格一样可视化,例如:

Table Visualizing Sales

编码活动:数据可视化

我们从导入一些我们需要的包开始

**import** **numpy** **as** **np
import pandas as pd
import** **matplotlib.pyplot** **as** **plt**
**from** **mpl_toolkits.mplot3d** **import** Axes3D

我们设置了一个随机种子,因此如果您在本地计算机上执行此操作,您将会看到与我们在这里看到的相同的随机结果。这对再现性很重要。

np.random.seed(0)

接下来,我们生成数据集

NUM_SAMPLES = int(2e3)
brand_spend = np.random.rand(NUM_SAMPLES)
d2c_spend = np.random.rand(NUM_SAMPLES)
individual_contributions = brand_spend * .01 + d2c_spend * .02
collaboration = np.square(brand_spend) * d2c_spend * 10
sales = individual_contributions + collaboration + np.random.rand(NUM_SAMPLES)/10

最后,对于线性回归部分,我们有一个执行线性回归的函数和另一个绘制结果的函数:

这里,我们将数据集包装到一个数据帧中。这让我们可以像在 python 中查看 excel 表格一样查看数据集。

dataset = pd.DataFrame({
    'brand': brand_spend,
    'd2c': d2c_spend,
    'sales': sales
}).round(5)

可以通过以下方式查看

dataset.head()

Table Visualizing Sales

接下来,我们将数据集分成 X 和 Y,并可视化这些值。

X = dataset.drop('sales', 1)
Y = dataset['sales']
X1 = X['brand']
X2 = X['d2c']
fig = plt.figure(dpi=80, figsize = (10, 4))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X1, X2, Y, c='r', label='real sales', s = 1)
ax.set_xlabel('Brand Marketing')
ax.set_ylabel('Direct to Consumer')
ax.set_zlabel('Sales')
plt.legend()
plt.savefig('images/data.jpg')

概念检查:用 Python 自己建立一个数据集: 用营销活动和销售之间的线性和自定义数学关系建立并可视化一个类似的数据集。

你能看到你在营销活动之间建立的互动吗?

试着在脚本的开始就参数化你的系统,以便于启用或禁用交互。

解决方案:

这是一个备选数据集,其特征略有不同。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
np.random.seed(0)
NUM_SAMPLES = int(2e3)
noise_ratio= 1e-2
brand_spend = np.random.rand(NUM_SAMPLES)
d2c_spend = np.random.rand(NUM_SAMPLES)
geo_mean_mult = 10
exp_brand_spend_mult = 1
contributions =  {'brand':.01, 'd2c':.02}brand_contributions = brand_spend * contributions['brand']
d2c_contributions = d2c_spend * contributions['d2c']
geo_contribution = np.sqrt(brand_spend* d2c_spend) * geo_mean_mult
exp_brand_contribution = np.exp(brand_spend) * exp_brand_spend_multsales = brand_contributions + d2c_contributions + exp_brand_spend_mult + np.random.rand(NUM_SAMPLES) * noise_ratio
dataset = pd.DataFrame({
    'brand': brand_spend,
    'd2c': d2c_spend,
    'sales': sales
}).round(5)
X = dataset.drop('sales', 1)
Y = dataset['sales']
X1 = X['brand']
X2 = X['d2c']
fig = plt.figure(dpi=80, figsize = (10, 4))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X1, X2, Y, c='r', label='real sales', s = 1)
ax.set_xlabel('Brand Marketing')
ax.set_ylabel('Direct to Consumer')
ax.set_zlabel('Sales')
plt.legend()
plt.savefig('demo.jpg')

方法概述

为了了解营销支出的影响,我们将从使用线性回归将营销支出映射到销售额开始。然后,我们将查看我们的损失曲线,并认识到线性回归的不足,鼓励我们执行特征工程。

在手动特征工程之后,为了帮助特征生成过程,我们使用神经网络的隐藏层来提取特征,并将其用于我们的最终回归问题。我们将比较和对比可解释性和性能。

建模线性回归

为了了解销售和营销支出之间的关系,我们首先拟合一个线性回归模型。

这是告诉模型填充以下公式中的空白:

销售= __ *品牌营销+ __ *直接面向消费者+ __

我们的线性回归通过学习参数来近似这条曲线:

销售额= 5.11 *品牌营销+ 3.28 *直接面向消费者-2.45

这是非常有见地的,因为我们可以直接读取每种支出的投资回报率,例如,我们可以将此解读为衡量品牌营销的投资回报率为 5,d2c 的投资回报率为 3。除了我们注意到一个问题!我们可以在下面直观地看到,该模型并没有准确地表示数据。模型学习到的预测显示在下面的蓝色中,显然不适合红色的销售:

Linear Regression estimates vs Sales

以下是一些用于训练线性回归模型和可视化预测的简单代码。

**from** **sklearn.neural_network** **import** MLPRegressor
**from** **sklearn.linear_model** **import** Ridge
**from** **mpl_toolkits.mplot3d** **import** Axes3D
**def** model_sales_regression(dataset, model='Ridge'):
    num_samples = dataset.shape[0]
    cutoff = (num_samples * 3) // 4
    Xtrn = dataset.drop('sales', 1).iloc[:cutoff,:]
    Ytrn = dataset['sales'].iloc[:cutoff]
    Xval = dataset.drop('sales', 1).iloc[cutoff:,:]
    Yval = dataset['sales'].iloc[cutoff:]
    model = Ridge().fit(Xtrn, Ytrn)
    coefs = model.coef_.round(2)
    yhat = model.predict(dataset.drop('sales', 1))
    yhatval = model.predict(Xval)
    loss = np.square(Yval - yhatval).mean()

    print('learned coefficients', list(zip(X.columns, coefs)))
    print('loss:', loss)
    print('intercept', model.intercept_.round(2))

    **return** model, yhat, coefs, loss**def** graph_real_and_predicted(dataset, yhat, fname=**None**):
    X = dataset.drop('sales', 1)
    Y = dataset['sales']
    X1 = X['brand']
    X2 = X['d2c']
    fig = plt.figure(dpi=80, figsize=(10, 4))
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(X1, X2, Y, c='r', label='real sales', s = 1)
    ax.scatter(X1, X2, yhat, c='b', label='estimated sales', s = 1)
    ax.set_xlabel('Brand Marketing')
    ax.set_ylabel('Direct to Consumer')
    ax.set_zlabel('Sales')
    plt.legend()
    **if** fname **is** **not** **None**:
        plt.savefig('images/' + fname + '.jpg')

这是训练线性回归的代码。

model, yhat, coefs, loss = model_sales_regression(dataset)
graph_real_and_predicted(dataset, yhat, 'linear')

误差量化

为了总结我们模型的准确性,我们来看看真实销售额和我们的预测之间的平方误差。我们用这些平方误差的平均值来表示我们的性能。

为什么是平方误差?

这是基于最小化最坏情况的常见默认选择。假设 1 的误差是可以接受的,如果我们经常在预测中误差 1,这并不完美,但我们可以处理它。但是如果我们有一次差了 3 分,那是不可接受的。我们从来不想偏离太多,但是我们可以接受经常偏离很少。误差平方会是 1 比 1 的平方,这没问题,它会是 3 比 9 的平方,这是一个更大的误差。

平方误差是一种常见的误差度量,因为它可以最小化最坏情况下的误差(或者让我们这样想,并在后面列出其他数学原因)。

概念检查:提出两个可供选择的有意义的误差度量。

如果在课堂上阅读,分组讨论。

一些解决方案:

1-平均绝对误差(我们预测的绝对误差的平均值)是有意义的,但是不会随着你犯大的误差而迅速增加。如果我们更关心百分比误差而不是实际误差,那么 2-平均绝对百分比误差(我们平均偏离的百分比)是有意义的。 mean(abs(Y-yhat)/Y)

为了确保我们计算出一个现实的性能衡量标准,我们在模型没有训练的数据点上衡量我们的损失。因此,我们从一些数据开始,用其中一些数据来拟合模型的参数,用其他数据点来测试我们的性能。这接近于衡量模型在未来对未知数据的表现。

使用线性回归,我们的均方误差为 0.89。这还没有意义,但与其他模型相比,以后会有意义。

但是,我们可以清楚地看到,我们的模型没有准确地捕捉销售趋势,因为我们看到了预测和真实销售之间的可预测差异区域。

特征工程

作为一个聪明的专业人士,我们得出结论,从花费的线性回归不能捕捉所有的数据结构。为了扩展我们的模型,我们注意到当两个输入都很大时,显著增加,所以我们可能需要一个特征来捕捉两种花费类型的组合。因此,我们产生了一个特征,即品牌营销的产品*直接面向消费者的营销支出。要让这个功能变大,需要品牌和 d2c 支出都很高。

查看我们的新功能

让我们快速检查一下这个新特性,brand * d2c。

当我们没有钱花的时候会发生什么?该值为 0。如果 brand 是 1,d2c 是 1 呢?值是 1 * 1 = 1。所以它衡量营销支出?

但是如果我们有 10 美元可以花,我们在 d2c 上花了 1 美元,在品牌上花了 9 美元呢?我们有 1 * 9 = 9。好吧,但是如果我们拿同样的一美元,把它分成两类消费,每类 5 美元。我们有 5 * 5 = 25!该特征检测“两种花费类型都有投资的平衡”。

现在,我们的模型学习使用函数更好地逼近曲线:

销售额= 0.68 *品牌— 1.01 * d2c + 8.74 品牌 d2c — 0.29

概念检查:特征工程

在运行线性回归和可视化预测之前,尝试在熊猫数据框架中构建特征品牌* d2c。在过去,这是一项非常有意义、深思熟虑的任务,是 ML 的一大部分。

解决方案:特征工程

以下解决方案:

dataset['brand * d2c'] = dataset['brand'] * dataset['d2c']
model, yhat, coefs, loss = model_sales_regression(dataset)
graph_real_and_predicted(dataset, yhat, 'feature_engineering')

Feature Engineering Approximation

这看起来不错。我们的预测现在更好地跟踪销售,但我们仍然不完美。我们的误差现在是 0.2,低于纯线性回归的 0.9。

看我们的参数,可以看到品牌和 d2c 营销的组合是最强的影响者,系数为 8.74。这只是真实销售额的近似值,但该参数可以这样解释:如果品牌支出为 0,那么增加 d2c 支出将无济于事,因为无论如何,品牌* d2c 都将为 0。

如果品牌为 0,那么从 d2c 到组合期限的投资回报率为 0。

但是,如果品牌支出为 1(千美元),那么随着我们增加 d2c 支出,我们每支出 1 美元将获得 8.74 美元的投资回报。

如果品牌为 1,那么从 d2c 到组合期限的投资回报率为 8.74。

这听起来不太合理,但作为一个近似值,它告诉我们,增加销售的最佳方式是在品牌和 d2c 营销之间取得平衡,因为组合是最大的因素。

此时,我们认识到我们仍然有 0.2 的显著损失,并且仍然有可预测误差的可见区域,并且认为我们仍然可以改进我们的模型。

用于特征提取的小型神经网络

为了添加更多生成的特征而不必定义它们应该是什么,我们考虑一个小型神经网络,它生成 6 个特征,然后使用这些特征来预测销售。

概念检查:编写一个 sklearn 神经网络代码

使用 sklearn.neural_network 中的 MLPRegressor 生成特征,并用 6 个隐藏单元对销售进行建模,然后显示模型学习到的特征。

解决方案:编写一个 sklearn 神经网络

下面是像以前一样分割数据集的代码,但是使用了神经网络。然后,它将系数组合在一起,以报告模型表示。

**def** model_sales_MLP(dataset, hidden, print_coefs = **True**, max_iter= 10000):
    num_samples = dataset.shape[0]
    cutoff = (num_samples * 3) // 4
    Xtrn = dataset.drop('sales', 1).iloc[:cutoff,:]
    Ytrn = dataset['sales'].iloc[:cutoff]
    Xval = dataset.drop('sales', 1).iloc[cutoff:,:]
    Yval = dataset['sales'].iloc[cutoff:]
    model = MLPRegressor(hidden, validation_fraction = 0, solver='lbfgs', max_iter= max_iter).fit(Xtrn, Ytrn)
    coefs = model.coefs_
    yhat = model.predict(X)
    yhatval = model.predict(Xval)
    loss = np.square(Yval - yhatval).mean()
    hiddens = coefs[0].T
    final_mlp = coefs[1].flatten()

    coefs = list(zip([dict(zip(X.columns, h)) **for** h **in** hiddens],
                     [['output mult:', m] **for** m **in**  final_mlp.flatten()], 
                     [['intercept:', i] **for** i **in**  model.intercepts_[0]]))
    print('loss:', loss)
    **if** print_coefs:
        **for** idx, c **in** enumerate(coefs):
            f1, o, i = c
            print('feature', idx, '=', f1['brand'].round(2), '* brand +', 
                  f1['d2c'].round(2), '* d2c', '+', i[1].round(2))
        output = 'yhat = '
        **for** fidx, v **in** enumerate(final_mlp):
            output = output + str(v.round(2)) + ' * feat ' + str(fidx) + ' + '
        output = output + str(model.intercepts_[1][0].round(2))
        print(output)
    **return** model, yhat, coefs, loss

我们从我们的数据集中创建模型并绘制它,用一个 6 个单元的隐藏层

model, yhat, coefs, loss = model_sales_MLP(dataset, [6])
graph_real_and_predicted(dataset, yhat, 'neural_network')

在训练好我们的神经网络之后,我们考察模型的特征: 特征 0 = 2.85 * brand + 1.83 * d2c -2.79 特征 1 = 1.62 * brand -2.15 * d2c -0.03 特征 2 = 0.08 * brand -0.54 * d2c -0.77 特征 3 = 0.55 * brand + 0.16 * d2c -0.81 特征 4 = 3.83 *

然后,在用于如下预测 yhat 之前,对特征进行剪裁以将任何负值设置为零:

如果特征[i]是正的:特征[i]=特征[I]

如果特征[i]为负:feat[i] = 0

Yhat = 3.0 *专长[0] -1.48 *专长[1] + 0.82 *专长[2] -0.2 *专长[3] + 1.6 *专长[4] -1.82 *专长[5]–0.56

哇有那么难解读吗!在后面的讲座中,我们将开始解释神经网络,但我们肯定不会试图去解读每一个单独的特征,那会太乏味了。

但是看看我们的损失,我们下降到 0.12 的损失!此外,我们的图表现在看起来与真实销售额非常接近。

Neural Network Approximation

深度神经网络

最后,让我们假设我们不是试图通过衡量投资回报率来为营销决策提供信息,而只是试图预测每日销售额。在我们的神经网络中,不是 6 个隐藏单元(6 个特征),而是使用 100 个隐藏单元,并使用该隐藏层来计算 100 个单元的新隐藏层,最终用于执行线性回归。

这进一步减少了我们的损失,现在我们几乎完全符合数据集,损失为 0.001。现在想想,这甚至不是训练数据。这不是模型与训练数据的吻合程度,而是模型与训练过程中从未见过的数据的吻合程度。

但是如果我们想解释这个模型呢?我们有一个 100 单位的隐藏层,然后又有一个 100 单位的隐藏层。因此,为了计算第二隐藏层,我们从第一隐藏层为第二隐藏层中的 100 个单元中的每一个计算 100 次乘法。那是它学过的一万次乘法!我们永远无法概念化这么多的相互作用,但我们认识到神经网络已经开发出这些特征来精确地拟合数据。

Deep network appears to fit dataset perfectly

包扎

让我们回顾一下。初始线性回归对数据集进行了建模,但它显然有不太适合的区域。我们执行了一些特征工程,因为我们从对问题的思考中猜出了一些有价值的特征。这帮助我们更好地拟合数据集,我们的模型更准确,但有点难以理解。

接下来,我们在网络中引入了一个隐藏层来学习我们的特征,我们提出了六个特征,以某种方式为我们解决了问题。这些变得更加难以解释,但我们知道这些特征在某种程度上比我们最初的两三个特征更好地理解了模型。

我们最后让一个深度神经网络来解决这个问题。我们观察到这个模型更加精确,但是解释成千上万的乘法运算是不可行的。

代码分析

下面我们将快速重新执行上面的所有分析,同时只报告代码和简要总结。首先,我们导入一些将在以后对我们有帮助的库

**import** **numpy** **as** **np**
**import** **pandas** **as** **pd**
**import** **matplotlib**
%matplotlib notebook
**import** **matplotlib.pyplot** **as** **plt**
**from** **sklearn.neural_network** **import** MLPRegressor
**from** **sklearn.linear_model** **import** Ridge
**from** **mpl_toolkits.mplot3d** **import** Axes3D

我们设置了一个随机种子,因此如果您在本地计算机上执行此操作,您将会看到与我们在这里看到的相同的随机结果。这对再现性很重要。

np.random.seed(0)

接下来,我们生成数据集

NUM_SAMPLES = int(2e3)brand_spend = np.random.rand(NUM_SAMPLES)
d2c_spend = np.random.rand(NUM_SAMPLES)
individual_contributions = brand_spend * .01 + d2c_spend * .02
collaboration = np.square(brand_spend) * d2c_spend * 10
sales = individual_contributions + collaboration + np.random.rand(NUM_SAMPLES)/10

最后,对于线性回归部分,我们有一个执行线性回归的函数和另一个绘制结果的函数:

**def** model_sales_regression(dataset, model='Ridge'):
    num_samples = dataset.shape[0]
    cutoff = (num_samples * 3) // 4
    Xtrn = dataset.drop('sales', 1).iloc[:cutoff,:]
    Ytrn = dataset['sales'].iloc[:cutoff]
    Xval = dataset.drop('sales', 1).iloc[cutoff:,:]
    Yval = dataset['sales'].iloc[cutoff:]
    model = Ridge().fit(Xtrn, Ytrn)
    coefs = model.coef_.round(2)
    yhat = model.predict(dataset.drop('sales', 1))
    yhatval = model.predict(Xval)
    loss = np.square(Yval - yhatval).mean()

    print('learned coefficients', list(zip(X.columns, coefs)))
    print('loss:', loss)
    print('intercept', model.intercept_.round(2))

    **return** model, yhat, coefs, loss**def** graph_real_and_predicted(dataset, yhat, fname=**None**):
    X = dataset.drop('sales', 1)
    Y = dataset['sales']
    X1 = X['brand']
    X2 = X['d2c']
    fig = plt.figure(dpi=80, figsize=(10, 4))
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(X1, X2, Y, c='r', label='real sales', s = 1)
    ax.scatter(X1, X2, yhat, c='b', label='estimated sales', s = 1)
    ax.set_xlabel('Brand Marketing')
    ax.set_ylabel('Direct to Consumer')
    ax.set_zlabel('Sales')
    plt.legend()
    **if** fname **is** **not** **None**:
        plt.savefig('images/' + fname + '.jpg')

这里,我们将数据集包装到一个数据帧中。这让我们可以像在 python 中查看 excel 表格一样查看数据集。

dataset = pd.DataFrame({
    'brand': brand_spend,
    'd2c': d2c_spend,
    'sales': sales
}).round(5)

可以通过以下方式查看

dataset.head()

Table Visualizing Sales

接下来,我们将数据集分成 X 和 Y,并可视化这些值。

X = dataset.drop('sales', 1)
Y = dataset['sales']
X1 = X['brand']
X2 = X['d2c']
fig = plt.figure(dpi=80, figsize = (10, 4))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X1, X2, Y, c='r', label='real sales', s = 1)
ax.set_xlabel('Brand Marketing')
ax.set_ylabel('Direct to Consumer')
ax.set_zlabel('Sales')
plt.legend()
plt.savefig('images/data.jpg')

这是训练线性回归的代码。

model, yhat, coefs, loss = model_sales_regression(dataset)
graph_real_and_predicted(dataset, yhat, 'linear')

接下来,我们添加一个要素,并从扩充的数据集执行线性回归。

dataset['brand * d2c'] = dataset['brand'] * dataset['d2c']
model, yhat, coefs, loss = model_sales_regression(dataset)
graph_real_and_predicted(dataset, yhat, 'feature_engineering')

转到神经网络,我们定义我们的多层感知器(神经网络的另一个术语)功能。

**def** model_sales_MLP(dataset, hidden, print_coefs = **True**, max_iter= 10000):
    num_samples = dataset.shape[0]
    cutoff = (num_samples * 3) // 4
    Xtrn = dataset.drop('sales', 1).iloc[:cutoff,:]
    Ytrn = dataset['sales'].iloc[:cutoff]
    Xval = dataset.drop('sales', 1).iloc[cutoff:,:]
    Yval = dataset['sales'].iloc[cutoff:]
    model = MLPRegressor(hidden, validation_fraction = 0, solver='lbfgs', max_iter= max_iter).fit(Xtrn, Ytrn)
    coefs = model.coefs_
    yhat = model.predict(X)
    yhatval = model.predict(Xval)
    loss = np.square(Yval - yhatval).mean()
    hiddens = coefs[0].T
    final_mlp = coefs[1].flatten()

    coefs = list(zip([dict(zip(X.columns, h)) **for** h **in** hiddens],
                     [['output mult:', m] **for** m **in**  final_mlp.flatten()], 
                     [['intercept:', i] **for** i **in**  model.intercepts_[0]]))
    print('loss:', loss)
    **if** print_coefs:
        **for** idx, c **in** enumerate(coefs):
            f1, o, i = c
            print('feature', idx, '=', f1['brand'].round(2), '* brand +', 
                  f1['d2c'].round(2), '* d2c', '+', i[1].round(2))
        output = 'yhat = '
        **for** fidx, v **in** enumerate(final_mlp):
            output = output + str(v.round(2)) + ' * feat ' + str(fidx) + ' + '
        output = output + str(model.intercepts_[1][0].round(2))
        print(output)
    **return** model, yhat, coefs, loss

我们对原始销售和支出数据使用我们的函数,没有增强功能。

dataset = pd.DataFrame({
    'brand': brand_spend,
    'd2c': d2c_spend,
    'sales': sales
}).round(5)model, yhat, coefs, loss = model_sales_MLP(dataset, [6])
graph_real_and_predicted(dataset, yhat, 'neural_network')

最后,我们再次调用函数,但是使用更深的神经网络。

model, yhat, coefs, loss = model_sales_MLP(dataset, [100, 100], max_iter = 1000, print_coefs=**False**)
graph_real_and_predicted(dataset, yhat, fname = **None**)

这是从市场归因和评估的实用角度对机器学习的介绍!

上面的代号是: 这里的

此问题展开: ML 前言

本系列预期跟进:https://towards data science . com/ml-intro-3-logistic-output-units-EC 42 cc 576634

对于完全理解这一条的有意跟进帖子:https://medium . com/@ leetandata/machine-learning-engineering-1-custom-loss-function-for-house-sales-estimating-95 eec6b 12457

对于苦于代码或理解的人可选后续: 本帖代码详细分析:https://medium . com/@ leetandata/machine-learning-python-programming-introduction-for-business-people-10588 e 13 ce 9d

关于 Python 编程的免费综合课程。确保注册,但选择免费的可选项目。所有课堂内容免费提供: https://www . coursera . org/learn/python-programming-introduction/

一个比这个更复杂的机器学习教程,但比下面的(不是我写的)更容易https://www . ka ggle . com/rochelle Silva/simple-tutorial-for-初学者

软件工程师可选后续岗位: 重数学、重 CS 的详解(上):https://medium . com/@ leetandata/neural-network-introduction-for-Software-Engineers-1611d 382 C6 aa

重数学、重 CS 的详解(下):https://medium . com/@ leetandata/neural-network-for-software-engineers-2-mini-batch-training-and-validation-46ee 0a 1269 a 0

Cho 教授可选数学笔记: https://github . com/NYU-dl/Intro _ to _ ML _ Lecture _ Note/raw/master/Lecture _ Note . pdf

ML 技术公司帮助执法部门识别儿童性交易受害者和他们的位置,你可以提供帮助

原文:towardsdatascience.com/ml-tech-fir…

2015 年,Thorn 首席执行官 Julie Cordua 接到了两位国土安全部官员的电话。他们需要帮助来开发一种技术解决方案,以找到一个小女孩,她的性虐待视频已被传播到全球各地。

国土安全部已经找了这个小女孩 8 个多月了,但毫无结果。国家失踪和被剥削儿童中心的数据库里没有她的照片。在她被虐待的视频被上传的两年多时间里,没有人认出她或者寻找她。

朱莉没有太多的答案。尽管如此,她的 Thorn 团队仍然致力于开发一种技术解决方案来寻找这个被虐待的孩子。令人沮丧的是,最终他们的努力没有产生任何结果。

经过五年的虐待,小女孩被找到了,但不是因为先进的技术。她是通过缩小两个虐待视频背景物品的销售和制造地点找到的。然后,根据附近销售地点的发票,官员们在社交媒体上搜索购买了其中一件物品的人的名字,并在她母亲的脸书页面上找到了这名受虐待儿童的照片。从那里,他们找到了她的地址,把她从她母亲的男朋友那里救了出来。

看起来,随着机器学习(ML)、人工智能(AI)、机器视觉、物联网(IoT)和面部识别的出现,新兴技术能力将使解决这一案件变得简单快捷。

儿童救助越来越多地发生在技术和法律的交汇处 尽管如此,还是有好消息:技术品牌正在与执法部门合作,并且他们一起在以创新的方式应用新兴技术方面变得越来越好,如机器学习驱动的认知自动化,以阻止儿童性贩运和儿童性虐待材料的传播。让我们看看科技品牌如何依靠 ML 驱动的技术来解决复杂的案件,以及仍然需要哪些能力。然后,我们将讨论您可以如何提供帮助。

图像匹配工具成为技术和执法合作的主流。 每分钟就有五百张遭受性虐待儿童的图片在网上交易。更糟糕的是,很难停下来。人贩子对照片进行的简单调整——即使是添加一个小标记或调整照片大小——也能创造出清晰的图像来追踪。因此,人贩子知道,微小的变化意味着跨平台跟踪虐待图像的分析师失去了他们的旅程和他们背后的人贩子的踪迹。

直到最近,手动图像分析和匹配工作是跟踪虐待儿童者和他们剥削的儿童的唯一方法。微软数字犯罪部门的高级律师考特尼·格雷瓜尔说:“在这个庞大的宇宙中找到这些已知的儿童性虐待图像就像是大海捞针一样。”。例如,在我们的开篇故事中,执法人员花了两年时间才确定这个孩子是受害者。

为了解决这个问题,微软的 PhotoDNA 成为了一个将修改过的图像与原始图像进行匹配的常用工具。该工具使用认知智能驱动的哈希匹配技术来划分图像,将它们哈希成灰色阴影方块,并对每个网格方块进行编号,从而创建图像 DNA。

然后未改变的图像部分与国家失踪和被剥削儿童中心(NCMEC)数据库中的图像进行匹配,该工具识别图像变化。从那里,它确定他们在网上出现的位置,从而跟踪他们背后的人贩子的网上足迹。

为了向合格的组织授予免费访问权,微软将 PhotoDNA 上传到了云端。这意味着更多的组织可以参与进来,匹配和跟踪虐待图像,这样就没有孩子忍受虐待而没有人寻找她。

微软与 Thorn 合作以提高协作效率。微软和 Thorn(由阿什顿·库彻和黛米·摩尔创立)的合作伙伴关系已经成为打击儿童性贩子的强大力量。直到 2012 年,如果相同的儿童性虐待图像被上传到几个不同的平台,由于公司分别扫描他们的平台,每个图像都被散列并作为不同的图像报告给 NCMEC 几次。结果是:数据库中一片混乱。最终,受害者援助被推迟,因为冗余的散列必须被清除,这样救援工作才不会混乱和低效。

但是,情况变得更好了:Thorn 的行业哈希共享平台是第一个允许参与组织共同努力阻止儿童性交易的倡议。由于形成了一个集中且可访问的哈希共享数据库,公司可以通过 PhotoDNA Cloud 使用其他公司已经识别的哈希来扫描他们的图像共享平台。

通过这样做,他们可以找到以前确定的性虐待内容,从而帮助跟踪这些内容。但是,如果扫描的图像还没有被散列,PhotoDNA Cloud 会报告它们属于新的受害者。

结果:省时高效。对先前未报告的图像的即时识别会尽快提醒执法部门注意新的受害者。更快地发现受害者意味着,像我们开篇故事中的女孩这样的孩子,在开始寻找他们之前,可能需要忍受更少的虐待。

由于 Thorn-微软的合作伙伴关系、共享数据库和共享技术,在哈希共享计划的第一年,八个美国最受欢迎的照片共享平台加入了进来,包括脸书和谷歌,他们之间共享了 90,000 个哈希,以便更快地识别受害者。

但是,还有更多…

技术匹配图像背景,为执法部门定位受虐儿童。 在我们的开篇故事中,在确认孩子是受害者后,执法人员使用视频背景物品缩小了受虐儿童的位置。这是一个漫长而乏味的过程。一直以来,一个小女孩都生活在噩梦中。自那以后,科技公司正在开发解决方案,使图像背景与位置的匹配过程变得即时。

TrafficCam 是自动缩小实时结果范围的第一步。如果一个孩子在一个酒店房间里被虐待,然后这个图像被用于在线广告,警方可以依靠 ML 和用户生成的酒店内部数据库来匹配酒店房间和位置,而不是缩小图像背景物品的销售位置。

它是这样工作的:TraffickCam 要求消费者拍摄他们所住酒店房间内部的快照,然后上传到酒店图像数据库。到目前为止,已经有数百万张图片被上传,每一张新图片的上传都意味着又一个孩子可以被拯救。因为只有当孩子在酒店时,它才能识别孩子的位置,所以它并不完美。但是,这是一个有希望的开始。

未来的儿童识别技术带来了即时识别受害者和位置的希望。 一项新技术即将问世,它能使受害者身份识别和救援工作立竿见影。卡内基梅隆大学 Cylan 生物识别中心主任 Marios Savvidas 一直在努力开发虹膜扫描功能。

“现在执法部门只有失踪儿童的照片,但是外貌可以改变,”萨维达斯在接受福克斯新闻频道采访时说。虹膜扫描仪优于图像匹配,因为儿童的外貌会随着时间而改变,但他们的虹膜不会。“我们给了他们一种无法改变的生物特征,”他说。

通过这些扫描仪,只需要三秒钟就可以扫描孩子的脸,定位她的虹膜,并获得身份识别读数。Marios 解释说,虽然指纹需要孩子实际触摸一些东西,但扫描的虹膜更有用。它们仍然像指纹一样清晰,但可以在 40 码外被读取,即使孩子在车里。

这个想法是在机场和边境检查站安装虹膜扫描仪。但是,首先,这项技术需要数据来比较扫描。因此,在扫描仪被执法部门使用之前,父母必须扫描他们年幼孩子的虹膜。然后,如果他们被绑架,扫描仪会将他们的虹膜与原始图像进行匹配。

无论是组织的一部分还是作为消费者,你都可以加入战斗。 如今的受害者识别工具可能并不意味着儿童性交易的终结,但它们无疑有助于解救更多的儿童。此外,认知智能意味着他们围绕图像等非结构化元素的表现将随着更多数据而继续提高

这就是你进来的地方。无论你是一个组织还是个人,你都可以帮助建立智能技术数据库,以提高它们的匹配能力。

如果你代表一个有照片分享平台的机构,联系 NCMEC 参与行业哈希分享平台。此外,如果你需要技术实施方面的帮助,请通过programs@wearethorn.org联系索恩。

如果你是消费者,下载 TraffickCam 应用程序。那么,下次你旅行的时候,一定要拍下你租的任何一家旅馆或汽车旅馆房间的内部照片。然后,只需将它们上传到应用程序。从那里,执法部门可以使用它们来匹配在酒店房间里被虐待的儿童的图像,以确定他们的位置。

最后,将以下文本复制、粘贴并分享到您的社交媒体页面:

233733 (BEFREE):为人口贩运的受害者和幸存者提供帮助或联系当地服务机构。

你的参与可以拯救一个孩子的生命。

m 文学:回归评估(R 平方)

原文:towardsdatascience.com/mliterature…

警告:正如在之前的帖子中提到的,标题也很清楚,这个系列只是为了给你一个主题的直觉,让你开始。我将很快添加数学和代码帖子!

当你说“我认为这是最佳解决方案”时,你的经理会有什么反应

所以,当你说一个模型是最优的或者几乎接近最优时,你应该能够评估它并给出一些证明。

一条线性回归拟合线,看起来像下图所示!

给一条直线,“回归线更符合趋势”。我的意思是,在上面的图像中,这条线(通过最大点)几乎完美地捕捉到了人口随时间推移而增长的趋势。

如何做到这一点不是我想在这篇文章中回答的问题。我们要揭开的是为什么一条给定的线比其他可能的线更好。

因此,可以在二维空间中画出无限多条线,如下图所示,但我们想找出为什么一条给定的线最适合显示趋势。

We are not pretty sure which one is correct!

那么,我们如何衡量哪一个更能代表我们的数据呢?

让我们试着理解使用飞镖游戏。

假设给你下图,描绘了一个“绿色”球员和一个“红色”球员拍摄的照片,问题是谁是赢家?

答案似乎很简单。玩家“绿”赢了!

如果我们再深入一点,你实际上做的是找到飞镖与圆心接触点的距离。关键是,你对所有的点都这样做了,然后取平均值。最后你证明了,绿色飞镖的最终平均距离小于红色,因此绿色是赢家!

你在不到一秒的时间内完成了这一切,甚至不知道你做了什么!很酷吧!

记住上面的原则,让我们借助一个图转移到我们想要解决的回归问题!

现在是重新确定我们目标的时候了。

目的:评估所选回归线是否最优。

指标:这是我们用来决定一条线是否最好的标准。(记住,在飞镖的情况下,我们计算每个飞镖离中心的距离并取平均值)

**程序:**对于回归线,我们不能执行与镖靶相同的程序。不用担心太多的数学证明,让我们理所当然地认为,我们需要一个回归线的图像,我们将使用它作为参考来评估我们的回归线。

上面这条线是用人口的平均值画出来的。

要评估的公式,

R = 1 -(最佳拟合线距离值/平均拟合线距离值)

请记住,在飞镖游戏中,我们试图尽可能地缩短距离,也就是说,离中心的距离越小,结果越好(赢家)。

类似地,这里我们试图最小化" R "也读作 R 的平方,这样我们可以说,这条线是最佳拟合线。

因此,总结这篇文章 w.r.t 到回归线,如果你看上面的公式,我们可以说,‘距离 _ 值 _ 最佳 _ 拟合 _ 线’的值越小,R 的值越接近 1,拟合越好

重要提示:我在上面提到过,我们通过对距离求和并取平均值来找到“最佳拟合线的值”。事实证明,这不是最好的方法,另一个版本称为 SSE(误差平方和是首选)。

这就是这篇文章的内容。我们将在后面的文章中继续数学部分,我们将通过一个例子来看看所有这些是如何工作的。

机器学习快乐!

参考

[## 平方和:残差和、总和、解释和

统计定义>残差平方和,总计和解释残差平方和是用来帮助你…

www.statisticshowto.com](www.statisticshowto.com/residual-su…) [## 决定系数-维基百科

R 2 有几种定义,只是有时等价。一类这样的情况包括…

en.wikipedia.org](en.wikipedia.org/wiki/Coeffi…) [## 剩余平方和-维基百科

在统计学中,残差平方和(RSS),也称为残差平方和(SSR)或残差平方和。

en.wikipedia.org](en.wikipedia.org/wiki/Residu…) [## 为什么我们在计算方差和标准时用平方而不用绝对值…

答案(第 1 题,共 20 题):你已经得到了技术性的答案。在迈克尔·霍克斯特的要点中,有一个关键点是最后一点。所以…

www.quora.com](www.quora.com/Why-do-we-s…) [## 如何计算误差平方和(SSE)

误差平方和(SSE)是一个初步的统计计算,可以得出其他数据值。当你…

www.wikihow.com](www.wikihow.com/Calculate-t…)

数字识别

原文:towardsdatascience.com/mnist-with-…

介绍

就像在传统编程中,我们首先学习打印"Hello, world!",类似地,在机器学习中,我们首先理解识别手写数字图像的解决方案。此类任务的著名数据集是 MNIST (简称“修改后的国家标准与技术研究院数据库”)。

在这篇文章中,我将使用一个最简单的机器学习算法来解决这个著名的识别手写数字的问题。

MNIST 数据集

MNIST 由 6 万张手写数字图像组成,包括从 0 到 9 的所有数字。每个图像都有其对应的标签号,代表图像中的编号。例如,下图中第一个图像的标签为 5,第二个图像的标签为 4,依此类推。该数据集通常分为三个子集:40,000 个用于训练,10,000 个用于验证,另外 10,000 个用于测试。在本文中,我们将只关注培训和测试。

在 MNIST,每幅图像都包含一个手绘的灰度数字。每个图像都是一个 784 维的浮点数向量(高度和宽度都是 28 个像素),其中每个值代表一个像素的亮度。

那么,KNN 是什么?

k 近邻是一种分类算法。它将新数据点(测试数据)分类到某个类别中。为此,它主要查看新数据点与训练集中所有其他数据点的距离。然后,在 k 个最接近的训练数据点中,大多数类被分配给该新的测试数据点。

距离度量的选择取决于为分类任务选择的问题。因为,举例来说,两个程序员的技能之间的距离(比赛中的分数)将不同于两个风筝在空中飞行的距离(3D 空间中的欧几里德距离),等等。我们选择使用由以下公式给出的图像之间的欧几里德距离。

Euclidean distance between two n-dimensional points p and q. Source

这个等式描述了两个 n 维点 p 和 q 之间的欧几里德距离。在我们的例子中,n = 784,因为 MNIST 的每个图像是 784 维的。

这就是关于 k 个最近邻居的全部内容!算法非常简单。现在让我们开始编程

寻找距离

两幅图像之间的距离可以用许多不同的方法计算。但是这里我用了欧几里德距离。其计算方法(此处为图像)是对两幅图像的相应像素之间的 L2 范数求和。

Euclidean Distance

相应像素距离的平方也消除了负距离。另一种方法是找到相应欧几里得距离的绝对值。

多数表决

找到距离并排序后(我们稍后将对其进行排序),是时候在最近的 k 训练点中找到多数类来测试数据点。这里,我们采用最接近的训练点的标签/类别,并找到出现最多的一个,并将其分配给新的测试数据点。这就是分类是如何发生的。

下面的代码描述了多数算法。

Voting for majority

分类手写数字

我们有了对手写数字进行分类所需的一切。我们剩下要做的就是我们在这里的真正目的。

下面的分类代码描述了它自己。

Classifying handwritten digits

我运行我的代码对前 2500 张测试图像进行分类,并获得了 95.32% 的分类准确率,对于这样一个简单的机器学习模型来说,这真的不算太差。可以通过使用分类过程的所有测试图像来检查完整的准确性,但这将花费很长时间(甚至可能一天)。

结论

所以, k 近邻是一种简单的分类任务算法。我们用它来对手写数字进行分类,取得了 9**5.32%**T8w 的准确率,对于这样一个简单的分类算法来说已经很不错了。