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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

为什么 2021 年需要人工智能伦理方面的公民能力

原文:https://towardsdatascience.com/why-civic-competence-in-ai-ethics-is-needed-in-2021-697ca4bed688?source=collection_archive---------35-----------------------

变更数据

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

Jukan TateisiUnsplash 上的照片

“因此,不仅参与这一技术未来对你来说很重要,而且要考虑另一种未来,在这种未来中,你的想象力可以塑造我们正在构建的技术。”

蒂姆尼特·格布鲁博士

文丘里管

从许多不同的角度来看,2020 年无疑是书籍的一年。我们不需要提醒所有出错的事情。感觉人工智能伦理领域本身就是周围发生的一切的缩影。接近年底的时候,我觉得 Gebru 博士在谷歌工作期间所经历的不公正和麻烦确实为我们蒙特利尔人工智能伦理研究所的使命增添了更多的燃料,我们呼吁建立人工智能伦理方面的公民能力。这在上面引用的 Gebru 博士的话中得到了恰当的体现,我希望我们把这句话作为我们进入 2021 年的战斗口号。

添加替代文本

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

照片由 马特·博茨福德

什么是公民能力?

公民能力是指日常生活和各行各业的人能够有意义地参与某一特定主题的讨论的能力。在这里,有意义的参与是指带着解决方案的心态,对问题有基本的了解,以前尝试过什么,以及我们可以采取什么实际行动来以富有成效的方式推进讨论。

至少,这是我对它的工作定义,也是我通过在蒙特利尔人工智能伦理研究所(T21)的工作努力帮助社区发展的东西。

在 AI 伦理学领域意味着什么?

人工智能伦理领域,无论你是一个完美的内部人士还是一个关心的公民,都充斥着许多不同的讨论,涉及隐私、偏见、公平、问责、透明度、治理、责任等主题,以及更多不同的想法,其中一些想法彼此有重叠,另一些则没有。

这里需要考虑的一件重要事情是,无论你是否选择直接接触人工智能,所有人都会感受到它的影响。因此,如果我们想要塑造该领域的技术和政策措施,以使我们走向一个技术创造积极变化的世界,我们需要以一种细致入微的方式参与其中,而不是对任何领域应用一刀切的方法。这种一刀切的做法将导致该领域的措施要么扼杀创新,要么使该领域过于不受监管和监督,从而继续对人们造成伤害。

添加替代文本

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

我们为什么需要它?

我认为人工智能伦理中的公民能力很重要,主要有三个原因:

  1. 平衡角色
  2. 更有意义的多元化之路
  3. 从人工智能系统中捕捉社会危害的持续基础

1.平衡角色

有许多来自政府、学术界、工业界和民间社会的人工智能伦理倡议。它们中的每一个都有特定的议程,这些议程决定了用于管理技术及其部署的技术和政策措施。

但是,由于它们的组成、资金来源、调查方法等原因,它们经常遗漏某个方面。拥有基础广泛的公民能力可以帮助更多的人以批判的眼光看待问题,并以某种方式发现盲点,而当我们有几个(通常)背景相似的人时,这是不可能的。

2.更有意义的多元化之路

我们来自不同的生活领域,有着不同的生活经历、文化、语言、能力、心态,以及我们所有人都是独一无二的,创造一个能够捕捉所有这些丰富性的单一工具是一个失败的秘诀。

我们不经常考虑这个问题,但是当你有很多人众包时,通常会有这样的印象,我们会得到很多低质量的建议,可能是因为不熟悉领域,钓鱼行为等。但是,这也导致了一些宝石,否则将去探索和阐明。我们已经在蒙特利尔人工智能伦理研究所举办的研讨会上亲眼目睹了这种情况,在那里,“专家小组”本应在讨论中提出(但没有)绝对精彩的建议。

多元化有许多方面(有许多学者在这方面受过更好的教育,他们清楚地阐述了多元化的维度),这是单个个人甚至一群人无法预见的。为此利用群众肯定是一种可以帮助我们尽可能彻底的方法。

3.从人工智能系统中捕捉社会危害的持续基础

最后,实时监控人工智能系统的危害并不是一件容易的事情。当然,当我们有许多不同的方式可以在现场部署像人工智能这样的多用途技术时,无论是良性还是恶意行为者,情况都是如此。

增强人们的能力,让他们能够更批判性地思考常见的伤害模式,可以帮助他们成为众包监管者,可以发现可能出错的地方,与记者分享(例如),并吸引研究和开发人员的注意,以便我们可以开始解决问题。

添加替代文本

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

我能帮什么忙?

有许多方法可以实现这一点,下面的列表只是思考其中一些问题的起点:

  1. 支持基层组织
  2. 逐渐熟悉其中的细微差别
  3. 即使你觉得辩论没有进展,也每天出现

1.支持基层组织

有很多方法可以帮助你在这个领域建立公民能力。一个简单的方法是支持你当地的组织做这种工作。这包括正式和非正式的努力,无论是通过对门票销售的捐款,还是通过认捐款项来支持他们的使命的更正式的承诺。经常有人问我,少量的钱是否会有所作为,对于那些由志愿者或自筹资金的组织来说,你可以放心,每一美元都会有所作为。

你不需要总是把财政支持视为唯一的途径;奉献时间和其他实物支持也是帮助当地努力的好方法。

2.变得熟悉细微差别

当谈到建设公民能力时,我们需要考虑的一个关键问题是保持必要的细微差别,以有意义地推进对话。这意味着要认真关注问题,不要妄下结论,花时间谨慎行事,以获得必要的跨学科视角,帮助我们做出明智的决策,并为生态系统所需的正确变化而努力。

这来自于相互接触和从更广泛的人群中学习,而不仅仅是一个人通常所习惯的。这可能很麻烦,但这种投资的长期回报是值得的。

3.即使你觉得辩论没有进展,也每天出现

这可能是最难的要求,但最终也是最有影响的:即使短期结果令人失望,进展缓慢,没有多少人支持你的使命,我们也需要继续推动公民能力的建设。

在蒙特利尔人工智能伦理研究所的工作中,我亲自面对了这个问题。在疫情会议之前,我们的活动和研讨会在很大程度上仅限于与蒙特利尔的一系列社区合作伙伴共同举办的现场活动。从那时起,我们已经成为一个数字优先的研究所,汇集了来自不同学科和机构的研究人员,并欢迎来自世界各地的参与者和合作者

我鼓励每个人在 2021 年人工智能伦理学的所有工作中保持这一理念,为今年和未来几年的成功奠定基础。

想了解更多我的作品,可以访问:https://ATG-abhishek . github . io

为什么不断查看指标会让公司走向失败

原文:https://towardsdatascience.com/why-constantly-looking-at-metrics-sets-companies-up-for-failure-a7a2d91ee7fd?source=collection_archive---------17-----------------------

仅仅因为某些东西是可以衡量的,并不意味着它有助于实现你的目标。

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

照片由 Unsplash 上的 Praveesh Palakeel 拍摄

你正在路上开车,这时一个警察在你后面停下来,没有闪灯,只是拐上了高速公路,而你恰好在前面。你没有超速,没有喝醉,没有打电话,也没有其他任何令人担心的事情。只是从一个地方到另一个地方,但你还是会瞥一眼速度计,以防万一。此时此刻,你不关心你的发动机温度,你有多少汽油,或者你的机油压力低。你只是在检查与你当时的情况相关的主要指标,以确保你没有给这位官员一个借口来完成他这个月的配额。

这个逻辑同样适用于商业。

我经常看到高管和经理试图将他们所知道的每一个指标都塞进一个仪表板中,试图确保他们对自己的业务“了如指掌”。我很欣赏你的意图,但这将不可避免地让你的生意偏离正轨。让我们回到前排座位,假设我们现在采取的立场与我们热切的执行官相同。你注意到了警察,但同时你开始检查你的油箱还剩多少英里,轮胎压力看起来好吗,后座的孩子们在说什么,哦,那些肯定是我身后明亮的闪光灯…

恭喜你,你设法在最糟糕的时候超速了一会儿,并得到了法庭授权的机会,向你所在的乡镇捐献 125 美元。或者在商界,你现在已经错过了你的季度目标,因为你的注意力分散在小事上,你没有对真正重要的事情给予足够的关注。

设置通知阈值

试图一直关注每一件事意味着你不能把注意力集中在重要的事情上。这并不是说不应该进行监控,只是你不应该一直盯着它。因为我不知道你是做什么生意的,所以在这个例子中,当我们把注意力集中在引擎温度上的时候,你要迁就我。如果你的车开始过热,你会得到通知,当然,你会停下来补救。没有人会反驳你的发动机融化不是最理想的情况,但你没必要每次出行都把眼睛粘在温度计上。一旦正常的门槛被突破,那么你就可以把注意力集中在它上面。在那之前,没什么好担心的,你明明还在前进。

请记住,通知不会在发动机熔化后出现,一旦有东西不再正常范围内,您就会收到通知。离开这个门槛后,你的注意力就被吸引到这个问题上,以免它变成一个真正的问题。这也正是您应该如何处理您的业务指标。不管你的指标是大幅波动还是周环比稳定;它会经历一些“正常”的版本,因此相应地设置触发器。确定一个合适的阈值通常既是科学也是艺术,所以你可以问一些问题来帮助你设定一个合适的水平:

  • 指标需要达到什么值才能引起警报?
  • 是否有一些上限或下限是不可接受的?
  • 一旦指标超过某一水平,它会开始影响其他指标或过程吗?
  • 简单地打破当前目标是一个足够好的通知吗?
  • 趋势比实际值更重要吗?

如果你对以上至少一个问题没有答案,那么你真的应该问问你为什么要看这个指标。然而,如果你处于别无选择的情况下,那么我至少会建议你采用某种控制限制。如果你想要更多的提示,你可以下降到 2.5 或 2 个标准差,但这都取决于指标的波动性。还要记住,趋势或斜率可能与实际表现一样重要,甚至更重要。因此,通知可以根据反复的下跌或上涨趋势来设置,而不是达到某一水平…或者两者都有。

一周又一周地审查绿色记分卡没有任何价值,因为这是在浪费会议时间。

无论如何,我们不可避免地会扫描任何红色的东西或丢失的目标,所以当事情得到控制时,为什么要浪费时间呢?这并不是说你应该改变目标。你能做的最糟糕的事情就是仅仅因为事情似乎在控制之中就改变目标。你完全可以探索在下一个级别操作的机会,但是这要从回顾你的过程能力开始,而不是要求任意的%改进。例如,期望发动机在比正常温度低的温度下运行是荒谬的——它应该变暖。不要忽视一些指标在一个范围内运行得最好,不应该不断地被进一步推动。

自动通知

您已经在查看记分卡,因此有能力定期获取这些数据。很可能已经有一些红/绿格式的目标了。从那时起,检查指标 A 是高于还是低于设置的阈值是一个简单的工作。没有理由不在您的仪表板中自动显示警报。重点是将会议中手动扫描记分卡的工作转移到让计算机扫描记分卡上。

不再审查不太重要的指标所节省的时间可能看起来微不足道,但想想所有因误解无关紧要的指标而发生的兔子洞讨论和衍生会议。对于一些领导者来说,不给出一些指导就离开运营回顾可能很难,所以很容易要求“双击”那个“关闭”的指标。见鬼,领导者很有可能忘记了它是如何计算出来的。你已经对汽车的温度计有足够的信心,可以安全地把你从一个地方带到另一个地方。信任这些新的阈值将是一项更容易、风险更小的任务。

高管和经理可能不会评审相同的指标

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

KPI 层次结构-按作者排序的图像

战略度量与运营度量相同是不常见的,这不是什么新鲜事,但人们往往会忘记。你可能不关心汽车的详细诊断结果,但你的机械师会关心。就像经理们可能不需要关注公司的营业利润率,但高管们需要。也就是说,经理们仍然会被问到为什么会出现某些趋势,所以确实需要在战略指标和运营指标之间进行一些转换。

例如,如果高管需要维持特定的服务水平,那么经理可以考虑员工的生产力。不难看出,同一周生产率的下降很可能是服务水平下降的原因。这种简单的分离允许管理者使用他们直接控制的和特别相关的度量。然而,强迫经理解释他们无法控制或理解的指标会导致审查期间出现虚假的答案,这些答案可能与问题无关或基于轶事信息。

允许自治

让我们回到车上,这次是和一名乘客。一条短信进来,你有一个选择 A)拿起电话读它 B)请乘客读它。在负责任的成年人的世界里,每个人都选择选项 b。明知故犯地选择选项 A 会让你处于暂时的风险之中,不管你认为自己能多好地保持对道路的关注。乘客完全有能力阅读文本,并让你知道它是否需要你的注意。是关于你的汽车延长保修期的垃圾短信,还是一个朋友的父母刚刚去世?无论哪种方式,乘客都会通知你,如果需要采取行动,不管最初是谁读了它,它都会发生。

这确实需要信任他人去做他们应该做的事情,但是如果你不能信任他们去做,那么你可能会遇到比管理度量更大的问题。

对于任何不能自动化或复杂到需要人工审查的事情,引入项目经理或 SME 没有坏处。给予项目经理或 SME 监控与其领域相关的运营指标的自主权,将使领导者的注意力集中在关键的业务计划上。这些中小企业将对趋势有适当的背景,并更适合于知道什么时候真的是一个问题,并在需要时提出来。在业务回顾期间保持讨论,避免对无关紧要的 KPI 趋势进行不必要的猜测。

随着关注点的转移,改变或重新评估指标

随着时间的推移,每个业务都会改变方向,因此仪表板也应该相应地改变。例如,当行驶在一条土路上时,速度表不再重要,取而代之的是,你的注意力集中在避开路上的岩石或坑洼。不要仅仅因为遗留指标在记分卡上一直有一席之地就抓住它们不放。如果他们不直接支持你前进的方向,那么就把它放回自动化上,把它交给 SME 来监控,或者完全摆脱它。别浪费时间了!

你回顾的指标应该与你努力实现的行动过程或最终目标直接相关,否则只会分散注意力。那些把注意力从目标上移开的行为最终会刺激不必要的工作,这些工作会导致大量毫无结果的行动。我们已经天生理解我们个人生活中的这个过程,我提到的没有一个是新的概念。因此,在商业世界中应用同样的原则应该是自然而然的,会产生显著的效率和结果。

为什么持续剖析可以改进您的 Python 应用程序

原文:https://towardsdatascience.com/why-continuous-profiling-can-improve-your-python-application-1c4ec2b238f7?source=collection_archive---------16-----------------------

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

照片由Fotis FotopoulosUnsplash

剖析 python 程序是进行动态分析,测量程序执行时间——代码执行每个程序的功能需要多少时间。由于函数和调用需要太多的资源,所以有必要对它们进行优化。而代码优化不可避免地会导致成本优化,因为它使用的 CPU 资源更少,这意味着为云基础设施支付的费用更少。

开发人员经常使用各种方法进行局部优化。例如,它们决定哪个函数执行代码更快。但是,如果我们试图在没有调查的情况下盲目调整程序,可能会导致问题并导致程序执行速度变慢。

剖析是如何完成的?

有必要决定您是需要使用宏观还是微观层次的剖析方法。在宏分析中,我们分析整个程序,并在程序执行时产生统计数据。在微分析中,像函数调用或计算一样,只对程序的特定组件进行分析。

根据您是想进行宏观还是微观分析,Python 中有几个模块和内置函数可用。对于微观分析,我们可以使用 line_profiler,对于宏观分析,我们可以使用 cProfile 或一个时间包,通过它我们可以确定一个程序执行的总时间。

有时,当我们使用时间包时,由于网络延迟或 CPU 繁忙导致的延迟,得出的时间可能是错误的。因此, timeit 函数多次执行代码,然后显示运行所用的平均时间。

连续分析和执行时间

最需要考虑的是程序执行的时间。程序运行的时间越长,使用该程序的应用程序就越慢。此外,当它被实现时,它占用了太多的 CPU 资源。在云上运行应用程序所用的资源越多,你需要支付的费用就越多。

让我们看看执行时间增加的几个常见原因。

减少内存泄漏和使用

读写数据的过程称为内存管理。默认情况下,它是用 Python 实现的。

但是,在某些情况下可能会发生内存泄漏。

  1. 当剩余的大物体没有被释放时。
  2. 当代码中有参考循环时。

让我们假设已经创建了一个服务器来进行缓存,但是缓存的大小还没有定义。这意味着大量的请求会将缓存大小扩大到内存泄漏的程度。

Python 管理自己的堆,独立于系统堆。内存是在 Python 解释器中分配的——我们根据需要创建的对象类型使用不同的方法。池和竞技场保存在 Python 堆中,因为 Python 处理自己的块。任何类型的内存块的释放仅仅是将它标记为可供将来在解释器中使用。

为了定位内存泄漏,我们利用了内存分析器,它逐行显示代码的内存使用情况。因此,我们可以找出哪些表达式消耗了大量的内存。接下来,我们可以优化这些语句,使它们使用更少的 RAM。

正确利用 CPU 资源

优化 CPU 资源的使用非常重要。如果你使用的是云服务,那就更有意义了,因为你使用的资源越多,你支付的费用就越多。现在,如果我们没有一个程序的统计数据,我们就不能盲目地开始优化过程。

在这种情况下,最好的办法是使用 cProfile ,它显示程序的完整统计数据并列出正在使用的函数——它给出了需要优化的函数或语句的概述。适当的代码优化将消耗更少的 CPU 资源,从而为公司节省成本或优化。

由于这些原因以及更多的原因,开发人员在生产阶段使用连续剖析来评估系统或软件,以查看什么是缓慢的或者利用了大量的资源。例如,连续分析有助于识别程序中可能需要大量 ram 或时间来执行的任何指令或功能。

进行连续分析

内置 Python 模块的问题是,当代码在生产服务器上执行时,无法监控代码的统计数据。即使您设法启用了生产分析,它也会消耗大量的 CPU 资源,这对公司来说成本太高了。

因为连续的剖析是必要的,你可以使用 gProfiler ,它是一个即插即用的模块。只需下载客户端并安装在您的服务器上。它将在后台运行,不会占用太多的资源,并密切关注一切。它还提供了无缝的产品剖析和大量 Python 剖析器无法提供的统计数据。它消耗更少的 CPU 资源,从而为团队节省成本。你也可以把它作为守护进程安装在 Docker 上,或者通过命令行安装。

让我们来看看如何设置和使用它。不费吹灰之力。

首先,您需要创建一个帐户,因为它需要一个 API 密匙来监控您的服务。接下来,您只需用wget下载并安装它。

创建帐户后,在终端上运行以下命令:

*wget https://github.com/Granulate/gprofiler/releases/latest/download/gprofilersudo chmod +x gprofilersudo ./gprofiler -cu — token “<API_token>” — service-name “Service name”*

一旦安装完成,它将开始在后台运行,您将能够在仪表板中查看代码的统计信息:

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

图片由颗粒有限公司提供

当我们使用 Python 模块进行概要分析时,它只向我们显示关于程序的统计数据。另一方面,gProfiler 提供了大量的数据,比如在内核级执行的进程、CPU 使用的资源等等。这样,开发人员就完全知道消耗了多少资源,哪些功能需要优化。

结论

连续分析对于确保正确使用资源至关重要。概要分析允许我们识别代码中一些最基本的瓶颈。解决这些问题可以显著优化代码,并最终降低公司的成本。

为什么数据分析师应该申请数据科学家的工作

原文:https://towardsdatascience.com/why-data-analysts-should-apply-to-data-scientist-jobs-4bd695e7d747?source=collection_archive---------21-----------------------

不要被职称误导

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

照片由picjumbo.com派克斯拍摄

如果你想找一份数据分析师的工作,你可能只需要搜索有数据分析师头衔的工作。你可能没有意识到的是,许多数据科学家的工作实际上是伪装的数据分析师工作。数据科学家的头衔吸引了更多的申请者,但实际上工作职责是数据分析师。作为一名数据科学家和数据分析师,我想澄清数据科学家和数据分析师之间的区别,并讨论为什么数据分析师应该申请数据科学家头衔的工作。

趋势与预测

数据分析师使用汇总级别的数据来发现趋势并提供建议以提高业务绩效。数据科学家将使用机器学习模型中的数据来预测通常在客户级别发生的事件。数据分析师通过回顾过去来寻找趋势,而数据科学家则利用过去来预测未来。

例如,一家电子商务公司将开展电子邮件活动,提供折扣,激励客户进行购买。数据分析师将使用打开率、点击率和总销售额等指标报告电子邮件活动的整体表现。该公司可能希望使用过去的行为(例如先前的购买和网站上的活动)为每个客户提供个性化的报价,以增加购买的可能性。在这种情况下,数据科学家将建立一个机器学习模型来预测发送给客户的最佳报价。

工作职责

谷歌上搜索数据科学家和数据分析师之间的区别,返回的第一条结果是这篇文章指出商业头脑和数据叙事是数据科学家而非数据分析师所需的技能。对于初级分析师来说,这可能是真的,但希望晋升为高级分析师的分析师也需要商业头脑和用数据讲述故事的能力。这些技能是数据分析师和数据科学家在职业生涯中进一步发展所必需的。

Glassdoor 的数据科学家工作描述A/B 测试列为一项职责,但我被要求以数据分析师的身份评估 A/B 测试。在同时拥有数据分析师和数据科学家的公司中,数据科学家将建立机器学习模型,而数据分析师则负责所有其他数据分析职责,包括 A/B 测试评估。

如何辨别

拥有数据科学家头衔的数据分析师工作将不会提到建立机器学习模型。

如果工作描述包含数据分析师的职责,包括 A/B 测试,但没有建模要求,那么它是一个混合的数据分析师和数据科学家角色,可能有一个数据科学家数据分析师的职称。

示例 1 —数据科学家头衔,但不需要建模

这个脸书数据科学家角色具有典型的数据分析师职责,例如“ 定量分析、数据挖掘和数据呈现 ”以及“ 通知、影响和支持产品决策 ”,但没有提到构建模型。"产品领导"是这个角色支持的四个领域之一,也是" 实验结果 "预期的地方。

示例 2 —数据科学家头衔,但主要是数据分析师,从事一些建模工作

这个数据科学家职位提到“ 构建数据科学模型”作为职责之一,只要求“ 一些构建数据科学模型 ”的经验。对于有建模经验并希望转型到数据科学的中级数据分析师来说,这是一份很好的工作。由于这是一个数据科学家的头衔,但工作职责不限于建立模型,这将利用你作为数据分析师发展的技能,并允许你在工作中发展建模技能。如果你把自己局限于数据分析师的职位,这可能不会出现在你的搜索中。

示例 3 —需要机器学习经验的数据科学家头衔

这个数据科学家角色正在寻找一个真正的数据科学家来建立机器学习模型。提到的第一个责任是“ 了解产品、风险和业务需求,以及如何应用 ML 来解决我们最具挑战性的问题 s ”,并需要“ 对各种机器学习技术 的深刻理解和体验”。这与前两个工作示例不同,前两个示例中的职责和要求是数据分析师的典型职责和要求。

结论

如果你是一名数据分析师,你可能会认为你应该只搜索数据分析师的工作,因为你不具备数据科学技能。然而,职称并不能反映实际的职责。如果你已经掌握了所有的数据分析师技能,但没有建立机器学习模型,那么就去寻找不需要建立模型的数据科学家工作。如果你是一名致力于培养数据科学技能的数据分析师,考虑一个拥有数据科学家头衔但需要数据分析师技能和一些建模经验的交叉角色。这将有助于你获得数据科学家的头衔,并获得更多的建模经验,以便在未来过渡到真正的数据科学家职位。

* *

为什么数据漂移检测如此重要,如何通过 5 个简单的步骤实现自动化

原文:https://towardsdatascience.com/why-data-drift-detection-is-important-and-how-do-you-automate-it-in-5-simple-steps-96d611095d93?source=collection_archive---------1-----------------------

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

卢克·切瑟在 Unsplash 上的照片

开发任何机器学习模型的基本假设是,用于训练模型的数据模拟真实世界的数据。但是在模型被部署到生产中之后,如何断言这个假设呢?本文详细介绍了这个问题,并展示了如何使用 Azure ML 处理它。

当您在监督学习的情况下训练模型时,训练数据通常是有标签的,当您在生产中部署模型时,没有实际的标签,无论您的模型有多精确,只有当提交给生产中模型的数据模拟(或统计等效)时,预测才是正确的?)训练中使用的数据。如果没有呢?我们称之为数据漂移

数据漂移的定义是,在将模型部署到生产中之前,生产数据与用于测试和验证模型的数据之间的差异。导致数据漂移的因素有很多,其中一个关键因素是时间维度。如果您观察下图,该图显示了机器学习模型开发的高级阶段,那么很明显,在收集数据的时间和使用模型预测真实数据的时间之间存在明显的差距。根据问题的复杂程度,这一差距可能从几周到几个月到几年不等。其他几个因素也可能导致漂移,如数据收集中的错误、季节性,例如,如果数据是在 covid 之前收集的,而模型是在 covid 之后部署的。

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

机器学习模型开发阶段(图片由作者提供)

如果你不认同漂移怎么办?

当数据漂移时,如果没有及时发现,预测就会出错,基于预测做出的业务决策可能会产生负面影响。向网飞用户推荐一部错误的电影比推荐一只错误的股票危害更小,在某些情况下,影响是延迟的。

根据漂移的性质、程度和类型,处理漂移所需的工作可能会有所不同。在少数情况下,可以通过根据新数据重新训练模型来管理数据漂移,但有时我们可能不得不重新开始,从头开始。

不仅仅是数据,甚至模型也会漂移,当模型的预测不再有用时,例如预测学生将选择。用于 covid 之前的在线课程,并在 covid 期间使用。处理概念漂移的一种方法是 在线学习 ,其中模型在每次观察时被重新训练。

建立一个可重复的流程来识别数据漂移、定义漂移百分比的阈值、配置主动警报以便采取适当的措施非常重要。有各种类型的漂移,如特征漂移、概念漂移、预测漂移等。但是它们都起源于从数据中检测到漂移的点,或者如果预测是不正确的(不正确的预测只有在存在找到正确标签的手动方法的情况下才能被识别,有时这也存在延迟)。在下面的博客中,已经有一些很好的尝试来定义不同类型的漂移,所以我不打算再次定义它们,请参考下面的博客。

https://towards data science . com/how-to-detect-model-drift-in-mlops-monitoring-7a 039 c 22 ea F9

https://medium.com/data-from-the-trenches/a-primer-on-data-drift-18789ef252a6

我们如何跟踪数据漂移?

可以使用顺序分析方法、基于模型的方法和基于时间分布的方法来识别数据漂移。像 DDM(漂移检测方法)/EDDM(早期 DDM)这样的顺序分析方法依靠误差率来识别漂移检测,基于模型的方法使用自定义模型来识别漂移,基于时间分布的方法使用统计距离计算方法来计算概率分布之间的漂移。计算任何两个群体之间差异的一些流行的统计方法是群体稳定性指数库尔贝克-莱伯或 KL 散度詹森-香农或 JS 散度科尔莫戈罗夫-斯米尔诺夫检验或 KS 检验瓦瑟斯坦度量或运土机距离。对这些的详细解释超出了本文的范围,如果你有兴趣知道,可以从这里开始。

如何在 Azure ML 中配置漂移检测?

微软提供了一种自动识别数据漂移的方法,该方法被集成到 Azure ML workspace 中,该功能目前正在公开预览中。Azure ML 使用统计方法来确定漂移,不同的时间窗口用于计算选定功能的漂移。包含数据漂移监视器的典型 ML Ops 工作流如下所示。接下来的部分解释了这个过程中涉及的每个步骤。

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

带有数据漂移检测和警报的 Azure ML 工作流。(图片由作者提供)

在 Azure ML 中实现数据漂移

识别数据漂移的步骤包括

  1. **注册基线数据集:**基线数据集是用于模型训练的数据集。Azure ML 语言中的数据集是指向数据的指针,这些数据可以位于任何受支持的存储服务中,如 Azure Storage、Data Lake 等。目前,我们只能用时间序列表格数据集来识别数据漂移。

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

用于注册数据集的 python 代码。(图片由作者提供)

2.**创建数据漂移检测器:**可以通过传递基线和目标数据集以及计算要使用的目标和检查频率来创建漂移检测器对象。您在此选择的时间范围取决于您想要比较的时间窗口,找到一个正确的范围来识别逐渐漂移是很重要的。

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

用于创建数据漂移检测器的 python 代码(图片由作者提供)

3.特性选择:在按需运行漂移检测之前,我们需要提供一个要监控的关键特性的列表,这可能是数据集的所有属性或子集。其次,我们需要为我们想要监视的日子回填监视器,这应该以最大 30 天为单位来完成。

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

用于选择检测漂移的要素的 python 代码(图片由作者提供)

4.**运行:**然后,您可以按计划或按需运行漂移检测。下面的代码显示了从 2010 年 10 月 1 日起漂移检测的按需调用。启动该过程并等待完成。

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

按需运行漂移检测的 python 代码。(图片由作者提供)

输出可以从笔记本或 Azure ML Studio 的数据集- >数据集监视器窗格中可视化,下面的截图来自 Azure ML Studio,因为我觉得它们更直观。可用的统计距离度量是瓦瑟斯坦距离**(数字特征)和欧几里德距离(分类特征)。您可能会注意到,漂移高于阈值,顶部显示了每个顶级特性的百分比漂移。**

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

Azure ML Workspace 的漂移检测输出(图片由作者提供)

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

基于特征的漂移检测(图片由作者提供)

除了上面的报告,我们还可以得到特征漂移的大小和分布。如果你想尝试,完整的源代码可以从这里下载。

可交代的 AI。

从最近的调查中可以明显看出,企业在过去两年中优先考虑采用 ML,这在很大程度上可以归功于快速数字化和 Covid 带来的新业务方式。随着适应,同样重要的是,这些企业要了解 ML 模型的结果,而不只是把它看作一个“黑箱”。因此,我希望在未来看到更多的工具、框架和创新,这些都集中在“可解释的人工智能”上,这是一个用来使预测更加可解释的术语。在这种情况下,我认为用其他可用的替代方案来结束这篇博客是明智的,尽管可能有许多我将在这里特别谈论的方案。

  • 显然 : EvidentlyAI 是另一个开源工具,它有助于评估和监控生产中的模型。如果您没有使用 Azure ML,并且正在寻找一个简单易用的非商业工具,evidentlyai 是一个不错的起点。
  • Fiddler AI 监控 : fiddler.ai 有一套工具,可以帮助使 AI 变得可解释,帮助在生产中操作 ML 模型,监控 ML 模型和 yes 数据&模型漂移检测就是其中之一。
  • 如果你想实现你的自定义方法,你可以使用像 river.drift 的 PageHinkley 和 skmultiflow.drift_detection 的 ADWIN 这样的库。

总之,漂移检测是 ML 生命周期中的一个关键步骤,因此它不应该是事后的想法,它应该是您在生产中部署模型的计划的一部分,它应该是自动化的**,必须仔细考虑确定漂移方法、要应用的阈值以及检测到漂移时要采取的行动。**

为什么数据完整性是 ML 监控的关键

原文:https://towardsdatascience.com/why-data-integrity-is-key-to-ml-monitoring-3843edd75cf5?source=collection_archive---------21-----------------------

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

米卡·鲍梅斯特的 Unsplash

机器学习(ML)应用建立在数据基础上:大量数据流入 ML 系统,以便根据历史实例训练模型,并实时做出高质量的预测。然而,许多机器学习项目降级或失败,很大程度上是因为数据完整性难以维护。

为什么数据会中断

维护数据完整性是一个难题。最大似然数据的动态特性是模型衰减的一个常见原因。ML 系统越来越多地被复杂的特征管道和涉及数据变更的自动化工作流所驱动。数据通常要经过多次转换,才能形成适合模型使用的形式。这些转换需要一致地应用于 ML 管道中的所有同类数据。此外,模型通常使用来自不同团队管理的多个管道的数据,并公开非常不同的接口。例如,ML 模型经常需要结合来自历史批次源和实时流的数据。由于有如此多的活动部分,包括数据和模型版本,生产中的 ML 模型经常会看到数据不一致和错误。

ML 系统将为这些畸形输入提供预测,而没有意识到它们有数据问题。如果没有额外的监控,这些错误往往不会被发现,并且随着时间的推移会侵蚀模型的性能。更糟糕的是,由于机器学习应用程序通常被视为黑盒,如果即时影响较低,这些错误可能在检测后无法解决。与其他类型的软件不同,ML 应用程序缺乏一个全面的解决方案,将正确的流程和监控放在适当的位置。

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

(图片由作者提供)

什么是 ML 数据完整性

虽然数据完整性可能有不同的定义,这取决于您的谈话对象,但最普遍接受的说法是数据在其整个生命周期中是一致的,没有不准确之处。

无论是在训练中还是在生产中,坏数据都会对 ML 模型的性能产生重大影响。数据工程师在特征工程方面投入大量时间,以确保训练集具有良好的数据质量,从而尽可能训练出最具代表性的模型。在要素工程过程中,数据工程师使用一组一致的规则将坏数据替换为好数据:删除具有缺失值的行、允许缺失值、将缺失分类值设为唯一值、输入缺失值、用统计表示法(例如平均值)替换缺失值或默认为某个值。

然而,并不是所有的 ML 团队都以相同的努力程度来处理部署的模型,即使他们遇到了相同的挑战。一旦 ML 模型被训练,它对坏数据漠不关心,并且将继续做出预测,在这种情况下,不管数据质量如何,都是坏的预测。

生产中的 ML 模型面临三种类型的数据完整性问题

  • 缺少值,其中特征输入在推理时为空或不可用。
  • 范围违规特征输入超出预期范围或者是已知错误。
  • 类型不匹配,不同数据类型的输入被传入。

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

(图片由作者提供)

有几种方法可以处理不良生产数据,但许多方法会产生自己的问题

  1. 丢弃推理请求 —如果数据是坏的,服务系统可以跳过预测以避免出错或做出不准确的预测。虽然当模型做出大量非关键决策(例如产品推荐)时,这可能是一个解决方案,但当它做出业务或生命关键决策(例如医疗保健)时,这不是一个选项。在这些情况下,需要有一个备用决策系统来确保结果。然而,这些备份系统会使解决方案更加复杂。
  2. 估算或预测缺失值-当某个值缺失时,可以使用简单的统计度量(如要素平均值)或基于其他模型输入的更复杂的预测值来替换该值。这种方法的一个关键挑战是它隐藏了数据问题背后的问题。持续替换坏数据会改变预期特征的分布(也称为数据漂移),导致模型降级。这种数据替换导致的漂移可能很难捕捉,随着时间的推移会慢慢影响模型的性能。
  3. 设置默认值 —当值超出范围时,可以用已知的高或低或唯一值替换,例如用最接近的已知最小值或最大值替换非常高或非常低的年龄。这也会随着时间的推移导致逐渐漂移,从而影响性能。
  4. 获取缺失数据 —在一些关键的高价值用例中,如贷款,ML 团队也可以选择获取缺失数据来填补空白。这对于绝大多数用例来说并不典型。
  5. 什么都不做 —这是最简单的,也可能是最好的方法,这取决于您的用例的关键程度。它允许坏数据出现在上游或下游,以便解决背后的问题。根据用于训练模型的 ML 算法,大多数推理引擎可能会抛出错误。对不良数据所做的预测可能会显示为输出或受影响输入的异常值,从而有助于发现问题。

考虑到可能出现的所有数据挑战,您需要一个早期预警系统,以便您可以立即发现并解决这些问题。

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

(图片由作者提供)

数据完整性问题的示例

  • 缺失值 在 ML 模型推断时会有规律地出现。即使要素中允许缺失值,模型也可以看到比训练集中更多的缺失值。缺失值错误的一个例子是基于表单输入进行推理的 ML 模型,其中由于代码错误,以前可选的字段现在总是发送空值输入。
  • 范围违规 发生在模型输入超出其值的预期范围时。分类输入的拼写错误和基数不匹配导致这个问题是很常见的,例如,类别和数字字段(如年龄等)的自由形式输入。未知的产品 SKU、不正确的国家和管道状态导致的分类值不一致都是范围违规的例子。
  • 类型不匹配 出现在模型输入类型与推理时提供的类型不同时。类型不匹配的一个原因是在一些数据冲突操作中列顺序不匹配。

如何捕捉数据完整性问题

设置数据检查很麻烦:虽然数据检查可能存在于 ML 管道和调用代码中,但是一种彻底的方法包括对模型推断进行检查,以便在运行时捕捉任何问题。但是随着功能的增加,添加这些缺失值、类型不匹配或范围检查可能会很繁琐。生成这些检查的快速方法是使用来自训练集的代表性数据样本,并设置一个作业来定期根据这些规则评估数据,并在违规时发出快速警报。

如何评估和缓解数据完整性问题

当发现数据故障时(许多故障会在几周或更长时间内未被发现),团队通过了解哪些数据违规对模型性能影响最大来确定修复的优先级是很重要的。不解决问题可能会产生意想不到的后果,特别是考虑到 ML 模型的脆弱性。

那么,如何评估数据问题呢?

1。局部分析——对于关键用例,最佳实践是通过重放问题的推理并查看其对模型的影响,从细粒度的预测分析方法开始。对于这种分析,可解释的人工智能有助于了解数据违规的影响,因此可以快速找到问题的根源——特别是在越来越多的黑盒模型的背景下。但是,重新创建导致问题的所有因素可能非常耗时,尤其是在数据或模型发生变化的情况下。有问题的数据可能没有与输入查询一起存储,可能需要重新创建。如果模型版本不正确,也很难重现结果。

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

(图片由作者提供)

2。全局分析 -对于全局问题,故障诊断范围扩大到了解数据问题的严重性。这包括在更大的时间范围内分析该功能的数据,以了解问题可能是何时开始的。数据更改通常与产品发布相一致。因此,查询数据变更时间表可以将问题与特定的代码和数据发布联系起来,有助于快速恢复或解决问题。

数据问题在模型输入中表现为漂移,并且根据其影响,在输出中表现为相应的漂移。因此,漂移分析是确定数据完整性问题原因的有用方法。当数据因完整性问题而被估算时,这一点尤为重要-在这种情况下,输入数据的构成将发生变化,即使这可能不会触发完整性违规

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

(图片由作者提供)

这些步骤通常有助于查明和评估管道中的数据问题。考虑到故障排除过程的复杂性,ML 团队很难在没有良好的 MLOps 解决方案的情况下快速解决数据完整性问题。

总之,数据完整性是任何 ML 应用取得成功的一个重要因素,MLOps 监控可以帮助解决以下棘手问题:设置正确的检查、检测数据中的异常,以及确定影响最大的故障的优先级。

为什么数据科学未能兑现其承诺

原文:https://towardsdatascience.com/why-data-science-has-failed-to-deliver-on-its-promises-ec14c1ad0ed6?source=collection_archive---------41-----------------------

不知情的市场如何赌上数据科学来帮助打击技术支持的颠覆者的崛起。失败的原因,以及最终的回报。

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

图片由穆罕默德·哈桑拍摄,来自皮克斯拜

颠覆和数据科学的兴起

金融危机是创造性破坏和技术积累的加速器。在 2008 年金融危机后的几年里,大范围的科技颠覆改变了美国大型企业的既定秩序。科技公司无与伦比的低成本扩张能力让它们摆脱了老牌竞争对手的地位,并为新一代人定义了时代精神;想想优步、Airbnb、WhatsApp、Dropbox、Instagram 等等。

现有企业对颠覆者的恐惧是有道理的,因为——通常,尽管肯定不总是——它们的规模大、成熟的商业模式、低风险偏好以及对最赚钱的客户群的过度关注导致它们行动迟缓,不愿意也似乎没有能力投资于新的创新技术和流程。

这与市场进入者天生的灵活性形成了鲜明的对比,他们将创新运动应用于渴望产品满足其需求的利基市场。

截短单词的后缀 tech 标记了新打乱的领域的句法结构——fin tech、EdTech、RegTech、InsureTech 等。几乎在所有情况下,“技术”只是指更先进的信息处理技术,它创造了相对于受陈旧、高开销的流程和系统束缚的现有参与者的相对价值增长。

那么,为什么这些老牌企业一直在努力从头开始重建现有平台,以挫败市场抱负?因为这是一项长期、昂贵的工作,不能保证投资回报,更不用说更大的利润,而且在风险调整后的水平上,这通常被认为是一种浪费和高风险的努力。

从概念上来说,一种实现类似目标的更直接的方法是雇佣一个数据科学家团队,这种方法对于一个对经济前景持乐观态度的高管来说更容易接受。在过去十年的大部分时间里,这种方法都失败了。

错误的喜剧

以草率的方式从头开始构建数据科学功能不仅弄巧成拙,而且是一种通病。标准的说法是,在互补的战略、系统和角色方面存在错位投资,并且对典型的数据科学家在数据管道的每一点增加价值的能力抱有过高的期望。

在这方面,缺乏经验的数据科学家处境艰难。大学数据科学课程过度关注数据科学的理论方面:模型、算法、数学、统计。公司和招聘经理在实践方面过度满足了他们对数据科学家的期望:实现支持数据科学模型的系统。

但是像这样的初期问题需要时间来阐明,尤其是在行动缓慢的组织中。与此同时,数据科学像服用了类固醇的火箭一样飞速发展。

但是为什么它起飞了呢?原因是多方面的:不断向网络世界迁移带来了增强的数据采集技术;通过基于云的产品提供更经济的处理能力;机器学习算法在不断扩大的 Python 生态系统中作为开源包的实现;病毒式传播和 FOMO 的网络效应(这一点不是因果关系,而是永久存在)。

泡泡、秋千和旋转木马

先来个题外话,说说市场泡沫。

当对未来状况的乐观预期融入某个市场中某项资产的感知价值时,投机泡沫就会出现。对一项资产的膨胀的感知表现为其价值的真实上涨,至少暂时如此。

我们都知道这个故事。首先,它翻了一倍,然后翻了五倍,然后摇摇晃晃,跌跌撞撞,最后变成瓦砾,最后被归类为泡沫。

在随后的几年里,学者和有识之士将观察到一系列预测和发展泡沫的熟悉特征——熟悉是因为我们以前在类似的投机展示中见过它们。

但是投机本身并不一定是坏事,它是创新的一个自然组成部分,在适当的条件下,投机泡沫可以对长期的繁荣发展负责,这就是所谓的生产性泡沫。市场范围内的投机可以将资本集中到如此程度,以至于这样做的副作用提供了可以在未来长期存在的生产能力。

以互联网泡沫为例。虽然它负责清算价值数万亿美元的股票和垃圾债券,但一个被忽视的副作用是铺设了数百万英里的光纤电缆,这是现代数字经济的基础。

类似地,20 世纪 20 年代末的华尔街股票泡沫导致了飞机、公用事业、电话电报、电气设备和无线电等新兴行业的投机行为。广泛采用此类产品的资本要求要求对有形基础设施进行巨额投资,并对专业劳动力提出新的需求,而这正是私人市场投资者急切提供的。

在这两种情况下,投机加剧了巨大的痛苦,但也为更先进经济体的出现奠定了基础。

DSaaB —作为泡沫的数据科学

这是一个熟悉的故事:一项新的技术突破拉开了序幕,媒体的兴趣助长了炒作,即使没有实际的产品存在。过早的宣传产生了广受欢迎的成功故事,而大量的失败却无人注意,无人记录。

大约在 2012 年 AlexNet 发布的时候,数据科学成了时髦的新玩意,它的崛起,很像经济泡沫,是基于投机和 FOMO 高管的浪潮。

在随后的几年里,数据科学家的空缺职位激增,围绕训练营和课程的整个家庭手工业出现在网上和大学里,专门讨论这一主题的会议诞生了,在线演示震惊了世界,随着通过即插即用解决方案实现的机器学习平台的民主化,准入门槛降低了。

虽然一些公司在数据科学运营方面取得了成功,但遗憾的是,许多公司却没有。高管们认为,他们需要的只是一个由“独角兽”数据科学家组成的精英团队,能够提供端到端的数据管道。不出所料,这个梦想失败了,使用它的公司没有看到他们预期的数据科学带来的好处。

慢慢地,慢慢地,公司变得成熟起来,超越了绝望的、投机的默认立场,即雇佣一支优秀的数据科学家团队将释放更大的利润,积累财富。高管们开始意识到支持有效数据科学运营的基本要求是什么。他们以前曾被模型和统计的应许之地愿景以及这个和那个指标的巨大收益所伤害,现在应该更加久经沙场,对肤浅的数据战略持怀疑态度。

过去十年左右,数据科学资本和智力投资膨胀的一个重要副作用是,支持数据科学发展所必需的数据基础设施被组装在代码行、学术机构的教室和高管的头脑中。这在数据工程师相对于数据科学家的招聘激增中显而易见,尽管相对于需求,初级数据科学家进入就业市场供过于求。

颠覆性技术上的投机泡沫是建立在有朝一日它将成为市场主导者的赌博之上的。通常被忽视的是,一个领域的创新往往取决于支持行业的创新。对于电动汽车,这是电池。毫不奇怪,智能手机的兴起使得智能手机相机的质量有了显著的提高。

对于数据科学而言,合作创新是一系列项目的集合,构成了一个全面的数据战略。这必须包括:明确的数据所有权和个人责任;对现有数据模型和数据质量的持续审查;集中式数据治理流程;对数据架构的深入关注;通过论坛、工作组和讨论推动数据驱动的文化;自动数据管道测试;定义良好的 ML 模型部署流程,包括持续监控、维护和所有权。

一旦该策略被采纳并被奉为真理,只有这样,数据科学家才能年复一年地做出有用的工作。在那之前,请期待概念证明和脆弱的实现。

数据科学的泡沫一直令人沮丧地与其预期目标背道而驰,但在它的影响下,它帮助制定了一个新的数据文化和更好的数据战略。

那么这里的教训是什么呢?应该很清楚。任何寻求通过数据科学创造价值的组织的先决条件是提前抵消在模型开发和部署期间积累的技术债务。如果没有严密的信息处理管道和数据第一的文化,你不能跑出去雇佣一个数据科学团队。

未来会怎样?

如果我们能从炒作周期中学到什么,那就是数据科学领域所经历的是许多令人兴奋的新技术的自然组成部分。炒作最多的时候是最穷的,但后来就变得有用了。

数据科学将继续成熟,成为一个类似于软件工程的职业。随着支持该领域的进程继续发展,其作为狂野西部自由竞争的非生产性根源将被遗忘。

TL;博士:

  1. 数据科学在激动人心的演示后崩溃了。它向眼界开阔的高管们承诺了一条拓宽利润、创造效率和获取新利润的捷径。
  2. 随之而来的是巨大的投资流入,家庭手工业如雨后春笋般涌现,用于训练营、大学课程和会议。这个时髦的新头衔助长了年轻人才的过剩。
  3. 不幸的是,这个领域还很年轻,定义不清。随后的十年是商业数据科学风险投资中毫无成果的十年,原因是数字管道的严重不足,以及对生产层模型管道所需的各种角色的错误期望。
  4. 几年后,公司开始意识到,没有更广泛的数据战略,数据科学就无法运作。数据科学终于可以派上用场了。

感谢阅读。如有任何意见或问题,请联系我们。

为什么数据科学对所有开发人员都很重要

原文:https://towardsdatascience.com/why-data-science-is-important-for-all-developers-cfe31aa6fb2b?source=collection_archive---------24-----------------------

是的,那意味着你也是

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

照片由石页·康让Unsplash

在我的消遣中,我喜欢看视频,读文章,甚至只是查看关于技术世界所有新事物的新闻。无论是创新还是像 iPhone 一样的隐私更新,保持对正在发生的事情的了解总是很有趣的。当我考虑跟上数据科学时,不管它来自哪个研究领域,保持最新的改进都是很有趣的。有时候可能是机器学习,其他时候可能是 AI(人工智能),或者是我个人最喜欢的 AR(增强现实)。我对数据可视化特别感兴趣,尤其是通过 AR。

到目前为止还没有什么突破性的进展。但今天我想更多地谈谈数据科学是如何包罗万象的。这篇文章的灵感来自于我的头号粉丝,也就是我的女朋友,她看了我所有的文章,即使她对“数据科学”没有任何兴趣,她将其归类为大数据和机器学习。虽然两者都是数据科学的一部分,但今天我想谈谈数据科学对所有研究领域的重要性,特别是计算机科学/工程和相关领域的研究,从开发运营到分析师到开发人员,以及介于两者之间的所有人。即使是业务方面也可以从数据科学更新和创新中获得很大帮助,因为它在数据方面更具包容性。因此,不再拖延,让我们看看为什么我认为数据科学对每个人来说都很重要。

第一种分析数据科学:预测

当你想到机器学习时,你可能会想到预测分析。这是创建算法来识别模式的地方,因此可以基于这些观察做出决策。但是,如果你不完全支持机器学习,为什么数据科学中的预测分析仍然适用?无论是用机器还是用手,预测分析都是相关的。这是指更多的职业,而不仅仅是技术职业。例如,医生会查看家族史,这是可识别的模式,以确定你是否有患某些疾病的风险。或者一个小面包师可能会看到他们的销售统计数据,以确定初秋是拿出他们的南瓜香料食谱的最佳时间。

虽然你可以用自己的眼睛做出这些预测,但机器学习试图让这更快。例如,商业分析师可以找到人口中的一个样本,然后让机器学习来预测其余成员的答案,而不是调查人口中的一千人。这可以节省大量时间,因为需要几周时间才能完成的工作可以在几分钟内完成。时间可以节省金钱,取得突破可以更快地做出对经营相关业务至关重要的预测。

但即使在你的日常生活中,预测分析出现的次数也比你想象的要多。当您在电话上键入信息时,“自动更正”可能会纠正您的拼写错误,或者您的电话甚至会猜出您想写的下一个单词。甚至像 Grammarly 这样的扩展也可以用来预测你想写什么。所以,你看,现在你可以告诉年轻一代,在你那个时代,你没有任何花哨的单词纠正器或预测器。你必须自己纠正这些错误。这些更新很重要,就像 Grammarly 一样,因为大学里的每个人都可以使用该扩展来清除他们的语法错误,并使他们的措辞更加专业,而不必找导师或反复校对。

作为一名开发人员,也许这个预测可以帮助你。仅就文本而言,诸如 Intellisense 之类的扩展可以在编码时帮助完成您的想法。例如选择正确的方法或找到键入了一半的表名。提出这一点是因为即使你不喜欢学习 Tensorflow 或任何其他机器学习语言,这并不意味着你不能欣赏你周围的世界。

第二类分析数据科学:描述

数据科学中的描述性分析是指全面的数据,以及用于可视化该数据的任何手段。这可能是指每月报表、图表、演示文稿,甚至是仪表板之类的更技术性的方法。在这四种类型中,这是最常见的。这是因为不仅开发人员可以使用它,而且它对业务用户也很关键。没有数据的表示,就很难发现其中的意义。例如,如果一家企业每月销售一定数量的书籍,他们可以使用图表来可视化他们的技术是在改进、保持不变还是变慢了。对于在家的开发人员来说,也许你正在尝试寻找一种解决方案来对照片进行分类。您正在考虑几种不同类型的编码方法,并对其中的三种进行测试。您可以使用一个图表,甚至是一个仪表板来直观地显示使用每种方法正确排序的图像的百分比。这将有助于你改进你的方法,也有助于你选择你应该采取的方法。

数据可视化对企业至关重要。r 是一个专门用于数据科学可视化平台。r 也能够表示大数据。这使得可视化数据比手动处理数据更快更容易。

第三类分析数据科学:诊断

另一种要讨论的分析数据科学是诊断分析。听起来,这是在寻找问题的根源。这可能涉及到挖掘和隔离所有混淆的信息。诊断分析的目标是更快地发现问题,以便制定解决方案。在我们之前的仪表板示例中,这可能表示找到导致问题的数据,然后深入到该问题的细节。

对于开发人员来说,仪表板示例仍然是相关的。然而,我们可以使用一个更全面的例子。在您选择的 IDE 中,我敢肯定您有时会键入错误的内容或调用不存在的方法。甚至可能在变量声明中用错了大小写。你可能会注意到那条熟悉的红色曲线。IDE 意识到有一个错误,但是他们在识别错误的位置上变得更聪明了。所以,对于很多新版本来说,花两个小时寻找一个丢失的分号的日子已经过去了。现在,您的 IDE 可以找到是哪一行抛出了错误。有些甚至提供了你可能想写的提示。

第四类分析数据科学:药方

我们要看的最后一种数据科学是规范分析。我最后解释这一点的原因是,它至少需要一些(如果不是全部)其他因素来创建一个解决方案。这意味着这个处方,你可能会猜到,是某个特定问题的解决方案。能够想象并描述这个问题,对于知道如何解决这个问题是很重要的。您还需要诊断问题以形成解决方案。你甚至可能需要找到其他预测事件的解决方案。所以,你可以猜到,它们都是紧密相连的。

规定性分析使用机器学习和统计模型的组合来基于测试结果推荐策略。使用的技术越先进,建议就越具体。

手动解释一下,假设你想和一群朋友进行一次编码会议(或者只是一次聚会)。为了见面,你需要交换时间表,看看你们什么时候都有空。通过链接彼此的日历,你可以指定哪一天见面,这将确保没有人有重叠的计划。你可以用手或者通过电脑用日历来做。但是这个例子如何与更大部分的数据重叠呢?在大学里,注意有时你的期末考试是如何在奇怪的时间进行的。但是 10 次中有 9 次,你会惊讶于它们似乎没有重叠。这是因为大学可以使用你的时间表,代表同一个班级其他学生的数据,并指定不会冲突的日期和时间(甚至地点)。现在,这个系统并不总是完美的。但那是因为他们的一些预测可能有点偏差。但这只是学习过程的一部分。

另一个现实世界的例子,一个你可能经常使用的例子,是你的 GPS 如何预测,然后给你开出到达你的位置的最快路线。它可以测量距离和比较道路速度,以确定哪条路线是最快的。创新使得预测哪里会发生交通堵塞以及需要多长时间才能解决交通堵塞变得更加容易。一些系统甚至开始允许你报告事故或超速。所以实际上,在你的日常生活中,数据科学仍在快速帮助你做出决策和解决一些问题。

将科学放回数据中

也许不言而喻,但是如果没有科学,你的数据将毫无意义。从销售数量到马里奥赛车圈的最快时间,除非你进行观察和比较,否则这些数据将毫无价值。但作为开发人员,我们更依赖数据科学,而不仅仅是担心我们的工作会有成功的商业冒险。甚至在尝试一份新工作时,你简历上的数据也会被使用并与他人进行比较,而决策就是根据这些数据做出的。无论你是对大数据感兴趣,还是在远处感觉更舒服,计算机都在更快、更容易地做出决策,而且还根据观察到的其他模式,对市场、消费者趋势,甚至只是天气状况做出有益的预测。

结论

无论你在研究什么领域,尤其是技术领域,数据科学已经成为一个越来越重要的因素,每个人都应该至少了解一点。不,你不必像我一样把空闲时间都用来研究新趋势。但时不时地,看看数据科学领域正在发生的事情也无妨。正如我们所讨论的,数据科学不仅仅是机器学习。每个人都有一点数据科学,即使是非技术领域。甚至在你的日常生活中,你会发现机器学习的例子旨在使你的生活更容易。

对于开发人员来说,跟上更新变得更加重要。我们简单谈过的一个例子是数据可视化,这对于企业中的每个人都是必不可少的,但是即使是预测和处方这样的方面也非常有用,尤其是对开发人员而言。像 Intellisense 这样的工具可以使编码更容易,或者至少节省时间。让您选择的 IDE 准确地指出您的错误在代码的哪一行,甚至给出如何纠正这些错误的建议。即使你只是享受机器学习的好处,跟上趋势和更新至少可以更清晰地描绘出你在编码未来可以期待的画面。至少,在我看来,跟上数据科学既有趣又有见地。我希望你喜欢我关于机器学习对所有领域有多重要的观点。下次见,干杯!

用我的 每周简讯 免费阅读我的所有文章,谢谢!

想阅读介质上的所有文章?成为中等 成员 今天!

看看我最近的一些文章:

https://miketechgame.medium.com/making-python-read-my-emails-9e3b3a48887c https://medium.com/codex/a-simpler-introduction-to-oauth-3533e53a4589 https://miketechgame.medium.com/after-nearly-five-years-i-left-my-job-a2e76f0dc0b4

参考资料:

https://www.kdnuggets.com/2017/07/4-types-data-analytics.html https://www.analytixlabs.co.in/blog/why-do-we-need-data-science/

为什么所有数据科学团队都需要认真对待 MLOps

原文:https://towardsdatascience.com/why-data-science-teams-needs-to-get-serious-about-mlops-56c98e255e20?source=collection_archive---------36-----------------------

随着越来越多的公司采用数据科学和机器学习,有时令人惊讶的是,有些公司仍然没有对一个关键方面——m lops——给予太多压力。这篇文章旨在让你相信致力于 MLOps 的时间和人力资源对于从事 ML 产品的公司是必不可少的

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

斯科特·格雷厄姆在 Unsplash 上拍摄的照片

我为什么要关心 MLOps?

先从商业角度来说。MLOps 实践的部分属于“未知的未知”,即你不知道你不知道的事情。如果不花时间去发现和实现它们,你的公司就有落后于竞争对手的风险,结果,竞争对手可以提供更好的产品和更快的迭代。换句话说,通过忽略 MLOps,您部分忽略了 IT 世界从 DevOps 革命中学到的所有伟大的东西。

DevOps 和 MLOps 都是为了向最终用户提供价值。

在更技术的层面上,在做数据科学时,当模型在测试/验证集上获得高分时,认为您的工作已经完成是错误的。恰恰相反,这只是旅程的开始。给你一个要点,在模型被部署到产品中之后(除了监控和保持它运行的所有操作之外),另外两个基本的生命周期开始了。第一个与模型改进和微调有关,第二个与贵公司吸收的新数据有关(由外部世界的变化引起)。

我们稍后将讨论更多的细节,但现在让我们集中精力,在我看来,最关键的成功因素。

MLOps 专用的人的因素的重要性

你的数据科学家有不同的动机,而KPI是围绕构建最佳模型而定义的。他们将并且应该把努力集中在这一领域。如果你希望有人认真研究 ML 的运营部分,你将需要一个新的角色,我喜欢称之为“MLOps 布道者”

“MLOps 布道者”是谁?他/她不仅具备你对 MLOps 工程师的所有期望,而且还具备:

  • 通过积极寻求、展示和实施最佳实践及其带来的价值,在业务、数据科学和工程部门传播“MLOps 福音”。
  • 负责您的 MLOps 过渡和实施流程(我不能强调这一点有多重要),并围绕他/她的行动为公司带来的价值设定 KPI。
  • 了解 DevOps 机芯的整体情况,同时能够深入研究技术细节。数据科学家和开发工程师的混合体。
  • 得到公司领导层的适当支持来实施变革。

正确计划和执行的 MLOps 将对您的 ML 产品的成功产生巨大影响。

同时,有些事情你需要注意。第一,不要指望这个角色有所有的答案。成熟的 MLOps“堆栈”仍处于早期,令人不安的发展。更重要的是,将有指定的 R&D 时间,因此,您公司的 MLOps 可以发展和改进。

MLOps 实践和改进应该由项目的类型、您公司的规模以及您现有团队的成熟度级别来决定。简而言之,没有“让了不起的百万富翁来做这件事”的清单。

是的,所有的项目都不一样;然而,MLOps 福音传道者可以特别注意的事情很少。让我们举几个例子:

  • 协作和跨团队/跨公司的可再现性,重点是创造一个环境,让数据科学家可以无摩擦地进行实验。
  • 引入严格的技术,当你继续开发你的产品时,你可以自信地断言所做的改变带来了额外的价值。你的信心应该建立在科学方法的基础上,例如,每次实验都会自动记录多个指标,并允许你将它们与之前运行的指标进行比较。
  • 流程自动化是 MLOps 的一个组成部分;然而,只有当它增加价值时才引入它。
  • 当团队开始处理大量的模型(项目)时,开始寻找可以在他们之间共享的步骤,并将它们打包成可重用的组件。
  • 不要同时为所有项目引入变更。选择一个“金丝雀”项目,在全公司范围内执行之前,确保你有足够的事情要做。

这都是关于价值的

更具体地说,让我们想象一家公司在数据科学之旅的开始阶段没有任何 MLOps 实践。it 部门将时间投入到 MLOps 中可以获得什么样的好处?

**TL;下表的 dr 版本:**借助 MLOps,您可以加快并标准化您的实验过程,更快地交付您对产品所做的改进,并获得持续的反馈,作为未来变革的重要输入。此外,您还可以确保 ML 产品的更高质量,并避免生产中模型可能发生的灾难。反过来,这也让你能够制造出更好的产品。

这只是几个例子(我没有触及许多重要话题),所以不要盲目地将它们应用到你的案例中。你的商业案例的细节可能需要一个完全不同的计划。此外,设计您的 MLOps 之旅不是一次性的过程,应该不断进行审查。

如果你想让你的团队更加认真地对待我提出的概念,请与你的老板或团队成员分享这篇文章。传播 MLOps 智慧!

为什么数据科学家从不快乐

原文:https://towardsdatascience.com/why-data-scientists-are-never-happy-8825318df5f9?source=collection_archive---------11-----------------------

我如何找到适合我的项目

为了追求 21 世纪最性感的工作,数据科学家经常带着不切实际的期望开始工作或者结束与他们职业抱负不一致的项目。我当然也陷入过几次同样的陷阱。也许你也经历过类似的事情。

在我职业生涯的初期,我经常对项目感到沮丧,因为我想什么都做——一方面是深入的科学研究,另一方面是以客户为中心的工作。在一系列不同的公司工作过之后,我意识到,基于公司和他们要解决的问题类型,DS 项目可以有非常不同的特征。

在此期间,我最终得出结论,我可以使用我称之为“3c”的三个类别对 DS 项目的类型进行分类和评估:

  • 科学挑战:需要尖端的机器学习(ML)技术
  • 创造性解决问题:有一个很大的开放式问题,却没有明显的解决方案
  • 客户影响:有明确的用例及生产基础设施。交付分析或模型直接转化为客户的价值

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

你过去的项目在哪里?(图片由作者提供)

实际上,对于一个数据科学项目,您只能选择两个 c!

让我们仔细看看这三个 c 实际上是什么意思。

科学挑战

如果你想专攻某项技术或应用(例如,NLP 或计算机视觉),这个项目特征是很有用的。我总是发现这些项目是有益的,因为它们推动了我对 ML 的理论理解,并且我很容易跟踪我的学习进度。

在这样的项目中,您会发现典型的活动有:

  • 回顾学术文献以确定艺术方法的状态
  • 从一篇论文中实现一个模型,并使它适应你的问题
  • 尝试新的软件库和模型的开源实现

创造性解决问题

您经常会在咨询风格的项目中发现这种特征,这些项目需要使用 ML 快速和创造性地解决现实世界中的问题。关键的挑战是让自己适应新的环境,并在固定的时间和预算内获得现成的 ML 解决方案。这些项目可能是令人兴奋的,因为它们通常允许对解决方案进行快速迭代。

在这样的项目中,您会发现典型的活动有:

  • 根据要求与客户接触,以了解业务问题
  • 探索提供的数据和适当的基础设施,以评估集成 ML 解决方案的可行性。
  • 构建“80/20”概念验证来测试 ML 的用例

客户影响

对客户有影响的项目有明确定义的价值主张,通常会在现有产品中添加 ML 特性。因为这样的模型改进可以直接部署到用户手中。这使得这些项目成为 ML 工程师和任何想提高他们工程技能的人的地方。我从用户的积极反馈中获得了很大的满足(“这让我每周节省了几天的工作”),我喜欢通过我为我的模型的用户创造的价值来衡量我的影响。

在这样的项目中,您会发现典型的活动有:

  • 与软件工程师密切合作生产模型
  • 进行 A/B 测试以衡量模型改进
  • 从现有用户中提取数据用于训练模型

选择两个 Cs

当作为一名数据科学家进行职业选择时,请考虑三个 c 以及您正在寻找哪个 c。不要期望在一个项目中得到这三者。根据我的经验,好的数据科学项目往往会落入以下交叉点:

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

寻找交叉点上的项目(图片由作者提供)

《深度科技》

你经常会在科技创业公司和大公司的 R&D 分部找到这些项目。新技术和建模技术被应用于具有颠覆整个行业潜力的开放性问题。数据科学家通常需要开发最先进的模型来获得竞争优势。然而,实际将模型投入使用可能需要大的业务开发和工程努力。

《嵌入 ML》

许多传统公司希望将 ML 嵌入到他们的流程中,以支持他们的核心业务。这为数据科学家创造了大量的机会和项目,以找到 ML 应用程序的唾手可得的果实。使用现有的 IT 基础设施,您可以交付具有巨大影响力的简单模型。

转移到另一个项目,开发另一个简单的模型,通常比进一步提高现有模型的准确性更有商业价值。这使得数据科学家很难获得更多前沿技术和模型的实践经验。

“海量级 ML”

这些项目可以在以技术为产品核心的公司中找到。他们雇佣了庞大的数据科学家和工程师团队,构建可以扩展到数百万用户的新功能。在这些环境中,数据科学家可以专注于一个小领域,在这个领域中,模型改进可以转化为大量的节约和利润。然而,随着专业化程度的提高,在你和客户之间可能会有很多层的产品/项目经理。

那又怎样?

如果你对当前的角色/项目感到沮丧,问自己以下问题:

  • 你希望你的项目包含哪些 Cs?
  • 你缺少什么特征?
  • 贵公司是否有其他项目可以提供这种服务?
  • 考虑新工作时:公司提供你想要的项目类型吗?

为什么数据科学家应该首先成为数据分析师

原文:https://towardsdatascience.com/why-data-scientists-should-become-data-analysts-first-d5a2bc68fc6e?source=collection_archive---------38-----------------------

确保成功的职业战略

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

图片由皮克斯拜的 Gerd Altmann 提供

您可能想知道为什么有人会倡导数据科学家成为数据分析师。作为一个曾经做过数据科学家和数据分析师的人,我想讨论一下为什么你应该考虑成为一名数据分析师,即使你已经接受了成为数据科学家的培训。

获得领域经验

Interview Query 发布的一项研究报告称,“数据科学面试将在 2020 年趋于平稳。数据科学仅面试同比增长 10% 之前同比增长 80%。数据科学职位中增长第二快的职位业务和数据分析师获得,增长了 20%** 。”**

数据科学职位的增长速度不如数据分析师职位。这意味着你将与更多的人竞争数据科学家的工作。如果你缺乏数据科学方面的经验,可以考虑申请数据分析师的工作,因为竞争不那么激烈。数据分析师的技术要求没有数据科学家高,受过数据科学培训并拥有研究生学位的人可能会比没有这些证书的候选人更受欢迎。首先成为一名数据分析师将有助于你积累领域经验,并使你在未来申请数据科学家工作时成为更强有力的候选人。

建立软技能

作为一名数据分析师,我与许多利益相关者互动,并更经常地展示结果,因为请求的周转时间比数据科学项目更短,后者可能需要数周时间来开发一个机器学习模型。这为我提供了更多的机会来练习发展我的演示数据讲述技能。如果我今天像当数据科学家时一样精通我的软技能,我可能会说服我的利益相关者采用更多我的模型,但遗憾的是,我的模型中只有三分之一被使用过

期望与现实

2012 年,《哈佛商业评论》称数据科学家为“21 世纪最性感的工作”。不幸的是,许多数据科学家的角色一点也不“性感”,而且期望往往与现实不符,因为你无法对业务产生重大影响。

作为一名数据科学家,我大部分时间都在构建模型,但我大部分时间都在使用相同的算法构建非常相似的模型**。**

不用说,当唯一改变的是目标变量时,这变得很乏味。根据公司的不同,由于你支持的部门或高层领导的支持,可以用机器学习解决的商业问题可能会很有限。

虽然我作为数据科学家支持营销的工作是重复和枯燥的,但我作为数据分析师支持营销的经历是完全不同的。作为一名数据科学家,我支持电子邮件营销团队,专注于构建模型以提高客户转化率。我很少与其他团队互动,对电子邮件营销之外的业务一无所知。

作为一名数据分析师,我参与了广泛的项目,并与包括产品、客户成功和财务在内的多个团队互动。作为一名数据分析师,我在一年时间里对公司业务的了解比我作为数据科学家的三年时间还要多。我的项目范围从分析 A/B 实验到营销归因,当情况需要时,我可以建立机器学习模型。作为一名数据分析师,除了建模之外,还提供了从事各种项目的机会,这些项目仍然会对业务产生重大影响。

数据科学采用

公司可能还没有准备好采用数据科学,但由于数据生成的增加和数据访问的简化,对数据分析师的需求增加了。根据哈佛商业评论,“77%的高管报告称,企业采用大数据/人工智能计划是一项重大挑战,高于去年的 65%。”

当我作为一名数据科学家工作时,我意识到数据科学是一个模糊的概念,人们听说过但并不真正理解。这使得数据科学计划很难获得领导的支持,因为他们不明白如何使用数据科学来解决业务问题。如果没有合适的分析领导者来宣传数据科学的好处,你作为数据科学家的才华将会付诸东流。

相比之下,产生见解并提供建议以改善业务的数据分析师比机器学习更容易理解。作为一名数据分析师,当您将它定位为业务问题的解决方案时,您仍然可以找到构建模型的机会,并增加采用的机会。

与公司一起成长

公司(尤其是较小的公司)可能没有合适的基础架构或足够的工作来聘用数据科学家,因此可能会聘用数据分析师。这些都是很好的机会,可以让你从数据分析师起步,从事各种项目,这些项目可以影响业务,并随着公司的发展成长为高级角色。当有足够多的问题可以用数据科学来解决时,也有可能在未来成为全职数据科学家。

随着数据科学家角色的竞争越来越激烈,为了取得成功,你的职业战略可能需要转变。首先考虑成为一名数据分析师,以培养数据科学家所需的基础技能。一旦你掌握了基础知识,如果你一开始是一名数据科学家,添加模型开发将比试图在每件事情上都做得很好更容易。

你可能也会喜欢…

为什么数据科学家应该学习动态编程

原文:https://towardsdatascience.com/why-data-scientists-should-learn-dynamic-programming-e50dfe62a5c7?source=collection_archive---------10-----------------------

数据结构和算法

数据科学家的基本算法

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

Birger Strahl 在 Unsplash 上拍摄的照片

介绍

在当今的就业市场中,数据科学不再是一个纯粹的分析领域,而是需要编程和工程方面的丰富实践经验。除了模型开发和数据分析等正常职责之外,数据科学家正在与工程团队合作构建基础设施管道。对编程的深刻理解加快了生产进度,减少了摩擦。

Python 广泛应用于数据科学和软件工程社区。就是这样一种通用的编程语言,提供了各种数据结构和算法,包括数组集合堆栈字符串字典 ( 第一部分第二部分)、二分搜索法等。

在这篇博客文章中,我们将学习另一种流行的算法,称为动态编程,并了解为什么它的性能优于其他方法,如迭代和递归。

什么是动态编程?

DP 是一种算法,它将问题分解成子问题,并存储和重用之前计算的结果。

我们将在 DP 之前介绍什么是递归。

递归函数是相对于自身定义的函数,这意味着函数将继续调用自身,直到满足某些条件。递归包含两个部分:基本情况和递归情况。该函数将不断迭代递归情况,并计算子问题的结果,直到满足基本情况。

递归函数调用自身,反复重新计算子问题的结果,效率低下。

有什么解决办法吗?

记忆化!

也就是说,我们缓存之前已经计算过的答案,并将结果存储在字典或列表中,这个过程叫做记忆化,显著提高了算法效率。

我们将使用以下三个真实的面试问题来帮助我们更好地理解算法。首先,我们将浏览每个问题的思考过程,并讨论我们如何提出解决方案。然后,我们用 Python 编写代码,讨论它们的时间和空间复杂性。

这里,时间复杂度的大 O 符号是合适的。可以直观的查看各种算法的速度。例如,黄色区域中的线性时间 O(n)比红色危险区域中的 O(n)好得多。

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

https://www.bigocheatsheet.com

完整的 Python 代码请参考我的Github

问题 1:阶乘

-一个数的阶乘,N 是所有小于等于 N 的正整数的乘积,记为 N!。

-比如 3 的阶乘是 3!= 321 = 6.

-给定一个正数 N,计算它的阶乘。

走过我的思考

我的第一反应是应用迭代方法,将 n 范围内的元素相乘。

首先,我们定义一个名为 result 的对象,并将其设置为 1。

其次,迭代这些数字直到 n+1 并返回结果,如下所示。

# solution 1: for loop 
def factorial_1(n):
    result = 1
    for i in range(1,n+1):
        result*=i
    return result

迭代方法是线性的,因为 for 循环的迭代次数等于数的大小,直到 n+1,aka。,线性时间复杂度。该算法包含线性空间复杂度,因为它存储从 1 到 n+1 的数。

迭代方法具有以下特征:

Time complexity: O(n)
Space complexity: O(n)

让我们试试递归。基本条件是当 n 等于 1 时,对于递归条件,我们递归地调用同一个函数。

# solution 2: recursion
def factorial_2(n):
    if n==1:
        return 1

    else:
        n *= factorial_2(n-1)

 return n

递归阶乘方法具有线性时间复杂度,因为它为每个数字调用一次自身。因此,迭代轮次与数目 n 成正比,即其时间复杂度为 O(n)。此外,空间复杂度也是线性的,因为没有占用额外的空间。

递归方法具有以下特征:

Time complexity: O(n)Space complexity: O(n)

如上所述,递归方法会多次计算相同的值。例如,我们已经计算了 3 的阶乘(即 321 = 6),但必须再次计算 4 的阶乘(即 432*1),这是低效的。

当递归堆栈堆积时,递归迭代会显著降低速度。事实上,如果递归堆栈达到上限,递归方法可能无法运行。

为了解决重复计算的问题,我们可以通过存储先前的结果来应用动态编程方法。

解决方案:动态编程

3628800

动态规划方法具有以下特点:

Time complexity: O(n)Space complexity: O(n)

方法 2 和 3 具有相同的时间和空间复杂度。那么,为什么我们认为动态规划方法更好呢?让我们来看看问题 2 的答案。

问题 2:斐波那契数,被大家

https://leetcode.com/problems/fibonacci-number/

通常表示为*F(n)*斐波纳契数列形成了一个序列,称为斐波纳契数列,这样,从*0**1*开始,每个数字都是前两个数字的和。也就是说,

F(0) = 0,F(1) = 1
F(n) = F(n — 1) + F(n — 2),对于 n > 1。

给定*n*,计算*F(n)*

走过我的思考

这是一个几乎每个大型科技公司都会问求职者的普遍问题。按照问题 1 中的相同步骤,我们可以比较迭代、递归和 DP 方法。

#解决方案 1:迭代方法

简单地说,我们在 for 循环中不断更新三个项目的值:current、n1 和 n2。查看 Python 代码的解决方案。

迭代方法具有以下特征:

Time complexity: O(n)Space complexity: O(1)

#解决方案 2:递归方法

有两个条件:

  1. 基本条件:0 号位和 1 号位怎么办?
  2. 递归条件:位置 2 及以上怎么办?

我们从 0 和 1 开始,对每个位置的前两个函数求和,并对其他位置调用自身的函数,这是典型的递归设置!查看 Python 代码的解决方案。

递归方法具有以下特征:

Time Complexity: O(2^n)Space Complexity: O(n)

#解决方案 3: DP

与问题 1 类似,我们将之前的结果缓存在一个字典中,并在被调用时返回它们。回想一下,由于多次计算,递归方法具有 O(2^n 的时间复杂度。

得益于记忆化过程,DP 方法将时间复杂度从 O(2^n 降低到 O(n),这对于算法性能是一个显著的改进。查看 Big-O 复杂性图表(如上)进行比较。

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

让我们比较一下计算 20 的斐波那契数的这两种方法的运行时间。递归方法需要 3.42 毫秒(毫秒,1/1000 秒,但是 DP 方法只需要 215 微秒(微秒,1/1000000 秒),几乎相差 16 倍。

迭代方法的时间复杂度与它在每一步中需要的调用次数成正比。因此,如果迭代需要多次调用自己,运行时间可能会很快增加。如果发生这种情况,DP 方法就派上了用场,并为我们节省了大量时间。

动态规划方法具有以下特点:

Time Complexity: O(n)Space Complexity: O(n)

解决办法

5

问题 3:最长的增长子序列

https://leetcode.com/problems/longest-increasing-subsequence/

给定一个整数数组*nums*,返回最长严格递增子序列的长度。

子序列是可以通过删除一些元素或不删除元素而不改变剩余元素的顺序来从数组中导出的序列。例如,*[3,6,2,7]*是数组*[0,3,1,6,2,2,7]*的子序列。

走过我的思考

该问题要求最长的长度,该长度取决于当前位置 I 和其先前位置 i-1 之间的相对值。然后,我们可以创建一个新的列表, new_list ,其长度与 nums 相同,并将所有元素设置为 1。换句话说, new_list[i] 表示目前为止最长的递增子序列的长度。

然后,我们计算一个 for 循环中有多少元素小于new _ list【I】。如果是,则向new _ list【I】加 1,并更新位置 I 处的较大值,aka。【new _ list[I]= max(new _ list[I],new_list[i]+1)

最后,从列表中返回最大值。

由于嵌套的 for 循环和常数空间,该算法具有指数时间复杂度。

动态规划方法具有以下特点:

Time complexity: O(N²)Space complexity: O(N)

解决办法

4

完整的 Python 代码请参考我的Github

外卖食品

  • 理解什么是递归,它的整个过程,优点和缺点。
  • 记忆化可以通过存储以前的结果来提高算法性能。
  • DP 在递归方法必须在每一步中多次调用自己的场景中表现出色。

Medium 最近进化出了自己的 作家伙伴计划 ,支持像我这样的普通作家。如果你还不是订户,通过下面的链接注册,我会收到一部分会员费。

https://leihua-ye.medium.com/membership

我的数据科学面试顺序:

</5-python-coding-questions-asked-at-faang-59e6cf5ba2a0> </6-python-questions-you-should-practice-before-coding-interviews-f958af55ad13>

喜欢读这本书吗?

请在 LinkedInYoutube 上找到我。

还有,看看我其他关于人工智能和机器学习的帖子。

为什么数据科学家应该像放射科医生一样看待问题

原文:https://towardsdatascience.com/why-data-scientists-should-see-like-radiologists-13762a212f9?source=collection_archive---------30-----------------------

意见

为什么人工智能不会取代放射科医生

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

照片来自Unsplash

“你想当放射科医生?而且你不怕过不了多久被人工智能取代吗?”

早在 2016 年我成为一名放射科实习生时,就有人问过我这个问题。如今,几乎每个新的放射科实习生都至少听过一次。媒体无处不在地报道着艾的又一新成就,这与此有关。

领域内几个大佬的交流就是一部分。例如,在 2016 年的机器学习和智能市场大会上, Geoffrey Hinton ,将放射学家比作漫画中的 Wile E. Coyote:

“你已经在悬崖边上了,但你还没有往下看。下面没有地面。[……]相当明显,五年内,深度学习会比放射科医生做得更好”[1]。

5 年的时间框架*(在同一次讨论中,半推半就地延长到了 10 年后)*则主要描绘了当时人工智能研究界普遍的乐观情绪。事实上,在 2016 年,机器学习领域被深度神经网络所彻底改变,其第一份主要出版物只有 4 年的历史,其最近的进展令人眼花缭乱。大规模视觉识别挑战赛每年都展示计算机视觉领域的最新进展,汇集了国际知名团队。自 AlexNet [2]提出神经卷积网络以来,最低的错误率一直停滞在 25%左右,2012 年该分数飙升至 15.3%。在随后的几年中,几乎所有的团队都依赖于神经网络,以至于在 2015 年,ResNet [3]以 3.57%的错误率击败了人类的结果。

然而,G. Hinton 的预测在 5 年后的今天面临着现实,它们远未得到证实,正如欧洲放射学会(ESR) [4]提醒我们的那样,放射科医师不会被取代。

然而,G. Hinton 发布的关于放射学的预测仍然存在于人们的脑海中,这可能是该专业吸引力最近下降的原因。根据 2018 年对 322 名加拿大医学生的调查, 68%的人认为 AI 会减少对放射科医生的需求 [5]。2016 年,获得该专业的截止排名在法国国家分类考试(ECN)要求的专业排名中为第 2781 位,2020 年降至第 4417 位(+64.7%)[6]。前 1000 名中选择放射学的学生比例 2016 年为 11.1%,而 2019 年为 7.0%(绝对-4.1%,相对-36.9%)[7]。这种排名上的差异可能对新的放射科实习生的质量没有影响,但描绘了专业吸引力的下降。在“未来实习生指南”中,ISNI(Inter-Syndicale national des Internes)在 2020 年描述了“一个幽灵徘徊在这个专业周围,人工智能将取代放射科医生的世界的想法”。

机器更新换代是各个领域头条新闻反复出现的主题 。1940 年,甚至在计算机出现之前,《纽约时报》的标题是:

“从长远来看,机器会取代人吗?”(1940 年 2 月 25 日)。

人工智能能够取代放射科医生的想法是科幻小说,因为它掩盖了大量的中间步骤。

  • 用一个只知道最常见疾病的软件来取代放射科医生是不可行的。然而,目前的机器学习技术需要数百甚至数千个不同病例的图像来学习,这似乎不可能为罕见的病理收集**。保护人们及其个人数据的法律(欧洲的 RGPD)极大地限制了医学领域的研究,并使收集如此多数据的工作变得不可思议。**
  • 在明确定义的任务之外评估一个软件似乎几乎是不可能的。在复杂情况下,机器学习的整个困难在于避免陷入“局部最小值”:算法找到了一个适合它的解决方案,因为当它远离现实时,它看不到任何可能的改进。这就是当软件找到一个快捷方式,为问题提供一个快速(但不协调)的解决方案时所发生的情况。
  • 评估人工智能正确性的难度随着所要求的任务平行发展。
  • 所有的软件,作为医疗设备,都需要评估。代码的每次修改都会导致新的认证。如果人工智能变得如此复杂,以至于取代了放射科医生,那么这种评估就不可靠。

目前的技术无法克服这些步骤,但该领域的新突破不会解决所有问题:将医生从护理等式中移除是一个前所未有的医学法律和伦理难题,尚未得到充分探索

一个前所未有的医学法律和伦理难题

飞机自动驾驶既安全又高效,然而将一个人的生命交到没有人类替角的机器手里还不被接受。这种对机器的信任取决于文化,所以在飞机自动驾驶仪的例子中,留给人类的部分部分取决于你在哪里。在美国,航空公司要求飞行员进行人工监督和控制。另一方面,亚洲航空公司将自动驾驶仪的使用推到了禁止人工控制着陆的地步。**当系统出现故障或面临无法处理的情况时,就需要专家。**此外,航空公司和乘客希望这位专家在场:人类比计算机更善于快速吸收新的和不相关的事实,并据此采取行动。事实上,在那些机器已经证明其效率的领域,人类掌握着最终决策权,他对自动驾驶仪做出的决策负责。

同样的法医学问题也出现在医学上:谁对诊断负责,尤其是如果诊断是错误的?参与开发、营销和安装人工智能系统的科学家和制造商是否会为使用人工智能算法导致的有害结果承担法律责任?责任问题是有分歧的[9]。

相反,人工智能作为一种新的工具,参与丰富了放射科医生的角色。在 CT 和 MRI 出现的时候,一些人预测该专业将会过时,由于更容易的解释而变得没有必要。相反,技术已经完善,放射科医生从未如此必要。该专业已经证明了其适应新技术的能力,创新最终被输出到其他专业,例如用于血管流产的 Seldinger 方法[10],该方法也是心脏病学、血管医学和麻醉的参考。

欢迎来到人工智能增强放射学的第一章

我们在第 1 章的人工智能在放射学中,它将被整合,因为每一个以前的形式已经。学生不会因为人工智能而逃离专业,而是会从利用这种变化和培训中受益[11]。

正如 1896 年一位医生和一位工程师发展了放射摄影术一样,研究可以从放射学家和研究者之间的合作中获得一切。专业不与 AI 竞争。这种偏见可能让人想起邓宁-克鲁格效应(Dunning-Kruger effect )[ 13 ],预测对抗的个人主要来自初创企业和政治阶层,并不了解放射学家的真实活动。

放射科医师的角色不仅仅是标记图像;他或她参与医学讨论,讨论要进行的检查、临床假设、与病人档案的对质、咨询其他专家并为管理铺平道路。图像提供的信息被整合到患者问题的管理中。与普遍的看法相反,除了对病人进行的所有技术操作之外,介入放射学中还有会诊。另一方面,这种机器将使重复性工作变得更容易,加快管理速度,并可能有助于满足日益增长的放射学需求。诸如在 CT 扫描仪中引入有组织的肺癌筛查之类的进步,有可能需要每年解释数百万次以上的检查:如果没有计算机的帮助,这是一个无法实现的目标。放射科将需要人工智能。后者也将是有用的,当它将有助于改善技术,并加快 8 倍的 MRI 扫描的采集,正如第一次研究结果似乎显示的[14]。

我将站在斯坦福大学放射学家柯蒂斯·朗洛茨(Curtis Langlotz)一边,他在 2018 年表示:

“AI 不会取代放射科医生,但使用 AI 的放射科医生会取代不使用 AI 的放射科医生。”

为什么要害怕一个充满新奇未来的专业?

关于作者:
亚历山大·内罗特(Alexandre Nerot)医学博士(
https://www.linkedin.com/in/alexandre-nerot/)是一名法国放射学实习生,他在介入放射学的一项活动和他的笔记本之间分享时间,以参加各种可用的 Kaggle 竞赛。
这篇文章的标题灵感来自于在 Kaggle 上找到的一篇文章:
https://www . ka ggle . com/jhoward/don-t-see-like-a-放射科医生-fastai

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

作者照片,自动肌肉和脂肪分割

引用

[1]“杰夫·辛顿:关于放射学——YouTube”。https://www.youtube.com/watch?v=2HMPRXstSvQ

[2] O. Russakovsky 等,“ImageNet 大规模视觉识别挑战”,ArXiv14090575 Cs,janv。2015,Consulté le : avr。09, 2020.http://arxiv.org/abs/1409.0575

[3] K. He,X. Zhang,S. Ren,et J. Sun,“用于图像识别的深度残差学习”,ArXiv151203385 Cs,déc. 2015,【http://arxiv.org/abs/1512.03385】。

[4]“放射科医生应该了解的人工智能 ESR 白皮书”,《洞察成像》,第 10 卷,avr。2019,doi:10.1186/s 13244–019–0738–2。

[5] S. Reardon,“机器人放射科医生的崛起”,《自然》,第 576 卷,第 7787 号,第 7787 号文章,2019 年,doi:10.1038/d 41586–019–03847-z。

[6]“rangs limites”。【https://www.cngsante.fr/chiron/celine/limite.html

ECN 统计:放射学和医学影像学"。https://www . med shake . net/medicine/ECN/statistiques/radio logie-et-imagerie-medical e/

[8]“不要对波音公司的自动飞行飞机大惊小怪——机器人已经在天上飞了”,《连线》。

[9] M. Codari 等人,“人工智能对放射学的影响:欧洲放射学学会成员之间的 EuroAIM 调查”,《洞察成像》,第 10 卷,第 1 期,第 105 页,2019 年 10 月,doi:10.1186/s 13244–019–0798–3。

[10] S. I. Seldinger,“经皮动脉造影术中针头的导管替换;一种新技术”,无线电学报,第 39 卷,第 5 期,第 368-376 页,mai 1953,doi : 10.3109/00016925309136722。

[11] A. Nerot 和 I. Bricault,“放射学中的大数据介绍和人工智能自治的启动”,J. Imag。Diagn。Interv。,AOT 2020,doi : 10.1016/j.jidi.2020.05.016。

[12] W. J. Morton 和 E. W. Hammer,《看不见的 X 射线或摄影及其在外科手术中的价值》。纽约:美国技术图书公司,1896 年。

[13] J. Kruger et D. Dunning,“不熟练和不知道它:如何认识到自己的无能的困难导致膨胀的自我评估。心理网”,美国心理学会心理网,1999 年。/record/1999–15054–002?doi=1

[14] J. Zbontar 等人,“fastMRI:加速 MRI 的开放数据集和基准”,ArXiv181108839 Phys. Stat,déc. 2019,http://arxiv.org/abs/1811.08839

为什么数据科学家应该保持开放的心态、好奇心和非判断性

原文:https://towardsdatascience.com/why-data-scientists-should-stay-open-minded-curious-and-non-judgemental-49784a883a78?source=collection_archive---------35-----------------------

作者聚焦

“我总是意识到有多少我不知道,但随着我的学习,我试图将一切联系起来。”

在 Author Spotlight 系列中,TDS 编辑与我们社区的成员谈论他们在数据科学领域的职业道路、他们的写作以及他们的灵感来源。今天,我们很高兴与大家分享 哈耶纳山 本胡伯尔曼 的对话。

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

照片由 Haaya Naushan 提供

Haaya 是一位专注于将数据科学和机器学习与社会意识研究相结合的数据科学家。她目前与 NLP 和计量经济学合作进行因果推断,并拥有利用大数据和图形算法研究社交媒体的经验。

在从事数据科学之前,她学习生物学,希望成为一名兽医。在空闲时间,她玩在线竞技视频游戏,阅读哲学和科幻小说,烘焙糕点,并用水彩画来表达自己。

你是如何决定进入数据科学领域的?

在疫情开始的时候,我开始学习如何以编码为乐;我的主要兴趣是数据可视化和 web 应用程序开发。2020 年 6 月,当我在非营利部门的工作被取消时,我有很多空闲时间,并决定学习数据科学,因为我一直喜欢统计和讲故事。我跟随自己的好奇心,很快迷上了机器学习,然后对语言的痴迷驱使我深入探索 NLP。

由于我致力于社会公正,我自然被像阿拉伯语这样的低资源语言所吸引。这给了我一个在世界银行工作的机会,在那里,我能够协助针对中东和北非的社交媒体研究。与经济学家一起工作激发了我对因果关系的兴趣,这也是我开始自学计量经济学的原因。

后来,我很幸运地签约研究如何将 NLP 用于经济分析,重点是可持续发展。我决定我需要领域知识来更好地解决问题;因此,我开始自学宏观经济学和发展经济学。一路上,我拓展了自己感兴趣的其他领域,例如语言学、虚假信息、网络安全、神经科学、流行病学和人工智能伦理学。

对于门外汉,你能分享一下什么是计量经济学吗?为什么你觉得它很有趣?

对我来说,计量经济学只是一套工具,可以用来解决因果问题。我被计量经济学吸引,因为我想做的不仅仅是使用数据驱动的模式识别进行预测——我想了解“为什么”因果推断令人着迷,传统计量经济学通常提供了确定因果影响的最佳方法。

此外,机器学习目前正在以很酷的方式推进计量经济学,由于大数据,现在有可能提出新类型的预测经济学问题。此外,我们现在有机会将因果方法应用于数据科学,我希望这将提高人工智能的可靠性和公平性。

理解如何应对流行病是考虑计量经济学的另一个原因——流行病学依赖于与经济学相同的基本因果数学。由于这两个学科对人们的生活有着直接的影响,所以它们都需要非常严格的要求。道德的社会政策需要良好的数据,因果关系对于确保决策者的责任是必要的。

迄今为止,在你的数据科学经历中,最具挑战性的方面是什么?

我的数据科学之旅始于避免无聊的愿望;让我保持兴趣的是该领域的跨学科性质、引人入胜的挑战和创造力的空间。我特别喜欢人工智能发展的快速步伐,因为总是有新的东西要学,我觉得这非常令人兴奋。然而,我面临的挑战是接受我需要自由地以非传统的方式学习。我必须学会不去评价自己不喜欢在线课程的结构,对重复的代码练习和传统课程缺乏耐心。这也意味着我没有办法衡量自己的进步,有时会感到很孤独。我的解决方案是在媒体上写文章,与人交流,并在确定优先学习内容时满足我的好奇心。

让自己变得真实是一种力量,也意味着我的数据科学之旅以自我发现为特征。更具体地说,我发现我喜欢通过阅读源代码和文档来学习如何编码。我更喜欢处理有趣的项目来练习我的技能,我通过阅读研究论文来最好地吸收领域知识。我总是意识到有多少我不知道,但是当我学习的时候,我试着把一切联系起来。我将这个过程概念化为构建一个图表,帮助我看到更大的画面,在这里我依靠灵感和直觉来寻找方向。因为我一直在寻找视角,所以这场斗争是在对抗存在主义的自我怀疑。我学会了通过抚摸我的猫或转移注意力来放纵我的其他爱好来休息和重置。

你的文章经常通过数据的镜头来探讨社会公正和道德。当你着手这类话题时,你的目标是什么?

我相信数据科学和人工智能有巨大的潜力来帮助人们;然而,我担心从业者可能天真地认为他们的工作是客观的,远离社会。现实是,科学不会在真空中产生:需要对当前的社会不公正有所认识,并有促进公平做法的动力。

我担心,对利润的盲目追求将破坏我们确保人工智能发展弊大于利的能力,特别是对历史上被边缘化的弱势群体。人工智能的当前应用已经揭示,由于缺乏公平的激励,并且对有偏见的算法没有影响,人工智能正在伤害人类。从积极的方面来说,我从寻求技术和研究民主化的开源运动中获得了希望。我还感到鼓舞的是,许多积极分子一直在努力提高对这些问题的认识。

你对刚刚进入这个领域的人有什么建议——尤其是那些可能对任务驱动的项目感兴趣但不知道从哪里开始的人?

对我有效的方法对其他人来说不一定是正确的;然而,当你善待自己时,每一段旅程都会更顺利。我会鼓励人们思想开放,充满好奇心,不做评判。我相信内在动机是有帮助的,激情对确保学习之旅本身是令人满意的有很大帮助,不管结果如何。如果一天结束时你很痛苦,成功就没有什么意义;最好是有乐趣,这样学习是一种乐趣,而不是达到目的的一种手段。

对于那些对社会影响计划感兴趣的人来说, DataKinddata for goodtech jobs for good 是一个好的起点。我认为在非营利组织做志愿者是一次很好的学习经历,有很多领域,比如公共卫生、教育和环境保护,都可以受到数据的积极影响。我也鼓励人们写作和分享他们的作品——这是巩固知识和学习如何让技术内容更容易理解的好方法。从小处着手是可以的:我只在自己喜欢的时候写作,我认为质量比数量更重要。Medium 对我来说是一个巨大的资源,为社区做贡献将会帮助其他人。

以充满希望的口吻结束,您希望在未来几年内看到数据科学领域发生什么样的变化?

疫情暴露了全球的不平等,这为以更公平的方式重建社会提供了机会。具体来说,我认为我们这一代最重要的两个问题是气候变化和贫困/不平等,我认为不可能只解决其中一个而不解决另一个。让我充满希望的是,我目前在世界银行的工作代表了他们同时、系统地解决这两个问题的承诺。我希望在数据科学和人工智能领域看到这种变化,在这些领域,开发和应用应该关注社会和气候正义。

我也希望看到因果 ML 的进步和增加的可访问性,因为我认为因果推理是伦理 AI 的关键。技术方面,我最激动的是量子计算;观察这个领域在未来十年的发展将会非常有趣。我也看到了神经经济学在更好地理解人类决策的生物和社会机制方面的潜力——我希望这一知识将转化为人工智能的改进。此外,我预计深度学习将继续对视频编辑、电影制作和视频游戏开发产生影响。与此相关的是,看到数据科学家或使用人工智能的内容创作者在 Twitch 上流动会很酷。

好奇想了解更多关于 Haaya 的工作和项目吗?在媒体LinkedIn 上关注她。以下是 Haaya 关于走向数据科学的档案中的一些杰出作品,她在这里分享了计量经济学和人工智能伦理的深度挖掘,机器学习和可视化技术的教程,等等。

请继续关注我们即将推出的下一位专题作者。如果你对你想在这个空间看到的人有建议,请在评论中给我们留言!

为什么数据科学家应该适度使用 Jupyter 笔记本

原文:https://towardsdatascience.com/why-data-scientists-should-use-jupyter-notebooks-with-moderation-808900a69eff?source=collection_archive---------5-----------------------

Jupyter 笔记本改变了全球数据科学家的游戏规则。但是应该乱用吗?

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

Elisa Ventur 在 Unsplash 上拍摄的照片

介绍

毫无疑问,2015 年 Jupyter 项目及其笔记本的推出改变了科学程序员和他们的代码之间的关系。第一个原因是连接不同编程语言(内核)的简单性,以及将文本与代码片段和输出(如表格、图形和地图)组合成一个页面的简单性。这种笔记本特性使得实现由 Donald Knuth 在 1984 年首次提出的有文化的编程范例成为可能,而且很简单。

识字编程最初是由斯坦福大学的 Knuth 提出的,目的是使程序逻辑更接近人类语言。它将代码与自然语言文本结合起来。

第二个原因是 Jupyter 笔记本的交互特性。试验数据并查看每个输入命令的代码结果的可能性使它成为数据科学家和研究人员的理想选择,他们的重点是数据分析而不是开发。
通过使用交互式笔记本,不再需要编写充满几十(或几百)行容易出错的代码的长脚本来在处理结束时显示结果。根据目标的不同,你甚至不需要费心去声明函数或者设计类。你可以按需声明你的变量,然后关注结果。

一句话:Python 和 Jupyter 成为数据科学家的标准。越来越多需要这些技能的课程和工作岗位可以证实这一点。

但现在,你可能会问自己。如果它这么好(而且是一个改变游戏规则的人),为什么我还要管它的使用呢?

为了回答这个问题,我要讲一个小故事。

老式节目

当我开始在大学开展我的研究时,我至少有 10 年没有从事任何编码工作,我几乎不知道 Python 的存在。我曾经用 Pascal、C 和 Fortran 中的一点点编写代码,它们是我毕业时在大学里使用的主要科学语言(我知道,那是很久以前的事了)。我既不知道 Jupyter 的存在,也不知道成千上万个不同的 Python 包中的任何一个,这可能会让人不知所措。

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

伯特 bUnsplash 上的照片

所以我开始了我习惯的方式。买了两本 Python 的书(没错没错…我还在用书)装了基本的 Python 解释器和一个很好的免费 IDE。快速的网络搜索让我找到了 Pycharm 社区的 T2 版本。

由于我没有 Jupyter 提供的快速可视化的优势,我创建了一个管道来预处理所有的输入数据,并测试不同的处理组合。最后,它生成了我的研究所需的所有可能的图表和输出。我被迫写一个好的代码,它很容易被复制,否则,我将不能分析一切。当我处理高分辨率卫星图像时,数据量非常大。

我花了一些时间来开发一切,但一旦工作完成,我就可以专注于在全球的不同地区,以不同的覆盖范围等来试验该算法。最终,我对结果感到满意,我的第一篇科学论文和公共 Python 包(一个卫星图像的水探测软件)发表了。你可以在 GitHub 库这里查看它们。

笔记本“编程”

通过了我的第一个研究“检查点”,我开始学习新的工具来提高我的技能,然后我安装了 Jupyter Lab(以前笔记本的更新版本)。

我的生活改变了。我记得当时在想… “为什么我之前不试试这个?”

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

照片由 Myriam JessierUnsplash 上拍摄

我对测试、记录和快速可视化我所做的所有事情的无限可能性感到惊讶。我甚至测试了一些最近的软件包,它们将笔记本变成了一种开发环境。这个名为**nbdev**的工具使得导出模块、创建包甚至记录全部内容变得更加容易。我想,这是两个世界中较好的一个。

然而,在另一个主题上工作了几个月,并在我的机器学习研究方面取得了相当好的成果之后,我的上司告诉了我一些害怕的话:“伟大的成果!让我们在不同的网站上进行尝试,以验证结果。”。不同的网站?验证结果?为了明天???

我对此没有准备。为了获得最初的结果,我用不同的算法、不同的预处理标准化等运行了一系列不同的机器学习测试。但重点是结果,而不是开发一个完整的加工链,我仍然在“试验”。因此,代码没有模块化,很难重现一个旧的实验,我从来没有找到笔记本上正确版本的实现,等等。等等。等等。

因此,仅仅是为一个新的位置复制结果就非常痛苦。而且要花很多时间。这让我们效率很低。对于要求苛刻的上级来说,这不是一件容易理解的事情。他只是想“…但是你已经开发了它,你已经给我看了结果,我现在所要求的是按下同样的按钮”。嗯……算是吧。

事实是,一段时间后,我做了很多不同的测试和实验,并编码,这是真的。但是我没有模块化的代码,无法发布,也无法与其他研究人员分享。我只有…一堆互不关联的笔记本,重复的功能,奇怪的名字,等等。

到最后,似乎我没有以前那么有效率了。我没有构建任何东西。我没有软件要交付。这种感觉很糟糕。

我已经在这个故事里写过科学软件设计不好的原因:科学软件设计不好的 7 个原因。而我相信,科学家“程序员”对 Jupyter 笔记本的不加选择的使用,会让这个问题变得更加严重。

卡格尔的洞察力

在我是一个狂热的笔记本用户的这段时间里,我也参加了一些 Kaggle 比赛,以提高我在深度学习方面的技能(在我看来,这是向其他 DL 从业者学习的最好方式)。比赛结束后,他们总会做的一件好事是采访获胜者。

于是有了这次采访,采访对象是一个俄罗斯人(我不记得他是哪个比赛的了)。有人问他使用的开发环境,他回答说:“我不使用 Jupyter 笔记本。我所做的一切都是通过简单的旧观念。那改变了我的想法。我是从一个有成千上万竞争者的比赛的获胜者那里听到的。很可能,他们中的大部分人直到现在还贴在他们的笔记本上。

这个故事让我重新思考我的一些误解。事实是,使用 Pycharm(或 Spyder,或 VS Code,任何其他 IDE)时,我使用笔记本的效率比开始时更低了。

这里我想指出的是:因为笔记本赋予我们的自由,所以有必要加倍承诺保持代码的干净、可复制、有组织等。有时候,这是不可行的。

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

图片作者。

解决办法?

现在,在我的数据科学之旅中,最适合我的是同时使用 IDE 和 Jupyter 进行开发,但目的不同。我在 IDE 上编写函数和类,放在我创建的一些新包中,然后我使用笔记本来调用包并可视化结果。这样,最终,我有了一个“现成的”包,可以与其他研究人员共享。

为了使这个设置工作,我们需要注意以下几点:

  • 创建一个新的(空)包,并使用 pip ( -e选项)在编辑模式下安装。这样,源代码将保留在原始的文件夹结构中,您可以在其上继续开发。
cd project_folder
pip install -e .
  • 使用 Jupyter 笔记本上的%autoreload分机。这将允许您在 IDE 上更新软件包,并在笔记本上检查结果,而无需重新启动内核。
# on the very first cell of the notebook
%load_ext autoreload
%autoreload 2
  • 或者,您可以将 IDE 的调试器附加到 Jupyter 内核。在 PyCharm 上,这是在运行菜单中完成的(下图)。

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

我目前正在开发一个新的掩模处理器,这是一个例子,展示了我现在的设置。我拥有 IDE 的所有优点(完成、参数检查等)。),调试器正常运行,最终,包“准备好”进行部署。使用 Jupyter 笔记本仅用于显示结果的另一个优点是,它可以用作新软件包的用户手册。

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

结论

先说清楚。我并不反对使用 Jupyter 笔记本或任何其他交互式环境,如 R 或 Matlab。我理解他们的优势,特别是对于研究和数据科学工作,重点是数据分析和实验,而不是代码生产。

然而,我们必须牢记期望是什么。通常,我们所做的最简单的数据分析应该是可重复的,并且容易与其他同事共享。

如果我们使用笔记本只是为了利用社区中已经存在的多个包并显示结果,那也没问题。但是,对于一段新的代码,一种新的处理,甚至是现有过程的简单自动化,最终可能会适得其反。

作为一名数据科学家,您认为哪种环境设置最适合您?留下你的评论和见解。

下一个故事再见。

保持联系

如果你喜欢这篇文章,并想继续无限制地阅读/学习这些和其他故事,考虑成为 中等会员 。你也可以在 https://cordmaur.carrd.co/查看我的作品集。

https://cordmaur.medium.com/membership

为什么 Python 中的装饰者是纯粹的天才

原文:https://towardsdatascience.com/why-decorators-in-python-are-pure-genius-1e812949a81e?source=collection_archive---------3-----------------------

小窍门

用一个@符号来分析、测试和重用你的代码

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

软件中没有什么是神奇的。但是装修工就很接近了!作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 如果说有什么东西让 Python 取得了难以置信的成功,那就是它的可读性。其他一切都取决于此:如果代码不可读,就很难维护。它对初学者也不友好——一个被不可读的代码困扰的新手不会有一天尝试自己写代码。

在装饰者出现之前,Python 已经是可读的和初学者友好的了。但是随着这种语言开始用于越来越多的事情,Python 开发人员感到需要越来越多的特性,而不要弄乱环境和使代码不可读。

装饰者是一个完美实现的特性的黄金时代的例子。确实需要一段时间来理解,但这是值得的。当你开始使用它们时,你会注意到它们并没有使事情变得过于复杂,而是使你的代码变得整洁而时髦。

首先是高阶函数

简而言之,decorators 是一种处理高阶函数的好方法。所以我们先来看看那些!

函数返回函数

假设你有一个函数,greet()——不管你传递给它什么对象,它都会打招呼。假设您有另一个函数,simon()——它在适当的地方插入“Simon”。怎么才能把两者结合起来呢?看下面之前想一分钟。

def greet(name):
    return f"Hello, {name}!"def simon(func):
    return func("Simon")simon(greet)

输出是'Hello, Simon!'。希望这对你有意义!

当然,我们本可以直接调用greet("Simon")。然而,重点是我们可能想要将“Simon”放入许多不同的函数中。如果我们不使用“西蒙”,而是使用更复杂的东西,我们可以通过将它打包成一个类似simon()的函数来节省大量代码。

其他函数中的函数

我们也可以在其他函数中定义函数。这很重要,因为装修工也会这么做!没有装饰者,它看起来像这样:

def respect(maybe):
    def congrats():
        return "Congrats, bro!"
    def insult():
        return "You're silly!" if maybe == "yes":
        return congrats
    else:
        return insult

函数respect()返回一个函数;respect("yes")返回祝贺函数,respect("brother")(或其他参数代替"brother")返回侮辱函数。要调用这些功能,输入respect("yes")()respect("brother")(),就像普通功能一样。

明白了吗?那你就可以做装修工了!

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

代码非常乏味。图片作者。

Python 装饰者的 ABC

带有@符号的函数

让我们试试前面两个概念的组合:一个函数接受另一个函数并定义一个函数。听起来难以置信?考虑一下这个:

def startstop(func):
    def wrapper():
        print("Starting...")
        func()
        print("Finished!")
    return wrapperdef roll():
    print("Rolling on the floor laughing XD")roll = startstop(roll)

最后一行确保我们不再需要调用startstop(roll)()roll()就够了。你知道那个调用的输出是什么吗?不确定的话自己试试!

现在,作为一个很好的选择,我们可以在定义startstop()之后插入这个:

@startstop
def roll():
    print("Rolling on the floor laughing XD")

这做同样的事情,但是在开始时将roll()粘合到startstop()

增加灵活性

为什么这很有用?这不是和以前一样消耗了很多行代码吗?

在这种情况下,是的。但是一旦你处理稍微复杂一点的东西,它就会变得非常有用。这一次,您可以将所有装饰器(即上面的def startstop()部分)移动到它自己的模块中。也就是说,您将它们写入一个名为decorators.py的文件,并将类似这样的内容写入您的主文件:

from decorators import startstop@startstop
def roll():
    print("Rolling on the floor laughing XD")

原则上,你可以不使用 decorators 来做这件事。但是这种方式使生活变得更容易,因为你不必再处理嵌套函数和无休止的括号计数。

你也可以嵌套装饰者:

from decorators import startstop, exectime@exectime
@startstop
def roll():
    print("Rolling on the floor laughing XD")

注意,我们还没有定义exectime(),但是您将在下一节中看到它。这是一个函数,可以测量 Python 中一个过程需要多长时间。

这种嵌套相当于这样一行:

roll = exectime(startstop(roll))

括号计数开始!想象一下,你有五六个这样的函数嵌套在一起。装饰符号不是比这种嵌套的混乱更容易阅读吗?

你甚至可以在接受参数的函数上使用装饰器。现在,想象一下上面一行中的几个参数,你的混乱将会结束。装修工把它弄得干净整洁。

最后,你甚至可以给你的装饰器添加参数——就像@mydecorator(argument)一样。是的,没有装修工你也可以做这些。但是我希望当你在三周内再次阅读你的无装饰代码时,你能从中获得很多乐趣…

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

装修工让一切变得更简单。图片作者。

应用:装饰者切奶油的地方

既然我已经满怀希望地让你相信了装修工让你的生活变得简单了三倍,那么让我们来看看一些装修工基本上不可或缺的经典例子。

测量执行时间

假设我们有一个名为waste time()的函数,我们想知道它需要多长时间。好吧,就用装修工吧!

import timedef measuretime(func):
    def wrapper():
        starttime = time.perf_counter()
        func()
        endtime = time.perf_counter()
        print(f"Time needed: {endtime - starttime} seconds")
    return wrapper@measuretime
def wastetime():
    sum([i**2 for i in range(1000000)])wastetime()

十几行代码就完成了!另外,你可以在任意多的功能上使用measuretime()

降低代码速度

有时你不想立即执行代码,而是等待一段时间。这就是慢下来的装饰派上用场的地方:

import timedef sleep(func):
    def wrapper():
        time.sleep(300)
        return func()
    return wrapper@sleep
def wakeup():
    print("Get up! Your break is over.")wakeup()

调用wakeup()可以让你休息 5 分钟,之后你的控制台会提醒你继续工作。

测试和调试

假设你有很多不同的函数,你在不同的阶段调用它们,你失去了对什么时候调用什么的了解。每个函数定义都有一个简单的装饰器,这样可以更加清晰。像这样:

def debug(func):
    def wrapper():
        print(f"Calling {func.__name__}")
    return wrapper@debug
def scare():
    print("Boo!")scare()

这里有一个更加详细的例子。注意,为了理解这个例子,你必须检查如何用参数来修饰函数。尽管如此,它还是值得一读!

重用代码

这不言而喻。如果你已经定义了一个函数decorator(),你可以在你的代码中到处散布@decorator。老实说,我认为没有比这更简单的了!

处理登录

如果你有一些只有在用户登录时才能访问的功能,那么对于 decorators 来说这也是相当容易的。我会让你参考的完整例子作为参考,但是原理很简单:首先你定义一个类似login_required()的函数。在任何需要登录的函数定义之前,弹出@login_required。很简单,我会说。

句法糖——或者为什么 Python 如此可爱

这并不是说我对 Python 不持批评态度,或者在适当的时候不使用替代语言。但是 Python 有一个很大的吸引力:它非常容易消化,即使你不是受过训练的计算机科学家,只是想让东西工作。

如果 C++是一个橙子,那么 Python 就是一个菠萝:同样有营养,但甜三倍。装饰者只是其中的一个因素。

但我希望你已经明白为什么它是如此大的甜蜜因素。句法糖给你的生活增添一些乐趣!没有健康风险,除了眼睛盯着屏幕。

祝你有很多甜蜜的代码!

为什么我(真的没有)在 50 岁重塑自己?

原文:https://towardsdatascience.com/why-did-i-really-not-reinvent-myself-at-50-75b905c50778?source=collection_archive---------19-----------------------

数据科学拯救了我

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

照片由 SOULSANAUnsplash 上拍摄

我厌倦了握手和亲吻婴儿,想赚更多的钱——我想有所作为。我在我认为是我想要的管理职位上度过了十多年,但他们留给我一个人的空壳,我只想回到我喜欢做的事情上。所以,我重塑了自己。

听起来很棒,很有戏剧效果,不是吗?多半是废话(空壳部分是真的)。作为一名高管,我真的想通过了解数据科学赚更多的钱,这就是为什么我在 49 岁时报名参加了数据科学硕士项目。我一直在关注和研究 AI,想要更多的细节,这样我就可以更好地销售它,并区分事实和虚构。

但是当我在读硕士课程的时候,意想不到的事情发生了;我对技术和编程的热爱(尤其是这种热爱)最初让我达到了那些专业水平,这种热爱以一种令人惊叹的方式被重新点燃。然后有一天变成的我和曾经的我面对面站在一起,曾经的我深深的失望和羞愧。我变成了我想避免的一切——物质主义、自私、傲慢、冷漠。

对我来说幸运的是,这种顿悟发生在我技术复兴的中期。我对技术的热爱一直驱使着我,没有限制,没有犹豫,现在又一次如此。我在重塑自己,这几乎完全是个意外。或许陈述这些最初时刻的更好方式是说我是被改造的*。*

闪电击中,然后呢?

我想说,当现在的我和以前的我相遇时,我立刻辞职了,诸如此类。虽然这也非常具有戏剧性,但这也是一个谎言。我被解雇了,因为我真的不擅长销售。(我接受这份工作的时候并不知道,请注意,除了对那个前雇主的爱,我一无所有。)但在那份工作结束后,我非常肯定地知道,我需要回归基础。这一点(还有一点点运气,我一会儿会讲到)让我找到了现在的工作,挣的钱少得多,头衔也少得多,但享受、成功和给予他人的机会却多得多。这也让我有时间开始在大学教书(也令人难以置信地满足)。这也是我写这篇文章的原因。

我的杯子溢出来的咖啡少了很多。

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

泰勒·尼克斯在 Unsplash 上的照片

是啊,但是为什么呢?

在我看来,重新发明更多时候是一种需要,而不是一种选择。从逻辑上讲,这是有道理的——如果它没有坏,就不要修理它。这种必要性对我来说是肯定的,并回答了“为什么”这个问题。简而言之,我必须重塑自己,老实说,我的重塑一部分是需要,一部分是计划,一部分是运气。

我已经谈到了必要性部分(被解雇)。当我读研究生时,计划就开始了;我知道数据科学很重要,它就像 1995-1996 年互联网商业化一样重要(我当时在场)。在研究生院期间,我开始公开谈论离开我曾经做过的工作,以便回归数据科学的基础。其中一次对话直接把我带到了现在的位置。教学也是我最初计划的一部分,因为我不认为我会真的从事数据科学,所以我认为如果我教数据科学,我可以保持敏锐(结果是我可以做它并教它)。

幸运的部分不是一个单独的时刻,而是许多事情的结合在一起帮助了我。在我需要被推动前进的时候,我在推动我前进的东西上有技术复兴的可能性有多大?我说的那次对话让我走到了现在,它发生在伦敦,因为我认识并尊敬了很长时间的一个人恰好在那里——那个发生在的几率有多大?(我们都住在美国)有些运气是因为罗马哲学家塞内卡说过的,“运气是当准备遇到机会时。”有些只是运气不好。**

接下来是什么?

我不得不说,我现在的生活感觉非常像《终结者的最后一幕,加油站的服务员把小男孩不祥的话翻译成了琳达·汉密尔顿扮演的角色——“暴风雨即将来临。”琳达·汉密尔顿的角色用更不祥的“我知道”来回答**

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

丹尼尔·布索在 Unsplash 上的照片

我怀疑我的生活中会有一场风暴——更多头衔或金钱的诱惑。鉴于我的激情正在激励我,这似乎是可能的。我一生都在想,在遭遇风暴之前,琳达·汉密尔顿应该如何给她驾驶的吉普车装上车顶。不过,在我人生的这个阶段,我的观点已经改变了。我的意思是,她真的没有去任何地方,所以只是把该死的吉普车掉头,走另一条路!

搞什么鬼?

为什么强化学习要对未来的回报打折扣?

原文:https://towardsdatascience.com/why-discount-future-rewards-in-reinforcement-learning-a833d0ae1942?source=collection_archive---------13-----------------------

从数学,金融,生活,当然还有强化学习的角度讨论贴现率。

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

不是那种折扣。 Artem BeliaikinUnsplash 上的照片

虽然折现率是马尔可夫决策问题和强化学习(RL)的一个组成部分,但我们经常会不假思索地选择 γ=0.9γ=0.99 。当然,当被问到时,我们会有一些直觉,比如“今天的回报比明天的回报更有价值”或者“补偿不确定性”。当被追问时,你能为为什么这些直觉成立辩护吗?为什么挑 γ= 0.8 而不是 γ= 0.9?不确定性不是已经纳入期望值了吗?如果你没有现成的即时答案,这篇文章可能会对这个问题有所启发。

🧮数学中的折现

从严格的数学角度来看,贴现率的目的是显而易见的,至少对于无限期问题是如此。从贝尔曼的递归方程中,我们学会了求解状态序列的值函数:

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

如果那个数列是无穷的,那么奖励数列也是无穷的。考虑以下累积奖励序列 G_t :

G_t = R_t + R_t+1 + R_t+2 + … = 1 + 1 + 1 + … = ∞

众所周知,对一个无穷奖励级数求和会产生无穷奖励,使得方程组无解。幸运的是,加上贴现率*γ∈【0,1】*会产生一个收敛的几何级数。例如,如果我们设置 γ=0.8 ,我们得到:

*G_t = γ⁰R_t + γ¹R_t+1 + γ²R_t+2 + … = 1 + 0.8 + 0.64 + … = 5*

有了这个技巧,我们可以将值附加到状态上,并求解贝尔曼方程组。当然,在强化学习中,这个解决方案是近似的。

这解释了无限的情况,但是为什么要为有限时间范围的贴现而烦恼呢?你可能会说我们补偿了不确定性,但这不是已经反映在预期价值中了吗(用未来回报乘以它们的概率)?数学的观点不能解决这个问题,我们需要深入人类的心灵。

金融中的贴现💸

有什么比金钱更能诠释人类的精神?

投资的一个重要组成部分是存在一个无风险利率。这是在没有任何不确定性或违约风险的情况下可以获得的回报,作为所有其他回报的基准。美国国债经常被用作代理。将 1 美元投入 2%的美国国债,一年后你将获得 1.02 美元的保底收益。因此,我们更喜欢今天的 1 美元,而不是明年的 1 美元。不需要努力,我们的财富每年可以增长 2%,因此我们会将未来的回报折现 2%,以反映的时间价值

当考虑股票等风险工具时,这变得更有意思了。假设一只股票从现在起一年后会上涨 0%或 4%,两者的概率都是 0.5。的预期收益是 2%。然而,空手而归的可能性很大。在这种情况下,典型的投资者会更喜欢无风险的 2%债券,尽管预期的收益是相等的。由此可见,股票回报的折现率高于债券回报。

这种现象被称为避险 。人们期望不确定性得到补偿,否则他们会选择更安全的替代方案。不确定性越多,折现率越高。也许我们会选择收益率为 10%而不是 4%的股票(将预期收益提高到 5%)。投资需要在补偿时间价值的基础上提供一定的风险溢价**。**

仍然有许多话题没有触及,例如使用指数贴现的趋势(类似于 RL)、机会或后悔成本(你只能投资一次)、冒险行为(从理性投资者的角度来看,彩票几乎没有意义),以及奇怪的不一致边界情况。现在,让我们确定贴现率既反映了时间价值又反映了风险溢价的基本原理。

生活中的折扣⏳

贴现行为不仅限于美元。在日常生活中,我们不断地平衡短期满足和长期后果,权衡确定性和不确定性。晚睡,明天会很累。冬天尽情地吃,夏天你需要减掉脂肪来打造海滩身材。现在没日没夜地学习,希望以后有所收获。

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

指数贴现和双曲线贴现的比较。前者通常用于强化学习,后者根据经验在人类中观察到。图片来自维基媒体

在这个问题上已经进行了无数的心理学研究,表明人类在决策中倾向于执行类似于双曲线贴现的东西。手臂上纹有及时行乐纹身的人很可能对未来的奖励大打折扣,其他人可能会更看重它们。尽管个人之间存在差异,但我们所有人都在某种程度上打了折扣。

这种现象的一个非常自然的原因是风险率——我们无法活到明天收获回报的概率。尽管急性死亡的风险不像我们狩猎采集的祖先那样高,但偏好奖励的生物冲动现在仍然非常完整。危险不需要像死亡一样病态。膝盖受伤可能会缩短运动生涯,而五年后的亚洲背包旅行也可能无法实现。即使在最平庸的层面上,我们也更喜欢现在吃一块饼干,而不是下周吃一块。

作为人类,无论明智与否,我们只是天生倾向于把现在的回报看得比(遥远的)未来更高。

强化学习中的折扣📖

现在我们对人类贴现的基本原理有了一些了解,但是这种推理对强化学习问题成立吗?尽管神经网络和人脑之间存在一些松散的联系,但典型的 RL 算法并不是为了模仿人类行为而设计的。危险率也是一个易受影响的基本原理,因为我们可以将危险模拟到环境中。例如,一个悬崖行走游戏在代理人踏入悬崖时结束——我们不需要额外打折来反映心脏病发作或脚趾受伤。一个相反的论点是,这种危险可能发生在政策没有经过训练的环境中,利用贴现率作为一种稳健性手段。

对于许多 RL 问题,不贴现未来的奖励是完全可以接受的。尽管如此,即使是有限的时间范围,也有充分的理由对 RL 进行贴现。其中之一是决策对长期绩效的实际影响。最终,由建模者决定什么样的折现率最能反映问题背景下的累积回报。

假设今晚我必须在清淡和丰盛的晚餐中做出选择。这个决定可能会影响我之后的健身课,但可能不会影响我明年的晋升。在这里,我们看到了贴现未来回报的明确理由——一些后果很难与今天的行动联系起来。RL 的目的是纳入当前决策的下游影响,然而未来的回报可能是不相关的。一般来说,环境越随机,我们的行为对绩效的持久影响就越小。

StackExchange 上的一个答案以一种有趣的方式形式化了这个概念,表达了一个参数 τ ,它反映了我们感兴趣的时间间隔:

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

和以前一样,假设回报总是 1。随着 γ=0.8 ,级数收敛到 5。实际上,超过五个时间步长的奖励——注意e^(-1/5)≈0.8——几乎没有影响。类似的,一个级数在 γ=0.9 时收敛到 10,在γ=0.99 时收敛到 100。请注意:在 t+τ 之后突然获得+100 奖励仍然会对折扣奖励产生重大影响,但是根据的经验法则这种方法是有意义的。如果你认为五个时间步后的回报与现在所做的决定没有什么关系, γ=0.8 可能是一个合适的贴现率。

希望这篇文章在贴现率的话题上提供了一些清晰度,然而它仅仅触及了表面。有人认为整个概念对于函数逼近(我们通常在 RL 中使用)是有缺陷的,并且平均奖励是比贴现奖励更好的衡量标准。另一个有趣的方法是放弃固定贴现率的概念,转而使用依赖于州的贴现率。考虑到人类的偏好,一个全新的世界就展现出来了。

的确,那个小小的参数 γ 隐藏了很大的深度。

外卖食品

  • 贴现通常是解决无限期问题所必需的。折扣率 γ < 1 确保了回报的几何级数收敛。
  • 从金融学中,我们了解到贴现反映了时间价值和风险补偿。像在强化学习中一样,指数贴现通常是假定的。
  • 人类天生倾向于对未来回报进行贴现(接近双曲线贴现),风险率是一个重要的生物学原理。
  • 对于有限范围的问题,是否需要贴现很大程度上取决于问题的性质和建模者的偏好。
  • 随机环境要求贴现率不那么强调未来回报;当前奖励对遥远未来的影响很小。贴现率隐含地反映了你希望预测的时间步数。

进一步阅读

达斯古普塔和马斯金(2005 年)。不确定性和双曲线贴现。https://scholar . Harvard . edu/files/maskin/files/uncertainty _ and _ 双曲线 _ 贴现 _aer.pdf

Fedus,w .,Gelada,C .,Bengio,y .,Bellemare,m .和 Larochelle,H. (2019)。双曲线贴现和在多个时间跨度上的学习。【https://arxiv.org/pdf/1902.06865.pdf 号

Investopedia (2021 年)。折扣率。【https://www.investopedia.com/terms/d/discountrate.asp

Investopedia (2021 年)。风险溢价。https://www.investopedia.com/terms/r/riskpremium.asp

卡尼曼博士(2017)。思考,忽快忽慢。

纳伊克,a .,沙里夫,r .,Yasui,n .,姚,h .和萨顿,R. (2019)。折扣强化学习不是一个优化问题。https://arxiv.org/pdf/1910.02140.pdf

Pitus,S. (2019 年)。再思考强化学习中的折扣因子:决策理论方法。https://arxiv.org/pdf/1902.02893.pdf

StackExchange (2016)。理解折扣因子在强化学习中的作用。https://stats . stack exchange . com/questions/221402/understanding-the-role-of-discount-factor-in-reinforcement-learning

维基百科(2021)。几何级数。https://en.wikipedia.org/wiki/Geometric_series

为什么生物信息学家避免使用 Windows?

原文:https://towardsdatascience.com/why-do-bioinformaticians-avoid-using-windows-c5acb034f63c?source=collection_archive---------16-----------------------

生物信息学

为什么几乎每个生物信息学家都使用 Linux 而不是 Windows 的原因列表

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

从 Pixabay 打开剪贴画的图像

简介

在我们触及主题之前,让我先向你介绍一下生物信息学。生物信息学是连接计算研究(计算机科学、统计学、数据工程)和生物学的一门学科。生物信息学家帮助生物学家存储非常大的生物数据,执行计算分析,并将生物查询转换成可理解的结果。

如果你是一名生物信息学家,或者曾经与生物信息学家共事过,你可能会意识到一件事。生物信息学家的大部分工作都不使用 Windows。

原因其实很简单。是因为大部分生物信息学的工作都无法在 Windows 下完成。即使这是可能的,还有很多其他问题。下面的列表解释了为什么生物信息学家更喜欢 Linux 而不是 Windows。

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

图片由打开剪辑 Ar t 来自 Pixabay

为什么要用 Linux 做生物信息学?

1.大多数生物信息学工具只在 Linux 中可用

不幸的是,生物信息学工具选项在 Windows 中非常有限。大多数标准的生物信息学软件,例如用于基因组组装、结构注释、变体调用和系统进化树构建的软件都是专门为 Linux 编写的。

你可以争辩说,仍然有一种方法可以在不使用 Linux 的情况下访问这些生物信息学工具。我们可以尝试使用 Galaxy,这是一个在线平台,包含常用的生物信息学工具,如 FastQC、BWA-MEM、SAMtools、FreeBayes、BCFtools 等等。然而,尽管 Galaxy 是一个很好的平台,但也有一些限制。

  1. 时间
    因为你正在银河服务器上运行程序。该过程可能需要一段时间才能完成,因为您正在与许多其他用户共享服务器。
  2. 内存
    Galaxy 在内存分配方面是相当慈善的。您的 Galaxy 帐户将获得 250 Gb 的免费配额。但是如果你超过了这个限制,那么你需要下载并删除你的文件来释放一些空间。
  3. 有限的工具选项
    这也许是生物信息学家仍然喜欢在 Linux 中做生物信息学的主要原因。即使在 Galaxy 中有如此多的选择,生物信息学领域是如此之大,以至于 Galaxy 不能集成每一个生物信息学工具。例如,有可能我不得不使用一个非常合适的函数,比如 computeGCBias,来进行 GC 偏差校正。像这样的利基功能在 Galaxy 中不可用,尽管该功能自 2012 年以来一直可用。

如果你对计算生物学的银河软件感兴趣,在这里 查看一下

2.Windows 处理生物数据的速度非常慢

有没有试过在 Windows 下用记事本打开一个很大的 FASTA 文件或者基因表达文件?我打赌它不行,因为记事本的大小限制是 58 Mb。像这样的大型生物文件不能直接用文本编辑器或电子表格应用程序打开。

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

图片来自 PixabayHassan

我们经常做的是查看文件的标题(或者列名,如果是表格的话)并获得一些理解。在 Linux 中,使用 head 或 tail 可以轻松地查看数据。

在 Linux 中,执行简单的数据争论也很容易。我们只对检查唐氏综合症的 21 号染色体感兴趣吗?使用 grep 并将输出重定向到不同的文件。我们要不要把多个 FASTA 文件组合起来做进化树构建?很简单,使用 cat 并将输出重定向到一个新的 FASTA 文件。

3.Linux 有内置的编程语言

Linux 的另一个好处是,它有几个内置的编程语言,随安装一起提供。在文件转换之后,生物信息学的下一步是数据分析。在 Ubuntu(最常用的 Linux 发行版)中,已经安装了 Perl 和 Python,可以直接使用。

如果我们想用其他语言进行数据分析呢?例如,我是一名 R 程序员,但 Ubuntu 中没有预装 R。幸运的是,在 Ubuntu 中安装 R and R 工作室非常容易,因为大多数(如果不是全部)编程语言在每个 Linux 发行版中都可用。

4.在 Linux 中创建生物分析管道可以很容易地完成

生物信息学家做的一个好的实践是自动化他们的管道。例如,从头到尾自动化基因组装配流水线将是一个好主意。如果没有自动化,我们需要运行每一行并等待它完成(这可能需要一段时间,因为生物数据通常非常大),然后手动运行下一行。

生物信息学家封装所有这些过程的一种常见方式是在一个Bash 脚本中列出它们。使用 Bash 实现管道自动化并不是我们在 Linux 中唯一可以做到的方式。我个人最喜欢的管道自动化方法是使用 Snakemake ,这是一个创建可重复和可扩展数据分析的工具。点击这里阅读更多关于 Snakemake 的信息。

5.Linux 是免费的

Linux 是一个免费的*、*开源操作系统,任何人都可以安装、学习、修改甚至重新发布。因为所有的 Linux 发行版都是开源的,所以 Linux 发行版的开发和进步来自社区,也为社区服务。如果你有一个专门用于生物信息学工作的指定平台(笔记本电脑或台式电脑),为什么不选择免费的呢?

在那里你可以使用视窗进行生物信息学

既然我已经结束了对 Windows 的抨击和对 Linux 的赞美,那么实际上有一个实例表明生物信息学家使用 Windows 是没问题的。

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

图片由200 度像素点

数据分析和结果解释

在生物信息学中,整个计算流水线可以分为两个部分,数据转换和数据分析步骤。对于数据转换,生物信息学的选择非常有限。例如,从 FASTA 到 CSV 文件的生物文件转换在 Linux 上比在 Windows 上有更少的限制。然而,对于数据分析来说,情况完全不同。

用于生物数据分析或结果解释的三种最常见的编程语言是 Python、R 和 Perl。这 3 种语言在 Windows 中都是完全支持的。从创建用于乳腺癌预测的机器学习模型到使用曼哈顿图的不同密度可视化,所有这些分析都可以在 Windows 中使用这三种语言来完成。请记住,您也可以在 Linux 中进行这些分析,但是一旦您到达了生物信息学管道的这一部分,请随意选择您的操作系统。

结论

生物信息学家经常使用 Linux,因为我们在 Windows 中的选择非常有限。常见的生物信息学工具,如 FastQC、BWA-MEM 和 SAMtools 在 Windows 中不可用。确实有允许我们利用这些工具的在线平台,但是它们仍然没有摆脱限制。但是,如果您正在进行数据分析步骤,选择 Linux 还是 Windows 取决于用户。

感谢你阅读这篇文章!你同意我的想法吗,或者已经找到了一种即使在 Windows 下也能进行生物信息学工作的方法?欢迎在下面的评论中发表你的想法。

为什么人类的学习速度比机器学习模型快那么多?

原文:https://towardsdatascience.com/why-do-humans-learn-so-much-faster-than-machine-learning-models-cab0f5c111b6?source=collection_archive---------5-----------------------

当我们使用单词嵌入的魔力来说明对世界的理解时,会产生更好的机器学习模型

介绍

为什么人类可以在大约 50 小时内学会如何驾驶汽车,而机器学习(ML)模型需要数千小时的驾驶数据?在我看来,这种巨大的差异是由人类对周围世界有着与生俱来的理解这一事实造成的。如果我丢下一个鸡蛋,我可以预测鸡蛋一落地就会碎。此外,即使我没有把玻璃杯掉在地上,我也可以从鸡蛋的破裂推断出玻璃杯在撞击时也可能会破裂。将此转化为驾驶环境:当我在路上看到另一辆车时,我可以通过想象在这种情况下我会做什么来预测这辆车会做什么。这种对我们周围世界的理解以及我们在特定情况下准确推理结果的能力给了我们在 ML 模型上的巨大优势。

在使 ML 模型能够模仿人类的理解能力方面已经取得了很大的进步。一个很棒而且很神奇的例子是单词嵌入。在这篇文章中,我将挑选出一组经过训练的单词嵌入,并解释为什么在我看来它们显示了对我们生活的世界的真正理解。此外,我想传达我的绝对魅力,从一个简单的训练计划中可以产生对我们世界的微妙理解。

但是到底什么是单词嵌入呢?

单词嵌入是将文本数据表示为数字的一种方式,如果您想将文本输入到 ML 模型中,就需要这种方式。单词嵌入使用比如说 50 个特征来表示每个单词。在这个 50 维空间中靠得很近的单词意思都差不多,比如appleorange。我们面临的挑战是如何构建这 50 个特征。

已经提出了多种方法,但在本文中,我们将重点放在手套词嵌入。手套单词嵌入是从语料库中单词的共现矩阵中导出的。如果单词出现在相同的文本上下文中,Glove 假设它们的意思相似。这已经给出了第一个暗示,单词嵌入学习对它们训练的语料库的理解。

如果在一个给定的上下文中使用了大量的水果,单词 embeddings 将知道apple将适合那个地方。即使训练集从未在特定的上下文中使用过单词apple,这也是有效的。通过单词嵌入学习的世界的表示,单词嵌入允许训练更加灵活。

加载预训练的手套单词嵌入

为了真正挖掘单词嵌入的力量,我们将加载一些预训练的手套单词嵌入并探索它们。我使用的 50 个特征词嵌入:

array([ 0.08414142,  0.0502594 , -0.08301819,  0.02449763,  0.06950121],
      dtype=float32)

单词嵌入存储为空格分隔的文本文件,其中第一个条目是单词,其他条目是嵌入值。上面的函数只是将它读入一个大字典,其中单词是键,嵌入值是值。

单词嵌入的简单推理

最简单的推理形式是单词在单词嵌入特征空间中彼此有多相似。我们现在面临着可视化 50d 嵌入空间的挑战,这实际上是不可能的。为了可视化的目的,我们使用 PCA 将 50d 的嵌入空间减少到仅仅 2 维。在下图中,我们展示了一些从动物到水果的单词:

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

这里出现的模式是有意义的:

  • 不同的类别在嵌入空间中聚集在一起。
  • mouse介于PC stuffanimal类别之间。
  • horse介于animaltransport类别之间。

令我惊奇的是这种理解的微妙之处。一个mouse既可以是动物,也可以是 PC 外设。但是魔法并没有就此结束,兔子洞还要深得多。

更复杂的推理:关系

除了单独看单词,我们还可以看单词之间的关系。例如,单词franceparis之间的向量描述了关系capital of。让我们画出一些国家资本对的向量:

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

底部的国家和顶部的首都之间的向量大致相似。这表明单词嵌入学习了关系capital of。我真的很惊讶,仅仅通过查看输入文本中哪些单词出现得彼此接近,就出现了像capital of这样复杂的关系。

但是巫术并没有就此结束。有了这些单词嵌入,我们可以使用向量演算来执行一些真正令人惊奇的推理:

'warsaw'

这个结果真的让我大吃一惊(你现在可能已经发现我喜欢单词嵌入:)。我们可以取paris,从中减去它的国家,再加上一个新的国家(poland,就得到那个国家的首都:warsaw。这确实显示了嵌入这个词所包含的复杂的理解。

包扎

我希望到现在为止,我已经让你们相信,单词嵌入确实获得了对语料库所描述的世界的理解。这种理解可以被将这些单词嵌入作为输入的 ML 模型所利用。我认为 ML 模型理解我们生活的世界是建立更好的 ML 模型的重要组成部分。新的人工智能概念,如变形金刚,在将这种理解提升到一个新的水平上显示出更多的希望。

最后一点,真正的“理解”是什么。有人可能会说,单词嵌入并不真正代表人类意义上的理解。这只是一个隐藏在层层数学背后的非常复杂的派对把戏。话说回来,我们对世界的理解不也是大量神经元的一种自然属性吗?

你喜欢单词嵌入吗,你和我一样惊讶吗?还是你更怀疑?让我知道!

文章、代码和数据可以在 githubT10【上找到https://github.com/PaulHiemstra/wordembedding_magic

我是谁?

我叫 Paul Hiemstra,是荷兰的一名教师和数据科学家。我是科学家和软件工程师的混合体,对与数据科学相关的一切都有广泛的兴趣。你可以在 medium 上关注我,或者在 LinkedIn 上关注我。

如果你喜欢这篇文章,你可能也会喜欢我的其他一些文章:

为什么 ML 工程师努力构建值得信赖的 ML 应用?

原文:https://towardsdatascience.com/why-do-ml-engineers-struggle-to-build-trustworthy-ml-applications-b552220a308a?source=collection_archive---------30-----------------------

行业笔记

论理论与实践的差距及其弥合

亚历克斯·塞尔班和约斯特·维瑟

虽然关于人工智能的伦理的研究近年来显著增加,但从业者往往忽略了来自其 ML 组件的不公平或不公正的风险。这是斯坦福大学以人为中心的人工智能小组最近发布的 2020 年年度人工智能状态报告的见解之一。

理论与实践之间为什么会存在这种差距,如何才能弥合?

在我们自己的研究( SE4ML )中,我们从几个角度探讨了这个问题,特别是针对机器学习(ML)的主要 AI 子领域。

一方面,我们研究了 ML 工程实践及其在 ML 工程团队中的采用水平。另一方面,我们研究了政策制定者制定的可信 ML 的要求。最后,我们调查了一系列决策驱动因素对于 ML 系统的架构师的相对重要性。

正如我们在下面更详细地讨论的,我们的总体结论是 ML 工程团队缺乏具体的行动过程来设计和构建他们的系统,特别是满足可信性需求,例如安全性、健壮性和公平性

此外,我们可以得出这样的结论:从业者意识到由 ML 组件的不适当开发引起的伦理和健壮性风险,但是目前受到更传统的关注的约束,例如扩展他们的系统,或者在训练和测试之间保持性能。

什么是 ML 工程实践?

ML 工程是一门与开发工程原理有关的学科,用于设计、开发、操作和维护具有 ML 组件的软件系统。

为了促进从业者采用工程原则,我们从对从业者的采访以及对从业者博客和学术文献的广泛回顾中系统地提炼出可操作的工程实践。由此产生的实践描述在我们的网站上进行分类。

此外,我们测量并公布了这些实践的采用率及其感知的效果,以便允许评估和比较使用 ML 组件构建软件的工程师团队。

如果你是用 ML 组件构建软件系统的团队成员,你可以通过 参加我们关于 ML 工程实践的 10 分钟调查 来为我们的研究做出贡献。

值得信赖的 ML

随着政策制定者最近对解决机器学习(ML)的不当使用的兴趣,我们努力扩展我们的实践目录,以包括可信 ML 的操作实践。

特别是,我们遵循了欧盟委员会人工智能高级专家组制定的可信人工智能要求,该要求将可信人工智能定义为合法、符合道德和稳健,并定义了可信人工智能的七项关键要求

受这些需求的启发,我们搜索了工程实践的文献,这些工程实践可以被开发者直接应用来解决 ML 组件的道德和健壮的开发。总的来说,我们确定了 14 个新的实践 ,其中包括诸如偏倚测试、确保安全性或让第三方审核应用程序等主题。

对于所有新的实践,我们将相关工作总结为一个知识体系,该体系遵循与我们目录中以前的实践相同的结构,包括详细描述、意图的简明陈述、动机、适用性、相关实践和参考资料。

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

值得信赖的洗钱行为的采用率仍然很低。在我们的 ML 工程实践目录中详细定义了这些值得信赖的 ML 的 14 种实践。

我们还扩展了我们的调查来衡量开发 ML 解决方案的团队对可信度实践的采用。不幸的是,我们发现可信 ML 实践的采用率相对较低(如上图所示)。

特别是,与确保 ML 组件的安全性相关的实践采用率最低。造成这些结果的因素是多种多样的。例如,大多数针对对抗性例子的防御——一种对 ML 组件的已知威胁——已经被突破。此外,对数据中毒攻击的研究表明,只有一小部分训练数据需要修改才能诱发恶意行为。我们认为缺乏 ML 组件安全问题的“现成”解决方案是我们结果的最大贡献因素。

ML 系统的体系结构

在一项平行的研究中,我们调查了从业者如何定义具有 ML 组件的系统的软件架构,我们要求从业者为他们的系统排列最重要的决策驱动因素。

我们再次发现,与可信 ML 相关的决策驱动因素,如安全性、隐私性或健壮性,被认为不如性能或可伸缩性等更传统的驱动因素重要(如下图所示)。

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

使用 ML 组件的系统的架构决策驱动因素。与可信度相关的驱动因素往往被认为不太重要。

这些结果意味着实践者仍然致力于解决开发和操作 ML 组件的基本问题,并且倾向于忽略可信 ML 需求的重要性。

观点

我们相信,通过软件工程的眼光来解决道德和健壮性的持续努力将增强从业者的能力来优先考虑这些需求并开发值得信赖的 ML 组件。

此外,我们认为采用特定于可信度的和通用的 ML 工程实践是相互关联的。例如,持续集成的实践可以使偏差测试的实践更加有效。

因此,我们正致力于定义一系列传统的工程和信任相关的实践,从业者可以直接应用这些实践来开发更道德和更健壮的 ML 组件。

阅读我们的出版物,了解更多关于可信 ML 的实践。

Alex Serban 是 Radboud 大学的博士生,也是莱顿高级计算机科学学院的客座教授。

Joost Visser 是莱顿大学软件和数据科学教授。

SE4ML 项目 中,我们研究了软件工程原理和实践需要如何适应或补充包含 ML 组件的软件系统。

如果您是使用 ML 组件构建软件系统的团队成员,您可以通过 参加我们关于 ML 工程实践的 10 分钟调查 来为我们的研究做出贡献。

为什么组织需要数据策略?

原文:https://towardsdatascience.com/why-do-organisations-need-a-data-strategy-54eca1e4c4e8?source=collection_archive---------58-----------------------

在这个数字时代,你需要正确的数据来保持领先

本质上,这个问题的答案非常简单。如果你想获得成功,你需要定义你的愿景,你的使命,你的目标。一个组织,就像个人一样,应该知道它代表什么。它想要达到的目标。我认为在创建数据策略时有 4 个重要因素需要考虑,我想在这篇博客中强调一下。

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

你的组织前景如何?—作者图片

1。了解你的组织代表什么

数据战略只不过是一项业务战略,只是它明确强调了您将如何利用数据、信息和 it 来实现您的目标。这是从商业的角度来看,你需要什么信息才能成功?重新审视您的业务策略,突出或添加数据和信息组件,对于确定数据管理的优先级大有帮助。

2。正式化和授权数据管理功能

它已经与几乎所有的业务活动交织在一起,了解您的组织中哪些角色具有数据管理职能非常重要。支持这些员工—确保 IT 支持他们。他们需要能够提取完成工作所需的数据和信息,而不会遇到麻烦。确保减轻他们的负担,帮助他们,节省他们的时间。看到员工不得不经常改变他们的工作方式是很疯狂的,因为它没有做它应该做的事情。他们找到变通办法来使收支平衡,但这远非有效。因此,确定哪些员工收集信息,并将这一职责正式化。

3。建立沟通和反馈渠道

收集信息的员工(也称为数据管理员)通常没有与更高层管理人员直接沟通的渠道。然而,它们在数据管理流程和收集信息的质量方面发挥着至关重要的作用。我经常看到数据管理员有非常具体的反馈,可以帮助改进 IT 系统,但他们没有良好的反馈渠道来传达这些反馈。如果一棵树倒在森林里,没有人看到它——它会发出声音吗?我有客户解释说他们不想在内部网讨论。但我认为这正是关键所在。创造空间来创造共同理解和共同目标。如果内部网不是合适的地方,确保你定义了什么是。

4。确保对成功的价值和资金进行客观评估

知识就是力量。仅仅通过做他们所做的事情,有价值的和专业的信息组织收集的东西是非常不可思议的。但是如果没有数据策略,数据单一化的价值和潜力往往会被忽视。确保您有一个组织范围的流程来收集和传递数据管理改进计划。通过商业案例将它们正式化,这样就可以对它们进行客观的评估。收集和庆祝好主意!此外,确保高级管理层资助和支持变革。

为了取得成功,一个组织应该知道它代表什么。这不仅包括你想要达到的目标,还包括你达到这些目标所需要的数据。这就是组织需要数据策略的原因。没有正确的信息,很难做出正确的决定。通过清楚地定义你需要什么数据,什么责任应该被正式化就变得很清楚了。赋予员工数据管理职能,奖励他们执行这些任务,建立反馈沟通机制,并为数据管理计划提供资金。采取这些步骤将使您的数据管理组织以一种有机的方式变得成熟。那么,你的组织代表什么?

为什么我们要自动化数据收集?

原文:https://towardsdatascience.com/why-do-we-automate-data-collection-1fb0fdcf8fc2?source=collection_archive---------33-----------------------

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

图片鸣谢:作者原创插图。

我们自动收集数据,以节省时间、减少错误、增加严谨性并提高可重复性

简介和方法

A 在最近一篇关于获取联邦数据的文章中,我展示了如何使用 Python 来自动化从美国教育部(US DOE)获取数据,然后将这些数据组装成一个面板数据集的过程之后,我开始收到一些问题。

你为什么要为此大费周章地写代码呢?直接下载文件,然后用鼠标点击来组合数据,不是更快吗?

答案是,看情况。我做了一个实验。在执行这个实验的过程中,我记录了自己使用点击技术用美国能源部的数据组装一个六年数据面板的过程。我首先下载了数据文件。我还下载了美国能源部提供的支持清理和数据准备代码。然后,我使用 Stata(它提供了一个指向和点击界面,还提供了编写工作脚本的选项)。Stata 让我演示一下,并及时测量一下,在不写代码的情况下,编译这个六年的数据面板需要多长时间。

结论是,编写从获取数据的过程的脚本不会比点击选项花费更多的时间。

下面的文章介绍了这个实验的结果。在展示了结果之后,我还展示了一段视频,展示了我在延时摄影中的所有努力。这个视频在屏幕上显示了我所有的动作。我也有视频记录我在实验中用键盘和鼠标做了什么。我对视频进行了解说,以提供额外的背景。

证据和结果

整个过程从开始到结束需要 32 分 39 秒。在这 32 分钟里,我整理了一组数据,包括一个重复了六年的调查文件。来自美国能源部的数据也提供了几十个其他的调查文件。如果我只想添加一个额外的调查文件(针对这六年中的每一年),我们可以推断出大约 65 分 20 秒的时间承诺。

如果我想要这两个调查文件的 12 年数据面板,我们可以推断出超过 130 分 40 秒的时间承诺。或者,总共是 2 小时 10 分 40 秒。

但是,请记住,当您希望添加额外的调查文件或增加额外的年份时,数据汇编过程会变得更加复杂。数据类型会随着时间而变化。数据变量名会随着时间而改变。其他惯例也会随着时间而改变。

随着时间的推移,处理和管理这些变化的过程增加了使用点击工具完成这些任务所需的时间。

2 小时 20 分 40 秒是最好的情况。所需的时间可能会更多。

我猜测,上述 2 小时 20 分 40 秒的推断可能需要将近 3 或 4 个完整小时,这都取决于你可能选择汇编哪一年和哪一个调查文件。

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

这个视频提供了我在这篇文章中写的点和点击的延时视图。

上面的视频显示了我在本文中写的点和点击的时间推移视图。点击此处观看视频。如果你正在寻找我为这篇文章和视频收集的数据,请联系我。

为什么这真的很重要

真正重要的原因是,如果你编写了这个过程,你就有可能在职业生涯中节省数百或数千个小时,而不是使用点击来获取和汇集你的数据。

通过编写这个过程的脚本,您可以通过以下方式节省时间。

  1. 假设下载和汇编由大约 12 年的数据和大约 2 到 3 个调查文件组成的面板数据需要 3 到 4 个小时,那么编写解决方案的前期投资可能会少于 3 到 4 个小时。这样可以节省时间。
  2. 如果您花时间预先编写一个解决方案,而不是使用点击式方法,但是在项目后期(几天或几周后)您意识到您在数据收集和处理过程中犯了一个错误,您可能会面临再花 3 到 4 个小时来纠正您的错误的前景。使用编码的解决方案,您可能会花费不到一个小时来更新代码以纠正错误。一旦更新,代码将在瞬间运行,而不是几个小时。这防止了错误并节省了时间。
  3. 如果稍后在您的工作的传播过程中,您得到了关于您无法回答的数据准备的问题,也许是因为您不记得您指向和点击的确切位置,您将面临花费数小时复制您的工作以便回答任何问题的前景。使用编码的解决方案,您可以查看代码,它为您的答案提供了每一步的精确记录。这防止了错误,节省了时间,并增加了严谨性。
  4. 您可能会在以后决定继续或扩展您的工作。为了建立或扩展您的工作,您可能需要补充或扩充您的原始数据文件。如果您使用点击来构建原始数据文件,您可能会面临花费数小时来扩充原始数据文件的前景。有了编码的解决方案,更新原始代码可能会快得多。在这些更新之后,代码将再次在瞬间运行,而不是几个小时。这样可以防止错误,节省时间,并增加严谨性。
  5. 随着时间的推移,你或其他人可能会检查你的结果。你或其他人可能会用新数据来检验你以前的结果。如果您有一个获取和编译数据的编码解决方案,您将有机会快速收集和编译原始数据。您还将有机会使用原始代码作为模板来收集和编译新数据。使用和引用原始代码将节省时间。这样可以防止错误、节省时间、增加严谨性并提高再现性。

https://adamrossnelson.medium.com/membership

结论

为了准备这篇文章,我展示了一项实验的结果,该实验旨在测试我们可能会花费多少时间从网上获取数据,然后将这些数据汇编成适合于面板数据分析的格式。我表明,要编制一个由 2 个调查文件组成的 12 年面板,至少需要 2 小时 10 分 40 秒。

上面是一个视频链接,记录了我的实验。对于任何联系我询问的人,我将提供一份我通过这一点和点击过程收集的数据。

这篇文章回答了几个具体问题。

你为什么要为此大费周章地写代码呢?直接下载文件,然后用鼠标点击来组合数据,不是更快吗?

这些问题的答案是,下载并使用点击工具来收集数据并不一定更快。我还认为,使用编码的解决方案,不仅节省时间,而且可以防止错误,增加严谨性,并支持可再现性。

感谢阅读

感谢阅读。把你的想法和主意发给我。你可以写信只是为了说声嗨。如果你真的需要告诉我是怎么错的,我期待着尽快和你聊天。Twitter:@ adamrossnelsonLinkedIn:Adam Ross Nelson 在 Twitter 和脸书: Adam Ross Nelson 在脸书

我们到底为什么要关心量子计算机?

原文:https://towardsdatascience.com/why-do-we-care-about-quantum-computers-at-all-403dd6191c2b?source=collection_archive---------5-----------------------

量子优势的秘密证据

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

据称,量子计算机可以做经典计算机做不到的事情。我们称之为量子优势的现象。然而,即使是科技巨头也对追求它感到绝望。为什么谷歌、IBM、微软和其他公司像驴子一样,鼻子前挂着一根胡萝卜?

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

作者图片

这都是他的错!好吧,不全是。但是很多。1994 年,彼得·肖尔提出了他著名的量子算法,该算法比任何已知的经典算法都要快。它引起了学术界以外的许多兴奋,因为现代加密建立在这样一个事实上,即需要数千年才能找到一个任意大数的质因数。如果我们能在几分钟内分解出这样的数字,基于质因数的加密就像纸牌搭的房子一样倒塌了。

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

作者图片

显然,我们还没有经历过这种天启。肖尔的算法不适合在今天的实践中证明量子优势。请确保没有人可以阅读您的加密邮件。也许除了国家安全局。原因很简单,Shor 的算法需要数以百万计的纠错量子位来分解我们正在讨论的数字。最先进的量子计算机大约有 100 个量子比特。而且,这些也容易出错。

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

作者图片

所以,我们的秘密暂时还是安全的。然而,在实践中证明量子优势的竞争已经白热化。2019 年,谷歌报告他们的 53 量子位量子设备“Sycamore”在几分钟内解决了一项任务,这项任务需要今天最强大的超级计算机数千年才能完成。

量子计算机开发的主要竞争对手 IBM立即提出反对。他们认为他们的经典超级计算机可以在 2.5 天内完成同样的任务。如果你问我,在几分钟内解决一个超级计算机需要几天的任务仍然是非常令人印象深刻的。然而,这不是我们所说的量子优势。

如此超乎寻常的期待从何而来?

量子优势并不意味着微弱优势。相反,这意味着量子计算机的速度远远超过了经典计算机。但是,我们为什么会这样期望呢?换句话说,为什么量子计算机要比经典计算机快?

对量子计算机优于经典计算机的主要解释是,我们可以在指数数量的状态叠加中制备量子比特。然后,量子算法同时计算所有可能的输入。

听起来不错。然而,这看起来很有趣。而且,不幸的是,描述往往到此为止。如果量子计算机可以并发计算指数数量的状态,为什么我们没有到处看到它们?我的意思是,有了 53 个量子比特,我们可以一次性计算出 2^53=9,007,199,254,740,992 态。

好了,我们可以看到期望从何而来。但是,问题出在哪里呢?

为什么他们都在努力利用量子计算机的优势?

另一个流行的解释是基于计算复杂性理论的机制来确定量子计算机的优势。复杂性理论是对运行算法所需的计算工作的研究。让量子计算如此强大的是它所实现的算法。量子算法可能表现出与经典算法不同的复杂性特征。

例如,加法的计算量是 O(n)。这意味着两个数相加的工作量随着数的大小(位数)线性增加。乘法的计算量是 O(n)。努力随着数量大小的平方而增加。据说这些算法在多项式时间内是可解的。所以,属于 P 类问题。

但是这些问题相对简单。相比之下,解决因式分解问题(寻找一个 n 位数的质因数)的最佳经典算法是 O(e{n{1/3}}).算法这意味着努力随着位数的增加而呈指数增长。

你想尝一下吗?太好了!试着不用计算机解决下面的因式分解问题。

  • 找出数字 21 的质因数。
  • 找出数字 221 的质因数。
  • 找出数字 2231 的质因数。
  • 找出数字 22523 的质因数。

我很肯定你会很容易地解决第一个任务。也许,你马上就想出了解决办法。当你处理第二个问题时,试着数一数尝试的次数。

你可以从 11x13=143 开始。那太低了。然后,你算出 17x19=323。那太高了。那么,13x17 怎么样?这就是 221——解决方案。试了三次。

你可能需要更多的尝试来找到 2231 的因子。而且,我相信你根本找不到 22523 的那些。

让我们改变一下,考虑一个多项式任务。

  • 将 3 乘以 7。
  • 用 17 乘以 13。
  • 将 23 乘以 97。
  • 用 223 乘以 101。

同样,你会发现每个任务都比前一个难。但是你甚至可以用纸和笔解决最后一个问题。

这就是 O(e{n{1/3}}(因式分解)和 O(n)(乘法)复杂度的区别。不可小觑。虽然你的智能手机可以在几秒钟内将 800 位数字相乘,但在超级计算机上,这种数字的因式分解需要大约 2000 年。

这种复杂性生动地说明了我们对量子计算机的期望。量子霸权的竞赛仍在继续。

最近,在 2021 年,一个中国团队声称他们的量子计算机“祖冲之”在一个小时内解决了一个传统上需要八年才能解决的问题。相当惊人。

然而,我们在日常生活中并没有体验到量子优势的影响。那是因为有一个圈套!“无花果树”和“祖冲之”解决的任务是为了展示量子计算机的优越性。除此之外,这些问题没有什么实际意义。我们仍在等待有人演示用量子计算机解决相关问题。

但是为什么用量子计算机解决相关问题如此困难呢?

如果你不厌其烦地计算上面的例子,你会注意到乘法是因式分解问题的结果。因此,有趣的是,因式分解的复杂性呈指数增长。但是如果你知道解,你可以在多项式时间内验证它是正确的。然后,我们说整个问题具有非确定性多项式(NP)复杂性。

因此,虽然对候选人的评估简单明了,但复杂性源于从呈指数增长的候选人中选择正确的答案。这就是量子优势的第一个解释发挥作用的地方。请记住,量子计算机可以同时评估的状态数量随着量子位的数量呈指数增长。

通俗地说,我们把非确定性多项式复杂度中的“非确定性”去掉。而且,多项式复杂的任务很容易解决。但这种移除并不像听起来那么容易。这是一项具有挑战性的任务。

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

作者图片

有许多已知的 NP-hard 问题,如布尔可满足性问题、旅行推销员问题或最大割问题。开发一种利用潜在量子优势的算法需要对问题及其特定复杂性的来源有深刻的理解。

例如,彼得·肖尔知道傅立叶变换运算是一种寻找频率的好工具,它对解决因式分解很有用。他真正的成就是发现了量子傅立叶变换。

但是我们不能用同样的技术去解决其他 NP 难的问题。我们需要精明的领域专家,他们对问题和量子算法的特殊性有足够的理解,以发现如何解决它们。

显然,这是一个复杂的问题。

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

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

在这里免费获得前三章。

为什么 Power BI 有四个安全级别?

原文:https://towardsdatascience.com/why-do-we-have-four-levels-of-security-in-power-bi-7bc53e7d5729?source=collection_archive---------1-----------------------

当您开始使用 Power BI 时,数据安全可能不是第一个话题。但是,当你开始钻研这个话题时,它就变得非常令人困惑。让我们来了解一下 Power BI 中的安全特性。

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

照片由 Klugzy WugzyUnsplash 上拍摄

介绍

Power BI 是收集数据并呈现给受众的一个很好的工具。但是,当您开始考虑数据安全性时,您会发现 Power BI 提供了四种不同的安全功能来保护您的数据。

但是为什么我们需要四个地方来改变设置以控制数据安全呢?

事实证明,每种设置都针对不同的区域。

我们有:

  • 超级查询中的隐私级别
  • Power BI 中的行级安全性(RLS)
  • Office 365 敏感性标签
  • Power BI 工作空间安全性

这些设置中的每一项都有助于以不同的方式保护您的数据。这些主题有大量的网络资源。我将添加这些资源的链接,而不是重写或复制那里的内容。

那么,让我们来看看每一个。

超级查询中的隐私级别

在这四种机制中,这是权力查询中最难理解的机制之一。

这个特性是关于管理从一个系统到另一个系统传递数据的可能性。

当您从关系数据库加载数据时,可能会发生查询折叠。这意味着可以将 Power Query 转换翻译成 SQL 代码并传递给源数据库。

现在假设您从两个数据库中获取数据。一个数据库包含敏感数据,例如,关于雇员或客户的个人数据。

假设您希望根据包含敏感数据的数据库中的数据来过滤不包含敏感数据的数据库中的数据。您可能希望避免将敏感数据从一个数据库传递到另一个数据库。

隐私级别有助于您管理这种情况。

当您在源上设置正确的隐私级别时,您可以禁用查询折叠,并且不同的源之间不会共享敏感数据。

您可以在首次使用源时设置隐私级别,例如,当您想要合并两个源时:

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

图 1 —第一次使用时的隐私级别(图片由作者提供)

您可以随时在“数据源设置”对话框中更改隐私级别:

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

图 2 —更改隐私级别(作者提供的图片)

以下是关于此主题的更多详细信息的链接:

微软关于隐私级别的文档

alpha bold 对隐私级别的简短解释

克里斯·韦伯的完整描述(查看他的系列文章,在这篇博文中链接了详细的隐私等级)

我强烈建议查看可用的级别,并根据数据源进行设置:

  • 公共,为来自互联网的数据
  • 组织,用于内部数据源
  • 私有,用于带有敏感数据的数据

不要使用 None 来避免不必要的副作用,比如在数据源之间传递数据。

Power BI 模型中的行级安全性(RLS)

行级安全性(RLS)控制谁有权访问数据模型中的哪些数据。

Power BI 的这一特性在社区中得到很好的记录和理解。

此功能有三种形式:

  1. 带有电子邮件地址的查找表
  2. 父子关系
  3. 动态 RLS

带有查找表的最简单的形式如下例所示:

1.您的模型包含一个带有用户列表的表。该列表包括每个用户的电子邮件地址:

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

图 3 —带有电子邮件地址的查找表(图片由作者提供)

在本例中,每个用户都有一个对实体的引用,以控制对现有实体的访问。

2.您必须启用查找表来过滤由数据模型中的列 EntityId 引用的表:

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

图 4 —数据模型(作者提供的图片)

我们需要双向交叉筛选,以便 EmployeEntity 表能够对 DimEntity 表进行筛选。
此外,关系必须启用“双向应用安全过滤器”选项。该选项激活 RLS 过滤器到事实表的传输。

3.配置 RLS 角色

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

图 5 —配置 RLS 角色和表达式(图片由作者提供)

您可以单击建模功能区中的“管理角色”按钮来获得对话并设置角色。然后,您需要创建一个角色,并给它一个有意义的名称。

之后,您必须选择要在其上编写过滤条件的表,并将该条件作为 DAX 表达式输入。

我们使用 USERPRINCIPALNAME()函数将实际用户的电子邮件地址与表中的用户列表进行比较。

4.测试 RLS 角色

现在,您可以通过单击“作为角色查看”按钮来测试角色:

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

图 6 —测试 RLS 角色(图片由作者提供)

您可以选择角色以查看 RLS 角色对您的影响,或者输入另一个用户的邮件地址以查看 RLS 角色对该用户的影响:

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

图 RLS 权限的影响(图片由作者提供)

您可以通过单击报告右上角的“停止查看”按钮来停止 RLS 测试模式。

使用父子层次结构,您可以为可以查看其下属的所有数据的上级以及具有父子层次结构的类似方案设置访问权限。您可以通过使用 PATH() DAX 函数和 RLS 过滤器来实现这一点,该过滤器使用 LOOUPVALUE()或 PATHCONTAINS()函数来授予适当的访问权限。

您可以阅读文章动态行级安全性与组织层次结构权力 BI 了解更多详情。

或者你可以从“伦敦商业分析集团”YouTube 频道观看这个 YouTube 视频,它解释了同样的方法:

动态 RLS 最难理解,对性能的影响也最大。

查看这些参考资料,了解更多详细信息:

当上面显示的两种方法都不足以满足需求时,您需要动态 RLS。
例如,您的用户需要访问基于其他表的数据,例如地理区域或业务单位的分配。

但是,RLS 的设置并不止于此。

将报告发布到 Power BI 服务后,您需要配置对 Power BI RLS 角色的访问。

您可以在数据集的上下文菜单中访问此设置:

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

图 8 —设置数据集安全性(图片由作者提供)

在那里,您可以将用户添加到 RLS 角色:

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

图 9 —向 RLS 角色添加成员(作者提供的图片)

此步骤将用户分配到特定的 RLS 角色。

在用户未被分配 RLS 角色之前,用户无权访问具有 RLS 的 Power BI 报告中的数据。

你可以观看 YouTube 频道“立方体中的家伙”的视频,了解更多关于这个话题的信息:

敏感性标签

敏感标签是由 Azure 和微软 365 admins 控制的功能。

管理员可以在您的组织中启用数据保护并创建敏感性标签,以控制强制加密并限制在租户内外分发信息的能力。

此功能可能会产生额外费用,具体取决于您的 Microsoft 365 订阅级别。

管理员配置标签和策略后,您可以在 Power BI 报告上添加敏感度标签。

例如,敏感性标签可以限制 Power BI 报告中的分发能力。

敏感度标签的一个重要功能是,当您用标签标记 Power BI 报告时,相同的标签会应用到使用 Power BI 中的导出功能创建的 Office 文件。

敏感标签是一个巨大的话题。我不能在本文中更详细地讨论这个主题,因为我没有访问管理门户的权限。因此,我不能配置这个特性并彻底测试它。

我鼓励你看下面这个来自“立方体中的家伙”的关于这个话题的视频:

请访问微软关于 Power BI 中灵敏度标签的文档,了解更多信息。

工作区安全性

最后但同样重要的是,您可以在 Power BI 服务中配置对工作区的访问。

您可以在 Power BI 服务中创建工作区。默认情况下,几个月前在 MS Teams 中创建团队时,微软已经禁用了 Power BI 工作区的自动创建。

你可以在这里阅读微软关于创建工作空间和授予成员访问权限的文章:在 Power BI 中创建新的工作空间。

每个工作区有四个角色:

  • 管理员
    管理员可以在工作区做任何事情
  • 成员
    每个成员都可以在工作区中添加任何内容并更改大多数设置。成员可以添加具有成员角色的其他用户,并且可以添加贡献者和查看者。
  • Contributor
    该角色的成员可以向具有 Contributor 角色的工作区添加报告和数据集。但是,只要管理员没有将此权限委托给用户,他们就不允许更改 Power BI 应用程序。
  • 查看器
    查看器存在于你有高级能力的时候。观众可以访问任何内容,即使没有专业许可证。但是他们不能改变任何事情。

在微软文档中,您可以在 Power BI 的新工作区中的角色列表中查看完整的权限列表。

您需要将角色分配给用户、Windows 组甚至微软 365 组,包括微软团队中的团队。

有权访问工作区的每个用户都可以与不是工作区成员的其他用户共享工件。可能的权限包括数据集的构建权限和报告共享权限。

Power BI 应用程序在某种程度上处于工作空间之外,不受工作空间安全性的控制。如这里的所述,你可以配置对你的 Power 应用程序的访问,这超出了用户对你的工作空间的访问权限。

结论

Power BI 中的每个安全级别涵盖一个特定的领域。

  • 工作区安全性控制对已发布工件(如数据集和报告)的访问。
  • RLS 控制用户对报表中数据的访问。
  • 超级查询源的隐私级别保护敏感数据在数据源之间的传输。
  • 当在公司内外移动数据时,敏感级别控制着可以对机密数据做什么。

我们所有人都需要知道如何处理工作空间的安全性。这是第一层保护。

一旦我们需要控制哪个用户可以访问报告中的哪些数据,我们就需要知道如何使用 RLS。

当避免在数据源之间共享潜在的敏感数据时,Power Query 中的隐私级别通常被低估。您需要了解查询折叠的后果,以及如何使用隐私级别来保护您的数据。

管理员通常控制敏感标签,您需要知道在什么情况下可以使用哪个标签。如果您不知道标签的用途,请向您的安全官索取有关可用标签的文档。如果敏感度标签按钮被禁用,则您可以忽略此功能,因为您的组织中没有设置此功能。

我希望这篇文章有助于理解 Power BI 中可用的安全特性以及如何使用它们。我建议通过上面提到的链接来了解每个特性的更多信息。

https://medium.com/@salvatorecagliari/membership

为什么增加 k 会减少 kNN 中的方差?

原文:https://towardsdatascience.com/why-does-increasing-k-decrease-variance-in-knn-9ed6de2f5061?source=collection_archive---------4-----------------------

思想和理论

直觉、证据和经验结果

我不想写一篇关于 kNN 如何工作的一般性文章,而是想清楚地解释为什么增加 k 会减少方差。这是因为我自己也在网上苦苦寻找过令人信服的答案,也见过很多人问这个问题。尽管这些知识对于使用模型来说并不必要,但我相信,对于模型如何处理不同数据的基本理解对于解释它们的结果是至关重要的。我希望这篇文章能传达这个信息,最重要的是,激发你并鼓励你将这种思维方式应用到其他问题上!

kNN 和符号的快速复习

kNN 是一个分类算法(也可以用于回归!稍后将详细介绍),它通过查看给定点 x_testk 最近的邻居(即最接近它的点)来学习预测给定点【】x_test 是否属于 C 类。该点被分类为在最近邻集中出现最频繁的类别。下图直观地展示了这一点:

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

kNN 算法采用 n 个 d 维训练数据点(我们的 X 矩阵),每个数据点都有一个相应的 y,并带有离散输出(即类)。在上面的例子中,我们有 n=8 d=2 个训练示例。其中 4 个是红色的,另外 4 个是蓝色的。kNN 算法使用该信息根据给定的 k 来预测测试点的类别(橙色)

只是为了快速澄清,在二进制分类器的情况下(所以当我们只有 2 个类要预测时),k 必须是奇数以避免有未定义的点。如上述 k=4 的最后一个示例所示,您可能会遇到类数量相等的情况,因此无法对您的点进行分类。当然,有办法解决这个问题。一个简单的解决方案是从两个类中随机选择一个。在多类分类器中,如果要为每个测试点定义一个结果,k 只能是 1 ,如下所示:

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

这里我们有 n=11 个 d 维训练点,我们的 y 现在是 3 维的,y = { ‘绿色’,‘蓝色’,‘红色’ }。任何偶数 k 将具有与之前二进制分类情况相同的问题。除此之外,现在除了一个以外的所有奇数 k 都可能导致不确定的结果。

kNN 算法可以正式写成:

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

我们的函数 f 接收一个向量 x(用下划线表示),并将其归类为属于类别 c。这是通过在 x 的最近邻居中找到最频繁出现的类别来完成的

其中:

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

I 表示 x 的最近邻居的指数。k)找到最近邻居的集合

kNN 是一个非参数模型,这意味着没有任何“学习”发生。这意味着使用优化问题不需要找到任何参数。我们只指定一个超参数 k,它指定了我们的模型的行为方式。

如果你对这些不熟悉,我强烈建议你重新学习 kNN 知识。网上有很多很好的文章解释了算法是如何工作的。Onel Harrison 的文章相当受欢迎,也很容易获得。如果你对更深入的东西感兴趣,那么我会推荐凯文·扎克卡的文章

关于误差的快速复习:偏差、方差和贝叶斯率

任何给定的机器学习模型都会有以下 3 个错误。

**偏差:**这是我们因模型假设而产生的误差

我们得到这个错误是因为我们在模型中做了假设来简化分析,因此我们可能会错过数据中的实际潜在趋势。下图清楚地显示了这一点:

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

我们在左边看到,线性模型产生的错误最多,因为它没有捕捉到数据的非线性行为。其他两个模型不会出错,因为它们会出错。然而,我们看到最后一个模型几乎完美地捕捉到了蓝色决策边界。它有效地“记忆”了蓝色数据。这也不好,因为我们会看到它增加了方差!

通常,模型复杂性的增加会减少这种类型的错误。这是因为如果趋势更复杂,简单的模型会忽略趋势。

**方差:**是我们因不同数据集的预测不同而产生的误差

我们之所以会有这个误差,是因为我们的数据从来没有代表过真实的总体。因此,根据我们获得的训练/测试数据的类型,我们的预测会有所不同。我对这个错误的理解是:我们在多大程度上学习了训练数据中的噪音?也就是说,我们记住了多少数据?

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

我们可以看到右边的图将点误分类为红色,尽管它看起来像是蓝色的一部分。我们得到这个的原因是因为复杂的边界已经记住了蓝色数据集中的噪声。它更喜欢关注地方特色,而不是总体趋势。在左边,我们看到一条直线。正如我们之前所讨论的,这具有很高的偏差,因为它没有学习趋势,但是因为它没有记忆数据集中的“噪声”,它实际上正确地对新点进行了分类。在这种情况下,简单多项式是偏差和方差之间的最佳平衡,因为:它学习数据的一般趋势,而不记忆任何噪声!

通常,模型复杂性的增加会增加这种类型的误差,因为更复杂的模型在记忆局部特征/噪声方面更好。

**不可减少的错误率:**这是您拥有的实际数据的固有错误。如果不更改您的数据,就无法进一步减少。

这种类型的错误通常是因为我们的数据集中的固有噪声,即固有的随机性。这在下图中得到最好的展示:

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

这和上面的例子是一样的,采用我们最好的模型,简单多项式。但是,数据比以前多了,噪音也多了。即使有“理想”边界,由于数据中固有的噪声,模型也会产生误差。

如果你还是不明白,就去找个硬币。我们知道得到正面的概率是 0.5。然而,尝试投掷硬币 4 次,并重复这个实验 4 次。你会像你期望的那样总是得到两个尾巴(T)和两个头(H)吗?

我就这么做了,得到了:

  • 实验一: TTHT
  • 实验二: THHT
  • 实验三: TTHH
  • 实验四: TTHT

这并不是因为硬币有偏差,而是因为扔硬币有内在的随机性。当我们投掷硬币的次数接近无穷大时,正面的概率只收敛到 0.5。这同样适用于我们拥有的任何训练数据。

在分类中,我们有一种方法来估计任何分类问题的最小误差(类似于不可约误差)。这是贝叶斯错误率

**贝叶斯错误率:**随机结果的任何分类器的最低可能错误

它由下式给出:

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

p*是在给定数据的情况下使用贝叶斯分类器预测类的最大概率(即确定具有最高条件概率的类的概率)

这些误差的总和给出了模型的总误差率。

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

直觉:为什么增加 k 会减少模型方差,但会增加模型偏差?

为了说明这一点,让我们考虑一个分类问题,到目前为止,你们可能都已经看到了:

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

用圆形分布正确分类红色和蓝色。这里的橙色线表示两个类别之间的理想分离边界

让我们考虑同样的问题,但是有噪声。让我们看看,如果我们尝试对 k=1 的新点进行分类,会发生什么。

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

我们可以看到,k=1 的点错分了大部分的点。这是因为碰巧这些点的最近邻点没有反映数据的趋势,即圆圈,而是简单的噪声样本。k=1 算法有效地“记忆”了数据中的噪声,因此它不能很好地概括。这意味着它有很高的方差。然而,偏差非常低,因为它完美地捕捉了数据中存在的所有波动。

现在让我们考虑一个例子,k=3,k=9

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

我们可以看到,对于 k=3,所有的决策都非常合理。偏差和方差都很低。对于 k=9,虽然我们仍然得到正确的答案,但是一些用于对我们的点进行分类的最近邻开始从两种分布中获取信息。在这一点上,我们的方差很低,但偏差很大,因为我们的模型没有了解到有两个不同的圆圈代表不同的类别。

如果我们在 k 接近数据集大小时取极限,我们会得到一个模型,这个模型只是预测在数据集中出现频率更高的类(实际上是贝叶斯误差)。这是具有最高偏差的模型,但是方差是 0(因为我们的误差对于测试数据是不变的)。高偏差,因为它未能捕获关于模型的任何局部信息,但 0 方差,因为它预测任何新数据点的完全相同的事情。

kNN 作为回归模型的数学证明

如果我们将 kNN 视为一个回归问题,我们实际上可以从数学上表明,增加 k 会导致我们模型的方差减少。这样,我们的预测器就变成了一个决定连续变量的函数:

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

实际上,我们为 x_test 预测的值是其所有最近邻居的平均值

与任何模型一样,我们对最小化预期误差 E 感兴趣,其中:

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

这里我们使用均方差作为我们的损失函数,因为它是一个回归问题

我们可以将其扩展,得到偏差-方差分解,如下所示:

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

平方损失(MSE)的偏差方差分解。这个结果来自维基百科页面。如果证明不清楚,请在这里留下评论,我会考虑写关于分解证明的文章。

偏差和方差由下式给出:

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

偏置方程,其中 f_t 是定义 y 的确定性函数,因此 y = f _ t+ε(ε是均值为 0 的随机误差)。期望 E 是 x 的所有可能实现,记住偏差是我们因为模型的假设而产生的误差。这个等式应该是:考虑到我们的预测值在 x 的所有可能值上看起来像什么(因此是期望值),与函数的真实形式相比,我们产生的误差是什么。

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

方差方程。根据我们的定义,方差是由于不同数据集之间的差异而产生的误差。第一个期望中的术语是:在所有可能的 x 值上,与我们的预测值相比,我们对函数 f 的单个实现产生的误差是多少。然后,我们考虑在所有可能的 f 值上的这个误差(因此是期望)。

最后一项是误差的固定标准差:

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

这是我们不可减少的错误。由于误差的变化,我们的模型会产生多大的变化?值得提醒您的是,为了实现这一点,我们假设误差的平均值为 0。这意味着我们的误差不应该是输入 x 的函数,它们应该是随机的。

如果我们现在考虑我们的 kNN 回归模型,我们实际上可以确定偏差和方差的表达式。我们将分析限制在一个给定点 x_test

对于偏差,我们有:

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

对于方差,我们有:

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

总的来说,我们得到我们的预期损失如下:

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

我们可以非常清楚地看到,随着 k 的增加,当它接近无穷大(即数据集的大小)时,模型的方差趋于 0。不可约误差保持不变。虽然直觉上我们预期偏差会增加,但要用数学方法显示这一点并不容易。然而,取 k 的极限到我们覆盖整个数据集的程度意味着我们的 kNN 回归仅仅给出平均值的恒定值(具体地,除了我们正在查看的点之外的所有点的平均值)。因此,我们只是预测一个常数值,因此我们没有捕捉到有关数据基础结构的内在信息,因此我们的偏差会很大。

实证结果:k 如何影响泛化误差?

我做了一些实验,看看 k 的选择如何影响泛化误差。这是我得到的情节:

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

这是在 m=500 和 test_size 为 20%的 circle 数据集上进行的实验。

如果我们看上面的图,k 值低于 150,我们得到经典的总误差曲线。对于小 k 值,方差占主导地位,这就是为什么我们得到高误差率。对于较大的 k 值,我们的偏差是高误差率的主要原因。

我们可以看到,给出最小误差的 k 的最佳值约为 27(注意,我们可以使用交叉验证找到更好的近似值!).

该图中真正有趣的是,当 k>150 至 370 左右时,误差几乎保持稳定。虽然看起来后台可能发生了一些可疑的事情,但这个结果实际上是有意义的!由于我们有一个二进制分类问题,并且每个类别的样本相等,我们预计对于非常高的 k 值,我们将有效地在两个类别之间随机猜测,因此错误率为 0.5!

奇怪的是,在 370 左右,我们的错误率增加了。对此也有一个解释,由 Karolis 提供。

这是因为 train_test_split() 函数随机分割数据,结果测试集和训练集中的类平衡都不相等。当我们的分类器处于非常高的 k 值时,它将学习预测在训练集中更频繁出现的类别。在我们的测试集中,我们将有一个相反方向的类不平衡,即在训练集中不太频繁的类将是在我们的测试集中最频繁的类。这种偏差导致误差增大,变得比随机猜测还要糟糕!

为了说明这一点,可以通过模拟来确定不平衡测试集的平均频率:

平均频率为 0.540,如图所示!

为了验证这个理论,我用分层的 train_test_split() (也就是确保拆分后的类是平衡的)重复了这个实验,瞧!结果如我们所料!

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

实证结果:k 如何影响决策边界?

为了感受模型“记忆”噪声(即高方差)的意义,我绘制了不同 k 值下的 kNN 模型的等值线图。这些图清楚地显示了决策边界。

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

我们可以看到,随着我们从低 k 到高 k,决策边界变得更加平滑。这意味着,我们并没有过多关注局部特征(即噪声),而是试图捕捉一些潜在的趋势。当然,我们看到,当我们对 k 的值走得太远时,我们只是得到一个几乎 100%一致的边界。在这种情况下,我们完全忽略了潜在的趋势和任何局部特征,而只关注全局特征,即训练数据集中类的频率

我们可以将上述模型与实际的训练数据集进行比较。

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

我们看到 k=25 的模型最好地解释了数据。

实证结果:m 如何影响 k 的最优值?

我做了一些实验来确定改变数据集 m 的大小对 k 的最优值的影响。

结果有些耐人寻味,所以我想与你分享:

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

我们可以看到,对于 make_circles() 数据集,m 的增加几乎是线性的。由于数据的参数(噪声= 0.3,因子= 0.5)随着样本数量的增加会有很大程度的重叠,因此 m 的增加导致 k 的增加是有道理的。

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

因此,对于较小的样本,我们需要依靠局部特征进行精确预测,因此 k 值较小,但对于较大的样本,我们需要更平滑的决策边界,以确保我们捕捉到趋势,而不是重叠产生的噪声。

至于为什么这个关系是线性的,我只能猜测是因为我们在线性增加数据。但是,我对这种推理不够自信。

关键要点

  • kNN 模型是一个具有超参数 k 的非参数模型
  • 其性能基于总误差,即偏差方差不可约误差之和
  • 小值的 k 记忆噪声,从而导致非平滑判定边界。这增加了总误差,其中主要是高方差
  • k 的大值忽略了数据(局部特征)中的潜在 趋势,从而导致平滑决策边界。这增加了总误差,其中主要是高偏置
  • 将 kNN 视为一个回归问题,可以让您以数学方式显示上述结果
  • k 的最佳值是方差和偏差之间的平衡值。这可以通过交叉验证找到。如果不确定从哪个 k 值开始分析数据, k = sqrt(m)k = log(m) 是一个好的开始

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

显示任何 ML 问题中不同类型错误的图表,总结上述信息

再现性

如果你想重现结果,请查看 GitHub 的页面。如果您对它的任何方面有任何问题,请联系我!

如果你真的喜欢我的工作并愿意支持我,请考虑使用我的推荐链接来获得一个中等订阅。

除非另有说明,所有图片均由作者创作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值