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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

MATLAB 中的支线图

原文:https://towardsdatascience.com/subplots-in-matlab-34c339082300?source=collection_archive---------25-----------------------

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

作者图片

组织情节的简单方法

子绘图是 MATLAB 中一个非常强大的功能。它们允许用户非常快速地创建定制的数据可视化和显示。它们还可以用来快速创建交互式图形用户界面(GUI)。在本教程中,我描述了使用 subplot()命令的三种不同方式,并提供了每种方式的示例。提供的示例在 MATLAB 和 Octave 中都可以工作。

包含示例的源代码可以在 GitHub 库中找到。

使用基本支线剧情

MATLAB/Octave 中的 subplot()函数允许您在单个图形中的网格上插入多个图。subplot()命令的基本形式接受三个输入:nRows、nCols、linearIndex。前两个参数定义了网格中包含的行数和列数。第三个参数是选择当前活动绘图轴的线性索引。索引从 1 开始,从左到右、从上到下递增。如果这还没有意义,也没关系,在本节的所有例子中,顺序都是可视化的,在网格例子中尤其明显。

让我们从一个简单的例子开始,这个例子沿着一行包含三个子图。为了方便起见,我还使用了 text()函数来显示每个子情节中的线性索引。

a1 = subplot( 1, 3, 1 );
text( 0.5, 0.5, '1', 'fontsize', 48 );
a2 = subplot( 1, 3, 2 );
text( 0.5, 0.5, '2', 'fontsize', 48 );
a3 = subplot( 1, 3, 3 );
text( 0.5, 0.5, '3', 'fontsize', 48 );

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

作者图片

注意,在这个例子的代码中,我已经为每个子情节保存了轴句柄(a1,a2,a3)。这一点很重要,因为现在图形上有多个绘图轴,每当我们更改属性时,我们将需要指定我们引用的轴。例如,如果我们想改变字体大小,我们必须指定每个轴上的字体大小。下面的代码片段是一个示例,其中每个轴上的字体被设置为不同的大小。这一概念扩展到所有其他绘图轴属性,并显示了如何完全定制每个子图。

set( a1, 'fontsize', 12 )
set( a2, 'fontsize', 14 )
set( a3, 'fontsize', 16 )

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

作者图片

这是另一个例子,我交换了 subplot 函数中的前两个参数,现在我们将创建一个有三行的图形。

a1 = subplot( 3, 1, 1 );
text( 0.5, 0.5, '1', 'fontsize', 48 );
a2 = subplot( 3, 1, 2 );
text( 0.5, 0.5, '2', 'fontsize', 48 );
a3 = subplot( 3, 1, 3 );
text( 0.5, 0.5, '3', 'fontsize', 48 );

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

作者图片

最后,我们可以创建一个完整的子图网格。在这个例子中,我包含了 3 行 3 列;然而,可以使用任何组合。这个例子很好地说明了线性指数是如何增加的。

for iPlot=1 : 9
  subplot( 3, 3, iPlot );
  text( 0.5, 0.5, num2str( iPlot ), 'fontsize', 48 );
end

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

作者图片

使用不同大小的地块

使用 subplot()的一种稍微灵活的方法是将子图放置在网格中的多个点上。这是通过传入一个线性索引数组作为第三个参数来实现的,而不仅仅是一个值。例如,subplot( 1,3,[1,2])将创建一个包含三列的 subplot 网格和一个占据前两列的 plot。这种方法可以让你做出一些非常漂亮的图,可以很容易地容纳各种类型的数据。

让我们看另一个例子。底层网格的形状为 3 x 3。第一个子图位于网格的顶部,跨越所有三列。第二个子图位于左下角,覆盖 2 x 2 子网格。最后,最后一个子图在右下角,横跨最后两行。在所有情况下,线性指数都包括在图中,以说明它们覆盖了网格的哪些部分。

% - Create a single plot on the top row
subplot( 3, 3, 1:3 );
text( 0.35, 0.5, '1, 2, 3', 'fontsize', 48 );
% - Create a single plot in the last column
subplot( 3, 3, [6, 9] );
text( 0.30, 0.5, '6, 9', 'fontsize', 48 );
% - Create a matrix in the bottom left corner
subplot( 3, 3, [ 4:5, 7:8 ] );
text( 0.25, 0.5, '4, 5, 7, 8', 'fontsize', 48 );

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

作者图片

填充大型网格的另一个方便的用途是简单地留出一些空间。这很好,因为它创建了空白,并允许您在图中的不同位置对齐子图。下面是一个示例,它将子图放在顶行的中央,并将底行的子图跨越所有列。

subplot( 2, 3, 2 );
text( 0.35, 0.5, '2', 'fontsize', 48 );
subplot( 2, 3, 4:6 );
text( 0.35, 0.5, '4, 5, 6', 'fontsize', 48 );

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

作者图片

使用位置坐标

使用 subplot()函数的最后也是最灵活的方法是直接指定轴的位置。通过使用标准化的图形单位并指定图形内的相对偏移,最容易做到这一点。如果你对相对数字单位不熟悉,你可以看前面的教程来了解这些。

要指定一个子图位置,您可以将键盘“position”作为 subplot()中的第一个参数,后跟一个描述该位置的 1 x 4 向量。position 属性分别包含水平原点(h0)、垂直原点(v0)、宽度(w)和高度(h),组织方式如下:[ h0,v0,h,v ]。以这种方式指定子图允许您完全控制位置,如果您想以编程方式创建 GUI,这是必不可少的。

我在下面加入了一个例子,在图的左半部分插入了一个子图,在右半部分插入了三个按钮。这些按钮仅用于说明。在 MATLAB 中创建 GUI 的任务留给另一个教程。请注意,对于下面的例子,我已经指定了图形的归一化单位,但是,默认单位是像素。

set( f, 'units', 'normalized' );
a = subplot( 'position', [ 0.1, 0.1, 0.5, 0.8 ] );
title( a, 'Subplots are awesome!' );
set( a, 'fontsize', 16 );
a = uicontrol( f, 'units', 'normalized', 'position', ...
  [ 0.7, 0.7, 0.2, 0.1 ], 'style', 'pushbutton', 'string', 'Press Me' );
a = uicontrol( f, 'units', 'normalized', 'position', ...
  [ 0.7, 0.5, 0.2, 0.1 ], 'style', 'pushbutton', 'string', 'Click Here' );
a = uicontrol( f, 'units', 'normalized', 'position', ...
  [ 0.7, 0.3, 0.2, 0.1 ], 'style', 'pushbutton', 'string', 'Easy' );

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

作者图片

摘要

在这篇快速教程中,我回顾了在 MATLAB/Octave 中使用 subplot()的三种(实际上是两种半)不同方式。我发现这个功能对很多不同的事情都非常有用,我每天都在使用它。根据我想要完成的目标,我会使用这三种方法。摆弄一下例子,放入一些真实的数据,感受一下这些类型的子图如何对你有用。

需要记住的一些要点:

  • 每个子图都有自己的轴柄和属性(如字体大小、标签、网格),需要单独设置
  • 确保您保存了轴控制柄并正确引用它们
  • 子图索引可以指定为单个值或整数索引数组
  • 如果指定位置向量,请注意图形单位

编码快乐!

在没有提供数据的情况下,作为一名数据科学家在黑客马拉松中取得成功

原文:https://towardsdatascience.com/succeed-as-data-scientist-at-a-hackathon-without-data-being-provided-490ac46c9674?source=collection_archive---------66-----------------------

黑客马拉松应该做什么,不应该做什么

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

简介

上个月,我参加了我的第一次黑客马拉松,因为我收到了一封来自我的大学的随机广告邮件,这封邮件宣传了一个听起来很酷的东西。我点击它,看到他们正在寻找不同技能的团队,也包括数据科学家。牛逼我以为**,我进去了!**

我报名、申请并被录取了。答对了。

简单介绍一下我的背景可能会有帮助。我目前在德国攻读计算机科学硕士学位的第一年,我在兼职做机器学习工程师。所以我知道一些基础知识,但是,我想黑客马拉松也是为了让新手加入游戏,让他们与志同道合的人交往。

由于这是我的第一次黑客马拉松,我认为一个月的持续时间或多或少是正常的。我查了一下其他的黑客马拉松,是不是

艰难时期。

我最终加入了一个由来自世界各地的 9 人组成的随机团队。这些人真的很了不起,非常有野心,这也是游戏走到这一步的动力。

黑客马拉松开始

正式开始了。我们先打了几个电话,相互了解了一下,头几天除了头脑风暴什么也没做。由于这次黑客马拉松持续时间特别长,我们有时间思考,所以没关系。但是等等…我是团队的数据科学家,对吗?我注册时期望我会收到一些数据。甚至在开始之前,我就已经想好了我要分析什么东西!

  • 销售?
  • 营销?
  • 也许是一些产品研究?

三天过去了。没有收到。玩得好的黑客马拉松公司!好吧,该怎么办?我可以从网上搜集数据。由于我是做营销或者销售为主的数据科学,所以先查了一下:如何刮 Instagram。

可能会有用,但是,嘿,那是第三天,我们不知道我们想要哪个产品和策略,所以我不知道从 Instagram 上刮什么。

旁注:半决赛在头两周之后举行,在被选入前七名的团队之后,我们还有十天的时间提交最终报告。

第一周已经过去了,我们对产品有了一些粗略的计划。我基本上转换成了想法产生者的角色,因为没有其他事情可做。在此期间,我发现有很多像 Statista 这样的网站提供的产品相关的销售数据。我认为很好,但是……这要花钱(€)。

你可能觉得现在是我刮 Instagram 数据做营销分析的时候了。让我感兴趣的是,在过去的几个月/几年中,为了找到我们产品的趋势,如何使用和搜索特定的关键词或标签。哦不!我很容易抓取图片和它们的标签,但 Instagram 的关键词分析也是如此…花钱(€)。

旁注:在此期间,我有考试和工作要做,所以我不能像其他人一样,花整整一个月的时间在这个黑客马拉松上。

进入决赛——只有前七名的队伍。

事实证明我的团队非常聪明。在展示了我们的半决赛展示后,我们被选中进入决赛。我提供了许多想法和想法,但数据科学相关的见解?**还没有!**我现在真的很想为决赛做一些数据科学方面的工作。

我有主意了!

这是怎么回事…一个是,一个调查

事实证明,用 Google Survey 建立一个调查是相当容易的。我花了几个小时想了一些好问题,尽管我以前从未这样做过。我想我不想用一个 10 分钟就能完成的调查来烦扰人们。因此,我只选择了七个问题,并试图涵盖尽可能多的内容,例如:

  • 人口统计学
  • 收入
  • 愿意使用这种新品种和其他一些品种
  • 愿意花多少钱

在想出清晰具体的问题后,我把它发给了我所有的联系人。我所有的团队成员都把它发给了他们的联系人。但是,这还不够!

如果黑客马拉松公司不想向我提供数据,他们至少应该承担责任,将我的调查分发给他们公司的实习生。

我的调查 400 票~万岁😊

收集了两天的投票,从 Google Survey 下载了结果为 CSV 文件,超级好看。最后,是时候做一些数据分析了。不幸的是,我不能展示我的任何图,因为这是机密机密信息,但让我这样说吧,Seaborn 发布了一个新版本,其中他们制作了带有hist plotpre eetient 的二元图,很好且易于使用。

https://seaborn.pydata.org/tutorial/distributions.html

现在,我可以根据调查问题,用所谓的人物角色来支持我的团队。这是一项营销工作,用来识别和描述最有可能购买我们产品的人。

我还可以评估其他指标来支持销售团队,并评估用户行为,以便向我们的设计师提出这个问题,并以这种方式调整产品设计。

结论

总的来说,我学到了很多。我不会再参加为期一个月的黑客马拉松,但肯定会参加一个更短的。我学到的是,我现在提前询问数据是否将由提供而不是。也许这是我参加的这次黑客马拉松的一个特例,因为它不太像黑客马拉松,而更像是一次创意推介。

如果你计划参加这样的活动,请记住这一点。

强烈推荐!

等等,你不能不告诉我们你赢了就走!

我们没有。我们在 130 名参与者和 30 个团队中获得了第二名名,并赢得了丰厚的奖品。足够好我猜:)。

感谢阅读。

不平衡数据的成功:答案是 25,而不是 42

原文:https://towardsdatascience.com/success-with-unbalanced-data-the-answer-is-25-not-42-9c9ffe233620?source=collection_archive---------33-----------------------

在稀缺数据上使用 xgboost 获得与业务相关的结果

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

图片来自 tshirtgifter.com

在《银河系漫游指南》中,我们被告知生命、宇宙和一切的答案是 42。今天,我认为老鼠错了。当处理不平衡的数据时,答案是 25,或者至少在 25 左右。

作为数据科学家,我们经常得到严重偏向非事件的数据。取消合同、升级产品或扩大服务的人往往占少数。这使得算法识别它们具有挑战性,因为缺乏从中进行预测的样本。事实上,当您想要识别的类别少于 5%时,该模型可以通过简单地预测没有人会流失/追加销售来为您提供 95%的准确性。很好的度量结果,但对业务毫无用处。

除非你有完美的数据,否则你不太可能识别出所有积极的类别。因此,我们的重点应该是以尽可能高的准确度识别阳性类别的前 x%。这里我说的是相对低的召回率,高精度。

  • 回忆:你能确定你的积极阶层的比例是多少?
  • 精确:在你认为积极的人中,正确的比例是多少?

在下面的示例中,有 100,000 名客户,有 5000 名客户经历了客户流失、追加销售、网络故障等事件,企业需要您预测这些事件会在哪里再次发生。在这里,模型挑选出 15%有问题的顾客(召回),在那些被预测的顾客中,有 60%的精确度——不完美,但如果你随机选择,比 5%好得多。

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

这里的挑战是,这两个价值存在权衡。一个模型可以得到更高的精度,但是召回率会下降。这归结为一个商业决策,即截止点应该在哪里。应该注意的是,多个截止点可以为或多或少可能的客户群创建不同的行动。

好的,但是我如何到达那里?

如上所述,该算法可能会将所有事情都预测为“负面的”,其结果对企业来说是不可用的。我们可以通过调整模型中错误决策的权重来防止这种情况。这告诉模型,不正确的正值赋值代价更高,因此预测更多的是上述混淆矩阵的正方向。

问题是“我们用什么值?”算法有时会提供一个“平衡”的选项。在我们上面的例子中,我们有 5%,这相当于赋予权重 20。今天我告诉你这是错误的。你的目标应该是综合价值 25。我所说的组合是指正类比例和加权值的乘积。在上面的例子中,我们的正类比例是 5%,因此我们希望权重为 5。

通过选择组合值为 25 的权重,您添加了足够的权重以确保有足够的预测,但您也添加了召回范围低端的粒度,那里有真正高的精确度。这可以增强对客户的定位。

让我们通过一个例子来实现这一点。我在 Kaggle 数据集上进行了这个实验:家庭信用违约风险挑战 : 这里大约有 8%的客户违约。 (感谢威尔·科尔森在这里做了数据准备)

我在这个数据集上运行了一个 xgboost,使用了以下参数,但是请注意,scale_pos_weight 变量被设置为 3.1,以获得神奇的 25 数字。

然后,我以 1%的增量在概率阈值上创建预测,以针对测试和验证目标集生成召回率和精确度。我创建了测试验证集,因为我想测试输出的质量和一致性。我们稍后会看到这一点很重要。

我用 12.5 的“平衡”权重重复了这个过程,并用 plotly.express 生成了这个图。

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

我们的业务环境要求我们需要最高精度的,因此我们专注于最低 20%的召回率。在这个图表中显而易见的是蓝色气泡的频率,它表示模型的权重为 3.1。

气泡的大小代表测试组和验证组的精度之间的差异。这是平方和平方根,以保持可比性。下面比较了两种模型在不同截止点的情况。

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

这表明加权值为 3.1 时,该值的平均值较低。这意味着粒度越大,我们也能获得更高的一致性。这对企业来说是个好消息。他们可以更好地锁定最有可能的客户,并获得更可靠的结果。

不要做什么…

可以推荐的另一种处理不平衡数据的方法是重新平衡它。这可以通过过采样正类或下采样负类来实现。这里的理论是,你让你的算法有机会识别你的样本中太小的部分。这可以手动完成,就像我下面做的,或者甚至有专门的包,比如 SMOTE。

下面,我比较了两者的权重都为 3.1 的输出,但是红色组已经对训练数据进行了重新平衡,因此正面类的大小是负面类的 25%。

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

我们在这里看到的是,红色(重新平衡)组的气泡尺寸明显更大。这也是测试集和验证集之间的精度差异。这表示通过重新平衡数据,结果更加不一致。

这甚至适用于没有对重采样数据进行加权的情况。下面是权重为 1 的重采样数据集和权重为 3.1 的非重采样数据集之间的平均差异,我们看到权重为 3.1 时的误差较低。

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

离别之思

有趣的是,在生成这些模型时,它们都生成了 0.74 的 AUC 和变化。所以最初的观点会说这并不好。然而,我希望这能鼓励你比你的第一个指标看得更深一点,并帮助你为你的企业创造更多的价值。

这篇文章的所有代码都在 Github

Python 项目的成功 spark 提交。

原文:https://towardsdatascience.com/successful-spark-submits-for-python-projects-53012ca7405a?source=collection_archive---------5-----------------------

在真实的集群上平稳地运行您的项目,而不是您一直使用的那个虚拟集群。

**TL;博士:**学习的最好方法就是去做,而学习难的东西最好的方法就是一小步一小步的去做。这是针对在独立开发环境中处理包的 Python 实践者(可能是数据科学家)的指南,他们希望在集群上使用该包成功执行 Spark 作业。大数据技术堆栈乍一看似乎令人望而生畏:本文的目标读者是那些刚刚开始有效地使用集群的人,他们希望自己的项目能够顺利启动并运行,然后满怀信心地探索、利用这一经验并完善自己的风格。

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

Python 程序可能无法在恶劣的环境中生存。

介绍

已经够了!带我去指南(向下滚动)。

这个问题。

在为 Spark 编写、开发和测试我们的 Python 包时,很可能我们将在某种隔离的开发环境中工作;在桌面或专用云计算资源上。至关重要的是,我们可以自由组合的 Python 环境,即我们最喜欢的所有最佳包的次要版本,很可能不同于在我们友好的邻居集群上执行的普通 spark-submit 作业可访问的 Python 环境。一般来说,希望有一定程度的灵活性,并且能够快速地将附加的依赖项合并到原型环境中。在开发我们的代码的热情和兴奋中,准备一个与我们的包兼容的集群范围的环境,准备接收和执行我们的 Spark 作业的远见可能避开了我们。现在,这个不可预见的障碍正在阻止我们大规模地运行我们的项目,这对一个数据科学家来说是一个悲哀。

一种解决办法。

在接下来的内容中,我们将以透明和可访问的方式,通过 spark-submit 完成在 Spark 上运行 Python 包的必要步骤。本指南中涵盖的步骤有:

  1. 如何打包和准备我们的 Python 项目,以便在 Spark 集群上成功执行。
  2. 使用适合我们项目的 Python 版本准备一个最小的工作环境,并将其上传到 Hadoop,使所有工作人员在执行时都可以访问它。
  3. 打包我们的项目依赖关系。
  4. 准备 spark-submit 脚本,以一种可理解的方式将上述所有内容整合在一起。

目标受众。

与该主题相关的现有资源(参见进一步阅读)主要是为了用 Python 产生生产级的 Spark 作业。它们真的很棒,但是对于那些不太熟悉集群模式下工作 Spark 的复杂性和细微差别的人来说,可能会形成一个陡峭的学习曲线;有很多东西需要消化。如果您刚刚开始接触这些大数据技术,您将需要很好地理解基础知识。本指南关注基础知识和关键概念,强调你在开始时肯定会遇到的事情。

向导

序言。

我的职业是数据科学家。我在一个运行 Hadoop 的商用集群上工作,使用 Spark 为机器学习和数据科学项目构建大数据管道,处理包含数十亿行的超大型数据集。开发在隔离的环境中进行,使用 Anaconda 作为 Python 发行版。通常,我会设置几个不同的虚拟环境,以便将 Spark 处理步骤从项目的其他方面分离出来。

在开发中,我的项目将是这样的结构。

my_data_science_project
├───data
├───models
├───envs
│   ├───/spark_env/
│   └───/ml_env/
├───conf
├───notebooks
│   ├───model_explore.ipynb
│   └───eda.ipynb
└───src
    ├───data_pipeline
    │   ├───functions.py
    │   ├───processing.py
    │   └───__init__.py
    ├───app.py
    └───__init__.py

我将使用 Jupyter 笔记本来试验和调整转换,仔细检查结果,直到它们与我试图实现的相匹配。最终,一旦所有的代码都做了它应该做的事情,下一步就是打包它,并从我们将传递给 spark-submit 作业的脚本中调用转换步骤。spark-submit 作业将按照我们的指令设置和配置 spark,执行我们传递给它的程序,然后干净地释放正在使用的资源。传递给 spark-submit 的一个简单的 Python 程序可能如下所示:

"""
spark_submit_example.pyAn example of the kind of script we might want to run. The modules and functions of our package can be imported and accessed in the usual way. Command line arguments can be accessed in parsed in the usual way. We can even read in files in the usual way. In fact, its all very... usual..."""import yaml
import sys
import src.data_pipeline.processing
from src.app import get_spark def run(ss, appConfig):
    # Do some steps using the appConfig
    input = ss.read.parquet(appConfig['input'])
    output = src.data_pipeline.processing.process(input)
    output.write.parquet(appConfig['output'], mode = 'overwrite') if __name__ == "__main__":
    #Get some configuration settings
    args = sys.argv
    appConfig = args[1] with open(appConfig) as file_handler:
        appConfig = yaml.load(file_handler, Loader=yaml.Loader) # Suppose the Spark session builder is wrapped in this function.
    ss = get_spark() run(ss, appConfig)

在一个刚刚脱离孤立开发环境的集群上,让这一点顺利工作可能会很棘手。有许多活动部件。之所以有这个指南,是因为我自己也经历过这个过程,我认为如果有这个指南作为参考,会大大加快速度。

声明:我不会开始讨论如何正确配置和创建绑定到 Spark 会话的 Python 对象。这本身就是一个话题,而且假设你已经成功地做到了这一点。在这里,我们将这个任务的复杂性委托给假设的get_spark()

1。打包项目。

第一步是打包所有属于这个包的 python 文件、模块和脚本,即./src/目录的内容。这一步没什么特别的,你可以在这里阅读 setuptools 的用法。创建您的 setup.py 文件和python setup.py bdist_egg。在这一步之后,我们将有一些新的文件和目录,包括一个.egg,它在本指南中就像一个.zip。当我们稍后运行我们的 spark-submit 作业时,我们将让程序知道包含我们的项目源代码的 egg 文件,它将把这个文件发送给驱动程序和工人。当我们的应用程序启动时,传递给--py-files的任何工件(鸡蛋、拉链)的顶层都被添加到PYTHON_PATH,这就是我们如何从传递给 spark-submit 的程序中导入我们的包。

my_data_science_project
├++ setup.py      ]- python setup.py bdist_egg to produce the below.
├++ dist/                      
│   └++ my_data_science_project-0.1-py2.7.egg
└++ build/ 

2。准备一个最小的工作环境。

当用 Python 驱动程序运行我的 Spark 作业时,我喜欢使用最小化的工作环境。在原型开发和开发时,很容易以臃肿的虚拟环境告终,因此这是重新考虑是否可以进行任何修剪的有用点。如果我们运行的程序最终被表示为纯 Spark(而不是用 numpy、pandas 做任何事情),那么我发现只使用内置模块和一个 yaml 解析器就可以走得很远。

让我们继续使用 conda 创建一个新的环境,不包含任何默认安装的包(我们的 spark 作业可能不需要这些包)。

conda create \
--name spark_submit_env \
--no-default-packages \
--copy \
--prefix ./envs \
python=xx 

运行上面的命令将在./envs/中给我们一个额外的目录,其中包含我们的最小工作环境。当我们调整 Spark 程序时,我们可能会反复使用这个环境,所以我们会将它上传到 Hadoop 文件系统,而不是每次我们想要运行 Spark 作业时都要运送和分发它。我们将把我们的环境作为.zip上传到 Hadoop,这将保持一切整洁,并且我们可以告诉 spark-submit 我们已经创建了一个归档,我们希望我们的执行者能够使用--archives标志访问它。为此,首先遵循以下步骤:

  1. cd ./envs/spark_submit_env/
  2. zip -r ..spark_submit_env.zip .

现在向上移动一级,运行以下命令:

hadoop fs -copyFromLocal ./spark_submit_env.zip /hdfs/env/path/

记住这个 hdfs 路径,我们将在稍后的 spark-submit 脚本中引用它。上面运行的命令将在我们的项目目录中添加以下内容。

my_data_science_project
├───envs
│   ├───spark_env
│   ├───ml_env
│   ├++ spark_submit_env      ]- zip this up
│   └++ spark_submit_env.zip  ]- upload to hdfs
├───conf

3。打包依赖项。

准备好我们的spark_submit_env并上传到 hdfs 之后,我们现在开始准备我们的 Spark 作业所依赖的特定依赖项。这里有多种方法可以达到同样的效果,而且非常简单。这些步骤对于曾经打包过项目的任何人来说都是直观的,但是,我们确实想确保我们的spark_submit_env中有针对特定 Python 版本的正确版本的包。在一辆requirements.txt里草草写下我们的星火工作所需的包裹:

requirements.txt
pyyaml
another_package_you_love
~

然后,source activate spark_submit_env,让which pip放心地告诉我们/path/to/your/project/envs/bin/pip。现在,我们可以确信我们的 spark-submit 工作所需的包将与我们准备的环境很好地配合。我们现在可以pip install将需求中列出的依赖项放到一个指定的目录中,我们会将其压缩并传递给 Spark。

pip install -t ./dependencies -r requirements.txt

my_data_science_project    
├++ requirements.txt     ]- pip install this
├++ requirements/        ]- to here, then zip it up
├++ requirements.zip     ]- like this.

请注意,我们可以在开发过程中直接将依赖项打包为工作环境设置的一部分并进行分发,但是单独明确地列出并捆绑包依赖项会保持事情的美观和透明。我们也可以删除多余的包,这些包对 eda、可视化等很有用。,但不是授权给 Spark 的步骤所直接需要的。

4。spark 提交脚本。

这是我们将迄今为止所经历的所有步骤汇集在一起的地方。这是我们将运行来调用 Spark 的脚本,在这里我们将让它知道我们准备的 Python 环境、我们打包的项目及其依赖项。spark-submit 脚本如下所示:

#!/bin/bashPYTHON_ZIP="hdfs:hdfs/env/path/spark_submit_env.zip#pythonlib"
PYSPARK_PYTHON="./pythonlib/bin/python2.7"PROJECT_EGG=./dist/my_data_science_project-0.1-py2.7.eggSPARK_CMD = "spark-submit \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=${PYSPARK_PYTHON} \
--archives ${PYTHON27_ZIP} \
--py-files ${PROJECT_EGG},./dependencies.zip \
--master yarn \
--deploy-mode cluster \
--files ./conf/appConf.yml#appConf.yml \
spark_submit_program.py appConf.yml arg2 ..."eval ${SPARK_CMD}

我们来分析一下。

PYTHON_ZIP="hdfs:hdfs/env/path/spark_submit_env.zip#pythonlib"

在这里,我们声明变量PYTHON_ZIP,并为它分配我们在步骤 2 中上传 Python 环境的文件 url。#pythonlib后缀是一个小技巧,允许我们在 YARN 上运行 Spark 时指定名称别名。我们可以用它为传递给--py-files--archives的任何东西指定一个文件名别名。这个别名是 Spark 应用程序将看到的实际名称。你可以在这里阅读更多。

--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=${PYSPARK_PYTHON}

这里我们设置环境变量 PYSPARK_PYTHON 指向我们打包到 spark_submit_env 中的 PYTHON 可执行文件。搜索以上这里阅读更多。

--archives ${PYTHON_ZIP}

传递给--archives get 的任何东西都被解压缩到每个执行器的工作目录中,所以传递压缩环境的 hdfs url 就是这些执行器访问我们准备的环境的二进制文件和模块的方式。

--files ./conf/appConf.yml#appConf.yml

传递给--files的单个文件也被复制到执行器的工作目录中,同样,我们可以使用/path/to/file#alias语法来命名它们。例如,我们可以传递一个 yaml 文件由驱动程序解析,如spark_submit_example.py所示。

spark_submit_example.py appConf.yml arg2 arg3 ...

在指定了我们的[OPTIONS]之后,我们传递由驱动程序执行的实际 Python 文件:spark_submit_example.py,以及程序的任何命令行参数,它们可以用通常的方式进行解析。例如,第一个参数可能是一个 yaml 文件appConf.yml,可能会有后续的参数为程序提供更多的上下文。

跑跑跑。

我们终于可以执行上面描述的 spark-submit 脚本了:

./spark_submit_script.sh

最后提醒一句,当使用虚拟环境时,要小心对PATH的修改。我以前在尝试 spark-submit 时遇到过问题,却不记得停用某个特定的虚拟环境。

如果你已经做到了这一步,我希望这是因为你发现本指南的内容很有帮助——我很想知道是不是这样。如果有人有足够的时间提出要求,我会非常乐意详细说明任何细节。我非常乐于接受反馈。因此,如果你发现不一致或错误,请大声喊出来;我会立即删除这篇文章,并删除它曾经存在过的所有痕迹,以及我的帐户和我的 LinkedIn。我将离开不适宜居住的环境象形图,虽然那花了我很长时间。

延伸阅读

当您对本指南中介绍的步骤有信心时,您可能想看看以下资源:

如何使用良好的软件工程实践设置 Python 和 Spark 开发环境

建筑生产 PySpark 岗位

编写生产级 PySpark 作业的最佳实践

对专业仪表板的建议

原文:https://towardsdatascience.com/suggestions-for-professional-dashboards-b4c74b5b1b33?source=collection_archive---------54-----------------------

办公时间

如何为企业高管构建有效的数据可视化

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

卢卡斯·布拉塞克Unsplash 上拍摄

在过去的几年中,随着大量数据的广泛可访问性,从可用信息中获得洞察力已经成为任何决策过程中的重要步骤。

特别是当数据是大数据时,为了更好地理解发生了什么,你需要组织、总结和可视化信息。

但是,即使有了可视化,如果你不遵循一些简单的准则来使你的仪表板有效,你所有的努力都可能是徒劳的。

当然,当你设计一个新的仪表板时,你的分析的目的和目标是首先要考虑的事情。

这就是为什么在本文中,我想关注业务主管的专业仪表板,目的是以一种有效的方式展示业务在销售、成本、收入、客户以及对你的一线经理来说重要的任何方面的进展。

了解你的受众

在定义了目的和目标之后,你不仅需要关注管理者在公司中扮演的角色,还要关注他们的偏好和品味。

例如,你需要知道:

  • 他们的关注点是什么,最重要的是,他们现在的关注点是什么?
  • 将收到仪表板的经理们可能会喜欢数据的花哨和现代的表示(蒸汽图、旭日图、弦图等)吗?),还是配条形图比较好?
  • 他们喜欢桌子吗?
  • 他们喜欢收到 PDF 还是 web 仪表板的链接?

建立一个原型

没有什么比努力工作而*哑火更糟糕的了。*此外,一旦你建立了一个仪表板,你会觉得非常保护它,你将很难接受任何负面的评论。

因此,在你对一个潜在的仪表板工作数周之前,注意每一个细节,最好先建立一个原型,并与同事一起测试。

原型应再现仪表板的主要功能,在大多数情况下,它可能包含样本但现实的数据。阅读报告的人应该对报告的主题有一个大致的概念,但不应该是超级专家。

在这个阶段,倾听、评估和应用建议会更容易、更快。根据我的经验,一些最受赞赏的分析或特性可以很容易地从这些评论中得到。

保持简单

根据我的经验,高层管理人员没有足够的时间,他们的注意力通常集中在特定的项目或主题上。

因此,您需要记住,您想要传达的信息应该能够从您正在构建的仪表板中轻松理解。

试图在一个仪表板中容纳大量信息可能会导致混乱。所以,最好是去掉多余的部分。

可以在仪表板中引用对特定主题的关注,并链接到其他仪表板或其他页面。

你的经理可能没有足够的时间去理解他们以前没有见过的奇特图表,所以你可能应该坚持使用他们已经知道的经典图表(条形图、散点图、折线图等)。).但同样,这取决于经理。

移除多余部分

当你不得不去除多余的时候,有一些常见的疑点需要寻找。

  • :它们是必要的还是图表有足够的信息?通常在条形图中(条上有标签),轴是可消耗的,而在散点图中,轴是必需的。
  • 价值观:你能调整你的价值观以避免大数字吗?小数值是必要的吗?20,000,000 比 20bln 差得多,在有 4 或 5 个有效数字的数字后添加小数点通常是多余的。
  • **附加信息。**很可能,你需要在你的仪表盘上添加一些信息(如何阅读图表,如何计算一个指标的细节,等等。).我的建议是在主仪表板上只保留相关的笔记,尽可能把它们放到脚注、附录或隐藏层中。无论如何,不要写太多,这不是教科书。
  • 双轴。通常,双轴用于表示同一图表中的两条信息。在我看来,人们应该只使用双轴来显示相关性的存在(或不存在)。

指标和关键绩效指标

将最重要的指标和 KPI 用大字体添加到仪表板的最上方可能会很有用。这是他们开始阅读报告的地方,因此,这也是他们寻找最重要数字的地方。

惊喜

增加一些惊喜。这可能是经理们没有预料到的与图表的互动。

如果您的可视化工具具有这种功能,您可以在单击仪表板的特定点时添加额外的分析或焦点。这也是从仪表板中移除分析并按需显示的一种方式。

保持清洁

有些事情会造成混乱:

  • 在同一个仪表板中使用多种字体大小。可能有一些例外,但它们应该是合理的(例如在仪表板顶部代表 KPI 的大数字);
  • 在同一个仪表板中使用多种字体颜色。例外也必须有正当理由;
  • 未对齐的形状;
  • 使用相同类型的图表来表示不同的事物。

也许你没有意识到,但我向你保证,所有这些事情都会让读者感到不舒服(甚至他们中的大多数人都不知道这种不舒服来自哪里)。

字体大小应该足够大,以便从他们用来访问仪表板的设备上容易看到。疯狂地排列图表和测量尺寸。

如果你有品牌识别指南(规定了你可以使用哪种颜色和哪种字体),请严格遵守。

此外,如果您的经理已经收到了来自其他部门的仪表板,尽量保持格式统一,以避免混乱。例如,如果您的经理习惯于将过滤器放在左侧,将它们移到另一侧是不利的(他们会失去寻找过滤器的时间和耐心)。

保持速度

好了,现在您已经有了一个通过了强大的“走廊测试”的控制面板,但是当您打开它时,需要几分钟来加载所有的图表。对经理来说太多了。我建议停留在 10 秒以下。

有很多方法可以减少加载时间,有些取决于你使用的可视化工具(Tableau,Power BI 等)。).但大多数都很笼统:

  1. 首先,如果您的仪表板包含来自许多来源的数据,这可能会导致刷新时间成倍增加。所以,试着理解你所有的资源是否都是必要的(再次去掉多余的)
  2. 您的仪表板的大部分将由聚集和过滤数据组成。在这种情况下,您可以在数据库中创建只包含有用数据的新表,并保留原始表(包含所有数据)用于探索性数据分析。

有时,数据源可以混合在一起,这样可以节省时间。

此外,如果您的数据是与时间相关的,那么可能需要过滤掉一些旧的日期。您真的需要过去 3 年的每日数据吗?或者您可以满足于过去 3 个月的每日数据和过去的月末数据?

总结

一个精心设计和量身定制的仪表板可以让你的受众做出正确的决定,或者被忽略掉大量的辛苦工作。

在本文中,我重点介绍了面向高管的专业仪表板,并分享了在构建新的可视化时需要记住的一些事情:

  • 一个尺寸不能适合所有人,所以最好把重点放在你的主要读者上;
  • 造一个原型,和尽可能多的人一起测试;
  • 扔掉你不需要的,让你真正需要的可见;
  • 注意细节,它们会有所不同。

遵循这个建议,你的读者会喜欢你的仪表盘!

自杀是一个会传染的想法:你能做什么

原文:https://towardsdatascience.com/suicide-is-almost-as-contagious-as-covid-19-we-can-change-that-through-social-media-c0bb573a9366?source=collection_archive---------36-----------------------

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

丹·梅耶斯在 Upsplash.com拍摄的照片

上周一,2020 年 8 月 3 日,思科与 SAVE 合作,发布了 https://reportingonsuicide.cisco.com/的公测版。这是一个关于我们如何利用数据科学拯救生命的故事,为什么这个发布会如此重要,以及你如何通过改变你交流精神疾病的方式来帮助防止自杀。也是我的故事,我从来没有公开讲过。

上周四,8 月 6 日,是一个非常亲密的朋友自杀五周年纪念日。Erika 和我穿越了三大洲,从一架飞机上跳下,设计了定制的配对小指戒指,甚至一起创作了一本书。我们(几乎)无话不谈,并在谷歌上列出了我们将要进行的所有冒险。我们真的有一个共度余生的计划。

然后,在她 30 岁生日的前一个月,她自杀了。这让我崩溃了。对于那些因自杀而失去亲人的幸存者来说,这是很常见的,在接下来的 4 年里,我一直为她的死而自责。

2019 年,艾瑞卡的父亲比尔·艾尔金顿(Bill Elkington)和他在艾瑞卡去世后介绍给我的心理学家彼得·科姆里帮助我理解了我们谈论精神疾病和自杀的方式往往会影响人们是否寻求他们需要的治疗。或者,如果像艾丽卡那样,他们如此有效地掩盖自己的疾病,以至于威胁到生命。

丹·赖登伯格博士的一生我是通过 https://reportingonsuicide.org/而熟悉他的工作的,受到他的启发,我给丹博士打了个电话,问他是否愿意一起努力使他的研究民主化。很明显,即使科学是可靠的,并得到包括疾病预防控制中心在内的有眼光的组织的支持,指南的采用水平还是很低——太低了。丹博士接受了我的邀请,今天我很荣幸地称他为同事。基于他和他的合作者的发现,世卫组织将报道自杀确定为预防自杀的 7 个优先领域之一,并为媒体专业人员创建了一个资源库。

2019 年末,Thomas Niederkrotenthaler 博士发表了令人震惊的研究:在名人自杀的报道不符合世卫组织准则的情况下,传染效应将全国自杀率提高了高达 13%。尽管彼得已经意识到自杀的传染效应——根据统计,艾丽卡的自杀使我死于自杀的可能性增加了 5%—50 %,彼得估计我的个人风险水平接近 75%——但我不知道传染效应如此之大。当我试图更好地理解传染效应时,丹博士告诉我,总的来说,其他人是否会因为另一个人(无论是否是名人)的自杀而死亡的风险约为 3-5%。为了更好地理解这个数字,新冠肺炎的传染效应是 5.7%

我不是媒体专业人士,很可能你也不是。但是,越来越多的人每天转向社交媒体获取新闻,这模糊了内容创作者和消费者之间的界限。这意味着指导方针不仅适用于专业人士,也适用于我们这些业余爱好者(他们在脸书、推特、LinkedIn 等网站上发帖)。)也是。好消息是它们相对较短:

  1. 不要讨论、描述或描绘某人自杀的方法和地点。这样做已经导致了无数次自杀事件的增加——以同样的方式不成比例地增加。
  2. 不要用“自杀”这个侮辱性的词汇。人们犯罪,而不是生病。相反,说“死于自杀”或“自杀”
  3. 不要分享遗书的内容。它会把认同其内容的人推向自杀,而不是寻求治疗。
  4. 不要过分简化或推测自杀的原因。我们仍然没有完全理解自杀和精神疾病,但我们知道自杀从来都不简单。
  5. 不要美化、浪漫化或煽情自杀。如果你觉得自杀很迷人、浪漫或耸人听闻,请向心理健康专家寻求帮助。
  6. 请记住,自杀的话题可能会引发任何人与你交谈或阅读你的社交媒体帖子。确保你的帖子引用了帮助热线。例如,在美国,国家自杀预防生命线的号码是 1–800–273–8255;危机短信热线可以通过给家里发短信联系到 741741(美国)、686868(加拿大)或 85258(英国)。

基于这些令人难以置信的研究,我和我的合作伙伴 Annie Ying 博士(人工智能博士)制定了以下计划:创建一个类似于语法检查器的工具,用户可以在发布前/发布前粘贴文本,突出显示任何不符合指南的单词或短语,同时提供教育和建议。

2019 年早些时候,我建立了思科的数据科学和 AI for Good 计划,作为思科人无偿回报的渠道,对 100 多名自愿为预防自杀贡献时间的人表示感谢。这份名单包括执行发起人首席数据官 Shanthi Iyer 和数据科学负责人 Sanjiv Patel,没有他们,我们的全球平台愿景所需的工具和基础设施将成为巨大的障碍。

志愿者加入后,我们的第一步是数据标记,因为不存在我们可以从中获取信息的存储库。数据科学家 Riley Hun 建立了一个基于 API 的数据管道。建筑师 Edgar Murillo 随后创建了一个易于使用的 UI,即使非技术志愿者也可以阅读媒体报道,并标记哪些文本违反了哪些准则。许多许多个夜晚和周末之后,我们已经标记了将近 2000 篇文章。我想借此机会向我们的顶级贡献者大声欢呼:丹尼斯·切斯基(294 篇文章)、罗斯·普菲尔(242 篇)、泽西·基梅尔(165 篇)、阿尔特米奥·里曼多(119 篇)、佩里·梅斯(107 篇)、乔迪·麦克米伦(95 篇)、梅根·理查森(86 篇)、斯科特·埃利奥特(79 篇)、加里·班塔德(65 篇)、安东尼·纳西亚特卡(61 篇)、克里斯·多兰(54 篇)和林恩·考夫兰(50 篇)。

我们惊恐地发现,我们标记的文章中只有 3%遵守了所有的准则。

利用标记的数据,数据科学家 Artemio Rimando 和 Shima Gerani 用 Python 构建了基于字符串匹配的数据科学模型,而产品经理 Raphael Tissot 则构建了网站和用户体验。这是一个历时数月的过程,丹博士和他的团队与我们密切合作,以确保该工具的功能符合他的标准。

现在,公开测试版已经上线,该团队正在努力提高该工具的性能(在我撰写本文时,Shima 正在编写代码),并根据我们的媒体和学术合作伙伴的意见构建产品开发路线图,以最大限度地提高指南的采用率。

至于你,亲爱的读者,请采纳这些指导方针。T2 将会帮助拯救生命。

用数据科学洞察自杀预防

原文:https://towardsdatascience.com/suicide-prevention-insights-with-data-science-f33131a3c3d0?source=collection_archive---------36-----------------------

心理健康

宗教是强有力的抗抑郁药

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

我相信我第一次经历强烈的情感冲击是在大约 11 岁的时候,当时我发现我认识的、钦佩的、被认为成功和幸福的人突然决定以自杀来结束自己的生命。短短几年内,我的两个童年好友的爸爸就发生了这样的事情。这两个人看起来都像慈爱的父母和模范公民,所以这个消息对我和他们各自的社区来说都是一个巨大的冲击。同样的悲剧故事在我青少年时期的三个主要英雄身上重演——柯特·科本、罗宾·威廉姆斯和安东尼·鲍代恩。这些年来,我度过了无数个不眠之夜,试图找出是什么可能将我所热爱和钦佩的人推向如此极端,这些人乍一看似乎拥有成功和幸福的生活。所有这些没有答案的问题可能会折磨任何近距离接触过亲密朋友、家人或明星偶像令人震惊的自杀事件的人,在这些问题的驱使下,我决定与我的同学布莱恩·斯雷布雷尼克合作,尝试用数据科学来研究自杀之谜。

这个项目的目标是利用 200 个国家的一些社会经济和心理健康指标建立一个机器学习监督的回归模型,并试图确定哪些因素可能与国家自杀率有统计上的显著相关性。

在对之前在这个问题上所做的工作做了一些研究后,我们收集了以下自变量的数据,我们认为这些数据将有助于建立我们的模型。我们使用了 2016 年的数据。

  1. 抑郁率
  2. 精神分裂症发病率
  3. 焦虑率
  4. 躁郁症
  5. 饮食失调
  6. 酒精使用障碍
  7. 药物使用障碍
  8. GDP
  9. 人均卫生支出
  10. 失业率
  11. 居住在拥有> 10 万人口的城市的人口比例
  12. 上网人口的百分比
  13. 信教人口百分比的分类数据

**注:如果您对我们如何构建和优化模型的技术细节不感兴趣,请跳至“模型总结和最终见解及结论”**部分,了解我们调查结果的详细总结。

准备数据并检查多重共线性

首先,我们从世界卫生组织 API 和其他几个网站收集了 2016 年的年度社会经济数据。在清理所有数据并将其合并到一个 pd 中之后。数据框架我们使用 SeaBorn 关联热图检查了独立变量多重共线性:

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

使用 sns.heatmap(final_table.corr(),center = 0)的共线性热图

热图告诉我们,双相情感障碍%与其他三种精神健康问题有很高的相关性,因此我们决定在运行模型之前删除该变量,以避免由严重的多重共线性引起的额外噪声。

检查每个独立变量和自杀率之间的线性关系

接下来,我们创建了每个自变量与因变量自杀率相关性的成对散点图:

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

使用 seaborn.pairplot()绘制散点图对

从上面的图表中我们可以看到,在抑郁、焦虑、精神分裂症、酗酒的比率和一个国家的宗教程度之间存在某种程度上的线性关系。所以,我们最初的期望是,我们的机器学习模型应该给这些类别分配更多的权重。

缩放我们的独立变量,并在模型中引入变量组合和多项式

由于我们的一些自变量以千为单位,而另一些以百分比为单位,因此我们决定调整所有自变量,以确保我们的模型不会为某些变量分配过大的系数。

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

使用 sklearn.preprocessing.scale 缩放变量

下一步是通过二次多项式函数引入交互项,以帮助我们的模型进行特征选择,提高其最终精度,并降低均方根误差。下面的关联热图有助于我们识别所有相关的新变量:

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

对每个回归模型应用 RFE 和交叉验证,以选择最小化 RMSE 的最佳模型

既然我们的数据已经清理、缩放和预处理,现在是最后一步的时候了——根据我们的训练数据训练我们的机器学习模型,以提高其对测试数据的预测准确性。我们使用三个模型优化子步骤来创建我们自己的定制 GridSearch 函数:

  1. 我们使用下面的函数运行线性、套索和岭回归,以确定哪一个生成的模型误差最小。对于这个特定的数据集,我们发现岭回归有最好的结果。我们对训练数据-测试数据比率采用了 80–20 的比例。
  2. 我们使用 **RFE(递归特征消除)**将所有独立变量逐个输入每个模型,并选择最小化 RMSE 的变量数量和组合。
  3. 我们使用了 K 倍交叉验证来优化每个模型在测试数据上准确预测的能力,这是它以前从未见过的。(代码如下)

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

我们的定制网格搜索算法

下图显示了我们的 RMSE 函数,以及我们如何训练我们的模型来挑选产生最低误差的独立变量的数量:

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

选择了 22 个变量,RMSE = 3.54

模型总结和最终见解和结论

现在大部分繁重的工作已经完成,是时候分析我们的结果了。首先,我们用训练数据与测试数据的模型统计绘制散点图,以确保没有太多的训练数据偏差或过度拟合。正如我们从下图中看到的,测试和训练样本的 RMSE、z 分数和 R 平方非常相似,这正是我们所希望的。0.66 的 R_squared 分数并不惊人,但是考虑到我们只有大约 150-200 个例子(国家),我们对模型的表现相当满意。我们相信,如果我们能够将 500 多个观察值输入到我们的训练集中,模型的预测准确性将会显著提高。

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

基于测试数据和训练数据的模型性能

我们还想看看实际的独立变量及其系数,并试图从它们的分布中得出一些见解和结论。以下是最终模型方程和每个独立变量的条形图及其在最终模型中的权重:

自杀率 = 10.28 + 3.58* 抑郁症 + 2.74* 酒精 _ 使用—1.87 Rel _ 高 — 2.24 精神分裂症抑郁症 + 0.65* 精神分裂症 health _ spend _ perca+1.23 精神分裂症 Rel_Low — 1.56 进食障碍 焦虑 Rel_High + 1.67 药物 _ 使用****Unem _ rate+1.58 药物 _ 使用 GDP — 2.48 抑郁 Rel_High — 1.76 抑郁 Rel_Low — 0.92* 酒精 _ 使用 + 0.71* 酒精 _ 使用 GDP【T44**

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

结论:

根据下面的方程系数和柱状图,我们可以假设以下假设,并可以进一步检验:

  1. 倾向于增加一个国家自杀率的变量:
  • 抑郁率
  • 酒精使用障碍率
  • 城市人口比例结合与低水平的宗教信仰
  • 城市人口百分比结合高酒精使用
  • 精神分裂症的发病率与低水平的宗教信仰相结合
  • 吸毒紊乱与高失业率结合在一起
  • 与国内生产总值水平相结合的药物使用

2。倾向于降低一个国家自杀率的变量:

  • 人口的高度宗教性
  • 抑郁率结合与高宗教信仰
  • 焦虑率结合与高度宗教性
  • 酒精使用障碍率结合与高度宗教性
  • 药物使用率结合与高度宗教性
  • 饮食失调率与酒精使用率相结合
  • 饮食失调率与药物使用率相结合

调查一个国家的宗教信仰和自杀率之间的反比关系

当谈到对自杀率的影响时,我很好奇也很惊讶地发现我们的模型很重视一个国家的宗教程度。如果我们仔细观察上面的系数图,我们可以看到,大多数似乎对高自杀率有很强直接影响的特征,如抑郁症、酗酒和精神分裂症,在宗教人口高度密集的国家往往会失去它们的负面影响**。这一有趣的现象在下面的两个图表中得到了证明:**

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

大多数高自杀率的国家都是宗教人口不到 50%的国家

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

宗教程度最低的国家 AVG 自杀率要高得多

最后的个人想法

尽管我们没有分析足够的数据来得出任何有力的结论,但我们的发现促使我进一步思考这个话题,并试图提出有效的解释,说明宗教如何能够否定一些似乎导致高自杀率的因素的影响,如抑郁、焦虑和吸毒。我对患有抑郁症和自杀想法的人的主要症状做了一些研究,如下所列:

  • 对未来有一种深深的绝望感,对情况会有所改善不抱太大希望
  • 孤独感和逃避朋友或社交活动的倾向
  • 一种的感觉情感空虚、缺乏爱或人际关系
  • 增加使用药物和/或酒精
  • 经历了最近的创伤或生活危机

宗教是如何对抗这些症状,成为精神上的抗抑郁药物的?

  • 宗教经常围绕着信仰和希望
  • 宗教经常试图赋予苦难以意义,并试图教导人们如何克服个人创伤(解决创伤的痛苦)
  • 宗教机构倾向于提供一个支持系统和一种社区感(解决孤独感和反社会行为)
  • 许多宗教对毒品和酒精持保守观点(解决高毒品/酒精使用障碍)
  • 许多宗教教导说上帝是爱上帝无条件地爱所有的生命(解决爱的缺乏和填补情感的空虚)

因此,有意或无意地,宗教似乎充当了一种强效抗抑郁药物,它可以填补许多患有抑郁症和有自杀想法的人似乎会经历的情感和社会空白。对我个人来说,这是我们项目中最有趣的发现,我可以有把握地说,我将带着在这次调查中学到的许多其他宝贵经验,并试图在未来用它们来帮助有需要的人。我真诚地希望这篇文章也能让世界各地的许多人受益,他们能以这样或那样的方式从我们的发现中受益!和平和爱给所有的生命❤

图形数据库技术在时空数据分析中的适用性

原文:https://towardsdatascience.com/suitability-of-graph-database-technology-for-the-analysis-of-spatio-temporal-data-6167dba64be8?source=collection_archive---------39-----------------------

图形数据库 JanusGraph 和 TigerGraph 与行业标准 PostgreSQL 相比如何?

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

照片由亨利·佩克斯Unsplash 上拍摄

介绍

时空数据的收集在今天已经司空见惯,主要的例子是来自移动设备或社交平台的用户生成数据、来自静态或移动传感器的传感器数据流、卫星或遥感数据。为了理解这些海量的异构数据,必须应用各种聚合和融合步骤来实现语义数据丰富,以便随后在增值服务中使用。然而,实现这些丰富步骤通常依赖于稳定且高度可扩展的数据处理和存储基础设施。然而,随着时空数据量的不断增加,关系数据库技术(即使有时空数据的特殊对象关系扩展)也达到了极限,目前通常被称为“不仅是 SQL”(NoSQL)数据库的新范例被尝试作为更具可扩展性的替代,例如 MongoDB + GeoJSON 或 GeoMesa。

然而,尽管今天许多类别的数据被解释为图结构,但传统的关系数据库仍然缺乏有效地建模和操作这种结构的体系结构和高级查询语言。图形数据库被设计成将数据表示为顶点和边上的属性。它们通常是无模式的(即,没有固定的数据结构),并且它们的属性被描述为简单的键值对。因此,图数据库的主要优势在于它们擅长复杂的连接式查询,而关系数据库对于大型表的效率是出了名的低。相比之下,当从局部子图转移到完整的图聚集查询时,图数据库往往表现不佳,而关系数据库技术在这方面发挥了它的优势。在商业 ML/AI 和自然语言处理的行列中,Gartner 将 graph analytics 确定为 2019 年 T4 十大数据分析趋势之一。

这项研究调查了哪种数据库技术最适合在真实环境下的典型数据操作任务中处理大规模时空数据。特别是,调查将涵盖开源图形数据库 JanusGraph (与 Cassandra 和 ElasticSearch)、开源对象关系数据库系统 PostgreSQL 和企业级图形分析平台 TigerGraph 的查询速度、可用查询语言的表达能力和计算需求。

我们的贡献可以总结如下:

  • 将两个特征数据集建模并导入三个最先进的数据库,
  • 使用各种分析对它们进行严格的基准测试,这些分析公平地代表了数据集通常会经历的查询和数据操作的类型,并且
  • 通过调查 JanusGraph 和 TigerGraph 的特定图形查询语言实现来比较它们的适用性。

三个数据库

PostgreSQL 被选为我们的控制数据库,因为它在与 PostGIS 结合使用时具有业内公认的时空数据适用性。我们选择了两个具有不同底层架构的图形数据库,即 Java 和 C++,并比较了它们相对于我们的控制数据库以及相对于彼此的表现。尽管在数据库中有这种选择,但还有其他值得注意的提及,如 GeoMesaTerraLib 被证明是时空数据分析的合适替代方法。

这两个数据集

为了进行公正和权威的评估,一方面,我们使用一个真实世界数据集进行基准测试。另一方面,我们使用提供更多控制的模拟数据集来测试所用数据库技术的限制。对于真实世界的数据,Yelp 是一个国际性的商业目录服务和评论论坛。“ Yelp 数据集”是 Yelp 的业务、评论和用户数据的当前子集,包括两个国家的 10 个大都市地区的时空数据,约有 200,000 家企业和 660 万条评论。它在一年一度的 Yelp 挑战赛中提供学术用途,用于各种数据分析和发现任务。

相比之下,瑞典于默奥大学的救护车响应模拟数据集提供了对场景的更多控制——给定一些医院资源,如调度中心和救护车,它模拟救护车如何响应紧急呼叫。数据集记录时空属性,例如响应生命周期内的时间间隔以及响应期间资源的来源和目的地。还记录了关于紧急事件本身的其他技术属性。总之,我们对两个数据集进行了评估,这两个数据集具有不同的时空属性表示、附加属性的复杂性以及总大小。

基准测试应用程序

为了进行基准测试,我们设计了一个名为 Providentia 的时空数据 web 应用程序。它用于对管道中的分析任务进行排队,在管道上运行每个基准,测量服务器性能,并显示累积的结果。在图 1 中说明了架构和每种技术如何通信。使用 Docker 将数据库容器化。

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

图 1 。普罗维登西亚的建筑

我们使用普通 Python 后端的第一个动机是让基准测试的分析设置更现实。另一个优点是可以使用 Flask 框架轻松快速地设计和部署简单的 REST API。Angular 被主观地选为前端框架,因为它允许快速的前端 web 开发。所有基准测试结果都存储在 PostgreSQL 的一个单独的数据库中。

不幸的是,JanusGraph 有一些特定于 Java 的特性,当使用 Python 中的嵌入式 Gremlin 时,这些特性增加了限制。当试图利用混合索引搜索谓词(如空间查询)时,局限性在于只能通过 Java 或其超集语言来实现。解决这个问题的方法是使用 Gremlin Translator,它将 Gremlin 查询作为一个字符串,并在服务器端对其进行解释。

你可以在 GitHub 库上查看 Providentia 的代码。

分析和设置

内核表示用于数据分析的某种用户故事,特别是以将应用于相应查询的一些时空约束为特征。这些内核中的每一个都将进行 30 次基准测试,因此在比较响应时间时可以考虑平均值和标准偏差。总共有 6 个内核,每个数据集运行 3 个内核。

所有实验都在表 1 中详述的两个设置上运行。使用这些设置可以考虑这些技术如何利用多个内核并在不同的存储限制下执行。每个数据库都是作为单点 e 运行的

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

表 1 。用于测试数据库性能的两台机器的规格。设置 1 使用 AMD 锐龙 5 2600,而设置 2 是一个 AWS C5 . 4x 大型实例,采用英特尔至强白金 8000 系列 CPU。

结果和讨论

医疗响应数据集

在图 2 的中,可以看到 JanusGraph 在响应时间方面远远优于其他两种数据库技术。这是关于医疗响应数据集的所有三个查询中的特征趋势。另一个趋势是 TigerGraph 和 PostgreSQL 在 TigerGraph 响应最快的地方表现接近。

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

**图二。**使用医疗响应数据集为内核设置 1 和 2 的数据库响应时间:“优先级 1 表示响应时间”。误差线显示标准偏差。

与图 2 中的性能相比,每个数据库似乎表现得更加一致(参见图 3** ),偏差更小。JanusGraph 似乎在三个容器(JanusGraph、Cassandra 和 ElasticSearch)之间有某种一致的开销,这似乎会影响响应时间。**

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

**图 3。**使用医疗响应数据集为内核设置 1 和 2 的数据库响应时间:“转移患者的第二资源”。误差线显示标准偏差。

这只是一个时态查询,从图 4 中可以看出,TigerGraph 和 PostgreSQL 的性能比前两个查询更加相似。这表明 TigerGraph 比 PostgreSQL 在查询中因约束而增加的复杂性方面表现得更好。

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

**图 4。**使用医疗响应数据集为内核设置 1 和 2 的数据库响应时间(TigerGraph 和 PostgreSQL 低于 10ms):“长响应计数”。误差线显示标准偏差。

Yelp 数据集

图 5 显示 PostgreSQL 的响应时间呈线性增长,而 JanusGraph 和 TigerGraph 对于不断增长的数据量保持水平。由于这个查询的复杂性,图形数据库优于关系数据库也就不足为奇了。TigerGraph 在查询响应时间方面优于 PostgreSQL 和 JanusGraph,并且表现出非常高的一致性,因为平均值周围几乎没有标准偏差。

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

**图 5。**内核设置 1 和设置 2 的不同百分比数据集的数据库响应时间:“Kate’s Restaurant Recommendation”。误差线显示标准偏差。

图 6 显示,与其他两种数据库技术相比,JanusGraph 表现不佳,偏离平均值很高。PostgreSQL 对于这个内核是水平扩展的,这很可能是因为查询是三个内核中最简单的一个。尽管如此,TigerGraph 的表现超过了这两者。

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

**图六。**内核设置 1 和 2 的不同百分比数据集的数据库响应时间:“2018 年凤凰城趋势回顾”。误差线显示标准偏差。

图 7 显示了两种图形数据库技术都优于 PostgreSQL,因为 PostgreSQL 显示了线性增长,正如图 5 中的所示。对于在 13%的数据集上的实验,JanusGraph 显示了围绕平均值的大量偏差。这可能是由于 JanusGraph 实现的所有移动部分及其多级缓存实现在这种规模的数据集上表现不佳。

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

**图 7。**内核设置 1 和 2 的不同百分比数据集的数据库响应时间:“根据朋友的情绪对拉斯维加斯进行排名”。误差线显示标准偏差。

内存消耗

每个数据库的内存消耗(空闲时)在图 8 中进行了说明,并清楚地显示了 TigerGraph 和 JanusGraph 的图形数据库技术的高成本,分别使用大约 2 GiB 和 10 GiB。PostgreSQL 只使用大约 9 MiB,这比图形数据库要轻得多。

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

**图 8。**每个数据集的数据库内存使用情况。医疗响应数据集有 1.5 Mb 大。

用于 JanusGraph 的技术都运行在 JVM 上,并且在给定 32 GB 可用内存的情况下,允许 JVM 的垃圾收集器偶尔运行。JanusGraph 使用的大部分内存是 ElasticSearch、Cassandra 和 JanusGraph 的缓存,每个都存储一个独立的缓存。内存中的大部分波动来自 JanusGraph 容器,这从容器运行的那一刻起就发生了。这种缓存可能会受到配置的限制,但是我们的结果来自于一个无限制的缓存设置。

TigerGraph 和 PostgreSQL 的内存保持不变(因为它们的内存上限和下限在 MiB 差异范围内),因为这两个数据库的大部分是用 C 或 C++编写的,这需要手动管理内存。值得注意的是,虽然 JanusGraph 使用大量内存,但还有其他遵循 Apache TinkerPop 标准的图形数据库变体,它们声称在内存方面更有效,如 Neo4j 和 OrientDB。Neo4j 和 OrientDB 的内存消耗也是可配置的,但由于 JVM 的原因,可能仍然会使用多个 GiB 的内存。

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

美国宇航局在 Unsplash 拍摄的照片

结论

在本文中,我们分析和比较了三种数据库技术在处理互联时空数据方面的响应时间。比较的技术是两种开源数据库技术 PostgreSQL 和 JanusGraph,以及一种企业级技术 TigerGraph。结果清楚地显示了关系模型的线性增长,而图形数据库解决方案的水平扩展更大。这主要是因为在查询大量数据时,NoSQL 数据库的可伸缩性比传统的关系模型有所提高。通过采用一组时空查询来评估这三个系统,这些时空查询类似于在分析 Yelp 挑战数据集和救护车模拟数据集等数据集中的数据时在真实世界场景中会发现的那些时空查询。

特别地,我们的结果证明,对于时空数据,在我们实验中使用的所有内核中,图数据库技术都优于 PostgreSQL。这个结果部分是由于内核由于数据的互连性质而产生复杂的查询。与关系实现产生的多连接样式的查询相比,该数据集产生了密集的图形,图形数据库能够在其上执行有效的遍历。时空多维方面在所有数据库中都得到了很好的支持,这从具有这种性质的约束的查询的响应时间可以明显看出。

这是我与布林克·范德梅尔韦和沃尔夫·蒂洛·巴尔克合写的论文的一个更简洁的版本。在 MDPI 可以免费找到完整的参考文献列表和数据库查询。

如果你有兴趣看我的其他作品,那就看看我的个人页面。同样,有网页可以找到更多关于我的合著者布林克沃尔夫-蒂洛的信息。

如果您需要工具来清理 Yelp 数据集或开始使用 TigerGraph 或 Neo4j 的 Yelp 数据集,请查看以下存储库:

9 使用 LDA 和主题建模的冠状病毒研究趋势

原文:https://towardsdatascience.com/summarising-the-latest-research-on-coronavirus-with-nlp-and-topic-modelling-28b867ad9860?source=collection_archive---------18-----------------------

受到所有公开的新冠肺炎印刷前研究的启发,我想应用一些数据科学技能,看看是否有任何趋势正在出现。有一些惊喜。

正如目前正在蔓延的冠状病毒疫情一样可怕,观察世界各地的学术和研究团体如何迅速开始了解这种病毒及其潜在影响是令人着迷的。

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

冠状病毒主题造型封面图片。作者插图

正因为如此,许多有趣的预印本学术论文迅速问世。我鼓励你谨慎阅读预印本,因为所做的声明未经证实,但我想看看这些论文讨论的主题和结论中是否有任何可辨别的模式。

因此,我根据来自Elsevier Novel Coronavirus Information Center的列表手动抓取了这些预印论文的结果和见解部分,并使用流行的 Gensim 库使用潜在狄利克雷分配(LDA)做了一些主题建模。如果你想亲自尝试,我会在这篇文章的底部附上 GitHub 链接。

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

模型困惑和主题一致性提供了一个方便的方法来判断一个给定的主题模型有多好。鸣谢:作者截图

在对 75 个预印件的样本大小训练多个 LDA 模型之后,32 个主题看起来是最佳的(可能 20 个主题是 ok ),一致性值为 0.54。然后,我选择了最突出和最令人兴奋的主题关键词集群,推断出中心观点,并为每个关键词找到最具代表性的文章。

这篇文章绝不是科学评论,而是我想分享的一个小实验。也许我们可以使用这样的工具更快地从多个来源识别模式,并促进合作。

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

结果。作者插图

9 个突出的冠状病毒课题及其最具代表性的论文

1.CT 扫描似乎有希望筛查新冠肺炎

**关键词:**肺炎,确认,证据,致死率,北京,焦点,大,预测,努力,传播

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

断层扫描。作者插图

尽管该病毒已被证明具有高度传染性,并可自发引起双肺感染,但临床证据显示,武汉病毒性肺炎的病死率较低。CT 成像在武汉病毒性肺炎的筛查、诊断、隔离方案、治疗、管理或预后中起着至关重要的作用。

最具代表性论文: 武汉病毒性肺炎的临床和影像学证据:一项大规模前瞻性队列研究

带有主题的文档百分比: 8%

2.利用人工智能筛查新冠肺炎患者

**关键词:**临床,诊断,显著,高度,特征,症状,目的,指标,嗜酸性粒细胞,入院

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

机器人。作者插图

使用人工智能技术来筛选患者的属性,如白细胞,嗜酸性粒细胞计数,嗜酸性粒细胞比率,2019 新型冠状病毒 RNA (2019n-CoV)和淀粉样蛋白-A。该团队开发了一种更快的方法来实现新冠肺炎诊断,提高了临床使用的确诊率。

最具代表性论文: 人工智能在新冠肺炎诊断预测中的应用

具有主题的文档百分比: 7%

3.各国尚未为 2019 年做好准备

**关键词:**预防,健康,能力,有效,应急,管理,加强,支持,准备,存在

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

地球仪。作者插图

各国在预防、发现和控制疫情的能力方面差异很大,这是因为全球卫生系统管理突发卫生事件的能力存在差异。我们需要加强全球准备,以遏制现有的疫情,包括正在进行的 2019-nCoV 国际传播。

最具代表性的论文: 根据 2019-nCoV 爆发回顾卫生安全能力——加强 IHR (2005)实施的机会

主题为的文档百分比为 7%

4.医务人员失眠、心理问题与新冠肺炎

**关键词:**心理,因素,发现,疾病,社交,隔离,员工,认同,抑郁,停留

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

医护人员失眠。作者插图

一项研究发现,在新冠肺炎疫情爆发期间,超过三分之一的医务人员患有失眠症。相关因素包括受教育程度、隔离环境、对新冠肺炎疫情的社会心理担忧和医生职业。考虑到不同的社会心理因素,需要对医务人员的失眠进行干预。

最具代表性的论文: 参与 2019 年新型冠状病毒疾病爆发的医务人员失眠及相关社会心理因素调查

带有主题的文档百分比: 7%

5.是否应该用强有力的预防措施来控制疫情?

**关键词:**衡量,预防,城市,强势,严格,个体,期望,维持,揭露,停止

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

孤立。作者插图

鼓励采取强有力的预防措施,直到冠状病毒疫情结束。国内其他地方和海外已经确认感染者应该以中国为榜样,立即采取强有力的干预措施。早期强有力的预防措施可以有效地阻止全球其他城市独立、自我持续的疫情爆发。

最具代表性的论文: 通过 EIR 模型模拟不同政策下 2019-nCov 的感染人群和传播趋势

具有主题的文档百分比: 7%

6.新的新冠肺炎快速基因诊断测试被发现

**关键词:**检测、pcr、样本、rt、lamp、诊断、反向、核酸、拭子、筛查

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

看核苷酸。作者插图

定量逆转录 PCR (qRT-PCR)是目前新冠肺炎检测的标准;然而,逆转录环介导等温扩增(RT-LAMP)可能允许在风险点进行更快、更便宜的现场检测。这项研究的目的是开发一种可以在 30 分钟内完成的快速筛查诊断测试。

最具代表性的论文: 逆转录-环介导等温扩增快速检测新型冠状病毒(covid 19)

主题为的文档百分比:5%

7.快速区分新冠肺炎病毒和其他感染

**关键词:**低,病人,酸,发热,肺,混浊,地面,过程,特征,图像

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

伪装的冠状病毒。作者插图

很少有人知道发热门诊中新冠肺炎和核酸阴性患者的不同临床特征。在肌肉疼痛的患者中观察到 2019-nCoV 感染的核酸检出率最高,其次是呼吸困难。发热、嗜酸性粒细胞减少和双侧肺毛玻璃样阴影的成像特征的结合可能是 2019-nCoV 感染的一个有价值的指标。

最具代表性的论文:2019 年门诊患者 nCoV 感染及临床表现分析:来自中国武汉发热门诊的流行病学研究

具有主题的文档百分比: 5%

8.谁最有可能感染新冠肺炎病毒?

**关键词:**病人,症状,系统,政府,人民,年龄,人,显著,改善,肾

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

确定谁处于危险中。作者插图

调查证实,人群的传染性没有明显的年龄限制,但老年人仍然是弱势群体。糖尿病患者更有可能发展成重症患者,入住 ICU 的概率也显著增加。

最具代表性论文: 中国重庆地区 197 例感染 2019 新型冠状病毒患者的流行病学和临床特征:单中心描述性研究

具有主题的文档百分比: 4%

9.重度新冠肺炎的治疗

**关键词:**重症,呼吸系统,治疗,急性,方法,综合征,相似,级别,起源,发生

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

国际电联。作者插图

新冠肺炎感染导致严重的呼吸系统疾病,类似于严重急性呼吸综合征冠状病毒,并与 ICU 入院和高死亡率有关。我们对该病的起源、流行病学、治疗方法等方面进行了研究,根据武汉协和医院制定的治疗方案,经国家卫生部认证,希望能制定出有效的治疗方法,降低该病的死亡率。

最具代表性论文: 中国石首新冠肺炎感染者的临床特征及治疗

主题为的文档百分比为 4%

结论

我喜欢这个周末项目——这是我第一次尝试将一些 NLP 技巧应用到一个问题上。我知道有人会发现我的方法有问题(请联系我),但这个想法很有趣。我想这就像是另一种形式的总结,我玩得越多,我就越思考医学和学术研究的可能性。

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

文字,文字无处不在。作者插图

也许是某种葡萄酒社交,我们根据聚集的主题关键词邀请学术作者,并根据主题交叉百分比进行某种人员匹配。我最好就此打住,免得我再免费给出任何奇思妙想。欢迎反馈!

**完整免责声明:**我是爱思唯尔的产品经理。这篇博客文章和分析是作者自己的创作,不代表爱思唯尔的想法和观点。

GitHub 回购

使用 python 脚本的 GitHub Repo 输入数据和输出:https://GitHub . com/raudashl/coronvavirus _ preprint _ research _ NLP

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

想要更多吗?

上述文章的 5 月更新版

[## 使用 NLP 的冠状病毒研究主题:2020 年 5 月

当你意识到在如此短的时间内发生了如此多的学术工作时,这是令人难以置信的。在这里,我潜入一些 LDA…

towardsdatascience.com](/top-coronavirus-research-topics-using-nlp-may-2020-b4166289b728)

如果你喜欢这篇文章,一定要看看我在 2020 年 2 月初制作的关于冠状病毒的漫画。

[## 冠状病毒爆发至今,为什么它如此令人担忧[漫画]

冠状病毒爆发在过去几周占据了头条。我越来越担心…

medium.co](https://medium.com/@raudaschl_32859/the-coronavirus-outbreak-so-far-and-why-its-so-concerning-comic-cd83d445f105)

文献学

多亏了伯特,总结已经商品化了

原文:https://towardsdatascience.com/summarization-has-gotten-commoditized-thanks-to-bert-9bb73f2d6922?source=collection_archive---------8-----------------------

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

照片由 Aaron BurdenUnsplash

你曾经不得不把一份冗长的文件总结成要点吗?或者为文档提供执行摘要?如你所知,对我们人类来说,这个过程是冗长而缓慢的——我们需要阅读整个文档,然后关注重要的句子,最后,将句子改写成一个连贯的摘要。

这就是自动总结可以帮助我们的地方。机器学习在总结方面已经走了很长的路,但仍有很大的发展空间。通常,机器摘要分为两种类型—

提取摘要:提取原始文档中出现的重要句子。

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

摘录摘要的类比

抽象概括:概括文档中包含的重要观点或事实,不逐字重复。当人们被要求总结一份文件时,这就是我们通常想到的。

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

抽象概括的类比

我想向大家展示一下最近使用 BERT_Sum_Abs 进行抽象摘要的一些结果,这是刘洋和米雷拉·拉帕塔在使用预训练编码器进行文本摘要中描述的最先进的自然语言处理摘要模型。

抽象 BERT 摘要性能

摘要的目的是将一个文档压缩成一个较短的版本,同时保留其大部分含义。抽象摘要任务需要语言生成能力来创建包含源文档中没有的新单词和短语的摘要。摘要通常被定义为二进制分类任务,其标签指示一个文本范围(通常是一个句子)是否应该包括在摘要中。

下面是 BERT_Sum_Abs 在标准摘要数据集上的表现: CNNDaily Mail 这些都是基准中常用的。评估指标被称为 ROGUE F1 得分—

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

基于刘洋和米雷拉·拉帕塔的带预训练编码器的文本摘要

结果显示 BERT_Sum_Abs 优于大多数非基于变压器的模型。更好的是,该模型背后的代码是开源的,并且可以在 Github 上实现。

演示和代码

让我们看一个用 BERT_Sum_Abs 总结文章的例子。我们将选择下面的故事来总结— 美联储官员表示,各国央行行长在应对冠状病毒方面步调一致。这是全文——

The Federal Reserve Bank of New York president, John C. Williams, made clear on Thursday evening that officials viewed the emergency rate cut they approved earlier this week as part of an international push to cushion the economy as the coronavirus threatens global growth.Mr. Williams, one of the Fed’s three key leaders, spoke in New York two days after the Fed slashed borrowing costs by half a point in its first emergency move since the depths of the 2008 financial crisis. The move came shortly after a call between finance ministers and central bankers from the Group of 7, which also includes Britain, Canada, France, Germany, Italy and Japan.“Tuesday’s phone call between G7 finance ministers and central bank governors, the subsequent statement, and policy actions by central banks are clear indications of the close alignment at the international level,” Mr. Williams said in a speech to the Foreign Policy Association.Rate cuts followed in Canada, Asia and the Middle East on Wednesday. The Bank of Japan and European Central Bank — which already have interest rates set below zero — have yet to further cut borrowing costs, but they have pledged to support their economies.Mr. Williams’s statement is significant, in part because global policymakers were criticized for failing to satisfy market expectations for a coordinated rate cut among major economies. Stock prices temporarily rallied after the Fed’s announcement, but quickly sank again.Central banks face challenges in offsetting the economic shock of the coronavirus.Many were already working hard to stoke stronger economic growth, so they have limited room for further action. That makes the kind of carefully orchestrated, lock step rate cut central banks undertook in October 2008 all but impossible.Interest rate cuts can also do little to soften the near-term hit from the virus, which is forcing the closure of offices and worker quarantines and delaying shipments of goods as infections spread across the globe.“It’s up to individual countries, individual fiscal policies and individual central banks to do what they were going to do,” Fed Chair Jerome H. Powell said after the cut, noting that different nations had “different situations.”Mr. Williams reiterated Mr. Powell’s pledge that the Fed would continue monitoring risks in the “weeks and months” ahead. Economists widely expect another quarter-point rate cut at the Fed’s March 18 meeting.The New York Fed president, whose reserve bank is partly responsible for ensuring financial markets are functioning properly, also promised that the Fed stood ready to act as needed to make sure that everything is working smoothly.Since September, when an obscure but crucial corner of money markets experienced unusual volatility, the Fed has been temporarily intervening in the market to keep it calm. The goal is to keep cash flowing in the market for overnight and short-term loans between banks and other financial institutions. The central bank has also been buying short-term government debt.“We remain flexible and ready to make adjustments to our operations as needed to ensure that monetary policy is effectively implemented and transmitted to financial markets and the broader economy,” Mr. Williams said Thursday.

开始之前,我们需要获取模型代码,安装依赖项并下载数据集,如下所示,您可以在自己的 Linux 机器上轻松执行这些操作:

开始总结的 Linux 命令

按照上面的代码,我们现在执行下面显示的 python 命令来汇总 /dataset2 目录中的文档:

python run_summarization.py \
    --documents_dir bertabs/dataset2 \
    --summaries_output_dir bertabs/summaries_out \
    --batch_size 64 \
    --min_length 50 \
    --max_length 200 \
    --beam_size 5 \
    --alpha 0.95 \
    --block_trigram true \
    --compute_rouge true

这里的参数如下—

documents_dir要汇总的文档所在的文件夹
summaries _ output _ dir要写入摘要的文件夹。默认为文件夹,文件为
Batch _ sizeBatch size per GPU/CPU for training
beam _ size每个示例开始的波束数
block _ trigram是否阻止波束搜索
Compute _ ROUGE仅适用于 CNN/DailyMail 数据集
alpha波束搜索中长度罚分的 alpha 值(值越大罚分越大)
min _ length摘要的最小令牌数
max _ length摘要的最大令牌数

一旦 BERT_Sum_Abs 完成了这篇文章,我们就获得了以下摘要:

The Fed slashed borrowing costs by half a point in its first emergency move since the depths of the 2008 financial crisis. Rate cuts followed in Canada, Asia and the Middle East on Wednesday. The Bank of Japan and European Central Bank have yet to further cut borrowing costs, but they have pledged to support their economies.

总结的另一个例子研究表明,低碳水化合物饮食可以预防、逆转大脑中与年龄相关的影响得出以下总结:

The research team focused on the Presymptomatic period during which prevention may be most effective. They showed that communication between brain regions destabilizes with age, typically in the late 40's, and that destabilization associated with poorer cognition. The good news is that we may be able to prevent or reverse these effects with diet, mitigating the impact of encroaching Hypometabolism by exchanging glucose for ketones as fuel for neurons.

结论

如你所见,BERT 正在渗透到 NLP 的各个方面。这意味着我们看到 NLP 的性能每天都在接近人类的水平同时还是开源的。

NLP 的巨大商品化正在到来,每一个新的 NLP 模型不仅建立了新的基准记录,而且任何人都可以使用。就像 10 年前 OCR 技术变得商品化一样,NLP 在未来几年也将如此。随着 NLP 的商品化,许多较小的参与者正在被打乱,因为他们在 NLP 技术 R&D 的护城河在他们眼前蒸发了。

NLP 的这种商品化应该引导人工智能公司转移重点,进入特定的垂直领域,建立解决领域痛点的护城河,而不是将 NLP 技术作为核心价值主张。具体来说,在这里您可以看到技术已经商品化的摘要,因为新的研究成果很快被实现为开源代码,同时超过了以前的基准。

基于 BART 模型的 COVID 研究论文综述

原文:https://towardsdatascience.com/summarization-of-covid-research-papers-using-bart-model-5b109a6669a6?source=collection_archive---------19-----------------------

用数据做酷事!

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

免费股票照片

介绍

与艾伦·艾、白宫和其他几个机构合作,Kaggle 已经开源了新冠肺炎开放研究数据集(CORD-19) 。CORD-19 是超过 52,000 篇学术文章的资源,包括超过 41,000 篇关于新冠肺炎、新型冠状病毒和相关冠状病毒的全文。这个免费提供的数据集提供给全球研究界,以应用自然语言处理和其他人工智能技术的最新进展,产生新的见解,支持正在进行的抗击这种传染病的斗争。由于新型冠状病毒文献的快速增长,使得医学研究界难以跟上,因此对这些方法的需求越来越迫切。

深度学习分析,我们一直在花时间,在这个数据集上尝试不同的 NLP 技术。在这篇博客中,我们展示了如何使用基于前沿变压器的摘要模型来总结与新冠肺炎相关的研究论文。这对于快速浏览研究论文或其部分内容非常有用,可以帮助你决定是否要完整阅读。请注意,我不是健康专家,本文的观点不应被解释为专业建议。

我们非常热衷于使用数据科学和机器学习来解决问题。如果您是一家医疗服务公司,并且正在寻找数据科学帮助来应对这场危机,请通过此处的联系我们。原文全文发表在我们的网站这里。

什么是总结?

根据维基百科,摘要是通过计算缩短一组数据的过程,以创建代表原始内容中最重要或最相关信息的子集摘要。摘要可以应用于多种数据类型,如文本、图像或视频。摘要已经被用于许多实际应用——摘要文章、摘要同一主题的多个文档、摘要视频内容以生成体育比赛中的精彩场面等。

具体来说,文本摘要非常有用,因为它使用户不必阅读长篇文章、博客或其他文本。可以有不同类型的总结,如下图所示,这是从这个博客借用的。

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

摘要的类型(来源:https://medium . com/jatana/unsupervised-text-summary-using-sentence-embedding-ADB 15 ce 83 db 1)

有多种类型的总结——基于输入类型,基于期望的输出或目的。摘要的输入可以是单个或多个文档。多文档摘要是一个更具挑战性的任务,但最近有一些有前途的研究。

总结任务可以是抽象的,也可以是提取的。摘要通过选择现有文本的子集来创建摘要。摘要类似于高亮显示。抽象概括包括理解文本和重写文本。你也可以在我的博客这里阅读更多关于总结的内容。

使用变形金刚的新闻摘要

我们将利用 huggingface 的变形金刚库对科学文章进行总结。这个库实现了不同的算法。

在这篇博客中,我们将使用 BART 算法。 BART 是一款去噪自动编码器,用于预处理序列间模型。正如他们在论文中所描述的,BART 是通过(1)用任意噪声函数破坏文本,以及(2)学习一个模型来重建原始文本来训练的。因此,BART 在抽象对话、问题回答和总结等多项任务上表现出色。具体来说,对于总结,增益高达 6 胭脂分数。

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

BART 架构(来源:https://sshleifer . github . io/blog _ v2/jupyter/2020/03/12/BART . html)

让我们测试一下 Huggingface 支持的 BART transformer 模型。该模型在 CNN/Daily Mail 数据集上进行训练,该数据集是用于摘要工作的标准数据集。数据集由新闻文章和人类撰写的摘要组成。在我们在研究论文上运行这个模型之前,让我们在一篇新闻文章上运行这个模型。以下代码片段可用于生成新闻文章的摘要

from transformers import pipelinesummarizer = pipeline(“summarization”)

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

测试摘要的新闻文章—来自https://hugging face . co/transformers/usage . html #摘要的示例

print(summarizer(ARTICLE, max_length=130, min_length=30))

运行 summary 命令会生成如下摘要。

莉安娜·巴里恩托斯已经结了 10 次婚,有时是在两个星期之内。检察官称这些婚姻是移民骗局的一部分。周五,她在布朗克斯的州最高法院表示无罪。

在我看来,这是一篇非常好的新闻摘要。可以调整 max_length 参数以获得更长的摘要。

新冠肺炎研究论文综述

全球许多科学家和研究人员正致力于更多地了解该病毒,以开发有效的治疗方法,包括疫苗或药物,以降低攻击的严重程度。我们关于这个话题的知识不断增加。如果人工智能能够第一次通读研究并提供良好的总结,它可以帮助人类有效地优先考虑他们的时间。然而,总结往往是一项困难且主观的任务。要真正总结人工智能需要理解的内容,这是很困难的,因为研究人员的写作风格差异很大。在这篇博客中,我们评估了 BART Transformer 模型在总结新冠肺炎论文内容方面的表现。

为了获得 CORD-19 研究论文的清晰数据集,我们将在这里使用来自的 dataframe biorxiv_clean.csv。非常感谢 xhulu 在 Kaggle 上创造了这个。

让我们开始总结研究论文吧!

## Read the data frame
import pandas as pd
data = pd.read_csv('biorxiv_clean.csv')

一旦我们读取了数据帧,数据看起来就像这样:

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

清洁新冠肺炎开放研究数据集

我们的主要栏目有论文 id、标题、摘要、作者、正文、参考书目等。

然后,我们将遍历数据帧并生成摘要。正如我们所看到的,“文本”列在数据帧中有科学文本。

from transformers import pipelinesummarizer = pipeline(“summarization”)for i, text in enumerate(data): print(summarizer(data[‘text’].iloc[i], max_length=1000,   min_length=30))

您可以试验最小和最大长度参数。我们选择上述值,因为它提供了最佳结果。

新冠肺炎研究总结结果

这些总结的一些例子是:

正文:

https://www.mdpi.com/2076-0817/9/2/107

BART 变压器生成的汇总:

类圆线虫病是一种流行于热带和亚热带地区的蠕虫感染。然而,流动人口的患病率数据很少。这项研究评估了在西班牙六家医院就诊的人群中这种感染的患病率。流行率约为 9%,非洲和拉丁美洲高于其他地区。此外,免疫系统受损患者的患病率低于未遭受免疫抑制的患者。

正文:

【https://www.biorxiv.org/content/10.1101/2020.02.22.961268v1

BART 变压器生成的汇总:

转录聚合酶链式反应(RT-PCR)是用于分析和定量各种致病 RNA 的标准和常规使用的技术。新冠肺炎疫情爆发后,报道了几种检测新型冠状病毒基因组 RNA 的方法和试剂盒。传统方法耗费大量操作人员,但诊断效率低,交叉感染风险高。基于磁性纳米粒子(MNPs)的提取方法无需离心机,已被证明易于操作且与自动化兼容。

观察:

总体而言,我认为基于 CNN/Daily Mail 数据训练的 BART 模型表现不一。它确实提供了事实上正确的连贯摘要,但如果将该摘要与论文摘要进行比较,我们会发现一些差距:

  • 它可能会遗漏一些关键方法或其他相关元数据,而研究人员可能希望将其作为摘要的一部分。
  • 摘要往往比论文的摘要更短,结论也更弱
  • BART 模型中使用的嵌入是在常规英语词汇上训练的,可能不能正确理解这里的科学术语

为了应对这些挑战,最好的方法是对从上述数据框架中提取的文本和摘要的 BART 模型进行微调。我们已经开始这样做了,但是由于训练一个好的摘要模型需要大量的计算,所以我们无法继续向前。

结论

在这篇文章中,我们看到预训练的 BART 模型可以用来从新冠肺炎研究论文中提取摘要。由于科学术语和不同研究者不同的写作风格,研究论文摘要是一项困难的任务。BART 模型在生成论文摘要方面做得相当好。然而,它的局限性在于它可能无法涵盖所有的要点。

超负荷相似性度量计算

原文:https://towardsdatascience.com/super-charged-similarity-metric-calculations-969116abd948?source=collection_archive---------17-----------------------

采用 NumPy 和 TensorFlow

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

乔·内里克在 Unsplash 上的照片

相似性检测是一种常用的方法,用于识别具有共同特征但不一定具有相同特征的项目。产品推荐和相关文章通常由相似性度量驱动。余弦相似性是最受欢迎的,将在这里讨论。本文将使用 NumPy 和 TensorFlow 评估 Python 中余弦相似性的性能。

NumPy 和张量流

NumPy 是一个健壮而成熟的库,用于处理大型多维矩阵。NumPy 拥有丰富的线性代数函数集合。调得很好,在 CPU 上运行速度非常快。

TensorFlow 是一个数学和机器学习库,可以利用 CPU 和 GPU。TensorFlow 已经在生产中得到很好的证明,并用于支持高级机器学习算法。它还拥有丰富的线性代数函数集合。你用 NumPy 能做的大部分事情,在 TensorFlow 里也能做。

两者都是很棒的库,都可以计算数据集之间的相似性度量。

计算余弦相似度

如果 NumPy 和 TensorFlow 尚未安装,可以通过 pip 安装。本文使用的是 NumPy 1.17.4 和 TensorFlow 2.1

pip install numpy
pip install tensorflow

以下示例代码显示了如何在 NumPy 和 TensorFlow 中计算余弦相似性。

NumPy 和张量流余弦相似性

运行上面的代码将产生类似下面的输出。还会有很多 TensorFlow 消息,重要的是你要看到顶行是粗体的,以确保 GPU 正在被使用。

**I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:**x: 
 [[0.16522373 0.55317429 0.61327354 0.74017118 0.54443702]
 [0.46154321 0.17925365 0.3785271  0.71921798 0.91126758]
 [0.10342192 0.96612358 0.06434406 0.85482426 0.7329657 ]
 [0.1333734  0.99817565 0.42731489 0.46437847 0.40758545]
 [0.43727089 0.91457894 0.21971166 0.24664127 0.61568784]]
y: 
 [[0.15979143 0.47441621 0.20148356 0.99541121 0.41767036]]np: 
 [[0.91509268]
 [0.83738509]
 [0.91553484]
 [0.80027872]
 [0.7071257 ]]
tf: 
 [[0.91509268]
 [0.83738509]
 [0.91553484]
 [0.80027872]
 [0.7071257 ]]

最上面的两个数组显示了 x 的 5x5 数组和 y 的 1x5 数组。它还显示了 y 相对于 x 中每一行的余弦相似性,这是用 NumPy 和 TensorFlow 计算的。

让我们试着用更多的数据来计算时间。

小型阵列的性能

对于第一个测试,我们将尝试两个小数组,计算 x 的 1000x25 数组和 y 的 50x25 数组之间的余弦相似性。

小型数据阵列的时序

运行上面的代码将产生以下输出:

np time = 0.2509448528289795
tf time = 0.7871346473693848
similarity output equal: True

在这种情况下,NumPy 比 TensorFlow 快,即使 TensorFlow 启用了 GPU。与所有软件开发一样,没有一种尺寸可以满足所有问题的答案。NumPy 仍然有一席之地,它在处理小数据时会表现得更好。

将数据从 CPU 复制到 GPU 会产生开销,构建要执行的 GPU 图形也会产生开销。随着数据的增长,开销与总体运行时间相比可以忽略不计,让我们尝试更大的数据阵列。

大型阵列的性能

我们将运行与上面几乎完全相同的代码,除了我们将增加数组的大小。

x = np.random.rand(10000, 25)
y = np.random.rand(50, 25)

对于这个测试,我们将对 x 使用 10000x25 数组,对 y 使用 50x25 数组。

np time = 3.3217058181762695
tf time = 1.129739761352539
similarity output equal: True

TensorFlow 现在比 NumPy 快 3 倍。将数据复制到 GPU 并编译 GPU 图形的开销现在值得在性能上进行权衡。

让我们尝试一个更大的数组。

x = np.random.rand(25000, 100)
y = np.random.rand(50, 100)

对于这个测试,我们将对 x 使用 25000x25 的数组,对 y 使用 50x100 的数组。

np time = 23.823707103729248
tf time = 2.93641996383667
similarity output equal: True

在这种情况下,TensorFlow 快了 8 倍。只要数据集能够适合 GPU,性能增益将继续快速增长。

选择前 N 个索引

计算余弦相似度将得到一个从 0 到 1 的浮点数组,1 表示最相似,0 表示最不相似。对于大多数用例,您需要计算相似性以及最佳关联记录。在 NumPy 和 TensorFlow 中都可以这样做,如下所示。

余弦相似度和最佳匹配选择

上面的代码获得了一个按照最高余弦相似度排序的索引列表。选择并打印最上面的记录。

结论

NumPy 和 TensorFlow 都有自己的位置。GPU 不只是在所有情况下都让一切变得更快。对较小的数据集使用 NumPy,对较大的数据集使用 TensorFlow。始终根据您自己的数据进行测试,看看在您的特定情况下什么最有效。

仅使用 PyTorch 的超收敛

原文:https://towardsdatascience.com/super-convergence-with-just-pytorch-c223c0fc1e51?source=collection_archive---------30-----------------------

使用内置 PyTorch 函数和类减少训练时间同时提高效果的指南

为什么?

当创建 Snaked,我的蛇分类模型时,我需要找到一种方法来改善结果。超级收敛只是一种更快训练模型同时获得更好结果的方法!然而,我发现没有关于如何使用内置 PyTorch 调度程序的指南。

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

封面图片来源于此处

学习理论

在你阅读这篇文章之前,你可能想知道什么是超级收敛,以及它是如何工作的。总的要点是在开始时尽可能提高学习速度,然后以循环的速度逐渐降低学习速度。这是因为较大的学习率训练得更快,而导致损失发散。我在这里的重点是 PyTorch,所以我自己不会做任何进一步的解释。

以下是可供深入研究的资源列表:

进口

import torch
from torchvision import datasets, models, transforms
from torch.utils.data import DataLoader

from torch import nn, optim
from torch_lr_finder import LRFinder

设置超参数

设置变换

transforms = transforms.Compose([
transforms.RandomResizedCrop(size=256, scale=(0.8, 1)),
    transforms.RandomRotation(90),
    transforms.ColorJitter(),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.CenterCrop(size=224), 
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), 
])

加载数据、模型和基本超参数

train_loader = DataLoader(datasets.CIFAR10(root="train_data", train=True, download=True, transform=transforms))
test_loader = DataLoader(datasets.CIFAR10(root="test_data", train=False, download=True, transform=transforms))

model = models.mobilenet_v2(pretrained=True)

criterion = nn.CrossEntropyLoss()
optimizer = optim.AdamW(model.parameters())

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)

Note that doing this requires a seperate library from [here](https://github.com/davidtvs/pytorch-lr-finder).

```python
lr_finder = LRFinder(model, optimizer, criterion, device)
lr_finder.range_test(train_loader, end_lr=10, num_iter=1000)
lr_finder.plot()
plt.savefig("LRvsLoss.png")
plt.close()HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))

Stopping early, the loss has diverged
Learning rate search finished. See the graph with {finder_name}.plot()

创建计划程序

使用单周期学习率调度程序(用于超收敛)。

请注意,调度程序使用图表中的最大学习率。要选择向下寻找最大梯度(斜率)。

必须在中输入训练的周期数和每个周期的步数。通常的做法是使用批量大小作为每个时期的步骤。

scheduler = optim.lr_scheduler.OneCycleLR(optimizer, 2e-3, epochs=50, steps_per_epoch=len(train_loader))

火车模型

训练模型 50 个纪元。每个时期后打印统计数据(损失和准确性)。

不同的调度程序应该在不同的代码中调用。将调度器放在错误的位置会导致错误,所以使用单周期策略时,要确保在每个批处理之后直接调用 step 方法。

best_acc = 0
epoch_no_change = 0

for epoch in range(0, 50):
    print(f"Epoch {epoch}/49".format())

    for phase in ["train", "validation"]:
        running_loss = 0.0
        running_corrects = 0

        if phase == "train":
            model.train()
        else: model.eval()

        for (inputs, labels) in train_loader:

            inputs, labels = inputs.to(device), labels.to(device)

            optimizer.zero_grad()

            with torch.set_grad_enabled(phase == "train"):

                outputs = model(inputs)
                _, preds = torch.max(outputs, 1)
                loss = criterion(outputs, labels)

                if phase == "train":

                    loss.backward()
                    optimizer.step()

                    scheduler.step()

            running_loss += loss.item() * inputs.size(0)
            running_corrects += torch.sum(preds == labels.data)

        epoch_loss = running_loss / len(self.data_loaders[phase].sampler)
        epoch_acc = running_corrects.double() / len(self.data_loaders[phase].sampler)
        print("\nPhase: {}, Loss: {:.4f}, Acc: {:.4f}".format(phase, epoch_loss, epoch_acc))

        if phase == "validation" and epoch_acc > best_acc:
            epoch_no_change += 1

            if epoch_no_change > 5:
                break

感谢阅读!

我希望这足够简单,可以相对快速地理解。当我第一次实现超级收敛时,我花了很长时间才弄明白如何使用调度程序(我找不到任何利用它的代码)。如果你喜欢这篇博文,考虑看看其他方法来改进你的模型。如果你想看看超级收敛在实际项目中是如何使用的,只需看看我的蛇分类项目就行了。

超级简单的文本分类句子向量与姐妹(库)

原文:https://towardsdatascience.com/super-easy-text-classification-by-sentence-vector-with-sister-library-843eabf962ae?source=collection_archive---------39-----------------------

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

照片由阿尔方斯·莫拉莱斯Unsplash 拍摄

之前的帖子中,我介绍了一个我写的库——姐姐,它可以很容易地将一个句子转换成一个向量。我们看到了用很少的代码就能做到这一点是多么简单。

然而,获得一个向量只是创建一个 ML 增强应用程序的第一步,我们需要在它上面放一个模型来做一些很酷的事情。

在本帖中,我们将通过几个简单的步骤,利用句子向量创建文本分类。

为了向您展示这样做有多简单,我将把整个代码放在前面。

就这些了。包括空行,也就 27 行!!!

这个程序主要做四件事。

  1. 加载数据集。
  2. 将每个句子转换成一个向量。
  3. 训练一个模特。
  4. 评估。

让我一步一步地解释它们

加载数据集

主函数中的前几行,

train = datasets.Imdb("train")test = datasets.Imdb("test")train_texts, train_labels = zip(*train.all())test_texts, test_labels = zip(*test.all())

正在加载一个著名的文本分类数据集,IMDb 数据集。这个数据集由电影评论和相应的情感标签组成。它有一个正面的标签—如果评论是正面的,则为 1。这意味着数据集中的所有样本都属于两个类中的一个,因此这是一个二元分类问题。

为了加载数据集,我使用了一个轻量级的 NLP 数据加载器库 LineFlow 。要了解更多这方面的信息,我建议你参考开发者写的一篇中型文章

将句子转换成向量

现在酷的部分,通过使用姐妹,我们将获得电影评论的数字表示。

sentence_embedding = sister.MeanEmbedding("en")train_x = np.array([sentence_embedding(t) for t in train_texts])test_x = np.array([sentence_embedding(t) for t in test_texts])

在第一行中,我们创建了一个类的实例,它获取一个句子,并将其中的单词转换成单词向量,最后是句子向量。想知道它是如何从一个单词向量序列中获取一个句子向量的,请参考我之前的文章

训练模特

现在,我们已经为构建 ML 模型准备好了句子。为此,我将使用机器学习库之王, scikit-learn 。通过使用这个,我们可以只用两行代码训练一个支持向量机

clf = SVC(kernel="linear")clf.fit(train_x, train_labels)

评价

最后,我们可以用测试数据来测试模型训练得有多好。

print(clf.score(test_x, test_labels))

通过使用 scikit-learn,这也可以非常简单地完成。在我的本地机器上,它的准确率超过 80%。这不是一个很好的结果,但却是一个很好的起点。

在本文中,我们看到了如何构建一个以句子向量作为输入的 SVM 文本分类模型,并且我们用不到 30 行代码就实现了它。

我将以整个程序的 GitHub 要点 T4 来结束这篇文章。

感谢您的阅读!

超级学习者对深度神经网络

原文:https://towardsdatascience.com/super-learner-versus-deep-neural-network-aa78547aabd7?source=collection_archive---------27-----------------------

“我从来没有输过。我要么赢,要么学”——纳尔逊·曼德拉

来源:https://linkites.com/

简介

深度学习在涉及预测建模和模式识别的任务中占据了突出的位置。深度学习通过其自动特征提取和前馈方法提供了提取低级特征的信心,以便在大数据应用中识别高级身份。然而,深度神经网络有缺点,包括许多超参数一起调整,在较小的数据集中收敛缓慢,以及解释为什么做出特定决定的问题。虽然传统的机器学习算法可以解决这些缺点,但它们通常无法达到深度神经网络所记录的性能水平。为了提高性能,集成方法用于组合多个基础学习器。

在这篇文章中,我们将探索超级学习者是否可以通过使用特定于任务的调整来提供比深度神经网络更高的性能。

目标

我将使用传统算法的组合,对照 深度神经网络 的多个参数,检查 深度超级学习器 的性能。我使用了银行营销数据来比较我的模型,使用的评分机制有 混淆矩阵、精确度和召回率、F1 分数、ROC-AUC 分数。

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

模型比较指标

深度神经网络综述

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

上图描绘了深度学习如何成为机器学习的子集,以及机器学习如何成为人工智能(AI)的子集,来源维基百科

深度学习是人工智能中机器学习的一个子领域,深度神经网络是深度学习的基础。他们处理受大脑生物结构和功能启发的算法,以帮助机器拥有类似人类的智能。

一个简单的前馈神经网络,完全连接的神经元模仿大脑中的神经元。这些神经元根据收到的输入向其他神经元传递消息或信号,并形成一个复杂的网络,通过某种反馈机制进行学习。

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

多层网络中的每个神经元从输入中提取一个特定的特征,并学习从中唯一地识别项目,使其具有像人类一样的学习能力。

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

维基百科页面显示了如何在深度学习的多个抽象层上表示图像

我将使用简化构建神经网络的 Keras 库。下面的代码创建了一个顺序模型,指定我们添加的每一层的输出都是下一层的输入,依此类推。

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

我用“relu”作为 2 个隐藏层的激活,用“sigmoid”作为输出层的激活。每一层都有不同的输入维度/神经元集,顺序为 40–20–10–1。

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

什么是超级学习者?

正如我们在上面看到的,深度神经网络是一种强大的深度学习架构,它使用多层处理单元来学习前一层的输入并将其前馈,这使其能够识别更高级别的特征并简化实体/身份检测。然而,深度神经网络有缺点,包括许多超参数和无限架构,结果不透明,以及在较小的数据集上收敛相对较慢。

超级学习 **,**通过将多个传统的机器学习算法堆叠成一个集合来解决这个问题,该集合可以找到不同学习算法的最佳组合。这是一种技术,我们将您可能调查的所有模型和配置组合起来,用于预测建模问题,并使用它们做出与您可能调查的任何单个模型一样好或更好的预测。

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

显示从“超级学习者”获取的超级学习者算法
的数据流的图表

如上所述,超级学习器将是堆叠或 k-fold 交叉验证的变体,其中各个模型将在 k-fold 数据分割上被训练,然后最终元模型将在其输出上被训练,也称为来自每个模型的非折叠预测。

现在让我来展示一下超级学习者的表现是如何与它所涉及的任何单一模型一样好甚至更好的。

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

我选择了不同的基础学习者进行预测分析

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

这里我们可以看到基于准确性和 ROC-AUC 曲线的单个模型的性能

我将使用 ML-Ensemble 库来训练超级学习者,它提供了一个模块化的、灵活的、高效内存的高性能集成学习者。关于超级学习者实现的深度可以在这里找到。

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

超级学习器的性能比使用任何一种传统的 ML 算法都更可靠。

用于比较的数据集

我在这里使用了 UCI 的银行营销数据。该数据与一家葡萄牙银行机构的直接营销活动(电话)相关。通常,需要同一个客户进行多次联系,以便了解产品(银行定期存款)是否认购(“是”/1)或不认购(“否”/0)。

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

数据集的快速探索性数据分析

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

我们得到了 7 个分类特征,5 个数字特征和 4 个布尔特征。我已经使用标签编码器通过将分类值转换成数字形式来标准化数据。

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

如下图所示,数据非常不平衡,因此我们需要在调整模型时实现类权重调整或数据采样技术。

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

6。DSL vs DNN 的正面碰撞

让我们开始吧,为了比较哪种算法在我们的银行营销数据上表现最好,我将根据诸如准确度、混淆度量、精确度、召回率、F-1 和 ROC-AUC 分数等指标来比较性能。

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

不准确性和 F1 分数深度超级学习者比深度神经网络略高

在不平衡数据集的情况下,准确性不能用作唯一的决策度量,因为根据这种数据训练的分类器可能会给你 98%准确性的惊人结果,但是当你进一步挖掘时,却发现 100 个样本中有 98 个样本属于正确分类的多数类,而属于少数类的 2 个样本被遗漏,使得分类器在实际情况下是多余的。因此,我将使用混淆度量和 ROC-AUC 分数来确保我们的分类器正确地对两个类别进行分类。

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

用于比较的混淆度量

尽管有高度不平衡的数据,两个分类器都表现得相对较好,没有偏向一个类别。然而,通过微调分类器和使用平衡数据,我们可以更好地改善上面看到的错误分类率。

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

精确召回曲线和 ROC 曲线的比较

与深度超级学习器相比,深度神经网络的精度-召回曲线似乎更平滑。然而,在迄今为止的分析中,深度超级学习者设法以微弱优势领先于深度神经网络。

我将使用数据集平衡做一个快速分析,看看深度神经网络是否能够弥合超级学习者所达到的差距。

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

随着平衡训练数据的引入,错误分类率显著下降,提高了超级学习器和神经网络的准确性。然而,在上述任务的大多数评估指标中,深度超级学习器优于深度神经网络,下面的性能统计数据清楚地证明了这一点。

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

7。结论

最终的结论是哪一个是最好的?

实际上,对于给定的预测问题和数据集,通常不可能事先知道学习者在哪个方面表现最好。——超级学习者 ,2007 年。

上面的例子证明了深度学习不能作为所有问题的最佳解决方案。它对小数据的无效性加上无法解释所做的决定,使得传统的机器学习算法在某些用例中略占上风。

我们目前拥有的最佳答案是使用实证实验来测试和发现最适合您的数据集的方法。

用 Python 抓取 BBC 新闻文章的超级简单方法

原文:https://towardsdatascience.com/super-simple-way-to-scrape-bbc-news-articles-in-python-5fe1e6ee82d9?source=collection_archive---------17-----------------------

用最少代码抓取网站的简短教程

嗨,我是彼得·🇮🇸

我在伦敦一家咨询公司担任数据科学家。这实际上意味着我为多家公司工作,从事不同的数据科学工作。

大多数情况下,我在云端构建机器学习解决方案。有时,通用数据解决方案、仪表盘或推荐数据科学最佳实践。不过,最近主要是 NLP 或计算机视觉。关于我已经说得够多了。

如果你对数据科学、机器学习或大数据感兴趣,那么你很有可能从一个网站上收集数据。

对于小型项目或概念验证(PoC ),手动完成就可以了。其他时候,这最好用代码来完成。这就是 Python 的闪光点,有很多开源库可以和各种网站交互。

知道如何使用任何刮库,是一个非常有用的技能。非常值得投资💰

秘密是很容易刮网站

我们将一起构建一个简单的 Python class来抓取 BBC

Ps:如果你只是为了最后的代码而打开这篇文章,请随意跳到结尾,那里都是布局好的。

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

照片由 Clément HUnsplash 上拍摄

漂亮的组合和设置🍲🎣

BeautifulSoup 是我最喜欢的浏览网站的方式。学起来简单,用起来方便。

此外,想象一下在网络抓取时从汤里捞出好的部分是很滑稽的。

首先,使用命令行将库安装到您的 环境 中。作为一名数据科学家,我通常使用 Anaconda

我们还需要requests 模块从 BBC 获取 HTML 代码。在您的终端中运行这些:

conda install beautifulsoup4 requests -y

如果你愿意,你也可以使用pip

pip install beautifulsoup4 requests

安装完成后,创建一个 python 文件(。py)并在代码顶部导入库。

我推荐使用 PyCharm ,但是如果你刚刚开始,Jupyter 笔记本是一个很好的尝试方式。

import requests
from bs4 import BeautifulSoup as bs

我们最关心的是两个find 函数。它们允许我们在汤里找到任何 HTML 元素,只需要指定它的名字。

**find**(element_tag, attribute) *#return first matching item***find_all**(element_tag, attribute) *#return list of matching items*

始终使用 python 环境来管理您的项目

示例文章

让我们挑选一篇 BBC 的文章。我选择了一个冰岛纪念其第一座冰川因气候变化而消失的地方。

通过 Python 访问原始文章:

url = '[https://www.bbc.co.uk/news/world-europe-49345912](https://www.bbc.co.uk/news/world-europe-49345912)'
article = requests.get(url)

然后将文章内容传递给 BeautifulSoup 并指定 HTML 解析器。

soup = bs(article.content, 'html.parser')

就这么简单,汤就做好了!让我们找出好的部分🎣

下一步是手动检查页面的 HTML 以找到我们感兴趣的元素。我用的是 Chrome,但是你可以用任何浏览器。

使用浏览器定位元素

在浏览器中打开网页,右键单击并“检查”。

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

作者图片

将鼠标悬停在任何文本上,浏览器会告诉您该段落在哪个 div 中。

如果不起作用,按***Ctrl+ Shift+ C*** ***CMD + shift + C*** 再试一次。

在这种情况下,“story-body _ _ introduction”包含突出显示的段落。

具有属性" articleBody" 的 div 类" story-body__inner "包含了整篇文章,这就是我们所追求的。

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

作者图片

在汤里找到尸体:

*body = soup.find(property='articleBody')*

这为我们提供了原始 HTML 格式的段落§的内容。

访问每个段落的文本,并使用列表理解将其分配到一个新列表:

*text = [p.text for p in body.find_all('p')*

我们可以将上述内容组合在一个函数中,该函数接受 BBC 文章的 URL:

访问其他区域

如果我们想要访问标题,我们再次检查站点,找到标题所在的 div,然后把它从混乱中捞出来。

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

作者图片

代码看起来是这样的:

更有经验的编码人员可能已经发现了这些函数的问题…

它们在很大程度上是相同的。那不是很嘛。

一种方法是将它们重构为 3 个函数,并将get_soup放在自己的函数中。

然而,这意味着如果我们想访问标题和正文,我们必须下载 BBC 文章两次!

这感觉反而应该是一门课。

另外,类看起来更专业,而不是在函数中调用函数。当刮刀变得越来越复杂时,它们也使维护变得更容易。

作为伟大的程序员,让我们把它变成一个类!

重构为一个类🚀

从定义类开始。

每个类都应该有一个__init__ 函数,你可以传递任何变量来初始化函数。

当您调用该类时,会自动调用__init__函数。

类中的每个函数还需要有self 作为第一个参数。这是那个特定类的实际实例。

***class BBC:
    def __init__(self):
        pass***

接下来,在__init__中添加 URL 作为参数,并把它变成一个汤。更改以粗体突出显示。

*class BBC:
    def __init__(self, **url**):
        **article = requests.get(url)
        self.soup = bs(article.content, "html.parser")***

将 soup 变量写成 self.soup 使它成为该类的一个属性。可以在类中的任何地方、任何函数中访问类属性。

为了访问文章的正文,我们使用前面的 body 函数。body现在也是这个类的一个属性

*class BBC:
    def __init__(self, url):
        article = requests.get(url)
        self.soup = bs(article.content, "html.parser") **self.body = self.get_body()** **def get_body(self) -> list:
        body = self.soup.find(property="articleBody")
        return [p.text for p in body.find_all("p")]***

同题:

*class BBC:
    def __init__(self, url):
        article = requests.get(url)
        self.soup = bs(article.content, "html.parser") self.body = self.get_body()
 **self.title = self.get_title()** def get_body(self) -> list:
        body = self.soup.find(property="articleBody")
        return [p.text for p in body.find_all("p")] **def get_title(self) -> str:
        return self.soup.find(class_="story-body__h1").text***

整个代码看起来像这样:

摘要

暂时就这样了。下面是它的工作原理:

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

作者图片

在我的下一篇文章中,我将 NLP 应用于 BBC 文章,并构建一个 Streamlit 应用程序与之交互!

超级星期二:多愁善感

原文:https://towardsdatascience.com/super-tuesday-getting-sentimental-303a8ecc0212?source=collection_archive---------38-----------------------

缩小范围

在超级星期二之前的一周里,美国民主党总统初选的格局发生了很大变化。全世界的目光都在注视着我们走向谁将与唐纳德·特朗普总统对决的最终决定。这是一个拥挤的领域,但在过去的一周,它已经明显变得不那么拥挤了。情绪高涨;到目前为止,这是一个有争议的初选季节,许多候选人获得了热情的支持者,他们可能对党内其他人感到愤怒或失望。上周开始时,大约有 8 名候选人参加竞选(老实说,很难保持跟踪),现在在超级星期二的另一边,看起来我们可能会剩下最后两名候选人。随着党内情绪的高涨,我决定看看候选人使用的语言,以及上周通过 Twitter 与他们互动的人使用的语言。

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

初选候选人上周使用的词汇(注意冠状病毒在中右蔓延😷)

分析概述

用于这一分析的数据从 2 月 24 日开始从 Twitter 上传到 3 月 3 日(超级星期二)。收集了满足以下要求的推文:

  • 文本包含一名候选人的姓名
  • 推特提到了其中一名候选人
  • 其中一名候选人发送或转发了推文

这些推文存储在网络数据库(Neo4J)中,用 RegEx 和 NLTK (Python 的自然语言工具包)进行处理/清理,然后使用 Seaborn 和 Matplotlib 进行可视化。每条推文的情感都是用 VADER(效价感知词典情感推理器)计算的。总共查看了候选人的 753 条推文和大约 94,000 条关于候选人的推文。这些计数的细目如下所示。

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

感情

情感可以被认为是文本情感内容的一种度量:数字越积极,情感越积极,数字越消极,情感越消极。VADER 用从-1 到 1 的范围来衡量情绪。在我处理 Twitter 文本的经验中,0 的情感不仅通常表示中性的价值(潜在的积极词汇和消极词汇一样多),还表示客观的文本(没有相关情感的纯粹信息传递)。

候选人

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

候选人推文的情绪统计摘要,也是 HBD 众议员 Lewis🎂!!

上面的可视化图描绘了候选人在 Twitter 上的用户名分组的每条推文的情绪。箱线图计算他们总体情绪的汇总统计数据,最外面的叉表示他们的极值(最低和最高),内部突出显示的方框捕捉他们情绪的中间 50%的值。穿过突出显示的框的条标记中间值(在我们的例子中是中间值)。

值得注意的是,从这张图片中,我们可以了解候选人使用 Twitter 传播信息或获得支持的频率。根据他们发出的推文数量,作为超级星期二的竞争者留在比赛中的 4 名候选人名列榜首可能不是巧合。此外,我还注意到了两条观点最极端的推文(伯尼的推文最负面,拜登的最正面)。从这些推文中,我们看到情绪分析正在收集情绪化的词,如:破产、犯罪、债务、荣誉、朋友和快乐。

重要的是要认识到,消极和积极并不一定转化为悲伤/沮丧和快乐/激励。消极可以表示正义的愤怒,积极可以表示祝贺。当我们继续估算和聚合语言的情感内容时,这是一个需要记住的重要警告。

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

4 个超级星期二候选人的推特情绪。离中心越近的推文越负面,离中心越远的越正面。

从总体上看超级星期二的 4 个主要候选人的推文,我们可以感觉到他们什么时候最活跃(使用的时区是美国东部时间,每个象限代表一天中的 6 个小时)。此外,下午的中性推文群暗示了发布公告或发布更新的常见时间。

成分

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

由于大量的推文,只有百分之一的推文被绘制成点,只有百分之十被用于方框图

如前所述,关于候选人的推文比候选人自己的推文多得多,上面我们来看看普通用户的推文样本。相对数量保持不变,似乎与少数例外情况相符。有趣的是,进步候选人似乎比温和派在 Twitter 上获得了更多的参与,这可能说明了在看待活跃在 Twitter 上的人时存在固有的偏见(即,人口统计数据可能比一般人群更倾向于自由派或年轻人)。特别是,伯尼在推特上被提及的次数远远超过了其他任何一位候选人(注意:他的推特数量与接下来三位候选人的总和相同)。

人民已经说话了

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

我们现在对这些推文中包含的一些情绪有所了解,但人们实际上在说什么呢?在选举中,我们的声音在投票中被听到,我们投给一个候选人而不是其他任何人。然后,我们的投票被汇总并分散到代表我们行事的代表的行为中(一般来说,不要@我)。在将我们的声音转化为选择候选人的行动的过程中,有相当多的步骤。但今天,我们可以直接看到数字化参与竞选过程的声音合唱。这个词云可视化了这些人在所有推文中的词频。单词越大,它在所有用户的词汇中就越普遍。它是围绕主节点发生的会话的聚合快照。

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

上面我们来看看超级星期二 4 个主要候选人最常使用的词,以及它们的总数(中上)。我把候选人的名字留在了分析中,而不是把他们作为停用词过滤掉,以了解一条推文引用另一条的频率。我们再一次看到伯尼似乎主宰了推特上的焦点。看着出现的一些词,我不得不指出,“男人”并没有出现在任何一个男性候选人的最常用词中,但“女人”却出现在竞选中唯一的主要女性候选人的最常用词中。这并不能证明潜在的厌女症或偏见,但我希望这是反思我们和媒体在整个过程中如何对待和报道每一位候选人的原因。

后续步骤

我希望这份初步分析能让你对超级星期二之前的日子有所了解。就收集到的数据而言,我们只是触及了全国性对话的表面,或者 Twitter 上的社区如何与候选人互动。接下来的步骤可能包括:

  • 社区检测(根据用户与候选人的互动,哪些用户属于谁的阵营?既然候选人的范围已经缩小,这些用户是如何转移的?)
  • 话题建模(Twitter 上发生了哪些离散的话题?这些在候选人中是如何分布的?)
  • 异常检测(是否有用户以不真实的速率或方式进行操作?TW: 2016 俄罗斯https://fivethirtyeight . com/features/what-you-found-in-300 万-russian-troll-tweets/

欢迎建议和讨论!你可以在推特上找到我,但是我花在这个项目上的时间不会像 https://twitter.com/danjizquierdo那样频繁

资源

[## danjisquierdo/感伤

twitter 数据情感和统计分析工具集

github.com](https://github.com/danjizquierdo/Sentimental)

VADER 纸业

http://comp . social . gatech . edu/papers/icwsm 14 . Vader . hutto . pdf

形象化

https://towards data science . com/3-awesome-visualization-techniques-for-every-dataset-9737 eecacbe 8

在 2020 年的最后几个月,为您的数据科学提供充足的资源

原文:https://towardsdatascience.com/supercharge-data-science-3da3ccf103-13da3ccf103?source=collection_archive---------51-----------------------

这篇文章建立在 2020 年的超级流行资源列表的基础上,在我们进入机器学习的新一年时,给你你需要的工具

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

今年早些时候,我分享了一份由 16 种资源组成的列表,当我从数据分析师,通过训练营,到我的第一份数据科学工作,从事真实世界机器学习项目时,我发现这些资源很有帮助。

在公布第一份名单后的这段时间里,我发现了许多优秀的信息来源,与大家分享。这些网站、视频和播客将增加您高级分析技能的深度和广度。如果你觉得这很有帮助,请考虑注册获取更多提示

网络资源

🌏 Google 数据集搜索—查找免费提供使用的数据集。我现在很有灵感,可以开始一打兼职项目。参见: 这份通过谷歌云平台 提供的公共数据集列表。

🔨 代码为 的论文——这是对 arXiv 的实际补充,提供了一个列表……嗯,代码为的论文!代码链接现在显示在 arXiv 文章上,作者可以通过 arXiv 提交代码。

ML 回顾——借用运筹学中无可指责的事后分析的概念,这个由瑞安·劳创建的发人深省的网站请求机器学习研究人员提供他们对他们在我们领域的工作和应用中好的方面和不太好的方面的想法。

🚀Launch by fast . ai——引人入胜且深入,这门课程经常被引用为编码人员进入机器学习的原因。 听听 De-Oldify 的创作者谈一谈他与课程 的经历。

📆 数据科学会议&在线活动——鉴于目前的世界形势,免费的全虚拟会议是一种希望。如果您想了解每月的活动日程,并与专家交流,请访问 KDnuggets 的这个页面。

YouTube 频道

🏆deep learning . ai——吴恩达的平台特色课程集锦及机器学习英雄访谈。

**stat quest**——通俗易懂、憨态可掬、充满音乐感,这个频道将提升你对优秀数据科学背后的统计学概念的理解。如果你想支持这个展览并回顾他的课程的文本和图像版本,乔希·斯塔默博士还提供了 PDF 学习指南。

两分钟论文 — 好吧,我可能用取笑了这个频道上的一些成就,但这确实是一个展示机器学习最新论文的好地方。该频道的创建者 károly zsolnais 本身就是一名研究科学家,特别关注计算机视觉、图形和动画。

🤔 莱克斯·弗里德曼——莱克斯·弗里德曼以深思熟虑的人工智能播客著称。这些对话的视频有助于将机器学习大师人性化,至少有一点。Lex 还分享了他在数学、编码和机器学习中感兴趣的概念的短片。

这位哈佛大学教授的系列文章和我记忆中的一样迷人和吸引人,对于提高你对统计方法的应用非常有价值。

播客

⚔️ 命令行英雄saron yitbarek带着热情和个性,为计算机科学背后的概念和创始故事注入了新的生命。这个播客来自 Red Hat,强调了开源范例的力量。

🎨数据科学的艺术家们——我非常感谢 Harpreet Sahota 的这个 pod。数据科学艺术家最近更名为数据科学家唯一的自我提升播客,我完全同意。每集都是与一位数据科学家就他们职业生涯的成功和失败进行的公开对话,具有非凡的洞察力和真实性。

数据工程播客 希望让你的技能多样化进入数据运营?良好的数据工程实践确实是任何数据科学工作的基础,因此了解该领域的关键工具是非常有价值的。托拜厄斯·小萌和他的客人通过这个平台提供的深厚专业知识将塑造关于数据的新思考方式。

⛅️cloud cast在机器学习工作流程的另一端,还有 DevOps 。如今,这往往需要使用云服务。Cloudcast 的工作人员将为您提供业内并购的最新消息,以及每周一次的新云技术深度探讨。

更多资源

****您正在使用哪些资源来学习数据科学?在评论里掉一行。

如果你喜欢这篇文章,请关注我的媒体LinkedInYouTubeTwitter ,了解更多提升你的数据科学技能的想法。考虑报名获取更多提示

2020 年增强数据科学的资源

原文:https://towardsdatascience.com/supercharge-data-science-5bb7376d8572?source=collection_archive---------29-----------------------

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

塞巴斯蒂安·沃特曼在的照片

通过这个有用的期刊、视频和讲座的集合,推进你对机器学习的理解。

无论你的背景或专业水平如何,建立一个跨越统计学、计算机科学和机器学习的知识库是你作为一名数据科学家取得成功的关键。

网络资源

🤯 arXiv 健全性——机器学习学科的特点是 arXiv 预印本形式的新信息特别密集。幸运的是,深度学习英雄 Andrej Karpathy 开发了这个界面,使跟上该领域的最新发展变得更加容易。

🔖 基础论文——聚合智力团队的(下面讨论的 ML 讲解讲座背后的团队),这里列出了数据科学领域最有影响力的论文。

**🎨 蒸馏**——谷歌蒸馏的团队制作了一本独特的期刊,为开创性的想法提供了卓越的可视化工具。为了更容易进入机器学习领域,请查看谷歌的人工智能探索工具

📚paper space AI wiki——这是我目前为止找到的最好的 AI 词汇表……评论里的 hmu 如果遇到更好的!

📐——这个在线论坛专注于通过社区传播思想,为讨论机器学习方面有影响力的论文提供了一个平台。

🐼 Chris Albon 的博客——你曾经想知道如何在熊猫中做的一切,加上机器学习闪存卡供购买。

🍪 Cookiecutter 数据科学 不用再寻找模板来建立您的下一个数据科学项目。

YouTube 频道

💻 速成班人工智能——在这 20 集系列中,贾布里勒展示了机器学习的一些基础知识。速成班团队还制作了一个关于计算机科学的很棒的系列节目,应该是我们所有技术领域的人(是的,可能是每个使用计算机的人)必看的。

ML 解说——加拿大就像美国的聪明大姐,在你登场之前的几年,她就用自己的才华迷倒了你的高中老师。就在你认为加拿大似乎再完美不过的时候,她去给曼梯·里解释了。这个奇妙的频道以大约一小时的讲座为特色,有助于澄清 ML/AI 中的开创性思想。

🖌 杰伦·阿拉玛——在我写这篇文章的时候,杰伦已经制作了一个视频,但我相信这个频道会让你继续关注更多精彩的内容。杰伊是图解变形金刚首次使用 BERT 的视觉指南以及更令人惊讶的平易近人的内容的不可思议的创造者。

👁 3 个蓝色,1 个棕色——这个频道提供了机器学习领域底层统计概念的绝佳介绍。如果格兰特·桑德森不能让你对学习数学产生兴趣,那就不知道什么能了。

播客

**🎙 英伟达的人工智能播客**——自 2010 年代中期以来,英伟达一直引领着用于深度学习的 GPU 计算的兴起。这期播客的特点是主持人个性鲜明,令人印象深刻地融合了企业领袖、创业人士和技术更新。

**🔭 数据交换**——本·洛里卡(Ben Lorica)每集都会处理机器学习相关的商业案例。播客的网站提供了优秀的文档,加上总是有趣的“相关内容”,条目可以追溯到洛里卡在奥莱利的时候。

**⚛︎ 期刊社数据怀疑论者**——这个播客就像是坐在你超级聪明的朋友的学习小组里。凯尔、兰、乔治,有时还有一个客人聚在一起讨论数据科学杂志上的最新文章和相关新闻。

🗓TWIML 人工智能播客——除了主持一个引人入胜的采访系列,twiml 还开始提供播客收听派对,提供独特的协作学习体验。

**📈 线性题外话**——经验丰富的数据科学教育家 Katie 向企业软件工程师兼双关语爱好者 Ben 讲解统计学中的核心思想。这是开始您的数据科学学习之旅的好地方。还可以看看凯蒂的 Udacity 课程——这是我在还在学习 Python 基础知识的时候开始学习 DS 的方式。

更多资源

如果你喜欢阅读这篇文章,请关注我的媒体LinkedInYouTubeTwitter ,了解更多提升你的数据科学技能的想法。

注册以在下一篇“ 资源增强您的数据科学 ”文章发布时获得通知。

****您正在使用哪些资源来学习数据科学?在评论里掉一行。

考虑辅导,增强你的数据科学技能

原文:https://towardsdatascience.com/supercharge-your-data-science-skills-by-considering-tutorship-6c0b805eeb46?source=collection_archive---------31-----------------------

辅导/指导如何成为数据科学家必要的软技能补充

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

UnsplashNeONBRAND 拍摄的照片

有很多很棒的数据科学文章,但是…

随意阅读《走向数据科学》中的数据科学文章是我学习新技能的首选网站,许多作者分享了他们的数据科学之旅。许多文章提供了很好的直截了当的内容,而没有大量沉重的技术文献评论,当与 arXiv 等科学期刊文章相比时,这常常使我处于一种困惑的状态。

大多数情况下,许多旨在教导和激励读者在数据科学领域追求或进行职业转换的文章涵盖以下主题:

  • 哪个学位/高级学位能让你在这个领域走得更远
  • 数据科学领域的职业前景和典型工作描述
  • 推荐的编程语言
  • 你应该学习的典型机器学习算法
  • 推荐初学者及以上注册的在线课程
  • 如何实现算法 X 求解 Y
  • 新的数据科学框架为您的数据科学流程增添趣味

在考虑数据科学领域的工作时,这些主题是绝对必要的。然而,在这篇文章中,我想强调一种软技能,它对于在数据科学领域工作的任何人来说都是绝对必要的:沟通

在现实世界中,数据科学不仅仅是从数据库中提取所需的数据,处理大量数据,并发布机器学习算法来预测或分类给定的问题。

也是生意。

谈到业务,我们不仅需要用技术术语与我们的数据团队交流,还需要用所有专业人员都能理解的语言与内部利益相关者和客户交流。

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

来源: KDNuggets

事实上,根据 2019 年的 KDNuggets,沟通已被封装为核心数据科学技能之一。单从信息图表来看,我认为沟通在需求技能中占很高的比例。

典型的数据科学家工作要求

考虑以下来自罗尔斯·罗伊斯公司的数据科学家的工作描述,它类似于许多其他数据科学家角色:

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

来源: LinkedIn

除了出现在列表顶部的标准技术数据科学技能和经验之外,与沟通相关的突出软技能也是数据科学家的一个基本特质。

那么为什么要做家教呢?

从现在开始,当我谈到辅导时,我指的是包含 STEM(科学、技术、工程、数学)类别的技术辅导。

我个人的家教经验

我在本科期间,曾在 第一代码学院 实习,担任 kids 的编码导师。我教过很多编程语言,包括 Python,HTML/CSS/JS 用于基本的 web 编程,C#结合 Unity 用于基本的游戏开发,以及基于块的编程,如 MIT AppInventor 用于 Android 和 Scratch。

“什么?为孩子编码?对他们来说是不是太难了?”

是的,这听起来可能很难,因为我们大多数人至少是在青少年晚期或成年早期学会的。我们认为编码是一项困难的任务,智力发达的成年人可能理解。我在本科期间 20 多岁的时候开始接触编程。

在大一开始熟悉编程基础后,我决定参加这次实习,天哪,我在这么短的时间里学到了很多东西!

1.掌握 ELI5 的概念

ELI5(像我 5 岁一样解释)是 Reddit 对许多难以解释的问题的社区解决方案,基本上社区试图“简单明了”地让提问者理解。

当我教 7-10 岁左右的年轻学生时,他们没有非常发达的认知能力来吸收常见的编程实践,如变量、循环和条件。教授这些内容需要大量使用视觉辅助工具来连接这些点。

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

向年轻学生解释条件语句的简单但非常有效的方法(来源: CodeScope

将此转化为数据科学,我们称之为解决其业务问题的数据可视化和模型解释。

1.2.数据可视化

当我们向内部利益相关者和客户展示时,我们需要假设他们的头脑是一张空白的画布,而我们是负责在他们的头脑中描绘一幅清晰明确的画面的艺术家。当你是手头项目的唯一负责人时,尤其如此。没人知道你是怎么做到的。

简单地在表格和简单的图表中加入几个关键指标是不够的。设计交互式执行仪表板并一步一步地引导他们完成是许多数据科学家的基本特征。

我说很多是因为这可能是一项交给商业智能分析师的工作。

在任何情况下,能够展示漂亮的视觉效果并满足他们的业务需求对你的角色来说都是至关重要的,除非你是一名研究学者,否则这可能并不重要。

1.3.模型可解释性

除了达到 KPI 预测目标之外,根据您的算法选择解释您的预测模型也很重要。除了做出好的预测之外,涉众可能还想知道哪些变量对预测的敏感性负责。

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

来源: KDNuggets

这就是你的 ML 算法选择发挥作用的地方,取决于你的最终用户是谁。如果准确性是最重要的,那么你可以考虑复杂的方法,如神经网络或集成方法。否则,变量解释更适合使用简单的算法,如多元线性回归或逻辑回归。

然而,在 ML 框架的当前状态下,诸如 random forest(这也是我个人最喜欢的)之类的复杂模型具有特性重要性函数,该函数可以轻松地可视化与模型相关的每个特性的重要性,这使得它成为业务经理研究的重要信息源。

2.战略沟通

教某人一些新的和技术性的东西绝对是一项具有挑战性的任务,尤其是在处理数字和理性概念的时候。在我上的每一堂课中,我都注意到学生们在第一节课(每节课 90 分钟)的前三分之一时间里最专心。之后,他们变得焦躁不安,开始难以跟上课程。

这也适用于我,当我在大学期间听讲座时,我想许多工作的成年人也没有很长的注意力持续时间。

人类的大脑并不是设计来 100%利用其记忆形成神经元的。

[## 大脑可能只使用了 20%的记忆形成神经元

还记得人们只使用了 10%大脑的古老神话吗?虽然一项新的研究证实,溴化物对…

www.scientificamerican.com](https://www.scientificamerican.com/article/the-brain-may-use-only-20/)

接受辅导教会了我如何以战略性的方式创建报告和演示内容,最大限度地吸引读者或观众的注意力。

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

我主持了一个关于有效分析的数据清理的研讨会

不同的人会有他们自己的策略,但基本上知道当你的内容变得有点乏味时,什么时候增加它的味道是给你的工作留下好印象的关键。这意味着更少的文字和更多的视觉效果,并知道如何讲述你的视觉效果。你也可以编造一些有创意的类比,与你试图解释的结果产生共鸣。

对我来说,在与利益相关者交流结果的过程中,我利用 Tableau 的交互功能。

3.同理心和耐心

“你能再给我解释一下吗?”

“哦哈哈,我完全忘了这件事”

他们说,用那双天真的小狗眼睛。这些问题几乎每节课都会出现在我面前,起初,不得不一遍又一遍地重复解释有点令人畏惧。

但后来我意识到,我也一样,这就是为什么我一开始就不是一个完美的学者!

然后我意识到,在工作的时候,有些像我一样的人很容易忘记。当然,这并不意外。许多员工被期望在工作中同时处理多项任务,当一个人把注意力从你的工作上移开一段时间,他们肯定会忘记。

因此,不要因为不得不重复自己而感到沮丧,接触教学可能会在你内心灌输同理心和耐心,让你去:“当然,我很乐意再给你解释一遍,事情是这样的……”

最后的想法

我利用我教孩子们编程的经验,作为如何在数据科学领域建立沟通能力的例子。事实上,我认为这极大地帮助了我的面试,在面试中,我必须以招聘经理可以理解的方式来解释我过去的工作经历和项目,而不要扔进太多的技术术语,除非招聘经理有技术倾向。

但这并不意味着你应该走这条路,我相信有其他方法可以让你的数据科学沟通技能更上一层楼。

一种方法是考虑做你自己的激情项目,并与你的朋友分享你的发现。如果他们喜欢,那么我肯定你做得很好!

我希望这篇文章能够帮助读者提高他们在数据科学领域的交流能力!

如果你喜欢这篇文章,可以考虑看看我在自己的个人网站上免费写的其他文章!

[## 鲍比·马尔乔诺

数据分析师

www.bobbymuljono.com](https://www.bobbymuljono.com/)

尽情享受吧!

用感应偏置增强你的模型性能

原文:https://towardsdatascience.com/supercharge-your-model-performance-with-inductive-bias-48559dba5133?source=collection_archive---------32-----------------------

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

照片由 CC0 的 Martin Vorel 拍摄——公共领域许可证

实践教程

如何更聪明地工作,而不是更努力:在机器学习模型中编码现实生活中的对称性可以提高其准确性几个数量级!

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

对称无处不在;他们包围了我们。

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

雪花:GL kvs 2/CC BY-SA(https://creative commons . org/licenses/BY-SA/4.0)、Romanesco:Jacopo Werther/CC BY-SA(https://creative commons . org/licenses/BY-SA/3.0)、蜂巢:Pixabay license

从雪花美丽的规则形状、romanesco 的自相似(分形)结构到蜂巢的六边形图案。

大自然似乎在寻找对称。事实上,我们存在的规律展示了太多的对称:物理学家谈到时间和空间的平移对称。他们的意思是,像重力这样的力和几百万年前的作用方式是一样的,它们在悉尼和纽约之间没有变化。

他们的另一个最爱,旋转对称,简单地说,当你从不同的角度看一个物体时,它的属性不会改变。

对称的例子不胜枚举,其中一些比另一些更容易理解(洛伦兹对称,说明在惯性系中共同运动的观察者的光速是相同的,可能已经逃过了不太精通物理的头脑)。

尽管其中一些对称性对人类来说是显而易见的,但大多数机器学习模型却出人意料地忽视了它们的存在。我举一个我自己工作中的例子:

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

bin im Garten/CC BY-SA(【https://creativecommons.org/licenses/by-sa/3.0】T4)

粗略地说,我研究的目标是使用 ML 来仅从结构信息预测分子的性质。这意味着,我得到了一个原子列表,以及它们的坐标。

对于一个水分子,它看起来像这样:

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

原子的坐标可以方便地概括在矩阵中,矩阵中的行对应于原子,列分别对应于 x、y 和 z 位置。我想预测将分子分裂成它的组成原子需要多少能量(原子化能量)。我可以通过训练神经网络 F 来做到这一点,神经网络 F 使用原始坐标作为特征并输出能量:

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

假设我成功地在一个大而多样的分子数据集上训练了这个神经网络,并且我想要找到以下水分子的雾化能量:

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

你可能已经注意到,它只是我们原始分子的旋转版本。因此,它应该具有相同的雾化能量。我们有没有任何保证神经网络会尊重这个旋转对称?可惜没有。

更糟糕的是,如果我们简单地交换两个氢原子

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

网络可能再次给出完全不同的答案。相同原子的排序没有物理意义,只是源于神经网络功能形式的产物。理想情况下,我们希望神经网络输出尊重这种排列对称性(排列:“交换事物的顺序”),但如何做到呢?

在化学和物理的机器学习的早期,很快就清楚了模型需要观察这些对称性才能足够准确。因此,大量的努力致力于找出如何将对称性结合到 ML 算法中。如今,这通常是通过巧妙的特征工程和神经网络设计的结合来实现的。综合考察这些方法可以在这里找到【1】。所有这些方法的共同点是,它们以某种形式将归纳偏差引入到学习算法中。

学习算法的归纳偏差[……]是学习者用来预测尚未遇到的给定输入的输出的一组假设[2]

在旋转对称的情况下,这种归纳偏差可以表述为这样的假设:“任何在旋转下不是不变的信息都可以而且应该被忽略”

不管你是否意识到了这一点,如果你以前使用过任何机器学习模型,你都会遇到归纳偏差:

  • 线性回归基于因变量和协变量之间存在线性关系的假设。
  • k-最近邻分类器假设特征空间中的邻近性转化为输出空间中的邻近性。
  • 卷积神经网络假设输出对输入的平移基本不变(不考虑边界条件)。

虽然所有这些标准算法都有一些内在的偏差,但我想用一个例子来说明引入额外的假设如何能够大大提高您的模型的准确性。

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

Pixabay 许可证

示例:房地产价格模型

想象以下场景:

您的客户对买卖房地产感兴趣,并要求您创建一个机器学习模型,以准确预测建筑物的公平市场价值。幸运的是,训练数据很容易获得,但有些有限(大约 1000 个样本)。让事情变得复杂的是,除了价格之外,任何关于建筑的信息都是在单位级别上给出的,价格只适用于整个建筑。

为了简化我们的分析,让我们假设每栋建筑正好包含十个单元,并且我们有关于每个单元的以下信息:

  • 户型:零售、办公、居住空间
  • 单位面积(平方英尺)
  • 房间的数量
  • 窗墙比
  • 该单元位于哪一层(占总层数的比例)

我们的数据以表格形式出现,有 1000 行(样本数)和 51 列(5 个特征 x 10 个单位+总价)。让我们把模型输入(前 50 列)写成设计矩阵𝑋,因变量写成向量𝑦

线性回归

香草 LR

任何回归任务的良好起点总是线性回归,其目的是选择权重 w 以便模型预测

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

最小化均方误差

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

为了分析该模型对于我们的数据的表现如何,我们可以查看关于训练集大小的泛化误差(测试集上的误差)。绘制我们的结果,我们得到通常所说的学习曲线:

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

请注意,我们已经包括了一个基线模型,它只是预测训练集的平均价格。从这个情节中我们可以推断出几件事。我们看到,对于极小的训练集,基线模型比 LR 更准确,但是当我们处理较大的数据集时(注意对数-对数比例!)我们可以改进基线。但是 100 万美元的均方根误差(RMSE)并不是很大,对我们虚构的客户也没有用。我们希望做得更好…

置换不变 LR

让我们考虑一下对称性:在设计矩阵𝑋中以什么顺序排列重要吗?答案是:不。我们可以将第 1-5 列与第 6-10 列交换,但仍然期望建筑具有相同的净值。然而,我们的 Vanilla LR 无法准确捕捉到这一点,因为无法保证权重 15 与 610 相同。目标很明确:我们需要我们的模型在单位置换下保持不变。

让我们考虑一个稍微不同版本的设计矩阵,我们称之为𝑋̃。它的维数为 10000 x 5,是通过将每个单元(即每组五列)视为一个单独的数据点,从原始𝑋获得的。那么,线性回归就变成了

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

其中𝑧是每个单位的价格。不幸的是,我们无法获得𝑧(一个潜在变量),但我们可以假设𝑧和𝑦.之间存在某种关系因为我们想停留在线性模型的范围内,我们写道

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

简单地说,这意味着一栋建筑的价格是该建筑内每个单元价格的总和。通过引入适当的𝐿矩阵,我们可以写出𝑖所有建筑物的上述总和,从而

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

这让我们可以求解线性回归模型

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

实际上,𝐿𝑋̃意味着我们总结一栋建筑内所有单元的特征,因此,例如,我们只看每栋建筑的总面积,而不是每个单元的面积。所以对于线性回归来说,强加排列对称性真的是一个微不足道的任务。当我们转向内核方法时,使用这种更抽象的符号的优点将变得明显。

使用 LR 的排列不变版本,我们得到以下学习曲线:

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

虽然我们看到了较小数据集的实质性改进,但该模型似乎没有从数据中学习到太多东西,导致曲线变得平坦。这表明线性模型不足以表达训练数据中包含的所有细节。显然,线性假设太强,对于“健康”模型,我们期望学习曲线在对数标度上是线性的(表明预期的幂律行为)[3]。

高斯过程回归

普通探地雷达

让我们考虑一个更复杂的模型。我们有几个选择:神经网络当然很受欢迎,但众所周知,对于这样的小数据集,神经网络是不可靠的。有效选项包括基于树的方法和 k-means 方法。我个人最喜欢的是基于内核的方法,特别是高斯过程回归(GPR)

我们正在寻找一个函数𝑦=𝑓(𝑥),它将输入或自变量𝑥映射到因变量𝑦(价格)。在探地雷达中,我们采用贝叶斯方法来寻找这个函数,首先在所有可能的𝑓上指定一个先验,然后根据观察到的数据点(𝑋,𝑦).该先验通过具有协方差矩阵𝑘.的高斯过程来定义

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

高斯过程是随机变量的集合,任意有限个随机变量具有联合高斯分布[4]。

对于𝑥的任意值,输出𝑓(𝑥遵循正态分布。此外,𝑥和𝑥′这两个远点的输出是联合正态的,其协方差由𝑘(𝑥,𝑥′).定义在实践中,这意味着我们可以通过选择合适的协方差函数(也称为核)𝑘(𝑥,𝑥′).来确定拟合函数𝑓的形状

核的一个非常流行的选择是平方指数协方差(有时也称为径向基函数)

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

选择这个核,我们本质上在𝑓上设置了一个平滑条件,因为靠近在一起的点(意味着|𝑥−𝑥′|很小)将高度相关。

让我们回到我们的例子。一旦我们根据训练数据调整高斯过程,我们就可以对测试集进行预测。

使用我们的设计矩阵𝑋和目标值𝑦,模型预测给出如下

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

这看起来非常类似于线性回归,除了𝑋已经被𝑘(𝑋,𝑋).取代因为该方程在参数𝜔中是线性的,所以仍然可以直接求解:

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

请注意,我们包含了一个乘以单位矩阵 I 的参数𝜎。该参数用于模拟数据中存在的噪声,同时有助于避免矩阵求逆中的数值问题。

将我们的训练数据代入这些方程,我们得到以下学习曲线:

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

嗯,效果不太好。虽然与 LR 相比,我们赋予了该模型更多的表达能力,但其测试误差仍然与后者相当。我们的模型似乎过度拟合了数据。

置换不变探地雷达

我们再加回置换不变性。和以前一样,我们想解决辅助问题

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

和𝑦=𝐿𝑧.一起矩阵 L 保持与线性回归问题中相同。

在摆弄了一些术语之后,我们得到了下面的等式:

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

重新定义

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

我们恢复了 GPR 的原始形式

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

但是这次使用置换不变核𝑘̃。插入我们的数据,我们得到以下学习曲线:

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

万岁!通过使用置换不变性,我们已经能够将我们的最佳测试误差从大约 700,000 美元减少到 30,000 美元。此外,比例是线性的(对数-对数比例),这表明如果需要,我们可以通过收集更多的数据来进一步提高模型的准确性。

回到科学

我希望我已经能够说服你,在用机器学习模型拟合你的数据之前,有时停下来三思是值得的。通过简单地识别数据中的对称性,我们已经能够将模型精度提高 20 倍以上!

作为一个小小的奖励,如果你理解了这篇文章中的所有内容,你实际上离成为计算化学家更近了一步。

怎么会这样

如果你用“分子”代替“建筑”,用“原子”代替“单位”,我们实际上已经建立了一个化学和材料科学研究人员经常使用的模型[5]。该模型可以通过将分子表示为原子贡献的组合来预测分子的属性,如其能量。正如在我们的例子中,这些原子的贡献是未知的——我们只知道整个分子的能量——但我们仍然可以用潜在变量 *z,*来表述这个问题,从而使其排列不变。

如果你喜欢这篇文章,请在这里关注我,在 twitter 或在LinkedIn上联系。

参考

[1]贝勒尔,约尔格。"展望:原子模拟的机器学习潜力."化学物理学报 145.17 (2016): 170901。

[2]https://en.wikipedia.org/wiki/Inductive_bias

[3] C. Cortes,L. D. Jackel,S. A. Solla,V. Vapnik 和 J. S. Denker,学习曲线:渐近值和收敛速度,神经信息处理系统的进展(柯伦联合公司,1994),
第 327-334 页

[4]c . e . Rasmussen & c . k . I . Williams,机器学习的高斯过程,麻省理工学院出版社,2006 年,ISBN 026218253X。c 2006 麻省理工学院

[5] Bartók,Albert P .等人,“高斯近似势:没有电子的量子力学的精确性”物理审查函 104.13 (2010): 136403。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值