TowardsDataScience 博客中文翻译 2020(八百五十二)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

混乱矩阵被可视化

原文:https://towardsdatascience.com/the-confusion-matrix-visualized-e778584c8834?source=collection_archive---------37-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图形化的方法使与 2×2 矩阵相关的许多指标变得清晰明了。

我总是对 2×2 混淆矩阵的丰富性感到惊讶。毕竟,这只是四个数字,有多复杂?事实证明,我们可以获得丰富的见解。但是,混淆矩阵被用于商业、工程和科学的许多领域,每个领域都有自己的词汇,这一事实使情况变得模糊不清。

由于倾向于可视化,我创建了一个图表来帮助说明和理解许多概念。基本上,它是带有许多装饰者的混淆矩阵本身。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该图表是用 python 可视化包 Altair 创建的。带有图表代码的 Jupyter 笔记本可以从我的 GitHub(https://github.com/SorenLaursen/confusion_matrix_chart)下载。此处,图表显示了所有图形项目的实际数值,例如作为工具提示的条块。

词汇

混淆矩阵将两个二进制类相互映射。我们在这里将这些分别称为行和列的( YN )和( yn )。说明性地,这些可以表示一些标准的评估,例如一些组的成员资格(是,否)。

让我们开始探索混淆矩阵周围的词汇[1]。首先是四个数字本身:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大多数选择都是直观易懂的。从四个数字衍生出的许多比率的众多名称变得更加混乱:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

右边的装饰器稍微复杂一些,但是仍然基于这四个数字。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作为参考,我将介绍一个在实现代码中也使用的更简单的命名约定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义

接下来,让我们转向定义。四个数字之间的横条简单地说明了每个数字与成对总和的比率。换句话说,每个条形都是两个相邻数字的标准化堆积条形。

我们在这里将这四个杆称为成对杆

当然, a | b 符号用于命名成对杆的段,暗示了将这些段理解为条件概率。

线对中线段的排序惯例是,与对角线上的数字相关的部分最靠近图表的中心。

左侧和顶部的金色条分别代表行总和和列总和。这两个条形都包含所有四个数字的信息。同样,条形应被认为是标准化的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样,中间的横条汇总了所有四个数字,这次不是以行和列的形式,而是以对角线和非对角线的形式。

与此相反,左上角的横条只代表四个数字中的三个。就是 F1 的分数即 2 ∙(Y|YY|Y)/(Y|Y+Y|Y)。换句话说,它是从两个深绿色段计算出来的。因子 2 意味着该条也被归一化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,优势比定义为

=(YyNn)/(YnNy)。

笔记本中的实现应用了小计数校正(霍尔丹-安斯科姆校正),即如果四个数字中的任何一个为零,那么所有四个数字都加上 0.5[2]。

可以看出,置信区间可以简单地近似为:

exp{ log( )cv∙sqrt(1/Yy+1/Yn+1/Ny+1/Nn)}

其中临界值 cv ,取决于置信水平:90%: 1.64,95%: 1.96,99%: 2.58。

应用程序

让我们从混淆矩阵的一个经典应用开始。二战是雷达的早期。齿轮的灵敏度可以调整,但最佳设置是什么?提高雷达的灵敏度,大多数敌机都被发现了。但同时也有很多虚惊一场。降低灵敏度,有一些假警报,但现在一些敌机没有被发现,这是更糟糕的。我们想尽量减少假阴性。类似地,在癌症筛查项目中。我们不想错过任何一个真正患有癌症的人。这个结果是以一些假阳性为代价的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该空间中的分析通常是在垂直对杆上进行的。这些总结了所有四个数字的信息。显然,将一行中的两个数字乘以某个因子不会改变垂直对条。因此, YN 之间的分配不会影响这两个副杆。这导致这些成对条被用在一个特殊的图中,即接收机工作特性曲线或 ROC 曲线。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

混淆矩阵表示一些样本,例如多个实验、多个患者或具有一些特定设备设置(即操作特性)的多个雷达测量。因此,特定混淆矩阵代表 ROC 曲线上的一个点。

由于垂直对条不依赖于 Y / N 分布,这意味着即使位置 A 的敌机比位置 B 多,位置 A 的雷达系统的测量值也可以与位置 B 的雷达系统的测量值进行比较。

有时,希望将假阳性( Ny )而不是假阴性( Yn )最小化。例如,垃圾邮件过滤器会将邮件标记为垃圾邮件。我们不希望一个正确的消息被标记为垃圾邮件,因为我们可能永远不会看到它。另一方面,如果收件箱中还有一些垃圾邮件,也不是什么大问题。另一个例子是广告活动:我们预测谁是目标群体。我们不想针对非目标受众开展昂贵的宣传活动。因此,尽量减少假阳性。因此,我们可能不会针对整个目标群体,但我们针对的人很可能是目标群体中的一员。

请注意,无论我们是最小化假阳性还是假阴性,都不能告诉我们要评估哪个度量。我们仍然可以使用垂直的双杠,但是现在我们将关注于 y | N 而不是 n | Y 。但是我们什么时候使用水平双杠呢?

数据集通常非常不平衡。例如所有信用卡交易中的欺诈性信用卡交易。看看下面两个例子。在右边的例子中,与左边的例子相比,第二行中的数字乘以 100。垂直对条不受影响,它们独立于患病率( Y )。此外,在这两种情况下,准确性(中心条)接近 100%。但是在第二种情况下,假阳性与真阳性相比的数量可能是毁灭性的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在严重不平衡的数据集中,真正的负数可能会占主导地位,在许多情况下,其他三个数字更令人感兴趣。请记住上面的定义部分,F1 分数——左上角的条形——是基于这三个数字的度量,实际上是基于 y | YY | y ,即两个深绿色部分。可以看出,与准确性相反,F1 分数对两种情况之间的差异很敏感。

ROC 图概括了整体情况。对于不平衡的数据,有一个类似的图:精确召回图[3]。基本上,这两个图都是相互映射的两对棒线。为简单起见,我们在这里将这种图称为成对图。由于垂直对条与一行中的数字乘以一个公共因子无关(它们与患病率无关),这两个病例位于 ROC 图上的同一点(左)。然而,在精确回忆图中,这两种情况截然不同。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们可以控制患病率( Y )的情况下,两条曲线都适用。例如模型评估就是这种情况。我们有一个训练集来训练模型,即我们可以使用不同参数设置的同一个集。通过这种方式,我们可以构建已知患病率( Y )为常数的配对图。这与雷达的情况相反,在雷达的情况下,敌机的出现会随着地理位置和时间的不同而不同。

属国

到目前为止,我们已经查看了存在真值( YN )和一些计算结果或经验测试结果( yn )的情况,并且我们使用我们的混淆矩阵和相应的派生度量来评估模型质量、医学测试质量、假设测试等。

但是 2×2 矩阵还有另一种用途,只是思路有点不同:两个二进制类是否独立?例如,20-29 岁年龄组( YN )的会员资格是否与拥有汽车( yn )相关联?这也适用于以上所有的例子。在这个应用领域,矩阵通常被称为列联表。

这就是优势比()的由来。它在上面被定义为对角线数的乘积与非对角线数的乘积之比。如果为 1,那么这两个类是独立的。在混淆矩阵图的装饰器中——即右边的栏——深蓝色的点是,橙色的点是 1。由于此或描述未被标准化,为方便起见,其值显示在右上框中。

需要与 1 相差多少才能表示依赖关系?如上所述,对于,很容易估计置信区间。在图表中,显示了置信度为 90%、95%和 99%的三个置信区间。请看下图中的例子(a)-©。在(a)中,1 在所有三个置信区间内,即无论置信水平如何,两个类别都是独立的。在(b)中,这两个类别依赖于或关联于 95%而不是 99%的置信水平。在©中,类是相关的,置信度为 99%。

一些说明性的例子:在(d)和(e)中,列中的数字和行中的数字是成比例的。显然,这些类是独立的,并且 = 1。在最后一个例子(f)中,非对角线的数量大于对角线的数量。类别之间的相关性很强,说明了这种分析的对称性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结束语

基于混淆矩阵创建可视化的动机是为了获得对基于四个数字的度量的定义和使用的一些见解。

对各种比率定义的详细记录以及对这些指标的深奥名称的应用应该与对图表中堆叠的、标准化的条形的直观理解相比较。此外,配对图的概念是两个配对柱的简单映射,它使 ROC 图和精密度-召回图的构建更加清晰,并说明了使用其中一个的原因。

最后,将比值比和置信区间添加到图表中增加了立即对类的依赖性或关联性做出精确结论的能力。

这些都是一目了然的见解。你可以随意下载 Jupyter 笔记本,玩混乱矩阵图(https://github.com/SorenLaursen/confusion_matrix_chart)。

[1]混乱矩阵,维基百科(【https://en.wikipedia.org/wiki/Confusion_matrix】T2)

[2] *拉斐尔·伊里扎里:*数据科学导论(2020) — 15.10.4 比值比,https://rafalab.github.io/dsbook/inference.html

[3] Takaya Saito,Marc Rehmsmeier: ROC 和 precision-recall with unbalanced datasets(2015)https://classe val . WordPress . com/simulation-analysis/ROC-and-precision-recall-with-balanced-datasets/

违反线性回归假设的后果

原文:https://towardsdatascience.com/the-consequences-of-violating-linear-regression-assumptions-4f0513dd3160?source=collection_archive---------10-----------------------

违反假设会如何影响预测和推断

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Mathilda Khoo 在 Unsplash 上拍摄

动机

最近,一个学习线性回归的朋友问我,当违反像多重共线性这样的假设时会发生什么。尽管我以前是统计学专业的学生,但我只能给他一些笼统的回答,比如“你不会相信你的模型的估计值。”由于对我的回答不满意,我决定通过模拟创建一个真实世界的例子,来展示当某些假设被违反时,预测和推理会发生什么。

模拟

假设研究人员有兴趣了解是什么推动了房价。让我们假设房价仅仅由两个变量决定:房子的大小和房龄。虽然年龄与价格呈负线性关系,但房子的大小与价格呈正二次(非线性)关系。从数学上讲,我们可以这样模拟这种关系:

priceᵢ=β₀+β₁sqftᵢ+β₂sqftᵢβ₃age_yearsᵢ+eᵢ*

其中 Price 是房屋的价格,单位为千美元, sqft 是房屋的面积,单位为千平方英尺, age_years 是房屋的使用年限。残差 e 正态分布,均值为 0,方差 σ ₑ *。*让我们称之为真实模型,因为它考虑了推动房价的一切因素(不包括残差)。由于研究人员没有水晶球告诉他们真正的模型是什么,他们测试了一些线性回归模型。以下是他们得出的结论,排名不分先后:

(1)priceᵢ=β₀+β₁sqftᵢ+β₂sqftᵢβ₃age_yearsᵢ+eᵢ*

(2)priceᵢ=β₀+β₁sqftᵢ+β₂sqftᵢβ₃age_yearsᵢβ₄age_monthsᵢ+eᵢ

(3)priceᵢ=β₀+β₁sqftᵢβ₂age_yearsᵢ+eᵢ

(4)priceᵢ=β₀β₁age_yearsᵢ+eᵢ*

研究人员很聪明,找到了真正的模型(模型 1),但其他模型(模型 2、3 和 4)违反了某些 OLS 假设。最后,假设有 10K 的研究人员进行了同样的研究。每个人都从房屋群体中选取了 50 个独立的观察值,并将上述模型与数据进行拟合。通过检查这些 10K 模型的结果,我们可以看到这些不同模型的行为。下表显示了用于模拟数据的关键参数(完整代码可在这里找到):

结果

无多重共线性违规

(2)priceᵢ=β₀+β₁sqftᵢ+β₂sqftᵢβ₃age_yearsᵢβ₄age_monthsᵢ+eᵢ

研究人员在组装模型 2 时非常疲劳,没有意识到他们包括了两个衡量房屋年龄的指标:年龄 _ 年年龄 _ 月。检查多重共线性的一个好方法是查看方差膨胀因子 (VIF)。根据经验,大于 5 的 VIF 表示多重共线性,对于 age_years 和 *age_months 都是如此。*让我们从比较模型 2 和模型 1(真实模型)的预测能力开始。均方误差 (MSE)是一个很好的预测指标,它告诉你一个模型的预测与实际值有多接近。下图显示了从所有 10K 研究人员处收集的 MSE 分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

两个模型之间的 MSE 非常相似,这意味着多重共线性违规不会真正影响预测。推论如何,或者换句话说,模型的解释能力如何?结果是,模型 2 和模型 1 对年龄 _ 年β₃ 的系数估计有很大不同:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平均而言,两个模型的系数估计在-7 处是无偏的。然而,很明显,对于模型 2,样本之间的差异要大得多。这是什么意思?这意味着多重共线性削弱了模型 2 的统计能力。例如,在模型 2 中, age_years 仅在 54%的 10K 模型中具有统计显著性。这是有问题的,因为几乎一半的研究人员会认为年龄没有统计学意义。另一方面,在模型 1 中, age_years 在所有 10K 模型中具有统计显著性。

线性违规

(3)priceᵢ=β₀+β₁sqftᵢβ₂age_yearsᵢ+eᵢ

回想一下价格平方英尺之间的真实关系是非线性的。模型 1 解决了这种违反,但模型 3 没有,因为研究人员排除了 sqft 的二阶项。这种违反的一个迹象是,绘制拟合值与残差之间的关系是否会产生一种独特的模式。如下所示,模型 3 产生抛物线形状,因为线性函数不能充分捕捉价格年龄 _ 年数之间的关系:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

既然我们已经确认违反了线性,让我们通过观察 MSE 来比较所有 10K 模型的预测:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

模型 1 的平均 MSE 为 84,而模型 3 为 113。为了让解释更加清晰,我们可以用均方根误差(RMSE)——MSE 的平方根——来表示模型 1 的房价预测与真实价格的差距平均为 9167 美元(√841000),而模型 3 的房价预测与真实价格的差距为 10614 美元。最后,让我们深入推理,比较模型 1 和模型 3 之间年龄的系数估计值。你在下图中看到的是从 10k 研究人员那里获得的年龄 _ 年数*系数估计值的分布:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

尽管两个模型平均获得的正确结果为-7,但模型 3 的精确度较低,因为它的取值范围稍大。虽然模型 3 的问题不像模型 2 那样严重,但如果不考虑更强的非线性水平,问题会更加严重。

没有内生性违背

(4)priceᵢ=β₀β₁age_yearsᵢ+eᵢ*

当自变量和误差项之间有联系时,内生性就发生了。模型 4 违反了无内生性假设,因为研究人员从模型中省略了 sqft 。记住,当相关变量从模型中被忽略时,它会被误差项吸收。由于 sqftage_years 略微相关(我在模拟中将其设置为 20%),从模型中省略 sqft 会导致误差项与 age_years 相关。让我们首先通过检查 MSE 来比较模型 1 和模型 4 的预测能力:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

与模型 1 相比,模型 4 的预测要糟糕得多,主要是因为 sqft 解释了房价的许多变化。RMSE 告诉我们,平均而言,模型 4 做出的预测与真实房价相差 29099 美元,而模型 1 的预测为 9167 美元。接下来,我们重点讲推理。下图显示了模型 4 的年龄 _ 年龄系数、 β₁ 在 10K 研究人员中的分布情况:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为我们知道 age_years 的真实系数值是-7,而不是-4.1,所以平均系数估计值是有偏差的(因此术语省略变量偏差)。此外,我们可以看到,对于 9.5K 的 10K 研究人员来说, age_years 的系数估计值在-5.5 到-2.8 之间。这将导致大多数研究人员低估年龄对价格的影响。

结论

  • 违反多重共线性不会影响预测,但会影响推断。例如,对于高度相关的协变量,p 值通常会变大,这可能会导致具有统计显著性的变量缺乏显著性。
  • 违反线性会影响预测和推断。对于模型 3,我们看到预测和估计系数的精度仅受到轻微影响。然而,当更强的非线性水平未被考虑时,这些事情将会恶化。
  • 由于遗漏了一个变量,模型 4 违反了无内生性假设。这造成了有偏见的系数估计,导致误导性的结论。预测也很糟糕,因为遗漏的变量解释了房价的大量变化。

这个模拟展示了当假设被违反时会发生什么。取决于多种因素(即残差方差、观察次数等)。),模型的预测和推断能力会有所不同。当然,一个模型也有可能违反多个假设。如果有兴趣,我将在以后介绍其他假设(homoskedasticity、误差项的正态性和自相关),但我介绍的这三个应该会让您对违反假设的后果有所了解。

日冕地图:可视化疫情

原文:https://towardsdatascience.com/the-corona-map-visualizing-the-pandemic-fc436f175dff?source=collection_archive---------4-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

thecoronamap.com

小说《电晕病毒,世纪疫情》在全世界引起了歇斯底里。股市经历了自 2008 年危机以来最糟糕的一天,油价出现了 29 年来的最大跌幅。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

道琼斯图表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

油价

首先,让我们了解什么是这种新的冠状病毒或新冠肺炎。冠状病毒不是一种单一的病毒,它是一个病毒家族,可以引起流感等疾病。这是该家族的最新发现,该家族被命名为新型冠状病毒或新冠肺炎。

那么这种新型冠状病毒和那些看起来不太伤人的旧冠状病毒有什么不同呢?嗯,主要的问题是它是新的,我们还没有太多的研究和/或药物来治疗它。这种病毒的另一个问题是它具有高度传染性。

大约 97%的受害者存活下来,但是免疫系统弱的人无法对抗它,我们还没有杀死这种病毒的药物。

科学家和研究人员正在努力,不久我们将有疫苗和治疗方法。全世界的政府和私人机构都在努力减轻灾难并控制病毒。

GIS 能帮上什么忙?

“GIS 为可视化和分析流行病学数据、揭示趋势、相关性和相互关系提供了极好的手段。”

为了应对灾难,我们需要关于它们的数据,在这个数据分析和我们现有工具的时代,有很多事情可以做。在这方面,约翰·霍普金斯大学的 CSSE 做了伟大的工作。他们一直在收集数据,并每天将数据发布到他们的上。他们还创建了一个显示当前信息的门户网站。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上述门户在提供最新信息方面做得很好,但缺少地图上的历史信息,这些信息存在于他们提供的数据集中。他们在图表中提供了历史数据,但在地图上没有。

我们在做什么?

我相信,在太空中可视化与这个疫情相关的历史数据将为研究人员和任何想更多地研究新冠肺炎的人增加价值。所以,我和我的朋友决定制作一个小工具:日冕地图

这是一个免费的简约工具,我们为那些对研究这种疾病如何传播以及它在全球的状况感兴趣的人开发的。这对旅行者、医生、研究人员、非政府组织、政府和任何想研究和/或发现这种疾病影响现状的人都是有益的。

到目前为止,我们只做了一个星期,我们计划在未来添加更多的数据层,并将每天更新当前的数据。现在,它在地图上显示了每天的全球统计数据,以及自第一例病例报告以来每个国家每天的统计数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

右下角的日历可以让你检查任何日期的电晕状态

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

中国冠状病毒统计至 2020 年 3 月 9 日

我们正在寻找更多的数据来源,并将增加它们,使其对研究人员更有用。如果你想尽自己的一份力量,想分享能够真正帮助研究人员和组织抗击疾病的数据或想法,请联系我们,以便我们能够让 Corona 地图对他们更有帮助。

我是拉米兹·萨米。我爬山、举重、构建 WebGIS 解决方案。在Linkedin上随时与我联系。

新冠肺炎的一份报纸——科罗纳时报

原文:https://towardsdatascience.com/the-corona-times-b4ed731e0b71?source=collection_archive---------19-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于数据科学的新闻应用

似乎我消费信息的方式已经发生了很大的变化。最近我成了一个新闻迷。尤其是有一点,我一直在阅读相当多的国际新闻,以确定新冠肺炎在我国所处的阶段。

为了做到这一点,我通常会访问许多不同国家的新闻媒体网站来阅读新闻。这给了我一个想法。为什么不为 Corona 创建一个国际新闻仪表板?这就是了。

这篇文章是关于我如何使用 Streamlit 和来自 NewsApi欧洲疾病控制中心的数据创建新闻仪表板的。

**TLDR;此处 链接 App

获取数据

创建这个仪表板时最重要的事情是获取数据。我使用两个数据源:

1.数据来自欧洲疾病预防和控制中心。

该可下载的数据文件每天更新,包含关于新冠肺炎的最新公共数据。这是这些数据的快照。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

def get_data(date):
    os.system("rm cases.csv")
    url = "[https://opendata.ecdc.europa.eu/covid19/casedistribution/csv](https://opendata.ecdc.europa.eu/covid19/casedistribution/csv)"
    filename = wget.download(url,"cases.csv")
    casedata = pd.read_csv(filename, encoding='latin-1')
    return casedata

2.新闻宣传短片

第二个数据来源来自新闻 API ,它让我可以免费访问来自不同国家的主要新闻媒体的文章。唯一的警告是,我一天只能点击 API 500 次,对于免费帐户的特定查询,结果限制为 100 个。

我试图通过使用 streamlit 缓存来绕过这些限制障碍(所以我不会经常使用 API)。我还尝试使用多个过滤器获取上个月的新闻数据,以获得大量数据。

from newsapi import NewsApiClient
newsapi = NewsApiClient(api_key='aedb6aa9bebb4011a4eb5447019dd592')

API 工作的主要方式是让我们访问 3 个函数。

A)从一个国家获取最新新闻的功能:

json_data = newsapi.get_top_headlines(q=q,language='en', country='us')
data = pd.DataFrame(json_data['articles'])
data.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

b)从国家获取与查询相关的" Everything" 的函数。这里可以看到 API 参数的描述:

json_data = newsapi.get_everything(q='corona',
                                    language='en',
                                    from_param=str(date.today() -timedelta(days=29)),
                                    to= str(date.today()),
                                    sources = 'usa-today',
                                    page_size=100,
                                    page = 1,
                                   sort_by='relevancy'
                                    )
data = pd.DataFrame(json_data['articles'])
data.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

c)以编程方式从一个国家获取资源列表的功能。然后我们可以使用这些资源从**“一切”** API 中提取数据

def get_sources(country):
    sources = newsapi.get_sources(country=country)
    sources = [x['id'] for x in sources['sources']]
    return sourcessources = get_sources(country='us')
print(sources[:5])
-------------------------------------------------------------------
['abc-news', 'al-jazeera-english', 'ars-technica', 'associated-press', 'axios']

我使用了上面的所有函数来获取以特定频率刷新的数据。通过查看我在 GitHub 上的代码,您可以看到我是如何在循环中使用这些 API 函数来下载数据的。

创建仪表板

我希望在仪表板中有一些我感兴趣的重要信息。所以我开始创建各种小部件。

1.当前世界快照:

第一个信息是关于整个世界局势。病例数和死亡数。各国的病例和死亡曲线?各个国家的致死率是多少?以下是 2020 年 3 月 28 日的世界局势。

观察: 我们可以看到意大利的死亡人数仍在上升,而西班牙、法国和美国的死亡人数也在上升。一些国家的死亡率令人担忧,意大利的死亡率为 10.56%,伊拉克为 8.7%。我怀疑冠状病毒开始几天 2%的死亡率统计如果没有错的话是误传。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

技术细节 —为了创建仪表板的这一部分,我使用了 ECDC 数据。我还在 Streamlit 中使用了很多 HTML 技巧,其中我使用了 bootstrap 小部件和自定义 HTML 来以我想要的方式显示数据。以下是一些技巧:

  • **使用引导卡:**您可以使用引导卡,或者在这种情况下,如果您将参数 unsafe_allow_html 更改为 True,则可以使用 Streamlit 中的任何 HTML 元素。请注意,我在这里也使用了 python f 字符串格式。
st.sidebar.markdown(**f**'''<div class="card text-white bg-info mb-3" style="width: 18rem">
  <div class="card-body">
    <h5 class="card-title">Total Cases</h5>
    <p class="card-text">**{sum(casedata['cases']):,d}**</p>
  </div>
</div>''', **unsafe_allow_html**=True)

上述代码位于 streamlit 应用侧边栏中的仪表板风格卡片后面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **更改了 streamlit 主页的宽度:**同样,streamlit 没有给出参数来实现这一点,我发现页面宽度对于我的用例来说有点太小。在应用程序开始时添加上面的代码解决了这个问题。
st.markdown(
        f"""
<style>
    .reportview-container .main .block-container{{
        **max-width: 1000px;**
    }}
</style>
""",
        unsafe_allow_html=True,
    )

2.来自国家的最新消息

创建这个仪表板的主要目的是从国内顶级媒体渠道获取各种渠道的新闻。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

技术细节: 之前说过,我是用新闻 API 来获取这个数据的。下面是我如何使用 HTML 和 markdown 的混搭来显示新闻结果。

def create_most_recent_markdown(df,width=700):
    if len(df)>0:
        # img url
        img_path = df['urlToImage'].iloc[0]
        if not img_path:
            images = [x for x in df.urlToImage.values if x is not None]
            if len(images)!=0:
                img_path = random.choice(images)
            else:
                img_path = '[https://www.nfid.org/wp-content/uploads/2020/02/Coronavirus-400x267.png'](https://www.nfid.org/wp-content/uploads/2020/02/Coronavirus-400x267.png')
        img_alt = df['title'].iloc[0]
        df = df[:5]
        **markdown_str = f"<img src='{img_path}' width='{width}'/> <br> <br>"**
        for index, row in df.iterrows():
            **markdown_str += f"[{row['title']}]({row['url']}) by {row['author']}<br> "**
        return markdown_str
    else:
        return ''

这里需要注意几件事:

  1. 无法使用 markdown 设置图像宽度,因此使用自定义 HTML
  2. 使用 python f 字符串创建文章标题和 URL。
  3. 如果找不到图像,我们将默认使用自定义图像。

3.新闻情绪

在这段艰难的日子里,另一件困扰我的事情是到处都有太多的负面情绪。如果可能的话,我想看到从积极的角度报道的新闻。所以我用 Textblob 的自定义情感分析器做了一些简单的情感分析。

我发现了新闻媒体的观点,以及过去 30 天中与冠状病毒有关的一些最积极和最消极的新闻。(过去 30 天,因为我不能用免费的 API 返回更多)。

观察: 你可以看到,最积极的消息之一是川普在 3 月 17 日改变了他对冠状病毒的立场,我同意。第二个积极的报道似乎是关于这个问题的某种解决方案。而第一个负面消息是关于 Cardi B 抨击名人散播关于冠状病毒的混乱。这个我不做评论:)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

技术细节: 为了得到一篇文章的情感评分我用了TextBlob。获得从-1 到 1 的情感分数就像使用下面的函数一样简单。由于新闻 API 中的内容被截断,我使用了标题和描述的连接来查找情感。

def textblob_sentiment(title,description):
    blob = TextBlob(str(title)+" "+str(description))
    return blob.sentiment.polarity

这里的主要困难是要有一个两栏的布局来提供正面和负面的消息。同样,我不得不使用 HTML 和 markdown 的混搭。我使用 HTML 表来做这件事。另外,请注意我是如何使用 Python f 字符串将 markdown 转换成 HTML 的。

import markdown**md = markdown.Markdown()**positive_results_markdown = create_most_recent_markdown(positivedata,400)

negative_results_markdown = create_most_recent_markdown(negativedata,400)html = f'''<table style="width:100%">
                  <tr>
                    <th><center>Most Positive News</center></th>
                    <th><center>Most Negative News</center></th>
                  </tr>
                  <tr>
                    <td><center>**{md.convert(positive_results_markdown)}**</center></td>
                    <td><center>**{md.convert(negative_results_markdown)}**</center></td>
                  </tr>
                </table>'''
                #print md.convert("# sample heading text")st.markdown(html,unsafe_allow_html=True)

4.新闻来源 WordCloud

如果没有单词云,处理文本的可视化仪表板永远不会真正完整,所以我想到添加一个单词云来了解特定来源的单词用法。

观察: 我们可以看到很多次副新闻使用“新的”、“经过测试的”这样的词。而《商业内幕》则大量使用“中国”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《商业内幕》、《时代》和《副新闻》中的词汇云比较。

技术细节: 下面是我用来创建这个蒙面字云的:

import cv2def create_mask():
    mask = np.array(Image.open("coronavirus.png"))
    im_gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
    _, mask = cv2.threshold(im_gray, thresh=20, maxval=255, type=cv2.THRESH_BINARY)
    mask = 255 - mask
    return mask**mask = create_mask()**def create_wc_by(source):
    data = fulldf[fulldf['source']==source]
    text = " ".join([x for x in data.content.values if x is not None])
    stopwords = set(STOPWORDS)
    stopwords.add('chars')
    stopwords.add('coronavirus')
    stopwords.add('corona')
    stopwords.add('chars')
    wc = WordCloud(background_color="white", max_words=1000, mask=mask, stopwords=stopwords,
               max_font_size=90, random_state=42, contour_width=3, contour_color='steelblue')
    wc.generate(text)
    plt.figure(figsize=[30,30])
    plt.imshow(wc, interpolation='bilinear')
    plt.axis("off")
    return plt**st.pyplot(create_wc_by(source),use_container_width=True)**

其他技术考虑

1.高级缓存:

在昨天刚刚发布的 0.57.0 的新 streamlit 发行说明中,streamlit 对st.cache进行了更新。这个版本的一个显著变化是“能够通过设置max_entriesttl参数来设置缓存函数的到期选项”。来自文档:

  • max_entries ( int 或 None ) —在缓存中保留的最大条目数,或者对于无界缓存为 None。(当一个新条目被添加到满缓存时,最旧的缓存条目将被删除。)默认为无。
  • TTL(float or None)—在缓存中保留条目的最大秒数,如果缓存条目不应过期,则为 None。默认值为无。

这可能有所帮助的两个用例是:

  • 如果您正在为您的应用程序提供服务,并且不希望缓存永远增长。
  • 如果您有一个从 URL 读取实时数据的缓存函数,并且应该每隔几个小时清除一次以获取最新数据

这就是在许多函数中使用的方法,以避免多次点击 API,同时防止它们变得陈旧。

例如,在 360 秒(即 6 分钟)的时间段内获取来自一个国家的顶级结果。

st.cache(ttl=360,max_entries=20)
def create_dataframe_top(queries,country):
    #Hits API Here

而来自 everything API 的完整结果是在一天内获取的。

[@st](http://twitter.com/st).cache(ttl = 60*60*24,max_entries=20)
def create_dataframe_last_30d(queries, sources):
    # hits API

2.部署:

我使用亚马逊免费 ec2 实例在 http://54.149.204.138:8501/部署这个应用程序。如果你想知道步骤,这里有:

** [## 如何使用 Amazon Free ec2 实例部署 Streamlit 应用程序?

10 分钟内将数据应用程序上传到网上

towardsdatascience.com](/how-to-deploy-a-streamlit-app-using-an-amazon-free-ec2-instance-416a41f69dc3)

还有一些注意事项:

  • 由于这是一个免费的服务器,它可能不会采取太多的负荷。
  • 我还没有彻底测试缓存例程。我只希望服务器上有限的内存不要出现内存错误。
  • 新闻 API 也是免费的。甚至在我尝试处理之后,可能还会有速率限制。

3.学问

对于迷路的人,你可能想先从最基本的开始。以下是我在 Streamlit 和 Plotly express 上的介绍性帖子。

[## 如何为数据科学家使用简单的 Python 编写 Web 应用?

无需了解任何 web 框架,即可轻松将您的数据科学项目转换为酷炫的应用程序

towardsdatascience.com](/how-to-write-web-apps-using-simple-python-for-data-scientists-a227a1a01582) [## Python 的一个线性图形创建库,带有汉斯·罗斯林风格的动画

动画,单线图。它拥有一切

towardsdatascience.com](/pythons-one-liner-graph-creation-library-with-animations-hans-rosling-style-f2cb50490396)

结论

在这里,我尝试创建一个关于冠状病毒新闻的仪表板,但它仍处于萌芽阶段,还有很多工作要做。

首先,它需要一台大型服务器。另一方面,需要大量时间来改进可视化和布局。还有很多测试。

此外,我们使用 HTML 和少量黑客以迂回的方式做了一些事情。Streamlit 中还有很多我喜欢的东西。我已经与 Streamlit 团队就他们将要引入的新功能进行了讨论,我将尽力让您了解最新情况。好消息是,布局选项是 Streamlit 正在开发的新功能的一部分。

你可以在我的 Github repo 上找到最终应用程序的完整代码。这是网上完整的应用

如果你想了解创建可视化的最佳策略,我想从密歇根大学调用一门关于 数据可视化和应用绘图 的优秀课程,它是一个非常好的 数据科学专业的一部分,本身带有 Python 。一定要去看看。

谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 媒体 关注我,或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。**

冠状病毒对股票市场的影响

原文:https://towardsdatascience.com/the-coronavirus-effect-on-the-stock-market-b7a4739406e8?source=collection_archive---------20-----------------------

浅析新冠肺炎对世界经济的威胁

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Alex bljan 在 Unsplash 上拍摄的照片

在 2020 年的最初几个月,世界面临着近代史上最大的威胁之一:一种新的冠状病毒正在全球传播,有可能成为疫情

谈到瘟疫,最需要担心的是健康,对于所有关于新冠肺炎的信息,我的建议是关注世卫组织网站,它包含了关于这种新疾病的最新和最可靠的信息。

然而,另一个可怕的方面是冠状病毒爆发将对世界经济产生的影响:许多分析师认为,这种传染病可能会带来严重的负面影响(甚至是长期影响)。

在这篇文章中,我关注了问题的经济方面:新冠肺炎对股票市场有什么影响?投资者认为最重要的事件是什么?媒体的作用是什么?让我们通过几个图表来看看大局。

数据

冠状病毒爆发是一个不断发展的情况:每 5 分钟就有一条新闻有助于更好地确定问题,很难保持领先。然而,整个事件被各种事件打断了。我找到了这个页面,它报道(并更新)了自传染病开始以来的主要事实。从这个列表中,我选择了那些我认为对我的分析最重要的元素:

**2019-12-31 => *"*First cases detected in China*"***2020-01-01 => *"*Wuhan market identified as outbreak hub*"* 2020-01-03 => *"*Passengers screened at Wuhan Airport*"* 2020-01-06 => *"*SARS, MERS and bird flu ruled out*"* 2020-01-07 => *"*Virus identified as coronavirus 2019n-CoV*"* 2020-01-09 => *"*Coronavirus genome sequence released*"* 2020-01-11 => *"*First coronavirus death reported*"* 2020-01-15 => *"*First confirmed coronavirus case in Japan*"*2020-01-2020-01-17 => *"*US has initiated screening of passengers arriving from Wuhan*"* **2020-01-20 => *"*Safety measures at major international airports*"***2020-01-21 => *"*US confirms first coronavirus case*"* 2020-01-22 => *"*WHO hold on declaring international health emergency*"* 2020-01-23 => *"*China implements travel bans*"* 2020-01-24 => *"*Starts building temporary hospital*"* 2020-01-26 => *"*WHO changes risk to 'high'*"* 2020-01-30 => *"*Russia closes 2,700 mile border*"* 2020-01-31 => *"*WHO declares global emergency*"* 2020-02-05 => *"*Japan confirms ten cases on cruise*"* 2020-02-09 => *"*COVID-19 overtakes SARS*"* 2020-02-12 => *"*Japan cruise cases increase to 174*"* 2020-02-13 => *"*Japan reports first COVID-19 death*"* 2020-02-19 => *"*New recoveries exceed new infections*"* 2020-02-21 => *"*Italy confirms fourth case*"* 2020-02-22 => *"*Italy reports one death*"* 2020-02-23 => *"*Italy records cases surge*"* **2020-02-27 => *"*Cases and deaths in Italy rise*"***2020-02-28 => *"*WHO raises global outbreak risk to 'Very High'*"* 2020-02-29 => *"*The US reports first death*"* 2020-03-02 => *"*Deaths cross 3,000 globally, confirmed cases cross 89,000*"*

在分析“什么”方面,我拉了几个股票指数: S & P 500 (美国) FTSE MIB (义大利)日经(日本) SSE 50 (上海) KOSPI (南韩) STOXX50E (欧元区),想法是观察不同市场对各种事件的反应。我在分析中提取的其他有趣数据是 VIX 指数,这是一个基于标准普尔 500 指数期权的股票市场波动预期的普遍衡量指标。所有这些信息都来自雅虎财经(FTSE MIB 数据集)。

另一组有用的信息来自新冠肺炎数据集,该数据集显示了每个国家每天的确诊病例、死亡和康复情况。我下载了 Kaggle 版本

最后,我想看看媒体对这场危机的影响。不幸的是,没有简单的方法来获取来自世界各地的最新消息,所以我需要自己收集数据。最后,我从 reddit.com 收集信息,更准确地说,是从《世界新闻》的子栏目收集信息。我拿了投稿标题(从 2019 年 1 月初到 2020 年 3 月 6 日)查了一下是不是在说冠状病毒;我知道这是“有多少媒体在谈论它”的一个微弱的代表,但这是我所能做的最好的了。为了收集 Reddit 数据,我使用了pushshift . ioAPI,数据集可从链接https://gofile.io/?c=AW4NiM获得。

市场爆发的主要事件

通过对时间序列的直观检查,我们可以观察到武汉冠状病毒 ( 2019–12–31)爆发后一段时间持续走低。例如,以下图表是上证 50(上海)和标准普尔 500(美国)的收盘价:****

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上证 50 的收盘价。红线标记了一些可能影响价格的重要事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标准普尔 500 的收盘价。红线标记了一些可能影响价格的重要事件

看着上面的图表,并考虑到其他指数也有类似的趋势,我们可以识别出似乎特别重要的两天:**2020–01–20****2020–02–23**;我们可以很容易地看到,在那些日子之后,所有指数都经历了低点(例如,在 STOXX50E(欧元区)也发生了同样的情况)😗***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

STOXX50E 的收盘价。红线标记了一些可能影响价格的重要事件

发生了什么事?1 月 20 日很多机场开始实施安全措施。接下来几天的头条都是关于这个的:冠状病毒已经国际化。让投资者感到害怕的是,有证据表明新冠肺炎教不再局限于中国边境,而是开始传播。令人惊讶的是我强调的第二个事件讲述了一个类似的故事:2 月 23 日(以及随后的几天)病毒开始持续折磨意大利

当然,市场本身并不是独立的,我们需要考虑这种相互依赖性:在全球经济中,如果一个市场下跌,其他市场可能会跟随。不管怎样,我从上述观察中得出的结论是,投资者最害怕的是病毒在国际上传播。

我们还可以看到 VIX 指数在意大利疫情爆发后刚刚上升(下图中的洋红色线条是意大利确诊病例数):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

蓝线是 VIX 指数,而洋红色线是意大利确诊病例数。随着意大利的危机越来越严重,VIX 开始崛起

最后,下表显示了从疫情爆发日到数据中最后一个可用日期之间考虑的所有指数的平均下降值(时间序列已经使用 3 天窗口的移动平均进行了平滑处理):

**+-----------+-------------------------------------+
|   INDEX   |**4th March 2020** vs **31st Dec 2019** Delta|
+-----------+-------------------------------------+
| NIKKEI    | **-10.7%**                              |
| STOXX50E  | **-10.1%**                              |
| KOSPI     | **-7.9%**                               |
| FTSE MIB  | **-7.55**                               |
| S&P 500   | -4.8%                               |
| S&P 500   | -4.8%                               |
| SSE 50    | -4.0%                               |
+-----------+-------------------------------------+**

日本指数似乎是表现最差的一个指数(-10.7%)。我对上证 50 指数(上海)的结果有些怀疑,它可能值得看一看指数构成(尽管中国处理危机相当不错,因此损失可能相当小)。

大众传媒

另一个要考虑的因素是媒体的作用。从时间序列来看,新闻似乎实际上正在产生影响,因为股票指数和大众媒体提及率是负相关的。我想说,这两个信号并不是独立的:股票市场暴跌的事实让新闻变得更响亮。不过,我认为这是一件有趣的事情:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

洋红色的线是时间序列,计算世界新闻子编辑上关于新冠肺炎的文章数量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

洋红色的线是时间序列,计算世界新闻子编辑上关于新冠肺炎的文章数量

仔细想想,这并不奇怪:我预计当信息开始传播时,大多数投资者会有所反应。我只考虑了提及的绝对数量,而没有按照“情绪”来划分新闻,因为不幸的是,“情绪”是众所周知的

这两个系列呈负相关的事实也可以从以下散点图中看出(标准普尔 500(美国)、KOSPI(南韩)):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

媒体的影响。X 轴代表股票指数,Y 轴代表世界新闻子栏目中与冠状病毒相关的文章数量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

媒体的影响。X 轴代表股票指数,Y 轴代表世界新闻子栏目中与冠状病毒相关的文章数量

同样,一个单独的 subreddit 可能是一个弱代理,一个更好的分析将涉及许多其他类型的提及(例如,推文和其他来源)。

结论

很遗憾,没什么好说的了。虽然中国的情况似乎正在稳定,但在欧洲的传播仍然令人担忧,尤其是从健康角度来看。

如果意大利的模式将在其他国家重演,我们可能会预计市场会以类似的方式做出反应,因此目前唯一能做的就是阻止或减缓危机蔓延,以保护健康和经济。

作为一名意大利人,我正带着一些担忧生活在我的国家,但我仍然相信政府和人民将克服这种令人难以置信的情况。让我们交叉手指,希望新冠肺炎会很快被击败,无论是身体健康还是经济健康。

注意:本文仅供参考。本文在任何情况下都不打算被用作或视为金融或投资建议、推荐或出售要约,或任何购买任何证券或其他形式的金融资产的要约。

看看这些其他的文章!

**** [## 聚类波洛克

杰森·布拉克绘画的聚类分析——如何利用 k-means 进行色彩分组

towardsdatascience.com](/clustering-pollock-1ec24c9cf447)****

亚洲的冠状病毒与语音技术

原文:https://towardsdatascience.com/the-coronavirus-vs-voice-technology-in-asia-78860d7893ae?source=collection_archive---------50-----------------------

新冠肺炎如何加速了可能永远改变通信的“语音技术时刻”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

东京。作者照片。

冠状病毒带来了各种各样的创新:韩国发明了免下车测试,立陶宛发明了 3D 打印免提门把手,在这一点上,几乎每个人都把他们的会议和社交活动转移到了 Zoom 这样的网络电话解决方案上。

但在冠状病毒期间袭击亚洲的最有趣的技术趋势之一是语音技术在日常生活中的快速实施和采用:智能扬声器和语音助手允许用户在不接触任何表面的情况下进行交流和交易。

韩国的电影院通过声控售票亭售票。Alexa 在日本的使用大幅增加。中国正在部署人工智能,使其每分钟能打 40 个电话追踪联系人。

突然间,许多亚洲企业意识到,在他们的产品或服务中加入声控元素,将有助于他们适应这个不断变化的时代。

似乎这个特殊的时刻将被视为“技术时刻”——一个危机加速社会变革的时刻,其速度远远超过我们的预期。

语音人工智能有助于避免触摸表面和传播病毒

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

北京的一个酒店机器人。作者照片。

由于冠状病毒被认为可能在表面持续长达 9 天,北京居民在 1 月份被要求戴上手套按电梯按钮,并尽量减少使用信用卡或现金——这凸显了像我们这样经常触摸手机是多么困难(和危险)。

在韩国类似指令的推动下,韩国三星用户现在可以将他们的智能手机带到任何一家三星商店进行“银河消毒服务”。

这就是语音技术的用武之地。如果你曾经在拥挤的杂货店里试着跑一趟杂货店,检查你的购物清单,进行移动支付,接听你配偶的电话,同时试图避免触摸你的手机,那么你可能至少会考虑尝试一下语音助手。

在新冠肺炎之前,语音控制技术已经在亚洲迅速发展

我们许多西方人第一次体验语音控制是通过苹果的 Siri,它于 2011 年在美国推出。在过去的十年里,Siri 已经有了六种亚洲语言版本(普通话、粤语、日语、马来语和泰语),竞争对手 Alexa 和谷歌助手也大举进军亚洲市场。

然而,亚洲的科技消费者并不局限于西方的选择。韩国、中国和日本也推出了几款自己的语音控制智能音箱。对于韩国 Naver 和中国百度等家喻户晓的公司来说,语音技术是自然而然的下一步,这些技术公司现在正受益于这一趋势。

几个因素使得亚洲成为语音技术特别成熟的市场。“[APAC]地区语音识别市场的高速增长归功于该地区快速发展的经济、年轻人口的存在、不断增长的可支配收入、对高级安全系统不断增长的需求以及越来越多的语音识别设备。”“细致的市场研究”的一份报告摘录说。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

中国苏州的聚会者。作者照片。

从亚洲呼叫中心转向聊天机器人和语音人工智能

冠状病毒也迫使菲律宾和印度等国家进行清算,这些国家提供了全球呼叫中心服务的很大一部分。当两个国家都出现严格的封锁时,呼叫中心都在努力生存。在让员工准备在家工作的同时,他们看到随着以前的客户转向使用聊天机器人和人工智能解决方案,损失越来越大。

印度科技投资者、外包集团印孚瑟斯(Infosys)前高管莫汉达斯帕伊(Mohandas Pai)对英国《金融时报》表示:“鉴于你在家工作,而且服务存在滞后,我们将使用更多人工智能、更多聊天机器人和更多自动化。这是永久性的变化,自动化将对这一领域产生深远影响。”

亚洲政府使用语音人工智能进行信息传递和联系人追踪

语音技术不仅令私营部门兴奋。亚洲各国政府正在与语音人工智能提供商合作,以更有效地联系和收集有关病毒传播的信息。

例如,语音技术开发商 iFlytek 在中国和韩国推出了人工智能自动呼叫系统,以帮助跟踪新型冠状病毒的传播。

“根据你的情况,建议你留在室内进行 14 天的隔离观察……我们将把你的信息发送到社区卫生中心进行跟踪,并请联系居民委员会寻求任何帮助,”人工智能机器人被训练说。

语音机器人通过多个问题收集和检查个人身份、健康状况和行踪等信息,可以在五分钟内拨打约 200 个电话,相比之下,手动操作需要两到三个小时。

语音助手的使用在全球范围内都在增加,但亚洲拥有独特的潜力

采用语音控制的趋势当然不仅限于亚洲:总部位于英国的 Voxly Digital 为亚马逊 Alexa 和谷歌助手开发语音应用程序,上个月报告称,48%的英国人越来越多地使用语音助手,因为冠状病毒的缘故。

然而,由于一些亚洲国家政府鼓励免提交易的举措,以及对技术非常友好的年轻人,亚洲国家尤其有可能大量采用这种技术。

中国、韩国和日本的居民也迅速采用了其他冠状病毒相关技术,包括接触者追踪应用程序。

更多的企业将转向语音人工智能来保护员工和客户的安全

市场研究公司 Techsponential 的技术专家 Avi Greengart 告诉法新社,随着公司现在面临新的健康和安全问题,他预计语音技术的商业用途将有更广泛的选择。

“展望未来,办公空间将需要向更多的免触摸控制发展,”Greengart 说。

当乐天文化工厂首席执行官 Won-Gyu Won 率先在乐天的电影院转向声控售票时,他考虑到了他的客户。韩国人将这些解决方案称为“untact”(非接触式)技术,并涌向有助于他们感到安全的企业。

花更多时间在家?这样你就可以花更多的时间使用你的智能音箱

亚洲消费者越来越多地使用语音技术的最后一个原因是:正如我们在伦敦的例子中看到的那样,许多亚洲人现在花更多的时间在家里。即使封锁被解除,韩国和台湾等国家仍牢记过去冠状病毒的爆发(包括 MERS 和 SARS ),他们知道呆在家里是保持安全的最佳方式。

对于这些家庭来说,Alexa(或小肚、克洛娃或 Kakao)不再只是他们的起床电话或晚上冥想——她现在在他们在家煮一日三餐时播放播客(或从整个亚洲的许多外卖应用程序中的一个订餐)。一个语音助手帮助从印度到日本的家庭找到他们所在地区感染的最新信息,并在家里订购理发工具。

我们花在语音助手上的时间越多,我们就越能感受到它们的便利。

小杜,小杜:告诉我们,因为冠状病毒,还有多少亚洲企业将增加语音控制功能?

我们期待找到答案。

萨拉·玛利亚·哈斯本是子午线语言学的创始人,该公司向科技公司提供亚洲语言数据和语言咨询。

深度神经网络推理时间的正确度量方法

原文:https://towardsdatascience.com/the-correct-way-to-measure-inference-time-of-deep-neural-networks-304a54e5187f?source=collection_archive---------5-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网络延迟是将深层网络部署到生产环境中的一个更重要的方面。大多数现实世界的应用程序需要惊人的快速推理时间,从几毫秒到一秒不等。但是,正确而有意义地测量神经网络的推理时间或延迟的任务需要深刻的理解。即使是经验丰富的程序员也经常会犯一些常见的错误,导致不准确的延迟测量。这些错误的影响有可能引发糟糕的决策和不必要的支出。

在本帖中,我们回顾了正确测量延迟时间应该解决的一些主要问题。我们回顾了使 GPU 执行独一无二的主要过程,包括异步执行和 GPU 预热。然后,我们共享代码样本,以便在 GPU 上正确测量时间。最后,我们回顾了在 GPU 上量化推理时间时人们会犯的一些常见错误。

异步执行

我们从讨论 GPU 执行机制开始。在多线程或多设备编程中,两个独立的代码块可以并行执行;这意味着第二个块可以在第一个块完成之前执行。这个过程被称为异步执行。在深度学习环境中,我们经常使用这种执行方式,因为 GPU 操作在默认情况下是异步的。更具体地说,当使用 GPU 调用函数时,操作被排队到特定设备,但不一定到其他设备。这允许我们在 CPU 或另一个 GPU 上并行执行计算。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。异步执行。:同步流程,流程 A 等待流程 B 的响应后才能继续工作。右图:异步进程 A 继续工作,不等待进程 B 结束。

异步执行为深度学习提供了巨大的优势,例如能够大幅减少运行时间。例如,在推断多个批次时,第二批次可以在 CPU 上进行预处理,而第一批次通过网络在 GPU 上进行前馈。显然,在推理时尽可能使用异步是有益的。

异步执行的效果对用户来说是不可见的;但是,当谈到时间测量时,它可能是许多令人头痛的原因。当您使用 Python 中的“时间”库计算时间时,测量是在 CPU 设备上执行的。由于 GPU 的异步特性,停止计时的代码行将在 GPU 进程完成之前执行。因此,计时将会不准确或与实际推断时间无关。请记住,我们希望使用异步,在这篇文章的后面,我们将解释如何在异步过程中正确地测量时间。

GPU 预热

现代 GPU 设备可以存在于几种不同的电源状态之一。当 GPU 未被用于任何目的并且持续模式(即,保持 GPU 开启)未被启用时,GPU 将自动将其功率状态降低到非常低的水平,有时甚至完全关闭。在低功耗状态下,GPU 会关闭不同的硬件,包括内存子系统、内部子系统,甚至计算核心和高速缓存。

任何试图与 GPU 交互的程序的调用将导致驱动程序加载和/或初始化 GPU。这种驱动程序负载行为值得注意。由于纠错码的清理行为,触发 GPU 初始化的应用程序可能会导致长达 3 秒的延迟。例如,如果我们测量一个网络的时间需要 10 毫秒,运行超过 1000 个例子可能会导致我们的大部分运行时间浪费在初始化 GPU 上。自然,我们不想衡量这样的副作用,因为时机不准确。它也不反映生产环境,通常 GPU 已经初始化或以持久模式工作。

由于我们希望尽可能启用 GPU 节能模式,因此让我们看看如何在测量时间的同时克服 GPU 的初始化问题。

测量推理时间的正确方法

下面的 PyTorch 代码片段展示了如何正确测量时间。这里我们使用 Efficient-net-b0,但是您可以使用任何其他网络。在代码中,我们处理上面描述的两个警告。在我们进行任何时间测量之前,我们通过网络运行一些虚拟示例来进行“GPU 预热”这将自动初始化 GPU,并防止它在我们测量时间时进入省电模式。接下来,我们使用 tr.cuda.event 在 GPU 上测量时间。这里使用 torch.cuda.synchronize()很关键。这行代码执行主机和设备(即 GPU 和 CPU)之间的同步,因此时间记录仅在 GPU 上运行的进程完成后进行。这克服了不同步执行的问题。

model = EfficientNet.from_pretrained(‘efficientnet-b0’)
device = torch.device(“cuda”)
model.to(device)
dummy_input = torch.randn(1, 3,224,224,dtype=torch.float).to(device)
starter, ender = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True)
repetitions = 300
timings=np.zeros((repetitions,1))
#GPU-WARM-UP
for _ in range(10):
   _ = model(dummy_input)
# MEASURE PERFORMANCE
with torch.no_grad():
  for rep in range(repetitions):
     starter.record()
     _ = model(dummy_input)
     ender.record()
     # WAIT FOR GPU SYNC
     torch.cuda.synchronize()
     curr_time = starter.elapsed_time(ender)
     timings[rep] = curr_timemean_syn = np.sum(timings) / repetitions
std_syn = np.std(timings)
print(mean_syn)

测量时间时的常见错误

当我们测量网络的延迟时,我们的目标是只测量网络的前馈,不多也不少。通常,即使是专家,也会在测量中犯一些常见的错误。以下是其中的一些,以及它们的后果:

1.在主机和设备之间传输数据。这个帖子的观点只是衡量一个神经网络的推理时间。在这种观点下,最常见的错误之一是在进行时间测量时,CPU 和 GPU 之间的数据传输。这通常是在 CPU 上创建张量,然后在 GPU 上执行推理时无意中完成的。这种内存分配需要相当长的时间,从而增加了推断的时间。这种误差对测量值的均值和方差的影响如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2 :测量时间时 CPU 和 GPU 之间传输的影响。:平均值和标准差的正确测量值(bar)。:每次调用网络时,输入张量在 CPU 和 GPU 之间传递时的均值和标准差。X 轴是计时方法,Y 轴是以毫秒为单位的时间。

2.不使用 GPU 预热。如上所述,GPU 上的第一次运行会提示其初始化。GPU 初始化可能需要 3 秒钟,当时间以毫秒为单位时,这将产生巨大的差异。

3.使用标准 CPU 计时。最常见的错误是在不同步的情况下测量时间。众所周知,即使是经验丰富的程序员也会使用下面这段代码。

s = time.time()
 _ = model(dummy_input)
curr_time = (time.time()-s )*1000

这当然完全忽略了前面提到的异步执行,因此输出不正确的时间。该错误对测量值的平均值和方差的影响如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3: 测量时间对 CPU 的影响。左侧:平均值和标准偏差的正确测量值(bar)。:进程不同步时的均值和标准差。X 轴是计时方法,Y 轴是以毫秒为单位的时间。

4.取一个样本。像计算机科学中的许多过程一样,神经网络的前馈具有(小的)随机成分。运行时间的差异可能很大,尤其是在测量低延迟网络时。为此,有必要对几个示例运行网络,然后对结果进行平均(300 个示例可能是个好数字)。一个常见的错误是使用一个样本,并将其称为运行时。当然,这并不代表真正的运行时间。

测量吞吐量

神经网络的吞吐量被定义为网络在单位时间(例如,一秒)内可以处理的输入实例的最大数量。与延迟不同,延迟涉及单个实例的处理,为了实现最大吞吐量,我们希望并行处理尽可能多的实例。有效的并行性显然依赖于数据、模型和设备。因此,为了正确测量吞吐量,我们执行以下两个步骤:(1)我们估计允许最大并行度的最佳批量大小;(2)给定这个最佳批量,我们测量网络在一秒钟内可以处理的实例数量。

为了找到最佳的批处理大小,一个好的经验法则是对于给定的数据类型达到我们的 GPU 的内存限制。这个大小当然取决于硬件类型和网络的大小。找到最大批量的最快方法是进行二分搜索法。当时间不成问题时,简单的顺序搜索就足够了。为此,我们使用 for 循环将批处理大小增加 1,直到实现运行时错误,这确定了 GPU 可以处理的最大批处理大小,用于我们的神经网络模型及其处理的输入数据。

找到最佳批量后,我们计算实际吞吐量。为此,我们希望处理多个批次(100 个批次就足够了),然后使用以下公式:

(批次数量 X 批次大小)/(以秒为单位的总时间)。

这个公式给出了我们的网络在一秒钟内可以处理的例子的数量。下面的代码提供了执行上述计算的简单方法(给定最佳批量):

model = EfficientNet.from_pretrained(‘efficientnet-b0’)
device = torch.device(“cuda”)
model.to(device)
dummy_input = torch.randn(optimal_batch_size, 3,224,224, dtype=torch.float).to(device)repetitions=100
total_time = 0
with torch.no_grad():
  for rep in range(repetitions):
     starter, ender = torch.cuda.Event(enable_timing=True),          torch.cuda.Event(enable_timing=True)
     starter.record()
     _ = model(dummy_input)
     ender.record()
     torch.cuda.synchronize()
     curr_time = starter.elapsed_time(ender)/1000
     total_time += curr_time
Throughput = (repetitions*optimal_batch_size)/total_time
print(‘Final Throughput:’,Throughput)

结论

精确测量神经网络的推理时间并不像听起来那么简单。我们详细介绍了深度学习实践者应该注意的几个问题,比如异步执行和 GPU 省电模式。这里展示的 PyTorch 代码演示了如何正确地测量神经网络中的时序,尽管有前面提到的警告。最后,我们提到了一些导致人们错误测量时间的常见错误。在未来的帖子中,我们将更深入地探讨这个主题,并解释现有的深度学习分析器,这些分析器使我们能够实现更准确的网络时间测量。如果您对如何在不影响准确性的情况下减少网络延迟感兴趣,我们邀请您阅读 Deci 白皮书中有关该主题的更多信息。

最初发布于https://deci . ai/the-correct-way-to-measure-inference-time-of-deep-neural-networks/

职业拳击运动员臂长与腿长关系的分析

原文:https://towardsdatascience.com/the-correlation-between-arm-and-leg-length-in-mma-fighters-a-tutorial-on-data-analysis-in-r-3936efe12cb4?source=collection_archive---------59-----------------------

R 中的数据分析演练

我最近发表了一篇关于综合格斗(MMA)拳手的臂长和格斗成功的论文。我发现臂长更长的拳手在战斗中的优势非常小,也就是说,他们赢的更多。我遇到的一个问题是,我不能排除腿长是影响因素的假设,因为综合格斗运动员的腿长数据不是常规收集的。我们认为手臂更长的拳手也有更长的腿,这大概也是一个优势。我找不到任何关于拳手手臂和腿长之间相互关系的数据,所以我就把它留在那里。

我最近发现了一个叫做的 MMA 联盟,职业拳手联盟。它有大约 78 名战士的臂展和腿长数据。我想看看 MMA 拳手手臂和腿长之间的相关性可能会很有趣。这不是一个大样本,所以做任何比相关性更奇特的事情都不太可能提供信息(我的论文有大约 1600 架战斗机!).我们预计手臂和腿的长度之间有很大的相关性,所以 78 架战斗机很可能足够好了。例如,一个使用自由软件的简单功效分析 Gpower 告诉我们,要有 99%的机会检测到|0.6|或更大的相关性(如果存在的话)只需要 35 个数据点,如果你像我们一样有一个单尾假设,则需要 30 个数据点。78 架战斗机进行 1-尾测试,我们有 99%的能力检测到低至|0.41|的相关性。

我手动浏览了所有战斗机页面,并将臂展和腿长数据写入 Excel。数据可以在我的臂展文章的开放科学基金会页面上找到。我做了一个简单的分析,心想见鬼,为什么不把它做成一个 R 教程给感兴趣的人呢!

首先,我们从我的 OSF 目录下载数据,并读入 R:

download.file(‘[https://osf.io/4d2pv/download','arm_leg_PFL.csv'](https://osf.io/4d2pv/download','arm_leg_PFL.csv'))
data= read.csv(‘arm_leg_PFL.csv’)

首先让我们制作二维直方图,看看它们是如何分布的,它们是如何变化的(记住你需要先安装这些软件包!).我们使用 GGplot2 包,因为它给出了漂亮的图形,使用 gridExtra 包,因为它允许我们同时呈现多个图形。

library(ggplot2)
library(gridExtra)plot1 = ggplot(data, aes(x = armspan))+
geom_histogram(binwidth = 1, fill = ‘darkolivegreen’)+
ggtitle(‘Histogram of fighter armspans (inches)’)plot2 = ggplot(data, aes(x = leg_length)) +
geom_histogram(binwidth = 1, fill = ’navy’)+
ggtitle(‘Histogram of fighter leg lengths (inches)’)grid.arrange(plot1, plot2, nrow=1)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者提供的图片

变量有点偏斜,不像我们希望的那样呈正态分布,或者在一般人群样本中预期的那样(身体比例趋于正态分布)。当数据呈正态分布时,许多统计方法效果最佳。也就是说,这两个变量似乎都没有任何可能给分析带来问题的极值,尽管有些野兽有 47 英寸的腿!

这两种测量方法的尺度差异很大,可能是因为臂展包括双臂的长度和胸宽(双臂张开时中指指尖之间的距离),而腿长可能是一条腿从髋骨到脚的距离。inseam 测量的评级似乎有点高,因为大多数人的测量值为 36+,这对于 6 英尺(1.83 米)的人来说是一个体面的腿长,而这些战斗机中的许多都比这短得多。但是谁知道呢。

现在我们让他们互相争斗。Geom_point 添加数据点,geom_smooth 添加趋势线。Method = 'lm '表示我们想要一条直线,但是还有其他选择。

ggplot(data, aes(x = leg_length, y = armspan))+
geom_point(colour = ‘slateblue’)+
geom_smooth(method=’lm’)+
ggtitle(‘Scatter plot of fighter leg length vs armspan’)+
theme(plot.title = element_text(hjust = 0.5))+
xlab(‘Leg length (inches)’)+
ylab(‘Armspan (inches)’)

代码中的“主题”部分只是以标题为中心(审美偏好)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者提供的图片

他们看起来有很好的相关性。但是科学不仅仅是图表!让我们更正式地测试它。我们同时使用皮尔逊相关性和斯皮尔曼相关性,因为前者更有效,后者对异常值更稳健。如果它们相差很大,这可能表明异常值正在干扰我们的分析(尽管从图表来看,这不太可能)。

cor.test(data$armspan, data$leg_length, method = ’pearson’, alternative = 'greater')
cor.test(data$armspan, data$leg_length, method = ’spearman’, alternative = 'greater')

注意,如果你省略了“方法”参数,R 将只做一个皮尔逊参数。“替代=更大”意味着我们有一个 1 尾假设,即它们是正相关的。

相关性差别不大,所以离群值不会真的把事情弄糟。皮尔逊相关系数为+0.47,斯皮尔曼相关系数为+0.48。两者 P 值均< 0.001,高度显著。鉴于我们的样本量肯定大到足以检测这些相关性,极低的 p 值并不令人惊讶。

有趣的是 r = +0.47 比我预测的要低一点!对于上下文,臂展和身高之间的相关性大约为 r = 0.8。这可能有一些原因,例如测量误差,特别是如果战士或他们的团队进行了测量并向联盟报告。这将引入噪声,降低任何相关的幅度。臂展也包括胸宽,而腿部尺寸似乎反映了单腿的尺寸。如果我们有手臂的长度,那可能会显示出与腿的长度有更大的相关性。但遗憾的是,在现实世界中,你很少有完美的数据,尤其是当你从互联网上搜集数据时。

所以,臂展之间的相关性比预期的要小,但仍然相当大。在更大的数据集中测试这一点会很棒,所以我们可以看看腿的长度对获胜机会的影响,如果有人知道这种数据,请告诉我!

机器学习基础设施中“计算债务”的成本

原文:https://towardsdatascience.com/the-cost-of-computational-debt-in-machine-learning-infrastructure-228a95516047?source=collection_archive---------37-----------------------

如何最大化您的 ML 服务器的利用率和可伸缩性

机器学习和深度学习很贵,这不是新闻。虽然将人工智能融入组织的商业价值非常高,但它通常无法抵消将这些模型应用到业务中所需的计算成本。机器学习和深度学习是非常计算密集型的,有人认为,除非云或内部计算成本降低,否则人工智能创新将得不偿失,尽管它具有前所未有的商业价值。

在《连线》杂志的一篇文章中,麻省理工学院的研究科学家和《深度学习的计算极限》的作者 Neil Thompson 提到,从谷歌到脸书的许多组织已经建立了影响力大、节省成本的模型,但由于计算成本使模型无利可图,这些模型未被使用。汤普森表示,在最近的一些会谈和论文中,从事特别大型和尖端人工智能项目的研究人员开始抱怨,他们无法测试多个算法设计,或者重新进行一项实验,因为成本太高。

组织需要计算效率更高的方法来推进创新,并提高人工智能工作的投资回报率。然而,高计算成本和对更高效计算的关注并不应该受到所有的指责。事实上,GPU 加速的基础设施和其他云提供商的重大进步,以前所未有的速度大幅提高了训练最复杂的人工智能网络的能力。2020 年 5 月, DeepCube 发布了其基于软件的推理加速器,可以大幅提高任何现有硬件上的深度学习性能。换句话说,正在开发计算解决方案,以满足机器学习和深度学习不断增长的需求。人工智能创新的无声杀手是现有计算的未充分利用,以及“计算债务”不断增加的成本。

什么是“计算债务”?

人工智能领导者可能会惊讶地发现,阻碍机器学习投资回报率的主要因素之一是 GPU、CPU 和内存资源的利用不足。公司在计算上投资了数百万美元,这些计算有可能大幅加速人工智能工作负载并提高性能,但最终只利用了其中的一小部分,有时低至这些强大资源的 20%。计算分配和实际利用率之间的差距令人震惊,可能会让公司付出比他们意识到的更多的代价。计算、分配和利用率之间的差距我们称之为“计算债务”。指的是分配和容量之间的“浪费”。

在下图中,您可以看到绿色表示平均利用率,黄色表示某一时间的分配情况。当一个工作负载运行时,它通常只利用 GPU 的一部分,而另一部分则被其他潜在工作负载阻止。灰色区域是容量,即现有的可用计算能力,无论是 GPU、CPU 还是内存。灰色区域是所有闲置和未充分利用的计算。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:cnvrg.io

什么导致了“计算债务”?

机器学习和深度学习是计算密集型的,管理起来很复杂,这使得这种计算债务很难减少。人工智能基础设施团队面临的最大挑战之一是理解如何提高利用率,并以最大化消耗的方式管理资源,以及提高机器学习项目的投资回报率。“计算债务”的一些主要原因是:

  1. 基础设施团队缺乏人工智能项目可见性
    人工智能项目的基础设施成本每年增长 2 倍,然而 IT 团队缺乏工具来管理、优化和预算人工智能资源,无论是在本地还是在云中。大多数 IT/DevOps 主管缺乏对特定时间 GPU/CPU 和内存的利用率、分配和容量的了解。这使得控制消费和减少低效率成为不可能。
  2. 不断增长的“计算债务” 随着 AI 计算需求变得更加复杂,计算分配和实际利用率之间的差距越来越大。平均而言,组织可能只消耗其总资源的 30%左右。这使得近 70%的计算处于闲置状态,浪费了公司数千甚至数百万美元。
  3. 无法识别效率低下的工作 基础架构团队无法轻松识别一直未充分利用 GPU/CPU 的工作负载。如果没有收集到的历史工作负载数据,就无法分析和识别运行效率低下的工作负载。由于缺乏可见性,很难提高利用率,也很难控制工作负载的优先级。
  4. 生产力中断
    未充分利用的 GPU 被阻止用于其他工作,增加了数据科学家完成项目的等待时间。这导致更多的时间浪费在等待 GPU 的可用性上,此外还浪费了资源。同时,还有其他闲置的资源可以用于其他工作。
  5. 缺乏标准化和统一性
    通常,团队无法将一项工作与其利用率相关联。没有标准的可视化工具允许您查看某个时间点的作业分配、利用率和容量。这使得识别低效作业和优先处理浪费的工作负载变得困难。机器学习已经达到成熟阶段,人工智能基础设施战略是必要的,以便增长。
  6. 无法控制优化策略 虽然一些团队可能能够识别效率低下的问题,并为优化的基础架构策略制定计划,但几乎没有工具来执行这些策略。IT/DevOps 团队需要控制人工智能工作负载,以优化资源管理。如果无法确定作业优先级、配置计算模板以及监控工作负载分配和利用率,就无法实现实质性的改进。

减少“计算债务”的策略

这个问题没有明确的解决方案,但是有一些方法可以提高资源管理的效率。以下是一些可以提高计算资源利用率的策略。

  1. 投资最先进的 GPU 加速人工智能基础设施 GPU 加速技术已经取得了长足的进步。硬件和软件深度学习加速解决方案已经出现,可以提供前所未有的性能。研究 GPU 加速的最新可用解决方案,以采用真正现代的人工智能基础设施。
  2. 采用混合云基础架构 结合公共云、私有云和内部资源,在运行人工智能工作负载方面提供敏捷性和灵活性。由于人工智能工作负载之间的工作负载类型差异很大,因此构建混合云基础架构的组织能够更灵活地分配资源和定制规模。您可以通过公共云降低资本支出,并提供高计算需求时期所需的可扩展性。在具有严格安全要求的组织中,添加私有云是必要的,并且随着时间的推移可以降低运营支出。混合云可帮助您获得改善资源预算所需的控制力和灵活性。
  3. 利用 估算 GPU/CPU 内存消耗的工具根据微软研究中心对微软 4960 个失败的 DL 作业的研究,8.8%的作业失败是由 GPU 内存耗尽引起的,这在所有深度学习特定故障中占最大类别。已经开发了许多评估工具来帮助规划 GPU 内存消耗,以减少这些故障。此外,如果您能够收集利用率数据,您可以使用这些历史数据来更好地预测每个季度的 GPU/CPU 和内存需求。
  4. Scale MLOps 介绍一种简化您的 ML 工作流程并使科学和工程角色之间的转换标准化的方法。由于 IT 和 DevOps 负责部署和管理工作负载,因此在运行不同的作业时拥有清晰的沟通渠道非常重要。适当的调度工具和策略化资源模板也可以改善人工智能工作负载的资源管理。
  5. 最大限度地提高利用率,减少“计算债务” 为了提高利用率,有必要将计算债务作为基础架构团队和数据科学团队的 KPI。设法减少计算负担并提高利用率的组织将在人工智能竞赛中茁壮成长。

结论

很少有解决方案能够最大限度地提高基础架构团队对 GPU/CPU 和内存消耗的可见性,从而提高利用率。虽然业界正在快速构建更高效的硬件和软件来解决计算债务的威胁,但我们还有很长的路要走。事实是,大多数组织都坐拥数百万美元的未充分利用的计算。通过使用您所拥有的,并改善资源管理,组织将实现其人工智能基础设施的大规模可扩展性。通过在你的现代人工智能基础设施中采用这些策略,你会发现计算的充分利用是可以实现的。专注于基础设施优化的公司将看到其人工智能工作的投资回报率增加,并在竞争中获得竞争优势。

数据质量差的代价

原文:https://towardsdatascience.com/the-cost-of-poor-data-quality-cd308722951f?source=collection_archive---------34-----------------------

坏数据让数据科学家更努力,而不是更聪明!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人工摄影Unsplash 上拍摄

令人惊讶的是,如今我们大多数人都明白,当谈论成为市场领导者时,人工智能是必由之路,不管你进入的是哪个垂直领域。但是为了成功地开发和采用人工智能解决方案,有一条路要走,而且这条路并不容易!数据是决定人工智能项目是否成功的最重要的关键因素之一(除了所有围绕 ML 解决方案的技术深度之外),但是我们是否考虑到我们需要高质量的数据?

话虽如此,我有两个问题:

什么时候可以说*“我有足够的数据”*?

到底什么是优质数据?

让我们深入这些问题吧!🚀

够了够了!

这是我猜想每个人,包括数据科学家都想知道的问题!但是虽然听起来很简单,其实不然。*“越多越好”*并不完全理想,毕竟,您可以拥有几十年的数据,但如果您一直在没有真正目的的情况下收集这些数据,那么这些数据很可能无法回答您的企业所面临的所有问题!

实际上,有许多方面会影响所需的数据量,从要探索的用例到问题的复杂性,甚至是所选择的算法。

所以没有神奇的数字,但是假设有足够甚至大量的数据总是很危险的!

💎数据的“精华”

完美的数据是不存在的说到从现实生活系统中收集的记录!不要假设这一点,也不要指望数据科学团队同意你的假设,你可能会错🌝—但我们可以在将它输入模型之前,尽可能地接近它。

但在此之前,我们先来定义一下什么是高质量的数据。数据质量可以定义为基于准确性、完整性、一致性、可靠性等因素的数据度量,尤其是是否是最新的。

那么这是否意味着相同的数据对于不同的用例将具有相同的质量呢?

**不,**尽管如此,定义一个独立于用例的基础质量指标是可能的,并且会给我们一个关于数据需要多少工作的很好的想法。

而数据质量和机器学习有什么联系?

由于其本质,机器学习模型对数据的质量非常敏感,嗯,你可能已经听说过这个说法*“垃圾进垃圾出”。*由于需要大量的数据,即使训练数据中最小的误差也会导致输出中的大规模误差。我完全推荐你看一下这篇关于“高质量数据集对于开发机器学习模型至关重要”的文章

对于那些希望开始投资基于人工智能的解决方案的人来说,数据质量是必不可少的。您是否已经有了解决数据质量问题的策略,或者您仍然认为这些问题不存在?

💰你愿意花多少钱?

首先,从生产率的角度来看,形势似乎很黯淡。您是否知道您的数据科学家花费 80%的时间寻找、清理和尝试组织数据,只留下 20%的时间用于开发和分析 ML 解决方案?专业人员在可以部分自动化的工作上浪费了大量昂贵的时间。让我在这里列出一个价格标签,在美国,一名数据科学家的平均工资大约是 12 万美元,而你只需要一个人就可以做很少的事情,甚至什么也做不了。)。不要忘记,数据科学工作是高度合格的,除了乏味之外,执行数据预处理可能会导致沮丧和数据团队中的大量人员流失。

另一方面,使用数据质量差的数据也会带来很多直接的财务负面影响。

  • 首先,存储和保存坏数据既耗时又昂贵。
  • 第二,据 Gartner 称,“数据质量差对组织的平均财务影响估计为每年 970 万美元。”最近 IBM 还发现仅在美国,由于数据质量差,企业每年损失 3.1 万亿美元。不良数据和使用这些数据的不良结果会导致最终用户和客户失去信心。也就是说,与不良数据相关的客户流失是一个现实。
  • 最后,但不是最不重要的,这可能令人震惊— 数据不准确和质量差正在抑制人工智能项目。很多时候,人工智能项目开始时并不知道是否有足够的数据,或者现有的数据是否适合用例。有很多假设甚至没有研究数据,这导致了对一个从一开始就注定失败的项目的大量投资。另一个事实是,大多数公司未能整合外部信息,要么是因为它不可访问(由于隐私),要么只是因为它非常耗时,而这种第三方数据可以告诉你比你想象的更多的关于你自己的业务的信息。

结论

数据质量是 AI 的先决条件,*而不是相反!*也就是说,如果你的数据质量很差,那么分析和人工智能计划就毫无价值可言。

数据质量差会导致分析和人工智能项目花费的时间比预期的长(大约长 40%),这意味着它们将花费更多的成本,甚至最终无法实现预期的结果(70%的人工智能项目)。随着超过 70%的组织依赖数据来推动其未来的业务决策,数据问题不仅会耗尽资源(财务和人力),还会耗尽提取新的有价值的业务洞察力的能力。因此,如果你想投资人工智能,首先要开发、定义和实施合适的工具,以实现卓越的数据质量策略。

法比亚娜 是 CDOy data

改善了人工智能的数据

YData 为数据科学家提供了一个以数据为中心的开发平台,帮助他们开发高质量的合成数据。

机器学习中公平的反直觉性

原文:https://towardsdatascience.com/the-counter-intuitiveness-of-fairness-in-machine-learning-6a27a6a53674?source=collection_archive---------48-----------------------

审查实现公平的统计框架

过去发生的事情可以作为未来的良好预测,这一想法是机器学习(ML)取得巨大成功背后的核心原则。然而,这种“过去作为前奏”的预测行为的方法正在受到越来越多的审查,因为它在偏见、歧视和公平方面被认为是失败的。例如,苹果信用卡算法给女性的信用额度比男性少;指控一个广泛使用的评估再犯风险的软件是歧视黑人被告。这些报道不仅占据了新闻头条,还激怒了我们与生俱来的公平感。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的看不见的历史拍摄的照片

在刑事司法中,关于现有的反歧视法律是否足以监督预测算法,存在持续的争论。此外,有一个新兴的研究团体正在研究我们如何在这些法律下维护预测算法的公平性(例如 Barocas & SelbstHuq )。正如最近针对系统性歧视的骚乱和抗议所表明的那样,做错的后果是严重的。随着我们越来越多的生活变得自动化,我们迫切需要加快努力,让这项技术为整个社会所接受。

在这篇文章中,我将回顾一个关于如何给 ML 带来公平的想法。乍一看,这个想法似乎有悖常理,但正如几篇文章所阐明的,它有坚实的统计和法律基础。

这篇文章的目标读者是对 ML 有基本了解,并且对我们如何在 ML 中实现公平性感兴趣的人。

什么是公平?

公平是一种社会理想。正如一位学者所说,

只要人们同意,公平就是人们所说的一切。

在一个自由的社会里,这种理想既有争议又不断发展。因此,在马丁·路德·金的文献中,我们对公平有如此多的定义也就不足为奇了(例如&维尔马【鲁宾】纳拉扬)。

尽管缺乏关于公平的明确协议,但美国有完善的法律保护个人的基本权利,尽管他们之间存在差异。最值得注意的是,种族、性别和宗教等差异代表了一组“受保护的群体”,使个人能够得到“公平”的对待,特别是在就业领域(1964 年《民权法案》第七章)和刑事司法领域(第十四修正案的平等保护条款)。

实现公平的当前方法

由于这些法律和过去歧视的历史,使 ML 和一般预测算法公平的主流方法是消除使用来自受保护群体的数据。杨和 Dobbie 编制了一份刑事司法系统中最常用的八种商业工具的清单,并发现所有这些工具都没有将种族(一个受保护的群体)作为输入。

然而,消除作为输入的保护基团是不够的。正如许多学者指出的,我们仍然只剩下相关变量,这相当于使用受保护变量。例如,邮政编码可以代表种族。然而,对于这些是否也应排除在外,却没有一致意见。在同一个商业可用工具列表中,Yang 和 Dobbie 发现只有八分之三的工具不使用相关变量。换句话说,大部分最常用的预测算法,5/8 (62.5%)可以被认为违反了保护具有受保护属性的个人的既定法律。这些都是潜在的诉讼等待发生!

当前的方法可以总结如下。

基准(包括所有变量):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

常见(不包括受保护组):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

限制性(排除保护组和相关变量):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

算法制定者的困惑是,根据变量与受保护群体的相关性进一步消除变量,最终将使算法变得几乎无用。例如,在 Yang 和 Dobbie 的研究中,他们发现他们的所有输入变量都与受保护变量相关。因此,遵循主流的消除受保护属性的方法的精神将会剥夺 ML 算法的任何输入!

我们的问题是:

我们如何将公平引入 ML,同时保持其效用?

实现公平的统计框架

Pope 和 Sydnor 引入了一个简单的统计框架来消除受保护变量及其替代变量的影响。杨和多比在审前预测中使用并进一步检验了这一框架。

它是这样工作的:假设我们正在做一个预测。例如,被告在受审前再次犯罪的可能性。根据这一预测,我们可以决定是否应该在审判前释放被告。

在这个框架中,我们用三种变量来表示被告的特征:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Protected (Xp):代表受保护组的变量。例如种族、性别、民族血统、宗教。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 相关(Xc):与受保护变量相关的变量。例如邮政编码或教育水平,这可以代表种族。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 不相关(Xu):代表与受保护群体及其代理人不相关的数据的变量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为简单起见,作者假设使用线性回归(普通最小二乘法)的预测模型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

换句话说,预测等于常数(β-0)加上无保护变量、相关变量、受保护变量及其权重系数(β-1、β-2、β-3)之和,再加上误差项(E)。作者还讨论了如何在提出的框架下将该模型扩展到更复杂的非线性模型。

在此框架下进行预测的方法包括 2 个步骤:

步骤 1:训练预测模型并获得系数估计值。即上式中的β-0、β-1、β-2 和β-3。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二步:使用第一步的系数估计值和受保护变量的平均值进行预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就是全部了!这种方法不仅看似简单,而且是反直觉的,因为我们使用受保护的变量及其代理作为算法的一部分来确保公平性!

为什么会这样?

让我们从第二步开始,因为这一步包含了主要的变化,实际上非常直观。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

除了使用估计系数之外,这一步与第一步的唯一区别是,我们使用数据的平均值,而不是使用具有受保护特性的数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更准确地说,我们使用的是受保护群体的平均向量。这意味着仅在受保护特征方面不同的两个个体将不会收到不同的预测。例如,如果种族是一个受保护的变量,那么模型将不会知道个人的种族概况。据说它对受保护变量的影响“视而不见”。这正是我们想要从一个公平的 ML 算法中得到的。

但是相关项呢?也就是说,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这难道不包括受保护变量的代理效应吗?答案是否定的,因为第一步。波普和西德诺是这样解释的:

首先,让我们看看对普遍接受的方法的估计:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

即一个常数与不相关和相关变量及其相关系数之和;因为包含了相关变量,我们知道它包含了代理效应。

现在将其与基准方程的估计值进行比较:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

假设β-3 大于零,我们看到γ-2 不可能等于β-2。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是因为在(ii)中,我们用受保护变量进行估计,而在(I)中,我们不使用受保护变量进行估计。我们的直觉告诉我们,系数γ-2 携带着代理的估计能力。换句话说,γ-2 携带了一个术语,允许 Xc 与 Xp 相关联。

让我们进一步打开包装。由于 Xc 与 Xp 相关,我们可以假设:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用经济学文献中的标准省略变量偏差公式,我们可以用(iii)代替基准方程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将这与普遍接受的方法(I)相比较,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

忽略常数和误差项,我们现在看到γ-2 估计值接近β-2 加上β-3 乘以α-C,其中β-2 是不相关的权重系数(作者称之为正交系数),α-C 是加权相关系数。也就是说,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过在步骤 1 中包含受保护的变量 Xp,我们实际上使 Xc 的系数独立于 Xp。杨和杜比是这样说的:

“估计该基准模型允许我们获得未被代理效应污染的相关特征的预测权重,这正是因为我们显式地包括了 X_protected。因此,这第一步估计确保我们从包含 X_correlated 中消除所有代理效应”(第 34 页)

因此,我们可以确信β-2 没有被相关物质“污染”。换句话说,它不包含受保护变量的代理效应。

这有多准确?

Pope 和 Sydnor 使用误差平方和作为度量,分析了统计框架的不同公式的预测准确性。结果表明,他们提出的框架是第三准确的,仅次于基准模型和通用模型,但比限制性模型更准确:

  1. 基准模型
  2. 通用模型
  3. 建议模型
  4. 限制性模型

正如预期的那样,基准模型和通用模型比提议的模型更准确,因为它们包括了受保护变量及其代理的使用。然而,由于这种做法的法律地位脆弱,算法制定者可能需要使用一个更具限制性的模型(前提是他们能够找到可以被认为与其他变量不相关的变量)。提议的模式提供了一种避免诉诸限制性方法的方式。

杨和多比将这些模型应用于纽约市 2008 年至 2013 年间的大型审前案件数据集。他们还煞费苦心地对照审前案件,看被告是否真的出庭。结果是大约 20 万名被告的数据语料库。

他们的发现证实了 Pope 和 Sydnor 的准确性发现。此外,虽然我们确实为了公平而牺牲了准确性,但 Yang 和 Sydnor 表明,不同算法之间的准确性差异非常小。例如,在 50%的释放率下,未出庭率为:

  • 基准:8.35
  • 普通:8.38
  • 建议:8.40

在所检查的数据集下,所提出的模型只会导致 8 个额外的故障出现。

在法律上是否合理?

既然这个框架使用来自受保护群体的数据,它是否有可能违反法律?例如,第十四修正案的平等保护条款在种族方面强加了两项基本保护(见 Huq ⁴):

  1. 种族分类
  2. 种族化的意图

那么如果在这个框架下使用种族,是否违反了歧视法?杨和杜比认为没有。尽管该框架使用了保护组,但它这样做是为了实现“种族中立的预测”。

法院对基于“受保护特征”的分类进行“严格审查”(即上述第 1 条)。然而,杨和多比认为,宪法“禁止所有种族分类,除非是作为对特定不法行为的补救措施”。他们认为这个框架

“不应受到严格的审查,因为种族的使用/考虑并不意味着根据某一特定种族群体的成员资格来区别或区别对待个人,而是恰恰相反。”。(第 37 页)

即使它被标记出来,他们认为它也经得起任何法律审查,因为该程序的目的是“为了补救和纠正代理效应和历史偏见而定制的,这些效应和偏见可以‘嵌入’到算法中……”(即上文#2,见第 37 页)

然而,杨和多比承认,“对算法中直接效应和代理效应的潜在统计特性缺乏了解,可能会导致一个天真的观察者得出结论,认为这两个建议都是非法的,因为它们违反了广泛接受的禁止使用或考虑受保护特征的规定。”(第 36 页)我们----反洗钱联盟和相关团体----有责任以法院和广大公众容易理解的方式教育和宣传这一框架。

结论

人们常说人工智能,尤其是 ML,将会深刻地改变世界。然而,我们与这一新生技术建立了什么类型的关系,我们的生活将如何改变,仍有待确定。最近对预测算法的抵制,例如荷兰禁止使用福利欺诈预测工具、美国禁止人脸识别软件以及英国取消 A-levels 成绩预测,显示了我们作为一个自由社会为打造一个所有人都能接受的共生关系所做的努力。

我们不能在不了解我们的过去的情况下跌跌撞撞地走向未来,我们也不应该扼杀那些给我们带来前所未有的机会、让社会变得更好的技术。为了让 ML 走向成熟,我们需要学习、教育,并对这种技术应该具有什么样的理想特征做出明智的决定。

“人只有在你让他看清自己是什么样的时候,才会变得更好。”安东·契诃夫

在这篇文章中,我强调了一个统计框架,旨在为 ML 带来公平性,同时保留算法的有用性。尽管乍一看有些违反直觉,但波普和西德诺尔的框架已经被证明在理论上和法律上都是合理的。与法律上有争议的模型相比,使用该框架创建的模型确实损失了一定程度的准确性;然而,它这样做是为了消除来自受保护变量及其代理的输入的影响。

这项工作也提出了一个重要的问题,即“准确性”在 ML 中意味着什么。例如,准确性是一个简单的算法做出正确预测的数量的问题吗?正如波普和西德诺尔所说,问题变成了:

“是正确预测结果(“平均正确”)更重要,还是正确权衡不同的特征(“在边缘正确”)更重要?”

这样看的话,前面提到的很多算法公平性的激烈争论,本质上可以认为是侧重点的不同。这样的争论在哲学和伦理学中有很长的历史。毫无疑问,只要我们对我们赞同的理想有分歧,这些辩论就可能继续下去。因此,这里强调的工作值得更多关注。它提供了一个实用的解决方案,理论上满足法律的要求,而不会严重损害算法的预测能力。

参考

[1]许明,塞德里克·阿宁,史蒂文·r·石英.权利与善:公平与效率的分配正义和神经编码【https://science.sciencemag.org/content/320/5879/1092(2008 年)

[2] Crystal Yang & Will Dobbie,算法下的平等保护:一个新的统计和法律框架,可得 3462379 (2019)

[3] Devin G. Pope 和 Justin R. Sydnor,在统计特征模型中执行反歧视政策,3 AEJ:政策 206 (2011 年)

[4] Huq,Z,阿齐兹。算法刑事司法中的种族公平,《杜克法律杂志》,第 68 卷, (2019)

感谢马克·大卫、瑞安·理查兹和罗恩·埃斯佩思对早期草稿的评论。

郡:R 中简单的街道地图

原文:https://towardsdatascience.com/the-county-simple-street-maps-in-r-89cce35d05e5?source=collection_archive---------35-----------------------

R 中的街道地图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者,见下文。

我把这篇文章命名为“郡”在西弗吉尼亚州的家乡,人们经常根据他们的管辖权或他们获得权力的地方来称呼政府实体。我们把警察称为“法律”,把公共卫生或税收等各种职能称为“国家”。今天,我在画西弗吉尼亚州费耶特维尔县的地图。甚至当你进城交税的时候,你也会说“去看看县城”这对于家乡的人们来说是正确的,可能对于其他农村地区也是如此。

从我年轻的时候起,我就对地图、地球仪(尤其是有贸易路线的旧地球仪)和一般的地图学着迷。所以,我很高兴最近在 Twitter 上看到了几个融合了数据可视化的地图制作的例子。

我的灵感来自于对斯普林菲尔德、密苏里州康纳·罗斯柴尔德和北卡罗来纳州阿什维尔的美妙演绎。查看他们的更多信息。谢谢你们!!

收集工具

除非您正常使用映射数据和函数,否则下面的库并不常见。这是我的第一张地图,所以我需要安装这些。使用remotes包需要更少的依赖,因此在安装其他包时通常比devtools更快。

  • osmdata包含用于绘制道路、桥梁和水路的开放街道地图数据;费耶特维尔展示了数据中的一些漏洞——更多内容见下文
  • ggspatial为我们地图上的北向罗盘提供功能
  • showtext支持在 ggplot2 图形中使用谷歌字体
#library(remotes) 
#remotes::install_github("ropensci/osmdata") #remotes::install_github("paleolimbot/ggspatial") #remotes::install_github("yixuan/showtext")

r 用户对下面常见的疑点都很熟悉,尤其是tidyverse。特别是,我使用ggmap包来绘制空间数据所需的形状文件(Kahle 和 Wickham 2013)。

library(tidyverse) 
library(osmdata) 
library(showtext) 
library(ggmap) 
library(ggExtra) 
library(ggspatial) 
library(showtext)

一旦加载了osmdata包,你可以查看下面给定标签的可用特性。桥标签上的注释:它将返回“是”。这是令人困惑的,直到我看了数据,因为似乎没有桥梁类型的区别-在这种情况下没有害处。

位置,位置,位置

为了绘制费耶特维尔的街道地图,我需要知道它的地理位置。下面的代码将返回定义费耶特维尔地区的两个纬度和两个经度。这些坐标构成了下图的基础。

fa_wv <- getbb("Fayetteville West Virginia") 
fa_wv

摄取 OSM 数据

接下来,我从定义大、中、小街的开放街道地图包中提取实际的街道数据(取自上面的帖子)。除了街道,费耶特维尔还有两个举世闻名的特色——新河及其世界级的白水和新河峡谷桥(西半球最长的拱桥,以前是世界上最长的)。你可以在我上面的“关于”页面从不同的角度看到它。我也从 OSM 的数据中获取了这些数据。这段代码摘自 Connor 和 Josh 的优秀示例。

下面的代码提供了数据视图。滚动查看地图上值得高亮显示的其他街道或特征也很有用。

View(big_streets[["osm_lines"]]) 
View(med_streets[["osm_lines"]]) 
View(small_streets[["osm_lines"]]) 
View(bridge[["osm_lines"]]) 
View(river[["osm_lines"]])

定义要在ggplot2中绘制的特征集很有用。下面的代码提取了用于绘制给定位置的各个街道的数据。记住,我们从上面的费耶特维尔拉街道。

us_19 <- big_streets[["osm_lines"]] %>% 
  filter(ref == "US 19") 
wv_16 <- med_streets[["osm_lines"]] %>% 
  filter(ref == "WV 16") 
fayette_station <- small_streets[["osm_lines"]] %>% 
  filter(name =="Fayette Station Road") 
west_maple_ave <- small_streets[["osm_lines"]] %>% 
  filter(name == "West Maple Avenue") 
maple_ave_west <- small_streets[["osm_lines"]] %>% 
  filter(name == "Maple Avenue West") maple_lane <- small_streets[["osm_lines"]] %>% 
  filter(name == "Maple Lane") 
north_court_st <- med_streets[["osm_lines"]] %>% 
  filter(name == "North Court Street") nr_gorge_bridge <- bridge[["osm_lines"]] %>% 
  filter(name == "New River Gorge Bridge") 
new_river <- river[["osm_lines"]] %>% 
  filter(name == "New River")

字体

我对任何与字体和写作有关的东西都是绝对的极客。showtext包提供了在ggplot2图形中使用谷歌字体等功能。我喜欢添加一个字体就像告诉它是哪一个,然后用你的代码命名它一样简单。下面的showtext_auto函数告诉ggplot2使用这些字体自动渲染文本。

## Loading Google fonts (https://fonts.google.com/) font_add_google("Libre Baskerville", "baskerville") font_add_google("Playfair Display", "playfair") 
showtext_auto()

在地图上标出一些名胜很好。下面的代码为此提供了数据。我从谷歌地图上获得了下面的经度和纬度数据。上面引用的例子使用了rvest来抓取位置,但是嘿,费耶特维尔并没有那么大!!

凉爽的地方

essential <- tribble( ~place, ~lon, ~lat, 
  "Bridge Brew Works", 81.11368, 38.01651, 
  "Court House", -81.103755, 38.053422, 
  "Pies & Pints", -81.105514, 38.050783, 
  "Wood Iron Eatery", -81.102757, 38.053110 )

就这些说几句。虽然下面没有标出,但桥酿酒厂很容易酿造出本州最好的啤酒。特别是贮藏啤酒,令人印象深刻(由于发酵和贮藏对温度的严格要求,贮藏啤酒通常比麦芽啤酒更难酿造,但我离题了)。法耶特法院是一座历史建筑,拥有所有的盛况和魅力,是真正的县城——所有重要的业务都在那里进行。

T4 有最好的披萨和啤酒。它供应前面提到的 Bridge Brew Works 啤酒,以及来自 Hawk Knob 苹果酒& Mead 的优质苹果酒。我强烈推荐鸡翅。最后,Sheri 和我爱吃早午餐,县城最好的地方是木铁饮食店。我在北美的咖啡圣地——西雅图获得了博士学位。Wood Iron 的咖啡与西雅图的咖啡店不相上下,高度赞扬我是一个咖啡势利者(茶势利者也是,但那是另一个帖子)。你会发现他们在那里出售世界闻名的 J.Q. Dickinson 盐,有普通版本和烟熏版本。非常适合牛排、烧烤或配餐。大教堂咖啡馆有很好的食物,但咖啡还有待改进。如果你在费耶特维尔漂流、爬山或骑自行车,那么你需要去看看这些地方——它们彼此都在步行距离内。我希望当我们都从新冠肺炎瘟疫中走出来的时候,这些地方仍然存在。

剧情,终于!

在我压抑自己被困在俄克拉荷马州的新冠肺炎诱导的隔离状态之前,继续剧情。大多数情况下,下面的图是典型的ggplot2设置,除了我使用的非典型 geom,geom_sf从一个形状文件绘制数据,这是映射的必要条件。

我对ggspatial包进行了一次调用,以在地图的简化版上获得想要的北向罗盘。我试图改变“北”箭头的样式和颜色,但无济于事。不知道这是一个错误,还是我,但这就是为什么这个符号只出现在左边的地图上。

solar_light <- ggplot() + 
  geom_sf(data = big_streets$osm_lines, inherit.aes = FALSE, 
    color = "#585858", size = .8, alpha = .8) + 
  geom_sf(data = med_streets$osm_lines, inherit.aes = FALSE, 
    color = "#585858", size = .6, alpha = .6) + 
  geom_sf(data = small_streets$osm_lines, inherit.aes = FALSE, 
    color = "#585858", size = .4, alpha = .3) + 
  geom_sf(data = fayette_station, inherit.aes = FALSE, 
    color = "#d75f00", size = .6, alpha = .6) + 
  geom_sf(data = west_maple_ave, inherit.aes = FALSE, 
    color = "#d70000", size = .4, alpha = .5) + 
  geom_sf(data = maple_ave_west, inherit.aes = FALSE, 
    color = "#d70000", size = .4, alpha = .5) + 
  geom_sf(data = north_court_st, inherit.aes = FALSE, 
    color = "#0087ff", size = .6, alpha = .6) + 
  geom_sf(data = nr_gorge_bridge, inherit.aes = FALSE, 
    color = "#5f8700", size = .8, alpha = 1) + 
  geom_sf(data = new_river, inherit.aes = FALSE, 
    color = "#00afaf", size = 1, alpha = 1) +
  ggspatial::annotation_north_arrow(location = "tl", 
    which_north = "true", height = unit(5, "mm")) + 
    coord_sf(xlim = c(-81.150, -81.060), 
    ylim = c(38.010, 38.080),   expand = FALSE) + theme_void() + 
  geom_point(data=essential, aes(x=lon, y=lat), size = 1.5,
    alpha=.8, fill="#d75f00", color="#d75f00", pch=19, 
    inherit.aes = F) + 
  theme(panel.background = element_rect(fill = "#ffffd7"))

注意,我喜欢的地方的位置是在theme_void之后用我从谷歌地图复制的经度和纬度编码的。与 Connor 和 Josh 的主要例子不同的是,我使用 Ethan Schoonover 开发的曝光调色板来曝光地图的调色板。我是你的超级粉丝。马克·艾维的日晒备忘单对了解调色板的工作方式大有帮助。下面是日晒黑暗版本的情节代码。除了背景颜色没有什么不同。

solar_dark <- ggplot() + 
  geom_sf(data = big_streets$osm_lines, inherit.aes = FALSE, 
    color = "#585858", size = .8, alpha = .8) + 
  geom_sf(data = med_streets$osm_lines, inherit.aes = FALSE, 
    color = "#585858", size = .6, alpha = .6) + 
  geom_sf(data = small_streets$osm_lines, inherit.aes = FALSE, 
    color = "#585858", size = .4, alpha = .3) + 
  geom_sf(data = fayette_station, inherit.aes = FALSE, 
    color = "#d75f00", size = .6, alpha = .6) + 
  geom_sf(data = west_maple_ave, inherit.aes = FALSE, 
    color = "#d70000", size = .4, alpha = .5) + 
  geom_sf(data = maple_ave_west, inherit.aes = FALSE, 
    color = "#d70000", size = .5, alpha = 1) + 
  geom_sf(data = north_court_st, inherit.aes = FALSE, 
    color = "#0087ff", size = .6, alpha = 1) + 
  geom_sf(data = nr_gorge_bridge, inherit.aes = FALSE, 
    color = "#5f8700", size = .8, alpha = 1) + 
  geom_sf(data = new_river, inherit.aes = FALSE, 
    color = "#00afaf", size = 1, alpha = 1) + 
  coord_sf(xlim = c(-81.150, -81.060), 
    ylim = c(38.010, 38.080), expand = FALSE) + 
  theme_void() + 
  geom_point(data=essential, aes(x=lon, y=lat), size = 1.5,
    alpha=.8, fill="#d75f00", color="#d75f00", pch=19, 
    inherit.aes = F) + 
  theme(panel.background = element_rect(fill = "#1c1c1c"))

最后,我想把这些图放在一起。这是我第一次使用patchwork包,但它真的很好。语法比旧的grid.arrange函数简单得多,它本身就相当简单。

library(patchwork) 
solar_fa <- solar_light + solar_dark solar_fa + plot_annotation( 
  title = “Fayetteville, WV”, 
  subtitle = “38.053°N / 81.104°W”) & 
  theme(plot.title = element_text(size = 50, 
                                  family = “baskerville”,
                                  face=”bold”,
                                  hjust=.5), 
        plot.subtitle = element_text(family = “playfair”, 
                                     size = 30, 
                                     hjust=.5, 
                                     margin=margin(2, 0, 5, 0))) ggsave(file=”fayetteville_str_map.jpg”, 
       units=”in”, 
       width = 6,
       height=4.5)

patchwork软件包也使得注释完成的情节变得容易,无论是整体还是小部分。我也终于谈到了字体。我喜欢老式的,甚至是中世纪的字体。谷歌字体提供了“Libre Baskerville”和“Playfair Display ”,分别取自 18 世纪和 19 世纪的本地字体。使用 Playfair 字体,我也可以得到我喜欢的老式数字,尤其是像所有权地图这样的东西。

瓦拉!!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于 OSM 的数据,我只想说一句。在地图的右上角,你会看到一条直线。那是新河峡大桥。然而,连接它和费耶特维尔的高速公路 US 19 却不在现场。US 19 穿过费耶特维尔向西延伸,出现在图表的最底部,以绿色显示,就像大桥一样。这是一个重大的疏忽,因为 US 19 是从布拉克斯顿公司到贝克利南部的主要公路,连接州际公路 I79I64I77 。它是州际公路系统的一部分,也是美国东部的紧急疏散路线之一。即使数据总体良好,也要小心。

原载于 2020 年 3 月 27 日https://www.samuelworkman.org

参考

卡尔、大卫和哈德利·韦翰。2013." Ggmap:用 Ggplot2 实现空间可视化."R 轴颈5(1):144–61。https://journal . r-project . org/archive/2013-1/kahle-Wickham . pdf

新冠肺炎概念漂移,使用悉尼渡轮活动数据

原文:https://towardsdatascience.com/the-covid-19-concept-drift-using-sydney-ferry-activity-data-32bbff63cb9f?source=collection_archive---------41-----------------------

CV-19 创造了消费者行为的突然转变,影响了营销数据和 ML 模型。学习如何识别和解决这些问题。

马伯骞 & 德鲁·贾勒特

全球冠状病毒疫情已经并仍在影响着全球大多数行业,以及我们许多人。因此,我们的行为——消费者行为——已经发生了变化,与之相关的营销数据也发生了变化。当生活恢复正常时,希望越快越好🤞,我们会看到消费者行为的重新调整还是一种新型行为的引入?

许多预测模型的一个共同的重要假设是,用于训练模型的数据与生产中输入的数据相似。概念漂移是当我们试图预测的事物的数据发生变化时使用的术语。发生这种情况的原因有很多。例如:

  • 欺诈者可能会更改电子邮件的内容以通过垃圾邮件过滤器。
  • 一个产品现在在不同的市场有售,新用户有不同的使用习惯。
  • 随着时间的推移,由于正常的磨损,测量传感器可能会变得嘈杂或不准确。
  • 新促销或广告的新奇效果会逐渐消失。
  • CV-19 疫情改变了消费者的行为。

提出问题,CV-19 污染了你的数据吗?或者——考虑到疫情的长度——它带来了一组新的数据来分析吗?无论哪种方式,重要的是认识到将会有概念漂移,引入新的数据挑战并降低预测 ML 模型的准确性。

因此,现在让我们采取一些措施来解决与我们的数据有关的任何问题,以及未来的证据。

首先,这篇文章的作者打个招呼。

嗨,我是维克。我在新加坡工作,是谷歌的一名数据科学家,在那里我致力于提高我们的关键客户和合作伙伴的数据成熟度和能力。此前,我是美国的一名工程师。

嗨,我是德鲁。我是谷歌的客户解决方案工程师,帮助我们的广告客户充分利用他们的网站、应用和数据。

悉尼渡轮之旅

4 月 3 日,谷歌发布了 CV-19 社区移动报告,这是一组汇总的匿名见解,显示了不同地理位置的移动趋势。看看澳大利亚的数据,与标准基线相比,公共交通的流动性趋势下降了-63%。

显然(对我们大多数受这个疫情影响的人来说)!但这很好地说明了行为的转变。请注意与标准基线进行比较的重要性,我们稍后将解释原因。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者拍摄——悉尼渡口

为了这篇文章,我们来看看德鲁的日常通勤——可以说是世界上最好的交通方式——悉尼轮渡服务。相比之下,维克多坐了 4 次地铁🤷。

opendata.transport.nsw.gov.au 服务提供澳洲新南威尔士州渡轮分接数据(代表个人进入&离开渡轮码头)。假设我们正在构建一个预测活动的模型。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者制作的图像—随时间变化的渡轮数据图

数据从 2016 年 7 月到 2020 年 3 月,显示出明显的季节性趋势,每年 1 月的活动高峰与悉尼夏季和新年前夕的活动高峰相对应。然后在三月初,世界卫生组织宣布了一个疫情,这反映在二月和三月之间服务下降了 57%(哇,这与谷歌社区移动性报告非常吻合!).

让我们以此为基础建立一个可行的 3 步方法,我们可以遵循它来纠正我们的 ML 模型如何解释数据— 1。识别,2。解决,3。自动化。

第一步。(做好准备)识别正在发生的漂移

我们怎么可能首先知道有问题呢?通常情况下,这是当数据不再符合过去的趋势。这可能会随着时间的推移而缓慢发生,或者就这些运输服务而言,可能会突然发生。

为了准备控制基线,我们可以绘制所有历史(或训练)数据,并根据过去的趋势预测未来的活动。我们在这里使用 ARIMA(自回归综合移动平均)方法完成了这项工作(更多信息,请查看这篇由 Lak Lakshmanan 撰写的关于使用 BigQuery 分析新冠肺炎的有用文章)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者制作— ARIMA 轮渡数据预报

绿色虚线代表我们的基线。即 2020 年 1 月之前的实际历史数据,以及 2020 年 1 月之后的预测数据。我们使用的 ARIMA 方法返回预测的置信上限和下限,当实际结果(蓝线)超出这些界限时,很明显可能有问题。尤其是从 2 月到 3 月。

数据随时间漂移有几种方式。是突然的还是渐进的?是永久的还是暂时的?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者制作的图像——概念漂移模式

  • 再次出现。行为变化随后恢复正常,类似于季节性,例如,公路建设在夏季分流交通。
  • 循序渐进。缓慢但持久的变化,例如采用拼车和减少对轮渡服务的需求。
  • 峰值和衰减。衰减较慢的突然变化;常见于病毒式、短暂的新闻或媒体内容,例如《权力的游戏》大结局。
  • 突然转变。行为跳跃,例如完全的旅行限制。

在我们的摆渡例子中(我确信大多数 CV-19 受影响的数据),我们看到了一个突然的变化,并且有希望衰减。然而,鉴于疫情持续的时间长度,加上后疫情时代消费者行为可能出现的新的渐进变化,我们可能会继续看到与基线不同的结果,这需要加以解决。

热衷于多花时间多学习?

用于检测时间序列数据中的结构变化的方法是变化点检测,变化点是数据趋势开始变化的时间段。这可以每周自动进行,为检测未来的问题做好准备。

随着时间的推移,ML 模型的准确性也可能会降低(希望您正在监控这一点)。像可解释人工智能这样的工具为理解正在发生的事情提供了一个很好的视角,即特定(不正确)预测背后的解释是否仍然可信,或者是否存在以前没有的潜在问题?这些参考了 Shapley 值来理解特征的重要性。

第二步。解决数据漂移

我们可以采用许多方法来解决概念漂移,有些方法比其他方法更先进。另外,根据漂移的类型,不同的方法会更相关。

这篇文章的目标是给你留下一个可实现的短期胜利,来应对我们已经看到的 CV-19 的突然变化。有鉴于此,我们将通过数据称重和/或数据开窗来解决漂移问题。

称重数据

称重数据的优势在于,我们可以继续使用我们之前使用的历史训练集,只是现在允许模型识别与最近事件不太相关的旧项目。此外,CV-19 有可能会再次出现(我们希望不会!)在这种情况下,保存和使用历史数据可以确保我们为长期成功做好准备。

为了了解这一点如何应用于轮渡数据,我们可以考虑在引入新航线(F8 凤头鹦鹉岛航线)时纠正总计数活动的突然增加。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者制作的图像-一段时间内的渡轮数据图

通过对较新的数据给予更大的权重,并随着数据变老而降低权重,根据它们与当前事实的偏离程度来衡量分数。允许模型理解更多的相关事件。实现这一点的最简单的方法是给最近的后漂移事件加权 1,给较早的前漂移事件加权 0。

数据开窗

也就是说,通过在一组固定的窗口上聚合,将数据窗口化到实例中,这有助于消除突然的漂移。此外,如果您热衷于保留历史数据,权重仍然可以应用于实例。你可以阅读更多关于这个项目通量电容器的博文。

在图中有一个固定窗口以设定的间隔移动,以减少新旧行为之间的漂移。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者制作的图像—说明一个固定的窗口

要了解这如何应用于渡轮数据,让我们使用 6 个月的固定窗口,对每个窗口中的总活动进行平均。如果我们试图使用所有历史数据预测未来的活动,我们的预测将因 2018 年 1 月之前的低活动而有所偏差。使用 6 个月的窗口可以让我们的估计对总活动/流量的跳跃做出更快的反应,并且总体上更准确。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者制作的图像-一段时间内的渡轮数据图

热衷于多花时间,多学习?

计算权重时,还可以考虑使用指数衰减方法,较小的权重对模型的贡献较小。

为了更进一步,可以使用大量模型的集合,使用旧的和新的数据集进行训练。然后可以应用加权多数算法从一组预测中得出结果。如果我们希望数据“恢复正常”,这可能是有用的。

第三步。自动化再培训

这是不可避免的,我们需要保留我们的模型,因为用户的行为有所不同。当然,我们可以选择手动重新训练我们的模型,但这是一个为成功而设置的好机会,并让它自动发生?

根据我们想要应用的策略,有几个不同的选项。

连续自适应

换句话说,每个新数据点通过固定的滑动窗口或加权方案来更新模型,如步骤 2 中所讨论的。对于固定的滑动窗口,最旧的数据点将被忽略。

在悉尼轮渡的数据中,我们可能只看到最近的一组季节性数据。这是一种更简单的方法,尽管我们仍然需要实验来找到合适的窗口大小或加权方案。

触发适应

当检测到概念漂移时,可以触发模型进行重新训练。例如,这可能是使用一直到最后一个变化点的数据重新构建预测,或者增量调整数据窗口的大小(如果漂移更剧烈,则缩小;如果没有检测到漂移,则扩大)。

在图中注意到窗口在增长,而相关数据仍在累积。然而,在 T = 2 之后,已经积累了足够的不同数据,并且从检测到概念漂移时开始创建新的窗口。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者制作的图像—说明自适应窗口

热衷于多花时间,多学习?

当检测概念漂移时,考虑一下你所检测的变化的触发阈值应该是多少,以及模型应该如何适应。

当谈到自动化流程时,Google Cloud 中的 Cloud Composer 工具(它部署了 Apache Airflow)是一种基于一组处理数据和重新训练模型的触发器来建立持续集成工作流的强大方法。谷歌云解决方案页面的 CI/CD 下也有一些有用的快速入门和 codelabs。

总结

如你所见,有很多方法可以解决概念漂移。在这篇文章中,我们主要关注 CV-19 疫情引起的突然漂移的解决方案。希望你能从中获得一些快速的成功,以及一些更先进的想法,供你在未来阅读。

感谢阅读。请在评论中反馈并让我们知道你的进展。

Cox 比例风险模型

原文:https://towardsdatascience.com/the-cox-proportional-hazards-model-35e60e554d8f?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

什洛莫·沙莱夫在 Unsplash 上拍摄的照片

生存数据的回归模型

我之前写过如何计算生存数据的卡普兰-迈耶曲线。作为一个非参数估计量,它在快速查看数据集的生存曲线方面做得很好。然而,它不能让你做的是模拟协变量对存活率的影响。在本文中,我们将重点关注 Cox 比例风险模型,这是生存数据最常用的模型之一。

我们将深入讨论如何计算估计值。这是有价值的,因为我们将会看到,估计值只取决于故障的排序,而不是它们的实际时间。我们还将简要讨论一些特殊于生存分析的因果推断的棘手问题。

生存函数和风险率

我们通常根据如下的存活曲线来考虑存活数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机生成数据的生存曲线

在 x 轴上,我们以天为单位表示时间。在 y 轴上,我们有(一个估计值)人群中“存活”到那个时间的受试者的百分比(技术上,比例)。Survive 可以是比喻的,也可以是字面的。可能是人是否能活到某个年龄,机器是否能在一定时间内不出故障,也可能是某人在失业后是否会失业一段时间。

至关重要的是,生存分析的复杂性在于一些受试者没有观察到他们的“死亡”。在收集数据时,他们可能还活着,机器可能还在运行,或者有人可能还在失业。这种观察被称为“右删截”,处理删截意味着生存分析需要不同的统计工具。

我们用 S 表示幸存函数,它是时间的函数。其输出是在时间 t 存活的受试者的百分比。(再次强调,从技术上讲,它是介于 0 和 1 之间的一个比例,但我会交替使用这两个词)。为了简单起见,我们将做一个技术性的假设,如果我们等待足够长的时间,所有的受试者都会“死亡”

我们将用类似于 ij 的下标来索引主题。整个群体的故障时间将在时间变量 t 上用类似的下标表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

另一个需要考虑的微妙之处是,我们是将时间视为离散的(比如一周接一周)还是连续的。从哲学上讲,我们只能以离散的增量来度量时间(比如说,精确到秒)。通常情况下,我们的数据只会告诉我们某一年是否有人死亡,或者某一天某台机器是否出现故障。为了使阐述尽可能清晰,我将在离散的和连续的案例之间来回切换。

当我们试图对协变量(如年龄、性别、种族、机器制造商)的影响进行建模时,我们通常会对理解协变量对风险率的影响感兴趣。危险率是在给定时间 t 的故障/死亡/状态转换的瞬时概率,条件是已经存活了那么长时间。我们将把它记为λ(t)。将时间视为离散的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

离散时间的生存函数

其中 f 是在时间 t 失效的总概率密度。我们可以通过在概率密度“函数”中允许 delta 函数来统一离散和连续的情况。因此,对于连续情况,结果λ = f/S 是相同的。

我们来固定一个例子。让我们考虑一个临床试验的背景,在这个临床试验中,一种药物最初导致疾病进入缓解期。当受试者的疾病开始发展时,我们会说药物对受试者“失效”。最后,假设每周测量受试者的疾病状态。那么,如果λ(3) = 0.1,这意味着对于给定的受试者,如果他们在第 3 周之前仍处于缓解状态,则有 10%的可能性,他们的疾病将在第 3 周开始发展。其余的 90%将保持缓解状态。

接下来,总概率密度函数 f 就是 S 对时间的导数。(还是那句话,如果时间是离散的, f 只是一些δ函数的和)。这意味着

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

风险函数是 S 的对数的导数

这意味着,如果我们知道风险函数,我们可以求解 S 的微分方程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据风险函数的生存函数

如果时间是离散的,delta 函数的和的积分就变成了每个离散时间的危险的和。

好了,这总结了我们需要的符号和基本概念。让我们继续讨论模型。

非参数、半参数和全参数模型

正如我前面说过的,我们通常对风险率λ的建模感兴趣。

在非参数模型中,我们对λ的函数形式不做任何假设。卡普兰-迈耶曲线是这种情况下的最大似然估计。不利的一面是,这使得很难模拟协变量的任何影响。这有点像用散点图来理解协变量的影响。不一定像线性回归这样的完全参数模型那样有用。

在完全参数模型中,我们假设λ的精确函数形式。关于全参数模型的讨论本身就是一篇完整的文章,但是值得简单讨论一下。下表显示了三种最常见的全参数模型。每一个都被下一个概括,从 1 到 2 到 3 个参数。危险函数的函数形式显示在中间一栏。风险函数的对数也显示在最后一列。所有参数(ɣ,α,μ)都假定为正,除了在广义威布尔分布中μ可以是 0(复制威布尔分布)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看对数可以看出,指数模型假设风险函数是常数。威布尔模型假设,如果α >为 1,则增加;如果α=1,则保持不变;如果α <为 1,则减少。广义威布尔模型以与威布尔模型相同的方式开始(开始时 ln S = 0)。在那之后,一个额外的项μ出现了。

这些模型的问题在于它们对数据做了强有力的假设。在某些情况下,可能有理由相信这些模型非常适合。但是有了这些和其他几个选项,由于模型的错误设定,得出错误结论的风险很大。

这就是为什么 Cox 比例风险,一个半参数模型如此受欢迎。没有对风险函数的形状进行函数假设;相反,函数形式的假设是关于协变量单独的影响。

Cox 比例风险模型

Cox 比例风险模型通常以时间 *t、*协变量向量 x 和系数向量β的形式给出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Cox 比例风险模型

其中λₒ是时间的任意函数,基线危害。与标准线性回归一样,指数中包含 X 和β的点积。无论协变量的值如何,所有受试者都有相同的基线风险λₒ.此后,根据协变量进行调整。

结果的解释

假设我们已经将 Cox 比例风险模型与我们的数据进行了拟合,其中包括

  1. 为每个主题指定时间的列
  2. 指定受试者是否被“观察”(失败,或者,在我们的优选示例中,疾病进展)的栏。值 1 表示受试者的疾病进展。值为 0 意味着在最后一次观察时,疾病没有发展。这项观察被删改了。
  3. 协变量 x 的列。

拟合之后,我们将得到β的值。例如,为简单起见,假设只有一个协变量。β=0.1 的值意味着协变量增加 1 会导致在任何给定时间疾病进展的概率约为 10%。确切的值实际上是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

β=0.1 时危险增加的精确值

对于小的β值,β值本身是危险增加的精确近似值。对于更大的β值,必须计算精确的量。

β=0.1 的另一种表达方式是,随着 x 的增加,x 每增加 1,危险以 10%的增加。较大的 10.52%来自于(连续)复利,就像复利一样。

此外,β=0 意味着没有影响,β为负意味着随着协变量的增加,风险降低。注意,与标准回归不同,这里没有截距项。取而代之的是截距被吸收到基线危险λₒ中,这也是可以估计的(见下文)。

最后,假设我们已经估计了基线风险函数,我们可以构造幸存者函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基线函数被提升到来自协变量的 exp(xʹβ因子的幂。在解释基线生存函数时应该小心,它大致相当于常规线性回归中的截距项。如果协变量已经居中(平均值为 0),那么它代表“平均”受试者的存活函数。

估计 Cox 比例风险模型

20 世纪 70 年代,英国数学家 David Cox 提出了一种无需估计基线风险λₒ.就能估计β的方法同样,基线危害可以在事后估算。如前所述,我们将会看到,重要的是观察到的故障的排序,而不是时间本身。

在开始评估之前,有必要讨论一下领带。因为我们通常只观察离散增量的数据,所以两个故障可能同时发生。例如,两台机器可能在同一周发生故障,而记录只在每周进行一次。这些联系使得对形势的分析变得相当复杂,却没有增加多少洞察力。因此,我将在没有联系的情况下得到估计。

回想一下,我们的数据是由在离散时间观察到的一些故障组成的。让 R(t)表示在时间 t 时“处于危险中”的人群。如果我们研究中的受试者在时间 t 前失败(例如,疾病发展),他们就不“处于危险中”此外,如果我们研究中的受试者在时间 t 之前的某个时间对他们的观察进行了审查,他们也没有“处于危险中”

按照通常的方式,我们希望构建一个似然函数(给定协变量和系数,我们观察到的数据的概率是多少),然后优化它以获得最大似然估计量。

对于我们观察到受试者 j 出现故障的每个离散时间,假设故障出现,则出现故障的概率如下。在 j 时刻,对所有处于危险中的受试者进行求和。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 1)对象 j 而不是另一个对象在时间 j 失败的概率

请注意,基线危险λₒ已经退出!非常方便。为此,我们构建的可能性只是一个部分可能性。也请注意,时间根本没有出现。受试者 j 的术语仅取决于哪些受试者在 j 时刻仍然活着,而这又仅取决于受试者被审查或观察失败的顺序。

当然,部分可能性只是这些项的乘积,我们观察到的每一个失败都有一个(没有截尾观察的项)。

然后,对数部分似然是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 2)部分对数似然函数

使用标准的数值方法进行拟合,例如在 python 包[statsmodels](https://www.statsmodels.org/stable/duration.html)中,估计的方差-协方差矩阵由 Fisher 信息矩阵的(逆)给出。这里没什么令人兴奋的。

估计基线幸存者函数

既然我们已经估计了系数,我们可以估计生存函数。这与估算卡普兰-迈耶曲线非常相似。

我们假设用 i 索引的项α。在时间 i 处,基线存活者曲线应减少一个分数α,表示在时间I处失败的处于危险中的受试者的比例。换句话说

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了计算α的最大似然估计量,我们考虑来自在时间 i 失败的受试者 i 的似然贡献,以及来自在时间 i. 被审查的受试者的贡献

对于在时间 *i,*失败的受试者,概率由他们在时间 i 存活的概率减去他们在下一时间 i+1 存活的概率给出。(我们暂时假设时代是有序的)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 3)来自观察到的故障的可能性贡献

相反,如果他们在时间 *i、*被审查,贡献就是他们在 *i、*之后还活着的概率,即他们还没有死。这只是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 4)来自截尾观察的似然贡献

有一个额外的术语来自被观察的受试者(即被观察到失败而不是被审查)。对数似然变成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 5)基线幸存者函数的对数似然

我在跟踪端点(I 对 i+1)方面有点草率,但一切都会好的。

我们观察到失败的科目只有α项。对α-j 求微分,并假设没有联系,我们从左边的总和中只得到 j 时刻活着的受试者的贡献,从右边的项中得到一个贡献。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 6)似然函数关于 j 项的偏导数

将此值设为 0 意味着我们可以使用β的估计值作为几个方程的解来获得α的最大似然估计值,每个方程对应一个观察失败的受试者:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 7)求解α估计的简单等式

扩展和警告

关于 Cox 比例风险模型还有很多要说的,但我会尽量简短,只提几件事。

例如,人们可能想考虑时变回归量,这是可能的。

要记住的另一个关键点是省略变量偏差。在标准线性回归中,与回归变量不相关的省略变量不是大问题。这在生存分析中是不成立的。假设我们的数据中有两个相同大小和取样的亚人群,每个亚人群都有一个恒定的风险率,一个是 0.1,另一个是 0.5。最初,我们会看到一个很高的风险率(平均值只有 0.3)。随着时间的推移,具有高危险率的人群将离开该人群,我们将观察到危险率向 0.1 下降。如果我们忽略了代表这两个群体的变量,我们的基线风险率将会被打乱。

我的目标是写(相对)易懂的数据科学概念的解释,而不回避有时涉及的复杂数学。如果你喜欢这个,你我还有类似风格的解释**困惑度中心极限定理 ,或者 期望最大化 **

如果你不喜欢这个,多考虑一下 回归 ,奇异值分解,或者* 傅立叶变换 ***

参考

更详细的讨论见卡梅隆和特里文迪

发展型 BERTology 的奇特案例

原文:https://towardsdatascience.com/the-curious-case-of-developmental-bertology-d601ec52f69d?source=collection_archive---------57-----------------------

稀疏性、迁移学习、概括和大脑

这篇文章是为机器学习研究人员和神经科学家写的(将使用这两个领域的一些术语)。虽然这不是一个全面的文献综述,我们将通过一系列主题的经典作品和新成果的选择,试图发展以下论点:

就像表征学习和感知/认知神经生理学之间富有成效的相互作用一样,迁移/持续学习、高效深度学习和发展神经生物学之间也存在类似的协同作用。

希望它能以一种或两种方式激励读者,或者至少在全球疫情期间消除一些无聊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

弗瑞德·卡尼Unsplash 上拍摄的照片

我们将通过大型语言模型的镜头触及以下主题:

  • 过度参数化的深度神经网络如何泛化?
  • 迁移学习如何帮助概括?
  • 我们如何让深度学习在实践中计算高效?
  • 在解决这些问题的过程中,深度学习研究会如何使受益于对发育和老化大脑的科学研究?

哲学序言

在我们开始之前,谨慎的做法是说几句关于大脑隐喻的话,以澄清作者在这个问题上的立场,因为它经常在辩论中出现。

深度学习和神经科学的融合可以说早在人工神经网络的概念出现时就已经发生了,因为人工神经元抽象了生物神经元的特征行为。然而,截然不同的学习机制和智能功能种类的差异在这两个屹立了几十年的人之间竖起了一道难以逾越的障碍。近年来现代深度学习的成功重新点燃了另一股融合的潮流,结出了新的果实。除了设计受大脑启发的 AI 系统(例如[ 2 ]),深度神经网络最近也被提议作为一个有用的模型系统来理解大脑如何工作(例如[ 3 ])。好处是相互的。学习机制的协调正在取得进展,但在不止一个重要方面,智力差距仍然顽固存在。

现在,对于一个深度学习研究人员或从业者来说,看看今天这个复杂的景观,大脑类比是有益的还是误导的?基于信仰给出答案当然简单,双方都有大量信徒。但是现在,让我们不要凭信念选择立场。相反,让我们完全通过其实际分支来评估其独特上下文中的每个类比:**,它只有在做出实验上可验证/可证伪的预测时才是有用的,而* 对于工程 来说,它只有在生成可以经受坚实基准测试的候选特征时才是有用的。因此,对于我们将在本文其余部分提出的所有大脑类比,无论它们看起来多么合适或牵强,我们都将超越任何先前的原则,努力阐明可以在实践中指导未来科学和工程工作的假设,无论是在这些页面的限制之内还是之外。*

工作类比

当把深度神经网络比作大脑时,我们通常会想到什么?

对大多数人来说,网络结构映射到大脑区域的大体解剖结构(如感觉通路)和它们的相互连接,即连接体,单元映射到神经元或细胞组件,连接权重映射到突触强度。因此,神经生理学执行模型推理的计算。

深度神经网络的学习通常以在训练数据集上优化目标函数的形式,在给定预定义的网络架构的情况下进行。(一个主要的困难在于人工学习算法的生物学合理性,这是我们在本文中没有触及的主题——在这里,尽管机制不同,我们只是接受功能的相似性。)因此,通过优化的数据驱动学习类似于基于经验的神经发展,即培育*,而网络架构以及很大程度上的初始化和一些超参数是作为进化的结果而被遗传编程的,即本性。*

备注 :需要注意的是,现代的深度网络架构,无论是手工隐式设计的,还是通过神经架构搜索(NAS)显式优化的[7],都是数据驱动优化的结果,产生了归纳偏差——免费的午餐由所有未能在自然选择中幸存的不适合者买单。**

由于数据和计算能力的快速增长,2010 年的十年见证了深度神经网络物种的寒武纪大爆发,在机器学习领域迅速传播。

伯特学

随着现代深度学习的进化在过去两年里产生了一群新物种,情况变得更加复杂。他们在自然语言理解的大陆(NLU),在承载着巨大计算能力的大河肥沃的三角洲上茁壮成长,比如谷歌和微软。这些非凡的生物有一些关键的共性:它们都有一个被称为变压器* [ 8 ]的典型皮质微电路,拥有快速增加的脑容量,创造了历史记录(例如[ 91011 ),并且经常以其中一个布偶的科学名称命名。但是这些物种对其进化成功至关重要的最突出的共同特征是转移学习的能力。*

这是什么意思?嗯,这些生物有两个阶段的神经发展:一个漫长的,自我监督的幼虫阶段,称为预训练*,随后是一个快速的,受监督的成熟阶段,称为微调。在自我监督的预训练过程中,大量未标记文本的语料库被呈现给受试者,受试者通过优化某些目标来自娱自乐,这些目标非常类似于解决给人类孩子的语言测验,例如完成句子,填写缺失的单词,说出句子的逻辑顺序,以及找出语法错误。然后,在微调过程中,经过良好预训练的受试者可以通过监督训练快速学会执行特定的语言理解任务。*

transformers (BERT) [ 12 ]的双向编码器表示的出现标志着迁移学习对 NLU 土地的彻底征服。BERT 和它的变体已经在相当大的范围内推进了最先进的技术。他们非凡的成功激起了人们对这些模型内部运作的极大兴趣,创造了对“机器人学”的研究。与神经生物学家不同,BERTologists 将电极插入模型大脑,以记录解释神经代码的活动(即激活和注意模式),对大脑区域(即编码层和注意头)进行有针对性的损伤,以了解它们的功能,并研究早期发展的经验(即训练前的目标)如何有助于成熟的行为(即在 NLU 任务中的良好表现)。

网络压缩

与此同时,在深度学习的世界中,多阶段发展(如迁移学习)发生在不止一个动物王国。特别是,在生产中,人们经常需要将一个训练好的庞大神经网络压缩成一个紧凑的网络,以便有效地部署。

网络压缩的实践源自深度神经网络的一个非常令人困惑的特性:过度参数化不仅有助于泛化,还有助于优化。也就是说,训练一个小网络往往不仅不如训练一个大网络(如果一个人当然有能力这样做的话)[ 14 ],而且不如将一个训练好的大网络压缩到同样小的规模。在实践中,压缩可以通过稀疏化(剪枝)、蒸馏等来实现。

备注: 值得注意的是,对密集网络进行优化再压缩所产生的最佳稀疏网络的现象(见例如【 15 16 )很像正在发育的大脑,其中过度产生的连接被逐渐修剪掉【 17

然而,模型压缩中的多阶段开发类型与迁移学习非常不同。迁移学习的两个阶段看到相同的模型针对不同的目标进行优化,而在模型压缩中,原始模型变形为不同的模型,以保持相同目标的最优性。如果说前者类似于获得新技能的成熟,那么后者更像是优雅的衰老,而不会失去已经学到的技能。

学习权重与学习结构:二元性?

当一个网络被压缩时,它的结构经常会发生变化。这可能意味着网络架构*(例如在提取的情况下)或者参数稀疏性(例如在修剪的情况下)。这些结构上的改变通常是由启发法或正则化方法强加的,这些方法限制了原本已经有效的优化。*

但是结构能超越仅仅是一个效率限制,成为一个有效的学习手段吗?越来越多的新兴研究似乎表明了这一点。

一个有趣的例子是权重不可知网络。这些类似水母的生物在一生中不需要学习,但仍然非常适应它们的生态位,因为进化为它们选择了有效的大脑结构。

即使是自然选择的固定架构,学习稀疏结构仍然可以和学习突触权重一样有效。最近,Ramanujan 等人[ 19 ]设法找到了初始化卷积网络的稀疏化版本,如果足够宽和足够深,其泛化能力不会比经历权重训练的密集网络差。理论研究还表明,如果模型被充分过度参数化,随机权重的稀疏化与优化参数一样有效[ 2021 ]。

因此,在现代深度学习严重过度参数化的制度中,我们有一把双刃剑:权重的优化和结构的优化。这让人想起作为生物学习和记忆基础机制的突触结构可塑性(例如,参见[ 2223 )。**

备注 :描述参数稀疏性的一种正式方式是通过参数掩码的公式化(图 1)。学习可以通过优化固定结构中的连续权重来实现,也可以通过优化给定一组固定权重的离散结构来实现(图 2)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。模型参数结构稀疏性的参数掩模公式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图二。学习权重与学习结构。

通过稀疏化进行微调

既然结构就像权重一样可以优化学习,那么这个机制是否可以用来让迁移学习变得更好?

是的,确实可以。最近,Radiya-Dixit & Wang[24]让 BERT 捡起这个新基因,进化出新的东西。他们表明,可以通过稀疏化预训练的权重来有效地微调 BERT,而不改变它们的值,正如通用语言理解评估(GLUE)任务所系统展示的那样[ 25 ]。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3。通过稀疏化对 BERT 进行微调 [ 24 ]。

备注 :注意,类似的稀疏化微调已经成功应用于计算机视觉,例如【 26 】。还要注意预训练期间稀疏化 BERT 的现有工作[27]。

通过稀疏化进行的微调具有有利的实际意义。一方面,预训练的参数值在学习多个任务时保持不变,将特定于任务的参数存储减少到只有一个二进制掩码;另一方面,稀疏化压缩了模型,通过适当的硬件加速,潜在地避免了许多“乘零累加”操作。一石二鸟。

然而,除了实际的好处,通过稀疏化进行微调的可能性带来了一些新的机会,有助于更深入地理解语言预训练及其与生物大脑的潜在联系。让我们在接下来的部分中看看它们。

不同彩票的中奖彩票

首先我们从最优化的角度研究语言预训练的本质。

似乎语言预训练元学习是学习下游 NLU 任务的良好初始化。正如 Hao 等人[ 28 ]最近所表明的,预训练的 BERT 权重具有良好的特定于任务的最优值,在损失情况下更接近且更平坦。这意味着预训练使微调更容易,微调后的解决方案更通用。

类似地,预训练也使得发现微调的稀疏子网络更容易[ 24 ]。因此,有趣的是,预先训练的语言模型具有弗兰克尔和卡宾[ 29 ]制定的“中奖彩票”的所有关键属性,但鉴于优化权重与结构的二重性,它们恰恰是互补类型(图 3、4):

  • Frankle-Carbin 中奖票**是一种特定的稀疏结构,使得便于权重优化。对重量初始化 [ 29 敏感*。这是跨视觉任务 30 的潜在转移。***
  • 一个预训练的语言模型就是一组特定的权重使得便于结构优化*。对结构初始化 [ 24 敏感*。它是跨 NLU 任务转移 24 。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4。弗兰克尔-卡宾赢票 [ 29比照通过稀疏化进行微调(图 3)。

备注 :注意预训练 BERT 的“中奖票”属性与[19]中的宽深政权不同。基于 transformer 的大型语言模型,如果做得足够宽和足够深(如果它们已经很大,那么一定会非常大),是否可以在没有预训练的情况下,从随机初始化中有效地进行微调,这仍然是一个悬而未决的问题。

虽然学习中奖彩票的权重和在预训练的权重内搜索子网会导致相同的结果——一个紧凑、稀疏的网络,可以很好地推广,但这两种方法的生物学合理性截然不同:找到一张弗兰克尔-卡宾彩票需要重复的时间倒带和重新训练,如果早期的状态可以被遗传编码,然后在下一代中复制以实现倒带,这一过程只有在多个生物代中才有可能。但是在结构稀疏化之后的重量预训练类似于发育和老化,都发生在一代人的时间内。因此,密集预训练和稀疏微调可能是神经发育的有用模型。

健壮性:不同结构的相同功能

伯特和大脑的另一个不可思议的相似之处是其结构的坚固性。

在各种稀疏水平下,似乎有大量良好的预训练 BERT 子网络[ 24 ]:一个典型的胶合任务可以通过消除预训练权重的百分之几到一半以上来学习,良好的稀疏解决方案存在于其间的任何地方(图 5,左)。这让人想起了在成熟和衰老的大脑中发挥作用的结构可塑性——其获得的功能保持不变,而底层结构随着时间的推移不断发生变化。这与易碎的点方案乘的传统工程截然不同。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图五。通过稀疏化进行微调的语言模型的结构鲁棒性。(左)存在许多预训练 BERT 的良好子网络,这些子网络跨越大范围的稀疏性(从百分之几到一半以上)[ 24 ]。(右)持续稀疏化过程中损失景观的漫画视图。密集训练(实心洋红色和橙色箭头)找到位于连续流形上的低损耗解决方案(类似于[ 31 ]的图 1 的黄色虚线框)。只要通过重量消除的任何结构扰动(紫色虚线箭头和圆圈)没有偏离低损失歧管太远,快速的结构微调(洋红色虚线箭头和圆圈)可以连续地恢复最佳性。蓝色网格表示稀疏参数的离散集合。

这种现象主要源于深度神经网络的过度参数化。在总体过度参数化的现代体制中,损失景观中的最优值通常是高维连续非凸流形[ 3132 ]。这与生物学有着奇怪的相似之处,在生物学中,完全相同的网络行为可以从非常不同的底层参数配置中产生,在参数空间中形成非凸集,例如参见[ 33 ]。

现在有趣的部分来了。就像生物学中的终身体内平衡调整一样,类似的机制可能支持过度参数化的深度网络中的持续学习(如图 5 所示):密集连接的早期学习发现了一个好的解流形,沿着它存在大量好的稀疏解;随着网络的老化,网络的持续和逐渐稀疏化可以通过结构可塑性快速微调(就像保持终身可塑性的大脑)。

从神经生物学的角度来看,如果接受优化假说* [ 3 ],那么终生可塑性必然在整个生命周期中不断进行某种功能优化。按照这个逻辑,这个过程出现偏差而导致的神经发育障碍,本质上应该是 优化疾病 ,具有初始化不良、优化器动态不稳定等病因学特征。*

上述假设是否对深层神经网络普遍适用,是否足以作为神经发育和病理生理学的良好模型,这是未来研究的开放问题。

伯特学到了多少?

最后,让我们将一些神经科学的思维应用于 BERTology。

我们问这样一个问题:在预先训练的* BERT 参数中存储了多少与解决 NLU 任务相关的信息?这不是一个容易回答的问题,因为在预训练和微调期间参数值的连续变化会相互混淆。*

在通过稀疏化进行微调的 BERT 的情况下,这种限制不再存在,其中预训练仅学习权重值,微调仅学习结构。对生物学家来说,如果两个发展阶段涉及完全不同的生理过程,这总是好消息,在这种情况下,其中一个可以用来研究另一个。

现在让我们这样做。让我们扰动预先训练的权重值,并研究下游结果。在这个实验中,我们不进行生理扰动(例如破坏注意力头),而是进行药理学扰动:全身应用一种影响整个大脑中每一个突触的物质。这种药物是量子化的。表 1 总结了一些初步的剂量反应:尽管 BERT 和相关物种已经发展出了巨大的大脑,但似乎在语言预训练期间学到的知识可能只用每个突触的几个比特来描述。

在实践中,这意味着,由于预训练的权重在通过稀疏化进行微调的过程中不会改变值,因此可能只需要存储所有 BERT 参数的低精度整数版本,而不会产生任何不利后果——显著的压缩。结果:你所需要的是所有任务共享的预训练参数的量化整数版本,以及为每个任务微调的二进制掩码

备注 :注意现有的关于 BERT 权重的量化的工作是量化微调的权重(例如 Q-BERT[34])而不是预训练的权重。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

***表 1。MRPC 微调 BERT 和相关模型的 F1 分数。*多亏了抱紧脸的变形金刚,像这样的实验轻而易举。

收场白

深度神经网络和大脑有明显的区别:在最底层,在学习算法上,在最高层,在一般智力上。然而,中级水平的深刻相似性已被证明有利于深度学习和神经科学的进步。

例如,感知和认知神经生理学已经启发了有效的深度网络架构*,这反过来又为理解大脑提供了一个有用的模型。在这篇文章中,我们提出了另一个交叉点:生物神经发育可能会激发高效和稳健的优化程序,这反过来又会成为大脑成熟和老化的有用模型。*

备注 :需要注意的是,传统联结主义语境下的神经发展是在 20 世纪 90 年代提出的(例如参见[35)

具体来说,我们回顾了最近关于权重学习和结构学习作为优化的补充手段的一些结果,以及它们如何结合起来,在大型语言模型中实现有效的迁移学习。

随着结构学习在深度学习中变得越来越重要,我们将看到相应的硬件加速器出现(例如,Nvidia 的 Ampère 架构支持稀疏权重[ 36 ])。这可能会带来专用硬件架构多样化的新浪潮——加速结构学习需要适应特定计算的智能数据移动,这是一个新的探索前沿。

参考

[1] W. S .麦卡洛克和 w .皮茨,“神经活动中固有观念的逻辑演算”,1943 年。
[2] D .哈萨比斯等,“神经科学启发的人工智能”,2017。
[3] B. A. Richards 等人,“神经科学的深度学习框架”,2019。
[4] T. P. Lillicrap 等人,“反向传播与大脑”,2020。
【5】g . Marcus,《深度学习:一个批判性的鉴定,2018。
[6] G. Marcus,“人工智能的下一个十年:迈向强大人工智能的四个步骤”,2020 年。
[7] M. Wistuba 等著《关于神经架构搜索的调查》,2019。
[8] A. Vaswani 等人,“注意力是你所需要的全部”,2017。
[9] M. Shoeybi 等,“威震天-LM:利用模型并行性训练数十亿参数语言模型”,2019。
【10】micro sift Research,“图灵-NLG:微软的 170 亿参数语言模型”,2020 年。
【11】t . b . Brown 等.语言模型是很少出手的学习者,2020。
【12】j . Devlin 等人,“ BERT:用于语言理解的深度双向变形器的预训练”,2018。
【13】A . Rogers 等著《伯特学入门:我们所知道的伯特如何工作》,2020 年。
[14] M. Belkin 等人,“调和现代机器学习实践与古典-方差权衡”,2019。
【15】m . Zhu,S. Gupta,“修剪,还是不修剪:探索模型压缩中修剪的功效”,2017。
【16】t . Gale 等,“深度神经网络中的稀疏状态”,2019。
【17】s . Navlakha 等人,“网络设计与大脑”,2018。
【18】a . Gaier 和 D. Ha,“权重不可知神经网络”,2019。
【19】v . Ramanujan 等人《随机加权的神经网络中隐藏着什么?》,2019。
【20】e .马拉奇等著《证明彩票假说:修剪是你所需要的全部》,2020。
【21】m .叶等,“良好子网络可证明存在:通过贪婪正向选择进行剪枝”,2020。
【22】f . h . Gage,“成人大脑的结构可塑性”,2004。
【23】h . Johansen-Berg,“结构可塑性:重新连接大脑”,2007。
【24】e . Radiya-Dixit 和 X. Wang,“微调能有多细?学习高效的语言模型”,2020。
【25】A .王等,“ GLUE:自然语言理解的多任务基准与分析平台”,2019。
【26】a . Mallya 等人,“捎带:通过学习任务权重使单个网络适应多项任务”,2018。
【27】m . a . Gordon 等,“压缩 BERT:研究权重剪枝对迁移学习的影响”,2020。
【28】y .郝等《可视化与理解 BERT 的有效性》,2020。
【29】j . Frankle 和 M. Carbin,“彩票假说:寻找小的、可训练的神经网络”,2018 年。
[30] A. S. Morcos 等人,“一票全赢:跨数据集和优化器的一般化彩票初始化”,2019。
[31] F. Draxler 等人,“神经网络能源格局中本质上没有壁垒”,2018。
[32] S. Fort 和 S. Jastrzebski,“神经网络损失景观的大尺度结构”,2019。
【33】e . Marder,“神经元和电路中的可变性、补偿和调制”,2011 年。
[34] S .沈等,“ Q-BERT:基于 Hessian 的超低精度量化的 BERT ”,2019。
[35] J. Elman 等.反思天赋:发展的联结主义观点,1996 年(ISBN 978–0–262–55030–7)。
【36】英伟达博客,“什么是 AI 推理中的稀疏性?”,2020。

MySQL、PostgreSQL 和 Hive 的奇特案例

原文:https://towardsdatascience.com/the-curious-case-of-mysql-postgresql-and-hive-9e7cae9e52f4?source=collection_archive---------16-----------------------

MySQL、PostgreSQL 和 Hive 在相同的 SQL 语法下如何表现不同

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由弗洛里安·奥利佛Unsplash 上拍摄

在大数据时代,数据的数量、大小和速度都在快速增长,对于数据分析师和数据科学家来说,了解 SQL 仍然是必不可少的。SQL 帮助我们管理传统关系数据库(RDBMS)、分布式集群甚至云环境中的数据。

如果我们在传统的 RDBMS 中处理数据,我们通常会使用像 MySQL 或 PostgreSQL 这样的数据库引擎。然而,随着数据的数量和大小迅速增长,我们不能只使用 RDBMS 来存储所有的数据。这就是我们需要分布式集群来存储和处理大量数据的地方,Hadoop 为我们提供了便利。

如果您正在使用 Hadoop 生态系统,那么您很可能会使用 Apache Hive 来管理和查询驻留在 Hadoop 分布式文件系统或 HDFS 中的结构化数据。

MySQL、PostgreSQL 和 Hive 都有相似的 SQL 语法,有时我们假设它们会根据给定的 SQL 查询表现相似。然而,事实并非如此。让我们深入一些场景,在相同的 SQL 语法下,PostgreSQL、MySQL 和 Apache Hive 中至少有一个表现不同。

整数的除法运算

除法是 SQL 引擎需要解释的一种复杂的算术运算,不像加法、减法和乘法等其他运算。如果你将两个整数相加、相减或相乘,你将总是得到一个整数,而除法不是这样。您可以将两个整数相除,得到一个小数或一个舍入整数作为结果,这取决于您使用的 SQL 引擎。

在 Hive 和 MySQL 中,如果用/ 运算符对两个整数进行除法运算,总会得到一个小数结果。

**SELECT 32/5**>> result: 6.400000

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与此同时,在 PostgreSQL 中,如果您使用/ 运算符对两个整数进行除法运算,您将始终得到一个整数结果。

**SELECT 32/5**>> result: 6

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果您使用 PostgreSQL,记住您期望的输出类型是很重要的。如果您想要一个整数结果,您可以像上面一样编写您的 SQL 查询。但是,如果您想要像 Hive 和 MySQL 中那样精确的十进制结果,您需要显式地将其中一个操作数转换为十进制数。

**SELECT 32.0/5**>> result: 6.4

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你使用 MySQL 或 Hive,并且你想在执行两个整数的除法后得到一个整数结果,你需要使用DIV运算符来代替。

**SELECT 32 DIV 5**>> result: 6

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

区分大小写:字符串比较

比较两个字符串也可能在不同的 SQL 引擎上产生不同的结果。Apache Hive 和 PostgreSQL 在进行字符串比较时是区分大小写的,这意味着大写字母和小写字母很重要。让我们看看下面的例子。

**SELECT** 'One' = 'one'>> result: False

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

尽管两个字符串有相同的字母,查询将返回 FALSE ,因为 Hive 和 PostgreSQL 都区分大小写。

同时,如果你使用 MySQL,同样的查询将返回 1 或 TRUE ,因为 MySQL 在字符串比较时不区分大小写。这意味着只要两个字符串具有相同的字母,MySQL 就会将它们解释为相同的,不管它们是大写还是小写。

**SELECT** 'One' = 'one'>> result: 1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

区分大小写:表引用

这取决于您使用的 SQL 引擎,当您引用数据库中的表时,需要注意区分大小写。如果使用 PostgreSQL 和 Hive,那么在引用表时就不需要担心大小写,因为它们总是将字母转换成小写。

为了更清楚地说明这一点,让我们看看下面的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据库中有一个名为“客户的表。但是,我们在查询中将其称为客户。Hive 和 PostgreSQL 总是将字母转换成小写,因此它们理解我们想要引用表*‘CusTomers’而不是‘CusTomers’*

然而,MySQL 却不是这样。在 MySQL 中,当表被写入数据库时,您需要引用它。如果您将该表引用为*‘CusTomers’,而它应该是‘CusTomers*’,那么 MySQL 将抛出一个错误。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果我们完全按照数据库中写的那样引用该表,MySQL 将返回我们完全想要的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 SELECT 和 GROUP BY 语句中使用别名

创建别名是创建更高效、更简洁的 SQL 查询的一种非常有用的方法。此外,它为长查询提供了一个快捷方式,提高了查询的可读性,特别是如果我们要在 GROUP BY 子句中使用别名。让我们看一个例子来理解 alias 是如何工作的。

假设我们有一个名为*‘inventory’*的表,包含以下列和内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,假设我们希望纯粹基于数量状态对上表进行分组和聚合,即qty是大于还是小于 5。为此,我们将编写一个类似这样的 SQL 查询:

**SELECT CASE  WHEN** qty > 5 **THEN** 'more than 5'
             **ELSE** 'less than 5'
        **END**,
        COUNT(*)
**FROM** inventory
**GROUP BY** **CASE WHEN** qty > 5 **THEN** 'more than 5'
              **ELSE** 'less than 5'
         **END**

上面的 SQL 查询可以工作,但是不够简洁,可读性显然还可以提高。这就是别名派上用场的地方。我们可以将 SELECT 语句中的 CASE 转换成别名,并通过子句在组中引用该别名,如下所示:

**SELECT CASE  WHEN** qty > 5 **THEN** 'more than 5'
             **ELSE** 'less than 5'
        **END AS** inventory_status,
        COUNT(*)
**FROM** inventory
**GROUP BY** inventory_status

上面的 SQL 查询更短、更简洁,尤其是当我们有一个很长的 CASE 语句时。

如果使用 MySQL 和 PostgreSQL,可以在 SELECT 语句中编写一个带有别名的 SQL 查询,并通过子句引用 GROUP 中的别名。下面是通过子句引用组中的别名的查询结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同时,如果你使用 Hive,你不能通过子句引用组中的别名,因为它会抛出一个错误。这是因为在处理 SELECT 语句之前,Hive 将首先通过子句处理组。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果您正在使用 Hive,唯一的方法就是删除别名,并重写 GROUP BY 子句中的 CASE 语句,就像没有别名的原始查询一样。

非数字字符串到数字类型的转换

使用 SQL,我们可以用 CAST 命令转换表中一列的数据类型。如果我们想把一个字符串列转换成一个整数,我们可以这样做。

**SELECT CAST**(column_name **AS INT**) **FROM** table_name

但是,如果您尝试将值不代表数字的字符串列的数据类型转换为数字列,查询将返回意外的结果,这取决于您使用的 SQL 引擎。为了解释这一现象,让我们用与前面相同的例子来说明’库存’表。

在 Hive 中,如果您尝试将’ game '列转换为整数,查询将导致缺少值或 NULL 值。回想一下,'游戏’列的数据类型是字符串,并且所有的值都是非数字的(大富翁、线索、糖果乐园)。当您将该列转换为数字列时,例如 integer 或 float,那么查询将返回空值,因为没有办法将这些字符串转换为数字表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们来看看我们是否使用 MySQL。在 MySQL 中,如果用相同的 SQL 语法对同一列进行数据类型转换,会得到列中的值,但都是零。这不同于我们在 Hive 中得到的缺失值( NULL )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同时,如果您在 PostgreSQL 中使用相同的语法对相同的列尝试相同的数据类型转换,您将会得到一个错误。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同的 SQL 引擎有不同的方法来处理像这样的数据类型转换问题。因此,当您尝试将字符串列的数据类型转换为数字列,并且一个或多个字符串值不代表数字时,提前了解您使用的 SQL 引擎以及您期望得到的结果是很重要的。

没有连接条件的连接语法

JOIN 语法是 SQL 中最重要的语法之一,尤其是在处理关系数据库时。SQL 中的连接有不同的类型:内连接左连接右连接外连接交叉连接

因为本文的重点不是解释不同的连接语法是如何工作的,所以我不打算详细讨论这个问题。但是,如果你想知道关于不同的 JOIN 语法彼此有何不同的详细信息,我推荐这篇文章这篇文章

为了补充连接语法,通常我们还应该在子句上使用或者在子句上使用来提供连接条件。为了更清楚地说明这一点,我们假设有两个不同的表,一个名为’ toys ‘,另一个名为’ makers '。下面是这两个表的列和内容的图示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“玩具”表的列和内容

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“制造商”表的列和内容

现在的目标是根据’玩具’表中的制造商 ID,将’玩具’表和’制造商’表组合起来。为此,我们可以使用下面的 SQL 查询。

**SELECT** * 
**FROM** toys **JOIN** makers 
**ON** toys.maker_id = makers.id

上述查询产生以下结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意,我们没有详细指定我们希望在查询中使用哪个 JOIN 语法。然而,因为我们提供了连接条件,即子句上的**,所以 SQL 引擎将连接语法解释为左连接。**

现在,如果由于某些原因我们忘记提供连接条件,会发生什么呢?

如果你使用 PostgreSQL,你会很幸运,因为它会直接抛出一个错误,告诉你你的语法无效。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同时,如果您正在使用 MySQL 或 Hive,并且忘记添加连接条件,查询仍然会运行。但是,它会将您的连接语法解释为交叉连接。查询的结果如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了更好地理解一个交叉连接实际上是做什么的,让我们用下面的图表来举例说明。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Cross JOIN ,来自左表和右表的行的每一种可能的组合都将包含在最终结果中。用作示例的两个表只包含 3 行,现在想象一下,如果您的数据库包含许多行,而您忘记了添加连接条件。结果将是一个包含大量行的新表,您可能会被这个结果误导。

为了避免这种情况,最好明确告诉 SQL 引擎应该在查询中执行哪种连接语法。另外,在 join 语法之后提供 JOIN 条件也是必须的。

仅此而已。这些是相同的 SQL 语法在 MySQL、PostgreSQL 和 Apache Hive 中表现不同的情况,至少据我所知是这样。如果你知道其他他们表现不同的案例,如果你能和我分享,我会很高兴。

海拔和温度之间因果联系的奇特案例

原文:https://towardsdatascience.com/the-curious-case-of-the-causal-link-between-altitude-and-temperature-d777119a5693?source=collection_archive---------37-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加勒特·帕克在 Unsplash 上的照片

一个简单但不那么简单的例子来说明为什么因果关系很重要

这个例子在因果关系文献中被反复使用。我写这篇文章是为了让我自己明白,因为这并不是直截了当的。所以,让我们直接开始吧。

假设我们想学习高度和温度的联合分布。我们的数据集来自瑞士。在我们的数据集中,我们将高度与它们各自的温度配对。如何分解共同分布?嗯,有两种可能的方法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

或者:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是的,就是这么简单。但是现在黄金问题来了。哪个提法实际上是正确的,因为每一个都暗示着不同的东西。第一个暗示我们能够从温度预测海拔。也就是说,我们的模型学习连接 T->A。第二个模型采用相反的关系,A->T。因此,如果你已经上过一些基本的物理课,你显然会马上发现,第二个公式更有意义。没有物理定律表明,如果你改变温度,那么物体的高度就会改变(模体积随着温度而改变,压力根据密度而改变)。

只是为了满足我的好奇心(也许也是你的),你们中有多少人确信 p(H | T)模型将是绝对的垃圾?

现在,假设您学习了从温度到高度的预测模型,并希望将其应用到其他地方,例如德国。理由是你的模型不能概括,因为德国的身高分布与瑞士有很大不同。即 p(A)不同,不是温度分布不同造成的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由西蒙·雅各布森Unsplash 拍摄

你现在可能会想,但是等等…这并不意味着我的模型不能概括,这个论点有点可疑,不充分。我同意。关键是测试数据的分布偏移。统计学习理论中一个众所周知的事实是,我们从学习算法中获得的伟大理论结果是基于示例的 iid 假设(同分布独立分布)。在这种情况下,我们的真实风险(整个数据集的实际误差)可以根据我们用于拟合模型的数据点数量变得任意小。但是,如果违反了 iid 假设,那么当我们天真地将我们的模型与数据拟合时,它不会一般化,即,它会有很大的测试误差。

这个分布转移的概念非常重要,这也是机器学习对因果关系感兴趣的原因。通过学习实际的因果机制,我们可以使我们的模型对分布变化更加稳健。这也被称为分布失调泛化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由埃米尔·吉耶莫在 Unsplash 上拍摄

确定因果方向的一种方法是拿一座山,改变它的海拔高度并观察温度。如果我们看到温度变化,那么显然高度影响温度。反过来,我们可以影响山顶的温度,让它变得更热或更冷,并观察海拔高度。海拔显然不会改变。这将被称为干预,我也不是在统计学意义上谈论它。这将是你在现实世界中的一座山,并把它变得更大。但显然我们不能这么做!我们没有神力。但是,如果我们不能做到这一点,我们怎么能确定因果方向呢?

事实是,这很难。实际上,两个变量的情况非常困难。只有当模型和噪声符合一定的标准时,我们才能确定因果方向,否则,你可以忘记它。

这种推理向我解释了因果推理的要点,而不是用简单的统计模型来拟合数据。

如果你想看更多我的 rants,也可以在 Twitter 关注我。;)

统计推断和因果推断之间更一般的比较可以在本文中找到。

维度的诅咒…减去行话的诅咒

原文:https://towardsdatascience.com/the-curse-of-dimensionality-minus-the-curse-of-jargon-520da109fc87?source=collection_archive---------13-----------------------

简而言之,这都是因为孤独

维度的诅咒!那究竟是什么?除了作为一个在机器学习行话中令人震惊和敬畏的名字的主要例子(这些行话听起来往往比它们更花哨),它还指的是添加更多特征对数据集的影响。简而言之,维度的诅咒是关于孤独的。

一言以蔽之,维度的诅咒都是关于孤独的。

在我解释自己之前,让我们先弄清楚一些基本的术语。什么是特色?这是机器学习的词,其他学科可能称之为预测器/(独立)变量/属性/信号:换句话说,关于每个数据点的信息。这里有一个行话介绍如果这些词都不熟悉的话。

如果你喜欢在看漂亮的图片之前听解释,这里有一个2 分钟的视频

当一个机器学习算法对维数灾难敏感时,这意味着当你的数据点在空间中被它们的朋友包围时,该算法工作得最好。他们在太空中的朋友越少,情况就越糟糕。让我们来看看。

数据社交距离很容易:只需添加一个维度。但是对于某些算法,你可能会发现这是一个诅咒…

一维

想象你坐在一个大教室里,周围都是你的伙伴。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

很自然,你是一个数据点。让我们把你放在一个维度中,让房间变暗,然后从房间的后面用一束强光照射你。你的影子投射到前面墙上的一条线上。在那条线上,一点都不孤独。你和你的船员都是罐头里的沙丁鱼,聚在一起。一维很惬意!也许有点太舒适了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二维

为了给你喘息的空间,让我们增加一个维度。我们在 2D,飞机就在房间的地板上。在这个空间里,你和你的朋友更加分散。个人空间又是一个东西。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意: 如果你喜欢在一个假想的电子表格中跟随,把添加/删除一个维度想象成插入/删除一列数字。

三维

让我们添加一个第三维度,随机把你们每个人送到你们所在的 5 层大楼的一个楼层。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

突然间,你不再有那么多朋友围绕着你。在你身边很孤独。如果你喜欢几乎每个座位上都有学生的感觉,那么你现在可能正悲伤地盯着几把空椅子。你开始泪眼模糊,但至少你的一个朋友可能还在你身边…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四维空间

不会太久的!让我们再增加一个维度。时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学生们在不同的时间分散在 60 分钟的课堂上(在不同的楼层)——让我们把自己限制在 9 节课,因为讲师需要睡眠和,嗯,生活。所以,如果你足够幸运,以前仍然有一个情感支持的伴侣,我相当有信心你现在在社交上疏远了。如果你孤独的时候不能有效,轰!我们有我们的问题。维度诅咒来袭!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MOAR 维度

当我们增加维度时,你会很快变得孤独。如果我们想确保每个学生都像在 2D 那样被朋友包围,我们就需要学生。很多人。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里最重要的想法是,我们必须以指数方式招募更多的朋友,而不是以线性方式,让你远离忧郁。

如果我们增加两个维度,我们不能简单地用多两个学生来补偿…或者甚至是多两个教室的学生。如果我们最初在教室里有 50 名学生,我们增加了 5 层楼和 9 个班级,我们需要 5x9=45 倍多的学生来保持 50 人可以做到的那样。所以,我们需要 45x50 = 2,250 个学生来避免孤独。这比每个维度多一个学生要多得多!数据需求快速增长。

当您添加维度时,最低数据要求可能会快速增长。

每当我们上升一个维度,我们就需要招募更多的学生(数据点)。如果数据对你来说很贵,这个诅咒真的不是闹着玩的!

次元天后

并非所有的机器学习算法在面对一点私人时间时都会如此情绪化。像 k-NN 这样的方法当然是完全的天后。对于一个名字缩写代表 k-最近邻的方法来说,这并不奇怪——它是关于相邻数据点的计算,所以数据点是相邻的是相当重要的。

当涉及到尺寸时,其他方法要健壮得多。例如,如果你上过线性回归的课,你会知道一旦你有了相当数量的数据点,增加或减少一个维度不会让任何东西灾难性地崩溃。还是有价格的——只是更实惠而已。*

这并不意味着它能抵御所有的虐待!如果您从来不知道包含单个异常值或添加一个近似重复的要素会给最小二乘法带来的混乱(犯罪的拿破仑,多重共线性*,再次来袭!)那就当自己被警告了。没有一种方法是适合所有情况的。是的,这包括神经网络。*

你该怎么办?

关于实践中的维数灾,你打算怎么做?如果你是一个机器学习研究者,你最好知道你的算法是否有这个问题…但我肯定你已经知道了。你可能没看这篇文章,所以我们就在背后议论你,好吗?但是,是的,你可能会想,是否有可能把你发明的算法设计成对维度不那么敏感。您的许多客户喜欢将他们的矩阵放在全图案面**,尤其是当事情变得有文字时。

** 按照惯例,我们将数据排列成一个矩阵,这样行就是例子,列就是特征。在这种情况下,一个又高又瘦的矩阵有许多分布在几个维度上的例子。

如果你是一个应用数据科学爱好者,你会做你一直在做的事情——在尝试使用厨房水槽之前,只使用一个或几个有前途的功能获得算法性能的基准。(我将在另一篇文章中解释为什么你需要那个习惯,如果你同时想要线索,请查找术语*。)*

有些方法只对高瘦的数据集有效,所以如果你感觉被诅咒了,你可能需要节食。

如果你的方法在有限的几个功能上工作得还不错,然后当你增加维度时对你嗤之以鼻,那就是提示你要么坚持你精心挑选的几个功能(或者甚至逐步选择如果你变得狡猾的话)或者首先通过运行一些可爱的功能工程技术从你原来的厨房水槽中制造几个超级功能(你可以尝试任何东西,从像主成分分析(PCA)这样的老派东西——今天仍然相关,特征向量永远不会过时——到像自动编码器这样的更现代的东西你真的不需要知道术语维数灾难来完成你的工作,因为你的过程——从小处开始,逐步增加复杂性——应该会替你处理好,但是如果它困扰着你……现在你可以摆脱这种担忧了。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

****总结一下:随着你添加越来越多的特性(列),你需要数量呈指数增长的例子(行)来克服你的数据点在空间上是如何分散的。一些方法只在细长数据集上有效,所以如果你感觉被诅咒了,你可能需要节食。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注:如果你把“空间上的接近”解释为与规模有关,让我纠正一下。这不是用英里和厘米来衡量的效果,所以我们不会试图将我们的灾难归咎于膨胀的宇宙——你不能通过简单的乘法来逃避诅咒。相反,也许这张图片会帮助你在 3D 中直观地理解它;这不是这个球形奶牛有多大的问题,呃,我的意思是,喵星人有多大……而是它身上包着多少包装花生的问题。图片:来源

感谢阅读!喜欢作者?

如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。不能选择?试试这个:

** [## 数据科学中最强大的想法

从有用的模式中分离出不必要信息的快速解决方案

towardsdatascience.com](/the-most-powerful-idea-in-data-science-78b9cd451e72)

与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeSubstackLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。

人工智能课程怎么样?

如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:

在这里欣赏整个课程播放列表:bit.ly/machinefriend**

人工智能中偏见的危险

原文:https://towardsdatascience.com/the-danger-of-bias-in-ai-c3ce68eabbcc?source=collection_archive---------33-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这张令人惊叹的照片归功于韦恩·达什伯格。如果 AI 的每个回合都潜伏着危险,那会怎样?

为什么承认我们架构中的偏差是关键

关于人工智能中偏见的危险,这是第一篇文章,我们想把重点放在一个特定的模型上。最近,基于“PULSE:通过生成模型的潜在空间探索进行自我监督的照片上采样”的模型 Face-Depixelizer 已经发布。这种模型可以从它的像素化版本输出原始图片。更严格地说,它将输出最接近的已知去像素化图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。(x32)输入(顶部)被上采样到 SR 图像(中间),该图像被下缩放(底部)到原始图像。来自原创论文。

根据 github repo 上的描述,给定一个低分辨率的输入图像,Face Depixelizer 搜索生成模型(此处为 StyleGAN )的输出,以获得感知上真实并正确缩小的高分辨率图像。

更准确地说,正如在论文中所解释的那样:“【the】方法使用一个(预训练的)生成模型来生成图像,该模型近似于所考虑的自然图像的分布。对于给定的输入 LR 图像,我们遍历由生成模型的潜在空间参数化的流形,以找到正确缩小的区域。通过这样做,我们找到了适当缩小的真实图像的例子,如 1 所示

这个 AI 模型有什么问题?

如果你输入一张黑人的像素化图片,比如巴拉克·奥巴马或蒂埃里·亨利,不管这个黑人有多出名,它仍然会输出一张白人脸。下面的图 2 显示了这些例子的 PULSE 输出。这当然意味着该模型偏向于白人面孔。这可以推广到多种场景,我们的下一篇文章将更深入地讨论它们。现在,假设你的公司正在使用一个自动雇用候选人的模型。如果这个模型偏向于白人,那么这个模型最终会建议一个黑人作为新雇员是非常不可能的,甚至在某些情况下是不可能的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图二。几个例子,脉冲得到一个非常遥远的图片作为像素化输出的重建。

这让我们想到了 Yann Lecun 的解释。

我们如何解决偏见?

如下所述,大多数时候,我们的模型只是根据本身有偏差的数据进行训练。只在狗和猫身上训练一个计算机视觉模型来对它们进行分类,它将不会知道如何对任何其他动物进行分类,例如鲸鱼。

Lecun 提出“当数据有偏差时,ML 系统也有偏差。这个面部上采样系统让每个人看起来都是白人,因为该网络是在 FlickFaceHQ 上预训练的,其中主要包含白人照片。在塞内加尔的数据集上训练完全相同的系统,每个人都会看起来像非洲人。”

这再清楚不过了。当然,首先要考虑的是数据本身。这就是为什么预处理和数据探索是机器学习中的关键步骤的主要原因。在不了解数据性质的情况下训练模型是没有意义的。如果我们希望在要分类的输入集中实现多样性,那么我们的数据集中就需要多样性。

让我们通过观察面部去像素化数据集的多样性来快速验证 Yann Lecun 的说法。但是,在此之前,让我们从一个更普遍的角度来看这个问题。

我们能评估数据集中的多样性吗?

在许多情况下,评估数据集是否足够多样化并不是一件轻而易举事情。然而,有一个问题要时刻牢记在心,那就是:“我的数据实际上代表了我感兴趣的人群吗?”。如果我对猫和狗的分类感兴趣,我有足够的多样性来展示所有可能的猫品种吗?对于新员工来说也是如此:如果公司捍卫多样性和包容性,那么在年龄、教育、性别、性偏好等方面,感兴趣的人群是否足够多样化?

现在,在许多不同的现实世界场景中,这变得更加困难。假设你拥有一个客户评论网站。人们可以在这些评论的基础上建立满意度评分。但这个满意度得分实际上反映了底层人群的真实满意度吗?仅根据文本审查来评估这一点是一项非常困难的任务。然而,这些评论中的许多可能是由对你的服务非常愤怒的人群中的一部分人写得非常好的。

我们能评估人脸去像素化数据集的多样性吗?

面部去污剂正在使用罩下的 StyleGAN 。StyleGAN 本身可以使用许多数据集进行训练:

  • StyleGAN 用 Flickr-Faces-HQ 数据集在 1024×1024 进行训练。
  • StyleGAN 用 1024×1024 的 CelebA-HQ 数据集训练。
  • StyleGAN 使用 256×256 的 LSUN Bedroom 数据集进行训练。
  • StyleGAN 用 512×384 的 LSUN Car 数据集训练。
  • StyleGAN 用 256×256 的 LSUN Cat 数据集训练。

根据作者的说法,FlickrFaces-HQ (FFHQ)是一个新的人脸数据集,由 7 万张分辨率为 10242 的高质量图像组成(论文的图 7)。“该数据集在年龄、种族和图像背景方面比 CELEBA-HQ 包含了更多的变化,并且还包含了更好的配饰,如眼镜、太阳镜、帽子等。这些图片是从 Flickr 抓取的(因此继承了该网站的所有偏见),并自动对齐和裁剪。

作者没有清楚地解释多样化数据的过程。因此,很难清楚地说明多样性的程度。然而,他们提出了一个具有高级统计数据的视图,如图 3 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3。关于 FFHQ 数据集的高级统计信息。来自 github 回购

使用元数据可以是评估多样性程度的第一种方法。对于多样化的人脸数据集,代表的国家越多越好。不幸的是,如上面图 3 中的高级统计所示,85%的图像没有指定国家,因此被指定给未知的**。**

另一种方法是建立一个模型,以不同的方式对数据进行采样。因此,给定一张图片,这种模型应该能够识别一些关键特征,例如年龄、种族和性别。基于这些特征,它可以从底层分布中进行采样。这种模型的一个简化版本如下图 4 所示,其中我们对美国政治舞台上的著名面孔进行了分类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4。用 opencv 检测性别和年龄。来自 github 的模型。

下面,我们使用了一个基本上做两件事的架构:I .检测所代表的个体的性别和 ii .检测所代表的个人的年龄段。这种架构可以集成到采样模型中。如图 4 所示,这个模型正确地预测了性别,但是错误地预测了米歇尔和梅兰妮·特朗普的年龄。这是很重要的一点,因为这样的模型应该尽可能没有偏见。换句话说,如果想要在采样过程中集成这种模型,他们应该确保精度足够高,不会在管道中集成偏差。

事实上,人们可以将采样模型视为 ML 管道中的一个重要模型。这种模型通过从源数据中正确取样,可以更好地代表潜在人口。在下面的图 5 中,我们展示了如何将这样的模型集成到 ML 管道中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5。简单化(上图)与智能采样模型(下图)。上述流程的第一步是从源数据中随机抽样,并获得典型的 80%训练数据和 20%测试数据。底层管道的第一步是关注关键特性,以帮助确保数据的多样性。例如,基于图 2 所示的模型,性别可能是一个关键特征。一旦我们确保了性别的合理分布,我们就可以从这个过滤的数据集中取样,并得到一个训练和测试数据集。

严格地说,当一个人构建一个训练集和一个测试集时,他们也从底层分布中进行采样。但是这种过程不会给采样增加任何约束,因此高度依赖于数据集的偏差程度。如果您怀疑数据集有偏差,那么在采样时遵循简单的均匀分布是不合适的!我最近写了一篇关于过采样的文章来解决类不平衡问题,这篇文章更详细地解释了采样时的均匀分布问题,并深入探讨了这个问题。处理不平衡的数据集自然可以看作是处理有偏差的数据集。例如,假设您事先知道您感兴趣的人群应该是 50%男性和 50%女性。因此,如果训练集并不紧密代表这种分布,并且包含例如 70%男性和 30%女性,那么对于下游任务来说,过采样通常是必要的,正如在这篇必读论文中所解释的。

“智能抽样模型”(ISM)可被视为一种函数,它采用性别和年龄等关键特征以及这些特征在基础人群中的预期分布。然后,在此基础上,ISM 可以从源数据中进行采样,并确保采样数据中很好地代表了预期分布。可以讨论其他更精确的方法,但不在本文的讨论范围之内。下面的图 6 显示了 ISM 背后的一般思想。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6。ISM 背后的一般思想。ISM 允许您根据性别等关键特征,按照一些预定义的要求从源数据中取样。在本例中,用户设置了一个性别先验,ISM 确保这种分布在其输出中得到密切体现。我们从 70%男性,30%女性的分布到 52%男性和 48%女性的分布。

结论:

正如 Soumith Chintala 在推特上正确指出的:

“今天,ML 研究人员无意中为许多非人工智能公司的产品提供了动力,这些公司无知地从互联网上的预训练伯特/雷斯内特/YOLO 开始。可能忽略了许可证、自述文件、发布条款(…)”。

理解数据可能有偏差并透明地解决这一问题需要成为该领域日益关注的问题。

这篇文章很快介绍了一个体系结构,它很难推广到在训练数据中显示偏差的人群子集。正如 FFHQ 的作者含蓄地指出的,有时偏见很难消除,因此 FFHQ 数据集的图片依赖于 Flickr 固有的偏见。

在所有情况下,在 ML 管道中引入智能采样模型( ISM )是关键,正如 Yann Lecun 所建议的,正确的数据采样是减少数据偏差的核心优先事项,因此在后续 ML 架构中也是如此。总之,承认我们架构中的偏见是关键,并且需要在未来受到越来越多的关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值