TowardsDataScience 博客中文翻译 2021(三百三十五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

艾伦·图灵如何证明计算机不能解决一切

原文:https://towardsdatascience.com/how-alan-turing-proved-computers-cannot-solve-everything-a9f83a5b776f?source=collection_archive---------18-----------------------

解释艾伦·图灵如何用 Python 代码证明计算机不是万能的。

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

(src =https://pixabay.com/images/id-2591910/

介绍

电脑已经成为当今社会的支柱,以至于我们越来越难以想象没有电脑的生活。随着机器学习的兴起,计算机和软件解决问题的天然能力已经越来越无与伦比。随着本世纪技术的奇妙崛起,似乎没有现代技术解决不了的问题,但事实真的是这样吗?

如果你花时间研究和学习现代计算机和现代计算机科学的历史,你很可能听说过艾伦·图灵。艾伦·图灵是一位计算机天才,他走在了时代的前面,负责创造现代计算机的机械版本。不仅那项科学成就归功于他,而且许多更了不起的科学成就也归功于他。

艾伦·图灵完成了一项了不起的科学成就,其中一个突出的例子是证明计算机不能解决人类必须提供给它的每一个问题。

entsheidung 问题

1928 年,一位名叫戴维·希尔伯特的数学家提出了 Entscheidungsproblem 假说。这个假设的名字在英语中从德语翻译成决策问题,所以从现在开始我将把这个公式称为决策问题。此外,如果你对这个疯狂的德语单词的发音感到好奇,可以参考这个视频:

他提出的问题是

“有没有一种算法,它将采用一种形式语言,以及该语言中的一个逻辑语句,并根据该语句的真值输出‘真’或‘假’?”
来源:[维基百科](https://simple.wikipedia.org/wiki/Entscheidungsproblem#:~:text=The%20Entscheidungsproblem%20(German%2C%20%22decision,truth%20value%20of%20the%20statement%3F)

对此的假设版本是:

如果有一个算法将采用一种形式语言,以及该语言中的一个逻辑语句,那么它应该输出‘真’或‘假’,这取决于该语句的真值。

这意味着,任何计算算法,只要有一组特定的符号,并且是逻辑的,那么它总是会输出真或假。换句话说,只要一个算法遵循内聚逻辑,它总是会有一个输出,从而解决任何放入其中的问题。我们现在知道形式语言是编程语言,算法是现代计算机编程中的函数,所以将这些计算描述的遗留版本(更像是前遗留版本)放入一个更现代的描述中无疑是有帮助的。考虑到这一点,我将最后一次重新阐述这个问题,以便使它现代化,便于普通程序员阅读。

如果有一个函数有逻辑语法,那么它应该能够根据语句的真值输出真或假。

理论上,从许多方面来看,这似乎是真的。如果我们要用我们最喜欢的编程语言编写一个函数,它有精确的逻辑和正确的语法,那么它能够解决我们扔给它的任何问题——只要它打算这样做。考虑你写的每一个函数来做决定,你可以想象它服从这个假设的界限。然而,艾伦·图灵对这个公式有不同的想法,要理解他是如何证明它是错误的,我们需要理解他的逻辑悖论。

艾伦·图灵的逻辑悖论

1936 年,艾伦·图灵证明了这个问题不可能有答案。换句话说,他的同行审查显示,这个公式是无效的。现在,为了将他如何着手做这件事浓缩成一篇不需要花六天时间阅读或给你一个计算机科学学位的文章,我将极大地简化这些想法——并提供 Python 中的现代高级代码作为例子。还要注意的是,这里的大部分代码都是理论性的,只是为了展示艾伦·图灵的逻辑悖论和现代编程语言中缺乏解决方案的想法。我还将这段代码复制到一个笔记本中,这样任何想要查看它的人都可以轻松地查看它。你可以在这里看到这个笔记本:

笔记本

考虑以下递归函数:

def our_func(x):
    x += 1
    our_func(x)

这个函数将永远循环下去,永远不会停止,直到中断或超时。使用这个例子,我们可以想象一个独立的函数,它告诉我们这个函数是否会永远循环下去。当然,作为一名计算机程序员,这本身对我来说是不可行的。即使在汇编程序的层次上,我们也可以认为,为了让我们的计算机发现它是否会永远循环下去,需要运行一个程序段。然而,当然有方法可以编写这样一个函数,虽然这个 Pythonic 示例不一定能够判断某个东西是否无限循环,但它可以告诉您循环是否在 100 秒内完成:

import threading
import time
def test_infinite(func):
    t = threading.Thread(target = func, args = ([1]))
    t.start()
    time.sleep(100)
    infinite = None
    if t.is_alive():
        print("huh")
        t.stop()
        infinite = True
    else:
        infinite = False
    return(infinite)

现在考虑另一个不是无穷大的函数:

def second_func(x):
    r = 0
    for z in range(-50, x):
        r += z

我们将测试这个理论代码的无限循环,如下所示:

sf = test_infinite(second_func)
ff = test_infinite(our_func)

然而,Python 解释器足够聪明,不会让你做如此愚蠢的事情,所以如果你试图这样做,它将返回一个 RecursionError 抛出。

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

(图片由作者提供)

现在我们需要考虑一个新的函数,我们简单地称之为对立函数。它接受一个布尔运算,并把它变成它自身的对立面。

def invtest_infinite(infinite):
    return(not infinite)

然后考虑如果我们被传递一组指令会发生什么,这些指令的返回将通过这两个函数。一个看起来有点像这样的方法:

def inftests(func):
    infinite = test_infinite(func)
    infinite = invtest_infinite(infinite)

对于创建 paradox 的最后一步,我们需要将函数包装在它自己的内部。这在 Python 示例中没有多大意义,因为我们只是在需要函数的地方简单地递归传递一个 bool 类型,但是考虑一下如果我们可以在 Python 中这样做会发生什么。如果我们这样做,我们将会看到计算机不能做出决定,因为调用它自己的函数颠倒了自己,从而使我们的函数处于一个非真非假的无限悖论中。

结论

在我看来,这一历史性发现背后的计算机科学非常迷人,艾伦·图灵是提出这一发现的疯狂天才。尽管这是艾伦·图灵解释的简化版本,但它确实表达了决策问题没有答案的观点。这个故事真正吸引我的是,在第一台计算机被创造出来的十年前,它就已经被一台理论计算机证明了。艾伦·图灵实际上发明了现代计算机的理论机械版本来反驳它!这台机器被称为图灵机,这是计算机发明的重要一步,所有需要添加的就是微电子!非常感谢您的阅读,我希望这一点计算机历史是一个有趣的阅读!

所有机器学习如何变成强化学习

原文:https://towardsdatascience.com/how-all-machine-learning-becomes-reinforcement-learning-6f085f4389f?source=collection_archive---------13-----------------------

思想和理论

我解释了为什么迭代训练任何模型的人应该学习强化学习的一些核心问题。

思维练习

考虑这些对其模型有 跨时间 影响的 ML 问题的例子。强化学习的这种依赖于时间的功能是大多数“核心片段”(下)将出现的地方。

考虑一个试图减少付费在线会员流失的系统。这样的公司可以训练一个模型来减少当前一批最易受攻击的用户(例如,那些在算法的重播缓冲区中不经常点击的用户——稍后更多),但这可能会在下一个模型被重新训练之前以非预期用户的流失为代价。

更准确地说,这个动作可以采用新参数的形式,将电子邮件主题中的文本调整为电子邮件列表中的个人。这种政策(决定行动的模型)可以改变每个注册电子邮件地址的文本,针对各种电子邮件偏好,例如喜欢表情符号的人(许多人都喜欢)。由于任何优化都没有免费的午餐,添加表情符号不会是每个用户的最爱,这可以通过工程师在部署这种新模式后看到的奖励来表示。这种调谐可以自动完成。不过,这种变化可能会让那些目前最忠诚的客户产生意想不到的行为——可以说是一种流失的 正反馈循环

另一个例子是建议。我是一个经常看 YouTube 的人,随着时间的推移,我已经看到我的兴趣在更广泛的网络上,在现实世界中,特别是 YouTube 上发生了变化。YouTube 算法已经表现出了类似强化的行为(除了关于他们用于调整内容选择的 RL 算法有多普遍的争论之外)。简单的行为是,我点击了一个我已经几个月或几年没有浏览过的话题,第二天我关于这个话题的订阅量就会大幅增长。我怀疑谷歌的模型要么有一个权重很大的历史术语,要么它允许其推荐引擎的参数快速变化。这种反馈与我在 YouTube 之外的兴趣演变无关,所以这是应该更深入考虑的事情。你想让算法定义你是谁吗?

这里的推荐和流失算法显示了反馈的清晰概念,这是一种效果,其中你未来的状态和动态随着时间的推移而演变,并且取决于你当前(和最近)的状态和行动。强化学习 (RL)是围绕未知世界制定的机器学习领域,在未知世界中,我们关于如何改进任务的唯一信号是从世界反馈给我们的嘈杂信息。这种表示通常是通过奖励函数实现的,但也可以推广到许多信号,这些信号会传播回我们经常使用的应用程序,以告知它们如何调整 我们的行为。

我并不是想说知道 RL 会很容易地减轻应用程序内外用户行为的任何明显变化。我是说,通过研究 RL,可能更容易诊断面向人的 ML 工具可能的长期/时变影响。监督学习被框定为一个实例的工具,因此随着现实世界的不断变化,所有模型都过时了——问题是过时了多少?

更广泛的背景

大型科技公司正在反复部署大型模型,从全球收集新数据,再重新训练他们的解决方案。在工程师的理想中,一旦环境动作发生(通常通过用户),所述模型将根据新数据进行改进。这听起来很像强化学习 (RL),其中将有一个模型将寻求改进的设定指标。如果工程师不让模型完全控制它的动作(稍后将详细介绍),这听起来可能不像强化学习,但 RL 的反馈环路核心就在那里,它提供的信号将影响系统。这些信号可以在较长的时间范围内复合并偏置系统。

RL 的理想概念在许多地方都有所欠缺。考虑这种常见于概念 RL 教学的框架(如加州大学伯克利分校的人工智能简介):代理与世界交互,收集更多数据,并在其下一次推出之前更新其策略。这对在电脑上玩玩具物理问题的年轻研究人员有效,但对构成大部分互联网流量的系统无效。这些站点有不同的范例:一个部署的模型为大量用户提供一个任务,新的数据被收集,几个小时到几天到几个星期后,一个新的模型被训练和部署。这个循环中的模型训练步骤可能需要难以置信的大量计算,因为数据集上的计算很容易超过一百万个样本。

可以在应用环境中使用 RL 的系统的一个很好的例子是任何形式的推荐系统。想象一下,某种新闻提要决定了它应该为您提供哪些内容。这很容易采取从当前用户状态(时间、位置、最近的点击)转换为动作(内容)的策略的形式。

深度学习模型也在网上完成许多其他任务,包括广告投放、文本分析、图像识别等。这些严重影响用户体验的模型中的任何一个都将改变它们和它们的对等模型在未来被训练的结果数据集。例如,通过部署更有用的文本分析模型,手机的搜索引擎可能会变得更好,从而减少阅读结果所花的时间和加载的定向广告。所有这些模型都在不断地反馈关于累积系统优先考虑什么的信号:这些 信号决定了模型的下一次迭代将稍微优先考虑什么

缩小来看,这完全是一个定义松散的多主体强化学习系统的大混乱。许多政策已经部署,但离独立还差得很远。

RL 结构的核心部分

即使 RL 的框架发生了变化,它的一些结构仍然存在。这些关键部分意味着 RL 研究的某些核心概念和关注点将出现在这些应用循环中。它们在多大程度上出现有待讨论和发现。鉴于 RL 已经被用来解决一些世界上最难的游戏,并且容易出现意想不到的行为,我们应该让研究过它的人监控这些系统。大规模的 RL 可能会产生巨大的影响,因此其潜在的风险也相应增加。

需要了解的 RL 的一些核心方面包括:

  • 政策脆弱性(遗忘和不稳定性):众所周知,RL 算法的多次尝试的性能非常不稳定——在一次迭代中解决了任务的代理可能在下一次迭代中做不出任何智能的事情,现在只有几个数据点和梯度步骤不同。
  • 政策利用:由于奖励函数定义的狭窄性,RL 经常表现出无意识的行为
  • 反馈奖励信号:RL 是围绕反馈到学习系统中的代理或系统的交互而构思的。它被设计为试错学习。
  • 神秘性:众所周知,RL 很难调试,并且容易出现数值问题。这给公司带来了风险(但在我描述的伪 RL 系统中,这种情况可能不太严重)。

这些特征中的大多数在我的公式中合并,因为 RL 随时间而动作,而我们使用的许多其他 ML 系统是在静态场景中训练和使用的。

很多人把 RL 看作是一种扔给玩具模拟问题的黑盒算法。这是研究通常看起来的样子,但是那里学到的经验教训适用于任何迭代学习任务,其中新数据以迭代的方式反馈。在这种情况下,applied ML 变成了广义的 RL,在这里我们训练一个新的模型,而没有完全理解它在测试时的表现。这些测试为我们提供了在下一次迭代中使用的有价值的新数据。

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

照片由Tine ivaniUnsplash 上拍摄

走出教室

当 RL 脱离一个完全概念上受控的环境时,两个关键的假设就失效了。本节针对的是这个想法: 如果说 大部分应用的 ML 系统呈现出 RL、 的特征,那么 最大的差异可能在哪里?

通常研究的 RL 环路和这些公司发生的事情的第一个区别:时标移位。由于大多数模型部署基础设施千差万别(甚至没有考虑大多数技术问题在范围、重要性和解决方案方面的差异),这些应用程序离强化学习的共同概念有多远也有不同的程度。规模较小的公司可能数据相对较少,所以可以每小时训练一次。许多公司可能希望每小时培训一次,但是他们可能缺少工具来完成。获取数据集、从中生成和建模,并将其发送给面向用户的堆栈非常复杂。

影响时标转换的两个核心组件是 1)数据量和 2)模型基础设施。这两者可以以相同的方式影响新数据的反馈:更长的模型更新延迟(假设所有相同的数据都被使用)给当前模型更多的时间来影响下一个模型的整体训练集。时间尺度甚至可以进一步解释为模型选择新动作的速率。

接下来,实验室中的 RL 研究与现实世界的一个核心区别:分布转移。在研究中,分布转移至多扮演一个次要角色。大多数任务都假设独立同分布(iid)数据,但在现实世界中,这种分布会随着时间的推移而变化。新的数据总是会出现,而手头任务的最佳解决方案很容易随着时间的推移而改变。

RL 系统的核心部分是重放缓冲器的概念,这是一种先进先出(FIFO)缓冲器,用于存储世界上最近的转换。TL;重放缓冲区上的 DR 是用于存储最近转换的数据结构— RL 代理使用重放缓冲区中的样本进行计算。关于重放缓冲器的更多信息,这篇论文是关于它们如何影响 RL 的现代观点。

使用正确大小的重放缓冲区对于稳定的行为至关重要(太小的缓冲区会很快忘记需要的数据,而太大的缓冲区会优先处理不再相关的数据)。我怀疑这些系统中的模型,特别是考虑到它们在监督学习中的强大根基,不具有定义 RL 基线的相同的“从零开始学习”性质,例如机器人中的那些。这就引出了一个更加开放的问题,即系统如何处理数据移位。

这里的核心思想是现实世界是会变的。它不是一个模拟器。可能会有类似于刷新模拟中的重放缓冲区的效果,但是来自模拟的数据实际上总是来自同一个系统,这对于解决给定的任务来说并不是最优的。拥有不再代表你的世界真实情况的数据可能会以一种更加有害的方式破坏学习系统。

RL 的概念化和它在实践中的使用之间的差异是很难确定的,那就是动作空间的尺度。内容推荐或互动模型比机器人任务要复杂得多。如果一个人在深度学习中保持一定的信念基线,那么 RL 的应用应该跨领域过渡而不失一般性。我听说的经验法则是,使用 RL,某个模型或策略的数据需要与输入或操作的数量平方(以及其他因素)成比例…因此这些应用系统将需要它们生成的所有大数据。

工业 ML 环路

在不同的技术领域,公司实际部署的内容和方式有很大不同。例如,像谷歌和脸书这样的大玩家已经建立了他们自己的模型训练、部署和监控栈。与此同时,有很多很多初创公司试图构建工具来改进模型部署堆栈的各个部分,如模型部署、更新、效率等。(这不是我最了解的领域)。

这些大型工具不能在黑盒中运行。它们极大地影响着我们的个人和社会行为。这种影响会导致公司所依据的基础数据发生变化。公司等待更新模型的时间长短会使模型行为中的某个错误在用于下一个训练循环的数据中变得更加普遍强化

同样重要的是要记住,谷歌和脸书的经营规模远远超出了人们的心理承受能力。人类不可能筛选、注释或理解他们收到的所有数据。毫无疑问,每秒钟都有许多意想不到的行为发生。大型数据集还需要更多的时间来训练策略,因此更新每个样本实际上是不可能的。即使有这样的规模,也有巨大的推动力推动快速发展,因为用户的注意力在数字服务中高度竞争。

我听说过两个在模型训练和部署方面的工业失误的例子,当然还有更多的例子(注意:这些例子的准确性可能并不完美,在与应用 ML 领域的其他人交谈后,我找不到清楚描述它们的博客帖子)。这些不是来自 RL 部署,但是考虑这些问题如何转化为 RL 范例是很酷的:

  1. 早期 A/B 测试 止于 脸书(也可参见 Stich Fix 的这篇帖子——他们有一个很棒的数据博客和可能的团队):A/B 测试用于确定哪个特性变化是最好的。以 ML 为例,一个公司可以使用两种模型,并确定哪一种是最好的。这些测试运行一段固定的时间,以帮助避免数字困难(如 P 值),但脸书的工程文化有一个习惯,当它们看起来很明显时,就提前停止测试。这加强了工程师的偏见,更重要的是,对这篇文章来说,他们认为模型“更好”根据这一过程持续的时间以及他们将结果反馈到新模型的时间尺度,不同的 RL 属性可能会出现。
  2. NextDoor 丢失模型训练集:听说有一段时间 NextDoor 的工程师不知道哪个模型产生了哪些数据。实际上,这意味着他们没有足够详细地存储模型训练属性,这可能与一堆野生潜在框架有关。例如,这可能类似于没有策略检查点的 RL(保存每个训练步骤的参数,以及导致它的重放缓冲)。任何在 RL 工作的人都知道,对于任何具有挑战性的问题来说,这无异于自杀。
  3. 这就像重新训练一个策略并丢弃所有过去的策略,或者保留一个可能被新策略损坏的训练数据集(不容易知道何时损坏)。从希望跟踪峰值行为的 RL 工程师的角度来看,这两种选择都是可怕的,因此他们可以返回并从那里重新分叉策略。如果不这样做,就会存在巨大的偏差和模型利用的可能性,因为在工程师注意到之前,无意的行为可能会在底层数据集中得到加强。

问题是,NextDoor 不可能是唯一一个犯这些错误的人。许多工程师偷工减料,了解您系统中的模式将使您更容易回到期望的操作。

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

来源,作者。

我们讨论的 RL 范例:

  1. Coursework RL : 一个智能体与世界互动,收集更多的数据,并在其下一次推出之前更新其策略。
  2. 将 ML 归约应用于 RL : 一个部署的模型为成吨的用户服务一个任务,新的数据被收集,几小时到几天到几周之后一个新的模型被训练和部署

让我知道,如果你看到了任何可能看起来像这样的东西,它可能会有所不足,或任何东西。这是我一直试图解决的一个想法,但它似乎不可避免地会在某种程度上发挥出来。如果没有,那么我们将不得不把 RL 做得非常好,让每个人都直接使用和认可它。

在这种情况下,让 RL 工作的重要一点是批量 RL 领域的不断发展,批量 RL 设计为以我所讨论的应用程序的较慢更新频率方式运行。它获取最新的所有任务数据,并提取新策略——这种策略提取可以在部署工程师需要的任何时候进行。

这个原本出现在我的自由子栈 民主化自动化 。请查看或关注我的 推特

如何以及为什么共享科学代码

原文:https://towardsdatascience.com/how-and-why-to-share-scientific-code-64fbd385a67?source=collection_archive---------16-----------------------

无需成为软件工程师即可进行可重复研究的简单指南

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

来自 Unsplash

当你做实验时,无论是在实验室还是在电脑上,你都会产生需要分析的数据。如果您的分析涉及到新的方法、算法或模拟,您可能已经编写了一些代码。科学代码被设计成可以快速编写,易于作者使用,并且在项目完成后再也不会被查看(也许设计的是一个很强的词)。

对于许多科学家来说,打包他们的代码需要大量的工作,而且没有报酬。我想分享一些明显的好处和一些不太明显的好处。之后,我会给出一些技巧,告诉你如何尽可能轻松地分享你的代码,而不至于走弯路成为一名软件工程师。如果你想要一个成品看起来像什么的简单例子,请查看我关于 Python 拓扑材料或 P 正面和未标记材料机器学习的回复。

分享科学代码的好处

  1. 鼓励再现性一旦一种方法有多个步骤(单击红色大按钮),或者数据分析管道比“我们将所有数字除以这个数字”更复杂,其他科学家就不太可能真正探索你做了什么。如果你开发了一套指令来处理或生成你的数据,你就写了一个程序,不管你是否用代码写下来。分享这个程序比只在你的论文中写下你做了什么要自然得多。
  2. 期刊越来越多地要求将代码共享作为审核过程的一部分。已经完成的工作打开了许多可能性,像《自然》杂志和《自然》系列杂志,在你的论文准备好提交后不需要额外的工作。
  3. 你会学到很多东西。如果你遵循我下面的快速简单的指南,你将学习基本的技能(版本控制),有机会学习许多其他有用的东西(包管理,测试),并开发一些在你的研究中其他地方可能不会出现的思维模式(以用户为中心的设计,敏捷开发)。一旦你开始组织你的代码,你甚至会发现你的代码中有一些地方需要修正或改进。
  4. 延长你研究的半衰期。你努力完成了一个项目,这个项目将作为一个静态的 PDF 文档在某个地方流芳百世。您的代码允许其他人以一种全新的方式发现您的工作并与之交互。其他科学家不仅可以利用你论文中的观点和结论,他们还可以直接使用你建立的工具和方法。
  5. 更有就业能力。教育机构不再是博士的最大雇主。虽然个人代码基础在你寻找教师职位时可能并不重要,但如果你去了私营部门甚至国家实验室,你的雇主和同事会欣赏你的技能和经验。你可以向数据科学家和软件工程师展示和讲述你的研究,他们不是你所在科学领域的专家。

如何分享代码而不成为软件工程师

好了,现在你已经决定在你的下一个项目中,分享你编写的脚本来处理和绘制你的数据。你如何在不中断研究的情况下学习一套完全不相关的技能呢?我们的目标是以最小的努力和最大的回报分享我们的代码,而不是开发下一个占主导地位的数据分析或机器学习框架。下面是尽可能轻松地做到这一点的步骤——没有命令行,没有教科书,只有你的网络浏览器。

0.第 0 步是寻求帮助!做好你的功课,阅读这个指南,然后找一个人来回答你的问题。在你的团队或部门中找一个以前做过这件事的人。如果不能,在 GitHub 上找一个你喜欢的项目,或者更好的,你在研究中用过的东西,联系开发者。请那个人对您的计划给出反馈,为您指出进一步的资源,并检查您的代码。

1.从 GitHub 开始。按照本指南学习版本控制的基础知识。我保证,如果你能用 Python 或者 Matlab 分析数据,你就能学会使用 GitHub。他们的工程团队做了大量的工作,使得开发和共享您的项目变得非常容易。你甚至不需要离开网络浏览器。如果你想要更多的控制,我推荐 GitHub 桌面

2.不要多此一举。有科学 Python 项目可复制研究撰写出版物,甚至制作web app分享你的科学代码的模板。找到一个你喜欢的模板,你就有 80%的机会完成一个漂亮简单的项目。

3.写一个设计文档。不一定要花俏。从高层次描述你的项目——用户应该能用它做什么?弄清楚它将包括什么——一些打算直接运行的脚本、函数、类(如果你懂面向对象编程的话)。

4.使用正确的工具。为了让你的代码 1000%可读,你可以做两个非常简单的事情,一个是使用像 flake8 这样的“linter”来确保你的代码遵循公认的“风格”惯例,另一个是使用像 yapfPython black 这样的格式化程序,它会自动格式化你的代码。

5.组装您的项目。这可能很简单,只需将您的脚本复制到 GitHub 存储库中,然后编辑自述文件来描述如何使用它们。遵循 GoogleNumpy 风格指南来记录你的代码。如果你想让别人更容易使用你的代码,写一个简短的 Jupyter 笔记本Deepnote 并附上一些例子。

5+.想加多少“软件工程糖”就加多少。如果你按照这个模板,你的项目已经组织得相当好了,附带的指南将带你完成你能做的许多事情,使你的项目更像“软件”,而不像“我尽快写的一堆乱七八糟的脚本”你可以自动生成一个记录你的项目的网站,添加持续集成在你修改代码的任何时候测试你的代码,并且发布你的项目的官方版本以方便其他人安装。

不要让完美成为好的敌人

不要让步骤 5+阻止你分享你的代码。如果你共享文档化的代码,你已经为任何试图理解你所做的事情的人提供了巨大的价值。即使你觉得你的分析或者你的方法真的很简单,也值得分享。许多最好的项目都是简单的方法,易于使用和理解。把自己放在一个从未在你的领域工作过的学生的位置上,或者一个从未写过 Python 脚本的科学家的位置上。你花了几个月(或者几年!)在这个项目中,虽然其中一部分可能是“我在 Mathematica 中设置并解决了它”或“我用 Matlab 制作了这些图”,但这可能是那些没有时间弄清楚并重新实现你所做的事情的苦恼的本科生或研究生研究员的路的尽头。

最后,如果你在执行上面的第 0 步时遇到困难,因为你是一个人在做,联系我。我很乐意提供额外的帮助或咨询。

取得联系

如果你喜欢这篇文章或者有任何问题,请随时通过电子邮件联系我,或者通过 LinkedInTwitter 联系我。

你可以在我的网站上找到更多关于我的项目和出版物的信息,或者阅读更多关于我的 T2 信息。

这就是世界前五大公司对人工智能的定义。

原文:https://towardsdatascience.com/how-are-the-top-5-companies-in-the-world-redefining-a-i-c009f7e73f5a?source=collection_archive---------38-----------------------

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

LukasUnsplash 拍摄的照片

概述世界上最具影响力的公司如何在其业务中重新定义(和应用)人工智能

《T4 大英百科全书》将人工智能定义为“数字计算机或计算机控制的机器人执行通常与智能生物相关的任务的能力”智慧生物是那些能够适应不断变化的环境的生物。

最具前瞻性的公司正在投资人工智能,因为他们已经意识到人工智能在商业中的重要性,以及人工智能将产生的影响,同时随着数字破坏的加剧,人工智能正在成为组织战略的关键组成部分。

我今天在这里分享根据《财富 2020》排名的世界前五大公司的概况,以及这些公司如何利用人工智能来增强业务的一些例子。

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

照片由 Unsplash 上的复杂探索者拍摄

沃尔玛

沃尔玛自 20 世纪 60 年代以来一直在经营,但该公司仍在开发变革零售业务和加强客户服务的方法。创新和新零售技术与沃尔玛作为世界第二大在线零售商的成长是一致的。

经过多年对技术和商店的投资,沃尔玛无疑已经成为亚马逊在美国电子商务领域的第二大公司,去年销售额增长了 37%。

全球最大的实体零售连锁店之一沃尔玛(Walmart)正计划将其货架扫描机器人的测试扩展到另外 50 家商店,包括一些来自其故乡阿肯色州的商店。

凭借人工智能摄像头、交互式显示器和大型数据中心,这家商店展示了一个看起来像科幻小说一样的零售未来。

被认为是货架扫描未来的机器将在过道中移动,检查所有因素,包括定价、放错位置的商品和库存水平,以评估商店的库存水平。

这不仅将节省人员自己检查这些琐碎细节的所有困难,而且还意味着他们可以专注于其他更重要的细节。

这些机器需要技术人员在现场处理技术缺陷的情况。尽管如此,机器人目前完全自主执行任务。

这些机器人将使用 3D 成像概念在过道中漫游,避开障碍物,并记录下它们道路上的障碍。

“我们认为这是我们的同事会感到兴奋的事情。该技术旨在改善员工的工作,让他们的工作更有趣,帮助他们减轻一些日常任务。人工智能可以在不断变化的世界中提高他们的技能。迈克·汉拉汉,沃尔玛新的智能零售实验室的首席执行官。

沃尔玛还试图通过使用传感器、计算机视觉技术和机器学习,通过“扫描即走”购物来改善客户体验。

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

西蒙·贝克Unsplash 上的照片

亚马逊

亚马逊在 2019 年的收入增长了 21%,达到 2810 亿美元,这是西雅图将财富 500 强跃升至第 2 位的原因。

它现在仅排在它最大的竞争对手和世界上最大的零售商沃尔玛之后。

除了人工智能在亚马逊网络服务中的明显相关性之外,让我们专注于在亚马逊作为零售商使用人工智能。

在亚马逊,人工智能和机器学习技术并不局限于单一的业务领域。这项技术在任何地方都有使用,包括支持 Alexa 声控设备套件的团队、 Amazon Go 商店推荐引擎,后者会产生“经常一起购买”或“购买该商品的客户也购买了”的购买建议。

虽然深度学习和人工智能是亚马逊业务的重要组成部分,但交付完全依赖于高效的仓库运营。

亚马逊的人工智能能力为顾客提供建议。根据一份报告,亚马逊的推荐引擎驱动了其总销售额的 35%。

亚马逊不断应用人工智能来更好地理解他们的客户搜索查询和他们搜索的目的。当电子商务公司向客户推荐相关产品时,他们需要知道客户在寻找什么以及为什么。

理解上下文可能有助于零售商向他们的客户推荐额外的商品,亚马逊打算通过应用人工智能来做到这一点

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

Justin CUnsplash 上拍照

埃克森美孚

在不断削减运营成本的过程中,大型石油公司正在寻求人工智能来帮助实现自动化功能,预测设备问题并增加石油和天然气产量。

美国最大的上市石油公司埃克森美孚在 2019 年面临挑战。首席执行官达伦·伍兹将问题归咎于低油价。该公司收入 143 亿美元,利润同比下降 31%,因为债务水平上升了 24%;与此同时,该公司的投资进入了整个供应链中供应过剩的市场。

埃克森美孚使用先进的数据分析、增强的连接性和最先进的计算技术来改善和革新公司在各个层面的工作方式。

从提高我们炼油厂效率的物联网(IoT) 项目,到帮助支持生产的最先进的数字工具和从我们的运营中检测甲烷排放的项目,埃克森美孚正在利用我们的全球规模将数据转化为推动提高可靠性和性能的独特见解。

通过提高我们炼油厂效率的物联网(IoT) 项目,埃克森美孚正在全球范围内将数据转化为独特的见解,使支持生产检测甲烷排放,提供可靠性和性能。

为了帮助应对现代能源挑战,该公司与一些领先的数字组织建立了新的合作,如微软IBM英特尔,作为自动化闭环流程的第一步,人工智能和机器学习被用于允许系统在没有人工干预的情况下识别和响应事件。

例如,启动一个项目,通过使用 IBM 的人工智能来执行地震绘图和额外的构造和历史数据研究,以确定新油气田的潜在收益

由 20 个不同角色组成的整个团队继续与 IBM 数据科学家一起工作,将所有数据整合到一个小型钻井规划练习的良好工作流中。考虑到数据类型可以跨越地理、地质、地球物理、岩石特性和经济分析,这是一个不小的成就。

2019 年,埃克森与微软合作,在德克萨斯州西部的二叠纪盆地实施人工智能计划。此外,这家石油巨头最近实施了一项人工智能计划,从监控全球炼油厂的数百万个传感器中获取洞察力。

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

micha Kubalczyk 在 Unsplash 上拍摄的照片

苹果

去年,苹果的销量和排名双双下滑,跌至第四位。

制造企业创造利润的能力缓冲了下跌。苹果赚了 550 亿美元。

但说到人工智能,苹果在公司投资组合的任何地方都使用它。

有大量使用机器学习的新体验。作为总结,我将谈论语音到文本的翻译,或设备上的听写,甚至关于健康的新功能,如睡眠和洗手。

现代智能手机的摄像头和预测引擎(比如应用程序)利用了许多机器学习。

苹果的照片应用程序可以自动将图片分类到预先制作的图库中,或者在应用程序的搜索栏中输入朋友的名字时,准确地给你朋友的照片。

机器学习有助于苹果开发和实施增强现实功能,在其软件和设备的最新版本中广泛使用了机器学习。

机器学习被用来帮助 iPad 的软件区分用苹果铅笔画画时手掌的意外敲击和故意输入。

人工智能还优化了设备的电池寿命和充电,以改善用户充电之间的时间,保护电池的长期生存能力。用来推荐 app。

每个 iPhone 用户都会立即感知为人工智能的一个东西是 Siri。机器学习有助于语音识别,也有助于 Siri 给出的响应。

在其他情况下,机器学习对大多数用户来说是不可见的。例如,当你按下快门按钮时,iPhone 会抓拍几张照片。ML 训练的算法分析每幅图像,并从图像的最佳部分合成单个结果。

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

杰克·科恩Unsplash 上拍摄

CVS 健康

这家连锁药店兼医疗保健巨头在今年的财富 500 强(Fortune 500)中跃升三位,并筹集了 620 亿美元的收入,因为它在 2018 年以 690 亿美元收购了保险巨头安泰(Aetna)。

同年,CVS Health 开始了通过在 Microsoft Azure Databricks 平台上进行机器学习来个性化客户和患者体验的旅程,使第一个机器学习模型在六个月内在一个令人印象深刻的快速市场中推出,使用 Apache Spark 进行了数十亿次交易。

该平台提供了关键的商业价值,包括在动态医疗保健环境中使用机器学习,对 CVS 客户定制内容进行测试和学习实验。

“人工智能在医疗和保险领域的潜力是巨大的。研究表明,人工智能可以在更快更准确地诊断疾病时增强人类的智力。Aetna 使用数据和高级分析来推动早期干预,从而在降低医疗成本的同时保持人们的健康。”—CVS Health 医疗保险留存分析主管 Shiv Misra

当被问及 CSV Health 对未来几年的人工智能技术有什么期待时,Shiv Misra 提到了认知分析的未来。大型数据集可以完美结合,先进的人工智能模型可以让机器大大改善人类生活。

2019 年,CVS 阐述了其数字化转型努力,并概述了四个关键优先事项:

  1. 发展卓越的数据和机器人中心
  2. 迁移到混合云环境,以降低成本并显著减少构建和部署新功能的时间
  3. 简化整个企业中使用的应用程序数量
  4. 部署人工智能、自然语言处理和机器人技术来优化呼叫中心运营
  5. 高级数据和分析,利用增强的劳动力管理工具来改进调度

CVS 渴望建立一种技术支持的医疗保健体验,将人工智能、虚拟护理服务和连接设备与实体诊所相结合。

CVS Health 建立了一个大规模定制环境,不仅可以根据过去的购物行为提供个性化的营销优惠,还可以提醒患者何时需要补充药物,让他们知道他们的处方何时可以领取,甚至可以帮助患者识别他们可能遇到的任何副作用。

例如,CVS 的转变糖尿病护理计划使用先进的数据分析技术,结合临床、实体和数字资产,合成和分析大量的药房和生物特征数据,为糖尿病患者提供个性化的医疗治疗,其中一半未受控制的糖尿病患者重新获得了控制。

这些体验可以是虚拟医生出诊,使用人工智能聊天机器人,或通过连接设备向医生发送健康数据。

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

照片由克里斯多夫·伯恩斯Unsplash 拍摄

结论

公司越来越依赖人工智能来提高效率和生产力。换句话说,人工智能已经对这个行业产生了影响。

技术对社会的影响不容忽视。根据普华永道的数据,到 2030 年,投资人工智能(A.I .)的公司可以为全球经济注入约 15.7 万亿美元。约 6.6 万亿美元反映了与服务完全自动化相关的生产率提高。

一旦公司看到人工智能变化的后果,他们将更好地获得利益,也许还能处理问题。你准备好了吗?你已经在研究人工智能了吗?

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

照片由思想目录Unsplash 上拍摄

阅读更多相关信息和参考资料。

  1. 人工智能|定义、例子和…https://www . Britannica . com/technology/人工智能
  2. 沃尔玛(WMT)公司简介,新闻,排名…https://fortune.com/company/walmart/
  3. 财富 500 强—https://fortune.com/fortune500/
  4. 沃尔玛新的智能零售实验室展示了对零售未来的一瞥,IRL—https://corporate . Walmart . com/news room/2019/04/25/walmarts-New-Intelligent-Retail-Lab-Shows—一瞥未来的零售 irl
  5. 大盒子零售中的机器学习。https://emerj . com/ai-sector-overviews/机器学习-big-box-retail/
  6. 亚马逊如何利用人工智能优化交付—https://feed visor . com/resources/Amazon-shipping-FBA/how-Amazon-Leverages-Artificial-Intelligence-to-Optimize-Delivery/
  7. 亚马逊如何使用人工智能来更好地理解客户搜索查询—https://analyticsindiamag . com/how-Amazon-Is-use-ai-Better-Understand-Customer-Search-Queries/
  8. 应用数字技术推动能源创新—https://corporate . Exxon Mobil . com/Energy-and-innovation/Digital-technologies
  9. 提取埃克森美孚人工智能的命脉—https://www . IBM . com/blogs/journey-to-ai/2019/09/extracting-the-havine-of-ai-at-Exxon Mobil/
  10. 石油和天然气公司转向人工智能以削减成本—https://www . wsj . com/articles/oil-and-Gas-Companies-Turn-to-ai-to-Cut-Costs-11571018460
  11. 苹果几乎在所有事情上都使用机器学习,隐私优先的方法实际上更好—https://9 to 5 MAC . com/2020/08/06/apple-using-machine-learning/
  12. 这就是为什么苹果认为自己是人工智能的领导者——也是为什么它说批评者完全错了——https://ars technica . com/gadgets/2020/08/Apple-explains-how-it-uses-macos-learning-cross-IOs and-soon-MAC OS/
  13. 人工智能、医疗保险和数据协调:采访 Shiv Misra,CVS Health—https://www . Forbes . com/sites/cognitive world/2020/10/24/ai-Health-Insurance-And-Data-Harmonization-Interview-With-Shiv-Misra-CVS-Health/?sh=19986c7526d3
  14. CVS Health exec:零售巨头希望创造类似网飞的医疗保健体验—https://www . fierce Health care . com/tech/CVS-Health-s-digital-executive-we-want-to-create-a-Health-experience-as-easy-use—和
  15. Azure 和 Databricks 如何为 CVS Health 的客户和患者提供个性化体验—https://data bricks . com/session _ na20/how-Azure-and-data bricks-Enabled-a-Personalized-Experience-for-Customers-and-Patients-at-CVS-Health
  16. 在大流行和混乱的时代,CVS Health 会成为医疗保健的网飞吗?—https://www . aidata analytics . network/data-monetization/articles/is-CVS-health-being-of-care-in-age-of-pandemics-and-disruption
  17. 普华永道全球人工智能研究:利用人工智能革命—https://www . PwC . com/GX/en/issues/data-and-analytics/publications/Artificial-Intelligence-Study . html

还有一件事…

如果你想在学习之旅中走得更远,我为你准备了一份令人惊叹的清单,其中包含 60 多门关于人工智能、机器学习、深度学习和数据科学的培训课程,你现在就可以免费参加:

如果你想继续发现新的资源并了解人工智能,在我的电子书(下方的链接)中,我正在分享关于人工智能、机器学习、深度学习、数据科学、商业智能、分析和其他方面的最佳文章、网站和免费在线培训课程,以帮助你开始学习和发展职业生涯。

学习 AI 在线:200 多个资源在线开始学习 AI

此外,我刚刚在亚马逊上发布了其他有趣的电子书,我相信其中一些可能会让你感兴趣……让我们保持联系,关注我,让我们一起做吧。

订阅我的每周时事通讯,保持更新

如果你对人工智能、机器学习、数据科学和自动驾驶汽车的话题感兴趣,以及这些创新将如何扰乱世界各地的每一个企业,这份时事通讯肯定会让你保持更新。

点击下面的链接订阅人工智能新闻!

https://medium.com/tech-cult-heartbeat/newsletters/ai-news

人工智能是如何成为现实的

原文:https://towardsdatascience.com/how-artificial-intelligence-got-real-84e2c1dc437?source=collection_archive---------23-----------------------

很长一段时间以来,人工智能是一种思想实验——一种科幻比喻。感觉就像一眨眼的功夫,它现在在我们的日常生活中无处不在。我们是怎么到这里的?

一个很好的起点是的 Mike Ferguson 关于人工通用智能的新系列,他耐心地带领我们了解几十年来哲学、神经科学和相邻学科对人类创造 AGI 的潜力的理论。(当你完成介绍后,你已经可以继续第二部分和第三部分了。)

还有心情阅读一些高水平的基础读物吗?跟随 Mike 的帖子,听听 Gabriel de Longeaux 对信息论的介绍,这是他专门为数据科学家量身定制的。

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

照片由 Susan Q YinUnsplash 拍摄

如果你被人工智能更实际、更现实的方面所吸引,你不会想错过阿曼达·林登对塑造人工智能产品的设计过程的清晰观察。我们经常(太经常?)将人工智能视为一个以开发者为中心的领域,但阿曼达认为,人们是通过设计来体验它的好处和力量的。

与此同时,凯西·科兹尔科夫提醒我们没有一个人工智能的回报是无风险的——尤其是当你认为你已经抓住了它,并且你创造的系统已经好得不能再好了。卡西警告说:“基于数学和数据的解决方案最危险的一点是,非专家过于相信它们。不要成为那种在复杂的任务上依赖完美的坐以待毙的人。”

非常不同的挑战在最近的 TDS 播客节目中浮出水面,主持人 Jeremie Harris 与嘉宾李岩讨论了在慈善领域使用人工智能的局限性。作为非营利组织 Techies Without Borders 的联合创始人,她亲身经历了在边缘化社区和资源匮乏地区实现人工智能承诺的困难。

数据清理是人工智能可能在不久的将来让数据分析师的生活变得更加轻松的另一个领域,但我们仍然没有完全实现。与此同时, Randy Au 坚持认为,目前从事这项工作的数据科学家不要再把它当作无聊的杂务,而是把它当作“在进行全面数据分析的道路上的一系列可重用数据转换*”*

正如你们现在所知道的,每周在 TDS 上,我们的贡献者涵盖了令人眼花缭乱的主题,过去一周的帖子远远超出了人工智能,包括几个实践指南和资源。不确定从哪里开始?怎么样……

感谢您本周加入我们,分享我们贡献者的工作,并推动我们发表我们能找到的最好的数据科学文章。你的支持对我们来说太重要了。

直到下一个变量,
TDS 编辑器

我们策划主题的最新内容:

入门指南

实践教程

深潜

思想和理论

人工智能如何不分白天黑夜地学习

原文:https://towardsdatascience.com/how-artificial-intelligence-learns-regardless-of-day-or-night-e9badcc1b649?source=collection_archive---------35-----------------------

领域适应的解释

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

附身摄影Unsplash 上拍照

你有没有想过,当你只在明亮的白天见过某样东西时,你怎么能在晚上认出它?当有大量的雾或蒸汽存在时,我们如何看到和识别事物?当然,其中一些是上下文相关的,但我们的大脑也知道如何适应不断变化的条件。当我们需要相机同样智能时,挑战就来了。

这就是人工智能之神给我们领域适配的地方。它做到了它所说的:它帮助理解一个域(白天)在另一个域(夜晚)的数据。

让我们把自己的电脑当成一个透过摄像头看的孩子。但这个孩子只在明亮的日光下见过世面。所以现在它能识别一天中所有的玩具。但在一个晴朗的夜晚,它希望惹恼父母,玩而不是睡觉。他有生以来第一次在黑暗中看到自己的玩具。这个孩子如何找到他最喜欢的长颈鹿呢?这是我将教孩子适应他的领域的地方…

首先,我教孩子识别他所看到的一切事物中对背景不变的特征。所以现在它知道长颈鹿有长长的脖子和遍布全身的深褐色斑点。所以在月光下,这个孩子实际上可以找到它的长颈鹿。

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

“玩具长颈鹿”由 M.P.N .德克萨斯人授权

但是现在它喜欢晚上吃糖果(我知道…淘气的孩子)。它找到了装糖果的盒子,想要找到星形的糖果。然后,他想起了我教他的话:当试图挑选一颗星形糖果时,颜色是没有用的。所以他开始数糖果的角和边,以了解它的形状。从此以后,这个小孩和他最喜欢的糖果快乐地生活在一起!

抛开类比,我的意思是说,我有一段代码,可以在白天准确的检测到物体。但我也希望这段代码能适用于夜晚的图像。现在我有许多这些物体在夜间的图像,但它们没有被标记。这就是领域自适应的用武之地,它有助于使用白天的知识来应用于夜晚的数据库。这有助于我们训练代码,而不必再次经历给每个图像加标签的繁琐过程。

为了完全利用上帝给我们的东西,如果该算法在不同的域中获得相似的标记数据,它可以潜在地用于标记这个世界上存在的所有类型的数据。这对于图像分类来说很棒,虽然对于物体检测来说很棘手,但是这里我们已经详细解释过了。

另一个有趣的应用是在医学领域,分割图像并从中发现肿瘤。这个特定的子领域被称为跨模态无监督域适应。当我们有一个肺部肿瘤的标记数据库时,它会有所帮助,但我们希望使用这些结果来分割心脏图像并检查肿瘤。这尤其有用,因为标记医学图像是一项非常繁琐、耗时且昂贵的任务,只能由专业人员来完成。

领域适配也可以用在很多领域,即使不涉及相机。请继续关注我们的频道,了解更多信息!

成为 介质会员 解锁并阅读介质上的许多其他故事。关注我们的Medium阅读更多此类博文

AutoML 如何推动数据科学工作的未来

原文:https://towardsdatascience.com/how-automl-could-drive-the-future-of-data-science-jobs-173c5b48dc5c?source=collection_archive---------19-----------------------

它会授权还是禁止?

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

照片由德鲁·比默Unsplash 上拍摄

近年来,AutoML 解决方案越来越受欢迎。有许多公司提供广泛的解决方案。这些解决方案侧重于数据科学家经常遇到的常见业务问题和任务。

以下是顶级 AutoML 解决方案列表。这份榜单是根据科技行业分析师 AIMultiple 的数据得出的。

DataRobotDataikuH2Ocompel onenhancerAkkioTPOTdotDataBigMLPrevision.ioTIMi SuiteB2Metric

技术巨头们也在利用他们现有的基础设施来推动 AutoML 解决方案。他们拥有构建、部署和扩展 ML 解决方案的产品。大多数云平台都有专注于图像识别和文本分析的专用产品。他们还提供在结构化数据上构建高性能 ML 模型的产品。这些解决方案在特性选择、模型选择和模型调整方面都非常出色。

根据 ResearchAndMarkets 的数据,汽车市场在 2019 年创造了 2.696 亿美元的收入。预计到 2030 年将达到 15 亿美元。它还表明,基于云的 AutoML 解决方案是首选。因为它们提供了定制解决方案的可伸缩性和灵活性。

汽车的好处

数据科学家执行的许多任务都是重复且耗时的。这限制了数据科学团队解决更多业务问题的能力。大多数数据科学团队最终只关注业务关键型问题。以下是 AutoML 如何增强数据科学团队的能力

节省时间

  • AutoML 将实现容易出现人为错误的重复性和手动任务的自动化
  • AutoML 将把数据清理、探索和特征工程所需的工作从几周减少到几天
  • AutoML 将使型号选择和性能监控变得容易
  • 使用 AutoML 可以完全自动化超参数调整

公平竞争环境

  • 每个人都可以使用高性能的预培训 ML 模型
  • AutoML 将使许多中小型企业能够实现机器学习
  • 将使在制定业务决策时使用非结构化数据变得更加容易
  • 将增加非技术用户参与解决面向数据的问题

AutoML 对数据科学项目的影响

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

Jonathan Cosens 摄影Unsplash 上拍摄

AutoML 将在数据科学项目的生命周期中产生连锁反应。它将改变数据科学工作的前景。以下是数据科学项目的典型阶段。让我们看看 AutoML 对这些阶段的影响。

商业理解

任何数据科学项目的第一步都是很好地理解问题。总的来说,AutoML 在这方面的影响最小。AutoML 能做的最好的事情就是自动化一些流行的和标准的数据科学项目。一个例子是银行业的欺诈预测。不同客户的欺诈模式可能不会有太大变化。将解决方案模板化并推向市场将会很容易。这些预先构建的解决方案将业务知识融入其中。

AutoML 会自动处理所有的业务问题吗?答案肯定是否定的!有许多场景可以自动化,甚至可以复制。但是,对业务问题的深入理解是强制性的。

数据收集和清理

AutoML 产品肯定可以访问平台中的数据。在 AutoML 产品中加入新数据会容易得多。例如,在 GCP,很容易将数据作为平面文件或使用 BigQueries 导入 AutoML 表。在许多问题中,使用外部数据集通常会产生更好的结果。为了识别相关的外部数据,数据科学家的专业知识是必须的。

导入所需的数据集后,下一步是清理数据。这一步通常很繁琐,需要数据科学家的大量关注。数据集通常不够干净,不适合 ML 模型使用。AutoML 解决方案在这里会非常方便。我们可以更快地清理数据。

AutoML 将能够加速数据收集和清理。将有可能把所需的努力从几周缩短到几天。但是,数据科学家的领域知识将是获得最佳解决方案的关键。

特征工程

这是一个迭代过程,很容易成为数据科学项目中最耗时的阶段。有了 AutoML,实现一些特征工程任务将变得容易。像标准化、一键编码、宁滨、格式化等任务都可以通过点击一个按钮来完成。

特征工程可以完全自动化吗?简而言之,答案是否定的。在特征工程中执行的许多任务将变得可访问。但是,只有数据科学团队可以将业务洞察力融入到功能中。此外,为了获得最佳结果,通常需要寻找未知数。利用已知的特性和转换只会有一定的帮助。为了实现高性能,有人需要研究未知。

模型构建/洞察

数据科学项目分为两大类。一个涉及模型构建,另一个侧重于见解或建议。AutoML 在涉及模型构建的项目中非常有用。AutoML 使得模型选择、调整和跟踪易于实现。从而为数据科学团队创造时间来解决更多问题。

涉及见解提取的项目需要业务知识。有了 AutoML,很多焦点将转移到这个领域。使数据科学团队能够承担更多洞察驱动的任务。

部署

在许多数据科学项目中,部署从来都不容易。将模型从一个环境转移到另一个环境会有挑战。环境之间的任何微小差异,比如软件版本,都可能导致问题。此外,生产环境通常受到限制。使得难以做出改变或跟踪 m1 模型的性能。

AutoML 撼动了这个领域。现在可以在几分钟内部署模型。

对数据科学家来说意味着什么?

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

迪米特·多诺夫斯基在 Unsplash 上拍摄的照片

在接下来的几年里,AutoML 解决方案将会广泛应用。各种规模的公司都将获得相同的尖端解决方案。要超越其他公司,就必须专注于 AutoML 无法解决的问题。这将为数据科学家带来大量新的机会。

数据科学团队的角色和职责将会发生变化。重点将转向需要人类专业知识和领域知识的更复杂的问题。

这里有一些需要商业知识和地面现实信息的问题,

  • 洞察驱动的问题,如确定客户流失的原因,需要领域知识。可能有很多内部和外部因素导致客户流失。只有更好地了解数据环境和领域,才能产生更好的结果。
  • 衡量和跟踪公司提供的各种功能/产品的性能。定义和构建指标需要业务知识。
  • 部署的模型需要持续的监控。随着时间的推移,事情会发生变化,这会影响模型的性能。这将需要数据科学家来修复它们。
  • 业务涉众没有明确定义的问题。首先要清楚地了解问题,这需要做基础工作。

AutoML 很可能会为数据科学家提供大量新的解决机会。AutoML 不应被视为淘汰数据科学家的工具。是的,AutoML 将完成许多目前由数据科学家完成的任务。它也可以更好地完成这些任务。但是,这将为数据科学团队解决更好的挑战铺平道路。

最后的话

数据科学家的重点将更多地转向更好地理解这个问题。AutoML 将提高数据科学团队的生产力,并将授权而不是禁止。

保持联系

AutoML 如何帮助创建复合人工智能?

原文:https://towardsdatascience.com/how-automl-helps-to-create-composite-ai-f09e05287563?source=collection_archive---------12-----------------------

思想和理论

AutoML 的主要趋势和挑战,复合人工智能实现背后的思想,以及开源框架 FEDOT。

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

代表复合人工智能模型的管道(作者的图片)

如今,自动机器学习(AutoML)、复合人工智能(AI)和结构学习是非常流行和广泛讨论的概念。自动化、多模态和可控性的思想为改进现有的数据驱动建模方法提供了一个有希望的方向。在本文中,我们将讨论 AutoML 的主要趋势和挑战,复合人工智能实现背后的主要思想,以及复合管道结构学习的开源框架— FEDOT 继承了这些思想。

一点理论和一些关于 AutoML 框架的话

通常,数据科学家必须执行许多步骤来使用机器学习(ML)技术获得现实世界问题的解决方案:数据清理和数据集准备,选择最具信息性的特征,转换特征空间,选择 ML 模型并调整其超参数。这个序列通常被表示为 ML 流水线。

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

不同类型的 ML 管道(图片作者)

然而,即使是简单的线性管道(上图中的 A)的手动处理以及其结构和参数的选择也需要数据科学家花费数天甚至数周的时间。对于复杂的任务,管道结构可能会变得更加复杂——如上图中的情况 B 和 C 所示。案例 B 显示了采用集成方法(叠加)组合多个模型的分支管道;案例 C 显示了连接初始数据集不同部分的不同预处理方法和模型的分支管道。

实际上,使用多个 ML 模型的管道可以被视为整个复合模型,因为从计算的角度来看,它们之间没有太多的差异。因此,( B)和(с)中的管道结构实际上变成了复合的,因为它们结合了不同的 ML 算法。例如,可以将 NLP 模型和卷积网络相结合,以使用多模态数据来获得预测。可以使用 AutoML 方法和技术来处理复合模型和 ML 管道。

自动化流水线创建主要是一个组合优化问题,旨在寻找可能构建模块的最佳组合。为了方便起见,流水线可以描述为有向无环图(DAG ),它可以很容易地转换成计算图。优化的效率由目标函数决定,该目标函数允许估计最终管线的质量、复杂性、鲁棒性和其他属性。

解决优化任务的最直接的方法是随机搜索适当的块组合。但是更好的选择是元启发式优化算法:群体和进化(遗传)算法。但在进化算法的情况下,人们应该记住,它们应该有专门设计的交叉、变异和选择算子。这种特殊操作符对于处理由 DAG 描述的个体是重要的,它们还提供了考虑多个目标函数的可能性,并且包括创建稳定流水线和避免过度复制的附加过程。

交叉算子可以使用子树交叉方案来实现。在这种情况下,选择两个亲代个体并交换他们图形的随机部分。但这不是唯一可能的实现方式,可能有更复杂的语义变体(例如,单点交叉)。变异算子的实现可以包括图的随机节点中模型(或计算块)的随机改变、随机节点的移除或子树的随机添加。

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

管道的遗传操作符的不同实现(作者的图片,t his 和其他插图可在我们在 Procedia Computer Science 的论文中找到。)

在理想的情况下,AutoML 应该给我们一个机会,从构建 ML 解决方案的整个过程中排除一个人。然而,很难完全实现这一点,因为大多数 AutoML 框架支持独立步骤的自动化(超参数调优、特性选择等)。)用于固定管道,并且仅用于特定类型的数据。下表列出了几种最先进的管道 AutoML 框架及其特性。当然,这种比较并不完全——它是基于对公开文档和示例的分析。然而,AutoML 的状态可能会迅速改变。

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

最先进的 AutoML 框架的主要特性(图片由作者提供)

可以看出,尽管有各种各样的完善的解决方案,但是现有的解决方案都是针对相对狭窄的任务或使用方式。例如,TPOT 框架仅为表格数据自动创建分类(包括多类分类)和回归模型,获得的管道的结构通常由两个级别之一组成。自动增长非常灵活,但它主要基于预定义的管道。还有许多特定于任务的 AutoML 框架——例如,AutoTS 框架只能用于时间序列预测。

然而,可以看出,缺乏用于自动建模的更复杂和多用途的方法,该方法可以适用于不同的任务和数据类型,而无需对核心算法进行复杂的修改。这个问题把我们带到了下一个问题——情况有可能改善吗?

缺少什么,我们想提出什么

典型的 AutoML 应用场景如下:AutoML 框架使用可用的数据集来优化流水线的结构和其中包含的块的超参数。然而,在实践中,适用于基准测试问题的实现在“真实世界”的数据集上并不那么好。因此,越来越多的新的 AutoML 解决方案出现,如 H2O,AutoGluon,LAMA,NNI,等等。它们在功能上有所不同(例如,工业解决方案具有先进的基础设施功能),但通常不适合大范围的建模任务。虽然大多数框架允许解决分类和回归问题,但它们通常不支持时间序列预测。

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

常见汽车案例(图片作者

ML 管道可以包含不同任务的模型。例如,基于回归生成一个新的有用的特征,然后在分类中使用它是很有用的。目前,AutoML 框架不允许以方便的方式解决这样的任务。然而,对于 ML 工程师来说,面对多模态和异构的数据并不罕见,这些数据必须被集成以进行进一步的建模。

直到最近,还没有具备这一系列特性的现成工具。在 ITMO 大学的自然系统模拟实验室,我们研究和开发汽车领域的先进解决方案。因此,我们决定开发自己的解决方案,避免上述问题。我们称之为 FEDOT。它是一个开源框架,可以自动创建和优化 ML 管道及其元素。FEDOT 使得以紧凑和高效的方式解决各种数据驱动的建模问题成为可能。

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

多模态 AutoML case ( 图片作者)

下面是一个基于 FEDOT 的分类问题解决方案的示例(用 Python 编写):

**# new instance to be used as AutoML tool with time limit equal to 10 minutes****auto_model = Fedot(problem='classification', learning_time=10)****#run of the AutoML-based model generation****pipeline = auto_model.fit(features=train_data_path, target='target')****prediction = auto_model.predict(features=test_data_path)****auto_metrics = auto_model.get_metrics()**

该框架的主要焦点是管理管道的计算块之间的交互。Tho 流水线设计从结构学习阶段开始——FEDOT 结合几个 ML 模型来实现更好的目标函数值。在该框架中,我们以有向图的形式描述复合模型,该有向图定义了预处理和建模块之间的关系。节点用 ML 模型表示,数据预处理和转换操作也用 ML 模型表示。该图的结构以及每个节点的参数都可以优化。

适用于特定任务的结构是自动设计的。为此,我们使用了进化优化算法 GPComp,它创建了几个 ML 管道的群体,并通过应用进化方法(变异和交叉)来搜索最佳解决方案。为了避免不希望的过度复杂的管道结构,我们应用了正则化过程和多目标方法。

以下是阐释这一概念的框架的预告片:

FEDOT 简介(视频作者)

FEDOT 是用 Python 实现的,可以在 BSD-3 开放许可证下获得。有几个关键特征:

  • FEDOT 架构高度灵活;该框架可用于自动创建不同任务(分类、回归、预测)、数据类型(表格、时间序列、文本、图像)和模型的 ML 解决方案;
  • FEDOT 支持流行的 ML 库(sci-kit-learn、Keras、statsmodels 等。),但也允许在需要时集成其他工具;
  • 管道优化算法不受数据类型或任务的限制。然而,特定任务类或数据类型(时间序列预测、NLP、表格数据等)的专用模板。)都可以用;
  • 该框架不限于机器学习。特定于域的模型也可以被构建到流水线中(例如,ODE 或 PDE 中的模型);
  • 除了已经支持的方法之外,超参数调整的定制方法也可以集成到 FEDOT 中;
  • FEDOT 支持任何时间的操作模式(在任何时间点,可以停止算法并获得结果);
  • 最终管道可以以 JSON 格式导出,以实现实验的可重复性。

因此,与其他框架相比,FEDOT 不局限于一类问题,而是声称具有通用性和可扩展性。它允许您使用不同性质的输入数据来构建模型。此外, this news 中描述了 FEDOT 申请黑客马拉松比赛的前景。

汽车前景

在 AutoML 解决方案中(除了上面列出的工具之外),还有 EvalML、TransmogrifAI、Lale 和许多其他解决方案。都是大型企业 IT 公司开发的。在某些情况下,框架的主要焦点是技术特性,比如对可伸缩性和分布式计算的支持,或者与 Kubernetes 和 MLOps 工具的集成。在其他情况下,它是关于概念问题,如新的优化算法或它们的可解释性。然而,有几个领域和前景的发展,汽车是较少涵盖的社区。

灵活控制搜索复杂度

根据要求和允许的预算,ML 工程师可以选择不同的模型:具有优化超参数的单一梯度增强模型、深度神经网络或结合几种建模方法的非线性管道。在这两种情况下,他将被迫发现可用的 AutoML 框架的可能性,并进行实验研究,以找出什么工作得更好或更差。但是,具有连续搜索复杂度的所谓“开关”将是非常方便的,利用该开关,可以将搜索空间的维度从简单的解决方案调整到复杂但有效的流水线。

模型工厂

除了质量度量的允许值之外,在 ML 任务中还可能出现其他的决策标准。例如,可解释性、在生产环境中维护所需的计算资源和内存量、预测的超前性等等。这将是一个有用的界面,用于指定可以考虑的几个目标。在某些情况下,不可能同时最小化所有标准,因为存在决策的帕累托前沿。例如,随着神经网络体系结构的复杂性增加,精确度增加,但也需要更多的计算资源。

我们的团队进行了实验研究,我们试图在 FEDOT 内应用进化多目标优化算法来优化机器学习管道。我们不仅选择精度,还选择管线的复杂性(节点数量和计算图深度)作为优化标准。在实验过程中,我们发现将 Pareto-front 解决方案整合到搜索过程中增加了群体的多样性,并且还允许我们找到具有更高准确性的解决方案。

DataRobot 公司的塞维多夫·古斯在他的报告《自动化机器学习》中表达了 AutoML 模型工厂的想法。他用 OOP 模式工厂做了一个类比,在 OOP 模式工厂中,AutoML 可以根据给定的条件向用户提供不同的解决方案:数据集的类型、预测间隔、模型的生命周期等。

可以为不同的数据集导出模型:随机样本、时间范围内的数据。还可以基于当前数据切片获得“短期”模型。

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

AutoML 作为模型工厂(图片作者

总的来说,自动机器学习是一个很有前途的领域。如果你在数据科学领域工作,关注汽车世界的新闻是很有价值的。我们选择了几个来源进行深入研究:

作者:尼古拉·尼基丁,安娜·卡柳那亚,帕维尔·维楚查宁

百度 Apollo 如何为自动驾驶汽车构建高清地图

原文:https://towardsdatascience.com/how-baidu-apollo-builds-hd-high-definition-maps-for-autonomous-vehicles-167af3a3fea3?source=collection_archive---------17-----------------------

5 步构建流程,高清地图元素,OpenDRIVE 格式

高清地图(HD map)是自动驾驶中使用的高度精确的地图。高清地图在包括感知、模拟、定位和路径规划在内的自动驾驶模块中发挥着重要作用。作为地图制作者,百度 Apollo 是中国领先的自动驾驶平台。在这篇博客中,我们将介绍百度 Apollo 如何为自动驾驶构建高清地图。

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

高清地图[1]

  1. 百度 Apollo 是什么?

百度 Apollo 是一个自动驾驶的开放平台。代码可以在 github 上公开获得。最初在 2017 年公布,从 v1.0,v1.5,v2.0,…,一直迭代到今天的 v6.0。作为一个完整的自动驾驶平台,它包含以下模块:

  • 精准感知 :利用激光雷达、雷达、摄像头探测障碍物和红绿灯。
  • 模拟 :用真实世界交通和自动驾驶数据虚拟驾驶数百万公里。
  • 高清地图:将传感器和深度学习应用于地图制作。
  • 定位:利用包括 GPS、IMU、高清地图和各种传感器输入在内的全面解决方案,实现厘米级精度。
  • 规划:适应实时交通状况,产生既安全又舒适的精确轨迹。
  • 智能控制:处理不同路况、速度、车型和 canbus 协议,控制精度约 10 cm。
  • 阿波罗数据集 :包含时间戳激光雷达扫描、相机图像和后处理 GPS 轨迹。

2。百度 Apollo 如何搭建高清地图?

2.1 构建流程

阿波罗通过 5 个步骤构建高清地图。

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

阿波罗高清地图的构建过程(图片由作者提供)

**数据来源:**百度 Apollo 有一支勘测车队行驶在道路上。调查车使用不同的传感器,包括激光雷达、GPS、IMU、天线和相机来收集数据。阿波罗定义了一个硬件框架,将这些传感器集成到一个单一的自治系统中。调查车以正常速度(~60 km/h)行驶在道路上。

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

百度阿波罗 Survery 汽车(图片来源[2])

数据处理:采集的数据包括点云数据和图像数据。Apollo 对收集到的数据进行整理、分类、清洗,得到一个没有语义信息和标注的初始地图模板。

物体检测 : Apollo 将深度学习和计算机视觉技术应用于点云和图像,例如,点云分割和分类,以及交通标志/灯、车道线/标志和电线杆的物体检测。

手动验证:该步骤是手动纠正之前自动过程中出现的错误标注。例如,车道标志、车道边界、交通灯/标志可能在之前的步骤中被错误地检测到。此外,一些逻辑关系需要手动识别。例如,在交叉路口,可能有多个交通灯。每条车道都需要与正确的交通灯手动关联。

地图制作:高清地图准备在这一步发布。除了高清地图,Apollo 还发布了相应的俯视图本地化地图、3D 点云地图、路径规划地图、仿真地图。

由于施工、交通事故等原因,道路状况每天都在发生变化。因此,地图发布后需要经常更新。Apollo 使用众包和云技术来实现它。首先,Apollo 按照上面的 5 个步骤,由测量船队建立一个所谓的“底图”。然后,Apollo 向公众发布其数据源工具,让公众可以参与高清地图的制作任务。第三个,关于道路的更新通过智能手机、普通汽车中的车载智能设备、智能互联汽车,甚至智能自主汽车,传回云端的阿波罗地图制作平台。

阿波罗地图中的 2.2 元素

道路要素:道路边界、车道左右边界、车道限速、车道类型、车道拓扑、车道线型、车道方向信息、车道转向类型、车道长度

交叉口要素:交叉口边界、交叉口虚拟车道

交通信号要素:交通灯、其他道路标志

逻辑关系元素:映射逻辑关系

其他元素:人行横道、禁止停车区、停止线、路面箭头、路面文字、围栏、路灯、龙门架、建筑物、减速带

2.3 阿波罗 OpenDRIVE 地图格式

OpenDRIVE 代表车辆环境的开放式动态道路信息。这是一种为描述道路网络提供通用语法的格式,文件扩展名为 xodr 或 xodrz。它将逻辑道路描述标准化,以促进开发和验证 adAS 和 AD 功能的不同驾驶模拟器之间的数据交换。

百度 Apollo 用的是 OpenDRIVE 格式的修改版。区别如下。

  • Apollo OpenDRIVE 使用纬度经度点的简单列表来定义道路边界,而在标准 OpenDRIVE 中,道路边界是使用五种不同类型的函数通过参考线和偏差来定义的。
  • 阿波罗 OpenDRIVE 扩展了元素,包括禁止停车区、人行横道和减速区。
  • Apollo OpenDRIVE 增加了车道中心线到道路边界的距离,以及车道和红绿灯之间的逻辑关系。
  • 车道:标准的 OpenDRIVE 只允许指定车道的宽度。然而,Apollo OpenDRIVE 需要点来描述车道边界。此外,Apollo OpenDRIVE 需要每个车道的中心点和道路的边界。
  • 交叉点:Apollo OpenDRIVE 使用交叉点的简化版本,忽略了交叉点组、交叉点优先级和交叉点控制器等概念。
  • 对象和信号:Apollo OpenDRIVE 使用数量减少的属性,并且只支持有限数量的对象类型。

2.4 坐标系

百度 Apollo 使用两种坐标系:通用横轴墨卡托(UTM)系统和世界大地测量系统(WGS84)。

UTM 是一种地图投影系统,用于指定地球表面位置的坐标。它把地球分成 60 个区域,每个区域的宽度为 6 经度。要引用一个位置,您需要一个 xy 坐标以及它们所在的区域。

WGS 是用于制图、大地测量和卫星导航(包括 GPS)的标准。WGS84 的坐标原点应该位于地球的质心。它基于描述地球大小、形状、重力和地磁场的一组一致的常数和模型参数。

参考文献:

【1】uda city 免费课程:自动驾驶汽车基础:特色阿波罗

【2】百度阿波罗免费课程

[3]https://apollo.auto/developer.html

[4] 硕士论文:自动驾驶中的高清地图

[5] 将自动驾驶商业化

贝叶斯统计如何说服我多睡觉

原文:https://towardsdatascience.com/how-bayesian-statistics-convinced-me-to-sleep-more-f75957781f8b?source=collection_archive---------14-----------------------

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

照片由 Cris SaurUnsplash 上拍摄

Python 中的贝叶斯线性回归来量化我的睡眠时间

这些年来,我听到我的许多朋友评论——你曾经睡觉吗?嗯,我不会怪他们。通常,我是第一个起床的人,即使是在深夜,尽管随着时间的推移,这种情况已经发生了变化。在我 20 岁出头的时候,我通常睡 5 到 5.5 个小时(我们会看一场深夜电影,凌晨 2 点到家,8 点到达办公室,然后开始工作),但现在是 6 到 6.5 个小时。当然,有时候我会在床上躺更长时间,因为随着年龄的增长,精力会逐渐消失。用钱德勒·宾的话说,“我想坐在舒适的椅子上,在合理的时间上床睡觉。”

资料来源:Giphy.com

在 2020 年,我试图跟踪我生活中的一些事情,如我房间里一天中最安静的时间,应用程序显示的空气质量指数,每天的耗电量等。**我追踪的一个变量是我睡了多少小时以及之后我感觉有多累。**动力来自 Kaggle 研究,我补充了我的观察。我并不勤奋,但是每当我记起的时候,我都会把我的数据添加到现有的研究中。

本质上有两个感兴趣的变量:

  1. 我睡觉的小时数(小时)
  2. 醒来后我感觉有多累(满分 5 分,1 分最不累,5 分最累)

背景

虽然我已经毕业,每天睡 6 到 6.5 个小时,但我的能量水平每天都在变化;有几天精力充沛,但其他时间有点沮丧。鉴于这种状态,我有两个问题要问自己:

  1. 我应该增加睡眠时间吗?
  2. 我是否正确地估计了我的能量水平,即我过去睡 5 个小时感觉很好,现在当我睡 6 个小时时,我的估计偏向于较低的疲劳度?

假设:6.5 小时的睡眠对我来说足够了,因为我估计我的疲劳程度在大多数时候是 2 级。

该调查了!洛斯盖兹!

免责声明:我不认为我理解贝叶斯分析的每一个方面,但我想通过这篇文章将我的想法具体化,因此,我将尽可能地避开数学(只有方程)和代码,并尝试用一种我可能受益的语言来解释它。

我没有在文章中包含代码,但是数据和其他文件可以在 GitHub repo 上找到。

假设:请注意,所有其他外部因素,如锻炼、含咖啡因的饮料等都被假设为无效。这项研究的假设是睡眠时间和疲劳程度之间有直接联系。

为贝叶斯过程建立直觉

首先,我们为贝叶斯分析建立一个直觉。我相信你可能曾经被卷入频繁主义和贝叶斯主义的争论中。有很多文献可以解释这两种统计推断方法之间的区别。

简而言之, 频数主义 是从数据中学习的常用方法,用 p 值来衡量变量的显著性。频率主义方法是关于点估计的。如果我的线性方程是:

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

y 是响应变量,x₁、x₂是自变量。β₁和β₂是需要估计的系数。β₀是截距项;如果 x₁改变 1 个单位,那么 y 将受到β₁单位的影响,例如,如果 x₁是 1,β₁是 2,那么 y 将受到 2 个单位的影响。常见的线性材料。这里需要注意的是,回归方程基于最小化误差平方和(最佳拟合线)来估计各种β的值,这最好地解释了手头的数据,并且估计值是奇点,即β₀、β₁和β₂各有一个值,依此类推。β的估计值被称为β的最大似然估计值,因为它是给定输入 x 和输出 y 时最有可能的值。

贝叶斯 与频率主义方法的不同之处在于,除了数据之外,它还考虑了数据的先验知识。这就是这两个群体之间的分歧所在。频繁主义者将数据视为福音,而贝叶斯主义者则认为总有一些我们知道的关于系统的东西,为什么不用它来估计参数。

数据和先验知识一起被用来估计所谓的后验概率,它不是一个单一的值,而是一个分布。贝叶斯方法估计模型参数的后验分布,而不是像 frequentist 方法那样的单一最佳值。

我们为模型参数选择的先验不是单一值,而是分布,它们可以是正态分布、柯西分布、二项式分布、贝塔分布或根据我们的猜测认为合适的任何其他分布。

我希望你知道贝叶斯定理的术语和脚本:

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

P(A|B)是指给定 B 已经发生的概率。

顺便说一下,托马斯·贝叶斯没有提出上面的方程,是拉普拉斯提出的。Bayes 写了一篇关于他的思想实验的论文“一篇解决机会主义中一个问题的文章”。贝氏去世后,他的朋友理查德·普莱斯发现了这份报纸,在他编辑了几版后,这份报纸在伦敦皇家学会被阅读。

对于贝叶斯推断:

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

P(β|y,X)是给定输入 X 和输出 y 的模型参数的后验分布。P(y|β,X)是数据的似然性,乘以参数 P(β|X)的先验概率,再除以 P(y|X),P(y | X)被称为归一化常数。

简而言之,我们使用关于模型参数和数据的先验信息来估计后验。

一个例子

让我们用一些简单的例子来建立我们的直觉,看看我们是否能理解我们在上面学到的东西。

让我们掷硬币 20 次,1 是正面,0 是反面。以下是掷硬币的结果:

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

这个数据平均值是 0.75;换句话说,有 75%的机会是正面即 1,而不是反面即 0

顺便说一下,任何通常只有两个结果 0 或 1 的过程被称为伯努利过程

从频率主义者的角度来看,硬币似乎是有偏向的,即如果我们再扔一次,那么根据频率主义者的估计,硬币更有可能(75%的情况下)正面朝上,即 1。

尽管如此,大多数硬币是没有偏向的,得到 1 或 0 的概率应该是 50%。根据中心极限定理,如果我们投掷硬币无限次,那么正面和反面的概率都是 0.5。现实生活与定理大相径庭,没有人会把一枚硬币扔无限次;我们必须根据现有的数据做出决定。

这就是贝叶斯方法有用的地方。这给了我们包含先验(我们最初的信念)的自由,这就是我们将对抛硬币数据所做的。如果我们没有关于先验的任何信息,那么我们可以使用完全无信息的均匀分布——在实践中,均匀分布的结果将与频率主义方法相同,因为我们告诉我们的模型每种可能性都是同等可能的。

非贝叶斯=具有统一先验的贝叶斯

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

不提供信息的先验给出了与频繁主义者方法相同的结果(图片由作者提供)

在上图中,后验结果和频率主义结果一致,峰值在 0.75 左右(就像频率主义方法一样)。先验是一条直线,因为我们假设是均匀分布。

我相信我们可以做得更好。让我们改变我们的先验知识,也许是一个 beta 分布,然后观察结果。

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

之前改为测试版,我们看到它比 frequentist 做得更好

这似乎更好。我们的先验已经改变,因此后验概率向左移动,它不在 0.5 附近,但它至少与频率主义者的 0.75 不一致。

我们可以通过调整先前发行版的几个参数来进一步改进它,使它变得更加自以为是。

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

与 frequentist 相比,固执己见的先验使贝叶斯方法的结果模拟了真实世界(图片由作者提供)

这看起来好多了,后验概率已经改变了,因为我们已经改变了先验概率,这也更加符合这样一个事实,即一个没有偏见的硬币会有 50%的机会正面朝上,其余的时间则是反面朝上。

我们现有的关于硬币的知识对结果有重大影响,这是有意义的。这与频率主义者的方法截然相反,在频率主义者的方法中,我们假设我们对硬币一无所知,这 20 个观察结果就是福音。

我并没有要求你改变立场,但上面的例子应该会让你对贝叶斯方法产生一些信念,有了这个信念,让我们继续把它用在睡眠数据上。

实施贝叶斯线性回归

我正在使用的软件包:

  1. 贝叶斯的 PyMC3
  2. 用于可视化的 Arviz 和 Matplotlib

贝叶斯回归中的情况是,一旦您为模型参数定义了一个先验,就会估计一个后验,并从该后验中提取样本以生成一个更好、更准确的后验。这是一个高度计算密集型和组合爆炸性的任务。因此,我们需要找到一种方法,通过这种方法,我们可以在合理的时间内找到后路,而不需要使用太多的资源。

让我们从后验分布中进行这种复杂采样的算法称为 MCMC(马尔可夫链蒙特卡罗)。有许多相同的实现,如 Metropolis-Hastings、Hamiltonian、Gibbs 采样。我们将使用大都会黑斯廷斯。

如果我试图在这里解释 MCMC,那就有点矫枉过正了。也许是我,但找到一个后验概率,然后从这个后验概率中取样,以逼近一个更好的后验概率,目前似乎不是一个直观和简单的任务。该算法的一个快速和肮脏的纲要是:

  1. 估计先后路。随机或从你的前任身上取一个样本。叫它θ₀吧
  2. 定义一个与步骤 1 中选择的值相近的值。叫它θ₁吧
  3. 计算比率 r,这是在θ₀和θ₁.评估后的比率
  4. 如果 r >1,则接受θ₁,将其设为新的θ₀,并找到新的θ₁.如果 r <1 then repeat step 1, 2, and 3 till r > 1
  5. 重复这些步骤进行特定次数的迭代,以获得后验分布。

说得太多了,让我们开始工作吧!

让我们首先检查数据的轮廓。请按照 Github repo 获取代码。

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

睡眠和疲劳水平直方图(图片由作者提供)

大多数人睡眠时间在 6 到 8 小时之间。原始数据只有很少数量的 6 小时观测值,大部分的 6 小时都来自我的数据。疲劳水平遵循正常曲线,峰值在 3。

疲劳和睡眠持续时间之间的散点图不能提供太多信息。我想知道什么样的回归线会符合这一点。即使睡了 9 个小时,人们也会感到 5 级疲劳。

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

作者图片

模型

我们指定截距、斜率和σ的先验。我们的回归方程:

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

在这种情况下,我将斜率设置为以 2 为中心。

***. pm . sample(1000)***是触发 MCMC 的地方。这条语句的作用是通过查看数据,估计截距、斜率和产生数据的 sigma。将从后验分布中抽取 1000 个样本,每个样本将为截距、斜率和 sigma 生成一个单独的(1000 个)分布。

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

作者图片

以上是截距、斜率和 sigma 的轨迹分布。我们将斜率集中在 2,在结果中它并不是很远。

后验分布提供了三个模型参数的更清晰的图像。

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

作者图片

所有参数的范围都很窄,如果数据点的数量很少,上面曲线的宽度会大得多。

斗牛中的最后一剑

让我们看看贝叶斯模型如何预测我 6.5 小时睡眠的疲劳程度

请记住,贝叶斯模型不给出点估计,而是提供概率分布,所以我们在这里也将得到分布。

预测的平均值将达到 2.70。

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

作者图片

对于 6.5 小时,我估计我的疲劳水平在 2 到 2.5 之间,但模型显示是 2.71。这意味着我需要多睡一会儿来减轻疲劳。

线性回归

在总结之前,我想运行一个线性回归并估计结果。

在直方图中,我们看到疲劳指数的主导值是 3,我怀疑线性回归会给出类似的结果。

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

线性回归的结果,不出所料!!

对于 6.5 小时的睡眠,线性回归估计疲劳指数为 3.03,这比贝叶斯得出的结果要高。

这并不是说我讨厌睡觉,而是我不想依赖线性回归,这种回归会把我放在平均疲劳水平的队列中,并且可能会不必要地增加半小时的睡眠时间。

结论

  1. 有强有力的证据表明,我需要我对 6.5 小时睡眠后的疲劳水平的估计有点低。

贝叶斯统计要求我多睡 6.5 小时来减少疲劳。线性回归做着同样的事情,但是估计我的疲劳值要高得多。我愿意相信贝叶斯统计,毕竟,如果不是拉普拉斯和贝叶斯,你还能相信谁呢?

2.贝叶斯方法结合了先验信息,当我们的数据有限时,这可能是一个可靠的工具。

3.贝叶斯方法看起来很直观——估计你的解决方案是什么,并在收集更多数据时改进这个估计。

这并不意味着贝叶斯是解决所有数据科学问题的最佳方法;这只是其中的一种方法,学习贝叶斯和频率主义的方法比在这些思想流派之间进行战斗更有成效。

我学到了什么?

上面的练习是关于量化你对某事的信念,而不是确定它。这是关于拥抱不确定性,但量化它。这就是为什么你产生一个概率分布,而不是点估计。

趣闻: 顺便说一句,很多贝叶斯派的思想家都把英格玛之谜的解决归功于艾伦·图灵。是的,他的确建立了概率模型,但是波兰数学家帮助了他。早在战争之前,波兰数学家已经用数学方法解决了这个谜,而英国人还在试图用语言来解决它。万岁https://en.wikipedia.org/wiki/Marian_Rejewski

好了,我真的要睡觉了。

来源:Giphy.com

该睡觉了,但首先我必须关灯。

参考资料:

  1. https://OCW . MIT . edu/courses/mathematics/18-05-introduction-to-probability and-statistics-spring-2014/readings/MIT 18 _ 05s 14 _ reading 20 . pdf
  2. https://docs.pymc.io/nb_examples/index.html
  3. https://2018 . za . pycon . org/talks/5-Bayesian-analysis-in-python-a-starter-kit/

成为多面手如何有利于您的数据科学职业

原文:https://towardsdatascience.com/how-being-a-generalist-can-benefit-your-data-science-career-cd23758a0780?source=collection_archive---------17-----------------------

尤其是如果你是从数据科学领域起步的话…

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

kazuendUnsplash 拍摄的照片

在数据科学领域起步的人可能会感到有点失落。尤其是在选择自己应该追求什么角色的时候。我们在数据科学领域的角色激增可能会让人不知所措。

有这么多的角色要追求,从业者必须学习大量的技能。问题是人们不知道从哪里开始。

这让我们开始讨论应该使用哪种策略来在数据科学职业生涯中取得成功。一个人应该成为多面手还是专家?

这是一个很难解决的问题,因为它取决于太多的变量。这篇文章的目的不是解决这样一个问题。但是,目的是与你分享成为多面手的一些好处。

我希望有了这些信息,你会更好地了解。所以,下次你发现自己问这样的问题时,你会更好地回答它。

TL;成为多面手的三个主要好处是:你培养了强烈的自主意识。你让事情进展得更快。你会成为会说几种语言的人。

多面手与专家

通才是那些什么都懂一点的人。他们的知识扩展到几个知识领域,但有时可能是肤浅的。

专家是某一特定知识领域的专家。他们可能相当强大,但如果他们在另一个地区行动,他们可能会失去他们的力量。

你应该记住,凡事都有一定程度的专业化。没有所谓的纯通才或纯专科

例如,如果你是一名工程师,你的专业领域是工程学。所以,如果你做不好律师,我不会对你评头论足。但是,为了你自己,你应该了解一点法律。你不能忽视他们的存在。

就像我之前说的,你不必事事都是专家。关键是要在一般化和特殊化之间找到平衡

数据科学领域的通才和专家

在数据科学中,你可以说每个角色本身就是某种专门化。数据工程师做数据工程。数据分析师做数据分析。数据科学家做数据科学。

我见过数据科学家无法训练自己的模型,因为他们没有数据工程师来为他们获取数据。

我也见过数据工程师无法获得业务洞察力,因为他们不了解业务需求。

如果您所在的组织没有足够的资源来雇佣 4 或 5 个人来完成整个数据生命周期,这可能会成为一个问题。这是一种专业化程度,不是每个公司都能负担得起的。

这里更大的问题是我们习惯于有专门的角色。这是我们的社会和公司多年来一直遵循的模式。我们学习,我们专攻,我们想在我们的专业领域执行。

尽管如此,公司和数据从业者可以从通才方法中获益更多。

不要误解我,我不是说我们不应该有专家。这里的要点是我们应该有更多的通才

事实上,一些人,比如网飞大学数据科学和工程的前副总裁 Eric Colson,认为我们应该组织我们的数据科学团队的方式是拥有多面手而不是专家。

https://hbr.org/2019/03/why-data-science-teams-need-generalists-not-specialists

成为多面手的好处

我从数据分析师做起。然后,我想过渡到数据科学家。为此,我给自己找了一家新公司。但是,当我到达新公司时,事情发生了意想不到的变化。

我记得首席技术官告诉我的一件事是,我在那里不仅仅是培训模型。如果我想在公司茁壮成长,我必须做得更多。我必须自己完成整个生命周期,,即,自己获取数据,转换数据,训练模型,并部署它们。

那是我当时不喜欢的事情。但是,现在我明白他想说什么了。他不想要专家,而是要多面手。这家公司负担不起如此程度的专业化。

我就是这样开始成为通才的。这也是我开始更清楚地看到成为多面手的好处的地方。

你发展出一种深刻的自主意识

我很快发现了成为某种怪异的“全栈数据科学家”的好处。最主要的是自主性。

一开始,我做任何事情都需要队友的支持。我需要帮助从数据库中获取数据,并转换它。此外,我需要帮助部署模型和构建东西来消费模型,等等。

在我掌握了窍门之后,我意识到能够独自完成整个生命周期是多么有用。当我的队友忙于解决其他问题时,我可以轻松地独自做事情。

我成为了一个能够独立面对问题的人,并通过这样做来帮助球队。

你让事情进展得更快

有时候,公司不需要完美的东西。他们只需要知道某件事是否可行。如果是值得追求的东西。越快知道越好。

如果你不得不协调更少的人,就更容易探索新事物。这就是你如何避免协调成本

此外,给团队中的一个人自主权要比给整个团队自主权容易得多。你不能因为你的整个团队都在尝试一个新工具,或者类似的东西,就让关键的事情无人关注。

你会成为会说几种语言的人

在成为一名古怪的“全栈数据科学家”之后,我过渡到了数据工程。我最初在一家公司领导数据管道的实施。

我意识到的一件事是,作为多面手,我可以说几种“语言”因此,我能够轻松地在团队的不同角色之间转换不同的需求。

当我不得不与数据工程师交谈时,我可以轻而易举地做到。数据分析师也是如此。同样,它也发生在商业人士身上。我能够用每个人自己的语言与他们交谈,并帮助协调团队。

这是我觉得有用的东西。如果对方不说“相同的语言”,表达你的需求可能会很困难

最后的想法

这种关于通才和专家的讨论可能很难进行。你应该利用所有的信息,自己决定你想追求什么。

如果你想更深入地了解这方面的内容,我推荐你读一些其他的文章。

感谢阅读!

如果你想随时更新我的作品, 请加入我的 简讯 偶尔,我会和我的读者分享一些东西。如果你加入我会很感激的:)

奥运会的超支有多大?

原文:https://towardsdatascience.com/how-big-is-cost-overrun-for-the-olympics-46e803cbf7d5?source=collection_archive---------31-----------------------

所有游戏,无一例外,都有过成本超支。因为没有其他类型的大型项目是这种情况。

亚历山大·布齐尔和丹尼尔·伦恩

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

布莱恩·特纳Unsplash 上拍摄的照片

下表显示了 1960-2016 年奥运会的实际超支百分比。在 1960 年至 2016 年的 30 场比赛中,有 19 场比赛的成本超支数据可用。投标预算和最终成本之间的差异的统计测试表明,这种差异在统计上具有压倒性的显著性。也就是说,从统计数据来看,奥运会的成本超支非常明显。应该提到的是,如果按名义价值(包括通货膨胀)计算成本超支,那么成本超支会大得多。从这个意义上说,显示的数字是保守的。*我们发现实际成本超支的平均值和中位数如下:

  • 所有游戏:平均成本超支为 172%(中位数为 118%)。
  • 夏季奥运会:平均超支为 213%(中位数为 120%)。
  • 冬季奥运会:平均超支 142%(中位数 118%)。

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

来源:https://bit.ly/376vMo6

在所有大型项目中,奥运会的平均成本超支最高,实际超支 172%。

尽管夏季奥运会和冬季奥运会的平均成本超支之间的差异相对较大,为 71 个百分点,但这两种类型的奥运会在成本超支方面的差异在统计上并不显著。因此,从统计学的角度来看,夏季奥运会和冬季奥运会的成本超支没有区别,可以将这些数据汇集起来进行统计分析,例如,对未来奥运会的预算进行更准确的参考类预测。

我们进一步看到:

  • 19 款游戏中有 15 款(79%)的成本超支超过 50%。
  • 19 款游戏中有 9 款(47%)的成本超支超过 100%。

警惕的读者可能会怀疑,所有比赛中最低的超支是北京 2008 年奥运会的 2%

从这些统计数据来看,很明显,奥运会存在着巨大的成本超支风险。

对于夏季奥运会,超支最多的是 1976 年蒙特利尔奥运会,超支 720%,其次是 1992 年巴塞罗那奥运会,超支 266%。2008 年北京奥运会超支最小,为 2%,其次是 2004 年雅典奥运会,为 49%。对于冬季奥运会,最大的成本超支是 1980 年普莱西德湖奥运会的 324%,其次是 2014 年索契冬奥会的 289%。2010 年温哥华冬奥会超支最小,为 13%,其次是 2002 年盐湖城冬奥会,为 24%。

警惕的读者可能会怀疑,所有比赛中最低的超支是北京 2008 年奥运会的百分之二。众所周知,中国的经济报道缺乏可靠性。然而,北京 2008 年奥运会 68 亿美元的总成本和每位运动员 622,000 美元的成本都高于大多数其他夏季奥运会。因此,报告的费用被认为是足够举办北京奥运会的,我们没有看到官方数字被操纵的直接证据,因此应该拒绝接受。因此,像其他观察中国经济数据的人一样,我们也包括了这些数据,并警告说,鉴于中国篡改数据的历史,这些数据可能不如其他国家的数据可靠。同样,这意味着我们在奥运会中的平均超支费用是保守的。

奥运会的高平均超支成本,加上离群值的存在,应该成为任何考虑举办奥运会的人,尤其是小型或脆弱经济体的谨慎理由

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

来源:https://bit.ly/376vMo6

根据上述数据,我们进一步观察了奥运会的成本超支情况:

  1. 所有游戏,无一例外都有成本超支。没有其他类型的大型项目是这种情况。对于其他项目类型,通常有 10-20%的项目符合或低于预算。对于奥运会来说是零。这一点值得仔细考虑。预算通常被确定为在项目上花费的最大值,或者说是期望值。然而,在奥运会中,预算更像是一个持续超支的虚构的最小值。此外,与其他大型项目相比,每项预算都有法律要求,要求主办城市和国家政府保证支付奥运会的超支费用。我们的数据表明,这种担保类似于为该活动开一张空白支票,肯定费用会比报价高。实际上,投标预算与其说是预算,不如说是首期付款,以后还会分期付款。
  2. 奥运会的平均成本超支**是所有大型项目中最高的,按实际价值计算高达 172%。相比之下,Flyvbjerg 等人(2002 年)发现,大型交通项目的平均成本超支为公路 20%,大型桥梁和隧道 34%,铁路 45%;Ansar 等人(2014 年)发现巨型大坝的超限率为 90 %;Budzier 和 Flyvbjerg (2011)对大型 IT 项目的预测是 107 %,所有的预测都是真实的。奥运会的高额超支可能与项目交付的固定期限有关:开幕日期不可更改。因此,当出现问题时,不能像其他大型项目那样,在进度和成本之间进行权衡。在奥运会上,经理们所能做的就是投入更多的钱来解决问题,这就是所发生的事情。从这个意义上说,举办奥运会就像开一张空白支票。
  3. 奥运会的平均超支额很高,再加上离群值的存在,应该成为任何考虑主办奥运会的人,尤其是那些几乎没有能力吸收不断上涨的成本和相关债务的小型或脆弱经济体保持谨慎的原因。数十亿美元项目成本超支 50%以上的小风险也应该引起政府官员和纳税人的关注,因为这种超支可能会对未来几十年产生财政影响,就像蒙特利尔在 1976 年夏季奥运会上花了 30 年才还清 720%成本超支所产生的债务一样(Vigor,Mean,和 Tims 2004: 18),雅典在 2004 年奥运会上,奥运成本超支和相关债务加剧了 2007-16 年的金融和经济危机。

_____________

*)有关完整的故事,包括参考资料和注释,请参见 Flyvbjerg、Bent、Alexander Budzier 和 Daniel Lunn,2021 年,“回归尾部:为什么奥运会会失败”,环境与规划 A:经济与空间,第 53 卷,第 2 期,2021 年 3 月,第 233-260 页。这里有免费的 pdf:https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3686009

你最喜欢的城市有多适合骑自行车?

原文:https://towardsdatascience.com/how-bike-able-is-your-favorite-city-886332b9a94c?source=collection_archive---------34-----------------------

使用数据科学测量城市中骑车人的友好程度。

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

穆里略·德·保拉在 Unsplash 上的照片

无论你是职业自行车还是业余爱好,你可能都知道骑自行车有多大好处。从山路到穿越城市,自行车可以让你探索新的地方,锻炼身体,并在途中进行社交。在这个小故事中,我们将从数据科学的角度来看骑自行车的最佳城市。首先,让我们看看我们将要使用的一些工具。

工具和数据:

  • Jupyter 笔记本
  • OSMnx
  • 网络 x
  • 海生的
  • 和 Python
  • 数据:世界主要城市及其人口数据集(链接:【https://data.un.org/Data.aspx?d=POP】T4&f = tableCode % 3a 240)

标准:

什么使得城市对自行车友好?首先,它应该有专门的自行车路线和车道。让我们把它定义为自行车路线长度与总路线长度之比**。这个比例越高,城市就越适合自行车。为了计算这一点,我们应该为一个特定的城市(比如东京)生成自行车和整个街道网络,如下所示:**

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

以下是包括东京自行车道在内的道路:

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

现在,让我们计算 100 个城市的自行车道与总道路的比率,并查看使用 OSMnx 街道长度函数得出的结果:

这是使用 Seaborn 生成的自行车路线比例最高的前 20 个城市的条形图:

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

在这项指标中,排名最高的城市是刚果民主共和国的金沙萨,得分为 1.0,这意味着所有街道都可以骑自行车,其次是中国的东莞和印度尼西亚的万隆。

接下来,我们可以看看每个人口有多少骑行路线。因此,我们可以定义另一个指标:每个城市的自行车道长度除以人口密度。较大的值意味着城市居民可以使用更多的自行车道,因此对自行车更加友好。另一方面,较小的数值意味着更多的人使用较少的自行车道。让我们看一下代码,然后看看 20 个最大值的条形图:

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

这里的数据显示了与我们的第一个指标不同的故事,美国的亚特兰大、休斯顿和达拉斯得分最高。

那么,让我们看看这些城市的一些街道网络,即亚特兰大和金沙萨。首先,这是每个城市的网络图:

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

亚特兰大

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

金沙萨

他们看起来当然彼此不同,有些视觉上的差异。亚特兰大的网络在某些地区看起来稍微更“集中”,而金沙萨的网络看起来非常对称和均匀分布。我们可以使用 OSMnx 量化这些差异:

OSMnx 提供了一个名为“基本统计”的功能,我们可以使用它来查看关于城市街道网络的各种指标。以下是我们将在熊猫数据框架中使用的变量:

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

首先,“n”和“m”分别代表图中节点和边的数量。如你所见,亚特兰大两者兼而有之。那么 k_avg 代表平均节点度,意味着从图中的节点出现或进入的道路的平均数量。在这种情况下,金沙萨的这一指标值较高。

对于其他指标,您可以看到亚特兰大在十字路口数和街道总长度方面得分较高,但金沙萨的平均街道长度较高,这有助于理解我们上面看到的图表。

总之,在这个小故事中,我们分析了一些指标,看看世界上哪些城市对自行车更友好,然后我们看了看排名前两位的城市,以了解是什么使它们如此友好。我希望你喜欢这个故事,如果你想看看代码,你可以在这里找到它:https://github . com/DeaBardhoshi/Data-Science-Projects/blob/main/bike ability % 20 pipeline . ipynb

外面的马路有多热闹?

原文:https://towardsdatascience.com/how-busy-is-the-road-outside-de8e9b1b3cc3?source=collection_archive---------35-----------------------

从零开始逐个任务地进行数据科学

我们正在自动计算过往车辆

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

照片由 CHUTTERSNAPUnsplash 上拍摄

如果我有像上面这样的好照片,我计算过往车辆的项目会容易得多。相反,我只能处理低质量的模糊图像。这篇文章是我个人在 一个计算机视觉&深度学习涅槃 之旅的延续。很多时候,它看起来更像克里斯·雷亚的《地狱之路》。 《在你穿越旷野从沙漠到井的旅途上》 。我的领域似乎是计算机科学、深度学习和计算机视觉。沙漠代表了我对井的求知欲,也许是指我经常饮用的书籍、教程和文章。如果都是这样,那么我邀请你到 喝我井里的水,欣赏我系列的下一篇文章 。和我一起去数过往的车辆。

如果你加入了 mid quest,你可以在这里了解整个系列。之前,我制作摄像机,部署运动眼,并定位摄像机以记录运动,同时保护道路使用者的隐私和安全。最后,我砍出了相当多的代码。现在,我有了整整一周的数据,并渴望更新你们所有人的练习。

检索图像

一旦设计并调好数据收集器,数据检索就是或者应该看起来是自动的。至少在我项目的这个阶段,我是这样的。下面的图 1 显示了一个 Motion Eye 操作系统(摄像机 1)的屏幕截图。每一天都显示在左侧,我可以检索任何一天的所有图像的“压缩”文件。

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

图 1 来自 Motion Eye OS 的屏幕截图—相机 1 —作者提供的图片。

从 1 月 22 日到 1 月 28 日有一整套数据。1 月 29 日被抓获时正在进行中。该系统在每天从格林威治时间早上 7 点到下午 5 点工作。在早上 7 点之前和下午 5 点之后,是黑暗的,设备不记录活动。每一天都是一个单独的文件夹,每个图像文件都被命名为 hour-minute-second.jpg,10–49–24.jpg 代表上午 10:49:24 的检测触发。

检索只需要登录到运动眼设备,每天下载一个 ZIP 文件。由于 Motion Eye 是基于网络的服务,我可以直接从我的数据科学工作站登录。我确实创建了一个 UPS 支持的 Raspberry Pi 文件服务器,但是我们需要保持简单。下载并解压缩目标文件夹中的 zip 文件后,我们的数据检索就完成了。但是,下载几百张照片不算数据!对吗?我们需要像石油公司一样提炼图像,将原油运到炼油厂生产天然气。

数据精炼厂

我想,就像那些在野外钻探石油的野人一样,我们也在这里发现了石油。代替桶稠厚的原油,我们有文件夹的模糊图像来提炼。将原油转化成为社会提供动力的产品被证明是一大笔钱。数据科学,机器学习和深度学习,在我看来,是石油工人移动工具,和原油到炼油厂的应用。

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

照片由 Zbynek BurivalUnsplash 上拍摄

谢天谢地,杂乱的数据比一桶原油干净多了。我把我的提炼步骤添加到一个要点中,让我们讨论一下要点。之前,我讨论了我创建的 myYolo 类,我提到代码的来源是来自www.pyimagesearch.com。

第 5 行和第 6 行帮助描述那些桶原油,图像的文件夹,被存储在哪里。第 14 行创建了 myYolo 类的一个实例,因为我用 GPU 配置了我的工作站,所以我们可以将目标设备设置为‘GPU’。第 16 到 21 行提供了一个助手函数,允许我将任何给定的对象持久化到磁盘上。第 24 到 29 行是实际的精炼过程。第 27 行调用实例上的 setter 方法,实际上只设置了目标文件夹或原油桶。第 28 行通过 YOLO 网络发送整个文件夹,第 33 行将数据溢出到磁盘。

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

图 2 精炼步骤的最终输出。

上面的图 2 为您提供了终端输出的屏幕截图。我正在使用可视化代码,你可以看到我有一个名为“opencv_cuda”的虚拟环境。用 Cuda 构建 OpenCV 二进制文件对我来说是一个巨大的痛苦。每个文件夹都经过了处理,我们可以看到每个图像花了 0.037 秒穿越 Yolo 网络。

因此,现在我们有了数据,但我们仍然处于中游阶段,我们将数百张照片处理成一个数据对象,现在需要将产品交付给最终消费者。

消费数据

你是否曾希望你能把你的大脑接入数据管道,直接消耗掉它?我曾经和年轻人开玩笑,问他们的大脑中是否有一个“USB 端口”?如果是这样,他们可以插入我的大脑,下载和上传我的数据!明明看了所有的矩阵片

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

Vlad TchompalovUnsplash 拍摄的照片

原始数据包含字典列表。

[{'image': '/home/david/Documents/projects/yolo-object-detection/images/2021-01-22/13-30-33.jpg', 'result': ['car: 0.8965'], 'timing': '[INFO] YOLO took 0.391402 seconds'}
..
]

每个字典都有一组有限的键。这些是:-

  • **图像:**提供原始图像文件和完整路径;
  • **结果:**图像中检测到的物体的 python 列表。可能有一个或多个对象。
  • **计时:**包含一个文本,记录图像穿越 YOLO 网络所用的时间。可能没用。

我第一次使用可视代码作为我的笔记本环境。很难说我对视觉代码和网页浏览器的感觉,因为感觉很奇怪。视觉代码可能是一个更好的笔记本环境。图 3 展示了一个很棒的特性——可变查看器。

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

图 3:可视化代码 Jupyter 笔记本扩展——使用变量查看器。作者图片

我将笔记本导出为 PDF 格式,并添加到 GITHUB 中。大部分代码都是真正标准的,只提供了几个 CSV 文件,我可以做进一步的工作。图 4 显示了数据。图 4(左)显示了每小时通过的交通流量。图 4(右)显示了单个事件和检测到的对象。为了制作一些图表,我决定使用 Power BI

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

图 CSV 文件的图示。图片由作者提供。

采用 Power BI 的视觉效果

使用 Power BI,我做了一些进一步的操作,然后生成了一些图表。下面包括图 5 和图 6,展示了我创建的一些图像。

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

图 5:作者展示 YOLO 探测到的物体的图片

Yolo 模型在 198 张照片中没有检测到任何东西(图 5)。汽车是最常经过的交通工具,但我们也有“火车”,这是不太可能的。Yolo 模型当然需要训练,以检测爱尔兰当地的车辆。

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

图 6:作者提供的图片显示了外部平均交通流量的折线图

外面的马路有多热闹?

图 6 给出了研究问题的答案。鉴于全球疫情,该数据不太可能代表典型模式。从早上 7 点开始,到 17 点停 7 天,我们看到的都是一般的过往车辆。早上 7 点这条路很安静。一般来说,白天外面的街道上每小时至少有 12 辆车通过。

外面的路很忙吗?我猜有些道路每秒有 12 辆车,所以这真的归结为透视。 我将继续我的个人旅程,踏上我寻求的那个计算机视觉&深度学习的涅槃之路。 更多时候,似乎更像是克里斯·雷亚的《地狱之路》。我们会看到的!

你如何利用人工智能来防止网络欺凌?

原文:https://towardsdatascience.com/how-can-ai-help-to-prevent-cyberbullying-f630073da478?source=collection_archive---------27-----------------------

变更数据

让我们通过例子来学习,用 PyTorch 训练一个能够在在线对话中识别毒性的神经网络

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

奥斯丁·帕切科Unsplash 上拍摄

网络欺凌是一种利用电子手段进行欺凌的形式。随着数字领域的扩大和技术的进步,这种现象变得越来越普遍,尤其是在青少年中。

三年前,有毒评论分类挑战发表在 Kaggle 上。竞赛的主要目的是开发有助于改善在线对话的工具:

讨论你关心的事情可能会很困难。网上辱骂和骚扰的威胁意味着许多人停止表达自己,放弃寻求不同意见。平台努力有效地促进对话,导致许多社区限制或完全关闭用户评论。

本文从理论部分开始,您将学习使用神经网络进行文本处理的基本概念。然后,它继续一个例子,如何训练一个卷积神经网络,检测有毒的评论。

通过阅读理论部分,你会学到:

  • 什么是 NLP?
  • 伯特是什么?
  • 什么是卷积神经网络(CNN)?
  • 如何将文本转换为嵌入?
  • 什么是 KimCNN?

通过阅读实用部分,你将学到:

  • 如何加载数据
  • 如何定义训练、验证和测试集
  • 如何用 PyTorch 训练卷积神经网络
  • 如何测试模型

在文章的最后,我还分享了所有代码的链接,以便您可以自己运行它。

让我们从理论开始

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

照片由叶戈尔·迈兹尼克Unsplash 上拍摄

什么是 NLP?

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

照片由蒂姆·莫斯霍尔德Unsplash 拍摄

自然语言处理(NLP)是语言学、计算机科学、信息工程和人工智能的一个分支,涉及计算机和人类语言之间的交互,特别是如何编写计算机程序来处理和分析大量自然语言数据。自然语言处理中的挑战通常涉及语音识别、自然语言理解和自然语言生成。

伯特是什么?

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

Rajeshwar BachuUnsplash 上拍摄的照片

来自变压器的双向编码器表示(BERT)是一种语言模型,由谷歌的 Jacob Devlin 和 Ming-Wei Chang 于 2018 年创建并发布[3]。BERT 用一种更快的基于注意力的方法取代了递归神经网络的顺序性质。BERT 使用 Transformer,这是一种学习文本中单词(或子单词)之间上下文关系的注意力机制。一般来说,Transformer 包括两个独立的机制——一个读取文本输入的编码器和一个为任务生成预测的解码器。

BERT 在各种 NLP 任务中取得了最先进的结果。由于 BERT 的目标是生成一个语言模型,所以只有编码器机制是必要的。要了解关于 BERT 的更多信息,请阅读 Rani Horev 的文章 BERT 解释:NLP 的艺术语言模型

在本文中,我们将使用 BERT 作为编码器,使用单独的 CNN 作为解码器,为任务产生预测。

我们可以直接使用 BERT 来完成这项任务(如使用 BERT 的多标签文本分类—强大的转换器中所述),但我们需要在转换器上重新训练多标签分类层,以便它能够识别仇恨言论。

卷积神经网络

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

照片由 Alina GrubnyakUnsplash 上拍摄

在深度学习中,卷积神经网络是一类神经网络,已被证明在图像识别和分类等领域非常有效。除了为机器人和自动驾驶汽车的视觉提供动力之外,CNN 还成功地识别了人脸、物体和交通标志。

由于这些成功,许多研究人员试图将它们应用于其他问题,如 NLP。

要了解更多关于 CNN 的信息,请阅读这篇关于 CNN 的文章:卷积神经网络的直观解释

如何将文本转换为嵌入?

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

Max 陈Unsplash 上拍照

为了让卷积神经网络处理文本数据,我们需要将评论的每个单词转换成一个向量。

Huggingface 开发了一个名为 transformers 的自然语言处理(NLP)库,可以将单词转换为矢量(以及许多其他东西)。它还支持多种先进的自然语言处理语言模型,比如 BERT。

使用 BERT,评论中的每个单词都被转换成一个大小为[1 x 768]的向量(768 是 BERT 嵌入的长度)。

一条评论由多个单词组成,所以我们得到一个矩阵[n x 768],其中 n 是一条评论中的单词数。由于伯特在第一句话的开头插入了[CLS]标记,并在每句话的结尾插入了[SEP]标记,因此实际上有超过n的单词。

在本文中,我们将使用一个更小的 BERT 语言模型,它有 12 个注意层,使用 30522 个单词的词汇量。

BERT 使用一个标记器将输入文本分割成词汇表中可用的标记列表。它还通过将单词拆分为子单词来学习词汇表中没有的单词。

什么是 KimCNN?

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

照片由莫里茨·金德勒Unsplash 上拍摄

KimCNN [1]是由纽约大学的 Yoon Kim 在 2014 年的一篇论文《用于句子分类的卷积神经网络》中引入的。当时,它提高了多个 NLP 任务的准确性。KimCNN 使用与用于分析视觉图像的网络类似的架构。

KimCNN [2]的步骤:

  1. 取一个单词嵌入在输入[n x m]上,其中 n 代表一个句子中的最大单词数,m 代表嵌入的长度。
  2. 对嵌入应用卷积运算。它使用不同大小的多个卷积[2 x m][3 x m][4 x m]。这背后的直觉是模拟 2 个单词、3 个单词等的组合。注意,卷积宽度是m -嵌入的大小。这不同于 CNN 对图像的处理,因为他们使用像[5 x 5]这样的平方卷积。这是因为[1 x m]代表一个完整的单词,用较小的内核大小运行卷积是没有意义的(例如,在单词的一半上进行卷积)。
  3. 应用校正线性单元(ReLU)来增加模拟非线性问题的能力。
  4. 应用 1-max 池对输入表示进行下采样,并帮助防止过拟合。更少的参数也降低了计算成本。
  5. 将前面操作中的向量连接成一个向量。
  6. 添加一个脱层来处理过度拟合。
  7. 应用 softmax 函数在类之间分配概率。我们的网络在这里有所不同,因为我们正在处理一个多标签分类问题——每个评论可以有多个标签(或者没有标签)。我们使用一个 sigmoid 函数,它为每个类在 0 和 1 之间调整 logits。这意味着可以同时预测多个类别。

让我们继续实际的部分

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

照片由布雷特·乔丹Unsplash 上拍摄

初始化库

在我们开始之前,我们需要导入我们将要用来开发 AI 模型的所有库。

如果您的计算机上缺少任何库,您可以使用以下软件进行安装:

pip install library_name

让我们导入库:

**%**matplotlib inlineimport logging
import time
from platform import python_versionimport matplotlib
import matplotlib.pyplot **as** plt
import numpy **as** np
import pandas **as** pd
import sklearn
import torch
import torch.nn **as** nn
import torch.nn.functional **as** F
import transformers
from sklearn.metrics import roc_auc_score
from torch.autograd import Variable

加载数据

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

毒性评论分类挑战 —图片来自 lamamatropicana

前往有毒评论分类挑战下载数据(解压后将文件夹重命名为data)。

我们将使用train.csv来训练和测试模型,因为test.csv中的条目没有标签,并且用于 Kaggle 提交。

让我们加载数据。

df **=** pd**.**read_csv('data/train.csv')

我们设置随机种子,使实验可重复,并打乱数据集。

np**.**random**.**seed(42)

改组数据的目的是减少方差,并确保模型不会过度适应训练集中的样本序列。

df **=** df**.**sample(frac**=**1)
df **=** df**.**reset_index(drop**=**True)

数据集由评论和不同类型的毒性组成,如威胁、淫秽和侮辱。这个问题属于多标签分类的范畴,因为每个评论都可以被打上多个侮辱标签(或者没有)。

df**.**head()

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

数据集中的前几个样本

让我们展示第一条评论——别担心,这不是毒性威胁:)

df**.**comment_text[0]

天啊,你是不是健忘!我们已经讨论过为什么马克思不是无政府主义者,也就是说,他想用一个国家来塑造他的“社会主义者”因此,他是一个国家主义者——与无政府主义者相反。我认识一个人,他说,当他老了,牙齿掉光了,他就不吃肉了。你会说他是素食主义者吗?

例如,id 为 103 的评论被标记为有毒、严重 _ 有毒、淫秽、侮辱(评论 _ 文本被有意隐藏)。该模型应该能够像这样标记评论。

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

数据集中第 103 个样本的目标

定义数据集

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

照片由米卡·鲍梅斯特Unsplash 上拍摄

当我们在 CPU 上训练神经网络(NN)时,我们将训练集的大小限制为 10.000 条评论。

验证集(1.000 注释)用于测量训练期间模型的准确性,测试集(2.000 注释)用于测量模型训练后的准确性。

让我们加载 BERT 模型、Bert Tokenizer 和 bert-base-uncased 预训练权重。

我们将每个评论转换成 2D 矩阵。矩阵有一个预定义的大小,但是有些注释比其他注释有更多的单词。要将注释转换为矩阵,我们需要:

  • 将评论的长度限制在 100 字以内(100 是任意数字),
  • 用少于 100 个单词填充注释(在末尾添加 0 个向量)。

BERT 不像一些上下文无关的预训练语言模型(Word2Vec、FastText 或 GloVe)那样,简单地将每个单词映射到一个嵌入。为了计算上下文,我们需要将注释输入到 BERT 模型。

在下面的代码中,我们将注释标记化、填充并转换为 PyTorch 张量。然后,我们使用 BERT 将文本转换为嵌入。这个过程需要一些时间,所以要有耐心。

这是第一个用 BERT 转换成单词嵌入的评论。它有一个[100 x 768]形状。

x_train[0]

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

第一个评论没有毒性,只有 0 值。

y_train[0]

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

用 PyTorch 训练模型

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

马库斯·温克勒在 Unsplash 上的照片

下面的代码用 PyTorch 库定义了 KimCCN。

让我们设置模型的参数:

  • embed_num 表示评论中的最大字数(本例中为 100)。
  • embed_dim 表示 BERT 嵌入的大小(768)。
  • class_num 是要预测的毒性威胁的数量(6)。
  • kernel_num 是每个卷积运算的滤波器数量(例如,[2 x m]卷积的 3 个滤波器)。
  • 卷积的内核大小。看两个单词、三个单词等的组合。
  • dropout 是训练阶段每次更新时随机设置隐藏单元为 0 的百分比。提示:确保在测试/验证阶段禁用丢失,以获得确定性输出。
  • 静态参数 True 表示我们不计算嵌入的梯度,它们保持静态。如果我们将其设置为 False,将会增加模型需要学习的参数数量,并且可能会过拟合。
embed_num **=** x_train**.**shape[1]
embed_dim **=** x_train**.**shape[2]
class_num **=** y_train**.**shape[1]
kernel_num **=** 3
kernel_sizes **=** [2, 3, 4]
dropout **=** 0.5
static **=** Truemodel **=** KimCNN(
    embed_num**=**embed_num,
    embed_dim**=**embed_dim,
    class_num**=**class_num,
    kernel_num**=**kernel_num,
    kernel_sizes**=**kernel_sizes,
    dropout**=**dropout,
    static**=**static,
)

我们将模型训练 10 个时期,批大小设置为 10,学习率设置为 0.001。我们使用带有 BCE 损失函数(二进制交叉熵)的 Adam 优化器。二元交叉熵损失允许我们的模型为标签分配独立的概率,这对于多标签分类问题是必要的。

n_epochs **=** 10
batch_size **=** 10
lr **=** 0.001
optimizer **=** torch**.**optim**.**Adam(model**.**parameters(), lr**=**lr)
loss_fn **=** nn**.**BCELoss()

下面的代码为训练生成批量数据。

让我们训练模型。

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

在多个时期训练模型

在下图中,我们可以观察到训练和验证损失在 10 个时期后收敛。

plt**.**plot(train_losses, label**=**"Training loss")
plt**.**plot(val_losses, label**=**"Validation loss")
plt**.**legend()
plt**.**title("Losses")

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

培训和验证损失

测试模型

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

JESHOOTS.COM 在 Unsplash的照片

模型被训练。我们使用测试集上的受试者操作特征曲线下面积(ROC AUC)来评估模型性能。scikit-learn 的 AUC 实现支持二进制和多标记指标格式。

让我们使用模型来预测测试集的标签。

model**.**eval() *# disable dropout for deterministic output***with** torch**.**no_grad(): *# deactivate autograd engine to reduce memory usage and speed up computations*
    y_preds **=** []
    batch **=** 0
    **for** x_batch, y_batch, batch **in** generate_batch_data(x_test, y_test, batch_size):
        y_pred **=** model(x_batch)
        y_preds**.**extend(y_pred**.**cpu()**.**numpy()**.**tolist())
    y_preds_np **=** np**.**array(y_preds)

对于每个评论,该模型输出 0 到 1 之间 6 个值(每个毒性威胁一个)。我们可以使用 0.5 作为阈值,将所有大于 0.5 的值转换为毒性威胁,但让我们先计算 AUC。

y_preds_np

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

我们为测试集提取毒性威胁的真实标签。真正的标签是二进制值。

y_test_np **=** df_test[target_columns]**.**valuesy_test_np[1000:]

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

一个模型的 AUC 等于该模型将随机选择的正面例子排序高于随机选择的负面例子的概率。AUC 越高越好(虽然没那么简单,我们下面会看到)。当 AUC 接近 0.5 时,意味着该模型无论如何都没有标记分离能力。当 AUC 接近 0 时,这意味着我们需要反演预测,它应该工作得很好:)

让我们计算每个标签的 AUC。

auc_scores **=** roc_auc_score(y_test_np, y_preds_np, average**=**None)
df_accuracy **=** pd**.**DataFrame({"label": target_columns, "auc": auc_scores})
df_accuracy**.**sort_values('auc')[::**-**1]

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

在上表中,我们可以观察到该模型对每个标签都实现了高 AUC。注意,在处理不平衡数据集时,AUC 可能是一个误导性的指标。

数据集不平衡吗?

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

照片由阿齐兹·阿查基Unsplash 上拍摄

当 50%的标签属于每个类时,我们说数据集是平衡的。当这个比率接近 90%到 10%时,数据集是不平衡的。在不平衡数据集上训练的模型的已知问题是它们报告的精确度很高。如果模型预测值总是 0,那么它可以达到 90%的准确率。

让我们检查一下是否有不平衡的数据集。

positive_labels **=** df_train[target_columns]**.**sum()**.**sum()
positive_labels# Output:
2201all_labels **=** df_train[target_columns]**.**count()**.**sum()
all_labels# Output:
60000positive_labels**/**all_labels# Output:
0.03668333333333333

60000 个标签中只有 2201 个是阳性的。数据集是不平衡的,所以上面报道的准确性不应该太认真。

健全性检查

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

照片由 Antoine DautryUnsplash 拍摄

让我们做一个健全性检查,看看模型是否预测所有评论为 0 毒性威胁。

df_test_targets **=** df_test[target_columns]
df_pred_targets **=** pd**.**DataFrame(y_preds_np**.**round(), columns**=**target_columns, dtype**=**int)
df_sanity **=** df_test_targets**.**join(df_pred_targets, how**=**'inner', rsuffix**=**'_pred')

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

df_test_targets**.**sum()

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

df_pred_targets**.**sum()

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

我们可以观察到,该模型预测了 3 种毒性威胁:有毒、淫秽和侮辱,但它从未预测到严重毒性、威胁和认同仇恨。这似乎并不伟大,但至少它没有把所有的评论都标上零。

df_sanity[df_sanity**.**toxic **>** 0][['toxic', 'toxic_pred']]

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

我们看到这个模型正确地预测了一些有毒的评论。

结论

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

照片由Dawid za wiaUnsplash 上拍摄

我们用 BERT 嵌入训练了一个 CNN 来识别仇恨言论。我们使用相对较小的数据集来加快计算速度。代替 BERT,我们可以使用 Word2Vec,这将加速从单词到嵌入的转换。我们没有花时间优化模型,因为这不是这篇文章的目的。所以报道的准确性不应该太认真。更重要的是概述了不平衡数据集、AUC 和漏失层的缺陷。

我们可以用 TD-IDF 和逻辑回归来代替像 BERT 这样的新工具。你想读一篇关于它的文章吗?请在下面的评论中告诉我。

要在你的机器上运行代码,下载这个 Jupyter 笔记本

在你走之前

- [50% Off All AI Nanodegree Programs!](https://imp.i115008.net/c/2402645/998478/11298) [Course]- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)

上面的一些链接是附属链接,如果你通过它们进行购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。

推特上关注我,在那里我定期发关于数据科学和机器学习的推特。

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

参考

[1]尹金,卷积神经网络用于句子分类(2014),https://arxiv.org/pdf/1408.5882.pdf

[2]https://arxiv.org/pdf/1510.03820.pdf【卷积神经网络用于句子分类的敏感性分析(及从业者指南)】张烨(2016)

[3] Jacob Devlin,BERT:面向语言理解的深度双向转换器预训练(2018)https://arxiv.org/abs/1810.04805

数据科学家如何使用并行处理?

原文:https://towardsdatascience.com/how-can-data-scientists-use-parallel-processing-17194fffc6d0?source=collection_archive---------13-----------------------

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

马克-奥利维尔·乔多因Unsplash 上拍摄的照片

使用多重处理和 Joblib 的 Python 并行处理

终于,我的程序运行了!我应该去买杯咖啡吗?

我们数据科学家有强大的笔记本电脑。采用四核或八核处理器和睿频加速技术的笔记本电脑。我们通常使用具有更多内核和计算能力的服务器。但是我们真的使用了我们手头的原始力量吗?

我们没有充分利用我们的资源,而是常常无所事事,等待耗时的过程结束。有时我们会等上几个小时,即使紧急的交付项目已经快到截止日期了。我们能做得更好吗?

在这篇文章中,我将解释如何使用多重处理和 Joblib 来使你的代码并行,并从你的大机器中获得一些额外的工作。

1.使用单参数功能的多重处理:

为了激发多重处理,我将从一个问题开始,我们有一个大的列表,我们希望对列表中的每个元素应用一个函数。

我们为什么要这么做?这可能看起来是一个微不足道的问题,但这尤其是我们在数据科学中每天都在做的事情。例如:我们有一个模型,我们用不同的超参数运行模型的多次迭代。或者,我们在一个大的数据帧中创建新的特征,并使用apply 关键字对数据帧逐行应用函数。到本文结束时,您将能够使用这个简单的结构并行化您在数据科学中面临的大多数用例。

所以,回到我们的玩具问题,假设我们想对列表中的所有元素应用 square 函数。

def square(num):
    return x**2

当然,我们可以使用简单的 python 在列表的所有元素上运行上述函数。

result = [f(x) for x in list(range(100000))]

但是,上面的代码是按顺序运行的。下面是我们如何使用多重处理将这个函数应用到一个给定列表list(range(100000))的所有元素,使用我们强大的计算机中的 8 个内核并行执行。

from multiprocessing import Pool
pool = Pool(8)
result = pool.map(f,list(range(100000)))
pool.close()

上面的代码行创建了一个包含 8 个工作线程的多处理池,我们可以使用这个包含 8 个工作线程的池来将我们需要的函数映射到这个列表。

让我们来看看这段代码是如何执行的:

Size of List:10
Without multiprocessing we ran the function in 0.0000 seconds
With multiprocessing we ran the function in 0.5960 seconds
Size of List:100
Without multiprocessing we ran the function in 0.0001 seconds
With multiprocessing we ran the function in 0.6028 seconds
Size of List:1000
Without multiprocessing we ran the function in 0.0006 seconds
With multiprocessing we ran the function in 0.6052 seconds
Size of List:10000
Without multiprocessing we ran the function in 0.0046 seconds
With multiprocessing we ran the function in 0.5956 seconds
Size of List:100000
Without multiprocessing we ran the function in 0.0389 seconds
With multiprocessing we ran the function in 0.6486 seconds
Size of List:1000000
Without multiprocessing we ran the function in 0.3654 seconds
With multiprocessing we ran the function in 0.7684 seconds
Size of List:10000000
Without multiprocessing we ran the function in 3.6297 seconds
With multiprocessing we ran the function in 1.8084 seconds
Size of List:100000000
Without multiprocessing we ran the function in 36.0620 seconds
With multiprocessing we ran the function in 16.9765 seconds

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

作者图片

正如我们所看到的,当列表长度达到一定程度时,多重处理的运行时间会有所增加,但不会像非多重处理函数在列表长度较大时运行时间增加的那样快。这告诉我们,使用多重处理有一定的开销,对于耗时很短的计算没有太大意义。

实际上,我们不会对几毫秒内完成的函数使用多重处理,而是对可能需要几秒甚至几小时的大得多的计算使用多重处理。因此,让我们尝试一个更复杂的计算,这将花费超过 2 秒钟。我在这里使用time.sleep作为计算的代理。

Size of List:1
Without multiprocessing we ran the function in 2.0012 seconds
With multiprocessing we ran the function in 2.7370 seconds
Size of List:2
Without multiprocessing we ran the function in 4.0039 seconds
With multiprocessing we ran the function in 2.6518 seconds
Size of List:3
Without multiprocessing we ran the function in 6.0074 seconds
With multiprocessing we ran the function in 2.6580 seconds
Size of List:4
Without multiprocessing we ran the function in 8.0127 seconds
With multiprocessing we ran the function in 2.6421 seconds
Size of List:5
Without multiprocessing we ran the function in 10.0173 seconds
With multiprocessing we ran the function in 2.7109 seconds
Size of List:6
Without multiprocessing we ran the function in 12.0039 seconds
With multiprocessing we ran the function in 2.6438 seconds
Size of List:7
Without multiprocessing we ran the function in 14.0240 seconds
With multiprocessing we ran the function in 2.6375 seconds
Size of List:8
Without multiprocessing we ran the function in 16.0216 seconds
With multiprocessing we ran the function in 2.6376 seconds
Size of List:9
Without multiprocessing we ran the function in 18.0183 seconds
With multiprocessing we ran the function in 4.6141 seconds

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

作者图片

如您所见,这种情况下的差异更加明显,与使用多重处理相比,不使用多重处理的函数会花费更多的时间。同样,这非常有意义,因为当我们启动多重处理 8 时,工作人员开始并行处理任务,而当我们不使用多重处理时,任务以顺序方式发生,每个任务花费 2 秒钟。

2.多参数函数的多重处理:

对上述代码的一个扩展是,当我们必须运行一个带有多个参数的函数时。对于一个用例,假设您必须使用多个超参数来优化一个特定的模型。您可以这样做:

import random
def model_runner(n_estimators, max_depth):
    # Some code that runs and fits our model here using the   
    # hyperparams in the argument.
    # Proxy for this code with sleep.
    time.sleep(random.choice([1,2,3])
    # Return some model evaluation score
    return random.choice([1,2,3])

你如何运行这样一个函数?有两种方法可以做到这一点。

a)使用 Pool.map 和 magic*

def multi_run_wrapper(args):
   return model_runner(*args)pool = Pool(4)
hyperparams = [[100,4],[150,5],[200,6],[300,4]]results = pool.map(multi_run_wrapper,hyperparams)
pool.close()

在上面的代码中,我们使用

b)使用 pool.starmap

从 Python3.3 开始,我们可以使用starmap方法更容易地实现我们上面所做的事情。

pool = Pool(4)
hyperparams = [[100,4],[150,5],[200,6],[300,4]]results = pool.starmap(model_runner,hyperparams)
pool.close()

3.将 Joblib 与单参数函数一起使用:

Joblib 是另一个库,它提供了一个简单的助手类来为使用多重处理的循环编写令人尴尬的并行程序,我发现它比多重处理模块更容易使用。运行并行流程就像用Paralleldelayed关键字写一行一样简单:

from joblib import Parallel, delayed
import timedef f(x):
    time.sleep(2)
    return x**2results = **Parallel**(n_jobs=8)(**delayed**(f)(i) for i in range(10))

让我们使用之前使用的同一个函数来比较 Joblib 并行和多处理模块。

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

作者图片

我们可以看到运行时非常相似,joblib 代码看起来比多处理代码简洁得多。

4.将 Joblib 与多参数函数一起使用:

为一个函数使用多个参数就像使用 Joblib 传递参数一样简单。这里有一个你可以使用的最小的例子。

from joblib import Parallel, delayed
import timedef f(x,y):
    time.sleep(2)
    return x**2 + y**2params = [[x,x] for x in range(10)]
results = Parallel(n_jobs=8)(delayed(f)(x,y) for x,y in params)

结论

多处理是一个很好的概念,每个数据科学家至少应该了解它。它不会解决你所有的问题,你仍然应该致力于优化你的功能。但是拥有它可以节省你等待代码完成的大量时间。

继续学习

如果你想了解更多关于 Python 3 的知识,我想从密歇根大学调出一门关于学习中级 Python 的优秀课程。一定要去看看。

将来我也会写更多初学者友好的帖子。在http://mlwhiz.medium.com关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。

这个故事最初发表在内置上。

如何衡量数据质量?

原文:https://towardsdatascience.com/how-can-i-measure-data-quality-9d31acfeb969?source=collection_archive---------10-----------------------

YData Quality 简介:一个用于全面数据质量的开源包。

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

格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片

用几行代码按优先级标记所有数据质量问题

“每个人都想做模型工作,而不是数据工作”——谷歌研究

根据 Alation 的数据文化状态报告,87%的员工将糟糕的数据质量归因于为什么大多数组织未能有意义地采用 AI。根据麦肯锡 2020 年的一项研究,高质量的数据对于推动组织超越竞争对手的数字化转型至关重要。

根据 2020 年 YData 的一项研究,数据科学家面临的最大问题是无法获得高质量的数据。快速发展的人工智能行业的根本问题是显而易见的,现在人工智能最稀缺的资源是大规模的高质量数据。

尽管认识到了这一点,业界多年来一直专注于改进模型、库和框架。数据科学家通常认为建模是令人兴奋的工作,而数据清理是乏味的任务。被忽略的数据问题会在整个机器学习解决方案开发过程中造成不利的下游影响。

令人欣慰的是,我们已经看到了由吴恩达开创的范式转变,从以模型为中心的方法转变为以数据为中心的方法。我们正在见证以数据为中心的竞争,社区意识。我们正朝着正确的方向前进。

然而,问题依然存在;仍然缺乏行业就绪的工具来理解底层数据质量问题并加以改进。

我们对提高数据质量的执着

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

作者创作—原创图片由故事提供

正如你已经知道的,我们痴迷于解决人工智能行业的这个紧迫的数据问题。首先,我们开源了我们的合成数据引擎,并围绕它建立了一个社区。合成数据可以帮助创建高质量的数据,但现有的真实世界的杂乱数据会怎么样?

如果我们可以分析数据的标准质量问题,并提前按优先级标记它们,从而为数据科学家节省宝贵的时间,会怎么样?这就是我们今天想要回答的问题。

今天,我们很高兴地宣布YData Quality,这是一个开源的 python 库,用于评估数据管道开发的多个阶段的数据质量。

核心特征:里面是什么?

这个包非常方便,尤其是在开发的初始阶段,此时您仍然在掌握可用数据的价值。我们只能通过从多个维度查看数据来获取数据的整体视图。YData Quality 对其进行模块化评估——每个维度的特定模块,最终打包到一个数据质量引擎中。

质量引擎对输入数据执行多项测试,并根据数据质量发出警告。警告不仅包含检测到的问题的详细信息,还包含基于预期影响的优先级。

以下是 YData Quality 中核心模块的快速概述:

  • **偏见和公平:**保证数据没有偏见,其应用在敏感属性方面是公平的,法律和道德上有义务不区别对待(如性别、种族)。
  • **数据预期:**断言特定属性的数据的单元测试。利用远大期望验证,将其结果整合到我们的框架中,并检查验证的质量。
  • **数据关系:**检查要素之间的关联,测试因果关系,估计要素重要性,以及检测具有高度共线性的要素。
  • **漂移分析:**通常,随着时间的推移,数据可能演变出不同的模式。使用此模块,您可以在查看不同的数据块时检查要素(即协变量)和目标(即标注)的稳定性。
  • **重复:**数据可能来自不同的来源,并不总是唯一的。该模块检查数据中的重复条目,这些重复条目是冗余的,并且可以(或者应该)被丢弃。
  • **标签:**通过分类和数字目标的专用引擎,该模块提供了一个测试套件,可检测常见(如不平衡标签)和复杂分析(如标签异常值)。
  • **缺失:**缺失值会在数据应用程序中导致多种问题。通过本模块,您可以更好地了解其影响的严重性以及它们是如何发生的。
  • **错误数据:**数据可能包含没有内在含义的值。使用此模块,您可以检查数据(表格和时间序列)中数据点上的典型错误值。

我如何开始?

这是我们都喜欢的部分。启动您的终端并键入以下内容:

pip install ydata-quality

您可以在一个命令中安装所有的数据质量引擎。为了让您了解各种库的用法,我们提供了多个教程,以 jupyter 笔记本的形式呈现。

让我们向您展示一下我们的数据质量引擎是如何工作的:

下面是一个示例报告的样子:

从上面的输出中,我们注意到重复的列是一个高优先级的问题,需要进一步检查。对此,我们使用get_warnings()方法。

只需输入以下内容:

dq.get_warnings(test="Duplicate Columns")

我们可以看到针对我们想要解决的问题的详细输出:

[QualityWarning(category='Duplicates', test='Duplicate Columns', description='Found 1 columns with exactly the same feature values as other columns.', priority=<Priority.P1: 1>, data={'workclass': ['workclass2']})]

根据评估,我们可以看到列workclassworkclass2完全是重复的,这会对下游产生严重的后果。我们必须删除重复的列,并根据其优先级转移到下一个确定的问题。

我们看到了该软件包如何通过提前标记细节来帮助数据科学家解决数据质量问题。此外,我们建议从本教程笔记本开始,本教程笔记本评估混乱的数据集的数据质量问题并修复它们。

有什么问题吗?加入我们专门的 社区 Slack 空间,问走一切。我们是一群友好的人,希望互相学习,并在这个过程中成长。

用改进的数据加速人工智能是我们工作的核心,这个开源项目是我们朝着有意义的旅程迈出的又一步。我们邀请你成为它的一部分——共同创造无限可能。

法比亚娜 是 CDOy data

用改进的数据加速 AI。

YData 为数据科学团队提供首个数据开发平台。

NLP 如何影响少数民族语言的未来?

原文:https://towardsdatascience.com/how-can-nlp-impact-the-future-of-minority-languages-555b0fc80bd0?source=collection_archive---------75-----------------------

在过去的几年里,自然语言处理领域取得了重大进展,但这对少数民族语言意味着什么呢?

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

" File:wubi 86 keyboard layout . png "仓颉 6 授权于 CC BY-SA 4.0

OpenAI 的 GPT-3 论文于 2020 年 5 月 28 日问世,成为 AI 自然语言处理领域的热门话题。其 1750 亿参数的 transformer 架构使其在专业和一般新闻中非常受欢迎,这要归功于一些开发人员迅速展示的大量应用程序,其中一些我在我的介绍性文章中列出了:

最先进的 NLP 模型是如何用不同的语言训练出来的?

让我们以 GPT 3 号为例。根据 GPT-3 论文,它在大规模数据集上进行了预训练,包括公共爬行数据集,它包含自 2008 年以来收集的数 Pb 数据,占 GPT-3 总训练组合的 60%,其中还包括其他数据集,如 WebText2、Books1、Books2 等…根据常见的抓取 github 信息,这是语言在数据集中跨文档的分布:

英语显然是语料库中的主导语言,占总文档的 40%以上,而第二大语言是俄语,占总文档的不到 10%。就母语人士而言,一些排名前十的口语显然没有被充分代表。以西班牙语为例,拥有 4.6 亿母语者(多于母语为英语者)的前 2 大语言仅占语料库中全部文档的 4%)。在下面的链接中,您可以找到另一个基于 GPT-3 训练数据集上每种语言的字符总数的统计数据:

https://github.com/openai/gpt-3/blob/master/dataset_statistics/languages_by_character_count.csv

那么,GPT-3 在管理英语以外的语言方面做得如何呢?在一个有趣的 reddit 帖子中,一位用户似乎对它如何设法学习 Python 等编码语言感到困惑,并收到了一位名叫 gwern 的用户的有趣回复,指出了另一个问题,即“GPT 的架构&数据处理如何影响它对各种事物的学习”。

同一个 reddit 用户写了一篇关于 GPT-3 的优秀文章,指出 BPE(字节对编码)的使用如何以不同的方式影响不同类型的语言(例如,分析型或合成型),从而引入了隐性偏见。您可以在下面找到完整的文章:

总之,尽管大量的训练数据使得像 GPT-3 这样的语言模型在几种语言中都很好,即使它们针对英语进行了优化和/或它们使用了一小部分非英语文档,但少数民族语言(甚至非少数民族语言)仍然处于很大的劣势。

对非英语语言的潜在影响是什么?

即使像 GPT-3 这样的语言模型不知道他们在说什么,我们的关系也正通过人工智能变得越来越数字化和自动化。NLP 模型在特定语言中的表现如何可能对其未来至关重要,因为在在线服务中,这些模型可能会越来越多地被那些更常用的模型所取代,因此在更新的机器学习解决方案中会得到优化。这就是为什么一些语言学院,如西班牙的 RAE (Real Academia de la Lengua)或当地政府,如加泰罗尼亚自治区政府,正在采取具体措施来解决这个问题:

https://www.rae.es/noticia/la-rae-presenta-el-proyecto-lengua-espanola-e-inteligencia-artificial-leia-en-el-xvi https://politiquesdigitals.gencat.cat/ca/detalls/ActivitatAgenda/20201210-projecte-Aina

虽然这些举措显示了意识,并且肯定是改善人工智能在非英语语言中的使用的良好步骤,但很明显,主要研究是用英语进行的。例如,在本文撰写之日,最新的多样化文本数据集之一,名为 The Pile,是一个 815Gb 的英语语料库。

NLP 给小众语言带来了怎样的挑战?下面的文章提供了一个很好的总结,集中在三个方面:

  • 社会劣势的强化
  • 规范性偏见
  • 改进 ML 技术的语言扩展

结论

历史告诉我们,技术对于保持语言记忆的活力至关重要。也许这种技术最大的例子就是不同形式的书。我们所知的泥板、纸莎草纸和后来的书籍不仅是保存古代语言的关键,也是保存我们记忆的关键。

在另一个可能不太为人所知的故事中,中国在 20 世纪 80 年代面临一个巨大的问题,当时他们意识到它的 70,000 多个字符放不进一个键盘。如果他们没有用五笔输入法解决这个问题,40 年后中国还会是一个科技超级大国吗?没有得到足够 NLP 支持的语言在 40 年后会发生什么?

如果你喜欢阅读这篇文章,请 考虑成为会员 以便在支持我和媒体上的其他作者的同时,获得上的所有故事。

5 个步骤:建立一个帮助小企业成长的 SVM 模式

原文:https://towardsdatascience.com/how-can-support-vector-machines-help-grow-a-small-business-8e71561616ea?source=collection_archive---------21-----------------------

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

斯维特拉娜·古梅罗娃在 Unsplash 上的照片

Github 为此项目。

我们经常在数据科学和机器学习等领域听到“大数据”这个术语,尽管这个术语很常见,并且应用于我们的社会,但数据科学方法也可以在“小数据”方面发挥重要作用。那么,我们在哪里可以看到小数据呢?通常,它是在供应商和小型企业的场景中处理的。与公司或常规规模的企业相比,小型企业的客户和交易数量较少,这使得跟踪和分析客户数据以及了解客户行为变得更加容易。

在 5 个步骤中,我将介绍我创建的一个小型企业场景,以深入了解如何使用数据科学来发现客户行为的趋势,从而帮助企业发展。在我继续这个场景之前,我们应该知道什么是一类分类和支持向量机。

  • **一类分类:**使用正常数据创建和训练分类器模型,以在加入新数据时预测异常值
  • **支持向量机:**假设我们绘制二维数据,我们可以用一条线将这些数据分成两类。支持向量是该线附近的点,这些点设置了适当的边界,有助于将新点分类为离群点/内点。

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

作者图片

方案

我拥有一家花店,我希望人们买更多的向日葵,因为我有很多。所以,我想降低它的成本,但我不想降低太多,我可能会失去潜在的金钱;我希望降价幅度恰到好处,这样可以优化客户数量和我卖向日葵的收入。

步骤 1:收集/创建您的数据。

要在你销售的产品和客户反应/行为之间找到洞察力和趋势,第一步你需要数据。如果您想使用 SVM 进行一类分类,请创建随机数据。如果你想在现实生活中应用它,下载你当前的数据到一个. csv 文件中。

回到我的场景:假设我已经在很长一段时间内以不同的价格出售了向日葵,并且我将所有的数据合并成一个数据集。我的自变量(向日葵降价)将是我的向日葵降价的 200 个对象。我的因变量(客户响应)将是 200 个客户响应对象(1 =客户购买了向日葵,2 =客户没有购买向日葵)。

在现实中,小企业主不会知道客户何时会/不会购买产品的确切价格下限,但为了使该数据不完全随机,我设置了它,以便如果向日葵的降价≥ $3,客户会购买向日葵,否则,他们不会。下面是我的数据集的一部分。

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

作者图片

步骤 2:训练和测试集。

为了创建我们的基本 SVM 模型,我们需要将整个数据集分成两部分。训练数据集应该大于测试数据集。我们将使用测试数据集来看看我们的模型在最后有多准确。

对于我的场景,我的原始数据集的 70%用于训练,其余用于测试。我在 r 中使用了 sample.split()函数。

#df is my dataframe containing my 2 variables (lowered sunflower prices and customer response)split = sample.split(df$response, SplitRatio = 0.7)
train = subset(df, split == TRUE)
test = subset(df, split == FALSE)

第三步:创建支持向量机(SVM)模型。

为了建立我们的 SVM 模型,我们需要通过分别输入我们的独立(降低的价格)和非独立(响应)变量作为数据集来训练模型,这样函数就知道要训练哪两个变量。

为此,我将我的训练数据集分成 2 个变量,并将它们转化为因子(R 中的 svm()函数只接受因子)。

train_x <- train[-2]      #take out the column with response
train_y <- train[2]       #only the response column#turn into factors (below)train_y$response <- as.factor(train_y$response)
train_x$sunflower <- as.factor(train_x$sunflower)

现在,我们简单地将我们的训练变量放入 svm()函数,它将告诉我们在模型和参数信息中有多少个支持向量。

svm <- svm(data=train, train_x, train_y, type='one-classification', nu=0.10, scale=FALSE)summary(svm)

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

作者图片

理解 gamma、nu 和 kernel 值有点复杂,在实现最基本的 SVM 模型时没有必要。这些值可以帮助您在以后使 SVM 模型更加准确。

第四步:预测。

随着我们的 SVM 模型全部建立,我们现在可以通过输入训练数据集来测试我们的 SVM 模型有多强。

如果我输入我的训练数据集,R 中的 predict()函数将预测客户对数据集中给出的每一个较低价格的反应。我们应该只包括自变量(降低的价格)作为输入,这样 SVM 模型可以预测客户的反应。在此之后,我们将使用混淆矩阵来比较预测的客户响应和实际的客户响应,以了解我们的模型结果有多准确。

p <- predict(svm, test_x)      #predicting test responses using the test independent variables (x)summary(p)

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

作者图片

上图中,TRUE 表示预测客户不会购买向日葵,FALSE 表示预测客户购买向日葵。

第五步:混淆矩阵。让我们看看我们的 SVM 模型有多强!

这一步相当简单。我们需要将模型在上一步中做出的预测编译成数据集,并将预测和实际响应都转换成因子。我们还必须使响应类型相同,这样混淆矩阵就可以区分真/假和“1”/“2”,因为它们是不同的输出。

p <- as.data.frame(p)test_y$response <- as.factor(test_y$response)
p$p <- as.factor(p$p)levels(p$p) <- list("1"="FALSE", "2"="TRUE")  #levels have to match the test data levelsconfusionMatrix(test_y$response, p$p)

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

作者图片

以上是我的混淆矩阵的结果,我的 SVM 模型的准确率约为 50%。这意味着我的 SVM 模型在 50%的时间里预测了正确的客户反应。即使看起来不多,许多小企业在开始时也会有较低的准确率。随着时间的推移,企业将为每种产品收集越来越多的数据,该模型将在预测客户反应方面变得更好。

此外,如果我将向日葵的价格降低了 3 美元,并想知道客户是否会购买我的向日葵,我可以使用 SVM 模型来预测单个值,这在我没有训练集的情况下会很有帮助。

p3 <- predict(svm, 3)
summary(p3)

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

作者图片

设想

我使用 ggplot 来可视化我的数据,但只要您可以选择显示客户反应的差异,任何东西都可以。

ggplot(df2, aes(x=X, y=sunflower, color=response)) + geom_point(size=5) + theme_ipsum()

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

作者图片

正如你从上面的图像中看到的,购买向日葵的顾客和没有购买向日葵的顾客之间有明显的差异(3 美元)。如果我把价格降到 3 美元以下,顾客就不会买向日葵,反之亦然。在现实中,这种分裂不会如此明显,但会有一定的模式,你可以用一种常见的方式找到它,如回归线。

结论

通过我简短的花店场景,我们学习了如何使用支持向量机(SVM)实现一类分类(OCC ),并创建了一个模型,该模型可以根据我降低向日葵价格的程度来预测客户的反应。任何有产品和客户的小企业场景都适用于这种模型,并且可以揭示关于客户行为的有价值的信息。这种 SVM 模型可以指出所有者需要关注的地方,以及他们需要营销什么来优化他们的业务。

感谢您的阅读!

如何才能让人工智能具有伦理性?

原文:https://towardsdatascience.com/how-can-we-make-artificial-intelligence-ethical-6d26657c6c32?source=collection_archive---------47-----------------------

人工智能校准和安全

为了一个更加公正的世界,集体努力是必要的。

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

附身摄影Unsplash 上拍照

上周,我们在我的研究生院入门课程中完成了一项令人大开眼界的活动。在某些情况下,本课程旨在介绍人机交互(HCI)及相关领域的不同研究范式。我们在前半个季度讨论了高质量研究的高层次要素,最近还讨论了衡量学术研究的道德和可信度的方法。

在活动中,我们的教授让我们每个人分析一篇选择的研究论文,并写一篇 300 字的短文,讨论研究中直接出现或隐含的伦理问题。然后,我们将所有的文章汇集成一个小小的“虚拟杂志”,在阅读学术论文时,可以作为未来的快速参考。

最终的结果令人着迷,特别是因为我们能够发现许多伦理问题仍然存在于实际的、发表的研究中。以下是人们发现的一些问题:

  • 根据一个不具代表性的小样本的数据做出一般性的断言
  • 引用过时的研究
  • 不尊重收集数据的隐私
  • 对被边缘化的社区进行研究,但之后再也没有回来真正帮助那些同样的社区
  • 使用不可靠的数据(例如,在 MTurk 上收集的数据没有正确衡量用户是否真正回答了问题)

我们的伪杂志故意泛泛而谈——在翻阅它时,我忍不住将所有讨论的问题与我自己的计算机科学背景联系起来。特别是,我考虑了上述问题中有多少与人工智能(AI)有关。

人工智能多年来一直是一个蓬勃发展的领域,但最近人们对道德人工智能越来越感兴趣。这是由于意识到许多当前存在的人工智能形式都有很强的偏见——例如,有证据表明面部识别算法在肤色较深的人身上表现较差[1]。

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

简·坎迪在 Unsplash 上拍摄的照片

这个问题源于人工智能算法的训练数据。当模型基于不完整或不准确的数据进行训练时,不管它有多好,它的预测能力总是很差。

这就是我们在课堂上做的活动。在这个过程中,我问了自己一个问题:在寻找符合伦理的人工智能的过程中,我们能扩展并建立这个策略吗?如果是这样,我们从哪里开始?

我相信答案是肯定的,我们从确定我的班级活动的一个重要方面开始,这使它非常独特:丰富多样的观点

让我详细解释一下。我的研究生项目是跨学科的,接待来自不同背景的学生。在这个房间里,我们有专攻计算机科学、社会学、UI/UX、经济学、平面设计、公共卫生、数学等等的学生。我们探索的研究论文跨越了从信息可视化到价值论(哲学的一个分支,关注什么使事物有价值)的整个范围。正因为如此,我们能够创造出一种既具体又全面的杂志——具体的原因在于它让我们有效地探索当代研究中的伦理问题,而全面的原因在于它允许我们在一系列不同的研究领域中这样做。

这让我想到了我的主要观点:在研究的初始阶段纳入不同的观点对于创造人工智能的伦理形式至关重要。如果一个 AI 技术有偏差,那是因为底层数据也有偏差。很多时候,这可能是无意的,因为研究人员根本没有意识到他们的数据收集技术的缺陷。如果你不知道偏见,你怎么可能解决它?通过让来自不同背景的人参与这些算法的创建,我们可以确保最终产品是合乎道德和包容性的。

让我们回到面部识别技术的例子。上面链接的文章中提到的算法在深色皮肤的女性身上表现不佳。虽然我不能对设计这一算法的研究团队做出直接的声明,但有充分的证据表明,女性和有色人种在 STEM 领域,尤其是计算机科学领域的代表性不足。因此,由于团队自身的同质性,团队没有注意到其较差的训练数据并非不可能。

要让人工智能合乎伦理,就要从一开始做起。创建一个算法,然后回头考虑如何使它合乎道德和包容性,这是不够的。相反,我们应该在研究的初始阶段使用新技术,并将多种观点融入到我们的算法中。为此,我们需要两个关键因素:

  1. 包括来自所有社区的研究人员的研究团队,这将更容易确保产生的算法不是无意的歧视。
  2. 使用混合方法的研究团队——换句话说,结合从事创建和编程算法的数学工作的定量研究人员,我们需要能够设计更好的数据收集和分析方法的定性研究人员,这些方法考虑到人工智能的人类方面——而不仅仅是机器。

当然,这本身还不够——但这是一个开始。人工智能在近期没有放缓的迹象。如果我们不学会让它合乎道德,那么在 21 世纪剩下的时间里,等待我们的将绝不是好事。

参考

[1] A .纳吉比,人脸识别技术中的种族歧视 (2020)。https://sitn . HMS . Harvard . edu/flash/2020/种族歧视人脸识别技术/

我们如何在交互式探索性数据分析后节省时间?

原文:https://towardsdatascience.com/how-can-we-save-time-after-an-interactive-exploratory-data-analysis-c9edfdb8d3e5?source=collection_archive---------25-----------------------

一款 Web 应用程序,可以带回家的不仅仅是一个数字

在你深入我的故事寻找“如何”的细节之前,让我节省你的时间,马上给你一个答案:

  • **回答:**你应该给用户样本代码,预先填入他们在玩交互式网络应用时选择的参数。
  • **举例:**最近,我创建了一个 web 应用程序“ Distribution Analyser ”,它允许用户交互式地探索连续分布,并使它们符合他们的数据,最终给他们提供图形和表格。此外,他们将收到预填充的 Python 代码以及他们选择的参数(或拟合结果),如下面的屏幕截图所示。

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

**图一。**从分布分析器中选择分布和生成代码的示例。**左:**用户选择了一个发行版(在本例中是 Beta 发行版),他们调整了滑块上的参数。**右图:**选择所需参数后,用户点击“生成 Python 代码”按钮,得到代码,他们可以保存并从左图重新创建图形。作者制作的图表。

使用 Streamlit 的 Web 应用程序

怎么开始的

有了一个 web 应用程序的想法,我开始搜索可以用来实现我的想法的工具(下次再讲)。在搜索的时候,我发现了一个开源的 Python 库 Streamlit 的存在,这是一个定制 web 应用程序的库,用它你可以"在几分钟内构建和部署一个应用程序"。几行代码之后,我有了一个基本的功能 app——我被卖了!

大约 1 周后

第一个功能“探索发行版”的早期原型已经准备好了,我正在向朋友们展示这个应用程序(Niko 和 Matthijs)。有时,他们会问“用户可以导出参数吗?”我的回答是“哦,是的,他们应该能做到!”

站在用户的角度,我意识到,尽管表中有参数值,但我仍然需要花费大量的时间和精力才能使用应用程序在 5-10 秒内重现结果。如果我可以交互式地探索,为什么我不能生成一些示例代码在其他地方使用这些结果呢?

如何在代码中生成代码?

Python 的回答: f-strings -简单而强大

F 字符串提供了一种使用最小语法将表达式嵌入字符串文字的方法。f 字符串是在运行时计算的表达式,而不是常数值。( PEP 498 )

**在 Python 中:**用一个 f 作为字符串的前缀,然后把你的变量放在花括号 **{},**中,当你执行代码的时候,那些变量会得到赋值。请参见下面的简单示例(f 字符串及其评估值以粗体显示):

platform = 'Towards Data Science'
author = 'Robert Dzudzar'
number_of_articles = 1example = f"**{author}** wrote **{number_of_articles}** article(s) for **{platform}.**"print(example)
# Returns: **Robert Dzudzar** wrote **1** article(s) for **Towards Data Science**.

如何在“分布分析器”中生成代码?

在应用程序中,用户使用小部件:他们选择一个发行版,然后使用滑块或输入框来调整发行版参数(每个发行版都有自己的一组参数)。来自 Streamlit 小部件的值被传递给一个生成数字的函数——那么我们为什么不能传递代码呢?

根据代码和参数,有时需要调整变量,使其在 f 字符串中具有所需的格式:

  • Distribution Analyser 中,为了向用户提供生成的代码,我需要变量名或它们的值,或者有时两者都需要,我通过简单的字符串操作来获得。一旦我得到了想要的格式,我就把它传递给 f 字符串(见下图)。创建的 f-sting 然后被传递到一个 Streamlit 按钮,当按下时它将打印出来。

下图显示了’ Explore 发行版’中的 f 字符串与生成代码的并排比较(f 字符串及其值被突出显示)。以同样的方式,这样做是为了从最佳分布函数中获得代码。您可以在 GitHub 上找到完整的 web 应用源代码,并在 Streamlit Sharing 上随意使用和探索 Distribution Analyser

最后

多给用户省时省力。

对于 web 应用程序开发人员来说,只需在他们的应用程序中添加一些功能(至少如果他们使用 Python 的话),就可以制作出简单、可重复且随时可用的代码,作为分析结果的一部分提供给用户。拥有这样一个选项可以为用户节省数小时甚至数天的时间来记笔记和钻研源代码。

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

**图二。**并排比较用于分布分析器中的“探索分布”选项。f 字符串及其值在代码中突出显示。你可以在 GitHub 上找到完整的 web 应用源代码。 Left: 我创建了变量‘generate _ code ’,这是一个 f 字符串。在这个 f 字符串中,我放置了生成图形的整个代码,并放置了所有变量:选定的分布、分布参数以及它们在花括号{}中的值,这样它们就可以被用户通过小部件选择的实际值所替换。变量被传递给 Streamlit[ST . code(f " { generate _ code } "],后者将把它打印出来。**右图:**我展示了一个用户得到的生成代码(这是针对本文开头图 1 所示的函数)。作者制作的图表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值