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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

评估分类模型时要考虑什么

原文:https://towardsdatascience.com/what-to-consider-when-evaluating-your-classification-model-a1092ddcc1df?source=collection_archive---------24-----------------------

通过选择正确的评估指标,构建可靠的机器学习模型

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

安娜·涅克拉舍维奇摄于佩克斯

分类任务中的大量工作放在特征工程和参数优化上,这是理所当然的。这些步骤对于构建具有健壮性能的模型是必不可少的。然而,如果您选择用错误的评估标准来评估这些模型,那么所有这些努力都将付诸东流。

目前,有很多方法可以量化一个模型的性能。然而,由于机器学习术语的混乱,很容易忽略这些指标之间的区别,并随意选择它们。

不幸的是,这样做会妨碍模型满足目标的能力。

例如,模型的功能之一是提供洞察,在随后的分析(例如 A/B 测试)中,哪些特性应该进行研究或实验。如果你依赖于一个用错误的评估标准训练的模型,你将冒着把你的时间、精力和金钱投入到探索错误的变量中的风险。

因此,明智的做法是花时间了解不同评估指标的含义,它们是如何计算的,以及它们何时最有用。

关键术语

在讨论任何指标之前,有必要介绍一些在比较模型预测和实际值时使用的关键术语。

模型进行的分类会导致四种结果之一。

一个真阳性反映了机器正确预测阳性病例的结果。

真否定反映了机器正确预测否定情况的结果。

一个假阳性反映了一个机器将一个阳性预测分配给一个阴性病例的结果

假阴性反映了机器将阴性预测分配给阳性病例的结果。

为了更好地理解这些术语,考虑一个检测信用卡欺诈的模型。

真正的正面结果需要正确地将交易识别为欺诈。

真正的负面结果需要正确地将交易识别为合法。

假阳性结果意味着将合法交易识别为欺诈。

假阴性结果意味着将欺诈性交易识别为合法交易。

这些预测结果充当用于导出分类模型的许多评估度量的组件。

让我们来看看其中的几个。

评估指标

1.准确(性)

这是迄今为止最简单的指标。

精度可通过以下公式计算:

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

这一指标在现实生活中不受欢迎。因为它不区分假阳性和假阴性,所以对于不平衡的数据集来说,这是一个可怕的选择。

2.精确

精度指标类似于准确度指标。它惩罚假阳性而不考虑假阴性。

其值可通过以下公式计算:

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

如果您想避免误报或对误报更宽容,这是一个有效的度量标准。

例如,医疗专业人员有足够的动机来避免假阳性。诊断一个病人患有一种他们根本没有的疾病会导致治疗或手术,而这些治疗或手术本来就没有必要。这反过来会对接受他们护理的病人造成更大的伤害。此外,这种错误的预测会导致名誉损失和一连串的诉讼。

3.回忆

召回率度量可以被认为是精确度度量的对立面。这个度量惩罚假阴性并忽略假阳性,而不是惩罚假阳性并忽略假阴性。

召回指标可通过以下公式计算:

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

考虑之前的疾病诊断案例。虽然假阳性对医疗专业人员来说没有吸引力,但假阴性也是如此。未能诊断出患者实际患有的疾病或状况的成本将导致他们被剥夺必要的治疗。

4.F-1 分数

在许多现实生活中,假阳性和假阴性都没有吸引力。因此,精确度和召回率可能不足以评估模型的性能。

幸运的是,人们可以使用 f-1 分数指标来平衡精确度和召回率,而不是分别跟踪这两个指标。

f-1 得分指标通过以下公式计算:

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

考虑到它的适用性,当我接手分类项目时,这是我个人的首选指标。

对于许多不希望出现假阴性和假阳性的领域和学科,f1 分数是一个很有吸引力的选择。

5.F-beta 分数

使用 f1 分数的一个警告是,它同等地权衡了精确度和召回率。然而,可能有这样的情况,一个精度可能比回忆更重要,反之亦然。

f-beta 指标非常适合这种情况。它可以通过以下公式导出:

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

如果您希望精度指标优先于召回指标(即限制误报),请选择低于 1 的 beta 值。

如果您希望召回指标优先于精确度指标(即限制假阴性),请选择大于 1 的 beta 值。

结论

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

照片由 Unsplash 上的 Prateek Katyal 拍摄

为您的分类模型选择评估指标可能不像数据争论和功能工程那样耗时。

然而,它仍然对你的项目或研究的最终结果有相当大的影响。花时间考虑最适合该模型的指标可以确保令人满意的最终结果。

我祝你在机器学习的努力中好运!

如果你不能对你的产品进行实验,该怎么办?—因果推理 I

原文:https://towardsdatascience.com/what-to-do-if-you-cant-run-experiments-on-your-product-causal-inference-i-f6950bf10681?source=collection_archive---------28-----------------------

简单介绍因果推理及其在产品开发中的应用

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

https://en.meming.world/wiki/Confused_Nick_Young

最近 AB 测试已经成为产品开发团队的黄金标准。在产品上运行实验有助于团队理解每个变化对他们的关键度量的增量效应,并逐渐改进他们的产品。然而,建立能够有效运行实验的基础设施是非常昂贵的。因此,作为一名产品分析师,您经常需要找到其他方法来量化特性变化对关键指标的影响。在这一系列的文章中,我们将探索为什么实验是理解因果关系的最佳方式,以及在没有因果关系的情况下可以使用的其他因果推理技术。

  1. 理解实验的重要性
  2. 因果推理的统计方法
  3. 因果推理的机器学习

为了理解实验的重要性,让我们快速了解一些关键术语及其定义。我们尤其需要理解混杂因素的概念。

混杂因素

混杂因素是一个独立于我们正在测试的变化的因素,但可能会对我们的关键测试指标产生影响。这些可能是外部因素,如时间和地理位置,也可能是内部因素,如对您的实验产生影响的不同产品变化。

例如,如果你的产品是基于用户的爱好,比如游戏或锻炼,那么星期几很可能会对你的产品产生混淆的影响。他们很可能会在周末比平日更多地接触你的产品,因为他们很可能会在周末有更多的空闲时间来从事上述爱好。

同样,用户的国家或地理位置也会对他们如何使用你的产品产生很大的影响。例如,如果你的产品专注于赌博,世界上不同国家对赌博的不同态度会对用户如何使用你的产品产生巨大的影响。

现在我们对混杂因素有了更好的了解,让我们看看如何用实验数据和观察数据来处理这些混杂因素。

实验数据

实验数据使我们能够控制这些混杂因素,进而使我们能够对变化是否导致我们的关键测试指标增加或减少做出强有力的声明。在产品实验中,用户被随机分配到不同的组。然后给每一组展示产品的不同版本,实验数据是用户参与每个版本的方式的总结。由于这种随机分配,随着用户样本量的增长,每个混杂因素下每个组的分布变得类似于同一混杂因素下整个用户群的分布。因此,每个组都很好地代表了整个用户群,并且与其他组几乎相同。然后,可以使用测试指标直接比较不同的版本,以了解哪个版本最吸引人。

让我们举一个真实世界的例子来帮助理解这个想法。让我们假设获取用户的渠道是实验的混淆因素。这可能是由于不同渠道传递的信息不同,因此通过某些渠道获得的用户对您产品的期望与通过其他渠道获得的用户不同。类似地,这可能是由于来自不同渠道的用户所表现出的不同层次的意图。一个积极寻找你的产品的有机用户比一个点击了脸书广告的用户更有可能被吸引。

下图显示了一个假设的移动应用程序获得的用户的渠道分布。正如我们所看到的,渠道在整个用户群中的分布反映在每个控制和治疗用户组中。这是由于上面提到的随机分配。现在,控制组和治疗组中因渠道而对产品更感兴趣或不太感兴趣的用户比例相等。因此,我们可以直接比较两组的测试指标,以了解哪个版本更好地独立于混杂因素。

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

实验数据的通道分布(图片由作者提供)

在这一点上值得注意的是,我们可以很容易地测量通过每个渠道获得了多少用户,因此如果渠道是一个混杂因素,我们可以很容易地看到这种影响。如果我们不能观察到我们的混杂因素呢?随机分配的妙处在于,它将这一概念扩展到了无法观察到的混杂因素。

让我们假设用户的头发颜色是我们实验的一个混杂因素。我们假设的应用程序允许用户在打开前置摄像头的情况下应用滤镜。让我们假设,在我们不知道的情况下,用于这些过滤器的面部识别算法对某些颜色的头发比对其他颜色的头发更有效。这将意味着一些用户会比其他人有更好的体验,头发的颜色将是一个我们无法观察到的混淆因素。尽管我们无法测量这种混杂因素,但在足够大的样本量上进行随机分配将确保两个用户组具有相同的用户头发颜色分布,如下图所示。

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

实验数据的发色分布(图片由作者提供)

观测资料

观察数据是收集的数据,没有假装随机分配给每个版本。在这种情况下,用户被分配到基于时间、地理或一些其他混杂因素的每个版本。例如,我们可以在一个新特性发布之前和之后对用户进行分组,或者只在某些地区发布该特性。

在这种情况下,由于缺乏随机分配,很可能每个组在一个混杂因素下的分布将不同于同一混杂因素下其他组的分布。因此,我们不能仅仅根据各个团队如何参与其中来直接比较不同版本的测试指标。

让我们用前面的例子更仔细地看看这个。让我们假设我们已经在给定的日期发布了我们的特性,并且想要基于群组日期来划分我们的对照组和治疗组。在功能发布前 2 周内安装我们应用程序的所有新用户都是控制组的一部分,在发布后 2 周内安装我们应用程序的所有新用户都是治疗组的一部分。

下图展示了我们团队的渠道分布情况。对照组有更多通过脸书广告获得的用户,而治疗组有更多通过谷歌广告获得的用户。让我们假设通过脸书获得的用户由于信息与产品一致而更加投入。因此,通过脸书获得的用户比通过谷歌获得的用户有更高的参与度。由于两组之间的渠道不平衡,这意味着对照组将具有比两组平衡时更高的参与度指标,类似地,治疗组将具有比两组平衡时更低的参与度指标。如果我们要直接比较两组的测试指标,那么 Channel 将成为一个混杂因素,扭曲我们的实验结果。

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

观测数据的通道分布(图片由作者提供)

我们如何控制混杂因素?

能够控制混杂因素的第一步是能够测量它们。时间、地理和渠道等混杂因素很容易衡量,因此我们可以控制它们。然而,在没有实验设置的情况下,更难测量的混杂因素,如上述示例中用户的头发颜色,更难控制。

我们可以对实验数据进行的分析是一个强大的工具,可以帮助我们了解产品变化对关键指标的因果影响。但是如果不可能获得实验数据,我们该怎么办呢?有几种不同的技术可以用于观察数据。我们可以使用统计方法,比如不同类型的加权,或者机器学习方法。

因果推理的统计方法

统计方法通过加权参与度来解释组间混杂因素下分布的不平衡。本质上,如果两组在混杂因素下具有相同的分布作为潜在的用户基础,我们将使用它们来计算度量标准。一旦我们做到这一点,我们就可以直接比较不同组之间的计算结果,从而宣布获胜者。

让我们重新看一下渠道的例子,看看实际情况。下面,左边,我们看到的是各个群体的分布,以及获取用户的渠道下的用户基数。图像的右侧显示了应用统计方法后的组。

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

应用统计因果推断方法后的渠道分布(图片由作者提供)

再次值得注意的是,这些统计方法只能应用于可观察的(即可测量的)混杂因素。

在本系列的下一部分,我将探索可用于此练习的不同统计方法。我将探索的方法包括:

  • 分层
  • 逆概率加权
  • 倾向匹配

因果推理的机器学习方法

一些方法使用机器学习来计算出你的变化对你的关键指标有什么影响,同时控制混杂因素。

如前所述,值得注意的是,这些最大似然法仅适用于可观察(即可测量)的混杂因素。

在本系列的后面部分,我将探索可用于本练习的不同的 ML 方法。我将探索的方法包括:

  • 受控回归
  • 隆起建模
  • 元学习者

我希望这篇博文有助于解释为什么 AB 测试允许我们以比其他方法更强的方式陈述每个变化的因果影响。我还希望它介绍了因果推理技术在产品分析中的应用。请关注本系列的下一部分!

参加一年的 Kaggle 比赛会有什么收获

原文:https://towardsdatascience.com/what-to-expect-from-doing-kaggle-competitions-for-a-year-405836191705?source=collection_archive---------25-----------------------

我已经参加了一年的卡格尔比赛——这里有好的方面也有不好的方面

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

克里斯托夫·高尔在 Unsplash 上拍摄的照片

Kaggle 是最大的数据科学竞赛平台。如果你是一个数据科学初学者,你可能已经多次听到过进行几场 Kaggle 比赛的建议。在过去的一年里,我参加了大约 4 次为期 2 个月的比赛,我发现它们非常有帮助。将他们添加到我的个人资料后,我开始找自由职业者的工作,甚至全职数据科学工作,所以我也将在这里详细谈论这一点。

选择 Kaggle 竞赛

我想给你的一个建议是,你在选择你想参加的比赛时要有策略。就我个人而言,我知道我想进入医疗领域,我知道医疗领域目前有点依赖图像。所以我选择了监督图像分类竞赛、分割和物体探测竞赛。我一个都没赢,但这种经历已经足够了。

以下是您可以期望了解到的内容:

  1. 探索性数据分析

数据科学项目的第一步始终是理解您正在处理的数据。有很多这样做的教程,但是相信我,你必须经历为多个项目这样做的过程,才能真正理解和获得技能,因为这很难只是教。不同的项目使用不同的数据,因此在不同的环境中技术总是不同的。一个好的数据科学家知道在给定的场景中使用哪种技术是最好的,以最好地理解和构建潜在的问题。

2。挑选模型并装配它们

这是我最喜欢的部分,我想也是很多人最喜欢的部分。然而在大多数项目中,你将面临选择一个最先进的模型并使用它的挑战。在许多竞赛和现实世界的项目中,你没有时间去完成所有的项目并实施它们,所以你必须对你的选择有战略眼光。您还必须正确理解为什么您的实现没有像预期的那样工作或者给出了糟糕的结果。即使结果很好,你也必须明白为什么。这是数据科学家的一个常见错误,他们从一个模型/实验转到另一个模型/实验,而没有充分分析他们已经做过的实验,因此他们以令人失望的结果告终。

3。开源协同工作

经过多次比赛,我开始注意到这个趋势。在每场比赛中,最终的高分解决方案都是建立在所有开源的好解决方案之上的。直到比赛的最后两个星期,竞争者将不断地发布高分的核仁。这对您来说总是一个学习这些内核、理解它们并在它们之上进行构建的绝佳机会。

4。机器学习项目技巧和优化

在几场比赛的过程中,我总是发现获胜的解决方案有一些小的优化,对他们有利的一点点提高性能。这是你在网上、媒体上或书中找不到的东西。你将不得不去竞争、设计和观察其他人的解决方案,以开始理解这些模式,甚至可能自己开发一个。

我如何利用这些项目来提升我的形象

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

Unsplash 上由 Bram Naus 拍摄的照片

这是一个枝节问题,但我认为值得一提。我发现,如果你试图通过竞争获得一份数据科学的工作,仅仅参加竞争并忘记它可能是浪费你的时间。如果你不在网上展示你的作品,没人会知道。每次比赛后,我都确保自己对结果进行了适当的反思,理解为什么我会排在前 x%以及我本可以做得更好。之后,下一步是我在 Medium 上写一篇关于我的经历的文章,并写一篇解释获胜解决方案的文章。

您还应该在 GitHub 存储库中正确地格式化和记录您的代码,并在您的文章中添加指向该存储库的链接。最后,确保在你的 LinkedIn 个人资料上添加竞争对手、你的 Kaggle 个人资料和结果,这是相当重要的一步。我发现,在一遍又一遍地正确完成这三个步骤后,人们开始注意到我,并且因为我为我所做的比赛进行的“在线演示”,我已经收到了多个数据科学咨询邀请和一个全职工作邀请。

你从卡格尔比赛中学不到的东西

Kaggle 比赛是一个非常好的起点,但它们不是一切。在我开始获得咨询工作后,我发现你在这些竞争中学到的只是第一步。不要误解我的意思,它们非常有用,但它们并不全面。

在您清理数据、构建高性能模型和一切之后,下一步将是将该模型推向生产。这是一个相当具有挑战性的步骤,伴随着许多问题,例如:

  1. 我应该在哪里部署这个模型?客户端还是服务器端?
  2. 我如何监控该模型的性能?
  3. 我是否有足够的人工智能可解释性度量标准来呈现给项目的涉众?
  4. 我如何证明这个模型将适用于真实世界的数据分布,而不仅仅是它所训练的分布?
  5. 这种模式能满足客户的性能需求吗?如果没有,我该如何改善?

有些问题很难回答,有些问题是开放式的。但是,好消息是,在有了真实世界的经验之后,你可能会给出好的答案。

记录什么?来自 Python ETL 管道!

原文:https://towardsdatascience.com/what-to-log-from-python-etl-pipelines-9e0cfe29950e?source=collection_archive---------18-----------------------

ETL 管道的详细日志结构!

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

学分- 爆发

作为我工作的一部分,我一直在将一些在传统的基于工具的框架上开发的 ETL 工作转换成 python 框架,并且遇到了一些挑战。这几个挑战是编排、代码管理、日志、版本控制等。对他们中的一些人来说,在工具上开发他们并不需要太多的努力。但是,在像 python ETL 这样的手写代码中,这些都是相当大的挑战!这就带来了一个挑战,也就是我们今天的话题!

此外,我们今天主要关注的是“什么”,而不是描述“如何”,因为平台上已经有许多好文章。

词汇:

  1. 介绍
  2. ETL 框架
  3. 日志的结构!!
  4. 使用我们的日志结构的示例 ETL 作业。
  5. 代码位置。

简介:当我们在工具上设计和开发 ETL 管道时,我们关注像源、目标对象、转换逻辑和一些处理管道的支持任务这样的组件。这些工具还将为所有正在运行的作业生成日志,并且可以通过其内部界面进行监控。基本上,我的意思是说开发/维护日志在工具中并不是一项具有挑战性的活动。而在 python 中,这是一个需要处理的独立活动。今天,在我们的帖子中,我们将讨论 ETL 作业的基本框架,我们可以在任何管道中记录的细节的粗略想法,然后我们将它们组织到我们的 ETL 代码中,最后,我们将开发一个记录日志的示例场景。

ETL 框架:正如我们已经知道的,有不同种类的 ETL 作业,如合并/上插流程、分段加载、SCD 2 加载、增量作业、直接插入加载等。所有这些 ETL 作业都有一个非常基本的结构(如下面的 python 所示),即调用管道中的模块、提取模块、转换模块和加载模块的主要功能,现在,我们可以使用下面的框架来确定 ETL 日志的外观。

def extract():
    pass

def transformation():
    pass

def load():
    pass

def main():
    extract()
    transformation()
    load()

if __name__=="__main__":
    main()

日志的结构:当我们勾勒出 ETL 工作的蓝图时,让我们试着列出一个粗略的想法,我们可以从工作中跟踪哪些细节。

我们可以记录的一系列细节—

  • 显示初始化的元素/组件,如文件夹位置、文件位置、服务器 id、用户 id 详细信息、作业中的流程详细信息
  • 显示提取阶段详细信息,如源文件名、源文件计数(如果需要)、文件格式、文件大小、源表名、源数据库连接详细信息(除了任何秘密身份证明(用户/密码))、文件/源表缺失或无法获取数据消息时的任何异常或错误。
  • 显示转换阶段的详细信息,如在数据处理期间内存不足时的失败/异常消息,以及任何数据/格式转换的详细信息(如果需要)。
  • 显示加载阶段详细信息,如文件/目标位置、加载的记录数、加载失败、任何数据库加载的约束、加载摘要详细信息。
  • 显示作业摘要,如流程运行时间、内存使用情况、CPU 使用情况,这些也可以在提取、转换和加载级别进行跟踪,以均匀地确定作业的瓶颈。

现在让我们把上面的细节整合到我们的 ETL 框架中,看看我们的日志结构是什么样子的!

##basic config
##logging.config.fileConfig('logging.conf')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

#job parameters config
config = configparser.ConfigParser()
config.read('etlConfig.ini')
JobConfig = config['ETL_Log_Job']

formatter = logging.Formatter('%(levelname)s:  %(asctime)s:  %(process)s:  %(funcName)s:  %(message)s')
##creating handler
stream_handler = logging.StreamHandler()
file_handler = logging.FileHandler(JobConfig['LogName'])
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

def extract(counter):

    logger.info('Start Extract Session')
    try:
        pass
    except ValueError as e:
        logger.error(e)
    logger.info("extract completed!")

def transformation(counter):
    logger.info('Start Transformation Session')
    pass
    logger.info("Transformation completed,data ready to load!")

def load(counter):
    logger.info('Start Load Session')
    try:
       pass
    except Exception as e:
        logger.error(e) def main():

    start = time.time()
    ##extract
    start1 = time.time()
    extract()
    end1 = time.time() - start1
    logger.info('Extract CPU usage {}%'.format(psutil.cpu_percent()))
    logger.info("Extract function took : {} seconds".format(end1))

    ##transformation
    start2 = time.time()
    transformation()
    end2 = time.time() - start2
    logger.info('Transform CPU usage{}%'.format(get_cpu_usage_pct()))
    logger.info("Transformation took : {} seconds".format(end2))

    ##load
    start3 = time.time()
    load()
    end3 = time.time() - start3
    logger.info('Load CPU usage {}%'.format(psutil.cpu_percent()))
    logger.info("Load took : {} seconds".format(end3))
    end = time.time() - start
    logger.info("ETL Job took : {} seconds".format(end))
    logger.info('Session Summary')
    logger.info('RAM memory {}% used:'.format(psutil.virtual_memory().percent))
    logger.info('CPU usage {}%'.format(psutil.cpu_percent()))
    print("multiple threads took : {} seconds".format(end))

if __name__=="__main__":
    logger.info('ETL Process Initialized')
    main()

而且,如果您观察上面的代码结构,我已经创建了一个配置文件来维护所有作业级别的详细信息。通过将该文件导入到您的代码中,您可以利用代码的不同部分,包括用于日志记录。

etlConfig.ini:

##ETL jobs Parameters

[ETL_Log_Job] ##Job name
Job_Name = etl_log_job.py
LogName = etl_log_job.log
TgtConnection = Customers.db
SrcConnection = Customers.db
SrcObject = customer_file.csv
TgtObject = customer##Add more job details as needed

使用我们的日志结构的示例 ETL 作业:

import logging.config
import time
import psutil
import configparser
import pandas as pd
import sqlite3##basic config
##logging.config.fileConfig('logging.conf')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)#job parameters config
config = configparser.ConfigParser()
config.read('etlConfig.ini')
JobConfig = config['ETL_Log_Job']formatter = logging.Formatter('%(levelname)s:  %(asctime)s:  %(process)s:  %(funcName)s:  %(message)s')
##creating handler
stream_handler = logging.StreamHandler()
file_handler = logging.FileHandler(JobConfig['LogName'])
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)def extract():logger.info('Start Extract Session')
    logger.info('Source Filename: {}'.format(JobConfig['SrcObject']))try:
        df = pd.read_csv(JobConfig['SrcObject'])
        logger.info('Records count in source file: {}'.format(len(df.index)))
    except ValueError as e:
        logger.error(e)
        return
    logger.info("Read completed!!")
    return dfdef transformation(tdf):
    try:
        tdf = pd.read_csv(JobConfig['SrcObject'])
        tdf[['fname', 'lname']] = tdf.NAME.str.split(expand=True)
        ndf = tdf[['ID', 'fname', 'lname', 'ADDRESS']]
        logger.info('Transformation completed, data ready to load!')
    except Exception as e:
        logger.error(e)
        return
    return ndfdef load(ldf):
    logger.info('Start Load Session')
    try:
        conn = sqlite3.connect(JobConfig['TgtConnection'])
        cursor = conn.cursor()
        logger.info('Connection to {} database established'.format(JobConfig['TgtConnection1']))
    except Exception as e:
        logger.error(e)
        return
    #3Load dataframe to table
    try:
        for index,row in ldf.iterrows():
            query = """INSERT OR REPLACE INTO {0}(id,fname,lname,address) VALUES('{1}','{2}','{3}','{4}')""".format(JobConfig['TgtObject'],row['ID'],row['fname'],row['lname'],row['ADDRESS'])
            cursor.execute(query)except Exception as e:
        logger.error(e)
        return
    conn.commit()
    logger.info("Data Loaded into target table: {}".format(JobConfig['TgtObject']))
    returndef main():start = time.time()##extract
    start1 = time.time()
    tdf = extract()
    end1 = time.time() - start1
    logger.info('Extract CPU usage {}%'.format(psutil.cpu_percent()))
    logger.info("Extract function took : {} seconds".format(end1))##transformation
    start2 = time.time()
    ldf = transformation(tdf)
    end2 = time.time() - start2
    logger.info('Transform CPU usage {}%'.format(psutil.cpu_percent()))
    logger.info("Transformation took : {} seconds".format(end2))##load
    start3 = time.time()
    load(ldf)
    end3 = time.time() - start3
    logger.info('Load CPU usage {}%'.format(psutil.cpu_percent()))
    logger.info("Load took : {} seconds".format(end3))
    end = time.time() - start
    logger.info("ETL Job took : {} seconds".format(end))
    ##p = psutil.Process()
    ##ls = p.as_dict()
    ##print(p.as_dict())
    logger.info('Session Summary')
    logger.info('RAM memory {}% used:'.format(psutil.virtual_memory().percent))
    logger.info('CPU usage {}%'.format(psutil.cpu_percent()))
    print("multiple threads took : {} seconds".format(end))if __name__=="__main__":
    logger.info('ETL Process Initialized')
    main()

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

##Log output for above sample job

我们还可以对日志做一些改进:

  1. 通过为作业实现配置/参数文件,维护作业日志也将变得容易。
  2. 我们可以添加系统级的摘要细节,以便以后优化或识别作业中的瓶颈。能够识别提取、转换和加载的 CPU 性能/使用情况可以为开发人员提供更多帮助。
  3. 如果我们正在加载目标,尝试跟踪加载摘要,这将有助于识别加载数据的一致性。
  4. python 中的日志模块在 ETL 作业中使用简单有效。
  5. 此外,提供进程 id 或线程 id 详细信息可能有助于以后在其他平台上对进程进行故障排除。
  6. 给出服务器或节点上作业运行的详细信息将有助于挖掘根本原因。

样本代码位置:

https://github.com/Shivakoreddi/ETL-Log-Structure

感谢您阅读这篇文章,未来的工作将涉及开发 python ETL 作业的其他挑战,如编排、代码管理、版本控制等。

参考:

  1. 埃利奥特·福布斯,https://tutorialedge . net/python/python-logging-best-practices/(2017)

在量子机器学习框架中寻找什么

原文:https://towardsdatascience.com/what-to-look-for-in-a-quantum-machine-learning-framework-b7a7c281aa4f?source=collection_archive---------20-----------------------

相关量子机器学习框架综述

量子机器学习要不要入门?看看 动手量子机器学习用 Python

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

作者弗兰克·齐克特的图片

在量子机器学习中,我们的目标是利用量子力学现象,在机器学习算法的计算方面实现巨大的飞跃。

机器学习仍然是一项相对较新的技术。但与量子计算相比,它已经相当成熟了。看看框架的前景就明白了这一点。

当深度神经网络的成功在 2014 年左右结束了第三个人工智能冬天时,我们看到许多框架争夺霸权。有些名字已经快忘了,比如 Theano 和 Caffe。其他的被合并了,比如 Keras。似乎只有两家留下来了,谷歌支持的 Tensorflow 和脸书支持的 PyTorch。

我们见证了关于编程语言的同样的整合。Python 成为机器学习领域的主流编程语言。它使朱莉娅和 R 沦为下层阶级。

量子计算太新了。它甚至不是一项真正的技术。我们刚刚开始弄清楚如何建造量子计算机,以及我们可以用它们做什么。

尽管量子计算的理论已经存在了一段时间,但是实际的量子计算仍然处于绝对的劣势。

在量子计算领域,我们可能会看到类似的整合。当然,你会希望使用一个持久的框架。然而,赢家尚未确定。选手们正在准备。

这些选手是:

  • IBMs Qiskit
  • 谷歌的 Cirq
  • 亚马逊的 AWS Braket
  • 微软的 Q#和 Azure Quantum
  • 里盖蒂的森林
  • 世外桃源的潘尼莱恩
  • 再来几个…

对于现在进入该领域的学生和从业者来说,决定从哪个框架入手并不容易。所以显而易见的问题是,如果你想应用量子机器学习,应该使用哪一个?

像早期的机器学习库一样,量子计算框架在函数数量、语法和抽象级别上有所不同。

较低层次的框架更接近硬件。虽然它们提供了高度的控制,但在开发端到端应用程序时,使用起来可能会很麻烦。

相反,更高级别的框架抽象掉了许多硬件相关的细节。因此,它们使应用程序的开发变得方便,但缺乏细粒度的控制。

当我们谈论量子机器学习时,我们更倾向于应用领域。但是,正如我们所说,我们希望使用量子计算进行机器学习算法的计算。所以对于量子机器学习来说,量子计算是达到目的的手段。因此,要想在量子机器学习方面取得成功,你很可能会选择一种更高级的语言。

量子计算框架对于将想法转化为量子计算机可以执行的指令至关重要。不幸的是,量子计算机是罕见的设备。除非你为享有特权的学术机构或量子计算机的制造商之一工作,否则你不会有机会接触到最先进的量子计算机。

然而,这并不意味着你不能使用量子计算来增强你的机器学习算法。量子计算框架提供了模拟器,您可以使用它在经典计算机上运行量子算法。当然,你的经典计算机计算电路的速度不会像量子计算机那样快。事实上,你的经典电脑会慢得离谱。所以,虽然你不会观察到任何加速(整体性能会比一个纯粹的经典算法差),但你可以使用模拟器来验证你的量子算法是否有效。如果真的如此,你将为量子计算机的问世做好准备。因此,您将希望使用一个提供强大模拟器的框架。

最后,除非你已经是量子机器学习的专家,否则你需要培训材料。例如,这些可能包括在线教程、书籍和 API 参考。如果你不知道如何使用,最好的框架也不会有帮助。

大致说来,有两种培训材料。有开发商提供的官方资料。社区提供的材料已经使用了这个框架。

对于任何人来说,官方资料都是入门的基础。如果一个框架没有文档,即使是专家也无法了解它。大量的官方文件表明开发者对他们的野心有多认真。这是一项投资,制作培训材料需要花费大量的时间和金钱。一个框架开发者不能够或者不愿意投资他们的框架不是一个好的迹象。

但是新来的人通常很难理解官方文件。框架开发人员通常假设领域的先验知识,在我们的情况下,量子机器学习。他们专注于解释如何用他们的框架实现某个算法。但他们通常不会笼统地解释算法。虽然这是完全合理的,但它并不能帮助你开始。

相反,社区驱动的资源也很有味道。它们的范围从初级到高级,再到专家级。此外,具有较大社区的框架更有可能持久。而且,当你遇到问题时,有一个你可以联系的人就像金子一样好。

总而言之,这些是你可能想要在量子机器学习框架中寻找的东西:

  • 开发商是谁?
  • 抽象级别(是否支持更高级别的机器学习算法?)
  • 提供模拟器
  • 学习材料(官方、社区)

考虑到这些事情,让我们看看现有框架的当前状态。

IBM Qiskit

Qiskit(量子信息软件包)是 IBM 的量子软件开发框架。Qiskit 是免费和开源的。

它由四部分组成:

  • QASM 是运行在硬件级的量子指令语言
  • Terra 是底层 API,可以让你在量子脉冲层面编程,形成量子门。
  • Aqua 是支持量子化学、优化问题和机器学习中使用的算法的高级 API。
  • Aer 是一个高性能的量子电路模拟器,甚至包括噪声模型。

IBM 对它的量子计划是认真的。他们是量子硬件的主要制造商之一。他们提供了大量的 API 文档和一本全面的教科书。然而,即使这本教科书看起来是初级的,它面向的是(量子物理学的)专家而不是初学者。作为一名物理学家,你可能会发现阅读起来很容易,但是如果你是一名软件开发人员,你很快就会迷失方向。

Qiskit 周围的社区非常大,非常活跃。当然不能和 Tensorflow 或者 PyTorch 周边的社区比。但是相对于其他框架的社区,Qiskit 似乎是最大和最活跃的。

此外,IBM 甚至主办了一个旨在向高中生教授量子计算的暑期学校。

最后,Qiskit 与 PyTorch 集成。它允许你用量子对应物替换部分神经网络。

而且,还有一个噱头。IBM 让你在 IBM 云中免费运行量子电路——在真正的量子硬件上。然而,你必须等待几个小时,直到他们计算出你的电路。而且,他们提供的量子计算机只有不到十个量子位。你的本地模拟器对于这么小的电路来说也是相当快的。所以,与其说这是一个严肃的开发工具,不如说是一个营销工具。

但是,所有这些东西形成了一个令人信服的一揽子计划。因此,IBM Qiskit 是我目前量子机器学习的头号框架。

谷歌 Cirq

Cirq 是谷歌的量子 SDK。Cirq 是一个开源 Python 框架,用于“创建、编辑和调用有噪声的中尺度量子(NISQ)电路”。Cirq 处于 alpha 阶段,还没有(还没有?)一款谷歌官方产品。

Cirq 与 Qiskit 基于相同的抽象。此外,它还提供了一些库和扩展。他们的数量将来可能会增加。然而,最令人兴奋的已经存在。这是张量流量子。与 Qiskit 的 PyTorch 集成一样,TensorFlow Quantum 允许您在神经网络内部使用量子电路。

官方文档非常广泛,质量也很好。在我看来,在谷歌的积极支持下,这个社区正在稳步发展。

Cirq 附带模拟器,您可以使用 Colab 在云中运行您的代码。

毫无疑问。谷歌的目标是赢得量子霸权的竞赛。而且它的几率也不算太差。

我一定会去看看 Cirq。特别是,TensorFlow Quantum 有望成为我不想错过的工具。

微软 Q#

微软另辟蹊径。又来了。当所有其他框架都使用 Python 作为编程语言时,微软带来了自己的语言。这是 Q#。它与 quantum 开发工具包相集成,后者包括一个 Quantum 模拟器和实现量子算法的库。

微软也提供模拟器,你可以在云端运行你的代码。

官方的培训资料好像也挺不错的。这个社区异常活跃。你可以在那里找到相当多的教程。

但是,说实话,我想用 Python。Qiskit 和 Cirq 与 PyTorch 和 TensorFlow 集成。即使他们没有,唯一的事实是他们使用 Python 使得将你的量子电路与你想让它工作的任何东西集成起来变得容易得多。如果您使用的编程语言没有提供所需的绑定,这种事情就更难了。

亚马逊 AWS Braket

我不得不承认。我是亚马逊 AWS 的忠实粉丝。它是我最喜欢的云提供商。但是,当谈到量子计算时,我仍然有些怀疑。AWS Braket 相对较新。它于 2020 年 8 月启动。网上有一些培训资料。但不如其他选手的素材广泛。

我看不出使用 AWS 软件工具有什么好处。但是,这是一个很大的“但是”,AWS Braket 提供了对真正的 IonQ 和 Rigetti 量子硬件的访问。因此,如果你的目标是在一个高效的环境中运行量子算法,AWS Braket 可能是你要走的路。但是,AWS 不再是免费的了。

里盖蒂计算公司

Rigetti 是领先的硬件制造商之一。它提供了自己的量子编程框架 py Quil——一个针对低级量子指令集 Quil 的绑定。PyQuil 从量子门和经典运算中生成 Quil 程序。它带有一个编译器(quilc)和一个模拟器,量子虚拟机(QVM)。最重要的是,你可以使用 Rigetti 的量子云服务(QCS)或 AWS Braket 在真正的量子处理器(QPUs)上运行 PyQuil 程序。

Rigetti 在他们的 Forest SDK 中捆绑了所有这些组件。它针对作为协处理器运行的近期量子计算机进行了优化,与传统处理器协同工作,运行混合量子经典算法。

Rigetti 没有 IBM、Google、微软那么大。因此,学习材料不像其他框架那样广泛。作为初学者,皮奎尔和森林不会是我的第一选择。但是对于有经验的开发人员来说,它们无疑是一个有效的选择。

Xanadu

最后,还有 Xanadu —(不仅仅是)另一家量子硬件制造商。他们的 Python 库“草莓场”允许你设计、模拟和优化量子电路。进一步,它提供了解决实际问题的高级功能,包括量子机器学习。

Xanadu 为专业人士提供全面的学习材料。然而,很难找到由更广泛的社区提供的材料。

是什么让 Xanadu 不仅仅是另一个量子硬件供应商有了“PennyLane”这个名字。PennyLane 是一个跨平台的 Python 库,用于量子计算机的可微分编程。不局限于世外桃源自己的量子框架,森林。但是它集成了前面提到的所有设备,IBM Qiskit、Google Cirq、微软 QDK、Amazon Braket 和 Rigetti Forest。

因此,它是量子机器学习的一个令人兴奋的框架。还有一个相当活跃的社区。然而不幸的是,大多数资源都希望你了解机器学习和量子算法。

结论

四大云提供商争夺量子计算市场的霸主地位。IBM 和谷歌遵循类似的方法。他们提供 Python 框架和大量培训材料。此外,它们与主要的机器学习框架相集成。这些提议很合理。

微软追求一条不同的道路,因为它不是建立在 Python 之上的。最后,亚马逊采取了转售的方式。他们宁愿出售真正的量子硬件,而不是专注于开发自己的平台。

quantum 的竞争对手 Rigetti 和 Xanadu 提供了令人惊讶的有吸引力的框架。尤其是 Xanadu 的 PennyLane 有可能成为集成量子计算和机器学习的主要框架。

量子机器学习要不要入门?看看 动手量子机器学习用 Python

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

在这里免费获得前三章。

扩展您的数据团队时需要注意什么

原文:https://towardsdatascience.com/what-to-look-for-when-scaling-your-data-team-986e00024d6a?source=collection_archive---------33-----------------------

行业笔记

管理者在壮大团队时应该寻找什么?什么工具可以为他们已经负担过重的员工提供帮助?

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

布鲁克·卡吉尔Unsplash 拍摄的照片

对于任何与数据打交道的人来说,你可能都听过“数据是新的石油”这句话然而,在今天的数字经济中,如果数据真的是新的石油,我们将需要更多的人在钻井平台和炼油厂工作,以满足需求。

如今,数据驱动的创新已经成为各行各业几乎所有公司的战略要务。但是,随着组织扩大在分析、AI/ML、商业智能等方面的投资,数据团队正在努力跟上业务预期的步伐。

例如,许多数据工程师经常因构建和维护数据管道所需的时间而不堪重负。由于这些积压,数据分析师和数据科学家经常会遇到严重的延迟,这使得他们无法访问工作所需的数据。

使用石油类比,可以这样想:每当石油钻井平台和管道出现延误,炼油厂也会减速,这可能对分销渠道产生重大影响,并最终影响开车前往加油站的消费者。数据也是如此,数据生命周期中的任何积压都会导致延迟,阻碍下游用户和消费者访问、分析数据并从中获得洞察力。

企业只会继续更加依赖他们的数据团队。然而,最近的调查研究表明,96%的数据团队已经达到或超过了他们的工作能力。为了避免让他们的团队陷入困境,许多组织将需要从效率和团队规模两方面大幅扩展其数据团队的运营。事实上,79%的数据团队表示基础架构不再是扩展问题,这将重点放在了人员和团队能力上。但是经理们在壮大他们的团队时应该寻找什么?什么工具可以为他们已经负担过重的员工提供帮助?

打造你的梦想团队

数据团队的经理必须做的第一步是评估他们团队的当前技能,使其与业务的预期需求紧密结合。这样做可以让经理们更深入地了解面试候选人时需要具备哪些技能。需要记住的一些注意事项包括:

  • 现有团队的技能组合。从数据中创造价值通常需要数据工程、数据分析师、数据科学家等技能组合。通常在较小的团队中,一个人可能会负责几项技能。评估您的团队在哪些方面可以利用更多的帮助和/或经验,有助于确定高杠杆雇用。这种团队扩展也是一个很好的机会,可以发现团队中有人负责的工作部分,并愿意减少分配的时间——例如,数据工程可能是一个少数人投入的领域,但他们更愿意将时间集中在分析上;引入数据工程师不仅给实践注入了激情,还允许其他人将更多的时间分配到他们自己的激情和增值活动上。
  • **识别瓶颈。**数据收集、清理、聚合、分析、机器学习、报告等,共同创造商业价值。像所有的瓶颈一样,缓慢的交付或者一个瓶颈的问题通常会限制整体的产出,从而降低团队的士气。即使分析师的数量远远超过数据工程师的数量,如果最终输出仍然主要受分析师带宽的限制,那么在那里增加更多仍然是有意义的。如前所述,很容易发现某项技能,例如数据科学,发现团队中不存在该技能,并寻找该员工。然而,表现最好的团队会全面评估这一技能差距:也许企业还没有做好有效管理机器学习的准备,或者需求可以通过不需要 FTE 的平台来满足,节省下来的成本更适合加倍使用另一套技能。
  • **牢记现代数据团队的新鲜度。**我们都见过招聘信息要求拥有 10 年的工作经验,而这项技术才问世 6 年。尽管数据实践已经存在了一段时间,但某些角色和技能组合(如现代数据科学、数据工程)却是新出现的。在寻找优秀的候选人时,更多地依靠相关职位的过往经验,而不是准确的职位/职称,通常是有意义的。例如,一名软件工程师可能拥有数据工程师的所有合适背景,但却没有非常具体的职称。

问正确的问题

接下来,管理者需要仔细考虑面试过程。除了一般的、人力资源要求的面试问题,经理们应该把面试作为一个机会,深入了解每个候选人的技能、抱负和才能,以了解他们如何有利于你不断发展的团队。以下是经理应该讨论的话题:

  • **对数据空间的热情。**不管是行业新手还是长期从业者,最好的候选人继续保持对学习的好奇心和对交付的热情。为了表现出这种兴奋,经理可以讨论候选人接下来有兴趣尝试的过去的项目/副业或实践和技术。
  • **技术敏锐。**数据领域的大多数角色都有技术成分。分析师通常需要对 SQL 有很强的掌握(不仅仅是基本的 group by 和 counts,还要回答更复杂的问题,比如使用 lead/lag 来确定用户事务之间的中间时间)。通过一个小的真实世界(不是编程难题)的 SQL 分析可以帮助确保候选人的技能满足要求。在“构建”会议中一起解决这个问题需要更多的时间,但对于如何与候选人一起工作,通常会有更深刻的见解。这些相同的构建会议适用于团队中的其他角色。
  • **配合商业目标。**大多数数据团队没有将“研究”作为最终目标。相反,研究、模型训练、提供报告、创建分析和建议都与创造结果相关联。经理们应该审查候选人拥有成果的动力以及他们的商业头脑。考虑到数据团队与公司领导层的密切关系,他们的商业敏锐度尤为重要。

小心危险信号

回到我们的“数据是新的石油”类比,众所周知,石油钻塔上的高强度工作不适合心脏虚弱的人。我们都有过这样的经历——无论是在钻井平台、数据团队,还是基本上任何类型的团队——一名候选人通过了面试,在纸面上看起来很棒,并正式加入你的团队。直到后来你才意识到这个人可能不太适合这个角色或这个团队。虽然后知之明是 20/20,但在招聘过程中有几个常见的危险信号需要注意。

  • **候选人的兴趣和公司面临的挑战不匹配。**一些数据工程师被他们的管道处理的数据量所驱动,其他人则被他们能够提供的商业价值的速度所驱动。对于一个每天处理几 GB 数据的小型创业公司来说,一个兴奋地每天处理 TB 数据的数据工程师可能会在招聘过程中自行选择,但如果他们不这样做,就有必要仔细检查一下引起候选人兴趣的其他因素。
  • **只对数据职责的一部分感兴趣。**除了可以支持细粒度数据角色和职责的超大型数据团队之外,大多数团队需要几种不同类型的任务来交付最终业务价值。不愿意参与一些额外的数据清理和验证(传统上可能属于数据工程的任务)的候选人可能不是团队成功的最佳人选。

自动化:你最喜欢的新同事

企业在运营上扩展其数据计划的能力需要的不仅仅是增加团队规模。如今,数据团队被跟上业务快速发展所需的大量工作淹没,因此经理们应该考虑寻找自动化工具,使团队能够更快、更有效地完成工作,并且不会成为数据生命周期的瓶颈。

自动化技术使团队能够从本质上“自动驾驶”小规模任务,因此他们可以专注于更复杂和创新的业务计划。前面提到的调查研究还发现,大多数数据专业人员(73%)将自动化视为推进其职业发展的机会。最终,有了合适的团队和合适的技能范围,这些自动化工具可以作为一种显著增加团队带宽和产出的方式。

我认为另一种自动化技术的巨大价值是 flex-code。尽管低代码和无代码工具大量涌现,但是许多团队已经发现了这些技术的严重局限性。挑战在于,这些工具中的许多并没有给团队在需要时定制代码的能力,这可能阻止团队收获低代码或无代码的好处。

虽然依赖于业务需求,但最终还是由团队经理来决定如何最好地扩展他们的团队,以及在哪里实现自动化以实现他们的总体目标。但是,有了合适的人和合适的工具,企业可以更快地提供见解,并从他们最有价值的新自然资源:数据中获取更大的价值。

数据科学面试前要学什么

原文:https://towardsdatascience.com/what-to-study-before-a-data-science-interview-3a971a1ce78d?source=collection_archive---------12-----------------------

帮助我成功通过面试并获得工作机会的指南!

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

照片由 Maranda VandergriffUnsplash 上拍摄

一个周五的下午 2 点 34 分,你正在结束一周的工作,准备在周末放松一下,或者还在申请几份工作,这时你收到一封来自人力资源招聘人员的电子邮件,询问你是否有空参加第一轮面试。这是个好消息!现在该怎么办?

这时候,你停下来,计划,准备你的面试。

求职是我们每个人经历的最具挑战性的过程之一。数小时的准备、对面试的焦虑、冒名顶替综合症、无助于让你平静下来的咖啡——肾上腺素激增会让你濒临把一切都搞砸的边缘。

关于如何准备数据科学面试,没有完美的手册,除了你在网上或在你的同事和网络中做的研究。话虽如此,每次我经历几次数据科学面试过程(如果你准备充分,这并不可怕),我都会意识到,有一件事是肯定的——成功没有秘密;它是准备、努力和从失败中学习的结果。

为面试做好充分准备是在招聘过程中减少损失的唯一可行的方法。在开始准备之前,磨砺你的武器——一份好的投资组合、沟通技巧、对数据科学概念的清晰理解,以及更多本博客所讨论的内容。

1.研究工作描述(用心学习)

数据科学工作面试可能会令人生畏。招聘经理可能会在面试官的技术环节中要求你用 Python 编写问题代码、开发逻辑或使用 SQL 查询数据。招聘人员需要了解你如何将数据技能与商业决策和战略联系起来。

在这种情况下,你应该根据工作描述来准备与招聘人员的对话。

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

来源:谷歌招聘——数据科学家,工程

数据科学是一个非常多样化的领域,在技能和工作角色方面有细微差别。甚至在你开始准备面试之前,你可以关注的第一件事就是确定所需技能的哪些部分最符合你的专长/兴趣。仅仅是通读一下职位描述,就能让你对面试中的内容有所了解。

专业提示: 你可以保留一份讲义,上面有关于职位描述、技能和优先资格的笔记,或者一份完整的职位描述,上面有重点,以确保在你的回答中涵盖这些内容!

2。关于面试过程的研究

我会这样开头——总是问人力资源招聘人员“我应该在面试中期待什么?

表明你想为面试做好充分准备是没有坏处的。有了面试结构的概念,你可以开始回顾数据科学、数据分析师和机器学习面试中的常见问题。

资源

  1. 通读其他求职者在 Glassdoor 上发布的类似职位的面试问题
  2. 研究公司文化,关于团队,当前项目,与其他企业的合作(基本上跟踪公司!)
  3. 准备一个你是如何听说这家公司的故事,职位名称。你对这家公司了解多少,为什么你对这个行业感兴趣(如果这家公司不是一个知名公司)——仅仅说你是从 LinkedIn 上看到这份工作是不够的!

3.技术准备

一旦你确定了工作描述和面试形式,下一步就是开始你的技术准备。

现在,在面试前两天,你不能开始学习 TensorFlow,或者 ANN、CNN 和 RNN 之间有什么区别?是时候了,你复习一下。

没有特别的顺序,我会这样准备:

A.编程/编码技能

在开始准备编码问题之前,要考虑的一个要点是确定面试的形式:技术电话面试(TPS)、现场面试或两者兼有。

对于手机屏幕,编码面试通常会使用在线 ide,如 HackerRank、CoderPad 或 CodeSignal。对于现场面试,您可以在现场面试前使用在线 IDE,或者在聊天过程中使用白板。

  1. LeetCode 是练习和掌握编程技能的绝佳资源。关于每个主题的大量问题是大公司在面试、社区帮助等过程中常见的问题
  2. Hackerrank 是公司进行技术评估和远程面试的首选平台,这个平台也让你练习解决竞争性编程挑战
  3. CodeForces、编码忍者是其他一些你可以用来练习的流行平台
  4. 为编程语言准备一份备忘单(或者你可以从 Google 下载一份)——Python、R、Java 和 SQL 之类的外围技能

(这些资源将对您有所帮助,因为您已经具备了一些数据科学方面的知识。对于初学者,我会推荐https://www.learnpython.org/或者 DataCamp。

— — — — — — — — — — — — — — — — — — —

B.统计数字

  1. 如果你想在面试前复习你的统计学概念,StatQuest 就是你的圣经。通过大约 5-6 分钟的短视频,Statquest 真正带您了解统计的基础知识,如直方图、何时使用决策树和神经网络。(我更喜欢 YouTube 频道)
  2. **O’Reilly《数据科学家实用统计学》——**这本书将从数据科学的角度教你统计学,这本书的前三章应该足够你做初步的面试准备了
  3. 机器学习的统计方法— 这本书为机器学习实践者提供了统计方法的速成课程(当你有时间阅读整本书时)

— — — — — — — — — — — — — — — — — — — -

C.SQL 和 NoSQL

我们生活在一个数据驱动的世界,企业将他们的信息存储在大型关系数据库中。

如果你要面试一个与数据相关的职位,你必须掌握数据库管理、处理和使用数据的概念。同样,对于数据科学家和工程师以及任何想要精通数据的人来说,SQL 是一项很好的技能。正确的数据库知识与了解 pandas、NumPy 等 Python 库或 Tableau 等工具同样重要。

虽然只需要大约两到三周的时间就可以掌握 SQL 的基础知识,但这是一项通过实践逐渐形成的技能。当我过去为我的学校作业写查询时,我什么也不明白——代码的目的和乐观。或许,更像是教长颈鹿跳舞。

当他们说学习 SQL 的最好方法是通过实践时,这是真的!没有 SQL 查询的实际应用,很难将理论付诸实践。但是,我帮你准备好了:

  1. 【W3 schools】**😗*如果你只想记住面试的定义,那就选基础的。通过学习这里的概念,我通过了学校的先决条件测试。
    在线 SQL 编辑器使编辑 SQL 语句、查看结果和练习变得非常容易。它涵盖了 SQL 的基础知识— SELECT、JOIN 语句、WHERE、数据库操作、函数等等。
  2. 可汗学院 有我的雄鹿当谈到免费的,值得注意的关于 SQL,高级 SQL,关系查询,用 SQL 或其他概念修改数据库的课程。有了文档、视频、挑战的素材,我敢肯定,你会找到你需要的一切!
  3. 数据营有一些不错的速成课程,可以帮助你复习面试所需的 SQL 知识
  4. Codecademy 有一些适合初学者的课程来复习这些概念。它带有免费试用,足以为你的面试做准备😉

— — — — — — — — — — — — — — — — — — —

D.ML 算法和库

数据科学面试不可避免的一部分是你对机器学习的了解——从监督和非监督学习的区别到使用 TensorFlow 的神经网络。你永远不知道在面试中会向你抛出什么问题。

我通常会复习我的 ML 概念、算法、库和包(pandas、NumPy、seaborn、matplotlib、Keras,或者任何其他你觉得需要快速阅读的项目相关的内容。

  1. **监督学习:**线性回归、逻辑回归、决策树、随机森林、SVM、朴素贝叶斯、梯度下降、K-最近邻(kNN)等。
  2. 无监督学习: K 均值聚类、层次聚类、异常检测、神经网络、主成分分析(PCA)、独立成分分析、Apriori 算法等。
  3. **算法:**二分搜索法,递归,排序,动态规划,正则化,集成,降维
  4. 数据分析库: pandas,NumPy,Keras,NLTK,gensim,scipy,scikit-learn,statsmodel,TensorFlow,plotly 等。

虽然在面试中,你可能不会被要求从头编写一个深度学习算法,但招聘经理可能会抛出多个业务用例,例如:你如何识别需要续订的人?如何处理 70%数据缺失属性的数据集?

为了帮助你做好准备,我强烈推荐 cheatsheets: Python 和 ML

  1. Python 中的数据科学:熊猫小抄
  2. 数据结构与 Python 备忘单
  3. 收集数据科学备忘单 —一个包含 Python 备忘单的博客,托管在 DataCamp 上,用于 Python 基础知识、数据操作、机器学习、深度学习、大数据、数据可视化、IDE (Jupyter 笔记本)
  4. 安德烈·布尔科夫(Andriy Burkov)写的一本 136 页的书,仅用几个词就涵盖了机器学习的核心概念,从符号和定义,基本算法,数学,神经网络和深度学习,实践问题,无监督的机器学习,以及许多字里行间和字外的信息。

快速提示:根据您之前对数据科学的了解,您阅读这本小说的体验将会截然不同。我建议你在准备面试的时候读这本书,而不是在时间紧迫的时候

— — — — — — — — — — — — — — — — — — —

E.数据可视化

我正在读一篇关于“应对数据可视化采访”的文章,围绕这个主题的一点挖掘让我意识到围绕你所做的可视化“准备”你的对话是多么重要。

当谈到技术面试时,我们对 SQL、编码或统计问题有一个马眼式的看法,而没有关注数据可视化在今天对企业来说有多重要。在大多数情况下,数据科学家只关心问题的深度,但对于数据科学通才或数据科学独角兽来说,这是完全不同的游戏!

招聘经理往往会评估你设计有效可视化的能力,如果你了解设计经验,对业务的影响,可视化的错误对利益相关者意味着什么,以及各种类型的可视化的正确用例。

为了提高这些技能,

  1. 将你所有的可视化展示推给 Tableau Public(在面试过程中,你可以随时在聊天中滑动链接到你的个人资料,面试官肯定会看一眼)
  2. 如果你要把你最雄心勃勃的可视化项目卖给一个投资者,就要为它做一个推介
  3. 参考 Tableau 小抄,比如Tableau 图表上的终极小抄或者由 Intellipat 写的小抄
  4. 对于 PowerBI 来说,我喜欢花 3/4 个小时在 LinkedIn 上学习,参加像 Power BI 基础培训这样的课程。如果你不是一个有能力的人,但需要用它的知识去面试,那就参加一个速成班吧
  5. 探索市场上的新工具,如 Alteryx、Altair、Google Analytics 等,并与时俱进

— — — — — — — — — — — — — — — — — — —

F.数学和概率

如果我被问及数据科学数学中最重要的主题,那将是微积分、线性代数、概率和统计。

我在专业环境中接触数据科学数学的大部分时间都是在开发机器学习模型的时候;当您要创建一个函数或公式来表示

  1. 可汗学院 提供简短实用的线性代数课程,涵盖最重要的主题,适合大量应用的角色
  2. 麻省理工学院的开放式课程 提供了一门严谨的线性代数课程,内容涵盖视频讲座和课程材料
  3. 用于机器学习的线性代数复习 是一个 6 集视频系列,可以在 1 小时内观看。这些视频是吴恩达机器学习课程的一部分,只有当你之前有线性代数的先决知识,并且只需要快速复习(比如在面试之前)时,才推荐这些视频。)
  4. 《矩阵食谱》(PDF ) 是滑铁卢大学关于矩阵代数的优秀参考资源
  5. 多变量微积分复习 是解决实际问题的多变量微积分快速视频复习

如何在有限的时间内准备面试

如果你在最后一分钟被叫去参加一个工作面试,如果你认为在面试前的有限时间里你不能完成任何有意义的事情,那就太遗憾了。不管你之前做了什么准备,总有一些事情你想要修改。在另一种情况下,如果你对自己掌握的技术概念非常有信心,现在是为公司和角色做准备的好时机——仅仅为可能出现的问题做准备是远远不够的。

如果我要在一次好的面试和一次成功的面试之间划一条线,那就是对公司和你的未来进行研究的时间。当你在信息电话前有一个滴答作响的时钟时,以下是我如何准备自己:

1.打开求职申请,阅读职位描述

在面试前,至少花 5-10 分钟阅读最初的职位描述,熟悉术语。张贴出来,好的下一步可能是将工作职责和技能与你的简历联系起来。这样做的必要性在于,如果你对该职位的基本期望了解不足,你将如何正确地推销自己,展示你在该领域的技能或经验。

此外,这份准备工作会引导你回答一些问题,比如*“为什么你很适合这个职位”或者“你的背景对这个职位有什么帮助?”*

2.掌握工作描述中特别列出的技能

一旦你看到了职位描述,看看这份工作需要什么样的技能。

例如,如果重点是 SQL,你可以谈谈你写过的最复杂的 SQL 查询,面临的挑战以及你是如何解决的。或者您从涉及上述数据科学建模的在线课程/认证和项目中学到的工具。

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

3.查看当前新闻或社交媒体账户

我通常会在谷歌上搜索公司,然后导航到新闻选项卡,阅读公司最近的谈话——季度业绩、领导层变动、业务的波峰/波谷、该领域最近的头条新闻,或者他们发布的任何消息。当你提出这样的对话时,它会让你成为一个知识渊博、见多识广的候选人,这可能会也可能不会让你优先考虑。

4.磨练你的商业头脑

如果你了解这家公司,它的价值主张,行业和商业模式,那你就成功了一半。根据我的经验,让数据科学家了解数据模型对业务的影响从来都不是一个坏主意。一个了解错误术语对涉众意味着什么的数据科学家肯定能开发出更好的模型。

尝试了解 covid 对行业和公司的影响,COVID 前后的数字(股价、净收入)如何波动,或者公司增长取决于哪些因素。你可能会也可能不会有机会提出这个话题,但如果你足够坦诚,你总能把面试引向你想要的方向。

5.记住你的简历作为你的电梯推销!

大多数面试官会让你看一遍简历来开始面试。对此,你不能说“这写在我的简历上”。招聘人员已经看过了你的简历,只有在这之后你才能参加面试。

这里的目标是了解你的思维过程,你为什么从事简历上列出的项目,你从以前的工作经历中学到了什么——超出了纸上已经写好的内容。

你可以研究一下你的其他项目(把 Github 链接放在手边)——列出 3 到 4 个除了简历上的项目之外你可以谈论的项目

6.记下几个你自己的问题

当被问到时,*“你有什么问题要问我们吗”,问创新的问题。你不能用谷歌式的来描述公司文化。*他们可能会对其他 7 名候选人做出同样的回答,是什么让你与众不同?如果你真的想听,那就另当别论了

如果你没有时间研究这个组织,列出一个详细的问题清单,那就记住几个问题,不管是什么职位和公司,你都可以问。

你可以在手机上记下这些面试后的问题,并根据职位和公司进行调整。我通常会提前说我有多少问题。我通常会提出一些技术性和非技术性的问题,问题细分如下:

  1. 一个关于工具、技术的技术问题,为什么你会想到这个问题
  2. 这是一个业务问题,它解决了我对 covid 的影响等基本问题的好奇心。
  3. 非技术性问题也可以包括类似这样的内容:
    • 在最初的 30/60 天里,你对这个职位的应聘者有什么期望?
      -你最近参与了哪些项目?
      -这个职位上的人可能面临的最大挑战是什么?
      -你最喜欢公司的什么?
  4. 如果面试官没有提到关于招聘过程下一步的问题

击败数据科学面试的秘密

  1. 不要忘记向招聘人员询问面试的结构(30 分钟,电话或视频电话)和面试的形式(编码评估,基于情景的问题,行为回合或人力资源筛选)
  2. 通读其他求职者在 Glassdoor 上发布的类似职位的面试问题
  3. 不要重复在前几轮面试中已经交流过的项目,如果同一个人出现在多轮面试中,这绝对是一个禁忌
  4. 展示你的软技能:沟通、领导能力、自我激励能力
    你可以谈论课外活动或学校/工作之外的活动,当这些技能为你铺平道路的时候,“谈一次”
  5. 准备一些你有信心会以某种方式解决的问题的答案或提示:这将在面试中引导你,让面试不那么令人生畏
  6. 以星形格式回答每一个可能的答案——情境、任务、行动、结果

这就是我的博客的结尾。感谢您的阅读!我希望你喜欢这篇文章。请让我知道哪些技巧帮助你在数据科学之旅中赢得面试。

如果你喜欢阅读这样的故事,并希望支持我成为一名作家,可以考虑使用这个链接注册成为一名媒体会员(我可以赚取一小笔佣金,而不需要你额外付出任何成本!)

数据帐篷快乐!

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事来传达隐含的见解。当她不赶着赶学校的最后期限时,她喜欢喝一杯好咖啡,写关于数据的博客…

为什么我花了这么长时间才找到一份数据科学家的工作

原文:https://towardsdatascience.com/what-took-me-so-long-to-land-a-data-scientist-job-c2dee99b98ca?source=collection_archive---------5-----------------------

以及如何缩短它

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

照片由mārtiņš·泽姆利克斯Unsplash 上拍摄

我从在 Coursera 上完成 IBM 数据科学专业证书开始了我的数据科学之旅。我花了将近两年时间才找到一份数据科学家的工作。

我花了比预期更长的时间才找到这个领域的工作。在花了这么多时间找工作后,我想我知道延长我旅程的原因,我想和你分享一下。

有面试吗?

第一个也是最重要的问题是显示我确实知道一些东西。没有工作经验,很难展示你的技能。在大多数情况下,我甚至不能通过第一步,得到一个技术面试。我觉得人力资源专业人士没有考虑我的简历,因为我缺乏该领域的工作经验。

我得到了很少的技术面试,而且我大部分都做得很好。这让我很开心,也让我有动力通过技术面试。这是一个好迹象,表明我走在正确的道路上,并提高了我的知识。

然而,我很难到达技术面试。解决这个问题的有效方法显然是联网。如果你认识或遇到在这个领域工作的人,至少获得一次技术面试的机会会大大增加。

如果你没有数据科学领域的工作经验,最好的选择是完成项目。我指的不是一两天就能完成的任务。

你需要提出一个问题,并设计出旨在利用数据解决问题的方法。然后,你实施你的方法。你的项目不一定要完成任务或解决问题。然而,你如何分析性地思考,如何处理问题,以及如何使用数据作为解决方案非常重要。我知道做这样的项目很难,但你至少应该试一试。

有时间吗?

我的另一个问题是没有足够的时间。在我学习数据科学的两年中,我不得不保住我的工作(无论如何都与数据科学无关)。所以我只有晚上和周末可以学习。

这不仅仅是有时间的问题。你需要有一个新的思维来学习,并真正学习新的概念和技能。如果你计划在学习数据科学的同时工作,请记住这并不容易。

如果你能致力于学习数据科学,整个过程会变得相对容易。如果你有能力辞职,你可能会更快实现目标。然而,对于一些人来说,包括我自己,这不是一个选项。

你好世界!

软件或编程是数据科学的一项基本技能。仅仅对统计学、机器学习模型有一个全面的理解,或者有一个伟大的分析头脑是不够的。您需要能够使用工具和软件包来实现您的解决方案。

我以前没有任何编程经验。我甚至要上两次“C++入门”课才能及格。这并不是因为它非常困难。我只是对编程不感兴趣。我在大学里学的是电子工程,我不认为我会需要编程技能。我显然错了。

我花了一段时间获得编程技能。我说的不仅仅是熊猫和 Scikit-learn。你需要的远不止这些。我觉得 SQL 是必须的。你还需要真正擅长一门编程语言,最好是 Python 或 r。Git、Spark(或 PySpark)、Airflow、云计算、Docker 是你需要熟悉的一些其他工具。

因此,如果你没有编程背景,就软件工具和软件包而言,你将需要一段时间来做事情。

有足够的工作吗?

在我居住的地方,数据科学家的工作数量有限。这可以被认为是一个环境问题,但它肯定有影响。刚开始学数据科学的时候,职位空缺并不多。然而在过去的两年里,寻找数据科学家的公司数量大大增加了。因此,仅仅考虑空缺职位的数量,我找到工作的机会就比两年前高了。

结论

虽然我花了两年时间才开始从事数据科学家的工作,但我非常高兴我决定转行成为一名数据科学家。自从我开始作为一名数据科学家工作以来,我的动力和热情增加了。

在生产环境中使用真实的生活数据是我们无法通过证书、课程或教程实现的。对我来说,这是一次漫长而疲惫的旅程,但绝对值得。

感谢您的阅读。如果您有任何反馈,请告诉我。

脸书情绪研究给我们的启示

原文:https://towardsdatascience.com/what-we-can-learn-from-facebooks-study-on-emotions-1ec866357c0?source=collection_archive---------17-----------------------

为什么预先设计你的研究对任何研究都非常重要

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

照片由赤脚通讯Unsplash 上拍摄

2014 年,脸书进行了一项名为“ 的秘密社会实验,通过社交网络进行大规模情绪传染的实验证据 ,旨在了解在没有面对面互动和非语言暗示的情况下,情绪是否可以转移。虽然我们今天在很大程度上知道假新闻和充满情绪的内容可以通过社交媒体传递情绪——正如 2016 年美国大选前所证明的那样——但在研究时,尚不清楚或不明确情绪是否可以通过社交媒体互动传递。

这项研究:

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

纽约公共图书馆在 Unsplash 拍摄的照片

脸书与康乃尔大学通信和信息科学系合作,研究了在缺乏面对面互动的大规模社交网络互动中,情绪传染(可转移的情绪状态)是否会发生。这项研究的重点是通过脸书的帖子暴露情绪(积极和消极)是否会改变人们的情绪,这是通过他们在随后的脸书帖子或状态更新中使用的语言来衡量的。该研究是在大约 700,000 个人的群体中进行的,这些人是通过他们的用户 ID 来识别的,并且在一周的时间内进行了两个平行实验。在一个实验中,对于特定的观看,用户对积极情绪内容的接触减少了 10%到 90%之间,而在另一个实验中,用户对消极情绪内容或充满情绪的内容的接触减少了 10%到 90%之间。

然后使用“ ”语言查询和字数统计 ”软件(LIWC)分析随后的状态更新或帖子,以将帖子分类为“正面”、“负面”或“中性”。该研究发现,当新闻订阅中的正面帖子减少时,人们状态更新中的正面词比例下降了 0.1%,而负面词比例增加了 0.04%。相反,当负面帖子减少时,状态更新中负面词的百分比下降了 0.07%,而正面词增加了 0.06%。该研究得出结论,这表明情绪传染纯粹基于文本互动,而不需要面对面的互动或非语言行为(参考文献 1)。该研究还发现,接触较少情绪帖子(积极和消极)的人在接触后的几天里表达能力较低,这表明情绪接触会影响人们的社交媒体参与。虽然人们每天都会经历一系列影响他们情绪的经历,尽管研究表明这些经历的影响很小,但研究得出的结论是,这些都是情绪可以通过社交网络传播的强有力的实验证据。此外,该研究认为,鉴于脸书庞大的社交网络,这些小影响在更大的范围内会累积成更大的后果。

研究设计忽视:

从这项研究中还不清楚是否采取了科学的方法来设计这项研究并分析其结果。为了客观地看待问题,请看下面显示的两个模型。

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

研究设计方法的两种模式。图片作者。

理想的模型是“线性模型”,在这种模型中,你提出一种理论/模型,并在此基础上进行假设、收集样本数据、分析和解释数据、验证其发现并展示出来。但是任何从事过研究甚至实验室实验的人都知道,这与现实相差甚远。这就是为什么我们需要“迭代模型”。实际上,研究者经历了各种自我怀疑、分析、理论、数据收集的反复,甚至是分析原始研究问题的反复,以检查是否提出了正确的问题,以及所采取的方法是否正确。在脸书的研究中似乎没有这样做。该论文承认,这项研究是在 1 周的时间内完成的,旨在观察和收集数据,然后在没有后续纠正或数据收集的情况下进行分析,以宣布情绪可以通过社交媒体互动进行传递。虽然可能在 1 周的数据收集后完成了大量的工作来清理、分析和解释数据,但论文中没有提供甚至暗示在收集的数据中遇到了什么问题、数据质量面临的挑战或对初始假设的挑战的细节。这就好像他们收集数据,分析数据,然后不做任何评估就展示出来。

样本量忽略:

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

Robby McCullough 在 Unsplash 上的照片

鉴于相对于使用脸书的广大用户而言,进行这项实验的人口规模较小(70 万用户被分为两个平行实验),将数据推断到脸书的所有用户,并暗示用户通过新闻源接触到的情绪与之后的感受之间存在联系,似乎有些冒昧。应该注意的是,该研究仅发现用户随后表达的情绪(最多 0.1%)发生了非常小的变化(我们接下来将讨论“情绪”部分),并且没有提供在本次采样中使用的受试者周围发生的背景和事件,以及这些是否会对研究产生任何影响。该研究未能分析或讨论暴露于 90%情感内容的用户与暴露于 10%情感内容的用户之间的情感差异。

忽略算法偏差:

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

照片由马库斯·斯皮斯克Unsplash 拍摄

谈到研究中分析的“情绪”,用于分析的算法或软件是“语言查询和字数统计”软件(LIWC),用于查看“测试对象”的状态更新,以分析其情绪,并将文本分类为充满“积极”或“消极”情绪。应该注意的是,LIWC 仅仅寻找预先编程的关键字的存在来将句子分类为具有积极或消极的情绪(参考文献 2)。凭借其有限的词汇量(915 个单词对英语中的 170,000 个单词(参考文献 2))和孤立地分析单词的内在特征,LIWC 天生无法通过理解上下文、俚语、习语、讽刺、挖苦来完全理解句子并对句子进行分类,并通过其分析带来上下文崩溃(参考文献 2)。

为了正确理解这一点,我使用文本" 对 LIWC 的样本进行了分析,如下所示,太棒了!现在,我不得不花 500 美元修理我的摩托车,因为有人不能在 红灯时停下来。

对任何人来说,这句话都明显带有讽刺和恼怒的意味,因为有人在红灯前不停车就损坏了我的摩托车,这让我很恼火。但 LIWC 没有。LIWC 将这篇文章归类为“积极的”分 97.6 ,负面情绪为零。你可以去 LIWC 的网站试试。

LIWC 进一步澄清说,情感基调的得分越高,信息就越积极。

除了 LIWC 的缺点之外,这项研究忽略了文本附带的任何照片,这些照片可以为研究人员提供分类情绪的背景。LIWC 的输出被认为是表面上的,没有任何数据的支持。被引用来支持 LIWC(参考文献 1)的研究要么没有任何验证工作,要么有证据表明 LIWC 不能破译积极和消极情绪(参考文献 2)。这种对算法偏差的忽视是惊人的,而且更令人震惊的是,这项研究没有解决在“分析”阶段遇到的关于 LIWC 给出的分类的任何问题。

社会科学忽视:

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

照片由内森·杜姆劳Unsplash 上拍摄

这项研究的作者参与了另一项研究,该研究发现,人们通常会在帖子最终被分享到脸书之前进行自我审查(参考文献 2)。由于没有关注分享状态更新的社会背景,并且仅仅关注状态中积极或消极的词语,作者未能理解任何可能改变或偏见实验的潜在情绪或社会背景。虽然作者承认人们经历了一系列影响他们情绪的经历(参考文献 1),但很少信息给出如何在实验中解释这一点及其对结果的影响。该研究的作者认为,鉴于情绪和身体健康之间的良好联系,该研究的发现对公共健康具有重要意义。然而,与使用该平台的用户数量相比,这是对极小样本规模的夸大推断。如果没有适当的上下文来支持用户感受到的情绪或用户看到的帖子背后的上下文,就会出现“上下文崩溃”(参考文献 2),这可能会对一个人的情绪产生不同的影响,并且不能简单地使用 LIWC 软件以非黑即白的方式进行分类。

本研究的伦理问题:

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

蒂姆·马歇尔在 Unsplash 上的照片

这项研究发表后,脸书处于社交媒体愤怒的中心。这项研究提出了一些社交媒体倡导者提出的伦理问题。首先也是最重要的是,脸书在没有知情同意的情况下对 70 万名参与者进行了这项研究。参与者不知道这项研究,或者不允许他们决定是否要参加。让我们用贝尔蒙特报告作为衡量标准来解决伦理问题。这项研究违背了公认的“尊重人”的原则,即把个人当作人而不是测试对象。该研究参考了脸书的数据使用政策,以表明此类研究受用户在注册脸书时同意的条款和条件的约束(参考文献 1)。但是,假设全球所有用户都已经通读了“条款和条件”的每一行是不切实际的。虽然“条款和条件”将作为法律辩护,但使用消费者作为不知情的测试对象背后的道德考虑增加了对脸书的批评,即该公司像使用产品一样使用消费者(参考文献 2),即使用消费者的数据、情感和互动来为他们提供更多的广告和内容。

从这项研究来看,谁从中受益还不清楚。这项研究是否以利他主义的方式进行,以了解一个人在脸书暴露于各种情绪后的情绪损失,并利用结果更好地资助心理健康项目?或者是为了了解脸书是否能更好地理解用户的情绪,以及如何将他们微推至对公司有益和有利的行为模式(参考文献 3)。最后,该研究缺乏一个机构审查委员会,这使得人们不清楚这是一项学术研究还是脸书为其利润而进行的研究。虽然脸书不会在没有彻底审查的情况下向用户发布任何新功能,但缺乏机构审查委员会对该研究及其方法的审查是一个严重的疏忽。

结论:

这项研究对研究设计和伦理考虑的忽视提出了很多问题。如果没有一个合适的设计,这项研究能被接受吗?一旦您接受了条款和条件,知情同意如何发挥作用?合法远非道德,因为合法总是赶上技术的进步。在我们追求“第一”的过程中,我们可能已经失去了产生共鸣的能力。

参考资料:

  1. 社交网络大规模情绪传染的实验证据| PNAS
  2. 为什么脸书实验是糟糕的社会科学
  3. 脸书和公众工程|作者 Zeynep Tufekci | The Message | Medium
  4. 阅读贝尔蒙特报告| HHS.gov

我们能从谷歌的长期 AB 测试中学到什么

原文:https://towardsdatascience.com/what-we-can-learn-from-googles-long-term-ab-test-64e45b649cc4?source=collection_archive---------14-----------------------

避免在线实验中的短期价值陷阱

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

(图片编辑自unsplash.com)

在 AB 测试中,我们关注特定变更的短期影响:

  • 一个新功能会带来更高的转化率吗?
    -设计变更是否会鼓励更多用户使用某个特定功能?

如果答案是肯定的,那么“变更”将对所有用户生效。

但是短期目标可能会与企业更重要的长期目标相冲突。想象一下一家超市提高价格,这可能会在短期内带来更高的利润。但从长远来看,如果更多的顾客选择从竞争对手那里购买,这可能会减少商店的收入。

在这篇文章中,我概述了在线实验的先驱之一 Google 是如何通过运行长期实验来处理这个问题的。以及我们能从这一课中学到什么来确保我们的 AB 测试推动可持续的成功。

权衡用户价值和收入

用户价值和收入之间的权衡似乎并不直观。商家难道不应该通过提供用户价值来获取资金吗?

是也不是。举个例子,想想报纸、杂志或电视节目。对他们的客户来说,看到更少的广告和更多的内容确实更有价值。这对出版商的收入有明显的影响。

这适用于产品开发领域。无论我们是想增加用户保留率、吸引更多用户还是鼓励更多用户使用某个特定功能:任何优化工作背后的长期目标都是增加收入。在进行实验时,我们通常专注于改进其主要组件之一。

对于像谷歌这样的搜索引擎来说,其收入的构成如下:

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

这个等式给出了这样一个观点,即改进其中一个组成部分应该增加总收入。

可惜没那么容易。这些部件经常相互缠绕在一起。一个指标的增加可能会损害收入等式的另一个组成部分。最终,总体影响可能是负面的。

例如,看看每个任务的查询数量。此指标代表用户需要在 Google 搜索上回答问题的尝试次数。正如我们在等式中看到的,这是对总收入的直接贡献。但是降低搜索结果的质量来留住用户可能是增加谷歌收入的糟糕尝试。用户数量(另一个组成部分)将迅速减少,因为越来越多的用户将转向其他搜索引擎,如 Bing 或 DuckDuckGo。

这和 AB 测试有什么关系?

通常,这些效果之间有一个时间间隔。如果谷歌降低了搜索结果的质量,用户可能需要一些时间来决定尝试不同的搜索引擎。在此之前,团队会观察到每个用户的查询量增加,收入也可能略有增加。

在 AB 测试中,我们测量与变化密切相关的指标,这些指标也是收入的驱动因素。使用如此窄的范围节省了时间,并且更容易将我们感兴趣的度量的变化归因于治疗。

但是正如我们所看到的,对我们总体目标(增加收入)的长期影响可能是完全相反的。如果变更可能对用户体验产生负面影响,这种冲突尤其明显。

谷歌试图衡量长期影响

谷歌的团队意识到了这一困境。因此,它试图开发一种方法来评估改变谷歌搜索页面上显示的广告数量的长期影响。

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

谷歌搜索上的广告(作者图片)

除了用户被竞争对手抢走之外,增加广告数量会对整体收入产生更多负面影响。例如,它可能会训练用户忽略广告,这种现象被称为广告盲

这种学习效应会降低用户点击他们看到的广告的比率,并最终降低谷歌的收入。

为了量化显示更多广告和更低点击率之间的长期权衡,该团队进行了一项长期实验。实验分为三个阶段:

  • **前期:**对照组和实验组的经验相同,以确保两组具有可比性。
  • 实验:实验组接触更多的广告。在这个阶段,可以观察到治疗的短期效果。
  • **后期:**两组都再次接触到谷歌搜索的正常体验。在这个阶段,可以观察到实验组的学习效果。如果用户点击广告的频率明显低于未接受治疗的用户,那么实验组的用户就被训练忽略广告。

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

测试谷歌搜索广告曝光度增加的长期效果的实验装置(图片由作者提供)

通过这个实验,团队可以观察广告点击率的变化以及对收入的影响。然后,通过结合短期变化和学习效果,可以计算出整体的长期效果。

在后期,实验组中看到更多广告的用户在看到与对照组用户相同数量的广告时,点击率较低。因此,研究小组确实观察到了学习效应:

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

与对照组相比,两个变量中的用户在后期的广告点击率(图片由 Hohnhold 等人提供)

注意:正如你在上面的图表中看到的,谷歌在实验中包括了第三组。在实验阶段,这种变体的用户看到的广告比对照组少。结果显示,显示更多广告的那一组产生了相反的效果。

如果长期实验不可行呢?

上述方法允许谷歌在改变显示给用户的广告数量时量化短期和长期变化之间的权衡。

此外,该团队可以使用他们的发现创建一个公式,仅使用短期结果来衡量变化的总体影响。当进行 AB 测试时,这个估计可以用作主要度量。

长期实验的弱点

但不仅仅是因为谷歌拥有其他公司难以拥有的资源和流量。这种方法也显示出一些严重的缺陷,这一点已经被一个来自谷歌在必应的朋友的研究团队所强调。

其中,研究小组指出了长期 AB 测试的以下问题:

  • **Cookie 搅乳器:**在试验时,用户在被分入变体之前必须被识别。如果用户不必登录某项服务(谷歌搜索和大多数网站都是这种情况),那么识别用户的唯一方法就是 cookies。由于用户可以随时更换浏览器或删除 cookies,因此保持一致的样本几乎是不可能的。实验进行的时间越长,这个问题就变得越大。

(来源:【Giphy.com )

  • **生存偏差:**增加实验组的广告负载可能会增加用户流失。因此,对服务忠诚度较低的用户流失的可能性更高。因此,实验组在后期可能会有更高比例的忠实用户。在这种情况下,对照组和实验组不再具有可比性。
  • **选择偏差:**由于 cookie 的流失,post 期间检查的群体可能只包括非常忠诚的用户,因此不能代表整个群体。
  • **副作用:**有时候实验会涉及到一些个性化。在后期比较控制组和实验组时,实验组可能会有更好的体验,因为他们的帐户是以更好的方式建立的。
  • 例如,想象一个新的功能,如果谷歌地图用户在回家的路上有大量的交通流量,它会提醒用户。那些用户被提示提供这种信息,这种信息在测试之后也是可用的,并且仍然可以显著地改善他们的体验。

并非所有这些效应都适用于每个长期实验。例如,如果用户必须登录才能使用特定的服务(想想网飞或 Spotify),cookie 流失不是问题。

衡量长期影响的替代方法

虽然有(复杂的)方法来解决或减轻上述副作用,但问题是资源较少的企业如何衡量实验的长期影响。

在评估 AB 测试的成功时,增加客户终身价值应该是指导原则。

简单的答案是,在进行实验时,我们必须选择正确的度量标准。当选择一个特定的目标和衡量标准时,增加客户的终身价值应该是指导原则。应该在充分了解业务的情况下选择决定实验成功的短期指标。

例如,网飞的团队知道,用户留存率与用户参与他们产品的程度高度相关。衡量留存率的显著变化不仅耗时,而且在网飞的案例中,考虑到该公司已经拥有的高留存率,这也很棘手。因此,团队使用用户参与度作为 AB 测试中的主要指标,并作为保留的代理,这更容易测量并提供更快的结果。

这里有一些牺牲(短期)收入来改善用户体验的更多启示:谷歌在进行多项长期研究后,将其移动平台上的广告负载减少了 50%。向用户展示的广告数量大幅减少,这可能会导致收入大幅下降。但事实上,该团队观察到了对谷歌搜索盈利能力的积极长期影响,这是他们网站用户体验显著改善的结果。

结论

对于产品团队来说,带来短期收入增长的变化可能是一个大放异彩的绝佳机会。但我们必须明白,这些立竿见影的效果往往与企业的长期目标不一致。

为了解决这个难题,产品团队应该把客户的终身价值放在实验工作的中心。在我看来,有两个因素至关重要:

  • **实验需要专注于改善用户体验,而不是推动收入的短期增长。**想想谷歌广告减少 50%带来的长期收益。
  • **应该使用对企业长期目标具有已知积极影响的指标来评估实验的成功。**网飞在易受影响但与用户保持率正相关的领域使用敏感指标。

资源

对本文有帮助并提供更详细概述的论文和文章:

  • 着眼长远:这对用户和企业都有好处。
  • 长期在线控制实验的陷阱
    德米特列夫等人。
  • 可信的在线控制实验:科哈维等人解释的五个令人困惑的结果
  • 网飞推荐系统:算法、商业价值和创新。

基于机器学习的业务,我们能从 Zillow 学到什么

原文:https://towardsdatascience.com/what-we-can-learn-from-zillow-on-basing-a-business-around-machine-learning-646ee5daf7e0?source=collection_archive---------6-----------------------

你可以在自己的人工智能策略中应用的十个经验

Zillow 最近宣布退出房屋交易业务,并指责其“即时购买”模式无法正确预测价格。Zillow 还裁掉了 25%的数据科学团队。我们值得从这一事件中寻找教训。

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

Tierra MallorcaUnsplash 上拍摄的照片

单向门的机器学习

杰夫·贝索斯推广了这样一个观点:有些决定是双向的:你可以走进门,如果你不喜欢你看到的,你可以随时走回来。这些决定很容易逆转,正因为如此,它们是实验的理想选择。其他的决定是单向的,很难逆转。

自动化机器学习非常适合双向决策——个性化、推荐、聊天机器人等。通常是双向决定。

然而,对于 Zillow 来说,启动一个翻转房屋项目是一条单行道。他们应该一直在想办法把它做成双向门。

这里有一些方法可以让机器学习项目成为双向的:

  1. 环中人:使用机器学习模型作为决策辅助,而不是作为决策者。Zillow 应该有一个实地的评估人来批准最终的出价。
  2. **从小做起。**比如,在区区一个小区域。或者给你投入到这个项目中的资金设定一个上限。然后,等待。在这种情况下,Zillow 需要等待 6 个多月才能看到最初的投资结果。

看来 Zillow 确实做到了第二点,达到了 2021 年的产能,仔细看了一下投资组合,然后退出了这项业务。从这个意义上说,这不是一场惨败。只是一次失败的实验。影响他们 25%的数据科学团队。看来试点项目本身的成本太高了。

这让我怀疑 Zillow 的高管团队甚至不明白他们的试点在多大程度上是一扇单行道。Zillow 程序的结构——如果当前价格和 6 个月后的估计价格之间的差异足够大,就决定买房子——要求模型在整整 6 个月内都是正确的。

该计划涉及 3 个机器学习模型:

  • 价格估算模型。今天市场上的房子值多少钱?这是 Zillow 的 Zestimate,他们拥有最多内部数据的模型。
  • 维修评估模型。装修房子要卖多少钱?
  • 一个未来价格估计模型。房子 6 个月后会卖多少钱?

让我们一个一个地研究这些模型,因为每个模型中都有有用的经验。

价格估算:设计敏捷系统

我们来看 Zillow 系统中的第一个模型。Zestimate 是他们认为的关键区别,也是他们认为他们可以翻转房子的原因。

价格评估系统并不试图预测未来的价格,只是房子今天的售价。即便如此,它也会经历漂移

机器学习模型中的每个特征都受到漂移的影响-训练数据分布不会与测试数据分布匹配,即使模型学会了不过度拟合训练数据,它学会的是不要以会导致验证数据失败的方式过度拟合数据。该模型仍然依赖于训练/验证/测试数据的分布。然而,未来将与这三者不同。

3 。你需要做持续评估来快速捕捉这些变化。一旦你发现变化,你将需要不断地重新训练你的模型。这是 MLOps 的一个关键方面。

然而,捕捉趋势的开端是困难的——然而,尽管你擅长 MLOps,但在分布变化和捕捉这些变化之间会有差距。这种差距提供了一个机会,用户会在你赶上潮流之前找到一种方法来欺骗你的系统。

4。 寻找用户的行为伎俩。你给那些把东西放在购物车里过夜的人打折吗?用户会开始添加商品,然后走开,等着你给他们发打折券。Zillow 是否对当前出售房屋附近的房屋提供更高的报价?用户将学习并分享这些技巧。

5。 寻找异常的活动浓度。卖家通常比买家拥有更多的信息。他们可能知道什么时候一个机场将要建成,这将导致附近的房价下跌。也许一个新的雇主即将来到镇上。也许利率即将上升。那些知道内情的人会赶在算法流行起来之前卖出。

这种模型监控在游戏和反滥用的情况下非常常见。如果 Zillow 没有做这些我会很惊讶。然而,如果他们发现这种活动,他们可能没有准备好采取什么行动。

6。你将不得不考虑不可避免的损失的可能程度,并且设置断路器以避免在给定的时间范围内在一个社区或时间段内购买过多的房屋。

维修评估:逆向选择

现在,以第二个模型为例——计算修理房子要花多少钱才能让它达到市场预期。这里的风险是逆向选择。想象一下,定价模型几乎确定了房屋的价格。它在 5%的误差范围内得到房子将出售的价格。

很可能会有更多房子被高估(即+5%)的人把房子卖给 Zillow。房子被低估(-5%)的人会更少出售。这是信息不对称的结果,所以 Zillow 会买更多高估的房子,而不是低估的房子。要么 Zillow 给出很少有人接受的吝啬报价,要么出价过高并承受损失。

更糟糕的是,下行风险没有上限,而上行风险却有上限。如果你花 10 万美元买一栋房子,它不太可能卖到 15 万美元。但是有一个很大的风险,房子有一个未公开的地基问题,售价仅为 5 万美元。

**7。如果输入的数据很差,那么 ML 就不是一个好的选择。**信息的不对称导致 ML 模型中卖方和未来买方的信息不一样。因为机器模型的质量更多地是由数据质量而不是算法的复杂程度驱动的,所以在一个你比其他参与者拥有更少信息的市场上玩游戏是一场失败的游戏。

期权定价:不同行业的相似问题

最后,我们来看第三个问题。这是预测未来 6 个月房价的模型。

Zillow 是否恰当地聘请了期货定价方面的专家,还是他们的数据科学团队天真到认为量化交易只不过是时间序列预测?

**8。雇佣合适的专家。**期权定价是一个众所周知的学科,但它不是机器学习。Zillow 所做的期权交易是另一回事。是量化交易。机器学习模型预计世界是静止的,但交易者知道未来的事件将使过去的模式变得无关紧要。没有雇佣合适的专家在很大程度上是管理上的失败。

整体战略

知道这里有三个模型,以整体的方式考虑整个管道的风险是很重要的。

**9。了解模型的局限性。**数据科学家非常了解漂移。房地产经纪人很清楚逆向选择。量化交易者非常清楚基于一个声称能捕捉大部分历史方差的模型进行交易的风险。对于您使用的每种类型的机器学习模型,您需要知道潜在的限制是什么。识别每个模型的风险。

**10。设计业务以分离不同模型的风险。**Zillow 能做些什么来区分这三种模型的内在风险?。他们可以使用他们的价格评估模型,对房屋进行投标,并立即在市场上出售一部分房屋。将风险转移给知道如何处理风险的交易者。

如果他们这样做了,Zillow 就会在市场上以低于公平市价的价格购买房屋,这种业务更适合他们的价格评估模型。

:不用说了,但我还是要说。我住在西雅图,有朋友在 Zillow 工作。ML 是我的团队在 Google Cloud 的投资组合的一部分(公开消息表明他们是 AWS 客户,但 Zillow 也可能是我们的客户。)然而,这里的一切都是我的个人观点,并不反映我的 Zillow 朋友或关于他们工作量的内部信息。

***注 2:***Zillow 可以处理整体风险的另一种方式是建立一个精算团队,对风险进行定价,并长期持有房屋,同时将其出租。然而,美国的租金远低于抵押贷款的服务成本,因此大多数房东押注于价格升值,以弥补拥有住房的沉没成本。

我们喜欢完美的地方

原文:https://towardsdatascience.com/what-we-love-about-prefect-2efdee6ee42f?source=collection_archive---------30-----------------------

它是开源的,与 Kubernetes 配合得很好,并且有一个很好的社区

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

来源:作者

背景故事:为什么我们放弃了库伯弗洛

在我们之前的帖子中,你可以读到更多关于为什么我们对 Kubeflow 不感兴趣的信息。简而言之,我们正在为机器学习项目构建一个参考架构。完成后,它将是我们最喜欢的机器学习工具的集合,加上文档和 Terraform 脚本,以帮助您快速轻松地建立完整的机器学习项目。

我们最初的计划是在 Kubeflow 的基础上构建这个工具,但是这个工具有一些缺点,所以我们决定放弃它。现在我们用提督. io 代替,我们很喜欢它。

为什么我们选择了提督

我们之前比较了其他几个工作流程编排工具,我们已经将 Luigi 用于我们现有的许多项目。不幸的是,Luigi 不能很好地与 Kubernetes 配合,尽管我们在旧项目中用一些自定义代码修补了这个缺口,但我们希望 Kubernetes 成为我们新参考架构的核心。所以我们需要一个具有本地 Kubernetes 支持的工具。

我们也是 Dask 的大用户。Prefect 是建立在 Dask 之上的,他们共享一些核心贡献者,所以我们从一开始就对 Prefect 充满信心。我们知道这些 Dask 基础会带来一个稳定的核心和一个强大的社区——这两者我们在 Kubeflow 中都没有发现。

最后,我们被 Prefect 所吸引,因为 Python 工程师对它很熟悉。它解决了气流等更复杂工具的许多常见问题。具体来说,Prefect 允许您使用一个简单的 Python 装饰器将任何 Python 函数转换成一个任务。

相比之下,像 Airflow 这样的平台使用更加冗长、严格限制的任务。如果你想在气流中完成任务,你必须学会“气流方式”要在 Prefect 中构建任务,您可以简单地编写 Python。

提督自己的“为什么提督”文章提供了几个更有说服力的使用提督的理由:

  • 任务是函数——我们不需要学习另一种做事方式,因为任何 Python 函数都可以是任务。
  • 细节问题 — Prefect 专注于高质量的软件,拥有令人印象深刻的单元测试和文档。
  • 模块化允许适应— 每个完美的组件都被很好地定义,所以我们相信,如果我们愿意,我们可以用其他工具替换它们。

提督适合在哪里?

对于任何机器学习解决方案来说,与训练模型相关的算法和代码只是一小部分。管理工作流程数据流是任何大规模生产解决方案的重要组成部分,但却不太受关注。这就是提督的用武之地。

我们使用 Prefect 从源中提取数据,根据需要进行转换(Prefect 的 ETL 流程非常简洁直观,可以构建),并监控任何需要运行的作业。

通过标准的机器学习架构,Prefect 将接管所有数据流自动化需求。它还将与像 Dask 这样的库集成,无缝地处理分布式计算。

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

我们使用 Prefect 实现数据流自动化,但它也集成了 Dask 来帮助分布式计算。来源:作者

详细看看我们的完美设置

提督是由几个组件组成的,有很多方法来使用它。我们只把它作为开源软件使用。这意味着在 AWS 上建立我们自己的完美服务器,而不依赖完美云。

我们的整个参考架构必须完全免费(就像 freedom 和 beer 一样),这意味着我们的设置甚至不需要用户拥有一个 Prefect.io 帐户。

更具体地说,我们使用 Helm 在我们的 Kubernetes 集群中设置提督。Helm 创建了几个提督依赖的组件,包括:

  • 提督代理 **,**处理任务编排和资源分配。
  • 提督 UI ,提供了一个很好的用户界面和一个仪表盘概览。
  • **Apollo,GraphQL,**和 **Hasura,**提督用哪个来服务 API。
  • **Postgres,**提督用它来存储流的元数据。

提督服务器的掌舵图还在实验阶段,但是提督社区再一次超越了使命召唤来帮助我们解决一些初期问题。

缩小一点,这意味着 Prefect 位于我们的 Kubernetes 集群中,处理我们所有的工作流和数据流管理。

我们的 Kubernetes 集群还包含其他机器学习服务,特别是:

  • JupyterHub ,我们用它作为我们的实验中心来做快速原型。
  • Dask ,我们用于分布式计算。

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

在我们的 Kubernetes 集群中,Prefect、JupyterHub 和 Dask 都作为名称空间存在。来源:作者

这种设置使我们的工程师能够专注于解决难题,而不必担心基础设施。他们可以在 Jupyter 笔记本上建立一个实验作为完美的任务,并提交给 Dask 进行处理——所有这些都在熟悉的笔记本界面中进行。

Prefect 在跟踪什么在哪里运行,以及在出现问题时提供有用的日志和可视化方面做得很好。

我们迄今为止的经验

我们已经在我们的 Kubernetes 集群中设置了 Prefect,并在我们的一些管道中进行了测试。到目前为止,这都是很棒的经历。我们遇到的唯一障碍与某些 Prefect 核心组件有关,这些组件假设您使用的是 Prefect 云(Prefect 的专有企业部分)。

因为我们运行的是我们自己的完美服务器(而不是完美云),所以我们对作为第三方服务的完美没有任何依赖性。Prefect 社区在这点上特别有帮助:我们在他们的 Slack 组上的问题在几分钟内就得到了回复。他们还解决并部署了我们在几小时内报告的一个 bug 的修复程序。

几天之内,Prefect 也合并并部署了我们对他们关于用 HELM 部署 Prefect 的文档的改进。

现在,我们的 Jupyter 笔记本电脑与 Prefect 集成在一起。我们喜欢这种设置的简单性,干净的用户界面和仪表盘让使用起来很愉快。

需要帮助创建可扩展的机器学习管道吗?

我们喜欢使用新的 ML 工具——我们已经尝试了其中的大部分。如果你需要帮助建立你自己的可扩展机器学习管道,请联系聊聊。

注册订阅我们的时事通讯以获取我们的下一篇文章,详细介绍我们的完整参考架构。

当我们谈论 ML 时,我们谈论什么

原文:https://towardsdatascience.com/what-we-talk-about-when-we-talk-about-ml-d4a07cbc14f2?source=collection_archive---------34-----------------------

我想花些时间反思一下我自己发展 ML 技能的经历。有一个 NYT 项目利用公共跑步数据来寻找最快的跑鞋。我将用这个项目来突出三个不同方面的 ML 技能:建模、工程和策略。

首先,我想澄清 ML 和数据科学之间的区别,至少在这个背景下。*主要的区别特征是项目可交付物是由人还是由机器来使用。*对于数据科学家来说,交付品可以是决策者的仪表板。他们可以为零售商工作,并利用这些见解来决定库存哪些跑鞋。对于 ML 工程师来说,可交付成果可能是一个用于在网站上对鞋子进行排名的预测 API。

大学的时候,我懂线性代数,概率,还有一些算法。我会花一半的时间来收集数据和安装 ML 库。然后,我会花另一半的时间通过跟随教程来弄清楚如何运行一个基本模型,但并不真正理解发生了什么。迷上了 ML,就去读研了解更多。

我最终在博士期间获得了 ML 建模专业知识。我们可以在计算机视觉模型中使用跑鞋的照片,并在文本模型中加入评论。我们甚至可以构建所有跑鞋的嵌入,以便进行一些迁移学习。这些是人们在谈到 ML 时喜欢谈论的事情。然而,它们是一种错误的表述。

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

西蒙·伯杰在 Unsplash 上拍摄的照片

我喜欢把 ML 项目想象成登山运动。攀登需要的不仅仅是纯粹的体能,还需要你知道如何在危险的条件下正确使用装备和随机应变。从这个意义上说,ML 研究更类似于健身房里的抱石运动。大多数登山运动员可能不会闪光 V10,强壮的登山者可能甚至不知道如何打结…

软件工程师将建立一个可靠的管道来定期获取数据,以适当的格式存储数据,并使用多个版本重新训练模型以进行 A/B 测试……工程技能对于生产中可扩展的东西是必要的,例如每秒至少获得数百次点击的网站。

经过一段时间和大量的挠头,一个人可以掌握建模和工程技能,这将使他们更容易就业。大多数时候,ML 项目往往是高度迭代的,具有不可预测的挑战。这就是为什么人们被吸引到 ML,但同时当你得到报酬或付钱给别人做这件事时,有很多东西需要制定策略。

运筹帷幄有三个重要问题:

1。ML 问题实际上是可解的吗

这是人们容易忽视的一点,因为这听起来并不性感。先动手建立一个强大的基线模型!

2.实际上这意味着什么

ML 指标并不能转化为现实世界。如果我们在一个网站上使用 ML 进行跑鞋排名,即使使用不太准确的模型,负面影响也可能相当小。然而,这可能是一个市场差异化因素,并推动流量/收入。在另一个稍微虚构的场景中,我们使用 ML 在实体店中存储跑鞋,较高的误差会导致更困难的后果。

3.如何进行成本/收益权衡

时间和资源有限。举个例子,你可能经过一整年的开发,有了一个牛逼的模型。但你也可能会花太多时间在创造花哨的模型功能上,并在假日购物季后推迟发布。或者模型刚好消耗了那么多计算量,整个网站都很慢。不管怎样,这都是未能平衡正确权衡的结果。

Python 中序列化(反序列化)的内容、原因和方式

原文:https://towardsdatascience.com/what-why-and-how-of-de-serialization-in-python-2d4c3b622f6b?source=collection_archive---------13-----------------------

其实比你想象的简单

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

照片由 timJUnsplash 拍摄

我第一次听说序列化和反序列化这个词的时候,我不知道它们是什么意思,而且觉得这些术语很“吓人”。过了几天,我开始拾起这个概念,但被它们与编码和解码的相关性搞糊涂了。在这篇文章中,我想像新手一样向你介绍这个概念。到文章结束的时候,你会发现这并没有你想象的那么难。

什么是(反)序列化,我们为什么需要它?

我们每天在 Python 中创建大量的对象,如果程序死亡,这些对象最终会消失。有时我们希望将对象的状态存储在文件或数据库中,或者通过网络传输以备将来使用。这有助于我们在不同的程序甚至不同的环境中重用该对象。

但是我们可能面临的问题是兼容性。假设你用 Python 创建了一个对象,Java 程序如何重用它呢?Python 中的布尔值看起来像TrueFalse,但是在 Java 中,它们是用truefalse来表示的。必须有一个“中间人”创造一种两个程序都能理解的通用语言——这是一个字节序列。

将结构化对象转换成可以存储在文件系统或数据库中或通过网络发送的字节序列的过程称为序列化。相反的过程称为反序列化,这意味着将一个字节序列重新转换成一个结构化的对象。通过反序列化创建对象通常比从类初始化要快。

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

创作人:高

在许多数据科学项目中,将对象的状态存储在文件或数据库中可以节省处理大型数据集的时间。例如,您只需对数据集进行一次预处理,并将模型保存到磁盘中。稍后,您只需要反序列化它,并根据需要多次重用预先准备好的模型。这肯定比每次都进行预处理要好。它的副作用是序列化的对象可能太大而无法加载到内存中,所以最好使用几个分块的对象。

此外,您可以对数据流进行加密和压缩,以提高安全性并进一步提升性能。

有哪些流行的(解)序列化格式?

要序列化复杂的数据结构,需要一种序列化格式。它将对象转换成某种可以存储和传输的格式。有两组序列化格式:基于文本的和基于二进制的。顾名思义,基于文本的序列化是以人类可读的格式序列化对象的过程,而基于二进制的序列化是以人类不可读的格式。

编码&解码

如引言部分所述,我在早期并不真正了解编码和序列化之间的区别。简而言之,编码是一种使用编码模式(如 UTF-8)将字符转换为比特的方法,而序列化是一个漫长的过程,它也将比特存储到文件、数据库中或将它们发送到网络。所以我将编码视为序列化过程的一部分。如果您想了解更多关于 Python 编码的知识,我推荐您阅读 RealPython 的这篇文章。

https://realpython.com/python-encodings-guide/#whats-a-character-encoding

回到序列化格式,典型的基于文本的序列化格式有 CSV、JSON、XML、YAML、TOML 等。基于二进制的格式有 protobuf 和 Avro。Python 也有几个包,像 pickle,numpy 和 pandas,支持将自定义对象序列化为字节格式。

为了让您感受几种序列化格式之间的差异,我在整篇文章中使用了同一个示例。假设我有一个属性为authorpublicationpublish_datetopicsword_countis_vip的类Article。我想在一个文件中存储许多对象的状态,并与消费者共享。

CSV

CSV 可能是最简单的序列化格式。它代表逗号分隔的值。它非常适合存储列表数据(平面数据)。正如您在这个例子中看到的,它不太适合嵌套数据结构。在代码中,我首先使用来自dataclassesasdict函数将一个 Article 对象转换成一个字典,然后使用csv.DictWriter将那个字典写入一个 csv 文件。

实际上,我们刚刚完成了一个序列化过程。多简单啊!在很高的层次上,序列化只不过是将数据写入磁盘,而反序列化意味着将数据读入内存。

但是您可能会注意到,属性topic应该是一个列表,但在 csv 文件中却表示为一个字符串。这是因为 csv 只支持平面数据,这意味着在读取文件时,需要一个额外的步骤来将字符串topic转换回列表。此外,csv 文件不存储类型信息,所以一切都被解释为字符串,就像属性word_count。如果我读取article.csv文件并打印该行,我将得到一个 dictionary 对象,其中每个属性都是字符串格式。

总之,csv 文件可以存储平面对象的属性和值,但不能总是存储正确的数据类型信息。为了解决这个问题,我们需要更灵活的格式。

JSON

JSON 是一个很好的选择。JSON 是最广泛使用的数据序列化格式,因为它具有人类可读的语法,与几乎所有编程语言兼容,并支持嵌套数据结构和多种数据类型。

我们可以使用内置库json将同一个article对象写入 JSON 文件。dump()将一个对象序列化成 JSON 格式的字符串,然后写入 file 对象。json使用JSONEncoder类将 Python 类型转换为 JSON 类型(例如True => trueFalse => falseNone => null)。可以扩展JSONEncoder并序列化其他类型。

我推荐另一篇来自 RealPython 的关于 Python 中 JSON 数据的文章。

https://realpython.com/python-json/

另一方面,反序列化过程只是读取JSON 文件并重新创建一个 dictionary 对象。如您所见,重新创建的对象与原始对象相同。

不足为奇的是,在这个例子中,JSON 比 csv 更适合,因为它比 csv 拥有更多的对象特征,因此能够完全恢复对象。但是 JSON 的一个潜在问题是,您必须将完整的文件加载到内存中,而您可以迭代 csv 中的行,而不会给内存带来太大的压力。

当然,你可以创建多个块来释放内存,但是你必须记住这一点。

另一种与 JSON 类似的格式是 YAML。我已经在这篇文章里讲过他们的区别。YAML 还支持嵌套数据结构和不同的数据类型。

XML

下一个基于文本的格式是 XML,用于以树状结构表示嵌套信息。它广泛应用于 Web 和面向服务的架构中。XML 文件不包含任何类型信息,但是您可以通过一个模式(所谓的 XSD)来标准化和验证 XML 文件。

Python 提供了一个内置的库xml.etree.ElementTree来帮助我们创建或读取 XML 文件,但是从字典到树元素的转换不像以前的格式那样简单。在这个代码示例中,我自己实现了一个简单的 dict2xml 适配器。

因此,它的 XSD 文件看起来像这样,其中每个元素都绑定到一个类型。除了内置的数据类型之外,您还可以用[xs:restriction](https://www.w3schools.com/xml/schema_facets.asp)定义自己的数据类型,如xs:maxLengthxs:pattern等。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)">
  <xs:element name="article">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="author"/>
        <xs:element type="xs:string" name="publication"/>
        <xs:element type="xs:date" name="publish_date"/>
        <xs:element type="xs:string" name="topics" maxOccurs="unbounded" minOccurs="0"/>
        <xs:element type="xs:integer" name="word_count"/>
        <xs:element type="xs:boolean" name="is_vip"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

不幸的是,xml.etree.ElementTree不支持 XSD 验证。一个很好的选择是[lxml](https://lxml.de/)

回到例子,让我们反序列化(读取)XML 文件。由于数据类型的不确定性,Python 中的每个元素值都被解释为字符串。iterparse from cElementTree返回一个迭代器,当你想读取一个大的 XML 文件,又不想把所有东西都加载到内存中时,这个迭代器很有用。

总之,XML 是一种基于模式的序列化格式。但是不管 XSD 文件的类型是什么,Python 总是把它作为字符串读取。因此,将 XML 数据类型转换为 Python 数据类型需要一个自定义适配器。

BSON

到目前为止,我们已经研究了 3 种基于文本的序列化格式。接下来,让我们看看基于二进制的序列化格式。这种格式不是人类可读的,但它可以有效地压缩数据,并被大量用于分布式系统中的通信和存储。

BSON (二进制 JSON)是类似 JSON 的文档的二进制编码序列化。像 JSON 一样,BSON 支持文档和数组的嵌入。BSON 还允许表示不属于 JSON 规范的数据类型。

BSON 主要用于 MongoDB 数据库。安装pymongo时,bson是库的一部分。使用 BSON 编码和解码的方法和 JSON 一样简单。

BSON 记录比 JSON 记录占用更多的空间,因为它还包含记录的元信息,比如数据类型和长度。

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

来源:http://bsonspec.org/faq.html

另一方面,BSON 提供了一些优于使用 JSON 的优势:

  1. BSON 支持比 JSON 更多的类型,例如,字节和日期。
  2. 由于额外的元数据,BSON 记录易于遍历和查询。它允许在不阅读整个文档的情况下进行值检索。

Avro

另一个著名的基于二进制的序列化格式是 Avro 。Avro 是一种快速的基于模式的序列化格式。在序列化和反序列化过程中必须提供架构。由于其高性能,它最常与阿帕奇卡夫卡一起使用。

Avro schema 以 JSON 格式定义,这使得它与语言无关,可以存储在几乎所有环境中。该模式使用允许数据定义和文档的丰富类型系统来描述记录。有了模式,就有可能对数据建模并创建所有实体的目录。这样的目录可以在模式注册表上提供,使得模式可供消费者和生产者使用。

下面是一个关于Article实体的 Avro 模式的例子。

许多编程语言都支持 Avro,包括 Python。在这个例子中,我使用的是 fast-avro ,一个基于 CPython 的库。已经证实 fast-avro 比纯 Python 实现库 avro 要快得多。

fast-avro 提供writer/readerschemaless_writer/schemaless_reader。第一个选项将模式作为文件头插入到.avro文件中,而第二个选项没有。

泡菜

好了,在展示了不同的序列化格式之后,我将向您介绍几个方便的 Python 库,它们可以序列化 Python 对象。其中一个就是咸菜

“Pickling”是将 Python 对象层次结构转换成字节流的过程,“unpickling”是相反的操作。

关于什么可以被酸洗和拆洗,这里是 Python 文档上的列表

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

来源:https://docs . python . org/3/library/pickle . html #什么能被腌制和解除腌制

被取消拾取的对象属于Article类型,可以立即使用。

然而,如这里的所述,Pickle 模块由于代码注入的可能性而不安全。像 Bandit 这样的工具不会让它通过安全检查,所以永远不会从不受信任的来源中取出对象。

熊猫/熊猫

著名的数据操作库如 Pandas 和 Numpy 也提供类似 pickle 的功能。如果DataFramenp.ndarry被认为是生产者和消费者之间的通用数据类型,这将变得非常方便。

如果你知道更多可以将数据序列化为不同格式的 Python 库,请在下面留下评论与我们分享。

多种序列化格式的比较

最后,让我们看看每个序列化格式/库的性能。这些测试是在 8 核 i9 的 Macbook 上执行的。

在这个例子中,我想将 100 个article对象写入一个文件,然后在不同的函数中重新创建这些对象。最后,我使用assert来比较重新创建的对象和原始对象。完整的实现可以在这里找到。

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

创作人

图表告诉我们:

  1. pickle在这次性能测试中胜出。大概是因为一个article对象不需要先转换成 JSON 就可以直接序列化。
  2. BSON 在序列化和反序列化方面都比 JSON 表现得更好。同样适用于numpy v.s pandas
  3. csv的反序列化花费了更多的时间是因为将属性从字符串转换成原始类型的步骤(例如intbool)。
  4. 作为唯一基于模式的序列化格式,avro的性能相当可观。
  5. XML 的缓慢可以归咎于实现。请让我知道我如何能改进它。😃

结论

首先感谢看完这么长的文章。恭喜你!你活下来了(我也活下来了)!:)在本文中,我们讨论了序列化和反序列化 Python 对象的许多可能性。到目前为止,你一定不再觉得这两个术语令人生畏,在某种程度上,这只是一种说的花哨说法。

每种序列化格式都有优点和缺点。你应该想想你是想要基于文本的还是基于二进制的,基于模式的还是基于非模式的,你的数据格式是什么?字典,DataFrame 还是 Python 对象?是只保存值还是也保存类型?你在乎性能和内存吗?

希望这篇文章能帮助你做出明智的决定。如果你有任何想法,请在下面留下你的评论。

参考

https://docs.python-guide.org/scenarios/serialization/

甘和贝叶斯网络预测全球变暖对我滑雪出游的影响

原文:https://towardsdatascience.com/what-will-be-the-impact-of-global-warming-on-my-ski-outings-8ac3cf10a843?source=collection_archive---------49-----------------------

生成对抗网络(GAN)近似分布,而贝叶斯网络(BN)调节温度和滑雪路线。

作为一名滑雪者,我已经在现场观察到了气候变化的影响:雪会在季节的晚些时候到来,中等海拔地区的雪会减少……作为一名数据科学家,我想知道接下来会发生什么:随着气候变暖,是否有可能在同样的斜坡上滑雪?

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

提交人于 2003 年 3 月 23 日在穆什度假

数据:从营地到营地的滑雪旅行

滑雪旅行是在度假胜地滑雪的越野变体:在上山的路上,它看起来像越野跑或徒步旅行,但在滑雪板上,在下山的路上,它看起来像免费乘坐,即使滑雪板更薄更轻。至于越野车,游乐场比滑雪胜地大得多。

然而,这种活动取决于积雪的质量和数量,以及雪崩的风险。提前获得路线信息是营地对营地存在的理由。最新的信息是通过郊游报告收集的,有点类似于 Strava 的报告,但有更多关于户外条件的定量和定性信息。报告是条件的指示:在给定的路线或日期上没有或坏的报告可能意味着条件不适合

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

滑雪旅游,上坡作者

对于我的机器学习任务,我们选择了勃朗峰地区的郊游报告,这是法国上萨瓦省的行政区。这是最多样的滑雪区,最高峰海拔从 1000 米到勃朗峰的 4810 米不等。但是这个地区的范围还不足以承受完全不同的气候条件。郊游报告的时间跨度从 2009 年到 2019 年。总共有 6656 个外出报告,丢弃所有不完整的报告。

报告既有文本的,也有定量的。在上一篇文章“fast text 和 Tensorflow 2 的完整 NLP 用例”中,我重点介绍了路线的文本描述。在这篇文章中,我将讨论郊游报告的量化特征。我选择了以下与我们的目标相关且在报告中广泛可用的功能:

  • 最高海拔【米】,这是景观的一个特色,也是滑雪爱好者的一个选择(如:只有高海拔才适合五月滑雪)。
  • 滑雪板打开,向上【米】,告知何时积雪足够厚,可以使用滑雪板(滑雪旅行者习惯于在背包上携带滑雪板),如果缺失,则填入最低海拔
  • 滑雪板关闭,向下【米】,与之前类似,但向下需要更多的雪,或不同的路线(例如,用缆车部分向上,在滑雪板上向下),填充最低海拔如果丢失。
  • 滑雪评分,为路线(不是郊游)定义,在编辑 Volopress 的量表上[8],从 1.1 到 5.5,“正常”(对所有人)都在 2.1 到 3.3 之间。间接表示地形地貌(坡度、覆盖层……)。它从序数转换成数字。
  • 状态评级,滑雪者对此次郊游的主观评价,分为从糟糕到优秀五个等级。它从序数转换成数字。
  • 季节中的某一天,从开始日期中提取,作为对最接近的 2 月 15 日(隆冬)的偏移。

也有对积雪数量和质量的主观评估,但它们在大多数报告中是缺失的。

天气状况是通过温度来捕捉的。我用的是早晨的温度【C】来自www.historique-data.net位于海拔 1000 米左右的梅吉夫度假村。郊游地点的实际温度不同,但相互关联。为了考虑郊游时间附近的天气条件,从早晨温度中导出两个额外的特征:郊游前过去 7 天和 30 天的平均值

现在我总共有 9 个特征来定量描述滑雪旅行。

数据说明了什么?

特征的相关性提供了很多信息。三个温度是相关的,甚至当天的温度和前 30 天的平均。海拔也是相关的,预计上的滑雪板和下的海拔有很强的相关性。季节的大多与三个温度最高海拔相关。但是条件等级与任何其他特征几乎没有关联,甚至比主要取决于地形的滑雪等级更没有关联!

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

营地间郊游报告上的特征相关图

使用直方图观察边际分布,我发现:

  • 季节性很明显,夏季外出不多:-)

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

作者出游开始日期直方图

  • 郊游季节在 2010-2019 年间分布相当均匀,这有利于统计

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

出游季节直方图作者

  • 这个季节从 2 月 15 日之前的 100 天到之后的 110 天

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

相对于 2 月 15 日(仲冬)作者郊游的日子

温度已经上升了吗?

观测时间范围(2010 年至 2019 年)太小,无法解释每年的变化,也无法获得气候演变的一些有力迹象。无论如何,让我们比较一下观察的开始(2010-2012)和结束(2017-2019)。

从下面的直方图来看,季节的日分布在中央峰的左侧被修改:季节开始得更晚。当地的观察证实,在这个季节的晚些时候,圣诞节之后,有时是一月中旬之后,雪的条件会变好。

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

作者 2010-2012 年和 2017-2019 年相对于 2 月 15 日的外出日直方图

早晨的气温上升了平均变化 1.8 摄氏度

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

2010-2012 年和 2017-2019 年早晨温度的累积直方图

生成对抗网络(GAN) [1]是一种在给定参考数据集的情况下同时训练两个深度神经网络的方法:

  • 发生器将随机生成的分布变量(如高斯分布)作为输入,即潜在变量,并输出模拟所需分布的随机变量
  • 鉴别器是一个二元分类器,旨在将属于数据集的输入从生成器的输出产品中分离出来

这两个网络的训练是同时进行的,对于每批随机样本和数据集样本,生成器的性能最大化,而鉴别器的分类误差最小化。

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

甘训练方案作者

GAN 的应用范围从数据扩充[6]到风格转换[7]。GAN 能够近似如[2]中用数学公式表示的分布。我使用这个属性来创建一个 outing 报告的生成器,生成器的输入是一组高斯独立变量,输出是与真实报告分布相似的报告定量变量。

这是通过对发电机输出进行采样来验证的,即生成数千份伪造的外出报告。如下图所示,特征相关性与真实相关性非常相似。最显著的错误是雪板打开和雪板关闭时高度的完全相关性。此外,与营地间数据的相关性相比,季节的日期与其他特征的相关性太大。

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

特征相关图为 GAN 生成的样本作者

下面的例子是真实的(营地到营地)和生成的数据的季节中一天的边际密度分布。有一个相当好的匹配,即使分布在两边都被截断。

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

从营地到营地的样本和甘生成的样本的出行日直方图

我现在有一个假郊游的生成器,我可以做数据扩充。

贝叶斯网络

在上面的 GAN 模型中,所有的特征都组合在一个黑盒中,我不能在它们之间创建关系或条件。为了解决这个缺点,我将在 GAN 架构中构建一个贝叶斯网络。

贝叶斯网络[4]是在直接非循环图上显示因果关系的图形概率模型。在目前的情况下,我想表达郊游类型(最大海拔、滑雪等级)、天气条件(温度、季节日期)和其余特征(滑雪板开和关、条件等级)之间的相关性。

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

贝叶斯网络建模特征之间的依赖关系

与条件 GAN [3]类似,我的新 GAN 生成器由三个生成器组成,它们接收随机变量和观察变量的组合作为条件:

  • 第一种是将潜在随机变量作为输入,输出前两个特征(最大海拔、滑雪等级)。
  • 第二个生成器将这两个特征和一些潜在变量作为输入。第二个发生器的输出是三个温度和季节中的一天。
  • 相同的方案被应用于第三生成器,但是使用 6 个已经生成的特征和一些潜在变量(随机)作为输入。

最终,三个发生器的输出被组合成 9 个特征的单个向量。这些特征被输入到与前一种情况相同的鉴别器。

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

GAN 生成器架构实现贝叶斯网络调理作者

每个生成器是一个 4 层的深度神经网络。

类似的训练被应用于该第二 GAN。验证是相似的:特征相关性,边际分布。

专注于特定的路线

我现在能够设置与特定路线相关的参数:最高海拔和滑雪等级。我选择了名为“穆什路”的路线,滑雪等级 2.3,最高海拔 2453 米。“特劳德拉穆什”(字面意思是飞孔)是一条穿过挤压岩石的通道,形状类似于昆虫的头部和身体。这是当地一条非常著名的路线,1440 米处的停车场非常容易到达,1000 米以上的斜坡平缓而连续,由于没有太多的阳光照射,雪的质量通常很好。

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

2019 . 02 . 20 . www.camptocamp.org 从到穆什路郊游报道截图

我现在正在采样甘发电机的输出,与营地间的报告进行比较。滑雪板开/关标高如下图所示,实际标高大部分在 1440 米,停车场标高。生成的高程主要分布在 1200-1600 米之间。GAN 不知道停车场的高度,但是知道类似外出的开/关高度的分布。

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

作者在特劳德拉穆什营地间郊游报告和甘生成的样本的滑雪板开和关高度直方图

同样的情况也发生在一个季节的某一天,额外的困难是,关于所选出游的报告数量不足以从直方图中获得平滑的分布。

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

直方图的一天的季节郊游在特劳德拉穆什对营地和生成的样本从甘作者

全球变暖的影响

仍然使用“穆什之路”的路线参数和上面的 GAN 架构,我现在将发电机 G2 输出的生成温度偏移 1 到 6°C 的固定偏移量。与前工业时代相比,全球变暖当前目标增加 3 到 5°C,即从现在起增加 1.5 到 3.5°C。然而,有研究表明,阿尔卑斯山的增幅是两倍[5],这就是为什么我们可以期待更大的增幅。

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

GAN 生成的郊游滑雪板开/关的中间标高,作为温度变化的函数

气温升高 3.5 摄氏度,中位标高升高 100 米,气温升高 6 摄氏度,中位标高升高 200 米。鉴于“穆什路”的实际起点海拔为 1440 米,气温上升 3.5 摄氏度将使其只有一半的路程被雪覆盖。30%的户外活动需要 100 米的步行道。

结论

我只展示了几个特征和一个只影响温度的简单气候变化模型,展示了对特定位置的影响。这项研究还展示了 GAN 模拟复杂概率分布的能力,以及基于贝叶斯网络的架构技巧,以根据变量子集调整这些分布。

这个笔记本可以从我的数据科学博客上获得:

https://nbviewer.ipython.org/github/tonio73/data-science/blob/master/generative/GAN_ski_outings.ipynb 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从作者穆什路看到的勃朗峰山脉

参考

  1. 《生成性对抗性网络》,I .古德菲勒,j .普热-阿巴迪,m .米尔扎,b .徐,d .沃德-法利,s .奥泽尔,a .,y .本吉奥,NIPS,2014
  2. 《贝氏甘》,y .萨奇,A.G .威尔逊,NIPS,2017
  3. “条件生成对抗网”,M. Mirza,S. Osindero,2014
  4. 《贝叶斯网络导论》,德文·索尼,中,2018
  5. 《找到确认高山融化的树》《卫报》,2013 年
  6. “使用生成对抗网络(GANs)进行结肠直肠图像的数据增强”,Jerry Wei,Medium,2019
  7. 《神经风格转移》,Tensorflow 教程
  8. Cotation Toponeige (法语),Volopress

未来的空间分析会是什么样子?

原文:https://towardsdatascience.com/what-will-spatial-analysis-look-like-in-future-a671d9cc34c9?source=collection_archive---------40-----------------------

思想和理论

图论、细胞自动机和深度学习如何悄无声息地一起塑造空间建模的未来。

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

米利安·耶西耶Unsplash 上拍摄的照片

讨论的主题非常广泛,因为在展望未来之前,我们需要讨论空间分析的整个范围。预测未来的第一件事是了解过去。因此,我将把讨论范围逐步缩小到最吸引我的空间分析领域。我参与了许多深度学习项目,也有一些将城市过程建模为时间图的经验。这种接触的组合给了我一种特殊的视角,我经常试图比较所有这些范式(就在我的脑海里)。因此,在这篇文章中,我将讨论这三种范式的统一,这就是我所预见的空间分析的未来。

从这篇文章的主题转移,我将首先简要地讨论那些陈词滥调的论点,它们通常是任何关于计算建模技术未来的争论的中心。这些过分强调但却是真实的观察结果是

  1. 随着我们更深入地进入数字化时代,我们将会遇到不断增加的数据量和多样性,这使得模型的参数化更加精确
  2. 随着现代计算设备的计算能力不断提高,我们将能够为所有建模范例探索更大和更复杂的假设空间,并进行更少的以逻辑为中心的简化。这些方面肯定会加速空间分析技术的研究和采用,并使其在决策中无处不在。

在空间分析中,我们花费大量时间研究空间和时间地理,了解它们之间的内在关系,并在分析中建立包括空间和时间维度的评价。此外,很容易观察到,大多数真实世界的现象固有地表现出复杂的空间和时间依赖性,并且任何旨在建立真实世界的精确模型的建模范例都应该具有将这些依赖性与正在分析的其他属性结合起来的能力。尽管存在明显的空间依赖性,但将空间信息纳入建模并没有得到很好的理解。因此,具有讽刺意味的是,大多数统计和经典的机器学习方法,如时间序列预测,通过将它们的理论基础建立在特征空间不相关的假设上,系统地分离了空间相关性。而空间调整的形式只是后来才发展起来,试图以有限的方式将空间信息结合到模型中。考虑到建模空间和时间依赖性的能力,我将讨论细胞自动机(CA),并推测该领域与基于图形的建模和神经网络的可能结合。下面的段落将为我的预测奠定基础。

元胞自动机

如上所述,元胞自动机(CA)是一种流行的城市系统建模范式,可应用于土地利用、蔓延、社会空间动态、城市化和中产阶级化[2]。元胞自动机模型的一个吸引人的方面是,它意识到大多数全球现象是由小的局部细胞的相互作用产生的[3]。这是直观的,并且与大多数城市场景相关,因为系统范围的影响是由小规模行动者之间的相互作用引起的,这些行动者按照他们的动机和议程行动。

CA 建模将空间量化为单元,将时间量化为离散的步骤。这些单元的状态可以根据状态转换规则以离散的时间步长变化[4]。CA 提供了通过离散时间状态转换对系统的时间动态进行建模的能力。对于空间关系的建模,CA 依赖于位置的概念,并使用像元的邻域。通过考虑单元的邻居以及单元本身的属性来确定单元的状态。像 von Neumann 邻域和 Moore [5]一样,相邻单元在单元空间中通常是一致的,即单元空间中相邻的单元被认为是相邻单元。但是直觉认为空间邻近的影响超出了近邻,因此引入了基于距离衰减的模型[6]。这是建立在托布勒地理第一定律的基础上的,该定律指出,距离越近的事物之间的联系越紧密。时间动态和邻里关系共同模拟了对城市系统至关重要的空间扩散过程[4]。由于每个单元都影响其相邻单元的下一个状态,所以在一些时间步骤之后,该影响可以传播到非直接相邻单元。此外,据报道,您还强调了 CA 与地理信息系统集成的便利性,特别是当细胞空间被组织为栅格时[7]。

CA 的一个限制是细胞空间可能是不均匀的。在空间分析的第一节课中,我们广泛研究了空间的概念,并了解到空间并不局限于物理地理空间,而是可以推广到过多的空间定义,例如我的 facebook 朋友的空间。以这个空间为例,一个单元(人)可以有许多邻居(直接朋友),不同的人可以有不同数量的邻居。这种不规则性使得在欧几里得空间中将其建模为多维网格变得更加困难。此外,如果我们同时考虑多个空间之间的关系,即社交媒体上的连通性和地理空间的邻近性,那么转换到细胞空间就变得更加重要。下一节将讨论一个方便的解决方案。

CA 与图的关系

一个自然的更灵活的选择是图,它可以很容易地捕捉非统一的细胞空间、细胞之间的结构和拓扑关系。Sullivan 引入了图形细胞自动机的概念[8],其中细胞被表示为图形顶点的节点,捕捉了细胞之间的关系。任何节点都可以通过边连接到图中的任何其他节点,并且这些边可以具有属性,从而允许连接的定量参数化和跨越多个邻近定义的建模。另一个优点是图形可以是动态的,并且可以模拟变化的邻域和时间动态结构。此外,图可以模拟扩散过程,并形成由子图组成的层次结构。图形的每个节点都可以是一个复杂的组件,就像图形本身一样,允许表示复杂的单元。研究表明,图 CA 展示了传统 CA 的所有性质,因此可以顺利地应用于相关应用[8]。

细胞自动机与深度学习的关系

深度学习一直在默默和 CA 调情,但最近因为新获得的名气而受到关注。深度学习的冠军之一是卷积神经网络(CNN)。CNN 成功背后的关键是它们保持局部空间相关性的能力,这是通过使用有限的核大小来实现的[10]。托布勒第一定律又赢了!最近,CNN 已经在许多基于空间栅格数据的任务上产生了最先进的结果,例如遥感[11][12][13]。Gilpin 将 CA 中动态更新的局部性与卷积神经网络中的卷积核进行了类比[9]。他提出了一种卷积神经网络架构,当在简单二进制 CA 的视觉光栅表示上训练时,该架构能够学习状态转移规则。

为了处理时间依赖性,引入了类似长短期记忆(LSTM) [14]的循环神经网络。与有限状态自动机和隐马尔可夫模型相比,它们不限于预定义的有限状态,可以处理无限状态[14]。但是神经网络是黑盒,很难解释,不像 CA。为了解决这个问题,已经尝试从训练好的递归神经网络中提取有限状态自动机[15][16]

图形与深度学习的关系

这是最新的发展,他们的关系是这些领域观众最热门的话题。随着深度学习在其他领域建模复杂非线性关系方面的成功,前馈神经网络(NN) [17]和递归神经网络(RNN) [18]被用于时空交通预测。由于能够模拟非线性时间动态,长短期记忆(LSTM)和门控循环单元(GRU)在交通预测等城市系统中表现出显著的改善[19][20][21]。但是这些方法不能精确地解决空间和结构依赖性。后来,基于卷积神经网络(CNN)的方法[22][23]被开发出来,用于模拟空间关系。尽管传统的 CNN 在欧几里得空间中对图像和其他空间关系建模工作得很好,但它们不适合连通性和结构超出空间邻近性的网络。由于 CNN 不能很好地推广到图,所以开发了图卷积网络 GCNs 来将卷积运算从欧几里得空间推广到图。GCN 方法目前有两个不同的类别。光谱方法基于图形信号处理理论[24],而空间方法基于来自节点邻居的特征集合。

最近,出现了图时空网络,其使用基于图的神经网络方法来同时建模空间和时间依赖性。李等人。al [25]介绍了扩散卷积递归神经网络(DCRNN),它将交通网络中的空间依赖性建模为扩散过程,并使用递归神经网络来建模时间依赖性。他们表明,他们的方法在预测道路交通网络方面优于以前的策略。张等人。al [26]引入了图的门控注意网络(GaAN ),并将其作为构建块来构建图门控递归单元(GGRU)。GGRU 被用在交通速度预测中,并且显示出达到最先进的结果。

图形、深度学习和细胞自动机

发展关系的最初迹象开始出现。Johnson 引入了门控图形转换器神经网络[27],它能够使用转换器神经网络学习图形状态转换。他们证明,通过在图中表示细胞,他们的网络可以通过成功学习规则 30 [28]来模拟细胞状态转换。基于我在整篇文章中讨论的发展,我预测这种关系将会很好地工作,我们将会看到它在未来二十年的空间分析中完成许多壮举。最初,关系中存在压力的可能性,因为 CA 将通过失去其参数可解释性(支持直观的空间分析)来进行权衡。但是,我相信,在研究团体的辅导下,他们将能够克服这些问题,并从此幸福地生活下去。

参考文献

  1. 下午托伦斯和德·奥沙利文。2001.细胞自动机和城市模拟:我们将何去何从?环境与规划 B28(2):163–68。
  2. Couclelis H,1985,“细胞世界:微观-宏观动力学建模框架”环境与规划 A17 585–596
  3. 巴蒂,硕士,1997 年。社论:作为细胞自动机的城市系统。环境。计划。B 24,159–164。
  4. Palash Sarkar,《细胞自动机简史》,美国计算机学会计算调查(CSUR ),第 32 卷第 1 期,第 80-107 页,2000 年 3 月
  5. Clarke K . C,Hoppen S,Gaydos L,1997,“旧金山湾区历史城市化的自修正元胞自动机模型”《环境与规划 B:规划与设计》24,247–261
  6. Torrens P M,2000,“城市系统的细胞模型如何工作”,WP-28,高级空间分析中心(CASA),伦敦大学学院;在 http://www.casa.ucl.ac.uk/howcawork.pdf有售
  7. 奥沙利文博士,2001 年。图形细胞自动机:一个广义的离散城市和区域模型。环境与规划 B,28(5):687–706。
  8. W.吉尔平,arXiv 预印本 arXiv:1809.02942 (2018)。
  9. 勒昆,y,博图,l,本吉奥,y,哈夫纳,p . 1998。基于梯度的学习在文档识别中的应用。继续。IEEE 86 (11),2278–2324。
  10. Anwer,R.M .,Khan,F.S .,van de Weijer,j .,Molinier,m .,Laaksonen,j .,2018。用于纹理识别和遥感场景分类的二进制模式编码卷积神经网络。国际摄影学会杂志。遥感器 138,74–85。
  11. 丁,张,杨,邓伟杰,贾,高,2018。一种用于光学遥感图像目标检测的轻型快速区域卷积神经网络。国际摄影学会杂志。遥感器 141,208–218。
  12. Paoletti,M.E .,Haut,J.M .,Plaza,j .,Plaza,a .,2018。一种用于快速高光谱图像分类的新型深度卷积神经网络。国际摄影学会杂志。遥感器 145,120–147。
  13. “长短期记忆”,神经计算 9 (8),1997 年,第 1735-1780 页
  14. 盖尔·韦斯、约夫·戈德堡和埃兰·亚哈夫。使用查询和反例从递归神经网络中提取自动机。《第 35 届机器学习国际会议论文集》,第 80 卷,第 5247–5256 页,2018 年 b。
  15. 、张凯旋、亚历山大·奥罗比亚二世、邢新宇、刘学和 c·李·贾尔斯。递归神经网络规则提取的实证评估。神经计算,30(9):2568–2591,2018b。
  16. 东珠公园和劳伦斯·R·里莱特。1999.用多层前馈神经网络预测高速公路路段行程时间。计算机辅助土木和基础设施工程 14,5 (1999),357–367。
  17. 范·林特、胡根道恩和范·苏伦。2002.用状态空间神经网络预测高速公路行驶时间:用递归神经网络模拟状态空间动力学。运输研究记录:运输研究委员会杂志 1811 (2002),30-39。
  18. 、柯瑞民和王。2018.用于全网交通速度预测的深度双向和单向 LSTM 递归神经网络。arXiv 预印本 arXiv:1801.02143 (2018)。
  19. 、陶志敏、、王、、王云鹏。2015.使用远程微波传感器数据预测交通速度的长短期记忆神经网络。运输研究 C 部分:新兴技术 54 (2015),187–197。
  20. 俞、李亚光、赛勒斯·沙哈比、乌古尔·德米留雷克和刘燕。2017.深度学习:极端条件交通预测的一般方法。2017 年 SIAM 数据挖掘国际会议论文集。暹罗,777–785。
  21. 、庄岱、、何、、、、王云鹏。2017.将交通作为图像学习:用于大规模交通网络速度预测的深度卷积神经网络。传感器 17,4 (2017),818。
  22. 张军波,,齐。2017.用于城市人群流量预测的深度时空残差网络。在 AAAI,第 1655-1661 页。
  23. D.I .舒曼、S. K .纳朗、p .弗罗萨德、a .奥尔特加和 p .范德盖恩斯特,“图形信号处理的新兴领域:将高维数据分析扩展到网络和其他不规则领域”,IEEE 信号处理杂志,第 30 卷,第 3 期,第 83–98 页,2013 年。
  24. Y.李,,c .沙哈比,刘,“扩散卷积递归神经网络:数据驱动的交通预测”,载于 2018 年国际学习表示会议录。
  25. J.张,x .石,j .谢,h .马,I. King 和 D.-Y. Yeung,“Gaan:在大型时空图上学习的门控注意网络”,载于《人工智能中的不确定性学报》,2018 年。
  26. 约翰逊博士(2017)。学习图形化状态转换。学习表征国际会议录(ICLR)。
  27. 史蒂夫·沃尔夫勒姆。一种新的科学,第 5 卷。沃尔夫拉姆媒体香槟,2002 年。

“绿色人工智能”会是什么样子?

原文:https://towardsdatascience.com/what-would-a-green-ai-look-like-28d91aaff3be?source=collection_archive---------16-----------------------

变更数据

未来的环保人工智能会是什么样子?

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

照片由切尔西Unsplash 拍摄

免责声明:此为观点篇,此处表达的观点仅归作者所有。

你可能会问,“Raveena,你所说的绿色人工智能到底是什么意思?”好吧,我想我确实在上面的斜体摘要中透露了我的意图,但这并没有给我们一个关于环境友好型人工智能可能会是什么样子的解决方案,因为我们没有人能够准确预测未来 10 年或 20 年——甚至 5 年。见鬼,就在 9 年前,第一个大规模深度神经网络诞生了,能够在图像分类方面打破纪录——想想 ImageNet 竞赛。神经网络现在可以准确地对几十种狗、动物、物体等的真实数字图像进行分类。我现在要诚实地告诉你,直到我偷看了 ImageNet 数据集中的标签,我才知道“马耳他狗”和“西藏梗”是真正的狗品种。

在过去的几年里,我们已经建立了更好的深度学习系统,不仅可以对图像进行分类,还可以处理视频——我从来没有想到过——在我看来,最令人兴奋的结果是——创建文本到图像的字幕,以及语言模型,如 GPT-2,伯特和 GPT-3,它们在生成类似人类可读的段落和句子方面产生了真正令人惊叹的结果。

但是这是我们能创造的最有效的人工智能吗——这真的是朝着“更绿色的人工智能”的进步吗?

我认为,事实上,这可能不是我们能够创造的最有效的人工智能类型,我还认为,用更复杂的架构创造更多更深层次的网络模型,并不是真正为“绿色人工智能”铺平道路首先,虽然这些模型在语言生成、字幕生成和其他任务方面可能是野兽,但它们也是能源使用的野兽。

在 Timnit Gebru 博士和她的同事最近的一篇论文中——Gebru 博士是谷歌大脑的一位杰出的黑人人工智能研究员,他因报道此事而被解雇——引用了【Emma Sturbell 博士的这篇计算语言学论文,指出训练一个“单个 大型 语言转换器模型从零开始”估计要使用只是澄清一下,“变压器模型”只是“大”深度学习语言模型的一个花哨的词。

神经架构搜索是深度学习中的另一种较新技术——但只要把它想象成计算机“搜索”神经网络中排列节点和连接的可能方式。这听起来可能很性感,但它也是一只能源兽。在同一篇论文中,Sturbell 博士和她的同事计算出,使用一种称为“神经架构搜索”的技术训练单个变压器模型所使用的电力和能源消耗相当于62.6 万吨二氧化碳排放——或者相当于同时驱动五辆特斯拉直到其寿命容量耗尽时的二氧化碳排放。

根据 Sturbell 的说法,从头开始训练一架单人 BERT model 需要的能源和碳足迹与跨大西洋商业客运航班相同。更不祥的是,Gebru 博士和她的同事写道,“大型语言模型的大规模基于互联网的训练数据已被证明具有有问题的特征,导致“模型编码了性别、种族、族裔和残疾状况方面的陈规定型和贬损联系”。最后,Sturbell 指出了训练这些大型 NLP 模型的经济成本,称“许多[NLP 模型]现在需要多个专用硬件实例,如 GPU 或 TPU,因此在财务基础上限制了对这些高度精确模型的访问。基本上,如果你没有足够的钱来租赁 GPU 的使用或购买 GPU 芯片来执行深度学习——你不能真正地用大型 NLP 模型进行创新或计算,除非他们已经过专门的预培训。

现在,你可以说,这些模型只被训练一次,然后被部署到云中,可以被其他人使用。然而,将大型深度学习模型部署到云上需要耗费大量能源,正如《福布斯》在这篇关于英伟达的文章中引用的——一个模型大约 80%的能源用于推理。谷歌、脸书和其他公司都是大公司,比你我有生之年拥有的钱和资源都多。我们真的应该相信大公司为我们所有人民主化人工智能,而他们从我们这里获取大量数据——几乎是在最少的同意下——来训练他们更新、更性感、更大的模型吗?

关于深度学习的局限性本身我要说的最后一点是:传统的深度学习神经网络模型没有处理不确定性的好方法。这里,我举个例子:

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

照片由 Unsplash 上的路博尖塔拍摄

在这里,我们人类的大脑可以非常自信地告诉我们,上面的照片是一个大都市的,也许是一个大城市的市区——即使照片是模糊的。但传统的卷积神经网络在图像识别方面没有内置的机制来显示自己的“网络不确定性”。

那么,我们能做什么呢?

那么该怎么办呢?我并不是以任何方式暗示深度学习不好——深度学习本身确实是一个工程奇迹——但是本身,深度学习还没有真正接近人脑在大量不同任务上的泛化灵活性。并宣称深度学习是人工智能和智能的唯一解决方案——就个人而言,这有点冒昧。

走向人工智能的灵活性

以我诚实的拙见,我们需要的是比纯粹的函数逼近更聪明的东西:我们需要理解推理和建模在大脑中是如何工作的。诚然,这就像把“烫手山芋”传递下去——必须回答可能比“如何使人工智能民主化”更难的问题以及“如何制造更绿色的 AI?”,不过还是顺其自然,娱乐一下这个问题吧。

如果你曾经参加过 SAT 考试,你可能还记得那些可怕的问题,叫做“句子推断”问题——给出一个不完整的句子,有一个空格——你必须用“最合适”的词来填充这个空格(或许多空格)。所以 SAT 考试的例子可能是这样的:

SAT 示例问题:

由于凯莉没有期待任何情人节礼物,她被桌上的玫瑰花束迷住了。

从答案选项中:1)好奇,2)惊讶,3)热恋,4)失望,5)愤怒——你会选择哪个词?你的答案会是什么?

这个问题的答案是(2),我相信这对你们所有人来说都是“显而易见”的,但是对于我们目前用于自然语言处理的人工智能系统来说,这真的那么明显吗?许多解决方案在语法上可行,可能有办法使用频繁出现的单词的统计来解决这个问题——但有效地解决这个问题——我们寻找的答案最符合句子的上下文和含义,也符合我们对 Kelly 感受的直觉。

现在,这个例子表面上似乎不涉及概率——毕竟这些都是 SAT 单词!但是想一想:如果你对 SAT 了解不多,也没有为它学习过,只是看到了这个问题,你会做出一个有根据的猜测对吗?你知道,在看到情人节与玫瑰有关的问题之前,我们也有一个关于凯利可能如何反应的先验直觉模型,给定句子中的信息,并且事实上我们没有关于凯利的意图、信仰或情绪的其他信息。这种高级、灵活、基于模型的抽象推理是人类大脑特别擅长的——而今天的人工智能系统还没有真正接近这一水平,特别是当人工智能试图模拟其他人类的行为时。

这种高级、灵活、基于模型的抽象推理是人类大脑特别擅长的——而今天的人工智能系统还没有真正达到这一水平,特别是当人工智能试图模拟其他人类的行为时。绿色&负责任的 AI 需要这个。

但在过去的 10-15 年里,认知科学家、认知心理学家和人工智能研究人员一起,在创造能够进行这种推理的机器系统方面取得了进展:最近,它被称为概率编程。我不会讲太多的细节,所以如果你想在回到本文之前学习它的基础知识,可以看看 TDS 编辑的九月版文章。

依我拙见,概率编程提供了一条通向环境友好型人工智能的途径,因为它创造了一种表达大量推理的可能性,而不需要用数千或数百万个数据点进行蛮力推理。当你看到一张汽车或摩托车的照片时,你不需要知道照片中成百上千个精确的像素位置和值:相反,你对物体的图元有一些概念。车轮、底盘、窗户、一般边缘形状、镜子、引擎罩——这些都是物体的“基本体”或积木。有了这些积木,一个人几乎可以画出一辆汽车的无限变化。事实上,研究人员和计算机图形专家丹尼尔·里奇已经使用概率编程,从几个例子和物体的基元— 积木中生成了逼真的 3D 虚拟宇宙飞船和其他物体。他在 2020 年概率编程会议的一个惊人视频中详细描述了这一过程,在视频中,他使用一个图形程序来渲染许多使用其图元的宇宙飞船变体——例如,船体、机翼、推进器。

当你看到一张汽车或摩托车的照片时,你不需要知道照片中成百上千个精确的像素位置和值:相反,你对物体的图元有一些概念。用这些简单的积木,一个人可以画出几乎无限种汽车。

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

概率程序可以抽象地识别组成狗的子部分,并使用生成模型和“生成的整体是生成部分的总和”的思想来创建狗的新例子。(图片鸣谢:https://en . Wikipedia . org/wiki/File:Whole _ Dog _ vs . _ Dog _ as _ Sum _ of _ its _ parts . jpg)

兜了一圈回来

说到里奇教授的计算机图形工作,我确实想回到原点,回到这个作品的开头。在里奇 2016 年的一项工作中(以及上面链接的视频中),他指出,在概率编程中执行推理——也就是说,在给定概率模型的情况下,推断隐藏的生成程序,尤其是在图形的背景下,是一项非常复杂的任务。通常的推理技术包括所谓的“随机抽样”方法——但就其本身而言,这些方法需要相当长的时间来接近一个答案。在视频演讲中,Ritchie 教授谈到了基于单一样本图像的计算机生成的字母图形表示。

使用随机抽样,推断需要大约 10 分钟——但里奇能够将概率图形程序与另一个工具结合起来,以快 10 倍的速度生成图像。你可能会问,这个工具是什么?兜了一圈回来,你瞧,这是一个神经网络。事实证明,当涉及概率编程的推理算法部分时,神经网络特别好——网络能够“指导”程序寻找优化图形程序的更快值。

结论

读者们,我希望我已经向你们展示了我对环境友好型人工智能在不久的将来会是什么样子的一些想法。当然,如果我们能够准确预测未来,时间将有点没有意义,但如果我不得不猜测一下——创造一个更绿色的人工智能将涉及深入理解大脑如何能够在许多方面执行智能,而目前的人工智能方法是缺乏的。绿色人工智能将不得不涉及对人类大脑可以进行的抽象推理类型进行硬编码,这样我们就不必在数据中心存储大量数据,并花费数十万美元从零开始训练新的语言模型或其他人工智能语言模型来模仿人类。绿色人工智能还需要内置不确定性,以应对现实世界杂乱无章、一点也不像数学逻辑陈述那样清晰的事实。至关重要的是,绿色人工智能不仅需要来自计算机科学家和数学家的输入,还需要来自认知科学、认知心理学、神经科学、文化心理学和其他许多不同领域的输入。

绿色人工智能不仅需要来自计算机科学家和数学家的输入,还需要来自认知科学、认知心理学、神经科学、文化心理学和许多其他不同领域的输入。

如果给遗传算法交易的能力会怎么样?

原文:https://towardsdatascience.com/what-would-happen-if-you-gave-genetic-algorithms-the-ability-to-trade-51d89218481e?source=collection_archive---------22-----------------------

用机器学习进行股票交易的不同方法

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

阿瑟尼·托古列夫在 Unsplash 上的照片

机器学习的大多数应用,或者至少是 medium 上的大部分内容,包括训练一个机器学习算法来预测股票的未来价格或未来方向。这已被证明是无效的,因为股票数据不适合时间序列预测方法。这是因为数据点之间没有相关性。这将使得神经网络学习的任何权重都只是数据中的统计噪声。

这让我想到,也许问题出在解决方案的范围上:也许基于历史数据的直接预测不会成功,因为它不是直接关联的。预测和股票交易之间的直接联系可能会产生不同的结果。我开始理论化应用这个概念的方法。

我想到的想法是一种类似于强化学习的设置:有一个由神经网络驱动的代理,它可以与环境交互。该环境将充当过去股票数据的经纪人。

为了解决时间序列回归带来的大部分问题,我使用了遗传算法。这将意味着神经网络实际上永远不会根据数据进行训练,从而排除了“落后于”实际数据或过度拟合交易数据的可能性。这是以牺牲效率为代价的,因为遗传算法即使能够收敛也需要很长时间。

我创建的程序由三部分组成:

  1. 构建代理
  2. 创造环境
  3. 构造遗传算法

在实际程序之前,这里是我在这个项目中使用的所有库:

构建代理:

代理的功能非常清楚。它应该能够与环境产生有影响力的互动,并且必须存储其适应性(即利润)。

如你所见,这很简单。除了 init 函数之外,它只有另外两个函数。这是因为代理与环境交互所需的大多数功能都包含在 keras 模型中。

clone_model 函数 3 是必要的,以便生成的每个单个代理具有不同的权重,同时保持相同的模型架构。

这是我在这个项目中使用的模型架构。这非常简单,因为这个项目只是一个概念证明。此外,使其更复杂会使计算时间成倍增加。调用 model.summary 时,可以通过查看参数的数量来控制计算时间。

这个项目的一个更好的模型可以由 1 维卷积层组成,因为它们在从数据中选择特征时会更有效。

创造环境:

环境与代理人密切相关。它应该能够处理代理的请求,并且应该能够有效地来回发送数据。它还应该能够计算代理的适合度。

然而,环境比代理更复杂,因为环境必须远离任何可能使代理易于过度拟合或落后于实际股票数据的函数。

这是环境的 init 函数。它包含所有其他函数运行所需的所有变量。开始日期和结束日期变量用于控制提取数据的时间。这可用于比较不同时间段的模型结果,以便更好地分析结果。

该设置功能可以设置和重置环境。它将所有变量初始化为它们的初始值,并访问数据。通过 get_data 函数,代理可以访问数据并使用该数据进行预测。

请注意,调整后的收盘价和成交量列被删除。邻近收盘价格对神经网络不是很有用,而且成交量值太大。这是一个问题,因为标准缩放不应用于未分割的数据,因为它会提供对未来数据点的洞察。

这两个功能是代理用来与环境交互的关键功能。close_position 函数实际上是开仓函数的一个子函数。这是因为模型的输出被直接馈入开仓函数。只有当输出映射到[0,0,1]时,才会调用 close_position 函数。

开仓函数返回一股资产的价格,而平仓函数返回平仓后的利润(或亏损)。这些值可以用来计算代理商的总利润。

构造遗传算法:

遗传算法被用作防止使用分类和回归产生的问题的另一种方法。这是因为没有所谓的过度拟合,因为数据没有标签。你可以尝试实现其他非监督算法,这可以提高程序的速度。

首先,我们将代理代码添加到遗传算法中。

这个脚本使用定义的模型架构创建定义数量的代理。

这是遗传算法的主要部分,它被改变以适应这个问题。这个脚本基本上设置了环境,并允许代理在每个时间步与模型进行交互。这个过程可以根据变量 len_episodes 运行多次。这是为了让我们更全面地了解每个代理的适用性。

将被设置为适应度的值将是模型在设定的时间步长数上的利润。

该函数根据代理的适合度选择前 20%的代理。所有其他代理都将被丢弃。尝试改变被选中的代理的百分比:在计算速度和收敛之间进行权衡。截止点越低,计算速度越快。然而,较高的截止点可能会增加收敛的机会。

此选择功能已经过修改,可用于 keras 模型。最初的交叉功能只适用于我定制的神经网络。这个函数相当复杂。要理解为什么会这样,你必须理解交叉函数是如何工作的:

从前 20%的代理中随机选择两个“父”代理。这两个代理的权重变平。找到一个随机分裂点。提取第一个父项的权重,直到该点,第二个父项的权重在该点之后连接到第一个父项的权重。

问题是权重必须被拉平。当 keras 模型中的权重创建具有不同形状的嵌套列表时,这变得很困难。因此,我结合了 list comprehension、numpy 的 flatten 函数以及我自己编写的一个单独的 unflatten 函数。

这个函数就是变异函数。对于每个代理,有 10%的几率随机权重会变成随机值。这允许遗传算法缓慢但肯定地走出局部最小值。

由于所有这些都包含在一个执行函数中,程序的这一部分运行前面定义的所有函数。它返回列表中的第一个代理。从理论上讲,这个代理将是遗传算法创造的最好的代理。每一代的损失也被返回,这样损失就可以被绘制出来,看看遗传算法是否有进展。

这个函数运行遗传算法。我最终把模型改成了卷积网络,但这真的没有太大的区别。

结果:

这个程序的计算成本如此之高,以至于我需要使用 Google Colab GPU 来运行这个脚本。我发现结果相当不一致,主要是模型太简单了。我试图增加模型的复杂性,但是计算成本太高了。

我认为最好的解决方法是改进每一个单独的部分,让它跑得更快。

感谢您阅读本文!

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

我的链接:

如果你想看更多我的内容,点击这个 链接

如果 AI 不叫 AI,世界会是什么样子?

原文:https://towardsdatascience.com/what-would-the-world-look-like-if-ai-wasnt-called-ai-bfb5ae35e68a?source=collection_archive---------21-----------------------

人工智能|观点

一个关于可能会发生什么的思想实验

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

Marjan Blan | @marjanblan 在 Unsplash 上的照片

人工智能领域可以有很多名字。人工智能可能是最不准确的。

当人工智能的创始人在 1956 年开会为该领域命名时,他们心中的目标是创造一台具有类似人类的智能、行为甚至知觉的机器。一种人工通用智能(AGI)。然而,当时无论是硬件、软件还是数据科学都不够成熟,无法实现这一目标。他们天真地认为 AGI 很容易到手。

如今,人工智能的承诺及其创始人的梦想和愿望在很大程度上被遗忘了。我们正在创造有效的系统,善于从数据中提取模式来进行预测。但是我们不再以建设 AGI 为目标(至少大部分研究和项目不是)。然而,这个领域仍然被称为人工智能。

这是一个朗朗上口的概念。我甚至喜欢写下“人工智能”这几个字听起来好像我们正在创造未来,就像阿西莫夫书中的科幻故事一样。如果我们现在改名会怎么样?或者,描绘一个更具历史意义的场景:如果人工智能一开始就没有这个名字,这个世界会是什么样子?

人工智能这个名字的反响

大约在 20 世纪 40 年代,神经科学和计算机科学领域的发现产生了一波新的研究兴趣,催生了几个学科。控制论,一个研究系统如何通过反馈进行自我调节的领域。人工神经网络,它在大脑神经生理学中找到了灵感。以及人工智能,研究智能代理如何感知环境并采取行动影响环境的问题。

那时候学科还没有那些名字。它们是解决共同问题的想法和方法的混合体。但是在 1956 年,约翰·麦卡锡和其他人决定从控制论中分裂出来,并创立了一个新的研究领域。麦卡锡提议用人工智能作为名字。其他想法也考虑过,但都被否决了。人工智能被证明是一个很好的选择,因为它引起了人们的注意——并囤积了资金——将控制论推向了社会科学,并使人工神经网络被遗忘了 20 多年。

人工智能,其最初的目标是创造 AGI,旨在解决智能。即使在今天,每个谈论我们正在建造的所谓智能系统的标题上都有“人工智能”的字样。人工智能领域自提出以来已经取得了很多成就,但没有什么可以被称为“人工智能”

在《华尔街日报》 的一篇文章中,微软首席技术官凯文·斯科特解释了为什么“人工智能对于我们正在做的事情来说是一个坏名字。”“人工智能”这几个字让我们想起了我们的智能。斯科特说,如果我们问一个外行人人工智能系统能做什么或不能做什么,他们会“联想到自己的智能,联想到对他们来说什么容易什么难”。“(人们)将这些期望叠加到这些软件系统上。”

麻省理工学院的经济学家德隆·阿西莫格鲁表示同意,“我认为人工智能有点用词不当。”对于不熟悉人工智能研究的人来说,人工智能这个词让他们的想象力天马行空。终结者母体。艾萨克·阿西莫夫的基础 三部曲和亚瑟·C·克拉克的 2001:太空漫游。人工智能在我们的文化中根深蒂固,这是它对大多数人的意义。

但并不是每个人都认为这个名字有那么大的影响。朱莉娅计算公司的首席执行官维尔拉·沙阿认为,我们不应该“拘泥于语义”。但是,这仅仅是一个语义问题吗?如果人工智能像希尔伯特·西蒙提议的那样被称为“复杂信息处理”,它会在早期受到关注吗

语义问题?—语言的力量

约翰·麦卡锡为什么选择“人工智能”这个名字在他的著作 为 AI 研究 辩护中,他给出了一个出人意料的理由:

T21 发明“人工智能”这个术语的原因之一是为了逃避与“控制论”的联系。“它对模拟反馈的专注似乎被误导了,我希望避免要么接受诺伯特·维纳为大师,要么与他争论。”

最初,人们在控制论的更大领域内结合早期的人工神经网络来研究人工智能。但是麦卡锡似乎不喜欢维纳,他是主要的控制论专家之一。他没有选择准确描述他们想要做的工作的名字。他选择人工智能来区分和拉近与另一个领域和从事该领域工作的人的距离。

他成功了。艾获得了声望和足够的资金来资助几年的研究。这个名字对事件发展的影响程度是不可测量的。但我怀疑这是它吸引人的主要原因之一。

现在,让我告诉你两个关于名字重要性的故事。

语言影响现实——没有蓝色的痕迹

我们如何给事物命名极大地影响了我们如何感知这些事物,进而影响我们周围的世界。现实影响语言。我们谈论和思考我们周围的物体和发生在我们身上的事情。我们的现实定义了我们使用语言的目的。但是语言也会影响现实。以一种比你想象的更基本的方式。

英国前首相威廉·e·格拉德斯通是第一个注意到古希腊人感知颜色的奇怪之处的人。在对荷马的《T2》、《伊利亚特》和《奥德赛》的研究中,他意识到对荷马来说,天空不是蓝色的,大海是“葡萄酒色的”语言学家 Guy Deutscher 研究了 Gladstone 的文章,找到了一个解释:这并不是说希腊人缺乏进化的视觉系统。他们根本没有一个词来形容蓝色。

但是,这是一个语义问题吗,就像 Shah 为人工智能辩护的那样,还是语言影响了古希腊人的感知?

有一种感知现象叫做分类感知。它解释了为什么尽管颜色是连续变化的(光的波长),我们只能感知颜色的种类(蓝、红、黄、绿……)。因为希腊人没有蓝色一词,相应的波长属于最接近的类别,如黑色或绿色。我们擅长区分类别,但不擅长区分类别内部。

希腊人有和我们一样的视觉系统,但是颜色感知能力更差。语言是原因。

语言影响行为——印度还是三角洲?

但是让我们举一个最近的例子。再来说说 covid。

美国(以及整个世界)正遭受冠状病毒病例的新一轮上升。臭名昭著的 delta 变体似乎是这一浪潮背后的原因——在反 vaxxers 和有利于取消限制的政策的帮助下。但是德尔塔变体并不总是被命名为德尔塔,它被称为印度变体。世卫组织决定将 covid 突变的名称从起源国改为希腊字母。

目的是停止对这些国家的人的污名化。当川普称新冠肺炎为“中国病毒”时,美国针对中国人的种族主义行为急剧增加。

特朗普用一个词代替另一个词让中国人的生活变成了一场噩梦。语言改变了人们的行为。

我们如何使用名字会影响现实和行为。具体来说,名字对我们如何看待陌生的概念有更大的影响。叫一个地方坐椅子,凳子,或者沙发都不会改变什么。我们熟悉它,知道它的功能。然而,如果我谈论加密货币、量子计算或人工智能,这些名字很重要。这些名字隐藏在巨大的多层含义中,而这些含义并没有反映在单词中。

不知道人工智能是什么的人会试图从它的名字来推断它的意思。一个复杂的新学科的名字肯定会影响它的命运。

一个“复杂信息处理”战胜“人工智能”的世界

1956 年,人工智能的创始人之一希尔伯特·西蒙为这个领域提出了一个不同的名字。他认为这应该被称为“复杂信息处理”名字不能再难听了。但是,更能代表 AI 人的所作所为。他不喜欢“人工智能”这个术语,并在此后的几年里以他提议的名字展示他的工作。

如果希尔伯特·西蒙侥幸逃脱,人工智能被称为复杂信息处理(CIP ),会发生什么?让我们想象一下会有什么不同。

CIP 不会连接到人类智能

让人工智能发挥作用的一个(如果不是主要的)动机是解决智能问题的承诺,进而解决人类智能问题。它所开启的可能性简直不可想象。CIP 不是一个承诺的名字。它没有说“未来会从我这里经过。”它肯定没有承诺任何关于我们人类的事情。

我们不会把信息处理和人类的智力联系起来。即使大脑进行信息处理,我们也从未这样称呼它,所以它不会引起我们任何接近人工智能的兴趣。人工智能概念不断提醒我们我们的生物学。AI 中的很多概念都是以我们都知道的——甚至是直觉上知道的——神经科学概念命名的:神经网络,计算机视觉,深度学习自然语言处理,注意力机制,长短时记忆 (LSTM)。同样重要的是,我们经常将 AI 系统称为“理解”数据或具有“思考”过程。

CIP 没那么浮夸,但更真实。

CIP 不是一个吸引人的名字

复杂信息处理是一个很无聊的名字。这听起来很行政化。人工智能很吸引人。因为人工智能听起来很好,它很早就获得了兴趣和资金。CIP 可能从一开始就没有得到所有的资金(当然,实际的项目很重要,但如果认为这是唯一有意义的事情,那就太天真了)。象征性的人工智能将永远不会存在,也许人工智能的冬天和夏天也不会发生。

CIP 不会引起业外人士的注意。投资者、政治家、记者,甚至外行人,都不会那么关心像 CIP 这样听起来很无聊的领域。它不会像 AI 那样成为头条新闻。即使所做的工作是相同的,听起来也不会造成干扰。

CIP 是一个诚实的名字

CIP 更接近地代表了人们在该领域中所做的事情。人工智能不是具有潜在危险的机器人、全能的虚拟思维或超人机器。AI 复杂的信息处理。如果我们从人工智能中去除炒作和关注的虚幻层,只有这样我们才能找到真正的科学。在 CIP 中,我们不会经常用不可行的承诺来装饰我们的工作。

然而,我们不能排除这样一个事实,即如果这个领域被称为“复杂信息处理”,它可能没有它所拥有的资金,因此即使我们已经取得的成就也不会被完成。将字段命名为 CIP 而不是 AI 是吸引力和诚实性之间的权衡。CIP 可能描绘了该领域内部的真实视图,但可能不会吸引那么多的资金、兴趣和人力资源。

如果我们不做出承诺,而是诚实地对待我们正在做的工作,我们可能没有足够的钱来做这项工作。如果我们“保证”AGI 在未来的 20-30 年,那么我们可能会获得大量资金,最终取得更多成就,即使这个承诺被打破。

然而,这种方法是最初产生人工智能冬天的原因。大承诺吸引大资金→大承诺太大→大资金退出→没钱做最简单的工作→领域停滞不前。

找到吸引力和诚实之间的平衡是不让我们依赖的人失望的关键。

炒作声明将不会如此平常——或可信

如果一个物理学家声称:“我们将能够在 20-30 年内创造一颗恒星”,没有人会相信。那么,当某个人工智能大师声称我们将在几十年内建成 AGI 时,我们为什么还要继续听下去呢?马文·明斯基在 1967 年说,“在一代人的时间内……创造‘人工智能’的问题将会得到实质性的解决。”当时没有发生。现在还没有发生。而且这似乎不会很快发生。

人们一直声称这个领域的终极目标就在几十年后。象征性人工智能取得了一些适度的成功。那么 AGI 一定就在附近。机器学习系统学会了识别单词和对物体进行分类。那么 AGI 一定就在附近。深度学习系统生成了人类水平的文本和梦幻般的图片,揭示了蛋白质折叠的机制,并且(几乎)可以驾驶汽车。那么 AGI 一定就在附近。

AGI 不在拐角处。如果一个复杂的信息处理系统是世界上最好的棋手,而不是人工智能,我们会看得更清楚。因为这个名字包含了“智能”,看起来我们正在朝着最初的目标努力,但事实不再是这样了。我们正在建立狭窄的信息处理系统。如果一个在 CIP 工作的研究员声称 AGI 就在眼前,人们会笑:你为什么还要提到智力,伙计?

最后的想法

如果约翰·麦卡锡没有创造人工智能这个术语,我们无法知道这个世界会是什么样子。这篇文章纯属猜测。然而,这个思想实验是有价值的,它让我们反思一些我们认为理所当然的事情。“可能”如何影响我们看待和理解“它是什么”的方式?

我最初被人工智能吸引是因为“人工智能”这个词听起来非常未来,非常科幻。艾似乎保守着未来的秘密。不仅仅是我,AI 有意识地努力占据我们集体想象中的空间。它改变和适应,以包含那些仍然遥不可及的思维技术方面。当被认为是人工智能的东西开始被很好地理解时,我们就不再称它为人工智能了。它不再是人工智能,而开始“仅仅”是花哨的数学和统计学。人工智能在我们的技术和社会优先等级中拥有令人羡慕的地位,同时,它欺骗我们认为它是我们正在寻找的绿洲。

一个研究领域向前发展,只包括似乎超出我们能力的东西,这有意义吗?这让我想起了阿瑟·c·克拉克的一句话:“任何足够先进的技术都和魔法没什么区别。”我们希望人工智能成为我们只能梦想的先进技术。但是如果我们把 AI 当成魔术,看到帽子里的兔子,我们会失望的。

订阅我的免费每周简讯明日之心获取更多关于人工智能的内容、新闻、见解和思考!

此外,请随时在 LinkedInTwitter 上发表评论和联系!😃

</5-must-know-ai-concepts-in-2021-75d8c1ff938>

你能从一个额外的实验中学到什么

原文:https://towardsdatascience.com/what-you-can-learn-from-one-extra-experiment-c14e3b0d2232?source=collection_archive---------25-----------------------

行业笔记

如果你只是在做 A/B 测试,或者按照改变一件事(成本)的方法去实验,你可能会错过有用的知识。显示了对您的过程提供更多洞察的备选方案,并讨论了获得这种洞察的成本。

总结

至少在 100 年前的,成本(改变一件事情)的实验方法在已经被证明是一种无效的实验方法。然而它依然存在。为什么?A/B 测试方法是成本的一种变体,但缺点较少,尽管在获取所有需要学习的内容方面仍然效率低下。让我们通过介绍常用术语来深入了解原因。如果实验设计对你来说是一个熟悉的话题,请跳到第 3 部分。

实验可以应用在你想象的任何地方,所以下面的例子来自烘焙、学习一门新语言、科学、机器学习和网站优化。但是不要让这些例子限制了你。

1.一些常用语言/术语

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

以下将解释的概念说明[ 自己的工作 ]

  • 因素 :你在实验中正在改变的一件事:比如字体大小,系统的温度,发酵粉的量,一种配料的供应商,或者你给一个网站做背景的颜色。在上图的横轴上,比如温度, T
  • 数值因子 允许排名和量化,如:调音台上的速度等级 1、2、3;要学习的新单词数量;pH;图像的宽度;ML 模型中的调整参数。
  • 分类因素 代表一种选择,虽然有时可以对其进行排序,但简单地将其视为一种选择可能更容易。例如:使用供应商 R 或供应商 Q 进行塑料包装;使用搅拌桨和面团钩制作面包;使用带衬线的字体 T 或不带衬线的字体 A;使用文本 D、E 或 F(每种文本以不同的语气书写)作为您的行动号召;用古典音乐 C 或流行音乐 P 学习词汇列表;使用稳健回归或常规回归建立模型。分类因素也可以以任何顺序显示在上面的横轴上。
  • 等级 :您为因子选择的值。字体大小 22 是数值因子的级别,您可以使用大小 18 作为同一因子的不同级别。使用 ArialTimes New Roman 是分类因子的两个可能级别。上图显示了两个水平:21℃和 27℃。
  • 响应 (s):你在一个实验完成后测量的东西,而且几乎总是可以量化的。例如:50 天内每个客户的利润;你能正确回忆起的随机词汇的分数;你的 ML 模型的分类精度。大多数实验系统测量多个响应。在上图中,有一个(看不见的)垂直轴显示了两个响应:€320 利润/天和€390 利润/天。
  • 优化目标 :知道你想往哪个方向移动响应 in:是向上,还是向下?有时我们希望保持不变,同时调查因素水平的敏感性。
  • 最后,一个 实验 :至少一次独立运行,在特定的因素组合下,你可以从中测量反应。不严格地说,当需要多次运行时,我也会认为是“一次实验”,然后我们使用平均响应。严格地说,这些多次运行是在相同条件组合下的重复。只要你知道系统中的典型噪声是什么,这种区别不会改变下面的大部分解释。在图示中,我们预计 5 个单位的响应值大致相同。您可以使用噪声的范围或标准偏差,只要工作一致即可。

2.为什么改变一件事情(成本)似乎是正确的事情

当建议同时改变两个或更多因素时,我最常得到的直接反应是,这违背了科学方法:“我怎么知道哪个因素导致了反应的变化?”人们从学校开始就被教导,单一因素的变化是确认因果关系的唯一方法。

即使在学术环境之外,成本法也在我们的日常生活中被反复验证。考虑让一个软件包正常工作。你改变了设置 D,不幸的是,它仍然不像你想要的那样工作。将 D 变回原来的位置,并尝试改变设置 E;还是什么都没有,把 E 变回原来的样子;最后,改变设置 F 使软件工作。

这并没有错,而且这篇文章也没有宣称成本是错的。单因素实验包含在深思熟虑的实验设计中。

让我们看看如何,通过例子。

3.我们能从一个额外的实验中学到什么?

这是出自一个实际的例子, 而不是 做作地提出一个观点;只是场景变了。我们正在烘烤。我们有一个因子 B =黄油的克数,一个因子 F =面粉的种类。响应是烤箱烘焙产品达到特定棕色的时间(分钟)。所有其他条件尽可能保持相似。

在基线时,用 B = 200g 克黄油和用 F =全麦(w-w)面粉,我们重复实验两次,反应时间分别为 16 分钟和 14 分钟(用相应的能量消耗)。我们这样来说明:

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

第一个实验,重复两次,结果为 15 分钟[ 自己的作品

然后我们用 240 克黄油(B=+1)做实验,保持全麦面粉的面粉因子不变;所以只改变了一个因素;即因素 b。现在的平均响应是 16 分钟(两次重复,都是 16 分钟)。

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

添加接下来的两个实验。更改黄油系数 B 的结果显示在右侧[自己的工作

因此,从科学的角度来看,我们可以得出结论:额外的黄油并没有真正改变反应;在噪音范围内。现在试试面粉因素。回到基线,但从全麦转换到普通面粉。仅改变这个因素会将响应增加到 20 分钟烘烤时间。

因此,从这 3 个数据点中,我们了解到:

  • 我们可以用更少的黄油(200 克),用更少的能源获得大致相同的褐变;
  • 与全麦面粉相比,普通面粉的烘焙时间要长 5 分钟,才能达到同样的褐变效果。因此,除非普通面粉节省的成本超过额外 5 分钟烤箱时间的能量消耗,否则坚持全麦面粉。

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

改变面粉因子 F 的结果显示在右边[ 自己的工作 ]

许多实验者在这 3 次运行后就停止了。

让我们再增加一个实验:相对于基线点,使用额外的黄油 同时切换到普通面粉。我们获得 25 分钟的烘烤时间。让我们解释一下我们可以获得哪些额外的知识(在帮助我们的图表中有所说明):

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

所有 4 个场景的结果,右边是完整的互动图[ 自己的作品

  • 我们认为黄油的数量对烘烤时间没有影响,但这只适用于全麦面粉,而不适用于普通面粉!对于普通面粉,额外的黄油 会显著增加 的烘焙时间。另一种说法:“黄油的效果,取决于面粉种类”。
  • 与上面的说法对称:“改变面粉种类的效果取决于黄油的用量”。图中的分歧线反映了引号中的这两种说法。
  • 以上两个要点说明了系统中存在交互。相互作用是对称的。数学上,设 x B 为黄油效果,编码为xB =-1(200g)xB =+1(240g);全麦面粉的 x F=-1,普通面粉的 x F=+1。然后我们可以从下式预测烘烤时间 y :

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

  • 最后一项是相互作用项,由于它是非零和重要的,我们知道相互作用图中的线不是平行的。如果最后一项因为为零而消失,那么相互作用图有平行线,第四个实验没有增加多少新知识(除了证实我们已经知道的)。
  • 除了了解交互作用,我们还看到了下一步实验的地方,以进一步减少烘焙时间:尝试使用更少的黄油,绝对坚持全麦面粉。然而,这是有限度的,因为如果我们走得太远,我们可能会开始改变系统中的其他结果。但这正是设计实验存在的目的。以系统的方式发现这些权衡。

交互作用是非常正常的,并且几乎可以从任何析因实验中学习到。我很少做交互作用项为零的实验。

这里有一个日常互动的例子:用冷水或温水洗手——这是一个因素。用或不用肥皂洗手——这是第二个因素。但是用温水和肥皂洗手:现在有了很强的相互作用,因为肥皂改变了温水的效果,而温水改变了使用肥皂的效果。你又看到了对称。

这种 学来的资料 极有价值。互动可以增强你的反应,就像肥皂水的例子,或者有时它们会对你不利,就像上面的例子,抵消了单个因素的改善。

4.将此扩展到多个因素

上述方法是 设计实验 的核心,被称为析因设计。它可以扩展到多个因素,并在多个级别处理这些因素。它是组合的:如果每个因素有 2 个水平,那么你需要 2ⁿ实验,对于 n 个因素。但是也有替代的设计方法,仍然保持析因实验的理想特性,同时需要的实验比 2ⁿ实验少得多。

这些部分因子实验真正伟大的地方在于它有一种内在的可折叠性。如果一个因素被证明是不重要的,你仍然可以从其他因素中恢复知识。也有一定程度的冗余,这样如果其中一个组合出了问题,你的其他实验至少包含一些信息来恢复大部分学习。

要了解这些优势以及更多,您可以参加一个关于实验设计的免费课程 【注意:我没有从这个课程中获得任何东西——它是完全免费的审计】。

5.A/B 测试如何成为成本法的一种变体

那么如果只使用 A/B 测试,你会错过什么呢?

A/B 测试是一种形式的实验,其中有一组基本情况参数(B,之前的基线*)和另一组与之比较的参数(A,之后的,或替代方案)。这两个场景之间的反应进行比较,并作出选择坚持更好的场景:A 或 B。通常需要在 B 和 A 场景大量运行,以克服系统中的多样性:特别是网站优化,你不能总是控制使用你的网站的观众。[在实验室实验中,这些干扰(如他们所称的)是可以控制的,因此需要较少的重复运行。]再者,你所谓的 A 和 B 是可以互换的,保持一致就好。*

如果您要运行 A/B 测试,在两个级别测试网页上的字体大小、字体类型和文本位置,您可以按如下方式进行可视化:

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

A/B 实验:基线与备选方案[ 自己的工作

在传统的 A/B 测试中,不检查立方体的其他 6 种组合:只检查标记为 A 和 B 的 2 种情况。偶尔会添加沿粗线的单因素实验。出于方便起见,省略了其他 6 种组合,因为查看可靠差异(功效分析)的测试数量可能相当高,并且获取所有组合的数据可能需要非常长的时间。

继续上面的例子,在 A/B 测试之后,我们不能确定 3 个因素中哪一个影响最大,也不能确定是否有交互作用,也不能真正了解我们的系统,除了知道 A 和 B 哪个更好。我们没有通过等高线图获得方向性的感觉,也不清楚下一组实验应该在哪里。我们要用更大的字体吗?我们是否将文本在页面上向右移动了更多?我们对哪个因素最敏感?

当我读到 A/B 测试失败的报告时,我想知道还有哪些因素的组合会成功。也许是系统中的交互作用抵消了个体因素的收益?

相反,对于成功的测试,替代场景更好仅仅是运气/良好的直觉吗?在其他组合中还能学到多少?

当然,没有免费的午餐:这些额外的学习是以额外的测试和更长的运行时间为代价的,以获取其他组合的数据。

6.顺序实验

为什么这些都很重要?实验本质上是连续的。你从一系列实验中学习,修改系统并继续前进,添加或删除因子,和/或改变它们的水平。你几乎不会在最佳的第一时间着陆。此处的插图显示了价格和吞吐量这两个因素的变化,从蓝色组开始,然后是绿色组(两者都是经典的析因设计),最后是橙色组的实验(显示了带有轴点的响应面优化设计,即星形)。每组都朝着最佳响应移动。

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

一系列 3 组实验,显示接近最佳值[自己的工作]。

了解系统中的相互作用和非线性是至关重要的。当你接近一个最佳值时,你必须保持水平,然后梯度改变符号。这意味着,最初的轮廓线可能是平行的,远离最佳值,但当你接近最佳值时,你会看到曲率和非线性。以下是烘焙示例的轮廓:

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

烘焙示例的等高线图,使用 x 轴和 y 轴上的编码变量[ own work

烘焙例子的所有上述学习可以在这个等高线图中看到,包括在哪里计划下一轮实验的感觉。

你可以在这本 (免费)教材章节 中了解更多关于设计性实验的一般方法。

7.摘要

  • 实验往往需要很长时间,每个数据点都是有价值的。因此,为了从有限的实验预算中获取尽可能多的知识,使用结构化的方法进行适当的规划是必不可少的。
  • 使用关于你的系统的理论,或先前的知识,来告知包括哪些因素,同样,部分因子,或类似结构的设计,可以用来筛选有影响的变量。
  • 在一系列实验完成后,用新的发现来补充你现有的知识。不要直接跳到新的、性能更好的场景:试着理解为什么会观察到变化,并从现有的交互和非线性中学习。
  • 最后,并不是所有的实验都会导致最优化。通常,了解哪些因素有影响,以及影响的程度,是我们所需要的。但是要确保你使用结构化的方法,这允许你建立在先前的工作之上,并且如果必要的话,在后面进行优化步骤。

你在学校学不到的数据

原文:https://towardsdatascience.com/what-you-dont-learn-about-data-in-school-2bf872ceda47?source=collection_archive---------38-----------------------

如何用不完美的数据得到有用的结果

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

照片由来自佩克斯布拉德利·胡克拍摄

有许多资源可供数据科学家和数据分析师学习机器学习、SQL、Python、数据可视化等等。这些对开始数据分析职业生涯的人和试图提高技能的人非常有帮助。然而,学校并没有为你准备好我所说的“数据现实”。你通过完美完整的数据进行学习,但你在现实世界中得到的是肮脏的,有时是不完整的数据。运用完美数据调整所学并将其应用于“数据现实”的能力将使你成功——以下是几个例子。

显示方向结果

我曾经被要求帮助市场部建立一个 A/B 测试,以评估他们的电子邮件系列的有效性,该系列旨在将用户转化为试用用户并成为付费用户。我被拉去做其他项目,我们不得不等到雇佣了营销数据分析师之后,才能对 A/B 测试进行评估。这是当我们发现测试已经运行了 6 个月还没有正确设置的时候。控制组和测试组的比例并不像我们最初打算的那样是 50/50。

如果这是一个关于 A/B 测试的类,你将会收到完美的测试数据,有适当的 50/50 分割,足够的样本大小的用户,并继续评估统计显著性。实际的电子邮件测试并没有满足所有这些参数。我们不能告诉市场部我们必须重新进行测试,再等 6 个月。我们如何挽救这个数据不完善的测试?

由于数据不符合适当的 A/B 检验标准,统计显著性被排除了。队列分析是我们能想出的挽救结果的唯一方法。用户被分为控制组和测试组,然后根据点击或打开电子邮件的用户与没有点击或打开电子邮件的用户进行细分,以显示产品参与度、试用启动率以及向付费会员的转化。

在利益相关者的陈述中,结果被认为只是方向性的,不符合统计学意义的标准。营销部门很高兴,因为与对照组相比,测试组表现出了更高的参与度和试用启动率,尽管这并不显著。现实是利益相关者需要向他们的老板报告结果,只要他们是积极的,即使没有统计学意义,这也比显示消极的结果要好。

你可能会想,如果测试组的参与度低于控制组,我们会如何处理这些结果。然后,我们可能会尝试分析系列中的每封电子邮件,以确定测试组中与控制组相比参与度较低的邮件,或者试用开始率较低的邮件。A/B 测试出错的可能性无穷无尽,适应显示方向洞察力是挽救结果的一种方法。

Takeway: 在缺乏完美数据的情况下,对你的用户进行细分,找到有方向性的见解。利益相关者不需要完美。有时候,在更好的数据出现之前,正确方向的指导就足够了。

针对数据差距进行调整

营销归因在现实中比你在学校里学到的更难实现。问题是,公司很少或根本没有追踪将销售和转化归因于特定的营销接触点。虽然我知道这些问题,但当我被要求将营销努力归因于收入时,我不能很好地说这是不可能的。我如何利用部分跟踪数据将收入归因于营销努力?

首先,我确定了所有推动收入的营销活动,如引导用户开始试用的付费营销广告,以及旨在将当前试用用户转化为付费会员的试用电子邮件系列。然后,我将个人转换率和总转换率结合起来,应用于我拥有用户级别和活动级别信息的活动,以估算收入。结果并不完美,但在归因追踪得到改善之前,对于第一轮测试来说已经足够好了。

要点:用汇总信息或外部来源填补数据缺口,直到更好的数据出现。结果不会尽善尽美,但有方向性的见解是良好的第一步。

最后的想法

无论你上了多少课,当你遇到现实生活中的情况时,都不会是一样的。成功的关键是能够把你学到的东西应用到可用的数据中。虽然我没有涵盖每一个不完美的数据场景,但我希望这能让您在如何处理您的“数据现实”方面有一个良好的开端。

你可能也会喜欢…

https://medium.com/swlh/how-i-used-a-machine-learning-model-to-generate-actionable-insights-3aa1dfe2ddfd

关于 VLOOKUP 你可能不知道的是

原文:https://towardsdatascience.com/what-you-might-not-know-about-vlookup-657103e1ca77?source=collection_archive---------47-----------------------

以及为什么你应该开始使用熊猫

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

照片由 Marten NewhallUnsplash 拍摄

VLOOKUP 是一个基本的 Excel 函数,任何需要匹配两个表中数据的人都可能使用它。也许更令人惊讶的是,一些网站展示了如何在简历中包含 vlookup 功能的简历样本。虽然有许多文章讲述了如何使用这个函数,但是有些文章可能不完整、过时或者缺乏深度。本文旨在强调 vlookup 函数中通常被忽视的局限性,然后展示一些创新的技巧来克服这些局限性。

Vlookup 是 Excel 中的内置函数,它允许用户在给定数组的最左侧列中找到特定值的第一个匹配项,然后返回与特定列对应的同一行中的值。

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

vlookup 的一个小例子。图片由作者提供。

对于大多数目的来说,它是非常有用的。然而,在特定的情况下,在 vlookup 能够被有效地使用之前,需要相当多的人工工作来形成数据。

帮助器/重复列

如果交换了Fruit & Qty列,则不能直接执行 vlookup。常见的解决方法是使用公式复制列。(可以将包含键的列复制到左侧或将包含值的列移动到右侧。)

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

复制列。图片由作者提供。

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

图片由作者提供。

(例如,当数组最左边的一列有重复值时,或者当需要将两列数据连接在一起以形成查找关键字时)

这对于简单的表来说非常好,但是当表变得有些复杂时,就会出现许多这样的重复列。通常,所有的键列都在左边结束。这是不可持续的。

多条件虚拟查询

一位德高望重的 Excel 大师在博客上讲述了如何使用数组公式和choose()函数创建一个 vlookup,它可以看起来“靠左”而不需要添加辅助列。请注意,您将需要按下Ctrl + Shift + Enter,而不是只按下Enter来获取数组公式。如果不这样做,可能会产生一些意想不到的结果。

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

多条件 vlookup。图片由作者提供。

这种方法也可以用于执行多条件 vlookup。

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

图片由作者提供。

我们可以通过高亮显示整个表达式并按下F9来评估choose表达式。注意,它计算出一个有 5 行的数组,其中Fruit & Column的连接是每行的第一个条目,Qty是第二个条目:

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

图片由作者提供。

有些文章可能会建议将表格转换成网格,将Fruit作为列,将Color作为行,将交集作为值,然后使用 INDEX()和 MATCH()。这对于两个标准来说没问题,任何超过 2 的标准都很难实现。这种转换也可能是手动完成的。INDEX() & MATCH()对读者来说并不友好,过一段时间后很难调试。总之,我不推荐;多条件 vlookup 的可扩展性更强。

XLOOKUP

如果你或你的公司订阅了微软 365,最干净的方法就是使用 XLOOKUP。

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

图片由作者提供。

我们可以突出显示$I$4:$I$8&$H$4:$H$8并按下F9来评估表达式,并观察它将值成对连接起来。

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

图片由作者提供。

处理重复

vlookup 的另一个缺点是它只能返回一个值,因此如果键列包含重复项,返回值将对应于匹配的第一行。如果第二个值是预期的值,这可能是危险的,因为错误将被无提示地传递。因此,在执行 vlookup 之前,应该始终检查 key 列是否包含重复项。在下面的示例中,在Fruit列下有 2 行的值为Apple。Vlookup 只返回Qty列下的第一个值。

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

图片由作者提供。

执行左合并将返回底部表格,参考下图。并且所产生的附加行将提供在FruitQty表中存在重复的指示。

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

图片由作者提供。

结论

  1. 检查键列中的重复值
  2. 考虑使用 helper 列是否更具可伸缩性,否则使用多条件 vlookup 或 xlookup
  3. vlookup 不等同于 merge

事后思考

这篇文章的目的是让人们意识到 vlookup 的局限性,并分享使用 vlookup 的创新方法——这些方法更具可扩展性、可读性和可维护性。

只是在我花了一些时间用 python 编写脚本之后,我才学会了“可读性很重要”,这让我更加清楚我在 Excel 中编写公式的方式。有些人(嗯,我就是其中之一)以在 Excel 中编写冗长的嵌套 if-else 语句为荣。(天哪!修改它们是如此困难/痛苦/令人困惑,尤其是如果你有一段时间没有看它们的话。)希望这能启发读者思考如何更好地准备电子表格,以便于阅读、维护和调试。

如果你喜欢这个故事,也可以看看以下内容:

量子机器学习入门需要什么

原文:https://towardsdatascience.com/what-you-need-to-get-started-with-quantum-machine-learning-5c7334d480c6?source=collection_archive---------3-----------------------

即使你不是数学家或物理学家

量子机器学习入门需要的一件事不是物理学学位。能够简单解释的是老师!

这就是用 Python 动手学习量子机器的目的。

量子机器学习是利用量子计算来解决机器学习问题。这听起来确实有点像火箭科学。真的是!

火箭科学是一个广泛使用的短语,指智力上困难的东西。超出了普通克里特斯人的能力。

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

作者弗兰克·齐克特的图片,灵感来自《辛普森一家》

但是你偶然发现这篇文章的唯一事实让我有把握地认为你具备进入这个领域的智力先决条件。一些智能算法已经评估了你感兴趣的主题,并得出了这篇文章可能适合的结论。但也是你自己选择的。如果你没有考虑过学习量子计算、机器学习或量子机器学习,你就不会决定看这篇文章。如果你不够聪明就不会做的事。

我们生活在这样一个时代,知识和教育不再局限于一小撮特权人士。你可以从网上抓取量子机器学习的最新研究。Arxiv 上有大量的科学文章。有很多关于机器学习的书,也有一些关于量子计算的书。而且,有无数的博客帖子。

问题是关于量子计算的文献充满了物理术语和数学公式。很快,你可能会觉得这个话题仅限于拥有博士学位的数学家和物理学家。

让我们以这段引文为例:

VQE 可以帮助我们估计一个给定的量子力学系统的基态能量。这是给定哈密顿量的最低特征值的上界。它建立在被描述为: ⟨ψλ|H|ψλ⟩ > =E0 的变分原理上

如果你没有物理学学位,第一个自然的反应是把文章收起来。

“嗯,不错的尝试。可能整个题目都不适合我,你想。“也许,量子机器学习是我力所不及的”。

不要那么快放弃。量子计算中的大部分东西都是由物理学家和数学家发现的。当然,当他们分享他们的见解和教导他们的学生时,他们建立在他们的同龄人的知识之上。他们使用自己熟悉的术语是合理的。

你也不会用酒保的词汇来解释编程和机器学习吧?

当我们谈论或写一些东西时,假设某种知识是合理的。但是,我们应该阻止附近其他学科的学生学习这些东西吗?为什么我们不应该支持一个计算机科学家或者一个软件工程师学习量子计算?

我有明确的看法。我相信任何一个真心对量子机器学习感兴趣的人,应该都能学会。应该有满足学生需求的资源,而不是为了方便老师。当然,这需要老师能够用简单的语言解释复杂的东西。

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

作者弗兰克·齐克特的图片

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

我不相信任何人(包括我)真的理解一台经典计算机是如何工作的。然而,我们都在使用它们。我们甚至给它们编程!我学会了如何编写经典计算机的代码,因为我的老师用我能够理解的方式向我解释了它。

我的高中老师用应用的方式解释了数据类型和算法的概念。他教我它们是如何工作的,以及它们有什么用处。尽管——或者可能是因为——我们没有经历电子机械电路和信息理论,我还是能够学习编程。

结论

当然,理解量子力学的基本理论是可取的。当然,能够做数学是可取的。但是,更重要的是,你需要明白如何解决某个问题。

本质上,在量子计算中,我们使用量子叠加、纠缠和干涉来解决任务。这些是惊人的,也许是违反直觉的现象。但是不管它们看起来有多怪异,量子力学系统都遵循一定的物理定律。这些定律使得系统以特定的方式运行。

学习这些规律并不比学习一门新的编程语言更难——当放在正确的环境中并从概念上解释时。

我真的相信至少有一些编程经验的开发者、程序员和学生能够精通量子机器学习。

量子机器学习入门需要的不是物理或数学学位。这是一个老师能够简单地解释它!

我不敢说我对量子机器学习的理解足以用调酒师使用的词汇来解释它。但是我会试着向计算机科学家和软件工程师解释一下。我看不出有什么理由把这个领域局限于数学家和物理学家。

在我的帖子“量子编程—针对非数学家”中,我展示了如何用 Qiskit—IBM 的量子 SDK 计算两个概率的联合概率。你不需要知道所有的理论来遵循它。在《T2》中,你是否纠结于量子叠加?”,我给大家动手介绍一下量子计算。

这两个帖子只是 用 Python 动手量子机器学习的一个小摘录。

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

无论你是刚刚开始学习量子计算和机器学习,还是已经是一名高级机器学习工程师, 使用 Python 进行量子机器学习是你开始学习量子机器学习的全面指南——将量子计算用于机器学习算法的计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值