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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

你的机器人外科医生有多好?递归网络的预测技巧

原文:https://towardsdatascience.com/how-good-is-your-robot-surgeon-predicting-skill-with-recurrent-networks-ef992617aaf4?source=collection_archive---------58-----------------------

Keras 时间序列分类(LSTM)

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

照片 171474770 罗马塞特—Dreamstime.com

问题是

培养有能力的外科医生是所有外科住院医师计划的目标。在手术室评估技能时,评估通常依赖于对住院医师的技术表现进行评分的外科专家。这种手术评估可以做得更好,原因很明显:

传统的评估速度慢,主观性强,并且受到外科专家数量的限制。

未来的手术室将会不同。配备了机器人辅助手术系统,培训师和学员可以访问 数字化程序数据的宝库——为新一代分析奠定基础,以支持有效、客观和适时的手术反馈。

在这篇文章中,我们展示了深度学习在快速准确的外科技能评估中的应用。

数据

JIGSAWS 数据集源于约翰霍普金斯大学和机器人系统设计和制造的先驱直觉外科公司的合作。迄今为止,这是唯一公开的微创机器人手术数据集。

我们使用 运动学运动传感器 (总共 76 个)作为我们的输入变量,每个传感器都是从具有不同手术经验的八名外科医生那里收集的一系列运动数据。每位外科医生执行三项手术任务——打结穿针缝合——,每项任务重复 5 次。

我们使用 技能等级 作为我们的目标变量。技能水平反映为基于受训者实践小时数的自我报告标签。一名专家是报告超过 100 小时的人,一名中级是 10-100 小时之间的人,一名新手是总手术机器人操作时间低于 10 小时的人。

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

图 JIGSAWS 数据集的汇总表。

准备

我们的实验试图仅使用运动数据来解决分类问题。该过程包括将运动数据处理成多变量时间序列,该时间序列用于输出专家(E)中级(I)新手(N) 标签,这取决于数据中展示的技能水平。

数据加载(熊猫的文本文件)

JIGSAWS 提供了一个广泛的文件目录——其中很多我们在本教程中并不需要(例如,视频数据、实验数据)。为了简化我们的导航,让我们创建一个单独的目录,只复制包含运动学运动和技能水平的文本文件(meta_files):

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

图 2:便于导航的新文件夹架构

对于从多个文件夹中读入多个文本文件的 Python 代码,参见笔记本

此时,我们希望将包含在 meta_files 中的标签合并到它们各自的外科医生。例如,我们需要识别外科医生“打结 B”为 N ,打结 C 为 I ,打结 D 为 E 。我们应用一个自定义函数merge_labels() 来简化这个过程:

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

图 3:合并传感器数据和技能等级标签

数据扩充

每个时间序列的典型长度在 1 到 5 分钟之间。每个手术有 8 个外科医生和每个外科医生 5 次试验,JIGSAWS 数据集只包含 40 个用于训练每个手术任务模型的独立样本。为了克服训练限制,我们遵循王等人在本文中使用的两步数据扩充程序:

  1. 行分割运动数据 对于运动数据中的每个行样本,我们将 MTM 和 PSM 通道分成两个实例,并将它们转换为不同的样本。例如,每两行样本将有 38 个传感器,而不是每行样本 76 个传感器。这个“分裂和加倍”步骤是允许的,因为 MTM 和 PSM 传感器由于机器人控制臂的位置差异而不相关。原始传感器数据的每个通道都经过 z 归一化处理,以最小化每个传感器缩放范围的差异。
  2. 提取子序列
    它的工作原理是从传感器数据中捕获固定长度(窗口大小)的观察值,并在序列中逐步移动该窗口(步长)以提取子序列。通过将step_size设置为window_size参数的一半,我们创建了具有 50%重叠区域的时间窗口(尽管仍未确定重叠窗口是否优于非重叠技术)。以下是 Python 代码:

在原始数据集上的这种数据扩充程序使得模型能够分别被供给 8754、6052 和 4134 个作物用于缝合、穿针和打结。总而言之,训练我们的递归神经网络的输入数量更合理!

关于数据增强的更多内容,王等。艾尔的手稿启发了我们的策略。

Keras 的数据格式

在我们准备将注意力转向模型构建之前,我们需要以适合 Keras 的格式准备数据。如果你愿意,你可以在笔记本中进一步挖掘,但为了简洁起见,以下是主要观点:

  • **重塑裁剪后的数据:**Keras 中的递归层只接受三维数组,因此我们必须将我们的 2D 熊猫数据帧重塑为 3D 数组。为了有效地处理每个手术任务,我们使用自定义函数shape_inputs()
  • **分离输入/输出:**在裁剪和整形后,分离你的动作数据和技能等级值很重要。如果您试图过早地执行分离,您的 X 输入和 Y 标签将会错位。
  • 格式输入变量: X 输入必须手动转换成张量,因为我们使用的是一个由列表组成的数组,而不是一个由 Numpy 数组组成的数组。 Keras 不支持数组列表。
  • **格式化输出变量:**对于 Y 标签,我们需要将输出变量——一个基于字符串的向量array([’N’, ’N’, ’N’, …, ‘E’, ‘E’, ‘E’], dtype=’<U1')—转换成一个整数编码的 2D 独热数组。如果做得不正确,Keras 会因为使用了特定的损失函数而抛出一个错误(下一节将详细介绍)。我们应用来自笔记本的自定义函数encode()进行整数编码。然后,我们应用张量流函数to_categorical(),进行一键编码。
**## How our output variable should be formatted for Keras**
# array([[0., 0., 1.],
       [0., 0., 1.],
       [0., 0., 1.],
       ...,
       [0., 0., 1.],
       [0., 0., 1.],
       [0., 0., 1.]], dtype=float32)

建模

关于递归神经网络(RNN)如何工作的更多信息,安德鲁·卡帕西关于 RNN 计算和长期短期记忆(LSTM)的文章是一个很好的阅读材料。

我们使用 Keras 序列模型类型来构建递归神经网络,这允许逐层构建。我们选择 3 种不同的架构来为每个手术任务训练单独的模型,制作 9 个 rnn 进行比较。虽然有比下图更复杂的构造 RNN 的方法,但单层 LSTM 设置效果很好。以下是每种体系结构使用的层:

  • 简单 RNN: 1 简单 RNN 层。1 个全连接密集层,具有 3 个输出类和 sigmoid 激活。
  • 深 RNN: 2 简单 RNN 层和返回序列。1 个全连接密集层,具有 3 个输出类和 sigmoid 激活。
  • 单层 LSTM: 1 层 LSTM。1 个全连接密集层,具有 3 个输出类和 sigmoid 激活。

LSTM RNN 胜过浅水和深水 RNN。这很直观,因为 LSTM 使用了一个更强大的更新方程,它能更好地从长序列的输入中获取信息。

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

图 4:按手术任务、模型类型分类的准确性

使用特征融合技术,相关工作的最高准确率达到 99%。LSTM 似乎在没有过度拟合的情况下表现得和那些方法一样好(学习曲线在笔记本中显示)。**现在,在写这篇文章的时候,我了解到对于分类问题,**的 F1 分数通常比准确度更好,尤其是当与假阳性相关的成本大于假阴性的成本时(反之亦然)。我们的结果仅使用精度度量给出,因此在重复实验中比较 F1 是值得的。

结论

在这篇文章中,我们展示了一种用递归网络对运动时间序列数据建模的方法。我们发现强有力的支持,LSTM 可以是一个有效的工具进行手术技能评估。

对整合的必要关注

随着手术室的注意力转向机器人辅助手术系统,对来自这些平台的数据进行操作的需求将成为焦点。技能预测代表了卫生工作者培训的一个令人兴奋的新方向,但就其本身而言,如果不对医院工作人员进行大量投资,以加深他们对(1) 机器学习可以做什么和(2) 一旦做出预测,应该采取什么行动的知识,则不会产生影响。了解技能水平后,我们如何帮助外科医生达到或超过基准分数?对于患者来说,我们如何确保在新的数字能力下坚持最高的安全和质量标准?

下一个外科手术时代将需要卓越的数据科学和发展,但也需要变革管理和实施。

与这篇文章相关的源代码/笔记本可以在https://github.com/teamlu/roboticsurgery找到。

谷歌搜索如何可能永远存在

原文:https://towardsdatascience.com/how-google-search-might-exist-forever-5510dbb5e3fa?source=collection_archive---------75-----------------------

软件哲学

我们今天构建的软件正在为数百年的相关性而奋斗。

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

Eclipse 的软件进化故事情节。2010 年迈克尔小川奈那。

自 1997 年 9 月 15 日开放以来,oogle Search 一直是领先的网络搜索引擎。JavaScript 是一种 web 编程语言,由 Brendan Eich 于 1995 年发明。大多数网站的设计,包括谷歌搜索,都是基于 JavaScript 语言的。此外,47 年前创建于 1972 年的 C 编程语言影响了 JavaScript。C 的最新版本是版本 18(2018),该语言仍然广泛用于嵌入式编程以及整个 Windows、Linux 和 macOS 操作系统。甚至 iPhones 和 Androids 都运行在一些 C 代码上。我们将使用我们今天编写的软件几个世纪。

很难想象像谷歌搜索这样的产品会永远存在。但是可口可乐呢?它已经存在了大约 200 年了。它做得很好,甚至比以前更好。一个神奇的产品应该持续数百年,很难说谷歌搜索的发明没有让任何人感到惊讶。谷歌搜索是如此广泛和普遍,甚至牛津词典在 2006 年将“谷歌”作为及物动词加入。那么谷歌搜索怎么才能消失呢?

所有的软件都在竞争它们的使用。当软件被使用时,由于获得了像金钱、反馈和开发这样的资源,它更容易竞争使用。一个新的软件必须在另一个软件的设计中找到仅仅是基本的缺陷,才能做出一个伟大的“解决方案”或得到支持的正当理由。人们不能仅仅因为一个全新的软件拥有另一个软件没有的特性,就指望它能击败竞争对手。

游戏引擎市场由来已久,竞争非常激烈。各种图形游戏引擎已经存在了几十年,但是从来没有一个好的选项是免费的。我们有虚幻引擎,曾经需要付费,现在收取 5%的版税。Unity 是另一个从 2005 年就存在的。它的特点是基于每月订阅的计划。您必须联系其支持团队来协商源代码访问,因为它受到保密协议的保护。

其他较小的游戏引擎争夺市场空间,主要是在 2D,因为它需要大量的研究和开发才能在 3D 空间竞争。除了 CryEngine,它的用户基数很小,但却是所有引擎中最好的 3D 渲染引擎之一,因为它在发布虚幻引擎 4 时失去了大部分用户。然后,它将其引擎订阅计划从每月一次改为类似的基于 5%版税的收入费用。其他引擎如 GameMaker Studio 2 和 Construct 3 都是面向 2D 的,因为独立开发者和爱好者是他们争夺的目标受众。

软件通常是根据一种理念设计的。一些理念可能包括:简单、功能性、健壮性、具有尖端特性。虚幻引擎和 CryEngine 一直都是关于高级特性的,而 Unity 更关注实体-组件-系统工作流的健壮性。尽管软件是围绕他们的第一个理念设计的,但这并不能阻止他们在开发过程中改变路线来获得或保持他们的市场份额。Blender 朝着面向键盘的用户体验的方向发展,但是一年前,Blender 2.82 的发布有了全新的用户界面和更好的面向鼠标的工作流程。Blender 带来了其他面向鼠标的编辑器的客户,如 Maya、3DS Max 和 Cinema 4D。使用搅拌机的最大好处是什么?

这是免费的。

免费是我们需要讨论的主要话题。越来越多的软件被免费提供。我知道自由开放源码软件社区不相信所有的艺术作品都值得免费复制,或者我们需要放弃我们的版权。他们认为用来谋生的工具应该是免费的。更不用说,许多爱好者会免费提供其他类型的工具和游戏。

自由/开源软件项目 Godot Engine 是市场上相对较新的游戏引擎。它的主要卖点是完全免费,而且完全靠捐赠赚钱。自 2014 年出现以来,该引擎一直在努力增加用户渴望的功能,比如极具竞争力的 3D 图形。

等等,什么?

对,没错。社区大部分都处理好了。对引擎的捐赠(截至本文撰写之日,每月 12,100 美元)支付给一些项目所有者,让他们全职从事引擎的研究和开发工作。这意味着,自由软件具有自由和社区运行的所有好处,可以在一个高度稳定的专业发展的市场中竞争,就像 unity 和虚幻引擎一样。尽管 Godot 在功能和用户方面比这两个项目略小,但我并不怀疑它会达到那个地步。

只要谷歌搜索被使用并且有利可图,它就会一直存在。这并不是说它也将永远是最常用的搜索引擎。谷歌不尊重隐私,所以可能会有一点空间来挤压 searc- oh 等待。

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

没关系。

GPU 如何加速深度学习

原文:https://towardsdatascience.com/how-gpus-accelerate-deep-learning-3d9dec44667a?source=collection_archive---------15-----------------------

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

Unsplash 上由娜娜杜瓦拍摄的照片

神经网络令人尴尬的并行性

神经网络和深度学习并不是最近才出现的方法。事实上,他们已经很老了。感知机是第一个神经网络,由弗兰克·罗森布拉特于 1958 年创建。甚至无处不在的深度学习架构的构建模块的发明也大多发生在 20 世纪末。例如,Yann LeCun 等人在 1989 年的里程碑式论文中将卷积网络引入应用于手写邮政编码识别中。

为什么深度学习革命要等几十年?

一个主要原因是计算成本。即使是最小的架构也可能有数十层和数百万个参数,因此在期间重复计算梯度的计算成本非常高。在足够大的数据集上,训练通常需要几天甚至几周的时间。现在,你可以在几个小时之内在你的笔记本上训练出一个最先进的模型。

有三大进步将深度学习从一种研究工具带到了我们生活的几乎所有领域。这些是反向传播随机梯度下降GPU 计算。在这篇文章中,我们将深入后者,并看到神经网络实际上是令人尴尬的并行算法,可以用来将计算成本提高几个数量级。

一大堆线性代数

深度神经网络乍一看似乎很复杂。然而,如果我们放大它们,我们可以看到它的组件在大多数情况下都非常简单。正如总是才华横溢的 xkcd 所说,网络(主要)是一堆线性代数。

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

来源: xkcd

在训练过程中,最常用的函数是矩阵乘法和加法等基本的线性代数运算。情况很简单:如果你调用一个函数无数次,从函数调用中减去一点点时间可能会增加很多。

使用 GPU-s 不仅提供了一个小的改进,他们增压整个过程。为了了解这是如何做到的,让我们以激活为例。

假设φ是一个激活函数比如 ReLU 或者 Sigmoid。应用于前一层的输出

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

结果是

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

(这同样适用于图像等多维输入。)

这需要循环遍历向量并计算每个元素的值。有两种方法可以加快计算速度。首先,我们可以更快地计算每个*【φ(xᵢ】。其次,我们可以在并行中同时计算出 φ(x)、φ(x)、…、φ(x) 的值。事实上,这是令人尴尬的并行*,这意味着计算可以并行化,而无需任何显著的额外工作。

这些年来,更快地做事变得困难多了。过去,处理器的时钟速度几乎每年都要翻一番,但最近趋于平稳。现代处理器设计已经达到了这样一个程度,在单元中装入更多的晶体管会产生量子力学障碍。

然而,并行计算这些值并不需要更快的处理器,只需要更多的处理器。正如我们将要看到的,这就是 GPU 的工作方式。

GPU 计算的原理

图形处理单元,简称 GPU,是为了创建和处理图像而开发的。由于每个像素的值都可以独立于其他像素进行计算,因此拥有许多较弱的处理器比一个非常强的处理器依次进行计算要好。

这与我们对深度学习模型的情况相同。大多数操作可以很容易地分解成可以独立完成的部分。

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

英伟达费米架构。对此已经有了很多改进,但它很好地说明了这一点。来源: NVIDIA Fermi 架构白皮书

打个比方,让我们考虑一家餐馆,它必须大规模生产炸薯条。要做到这一点,工人们必须将土豆削皮、切片并油炸。雇人削土豆的成本比购买更多的厨房机器人来完成这项任务要高得多。即使机器人速度较慢,你也可以从预算中购买更多,所以总体来说这个过程会更快。

并行模式

当谈到并行编程时,人们可以将计算架构分为四个不同的类别。这是迈克尔·j·弗林在 1966 年提出的,一直沿用至今。

  1. SsingleI建造,SsingleDATA(SISD)
  2. 单个 I 构造, M 多个 D ata (SIMD)
  3. 多条指令,单个数据(MISD)
  4. M 多个 I 个指令, M 个多个 D 个 ata (MIMD)

多核处理器是 MIMD,而 GPU 是 SIMD。深度学习是一个 SIMD 非常适合解决的问题。当您计算激活时,需要执行完全相同的操作,每个调用使用不同的数据。

延迟与吞吐量

为了更详细地描述 GPU 优于 CPU 的地方,我们需要了解一下延迟吞吐量。延迟是完成单个任务所需的时间,而吞吐量是单位时间内完成的任务数。

简而言之,GPU 可以提供更好的吞吐量,但代价是延迟。对于令人尴尬的并行任务,如矩阵计算,这可以提供一个数量级的性能改善。但是,它不太适合复杂的任务,比如运行操作系统。

另一方面,CPU 针对延迟进行了优化,而不是吞吐量。它们能做的远不止浮点计算。

通用 GPU 编程

实际上,通用 GPU 编程在很长一段时间内都是不可用的。GPU 只能处理图形,如果你想利用它们的处理能力,你需要学习图形编程语言,比如 OpenGL。这不太实际,而且进入门槛很高。

这种情况一直持续到 2007 年,当时 NVIDIA 推出了 CUDA 框架,这是 C 的一个扩展,为 GPU 计算提供了一个 API。这极大地缩短了用户的学习曲线。快进几年:现代深度学习框架在我们没有明确知道的情况下使用 GPU。

用于深度学习的 GPU 计算

所以,我们已经讨论了 GPU 计算如何用于深度学习,但是我们还没有看到效果。下表显示了 2017 年制定的基准。虽然它是三年前制造的,但它仍然证明了速度的数量级提高。

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

各种深度学习框架的 CPU vs GPU 基准测试。(基准是从 2017 年开始的,所以它考虑了从那个时候开始的技术状态。然而,观点仍然成立:GPU 在深度学习方面优于 CPU。)来源:基准测试最先进的深度学习软件工具

现代深度学习框架如何使用 GPU

直接用 CUDA 编程,自己写内核,并不是最容易的事情。值得庆幸的是,TensorFlow 和 PyTorch 等现代深度学习框架并不要求你这么做。在幕后,计算密集型部分是使用 NVIDIA 的深度学习库 cuDNN 在 CUDA 中编写的。这些都是从 Python 调用的,根本不需要直接使用。Python 在这方面真的很强:可以很容易的和 C 结合,既强大又好用。

这类似于 NumPy 在幕后的工作方式:它非常快,因为它的函数是直接用 c 编写的。

[## NumPy 真的比 Python 快吗?

是的,但前提是你知道如何使用它。

towardsdatascience.com](/is-numpy-really-faster-than-python-aaa9f8afb5d7)

需要搭建深度学习钻机吗?

如果你想自己训练深度学习模型,你有几个选择。首先,您可以为自己构建一台 GPU 机器,然而,这可能是一项重大投资。幸运的是,你不需要这样做:亚马逊和谷歌等云提供商提供远程 GPU 实例来工作。如果你想免费访问资源,请查看谷歌实验室,它提供免费访问 GPU 实例。

结论

深度学习在计算上非常密集。几十年来,训练神经网络受到硬件的限制。即使相对较小的模型也需要训练数天,而在巨大的数据集上训练大型架构是不可能的。

但是随着通用计算 GPU 编程的出现,深度学习爆发了。GPU 擅长并行编程,由于这些算法可以非常高效地并行化,因此可以将训练和推理的速度加快几个数量级。

这为快速增长开辟了道路。现在,即使相对便宜的商用计算机也能训练出最先进的模型。结合 TensorFlow 和 PyTorch 等令人惊叹的开源工具,人们每天都在构建令人敬畏的东西。这真是出外勤的大好时机。

如果你喜欢把机器学习概念拆开,理解是什么让它们运转,我们有很多共同点。看看我的博客,我经常在那里发表这样的技术文章!

女朋友有多幸福?

原文:https://towardsdatascience.com/how-happy-is-my-girlfriend-be895381d7c2?source=collection_archive---------35-----------------------

让我们用自然语言处理来找出答案…

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

图片—作者。很抱歉噩梦般的燃料。

在我之前的博客中,我调查了我和我的伴侣之间的消息量在过去五年中是如何变化的。我们能够得出一些有趣的数字分析(我们通常在一天中的什么时候交换信息,这是如何受到生活在一起的影响的,等等。)

[## 一段感情 5 年后的信息是什么样的

或者,用 Python 处理时间序列数据(和表情符号)的一些很酷的方法

towardsdatascience.com](/what-5-years-of-a-relationships-messages-look-like-45921155e3f2)

给定一个文本数据的宝库,或“语料库,我们可以做的不仅仅是简单地查看信息的数量——现代数据科学方法允许我们分析它们的质量。这些技术的复杂程度各不相同;我们可以探索哪些词在语料库中最常见,但我们也可以开始理解一个句子的潜在情感。

然而,在我们做这些之前,有一些基础工作要做——文本数据和其他数据一样需要清理和准备。令人高兴的是,Python 库 NLTK(自然语言工具包)内置了许多关键函数和方法。

  1. **删除停用词和标点:**停用词是“填充符”,否则会使文本分析变得混乱(例如,“I”、“and”、“had”等)。)NLTK 附带了多种语言的预定义停用词列表。我们还想去掉标点符号,因为默认情况下,Python 不知道“Hello!”和“你好?”—如果我们试图记录独特的单词,这是没有用的(出于类似的原因,我们希望将所有单词都用小写字母表示)。
  2. **对语料库进行标记化:**这是获取一个字符串,并将其转换为单个单词列表的过程。使用 NLTK 这样做可以让我们访问一组内置的方法,例如,词频计数。
  3. **对记号进行词条归类:**这是一个更加语言学上微妙的过程,但最终涉及到将每个单词转换成它们各自的“词条”。通俗地说,这一般就是把复数名词变成单数形式(“mice”变成“mouse”),动词变成不定式(“running”、“ran”变成“run”)。这将有助于消除噪音,使我们更容易提取“情绪”。注意——NLTK 的 lemmatizer 本质上是一个大的预填充数据库,它考虑了英语的许多边缘情况。

所有这些组合成的代码如下所示:

**from** nltk **import** word_tokenize
**from** nltk.corpus **import** stopwords
**from** nltk.stem.wordnet **import** WordNetLemmatizer
**import** string***#Get all the stop words in the English language***
stopwords_list = stopwords.words('english')***#Add punctuation to this list***
stopwords_list += list(string.punctuation)***#Create tokens from the corpus and strip out stop words***
tokens = word_tokenize(corpus)
tokens_stopped = [w.lower() for w in tokens if w not in stopwords_list]***#Create and use a lemmatizer object***
lemmatizer = WordNetLemmatizer()
tokens_lem = lemmatizer(tokens_stopped)

注意——我做了两次这个记号化/符号化过程,一次是针对我的消息,一次是针对我伙伴的消息。

计数单词

首先(也是最明显的)要做的事情是查看我们的消息语料库中最常见的单词。我们可以通过 NLTK 轻松做到这一点:

**from** nltk **import** FreqDist***#Count the frequency of unique words***
FreqDist(tokens_lem).most_common()***#This returns a list of tuples
#The first element of each tuple is the word
#The second is the frequency******#Thus, we can get a list of the most common words:*** common_words = [i[0] for i in FreqDist(tokens_lem).most_common(20)]

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

事实上,这并没有揭示什么特别有趣的事情(除了我是一个“耶”型的男生,而她是一个“好”型的女生)。在我之前的博客中,我注意到我的伴侣比我更热衷于使用表情符号。理论上,我们可以使用表情符号开始分析我们信息的情感内容。然而,这一系列的调查因为这样一个事实而有些泡汤了,那就是我显然更少地使用表情符号来表达我的感情,而是简单地表示“是”。

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

粉色区域的表情符号是我的伴侣用得比我多的表情符号。蓝色区域没有表情符号。

当分析语料库中事物的频率时,思考短语可能更有见地。让我们来看看哪个相邻的单词配对(或者用术语来说就是“双字母”)对我们每个人来说最常见。同样,这可以使用内置的 NLTK 方法来解决:

**import** nltk
**from** nltk.collocations **import** ****#Create an object to find bigrams in a given corpus***
bigram_finder = BigramCollocationFinder.from_words(tokens_lem)***#Create an object to measure bigrams*** bigram_measures = nltk.collocations.BigramAssocMeasures()***#Combine these to find the frequency of each bigram***
bi_scored = bigram_finder.score_ngrams(bigram_measures.raw_freq)***#Again, this produces a list of tuples
#where the first element is the bigram and
#the second is the share of all bigrams it represents***

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

“jóJT”在我搭档的母语匈牙利语中是“晚安”的意思

这开始揭示更多的东西。“哦上帝”比“哦”传达了更多的含义。然而,许多这些二元模型仍然是通用的——我们显然有常用短语(在两种语言中,不少!)是我们睡觉前自动翻到的,我女朋友的前两个单词中有四分之三是由“Okay”这个词组成的。

这让我们想到了逐点互信息 (PMI)的概念。这是一种观察语料库中两个词的相互依赖性的方法。例如,像“Okay”和“Good”这样的词可能会有较低的 PMI 分数,它们可能会作为二元模型出现几次,但这两个词会与其他词一起在二元模型中出现多次。然而,像“波多黎各”和“波多黎各”这样的词会有很高的分数,因为它们很少彼此独立出现。

我们可以使用 NLTK 计算 PMI 分数:

***#Create a bigram finder object that filters out
#bigrams that appear fewer than 15 times***
bigram_finder.apply_freq_filter(15)***#Create PMI scores using the existing
#bigram measures object***
pmi_score = bi_finder_c.score_ngrams(bigram_measures.pmi)

一般来说,了解哪些单词具有很强的相互依赖性可以让数据科学家更好地理解单词的潜在含义(语言学家团队通过使用由数千个维基百科页面组成的语料库来实现这一点)。然而,在我们的例子中,它允许我们挑选出一些更有趣的“常用”短语。

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

似乎我的信息主要是关于购买晚餐(“炒菜”、“红薯”、“即食餐”)和工作(“南非”、“基地报告”、“关键发现”、“神圣的狗屎?”).她的更多是去一些地方(“莱斯特广场”、“国王十字车站”、“金丝雀码头”、“护照检查”),告诉我把钱放进我们的联合账户。

情感分析

当然,虽然这让我们对我们的信息内容有了一些了解,但它不会自动给我们一种情绪的感觉。显然,我谈了很多关于南非人的事情,但这并没有告诉我们我对这个问题中的南非人的想法或感受。

为了进行这种“情绪”分析,我们可以使用一个非常聪明的叫做 VADER 的软件包。根据 GitHub 页面:

VADER (Valence Aware 字典和情感推理器)是一个基于词典和规则的情感分析工具,专门针对社交媒体中表达的情感,对其他领域的文本也很有效。

听起来很符合我们的需求。VADER 可以通过标准的 pip 安装下载,之后,它可以用来从我们的文本数据中推断情感。VADER 的实现非常简单。要分析给定字符串的情感,我们只需执行以下操作:

**from** vaderSentiment.vaderSentiment **import** SentimentIntensityAnalyzer**#Instantiate a sentiment analysis object**
analyzer = SentimentIntensityAnalyzer()**#Pass a sentence, e.g. my_string, through it**
sentiment = analyzer.polarity_scores(my_string)

这将为给定的字符串返回一个包含四种内容的字典:

  • 【pos】:有正面情绪的词占多少比例
  • 【负面】:有负面情绪的词占多少比例
  • 【neu】:有中性情绪的词占多少比例
  • ‘compound’:字符串中每个单词的价分值的加权组合,在-1(非常负)和 1(非常正)之间标准化。本质上,它是对一个给定句子的情绪的一个单一的测量。

VADER 的非凡之处在于它能够根据上下文来推断单词的意思。例如:

**IN:** "The book was good."
**OUT:** *{'pos': 0.492, 'neu': 0.508, 'neg': 0.0, 'compound': 0.4404,}***IN:** "The plot was good, but the characters are uncompelling and the dialog is not great."
**OUT:** *{'pos': 0.094, 'neu': 0.579, 'neg': 0.327, 'compound': -0.7042,}*

它知道,当“伟大”放在“不”这个词之后,它的意思就变得非常不同了。它还可以解释标点符号(例如,许多感叹号)、表情符号和俚语的使用。

为了便于我们的分析,我根据发件人将邮件分开,然后按天分组。换句话说,对于给定的一天,我已经将我的所有消息连接到一个单独的段落中,并将我的伙伴的所有消息连接到一个单独的段落中。然后,这些段落通过 SentimentIntensityAnalyzer 对象进行传递。

让我们首先关注一天中有积极或消极情绪的单词的份额。在下面的散点图中,每个点代表我或我的伴侣一天发送的信息,它的位置由当天积极的和消极的信息所占的份额决定。注意——这没有考虑到中性词,这就是为什么这些点不是沿着一条线排列的。

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

线上的点代表负面词汇比正面词汇多的日子。图表左下角的点代表使用非常中性语言的日子。

我们注意到粉红色的集群(我的伴侣的信息)更靠右,表明她的语言更积极。然而,我们可以看到,同一个集群的平均水平也略高,这表明她的语言同时更消极。相反,我的语言倾向于情感中立,集中在散点图的左下方。令人鼓舞的是,我们可以看到许多点聚集在 x 轴上——没有负面词汇被分享的日子。

我们还可以看到,随着时间的推移,我们的语言变得不那么“积极”。这可能是因为我们面对面说得更多,这意味着信息更具功能性(“你能在回家的路上买红薯吗?”)从而在情感上更加中立。

如果我们将相同的数据绘制成一个时间序列,这是显而易见的,其中红色轴线上方的高度代表给定一天中积极词汇的份额,下方的负高度代表消极词汇的份额。

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

不出所料,搬到一起后,我们的语言变得不那么明显积极(相反,话是面对面说的)。五年来,我们语言的负面性一直保持相对一致,尽管值得注意的是,我的语言比她的语言更积极的唯一时期是在我辞职之后……相关性,而不是因果关系,肯定吗?

当然,VADER 软件包提供的最先进的指标是“复合”指标,它将总体情绪评级归结为一个完整的字符串。我们可以把它绘制成一个时间序列。

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

正如我用这些数据绘制的以前的时间序列一样,我们看到了很多波动,即使使用滚动平均也是如此。然而,有一些非常具体的个人事件/时间段,我和我的伴侣可以用来解释我们在这里看到的一些更明显的起伏——例如,她在 2017 年第三季度和 2019 年第四季度的下降,以及我在 2019 年第三季度获得一只小猫后对生活的看法的改善……

这一切都表明了对文本数据的分析是多么强大,我们的个性和情感有多少可以从我们每天产生的大量数字文本数据中推断出来。

感谢一路阅读到博客结尾!我很乐意听到任何关于上述分析的评论,或者这篇文章涉及的任何概念。欢迎在下方留言,或者通过 LinkedIn 联系我。

克什米尔对新型冠状病毒有什么反应?数据科学视角。

原文:https://towardsdatascience.com/how-has-kashmir-reacted-to-the-novel-coronavirus-e1b165f30c5a?source=collection_archive---------47-----------------------

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

图片来源: kashmirthroughmylens 通过 Instagram

一份分析迄今为止克什米尔山谷新冠肺炎疫情趋势的简短报告。

新冠肺炎的爆发已经对全球普通民众和医护人员构成威胁。由于对新型冠状病毒的了解仍然有限,因此必须了解每个地区的疫情趋势,开拓和拓宽研究空间。这项研究试图通过分析克什米尔的新冠肺炎疫情数据来补充这一探索,并更好地了解克什米尔在全球的地位。

数据集详情:

  • 全球新冠肺炎数据:约翰霍普金斯大学医学院。
  • 查谟和克什米尔的新冠肺炎数据:查谟和克什米尔政府信息和公共关系部通过其 twitter @diprjk 提供的官方数据。
  • 世界人口数据:世界银行
  • 全球测试数据:我们的数据世界

数据集限制和警告:

我们评估数据准确性和可靠性的能力有限,这给新冠肺炎数据分析和建模带来了不可量化的不确定性。与所有监测数据一样,由于报告偏差和查明偏差,存在局限性。此外,缺乏机会和诊断质量也可能影响数据。因此,对不同地区进行一对一的数据分析可能不是苹果与苹果之间的比较。

尽管如此,在可靠数据有限的情况下对不同区域进行探索性数据分析,仍有助于正确看待形势,也有助于回答一些关键问题。

克什米尔的新冠肺炎案例

克什米尔和世界其他地方一样,受到新冠肺炎疫情的影响,处于封锁状态。2020 年 3 月 18 日,克什米尔报告了首例新冠肺炎阳性病例。2020 年 3 月 19 日,克什米尔许多地区实行了封锁。

根据政府的最新信息。截至 2020 年 5 月 12 日,克什米尔山谷有 844 例确诊病例,400 例痊愈,9 例死亡。

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

数据来源:查谟&克什米尔政府信息和公共关系部,使用 covidkashmir.org 的 API 下载。截至 2020 年 5 月 12 日的最新数据

拉平曲线

每天病例数量的急剧增加证明了这一流行病的迅速蔓延。通过减缓传播来减少疫情传播的努力,导致病例数上升速度减缓,进入平台期,最终导致每日报告的病例数下降。

如果太多人同时寻求医疗保健,卫生系统的能力可能会不堪重负。因此,重要的是要认识到,我们每个人都有责任让曲线变平

美国、义大利、西班牙等许多国家都经历过世界上最严重的新冠肺炎疫情。

韩国是一个突出的例子。作为中国以外世界上最大的初始疫情发生国之一,中国成功地控制了疫情的传播,导致每日报告的病例数下降。

将意大利与韩国进行比较,可以看出差异有多么巨大。2020 年 3 月 1 日,意大利只有 1694 例,而韩国有 3736 例。三周后,也就是 3 月 22 日,意大利的病例数激增至 59138 例,而韩国的病例数仅翻了一番,达到 8961 例(来源:约翰霍普金斯大学新冠肺炎医学数据库)。

韩国成功的关键是早期和积极使用大规模检测以及用于接触者追踪和病例隔离以及接触者隔离的新型数字技术。

鉴于全球各地的这些经验,探索克什米尔在新冠肺炎疫情中的地位是值得的。

下图比较了克什米尔和新冠肺炎阳性病例领先的一些国家。由于每个地区在疫情中面临不同的分布,下图仅帮助我们从更广泛的角度看待情况,并不提供关于一个地区比其他地区风险更高的任何信息。

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

数据来源:全球新冠肺炎数据— 约翰霍普金斯大学新冠肺炎医学数据仓库 ,克什米尔新冠肺炎数据—查谟政府信息与公共关系部&克什米尔(使用 covidkashmir.org 的 API 下载);截至 2020 年 5 月 12 日的最新数据

关于地块的技术细节:

  1. x 轴:每个国家每百万人口中出现 5 例阳性病例后的天数。
  2. y 轴(对数刻度):每百万人口中新冠肺炎阳性病例数。

此图表使用每日新新冠肺炎病例来显示不同地区的疫情趋势。对于每个地区,数据点从每百万人中新冠肺炎阳性病例总数超过 5 的那一天开始,一直到可用的最新数据。例如,对于克什米尔,数据从 2020 年 3 月 30 日(首次记录的每百万新冠肺炎阳性病例数> 5 的日期)开始,到 2020 年 5 月 12 日(本文撰写之日)结束。

关键要点:

  1. 每百万人中的阳性病例仍在上升。最初的趋势不像许多其他地区那样陡峭(或者也可能是没有进行足够的测试,或者测试没有击中正确的目标人群——在后面的部分中有更多这方面的内容)。
  2. 即使最初每百万阳性病例数没有急剧的趋势,但这一数字已经增加了近 1.4 倍(从 2020 年 5 月 2 日的每百万 87.97 例增加到 2020 年 5 月 12 日的每百万 122.52 例)。并且自 2020 年 4 月 24 日以来翻了近一番(2020 年 4 月 24 日每百万 57.63 例,至 2020 年 5 月 12 日每百万 122.52 例)。
  3. 当每天发现的新病例数量开始持续下降时,克什米尔的曲线将变得“平坦”。目前,每天发现的新病例数在 15-45 之间浮动。

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

数据来源:查谟&克什米尔政府信息和公共关系部,使用 covidkashmir.org 的 API 下载。截至 2020 年 5 月 12 日的最新数据

然而,任何地区的病例数增加并不一定意味着风险增加。更有可能的是,这意味着测试更容易获得,或者报告更完整。相反,关键是降低感染率(Ro ),导致平台期,并最终减少每日报告的病例数。

测试

注:没有克什米尔山谷单独的测试数据。因此,在本节中,报告的数字是查谟&克什米尔的总和,除非另有说明。

在 2020 年 3 月 16 日举行的关于新冠肺炎的媒体吹风会上,世卫组织总干事在开幕致辞中说,随着社交距离的迅速升级,检测、隔离和接触者追踪是新冠肺炎应对的支柱。

不检测和不知道谁被感染会让感染不被发现地传播,以后会给卫生保健系统带来灾难。

不同地区的可用测试数据是否具有可比性?

如前所述,数据的不一致性和不可靠性可能无法让我们准确了解疫情传播或检测情况。本节的分析只是为了更好地理解查谟和克什米尔以及世界其他地区的检测数字。这种分析也可以让我们了解 J&K 是否在测试中采取了适当的措施,以及是否有立即增加测试的需要。

以韩国、新西兰和冰岛为例,这些地区已经成功地使曲线变平,这项分析试图将人们的注意力吸引到一个有趣的相关性上——就目前检测到的阳性病例和检测数量而言,强生公司与这些地区相比如何?

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

数据来源:全球新冠肺炎数据— 约翰霍普金斯大学新冠肺炎医学数据仓库 ,克什米尔新冠肺炎数据—查谟政府信息与公共关系部&克什米尔(使用 covidkashmir.org 的 API 下载);截至 2020 年 5 月 12 日的最新数据

从这个图表中

  • 看起来每天在 J&K 的新新冠肺炎病例仍在上升。
  • 任何一天每百万人的新冠肺炎病例总数都低于其他地区,这是好事。但是这仅仅是迄今为止测试和报道的案例。
  • 南韩和纽西兰能够在疫情相对较早地展平曲线。截至 2020 年 5 月 12 日,J&K 的每百万新冠肺炎病例数为 82.90 例,趋势是否会朝着更平坦的轨迹发展,或者病例数是否会保持上升趋势,还有待观察。

上面的图没有揭示的重要一点是正在进行的测试的数量。尤其是那些处于疾病爆发早期的患者(因为传播是指数级的,一旦失去了大规模检测和隔离的初始窗口,疾病爆发的数量就会迅速增加)。

让我们看看南韩、纽西兰和冰岛在疫情早期进行了多少次检测(每百万人检测到的新冠肺炎阳性病例大约不到 50)。

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

数据来源:全球新冠肺炎数据— 约翰霍普金斯大学新冠肺炎医学数据仓库 ,克什米尔新冠肺炎数据—查谟政府信息与公共关系部&克什米尔(使用 covidkashmir.org 的 API 下载),世界人口数据— 世界银行 ,全球检测数据— 我们的世界在数据截至 2020 年 5 月 12 日的最新数据

对于每百万不到 50 例阳性新冠肺炎病例,韩国和新西兰的检测结果分别是强生的 2 倍和 4 倍。因此,可能是 J&K 错过了增加检测的早期窗口,导致未检测和未报告的病例数量增加。然而,该地区最近做了值得称赞的工作,将检测能力提高到每天近 3000 次。

但是在一个地区进行更多的检测不一定会降低风险或降低感染率。更重要的是,测试准确击中正确的人群(那些实际患有疾病的人群)的精确度。

例如,韩国的测试基于监控应用和先进技术。因此,即使人均检测次数相当或更少,韩国也能更准确地识别患病人群。

新西兰和冰岛继续每天将检测能力提高数倍,这有助于遏制新型冠状病毒在这些地区的传播。

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

数据来源:全球新冠肺炎数据— 约翰霍普金斯大学新冠肺炎医学数据仓库 ,克什米尔新冠肺炎数据—查谟政府信息与公共关系部&克什米尔(使用 covidkashmir.org 的 API 下载),世界人口数据— 世界银行 ,全球检测数据— 我们的世界在数据截至 2020 年 5 月 12 日的最新数据

虽然千分之几的检测是控制特定地区病毒传播的一个重要指标,但仍不足以了解全貌。

真实阳性率

根据政府的最新数据。J & K 共采集样本 53726 份,其中 J & K 阴性 52792 份,阳性 934 份。

真阳性率=总阳性/总检测数* 100 = 1.74%。

换句话说,截至 2020 年 5 月 12 日,在 J&K 接受新型冠状病毒测试的 57 人中有近 1 人被发现患有这种病毒。

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

数据来源:查谟&克什米尔政府信息和公共关系部,使用 covidkashmir.org 的 API 下载。截至 2020 年 5 月 12 日的最新数据

随着在 J&K 的测试增加,真实阳性率(TPR)一直在下降。2020 年 5 月 12 日 1.74%的真实阳性率相当低,表明:

-低水平的新冠肺炎疫情

-测试了错误的人

-测试质量不佳(或取样技术)

然而,真实的阳性率并不等同于任何地区新冠肺炎阳性病例的比例。实际病例数通过一个叫做患病率的指标来追踪。

流行的重要性

CDC 将患病率(有时称为患病率)定义为在特定时间点或特定时间段内,人群中患有特定疾病或属性的人数比例。

由于各种因素,如有限的检测、无症状病例、缺乏认识或甚至因社会耻辱而拒绝寻求医疗帮助,都可能导致未记录和未发现的病例。这些遗漏和未记录的病例造成了患病率和真阳性之间的差异。

未记录但具有传染性的病例比例是一个关键的流行病学特征,它调节了突发呼吸道病毒的疫情潜能[2–5]。这些未记录在案的感染取决于其传染性和数量,与其他情况相比,可能会使更多的人暴露于该病毒

像其他传染病一样,新冠肺炎的真实流行率仍然未知。哥伦比亚大学的公共卫生科学家研究了旅行数据和 Wuhan⁶.新型冠状病毒潜伏期和感染率的最新信息他们开发了一个数学模型来模拟该市早期的疫情爆发,并估计在 2020 年 1 月 23 日旅行限制之前,所有感染中有 86%是无记录的,这些无记录的感染是 79%有记录病例的传染源。这些关键发现可能会在具有不同控制、监测和报告实践的其他国家发生变化。然而,它们为增加大规模检测和准确报告提供了强有力的证据,以便能够确定新冠肺炎阳性病例的实际数量。

已知的挑战,如缺乏基础设施、缺乏对疾病的准备、经济因素或政治担忧,可能会导致扩大广泛检测的滞后。之前,对于其他传染病,如丙型肝炎的数学模型也进行了研究,以近似估计 disease⁷.的全面流行新冠肺炎也在研究类似的科学进展。

虽然截至 2020 年 5 月 12 日,J&K 报告的病例为 934 例,但像其他地方一样,同一时间范围内的真实流行率仍然未知。理想情况下,如果有一种方法可以估计疾病的流行程度,测试能力可以提高到这一水平(换句话说,如果病毒传播的趋势呈指数增长,那么理想情况下测试也应该呈指数增长,以检测所有受感染的病例)。如果通过使用接触追踪和其他手段对正确的目标人群进行检测,那么这种增加的检测可以导致最大流行病例的检测。这也许是韩国能够控制病毒的原因。

由于检测无法跟上病毒的传播,许多阳性病例仍未被发现,并继续成为活跃的携带者。越来越多的人从这些未被发现的活跃病例中被感染,结果,流行人群本身不断增加。

截至 2020 年 5 月 12 日,J&K 已经对每千名人口进行了 4.77 次测试,真实阳性率为 1.74%。如果接受检测的人群很好地代表了流行情况,并且如果这些假设和趋势在未来的检测中继续成立,那么该地区将能够迅速遏制病毒的传播。但是如果被检测的人群中缺少活跃的携带者,那么每天的新增病例将会持续上升。

总的来说,在给定时间内,大量的指标,如总检出病例数、每百万总检出病例数、总检测数、每百万总检测数或检测阳性率,不一定表明该地区处于高/低风险状态,也不一定表明对病毒的反应良好/不良。更确切地说,在给定时间,在给定区域,针对相应于相同时间的流行的测试池是对病毒良好反应的更好指标。

结论

新冠肺炎的爆发对全球普通民众和医护人员构成威胁。然而,关于这种新型病毒的知识仍然有限,但目前世界范围内的科学有了很大的进步。

截至 2020 年 5 月 12 日,J&K 每百万人口中有 82.90 例新冠肺炎阳性病例,而克什米尔山谷每百万人口中有 122.52 例新冠肺炎阳性病例。

检测能力每天都在增加,而真正的阳性率却在持续下降。但报告的新阳性病例总数尚未出现下降趋势,这对于使曲线变平很重要。

对于截至 2020 年 5 月 12 日报告和测试的人口,看起来克什米尔在遏制新型冠状病毒的传播方面做得不错。但每一天都是一场新的战斗,曲线随时可能飙升。因此,增加的测试、即将到来的持续社交距离的努力以及封锁将决定未来几周的形势,以将范式转变为可持续的曲线平坦化,新/活跃案例的数量将合理下降。

致谢

我要向美国疾病预防控制中心病毒性肝炎司全球卫生副主任 Francisco Averhoff 博士表示最深切的感谢,感谢他审阅并提供专业知识和见解,极大地改进了手稿。

我要感谢疾病预防控制中心病毒性肝炎实验室分部主任 Saleem Kamili 博士和克什米尔美国卫生保健医学教育学会&研究 (KASHMER)对这个项目的支持以及帮助建立与疾病预防控制中心专家的联系。

我还要感谢位于斯利那加 Soura 的 Sheri 克什米尔医学科学研究所(SKIMS)内科和肺部医学系主任 Parvaiz Koul 教授提供了有关克什米尔新冠肺炎疫情的专业知识。

感谢约翰·霍普金斯大学医学院提供了新冠肺炎的数据。感谢 covidkashmir.org 提供 API 从政府下载新冠肺炎的数据。J & K 的官方推特账号@ diprjk

参考文献

1.新冠肺炎国家应急中心,流行病学和病例管理小组,韩国疾病控制和预防中心新冠肺炎在韩国的接触传播:追踪接触者的新调查技术。公共卫生研究展望。 2020 年;11: 60–63

2.陈,袁 S,Kok KH,等。与 2019 年新型冠状病毒相关的家族性肺炎聚集性表明人与人之间的传播:一项家庭聚集性研究。柳叶刀。2020;s 0140–6736(20)30154–9。

3.2020 年 1 月 22 日中国武汉地区新型冠状病毒感染流行病学特征的实时初步评估。欧洲监视。2020;25(3):pii=2000044。

4.Munster VJ,Koopmans M,van Doremalen N,等.中国出现一种新型冠状病毒——影响评估的关键问题。英国医学博士。2020;DOI:10.1056/NEJMp2000929。

5.2019 年新型冠状病毒在武汉检疫隔离前输入中国的风险。MedRxiv。2020;19299.

6.李瑞云、森沛、、宋沂蒙、、万阳、杰弗里·沙曼·梅德西弗 2020 . 02 . 14 . 143533533304https://doi.org/10.1101/2020.02.14.20023127

7.阿马库,m .,布拉提尼,M. N .,柴布,e .,库蒂尼奥,f .,格林哈尔,d .,洛佩斯,L. F .,和马萨德,E. (2017)。从报告不足的年龄相关强制通知数据库中估计传染病的发病率。理论生物学&医学建模14 (1),23。https://doi.org/10.1186/s12976-017-0069-2

扎伊拉·穆斯塔山 是美国纽约的一名数据科学家。她于 2017 年获得了宾夕法尼亚大学的计算机科学硕士学位。她是一名研究员和科学家,对人工智能、数据科学和数学感兴趣,尤其是在应用于社会公益时。你可以在这里 找到更多关于她的技术贡献 。她喜欢旅行和探索新的地方。她认为旅行打开了不可想象的新的大门,通过接触不同的文化、风景和令人振奋的人,扩展了一个人的视野。

说唱和嘻哈音乐中的恐同症和厌女症

原文:https://towardsdatascience.com/how-has-the-usage-of-homophobic-and-misogynistic-slurs-in-rap-and-hip-hop-music-changed-over-time-cb30cb9a8436?source=collection_archive---------32-----------------------

随着时间的推移对连音符号用法的抒情分析

安库什·巴拉德瓦伊

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

Unsplash 上由 Namroud Gorguis 拍摄的照片

简介

随着说唱和嘻哈音乐的出现,争议似乎也随之而来,因为这种音乐类型因其音乐中描绘了恐同和厌女的主题而被反复指出(1,2)。在这种类型的音乐中使用亵渎的语言非常普遍,不幸的是,许多说唱和嘻哈音乐的亵渎内容包括贬低的引用,有时甚至描绘对女性的暴力(2)。此外,就像著名说唱歌手、东海岸嘻哈团体“吴唐帮”成员马索·曼恩说的那样,即使是最优秀的 MCs 也会避免被误解为同性恋,因为“你不能一边干别人,一边说自己是黑帮”。不用说,在说唱和嘻哈音乐中融入仇视同性恋和厌恶女性的主题令人担忧,特别是考虑到这种类型是年轻人最喜欢听的类型之一,引起了人们对这些主题对易受影响的思想的影响的担忧。然而,并不是所有的说唱歌手都仇视同性恋和厌恶女性。同样,并不是这一类型的每首歌或每张专辑都有恐同和厌女的主题。通过这个项目,将研究说唱和嘻哈专辑中同性恋恐惧和厌恶女性主题的表达随时间的变化。为此,将分析 1984 年至 2018 年期间 100 张说唱和嘻哈专辑中恐同和厌女诋毁的使用情况。因此,提出的问题如下:

随着时间的推移,说唱和嘻哈音乐中仇视同性恋和厌恶女性的辱骂是如何变化的?

流程

完成这个项目的代码是用 Python 3 放在一个 Jupyter 笔记本中的。

为了完成这个项目,需要大量的网络搜集。首先,需要一份要学习的专辑列表。这个链接上的列表包括了 100 张顶级说唱专辑,是从其他 25 张列表中汇总而来的,这意味着这个列表上的歌曲很好地概括了这张专辑在发行当年的风格标准。在将专辑列表抓取到熊猫数据框后,我开始担心随着时间的推移,这些专辑可能不会像我希望的那样分布均匀。主要是,我担心会过分强调旧专辑。为了消除我的焦虑,我发现,尽管分布确实稍微偏右,但大多数专辑在数据框架中的平均年份之前制作图表,我不应该太担心专辑在我的数据集中制作图表的年份的不平等表示:

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

我的数据集中相册的分布

下一步是收集每张专辑的曲目列表和专辑中每首曲目的歌词:genius.com 被用来获取每张专辑的曲目列表,以及每张专辑中每首歌的歌词。不幸的是,在这一步,我面临着一个看似不可能完成的任务,即收集大约 1863 个网址来搜集每首歌的歌词。幸运的是,通过注意到用于访问 genius.com 的 URL 具有可预测的模式,我有效地编译了数据帧中大多数歌曲的歌词,尽管不幸的是,由于我在尝试完全自动化歌词的 web 抓取器时出现的错误,我丢失了数据帧中大约 7.24%的原始歌曲。现在每首歌的歌词都在数据帧中,我可以继续进行文本分析。

我的文本分析方法的第一步是定义一个要搜索的恐同和厌女辱骂的列表。同性恋憎恶者名单被定义为包括娘娘腔、三色堇、鸡奸者、南希、仙女、同性恋、本特、同性恋、骑师、唐克。这份厌恶女人的诽谤清单被定义为包括*妓女、荡妇、荡妇、阴户、娘娘腔、同性恋、婊子、妓女、假正经、女同性恋。接下来,为了确定专辑中包含了多少厌恶女性和厌恶同性恋的污点,我首先找到了每张专辑中每个列表中每个污点的 TF-IDF 分数。TF-IDF 代表词频-逆文档频率,*并且是用于确定单词相对于整个语料库(在这种情况下,数据集中的所有相册)对文档(在这种情况下,相册)有多重要的度量。然后,对于每张专辑,对同性恋恐惧症和厌女症的评分将简单地是各自列表中每个污点的平均 TF-IDF 分数。通过这样做,我试图捕捉到相对于数据框架内所有其他专辑中相同词汇的使用,厌恶女性和厌恶同性恋的词汇对特定专辑有多重要。有了这些信息,终于到了阐述我的结果的时候了。

结果

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

说唱和嘻哈音乐中的连音符号用法

上面的图表展示了我的数据集中所有说唱和嘻哈专辑在特定年份的恐同症和厌女症的平均得分。虽然很难确定随着时间的推移,仇视同性恋的辱骂是否有所改变,但很明显,随着时间的推移,厌恶女性的辱骂越来越多。请注意,直到 20 世纪 90 年代末,专辑才开始使用比数据集中所有专辑发布的厌恶女性诋毁的平均数量更多的厌恶女性诋毁。特别是从这一点上看,似乎在每年发布的嘻哈和说唱音乐中,与使用恐同的污点相比,使用厌恶女人的污点有更多的变化。在计算了标准偏差之后,发现这是正确的,因为使用厌恶女性的辱骂的标准偏差比使用厌恶同性恋的辱骂的标准偏差高近五倍。

此外,我的分析发现,数据集中最害怕同性恋的艺术家如下:史努比·狗狗(或者,正如他在 *Doggystyle,*他在数据集中唯一的专辑《史努比·狗狗》发行时所知的那样),梅西·埃丽奥特和阿姆。我的分析还发现,数据集中最厌恶女性的艺术家如下:李尔·韦恩、D12 和波斯特马龙。同样,我的分析发现,最厌恶同性恋的三张专辑如下:史努比·多格的《狗狗风格》,坎耶·韦斯特的 808’s 和《心碎》,Run-D.M.C 的 Raising Hell ,最后,最厌恶女性的专辑如下:李尔·韦恩的《Tha Carter III》,德瑞医生的 2001 ,阿姆的 The Marshall Mathers LP

结论

作为这个项目的结果,我相信我已经产生了以下关键见解:

1.说唱和嘻哈音乐中对女性歧视的使用越来越多。

2.rap 和 hip hop 专辑中厌恶女性的污点每年的使用标准偏差大于 rap 和 hip hop 专辑中厌恶同性恋的污点每年的使用标准偏差。

3.根据我使用的数据和分析,史努比·道格、梅西·埃丽奥特和阿姆是使用最多同性恋辱骂的艺术家。

4.根据我使用的数据和分析,李尔·韦恩、D12 和波斯特马龙是使用最歧视女性的诋毁的艺术家。

5.根据我使用的数据和分析,Snoop Dogg 的 Doggystyle ,Kanye West 的 808’s 和 Heartbreak ,Run-D.M.C .的 Raising Hell 是使用最多同性恋憎恶的专辑。

6.根据我使用的数据和分析,李尔·韦恩的《Tha Carter III》、德瑞医生的《2001》和阿姆的《马歇尔·马瑟斯唱片》是使用最歧视女性的诽谤的专辑。

这个项目使用的完整代码可以在这里查看

参考文献

[1] J. Weiner,无同性恋的兴起和嘻哈同性恋恐惧症的改变 (2009),Slate.com

[2] C. E. Kubrin,R. Weitzer,说唱音乐中的厌女症 (2009),男人和男性气质

拥有一个博客如何推进你作为数据科学家的职业生涯

原文:https://towardsdatascience.com/how-having-a-blog-can-advance-your-career-as-a-data-scientist-245270cc281e?source=collection_archive---------25-----------------------

提示:这也适用于其他职业

内容创作一开始可能会很吓人。我知道对我来说是这样——在比我更有经验的人面前分享想法和观点。尽管如此,即使作为一名初级到中级数据科学家(或软件工程师),拥有一个博客也可以启动你的职业生涯。

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

Unsplash 上由 Brad Neathery 拍摄的照片

我于 2019 年 8 月开始写博客,大约在我开始第一份数据科学家工作的 4 个月后。起初这听起来可能很奇怪,因为有很多人有更多的不写博客的经验。我不知道为什么。

可能是时间不够,但也可能不是——因为每周发表两篇文章对我来说需要 4-8 个小时——这取决于我需要准备的代码量。缺乏意愿和动力是更可能的情况——主要是因为人们没有意识到写博客的好处。

写博客有很多好处——这将是今天文章的主题。这些好处来自一个人的角度,当然,但很容易转移。唯一的问题是——写博客需要行动,需要花很多时间才能看到结果——这不是每个人都愿意做的。我肯定你不属于这一类。

所以,事不宜迟,让我们从第一个好处开始吧。

1 —人们看到你做的事情

博客是一个巨大的声誉建设者。我还是一名大学生,有大学教授走过来称赞我的写作。如果有的话——写作技巧只会随着时间而提高。从你欣赏的人那里获得积极的反馈可以保持动力水平。

另一群你想看你内容的人是潜在雇主。他们有两种方法可以找到你:

  1. 通过活跃在你写作的平台上
  2. 点击简历中提供的链接

第一种选择稍微好一点,因为他们可以看到你的进步。如果你了解自己的能力,潜在的雇主很可能会同意你的观点和意见,让你更容易被雇佣。

从这一点来看,工作面试应该成为一种形式。当然,如果你名下有 3 个帖子,你不能指望这种情况会发生,但你需要从某个地方开始。从小事做起,但更重要的是——从今天开始。

作为一名自由职业的数据科学家,拥有一个博客也对你有好处——因为它提供了某个领域专业知识的证明,而这不是一个普通的自由职业者所拥有的。因此,你要么得到更多的工作,要么收取更多的费用,或者两者兼而有之。

总而言之,每个人都想成为数据科学家。因此,你需要从人群中脱颖而出。每个人都知道熊猫Scikit-Learn ,但是成为能够教这些的人将会为你创造奇迹。

2 —你学得更快

数据科学和其他技术专业充满了高级和不那么容易理解的主题。让我给你看一个例子。

大约一周前,我对用 Python 将时间序列作为一项监督任务感兴趣。这样做将允许我使用像极端梯度推进(XGBoost)这样的算法。唯一的问题是——绝对没有人能在网上演示如何预测新的、看不见的数据!指南只告诉你如何在测试集上进行预测,这是不够的。

所以我决定为这个任务编写自己的类——XGBTimeSeries——基于 XGBRegressor ,并且现在能够处理每小时、每天、每月和每年的时间序列数据。它也创造了不同的变量——比如是不是周末,值是不是出现在工作时间,以及其他许多变量——仅仅基于频率。

是的,我打算写很多关于它的东西。因为这不是最简单的事情,而且模型类大约有 400 行代码,我怀疑它是否适合写在一篇文章中。更现实的情况是,我会把它做成一门迷你课程。如果你对那样的东西感兴趣,请告诉我。

无论如何,我在这里有点跑题了,但我希望你能抓住要点。这里有一句我特别喜欢的话:

“如果你不能简单地解释它,你就不够了解它。”——阿尔伯特·爱因斯坦

这句话适用于博客,因为它迫使你把事情看得简单到它们本来的样子。写一些你不理解的东西是没有意义的,因为这会让你和读者都感到困惑。

首先确保你理解了这该死的东西,然后试着像你的读者是一个 5 岁的孩子一样解释它。

3 —兼职赚钱

最后说一下钱的问题。没人能告诉你到底能赚多少钱,但大约 10 个月后,我每个月能赚 15000 美元到 10000 美元 3K——包括联盟营销。最重要的是,写博客让我有了种选择。我来详细说明一下。

如果你只是朝九晚五地工作,你就依赖于那份工作。如果你明天停止工作,会发生什么?写博客给你提供了选择,因为如果你做得足够好,你可以有多种收入来源——这样就不会完全依赖于你的日常工作。

而这只是冰山一角。写关于你所做的事情的博客会在你周围创造一个个人品牌。当然,这不会在一个月内发生,但要等几年。我还没到那一步,但我已经看到了个人品牌在我日常生活中的影响。

“我写了好文章,所以读者应该来找我”——是一种不好的态度。还有,事情也不是这样运作的。作为个人品牌所有者,你有责任让读者访问你的博客。这就是我最近在更好的数据科学所做的事情,这并不是世界上最容易的事情。

托管您的内容使您能够以您想要的方式控制它,发布您的产品,并推广代销商的产品,所有这些从长远来看都可以带来可观的收入。

还有,*“我不知道该写些什么”*的事情出现了很多。这让我感到惊讶,因为数据科学每天都在发展,新事物总是不断涌现。有很多东西要写,而且随着时间的推移,主题列表会越来越大。

在你走之前

总结一下——尽快开博客将会启动你的职业生涯——只要你的想法不是完全错误的。但我相信你知道你在说什么。

有一些令人惊讶的免费地方可以开始,比如 Blogger 或 Medium——后者有固定的受众,这减少了营销工作。你只需要始终如一地写出高质量的内容,并让它吸引读者。有很多方法可以扩展它,但是你应该总是从简单开始——否则,它很容易耗尽。

你有什么想法?拥有一个博客对你的职业生涯有什么影响?欢迎在评论区留下你的想法。感谢阅读。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

加入我的私人邮件列表,获取更多有用的见解。

我如何在卡格尔 OSIC 肺纤维化进展竞赛中获得第一名

原文:https://towardsdatascience.com/how-i-achieved-the-1st-place-in-kaggle-osic-pulmonary-fibrosis-progression-competition-e410962c4edc?source=collection_archive---------30-----------------------

结果证明这是相当随机的

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

https://unsplash.com/photos/6BVinN0Y7Xk

介绍

OSIC 肺纤维化进展比赛期间,参赛者被要求根据他们肺部的 ct 扫描和一些额外的表格数据字段来预测患者肺功能下降的严重程度。挑战在于使用机器学习技术,以影像、元数据和基线 FVC 作为输入进行预测。这项任务并不简单。由于可用的数据量相当低,使用传统的计算机视觉方法来建模 CT 扫描和患者 FVC 值之间的相关性并不容易。此外,公共排行榜分数仅基于 15%的测试数据,与验证完全不相关,这使得很难选择最佳模型进行最终提交。

总的来说,在这里解释比赛的所有微妙之处真的很难,所以我建议访问上面的比赛链接,如果你真的感兴趣,可以自己阅读一下!

模型的输入和输出

如上所述,输入数据由 dicom 格式的胸部 ct 扫描组成,这形成了 3d 胸部 CT 扫描加上一些附加的元数据字段,这些字段一般描述了每个患者。这是一个 CT 扫描的切片例子。

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

https://www . ka ggle . com/andradaolteanu/lung-fibrosis-competition-EDA-DICOM-prep

这是患者附加元数据字段的示例。

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

https://www . ka ggle . com/andradaolteanu/lung-fibrosis-competition-EDA-DICOM-prep

对于每个患者,都有一个初始 CT 扫描,对应于患者元数据中的第一周和其他周,描述了患者 FVC 在此期间的变化。

对于每个患者的测试集,只给出了第一周的数据,以及最初的 CT 扫描。这项任务不仅要预测接下来几周的“FVC”值,还要显示每次预测的“置信度”得分。

评估指标

谈到这个指标,对数似然分数被用来给所有的提交打分。

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

https://www . ka ggle . com/c/osic-肺纤维化-进展/概述/评估

这是我的 python 实现。

def loglikelihood(real, pred, sigmas):
    sigmasClipped = np.maximum(sigmas, 70)
    delta = np.abs(real - pred)
    deltaClipped = np.minimum(delta, 1000)
    metric = - np.sqrt(2) * deltaClipped / sigmasClipped - np.log(np.sqrt(2) * sigmasClipped)
    return np.mean(metric)

验证技术

说到验证,我试图让它尽可能接近组织者使用的评分方法。最初,他们只对最后 3 个预测评分(每个患者最后 3 周),所以我开发了一个类似的验证框架。对于测试集,我只包括不在训练集中的患者,并且只使用最后 3 周进行评分。不过,这个验证方案与排行榜没有很好的关联。

kf = KFold(n_splits = 5, shuffle = True, random_state = 4444)foldMetrics = []
for trIdsIdx, valIdsIdx in kf.split(trainData['PatientID'].unique()):
    trIds, valIds = trainData['PatientID'].unique()[trIdsIdx], trainData['PatientID'].unique()[valIdsIdx]
    tr = trainData[trainData['PatientID'].apply(lambda x: x in trIds)]
    val = trainData[trainData['PatientID'].apply(lambda x: x in valIds)].reset_index(drop=True)

    valIdx = []
    for idx in val.groupby('PatientID')['target_week'].apply(lambda x: np.array(x.index[np.in1d(np.array(x), np.array(sorted(x)[-3:]))])):
        valIdx.extend(idx)

    val = val.iloc[valIdx]

    #######################
    ### FIT MODEL HERE
    #######################

    foldMetrics.append(loglikelihood(val['target_FVC'].values, val_pred, sigmas))
print(np.mean(foldMetrics))

最佳模特

我最好的模型原来是两个模型的混合,实际上是在比赛结束前由其他 kagglers 引入的:EfficientNet B5 和分位数回归密集神经网络。EfficientNet 使用 CT 扫描切片和表格数据,而分位数回归则依赖于表格数据。由于这两个模型最初的构建有点不同,混合它们是一个很好的主意,因为它们的预测具有多样性。

以下是我如何在私人排行榜上获得第一名的具体步骤。

  • 从头开始训练这两个模型。对于 Effnet b5,我选择了 30 个时期,对于分位数回归,我选择了 600 个时期进行训练
  • 我做了一些特征过滤,通过移除预先计算的“百分比”特征,这使得预测更糟(可能因为这个特征是预先计算的)
  • 在模型混合方面,我只是给了分位数回归模型更高的分数,因为从我的角度来看它更可靠。

在训练时间方面,Effnet b5 在单个 Nvidia Titan RTX GPU 卡上进行了大约 5 分钟的微调。分位数回归在推断过程中直接在 Kaggle 机器上训练,训练时间不超过 30 秒。一般来说,所有的推理过程在 Kaggle 机器上只需要 3 分钟。

此外,我想给一个小提示,关于我如何倾向于选择提交和验证预测的正确性,总的来说,这对我帮助很大。当我训练好新模型并收到提交文件时,我总是绘制预测值的分布图,以及预测本身的分布图。下面是预测图的样子:

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

这些是我的模型子集的测试集“置信度”的图,有时通过查看这些图,您可以识别奇怪的模型行为并找到一个 bug。总的来说,我总是非常仔细地分析预测,并在提交任何东西之前建立许多图表。

什么没起作用

我尝试了很多方法,但在 LB 和 CV 上几乎都不太管用。这里有几件事:

  • 使用公共笔记本中的方法计算肺容量,并将其作为两个模型的特征进行传递
  • 测试了其他模型、XGBoost、表格数据的对数回归。多亏了我的简历,很快就发现树在这里不起作用,所以从比赛开始我就没有对树做过任何事情。
  • 因为我测试的是简单的模型,所以我第二次提交的是一个非常简单的逻辑回归模型,顺便说一下,它落在了青铜区
  • CT 扫描的增强效果很差,也许我应该花更多的时间来测试它们
  • 图像的直方图特征也不起作用。
  • 如果你已经分析了模型输出,你可能已经注意到那些尖峰信号(包括信心和 FVC ),移除它们是完全有意义的,但是它们对我的验证不起作用,所以我让它保持原样。尽管如此,我仍然对它在私有测试集上不工作的原因感到困惑。

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

信心激增

最后的话

这是我在 Kaggle 上的第一枚金牌,我真的很高兴。我要感谢所有 Kaggle 社区将这么多笔记本公之于众并活跃在论坛上!没有这个,我不会在这次比赛和之前的所有比赛中学到那么多。

下面,我将附上我的最终提交笔记本的链接,以及 Kaggle writeup 和 Github repo。

第一名笔记本

青铜区非常简单的解决方案

Kaggle 报道

Github 库

我如何通过优化合适的地点和时间成为一名数据分析师

原文:https://towardsdatascience.com/how-i-became-a-data-analyst-by-optimizing-the-right-place-and-time-bb068546ff17?source=collection_archive---------19-----------------------

如果你没有准备好利用这种情况,正确的地点和正确的时间就没有任何意义。让我们找出我们能做些什么来充分利用我们面前的机会。

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

Unsplash 上由 Daoudi Aissa 拍摄的照片

在我的家人和朋友中,我是出了名的“关键人物”,因为我几乎能找到任何东西。汽车、电话、家具,应有尽有。我可能以惊人的价格购买过任何产品。问题是,虽然我没有任何特殊的联系或秘密公式来找出何时何地得到大量的交易。我只是准备在机会出现时抓住它,了解交易通常发生在哪里,最重要的是;我很有耐心。我猜这三点就是秘方。

我总是从家人和朋友那里听到这些,

“他们怎么这么幸运能得到那样一份理想的工作?”

“他们是如何找到如此出色的搭档的?”

“你在跟我开玩笑吗?他们可以随时远程工作?”

事情是这样的,我打赌他们不仅仅是*幸运,*他们可能一直在努力克服困难。你不能完全消除运气因素,但你可以向有利于你的方向倾斜。我将向您介绍当我打算从审计员转行成为数据分析师时,我是如何扭转不利局面的。

(本文的第一部分更多的是关于我如何在错误的地方,对数据分析的角色准备不足,以及我如何发现要走上数据分析的道路。如果你想跳过这些细节,那就直接跳到标题: 向正确的地方前进 )。

在错误的地方

高中毕业后,我去了阿联酋的一所大学,成为一名建筑工程师。我知道我喜欢与数学打交道,并对与有形的东西打交道充满热情,所以这似乎正合我的胃口。我早期遇到的问题是,我所有的微积分和物理教授主要用阿拉伯语授课。在交谈中,我能想到的最多的是,“ wahid dejaj sandweech,minfadlik ”,翻译过来就是“一份鸡肉三明治,谢谢”。理解如何寻找衍生品是一件难事。

对于成为一名建筑工程师的目标来说,这绝对是我个人目标的错误地点。我知道我必须搬家,但我父亲的规定是,如果他要支付学费,就必须在亚洲(那里的高等教育要便宜得多)。我和他做了笔交易。我请他给我买一张去美国的机票,和一点买车的钱,剩下的我来处理。令人惊讶的是他同意了(谢谢爸爸!),于是我就上路了,但到达后不久悲剧就发生了。

当我到达德克萨斯时,我给自己买了一辆 1999 年的尼桑 Altima,已经跑了 83,000 多英里。这是一个完整的垃圾,但它是我的第一辆垃圾车,我喜欢它。(糟糕到我不得不用螺丝刀来换挡)。

从那以后,我试图报名参加德州大学奥斯汀分校的建筑课程,但他们不会转让任何学分,我不得不从头开始。我之前的项目已经进行了两年,不想在 24 岁毕业。当时我很沮丧,因为我一心想要成为一名建筑师。这是大约在*《我如何遇见你的母亲》*播出的时候,所以我认为成为像泰德·莫斯比那样的建筑师将是超越蜜蜂膝盖的。

在与家人和朋友交谈后,我改变了主意,决定成为一名财务审计员。我知道,我在想什么?当时,这非常有意义。我知道关于我的两件事,这两件事今天仍然适用;我喜欢玩数字,我喜欢不断学习。当时的财务审计员似乎符合要求,我的很多学分都可以转过去。我在 23 岁的高龄毕业,获得了金融和会计双学位,在 GameStop 找到了一份审计员的工作,成为了一家审计公司的审计顾问,为最大的医药分销商之一工作,这变成了有史以来最单调的职业生涯。

回顾财务和流程并不是我想要的那种玩弄数字的方式,几个周期之后,我觉得我没有学到任何新东西。我成了一个没有灵魂的隔间幽灵,每天上班下班。又一次,我在错误的地方

做了 4 年审计员后,我知道有些事情必须改变。我又一次走错了地方,如果我现在不做出改变,我担心可能会太迟了。

在我最后的几份工作中,我还负责报告我们审计的整体团队进度。我发现我工作中的那一小部分是最令人愉快的。我开始研究它的美学,组织信息,设计图表,使它尽可能的易读。很有趣。然后我开始摆弄这些数字,看看我是否能预测我们将提前(或推迟)多长时间完成给定的审计。然后我突然想到,我其实在工作中很开心。如果我能一直这样做呢?

我开始阅读不同的分析师角色,与同事交谈,并很快发现我的公司有自己的数据科学团队。我那位出色的主管认识数据科学团队中的一些人,并安排了一次对他们的采访。我尽力展示我的热情,以及我自学的东西,但这还不够。我对这个角色没有足够的准备。

朝着正确的方向前进

在我第一次因为没有得到数据科学团队的职位而受挫后,我要求与招聘经理再次会面,以了解我缺乏什么技能以及我需要在哪些方面得到支持。他给我的建议很可靠:

  1. 学习 SQL 和 Python 或者 R
  2. 在小公司工作,最好是科技初创公司

精通 SQL 对于简单地查询任何数据库都是必要的。这是分析师的基本技能,就像 Excel 对于会计师一样。学习 Python 或 R 之类的语言对于提供更多分析见解至关重要,并为数据科学职业铺平道路。

在小公司找工作也是天才之举。初创企业缺乏资源,所以即使你有一点技术技能,你也可以打赌你会被借用来帮助其他团队。这实际上是把我自己定位在了正确的位置上**。**

我去赛马了。我知道我想在哪里着陆,我也有一张如何到达那里的粗略路线图。首先,我开始在 Udacity 学习 SQL 和 Python 课程。这是一个很好的资源,它帮助我学习了 SQL 和 Python 的基础知识,以及关于使用特定 Python 库进行分析的课程,比如 Numpy 和 Pandas。如果你想看我参加的确切课程,请查看下面的链接(下面的链接是附属链接,如果你购买课程,我可能会得到补偿):

[## 在线数据分析师课程| Udacity | Udacity

纳米学位计划与下载教学大纲的先决知识,你应该有工作经验…

www.dpbolvw.net](http://www.dpbolvw.net/t270ft1zt0GQJKPKKKGIKPJNIKI)

与此同时,我开始在小公司找工作。即使我没有做好 100%的准备,我也想尝试获得面试机会,修改我的简历,尽可能多地了解内部信息。我不得不尽可能从每个角度优化。

我居住的许多公司(俄亥俄州哥伦布市)都是大型老牌公司,有很多招聘资源,所以我必须扩大搜索范围。我开始在纽约和旧金山找工作。www.builtin.com 是一个很好的资源。BuiltIn 专注于为纽约、旧金山、丹佛、奥斯汀等地区的小型科技初创企业提供就业机会。这是一个很好的资源,可以用来寻找适合我的公司类型。

经过多次简历重新设计,从我失败的电话面试中给招聘人员发信息寻求反馈,以及不断学习,我在纽约的 Squarespace 找到了一份内部控制分析师的工作。不是数据分析师的角色,但对我来说是退而求其次的事情。尽管我仍然是财务团队的一员,但我必须与数据工程团队密切合作,向他们提供我们的系统需求,以便他们进行构建。我让自己更接近我的最终目标。

我最终会测试这些系统,如果出了问题,就必须开罚单。我以此为契机,深入研究数据,试图自己找出问题所在。我是否正确并不重要。我不仅输入了错误,还输入了我的假设。有时候我是对的,很多时候我是错的,但我每次都学到了东西。我获得了真正的工作经验。

在 Squarespace 工作了将近两年后,我在数据工程、分析和科学团队成员中建立了很多联系。我从他们那里学到了很多东西,在如何继续我的学习道路上,他们比任何文章都更好地指导了我。最终,我开始在纽约的不同科技公司申请一个真正的数据分析师职位。你瞧,这次我参加了几个面试!不幸的是,与其他候选人相比,我每次都因“*没有足够的经验”*而被拒绝。我提出在证明自己之前做临时工,而且我的要价低于市场价。我只想迈出第一步。

有一天我走运了。我哥哥告诉我,俄亥俄州一家金融科技初创公司 Root Insurance 的招聘网站上有一些数据分析师的职位。一开始我也没多想。我申请了,就像我申请所有其他嘲笑我的名单一样。过了一个月,我收到一封邮件,要求打电话!在我和招聘人员通完电话后,我在网上跟踪了一下招聘经理,结果发现他和我的表弟小世界有联系!我给我表哥打了个电话,他和招聘经理进行了一次谈话。我不确定谈话进行得如何,或者说了些什么,但我只能想象它有所帮助。

我提交了一份工作样本,并亲自面试,他们说我是他们遇到的最好的候选人,我被惊呆了。它真的发生了!他们提出了一个提议,我接受了。

长话短说

这是一个很大的咀嚼,但主要观点来自轶事如下:

  1. 知道自己想去哪里。你需要知道你想要什么或者你想去哪里,否则没有方向。这花了我一段时间,但保持我对数字的热情,就像它们是谜题一样,不断学习的需求使我意识到数据分析是我需要去的地方。
  2. 准备是关键。你可以在一天的每一个小时都希望得到所有梦想中的工作,但它什么也不会做。你需要学习怎样才能得到你想要的,然后开始学习、训练、实践。不惜一切代价。这就是为什么我花钱上在线课程并寻找专业人士。我需要做好各方面的准备。
  3. 身体力行抓住新的机会。对于我想要的每一件事,我都确保自己正朝着正确的方向前进。从阿联酋到德克萨斯到纽约。我去了我认为下一个机会会出现的地方。
  4. 要有耐心。我知道这很难。达到目标是成功的一半以上,你朝着目标迈出的每一步都是一项新技能,新的思维过程,以及你获得的更多知识。你仅仅通过尝试就成功了,所以坚持下去。你没什么可失去的。

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

约翰·汤纳在 Unsplash 上的照片

“平静的大海造就不了熟练的水手”——英国谚语

我碰巧得到了一份数据分析师的工作,这似乎很幸运,因为我的表弟是招聘经理的朋友,但问题是,你可能已经认识一个朋友或家庭成员,他们认识你想进入的领域的某个人。唯一不同的是,我做好了充分的准备来抓住这个机会。如果我没有学习 SQL 和 Python,没有与数据工程师、分析师和科学家合作,没有为我申请的每一个职位不断修改我的简历,那么无论我的堂兄是否帮助我,我都不会为这个机会做好充分的面试准备。我花了大约两年时间才成为一名数据分析师,也许还需要两年时间才能成为一名数据科学家。在那之前,我会继续准备,直到我的机会出现。

快乐学习!

如果你喜欢这篇文章,并想了解我是如何为转行更新简历的,请看下面这篇我写的文章:

[## 如何为转行重新设计简历

让我们看看如何改变典型的简历,使你的简历从提交包中脱颖而出。

uxdesign.cc](https://uxdesign.cc/how-to-design-a-resume-for-a-career-change-f4d5f1f0ed1)

我是如何在没有学位和训练营的情况下,在疫情成为一名软件开发人员的

原文:https://towardsdatascience.com/how-i-became-a-software-developer-during-the-pandemic-without-a-degree-or-a-bootcamp-ef7a4184efde?source=collection_archive---------0-----------------------

作为一名自学成才的学生,我在一年内找到了我梦想中的工作,以下是我从这次经历中学到的东西

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

对 Unsplash 的信贷。

在 2018 年,我很沮丧,没有动力,我认为自己是个失败者,我认为我太笨了,无法完成我的学位或学习任何东西,我没有生活的方向,只想一切都结束。
两年后,一年在国外工作,另一年致力于学习,我对自己有了完全不同的看法,周一我开始了令人兴奋的新开发工作。

经过三年的学习,我鼓起了很大的勇气(也说服了我的父母)离开了我的大学,在里斯本接受了一份不认识任何人也不懂任何语言的工作,但这是一次帮助我找到自我的美妙经历。离开里斯本重新开始学习需要更多的勇气和决心,但我做到了,因为我知道我的梦想是成为一名程序员。

我没有心理学方面的专业知识,如果你在一个黑暗的地方,我的最佳建议是寻求专业帮助,但我知道迷失的感觉,我想通过写这篇文章来帮助任何与我有相同梦想的人,就如何在软件开发中实现职业生涯提供可行的建议。

编码很棒

我花了几年时间试图了解我成年后想做什么,但却失败得很惨。我花了一个学期在医学院学习,这时我意识到我根本不在乎成为一名医生,我参加了三年的工程课程,但我不喜欢我的专业科目,最后,我决定我不想继续下去。

我非常幸运地在我还在学习的时候收到了一份工作邀请,我立即决定抓住机会去争取,当时我从未真正全职工作过,所以我想挑战我对无法在专业环境中成功的恐惧。

幸运的是,我最终绝对热爱我的工作,感谢我认识的所有人,实际上是我的一位同事向我介绍了编码,并让我对它产生了兴趣。
从那以后,我再也没有回头,我开始涉足编程,我很快意识到我想把它作为我的职业,我非常享受挑战和它提供的智力刺激,我认为每个人都应该尝试一下,看看他们对它是否有同样的感觉。

每个人都可以编码…

…是一个古老的苹果活动的口号,虽然我完全同意任何人都可以学习编程的基础,但我问自己,每个人都可以在软件开发领域获得职业生涯吗?
肯定不是,尽管这个职业越来越受欢迎,而且不断有更多的工作岗位产生,但这个领域仍然有限,许多人没有在电脑前长时间孤独(有时令人沮丧)的资质,简而言之不是每个人都应该编码

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

不是每个人都会平等地享受编码,但我相信值得一试,图片鸣谢

如果你认为这是一个快速致富的机会,那就去其他地方。如果你不真正喜欢写软件,你永远也不会找到工作,投入这么长时间却看不到任何切实的结果,也没有外部义务,这需要很多动力和奉献精神,不是每个人都可以复制的。

编码很难

不要相信那些所谓的专家或大师,他们承诺给你一个学习编程的简单程序,然后很容易找到六位数的薪水,这完全是一个谎言,如果有人向你讲述这个故事,你应该假设他们并没有把你的最佳利益放在心上。

学习如何编码是一个非常漫长和困难的过程,它需要你吸收一种完全不同的思维方式,花费无数的时间试图理解困难的主题或调试不能正常工作的应用程序。

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

我喜欢虫子!只要他们远离我的代码。学分

人们经常忘记当他们只是初学者时,编码是多么困难,当你投入足够的时间时,编码会变得容易,但是不要因为你花了很长时间理解递归就错误地认为你不适合,每个人都必须按照自己的速度学习。

没有资历有可能找到工作吗?

答案当然是肯定的,如果你在网上浏览的话,你会发现很多人在四十多岁时改变职业生涯,或者放弃教育去自学并获得他们一直希望的工作的故事,后者基本上就是发生在我身上的事情,但这是追求这一职业的最佳方式吗?

让我们先说,如果我仍然是 19 岁,我毫无疑问会进入大学学习计算机科学,特别是在我的国家意大利,那里的教育是便宜的,进入这个行业最简单的方法无疑是通过获得学位和几个实习机会。

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

更不用说如果你毕业了,你的父母会很高兴的

我决定尝试更难的自学路线的原因是,我已经有了专业经验,并完成了我的工程学位的很大一部分,这些因素让我在员工眼中更可信,并为我的研究奠定了坚实的数学基础。

我没有训练营的经验,但我的印象是,他们通常只提供一两种语言和一些框架的浅薄知识,但在你对计算机科学和编程的整体理解上留下了巨大的漏洞。
不是说他们都是这样,加入一个对你来说可能是一个很好的选择,但是不要以为你会知道你需要的一切就离开。

如何从零开始

从数量惊人的资源开始,选择走哪条路和选择哪种语言可能会非常困难,如果我做了错误的选择怎么办?

秘密是没有正确或错误的选择,真正的成功之道是通过承诺某事并完成它,不要每隔几天就尝试一门新的课程或教程,因为你认为你可能会比你目前正在做的事情更喜欢它,或者有人向你保证它是最好的。

也就是说,当被问及从哪种语言开始时,我经常说 Python,因为我相信它对初学者最友好,并且足够大,可以让你探索许多不同的专业,从 web 开发到机器学习,但是如果你仍然不确定,我建议阅读这篇伟大的文章来帮助你下定决心。

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

你应该选择什么?形象信用

最好的入门网站是那些允许你边学习边编程的网站,阅读编程而不实际操作可能会让你成为一名程序员,就像阅读烹饪书而不烹饪可能会让你成为一名厨师一样,这里有一些我最喜欢的:
-FreeCodeCamp

基于项目的学习

开始并不困难,你学习许多新概念,并开始使用你选择的语言,当你想在没有帮助的情况下做一些你以前没有做过的事情时,问题就出现了,精通和独立需要的不仅仅是知道编程语言的基本逻辑和语法。

要进入更复杂和有趣的话题,有几个奇妙的选择,你知道你可以参加世界上最好的机构完全免费的大学课程数千?
有像 Class Central 这样的网站,你可以用它来找到你最感兴趣的课程,或者你可以直接探索其他平台,比如:
-Udemy
-Coursera
-Edx

但是,开始一门课程并被动地观看并不能保证你会学到很多东西,避免“教程地狱”并真正变得有能力的最好方法是将你所学的一切很好地用于基于你目前正在学习的材料的项目。

哈佛大学计算机科学导论

不得不在所有这些不同的内容中进行选择,这种感觉并不罕见,否则就不可能了,发展有许多分支,每个人都会根据自己的兴趣选择哪一个,但难道没有一些重要的材料是每个自学者都应该浏览的吗?

每当有人过了绝对初学者阶段问我,“我现在去哪里?”,我的答案永远是哈佛大学的CS50T4

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

大卫·J·马兰教授对我来说是编程界的摇滚明星

有许多文章详细介绍和回顾了该计划,因此我在此不再赘述,但我对本课程评价最高的原因有几个,以下是四个:

  • 令人敬畏的老师,大卫,布莱恩,道格,和所有其他工作人员都是我曾经有机会学习的最有能力和耐心的老师,除了课程之外还有大量的额外材料。
  • 在大多数社交媒体平台上,巨大的同学社区,Reddit,脸书,Discord 等等,总是在我被一个任务困住或者对任何话题感到困惑的时候帮助我。
  • 它教授经常被独立学生忽略的编程基础知识,当你最终找到工作时,你可能不需要实现二分搜索法或使用指针,但能够完全理解基础知识会让你更深入地理解每个主题。
  • 你不需要在这个介绍性课程上停下来,有不同的与 cs50 相关的专业课程可以让你探索网络、移动、游戏开发和人工智能,这样你就可以在你所学的基础上继续发展。

为了完成课程并获得证书,你必须完成八个评分的问题集,并在结束时创建一个你选择的个人项目,展示你在学习期间学到的东西。

应该选择什么项目?

我们又回到了项目上,原因很好,除了对学习你正在学习的科目至关重要之外,它们还是你向潜在员工介绍自己的最佳方式,尤其是如果你没有正式的经验或教育背景的话。

关于具体做什么,好吧,天空是无限的。我最喜欢编程的一点是,只要你有足够的能力(并且你的谷歌技能能够胜任这项任务),它可以让你做任何你的想象力推动你去做的事情,这个 Github 库包含了一些非常有趣的想法。

说到 Github,如果你还没有的话,你绝对应该开一个账户,用它来展示你最喜欢的作品,使用一个格式良好的自述文件,我的是我的定制编程语言,还有这个预测预期寿命的人工智能模型

选择你的专业

有抱负的程序员有很多不同的选择,这使得很难选择,你对 Web 开发感兴趣吗?你一直渴望编写游戏程序?或者你想探索像云开发或人工智能这样的新兴趋势吗?

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

访问该网站获取探索不同编程职业的精彩路线图

人们普遍认为前端开发的门槛最低,初学者经常被鼓励学习它,以便能够尽快找到工作,尽管这是一个合理的建议。我有点不喜欢 HTML,尤其是 CSS,知道我不会对它有热情,我努力学习后端,尽管在纸上谈兵更具挑战性,但我能够找到工作。我的观点是,追随你的激情比选择容易的路线更重要。

但在真正将你的想法设定在一个具体的目标之前,我鼓励你尽可能多地尝试,当我意识到训练模型实际上很无聊,有时令人沮丧,我更愿意从事数据基础设施或编写算法时,我确信人工智能将是我的激情所在。

我准备好工作了吗?

关于这个问题,我收到的一些很好的建议是,你永远不会为你的第一份工作做好准备,因为你可能还没有准备好。大多数公司,至少是好的公司,雇佣初级员工时都清楚地知道,在他们有能力带来利润之前,他们会亏损几个月,他们是在投资你,致力于你的进步!

因此,不要等到你觉得自己达到了完美的程度,而是去问一个该领域的朋友,甚至是你在社交媒体上不认识但愿意帮助你的人,你的投资组合和知识是否达到了通过技术面试的水平。

“完美是进步的敌人”
温斯顿·丘吉尔

老实说,无论如何,在你得到答案之前,这个就业市场将会是几个星期或几个月,你还不如早点开始寻找和申请,但不要太冒险,当机会最终到来时,你会因为完全没有准备而破釜沉舟。

复习你的课程

有很多关于如何构建和填写简历的建议,但有一些对我特别有帮助:

  • 利用你以前的经验,不管你是转行还是在服务行业工作,把它放在你的简历里,在面试的时候提到它,即使不是技术性的。以前的职业证明了其他重要的技能,比如能够处理客户或与同事互动。
  • 专注于你想要获得的角色,如果你想成为一名 Java 后端开发人员,确保尽可能地拥有所有相关的技能、框架和证书,你可以提及其他一切,但确保它们不会分散你想要发送的图片的注意力。
  • 一页!人力资源办公室每天会收到数百份简历,如果你的简历有四五页,那么很可能会被忽略,让你的信息直接而清晰,这样最有可能被注意到。
  • 除非你申请的是设计职位,否则不要过分使用图形和简单的模板,有很多免费的模板,只要选择像下面这样漂亮清晰的或者简单明了的这个模板来自 Novoresume

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

一个来自 Novoresume 的实验想象着埃隆·马斯克的简历会是什么样子

如何找到理想的工作

找到一个你感兴趣的职位并不困难,每天都有数百个职位发布,大型科技公司也总是在招聘,对于你的申请,你可以使用像 MonsterLinkedin实际上这样的网站,或者公司网站本身,如果你有一个特定的想法。

问题是要比所有其他候选人留下更好的印象,你将不得不与来自世界各地的数百人竞争,其中一些人更有经验或受过更好的教育,才能真正进入面试阶段,届时你将能够展示你的激情和准备。

解决办法是建立关系网,积极使用你的社交媒体,如 Reddit、Twitter 和 Linkedin,参加招聘会和会议(实体或虚拟的),尝试与你渴望进入的行业的人会面,并向他们寻求建议,如果你保持礼貌的互动,即使是 Linkedin 上的冷淡信息也能产生奇迹。

事实上,我找到了我现在的公司,因为创始人在一个寻找创业公司就业机会的网站上看到了我的简介,并且非常喜欢它,发信息让我发送简历,我们之间的个人互动真的帮助我通过了第一轮筛选。

所以,在网上建立你的形象,尽可能多地建立联系,记住,只有一个人给你机会,让你最终打入这个行业!

准备面试

技术面试是出了名的困难,有一整个市场的书籍课程网站专门为他们准备问题,通常知道一门编程语言的来龙去脉和几个框架不足以成功。

算法、数据结构和 Leetcode 风格的问题已经成为许多公司的标准,尤其是如果你梦想成为脸书或谷歌的工程师,你必须确保你对这些主题的知识非常精通,要开始,我建议参加一个扎实的算法课程,然后每天练习 Leetcode。

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

大型科技公司因其极具挑战性的白板面试而声名狼藉

别忘了你的面试官也是人!能够交流你的推理比立即得出正确的解决方案更重要,在行为面试中要讨人喜欢和自信,并做好你的研究,公司需要致力于与他们合作的人。

如何应对拒绝

让我们面对现实吧,我们每个人都注定会以这样或那样的方式失败,就像在获得工作前的最后一次面试中,与我互动的人力资源女士认为我似乎不够积极,或者完全,例如当我因为准备不足而彻底搞砸了 C#职位的技术面试。

我仍然会想起那些事件,但没关系,因为它们真的帮助我理解了重要的课程,你如何展示自己和你的人际交往技能与你的技术技能一样重要。),并激励我认真准备。

同样的事情也会发生在你身上,不要让那些重要的课程白白浪费,继续努力,总有一天你会找到合适的机会,所有的努力都会证明是值得的。

有时候你需要运气

“每当我收到一叠简历时,我都会把其中的一半扔进垃圾桶。我当然不希望我的团队里有不走运的人。”

虽然这只是我在 Reddit 上发现的一个笑话,但事实是,通常世界上所有的建议和准备都不足以让你到达你想要的地方,实现目标需要一点运气。

当你的申请被忽略或者面试失败时,记住这通常不是你的错,被认为没有准备好接受一个机会并不意味着你不够好,而是你必须继续寻找合适的地方和合适的人,他们将能够看到你的潜力。

包扎

这个梦想并不容易,你可能要花几个月甚至几年的时间才能准备好,会有怀疑的时刻和看似不可逾越的挑战,但最终,你会很高兴回头看。

所以今天就开始编码吧,祝你旅途好运!

[## 解决 500+ Leetcode 问题后学到的五件事

为什么研磨 Leetcode 没那么糟糕

towardsdatascience.com](/five-things-i-have-learned-after-solving-500-leetcode-questions-b794c152f7a1)

感谢你到目前为止的阅读,如果你想了解更多我的观点,请查看我的其他文章,如果你喜欢这篇文章,请留下掌声,并随时在 Linkedin 上与我联系。

我是如何成为人工智能顾问的:面试问答

原文:https://towardsdatascience.com/how-i-became-an-ai-consultant-interview-questions-answers-689ba03a2620?source=collection_archive---------4-----------------------

在 Medium 上发布了几个自由职业项目和文章后,我被邀请申请几个 AI 咨询工作。

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

来源

在过去的几周里,我在埃森哲、Wavestone、谷歌和 IBM 面试了一个人工智能顾问职位,我非常喜欢它。因此,我决定写一些关于这次积极经历的东西。我将讨论我是如何准备的,提出在这个过程中我被问到的问题,并在最后分享一些帮助你被录用的技巧。

准备

我一直想为人工智能驱动的公司工作,然而,我意识到我更喜欢战略方面,而不是编码。事实上,我很感激必须了解客户的战略,公司面临的挑战和机遇,客户的数据和分析能力。理想情况下,通过将这些与对最先进的人工智能的理解相结合,顾问可以确定公司最重要的人工智能计划。尽管如此,每个人工智能顾问必须了解人工智能项目的所有步骤。因为我也有一份全职工作,所以我总共花了 2-3 个月来准备。在这个过程结束时,我收到了三份聘书。

因此,我需要为四个不同的领域做准备:编码、机器学习、系统设计和策略。

在进入问题之前,我建议所有对成为人工智能顾问感兴趣的人理解下面提到的元素,因为你将在这些元素上受到挑战:

  • 使用分析算法和人工智能解决复杂业务挑战的能力
  • 能够使用统计建模、机器学习和优化来设计、构建和部署预测性和规范性模型
  • 能够使用结构化决策来完成项目。
  • 能够管理整个 ML 项目,从业务问题识别、数据审计到生产中的模型维护。

除了技术方面,我被告知,人工智能顾问需要具备的真正技能是,当客户要求一件事但意味着另一件事时,能够读懂字里行间的意思,并从数据的角度进行战略思考……(如何建立稳固的数据网络效果,如何借助机器学习建立进入壁垒,等等。)

面试—第一部分(机器学习)

我的面试分为三个部分:机器学习、AI 策略和通用知识。以下是我必须回答的问题清单。

1。回归和分类 ML 技术有什么区别?
回答:回归和分类机器学习技术都属于监督机器学习算法
。在监督机器学习算法中,我们必须使用带标签的数据集来训练模型,在训练期间,我们必须提供正确的标签,并且算法试图从输入到输出学习模式。如果我们的标签是离散值,那么这将是一个分类问题,例如 A,B 等。但是,如果我们的标签是连续值,那么这将是一个回归问题,例如 1.23,1.333 等。

2。什么是辍学?
回答:辍学是一种防止神经网络过度拟合的简单方法。它是神经网络中某些单元的缺失。这类似于自然繁殖过程,自然通过组合不同的基因(丢弃其他基因)而不是加强它们的共同适应来产生后代。

3。什么是隐马尔可夫模型?
回答: 隐马尔可夫模型 (HMMs) 一类概率图形模型,它允许我们从一组观察变量中预测一系列未知()变量。一个简单的 HMM 的例子是根据某人穿的衣服类型(观察到的)预测天气(隐藏变量)。

4。什么是模型精度和模型性能?
**答案:**模型精度是模型性能的子集。模型性能对作为算法输入的数据集进行操作,并且模型精度基于模型性能的算法。

模型性能衡量模型正确预测示例的能力。准确性是分类模型的一种性能度量,它将正确分类的示例的数量与所有示例相关联。

5。算法过拟合和欠拟合是什么意思?
**答案:**过拟合和欠拟合是导致表现不佳的原因。
过拟合对训练数据表现良好,对其他数据泛化能力较差。
欠拟合在训练数据上表现不佳,但在其他数据上表现良好。与“好”模型相比,过拟合和欠拟合模型在新数据上都表现不佳。一个欠拟合的模型很可能不会表现出“对其他数据的良好推广”。

6。对于物体识别问题,您更喜欢以下哪种数据扩充技术?
**答案:**裁剪、改变光度、水平翻转、重缩放、缩放;深度学习模型实际上需要如此多的数据来训练模型。它非常需要数据。为了利用不同角度的物体来训练模型,我通常使用数据增强技术。

7。机器学习有哪些不同的类型?

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

8。深度神经网络中的超参数是什么?
回答
:超参数是定义网络结构的变量。例如,学习率等变量定义了网络的训练方式。它们用于定义网络中必须存在的隐藏层数。
超参数的例子:
学习率,最大树深度,隐藏层数,…

9。数据过度拟合是如何发生的,如何修复?
回答
:当统计模型或机器学习算法捕捉到数据的噪声时,就会发生过拟合。这导致算法在结果中显示出低偏差但高方差。

10。如何防止过度拟合(说出并解释不同的技术)?
回答
:首先你要考虑型号选择(选择不太复杂的型号)。

其次,重要的是要知道交叉验证并不能防止过度拟合。然而,它可能能够检测过度拟合。它可以分割训练数据,以便生成多个小型训练测试分割。然后,这些分割可用于调整您的模型。向机器学习模型提供更多数据有助于更好地分析和分类。然而,这并不总是有效的。

很多时候,数据集包含分析不需要的无关要素或预测变量。这些特征只会增加模型的复杂性,从而导致数据过度拟合的可能性。因此,必须去除这种冗余变量。

机器学习模型是迭代训练的,这允许我们检查模型的每次迭代执行得有多好。但是经过一定次数的迭代后,模型的性能开始饱和。进一步的训练会导致过度适应,因此你必须知道在哪里停止训练。这可以通过提前停止来实现。

**正则化:**正则化可以用 n 种方法来实现,方法取决于我们实现的学习者的类型。例如,在决策树上执行修剪,在神经网络上使用丢弃技术,并且还可以应用参数调整来解决过拟合问题。

**集成模型:**集成学习是一种用于创建多个机器学习模型的技术,然后将这些模型组合起来以产生更准确的结果。这是防止过度拟合的最好方法之一。一个例子是随机森林,它使用决策树的集合来进行更准确的预测,以避免过度拟合。集成模型可以用于通过组合几个弱学习器来避免欠拟合。由于集合增加了最终模型的复杂性,因此容易过度拟合,您需要小心避免这种情况。

**11。激活功能的作用是什么?
答:**用于将非线性引入神经网络,帮助其学习更复杂的函数。没有它,神经网络将只能学习线性函数,该函数是其输入数据的线性组合。激活功能是人工神经元中基于输入传递输出的功能。

面试—第二部分(人工智能策略)

1。在考虑实施人工智能解决方案之前,公司应该做些什么? 组织需要涵盖当前业务和技术状态以及未来目标的数据策略。三个要素是关键:

  • 战略数据采集
  • 统一数据仓库
  • 确定数据值的过程

2。从战略的角度来看,一个公司应该如何开始他们的第一个 AI 项目?
答:根据
吴恩达 **,**前几个 AI 项目成功的关键不是成为最有价值的 AI 项目。它们应该足够有意义,以便最初的成功将有助于公司熟悉人工智能,并说服公司的 C 级高管投资于进一步的人工智能项目;它们不应该小到别人会认为是微不足道的。

3。你会如何描述“人工智能的良性循环”以及什么公司使用这种策略? **答案:**产品→用户→数据→产品。最好的产品拥有最多的用户,而最多的用户通常意味着获得最多的数据,有了现代 ML,产品变得更好。优步&亚马逊(Alexa)已经实施了这一策略。

4。为什么大部分 AI PoCs 达不到生产阶段?
答案:

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

来源

**5。你将如何帮助一家公司确定他们是否应该制造或购买一个人工智能解决方案?
回答:**这个决定主要取决于数据成熟度、对数据集的独家访问、内部数据科学家的存在、拥有人工智能模型的战略需求、预算和项目类型。在某些情况下,依赖外部服务提供商是不可行的(隐私问题)。如果一家公司不仅可以独家访问有价值的数据,而且他们的商业模式也依赖于这些数据,那么建立一个内部人工智能模型很可能是最佳策略。

**6。如果一家公司想要实施人工智能,你的第一步工作是什么?
回答:**明智的做法是,花时间一起确定一个与公司整体目标相关的人工智能用例。此外,在没有彻底评估数据的情况下,很难承诺一个工作模型。因此,如果没有最初的数据分析,很难估计人工智能项目的具体业务影响。

**7。你会如何对 C 级高管和员工进行人工智能教育?
回答:**不仅要建立 AI 解决方案,还要在公司创造真正的数据/AI 文化,这一点至关重要。人工智能战略团队应该由产品经理、数据科学家、业务开发人员和最终用户组成。除了实践经验之外,还可以通过现场课程和在线课程的结合来完成员工教育。

8.人工智能战略的五个核心组成部分是什么?
**答案:**AI 战略的核心组成部分是数据、基础设施、算法、技能和组织

**9。您将如何帮助一家小公司改进其数据战略?
回答:首先,发现公司的数据成熟度水平是关键。**通常,公司已经拥有解决业务问题所需的数据,但决策者根本不知道如何利用这些数据做出关键决策。公司可以通过具体说明他们需要解决的业务问题和机会来鼓励更全面地看待数据。此外,现有的 IT 体系结构可能会阻止孤立信息的集成,并且管理非结构化数据通常超出了传统 IT 能力的范围。

**10。如果一家公司缺少项目数据,你会向他们推荐什么?
回答:**很明显,要看项目性质。在探索技术解决方案之前,预先建立一个数据收集机制或者依赖开源数据可能是值得的。ML 有很多可用的数据,有些公司已经准备好免费赠送了。为了获得相关数据,与其他组织建立伙伴关系可能是有益的。

一般来说,机器学习算法越简单,它从小数据集学习的效果就越好。从 ML 的角度来看,小的数据需要具有低复杂性(或高偏差)的模型,以避免模型过度适应数据。我注意到朴素贝叶斯算法是最简单的分类器之一,因此可以从相对较小的数据集中很好地学习。

你也可以依靠其他线性模型和决策树。事实上,它们在小数据集上的表现也相对较好。基本上,简单模型能够比更复杂的模型(神经网络)更好地从小数据集学习,因为它们本质上试图学习更少。

对于非常小的数据集,贝叶斯方法通常是同类中最好的,尽管结果可能对你之前的选择很敏感**。**我认为朴素贝叶斯分类器和岭回归是最好的预测模型。

当你没有足够的目标训练数据,源域和目标域有些相似但不完全相同时,就要考虑迁移学习技术。

数据扩充意味着增加数据点的数量。就传统的行/列格式数据而言,这意味着增加行或对象的数量。最后,合成少数过采样技术(SMOTE)和改进的 SMOTE 是产生合成数据的两种技术。简而言之,SMOTE 获取少数类数据点,并创建位于由直线连接的任意两个最近数据点之间的新数据点。

面试——第三部分(常识)

此时,我只被问了三个问题:
**1。你能描述一下你最新的 AI 项目吗?
回答(取决于你过去的项目)😗*我不得不开发一个可以根据消费者上传的图片识别假货的解决方案。作为团队的一部分,我们使用迁移学习创建了一个基于定制深度学习 CNN 模型的解决方案。在项目期间,我们最大的问题是公司缺乏数据和可扩展性。我们依靠数据扩充技术和合成数据解决了这个问题。

**2。你能说出与人工智能相关的新商业模式吗?
回答:**一些的例子可以包括智慧城市&数据货币化、预测性维护和工业 4.0、联邦学习和医疗保健数据等。【 如果你认识其他人,请在评论里提及

**3。什么样的重大进化会影响人工智能的发展?
回答:**日益增长的人工智能民主化和低代码/无代码人工智能工具的发展可能会扰乱人工智能项目的管理方式。

外卖食品

  • 人工智能顾问不仅仅是数据科学家。他们必须协助设计从需求到部署的整体系统,管理项目(项目管理技能),并帮助提供能力建设方面的专业知识,以便 DevOps 团队的内部资源可以支持人工智能基础设施和代码。
  • 我建议确保你理解基本概念,如偏差-方差权衡、过度拟合、梯度下降、L1/L2 正则化、贝叶斯定理等。
  • 从商业的角度理解一个人工智能项目(KPI,长期目标,可扩展性等。)
  • 你将面临挑战,挑战你以一种简单而精确的方式组织你的想法和呈现复杂概念的能力

我成为 Kaggle 大师的旅程

原文:https://towardsdatascience.com/how-i-became-kaggle-3x-expert-in-just-1-month-b63b37b53865?source=collection_archive---------14-----------------------

先说说我成为三大类 Kaggle 专家,后来成为笔记本高手的故事。此外,为 Kaggle 获得开始新生活的提示!

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

作者塑造的卡格尔形象

在本文中,我将与您讨论我成为数据集、笔记本和讨论类别的 kaggle 专家的小小里程碑式成就。这篇文章将与我通常写的文章不同。这本书对我来说非常特别,因为它将描述我成为一名卡格尔 3X 专家和后来的大师的旅程。我将讲述我在短短一个月内成为 Kaggle 专家的旅程,以及任何人如何凭借两件事坚持奉献达到那个水平。

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

帕拉斯·瓦什尼·卡格尔

那是我在学院读计算机专业本科二年级的时候。我的朋友向我介绍了一个新的研究领域,即数据科学和机器学习。我很快就对这个领域有了更多的了解,并开始探索新的事物和技术来扰乱机器学习。很快,我知道了一个叫 Kaggle 的东西,每个人都在谈论它,但我不知道它是什么?我试图探索更多关于它的信息,发现它真的是一个很酷的平台,人们可以在这里参加 ML 比赛并分享公共笔记本数据集。此外,讨论也是 Kaggle 的一个令人惊叹的部分,在这里,人们可以与全球各地令人惊叹的数据科学家交谈,了解他们的更多知识,并询问任何形式的公共疑问或分享知识。我变得好奇,想知道更多,并渴望参与 Kaggle 上的全球活动,但我只是这个广阔领域的新手,没有任何从事好项目的好经验。

[## 如何建立一个能让你找到工作的数据科学投资组合?

学会制作一个关于你的强有力的作品集!

towardsdatascience.com](/how-to-build-a-data-science-portfolio-that-can-get-you-a-job-9f8d113739b3)

然后我决定积累我的技能,然后潜入 Kaggle。随着时间的推移,我开始努力提高我的 ML sills,随着时间的推移,我学到了更多,超时参加当地和地区的黑客马拉松,并为 Kaggle 做好准备。

然后在新冠肺炎·疫情时期,我被迫关在我的住处,有很多空闲时间和我在一起。然后我在 2020 年 5 月中旬的某个时候决定,现在我想我已经准备好加入 Kaggle 了。2020 年 6 月 3 日,我在 Kaggle 上创建了自己的账户,并开始深入探索这个平台。我开始在讨论中与人们讨论如何从 Kaggle 开始,社区给了我很大的帮助。我在讨论区的第一篇帖子是“ 帮我从 Kaggle 开始! 。我很快就在那次讨论中获得了金牌,这足以给我最初的动力,并推动我从社区支持中学习和探索更多。

很快,我决定写公共笔记本,研究数据集。我同时参加了知识和荣誉竞赛。我参加的第一个经典比赛是“泰坦尼克号:从灾难中学习机器”,我应该说这是 Kaggle 比赛的最佳起点之一。我写了一个笔记本,并随着时间的推移不断更新,建立了一个结构良好的计划,以便在竞争中取得有利地位。即使付出了很多努力,我甚至没有进入前 10%的人群,这让我很伤心。然后我做了一些研究,发现人们在比赛中发布公共笔记本,大多数顶级竞争者使用好的公共笔记本/数据集进行集成和堆叠,形成更好的模型。哇!我完全被这种合作水平的作品所震惊了。然后,我开始阅读其他参与者的笔记本,他们的作品,如果我发现有什么难以理解的地方,就和作者讨论。我很快就进入了比赛参与者的前 3%,非常高兴。

然后我开始给 kaggle 更多的时间,很快在一个月内,我就获得了笔记本、数据集和讨论类别的 3 个专家徽章。我知道这些徽章只是为了我们自己的兴奋,并不能定义数据科学家的知识和技能水平,但在我内心的某个地方,我对自己在很短时间内的学习水平感到非常兴奋。我开始在笔记本部分做更多的工作,听取顶级数据科学家对我的工作的建议,从我的错误中吸取教训,继续努力写好东西,然后在接下来的 2 个月里,我成为了笔记本大师,这对我来说真是一种激动人心的感觉。

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

我最近成为笔记本高手的活动

随着时间的推移,我真的很高兴能学到更多,并与了不起的人一起工作,并在我的旅程中遇到了非常酷的人。我很幸运得到数据科学社区的支持,我喜欢与优秀的人互动,从他们的工作和经验中学习,并与他们分享我的经验。

我现在希望在竞争数据科学方面做更多的工作,并更多地参与竞争部分,在 Kaggle 上进行非常酷的竞赛。如果你是一个阅读这篇文章的初学者,我希望这篇文章能给你一些动力去使用 Kaggle,以及你如何从这个平台上成倍地学习。非常感谢你阅读这篇文章。你可以在 My Medium 上浏览我的其他帖子,关注统计学、机器学习和数据科学。享受阅读!

是的。!你可以在这里阅读我的其他相关文章:

[## 如何评价 Python 中机器学习模型性能?

一个实用的方法来计算模型的性能和在 Python 中的实现,涵盖了所有数学…

towardsdatascience.com](/how-to-evaluate-machine-learning-model-performance-in-python-135b4ae27f7e) [## k-最近邻解释-第 1 部分

KNN 算法背后的科学解释!

towardsdatascience.com](/k-nearest-neighbour-explained-part-1-5e5e9192050) [## 禁闭期间如何保证自己的健身?

在封锁期间,你应该遵循的健身策略,以保持你的身体和精神能力!

medium.com](https://medium.com/analytics-vidhya/how-to-ensure-your-fitness-during-the-lockdown-7c7018aeaf75)

我会在另一篇有趣的文章中看到你,在机器学习和数据科学的世界中有一些新的和令人惊讶的事情。在那之前保持安全!

谢谢你!

我如何增强我在数据科学领域的信心

原文:https://towardsdatascience.com/how-i-boost-my-confidence-in-data-science-field-be70953bb69d?source=collection_archive---------77-----------------------

提升数据科学技能的技巧

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

布拉德·巴莫尔在 Unsplash 上的照片

知道机器学习和深度学习算法是可以接受的。但是,导入算法并通过输入数据来使用这些算法并不是更好地利用数据科学技术的正确做法。我们可以在 Linkedin 上找到很多人的 bio 是机器学习,人工智能,python。但是在你的日常工作中运用它们是具有挑战性的。这就需要获得曝光,并对算法有更好的理解。

我们在数据科学领域的主要目标是有效地使用数据科学家开发的算法。但是,如果我们不知道算法,比如什么进去了,什么出来了,以及黑盒内部发生了什么,我们可能不会有效地使用它们。

在本文中,我将讨论一些更好的方法来改变你对数据科学的看法。以及如何利用数据科学技术更好地想象世界,并在日常生活中有效地使用它们。

更好的 Linkedin 连接

Linkedin 是丰富你的知识和拓宽你对数据科学的思维的有效工具之一。但是,有些人像脸书一样使用它。在添加任何连接的同时,我们应该专注于添加高质量的连接。我们应该在他们的个人资料中检查他们的兴趣,然后只有我们应该将他们添加到连接列表中。这是必要的,因为 Linkedin 算法向你展示了你的人脉所喜欢和分享的帖子。

[## Pranjal Saxena -自动化工程师-凯捷| LinkedIn

在凯捷有 2.3 年的经验,拥有基于 Python、Django、机器学习、Deep…

www.linkedin.com](https://www.linkedin.com/in/pranjalai/)

你添加的相似思维联系越多,你从这个平台上获得的积极效果就越多。社交媒体直接影响我们未来的行动,因此我们需要在这方面更加关注。

阅读文章

当我们写文章时,我们尽最大努力与他人分享知识。此外,阅读和写作直接影响我们的大脑,而不是看视频。因为当我们阅读一些东西时,我们会用大脑将前面句子中的东西关联起来,从而更好地学习,但在观看视频时,我们可以自由地做任何让我们失去焦点的事情。

Medium 有一个更好的出版物列表,提供了对数据科学更好的见解。

走向数据科学

《走向数据科学》(也称为 TDS)是一个著名的出版物,拥有一批优秀的作者,他们贡献出自己的最佳知识来撰写文章。TDS 有一个非常活跃的社区,在撰写高质量文章方面拥有更好的知识和技能。他们通过人工阅读来检查每篇文章,检查各种语法错误,这样读者就不会遇到任何困难。基于你之前的阅读,他们也有更好的推荐。

[## 走向数据科学

共享概念、想法和代码的媒体出版物。

towardsdatascience.com](https://towardsdatascience.com)

走向人工智能

专注于技术、科学和工程。他们有一个更好的社区,为读者提供更好的阅读体验。

[## 走向人工智能——多学科科学杂志

《走向人工智能》是世界领先的多学科科学出版物。走向人工智能出版最好的技术,科学…

medium.com](https://medium.com/towards-artificial-intelligence)

参与真实项目

在我们向世界展示知识之前,知识没有任何用处。阅读许多文章可以让你洞察到如何更好地利用数据科学。现在,轮到您来看看哪些手动任务可以自动化。请从最小的开始,比如使用笔记本电脑摄像头识别人脸,然后添加深度学习来识别人脸,最后添加到闭路电视摄像头来识别您的客人。你能想多广取决于你自己。

结束点

如今数据科学正在蓬勃发展,许多人都对数据科学和机器学习技术感兴趣。但是,这里的关键点是在日常生活中使用数据科学。将您的数据科学技能转化为现实生活。建立机器学习模型是容易的,但主要目标是在现实世界中使用它们。为此,我们必须专注于建立更好的联系,阅读更好的材料,以拓宽我们的思维。

我是如何闯入数据科学的

原文:https://towardsdatascience.com/how-i-broke-into-data-science-8f782cc200f4?source=collection_archive---------15-----------------------

一名软件工程师在 Yelp 和优步的数据科学之旅

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

卢克·切瑟Unsplash 上拍摄的照片

我不会讨论成为一名数据科学家所需的具体资格和技能;关于这个主题有很多资源,这取决于你对什么样的工作感兴趣。相反,我将谈谈我进入数据科学(DS)的旅程,以及帮助我进入该领域的一般思维方式习惯。最后,不管你的背景如何,我都会回顾一些要点,希望能帮助你打入 DS

本人从未打算过渡到 DS;我也没有这样做的传统背景或教育。幸运的是,我的工程背景教会了我如何批判性地编程和思考,但更重要的是如何学习和坚持。通过阅读论文和做兼职项目,我几乎自学了所有的东西。没有我的导师和他们诚实而有建设性的反馈,我也不可能做到这一点。

在学习了几年软件工程(SE)之后,我作为 SE 实习生加入了 Yelp,从事与 DS 相关的项目。大约一年后,我以 DS 实习生的身份加入了优步,并在那之后不久毕业。这是我如何过渡到 DS 的故事,为什么我决定切换回 SE,以及我在这六年期间学到了什么。

开头

2012 年开始在滑铁卢大学学习机电一体化工程专业。我总是着迷于如何通过建造直接帮助人们的东西来积极影响他们的生活。我最初认为这只能通过建造实物来实现,比如机器人,但我最终意识到你可以通过软件来实现类似的目标;这也是为什么 2014 年我从机电工程转行做 SE 的原因。

刚开始做 SE 不久,就开始听说机器学习(ML)。我对 ML 的兴趣驱使我在空闲时间开始学习它,尽管只是表面水平。与此同时,我继续学习如何成为一名更好的软件工程师,主要是通过实习。

涉足机器学习

我进入曼梯·里的旅程平安无事地开始了。我没能完成吴恩达臭名昭著的机器学习课程;并且没能完成一个本科计算机视觉研究项目。至少我通过了统计学入门课程,这是我在大学里唯一上过的统计学课程。由于统计学是 ML 和 DS 的基础组成部分,至少有一件事是对的。

在我向 DS 过渡的过程中,这是一段没有收获的时期。我更关注的是获得在美国的 SE 实习机会。2015 年冬天,我终于在加州山景城的一家初创公司找到了实习机会。我用的 k-NN 和一个分析仪表板构建了一个简单的推荐系统。在这些项目中的工作向我展示了如何利用数据和分析来获得有助于制造优秀产品的见解。这激起了我足够的兴趣,最终我对 DS 和 ML 变得更加认真。

钻研数据科学和机器学习

2015 年秋天,我在 Yelp 找到了一份 SE 实习工作。我加入了流量质量团队,该团队有一个广泛的目标,即识别和防止欺诈和滥用。我很幸运能够从事与 DS 相关的项目,尽管我是作为 SE 实习生被聘用的。

我在实习期间有些挣扎,但我在那里学到了很多东西。了解了有监督无监督 ML,统计建模,如何进行严谨的探索性分析,以及用于管理大量数据的基础设施。我认识到理解你的数据和分析方法是至关重要的,否则事情可能不会像预期的那样进行。作为一名工程师,通常将方法和数据视为黑盒和抽象就足够了——但这在 ds 中并不总是有效。例如,一些方法及其参数仅适用于特定类型的数据,并且需要某些假设。

当时,我开始阅读 ML 论文,以便在实习期间更有效地使用这些工具,如随机森林k-means逻辑回归。我真的不认为这是一次真正的 DS 实习,因为我缺乏基础知识,没有与许多同事合作,并且在实习期间需要很多指导。

我在 Yelp 的经历给了我处理更具挑战性项目的信心。在我们的 Yelp 黑客马拉松上,我和我的团队构建了一个逻辑回归分类器来识别 SLAPP 企业。这让我明白,检索和处理你的数据与程序或算法一样重要——如果不是更重要的话。在另一个黑客马拉松上,我和我的团队为 Messenger(在 Messenger 的虚拟助手出现之前)构建了一个聊天机器人;它能够回答查询和执行命令。2016 年,我与一名博士后合作了几个月,利用新颖的深度学习方法构建了一个在移动设备上运行的面部识别系统。对于一个学校项目,我们的团队选择在 Messenger APIs 上构建一个对话分析工具,它可以洞察不同的对话,如情感,主题和常用词。

在成功完成这些项目并于 2016 年夏天在 Snap 进行了另一次 se 实习后,我决定终于是时候追求一些新的东西了。我以为可以是 ML 和里的东西而不是 DS。

认真考虑数据科学

2016 年秋天,我考虑的只有 SE 和 ML 实习。在参加了优步 DS 信息会议后,我意识到这可能是一个很好的机会,因为数据科学家们从事的项目很有趣,人们看起来很有才华。我决定申请。这将是我申请的唯一一个副主任职位。

出于几个原因,我仍然没有投入到优步 DS 实习中。我专注于获得 SE 和 ML 实习机会;我没有时间为 DS 面试做准备。我知道 DS 的实习机会非常抢手;只有一个职位,但有数百名申请人(这在我们大学的求职公告板上可以看到)。我与许多有正式 DS 背景的有能力和热情的同行竞争。尽管如此,不被太投入的一个好处是,在面试过程中,它给了我很多内心的平静;通常我一想到面试就会变得焦虑。

在申请优步大学后不久,我接受了 DS 挑战。它包括编写 SQL、设计实验和进行探索性分析——所有这些都与优步有关。这使得它新颖有趣;在做这个挑战的时候,我确实学到了一些东西。在提交了我的解决方案后,招聘人员主动安排了一个小时的面试,我觉得一切顺利。几周后,招聘人员告诉我,我是他们实习的第一人选——我既惊讶又欣喜若狂!

我意识到我的经历终于有了回报——从各种 SE 实习、ML 副业项目和 Yelp 的 DS 工作中。我想说这些经历弥补了我传统 DS 背景的不足;他们让我的 DS 背景独一无二。

进入数据科学领域

此时,我必须在 SE 或 DS 实习之间做出选择。我将 DS 视为一种增长技能的方式,这种方式使与其他软件工程师区分开来,比如学习更多关于分析、最新研究、ML 和统计学的知识。我把 DS 看作是一个学习比我最初打算的更广阔领域的机会。凭借我在过去几年学到的一切,我突然意识到我已经做好了在优步取得成功的准备。出于这些原因,我决定接受优步 DS 2017 年冬季实习的邀请。

这是一次很棒的实习。我向业内一些最优秀的人学习,并有机会解决有趣且具有挑战性的问题。这和我在 Yelp 上的经历很相似,除了更加强调独立性、演示、交流结果和协作。在优步,我对自己的 DS 能力更有信心。这种信心帮助我在实习结束后从事更雄心勃勃的 DS 项目,比如我们的 SE 班级简介。在这一点上,我认真考虑进入 DS 全职。

在数据科学和软件工程之间抉择

2017 年秋天,我的最后一次实习是在 WhatsApp 的 SE 实习。2018 年,我即将毕业,我要回答的第一个问题是:我应该进 DS 还是 SE?

最终我决定和 WhatsApp 的 SE 一起走。SE 满足了我做一些能影响人们的事情的愿望。这种感觉在我在 WhatsApp 实习期间被重新点燃,因为它能够运送即时影响数十亿用户的产品。作为一名数据科学家,我没有这种感觉,因为对最终用户有额外的间接性;但是你确实通过分析和洞察极大地影响了产品。我观察到工程师和数据科学家的比例通常是几比一。SE 仍然是一个需求量很大的领域——有更多的职位,我认为它会提供更多的职业稳定性。

由于我的背景和经验,我觉得我在 SE 比 DS 更有优势。有许多背景非常适合 ds,这使它以自己的方式具有竞争力。我发现,研究最有趣问题的最佳数据科学家通常拥有物理学、经济学或运筹学博士学位。如果我想达到他们的成就,我必须非常努力地工作;我不确定我是否对 DS 有足够的热情去做这件事。我不认为这是放弃 DS,而是利用SE 和我的优势。

外卖

我决定进入 SE 已经两年了:我可以自信地说这是一个正确的决定。更重要的是,我不后悔投资 DS 的时间,这仍然是一次很棒的经历,我会毫不犹豫地再做一次。如果我能把我的旅程总结成几个要点,这就是我要说的。

学会如何学习

你应该调整你的学习风格以最适合你想要完成的目标。我发现学习 DS 和 ML 的最好方法是阅读研究论文和参与真正的项目——行动胜于语言。围绕学习建立一致性,比如每天学习。为你想要学习和完成的事情设定具体的目标,比如每周读一篇论文。

寻找导师并接受反馈

向他们寻求诚实和建设性的反馈,尤其是在你想擅长的领域。如果你没有导师,你可以通过工作或者通过相互联系找到一个;通常情况下,最好是通过人脉进行介绍,而不是做一封冷冰冰的邮件。确保你开诚布公,设定明确的期望,并与你当前和/或潜在的导师达成一致。

当你稳定的时候,冒险更容易

稳定可能意味着在事业上、经济上、情感上和/或身体上的稳定。我对工程和我在生活中的位置很满意;这给了我在 DS 和 ML 中探索、实验和失败的空间。稳定让你从第一次尝试就匆忙成功的压力中解脱出来。确保你快乐和稳定,如果你有一个安全网,尝试新事物会更容易。

拥抱缘分

我尝试了很多没有太多方向的东西。一旦优步 DS 的机会出现,我意识到我已经做好了抓住机会的准备。保持你的选择开放和耐心,一些伟大的事情可能就在眼前。

假装直到你成功

每个人都必须从某个地方开始。这很有挑战性,因为大多数时候,你被期望知道如何做这份工作,甚至在你被雇佣之前。这可以通过自学足够多的知识来得到这份工作来克服,然后在工作中学习其他一切——就像我在 Yelp 和优步所做的那样。在职学习通常质量更高,因为你可以解决实际问题,获得公司资源,与同事合作并向他们学习。经过足够的时间和毅力,你最终会成为真正的交易者,不再需要伪装。

我希望我的旅程表明,通过一点点努力和意外收获,你可以让自己抓住那些意想不到的机会。祝你一切顺利,我希望这有所帮助!

我很想听听你的意外之旅,你对这篇文章的看法,或者你是否觉得这很有用。请在下面的评论中告诉我你的想法。

我如何用 R 建立分类模型

原文:https://towardsdatascience.com/how-i-build-a-classification-model-with-r-800acc975555?source=collection_archive---------30-----------------------

虹膜数据集的探索与分析

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

分类是机器学习的一个非常重要的领域,因为它允许您基于某些特征创建类别。它现在被用在很多领域,比如市场营销,我们可以根据访问者的购买欲望对他们进行分类。我们刚刚在之前的一篇文章中讨论过。

在这一个我们将采取一套花卉和他们的特点。我们将分析这些花的不同特征,并尝试看看它们是否相关。这将有助于我们创建一个分类模型,每次我们给出一种花的特征,我们就可以知道它是哪个物种。

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

对于这个分析,我们将使用一个数据集,它来自一个非常著名的数据集银行 Kaggle。这个索引了 150 种花,人们把它们与一个物种和一些特征联系起来。

特色展示

让我们看看通过使用 summary 函数可以在这个数据集中找到什么。

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

我们可以看到这里有三个不同的物种:Setosa,Versicolor 和 Virginica,每个物种有 50 个记录。我们还可以看到,与其他特征相比,花瓣长度特征具有非常高的范围。如果我们深入研究,我们可以说第一个四分位数和中位数之间的巨大差异可能是由一个具有非常小花瓣的物种造成的。够投机!让我们一起深入这个数据集。

发现歧视性特征

研究每个物种的的哪个(些)特征以及在多大程度上区别对待将会很有趣。为了做到这一点,我们将从分析每个物种与其他物种的关系开始,以确定其中一个特征是否不在平均值中。如果是这样,我们将更精确地分析这个特征。

濑户沙

我们将从分析 Setosa 的特征之一是否远离平均值开始。

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

我们首先在一个变量和另一个变量中保存与刚毛藻属物种相关的特征的平均值,以及所有不是刚毛藻属的花。然后,我们可以绘制它。

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

我们可以立即看到花瓣长度特征似乎歧视 Setosa。现在我们只分析这个特性。

让我们比较一下 Setosa 和所有花的花瓣长度分布。

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

Setosa 的五分之一长度分布(红色)与全球五分之一长度分布(蓝色)

简直明目张胆!刚毛藻的花瓣比一般的花瓣要小得多。甚至似乎这种独特的特征歧视了我们这个物种。我们可以用 r 快速检查这些信息。

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

事实上,花瓣小于两厘米的花 100%都是刚毛花。

杂色的

让我们对云芝做同样的事情:

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

在这种情况下,我们可以看到,没有一个品种的平均特征偏离平均值太多。所以我们不会马上详细介绍这个物种。

弗吉尼亚

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

嗯,看起来海滨锦鸡儿花的花瓣数高于平均值,让我们分析一下海滨锦鸡儿花的花瓣长度在所有花中的分布。

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

弗吉尼亚的五分之一长度分布(红色)与全球五分之一长度分布(蓝色)

正如我们所看到的,似乎具有大花瓣的数据集的虹膜主要是海滨鸢尾。我们可以通过观察花瓣大于 5 厘米的花的比例来验证这一点

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

95.6%是海滨鸟,这个比例很大,让我们可以区分这个物种。

让我们回到云芝

正如我们所见,花瓣小于 2 厘米的花 100%是刚毛花,花瓣大于 5 厘米的花 95.6%是海滨花。所以顺理成章的是云芝介于两者之间。让我们来看看这个:

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

85%花瓣长度在 2 到 5 厘米之间的花是杂色花。

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

我们可以很快看到,缺少的 15%是在弗吉尼亚号上。

所以我们可以看到花瓣的大小是一个特征,似乎可以很好地区分所有的鸢尾物种。所以在我们建立模型的时候使用它是非常重要的。

特征之间的相关性

在这一部分,我们将试图找到相关性或去相关性。首先,我们将观察在同一物种中,某些特征是否会影响其他特征。然后我们将比较所有花的一些特征。

同一物种内的相关性

corrplot 函数允许我们拥有一个相关表。我们可以将这个函数应用到我们的数据集,方法是分离出同一物种的花朵。

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

这些相关表允许我们做更多的分析:

  • 首先,很明显,萼片大小的演变与萼片宽度的演变成正比(海滨锦鸡儿和刚毛锦鸡儿)。
  • 我们还可以注意到更令人惊讶的事情:例如,在海滨锦鸡儿中,萼片的大小与花瓣的大小相关。

不同功能的比较

通过比较我们在这些花上的不同特征,并按物种对它们进行分类,我们将能够看到除了之前看到的花瓣大小之外,是否还有其他特征允许我们区分物种。

我们将根据萼片的宽度来显示其大小。我们将对花瓣做同样的处理,最后我们将根据萼片的大小显示花瓣的大小。

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

我们可以看到,第一张图不允许我们对物种进行分类,另一方面,另外两张图显示了物种之间相当清晰的分界线。刚毛藻的花瓣和萼片明显比其他种类的小。海滨种有最长最厚的花瓣和萼片。杂色种介于两者之间,与海滨种有些混合。在对不同的特征及其相互关系进行了长时间的分析之后,我们将能够建立一个模型,根据这些花的特征来猜测它们的种类。

构建分类模型

如果分析做得好,模型的创建和训练应该不会花太多时间。为此,我们将使用 Python,首先加载数据,区分标签和要素。然后,我们将构建两组数据,一组用于训练我们的模型,另一组用于测试它。最后,我们将训练我们的模型,并用测试数据集进行测试。

加载数据

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

数据现已加载!
我们在一边有 X,它包含我们之前看到的特征,在另一边有 y,它包含花的物种名称,这是我们想要让我们的算法猜测的。

拆分数据

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

分割数据将允许我们在从未见过的数据上测试我们的模型。

缩放数据

缩放数据通常会产生更好的结果。我们用 sklearn 来做。

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

训练和测试我们的模型

因为班级被很好的分开,KNN 模式可能是一个很好的选择

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

我们用这个模型得到了一些很好的结果!!

最后

我们可以通过一个简化的例子看到,为了获得一个好的分类模型,找到允许我们区分我们的类(这里是物种)的特征是很重要的。
只有四种不同的特征,我们能够在 95%的情况下预测花的种类。
因此,我们很容易想象像 PlantNet 这样的应用程序,通过它的智能手机,我们可以识别花卉的种类,使用更多的功能,并获得更多不同种类的精确数据。

我是如何造出一个机器人来打败霸王龙的!

原文:https://towardsdatascience.com/how-i-built-a-bot-to-beat-t-rex-run-3252a47cdcc6?source=collection_archive---------24-----------------------

这篇文章将解释从头开始构建你自己的机器人的一步一步的过程,它将无限期地玩谷歌的 T-Rex 游戏。

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

简介

T-Rex run game 是一款我相信每个人都玩过的游戏,他们有一部手机或一台装有谷歌 Chrome 的笔记本电脑,但没有连接互联网。对于那些不知道的人,只要关掉手机或笔记本电脑的互联网连接,打开任何一个使用谷歌浏览器的网站,你就可以玩霸王龙快跑了!游戏的基本目标是跳跃或闪避障碍物,让你的恐龙活着。然而,作为人类,我们可能会感到无聊或分心,可能会失去游戏。为了最大限度地打败这个游戏,我们需要一个极度专注的人,一个不会被这个世界上的任何事情分心的人,一个像机器人一样的人!

在这里,我将教你如何构建一个简单的机器人,它将为你玩霸王龙奔跑的游戏,而你可以安静地坐着看它玩(虽然这违背了任何游戏的全部目的,但它只是为了好玩)。

先决条件

我将使用图像处理库在 python 中构建这个机器人。首先,您需要在 PC 或笔记本电脑上安装 Python 3.6 或更高版本。这是你需要安装的库的列表—

  1. pyautogui——这是一个具有与 T-Rex 运行 gui 交互功能的库
  2. PIL——PIL 图书馆用于获取屏幕截图并对其进行图像处理
  3. 时间——用于给出跳跃之间的不同延迟

这些库可以使用命令“pip install ”进行安装。w3schools 上有大量关于使用 pip 和其他命令以及使用 python 的基础知识的文档。这是它的链接——https://www.w3schools.com/python/python_pip.asp

然后,我们通过以下代码片段将我们的先决条件加载到我们的代码中—

import pyautogui
from time import sleep
from PIL import ImageGrab,ImageOps

逻辑

现在,进入文章的主要部分。所以我们在建造机器人时遵循的基本逻辑是模仿人类玩游戏的方式。一个人看到了障碍,并试图为恐龙跳跃计时以避开障碍。对于我们的机器人,我们将做同样的事情。基本上,这里我们截取了霸王龙游戏屏幕的截图,并检查图像中树或鸟障碍物的位置,如果障碍物足够靠近恐龙(使用代码中定义的阈值定义),我们会要求恐龙跳跃

我正在使用这个我随机找到的网站,这是同一个霸王龙游戏,但在互联网上——http://www.trex-game.skipser.com/

第一步是获取游戏网页的屏幕截图,并定位恐龙的精确像素值。我们找到恐龙的顶角和底角像素值。这可以通过将图像导入 paint.net 并找到像素值来完成。另外,如果你注意到,恐龙的位置是不变的,只有障碍物在向它移动。因此,我们采用这种方法,根据恐龙相对于向前移动的障碍物的静态位置,在恐龙上创建一个动作。下图显示了我们如何使用标尺和网格视图获得恐龙图像的像素位置。通常一幅图像中所有像素值的总和是一个数,如果图像不变,总和总是保持不变。我们将牢记这一点,并在接下来的几段中解释为什么这很重要。

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

类似地,当一棵树、一只鸟和重放按钮出现时,我们截取游戏的屏幕截图,并记下其像素位置。这不是现在所要求的,但是在将来会很有帮助。

功能和编码

在这个游戏中有 5 个不同的对象-恐龙,树 1,树 2,鸟和重播按钮,如果你崩溃了。你可以使用我为每个字符使用的像素位置值。为了简单起见,我使用了一个类定义来保存这些值。这是如何看起来—

class coordinates():
    replay=(353,388)
    tree1=(195,416) 
    tree2=(245,433) 
    bird=(155,379)
    dino=(170,391)

下一步是实际编写这段代码的逻辑。我们为不同的过程或目标创建不同的功能。

首先,我们创建一个函数,它将捕获游戏中的每一帧或截取每一帧的屏幕截图,以便对其进行处理。就像人类玩游戏时如何看待游戏一样,机器人也需要使用截图来看待游戏。这显示在下面的代码片段中。

def imagegrab():
    box=     (coordinates.dino[0]+20,coordinates.dino[1],coordinates.dino[0]+100,  coordinates.dino[1]+30) image = ImageGrab.grab(box)
    grayimage = ImageOps.grayscale(image)
    a = array(grayimage.getcolors())
    return a.sum()

在上面的函数 imagegrab()中,我们获得恐龙的坐标,并在它周围创建一个框。基本上,盒子是一个矩形,每个角有 4 个像素位置值,恐龙在盒子里面。盒子在恐龙的右边有一些开放的空间。然后,我们对盒子进行截屏,盒子的行为就像我们创建跳跃或闪避动作的逻辑一样。这里的基本逻辑是,如果一棵树或一只鸟进入盒子,恐龙被要求分别跳跃或躲避。

但是机器人实际上看不到屏幕截图或者盒子里面发生了什么。机器人只能看到和读取像素。因此,正如上一节所暗示的,我们计算盒子中所有像素的总和。由于恐龙和盒子的图像是恒定的,并且恐龙没有移动,所以盒子中的像素总和总是返回一个常数。但是,如果一棵树或一只鸟进入盒子,总和值实际上会根据像素值增加或减少,这时机器人会得到跳或蹲的提示。下图取代了屏幕截图或框的外观。

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

一旦我们有了恐龙和盒子的图像,我们就将盒子转换成灰度以增加我们的处理,因为颜色在这里不是一个重要的因素,因为我们只需要计算盒子中像素值的总和。

我们写的下一个函数是跳转函数,它基本上是当一棵树出现时要求机器人跳转。Puautogui 库用于模拟键盘控制,使机器人能够与游戏互动。

类似地,编写了一个 duck 函数。你可以在这里阅读更多关于 pyautogui 的信息——https://pyautogui.readthedocs.io/en/latest/keyboard.html

def jump():
    pyautogui.keyDown('space')
    sleep(0.05)
    pyautogui.keyUp('space')
    sleep(0.05)def duck():
    pyautogui.keyDown('down')
    sleep(0.05)
    pyautogui.keyUp('down')
    sleep(0.05)

我们写的下一个函数是重启游戏。如果偶然机器人失败(非常低的机会),它应该自动重新启动,没有人类的帮助。我们使用重放按钮坐标并模拟在该位置的点击。下面是它的代码片段。

def restart():
    pyautogui.click(coordinates.replay)

一旦完成了所有的函数,我们就可以编写并运行我们的主函数了。下面的代码片段显示了 main 函数。

def main():     
     restart()
     while True:
         imagegrab()
         if(imagegrab()!=2646):
             jump() 
             sleep(0.001)If __name__=="__main__":
     main()

结果

这就是机器人无限期运行的方式,也是我们击败霸王龙运行游戏的方式。这个逻辑也可以用在许多不同的游戏中,也就是使用像素值总和的逻辑。我们应该始终考虑到机器人只能看到像素,其他什么也看不到。对于未来的范围,我们实际上可以使用 OpenCV 和其他图像处理技术动态地计算和找到树和鸟的位置值(我计划在我的下一篇博客中介绍)。

感谢您的时间,希望它是有益的。

我如何建立一个电晕统计 Twitter 机器人

原文:https://towardsdatascience.com/how-i-built-a-corona-stats-twitter-bot-4f0dc90cf96e?source=collection_archive---------65-----------------------

我如何用 Python,Pandas 和 Tweepy 制作了一个包含新冠肺炎每日统计数据的机器人。

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

迪米特里·卡拉斯泰列夫在 Unsplash 上的照片

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

2020 年 3 月初,新冠肺炎疫情在德国获得了牵引力。每一个主要的新闻版面和报纸都刊登了关于新感染和事实的图表和统计数据。大多数人有一个共同点:他们从约翰·霍普金斯大学获取数据,并在 GitHub 免费发布数据集。我在玩 Python 和熊猫,我在寻找一个好的项目。这是我决定创建一个从 JHU 获取所有数据的 Twitter 机器人的时刻。我在清理数据,创造情节,发推文。这篇文章描述了我如何使用和清理数据集,以及如何用不到 150 行代码发布推文。全部代码在我的 GitHub

获取数据并清理干净!

在我们用统计数据创建一个机器人之前,我们需要一些数据。这是我的计划:

  • 我的机器人应该显示全球和德国的感染人数。
  • 我希望显示与前一天相比的新感染。
  • 我在计算一周内的增长百分比。
  • 该机器人应该有一个与人口相关的感染线图附加的图像。

幸运的是, JHU 有一个数据集,它提供了我需要的一切。我已经创建了一个小助手模块来做清理和绘图。主要的方法是“get_clean_data”和“plot_diagram”。让我们深入研究数据清理。

第一步是将 CSV 读入 Pandas 数据帧并删除未使用的列。熊猫可以从给定的 URL 读取 CSV。由于 JHU 提供每日更新的时间序列数据 CSV,我不必担心获得最新的 CSV。在该数据集中,一些国家深入到其所在的州。要获得一个国家的所有汇总数字,我必须按“国家/地区”分组。分组之后,我得到了德国的数据框架,并对其进行了总结。我对所有数字做了同样的处理,得到未分组数据的总和。现在我有了两个新的数据框,分别是德国和世界各地的数据。最后一步是删除未使用的列,并添加与人群相关的感染的计算值。相应的方法是自我解释。

清洁就这些了。现在让我们添加一些我在 Twitter 机器人中使用的更有趣的事实。

计算一些有趣的数据

为了检索实际被感染的人数,我编写了一个返回数据的函数。

我增加了一个方法来得到与前一周相比的增长

绘制简单的图表

因为我想为每条 tweet 添加一张图片,所以我用 Matplotlib 绘制了一个简单的线图,并将其保存为 PNG。我写了一个小方法来绘制我的图表。

该方法获取必要的参数并保存图像。对于我的感染相关人群的图表,我添加了一个方便的方法用于我的机器人。

撰写一条推文并发送出去

我使用 Tweepy 与 Twitter API 对话。Tweepy 很容易理解,大约十行代码就可以发布推文。为了能够发推特,你必须在推特开发者门户注册一个应用程序以获得 API 密钥。一旦你得到了你的密钥和秘密,Tweepy 就可以使用了。

机器人本身是一个简单的 Python 脚本

代码易于管理。我正在用 CSV 的 URL 实例化我的助手模块,获取数据,绘图并用我的 Tweet 文本组成一个字符串。最后一步是启动 Tweepy,用给定的文本发布一条推文。

我在家里用覆盆子酱运行我的机器人。机器人脚本每天早上由 cron 作业执行。该机器人从 3 月 11 日开始运行,到目前为止没有任何故障。

我的推特机器人在推特上发布电晕统计数据

如你所见,编写一个简单的 Twitter 机器人很容易。如果你想进入主题,我建议你创建一些小项目。对我来说,用熊猫来清理和使用项目中的数据,并每天在我的 twitter 账户上发布我的见解,这很有趣。

在陷入欧洲最严重的冠状病毒爆发后,我如何用 Dash 和 Plotly 建立一个仪表板

原文:https://towardsdatascience.com/how-i-built-a-dashboard-with-dash-and-plotly-after-being-stuck-in-europes-worst-coronavirus-dc41aaeeca4b?source=collection_archive---------26-----------------------

如果你正在阅读这篇文章,我确信我们有着相似的兴趣,并且现在/将来会从事相似的行业。那么我们就通过 Linkedin 来连线吧!请不要犹豫发送联系请求!Orhan g . yaln—Linkedin

此外,许多问题导致我们创建了一个用于冠状病毒更新的 Instagram 页面。您可以关注我们的每日更新: OUTBREAKSTATS

冠状病毒(新冠肺炎)的爆发已经以这样或那样的方式影响了每个人的生活。确诊人数在 10 万左右,死亡总人数超过 3000 人。出现确诊病例的国家数量接近 70 个。另一方面,比病毒更可怕的是。疫情爆发的成本已经达到数万亿美元,经济学家正在谈论全球经济衰退。这对 2020 年来说肯定不是一个好的开始。

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

米兰多摩爆发前后(来源:Unsplash)

意大利北部爆发电晕

因此,从中国到美国,从挪威到澳大利亚,我们到处都能看到冠状病毒的影响。然而,从统计数据来看,如果你生活在某些国家,你面临的风险更大,不幸的是,我经历了更严重的风险,因为我生活的城市博洛尼亚位于意大利北部,那里的疫情是欧洲最严重的。不幸的是,意大利的确诊病例总数已经超过 2000 例。

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

LN 转型的欧洲现状(来源: OutbreakStats )

作为一个不得不远离公众的人,我有一些空闲时间,相信我,我用大部分时间搜索冠状病毒爆发的最新进展。这种可怕的情况给了我在最坏的情况下做最好的事情的想法。

查找最新冠状病毒爆发数据的困难

搜索冠状病毒爆发统计数据是一项繁琐的工作,因为每次我都必须访问多个来源,以了解正在发生的事情。经过一番紧张的研究,我发现约翰·霍普金斯大学系统科学与工程中心发布的疫情数据每天更新。然而。csv 格式使得每次都难以获得有意义的见解。这就是为什么我们有数据可视化这个学科。

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

确认的冠状病毒病例表(可在 CSSE 获取)

用 Plotly 和 Dash 实现数据可视化

我在自我隔离期间所做的另一件事是在阴谋和破折号方面超越我的知识。

Plotly 是一个交互式 Python 数据可视化库。您可以使用 iPython 在几秒钟内生成漂亮的交互式图形。从 CSV 文件中提取见解是非常好的。有人可能会说,Plotly 是一个花哨的 Matplotlib 。与纯 Javascript 数据可视化库相比,使用 Plotly 的一个缺点是无法与其他人共享它,因为它使用 Python,一种后端语言(附:你可以通过这篇 文章 了解更多关于 Javascript 数据可视化库的信息)。

当我在想我不可能是唯一一个看到这个缺点的人时,我发现了 Dash。这些库背后的公司 Plotly 对 Dash 解释如下:

“Dash 平台使数据科学团队能够专注于数据和模型,同时制作和共享基于 Python 和 R 模型的企业级分析应用。通常需要一个后端开发团队、前端开发团队完成的工作,都可以通过 Dash 来完成。”[ 阴谋地

我非常同意这种说法。多亏了 Dash,无论是后端还是前端,你都没有深入的知识。要构建和发布仪表板,Dash 和 Plotly 方面的知识就足够了。

对于这项任务,我的资历过高

另一方面,在过去的三个月里。我完成了三门 Udemy 课程:

有趣的是,Dash 构建在 Flask 之上作为后端,ReactJS 作为前端,并使用 Plotly 作为数据可视化工具。尽管我不需要了解 React 和 Flask,但当我试图弄清楚 Dash 背后的逻辑时,它还是派上了用场。因此,我想,作为一个被困在病毒爆发中并拥有新技术知识的人,为什么不利用我最近获得的技术知识来创建一个关于我这些天日常生活的仪表板呢?仪表板的想法对我来说是唯一的“在最坏的情况下做最好的事情”的想法。因此,我在以下来源的帮助下构建并发布了 OutbreakStats 仪表板:

我用于仪表板的来源

数据库

新闻更新

等值区域图

  • 地图框(您可以使用 Plotly 和 Dash 内的地图框地图)

技术知识:

计算机网络服务器

主题

集成驱动电子设备

我对《阴谋与破折号》的思考

我之前和 Plotly 合作过,在 UpworkFiverr 平台上做过一些自由职业者的工作。与 Matplotlib 和 Seaborn 相比,我的客户喜欢这个结果,因为 Plotly 也提供了交互性。能够发表我在 Plotly library 完成的工作是我学习 Dash 的主要动机。

到目前为止,我对 Dash 的体验如下:

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

Flask 是一个轻量级的 Python Web 框架

Dash 严重依赖 Flask,它几乎可以作为一个 Flask 应用程序。不可避免的会注意到 Dash 和 Flask 的相似之处。在 Dash app 中,构建仪表盘有两种组件类型:核心组件HTML 组件

核心组件

Dash 为交互式用户界面配备了增压组件。由 Dash 团队编写和维护的一组核心组件可在 dash-core-components 库中找到。[ 仪表板文档

使用核心组件,您可以创建(i) Plotly graphs 和(ii)React 组件,如下拉菜单、滑块、输入。核心组件就像相对复杂的 React 组件,你可以在 Semantic-UI-ReactMaterial-UI 中找到。不同之处在于,您使用 Python 将这些组件添加到您的仪表板中。不需要前端技能🥳.

HTML 组件

Dash 是一个 web 应用程序框架,围绕 HTML、CSS 和 JavaScript 提供纯 Python 抽象。仪表板文档

这些组件呈现基本的 HTML 标签,如

、。同样,不同之处在于您使用 Python 来添加这些组件。因此,你甚至不需要知道 HTML 就可以构建一个 Dash 应用。不需要标记语言技能🎉🍾。

其他观察

要添加自定义的 javascript、CSS、图片文件,你所要做的就是创建一个文件夹(必须命名为 资产 )并将所有文件存储在这个文件夹下。它们不需要任何导入或配置设置就可以工作,因为 Dash 已经这样配置了。

最后的想法

Dash 是一个 Flask 应用程序,专门为创建仪表板而定制。因此,你不必考虑每一个小细节,因为它们已经被 Dash 团队配置好了。只要您坚持使用文档来创建您的仪表板,开发过程就非常容易和快速。然而,如果你想定制应用程序并添加新功能,使其不仅仅是一个仪表板,可能会有缺点。

结论

我希望你喜欢这篇博文。在我以前的文章中,我通常分享我的源代码,因为它们更像是一个教程,而不是一篇博客文章。在本文中,我试图向您展示一种构建仪表板并为公众服务的方法。你可以在 OutbreakStats 访问我为冠状病毒爆发数据创建的网站,这里有一个预览:

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

OutbreakStats 仪表盘的预览

因此,生成仪表板代码取决于您的想象力。如果你仔细地遵循我在这篇文章的仪表板部分使用的资源,你甚至可以在一天内轻松地构建你自己的仪表板。

订阅邮件列表获取完整代码

如果你想在 Google Colab 上获得完整的代码,并获得我的最新内容,请订阅邮件列表:✉️

立即订阅

喜欢这篇文章

如果你喜欢这篇文章,可以考虑看看我的其他文章:

[## 使用 MNIST 数据集在 10 分钟内完成图像分类

towardsdatascience.com](/image-classification-in-10-minutes-with-mnist-dataset-54c35b77a38d) [## 利用生成性对抗网络在 10 分钟内生成图像

使用无监督深度学习生成手写数字与深度卷积甘斯使用张量流和…

towardsdatascience.com](/image-generation-in-10-minutes-with-generative-adversarial-networks-c2afc56bfa3b)

我如何建立一个深度学习的表情符号 Slackbot😄 😖 😉

原文:https://towardsdatascience.com/how-i-built-a-deep-learning-powered-emoji-slackbot-5d3e59b76d0?source=collection_archive---------21-----------------------

还有为什么 AI 难的部分和 AI 没关系

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

晨酿Unsplash 上拍摄,作者编辑

当我在加州大学伯克利分校完成我的计算机系统博士论文时,我经常想知道人工智能世界的生活是什么样的。我的人工智能朋友们不断吹嘘深度学习将如何彻底改变从医学到网上购物的一切——他们的论文一经发布就获得了 100 次引用(见鬼!).但我一直很好奇他们到底是怎么用 AI 解决现实问题的。

与此同时,我最近注意到,我把大部分时间都花在了回应无聊的对话上。受到最近一篇博客帖子(经历了许多论文写作冷漠)的启发,我决定构建并部署一个深度学习驱动的 Slackbot,用最合适的表情符号自动添加对 Slack 帖子的反应。😃 👍

在这篇文章中,我回顾了我构建这个由 DeepMoji 驱动的 Slackbot 的经历。我最终使用两种不同的框架部署了 deep moji(AWSsage makerAlgorithmia )。在这里,我比较了我使用这两个系统的经验,强调了预测服务系统的一些优势、局限性和改进的机会。这篇文章非常高级,但是这个库有详细说明和代码的链接来复制我的 Slackbot。

就我个人而言,过去几年我一直致力于可扩展的云系统。我特别兴奋地投入到这项任务中,因为我们最近花了一些时间思考可扩展预测基础设施。也就是说,我肯定不是人工智能系统的专家,所以如果我错过了什么,请告诉我。

步骤 0:设置 Slackbot

设置一个 Slackbot 相当简单,但是需要在 Slack 网站上点击很多次。我在这里用一些屏幕截图记录了这个过程,但在高层次上,我创建了一个机器人,将它链接到我的工作区,并授予它查看消息和添加表情符号反应的权限。

下一步:选择一个机器学习模型,让我的 Slackbot 能够用表情符号对文本做出反应!

步骤 1:在我的笔记本电脑上运行一个模型

那么我应该调用什么人工智能魔法呢?我没有训练模型的数据,但幸运的是,我可以重新利用大量预先训练好的模型。我的人工智能同事告诉我,这是模型设计的一个新兴趋势:从一个现有的模型开始,根据你的任务对它进行微调。在我的例子中,DeepMoji 模型正是我所需要的,并且已经被训练和开源。

对于一点点上下文,DeepMoji 在 12 亿条带有表情符号的推文中进行了训练,以理解语言情绪以及它如何与表情符号相关联。我的用例非常简单:向模型发送一条松弛的消息,并用模型认为最能反映消息情绪的表情符号做出反应。

坏消息:DeepMoji 用的是 Python 2(恶心)。好消息:HugginFace 的优秀人员开发了 torchMoji ,这是 DeepMoji 的 PyTorch 实现,支持 Python3。torchMoji 代码库有一个 bug,我必须修复它才能正确解析PackedSequence PyTorch 对象。工作版本可在我的叉子这里获得。这一部分只需要一台笔记本电脑,所以如果你有兴趣的话,你可以在家跟进。

随着 bug 的修复,获得训练过的模型是很容易的。首先,我将 torchMoji 作为一个包安装:

pip3 install git+https://github.com/cw75/torchMoji

我需要模型权重和词汇文件来初始化模型。词汇文件已经在 repo 中了(这里是)。为了下载权重,我运行了:

python3 scripts/download_weights.py

既然已经下载了所有的先决条件,那么做一个预测只需要几行 Python 代码:

您可以测试它以确保一切正常:

相当酷!我甚至不需要得到一个图形处理器。

下一步:用我的 Slackbot 可以调用的 REST web 接口把它变成一个预测服务!

步骤 2:建立预测服务

在这种情况下,服务预测是系统的挑战;让这个机器人真正工作的操作引擎。重要的问题是预测服务应该放在哪里?

一个简单的解决方案是将我上面写的预测脚本包装在一个 Flask 服务器中,并使用一个类似 ngrok 的工具在我的笔记本电脑或 EC2 实例上生成一个 REST 端点。问题是,我想将这个机器人部署到我实验室的 Slack 团队中,这样每个人都可以玩它,所以这个机器人需要始终在线并且可伸缩。

所以我需要一些真实的东西,作为一名系统黑客,我的一部分想要从头开始构建服务:将我的脚本打包成一个 Docker 映像,启动一个 Kubernetes 集群,并通过 AWS ELB 公开 REST 端点。

另一方面,作为一名研究人员,我不想重新发明轮子,我知道像谷歌、亚马逊和微软这样的云提供商都提供预测服务。第一个想到的平台是 AWS SageMaker,这是 AWS 上的一项托管服务,涵盖了从模型开发到部署的整个机器学习生命周期。该团队在 SIGMOD’20 上发布了一篇关于 SageMaker 的论文,我多年来一直在使用 AWS 服务进行研究,所以我认为这一定是合理的。我没有意识到我正步入深渊……

平台 1:亚马逊 SageMaker

我原以为在 SageMaker 上部署模型会很简单。我已经有了一个 Python 依赖列表和上面显示的预测脚本。我想做的只是将脚本、依赖项和模型上传到 SageMaker,创建一个 REST 端点,并将其连接到 Slackbot。

但是唉,没有办法上传一个模型到 SageMaker。相反,我必须构建一个 Docker 映像,其中安装了我所有的 Python 依赖项。我还必须编写一个 Flask 服务器来包装我的预测脚本,并响应 SageMaker 的健康检查和模型调用请求——你可以在这里看到文档,在这里看到 docker file,在这里看到我的 Flask 服务器。这并不复杂,但如果我不熟悉 Docker 和 Flask,这可能需要我一段时间才能弄明白。

我用 Docker 已经很多年了,但是我在 AI 的朋友对它不是很了解。你如何看待 Docker:建造容器是人工智能的最高水平吗?人们精通它吗?

我开始想知道 SageMaker 为我做了什么。如果我做了所有这些,为什么不运行我自己的 Kubernetes 集群呢?这甚至可能更简单,因为 Kubernetes 会自动为我进行健康检查!

SageMaker 与 DockerHub 不兼容,所以一旦我构建了 Docker 映像,我就必须将它推送到亚马逊自己的 Docker 注册表— AWS ECR (弹性容器注册表)。接下来,我创建了一个提取 Docker 图像的 SageMaker 模型和一个使用我的模型的 SageMaker“端点”。这需要选择节点类型(ml.m4.large)和集群大小。最后,我可以创建我的 REST 端点!

在等待我的服务开始 10 分钟后,我激动地看到状态从“正在创建”变为“正在服务”,并带有一个绿色的勾号。✅真棒!我将端点 URL 复制粘贴到我的 Slackbot 配置中,准备让实验室中的每个人眼花缭乱。然后……Slack 吐出了这个错误:

**Your URL didn't respond with the value of the challenge parameter.**

是时候排除 SageMaker 的故障了!我必须使用boto3(具有适当的权限)编写一个 Python 脚本,并调用[InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)来测试端点。使用这个脚本调试半个小时,我发现端点本身实际上工作正常。真正的问题是 SageMaker 只能从 AWS 虚拟专用集群内的访问,并且不应该接受来自外部互联网的请求,所以 Slack 无法访问它!

根据这篇博客文章,解决方案是“简单地”使用 AWS’API Gateway服务接受来自 Slack 的流量,将请求路由到认证请求的 AWS Lambda 函数,然后使用 Lambda 将预测查询发送给 SageMaker。什么?!?这值得一个架构图:

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

作者图片

当我想做的只是让我的模型可以从网上访问时,这是一些疯狂的重定向!好的,那么…是时候写一个 Lambda 函数了。我总是对使用无服务器系统的机会感到兴奋——毕竟这是我大部分研究的重点——但是这个比我预期的要复杂一点。

实际上,这比我想象的要复杂得多。我必须响应 Slack 的“挑战请求”(第 24–29 行),验证每个请求以抵御黑客(第 31–37 行),并显式解析来自输入 HTTP 请求的文本字段(第 38–43 行),所有这些都是在我实际调用 SageMaker 模型(第 47–52 行)之前。最后,在第 55 行,我使用了 Slack Python API 客户端来添加对输入消息的反应。

到目前为止,还有一些值得注意的事情我已经跳过了:

  1. 我必须用sagemaker:InvokeEndpoint策略创建一个 IAM 角色(AWS 的安全和认证服务),并将其分配给 Lambda 函数,以便它可以查询我的 SageMaker 端点。
  2. 当使用 Slack API 客户端时,我必须提供机器人的 OAuth 访问令牌(第 13 行)和签名秘密(第 15 行),它们对于每个 Slackbot 都是唯一的。
  3. 我必须显式地将第三方 Python 依赖项(Slack SDK)和 Lambda 函数脚本打包到一个 zip 文件中,并将其上传到 AWS Lambda。详情此处

等等,那么…说真的,SageMaker 为我做了什么?我已经为我的模型构建了一个 Docker 容器,有效地编写了一个代理服务,手动验证了每个请求,还需要设置一个单独的 REST 端点。也许用 EC2 和 Kubernetes 手工做这件事会更容易些?

最后一步是创建一个 API 网关,将订阅消息从 Slack 路由到我的 Lambda 函数。一路走来,我陷入了我想象中的一些常见陷阱。例如,我忘了检查Use Lambda Proxy integration框,所以 API Gateway 在将请求转发给 Lambda 时剥离了每个请求的 HTTP 头。这导致了认证失败,因为 Slack 将其令牌嵌入到了报头中。我在这里记录了所有(许多)步骤,这样你就不会重复我的错误。

总之,这又花了一个小时来调试,但是 API Gateway 最终生成了一个真正的 REST 端点。我将端点粘贴到我的 Slackbot 的订阅中,它终于工作了!我向 Slack workspace 上的机器人发送了一条消息,得到了一个反应。😎

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

截图来自 时差 工作区

瞧啊。我花了 6 个小时才把所有的碎片拼在一起,但它终于工作了!每个请求需要几秒钟,这是…嗯,不是很互动。考虑到上面“架构图”中显示的流量,这并不奇怪。这些服务大多没有针对延迟进行优化。

总而言之,在 SageMaker 上部署 torchMoji 是一件痛苦的事情。更糟糕的是,在所有的努力之后,*每个请求都花了一秒多的时间!*更不用说成本了——除了保持模型服务器一直运行,我们现在还要为每次同步 Lambda 调用支付 AWS 费用。如果 RISELab Slack 上的所有 400+用户都开始玩这个机器人,它肯定不会便宜。

考虑到使用 SageMaker 不是在公园里散步,我对把更多的时间放在微软 Azure 和谷歌云的竞争服务上感到非常沮丧。但这可能是我的错误——如果你对这些产品有更好的体验,请在评论中告诉我。我很想了解更多!

相反,我决定研究一家我听说过的名为 Algorithmia 的初创公司——它专门从事模型部署和管理,所以希望它更容易使用…

平台 2:算法

在这些文档之后,我首先创建了一个与 Algorithmia 相关联的 Git 回购协议,并将我之前的预测脚本的一个略微修改的版本放入回购协议中。该脚本与我在本地使用的脚本非常相似——不需要担心设置 web 服务器和处理健康检查。我只需要修改几行基本的 Python 代码就可以使用 Algorithmia 的 API 了。开了个好头!

repo 还需要一个包含 Python 依赖项列表的requirements.txt文件。这是 Python 项目的标准操作程序,所以我很高兴看到我不需要做任何疯狂的事情。

在提交这些文件之后,我所要做的就是发布我的模型,并用一个版本号标记它(例如,0.0.1)。就这样,torchMoji 模型运行在 Algorithmia 的平台上——比 SageMaker 简单多了!

Algorithmia 的仪表盘有一个简洁的测试功能,我可以输入测试句子并获得表情符号输出。这真的很有帮助:我不需要另一个脚本来调用模型,以确保一切都如我在 SageMaker 中所做的那样正常工作。

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

截图来自algorithm ia平台

Algorithmia 还生成了多种语言的复制粘贴代码片段,我可以用它们来调用我的模型。Python 版本如下所示:

到目前为止,一切看起来都很好。但当谈到与 Slack 的集成时,Algorithmia 并不比 SageMaker 好。从这些文档中:

为了让您的 Slack 应用程序连接到 Algorithmia,您需要一个中间函数:和 API 端点,它可以接受来自 Slack 的 GET 请求,验证内容,然后发送到 Algorithmia 的一个 API。

我仍然需要之前的 Lambda glue 代码,这很难写。对我来说,好消息是我可以重用以前 Lambda 函数的大部分代码。我只需要将 SageMaker 端点调用替换为对 Algorithmia 的调用,因此——考虑到我第一次调试时已经花了几个小时——再做一次也没那么糟糕。😃完整的脚本可从这里获得。

尽管如此,让我感到奇怪的是,Algorithmia 应该是一个 无服务器模式的服务平台。但是为了与我的 Slackbot 集成,我不得不使用的另一个无服务器平台(AWS Lambda)来路由流量和执行安全检查。端到端延迟保持在个位数秒,因为请求仍然必须经过三跳:从 Slack 到 API 网关,从 API 网关到 Lambda,以及从 Lambda 到 Algorithmia。

我不禁想知道:如果把它与 Slack 等其他服务联系起来仍然如此痛苦,那么把我的模型放进一个盒子里有什么意义——不管是 SageMaker 还是 Algorithmia。如果“连接”意味着我必须了解、配置和支付另外两个服务,那么如果我将预测代码放入我的 Lambda 函数并完全跳过特殊用途的服务,岂不是更容易?我很难相信这真的是最先进的技术!

复制懒人机器人

如果你想复制我的 Slackbot,所有代码和详细说明都在这个资源库里。我和 RISELab 的一些博士生分享了这个库,他们都能够在一个小时内复制和部署这个机器人!然而,他们似乎没有一次超级愉快的经历…他们是这样说的:

为什么部署模型需要将多个服务缝合在一起并学习它们的术语?如果模型可以像调用 python 脚本一样简单地在本地运行,那么将它部署到云中所增加的复杂性应该是最小的。

—杨宗衡,博士四年级学生,研究系统的机器学习。

按照指示安装这个简单的机器人是一次由专家带领在黑暗中盲目进行的练习;出错的方式之多,使得诊断配置错误对于新手来说基本上是不可行的。

—一名匿名的三年级博士生,从事机器学习系统的研究。

总结

我们都知道人工智能基础设施和像 MLOps 这样的领域现在非常热门。所有人都在谈论这个。但实际上,要满足在线预测服务的基本需求,还有很多工作要做。我在这里的目标是适度的——一个简单的模型,具有有限的可扩展性。走到那一步很烦人,表现也很糟糕。

尽管如此,我确信还有其他的预测服务系统。我们自己刚刚在我们实验室的无服务器平台上构建了一个预测管道 DSL 。如果你知道更适合这里的生产系统或技术——或者只是想谈谈你认为这里讨论的服务中缺少的潜在功能——我很乐意通过 Twitter电子邮件听到你的意见。

感谢 维克拉姆·斯雷坎蒂约瑟夫·冈萨雷斯乔·赫勒斯坦 对本文初稿的反馈。**

我如何使用 PyTorch Lightning 为新冠肺炎构建了一个面具检测器

原文:https://towardsdatascience.com/how-i-built-a-face-mask-detector-for-covid-19-using-pytorch-lightning-67eb3752fd61?source=collection_archive---------6-----------------------

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

动机

在法国隔离结束的前几天,我在看新闻,无意中发现了一篇文章:法国正在使用人工智能检查人们是否在公共交通工具上戴口罩

创建该项目的法国初创公司 DatakaLab 表示,目标不是识别或惩罚不戴口罩的人,而是生成匿名统计数据,帮助当局预测未来新冠肺炎疫情的爆发

于是我决定试一试,自己搭建一个口罩检测仪,检测某人是否戴口罩。

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

信号源

1.资料组

为了训练深度学习模型来分类一个人是否戴着面具,我们需要找到一个好的数据集,其中包含两个类别的大量图像:

  • 戴着面具
  • 没有戴面具

真实世界蒙面人脸数据集(RMFD) 提供了我们所需要的!该数据集是为面部识别目的而创建的。然而,我们将使用它来检测面具。

2.步伐

这篇文章的其余部分按以下方式组织:

2.1。数据提取
2.2。构建数据集类
2.3。构建我们的面罩检测器模型
2.4。训练我们的模型
2.5。在真实数据上测试我们的模型。结果

事不宜迟,让我们直接开始吧!

来源

2.1.数据析取

RMFD 提供了两个数据集:

  1. 真实世界蒙面人脸识别数据集:包含 525 人的 5000 张蒙面人脸和 90000 张正常人脸。
  2. 模拟掩蔽人脸识别数据集。

在这个实验中,我们将使用第一个数据集。下载并解压缩数据集后,其结构如下所示:

self-built-masked-face-recognition-dataset
├AFDB_masked_face_dataset
│ ├subject-id
│ │ ├image-id.jpg
│ │ └...
│ └...
└AFDB_face_dataset
  ├subject-id
  │ ├image-id.jpg
  │ └...
  └...

我们通过迭代图像来创建我们的熊猫DataFrame,如果脸部没有被遮罩,则给每张图像分配一个标签0,如果脸部被遮罩,则分配一个标签1。这个数据集的图像已经在人脸周围被裁剪了,所以我们不需要从每个图像中提取人脸。
以下代码说明了数据提取过程:

将图片存储在熊猫数据框中,并贴上相应的标签

2.2.构建数据集类

现在我们已经准备好了 pandas 数据框架,是时候构建 Dataset 类了,它将用于以 PyTorch 可解释的方式批量查询样本。我们的模型将接受 100x100 的图像作为输入,因此我们在查询它时转换每个样本图像,将它的大小调整为 100x100,然后将其转换为一个Tensor,这是 PyTorch 可以操作的基本数据类型:

数据集模块

2.3.建立我们的面罩检测器模型

现在是有趣的部分!

来源

我们将使用 PyTorch Lightning ,它是 PyTorch 的一个薄包装。PyTorch Lightning 在一个类中有效地构建了您的代码,该类包含了我们定义和训练模型所需的所有内容,并且您可以覆盖根据您的需求提供的任何方法,从而在避免意大利面条式代码的同时使其易于扩展。

PyTorch Lightning 公开了许多用于训练/验证循环的方法。但是,我们将根据需要使用其中一些。以下是我们将要覆盖的方法,并且将在内部按以下顺序调用:

1。设置:

  • init()
  • 准备 _ 数据()
  • configure_optimizer()
  • train_dataloader()
  • val_dataloader()

2。训练循环:

  • 训练 _ 步骤()
  • training_epoch_end()

3。验证循环:

  • 验证 _ 步骤()
  • validation_epoch_end()

2.3.1.定义模型和正向传递

为了定义我们的模型,我们对 PyTorch Lightning 的LightningModule进行了子类化,并定义了我们的模型架构以及向前传递。我们还使用由TorchMetrics包提供的Accuracy类,它将负责为我们计算训练/验证的准确性。我们将保持简单,使用 4 个卷积层,然后是 2 个线性层。我们将使用ReLU作为激活函数,使用MaxPool2d作为池层。然后我们用xavier_uniform初始化这些层的权重,因为这将使网络训练更好:

CNN 模型定义

2.3.2.为模型准备数据

我们的数据集是不平衡的(5,000 个蒙面人脸对 90,000 个非蒙面人脸)。因此,当将数据集划分为训练/验证时,我们需要在训练/验证中保持与整个数据集相同的样本比例。我们通过使用sklearntrain_test_split函数来完成,我们将数据集的标签传递给它的stratisfy参数,它将为我们完成剩下的工作。我们将数据集的 70%用于训练,30%用于验证:

prepare_data()方法

在处理不平衡数据时,我们需要将这些信息传递给损失函数,以避免优化器的步长不成比例。为此,我们根据每个类在数据集中的可表示性为其分配一个权重。

我们给样本数量少的类分配更多的权重,这样,如果网络在预测这些类的标签时出错,它将受到更多的惩罚。而样本数量多的类,我们给它们分配一个较小的权重。这使得我们的网络训练与班级比例无关。为每个类别选择权重的一个好的经验法则是使用以下公式:

不平衡数据的类权重

这转化为以下代码:

具有适应的类权重的交叉熵

2.3.3.数据加载器

我们将定义用于培训和验证的数据加载器。我们使用一批尺寸为 32 的产品来训练我们的模型。我们每次都会打乱我们的训练批次样本,以便我们的模型可以通过以非重复的方式接收数据来更好地训练。为了减少加载批量样本的时间(这可能是训练循环中的瓶颈),我们将 workers 的数量设置为 4,这将执行多进程数据加载:

培训/验证数据加载器

2.3.4.配置优化程序

我们通过覆盖configure_optimizers()方法并返回所需的优化器来定义我们的优化器。出于本文的目的,我们将使用Adam,我们将学习率固定为0.00001:

configure _ optimizers()方法

2.3.5.训练步骤

在训练步骤中,我们接收一批样本,通过正向传递将它们传递给我们的模型,并计算该批样本的损失。我们还可以记录损失,PyTorch Lightning 会自动为我们创建 TensorBoard 的日志文件:

培训 _ 步骤()方法

2.3.6.训练时期结束

training_epoch_end()中,我们计算训练精度并记录下来,以便稍后在 TensorBoard 中可视化。然后,我们重置训练精度变量,以便在下一个时期,精度不携带来自先前时期的值:

2.3.7.验证步骤

在每个训练时期结束时,对每批验证数据调用validation_step(),我们计算准确度和损失,并在字典中返回损失。返回值将用于下一部分:

validation_step()方法

2.3.8.验证时期结束

validation_epoch_end()中,我们接收从validation_step()(来自前一部分)返回的所有数据。我们计算平均精度和损耗,并记录下来,以便稍后在 TensorBoard 中直观显示:

validation_epoch_end()方法

2.4.训练我们的模型

为了训练我们的模型,我们简单地初始化我们的MaskDetector对象,并将其传递给 PyTorch Lightning 提供的Trainer类的fit()方法。我们还定义了一个模型检查点回调和一个 TensorBoard logger,我们希望以最好的准确性和最低的损失保存模型。我们将为 10 个时期训练我们的模型:

培训模式

我们可以看到,验证损失在各个时期都在减少:

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

验证损失

我们的模型的验证精度在第 8 个纪元达到最高峰,达到 99%的精度。

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

验证准确性—保存最佳模型

在纪元 8(红色箭头所指的地方)之后,我们的模型开始过度拟合。因此,验证准确性开始下降。因此,我们将采用 epoch 8 的保存模型,并使用它在真实数据上进行测试!

2.5.在真实视频上测试我们的模型

来源

为了在真实数据上测试我们的模型,我们需要使用一个对人脸遮挡具有鲁棒性的人脸检测模型。幸运的是,OpenCV 有一个深度学习人脸检测模型,我们可以使用。这种深度学习模型是对 Haar-Cascade 模型的更准确的替代,它的检测框架是矩形而不是正方形。因此,面部框架可以适合整个面部,而不捕获背景的部分,这可能干扰我们的面部掩模模型预测。

关于如何使用 OpenCV 的深度学习人脸检测的一个很好的教程如下:

[## 基于 OpenCV 和深度学习的人脸检测——PyImageSearch

今天,我将与您分享一个关于 OpenCV 库的鲜为人知的秘密:您可以快速、准确地执行…

www.pyimagesearch.com](https://www.pyimagesearch.com/2018/02/26/face-detection-with-opencv-and-deep-learning/)

为了对视频进行推理,我们将使用上一节中保存的模型,并处理每一帧:

  • 提取人脸
  • 把它们传给我们的面罩探测器模型
  • 在检测到的人脸周围绘制一个边界框,以及由我们的模型计算的预测。

以下是处理视频代码的摘录:

2.6.结果

我让几个朋友给自己拍照,戴上面具,然后摘下来。这些就是结果!看起来我们的模特即使带着定制的面具也很棒!我们模型的权重文件大小约为 8 Mb,在 CPU 上的推理几乎是实时的!!👌

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

演职员表:伊莉莎维罗妮卡

完整的代码可以在 GitHub 上找到😃

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

我如何在不到一天的时间里为冠状病毒创建了一个黑客新闻克隆

原文:https://towardsdatascience.com/how-i-built-a-hacker-news-clone-for-coronavirus-in-less-than-a-day-f4a199f4d842?source=collection_archive---------27-----------------------

使用 Flask 作为后端和 Scrapy 抓取新闻

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

蒂姆·莫斯霍尔德在 Unsplash上的照片

如果您想观看直播网站,请访问本页。有关实时统计数据,请访问本页。我不打算一行一行地重复如何写代码,如果你想要的话,可以看看这个 Github repo 。我还添加了过去 3-4 天收集的所有新闻。

我想了解关于传染性冠状病毒爆发的最新消息。浏览社交媒体是一种选择,但考虑到如今社交媒体上流传的假新闻和点击诱饵的数量,我更喜欢从可靠的新闻门户网站上获取新闻。问题是有很多。所以我想,也许是时候用我的编码技能来构建一些有用的东西了。

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

图片来自 Imageflip.com

新闻爬虫

爬行是我的日常工作之一,我以前创建过新闻爬虫。几乎每次我都用 Scrapy 进行抓取和爬行,因为它内置了很多东西。我不想重新发明轮子,更重要的是,我已经习惯了 Scrapy。

RSS 对于几乎所有的网站都是统一的,所以我决定用它来获取新闻。这样,我将只编写一个适用于所有网站的解析器。我需要做的就是在列表中添加更多的 URL,脚本会处理它。RSS 提要中的一个典型条目如下所示

<item>
    <title>
        <![CDATA[ China coronavirus outbreak: All the latest updates ]]>
    </title>
    <description>
        <![CDATA[Global death toll reaches 427 with two reported dead outside mainland China as infection rate passes 20,500 cases.]]>
    </description>
    <link>
        [https://www.aljazeera.com/news/2020/02/china-admits-shortcomings-coronavirus-death-toll-hits-425-200203234036932.html](https://www.aljazeera.com/news/2020/02/china-admits-shortcomings-coronavirus-death-toll-hits-425-200203234036932.html)
    </link>
    <guid isPermaLink="false">200203234036932</guid>
    <pubDate>Tue, 04 Feb 2020 16:41:35 GMT</pubDate>
</item>

下一步是收集数据。我想要标题、链接和发布日期,我需要一种方法来选择仅在我的页面上显示的与冠状病毒相关的新闻。一种简单的方法是匹配关键词。所以我做了一个关键字列表和一个函数,它将检查标题和描述是否有这些关键字之一,并将其插入数据库或忽略它。所有这些步骤都记录在rss_scraper.py文件中。

前端

所以我想的第一件事就是尽快完成。我不想浪费更多的时间来构建一个简单的 MVP。我承认我对设计和前端的东西很糟糕。所以我做了每个开发人员都会做的事情,即找到一个合适的模板。通常我会搜索**“免费引导新闻模板”**,但正如我所说,我不想浪费太多时间。我见过的最简单的用户界面是黑客新闻。所以我从他们的网站上复制了所有的 HTML,CSS,删除了多余的东西,做了一些改变,比如颜色,页脚。

后端

选项对我来说是有限的,因为我只知道 Python 和初级 JavaScript/NodeJS。对我来说不是弗拉斯克就是姜戈。Django 很棒,但我想要一个单页应用程序,几乎没有 2-3 页,所以这将是一个大材小用。Flask 因其最小化方法而受欢迎,所以我选择了它。

使用的数据库是 MySQL。我创建了一个端点/corona-news,它查询数据库并将字典列表返回给模板,在模板中它们将被呈现为 HTML。和《黑客新闻》一样,我设定了每页 30 条的限制。点击此链接访问页面。

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

实时新闻页面

奖金

我发现这个网站正在更新报告的病例数、死亡数和康复病人数。他们也有一个链接到保存汇总数据的 google sheet。我使用 google sheet 定期下载文件,并以表格形式显示数据。有关现场计数和统计,请访问本页

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

实时统计页面

部署

我使用 Linode VPS 和 Ubuntu 进行部署。按照 DigitalOcean 的指南在 Ubuntu 上使用 Nginx 和 uWSGI 部署 Flask 应用程序。

最后的想法

我希望这一页将有助于你们中的一些人获得关于冠状病毒的最新消息,这次疫情将尽快得到控制。

数据集介绍:多类道路车辆目标检测数据集 一、基础信息 数据集名称:多类道路车辆目标检测数据集 图片数量: - 训练集:7,325张图片 - 验证集:355张图片 - 测试集:184张图片 总计:7,864张道路场景图片 分类类别: - Bus(公交车):城市道路与高速场景中的大型公共交通工具 - Cars(小型汽车):涵盖轿车、SUV等常见乘用车型 - Motorbike(摩托车):两轮机动车辆,含不同骑行姿态样本 - Truck(卡车):包含中型货运车辆与重型运输卡车 标注格式: YOLO格式标注,包含归一化坐标的边界框与类别标签,适配主流目标检测框架。 数据特性: 覆盖多种光照条件与道路场景,包含车辆密集分布与复杂背景样本。 二、适用场景 自动驾驶感知系统开发: 用于训练车辆识别模块,提升自动驾驶系统对道路参与者的实时检测与分类能力。 交通流量监控分析: 支持构建智能交通管理系统,实现道路车辆类型统计与密度分析。 智慧城市应用: 集成至城市级交通管理平台,优化信号灯控制与道路资源分配。 学术研究领域: 为计算机视觉算法研究提供标准化评测基准,支持多目标检测模型优化。 三、数据集优势 高场景覆盖率: 包含城市道路、高速公路等多种驾驶环境,覆盖车辆静止、行驶、遮挡等现实场景。 精细化标注体系: 采用YOLO标准格式标注,每张图片均经过双重质检,确保边界框与类别标签的精准对应。 类别平衡设计: 四类车辆样本量经科学配比,避免模型训练时的类别偏向问题。 工程适配性强: 可直接应用于YOLO系列模型训练,支持快速迁移至车载计算平台部署。 现实应用价值: 专注自动驾驶核心检测需求,为车辆感知模块开发提供高质量数据支撑。
内容概要:本文介绍了DeepSeek与Mermaid结合实现可视化图表自动化生成的技术及其应用场景。DeepSeek是一款由杭州深度求索人工智能基础技术研究有限公司开发的大语言模型,具有强大的自然语言处理能力,能理解复杂的自然语言指令并生成对应的Mermaid代码。Mermaid是一款基于文本的开源图表绘制工具,能够将简洁的文本描述转化为精美的流程图、序列图、甘特图等。两者结合,通过DeepSeek将自然语言转化为Mermaid代码,再由Mermaid将代码渲染成直观的图表,极大提高了图表制作的效率和准确性。文章详细描述了DeepSeek的发展历程、技术架构及应用场景,Mermaid的基础语法和图表类型,并通过一个电商平台开发项目的实战演练展示了二者结合的具体应用过程。 适合人群:具备一定编程基础和技术理解能力的研发人员、项目经理、数据分析师等。 使用场景及目标:①需求分析阶段,快速生成业务流程图和功能关系图;②设计阶段,生成系统架构图和数据库设计图;③实现阶段,辅助代码编写,提高编码效率;④验证阶段,生成测试用例和测试报告图表,直观展示测试结果。 阅读建议:在学习和使用DeepSeek与Mermaid的过程中,建议读者结合具体项目需求,多实践生成图表和代码,熟悉两者的交互方式和使用技巧,充分利用官方文档和社区资源解决遇到的问题,逐步提高图表绘制和代码编写的准确性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值