TowardsDataScience 博客中文翻译 2019(九十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

AI 能像放射科医生一样看懂胸透吗?

原文:https://towardsdatascience.com/can-machine-learning-read-chest-x-rays-like-radiologists-part-1-7182cf4b87ff?source=collection_archive---------9-----------------------

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

使用对抗网络实现胸部 x 光器官分割的人类级性能

医疗保健需要人工智能来扩展

今天,世界上 70 亿人口中只有 10%能够获得良好的医疗服务,而世界上一半的人甚至无法获得基本的医疗服务。即使在发达国家,医疗保健系统也面临压力,成本上升,等待时间长。在短时间内培养足够的医生和护理人员来满足日益增长的需求是不切实际的,甚至是不可能的。解决方案必须涉及技术突破。

这就是机器学习(ML)和人工智能(AI)可以发挥巨大作用的地方。

在这篇文章中,我将介绍我为理解胸部 x 光图像而开发的一种简单但极其有效的深度学习方法。更多细节可以在原论文中找到。

有许多胸部 x 光片

cxr 是最常见的医学成像类型,通常比 MRI、CT 扫描、PET 扫描等其他高级成像方法高出 2-10 倍:

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

Among the 20+ million X-rays, over 8 millions are chest x-rays, making chest x-rays the most common standardized medical imaging. (source)

CXRs 受欢迎的一些原因包括:(1)辐射剂量较低;(2)成本较低;(3)拍摄一幅图像只需要不到一分钟的时间(相比之下,CT 扫描需要一个多小时)。因此,cxr 被广泛用作筛选工具。如果你的肺部有问题,需要更多的证据来诊断,你的医生通常会先开 CXR。CXR 提供了一个低保真度视图,为其他更复杂的成像方法铺平了道路。

从与放射科医生的交谈中,我了解到一个相当大的医院一天可以产生数百个(如果不是数千个的话)CXR,所有这些都需要由放射科医生阅读,或者最好是其他医生。并且通常最重要的是在数小时内完成读数,以检测紧急情况(例如住院患者出现的情况)。简而言之,阅读 CXR 对放射科医生和内科医生来说都是一项艰巨的任务。

CXR 阅读涉及许多步骤,可能很费时间

一名训练有素的放射科医师阅读 CXR 的平均时间约为 1-2 分钟。很难加快速度,因为阅读 CXR 是一个非常系统的过程。阅读 CXR 的一个流行的记忆方法如下: ABCDEFGHI 。a 代表气道,B 代表骨骼,C 代表心脏……你明白了。它并不短,走捷径意味着冒着忽略重要发现的风险。

通过在《CXR》中的工作,我也意识到阅读 CXR 实际上是非常困难的。我曾带患有结核病的 CXRs 去看全科医生,他在很大程度上无法判断哪个病人是结核病阳性。与我交谈过的放射科住院医师告诉我,在他们的住院医师培训项目中,他们将阅读大约 10,000 张 CXR 图像,以便精通它。这提醒了我,MLB 大多数职业棒球击球手需要挥杆 10,000 次才能击中球。人类似乎需要那么多的训练数据才能开始识别 cxr 中的模式。这种陡峭的学习曲线可能是因为 CXR 与我们一生中所接受的自然图像如此不同。这对人工智能系统来说也是一个障碍,我们将在后面重新讨论。

放射科医生严重短缺

我们说的只是 cxr。随着 CT 扫描和其他成像技术越来越受欢迎,放射科医生的工作量将大幅增加。发达国家放射科医生的长期短缺是有据可查的。例如,英国发布了关于英国临床放射学的报告,几年来的主要发现是劳动力短缺和成本上升。放射科工作人员显示出紧张和疲惫的迹象。在医疗基础设施落后的发展中国家,训练有素的放射科医生的短缺甚至更加严重。

CXR 的器官分割

理解 CXR 的一个基本任务是识别肺野和心脏区域:

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

Left: CXR from Japanese Society of Radiology Technology. Right: The same CXR overlaid with human labeled left lung, right lung, and heart contours.

实际上,你可以从肺部轮廓获得很多信息:异常大的心脏可能意味着心脏扩大(心脏异常增大);肋膈角变钝(下图中的 3 号)可能意味着胸腔积液。这也有助于将诊断人工智能算法仅隔离到肺野,从而最大限度地减少来自图像其他部分的虚假信号。(这是一个已知的问题,因为神经网络分类器有时会利用 CXR 中的伪像,如曝光和文本。)

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

Important contour landmarks around lung fields: aortic arch (1) is excluded from lung fields; costophrenic angles (3) and cardiodiaphragmatic angles (2) should be visible in healthy patients. Hila and other vascular structures (4) are part of the lung fields. The rib cage contour (5) should be clear in healthy lungs.

CXR 分割的临床应用

除了辅助计算机辅助诊断,CXR 分割直接导致心胸比率 (CTR) 的自动化计算。 CTR 简单来说就是心脏的宽度除以肺的宽度(见下图)。

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

CTR 是一个关键的临床指标。CTR > 0.5 表明心脏扩大,这通常是由心脏病或先前的心脏病发作引起的。测量 CTR 非常繁琐。它包括确定心脏和肺部最左侧和最右侧的点,并实际进行测量。因此,大多数放射科医生简单地跳过这一测量,只关注心脏是否过大。在中国等一些国家,CXR 读者需要进行明确的 CTR 测量,这可能会大大增加放射科医生的工作量。

很容易看出,高质量的肺部分割可以导致自动 CTR 计算:

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

这些是根据我们的方法(将在第 2 部分介绍)生成的肺屏蔽计算的 CTR 测量线。事实上,在我们的后续工作中,我们发现我们的 CTR 计算非常准确,均方根误差(RMSE)仅为 6%,与现有工作相当,甚至可能更好,如( Dallal 等人 2017 )^.

^The 的数据没有直接可比性,因为我们无法获得他们的数据集。

用神经网络分割 CXR 的挑战

挑战#1:隐含的医学知识

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

因为 CXR 是三维人体的二维投影,所以许多生理结构在图像中彼此重叠,很多时候这是对你在哪里画边界的判断。以下面这个案例为例:

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

Left: CXR with mild deformity. Right: Human labeled left and right lung regions. (Source)

图像显示在左肺下叶(图像的右侧)和左肺尖有一些疤痕。它们明显模糊了肺部轮廓。因此,必须通过使用医学知识推断肺部形状来绘制红色轮廓。分割模型必须获得轮廓形状的全局概念,以便解决模糊边界周围的局部模糊性,并产生类似于人类标记器的正确轮廓。

挑战#2:非自然图像

CXR 图像看起来一点也不像我们日常生活中看到的自然图像:

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

大多数现有的计算机视觉神经网络是为丰富多彩的自然图像设计的,并利用了这些图像中丰富的纹理。这使得很难在 CXR 上直接应用现成的解决方案。

挑战#3:少量的训练数据

由于隐私问题和管理障碍等原因,CXR 的公共医学图像比自然图像小得多。此外,与可以由任何标注器标注的自然图像不同,医学图像标注只能由医生和受过训练的专业人员来完成,从而导致高的标签获取成本。

据我所知,只有两个公开可用的 CXR 数据集具有肺野的像素级标签,一个有 247 个图像,另一个有 138 个。这至少比 ImageNet 挑战小 3000 倍,ImageNet 挑战有 120 万到 1400 万张标记图像。事实上,在 ImageNet 数据集上训练的神经网络是如此强大,以至于几乎所有现有的神经网络分割模型都是用在 ImageNet 挑战赛上学习到的参数(例如来自 ResNet 或 VGG)来初始化的。尚不清楚这样一个小数据集是否足以满足拥有数百万到数亿参数的数据饥渴神经网络。

解决方案的潜在峰值

在本系列的第 2 部分中,我们设计模型来解决上面的每个挑战。这里有一个快速预览:

与自然图像不同,cxr 是灰度的,并且是高度标准化的(挑战 2)。这一观察使我们设计了分割网络,与在具有不同颜色和形状的 ImageNet 数据集上使用的网络相比,使用更少的卷积通道。不幸的是,这种变化使得从 ImageNet 训练的模型进行迁移学习变得不切实际。然而,通过使用更少的过滤器,我们的模型具有非常少的参数(小模型容量),这最小化了易于在小训练数据上发生的过度拟合的风险(挑战#3)。

最后,也许是最具挑战性的,是如何教授分割模型人类所拥有的医学知识(挑战 1)。这里的关键见解是使用对抗性学习来指导分割模型,以生成更自然的图像,我们将在第 2 部分中展示这是非常有效的。

应对所有挑战的最终解决方案的体系结构如下所示:

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

这是两部分系列的第 1 部分。有关模型设计和性能的详细信息,请参见第 2 部分

作者简介: 大卫·戴是苹果的高级机器学习工程师,探路者 AI 的顾问, Petuum 的前高级工程总监。他拥有卡内基梅隆大学的机器学习博士学位,并被评为匹兹堡 30 岁以下。@ daiwei 89|Medium| David @ way finder . ai。

参考

AI 能像放射科医生一样看懂胸透吗?

原文:https://towardsdatascience.com/can-machine-learning-read-chest-x-rays-like-radiologists-part-2-aa77dba219f0?source=collection_archive---------14-----------------------

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

使用对抗网络实现胸部 x 光器官分割的人类级性能

这是两部分系列的第二部分。参见 Part 1 胸部 x 射线(CXR)分割的挑战和临床应用,以及医学成像如何,特别是 CXRs,关键需要 AI 来缩放。

回顾第 1 部分

胸部 X 射线(CXR)分割的任务是识别 CXRs 中的肺野和心脏区域:

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

Left: CXR from Japanese Society of Radiology Technology. Right: The same CXR overlaid with human labeled left lung, right lung, and heart contours.

在许多临床应用中,肺分割直接导致关键的临床指标心胸比率(CTR ),其导致心脏扩大的诊断。

设计解决方案

考虑到使用 CXR 的挑战(参见第 1 部分),我们首先设计基于完全卷积网络(FCN)的分段模型。然后,我们在结构校正对抗网络(SCAN)框架中增加对抗训练,这实现了人类水平的性能。

让我们深入研究模型和导致模型设计的思维过程。

全卷积网络分段(FCN)

分割模型的输入是尺寸为 H×W×C(高度、宽度、通道)的图像,其中对于 RGB 值,C = 3,或者对于灰度图像,如 CXR,C = 1。该模型然后输出每像素类概率 H×W×T,其中 T 是类的数量。在我们的情况下,对于[左肺、右肺、心脏、背景],T = 4,而当心脏分割标签不可用时(例如在一个数据集中),T=3。

我们将网络设计为全卷积网络,用 1x1 卷积取代全连接层。(更多详细信息,请参见此处的)。我们从类似 VGG 的架构开始,大约有 16 个权重层和许多特征图(或卷积通道):第一个卷积中有 64 个特征图,然后在最终层中增加到 512 个通道。所得到的模型具有很大的容量(> 1 亿个参数),它完美地过拟合训练数据,但是在测试数据上表现不佳。这清楚地表明,我们的数据集太小,无法支持像这样的大型模型。

由于 CXR 图像是具有标准化结构的灰度图像,我们减少了滤波器的数量,并且发现对于第一卷积使用 8 个特征图,而不是 VGG 的 64 个,给出了更好的结果。然而,我们很快就达到了模型的容量极限。为了增加模型容量,我们更深入。最终,我们得到了一个由 21 个重量层组成的“瘦”而深的网络:

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

The segmentation network architecture. The input image (400 pixels by 400 pixels) goes through convolution (in the residual blocks “Resblock”) where spacial resolution reduces but the number of feature maps (“semantic concepts”) increases. [Further tech details: the integer sequence (1, 8, 16,…) is the number of feature maps. k × k below Resblock (residual block), average pool, and deconvolution arrows indicates the receptive field sizes. The dark gray arrow denotes 5 resblocks. All convolutional layers have stride 1 × 1, while all average pooling layers have stride 2 × 2. The output is the class distribution for 4 classes (3 foreground + 1 background).]

模型中的参数总数为 271k,比基于 VGG 的分割模型小 500 倍。

细分模型的性能

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

Intersection over Union (IoU) is computed between the ground truth mask and the predicted segmentation

因为模型很小(很少的参数),我们可以在 209 个 CXR 例子上从头开始训练它。我们使用联合交集(IoU)度量来评估肺和心脏分割的质量。(请参见左图了解图示定义。)IoU 的范围在 0(预测掩码和地面真实值之间没有重叠)到 1(完全匹配)之间。

我们使用来自日本放射技术学会(JSRT)数据集的 cxr 和来自另一个研究的标签来准备 JSRT 数据集,包括 247 个 cxr(209 个用于训练和验证,38 个用于评估)。这个又细又高的分段网络(我们称之为全卷积网络的 FCN)表现得相当好:

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

请注意,人的表现并不完美,受到划出界限所需的固有主观解释的限制。人类观察者的低心脏 IoU 表明心脏边界特别难以推断(参见第 1 部分中的挑战)。这只是医学不是精确科学的许多地方之一。

FCN 的失效模式

可视化低性能样本中发生的情况并进行故障分析通常很有帮助。下面,我们将在 JSRT 数据集上训练的模型应用于 JSRT 和另一个数据集(我们称之为 Montgomery ):

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

Each column is a patient. The left two columns are patients from the JSRT evaluation set with models trained on JSRT development set. The right two columns are from the Montgomery dataset using a model trained on the full JSRT dataset only (no Montgomery data), which is a much more challenging scenario. Note that only JSRT dataset (left two columns) have heart annotations for evaluation of heart area IoU.

旁白:在上面的图片中,请注意,由于不同的设备、医疗操作人员和人口等因素,来自不同数据集的 cxr 看起来非常不同。因此,适应一个新的数据集领域是一项更加困难的任务。知道了这一点,我们的分割模型已经在 Montgomery 数据集上对肺分割表现得令人惊讶地好,甚至没有看到来自该人群的图像。

这些失败案例揭示了 CXR 图像在样本之间的不同对比度所带来的困难。例如,在上面的图像中,最右边患者的胸腔顶点被误认为内部肋骨,导致遮罩“渗出”到黑色背景,其强度与肺野相似。纵膈(两个肺之间的“白色物质”)和前肋骨(肺野中的纵横交错的线条)周围的血管结构也可以具有与外部边界相似的强度和纹理,从而导致中间两列中可以看到的严重错误。

结构校正对抗网络(扫描)

失败案例告诉我们,模型需要有全局结构感,以避免像前面的例子那样的严重失败。例如,任何受过基础训练的人都知道,心脏应该或多或少是椭圆形的,而肺野的顶点应该是平滑的,隔膜与胸腔的夹角应该是尖锐的。但是我们应该如何将这些知识传授给 FCN 细分模型呢?

虽然对知识进行数学编码并不容易(例如,锐角到底有多尖?),很容易判断预测的分割看起来是否自然。在机器学习的行话中,这被称为二元分类问题。这自然导致以下对抗性框架:

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

Overview of the proposed Structure Correcting Adversarial Network (SCAN) framework that jointly trains a segmentation network and a critic network in an adversarial setting. The segmentation network produces per-pixel class prediction. The critic takes either the ground truth label or the prediction by the segmentation network, optionally with the CXR image, and outputs the probability estimates of whether the input is the ground truth (with training target 1) or the segmentation network prediction (with training target 0).

这里的关键补充是,分割网络的预测不仅通过每像素损失(即,预测的遮罩与地面真实像素的匹配程度)来评估,还通过 critic 网络给出的“整体外观和感觉”评估(即,预测的遮罩看起来有多真实,足以欺骗 critic 网络)。敏锐的读者可能会注意到,这与生成对抗网络(GAN) 非常相似。事实上,这个框架可以被视为条件 GAN,其中我们基于输入 CXR 图像而不是原始 GAN 中的随机噪声向量来生成掩模。

在我们的工作中,我们设计了 critic 网络,以在很大程度上反映分段网络的架构。培训目标、模型的超参数、实验设置等细节可以在我们的论文中找到。

扫描性能

在我们深入研究这些数字之前,我们应该澄清一下,SCAN 中的 critic network 只在培训阶段涉及。在测试过程中,我们只使用分段网络,它与 FCN 具有相同的架构。换句话说,我们的希望是,随着 critic 网络的加入,我们可以以某种方式更好地训练相同的分割网络,使用来自 critic 网络的指导来鼓励相同的分割网络进行更“自然”的预测。考虑到这一点,我们在 JSRT 数据集上重复评估:

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

Evaluation on JSRT dataset. FCN is segmentation model only. Registration-based method is the prior state of the art for lung field segmentation (no heart) from (Candemir et. al., TMI (2014))

请注意,在 FCN 架构没有任何变化的情况下,SCAN 将 FCN 相对于人类水平的性能绝对提高了 1.8%,大约为 94.6%的 lung IoU!让我们回顾一下失败案例中的 4 个棘手患者:

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

Each column is a patient. The left two columns are patients from the JSRT evaluation set with models trained on JSRT development set. The right two columns are from the Montgomery dataset using a model trained on the full JSRT dataset only (but no Montgomery data), which is a much more challenging scenario. Note that only the two patients from JSRT dataset (left two columns) have heart annotations for evaluation of heart area IoU. These examples aren’t cherry picked results, but are in fact the more difficult cases. For example, notice that the 91.4% lung IoU by SCAN in the left most column is already much below the average 94.7% IoU in our evaluation (see the evaluation table above).

正如您所看到的,所有 4 个案例都非常令人满意地“修复”了。此外,请注意,与扫描相比,扫描在每个肺野的外下角(肋膈角)产生了更真实的锐角。拐角通常不会影响每像素性能,但在下游诊断任务中可能很重要(例如,检测肋膈角的钝化)。

在临床环境中,仅仅有良好的平均表现是不够的,但重要的是要避免令人发指的预测错误,因为它们会影响医生对人工智能的信任。通过使用对抗性学习框架,SCAN 改进了每像素指标以及预测的“整体外观和感觉”。这两者在临床环境中都很重要。

与 CXR 分割的现有技术的比较

上面的评估表表明,我们的方法在 CXR 肺野分割方面远远优于现有技术(“基于配准”的方法)。由于我们的工作是第一个针对 CXR 细分的深度学习解决方案,因此了解非深度学习解决方案可能有多复杂很有帮助:

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

The CXR lung segmentation pipeline used in (Candemir et. al., TMI (2014))

坎迪米尔等人的方法。艾尔。,TMI (2014) 涉及一系列 sift 特征提取、形状变换、寻找具有相似肺形状轮廓的患者作为候选 CXR 分割、图切割等以产生最终分割。每个阶段需要各种调整参数,并且由于预测是基于使具有相似肺轮廓的患者变形,因此当新患者的肺与现有训练数据足够不同时,性能会受到影响,这一点我们将在后面看到。

坎迪米尔等地的复杂管道。艾尔。,TMI (2014) 与神经网络的简单性形成鲜明对比,在神经网络中,网络自己学习特征和形状*。像 SIFT 和一系列阶段的精细形状操作这样的手工制作功能的日子已经一去不复返了。*

进行一些定性比较有助于理解 SCAN 如何优于 Candemir 等人。艾尔。,TMI (2014) :

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

The left two columns are from the JSRT evaluation set (using model trained on JSRT development set), and the right two columns are from the Montgomery set (using model trained on the full JSRT dataset).

对于左边的两列,扫描在尖锐的肋膈角周围产生更真实的轮廓。这在基于配准的模型中可能是一个挑战,其中检测和匹配肋膈点是困难的。对于右边的两列(坎迪米尔等人。艾尔。、TMI (2014))由于测试患者肺轮廓(来自 Montgomery 数据集)和 JSRT 数据集中的现有肺轮廓之间的不匹配而挣扎,导致不自然的掩模形状。

最后的想法

围绕人工智能在 CXRs 上的诊断准确性有很多炒作。然而,基于人工智能的 CXR 诊断可能会受到放射科医生的怀疑。虽然有令人兴奋的结果,但通常更容易通过较小的改进进入医院,如心胸比率(CTR)计算,可以从肺分割中获得(见第 1 部分)。我们能够很快对 CTR 引擎进行测试。自动 CTR 计算很容易解释,而且通常非常准确。我们发现,有时更重要的是通过用强大的人工智能很好地支持他们现有的工作流程来获得医生和领域专家的信任,而不是用不太成熟的人工智能解决方案来改变他们的工作流程。我希望这个案例研究可以为其他医疗保健人工智能解决方案的开发提供一个有益的例子。

作者简介: 大卫·戴是苹果的高级机器学习工程师,探路者 AI 的顾问, Petuum 的前高级工程总监。他拥有卡内基梅隆大学的机器学习博士学位,并被评为匹兹堡 30 岁以下。@ daiwei 89|Medium| David @ way finder . ai。

参考

机器会思考吗?

原文:https://towardsdatascience.com/can-machines-think-307e16e3fd2c?source=collection_archive---------17-----------------------

图灵测试及其工作原理的 2 分钟总结

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

Created by Katerina Limpitsouni

我们如何确定机器可以思考?在计算机械与智能中,20 世纪计算机科学家艾伦·图灵认为,模仿游戏这种思维实验足以决定一台机器的思维能力。

模仿游戏由三个玩家进行:一个男人(A),一个女人(B)和一个审讯者©。A 和 B 与 C 在不同的房间,C 的目标是通过提问和通过打字笔记获得答案来确定 A 和 B 的性别。a 的目标是确保 C 不成功,而 B 的目标则相反。

这个游戏是综合性的,因为问各种各样的问题可以测试思维形式,如解决问题和创造性思维。由于玩家之间没有身体上的互动,他们的思维能力是唯一的变量。所以,如果 A 是机器,A 是人的时候,C 输的概率不变,我们就可以得出结论,机器是会思考的。人和机器的思维过程可能是不同的。因此,他们自然很难互相模仿。由于我们在游戏中用机器代替了人,机器执行了一项艰巨的任务。因此,机会对机器不利,如果游戏断定机器可以思考,我们可以相当肯定。

但是,哪些机器可以使用呢?数字计算机(DC),一种被设计用来执行任何传统上由人类执行的操作的机器,是图灵的规范。在结构和功能上,人类的大脑和 DC 是相似的,这确保了即使在用计算机代替人之后,游戏也是公平的。即使 DCs 存在数学限制,模仿游戏也是有效的“讨论基础”(第 11 页),因为这些限制只会增加对抗机器的几率。

游戏也不受超感知觉的影响,即通过非常规感官感知的能力,因为我们可以有“防心灵感应”的房间(第 17 页)。Viva-voce,一个没有 B 的游戏版本,用于测试学术界的理解能力。所以,在机器能够模仿人的思维的情况下,我们不能论证它不能思考。

总之,模仿游戏是确定计算机思维能力的有效而充分的方法。虽然这可能只是一个思想实验,但随着工程技术的进步,模仿游戏也可能在未来成为现实。

机器能用图灵测试思考吗?

原文:https://towardsdatascience.com/can-machines-think-using-the-turing-test-2dce3665b552?source=collection_archive---------21-----------------------

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

“The Imitation Game”

我一直以来最喜欢的电影之一是《模仿游戏》。当我第一百次看它时,我不禁想到了英格玛机的重要性,它是电影中的一个重要符号,负责加扰文本和解密原始信息。简要概述电影:一个真实的故事,情节围绕着主角艾伦·图灵(由本尼迪克特·康伯巴奇饰演),以及他在成为编码员和帮助战争方面的成就。

A.M .图灵的观点

他研究的目标是寻找戴维·希尔伯特提出的“决策问题”的答案,“有没有一种算法,它以形式逻辑写成的语句作为输入,并产生总是准确的“是”或“否”的答案?

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

Turing Machine: Theoretical computing device

组件

  • 读/写磁头:读、写和修改磁带上符号的装置。
  • 状态变量:保存一条关于机器当前状态的信息。
  • 规则集:描述机器在给定状态和磁头正在读取的当前符号的情况下做什么。

**结果:**表明如果给定足够的时间和内存,这个简单的假设机器可以执行任何计算。

图灵测试

艾伦·图灵认为这个测试来自于术语“机器”和“思考”的定义以及一个问题,“机器能思考吗?”以及“计算机能像人一样说话吗?”这是两个主要的问题,帮助图灵把它们放在正确的角度,并导致了如下发现:图灵测试,人工智能和一项研究,“模仿游戏”。

《模仿游戏》

**描述:**三个人一起玩,一个男人(A),一个女人(B),一个审问者©,男女不限。审讯者和另外两个人呆在不同的房间里。对于审讯者来说,游戏的目的是确定另外两个人中哪个是男人,哪个是女人。他通过标签 X 和 Y 认识他们,在游戏结束时,他说“X 是 A,Y 是 B”或者“X 是 B,Y 是 A”。

提出问题: “当一台机器在这个游戏中扮演人 A 的角色会发生什么?”

**假设:**结果会一样吗?从这个意义上来说,当游戏这样玩的时候,审讯者会像在一个男人和一个女人之间玩的时候一样经常错误地决定吗?计算机被认为是智能的,它的对话很难与人类的区别开来。

图灵预言,到 2000 年,拥有 100 兆或更高内存的机器将很容易通过这项测试。虽然现代机器已经超过了这个内存量,但在量子计算的帮助下,他们正在努力寻找创造性的有效解决方案,以找到虚假的机器人和数据。

伊莱扎

是第一个声称成功通过图灵测试的算法/程序。它通过模仿心理学家来误导人类,目的是让病人说更多的话,并用更多的问题来回答问题!什么?!?!?!?!?!?

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

ELIZA was made in the MIT Artificial Intelligence Laboratory by Joseph Weizenbaum

它愚弄人的成功证明了这个测试的一个弱点。虽然个体生成的机器人听起来令人难以置信地像人,但它缺乏一致的个性,并且没有能力在不使用数据的情况下产生新的想法,这是一个明显的迹象。归根结底,创造计算机生成的对话需要的不仅仅是内存、数据和处理能力。相反,我们希望有一天能达到图灵的目标,毕竟我们必须克服机器意识的障碍。

“为了达到真正的智能,图灵测试通常被视为人工智能必须通过的重要门槛。”

我发现这是一个技术的证明,虽然缓慢,但肯定会朝着图灵测试的目标前进,即构建执行核心脑力任务(如推理、决策、解决问题等)的计算机器。人工智能等技术依赖于这一概念,并进一步理解过去、现在和未来的技术伦理。

神经网络能创造新知识吗?解除神经网络的装箱

原文:https://towardsdatascience.com/can-neural-networks-create-new-knowledge-unboxing-a-neural-net-acee47d4ea03?source=collection_archive---------23-----------------------

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

Original photo by Nina Ž. on Unsplash

令人惊讶的是,在不知道执行这些工作的显式算法的情况下,神经网络(nn)可以被设计和训练成特定的任务。例如,众所周知的识别手写数字的教程很容易实现,但底层逻辑最终隐藏在神经网络中,仅由它的层结构、权重和激活函数隐式给出。

在这篇文章中,我们通过使神经网络的规则透明来揭示其黑箱知识。为此,我们检查了布尔异或函数的神经网络。首先,我们使用已知的关于 XOR 的性质构建一个 NN 自底向上,即我们合并显式已知的代数关系。在第二步中,我们使用张量流 Keras 从零开始训练一个 NN 到 XOR。

最后,我们比较两种方法。我们将 Keras 神经网络分解为布尔分量,并发现其逻辑设置不同于第一步中构建的神经网络。经过训练的 NN 已经发现了使用不同布尔函数的 XOR 的替代表示。

我们不认为这种替代的异或公式在数学界是未知的,但至少对我们来说是新的。这可能表明神经网络可以创造新知识。但是要提取它,我们必须能够将神经网络的设置和参数转换成显式规则。

异或神经网络的自底向上构造

XOR 是由映射定义的布尔函数

XOR (0,0) = XOR (1,1) = 0

XOR (1,0) = XOR (0,1) = 1

为了构建 XOR 的神经网络,我们记住或搜索身份

XOR (x,y) = AND ( NAND (x,y),OR (x,y))

这是有帮助的,因为运算符 AND、NAND(不是 AND)和 OR 是众所周知的,并且都可以由具有 2 个输入和 1 个输出节点、偏置和 sigmoid 激活函数的简单 nn 来表示。

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

Neural Networks for Boolean Operators

这样,我们就可以把与非、与和或的神经网络连接起来,组成异或神经网络。所以 XOR 变成了一个 3 层 NN。

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

Neural Network for XOR

让我们只输入可能的输入配置并检查输出(为此我使用了 Excel 表格)。我们分别为(0,0)和(1,1)得到 0.0072,为(0,1)和(1,0)得到 0.9924。它工作了。

我们可以通过使用 XOR 的以下表示来构建其他 nn:

XOR (x,y) = OR ( AND ( NOT(x),y),AND ( x,NOT(y))。

XOR (x,y) = NAND ( NAND ( x,NAND ( x,y))、NAND ( y,NAND ( x,y)))

然而,这些身份导致了更复杂的网络。

此外,不可能构建 2 层 NN,因为 XOR 不是线性可分的(并且激活函数是严格单调的)。

但是,也许有其他选择来建立一个异或神经网络?让我们在下一节中通过训练一个神经网络来尝试找到一个替代的解决方案。

用张量流构造异或神经网络

对于 NNs 来说,Keras 确实是一个强大且易于使用的库。如上所述,我们构建了一个 3 层 2–2–1 模型,将我们的结果与之前构建的神经网络进行比较。

我们使用学习率为 1 的梯度下降优化器和均方损失函数进行误差反向传播,这是 NNs 的标准方法。

以下是 Python 代码片段:

XOR 的好处是,我们可以训练整个参数空间,因为只有四种可能的配置可以教授。然而,我们需要一些历元来将模型驱动到零损耗和 100%精度,即对于(0,1)和(1,0)输出趋向于 1,对于(0,0)和(1,1)输出分别趋向于 0。

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

Loss vs. epochs for XOR NN

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

Accuracy vs. epochs for XOR NN

但是,培训课程也可能会停滞不前,无法收敛。那么准确度停止在 75%或甚至 50%,即一个或两个二元元组的映射是不正确的。在这种情况下,只要重新建立神经网络,直到你获得一个适当的解决方案。

分析和结论

现在让我们验证 Keras NN 是否具有与构造的相似的结构。通过 get_weights(参见代码片段的结尾),我们获得权重和偏差值。

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

Output Python script

我们使用这些参数来重建神经网络(我再次使用 Excel)。它由三个运算符组成。

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

Neural Network for XOR trained by Keras

通过输入所有可能的配置,我们可以识别与运算符 H1、H2 和 o 相关的布尔函数

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

Boolean Functions in XOR NN by Keras

这就有意思了!我们本来期望 Keras NN 显示与构造的逻辑相同的逻辑,但是,它创建了一个替代解决方案。它没有使用运算符 Nand、OR 和 AND,而是使用 OR、AND 和(相对不为人知的)INH。即神经网络已经找到了公式

XOR (x,y) = INH ( OR (x,y),AND (x,y))

这表明神经网络可以获得以前没有的知识!当然,“新知识”是相对的,取决于专业知识的水平,也就是说,如果有人知道 XOR 的所有表示,Keras NN 不会提供额外的价值。

此外,对于更复杂的神经网络,将权重转化为显式算法或公式并不容易。但也许这种专业知识将是未来人工智能专家必须具备的能力。

最后请注意,NNs 不是我的日常业务。特别是,我不知道我的发现是新东西还是旧帽子。所以我期待你的反馈。感谢您事先提出的意见、问题、建议或更正——我们都欢迎!

我们能比卷积神经网络做得更好吗?

原文:https://towardsdatascience.com/can-we-do-better-than-convolutional-neural-networks-46ed90fed807?source=collection_archive---------12-----------------------

PyTorch 实现了 BMVC 2019 的“利用分层多图网络进行图像分类”

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

The number of pixels in the top row is 11, 7 and 1000 times larger (from left to right) than the number of “superpixels” in the bottom row. Can we use the superpixels rather than raw pixels as input and improve on convolutional neural networks?

大约两周前在英国加的夫结束的英国机器视觉大会(BMVC)是计算机视觉模式识别领域的顶级会议之一,竞争接受率为 28%。与其他人相比,这是一个小事件,所以你有足够的时间在海报周围走动,并与主持人一对一交谈,我觉得这真的很好。

我在 肖林 默罕默德·阿梅尔 ( 主页和我的博士导师 格拉汉姆·泰勒的指导下,展示了一张关于 图像分级多图网络 的海报

在论文中,我们基本上试图回答“我们能比卷积神经网络做得更好吗?”。这里我讨论这个问题,用结果来支持我的论点。我还使用 PyTorch 向您展示了来自 PASCAL VOC 2012 的单个图像的整个流水线的前向传递。

这篇文章的完整代码在 Github 上的我的笔记本里。在整个 PASCAL 数据集上进行训练和验证应该很容易。

那么,我们为什么要做得比康文网更好呢?他们不是在很多任务上都超过了人类吗?

例如,你可以说图像分类是一个已解决的任务。嗯,就 ImageNet 而言,是的。尽管 ImageNet 做出了巨大贡献,但这是一项奇怪的任务。为什么你要区别数百种狗的品种?因此,结果是我们有成功的模型,但是不能区分轻微旋转的狗和猫。幸运的是,我们现在有 ImageNet-C其他类似的基准显示我们离解决这个问题还很远。

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

Pipeline: We solve the classical task of image classification.

在相关任务中出现的另一个公开问题,如对象检测,是对非常大的图像(例如,4000×3000)进行训练,这由例如Katharopoulos&Fleuret(ICML,2019 )和 Ramapuram 等人(BMVC,2019 )解决。多亏了后者,我现在知道如果海报的背景是黑色的,那么它很可能来自苹果。我也应该留点颜色!

所以,也许我们需要一个不同于卷积神经网络的东西?与其不断修补它的错误,也许我们应该从一开始就使用一个具有更好属性的模型?

我们认为这样的模型可以是* 一个图形神经网络(GNN)——一个可以从图形结构数据中学习的神经网络。gnn 有一些吸引人的特性。例如,与 ConvNets 相比,gnn 本质上是旋转和平移不变的,因为在图中根本没有旋转或平移的概念,即没有左和右,只有某种意义上的“邻居”( Khasanova & Frossard,ICML,2017 )。因此,让一个 ConvNet 更好地推广到不同的旋转的问题,这个人们多年来一直试图解决的问题,被 GNNs 自动解决了!*

关于从大图像中学习,如何从图像中提取超像素并将低得多的维度输入馈送到 GNN,而不是将下采样(例如 224×224)图像馈送到 ConvNet?与双线性插值相比,超像素似乎是一种更好的图像下采样方法,因为它们通常通过保持对象之间的边界来保留大量语义。通过 ConvNet,我们无法直接从这种输入中学习,然而,有一些不错的作品提出利用它们( Kwak 等人,AAAI,2017 )。

所以,GNN 听起来很棒!让我们看看它在实践中的表现。

哦不!我们基于( Kipf & Welling,ICLR,2017 )的基线 GNN 在 PASCAL 上仅实现了 19.2%(平均精度或 mAP),相比之下,具有相同层数和每层过滤器的 ConvNet 达到了 32.7%。

我们提出了几项改进,最终击败了 ConvNet!

1.分层图

在 ConvNets 中,图像的层次结构是通过池层隐式建模的。在 GNNs 中,至少有两种方法可以实现这一点。首先,您可以使用类似于 ConvNets 的池,但是对于图形,定义一个快速且良好的池方法确实具有挑战性。相反,我们可以在多个尺度上计算超像素,并通过它们与更大的父超像素的对应关系来汇集超像素。然而,由于某些原因,这种池化在我们的例子中并没有很好地工作(我仍然认为它应该工作得很好)。因此,取而代之的是,我们在输入级别建立一个层次模型。特别是,我们将所有尺度的超像素组合成一个集合,并基于语义分割中常用的交集并集(IoU)来计算层次关系。

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

Three scales of 1000, 300 and 7 superpixels computed by SLIC. Note that the SLIC algorithm that we use often returns fewer superpixels (shown on top of each image) than we request. In the middle image I show spatial connections in yellow, while in the right image — hierarchical ones that allow to connect remote nodes.

基于这个原则,我在下面的代码中构建了层次图。我还构建了空间图的多尺度版本,但它只编码空间关系,而 IoU 应该更好地编码层次关系。例如,使用 IoU,我们可以在远程子节点之间创建快捷方式,即连接两个小的超像素(例如车轮),它们在空间上相距很远,但属于同一个父节点(例如汽车),如上图所示。

事实上,层次图将 mAP 提升至 31.7%,仅比 ConvNet 低 1%,而可训练参数却少了 4 倍!如果我们只使用空间多尺度图,结果会更糟,正如本文所探讨的。

太好了!我们还能做些什么来进一步改善结果?

2.可学习的关系

到目前为止,如果我们可视化我们的过滤器,它们将看起来非常原始(如高斯)。更多细节请看我的 GNNs 教程。我们想学习一些类似于 ConvNets 的边缘检测器,因为它们工作得非常好。但事实证明,用 GNNs 来学习它们是非常具有挑战性的。为此,我们基本上需要根据坐标之间的差异生成超像素之间的边缘。这样做,我们将赋予我们的 GNN 理解坐标系的能力(旋转,平移)。我们将使用 PyTorch 中定义的 2 层神经网络,如下所示:

*pred_edge = nn.Sequential(nn.Linear(2, 32),
                          nn.ReLU(True),
                          nn.Linear(32, L))*

其中 L 是预测边的数量或过滤器的数量,例如下面可视化中的 4。

我们将滤波器限制为仅基于坐标之间的绝对差|(*x₁,y₁*) - (*x₂,y₂*)|而不是原始值来学习边缘,使得滤波器变得对称。这限制了滤波器的容量,但它仍然比我们的基线 GCN 使用的简单高斯滤波器好得多。

我的 Jupyter 笔记本中,我创建了一个类LearnableGraph,它实现了在给定节点坐标(或任何其他特征)和空间图的情况下预测边的逻辑。后者用于在每个节点周围定义一个小的局部邻域,以避免预测所有可能节点对的边,因为它很昂贵,并且连接非常远的超像素没有多大意义。

下面,我将训练过的pred_edge函数形象化。为此,我假设我们应用卷积的索引为 1 的当前节点位于坐标系的中心,*(x₁,y₁)=0*。然后我简单地采样其他节点的坐标,*(x₂,y₂)*,并把它们馈送给pred_edge。颜色显示边的强度取决于与中心节点的距离。

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

Visualization of predicted edges which can be interpreted as filters, where each intensity value is an edge between two nodes at a distance specified in axes.

学习后的图也非常强大,但计算成本较大,如果我们生成非常稀疏的图,这可以忽略不计。32.3%的结果仅比 ConvNet 低 0.4%,如果我们生成更多的滤波器,这个结果很容易提高!

3.多尺度 GNN

我们现在有三个图:空间图、层次图和学习图。具有空间或分层图形的单个图形卷积层允许仅在“第一邻居”内传播特征。在我们的例子中,邻居是软的,因为我们使用高斯来定义空间图,并使用 IoU 来定义层次图。 Defferrard 等人(NIPS,2016 )提出了一种多尺度(多跳)图卷积,它在一个 K 跳邻域内聚合特征,并近似谱图卷积。参见我的另一篇文章对这种方法的详细解释。对于我们的空间图,它本质上对应于使用不同宽度的多个高斯图。对于层次图,这样我们可以在远程子节点之间创建 K -hop 快捷方式。对于已学习的图形,该方法将创建以上可视化的已学习过滤器的多个尺度。

使用在我的GraphLayerMultiscale类中实现的多尺度图形卷积被证明是极其重要的,它使我们能够超过基准 conv net 0.3%!

4.以低成本改进关系类型的融合

到目前为止,为了从我们的三个图中学习,我们使用了标准的连接方法。然而,这种方法有几个问题。首先,这种融合算子的可训练参数的数量与输入和输出特征维数、标度( K) 和关系类型的数量成线性关系,因此如果我们一次增加两个或更多这些参数,它确实可以快速增长。第二个,我们试图融合的关系类型可以具有非常不同的性质,并且占据流形的非常不同的子空间。为了同时解决这两个问题,我们提出了类似于( Knyazev 等人,NeurIPS-W,2018 )的可学习投影。通过这种方式,我们消除了线性依赖性,与串联相比,参数数量减少了 2-3 倍。此外,可学习的投影转换多关系特征,使得它们应该占据流形的邻近子空间,便于信息从一个关系传播到另一个关系。

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

One of the proposed relation type fusion methods, which performs very well on PASCAL and allows us to beat the ConvNet by a quite large margin.

通过使用提出的融合方法,在下面的GraphLayerFusion类中实现,我们获得了 34.5%的性能,比 ConvNet 高出 1.8%,同时参数减少了 2 倍!对于最初除了超像素中编码的信息之外,对图像的空间结构一无所知的模型来说,这令人印象深刻。探索其他融合方法会很有趣,比如这个,以获得更好的结果。

结论

事实证明,通过多关系图网络和一些技巧,我们可以比卷积神经网络做得更好!

不幸的是,在我们改进 GNN 的过程中,我们慢慢地失去了它的不变性。例如,旋转图像后,超像素的形状可能会改变,我们用于节点特征的超像素坐标也使模型不太鲁棒。

然而,我们的工作是朝着更好的图像推理模型迈出的一小步,我们表明 GNNs 可以铺平一个有希望的方向。

具体实施详见 Github 上的我的笔记本。

我也强烈推荐马蒂亚斯·菲的硕士论文代码一个非常相关的题目。

GithubLinkedInTwitter 上找到我。我的主页

我们能使用神经网络生成自动板球解说吗?

原文:https://towardsdatascience.com/can-we-generate-automatic-cricket-commentary-using-neural-networks-dbed3aeeef07?source=collection_archive---------19-----------------------

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

和其他事物一样,板球世界在最近几年也经历了很多技术变革。板球运动的方式以及全世界对它的看法都因此发生了变化。在这篇文章中,我们将讨论神经网络是否能够通过观看板球比赛来产生评论。

在文献中已经有一些工作(可以在这里找到、这里这里)但是他们没有使用神经网络。作为端到端深度学习的信徒,我认为神经网络将在不久的将来完成这项任务。这是一个很难解决的问题,因为除了视觉特征提取之外,它还涉及非常复杂的时间动态和长期依赖性的处理。这是因为评论通常与当前游戏的发展、它在更广阔的视角中的重要性(友谊赛与锦标赛)以及所涉及的球队和球员的历史高度相关。对正在发生的事情进行脱离上下文的解释似乎是一个更容易解决的问题,我可以想到一种架构来对此进行建模。

借鉴最近出现的时空神经网络的思想,我认为合理的架构应该包括从静态帧中提取视觉特征的卷积神经网络,对这些特征的复杂非线性时间动态进行建模的递归神经网络,以及在它们之上用于端到端(视频到评论)学习的解码器编码器架构。用板球镜头作为输入,用评论作为监督信号,为训练这个网络建立相当数量的数据似乎是可以管理的。我在这里为感兴趣的人发现了一个非常有前途的项目想法!

板球镜头分类似乎是这个自动评论生成系统的重要组成部分。最近一项非常有趣的工作关注这个问题,并使用基于 CNN 和 LSTM 的架构将视频剪辑分类成相关镜头,它显示了有希望的结果。玩家定位和姿态估计对于准确的镜头分类非常重要。在下面的章节中,我们将对人体姿态估计在从静态图像中识别板球击球中的功效进行初步探索。

我从谷歌图片收集了一个小数据集,总共约有 120 张图片,用于“剪切镜头”、“扫描”和“驾驶”。这个数据集非常小,如果你计划用这个想法设计一个有意义的项目,你可能需要收集一个更大的数据集。我使用开放姿态进行姿态估计,它提供了一个二维实时多人关键点检测。我使用了最轻最快的型号’ mobilenet_thin ',为了简单和快速执行,你可以尝试不同的型号,以实现你选择的速度和精度之间的平衡。打开姿势给出了玩家 18 个关键点的 x 和 y 位置(在 2d 图像内)。然后,我试图在这个 18 维特征空间的顶部建立一个随机森林分类器,将每个实例分类为三个镜头之一。通过 70/30 的训练测试,我在测试集上获得了大约 0.8 的 F1 分数。考虑到我所使用的数据集的稀缺,这已经很不错了。测试集上的一些预测如下所示。

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

github 上有代码。

[## muaz-urwa/Cricket-Shot-使用计算机视觉分类

通过在 GitHub 上创建一个帐户,为 muaz-urwa/Cricket-Shot-class ification-using-Computer-Vision 开发做出贡献。

github.com](https://github.com/muaz-urwa/Cricket-Shot-Classification-using-Computer-Vision)

可以提高准确性的事情:

  • 更大的数据集(无需动脑)
  • 使用更大更精确的姿态估计模型(参考他们的 github)。
  • 使用来自相同摄像机角度的图像,或者使用所有可用摄像机角度构建的多视图特征空间。
  • 使用数据增强。水平翻转将有助于推广右手和左手击球手。如果你计划使用固定视角,不要使用大角度旋转。抖动和随机裁剪只有在使用数据集微调姿态估计时才有帮助。

玩得开心!

我们能预测未来的电力市场吗?

原文:https://towardsdatascience.com/can-we-predict-the-day-ahead-electricity-market-f532137fd5be?source=collection_archive---------17-----------------------

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

Photo by Severin D. on Unsplash

用 ARIMA 预测法预测英国电力市场

ordpool 为英国、北欧和波罗的海国家运营前一天电力交易平台。前一天的市场通过建立供需平衡来运行,因此消费者将在系统中输入所需的电量和愿意按小时支付的价格,而发电机将需要确定它可以输送多少电以及它希望按小时支付的价格。电价是由系统将发电商的报价和消费者的出价匹配起来决定的。购买和销售曲线被构建,它们的交叉点决定了市场价格和每天整点交易的电量。

ARIMA 预测方法将用于预测未来一天的电力市场。我选择使用非季节性 ARIMA 方法,因为只使用了前 300 个值,而不是全年的数据。数据来自 nord pool 2016-2017 年,由于模型在我的电脑上运行时间太长,因此在潜在的 8800 个值中只有 300 个值用于此过程。这个过程的完整代码在 GitHub 库

拟合预测模型

ARIMA 代表AutoReIintegratedMovingAaverage,在这个模型中,使用了三个主要参数,分别表示为( p,d,q )。该模型结合了自回归模型和移动平均模型,并将这种混合预测模型应用于差分时间序列。

第一步是查看时间序列是否平稳,即查看时间序列的统计特性是否随时间变化。要使用的检验称为增广的 Dickey-Fuller 检验,也称为单位根检验。它检验零假设,即时间序列样本中存在单位根,它不是平稳的,另一个假设是它是平稳的,因为它的统计特性不随时间变化。

Dickey-fuller Test Code

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

Results of the Dickey-Fuller Test

结果表明,可以拒绝零假设,因为数据样本在统计上不可能是非平稳的,因为 p 值< 0.0000001,这意味着数据样本中不存在单位根,因此时间序列是平稳的。

d 参数代表模型要求的差分的综合阶次,使得时间序列数据变得稳定。通过从前一时间步的观测值中减去当前观测值,使时间序列变得平稳。因此,在这种情况下,它可以设置为 0,因为时间序列已经是稳定的。

P 参数代表 ARIMA 方法的自回归模型的阶数。这使用了一个观察值和多个滞后观察值之间的依赖关系,这意味着这是一个用于测试时间序列数据内随机性的工具,通过测试来查看 X 在多大程度上受 X. e. *的先前值的影响。g .当前价格在多大程度上受先前价格的支配,以及这种情况会持续多久。*此参数通过创建自相关图表并查看数字来计算。在这种情况下,从图表中可以设置为 5 阶。

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

Autocorrelation chart that helps to determine the P Parameter

q 参数代表移动平均值的阶数,并显示窗口函数移动时的大小。此参数通过部分自相关图表计算得出。在这种情况下,可以将其设置为 12 阶,因为有 12 个值超出了 95%的置信区间(蓝色条)。

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

Partial autocorrelation graph that helps to determine q parameter

下面是测试不同 ARIMA 模型并计算哪个具有最低 AIC 值的代码。AIC 值是赤池信息标准,用于比较预测模型。由于很难从上面的图中看到正确的参数,我也选择了迭代一系列 ARIMA 模型,看看哪个模型最好

Iterating the ARIMA forecasting models

上述代码的结果为我们提供了一个(1,1,2)模型,用于 AIC 值为 1400 的(p,d,q)参数,还有其他具有更低值的不同模型,但是它们会产生错误,因此我将使用这些值,因为很难单独从图中检测出正确的 AR 和 MA 参数。

验证模型

既然已经找到了 ARIMA 参数,必须将数据分成训练样本和测试样本,因此前 200 个值将用于训练模型,后 100 个值将用于验证模型。

Arima forecasting function written to predict the next 100 values

结果如下所示,大多数测试值都在预测 ARIMA 值的 95%置信区间内。该模型的均方误差为 62,表明该模型可以进一步改进。然而,我们最初的努力是成功的,你可以使用 ARIMA 模型预测未来一天的市场。

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

Results of validating the ARIMA prediction values against the test values

我们能预测干草叉音乐评论的结果吗?

原文:https://towardsdatascience.com/can-we-predict-the-outcome-of-pitchfork-music-reviews-3b084d90c18f?source=collection_archive---------18-----------------------

我在研究数据时发现。

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

我是一个音乐迷。我尽可能多地听音乐。我不仅听,我还写,录,表演,制作,本质上是生活和呼吸音乐。我过去非常关注的事情之一是音乐评论。Pitchfork Music 是这个领域的主要参与者,我想知道我是否可以建立一个模型来预测 Pitchfork Music 的“*最佳新音乐”*奖。我也在学习数据科学,所以我决定让这两个世界稍微融合一下。

一点背景:Pitchfork 对提交的内容进行 0 到 10 分的评分,10 分是最高分。多名员工都提交他们认为的分数,他们对所有员工的评价取平均值,这就是分数。他们还投票决定它是否应该获得“最佳新音乐”奖。这些实际上是如何确定的细节是未知的,至少对我来说是这样。 你可以在这个子栏目 里读到更多关于它的

我下载了数据,清理了数据,争论了数据,创建了模型,并运行了一些预测,能够以相当高的准确度合理地预测“最佳新音乐”。尽管有那么多的预测模型,但这并不是整个过程中最有趣的地方。这是我在数据中发现的。

先从分数分布说起。你在这里看到的是大约 26,000 个分数跨越了大约 17 年。你可以看到分数一般集中在 6 到 8 分之间(这里是不是存在一些选择偏差?)而且大多数 BNM(从现在开始我将简称为“最佳新音乐”)的评分都在 8 分以上,这并不奇怪。

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

您还可以在这个部分依赖图上看到分数和 BNM 差异之间的关系,这个图本质上显示了一个特征(在本例中为“分数”)对分类结果(即 BNM)的重要性。

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

我还测试了其他特性的依赖性,发现了许多关系。最值得注意的是流派、艺术家和标签。从表面上看,这可能很有意义,但我会告诉你为什么这很有趣,但为了做到这一点,我想从谈论与“作者”的关系开始。根据数据,一些作者似乎比其他人更有可能给出更高的分数和/或 BNM 标签,如下所示:

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

以下是列表形式的相同数据:

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

你也可以开始看到流派的倾斜。

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

关于“流派”的数据,最有趣的是它们的分布。看看这张表:

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

摇滚无疑是最常被评论的流派,而全球是最少被评论的流派,但这并不重要。最有趣的是 BNM 的分布。流行音乐和 R&B 拥有最高比例的 BNM,实验音乐和摇滚音乐紧随其后。

说到唱片公司,这里有一个非常明显的偏差…似乎有些只是比其他的更有趣!

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

看起来你和谁签约是很重要的,尽管我想指出的是,有 21 张专辑是自己发行的,这说明了现代传播音乐的方法。

我们看到同样的事情发生在艺术家身上:

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

这个图表可能看起来有点奇怪,但是它是由每个标签的总 BNM 值组织的。这是图表左上角特写:

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

现在让我们以同样的方式来看“艺术家”。

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

同样,为了清晰起见,左上角放大了。

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

BNM 集中在整个“艺术家”领域的一小部分。要么一些艺术家比其他人更受青睐,要么就是比其他人更好。

那么,这一切意味着什么呢?在每一个特征(流派、艺术家、作者和标签)中,最好的新音乐区别都集中在与整体数据相比相对较小的数量上。是不是一个厂牌挑的艺人比其他的好?是不是一个艺术家始终比其他人优秀?而作者呢?在什么是真正最好的新音乐的问题上,有些人比其他人更有先见之明或更有洞察力吗?

号码

至少在我看来不是。我相信我们在这里看到的是音乐是非常主观的。一直都是。尽管试图保持客观,或者至少声称如此,Pitchfork 倾向于支持特定的流派、特定的艺术家和特定的标签,作者本身也倾向于有特定的倾向。

现在,这只是一个网站,尽管它在乐评界很有影响力。如果我从其他大型评论网站获取数据,会有什么变化?我们会看到相同的偏差,还是会因站点而异?我认为公平地说,这将是一个有趣的实验,也许是我将来要解决的问题!

注意:我将整理一篇文章,介绍我是如何实现我的代码的,展示我的数据清理、模型和特性工程,并将相应地更新这里的链接。与此同时,这里是我的 Github 库,供您欣赏。

我们能不能不要再说 SQL JOINs venn diagrams 了?

原文:https://towardsdatascience.com/can-we-stop-with-the-sql-joins-venn-diagrams-insanity-16791d9250c3?source=collection_archive---------8-----------------------

真的,求求你,OMG,停

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

烦躁时间。这些年来,我不得不多次向非技术人员教授 SQL,每个试图学习 SQL 但失败的人都谈到“连接是多么困难和可怕”。如果你在网上搜索 SQL 连接的解释,是的,它看起来很疯狂。

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

Look at this, just LOOK at it!

真正让我困惑的是,连接和集合论的整个混合甚至没有意义。一旦你的解释必须在看似任意的地方包含“其中 A 为空”,人们会认为你必须记住任意的咒语才能让事情正常进行——这听起来确实很难!

啊,谁来让这停下来!

旁注:关系代数

是的,我知道 SQL 源于关系代数,而不是集合论。实际上,我向人们解释事情的方式产生了类似的结果,但显然是从笛卡尔开始并向下过滤的正式方式向后倒退了一些。

我没有正式的关系代数背景,所以不要让我无药可救,欢迎你查看关于这个话题的其他 来源

我是如何向人们传授联结的

我用一步一步的伪算法来解释 SQL 引擎如何产生连接的数据集,因为我觉得它可以让你掌握一些用连接可以做的更疯狂的事情。

用于生成和测试这些查询的 PostgreSQL 兼容 SQL 位于末尾

假设我们有两张表,A 和 B:

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

Data about cities godzilla attacks adapted from here

假设我们想任意连接 A 和 B 以得到“表 A 中的城市名称和 B 中的哥斯拉攻击”。(是的,这些表格有很多数据问题。为了简单起见,我没有考虑 id 和规范化,所以我必须使用 City_name 作为连接键。但所有这些在教授联接如何工作时都无关紧要,所以我忽略了它。)

我在这里的目标是教那些只看了 15 分钟 SQL 语法的人如何准确地预测一个连接将产生一致的结果。

概念连接算法

对于一般查询:

Select _*fields_*
FROM A
JOIN B ON on_*conditions* WHERE *where_conditions*

我使用了“工作集的概念,符合连接条件的行被名义上存储起来,以便以后根据 where 条件进行检查。

  1. 对于 A 中的每一行,逐一与 B 中的每一行进行比较
  2. 检查 on_conditions
    如果 on_conditions 为真,则将 A 中的行连接到 B 中的行,并将连接的 A+B 行放入工作集
    如果 on_conditions 为假,则继续比较下一对行
  3. 对于左/右/外连接
    —对于左连接:如果对于 A 中的一行,没有条目被放置在工作集中,尽管检查了 B 中的每一行,然后将 A 中的该行放置在工作集中,在应该具有来自 B 的数据的字段中使用空值
    —对于右连接:类似于左连接,但是对于 B, 如果在与 A 的所有行进行比较后,B 中的某一行在工作集中没有条目,则将 B 中的行插入到工作集中,在应该有来自 A 的数据的地方使用空值
  4. 检查完所有行组合后,从工作集中取出任何内容,并使用 where_conditions 对其进行过滤
  5. 根据需要应用任何 GROUP BY、ORDER BY、HAVING 子句
  6. 获得结果集,就大功告成了

这听起来仍然很难!

言语艰难。

动画更容易,所以我用 Excel 和 Photoshop 给你们做了一些。如果你想借,请随意。

警告:这不是 SQL 引擎的实际工作方式!

我在这里掩盖了一大堆东西,索引,NoSQL 的怪癖(比如如果你在 Hive 上,只能进行等价连接),为了不浪费内存和时间而进行的许多优化。

没关系,一个初学者不应该关心这些东西,最终结果匹配。

内部连接

SELECT A.City_name, Godzilla_attacks
from A
JOIN B on A.City_name = B.City_name

这个很简单——遍历两个表,当名称匹配时,插入到工作集。

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

A simple INNER JOIN

左连接

SELECT A.City_name, Godzilla_attacks 
from A LEFT 
JOIN B on A.City_name = B.City_name

也很简单,遍历所有的行,发现末尾的上海在 B 中没有可连接的条目,用一个空值添加它。然后,您可以在 WHERE 子句中过滤掉工作集中的空值。

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

A simple LEFT JOIN

疯狂加入

SELECT A.City_name, B.City_name, Godzilla_attacks 
from A 
LEFT JOIN B 
  on (A.Country = ‘USA’ and B.Godzilla_attacks = 2) 
  OR B.Godzilla_attacks = 13

这个查询毫无意义。故意的。如果你能在脑子里想象这个东西的行为,你就基本上掌握了连接的概念。

只要 ON 条件的值为 true,连接就是有效的,这完全是滥用了这一事实。您可以以极其强大的方式滥用这一点,使用诸如 case 语句、算术和其他复杂的逻辑。这就是为什么自连接是完全自然的,以及如何可以轻松地构建直方图。左连接并不重要,因为 A 中的所有行都可以找到一些连接对象。

引擎不关心,它只看到逻辑符号,如果为真则加入。

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

A “Go home you’re drunk” JOIN

最后

希望有人,在某个地方,用这个从维恩图中被拯救出来。如果只有一个人得救,并学会了如何更好地加入,我很高兴。

前进,写一些疯狂的条款。

谢谢

这篇文章的灵感来自于某个人提醒我我有多讨厌这个:

密码

示例 DDL 和 DB-fiddle 中的“疯狂”查询。

create table A (City_name varchar, Country varchar);
insert into A (City_name, Country) values
(‘Tokyo’,’Japan’),
(‘New York’,’USA’),
(‘Fukuoka’,’Japan’),
(‘Shanghai’,’China’)
;
create table B (City_name varchar, Godzilla_attacks int);
insert into B (City_name, Godzilla_attacks)
values
(‘Fukuoka’,3),
(‘Nagoya’,2),
(‘New York’,3),
(‘Tokai’,3),
(‘Tokyo’,13),
(‘Yokohama’,2)
;

我们能教一台计算机量子力学吗?(第一部分)

原文:https://towardsdatascience.com/can-we-teach-a-computer-quantum-mechanics-part-i-c3e724e31e1a?source=collection_archive---------26-----------------------

量子电路综合的强化学习方法

作者: Kaiah Steven,Matthew Rose,Tyler Jones 和 Xavier Poncini(量子机器学习研究团队, Max Kelsen

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

1.介绍

它被誉为震撼世界的下一项通用技术,就像图灵机的出现开启了信息时代一样。量子计算机被承诺会带来数不清的计算能力。然而,尽管我们尽了最大努力,我们还没有看到一台物理实现的量子计算机胜过它的经典计算机。通往量子霸权的道路是漫长的;幸运的是,这不是我们的第一次计算革命。借助经典计算领域的资源和经验,我们可以绘制出这一革命性技术发展阻力最小的路径。

本博客的第一部分将深入研究量子力学的使用,以促进有效的计算。然后,当我们试图解决同时控制和隔离量子比特的悖论时,本博客的第二部分讨论了我们打算如何通过强化学习将问题交给机器。

2.量子力学和计算

故事从我们最基本的现实理论量子力学开始。众所周知,这种描述是反直觉的,它预言了两种现象,这两种现象一旦被利用,就构成了量子计算的基础。
第一个效应,叠加,可以认为是一个物理系统可以同时存在于多个不同的状态。这种叠加持续到量子态被扰动(例如测量)导致“坍缩”成一个单一的经典态。进入量子领域,我们的标准计算单元可以从拥有 0 或 1 状态的简单比特升级到拥有 0 和 1 状态的任何可能组合的量子比特。

第二个影响是纠缠。顾名思义,这样的过程将两个或更多的物体缠绕在一起,确保它们有着相关的命运。假设我们纠缠两个量子位,每个量子位的状态是不确定的。从数学上来说,独立描述每个量子位是不可能的,我们只能描述整个系统。因此,我们对中一个量子位元的崩溃和测量会立即影响另一个的状态。

叠加和纠缠现象如何在有效计算中有用?首先,它们允许我们生产一个通用图灵机的量子力学模拟。这是通过定义一组操作来实现的,这些操作的有限序列可以执行任何可能的计算。第二,也许是最令人兴奋的前景,是利用叠加来并行计算大量的场景。这种计算能力有助于高效解决多变量优化问题——自然出现在所有行业领域(参见金融大数据中的例子)。

我们目前正处于通往量子霸权之旅的开端——可以使用被称为嘈杂的中等规模量子计算机( NISQ )。这些设备的最大障碍之一是退相干,它为每个量子位设置了一个失效日期。量子系统中包含的信息最终会“泄漏”到环境中,直到你正在使用的系统失去其,变得实际上不可用。

这产生了一个设定的时间窗口来执行量子计算(参见量子纠错来永久解决这个问题)。因此,时间成为一种资源,必须有效地利用它来充分利用量子计算。因此,研究集中在寻找最快的方法来执行量子算法。找到这个最优解绝不是一个容易的问题,并且今天仍然是一个公开的研究问题。

量子计算的一个特殊公式由电路模型提供。这里,在量子位上执行的酉运算用门来表示。通用量子计算并没有唯一地定义一组门——因此有许多组达到这个目的。出于我们的目的,我们将集中于由 X、Z、H、CNOT 组成的门集。这样的门集并不是通用的(在标准条件下),然而它将允许我们访问叠加态和纠缠态。在我们创建第一个量子电路之前,我们将介绍两个想法,每个想法对于发展对这些机器要执行的操作类型的直觉都是至关重要的。

2.1.布洛赫球

布洛赫球是单个量子位状态的直观视觉表示。叠加允许系统处于 0 或 1 状态的任意线性组合。在 bra-ket 符号中,一个位的经典 0 和 1 状态被表示为|0⟩和|1⟩.,这将在下一节讨论因此,我们可以将某个系统 S 的状态描述为这两个状态的线性组合:

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

系数 αβ 被称为概率振幅。量子力学的核心是这些系数拥有复数值的能力,例如:

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

*在上面的等式中,我们给出了 α 及其复共轭 α ,其简单地反转了与复数单元相关联的符号。量子力学的许多令人惊讶的结果可以归因于我们缺乏对复杂概率振幅的直觉。系统处于 0 或 1 状态的概率由概率幅度的绝对平方定义。

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

现在让我们用文字总结这些方程的主要结果:

  • 我们将系统的状态描述为可能的状态 0 和 1 乘以它们相关的概率幅度的线性组合
  • 这些振幅很奇怪,因为它们可以是复数
  • 取与每个状态相关的概率振幅的绝对平方,我们可以确定系统处于每个状态的概率
  • 概率之和必须等于 1

Bloch sphere 是将这些概念捆绑到一个直观的包中的简单方法(参见下面的图 1)。最后的约束确保单个量子位系统的所有可能的叠加态都存在于球体的表面上。当在我们的量子位上执行操作时,我们将探索这个物体的表面。

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

Figure 1: The surface of the Bloch sphere defines all of the possible states accessible to a single-qubit system. The application of universal single-qubit gates will allow us to travel anywhere on the surface of this object.

2.2.布雷克记号

Bra-ket 符号是描述操作符(门)对状态的作用的数学形式,这些操作的结果允许我们的状态遍历 Bloch 球。下面的等式表示 X 门在零量子位状态下的作用:

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

换句话说:将 X 门应用于量子位的计算零状态,将该状态转换为计算一状态。

在球体上:X 门将量子位状态从布洛赫球体的北极发送到南极。

现在,让我们检查当我们将 X 门应用于计算一态时会发生什么:

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

换句话说:X 门将一态转换为零态。我们看到 X 门是经典计算中非门的量子模拟。

球体上:X 门将量子位状态从布洛赫球体的南极发送到北极。

把这些动作结合起来,我们就可以看到在布洛赫球面上由这种操作引起的运动。

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

配备了我们的布洛赫球解释让我们检查剩下的单量子位门。Z 门的动作由下式给出:

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

检查 Z 对混合态的作用:

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

在球面上:Z 门围绕布洛赫球面的赤道平面运行。

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

现在让我们检查哈达玛门:

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

在球体上:H 门从两极行进到赤道。

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

与我们之前检查过的三个门不同,CNOT 门是两个量子比特的操作,因此不允许用布洛赫球来解释。我们可以通过简单地在我们的状态旁边加上一个额外的项来表示两量子位系统——从数学上来说,这相当于取一个张量积。|01⟩状态拥有两个量子位,第一个处于 0 状态,第二个处于 1 状态。以类似于单量子位情况的方式,我们可以如下表示双量子位系统:

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

现在让我们研究一下 CNOT 门在我们拥有的两个量子比特系统空间中的作用:

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

将 1 和 2 量子位状态的概念推广到 n 量子位状态对于下面的部分将是有用的,让我们通过建立序列来说明这样的推广:

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

既然我们已经详细介绍了钥匙门的作用和多量子位系统的概念,让我们创建我们的第一个量子电路吧!

2.3.线路模型

量子电路模型是量子算法的图形表示,它将问题分成常见的子过程,类似于经典计算或电气工程中的模拟电路模型。状态表示为水平线,集合中的任何门都可以对其进行操作:

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

让我们想象我们有三个量子比特在|111⟩态,我们想在最终态|110⟩.结束实现这一结果的示例计算如下:

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

检查这个计算的输入和输出状态,我们看到这个复杂的图表只是翻转了第三个量子位的状态。实现相同结果的简化计算如下:

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

这里我们应用了量子力学的知识来简化一个电路的玩具例子。让我们看看当我们扩展到任意数量的量子位时会发生什么:

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

不一定清楚如何确定 U ,产生任意的最终状态 S ,以及这个特定的 U 是否有效。自动化的一个自然问题出现了:是否有可能构建一个模型,它采用一个输入输出状态对,并生成一个有效的电路来促进这种转换?

我们随后的研究试图回答这个问题。鉴于机器学习最近的成功——彻底改变了计算机视觉、机器人学和许多其他领域——我们试图调查这一领域,以检查可能有能力学习计算景观结构的可能范式和架构。

很快就很明显,这样的问题可以类似于视频游戏。我们有一些初始状态,一组有限的操作和一个最终状态,我们只是不知道到达那里的最佳方式。随着强化学习在国际象棋和围棋中击败领域专家,挑战物理学家在高效量子电路的产生中找到阻力最小的路径似乎是很自然的。

第二部分 为我们的实现。

我们能教一台计算机量子力学吗?(第二部分)

原文:https://towardsdatascience.com/can-we-teach-a-computer-quantum-mechanics-part-ii-5e90ac96ef3a?source=collection_archive---------35-----------------------

量子电路综合的强化学习方法

作者: Kaiah Steven,Matthew Rose,Tyler Jones 和 Xavier Poncini(量子机器学习研究团队, Max Kelsen

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

在本系列的第一部分中,我们介绍了许多对量子计算至关重要的先决概念。在这一部分中,我们将详细介绍我们将强化学习应用于状态准备问题的工作。

介绍

我们生活在一个量子计算仅限于嘈杂的中等规模量子计算机(NISQ)的时代。这项技术——就像石头碰撞产生火花的启示——为难以想象的创新和潜力奠定了基础。

目前,这些设备受到可用量子位数量少和相干时间短的限制;因此,当前的目标是从这项新兴技术中提取尽可能多的“热”和“光”。在资源有限的情况下,NISQ 的潜力取决于资源的有效利用。因此,实现特定过程的最佳门(量子位操作)配置是非常需要的。然而,找到这种配置并不容易,尤其是在试图进行有用的量子计算时。

将机器学习突破应用于这一困境是一条充满希望的途径,可以用这些火花点燃一把火,并从今天的量子计算机中获得实际优势。

强化学习

在我们开始之前,让我们快速介绍一下强化学习(RL)。由于一些突破性的成就而在人工智能领域受到欢迎,例如 OpenAI Five RL 基于 DOTA2 团队击败了一支职业选手团队,以及谷歌的 AlphaZero 在围棋中击败了 Lee Sedol 和柯洁(两人都是多个世界冠军得主)。

RL 作为一种有潜力只“解决”视频游戏的技术已经获得了声誉。然而,我们希望量子计算是游戏领域之外的一个领域,可以有效地利用 RL 的力量。

强化学习背后的一般思想是教一个代理(由一个策略体现)如何达到某个定义的目标或目的。这可以通过对两个主要元素——代理和环境——的描述来理解。

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

Figure 2: Learning loop of a typical reinforcement agent

RL 中的环境可以被认为是我们的代理生活在其中并与之交互的虚拟世界。这种交互和反馈允许代理从环境中学习,就像人类通过与他人和周围世界的交互来学习一样。

在时间段(或“情节”)的每一步,我们的代理人被允许观察他们周围的世界,部分或全部,以获得对其当前状态的一些理解。然后,代理从一些预定义的动作空间中选择一个动作,以促进进一步的交互。这个动作改变了环境的状态,并根据世界先前状态和新状态之间的差异向代理返回一个奖励。

代理选择任何动作的基础是该代理的策略——基于当前观察到的环境状态输出有效动作的某种概率分布。在 Deep RL 中,这种策略通过一个神经网络来表现,该神经网络将当前状态作为输入,并提供一个动作作为输出。

一个天真的方法可能是简单地选择最直接的回报。然而,这可能会导致代理陷入困境或走进死胡同——达到局部极值。人们通常会将未来行动的贴现回报与最直接的行动相结合,以此来学习如何达到最终目标。

在我们的代理播放完一集之后,策略会根据存储的状态、动作和奖励信息进行更新。这种更新作为一种方式来教导代理在某些状态下哪些动作是优选的,哪些应该避免。

构建有用的、起作用的 RL 代理的一个主要障碍是构建一个最佳映射到您的特定用例的奖励函数。这种功能是代理在其环境中的唯一监督者,该环境应该只提供引导代理朝向其目标的奖励,并且以避免陷阱的方式。

RL 研究领域充斥着错位和误导代理的例子——大多数在我们看来很幽默,但对代理来说完全合理。例如:

  • “我在我的 Roomba 上连接了一个神经网络。我想让它学会在不撞到东西的情况下导航,所以我设立了一个奖励计划来鼓励速度,阻止撞上保险杠传感器。它学会了倒车,因为后面没有保险杠。”
  • “代理人在第 1 级结束时杀死自己,以避免在第 2 级失败”
  • “代理无限期暂停游戏以避免失败”
  • 一种赛船游戏,其中“RL 代理找到一个孤立的泻湖,在那里它可以转一个大圈,并重复撞倒三个目标,定时移动,以便总是在目标重新聚集时撞倒它们”,而不是实际完成比赛

看到这里越来越多的在游戏中使用强化学习的文献目录,以及一些相当有趣的错误奖励函数。在概述了量子计算和强化学习的预备知识之后,我们现在可以详细描述我们将强化学习应用于量子态制备的努力。

我们的方法

现在有了利用强化学习来优化量子电路构造的能力,我们开始探索我们的选项,包括使用什么样的动作集,将什么定义为我们的状态,可能的奖励函数,以及训练哪个实际的 RL 算法。

IBMQs Qiskit Python 库用于构建和可视化量子电路,并与基于 Python 的量子计算库 Qutip 一起执行相关的量子操作。用 TensorFlow 实现的神经网络被用作代理策略的基础。

在探索了有关 RL 算法的当前文献并检查了最先进的性能之后,近似策略优化 (PPO)的广泛成功和适用性促使我们在测试中使用这种算法。检查的其他选项包括投影模拟深度 Q 网络异步演员-评论家代理 (A3C)。

我们的第一个努力是利用指定量子位的量子状态作为环境状态,同时定义一个由所有合法量子位门对组成的动作空间(例如,量子位 1 上的 X 门被指定为与量子位 3 上的 X 门不同的动作)。

最初的奖励函数是在保真度的唯一基础上运作的,保真度是衡量一个人区分两个量子态能力的尺度。基本上,环境的当前状态和目标状态重叠越多,奖励越高。为了鼓励合成更小的电路,每使用一个门,奖励也会减少。

尽管忠诚有效地决定了目标是否已经实现,但很快就发现这是一个错误的奖励功能。在这个离散门空间上的保真度函数有许多局部最大值的意义上,这是错误的。特别是对于简单的电路,保真度的短期增加通常会增加完成电路所需的门的总数,在某些情况下甚至会将电路引入死胡同。

我们第二次接受奖励功能是出于对完成电路剩余门数的某种测量的野心。有两篇论文在研究如何得出这一方法时脱颖而出。一个( Nielsen 等人)利用几何学的思想将量子操作空间表示为一个表面,其中最佳电路是通过这个表面的最短路径(测地线)。另一个(吉洛拉米)推导出了将一些量子位从一个状态驱动到另一个状态所需的门数的下限表达式。

对我们来说不幸的是,这两个选项似乎都有限制因素,使得它们在我们的框架中没有用处。测地线的生成和求解在计算上非常昂贵,而且 Girolami 的下限只被证明适用于通勤门,这使得动作集失去了普遍性。

奖励函数问题的一个犹豫不决的解决方案是引入稀疏奖励方案——在最终电路达到目标的情况下,只提供正奖励(与使用的门的数量成反比)。在这个实验阶段,我们改变了动作空间,只包含单独的门操作,并设置代理在量子位上循环,而不是让它选择。

作为这种变化的结果,身份门被添加到动作空间中,这样代理可以“跳过”一个量子位,如果它认为有必要的话。这样做可以确保每次操作中不同量子位的一致性。

这些变化的结果是有希望的,该模型能够在合理的时间内设计出具有一致性的最佳简单三量子位电路(例如,下面的电路是在大约 40 个训练周期内合成的,或者在用于测试的笔记本电脑上是在 40 秒内合成的)。

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

目睹我们的代理人工作后,信心大增,我们想探索模型的通用性。产生了不同目标状态的课程,从简单的一门目标单元到更复杂的四门单元。多次对不同目标集的培训有明显的改进迹象,表明代理人有能力同时学习解释多个不同目标的策略。

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

Figure 3: Policy improvement as a model is trained over a set of 7 unique unitaries.

在没有任何指导奖励函数的情况下,PPO 的成功代表了一个有希望的结果,特别是在超参数优化导致收敛时间显著缩短(最简单的电路在 5 秒内,课程在几分钟后)之后。这种与预训练模型融合的改进代表了迄今为止最强有力的建议,即我们的神经网络可以学习在具有挑战性的量子电路环境中导航。

因此,我们决定测试其他奖励函数,用非通用通勤 IQP 门集替换我们的通用非通勤门集。然后,我们利用 Girolami 的下界结果来形成我们的奖励函数。这个模型能够从我们稀疏的奖励中获得成功,同时将代理推向目标,并(希望)避免任何局部极大值。

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

Figure 4: Policy improvement as the IQP model is trained over a set of 7 unique unitaries.

使用逐步奖励函数显示出相对快速的收敛,其电路比用于产生图 3 的电路更复杂。这个通勤门奖励函数在鼓励代理人以相对较快的收敛时间实现目标方面的成功代表了一个强有力的概念证明。随着功能推广到非通勤门,一个更普遍的政策可能会发展。

我们训练强化学习代理人来合成最佳量子电路的努力,依赖于创造一个我们的代理人可以在其中玩耍的自定义环境。这种环境可以在这里找到,并利用诸如支持不同的门集、考虑量子位的物理连通性以及生成不同大小的电路等特性。本系列中的所有实验都是在这个环境下完成的。

我们认为这些结果鼓励了寻找圣杯,最佳量子电路构造的持续努力。在我们的追求中,我们发现奖励函数(当前和目标状态之间距离的可靠度量)是应用机器学习来确定有效量子电路的关键因素。成本函数的后续改进将显著提高我们代理的性能。

我们目前正在探索的一些令人兴奋的相关途径包括将这种强化学习方法扩展到连续控制空间——塑造用于在电路中实现量子门的脉冲。敬请期待!

我们能相信 AutoML 会完全自动驾驶吗?

原文:https://towardsdatascience.com/can-we-trust-automl-to-go-on-full-autopilot-ab76dc061833?source=collection_archive---------21-----------------------

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

AutoML 的承诺

数据科学家短缺,自动机器学习(AutoML)有望缓解这一问题。 H2O 无人驾驶人工智能在一个易于使用的应用程序中采用专家数据科学家的技术,帮助扩展您的数据科学工作。它让“每个人都能开发可信的机器学习模型”。

实验

一名首席数据科学家和四名经验不同的哥伦比亚大学学生在预测股票价格走势的真实问题上测试了这项技术(这是一项具有挑战性的任务!).

这些数据是罗素 1000 指数中 5 年的股票的月度数据。这些特征是 80 个股票特有的因素,如价格动量、市净率、每股收益增长率、净资产收益率。目标是 12 个月的远期股票回报(具体来说是经过 beta 调整的 alpha)。目标是使用股票特征预测股票收益。成功的衡量标准是平均绝对误差和预测与实际回报之间的等级相关性。

该数据的特点是,它是面板数据,其中某一天的观测值之间有很高的截面相关性。此外,由于输入数据是每月提供的,而目标回报是 12 个月以后的,因此 11/12 个月在两次后续观察之间是相同的,所以时间上有很高的自相关性。

原始基线

在评估一个模型之前,你需要有一个天真的基线,正如在数据科学家犯的十大统计错误中所讨论的。第一条基线预测所有观测的回报率为 0,接近中值,这意味着没有办法预测回报率。第二条基线是对所有特性进行排名并取平均值,这意味着所有特性在预测回报时同等重要(这不会生成回报预测,但您仍然可以比较输入和输出排名)。最后一个基线是一个月前的回报-鉴于数据集的性质,这包括前瞻性信息,是评估任何过度训练和前瞻性偏差的良好基线。

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

Success Metrics for Naive Baselinemodel

第一个障碍—技术设置

在我们开始建模之前,第一个障碍是让每个人都与戴建立联系。H2O 建议在配有 GPU、CUDA 支持和 64GB RAM 的现代数据中心硬件上安装无人驾驶 AI。我们按照说明,用推荐的设置在谷歌云平台上安装了软件。

结果:我们在不到一周的时间里就花光了 200 美元的 GCP 积分!我们很快意识到不需要如此高的计算能力,因为我们的数据集只有 1GB 大小。我们在一台规格小得多的 GCP 机器上安装了无人驾驶 AI,它也可以在一台只有 8GB RAM 的本地笔记本电脑上工作。总的来说,安装无人驾驶人工智能需要一定的技术专长,不是团队中的每个人都具备。

第二个障碍—数据预处理

下一个障碍是为分析准备好数据,AutoML 对此没有帮助。我们必须预处理和组合来自多个数据源的数据,这是一项巨大的工作。我们使用了数据工作流库 d6tflow 和数据共享库 d6tpipe 来自数据科学家犯下的十大编码错误来帮助我们完成预建模步骤。

结果:预处理 d6tflow DAG 如下图所示。它采用来自彭博的股票回报数据和来自 WRDS 的股票因素数据,合并、清理和规范化这两个数据源,以使其适合于 DAI 中的机器学习,DAI 要求将干净的数据都放在一个地方。

└─--[TaskFactorComposite-{'idx': 'RIY Index', 'dt_start': '2011-01-01', 'dt_end': '2018-09-01'} (PENDING)]
   └─--[TaskFactorsIdx-{'idx': 'RIY Index', 'dt_start': '2011-01-01', 'dt_end': '2018-09-01'} (PENDING)]
      └─--[TaskFwdRtn-{'idx': 'RIY Index', 'dt_start': '2011-01-01', 'dt_end': '2018-09-01'} (PENDING)]
         └─--[TaskBbgHistory-{'idx': 'RIY Index', 'dt_start': '2011-01-01', 'dt_end': '2018-09-01'} (PENDING)]
            └─--[TaskBbgMembers-{'idx': 'RAY Index'} (PENDING)]

全自动运行——好得难以置信?

在我们实验的开始,我们直接使用无人驾驶人工智能界面,上传数据集,选择目标变量,调整性能和可解释性等旋钮。我们必须说,用户界面很整洁,有点像托尼·斯塔克的贾维斯。虽然所有数据科学新手都在努力选择正确的设置,但至少具有中级数据科学知识的团队成员很容易知道该做什么。

一旦发射按钮被按下,正如它的名字一样,训练就是无人驾驶的。我们观察了这个过程,因为它产生了数百个模型,创建了数千个新功能,并最终创建了一个整洁的实验结果 PDF 报告。

结果 : MAE 为 4%,相关性为 96%。哇!机器真的比人强,把天真的模型打得落花流水。但它甚至用前瞻偏差击败了天真的模型——可疑!

手动添加真实测试集

根据数据科学家在十大统计错误中对面板数据的样本外测试建议,我们建立了自己的训练/验证/测试集。戴似乎没有任何功能来做到这一点,所以我们必须手动完成。我们按时间划分数据,还做了前滚测试。做这件事的技能栏已经上升到中级。

结果 : MAE 为 6%,相关性为 90%。仍然比带有前瞻性偏见的天真模型高得多——再次令人怀疑!

这东西到底有什么用??

在这一点上,我们不太确定是什么推动了这种非凡的表现,很明显,它好得令人难以置信。我们得到了一份包含所有技术细节和图像的报告。但是它是怎么建立模型的呢?关着的窗帘后面发生了什么?很难理解它尝试了什么。它设计了哪些参数和功能?有哪些后来被放弃的功能?不仅新手迷路了,专业人士也迷路了。

通过仔细分析输出,我们找出了问题所在:戴自动添加滞后变量和出叠平均值。鉴于我们的数据集的性质,它是具有重叠目标变量的面板数据,这些特征导致了前瞻偏差和显著夸大的结果。

下图更详细地说明了这个问题。假设只有两只股票:A 和 b。我们希望从每月更新的输入数据中预测年回报率。在训练中,由于大量重叠,很容易从 A1 预测 A2。但是在运行模型时,我们没有相同的输入数据,如 A13 和 A14 所示。所以我们在训练中必须小心先前的观察。此外,如果 B 与 A 高度相关,则很容易预测,但同样,当模型在生产中运行时,该数据不可用,因此异常的“测试”性能不会持续。这些问题也让人类数据科学家感到困惑,详见数据科学家犯的十大统计错误,参见#7+8。

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

Panel data with overlapping time periods

完全手动操作以避免前瞻偏差

我们不得不深入研究 DAI 文档,并使用 DAI python 客户端关闭这些功能,并手动运行每个实验来执行非重叠时段的前滚分析。经过相当多的努力,我们使用针对 DAI 优化的 d6tflow 构建了一个完全自动化的机器学习工作流。做这件事的技能栏现在是在职业。

结果 : MAE 为 23%,等级相关度为 4%。合理多了!而且还是打零技能和等重模式。

结论

首先,戴声称它没有超装,但它确实超装了!无人驾驶人工智能展示了夸大的测试性能,这是我们在生产中实时运行模型永远无法实现的。这是一个案例研究,AutoML 系统可能会给出过于乐观的结果——样本没有经过仔细分析。这可能是由于我们的数据集的独特性质,但如果它发生在我们身上,它也可能发生在其他人身上。因此,理解数据的特征、预测的类型和有效的样本外测试至关重要。

第二,整个数据管道涉及的不仅仅是 AutoML 模型训练。我们需要准备数据,生成测试数据集,通过 python 手动控制 DAI,并提取输出以与原始模型进行比较。我们仍然需要知道如何使用 pandas、d6tpipe、d6tflow 和 DAI python 来运行完整的 ML 管道。

第三,尽管终极模型是透明的,但戴生成了什么特征以及它如何训练模型仍然不清楚,因此新手很难自信地解释方法和输出。

总之,像 H2O 无人驾驶这样的 AutoML 系统仍然需要一个受过教育的数据科学家来使用、控制、解释和解释机器学习系统。我们把它比作驾驶飞机:仅仅因为飞机有自动驾驶仪,这并不意味着任何奇怪的乘客都能够安全地操作飞机,并在没有经过足够培训的情况下将 200 条生命的信任交到他们手中。

我们可以使用机器学习来生成文本冒险故事吗?

原文:https://towardsdatascience.com/can-we-use-machine-learning-to-generate-text-adventure-stories-f44dcc8171b8?source=collection_archive---------18-----------------------

训练神经网络为我未完成的文本冒险游戏生成背景故事的探索。

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

A terminal from the first level of Bungie’s Marathon.

挑战

去年,我开始为一个名为 Ludum Dare 的 48 小时游戏堵塞制作一个小文本冒险游戏。我一年参加几次,甚至还做过一次主题演讲。虽然我能够在一天之内构建一个简单的文本冒险游戏引擎,但在创建内容使其变得有趣时,我开始失去动力。

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

My unfinished Ludum Dare text adventure game “Terminal” built with Pixel Vision 8.

快进 6 个月,再加上转向机器学习的职业生涯,我开始有兴趣看看我是否可以训练一个神经网络来为我未完成的文本冒险游戏生成背景故事。我的目标是用一个变得无赖的人工智能的叙述来帮助增加随机生成的房间描述。我以我最喜欢的 90 年代第一人称射击游戏之一马拉松为基础设计了这个游戏。

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

Marathon 2 screenshot.

马拉松是 Bungie 在发行《光环》和《命运》之前创作的。在马拉松比赛中,有三个人工智能,主要的一个,杜兰达尔,变得“猖狂”,这是一个疯狂的花哨术语。不同于当时类似的 FPS 游戏,如《毁灭战士》,《马拉松》有一个丰富的故事,你可以通过分散在各个关卡的终端阅读。这些终端不仅能指导你完成任务,还能随着你在游戏中的进展加深剧情。

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

Marathon terminal via MarathonWiki.

现在有许多神经网络的伟大例子被训练来创建基于文本的内容,如歌词莎士比亚诗歌等等。由于 Marathon 在其三个游戏的终端中包含了如此多的文本,我认为使用一个名为 textgenrnn 的开源项目,在我用来自动化我的深度学习工作流的一些工具的帮助下,看看我可以创建什么,将是一个很好的候选人。另外,由于游戏中的人工智能变得疯狂,我希望即使生成的文本没有意义,它仍然符合我正在创建的文本冒险游戏的主题。

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

An example of garbled text from a crazy AI.

以下是我的实验记录、结果,以及如何从我的 git repo here 独立运行项目的说明。

创建数据集

L 凑巧,马拉松的故事在网上有据可查这里。如果你以前没玩过这款游戏,值得一试。你可以在这里运行一个更现代的版本,叫做Alpha One。考虑到这一点,为了训练 textgenrnn 模型,我必须从头开始创建数据集。没有一种简单的方法来自动化这一点,所以我检查了网站上所有的游戏终端,并手动将它们复制到一个文本文件中。

你可以用少量的文本来训练 textgenrnn,但是你给它的文本越多,它应该学得越好。我尝试了几种不同的游戏文本格式,但最终,我不得不手工删除对训练有负面影响的文本块。

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

Example of a bad text block that could impact the training.

即使像这样的终端文本,看起来像随机放置在一起的字符,实际上包含了一个故事。在当前的格式中,文本会脱离训练,因为我们要分析需要空格的单个单词。最后,为了创建一个更干净的数据集,我决定跳过这类文本块。因为这相当耗时,所以我最终使用了第一个游戏的故事。这里有一个链接指向我在 git 项目中学习过的源文件。

设置项目

我开始从 GitHub 克隆 textgenrnn,并在 PyCharm 中打开它。打开项目后,我创建了一个新的 Python 解释器,并安装了 setup.py 脚本中定义的需求。您还需要安装不在依赖项列表中的 Tensorflow。我最后用下面的代码创建了一个新的 requirements.txt :

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

A list of requirements needed to run the project.

该项目有很好的文档记录,并附有一些示例,但我选择删除它们,并从一个干净的项目文件夹开始。我删除了数据集、输出和权重文件夹中的所有内容,因为我将使用新数据集生成这些内容。然后我删除了 setup.py 文件,因为我不再需要它了。

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

The new project folder after cleaning it up.

剩下唯一要做的事情是将我的新马拉松终端文本数据集添加到适当的文件夹中,并开始创建脚本来运行培训。在这样做之前,我需要创建一个配置文件,可以在我的培训和文本生成脚本之间共享。为此,我使用以下代码在项目的根目录下创建了一个 config.py 脚本:

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

I stored all the configuration values in their own script file.

虽然您可以通过直接传递这些值来训练模型或生成文本,但我发现将这些值保持在外部会有所帮助,这样我就可以在训练时更容易地调整它。新的配置文件准备好了,是时候创建我需要用来训练和生成文本的脚本了。

由于所有的配置值都在它们自己的文件中,我能够创建一个简单的 train.py 脚本来运行实际的训练。下面是代码的样子:

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

This is the code I’m using to train the model.

在高层次上,我创建了一个新的 textgenrnn 实例,设置了到输出文件夹的路径,最后调用 train 函数并提供它需要的参数。此时,您可以运行脚本并从终端窗口监视一些早期输出:

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

Running through the first round of training.

在第 10 个纪元左右,文本变得更好,但我们不会看到实际的结果,直到我们从输出文件夹中的训练模型生成更多的大量文本。

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

After training the model and it’s files are saved to the outputs folder.

为了生成更多的文本,我用下面的代码创建了一个 generate.py 脚本:

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

This code allows me to generate out text using the trained model.

正如您所看到的,我通过向它提供在训练期间创建的三个文件来设置 textgenrnn:weights、vocab 和 config。从那里,我们告诉 textgenrnn 使用一组温度值、步数和生成文本的最大长度创建一个新文件。运行该脚本后,它会在 outputs 文件夹中用生成的文本生成一个新的文本文件:

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

A sample of text generated from the model.

现在我已经具备了开始训练和验证生成文本质量所需的一切。让我们看看它产生了什么。

生成的文本结果

在这一点上,相对容易看到我们可以期待什么样的结果。这是我开始试验的几个样品。

1 个时代,RNN 大小为 128 和 2 个 RNN 层产生了以下内容:

vacuum
-with
you
* *
incoming **
-
<
transfer
,
strength
gives
area of
a
- ,
to
*
public
.oppressive *
~
<
* * * * * * * * jump * * * * * * * * * * * pad * * *
durandal
message
*

起初,它没有创造任何有趣的东西。我以为只有一个纪元。

以下是当我使用与上面相同的设置将训练增加到 10 个时期时发生的情况:

* * * incoming message from * * ** * * incoming message * * *< 39 - < 46 . . . 299 >* * * end of message * * * *
he , , and crist the from closing his , and closing five was the of arms . on the discarding elevators century
* * * end when message * * * *
< security breached - excerpts >f terminal . . 17 . . . 198 >* * * end of message * * *
< security breached - - < 33 . 12 . . . 128 >
for the the of may fourth* * * end message * * *
teleport whenit is is is is . . . i am am able that to to to my sensory eyes the you you you your your a " see philosophical may your your a21h . . . . " . . 223 >

事情开始变得有点有趣了。该模型可以生成完整的句子,它了解到消息通常以某种形式的“传入/结束消息”开始和结束,它可以创建一些与特定类型的终端消息相关联的虚假 IP 地址。它也很擅长用引号来开始和结束一段文字,但是这段文字没有太多意义。

最后,我想看看更多的纪元是否会有帮助,所以我将数字增加到 40,并保持相同的设置作为基线。下面是它生成的内容:

you have not completed your mission . you may be be not the such here . but i ' ll want to to to friend . if you must into the this to of transmission it would be be a fighter day . . . fighter . held symbolic significance for the . the time that time that had
martian skies
however , due to to the marathon ' s teleporters . .< unauthorized access - alarm 2521 - >
be careful . everything not not not as to , and or , and nearly active to your your maintenance maintenance . .
the pfhor seem to have enslaved a number of other races : : races as of have they been been been been off by compilers for for and alien .the invaders seem to to be interested in the marathon . gheritt s something something one as from about he ' s ' s ' pht , . even hard . . to the was was . rat the the the the the crist shuttle . has , and and at the just than the the after the the

现在,我们开始获得完整的句子,这似乎在段落中更有意义。当然,挑战在于,在这一点上,我正在试图理解哪些价值观有助于训练更好的模型。不幸的是,在我开始找到我觉得能产生更好结果的值之前,有很多尝试和错误。

为了帮助监控培训,我想在项目中添加 MissingLink.ai 的 SDK 来监控我的实验。坦白地说,我为 Missinglink 工作,由于我对完成我的文本冒险游戏有既得利益,我开始对如何在培训期间优化模型感兴趣,以确定哪些价值观产生了影响。

因此,我创建了一个新的 missinglink 分支,并在项目的 textgenrnn.py 脚本中添加了几行代码,首先是导入 SDK,配置项目以运行实验,并定义 Keras 回调:

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

Importing the MissingLink SDK and creating a Keras callback.

此外,我需要将新的回调提供给 model_t.fit_generator() 方法:

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

Adding the MissingLink callback.

通过这些修改,我现在可以在 MissingLink 仪表板上运行实验并监控结果。在进入下一轮训练之前,我以我在 40 个时期的最后一次实验作为基线。

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

Monitoring the loss during training over 40 epochs.

在尝试了一些不同的设置后,我最终选定了 4 个 RNN 层,双向设置为真,100 个纪元。我还将列车尺寸增加到 0.9,产生了以下损失:

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

Monitoring the loss during training over 100 epochs.

一旦我对改进的模型感到满意,我就能够生成更好的文本。让我们来看看最后的结果。

最终结果

经过大量的实验,我能够写出一些感觉足够连贯的文本块,就像一个疯狂的人工智能的漫谈。

例子 A:来自马拉松

Gheritt had a good life, so much time, so much time. He had loved swimming, turning, beating. He had loved the tingle in his hands and feet, his inability to kill his nemesis. Once he had fallen down the stairs, and just for a moment, his hands came to rest on the carpet of the stairs. In that instant, his body had frozen, floating over the stairs, safe from falling, but the moment didn’t last. The ocean crashed about him, his hands torn free from the sandy bottom, his body flipping, falling.

示例 B:已生成

gheritt had a good life , so much on that will be killed . i saw the make one in a wicked computer — and we must don ‘ t remember them any time you .
i have received a preliminary report from some members of them . the only computer system . “ it was quite simple . “ a white thought syndrome suffering if the uesc ‘ s ‘ pht even stopped their efforts .

我很惊讶这是多么接近。我认为,随着更多的数据,编辑语法,并智能集成到游戏中,这可能是一个可行的解决方案来生成一些背景故事内容。目标是将随机生成的文本、神经网络生成的文本和手写文本融合成更加无缝的体验。考虑到这一点,我计划将它集成到游戏中,并与概述目标的更多面向任务的文本混合,类似于原始游戏中马拉松终端的工作方式。

我得说这个小实验是成功的。我需要多花一点时间来建立一个更好的数据集,包括马拉松 2 和 3 的终端。我也想看看我是否能最终从模型中得到一个连贯的故事。在配置文件和数据集之间仍然有调整要做。然而,即使在这些早期实验之后,我认为结果是有希望的。最后,值得一提的是,textgenrnn 是一个老项目。在文本生成方面已经有了更多的进步,比如 OpenAI 的 GPT-2。我可以看到自己继续尝试训练一个神经网络来为我更多的程序生成游戏生成文本。

如果你想更多地了解这个项目和我在 MissingLink.ai 的工作,欢迎在下面发表评论,或者在 Twitter 上关注我,给我发消息。

我们可以使用社交媒体来定位合法的停电吗?

原文:https://towardsdatascience.com/can-we-use-social-media-to-locate-legitimate-power-outages-7b7409708447?source=collection_archive---------17-----------------------

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

基于余弦相似度的自然语言处理推文分类初探。

我们都知道停电会给我们的生活带来多大的破坏性。停电不仅每年影响我国数百万人,根据停电跟踪者的年度报告,每年还会损失数十亿美元的收入。正因为如此,我们需要更好的机制来跟踪它们,以便在它们发生时能够快速处理。

电力公司的停电管理系统已经推出了新的智能电网技术,以补充检测和报告停电的传统方法。然而,新技术要到 2030 年才能完全推广。

虽然这项新技术已经推出,但还需要额外的努力来帮助识别和报告停电情况。我们中的一个团队决定看看我们是否可以建立一个工具来提供帮助。我们想看看我们是否可以使用社交媒体来正确识别停电。

数据收集

我们的方法是首先决定从哪些社交媒体平台中选择。我们发现 Twitter 是最可行的平台,就我们可以访问的数据和在平台上分享新闻的速度而言。我们使用 TwitterScraper 搜索基于位置的目标关键词,收集了 12 个城市 5 年的数据。虽然我们更愿意在这里使用 Twitter 的 API,因为它包括地理位置,但它只提供一个月的历史数据。

为了选择我们的关键词,我们花时间深入了解人们如何在网上谈论权力。我们探索了能源公司和消费者在网上发布停电信息时的词汇差异,确保注意潜在的错误分类(例如:停电是视频游戏,而电力是电视节目)。

为了缩小地区范围,我们选择了美国十大人口最多的城市,但是我们不得不稍微调整一下。纽约市的噪音很大,我们不想用它来训练我们的模型。所以我们把那个城市从我们的列表中删除,加入了人口第十一多的城市,奥斯汀。我们还决定包括底特律和哥伦布,因为根据停电跟踪报告,密歇根州和俄亥俄州的年停电率排名很高。

通过查看我们提取的推文,我们假设天气是停电的最大影响因素。我们使用 NOAA API 包装器按日期提取我们选择的城市的历史天气数据。不是所有的气象站都收集相同的数据,所以我们把重点放在所有州一致收集的数据上,高温、低温和降水。我们根据温度和降雨量的范围将这些数字转换成文字,以便能够将这些文字添加到我们的推文中。我们知道我们想要使用自然语言处理,并且需要单词而不是数字来做到这一点。

探索性数据分析

一旦我们有了一个完整的数据集,我们想检查我们收集的数据告诉我们什么样的故事。为了做到这一点,我们观察了单词的频率。我们删除了常用的停用词,包括提及 Twitter、Instagram 和任何与 url 相关的内容,因为这些都妨碍了我们了解数据告诉我们的真实情况。

在下面的图表中,你会在左边看到前 10 个单字术语,而在右边你会看到多字术语。我们两个都看了,因为它以这种方式讲述了一个更完整的故事。我们并不惊讶地看到“电源”、“断电”和“没有”出现了很多,因为这些都符合我们的目标网络抓取关键字。但是深入挖掘,我们还可以看到,我们引入了许多我们认为是两种类型的信息,客户投诉和能源公司报告客户断电。

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

Frequency of Words in our Tweet Dataset

我们还发现有趣的是,底特律突然出现在那里,因为密歇根州是每年停电次数最多的州之一。此外,请注意,“互联网中断”在这里显示得很高,这不是停电。它的外观有助于我们识别一个错误分类类型,当我们继续我们的模型时,我们一直记在心里。

造型

基于我们在回顾数据时所学到的东西,我们开始为建模准备文本,将所有单词小写,并删除标点符号和停用词。我们还在标记化之前删除了完整的 url 字符串,以确保我们捕获了所有的 url 片段,尤其是链接缩写。

对于建模,我们选择使用 Word2Vec,因为它关注单词之间的关系,并为该值赋予权重。它将单词选择的上下文带入到游戏中,这将让我们更好地理解在推特上谈论停电时使用的一组单词。

虽然机器理解高维空间没有问题,但在使用 Word2Vec 之后,我们需要使用 t-SNE 模型将其转换回二维空间,以便检查和理解它。然后,我们使用余弦相似度将我们的词与目标关键词列表进行比较,以帮助确定该词是否与合法的停电有关。余弦相似性得分结果被手动检查以发现错误分类并调整我们的模型。

下图显示了 t-SNE 图,我们在图中选择了“龙卷风”这个词。蓝色的点代表与停电有关的单词,而灰色的点则与不合法的停电有关。圆点的大小也显示了它的余弦相似性得分有多高。点越大,分数越大,意味着与其分类的关系越强。这个剧情的交互 html 文件可以在 Github 上下载

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

评价

为了评估我们模型的性能,我们必须手动确认它是否被正确分类。理想情况下,我们应该能够浏览所有的推文来证实这一点,但我们没有时间了。我们查看了 1000 条推文,发现了 6 个错误分类。我们需要进行更多的审查,以确认这是否是错误分类的数量或异常情况。从那里我们需要微调模型以减少错误分类。

当我们开始这个过程时,我们认为天气在停电中起了很大的作用,事实也确实如此。然而,我们也发现“蛇”这个词与标记合法断电的高相关。这就是我们如何得知蛇可以爬进变压器并导致停电。如果你对其他导致停电的怪事感兴趣,你应该看看停电跟踪者的年度报告。这是一个有趣的兔子洞。确实如此。

映射

因为我们必须使用一个刮刀来收集 Twitter 数据,所以我们无法提取比城市更详细的位置。把它标在地图上意味着我们会有很多点重叠在一起,这并不理想。但是,我们认为按时间绘制我们选择的城市的停机时间会很有趣。下图显示了一个高亮显示的城市,底特律。你可以看到,根据我们搜集的数据,在 2014 年 1 月,有 24 条与停电有关的推文。这张地图的交互 html 文件可以在 Github 上下载

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

结论和后续步骤

总之,我们能够成功地创建一个原型,可以将一条推文归类为合法的停电。但是,在推广它以分类更多数据之前,需要解决它的一些限制。因为我们不得不使用 Twitter scraper,而不是 Twitter 的 API,所以我们的位置数据并不尽如人意。即使我们可以使用 API,也不是所有用户出于隐私考虑都会在他们的 Twitter 个人资料上列出位置数据。此外,准确性评估过程是一个手动过程,在全国范围内推广将需要资源和时间进行审查。

然而,基于实时数据,我们确实看到了更广泛推广的巨大可能性。如果我们有更多的时间,我们会采取并建议考虑以下步骤:

  1. 在实时数据上测试该模型:来自 Twitter 的 API 的推文和来自 Dark Sky 的 API 的天气数据。
  2. 使用 K-means 聚类对停电调查结果进行分组,以便能够更好地确认整个区域停电。按地区和天气划分星团也很有意思。我们只使用了我们所有选择的城市一致可用的天气选项,但在这里查看其他选项(例如:风速)的更多细节将是有益的。
  3. 探索除了 t-SNE 之外的其他维度/数据缩减方法,例如在数据预处理之前使用主成分分析。

该项目的完整代码可在 GitHub 上获得。干杯!

你能根据主客场记录准确预测 MLB 的比赛吗?

原文:https://towardsdatascience.com/can-you-accurately-predict-mlb-games-based-on-home-and-away-records-8a9a919bad29?source=collection_archive---------18-----------------------

拿出工资单,击球率,自责分率,以及任何你能想到的其他数据。让我们用一分钟的老方法:赢和输。

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

假设你是一个职业体育赌徒,在九月的一天观看两个队的比赛,海怪队对铁坦克队。海怪的胜率是 87–63(. 580%胜率),而坦克的胜率是 40–90(. 267%胜率)。理论上,你似乎会把钱押在海怪身上,让它们碾过坦克,但这里面有一个陷阱。铁坦克以 37–3(. 940 胜率)的主场战绩在主场战无不胜,海怪以 20–40(. 333 胜率)的战绩在客场苦苦挣扎。如果你把钱押在海怪身上,因为你相信他们是整体上更好的团队,你的赌注有多大风险?

这个问题的答案可以用贝叶斯定理。贝叶斯定理用于计算条件概率,这意味着在你知道一些潜在信息的情况下,试图预测一个事件*。*在这个例子中,你可以对比赛结果做出更明智的决定,因为你知道每个队赢得比赛的总体可能性以及比赛的地点。在这篇文章中,我解决了这些问题:

  1. 使用过去 4 年的 MLB 数据,使用贝叶斯定理可以做出多精确的预测
  2. 在这个季节,你可以确定有足够的信息来保证预测的准确性。
  3. 有没有一种方法来对冲哪些应该下注,哪些不应该下注?
  4. 与其他机器学习算法相比如何?

和往常一样,你可以在这里查看我的代码:【https://github.com/anchorP34/Bayesian-Baseball-Results

你可以在这里查看我的公共仪表盘:【https://public.tableau.com/profile/payton.soicher#! /viz home/MLBBayesianAnalysis/story 1

贝叶斯定理

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

为了快速回顾贝叶斯定理是如何计算的,你可以看看左边的公式。在这种情况下,我们可以将 P(A|B)改为 P(W|H ),这将意味着赢得比赛的概率,因为我们知道球队在主场。然后我们也可以用 P(W|A)作为球队客场比赛获胜的概率。现在,让我们插入海怪和铁坦克的信息:

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

P(W) = Probability of Winning, P(L) = Probability of Losing, P(W|H) = Probability of Winning given the team is at home, P(W|A) = Probability of Winning given the team is away

从这个分析我们可以看出,铁坦克在主场给定战绩有 85.26%的胜算,海怪在客场给定战绩有 40.81%的胜算。由于这两个概率并不 100%匹配,我们可以将它们加在一起,并找到它们在整体匹配中的份额。

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

Taking the partial winning percentages of both teams can give us a better head to head matchup prediction

我们可以看到,对于这场比赛,即使铁坦克的战绩比海怪差很多,但他们有 67.63%的贝叶斯概率赢得对决。作为职业体育赌徒,你可以利用这些信息,对照游戏的金钱线进行检查,并确定如果你正确预测结果,以 35%的价差(67.63%-32.37% = 35.26%)押注这场游戏的风险是否值得。

美国职业棒球大联盟案例研究

由于每场比赛都可以参考整体战绩,再加上球队主客场表现的记录,你可以认为随着一个赛季的进行,预测的准确性的结果应该会随着时间变好。使用每个团队的最终获胜百分比,我们可以看到我们预测哪个团队会获胜,以及预测结果是否正确。首先,让我们看看随着时间的推移,精确度是否会收敛到特定的结果:

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

The rolling average of the accuracy of Bayesian probabilities vs time of a MLB season

我对这张图表的最初反应并不是我想象中的样子。我假设准确性的方差在赛季开始时很大,在赛季结束时很小,这是正确的,因为赛季开始时有很多关于球队的未知信息,但赛季结束时应该有很多信息,不会在重要的方向上移动准确性。然而,我认为有了额外的信息,随着时间的推移,预测会变得更好,但事实似乎并非如此。从 5 月到 10 月,预测没有低于 50%,也没有达到 60%,只是在 55%左右徘徊。

虽然它没有惊人的准确性,但全年所有游戏中大约 55%的正确率已经很不错了!这比盲目抛硬币来决定结果要好,但下一个问题应该是在赢和输之间,预测有多糟糕

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

Difference in Probabilities (Home Winning % — Away Winning %) and the outcome (Dark Blue is correct prediction, light blue is incorrect prediction)

这是我认为分析最有趣的地方。看一下主队的胜率%与客场胜率%的差异,贝叶斯概率并不是由于赢时的小失误和输时的大失误,它们大致在两者之间。例如,如果你错误预测了很多比赛,如果两队之间的胜率低于 10% (55%比 45%),那么这是可以理解的。但是,如果模型错误地选择了胜率差异很大的游戏(85%比 15%),那就不是一件好事。从图中可以看出,无论预测结果如何,成功和失败的概率分布大致相同。

这是我们看待这个问题的另一种方式。这是正确和错误预测概率分布的盒须图。在理想情况下,正确的预测将具有大的分布,而不正确的分类将具有小的分布。这第一个情节显示在季节的早期。你可以看到很多游戏有巨大的传播差距,有些分类错误,有些分类正确。

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

Spread Probabilities Box and Whisker Plots of False and True Predictions

然而,如果我们看看 9 月份的比赛,正确和错误预测之间的差距并没有明显的不同,仍然有一些非常糟糕的预测(看看 2018 年的错误预测)。

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

捆绑机器学习

大多数人在这一点上可能会想“好吧,佩顿,这很有趣,但我很确定机器学习算法会比你的贝叶斯计算好得多。嗯……让我们看看他们是如何搭配的。

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

Default models for Random Forest, Logistic Regression, K Nearest Neighbors, and Support Vector Machine classifiers

提醒一下,我们的贝叶斯模型每年的准确率为 55%,没有一个测试准确率的机器学习模型达到那个水平。当**我在模型中使用贝叶斯结果时,这更相关!**即使有一些成功的模型输出的额外帮助,它似乎也没有帮助。我使用测试精度,因为这相当于查看新的预测数据。机器学习模型往往在训练集上表现得更好,因为它可以尽可能接近这些数据点,但在新数据上,它往往不会那么成功。尽管逻辑回归的训练精度最差,但它的测试精度最好,这是有道理的。这个数据集没有任何太深入的东西来做出这些机器学习模型将在哪里蓬勃发展的质量预测,所以简单的贝叶斯模型可能会胜过机器学习模型。

结论

贝叶斯统计可以在进行预测时占上风,但在这样做时应该谨慎。正如我们看到的全年预测的准确性,从 5 月到今年剩余时间,您可以预计大约 55%的预测是正确的,从体育博彩的角度来看,这是一个非常好的长期使用案例。然而,相对于较小的价差,不应该增加对较大价差的押注,因为正确和错误预测的价差金额的方差大致具有相同的分布。

这种分析逻辑可以用于所有类型的运动。由于主客场比赛的样本量如此之小,足球将很难做,但曲棍球和篮球都有足够多的比赛来做出有用的预测。

最后一点是,当你使用像输赢这样简单的数据时,像贝叶斯预测模型这样的简单模型可能是比更复杂的机器学习模型更聪明的选择。机器学习模型在大量数据以及对结果有重大影响的深度数据点上茁壮成长。如果你有一个数据集,它有更多的数据点(谁是投手,天气,连胜,头对头的历史,等等),机器学习模型可能会优于贝叶斯模型。但是,如果你想出一些简单的方法,并且会得到正确的预测多于错误的预测,那么像贝叶斯定理这样的模型是一个很好的选择。

没有量化学位能成为数据科学家吗?

原文:https://towardsdatascience.com/can-you-become-a-data-scientist-without-a-quantitative-degree-8046e254fa48?source=collection_archive---------5-----------------------

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

Yenthoroto village, Western Province, Papua New Guinea

一个故事和一些见解

我想在这篇文章的开头说,我无意利用这个空间来最小化定量学位在大多数数据科学家的工作和成功中的作用,也不是我的目标是“过度鼓励”(或阻止)任何没有坚实的定量背景但对以数据科学为职业有着浓厚兴趣的人。作为一名来自有人所说的“非正统”背景的数据科学家(我拥有理论语言学博士学位),我觉得自己有资格为那些可能发现自己既被进入一个行业的想法所诱惑又被这种想法所吓倒的人提供一些有用的、潜在可行的见解,这个行业的工作岗位主要提到如下学历:

你的学术背景是在一个定量领域,如计算机科学、计算语言学、数学/统计学、工程学、经济学或物理学。高级学位优先。

相关技术领域(计算机科学、统计学、应用数学、计量经济学、运筹学)的学士、硕士或博士学位。

高度量化领域(CS、机器学习、数学、统计学)获得学士或硕士学位或同等经验。

你应该在定量领域有广泛的背景。

获得计算机科学、经济学、统计学、物理学或相关领域的研究生学位。

如果你没有这些“高度量化”领域中的一个学位,你是否会立即被取消数据科学家职位的考虑资格?我认为答案是一个令人不满意的“视情况而定”但如果有所帮助的话,我自己的数据科学之路始于任何这些“定量”学术领域的承诺和保证。事实上,当我第一次接触到我很久以后才能够称之为第一次接触“大数据”的东西时,我离任何现代技术都有数千英里远,更不用说花哨的定量分析工具了。

首先,我想分享一个故事。这是一篇独一无二的文章,旨在阐述一位数据科学家的旅程,而不是指导或概括——这部分在故事之后。

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

Landing on the village airstrip

当我被巴布亚新几内亚南部低地一个遥远的森林村庄的巨大魅力和神秘所吸引时,我是一名三年级的语言学研究生,这里是世界上最丰富的语言多样性的家园,数百种未记录在案或研究不足的语言——有些濒临灭绝——对世界各地的语言学家、人类学家和语言活动家有着不可抗拒的吸引力。在一年多的时间里,我花了几个月的时间在新几内亚丛林中用手持电池供电的录音机收集人类讲话的录音,捕捉这种鲜为人知的语言的歌曲、故事和动词范式,其迷人的形态句法属性和过程后来成为我论文的基础。

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

My escorts wading the knee-deep water after a flood

到我最后一次去那个村庄的时候,我已经有了将近 20 GB 的数字录音,由于只完成了最少的野外方法课程,并且之前没有接受过语言数据管理方面的重要培训,我有时会努力保护我的数据和设备免受低地雨季的洪水袭击,并且在将它们存档到太平洋濒危语言数字档案馆之前,只能勉强成功地用手转录一小部分录音。(如果你是一个领域语言学家,你的下巴掉了下来,我后来使用了半自动转录和数据管理工具,如 ELAN 和 Toolbox,但老实说,我发现它们太笨重,效率太低,无法与它们建立长期的关系。)

事后看来,我觉得我对这种性质的工作准备不足,但我经历的挑战和困难给了我很多教训,并让我深刻反思我所在领域的方法和途径(下文将详细介绍)。不言而喻,这是我一生中最具形成性、最显著、最丰富的经历之一,回顾这段经历,我既自豪又遗憾(或许改天再讲)。

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

Ruth and her baby

语言学中数据收集的挑战

幸运的是,我没有感觉到我的理论工作受到处理大量非结构化数据的挑战和限制的太多阻碍——这是我第一次接触“大数据”,除了在非常小的范围内(即千兆字节而不是兆兆字节)。这主要是因为我已经将我论文的范围定义得足够狭窄,围绕着几个重要的语言现象,这些现象恰好符合我当时非常熟悉的类型学文献。因此,我只需要少量的数据——我所收集的一小部分——来发展我的论文,让我和我的论文委员会满意。

与此同时,作为一个使用一种从未被如此少的人描述和使用过的语言的人,我感到被传统的语言学方法论严重束缚,这种方法论本质上是内省的。也就是说,为了构建语言理论,在生成语法框架内工作的语言学家通常依靠母语人士对语言形式和表达的意义和结构的直觉(也称为“语法判断”)。(这与实验语言学相反,实验语言学是语言学的一个分支,它使用定量方法来评估语言学理论,因此与认知心理学和神经科学等领域有联系。)

与此同时,作为一个研究从未被如此少的人描述和使用过的语言的人,我感到被理论语言学的传统方法严重束缚,这些方法本质上是内省的。

语言内省中,说本族语的人(通常是语言学家本人)有意识地将注意力引向“在他的认知中表现出来的”语言的特定方面。所以基本上,你需要的所有数据都在你的脑子里。您不需要从文件中“读取”数据,也不需要注释成千上万的句子来创建训练集。

一个典型的语言学家的数据集可能包括几对句子,这些句子对目标语言属性的对比最小。例如,如果我们假设以下示例中的 wh 短语( what )已经从其基本位置(由下划线指示)发生了句法移动,则(1a)与(1b)和(1c)之间的语法差异表明,并列结构构成了提取的“孤岛”,即,你不能将名词连词移出并列短语。

约翰买了什么?
(1b)*约翰买了什么土豆和 __?
(1c)*约翰买了什么 __ 和蘑菇?

这种概括适用于所有的坐标结构——我们可以不通过成百上千的示例数据就得出这种概括。

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

Children in front of Yenthoroto Elementary School

所以你可以想象当我签约写一篇论文的语言文献的缺乏迫使我采取一种几乎完全自下而上的归纳方法时,我不得不做出的心理调整,在这种方法中,通过结构化启发、讲故事和自然主义语音收集获得的“原始数据”构成了我的语言分析的经验基础。这与我作为生成语言学学生所熟悉的方法形成了鲜明对比:自上而下的演绎方法,在这种方法中,“理论反思可以给我们提供我们应该寻找的新想法”(贝克,凯斯:其原则和参数,2015 年,第 129 页)。

鉴于我正在处理的数据的数量和速度,我无法完全依赖任何一种方法,我开始想知道语言学作为一门实证科学是否会受益于工具和数据科学的更广泛应用——这是我只听说过的事情。正如我所想象的那样,他们的影响将超越为特定品牌的语言学家(即产生大量原始数据的领域语言学家)服务,以帮助实现该领域更广泛的目标,即揭示所有语言的共性及其跨语言差异的制约因素——这是一项肯定需要大量数据的事业——以构建语言能力作为遗传禀赋的广义理论。

鉴于我正在处理的数据的数量和速度,我无法完全依赖任何一种方法,我开始想知道语言学作为一门实证科学是否会受益于工具和数据科学的更广泛应用——这是我只听说过的事情。

我要说的是:我从研究生项目毕业后,感到该领域当前工具和方法的挑战和局限性给我带来了很大压力,这些工具和方法似乎足以服务于自己的研究目标,但在学术界之外的世界中却相对没有什么影响力。这种思考让我开始问,是否有替代的语言研究方法可以为语言学理论提供信息,同时让语言学与世界更加相关。我想,只是也许,数据驱动的方法可以。

毕业后不久,我拒绝了一所文理学院的兼职教授职位,作为一名该领域的完全新人,参加了为期 10 周的大数据和分析课程,从大数据的四个 v开始。我只是想学习。

几年后,我作为一名 NLP 数据科学家在一家成长中的科技公司工作,在那里,我感到自己处于独特的地位,可以为我们的机器学习系统带来语言的严谨性和可问责性,同时在这个过程中学习了大量的技术知识并提高了技术熟练程度。

所以我认为这是一个很好的地方来最终回答这个让你一直读到现在的问题:没有定量学位,你能成为一名数据科学家吗?我确实是这么想的,但我想很快承认,“数据科学家”是一个如今被广泛解释的术语(这是正确的),我认为正是由于这种松散的解释,我才能够在一定程度上提供以下见解。

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

A Papuan monitor (Varanus Salvadorii), captured and killed

如果你没有定量的学位

1.把自己定位成专家而不是多面手。

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

Posing with a bush knife

我在上面分享了我的故事,希望它能真正推动第一点:如果你想成为一名数据科学家,你绝对必须能够阐明数据在你的(非定量)领域中的作用,无论是政治学还是新闻学,以及你的领域知识如何为你的组织更广泛的业务目标服务。

如果你有机会向招聘委员会陈述你认为你的研究或行业经验如何影响公司的数据科学应用并产生商业价值,这肯定会有所帮助。不要忘了提及你的领域专业知识如何改进特性工程。准备好传达你是唯一有资格决定构建和提取什么样的特征的人,这是正确利用机器学习算法的能力的必要条件,以及你将如何利用你的领域知识来决定收集什么样的数据,使用什么样的目标标签,以及删除什么样的异常值

所有这些都等于说,把自己定位为专家,而不是多面手。展示自己是团队现有技能的补充,并强调你作为拼图中“缺失的一块”所能带来的巨大价值。

2.找一个很棒的团队。这很重要。

我几乎把这个放在第一位,因为根据我自己的经验,能够与认识到你的独特价值并真诚希望看到你成功的优秀人士一起工作,是我作为一名年轻的数据科学家感到满意和成长的最重要因素。在带着一种醒悟的状态离开我的第一份工作前不久,我花了大量的时间寻找、研究和面试,不是公司,而是团队,直到我找到了一个我觉得最重要的是存在一种健康、充满活力的文化的公司。

在我入职的两周时间里,我当时的经理意识到我有限的编程技能,安排我每天早上 30 分钟签到,这样我就可以问任何技术问题和/或复习一些我前一天写好的代码。从一开始就提供这样一个结构化、个性化的学习环境,为我在这个团队中创造了一种“安全空间”,让我可以无所畏惧地成为自己——一个在技术领域有发展空间的专家。这些会议的影响持续到我入职后的几周:我仍然觉得问“愚蠢”的 Python 问题非常舒服,因为他们总是得到深思熟虑的回答,从而将他们的状态提升到“聪明”结对编程是被鼓励的,我们可以随意把拉请求的作者拉到一边,让他们用适当的语言解释他们的代码到底在说什么。我为我们作为一个团队建立的尊重文化感到自豪,我真的不认为这是理所当然的。

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

Children delousing each other

除了他们帮助你在软件工程领域具体成长的能力之外,你的团队也非常重要,因为只有在你的数据科学家同事的工作背景下,你才能找到自己的位置,成为一名特定类型的数据科学家,产生特定类型的影响包括,这可能需要较少的统计或机器学习知识,更多的其他知识。

您独特贡献的价值通过您整个团队工作的协作互补性质展现出来。一个数据科学家可能花费大部分时间构建 ML 管道,而另一个则主要从事数据探索或预处理。还有一个可能主要致力于将模型部署到产品中,或者为特性测试建立一个 A/B 测试平台。为同一目标工作的人之间的这种分工反过来会决定每个数据科学家未来从事什么样的项目。

为了更好地理解这一点,下面是一篇非常好的 Medium 文章的摘录,该文章讨论了评估数据科学能力:

我开始认为“好的数据科学”是在个人层面上并不真正存在的东西*:虽然单个团队成员都非常擅长某些技能,但建立强大的数据科学能力是任何个人都无法完成的事情。我看到的大多数关于数据科学技能的讨论都没有明确承认这一点。我们所有人的技能都有差距,但是只要团队没有任何差距,那就没问题:这确保我们能够共同做我们需要做的事情,并且仍然给我们所有人留下许多成长的机会。***

上面的陈述确实引起了我的共鸣,同时也让我有了正确的认识。如果你的团队以这种以团队为中心(而不是以个人为中心)的心态运作,你缺乏量化学位可以通过以下组合充分弥补:(1)你自己不断发展技术和量化技能的奉献精神,(2)你的队友在协作环境中提供深思熟虑的反馈、指导和方向的能力,以及(3)你的公司致力于改善知识共享系统以推动集体生产力和有效性。**

例如,我经常咨询我的经理和其他更高级的数据科学家,关于首先尝试什么算法,以什么评估指标为目标,以及关注什么超参数,尽管我经常被告知要尝试一切,看看什么最有效!这是一个伟大的赛格威进入下一个点。

3.要知道建模只是数据科学家工作的一小部分。

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

Preparing to count yams

得知 ML 数据科学家工作中一些听起来最可怕的部分,如算法选择和超参数优化,实际上是他们工作流程中非常小的一部分,我感到非常欣慰。有如此多的工具可以自动化这些过程(以及学习它们的资源),以至于几乎总是有可能在没有数学、统计或机器学习方面的正式培训的情况下实现复杂的算法。

虽然我不否认强大的数学基础在 AI/ML 专家培训中的价值,但我发现真正对数据科学应用的实际开发产生最大影响的是他们通过试错经验获得的直觉,而不是他们所受的*教育。*****

另一个相关的观察结果是,一个高效的数据科学家投入大量的时间和精力在构建一个强大的通用* ML 管道上,这样那些需要参数化的元素,比如超参数调整、特性转换器需求和模型选择,就可以自动且轻松地重复。好消息是,当您加入团队时,这样的管道通常已经为您构建好了,或者如果您幸运地需要构建一个新的管道,有许多 ML 库可以支持这种努力。*

以下是使用 scikit-learn 构建 NLP 管道的两个示例指南:

*** [## 如何使用 Scikit-Learn 构建可重用的自定义 NLP 管道

重点是功能工程和培训

towardsdatascience.com](/how-to-build-a-reusable-nlp-code-pipeline-with-scikit-learn-with-an-emphasis-on-feature-504f8aa14699) [## 基于 Scikit-Learn 流水线的文本特征提取

使用 2010 年初选辩论记录

towardsdatascience.com](/the-triune-pipeline-for-three-major-transformers-in-nlp-18c14e20530)

作为一名数据科学家,我成熟的一部分是接受这样一个现实,即依靠“理论思考”来执行 ML 任务是很尴尬的,并学会每当有人告诉我“试一试,看看性能是否有所提高”时不要畏缩。我开始认识到,由于我们拥有的自动化工具,这种试错法实际上是我们可以使用的,其核心是不断进行实验,这是每一项发现和创新背后的力量。

4.你必须编程——你可以做到。

这最后一点与最后一点密切相关。如果你是数据科学家,你必须编程。这是无可避免的。数据科学管道的每个阶段都需要它。从数据接收开始,您必须以编程方式读取文件、设置 ETL 管道、查询数据库等。对于特征工程,你需要使用 ML 包应用特征选择技术,为特征提取编写手动函数,等等。对于建模,您需要配置算法和参数,执行网格搜索,挑选最佳估计器,等等。诸如此类。

也就是说,我想给你留下一些关于数据科学编程的令人鼓舞的评论:

  1. 拥有一个量化的学位与拥有编程技能是完全正交的。换句话说,没有量化学位并不会妨碍你成为一名优秀的程序员。大多数有能力的程序员是在工作中而不是在学校里学会如何编写好程序的。不管你的学位如何,你都会遵循同样的轨迹。
  2. 你不必理解整个代码库来完成你的工作。我认为你可以从很小的事情开始,例如,为你团队的代码库贡献一个脚本,甚至一个函数——然后从那里开始。我开始在我团队的代码库中小的、不连贯的部分工作,花了几个月的时间,我才能够开始看到我的代码如何融入更大的结构。我仍然没有一个完整的视图。这完全没问题,也不会妨碍我每天的工作。
  3. 核心编程概念确实是有限的,并且在不同的语言中是相当不变的,在开始的时候,你只需要很好地了解这么多事情就可以胜任你的角色。如果你在 Python 中工作,你应该对它的五六个数据结构了如指掌,并且能够自如地操作它们,编写函数和创建对象——而其他的一切都是建立在这些有限事物之上的*。在那之后,前 10 名左右的数据科学库,如 Numpy、Scikit-Learn、PyTorch、TensorFlow、Pandas、Matplotlib、Seaborn 等,将会拯救你。导入它们,让它们为你做艰苦的工作。*

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

Everyday garden work

总之,还是申请吧。

出于某种原因,在我写这篇文章的时候,一个统计数据不断浮现在我的脑海中:

女性只有在百分百合格的情况下才会申请工作。另一方面,男性倾向于在只有 60%合格的时候申请。

这句话摘自惠普公司的一份内部报告,在互联网上被重复了无数次,道出了该行业性别差距的严峻现实。我知道这个话题完全超出了这篇文章的范围,但我觉得最终必须把它包括进来,因为我想,你知道,这篇文章毕竟是关于资格

请记住,数量学位是一种资格,并不是每个成功的申请人都符合工作描述中的每一项资格。如果你是女性或男性,如果你在工作岗位描述的其他领域合格,不要让学位要求阻碍你申请。换句话说,如果你有 60%的资格,就去申请。你真的永远不知道一家公司会在候选人中寻找什么最最 T21 的人。

总而言之,如果你想进入这个行业,但没有定量学位,无论如何都要申请,一旦你接到招聘人员的第一个电话,

  1. 将自己定位为一名专家,能够清楚地说明你的领域知识如何服务于组织的业务目标,尤其是通过改进特征工程。
  2. 花时间寻找一个可以帮助你成长的优秀团队**。作为一名数据科学家,整个团队对彼此的承诺及其文化的健康对你的成功至关重要。发展对数据科学家角色的多元化理解,以及承认伟大的数据科学是团队合作,而不是最好的数据科学家的工作,对于组织的成功和发展至关重要。**
  3. 不要被数据科学工作中听起来吓人的部分吓倒,比如“建模”和“优化”。它们不是数据科学家的主要工作,这些过程通常归结为能够利用现有的库来构建可重用的 ML 管道(或者使用现有的管道)来帮助你完成核心的 ML 任务。
  4. 毅力,而不是 CS 学位,会让你成为一名优秀的程序员。记住编程技能是通过时间和经验发展 完善的。

谢谢你让我分享我的故事。祝你好运,一路顺风!

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

An aerial view of Western Province***

抽样分布,重点是吉布斯抽样,实践和代码

原文:https://towardsdatascience.com/can-you-do-better-sampling-strategies-with-an-emphasis-on-gibbs-sampling-practicals-and-code-c97730d54ebc?source=collection_archive---------14-----------------------

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

Image by Author

上一篇关于用 bootstrap 重采样估计置信区间的文章之后,我想简要回顾一下如何估计没有封闭解的复杂后验分布。贝叶斯推理就是一个很好的例子。这里,一个提示帮助来自采样。

我们要解决什么?

可以说,贝叶斯推理最难的部分是后验估计,多年来,贝叶斯推理一直把这个领域蒙在鼓里。在早期(在高计算能力出现之前),计算后验概率的方法通常依赖于某种近似(例如拉普拉斯近似)或数值积分。然而,随着计算机的发展及其增强的内存和速度,采样方法开始获得动力:从实践中落后的非常简单的方法(反转采样)到更复杂的方法,如 Metropolis-Hasting (MH)算法,该算法被列为 20 世纪影响科学和工程发展的十大算法之一。

当开始阅读该主题时,最常见的问题是采样如何帮助估计后验概率,以及它与积分有什么关系?

抽样的关键思想是从感兴趣的分布中生成值,然后应用离散公式来计算必要的统计数据。根据大数定律:,考虑一个计算分布期望值的例子

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

这里一个复积分被一个离散的公式所代替,只包括原始函数 f(x)。这让我们想到了蒙特卡罗方法(或蒙特卡罗实验)——一类依靠重复随机采样来获得数值结果的计算算法。这里讨论的采样算法属于蒙特卡罗方法的范畴

在写这篇文章的时候,我有机会修改了最常见的采样算法,并找到了几个链接,感兴趣的读者可能会觉得有用。下一章是对采样算法的快速回顾。那些只对吉布斯采样感兴趣的人可以跳过它。

取样策略,概述

这里我简单解释一下常用的抽样方法:倒置抽样、拒绝抽样和重要性抽样。那些只对吉布斯采样感兴趣的人可以跳过这一节。

倒置取样

给定任何累积分布函数 F(x ),可以按照以下步骤从其生成随机变量:

  1. 从均匀 U~[0,1]生成样本
  2. 为 x 求解 F(X)=U,或者等价地求出 X = F^(-1)(U).
  3. 返回 x。

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

Figure 1: Inversion sampling. Image by Author.

这里,我们按照均匀分布对 y 轴进行采样。当 x,f(x)的概率较低时,cdf F(x)将是平坦的,即从均匀分布中抽取的样本不太可能落在曲线上。x,f(x)概率较高的区域倾向于平行于 y 轴,这意味着均匀分布的样本很可能落在 y 轴上。

为什么不在实践中使用?

求 cdf 的逆可能是复杂的,如果 cdf 不可用,积分仍然是找到它所必需的,所以我们回到原始问题。

延伸阅读

反转采样的另一个例子在这篇文章中给出。

拒绝抽样

拒绝采样允许从分布中采样,已知比例常数,但是太复杂而不能直接采样。

为了使用拒绝抽样,需要有一个简单的建议分布 q(x ),从中可以抽取样本。还选择常数 k,使得分布 kq(x)总是包围或覆盖所有 x 的分布 p(x),我们从分布 kq(x)中采样,如果 ukq(x(i)) < p(x(i)) accept the sample, here u is coming from a uniform distribution.

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

Figure 2: illustration of rejection sampling. Image by G. Pilikos.

为什么可能不工作?

使用剔除取样时会面临几个问题。首先,由于 k 控制建议分布对感兴趣的分布的覆盖,所以需要找到 k,它不需要过多的采样,并且 q(x)几乎不覆盖 p(x)。因此,在采样的覆盖和冗余之间有一个由 k 控制的折衷。通常,甚至不可能找到正确的 k 或建议分布来覆盖兴趣分布。

延伸阅读

我发现这篇文章在回顾剔除抽样时非常有用。它有代码和很好的图形来显示正在发生的事情。

重要性抽样

与前面讨论的方法不同,重要性抽样用于直接逼近函数 f(x)的期望值。该方法与拒绝抽样非常相似,也需要一个建议分布。我不会说太多的细节,但是,更多的细节你可以看看这篇文章,我发现它非常有用。

吉布斯采样

上述所有方法在低维时都是有效的,然而,当维数增加时,用这些方法采样就成问题了。需要使用不同种类的方法。这类方法基于马尔可夫链蒙特卡罗(MCMC)。马尔可夫链是一个随机过程,在给定当前状态的情况下,未来状态独立于过去状态。当不可能从 p(x)中提取样本,而只能评估 p(x)直到一个归一化常数时,使用 MCMC。关于马尔可夫链我就不赘述了,不过,有兴趣的读者可以在这里找到很好的解释

Gibbs sampling 是马尔可夫链蒙特卡罗采样器,是一族Metropolis-Hasting(MH)算法的特例(简化情况)。Metropolis-Hastings (MH)算法是最流行的 MCMC 采样器,许多实际的 MCMC 采样器可以解释为 MH 算法的特例。以与拒绝和重要性采样类似的方式,它需要一个建议分布 q(x ),并涉及给定当前状态的候选 x 的采样。也就是说,从 q(x(i+1)|x(i))中抽取新的样本,即给定当前状态。然而,该样品不能保证被接受。类似于拒绝采样,只有当条件满足时,我们才移动到 x ,否则我们停留在当前状态并尝试新的样本。在区间[0;1],然后与 A(x(i+1),x(i))进行比较,其定义为:

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

Acceptance probability for the MH algorithms.

我就讲到这里,不过,如果你对 MH 算法的更多细节感兴趣,你可以看看这里的。这一步要注意的是,对于吉布斯抽样,接受概率总是 1。除此之外,它与 MH 采样器非常相似。

Gibbs 抽样的思想是将高维联合分布的抽样问题分解为低维条件分布的一系列样本。这里,我们通过扫描每个变量(或变量块)来生成后验样本,以从条件分布中采样,并将剩余变量设置为其当前值。显然,我们能否抽样取决于我们能否导出条件后验分布。下面给出了算法。

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

Alg 1: Gibbs sampling.

这个过程一直持续到收敛(样本值具有相同的分布,就好像它们是从真实的后验联合分布中采样的一样)。因为我们用随机值初始化算法,所以在早期迭代中基于该算法模拟的样本不一定代表实际的后验分布。这被称为预烧期。

为什么会有用?

假设我们想从 p(x,y)的联合分布中取样,然后,应用概率规则,我们可以在 p(x|y)或 p(y|x)的条件下导出 p(x,y)的关系。

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

通过在 x 和 y 之间交替,我们可以从原始的联合分布中取样。

例子

这里我考虑两个例子,在第一个例子中,我们想使用 Gibbs 抽样来估计 1D 高斯的矩。然后,我将考虑同一个例子,但有一个更复杂的情况——多元高斯分布。对于这两种情况,我都提供了一个 jupyter 笔记本 和代码。

1D 高斯

考虑一个经常发生的例子,我们有一些数据,比如说工人上班迟到的时间。这些数据看起来与正态分布的数据非常相似。作为一个贝叶斯主义者,你决定开发一个模型。这里你要估计均值和标准差。给定数据的平均值和方差的全概率模型如下所示:

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

这里我们有 X 给定均值和方差乘以它们的联合先验的可能性。假设独立,先验可以拆分。理想情况下,我们希望有一些信息性的先验,但是事先没有信息的情况下,采用参数 ab 都趋向于零(这将产生 1/方差的先验)的方差和均值方差较大的正态分布。

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

Inverse gamma prior for variance (top) and normal for mean

然后我们可以展开高斯分布。因此,似然项可以写成如下形式:

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

要获得平均值的后验概率,首先,将所有观察值相乘,然后展开二次项,消除相对于恒定的项,并首先用均方项重新排列这些项。对方差采取类似的程序。这产生了均值的后验概率,以方差和数据为条件,方差也类似,以均值和数据为条件:

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

Posterior of the mean

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

Posterior of the variance

在示例中,我们从平均值为 2、标准差为 5 的正态分布中生成数据。经验平均值为,标准偏差为 2.1,标准偏差为 4.959。我们可以通过在两者之间交替来应用吉布斯采样,得到下面的估计值 mean = 2.094,std = 4.932。

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

Figure 3: Mean and Variance evolving over time for 1D Gaussian, distribution of the data and estimated model. Image by Author.

2D 高斯

使用 1D 高斯扩展该示例,我们可以从联合分布开始,导出给定数据的均值和协方差矩阵的后验概率:

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

以均值和数据为条件的协方差矩阵的后验分布遵循具有 n 个自由度的逆 Wishart 分布,并且给定协方差矩阵和数据的均值遵循正态分布:

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

我们用 1 和 3 个均值、2 和 10 个标准差和 0.9 个协方差对多元高斯数据进行采样。经验均值分别为 1.01 和 2.98,吉布斯抽样估计值分别为 1.00 和 2.98。经验标准差和协方差分别为 1.95、10.07 和 0.85。吉布斯抽样估计那些有 1.95,10.22 和 0.95 的。

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

Figure 5: Estimated distribution and the data, evolution of covariance. Image by Author.

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

Figure 4: Evolution of means standard deviations. Image by Author.

利弊

使用吉布斯采样的缺点包括:

  1. 收敛时间长,尤其是随着数据维数的增加。收敛时间也取决于分布的形状。
  2. 很难找到每个变量的后验概率。
  3. 一般而言,来自链起点的样本(预烧期)可能无法准确代表期望的分布。因此它经常被丢弃。也可以使用稀疏化——即保持马尔可夫链的每第 k 个样本。

然而这些往往被压倒,记住,MH 算法被评为 20 世纪影响科学与工程发展的十大算法。

进一步阅读

与许多其他抽样策略不同,吉布斯抽样需要了解几个领域,因此,可能需要进一步阅读概率的基础知识。在准备这篇文章的时候,我从林奇的社会科学家应用贝叶斯统计和评估简介中找到了有用的第 4 章。这本书是用通俗易懂的语言写的,第一章解释了基本知识。罗切斯特大学的笔记中还有另一个吉布斯抽样的实际例子。你可能也想在 stats stackexchange 上阅读这个回复

本文的 jupyter 笔记本可从这里获得。

喜欢作者?保持联系!

我错过了什么吗?不要犹豫,直接在 LinkedInTwitter 上给我留言、评论或发消息吧!

[## 置信区间:参数和非参数自助重采样

制作一个好模型需要花费数天时间。但是一旦模型在那里,一个狡猾的问题潜伏在里面:“它能告诉我什么…

towardsdatascience.com](/a-note-on-parametric-and-non-parametric-bootstrap-resampling-72069b2be228) [## 面向大规模偏好聚合的数据集融合

融合评分和排序数据集的高效简单的概率框架。示例和代码。

towardsdatascience.com](/dataset-fusion-sushi-age-and-image-quality-and-what-the-hell-do-they-have-in-common-814e8dae7cf7) [## 成对比较的主动采样

如何配对玩家,以便在尽可能少的游戏中知道排名,同时游戏体验质量…

towardsdatascience.com](/active-sampling-for-pairwise-comparisons-476c2dc18231)

你能增强吗?—使用 1 幅训练图像进行图像恢复

原文:https://towardsdatascience.com/can-you-enhance-that-image-restoration-with-1-training-image-b54989a57b4d?source=collection_archive---------13-----------------------

我为学习者写了一份名为《强大的知识》的时事通讯。每一期都包含链接和最佳内容的关键课程,包括引文、书籍、文章、播客和视频。每一个人都是为了学习如何过上更明智、更快乐、更充实的生活而被挑选出来的。 在这里报名

电影太棒了。但是计算机视觉可以让它们变得更棒——呃(我们就把它变成一个单词)!

电影使用计算机视觉进行各种各样的事情,如动作捕捉、特效和计算机生成图像(CGI)。最常见也是最老套的用法之一是“你能增强它吗?”在动作片里。这通常是一些美国联邦调查局/中央情报局/酷特工在看着他们正在追捕的人的照片时说的。图像失真,很难看到,所以他们告诉技术人员“增强”,这样他们就可以看到坏人的脸。这种“增强”效果在电影中看起来相当激烈,几乎就像戴上一副眼镜,没有它你什么也看不见!

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

但是你可能已经猜到了,这并不总是像电影一样简单!人工智能(AI)和计算机视觉还没有达到那个地步,但我们越来越接近了。

通常,当我们训练一个深度神经网络进行那种图像恢复时,我们需要训练数据……大量训练数据,大约有数千甚至数百万张训练图像。由于训练数据的获取在时间和金钱上都很昂贵,这使得个人和组织都很难建立健壮的图像恢复系统。

幸运是,大规模训练数据集的成本和需求有望降低。最近的计算机视觉研究,称为 深度图像先验 将帮助我们解决这个问题。

具有深度图像先验的图像恢复

标准的图像恢复流水线如下工作。我们收集一个大数据集的损坏和未损坏的图像对;简单来说,这基本上是难看的和好看的图像对。接下来的想法是训练一个深度网络来学习坏图像和好图像之间的映射。一旦经过训练,网络应该已经很好地了解到,当你给它一个糟糕的图像时,它应该输出一个同样图像的更好的版本:更清晰,更锐利,更美观。

这些网络很容易训练。使用 Keras、TensorFlow 或 Pytorch 在 Python 中对它们进行编程非常简单,我们使用简单的均方误差作为损失函数,定义如下

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

其中 n 是训练集中图像的数量,Y 是地面真实好图像,Y-hat 是网络预测的好图像。传统上,训练网络需要收集大约无数的训练图像,然后等待网络完成训练很长时间。

这就是深度图像优先的用武之地。作者仅使用一个损坏的图像来训练他们的网络。网络的输入是被破坏的图像,输出是同一个被破坏的图像。我们训练网络来优化这种预测其自身输入的映射。

那么,这为什么会奏效呢?以下是作者的巧妙观察。

当我们试图恢复一幅图像时,我们实际上是在试图平衡两件事:(1)使我们被破坏的图像不那么被破坏,例如通过减少噪声;这使得图像看起来更自然,因为它是无噪声的(2)仍然保持整体图像结构。

例如,如果我们想消除输入图像中的所有噪声,我们可以从技术上使输出图像全黑;全黑图像没有任何噪声!但是我们不仅仅是想去除噪声,我们还想保持图像的结构;如果我们的输入图像是一辆汽车,我们仍然希望输出看起来像同一辆汽车,只是去掉了噪声。

均方误差函数将确保图像结构得到保持,并且我们的汽车看起来仍然像一辆汽车,因为当像素与地面真实情况相似时,误差将很小。

为了消除噪声并使图像看起来自然,我们实际上可以利用深层网络的结构来迫使输出自然。作者指出,他们观察到网络本身的结构驱动输出自然,无污染的图像。这篇论文的总体本质是,卷积神经网络(CNN)在某种程度上自然图像,或者至少偏向于自然图像。

所以当你进行训练的时候,选择你想要恢复的任何一个被破坏的形象。把它作为你的单一训练图像,既作为输入又作为基础事实。你的误差函数是预测图像与你的地面真实(与你的输入相同)之间的 MSEMSE 负责维护图像结构。由于我们的网络倾向于输出自然图像,我们可以相信它会输出我们想要的无噪声图像。当只使用一个单个图像进行训练时,请查看以下不同恢复任务的一些结果。

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

Examples results from Deep Image Prior. (This image is borrowed from the official Deep Image Prior project page, for educational purposes)

代码

感谢 AI 社区中开放源代码思想的美丽,在这里有一个公开可用的深度图像优先实现!这是你如何使用它。

首先克隆存储库

git clone [https://github.com/DmitryUlyanov/deep-image-prior](https://github.com/DmitryUlyanov/deep-image-prior)

安装所需的库

pip install numpy
pip install scipy
pip install matplotlib
pip install jupyter
pip install scikit-image
pip install torch torchvision

这里不需要任何预先训练好的模型,因为只用一张图片训练会超级快!

像这样启动 Jupyter 笔记本

jupyter notebook

现在,您可以选择一台笔记本电脑来完成您想要尝试的任何一项任务!笔记本超级短,好用!如果您想要恢复您自己的损坏的映像(并将其用于训练),那么您将想要用您自己的映像替换 net_input 数组。读入损坏的图像并将其传递给 net_input

瞧啊。只有 1 幅训练图像的图像恢复!

喜欢学习?

推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!

你能比电脑更快找到沃尔多吗?剧透:不能。

原文:https://towardsdatascience.com/can-you-find-waldo-faster-than-a-computer-spoiler-you-cant-ff382e601c31?source=collection_archive---------5-----------------------

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

用计算机视觉检测物体

仿佛就在昨天,我还在一位数的年纪,在飞机上和教堂里用充满随机记忆和活动游戏的书自娱自乐。最具代表性的是《沃尔多在哪里》的巨幅插图;我甚至一直和我的朋友和家人比赛,看谁能更快找到他。

我不得不说,在所有的练习之后,我变得相当不错。这并不像看起来那么简单。你可能会认为一个穿着蓝色裤子和条纹衬衫的瘦子很容易被发现,但事实并非如此!

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

Did you try to find Waldo? Even if you did… your time was up a long, long while ago. Too bad! If only there was something you could do to be faster…

这项运动的重点是速度、注意力和集中。它应该让孩子们主动思考,锻炼他们的大脑肌肉。“准备上学”,或者别的什么。

但是如果我告诉你你不需要这些就能在游戏中获得成功呢?

看,另一部分是胜利。是的,我知道,我已经听到了关于“最重要的是玩得开心!”但是听着。从技术上讲,想出有效策略的人是最稳定的赢家。 那就是你想成为的家伙!你所要做的就是智胜他人(显然,没有作弊),你就成功了。而这其实也适用于生活中的大部分事情。因为“沃尔多在哪里”没有真正的规则,除了你必须是第一个找到他的人才能赢,所以每次你都可以选择不同的道路来成为第一个。

如今的孩子们也能接触到如此多的科技产品——是时候让他们用这些产品做点好事了。关键是,电脑比你聪明。这是因为当他们看一张非常复杂的图片时,他们可以一下子看到整个事情,并在几秒钟内找到瓦尔多。

作为人类,我们没有能力拥有这种处理能力,除非你通过基因改造让自己变得异常聪明(这并不完全不现实……但那是另一回事了)。反正你电脑的能力超过了人类。这到底是怎么发生的?

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

计算机视觉:能看见的技术

你的普通博客们对计算机视觉的看法可能是,计算机有一双超级眼睛时刻监视着你,就像你的网络摄像头里的联邦调查局一样。但这是错误的。也许有一天…

对象检测(作为计算机视觉的一个分支)实际上是指计算机能够解释数字图像或视频的内容,而无需您手动输入这些信息。这项技术可以分解图像的不同部分,并找出存在的对象。这是面部识别的动力,就像你在 iPhoto 中的家人和朋友一样,并将罪犯与安全镜头进行匹配。

计算机视觉不仅仅是能够看到正在发生的事情,而且能够理解它。

YOLO……但这不是你想的那样

你只看一次,又名 YOLO,是一个实时检测物体的系统。不骗你,当我第一次知道 YOLO 不是“你只能活一次”时,我很失望,但一旦我知道了什么是真正的 YOLO,我保证它会有趣和酷一百万倍。

该系统不同于经典模型(例如快速 R-CNN ),因为您不会对图像上的相同区域进行多次预测,而是在单个回归问题中将数据集通过完全卷积神经网络(FCNN)仅一次。

以下是 YOLO (V3)模型的工作原理:

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

  1. **网格:**图像被分成一个 S x S 网格(你可以从左边的图像中看到)。这是为了把不同的部分分解开来,让图像作为一个整体被“阅读”。如果一个物体落在一个网格的中心,该网格负责检测该物体。
  2. 包围盒:整个图像的特征作为一个整体被用来确定包围盒,它基本上只是物体可能所在位置的轮廓。值得注意的是,它们覆盖了图像的每个部分,并且重叠。它也更有可能比电网本身更大。想象一下,你正在努力寻找藏在床罩下的手机——你床上不同突起的轮廓就是你的边界框!
  3. 置信度得分:置信度得分表示模型预测的实际存在程度。它基于宽度、高度以及对象中心相对于单元格边界的位置。这是当你在看床的不同块(边界框)的尺寸时。你将手机的大小与肿块的大小进行比较,然后基于此确定你认为你的手机实际上有多少。
  4. 条件类概率:这些是以包含对象的网格单元为条件的概率。使用以前的 YOLO 模型,每个网格单元只能预测一组类别概率。由此,你可以区分不同的物体(见上图底部)。但是 YOLO V3 对每个类使用独立的逻辑分类器。这基本上可以让你对一个相同的物体有多个标签:计算机找到瓦尔多,他被贴上“瓦尔多”、“人”、“男孩”的标签。

下面是如上所述收集和解释数据的一段代码(它还记录了物体被检测到的速度!):

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

这只是代码的摘录。我用 YOLO V3 编写了一个完整的物体检测模型,你可以在这里找到的链接

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

This is the architecture of the model — you can see the different layers.

操纵数据

由于单一回归,客观性和分类的损失需要单独计算——但仍在同一个网络中。你通过逻辑回归得到你的客观性分数:1 表示边界框和地面真实对象(图片实际上是什么)完全重叠。该模型将仅预测 1 个这种类型的包围盒,但是误差将受到客观性和分类损失的影响。

YOLO (V3)模型也以 3 种不同的尺度预测盒子,以支持尺度变化。看起来会像这样:

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

为了测试该模型,我们必须将条件类概率与单个盒子置信度预测相乘。这个等式返回一个类在盒子中的概率,以及预测的盒子与对象的匹配程度。

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

下面是另一段代码摘录,它加载了预先训练的对象名称类,以及它如何处理数字图像的不同帧的编写/注释:

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

你只看一次(YOLO V3)模型的输出如下图所示。你到底想从这个模型中得到什么,以及如何在不同的应用中使用它,比如道路地图,这一点非常清楚。

现在我希望你明白为什么找到沃尔多会这么容易!你甚至不用看第二遍…

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

我们为什么使用它

  • 它被认为是实时的,因为它很快——每秒钟能够捕捉 45 帧。还有一个速度更快、架构更小的版本,每秒可以捕捉 155 帧,但精度较低。
  • 所使用的 FCNN 可以理解和使用通用对象表示的功能。你可以使用真实世界的图像和艺术品来使用和训练它。

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

展望未来;胸怀大志

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

这项技术已经过了初级阶段:人们在日常生活中使用计算机视觉。越来越多的技术正在该领域发展,这是令人兴奋的,因为它有如此多样的现实世界应用。

将物体检测软件与语音反馈结合起来也是非常强大的。今天它已经被使用了——人们只是不知道它的存在。失明的人将能够获得对他们周围环境的描述,不必太依赖他们所有的其他感觉,24/7。他们甚至会开车!虽然,我不确定当我们有自动驾驶汽车时,这有多必要!

另一个可能的用例是对大型零售店或杂货店的库存进行分类、确定和辅助。在处理外部伤口、骨折、斑点或损伤时,医疗诊断也可以从中受益。但最重要的是,是技术帮我找到了沃尔多!

不管怎样,这个领域有着惊人的潜力,我迫不及待地想成为未来的一部分。

让我知道你的想法!

关注我上 领英 了解更多。

感谢来自 GitHub 的 Ayoosh Kathuria 和 Aviv Sham,以及来自华盛顿大学、艾伦人工智能研究所和脸书人工智能研究所的 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali 法尔哈迪发表的论文,您可以在此处找到。

你能在 15 分钟内把你的杂货送到吗?

原文:https://towardsdatascience.com/can-you-have-your-groceries-delivered-in-under-15-minutes-14f7b3b3f714?source=collection_archive---------26-----------------------

针对快速交货的快速模拟和优化研究。

Instacart、Amazon Prime now、Farmstead 和更多送货领域的初创公司正在解决非常有趣的供应、需求、模拟和物流优化问题。早在 2018 年,我的联合创始人王维基和我就想验证一个激进的杂货配送想法:让杂货在 15 分钟内送达,对用户来说没有配送成本。

这听起来几乎不可能。这个想法是将 SKU 放在一辆卡车上,在附近盘旋,集中响应需求,而不是众包交付。

显然,要验证这个想法,还有很多问题需要讨论:

  1. 这种服务的需求有多大?
  2. 要在 15 分钟内交付,您需要做些什么?
  3. 您如何选择最佳的 SKU 来响应这种需求?
  4. 有多少需求会使这有利可图?在当前的路况下,你真的能满足这种需求吗?
  5. 还有更多…

所有这些都是非常有趣的问题,但我想把重点放在本文的第二个问题上,因为它有点容易快速模拟,看起来也很有趣。你可以在这里找到这个帖子的代码

要在 15 分钟内交付,您需要做些什么?

让我们想象一下这种情况。我们有一辆卡车负责服务一个区域(比如说诺布山)。假设这辆卡车有无限的 SKU 供应来响应任何杂货请求。我们的模拟将产生随机需求,并让我们的卡车在一个选定的社区为该需求服务。我们试图回答的主要问题是:

尾部交货时间看起来像什么

  • 不同的需求体系
  • 白天不同的交通状况。

我们希望有尾部交付时间(用户等待接收杂货的最长时间),因为这将决定我们为卡车选择的邻域边界。这反过来可以与现实生活中邻里产生的需求进行比较,以了解这是否是一个现实的商业模式。为此,我们需要为模拟生成数据。我们来讨论一下,数据生成,模拟和可视化。

生成数据

我们可以想象白天有统一的需求,交通也是一样的。这将是最好的情况,因为我们的卡车将全天得到充分利用。我们将选择我们的区域,以便卡车可以在一小时内响应请求,这些请求之间的距离在 15 分钟以内。

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

Number of requests for each hour (random draws from uniform demand)

不幸的是,现实生活更具挑战性。在现实中,我们可以很容易地想象需求将呈三角形分布:在高峰时间(下午 5 点到 8 点)将有 n 个订单,在上午 10 点有 m 个订单,其中(m<

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

Number of requests for each hour (random draws from triangular demand)

除此之外还有路况。高峰需求时间的交通状况可能会更糟。幸运的是,我们有一个很好的数据来源。谷歌地图距离矩阵 API 。基本上,我们可以批量获取一天中选定小时的点到点旅行时间。

假设我们正在模拟拉斐特公园区域。我们首先生成均匀分布在定义区域上的请求点。

grid_lafayatte =  create_grid(
37.7886685, 37.7939118,-122.4343621,-122.4223142, 
step_size = 0.0015)fig = gmaps.figure()
marker_layer = gmaps.marker_layer(grid_lafayatte)
fig.add_layer(marker_layer)
display.display(fig)

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

Demand points per block for Lafayatte park area

如果我们可以打包一个好的步长,比如说每个块 1 个点,我们可以有把握地假设将该块的所有需求集中到该点不会使模拟偏离现实太远。

现在我们有了这些点,我们可以从谷歌地图距离矩阵 API 中获得它们之间的旅行时间,并获得在一天中特定时间到达该社区某个地方所需时间的图片。

我们通过对该邻域内所有点到该时间点的旅行时间进行平均来实现这一点。

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

Average travel times from all points to all points by hour of day

距离矩阵的结果和我们预期的一样。上午 9 点在拉斐特公园逛一圈平均需要 5 分钟(300 秒),到晚上 9 点就下降到 4 分钟。特定的路线会比平均拥挤,我们将在模拟中看到它们的效果。

模拟

现在,我们有了进行模拟研究所需的数据。这是模拟地平线的样子

每一分钟

  • 根据给定的需求分布(如果有)从任意点提取需求。
  • 卡车根据其使用的算法满足需求。我们可以选择先进先出,最近的优先,或者更复杂的。

下面是一个简单的先进先出卡车类的样子

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

Truck class for simulation

然后,我们用循环进行模拟。

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

Simulation loop

形象化

虽然我们不需要花哨的可视化来获得我们想要的结果,但我们将使用服务于地图上的请求点的卡车作为一种调试方法,以确保一切正常工作。

Fast and sloppy visualization (updates every 2.5 mins in simulation time

热图风格点是卡车,需求像大头针一样冒出来。我们不模拟卡车在道路上行驶,但在模拟中会进行计算。当卡车到达请求点时,我们只需将卡车位置更新到请求点。

结果

我们想知道随着需求的增加,尾交货时间什么时候变得太长。

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

Histogram of delivery times for a total of 27 orders

对于 Mission Bay 和 Portrero Hills 地区,对于每天生成 27 个订单的三角形需求曲线,我们有上面的交付时间直方图。基本上,所有订单都在 30 分钟内送达,3 个在 5 分钟内送达,14 个(9+2+3)在 10 分钟内送达。如果我们通过改变需求参数来增加每天的订单数量,我们会得到如下结果:

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

Histogram of delivery times for a total of 45 orders

哇,45 个订单,事情变得很糟糕。现在我们只有 13 个订单在 20 分钟内送达,最糟糕的情况是人们等了 2 个多小时。所以,如果我们要为 45 个订单服务的话,15 分钟以下的交货在这里似乎不行。但是这种断裂发生在哪里呢?换句话说,在我们开始让人失望之前,我们可以服务多少订单。

为此,我们针对不同的需求参数运行模拟,并查看第 90 个百分位数的交付时间。对于上述情况,我们将

27 个订单-> 90%到 25 分钟

45 个订单-> 90 %~ 120 分钟

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

90th percentiles for different # orders per day

正如我们所看到的,该地区在接到 35-40 份订单后出现了大幅增长。请记住,这是最简单的卡车算法(FIFO ),我们假设的是硬需求分布。尽管如此,有趣的是,使用这种型号,我们可以为几乎所有人提供 25 分钟而不是 15 分钟的送货服务。(对于每天产生少于 35 个订单的社区)

希望你喜欢,请检查代码,如果你发现任何错误/问题或有任何建议,请让我知道。

能从性格测试结果预测性别吗?

原文:https://towardsdatascience.com/can-you-predict-gender-from-personality-test-results-e1b06828627c?source=collection_archive---------27-----------------------

这个月 reddit 上弹出了一个有趣的机器学习分类问题。一名用户发布了来自 openpsychometrics.org免费人格测试结果,该用户声称他们成功预测了回答者的性别,准确率高达 80%。我决定接受挑战,看看我还能从数据集中找到什么有趣的东西。

总结(剧透)

  1. 根据一个人的性格测试结果来预测他的性别是相对容易的,也不奇怪。经过几轮模型改进后,我达到了 82%的准确率。使用包含一些经过清理和工程处理的数据的 SVM 返回最佳结果。
  2. 性格也会随着年龄变化。事实上。16PF 测验中的每一个人格特征都随着年龄和性别而变化。
  3. 从模型精度中挤出额外的百分之几需要很大的努力。sklearn 或 XGBoost 提供的普通模型对于快速简单的解决方案来说通常已经足够好了。

数据

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

数据来自 openpsychometrics.org 的。根据《塞奇人格理论和评估手册》,该测试被称为 16 种人格因素(T7),“一种全面且广泛使用的正常成人人格测量方法”。该测试包含 164 条关于你自己的陈述,并使用这些陈述来衡量 16 种性格特征。这些特征是相关的日常术语:

  • 温暖
  • 论证
  • 情绪稳定
  • 优势
  • 活泼
  • 规则意识
  • 社交大胆
  • 灵敏度
  • 警戒
  • 抽象性
  • 私人性
  • 恐惧
  • 对变化的开放态度
  • 自力更生
  • 至善论
  • 紧张

该数据包含 49159 个测试结果,每个结果还提供年龄、性别、准确性、国家、来源和运行时间。

探索性数据分析和剔除不良数据

数据集包含每个个性测试答案的标签栏,按个性特征分组。例如,“A1”标志着“温暖”特质的第一个问题。

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

它还包含关于年龄、性别、准确性(由回答者自评)、国家、来源(数据来自哪里——有不同的机构在进行这项测试)和时间流逝的数据。

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

年龄分布在 13 到 80 岁之间,并且不出所料地以 13-30 岁为主。有数百个空值,我必须删除它们。

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

性别可以是值 0、1、2、3。

1 和 2 对应于男性和女性,尽管我从来没有费心去弄清楚哪个是哪个,因为那与这个分析无关。我删除了性别值 0 和 3,因为它们非常少,它们会使这个项目变得更加困难和值得讨论。重要的是,有足够多的男性和女性可以从中得出有统计学意义的结果。

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

被调查者自我评估的准确率在 85%左右。有些回答者给测试打了很低的分数,有些人的准确率为零。我去掉了精度最低的 5%,因为我不想要评级很差的数据。

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

调查时间专栏提出了一个有趣的问题。有一条很长的尾巴,可能是那些没有关好浏览器窗口的人,或者是那些苦苦思索这个问题的人。我选择保留所有这些数据。也许最好的结果来自那些真正思考问题并花了 5000 秒做测试的人。然而,有两个不到 300 秒的明显峰值,几乎可以肯定是由作弊的人组成的,他们很快通过测试,看看到底是什么。

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

我删除了所有完成时间少于 300 秒的调查——基本上是从上面的数据中去掉了左“肘”。

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

数据现在有 43000 行。我删除了大约 6000 份调查,其中许多是测试作弊,或者选择不指明他们的性别或年龄。当然,这里会有一些好的数据,但是没关系——43000 已经足够了!

第一个模型——vanilla XGBoost

代码: GitHub

这个问题似乎是一个非线性问题。我知道这一点,因为所有这些性格特征之间肯定存在着复杂的关系。换句话说,一个心理学家在他认为有意义的几个“特征”周围画了任意的线。另一个心理学家会建立不同的模型。这些特征不是线性可分的,尽管人格测试试图这样做。某些特征之间肯定有联系,例如,x7,社交大胆,x11,隐私。

我从我通常的回归或分类问题的起点开始:一个普通的 XGBoost。据我所知,这使用了决策树和梯度推进,当面对这样的非线性问题时,这通常是一个好主意。

我根据模型能够正确猜测性别的百分比来确定模型的性能。我使用 k-fold 交叉验证来实现这一点,该算法在不同的数据切片中运行多次,以获得一个平均结果,以防您的模型幸运地拥有一个测试集。换句话说,验证不是从一组测试数据中返回一个准确性分数,而是返回许多可以平均的分数。

基线结果:在分类或回归问题中,数据准备通常会让你走得更远。在没有我的数据准备的情况下,我从数据集中删除了坏数据,XGBoost 的成功预测率为 78%

与数据准备:vanilla XGBoost 分类器的成功预测率为 79%

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

用网格搜索改进模型

代码(用我最终的 XGBoost 模型): GitHub

79%已经是一个不错的成绩了,但我显然想超过 redditor 的 80%。

我做了两轮网格搜索,用不同的参数多次运行上面的 XGBoost 模型,对 XGBoost 最重要的参数通常是 max_depth 和 gamma。

经过两轮网格搜索,这将模型得分提高到了81.5%——预测提高了 2.5%。比从数据集中删除所有坏数据更好的结果。然而,在这两轮之后,我可以看到收益递减,所以停止了 XGBoost 的工作,看看是否有其他算法可以做得更好。

用支持向量机(SVM)改进模型

代码: GitHub

我以前读到过,对于只有轻微可微数据的非线性问题——换句话说,男人和女人非常相似——支持向量机(SVM)是一个很好的模型。除了很好地忽略异常值,它还采用了与其他模型非常不同的方法。简单地用这个问题来解释,大多数算法会寻找男性和女性之间的细微差别,并试图画出那条线。大多数人会犯错误,因为很难找到一个好的界限。

“不,谢谢,”SVM 说。它选出了最具男子气概的西尔维斯特·史泰龙和最具女性魅力的斯嘉丽·约翰松。它用这些作为比较点来决定一个人是男是女。在一个性别差异非常模糊的世界里,这比另一种方法稍微好一点。对于更多的二进制问题,它就不太适用了。

然而,如果我的问题是过于非线性,SVM 将会受到影响,因为它仍然需要一些线性空间来运行它运行的大多数“内核”——内核本质上是它用来在性别之间绘制的形状类型,比如围绕男性的一个圆。但是,您可以通过添加该形状要环绕的尺寸来使其更具线性。

为了做到这一点,我增加了每个人格特征之间关系的栏目。

首先,这意味着平均每个特征的所有答案,得到 16 列。

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

其次,我给每个关系都加了一栏,比如敏感和支配的关系。16 列变得更多。

最后,我通过网格搜索,找到 SVM 分类器的最佳参数,并再次进行 k 倍交叉验证。

结果:82%!

这不是一个很大的改进,但对于一个快速而肮脏的解决方案来说,这仍然是一个改进。成功!

哪种性格特征最能预测性别?

代码: GitHub

当然,做了这个预测后,我想看看哪些性格因素能很好地预测性别。为此,我使用了 XGBoost 的特性重要性算法。感谢确认偏差,这些不会让你惊讶!不过,请注意,这些是模型认为合适的个性特征。有可能存在一个更好的模型,它提出了一组不同的重要特征。然而,鉴于我得到的良好精度,这是不太可能的。

预测绝对受敏感性支配。然而,重要的一点是,模型认为所有的特征都很重要:所有的特征都用于预测,因此所有的特征在性别之间都不同(或者它们之间的关系不同,因为这是非线性的)。

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

额外收获:哪种性格特征最能预测年龄?

代码: GitHub

无意中搭建了一个年龄分类器(对,分类器,所以试图预测一个具体的年龄),得到了一个有趣的结果。到目前为止,“我马上做完家务”这个问题是特定年龄的最大预测因素。

然而,当切换到年龄回归变量时,即试图建立一个从个性预测年龄的方程时,结果却很好。“抽象”人格因素描述了一个人如何倾向于陷入沉思,或者现实和脚踏实地。

这出乎意料地令人难过。随着年龄的增长,我们大大失去了想象的倾向。

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

结论

  1. 根据一个人的性格测试结果来预测他的性别并不奇怪。我说这并不奇怪,有三个原因,首先是因为性格测试是由一个寻找将我们分开的最大特征的人开发的。男人和女人通常是分开的,他会选择一些他注意到的性别。其次,因为社会仍然是围绕性别规范构建的。为了证明这一点,一个非常有趣的后续研究将是,考虑到该数据集提供了回答者的国家,如果性别规范更灵活的国家(比如欧洲国家)比性别规范非常严格的国家更难预测性别。第三,因为有证据表明女性在生理上比男性更敏感。
  2. 性格随年龄变化!同样,出于上述第一个原因,这并不奇怪。年龄受抽象性支配,抽象性描述了我们想象事物的倾向,而不是强烈地活在当下。
  3. 如果是为了解决业务问题而构建的,那么一段没有任何进一步模型优化的 10 行代码对于大多数情况来说已经足够好了。它会让我们达到 78%的准确率。应用我所有的相关知识只让我达到了 82%。令人害怕的是,普通算法有多好,而对于一天诚实的工作来说,这种改进相对来说又有多小。

代码和工具

代码: GitHub

工具:Python,xgboost

我的网站:【https://rian-van-den-ander.github.io/

原载于 2019 年 8 月 23 日https://rian-van-den-ander . github . io

你能预测顾客是否会在网站上购物吗?

原文:https://towardsdatascience.com/can-you-predict-if-a-customer-will-make-a-purchase-on-a-website-e6843ec264ae?source=collection_archive---------6-----------------------

使用 XGB 分类器和随机森林分类器根据客户的行为来预测他们是否会从某个网站进行购买。

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

Source

概观

本文讨论了我们为一个电子商务网站提供的客户行为数据的分析。我们从讨论我们这个项目的动机开始。然后我们将讨论数据集及其特性。然后我们最初的数据探索和特征工程。最后,我们将描述我们用来预测网站访问者是否会购买的模型,这种模型的结果,以及我们从这些模型中收集的见解。由马丁·贝克叶姬·李坦维·莫迪萨莎·奥佩拉杰克森·罗斯马特·兹洛特尼克合著,作为我们商业数据科学最终项目的成果。

动机

在美国,大约 9%的零售总额来自电子商务网站。事实上,像亚马逊这样的公司已经创建了零售帝国,成为一个如此巨大的电子商务网站。随着电子商务在当今经济中越来越流行,对于该行业的企业来说,了解影响网站访问者购物的因素并能够将注意力放在潜在客户身上是非常重要的。我们认为,如果能够预测网站访问者的购买行为,这将是一件有趣的事情,因为这可能会有许多影响,例如电子商务网站能够更好地定向广告或找出可能导致销售增加的因素。

数据特征及初步探索

该分析中使用的数据是加州大学欧文分校的机器学习知识库中提供的在线购物者购买意向数据集。该数据集的主要目的是预测该特定商店网站访问者的购买意图。数据集中的变量可以分为三类:与用户登陆的页面相关的数据、Google Analytics 指标和用户访问数据。如果你很好奇,想知道更多关于数据的细节和特性,你可以点击查看

否则,让我们直接开始探索吧。在最初研究数据时,我们注意到的第一件事是标签的不平衡。在这个数据集中,85%的网站访问者最终没有进行购买,这是因为大多数人只是浏览橱窗,通常并不想购买。

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

Distribution of visitors that didn’t make a purchase and those that did

我们也很想知道是否有某个月份比较突出,或者某个月份的顾客购买率比其他月份高,比如在冬季假期期间,人们可能会因为打折或送礼而进行更多的网上购物。然而,令人惊讶的是,随着夏季流量的下降,大多数网站流量发生在 5 月,而大多数购买发生在 11 月,其购买量几乎是 5 月的两倍。

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

Distribution of purchasing and non-purchasing site visitors over months

我们注意到的最后一件事是,客户倾向于从如下所示的相同类型的地方访问网站。不幸的是,提供数据集的网站没有更详细地描述每种流量类型,我们只能假设它们与直接流量形式或间接流量形式相关,如来自另一个页面的引用或谷歌搜索。

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

数据清理

为了清理数据,我们首先将分类变量和布尔变量(访问者类型、月份、周末、收入)更改为一次性编码变量和虚拟变量。接下来,我们将初始数据集中作为字符串列出的所有数字都改为整数。接下来,我们将数据分为 X 和 Y 数据框,并探索 X 数据中的相关性,以检查共线性。我们注意到与页面相关的数据都是高度相关的(左图),所以我们用在每种类型的页面上花费的平均时间(右图)替换了这些变量,并消除了共线性问题。随着数据的清理和共线性的消除,我们可以放心地进入项目的分析部分了。

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

Correlation chart of original data (left), correlation chart of data with collinearity removed (right)

建模和特征选择

在我们的分析中,我们最终决定使用三种不同的模型:SGD 分类器、随机森林分类器和 XGB 分类器。他们都能够为我们提供足够的准确性分数和 AUC 分数。

线性分类

我们尝试的第一个模型是简单的线性分类模型。为此,我们利用了 sklearn 的 SGD 分类器。估计器使用带有随机梯度下降(SGD)学习的线性模型。在每个样本处,损失的梯度被估计,并且模型基于学习速率被更新。

这个带有默认参数的简单模型实际上给了我们非常好的结果。我们设法用这个模型获得了 87.7%的准确度分数和 0.76 的 AUC 分数。

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

Linear classifier model code snippet and accuracy/auc score

随机森林分类器

我们运行的下一个模型是随机森林分类器。这确实需要一些参数调整来优化其性能。起初,我们在数据集的所有特征上运行模型,并且能够实现 88.7%的更高准确度,但是 AUC 分数下降到 0.728。经过大量调整后,我们意识到特征选择可能是进一步提高精度的最佳方法。

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

Random forest classifier code snippet and accuracy/auc score

特征选择

已经有了这么好的准确性分数和 AUC 分数,我们决定尝试特征选择,看看是否有可能进一步增加我们模型的分数。通过使用 sklearn feature_selection 的 chi2 来完成特征选择。它能够为我们提供一个我们的特征列表和它们的重要性分数。最后,我们选择删除 chi2 中得分为 3 或更低的特性。这将最终删除 5 个功能,如 Jul、OperatingSystems、TrafficType 等。

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

Code snippet of chi2 feature selection and each features given importance score

随机森林分类器(特征选择)

在去掉最不重要的特征后,我们重新运行随机森林模型,看看它是否能产生更好的结果。特征选择 RF 模型比我们在每个特征上运行的模型产生更好的结果。它将准确性分数提高到 89.9%,将 AUC 分数提高到 0.771

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

Random forest classifier code snippet with feature selection and accuracy/auc score

XGBoost 的分类器(特征选择)

我们在数据集上运行的最终模型是 XGB 分类器,其特征选择已经在之前的 chi2 中使用过。这最终成为我们的模型,AUC 得分最高,为 0.773,准确率高达 89.3%。然而,即使 XGB 分类器是 AUC 得分的最佳模型,我们运行的每个模型的得分都在彼此相对较小的范围内,这表明选择任何模型都已被证明是足够的。

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

XGBoost classifier code snippet and accuracy/auc score

结论和未来工作

据估计,大约有 19.2 亿人在网上购物。这大约占世界人口的 25%,而且这个数字还在快速增长,预计到 2021 年将达到令人印象深刻的 21.4 亿人。显然,能够从在线流量预测电子商务销售额对任何公司都是有益的。从我们的结果来看,公司应该专注于提高页面之间的移动性,以鼓励用户浏览不同的产品,因为页面价值是决定是否购买的最重要的特征之一。此外,诸如 5 月和 11 月之类的特定月份具有更高的购买频率,这意味着电子商务公司应该利用这些月份并提供额外的销售和交易来鼓励产品销售。虽然我们的数据及其在更大范围内的应用存在局限性,但我们的分析表明,基于我们能够从数据集中提取的特征,可以在一定的信心水平内预测网站访问者的购买行为。

为了进一步改进这个项目,我们认为能够更好地塑造网站访问者的背景的数据将是重要的。可以使用的可能数据点是用户购买历史、第三方数据、愿望清单等。这将使我们能够更好地分析潜在客户的重要特征和特点。最后,添加类别权重可能是有用的,这将对错误分类代表不足的类别增加更大的惩罚,以便减少假阳性或假阴性。这将减少不平衡数据的偏差,而不会对代表性不足的样本进行“过度训练”。

如果您想查看更多信息:

包含代码和数据集的该项目的 Github 库

参考

UCI 的机器学习知识库数据集:UCI 机器学习知识库。(2018).网上购物者购买意向数据集。2019 年 12 月 10 日检索,来自https://archive . ics . UCI . edu/ml/datasets/Online+购物者+购买+意向+数据集

电子商务总销售额信息:萨卡尔,o .,波拉特,o .,卡特西奥卢,m .,&卡斯特罗,Y. (2018)。基于多层感知器和 LSTM 递归神经网络的在线购物者购买意向实时预测。神经计算和应用(31)。https://doi.org/10.1007/s00521-018-3523-0

结论电商统计:法学,t . j .(2019 . 11 . 20)。19 个强大的电子商务统计数据将指导您在 2019 年的战略。检索自https://www . ober lo . com/blog/ecommerce-statistics-guide-your-strategy。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值