TowardsDataScience 博客中文翻译 2020(三百三十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

学习 Wolfram:装扮您的数据可视化

原文:https://towardsdatascience.com/dressing-up-your-data-visualization-da7b41b15c6f?source=collection_archive---------45-----------------------

如何把一个基础剧情变成一个牛逼剧情

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

(图片由作者使用NOAAUnsplash 上拍摄的照片)

数据可视化可能是一件棘手的事情。您希望您的数据光彩夺目,但是大多数编程语言(包括 Wolfram 语言)都提供了非常基本的默认可视化外观。装扮一个形象以最大化其吸引力的过程通常是一个试错的过程。这个故事探讨了如何使用一些技巧和窍门来使事情变得简单,从而制作一个吸引人的可视化。

让我们从最简单的图开始,一个简单的 sin(x)图,其中 x 的范围从 0 到 2π:

Plot[ Sin[x], {x,0,Pi} ]

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

(图片由作者提供)

显然,这是一个有用和有效的正弦图渲染,但它有点裸露。添加框架、标签和填充为可视化提供了上下文,并有助于查看者理解什么是重要的:

Plot[Sin[x], {x, 0, 2 Pi}, 
 Frame -> True, Filling -> Axis, 
 PlotLabel -> "f(x) = sin(x)", FrameLabel -> {"x", "sin(x)"}]

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

(图片由作者提供)

最后,添加网格线和改变颜色使绘图具有自定义外观,并易于嵌入具有给定样式的在线仪表板中:

Plot[Sin[x], {x, 0, 2 Pi}, 
 Frame -> True, Filling -> Axis,
 PlotLabel -> "f(x) = sin(x)", FrameLabel -> {"x", "sin(x)"},
 GridLines -> Automatic, Background -> Black, PlotStyle -> Orange]

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

(图片由作者提供)

为了使这更容易,Wolfram 语言预装了八个主题。每个主题都有一组独特的外观设置来创建常见的地块样式:

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

让我们更进一步,使用一个实际的数据集。我使用 Wolfram 数据仓库来选择一个。这个知识库有超过 800 个数据集,由 Wolfram 及其用户社区提供。我挑选了一个非常好的数据集,名为“英格兰中部哈德利中心温度(HadCET)”:

[## 哈德利中心英格兰中部温度(HadCET)数据集

CET 数据集是世界上最长的气温仪器记录

datarepository.wolframcloud.com](https://datarepository.wolframcloud.com/resources/dzviovich_Hadley-Center-Central-England-Temperature-HadCET-Dataset)

您可以通过简单地引用它的名称来获得这个数据集。为了减少图中的抖动,我通过移动平均计算来运行数据:

data = ResourceData["Hadley Center Central England Temperature (HadCET) Dataset"];
data = MovingAverage[data, Quantity[5, "Years"]]

结果是一个 TimeSeries 对象,它可以直接用于可视化功能,如 DateListPlot :

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

(图片由作者提供)

与之前的一样,基本的日期列表图非常简单:

DateListPlot[data]

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

(图片由作者提供)

我们可以添加与之前正弦图相同的样式,但是有两个更有趣的选项,叫做序言结尾Prolog 选项允许您在渲染轴和帧之后、绘制数据之前插入图形元素(线条、多边形、图像)。 Epilog 选项允许你绘制最终的图形图元,这些图元位于包括数据层在内的所有其他图形的顶部。

DateListPlot[data, 
 PlotStyle -> {White, AbsoluteThickness[1]}, 
 Prolog -> Inset[image1, Center, Center, Scaled[{1.2, 1.2}]],
 Epilog -> Inset[image2, Scaled[{1, 0}], {Right, Bottom}, Scaled[{0.2, 0.2}]],
 Filling -> Axis,
 FillingStyle -> Opacity[.3],
 PlotLabel -> Style["Hadley Center Dataset", Bold, 24, FontFamily -> "Copperplate Gothic"],
 FrameLabel -> {"Year", "Temperature"},
 PlotRangePadding -> None
]

这里的图 1图 2 分别是:

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

(图片由作者使用NOAAUnsplash 上拍摄的照片)

结果图显示了各个层:

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

(图片由作者使用NOAAUnsplash 上的照片)

就这么简单!有关所有 Wolfram 语言数据可视化功能的更多详细信息,请查看参考文档中的本指南页面

像 Power BI 中的专家一样钻取

原文:https://towardsdatascience.com/drillthrough-like-a-pro-in-power-bi-ed92effcfe72?source=collection_archive---------27-----------------------

使用按钮的动态格式为您的 Power BI 报告创建出色的用户体验

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

照片由来自 Pexels迈克拍摄

我必须承认,Power BI 开发团队的工作非常出色!每个月(甚至更少,像四月和五月的 BI 桌面更新),他们都在超越和引入奇妙的新功能。

2020 年 3 月,微软宣布页面导航作为按钮的一个动作普遍可用,同时引入了按钮的钻取动作作为预览功能。这听起来真的很吸引我,因为我有很多用户不知道“右键单击”钻取功能,所以我必须创建不同的解决方法,如工具提示,以便让用户在报表中使用钻取。

救援按钮

随着新的按钮钻取操作现在普遍可用,让我们尝试充分利用并为我们的用户提供难忘的体验…

和往常一样,我将使用 Contoso 示例数据库进行演示。在继续之前,与按钮相关的另一个非常有趣的功能是,现在您可以自定义按钮的禁用状态(到目前为止,您可以自定义按钮的默认、悬停时的和按下时的状态)。****

让我们看看这在现实中是如何工作的:

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

我添加了一个空白按钮,并将其格式化为禁用状态(灰色)。

动态调整按钮文本

接下来我要做的是,因为我的报表中有多个钻取页面,所以我可以让我的用户知道他们希望看到什么样的详细信息。在我的例子中,他们可以选择查看“每个品牌的销售额”或“每个颜色的销售额”。

为此,我需要创建一个新表来保存钻取页面的相关数据。转到数据功能区下的输入数据,只需输入钻取页面的名称(表中的值与钻取页面的名称完全匹配非常重要)。我还添加了一个排名栏,以防万一我想以不同于字母顺序的顺序对页面进行排序。

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

现在,只需在画布上拖动切片器,并将页面名称列放入字段的值中。还有一个改善用户体验的小技巧:根据用户的选择,我们希望动态调整按钮上的文本,该文本将用于钻取操作。

因此,我创建了一个简单的 DAX 度量,它捕捉用户的选择:

Selected Page = "Open "& SELECTEDVALUE('Pages DT'[Page])

这将动态改变按钮上的文本:

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

要实现这一点,在按钮的格式选项下,选择按钮文本并选择右边的选项:

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

选择按字段值设置格式,并选择我们新创建的测量,选择页面。

请开拍!

下一步是根据用户的选择,指示我们的按钮做什么。转到按钮的动作属性,再次选择右边的选项,并在“基于字段”下拉菜单中选择页面,将“默认优先”作为摘要类型。因为我们在一个切片器中专门为一个值定义了用户选择(通过打开单选),所以我们不需要担心—无论用户选择什么,这都将是第一个(也是唯一的)选择…

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

最后要做的一件事是格式化按钮的填充属性,这样用户就可以识别它何时可以向下钻取。正如我前面提到的,按钮在禁用状态下是灰色的。但是,只要我从表中选择一个数据点,看看会发生什么!

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

我们的按钮变成蓝色,现在用户可以与它交互并点击它,以便导航到钻取页面,该页面包含 2009 年 6 月的销售额的详细信息。多酷啊!

一旦我们返回主页,并在“钻取页面切片器”下选择“销售金额颜色”,该按钮将返回禁用状态,系统将通知我们,如果我们要钻取包含每个品牌颜色的数据的页面,则需要选择一个品牌。

所以,让我们来看看它是如何工作的:

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

我已经在品牌名称视觉销售额中选择了 Adventure Works 品牌,我的按钮再次准备就绪!点击后,我将被导航到一个页面,该页面显示了 Adventure Works 品牌的每种产品颜色的数据:

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

和前面的例子一样,当我回到主页时,按钮又变灰了。

总而言之,下面是我们按钮的完整行为:

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

结论

通过动态格式化按钮和调整操作来启用不同的钻取页面,您可以真正为 Power BI 报表创建出色的用户体验,避免使用多个书签的复杂性。

成为会员,阅读 Medium 上的每一个故事!

订阅此处获取更多有见地的数据文章!

R 中黄金回报的驱动因素

原文:https://towardsdatascience.com/drivers-of-gold-returns-in-r-3f47bc10d466?source=collection_archive---------45-----------------------

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

Unsplash 上由 Felipe Simo 拍照

来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

作为终极价值储存手段,黄金在过去 18 个月里大幅升值;从 2019 年 3 月的约 1300 美元涨到 9 月 18 日的 1954 美元;增长了 33.4%。事实上,黄金作为一种资产类别,在过去 20 年中表现非常好,明显超过股票;尽管这伴随着长期的表现不佳。

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

黄金价格最近的波动始于实际利率的下降,但随着新冠肺炎和经济状况的迅速恶化而加速。目前,对经济最糟糕的担忧似乎已经避免,但它需要前所未有的货币和财政支持。随着世界各国央行争相扩大资产负债表以支撑资产价值和消费者价格,许多风险最终可能会被社会化。

美联储的资产负债表在过去 10 年中相对稳定,占名义 GDP 的 25%,但最近几个月已经膨胀到 40%。鉴于对未来几年长期复苏和数万亿美元赤字支出的预期,这一比例预计将会增长,因为美联储将越来越需要将联邦债务货币化,以保持较低的名义利率。这可能会与旨在进一步刺激经济的进一步量化宽松措施相结合。

简而言之,金融抑制的时代以超乎寻常的规模回归,这让许多投资者想知道这对通胀、美元和黄金的未来意味着什么。

在这篇文章中,我的目的是调查黄金价格的主要驱动因素。具体来说,我将研究黄金作为金融资产的作用。重点将放在哪些金融变量主要解释黄金价格和黄金回报。

该分析将在 R 中使用大量可用的软件包库进行,包括: PerformanceAnalyticsquantmod 。所有的数据都可以从雅虎免费获得金融和圣路易斯美联储银行弗雷德数据库

任务和设置

在本案例研究中,我们将调查黄金作为金融资产的用途。用金融术语来说,黄金被认为在投资组合中有四个主要用途:

  1. 由于黄金的供应是固定的,法定货币的供应(或多或少)是任意的,通货膨胀通常是积极的,黄金被认为比其法定货币更能有效地保存财富。
  2. **对冲美元疲软:**美元是世界上事实上的储备货币,并隐含着“值钱”的保证。大部分国际贸易(特别是石油)都是以美元进行的,基于美元的融资对于新兴经济体和跨国公司来说非常重要,显然,美元是进入美国资本和商品市场所必需的。因此,汇率代表了美元供求之间的复杂动态。当全球经济状况良好或美国利率较低时,美元被认为会相对于其他主要货币走软。
  3. **防范经济形势恶化:**当全球经济形势疲软时,比如 2008 年或最近的新冠肺炎,黄金被视为终极避险资产。
  4. **对冲市场波动:**用黄金对冲股市波动可以说是黄金更具投机性的用途之一。然而,战术性地使用黄金来对冲市场风险是一个可能的用例。

本研究的目标是评估每种拟议使用案例对黄金价格的影响,并证明是否/何时观察到最强烈的影响。

有几种不同的方法来进行分析,也有不同的方法可以借鉴。为了全面了解黄金价格的本质,我将同时运用四种技术。具体来说,

  1. 线性回归
  2. 归因分析
  3. 聚类分析
  4. 数据可视化

希望通过结合使用这些方法,我们将揭示一个更深入和全面的黄金定价模型。

数据采集、清理和处理

我将使用金融和经济变量来衡量不同来源的黄金风险和回报。我们将使用从 2003 年 1 月 29 日到 2020 年 9 月 2 日的数据。如前所述,所有的数据都可以从雅虎免费获取!金融和弗雷德。

我们将从弗雷德的数据开始。在每个变量旁边,我放置了唯一的标识符,您可以从数据库中查询。

弗雷德数据:

  • 黄金价格:黄金固定价格,伦敦金条市场。(GOLDAMGBD228NLBM)
  • 实际利率:10 年期美国国债收益率。(DFII10)
  • 10 年期美国国债和 10 年期美国国债的名义收益率之差。(T10YIE)
  • 美元对欧元的汇率。(DEXUSEU)

该模型将基于双周数据。但是,FRED 以最高的可用频率检索数据,因此每日数据总是以每日形式出现。此外,数据是从系列的开始检索的,所以您最终会得到许多 NAs。因此,在我们继续之前,我们需要做一些清理工作。

下面的 R 代码段展示了如何将标识符加载到变量中,并分别对 FRED 进行查询。数据被重新索引并转换为两周一次。我已经尽可能多地注释了代码,这样你就可以看到发生了什么。

r 代码:弗雷德数据

如果用例 4 是真的,那么我们可以预期黄金价格会对一般资本市场指数和波动性的变化做出反应。我们将从历史悠久的雅虎获得这两个变量的数据。金融:

  • 市场:标准普尔 500 指数(^GSPC)
  • 波动性:波动率指数(^VIX)

r 码:雅虎!金融数据

建模

以下是黄金和我们提出的一组变量的相关矩阵:

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

我们观察到,黄金和利率变量之间的相关性不是特别强,实际利率和美元对欧元的汇率是最突出的。

下图显示了黄金价格与负的 10 年期 TIPS 收益率的关系(回想一下,我们使用 TIPS 收益率作为实际利率的代表)。我已选择将 TIPS 上的收益率显示为负值。因为相关性是负的,所以系列会彼此反向移动,将收益率显示为负有助于展示趋势。

我们观察到,在该系列的早期,相关性较弱,但在过去 10 年中,尤其是最近,相关性非常紧密。

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

我们可以在下图中看到黄金价格和美元/欧元汇率之间的关系。从 2003 年到 2010 年,黄金和欧元同时升值,在 2010 年的大部分时间里总体呈下降趋势,但最近又开始回升。美元/欧元落后于黄金的涨势,但在撰写本文时,美元/欧元处于两年多来的最高水平。

这两者之间的相关性在 2010 年之后的系列早期更明显,但这可能是意料之中的。过去 10 年,欧洲一直在应对危机,包括 2011 年的主权债务危机和 2016 年的英国退出欧盟危机。欧盟一直受到经济增长乏力的困扰,因此欧元和黄金经历脱钩时期也就不足为奇了。

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

我对黄金价格和解释变量进行了简单的回归,以评估不同的影响,并提供进一步研究的线索。提议的模型如下:

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

其中:

  • rGold,t =黄金在时间‘t’的价格回报
  • Chg。实际利率= 10 年实际利率的水平变化
  • Chg。通胀= 10 年通胀预期的水平变化
  • 欧元兑美元 =欧元兑美元汇率的回归
  • rS&P= S&p500 的价格回报
  • Chg。VIX= VIX 的水位变化

严格回报变量(欧元兑美元和 S & P)产生弹性。弹性是对一个经济变量的百分比变化响应另一个经济变量的百分比变化的度量。数学上,弹性定义如下:

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

相比之下,代表水平变化的变量产生半弹性。半弹性衡量一个经济变量对另一个经济变量的单位变化的百分比变化。半弹性计算如下:

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

由于实际利率、通胀预期和 VIX 已经被定义为百分比,它们各自的系数被解释为:给定解释变量 1 个百分点的变化,黄金价格(即回报)的百分比变化。如果你熟悉债券交易,这与修正期限的解释是一样的,修正期限给出了收益率变化 1 个百分点时债券价格的预期百分比变化。

r 代码:回归和归因分析

回归的输出如下:

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

我们立即看到,实际利率的水平变化和美元对欧元汇率的百分比变化(即回报率)在统计上非常显著,而通胀预期的水平变化、标准普尔 500 的回报率和 VIX 的水平变化则明显不显著。实际利率变动系数-.045 可以解释为,假设实际利率上升/下降 1 个百分点,我们预计黄金价格下降/上升 4.5%;这证实了我们先前所预期的先验。欧元系数被解释为,如果美元对欧元汇率上升/下降 1%,我们预计黄金价格将上升/下降 0.71%(71 个基点)。

调整后的 R 平方为 0.23,表明模型中仍存在相当大的可变性。考虑到提出的 5 个变量中只有 2 个具有统计意义,这仍然为我们提供了相当多的有用信息。

将我们的注意力集中在作为我们感兴趣的变量的实际利率和欧元对美元的汇率上之后,我们可以更深入一点来评估这两个变量在模型中的相对重要性。为了做到这一点,我使用了 r .relimpo中可用的包,它提供了一套函数,用于将回归的方差分解为模型回归元所做的相对贡献。我将使用排序的平均顺序平方和方法来执行分解。这种特殊的技术递归地对模型中的变量进行重新排序,并记录初始的 R 平方,当添加一个变量时 R 平方如何变化,并计算平均值。

为了方便起见,我们将从模型中去掉无关紧要的变量,这样就只需要考虑两种排序:

  1. 实际利率>>>欧元-美元
  2. 欧元-美元>>>实际利率

顺序平方和分解的结果如下:

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

从分解中获得的 R 平方约为 23%,这与之前的模型结果相匹配。在这 23%中,7%的差异是由实际利率的变化造成的,16%是由汇率的变化造成的。换句话说,30%的解释差异归因于利率,其余 70%归因于汇率。因此,美元对欧元的汇率是解释黄金价格的主要变量。

如果我们参考本文的开头,我们提出黄金的两个功能是 1)对冲美元的变化(特别是美元疲软),和 2)对冲广泛恶化的经济条件。我们的结果似乎证实了这些观点。实际利率的下降通常与经济状况的恶化有关,在这种情况下,我们预计黄金会升值。同样,美元疲软往往与全球经济其他地区的经济状况改善有关,在这种情况下,我们预计黄金会升值。

为了形象化这些影响,我分别绘制了黄金收益率与美元/欧元汇率的实际收益率和收益率的变化,以及置信区间和预测区间。对于黄金对美元/欧元的图表,我们看到一个非常一致的上升趋势和紧密的配合。汇率的任何一个方向的变动都会引起黄金相应的反应。对于黄金与实际收益率,我们观察到一条向下的斜线,正如我们所料,但斜率似乎因收益率的极端变动而加剧。

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

r 代码:带置信区间和预测区间的图

k-均值聚类分析

到目前为止,我们已经单独研究了实际利率和汇率变化对黄金的影响。需要注意的是,利率和汇率之间的关系很复杂。理论表明,随着实际利率的下降/上升,以美国为基础的资产变得相对不那么/更有吸引力,这将推动以美元计价的汇率的下降/上升。然而,在重大全球经济压力时期(如 08-09 年和最近的 COVID),美国资产(特别是美国国债)被投资者视为“安全港”资产,这(违反直觉)压低利率并推高美元。此外,实际利率是名义利率和通胀预期的函数。如果通胀预期比名义汇率下降得更快,我们可以看到实际汇率实际上在上升,即使经济崩溃了;这相当于在经济衰退时收紧货币政策,与你想做的事情完全相反。

为了试图理清这些混杂的影响,我采用了聚类分析。聚类分析是一套广泛的技术,用于在数据集中查找观察值的子组。我选择使用的具体方法是 k-means 聚类。k-means 聚类的基本思想包括定义聚类,以使总的类内变化(称为总的类内变化)最小化。有几种 k 均值算法可用。我将使用的 k-means 方法的具体实现将总的类内变化定义为观察值和相应质心之间的平方距离欧几里得距离之和:

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

其中:

  • xi =是属于该集群的数据点
  • uk =分配给聚类的点的平均值

我们将总体组内变化定义如下:

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

总的类内平方和度量了类的紧凑性(即良好性),我们希望它尽可能小。

选择质心(即平均值)的数量有点棘手,需要一些数据挖掘,但是我们可以使用一些诊断工具来帮助。下面的代码显示了我的过程。注意,运行 k-means 聚类所需的所有函数在 base R 中都有。

重要的是要弄清楚我们事先并不知道质心的“真实”数量。为了初始化模型,我使用了三个,但是建议可以有五个质心。对于迭代 1 到 5,我记录了平方和(BSS)与总平方和(TSS)的比值。这个比率告诉我们总方差的多大比例是由聚类数解释的。随着集群数量的增加,这个比率将开始接近 1;如果聚类数 C 等于观察数,则它等于 1。目标是在解释的方差和聚类数之间取得平衡,因为这给我们提供了更一般的结果。

为了有效地做到这一点,我使用了一个侧影图,它描绘了簇的数量与 BSS/TSS 比率的关系。一般来说,您希望在开始看到图趋于平稳的点上选择聚类数。这意味着大量的差异是由少量的聚类来解释的,增加更多的聚类对模型的解释力没有有意义的贡献。从下图中我们可以看到,对于群集 1–3,BSS/TSS 比率急剧上升,在群集 4 时增益开始减速,在群集 5 时趋于平稳。

r 代码:k-均值聚类分析

下表显示了不同集群规模的 BSS/TSS 比率,以及随着集群规模的增加而增加的比率:

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

聚类分析表明,大部分数据可以用 4 个聚类来解释;超过这个数目,收益就小了。不可否认,很难判断是 3 个集群还是 4 个集群更合适,但对我来说 4 个集群更合适。

每个聚类的大小(即观察次数)和质心如下:

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

结果非常符合我们的预期。对于第 1 类和第 2 类,黄金价格的下跌与美元升值和实际收益率的上升是相称的。对于第 3 组和第 4 组,黄金价格的上涨伴随着美元贬值和实际汇率的下降。聚类 2 和 3 是最有趣的(对我来说),因为它们包含最少的观察值,并代表了解释变量和黄金价格的极端运动。

有了这些结果,我们就可以绘制数据,用颜色对数据进行分类,以便将相互作用可视化。为此,我们将利用软件包散点图 3D 。在下图中,聚类颜色如下:

  • 聚类 1 =黑色
  • 集群 2 =绿色
  • 集群 3 =蓝色
  • 聚类 4 =浅粉色

我为这个情节呈现了两个不同的天使。第一个在 x 轴上绘制汇率,第二个在 x 轴上绘制实际收益率。我还用回归平面覆盖了相应的图表,这样我们就可以看到数据的趋势。

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

r 代码:3D 散点图

结论

在这篇文章中,我们深入探讨了黄金以及对其影响最大的经济变量。我们使用回归分析和优势归因来确定黄金主要受美元相对强势(以美元/欧元汇率为代表)和实际利率的影响。此外,我们发现黄金相对不受其他金融和经济变量的影响,如标准普尔 500、波动性或通货膨胀。

其次,我们使用 k-means 聚类分析来检验利率、美元和黄金之间的联合关系。基于聚类分析的结果,我们确定,实际利率的下降/上升确实与美元的疲软/走强相关,这将对黄金价格产生重大影响,尤其是在走势极端的情况下。

在这个过程中,我展示了我使用的 R 代码和包,以便您可以将它们应用到自己的项目中。

希望这篇文章已经让你想到了一点(很多!)更多关于黄金及其在你的投资组合中的用途。

下次见,感谢阅读!

王高·莱克丝。

原载于 2020 年 9 月 25 日http://light finance . blog

黑人开车——数据说明了什么?

原文:https://towardsdatascience.com/driving-while-black-what-does-the-data-say-e77cac9ab15b?source=collection_archive---------35-----------------------

统计数据显示,黑人司机被警察拦下并逮捕的频率更高,而不法行为的证据却更少

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

克里斯·亨利在 Unsplash 上的照片

系统性种族主义是一种影响我们社会结构的种族主义。

乍一看,可能很难察觉。

自从唐纳德·特朗普当选以来,仇恨犯罪的数量有所增加。白人至上主义者有恃无恐,反移民情绪加剧。

然而,系统性的种族主义是不同的。这不是关于暴力和仇恨犯罪,而是关于那些甚至不认为自己是种族主义者的人所做的日常决定。

系统性的种族主义无处不在。它存在于学校、法院、办公室和警察局。

我们需要做得更好,积极地识别和呼唤它。

在这篇文章中,我使用了来自斯坦福开放警务项目的数据来理解刑事司法系统中的系统性种族主义。

斯坦福开放警务项目旨在帮助研究人员和政策制定者调查和改善警察与公众之间的互动。

他们从全国执法机构的数百万个交通站点收集并分析数据。

所有的数据都已经免费向公众开放,任何人都可以进入并对现有的数据进行分析。

他们的网站上有来自许多不同城市的大量数据集。为了这篇文章,我对俄亥俄州哥伦布市的警察拦截进行了分析。

数据结果

按种族逮捕:

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

在这个数据集中,白人的比例比其他任何种族都高。

然而,黑人被逮捕的人数要比白人多得多,黑人为 3,123 人,白人为 1,781 人。

逮捕,种族,并发出传票

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

即使没有发出传票,黑人司机也比其他种族的司机更容易被逮捕。

逮捕、种族和性别

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

黑人男性和女性比其他种族的男性和女性更有可能被警察逮捕。

按年份逮捕的人数

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

随着时间的推移,在警察局被逮捕的白人数量有所减少。相比之下,自 2013 年以来,被捕的黑人人数大幅增加。

随着时间的推移逮捕

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

下午 4 点左右似乎是逮捕人数的高峰。然而,种族和逮捕时间之间似乎没有任何明显的关联。

这一分析的结果表明,警务工作中存在显著的种族差异。

然而,重要的是要记住,这项分析仅使用了大约 10 万条记录,可能需要更多的数据才能得出具有统计意义的结论。

如果你想看看更多的数据,了解警察拦截中的种族差异,我建议访问斯坦福开放警务项目网站

他们拥有上亿次交通警察拦截的数据,并展示了对这些数据进行大规模统计分析的结果。

深度强化学习的温和介绍

原文:https://towardsdatascience.com/drl-01-a-gentle-introduction-to-deep-reinforcement-learning-405b79866bf4?source=collection_archive---------0-----------------------

深度强化学习讲解— 01

学习强化学习的基础知识

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

这是“深度强化学习讲解”系列的第一篇帖子;一个介绍性的系列逐渐地用一种实用的方法向读者介绍现代深度强化学习中使用的基本概念和方法。

本出版物的西班牙语版本:

[## 1.介绍难民的生活

请访问第 1 页的自由介绍

medium.com](https://medium.com/aprendizaje-por-refuerzo/1-introducci%C3%B3n-al-aprendizaje-por-refuerzo-92c9239aed90)

深度强化学习(DRL)是一个发展非常迅速的领域,是强化学习和深度学习的结合。它也是最具趋势的机器学习类型,因为它可以解决广泛的复杂决策任务,这些任务以前是机器无法用类似人类的智能解决现实世界问题的。

今天,我开始了一个关于深度强化学习的系列,这将使这个主题更加贴近读者。目的是回顾该领域,从专业术语和术语到该领域的基本概念和经典算法,新手不会在开始这个惊人的领域时迷路。

我第一次认真接触深度强化学习是在加的斯(西班牙),2016 年机器学习暑期学校期间。我参加了约翰·舒尔曼(当时来自加州大学伯克利分校OpenAI 的联合创始人)关于深度强化学习的为期三天的研讨会。

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

(约翰·舒尔曼在 2016 年机器学习暑期学校的研讨会上(作者提供照片)

这太棒了,但我也不得不承认,对我来说,理解约翰的解释非常困难。从那以后已经很久了,感谢和 Xavier Giró以及 Victor Campos 和 MPh 这样的博士生一起工作。D.am Bellver,我已经能够向前迈进,享受这个主题。

但是即使几年过去了,我真诚地相信他提出的不同强化学习方法的分类法仍然是初学者组织知识的好方法。

动态编程其实是课本上大多数强化学习课程开始的。我会这样做,但在此之前,正如约翰在他的研讨会上所做的那样,我将介绍交叉熵方法,一种进化算法,尽管大多数书都没有涉及它。在强化学习中引入深度学习的第一种方法会非常好,深度强化学习,因为这是一种简单易行的方法,而且效果惊人。

通过这种方法,我们将能够在进入更经典的处理 RL 问题的方法之前,方便地回顾深度学习和强化学习如何合作,而不考虑 DL,例如动态编程蒙特卡洛时间差异学习遵循关于该主题的绝大多数学术书籍的顺序。然后,我们将把本系列的最后一部分作为策略梯度方法致力于 DL + RL 的最基本算法(不是最先进的,因为它很普遍)。

具体来说,在这第一份出版物中,我们将简要介绍什么是深度强化学习,以及在这一研究和创新领域使用的基本术语。

我认为深度强化学习是人工智能中最令人兴奋的领域之一。它将深度神经网络的力量和能力结合起来,以表达和理解世界,并根据这种理解采取行动。让我们看看我是否能分享这种兴奋。开始了。

1.背景

人工智能 (AI)中的振奋人心的新闻,近几年才刚刚发生。例如,AlphaGo 在围棋比赛中击败了最好的职业人类选手。或者去年,例如,我们的朋友 Oriol Vinyals 和他在 DeepMind 的团队展示了 AlphaStar 代理在星际争霸 2 的游戏中击败了职业选手。或者几个月后,OpenAI 的 Dota-2-playing bot 成为第一个在电子竞技比赛中击败世界冠军的 AI 系统。所有这些系统的共同点是,它们使用深度强化学习(DRL)。但是什么是人工智能和 DRL 呢?

1.1 人工智能

我们必须退一步来看看学习的类型。有时术语本身会让我们对基本原理感到困惑。人工智能是计算机科学的主要领域,强化学习 (RL)也属于其中,它是一门与创建显示类似人类“智能”的计算机程序有关的学科。

当我们谈论人工智能时,我们指的是什么?人工智能(AI)是一个广阔的领域。即使是权威的人工智能教科书人工智能,由 Stuart RusellPeter Norvig 撰写的现代方法,也没有给出精确的定义,并从不同的角度讨论人工智能的定义:

人工智能:现代方法(AIMA)第三版,Stuart J Russell 和 Peter Norvig,Prentice Hall,2009 年。国际标准书号 0–13–604259–7

毫无疑问,这本书是对这个主题有一个全球视野的最好起点。但是,为了尝试一种更通用的方法(本系列的目的),我们可以接受一个简单的定义,其中人工智能是指机器显示的智能,与人类的自然智能相反。从这个意义上说,人工智能的一个可能的简明而概括的定义可能是将通常由人类执行的智力任务自动化的努力。

因此,人工智能领域是一个广阔的科学领域,涵盖了与机器学习相关的许多知识领域;甚至更多的方法并不总是被编目,因为机器学习被我的大学同事们包括在内,他们是该领域的专家。此外,随着时间的推移,随着计算机越来越能够“做事情”,被认为“智能”的任务或技术也在发生变化。

此外,自 20 世纪 50 年代以来,人工智能经历了几波乐观情绪,随后是失望和失去资金和兴趣(被称为 AI winter 的时期),随后是新方法、成功和融资。此外,在其历史的大部分时间里,人工智能研究一直基于技术考虑或具体的数学工具动态地划分为子领域,并且研究社区有时相互之间没有充分沟通。

1.2 机器学习

机器学习(ML)本身就是一个很大的研发领域。特别是,机器学习可以被定义为人工智能的子领域,它赋予计算机学习的能力,而不需要显式编程,也就是说,不需要程序员指出完成任务必须遵循的规则;电脑会自动完成。

概括地说,我们可以说机器学习包括为每个问题的特定用例开发预测“算法”。这些算法从数据中学习,找到模式或趋势,以理解数据告诉我们什么,并以这种方式建立一个模型来预测和分类元素。

鉴于机器学习研究领域的成熟,有许多成熟的机器学习方法。它们中的每一个都使用不同的算法结构来基于接收到的数据优化预测。机器学习是一个广泛的领域,具有复杂的算法分类,通常分为三个主要类别:

  • 监督学习是从标记数据中学习的任务,它的目标是去泛化。我们的意思是,当我们用于训练的数据包括期望的解决方案时,学习受到监督,称为“标签”。这一类别中一些最流行的机器学习算法是线性回归、逻辑回归、支持向量机、决策树、随机森林或神经网络。
  • 无监督学习是从无标签数据中学习的任务,其目标是压缩。当训练数据不包括标签时,我们称之为无监督学习,算法将尝试自己对信息进行分类。这一类别中一些最著名的算法是聚类(K-means)或主成分分析(PCA)。
  • 强化学习是通过试错学习的任务,其目标是行动。这个学习类别允许它与其他类别相结合,它现在是一个非常活跃的研究领域,我们将在这个系列中看到。

1.3 深度学习

与这种分类正交的是,我们可以考虑一种强大的 ML 方法,称为深度学习 (DL),这是我们在以前的帖子中广泛讨论过的主题。请记住,深度学习算法是基于人工神经网络的,其算法结构允许由多个处理层组成的模型学习各种抽象级别的数据表示。

DL 不是一个独立的 ML 分支,所以它不是一个不同于上面描述的任务。DL 是使用神经网络解决 ML 任务的技术和方法的集合,可以是监督学习、非监督学习或强化学习。我们可以在图 1 中用图形表示它。

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

图 1:深度学习和机器学习类别的可视化关系。

1.4 深度强化学习

深度学习是我们今天处理非结构化环境的最佳工具之一;他们可以从大量数据中学习或发现模式。但这不是决策;这是一个认知问题。强化学习提供了这一特性。

强化学习可以使用各种 ML 方法和技术来解决问题,从决策树到支持向量机,再到神经网络。但是,在这个系列中,我们只使用神经网络;毕竟,这就是 DRL 的“深”的部分。然而,神经网络不一定是所有问题的最佳解决方案。例如,神经网络非常渴求数据,很难解释。然而,毫无疑问,神经网络是目前可用的最强大的技术之一,其性能往往是最好的。

2.强化学习

在本节中,我们提供了 RL 的第一种简单方法,因为它对于很好地理解深度强化学习(一种特殊类型的 RL)至关重要,深度强化学习具有用于状态表示和/或用于值函数、策略等的函数近似的深度神经网络。

2.1 通过互动学习

当我们思考学习的本质时,通过与环境互动来学习可能是我们想到的第一种方法。这是我们凭直觉判断婴儿学习的方式。我们知道,这种互动无疑是人们一生中关于我们的环境和我们自己的重要知识来源,而不仅仅是婴儿。例如,当我们在学习驾驶汽车时,我们完全意识到环境对我们所做的反应,我们也试图通过我们的行动来影响我们环境中发生的事情。从互动中学习是几乎所有学习理论的基础,也是强化学习的基础。

与其他机器学习方法相比,强化学习方法更侧重于从交互中进行目标导向的学习。学习实体没有被告知要采取什么行动,而是必须通过“试错法”来测试,自己发现哪些行动产生了最大的回报,即其目标。此外,这些行为不仅会影响即时回报,还会影响未来的回报,即“延迟回报”,因为当前的行为将决定未来的情况(在现实生活中如何发生)。这两个特征,“试错”搜索和“延迟奖励”,是强化学习的两个显著特征,我们将在这一系列文章中讨论。

2.2 强化学习的关键要素

强化学习(RL)是一个受各种其他成熟领域影响的领域,这些领域解决不确定性下的决策问题。例如,控制理论研究控制复杂的已知动力系统的方法;然而,我们试图控制的系统的动力学通常是预先知道的,不像 DRL 的情况,它不是预先知道的。另一个领域是运筹学,它也研究不确定情况下的决策,但通常会考虑比 RL 中常见的更大的行动空间。

因此,这些领域之间存在协同作用,这对科学进步无疑是积极的。但是它也带来了一些术语、符号等方面的不一致。这就是为什么在这一节中,我们将详细介绍我们将在整个系列中使用的术语和符号。

强化学习本质上是一个决策问题的数学形式化,我们将在本系列的后面介绍。

代理和环境

强化学习有两个核心组成部分:

  • 一个 Agent ,代表“解决方案”,是一个计算机程序,它的单一作用是做出决策(行动)来解决不确定情况下的复杂决策问题。
  • 一个环境,那是一个“问题”的表示,是在代理人决定之后出现的一切。环境对这些行为的结果作出反应,这些结果是观察或状态,以及奖励,有时也称为成本。

比如井字游戏,我们可以考虑代理人是其中一个玩家,环境包括棋盘游戏和另一个玩家。

这两个核心部分不断地相互作用,因此主体试图通过行动影响环境,而环境对主体的行动作出反应。环境如何对特定动作作出反应是由模型定义的,该模型可能为代理所知,也可能不为代理所知,这区分了两种情况:

  • 当代理知道模型时,我们将这种情况称为基于模型的 RL 。在这种情况下,当我们充分了解环境后,可以通过动态规划找到最优解。这不是这篇文章的目的。
  • 当代理人不知道模型时,需要用不完全信息进行决策;做*无模型 RL,*或者尝试明确学习模型作为算法的一部分。

状态

环境由一组与问题相关的变量来表示(非常依赖于我们想要解决的问题的类型)。这组变量和它们可能取的所有值被称为状态空间。一个状态是状态空间的一个实例,一组变量取值。

观察

由于我们考虑到代理无法访问环境的实际完整状态,所以通常称之为观察,即代理可以观察到的那部分状态。然而,我们会经常在文献中看到观察和状态被互换使用,所以我们将在这一系列的文章中这样做。

动作和转换功能

在每个状态,环境提供一组可用的动作,代理将从中选择一个动作。代理通过这些动作影响环境,并且环境可以作为对代理动作的响应而改变状态。负责这种映射的函数在文献中称为状态间的转移函数转移概率

报酬

环境通常具有明确定义的任务,并且可以向代理提供奖励信号,作为对代理行为的直接回答。这种奖励是对最后一个行动有助于完成环境要执行的任务的反馈。负责该映射的函数被称为奖励函数。正如我们将在后面看到的,代理人的目标是最大化其获得的整体回报,因此回报是代理人以期望的行为行动的动机。

强化学习周期

让我们在下图中总结一下之前在强化学习周期中介绍的概念:

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

图 2:强化学习周期。

一般来说,强化学习基本上就是把这个数字变成一种数学形式主义。

这个循环始于代理观察环境(步骤 1)并接收状态和奖励。代理使用这个状态和奖励来决定下一步要采取的行动(步骤 2)。代理然后向环境发送动作,试图以有利的方式控制它(步骤 3)。最后,环境转换,并且由于先前的状态和代理的动作,其内部状态也随之改变(步骤 4)。然后,循环重复。

插曲

代理人试图解决的任务可能有也可能没有自然的结局。有自然结局的任务,比如游戏,被称为情节任务。相反,没有完成的任务被称为连续任务,例如学习向前运动。从一个情节任务的开始到结束的时间步长的序列被称为一个情节

返回

正如我们将看到的,代理可能需要几个时间步骤和情节来学习如何解决任务。单集收集的奖励总和称为回报。代理商通常被设计成最大化回报。

其中一个限制是,这些奖励直到一集结束才透露给代理人,我们之前介绍的是“延迟奖励”。例如,在井字游戏中,每个动作的奖励直到游戏结束才知道。如果代理人赢得了游戏(因为代理人已经达到了整体期望的结果),它将是正奖励;如果代理人输掉了游戏,它将是负奖励(惩罚)。

探索与开发

强化学习的另一个重要特征和挑战是“探索”和“利用”之间的权衡。为了获得更多的奖励,一个代理人必须更喜欢他过去尝试过的行为,并且知道这些行为会有效地产生奖励。但矛盾的是,为了发现这种行为,它必须尝试以前从未选择过的行为。

总之,一个代理人必须利用他已经经历过的事情来获得尽可能多的回报,但同时,他也必须探索在未来做出更好的选择。勘探开发困境是一个至关重要的课题,也是一个尚未解决的研究课题。我们将在本系列的后面讨论这种权衡。

3.冰湖的例子

让我们通过看一个简单的例子来加强对强化学习的理解,一个冰冻的湖(非常滑),我们的代理可以在这里滑冰:

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

作者的图纸。

我们将使用的冰湖环境是一个溜冰场,分为 16 个单元(4x4),如下图所示,一些单元已经破冰。名为 Agent 的滑冰者从左上方的位置开始滑行,它的目标是到达右下方的位置,避免掉入轨道中的四个洞。

描述的例子被编码为来自体育馆冰湖环境。通过这个环境示例,我们将回顾并澄清到目前为止介绍的 RL 术语。这个例子对于本系列的后续文章也很有用。

3.1 健身房工具包

OpenAI 是一个人工智能(AI)研究机构,它提供了一个名为 Gym 的著名工具包,用于训练一个强化学习代理来开发和比较 RL 算法。Gym 为训练一个 RL 代理提供了各种各样的环境,从经典的控制任务到 Atari 游戏环境。我们可以训练我们的 RL 代理在这些模拟环境中使用各种 RL 算法进行学习。在整个系列中,我们将使用 Gym 工具包来构建和评估用于几个经典控制任务的强化学习算法,例如车杆平衡或登山车攀爬。

Gym 还提供了 59 个雅达利游戏环境,包括 Pong、太空入侵者、空袭、小行星、蜈蚣、吃豆人女士等。训练我们的强化学习代理玩 Atari 游戏是一项有趣且具有挑战性的任务。在这个系列的后面,我们将训练我们的 DQN 强化学习代理在 Atari Pong 游戏环境中进行游戏。

让我们介绍一个最简单的环境作为例子,叫做冰湖环境。

3.2 冰湖环境

当代理生活在大小为 4x4(有 16 个单元)的网格中时,冰湖环境来自所谓的网格世界类别,这意味着在网格世界的 i,j 坐标中由 16 个状态(0–15)组成的状态空间

在冰湖中,代理总是从左上角位置开始,它的目标是到达网格的右下角位置。网格的固定单元格中有四个洞,如果代理人进入那些洞,结束,获得的奖励为零。如果代理到达目的地细胞,它将获得+1 的奖励,并且结束。下图显示了冰湖环境的可视化表示:

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

图 3:冰湖环境的可视化表示。

为了达到目标,代理有一个由四个方向运动组成的动作空间:上、下、左、右。我们还知道湖的周围有栅栏,所以如果代理人试图离开网格世界,它只会反弹回它试图离开的单元格。

因为湖面结冰,世界很滑,所以代理人的行动并不总是像预期的那样——有 33%的可能性会滑向右边或左边。例如,如果我们想让代理向左移动,那么它有 33%的概率会向左移动,有 33%的概率会出现在上面的单元格中,有 33%的概率会出现在下面的单元格中。

环境的这种行为反映在前面介绍的转移函数转移概率中。然而,在这一点上,我们不需要进入这个函数的更多细节,留待以后。

作为总结,我们可以在下图中直观地表示所有这些信息:

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

图 4:冰湖例子的强化学习循环的示意图。

3.3 环境编码

我们来看看这种环境在 Gym 中是如何表现的。我建议使用 Google 提供的Colab来执行这篇帖子中描述的代码(已经安装了 Gym 包)。如果你喜欢使用你的 Python 编程环境,你可以使用这里提供的步骤来安装 Gym。

第一步是导入健身房:

*import gym*

然后,从健身房指定你想使用的游戏。我们将使用冰湖游戏:

*env = gym.make('FrozenLake-v0')*

游戏的环境可以被重置到初始状态,使用:

*env.reset()*

为了查看游戏状态,我们可以使用:

*env.render()*

render()渲染的表面使用如下网格呈现:

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

其中突出显示的字符表示代理在当前时间步长中的位置,并且

  • “S”表示起始单元(安全位置)
  • “F”表示冰冻表面(安全位置)
  • “H”表示一个洞
  • “G”:表示目标

官方文档可以在这里找到查看健身房工具包的详细用法和解释。

3.4 代理人编码

目前,我们将创建一个最简单的代理,它只执行随机操作。为此,我们将使用从动作空间中随机抽取动作的action_space.sample()

假设我们最多允许 10 次迭代;以下代码可以成为我们的“哑”代理:

*import gymenv = gym.make("FrozenLake-v0")
env.reset()for t in range(10):
   print("\nTimestep {}".format(t))
   env.render()
   a = env.action_space.sample()
   ob, r, done, _ = env.step(a)
   if done:
      print("\nEpisode terminated early")
      break*

如果我们运行这段代码,它将输出类似下面这样的内容,在这里我们可以观察时间步长、操作和环境状态:

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

总的来说,如果不是几乎不可能,找到一集我们的“哑”代理,在随机选择的行动中,它可以克服障碍并到达目标细胞,这是具有挑战性的。那么,我们如何建立一个代理来实现它呢?。这是我们将在本系列的下一部分中介绍的内容,我们将进一步形式化这个问题,并构建一个新的代理版本,它可以学习到达目标单元。

4.强化学习与其他学习模式有何不同

为了结束这篇文章,让我们回顾一下强化学习的基础,将其与其他学习方法进行比较。

4.1 强化学习与监督学习

在监督学习中,系统从由一对带标签的输入和输出组成的训练数据中学习。因此,我们使用训练数据训练模型(代理),使得模型可以将其学习推广到新的看不见的数据(输入和输出的标记对指导模型学习给定的任务)。

让我们用一个例子来理解监督学习和强化学习的区别。想象一下,我们想要训练一个模型使用监督学习来下棋。在这种情况下,我们将使用一个训练数据集来训练模型进行学习,该数据集包括玩家在每个状态下可以做出的所有移动,以及指示这是否是一个好移动的标签。然而在 RL 的情况下,我们的代理将不会被给予任何种类的训练数据;相反,我们只是为代理执行的每个操作提供奖励。然后,代理将通过与环境的交互来学习,它将根据它获得的奖励来选择它的行动。

4.1 强化学习与无监督学习

与监督学习类似,在无监督学习中,我们基于训练数据来训练模型。但是在无监督学习的情况下,训练数据不包含任何标签。这导致了一个常见的误解,即 RL 是一种无监督的学习,因为我们没有标签作为输入数据。但事实并非如此。在无监督学习中,模型学习输入数据中的隐藏结构,而在 RL 中,模型通过最大化奖励来学习。

一个经典的例子是电影推荐系统,它想向用户推荐一部新电影。通过无监督学习,模型(代理)将找到与用户(或与用户具有相似简档的用户)之前观看的电影相似的电影,并向用户推荐新电影。相反,通过强化学习,代理不断地接收来自用户的反馈。这个反馈代表奖励(奖励可以是看电影的时间、看预告片的时间、他连续看了多少部电影等等)。基于奖励,RL 代理将理解用户的电影偏好,然后相应地建议新电影。重要的是要注意,RL 代理可以知道用户的电影偏好是否改变,并根据用户改变的电影偏好动态地建议新电影。

4.3 强化学习中的数据在哪里?

我们可以认为我们在强化学习中没有监督或无监督学习中的数据。然而,数据实际上是环境,因为如果你与这个环境互动,那么数据(轨迹)可以被创建,这是观察和行动的序列。然后我们可以在上面做一些学习,这基本上就是强化学习的核心。

有时,我们可以使用来自现有的人或轨迹的额外数据,例如在模仿学习中。我们实际上可能只是观察一群玩游戏的人,我们不需要知道环境是如何运作的。有时我们已经明确给出了一个数据集,作为一种监督数据集,但在纯强化学习设置中,唯一的数据是环境

5.RL 的应用

强化学习在过去几年里发展迅速,应用广泛。这种演变的主要原因之一是强化学习和深度学习的结合。这就是为什么我们把这个系列的重点放在介绍基本的最先进的深度强化学习算法(DRL)上。

5.1 Real 的实际应用

媒体倾向于关注 DRL 在游戏中击败人类的应用,比如我在本文开头提到的例子:AlphaGo 在围棋比赛中击败了最好的职业人类选手;AlphaStar 在星际争霸 2 的游戏中击败了职业选手;OpenAI 的 Dota-2 游戏机器人在一场电子竞技比赛中击败了世界冠军。

幸运的是,DRL 在现实生活中有很多应用。其中一个著名的领域是无人驾驶汽车。在制造业中,使用 DRL 训练智能机器人将物体放置在正确的位置,从而降低劳动力成本,提高生产率。RL 的另一个流行应用是动态定价,它允许根据需求和供应来改变产品的价格。此外,在推荐系统中,RL 用于构建推荐系统,其中用户的行为不断变化。

在当今的商业活动中,DRL 被广泛用于供应链管理、需求预测、库存管理、处理仓库业务等。DRL 还广泛用于金融投资组合管理、预测和商业交易市场的交易。DRL 常用于一些自然语言处理任务,如抽象文本摘要、聊天机器人等。

许多最近的研究论文提出了 DRL 在医疗保健、教育系统、智能城市等领域的应用。总而言之,没有一个行业不受 DRL 的影响。

5.2 的安全和安保

DRL 特工有时可以控制危险的现实生活环境,如机器人或汽车,这增加了做出错误选择的风险。有一个名为 safe RL 的重要领域试图应对这种风险,例如,学习一种在预定义的安全约束内操作时实现回报最大化的策略。

此外,像任何其他软件系统一样,DRL 代理也面临着被攻击的风险。但是 DRL 在传统的机器学习系统之上增加了一些新的攻击手段,因为总的来说,我们正在处理的系统要复杂得多,难以理解和建模。

考虑到 DRL 系统的安全性超出了本文的介绍范围。不过,我希望读者能够意识到这一点,如果将来您将 DRL 系统投入运行,请记住,您应该更深入地对待这一点。

5.3 我们不能逃避我们的责任

人工智能肯定正在渗透社会,就像电一样,我们会期待什么?我们将“发明”的未来是我们共同做出的选择,而不是偶然发生的事情。我们处于有利地位。有了 DRL,我们有权力和权威来自动化决策和整个战略。

这很好!但正如生活中的大多数事情一样,有光的地方就会有阴影,而 DRL 技术落入坏人之手是危险的。我问你,当工程师考虑我们正在建造的东西时:我们的 DRL 系统会意外地增加偏见吗?这对个人有什么影响?。或者,我们的解决方案会因其能源消耗而对气候产生怎样的影响?我们的 DRL 解决方案会被意外使用吗?还是用?。或者,根据我们的伦理,它能有一种我们认为邪恶的用途吗?

我们必须仔细考虑即将采用的人工智能及其影响。如果我们继续建设人工智能,而不考虑我们防止其滥用的责任,我们永远也不能指望看到人工智能帮助人类繁荣。

我们所有正在研究或想要研究这些课题的人都不能回避我们的责任,否则,我们将来会后悔的。

6.摘要

我们通过理解 RL 的基本思想开始这篇文章。我们了解到,强化学习是一个反复试验的学习过程,而强化学习的发生是基于奖励的。我们提出了 RL 和其他 ML 范式之间的差异。最后,我们研究了 RL 在现实生活中的一些应用,并思考了 DRL 的安全性、安全性和伦理性。

的下一篇文章中,我们将了解马尔可夫决策过程(MDP)以及如何将 RL 环境建模为 MDP。接下来,我们将回顾 RL 中涉及的几个重要的基本概念。下一期

帖子更新于 2020 年 8 月 12 日

深度强化学习讲解系列

UPC 巴塞罗那理工 巴塞罗那超级计算中心

一个轻松的介绍性系列以一种实用的方式逐渐向读者介绍这项令人兴奋的技术,它是人工智能领域最新突破性进展的真正推动者。

* [## 深度强化学习解释-乔迪托雷斯。人工智能

本系列的内容](https://torres.ai/deep-reinforcement-learning-explained-series/)

关于这个系列

我在 5 月份开始写这个系列,那是在巴塞罗那的封锁期。老实说,由于封锁,在业余时间写这些帖子帮助了我。感谢您当年阅读这份刊物;它证明了我所做的努力。

免责声明 —这些帖子是在巴塞罗纳封锁期间写的,目的是分散个人注意力和传播科学知识,以防对某人有所帮助,但不是为了成为 DRL 地区的学术参考文献。如果读者需要更严谨的文档,本系列的最后一篇文章提供了大量的学术资源和书籍供读者参考。作者意识到这一系列的帖子可能包含一些错误,如果目的是一个学术文件,则需要对英文文本进行修订以改进它。但是,尽管作者想提高内容的数量和质量,他的职业承诺并没有留给他这样做的自由时间。然而,作者同意提炼所有那些读者可以尽快报告的错误。*

强化学习问题的形式化

原文:https://towardsdatascience.com/drl-02-formalization-of-a-reinforcement-learning-problem-108b52ebfd9a?source=collection_archive---------9-----------------------

深度强化学习讲解— 02

马尔可夫决策过程中的主体-环境相互作用

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

今天我们从系列文章的第二篇开始深度强化学习讲解。正如我们在 第一帖 中所宣布的,这个系列的一个主要方面就是它对实践的导向;但是,在开始编码之前,我们需要一些理论知识。在本帖中,我们将探索特定假设和抽象的严格数学形式。不要慌;你的耐心会得到回报的!

在这里,我们将向读者介绍在前一篇文章中提出的概念的数学表示和符号,这将在本系列中重复使用。实际上,读者将学会使用一个被称为马尔可夫决策过程 (MDP)的数学框架来表示这些类型的问题,该框架允许对几乎任何复杂的环境进行建模。

通常,环境的动态变化是隐藏的,对代理人来说是不可访问的;然而,正如我们将在以后的文章中看到的,DRL 代理不需要知道问题的精确 MDP 来学习健壮行为。但是,了解 MDP 对读者来说是必不可少的,因为代理通常是基于这样的假设设计的,即 MDP 即使不可访问,也是在引擎盖下运行的。

本出版物的西班牙语版本:

[## 2.难民救济委员会

访问第 2 卷第 2 页的自由介绍

medium.com](https://medium.com/aprendizaje-por-refuerzo/2-formalizaci%C3%B3n-del-aprendizaje-por-refuerzo-9ab5bcbc8602)

1.马尔可夫决策过程

马尔可夫决策过程 (MDP)为解决 RL 问题提供了一个数学框架。几乎所有的 RL 问题都可以建模为 MDP。为了理解 MDP,首先,我们需要了解马尔可夫性质和马尔可夫过程。

马尔可夫性质表明未来只取决于现在而不取决于过去。马尔可夫过程由一系列严格遵守马尔可夫特性的状态组成。

当一个 RL 问题满足马尔可夫性质,即未来只依赖于当前状态 s 和动作 a ,而不依赖于过去,则公式化为马尔可夫决策过程 (MDP)。

目前,我们可以认为 MDP 基本上由五元组 < S、A、R、p、γ > 组成,其中符号的含义是:

  • S —一组状态
  • —一套动作
  • R —奖励功能
  • p —过渡功能
  • γ —折现系数

下面我们来分别描述一下;然而,在继续之前,我们需要澄清一下本系列中使用的数学符号。

1.1 关于数学符号

鉴于本系列的实践性和介绍性,我将尝试让普通读者理解这个解释,而不要求他们严格遵循数学公式。

然而,对于那些想了解数学细节的读者,我会尽量保持公式的严谨性。但由于 Medium.com 编辑器对编写公式和不同的字体类型有一定的限制,这并不容易。

所以,在课文中,我们会对记谱法的使用稍有松懈。例如,媒体编辑器不允许使用下标*。在这种情况下,当我们要引用代理在时间 t 、的**、状态时,我们将使用符号*、、**。****

类似地,在提到一个状态、行为或奖励时,我们会使用大写和小写字母,以便于阅读。

我会尽最大努力让这篇课文易懂。在某些情况下,我将包含数学符号和公式作为用 Latex 创建的图像,以弥补媒体编辑器的缺点。

在任何情况下,在继续之前,为了充分的数学严谨性,请参考本文的附录(在最后)。

1.2 国家

一个状态是问题的一个独特且独立的配置。所有可能状态的集合被命名为状态空间。有单独的状态作为开始状态或结束状态*。***

在上一篇文章中使用的冰湖示例中,环境的状态空间由 16 个状态组成,如图所示:

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

作者的画

从编程的角度来看,我们可以更正式地获得它们,如下所示:

*print(“State space: “, env.observation_space)State space: Discrete(16)*

例如,在冰湖环境中,只有一个起始状态(状态 0)和五个结束状态(状态 5、7、11、12 和 15):

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

图 1:冰湖环境的状态空间。(图片由作者提供)

1.3 行动

在每个状态,环境提供一组可用的动作,一个动作空间,代理将从中选择一个动作。代理通过这些动作影响环境,并且环境可以作为对代理所采取的动作的响应而改变状态。该环境使所有可用动作的集合提前为人所知。

在冰湖环境中,所有状态下都有四种可用的动作:向上、向下、向右或向左:

*print(“Action space: “, env.action_space)Action space: Discrete(4)*

现在我们已经介绍了状态和动作,我们可以记住马尔可夫属性。下一个状态 St+1 的概率,给定当前状态和当前动作 在给定时间**t,将和你给它的整个交互历史一样。换句话说,也就是说,给定相同的动作,在两个不同的场合从一个状态移动到另一个状态的概率是相同的,而不管在该点之前遇到的所有先前的状态或动作。在冰湖的例子中,我们知道代理只能从状态 2 转换到状态 1、3、6 或 2,不管代理的前一个状态是 1、3、6 还是 2 都是如此。也就是说,您不需要代理所访问的州的历史记录。****

我们在这里要说明的是,我们可以将动作空间分为两种类型:

  • 离散动作空间:当我们的动作空间由离散的动作组成时。例如,在冰湖环境中,我们的动作空间由四个离散的动作组成:上、下、左、右,因此它被称为离散动作空间。离散环境是指环境的动作空间是离散的。
  • 连续动作空间:当我们的动作空间由连续的动作组成时。例如,当我们开车时,我们的行为有连续的值,比如汽车的速度,或者我们需要转动方向盘的角度,等等。在我们的系列中,我们将使用连续动作空间作为 CartPole 环境的例子。连续环境是环境的动作空间连续的环境。

2.转移函数

从一个状态移动到代理将到达的另一个状态(并且环境改变其状态)由转移函数**决定,该转移函数指示从一个状态移动到下一个状态的概率,并且由 **p 表示。表示环境的一步动态,即给定当前状态和当前动作,下一个状态和奖励的概率。

**记住环境在时间步 t 对代理做出响应;它只考虑前一时间步 t-1 的状态和动作。它不关心在多一步之前呈现给代理的是什么状态。它不查看代理在最后一个操作之前采取的操作。最后,它获得多少奖励对环境选择如何回应代理人没有影响。

正因为如此,我们可以像这里所做的那样,通过指定转移函数 p 来完整地定义环境如何决定状态和奖励。函数 p 定义了 MDP 的动态**。**

作为总结,要强调的是,当我们心中有一个真正的问题时,我们将需要指定 MDP 作为一种正式定义问题的方式,因此函数 p 。代理将知道状态、行动和奖励,以及折扣系数。但是函数 p 对于代理来说将是未知的。尽管没有这些信息,代理仍然必须从与环境的交互中学习如何完成它的目标。

根据环境的不同,代理可以确定性地或随机地选择动作。让我们看看两种情况下的转移函数是怎样的。

2.1 确定性环境的转移函数

想象一下冰湖的例子,它不是一个光滑的表面。我们可以用参数is_slippery=False创建这个环境,以确定性模式创建环境:

**env = gym.make('FrozenLake-v0', is_slippery=False)**

在这种情况下,给定当前状态*【St】*和在 的动作 ,下一状态 St+1 在时间 t 的概率总是 1。换句话说,在一个确定性的环境中,总是有一个可能的下一个行动状态。在这种情况下,我们可以将转移函数视为二维矩阵(2D)的简单查找表。在我们的冰冻湖例子中,我们可以用env.env.P获得它,它将函数输出为一个字典:

*{
0: {0: [(1.0, 0, 0.0, False)],
    1: [(1.0, 4, 0.0, False)],
    2: [(1.0, 1, 0.0, False)],
    3: [(1.0, 0, 0.0, False)]},
1: {0: [(1.0, 0, 0.0, False)],
    1: [(1.0, 5, 0.0, True)],
    2: [(1.0, 2, 0.0, False)],
    3: [(1.0, 1, 0.0, False)]},
.
.
.
14: {0: [(1.0, 13, 0.0, False)],
     1: [(1.0, 14, 0.0, False)],
     2: [(1.0, 15, 1.0, True)],
     3: [(1.0, 10, 0.0, False)]},
15: {0: [(1.0, 15, 0, True)],
     1: [(1.0, 15, 0, True)],
     2: [(1.0, 15, 0, True)],
     3: [(1.0, 15, 0, True)]}
}*

在这个输出中,env.P返回所有的状态(为了清楚起见,去掉了很多,请查看笔记本以获得完整的输出),其中每个状态都包含一个字典,如果我们采取了某个动作,该字典会将所有可能的动作(0,1,2,3)从该状态映射到下一个状态。此外,每个动作包括一个列表,其中列表的每个元素是一个元组,显示转换到状态、下一个状态、奖励以及游戏是否在那里终止的概率(如果下一个状态是洞或目标,则 done= True)。

例如,在这种“不滑”的环境中,如果我们执行下一张图中所示的序列/计划(我称之为“好计划”),代理将最终安全到达:

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

图 2:冰湖例子的“好计划”。(作者制图)

我们可以用下面的代码检查这是一个允许代理实现目标的计划:

*actions = {‘Left’: 0, ‘Down’: 1, ‘Right’: 2, ‘Up’: 3 }good_plan = (2*['Down']) + ['Right'] + ['Down'] + (2*['Right'])env = gym.make(“FrozenLake-v0”, is_slippery=False)
env.reset()
env.render()for a in good_plan:
    new_state, reward, done, info = env.step(actions[a])
    env.render()
    if done:
       break* 

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

这里,环境对代理的动作做出确定性的反应,但是如果我们还记得上一篇文章,原始环境对代理的动作做出随机的反应来模拟滑倒。

2.2 随机环境的转移函数

*我们介绍了代理将到达哪个状态是由转移函数决定的。但是在随机环境中,在时间 t 时,转移函数 p 将一个转移元组 ***(St,at,St+1)映射到从源状态到目标状态 St+1 的转移概率

现在,为了捕捉关于环境的所有细节和对主体行为的可能反应,转移函数不能像在确定性环境的情况下那样表示为 2D 矩阵。在这种情况下,我们需要一个具有维度源状态动作、目标空间的 3D 矩阵,其中每个元素表示从源状态 St 到目标状态 St+1 给定动作的转移概率。****

为了验证我们谈论的是一个 3D 矩阵,我们可以像以前一样获得转移函数,但是现在对于光滑的环境:

****env = gym.make(“FrozenLake-v0”)
print(env.env.P{
0: {0: [(0.3333333333333333, 0, 0.0, False),
        (0.3333333333333333, 0, 0.0, False),
        (0.3333333333333333, 4, 0.0, False)],
    1: [(0.3333333333333333, 0, 0.0, False),
        (0.3333333333333333, 4, 0.0, False),
        (0.3333333333333333, 1, 0.0, False)],
    2: [(0.3333333333333333, 4, 0.0, False),
        (0.3333333333333333, 1, 0.0, False),
        (0.3333333333333333, 0, 0.0, False)],
    3: [(0.3333333333333333, 1, 0.0, False),
        (0.3333333333333333, 0, 0.0, False),
        (0.3333333333333333, 0, 0.0, False)]},
.
.
.
**14: {0: [(0.3333333333333333, 10, 0.0, False),
         (0.3333333333333333, 13, 0.0, False),
         (0.3333333333333333, 14, 0.0, False)],
     1: [(0.3333333333333333, 13, 0.0, False),
         (0.3333333333333333, 14, 0.0, False),
         (0.3333333333333333, 15, 1.0, True)],
     2: [(0.3333333333333333, 14, 0.0, False),
         (0.3333333333333333, 15, 1.0, True),
         (0.3333333333333333, 10, 0.0, False)],
     3: [(0.3333333333333333, 15, 1.0, True),
         (0.3333333333333333, 10, 0.0, False),
         (0.3333333333333333, 13, 0.0, False)]},**
15: {0: [(1.0, 15, 0, True)],
     1: [(1.0, 15, 0, True)],
     2: [(1.0, 15, 0, True)],
     3: [(1.0, 15, 0, True)]}
}****

该转换函数实现了有 33.3%的机会我们将转换到预期的单元(状态),并且有 66.6%的机会我们将转换到正交方向。如果在墙边,我们也有机会反弹回我们原来的状态。

将环境可视化表示为用节点表示状态和边的图,用概率(和奖励)标记,表示从一个状态到另一个状态的可能转换,这可能是有帮助的。为了简单明了,我在下图中只添加了状态 14 的所有动作的转换函数。这种状态子集允许在没有太多混乱的情况下说明所有可能的转换。

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

图 3:状态 14 的部分转换图。(图片由作者提供)

现在,如果我们多次执行“好计划”行动的相同序列,我们可以看到它不以确定的方式运行,给出非常不同的结果。我们将在以后的文章中回到这个例子。

3.奖励函数和折扣因子

一旦采取了行动,环境就使用奖励函数提供一个奖励作为对转变有益的度量。什么是奖励函数?

3.1 奖励功能

奖励函数通常用 r(s,a)r(s,a,s’)来表示。 代表我们的代理人在执行一个动作时,从状态 s 过渡到状态s’时获得的奖励。它只是代理在每个时间步(或每个固定数量的时间步)从环境中获得的标量值(可以是正的或负的,大的或小的)。****

值得注意的是,“强化”和“强化学习”这个词最初来自行为科学。它指的是在行为发生后立即给予的刺激,以使该行为更有可能在未来发生。这个名字被借用并不是巧合。我们应该把奖励设计成一种反馈机制,告诉代理人它已经选择了适当的行动。奖励将是我们告诉代理人它做得“好”或“差”的方式。换句话说,就是告诉我们的代理它表现得有多好。

例如,考虑一个想要学习逃离迷宫的代理人。哪些奖励信号会促使代理尽快逃离迷宫?代理在迷宫中每走一步,奖励可以是-1。一旦特工逃脱,获得+10 奖励,本集终止。现在,考虑一个想学习在头上平衡一盘食物的代理人。哪些奖励信号会鼓励代理人尽可能长时间地保持盘子平衡?例如,对于代理保持盘子在她头上平衡的每个时间步长,可以有+1 的奖励。如果盘子掉了,这一集就结束了。我希望通过这两个简单的例子,读者已经直观地理解了奖励如何有助于“强化”主体的学习。

总的来说,奖励给代理人关于其成功的反馈,获得的奖励应该以积极或消极的方式强化代理人的行为。然而,它仅反映了代理最近活动的成功,而不是代理到目前为止取得的所有成功。代理人试图实现的是在其行动序列中最大的累积回报,我们需要另一个反馈,即回报。但是在介绍收益之前,让我介绍一下 MDP 的最后一个组成部分,贴现因子。****

3.2 折扣系数

我们已经说过,代理人试图解决的任务可能有也可能没有自然的结局。有自然结局的任务,比如游戏,被称为情节任务。一个情节任务从开始到结束的时间步骤序列称为一个情节。冰湖环境呈现出阶段性的任务,因为存在最终状态;有明确的目标和失败状态。相反,没有自然结束的任务被称为持续任务,例如学习向前运动。

由于时间步长的无限序列的可能性,我们需要一种方法来贴现回报随时间的价值;也就是说,我们需要一种方法来告诉代理,越早得到+1 越好。所以,我们通常用小于 1 的正实值来指数贴现未来回报的价值。我们得到的回报越往后,它在当下就越不值钱。

该参数称为折现因子γ,或用γT7 表示的折现率*,其范围为【0,1】。代理使用折扣系数来随着时间的推移调整奖励的重要性。代理人收到奖励越晚,他们就越不愿意给出计算结果。换句话说,代理人更感兴趣的是获得更快、更有可能获得的回报,而不是更晚、更不可能获得的回报。*******

4.问题设置

的上一篇文章中,我们展示了强化学习周期,在这个周期中,一个 RL 代理随着时间的推移与一个环境进行交互。总而言之,在每个时间步 t ,代理接收一个状态 s ,并选择一个动作,遵循一个策略(一个策略)根据环境动态,智能体收到一个标量奖励 r ,过渡到下一个状态s’。在偶发问题中,这个过程会一直持续到代理达到终止状态,然后重新启动。****

4.1 情节和轨迹

代理通过执行一些动作与环境交互,从初始状态开始并到达最终状态。这种从初始状态 S0 开始直到最终状态的主体-环境交互被称为情节。

但是有时我们可能只对交互代理环境的一部分感兴趣。在任意时间步 t ,代理和 MDP 环境的交互已经演化为状态、动作和奖励的序列。每一步都被定义为一个转换:

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

我们定义一个轨迹,仅仅是一集的一部分,由一系列过渡组成。轨迹比一集稍微灵活一些,因为它的长度没有限制;它可以对应于完整的一集或只是一集的一部分。我们用 τ: 表示一个轨迹

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

我们用 H (或 h) 来表示轨迹的长度,其中 H 代表地平线。**

4.2 折扣回报

我们在第 1 篇的文章中介绍过,一般来说,代理人被设计成从长期来看能获得最大的累积回报。现在我们已经介绍了 gamma,我们可以定义如何根据 gamma 和连续任务的奖励(以及临时任务的奖励)来计算回报。我们定义**贴现收益,**表示为 Gt, 在时间步长 t ,作为这个量:

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

对于每一个时间步 t ,我们计算贴现回报 Gt 作为后续奖励的总和,但是更远的奖励要乘以贴现因子提升到我们离开的步数的幂。如果 gamma 等于 1,那么贴现回报就等于所有后续回报(累积回报)的总和,即回报。如果 gamma 等于 0,回报将只是即时奖励,没有任何后续状态。

当我们将折扣因子设置为一个较小的值(接近于 0)时,我们更重视眼前的回报,而不是未来的回报。当我们将折扣因子设置为一个高值(接近 1)时,这意味着我们更重视未来的回报而不是眼前的回报。极值仅在极限情况下有用,大多数时候,gamma 设置在两者之间。

代理人根据任务重视当前和未来的奖励。在某些任务中,未来的回报比眼前的回报更令人向往,反之亦然。例如,在国际象棋比赛中,目标是击败对手的国王。让我们更重视直接的回报,这是通过行动获得的,如我们的棋子击败任何对手的棋子。代理可能会学习执行这个子目标,而不是学习重要目标。

行动有短期和长期的后果,行动者需要了解其行动对环境的复杂影响。正如我们将在这个系列中看到的,贴现收益将帮助代理人完成这项任务:代理人总是会选择一个行动来实现收益最大化的目标。但正如我们将会看到的,一般来说,一个代理人不能完全确定地预测未来的回报可能是什么,因此贴现回报,所以它必须依赖于预测或估计,这取决于我们将用来学习的方法家族。这就是政策功能和价值功能的关键概念发挥作用的地方。

4.3 政策

让我们来看看代理人如何做出决策来满足其目标:找到一系列行动来最大化一集期间的贴现回报 G 。换句话说,代理必须有一个计划,即从开始状态到目标状态的一系列动作。

我们之前介绍了一个关于冰湖例子的“好计划”,它看起来是直觉上最好的。但是,当我们在随机环境中运行它时,即使是最好的计划也会失败,因为采取的行动并不总是按照我们预期的方式进行。请记住,在冰湖环境中,无意的行动影响有更高的概率:66.6%对 33.3%。

特别是,由于环境的随机性,我们的特工降落到了一个不在我们计划范围内的小区。然后呢?怎么办?嗯,我们需要的是一个针对所有可能状态的计划,一个“通用计划”,一个涵盖所有可能状态的政策

一个策略定义了代理在一个环境中的行为。It 是代理用来基于当前状态确定下一个动作的策略(例如,某组规则)。典型地由 𝜋表示,一个策略一个策略是一个函数,它决定给定一个状态下一个动作****

我们刚刚在开头提到的策略被称为确定性策略。一个确定性策略,*【𝜋(𝑠】告诉代理在状态下执行一个特定的动作。因此,确定性策略将状态映射到一个特定的动作。*****

但总的来说,我们将处理更一般的政策,并将被定义为概率而不是具体行动。换句话说,就是一个随机策略,它对代理在给定状态下可以采取的行动有一个概率分布。因此,代理不是每次访问州时都执行相同的动作,而是每次根据随机策略返回的概率分布执行不同的动作。随机策略通常用 𝜋(𝑎|𝑠) 来表示。****

正如我们将在本系列后面看到的,随着代理在学习过程中获得更多的经验,策略可能会改变。例如,代理可以从随机策略开始,其中所有动作的概率是一致的;与此同时,代理将有希望学会优化其策略,以达到更好的策略。在初始迭代中,这个代理在每个状态下执行一个随机动作,并试图根据获得的奖励来学习该动作是好是坏。经过一系列的迭代,代理将学习在每个状态下执行好的动作,这给出了积极的奖励。最后,代理将学习一个好的策略或最优策略。

我们可以将随机策略分为两种类型:

  • ****分类策略:当动作空间离散时,策略使用动作空间上的分类概率分布进行选择。例如,在冰湖环境中,我们基于分类概率分布(离散分布)选择动作,因为环境的动作空间是离散的。
  • ****高斯策略:当我们的动作空间是连续的,并且该策略使用动作空间上的高斯概率分布来选择。我们将在以后的文章中讨论这类政策。

即使对于相当简单的环境,我们也可以有各种各样的策略。那么我们需要一种方法来自动寻找最优策略。最优策略是使代理人获得良好报酬并帮助代理人实现目标的策略。它告诉代理在每个状态下执行正确的动作,这样代理就可以得到很好的奖励。这就是价值函数发挥作用的地方。

4.4 预测期货回报:价值函数

一个价值函数,它决定了什么对代理人长期有利,而不是眼前的回报。我们有两种类型的价值函数,状态-价值函数动作-价值函数,帮助学习和寻找代理的最优策略。**

****状态值函数也称为 V 函数,测量每个状态的良好程度。它告诉我们,如果我们从那个状态开始,我们在未来可以期望的总回报。换句话说,当我们遵循某个政策时,根据贴现回报 G 处于某个特定状态的好坏。然而,贴现回报数量在实践中并不是很有用,因为它是为每一个特定的情节定义的,所以它可以有很大的不同,即使是在同一个州。但是,如果我们走极端,计算数学期望𝔼[.]通过对大量事件进行平均,我们将获得 V 函数的更有用的值。

****此外,我们可以扩展状态-值函数的定义,为每个状态-动作对定义一个值,这被称为**动作-值函数,**也被称为 Q 函数。它告诉我们,从我们所处的状态中可以选择的一系列行动中,采取一个特定的行动是好是坏。

估计状态-值函数和动作-值函数是强化学习方法的基本组成部分。在本系列的后续文章中,我们将更详细地讨论并涵盖计算和估计这些函数的不同方法。

5.摘要

我们已经到达这篇文章的结尾了!。一个不假装是一个完整的理论框架的帖子将引入最少的形式主义,我们将在整个系列中引入我们需要的新公式。我们理解了 RL 中涉及的几个重要的基本概念。

在接下来的三篇帖子(帖 3帖 4帖 5 )中,我们将回顾强化学习问题中编程 Agents 所需的深度学习概念(以及 PyTorch)。如果你之前有深度学习、PyTorch 和 TensorBoard 的知识,你可以跳过这三个帖子,去找帖子 6 。用交叉熵方法解决强化学习问题。

帖子更新于 2020 年 11 月 12 日

附录:数学符号

一般来说,我们倾向于使用理查德·萨顿和安德鲁·g·巴尔托所著的《强化学习:导论》中的符号。这本书是一个优秀的强化学习基础介绍的经典文本。

博士 Richard S. SuttonDeepMind 的杰出研究科学家,也是阿尔伯塔大学的著名计算科学教授。萨顿博士被认为是现代计算强化学习的创始人之一。安德鲁·g·巴尔托博士是马萨诸塞大学的荣誉退休教授,也是萨顿博士的博士生导师。

与本文相关的系列文章中,我们将使用的主要定义和数学符号如下:

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

深度强化学习讲解系列

UPC 巴塞罗那理工大学 巴塞罗那超级计算中心

一个轻松的介绍性系列以一种实用的方式逐渐向读者介绍这项令人兴奋的技术,它是人工智能领域最新突破性进展的真正推动者。

**** [## 深度强化学习解释-乔迪托雷斯。人工智能

本系列的内容](https://torres.ai/deep-reinforcement-learning-explained-series/)

关于这个系列

我在五月开始写这个系列,在巴塞罗那的**封锁期。**老实说,由于封锁,在业余时间写这些帖子帮助了我 #StayAtHome 。感谢您当年阅读这份刊物;它证明了我所做的努力。

免责声明 —这些帖子是在巴塞罗纳封锁期间写的,目的是分散个人注意力和传播科学知识,以防对某人有所帮助,但不是为了成为 DRL 地区的学术参考文献。如果读者需要更严谨的文档,本系列的最后一篇文章提供了大量的学术资源和书籍供读者参考。作者意识到这一系列的帖子可能包含一些错误,如果目的是一个学术文件,则需要对英文文本进行修订以改进它。但是,尽管作者想提高内容的数量和质量,他的职业承诺并没有留给他这样做的自由时间。然而,作者同意提炼所有那些读者可以尽快报告的错误。****

无人机和人工智能在新冠肺炎疫情期间加强社会隔离

原文:https://towardsdatascience.com/drones-and-artificial-intelligence-to-enforce-social-isolation-during-covid-19-outbreak-783434b7dfa7?source=collection_archive---------38-----------------------

使用计算机视觉和无人驾驶车辆抗击冠状病毒的关键传播

由于缺乏疫苗,到目前为止,受新冠肺炎影响的国家的多个政府采取的最有效的建议之一是社会距离或隔离,以“拉平曲线”,这意味着可以通过避免公共场所和拥挤的地方来减缓传播,在特定的时间范围内达到较低的新病例数量,较低的感染率意味着医疗保健系统压力较小,每天较少的医院就诊和较少的病人被拒绝。

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

有和没有社会距离的样本流行曲线。(图片鸣谢:Johannes Kalliauer/ CC BY-SA 4.0)

在一些国家(比如我住在秘鲁的利马),强制性社会隔离的条件是呆在家里,除非你在特殊情况下必须外出,比如补充食物、家庭或医疗紧急情况。为了遵守这一模式,秘鲁政府于 3 月 15 日发布了为期 15 天的全国紧急状态和边境关闭令(随后延长至 4 月 12 日)。然而,实施这一措施需要大量的警察和军官在隔离期间 24/7 在街上巡逻,并且考虑到根据传染率的变化可能会延长这一措施。这可能需要相当高的时间和成本,此外还有街上巡逻人员的传染风险。

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

部署在利马街头的军事人员。来源:https://elcomercio . PE/Lima/suce SOS/Estado-de-emergencia-Muertos-por-冠状病毒-cambios-en-El-minsa-y-otros-hechos-noticios-de-la-semana-fotos-nndc-noticia/?foto=5

一个想法是通过结合不同的人工智能技术,如无人机捕捉的图像处理和分类(计算机视觉),我们可以有效地加强这些措施。无人机是一种无人驾驶的交通工具,可以远程操作或配置为遵循预定义的路线,这样我们可以安全地在街上捕捉信息,减少官方人员传播的可能性,例如:

在将图像识别算法应用于视频并获得当前对象后,我们可以构建这些信息,并使用它来分析街道上的人、汽车、自行车或其他人的流量。现在有了这些结构化的信息,我们就可以制定战略和计划。

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

按地区显示检测到的人、汽车和自行车的数据。*重要提示:上面显示的数字仅用于演示目的,它们不是真实的,也不代表现实。

使用这些信息,我们可以实现以下一些目标:
1) 优化负责街道和大道的巡逻队的部署
2) 最大限度地降低 24/7 全天候监视的运营成本
3) 降低步行巡逻的传染风险
4) 覆盖因存在传染或高犯罪率而难以进入的区域
5) 将不合规区域之间的数据与社会隔离措施结合起来

我们必须用这一代人拥有的新武器来对抗这个疫情,其中一个也许是今天最重要的武器是我们可以用技术和现有算法生成的大量数据,这些数据赋予人工智能系统生命。

使用 OpenCV 的利马中心街道(原始视频:https://www.youtube.com/watch?v=0myE-TDPqlI

技术细节:

  1. 第一个视频是用一架泰洛无人机录制的
  2. 我使用了一个 YoloV2 架构进行图像识别,并用 COCO 数据集预先训练权重
  3. 叶子供图

还有…学习的时候别忘了享受乐趣…

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

我自己训练的寻找蝙蝠侠的模型!

相关链接:

[## 利用无人机技术和深度学习构建面罩监控系统- neptune.ai

COVID19 的爆发让世界措手不及,影响了全球的政府、公司和个人。的…

海王星. ai](https://neptune.ai/blog/building-a-facemask-surveillance-system-with-drone-technology) [## 紧急情况下,冠状病毒的死亡,在卫生部和其他地方的通知…

利马政治、司法和社会领域的各种问题。

elcomercio.pe](https://elcomercio.pe/lima/sucesos/estado-de-emergencia-muertos-por-coronavirus-cambios-en-el-minsa-y-otros-hechos-noticiosos-de-la-semana-fotos-nndc-noticia/?foto=5) [## 两名罗文校友被困在秘鲁,作为对新冠肺炎宣布戒严令的回应

马丘比丘风景如画、连绵起伏的群山看起来就像是梦境。对于一个新的四人组…

thewhitonline.com](http://thewhitonline.com/2020/03/news/two-rowan-alumni-trapped-in-peru-as-martial-law-is-declared-in-response-to-covid-19/) [## 冠状病毒:什么是“拉平曲线”,它会起作用吗?

努力完全控制新型冠状病毒——造成数十万人感染的疫情病毒

www.livescience.com](https://www.livescience.com/coronavirus-flatten-the-curve.html) [## 计算机视觉的温和介绍-机器学习掌握

计算机视觉的最后更新,通常缩写为 CV,被定义为寻求发展的研究领域…

machinelearningmastery.com](https://machinelearningmastery.com/what-is-computer-vision/)

像热的一样放下它

原文:https://towardsdatascience.com/drop-it-like-its-hot-82a5264c75d6?source=collection_archive---------54-----------------------

数据科学/ Python 代码片段

了解熊猫。DataFrame.drop 文档。

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

爱默生·彼得斯Unsplash 上拍摄的照片

我有一个经常性的梦,来自一个编码训练营的老师会不断地用尺子敲打我的头,告诉我去阅读一个包或库的文档。因此,作为过去,我会发现自己在钻研 Python 或 Panda 的文档。

今天,我发现自己迷上了熊猫。drop()函数。因此,在这篇文章中,我将尝试理解熊猫为曾经著名的 *.drop()* 所写的文档。

家政

让我们导入熊猫并创建一个样本数据框架。

如果我们在 Jupyter notebook 的一个单元格中键入df,就会得到完整的数据帧:

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

一级数据帧操作

现在让我们去掉一些列。

上面的代码只是告诉 Python 去掉axis=1中的'color''score',这意味着在列中查找。或者,我们也可以很容易地不使用命名参数轴,因为它令人困惑。所以,现在让我们试试:

上述两种方法都会导致以下结果:

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

接下来,我们将删除一些行(或记录)。

上面,我们只是告诉 Python 去掉索引为 1、2、4 和 6 的行。请注意,索引是作为列表[1, 2, 4, 6]传递的。这将导致以下结果:

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

多索引数据帧操作

在下一轮中,我们将使用多索引数据框架。让我们来设置一下:

多索引数据帧如下所示:

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

现在,让我们去掉'thinghy'列:

这是我们得到的结果:

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

接下来,让我们去掉'pork rinds',因为我不喜欢他们:

这是我们得到的结果:

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

最后,让我们削减脂肪:

以上,level=1简单来说就是第二级(因为第一级是从 0 开始的)。在这种情况下,它的碳水化合物,脂肪和蛋白质水平。通过指定index='fat',我们告诉 Python 去掉level=1中的脂肪。

以下是我们得到的结果:

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

原地不动

到目前为止,通过我们所做的所有播放,不知何故,如果我们在单元格中键入df,我们将得到的输出是未经修改的原始数据帧。这是因为我们所做的所有更改只在显示屏上生效。

但是如果我们想让这些改变永久化呢?进入:原地

上面,我们在参数中添加了inplace=True。这向 Python 发出了信号,我们希望更改能够生效,这样当我们输出df时,我们将得到如下结果:

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

我们已经永久性地切除了脂肪。LOL!

感谢您的阅读!今天到此为止。

敬请期待!

你可以通过 TwitterLinkedIn 联系我。

辍学直觉

原文:https://towardsdatascience.com/dropout-intuition-87df344fce43?source=collection_archive---------29-----------------------

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

图像来源

这篇文章的目的是提供一个非常简单的介绍背后的神经网络辍学的基本直觉。

当神经网络(NN)完全连接时,NN 中的所有神经元都投入工作,而不管它们在特定任务中是否有用。

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

全连接图层(图片来源— 链接

假设我们将 100 个神经元放入一个神经网络来完成一个分类任务,但实际上,只有 50 个神经元足以完成同样的任务。现在,因为我们已经让所有的神经元开始工作,它们将会做它们的工作来提取它们认为对分类是必要的特征。

这些特征可以分为 3 种类型:

  1. 最重要的功能(MSF)
  2. 次要特征(LSF)
  3. 噪声特征(NF)

最重要的特征

这些是数据中真正重要的部分,它们将极大地帮助我们对数据进行分类和归纳。有了它们,我们应该能够体面地进行分类。我们的神经网络需要提取这些特征。

不太重要的功能

这些是有好处的,但在分类中不起主要作用的。光靠他们,我们可能做不好分类。如果我们忽略了这些特征,也没关系。

噪声特征

这些是不好的特征,也不应该被神经网络拾取。这些特征对分类没有任何帮助。通过选取这些特征,神经网络将使数据过度拟合,而不会泛化。

因为我们已经让所有的神经元工作,并使用了梯度下降、随机梯度下降等方法来确保所有的神经元都工作,所以我们的神经元没有选择,只能从数据中选择所有类型的特征(MSF、LSF、NF)。这将导致过度拟合,并且神经网络不会泛化。

为了减少神经网络的过拟合和泛化,我们可以执行以下任一操作:

  1. 找到分类所需的最佳神经元数量
  2. 使用辍学技术

在我们的例子中,分类所需的最佳神经元数量是 50。但是,如果数据集发生变化,所需神经元的最佳数量也会发生变化。每次数据集改变时,寻找所需神经元的最佳数量是非常繁琐和不切实际的。因此,我们需要使用退出技术。

在 Dropout 中,我们在训练阶段随机丢弃 NN 中的一些神经元。假设我们随机丢弃神经网络中 50%的神经元。现在,分类的工作必须由剩下的 50%的神经元来完成。并且这些神经元不能懈怠并拾取不太重要和有噪声的特征,因为它们不会帮助我们分类,并且如果拾取的特征对分类没有帮助,梯度下降之类的东西会更多地惩罚 NN。因此,这些剩余的神经元被迫选择最重要的特征,这将减少过度拟合并更好地概括。

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

Dropout(图像源— 链接)

因此,在深度神经网络中,过度拟合的可能性非常高。因此,辍学作为一个正则化神经网络。要丢弃的神经元百分比是一个超参数,可以根据数据的过度拟合量进行调整。

这大致就是漏失如何在模型的泛化中发挥作用并提高其性能的。

参考

  1. http://jmlr . org/papers/volume 15/srivastava 14 a . old/srivastava 14 a . pdf

使用 OpenCV 和 Flask 的实时睡意检测系统。

原文:https://towardsdatascience.com/drowsiness-detection-system-in-real-time-using-opencv-and-flask-in-python-b57f4f1fcb9e?source=collection_archive---------10-----------------------

本文概述了一种系统,该系统可检测一个人在驾驶时是否困倦,如果是,则通过使用语音信息实时提醒他。该系统使用网络摄像头和手机摄像头进行实时传输。

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

Gabe PierceUnsplash 上拍摄

动机

根据美国国家公路交通安全管理局的数据,每年大约有 100,000 起警方报告的交通事故与疲劳驾驶有关。这些事故导致超过 1550 人死亡,71000 人受伤。然而,实际数字可能要高得多,因为很难确定司机在撞车时是否困倦[1]。所以,为了让司机在任何此类事故发生前有所察觉,我们制定了这个系统。它预测眼睛和嘴巴的标志,以便通过检查一个人是闭着眼睛还是在打哈欠来识别他是否睡着了。

工作

该系统的工作可分为两部分:

  1. 检测或定位面部。
  2. 预测检测到的人脸中重要区域的标志。

一旦预测了界标,我们仅使用眼睛界标和嘴巴界标来确定眼睛纵横比(耳朵)和嘴巴纵横比(MAR ),以检查人是否困倦。

EAR 和 MAR 的计算如下所示:

耳朵和标记计算。

现在,既然我们有了代码,让我们来理解这个代码是如何工作的:

dlib 库中预先训练的面部标志检测器用于估计映射到面部的面部结构的 68-(x,y)坐标的位置[2]。这些 68-(x,y)坐标代表面部的重要区域,如嘴、左眉、右眉、左眼、右眼、鼻子和下巴。其中,我们只需要左眼、右眼和嘴的(x,y)坐标。这是通过以下方式完成的:

提取左眼、右眼和嘴的索引。

现在,每只眼睛由一组 6-(x,y)坐标表示,从眼睛的左角开始(就好像你正在看着这个人),然后围绕该区域的其余部分顺时针工作[3]:

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

*左上:*眼睛睁开时眼睛标志的可视化。*右上:*眼睛闭合时的眼睛标志。*底部:*绘制眼睛纵横比随时间的变化。眼睛纵横比的下降表示眨眼[3](soukupová和 ech 的图 1)。[4]

基于该论文, 使用面部标志点的实时眨眼检测 ,【5】然后我们可以导出反映这种关系的等式,称为眼睛纵横比(耳朵):

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

眼睛纵横比(EAR)方程。

利用这个概念,我们计算了嘴的长宽比:

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

用 68-(x,y)坐标表示面部。

正如我们看到的,嘴由一组 20-(x,y)坐标表示。因此,我们使用坐标 62、64、66 和 68,以与 EAR 计算相同的方式来计算它们之间的距离。

结果

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

当人困倦或打哈欠时发出警报。

此外,为了保留证据,我们保存了人感到昏昏欲睡的帧。

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

相框存放在单独的文件夹中作为凭证。

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

显示 EAR 和 MAR 随时间变化的图表。

使用网络摄像头通过流媒体进行系统演示:

使用手机摄像头通过流媒体进行系统演示:

GitHub 链接的源代码可从这里获得:

[## 恐惧上帝/睡意探测

点击这里看演示根据美国国家公路交通安全管理局,每年约 10 万…

github.com](https://github.com/fear-the-lord/Drowsiness-Detection)

参考文献

[1]司机们在方向盘后面睡着了。疲劳驾驶事故的发生率:https://www . NSC . org/road-safety/safety-topics/疲劳驾驶

【2】用 dlib、OpenCV 和 Python 实现的面部地标:https://www . pyimagesearch . com/2017/04/03/face-landmarks-DLI b-OpenCV-Python/

[3]利用 OpenCV、Python 和 dlib 进行眨眼检测:https://www . pyimagesearch . com/2017/04/24/Eye-blink-detection-OpenCV-Python-dlib/

[4]使用 OpenCV 的睡意检测:https://www . pyimagesearch . com/2017/05/08/瞌睡检测-opencv/

[5]使用面部标志的实时眨眼检测:http://vision . Fe . uni-LJ . si/cvww 2016/proceedings/papers/05 . pdf

访问我的作品集:

https://souvik-portfolio-website.herokuapp.com/

深度学习的药物发现。在 10 行代码之下。

原文:https://towardsdatascience.com/drug-discovery-with-deep-learning-under-10-lines-of-codes-742ee306732a?source=collection_archive---------13-----------------------

介绍 DeepPurpose,这是一个基于深度学习的工具包,用于药物-靶标相互作用预测、药物再利用和虚拟筛选。

TL;博士:深度学习正在彻底改变药物研发行业。在这篇文章中,我将展示如何使用 DeepPurpose toolkit 来解锁 50 多个用于药物-靶标相互作用(DTI)预测的模型,这是药物发现中的一项基本任务,只使用了 scikit-learn 风格的几行代码。DeepPurpose 还提供了一个简单的界面来完成 DTI 预测的两个重要应用:虚拟筛选和药物再利用。

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

乔舒亚·科尔曼Unsplash 上拍摄的照片

简介

发现一种新药需要超过 10 年的时间,花费超过 26 亿美元。最近,许多用于药物发现的人工智能初创公司涌现出来,并成功应用深度学习技术来帮助药物发现研究,并大大缩短时间/节省成本[2,3]。因此,这是一个非常令人兴奋和蓬勃发展的领域💥!

然而,数据科学家社区对用于药物发现的深度学习的兴趣虽然增长迅速,但仍远远落后于其他深度学习应用,如 NLP 和图像。一个可能的原因是缺乏开源工具阻止了许多数据科学家探索这个令人兴奋的领域。现有的工具包,如 DeepChem、OpenChem、MoleculeNet 等。,极大地普及了深度学习在生命科学中的应用。在这篇文章中,我描述了一个名为 DeepPurpose 的新功能,它专门用于药物-靶标相互作用预测,这是药物发现过程的一项基本任务。所有数据科学家都喜欢 scikit-learn。因此,我们将 DeepPurpose 设计为一个 scikit-learn-fashion 框架,它用不到 10 行代码包装了 50 多个模型😇!

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

DeepPurpose 徽标。作者图片。

背景

先说一些生物化学的概念。疾病的主要类别通常归因于疾病途径中的靶蛋白。发现了一种调节靶蛋白的药物。通过这种疾病相关蛋白的调节,疾病可以被治愈。药物作用机制的主要范例之一是“锁和钥匙”理论[4]。蛋白质是一把“锁”🔒而药物发现就是找到正确的“钥匙”🔑以解开靶标(即,调节蛋白质的正确药物)。这种适合度被称为结合亲和力。

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

药物-靶标相互作用的“锁和钥匙”理论。Christopher Vakoc 授予的图像许可。

药物-靶标相互作用(DTI)测量药物分子与蛋白质靶标的结合亲和力。因此,我们很容易想象,一个准确的 DTI 深度学习模型可以大大有利于药物发现过程[5]。更具体地说,虚拟筛选和药物再利用是基于 DTI 的两个主要应用。虚拟筛选有助于识别可以与感兴趣的蛋白质结合的配体候选物,而药物再利用则为现有药物找到新的治疗目的。

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

任务说明。作者图片。

深层目的概述

DeepPurpose 将 DTI 模型公式化为一个编码器-解码器框架,它包括了大多数以前的作品[6,7,8,9,10]以及更多。两个编码器分别生成药物和蛋白质的嵌入,然后将它们连接到解码器,在解码器中预测结合亲和力得分。

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

一个编码器-解码器框架。作者图片。

DeepPurpose 使用最容易访问的输入数据格式。输入是药物靶标对,其中药物使用简化的分子输入行输入系统(SMILES)字符串,靶标使用氨基酸序列。输出是指示药物-靶标对的结合活性的分数。

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

药物和靶蛋白的表达。作者图片。

对于药物,我们提供 8 个编码器:四个经典的化学信息学指纹(摩根,Pubchem,Daylight 和 RDKit 2D),上面有深度神经网络(DNN);微笑字符串上的 1D 卷积神经网络(CNN ):CNN 之上的递归神经网络以平衡顺序次序;子结构分区指纹上的变压器编码器[11];分子图上的信息传递神经网络。

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

药物编码器。作者图片。

对于目标蛋白质,我们有 7 个编码器:在四个经典计算生物学指纹(AAC,PseAAC,联合三联体,准序列)之上的 DNN;CNN 上的氨基酸序列;CNN 上面的 CNN 和变换子序列指纹。

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

目标编码器。作者图片。

组合起来,有 56 个(8 乘以 7)药物靶标编码模型!此外,大多数模型都很新颖🆕!

深度目的框架

现在,在我们对 DTI 和 DeepPurpose 有了概念性的概述之后,我开始介绍 DeepPurpose 编程框架。这个框架由几个步骤组成,每个步骤由一行代码组成:

  • 数据加载
  • 编码器规格
  • 数据编码和分割
  • 模型配置生成
  • 模型初始化
  • 模特培训
  • 再利用/筛选
  • 模型保存和加载

让我们回顾一下每一步!为了获得更好的学习体验,建议在您自己的 Jupyter 笔记本文件中或浏览博客帖子笔记本时遵循这些步骤。要安装 DeepPurpose,您可以使用 DeepPurpose 活页夹云笔记本 ( 只需点击链接!)或者使用本地的 DeepPurpose 环境。安装说明可以在这里找到,你也可以在这里找到视频安装教程

数据加载

DeepPurpose 接受一个 NumPy 数组的药物微笑字符串(X_drugs)、一个 NumPy 数组的目标蛋白氨基酸序列(X_targets)和一个 NumPy 数组的标签(y),它们可以是表示相互作用结果的二进制 0/1,也可以是表示结合亲和力值的实数。输入药物和目标阵列应该配对,即y[0]X_drugs[0]X_targets[0]的分数。DeepPurpose 将根据数据集自动在二元分类任务或回归任务之间切换。

除了通过自己的一些数据争论转换成 NumPy 数组之外,DeepPurpose 还提供了基准数据集加载器(DAVIS/KIBA/BindingDB)来简化预处理。例如,在本文中,我们将使用戴维斯数据集:

您还可以使用dataset.read_file_training_dataset_drug_target_pairs函数从 txt 文件加载您自己的数据集,其中每一行都是一个药物微笑字符串、一个目标氨基酸序列和结合分数。

编码器规格

获得所需的数据格式后,我们需要首先指定用于药物和蛋白质的编码器。在这里,我们尝试将MPNN用于药物,将CNN用于目标。**请注意,您可以通过更改编码名称来切换编码器。**此处列出了编码器的完整列表

(如果你正在使用 CPU 运行这篇博文,你会发现MPNNCNN有点大,你可以尝试更小的编码器,比如用于药物的Morgan和用于蛋白质的Conjoint_triad 。)

数据编码和拆分

现在,我们需要使用utils.data_process函数为不同的编码器准备数据编码方案。在此功能中,我们可以指定训练/验证/测试分割分数、随机种子,以确保相同的数据分割具有重现性,并且还支持数据分割方法,如cold_drugcold_protein,这些方法对药物/蛋白质进行分割以进行模型稳健性评估,从而测试未知的药物/蛋白质。该函数输出训练、验证和测试集 Pandas 数据帧。

模型配置生成

现在,我们用它的配置初始化一个模型。在此功能中,您几乎可以修改任何超参数(例如,学习率、时期、批量大小)、模型参数(例如,隐藏维度、过滤器大小)。此处的链接中列出了支持的配置。

对于这篇博文,我们将纪元大小指定为 3,这样您就可以在 CPU 和 GPU 上快速运行,并可以继续下一步。有关参考参数,请查看演示文件夹中的笔记本。

模型初始化

接下来,我们使用上述配置初始化模型:

模特培训

现在,只需输入model.train函数,它就可以开始训练了!

训练损耗曲线会自动打印出来。此外,如果任务是二元分类任务,测试集 ROC-AUC 和 PR-AUC 曲线也将打印出来。

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

自动生成的损耗曲线。作者图片。

再利用/筛选

训练完模型后,我们可以使用models.repurposemodels.virtual_screening函数简单地重新调整用途和筛选:

例如,假设我们想从一组抗病毒药物中重新确定一种新冠肺炎靶向 3CL 蛋白酶的用途。我们已经在dataset包装器中提供了相应的数据。

自动生成并打印出候选药物的排序列表:

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

自动生成重新调整结果的排序列表。作者图片。

接下来,我们展示如何对来自 BindingDB 数据集的数据样本进行虚拟筛选,然后使用virtual_screening函数生成具有高结合亲和力的药物-靶标对的列表。如果没有提供药物/目标名称,则使用药物/目标列表的索引。将生成一个类似的排序列表。

模型保存和加载

最后,保存和加载模型也非常容易。加载功能还会自动检测模型是否在多个 GPU 上进行了训练。保存和加载我们刚刚训练的模型的示例:

我们还提供了一个预训练模型的列表,您可以在列表下找到所有可用的模型。例如,要加载在 BindingDB Kd 数据集上预先训练的MPNN+CNN模型:

就是这样!现在,您可以为药物-靶标相互作用预测任务训练一个最先进的深度学习模型👏!

DeepPurpose 还支持许多更多的功能,例如,这个演示展示了如何使用 Ax 平台在 DeepPurpose 上进行贝叶斯优化等最新的超参数调优方法。

最后但并非最不重要的是,许多现实世界的药物开发涉及化验数据,这意味着数据仅由药物分子和与目标或细菌的结合分数组成。这个问题也被称为药物性质预测任务。DeepPurpose 还通过仅使用药物编码器来预测结合分数来支持这项任务。该框架与 DTI 预测非常相似,如下所示:

更详细的分步说明,你可以在这里找到这篇博文的笔记本:[ DTI 预测 ][ 药性预测 ]。

这就结束了我们关于 DeepPurpose 和 DTI 预测的博文!我希望你喜欢它,并对深度学习和药物发现的令人兴奋的交叉感兴趣,如果你还没有的话!我们还呼吁数据科学家为这个开源项目做出贡献!

了解更多,这里有 论文 Github 资源库 ,请明星、分享、投稿!

这是傅天凡、卢卡斯·格拉斯、马林卡·兹尼克、和孙的合作作品。

如果您有任何问题或反馈,请随时通过kexinhuang@hsph.harvard.edu联系我;或者干脆在推特上 PM 我@ kexinhuang 5

参考

[1] Mullard,a .新药开发花费了 26 亿美元。《自然评论》药物发现 (2014)。

[2]弗莱明,Nic。人工智能如何改变药物发现?性质 (2018)。

[3]斯马利,e .人工智能驱动的药物发现引起了制药公司的兴趣。《自然生物技术》 (2017)。

[4] Gschwend DA,好 AC,昆茨 ID。面向药物发现的分子对接。分子识别杂志:跨学科杂志 (1996)。

[5] Mayr,Andreas,等. ChEMBL 上药物靶点预测的机器学习方法大规模比较。化学科学 (2018)。

[6]ZTürk H,Ozkirimli E. DeepDTA:深层药物-靶点结合亲和力预测。生物信息学 (2018)。

[7] Nguyen,Thin,Hang Le 和 Svetha Venkatesh。GraphDTA:使用图形卷积网络预测药物-靶标结合亲和力。 BioRxiv (2019)。

[8]椿、正史、健太郎富井和濑濑纯。化合物-蛋白质相互作用预测,对图形和序列的神经网络进行端到端学习。生物信息学 (2019)。

[9] Lee,Ingoo,Jongsoo Keum 和 Hojung Nam。DeepConv-DTI:通过对蛋白质序列进行卷积的深度学习来预测药物与靶标的相互作用。 PLoS 计算生物学 (2019)。

[10]陈,邢等.药物-靶标相互作用预测:数据库、网络服务器和计算模型.生物信息学简报 (2016)。

[11]黄 K,肖 C,黄 T,格拉斯 L,孙 j .卡斯特:用化学亚结构表示法预测药物相互作用。AAAI (2020)。

图形神经网络药物发现—第一部分

原文:https://towardsdatascience.com/drug-discovery-with-graph-neural-networks-part-1-1011713185eb?source=collection_archive---------17-----------------------

预测溶解度

了解如何使用生命科学的深度学习库 Deepchem 通过 GNNs 预测分子溶解度。

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

米拉德·b·法库里安在 Unsplash 上的照片

相关材料

目录

  • 介绍
  • 药物开发和机器学习之间的特殊化学
  • 为什么分子溶解度很重要
  • 用图形神经网络解决问题
  • Deepchem 的实际操作部分
  • 关于我
  • 参考

介绍

这篇文章是药物发现背后的理论,图形神经网络和 Deepchem 库的实用部分的混合。第一部分将讨论机器学习在药物开发中的潜在应用,然后解释哪些分子特征可能对图形神经网络模型有用。然后,我们深入到编码部分,创建了一个可以预测分子溶解度的 GNN 模型。我们开始吧!

药物开发和机器学习之间的特殊化学

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

丹尼斯·约翰逊在 Unsplash 上拍摄的照片

药物开发是一个耗时的过程,可能需要几十年才能批准药物的最终版本[1]。它从药物发现的初始阶段开始,在此阶段它识别可能成为药物的某些分子组。然后,它经过几个步骤来排除不合适的分子,最后在现实生活中进行测试。在药物研发阶段,我们关注的重要特征是 ADME ( A 吸收、 D 分布、 M 代谢和 E 代谢)特性。我们可以说,药物发现是一个优化问题,我们预测 ADME 性质,并选择那些可能增加开发安全药物可能性的分子[2]。高效的计算方法可以发现具有理想特性的分子,从而加速药物开发过程,并提供相对于其他研发公司的竞争优势。

机器学习应用于药物发现只是时间问题。这允许以前所未有的速度和精度处理分子数据集[3]。然而,为了使分子结构适用于机器学习,必须执行许多复杂的预处理步骤,例如将 3D 分子结构转换为 1D 指纹向量,或者从分子中的特定原子提取数字特征。

为什么分子溶解度很重要

ADME 的特性之一,吸收,决定了药物是否能有效地到达患者的血流中。吸收背后的因素之一是水溶性,即某种物质是否可溶于水。如果我们能够预测溶解度,我们也可以很好地了解药物的吸收特性。

用图形神经网络解决问题

为了将 GNNs 应用于分子结构,我们必须将分子转换成模型可以理解的数字表示。这是一个相当复杂的步骤,它将根据 GNN 模型的具体架构而变化。幸运的是,大部分预处理被外部库覆盖,比如 DeepchemRDKit

在这里,我将快速解释预处理分子结构的最常见的方法。

笑容

SMILES 是分子 2D 结构的字符串表示。它将任何分子映射到一个特殊的字符串,这个字符串(通常)是唯一的,可以映射回 2D 结构。有时,不同的分子可以映射到同一个微笑字符串,这可能会降低模型的性能。

指纹

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

将分子结构转换成圆形指纹。【来源】

指纹是一个二元向量,其中每一位代表分子的某个亚结构是否存在。它通常很长,可能无法包含一些结构信息,如手性

邻接矩阵和特征向量

另一种预处理分子结构的方法是创建一个邻接矩阵。邻接矩阵包含关于原子连接性的信息,其中“1”表示它们之间有连接,“0”表示没有连接。邻接矩阵是稀疏的,并且通常很大,这可能不是非常有效的工作。

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

CH4(甲烷)转换成邻接矩阵(右上)、特征向量的向量(右中)和特征对向量的矩阵(右下)。邻接矩阵为我们提供了原子间连接性的信息,例如碳 C 连接到自身和所有其他 H 原子(邻接矩阵的第一行)。单个特征向量,假设为 v0,包含关于特定原子的信息。单个特征对向量包含关于两个相邻原子的信息,并且它通常是一个函数(和、平均等)。)的两个特征向量。

有了这个矩阵,我们可以以矢量的形式向 GNN 模型提供关于每个单个原子的信息和关于相邻原子的信息。在每个原子的特征向量中,可以有关于原子序数、价电子数或单键数的信息。当然还有更多,幸运的是它们可以由 RDKit 和 Deepchem 生成,

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

特征向量通常包含关于特定原子的信息。这个向量通常是通过使用 RDKit 或 Deepchem 包中的功能生成的。

溶解度

我们要预测的变量叫做 cLogP 和也被称为辛醇-水分配系数。基本上,值越低,它在水中的溶解度越大。 clogP 是一个对数比,因此值的范围从-3 到 7 [6]。

还有一个描述溶解度对数的更通用的等式:

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

溶解度方程。 MP 是熔点(摄氏度)。 logKow 是辛醇-水分配系数,又名。 cLogP

这个等式的问题是 MP 很难从分子的化学结构中预测出来。所有可用的溶解度数据集仅包含 cLogP 值,这也是我们将要预测的值。

Deepchem 的实际操作部分

可以自己跑的 Colab 笔记本来了。

Deepchem 是一个面向生命科学的深度学习库,构建在 Tensorflow、Numpy 或 RDKit 等少数几个包之上。对于分子数据,它提供了方便的功能,如数据加载器、数据拆分器、特征化器、指标或 GNN 模型。根据我的经验,设置起来很麻烦,所以我建议在我提供的 Colab 笔记本上运行它。我们开始吧!

首先,我们将下载 Delaney 数据集,它被认为是溶解度预测任务的基准。然后,我们使用 CSVLoader 类加载数据集,并指定一个包含 cLogP 数据的列,该数据被传递到 tasks 参数中。在 smiles_field 中,必须指定带有 smiles 字符串的列的名称。我们选择一个 ConvMolFeaturizer,它将按照我们将要使用的 GNN 模型所要求的格式创建输入要素。

随后,我们使用 RandomSplitter 分割数据集,并将数据分为训练集和验证集。我们还对 y 值进行了归一化处理,因此它们的平均值和单位标准偏差为零。

在这个例子中,我们将使用一个 GraphConvModel 作为我们的 GNN 模型。这是一个由 Duvenaud 等人创建的架构。你可以在这里找到他们的论文作为 Deepchem 软件包的一部分,还有其他 GNN 模型,如 WeaveModel 或 DAGModel。您可以在此找到带有所需特征的型号的完整列表

在这个代码片段中,还定义了一个人的 R2 分数。简单来说,这个值越接近 1,模型越好。

Deepchem 型号使用 Keras API。用 fit() 函数训练图形 _conv 模型。您也可以在这里指定历元的数量。我们用 evaluate() 函数得到分数。这里必须传递规格化器,因为在计算指标分数之前,需要将 y 值再次映射到之前的范围。

仅此而已!你可以用 Deepchem 做更多有趣的事情。他们创建了一些教程来展示你还可以用它做什么。我强烈建议过目一下。你可以在这里找到它们。

感谢您阅读本文,希望对您有用!

关于我

我是阿姆斯特丹大学的人工智能硕士学生。在我的业余时间,你可以发现我摆弄数据或者调试我的深度学习模型(我发誓这很有效!).我也喜欢徒步旅行:)

如果你想了解我的最新文章和其他有用的内容,以下是我的社交媒体资料:

参考

[1] 早期药物发现:化学信息学和计算技术在识别先导序列中的应用:https://www . science direct . com/science/article/ABS/pii/s 0968089612003598

https://www.cambridgemedchemconsulting.com/resources/ADME/ADME 属性

[3] 化学信息学和药物发现中的机器学习:https://www . science direct . com/science/article/pii/s 1359644617304695

[4]QSAR 和药物设计研究中的分子拓扑:https://www . research gate . net/publication/236018587 _ Molecular _ topology _ in _ QSAR _ and _ drug _ design _ studies

[5] 重访分子哈希指纹:https://chem bio info . WordPress . com/2011/10/30/重访-分子哈希指纹/

[6] 山本浩司博士讲座笔记:[http://www . piri ka . com/ENG/TCPE/logP-theory . html #:~:text = Definition % 3A,% 2Dphase %辛醇% 2f 水% 20 系统。&text = Values % 20 of % 20 kow % 20 is % 20 thus % 2C % 20 无单位。&text = Values %20 of % 20 kow % 20 通常为% 20,(20% 20 或%2025’C.](http://www.pirika.com/ENG/TCPE/logP-Theory.html#:~:text=Definition%3A,%2Dphase%20octanol%2Fwater%20system.&text=Values%20of%20Kow%20are%20thus%2C%20unitless.&text=Values%20of%20Kow%20are%20usually,(20%20or%2025’C.)

【7】预测水溶性——比看起来难:http://practical chem informatics . blogspot . com/2018/09/Predicting-hydro-Solubility-its . html

图形神经网络药物发现—第二部分

原文:https://towardsdatascience.com/drug-discovery-with-graph-neural-networks-part-2-b1b8d60180c4?source=collection_archive---------30-----------------------

预测毒性

了解如何使用 Deepchem(生命科学的深度学习库)预测 GNNs 的毒性。

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

马修·T·雷德在 Unsplash 上的照片

相关材料

目录

  • 介绍
  • 用图形神经网络解决问题
  • Deepchem 的实际操作部分
  • 关于我
  • 参考

介绍

在本文中,我们将涵盖另一个决定药物能否通过安全性测试的关键因素— 毒性。事实上,毒性占被拒绝的候选药物的 30%,使其成为药物开发阶段考虑的最重要因素之一[1]。机器学习在这里将被证明是非常有益的,因为它可以在药物发现过程的早期阶段筛选出有毒的候选药物。

我假设你已经阅读了我的上一篇文章,它解释了我将在这篇文章中使用的一些主题和术语:)让我们开始吧!

用图形神经网络解决问题

特征工程部分与本系列的第 1 部分中的非常相似。为了将分子结构转换为 GNNs 的输入,我们可以创建分子指纹,或者使用邻接矩阵和特征向量将其输入到图形神经网络中。这个特性可以由外部软件自动生成,如 RDKit 或 Deepchem,所以我们不必太担心它。

毒性

最大的区别在于机器学习任务本身。毒性预测是一项分类任务,与溶解度预测相反,溶解度预测是一项回归任务,我们可能还记得上一篇文章。有许多不同的毒性效应,如致癌性、呼吸毒性、刺激/腐蚀等[2]。这使得工作变得稍微复杂了一些,因为我们可能还要处理不平衡的班级。

幸运的是,毒性数据集通常比溶解度数据集大得多。例如,当用于溶解度预测的 Delaney 数据集只有大约 3k 训练样本时,Tox21 数据集具有大约 12k 训练样本。这使得神经网络架构成为一种更有前途的方法,因为它可以捕捉更多隐藏的信息。

Tox21 数据集

Tox21 数据集是作为一个项目创建的,该项目挑战研究人员开发机器学习模型,以在给定数据上实现最高性能。它包含 12 种不同的标签,每一种都表示不同的毒性效应。总体而言,该数据集有 12,060 个训练样本和 647 个测试样本。

这一挑战的获胜方法是 DeepTox [3],这是一种深度学习管道,利用化学描述符来预测毒性类别。它高度表明深度学习是最有效的方法,图形神经网络有潜力实现更高的性能。

Deepchem 的实际操作部分

可以自己跑的 Colab 笔记本来了。

首先,我们导入必要的库。这里没有什么新东西 —我们将使用 Deepchem 根据 Tox21 数据训练一个 GNN 模型。GraphConvModel 是由 Duvenaud 等人创建的架构。它使用指纹算法的修改版本,使它们具有可区分性(因此我们可以进行梯度更新)。这是第一个 GNN 体系结构,被设计用来处理图形的分子结构。

Deepchem 包含了一个方便的 API 来为我们加载 Tox21。 load_tox21 功能。我们选择一个特征器作为 GraphConv —它将创建化学描述符(即特征)来匹配我们模型的输入要求。由于这是一项分类任务,ROC AUC 分数将被用作一项指标。

Deepchem 的美妙之处在于模型使用了类似 Keras 的 API。我们可以用。拟合函数。我们将 len(tox21_tasks) 传递给模型的参数*、*,这是一些标签(本例中是 12 个)。这将设置最终层的输出大小为 12。我们使用 32 的批量大小来加快计算时间,并指定模型用于分类任务。该模型需要几分钟时间在 Google Colab 笔记本上进行训练。

训练完成后,我们可以评估模型。这一点也不难——我们仍然可以使用 Keras API 来完成这一部分。ROC AUC 分数通过获得。评估功能。

在我的病例中,训练 ROC AUC 得分高于验证 ROC AUC 得分。这可能表明模型对某些分子过度拟合。

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

你可以用 Deepchem 做更多的事情。它包含几个不同的 GNN 模型,像本教程一样易于使用。我强烈建议看看他们的教程。对于毒性任务,他们收集了几个用不同模型运行的不同例子。你可以在这里找到

感谢您阅读本文,希望对您有用!

关于我

我是阿姆斯特丹大学的人工智能硕士学生。在我的业余时间,你可以发现我摆弄数据或者调试我的深度学习模型(我发誓这很有效!).我也喜欢徒步旅行:)

如果你想了解我的最新文章和其他有用的内容,以下是我的社交媒体资料:

参考

【1】“制药业能降低流失率吗?”:【https://pubmed.ncbi.nlm.nih.gov/15286737/T21

【2】“使用机器学习方法和结构警报对药物设计的化学毒性进行计算机预测”:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5826228/

【3】Deep tox:利用深度学习进行毒性预测:https://www . frontier sin . org/articles/10.3389/fenvs . 2015.00080/full

用图形神经网络发现药物——第三部分

原文:https://towardsdatascience.com/drug-discovery-with-graph-neural-networks-part-3-c0c13e3e3f6d?source=collection_archive---------43-----------------------

GNN 解释方法实用教程

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

GNNExplainer 的可视化

相关材料

目录

  • 什么是解释技巧
  • 我们为什么要烦恼呢?
  • GNN 解释方法的工具
  • GNNExplainer 的实际操作部分
  • 关于我
  • 参考

什么是解释技巧

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

类别映射的一个例子——卷积神经网络的解释方法之一。【来源】

解释技巧帮助我们理解模型的行为。例如,解释方法被用于形象化图像的某些部分,或者观察它如何对某个输入做出反应。这是一个成熟的机器学习领域,具有许多不同的技术,可以应用于深度学习(例如,类激活图、梯度属性)和其他机器学习算法(例如,LIME)。

然而,只有少数人试图为图形神经网络(GNNs)创建解释方法。大部分在深度学习中开发的“重用”方法,并试图将其应用于图形领域。

如果你想了解更多关于可解释 GNNs 的最新研究,我强烈推荐你看看我以前的文章。在这里,我将保持理论简短,并集中于如何使用现有的 GNN 解释包,GNNExplainer。

我们为什么要烦恼呢?

深度学习模型可以有数百万个参数,它们经常以黑盒的形式出现在我们面前[1]。很难说这个模型将如何对新数据做出反应,以及为什么它会在给定特定输入的情况下做出某些预测。

通过解释方法,我们希望在模型中建立信任。它们从模型中提供了额外的见解,使模型更加透明和可解释。通过发展对模型的信任,我们可以安全地部署模型以供更广泛的使用。

GNN 解释方法的工具

不幸的是,对 GNNs 解释方法的研究相当新,所以没有很多现成的工具和研究论文。Duvenaud 等人在[2]中完成了关于该主题的第一批工作之一。他设法创造了一种梯度归因方法,突出了触发预测的某些分子亚结构。例如,他们的方法可以突出使分子有毒或可溶于水的分子亚结构。

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

突出显示了触发溶解度预测的分子亚结构。【来源】

幸运的是,斯坦福大学的研究人员开发了一种模型不可知的 GNN 解释方法,GNNExplainer [3]。在本文的剩余部分,我们将探索如何使用他们的工具。

如果你没有时间阅读关于 GNNExplainer 实现的整篇文章,但是你仍然想对它的工作原理有一个直观的了解,看看我的文章

GNNExplainer 的实际操作部分

你可以在这里找到 GNNExplainer 知识库。

通过我的个人笔记链接到安装说明。

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

GNNExplainer 的交互式可视化。在“Syn2”数据集上运行。

GNNExplainer 实际上是第一个模型无关的开源工具,可用于 GNN 解释。斯坦福大学的研究人员做了大量工作来创建这个通用工具,但它包含很少的错误,并且相当难以设置。在本指南中,我将讨论我在安装过程中遇到的一些问题,并指导你如何创建如上图的 GNN 解释。

装置

请注意: 我的设置是支持 CUDA 的 GPU 的 Windows OS。安装说明可能不适用于不同的设置。但是,我将尝试指出您可能需要调整的步骤,以使其适用于其他操作系统需求。如果你只是好奇这个包是如何工作的,没有时间安装,请跳过这个说明。

要安装 GNNExplainer,先决条件是已经安装了 conda】。他们资源库的安装说明也可以在 Github 上找到。它们不适合我的设置,也没有什么错误,所以我花了一些时间根据我的需要调整安装说明。我的设置的工作说明如下。如果您有不同的操作系统,您可能需要更改 cudatoolkit 版本,或者安装没有 CUDA 支持的 Pytorch。

如何培养 GNN 模式

作者提供了一个 GNN 模型和几个图形数据集作为示例。这是一个很好的起点,可以测试一切是否正常工作,并对软件包有更多的了解。

安装软件包后,运行:

这将在示例 syn2 数据上训练所提供的 GNN 模型。它甚至可能需要半个小时,所以做好准备!Syn2 是一个由作者创建的合成数据集,称为“具有社区特征的随机 BA 图”。GNNExplainer 模型的基本事实是一个“类似房子”的结构(看上面的 GIF)。这是 GNNExplainer 将尝试查找的一组节点。

如何使用解释器

要使用在 Syn2 数据集上训练的模型运行 GNNExplainer,请运行:

这将创建一个解释文件,然后可以使用 Jupyter 笔记本可视化。我在运行它的时候遇到了一个错误。在脚本结尾保存准确性/损失数字时出现问题。所需的解释是在这一步之前计算的,所以这个问题并不重要。如果你还想解决这个问题并保存图,用修改保存路径的我的要点替换 explain.py 文件。它们将位于 log/ 文件夹中。

如何可视化结果

作者为我们提供了两个笔记本来可视化结果。它们几乎是一样的,但是交互式笔记本包含了额外的交互式解释示例。

在您从笔记本/ 文件夹中启动选定的笔记本之前,您必须再进行一次调整。转到 log/ 文件夹,将从 masked_ 开始的所有文件移动到*syn 2 _ base _ h20 _ 020 _ explain/*文件夹。这将确保我们不必更改笔记本代码中的任何路径。

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

将所有被屏蔽的 _*文件移动到 syn2_base_h20_020_explain 文件夹

这个笔记本非常简单,你只需要运行所有的单元格来生成图。对于 syn2 数据集,它们应该类似于下图:

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

运行GNN-解释者-即 ipynb 笔记本后的示例结果。

如何在分子数据上运行 GNNExplainer?

您可以潜在地使用该软件来运行 Tox21、致突变性或自定义图表数据集。为了做到这一点,请看一下原始的存储库说明。

我成功地在 Tox21 数据集上训练了 GNN 模型。然而,看起来软件中有错误,模型在训练后没有保存,这使得无法运行解释器。希望他们能尽快修好它。

PyTorch 几何中的 GNNExplainer

GNNExplainer 也是 PyTorch 几何软件包的一部分。然而,它只支持节点解释,并且没有原始包提供的可视化工具。不管怎样,还是值得一查的。

感谢您阅读本文,希望对您有用!

关于我

我是阿姆斯特丹大学的人工智能硕士学生。在我的业余时间,你可以发现我摆弄数据或者调试我的深度学习模型(我发誓这很有效!).我也喜欢徒步旅行:)

如果你想了解我的最新文章和其他有用的内容,以下是我的社交媒体资料:

参考

【1】深度学习中的解释方法:用户、价值观、关注点和挑战:https://arxiv.org/pdf/1803.07517.pdf

【2】****用于学习分子指纹的图上卷积网络:https://arxiv.org/abs/1509.09292

【3】gnnexplaner:为图形神经网络生成解释:https://arxiv.org/abs/1903.03894

利用条件期望进行缺失值的实用估计

原文:https://towardsdatascience.com/ds-in-the-real-world-5f77800aff78?source=collection_archive---------23-----------------------

基于多元正态条件期望的二阶估计

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

迈克·肯尼利在 Unsplash 上的照片

处理缺失值是数据科学中一个棘手的问题。有多种方法,下面列出了一些:

  • 丢弃包含缺失要素的记录
  • 用样本平均值或中位数替代缺失值
  • 使用机器学习技术推断期望值,如变分自动编码器[1]

尽管我们可以选择丢弃包含缺失要素的记录,但考虑到这些记录中的非缺失要素可以提供有价值的信息,这通常是不可取的。

考虑到分布的唯一一阶矩,均值替代可以被认为是一种一阶近似方法。

另一方面,基于机器学习的方法通常计算量很大,并且缺乏直观的解释能力。这是一个研究前沿,积极的研究正在进行中。

在这篇文章中,我提出了一个简单的方法,除了利用第一阶矩之外,还利用了第二阶矩,并表明它为我们提供了一个更好的估计量。

1 多元正态条件期望法

假设 k 维随机向量 X 遵循多元正态分布,

X ~ N(μ,σ)

其中μ是平均向量,σ是 kk* 协方差矩阵。如果 X 被分割成两个子向量 X1 和 X2,分别具有大小 q1* 和 (k-q)* 1,则以 X2=x2 为条件的 X1 遵循多元正态分布,具有以下均值和协方差矩阵:

μ(x1|x₂)=μ₁+σ₁₂σ₂₂^(-1)(x₂—μ₂)……………………………………(1)

σ(x1|x₂)=σ₁₁—σ₁₂σ₂₂^(-1)σ₂₁(2)

其中μ₁和μ₂是 X1 和 X2 的先验均值向量,σ₁₁是σ的子矩阵,大小为 qq* ,σ₂₂是σ的子矩阵,大小为 (k-q)(k-q)* ,σ₁₂是σ的子矩阵,大小为 q(k-q)* 。

假设对于特定记录,X1 是缺失值特征的向量,而 X2 是有效值特征的向量。使用上面的μ(X1|x₂方程)我们可以估计 X1 的值,其中μ和σ用样本的均值和协方差矩阵代替,不包括缺失值记录。这可以被认为是一个二阶近似,因为它使用了一阶和二阶矩。可以一次估计多个缺失特征。

1.1 分类特征的估计

上面描述的条件期望方法并不直接应用于分类特征,但是通过一键矢量转换,它同样可以使用。步骤是:

  1. 将分类特征转换为指示特征的一键向量。例如, Dayofweek 转换成 7 个指标特征 Dayofweek_0,Dayofweek_1,…,Dayofweek_6,其中day ofweek _ 0=I【day ofweek 是星期一】等。
  2. 将指标特征视为连续的,并使用条件期望方法对分类特征缺失的记录进行估计。
  3. 将指标估计值的 argmax 作为类别的预测指标。

1.2 约束特征的估计

1.2.1 积极特征

假设一个特征只取正值,但是等式(1)给出的估计并不能保证肯定。然而,使用适当的变量转换,我们可以加强这种约束。假设 x 是一个正值特征。让我们对数变换 x 并用数据集*中变换后的特征 u= log(x) 替换它。*由于 u 可以取正值也可以取负值,因此我们可以估算 u 而不是 x 。最后我们可以通过 exp(u) 回退 x ,始终为正。

1.2.2 有界特性

假设特征 x 被限制在范围(a,b)内。我们可以引入一个无界变量 u 使得

x = a + (b-a)/( 1 + exp(-u) )

其中 1/(1 + exp(-u))是值在(0,1)内的 Sigmoid 函数。 ux 表示为 u = -log( (b-a)/(x-a) -1) 。然后我们可以在一个数据集中用 u 替换 x ,估计缺失的us,最后计算缺失的xs。

1.2.3 交叉特征约束

假设一个特征 X₁总是大于另一个特征 X₂,X₁ > X₂.为了对估计值施加这样的约束,我们可以使用变换后的特征 X₁’ = log(X₁-X₂来替换数据集中的 X₁。估计完 X₁’之后,我们就可以退出 X₁了,

X₁ = X₂ + exp(X₁’)

这保证了 X₁ > X₂.

2 条件期望法的评价

为了评估条件期望方法在实践中的表现如何,使用了 UCI 机器学习库[2]上的电器能量预测数据集。这是一个实验数据集,旨在对低能耗建筑中的电器能耗进行回归分析。它有 19735 条记录和 29 个特征,包括两个随机变量 rv1rv2 。功能描述粘贴在下面:

date time year-month-day hour:minute:second
Appliances, energy use in Wh
lights, energy use of light fixtures in the house in Wh
T1, Temperature in kitchen area, in Celsius
RH_1, Humidity in kitchen area, in %
T2, Temperature in living room area, in Celsius
RH_2, Humidity in living room area, in %
T3, Temperature in laundry room area
RH_3, Humidity in laundry room area, in %
T4, Temperature in office room, in Celsius
RH_4, Humidity in office room, in %
T5, Temperature in bathroom, in Celsius
RH_5, Humidity in bathroom, in %
T6, Temperature outside the building (north side), in Celsius
RH_6, Humidity outside the building (north side), in %
T7, Temperature in ironing room , in Celsius
RH_7, Humidity in ironing room, in %
T8, Temperature in teenager room 2, in Celsius
RH_8, Humidity in teenager room 2, in %
T9, Temperature in parents room, in Celsius
RH_9, Humidity in parents room, in %
To, Temperature outside (from Chievres weather station), in Celsius
Pressure (from Chievres weather station), in mm Hg
RH_out, Humidity outside (from Chievres weather station), in %
Wind speed (from Chievres weather station), in m/s
Visibility (from Chievres weather station), in km
Tdewpoint (from Chievres weather station), °C
rv1, Random variable 1, nondimensional
rv2, Random variable 2, nondimensional

2.1 连续特征的缺失值估计

选取了三个特征: T3风速、rv1、进行评估。随机抽取 10%的记录,对于所选记录,三个特征标记为“缺失”。日期特征被替换为两个分类特征星期,然后它们被转换为一个热点向量。然后使用第 1 节中描述的方法估算这些缺失值,并与它们的真实值进行比较。三个估计量的合成均方根误差(RMSE)总结如下:

Comparison of RMSEs of Three Missing Value Estimators
-----------------------------------------------------------------**Feature   | Conditional-Expectation | Sample-Median | Sample-Mean**T3        |  0.617                  |   1.961       |  1.957 
Windspeed |  1.872                  |   2.564       |  2.527
rv1       | 14.590                  |  14.589       | 14.589
  • 对于 T3 ,条件期望估计量的 RMSE 小于样本中位数或样本均值 RMSE 的三分之一。
  • 对于风速,条件期望估计器的 RMSE 约为样本中位数或样本均值 RMSE 的 73%。
  • 对于 rv1,所有的三个估计器都有大致相同的 RMSE。这是意料之中的,因为 rv1 只是一个随机变量。

为了大致了解每个要素与其他要素的相关程度,计算了每个要素与其他要素的平均绝对相关系数,如下表所示:

**Feature   |  Average of Absolute Correlation Coefficients**T3        |  0.33
Windspeed |  0.13
rv1       |  0.01

T3 与其他特征的相关性最高,而 rv1 与其他特征的相关性最低。这解释了三个特征的不同水平的估计 RMSEs。

2.2 分类特征的缺失值估计

Dayofweek ,从日期特征中提取,选取进行评估。随机抽取 10%的记录, Dayofweek 标记为“缺失”。然后使用第 1.1 节中描述的程序估算这些缺失值。估计精度为 33%。这看起来不高,但是如果我们选择最频繁的 Dayofweek Tuesday 作为我们的估计,那么准确率只有 15%!

3 但是现实世界的特征不是多元高斯…

的确,很少有真实世界的特征遵循多元正态分布。提出的条件期望方法是基于正态性假设,但这是一个合理的假设吗?这取决于现有的信息。已知多元正态分布是给定随机变量的均值和协方差矩阵的最大熵分布[3]。因此,当唯一已知的信息是一阶和二阶矩时,多元正态分布在实践中是一个合理的假设。我对电器能源预测数据集的评估表明,正态性假设可以导致对真实世界缺失值的稳健而直观的估计。

参考

[1]约翰·T·麦考伊、史蒂夫·克伦和刘烨·奥雷特。"缺失数据插补及其在模拟铣削回路中的应用."IFAC-PapersOnLine
第 51 卷,第 21 期,第 141–146 页(2018 年)。

[2]电器能源预测数据集。UCIMachine 学习知识库。http://archive . ics . UCI . edu/ml/datasets/Appliances+能源+预测

[3]海姆·松波林斯基。"第三讲:最大化熵和信息."哈佛讲座。【https://canvas.harvard.edu/files/3549960/download? 下载 _frd=1 (2015)。

DS 项目:如何预测 Google Apps 评分?

原文:https://towardsdatascience.com/ds-project-how-to-predict-google-apps-rating-618ebc77cad?source=collection_archive---------18-----------------------

通过练习本练习,丰富您的数据科学知识。

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

在这篇文章中,我与你分享我在分析和预测 Google Apps 评分方面的经验。这是我在数据科学面试中必须解决的测试之一。我必须指出,这是一种个人解决问题的方式,它可以帮助你得出自己的推理。

与任何其他 DS 项目一样,我们从从这里下载数据文件开始。

你可以从 这里 在我的 Github 上可视化这个项目的 Jupyter 笔记本,查看我在这个项目中使用的代码。

事不宜迟,我们走吧!

开始使用数据

第一步是数据预处理。我们根据数据的格式和类型清理、播放和转换所有元素和列。正如我们所看到的,我们的数据具有以下格式:

apps = pd.read_csv('GooglePlayApp-ELHOUD.csv')
apps.info()

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

数据帧包含 13 个不同的列和 8281 行。列“ Rating ”代表我们模型的 Y 向量:我们试图预测的内容。我们将“评级的不同值形象化:

apps['Rating'].value_counts()

在可视化“评级的值时,我们注意到在我们的数据(19.0)中有一个不合理的评级。一般来说,应用程序的评级在 0 到 5 星之间。我们删除了这个值,以避免我们的模型出现偏差。如果我们认为这是一个打字错误,我们可以用 1.9 替换它,但由于我们无法确定,并且我们与数据所有者没有直接联系,所以最好将其删除。

之后,我们会检查所有重复的应用程序并删除它们:

print('Number of apps at the beginning:', len(apps))
apps.drop_duplicates(subset='App', inplace=**True**) 
print('Number of apps after removing duplicates:', len(apps))

我认为建议删除这三列(当前版本Android 版本、上次更新),因为这三列对于我们的分析来说是不必要的,并且对评级没有直接影响(之后可视化相关性)。

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

为了使数据形象化,我们必须把它转换成数字。转换是通过替换所有的字符串并以不同的方式将它们转换成数字格式来完成的。在下图中,我们概括了所有的清洁、缩放和转换步骤。

我在下图中概括了所有的步骤:

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

我使用的转换代码的所有部分都设置在我的 Github 库上。

数据可视化

一旦我们完成了所有的转换,我们在开始时使用 Seaborn 可视化“应用评级的分布和“应用大小的分布。因此,让我们来看看它,检查是否正常,并尝试纠正它,否则:

sns.distplot(apps['Rating'],fit=norm)
print('- Total number of ratings:', len(apps['Rating']))
print('- Mean of distribution of rating :', np.mean(apps['Rating']))
print('- Standard deviation:', np.std(apps['Rating']))

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

我们注意到数据集评级的“拟合度”从技术上讲并不符合均值为 4.16、标准差为 0.559 的正态分布。这些信息将有助于以后定义和开发模型。让我们检查一下概率图:

**from** **scipy** **import** stats fig = plt.figure() 
prob = stats.probplot(apps[‘Rating’], plot=plt)

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

所以,肯定不正常:我们有偏斜。

我想做一些变换,以适应高斯分布。让我们对数据进行 Box-Cox 变换,看看会发生什么…Box-Cox 变换表示如下:

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

之后,我们重新设想转型后“应用评分的分布情况:

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

更像高斯(正态)分布!我们将在这个项目的剩余部分使用这个转换。

接下来,我们想象不同的相关性。这是帮助我们选择模型重要特性的关键一步。相关矩阵如下所示:

apps.corr()

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

与相关性相关的一些备注:

  • 很明显,安装数量与评论数量高度相关(k=0,59)。
  • 价格越高,评级越低,相关系数为 0.02。

预测模型

我们建立了两个模型:

  • 随机森林回归量
**from** **sklearn.ensemble** **import** RandomForestRegressor
**from** **sklearn.metrics** **import** auc, accuracy_score, mean_absolute_error, mean_squared_errorchosen_features = ['Reviews', 'Size', 'Installs', 'Type','Category', 'Price', 'Content Rating', 'Genres']
X = apps[chosen_features]
y= bcx_target *#transformed rating*
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state=10)rf_reg = RandomForestRegressor()
rf_reg.fit(X_train,y_train)
y_rfpred = rf_reg.predict(X_test)

对于一个简单的 RF 回归器(带有转换后的评级),我们得到:

  • 均方差:0.269
  • 平均绝对误差:0.352

在下图中,我们可以更好地看到随机森林回归的实际和预测评级。:

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

现在,让我们想象一下随机森林的估计数对 MSE 的影响:

estimators = np.arange(10, 500, 10)
mse_list = []
**for** i **in** estimators:
    rf_reg.set_params(n_estimators=i)
    rf_reg.fit(X_train, y_train)
    y_rfpred = rf_reg.predict(X_test)
    mse_list.append(mean_squared_error(inv_boxcox(y_test,lam), inv_boxcox(y_rfpred,lam)))
plt.figure(figsize=(10, 5))
plt.xlabel("No. of Estimators")
plt.ylabel("MSE")
plt.title("Effect of Number of Estimators")
plt.plot(estimators, mse_list)

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

我们得到了大约 370 的一些估计量的最小均方误差。最低 MSE 大约等于 0,2697

  • XGBoost 回归器
y_xgpred = xgb_model.predict(X_test)
mse=mean_squared_error(inv_boxcox(y_test,lam), inv_boxcox(y_xgpred,lam))
print('Mean Squared Error:',mse)

XGboost 的 MSE 近似等于 0,2695

在下图中,我们比较了两个模型(Random Forest 和 XGboost)的预测性能。

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

观点

为了不使开发时间过长,我在这里停了下来。虽然,如果我想在这方面更进一步,我会尝试这两个想法:

  • 尝试一些神经网络模型(使用 Keras)。我相信如果我们为这个问题选择了最好的架构,我们会得到好的结果。
  • 我还将着手处理数据集的第二部分,并应用 NLP(自然语言处理)来根据用户的评论预测应用程序的评级(通过使用所有的 NLP 技术,如标记化、文本分段……)

我建议您查看我在这个项目中使用的代码,方法是从 这里 在我的 Github 上可视化这个项目的 Jupyter 笔记本,并关注更多相关文章和项目。

ds4 ovid-19:在新冠肺炎,数据科学需要解决哪些问题?

原文:https://towardsdatascience.com/ds4covid-19-what-problems-to-solve-with-data-science-amid-covid-19-a997ebaadaa6?source=collection_archive---------33-----------------------

探索 7 种类型的数据和行业垂直行业、数据集链接、数据科学技术和挑战的 40 个业务问题

在本文中,我希望分享我对我们能够解决的具有挑战性的数据科学问题的想法,这些问题在新冠肺炎有商业价值。新冠肺炎是小说《T2》的主人公,他是 2019【1】的后裔。本文对数据科学发烧友识别、制定和解决业务问题很有用,对领导指导他们的团队解决与其业务相关的数据科学问题也很有用。我观察到了业内两大趋势。

○我们遇到了业务问题,但不确定哪些数据有助于解决该问题?

○我们有数据,但是使用这些数据可以解决哪些业务问题?

在这两种情况下,起点是不同的。然而 在数据科学世界中,业务问题和解决业务问题的相关数据 同等重要。文章的重点是:

需要解决哪些业务问题?

与新冠肺炎相关的不同数据集有哪些?

什么样的机器学习/深度学习/统计技术可以用来解决这些问题和挑战?

总结特定行业垂直行业需要解决的问题

正如我在前面的文章[2]中提到的,有 7 种类型的数据即 数字、分类、文本、图像、视频、语音和信号 不分行业/领域来构建数据科学的问题。

使用数值和分类数据要解决的问题:

表-1 总结了 数值型、 分类型数据要解决的问题类型、要使用的数据科学技术以及解决这些问题的挑战。需要解决的核心业务问题是” 新冠肺炎对我的业务有什么影响?我们感染新冠肺炎病毒的风险有多大? 。这些业务问题被表述为多步骤数据科学问题,如表-1 所示。

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

表-1:在新冠肺炎使用数值和分类数据要解决的问题列表

以下是解决上述问题的可用数据集列表。除了这些数据集,您可能还需要使用您有权访问的特定于您的组织的数据。您可以直接将原始开源数据加载到您的代码(python 笔记本)中或下载。csv 文件,然后加载它们进行进一步处理。

  • 新型冠状病毒(新冠肺炎)病例,由(JHU)约翰·霍普斯金大学系统科学与工程中心(CSSE)提供:

https://github.com/CSSEGISandData/COVID-19

  • 新冠肺炎受影响病例的日水平信息:

https://www . ka ggle . com/sudalairajkumar/novel-corona-virus-2019-dataset

  • 新冠肺炎印度公司的具体数据可以通过该网址访问,该网址每天更新。您可以参考您所在国家/地区的具体数据进行进一步分析。

https://api.covid19india.org/

  • 确诊、死亡、康复病例的时间序列数据:

https://data . hum data . org/dataset/novel-coronavirus-2019-ncov-cases

有一些有趣的文章可以处理[3]中提到的加载数据。

  • GDP 增长率增长率/衰退数据参考:

https://datahub.io/core/gdp#data

https://tradingeconomics.com/country-list/gdp-growth-rate

https://data.worldbank.org/topic/economy-and-growth

  • 消费物价指数数据可从以下网址下载:

https://datahub.io/core/cpi#data

  • 就业数据参考:

https://datahub.io/core/employment-us#data

  • 人口数据可从以下网址下载:

https://datahub.io/core/population

  • 黄金历史价格:

https://datahub.io/core/gold-prices

  • 天气数据集:

https://www.kaggle.com/muthuj7/weather-dataset

  • 房地产 /房价数据:

https://datahub.io/core/house-prices-us#data

  • 新冠肺炎脆弱性指数数据与参考文献[4]:

【https://github.com/closedloop-ai/cv19index

  • 新冠肺炎药物研发数据集:

https://www . ka ggle . com/jaisimha 34/covid 19-drug-discovery/data

使用自然语言处理解决文本数据的问题:

如果您熟悉文本处理,那么这些问题可能会让您感兴趣。表 2 总结了一系列问题、相应的文本数据、解决这些问题的技术以及一系列挑战。来自变压器的双向编码器表示(BERT)的最新进展在解决这类问题中起着至关重要的作用。

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

表 2:新冠肺炎文本数据需要解决的问题列表

可用的数据集链接如下:

  • 新冠肺炎开放研究数据集( CORD-19 )数据来自 Kaggle,包含 50,000 多篇文章:

https://www . ka ggle . com/Allen-institute-for-ai/CORD-19-research-challenge

  • 政府措施数据集:

https://www.acaps.org/covid19-government-measures-dataset

  • 假新闻检测器数据和模型可从以下网址获取:

https://github.com/yaqingwang/EANN-KDD18

在最近的一次 Kaggle 挑战赛中,我和我的爱立信同事一起解决了构建问答系统的问题。管道中遵循的步骤以及代码和结果在以下 Kaggle URL 中共享:

https://www . ka ggle . com/robin Liu bin/ericsso n-cord-19-challenge-task-6

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

图 1:解决疫情数据问答系统的管道

图 1 显示了解决问题的高级步骤,包括使用单词嵌入、BERT 方法的预处理,以及最终使用双语评估替角分数(BLEU)对结果进行排序。我的爱立信同事在这篇博客中讨论了各种实现方法。

https://www . ericsso n . com/en/blog/2020/4/ai-data-solutions-helping-fight-corona virus

语音数据要解决的问题:

表 3 总结了问题列表、参考语音数据、要使用的数据科学技术以及挑战列表。

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

表 3:新冠肺炎语音数据需要解决的问题列表

关于呼吸、咳嗽和语音声音的 Coswara 数据的详细信息(在数据收集阶段,您可以做出贡献并在以后用于建立模型)可从以下 URL 获得。咳嗽样本的诊断在[5]中有描述。

https://coswara.iisc.ac.in/

图像、视频数据要解决的问题:

表 4 总结了需要解决的问题、参考图像/视频数据、需要遵循的技术以及面临的挑战。

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

表 4:新冠肺炎图像、视频数据需要解决的问题列表

让我们检查可用的数据资源来解决上述问题。

  • X 光、CT 影像数据集:

https://github.com/ieee8023/covid-chestxray-dataset

https://www.kaggle.com/bachrr/covid-chest-xray

https://towards data science . com/新冠肺炎-成像-数据集-胸部-x 光-CT-注释-协作-5f6e076f5f22

使用 Keras 在 X 射线图像中检测新冠肺炎的示例代码可参考[6]。

  • 基因序列新冠肺炎的鉴定:

https://datascience.nih.gov/covid-19-open-access-resources

https://www.ncbi.nlm.nih.gov/genbank/sars-cov-2-seqs/

以下网址提供了有趣的资源,可以开始我们在基因组学和病理学领域的分析。提到了可用的计算资源,因为基因序列建模需要大量的计算能力。请利用现有资源,展示你的计算机视觉和其他机器学习技能。

https://datascience.nih.gov/covid-19-open-access-resources

https://covid19pathology.nih.gov/

按照行业垂直领域总结要解决的业务问题:

表 5 总结了新冠肺炎疫情各种垂直行业需要解决的数据科学问题列表。这个列表是所有垂直行业的常见业务问题的补充,例如“新冠肺炎对我的业务/股价/收入有什么影响?”。

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

表 5:根据行业垂直领域需要解决的具体问题列表

表 5 中介绍的数据科学技术包括 LSTM-长短期记忆、SSD-单次检测、YOLO-你只看一次、ARIMA-自回归综合移动平均、BERT-来自变压器的双向编码器表示、Seq2Seq 模型-序列到序列模型、CNN-卷积神经网络、CONVLSTM-卷积长短期记忆、NLP-自然语言处理。

我们的当务之急是安全离开疫情,然后努力实现业务连续性。COVID(公元前)前和 COVID(公元前)后的生活可能不一样。正如我们在历史上所见证的那样,每一次疫情都给人类行为和商品消费模式带来了一些变化。 捕捉消费者行为的变化 是各行各业的关键。能够提前抓住这一趋势的公司将是这一旅程的最大受益者。

结论:

在本文中,我主要关注数据科学家在数据可用的情况下可以解决的一系列问题。我收集了 40 个问题、相应的数据以及参考 URL 和数据科学技术来解决这些问题。这 40 个问题首先按数据类型排列,然后按行业垂直排列。具有多种数据类型(数字+文本+图像)的异构数据可用于解决进一步的一系列问题,如多模态聊天机器人、构建新冠肺炎助手等。在参考资料中共享的其他文章[7,8,9]中,可提及一些更有趣的问题。

参考文献:

[1]https://www . who . int/India/emergencies/novel-coronavirus-2019

[2]https://medium . com/@ sunil . vuppala/enabling-variable-type-of-health care-data-to-build-top-10-dl-applications-f5c 6 f 45 eddba

[3]https://towards data science . com/新冠肺炎-数据处理-58aa 3663 F6

https://arxiv.org/pdf/2003.07347.pdf

[5]https://arxiv.org/pdf/2004.01275.pdf

[6]https://www . pyimagesearch . com/2020/03/16/detecting-x-ray-images-with-keras-tensor flow-and-deep-learning/

[7]https://www . Forbes . com/sites/bernardmarr/2020/03/13/coronavirus-how-artificial-intelligence-data-science-and-technology-is-used-to-fight-the-the-the-疫情/#e58ebba5f5fc

[8]https://www . data revenue . com/en-blog/machine-learning-新冠肺炎

https://covid19.iisc.ac.in/

期待早日走出新冠肺炎,生活在更加健康美好的世界后新冠肺炎。请在评论区分享您的反馈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值