TowardsDataScience-博客中文翻译-2020-一百三十一-

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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

深度学习为什么要用 GPU?

原文:https://towardsdatascience.com/why-deep-learning-uses-gpus-c61b399e93a0?source=collection_archive---------21-----------------------

为什么你也应该…

约瑟夫·格雷夫在 Unsplash 上的照片

T 这里有很多关于深度学习 GPU 的信息。你可能听说过这个领域需要一些巨大的计算机和难以置信的能力。也许你见过人们花几天甚至几周的时间训练他们的模型,然后发现他们的代码中有一个 bug。此外,我们在谈论游戏和图形设计时最常听到 GPU。这篇文章将帮助你了解这里实际发生了什么,以及为什么 Nvidia 是深度学习领域的巨大创新者。

图形处理单元

GPU 是一种非常擅长处理专门计算的处理器。我们可以将其与中央处理器(CPU)进行对比,后者在处理一般的计算方面表现出色。CPU 为我们日常使用的设备上执行的大部分计算提供动力。

GPU 可以比 CPU 更快地完成任务。然而,并不是每种情况都是如此。性能在很大程度上取决于所执行的计算类型。GPU 非常擅长可以并行运行的任务。

并行计算

并行计算是一种计算架构,其中几个处理器同时执行多个较小的计算,这些计算是从一个整体较大的复杂问题中分解出来的。

如果我们的处理单元中有多个内核,我们可以将任务分成多个更小的任务,并同时运行它们。这将利用我们现有的处理能力,更快地完成我们的任务。

CPU 通常有四个、八个或十六个,而 GPU 可能有千个!从这里我们可以得出结论,GPU 最适合可以同时完成的任务。由于并行计算处理这样的任务,我们可以看到为什么在这种情况下会使用 GPU。

神经网络是并行的

(图片由 Brighterion 提供)

我们已经得出结论,当一个巨大的任务可以被分解成许多更小的任务时,GPU 是最好的选择,这就是 GPU 被用于并行计算的原因。如果我们看一看神经网络,我们可以注意到它们是令人尴尬的并行。这意味着我们甚至不需要划分任务,也不需要决定哪个部分属于哪个核心。神经网络是专门为并行运行而设计的。由于它们是深度学习的基础,我们可以得出结论,GPU 非常适合这项任务。

此外,神经网络是并行的,因此它们不必依赖彼此的结果。一切都可以同时运行,而不必等待其他内核。这种高度独立的计算的一个例子是卷积。

盘旋

(动画由以色列维卡制作)

这是一个没有数字的卷积的例子。左边是输入通道,右边是输出通道。在动画中,计算的过程是按顺序进行的,而现实生活中并非如此。实际上,所有的操作都可能同时发生,它们都不依赖于任何其他计算的结果。

因此,计算可以在 GPU 上并行进行,并且可以产生结果。从例子中我们可以看到,并行计算和 GPU 可以大大加速卷积运算。相比之下,在 CPU 上运行相同的卷积将导致顺序执行,类似于动画中的情况。这个过程需要更多的时间。

Nvidia 硬件和软件

(图片来自 Nvidia.com)

这是我们可以了解 CUDA 的地方。Nvidia 是一家生产 GPU 的公司,他们创造了 CUDA,这是一种可以很好地连接到他们生产的硬件的软件。该软件允许开发人员轻松利用 Nvidia GPUs 的并行计算能力。

简单来说, GPU 是硬件,CUDA 是软件。正如你可能已经猜到的,使用 CUDA 需要 Nvidia GPU,CUDA 可以从 Nvidia 的网站上完全免费下载。

GPU vs CPU

(图片来自 Nvidia.com)

CUDA 允许我们有选择地在 GPU 或 CPU 上运行计算。如果 GPU 好得多,为什么不把它用在所有事情上呢?

答案是 GPU 只对特定类型的任务更好。例如,如果我们的数据在 CPU 上,将其移动到 GPU 可能会很昂贵。所以在任务相当简单的情况下,使用 GPU 的成本会更高。我们可以得出结论,只有当任务足够大并且可以被分解为更小的任务时,GPU 才会表现得更好。对于小流程,只会让事情变得更慢。

出于这个原因,在刚开始时使用 CPU 通常是可以接受的,因为最初的任务会很短很简单。

GPGPU

(英伟达中国 GTC)

当 GPU 最初被创建时,它主要是为了处理计算机图形,这就是这个名字的由来。现在,越来越多的任务转移到 GPU,Nvidia 是这一领域的先驱。CUDA 是近 10 年前创建的,直到现在开发人员才开始使用它。

深度学习和其他类型的并行计算导致了一个新领域的发展,称为 GPGPU通用 GPU 计算

Nvidia 的 GTC 演讲是深度学习领域每个人的必看之作。当我们听到 GPU 计算栈的时候,我们应该把 GPU 想成是底层的硬件,中间是 CUDA 软件架构,顶层是 cuDNN 这样的库。

结论

GPU 在当前深度学习和并行计算的发展中发挥着巨大的作用。凭借所有这些发展,Nvidia 公司无疑是该领域的先锋和领导者。它为创作者提供硬件和软件。

只用一个 CPU 就开始创建神经网络当然没问题。然而,现代 GPU 可以加快任务的速度,并使学习过程变得更加愉快。

资源:

[1]以色列牧师。(2018 年 5 月 23 日)。奥塔维奥·古德的卷积神经网络可视化[视频]。YouTube。【https://youtu.be/f0t-OCG79-U

[2]英伟达。(2016 年 9 月 26 日)。中国 GTC:AI,深度学习与黄仁勋&百度的吴恩达【视频】。YouTube。https://youtu.be/zeSIXD6y3WQ

[3]并行计算定义。(未注明)。检索自https://www . omni sci . com/technical-glossary/parallel-computing

为什么开发人员会爱上函数式编程

原文:https://towardsdatascience.com/why-developers-are-falling-in-love-with-functional-programming-13514df4048e?source=collection_archive---------0-----------------------

从 Python 到 Haskell,这种趋势不会很快消失

功能代码目前正在兴起。布鲁克·卡吉尔在 Unsplash 上的照片

F F 函数式编程已经存在了过去 60 年,但迄今为止它一直是一个小众现象。尽管像谷歌这样的游戏规则改变者依赖于它的关键概念,但今天的普通程序员对此知之甚少甚至一无所知。

这种情况即将改变。不仅仅是像 Java 或 Python 这样的语言采用了越来越多来自函数式编程的概念。像 Haskell 这样的新语言正在走向完全函数化。

简单来说,函数式编程就是为不可变变量构建函数。相比之下,面向对象编程是关于拥有一组相对固定的函数,你主要是修改或添加新的变量。

由于其本质,函数式编程非常适合按需任务,如数据分析机器学习。这并不意味着你应该告别面向对象编程,转而采用完全函数式编程。然而,了解基本原则是很有用的,这样你就可以在适当的时候利用它们。

[## 函数式编程正在兴起

编程语言有一种更加函数化的趋势。这意味着什么,我们在这条路上处于什么位置?

medium.com](https://medium.com/@elizarov/functional-programing-is-on-the-rise-ebd5c705eaef)

这都是为了消除副作用

要理解函数式编程,首先需要理解函数。这听起来可能很无聊,但归根结底,这很有见地。所以继续读下去。

天真地说,函数是一种将一些输入转换成一些输出的东西。只不过事情并不总是那么简单。考虑 Python 中的这个函数:

def square(x):
    return x*x

这个函数很简单;它接受一个变量x,大概是一个int,或者一个float或者double,并计算出它的平方。

现在考虑这个函数:

global_list = []def append_to_list(x):
    global_list.append(x)

乍一看,这个函数似乎接受了一个变量x,无论是哪种类型,都不返回任何值,因为没有return语句。但是等等!

如果事先没有定义global_list,这个函数就不会工作,它的输出是同一个列表,尽管有所修改。尽管global_list从未被声明为输入,但当我们使用该函数时,它会发生变化:

append_to_list(1)
append_to_list(2)
global_list

这将返回[1,2],而不是一个空列表。这表明列表确实是函数的一个输入,尽管我们没有明确说明。这可能是个问题。

对功能不诚实

这些隐性输入——或者在其他情况下称为输出——有一个官方名称:副作用。虽然我们只是使用了一个简单的例子,但是在更复杂的程序中,这些会导致真正的困难。

想想你将如何测试append_to_list:你需要阅读整个定义,理解它在做什么,定义global_list,并以这种方式测试它,而不是仅仅阅读第一行并用任何x测试函数。当您处理具有数千行代码的程序时,本例中的简单内容会很快变得乏味。

好消息是有一个简单的解决方法:诚实地对待函数的输入。这要好得多:

newlist = []def append_to_list2(x, some_list):
    some_list.append(x)append_to_list2(1,newlist)
append_to_list2(2,newlist)
newlist

我们其实没怎么变。输出仍然是[1,2],其他都保持不变。

然而,我们改变了一件事:代码现在没有副作用了。这是个好消息。

当你现在看函数声明的时候,你就知道到底发生了什么。因此,如果程序没有按预期运行,您可以很容易地单独测试每个函数,并指出哪个函数有问题。

保持你的功能的纯净就是保持它们的可维护性。照片由克里斯蒂娜@ wocintechchat.comUnsplash 上拍摄

函数式编程就是编写纯函数

一个明确声明了输入和输出的函数是没有副作用的。而一个没有副作用的函数就是纯函数。

函数式编程的一个非常简单的定义是:只用纯函数编写程序。纯函数从不修改变量,只创建新的变量作为输出。(在上面的例子中我作弊了一点:它遵循了函数式编程的思路,但仍然使用了全局列表。你可以找到更好的例子,但这里讲的是基本原理。)

此外,你可以从一个给定输入的纯函数中得到一定的输出。相反,不纯函数可能依赖于某个全局变量;因此,如果全局变量不同,相同的输入变量可能导致不同的输出。后者会使调试和维护代码变得更加困难。

发现副作用有一个简单的规则:因为每个函数都必须有某种输入和输出,所以没有任何输入或输出的函数声明一定是不纯的。如果您采用函数式编程,这些是您可能想要更改的第一个声明。

什么函数式编程不是(唯一的)

Mapreduce

循环不是函数式编程中的东西。考虑这些 Python 循环:

integers = [1,2,3,4,5,6]
odd_ints = []
squared_odds = []
total = 0for i in integers:
    if i%2 ==1
        odd_ints.append(i)for i in odd_ints:
    squared_odds.append(i*i)for i in squared_odds:
    total += i

对于您尝试进行的简单操作,这段代码相当长。它也不是函数式的,因为你在修改全局变量。

相反,请考虑以下情况:

from functools import reduceintegers = [1,2,3,4,5,6]
odd_ints = filter(lambda n: n % 2 == 1, integers)
squared_odds = map(lambda n: n * n, odd_ints)
total = reduce(lambda acc, n: acc + n, squared_odds)

这是全功能的。它更短。这样更快,因为你不需要遍历数组中的很多元素。一旦你理解了filtermapreduce是如何工作的,代码也就不难理解了。

那个不代表所有功能代码都用mapreduce之类的。这也不意味着你需要函数式编程来理解mapreduce。只是当你抽象循环时,这些函数会频繁出现。

λ函数

当谈到函数式编程的历史时,许多人会从 lambda 函数的发明说起。尽管 lambdas 毫无疑问是函数式编程的基石,但它们不是根本原因。

Lambda 函数是可以用来使程序功能化的工具。但是你也可以在面向对象编程中使用 lambdas。

静态打字

上面的例子不是静态类型的。然而,它是实用的。

尽管静态类型给你的代码增加了一层额外的安全性,但它并不一定是实用的。不过,这也是一个不错的补充。

函数式编程在某些语言中比在其他语言中更容易。照片由克里斯蒂娜@ wocintechchat.comUnsplash 上拍摄

一些语言变得比其他语言更加实用

Perl 语言

Perl 对副作用采取了与大多数编程语言非常不同的方法。它包括一个神奇的论点,$_,这使得副作用成为其核心特征之一。Perl 确实有它的优点,但是我不会用它来尝试函数式编程。

Java 语言(一种计算机语言,尤用于创建网站)

祝你用 Java 写函数代码好运。不仅你的程序有一半是由关键字组成的;大多数其他 Java 开发人员也会认为你的程序是一种耻辱。

这并不是说 Java 不好。但是它不是为那些最好用函数式编程解决的问题而设计的,比如数据库管理或机器学习应用程序。

斯卡拉

这是一个有趣的问题:Scala 的目标是统一面向对象和函数式编程。如果你发现这种奇怪,你并不孤单:虽然函数式编程的目标是完全消除副作用,面向对象编程试图将它们保留在对象内部。

也就是说,许多开发人员将 Scala 视为一种帮助他们从面向对象过渡到函数式编程的语言。这可能会使它们在未来几年更容易充分发挥作用。

[## 到底什么是函数式编程?

解密一个看似复杂的概念

medium.com](https://medium.com/madhash/what-exactly-is-functional-programming-ea02c86753fd)

计算机编程语言

Python 积极鼓励函数式编程。您可以从以下事实中看出这一点:默认情况下,每个函数至少有一个输入self。这很像 Python 的禅:显式比隐式好!

Clojure

据其创建者称,Clojure 大约有 80%的功能。默认情况下,所有值都是不可变的,就像在函数式编程中需要它们一样。但是,您可以通过在这些不可变值周围使用可变值包装器来解决这个问题。当你打开这样的包装,你得到的东西又是不可改变的。

哈斯克尔

这是为数不多的纯函数式静态类型语言之一。虽然这看起来像是开发过程中的时间消耗器,但是当你调试程序的时候,这是非常值得的。不像其他语言那么容易学,但是绝对值得投入!

这还只是大数据时代的开始。由奥斯汀·迪斯特尔Unsplash 上拍摄的照片

大数据来了。它带来了一个朋友:函数式编程。

与面向对象编程相比,函数式编程仍然是一种小众现象。然而,如果在 Python 和其他语言中包含函数式编程原则有任何意义的话,那么函数式编程似乎正在获得牵引力。

这很有道理:函数式编程非常适合大型数据库、并行编程和机器学习。所有这些都在过去十年里蓬勃发展。

虽然面向对象代码有无数的优点,但是函数式代码的优点也不应该被忽视。作为一名开发者,学习一些基本原则通常足以提升你的水平,并为未来做好准备。

感谢阅读!如果您想知道如何在 Python 代码中实现更多的函数式编程元素,请继续关注。我将在下一篇文章中介绍这一点。

为什么开发人员像喜欢 Python 一样喜欢 TypeScript

原文:https://towardsdatascience.com/why-developers-love-typescript-every-bit-as-much-as-python-687d075cfb5e?source=collection_archive---------1-----------------------

以及如果您正在处理前端 web 或后端节点开发,为什么您可能会考虑转换

Python 和 TypeScript 是最受欢迎的编程语言之一。由 Unsplash 上的奥比·奥尼耶德拍摄的照片

Python 是我的谋生工具,我喜欢它。尽管我对这种语言有一些的批评,我还是强烈推荐给任何开始从事数据科学的人。无论如何,该领域更有经验的人倾向于成为 Python 的传播者。

然而,这并不意味着你不能不时地挑战你所在领域的极限,例如通过探索一种不同的编程范式或一种新的语言。

Python 的竞争对手名单很长: RustGoScala 、Haskell、 Julia 、Swift、C++、Java、R 都在上面找到了入口。在这样一个拥挤的领域,JavaScript 和 TypeScript 没有得到那么多的认可是可以理解的。

这并不意味着 TypeScript 不是一般编程世界的主要内容。然而,在数据科学家中,它从来没有特别流行过。

您可以得出结论,TypeScript 可能不太适合数据科学。但是不要急。尽管它可能并不适合数据科学的每一个部分,但在某些领域它比 Python 有明显的优势。

如果您恰好在这些领域中的一个领域工作,那么值得尝试一下 TypeScript。如果你不这样做,谁知道你下一站会在哪里?这个领域发展迅速。如果你能超越你的鼻子,你就有竞争优势。

[## 现在要学习的 7 种现代编程语言

Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能

towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec)

TypeScript: JavaScript,但类型安全

大约十年前,微软的软件工程师注意到 JavaScript 不再能满足他们所有的需求。一方面,这种语言发展迅速,增加了非常有趣的新功能。另一方面,管道中的特性没有一个能够解决一个基本问题:JavaScript 对于小程序来说很棒,但是用它编写整个应用程序却是一团糟。

解决这个问题有几种可能性:例如,可以使用不同的语言,或者用更好的语法重新设计 JavaScript。微软的开发团队采取了不同的方法:他们通过扩展 JavaScript 来创建 TypeScript。通过这种方式,他们能够使用 JavaScript 的所有新特性,同时去掉对大型项目不利的东西。

与 Python 类似,JavaScript 在运行时编译,这意味着您需要运行代码来调试它。另一方面,TypeScript 是编译的。这提供了一个额外的安全层,因为程序员在执行之前就获得了关于可能的错误的信息。对于像 Python 或 JavaScript 这样的非编译语言,一旦意识到代码的行为不符合预期,定位 bug 可能会非常耗时。

然而,JavaScript 和 TypeScript 之间的关键区别是类型检查器。在编译时,会检查每个 TypeScript 程序的数据类型是否彼此一致。

手动做这件事听起来可能微不足道。但是当你在做有数千行代码的项目时,你会感谢上帝拥有它。

还有一些其他的区别,比如 TypeScript 有匿名函数和异步函数。匿名函数是函数式编程的一个关键特性,它可以使程序在大数据负载下更加高效。

当您需要并行执行多个操作时,或者当您处理不应该中断后台进程的 I/O 操作时,异步编程非常有用。在 Python 和 Javascript 中,异步编程是可能的,但是在 TypeScript 中,它是从核心内置的。

TypeScript 是 JavaScript 的超集。图片由作者提供,参考了 Guru99维基百科

打字稿是如何流行起来的

如果你讨厌 JavaScript 中不断出现的不合逻辑却又令人捧腹的 WTF-moments ,那么我有个坏消息要告诉你:你也会在 TypeScript 中看到所有这些东西。

但是这些语法上的小问题并不是程序员如此喜欢 TypeScript 的原因。更确切地说,它可以归结为这样一个想法:你使用一个伟大的产品——JavaScript——并添加一些更伟大的东西——静态类型。

当然,我并不是说 JavaScript 总是很棒,或者静态类型总是最好的做事方式。但是对于构建大型微软风格的应用程序来说,这似乎非常有效。

也就是说,TypeScript 的受欢迎程度仍然只有 JavaScript 的一小部分。这可能是由于年龄:打字稿是八岁。JavaScript 的历史是它的三倍!Python 也是这个领域的老古董,已经有三十年的历史了。

尽管还很年轻,但有些领域打字是不可避免的。这增加了它的受欢迎程度。例如,当谷歌宣布 Angular.js 将在 2016 年与 TypeScript 一起运行时,StackOverflow 上的标签数量出现了爆炸式增长。

TypeScript 只有 Python 和 JavaScript 的一小部分吸引力。尽管如此,在某些地区这是不可避免的。图片来自 StackOverflow Trends

TypeScript 可能比 Python 有优势

JavaScript 之所以流行是因为它可以在任何地方运行。你可以在服务器、浏览器或任何你喜欢的地方运行它。你编译一次,它在任何地方都有效。当它第一次出现的时候,它几乎就像魔术一样。

因为它是建立在 JavaScript 之上的,所以 TypeScript 也有这种魔力。Python 也是!当然,它的实现略有不同,因为它使用解释器而不是虚拟机。但这并不能改变这样一个事实:就“随处运行”而言,TypeScript 和 Python 是不相上下的。

泛型和静态类型等特性使得在 TypeScript 中进行函数式编程比在 Python 中更容易。这可能是一个优势,因为由于数据科学、并行编程、异步编程等的发展,对函数代码的需求正在增长。

另一方面,Python 一直在添加更多的和更多的函数式编程特性。当涉及到数据科学、机器学习等等时,Python 处于前沿的最前沿。

这使得并行编程和异步编程成为可能。尽管在两种语言中你都可以完成 的事情,但还是有很大的区别:在 Python 中,你需要使用特定的库来完成任务。在 TypeScript 中,所有库从核心来说都是异步的。由于后者在默认情况下功能更强大一些,所以进行并行编程通常会更容易一些。

换句话说,如果您是一名参与异步流程和并行计算的 Python 开发人员,您可能想尝试一下 TypeScript。

TypeScript 比 Python 好吗?有时候。照片由第九合作Unsplash 上拍摄

是什么让 TypeScript 对数据科学如此重要——或者不是

许多数据科学家处理异步和并行编程。您可能已经在考虑用 TypeScript 而不是 Python 编写您的下一个项目了。然而,这是否是一个好主意取决于许多其他因素。

首先,TypeScript 没有一种简单的方式来处理列表理解。例如,在处理大型数组时,这可能会令人沮丧。

其次,TypeScript 中没有本机矩阵操作。Python 有 NumPy 以及许多其他工具,这使得它们变得很容易。因此,如果您的项目大量使用线性代数,您可能希望远离 TypeScript。

第三,如果你不太熟悉 JavaScript,你肯定会有困惑的时候。因为 TypeScript 是建立在 JavaScript 之上的,所以它继承了它的所有特性——好的、坏的和 WTF。虽然,老实说,遇到这些现象也很有趣…

最后,你要考虑到编程不是一个孤独的职业。在数据科学领域有一个庞大的 Python 社区,它提供支持和建议。但是在这个时候,TypeScript 在数据科学家中并不流行。所以你可能无法在 StackOverflow 和其他地方找到对你的问题有帮助的答案。

也就是说,如果您正在开始一个没有太多大数组和矩阵运算的小项目,您可能无论如何都想尝试一下 TypeScript。尤其是当它涉及一些并行或异步编程时。

[## Python vs. Node。JS:哪个最适合你的项目?

使用一组预定义的因素对 Python 和 Node.js 进行详细比较

towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020)

底线:知道在哪里使用你的工具

没有一种语言适用于所有的任务。当然,有些语言比其他语言更有趣或更直观。当然,热爱你的工具很重要,因为这会让你在困难的时候坚持下去。因此,从 TypeScript 或 Python 这样广受欢迎的语言开始并不是一个坏主意。

但是最终你不应该像坚持一种宗教一样坚持一种语言。编程语言是工具。哪种工具最适合你取决于你想用它做什么。

目前,Python 对于数据科学来说意义重大。但是在一个快速发展的领域,你需要能够超越你的鼻子。随着你的任务的变化,你的工具也在变化。

另一方面,TypeScript 有一个围绕前端 web、后端节点和移动开发的活跃社区。有趣的是,这些领域与数据科学的交叉比人们想象的更频繁。尤其是 Node,在数据科学家中越来越受欢迎。

当然,这并不意味着你应该一次涉猎十几种语言。真正精通一门语言有巨大的价值。但是从长远来看,对其他语言和技术保持好奇将有助于你保持领先地位。

所以,当你想尝试新事物时,不要犹豫。为什么不用 TypeScript?

谷歌为什么收购 DoubleClick?

原文:https://towardsdatascience.com/why-did-google-buy-doubleclick-22e706e1fb07?source=collection_archive---------14-----------------------

照片由米切尔罗Unsplash

这项 31 亿美元的收购如何帮助谷歌成为今天的数字广告巨头

是什么给了一家伟大的公司额外的活力和火花?我一直对探索这个很感兴趣。在这一系列博客文章中,我希望从战略角度分析和剖析有趣的技术话题。希望在这个过程中,我们都能学到一两件关于如何成为一家伟大企业的事情。****

谷歌宣布,它已同意在 2007 年以 31 亿美元收购一家名为 DoubleClick 的公司。双方同意的收购价格几乎是一年前收购 YouTube 价格的两倍?什么?YouTube 是当前数字领域的标志性支柱,是世界上访问量最大的网站之一,也是其母公司谷歌的巨大收入来源。即使在那个时候,YouTube 也有巨大的潜力,这是显而易见的——那么为什么谷歌愿意为一家至少我以前从未听说过的公司支付这么多钱呢?

数字广告的过去和现在

为了理解为什么这次收购如此重要,我们需要先回过头来理解数字广告的前景。广告业是一个庞大的行业。2019 年,仅在美国,所有渠道(数字、电视、印刷等)的广告总支出。)估计为 2400 亿美元。其中,超过一半(1300 亿美元)是数字广告——数字广告是通过互联网提供给在谷歌上搜索、观看 YouTube、浏览脸书或 Instagram 等的人的广告。包括移动设备和桌面设备。数字广告(尤其是移动广告)也是广告市场中增长最快的部分,几年前,它将电视挤到了第二位,此后再也没有回头。

但回到 2007 年,当谷歌收购 DoubleClick 时,数字广告支出仍处于相对初级阶段——数字广告支出仅占总广告支出的 12%,相比之下,电视广告支出占 39%(尽管数字广告支出的增长速度比所有其他类型的广告支出快很多倍)。

数字广告支出的构成在 2007 年也非常不同——40%是付费搜索。付费搜索是指公司竞标在搜索引擎的搜索结果页面上显示广告的权利(通过挑选感兴趣的关键词和每个关键词的相关出价金额)。和现在一样,当时的头号搜索引擎谷歌以 75%的市场份额统治着付费搜索市场。为什么当时付费搜索的份额如此之大?

付费搜索早期成功和流行的原因是它易于使用和衡量。一点背景知识将有助于理解这一点。

传统广告的特点是库存有限——在篮球比赛期间,公路旁的广告牌和广告时段都是有限的。广告商必须向所有观众展示相同的广告(每个观看超级碗的观众看到的广告都是一样的),但也有例外(国家电视/广播网络的本地节目部分允许他们用本地广告轰炸我们;但是即使这样,整个本地观众也会看到相同的广告)。这意味着,为了获得最好的投资回报率,广告和它的产品必须吸引普通观众。在其萌芽阶段,数字广告面临着相反的问题。有了互联网广告,个性化广告位的供应几乎是无限的。某人在互联网上浏览网站或玩游戏的每一秒钟都是为他或她提供与此人特定兴趣相关的产品广告的机会——突然之间,广告商拥有的潜在广告位多得不知如何是好。问题是瞄准了。在对用户了解不够的情况下,他们很难识别这些兴趣并提供相关广告,这意味着数字广告活动的投资回报率往往低于预期。

照片由 Edho PratamaUnsplash 上拍摄

不过付费搜索是个例外。锁定付费搜索广告要容易得多,因为用户在每次搜索中都清楚地陈述了他感兴趣的主题或意图。当有人搜索“购买二手车的最佳地点”时,这个人的意图变得非常清楚(即使很少或没有关于这个用户的事先数据)。放置在这个人的搜索结果中的二手车广告将有非常高的点击通过(点击通过是指用户点击一个广告),允许谷歌及其搜索引擎竞争对手为这些广告中的每一个收取高昂的价格,也就是每次点击的成本

但是付费搜索并不适用于所有类型的广告。从高层次上来说,广告(以及一般的营销)试图做两件事情中的一件——让人们执行一个特定的行为(比如购买产品 A)或者建立品牌意识(比如 T2)。付费搜索广告对前者非常有效(因为即使它是一个广告,它也是相关的信息),但对后者就不那么有效了。如果我在进行谷歌搜索时,对我要找的东西有一个相当清晰的想法,那么我可能不会花时间去看一个旨在强化现有品牌或向我介绍一个新品牌的煽情视频。相反,我可能会认为这些尝试令人分心和烦恼。大多数人不会去谷歌的网站浏览;相反,这是他们寻找信息旅程中快速的第一步。

照片由依兰·迈耶Unsplash 上拍摄

这就是显示视频广告进入 (当我说显示向前发展时,我也指视频) 。展示广告是当我们访问和浏览网站时出现的交互式图像或视频(它们可以作为横幅出现,或者悬停在旁边,甚至暂时占据我们的整个屏幕)。展示广告是数字方面最接近传统电视广告的东西。如今,许多在电视广告上花费数百万美元的公司也在展示广告活动上花费了同样多甚至更多的钱(通过脸书、Instagram、YouTube 或 IMDb 等热门网站投放)。在过去十年中,正是视频广告的增长(以及在较小程度上其他展示广告形式的增长)使得数字广告从电视广告中夺取了如此多的市场份额。

今天,谷歌是为用户提供展示和视频广告的主要参与者。当你访问互联网上的一个随机网站(这似乎与谷歌无关)并看到一个广告时,它可能是由谷歌拥有的技术间接带给你的。但回到 2007 年,情况就大不一样了。

谷歌的困境

2007 年,虽然谷歌是付费搜索巨头,但它在展示广告领域的地位相对较低。事实上,谷歌可能将其在展示广告方面的弱点视为一种生存威胁。当然,AdSense 上有一些,这是一个广告网络,将广告客户与谷歌网络(一个同意让谷歌决定为他们显示哪些广告的网站集合)上可用的广告位进行匹配。但是谷歌网络主要由像个人博客这样的小网站组成,这些网站上的广告更可能是横幅广告而不是视频。

斯文·布兰德斯马在 Unsplash 上的照片

所以谷歌需要解决一个“鸡和蛋”的问题。谷歌网络中没有庞大的第三方网站(内容出版商),它很难吸引像耐克或香奈儿这样的大品牌广告商。如果没有愿意为视频广告展示(和点击率)支付高价的超级优质广告商,谷歌很难吸引最好、最大的网站加入谷歌网络。在广告界的行话中,谷歌缺乏吸引需求(广告商希望发起一场大型数字广告活动)所必需的库存(有吸引力的网站上的广告位)。

今天听起来很奇怪,谷歌将很难打入任何广告相关市场,但在当时有几个原因:

  • 请记住,虽然谷歌拥有世界上访问量最大的网站,但普通用户实际上不会在谷歌的搜索和结果页面上花太多时间(一旦你得到了方向,你通常会匆忙前往目的地)。
  • 谷歌有理由认为,在主页(和搜索结果页面)上塞满广告会降低其可信度。
  • 最后,广告行业的现有结构对现有企业来说非常轻松且有利可图。没有人渴望给谷歌这样的新贵(尤其是已经在相关市场拥有类似垄断地位的公司)一个权力地位。

与此同时,谷歌拥有一些独特而巨大的优势:

  • 它完全规划了互联网,甚至比创建网站的人更了解网站。这就是为什么即使在 2007 年,AdSense 已经是一个主要的收入来源。
  • 它可以访问用户的全部搜索历史(和电子邮件)。那时,谷歌可能比历史上任何一家公司都更了解普通人。
  • 它还知道你查看搜索结果后去了哪个网站。

换句话说,谷歌拥有宝贵的数据,可以帮助网站,甚至是已经拥有大量专有数据的大型网站,最大限度地发挥展示广告空间的价值。它还拥有关于用户兴趣和背景的无与伦比的数据,广告商可以利用这些数据显著提高他们的展示和视频广告活动的关注度和回报。它只是需要解决“鸡和蛋”的问题。

拍摄的亚历山大·米尔斯Unsplash

解决方案:购买 DoubleClick

来自《圣何塞水星报》的消息称:

“在与分析师和记者的电话会议上,埃里克·施密特说,在一次战略评估显示销售展示广告的机会比谷歌高管此前想象的要大,而且双击公司在进入市场方面做得非常出色之后,谷歌决定出价收购双击公司。”

对谷歌来说,收购 DoubleClick 是一次巨大的成功。2007 年,DoubleClick 是一家擅长提供展示广告的公司,与主要网站和广告商(他们都是其软件的用户)都有大量的关系。也许对谷歌来说更有吸引力的是,他们即将建立 DoubleClick Ad Exchange,这是一个广告商可以实时竞标广告清单(网站上可以展示广告的位置)的市场。

谷歌一夜之间从一个预告片变成了展示广告的领导者(同时阻止了主要搜索竞争对手微软的同样行为)。此外,谷歌现在有了一个明确的途径来利用其独特而宝贵的网站和用户知识。它可以作为一个平台这样做——通常是整个价值链中最有利可图的位置。

在 DoubleClick 之前,我想象谷歌和主要广告商之间的对话是这样的:

Google: Hey Chanel, it's Google again. I know everything about my users and can help you target your brand message better than ever before! Will you consider doing some brand advertising through me?Chanel: Oh sounds great! Can I show a 40 second video starring Charlize Theron on your main page whenever someone searches "purse"?Google: No. That would be super lame. Our users expect our main page to be clean and reasonably minimalist.Chanel: ... Then where can I play my video to ensure that it gets tons of views? It was really expensive to produce.Google: How about on the sidebar of this one nifty travel blog?Chanel: ... <hangs up>

双击之后,就不再需要给主要的广告商打电话了。他们可能已经在客户名单上,以及所有主要网站的注意。相反,谷歌可以只是坐在中间代理交易,从它投放的每一个广告中收取少量费用(和数据)(这种权力地位不是瞬间的;而是仍然花了几年时间来完全建立收购后的关系)。

这种权力经纪人的地位也与其现有业务产生了巨大的协同效应。一个明显的受益者是 AdSense(以及谷歌拥有的其他广告服务业务部门)——谷歌现在对广告市场的双方都有更大的吸引力,可以利用 DoubleClick 的关系来显著扩大广告库存和自己的知识,以提高每个广告的平均投资回报率。这为谷歌创造了一个良性的反馈循环,其广告的优异表现吸引了更多的广告商(需求),这反过来又吸引了更多的网站(供应),等等,以指数级的速度扩大了其覆盖范围和市场力量。与此同时,它可以使用其整个套件或产品,如搜索、地图、Chrome,最终还有 Android,来不断完善其广告定位算法。

在另外两个领域,此次收购对谷歌来说是一个巨大的胜利(但对用户隐私和市场竞争来说是一个损失):

  1. 虽然谷歌花了几年时间在这方面全力以赴,但通过使用 cookies,谷歌可以在用户访问通过 DoubleClick 提供广告的网站时跟踪他们。由于 DoubleClick(或谷歌本身)提供的广告在随后几年变得如此流行,这相当于谷歌知道你在网上的几乎所有地方(除非你改变你的隐私设置)。
  2. 具有讽刺意味的是,谷歌对搜索广告将停止增长的担忧是没有根据的。由于谷歌作为互联网门户的地位,以及最终移动互联网使用的爆炸式增长,谷歌继续从搜索相关广告中获得数十亿美元的收入。希望(或需要)进入这一巨大市场的广告行业参与者受到极大的激励,在谷歌的广告交易平台(通过收购 DoubleClick 收购的平台)上进行交易。这最终让他们建立了这个星球上最大、最强大的广告交易所。成为一个双边市场中最大的经纪人(就像广告交易所,谷歌在那里代理内容网站和广告商之间的交易)已经带来了巨大的优势,因为双方的参与者自然都想在最大的市场中交易(所以你的相对大不断吸引更多的参与者,这使你变得更大)。但最重要的是,谷歌的专有数据和搜索优势使他们能够在其交易所交易中获得额外的独特价值。

值得注意的是,2014 年,谷歌推出了一个私人(仅限受邀者)广告交易所,优质内容出版商(最好的网站)和优质广告商可以在这里进行交易。这让交易双方的大品牌对广告内容和广告出现的地方有了更多的控制权。在短短的几年里,谷歌已经从局外人变成了最负盛名的数字广告交易的经纪人……这一切都得益于它收购 DoubleClick 时获得的技术。

我为什么会涉足数据科学?

原文:https://towardsdatascience.com/why-did-i-ever-get-into-data-science-aa69d3c74d19?source=collection_archive---------18-----------------------

我不是一个“数字迷”

莱斯·安德森在 Unsplash 上的照片

当你开心的时候,时间过得很快

我一直是一个反思自己行为并试图从中吸取教训的人。我在数据科学团队担任产品分析师的新职业生涯已经超过 90 天了,所以我认为是时候做一些反思和思考了,为什么我决定颠覆我美好而稳定的生活,走上一条艰苦工作、奋斗和数字的漫长道路。

它从数据开始

我决定转变生活的核心是我对数据的热爱。我喜欢收集它。我喜欢清理它。我喜欢看着它。我喜欢和数据打交道!我对数据的热爱源于两个种子:

我喜欢股票市场。我找到了一份软件技术支持的工作。

两颗种子发芽了

小时候,我记得听到父母一直在谈论市场。我爸爸总是播放新闻,并在早餐时看报纸上的每日报价。我在年轻的时候接触了股票市场这个创造财富的引擎,我对通过拥有一家公司的一部分来赚钱的想法着迷了。我还没有成为一个伟大而富有的投资者,但我确实尝试过一段时间的日内交易,并接受了一群交易者的指导。他们让我接触到一些昂贵的数据…

大约一年前,我在一家软件公司找到了一份技术支持的工作,在那里我学习了 SQL 的基础,对计算机科学有了兴趣,并接触了软件开发生命周期。随着我对 SQL 的热爱,我开始在家里创建数据库。

我的第一个用例:收集昂贵的股票数据!

每天,我都会从他们允许我访问的 feed 中手动抓取数据。我会把它转储到一个 SQL 数据库中,试图过滤掉噪音,揭示高概率交易。总的来说,它产生了一些好的结果,但当市场环境发生变化时,我的结果就乱了套。

我意识到,比起每天交易,我更喜欢创建一个算法来排列和分析我的股票数据。

朝着正确方向的努力

在我变得更加精通 SQL 之后不久,我尝试了一下 Python。我看了几个 YouTube 教程,用 BeautifulSoup 从雅虎搜集了股票数据。我觉得这很酷,但我并不太喜欢。没过多久,我就开始看到“数据科学”这几个字到处冒出来。我想,“我喜欢数据,我喜欢科学,我应该看看这个!”

我认识谁?

当时我已经在这家软件公司工作了大约 6 年,我知道我们有一个数据科学团队,所以我决定看看经理是否有兴趣进行一次非正式的聊天。我告诉他我对数据的热情和学习更多数据科学的愿望,我担心我会失败,因为我的背景是技术写作和软件支持,而不是计算机科学和统计...

本质上,他让我相信我的背景没有我的好奇心和求知欲重要。

几个月后,在读了几本关于机器学习的入门书籍后,我报名参加了一个分析编码训练营,作为训练自己学习编码的一种手段。MOOCs 是一种很好的学习方式,尤其是如果你有基础的话,但一开始我无法专注足够长的时间来获得很多东西。如果你正在考虑一个编码营,看看我写的关于我的经历的文章

由 pxhere.com 提供

倒带时间很快

当我大约 26 或 27 岁时,我的生活发生了重大转变:

我决定认真对待我的激情。

例如,我认识很多人,他们从一个爱好跳到另一个爱好,或者总是被最新的闪亮的东西分心。我没有那样做,而是决定看看我能把我关心的几个爱好推进到什么程度:

流放之路
计算机
写作
数据……数据科学?

学习编码

我为自己建立的心智框架让我坚持自己的热情并认真对待它们,结合新兵训练营的课堂环境和我的 SQL 经验,让我茁壮成长。我第一个告诉你,我的 python 代码还在新手水平,可能有点超越;不管怎样,我几乎每天都在家里和工作中专心致志地编码,努力达到下一个级别。我从新兵训练营毕业才大约六个月,我不仅在一个数据科学团队找到了一份工作,还对通过媒体和我的博客与世界分享我的编码项目产生了热情!

来回答这个问题

在进入数据科学并失眠研究算法和我可以用来聚集客户使用数据的新方法之前,我有一个相当甜蜜的生活:很少抱怨,稳定的关系,体面的钱…那么什么给了呢?

我看到了成为一个不断发展的领域的一部分的机会,在这个领域中,我可以探索我的激情,并与聪明和志同道合的人在一起。

虽然我不是数据科学家,但我可以和已经成为或想要成为数据科学家的人一起工作,我认为这很棒。不要误解我,我也和许多其他有趣的人一起工作,我努力维持我在公司任职期间建立的友谊。对某件事感到陌生,但有一个希望看到我成功的支持网络,这种感觉很好。这就是我大部分时间在工作和与妻子相处时的感受!

剥洋葱皮

除了机会、对数据的热爱和对编码的奉献,我的数据科学决定还有另一个组成部分…我对修辞理论的兴趣在大学里激起,并让我走上了获得科学和技术通信学位的道路。

数据科学和数据分析为我提供了新的工具,我可以用这些工具来启发观众。

亚里斯多德

包装东西

虽然标题有点“点击诱饵”,但在我在数据科学团队度过头 90 天后,我不得不反思我为什么会涉足数据科学。虽然感觉要学的信息太多了,但我很高兴自己完成了这个转变。总的来说,是我对数据的热爱、对学习的执着、支持性的关系,以及我的激情组合,让我这个不喜欢数字的人变成了一个从事数据科学的人。查看我的 GitHub 和关于我最新项目的文章:

[## 弯曲游戏-概述

在 GitHub 上注册你自己的个人资料,这是托管代码、管理项目和构建软件的最佳地方…

www.github.com](https://www.github.com/bendgame)

谢谢大家!

—埃里克·克莱彭

[## Python 中的仪表盘,适用于初学者和使用 Dash 的其他人

使用 Python 中的 Dash 初学者教程构建一个基本的和高级的仪表板

medium.com](https://medium.com/swlh/dashboards-in-python-for-beginners-and-everyone-else-using-dash-f0a045a86644) [## 成为数据科学领域新产品分析师的 4 个成功秘诀

帮助我在数据科学领域获得早期成功并战胜冒名顶替综合症的 4 个技巧

medium.com](https://medium.com/swlh/4-tips-for-finding-success-as-a-new-product-analyst-in-data-science-30b01e18fa86)

为什么数字技术公司要做机器人研究

原文:https://towardsdatascience.com/why-digital-based-technology-companies-do-robotics-research-ff3ef3025d98?source=collection_archive---------51-----------------------

在家实现人工智能的目标

通过让自主代理与世界互动来学习如何学习。为什么像脸书和谷歌这样的大型科技公司雇佣机器人专家来给他们多余的会议室带来活力。

这最初发表在我的机器人学免费时事通讯上&自动化,民主化的自动化。

[## 自动化大众化

一个关于机器人和人工智能的博客,让它们对每个人都有益,以及即将到来的自动化浪潮…

robotic.substack.com](https://robotic.substack.com/)

你在哥哥的另一间技术办公室里闲逛,看到一个中等大小的会议室,里面全是机器人。当你拜访朋友,在他们的广告技术创业公司的办公室里尝试新的微型咖啡馆时,这不是你所期望的(嗯,当访问者被允许时),但这正日益成为现实。

大型科技公司在探索性研究上投入了大量资金(T2,每年 100-200 亿美元,在最大的公司中),并持有更多资金以备不时之需(苹果、微软、谷歌、亚马逊和脸书共持有5500 亿美元现金)。就数十亿美元而言,雇佣几个机器人研究人员只是沧海一粟。它也收集了更多的顶尖人才,但我认为这比我考虑的更有助于短期发展。

机器人作为一个行业的前景在未来十年(或者更快,取决于疫情的延续,正如我详细写的)将产生近乎指数级的影响。科技公司希望抓住的部分是那些在你家里实现其算法的机器人。正如我在中所写的,推荐是一个游戏自动化

一个 推荐系统和这些平台的总主题 是:如果我们能预测用户想做什么,那么我们就能把那个特性做成我们的系统。

将这种情况扩展到占据你生活和家庭空间的代理,问题就变得复杂了:如果它能出现并询问你过得如何 ,那么关闭你的数据或关闭你的应用就无法逃脱设备。**

我是这些技术的大力支持者,但是为什么大公司在这个领域大量投资的框架(一个重要原因)是重要的。自主代理可以在家中获得更多、更多的巨大收益——包括为独居的高危人群提供安全,帮助做家务,在对话中与你的数字生活(电子邮件)互动,等等。我们需要确保我们的建设是正确的。

来源 Pexels。

具身人工智能

给予自主代理人与物理世界互动的能力。

我认为这是一个更加微妙的话题,而不仅仅是翻译人工智能和机器学习的最先进方法——通过身体互动进行学习是我们体验的第一种学习类型。孩子们通过触摸了解新的物体,以及它们如何与他们正在萌芽的生命互动。

尝试在硬件中学习的任务有不同的限制:样本更有价值(我们不能永远运行硬件),结果可以直观地解释(与人类的操作方式很好地联系起来),以及学习可能存在的更多证据。我们试图模仿自然,因为它是可行的,但是没有理由机器智能不能远远超越我们人类的学习方式。

构建为硬件设计的人工智能系统调整目标和方法,为我们每天都在交互的更多数字人工智能方法创建一个反馈回路,如计算机视觉和自然语言处理。 我会继续打开这个盒子 学习机器人将如何与传统的机器学习研究协同工作。

所以,我想扩展一下具身 AI 的定义: 学习如何学习 ,通过让自主智能体拥有与世界互动的新方式。

总结一下——了解脸书在机器人技术方面的努力脸书的室内探索项目(Habitat) 、微软的公共研究网站、苹果的招聘信息,或者谷歌大脑的机器人团队。亚马逊在这件事上的目标要直接得多(物流、送货、接管更多行业等)。

来源—作者。我正在研究如何安全地让四旋翼飞行器(上图)在人们家里学习飞行。

家用机器人的发展前景

这是体现人工智能的地点、时间和方式——我们需要进一步思考的问题。

  1. 家用机器人的神秘世界:我们需要解释为什么一些机器人公司给他们的玩具配上人脸是如此疯狂。此外,提问:为什么支援机器人针对的是最脆弱的目标——儿童和老人?
  2. 不要把你的机器人局限于你的世界观:我们怎样才能改变我们训练和制造机器人的方式,让它们更广泛地发挥作用?
  3. 给算法密钥:是什么限制了 Alexa et。不要变得非常有用,不要过度安排时间,不要例行采购,等等?不仅仅是隐私问题。
  4. 当个人机器人不再糟糕的时候:把所有的部分组合在一起将是一个挑战

来源-作者。

为什么婴儿潮一代还在经营一切?

原文:https://towardsdatascience.com/why-do-boomers-still-run-everything-242779108b56?source=collection_archive---------9-----------------------

关于婴儿潮一代占社会主导地位的数据

弗拉德·萨尔古在 Unsplash 上拍摄的照片

既然伊丽莎白·沃伦已经退出了民主党初选,我们知道我们的下一任总统要么是一位超重的 73 岁现任总统(唐纳德·川普),一位认知能力下降的前副总统(乔·拜登——77 岁),要么是一位刚刚从心脏病发作中康复的老年参议员(伯尼·桑德斯——78 岁)。

这种令人遗憾的事态只是一个更广泛趋势的最新和最明显的例子——婴儿潮一代拒绝 到社会的一边。随着现代医学的进步,人们的寿命越来越长,更重要的是工作时间越来越长。这对个人来说很好,但对世界来说却有可怕的后果。以下是婴儿潮一代仍然占据主导地位的 5 个领域,它们阻碍了新一代人和整个人类的进步。

1.政治

下面是显示美国总统当选时年龄的直方图。最后一个例外是唐纳德·特朗普,他在 70 岁时进入椭圆形办公室。在特朗普之前,大多数总统(包括像华盛顿、林肯和罗斯福这样的伟人)都是在 50 出头或 50 多岁时就职的。

https://en . Wikipedia . org/wiki/List _ of _ presidents _ of _ the _ United _ States _ by _ age

如果民主党在 2020 年获胜,我们最终会有一个头发比 Wilco 音乐会还要白的男人,他的手机可能被编程为使用最大尺寸的字体。虽然年龄只是一个数字,但我认为我们希望总司令的年龄低于 70 岁。

看看政府的其他部门,我们会发现它们同样陈旧过时。现任美国参议员的平均年龄是 63 岁,超过四分之一的人超过 70 岁。

我们的民选官员无法应对现代世界的挑战,这有什么好奇怪的?我们取笑 Ted Stephens 在 2006 年称互联网为“一系列管子”,但我们认为我们现在的代表现在知道得更多吗?技术正在改变我们生活的方方面面,而负责监管技术的人甚至不知道如何下载 Chrome。

2.经济

从有线电视到早餐麦片,很多人都在谈论 T2 的千禧一代是如何扼杀一切的。报道不足的是,这有多少应归咎于婴儿潮一代。如果我们看看年轻一代的钱有多少,难怪他们会吝啬在苹果蜂的夜晚。

通过控制政府,婴儿潮一代能够利用他们的政治权力来保护他们的经济利益。2008 年后,联邦政策主要倾向于保护金融资产(股票、债券、房地产等)的价值。).我不认为婴儿潮一代的政治家创造了导致婴儿潮一代资产升值的政策是巧合。通过优先考虑现状和不进行任何结构性改革,美国的不平等已经达到惊人的水平,国家的大部分财富都集中在已经很富有和非常老的人手中。年轻选民中社会主义的崛起是这种情况的自然结果。

数据来自https://dqydj . com/按年龄划分的资产净值计算器-美国/

3.商业

金融资产的牛市不仅对婴儿潮一代的政治家有利,对婴儿潮一代的首席执行官也是好事。对于美国大公司的领导人来说,平均年龄已经上升到 56 岁,许多人现在已经 70 多岁了。

https://www . alvarezandmarsal . com/sites/default/files/files/Age-CEO-CFO-COO . pdf

此外,趋势显示,高管年龄持续增长。

就我个人而言,我不会把这归咎于某些道德上的失败,比如高管拒绝退休。然而,我确实担心这种古老的血统会减缓经济的发展。新公司成立率处于历史低点。企业似乎越来越陷入短期思维,为下一个季度而不是未来十年做计划。

即使在专业人士中,平均年龄也上升了。现在 30%的医生都超过 60 岁了。律师事务所没有扩大年轻合伙人的队伍。我们到处都能看到老年人使用旧的思维方式,并且没有为新的问题做好计划。

4.大学

如果年轻人控制了竞争机构,婴儿潮一代对企业和政府的统治就不会如此令人担忧。例如,美国大学系统是国家的一个独立支柱,通过研究项目和技术发展为我们的经济成功提供基础。

唉,我们在这里也看到了下降。在这十年里,大学被各种问题所困扰,比如学费飞涨、管理人员激增,以及研究中的治理问题,这些问题导致了像复制危机这样的事情。

这可能是巧合,但所有这些负面趋势都与大学校长的老龄化相吻合。美国教育委员会的研究表明,绝大多数大学校长都超过了 60 岁。

https://www.aceacps.org/summary-profile/#demographics

大学是未来伟大想法诞生的地方。同样是那些在 60 年代抗议像越南战争这样的重大问题的婴儿潮一代,现在正在对学生们穿什么样的万圣节服装实施严格的规定。

5.报刊

我们社会的第四等级传统上被赋予了控制过度权力的责任。鲍勃·伍德沃德和卡尔·伯恩斯坦一起揭露水门事件时 29 岁(1972 年 28 岁)。同年,亨特·S·汤普森 35 岁,他写下了开创性的“竞选中的恐惧和厌恶”。我们最著名的记者现在年纪大了很多,作品也少了很多。

例如,《纽约时报》一半的专栏作家——塑造国家叙事的人——是婴儿潮一代。像保罗·克鲁格曼(67 岁)和托马斯·弗里德曼(66 岁)这样的老人把 NYT 观点作家的平均年龄提高到 53 岁以上。虽然《纽约时报》仍会报道重大新闻,但当今的重大事件往往由局外人来处理。充满高薪婴儿潮一代的新闻机构积极地错误地对待伊拉克对国家安全局窃听事件坐视不管,而不是向公众报道。

当“灰色女士”让新贵出版物失去流量,并吸收他们最优秀的人才时,很明显,整个新闻业被老一辈人所控制。将财富和权力集中在老年人身上的同样的结构性问题,也将人们的注意力集中到了由旧领导人领导的旧机构。

最后的想法

2020 年的世界正在快速变化。美国正在失去经济和政治实力,技术进步正在彻底改变每个行业,气候变化和病毒性流行病等全球性问题威胁着我们的生活方式。我认为这些新问题需要新鲜血液来面对。

去年流行的“ Ok Boomer ”模因不是对老年人的肤浅批评,而是对我们社会的权力结构存在严重问题的最终承认。我们所依赖的系统和机构在物理上和隐喻上都僵化了。它们导致了影响到每个人的问题,从大学生到退休老人。只有用新的思维和新的想法,我们才有希望面对我们面临的挑战。

为什么 GANs 需要这么多噪音?

原文:https://towardsdatascience.com/why-do-gans-need-so-much-noise-1eae6c0fb177?source=collection_archive---------10-----------------------

形象化甘人如何在低维潜在空间中学习

图片来源:像素

生成对抗网络(GANs)是一种在给定一组旧的“真实”样本的情况下生成新的“虚假”样本的工具。这些样本实际上可以是任何东西:手绘数字、脸部照片、表现主义绘画,你能想到的都有。为此,GANs 学习原始数据集背后的底层分布。在整个训练过程中,生成器逼近这个分布,而鉴别器告诉它哪里出错了,两者通过军备竞赛交替改进。为了从分布中抽取随机样本,给发生器随机噪声作为输入。但是,你有没有想过为什么 GANs 需要随机输入?常见的答案是“所以它们不会每次都生成相同的东西”,这是真的,但答案比这稍微微妙一些。

随意采样

在我们继续 GANs 之前,让我们绕道考虑从正态分布中抽样。假设你想用 Python 来做这件事,但是你从来没有读过numpy文档,也不知道np.random.normal()的存在。相反,你所要做的就是random.random(),它在区间(0,1)内均匀地产生值。

图 1:从我们的输入均匀分布(蓝色)和目标正态分布(橙色)中抽取的 100k 个样本的直方图。

简而言之,我们希望将图 1 中的蓝色分布转换成橙色分布。幸运的是,有一个函数可以做到这一点:逆累积分布函数,也称为分位数函数。图 2 中所示的(非反转)累积分布函数(CDF)描述了对于某些指定的 x ,从所讨论的分布中抽取的任何随机值将等于或小于 x 的概率。

图 2:标准正态分布的 CDF。

例如,在图 2 中的点 x=0 ,y = 0.5;这意味着 50%的分布低于零。CDF 的一个便利特性是输出范围从 0 到 1,这正是我们从random.random()函数中获得的输入!如果我们将 CDF 倒置(翻转过来),我们得到分位数函数:

图 3:标准正态分布的分位数函数。

这个函数给出了分位数(我们的 x ,范围从 0 到 1)和正态分布中相应值之间的精确关系,允许我们直接从正态分布中采样。即 f(random.random()) ~ N(0,1),其中输入空间中的每个点对应输出空间中的一个唯一点

图 4:说明使用分位数函数将均匀分布(蓝色)映射到正态分布(橙色)的动画。

这和甘斯有什么关系?

在上面的场景中,我们拥有分位数函数,但是如果我们没有,并且必须学习从输入空间到输出空间的映射,那该怎么办呢?这正是 GANs 要解决的问题。在之前的文章中,我举例说明了如何使用 GANs 从正态分布中取样,如果你处于数据紧急状态,并且没有可用的分位数函数。在这种情况下,我发现更有帮助的是,不要把 GANs 想象成随机采样的工具,而是把某个 k潜在维(输入)空间映射到某个 p样本维(输出)空间的函数,然后可以用它把潜在空间的样本转换成样本空间的样本。在这种情况下,很像分位数函数,没有随机性。

头脑中有了地图,让我们考虑如何从 2D 正态分布中抽取随机样本,仅将 0 到 1 之间的 1D 随机样本作为输入。

图 5:2D 正态分布(橙色)和 1D 均匀分布(蓝色),各有 100k 个样本。

我们如何将蓝线中的 100k 个样本映射到橙色斑点中的 100k 个样本?没有什么好办法。当然,我们可以使用阿砣曲线,但是这样我们就失去了有用的属性,即输入空间中的点靠在一起会导致输出空间中的点靠在一起,反之亦然。正是由于这个原因,GAN 的潜在空间的维数必须等于或超过其样本空间的维数。这样,函数就有足够的自由度将输入映射到输出。

但为了好玩,让我们想象一下,当只有一维输入的 GAN 被赋予学习多维分布的任务时会发生什么。希望结果不会让你吃惊,但是看起来很有趣。

2D 高斯

让我们从图 5 所示的问题开始:将 0 到 1 之间的 1D 范围映射到 2D 正态(或“高斯”)分布。我们将使用一个典型的普通 GAN 架构(代码在文章末尾)。

图 6:潜在维度为 1 的 GAN 试图学习 2D 高斯分布。灰点是从真实分布中抽取的样本,红点是生成的样本。每一帧都是一个训练步骤。

如你所见,这可怜的东西不知所措。只有一个自由度,它几乎不能探索样本空间。更糟糕的是,因为生成的样本在 1D 流形中是如此密集(这张 gif 中的灰点和红点一样多!),鉴别器能够偷懒,从来不需要努力从假货中辨别出真正的点,因此生成器不能获得非常有用的信息(当然也不足以学习空间填充曲线,即使它有这个能力!).

图 6 显示了前 600 个训练步骤。30k 后,结果如下:

图 GAN 在 30k 训练步骤后从图 6 中学习到的分布。

这是一个可爱的小曲线,但几乎不是高斯分布。GAN 在 30k 步后完全无法学习映射。作为背景,让我们考虑当给定 2D、3D、10D 和 100D 潜在空间以映射到上述分布时,具有相同架构和训练例程的 GAN 的表现如何:

图 30k 训练步骤后,具有 2D、3D、10D 和 100D 潜在空间的 GANs 的输出

2D 潜在空间 GAN 比上面的 1D GAN 好得多,但是仍然离目标分布很远,并且有几个明显的缺陷。3D 和 10D 潜在空间产生具有视觉上令人信服的结果的 GAN,而 100D GAN 产生似乎是具有正确方差但错误均值的高斯分布。但是,我们应该记住,在这个特殊的问题上,高维 GANs 是作弊的,因为许多均匀分布的平均值近似正态分布。

八个高斯人

图 9:八个高斯分布

八高斯分布(图 9)就像它听起来的那样:八个 2D 高斯分布围绕原点排列成一个圆,每个高斯分布的方差足够小,几乎不会重叠,并且协方差为零。虽然样本空间是 2D,但该分布的合理编码有三个维度:第一维是离散的,描述模式(编号为 1 到 8),另外两个分别描述该模式的 xy 位移。

我用 latent_dim=1 对一个 GAN 进行了八步高斯分布 600 步的训练,结果如下:

图 10:一个潜在维度为 1 的 GAN 试图学习八高斯分布。灰点是从真实分布中抽取的样本,红点是生成的样本。每一帧都是一个训练步骤。

正如所料,GAN 努力学习有效的映射。30k 步后,这是学习到的分布:

图 11:GAN 在 30k 训练步骤后从图 10 中学习到的分布。

GAN 显然很难将 1D 潜在空间映射到这个 3D 分布:最右边的模式被忽略,模式之间产生了相当数量的样本,样本不是正态分布的。为了进行比较,让我们考虑 30k 步后的另外四个 gan,潜在维度分别为 2、3、10 和 100:

图 12:30k 训练步骤后,具有 2D、3D、10D 和 100D 潜在空间的 GANs 的输出

如果不实际测量真实分布和学习分布之间的 KL 差异,很难判断哪个是最好的(soon™️将在后续文章中推出!),但低维 GANs 似乎在模式间的负空间产生的样本更少。更有趣的是,2D GAN 没有显示模式崩溃,3D 和 10D GAN 仅显示轻微的模式崩溃,而 100D GAN 在两种模式下都无法产生样本。

螺旋形

图 13:螺旋分布。随着螺旋从圆向外延伸,密度分布减小,并且在臂的横向上密度是均匀的

图 13 所示的螺旋分布在某些方面比八高斯分布简单。GAN 只有一种模式(虽然拉长和扭曲),不会被迫离散化其连续输入。可以用两个维度有效地描述它:一个描述沿螺旋的位置,另一个描述螺旋内的横向位置。

我用 latent_dim=1 训练了一个 GAN 600 步,结果如下:

图 14:潜在维度为 1 的 GAN 试图拟合螺旋分布。灰点是从真实分布中抽取的样本,红点是生成的样本。每一帧都是一个训练步骤。

同样,GAN 努力学习有效的映射。30k 步后,这是学习到的分布:

图 15:GAN 在 30k 训练步骤后从图 14 中学习到的分布。

类似于八高斯分布的情况,GAN 在映射螺旋分布方面做得很差。省略了螺旋的两个区域,并且在负空间中生成了许多样本。我在的另一篇文章中详细讨论了这个低效的映射问题,所以我在这里不再赘述;相反,让我们考虑另外四个 gan,其任务是在 30k 步后学习该分布,同样具有 2、3、10 和 100 的潜在维度:

图 16:30k 训练步骤后,具有 2D、3D、10D 和 100D 潜在空间的 GANs 的输出

同样,在没有实际测量 KL 散度的情况下,很难判断哪个是最好的,但是负空间中覆盖范围、均匀性和采样数量的差异是值得考虑的。

关闭思路

人们很容易被 GAN 的热情所吸引,并把它们当作神奇的机器,用随机数作为燃料来弹出新的样本。了解工具的基本工作原理对于有效地使用它和在它出现故障时排除故障是至关重要的。对于 GANs,这意味着理解生成器正在学习从某个潜在空间到某个样本空间的映射,并理解这种学习是如何展开的。将 1D 分布映射到更高维度分布的极端情况清楚地说明了这项任务有多复杂。

本项目中使用的所有代码都可以在以下 GitHub repo 中获得:

[## ConorLazarou/培养基

甘斯和低维潜在空间:可视化甘斯如何学习时,饥饿的随机噪音。

github.com](https://github.com/ConorLazarou/medium/tree/master/12020/visualizing_gan_dimensions)

为什么我有一个数据科学博客?分享代码的 7 个好处

原文:https://towardsdatascience.com/why-do-i-have-a-data-science-blog-7-benefits-of-sharing-your-code-77f2aee53127?source=collection_archive---------57-----------------------

通过写作学习,获得反馈,为开源社区做贡献,建立职业关系,等等

帕特里克·福尔拍摄的照片

我的博客statsandr.com于 2019 年 12 月上线。虽然和其他人相比,9 个月的写作时间很短,但我已经可以说这是一次不可思议且非常丰富的冒险!

随着 45 篇文章的发表(在撰写本文时)以及从描述性统计概率推断统计R Markdown数据可视化的主题,我已经看到了通过技术博客分享我的代码的许多好处。

在这篇文章中,我强调了其中的 7 个(排名不分先后),希望它能给你们一些人以启发和激励。在本文的最后,我还提到了一些创建自己的博客所需的现代解决方案。

请注意,在这 9 个月里,我没有从我的博客谋生,这不是我的目标,因为我需要把它作为一个优先事项。 1 不过,我已经从读者那里得到了足够多的正面反馈,更重要的是,我已经学到了足够多的东西来继续写作。

(对于感兴趣的读者,请看一年后对该博客的评论——以及对未来计划的一些想法。在这篇评论中,我通过分析页面浏览量、会话、用户和与{googleAnayticsR}包的互动来追踪它在 R 中的表现。)

#1 通过写作学习

我真的很喜欢学习许多不同领域的新东西。作为我在大学的助教职位的一部分,我通过向来自不同背景的学生教授统计学学到了很多东西(我现在仍在学习)。

在创办这个博客之前,我相信我理解了一个统计学概念,只要我能够把它教给我的学生。如果我不能用清晰易懂的方式解释它,这意味着我需要更彻底地研究它,因为我实际上并没有完全理解它。

这通常被称为费曼技术。这种学习方法是基于这样一个事实,为了完全掌握一个主题,你需要能够用简单的术语解释给别人听。

通过这篇博客,我实际上意识到,为了学习和完全理解新的东西,一个人必须:

  • 能够清楚地传达它,并用简单的术语教授它,
  • 但是能够以精确简洁的方式写下来

因此,尽管这个博客最初是为了分享我最熟悉的统计学概念(希望它对一些人有用),但我现在也用它来通过写作来学习。我认为这种额外的学习方式实际上和教学一样有效,因为写作可以让我巩固我的理解。

显然,我主要是在学习统计学及其在 R 中的应用,因为它们是博客的主要话题。然而,我从来没有想到我还会学到这么多关于:

  • 网络开发和搜索引擎优化/分析(这是当今越来越重要的技能)
  • 项目管理(当你从零开始构建一个东西并希望开发它的时候)
  • 写作(作为一个非英语母语的人,我仍然需要提高这项技能)
  • 交流结果(任何数据科学家都会告诉你,没有适当交流的结果是无用的,写博客是一个很好的练习)
  • 营销/公共关系/品牌管理(想想社交网络和如何处理读者的各种问题)
  • 等等。

维护博客教会了我一些基本技能,这些技能通常是在全职工作中传授的。有了博客,你负责从内容到读者询问的一切,就像一个负责一个项目的员工,他必须与最终用户打交道和沟通。

不要误解我,除了例外,我不认为博客可以完全取代个人发展方面的工作,但它肯定有助于学习广泛的重要技能。除了工作之外,阅读书籍和完成数据科学在线课程也是获得技能的其他例子,但博客往往更加多样化和实用,使其更加有益(在我看来)。

我学习的另一种方式是通过对我写的关于的主题进行研究。

一个例子是我在 R 中关于离群点检测的帖子。作为任何描述性分析的一部分,我被用来检查潜在的异常值。因为我对这个话题很熟悉,所以我决定写一写。然而,我发现这篇文章不够完整,所以我做了进一步的研究。事实证明,事实上有几个我不知道的统计测试。我写了这些测试,现在每当我检查潜在的异常值时,我都包括这些新技术。

最后但同样重要的是,我经常收到读者的电子邮件,要求写一个他们选择的主题。有时,我从未听说过他们建议的主题,所以出于好奇,我做了一些研究。即使我还没有写出来,因为我对它还不够熟悉,至少我知道它的存在,我或多或少知道这是关于什么的。

如果学习的唯一好处没有说服你开始你的博客,看看我在下面的章节中经历的其他好处。

#2 获得反馈

从更有经验的用户那里获得反馈、建议和建设性的批评。注释对纠正我代码中的拼写错误和 bug 有很大的帮助,同时也有助于提高我的 R 技能。

你会惊奇地发现,尽管你花了无数的时间来检查你的代码,总有人会发现你漏掉的一个打字错误。例如,来自世界各地人们的宝贵反馈无疑提高了我日常使用的闪亮应用程序的质量和完整性。

因此,博客可以被看作是一种强大的同行评审方法,可以让你了解一个概念、代码或 R 实践。在做一个玩具例子时犯错误并改正它们也比在工作场所的真实项目中犯错误要好。

此外,一些人将他们的博客文章汇总成文章或书籍,因此博客可以被视为一种方式:

  • 朝着长期出版目标取得渐进进展,以及
  • 在这个长期目标的每一步接受反馈。

#3 提醒未来自己的个人笔记

有多少次你在电脑的文件夹中搜索一段代码,最终在谷歌上寻找解决方案,因为你不记得你为哪个项目写了这段代码?它每天都发生在我身上。

有了按主题组织的博客帖子,现在我花的时间少多了(挫败感也少了!)去找我几个月前写的代码片段。这也允许我保持我的代码和 R 实践是最新的,因为我只需要在一个地方编辑它们。

这方面的一个例子是我的一篇关于 R 中的图形与 [{ggplot2}](https://www.statsandr.com/blog/graphics-in-r-with-ggplot2/)的文章。与 R base 中默认可用的图相比,我更喜欢带有{ggplot2}包的图,但是我不能记住所有的层和它们的参数。现在每当我使用这个包纠结于一个情节时,我就简单地重温相应的文章来寻找解决方案。我的许多文章也是如此,每次我忘记代码或它如何工作的细微差别。

你可以将你的代码存储在不同的文件中(例如,R Markdown 文档或 R 脚本,就像我过去经常做的那样),但是博客文章有这样的优势:

  • 代码段突出显示,并且
  • 通过向全世界公开它,你不得不保持它的整洁、完整和最新。

#4 为开源社区做贡献

我学到了很多,而且我每天都在学习 R,这要感谢那些相信开源和免费材料的开发者和科学家们免费提供的资源。

在某种意义上,通过博客免费提供我所有的代码和文章是我的方式:

  • “回报”帮助我学习的人,感谢我现在站在这里的人,以及
  • 提前付钱,我将来会从谁那里学到更多。

如果你也相信分享你的知识或专长,拥有一个博客绝对是为社区做贡献的一个好方法。你的贡献不一定要巨大,只要增加了什么,就会有人用。请记住,每个人都是从初学者开始的,即使是世界专家也是其他领域的初学者。而且你会看到,随着你不断地与他人分享你的知识,有些人会欣赏它,因为他们可以从中学习。

就我而言,如果我的小小贡献对一些人更好地理解统计学或学习 R 有用,我的目标就达到了。其他对某个话题充满热情的人可能想把这个话题告诉人们,希望更多的人反过来对这个话题做出贡献。你完全可以自由选择你想为社区做的贡献。

#5 保持谦逊,保持好奇

自从发布我的博客以来,我发现了许多其他高质量的数据科学博客。我越是看到不同主题的新事物,越是看到人们做出不可思议的事情,我就越意识到我其实知道的不多。这让我想起了保持谦逊的

除此之外,通过与来自不同背景和世界各地的科学家分享我的代码,它允许我考虑其他观点并练习开放思维,这反过来又帮助我保持好奇

在我看来,谦虚和好奇是保持学习的良好开端。我不想失去好奇心,否则我可能会失去学习的欲望。

供您参考, R-bloggersR Weekly 是两家专注于 R 的优秀博客聚合商,而forward Data Science在 Medium 上发布了大量高质量的博客文章,涵盖了许多与数据科学相关的主题。如果你有兴趣发现更多的技术博客,请订阅这些博客。

#6 学会不追求完美,分清主次

无论你在博客上花了多少时间,请记住,不可能事事都完美。作为一个完美主义者,我不能否认我希望生活中的每件事都能完美运行。

在写我的第一篇文章时,我的完美主义倾向有时如此普遍,以至于这是一个真正的弱点:我可以花几分钟思考两个词之间是否需要逗号(这当然不会有任何影响)。然而,在某些时候,改进某样东西花费了太多的时间和精力,以至于它的附加值不如你花时间生产新东西所能创造的附加值大。

随着你每天不断学习,情况会变得更糟。因此,一篇过去看似完美的文章今天可能不再被认为是完美的,所以你想改变或增加你以前所有文章的一个小细节。我不是说你不应该编辑一篇博客文章,它甚至是值得推荐的!尽管如此,我还是建议你,只有当它真的增加了一个重要的价值时,才编辑它。否则,我认为最好是把时间和精力花在创造别的东西上。

有了博客,你将逐渐学会把你的努力和时间(这是有限的资源,随着时间的推移似乎越来越少)用在最有成效的地方。换句话说,你将学会优先考虑

#7 建立联系和职业关系

通过分享你在某个特定领域的实践,你有时会遇到一些人,他们实际上与你从事相同的课题,或者有着相似的研究兴趣。除其他外,以下情况就是如此:

  • 我在收集的关于冠状病毒的顶级 R 资源。它开始只有 5 个资源,然后当我逐渐添加越来越多的资源时,里斯·莫里森(Rees Morrison)联系了我,他正在收集相同主题的博客帖子,我将他的博客帖子添加到了原始收集中。
  • 展示由雷南·泽维尔·科尔特斯开发的 R 包,该包可用于在新冠肺炎检疫隔离期间下载免费的斯普林格图书
  • 我写了一篇关于分析新冠肺炎在比利时的传播的文章,这篇文章与另外三名研究人员合作,引发了一场研讨会,并制作了代表比利时新冠肺炎医院住院人数的图表。

这些合作扩展了我的专业网络,让我能够与来自不同大学和不同国家的新研究人员建立联系。如果不首先分享我对某个特定主题的分析,我永远不会认识这些人。

我确信一个博客可以带来无数的合作,让整个旅程更加有趣和丰富。谁知道呢,你职业生涯的下一个篇章可能会由你过去共事过的一个人来塑造。

即使你的博客没有带来任何合作,它仍然是一个自我推销的伟大工具。做一些研究,练习,写一个主题有助于成为(并被视为)该领域的专家。此外,在申请工作或项目时,你的博客将成为你的作品集。招聘人员肯定会希望看到你的能力。

无论你的博客是一些卓有成效的合作的起源还是你工作的展示,它都是你申请理想工作时的宝贵财富。

如何开始自己的博客?

自从开始写博客以来,我的学习曲线加速了,对统计学和 R 有了更深的理解,我的沟通技巧也有了很大的提高。我从未意识到维护博客作为一种学习技巧有多么有用。这带来了额外的好处,能够为自己和他人存储信息和代码,这对于获得反馈和与其他研究人员联系是必不可少的。

如果这 7 个好处已经说服了你,那么好消息是,现在创建自己的博客比以往任何时候都更便宜、更容易。

对于非技术博客,我推荐 Medium 或 WordPress,因为它易于设置,并且不需要代码。对于技术博客,有大量的静态站点生成器可供选择,但是我强烈推荐使用 Hugo[{blogdown}](https://bookdown.org/yihui/blogdown/) (我是在看完这本书后创建我的博客的)。然后你可以把它放在 GitHub 上,并用 Netlify 发布。 3

感谢阅读。我希望这篇文章回答了诸如“你为什么有一个博客?”或者“它的目的是什么?”,谁知道呢,给了你开自己博客的动力。如果你仍然犹豫不决,我真心建议你去做,记住最难的部分是开始。如果你对一个话题有耐心和热情,你只需要开始,其余的就会随之而来。

和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。

  1. 我有意避免在这篇文章中写经济激励,因为我认为这不是开博客的好动机。首先,许多人不会用他们的博客赚钱,也永远不会。第二,确实也有很多人通过他们的博客赚钱,但对他们中的大多数人来说,这些钱不值得花时间。从我的个人经验来看,博客有时非常耗时,我肯定会在别的地方更容易赚钱。此外,正如你所看到的,我选择不放广告或横幅,因为我认为这会恶化阅读体验(当我在其他博客上看到广告和横幅时,我觉得它们非常讨厌)。这当然是我的观点,这仍然是一个个人选择的问题,也是一个权衡的问题:糟糕的阅读体验和更多的钱,还是更好的阅读体验和更少的钱。我也倾向于让读者选择支持我的项目,而不是给他们强加广告或横幅。 ↩︎
  2. 甚至以英语为母语的人也可以通过博客提高写作技巧。 ↩︎
  3. 注意,我不是程序员,也不是计算机科学家,所以我没有创建网站的广泛知识。肯定有更多的选项可用,但我发现这些选项是给定我的计算机技能和我的目标的最佳选择。 ↩︎

相关文章

原载于 2020 年 9 月 2 日【https://statsandr.com】**

为什么我一直说你需要练习?

原文:https://towardsdatascience.com/why-do-i-keep-saying-that-you-need-to-practise-6ee6b74ec5a0?source=collection_archive---------43-----------------------

或者为什么练习会让你变得更好

照片由 ThisisEngineering RAEngUnsplash 上拍摄——不过你的工作空间不必看起来像她的一样酷。我的肯定没有。

有大量的课程可以学习数据科学。不幸的是,他们中的大多数只在理论上教你数据科学技能。要成为一名完全成熟的数据科学家,你需要比理论在线课程更进一步,你需要实践知识。

如果你上过我的数据科学入门课程,这听起来可能很熟悉,我在课程中提到了数据科学知识的三个关键层面;理论知识、技术知识和实践知识。

理论和技术知识是你可以从在线视频、课程和指导中简单学到的东西。除此之外,你还需要练习来获得实用的知识。我将实用知识定义为知道如何将你所学的一切整合在一起,并了解数据科学的做事方式。

在大多数资料中,实践知识被描绘成有一个投资组合。当然,如果你练习,你会有一个你做过的事情的集合,这将帮助你在找工作时以作品集的形式展示你的技能。但是实践远不止于此。这是成为更好的数据科学家的一种方式。毕竟数据科学是一个动手的工作。

我来分解一下为什么我总是建议有抱负的数据科学家专注于动手工作。

获得经验

当然啦!你通过实践获得经验。听起来很明显,对吗?但是什么样的体验呢?经验到底是什么?我所说的经验,尤其是在数据科学的背景下,是指:你知道可能会发生什么问题。

预测问题在数据科学中非常重要,因为你犯的错误可能很微妙。很可能你的屏幕上不会弹出错误屏幕。直到有人指出来,你才意识到自己做错了什么。

当你在个人项目中实践时,你会经历这些错误。你制造它们,找到它们,并理解它们为什么以及如何发生。所以下一次,你会对犯同样错误的可能性更加敏感,你会采取必要的预防措施。即使这只是看待数据的一种不同方式。

这是数据科学中你无法通过被动学习(阅读或观看视频)来学习的事情之一。你只要把手弄脏就行了。

学习如何学习事物

我一直在说:开始做项目时,你不需要知道或者甚至觉得你知道关于数据科学的一切。你只需要基本的知识和一个能做的态度。当你第一次出发时,会有很多你不知道的事情。这很好。这将是对你学习如何获得新知识的训练。

在我完成计算机科学学位后,我和我的朋友们经常开玩笑说,我们在整个学位期间学到的是如何用谷歌搜索东西。这是因为这是一个非常注重实践的学位,我们的教授不断督促我们学习有时甚至在课堂上没有涉及到的东西。

学数据科学的时候,你得自己当教授,自己推自己。如果你遇到你不知道的事情,谷歌一下,看看答案,直到你得到你的解释。这在开始时可能需要一些时间,但随着时间的推移,你会更有效地找到答案。当你成为一名专业的数据科学家时,这将是一个很好的练习。

校准

我之前讲过数据科学无止境学习的问题。这是一个庞大的课题,有许多分支,可以深入到你所能理解的程度。这是练习的另一个好处。当你心中有一个项目时,它就会有一个目标。当你心中有一个目标时,它会让你专注于现实…作为一名数据科学家,你需要知道的现实。

是的,你总是可以学到更多,但我在职业生涯中看到的是,高效和有效是 90%的工作。

实践会帮助你了解你需要多少知识,需要多深的知识。专注于完成项目将会阻止你不必要的深入挖掘和迷惑自己,这通常会导致你不知所措并放弃。

内化数据科学的思维方式

数据科学的思维方式是知道什么时候做什么。帮助你选择下一步的是本能。它是关于有多少可能性的知识,途中可能发生的潜在问题,需要做什么来快速证明概念。简单地说,它让你成为这方面的专家。

实践将帮助你暴露自己的决策点,通过试错,你将学会做出正确的决定,你的直觉将及时形成。一种有效的方法是与更有经验的数据科学家合作,观察他们的工作。当我刚刚起步时,这就是我如何获得大部分数据科学家的感觉(有点像蜘蛛侠的感觉)。这就是为什么我以项目的形式设计了我的课程“掌握数据科学方法”,在这个项目中,我指导你的实际工作,你可以跟着我一起完成数据科学的整个过程。

找出最佳实践

尽管您可以在理论培训中了解最佳实践,但您不可能通过被动学习来理解和内化所有实践。当 A 发生时,很容易想到我需要做 x。但是当你在做一个项目时,发现 A 发生了会很容易吗?您是否需要做额外的检查来查看是否发生了 A?如果你这样做,那么你应该什么时候做这些检查呢?

单独写下这些问题的答案并不容易。但是当你实践时,理解最佳实践背后的原因和方法会容易得多。

你会搞砸的。然后你会谷歌一下,看一些网上的帖子。然后你会看到有人提到你以前听过最佳实践或经验法则。你会有一个灵光乍现的时刻。“这就是为什么它是最佳实践!”你会想。而且,很可能,你不会再忘记这件事了。

长话短说,练习你的技能只会对你有好处。一旦你开始做自己的项目,你会惊讶地发现你在这个过程中学到了很多。在你做之前,这是一种“你不知道你不知道什么”的情况。抓住机会,开始一个副业,相信这个过程!

看看我的网站你想成为一名数据科学家?获取文章和免费资源,面向希望将其职业生涯转向数据科学的忙碌专业人士。

为什么人们离开旧金山和纽约?离职技术人员博客帖子分析

原文:https://towardsdatascience.com/why-do-people-leave-san-francisco-and-new-york-city-an-analysis-of-departing-techies-blog-posts-c125b58a0950?source=collection_archive---------31-----------------------

在旧金山或纽约,一个技术兄弟能做的最老套的事情就是离开……并写下自己的经历。

在这两个地方生活过之后,我知道每个地方都有许多人相信他们注定要去这个城市,我想知道“我要离开旧金山”这种陈词滥调的博客帖子实际上有多流行,以及为什么他们会说他们要离开。我对从这两个地方搬走的目的的印象非常简单——人们离开旧金山/纽约是因为那里太贵了,或者他们厌倦了旧金山的单一文化,或者城市基础设施的广泛问题。或者,他们可能更愿意用纽约的金融兄弟来交易旧金山的金融科技加密兄弟。但是这有什么根据吗?如果是这样,我们如何才能发现?

我能想到的回答这些问题的最佳数据集是每个人在离开旧金山或纽约后写的媒体/博客文章。我读过一些,它们听起来很相似,而且很容易刮。

谢天谢地,有两个人已经为旧金山和纽约写了自定义查询(比如“离开旧金山”和“再见旧金山”)的 scrapers(感谢瑞安·库尔普尼克·维图奇!!).他们的数据相当不错,但它只是所有故事中所有单词的聚合。那真的不行,但这是一个很好的开始。在重新搜集和抽查了他们所有的帖子后,我们有所进展。我们现在有 220 个独特的博客帖子,都(至少大致上)与离开旧金山和/或纽约市有关。每个城市大约有 120,000 个单词,大部分是英文的,而且大部分是在过去 5 年里发布的。

现在,我到底想分析什么?我有三个最重要的问题:

1。人们要搬到哪里去?

2。他们为什么要离开旧金山/纽约?

3。他们对旧金山/纽约有什么看法?

人们要去哪里?

从大量文本中判断人们去向的最简单方法是统计不同城市的提及次数。这涉及到一些相当基本的正则表达式(当然,我是通过谷歌搜索的,谁真的从头开始做正则表达式呢?),从各自的博客数据集中删除提及旧金山/纽约的内容,以及一些值得信赖的 tidyverse 工具。由此,我们得到下图。阅读此图的方法是查看标题以确定博主从哪个城市出发,并查看条形图以确定他们要去哪里。所以对于 SF 的博文(左边),最常提到的就是 LA。

这看起来不对劲。无意冒犯克利夫兰,但无论租金有多便宜,人们都不可能从纽约涌向克利夫兰。这似乎偏向于一两篇反复提到克利夫兰的博文。

下一个最好的努力是只隔离每篇博文中提到的独特城市;由此,我们得到了一个更清晰的故事。

由此看来,似乎旧金山人正在前往其他大中城市,其中 4 个在西海岸(洛杉矶、西雅图、奥克兰、波特兰),2 个在东海岸(波士顿、纽约),3 个在国际(伦敦、巴黎、多伦多)。只有 1 个位置在美国中部(奥斯汀)。

纽约看起来相当相似,提到加利福尼亚的次数比旧金山提到纽约的次数多。纽约市还包括了我认为会出现在科幻小说列表中的城市(亚特兰大+芝加哥),奥斯汀在提及频率列表中也表现强劲。克利夫兰榜上有名,但正如预测的那样,使用这种方法排名大幅下降。

这对我来说有足够的意义来证明停在这里是正确的。美国最昂贵的两个城市的人们大多搬到其他稍微便宜的地方,并经常在这两个城市之间调换。“在科技行业工作只是每隔几年就在旧金山和纽约之间搬来搬去,直到你想买房时搬到奥斯汀”这句格言似乎是有道理的。

人为什么会离开?

每个在这两个城市生活过的人(或者,老实说,任何了解这两个城市的人)可能都对人们离开这两个城市的原因有一些很好的猜测。他们非常昂贵,肮脏,并且有严重的居住问题(主要是旧金山)。对于年轻的专业人士来说,忽略这些缺点可能很容易,但对于想安定下来的专业人士来说,每年 3 万英镑的学前学费可能会赶走许多人。

确定目的的一种方法是从每个文档中搜索重要的单词或短语,并试图用它来代表人们离开的原因。确定一个单词或短语在一段文本中有多重要的最直接的方法被称为 tf-idf,它代表词频-逆文档频率。基本上,您获取文档中每个术语的频率,并将其与总的术语频率进行比较。我们可以将它视为一种方法,在控制整个博客集的内容的同时,确定单个博客帖子中最重要的词是什么。使用 tf-idf 返回一个代表重要性的数字,它是为下面的每组博客绘制的(横条越大,这个词在博客中的重要性越大)。

我们看到很多地点出现在这些结果中。对于纽约市,我们看到了纽约市周围的一些地方,人们可能会从曼哈顿(昆斯区威廉斯堡)搬到那里,同时验证了早期提到旧金山和加利福尼亚州的独特城市图。我们还看到了著名的 YouTuber Casey Neistat(他最近离开了纽约前往加利福尼亚,关于他离开的博客在数据集中),俄亥俄州(来自克利夫兰痴迷的随机博客),以及几个我不完全理解的随机单词(尤利西斯和 35mm,希望是相机而不是手枪)。

旧金山的 tf-idf 结果更令人惊讶。有几个地方提到人们已经离开或正在讨论(纽约,奥克兰),但关于技术场景的谈话都在这些结果上。创始人,工程师,boom,薪资,支付都打了前几名的成绩。我猜想旧金山关于离开的博客会关注这个城市的负面,但是我们没有看到。

感知

在看到 tf-idf 的结果后,我想知道人们对这个国家最大和最昂贵的城市最常见的负面评价是什么,以及每个正面和负面词汇在每个城市的分布情况。

查看给定文本的情感有几种方法,最常见的一种是将每篇文章中的单词与情感词典进行匹配,情感词典要么有该单词是积极的、消极的还是中性的,要么有一个描述该单词积极或消极程度的数字(5 表示最积极,-5 表示最消极,等等)。在尝试了每种方法后,我发现了每个出发点的积极和消极词汇的分布。

同样,这些结果相当令人惊讶。旧金山图表中有一些非常积极的帖子,但即使除去这些,大多数“我要离开旧金山”的博客都是积极的多于消极的,而纽约的分布更加均匀。这也证实了之前 tf-idf 分析的结果,旧金山的问题可能会让人们离开这个城市,但他们似乎不会在博客上谈论这个问题。

出于我希望显而易见的原因,我不想浏览和阅读数百篇听起来极其相似的博客文章。但相反,我通过计算正面/负面占总博客帖子的百分比,阅读了一些最正面/负面的故事。看看这个比例,我们发现一个相当令人愉快的正面帖子是关于一个软件工程师离开旧金山去多伦多,一个的帖子是一个作家从纽约搬到洛杉矶,还有可能是我读过的最负面的“离开纽约”博客

我没有对这一点下结论,而是用 OpenAI 的 GPT-2 文本生成算法从我们提取的一组帖子中写了一篇“我要离开纽约”的博文。它是这样写的:

“我的行李已经收拾好了,我正准备把它们拖到外面,拦下一辆出租车,带我去 JFK,这是我最后一次以纽约居民的身份去纽约。我将去洛杉矶,尽管我想多看看我的国家,并和他们保持联系。所以,你们知道,当我回国的时候,我想追随梦想家、倒班工人、艺术家和成就者的脚步,是他们让我们走到了今天。我想和家乡爱我的人保持联系。我想从他们的失败中吸取教训。我要向那些激励过我,激励我达到自己的人致敬。”

更多类似的内容,请在 Twitter 上关注我或查看我的网站

为什么有人爱访问栈溢出?

原文:https://towardsdatascience.com/why-do-people-love-to-visit-stack-overflow-8c329866eea6?source=collection_archive---------74-----------------------

分析堆栈溢出调查的结果,找出人们为什么喜欢访问堆栈溢出

Unsplash 上由 Sharon McCutcheon 拍摄

Stack Overflow 每年都会举行一次年度开发者调查。这项调查是对全世界编码人员进行的最大、最全面的调查之一。

2019 年是 Stack Overflow 发布年度开发者调查结果的第九年,近 90,000 名开发者参加了这项 20 分钟的调查。这项调查结果涵盖了开发人员的个人资料、工作、技术,以及他们如何与堆栈溢出进行交互和互动。

在这里,我想强调调查中与人们如何处理堆栈溢出相关的部分。尤其是找到人们爱栈溢出的原因。我从调查结果中提取了一个数据集,并使用该数据来回答以下问题:

  • 人们多久访问一次 Stack Overflow?
  • 开发者为什么要访问堆栈溢出?
  • 人们是如何将 Stack Overflow 与其他平台进行比较的?

所以还是用数据看看答案吧!

人们多久访问一次 Stack Overflow?

这里我想了解堆栈溢出社区有多活跃。受访者被问及他们访问堆栈溢出的频率。

这个问题的结果是我们可以看到堆栈溢出社区非常活跃。被调查者每天至少访问该网站一次,甚至多次。这是人们爱情堆栈溢出的标志。

开发者为什么要访问堆栈溢出?

从上一个问题,我们知道人们喜欢堆栈溢出。所以,我们需要找出人们喜欢它的原因。

看看结果,我们现在知道 Stack Overflow 已经成为一个可以找到特定问题答案的网站。其次是学习如何做他们还不一定需要的事情,成为开发人员社区的一部分,放松,甚至只是为了结识具有类似技能的其他人。

人们是如何将 Stack Overflow 与其他平台进行比较的?

谈到寻找特定问题答案的主要原因,在 Stack Overflow 之外还有许多其他网站。但是人们仍然爱栈溢出。所以,下一个问题的目的是要看看人们如何选择堆栈溢出相比,其他网站。

根据调查,超过一半的受访者表示,堆栈溢出比其他人快得多。这成为人们爱栈溢出的主要原因。

结论

Stack Overflow 年度开发者调查结果是理解人们为什么喜欢访问 Stack Overflow 的好方法。Stack Overflow 有一个活跃的社区,超过 95%的回答者访问该网站来寻找他们问题的具体问题。与其他资源相比,他们认为堆栈溢出要快得多。这是人们喜欢使用堆栈溢出的主要原因。

对于想要更多了解数据以及如何进行这种分析的你,可以查看 my GitHub 中的代码。

为什么随机森林和梯度提升决策树的最优 max_depth 差别很大?

原文:https://towardsdatascience.com/why-do-random-forest-and-gradient-boosted-decision-trees-have-vastly-different-optimal-max-depth-a64c2f63e127?source=collection_archive---------33-----------------------

尽管它们都是由决策树组成的

Unsplash 上由 Kishore Ragav Ganesh Kumar 拍摄

自 2014 年引入 XGBoost 以来,梯度增强决策树(GBDT)因其预测能力和易用性而广受欢迎。特别是,它已经取代了随机森林,成为异构表格数据的最佳算法。如今,许多数据科学家至少熟悉 GBDT 的一种实现,比如 XGBoost、LightGBM、CatBoost,甚至是 scikit-learn

然而,我们这些有随机森林经验的人可能会惊讶地发现,随机森林和 GBDT 具有非常不同的最优超参数,尽管它们都是决策树的集合。特别是,它们在最重要的超参数之一 max_depth 上有很大的不同。随机森林通常 max_depth ≥ 15,而 GBDT 通常为 4 ≤ max_depth ≤ 8。在本文中,我们将探究这种差异的原因。

偏差-方差权衡

我们简单回忆一下偏差-方差权衡的性质。模型的预期损失可以分解为三个部分:偏差、方差和噪声。

  • 偏差衡量模型的系统损失。具有高偏差的模型表达能力不足以很好地拟合数据(拟合不足)。
  • 方差衡量由于模型对数据集波动的敏感性而造成的损失。具有高方差的模型对数据中的虚假模式过于敏感(过度拟合)。
  • 噪声是损耗中不可避免的部分,与我们的模型无关。这也被称为贝叶斯误差。

理想情况下,我们希望最小化偏差和方差,但通常这不能同时实现。因此,在偏差和方差之间有一个权衡。例如,使我们的模型更有表现力会减少偏差,但会增加方差。

决策图表

决策树是集成方法的优秀基础学习器,因为它可以通过简单地调整 max_depth 来轻松执行偏差-方差权衡。原因是决策树非常擅长捕捉不同特征之间的交互,一棵树捕捉到的交互顺序是由其 max_depth 控制的。例如, max_depth = 2 表示捕获了 2 个特征之间的交互,但没有捕获 3 个特征之间的交互。

  • 浅树只能捕获低阶相互作用,因此它们具有高偏差和低方差。
  • 深树可以模拟复杂的交互,并且容易过度拟合。它们具有低偏差和高方差。

通过调整 max_depth 来查看偏差-方差权衡的另一种方法是估计叶节点的数量。决策树最多可以有个 2^max_depth 个叶节点。叶节点越多,树划分不同数据点的容量就越大。

随机森林

随机森林使用 bagging 的修改来构建去相关的树,然后对输出进行平均。由于这些树是同分布的,随机森林的偏差与任何单个树的偏差相同。因此,我们希望随机森林中的树具有低偏差。

另一方面,这些树单独具有高方差是好的。这是因为平均树减少了方差。结合这两个结果,我们最终得到具有低偏差和高方差的深度树。

梯度推进决策树

梯度增强以连续的方式构建树。粗略地说,它试图通过将新的树拟合到损失函数的负梯度来减少集合的损失,从而有效地执行梯度下降。每当集合增加一个新的树,它的模型复杂度增加,它的整体偏差减少,即使新的树相当简单。

另一方面,虽然没有太多关于梯度增强的方差的理论研究,但是经验结果表明,集成的方差在增强过程中没有被有效地减小。因此,对于 GBDT,我们使用具有高偏差和低方差的浅树。

进一步阅读

  1. 是一篇关于 XGBoost 和随机森林关于各种超参数的偏差-方差分解的博文。
  2. 偏差-方差分解的一个很好的参考文献是[1]。
  3. [2]的第 10、15 章非常详细地讨论了随机森林和 GBDT 的理论背景。

参考

  1. 页(page 的缩写)多明戈斯,一个统一的偏差-方差分解及其应用 (2000),ICML 2000。
  2. J.H. Friedman,R. Tibshirani 和 T. Hastie,统计学习的要素,第二版,2009 年,施普林格。

我们为什么需要 LSTM

原文:https://towardsdatascience.com/why-do-we-need-lstm-a343836ec4bc?source=collection_archive---------33-----------------------

https://images.unsplash.com/photo-1504639725590-

深入分析消失梯度问题以及 LSTM 是如何解决的。

在本帖中,我们将讨论渐变消失的问题,以及 LSTM 是如何解决的。

在深度学习中,会出现这样的情况,我们需要了解以前的数据,以便预测下一次的输出。例如,为了预测一个句子的下一个单词,我们应该知道它以前的单词,在这种情况下,我们通常的神经元不会有所帮助,因为它不知道以前的单词。RNN 在这种情况下发挥作用。RNN 是一种神经元细胞,具有保留序列信息的能力。RNN 的隐藏状态将信息从一个时间步骤传递到另一个时间步骤,因此记住了序列。

RNN 的结构(作者图)

RNN 的主要优势在于它可以保留过去处理过的数据的信息。但是过去意味着多少时间步骤?为了回答这个问题,我们必须深入了解 RNN 细胞的功能。当一个输入 x 被传入 RNN 单元时,它将被乘以一个权重 W,并加上一个偏差 b。然后,计算值将被激活函数如 sigmoid、ReLu 等非线性化。

如果我们考虑 sigmoid 函数,对于一系列输入值,它将返回(0,1)范围内的输出。如果我们考虑时间步长为 4,sigmoid 的输出为 0.3。在第 4 个时间步长结束时,RNN 的输出 Y 将为 Y=0.30.30.30.3x + b。

x 与一个非常小的数相乘,该数可以近似为零,这将导致反向传播过程中的梯度为零,因此权重不会得到优化。这个问题被称为消失梯度问题。

这将导致初始层没有被优化/训练。因为后面的层依赖于由初始层捕获的低级特征,所以模型的整体性能将会降低。如果激活函数是 ReLu,则在负输入的情况下,它将输出零,这将导致相同的问题,即使我们使用 Leaky-ReLu,负值的输出也太小,无法克服消失梯度问题。因此,改变激活函数不足以解决消失梯度问题。

使用 RNN 的主要原因是保留从以前的数据中获得的信息,但是如果我们面临梯度消失的问题,可以存储在内存中的数据量是非常有限的。

引入 LSTM 作为这个问题的解决方案。长短期记忆能够存储关于较长数据序列的处理过的信息。LSTM 如何解决渐变消失的问题?

LSTM 的结构(作者图)

在上图中,Ct 标注的水平线被称为细胞状态,LSTM 的记忆。它沿着所有的细胞携带信息,每个细胞根据它得到的输入,修改细胞状态中的信息。门用于修改单元状态。门是决定单元状态是否被修改的结构。例如,如果门产生 0,则没有新数据将被添加到单元状态,如果门产生 1,则全部数据将被添加到单元状态。改变单元状态中的数据只是将输入数据乘以门的输出,并将其添加到单元状态。

在 LSTM 单元中有三种类型的门,遗忘门、输入门和输出门。它们中的每一个将决定旧数据的哪一部分必须被忘记,新数据的哪一部分必须被记住,以及相应地存储器的哪一部分必须被给出。

现在我们将走过 LSTM。来自先前时间步长 Ct-1 的单元状态、来自先前时间步长 ht-1 的隐藏状态和输入特征被提供给 LSTM 单元。遗忘门将根据输入特征和隐藏状态给出一个输出。因为 sigmoid 将被用作激活函数,所以输出范围将从 0 到 1。遗忘门的输出将与单元状态相乘。如果输出为 0,乘以单元状态后,单元状态将为空。也就是说,该单元将会忘记到目前为止它已经学习的所有内容,并且如果输出为 1,那么该单元状态将保持不变。即该细胞将记住它所学习的一切。基于遗忘门的输出值,单元状态将改变。即被单元遗忘的信息量由遗忘门的输出决定,因此得名。这也解释了为什么我们使用 sigmoid 作为门的激活函数。由于它的输出在 0 和 1 之间变化,我们可以添加新的数据或一部分数据或不添加,这同样适用于遗忘。

忘记门决定什么数据被忘记

现在,我们已经决定了需要对现有内存做什么,接下来我们必须决定新数据的哪一部分要存储在内存中。输入门在这里发挥作用,类似于遗忘门,输入门将被给予先前时间步长的隐藏状态和输入特征,基于这些,输入门将确定存储较新数据的哪一部分。然后,双曲正切函数创建一组新值,并存储到存储器中。新创建的值将与来自输入门的输出相乘,然后将被添加到单元状态。

输入门和 tanh 决定哪些数据将被添加到单元状态(作者的图表)

(作者图)

现在,来自输入特征的新的重要信息已经被存储到存储器中,接下来,我们必须决定来自存储器的数据的哪一部分应该作为输出给出。输出门和一个双曲正切函数扮演了这个角色。输出门将决定给出单元状态数据的哪一部分,tanh 函数在-1 到 1 的范围内转换数据。那么它将作为输出与单元状态一起提供给下一个单元。

决定输出数据的输出门(作者的图表)

这些是发生在 LSTM 细胞内的过程或步骤。单元状态或存储器像传送带一样传送重要信息,而门像网关一样允许新数据进入传送带或允许不必要的数据离开传送带。

那么,这个设置如何解决渐变消失的问题呢?这里,这些门控制着进入下一个时间步的数据量,同样,这些门也控制着权重的优化方式。如果梯度在反向传播期间消失,同样的事情也会发生在正向传播中。因此,该权重不会对预测产生影响,因此在反向传播期间不会对其进行优化。

虽然 LSTM 解决了消失梯度问题,但这让我们觉得 LSTM 很复杂。但就像深度学习中发生的所有其他奇迹一样,当足够靠近时,LSTM 也是在数学的帮助下玩的一个简单的把戏。

为什么我们需要保护隐私的机器学习?

原文:https://towardsdatascience.com/why-do-we-need-privacy-preserving-machine-learning-7480ddf9f114?source=collection_archive---------73-----------------------

为什么保护隐私的机器学习越来越受欢迎?组织如何利用这样的系统来改进人工智能模型?

图像信用

过去十年,机器学习和人工智能应用领域发展迅速。正如吴恩达正确指出的那样,人工智能确实是改变几乎所有行业的新动力。推动这种增长水平的力量是数据和计算能力。在可预见的未来,生成的数据量和计算能力都将呈指数级增长。由于人工智能模型的结果只与数据一样好,因此获得更多数据将意味着我们可以建立更好的人工智能模型。显然,我们需要更多的数据,但我们也需要足够多样并定期更新的数据。

来源:Dart 咨询公司[1]

但是,有什么问题呢?

每当你在网上搜索一些东西,或者向 Alexa 提问,或者使用你从互联网上下载的任何应用程序——甚至进行一些金融交易——你都在向这些公司提供数据。数据,可能是私人的。

人们告诉谷歌的事情,他们可能不会告诉任何人。

—塞思·斯蒂芬斯-达维多维茨(《人人都在说谎》的作者)

来自不同来源的数据被集中在一个中心位置,这导致了主要的隐私问题。

我们的个人数据存储在由组织持有的大型数据库中。这些数据然后被他们用来为我们做个性化的预测。例如,网飞的个性化电影推荐、亚马逊的产品推荐或脸书的广告推荐都使用我们的个人信息。老实说:我们都沉迷于这些个性化的体验。所以,让我们来问一个问题:我们应该用我们的隐私来换取个性化吗?

直到我们读到这样的新闻标题,我们才真正意识到将我们的个人数据提供给公司的坏处:

《纽约时报》文章(2018)

虽然一些应用程序使用数据为我们提供个性化的建议,但也有其他应用程序使用数据来拯救生命,尤其是在医疗领域。医疗保健组织已经转向数字记录保存,并构建了自己的数据基础架构来满足他们的需求。然而,这些组织积累的数据分散在不同的组织中[2],这就产生了数据岛

尽管弥合这些数据孤岛将极大地改善患者的护理隐私问题和所有权问题,但这是实现这一目标的障碍。由于 GDPR [3]和 CCPA[4]的限制和隐私法,跨越这样的数据孤岛变得不可能。仅仅在这样碎片化的系统中加入 AI 是不够的。

图片来源:https://unsplash.com/photos/dJ65_bvipik

上面讨论了两种不同的情况。第一种被称为 B2C 或企业对消费者环境:每个人都拥有自己的个人数据,并希望这些数据被用来获得个性化体验——但不以侵犯隐私为代价。第二种是 B2B 或企业对企业的设置:大型组织拥有并存储由于隐私问题而孤立的数据,但希望这些数据用于建立更好的模型。在一个完美的世界中,我们可以将所有数据集中到一个中心位置,并用它来构建更好的人工智能系统,并希望这些数据得到负责任的使用。

隐私保护方式

然而,还有另一种方式来看待这个问题。我们可以让机器学习模型在不同地点之间传播,而不是让数据从不同来源传播到一个中心位置。

我们可以让机器学习模型在不同地点之间传播,而不是让数据从不同来源传播到一个中心位置。

通常,数据科学家在一个中心位置收集和聚合数据,并使用它来训练 ML 模型。但是,由于世界上如此多的数据被锁在这些数据孤岛中,科学家和工程师们一直试图开发不依赖于中央数据源的解决方案。这种思想形成了隐私保护机器学习系统的基础,该系统通常被称为联邦学习(FL)或联邦机器学习(FML)。

在联合设置中,机器学习模型在源处被本地训练,该源可以是数据源或包含私人用户数据的边缘设备。然后,本地训练的模型被发送到中心位置,在那里中心模型被更新。

在联合学习设置中,数据在其原始位置是安全的。只有模型参数会跨位置传输。

这种类型的 ML 训练是由 McMahan 等人[5]为更新谷歌手机中的语言模型而进行的。因此,联合学习可以用于构建 ML 模型,当一些 ML 模型信息在位置之间交换时,让数据留在它的原始位置。交换的信息不会主动泄露个人或敏感信息。

使用联合学习的优势

与传统方法相比,使用这种类型的培训有几个优点。首先,也可能是最重要的原因是,数据永远不会离开其原始位置。数据源传递的唯一信息是模型参数。因此,没有人必须说服不同的组织共享他们的数据。第二,通过不移动数据,我们能够减少通信负担。移动模型的成本比移动数据本身要低几个数量级。第三,通过在单个数据位置执行训练,我们能够克服与跨数据源的数据标准化和预处理相关的挑战。数据科学家将不必担心将来自不同来源的数据映射到一种通用格式。

结束语

因此,使用联合学习,我们能够获得在不同数据集上训练的健壮模型,同时保持隐私。它在各种类型的行业中越来越受欢迎。然而,联合学习带来了它自己的一系列挑战,如敌对攻击、数据泄漏和模型篡改,这些都是数据科学家需要小心的。

感谢 Skylar Alexander 和 Kartik Chopra 的编辑和评论。

[1]http://www . dart consulting . co . in/market-news/artificial-intelligence-market-landscape-key-players-use-cases-ai-growth/
【2】Panch,t .,Mattie,H. &切利,L.A .关于医疗保健中 AI 的“难以忽视的真相”。 npj 数字。医学。 2、77(2019)
【3】GDPR:https://en . Wikipedia . org/wiki/General _ Data _ Protection _ Regulation
【4】CCPA:https://en . Wikipedia . org/wiki/California _ Consumer _ Privacy _ Act
【3】h . Brendan McMahan、Eider Moore、Daniel Ramage、Seth Hampson、Blaise Agü era y Arcas、Communication

我们为什么用 0.05?

原文:https://towardsdatascience.com/why-do-we-use-0-05-8cd43a39edfa?source=collection_archive---------26-----------------------

还是不是?

前几天我在读这本书,结果读到一小段试图解释“为什么我们使用. 05?”。突然我想,“哈!”没有多少人确切知道这一点(包括我在阅读之前),因为这个故事既模棱两可又非常有趣。[]这篇文章在很大程度上依赖于上述书中的解释。]

不管你做了多少统计,这个问题都没有得到很好的解释。

"你会在书的末尾找到一些表格,这些表格列出了课程中用于比较的关键值。"—每个统计学教授

好吧,但是为什么?

让我们一起来了解一下。

简短的回答是:因为费希尔先生在他的书中没有太多的篇幅。

但是……我们可以做出一些非常强有力的假设。

我们今天使用的是 Fisher 的使用 p 值来测试证据反对零假设的想法和 Neyman + Person 的关于测试零假设反对替代假设的想法的混合。作为一个小事实,尼曼和费舍尔是公认的不太合得来的人(更多关于理论部分的信息在这里)。

尽管试图回答这个问题,但最可能的原因是,在过去,科学家必须将他们的测试统计数据与公布的临界值表进行比较,而这些临界值表必须手工计算……在他的书中,研究人员的统计方法(Fisher,1925) 包括了临界值表,但为了节省时间和空间,作者在本书中包括了. 05、. 02、. 01 的概率值。现在,因为这些值的临界值很容易获得,而且因为当时的研究人员对 Fisher vs. Neyman-Pearson 方法感到困惑,这导致了一种趋势,即只在 p < 0.05 和 p < 0.01 时报告统计数据是显著的。

然而,大师自己提到“没有一个科学工作者有一个年复一年的固定的重要性水平,在任何情况下,他都拒绝假设;他更愿意根据他的证据和想法来考虑每一个特定的案例”(费希尔,1956)。

在过去的几年里,p 值阈值的误用在所有领域的统计学家和研究人员中掀起了波澜。

此处此处此处或者寻找这篇文章作为美国统计协会此处的回应。如果你有兴趣阅读更多谷歌“NHST”(零假设显著性检验),这个主题在许多网站上都有很好的讨论。

主要问题是,0.05 被错误地大量采用,但现在当有大量信息可用时,问题在于“[……]大多数进行统计和数据分析的人只上过一两门统计课,很少接受过正式的数据分析培训。”(simplystatitics.com)

结论

我们现在经常使用 0.05 是因为:

  1. 发现时的可用性;
  2. 许多媒体,如学术界或万维网,以这种方式高度传播信息。正如乔治·科布(Mount Holyoke College 数学和统计学荣誉退休教授)所说:

“我们教授它,因为这是我们的工作;我们这么做是因为这是我们教的东西。”;

附:如果你在做高端研究,你可能想再看看 p 值对你来说到底意味着什么。

资料来源:Gigacalculator.com

如果你有兴趣学习更多关于统计学和 R 的知识,我强烈推荐这本书这里【附属链接】。如果你对 Python 感兴趣,这里有一个很棒的。

直到下次,继续学习!

为什么需要机器学习?

原文:https://towardsdatascience.com/why-do-you-need-machine-learning-af7461db6909?source=collection_archive---------46-----------------------

机器学习的优点在哪里?

Python 计算器?

当他知道我对数学之类的东西感兴趣时,他推荐我学习 Python。当时,我不知道他为什么会这么说;我热爱我自己的 PHP 和 HTML/CSS/JavaScript 世界,所以甚至懒得去检查 Python 做了什么。有一次,我见过一个朋友玩 Python shell,做数学运算,就是这样。我可以在我的计算器上做,为什么需要 Python,我很好奇。

阿莫尔·泰亚吉在 Unsplash 上拍摄的照片

你好 Python

下一次我去找他寻求专业建议的时候——他已经是软件工程专业的了——他又推荐我学 Python,。现在,我已经毕业了,失业了,我没有太多的空间四处游荡,所以我认真地接受了他的建议,正如他所说的那样。多亏了他这些年来的指点和指导,我才能够在 Django 完全转到 Python 做 web 开发,在 Sklearn 做机器学习,在 Pandas 做数据预处理,在 TensorFlow 做深度学习,在 tkinter 做 GUI 编程。他对我来说是一个无价的导师,他改变了我的生活。

我在做他分配给我的任务——比如使用 PIL 调整图像大小,使用文件操作,理解 Django 的 MVT 概念,用 Scrapy 抓取网站,等等。这对我来说并不容易,一切都是新的,我花了几个月的时间来理解什么是 Python,库是怎么回事,以及其他一些基本知识。

尤里卡时刻

一天,他和我分享他正在做的工作。他告诉我他是如何使用朴素贝叶斯分类器将名字分类成性别的。我发现这很有趣,并就此进行了更多的询问。那是我接触机器学习,意识到自己的兴趣所在的时候。我有一个问题,为什么机器学习对于性别分类是绝对必要的,他回答说,在寻找模式方面,计算机比人类好得多。那对我来说是一个灵光乍现的时刻。

为什么是机器学习?

机器学习不是万能的。它不能解决所有的问题。如果训练数据分布不同于测试数据分布,一个机器学习模型可能不能很好地概括。让我们看看机器学习的优点在哪里。

  1. 我发现尼泊尔人的名字很容易区分是男是女。我发现大多数以“我”或“a”结尾的名字都是女性。同样,男性的名字似乎以一个辅音字母结尾。这是我根据尼泊尔人名数据的经验发现的模式。一开始,自己去找所有的模式是一件痛苦的事。其次,数据可能比我有更丰富的经验。因此,与其试图调查所有的模式并花费太多的时间来编码这些模式,不如让机器来学习这些模式。它节省时间,代码更好维护,并且很有可能找到比人类更多的模式。
  2. 适应新模式
    数据的分布会发生变化。我的父母和祖父母给他们的孩子起的名字可能与我或我同时代的人给他们起的名字不同。对我来说,连续检查新的模式是不可能的,所以,我在这个场景中使用了机器学习。训练是在一段时间间隔内完成的,这段时间间隔照顾到新的模式。
  3. 解决问题的新范式 我是尼泊尔人,熟悉尼泊尔名字,所以我知道去哪里找模式。对我来说,尼泊尔名字的领域知识使寻找模式变得更容易。但是,其他语言/文化中的名字可能不同,我可能没有一点线索去哪里寻找这些模式。在这些名字中寻找模式对我来说似乎是不可能的,但可以通过机器学习来完成。当数据是复杂的,例如图像数据时,情况更是如此。如果不使用机器学习技术,图像分类的任务是不可能完成的,因为图像可能变化很大。
  4. 发现隐藏的、新的模式
    我们人类可以从机器学习模型学到的东西中学习。通过这种方式,我们发现了未知的新模式。例如,在垃圾邮件过滤中,机器学习模型可以帮助我们知道哪些单词/短语使电子邮件成为垃圾邮件/非垃圾邮件。类似地,聚类算法帮助我们知道哪些特征使得数据/聚类完全不同。计算机视觉中的另一个例子是类激活图。类别激活图可以帮助我们知道机器学习模型认为哪个区域对分类很重要。这样的洞见有助于人类学习任何新的隐藏模式。

如果提供足够多的高质量数据,这些就是机器学习的能力。机器学习是利用模式发现的最强大的技术。机器学习的每个优点都非常重要。由于机器学习,许多被认为无法解决的问题开始找到解决方案。传统技术在每一项指标上都被超越,这都归功于机器学习。我的导师解释了为什么机器学习是根据名字进行性别分类的正确技术。希望这篇文章能给你一些关于机器学习能力的想法。

为什么深度学习效果这么好?

原文:https://towardsdatascience.com/why-does-deep-learning-work-so-well-6550f3aa22c6?source=collection_archive---------15-----------------------

意见

机器学习研究缺乏理论支柱

深度卷积神经网络的损失情况(来源:Javier Ideami,losslandscape.com)

现代机器学习研究已经显示出显著的成就。今天,我们可以训练机器检测图像中的物体,从文本中提取意义,阻止垃圾邮件,驾驶汽车,发现新的候选药物,并在国际象棋,围棋和无数其他游戏中击败顶级选手。

很多这些进步都是由深度学习推动的,特别是深度神经网络。然而,深层神经网络背后的理论仍然知之甚少。当然,我们理解单个神经元在做什么的数学,但是我们缺乏整个网络的涌现行为的数学理论。是什么让深度神经网络如此强大?

深度学习背后的直觉

我们从数学中得到一些指导。在 1989 年的一篇论文中,时任伊利诺伊大学厄巴纳分校研究员的数学家乔治·西本科(George Cybenko)证明了普适逼近定理:对于任何连续函数 f ,都存在一个单层神经网络可以任意好地逼近 f ,只要该网络的激活函数是类 sigmoid 的。

通用逼近定理(来源: Cybenko 1989

这是一个相当了不起的结果,但有一个问题:在实践中,我们不仅想要一个能很好地逼近我们所看到的数据的神经网络。我们还希望它能很好地处理看不见的数据。换句话说,这个定理没有提到过拟合的问题。

由于缺乏完整的理论,我们只能依靠直觉。更深层次的神经网络架构,也就是通常的直觉,概括得更好,过度拟合得更少。他们通过学习表示的层次来实现这一点:例如,在人脸检测中,这些可以是底部的边缘和线条,顶部附近的眼睛,以及层次顶部的完整人脸。即使脸部的一部分被隐藏,网络仍然会从剩余的输入中提取信号,从而更好地进行归纳。

这是一种很好的直觉,它看起来就是实际发生的事情。实验证实,在普通图像和文本任务上,深度神经网络优于浅层神经网络。但这只是一种直觉。我们没有一个完整的数学理论来解释为什么这种直觉应该是正确的。

当理论指导直觉时

把这种情况比作物理学。物理学比其他任何学科都更信奉实验和理论的共生。例如,粒子物理学的“标准模型”描述了构成我们宇宙的基本粒子的属性,以及这些粒子是如何相互作用的。该理论然后指导新实验的设计。例如,2012 年在欧洲粒子物理研究所发现希格斯粒子是可能的,因为理论告诉我们去哪里寻找。换句话说,理论指导我们的直觉。

理论也为意外发现提供了保障。当 OPERA 实验的研究人员在 2011 年宣布他们测量到了运动速度超过光速的中微子时,我们从理论上知道这是一个非同寻常的说法,需要仔细审查。事实上,正如后来发现的那样,光纤电缆连接不当,导致了错误的读数。

也许物理学中最重要的概念是涌现的概念:用数学方法描述宏观现象的高级理论从描述微观现象的低级理论中涌现出来。例如,当谈论一种气体时,谈论组成这种气体的单个粒子的特性很快就变得不可行了。相反,将宏观量如压力、温度和熵视为基本属性更有意义和有用。统计力学的方程式描述了这些宏观量是如何与基本粒子的状态相关联的。

简而言之,这就是物理学。理论指导直觉。实验证实了理论。较高层次的理论从较低层次的理论中涌现出来,游戏继续进行。

建造更好的桥梁:一个类比

塔科马海峡大桥的故事生动地说明了为什么有一个好的理论是如此重要。1940 年 7 月通车后,这座桥开始在风中剧烈摇晃,直到仅仅 4 个月后就轰然倒塌。一只狗死了

当桥梁建成时,我们根本没有一个足够好的理论来解释桥梁在生产过程中所受到的空气动力。如今,通过 CFD 模拟,我们可以在建造桥梁之前对其进行压力测试,并防止类似塔科马海峡大桥的事故再次发生。理论使我们能够建造更好的桥梁。

这又把我们带回了正题。今天的机器学习实践很像 1940 年的造桥。深度神经网络似乎工作得惊人地好,但我们缺乏对它们为什么这样做的彻底的数学理解。更糟糕的是,深度学习系统有时会惊人地失败,我们也不知道为什么。

那么,我们需要的是深度学习的涌现理论:一个超越描述单个神经元做什么的理论,并解释整个网络的涌现行为。

这种涌现理论的一个候选是基于能量的学习,这是 Yann LeCun 和其他人提出的理论框架。该框架引入了描述组合系统能量的标量场。例如,对于由特征和标签组成的数据点,如果标签是正确的,这个标量能量被最小化。LeCun 表明,任何机器学习问题都可以用这种方式重新表述为能量最小化问题。在物理学术语中,这个框架将能量视为机器学习系统的涌现属性。

今天的机器学习研究几乎完全是经验性的。我们需要一个更好的理论来增强我们的直觉,让我们知道下一步该往哪里看,并区分真实信号和偶然发现。也许物理学的成功可以成为一个指南。

[## 算法是不够的

人工智能的下一个突破需要重新思考我们的硬件

towardsdatascience.com](/algorithms-are-not-enough-fdee1d65e536) [## 知识的极限

哥德尔、图灵和关于我们能知道什么和不能知道什么的科学

towardsdatascience.com](/the-limits-of-knowledge-b59be67fd50a)

为什么大家都用 Kaggle?

原文:https://towardsdatascience.com/why-does-everyone-use-kaggle-db1bdf1f1b1a?source=collection_archive---------20-----------------------

…以下是数据科学家应该这样做的原因。

Unsplash【1】上由 Thibault Penin 拍摄的照片。

目录

  1. 介绍
  2. 卡格尔
  3. 利益
  4. 摘要
  5. 参考

介绍

学习数据科学可能会让人不知所措。寻找一个共享代码、数据和想法的社区似乎也是一个势不可挡且牵强附会的任务。但是,有一个地方,所有这些特征都聚集在一起。那个地方叫卡格尔。我第一次被介绍到这个平台是在学校,在我程序的第一堂课开始时,看看我会在机器学习模型竞赛的准确性挑战中处于什么位置,然后在我的最后一堂课中再次出现。我正在攻读数据科学的硕士学位,重点是机器学习。我很快意识到,有成百上千的数据科学家试图改进并向各种挑战提交他们的分数。起初看到这么多聪明上进的人都在竞争,令人望而生畏。这是看待它的一种方式,但我改变了我的想法,这个地方不仅仅是为了排列你的技能,而是一个你可以比较代码并从那些聪明的头脑中学习新想法的地方。我很感激在我作为一名数据科学家的旅程的第一周就接触到了这个信息——因为我很快就知道我会经常回到这个网站。

下面,我会列举 Kaggle 的好处,以及为什么每个数据科学家都应该使用它。

卡格尔

比赛成绩。Kaggle【2】作者截图。

什么是 Kaggle?ka ggle[3]是一个分享想法、获得灵感、与其他数据科学家竞争、学习新信息和编码技巧以及查看现实世界数据科学应用的各种示例的网站。有大量的数据集可以用于任何简单的事情,如视频游戏销售,更复杂和更重要的事情,如空气污染数据。这些数据是真实的和有参考价值的,所以你可以在项目中训练和测试你的模型,最终帮助真实的人。

Kaggle 还有很多其他有用的功能,比如数据、代码、社区、灵感、竞赛和课程。我将在下面详细介绍这些好处,这样你会发现 Kaggle 的一些有用之处。

利益

Kaggle 包括几个好处,我将在下面列出。这些是每个人使用这个网站的原因,也是你应该使用的原因。

  • 数据

有几个数据集可以在 Kaggle 上使用。在这里【4】,您可以看到一个数据集列表,以及按名称搜索可以在您未来的数据科学模型中摄取的特定数据集。大多数数据集都是 CSV 文件格式。不太流行但仍然有用的是 JSON 格式的数据集、SQLite、archives 和 BigQuery。练习使用各种文件格式是有益的,正如你在数据科学工作中所期望的那样。以下是目前“最热门”数据集的三个例子。

—新冠肺炎公开研究数据集挑战赛

—揭开新冠肺炎挑战赛

—普罗佐罗。乌克兰公共采购数据集

  • 代码

Kaggle 上有大量的代码。如果你想看到无数来自其他 Kaggle 用户的代码示例,你可以很容易地搜索包含代码的笔记本,以及大多数用户很好地注释他们代码的文本。这是学习、练习和观察其他人如何处理类似问题的好方法。我会说大多数人用 Python 编码,但也有其他编程语言,如 R、SQLite 和 Julia。

代码通常以笔记本的形式存在,也称为 Jupyter 笔记本,位于. ipynb 文件中。你可以看到几个展示端到端机器学习模型的例子。一些包括数据摄取和清理、探索性数据分析、特征工程、基础模型创建、最终机器学习模型实现以及结果的输出和解释。大多数数据科学家在其职业生涯中都经常使用这一流程,因为对于其他数据科学家以及您最终将与之合作的利益相关方来说,这是一种简单且易于遵循的格式。

code languages supported on Kaggle: Python, R, SQLite, and Julia
  • 社区

像 Medium、GitHub、Stack Overflow 和 LinkedIn 一样,Kaggle 是一个社区,数据分析师、数据科学家和机器学习工程师可以在这里学习、成长和建立联系。您可以发布您的作品(数据、代码和笔记本),这些作品最终会被分享,从而发展您自己的社区。成为一个社区的一部分也有它自己的好处,所以我强烈建议从 Kaggle 开始,发展你自己的社区,并接触其他社区。

  • 灵感

因为有数据,有代码,有社区,有课程,有比赛,你可能会受到牛逼的启发。看到其他人在帮助个人或公司的比赛中表现出色是非常鼓舞人心的。如果你被困在下一步该学什么,或者如何执行某个特定的功能,也许看到有人如何以特定的方式实现某个特定的模型,比如 random forest,你可以在一个地方看到所有这些,最终激发你创造更好的作品。

  • 比赛

赢得比赛的收入。作者在 Kaggle [5]上的截图。

如果你想测试自己,看看你在同龄人中的排名,在你的简历上看起来不错,赚点外快,或者最重要的是,帮助别人,比赛是正确的选择。Kaggle 提供了无数的比赛服务所有上述的好处。上面的截图显示了前三名的比赛和他们各自的奖金。如你所见,这些不仅仅是有趣的比赛,它们也是为了更大的利益(例如健康)。

我用 Kaggle 竞赛来看我在几乎没有数据科学知识的情况下如何表现,以及在将近两年的数据科学经验的情况下如何表现。你可以想象,我进步很大。在我的文章的 Kaggle 部分的 Kaggle 截图中,我显示我在近 8000 人中处于大约前 50%——对于几天的工作来说还不错。现在你可以看到,当成千上万甚至成千上万的数据科学家为实现同一目标而竞争时,这将如何有利于一项可以识别某些健康异常的事业。

  • 课程

对我来说有些新鲜的是发现 Kaggle 有数据科学课程。大约有 14 门课程可供你选择,它们列在下面。我个人很喜欢一些 SQL 课程,因为作为数据科学家,你很可能需要 SQL,而不仅仅是 Python。与其他课程网站不同的还有机器学习讲解游戏人工智能和强化学习介绍这里是 [6]他们网站上的所有课程:

PythonIntro to Machine LearningIntermediate Machine LearningData VisualizationPandasFeature EngineeringDeep LearningIntro to SQLAdvanced SQLGeospatial AnalysisMicrochallengesMachine Learning ExplainabilityNatural Language ProcessingIntro to Game AI and Reinforcement Learning

摘要

Kaggle 为有志成为高级数据科学家的人提供了大量资源。该网站的好处包括但不限于:数据、代码、社区、灵感、竞赛和课程。

我希望这篇文章对你有帮助!欢迎关注更多关于数据科学的文章。谢谢大家!

参考

[1]照片由 Thibault PeninUnsplash 上拍摄,(2019)

[2] M.Przybyla,卡格尔评分截图,(2020)

[3] Kaggle Inc ., Kaggle 主页,(2019)

[4] Kaggle Inc ., Kaggle 数据集,(2019)

[5] M.Przybyla,Kaggle 比赛截图,(2020)

[6]Kaggle Inc .Kaggle 课程,(2019)

为什么没人用高级超参数调优?

原文:https://towardsdatascience.com/why-does-no-one-use-advanced-hyperparameter-tuning-ac139a5bf9e3?source=collection_archive---------38-----------------------

从我们在 Determined AI 的集成深度学习训练平台中构建最先进的超参数调整的经验中获得的收获。

超参数调整 (HP 调整)是机器学习开发过程中不可或缺的一部分,可以在最大化模型预测性能方面发挥关键作用。因此,超参数调整算法在学术界得到了广泛的研究,这些算法的许多软件实现可以在网上找到

图 1:一个超参数调整问题的例子,我们考虑深度神经网络的左侧搜索空间。右侧评估了多种配置,以找到最佳设置。(图片由作者提供。)

然而,在实现学术研究论文中提出的伪代码和作为端到端机器学习工作流的一部分执行大规模惠普调优之间存在很大差距。即使在众所周知现代惠普调优方法远远优于随机搜索和网格搜索的 ML 研究社区中,研究人员仍然主要使用这些简单的方法,因为更高级的方法太难使用。当我从研究生阶段开发 Hyperband 惠普调优算法,到在谷歌运行大规模问题的惠普调优算法,再到最近将最先进的(SOTA)惠普调优功能集成到 Determined 的培训平台时,我自己就经历过这种情况。在这篇博文中,我将分享我在整个旅程中获得的见解,以便您可以开始将 SOTA 惠普调优应用于您最紧迫的 ML 问题。

那么,为什么在实践中使用高级惠普调优技术如此困难呢?根据我的经验,在端到端 ML 工作流程中应用 SOTA 惠普调优方法的三个主要挑战是:

  1. 解决大问题:惠普大规模调优与在 scikit-learn 中将惠普调优应用于小数据集截然不同。单个模型可能需要几天或几周的时间来训练,这意味着我们必须利用并行计算,同时最大限度地提高资源效率,以使问题易于处理,包括以分布式方式高效地执行惠普搜索和训练所考虑的模型。
  2. 与后端系统集成:可扩展的调优算法和训练方法需要在分布式计算实例上执行,这些实例通过网络连接在一起,以交流中间结果。此外,这些实例需要连接到数据存储,以便可以保存和跟踪实验工件的再现性。
  3. 提供明智的用户界面:实现一个适用于大规模问题的高效惠普调优算法只有在用户能够实际使用的情况下才有用!实际上,SOTA 调优方法比传统的随机或网格搜索要复杂得多,因此,除了最高级的用户之外,对所有人来说,抽象掉这种额外的复杂性是非常重要的。

根据上面的讨论,很明显,HP 调优算法本身只是在实践中应用 HP 调优的一部分;这些挑战需要通过其他同等重要的功能来解决,如分布式培训、集群管理和可用性。这些功能已经在 Determined 的深度学习集成平台中得到支持,因此用户可以专注于模型开发,而不会陷入与深度学习相关的操作复杂性中。

在接下来的章节中,我将分享我们如何通过利用我们的专业知识和在我们的集成系统中构建现有功能,来应对应用 SOTA 惠普调谐的这些关键挑战。特别是,我将高度概括以下我们认为在实践中对高级惠普调优必不可少的功能:

1。缩放到大问题

。与后端系统集成

3。提供合理的用户界面

扩展到大型问题

利用大规模并行性的高效调优算法

随着模型越来越大,训练时间越来越长,有效利用大规模并行性的超参数调整算法对于大规模应用至关重要。我们选择惠普调优算法的两个标准是:

  1. 效率:找到一个高质量的惠普配置需要多少计算量?
  2. 并行:分布式计算的算法有多合适?例如,有多少计算可以并行完成,以及在出现掉队者和任务失败的情况下,算法的表现如何?

就效率而言,领先的惠普调优算法利用提前停止来降低计算成本;主要思想是分配较少的资源给较差的 HP 设置,以便可以更快地找到高质量的配置。在我研究生学习的过程中,我和我的合作者通过提前停止引入了 Hyperband 进行高效的 HP 调优。我们的结果显示,Hyperband 比简单的随机搜索快 20 倍以上,并通过击败以前的 SOTA 贝叶斯优化方法展示了 SOTA 性能。从那以后,由于其简单性和理论上的合理性,Hyperband 成为 HP 调优最流行的方法之一。

对于第二个标准,大规模惠普调优算法需要对现实世界计算集群中常见的干扰(如掉队者和任务失败)具有鲁棒性。在这方面,虽然 Hyperband 算法易于并行化,但随着故障率的增加,该算法中的同步步骤引入了严重的瓶颈。为了解决这个问题,我们最近推出了一种用于大规模并行惠普调优的改进算法,称为异步连续减半(ASHA),在 MLSys 发表的论文中实现了 SOTA 性能。

Determined 通过我们的自适应惠普调优算法提供 SOTA 惠普调优功能,该算法构建于 ASHA 之上,以提高易用性。我们的自适应算法利用早期停止来评估比随机和网格搜索等强力方法多 100 倍的超参数设置(参见这篇在 ASHA 的博客文章了解更多细节)。作为 ML 实践者,我们很清楚宣称 SOTA 性能是一回事,用真实世界的实验证明它是另一回事。出于好奇,请随意跳到我们的基准测试结果来看看 Determined 的自适应惠普调优算法。

自动检查点,高效提前停止

暂停和恢复训练而不浪费太多计算的能力对于最大化基于早期停止的 HP 调优方法的效率是至关重要的;Determined 的自适应 HP 调优算法也不例外。在这一过程中,随着算法自适应地将训练资源分配给更高性能的 HP 设置,数千次试验被暂停和恢复。如果不支持有状态对象的有效保存和恢复,当自适应调整算法决定恢复进一步训练的尝试时,计算的有意义部分将被重复。

为了通过 Determined 的自适应惠普调整算法达到 SOTA 性能,我们支持高效的早期停止,就像我们支持一般容错机器学习一样:通过自动保存模型和其他有状态对象,以便我们可以在失败后恢复训练而不会丢失太多计算。代替确定,用户必须根据存储位置(例如,AWS S3、Google 云存储或分布式文件系统)编写样板代码来正确地保存和恢复模型。要正确做到这一点非常重要,而且分布式培训和再现性的相关要求会使这一点变得更加复杂。Determined 为您处理这些更复杂的用例,并允许您指定一个检查点策略来控制您的实验的存储足迹(参见检查点 gc检查点策略)。

大规模模型的分布式训练

光靠 SOTA 惠普调优不足以进行大规模深度学习,尤其是在模型需要数千小时训练的情况下;对于用户来说,等待几周或几个月来完成一个实验是很难的。幸运的是,分布式培训可以显著减少培训时间(例如,在药物研发应用中确定的24 倍加速)。

在 Determined 中,自适应惠普调优和分布式培训的结合实现了真正的大规模模型开发,以接近零的样板代码开发前沿人工智能。在 Determined 中启用分布式培训就像切换单个实验配置字段一样简单:

resources:
    slots_per_trial: 64

在这种配置下,HP 调优实验中的每次尝试将使用 64 个 GPU 来训练单个 HP 设置。在幕后,Determined 为您处理与数据分片和模型参数通信相关的复杂性。Determined 还支持更高级的分布式训练优化选项,可以进一步加速你的实验。

鉴于 Determined 的自适应 HP 调整算法通常可以在训练单个模型收敛所需的时间内找到高质量的 HP 配置,分布式训练使得 HP 调整即使对于最大的模型也是易处理的。

与后端系统集成

自动化集群管理

以分布式方式运行大规模 HP 调优实验需要跨多个实例进行协调,以执行 HP 调优算法指示的工作负载。与随机搜索和网格搜索相比,需要将中间结果传递给算法,以便可以更新算法状态来生成未来的工作负载。建立这样一个集群既耗时又繁琐,而且通常需要为每个计算平台提供单独的解决方案。Determined 通过自动在 AWS/GCP 上提供资源来建立一个集群,然后在集群启动后安排实验,从而处理深度学习的许多操作方面。

资源供应

在 Determined 中,用户可以用一条命令启动 AWSGCP 集群:

det-deploy aws/gcp up --cluster-id <> --project-id <>

使用该命令,Determined 将创建一个集群,在实例之间建立必要的网络,以便进行 HP 调优和分布式培训。然后,Determined 会根据需要自动放大和缩小实例,以训练活动实验。

用户还可以利用通常便宜 3 倍的现场/可抢占实例,让他们的计算预算更上一层楼。使用现场/可抢占的实例当然有浪费计算的风险,因为当需求增加时它们可以被关闭。有了 Determined,这些风险在很大程度上被我们在上一节中讨论的对保存和恢复实验的内置支持所减轻。

实验日程

先进先出(FIFO)调度对于计算集群来说仍然是相当普遍的,这是由于它的简单性和作为工作负载管理器的默认状态,如 SLURMSun Grid Engine 。然而,由于两个主要原因,这种调度机制不太适合机器学习集群。首先,从资源利用的角度来看,要求用户为每个实验指定静态资源需求可能是次优的。举例来说,考虑一个具有 10 个插槽的集群和一个 HP 调优实验,该实验在探索阶段可以受益于 10 个插槽,但在整个实验过程中平均只需要 4 个插槽。其次,FIFO 调度可能会导致用户之间的群集资源共享不佳,因为单个大型作业可能会使群集饱和并阻塞所有其他用户作业,例如,请参见下图。

图 2:普通 FIFO 调度器与 Determined 使用的公平共享调度器的比较。使用 Determined,大型作业不会阻止其他用户提交的作业的进度。此外,Determined 自适应地将资源分配给作业,以最大化可用利用率,而不是将固定资源分配给每个作业。(图片作者。)

通过使用集中的公平共享调度程序,使每个人都能高效工作,同时最大限度地提高集群利用率。调度器自适应地在实验被提交和处理时给它们分配资源。这允许实验在计算资源可用时利用最大程度的并行性。然而,在存在资源争用的情况下,我们的调度程序跨实验共享资源,以允许所有用户取得进展。这种行为对于团队来说尤其可取,因为在任何给定时间,集群都必须处理不同规模的实验,从需要单个 GPU 的笔记本电脑到具有数千次不同试验的惠普调优实验。

再现性的伪影跟踪

再现性对于减少错误和建立在他人工作的基础上是很重要的。尽管我们已经看到对机器学习(例如 12 )中关于再现性的挑战的认识不断提高,但是由于在整个模型开发过程中存在大量移动部件,再现性仍然难以实现。此外,由于算法的异步性质,SOTA 并行 HP 调优方法为再现性增加了另一层复杂性。

图 3: Determined 自动跟踪训练中使用的许多工件,只需点击一个按钮即可实现再现性。(图片作者。)

Determined 将上面提到的所有实验工件存储在一个托管数据库中,以便于将来访问。这使用户能够执行以下操作:(1)恢复惠普调优实验,并从停止的地方继续;(2)派生一个实验,并使用不同的配置运行;(3)通过指定检查点 ID,从检查点进行热启动培训。

提供合理的用户界面

友好的界面易于使用

我们之前观察到,大多数 ML 研究人员仍然使用简单的 HP 调优方法,如手动、网格或随机搜索,这也许并不令人惊讶,因为使用高级 HP 调优方法会引入显著的复杂性。特别是,在实践中很难应用这些方法,因为

  1. 它们具有内部超参数,需要进行配置以获得合适的性能,并且
  2. 它们需要修改模型代码来处理外部库中的实现。

在 Determined 的自适应 HP 调整算法中,对于(1),我们已经通过使用健壮的默认值配置搜索算法来简化用户界面,这些默认值在大范围的 HP 调整实验中运行良好。要在 Determined 中为您的实验使用自适应 HP tuning,只需如下指定实验配置的搜索器部分。

searcher:
   name: adaptive_asha
   metric: top1_accuracy
   smaller_is_better: false
   max_trials: 1000
   max_length:
       epochs: 300

已确定通过跟踪所有试验的中间性能以便后续重放,实现可重复的 HP 调整。在试验级别,Determined 通过跟踪和保存所有有状态对象(包括随机生成器)来提供容错再现性。这些功能伴随着通过设计使测定可再现的其他组件(见下图)。通过自动跟踪环境、代码和实验工件,Determined 允许用户只需点击一个按钮即可重现惠普调优实验。

通过设计,用于自适应镜像随机搜索和网格搜索的搜索器配置方案,其中主要输入对应于要评估的 HP 设置(即,试验)的数量,以及每次试验训练多长时间。高级用户可以选择指定提前停止模式,更积极的提前停止可能会使用更嘈杂的信号来分配训练资源,从而提供更高的加速。随着其他惠普调整算法的出现,对自适应行为的更细粒度控制也得到支持。

对于(2),我们的惠普调优功能与我们的集成系统无缝协作,因此您可以轻松地从训练单个模型转移到跨多台机器调优您的模型的超参数。这仅仅需要用您想要在实验配置中搜索的超参数和相关范围指定搜索空间。无需处理跨多台机器的调度,也无需修改您的代码来使用不同的惠普调优库。

用于实验管理的图形化 web 用户界面

启动惠普调优实验后,监控进度并根据需要进行调整非常重要。作为一名研究人员,我借助于监控日志来检查我的结果,并且通常等到整个 HP 调优实验完成之后才分析结果。有了 Determined,用户可以通过我们的 web UI 监控和管理实验(见下图)。对于给定的实验,该界面显示了迄今为止任何试验所达到的最佳验证性能,并总结了所有评估的超参数设置。用户还可以容易地管理他们的实验,例如,如果已经识别出合适的 HP 设置,则暂停实验,如果需要进一步调整,则恢复实验,并且分叉实验以用修改的搜索空间运行。

图 Determined 用户友好的 web UI 中的实验总结页面。(图片作者。)

决心付诸行动

让我们将这一切与 Determined 的自适应搜索器的基准测试结合起来,与 ASHA 论文BOHB 中使用的参考实现进行比较,后者是另一种流行的惠普调优方法。特别是,我们将使用 ASHA 论文中研究的两个基准,在经过充分研究的搜索空间上进行神经架构搜索 (NAS)。为 Determined 的自适应搜索器复制结果的代码可在这里获得供您跟随。

根据搜索速度和搜索质量来评估 HP 调优方法;即,算法能多快找到高质量的 HP 设置?为了评估这一点,我们跟踪通过搜索方法找到的最佳性能 HP 设置的验证指标,并比较所得的学习曲线。对于下面的两个基准测试,我们对 5 次 HP 调优实验的结果进行了平均,以便进行更可靠的比较。

寻找 RNN 建筑

这个搜索空间包括超过 150 亿个可能的架构,对应于语言建模的不同循环单元。我们在 Penn Treebank 数据集上训练和评估了不同的架构,并随着自适应搜索器的进展记录了最佳验证困惑(越低越好)。下图显示,Determined 的自适应搜索器略优于 ASHA 的参考实现,并在 BOHB 占据主导地位。事实上,在短短两个小时内,Determined 能够通过考虑 300 多种配置,自动找到一个困惑度低于 76 的模型;六个小时后,Determined 研究了大约 1k 种不同的配置,而随机搜索只评估了大约 20 种配置。从这个角度来看,使用可抢占实例评估 1k 配置的成本为 50 美元,而使用按需实例评估 1k 配置的随机搜索成本为 7k 美元。

图 5:在一个用于设计 RNNs 的神经架构搜索任务中,Determined 的自适应 HP 调整算法与 ASHA 的最新研究结果相匹配。该实验使用 16 个 GPU 运行,结果是 5 个 HP 调优实验的平均值。(图片作者。)

搜索 CNN 架构

该搜索空间包括对应于用于计算机视觉的不同卷积神经网络的超过五万亿(或 10 ⁸)个可能的架构。我们在 CIFAR-10 上训练和评估了不同的架构,并随着自适应搜索器的进展记录了最佳验证精度。下图显示,Determined 的自适应搜索器与 ASHA 的参考实现相匹配,并且在找到一个好的 CNN 架构方面比 BOHB 更快。这里的情况类似于 RNN 搜索领域的情况:20 小时后,Determined 在可抢占的实例上仅用 150 美元就探索了约 1k 种不同的配置,相比之下,随机搜索使用按需实例评估 1k 种配置需要 23k 美元。

图 6:在一个用于设计 CNN 的神经架构搜索任务中,Determined 的自适应 HP 调整算法与 ASHA 的最新研究结果相匹配。该实验使用 16 个 GPU 运行,结果是在 5 HP 调优实验中得到的平均值。(图片由作者提供。)

坚定地走得更远

让我们继续使用 NAS CNN 基准来演示使用 Determined 的端到端模型开发是什么样子。

在执行惠普调整以确定一个好的 CNN 架构之后,我们需要通过使用多个随机初始化来训练该架构,并在测试集上对其进行评估,从而进一步验证该架构。在一个批处理大小为 96 的 GPU 上,这个步骤通常需要将近 40 个小时。使用 Determined,我们通过将批处理大小增加到 256 并在 2 个 GPU 上并行化,轻松地将时间减少了两倍。请注意,您可以进一步提高并行度,并以更高的加速为目标(例如,在这个 NLP 示例中,我们使用 Determined 将训练速度提高了 44 倍)。

自适应搜索找到的最佳架构在 CIFAR-10 上的测试精度为 97.21,优于本文(参见表 5)中的 ASHA 基准,并达到或超过许多复杂 NAS 方法的性能(例如【ENAS】飞镖GHNSNAS )。

当您找到您满意的模型时,您可以将它保存到模型注册表中,用于模型版本控制/跟踪和在下游应用程序中的方便访问:

**from** **determined.experimental** **import** Determined

det = Determined() *# Connect to the master* model = det.create_model(
         "nas_cnn",
         description="cnn architectures from the DARTS NAS",
       )
checkpoint = det.get_experiment(exp_id).top_checkpoint()
model_version = model.register_version(checkpoint.uuid)

我如何开始?

在本帖中,我们分享了 Determined 如何解决在端到端 ML 工作流中应用 SOTA 惠普调谐的关键挑战。我们的基准测试结果显示,使用我们的集成系统进行的惠普调整与 SOTA 研究得出的惠普调整结果相匹配。要尝试我们的 SOTA 惠普调优解决您的问题,请看一下本教程开始吧!

上述基准测试还展示了如何将 Determined 应用于 NAS 问题。我们的结果证实了我们之前的工作,表明 ASHA 是 NAS 的一个强基线。您可以安装一个确定的集群并在提供的代码中修改数据加载器,以尝试 NAS 来完成您今天的 ML 任务!

原载于 2020 年 10 月 8 日https://determined . ai

为什么平稳性在时间序列分析中很重要?

原文:https://towardsdatascience.com/why-does-stationarity-matter-in-time-series-analysis-e2fb7be74454?source=collection_archive---------3-----------------------

照片由 Unsplash 上的 Niklas Kickl 拍摄

学习时间序列分析的基本规则

平稳性是时间序列分析领域中的一个重要概念,对如何感知和预测数据有着巨大的影响。在预测未来时,大多数时间序列模型都假设每个点相互独立。最好的说明是过去实例的数据集是静态的。对于静止的数据,系统的统计特性不会随时间而改变。这并不意味着每个数据点的值必须相同,但是数据的整体行为应该保持不变。从纯粹的视觉评估来看,没有显示趋势或季节性的时间图可以被认为是稳定的。支持平稳性的更多数值因素包括常数均值和常数方差。

趋势 =当数据长期增加或减少时

季节性 =根据一年、一周或一天中的某个时间,以固定和已知的频率重新出现的模式

静态数据的例子

如果数据不是静态的呢?

下图清楚地展示了非平稳数据的样子。左边的图有很强的正趋势,季节性很强。尽管这告诉了我们许多关于数据特征的信息,但它不是静态的,因此不能使用传统的时间序列模型进行预测。我们需要对数据进行转换,以消除不断增加的差异。

一段时间内的乘客数量&一段时间内的平均值和方差

由于数据是不稳定的,您可以执行转换来转换成稳定的数据集。最常见的变换是差分和对数变换。

差分变换

差异是一种变换,通过消除时间序列级别的变化来帮助稳定时间序列的平均值,从而消除趋势和季节性。一阶差分变换包括获取当前时间的数据点,并将其与之前的点相减。结果是时间 t 的点之间的差异的数据集。如果一阶差异是平稳的和随机的,那么它被称为“随机行走”模型。

一阶差分变换

一阶差分数据

在这种情况下,差异不会产生预期的结果。即使平均值是稳定的,方差也只是不断增加。在某些情况下,使用二阶差分变换会有效,但我决定尝试对数变换。

对数变换

有时,差异不足以消除所有非平稳数据中的趋势。对数变换取每个点的对数,并将数据转换成对数标度。重要的是要记住,对数变换之后必须始终跟随差分变换。

正如你在上面看到的,平均值和方差变得稳定,成为常数。没有趋势或强烈季节性的迹象。

扩充迪基-富勒试验

虽然视觉测试是一种快速检测静止物体的方法,但大多数情况下不会像上面那样简单。统计检验允许我们通过检验平稳性来证明我们的假设。ADF 检验,也称为“单位根检验”,是一种统计检验,用于告知零假设可以被拒绝或不能被拒绝的程度。低于阈值(1%或 5%)的 p 值表明我们拒绝零假设。

零假设 H0 =如果未能被拒绝,则表明时间序列有单位根,意味着它是非平稳的

替代假设 H1 =零假设被拒绝,表明时间序列没有单位根,意味着它是平稳的

在代码中实现这个测试最简单的方法是使用 statsmodels 库中的adfuller()函数。

from statsmodels.tsa.stattools import adfullerdef ADF_Cal(x):
    result = adfuller(x)
    ADF_stat = result[0]
    p = result[1]
    print("ADF Statistic: %f" % ADF_stat)
    print("p-value: %f" % p)
    print("Critical Values")
    levels = [.01, .05, .1]
    i = 0
    for key,value in result[4].items():
        print('\t%s: %.3f' % (key,value))
        hyp = p < levels[i]
        if ADF_stat < value:
            cert = (1-levels[i])*100
            print("{}% certain this is staionary".format(cert))
            print('Reject H0: {}'.format(hyp))
            break
        i = i+1
        if i >= 3:
            print("Less than 90% certain that data is stationary")
            print('Reject H0: {}'.format(hyp))print("Calculating ADF test for X...")
ADF_Cal(X)

结论

总的来说,理解平稳性对于了解如何处理数据至关重要。如果数据是不稳定的,那么某些转换可能有助于将其转换为稳定的数据。差分或对数变换是使数据稳定的常用技术。一种方法并不比另一种好。在做出合理的判断之前,用户需要查看所有的方法和每个结果。使用 ADF 测试等定量工具可以让我们正确理解数据的属性。

为什么存在最优策略?

原文:https://towardsdatascience.com/why-does-the-optimal-policy-exist-29f30fd51f8c?source=collection_archive---------13-----------------------

有限 MDP 最优策略存在性的证明

在有限马尔可夫决策过程 (MDP)中,最优策略被定义为同时使所有状态的价值最大化的策略。换句话说,如果存在最优策略,那么使状态 s 的价值最大化的策略与使状态s’的价值最大化的策略是相同的。 但是为什么要有这样的政策存在呢?

萨顿和巴尔托关于强化学习的著名入门书认为最优策略的存在是理所当然的,并没有回答这个问题。我很难相信他们,也很难继续阅读!

在这篇文章中,我将证明有限 MDP 中最优策略的存在性。

符号和定义

马尔可夫决策过程和策略

有限 MDP 的特征在于状态的有限集合(通常由曲线 S 示出)、每个状态的动作的有限集合(通常由曲线 A 示出)、以及在即时奖励值 r 和下一状态S’,给定当前状态 s 和当前选择的动作 a 的概率分布,表示为 p

给定当前状态 s ,策略π是在状态 s 的可能动作上的概率分布,表示为π (a|s)。然后,给定一个策略,代理可以在环境中导航(即从一个状态到另一个状态)并通过每次转换获得奖励。

我们用大写字母表示随机变量,用小写字母表示它们的值。时间加在每个变量上,并带有一个下标。然后,给定一个策略和一个 MDP,并给定初始状态(在时间 t=1 ) s ,对于任何 T > 1 ,状态、动作和奖励值的联合分布为

价值观和贝尔曼方程

给定保单π和贴现因子 0 ≤ γ < 1, the value of each state is defined as

and the value of each pair of state and action as

It is easy to show that the values of states and action-state pairs can be written in a recursive way

These sets of equations are known as the 贝尔曼方程

我们以后会用到这个事实

方程式 1。作为函数状态-动作值的状态值。

最优策略

策略π*是最优策略,当且仅当我们

对于任何状态 s 和任何其他策略π。

贝尔曼最优方程

我们用曲线 S 表示所有可能状态的集合,用曲线 A(s)表示在状态 s 的所有可能动作的集合。我们用δ表示克罗内克δ,并以下面的定理开始这一部分。

证明注释: 我们用的是 Eq。1 在证明的第 1 行,然后反复使用了这样的事实,即一对状态和动作的值 (s,a) 大于或等于状态的值 s。*

定理 1 说明,每当有一对状态和动作 (s,a) 的值大于关于策略π的状态【s ,的值时,则在所有状态中都有另一个策略π’优于或等于(根据状态值)π。因此,如果最优策略π存在,其值应该满足,对于任何状态 s,

等式 2。贝尔曼最优方程的紧凑形式。

其中 curvy A(s) 代表状态 s — 下所有可能动作的集合,人们可以很容易地通过矛盾来证明这个陈述。使用贝尔曼方程,我们可以将方程 2 展开为

等式 3。贝尔曼最优方程的扩展形式。

这组非线性方程(与状态数一样多)被称为“贝尔曼最优方程”。所以,如果一个最优策略存在,它的值应该满足这组 equations⁴.

因此,要证明存在最优策略,必须证明以下两个陈述:

  1. 贝尔曼最优方程组有解,并且
  2. 在所有状态中,它的一个解的值大于或等于其他解的值。

解的存在唯一性

在本节中,我们证明贝尔曼最优方程组有一个唯一的解。通过这样做,我们同时证明了上述两个陈述。

贝尔曼最优算子

给定状态上的一组值,我们将值的向量定义为

它只是一个实值向量,其元素等于不同状态的值。然后,我们将“贝尔曼最优算子” T 定义为映射

运算符 T 获取一个向量值,并将其映射到另一个向量值。使用这种新的符号,很容易看出等式 2 和 3 等价于

等式 4。贝尔曼最优性方程作为贝尔曼最优性算子的不动点。

这个观察意味着贝尔曼最优方程的解与贝尔曼最优算子的不动点 s 相同。因此,为了证明 Bellman 最优性方程解的存在唯一性,可以证明 Bellman 最优性算子有唯一的不动点。

为此,我们需要引入另一个概念和另一个定理。

压缩映射和 Banach 不动点定理

考虑一个度量空间 (M,d) ,即 M 是一个集合, d 是定义在这个集合上的一个度量,用于计算 M ⁵.的每两个元素之间的距离映射 T: M → M 是收缩映射,如果存在 0k < 1 使得对于 M 中的任意 xy ,我们有

直观上,收缩映射使点之间的距离更近。图 1 展示了在两点上重复应用收缩映射的示例。

图一。压缩映射的一个例子和 Banach 不动点定理的陈述

我们对压缩映射感兴趣的原因是下面这个著名的定理,称为 Banach 不动点定理

该定理背后的整个思想如图 1 所示:映射后所有点彼此越来越近,因此,通过重复映射,所有点收敛到一点,该点是 T 的唯一不动点。

因此,要证明 Bellman 最优性方程解的存在唯一性,只需证明存在一个度量,其中 Bellman 最优性算子是一个压缩映射。

Bellman 最优性算子是无穷范数下的压缩映射

对于任意一对值向量 VV’,它们的无穷范数定义为

在这一节中,我们要证明 Bellman 最优性算子是这种范数下的压缩映射。为此,我们首先需要以下引理。

证明注释: 虽然该引理相当不平凡,但其证明并不困难,只需要初等技巧。我在证明它的过程中得到了一些乐趣,并认为把它的证明留给感兴趣的 readers⁶.作为练习可能是件好事

现在,有了引理,我们终于可以进入我们的主要定理。

证明注释: 从证明的第 2 行到第 3 行,我们用了引理,从第 4 行到第 5 行我们用了绝对值函数的凸性。剩下的就简单了。

因此,贝尔曼最优性算子具有唯一的固定 point⁷,并且贝尔曼最优性方程具有唯一的解。很容易证明,在贝尔曼最优性方程的一个解上,任何贪婪策略都有与那个解相等的值。 因此,最优政策是存在的!

结论

我们证明了( 1) 最优策略的值应该满足贝尔曼最优性方程。然后我们证明了(2)Bellman 最优性方程的解是 Bellman 最优性算子的不动点。通过证明(3)Bellman 最优性算子是无穷范数下的压缩映射,并利用( 4) Banach 不动点定理,我们证明了(5)【T21)Bellman 最优性算子存在唯一的不动点。因此,存在同时最大化所有状态值的策略。****

承认

感谢 Johanni Brea 和我的博士顾问 Wulfram Gerstner 向我介绍了这个主题,感谢 Mohammad Tinati 和 Kian Kalhor 对这篇文章进行了有益的讨论和校对,感谢 Berfin 辛塞克向我介绍了 Csaba Szepesvári 关于“强化学习算法”的巨著。

脚注:

萨顿和巴尔托的《强化学习:导论》。

作为一个现实生活中有点奇怪的例子,如果我们的世界是一个有限的 MDP,如果存在一个最优策略,那么,同样的烹饪方式会让我们(粗略地说)在吃晚餐和第二天在办公室工作时都最快乐。

我第一次阅读这篇文章的大部分材料是在 Csaba Szepesvári 的《强化学习的算法》和 Johanni Brea 的博士论文中。

⁴很容易证明,在贝尔曼最优方程的一个解上,任何贪婪策略都有与那个解相等的值。

⁵:关于度量的定义,你可以看我在上的文章“相关距离是度量吗?”

提示:不失一般性,假设 f₁ 的最大值大于 f₂ 的最大值。然后,将 f₁ 的最大化器命名为 a₁、和…

⁷注意到,对于任何有限的 n ,范数为无穷大的 ℝⁿ 是紧的——参见这里的关于“完备性和紧性在 R^N 中的一个证明”。

为什么道德推理应该是数据科学团队的基本能力

原文:https://towardsdatascience.com/why-ethical-reasoning-should-be-an-essential-capability-for-data-science-teams-5be1b9da67d3?source=collection_archive---------55-----------------------

和两个具体行动来启动你的团队的道德知识

图片来源:姆博林娜iStock

无论新技术被引入何处,伦理和立法都会落后于应用。从技术角度来看,数据科学领域已经不能称之为新领域,但在道德和立法方面,它还没有达到成熟。因此,这个领域特别容易出现有害的道德失误。

当我们等待——或者更好地说:继续努力——道德和立法的成熟时,我们现在如何防止这些失误?

我认为解决方案在于你自己作为一名数据科学家承担起责任。在我得出这个结论之前,我先给你简单介绍一下数据伦理和立法。此外,我将分享我自己团队的最佳实践,它给出了具体的行动,让您的团队做好道德准备。

“但是数据和模型本身就是中性的,何必担心好坏呢?”

图片来源:kiri ll _ save nkoviaiStock

如果 2012 年标志着数据科学应用黄金时代的开始,标志着数据科学被冠以 21 世纪最性感的工作,那么 2018 年可能是数据伦理的时代。在这一年,全世界开始形成一种关于数据如何被使用和不被使用的观点。

剑桥分析公司影响政治的目标显然属于“可能不”的阵营。

这一丑闻引发了关于数据使用道德的大讨论。此后,有多篇文章讨论了算法的坏处超过好处的情况。许多例子包括图像识别人工智能错误地将人类表示为大猩猩,聊天机器人 Tay 在 24 小时内变得对 Twitter 太过无礼,成为 T2,以及重男轻女的人力资源算法,这提出了一个问题:数据科学是 21 世纪最性感的工作,还是最性别歧视的工作?).

显然,数据应用已经离开了中立地带。

除了公众的关注,或者可能是由公众的关注引起的,大型(政府)组织,如谷歌欧盟联合国现在也看到了数据伦理的重要性。许多“数据/人工智能/人工智能指南”已经发布,这些指南可以在处理数据和分析时提供道德指导。

没有必要费时费力地阅读每一篇文章。一项针对 39 位不同指南作者的荟萃研究显示,在以下主题上有很大的重叠:

  1. 隐私
  2. 有责任
  3. 安全和保障
  4. 透明度和可解释性
  5. 公平和不歧视

这是一个很好的开始思考和阅读的主题列表。我强烈建议您自己更深入地研究这些问题,因为本文不会像它们的重要性所应得的那样深入地解释这些主题。

法律治理,我们到了吗?

图像来源:通过 iStock 插入

关于数据伦理的讨论是走向适当数据监管的重要一步。理想情况下,法律基于共享的价值观,这可以通过思考和谈论数据伦理来找到。在没有事先哲学思考的情况下起草立法就像在自动售货机上盲目地按一些数字,然后希望你最喜欢的零食出来。

一些针对数据伦理的初步立法已经出台。想想的 GDPR ,它在欧盟监管数据隐私。尽管这一法规(还)不完全能够严格管理隐私,但它确实将隐私——以及数据伦理作为一个整体——推到了辩论的中心。这不是终点,而是朝着正确方向迈出的重要一步。

此时此刻,我们发现自己处于现代数据技术嵌入社会的中间状态:

  • 从技术上来说,我们有能力开发许多潜在的有价值的应用。
  • 从伦理上来说,我们已经到了可以就什么是可接受的,什么是不可接受的达成一致的地步。
  • 然而,从法律上来说,我们还不能适当地确保防止数据的有害应用:大多数数据伦理丑闻都是在公共领域解决的,而不是在法律领域。

目前(大部分)责任落在了数据科学家的肩上

图像来源:通过 iStock 获得的图像

因此,数据领域还不能通过立法进行道德管理。我认为最有希望的替代方案是由该领域最具专业知识的人进行自我监管:数据科学团队本身

你可能会说,自我监管带来了不公平的问题,但我确实建议把它作为一种中间解决方案,用于我们发现自己处于的中间情况。一旦关于数据使用的立法更加成熟,更少——但绝不是零——的自我监管是必要的。

另一个难题是,许多数据科学家发现自己在道德行为和创建最准确的模型之间处于分裂状态。通过承担道德责任,数据科学家也有责任解决这种紧张关系。

从金钱(如 GDPR 的罚款)或对公司形象的损害来看,不道德的替代方案可能代价更高,这一观点可以说服我。你的雇主或客户可能更难被说服。“如何说服你的利益相关者合乎道德地使用数据”听起来是未来文章的好主题。

我的提议对数据科学团队有着重要的影响:除了技术技能,他们还需要数据伦理方面的知识。这种知识不能被认为是自动存在的,因为软件公司 Anaconda 发现只有 18%的数据科学学生说他们在学习中接受了数据伦理教育。

此外,仅仅一个具有伦理知识的人是不够的,每个数据科学从业者都必须具备识别其工作中潜在伦理威胁的基本技能。否则,道德事故的风险仍然很大。但是如何在你的团队中获得整体的道德知识呢?

走向伦理知识的两个具体行动

图片来源: davidf via iStock

在我自己的团队中,我们采取两步走的方法:

  1. 在小组范围内讨论每个人在处理数据和算法时发现的道德重要性
  2. 在此讨论的基础上,构建一个全集团公认的道德准则

第一步,我们就学术界和商业领域的数据伦理现状对小组进行教育。这包括讨论新闻中的数据伦理问题,解释最流行的伦理框架,以及关于日常工作中如何出现伦理问题的对话。这应该使每个成员都能形成对数据伦理的看法。

在第二步中构建的团队范围的道德数据指南应该给我们的数据科学家在识别潜在威胁方面打下坚实的基础。指导方针不应该自上而下地构建;从小组讨论中得出的个人意见形成了一个更好的基础。通过这种方式,可以构建代表每个数据科学家的通用指南。

如果构建成一个详细的逐步清单,该理论将不会成功。相反,它应该作为一个总的指导方针,帮助确定哪些个案应该进一步讨论。

准确地说,这应该是数据科学家的任务:确保潜在的不道德数据使用不会被忽视。不道德的使用不仅发生在数据科学家身上,也发生在所有可能在工作中使用数据的同事身上。通过这种方式,提高了对数据伦理的认识,使公司能够负责任地利用数据的力量。

简而言之:开始谈论数据伦理

我们在技术上有能力改变生活的数据应用,但是以立法形式存在的安全网还没有到位。数据科学家在有害应用的深谷中走钢丝,伦理的总体知识是帮助他们保持平衡的支柱。通过发起适当的讨论,您的数据科学团队拥有了防止代价高昂的道德失误的工具。

正如我在文章中所主张的,关于数据伦理的讨论推动了该领域走向成熟,这样我们就可以对数据科学进行一次“”的严格而复杂的伦理审查。所以,参与讨论:对这些内容持批评态度,形成一个观点,谈论它,当你遇到新奇的信息时,经常改变你的观点。这不仅让你成为更好的数据科学家;它使整个领域变得更好。

为什么欧拉质数公式会扰乱世界

原文:https://towardsdatascience.com/why-eulers-formula-for-primes-could-disrupt-the-world-edc41bd3ba5b?source=collection_archive---------5-----------------------

素数的这个鲜为人知但令人敬畏的特性可能会改变你对加密的看法

图片由 F. Zielen 提供(Euler 的原始图片由 J. E. Handmann 提供)

质数是现代加密的基础。原因很简单:直到现在我们还没有理解它们的数学本质。然而,通过揭开素数的神秘面纱,世界将会发生巨大的变化。在这篇文章中,我展示了素数的一个鲜为人知但令人敬畏的性质,它可能会改变你对密码学的看法。不要担心,这将是一个简单易懂的执行层面的阅读。

刷新和激励

让我们回顾一下:质数是只能被 1 或数字本身整除的整数,没有余数。例如,5 是质数(约数 1 和 5),但 6 不是质数(约数 1、2、3 和 6)。

有无穷多个素数,但是到目前为止还没有有效的算法来确定它们。特别地,没有计算第 n 个素数的公式,既不是递归的,即如果我们知道前面的(较小的)素数,我们可以计算一个素数,也不是显式的,即我们可以在不知道前面的素数的情况下直接计算一个素数。

例如,这使得著名的 RSA 密码系统如此安全。加密所需的公钥是基于两个(非常大的)素数的乘积。如果你想得到解密所需的私钥,你“只”需要确定这个乘积的质因数。然而,这目前花费如此多的计算时间,以至于 RSA 实际上是不可解锁的。

但是,如果我们发现一个可以立即计算素数的公式,会发生什么呢?这也能产生非常快速的质因数分解方法,这将意味着今天大多数密码系统的死刑判决。但是有可能找到素数的公式吗?

惊人的欧拉乘积

莱昂哈德·欧拉是世界上有史以来最杰出的数学家之一。18 世纪,他推导出一个公式,今天被称为欧拉乘积。在这里,我们关注他开创性发现的一个特例。请不要停止阅读,即使下一行第一眼看起来像象形文字。

欧拉乘积

我们翻译:等式左边的符号代表一种产品。此外,它是所有素数上的无限乘积,即我们需要用所有素数替换变量 p,并将各项相乘。我们写下来说清楚吧。

欧拉乘积的第一因子

这意味着:如果我们计算上面的乘积,插入所有的质数,我们得到定义明确的结果 pi /6。太棒了,感觉像个谜。请让我告诉你为什么。

破坏性后果

我们知道有无穷多个素数,但是我们还没有任何关于素数的封闭而有效的表示(“公式”)。有了计算能力,我们只需确定已知的最大素数。尽管如此,欧拉已经证明,如果我们根据欧拉乘积将所有的素数相乘,我们可以获得π/6 的值——尽管我们不知道所有的素数!

依我看,这表明有大量关于质数的知识我们至今还没有发现。如果我们能计算无穷多素数上的欧拉乘积,我们也应该能推导出素数的公式。例如,对于特殊的素数,闭表示是已知的。

这表明我们必须加大数论研究的力度,以揭示素数的真正本质。而可能解开这一探索的人要么被颂扬,要么被迫害。

结尾部分

我问自己这样书呆子气的话题会吸引读者吗?我是一个数论迷,然而,这不是我的日常业务,所以我很感谢你的评论。请让我知道,如果你想了解更多关于这个东西或数学以外的东西,也许我会写一个后续。

为什么每个数据团队都需要一棵“摇钱树”

原文:https://towardsdatascience.com/why-every-data-team-needs-a-money-tree-491a602ea68?source=collection_archive---------37-----------------------

这个框架如何团结我的利益相关者支持我的工作

图片由马太·亨利发自突发

当我加入 Square 时,我的产品团队正在跟踪大量指标。人们对它们之间的关系理解不一,对我们应该把精力集中在哪里也没有达成一致。

我的团队需要帮助。

我知道他们需要摇钱树。🤑 🌳

什么是摇钱树?

金钱树是一个简单的图表,显示了你的指标如何从你的“漏斗顶端”一路上升到你的最终目标(通常是美元和用户)。

这是一棵摇钱树的样本。

摇钱树样本。图片作者。

在现实中,大多数业务比这复杂得多:例如,我的团队的摇钱树的形状如下。

我团队的[修订]金钱树。图片作者。

摇钱树是怎么用的?

摇钱树确保共同理解是什么推动了你的底线,并在你最大的机会领域创造一致性

确保达成共识

大多数“数据人”都很清楚你的许多指标是如何逐步达到你的最终目标的。但是我们的数据不太密集的利益相关者通常不同意我们的理解;他们不住在这里的荒草里。

我知道,当我抛出类似于“处理流失率下降了”“平均交易利润率上升了”这样的说法时,我的大多数队友都会睁一只眼闭一只眼——没有我们的帮助,他们通常不知道为什么这些事情对他们和我们的底线如此重要。老实说,这些指标在孤立的情况下并不令人兴奋。

摇钱树如何确保相互理解。图片作者。

创建对齐

大多数“数据人”可能会想到几个可以改进几个指标的项目。但是在哪个最重要的问题上,你和你的团队一致吗?你将如何团结你的团队支持以增长为中心的努力,而不是产品特性?

换句话说:为什么你的产品经理会选择 A/B 测试你的入职流程,而客户要求的功能有一长串呢?

与你的摇钱树保持一致。分离出基本的行为指标:通常是获取、转化、使用、保留。这些与内部基准、外部基准和您的直觉相比如何?

通过基准行为指标获得一致性。图片作者。

一旦你在最大的机会领域上达成一致,你的利益相关者将真正关心你的分析结果和建议付诸行动。

概括起来

如果你的保留率是同类中最好的,没有人会关心你的流失分析。

用一棵摇钱树绘制出你的度量标准,对行为度量标准进行基准测试,并为你与利益相关者的共同理解和一致而高兴。😌

为什么 Excel 是学习数据分析的最佳方式

原文:https://towardsdatascience.com/why-excel-is-the-best-way-to-learn-data-analytics-e3cd7018012b?source=collection_archive---------42-----------------------

信用:安德鲁·尼尔/Unsplash

它是可视化的,透明的,并且让事情变得简单。

我越深入分析领域,就越觉得 Excel 是一种教学和原型制作工具。是的,当然,Excel 有它的弱点——但是作为学习的媒介,它是无与伦比的。

原因如下:

它减少了认知开销

认知开销被描述为“为了理解或联系你正在看的东西,你的大脑必须进行多少逻辑连接或跳跃。”

分析学习之旅通常是这样的:

  1. 学习一种全新的统计技术。
  2. 学习如何使用全新的编码技术实现全新的技术
  3. 进步到更高级的统计和编码技术,却从未对基础知识感到真正的舒适。

学习分析的统计基础已经够难的了。学习这个同时学习如何编码会招致极高的认知开销。

现在,我确实相信通过编码实践分析有很大的好处。但是最好在掌握这些技能的同时,隔离这些技能集。

Excel 提供了学习统计技术的机会,同时不需要学习新的编程语言。这大大降低了认知开销。

信用:安德鲁·尼尔/Unsplash

这是一个可视化计算器

第一个面向大众市场的电子表格叫做visi calc——字面意思是可视化计算器。我经常认为这是电子表格最大的卖点之一。

特别是对初学者来说,编程语言就像一个“黑匣子”——输入神奇的单词,点击“play”,然后很快就有结果了。很有可能程序做对了,但是对于一个新手来说,打开引擎盖看看为什么会很难。

相比之下,Excel 可以让您观察分析过程中的每一步。它可以让你直观地计算和重新计算。

眼见为实,对吗?

你不能走捷径

像 R 和 Python 这样的开源工具让您可以访问各种各样的包,这通常意味着您不必“从零开始”使用基本功能。

虽然有用于分析的 Excel 加载项,但其中许多都很昂贵。不过没关系!事实上,离开了 Excel 的基本构件,就有更多的机会面对面地了解正在构建的东西。

在 Excel 中,我们不能总是依赖外部包来为我们进行分析。我们必须靠自己的力量到达那里。

它迫使你变得敏捷

数据分析中的一个诱惑是首先建立最复杂的可能模型,然后反向工作找到有用的东西。最好反过来:从最小可行产品开始,从那里迭代。

在 Excel 中构建一个复杂的模型比在 Python 中要困难得多——当我们需要复杂的模型时,这是一个限制——但是作为一个原型开发工具,这很好,因为它迫使我们从小处着手。

我们不是在这里生产模型

我只是强调了在 Excel 中学习分析的一些好处。你能想到其他人吗?或者你不相信?

在 Excel 中进行分析的最大反对意见之一是它可能容易出错并且难以重现。

这是绝对正确的, 但我们只是在这里学习。我们不是在生产模型。

不要因为 Excel 作为快速、可重复的分析工作流的缺点而放弃它作为教学工具的能力。

在 Excel 中学习分析:下一步是什么?

通过在 Excel 中进行实验,我学到了比其他工具更多的关于统计和分析的知识,我希望这种方法也能为你所用。

如果您想了解 Excel 对您的学习有什么帮助,请查看我在 MS Excel 多伦多免费在线会议上的演示,我将在那里演示 Excel 中的重要统计概念。 在此了解更多

对于演示 Excel 分析的大师班,请查看 John Foreman 的书 Data Smart:使用数据科学将信息转化为洞察力。这本书使用简单的电子表格来介绍许多人只能通过编码来实现的算法。

你更喜欢如何学习统计和分析?你看到使用 Excel 的其他优点或缺点了吗?在评论里说吧。

原载于 2020 年 8 月 2 日https://georgejmount.com

Excel 用户为什么需要学习 Python

原文:https://towardsdatascience.com/why-excel-users-need-to-learn-python-543d74a13008?source=collection_archive---------28-----------------------

面向 Excel 用户的 Python

如果你已经到了 Excel 无法再处理你扔给它的东西的地步,那么你可能需要开始考虑 Python 了

我喜欢微软的 Excel。它(几乎)是我的数据分析工具库中最有价值的工具。嗯,差不多了。但是,尽管 Excel 功能强大,但很多时候我希望自己能做得更多,尤其是当我达到 Excel 的“极限”时——如果您每天都使用 Excel,您会注意到 Excel 的许多局限性很容易成为您的眼中钉。

我在这里不是要让 Excel 看起来很糟糕,不,Excel 仍然是最流行的数据操作工具——尽管规模有限。如果您使用 Excel 进行简单的数据分析和简单的仪表板报告,您可以轻松应对,没有任何顾虑。但是,如果你已经到了这样一个地步,你希望你可以自动化你的报告,以更好的速度和更少的阻力操纵大得多的数据集,或者执行更强大的计算,那么你很可能应该继续读下去。

Python 不受大小限制

Excel 可以处理超过 100 万行(具体是 1,048,576 行)。但是,当超过 10,000 行时,您会注意到工作簿开始明显变慢。用更多的工作表尝试这种方法,你肯定会遇到令人讨厌的不稳定的工作簿崩溃。

然而,Python 可以毫不费力地处理数百万行,你只受到你的 PC 计算能力的限制。

Python 不受内存的限制

遗憾的是,像 Excel 中的数组公式(CSE)这样的内存密集型计算很容易导致工作簿崩溃。微软通过 power tools (PowerQuery、PowerPivot、PowerBI 等)进行了许多改进,但内存限制并没有消失。另一方面,使用 numpy 和 pandas 等库的 Python 可以毫不费力地处理非常复杂的计算。

Python 没有集成限制

没有任何数据分析工具比 Python 具有更强的集成能力。你可以连接到 CSV 文件,HTML 网页,SQL 数据库,甚至 NoSQL 数据库。开发人员不断编写更高效的工具和库,将他们的应用程序与 Python 集成在一起

遗憾的是,Excel 无法实现自动化

Excel 不是为自动化任务而设计的,所以要求 Excel 自动化是不公平的。使用任务调度工具,Excel 用户已经能够执行入门级的自动化,但这在很大程度上取决于用户 PC 中 Excel 的可用性。然而,Python 自动化任务的能力是无限的。您不必每周打开一个文件来运行您的分析,然后将结果附加到要发送的电子邮件中,您只需使用 Python 来自动化此工作流,并完全消除流程中的人工交互需求,剩下唯一需要的操作就是提供用于分析的源文档。

跨平台能力

您是否遇到过因为在 Windows 机器上进行分析而导致工作表中的一些公式无法在 Mac 上运行的问题?这在 Microsoft Excel 中很常见,但在 Python 中很少见。从一个版本到下一个版本,库可能有不推荐使用的函数(显然,所有软件升级都是如此),但是跨平台兼容性不会影响 Python 中的数据分析

开源社区和支持

Python 是完全免费和开源的。无需许可费用、无需续订、无需财务承诺即可保持您的数据分析项目正常运行。有了大规模的社区支持,如果你遇到任何麻烦,你几乎不会被卡住。有很多资源可以让你轻松获得挑战的解决方案(Python 文档、堆栈溢出、Medium 等)

那么我应该抛弃 Excel 吗?

不,你不需要!像 pandas 这样的 Python 库被设计成可以轻松地将数据从 Excel 导入 Python,然后再导入 Excel。因此,您可以使用 Python 连接所有这些源工作簿进行分析,然后将您的分析结果导出回 Excel 以呈现给管理层,而不是尝试在 Excel 中创建“主表”来保存数百个源工作簿。有了 Python 的知识,您可以增强您的 Excel 分析和报告

照片致谢—作者

怎样才能开始学习 Python?

学习 python 就像安装 Python 和阅读文档一样简单。我承认这可能需要一些时间来适应,所以你可以在 Twitter (@kcemenike)、Github(https://github.com/kcemenike)上联系,或者你可以在 丨t丨e丨l丨e丨g丨r丨a丨m丨s丨(https://t.me/PyDataCo)上参加#CodeAlong 初学者会议

Kelechi EMENIKE 是 Python 的传播者和数据战略家。您可以在 丨t丨e丨l丨e丨g丨r丨a丨m丨s丨(https://t.me/pydataco)上参加他的现场初学者#CodeAlong 课程

为什么专注对您的数据科学之旅至关重要

原文:https://towardsdatascience.com/why-focus-is-key-for-your-data-science-journey-b62715b2a1c?source=collection_archive---------51-----------------------

以及它如何节省您进入该领域的时间

照片由德鲁·格拉汉姆Unsplash 上拍摄

数据科学家大卫·罗宾逊曾说过如下名言:

"当你已经写了相同的代码 3 次,写一个函数."

“当你亲自给了同样的建议三次后,写一篇博文。”

第一个引语是你应该很快采用的,但是这篇文章的重点(字面上)是第二个引语。我最近写了一篇文章分享我在数据科学旅程中的一些技巧。在这篇文章中,我想与你分享我自那篇文章以来一直建议的主题,聚焦。

为什么专注很重要?

尼古拉斯·皮卡德在 Unsplash 上拍摄的照片

如果你沿着这张蜘蛛网上的线走,你可能会在许多不同的交叉点上结束。

照片由 Deb DowdUnsplash 上拍摄

您也可以选择多条路径到达同一个交叉点。但是有一条最优路径。一条更短的路。数据科学领域也是如此。仅仅是子字段的数量就非常庞大。如果你包含了项目所需要的主题知识,如果它们不在同一个领域,那就更是如此了。如果能很快感到势不可挡…

照片由克里斯蒂安·埃尔富特Unsplash 上拍摄

我花了 2.5 年时间才得到数据科学的职位。如果你没有读过之前的文章,这里有一些关于我的情况的背景:

  1. 我是一个蹒跚学步的孩子的丈夫和父亲。
  2. 我是一名高中老师,每天开车上下班要花一个小时。
  3. 我每天只有一个小时左右的时间致力于数据科学,因为我的妻子支持我的职业转变。

刚开始没重点。由于我没有太多的编程背景,所以我从概述基础开始。如果你没有数学和/或编码方面的背景,我还是会推荐你这么做。后来,当这个领域的一切都如此迷人,我欣然接受了我能与之互动的一切时,问题就来了。但它阻止我掌握任何东西,引导我进入那句经典的话…

"万事通,无所不能。"

最终,我感到难以置信的不知所措。从那以后,有一段时间我关机,几个星期什么都不练。

本·韦伯Unsplash 上拍照

那你怎么能避免我的错误呢?

有几个方法你可以采用,我应该早点考虑:

  1. 专注于数据科学的特定分支,如自然语言处理或数据可视化。
  2. 专注于一个领域,围绕该领域的项目塑造您的数据科学技能。

在我得到一些帮助来摆脱我的窠臼后,我采取了第二种方法。利用我的教育背景,我专注于从教师的角度解决与教育领域相关的问题。这让我想到:

  1. 根据学生的学术需求影响雇佣决定。
  2. 在一份简明的报告中概述了我们学校的表现。
  3. 使用 T4 贝叶斯版本的 T 检验来确定我的复习课是否提高了学生的理解能力,以及提高了多少。
  4. 分析州考试问题以指导课程决策。

我把这些项目放在我的 LinkedIn 个人资料上。他们引起了我意想不到的人的注意。这引起了校外顾问的注意,他最终提供了很多未来的帮助。它引起了脸书一名相关数据科学/教育职位招聘人员的注意,该职位起薪超过 13 万美元。讨论我在这些项目上的经历让我轻松通过了第一轮面试。

自从我变得更加专注后,我的面试率和出镜率很快就提高了。再一次,考虑到我的情况,这不是最快的,但与我之前的速度相比,这是一个巨大的进步。每次面试都改善了我展示自己的方式。直到最后…

布鲁斯·马斯在 Unsplash 上的照片

我成功了!我得到了我梦寐以求的角色,并进入了数据科学领域!

在我写这篇文章的时候,距离这个新的职业生涯开始还不到三个月,这太不可思议了!与我一起工作的人都很棒,我不断得到反馈,我的工作产生了直接和/或未来的影响,我因此得到了表扬(作为一名教师,你不会经常得到这样的表扬,所以这对我来说很重要……而且我的内心还是一个孩子)。

如果你还在寻找你的职业,要知道这不是不可能的。你能做到的!尽快专注于自己想在这个领域做的事情就好了。如果你还在尝试一点,那也没关系。但是如果可能的话,我建议尽快完成。如果你是一个家长或有类似的情况,我知道这将需要更长的时间,但你会到达那里。

当你真的到达那里,你会反思你的旅程。你会回顾这一切的好与坏。最后,你将转向你新事业的未来,并准备好开始!

出席Unsplash 上的照片

感谢阅读!如果你觉得这篇文章很有帮助,并且你还没有从我的旅程中找到一些建议,你可以在下面阅读它们:

[## 我的数据科学之旅给你的 11 个建议。

帮助您更成功地进入数据科学的提示。

towardsdatascience.com](/11-tips-for-you-from-my-data-science-journey-df884faa9f3)

此外,如果你是带着数学背景进入这个领域的,并且觉得你需要帮助组织一个学习计划,看看我在下面这篇文章中的建议:

[## 数学背景的潜在数据科学基础

帮助您开始学习数据科学的课程指南

towardsdatascience.com](/a-potential-data-science-foundation-for-math-backgrounds-188b03b9f1ff)

你可以在这里关注我,或者在 LinkedinTwitter 上与我联系。对 Twitter 上的 DM 开放。

直到下一次,

约翰·德杰苏斯

为什么获得数据科学硕士学位是有史以来最好的决定!

原文:https://towardsdatascience.com/why-getting-a-masters-in-data-science-was-the-best-decision-ever-9f49371f1817?source=collection_archive---------31-----------------------

Unsplash 上由 Austin Distel 拍摄的照片

MSDS 如何帮助我获得数据科学工作

2018 年 5 月,我本科毕业,电气工程专业。尽管这个项目很严谨,概念也很丰富,但我并不认为这是我的正确道路。当我回顾大学的四年时光时,我回忆起我参与的所有研究实验室和我参与的各种项目。我意识到我最喜欢的时刻是在电脑前,用 Python、C++或 MATLAB 编程,筛选收集到的所有数据。当时机器学习和人工智能风靡一时。当我在研究人工智能、人工智能和数据科学的主题时,我可以看到自己在这个领域工作。

作为一名工程师,我需要知道系统中的每个组件是如何工作的。我需要知道优势、风险和各种用例。当我在网上寻找学习数据科学和机器学习的资源时,他们提供的只是一个为期 3 周到 3 个月的快速课程,只是介绍用 Python 或 r 实现 ML 算法的方法。很少强调这些系统背后的实际数学和设计。正是在这一点上,我决定回到学术机构,以正确的方式学习数据科学。我报名参加了华盛顿特区乔治华盛顿大学的两年制数据科学硕士项目,因为它有机会获得联邦数据科学的机会,而且它重视神经网络工程和设计。

我的两年课程

我的数据科学课程

正如你在上面看到的,每个学期都建立在前一个学期的基础上。前两个学期花了大部分时间教学生如何争论数据、操纵数据和建模。数据挖掘、数据仓库和数据可视化等课程都非常关注这一点。其他课程,如应用统计学、模式识别、高级时间序列和机器学习,都非常数学化,并确保每个学生在进入编程讲座之前能够设计和描述一个没有代码的模型。

在我看来,第二年的重点是“有趣的东西”。此时,学生接触到了 TensorFlow、PyTorch、Keras、Caffe、OpenCV 和 NLTK 等框架。使用来自 AWS、GCP 或 Azure 的云实例,学生们学习了如何构建、改进和部署复杂的神经网络、CNN、rnn、LSTMs 和自动编码器。

赢得我的 MSDS 的关键收获:

  1. 公司想要拥有研究生学位的数据科学家 我们都遇到过终极的第 22 条军规:当大多数入门级的工作要求之前有长达 3 年的工作经验时,你就有了入门的机会。根据 Glassdoor 的说法,大多数公司都在“寻找拥有 5-7 年行业经验和/或硕士或博士学位的候选人”。如今,公司愿意用项目来代替行业经验。获得数据科学硕士学位的好处在于能够一举两得。经过 2-3 年的 MSDS 项目,你将获得一个硕士学位和大约 4-5 个原创的、经过深思熟虑的项目,突出了你在数据科学方面的进步。
  2. 投资你的未来你不需要告诉我读研不便宜。相信我,我知道。然而,我知道如果我想在数据科学领域有足够的竞争力,我需要回到学校。这是一个艰难的决定,当时我没有工作。我在一家咖啡店工作,是一名带薪的研究生研究助理。其他的空闲时间都用来上课了。最终,我在一家顶级咨询公司找到了一份梦寐以求的数据科学工作,这一切都得到了回报。每个人都想在几乎没有风险的情况下获得高回报,但随着竞争逐年加剧,人们需要愿意花费时间和金钱来获得竞争优势。
  3. 将科学放回数据科学 根据我测试各种数据科学证书和在线课程的经验,许多讲师专注于教授学生“简单的方法”。通常不考虑看科学期刊、先进的数学概念或研究技术。当我在 MSDS 项目的时候,我有一个非常好的机会和我的教授一起做一个研究项目,并在一份科学杂志上发表论文。直到我开始工作,我才注意到一个 ML 项目是多么基于科学方法。这一切都是关于提出一个假设,测试它,并调整优化。

值得吗?

总之,绝对!现在需要数据科学家,但公司希望有高水平的编程、商业和领导技能。我参加了一个为期 2 年的项目,在那里我只专注于数据分析、机器学习和深度学习,这将我塑造成了今天的数据科学家。我不知道未来会发生什么,但我确信我有强大的基础来应对数据世界的任何挑战。

为什么好的代码不需要注释

原文:https://towardsdatascience.com/why-good-codes-dont-need-comments-92f58de19ad2?source=collection_archive---------23-----------------------

糟糕的代码到处都是

Unsplash 上由 Max Duzij 拍照

我强烈建议您仔细看看下面两段代码

你喜欢哪一个?乍看之下,前者似乎做了很好的工作,清楚地描述了它的每一个操作。然而,这些指令是完全多余和过时的。它们只会给读者增加另一层困惑。糟糕的评论是命名不当的变量和编程技巧不足的借口。

如果是你写的,下面是你的同事在评估上面的代码时会想到的

  • 他为什么要大声说出来?他认为他的代码阅读器是弱智吗?
  • 这行评论有什么意义?有什么隐藏的意思吗?
  • 为什么他仍然用单个字符作为变量的名字?人们在哪一年练习这个?

你不希望你的同事不知所措,试图通过你的评论来解释你的意图。通过解释程序中的所有小细节,你认为你是在帮他们的忙,但他们所理解的恰恰相反。

布鲁斯·马尔斯在 Unsplash 上拍摄的照片

现在,再仔细看看第二段代码。你觉得代码本身就能说明问题吗?不需要解释。

每个程序员都能写出机器能理解的代码,一个好的程序员写出人类能理解的代码。好的代码不需要注释,这里有五个原因。

不必要的评论会让人分心

写程序的时候,你应该专注于算法、数据结构、性能,不要写那些没有必要的完美注释。

您的代码片段是一个流程。它从变量声明到函数定义,最后是核心执行。不要用除了代码本身没有任何其他解释的注释来打断这个流程。

好的代码有节奏,而平庸的代码有很多停顿

当其他程序员阅读你的作品时,他们倾向于将他们的思想插入到你的流程中。持续被多余的评论打断会让人分心。

注释应该在两个代码流之间建立联系,而不是将单个代码流分割成碎片。好的评论称赞你的代码,而不好的评论会让读者偏离主题。

在发表任何评论之前,问问你自己它是否有任何作用,而不是分散人们对你的程序的理解。好的代码有节奏,而平庸的代码有很多停顿。

冲动的评论根源于源代码

代码库是人们合作的地方。它有许多版本,每个程序员都有平等的机会贡献他们的工作。你不想在公开的源代码中留下一个冲动的评论。它可能会被遗忘,被深埋在主要组件中。

一条不好的评论会让你的同事甚至未来的你变得难以理解和困惑。

想象一下三年前有人留下了这样的评论

你有足够的信心删除那个评论吗?已经生产三年了。你的作品已经一团糟了,这个评论会一直在那里。它是永久的,永恒的,永恒的。

注释将植根于您的源代码。把它放在那里的程序员可能没有恶意,他只是忘记了以后需要做什么。三年后,由于他已经离开了公司,没有人会知道最初的动机是什么。

帮自己和他人一个忙,不要在代码中留下那样的注释。它笨拙、草率,而且不切实际。万一你还不确定该怎么做,不要着急。

从短期来看,补丁可以及时投入生产,但从长远来看,它把代码库变成了私人笔记。

通过你的代码交流,而不是你的评论

听起来很令人惊讶,你的程序有两个不同的通信目的:一个是与机器通信,另一个是与人类通信。机器完全理解你的指令,但对人类来说并非如此。没有面对面或直接的交谈,误解随时都可能发生。

你必须了解你的代码的受众。他们不是五年级学生。他们是你的同龄人,你的同事,或者是工作时坐在你旁边的人。他们不需要知道你为什么选择这样命名你的变量的每一个微小的原因,或者你如何创建这个程序的两页的故事。

照片由米米·蒂安Unsplash 上拍摄

你应该开门见山。他们只想知道你的程序是如何工作的,如何使用它。直接、清晰、简洁。良好的沟通是不需要沟通的。

写评论是拖延的一种形式

这就是我,经过一个小时的编码

这是我,在摆脱写不好的评论之后

人类的大脑天生懒惰。它倾向于用最不吓人的方式来完成任务。

开始编写程序最令人畏惧的事情是设置最初的几行。写一个长而详细的注释来解释算法是如何工作的,可能会给你的大脑一个信号,表明你正在实现某个目标。在你的评论中形成和选择正确的词语是浪费时间。

完美主义扼杀生产力。你的第一个程序可能会出现混乱,但这完全没关系。没有人会阅读你的代码初稿。

您可能想要多次迭代以产生最终版本。你花时间写世界上最好的评论是在欺骗自己。你以为你在工作,但事实上,你在拖延。

注释是开始编程的一种反生产力的方式。
先打草稿,后编辑。

差评误导读者

我们谈到了分心,有时甚至更糟。有些评论比其他评论更有害。

你的代码审查员不知道如何读心。他们可以自由理解代码,这可能与你的不同。

当你和你的合作者不在同一个页面上时,程序会有一个大的转折。它可能被用来做一些最初没有被设计的事情。

当交流有问题时,一个不好的评论就会导致误解。结果可能会破坏当前版本,要求临时修复,或者重写整个逻辑。

没有人理解没有人有不好的评论。只有代码才会发光,这才是你应该专注的事情。

额外收获:真实存在的有趣评论

我个人认为源代码中最有趣的注释

/*
 * Dear Maintainer
 *
 * Once you are done trying to ‘optimize’ this routine,
 * and you have realized what a terrible mistake that was,
 * please increment the following counter as a warning
 * to the next guy.
 *
 * total_hours_wasted_here = 73
 *
 * undeclared variable, error on line 0
 *
 */
Exception up = new Exception("Something is really wrong.");
throw up;  //ha ha
// I dedicate all this code, all my work, to my wife, Darlene, who will 
// have to support me and our three children and the dog once it gets 
// released into the public.
// drunk, fix later
// Magic. Do not touch.
// They made me write it, against my will.
public boolean isDirty() {
    //Why do you always go out and
    return dirty;
}

你可以点击查看完整列表

结论

不用说,我已经表明了避免多余评论的观点。争取简洁、紧凑和直截了当的编程。编码快乐!

为什么梯度下降和正规方程不利于线性回归

原文:https://towardsdatascience.com/why-gradient-descent-and-normal-equation-are-bad-for-linear-regression-928f8b32fa4f?source=collection_archive---------14-----------------------

了解这个流行算法的实际应用

在实践中,线性回归不是用典型的教程方法完成的!(来源)

简介

大多数 ML 课程从线性回归和梯度下降和/或这个问题的正规方程开始。可能最知名的吴恩达的课程也介绍了线性回归作为一种非常基础的机器学习算法,以及如何使用梯度下降和正规方程方法求解。不幸的是,通常情况下,这些都是非常糟糕的方法。事实上,如果你曾经使用过 Scikit-learn 的LinearRegression,你就使用过替代方法!

问题提纲

在线性回归中,我们必须估计参数θ——回归项线性组合的系数(其中x_0 = 1theta_0是自由项/偏差):

我们通过最小化残差平方和(RSS)来做到这一点,即模型输出和真实值之间的平均平方差:

梯度下降法

梯度下降是一种非常通用的函数优化方法,它迭代地逼近函数的局部最小值。由于线性回归的损失函数是二次的,它也是凸的,即存在唯一的局部和全局最小值。我们通过采取基于负梯度和选择的学习速率α的步骤来接近它。

为什么这种方法在大多数情况下是不好的?主要原因是:

  1. 很慢 —迭代逼近最小值需要相当多的时间,尤其是计算梯度。虽然有加速这一过程的方法(随机梯度下降、并行计算、使用其他梯度方法),但对于一般的凸优化来说,这是一种固有的缓慢算法。
  2. 它不会精确地到达最小值 —使用梯度下降,您肯定不会到达精确的最小值,无论是局部最小值还是全局最小值。那是因为你只和梯度和学习率α一样精确。如果你想要一个真正精确的解决方案,这可能是一个相当大的问题。
  3. 它引入了新的超参数 alpha —你必须优化学习率 alpha,这是速度(更快地接近最小值)和准确性(更接近最小值)之间的权衡。虽然您可以使用自适应学习率,但它更复杂,并且仍然会引入新的超参数。

那么为什么我们还要为线性回归的梯度下降而烦恼呢?有两个主要原因:

  1. 教育目的 —由于线性回归如此简单,因此很容易用这种算法引入梯度下降的概念。虽然它在实践中不适合这个特定的目的,但它对神经网络非常重要。这很可能是为什么吴恩达在他的课程中选择了这种方式,而其他人都盲目跟随,没有明确指出你在实践中不应该这样做。
  2. 超大数据 —如果您有大量数据,并且必须使用并行和/或分布式计算,梯度方法非常容易使用。您只需将数据分成块,发送到不同的机器,并在许多核心/机器上计算梯度元素。大多数情况下,虽然你没有这样的需求或计算能力。

正规方程法

二次成本函数最初被选择用于线性回归,因为它具有良好的数学性质。它很容易使用,我们能够得到一个封闭形式的解决方案,即θ参数的数学公式——一个正规方程。在下面的推导中,我们去掉了1/2n,因为在推导中它无论如何都会消失。

我们得到一个线性方程组,最后得到正规方程:

为什么这种方法也不好呢?主要原因是:

  1. 它很慢——有一个简短、好的等式并不意味着计算它很快。矩阵乘法是 O(n),求逆也是 O(n)。对于中等规模的数据集,这实际上比梯度下降要慢。
  2. 数值不稳定 —矩阵乘法X^T * X求矩阵的条件数的平方,后面我们还要把结果再乘以X^T。这可能会使结果极不稳定,这也是为什么这种方法几乎从不在笔和纸线性代数或统计课程之外使用的主要原因。即使与乔莱斯基分解和解也无法挽救这一局面。

这种方法绝不应该在机器学习的实践中使用。这对于数学分析来说很好,但仅此而已。然而,它已经成为 Scikit-learn 和其他库实际使用的方法的基础。

那么大家都用什么呢?

正如我们在 ML 课程中看到的方法的缺点一样,让我们看看在实践中使用了什么。在 Scikit-learn LinearRegression中我们可以看到:

所以 Scikit-learn 并不关心它自己的实现,相反,它只是使用 Scipy。在scipy.linalg.lstsq中,我们可以看到这个库甚至没有使用自己的实现,而是使用 LAPACK:

最后,我们得出英特尔 LAPACK 文档中的gelsdgelsygelss条目:

这 3 种方法中的 2 种使用奇异值分解(SVD ),这是数值方法和机器学习中非常重要的算法。你可能在 NLP 或推荐系统中听说过它,它被用于降维。事实证明,它也用于实际的线性回归,为计算线性回归核心的最小二乘问题提供了一种相当快速且非常精确的方法。

奇异值分解和摩尔-彭罗斯伪逆

如果我们在正常方程之前停止一步,我们得到一个常规的最小二乘问题:

由于X几乎从来不是正方形(通常我们的样本比特征多,即“高瘦”矩阵X,这个方程没有精确解。相反,我们使用最小平方近似,即θ向量尽可能接近欧几里得距离(L2 范数)的解:

这个问题(OLS,普通最小二乘法)可以用很多方法解决,但事实证明,我们有一个非常有用的定理来帮助我们:

Moore-Penrose 伪逆是对任意矩阵的矩阵逆近似,甚至不是正方形矩阵!实际上,它是通过奇异值分解来计算的。我们将矩阵X分解成 3 个矩阵的乘积:

摩尔-彭罗斯伪逆则定义为:

如您所见,如果我们有 SVD,计算伪逆是一个非常简单的操作,因为 sigma 矩阵是对角的。

最后,我们得出一个非常实用的线性回归系数向量公式:

这是 Scikit-learn、Scipy、Numpy 和许多其他软件包在实践中使用的。当然,有一些优化可以提高性能,如分而治之的方法来加快 SVD 计算(默认情况下由 Scikit-learn 和 Scipy 使用),但这些更多的是实现细节。主要思想仍然是——使用 SVD 和 Moore-Penrose 伪逆。

这种方法的优点是:

  1. 相当快 —虽然 SVD 的计算成本很高,但它还是相当快。多年的研究也促进了现代实现的速度,允许分解的并行化和分布式计算。
  2. 非常稳定的数值 —使用奇异值分解时,计算的数值稳定性不是问题。更重要的是,它允许我们对结果非常精确。
  3. 精确地到达全局最小值 —这种方法几乎和机器 epsilon 一样精确,所以我们真的有可能得到最好的解决方案。

但是要小心——这篇文章是关于线性回归的,不是关于像 LASSO 或 ElasticNet 这样的正则化版本!虽然这种方法对于线性回归很有效,但是对于正则化,我们没有好的最小二乘最小化,必须使用例如坐标下降。

总结

在这篇文章中,你已经了解了在 Scikit-learn LinearRegression的面具下到底发生了什么。虽然梯度下降和正规方程有其应用(教育和数学性质),但在实践中,我们使用具有 SVD 的 Moore-Penrose 伪逆来获得线性回归模型的准确预测。

来源:

告别地理空间分析热图

原文:https://towardsdatascience.com/why-heatmaps-dont-work-for-experimenting-geospatially-on-ground-75fabbe9b153?source=collection_archive---------37-----------------------

我们能从基于网络的实验中学到什么?

来源:Kepler.gl

“我们在亚马逊的成功取决于我们每年、每月、每周、每天进行多少次实验。”——杰夫·贝索斯

网络实验

退一步说,网络分析在过去十年中的发展方式令人着迷!

网络分析工具已经使用户和产品分析大众化,因此使营销人员能够跟踪他们的网络应用程序的执行情况——比如用户在哪里搅动,漏斗看起来像什么,如何优化定价页面等等。

然后,就到了 A/B 测试工具时代。一旦你知道某些东西没有被优化,这些实验工具可以非常容易和快速地形成假设,做出改变,对一组用户进行测试,跟踪他们的行为,并随着时间的推移自动执行一些策略。

这使得营销人员和设计师可以测试每一个变化,从按钮的大小和颜色到促销语言!

这与创业公司在开发产品时宣扬的理念完全相同:形成一个假设,建立一个 MVP,然后看看用户如何使用它来迭代和发展!

A/B 测试。来源:尼尔·帕特尔

地面实验

如果说地面世界的实验和快速迭代,我们甚至还没有开始这样思考!我们对现实世界和地面运动知之甚少。

鉴于我们的“线下”世界如此混乱和多变(抗议、下雨、当地事件、事故、交通),这给了我们更多的理由去了解哪些策略在什么时间、什么地点有效!

网络分析帮助我们了解每个用户的行为以及他们的品味和偏好!

但是,了解我们的地面现实要求我们了解我们的用户(需求)、我们的地面合作伙伴(供应),以及位置的特征(富裕程度、价格弹性类型)。

例如,假设在任何时间点,需求和供给都不匹配。深入了解幕后发生的事情是有意义的:

  • 低价值客户和供应之间是否存在不匹配?
  • 是因为合作伙伴被激励去的区域是高流量区域吗?
  • 是因为合作伙伴很闲但还是不接单吗?
  • 是因为店铺此刻负荷过重,无法迎合更多需求吗?

资料来源:优步

基础现实是指您业务的所有不同方面(包括位置和时间)如何相互作用,在某些情况下还与外部事件(天气、当地事件、交通)相互作用。

是时候开始对我们的实验进行“空间”思考了

假设我们需要在地面部署一个激增定价模块。这种激增不仅在时间和位置上是动态的,而且在该位置的用户上也是动态的!

如果你想了解更多关于 surge 如何使用供需分析的信息,请查看以下内容:

[## 使用地理空间数据的实时供求差距

分析这些差距是弥补差距和优化机组经济性的第一步

towardsdatascience.com](/supply-demand-gaps-in-real-time-using-geospatial-data-b125a87119c1)

举个例子,在一个价格敏感的地区,一波 3 倍的上涨表现将与在一个更富裕的地区完全不同。

在此之前,即使是考虑试验、自动化或预测,我们也需要首先分析正在发生的事情,并检测瓶颈。

来源:Kepler.gl

㈠监测

监控意味着实时跟踪和了解现场发生的情况,以便做出更具战术性的决策。

对于任何一种公司来说,监控都非常重要,因为这个世界本身就是一个不断变化的世界,需求和供给都是动态的。

它使我们能够获得正在发生的事情的实时反馈,检测异常情况并采取行动!

例如,假设某天晚上 x 区的需求下降到 50%以下,或者 y 区 60%的骑手比平均水平更空闲。正是在这些时刻,你需要不断获得信息,以便你可以采取措施。

㈡检测

通过要求司机移动和/或发送营销促销信息,立即解决你的供需缺口,在短期内是有效的。

但是,如果我们知道每周四下午 4 点在 x 区,我们的用户会因为乘车不可用而下车。你必须调整你的策略,使之适合每个周四晚上。

同样,在周末晚上,哪些领域的订单交付时间更长?我的合作伙伴在哪些领域堵车时间最长?它在时间、合作伙伴类型或地点方面有什么模式吗?

虽然监控在战术决策上很有效,但一次又一次地检测或发现问题的模式,有利于做出战略决策。

来源:Kepler.gl

㈢特征分析

今天,我们的想象力仅限于根据用户执行的操作创建不同种类的用户简档。例如,“将商品放入购物车但没有预订的用户”或“伦敦用户”或“音乐爱好者”。

但是,如何根据需求和供应在该位置的表现来创建位置配置文件呢?

例如,假设我们创建了一个名为“高价值早餐订单区域”的配置文件。在这些档案的基础上,我们可以采取行动,进行实验并跟踪发生了什么!

富裕地区、办公区、住宅区、周末聚会场所是您可以创建的配置文件的一些示例。如果你知道人们每天在工作日的早上和晚上预定什么样的车,那么它可能是一个办公区。

(四)跑步动作

这个想法是,当你已经创建了一套配置文件,你怎么能为他们运行非常语境化的策略?在网络世界中,你向一个非常活跃的用户发送的推广和向一个休眠用户发送的推广是不同的。

同样,在办公区,晚上 8 点后给乘客高额奖励也是没有意义的。

什么样的促销、SLA、激增、激励、折扣、送货费在不同的地区和不同的地方对你的企业起作用可能完全不同。

㈤测试和迭代

学习的唯一方法是形成明智的假设,测试并看看什么是可行的。

我们也相信给予运营和供应团队调整和迭代的能力,因为他们对“他们的”领域的行为有最大限度的了解。他们应该能够将头脑中的知识(通常称为“抑制”数据)添加到所有的实验和策略中。

一旦他们确定了什么是有效的,就将它自动化,并让组织中的每个人都可以利用这些知识!

向优秀的旧热图说再见

来源:微软

为什么我们不喜欢热图?

因为热图只是视觉表现,并没有量化区域。此外,它们违背了这些反馈回路的目的。

因为你不知道“什么”是表现不好的领域,所以很难做出决定。在现场,我们通过使用六边形网格系统来解决这个问题。

[## 空间建模花絮:蜂巢还是渔网?

为什么我们在现场喜欢六边形网格!

towardsdatascience.com](/spatial-modelling-tidbits-honeycomb-or-fishnets-7f0b19273aab)

许多公司通过成功进行网络分析,增加了用户的获取、激活、转化和保留。在现场,我们正在创建通过地理空间分析和快速实验来提高单位经济性、每次交付成本和利用率的公司范例。

点击此处了解更多关于我们的信息:

[## 使用地理空间数据进行移动分析的产品

是什么让实时位置数据的分析与众不同?

towardsdatascience.com](/a-product-for-movement-analytics-using-geospatial-data-2aa95b18d693)

原贴 此处 。如果你想深入研究,请查看我们的 网站 或联系我在LinkedInTwitter上进行演示。

为什么&如何从机器学习预测中创建分位数| Python +代码

原文:https://towardsdatascience.com/why-how-to-create-quantiles-from-a-machine-learning-prediction-python-code-da9071622db2?source=collection_archive---------28-----------------------

将机器学习预测的输出除以分位数是应用商业策略的一种好方法——对熊猫函数 qcut,cut & IntervalIndex 的研究。|熊猫版:熊猫==1.1.0

照片由詹姆斯·L·WUnsplash 上拍摄

目录

  1. 为什么要创建分位数
  2. 使用的数据
  3. 在列车上创建分位数
  4. 对新数据应用分位数
  5. 结论

为什么要创建分位数

当我们建立一个涉及机器学习组件的项目时,我们使用指标(如 AUC、RMSE 等)来选择哪个模型最适合我们的数据。然后,我们使用 sklearn *predict()*函数来获取回归的值,或者使用 sklearn *predict_proba()*函数来获取观察值等于类的概率(1 表示二元分类)。共同点是,它返回一个必须用于业务策略的连续输出。

建立一个商业战略通常比“如果概率≥ x 就采取行动,否则什么都不做”更复杂,比“对于连续产出的每个可能值,采取不同的行动”更简单。这就是为什么创建分位数是有意义的。更具体地说,这里有两个与回归任务和二元分类任务相关的例子。

示例 1:假设我们在一家零售服装公司的市场部工作,目标是预测数据库中每个客户一年的消费金额。基于这一点,商业策略将是为 15%消费最多的客户提供私人销售渠道,为 15%至 40%的客户提供折扣,为 40%至 60%的客户提供免费运输,并为其余客户提供简讯。

例 2:假设我们在一家房屋租赁公司的收款部门工作,我们有客户延迟付款的数据库,目标是预测哪个客户在月底仍会延迟付款。此外,我们知道,如果我们什么都不做,这些客户中的 50%仍然会延迟。考虑到容量和成本,代理可以给 10%的人打电话,给 30%的人发电子邮件,给 20%的人发短信,剩下的 40%什么也不做。

因此,创建分位数可以将这些策略应用于分布的每个部分,并利用机器学习模型的附加值。

使用的数据

在这篇文章中,我将使用一个与体育赌博相关的数据集,目标是给定 45 个特征,对“赢与没赢”进行分类。我将数据集分为训练、验证和超时测试,其中超时测试是 2019/2020 赛季,有 732 个观察值。训练分布为 70%,验证为 30%,长度分别为 3262 和 1398。target = 1(赢)是 44.3%、44.28%和 43.44%,因此在不同的集合中很平衡。我使用 Catboost 库训练了一个梯度提升算法,每个数据集的 predict_proba 具有这样的分布:

从视觉上我们可以看到,概率的分布似乎是相同的,Kolmogorov-Smirnov 双样本检验证实了这一点。因此,我们可以创造我们的分位数。

小心!具有相同分布的假设是强制性的,如果不是这样,分位数就不会被一般化,商业策略就会失败。

在火车上创建分位数

在这个用例中,我选择将我的分布分成 7 个分位数(100/7 = 14.23%)。一种可能的直觉是在每个 14.23%处创建一个箱,但是在不均匀分布的情况下,我们将在末端有很少的观察值,并且几乎所有的观察值都在中间。

所以这个想法是,给定一个分布,我们希望在每个分位数上有相同数量的观察值。pandas 对于该任务的作用是*pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicated='raise’)*,其中 x 是一维数组或序列; q 是分位数的个数; labels 允许为每个分位数设置一个名称{例如:如果 q=3,则低—中—高},如果 labels=False 则返回分位数的整数; retbins=True 返回每个分位数的边界数组。

在下面的代码中,我们创建了特性“分位数”,而“边缘”是通过参数 retbins=True 获得的数组。“边缘”的值在区间[0.13653858;0.88398169]这是一个巨大的限制。的确,一个概率在[0;1]因此,在验证和测试数据集中完全有可能出现 y_proba = 0.094 或 y_proba = 0.925 的观察值。这就是为什么我修改了数组,将 0.13653858 的边界替换为-0.001(以便包含 0),将 0.88398169 的边界替换为 1,同时保留数组中其他分位数的边界。如果没有这种变化,y_proba = 0.094 或 0.925 的分位数的值将为 NaN。

此外,qcut 按升序将 0 值与 x 的最低分位数相关联,但在一些行业(如信用评分)中,它是按降序排列的,所以这就是为什么我对它进行了重新排序,以使 0 分位数代表最高概率分位数。

现在我们有了一个边界数组,让我们把它转换成 IntervalIndex。

IntervalIndex的关键特性是查找索引器应该返回索引器值所在的所有区间。FloatIndex是一个糟糕的替代品,因为浮点精度问题,还因为我不想用一个点来标记值。斯蒂芬·肖耶

我使用了熊猫*pandas.IntervalIndex.from_breaks(breaks, closed='right', name=None, copy=False, dtype=None)*的函数,其中 breaks 是之前定义的一维数组“ed”,closed =‘right’旨在表示区间的哪一部分是闭合的(right 意味着右边的值包含在区间中),而 dtype 是推断的格式(在我们的例子中我让 None,推断的格式是 float64)。

现在,可以在 pandas 函数*pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)*中使用区间索引对象。这里, x 是要 bin 的 1d 数组或序列, bins 是宁滨的标准,可以取整数、标量序列或 IntervalIndex标签包含 _ 最低精度排序如果 bin 为 IntervalIndex 则忽略。在下面的例子中,我创建了一个新的特征“分位数间隔”,它基于 IntervalIndex 应用 y_proba 的切割。训练数据集如下图 1 所示。

为了完成分位数的创建,我将分位数值存储在一个名为 dict_inter_quantile 的数据帧中(见图 2)及其相关的 IntervalIndex。

图 1。训练数据集使用条柱切割=Interval_Index

图 2。分位数数据帧

现在已经解释了在训练集上创建分位数的方法,让我们看看如何将它们应用于新数据,比如验证、测试和任何新数据。

对新数据应用分位数

这一部分非常简单,因为所有的工作都已经完成了。因此,我们只需使用 cut 函数,以获得概率的 IntervalIndex,并将数据集连接到 dict_inter_quantile,以获得分位数的值。

提供图 3 输出的测试集(验证或任何新数据的相同过程)的例子。

图 3。基于训练集的 IntervalIndex 的具有关联分位数& quantile_interval 的测试数据集。

现在我们已经有了每个新观察值的预测概率的相关分位数,我们可以验证分位数的分布是否在验证和测试中与训练一样均匀分布。

图 4。训练值计数-验证-测试数据集

那又怎样? 上面的图 4 显示了训练-验证-测试之间的分位数的观察百分比非常相似,这意味着数据没有移动,因此我们可以将训练数据集中的边界应用于测试数据集。此外,我们可以应用一种操作策略,如开始时的示例,我们可以检查 y = 1 在每个分位数中的百分比,以查看它是否按相同的顺序排列,和/或如果百分比在数据集之间相似,我们可以尝试改进分布的某些部分,…

结论

我们看到了为什么从预测中创建分位数与应用商业策略相关,如何从分布中创建分位数,以及如何在新的分布中使用分位数。只有当您的发行版相同时,这才有意义。你可以用 Kolmogorov-Smirnov 测试或更奇特的方法来检查它。

为什么以及如何使用 Bland-Altman 图进行 A/B 测试| Python +代码

原文:https://towardsdatascience.com/why-how-to-use-the-bland-altman-plot-for-a-b-testing-python-code-78712d28c362?source=collection_archive---------21-----------------------

最初在医学领域用于比较两种不同仪器提供的两种测量值,本文展示了为什么以及如何将其应用于 A/B 测试——关于 pyCompare 函数 blandAltman | pyCompare 的版本:pyCompare==1.5.1 的研究

照片由亚历克斯·布洛克Unsplash 上拍摄

目录

  1. 为什么用布兰德-奥特曼的剧情
  2. 使用的数据
  3. 布兰德-奥特曼剧情如何构建
  4. 如何解读 A/B 测试的 Bland-Altman 图
  5. 结论
  6. 参考文献

为什么要用布兰德-奥特曼的情节

Bland-Altman 图来自医疗行业,用于比较两种仪器的测量值。约翰·马丁·布兰德和道格拉斯·奥特曼的第一个目标是回答这个问题:

这两种测量方法足够接近吗?—奥特曼和布兰德[1]

如果是这样的话,这意味着如果你有两台仪器,其中一台是最先进的,成本很高,另一台便宜 10 倍,那么用最便宜的方法得到的结果是否可以与参考值相比,是否可以以足够的精度进行替换?例如,作为心电图的结果,20 美元的联网手表提供的心率足够准确吗?第二个目标是产生一种方法,使非统计人员能够容易地理解结果。

在分析中,A/B 测试(众所周知的冠军挑战者)是一种常用的测试方法,用于比较人口 A 和人口 B 的新行动/新治疗/新设计的结果。一旦我们有了测试结果,就必须对它们进行分析,并提交给一个主要由非统计人员组成的决策团队。这就是为什么 Bland-Altman 图是相关的,因为它将在一个图上比较 A/B 测试的结果与以可理解的方式显示的所有统计测量。

在他们的论文中,他们还说明了为什么相关系数、均值比较的统计检验和回归不适合决定两个测量值的一致性,这在我们的 A/B 测试案例中是决定挑战者与冠军相比的实力。

使用的数据

在本文中,我将使用 Kaggle 上的一个数据集(来自 DataCamp 项目),名为“用 Cookie 猫进行移动游戏 A/B 测试”。链接在参考文献部分[2]。

曲奇猫是一款流行的手机益智游戏,当玩家在关卡中前进时,他会遇到“关卡”,迫使他等待一段时间才能继续游戏或进行购买。在这样的行业中,保留是关键指标之一,如果第一个关卡从 30 级移动到 40 级,负责游戏的团队将会看到 7 天保留的影响。为了了解这种移动的行为,他们进行了 A/B 测试,并向我们提供了这些结果的数据集。我们将看到 Bland-Altman 图将如何回答以下问题:“当等待时间从 30 级到 40 级时,如何分析 7 天留存水平上的 A/B 结果?”

数据集由 90.189 行组成,其中有玩家的唯一 id、A/B 测试的版本(在 gate_30 / gate_40 的等待时间)、游戏回合的总和,如果玩家第二天回来,retention_1 是布尔值,如果玩家 7 天后回来,retention_7 是布尔值。为了有相关的数据来回答我们的问题,有必要做一些清理。我将只保留 retention_1 = True(因为如果 retention_1=False,retention_7 也为 False)的客户端,游戏回合数≥ 30(因为如果他们不到 30,他们将不会受到 gate 的影响)和游戏回合数< 170 (because if we consider the duration of a game = 5 minutes, if a player plays 2 hours per day during 7 day he will play 120*7/5 = 168 games. A higher number would be considered as an anormal usage). After this filter, the dataset is composed of 20.471 rows as Figure1 below. Moreover, the dataset is equally balanced between gate_30 & gate_40.

Figure1. CookieCats dataset

How is built the Bland-Altman plot

We will see on this section how to adapt the original Bland-Altman plot in order to apply it to an A/B test. First of all I am going to explain how is the plot built in its original version [1], [2] and then, I will explain how to build it with our A/B tests’ data.

Due that the original Bland-Altman plot compare the measurement of 2 instruments, they have the same length by design. For example, with the heart rate measurement between the $20 connect watch and the electrocardiogram, the measure are taken on the same time with the same conditions which lead to have the same number of measurement for the 2 methods. So we can represent each dataset’s row as an experience like on the example in the Figure2 below.

Figure2. Instrument measure per experience

This is where we encounter the first “pain point”. A/B 测试被视为独特的体验,而正如我们在上面看到的,我们需要多次体验才能构建情节。为了绕过这个限制,我们将从 A/B 测试中创建几个自举样本,它们具有相同的&不同的长度。

我们生成 300 个 200 到 1000 之间的非唯一随机整数。这些整数将表示每个自举样本的长度,并且为了有利于自举的统计属性,每个非唯一随机整数被复制 50 次。使用这些数字是为了具有样本多样性,但它是任意的,并且长度取决于原始数据集的大小。这些长度在 200 和 2.000 之间的 15.000 (300*50)个自举样本是从原始数据集中用替换通过随机采样获得的,并且它们被连接在一起。它可以表示为图 3。

图 3。引导数据集构建

以下代码从原始数据创建引导数据集(请注意,这可能需要一些时间,因为引导数据集的长度为 9.184.350 行{通过更改 random_state,我们将平均得到(((200+1.000)/2)30050 = 9.000.000 行} )。

然后,我们按 n_sample(每个 15.000 自举样本的 id)、n_sample_2(每个自举样本的长度)和版本进行分组,以便得到每个入口 7 天的玩家保留总数,如图 4 所示。

图 4。groupby 后的引导数据集

我们可以将该输出读作:自举样本 n 0/14.999 由 564 行组成,其中 98 个玩家仍在玩 7 天,等待时间在 gate_30,而 105 个玩家仍在玩 7 天,等待时间在 gate_40。

然后,我们使用 bootstrap 的一个统计特性,即bootstrap 样本的均值是分布真实均值的良好估计值。我们按照 n_sample_2 和版本进行分组,以便对于每个独特的样本长度,玩家的平均保留数为每个门 7 天,如图 5 所示。

图 5。对于每个独特的样本长度和每个门,在 7 天内仍在玩的玩家平均人数

我们可以将此输出读作:当样本有 200 行时,平均有 34.60 个玩家仍在玩 7 天,等待时间在 gate_30,而有 34.38 个玩家仍在玩 7 天,等待时间在 gate_40。

然后我们拆分数据库,使数据集的格式更加清晰,如图 6 所示。

图 6。数据集的未堆叠版本

在这一阶段,我们有了构建布兰德-奥特曼图所需的所有信息,数据集的表示与上图 2 相同。

布兰德-奥特曼图由两个轴组成。x 轴是比较的两种方法的平均值。所以对每一行都是:(gate _ 30i+gate _ 40i)/2 | | |y 轴是方法 A 和方法 B 的区别。每行都是如此:(gate_30i - gate_40i) |||这是我们的第二个“痛点”。通过保持 y 轴不变,样本大小的增加将增加差异的可变性。因此,我们稍后将获得的统计度量将被最大的样本过度加权。为了绕过这个限制,我们将用百分比【3】来表示 y 轴。为此,y 的计算是针对每一行的:((gate _ 30i-gate _ 40i) 100/((gate _ 30i+gate _ 40i)/2)| | |数据集如图 7 所示。*

图 7。x 和 y 轴

我们必须检查 y 轴是否为正态分布,以便信任将要显示的置信区间。你可以用夏皮罗-威尔克测试或者至少用直方图来评估它。如果分布不正常,那么你可以做一个转换,如对数转换。在我们的例子中,我认为分布是正态的。

图 8。y 轴的直方图

Bland-Altman 由 3 条线组成(见图 9):

  • y 的平均值
  • y 的置信区间的上界(这里给定 1.96 为 95%)
  • 置信区间的 y 的下限(95%)

图 9。布兰德-奥特曼图的价值

我们将所有这些放在一起,pyCompare 软件包允许以非常简单的方式绘制布兰德-奥特曼图,而不必构建 db['y'] :

它首先采用方法 A(冠军),然后采用方法 B(挑战者)。然后,如果 percentage = True ,它会自动做我们上面做的演算。我们稍后将讨论一些其他参数。

如何解读 A/B 测试的 Bland-Altman 图

我们到了!下面是由上面的代码生成的 A/B 测试的 Bland-Altman 图:

图 10。Bland-Altman 图应用于 A/B 测试

首先,平均值和平均值的置信区间(浅蓝色条纹)不同于 0(在我们的例子中更高)。这意味着gate _ 30 和 gate_40 的保持水平(原文中称为偏差)明显不同。由于 2.93 > 0,这意味着 A > B < — >冠军挑战者,因此 gate_30 上的等待期比 gate_40 上的等待期提供了更大的保留。

两个鲑鱼棒代表 95%的置信区间(原始论文中命名的协议限制),表示我们确信 95%的值将在[-0.78%之间;6.63%】。在我们的例子中,这是非常强大的,因为我们可以说 gate_30 的保持力几乎总是大于 gate_40 的保持力。

正如你所看到的,上面的鲑鱼条纹上面有 2 个值,下面的有 4 个值,这是 6/300 = 0.02< 0.05 so due that we are certain that 95% of the values are within the 2 boundaries, 5% can be above or below and in our case it represents 2% then it is perfectly normal 😉

In the pyCompare package there is the parameter limit of agreement旨在改变信心的界限。这里,一个相关的问题是:“我能确定 30 号门的保持力将总是大于 40 号门的保持力的百分比是多少?”要回答这个问题,最低边界必须等于 0 ,因此我们必须找到正确的值,以便得到 0,正如我们在下面提供图 11 的代码中看到的:

图 11。更改 limitOfAgreement 参数时的输出

我们看到当 limitOfAgreement = 1.55 时,边界几乎等于 0。然后,我们必须在正态分布表中检查 1.55 处的值,即 0.9394,因此我们可以确定在((1–0.9394)* 2)* 100 = 87.88%处,gate_30 的保留值将始终大于 gate_40 的保留值

最后要补充的一点是,无论样本的平均值是多少,它们在图上都是统一表示的,这意味着无论样本的大小是多少,我们所做的解释都是通用的。事实上,如果我们看到一种数值的二次曲线表示,我们可以得出结论,样本的大小对结果有影响,所以我们不能有一个有效的解释。

结论

我们看到了为什么使用 Bland-Altman 图是相关的,以便对简单图的 A/B 测试结果有一个看法,如何从 A/B 测试创建图,以及如何解释它。这仅在差异正常的情况下有效,但是有必要转换数据。

此外,我检查了应用程序,gates 似乎在 gate_40 上,而我们证明了 7 天的保留时间比 30 天更好。在这种情况下,它表明,与盈利能力相比,留存率可能不是最好的衡量指标!

参考

[1] D. G. Altman 和 J. M. Bland,《医学测量:方法比较研究的分析》,《统计学家》32(1983)307-317

【2】https://projects.datacamp.com/projects/184或者 https://www.kaggle.com/yufengsui/mobile-games-ab-testing或者

[3] D. G. Altman 和 J. M. Bland,《评估两种临床测量方法一致性的统计方法》,《柳叶刀》327(1986)307-310

[4] D. Giavarina,理解平淡无奇的 Altman 分析,生物化学医学 25(2015)141–151

为什么我喜欢成为一名数据科学家

原文:https://towardsdatascience.com/why-i-love-being-a-data-scientist-b4e2de7292e7?source=collection_archive---------21-----------------------

以及为什么你可能不喜欢它

马库斯·奥勒留在的照片

几年前,我读了著名博客作者马克·曼森的一篇文章。从那以后,他出版了几本书,现在相当有名。他在那篇文章中说的是,你可能认为你想要一些东西,但你必须确保你正在考虑随之而来的麻烦和挑战,而不仅仅是已经实现的状态。他的观点是“你需要热爱过程,而不仅仅是结果”。否则,你会很痛苦。

我在我的播客上采访了来自不同公司、不同背景和不同资历的数据专家。在这些聊天中,我问他们为什么选择数据科学,他们喜欢它的什么。我经常得到的一个答案是:“我喜欢能够根据数据告诉人们该做什么”。我相信每个人都能体会到那是一种美好的感觉。想象一下,你去对你的老板说,“好吧,你上个月做的那个活动是个错误,这是原因,这是你应该做的”。当然,并不是每个数据科学家都这样做。我还没机会这么做。如果这也是你的愿望,我们可能有一个问题。

我对数据科学的看法略有不同。我喜欢数据科学的过程,而不是它的结果。从看似虚无的东西中创造出某种东西的过程,每次都让我感到愉悦。在这篇文章中,我想分享一些我在工作中观察到的让我每天都更喜欢它的具体事情,以及可能对你没有吸引力的事情。

了解新行业

不接触任何领域知识,就不可能成为一名数据科学家。我为每个新项目与不同的公司合作,这是一次有趣的经历。当我完成一个项目时,我通常会比以前更了解这个行业。部分原因是我需要了解更多才能胜任我的工作,但也是因为和在这个行业工作的人在一起,你会对他们的工作和工作的复杂性有新的认识。在某种程度上,我理解了每个项目如何让世界更好地运转。

作为一名调查员

作为我工作的一部分,我必须表现得像个调查员。可能没有人知道我可以从哪里获得这些数据,但我需要弄清楚,与人们交谈,并找到一个可以给我访问权限的人。利益相关者可能不知道他们到底需要或想要什么,这取决于我来研究他们的领域,并了解到底哪里出了问题以及他们需要什么类型的数据科学解决方案。在训练过程中,我也要留意数据中任何可能的陷阱。我需要确保一切都检查过了,没有冲突,没有明显的错误。这需要非常注意细节,而且非常有成就感。

成为更大讨论的一部分

这项工作不是“我们需要这个,所以请完成它”的工作。作为一名数据科学家,我高度参与了决策过程。这是因为数据科学家是一个拥有专业知识的人,也因为我所做的事情必须完全符合现实。如果我的模型与现实不完全一致,那么在现实生活中就很难使用它。因此,确保你与项目中的几乎所有人交谈,并确保你对手头的问题有一个很好的整体理解,这很重要,也很有趣。

清理数据

我知道这不是数据科学家的共同爱好。许多人非常不喜欢数据清理过程。但不知何故我从中获得了一种奇怪的满足感。有点像用吸尘器清理一个非常脏的表面。这不是很难,但非常值得,因为你可以立即看到结果。它也不是平凡的,因为你需要想出聪明的解决方案来解决像丢失数据点或不平衡数据集这样的问题。

商业利益相关者脸上的微笑

作为一名数据科学家,你可能会引发什么样的突破,这真令人着迷。你甚至不用为它准备一个高级模型。仅仅是数据驱动的视角往往会产生很大的不同。很多时候,组织高层的业务涉众忽略了数据方面的思考。这就是为什么一旦向他们展示他们的数据的简单可视化或他们从未听说过的一些见解,你会在他们的眼中看到火花。这意味着,是的,我的朋友,你设法改变或增加了他们对某件事的看法。

创造力

有时候,听起来好像数据科学家是机器人,一遍又一遍地执行同样的任务。干净的数据,训练模式,测试模型,接下来…这就是为什么许多人相信(相当不正确地)数据科学家的工作可以很容易地自动化。我是说,我肯定它可以自动化,只是没那么容易。我相信数据科学家的工作有时是创造性的。在处理数据中的问题时,有一些经验法则和最佳实践,但很多时候你不得不放开手脚,尝试一些你从未听说过的东西。那些是我的工作变得非常有趣的时刻。

敢做的态度

我不得不说,我讨厌“能做的态度”这个词,但它很好地定义了数据科学家的态度。大多数时候,你需要的信息不会被包括在内,你必须根据自己的条件找到解决方案。你需要足智多谋,富有创造力。

数据集上没有日期信息?看看那段时间卖得最多的东西。发现万圣节主题糖果销量最多?现在你可以估计日期了。

没有星期几信息?看看日期,当它们进入新的一周时。第一天必须是星期一。但是数据来自美国,所以第一天很可能是星期天。

我喜欢的一个例子是来自 Twitter 的,他们使用湿薯条的提法来建议油炸机器公司为餐馆提供支持。

奖金

我在这里没有提到的一件事当然是 AI 中推动这个职业极限的人的社区。绝对让人骄傲。更不用说当有关于人工智能某项进步的新闻时,理解实际发生了什么的额外好处,而不是害怕“机器人接管世界”。

所有这些以及更多的事情让我兴奋地来到我的电脑前,开始为我工作。我相信对于一个热爱学习新事物、热爱解决问题的人来说,做一名数据科学家是特别有成就感的。这可能不是你,没关系。在投身数据科学之前,请确保您了解迷人的“我告诉我的老板该做什么,公司的每个人都在等待我的见解”阶段之前的旅程。它可能会节省你在办公室不愉快度过的宝贵时间。

您是否打算转行从事数据科学职业,但不确定从哪里开始? 通过我的网站免费参加我的数据科学入门课程。

本课程旨在帮助您:

  • 阐明您的数据职业目标,
  • 理解人工智能的学科,
  • 了解绝对需要的技能,
  • 在您的学习旅程中做出明智的决定

此外,我每周发表文章、采访数据专业人员和免费资源,以帮助专业人员有效地将他们的职业生涯转向数据科学。如果你对你需要学习的东西感到迷茫,对所有声称自己是最好的课程感到困惑,觉得没有一门课程对你的目的来说足够完整,我的网站就是为你准备的。

为什么我辞去了数据分析师的工作

原文:https://towardsdatascience.com/why-i-quit-my-job-as-a-data-analyst-9532598f8f32?source=collection_archive---------16-----------------------

意见

…并成为了一名数据科学家。

JESHOOTS.COMUnsplash【1】上的照片。

目录

  1. 介绍
  2. 数据分析
  3. 数据科学
  4. 摘要
  5. 参考

介绍

万花筒Unsplash【2】上拍摄。

我想先提一下,这是我的个人经历,所以对我的观点和建议要有所保留。我的目标是激励你审视自己目前的工作,问问自己换一份更适合自己的工作应该做些什么(或同样的工作,以及各自可能的改进)。在我的情况下,我是一名不到一年的数据分析师,因此必须指出,总有不同的公司可能有不同的要求和与我不同的日常经验。然而,在内心深处,我知道我想要别的东西,更多的东西给自己。

从一名数据分析师开始,我真的很喜欢技术和业务的独特融合,以及我的角色所需的软技能。我有机会对业务的一些主要部分产生影响。但是,我没有机会去做的一件事是批准我的发现或将我的发现上报给上级管理人员或领导。您可能会花费几天或几个月的时间来分析数据,结果却发现产品经理只用了几分钟就使用了您的一些仪表盘,尽管您确保每天都用有价值的指标更新和刷新这些仪表盘。那么我不喜欢什么呢?我真的想对我为公司做的项目产生更大的影响。我不仅希望能够呈现调查结果,还希望针对这些调查结果实现相应的更改。我想实现自动化的过程来解决那些从提取的指标和发现的结果中发现的问题。然后我注意到我主要是在执行临时任务,或者事后 T21,除此之外没有别的。我总是着眼于过去,而不是未来。

下面,我将阐述导致我改变职业生涯的具体经历,以及我热爱的下一个、目前的职业生涯。

数据分析

照片由un splash【3】上的段 Phadnis 拍摄。

缺乏成长的经历:

如前所述,你可能会发现我正在努力成长。尽管 T4 有些短命,但我可以预见在未来的几年里,我将如何被安排在同样的日复一日的过程中。我所经历的是我的角色缺乏成长。重申一下,是的,这种体验对你来说可能大不相同,但也可能正是你的感受,也是

在我的角色之初,我喜欢创建 Tableau 仪表板,开发有趣的见解,并将它们可视化。一些利益相关者会要求一些关键的度量或者关键的性能指标,这些也需要可视化。我通常使用 Tableau 或 Google Data Studio——有时也使用自制的 Python 代码来开发图表和绘图。这个过程从我创建的请求和结果仪表板开始。然后利益相关者称赞它看起来很漂亮,并感谢我描述了我的度量标准。我注意到几天后一周就要结束了,我看了几次我的仪表盘,有时甚至是几百次。但是接下来的一周,我得到了,比如说,第一周收视率的 20%。当考虑我自己的度量标准时,我可能会表现得很自私,但是当我花了半辈子的时间去工作时,我希望看到所述工作的巨大影响和验证。

一个月过去了,我又收到了四个仪表板请求,我制作的第一个仪表板在公司使用的仪表板列表中排在第 50 位,是最少使用的仪表板之一。

我对自己说,我一遍又一遍地做着同样的事情。由于我从 SQL 查询中收集到的可视化指标,我不确定谁受到了影响,或者什么流程发生了变化。我所看到的是强大的利益相关者和领导层不时在会议上合作,有时会指出我在不同会议上制作的一个漂亮的图表。现在我知道了,也许这意味着我只是做了糟糕的仪表板,但关键是我做了要求我做的东西,而且我没有能力提出新的想法、新的结果和新的流程。这就是我感觉到的成长的缺乏。

我还想强调的是,不仅要关注专业环境,还要关注学术环境。当执行数据分析时,我开始寻找一个不同的领域来实践,并最终上学。我建议在转行时考虑其他途径,无论是以下哪种途径:

undergraduate degreemaster’s degreeonline learningbootcampsbooksfree tutorialsarticle tutorialsvideo tutorials 

数据科学

照片由照片爱好Unsplash【4】上拍摄。

我最终将职业生涯转向了数据科学。是的,那个性感,也许是过去几年老生常谈的职业。但是,它如此诱人是有原因的。还是,几个原因。我想让你知道,你不需要成为一名数据科学家来寻找幸福,而是要真正评估你目前的职业,以及你的日常经历,也许要问一问对你来说未来什么是更好的选择。此外,你也可以继续担任同样的角色,但与你的经理讨论一些可能的变化,这些变化将真正激发你的激情和动力。

我在数据分析中缺少的东西,在数据科学中找到了。这并不是说我目前在工作中不做任何数据分析,因为这通常是大多数项目的先决条件——在创建和产生数据科学模型之前,你首先开始做的事情。但是,我发现我可以查看这些见解,并建议一个更好的流程,然后制定该流程,并将其集成到当前系统中。重要的是要注意,有时候你会接到一些令人畏惧的工作,而这些工作推动了大部分业务,这些工作可能都在你的肩上。然而,这是一个成长和挑战自我的好方法,如果你需要,总有人会帮助你——这是意料之中的。为了更容易阅读,在总结时,我将强调一些关键点,说明是什么让我放弃了数据分析,是什么吸引了我对数据科学的兴趣。

数据分析—缺乏增长

  • 重复性任务
  • 对 SQL 查询的小改动
  • 普通仪表板创建
  • 看不到我的影响
  • 感觉我在做更小的任务

数据科学—不断发展

  • 更多地实现 Python 代码
  • 成为“自动化者”
  • 预测未来的建议,而不是分析过去的指标
  • 用复杂的机器学习算法挑战自己
  • 创建见解,然后创建模型来帮助改进这些指标
  • 跨职能开展更多工作
  • 总的来说,走出我的舒适区
  • 介绍更多的软件工程技术(OOP——面向对象编程)
  • 很简单——只是对机器学习及其如何改善全球商业更感兴趣
  • 机器学习算法如何改善我个人工作以外的更大问题——环境、欺诈、自动化、医疗保健和安全

回到我之前在数据分析部分所说的,在攻读硕士学位时,我最终改变了我的领域,专门研究数据科学。虽然在转行时当然没有必要执行这一步,但在研究了与我目前的数据分析师工作完全不同的领域后,我发现这一步特别有用。我本科学习生物和化学。因此,我真的觉得我需要一个更传统的途径来学习数据科学。

我推荐阅读关于学习和实践不同职业的各种选择,无论是学校还是更便宜的,甚至是免费的在线教程。我能够在工作后学习数据科学和机器学习,这也推动了我对数据科学的热情,同时也导致我辞去了当时作为数据分析师的工作。

摘要

安德鲁·尼尔Unsplash【5】上拍照。

我的个人经历是为了启发你,反思你的现状。我希望你学到了一些对你有益的新信息,并找到了你的激情,无论是数据科学还是其他完全不同的东西。这些让我选择不同职业的关键点也可以用在其他职业变化上。

值得注意的是,数据分析非常广泛,因此,根据你的职位,你可能会执行不同的任务,这些任务可能更令人兴奋,更具挑战性。我被数据科学的热潮冲昏了头脑,我很高兴我是这样,因为它真的让我对我的工作更有激情。占据我一天大部分时间的工作。

虽然我在过去几个月里一直在执行类似的数据分析任务,但我开始学习、实践和实施新的知识,这些知识甚至是我在业余时间为我当前的数据科学职业生涯所做的。

总而言之,我离开数据分析专门从事数据科学有几个原因。最能概括我的经历的一些关键原因是:

** repetitive tasks and lack of growth for Data Analytics* the challenge, impact, and growth of Data Science*

感谢您的阅读!欢迎在下面评论和讨论。也许你有过不同的经历,也许你正处于一个完全不同的职业领域,想要换工作。

参考

[1]照片由JESHOOTS.COMUnsplash(2018)上拍摄

[2]由万花筒Unsplash 上拍摄的照片,(2018)

[3]照片由段 PhadnisUnsplash(2017)上拍摄

[4]照片由照片爱好Unsplash 上拍摄,(2018)

[5]照片由安德鲁·尼尔Unsplash(2018)上拍摄

为什么我认为写作比编码更难

原文:https://towardsdatascience.com/why-i-think-writing-is-harder-than-coding-34f4fd5d72fb?source=collection_archive---------68-----------------------

避免因为负面报道而失去客户。

当我第一次学习如何编码时,我被引入了计算机语言结构完整性的概念,以及为什么让计算机做我们想要的事情是至关重要的。就像人类语言一样,编程语言只有在使用正确的语法和语义编写时才被认为是正确构造的。

文森特·范·扎林格Unsplash 上拍摄的照片

写的时间可能比编码的时间长

编程语言的句法可以解释为一种与句子结构和词序有关的语法形式。

例如,“我喜欢写作”在语法上是不正确的。

这是因为句子的形式或语言的“语法”是错误的。句法规则同样适用于计算机编程语言。当我们通过编程语言与计算机交互时,我们只需要精确地掌握命令的语法,我们唯一会遇到的错误是,如果我们输错了命令,程序就会停止运行。

这时我意识到规则很简单。

不像人类语言的语法,有更多的方面不能被一个“命令”分开来实现它的目的。语调、凝视、面部表情、语用学、音韵学、手势和许多其他现象都会影响它。

尽管编程和人类语言都描述了某种意义规则(语义),但人类语言的语义解释和构建要复杂得多。

如果你遇到关于语法和任何东西之间的接口的讨论,请把你的手放在钱包上。语言是生物性的,生物现象在各个层面上都是相互依存的;只有计算机和理论模型有清晰定义的界面。

语法只是告诉我们在一句代码中什么在哪里,而语法做的不止这些。语法提出了一套规则,规定了一种语言的正确使用标准。这些规则规定了我们应该如何正确地说话。

这基本上可以概括为,假设人类语言和编程语言一样流利,人类语言有歧义和多层含义。同时,计算机是哑的,只会照字面理解。

学习写作比学习编码要长得多

Unsplash 上由Duan Smetana拍摄的照片

一个好的学期的编码课程足以让你开始熟悉不同类型的数据结构和算法。在我投入到项目的实际工作中之前,我个人刚刚花了 10 周的时间正式学习了如何编码。教授这门课的是一位教授,他也是在攻读博士学位时开始学习编程的,并不是因为他想成为一名程序员。

写作任务需要大量的准备工作。

你需要很好地组织你的想法,然后决定你想要强调的重点和顺序。最主要的是,我们在对每一点做解释的时候,也需要把自己放到读者的头脑中去。当编码时,你并不真的这样做,因为你的目标主要是确保机器给你你想要的输出。

代码比句子更容易理解

如果你知道如何编码,很有可能你可以解释任何不同的代码行。但是,如果你知道如何阅读,并不意味着你可以解释背后的意思写的东西。想想吧。

“一个代码能有双重含义吗?像一句话。如“真好笑”。这可能意味着“这很奇怪”或字面意思,“有趣”。"

在大多数编程语言中,如果不是全部的话,不允许歧义是一个显式的特性,没有技术上的理由为什么一种语言可以被设计成具有歧义的表达式,当编译器或解释器看到歧义时,它会做类似于随机解析 n 种可能含义之一的事情。

但是这种语言对于解决我们今天用编程来解决的问题并不方便。

不像写作,歧义时有发生。人类语言有如此多的词有多重含义。这就是为什么你经常听到人们说:

“什么意思?”

出于同样的原因,人类语言(自然语言)的模糊性给自然语言处理(NLP)开发人员、科学家和研究人员带来了巨大的挑战。

客户阅读报告,而不是代码

杜安·斯美塔纳Unsplash 上拍摄的照片

通常,你的客户首先阅读的是你的报告,而不是你的代码。您的报告成为您的第一印象,因为报告包含了您的客户所需的所有信息。

有效沟通的关键是沟通清楚。在你写报告的时候,你必须考虑客户的观点。另一方面,更好的代码不需要任何人的观点,足够简单和快速。(大 O 时间!)

把这个包起来

正如这篇文章的标题所暗示的,写作更费力,因此比编码花费更多的精力。不注意写作的影响会让公司损失一大笔钱。在商业中,最终真正重要的是我们获得了多少利润以及我们正在实现的增长。

缺乏对写作的重视会在很多方面损害商业,不管我们是否意识到这一点,这很容易是因为写作技能很差。

感谢您的阅读。对于任何想法或反馈,请随时通过给我的 Linkedin 发送消息来与我分享!

https://www.linkedin.com/in/faizfablillah/➡️

为什么我在数据科学项目中使用蓝图

原文:https://towardsdatascience.com/why-i-use-a-blueprint-for-my-data-science-projects-cf1f22c2dd63?source=collection_archive---------44-----------------------

了解如何在数据科学项目中使用蓝图,以及从中可以获得多少速度和稳定性。

新西兰瓦纳卡的 Roys 山峰徒步旅行。约书亚土坯股票上的照片

我经常想知道我可以/应该为我的数据科学项目使用什么样的结构。当然,我必须记住一些关键特性,例如:

  • 能够可视化地探索数据
  • 能够与团队中的其他成员合作,包括数据科学家和数据工程师
  • 编写工程代码,代码剖析,单元测试…
  • 能够在云中的 Docker 容器中部署我的项目

使用笔记本工作?

我有几个选择,第一个是使用 Jupyter 笔记本。笔记本电脑是高效的,因为它们允许用一个工具包来编码、记录和报告!

笔记本电脑的问题是很难与其他团队成员协同工作。此外,我一直认为笔记本不是执行单元测试的完美框架。最终,交付一台笔记本作为我项目的成果是非常诱人的,但大多数时候,这并不是我的老板/客户所期望的。人家买的是一个 app,笔记本不是 app。

烹饪刀具

我花了一些时间在互联网上寻找一个可以满足我所有需求的解决方案,过了一段时间,我终于找到了一个名为 cookiecutter 的小 python 包。

cookiecutter 所做的只是简单地使用项目的蓝图,并用 JSON 配置文件映射它。您的蓝图将为您的项目设置所有特定的变量。这种工作方式的巨大优势在于,您可以根据需要在多个项目中重复使用您的蓝图。你所要做的就是设置 cookiecutter 需要的变量,让这个蓝图成为你的项目。

您可以通过下面的链接访问 cookiecutter 的完整文档,但是您需要知道的只是如何安装它:)

https://cookiecutter.readthedocs.io/

构建我的数据科学蓝图

也就是说,我决定不再浪费时间,开始实施我的蓝图。我已经发布了,在 GitHub 上有:https://github.com/mysketches/data-science-blueprint

我还为我的蓝图写了完整的文档:https://data-science-blueprint.readthedocs.io/

我尝试开发一个模板,牢记:

  • 最终能够构建一个健壮的项目
  • 获得一些关于代码可靠性的信心
  • 满足在生产环境中部署所需的要求
  • 让数据科学家和机器学习工程师围绕一个公共代码库一起工作
  • 能够毫不费力地将我的蓝图重新用于其他机器学习项目

经过几次实验,我认为我已经达到了那个目标,这就是我今天想与大家分享的。

蓝图的安装

在安装蓝图之前,你必须知道它大量使用 Docker。因此,您必须在机器上安装 Docker。你也必须有权利运行 Docker 没有管理员。如果不是这样,请看看我写的那段文档:https://data-science-blue print . readthe docs . io/en/latest/installation/requirements . html

为了与蓝图交互,您还需要访问 make 命令,运行在 Makefile 文件中定义的指令。

安装蓝图有两个步骤。首先,您应该安装 cookiecutter 包。要安装 cookiecutter,请先安装 gitpip 。然后,您可以运行以下命令:

pip install cookiecutter

安装 cookiecutter 后,您可以安装我的数据科学蓝图:

cookiecutter [https://github.com/mysketches/data-science-blueprint](https://github.com/mysketches/data-science-blueprint)

Cookiecutter 将提示您设置蓝图参数的值。在您的控制台上,在安装蓝图的过程中,应该是这样的:

full_name [John Doe]:
email [john.doe@myemail.org]:
project_name [DS-blueprint]:
package_name [Awesome project]:
package_slug [awesome_project]:
project_short_description [No description]:
version [0.1.0]:
Select python_interpreter:
1 - python3
2 - python
Choose **from** 1, 2 [1]:
application_cli_name [awesome-project-cli]:
Select opensource_licence:
1 - MIT
2 - BSD
3 - ISCL
4 - Apache Software License 2.0
5 - Not open source
Choose **from** 1, 2, 3, 4, 5 [1]:
docker_base_image [jupyter/base-notebook:python-3.7.6]:
docker_image_name [awesome-project-env]:
docker_container_name [awesome-project-env-instance]:
docker_container_port [8888]:

这个过程是迭代的,一个问题接一个问题。就是这样!

构建您的环境

要从 Jupyter 笔记本和 shells 中获益,您首先需要构建您的环境。移动到项目的根目录,即 Makefile 文件所在的位置,并键入以下命令:

make environment-build

在您的环境构建完成后,您可以启动它,这将启动 Docker 容器,让您可以访问您的 Jupyter 笔记本和 shell。

make environment-start

使用一些示例数据

为了这个演示,我写了一堆 python 脚本来加载一些数据,让你玩玩。我猜这将有助于使这个蓝图成为你自己的,并使它更容易根据你的需要进行更新。

我决定研究 2014 年 6 月至 2019 年 6 月抵达新西兰的游客和旅行者的数据样本。在这里阅读数据集的完整描述:https://www . stats . govt . NZ/information-releases/international-travel-June-2019

我已经创建了一个 Jupyter 笔记本来呈现对数据的简要探索,以及一个对数据进行一些简单转换的脚本。

要加载数据,可以使用以下命令:

make environment-data

当然,如果您愿意,我们会邀请您更新/删除这些样本。

使用 Jupyter 笔记本环境

数据科学蓝图允许您加载 Jupiter 笔记本,您可以在其中创建您的探索/机器学习笔记本,并在您的项目中使用其余代码对它们进行版本化。

当您的环境启动后,您可以在浏览器上访问您的笔记本,访问以下 URL:http://localhost:8888(默认端口为 8888)

与蓝图一起交付的笔记本样本

使用 shell 进行编码和测试

由于这个命令,您还可以访问可以插入的 shell:

make environment-shell

当您处于您的环境中时,您会看到提示发生变化。从终端,您现在可以访问一个 Python env,其中您的项目已经被部署为一个包。因此,您可以编写类似这样的脚本,并将您的项目作为一个包导入。

import pandas as pd
import awesome_project as packnz = pd.read_csv(‘../data/nz-population.csv’)reduced = nz.filter(items=[‘NZ_area’, ‘Count’, ‘geo_level’])
print(reduced.head())print(“\n”)reduced = pack.tolower(reduced, ‘NZ_area’)
reduced = pack.toupper(reduced, ‘geo_level’)
print(reduced.head())

将您的蓝图用作应用程序

蓝图还提供了命令行界面。然后,您将能够从终端调用项目的一些模块。不用打开 Python shell,您可以将项目安装为 Python 包,并直接调用您的模块,就像您启动了一个程序一样。

首先,您需要安装依赖项并打包您的项目。

make install
make package

一旦您的项目被部署为一个包,它就可以被部署它的机器上运行的所有 Python 脚本使用。出于本教程的考虑,我开发了一个小的命令行脚本来生成一个 lorem ipsum 文本的子样本列表。这是相当琐碎的,但是这个演示的目的只是向您展示调用它是多么容易。

完整的文档将更详细地介绍如何为您的项目设置端点。

您可以首先调用命令行并获得如何使用它的信息

awesome-project-cli --help

输出很简单

Usage:
    awesome-project-cli lorem <iterations> [--text-size=<text_size>]
    awesome-project-cli data <data-url> <data-location>
    awesome-project-cli (-h | --help)

数据操作让我们调用 lorem 命令并生成一些文本。

awesome-project-cli lorem 10 text-size=50

该程序将输出一个 lorem ipsum 列表…

['Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing']

运行单元测试和代码覆盖率

我认为给你机会用工具来测试你的代码是很重要的。使用 make 命令可以很容易地做到这一点:

make test

这将给你单元测试的输出

======================= test session starts ========================
platform linux -- Python 3.7.6, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: /data
collected 4 itemsawesome_project/tests/operator/test_data.py .                 [ 25%]
awesome_project/tests/operator/test_dataframe.py ..           [ 75%]
awesome_project/tests/operator/test_generator.py .            [100%]======================= 4 passed in 0.84s ==========================

你也可以做一些代码覆盖,来检查单元测试是否覆盖了你所有的代码

make coverage

这是您将看到的输出

Name                                               Stmts   Miss  
--------------------------------------------------------------------
awesome_project/__init__.py                          4      0   100%
awesome_project/operator/data.py                     6      0   100%
awesome_project/operator/dataframe.py                6      0   100%
awesome_project/operator/generator.py                4      0   100%
awesome_project/tests/operator/test_data.py          6      0   100%
awesome_project/tests/operator/test_dataframe.py    11      0   100%
awesome_project/tests/operator/test_generator.py     3      0   100%
--------------------------------------------------------------------
TOTAL                                               40      0   100%

测试代码的质量

多亏了 flake8 包,测试项目的编码约定成为可能。这对于确保遵守编码要求非常有用。这是非常有价值的,尤其是在和一个有很多工程师的团队一起工作的时候。

您可以使用以下命令启动代码分析:

make lint

如果您有编码约定错误,它们将自动在控制台中报告,如下所示:

./awesome_project/operator/generator.py:4:31: E203 whitespace before ':'
./awesome_project/operator/data.py:3:1: E302 expected 2 blank lines, found 1
make: *** [lint] Error 1

现在怎么办?

我正在制作的蓝图展示了一些特性,我想这些特性可能会让你感兴趣,尤其是如果你希望创建一个数据科学项目的话:

  • 您的项目的一个包结构,随时可以构建
  • 一个 dockerized 环境,允许你访问 Jupyter 笔记本,一个私有 shell,单元测试,代码剖析,代码覆盖
  • 一套工具来打包您的项目,并将其嵌入到 Docker 映像或 PyPI 中

你能从这个蓝图中期待什么?

  • 节省大量时间,并迭代尽可能多的项目
  • 帮助数据科学家用笔记本工作,机器学习工程师用 Python 打包代码工作。
  • 通过测试和代码分析增加项目的健壮性。
  • 简化您的项目在生产基础设施上的部署

想了解更多?

我还花了一些时间为这个项目写了不错的文档,这样你就可以了解如何使用它的所有特性。你可以在这里获得完整的文档:https://data-science-blueprint.readthedocs.io/

但是对我来说最重要的是你可以把这个项目变成你自己的。这对我很重要,你可以派生它,接触源代码,并根据你的需要更新它。

下面是 Github 项目的链接:【https://github.com/mysketches/data-science-blueprint

为什么我用 Fastai,你也应该用。

原文:https://towardsdatascience.com/why-i-use-fastai-and-you-should-too-a421f6c99508?source=collection_archive---------29-----------------------

这是一个多部分系列的第 1 部分:关于我最喜欢的深度学习库 fastai,我最喜欢的事情。

这一集:学习率(LR)

fastai 之前的 LR

找到最佳 LR 的一般共识通常是用不同 LR 的不同优化器完全训练模型,直到达到期望的度量。最佳 LR 和优化器的选择取决于它们在选择阶段的最佳组合。这是一种不错的技术,尽管计算量很大。

注:由于我是在深度学习生涯的早期被介绍给 fastai 的,所以我不太了解在没有 fastai 的情况下/之前事情是如何完成的,所以如果这有一点不准确,请让我知道,也不要完全相信这一部分。

快速方法

通向 LRs 的捷径受到了 Leslie Smith 论文[1]的影响。寻找最佳 LR 主要有 3 个组成部分,寻找用于训练的最佳 LR(在 LR 寻找部分中解释),随着训练的进行,减少 LR(在 LR 退火部分中解释),以及迁移学习的一些注意事项(在判别 LR 中解释)和一个周期训练(LR 退火的一部分)。

LR 和后果。图片由作者提供。

我们的学习率应该是多少? 这是一个要问的重要问题,因为学习率是驱动我们的模型参数达到最优解的因素。太低,学习时间太长。太高的话,模型甚至都学不会。我们需要一个在一定范围内的学习率,它能以合理的速度使参数收敛。

LR 查找

LR find 是 fastai 寻找好的学习率的方法。他们首先选择一个非常低的 LR,在这个 LR 下训练一个小批量,然后计算损耗。以递增的更高 LR 训练下一个小批量,并且这个过程继续,直到我们达到模型明显偏离的 LR。

LR 是相对于损耗绘制的,我们可以看到下图。存在一个损耗最小的特定 LR,在此之后,再增加 LR 将使损耗恶化。

选择损耗最低的 LR 是错误的。我们需要损失减少最快的 LR。这也是图表中最陡的部分。Fastai 实现了一个函数来查找除以 10 的最陡和最小 LR(这也是一个很好的训练 LR)

learn.lr_find() [[docs]](https://docs.fast.ai/callback.schedule#Learner.lr_find)

LR 查找。图片来自 fastiai 的 fastbook ,GPL-3.0 许可证

这种方法在计算上更便宜和更快,因为我们只需要 1 个时期(甚至不需要)来找到最佳 LR,而传统上我们将为 LR 的每个逻辑范围训练 1 个时期(肯定总共多于 1 个时期)。

低温退火

谜题的下一步是 LR 退火。最初,我们的参数是不完善的。它们与最佳参数相差甚远。但是随着我们训练,参数越来越接近最佳值。

当我们的参数非常远离最优(开始)时,我们希望在最优的大致方向上采取更大、更不精确的步骤。但是当我们越来越接近时,我们不希望采取大的步骤而意外地超过 optima,我们希望采取较小的步骤来获得精确的完美参数集。

这类似于高尔夫球。你不要试图一杆进洞,(你可以,但更多的是运气而不是技巧),你只是试着在球洞的大致方向上尽可能远地高球。当你靠近时,你改变球杆以获得更高的精确度和控制力,并寻找更小的步伐,每一步都让你更靠近球洞。

这就是为什么在训练开始时,我们想要大的学习率,这促使我们努力快速地接近最佳参数,但当我们接近最佳参数时,我们想要降低学习率。随着我们的损失减少,我们希望采取更小的步骤,因此使用更小的 LR。

这种在训练期间改变 LR 的过程被称为 LR 衰减/ LR 退火。下图显示了较大的初始步骤与较小的最终步骤的对比。

Lr 退火。作者图片

适合一个周期

当前对基于 GD(梯度下降)的训练的难度的普遍共识是优化器可能陷入鞍点。这与我们过去认为的主要问题(局部最小值)不同。Leslie Smith 在[3]中表明,增加 LR 有助于避开鞍点并到达损失函数的良好区域,此后,我们再次降低 LR,原因在 LR 退火中解释。然而,Sylvain Gugger 在这里解释了拟合一个周期方法的最后一步,即将 LR 减少到最后几次迭代的最小 LR 的百分之一。也被称为湮灭。

鞍点。图片由尼科瓜罗——自己的作品,CC 由 3.0,【https://commons.wikimedia.org/w/index.php?curid=20570051

步骤很简单,选择一个 LR,如本文的 LR 查找部分所述。这是最大可接受的 LR。我们还选择一个最小 LR,正如 Sylvain 所建议的,是最大 LR 的十分之一。现在我们在这个范围之间循环,其中循环长度略小于历元总数。最后,我们将 LR 降至最小 LR 的百分之一。

fit_one_cycle(**learn**:[Learner](https://fastai1.fast.ai/basic_train.html#Learner), **cyc_len**:int, **max_lr**:Union[float, Collection[float], slice]=***slice(None, 0.003, None)***, **moms**:Point=***(0.95, 0.85)***, **div_factor**:float=***25.0***, **pct_start**:float=***0.3***, **final_div**:float=***None***, **wd**:float=***None***, **callbacks**:Optional[Collection[[Callback](https://fastai1.fast.ai/callback.html#Callback)]]=***None***, **tot_epochs**:int=***None***, **start_epoch**:int=***None***) [[docs](https://fastai1.fast.ai/train.html#fit_one_cycle)]

安排 LR 时有两个主要参数可以使用,这就是我们在单周期策略中所做的事情。这些是动量和步长。更多关于 LR 如何安排的信息和进一步阅读,请点击这里

一个周期左右。图片由 fastai 课程,Apache-2.0 许可。

辨别 LR(迁移学习期间)

迁移学习是使用为一项任务训练的神经网络,在最少的训练后做不同的任务的过程。这是非常有用的,原因我现在将解释。

泽勒和弗格斯发表了一篇令人惊叹的论文,名为《可视化和理解卷积网络》[2],他们在论文中展示了神经网络的不同层学习的内容,并将不同层学习的内容可视化。从下图中,我们可以看到第一层识别基本的线条、颜色和颜色渐变。第二层识别更复杂的形状,如边缘和圆形,然后到了第三层,网络开始识别模式。

现在,假设你有一个可以识别猫的猫检测器。你想做一个熊探测器。比起随机噪声,猫更像熊,猫探测器的大多数层已经学习了非常有用的参数。所以我们只需要微调模型,改变最后几层。

神经网络的不同层次看到了什么。来源:可视化和理解卷积网络

而 fastai 非常适合做这件事。fastai 迁移学习的方法基本上是两个步骤。

  1. 我们首先冻结我们的模型,这意味着停止对早期层的梯度计算,只训练最后 2 层。
  2. 然后我们解冻这个模型,这样渐变就会一直流回来。然而,我们已经知道早期的层不需要大量的学习,因为它们已经学习了重要的参数(像图像的线条这样的公共属性)。因此,我们需要较低的学习率用于早期层,较高的学习率用于后期层。Fastai 内置了这一功能。

用快速人工智能进行迁移学习的 4 行代码是

learn = cnn_learner(dls, resnet34, metrics=error_rate) 
#import a model of your choice, pretrained on imagenet (default)learn.fit_one_cycle(3, 3e-3) 
#train the last few layers of modellearn.unfreeze() 
#unfreeze the model, so we can train all layerslearn.fit_one_cycle(12, lr_max=slice(1e-6,1e-4))
# use a lr_max, which uses lowest value of LR for first layer
# and increments LR for later layers

下图是模型解冻后 LR 对损失的曲线图。正如我们所看到的,损失并没有急剧下降,这与我们的想法是一致的,即初始层已经学到了有用的信息。因此,即使在开始时损失也很低,并逐渐下降。

选择 LR 的方法保持不变,最小值/10 或最陡下降点

微调期间的 LR。图片来自 fastiai 的 fastbook ,GPL-3.0 许可证

参考

[1]. Leslie N. Smith ,神经网络超参数的训练方法:第 1 部分——学习速率、批量大小、动量和权重衰减(2018 ), arXiv:1803.09820

[2].马修·D·泽勒罗布·弗格斯,可视化和理解卷积网络(2013), arXiv:1311.2901

[3]. Leslie N. Smith ,训练神经网络的循环学习率(2017), arXiv:1506.01186

为什么我在 Jupyter 笔记本上用表情符号编码

原文:https://towardsdatascience.com/why-im-coding-with-emojis-in-jupyter-notebooks-23f08585ed3d?source=collection_archive---------17-----------------------

你们中的一些人可能认为这是一个亵渎神明的想法。我不打算把我所有的 x,y,z 都换成笑脸。但是,这是一个很好的功能,可以为您的演示文稿增添一点亮点

图片改编自 bruce marsUnsplash 上的照片。

当我第一次意识到我们可以在代码中使用表情符号时,我非常惊讶。目前,表情符号不能用于定义 Python 中的变量或函数。然而,它们可以用作列表、字典、熊猫数据框、绘图等中的字符串。像希腊字母这样的其他字符也可以使用,不仅是字符串也可以作为变量!在大多数情况下,在代码中使用表情符号和非拉丁符号可能不是一个好的做法。然而,我认为在一些情况下,它们不仅是可以接受的,而且是可取的。

  • 想象你是一名教师正在向年轻的观众介绍代码
  • 或者也许你正在向一个没有强大编程背景的观众展示你的作品。
  • 或者也许你想让你的数据图更吸引人
  • 或者,也许你正在实现一篇充满数学表达式和大量希腊字母的论文。

在这种情况下,使用表情符号和非拉丁字符是更好地表达你的代码和吸引观众的好方法。

以清晰、吸引人的方式交流想法对于数据科学家来说是一项非常重要的技能。

我给你看三个例子!

1.教学代码

第一次学习代码可能是一次具有挑战性的经历。用表情符号让代码更加丰富多彩是促进学习的好方法。下图只是一个简单的例子。

  • 首先我定义一个水果清单,一个我喜欢的水果清单。
  • 接下来的练习是打印“我不喜欢”或“我喜欢”,然后是每种水果的水果图标。

用水果表情教循环和条件的例子。作者创造的形象。

这个例子很适合教循环和条件!我可以用字母表中的字母列表来代替,但是你必须同意这将是一个无聊的例子。动机对学习非常重要,这就是为什么在概念呈现方式上向前迈进一步很重要。

2.增强演示

表情符号是一个好主意的另一种情况是增强你的演示。在下面的例子中,我创建了一个客户满意度柱状图。看看表情符号是如何传达对形象的清晰解读的。没有必要为了理解意思而阅读文本标签。如果你正在与国际观众分享你的作品,对你来说是个好消息——表情符号是一种通用语言!

使用表情符号增强演示的示例。作者创造的形象。

这个图是使用 Plotly 创建的。data变量是一个熊猫数据帧,它包含在Customer Satisfaction列中的表情图标和在Nr of Custumers列中的值。你可以在这个故事的结尾找到完整的 Jupyter 笔记本的链接。

3.数学表达式

科学文章经常有充满希腊字母的数学表达式。在代码中使用相同的字母是一个很好的方法,可以使代码看起来更接近原始表达式,更容易理解。在下图中,我展示了一个在函数中实现简单数学表达式的例子。我保留了函数名和通常的拉丁字符。然而,在函数内部,使用非拉丁字符是为了更好地理解,这对任何人都没有坏处。

使用希腊字母编码数学表达式的例子。图片由作者提供。

请注意,我可以将希腊字母写成 alphabetapiomega 。然而,对于不熟悉希腊字母的人来说,这将使代码变得更加冗长和难以理解。上面的例子很简单。没什么大区别。但是对于复杂而长的表达式,它可以使代码简洁并且在视觉上更有吸引力。

结束语

以清晰简洁的方式呈现代码是很重要的。表情符号和非拉丁字符的使用有助于让代码成为更广泛受众的交流语言。在我们人类与技术紧密相连的世界里,这是一种分享思想的语言。

以下链接提供了用于制作上述示例的 Jupyter 笔记本:

[## code_with_emojis.ipynb

用于创建以上所有示例的笔记本。

github.com](https://github.com/mnpinto/jupyter_tutorials/blob/master/code_with_emojis.ipynb)

我希望你觉得这个故事很有见地!😊

关于我

[## 我的 3 年历程:从零 Python 到深度学习竞赛高手

自从 2017 年开始学习 Python 以来,我一直遵循的道路是成为一名独自参加 Kaggle 比赛的大师…

towardsdatascience.com](/my-3-year-journey-from-zero-python-to-deep-learning-competition-master-6605c188eec7)

感谢阅读!祝您愉快!

为什么我要重新开始数据科学?

原文:https://towardsdatascience.com/why-im-starting-data-science-over-21bec8036ce9?source=collection_archive---------37-----------------------

介绍#66DaysOfData

我感觉卡住了。

在我目前的工作和我创建的内容(视频和博客)中,我感觉我已经开始停滞不前了。我的内容的大多数消费者都刚刚开始他们的数据科学之旅。我在这个领域呆得越久,就越感觉不到和他们的联系。

另一方面,在我的日常工作中,我不从事任何尖端的工作。我也没有进一步提高我的数据科学技能。一直夹在乱七八糟的中间,不喜欢。

是改变的时候了。

如果你喜欢视频:https://www.youtube.com/watch?v=uXLnbdHMf8w

我要从头开始

我决定,让自己快速起步的最佳方式是从头开始重新学习数据科学。这也有助于我更好地与我的核心受众建立联系,制作更好的内容。

我开始意识到,我与数据科学相关的习惯开始萎缩。我想找到一种方法来加强这些。

在我对数据科学的追求中,我发现最有价值的两个概念是一致性和责任性。我想发起一场运动来促进这些地区的发展。

我的解决方案:#66DaysOfData

我想与他人分享我的数据科学学习之旅,并鼓励他们参与进来,而不是独自完成这项工作。我将于 9 月 1 日正式启动#66DaysOfData 计划。我选择 66 天是因为这是建立一个新习惯所需要的平均时间(我知道平均时间有很大的问题……但是请原谅我)。

这是一个非常简单的挑战。只有两个要求:

  1. 连续 66 天每天至少花 5 分钟学习数据科学(一致性)
  2. 使用#66DaysOfData(问责制)分享您每天将在自己选择的平台上工作的内容

欢迎你和我一起从头再来,也可以学习任何符合你目前兴趣的东西。

不和谐服务器为主动:【https://discord.gg/VXSUJYJ

你也可以在这里追究我的责任:【https://twitter.com/KenJee_DS】T4

为什么你应该加入我

我认为每个人都可以从改进的数据科学习惯中受益。对我来说,习惯使我们不必努力工作。当我们的习惯发生作用时,我们就进入了自动驾驶状态,我们不需要对抗启动的阻力。

对我来说,动力一直是个大问题。我真的很喜欢一个项目或一个想法,并且毫不犹豫地花大量时间在上面。在我把它放下一两天后,我会努力重新捡起来,因为我觉得我必须从头再学一遍。每天工作(即使只有 5 分钟),可以帮助你保持动力,避免停滞不前。

通过制作 YouTube 内容,我知道如果我告诉别人一些事情,我更有可能去做。我对我的目标和项目直言不讳,我认为这帮助我在平台上取得了一些适度的成功。我想与那些对这项倡议感兴趣的人分享问责的力量。这可能非常可怕,但也非常有益。

不仅你会被追究责任,而且这也会鼓励你分享你的工作。如果你读过我的文章或看过我的视频,你就会知道我认为在社交上分享你的作品有多重要。这是一个非常简单和低压力的方式,让你养成与社区分享你的项目和目标的习惯。

我将如何学习

同样,没有必要完全按照我正在做的去做。这项挑战更侧重于培养良好的习惯,并帮助您学习您感兴趣的确切的数据科学知识。

尽管如此,如果人们有兴趣从我开始,我已经在这个视频中分享了我将使用的资源和我将采取的步骤:https://www.youtube.com/watch?v=uXLnbdHMf8w

最后的想法

我认为这是一个打破常规的好借口。感觉没有动力和停滞不前是很常见的。我们可以用我们正在创造的习惯的力量打破这些感觉。

希望看到我从头开始,也能激励你重新拾起它!我认为这将是一个有趣的实验,我希望你们都和我一起参与进来!

为什么物联网是人工智能革命的第一步

原文:https://towardsdatascience.com/why-iot-is-the-first-step-in-ml-ai-revolution-aedab1b92e88?source=collection_archive---------34-----------------------

大家都忘记了最关键的环节

照片由 Unsplash 上的 Jp Valery

有这么多关于人工智能和人工智能的炒作,以及它将如何彻底改变你周围的一切,有一个非常重要的环节人们往往会错过它的发生。这就是物联网,或者简称为物联网

让我们来理解 ML 的基础,以及它是如何改变任何过程的。以网飞这样的在线流媒体服务为例。根据你的观看历史,它会推荐你接下来应该看的节目和电影。

在这样的推荐引擎出现之前,我们习惯于根据评分来决定。虽然收视率在区分好电影和荒谬电影方面做得很好,但它对你是否喜欢一部电影并没有太大帮助。你可能喜欢 6 星级的电影,但不会喜欢 8 星级的。

由于网飞有数百万用户通过其平台观看内容,他们有海量的数据,用户可以明确地(竖起大拇指和向下)和隐含地(观看完整系列,点击同一部电影或另一部电影的特定海报)告诉他们是否喜欢某部电影,网飞根据这些数据为你个性化推荐(而不是某些评论家)。

网飞还根据你和数百万其他人的观看历史预测每个用户会看什么,然后缓存(提前加载)到离这些用户最近的数据中心。网飞还需要处理大量的媒体处理(不同设备的不同格式和分辨率的视频转换),这是一个昂贵的过程。因此,它通过根据可用服务器负载的历史数据再次预测未来的服务器负载来优化成本,并将这些任务分配给未充分利用的资源。

因此,你会看到机器学习为每个用户引入了个性化(这在以前是不可能的),并且优化了所有流程,以实现更高的效率和对可用资源的更好利用。

那么,是什么让网飞能够个性化体验并优化所有资源呢?

他们在一段时间内积累的客户行为和资源使用的数据。

只有拥有足够大和相关的数据,他们才能实现这一切。

但是网飞和所有其他平台有一个非常独特的优势。由于完整的生态系统是数字化的,他们的所有数据都被持续收集,任何个性化/推荐都可以提供。它的所有资源都是数字化的,并受到实时监控。但你周围的大多数过程却不是这样。

你的生活并不局限于你使用的数字设备。事实上,你的大部分活动都在屏幕之外。

物联网带来了什么?

为了让人工智能和人工智能真正具有革命性,它必须改变你周围的流程。它必须在你生活的各个方面创造价值,而不仅仅是数字生活。

为了进一步理解,让我们考虑一下你生活中最重要的一个方面:交通

自动驾驶汽车

几十年来,人类一直在独自驾驶汽车,后来有一家公司想要改变这种状况。如果你一直生活在岩石下,那家公司就是特斯拉。他们的愿景是利用人工智能和人工智能创造无人驾驶汽车,无需任何人工干预。

但与网飞不同的是,驾驶不仅仅局限于数字世界。事实上,大多数汽车甚至都没有接近数字生态系统。缺少最重要的成分,即数据。

这就是物联网发挥作用的地方。自动驾驶汽车的第一步是制造一辆收集各种驾驶数据并可以数字化控制的汽车。这种新的数字汽车将使用雷达收集周围数据,人类司机的活动,汽车各部分的运行数据。这些数据将用于开发自动驾驶系统,然后不断改进该系统。

照片由 Unsplash 上的 Bram Van Oost 拍摄

这种汽车数字化是由物联网实现的。放在汽车中的附加硬件(传感器、处理器和数字控制器)弥合数字世界和物理世界之间的差距,是物联网的核心。

就像没有第一个物联网支持汽车就无法实现自动驾驶汽车的梦想一样,没有物联网首先支持行业的流程和产品,就无法实现用人工智能改造大多数行业的梦想。

物联网支持本身提供了大量价值,而不需要人工智能和人工智能,但它确实将事情向前推进了一步。

如果你对此感兴趣,并且想开始一个物联网项目,这将帮助你开始

[## 开始构建物联网产品的全面指南

当我开始开发我的第一个物联网项目时,我希望我有这样的指南

towardsdatascience.com](/a-comprehensive-guide-to-start-building-an-iot-product-ba32dfb91c7a)

为什么中心极限定理对数据科学家很重要?

原文:https://towardsdatascience.com/why-is-central-limit-theorem-important-to-data-scientist-49a40f4f0b4f?source=collection_archive---------9-----------------------

数据科学,统计学

中心极限定理是每个数据科学家/数据分析师每天所做的统计推断的中心。

自然界一切正常(图片来源:作者图片)

在本文中,我们将探讨中心极限定理,什么是中心极限定理,为什么它很重要,以及大数定律和中心极限定理之间的区别是什么?

中心极限定理****【CLT】统计概率的中流砥柱。该定理表示,随着样本规模的扩大,多个样本之间的平均值分布将类似于高斯分布

我们可以考虑做一个试验,得到一个结果或者一个观察结果。我们可以再次重复测试,得到另一个独立的观察结果。累积的大量观察值代表一个观察值样本。

万一我们计算出样本的平均值,它将接近总体分布的平均值。在任何情况下,像任何估计一样,它不会是正确的,会包含一些错误。万一我们抽取大量独立样本,并计算它们的平均值,这些平均值的分布将形成高斯分布。

CLT 给出了我们估计的某种分布。我们可以利用这一点来询问我们所作估计的概率。例如,假设我们正试图思考一场选举将会如何结果。

我们进行了一项调查,发现在我们的样本中,30%的人会决定支持候选人 A 而不是候选人 b。显然,我们刚刚看到了总人口的一个小样本,所以我们更希望知道我们的结果是否可以说适用于整个人口,如果不能,我们希望了解误差可能有多大。

尽可能地,CLT 向我们揭示,万一我们一次又一次地进行调查,随后的理论将在真实人口值上呈正态分布。

CLT 从中心开始工作。这意味着在极小的可能性下,你假设接近中心,例如,大约三分之二的未来总数将落在均值的一个标准差内,即使只有很少的样本,你也是安全的。

然而,如果你谈论尾部,例如,假设整体超过均值的五个标准差几乎是不可想象的,你可能会感到尴尬,即使有相当大的样本。

当分布具有无限方差时,CLT 是令人失望的。这些案例很少见,但在某些领域可能意义重大。

CLT 经常被初学者误认为是大数定律(LLN) 。它们是不同的,它们之间的主要区别是 LLN 依赖于单个样本的大小,而 CLT 依赖于样本的数量。

LLN 表示,独立且不可区分分布的观察感知的样本均值尽可能地与某个值相结合。CLT 描绘了样本均值与值之间的差异分布。

CLT 在统计推断中起着重要的作用。它精确地描述了样本量的增加在多大程度上减少了抽样误差,从而告诉我们样本的统计估计值(例如百分比)的精度或误差幅度。

相对大量的独立随机变量的累积导致一个随机变量大致呈正态分布

统计推断依赖于一种可能性,即可以想象从一个样本到总体的结果的广泛视角。我们如何保证在一个例子中看到的关系不仅仅是因为可能性?

显著性测试旨在提供一个目标衡量标准,为有关广泛观点有效性的决策提供信息。例如,我们可以在样本中找到教育和收入之间的负相关关系。然而,补充的信息对于显示结果不仅仅是因为可能性,而且是有统计学意义的是必不可少的。

CLT 断言高斯分布是一种自然的限制性分布。它使许多与统计学相关的理论合法化,例如,线性回归中误差项的正态性是具有有限方差或不可检测误差的许多随机变量的独立总体,我们通常可以期望它是正态分布的。

确实,当你对某些数据的分布毫无头绪时,你可以利用 CLT 来推测它们的正态性。

CLT 的缺点是,它经常被使用而不检查怀疑,这是相当长一段时间以来金融领域的情况,假设回报是正常的,尽管它们具有厚尾分布,其特征是比正态分布具有更多的危险。

当你处理相依随机变量的和,或者非不可分辨分布的随机变量的和,或者违反自治条件和不可分辨分布条件的随机变量的和时,CLT 没有任何重要的意义。

有额外的 CLT,放松了自治或无差别的分布条件。例如,有林德伯格-费勒定理,尽管一切,需要随机变量是独立的,但它放松了不可区分的分布条件。

CLT 用于均值推断。CLT 意味着有限方差分布的大样本均值具有估计的正态分布。在我们研究近似值之前,样本的大小已经足够好,这取决于分布,因此如果没有异常值,我们将使用样本平均值作为总体平均测量值来确定误差可能性。

CLT 是一种具有挑战性的直觉。当然,我们可以提供各种各样的故事,我们可以做很多技术演示,但 CLT 是非常神秘的。高斯是极限分布,绝对神奇。这是天性使然。在这方面,它几乎就像重力。CLT 不是人类发明的,但它肯定被人类证明了。

正态分布给出了一个非常基本的单峰对称模型。缩放和移动不变参数只需要重新缩放。它对于识别操作中的变化和缩放也是有用的。通过分析正态模型的方差,可以方便地检查许多均值漂移总体的许多比较(正态模型对偏离正态有弹性,而方差不变性对获得的结果有实质性影响)。

正态分布通常用作任何模型的误差模型,以使用所分析模型的剩余平方量来调查模型的适合度。例如,它也用于回归理论,以解释与假设模型的偏差,而其他模型则用于计数结果。

CLT 可能是所有科学中最常用的定理——从天文学到心理学再到经济学,绝大多数经验科学都以这样或那样的方式求助于定理。每当你在电视上看到调查结果和置信区间时,都会在幕后提到关键极限定理。

实际上,CLT 在每一个样本、调查、临床试验、实验分析、随机干预以及你能想象到的几乎所有其他种类的科学测试中都有应用。

中心极限定理(图片来源:作者提供)

结论

CLT 的优势在于它是强大的,这意味着不管数据是否来自各种分布,如果它们的均值和方差是相等的,该定理现在甚至可以被利用。

CLT 注意到,随着样本量的增加,样本均值收敛于总体均值,它们之间的距离收敛于正态分布,方差等于总体方差。它在统计学的应用和对自然的理解中是重要的。

现在,把你的想法放在TwitterLinkedin,以及Github!!**

同意 还是 不同意 与绍拉夫·辛拉的观点和例子?想告诉我们你的故事吗?

他对建设性的反馈持开放态度——如果你对此分析有后续想法,下面 评论 !!

推文@ SauravSingla _ 08,评论Saurav _ Singla,还有明星SauravSingla马上!

为什么数据分析远远落后于软件工程?

原文:https://towardsdatascience.com/why-is-data-analytics-so-far-behind-software-engineering-7df85833cc81?source=collection_archive---------40-----------------------

亚当·诺瓦克斯基在 Unsplash 上的照片

这篇文章中没有答案,只有两个为一个问题服务的轶事。

在热门的本地创业公司入职

前几天和一个软件工程师朋友聊天。他一直在观察他的合作伙伴开始从事数据分析师的新工作。

“交接相当可怕!”他绞着双手说。“他们给了她一个带有 SQL 查询的. txt 文件。无可奉告!“过去 30 天”的硬编码日期!这是在!”

我笑了。“这其实很正常”,我说。“她有导师吗?”

“嗯,是的”,我的朋友说。"她被分配了一个,上升的过程相当缓慢."

“那还不算太坏。”

我向他解释说,数据部门不同于软件工程部门。

“与程序员相比,他们在流程和工具方面落后了。我不完全确定为什么。我给你举个例子:在数据领域,把一切都投入到版本控制中被认为是一个新颖的想法。”

现在轮到他笑了。“你不会是认真的吧!”

“好吧,问问你的搭档 txt 文件在 git 里吗?她是否获得了某个中央存储库的证书?”

事实上她没有。

帕兰提尔和其他人

几天后,我和另一个朋友聊天,这次是关于雪花公司的 IPO。这家数据仓库公司似乎已经吸引了金融和科技媒体中许多人的注意力;这无疑是近年来人们谈论最多的科技股 IPO。(关于宣传的更多信息,请查看这个 Twitter 帖子)。

我的朋友在帕兰提尔待了很多年。他说,有效地说:“所有这些谈论雪花,当我真正想要的是代工。”

“代工是什么?”我问。

“这是帕兰蒂尔的数据。此处。”他说,发给我一个链接。

我浏览了一遍,带着许多问题回来了。他勇敢地回答他们,好像我是一个被困在外面世界的菜鸟。

我的朋友向我解释说 Foundry 做了所有的事情:ETL、转换、血统、元数据中心、数据质量、可视化、存储。你说出它的名字;他们建造了它。

“它使用什么数据存储?”

“多重”我朋友说。

“所以你是在告诉我,Palantir 有一个多功能的工具,里面什么都有,而且你们已经卖了很多年了?”

“嗯……是的。”

为什么数据分析如此落后?

为什么数据分析落后于软件工程?为什么与商业智能相比,软件工程中的过程和工具走得更远?

我提到上面的两个轶事,因为我认为它们强调了一些有趣的想法——例如,如果我是一个局外人,我会认为 Palantir 的产品是商业智能工具的标准。相反,这是一个例外。

事实是我对此没有很好的答案。我们都不知道。当我们在 Holistics 放松下来,对数据进行哲学思考时,我们自己也经常对这种差异感到惊讶。

当我们在办公室的日常工作中在数据分析和产品开发之间跳跃时,数据和软件工程之间的差异就特别明显了——一方面,当处理数据时,我们要努力处理不太成熟、不太被广泛接受的最佳实践。(我们已经清楚地表明了我们对数据建模最佳实践历史的看法——我们认为它们都已经过时了)。然而,当我们在 Holistics 平台上进行产品开发时,我们使用 10 年前的开发方法,并且相信这种方法是可行的。在这两个领域之间工作感觉就像跨越了两个 GDP 差异很大的国家的边界。在过去的二十年里,软件工程已经有了过多的开发方法。敏捷宣言写于 2001 年。Github 创建于 2008 年。今天,我们或多或少知道了什么可行,什么不可行。数据就不一样了。

我的工作理论是这样的:我认为一个领域的发展与投入的资金数量相关。软件工程在 it 上的花费已经超过了数据分析。或者,更准确地说,软件工程是有时被视为利润中心,而数据是几乎总是视为成本中心。激励推动创新。

当然,这并不能解释一切。数据素养可能是这种差异的另一个原因——大多数组织发现承担软件工程更容易(我们现在在内部构建一些软件!)而不是数据驱动的思维(我们必须让每个人在决策中使用数据)。我怀疑 Palantir 之所以能把他们的工具造得如此之好,是因为他们卖给了情报机构和军事组织现有的数据文化。这些组织非常愿意使用数据来完成他们的工作,并愿意为此支付大笔费用,而在大多数公司中,数据素养和数据使用还不是一件大事。

正如数据科学家兰迪·奥在谈到过去两次被解雇时指出的:

被解雇仅仅意味着组织愿意在一段时间内盲目飞行,而没有详细的分析见解。当某个地方的经理需要达到削减的配额时,做出错误决策的风险(总是可以通过补丁修复)不值得我的工资。

有多少企业愿意打这个电话?我想有不少吧。

当然,我也不完全确定这些理由就是真相。其他整体论者有他们钟爱的理论。你可能有自己的一些理论。

我知道的是:如果有消费意愿,那么就应该有足够多的创新动力。对我们来说,幸运的是,如果雪花的 IPO 有任何迹象,那么未来的数据世界看起来很好。

为什么数据科学无法解决正确的问题?

原文:https://towardsdatascience.com/why-is-data-science-failing-to-solve-the-right-problems-7b5b6121e3b4?source=collection_archive---------19-----------------------

意见

别慌,一切都没丢。数据科学家和高管都有解决方案。

来源:https://blogs . Gartner . com/Andrew _ white/2019/01/03/our-top-data-and-analytics-predicts-for-2019/|作者图片

D ata 科学的存在的理由就是解决问题。然而,主要的声音(如 VentureBeatHBRGartner )表明,它在这一追求中失败了。作为一名数据科学家,我倾向于同意这个观点。但是,为什么呢?

让我从两个观察开始。

巴斯光年 效果

我们是一个新的行业。闪闪发光。闪烁的灯光。可伸展的翅膀。每个人都想要我们!

但是我们也遇到了所有新生思想流派都熟悉的初期问题。是的,我们正沿着数据价值链快速前进。部署数据驱动的解决方案变得越来越容易。但是我们的许多假设仅仅是:假设。未经测试和证明。

因此,尽管机会很多,乐观情绪很高,但我们必须防止过度销售和夸张。数据不是玩具。

数据科学家正在解决错误的问题

我相信数据科学家更多时候是试图解决错误的问题。

与我对我们的行业热点和成熟度的观察不同,这一点是方法和/或态度的结果。虽然对我们的专业来说,不断推进数据的进化包络很重要,但我们也需要优化和利用现有的解决方案来解决今天的问题。这从准确识别手头的业务问题开始,并从那里系统地工作。

商业问题是我们的试金石。不是数据。

重要的是,我们今天就能实现这一点。我们不必等待发明的翅膀。简单地说,答案在于加深商业和数据世界之间的理解(当然也可以说是共鸣)。

为了解决业务问题,数据科学家需要像企业主一样思考。我们需要对业务挑战感到兴奋,并充满热情来拓展我们的战略和运营技能。同样,我邀请我们的业务同事对这个新的数据世界更加好奇,并抓住与数据科学家交流和合作的机会——作为同行而不是处理者。

在这篇文章中,我提供了我的方法来解决正确的业务问题,同时提升数据的角色和业务影响。这种方法基于我在过去 10 年中参与的 100 多个数据项目。

注: 当然,今天也有数据科学家,他们的项目正在交付商业价值。企业应该积极寻找这些人(不,他们并不总是拥有最好学校的博士学位或简历上的虚假信息)。同样,有抱负的数据科学家也应该观察这些先驱并向他们学习,寻求快速吸收他们的错误和成功。

为什么数据科学家不能解决正确的问题?

如前所述,我认为我们总是无法识别正确的问题,因为我们没有参与更广泛的商业辩论。相反,我们就像一座孤岛,只有一座吊桥通往商业大陆。我们很少外出,除非受到邀请!

通常情况下,信息请求会落在我们的岛屿办公桌上,没有什么背景,但有明确的截止日期。因此,我们“拉起桥”希望加快进程,而不是降低我们的防御来质疑我们的同事,更好地了解需求或真正的业务问题。

这种孤岛现状毫无意义,尤其是考虑到我们对网络、共享基础设施和数字化的依赖和倡导。我们需要在交往中效仿斯德哥尔摩,而不是阿卡特兹。我们必须建立双向桥梁和关系堤道。

除非我们学会问更多的问题,否则我们总是会冒险投入时间、精力和才能去解决错误的问题。我们需要努力成为定义业务问题的讨论的一部分,并在确信我们有重要的事情要说时,准备好与我们的业务对手面对面交流。至关重要的是,我们还需要问一些令人羞愧的问题,这样我们才能快速学习,快速失败,并加速我们的迭代解决方案。

什么是正确的问题?

正确的问题是分析问题;业务问题的准确代理,其解决方案将影响最初的业务问题。

1.商业问题

我用来找到“正确问题”的框架非常简单。它始于一个业务问题,例如:

"我们需要增加每位顾客的平均销售额。"
“我们需要停止客户流失。”
“我们需要降低废品率。”
“我们需要提高数字营销的投资回报率。”

商业人士非常了解这些。数据科学家?没那么严重。

2.分析问题

数据科学家的真正工作是提出探索性的问题,将业务问题转化为明确定义的分析问题。现代科技有助于解决这个问题。学术论文和开源解决方案每个人都可以访问。越来越便宜的云存储和计算,以及 SaaS 现收现付的定价模式使得技术广泛可用。这里没有借口。

3.数据

一旦你定义了分析问题,问:需要什么数据来解决它?

然后确定数据是否可用,质量如何,可访问性如何(或者,是否可以获取或收集),获取数据的速度有多快,费用有多少。

业务问题定义问题;分析和数据提供了潜在的解决方案。

下面的简单模式概述了这个 3 步框架。但是不要被骗了。这是一个非常具有挑战性的过程。背景中的灰色箭头是杀手!虽然思考“哪个业务问题可以用令人兴奋的尖端方法解决”或“如何处理尘封数据库中的数据”很有诱惑力,但解决业务问题的系统方法都不是。你必须遵守纪律,从头开始,从 1 号开始。

业务问题定义了问题,分析和数据提供了潜在的解决方案。| 图文作者

这听起来很简单,为什么这么难呢?

因为我们是人。

在我们深入了解这个框架之前——多次遵循它并从我们的错误中学习——我们容易受到诱惑和捷径的影响。我们必须抵制回避困难对话的冲动,不要假装我们什么都懂,以免挫伤知识分子的自尊心。

让我分享几个有趣的例子,如果这个框架没有从左到右遵循,会出现什么问题。

过快地转向分析解决方案

数据科学家热爱分析和技术。但是,众所周知,爱情可以是盲目的。意思是,我们经常只看到我们想看到的或听到我们想听到的。对于热恋中的数据科学家来说也是如此。例如,如果他们目前沉迷于强化学习GPT-3,他们会倾向于将它视为他们面临的每个问题的第一解决方案。

未能证实理解

另一个问题是急于假设,而不是花时间去确认共同的理解。作为无畏的数据科学家,我们可能会假设:“哦,那听起来像一个客户流失模型,明白了!”构建了一个奇妙的模型后,却惊讶地发现它并不适用。别误会,模式是好的。其实很优秀。但是它没有解决实际的业务问题。

没有发挥我们的优势…

很多次,我听到商业领袖告诉我,他们需要(举例来说)一个:'推荐引擎,它考虑销售、客户评论和利润来对产品进行排名'然而,分析问题(推荐引擎)和数据(销售、评论和利润)应该来自业务问题。

作为一名数据科学家和功能专家,我敦促你质疑每一个已经为你解决了分析问题的实例。如果一个业务领导未能让你满意地概述框架的每个步骤,那么建议的分析问题很可能不是业务问题的解决方案,而是浪费时间和资源。

数据也是如此。例如,一位企业领导人可能会在他们最喜欢的高管杂志上读到关于的黑暗数据,并要求他们的数据科学家:“将黑暗数据减少 10%”。或者指导他们:“对用户评论数据做点什么”。通过这样做,他们押注于数据科学家对正确的业务问题进行优先排序的能力,而所有这一切都发生在他们的孤岛上,吊桥顽固地升起。提问;你是专家。简单。

“喜欢”的分析

同行压力是做所有“酷分析”的诱惑。初创企业尤其倾向于宣称“人工智能驱动的”,而大型企业则宣称“拥抱数据机遇”。我通常质疑所有这样的宣言。

如果分析不是通过更好的决策、提高运营效率或创造新的收入流来实际解决业务问题,那就是公关。

“数据”不是一种策略。

相反,数据使战略、创新、效率等得以实现

桥,不是岛

我再怎么强调造桥的类比也不为过。只有将数据、数据团队和数据洞察整合到更广泛的组织中,才能做出更好的决策。请记住,不是组织中的每个人都一定会被数据的价值所驱使。他们可能不了解数据,也可能不了解分析方法及其提供的内容,即使是高层次的了解。每位数据科学家的一个重要职责就是宣传数据的作用和力量。

如前所述,你的桥梁必须承载双向交通。同样重要的是,数据科学家要更好地理解业务问题。因为,如果他们不这样做,他们将无法在交流解决方案和最终价值时解释他们的分析选择和假设。

我坚定地认为,这一挑战直接摆在我们——数据科学家面前。我们需要通过首先了解业务问题来赢得同事和客户的信任。不是他们的业务问题。我们的业务问题。

然后,我们精心设计专业的解决方案,清楚地阐明它们是如何工作的,并关键地解释它们为什么以及何时不工作。

如何制定正确的问题?

现在让我分享一下我理解业务问题的方法,以确保我解决了正确的(分析)问题。

餐厅示例

想象一下,一位餐馆老板对你说,她需要正确处理库存,以避免原料耗尽或浪费过多。

照片由左 eris kallergisUnsplash 上拍摄

令人遗憾的是,餐馆生活并不是一场 Kaggle 竞赛,餐馆老板没有为你准备好数据或评估标准。所以,我们先把这个业务问题变成一个分析问题。

最大限度地了解业务问题

最初,我会问一些问题来理清问题,这样我就可以开始在脑海中构思一个潜在的解决方案。餐馆老板的挑战似乎很直观,但我们不要陷入假设陷阱!相反,比如我会问她:

“你会如何描述你的餐厅?”
“在餐饮业中,库存是如何运作的?”
“你怎么决定今天点什么?”
“做好订单最难的是什么?”
“什么是更大的问题:配料用完还是点太多?”
“订购流程是如何运作的?你多久能订购一次?而且提前多长时间?”

让我们假设我已经学会了以下几点:这是一个沙拉吧,所有的配料都必须是新鲜的。目前,她正在下订单,每周一次,下一周的每个星期五。根据每周的订单,每天都要交付配料。大多数沙拉都有相同的基本成分,如果特定的成分不够/用完了,顾客可以选择替代品。目前,如果她结束了前一周的食材短缺,减少了菜单,她会点更多的菜。相反,如果她有明显的浪费,她会少点一些。她的排序真的没有任何“科学”可言,而且每周都与前一周不同。

开始构思分析问题

从这些信息中,我们可以开始组合一个可能的解决方案,也许是一个需求预测模型,预测每天的顾客数量。该模型需要对未来九天进行准确预测。

代表问题的数据世界

下一步是就使用什么数据制定假设。同样,我会问这样的问题:

"根据你的经验,是什么影响了顾客的数量?"
“哪一天你的顾客最多:天气如何,当地有什么活动吗,还有什么能把食物带到你的餐馆的吗?”
“工作日里餐厅有空的时候吗?”

我可能会了解到:这取决于天气(当天气寒冷或下雨时,顾客较少);星期几;当地社交媒体美食页面上的评论;附近大学的活动;诸如此类。

同样,把你学到的任何东西都当作数据的假设。人们可能会告诉你,这似乎取决于天气,但没有人会说“10 毫米的早晨降水是关键!”即使他们知道,也要验证这个假设。

做一些研究,思考问题

然后做一些案头研究了解其他人如何处理相同或相似的问题是有帮助的。你可能会找到一些有用的资源,例如这篇文章这篇博客这篇文章

到现在为止,你应该对你头脑中的问题有一个坚实的理解。所以,重要的是你要概述和测试可能的解决方案。让思想伙伴挑战你的思维、假设和想法也是有帮助的。

我还会对可用的数据、格式和质量进行初步分析。但是在下一步之前没有什么太费时间的。

明确证实你的理解

现在,测试潜在解决方案是否基于对业务问题的共同理解是至关重要的。在你做任何事情之前,和餐馆老板再谈一次,向她解释你是如何构思这个问题的,你的假设是什么,你在做什么简化,你会考虑哪些关键影响因素。

确认输出的内容和格式也是非常有价值的。另外,她如何利用这些信息,技术上有什么限制等等。

作者提供的图片

解决问题

终于到了数据科学工作的时候了。继续获取数据,进行一些数据工程,训练和测试 ML 模型,部署它,创建 CI/CD 管道,将监控和触发置于适当的位置。

然后衡量业务影响,一次又一次地改进解决方案…

而且,尽管这一步显然是最基本的,但它也被许多受人尊敬的数据科学家广泛记录。站在他们的肩膀上,我想补充一句:数据科学是一门迭代的手艺。不要想多了。从某处开始。每重复一次,你会做得更好。

所以,总结一下,这里是我的建议:

  • 不要陷入“巴斯光年”效应。数据不是玩具。它是支持关键决策、优化和潜在收入流的战略工具。
  • ****从#1 开始。业务问题定义分析问题;分析和数据提供了潜在的解决方案。首先系统地了解业务问题。
  • ****造桥不造岛。您和您的数据团队融入更广泛的组织越多,成功的可能性就越大。慷慨分享你的见解,对商业问题保持好奇。
  • 做同行而不是处理器。提问。永远不要接受你没有参与设计的分析问题。

作者提供的图片

在整篇文章中,我使用术语数据科学家作为任何使用数据解决业务或现实世界问题的数据工作者的占位符。当然还有很多数据职业。麦肯锡用一个术语analytics translator来形容将业务问题转化为数据问题的人。大型企业可能会在这方面发挥特殊作用。我相信每个数据科学家都应该磨练这个技能。

由我出色的商业伙伴 切尔西·威尔金森 合著。

为什么数据科学正在失去魅力?

原文:https://towardsdatascience.com/why-is-data-science-losing-its-charm-3f7780b443f5?source=collection_archive---------0-----------------------

意见

数据科学曾经是最受欢迎的职业选择,但趋势正在改变。

Unsplash 上的procylink 访客管理系统拍摄

早些时候,每个计算机科学专业的学生都想在数据科学领域从事职业。这个领域也吸引了来自许多其他教育背景的学生。虽然围绕数据科学的宣传仍然存在,但这份工作简介并不容易为所有人所用。

过去的二十年是数据科学界的一场革命。过去二十年的发展是惊人的,让每个人都大吃一惊。数据科学的应用聚集了所有的行业,并迅速增加了对数据科学家的需求。

但是现在趋势正在改变。需求已经不像以前了。即使有对数据科学家的需求,人们要么缺乏技能,要么缺乏经验。当我看到社区失去魅力时,我试图列出我想到的所有潜在原因。

1.人们不能在这个领域开始他们的职业生涯。

一旦离开大学,人们希望以数据科学家的身份开始他们的职业生涯,但在大多数情况下,这份工作至少需要 2-3 年。人们不能直接从数据科学家开始,而必须以不同的方式开始他们的职业生涯。

公司不准备在新进人才上投入时间,相反,他们想要在该领域拥有优秀技能和经验的人才。虽然几乎所有的科技公司都有自己的数据科学部门,但其他没有数据科学部门的公司需要在这一领域有丰富经验的人来创建一个部门。

我认为只有一种方法可以帮助他们,那就是在他们学习和获得经验的同时进行实习,以满足公司的要求。

2.人们不知道数据分析师、业务分析师和数据科学家之间的区别

另一个主要原因是,如今的数据科学爱好者不知道该领域不同工作概况之间的区别。他们都想要“数据科学家”的头衔,却不知道数据科学家的实际工作是什么。他们错误地认为数据分析师、业务分析师和数据科学家是相似的。

在不知道自己想做什么的情况下,他们申请了自己并不完全适合的职位,最终空手而归。

3.人们发现数据科学太容易了

人们直接开始研究学习算法,调整数据的方法,但他们没有考虑算法背后的数学。凭借一般的编程知识和机器学习算法的知识,他们认为自己已经准备好面对现实世界的问题。

人们通常忽略统计,实际的艰苦工作只是因为他们不觉得有趣。数据科学就是这样一个发展没有停滞的领域。在过去的 2-3 年里,自然语言处理取得了巨大的发展。一个人必须用最先进的模型来更新自己。

人们也发现数据科学很容易,因为他们没有处理过现实生活中的数据。他们花了这么多年来学习,研究结构化数据或一些可供人们学习的预处理数据。

另一方面,现实世界中几乎 99%的数据是非结构化的。数据科学家需要花大部分时间对数据进行预处理,这样才能从数据中提取出有意义的东西。

4.AutoML 让求职之路变得更加艰难。

科技巨头谷歌、微软一推出 AutoML,就震动了有抱负的数据科学家。公司的兴趣和好奇心增长到 AutoML,而数据科学家担心失去工作。

AutoML 正在将机器学习应用于数据集的过程自动化。AutoML 可以对数据进行预处理和转换。它可以涵盖从处理原始数据到部署机器学习算法的完整管道。

自动机器人擅长建立模型,但在预处理方面,它们无法超越人类。数据科学家的主要工作是对数据进行预处理。很明显,到目前为止,AutoMLs 还不能取代人类数据科学家。

尽管汽车降低成本这一事实不容忽视。美国数据科学家的平均年薪约为 12 万美元,而谷歌和微软 AutoMLs 的年成本约为 4-4 万美元。

尽管不能否认数据科学家在预处理数据方面的有效性,因为现实世界中的数据是非结构化的,需要大量的预处理。

要学的东西太多了,没有人愿意做艰苦的工作。对于一个人来说,从基础做起并在这个领域出类拔萃是很难的。这需要很多时间,人们需要耐心。这一领域有很大的发展空间,但缺乏具备所需实际技能的人才正从数据科学领域夺走最有前途工作的头衔,人们正在远离它。

为什么高斯是所有分布之王?

原文:https://towardsdatascience.com/why-is-gaussian-the-king-of-all-distributions-c45e0fe8a6e5?source=collection_archive---------20-----------------------

高斯分布的显著性

来源:豆机被称为正态随机变量的第一生成器

高斯分布及其关键特征:

  • 高斯分布是一种连续的概率分布,其中心两侧对称。
  • 它的均值、中值和众数相等。
  • 其形状如下图所示,大部分数据点聚集在均值周围,具有渐近尾部。

来源

释义:

  • 约 68%的正态分布值位于 1𝜎境内
  • 约 95%的正态分布值位于 2𝜎境内
  • 约 99.7%的正态分布值位于 3𝜎境内

我们从哪里找到高斯分布的存在?

不管是不是传销从业者,我们几乎都在某个地方听说过这种最流行的销售形式。环顾四周,大多数过程都遵循近似高斯形式,例如年龄、身高、智商、记忆力等。

从轻松的角度来说,有一个众所周知的高斯分布的例子潜伏在我们周围,即评估期间的“钟形曲线”😊

是的,高斯分布经常与钟形曲线发生共振,其概率密度函数由以下数学公式表示:

高斯分布的概率密度函数

符号:

具有平均𝜇和方差𝜎的随机变量 x 表示为:

服从正态分布的随机变量 X

高斯分布有什么特别之处?为什么我们几乎处处都能找到高斯?

每当我们需要表示分布未知的实值随机变量时,我们就假定它是高斯型的。

这种行为很大程度上归功于中心极限定理(CLT) ,它涉及到对多个随机变量之和的研究。

根据 CLT:多个随机变量的归一化和,不管它们原本属于哪个分布,随着和中项数的增加,收敛到高斯分布

需要注意的重要一点是,CLT 在 30 个观测值的样本量下是有效的,即,如果我们有 30 个观测值的最小样本量,可以安全地假设采样分布遵循高斯形式。

因此,许多独立过程的总和的任何物理量被假定为遵循高斯分布。例如,“在典型的机器学习框架中,可能存在多种错误来源——数据输入错误、数据测量错误、分类错误等”。所有这些形式的误差的累积效应可能遵循正态分布”

让我们用 python 来检查一下:

步骤:

  • 从指数分布中抽取 n 个样本
  • 归一化 n 个样本的总和
  • 重复上述步骤 N 次
  • 继续在 sum_list 中存储规范化的总和
  • 最后,绘制归一化 sum_list 的直方图
  • 输出严格遵循高斯分布,如下所示:

从服从高斯分布的指数分布中抽取的 30 个样本的归一化总和

类似地,还有其他几种分布,如学生 t 分布、卡方分布、f 分布等,它们对高斯分布有很强的依赖性。例如,与高斯分布相比,t 分布是高斯分布无限混合的结果,导致更长的尾部。

高斯分布的性质:

1)仿射变换:

这是一个简单的变换,将随机变量乘以一个标量“a ”,再加上另一个标量“b”。

得到的分布是具有平均值的高斯分布:

如果 X ~ N(𝜇,𝜎),那么对于任意一个 a,b ∈ ℝ,

a.x+b~n(一个𝜇+b,一个.𝜎)

注意,不是所有的变换都导致高斯,例如,高斯的平方不会导致高斯。

2) 标准化:

如果我们有两组观察值,每组都来自具有不同平均值和 sigma 的正态分布,那么我们如何比较这两组观察值来计算它们总体的概率?

因此,我们需要将上面提到的观察值转换成 Z 分数。这一过程被称为标准化,它根据原始观测值的平均值和总体标准差对原始观测值进行调整,并将其纳入一个共同的尺度

z 得分

3)

4)集合的边际分布也是高斯分布

5)高斯分布是自共轭的,即给定高斯似然函数,选择高斯先验将导致高斯后验。

6)两个独立的高斯随机变量的和与差是一个高斯

高斯分布的局限性:

  1. 简单的高斯分布无法捕捉以下结构:

来自模式识别和机器学习的高斯混合

这种结构最好用两个高斯的线性组合来表征(也称为高斯混合)。然而,估计这种高斯混合模型的参数是很复杂的。

2)高斯分布是单峰的,即它不能提供对多峰分布的良好近似,从而限制了它能充分表示的分布范围。

3)自由度随着维数的增加而平方增长。这导致对如此大的协方差矩阵求逆的高计算复杂度。

希望这篇文章能让你先睹为快高斯分布的世界。

快乐阅读!!!

参考资料:

为什么很难建立人工智能和数据网络效果

原文:https://towardsdatascience.com/why-is-it-hard-to-build-ai-data-network-effects-fa010497e2cb?source=collection_archive---------27-----------------------

用人工智能构建数据网络效果的局限性、陷阱和挑战

图片:马特·麦克莱恩/华盛顿邮报通过盖蒂图片社

在完成了几个 AI 任务后,我意识到大多数公司都在追逐同一件事:数据网络效应。很难想象有哪家企业不迫切需要数字化其运营模式,并通过更好地利用数据来应对新的威胁...

我想写这篇文章来强调达到这种数据水平是多么困难&人工智能成熟度以及一家愿意建立人工智能的公司需要完成什么。

事实上,对大公司来说,实现商业模式现代化和建立专有数据集已经成为当务之急。虽然科技公司正在人工智能工具包上投入大量资金以吸引云计算客户,但数据集正成为区分的战略要素。

数据网络效应是一种产品的属性,由于数据段之间的紧急关系,随着可用数据的增加而改善。

数据网络效应使公司具有防御性,因为一旦你领先,竞争对手很难再为用户增加同样多的价值,而防御性创造价值。此外,当数据网络效应产生效果时,转换成本会变得更高。这往往会造成客户锁定效应。

网络效应和数据网络效应通常是相互联系和相互加强的,因为每一种效应都使产品更有价值,从而吸引更多的客户和数据。

真正相关的数据优势不仅仅来自于收集最大量的数据。最佳数据策略与特定的问题领域密切相关,在该领域中,独特的、新的数据在为客户解决问题时具有复合价值。

我在物联网部门工作了很长时间,我可以向你保证,数据网络效应与长期防御能力尤其相关。的确,我们意识到,硬件往往或多或少是抄袭的。然而,物联网公司有机会从每个客户那里获得洞察力,这将越来越难以复制。最终,真正的价值建立在软件和数据层面。

所有数据战略都必须与更全面的产品、技术或商业故事相联系。

数据壕沟

在讨论数据网络效应之前,有必要引入数据壕沟的概念。

数据壕沟描述了企业因其专有数据集而拥有的竞争优势。

简而言之,它是更传统的“护城河”的延伸,如供应商锁定、品牌、规模效率等。理想情况下,数据护城河可以保护赢得的市场地位免受竞争。我们通常认为强大的数据护城河是这样一个数据集:

-大型
-无法合成或统计复制
-其他公司难以收购。

为什么很难建立数据网络效果?

1.数据文化和期望

在我看来,首先出现的问题往往是缺乏真正的数据文化和不切实际的目标。我认为,如果没有一种以数据为中心的文化来优先考虑数据的有效使用,就不会有相关的数据网络效应。

没有正确的文化,数据是没有用的。

此外,重要的是要知道,人工智能驱动的运营模式通常需要一段时间才能产生类似于更传统的运营模式在规模上产生的价值的经济价值。根据我的经验,数据网络效应在达到临界质量之前几乎没有价值,大多数新应用的算法在获得足够的数据之前都会遭遇“冷启动”。

此外,如果数据对你的产品来说只是边缘性的,那么数据网络的影响就不会很重要。根据 James Currier 在《T2》上发表的文章,当网飞向你推荐一个节目时,这个算法是基于用户的观看数据进行推荐的。但是网飞的发现功能是边际的;它的真正价值来自于电视剧、电影、纪录片的库存。所以网飞只具有边际数据网络效应。

同样,产品使用和收集的有用的新数据之间的关系可能是不对称的。Yelp 有一种数据网络效应,因为更多餐馆的更多评论使产品更有价值。但由于只有一小部分用户产生数据,其网络效应被削弱;大多数人从 Yelp 数据库中读取数据,但不会向其中写入数据。

如果一个产品在增加的使用量和更有用的数据生产之间没有关系,那么就没有网络效应。

2.与数据和闭环系统的关系

在构建数据网络效应时,企业往往过于依赖自己的专有数据。实际上,目标应该是使用额外的数据源来改进您的模型。一般来说,您拥有的数据源越广泛,您就可以越准确地为您的环境建模并做出准确的预测。

根据您的领域,一个好的数据策略应该包括与您的产品或服务周围的世界(天气等)相关的数据。),以及用户如何与您的产品交互的数据,尤其是与您可能已经建模为预期行为的相关数据。

这听起来可能很明显,但是当你收集数据并将其应用到你的产品中时,你是在预测用户的期望。从这个意义上说,系统不断地试图预测用户想要什么,并根据需要提出建议或定制。因此,你增加价值的唯一方法就是知道之前的预测是否正确

不用说,如果你没有通过这一部分,你将无法从数据网络效应中获益。我们总是花时间确保我们有定义良好的指标。例如,如果您试图通过数据网络效应(通过修改数据和模型)来改进您的推荐系统,那么能够测量和评估新数据的积极或消极影响是关键。

3.改进与时间

需要记住的另一个有趣的元素是,当数据集达到一定大小时,随着数据集的增长,算法不再有意义地改进。现实情况是,大多数数据网络效应都难以应对这一点。

此外,数据网络效应减弱的临界点因领域而异。随着数据湖的增长和竞争对手缩小差距,可防御的护城河非但没有变得更强,反而被侵蚀了。

当你收集数据时,数据也会变得越来越没有价值。

如果您获得的一些新数据已经与您现有的数据重叠,那么数据将产生较少的价值。新数据的优势下降。

在某个点上,新数据的价值下降,要么直接对用户,要么对产品/模型开发(根据这个研究,有时,更好的效果来自增加模型的复杂性,而不是来自注入更多的数据)。

在我们最新的项目中,早期的新数据应用于我们的整个客户群。然而,几个月后,收集的新数据只适用于与特殊用例相关的小子集。

随着数据集的扩大,任何数据规模效应护城河也会变得越来越没有价值。

此外,随着时间的推移,保持现有数据优势所需的工作量会随着规模的扩大而增加。成本结构可能会成为一个问题……此外,合成数据可以帮助公司缩小差距。更广泛的数据可用性和处理数据的工具越来越受欢迎,使得数据收集网络效应不那么有吸引力,因为它需要更少的时间来破坏先发优势。

4.自动化和范围

从运营的角度来看,数据网络效应至少需要一定程度的自动化产品化。你在循环中加入的自动化越多,人工智能的良性循环就变得越有效。

此外,产品的范围越窄,机器学习驱动其价值的程度越大,就越容易将这些优势捆绑在一起,通过数据网络效应创造竞争优势。

5.数据类型

从新用户处收集的数据必须是正确的类型和足够的数量,以实现数据网络效果。这种学习必须得到足够有效的优化,以创造新的产品价值。而这个价值必须足够强大,足够好的产品化,才能吸引更多的客户。这个链条的任何断裂都意味着没有自我强化循环,因此没有学习效果。

实际上,我建议公司建立数据网络效应,并将其与市场营销和客户保持的投资相结合,以围绕其商业模式创建一条护城河。

6。学习曲线

当你的产品的学习曲线足够长、足够陡,使你能够在一个较长的时期内提供递增的产品价值时,数据网络效应往往会更好地发挥作用。

事实上,建立在高度动态数据集上的产品更容易有永久的学习曲线。因此,它们总是可以通过数据得到有意义的改进。这类产品最适合寻求从数据网络效应中获益的公司。

7.数据冗余和偏差

在某些情况下,随着规模的扩大和网络的增长,每个新交互所贡献的新数据与目前已经收集的数据相比变得更加冗余。

此外,当处理物理世界时,您肯定会收集偏见,这些偏见通常会累积并最终开始对您的模型的性能产生真正的影响。

8。数量与质量

即使数据被用于机器学习项目,数据集的大小也只是故事的一部分。数据集的价值,数据护城河的力量,来源于上下文。

事实上,一些业务问题需要模型被训练到很高的精确度,然后才能为客户提供任何价值,或者甚至得到管理层的批准,而其他问题则几乎不需要。此外,一些数据集是真正专有的,而另一些数据集很容易被复制。一些数据的价值会随着时间而衰减,而另一些数据集则不会。应用程序决定了数据的价值和数据网络效应的强度。

事实是,根据您的项目,数据网络效果可能无法实现。鉴于当前的技术水平,一些业务问题过于复杂,无法完全建模;在这种情况下,大量的数据将无济于事。添加数据可能会提高模型的性能,但很快就会遭遇边际收益递减。

另一个有趣的元素是模型稳定性。根据上下文的不同,数据集相关性会随着时间的推移而变化,如果模型不随之变化,模型将会衰退。

模型衰退(也称模型故障)是对已经部署(运行中)的模型的病理的非正式描述,由此模型的性能可能会恶化到模型不再适用的程度。换句话说,模型的预测将不再可靠。

保持模型稳定需要以与环境变化相同的速率处理新的相关训练数据。我们将这种数据采集速率称为稳定性阈值。

易腐数据并不能构成一个很好的数据壕沟。另一方面,容易获得新数据可能是进入的战略障碍。

从战略的角度来看,需要更少数据来达到高精度和保持高性能的业务应用程序并不具有很强的防御能力。事实上,新进入者可以轻松积累足够的数据并匹配您的解决方案。

数据策略的重要性

构建可靠的数据策略非常复杂,不仅仅是收集数据。我认为最重要的问题是确定数据将如何对给定的产品做出贡献。在现实中,选择算法或其他产品功能调整的影响远远大于仅仅拥有更多数据。

数据护城河需要两个基本要素

在我看来,一个成功的战略是寻求数据网络效应的创造,以及对理解领域的坚实思考

拥有更多数据并不一定会转化为价值,而且收集更多有用的数据并不总是容易的,即使数据是产品的核心。

数据网络效应可能会与规模带来的数据优势相混淆。你应该问自己的问题是:

-这些数据是否为客户/用户创造了有意义的价值?
-如果是,使用量的增加是否会带来更多有用的数据?

如果你想了解更多关于数据网络效应和数据护城河的知识,我给你推荐几篇文章:
--【https://www.nfx.com/post/network-effects-bible】-https://www.nfx.com/post/network-effects-manual
-https://techcrunch.com/2018/03/27/data-is-not-the-new-oil/
-https://mattturck.com/the-power-of-data-network-effects/-
-https://a16z.com/2019/05/09/data-network-effects-moats/
-https://outlast.me/robot-hiveminds-with-network-effects/

为什么线性代数教的这么差?

原文:https://towardsdatascience.com/why-is-linear-algebra-taught-so-badly-5c215710ca2c?source=collection_archive---------0-----------------------

线性代数是机器学习的基石之一。这比你想象的更直观

我意识到用非平行线来说明一个关于线性代数的博客是一种讽刺。图像:像素

这是给你的一道简单的数学题。如果你能把这两个矩阵相乘,请举手:

恭喜你,如果你说:

如果你知道为什么,请举手。我说的“为什么”并不是因为:

虽然在数学上是正确的,但这个公式更多地描述了“如何”,而不是“为什么”。就其本身而言,这个公式几乎缺乏直觉。

然而,这就是矩阵乘法几乎总是被教授的方式。记住公式。在考试中使用它。利润?这当然是我的经历,第一次学习线性代数是在 16 岁,然后在一所表面上世界领先的大学攻读数学学士学位。

还有一个问题给你:下面这个矩阵的行列式是什么?

如果你说 2,那恭喜你。但是你也许能猜到我要说什么。我们知道对于一个 2x2 矩阵,行列式由以下公式给出:

但是为什么是?就此而言,什么是行列式?我们被告知它有几个有用的特性(例如,如果你试图用降行来解线性方程组,0 的行列式就是一个危险信号)。但是在我大学选修的两个线性代数必修模块中(我怀疑该机构的声誉依赖于其在研究方面的卓越,而不是教学),矩阵的行列式从未在表面水平之外的任何地方被语境化或解释过。

从“如何”到“为什么”

这种略显功利的线性代数教学态度显然是有问题的。数学是一门依赖于“增量”学习的学科——获取新知识通常需要你建立在你已经知道的基础上。如果你的理论基础是建立在死记硬背和将数字插入公式的基础上,而没有对实际发生的事情进行更深入的欣赏和理解,那么它们往往会在像机器学习这样沉重的东西的重压下倒下。

在这一点上,我要提到这个博客的灵感很大程度上来自格兰特·桑德森制作的一系列视频。对于那些不熟悉他的工作的人来说,桑德森创建了非常好的动画视频,使得复杂的数学主题对于受过教育的门外汉来说是容易理解的(他解释神经网络加密货币的视频非常值得你花时间)。

在其核心,桑德森的'线性代数的本质'系列试图介绍,激励和概念化线性代数方面的线性变换及其相关的可视化的许多基本思想。事实证明,这是一个非常有用的方法,可以让你了解许多核心的基本原理。

“这里的目标不是试图教你所有的东西,而是你带着强烈的直觉离开…这些直觉让你未来的学习更有成效…”—格兰特·桑德森

矩阵乘法到底是什么?

在回答这个问题之前,我们先退一步,想想什么是线性变换。为了简单起见,让我们将事情保持在二维空间中(尽管以下内容也适用于更高维空间)。

线性变换是改变“空间”(在这种情况下,是 2D 平面)形状的一种方式,通过这种方式:

  • 保持平行线平行
  • 在原本等距的平行线之间保持相等的距离
  • 将原点保留在原点

概括地说,这为我们提供了三种不同类型的线性变换:

  • 旋转

  • 缩放(减少或增加平行线之间的间距)。注意——这也考虑了 x 轴或 y 轴上的反射,它们只是具有负比例因子。

  • 和剪切线(注意这如何保持平行线之间的相等距离)

这三种类型操作的任何组合就其本身而言也是线性变换(稍后将详细介绍这一思想)。

证明向量乘法

虽然上面的这些插图是为了演示线性变换影响整个 2D 空间的事实,但我们可以根据它们对两个“单位向量”的作用来描述它们,这两个“单位向量”分别称为(I-hat)和 ĵ (j-hat)。

我们可以深入了解更多细节,但本质上,这是由这样一个事实驱动的,即您可以通过ĵ 的线性组合到达 2D 平面上的任何点(例如,向量v【3】,-2】将简单地等同于 3 批加上-2 批**ĵ)。****

假设我们想考虑一个线性变换,将所有东西逆时针旋转四分之一圈。我们的向量, v 会怎么样?事实证明,我们可以描述 v 发生了什么,纯粹是根据ĵ.发生了什么**

回想一下 v ,【3,-2】,被给定为 3 手*加-2 手ĵ的。嗯,原来,转化的 v 相当于 3 手转化的加-2 手转化的ĵ*。******

用桑德森的话说,这行字:

transformed_v = 3*[0,1] + (-2)*[-1,0]

是“所有的直觉在哪里”。

具体来说,我们可以将“转换后的和“转换后的 ĵ ”的向量放在一起,形成一个 2x2 矩阵,参考这个更“直观”的视图,看看会发生什么,突然之间,我们就证明了向量乘法是正确的。

证明矩阵乘法

那么,我们之前研究过的两个 2x2 矩阵的乘法呢?

我们刚刚证明了一个 2x2 矩阵必然代表 2D 空间中的某种线性变换。特别地,对于一个给定的矩阵[[a,b],[c,d]],向量[a,c]和[b,d]分别代表'变换的'和'变换的 ĵ '的坐标。****

假设我们想一个接一个地做两个线性变换。为了说明,让我们假设我们执行我们之前看到的逆时针四分之一转,并在 x 轴上进行反射。这两种变换都可以用 2×2 矩阵来表示。我们已经知道了表示旋转的矩阵,那么反射呢?我们可以使用和以前一样的技术——观察ĵ.会发生什么

当然,不变, ĵ 变为负数。我们之前已经展示过,我们可以将这些“转换的和“转换的 ĵ ”向量放在一起,形成代表整体转换的矩阵。****

那么我们该如何思考两个变换相继进行的情况;先是旋转,然后是反射?我们可以用和以前一样的方法来处理这个问题——看看ĵ.会发生什么

从前面我们知道,从[1,0]到[0,1],旋转需要T5。如果我们想要将反射应用到这个“转换的T7”,我们只需要将代表这个反射的矩阵乘以代表“转换的*T9”的向量0,1***

当然,我们现在需要使用相同的推理来观察 ĵ 发生了什么。

现在我们知道了以及 ĵ 在一个接一个地经历旋转和反射变换后会发生什么,我们可以把这两个向量放在一起,用一个矩阵来描述累积效应。

这看起来非常像矩阵乘法的标准公式。当然,你可以用任何序列的线性变换来尝试这个思想实验。通过跟踪发生在ĵ 身上的事情,你可以有效地。

值得注意的是,通过从顺序线性变换的角度考虑矩阵乘法,证明矩阵乘法的标准规则是非常容易的。对于三个不同的矩阵 A、B 和 C,思考为什么以下属性成立:

  • AB ≠ BA
  • A(BC) = (AB)C
  • A(B+C) = AB + A*C

行列式呢?

在博客的开始,我展示了如何机械地计算行列式。然后我问为什么这个公式成立(就此而言,行列式甚至是什么)。我在另一篇博客中提到了这一点,但是,剧透一下,一个 2x2 矩阵的行列式仅仅代表了 2D 空间中给定区域在矩阵变换后增加或减少的比例。

不无道理的是,YouTube 上桑德森关于行列式的视频评论充斥着许多人,他们困惑于为什么在教授时不经常提到这个问题,因为这是一个如此直观的概念。我不能责怪他们。

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

为什么 Logistic 回归是二项式回归模型的代言人?

原文:https://towardsdatascience.com/why-is-logistic-regression-the-spokesperson-of-binomial-regression-models-54a65a3f368e?source=collection_archive---------20-----------------------

广义线性模型

浅谈二项式回归模型及其连接函数

菲尔·博塔在 Unsplash 上的照片

我们日常生活中的许多事件都遵循二项式分布,该分布描述了一系列独立伯努利实验的成功次数。

例如,假设詹姆斯·哈登投篮的概率是恒定的,并且每次投篮都是独立的,那么投篮命中率就遵循二项式分布。

如果我们想找出一个二项分布变量 Y 的成功概率( p )与一系列自变量 xs 之间的关系,二项式回归模型是我们的首选。

链接函数是二项式回归和线性回归模型之间的主要区别。具体来说,线性回归模型直接使用 p 作为响应变量。

线性回归

线性回归的问题是它的响应值没有界限。然而,二项式回归使用 p 的链接函数( l )作为响应变量。

带连接函数的二项式回归

链接函数将 x s 的线性组合映射到一个介于 0 和 1 之间但不会达到 0 或 1 的值。基于这样的标准,主要有三种常见的选择:

二项式回归链接函数

当链接函数是 logit 函数时,二项式回归就变成了众所周知的 logistic 回归。作为数据科学书籍中最早的分类器之一,逻辑回归无疑成为了二项式回归模型的代言人。主要有三个原因。

1\. Applicable to more general cases.2\. Easy interpretation.3\. Works in retrospective studies.

让我们详细检查一下。

极值分布?不完全是。

互补对数-对数模型的一个主要区别是,概率单位和对数函数是对称的,但互补对数-对数函数是非对称的。

**# R code**
eq = function(x){log(x/(1-x))}
curve(eq, xlab="probability", ylab="l(probability)",col="red",lwd=2)
curve(qnorm,add = T,lty="dashed",col="blue",lwd=2)
curve(cloglog,add=T,lty="dotted",col="green",lwd=2)
abline(v=0.5,lty="dashed",col="grey")
legend("topleft",legend=c("logit","probit","cloglog"),lty = c("solid","dashed","dotted"),col = c("red","blue","green"),lwd=2)

链接函数的曲线。对称:logit(红色)和 probit(蓝色);不对称:绿色

具体来说,我们可以看到对称函数(logit 和 probit)在 p =0.5 的位置相交。但是 cloglog 函数在概率上有不同的趋近 0 和 1 的速率。有了这样一个特性,cloglog link 函数总是用在极端事件上,在这种情况下,事件的概率接近 0 或 1。

事实上,我们几乎不可能用有限的数据做出极值分布的假设。因此,在大多数情况下,二项式回归模型不选择 cloglog 链接函数。

换句话说,logit 和 probit 模型可以应用于比 cloglog 模型更普遍的情况。接下来让我们看看 logit 模型相对于 probit 模型的优势。

Z 评分增加β单位??奇怪。

逻辑回归比概率回归应用更广泛,因为它易于解释,这得益于优势的概念。

有趣的是,在我们的日常生活中,赔率有时比概率更频繁地被使用,因为它更好地代表了机会,例如NBA 季后赛的赌注。赔率( o )和概率( p )之间的关系可以用下面的等式来描述。

赔率和概率

逻辑回归可以改写为,

带优势的 logistic 回归模型。

上面的模型解读起来超级简单。例如,在所有其他独立变量固定的情况下,x1 增加一个单位会使成功的对数几率增加β1。

然而,概率单位模型的解释并不简单。概率单位链接函数计算概率的 Z 值。因此,对同一示例的解释应该是,在所有其他自变量固定的情况下,x1 增加一个单位会使 Z 得分增加β1。

如果季后赛投丨注丨网丨站说“湖人赢得半决赛系列赛的 Z 分是 1.65!”,很少有篮球迷会因为他/她的统计学专业而称赞网站跑者。

固定预测因子和观察结果?事实并非如此。

在大多数实际情况下,数据来自回顾性抽样而不是前瞻性抽样。在回顾性研究中,结果是固定的,预测因子是观察和收集的,然而,在前瞻性研究中,预测因子是固定的,结果是观察的。

例如,如果我们对狗癌症和只吃狗粮之间的关系感兴趣,我们首先收集 10 只不同品种的狗,给一半的狗只喂狗粮,另一半喂混合食物。然后我们跟踪五年后这些狗的健康状况。这种类型的研究是前瞻性的研究,非常理想,但速度缓慢。

然而,一个更便宜和更快的方法应该是,我们找到一些患有癌症的狗,我们检查过去五年的喂养记录,并在我们的二项式模型中将它们与一组健康的狗进行比较。这种类型的研究是回顾性研究。

假设 α1 是狗没有患癌症时被纳入回顾性研究的概率,而 α0 是狗患癌症时被纳入的概率。在前瞻性研究中,我们总是可以假设 α1 = α0 ,因为我们还没有看到结果。

但在回顾性研究中,α1 通常远大于α0,情况并非如此。

让我们用贝叶斯定理来描述一只狗得癌症的条件概率( p* )假设它被纳入研究,和这只狗得癌症的无条件概率( p )之间的关系。

假设研究中包括了狗患癌症的条件概率

应用 logit link 函数后,我们有

条件概率的 logit 函数

上面的等式清楚地表明,前瞻性研究和回顾性研究之间的差异是 log( α1/α0 ),它只影响二项式模型的截距项。

logit 链接函数的优势在于,即使在回顾性研究中,我们也不需要担心截距项,因为我们关注的是独立变量对几率的相对影响。

换句话说,即使在回顾性研究中不可能知道 log( α1/α0 )(或对β0 的调整),它也不能阻止我们估计 logistic 模型的系数(其他β)。此功能对于概率单位链接函数无效。

摘要

逻辑回归是二项式回归模型中的一种,它使用 logit 作为其连接函数。它优于其他链接功能,因为它的易于解释并且在回顾性研究中有用。

奖金

其他链接功能都没用吗?不,用下面的代码试试挑战者号的灾难数据,你会发现 cloglog 模型在有链接函数的二项式模型中获得了最小的 AIC。

**# R code** library(faraway)
data(orings)
logit_m = glm(cbind(damage, 6-damage) ~ temp, family=binomial(link = logit), orings)
probit_m = glm(cbind(damage, 6-damage) ~ temp, family=binomial(link=probit), orings)
clog_m = glm(cbind(damage, 6-damage) ~ temp, family=binomial(link=cloglog), orings)summary(logit_m)
summary(probit_m)
summary(clog_m)

我希望你喜欢阅读这篇文章。

参考

遥远,Julian J. 用 R 扩展线性模型:广义线性、混合效应和非参数回归模型。CRC 出版社,2016。

[## 概率回归| Stata 数据分析示例

样本大小:概率和对数模型都比 OLS 回归需要更多的案例,因为它们使用最大似然法…

stats.idre.ucla.edu](https://stats.idre.ucla.edu/stata/dae/probit-regression/) [## Logit 回归| R 数据分析示例

逻辑回归,也称为 logit 模型,用于模拟二分结果变量。在 logit 模型中…

stats.idre.ucla.edu](https://stats.idre.ucla.edu/r/dae/logit-regression/) [## 二元回归的概率单位和互补双对数模型

Logit:误差具有标准的逻辑分布 Probit:误差具有标准的正态分布…

www.datasklr.com](https://www.datasklr.com/logistic-regression/probit-and-complimentary-log-log-models-for-binary-regression)

彼得·罗伊德在 Unsplash 上的照片

为什么数学对你的人工智能职业生涯至关重要?

原文:https://towardsdatascience.com/why-is-mathematics-vital-to-thrive-in-your-ai-career-c11bd8446ddc?source=collection_archive---------4-----------------------

数学是上帝用来书写宇宙的语言——伽利略·伽利雷

我们在科幻电影里看到的未来就在这里。从虚拟现实到功能性小工具,人工智能已经以前所未有的方式入侵了我们的生活。在迅速发展的技术领域,人工智能工具和聊天机器人已经处于突破的边缘。

AI 不是魔法;只是数学而已。

思维机器背后的想法和模仿人类行为的可能性是在数学概念的帮助下完成的。

人工智能和数学是同一棵树的两个分枝。而如果你想在你的 AI 生涯中茁壮成长,你需要学习数学;仅仅是科幻迷是不够的。

如果你打算建立一个人工智能职业生涯,并在该领域的招聘中占据主导地位,那么和数学做朋友吧,它将震撼你的世界。

作为一名数学家和人工智能的粉丝,我想分享一下 AI 和数学之间的神奇联系。

让我们深入迷人的领域。

人工智能和数学有什么联系?

人工智能问题分为两大类:搜索问题和表示问题。紧随其后的是互连的模型和工具,如规则、框架、逻辑和网络。都是很数学的题目。

人工智能的首要目的是创造一个人类理解的可接受的模型。这些模型可以用不同数学分支的思想和策略来准备。

考虑自动驾驶汽车;他们的目标是识别视频图像中的物体和人。在这些汽车的背后,有着最小化程序和反向传播形式的数学。数学帮助人工智能科学家使用数百年来已知的传统方法和技术解决具有挑战性的深度抽象问题。

人工智能用的是什么数学?

在所有重大进步的背后,都有数学。线性代数、微积分、博弈论、概率、统计、高级逻辑回归和梯度下降的概念都是主要的数据科学基础。

数学有助于理解逻辑推理和对细节的关注。它增强了你在压力下思考的能力,增加了你的精神耐力。数学概念给出假设或虚拟问题的真实解。它是关于结构和发展的原则,即使你对组件做了任何改变,这些原则仍然是正确的。

构成人工智能繁荣事业的三个主要数学分支是线性代数、微积分和概率。

线性代数

线性代数是应用数学领域,是人工智能专家离不开的。不掌握这个领域,你永远不会成为一个好的人工智能专家。正如斯凯勒·斯皮克曼所说,

“线性代数是 21 世纪的数学。”

线性代数有助于产生新的想法,这就是为什么它是人工智能科学家和研究人员必须学习的东西。他们可以用标量、向量、张量、矩阵、集合和序列、拓扑、博弈论、图论、函数、线性变换、特征值和特征向量等概念抽象数据和模型。

矢量

在线性规划中,为了符号的方便,向量被用来处理不等式和方程组。人工智能科学家使用不同的向量技术来解决回归、聚类、语音识别和机器翻译问题。这些概念还用于存储人工智能模型的内部表示,如线性分类器和深度学习网络。

矩阵理论

在科幻电影中,你通常会看到,通过执行一些类似于神经系统的计算结构,通过生成神经元之间的连接来匹配人脑的推理方式,从而产生了神经网络。矩阵的概念用于神经网络的研究。

通过在三层中形成人工神经元,可以在神经网络中实现非线性假设:

1.输入层

2.隐藏层

3.输出层

人工智能科学家根据隐藏层的数量和连接方式对神经网络进行分类。

真实神经元

人工神经元

这些人工神经元可以形成神经网络,这花了大约 20 年时间才发现。

特征值和特征向量

搜索引擎排名的科学是基于数学科学 。页面排名,这是谷歌作为一家公司的基础,是基于数学的角度。页面排名是一种算法,最初由拉里·佩奇和谢尔盖·布林在他们的研究论文“大规模超文本网络搜索引擎的剖析”中提出。几百年前就为人所知的主特征值和特征向量的基本概念的应用,被用于这一巨大突破的背后。

机器人爬虫首先检索网页,然后通过分配页面等级值对它们进行索引和分类。每个页面的可信度取决于该页面的链接数量。

给定页面 P 的等级 r (P)被假设为,

在哪里,

Bp =指向 P 的所有页面

| Q | =的外部链接数。

p 是带有项的矩阵,

为了找到收敛和收敛速度,矩阵 P 被调整。当行谷歌矩阵 P 达到和为 1 时,则称之为行随机矩阵。页面排名迭代表示马尔可夫链的演变,其中网络有向图被表示为转移概率矩阵 p。

它显示了在任何时间点随机浏览三个页面的概率。

首先,创建一个二进制邻接矩阵来表示链接结构,然后通过归一化将它转换成一个概率矩阵。

为了计算页面秩,必须解决线性系统的特征向量问题,

随机矩阵 P 的特征值可以假设为 1> λ1 ≥ λ2 ≥ … ≥ λn,

和 V1,V2,V3,…,Vn 是相应的特征向量。

在收敛过程之后,矩阵 P 的主导特征值应该是λ=1 以满足,

有了,

这是马尔可夫模型的稳态分布。

PageRank 收敛的过程如图所示,

Google 就是这样自动表征每个站点的页面排名值的。

微积分

微分学、多元微积分、积分学、通过梯度下降的误差最小化和最优化、极限、高级逻辑回归都是在数学建模中使用的概念。生物医学科学中使用设计良好的数学模型,以高保真度模拟人类健康和疾病的复杂生物过程。

In-Silico modeling,是人工智能方法在生物医学中的应用,是一种完全自动化的模型,不需要人类样本、原始动物测试、临床试验或实验室设备。在该模型中使用微分数学方程来测试新的机制假设和评估新的治疗靶点。这是通过操纵数学模型参数来更精确地研究人体生理学、药物反应和疾病的最廉价和最方便的方法。

针对儿童孤儿疾病的计算机临床试验

概率

人工智能世界里有很多抽象的问题。你可能会经历多种形式的不确定性和随机性。概率论提供了处理不确定性的工具。为了分析事件发生的频率,使用了概率的概念,因为它被定义为事件发生的机会。

让我们考虑一个机器人。机器人只能向前移动一定的秒数,但不能移动一定的距离。为了让机器人前进,科学家在它的程序中使用数学。离散随机变量、连续随机变量、贝叶斯公式和归一化是一些概率概念,它们与线性代数的其他概念一起用于机器人导航和移动。

建议阅读:

[## 机器人背后的数学

机器人研究一直呈指数增长,标志着一场新的工业革命。了解数学是如何…

medium.com](https://medium.com/datadriveninvestor/mathematics-behind-robotics-9d1790b33828)

最终判决

无论你想从事机器学习工程师、数据科学家还是机器人科学家的职业,你都需要在数学方面表现出色。数学可以增强人工智能中至关重要的分析思维技能。人工智能科学家认为,人们对人工智能的看法是,它都是魔法,但它不是魔法,而是数学在所有发明背后创造了魔法。因此,要在当今人工智能驱动的世界中领先,你需要在数学方面有很强的天赋。

为什么模型验证如此重要,它与模型监控有什么不同

原文:https://towardsdatascience.com/why-is-model-validation-so-darn-important-and-how-is-it-different-from-model-monitoring-61dc7565b0c?source=collection_archive---------13-----------------------

建模基础

模型开发过程的支柱

作者图片

一旦模型开发步骤完成,模型验证就开始了。事实上,模型验证是整个模型开发过程的一个重要部分。如果一个开发人员在开发模型上花费了 X 的时间,那么大部分时间他们会花费 X 甚至更多的时间来验证模型并确保它的健壮性和准确性。

在这篇文章中,我将强调模型验证过程的重要性,以及它与模型监控过程有何不同。

模型验证不当的后果

1.看不见的数据的模型性能差

米卡·鲍梅斯特在 Unsplash 上的照片

如果模型没有经过适当的验证,那么它就不能很好地处理看不见的数据,而这正是预测模型的最终目的。有各种各样的模型验证技术,最重要的类别是时间内验证和时间外验证。

开发数据集的一部分被保留在一边,然后对模型进行测试,以查看它如何处理来自相似时间段的看不见的数据,这些数据最初是使用这些数据构建的(即在时间验证中)。

数据集来自不同的时间段,模型也在这个看不见的数据块上进行测试,以判断它对看不见的数据的响应(即超时验证)。

这些验证确保开发人员对模型的性能有信心。

2.可疑的稳健性

KirstenMarieUnsplash 上拍摄的照片

正如上面所解释的,如果一个模型已经被正确验证,开发人员对它的性能有信心。已经完成验证过程的模型被认为适合在未来场景中稳健地运行。在验证过程中纳入了敏感性分析测试,以确保通过在一定程度上改变独立模型变量来解释经济起伏,因变量不会受到可能导致模型不可用的极端程度的影响。

3.无法适应压力情景

Unsplash 上由埃斯特·扬森斯拍摄的照片

在像衰退或当前疫情局势这样的极端情况下,预测模型很难适应和预测仍然足够好的预测,尽管存在波动。但是,如果模型验证过程也包括压力测试措施,那么它有助于将模型的一个版本投入生产,该版本已经过压力场景的良好测试,不会在任何灾难发生时突然失败。

4.不可靠的模型输出

如果模型没有通过基本的超时验证测试,那么模型可能是一个过度拟合的模型,它在开发样本上表现很好,但是在看不见的数据上失败了。为了避免这种情况,一定要验证!

模型验证与模型监控

为了开始理解这种区别,我们将涉及三个要点:目的、指标和时间段。

时间段:

模型验证与模型开发过程同步进行。很多时候,是一个迭代的过程。如果一个模型在验证阶段表现不佳,它将返回到开发阶段。这是紧接在模型开发之后。这是一个一次性的过程。

模型监控在模型进入生产阶段后生效。这是一个持续的过程。为每个模型确定一个特定的监控频率,然后对其进行评估,以确保模型符合标准,其结果可靠。此外,我们检查人口分布与开发时期相比不应有显著的不同,以确保模型仍然相关并且可以使用。

目的:

模型验证的目的是在我们已经有实际数据的过去数据的基础上检查模型的准确性和性能。

一旦部署了模型,模型监控过程就通过判断总体分布来确保模型的相关性,并且一旦开始输入数据就记录模型预测和实际数据之间的回溯误差百分比比较,以确保模型性能在可接受的范围内。

指标:

这是两个阶段最重要的区别。在模型验证阶段,我们主要关注可以为我们解码模型性能和响应的统计指标。而在模型监控阶段,我们既关注统计指标,也关注业务指标,以得出我们对特定模型的相关性和可靠性有信心的结论。

这就把我们带到了这篇文章的结尾。这是一个在面试中经常被问到的问题:你能解释一下模型验证和监控阶段之间的区别吗?我们在这篇文章中提到的内容足以作为答案。

我将继续发布更多的帖子,深入研究在模型验证和模型监控阶段使用的技术指标/技术。

观看此空间,了解更多关于数据科学、机器学习和统计的信息!

快乐学习!快乐成长!😃

NumPy 为什么牛逼?

原文:https://towardsdatascience.com/why-is-numpy-awesome-3f8f011abf70?source=collection_archive---------30-----------------------

简短的回答

NumPy 速度很快,简化了你的代码。对于刚接触 Python 的人来说:尽可能多地使用 NumPy。在下面的例子中,NumPy 的魔力使我的 Python 代码快了 50 倍。

冗长的回答

背景

我在接近博士学位时开始使用 Python,当我有问题要解决时,我是学得最好的人,否则代码只是随机的文本。研讨会和讲座不是我的风格,只有在我获得一些经验后,我可能会感兴趣。我更愿意努力解决一个问题,然后求助于我的圣经: StackOverflow 。因此,只有当同事和主管看到我的代码并提出建议时,使用 Python 的高效方法才会生效。当我第一次开始使用 Python 时,我对使用现有的库(如 NumPy)进行数据操作有些抵触,主要是因为我不明白为什么我需要使用它。当同事告诉我它会改进我的代码时,或者当我找不到特定函数的替代品时(例如 np.loadtxt ()),我开始使用它。直到我遇到一个问题,它极大地改进了我的代码,我才明白为什么 NumPy 更好。这篇文章展示了这个真实世界的例子,直接来自科学。

问题是

在我的工作中,我们分析所谓的对分布函数(PDF) 。PDF 是一种原子间距离的直方图,在理解和解释原子结构时非常有效。 PDF 可以从衍射数据中测量,我们可以尝试通过建模来复制。一种特别有效的方法是“大盒子”建模,它包括创建一个包含数十个原子的 3D 盒子,并重新排列这些原子,直到模型 PDF 与测量的 PDF 相匹配。

NumPy 与此有何关系?造型。我试着用一大盒原子计算 PDF,发现 NumPy 让我的代码快了很多。在这个例子中,我将只关注原子间距离直方图的计算,它将被称为总分布函数(TDF)。PDF 的计算需要更多的步骤。如果你有一个大盒子的原子,并想计算 TDF,你会进行以下步骤:

-计算所有原子间距离

-绘制这些距离的直方图

代码

进行计算时,首先想到的方法是遍历盒子中的每个原子,计算到剩余原子的距离,然后绑定这些距离。这方面的代码如下面的代码片段所示。

在这个代码片段中,xyz_Ang 是盒子中原子的 3D 坐标,r_rdf 是直方图仓的中点,n_atoms_tot 是原子的总数,dist_hist 是得到的 TDF。

当我在我的计算机上运行这个包含 1000 个原子的盒子的代码时,计算大约需要 5 秒钟。如果我把数量增加到 1728 个原子:15 秒。在‘大盒子’模型中,这是极小数量的原子和缓慢。

数字密码

NumPy 可用于显著提高计算速度。这是通过矢量化NumPy 内置的直方图函数实现的。矢量化意味着我们不需要在数组运算中使用“for 循环”。对于复杂的计算,你可以使用 np .矢量化。但在这种情况下,我们只是计算两点之间的距离,所以我们可以用每个数组写出计算结果。因此,我们可以生成一个距离数组(下面标记为 dist_vals ),而不是逐个计算单个原子之间的距离。从这里开始,我们可以使用 NumPy 直方图函数来对距离进行分类。这个新方法的代码片段如下所示。

在这个片段中,bin_edges 是我们的直方图箱的边缘。

这通过删除一个“for 循环”简化了我们的代码。当我在我的计算机上对一个有 1000 个原子的盒子运行这个程序时,计算大约需要 0.1 秒,比前面的代码快了 50 倍。如果我增加到 1728 个原子,时间是 0.3 秒。这是一个巨大的改进,允许实现更复杂的建模。这对于一个尺寸很重要的领域来说非常重要:你的盒子越大,你的统计就越好!

摘要

如果你有更多的锦囊妙计,你或许可以让代码运行得更快,但这很简单!我不认为我利用 NumPy 会使代码变得更复杂。这就是 NumPy 的强大之处:易于实现并能有效地加速代码。矢量化本身非常棒,因为您可以像输入标量算术一样输入数组算术。NumPy 为什么有能力做到这一点?它是由一群巫师开发的!如果你有机会,尽可能地使用它的功能。

如果你想亲自看看并尝试一下,我已经把上面例子的全部代码上传到 GitHub 了。

为什么物体检测这么乱?

原文:https://towardsdatascience.com/why-is-object-detection-so-messy-6a91191579b8?source=collection_archive---------21-----------------------

人工智能图解指南

TLDR:神经网络有固定大小的输出

优 X 创投Unsplash 上的照片。

与神经网络一起工作的人知道物体检测技术有多复杂。难怪没有直接的资源来训练他们。您总是需要将数据转换成类似 COCO 的 JSON 或其他不需要的格式。这绝不是即插即用的体验。此外,没有图表能像 U-Net 或 ResNet 那样充分解释 R-CNN 或 YOLO 的速度更快。细节太多了。

虽然这些模型相当混乱,但对它们缺乏简单性的解释却相当直接。它可以用一句话来形容:

神经网络有固定大小的输出

在物体检测中,你无法先验的知道一个场景中有多少物体。可能有一个、两个、十二个,或者一个也没有。下面的图像都有相同的分辨率,但对象的数量不同。

优 X 创投Unsplash 上的照片。每个图像都有不同数量的对象。

这个一百万美元的问题是:我们如何从固定规模的网络中构建可变规模的输出?另外,我们应该如何训练数量可变的答案和损失项?我们如何惩罚错误的预测?

实现可变大小的预测

为了创建大小不同的输出,两种方法在文献中占主导地位:“一刀切”的方法,一种广泛的输出,足以满足所有应用程序,以及“前瞻”的想法,我们搜索感兴趣的区域,然后我们对它们进行分类。

我只是编造了那些术语😄。在实践中,它们被称为“一阶段”和“两阶段”方法,这是一个不太明显的方法。

一阶段方法

过食、YOLO、SSD、RetinaNet 等。

如果我们不能有可变大小的输出,我们将返回一个很大的输出,它总是比我们需要的要大,然后我们可以修剪多余的部分

整个想法就是走贪婪路线。原始的 YOLO 检测器可以检测 448x448 图像的多达 98 个边界框。这听起来很荒谬——的确如此。自己看:

该死的。这是一个很大的检测。

这太乱了!然而,你可以看到每个方框旁边都有一个百分比。该百分比显示了算法对分类的“置信度”。如果我们将此阈值设为某个值,如 50%,我们会得到以下结果:

以 50%的置信度设定阈值效果很好。

好多了!这很好地总结了一阶段方法:生成大量(但固定的)检测集,并剪除杂波,通常混合阈值和非最大抑制(NMS)。

这种方法因其速度而备受推崇。单个网络可以一次性处理整个图像并输出检测结果。时至今日,只要速度是最重要的考虑因素,单级检测器就备受青睐。

缺点是内存开销大,检测准确率较低。每个盒子消耗的内存与类的数量成正比,盒子的数量与图像分辨率成二次方增长。当有许多类和高输入分辨率时,这种渴望的代价会很高。最重要的是,网络必须联合定位和分类对象,这损害了这两项任务的性能。

两级检测器

RCNN,Fast-RCNN,Faster-RCNN,,等。

如果我们不能获得可变大小的输出,那么让我们搜索感兴趣的区域,并单独处理每个区域

换句话说,这种方法将包围盒从检测中分离出来。在第一阶段,该算法提出区域。然后,我们使用专用网络对它们进行分类。早期阶段看起来如下:

两级检测器的区域建议

有了我们感兴趣的区域,我们可以一个接一个地处理它们,产生它们各自的类和用于最终修剪的置信度分数。结果如下:

我们玩具两级探测器的最终结果

现在,我们得到了一些优秀的检测和几乎没有杂波。与单阶段方法相比,该技术使用专用网络进行区域提议和区域分类。这种想法允许两个阶段独立开发,并且已经投入了大量工作来共享从第一阶段到第二阶段的见解,以实现更快的检测。

这种方法的明显优点是它的准确性。通过将定位与分类分离,这两项任务都由专门的网络处理。另一方面,缺点是速度,因为您需要中间区域提议步骤,并且您需要为每个提议运行分类器网络。因此,所用时间与检测次数成正比。

培训可变大小的输出

现在我们知道如何处理输出大小问题,最后的问题是,我们如何训练这样的网络。谢天谢地,在这两种情况下,程序大致相同。

训练对象检测算法就像抚养孩子一样。你得告诉孩子什么是对什么是错。然而,如果你表扬或抱怨太多,你会宠坏或伤害孩子。在异议检测方面,我们将只表扬最好的检测,只惩罚最严重的错误,而对其他的则只字不提。

考虑到基础事实对象的集合,我们将使用基础事实框来表扬交集/并集(IoU)大于 0.7 的检测,并惩罚那些小于 0.3 的检测。这将创建一个梯度信号,集中于真正好的检测,淡化真正错误的检测,并留下其余的检测。

您可以添加的一个简单的事情是淡化 IoU 仅在 0.1 和 0.3 之间的检测;因此,惩罚力度会小一点。您还可以平衡您认为阳性和阴性的盒子数量,平衡阳性和阴性样本的贡献。

更进一步是使用某种形式的硬负挖掘。总体思想是使用模型的损失从最差到最好对检测进行排序。这样,我们就有了一个更有原则的方法来选择表扬什么和惩罚什么。这篇论文在这个问题上是一个有用的参考。

检测与分割

到目前为止,我们一直在处理对象检测:在场景中寻找对象的边界框。对于人类来说,这是一项简单的任务:我们可以轻松地检测事物,我们可以快速绘制矩形。更具挑战性的任务是细分。

图像分割就是画出勾勒物体轮廓的蒙版。例如,我们需要完整地描绘出一个人的轮廓,而不是一个矩形。这更难,因为画一个物体比画一个矩形更难,而且物体也可以和它们的背景融合在一起,这使得它更具挑战性。

然而,对于神经网络来说,这更容易。我们必须对每个像素进行分类,从而制作一个蒙版,而不是输出可变大小的图像。因此,每个输入像素需要一个输出像素。下面是一个由人物分割工具处理的上述场景的示例:

人群细分

它并不完全完美,但它是一个可爱的工作。从概念上讲,这是一个更加困难的问题。然而,在网络架构级别,它更易于管理。

如果我们同时利用这两个框架,我们可以很快得到所谓的“实例分割”,这是用不同的对象分割不同的对象的任务,如下所示:

实例分段示例

总的想法是分割每个边界框的结果。这样,边界框就是“实例”,分割就是分割:)。虽然这是简化的,但这是 Mask R-CNN 算法背后的一般思想。

在这篇文章中,我介绍了为什么物体检测算法比其他网络复杂得多,以及作者如何处理可变输出大小的问题。然后,我简要比较了图像分割模型如何看待这个问题,以及如何将这两种方法结合到一个实例分割框架中。

总的来说,我没有特别讨论任何架构。事实上,所有提出的概念都是出于教学目的的简化。每个模型都有一点不同,引入了锚、平滑和新奇损失等概念。如前所述,这可能会变得非常复杂。😔

如果你想继续阅读,这篇论文是 2019 年末关于基于深度学习的对象检测技术的调查。

如果你对这篇文章有任何问题,欢迎评论或联系我。如果你是新手,我强烈推荐订阅。对于数据和 IT 专业人员来说,中型文章是 StackOverflow 的完美组合,对于新手来说更是如此。注册时请考虑使用我的会员链接。

感谢阅读:)

Python 为什么叫 Python?

原文:https://towardsdatascience.com/why-is-python-called-python-e3eb451f73a9?source=collection_archive---------0-----------------------

关于世界上最流行的编程语言之一的一些有趣的事实

我们大多数人每天都在使用 Python 编程语言。如果你还没有用 Python 编程,那么我强烈建议你花些时间学习基础知识,然后用 Python 做你的下一个项目。

Python 是目前最流行的编程语言之一。

在你的 Python 编程生活中有没有想过为什么 Python 叫 Python 而不是 P、P++或者 P#?我有(双关)。

阿德里安·斯旺卡Unsplash 上拍摄的照片

有趣的事实是编程语言 Python 是由吉多·范·罗苏姆实现的。

在吉多·范·罗苏姆实现 Python 的同时,他也在阅读蒙蒂·Python 的《飞行马戏团》出版的脚本。

如果你以前没听说过巨蟒剧团的飞行马戏团,我来简单介绍一下,也许我们可以找到 Python 被称为 Python 的原因。让我们一起探索吧!

巨蟒剧团的飞行马戏团是 1969+年的 BBC 喜剧电视连续剧。这是一部高收视率的电视剧,在 IMDB 中的评分为 8.8。

Python 编程语言的评价也很高。根据最近的 Stackoverflow 调查,Python 的受欢迎程度已经超过了 Java。

Python 是一种著名的编程语言,因为它易学易用。另外,现在有大量的库可以在您的项目中使用!一些开发者甚至认为它是一种必须知道的编程语言。

如果你阅读 Python 文档,你会看到许多受 Monty Python 喜剧系列启发的例子:

你会看到提到垃圾邮件,鸡蛋,伐木工人,和骑士等。

https://docs.python.org/3/library/pprint.html

回到《巨蟒剧团》,一些评论家认为《巨蟒剧团》是一部必看的喜剧系列片。为什么?嗯,这个节目充满了惊喜,看起来非常有趣。这是一部实验喜剧。

Python =灵感来自蒙蒂·Python

喜剧系列很有趣,因为它很有创造性,而且……嗯……很随意。它无所不谈。据一位观众说,这可能不是每个人都觉得好笑。

嘿,Python 编程语言可以用来做任何编程任务,从开发到数据科学任务到管理工作,再到跨分布式机器解决复杂的数学计算。对于我们希望快速试验一个概念并希望快速将产品推向市场的项目来说,它是一种非常好的语言。

话虽如此,一些开发人员仅将 Python 视为一种原型编程语言(出于他们自己的正当理由)。还是那句话,不是每个人都一模一样的,对!我真的很喜欢用 Python 编写我的项目。

Python 编程语言受到许多语言的启发。您知道它的控制和数据结构是受 ABC 启发的吗?它的标识符、字符串和% string 格式来自 C,它的正则表达式受到 Perl 的启发。

有趣吧?

Python 的#注释源自 UNIX v7 shell。它的发明者吉多·范·罗苏姆最近也提到“Python 的比较重载方法的名字 eqneltlegt 、_ge 来自 Fortran 的. eq .等。”

现在,回到巨蟒喜剧系列,它有如此多的曲折,它永远不会无聊。因此,这场演出是高度不可预测的,这使得它辉煌。

一位评论家说,这是电视史上的一个里程碑。

Monty Python 是一个涵盖许多主题的实验性系列。让喜剧充满了意想不到的惊喜。

迈克尔·泽兹奇在 Unsplash 上的照片

吉多·范·罗苏姆想给他的编程语言起一个独特、神秘、简短的名字,还有什么比以巨蟒剧团的飞行马戏团命名为 Python 更好的呢?

为什么正态分布这么正态?

原文:https://towardsdatascience.com/why-is-the-normal-distribution-so-normal-e644b0a50587?source=collection_archive---------15-----------------------

paweczerwi ski 在 Unsplash 上的照片

超越中心极限定理

作为中心极限定理的结果,正态分布(或高斯分布)在统计学中广泛出现。具体来说,中心极限定理说(在大多数情况下除了股票市场)任何时候“一堆东西加起来”,将会产生一个正态分布。

但是为什么呢?为什么是这种分布?为什么特别?为什么不是其他发行版?还有其他统计分布会发生这种情况吗?

问题:答案是肯定的,有其他分布和正态分布一样特殊。正态分布仍然是最特殊的,因为:

  • 它需要最少的数学
  • 这是现实世界中最常见的情况,股票市场是个明显的例外

如果你感兴趣,请继续阅读!在深入研究常被遗忘的正态分布之前,我将给出一个中心极限定理的直观草图和一个快速证明草图。

中心极限定理

以下是一份简短的官方声明:

  • 假设你有 n 个随机变量 X₁,X₂等等。代表来自具有总体均值μ和有限方差σ的某个总体的大小为 n 的样本。人口可以遵循任何分布。
  • 我们感兴趣的是它们的均值 X,它本身就是一个随机变量。(这是随机的,因为每次我们抽取大小为 n 的样本,我们都会得到不同的结果)。
  • 我们已经知道均值 X 会有均值μ和方差σ /n(独立性假设成立,是随机变量的一般性质)。
  • 中心极限定理说,当 n 很大时(通常 40+在现实生活中足够接近),均值 X 遵循正态分布,不管基础人口的分布是什么。

形式上,

中心极限定理的形式陈述

其中φ代表正态分布,平均值和方差如下所示。(你可能习惯看到等价的标准差 σ/√n 代替)。“in distribution”是一个关于聚合如何工作的技术术语。从现在开始我们将忽略这些技术细节。

为什么中心极限定理会出现

中心极限定理出现在现实世界中的各种场合。例如,一个非常合理的假设是,你的身高可以用一系列相关因素的总和来表示,其中包括:

  1. 你 8 岁时每天喝多少牛奶
  2. 你有多少条 X 和/或 Y 染色体
  3. 你有哪一种 GH1 基因变体
  4. 一大堆其他的基因
  5. 你小时候是否睡在的普罗克拉斯特床

考虑一大堆因素,每个因素都会对你的最终(成人)身高产生微小的影响,然后,很快,你就会得到一个(大致)人类身高的正态分布!

请注意,我稍微作弊了——这里的变量不是独立同分布的,但独立性假设是一个合理的近似,还有更强版本的中心极限定理放宽了同分布假设。然而,我们确实选择了排除影响身高的极端遗传条件。

总之,任何时候你测量的东西是由一大堆更小部分的贡献相加而成的,你很可能以正态分布结束。

快速证明

这个证明必然是一个草图,因为,如果你想要一个包含所有分析和概率论的完整证明,去读一本教科书吧。我想说明的要点是,欧拉常数 e 出现是有原因的。

首先,我们需要一个高性能的数学工具。对于每一个合理的随机变量 X,都有一个特征函数φ ,它本质上是 X 的概率密度函数(PDF)的傅立叶变换。

随机变量 X 的特征函数

为什么我们把我们非常好的,实值的,随机变量,放入复数,然后让它变得更复杂?因为某些原因,没有人能满意地向我解释,数学中的事物往往有两种看待它们的方式(“二元性”)。物理学也是如此:空间/动量,时间/频率。不管是什么原因,有时候看另一面会简单得多。

特征函数有两个我们需要的很好的性质。假设 A 和 B 是独立的随机变量, c 是标量常数。然后我们想知道和变量 A +B 和乘积 cA 的特征函数。你应该能用纸和笔很快地从定义中推导出这些:

特征函数的便捷性质

φ在 t=0 时的导数也编码有价值的信息。设置 t=0 后,指数部分消失,我们得到一个足够简单的表达式来计算。(我再次向你保证,你可以用铅笔和纸在 2 分钟内自己完成这项工作。就用定义,做看起来对的事情)。

假设均值和方差有限,特征函数在 0 处的导数

现在我们准备好开始了。回忆一下我们的 X₁,X₂,…等等。,iid 个随机变量,每个都有均值μ和有限方差σ。让我们转移他们,所以我们得到

并定义

请说服自己,如果我们证明了 Y 是均值为 0、方差为σ的正态分布,那么我们已经证明了均值 X 是均值为μ、方差为σ /n 的正态分布,这就是我们想要的。

现在我们只需要计算特征函数

Y 和的特征函数

在这里,我们使用了上述随机变量的和与标量倍数的特征函数性质。Y 是 iid,所以它们都有相同的特征函数:重复乘法变成取幂。

现在我们把φ泰勒展开到二阶

φ的泰勒展开

取极限为 n → ∞。你知道这个!是复利公式( Pert!)利率 r =-σt/2

复利公式

我们得到的结果实际上是均值为 0、方差为σ的正态分布的特征函数。通过李维连续性定理,我们完成了。我们可以看到为什么那个狡猾的欧拉常数 e 出现了!

超越中心极限定理

好吧,这一切的重点是找出为什么正态分布如此正常。我们所做的只是证明了中心极限定理,而没有真正得到为什么结果是正态分布的更深层次的解释。该付钱了。

我们看到中心极限定理如此普遍,因为它告诉我们当我们对一堆东西求和/平均时会发生什么。所以很自然的会问,一堆东西的总和/平均值会是什么分布?让我们把这些分布看作正态(高斯)分布的“表亲”。

无限可分分布

如果一个分布 Y 可以表示为任意多个 iid 分布 X 的和,那么它就是无限可分的。

泊松分布、学生 t 分布和伽马分布是无限可分的,高斯分布和我们将在下面看到的分布也是如此。

稳定分布

然而,在我们认为一个分布是正态分布的“表亲”之前,我们想要求一个更强的条件。假设我们有发行版 x 和它的 iid 副本 X₁和 X₂.我们对这些拷贝进行线性组合,看看我们是否得到了和开始时一样的结果,除了可能被常数 c 缩放和被常数 d 移位,如果我们总是能做到这一点,我们说 X 是稳定的。

在上面无限可分分布的上下文中,这意味着我们可以将 Y 写成本身(适当缩放和/或移位)的 n 个副本的总和。粗略地说,对于像泊松分布这样的不稳定分布,添加越来越多的分布会让你越来越接近稳定分布。所以我们感兴趣的是稳定分布。

Levyα-稳定分布

α稳定分布是唯一稳定的分布。早在 20 世纪 20 年代,法国人保罗·莱维就对它们进行了研究。他们的描述是 20 世纪 50 年代俄罗斯人格涅登科和科尔莫戈罗夫给出的广义中心极限定理的核心。反过来,它们提供了关于正态分布本质的正确观点。

每个 α稳定分布由 4 个参数表征。这是一个很大的参数。

  1. 位置(本质上是平均值)
  2. 刻度 c (与标准偏差相关)
  3. 尾部尺寸,α。介于 0 和 2 之间,包括 2 但不包括 0。
  4. 左/右尾比,β。介于-1 和 1 之间。

前两个参数非常合理:位置和规模。在正态分布的情况下,位置是平均值μ,标度可以是标准偏差σ。

不同尾巴大小的比较(维基百科)。α=2 是正态分布。

第三个参数α(分布族的名字由此而来)控制尾部的大小。最小的尾部属于正态分布,峰度为 3(峰度为 0)。对于所有其他稳定分布,尾部较厚(“尖峰厚尾”),峰度至少为 9。你可能已经从《黑天鹅》《T21》等书中熟悉了“胖尾巴”这个概念。简而言之,如果你认为事物是正态分布的,但事实上它们的尾部比你想象的要大,你会看到数量惊人的“反常”事件,比如股市崩盘(当然,这很常见)。我们一会儿将回到这个参数。

不同“偏斜度”设置的比较(维基百科)

最后一个参数有点无聊。它控制右尾巴与左尾巴的大小比例(直观地说,歪斜)。从图中可以看出,对于β=1,分布仅支持非负数。

从某种意义上说,我把参数给错了。它们控制一阶(位置)、二阶(标度)、三阶(偏斜度)和四阶(峰度)矩。希望这能给你一个直观的感觉。最后,我们来看看最重要的第四个参数,α。

帕累托分布

为了理解尾部大小,我们应该看看帕累托分布。帕累托分布有一个仅在 x≥1 时非零的 PDF,并带有一个参数α > 0,其作用与莱维分布相同。

帕雷托分布的 PDF,α > 0

19 世纪晚期,意大利经济学家 T4·维尔弗雷多·帕累托·T5 首次研究了 T2 的帕累托分布。它是 80/20 法则的起源(20%的人口拥有 80%的财富;20%的工作完成了 80%的结果)。这显然也是墨索里尼法西斯主义的灵感来源,墨索里尼参加了他的讲座。

需要注意的一些关键点

  • 对于α = 0(或更小),分布不会被归一化:总概率不会加到 1(它会加到∞)。因此对α有约束。
  • 对于α ≤ 1,分布连有限均值都没有!它的期望值 E(X)是∞。
  • 对于α ≤ 2,分布不具有有限方差!它的方差是∞。
  • 帕累托分布总是比正态分布有更宽的尾部,用峰度来衡量。在极限α→∞,峰度比正态分布多 6。

随着α变大,尾部变小(但保持比高斯大)。如果尾部太大,分布的均值和方差可能是无穷的!

好吗?如果你理解帕累托分布是典型的“厚尾”分布,有一个参数控制尾部的“大”,那么你就理解了α在 lévyα-稳定分布中的作用。

帕累托分布和莱维分布之间的关系

把所有东西放在一起,你可能已经注意到,我偷偷摸摸地还没有明确地说为什么中心极限定理不适用于α-稳定分布。

事实上,中心极限定理要求我们的分布具有有限的方差σ。但是对于方差无穷大的分布,中心极限定理就不适用了。而是对一堆样本进行平均,会得到一个α < 2 的α稳定分布。我们将在下面给出一些例子。

这也是我讲“位置”和“尺度”参数的原因。你对均值和方差的直觉非常适用,但并不是所有的分布都有明确的均值或方差。

概括/澄清一下,假设我们有一个基础分布 X,我们用大小为 n 的样本取平均值。我们想知道当 n 很大时,样本均值将遵循什么分布。

  • 如果分布的尾部看起来像帕累托分布α < 2 after we go far enough, we will get an α-stable distribution with the same α. If the left tail and right tail have different α-parameters, the largest one wins and the smallest one dies: we end up with an α-stable distribution that only has a left or right tail (β = ±1). Otherwise β just sets the ratio between the two tails.
  • If the distribution’s tails look like a Pareto distribution with α > 2,或者它们比任何多项式下降得都快(比如说像高斯分布中的指数下降),那么你将得到一个正态分布。
  • α = 2 的情况是特殊的。即使基础分布具有无限的方差,结果分布仍然是高斯分布。因此,α=2 的莱威分布是正态(高斯)分布。

α=2 的情况也很特殊,因为正态分布不能有任何偏度(所以β=0),尾部大小是固定的(峰度= 3)。因此,不存在α > 2 的α稳定分布。相反,所有这些假设分布都被中心极限定理“捕获”,并在我们采样和平均时变成高斯分布。

α-稳定分布很重要,因为它们提供了“胖”尾情况下的中心极限定理。正如上面提到的,股票市场回报被认为遵循α-稳定分布,α≠2,这提供了一个现实生活中的例子,假设某个东西是正态分布的,你可能会输掉你的衬衫。

结论

有趣的是,除了少数特殊情况,封闭形式的概率密度函数(PDF)是未知的。一般只能写下特征函数φ。这是相当丑陋的,所以我不打算打扰。然而,可以对 pdf 进行采样和数值计算,并且可以在任何好的统计软件包中找到实现(比如 scipy )。

让我们以一个例子来结束。如果生成标准随机正态变量 A 和 B,并考虑它们的 A/B,就会得到一个α=1 的柯西分布。作为一个练习,您可以生成 n 大的 n 数,并将正态分布和 Lévy-stable 分布拟合到样本均值的最终分布中。你应该看到正态分布不符合(尾部太肥)而 Lévy 分布符合α接近 1。如果改变 A 和 B 的均值和标准差会怎么样?

参考

除了文中的链接,我主要是通过新加坡国立大学孙荣峰课堂笔记了解到这个话题的。

[1]有了四个参数,我可以让一头大象适应,有了五个参数,我可以让它扭动鼻子——冯·诺依曼

[2]然而,这些并不是实际的数字

为什么这个图表不好?使用 GoDVE(数据可视化评估语法)进行数据可视化评估的最终指南

原文:https://towardsdatascience.com/why-is-this-chart-bad-5f16da298afa?source=collection_archive---------9-----------------------

“各种流行病的死亡人数占世界人口的比例[OC]”来自 r/dataisbeautiful

你难道没有看过不时疯传的图片并试图分析它们吗?我知道。大多数都是垃圾。但它们为什么是垃圾?是什么让糟糕的视觉效果变得糟糕?

今天,我将向您介绍vis qual——可视化质量工具和用于评估数据可视化的标准

声明:如果你是来回答标题问题的,请直接跳到章节“数据可视化评估的语法”。

首先,让我们从几个例子开始,因为这是最好的学习方法!这是一个带有 epi--al 调色板的全球疫情案例图。

“CDC 对 COVID 病例的颜色选择不当”来自 r/dataisugly

这个图表有什么问题?嗯,是调色板让你准确无误地理解一切。也许本质上不是什么都没有,但至少它确实是“误导性的”。“无”,即没有病例和“10,001 或更多”病例之间的差异是巨大的(准确地说至少是 10,001)。但是颜色表示是相同的。是吗?不完全是。我用 GIMP 帮你查过了。

标尺上所选颜色的十六进制值。

是啊,非常不同。

但是让我们公平地注意到地图已经被改变。我确实避免使用“纠正”一词,因为问题仍然存在——虽然规模较小,但仍然存在。

来自 cdc.gov的“修正”地图

如何区分“5001 到 10000”和“1001 到 5000”或者“10001 到 20000”?不要让我开始谈论色盲的话题,这个话题完全被政府的形象化忽视了。

顺便说一句:世界上 12 个男人中有 1 个,200 个女人中有 1 个是色盲

颜色说够了,让我们来谈谈比例和轴

颜色并不是 datavis 中唯一常见的错误。老实说,最常见的错误是关于刻度/轴的恶作剧。回想一下:
标度指的是纯粹的大小(例如条形图中的条),而
描述数据空间的“范围”,帮助您读取准确的值,并通常定义坐标系。

说到规模,我们来看看这个牲畜 vs 车辆的对比。上次查了 300K < 4M** ,但是我是谁?带尺子的自作聪明的家伙?**

"告诉我更多关于 Kanye 的 30 万美元牲畜的信息"来自 r/dataisugly

“下一个例子是关于轴。你知道什么比气候变化否认者更好吗?一个否认气候变化的人,他知道 150%的数据可视化。

在推特上看到完整的“论据”。

这是那条推文的第一个条形图。

1000%证明温度稳定和气候变化是一个骗局。

使用开尔文温标的问题是温度很少下降到绝对零度(在地球上),通常在68°C(90°F 或 205° K)56.7°C(134.1°F 或 329.85° K)之间。所以“绝对零度”在这里可能有点不合适。不得不解释那件事,我感到有点反感。

再举几个例子让你判断

我们可以继续下去,描述更多更可怕的例子…我知道你渴望看到一些仇恨,但为了不把这部分拖得太长,我会留下一些作为你的家庭作业。
猜猜那些有什么问题!如果你不确定,可以查看相关的 Reddit 帖子(以及整个社区,我非常感谢他们!)

【鞋色频率】来自 r/dataisugly

“这就是为什么调查不使用(来自 r/任天堂 switch)来自 r/dataisugly

这个对我来说是最棘手的。r/dataisugly中的“关于睡眠要求的一些真正有用的信息”

咆哮部分到此结束。

这是数据科学部分!

现在我们来谈谈真正的数据可视化。我们知道我们的前进方向 VisQual,一个数据可视化评估工具和标准
…但是我们从何而来?

什么是数据可视化?(不要跳过这一部分)

正确的第一步是将整个数据可视化域放在某个超级域中。有人会说这是数据科学。我想对此提出异议。虽然,数据可视化的一部分肯定是数据科学的一个子域,但它的另一部分在于…艺术。

罗伯特·基恩在 Unsplash 上的照片

是的,艺术是指美术和应用艺术,两者都有涉及。这是一个模糊的定义,但数据可视化的整个定义也是模糊的。

** [## 数据可视化|剑桥英语词典中的含义

数据可视化定义:1。将信息表示为图片、图表或图形的行为,或表示…

dictionary.cambridge.org](https://dictionary.cambridge.org/dictionary/english/data-visualization)

“将信息表现为图片、图表或者以这种方式表现信息的图片的行为”,所以简单来说就是任何东西。任何“可视化数据”或“表示信息”的东西都是数据可视化。毕竟这是艺术,任何东西都可以成为艺术。

一幅画越“精致”,就越接近梵高或毕加索的艺术,反之亦然。如果你愿意的话,它越“应用”或“实用”,它就越具有数据科学性。

虽然,我们可能会争论,一个特定的图表是否更漂亮或更有用,我们可以评估它,这是关键的部分!VisQual 的主要假设是,我们可能会判断一个可视化,说它“好”或“坏”。然而,我讨厌纯粹主观地看待它。因此有精确的标准,我们最终会达到。
我们先来谈谈语法。等等,“语法”?是啊!图形的语法,数据合成的起源。

我们将提到两个大的组织者和他们的想法来自于另一个。

图形语法

别担心,我们不会谈论形式语法,图灵机和自动机理论。Leland Wilkinson 在Grammar of Graphics中引入的概念将图形(如图表)分类为上下文无关的语法,该语法由以下元素组成:

  • 数据
    假设我们有一些人的出生和死亡日期。
  • 变量
    …是他们的年龄(死亡日期-出生日期)
  • 代数
    …定义如何减去数字(这里是减去日期)。
  • 刻度
    …定义我们的条形图的单位有多大。
  • 统计数据
    如果我们想绘制一张平均寿命图,那就去做吧!
  • 几何图形
    …告诉图形是否应该是条形图、散点图等。
  • 坐标
    可能我们是在笛卡尔坐标下工作,但是见鬼,有时候是极坐标!
  • 美观
    …定义条块之间的距离、轴的放置位置(左、右、上或下)以及其他美观方面。
  • 刻面
    也许我们想根据人的国籍把我们的图表拆分成很多图表?
  • 指南
    …基本上是可视化包含的所有“文本”(标题、轴标题、图例等。)

威尔金森的想法在形式和工程方法上都很出色,这是一个很好的基础。

图形的分层语法

Hadley Wickham 在他的图形的分层语法中提出了 Wilkinson 的概念,他将形式描述的方法转变为实际应用。在创建 ggplot 的第一个迭代时,他引入了他的概念,将图形分成多个层:

  • 数据
  • 绘图
  • Geom
  • 斯达
  • 位置
  • 规模
  • 坐标
  • 方面

如果你想知道 GoG 和分层 GoG 之间是否有任何关系,或者,咳咳,映射——有!这就是韦翰的定义。

GoG-分层的 GoG 关系(改编自 Wickham 的《图形的分层语法》)

我们可以谈论 GoG 和分层 GoG 有多棒,但是……
但是我们不是来创造或者分解图形的。威尔金森和韦翰就是这么做的。我们是来评价他们的。图形语法或图形分层语法是为了设计/构建/分解图形而创建的。我们是来评估。所以把你的元素放在一边,让我们来谈谈……的类别

数据可视化评估的语法

GoDVE(仍在进行简化)是讨论数据可视化评估的基础。它由 11 个类别和 118 项标准组成,采用简单的是/否问题形式。要评估一个可视化,你只需回答问题。如果答案是“是”,那么一切都很好,但“否”意味着可视化有问题。什么样的问题?我举个例子来解释一下——最好的学习方法!

“各种流行病的死亡人数占世界人口的比例[OC]”来自 r/dataisbeautiful

让我们来看看来自 r/dataisbeautiful 的一个非理想的可视化,并提及它可能引发的一些问题。“一些”,因为没人有时间。只在某些方面评价一个 datvis 是可以的。如果你想全部看完,那就继续吧!(查看上一章介绍的工具!)

我会试着解决每一个类别,让你对它们有个好印象。让我们开始吧!

数据

数据来源是否提供? 是的虽然大部分的新潮、病毒式的可视化都懒得去做,这一条居然在右下角提供了来源(“灵感”)。这已经是一个非常非常好的迹象。

美学

信息是按照五个帽架组织的吗?

[## 五个帽架

“五个衣架”的概念最初是由理查德·索尔·沃尔曼在他的书《信息焦虑…

infovis-wiki.net](https://infovis-wiki.net/wiki/Five_Hat_Racks)

这些数据按时间顺序组织得很好。

可视化是否服从阅读引力? 嗯,tbh,时间一般是从左往右过的。在这里,它“走向”观众,有些人(包括我)觉得不太直观。

所有轴的方向和形状都合适吗?
时间轴怪异且不必要的变形。从 200 到 300 的距离比从 1900 到 2000 要短得多。一个世纪就是一个世纪。

协调

秤是否完整(未切割)? 是的 我提出这个问题是为了强调这是 datavis 中最常见的错误/操作之一。幸运的是,该轴是“完整的”,即没有年份/十年像下面令人厌恶的那样被“切断”:

“所以荷兰人大约是菲律宾人的 3 倍”出自 r/dataisugly

是否有足够的轴或值引用?
没有轴表示因每例疫情死亡的人口百分比。

所有使用的尺寸都是必须的吗?

位置

对准是否正确?

可视化是否恰当地利用了空间?
右边有很多空白的地方。

指导

是不是标签不太多? 没有
在太多的地方有太多的引导。此外,一些超级关键的标签(如左上角关于体积百分比的注释)不够突出。

嗯,那是藏在角落里的相当重要的信息。

几何学

这当然是这个可视化中最恶心的恶心。我们开始吧…

形状到数据的转换容易理解吗? 没有
卷对于人类来说不容易解读和比较。我们线性思考。我们比较长度容易,比较面积困难,比较体积……我们不能可靠地比较体积。

形状是否便于数据比较? 看上面。

形状的额外尺寸是否显示了额外的信息?
体积呈现一条只需要一维的信息。因此,它可以减少,当然没有必要。

这些形状不会妨碍读取数据吗?
一件事是有第三维度和整个无法阅读那卷的东西。第二个想法是视角。你认为这些球大小相似吗?我不知道,他们看起来很相似,但是…

这两个球一样大吗,ekhem,体积?它们标有大小不同的圆圈,只是表示。

让我们检查一下!
公元 165-180 年发生安东尼斯瘟疫。这一时期的世界人口接近 1.9 亿。瘟疫期间,5 00 万人死亡。它占世界人口的 263%。COVID 怎么样?
我们将 35 00 万(根据可视化状态)除以 7 794 798 739,得到…~ 0.45%,比少了近 6 倍。但是球看起来几乎一样。是透视吗?是那个看不懂那卷的东西吗?我甚至不能。你可以说作者们尽了最大努力让数据看起来尽可能的花哨,同时又尽可能的让人看不懂。我们继续吧。

这些形状是否以适当的比例表示数据? 没有
我们甚至不知道数据是什么?体积代表因疾病致死的人口百分比。我们也被赋予了绝对值。现在,我将不得不检查给定时间内的世界人口,除,并且…可能意识到让我检查它丢失的数据的 datavis 没有实现它的目的。

形状是否精确地代表了数据(没有近似值)?
哦好家伙。这里有人能估算出带飞行纤维的毛球的体积吗?(BTW,如果你要引用这篇文章,引用这句话)。

这里有人能估算出带飞行纤维的毛球的体积吗?

统计和方面

这些类别中没有适合可视化/有趣的问题,所以我们跳过它。

主题

它是亲蛋白的吗?
它是对德国友好的吗?
是 tritanopia 友好型吗?

颜色并不代表任何数据,所以…我只是想向所有人大声疾呼,不能用所有颜色来体验这个世界是多么不幸。

根据色盲的可视化色盲版本。(请注意,deuteranopia 和 protanopia 有点不同,例如后面的紫色球对后者来说更强烈一些)

操纵

数据是以公正的方式显示的吗? 数据没有被操纵吗? 是的 很难百分之百准确的说出一个人的意图是什么。因此,这一类别通常非常“我认为/也许/可能……”。我认为很难证明作者有任何意图(或潜在利益)以有偏见/被操纵的方式展示数据。

是否不含具有虚幻效果的物品? 再没有
的蛋蛋了。这是一个完美的方法,让人觉得东西(长/高)大 x 倍,而实际上它们(体积)大 x 倍。

主观的

我跳过了这一类,因为你可能已经得到了我对这张图表的印象。但是检查一下你将如何回答这些问题!

  • 这个可视化有意思吗?
  • 这个可视化效果比你见过的类似的要好吗?
  • 你喜欢可视化的主题吗?
  • 可视化是否美观?
  • 你了解视觉化吗?
  • 你喜欢它吗?
  • 你从这种可视化中学到了什么吗?
  • 展示的信息有用吗?
  • 花在体验可视化上的时间值得吗?
  • 你想看看类似的视觉效果吗?

最终单词

每当你认为你做了一个糟糕的图表,记住可能有超过 30,000 人(T42 支持)不敢苟同。
上面的可视化对我来说很可怕,但总的来说并不可怕(也不优秀)。这是关于 VisQual 的最重要的线索:它帮助你评估可视化,并精确地指出错误。然而,它没有给出标记或分数。你不会得到 94/100 或 3/10。即使你可以用正面回答的数量占问题总数的简单分数来计算最终分数,并与他人进行比较,你也不能这样做。

VisQual 不是一个理论上的标记工具,它是一个实用的反馈工具。

说到实用工具…

检查完整的 VisQual 并在线评估您的图表!

想潜得更深吗?检查所有类别和问题,并使用 VisQual online 评估您自己的可视化效果!**

感谢 @michbur 的咨询。

为什么你的脸书数据如此有价值?一种通过脸书相似度预测人类特征的方法。

原文:https://towardsdatascience.com/why-is-your-facebook-data-so-valuable-a-method-to-predict-humans-traits-through-facebook-likes-e1ae036e80fb?source=collection_archive---------55-----------------------

为什么你的脸书数据如此有价值?一种通过脸书喜欢预测人类特征(性别,政治倾向,年龄)的方法。

随着选举时间的临近,我们将看到我们的脸书数据如何以及为什么对广告商和政治家如此有价值。脸书是世界上最大的社交网络平台,拥有超过 25 亿活跃用户。它以前所未有的规模处理数据,高度复杂的脸书人工智能算法以近乎人类的方式对数据进行筛选、分类和预测。

https://unsplash.com/photos/HUBofEFQ6CA

如何以及为什么

W hy:由于大量数据和处理能力的涌入,我们将探索如何仅使用一组脸书喜欢的东西来预测人类特征。为了实现我们的结果,我们将尝试复制分析来自剑桥分析数据丑闻的数据的流行论文。(纸在这里)

H ow:为了建立一个预测模型,我们将利用脸书广告类别数据集。利用这一点,我们将尝试创建一个类似用户的稀疏矩阵,其中每个类别对应一个评级。(1 代表,用户喜欢的内容。0 代表,用户不喜欢的内容)

要求

  • Python 3.8
  • sci kit-学习
  • 熊猫
  • Numpy

资料组

像任何 ML/数据挖掘项目一样,我们将从分析和生成数据集开始。

脸书广告类别数据集的预览。

如你所见,数据集非常广泛,因为它是众包的,这些条目是真实用户的。从数据集中可以明显看出,我们只需要“name”列。以此为起点,我们可以生成数据集的下一部分。

def generate_data(number_of_users=55000, cols=cols):"""Generates random data consisting of user's likes and dislikesArguments:number_of_users: intReturns:DataFrame"""assert number_of_users <= len(cols), "Number of users and cols should be less or equal."index = ["User {}".format(i) for i in range(1, number_of_users+1)] # Number of user# generic categoriescols = cols.tolist()data = {col: [] for col in cols}# random liking or disliking ( 1 or 0)def like_or_not(): return random.randint(0,1)for col in cols:#print("Adding for {}".format(col))for i in range(1,number_of_users+1):data[col].append(like_or_not())print("Data generation complete.")return pd.DataFrame(data=data, index=index), index, cols

为了生成我们的数据,我们提取“name”列,并为每个用户随机分配 1 或 0。

like_or_not 函数

用户数=5 时我们生成的数据集的预览

目标变量

到添加我们的目标变量,我们将关注“年龄”、“性别”和“政治”。这些是我们希望通过收集每个用户的脸书喜好来预测的变量。

def generate_target_variables(number_of_users=55000,target=['age', 'gender', 'political']):
  # for each target we will generate random data
  data = {"age":[], "gender":[], "political":[]}# for age (age ranged: 18 to 75)
  # regression
  data['age'] = [random.randint(18, 75) for x in range(1, number_of_users+1)]# for gender (m or f) ( 1 or 0)
  # classification 
  data['gender'] = [random.randint(0,1) for x in range(1, number_of_users+1)]# for political
  # classification (1 -> democratic, 0 -> republican)
  data['political'] = [random.randint(0,1) for x in range(1, number_of_users+1)]return data# adding target variables
data['age'] = target['age']
data['gender'] = target['gender']
data['political'] = target['political']

数据集中的目标变量

降维

由于我们的数据集包含约 52000+个产品的广告类别,我们将使用奇异值分解进行降维。(论文中也有提及)

对于那些不记得奇异值分解或主成分分析的人,我们将简要概述这一过程。

降维,或称降维,是将数据从高维空间转换到低维空间,使低维表示保留原始数据的一些有意义的属性,理想情况下接近其固有维度。

F 或 SVD,我们本质上使用公式来转换数据:

https://en.wikipedia.org/wiki/Singular_value_decomposition

为了执行我们的降维,我们将使用 sklearn TruncatedSVD 类,其中 n_components=100(根据论文。)

def dimen_reduce(values):

    reduced = TruncatedSVD(n_components=100)
    tr = reduced.fit_transform(values)
    return tr

在执行 dimen_reduce 时,我们得到了这个转换后的数据帧

def generated_reduced_df(df, index, number_of_users=55000):tr = dimen_reduce(df.values)# 100 componentsdimen_df = pd.DataFrame(data=tr, index=index)target = generate_target_variables(len(dimen_df))dimen_df['age'] = target['age']dimen_df['gender'] = target['gender']dimen_df['political'] = target['political']return dimen_df

我们最终的数据集

培养

如根据本文,我们用线性回归训练年龄目标变量,用逻辑回归(分类)训练其他参数。

论文提到了许多参数,但是由于计算的限制,我们只预测了三个变量(年龄、性别、政治)。

def split_dataset(df,test_size=0.2, stype="linear"):features_age, labels_age = df.drop(columns=['age']).values, df['age'].valuesfeatures_gender, labels_gender = df.drop(columns=['gender']).values, df['gender'].valuesfeatures_political, labels_political = df.drop(columns=['political']).values, df['political'].valuesif stype == 'linear':x_train, x_test, y_train, y_test = train_test_split(features_age, labels_age, random_state=42, test_size=test_size)return x_train, x_test, y_train, y_testif stype == 'clas_gender':x_train, x_test, y_train, y_test = train_test_split(features_gender, labels_gender, random_state=42, test_size=test_size)return x_train, x_test, y_train, y_testif stype == 'clas_pol':x_train, x_test, y_train, y_test = train_test_split(features_political, labels_political, random_state=42, test_size=test_size)return x_train, x_test, y_train, y_test

由于性别和政治目标变量是 1 和 0 的形式,我们使用 LogisticRegression 来训练我们的模型。我们使用线性回归以年龄作为目标变量来训练我们的模型。

答根据论文,我们根据奇异值分解对 100 个成分进行 10 重交叉验证。

# age
cross_val_score(linear_reg, x_train_linear, y_train_linear, cv=10)
cross_val_score(linear_reg, x_train_linear, y_train_linear, cv=10)# gender and political
cross_val_score(log_reg, x_train_gender, y_train_gender, cv=10)
cross_val_score(log_reg, x_train_pol, y_train_pol, cv=10)

结论

到总结,我们看到脸书的喜好是如何影响或预测重要的人类特质的。有了足够的数据(n=55000),我们可以获得可接受的准确度作为测量的 ROC。随着数据的涌入,我们可以看到,如果组织能够访问脸书的数据,那么锁定特定人群是多么容易。

参考

【1】https://www.pnas.org/content/pnas/110/15/5802.full.pdf】T21

链接

[1]Github:https://github.com/aaditkapoor/Facebook-Likes-Model

[2]Colab:https://Colab . research . Google . com/drive/1k 75 odwkhenxirvdkzyybimpqngisjs 6?usp =共享

为什么你的 Horovod 比平时慢?

原文:https://towardsdatascience.com/why-is-your-horovod-slower-than-the-usual-201b4b8574d5?source=collection_archive---------26-----------------------

https://github.com/horovod/horovod

本文讨论了如何使用 Horovod 进行更快的训练,以及在使用 Nvidia GPUs 作为加速器时可能导致训练速度下降的一些常见瓶颈。

Horovod 是一个大规模执行分布式深度学习训练的框架。它的目标是用仅仅五行代码将大规模分发到深度学习作业中(嗯,差不多,取决于你想做什么)。让你的深度学习工作分布式的提升在你这边非常低,至少用 tf.keras API 是这样。你自己用一个 MNIST 的例子来看看吧。

[## 霍罗沃德/霍罗沃德

此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…

github.com](https://github.com/horovod/horovod/blob/master/examples/tensorflow_keras_mnist.py)

以下几点可能有助于您在使用 GPU 时调试缓慢的 horovod 作业:

  1. 环境设置:确保您已经安装了正确的环境。这包括使用无 bug 的 MPI,比如 OpenMPI。从 horovod 的自述中可以看出。

注意:Open MPI 3.1.3 有一个可能导致挂起的问题。建议的修复方法是降级到 Open MPI 3.1.2 或升级到 Open MPI 4.0.0。

使用深度学习框架的无 bug GPU 版本(至少在 TensorFlow 的情况下)总是有帮助的。我记得 tensorflow-gpu 1.13.1 有一个 bug,它会产生比所需数量更多的进程,使进程争夺没有有效完成任何工作的 gpu 资源。

2。正确的绑定参数:使用带有正确 MPI 参数的 mpirunhorovodrun(取决于您使用的硬件)可以提高性能。理想情况下,控制 GPU 的进程应该绑定到最近的 CPU 插槽。这是可变的,取决于您用来训练模型的服务器硬件。在戴尔 EMC PowerEdge C4140 上,最佳选项是— 按插槽映射。不需要指定任何绑定选项。看起来大概是这样的:

mpirun-map-by socket-NP x python pyfile . py--py options

3。每个 GPU 一个进程:作业应该设置为一个 MPI 进程在一个 GPU 上工作。如果进程的数量超过 GPU 的数量,这些进程将会竞争计算资源,并且无法以良好的性能运行作业。在上面的例子中, x 应该是要使用的相同数量的 GPU。

要为每个 GPU 设置一个进程,使用 TensorFlow 的 ConfigProto()如下:config . GPU _ options . visible _ device _ list = str(hvd . local _ rank())

4。要检查使用 GPU 的进程数量,可以使用 GPU 的内存消耗‘watch NVIDIA-SMI’命令。这也允许查看功耗。

观看 nvidia-smi

5。闲置 GPU: 这是你工作变慢的一大元凶。如果你的图形处理器急需数据,那么工作很容易变慢。我见过需要数天/数小时培训的工作,如果数据管道处理正确,可以在不到一小时内完成。确保您的代码实现了数据流水线机制,如 tf.datadali 或任何能够在训练发生时进行更快预处理并准备好下一批的机制。

如果数据管道设置正确并且 mpirun 参数正确,一旦模型训练开始,GPU 利用率应该会持续超过 80-90%。偶尔降低到 10–25%的利用率是可以接受的,但是不应该太频繁。

5。检查是什么让事情变慢了:使用 horovod timelinenvprof 查看任何可能出现的瓶颈,来描述你的工作。瓶颈很可能是由以下原因之一造成的:

a) TF 数据管道没有设置好,因此在加速器空闲时花费了大量时间来准备数据。若要解决此问题,必须更正 tf 管道。查看 tf 官方模型报告以获得建立高效数据管道的灵感。

b)通信可能没有使用正确的结构—确保您使用的是 InfiniBand ,在运行 mpirun 时查看结构用法包括–x NCCL _ 调试=信息,如下所示:
mpirun-NP 4—map-by socket-x NCCL _ 调试=信息 python something . py-{ params }
或使用包含–x 绑定的horovidun

6。GPU 通信:为了正确地实现分布,GPU 之间需要进行有效的通信。如果他们不能有效地沟通,这就会导致沟通瓶颈。要查看他们是否以最佳方式进行沟通,请使用以下流程:

  1. 使用 NCCL 调试=信息可以向你展示图形处理器是如何说话的。如果 GPU 在说话:

a. 在节点内以一种最优的方式将看起来类似于这样:GPU 002:1299562:1299573[0]NCCL 信息环 00 : 0[0] - > 1[1]通过 P2P/IPC

b. 最优方式下的外部节点看起来将与此类似:

GPU 028:149460:149495[0]NCCL 信息环 01 : 16 - > 0【发送】via NET/IB/0

GPU 009:164181:164216[0]NCCL 信息环 01 : 12 - > 8【接收】via NET/IB/0

GPU 009:164181:164216[0]NCCL 信息环 01 : 4 - > 8【接收】via NET/IB/0

6。其他通用提示:设置批处理大小,使 GPU 内存几乎已满,但要加以限制,以免超出内存要求。重要的是要考虑完成学习率缩放的方式。学习率缩放的概念是,随着 GPU 数量的增加,学习率也必须乘以与 GPU 数量成比例的因子。这允许模型有效地收敛。这样,通过将最大数量的可能图像安装到 GPU 上,可以减少 i/o 操作的数量,而不会影响模型的收敛性。必须注意的是,在分布式工作负载设置中,学习率缩放并不总是改善模型收敛的最佳解决方案。
检查是否需要学习率缩放:

  1. a)以分布式模式训练具有和不具有学习率缩放的模型。
    b)如果没有学习率缩放的模型比具有学习率缩放的模型执行得更好,则不需要学习率缩放。
  2. 特别是当训练收敛时,并不总是强制性的规则来适应每批图像的最高可能数量。数据科学家必须能够根据他们的使用案例,在批量大小和收敛(是否使用学习率缩放)之间做出权衡。
    同样,你可以使用‘观看 NVIDIA-SMI’来查看 GPU 内存的消耗。使用学习率调整时,通常会有预热阶段,如本文中所述。

3.安装最新的库。

分配你的深度学习工作有时会很有挑战性,特别是当使用的节点/GPU 数量不能有效地转化为相应的性能时。为确保从加速器投资中获得最大收益,请确保实施以下最佳实践:

  • 正确的绑定选项已经就绪,
  • 评估不浪费 GPU 内存的多个进程,
  • 使用现代流水线方法,
  • 查看 GPU 的剖析至少在作业运行的 80%的时间里被使用,
  • 使用最新的 CUDA 相关库,比如 CUDA 驱动包括 NCCL 等。

如果你有更多的解决方案,我会很高兴听到。请评论。

数据科学家,为什么感觉你的队友比你聪明

原文:https://towardsdatascience.com/why-it-feels-your-coworkers-are-smarter-than-you-96763c72351e?source=collection_archive---------76-----------------------

你不明白你的同事在谈论什么以及你能做些什么的一个原因。

克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片

这是你作为一个新项目的数据科学家的第一天。你在之前的项目中表现出色,并被邀请加入这个在机器学习领域需要帮助的新团队。这是非常令人兴奋的,你已经准备好投入并开始行动了。你很乐观,尽管你心里有些紧张。当你开始一个新的角色时,紧张是很正常的,尤其是当你被提升到这个位置时。

你参加了你的第一次每日站立会议。你的新成员欢迎你。一些人提到他们非常钦佩你之前的工作。他们期待着你对这个项目的贡献。伟大的开始!

当您的新团队成员四处提供状态更新时,您会专注地倾听。数据分析师谈论最近 A/B 测试的统计意义。您的技术负责人讨论了一个线程问题,并提出了一种新的设计技术。项目经理讨论部署到生产所需的变更管理批准。架构师担心 LDAP 协议可能不适合他们的应用程序。 LDAP? 什么是 那个?渐渐地,你的头脑开始混乱,怀疑混入你的思想。

每个人知道的都比你多

你变得越来越自我,开始怀疑自己是否有能力为这个项目做贡献。肯定有人会意识到你根本不知道他们在说什么。

下图可以说明这种情况的感受:每个人都比你聪明。

由作者创建

这种知识上的巨大差距感觉是不可逾越的。难怪你会感到不知所措,担心被揭穿是个骗子(典型的冒名顶替综合症)。

冒名顶替综合症不仅在新数据科学家和软件开发人员中很常见,在所有岗位上都很普遍。事实上,你的一些队友可能也有同样的感觉。

别着急,有好消息。

每个人知道的东西都比你不同

现实情况是,你的队友并不一定比你知道的更多。他们只是比你更了解不同的事物。团队中没有一个成员什么都知道,不管他们看起来多么自信。每个人都将自己的专业知识添加到最终产品中。

它可能会帮助你改变你的心态,就像这个插图所示。

请注意,所有团队成员共享的知识很少。在这个项目中,每个人都互相依赖。你带来了一套特殊的技能和专业知识,这将有助于最终的产品。

你的经理知道你有技能。这就是为什么他们选择你这个角色。他们相信你。现在是你相信自己的时候了。

后续步骤

你可以做很多事情来获得对工作的信心,朝着项目和职业目标前进。

首先,深呼吸,呼气。你的感觉是完全正常的。

知道不知道“一切”是好的。鉴于每天都有大量的新信息、研究和有趣的技术问世,这甚至是不可能的。

如果你有导师,这将是一个很好的话题。他们经历过类似的情况吗?如果是,他们是如何克服的?

你可能会发现,当你进入新的、更具挑战性的角色时,自我怀疑会再次出现。这是很常见的。一个诚实的部门主管可能会承认,至少在新职位的前六个月,他们经历了严重的自我怀疑。

拥抱你的新角色以及最初几天和几周的不确定性。很快你就会完全融入你的团队,并提供一些令人震撼的新功能。

互联网上有很多资源可以帮助你识别和克服冒名顶替综合症。瓦莱丽·杨的《克服冒名顶替综合症的 10 个步骤》就是这样一个资源。

为什么 Iterables 在 Python 中如此强大——理解这 5 种不同的用法

原文:https://towardsdatascience.com/why-iterables-are-powerful-in-python-understand-these-5-distinct-usages-130f364bd0ba?source=collection_archive---------34-----------------------

提高您的 Python 技能

理解 iterables 的这些常见用例,以提高您的 Python 编码技能

照片由阿列克谢·鲁班Unsplash 上拍摄

什么是可迭代的?

Iterables 是 Python 中重要数据结构的集合。例如,字符串、列表和字典等内置类型都是可迭代的。如果您使用过高阶函数,如映射过滤器,您可能知道这些函数也创建可迭代对象(即映射过滤器对象)。再举一个例子,你可能听说过生成器,它也是具有内存效率的强大工具。

这些数据类型是我们在 Python 中使用的 iterables 的常见例子。但是什么是可迭代的呢?《流畅的 Python——一本关于更高级 Python 的好书——的作者卢西亚诺·拉马尔霍给出了以下定义。基本上,可迭代对象是那些可以被转换成迭代器的对象,这样它们的元素就可以被迭代来执行某些操作。

“iter 内置函数可以获取迭代器的任何对象形式。实现返回迭代器的 iter 方法的对象是可迭代的。—卢西亚诺·拉马尔霍的《流畅的蟒蛇》

Iterables 是如此重要,以至于它们在许多地方被用于不同的目的。本文试图对 Python 中 iterables 的常见用例进行系统但非详尽的回顾。在回顾了这些使用场景之后,我希望您会对在 Python 项目中使用 iterables 感到更加舒适。

1.使用 For 循环的迭代

iterables 最明显的用法是在 for 循环中迭代 iterable 的每一项。在底层,每个 iterable 都被转换成一个迭代器(使用前面提到的iter()函数),迭代器通过调用next()函数将项目呈现给 for 循环。当然,当前的文章并不是要提供一个彻底的关于迭代是如何实现的机械论解释(如果感兴趣,请看这里的。相反,让我们看看 iterables 在迭代中是如何工作的。如下面的代码片段所示,常见的内置 iterables 都可以在迭代中使用。有两件事值得注意。

  • 字符串是可重复的,单个字符被认为是字符串对象的项目。
  • 默认情况下,字典会遍历它们的键。如果需要迭代它们的值和项(即键值对),就必须分别使用字典的values()items()方法。

迭代迭代

2.集合数据类型构造

我们可以使用 iterables 来创建集合数据类型,一些常用的类型包括列表、集合、元组和字典。在包含可管理数量的元素的简单场景中,我们可以使用文字来创建这些数据。如前一节代码片段的开头所示,我们只是指定了将要存储在这些数据容器中的单个元素。很直白,对吧?

然而,当我们需要创建包含大量元素的容器数据时,使用文字就不那么方便了。值得注意的是,每种集合数据类型都有自己的构造函数,使用各自的类名,并且它们可以简单地使用 iterables 来创建新的集合对象。下面的代码向您展示了我们如何做到这一点。

使用 Iterables 构建集合数据

如果你从事数据科学或机器学习,你可能对 NumPy 和 Pandas 包并不陌生。这些包中最基本的数据结构都是使用 iterables 构造的。下面的代码片段向您展示了一些基本用法。

使用 Iterables 创建结构化数据

3.理解和生成器表达式

Python 中一个特别有用的特性是理解技术。具体来说,我们使用理解来创建列表、集合和字典,这些技术被称为列表理解、集合理解和字典理解。它们有以下基本形式。

理解语法

如上所示,所有这些形式都包括单行迭代的使用。每个理解都可以有一个可选的条件评估—当它为真时,该项目将被发送到表达式。列表和集合理解都只有一个表达式,而关键字理解有两个表达式,一个表示关键字,另一个表示值。另一个显著的区别是使用方括号来理解列表,而对于其他两个列表,则使用花括号。你必须清楚这些相关技术的微妙之处,因为如果你混淆了这些语法,你可能会得到意想不到的结果或者在你的代码中产生错误。下面的代码片段向您展示了这些理解技术的用例。

理解示例

与这些理解技术相关的是生成器表达式,它用于创建生成器。像这些理解的输出一样,生成器表达式的输出(即生成器)也是可迭代的。与这些来自理解的可重复项不同,生成器可以在被请求时产生值,因此它们的内存效率很高。如果你想了解更多关于发电机的知识,你可以在这里找到更多的。下面让我们看看创建生成器的语法及其用法。

生成器与列表

如上所示,生成器只需要少量的内存,因为在这个例子中,它们不会将所有的元素都作为列表加载。重要的是,当我们使用内置的sum()函数计算这些平方和时,生成器和列表可以产生相同的结果。

4.列表和元组解包

当我们处理列表和元组时,我们通常需要使用数据的特定部分。常见的方法是使用索引/切片技术,这将允许我们获得单个元素或数据块。然而,索引和切片可能很棘手,因为所用的数字看起来很神奇(也就是说,有人可能很难理解为什么要使用特定的索引)。相反,我们可以使用解包技术,这涉及到按顺序将元素分配给特定的变量。下面我们来看一个微不足道的例子。

元件的拆包

在上面的例子中,我们使用了与 iterable 中元素数量相同的变量。然而,为了使解包技术更加强大,Python 支持使用无所不包的方法来解包。具体来说,如果我们使用的变量数量少于 iterable 中的元素数量,带星号的变量将捕获所有剩余的元素。值得注意的是,特定的变量将被创建为可迭代的(即一个列表对象)。让我们看看这个特殊的用法。

使用星号拆包

分别给first_numberlast_number分配列表的第一个和最后一个元素。有趣的是,middle_numbers捕获了中间的所有数字,并且有一个数据类型为 list

5.高阶函数

iterables 的另一个用例是它们是一些高阶函数的输入(即参数)和输出(即返回值)。涉及迭代的两个常见高阶函数是映射滤波器函数。对于过滤器函数,它需要一个 iterable 和一个过滤函数,这将应用于 iterable 的每个元素。当条件满足时,该项将被保存在迭代器中。让我们看看如何对 iterables 使用 filter 函数。如示例所示, filter 函数通过只包含可被 3 整除的序列来过滤序列。重要的是,生成的过滤器对象是一个迭代器,因此能够在迭代中使用。

Iterables:过滤函数

对于映射函数,它将采用一个映射函数和一个或多个 iterables。重要的是,iterables 的数量应该与映射函数接受的参数数量相匹配。iterable 中的每个元素都将被传递给映射函数进行处理。映射的项目将包含在输出映射对象中,该对象是一个迭代器对象。让我们在下面的代码片段中看看 map 函数是如何工作的。与过滤功能相比,映射功能是使用映射功能转换对象,而不评估包括哪些元素。

Iterables:映射函数

作为一个重要的旁注,即使我们可以在 map 和 filter 函数中使用 iterables,如果使用这些高阶函数来创建列表、字典、集合和生成器的整个目的,我们应该考虑使用相应的理解技术,因为它们更具可读性,被认为更 Pythonic 化。

结论

在本文中,我们回顾了 Python 中 iterables 的五个常见用例。它们是一个非常宽泛的概念,包括内置的数据类型(例如,字符串、列表和字典)。因此,更好地理解这些用法可以帮助您处理 Python 项目中涉及 iterables 的大部分工作。

感谢您阅读本文,祝您用 Python 编程愉快。

为什么用英语比韩语更容易分析社交媒体上关于寄生虫的讨论

原文:https://towardsdatascience.com/why-its-easier-to-analyze-social-media-buzz-about-parasite-in-english-than-korean-and-how-open-9b3cd0ebff92?source=collection_archive---------60-----------------------

以及开源文化如何改变这种状况

由 Theo Goetemann&hyun jae Cho

“换句话说,对于一个初学数据的科学家来说,用英语找到并使用开源库来分析围绕韩国电影《寄生虫》的基于文本的社交媒体比用韩语来分析更容易。”

《寄生虫》不仅仅是商业上的成功,它还是喜剧和语言上的挑战。影评人说,如果不是因为反映太平洋彼岸语义和文化的字幕质量,《寄生虫》不可能在美国大受欢迎。

图片来自维基百科

将剧本翻译成英文字幕的美国电影评论家达西·帕凯说,翻译过程涉及许多电子邮件,甚至花了更多时间与奉俊浩和他的团队一起写作和修改。他和 Bong Joon-Ho 不得不做出艰难的翻译决定,从妙语的表达到翻译“jjapaguri”,这是 Jjapaghetti 即食黑豆面和 Neoguri 即食辣面汤的令人上瘾的组合,面向讲英语的观众。

“jjapaguri”怎么翻译成英文?Ram-don =拉面和乌冬。一个新颖挑战的巧妙解决方案。如果两位专家捕捉《寄生虫》中幽默的细微差别如此困难,想象一下,为了让算法捕捉同样的细微差别,我们还需要走多远。

图片来自 Geolee 在istockphoto.com

在数据科学和自然语言处理(NLP)中,我们也面临着持续的灰色选择;几乎没有黑色和白色。例如,在知道数据中存在潜在偏差的情况下,如何使用历史警察逮捕数据创建预测性分析?在为主题分类创建训练数据集时,您如何在短项目时间表和精确度之间取得平衡?甚至当您开始您的第一个数据科学项目时,您已经在权衡使用哪些库的利弊,并且在这个过程中,正在深入研究作者在创建库时所做的主观选择。

图片来自克里斯蒂娜·莫里洛,佩克斯

作为一名初学数据科学家,要充分探索这些细微差别和决策,课程和培训可能会有所帮助,但最终,它们无法取代对在线开源库海洋的单独探索。开源库是任何人都可以自由重用、修改和发布的代码库。代码的作者可以在不同的许可下发布他们的作品,这决定了他们的代码如何被重用(例如,用于商业项目)。许多这些库也是有经验的数据科学家的关键构建模块,允许他们快速原型化和构建最小可行的产品,以及作为更大、更复杂项目的基础。

使用 City78 数据放置身份快照。作者图片

当 Hyunjae 和我第一次开始修改city 78’s 代码来分析韩语文本时,我们期望构建一组模块化的脚本作为原型,并插入到我们现有的流程中。我们计划使用开源的韩国 NLP 库来分析 Naver,该平台的搜索引擎占韩国所有网络搜索的大约四分之三,利用该平台的地理定位零售和公共评论来创建社区的场所身份快照。然而,我们发现,许多开源文本分析工具(例如,情感分析、分词器)——在英语中我们认为理所当然的工具——在青少年时期以韩语开源库的形式存在,而不是我们预期的即插即用。

Github,Naver 截图

虽然像 Naver 这样的大公司在内部肯定拥有一系列令人难以置信的 NLP 资源,并且确实为开源社区、包括 NLP 库、做出了贡献,但这些库的可访问性和易用性对于鼓励它们在传统的非数据科学领域的实施以及学生对它们的使用至关重要。

换句话说,对于一个初学数据的科学家来说,用英语找到并使用开源库来分析围绕韩国电影《寄生虫》的基于文本的社交媒体比用韩语来分析更容易。

图片来自 Arif Riyanto,Unsplash

在我们尝试构建一个可以分析朝鲜语文本的快速原型的过程中,我们了解到,对于许多刚刚进入朝鲜语自然语言处理领域的人来说,没有一条直接的道路。然而,随着用户生成的文本数据量继续以指数速度增长,自然语言处理技术对于理解消费者/公众/团体的观点、趋势等将至关重要。作为个人、社会和机构,我们有责任促进开源工具的发展,使学生和专业人士能够学习和创新。

本文旨在作为探讨机构和私营部门在围绕自然语言处理培养开源文化中的作用的对话起点,因为这一不断发展的学科的影响将塑造一代数据科学家、商业模式和世界各地处理文本数据的初创公司的可扩展性。

我们希望您能加入我们的对话,用非英语语言分享您自己的开源和 NLP 经验。

为什么 Keras 是领先的深度学习 API

原文:https://towardsdatascience.com/why-keras-is-the-leading-deep-learning-api-31e00dfa012c?source=collection_archive---------56-----------------------

了解 Keras 深度学习库

塞巴斯蒂安·沃特曼在的照片

Keras 是一个开源、用户友好的深度学习库,由谷歌深度学习研究员 Francois Chollet 创建。Keras 背后的用户友好的设计原则使用户可以很容易地将代码快速转化为产品。因此,它在工业界和学术界都有许多应用。

Keras 团队的任务是让机器学习民主化。这意味着它是按照特定的标准设计的,旨在使其高效、可靠,并能为大量受众所接受。在这篇文章中,我想探索 Keras 的关键特性(正如在 Keras 文档中概述的),回答为什么 Keras 是领先的深度学习工具包的问题。特别是,我将讨论 Keras 的三个主要特性:用户友好的设计、跨多个平台的轻松部署以及可伸缩性。

人性化设计

Keras 为神经网络模型构建过程的几乎每个方面都提供了易于使用的模块,包括模型、层、回调、优化器和损失方法。这些易于使用的功能支持快速模型训练、健壮的模型测试、快速实验和灵活部署,以及许多其他功能。

模型 API 包含顺序模型类(限于单输入、单输出的层堆栈)、模型类(支持任意模型架构)、模型训练方法(用于拟合、编译和评估)以及模型保存方法。这些模型方法允许您轻松地使用模型参数细节(如损失函数、层、节点、优化器和激活函数)来扩充模型对象。此外,它允许您以直观和易于阅读的方式调用实例化模型对象上的 fit 和 predict 方法。

例如,通常用于图像识别的卷积神经网络可以用 12 行简单的代码进行初始化、分层、训练和测试:

另一个例子是实现 LSTM 模型,它可用于语音识别任务。该系统可以通过 6 行代码来实现这一点:

模型方法还允许您保存和重新加载模型权重,这避免了在相同数据上重复重新训练模型的耗时任务。

层方法使得层的添加变得容易,这些层是神经网络的构建模块。要了解这一点,以添加卷积和 LSTM 层为例,如上所示。要添加卷积层,只需在模型对象上调用“add()”方法,并传入 Conv2D 方法作为参数:

要添加一个 LSTM 层,你可以在你的模型对象上调用“add()”方法,并传入 LSTM 方法:

总的来说,layers 方法包含通常用于各种神经网络架构的密集层、LSTMs 层、用于卷积神经网络的卷积和汇集层、递归神经网络层等等。它还包含激活层、规范化层和正则化层。LSTM 层和递归层可用于建立神经网络,该网络用于涉及序列的各种预测任务。这些包括时间序列预测、语音识别、语法学习、手语翻译等等。卷积神经网络使用卷积层,因此得名。他们从事各种图像分类任务,如自动驾驶汽车中的面部识别和物体识别。激活层 API 对于激活函数的快速实验是有用的,激活函数在神经网络层中对神经元触发过程进行数学建模。根据您的使用案例和数据质量,一个激活函数可能比另一个更有用。能够快速测试几个激活功能允许您快速生成结果并更快地构建准确的模型。例如,如果您想尝试在 LSTM 图层中使用校正线性单位(“relu”)激活函数,只需在 LSTM 方法的参数中输入 activation =“relu”:

或者,您可以通过更改很少的代码来尝试使用双曲正切激活函数:

此外,标准化层有助于确保神经网络模型根据正负特征值进行训练,并且这些值对学习的影响程度相似。最后,正则化层有助于防止神经网络过拟合。

Keras 的回调方法也特别有用,它允许用户在训练期间执行各种动作。例如,ModelCheckPoint 类允许您在训练过程中保存模型权重,以防中断。您还可以使用这个类来继续您离开的地方,并进一步微调您的模型。EarylStopping 允许您在绩效指标停止改善时停止训练。如果不及早停止,您可能会在不再提高模型性能的培训中损失很多时间。如果使用正确,这些回调类可以节省数小时的训练时间和计算资源。

优化器方法允许您无缝地实现优化器,如随机梯度下降(sgd)、Adam、均方根传播算子(RMSProp)、AdaDelta 和 adagrad。对于可能不知道 sgd 和 adam 之间理论差异的新研究人员或开发人员,Keras 允许快速测试两者,从而更快地生成结果。

Keras 具有概率损失和回归损失的损失方法,这两种方法都包含易于访问的损失函数套件。假定损失函数建议神经网络的训练过程,能够用不同的损失函数运行快速实验能够实现快速模型开发。该网络包括二元交叉熵和稀疏分类交叉熵,两个流行的分类损失函数。对于回归,损失 API 包括均方误差、平均绝对误差、平均绝对百分比误差等等。在回归和分类任务的情况下,对这一套功能的容易访问使得快速原型和实验成为可能。

总的来说,易于使用的神经网络组件的 API 允许容易的实验、更快的结果、有效的研究和容易的产品部署。所有这些功能意味着 Keras 可以让您设计高度可定制的工作流程,轻松快速地从想法到产品。

研究 &产业

Keras 在研究机构和行业中被广泛使用,大概是因为它的用户友好特性,可以实现高效的研究和原型制作。例如,具有最少编程和深度学习知识的研究和行业领域专家可以使用 Keras 快速构建和优化他们用例的模型。

在研究领域,CERN 和 NASA 等大型机构将 Keras 用于各种应用。CERN 通过深度学习将模式识别应用于粒子跟踪(研究单个粒子在介质中的运动)等任务,例如跟踪希格斯玻色子。CERN 还将深度学习用于一项名为 jet flavor tagging 的任务,该任务与粒子识别有关。美国宇航局将深度学习用于像系外行星发现、月球上的行星导航、智能机器人宇航员/机器人等等任务。

在纯粹的研究领域之外,Keras 也被证明在商业领域也很有用。像网飞这样的公司已经使用 Keras 建立推荐系统,根据过去的数据预测用户的偏好。对于网飞来说,这涉及到根据观众过去看过的电影和节目的数据训练一个神经网络,并随后预测用户可能喜欢哪个新节目或电影。优步还使用深度神经网络来预测骑手需求,估计接送的到达时间,寻找骑手/司机匹配,以及其他任务。此外,Uber Eats 使用基于神经网络的推荐系统向用户推荐吃饭的地方。其他公司,包括 Yelp、Instacart、Zocdoc 和 Square,也在各种应用程序中使用 Keras。

总的来说,虽然对于任何具有最低限度编程或深度学习经验的人来说,开始使用 Keras 都很简单,但 Keras 在研究和行业中的广泛采用表明,它能够实现许多强大的实际应用。

部署在平台上

Keras 也可以很容易地跨各种平台部署。例如,使用 Keras 构建的模型可以通过 Python 运行时部署在服务器上。像优步和网飞这样的公司使用 Node.js 来部署他们的许多深度学习产品,例如他们的推荐系统。Node.js 是一个 JavaScript 框架,对于希望使用 Keras API 进行模型开发而又不想学习新的编程语言的 JavaScript 开发人员来说特别有用。此外,Keras 模型产品可以部署在 Android、iOS、Raspberry Pi 等平台上。

Keras 在工业和研究领域的广泛采用使其成为深度学习领域的领先 API。此外,因为您可以跨多种平台部署 Keras,所以 API 非常灵活。Keras 相对平台不可知的事实意味着它可以用于各种 web 和移动应用程序。此外,Keras 的灵活性和用户友好性有助于软件应用程序开发的快速创新,特别是在数据驱动的行业。

Keras 可扩展性

Keras 是高度可扩展的,因为它本身支持 Tensorflow 分发策略 API。这使您可以轻松地在数千台 CPU 或 GPU 设备上运行您的模型。模型分发可以采取两种形式之一。第一个是数据并行,在多个设备上训练单个模型。第二种方法,模型并行,涉及在多个设备上训练单个模型的不同部分。Keras 支持分布式计算的数据并行性,这使得可伸缩的模型开发成为可能。可扩展的模型开发对于优化模型开发的生产率、最小化训练模型的成本、以及当单台机器上的资源稀缺时最小化人工介入或干预是至关重要的。

从产品开发的角度来看,可伸缩性对于产品的效率和质量至关重要。考虑一下网飞推荐系统的例子。随着网飞继续获得更多的付费会员,更多的人将使用该平台,这反过来增加了用于训练推荐系统的神经网络的计算负荷。随着用户数量的增长,需要存储更多的数据并用于训练神经网络模型。更多的用户意味着观看更多的电影和节目。这意味着观众偏好预测类型的数量增加,这将需要对更大的数据集进行更长的训练时间。测试也是如此。稳健测试成本高昂,可能需要大量的硬件资源。在这两种情况下,通过数据并行化进行扩展可以显著减少机器学习管道每个部分的时间和成本。

如果你正在用底层的深度学习技术创业,Keras 尤其棒,因为新业务具有最高的增长潜力。对于您的新业务,Keras 允许您通过分布式计算的本地支持来扩展计算。随着平台的不断增长,这允许您最大化模型开发的生产力,并最小化模型培训/测试的成本。

结论

Keras 是一个用户友好的工具包,大大降低了深度学习研究和开发的门槛。Keras 的低门槛是 Keras 团队为了使机器学习民主化而有意融入的设计原则。如果用 Keras 建立模型既不需要编程也不需要深度学习专业知识,那么来自各行各业、有不同想法和经验的人可以很容易地将深度学习应用于他们感兴趣解决的问题。Keras 在工业和研究中的广泛应用也说明了这些努力。例如,如果没有深度学习经验的化学物理学家想要将深度学习应用于化学中的一个新颖问题,他们可以很容易地学习如何使用 Keras 并开始测试想法。此外,如果一家缺乏数据科学团队的成长型零售公司试图使用消费者购买数据来预测对其产品的需求,他们可以很容易地开始使用 Keras。用户的低认知负荷、可扩展性以及易于访问和理解的功能是吸引大公司、初创企业和政府研究机构的研究团队的主要特征。我鼓励没有使用过 Keras 或者使用 Keras 的经验有限的读者了解更多关于这个库的知识,并尝试将它融入他们的工作和/或项目中。

为什么知道未来会导致经济崩溃

原文:https://towardsdatascience.com/why-knowing-the-future-would-crash-the-economy-92ba11b0768e?source=collection_archive---------32-----------------------

一个使用博弈论的思维实验解释了为什么我们不能知道自己的未来。

Michał Parzuchowski 的照片

T2:ame 理论是数学的一个分支,有很多应用。尤其是在经济学中,博弈论起着非常重要的作用。这就是为什么许多 T4 数学家被授予诺贝尔经济学奖的原因。一个广为人知的例子是约翰·福布斯·纳什,他的一生在电影《美丽心灵》中有所阐述。

正如“博弈论”这个名字所暗示的,这里涉及到一些种类的博弈。事实上“游戏”的定义非常宽泛。这意味着两个(或更多)完全理性的“玩家”必须做出某种决定。他们做出的决定决定了玩家的输赢。但是让我们来看一个实际的游戏。

让我们从简单的开始

有两个玩家,爱丽丝和鲍勃以及一个游戏高手。游戏工作原理如下。爱丽丝和鲍勃都可以选择要么给游戏主人 8 €,要么什么都不给。在不知道另一个玩家 的决定的情况下,做出是否投资的决定接下来,游戏管理员拿走所有投入的钱,如果 Alice 和 Bob 都什么都没给,则为 0 美元;如果 Alice 或 Bob 投入但另一个玩家拒绝,则为 8 美元;如果 Alice 和 Bob 投入并提高 50%,则为 16 美元。所有的钱,包括游戏主人的利益,在两个玩家之间平均分配。

假设两个玩家都投入了 8 美元,那么总共投入了 16 美元。游戏主持人将奖金提高了 50 %,达到 24 美元。爱丽丝和鲍勃平分这笔钱后,两人都赚了 4 美元。然而,让 Bob 和 Alice 都投资只是一种情况。也有可能是爱丽丝或者鲍勃或者两个人都拒绝了投资。在数学中,我们不喜欢只是玩这样的游戏,我们想完全理解和解决它们,所以我们永远不会再看它们。所以我们开始吧。下表列出了所有四种可能的结果,以及 Alice 和 Bob 相应的利润或损失。

Alice 和 Bob 的每项策略收益

但是坚持住。这幅插图看起来有些可疑。假设鲍勃投资。爱丽丝的最佳策略是什么?没落!好吧,那我们就说鲍勃谢绝了。爱丽丝现在的最佳策略是什么?还在下降!然而,同样对鲍勃来说,最好的策略是永远拒绝

因此,在完全理性的数学世界里,鲍勃和爱丽丝不会投资任何东西,也不会赢得任何东西,尽管他们都有机会成为赢家。

有很多现实世界的场景可以用上面的游戏来部分描述。想一想学校里的一个团队项目,学生们因为害怕比别人做更多的工作而不愿意投入时间。然而,如果所有的学生都为这个项目做出贡献,他们将会从一个伟大的成果中获益。

再来一次!

现在,为什么我们的游戏是有趣的呢?这是爱丽丝和鲍勃的痛苦结局吗?还是在完全理性的世界里,他们有办法合作赚些钱?有,有!如果进行多轮游戏,神奇的事情就会发生。在这种情况下,可能的策略数量激增。例如,Bob 可以总是拒绝或总是投资,但是更复杂的策略也是可能的,比如每三次投资,每隔一次拒绝。因为 Bob 有很多策略可供选择,Alice 在不知道 Bob 的策略的情况下无法确定选择最佳策略。结果,出现了许多有时具有复杂模式的场景。

这个游戏要成功,最重要的要求是鲍勃和爱丽丝不知道最后一轮是什么时候。否则,我们将只剩下一轮比赛了。因为,比如说,我们打十回合,爱丽丝和鲍勃都知道。由于第一场提到的原因,他们都将在第十轮下降。因为第十轮基本上不存在,他们会在第九轮下降,等等。所以回合数必须保密。

这个游戏也发生在现实生活中。这是一个经济相互作用的理论模型,即社会市场经济中的就业市场体系,没有工作的人可以获得失业救济金。每个月一个人可以决定是否投资他们的时间。因为不知道哪一轮是最后一轮对我们的游戏很重要,在某种意义上,如果我们都知道我们的未来,我们的经济体系就会崩溃。

最佳解决方案

不管怎样,回到游戏本身。最佳策略的问题仍然悬而未决。存在无限数量的具有任何期望复杂性的策略。例如,策略可以是只有当当前回合数的质因数之和是 3 的幂时才投资。但是忘了那个吧。答案出奇的简单。

  • 首轮投资
  • 在所有其他回合中,做对方在回合之前所做的事情

为什么这是最优策略?假设鲍勃采用这种策略。如果爱丽丝总是拒绝,鲍勃只是在第一轮输了,但之后是安全的。如果爱丽丝总是投资,那么鲍勃也总是投资并赢钱。假设爱丽丝投资二十轮,然后拒绝二十轮,以此类推。Bob 的策略几乎与 Alice 的策略一致,唯一的区别是只差一轮。爱丽丝可以选择她想要的任何策略,在我们的策略下,鲍勃损失不超过 8 €,但如果爱丽丝也愿意投资,他就会赢钱。

觉得这个故事有趣?在 Medium 上关注我( Marcel )并查看下面的其他故事!请♡分享这篇文章吧!

多句中的一句证明

2020 年为什么要学数据科学?

原文:https://towardsdatascience.com/why-learn-data-science-in-2020-d3f54123b2e4?source=collection_archive---------16-----------------------

为什么是现在?我真的能在这个领域建立事业吗?

图片来自Unsplash.com

数据科学。大数据。机器学习。人工智能。这些都是强有力的词对。让我们看看真实的研究、数字和图像,为什么你应该考虑学习它们。

为什么要学数据科学或者机器学习?

哈佛商业评论将数据科学定义为 21 世纪最性感的工作。全球知名求职网站 Glassdoor 将数据科学评为 2019 美国最佳工作。彭博将 数据科学家视为新的超级英雄

数据科学家、机器学习工程师、数据工程师;所有这些头衔都有两个共同点:它们是目前最有吸引力的职业,它们都暗示着与数据打交道。

-需求-

这些角色的需求在最近几年大幅增加,而且很可能会继续增加,如下图所示。

近年来对数据科学家的需求增加。源顶源底

由于对这类人才的需求如此之高,在其中一个领域拥有足够知识的人可以在许多行业找到工作机会。

对能源市场感兴趣? 业内每一家知名公司都在寻找数据驱动的配置文件,以提高决策和流程效率。

享受顾问服务?所有的大公司(如麦肯锡、贝恩、波士顿咨询公司)都在招聘数据科学家和数据工程师来帮助他们的客户利用他们的数据。

想去科技公司工作? 谷歌、亚马逊、优步、脸书,都在寻求越来越多的数据奇才。

-薪水-

根据 Glassdoor 的数据,美国数据科学家的平均工资为117,345 美元/年,远高于全国平均水平,如下图所示,其他相关职位也相差不远。

美国不同职位的平均工资。来源

-这种美-

除了所有这些,这些工作还负责实施和构建正在彻底改变整个行业的技术,处于令人难以置信的新兴技术的核心,如自动驾驶汽车或先进的图像识别工具,这些角色将是工业和学术界许多即将到来的进步的关键驱动力。

人工智能市场是预期发展最快的市场之一,预计到 2025 年将达到 360 亿美元,如下图所示。

人工智能收入,世界市场。来源

所有这些进步都将对我们的社会非常有益,因此有机会在这些领域中的任何一个领域工作都意味着能够对世界和我们的生活质量产生很大的影响。有太多的事情可以而且将会用人工智能来完成,那些参与其中的人将会掌控塑造我们未来的方向盘。

总之,数据科学,机器学习和其他领域,是非常有前途的领域,令人兴奋,有趣,并有无尽的应用。

尽管有很多从业者,但这些领域缺乏合格的专业人员。如果你成为专业人士名单中的一员,你只能期待高质量和有挑战性的工作。

所有这些领域的需求都非常高,而且还在增长,薪酬也是一流的。

好吧,但为什么这一切都发生在现在?

机器学习并不是一个新领域。它的起源可以追溯到上个世纪。数据科学家也以不同的名字存在了一段时间。

那么为什么是现在呢?为什么近年来会有这类技能的说法?有两个主要原因:

首先,正在生成和消耗的数据量惊人增长。每天,越来越多的传感器收集各种数据,而我们,整天带着智能手机到处走,也是巨大的数据来源。互联网的不断成长也功不可没。

全球现有数据量的预期增长。来源

现在产生的数据比以往任何时候都多。如果不对这些数据进行分析或利用来为企业或组织提供价值,那么所有这些数据都是毫无用处的。它的正确处理允许更好的决策,过程自动化,洞察力发现,等等。

正因为如此,近年来,对能够很好地利用这些数据并最大限度地发挥其潜力的概要文件的需求急剧增长。

其次,可用计算能力的增加使我们有可能构建能够高效处理所有这些数据的系统,从而在合理的时间内获得结果。

1970-2020 年设备密度的摩尔定律图。来源

云计算、AWS、Cloudera、Microsoft Azure 等平台允许我们在世界任何地方的惊人大规模集群和机器上部署和构建智能解决方案,这也极大地促进了人工智能系统可行性的实际改善。

我真的能学到足够的知识来建立自己的事业吗?

你当然可以。有数以百万计的在线和离线资源,在那里你可以学到在这些领域发展职业所需的任何基础知识。

不知道怎么编程?不用担心,可以学习的地方有无限多,而且说实话,为了实现和构建机器学习模型,你不需要成为编程大师。

不懂数学或代数?那也行!有了一些基本的代数概念,你就足以生存,然而扎实的数学背景会有所帮助。同样,如果你想学习,有大量令人惊奇的教科书和资源。概率知识也很有用,并且不难获得足够的背景知识来为自己辩护。

对数据科学或者机器学习一窍不通?婴儿出生会走路吗?正如一切一样,学习这些领域是一个过程,你可以自己买书,做在线课程和程序,成为一名自学的数据科学家,或者你可以注册一个实际的学士或硕士课程。

每天都有越来越多的官方程序被提供,资源的数量几乎是无限的。有这么多的材料,有时很难区分好的和坏的资源,所以所有这些都必须小心谨慎。

这篇文章的目的不是列出好的资源或建议任何人如何学习,但是,如果你感兴趣,请随时联系我,我会尽力指导你。

结束语

一如既往,我希望你喜欢这个职位,并且我已经说服你至少考虑学习数据科学或机器学习。

如果你喜欢这篇文章,请随时在@jaimezorno 的 Twitter 上关注我。还有,你可以看看我其他关于数据科学和机器学习的帖子 这里 。好好读!

如果你想了解更多关于机器学习和人工智能的知识 请在 Medium 上关注我,敬请关注我的下一篇帖子!

在那之前,保重,享受人工智能!

数据科学家(名词):根据那些知识可疑的人提供的不可靠数据进行精确猜测的人。又见:巫师,魔术师。

为什么有经验的优化者优于像 Adam 这样“手工设计”的优化者

原文:https://towardsdatascience.com/why-learned-optimizers-outperform-standard-optimizers-like-adam-5f617b3035d?source=collection_archive---------32-----------------------

反向工程学习优化揭示了谷歌大脑已知的和新的机制

图片来自 Pixabay像素

优化器,如 momentum ( Polyak,1964 )、AdaGrad ( Duchi 等人,2011 )、rms prop(tie leman&hint on,2012 )或 Adam ( Kingma & Ba,2014 )是几乎所有机器学习的算法基础。结合损失函数,它们是使机器学习能够工作的关键部分。这些算法使用源自直觉机制和理论原则的简单更新规则,这是一种衡量预测错误程度的数学方法,并将其调整为更好。

最近的研究思路集中在基于学习的优化算法上;他们称之为习得优化。已经表明,通过直接参数化和训练任务分布的优化器,学习的优化器优于“手工设计的”优化器,如 Adam(Andrychowicz 等人,2016;Wichrowska 等人,2017 年;吕等,2017;Bello 等人,2017;李&马利克,2016;梅斯等人,2019;2020 )。

尽管通过使用这些习得的优化器,性能得到了提高,但研究人员仍然缺乏对其工作原理的理解。研究人员强调,理解学习型优化器的底层机制可以提高鲁棒性( Wichrowska 等人,2017;Lv 等人,2017 )、元训练( Metz 等人,2019 )、学习型优化器的泛化( Metz 等人,2020 )。识别它们的操作缺陷,同时加深我们对关键机器学习机制为什么有效以及如何改进它们的理解。

对于 momentum 和其他标准优化器,状态变量是低维的,因此它们的动力学很简单,描述其行为也很简单。但相比之下,有经验的优化器具有高维状态变量,因此这些系统学习复杂的非线性动力学,这对于提取有经验的优化器的行为的直观描述是具有挑战性的。

多年来,研究人员一直使用常见的优化技术来调整优化器,如动量、梯度裁剪、学习速率计划和学习速率适应等技术。这些是直观的机制,已被证明有助于最小化参数上的损失函数。

有经验的优化者只是在学习已知技术的巧妙组合吗?或者他们发现了优化文献中尚未提出的全新行为?

这个谷歌大脑研究团队试图揭示这个问题。该团队开发了用于隔离和阐明非线性、高维学习优化算法中的机制的工具。这篇名为逆向工程学习优化器揭示了已知和新颖的机制的论文目前正在接受 ICLR 2021 的审查。

研究人员在三个快速训练的任务上训练了学习过的优化器,这对于元优化来说特别重要,并且覆盖了一系列损失曲面(凸和非凸,高维和低维)。这些任务是:

  • 随机线性回归问题(凸,二次)
  • 最小化 Rosenbrock 函数(非凸和低维)
  • 双月数据集(非凸高维)

他们将学习优化器的性能与调优的基线优化器 RMSProp、Momentum 和 Adam 进行比较。

在三个不同的任务上,有经验的优化者优于调整良好的基线。上排:任务示意图。底部一行:优化器性能。[ 来源

损失曲线中显示的优化器性能是 128 个随机种子的平均值、标准偏差误差。有经验的优化器在所有三个任务上都优于三个调优的优化器。

动力

在实验中,每个优化器收敛到动态的单个全局不动点。作者发现,有经验的优化者使用近似线性动力学来实现动量。当他们分析表现最好的学习优化器时,有一个在线性回归任务上的学习优化器表现稍差,但非常类似于经典动量。它恢复了特定任务分配的最佳动量参数。

有学问的优化者的动力。顶行:优化器状态在收敛点周围的投影。中间一行:沿着动力学的慢模式的更新函数的可视化。底行:在复平面中绘制的收敛固定点处的线性化优化器动态特性的特征值。[ 来源

渐变剪辑

随着梯度幅度的增加,学习优化器也使用饱和更新函数;这类似于渐变剪辑的一种柔和形式。事实上,削波效应的强度是与训练任务相适应的。例如,在线性回归问题中,学习的优化器主要停留在更新函数的线性区域内。相比之下,对于 Rosenbrock 问题,学习优化器利用更新函数中更饱和的部分。

学习优化器中的梯度削波。顶行:在初始状态计算的更新函数对于大的梯度幅度饱和。这种效果类似于渐变剪辑。底行:每个任务遇到的梯度的经验密度。[ 来源

学习费率表

随着优化的进行,我们经常调整学习率调度器来衰减学习率。作者发现,有经验的优化器可以使用自主动态实现调度器。当系统松弛到固定点时,它将特定的轨迹编码为迭代的函数。从下图中可以看出,在线性回归实验中,学习优化器最初会在 25 次迭代后提高学习率,然后线性衰减。

自主动力学调节的学习速率表。顶行:响应于零梯度(无输入)的已学习优化器的动态的低维投影。这些自主动态允许系统学习学习率时间表。底行:有效学习率是顶行中自主轨迹期间迭代的函数。[ 来源

学习速率适应

学习率自适应的目的是在遇到大梯度时降低优化器的学习率。这是通过根据当前梯度改变系统中的固定点来实现的。作者发现这些点在所有任务中形成一条 S 曲线;曲线的一个臂对应于负梯度,而另一个臂对应于正梯度。更新函数的斜率类似于 RMSProp 状态变化时观察到的变化。这允许优化器对于较小的梯度幅度增加其学习速率。

学习优化器中的学习速率适应。顶行:为不同梯度计算的动力学的近似固定点揭示了 S 曲线结构。中间一行:更新沿 S 曲线不同点计算的函数。底行:显示沿 S 曲线每条臂的有效学习率的汇总图。【来源

摘要

人们对有经验的优化者如何工作知之甚少。在这项工作中,提出的分析表明,学习优化能够学习几个有趣的优化现象;这些是常用的直观优化机制。理解学习型优化器是如何工作的,可以让我们在一个环境中训练学习型优化器,并且知道何时以及如何将它们应用到新的问题中。我们可以使用从更普遍的学习优化器和元学习算法的高维非线性动力学中提取洞察力。

[## 利用脑-机接口和机器学习改进青光眼评估

我的研究使用多任务学习来提供快速的护理点诊断,以检测周边视觉损失

towardsdatascience.com](/improve-glaucoma-assessment-with-brain-computer-interface-and-machine-learning-6c3b774494f8) [## 人工智能和神经科学之间的迷人关系

他们如何相互激励、共同进步、相互受益

towardsdatascience.com](/the-fascinating-relationship-between-ai-and-neuroscience-89189218bb05)

为什么学习 Java 是未来大数据开发人员的起点

原文:https://towardsdatascience.com/why-learning-java-is-a-starting-point-for-big-data-developers-of-the-future-9a9b6d240dea?source=collection_archive---------18-----------------------

Java 是大数据科学家和开发者的好朋友。在这里,我要告诉你为什么会这样

弗兰基·查马基在 Unsplash 上的照片

考虑到过去 2-4 年大数据令人印象深刻的增长速度,很明显,数据科学的这一子集将主导未来的技术。在这篇文章中,我决定仔细看看大数据项目中广泛使用的技术。

在处理大数据项目时,Java 是一种领先的语言。下面是一个初学者学习 Java 来处理复杂的 BD 任务的原因和方法。

关于大数据目标的几句话

在讨论 Java 对未来大数据的影响之前,让我们来看看数据科学家在未来 3-5 年内将关注什么类型的项目。以下是我个人对大数据在不久的将来将会成熟的看法。

1.它将与分析融合

现在,企业可以收集每一个用户的万亿字节数据,跟踪现场行为、交流偏好和其他相关指标,公司比以往任何时候都更受鼓励投资分析。

举个例子,Gartner 预测,如果企业所有者在年底前不投资于报告工具,到 2021 年底,该公司将不再具有竞争力。

采用大数据算法将提高分析的精确度,并让企业主对品牌声誉和客户关系有更全面的了解。决策树、线性回归和其他可视化和预测方法的引入将帮助企业主预测客户需求,并提高品牌互动的质量。

2.大数据将有助于应对气候变化

虽然气候变化的影响是真实的,但科学家们对人类在未来 20 年将面临的最直接的威胁缺乏了解。大数据是研究界整合工作并通过一系列可靠的实时洞察保持联系的一种方式。

不用说,大数据工具处理大型数据集的能力将提高近似值的精确度以及人们基于这些见解制定应急计划的效率。

3.数据云的影响将会增长,但不会占据主导地位

据统计,预计到 2021 年底,全球云计算市场价值将超过 6230 亿美元。现在,越来越多的公司正在从内部解决方案转向云。

话虽如此,完全迁移到云是一个复杂的过程,更不用说信任拥有庞大数据集的在线第三方供应商所带来的安全问题了。

在大数据环境中,混合环境是一种常见的解决方案,云工具用于托管动态数据集,本地存储用于跟踪静态数据集。

为什么 Java 仍然是大数据项目的最佳选择?

如果你是一名考虑从事大数据职业的软件开发人员,学习 Java 应该是你的起点。让我们看看为什么说“Java 是大数据”并不夸张。

1.面向 Java 的大数据工具是可访问的

在考虑大数据实施时,大多数企业主都在寻找尽可能最便宜的技术组合。由于大数据中使用的大多数 Java 工具(Hadoop、Spark、Mahout)都是开源的,所以这样的技术栈是免费的,并且高度灵活。因此,大多数寻找大数据工程师的员工会关注 Java 熟练程度和使用该语言的工具的工作知识。

2.Java 是类型安全的

几乎所有的数据科学家都会确认,当要处理的信息非常庞大时,能够理解您在项目中处理的数据类型是至关重要的。作为一种类型安全的语言,Java 是相当一部分开发人员和企业所有者的首选,因为类型安全允许在单元测试上花费更少的时间,并且便于代码库维护。

3.Java 是可伸缩的

大数据专业人士从事的大多数项目都雄心勃勃,设计时都考虑了扩大规模。由于其健壮性、广泛的工具包、巨大的社区和跨平台兼容性,Java 在可扩展性方面是其他语言无法比拟的,非常适合设计复杂的大数据基础架构。

4.广泛的内置特性(更不用说库和框架了)

如果说大多数其他语言才刚刚开始认识到机器学习和数据科学的重要性,那么 Java 是第一个跟上潮流的语言。因此,与大多数替代方案相比,它拥有更多用于 DS 项目的工具,仅举几例:

除了库,这种语言在每个新版本中都变得更适合数据科学。比方说,Java 8 的 Lambdas 有助于使代码简明扼要,第九版重新引入了 REPL,使迭代开发更快、更有效。

无论你喜欢 Hadoop 还是 Spark,了解 Java 对于精通这两个平台都是至关重要的。为了充分利用 BD 工具,开发人员经常需要在源代码中添加新的特性——这就是 Java 知识至关重要的地方。

回顾大数据项目的 5 大 Java 工具

在解释了企业主从选择 Java 进行大数据项目中获得的好处,以及为什么开发人员应该以确保 Java 熟练程度作为数据科学职业生涯的起点之后,让我们来看看在大数据项目中使用最广泛的 Java 工具。

1.Apache Hadoop

通过 Data-flair.training 了解 Hadoop 生态系统及其组件

Hadoop 是大多数企业主的首选大数据处理技术,有几十个库和工具专门用于整理和存储大型数据集。尽管它很受欢迎,但在人才经理中,Hadoop 开发职位空缺被认为是最难填补的,因为大多数开发人员对 MapReduce 缺乏深入的了解。

尽管 Hadoop 是最复杂的技术之一,但精通它的收获绝对值得付出。据统计,Hadoop 开发人员的平均年薪是 103,000 美元。

2.火花

Spark 是一种常见的 Hadoop 替代方案,由于其高速度、灵活性和平滑的学习曲线,对开发人员很有吸引力。通常,对于大规模 SQL 项目、数据流和机器学习任务,Spark 比 Hadoop 更受青睐。

值得一提的是,Spark 并不完全是用 Java 编写的,而是用 Scala 编写的——然而,两种语言的接口是相似的(作为一名熟练的 Java 开发人员,你不需要花很多时间来掌握 Scala 的诀窍)。

至于工作机会,Spark 是一项需要掌握的有利可图的技术,因为一些技术领域的知名人士正在寻找该领域的专业人士——脸书、微软、苹果或 IBM。

3.象夫

来自鲍曼国家图书馆维基

由于大数据项目与机器学习紧密交织在一起,大数据开发人员经常与 Mahout 相遇,Mahout 是一个基于 Java 的开源 ML 工具库。由于其可伸缩性和大型数据处理工具集,Mahout 获得了大量的追随者。

通常,开发人员在了解 Hadoop 的功能后开始学习 Apache Mahout,这是有意义的(该库的基础设施中有相当一部分是由重新设计的 Hadoop 代码组成的)。

4.暴风雨

与 Hadoop 或 Spark 相比,Apache Storm 是一个较窄的大数据工具集,主要专注于实现实时分布式数据流。该平台配备了处理高容量和速度数据的功能,因其高可扩展性和容错能力而多次受到称赞。

除此之外,Storm 与大多数流行的排队和数据库系统的兼容性使得学习如何使用该平台成为大数据开发新手的必备技能。

5.深度学习 4j

Deeplearning4j 是神经网络开发人员所信赖的基于 Java 的工具。这个平台在很多方面都做得很好,从易用性到文档质量。Deeplearning4j 是可扩展的——你可以将其与 Apache Spark 集成,或者在 GPU 上运行该平台。该工具还支持微服务项目——它是少数几个拥有强大微服务基础设施的平台之一。

学习面向大数据的 Java 的资源列表

如果你打算在大数据领域发展事业,精通 Java 是必不可少的。然而,由于周围有如此多的语言学习资源,开发者常常很难区分好的和坏的。

下面是我多年来为我的学生整理的资源清单——在我看来,这些都是你从一个 Java 新手到专业人士所需要的工具。

编码游戏和课程:

1. Codegym

Codegym 是一个面向初级和高级 Java 学习者的游戏化平台。使用游戏化和实际任务来解释语言的核心概念,这个工具是你从第一天开始编码的方式。我的学生们一再称赞这个平台,说它提高了知识的保持力,并让他们清楚地知道他们所学的概念在工作中是如何有用的。

2.代号战斗

尽管 Code Combat 并没有给编程学习者提供一个坚实的理论框架,但是这个工具非常适合使用你的技能来完成现实生活中的任务。结合高质量的图形和智能情节,代码战斗是一个令人愉快的 RPG 游戏,你不会介意与你共度周末。

3.编码游戏

作为一名数据科学家和程序员,需要协作和团队精神。如果你对在办公室与同事协调感到焦虑,看看《编码游戏》。该产品背后的想法既简单又雄心勃勃——团结来自世界各地的开发者一起打造一款游戏。

当谈到向最好的 Java 开发人员学习并得到顶级员工的注意时,CodingGame 是一个不错的资源。

4.机器代码

乍看之下,这款复古风格的游戏似乎很基础——然而,这场机器人大战并不仅仅是它展示的那样。就个人而言,我喜欢这个平台,正是因为它是如此的原始和简单。除了享受机器人战斗,你还可以加入硬核挑战,并通过专门的论坛与其他开发者聊天。

在线课程

学习大数据 Java:

学习 Java 基础知识

学习大数据 Java:

论坛和社交媒体

为大数据学习 Java:

结论

就我个人而言,Java 和大数据总是结合在一起的。虽然我也承认 Python 的潜力,但根据我的经验,一个成功的数据科学家不应该选择其中一种——相反,你应该学习如何处理两种语言,并利用它们各自的优势。

由于 Java 是网上教得最好的语言之一,我相信,只要有足够的决心和对基本编程概念的理解,你就能很好地将它的工具用于 DS 项目。

希望我上面链接的资源将是一个很好的起点,为初学者的旅程提供燃料。祝您好运,发现 Java 的全部潜力,并在您的项目中使用该语言。

为什么封锁很重要:探索意大利的人口流动数据

原文:https://towardsdatascience.com/why-lockdown-matters-exploring-human-mobility-data-in-italy-8f60db04c022?source=collection_archive---------28-----------------------

关于新冠肺炎在义大利的传播,人口流动数据告诉了我们什么

2019 年底在中国武汉市出现的新型新型冠状病毒冠状病毒继续跨境传播。该流行病是近年来最大的健康危机之一,其后果仍不可预测,已蔓延到 160 多个国家,确诊病例近 500,000 例,死亡人数超过 22,000 人(截至 3 月 26 日)。这场流行病的规模是我们这个相互关联的社会近年来面临的最大挑战之一。

新冠肺炎教在意大利的传播

意大利一直是世界上受影响最严重的国家之一,自伦巴第省 Codogno 发现首例病例以来,报告病例呈指数增长。我们可以使用来自意大利民事保护局数据在下图中清楚地看到这一点。

图片来源:CARTO。来源:意大利民事保护局

尽管对这种病毒仍知之甚少,但很明显,中国实施的封锁政策减缓了传播速度,避免了卫生系统的崩溃。自 3 月 19 日以来,中国的新增病例已连续五天降至零。

封锁政策之所以有效,是因为它们限制了人类的流动性,而人类的流动性被认为是最重要的病毒盟友,因为潜伏期很长(潜伏期中值估计约为 5 天),并且可能有很大比例的无症状病例(但仍非常不确定)。政府如何面对这一巨大挑战?意大利和随后其他国家采取的第一步是减少大部分人口的流动性。

使用人员移动数据进行分析

在本帖中,我们使用了来自我们的合作伙伴 Unacast 的人员流动数据,分析了意大利疫情爆发前几周报告病例与旅行距离之间的关系。

查看数据,我们可以看到各省的平均行驶距离在 2 月 23 日开始下降。这与观察到当地疫情的所有城市实施第一批限制性措施的时间相关,包括关闭学校,伦巴第和威尼托暂停公共活动,以及建议远程工作。

图片来源:CARTO。来源:未发布

类似地,我们可以看到在封锁前平均行驶距离的增加,这是预料之中的,但直到 3 月 8 日才正式宣布,然后随着限制的实施,平均行驶距离急剧下降。

分析人群在流行病期间如何流动至关重要,这不仅是政府审查封锁政策有效性的监测工具,也是研究人类流动性和病毒传播之间关系的工具。

使用时空模型

接下来,使用 Unacast 提供的各省的平均旅行距离 i 和一年中的某一天 t ,d ij,以及各省的 it报告案例,我们可以拟合贝叶斯时空模型来表征它们之间的关系。

实现这样一个模型需要一些假设。首先,我们将假设这种关系不是瞬时的,因为潜伏期和测试的延迟。由于世卫组织在疫情开始时估计中国的中位报告延迟为 12 天,因此 t 日的报告病例数将与 12 天的滞后平均传播距离相关。此外,由于我们在此的目的是估计滞后流动性和报告病例之间的关系,而不是做出预测,我们将重点关注截至 2 月 19 日的期间(滞后流动性数据为 2 月 7 日,就在完全封锁之前)。

此外,我们需要考虑重要的人口统计学混杂因素:鉴于意大利政府实施的检测有限,在报告的病例中很可能存在年龄相关的偏倚。事实上,检测主要限于患有中度至重度症状的人,这些症状在某些年龄段发病率较高。为了估计各省的预期病例数,我们假设按年龄层划分的发病率与中国报告的发病率相同

其中 p ij 是从意大利国家统计局获得的 i 省的人口和年龄层 j 。观察到的计数被假定为有条件独立(零膨胀)的泊松变量,均值为 EIexpEit),对数相对风险采用贝萨格、约克和莫利( BYM )模型对空间分量和时间相关性的非参数趋势进行建模

在哪里

  • μ是总截距
  • f 是一个平滑函数,用于测量特定区域滞后迁移协变量的任何可能的非线性效应,假设在系数之前进行 2 阶随机游走
  • v 是代表非结构化随机效应的零均值高斯(区域 ii 的 IID 项),而 u 是表示附近区域相似的空间分量,由一阶固有高斯马尔可夫随机场模型给出( Rue and Held,2005,第 3 章)。在这里,根据 Simpson 等人(2017) ,我们使用了 BYM 模型的不同参数化,这使得参数可解释,并有助于分配有意义的惩罚复杂性(PC)先验
  • γ t 表示由 2 阶先验随机游走定义的时间平滑结构效应,ϕ t 是一年中某一天的 IID 项 t

使用集成嵌套拉普拉斯近似(INLA)及其相关 R 包 R-INLA 拟合模型。

如果我们观察时间平滑对时间的依赖性,我们可以看到类似指数的依赖性,通过将指数关系拟合到平滑平均值来证实。另一方面,如果我们观察流动性平滑,我们可以看到,对于 25 km 以上的平均行驶距离,行驶距离和对数风险之间存在正相关关系。相反,对于较小的旅行距离,对数风险和人类流动性的相关性是负的,这可能表明与人类流动性无关的其他因素,如当地公共卫生反应,可能作为隐藏的混杂因素发挥作用。

图片来源:CARTO

最后,我们可以绘制(平均)估计风险的动画地图

图片来源:CARTO

主要发现

利用最新的流动性数据,我们已经展示了人类流动性可能如何影响传染病的传播,例如新新型冠状病毒病毒。虽然这一初步分析的目的不是预测未来的病例数量,但它表明,人类的流动性与疾病的传播有关,最近的流动性模式应纳入任何用于预测疫情演变的流行病学模型。

你在回应或分析新冠肺炎的影响吗?CARTO 是来帮忙的

我们全力支持我们的社会,用我们的技术和服务战胜这场危机。我们已经组建了一个由空间数据科学家和工程师组成的专门团队,随时准备与公共和私营部门组织合作,抗击冠状病毒的爆发。位置情报不仅在了解新冠肺炎如何在我们的领土和社会群体中传播,而且在定义和执行响应运动以更好地管理卫生基础设施、确保更快的响应以保护我们最脆弱的公民以及改进社会距离政策的执行和遵循方面发挥着重要作用。

我们还积极地与地方和国家管理部门合作,开发用于自我诊断和数据收集的网络和移动应用,以减轻已经饱和的应急通信方法的压力,并给出明确的行动建议。

最后,我们正在通过我们的资助项目,向调查冠状病毒爆发的公共和私营部门组织提供其平台。

本文原载于 CARTO 博客

为什么对数在机器学习中如此重要

原文:https://towardsdatascience.com/why-logarithms-are-so-important-in-machine-learning-6d2ff7930c8e?source=collection_archive---------10-----------------------

蒂姆·福斯特在 Unsplash 上的照片

如果你住在一栋大楼的第 10 层,你是走楼梯还是乘电梯?

这两种情况的目标是一样的:在漫长的一天工作后,你想回到你的公寓。

当然,如果你是一个忙碌的人,没有时间去健身房,想把楼梯作为有氧运动的简化版,走楼梯会更好。但是,除此之外,你更有可能乘电梯。

我们再举一个例子。

假设你正试图去你的工作场所。不堵车的时候,开车 10 分钟,走路 50 分钟。

你可以选择开车或走路。你仍然会到达同一个目的地,但你想节省时间。你每个工作日都去工作,而不是一生中只去一次。因此,你可能需要定期就此做出决定。

你希望能够更快地去上班,这样你就可以有更多的时间和家人朋友在一起。你想开始那个副业。阅读你在当地书店买的书。观看你一直想要的讲座。

你不想花那么多时间去同一个目的地,而是想坐汽车或公共汽车去那里。这样,你就有更多的时间去做其他的事情。

使用对数的好处的例子

使用对数也是一样:你需要找到使损失函数最小化的参数,这是你在机器学习中试图解决的主要问题之一。

假设您的函数如下所示:

如果我们找到它的一阶导数,我们最终会得到下面的表达式:

有时,我们甚至需要找到二阶导数,因为我们需要知道函数是否是凸的。当一个函数是凸的,我们知道它只有一个极小值,所以每个局部极小值实际上都是全局极小值。

在我们的表达式中,我们将有以下内容:

如你所见,它变得相当杂乱,对吗?

而且,很繁琐。

同一函数的对数的一阶导数要简单得多:

二阶导数也更简单:

当你实际使用对数时,你不会得到相同的函数。

你不需要在走路和开车时走同一条路线。你有与行人分开的车道。但你实际上并不在乎。

这并不是说你对所有的兼职商店都很关心。你已经在家里吃了一点小吃,想直接去你的工作场所,这意味着他们无论如何都不重要。

你想最小化某些参数的损失函数。你需要最小化损失函数的参数。这正是一个函数和该函数的对数的共同之处:使损失函数最小化的相同参数。

你对这个函数和它的对数求导,就可以得到损失函数的最小值。

数学证明

让我们证明最小化一个函数的参数等于最小化那个函数的对数的参数。

让我们假设一个点 w* 是 g(w) = log f(w)的局部极小值,这意味着在 w* 的一个近邻中的任何参数 w 我们都有 g(w*)≤ g(w)。现在,既然 e 也通常表示为 exp 保留了单调性,我们就有:

换句话说, w* 也是函数 f 的最小值,这是我们想要证明的。

这意味着当我们将对数应用于任何函数时,我们保留最小值或最大值(即,使函数最小化或最大化的参数,但不是函数的实际值)。

我们还需要证明取对数并不能消除函数的极小值,但我们在这里跳过了这一点。

正如我们在上面的例子中看到的,这导致了更简单的计算和更好的稳定性。

如果你对此理解有困难,那么我们用一些情节来说明这一点。

让我们以下面的函数为例:

其图表的一部分如下所示:

它的对数是:

其图表的一部分如下所示:

正如你所看到的,在这两种情况下,当 x = 0.3 时,我们得到了函数的最大值。

是的,我们没有得到相同的函数,但我们仍然有相同的临界点,帮助我们最小化损失函数。

仅这一点在训练机器学习模型时就非常有帮助。

跟我上 推特

为什么机器学习工程师(或数据科学家)不是这场秀的主角

原文:https://towardsdatascience.com/why-machine-learning-engineers-or-data-scientists-are-not-the-stars-of-the-show-d91ec9c5256b?source=collection_archive---------36-----------------------

朱利叶斯·德罗斯特在 Unsplash 上的照片

意见

但仍然是任何成功员工不可或缺的组成部分

T 他的文章并不是对所有机器学习工程师或数据科学家的攻击。我是一名人工智能/计算机视觉工程师,这篇文章基于我在人工智能行业的观察和经验。

本文中的陈述都是基于观点的。

既然如此,我们可以开始了。

炒作是真实的

数据科学家的角色被称为 21 世纪最性感的工作,对人工智能工程师的需求在过去几年里呈指数增长。2019 年,job site 确实将计算机视觉工程师( 13 )、ML 工程师( 1 )和数据科学家( 22 )的角色列为美国前 25 名最佳工作。

美国最佳工作:2019 年

炒作是真实的,也是非常合理的,因为很明显,机器学习技术嵌入到几乎所有东西中,从车辆、智能手机甚至冰箱。

大肆宣传,需求,巨额工资和所有的关注可以使任何职业 ML 从业者感觉像一个超级巨星。

在实际的劳动力中,ML 从业者是珍贵的,尤其是当他们在工作中真的很有天赋的时候。也就是说,我们作为 ML 工程师的角色只是拼图的一小部分。

拼图是最终产品。

在大多数 ML 从业者的研究和学习阶段,我们被困在笔记本和 python 脚本中。

对于一些人来说,他们项目的范围是拥有一个可消费的 rest API 作为机器学习模型功能的接口。

但是在笔记本和 API 之前和之外还有一个世界。

以前的世界

在 ML 工程师或数据科学家参与项目之前,已经有几个其他的工作角色被包括在决策和其他过程中。

让我列举几个:

  • 市场研究员:分析产品针对的目标受众和消费者的数据。他们的工作决定了最终产品的形状或形式。
  • it 业务分析师:将业务需求转化为可操作的 it 规范。他们负责采取项目经理和利益相关者制定的一般行动,并将其转化为工程团队可执行的任务。
  • CEO :一把手。
  • 产品设计师:在实际开发开始之前,负责概述产品界面(UI)和交互(UX)的可视化。
  • 软件工程师:使用各种工具和编程语言创建软件产品,具体取决于产品将在哪个平台上运行。
  • 产品负责人:负责执行和监控关键利益相关者同意的产品关键功能的开发。

在项目的生命周期中,ML 从业者可能永远不会接触到与上面列出的角色相关的个人。

如果我们再看一下美国最受欢迎的 25 个角色。这些角色是所列角色的一部分,产品负责人、产品设计师和开发人员也是顶级角色。

他们为我们 ML 工程师和数据科学家设置了竞技场/舞台。

世界之外的角色

超越的世界

没有什么比实现一个模型并将其训练到在测试数据上使用时具有高水平的准确性和高效性能更好的感觉了(加分,如果您的模型足够小,可以在边缘设备上工作)。

不要从 ML 从业者那里拿走任何东西,但是商业产品的客户不会直接利用你的模型。事实上,他们很可能忘记了产品中涉及某种形式的机器学习。

朱利叶斯·德罗斯特在 Unsplash 上的照片

这不应该是一个惊喜。谷歌工具套件或网飞个性化系统背后的 ML 技术并没有被公开。倾向于有几个接口来创建产品复杂性的抽象。

是的,用户可能会对谷歌推荐了一篇关于他们之前对话的新闻感到震惊;或者惊讶于网飞再次通过推荐合适的可以狂欢的电视连续剧来吸引观众。

但典型的最终用户通常不会想知道嵌入式人工智能系统产品背后的语音识别或个性化算法是什么。

传销从业者是推动者。我们支持更广泛的产品生态系统。

如果我们成功地完成了我们的工作,对最终用户来说,这几乎就像魔术一样。

除了 ML 角色之外,在我们作为 ML 从业者扮演好自己的角色之后,还有其他几个角色紧随其后。质量保证测试人员、软件工程师、产品发布团队和市场营销人员,只是对产品或项目的成功做出贡献的其他角色的例子。

那么,谁是明星?

如果你已经走到这一步了,我告诉你谁才是真正的明星才是公平的。实际上有两颗星。

人工智能产品和产品背后的团队。

为了说明我的观点,即谁是“的真正明星,我将使用一家专注于人工智能的公司作为例子,但请注意,这一逻辑适用于大多数基于人工智能的公司或初创公司。

听说过 DeepMind 和他们的人工智能系统 AlphaGoAlphaZero 吗?+60 deep mind 团队和他们的人工智能产品是备受瞩目的实体。

DeepMind 团队无疑受到了一些关注,请注意,我没有提到团队中某个特定的人或角色。DeepMind 团队已经成为一个独立的实体,可以独立于成员而存在。也就是说,团队的好坏取决于其成员,DeepMind 拥有业内最优秀的人工智能人才。

deep mind 的一些团队成员

人工智能领域的天才们把这个行业推进了一点点。他们很受尊敬,他们的贡献和工作将被人们铭记多年。但是有一个实体无论在哪个时期都没有改变也没有消失。

而实体就是人工智能。

人工智能是这部剧的明星,而且一直都是。

有时候,人工智能背后的团队会分享聚光灯。

闭幕词

这篇文章并不是要贬低人工智能行业内任何人所做的工作。

目的是向更广泛的受众强调,基于人工智能的产品只有在个人和跨职能团队之间有效合作的情况下才有可能实现。

我们机器学习工程师和数据科学家是不可或缺的一部分。我们不是这部剧的主角,而是这部剧的明星的一部分。

不管是什么样的表演。

如果你喜欢这篇文章,下面还有一些你可能会感兴趣的文章。

[## 人工智能中的算法偏差需要讨论(和解决)

你在这件事上有责任…

towardsdatascience.com](/algorithm-bias-in-artificial-intelligence-needs-to-be-discussed-and-addressed-8d369d675a70) [## 机器学习工程师和研究人员之间的 7 个关键区别(包括工资)

包含有关期望薪资、工作量、可交付成果以及更多重要差异的信息。

towardsdatascience.com](/7-key-differences-between-machine-learning-engineers-and-researchers-salaries-included-b62c3aaebde9)

希望这篇文章对你有用。

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 YouTube 频道 视频内容即将上线 这里
  2. 跟着我上
  3. 通过 LinkedIn 联系我

为什么机器学习模型讨厌“改变”

原文:https://towardsdatascience.com/why-machine-learning-models-hate-change-f891d0d086d8?source=collection_archive---------36-----------------------

模型漂移,一种机器学习概念的介绍

Unsplash 上由 Aron 视觉拍摄的照片

目录

  1. 简介
  2. 什么是模型漂移?
  3. 模型漂移的类型
  4. 如何检测模型漂移
  5. 如何解决模型漂移

简介

"变化是生活中唯一不变的东西。"

这句话出自一位名叫赫拉克利特的希腊哲学家,它是如此有趣的一句话,因为它是唯一正确的。术语“恒定”被定义为在一段时间内持续发生,因此,你可以说变化是永恒的。这对机器学习模型提出了一个问题,因为模型是基于其创建时的变量和参数来优化的。

设想一个分类模型,用于检测几年前创建的网络钓鱼电子邮件(垃圾邮件)。当时,垃圾邮件看起来像这样:

你可以看出这是一封垃圾邮件,因为它包括一笔不切实际的金额(480 万美元),它包括电子邮件中的一个联系人,它要求你立即按照说明操作,或者“当你阅读此邮件时”

自那时以来,时代已经发生了变化,诈骗者正在创建更加复杂和现实的电子邮件,这使得区分变得更加困难。以下是最近一封网络钓鱼电子邮件的示例:

请注意,这封垃圾邮件与几年前相比有多么不同。您认为几年前创建的欺诈检测模型能够正确分类此电子邮件吗?可能不是因为网络钓鱼邮件的出现改变了模特不喜欢改变。创建模型时的一个主要假设是,未来数据将与用于构建模型的过去数据相似。

这是一个模型漂移的例子。在本文中,您将了解什么是模型漂移,模型漂移的类型,如何检测模型漂移,以及如何解决它。

什么是模型漂移?

模型漂移(也称为模型衰减)是指由于环境的变化,以及变量之间的关系,导致模型的预测能力下降。参考上面的示例,垃圾邮件呈现方式的变化会导致几年前创建的欺诈检测模型降级。

模型漂移的类型

模型漂移主要有三种类型:

  1. 概念漂移
  2. 数据漂移
  3. 上游数据变更

概念漂移是一种因变量性质发生变化的模型漂移。上面的欺诈模型是一个概念漂移的例子,其中“欺诈”的分类发生了变化。

数据漂移是一种模型漂移,其中独立变量的属性发生变化。数据漂移的例子包括季节性引起的数据变化、消费者偏好的变化、新产品的增加等

上游数据变化指数据管道中的运行数据变化。这种情况的一个例子是不再生成要素,从而导致丢失值。另一个例子是测量值的变化(如英里到公里)。

如何检测模型漂移

衡量模型的准确性

检测模型漂移最准确的方法是将来自给定机器学习模型的预测值与实际值进行比较。随着预测值越来越偏离实际值,模型的准确性越来越差。

数据科学家用来评估模型准确性的一个常用指标是 F1 分数,这主要是因为它包含了模型的精确度和召回率(见下文精确度和召回率的直观表示)。也就是说,根据具体情况,有许多指标比其他指标更相关。例如,类型 2 错误对于癌症-肿瘤图像识别模型来说是极其重要的。因此,当一个指定的指标低于一个给定的阈值时,您将知道您的模型正在漂移!

检测模型漂移的其他方法

有时监控模型的准确性并不总是可能的。在某些情况下,获得预测的和实际的配对数据变得更加困难。例如,设想一个预测上市公司净收入的模型。这意味着你每年只能从公司的季度收益报告中衡量 4 次模型对净收入预测的准确性。如果您无法将预测值与实际值进行比较,您可以依靠其他替代方法:

  • Kolmogorov-Smirnov (K-S)检验:K-S 检验是一种非参数检验,它比较两个数据集的累积分布,在本例中是训练数据和训练后数据。该检验的零假设表明两个数据集的分布是相同的。如果零被拒绝,那么你可以断定你的模型已经漂移。
  • 人口稳定指数(PSI):PSI 是一种度量标准,用于衡量变量的分布如何随时间变化。这是一种常用的度量标准,用于监控群体特征的变化,从而检测模型衰退。
  • Z-score :最后,您可以使用 Z-score 比较训练数据和真实数据之间的特征分布。例如,如果给定变量的多个实时数据点的 z 值为+/- 3,则该变量的分布可能发生了偏移。

如何解决模型漂移

检测模型漂移只是第一步,下一步是解决模型漂移。这样做有两种主要方法。

第一种是简单地按照预定的方式重新训练你的模型。如果您知道模型每六个月降级一次,那么您可能会决定每五个月重新训练一次模型,以确保模型的准确性不会低于某个阈值。

另一种解决模型漂移的方法是通过在线学习。在线学习简单地说就是让机器学习模型实时学习。这是通过在数据变得可用时立即按顺序接收数据来实现的,而不是用批量数据来训练模型。

更多类似的文章,请查看 Datatron 的媒体页面或他们的博客 https://blog.datatron.com/

感谢阅读!

如果你喜欢我的工作,想支持我…

  1. 支持我的最好方式是在媒体上关注我这里
  2. Twitter 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
  3. 此外,成为第一批订阅我的新 YouTube 频道 这里!目前还没有视频,但它就要来了!
  4. LinkedIn 上关注我这里
  5. 在我的邮箱列表 这里报名。
  6. 看看我的网站,【terenceshin.com】

为什么机器学习验证集变得陈旧

原文:https://towardsdatascience.com/why-machine-learning-validation-sets-grow-stale-69fa043fd547?source=collection_archive---------36-----------------------

用这个心智模型提升你的直觉

Unsplash 上的 chuttersnap 拍摄

当你进入数据科学的世界时,你学到的第一件事就是拥有独立数据集来训练和验证你的机器学习模型的重要性。那么,为什么这个概念看起来如此难以掌握呢?

尽管我们为什么要对数据集进行分区有一个简单的直觉,但要深入理解这个行业仍然有一些障碍。一个是过时的经验法则的持续存在,如“70-30 列车测试分割”或大数据前黑暗时代的其他遗产。

另一个问题是,我们中的许多人在了解到除了测试集之外,我们还应该有一个单独的验证集,我们可以用它来进行超参数调优,但令人惊讶的是,这个问题没有好的答案。这个问题是:“如果我们可以通过调整超参数来适应测试集,难道我们不能适应验证集吗?”

答案是:可以,当然可以。最终,您将过度适应一个验证集,并且它将被认为已经“过时”今天我想探索一些思考为什么会发生这种情况的方法。我希望通过这样做,我们可以绘制出一条路径来更深入地理解过度拟合和数据划分,而不仅仅是人们期望在面试中知道的两个命题陈述。

首先,我们将探讨损失景观的概念,以及如何利用样本景观和总体景观之间的关系来理解验证集泄漏。在这个过程中,我们将基于一些简化的假设开发一个有用的心智模型。最后,我们将通过一个快速实验(代码包含在下面)来测试我们的理解。

让我们开始吧!

一个简单的想法被命名为:损失景观

二元函数。代码。

如果你熟悉机器学习,你可能会熟悉损失景观的概念。尤其是如果你已经研究过神经网络和梯度下降,并且读过那些关于基于梯度的优化的文章,其中有华丽的可视化和动画。

损失景观只是一个函数。具体来说,机器学习模型的损失或错误是其参数的函数。

如果你觉得这个想法太简单,不值得特别关注,我理解你的想法。但是“损失景观”确实是这类函数的名称,知道它可以让你轻松地查找各种酷的内容和与相关的研究,即使你已经理解了底层概念。

“风景”这个词唤起了我们的物理直觉。由 Fabrizio ContiUnsplash 拍摄

要点是损失景观是可以遍历的函数,无论是通过梯度下降还是通过其他方法(例如模拟退火、进化方法)。这样命名可以让我们从物理直觉的角度来看待它,即使你要处理的功能通常是在更高维的空间中。

虽然我们通常认为损失景观是模型参数的函数,但也可以将其视为超参数的函数。

请注意,虽然损失可以根据数据和模型参数明确计算,但损失和模型超参数之间的联系不太直接。如果这让你感到困扰,回想一下生物学家使用健康景观来思考生殖成功是遗传因素的一个功能。如果有必要的话,可以将损失视为超参数(和数据)的函数,视为“模型适应度景观”。

现在要认识到的关键思想是,数据集的每个分区都有单独的损失景观。训练集、验证集和测试集的损失情况都是不同的。如果数据已经被很好地分割,使得每个集合都是代表性的样本,那么希望非常相似,但是仍然不同。

最重要的是,手头上的所有数据都将有不同于外部数据底层“群体”的损失情况。我们同时拥有验证集和测试集的原因是,如果验证集确实随着时间的推移泄露了信息,我们仍然需要一些数据来对我们的模型在野外的表现进行无偏估计。

考虑超参数调优的一种方式是,作为超参数的函数,遍历验证集数据的损失情况。为了建立直觉,让我们从想象一个“理想”的景观开始。

走向心智模型:想象独立的超参数

当然,我们理想的损失情况是超参数是“独立的”我的意思是,在它们与损失的关系中,没有交互作用项。这种函数将具有不沿对角线突出的轮廓。这样更容易表达我的意思:

这一系列损失景观非常理想的原因是,在处理它们时,调整许多超参数的问题可以分解为一次单独调整一个超参数的行为。由于任何一个超参数的最佳值都独立于任何其他超参数的值,因此我们可以依次调整它们,而不是并行调整。

换句话说,把每个超参数想象成一个旋钮。我们所要做的就是触摸每个旋钮一次,直到我们找到每个特定旋钮的最佳位置,然后再继续。

与每个旋钮相关联的是损失场景的投影。我们函数的这一部分只有一个独立变量:我们正在调整的超参数。

这就是事情变得有趣的地方。回想一下,每个数据集都有自己的损失景观。现在想象将这些功能的投影叠加在每个被调谐的旋钮旁边。让我们选择用于确定最佳超参数值的验证数据的损失情况,以及全部数据的假设损失情况,这是我们真正希望我们的模型尽可能做到的,也是我们的测试集的估计值(如果采样正确的话)。

根据验证集数据,每次我们将旋钮调到最佳值时会发生什么?

很有可能,这两种亏损局面并不完全一致。每当我们调整一个值,使其验证损失部分达到峰值时,我们就有可能超过“总体”损失情况的峰值。我们调得越多,越过的峰值就越多。这导致验证集和真实世界(由测试集估计)性能之间的差距越来越大。

就是这样!这就是为什么验证集变得陈旧并泄漏信息,或者至少是一种有帮助的思考方式。

在这里,特别有洞察力的读者可能会问:“但是如果验证和人口损失景观总体上不一致,为什么峰值比其他点不一致?”这是一个很好的问题,它开始测试我们已经开发的心智模型的极限。

要回答这个问题,请考虑单个超参数的验证性能。现在,将目标函数中的每个值都看作是来自可概括特征的贡献,以及来自验证集数据的特性的贡献。

随着您向更优的值移动,这些组件的贡献可能会增加。为了提高验证性能而不降低测试集和野外的结果,需要这种提高只来自可推广组件。

作为回报,我也向您提出这个问题:如果您正在优化的超参数之一实际上与从数据中学习可概括的特征没有什么关系(例如random_state),该怎么办?对于类似这样的事情,优化验证损失会有什么影响?

说到底,我们在这里经历的是一个心智模型,因此服从著名的乔治·博克斯格言:

所有的模型都是错的,但有些是有用的。

在这种情况下,我希望这是一种有用的方式来思考如何过度适应验证集背后的机制。

弄脏我们的手:模拟验证集泄漏

作为一名数据科学家,不经过测试就阐述一个想法对我来说并不合适。要求超参数没有任何交互作用有点严格。虽然这对于开发一个心智模型是有用的,但如果能有一些实证结果来表明所开发的思想扩展到不太理想的场景,那就更好了。

下面,我运行了一个快速实验,将在梯度推进回归模型上执行的调优量,以及验证集和测试集性能之间的差距联系起来。我选择使用梯度增强,因为它们是一类具有大量超参数的流行模型。

根据我们对验证集泄漏的理解,我们期望看到的是,随着调优的增加,性能差距会越来越大。在我的实验中,“更多”调优是通过在 5 个不同的超参数中运行更多的随机搜索迭代来定义的。更多的迭代意味着在验证集上找到更优结果的机会更大。如果心理模型认为这种最优性的一部分来自验证数据的不可概括的怪癖是真的,那么我们预期不是所有这些性能的提高都会出现在测试数据中。

在展示我的结果之前,我想澄清这个实验偏向于支持我的论文的一个重要方面:

我使用少量数据进行训练和验证。当然,通过拥有大的验证集可以减轻验证集泄漏,因此选择小的 波士顿房价 数据集可以很容易地演示对小的验证集的过度调整。

除了我选择的特定数据集之外,您应该怀疑这些结果是否成立!我鼓励你提出自己的实验,并与我们其他人分享你的结果。

正如您所看到的,当我们投入越来越多的精力来优化我们的超参数并基于验证集性能选择模型时,验证和测试集性能之间的差距就越来越大。

如果我们已经调优了超参数的一个子集,然后回来使用另一个子集,或者尝试切换所使用的模型系列,这种情况会更加明显。数据样本(验证集)提供的每个决策都会慢慢地将样本的随机波动编码到我们的产品中。

结论

这实际上是我第二次尝试解释超参数调整和验证集过拟合现象之间的关系。对于一个具有相对简单的潜在直觉的想法来说,要详细解释是非常困难的。

我认为问题的一部分是我们的集体知识仍然被采访-回答风格的断言所支配,比如“你对验证数据过度拟合”和“验证集泄漏信息”,这些断言没有视觉或经验直觉的支持。

虽然这篇文章试图满足这种对更深入和简单的解释的需求,但仍然有更多角度和思考方式的空间。Cassie Kozyrkov 最近写了一篇关于数据集分区的有趣文章,用教学和憨豆先生做类比。我很高兴看到数据社区还能提出什么。

图表由我可爱的女朋友梅根提供。

为什么管理层喜欢过度拟合

原文:https://towardsdatascience.com/why-management-loves-overfitting-361175edcc3b?source=collection_archive---------88-----------------------

管理数据科学中决策者的期望

数据科学家的角色包括构建和微调模型,并改进各个业务领域的流程和产品。典型的使用案例包括营销活动、客户流失预测或欺诈检测。经过训练的模型不仅应该处理(看到的)训练数据,还应该处理新的(看不到的)真实世界数据。然而,这一要求对于大多数相关决策者来说并不明显,他们倾向于支持过度拟合的模型,并用难以置信的数字和承诺欺骗自己。当结果不一致时,问题总是在实施后立即出现。因此,正如我们即将推出的课程R中所涵盖的,正确管理预期并采用行业最佳实践是每个负责任的数据科学家的任务。

为了了解过度装配的问题,让我们看看著名的mtcars数据集中一辆汽车的重量(wt)与每加仑行驶里程(mpg,miles-per-gallon)之间的简单关系。显然,汽车越重,每加仑行驶的里程数越少(或者油耗越高)。我们已经使用 R 中的smooth.spline()函数对关系进行了建模,并使用平滑参数(spar)作为滑块中的参数。我们看到接近于零的spar似乎很好地模拟了关系(平滑)。通过增加模型的spar,它开始更紧密地拟合观察值,因此它的方差增加了。然而,一旦spar越来越接近一,花键开始失去其光滑的形状和之字形-这是过度拟合的迹象。

同样的现象可以在一个分类的例子中表现出来。我们使用基本的 K-最近邻模型,使用变量萼片长度/宽度和花瓣长度/宽度来区分 50 朵花中的 3 个鸢尾属物种。这三个类别可以很容易地从视觉上区分为三个区域。通过将邻居的数量移近 1,我们增加了模型方差,并观察到决策边界变得支离破碎。

即使更多的观察值可以在样本内正确分类,或者类似地,回归误差可以减少,我们也应该始终记住,模型性能只能由样本外数据来判断。因此,决策者应该始终更加关注模型是如何选择的,而不是报告的性能有多好。为了安全起见,如果有足够的数据可用,我们总是可以保留一个最终测试(对模型开发人员不可用)来评估实际性能——很像一场 Kaggle 竞赛。

所以我最后的建议是:

  1. 不要欺骗自己,诚实对待样本外的数据/性能。
  2. 管理好决策者的期望——现实一点。
  3. 如果你第一次尝试的结果看起来非常好——他们很可能是错的。

最初发表于T5【https://www.quantargo.com】

为什么数学对人工智能来说很容易,但园艺却不容易:莫拉维克悖论

原文:https://towardsdatascience.com/why-math-is-easy-for-ai-but-gardening-is-not-moravecs-paradox-99994b201d10?source=collection_archive---------19-----------------------

对于人工智能来说,进行高级推理很容易,但获得像样的运动技能却非常困难。

图片来源: Pixabay

介绍

人工智能(AI)系统,由海量数据和复杂算法提供动力——包括但不限于——深度神经网络和统计机器学习(ML)(支持向量机、聚类、随机森林等。),正在对我们的日常生活产生深远的变革性影响,因为它们进入了从金融到医疗保健,从零售到运输的各个领域。

网飞电影推荐器,亚马逊的产品预测,脸书展示你可能喜欢的东西的神秘能力,谷歌的助手,DeepMind 的 AlphaGo,斯坦福的 AI 击败人类医生。机器学习正在吃软件。这份清单还在继续…

然而,这些强大算法的一个共同特点是它们利用复杂的数学来完成它们的工作——对图像进行分类和分割,做出关键决策,提出产品建议,对复杂现象进行建模,或者从海量数据中提取并可视化隐藏的模式。

机器学习数学(来源:"数据科学基础数学")

很简单,所有这些数学过程都超出了一个人(或一个团队)手动(甚至在计算机上)或头脑中思考的范围。这就是 AI/ML 系统的魅力所在——当与大量原始数据配对时,它们可以自动化复杂的数学推理任务(在概率模型和统计规则的帮助下)。

然而,在这篇文章中,我们将会看到,对于人工智能系统来说,并非所有类型的自动化都是容易的。

这些强大算法的一个共同特征是它们利用复杂的数学来完成工作。

推理自动化与运动技能

人工智能在数学方面做得很好

冒着有点轻视它的风险,我们可以把一个现代的人工智能系统想象成一个自动化的数学推理系统。

一直都是这样。即使在过去。

上世纪八九十年代,符号逻辑专家系统盛行。请记住,符号逻辑只不过是一种复杂的数学推理范式。

快进到 2010 年代和 2020 年代,我们正在开发和使用以庞大的线性代数解算器和统计分布建模器为核心的系统。

这种方法已经从基于符号的(演绎逻辑)转变为基于数据的,但共同点没有改变——人工智能系统在复杂的数学中工作得很好。

我们可以把一个现代人工智能系统想象成一个自动化的数学推理系统。

园丁和数学家谁更聪明?

这个问题当然是修辞性的,近乎冒犯。智力对不同的人有不同的含义,没有理由认为某一特定职业的从业者会比另一职业的从业者更聪明,即使平均而言也是如此。

毕竟,智力是非常难以定义的。

图片来源:Unspalsh

好吧。让我们倒退一点,用一个更严格的智力定义来工作。

毫无疑问,今天的人工智能系统是大规模计算系统。深度学习系统的训练是通过数百次重复通过处理大量矢量化数据的计算节点的堆叠层来进行的。在基本层面上,它可以归结为数十亿次简单的计算——比如乘法、加法或逻辑与/或。

因此,在狭义上,我们可以在计算次数和人工智能系统的推理能力之间建立等价关系。我们已经看到,从单隐层神经网络无法解决异或问题152 层 ResNet 能够以高精度分类数千种图像类别。

更多的层,更多的计算,更强大的人工智能。

图片来源:https://i1 . WP . com/www . michaelchementi . com/WP-content/uploads/2017/11/Deep-Neural-Network-What-is-Deep-Learning-edu reka . png

因此,如果我们把计算和智能联系在一起,也就是说,用更高程度的智能进行复杂计算的能力,那么数学家就拿走了蛋糕,不是吗?

因此,在狭义上,我们可以在计算次数和人工智能系统的推理能力之间建立等价关系。

至少,我们可以以某种方式说服自己,高水平的心理推理任务比一些卑微的体力劳动需要更多的计算,比如园艺,我们可以轻松地完成这些工作,而无需在大脑中进行任何复杂的计算。

事实证明,这将是一个错误的结论。

对一个人工智能系统来说,成为数学家比获得园丁的技能更容易。至少,对于现在的人工智能系统来说,情况似乎是这样的。

…我们可以以某种方式说服自己,高层次的心理推理任务需要比一些体力劳动多得多的计算。

莫拉维克悖论

汉斯·莫拉维克是出生于奥地利的美国机器人专家和计算机科学家,目前是卡耐基梅隆大学机器人研究所的兼职教员。

他因在机器人、人工智能方面的工作以及关于技术影响的著作而闻名。莫拉维克也是一位未来学家,他的许多出版物和预测都聚焦于超人类主义

在 20 世纪 80 年代,莫拉维克和其他先驱科学家,如马文·明斯基罗德尼·布鲁克斯,做了一个观察:“与传统假设相反,推理(人类的高级)需要很少的计算,但是感觉运动技能(人类相对低级)需要大量的计算资源”。

正如 Moravec 所写的,“让计算机在智力测试或玩跳棋时表现出成人水平的表现相对容易,而在感知和移动性方面,让它们拥有一岁儿童的技能却很难或不可能”。

虽然这种观察是在三十多年前进行的,并且在狭窄的图像分类领域中已经展示了人类水平的感知能力的 ResNet-50 模型之类的模型当时还没有开发出来,但是即使在今天,观察的准确性仍然很高。

我们都见过 OpenAI 的惊人程序在 Dota 的复杂比赛中放倒人类选手,但你见过单个机器人放倒哪怕是初级的国家级乒乓球选手吗?

机器人足球队对抗业余俱乐部队?一个完全自主的机器人园丁,可以修剪树叶,轻轻采摘花朵,完美无瑕地浇灌花园?

为什么不呢,我们想知道…

与传统假设相反,推理(人类的高级)需要很少的计算,但感觉运动技能(人类的相对低级)需要大量的计算资源。

人类技能的生物学基础

所有人类的技能都是通过自然选择过程设计的机器,从生物学角度实现的。这也是一个非常重视优化(能源支出)的过程。

想想人类的大脑。超过 800 亿个神经元在这个紧凑的处理器中工作,而的电力账单只有一个昏暗的灯泡(~ 20 瓦)。大量的优化使得这个 1400 克的海绵状粘性物质成为整个已知宇宙中最节能的处理器

因此,在整个进化过程中,人类的技能发展倾向于保留满足极其苛刻的优化标准的设计改进。但这种优化过程是缓慢的,需要很长时间来塑造和引导特定技能的进化。

因此,可以简单地理解为,技能越古老,自然选择就有越多的时间来改进设计。

图片来源:维基百科(知识共享许可)

抽象思维和高级数学推理只是最近才发展起来,因此,它的实现和机制预计不会特别有效。

因此,在整个进化过程中,人类的技能发展倾向于保留满足极其苛刻的优化标准的设计改进。

直到最近,高级推理才成为进化的宠儿

暂停一秒钟,想象自己是一个站在 20 万年前广袤的非洲热带草原或亚马逊雨林中的智人。

以下哪项技能是你最看重的?

  • 跑得更快以逃离一群鬣狗的能力(至少给自己一个生存的机会)
  • 识别和区分有毒植物和药用植物的能力
  • 加法和乘法的能力,或者想象一个美丽的故事告诉你的队友

我们这个物种的感官知觉和运动技能(与肌肉运动有关)确保了它在大部分历史中的生存。

直到 7 万年前所谓的认知革命。

人类学分析和化石记录表明,那时我们的物种发展了用符号和想象的实体来思考的能力。

https://www.industry-era.com/augmented-human-10070.php】图片来源:

正如尤瓦尔·赫拉利在他的畅销书《智人》中指出的那样,智人之所以优于其他类人物种,最重要的一个原因是她能够以抽象的术语和想象的实体(如上帝、金钱、国家等)进行推理和思考。).

尼安德特人可以很容易理解新鲜水果或今天捕获的游戏的价值,但不能完全理解“建立信任”的想象效用,以便他们可以捕获更大的游戏,作为一个团队工作,明天

图片来源:https://www.ynharari.com/book/sapiens/

抽象思维和数学推理很好地服务了我们这个物种。语言、数学、逻辑、艺术、科学、技术——一切都源于这种能力。

但这只是最近的发展。

在那之前的几十万年里,运动技能和感官知觉帮助了我们基因的生存和滋养。只有那些具有优越反射能力,能够从远处发现掠食者威胁,或者跑得更快,投掷目标更准的动物才能存活下来,并把它们的基因传递下去。

因此,我们的生物学确保了我们在头盖骨内携带了一个次优化的数字处理器和一个极其高效的运动皮层。

抽象思维和数学推理很好地服务了我们这个物种。语言、数学、逻辑、艺术、科学、技术——一切都源于这种能力。但这只是最近的发展。

(对人工智能而言)比下棋或做积分更难的活动

Moravec 认为,总的来说,“我们应该预料到对任何人类技能进行逆向工程的难度大致与该技能在动物身上进化的时间成比例”。

最古老的人类技能在很大程度上是无意识的,在我们看来是毫不费力的。因此,那些看起来毫不费力的技能,计算量很大,很难被人造人工智能系统逆向工程,这并不令人惊讶。

需要有意识努力的技能——下棋、做数学、写诗、弹钢琴、画画——对人工智能来说可能一点也不困难。

最近几天,我们都听说过弹钢琴、国际象棋和围棋冠军、绘画大师作曲或数学天才艾,不是吗?

图片来源:作者

但是,我们还没有听说过一个人工智能/机器人系统可以在狭窄的厨房里洗碗,而不会干扰周围的几十个器皿,对吗?

见鬼,甚至没有一个商业机器人能够感知并在我们的头盖骨周围施加适量的压力,给我们一个奇妙的头部按摩!如果你能买到这样的 AI,我打赌你会马上买一台。

这些是真正的难题。

我们应该预计,对任何人类技能进行逆向工程的难度,大致与该技能在动物身上进化的时间成正比。

早在 1997 年,国际象棋就被计算机征服了。一旦 AlphaGo 打败了 Lee Sedol只用了一年左右的时间就开发出了 AlphaGo-zero 。强大的定理证明器和逻辑合成引擎是在 50 年代和 60 年代开发的,编程和计算能力有限。

但是现实世界中机器人技术、视觉和听觉感知、运动技能仿真的发展速度一直很慢,而且极具挑战性。

这肯定不是在这些领域工作的专业人员和研究人员的过错。这些任务对于专注于数学推理和大规模线性代数求解器的狭义人工智能来说是不容易完成的。

最有力的证明?人工智能的历史

莫拉维克的观察不是物理定律。或许,它更类似于摩尔定律,毕竟,摩尔定律是一个敏锐的观察。

有人称之为悖论。然而,我相信在人工智能的发展史上,我们有充分的证据证明这个悖论。

甚至在人工智能和计算机科学的早期,研究人员已经成功地编写了程序,证明定理,解决代数和几何问题,玩像 T2 跳棋和国际象棋这样的游戏。所有这些都只需要适度的计算能力,而且几乎没有数据。

这让他们相信,一旦这些“困难”问题被人工智能完全解决,那么“从照片中认出朋友的脸”或“在大学宿舍里走来走去而不翻倒”这些“简单”问题应该是在公园里散步。**

正如罗德尼·布鲁克斯所说,智能事物“最能被描述为受过高等教育的男性科学家发现具有挑战性的事物”——国际象棋、符号整合、证明数学定理以及解决复杂的文本代数问题。四、五岁的孩子可以毫不费力地做的事情,如在视觉上区分咖啡杯和椅子,或用两条腿走路,或找到从卧室到客厅的路,都不被认为是需要智力的活动。**

天哪,他们错了!

图片来源:http://sitn . HMS . Harvard . edu/flash/2017/history-人工智能/

这些所谓的“简单”问题,与视听感知和运动/移动有关,结果却是最难解决的问题。

我们可以有把握地说,我们现在明白是怎么回事了。这是因为事实上,进化的大机器也一直在完善和优化我们物种的这些技能,比其他任何事情都更艰难和持久。

毕竟,生物学不会那么容易屈服于人工智能事业。

AGI 和未来的工作

模仿生物学是通向人工智能的正确道路吗(AGI)?

有人可能会说,也许我们应该建立模拟大脑回路的人工智能系统,并设计各种模仿进化作品的子处理器。通过这种方式,我们或许能够像人类进化那样,将适量的计算资源分配给合适的子处理器。

全脑仿真可能是通往 AGI 的一条可能的道路。围绕它的可行性和潜力有很多争论。有一个令人兴奋的项目是模拟人类大脑的整个新皮层。我们不是来讨论这些的。

图片来源:维基百科(创意通用许可)

目前,普遍接受的构建智能代理的方法是“模仿人类行为”。这相当于著名的图灵测试,人工智能代理通过测试的标准只是“‘在外部考官看来像人类,并迫使她这么认为’”。请注意,图灵测试并没有硬性要求人工智能代理在智能谱上与人类完全一样。它只需要代理人扮演一个伟大的模仿者。

只要我们按照那个原则设计人工智能系统,我们就可能会受到生物学的限制。与构建只解决数学推理问题的人工智能相比,构建模拟日常感知和运动任务的人工智能将需要我们更多的计算能力和创造力。

数学很容易,毕竟园艺很难。

未来的工作?

人们想知道这对未来的工作有什么影响。有很多关于白领工作被人工智能技术取代的猜测,就像工业革命如何取代大量体力劳动工作或汽车革命如何使马车过时一样。

另一方面,许多专家一直在宣布人工智能和机器人自动化带来的所谓的第四次工业革命将为劳动力市场带来转机和更光明的未来

无论情况如何,我们看到有一个强有力的科学论据来相信,许多涉及复杂身体运动和微妙感官知觉的工作(例如,园艺,理发,老人护理,儿童保育,体育,调酒,酒店和酒店)不太可能在短期内被任何机器人自动化所取代。尽管这些工作表面上看起来毫不费力,但它们依赖于通过数百万年的生物过程优化而完善的技能,并且需要比许多白领重复性工作多得多的计算,这些工作只依赖于高级推理,这是人类进化的相对较新的产物。

未来是不确定的,令人兴奋的。保持开放的心态…

大量涉及复杂身体运动和微妙感官知觉的工作不太可能在短期内被任何机器人自动化所取代。

图片来源:Pixabay

如果您有任何问题或想法要分享,请通过tirthajyoti【AT】Gmail . com联系作者。此外,您可以查看作者的 GitHub 知识库中的代码、思想和机器学习和数据科学方面的资源。如果你和我一样,对人工智能/机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我在 Twitter 上关注我

*** [## Tirthajyoti Sarkar - Sr .首席工程师-半导体、人工智能、机器学习- ON…

通过写作使数据科学/ML 概念易于理解:https://medium.com/@tirthajyoti 开源和有趣…

www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)***

为什么中位数(有时)比平均数好

原文:https://towardsdatascience.com/why-median-is-sometimes-better-than-mean-dcdf5377c9d1?source=collection_archive---------27-----------------------

以世界人口为例的简单统计。用熊猫。

Unsplash 上的 Louis Hansel @shotsoflouis 拍摄的照片

当然,从数据分析开始,我发现了解数据描述的主要统计方法是非常必要的。当我深入研究时,我意识到对我来说很难理解对给定的数据选择哪个集中趋势指标。因为,当然,你知道,有三种:均值,中值,众数。

所以我决定写这篇文章来帮助像我一样的这个领域的新手解决这个问题,不要害怕数据和统计。要知道,有时候是会发生的,但不应该成为一个人和他成为数据分析师的梦想之间的高墙。对我来说,这也是一个很好的机会,让我可以在我感兴趣的领域——世界、国家和他们的人口——做一个小小的研究。(为什么我觉得有趣——这是另一个故事。)

好,我们开始吧。第一,要拿数据去探索。我在 Kaggle 上发现了一个很好的数据集:这个国家统计。它代表了世界上所有国家的经济、社会、基础设施和环境指标。在我们的研究中,我们只需要这个数据框中的三列:国家名称、所在地区和人口。

让我们看一下数据:

现在我们可以转移到我们的问题:我们应该使用哪个中心趋势度量来探索数据,以及为什么。

最简单的部分是关于模式。它只是一行或一列中所有值中最常见的值,仅此而已。这是数据中最“流行”的数字。

我们对非数字值使用 mode,并且只对它们使用。为了找到它,我们必须计算特定单元在给定列中出现的频率。结果最大的单元就是我们要找的模式。

在我们的数据集中,我们可以将一个关于模式的问题仅应用于 region 列,这是表中该问题唯一有意义的列。因为在国家一栏中所有的值都是不同的,而在人口一栏中它们是数字。

事先,我清理了这个列,只留下了五大洲的名字(而不是东南亚,亚洲等等)。只是不要混淆我们。

区域列的模式为:

很好。这意味着大多数国家位于非洲大陆。这并不奇怪,对吗?

现在让我们转向均值和中值。这两个值都显示了行中间的数字。但是方式不同。

Mean 是平均值,我们可以通过将一行中的所有值相加,然后将结果除以它们的数量来计算它。让我们看看人口。为了计算平均值,我们应该将所有国家的人口值相加,然后将总和除以数据集中的国家数。幸运的是,熊猫可以为我们做到这一点。

这个数字表明,一个正常的国家平均生活着大约 3300 万人。让我们保持原样,移到中间。

中位数也向我们展示了一个平均数。但是它正好是一行中间的值。如果我们按从最小到最大的顺序排列人口值,在这个有序行的中间位置,中位数将是。

我们来计算一下。

Ups!按照中位数计算,一个国家的平均人口只有 550 万人左右。根据平均数,它比平均人口少得多。怎么会这样?

通常平均值和中间值非常接近。如果不是,问题就出在异常值上,即与行中所有其他值都非常不同的值。我们来做一个小小的图形。

人口分布直方图

我们看到大多数国家都集中在零附近。但是有些价值观与众不同。虽然这些点很小,但我们可以看到其中一些在 2 亿以上,两个在 14 亿附近。这些都是离群值。它们会影响平均值。因为这是平均值的本质——考虑一行中的所有值。而中位数则没有这个缺点。

因此结论是,虽然均值、中位数和众数被用来描述数据的中心趋势,但我们在探索中应该相当谨慎地选择一个。否则,我们会做出错误的决定。

现在我们也知道了,世界上充满了勇敢而美丽的小国。大部分在非洲。

这是描述我们周围世界的统计和编程方法的一个小例子。数据分析可以给我们提供更多信息,帮助人们获得问题的答案。

为什么平庸的数据科学永远无法服务于社会

原文:https://towardsdatascience.com/why-mediocre-data-science-cant-ever-serve-society-3cc346d3fb06?source=collection_archive---------61-----------------------

意见

疫情政治表明,需要透明、隐私、背景和不愚蠢的解释

是时候采用消费和处理数据的最佳实践了。在 Unsplash彼得 G 拍摄的照片

T T 疫情冠状病毒是一个完美的例子,说明当科学突然成为焦点,需要以极快的速度进行时会发生什么。虽然在疫情有许多好的和谨慎的数据科学的正面例子,但许多平庸的,甚至完全虚假的信息也充斥着我们的社交媒体。

不幸的是,即使领导人和新闻媒体是善意的,他们也经常提供误导性的信息。例如,他们往往只关注每个国家的官方数字,尽管它们只揭示了部分真相。或者,他们称赞那些似乎很好地处理了疫情的国家,但忘记了隐私泄露和其他问题点。所有这些都增加了人们对政府和现有新闻的困惑和不信任感。

良好的意图,不完整的信息

官方公布的死亡人数只揭示了真相的一部分。真正的数字可以通过超额死亡来更好地量化,这意味着将过去五年的平均死亡率与 2020 年的死亡率进行比较。

例如,当纽约市在 4 月 25 日统计大约 16,700 人因冠状病毒死亡时,超额死亡人数达到 20,900 人;因此,约有 4200 人在没有被确认为病毒受害者的情况下死亡。

对于确诊病例,这种差异可能更大。由于没有严重症状的人不会做太多的检查,未被发现的病例数量很可能比官方的高很多。

虽然在疫情持续期间很难估计,但总体而言,死亡率被认为在 0.5%到 1%之间。即使我们假设官方死亡统计是准确的(事实并非如此):在撰写本文时,全球官方死亡人数超过 50 万,这意味着我们应该已经统计了 5000 万到 1 亿例冠状病毒病例。这与三周前报道的大约 900 万例 T2 病例不可同日而语,考虑到测试和死亡之间的时间差

最后,追回案件的数量不仅被低估,而且在含义上有误导性。虽然康复患者的身份可能意味着患者已经离开医院,但许多人报告说,他们在接下来的几周甚至几个月里都在与后遗症作斗争。此外,越来越多的证据表明,冠状病毒能够在以前健康的个体中导致心脏病引发糖尿病

[## 新冠肺炎官方统计数据遗漏了一些关键的东西

即使你从新冠肺炎恢复过来,你也不可能全身而退

elemental.medium.com](https://elemental.medium.com/official-covid-19-statistics-are-missing-something-critical-155e1e153a2f)

换句话说,许多所谓的康复病人还没有恢复到疫情之前的健康状态。由于没有人知道针对 Covid 的免疫能持续多久,因此将它们归类为长期免疫还为时过早。

底线是:尽管超额死亡是估计死亡人数的唯一可靠的方法,但是从感染到死亡之间的时间间隔太长了,因此无法推断出当前的情况。因此,决策者和科学家需要将他们的模型建立在关于确诊病例的高度不完整数据的基础上。

关于这种病毒的许多基本信息仍然不为人所知,例如为什么人们对它的反应如此不同,他们能免疫多久,以及它是否已经显示出任何令人担忧的变异。数据科学家在建立模型时需要考虑所有这些不确定性,例如病毒的传播。

疾病预防控制中心给树立了一个好榜样:在死亡人数的预测中,它总是包括来自可信机构的多重模拟,因此显示了一系列可能的情况。这突出了一个事实,即基础模型是基于不同的假设,因此不能无限精确地预测未来。

不幸的是,当一些新闻媒体和政客制造浮华的标题时,这种不确定性的概念往往会被遗忘。因此,不仅是数据科学家,普通大众在阅读一个又一个标题时也需要非常谨慎。

不要让你的数据成为监控机器。 evUnsplash 上拍照

精确和隐私之间的微妙平衡

关于病毒的潜在假设并不是模型成败的唯一因素。如果不尊重基本的公民权利,数据收集和处理就无法进行,即使在疫情也是如此。

以韩国为例。最新披露显示,因应对冠状病毒爆发而受到称赞的国家一直在存储 2015 年 MERS 爆发以来的敏感健康数据。虽然这个数据集可能会为处理当前的疫情提供一些见解,但政府在使用后有法律义务删除这些数据,以降低泄露敏感数据的风险,并防止污名化。

不仅数据一旦被使用就必须被删除。把它捆绑起来也很重要,这样人们就无法通过组合不同的数据点来找出个体的身份。统计披露控制框架可以自动完成这项任务。

另一方面,人们也不应该过多地捆绑数据。例如,社交距离计分板忽略了重要的地方和地区差异,意义不大,因为它们没有考虑到的社会、人口和经济背景

一旦你在尊重隐私和捆绑数据之间找到了一个好的平衡点,你还需要检查你的模型的参数。添加更多参数可能会使您的模型更好地适应训练数据。但是你添加的越多,包含的不确定性就越多,你的发现就变得越不相关

警惕道德和数据来源技术

你做的每个分析都必须基于社会价值观。在电晕时代,这可能是公共卫生。在其他领域,这可能是可持续性、盈利性或生产率。如果一个模型被重新用于一个不同的问题,这些核心价值必须被重新评估。

这听起来很简单,但事实并非如此。考虑前面提到的社交距离记分卡:当然,人们可以收集数据,并建立一个社交距离随时间演变的预测模型。但是这真的有利于公共健康吗?鉴于地区和社会经济背景的不准确性,可能不会。

然而,如果获取数据的技术不理想,所有这些确定目的的方法都无济于事。例如,联系追踪应用程序远非完美。使用他们的数据的唯一合法方式是考虑所有的不确定性,并在展示你的发现时充分披露。

首先,接受不确定性意味着一件事:提出更多的问题,而不是给出明确的答案。虽然清晰的答案在短期内会成为更好的头条,但从长远来看,它们几乎肯定是非常错误的。

为了培养一种你可以问更多问题的文化,尝试在一个开放的生态系统中发布你的模型,在那里科学同行评审者、研究伙伴、企业和其他社区可以成为讨论的一部分。通过这个,你不仅证明了你并不知道所有的事情。你还暗示这是一个正在进行的调查,每个人都关心。

虽然上述所有这些在其他分支机构中已经很长时间了,但现在是时候将这种技能融入到当前事务中了。

培养一种开放的文化最终对每个人都有好处。卢克·波特在 Unsplash 上拍摄的照片

用上下文和心灵来引导

如果你读到这里,你可能会想,这一切听起来很好,但是很难向你的祖母解释。你没有错。数据科学及其伦理很难向公众解释清楚。但也不是不可能。

希腊为例。它在处理疫情方面的成功在很大程度上要归功于希腊卫生部发言人 Sotiris Tsiodras。作为一名科学家,他不仅解释了图形和曲线。每天晚上,他都上电视,在概述疫情发展的同时,他强调每一个病例,每一个死亡对这个国家的某些人来说都是人类的悲剧。

这是数据科学家在这种时候最终应该做的事情。这就是目前公共卫生数据、数据处理和建模的内容。不是 p 值黑客或者最漂亮的新算法。甚至不是让你奶奶明白流行曲线的来龙去脉。所有关于伦理、数据收集、隐私和目的的谈论都是为了一件事:尽你最大的努力确保你的奶奶不会死。

为什么如果你想成为一名成功的数据科学家、人工智能或人工智能工程师,导师是必不可少的。

原文:https://towardsdatascience.com/why-mentorship-is-essential-if-you-want-to-be-a-successful-data-scientist-ai-or-ml-engineer-b445112e53bb?source=collection_archive---------65-----------------------

你很有可能在这个领域靠自己获得成功,但这里有几个原因可以让你在导师的帮助下获得更多,做得更好。

制造者在 UnsplashNESA 的照片

导师是在你身上看到比你在自己身上看到的更多的天赋和能力,并帮助你发挥出来的人。 —鲍勃·普罗克特

学习成为一名数据科学家、人工智能或人工智能工程师可能非常困难,即使你有幸接受过正式的课堂教育。通常情况下,你会学到很多抽象的东西,以至于当你最终以专业人士的身份进入这个领域时,你会发现自己有所欠缺。把学习成为一名数据科学家、人工智能或人工智能工程师想象成在一个沙箱中,在那里你周围有一个受控的环境。无论您在沙盒中做什么,都不会影响现实世界中的生活,而且大多数情况下,您所从事的项目类型或用于这些项目的数据都已经准备好供您使用,在学习过程中不会遇到任何问题。然而,你发现作为专业或实践数据科学家、AI 或 ML 工程师的沙盒之外的生活是完全不同的。在现实世界中,您的行为会对您组织的业务或财务计划产生影响,您必须处理的数据未经预处理,您所从事的项目对您所在的任何机构的决策都至关重要。那么,你如何为自己的职业生涯做准备呢?很简单,给自己找个导师。不是任何导师,而是在这个行业中专业工作过的人,如果这个人现在还在工作,他擅长他所做的或者仍然在做的事情。让我们讨论一下为什么如果你想成为一名成功的数据科学家、人工智能或 ML 工程师,拥有一名导师是必不可少的几个原因。

你的导师让你做好准备

作为一个在行业中有如此丰富技术经验的人,你的导师会让你准备好在现实世界中会遇到什么,并通过从他们的个人经历、错误和缺点中教会你做正确的事情,引导你走上在该领域取得成功的正确道路。你的导师也把你们的关系作为一个机会来建议和激励你,即使是在生活中与工作和学习无关的方面。你的导师视你为朋友,甚至是弟弟妹妹,会尽一切努力帮助你成功。

你的导师挑战你

你的导师强调要确保你永远是比前一天更好的自己。凭借你的导师在行业内专业工作的所有知识和经验,你的导师会推动你走得更远,做得更好,知道得更多。你的导师知道你会从做得更多中获得什么,他们不会罢休,直到你成为他们更好的版本。

你的导师保护你

作为一个对你的幸福和事业成功充满热情的人,你的导师永远不会让你满足于低于你应得的。你的导师保护你不落入坏雇主的手中,不成为坏合同的牺牲品。

给我看一个成功的人,我会给你看一个对他或她的生活有真正积极影响的人。我不在乎你靠什么谋生——如果你做得好,我敢肯定有人在为你加油或指路。一个导师。 —丹泽尔·华盛顿

Notitia AI

Notitia AI logo 由诺贝特 Dziwornu

Notitia AI 是一个以培养非洲下一代数据科学家为愿景的组织,即使我们在培训和指导之间架起了一座桥梁。在 Notitia AI 注册可以让你进入一个虚拟的生态系统,其中包括一个人工智能驱动的学习和培训平台,一个坚实的工作空间和一个由来自非洲各地和其他地方的顶级专业人士作为导师的社区。Notitia AI 目前正在举办一个队列,但感兴趣的人可以通过填写此表格加入我们未来队列的等候名单。

你还怀疑师徒关系的重要性吗?你能指出我写这篇文章时可能漏掉的一些事情吗?在这篇文章的回复部分分享你的想法和观点。你也可以在 TwitterLinkedIn 上直接联系我。

在你成为世界级数据科学家、人工智能或人工智能工程师的旅途中,祝你成功!

我衷心感谢 安娜·阿依库 校对并纠正了我写这篇文章时犯的许多错误。

为什么数据越多并不总是越好

原文:https://towardsdatascience.com/why-more-data-is-not-always-better-de96723d1499?source=collection_archive---------23-----------------------

即使是“大数据”也有局限性

来源:图片来自 Pixabay

在过去的几年里,越来越多的人认为,数据越多,最终的分析就越好。

然而,正如人类会被太多的信息淹没一样,机器学习模型也是如此。

以酒店取消为例

最近,在反思我过去一年一直在做的一个副业项目时,我也在思考这个问题——用机器学习预测酒店取消预订

我已经写了许多关于媒体主题的文章,很明显,在过去的一年里,酒店业的格局已经发生了根本性的变化。

随着对“居家度假”或当地假期的日益重视,这从根本上改变了任何机器学习模型在预测酒店取消时应该做出的假设。

来自 Antonio、Almeida 和 Nunes (2016) 的原始数据使用了来自葡萄牙酒店的数据集,这些数据集带有一个指示客户是否取消预订的响应变量,以及该客户的其他信息,如来源国、细分市场等。

在这两个数据集里,大约 55-60%的客户是国际客户。

然而,让我们假设一下这个场景。明年这个时候——酒店入住率恢复到正常水平——但绝大多数顾客都是国内顾客,这次是来自葡萄牙。为了这个例子的目的,让我们假设一个极端的场景,即 100% 的客户都是国内的。

这种假设将从根本上影响任何先前训练的模型准确预测取消的能力。我们举个例子。

使用 SVM 模型分类

SVM 模型最初用于预测酒店取消率,该模型在一个数据集(H1)上进行训练,然后使用测试集的特征数据将预测结果与该测试集(H2)进行比较。响应变量是分类变量(1 =预订被客户取消,0 =预订未被客户取消)。

以下是三种不同场景下混淆矩阵显示的结果。

场景 1:在 H1(完整数据集)上训练,在 H2(完整数据集)上测试

[[25217 21011]
 [ 8436 24666]]
              precision    recall  f1-score   support

           0       0.75      0.55      0.63     46228
           1       0.54      0.75      0.63     33102

    accuracy                           0.63     79330
   macro avg       0.64      0.65      0.63     79330
weighted avg       0.66      0.63      0.63     79330

总体准确率为 63%,而积极类(取消)的召回率为 75%。澄清一下,在这种情况下,召回意味着在所有取消事件中,模型正确地识别了其中的 75%。

现在,让我们来看看当我们在完整的训练集上训练 SVM 模型,但在我们的测试集中只包括葡萄牙的国内客户时会发生什么。

场景 2:在 H1(全数据集)上训练,在 H2(仅限国内)上测试

[[10879     0]
 [20081     0]]
              precision    recall  f1-score   support

           0       0.35      1.00      0.52     10879
           1       0.00      0.00      0.00     20081

    accuracy                           0.35     30960
   macro avg       0.18      0.50      0.26     30960
weighted avg       0.12      0.35      0.18     30960

准确率急剧下降到 35%,而取消类的召回率下降到 0%(这意味着该模型在测试集中没有预测到任何取消事件)。这种情况下的性能显然非常差。

场景 3:在 H1 进行培训(仅限国内),在 H2 进行测试(仅限国内)

但是,如果训练集被修改为只包括来自葡萄牙的客户,并且模型被再次训练,那会怎么样呢?

[[ 8274  2605]
 [ 6240 13841]]
              precision    recall  f1-score   support

           0       0.57      0.76      0.65     10879
           1       0.84      0.69      0.76     20081

    accuracy                           0.71     30960
   macro avg       0.71      0.72      0.70     30960
weighted avg       0.75      0.71      0.72     30960

准确率恢复到了 71%,召回率达到了 69%。在训练集中使用更少但更相关的数据使得 SVM 模型能够更准确地预测测试集中的取消。

如果数据是错误的,模型结果也将是错误的

如果大部分数据与您试图预测的内容无关,那么数据越多越好。如果训练集不代表现实,即使是机器学习模型也可能被误导。

哥伦比亚商学院(Columbia Business School)的一项研究将这一点列为 2016 年美国总统选举的一个问题,在这次选举中,民调显示克林顿牢牢领先于特朗普。然而,事实证明,有许多“特朗普的秘密选民”在民调中没有被计算在内——这使结果朝着克林顿获胜的方向倾斜。

顺便说一下,我不是美国人,在这个问题上保持中立——我只是用这个例子来说明,即使是我们经常认为“大”的数据也可能包含固有的偏见,可能不代表实际发生的事情。

相反,数据的选择需要和模型的选择一样仔细,如果不是更多的话。包含某些数据与我们试图解决的问题相关吗?

回到酒店的例子,当我们的目标是预测国内客户群的取消时,在训练集中包含国际客户数据并没有增强我们的模型。

结论

越来越多的人希望收集所有领域的更多数据。虽然更多的数据本身并不是一件坏事,但不应该认为盲目地将更多的数据引入模型会提高模型的准确性。

相反,数据科学家仍然需要确定这些数据与手头问题的相关性的能力。从这个角度来看,模型选择变得有点事后诸葛亮。如果数据代表了您在第一个实例中试图解决的问题,那么即使是更简单的机器学习模型也会产生强大的预测结果。

非常感谢您的阅读,欢迎在下面的评论中留下任何问题或反馈。

如果您有兴趣深入了解酒店取消示例,您可以在这里找到我的 GitHub 存储库

免责声明:本文是在“原样”的基础上编写的,没有担保。本文旨在提供数据科学概念的概述,不应以任何方式解释为专业建议。

什么是歧义厌恶?

原文:https://towardsdatascience.com/why-most-of-you-made-an-irrational-decision-aeeac532ef92?source=collection_archive---------6-----------------------

第 2 部分,共 3 部分——风险、不确定性和模糊性之间的区别

合理性问答中你选择了 A & C,A & D,B & C,还是 B & D

(不知道我在说什么?这可能是因为你没有先阅读 第一部分(一个 3 分钟的小测验) 就来到了这里,所以请在进一步阅读之前先这样做。你需要知道这些 X 事物的含义,其他的才有意义。)

我在网上放了一个可爱宠物的屏障,这样你就不会不小心看到下面的剧透了。当你读完第 1 部分时,滚动浏览它们。

大多数人选择什么?

如果你像大多数人一样,你选择了常年最喜欢的: A & D

唉,如果真是这样,说明你没有理性选择!是的,大多数人不喜欢,所以没必要难过。你在一个好公司里。各种不合理的决策是我们人类固有的,需要大量的训练来克服。

Twitter 上的投票结果与 20 世纪 60 年代以来无数的实验室研究结果一致。

你的结果是什么?

  • A & C理性,尤其是如果你喜欢粉色(或者认为我喜欢)。
  • B&D——理性,尤其是如果你不喜欢粉色(或者认为我喜欢)。
  • 抛硬币两次——理性的,尤其是如果你是一名训练有素的经济学家。
  • A&D——非理性但流行。科学认为它知道人们为什么这样做。
  • B&C——非理性和科学不理解你。😦

图片:来源

我的大多数读者都是数据科学专业人士和/或高级数据主管。当昨天的测验进行时,我很开心地收到了一堆评论,比如,“太简单了,给我们来点难的吧!”(如此虚张声势!我的手指发痒,想写一篇关于过度自信效应的文章。)

如果理性决策如此简单,为什么你们这些数学伙伴中有四分之三的人会犯错误?

也许这并不容易,数据科学课程也不能让你摆脱人类的弱点。也许数据科学家可以从行为经济学家和心理学家那里学到一些东西

非理性决策

总有一天,我会写一篇文章,聚焦于经济学家如何定义理性(并向你介绍冯·诺依曼–摩根斯坦理性的四个公理 …嗯,真想不到),但现在,让我们保持简单:

一个决定可能不合理的一种方式(以及其他方式)是不一致,这是压倒性流行的 A & D 答案所遭受的。

拿出手术刀,准备解剖!我们用理性案例做一点证明。

理性案例#1:行为经济学家做什么

我的本科专业是经济学,这使我有资格加入最冷血的群体——经济学家。对一个幼小的实验/行为经济学家的训练的一部分是被棍子打,直到我们学会对像这样的决定采取理性的态度。那么,在我们洗脑之后,我们更喜欢哪个答案呢——呃,我的意思是,训练已经成功扎根了?

图片:来源

我们。不要。关心。

完全理性的头脑不应该有任何偏好。当面对这些选择时,我们感到完全的、厚颜无耻的、好战的冷漠。所有四个 X&X 组合是相同的。

一个经济学家被训练来观察选择并分析可能性。我们问,“虽然我们知道有 30 个白色的球,但我们对其余 60 个球中黄色和粉色的分布有什么了解?”

最佳答案:什么都没有。

事实:我没有给你任何关于这方面的信息,你必须先了解我,才能知道我相对喜欢粉色还是黄色。如果你认为你知道我喜欢哪种颜色,那就是你在展示你的偏见。

所以,就一个训练有素的经济学家而言,有:

  1. 没有信息表明粉色比黄色多。
  2. 没有信息表明黄色比粉色多。

这意味着当我们计算数字时,没有理由区别对待黄色和粉红色,因此,以下是目前与《经济学人》头脑中的内容最一致的内容:

  • 30 白色
  • 30 粉色
  • 30 黄色

喜欢就试试自己跑数字得到解答:
赌 A: 30 个好球 vs 60 个坏球
赌 B: 30 个好球 vs 60 个坏球
赌 C: 60 个好球 vs 30 个坏球
赌 D: 60 个好球 vs 30 个坏球

这使得所有的捆绑(A&C、A&D、B&C、B&D)对经济学家来说都具有同等的吸引力,然后经济学家被迫任意挑选(或抛硬币)来减轻这种极度冷漠的痛苦。

理性案例#2:粉色的粉丝做了什么

如果你不能表现出完全的冷漠,你喜欢挑选一匹赛马只是为了好玩,让我们假设你喜欢粉红色,你想打赌粉红色比黄色多。(如果你被偏见所困扰,你会得到类似的答案,因为一些奇怪的原因,我会在桶里放更多的粉红色而不是黄色。)

我们将想象最温和的情况——让我们从这里开始,制作一个黄色球来改变忠诚,而不是相等的黄色-粉红色赔率。天平现在略微倾向于粉红色。

此刻在你的脑海里:

  • 30 白色
  • 31 粉色
  • 29 黄色

赌局 A: 30 个好球 vs 60 个坏球
赌局 B: 29 个好球 vs 61 个坏球
赌局 C: 61 个好球 vs 29 个坏球
赌局 D: 60 个好球 vs 30 个坏球

因为你会参加第一场比赛(A 对 B)或第二场比赛(C 对 D ),但不会两者都参加,所以尝试两面下注没有任何好处。如果你想要那 100 美元,你会赌更多的好球而不是坏球。这意味着你唯一合理的组合是 A&C。

现在尝试极端的全粉色案例:

  • 30 白色
  • 60 粉色
  • 0 黄色

赌局 A: 30 个好球 vs 60 个坏球
赌局 B: 0 个好球 vs 90 个坏球
赌局 C: 90 个好球 vs 0 个坏球
赌局 D: 60 个好球 vs 30 个坏球

还是那句话,必须是 AA&C。其他的都没有意义!

理性案例#3:讨厌粉色的人做了什么

如果你想赌黄色或者你确信我对小鸭子的喜爱,逻辑是一样的,但现在唯一有意义的答案是 B & D

大多数人选择了非理性选项 A&D…瓦特?!

尽管如此,在 Twitter 的民意调查中,我们有近 65%的人选择了非理性选项 A&D。从上面的逻辑来看,选择这两个选项是没有意义的。

这张截图是在上一张之前拍摄的,当时还没有解释和剧透,所以这些是我们在投票前无法先睹为快的情况下得到的结果。我很高兴地看到,当作弊成为一种选择时,事情并没有变得混乱。

A&D 是不一致的选项(如果 A 比 B 好,那么 C 应该比 D 好……事实上,这两组几乎是相同的赌博——我们所做的只是将相同的粉红色球移到线的另一边):

赌 A: W 好,休息不好
赌 B: Y 好,休息不好
赌 C: W +P 好,休息不好
赌 D: Y +P 好,休息不好

那种对称是华丽的…如果你在赌博 B 中赌黄色,理性建议你在赌博 d 中仍然应该这样做。但是人们不这样做。尽管事实上,如果你两次使用同一个铲斗,A&D 在一起将没有意义,尽管事实上选择是不合理和不一致的,人们仍然最喜欢它。

埃尔斯伯格悖论

是的,的确,这是一个悖论!事实上,它被称为埃尔斯伯格悖论,以决策理论家丹尼尔·埃尔斯伯格的名字命名,他想出了一个我们刚刚玩的小游戏,当时他正在哈佛大学写他 1962 年的博士论文——事实上,他的维基百科页面几乎没有提到他的另一个成名原因:泄露五角大楼文件(是的,你在尼克松水门丑闻的背景下听说过的那些

丹尼尔·埃尔斯伯格,我们埃尔斯伯格悖论中的人。请允许我小小的幻想一下,这些记者渴望了解更多关于效用理论和理性决策的知识。图片:来源

但这意味着什么呢?

大多数经济学家对这个难题的答案包括引入一个叫做“模糊厌恶”的新概念来解释这种怪异的选择模式。

让我们像埃尔斯伯格那样看待它。A&D 期权有什么共同点?是什么吸引了你?

如果你没有像我们一样把粉色和黄色的数字折叠起来,并且一直在未知的地方工作,这就是你的想法:

  • 30 白色
  • ??粉红色
  • ??黄色

喜欢就试试自己跑数字得到解:
赌 A: 30 个好球 vs 60 个坏球
赌 B:??好 vs??坏球
赌博 C:??好 vs??坏球
赌博 D: 60 个好球 vs 30 个坏球

图片:来源

这里有龙!这是伟大的未知!!哦,不。让我们坚持一些安全的东西,选择已知的赌博,而不是宇宙状态不确定的赌博…

“风险”意味着概率是已知的。“模棱两可”意味着他们不是。

什么是歧义厌恶?

简单地说,这个理论就是:模糊伤害了人类这个动物。我们不喜欢它。我们愿意做出次优的选择来避免它。

当事情有风险的时候,也不是那么糟糕。模糊更让我们害怕。

如果我们不太介意进行一两次概率计算,风险是我们可以处理的,但模糊性确实困扰着我们。与风险相比,模糊会带来不同的不适。一个更原始的。(“什么?!"我听到你在问,“难道 风险、 不是一回事吗?它们不是同义词吗?”如果你是一个行为经济学家,那就不是了。)

基本术语:

  • “风险”是指明确知道概率的决策。(A 和 D)
  • ****“模糊不清”指的是你毫无头绪,决策卡住的决策。(B 和 C)
  • 【不确定性】可以指中的任何一个,取决于你成长的领域和年代。*

当你在行为悖论中插入模糊厌恶的概念时,一切都变得完美了。如果你选择了 A&D,埃尔斯伯格在 60 年代提出的流行理论认为,正是这些问号让你止步不前。

心理学家认为,人类天生就觉得模棱两可很痛苦。

你不想处理这种模棱两可的痛苦,所以你选择了看起来更容易处理的选项…即使它们是非理性的和不一致的。对于生活在大草原上的生物来说,这是一个非常好的适应——小心那片黑色的高草丛……你永远不知道那里潜伏着什么,所以最好避开它。如果可能的话,呆在阳光充足的地方,在那里你至少可以看到你正在进行的赌博。

与新冠肺炎的相关性

也许你明白我的意思,也明白为什么在所有的头条都是疫情风味的时候,我会有灵感写下这个特定的话题……新冠肺炎早期的情感流失之一就是我们突然不得不面对的所有模糊。如果你相信厌恶模棱两可的经济学理论,并且因为对媒体每天警告你的新危险知之甚少而情绪低落,那么你至少可以解释一种困扰你的潜在压力源。

请在这里观看我正在撰写的一篇文章的链接,这篇文章是关于你可以做些什么来更好地应对你的模糊厌恶,但现在,我希望你能从理解模糊带来的额外痛苦是很正常的这一点上得到一点安慰。至少,如果这里一定有龙的话,它们现在有名字了。

我的新冠肺炎决策指南,见此链接

如果这里一定有龙,至少现在它们有名字了。

第 3 部分是为过分感兴趣的人准备的

如果你想深入了解单词不确定性的学术本质,这里有链接。

【附:对于那些必须知道我到底更喜欢哪种颜色的人来说,这里透露一下……这只猫在粉色和黄色之间是无所谓的。哈!这就是为什么我选择他们作为例子。埃尔斯伯格的原作使用了黑色(我最喜欢的)、白色和红色。】**

关于那些评论

这篇文章发表后,我收到了一些固执地为自己的选择行为辩护的人的暴躁评论。(称 mathy folk 为非理性类似于踢马蜂窝。)你可以在这里找到我的回复

对于那些好奇的人来说,这是剧透出来后的分数(“最流行的答案是不理智!”)但是在解释发表之前。我用最后的分数替换了上面的。

现在是完全不同的东西…

感谢阅读!如果你在这里玩得开心,并且对人工智能感兴趣,这里有一个初学者友好的介绍供你娱乐:

在这里欣赏整个课程播放列表:bit.ly/machinefriend

喜欢作者?与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeSubstackLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。

为什么社交就像投资指数基金——我是如何通过参加活动结识多位面试官的

原文:https://towardsdatascience.com/why-networking-is-like-investing-in-an-index-fund-how-i-met-multiple-interviewers-by-attending-adf82df5b049?source=collection_archive---------41-----------------------

办公时间

在申请我的第一份数据科学工作时,我是如何了解我的面试官的。

图片来自 Unsplash

"网络是如此重要:建立联系的 8 个技巧!"当我在谷歌搜索上滚动时,标题是,“即使害羞也要学会交际”。即使读了 10 多篇这样的文章,我仍然不确定我能做什么。事实上,我仍然不明白“网络”作为一个动词是什么意思,更不用说用它来帮助我获得作为一名数据科学家的第一份工作了!

当我开始全职工作时,那是我对“网络”的理解状态。几年后,只是在事后,我也同意网络是建立职业生涯最重要的方式之一。例如,在面试我的第一份工作时,我已经见过多个最后一轮的面试官(他们也记得/认出了我)。但我不知道这能算作网络的结果,因为有这么多不同的定义。

既然我已经填补了困惑和理解之间的空白,我觉得我可以用真实的例子来说明网络是如何帮助我的。这就是为什么,在这篇文章中,我分享了我第一次寻找数据科学工作时如何涉及网络的详细过程,希望它一劳永逸地不再神秘。

社交就像投资指数基金

在我们进入例子之前,我想给你一个我在过去的经历中注意到的模式的鸟瞰图,我把它标记为“网络”。我去参加活动和会议,这些活动和会议本身可能没有回报,或者只有很少的短期回报。这就像把一小部分工资投入指数基金(或者储蓄账户,如果你不记得“指数基金”的话)。

在将少量资金存入投资账户的头几个月,余额的微小而逐渐的增加可能不会被注意到。只是时间长了,加上复利,你突然发现你的余额比预期高了!

有了这个类比,让我们直接看例子。这里我具体说说我硕士快结束找工作时的两次面试。两家公司都是大公司:一家是 AAA 视频游戏公司,拥有世界上最大的视频游戏特许经营权,另一家是加拿大最大的电信公司之一(根据一项内部统计,1/400 的加拿大人为他们或他们的子公司工作)。剧透:我收到了两个邀请。

我将在每一次面试中谈论人际关系网是如何帮助我的。顾名思义,我实际上是在其他地方遇到最后一轮面试官的,完全是巧合

AAA 视频游戏公司

网络——从本地游戏组织到旧金山

当时,严格来说,我是一名全日制学生,但我的业余爱好是开发一款视频游戏。与这个爱好相关的是,我参加了旧金山的游戏开发者大会,这是我每年都会花时间参加的一个活动。

退一步来说:我能负担得起参加这个会议的原因首先是因为我是多伦多 Dames 制作游戏的一员很长时间了,去参加他们的会议和活动。他们有一个我申请的奖学金项目,幸运的是,我收到了一张来自。因此,即使在游戏开发者大会之前,一般来说,一个要求是持续地参加当地的游戏开发者活动。

所以,听着:我参加这个会议是作为一种爱好,并不认为这是一个全职工作的任何形式的网络。在一次演讲后,我留下来向演讲者提问,他是一家拥有数百万玩家的大型视频特许经营公司的制片人。用非游戏行业的术语来说一点广义的上下文:制作人受到高度重视,是游戏演职员表中的顶级名字之一,类似于电影行业的一个导演。

几个月后,我幸运地进入了 said AAA 视频游戏公司的最后一轮面试,这家公司让我和其他候选人飞到了法国巴黎。令我惊讶的是,其中一位采访者正是我在会议上遇到的制片人!我无法强调这种情况发生的可能性有多大,因为这家公司规模庞大,更不用说是国际性的了。想想看:我,一个加拿大人,面试多伦多办公室。制片人在欧洲,但是我们在美国旧金山见面。

面试流程——免费飞往法国巴黎

作为奖励,我将谈谈这个特殊角色的面试过程。这是为了让你鸟瞰网络是如何有帮助的,以及“网络”是如何完全偶然的。想想指数基金的类比——小额存款只在未知的时间后显示(巨大的)回报。

  1. 提交简历:在这一点上,我没有使用任何员工推荐,尽管我确实认识公司里的一些人(也来自 Dames Making Games conferences),大多数是叙事设计角色。
  2. 打电话给招聘人员:招聘人员想了解我的背景,以及为什么我对那家 AAA 公司特别感兴趣。不出所料,我不得不解释为什么我有经济学学位,但对游戏感兴趣。“我是游戏玩家”并不能说服他们;他们听说的方式太多。副业/爱好,你好!
  3. 多伦多办公室的个人案例面试:1 小时做案例面试,2 小时左右解释我的结果,然后被面试官“盘问”。我指的是轻松,因为在采访中,我通常把它视为对话;面试官只是想了解我,看看我是怎么想的。他们不得不盘问我的想法。
  4. 在公司总部国家(法国)的最后一轮面试:飞往那里,前一天花了 6 个小时沿着塞纳河散步和观光,没有准备任何东西。这是为了充分利用这次免费旅行,克服时差,也为面试理清思路;没有懈怠!全天小组和个人面试,包括案例研究面试和自由提问。

在第4步中,我在会议期间遇到的制片人不仅出现在集体采访的采访小组中,他还是我在 solo,1 对 1 采访中的采访者。这是令人难以置信的运气——但我必须再次强调,这是我从未预料到或控制过的事情。我只是有一个爱好,那就是制作游戏,为此我去了美国参加了一个会议,在一次演讲后我问了一些问题...

现在,我知道你可能在想:“联网是不可能的,苏珊,你太幸运了!你让事情变得更复杂了!”不要担心——在这篇文章的最后,我会总结你如何创造你的运气,以及我如何相信我得到了这个幸运。因为这对我来说发生了很多次,这不仅仅是字面意义上的运气;请相信这是一种可复制和可习得的技能!

大型电信公司

网络——来自大学志愿服务的意外收获

在大学(滑铁卢大学),我曾在校园学生会中担任志愿者和领导职务。通过它,我认识了许多朋友,和许多人一起工作。那些朋友中的一个(姑且称她为 A )把我介绍给她的一个朋友( B ),她来自安大略省伦敦的另一所大学。(它甚至比这更复杂,甚至涉及更多的跳过连接,但简单来说,这就是友谊是如何形成的。)

这位来自安大略省伦敦的朋友向我们介绍了更多和他一样在商学院的朋友。因此,他们中的大多数进入了咨询或营销的全职岗位。他们中的几个人( C 等人)毕业后开始在一家大型加拿大电信公司或其子公司工作。

几年后,我在一家大型电信公司看到一份招聘启事。我问了 C 这件事,她同意介绍我。他不属于数据科学团队,但他向我概述了该团队的结构。几周后,有一次聚会,电信公司的人在会上发言。我把它记在日历上,然后就去了,尽管我没有意识到说话的是数据科学主管。

在会场上,我实际上遇到了一个我在滑铁卢大学时代就认识的人(姑且称她为 D ),她最终会把我介绍给数据科学团队的几个人(姑且称他们为 EF )。如果没有热情的介绍,我可能还会和 E和 F交谈,但是有了热情的介绍,肯定会容易得多。

在活动结束时,我有点不好意思向演讲者介绍自己,他是数据科学总监。然而,我刚认识的 E 鼓励我这样做,所以当导演要离开时,我去打了个招呼。我一点也不知道,几个星期后,经过几轮面试后,那个导演将是我最后一轮面试者之一!

面试过程——我作为数据科学家新手的第一个角色

我也将简要概述一下面试过程,帮助你鸟瞰(和后见之明)一下“关系网”是如何在这里发挥作用的。

  1. 我在一个朋友的员工推荐下在线申请了这个职位( C ,如上所述,他不在数据科学团队)。我还必须提交一段回答一些行为问题的视频。
  2. 然后,我接到了一个招聘人员的电话,他想了解我的背景和分析方面的一般经验。
  3. 在我通过之后,我有一个面对面的案例面试,我有一个小时的时间来完成。还有一些分析问题,比如 SQL 和线性回归。然后,我向一个三人小组展示了结果。
  4. 之后接下来是具体数据科学问题的现场面试,比如 Python 和统计学/机器学习问题。我的一些面试官是数据工程的,一些是数据科学的。然后,我和主任谈了谈,他就是我在聚会上遇到的那个人!

另一件幸运的事情是,我在聚会上遇到的团队中的某个人( F )已经用行为问题查看了我的视频记录,并接受我进入下一轮(见本节的1.)。

意外收获网络中的常见模式

我敢打赌,这两个例子包含了大量的信息,您可能会奇怪为什么我要如此详细地分享这些信息。在这里,我将找出常见的、可重复的线索,我希望你会发现更容易理解,因为你现在与上下文在同一页上,无论它看起来是偶然的而不是有意的。

在这篇文章的前面,我首先给你打了一个比方,把人际关系看做是投资一个指数基金。正如你所看到的,上面的两个例子,虽然是轶事,但都有相同的特点,即看不到立竿见影的效果,而是经过很长一段时间后的复合效果。

如果我没有一点一点地存钱(去参加活动,去见人),就不会有任何结果。毕竟,即使是 20%的利率,投资账户中的 0 美元仍然会产生 0 美元的收益。

在这两个非常成功的例子中,我没有意识到我在会议上与人见面的努力会被视为建立关系网。这就是为什么这么多文章说不要建立关系网,好像你是故意这样做的。事实上,在你读完我的故事后,希望你能理解网络是如何帮助我的,因为我没想到它会在面试中帮助我。翻译:你能做的最好的事情就是不断努力去见人

另一个重要的因素是,我没有集中精力去会见那些拥有我想要的职位的人。你可操作的任务是拓宽你的人际网络:在我的例子中,结识来自不同大学和专业的人,以及课外志愿活动导致了电信公司例子中的成功。如果我只专注于会见特定公司的数据科学家,这些成功故事都不会发生。

尽管运气似乎在其中发挥了很大作用,但主要的收获是:去参加会议和聚会,只是和人们交谈。你创造了你自己的“运气”。哪怕每次活动只认识一个新人,也是值得的!每次你这样做,你就在投资/储蓄账户里投入了 10 美元。

疫情时报注意:大量的在线社交活动、会议和聚会仍在进行!我仍然每周都会遇见新的人。只有你负责让自己置身于可以结识新朋友的情境中;这不会从天上掉下来。你可以报名参加在线活动,现在许多活动都是全球性的,而且免费/便宜,因为它们不在现场。

相关阅读:在一个新的行业或城市建立人际网络的 3 个技巧,从零开始——我在 6+城市生活的心得

3 个可行的步骤来建立你的关系网,创造你自己的运气

除了把人际关系想象成投资一只指数基金,以一致的节奏一点一点地投入,并在一段未知的时间后获得重大回报之外,你还可以采取以下具体行动:

  1. 报名参加一个会议或聚会,目的是在那里结识一个新朋友。你负责创造自己的“运气”。
  2. 扩大你的社交网络:你可以在活动中或 LinkedIn 上轻松做到这一点。不要只关注那些拥有你想要的职位的人。
  3. 坚持做上面的事情,开始把人际关系网(认识人和交朋友)当成一项你可以提高的技能。它不是你“与生俱来”才会有的东西;任何人都可以通过练习获得。

祝你在网络投资账户中持续投入 10 美元——当你最意想不到的时候,会有好事发生!

原载于 2020 年 8 月 16 日【https://www.susanshu.com】

为什么神经网络可以逼近任何函数

原文:https://towardsdatascience.com/why-neural-nets-can-approximate-any-function-a878768502f0?source=collection_archive---------10-----------------------

具有 PyTorch 代码和可视化工具的通用逼近定理的基本概述

在本文中,我将解释通用逼近定理,并用 PyTorch 代码展示两个快速示例,以演示神经网络学习逼近函数。如果你已经知道神经网络如何工作的基础知识,请随意直接跳到代码和可视化!

很多人一听到函数这个词,就想到高中代数和 f(x)=x 之类的关系,虽然我对高中代数没什么反感(我教了两年!),重要的是要记住,功能只是从输入到输出的映射,而这些可以采取多种形式。

UnsplashKitti Incédi 拍摄的照片

假设你想训练一个预测一个人衣服尺码的机器学习模型。(我最近用这样的算法估算了一下我穿夹克的尺码)。输入是人的身高、体重和年龄。输出是大小。我们试图做的是产生一个函数,将一个人的身高/体重/年龄组合(一个三元组的数字)转换为一个尺寸(可能是一个连续的标量值或像 XS,S,M,L,XL 这样的分类)。

根据机器学习,我们可以通过以下步骤来实现这一点:

  • 收集具有代表性的数据(大量人群的身高/体重/年龄数据,以及他们的实际服装尺寸)。
  • 训练模型以逼近将输入映射到训练数据输出的函数。
  • 在看不见的数据上测试你的模型:给它新人们的身高/体重/年龄数据,希望它能产生一个准确的服装尺寸!

如果服装尺寸只是输入变量的线性组合,那么训练模型将会很容易。简单的线性回归可以得到下式中 a、b、c 和 d 的正确值。

size = a*height + b*weight + c*age + d

然而,我们不能假设,一般来说,输出是输入变量的线性组合。现实生活中的情况很复杂。规则有例外和特例。像手写识别和图像分类这样的任务显然需要从高维输入数据中学习非常复杂的模式。

如果有一种方法可以逼近任何函数,那不是很好吗?根据通用逼近定理,只有一个隐藏层的神经网络可以做到这一点。

神经网络概述

出于我们的目的,我们将只研究具有一个输入层、一个隐藏层和一个输出层的全连接神经网络。在我们的服装尺寸预测器的情况下,输入层将有三个神经元(身高、体重和年龄),而输出层将只有一个(预测尺寸)。在这两者之间,有一个隐藏层,有一定数量的神经元(下图中有 5 个,但实际上可能有 1024 个)。

网络中的每个连接(线路)都有一些可调整的权重。训练意味着找到良好的权重,使给定输入集的预测大小与真实大小之间的差异很小。

每个神经元都与下一层的每个神经元相连。这些连接中的每一个都有一定的权重。每个神经元的值沿着每个连接传递,在那里乘以权重。然后所有的神经元都向前反馈到输出层,这给了你一个结果。训练该模型包括为所有连接找到好的权重。通用逼近定理的核心主张是,对于足够多的隐藏神经元,存在一些可以逼近任何函数的连接权重集——即使该函数不是像 f(x)=x 那样可以清晰地写下来的东西。即使是一个疯狂、复杂的函数,如输入 100x100 像素图像并输出“狗”或“猫”的函数,也包含在该定理中。

非线性

神经网络能够逼近任何函数的关键在于它们将非线性融入了其架构。每一层都与一个激活函数相关联,该激活函数将非线性变换应用于该层的输出。这意味着每一层不仅仅是与前一层的某种线性组合一起工作。一些常见的非线性激活函数是 ReLU、Tanh 和 Sigmoid,如下图所示。

ReLU 是一个简单的分段线性函数——计算量非常小。另外两个都涉及到求幂运算,因此评估成本更高。

我们现在已经有了所有的部分,可以开始研究一个通用近似定理的例子了。为了演示这一点,我将生成随机的输入和输出集,并让神经网络学习“功能”。当然,在这种情况下,没有任何功能!但我们应该期待的是,无论如何,该模型将符合随机数据,就好像它是由某种确定性函数生成的一样。

对于本文中的演示,我使用 PyTorch 中提供的高级神经网络功能。PyTorch 库只需几行代码就可以轻松构建一个基本的神经网络。它抽象出了许多技术细节,因此您只需处理大图。

示例 1:用曲线拟合一些点

神经网络可能面临的最基本的情况之一是从一个变量到另一个变量学习函数。例如,假设 x 值代表时间,y 坐标代表某条街道的交通量。没有理由认为这是一种线性关系,峰值和谷值在一天中的不同时间点出现。

下面的代码根据正态分布生成随机点,并训练一个将 x 坐标作为输入、y 坐标作为输出的网络。有关每个步骤的更多细节,请参见代码注释。

基于作为训练数据生成的随机点,该模型学会了逼近一个通过所有这些点的函数。注意右边的两点,模型没有学习完美。我们可以通过运行更多的训练步骤或增加隐藏神经元的数量来解决这个问题。

示例 2:二元分类

函数不一定是你在高中代数中看到的那种“一个数进去,另一个数出来”的函数。让我们尝试一个二进制分类任务。数据点有两个特征,可以归入两个标签中的一个。也许这两个特征是纬度和经度坐标,而标签是环境污染物的存在。或者,这些特征可能是学生的数学和阅读测试成绩,标签对应于他们是左撇子还是右撇子。重要的是,模型必须从两个输入到一个输出学习一个函数,要么是 0,要么是 1。

下面的代码与前面的代码非常相似。唯一的新东西是输入层现在有两个神经元,输出层之后是 Sigmoid 激活,它将所有输出压缩到范围(0,1)内。这为我们提供了一个很好的二进制分类,其中从输出到 0 或 1 的距离也为我们提供了模型在该分类中的置信度。

在单位正方形内随机均匀生成的点,随机分配给标签 0(蓝绿色)和标签 1(粉红色)。你能想出一个有趣的真实世界的例子来匹配这个数据吗?

我在单位正方形中随机生成了一些点,并将其随机分配到两个类别中的一个,标记为 0 和 1。如你所见,蓝绿色和粉色之间没有单独的直线或曲线。然而,该模型能够学习输入要素(x 和 y 坐标)和输出标签(类别/颜色)之间的关系。

这是在给定训练数据的情况下,模型如何在单位正方形中着色。与上图中的点进行比较。

过度拟合

在我们对这些结果过于兴奋之前,让我们退一步,问一问这些结果是否真的令人满意。这两个例子都说明了机器学习中一个非常重要的现象:过拟合。当模型很好地学习了训练数据的特性,以至于不能很好地概括看不见的数据时,就会发生过度拟合。

示例 1 中,让我们假设其中一个点是错误数据收集导致的异常值。鉴于可供学习的训练数据数量如此之少,模型变得过度适应这些数据,在实际上只是噪声的地方看到了信号。一方面,实际上令人印象深刻的是,模型能够学习一个考虑到这个异常值的函数。另一方面,当将该模型应用于真实世界的数据时,这可能导致不期望的结果,在该点附近产生错误的预测。

例 2 中,模型学习了一个漂亮的分类值拼布被子。然而,请注意最靠近右下角的蓝绿色点。尽管这是唯一的一点,但它导致模型将整个右下角标记为蓝绿色。仅仅几个错误的数据点就可能严重扭曲模型。当我们尝试将模型应用于测试数据时,它可能比预期的要差得多。

为了避免过度拟合,拥有大量代表模型预期面对的样本的训练数据是很重要的。如果你正在开发一个工具来预测普通人群的衣服尺寸,不要只从你大学时代的朋友那里收集训练数据。此外,还有先进的技术来帮助减少过度拟合(例如重量衰减)。

结论

总之,神经网络是强大的机器学习工具,因为它们能够(在理论上)学习任何功能。然而,这并不保证您可以轻松找到特定问题的最佳权重!在实践中,在合理的时间内训练一个准确的模型取决于许多因素,例如优化器、模型架构、数据质量等等。特别是深度学习涉及到具有多个隐层的神经网络,非常擅长学习某些困难的任务。

我个人喜欢用小例子可视化神经网络如何工作,因为对基础工作方式有一个坚实、直观的理解有助于我掌握更高级或抽象的概念。例如,虽然我知道过度拟合的技术定义,但我自己运行这些示例帮助我在更直观的层面上真正理解了它是什么。我希望你也学到了一些东西。我欢迎您的任何反馈,感谢您的阅读!

参考

[1]用实例学习 PyTorch。https://py torch . org/tutorials/初学者/py torch _ with _ examples . html

[2]普适逼近定理。https://en . Wikipedia . org/wiki/Universal _ approximation _ theory

为什么 NumPy 如此重要

原文:https://towardsdatascience.com/why-numpy-is-so-fundamental-78ae2807300?source=collection_archive---------35-----------------------

我们不能没有它

皮隆·纪尧姆在 Unsplash 上拍摄的照片

笨重的,笨重的。这个图书馆已经成为基础,很难想象一个没有它的世界,或者在它诞生之前。NumPy 从 2005 年就出现了,如果你曾经在 Python 中处理过数据,你一定会以某种方式使用它。

该图书馆最近得到了应有的认可。一组研究人员在著名的科学刊物《自然》上发表了一篇论文,他们中的许多人都积极参与了 NumPy 的维护和开发。在这篇论文中,作者回顾了 NumPy 的历史,它的主要特点,它在当今科学界的重要性,并讨论了它的未来。

是什么让 NumPy 如此优秀?

NumPy 有一个语法,它同时是紧凑的、强大的和富于表现力的。它允许用户管理向量、矩阵和更高维数组中的数据。在这些数据结构中,它允许用户:

  • 访问,
  • 操纵,
  • 计算

你还记得这张照片吗?

研究员凯蒂·布曼在 PBS 上的照片

首次获得黑洞图像的努力之所以成为可能,不仅是因为一组研究人员的辛勤工作和奉献,也是因为 Numpy 的支持。

NumPy 项目有正式的治理结构。团队在早期采用了分布式修订控制和代码审查来改进协作。这反过来意味着清晰的路线图和清晰的过程来讨论大的变化。这些可能看起来不多,但它们有助于激发用户的信心和信任。这是一个保证,每一个变化都是经过深思熟虑的,该库将随着时间的推移得到维护。

该项目由 NumFOCUS 赞助,这是一个促进研究开源思维的非营利组织。近年来,它还获得了多个基金会的资助。这反过来允许项目保持对改进和新特性开发的关注。

在 90 年代中期,科学界出现了两个主要的软件包:Numarray 和 Numeric。

  • Numarray 是一个数组处理包,旨在高效处理大型多维数组。
  • Numeric 对于小数组处理很有效,并且有丰富的 C API。

但随着时间的推移,他们越来越疏远。这是 NumPy 在 2005 年作为两个世界中最好的一个出现的时候。它最初是由学生、教师和研究人员开发的,旨在为 Python 带来一个先进的开源数组库,可以免费使用,并且不受许可证服务器和软件保护的影响。它广受欢迎,拥有大量的追随者和热情的志愿者。剩下的就是历史了。

快进到 15 年后,NumPy 已经变得必不可少。今天,它支持大多数进行科学或数值计算的 Python 库,包括 SciPy、Matplotlib、pandas、scikit-learn 和 scikit-image。论文的作者创造了以下视觉效果,一张图胜过千言万语:

视觉由 Harris,C.R .,Millman,K.J .,van der Walt,S.J. Nature " 数组编程用 NumPy

NumPy 基金会

我们先来看看数据结构的概念。数据结构被称为数组。NumPy 是一个使数组处理变得容易的库。但是什么是数组呢?

在计算机科学中,数组是一种数据结构。该数据结构包含相同数据类型的元素。数据类型可以是数字(整数、浮点、…)、字符串(文本、引号" "之间存储的任何内容)、时间戳(日期)或指向 Python 对象的指针。数组很有用,因为它们有助于组织数据。使用这种结构,可以很容易地对元素进行排序或搜索。

形状

每个数组都有一个形状。该形状由( nm )定义,其中 n 为行数, m 为列数。

*# This array is of shape (2,2)
[1,2
 3,4]# This array is of shape (4,2)
[1,2
 3,4
 5,6
 7,8]*

如果上面的结构看起来像矩阵,你就对了。在数学领域,这些元素中的任何一个都是一个矩阵。在使用 NumPy 时,术语矩阵数组可以互换,可能会导致混淆。

一维数组也称为向量:

*# Horizontal, a row vector
[1,2,3]# Vertical, a column vector
[1,
 2,
 3]*

最后,如果它只包含一个元素,它就被称为标量:**

*# Scalar
[7]*

大步

大步帮助我们解读计算机内存。元素以多维数组的形式线性存储。步幅描述了在内存中向前移动所需的字节数。例如移动到下一行或下一列。让我们以 shape (3,3)的数组为例,其中每个元素占用 8 个字节的内存。

*# Array of shape (3,3)[1,2,3,
 4,5,6
 7,8,9]*
  • 移动到另一列:移动 8 个字节就足够了,这是数组中一个元素占用的内存量。
  • 移动到另一行:我们从第一行第一列开始,从 1 开始。要到达第二行,我们需要在内存中跳转三次。我们跳到 2,然后 3,最后到 4。这表示 24 个字节(每个元素 3 次跳转 8 个字节)。*

为了理解这个概念,数组也可以被视为一维数组。注意:多余的空格是为了阅读的目的,有助于可视化不同行的位置。

*[1,2,3,  4,5,6  7,8,9]# Moving from 5 to 7, would require 2 jumps in memory, so 16 bytes.
[1,2,3,  4,**5**,6  **7**,8,9]*

使用 NumPy 的操作

可以在 NumPy 阵列上执行多种操作:

  • 索引
*1\. Array x, of shape (3,3)x = [1,2,3,
     4,5,6
     7,8,9]2\. Indexing the array to return '5'#IN
x[1,2]#OUT
6*

索引 NumPy 数组从 0 开始。对于 x[1,2],1 代表行,2 代表列。当读取 x[1,2]时,我们需要记住我们从 0 开始计数,并在心里为两个[1,2]增加 1。因此,我们到达第 2 行和第 3 列。这个索引上的元素是 6。

  • 切片
*1\. Using the original x-array from above, we perform a slice#IN
x[:,1:]#OUT
[[2 3]
 [5 6]
 [8 9]]*
  • 复印

注意,切片创建的是视图,而不是副本。正如 NumPy 的官方文档所解释的:

NumPy 切片创建了一个视图,而不是像内置 Python 序列(如字符串、元组和列表)那样的副本。从一个大数组中提取一小部分时必须小心,因为提取的小部分包含对大的原始数组的引用,直到从该数组派生的所有数组都被垃圾回收,该数组的内存才会被释放。在这种情况下,建议使用明确的*copy()*

*1\. Using the original x-array from above, we perform a slice then copy it#IN
y = x[:, 1:].copy()#OUT
[[2 3]
 [5 6]
 [8 9]]*
  • 矢量化
*1\. Using the original x-array, we perform an additionx = [1,2,3,
     4,5,6
     7,8,9]y = [1,1,1,
     1,1,1,
     1,1,1]#IN
z = x + y#OUT
z = [2,3,4,
     5,6,7,
     8,9,10]*

以相同形状的两个阵列为例,结果是直观的。美妙之处在于,它发生在一条线上。

  • 广播

处理不同形状的数组时会出现这种情况。较小的阵列将被“广播”到较大的阵列。结果是一个与两个初始数组形状不同的数组,如下面的乘法示例所示:

*1\. Using two 1D-arrays, we perform a multiplications = [0,
     1,
     2]t = [1,2]#IN
u = s*t#OUT
[0,0
 1,2
 2,4]*
  • 还原
*1\. Array x, of shape (3,3)x = [1,2,3,
     4,5,6
     7,8,9]2\. We decide to reduce to one column:#IN
y = np.sum(x, axis=1)#OUT
array([6, 15, 24])3\. We can also reduce our new y array to one row:#IN
z = np.sum(y, axis=0)#OUT
45*

我们在数组上使用了 np.sum() 来减少它们。参数定义了操作将在哪个轴上发生。0 表示行,1 表示列。

当前的不足之处

由于其内存中的数据模型,NumPy 无法直接利用加速器硬件,如图形处理单元(GPU)、张量处理单元(TPU)和现场可编程门阵列(FPGAs)。

这导致了新的数组实现框架的出现,如 PyTorch 和 Tensorflow。他们可以在 CPU 和 GPU 上进行分布式训练。

NumPy 的未来

有了正式的治理、路线图和对大型变更的彻底讨论,NumPy 的运营方面看起来很光明。该团队已经实现了软件开发的最佳实践,例如分布式修订控制和代码审查,以改进协作。

资金总是棘手的部分。虽然它从不同的基金会获得资金,但它也造成了对资助者的依赖。希望从早期开始就有一个坚实的热心人社区,那时适当的资助还不是一件事。正如论文作者所报告的,发展仍然主要依赖于研究生和研究人员在空闲时间的贡献。

作者讨论了 NumPy 在未来十年将面临的几个挑战:

1。新的设备 将被开发,现有的专用硬件将进化以满足摩尔定律的收益递减。

2。随着薄幕显微镜和大型综合巡天望远镜(LSST)等设备和仪器的采用,科学数据收集的规模将继续扩大。

3。新一代语言 、解释器和编译器,如 Rust、Julia 和 LLVM,将创造新的概念和数据结构,并决定其生存能力。

最后但同样重要的是,NumPy 将需要新一代的志愿者和贡献者来帮助它前进。也许是你?

你能帮什么忙?

有可能成为 NumPy 的贡献者。作为一名编码员并不是一项要求,因为 NumPy 项目已经发展并具有多面性。该团队正在寻求这些方面的帮助:

  • 代码维护和开发
  • 社区协调
  • DevOps
  • 开发教育内容和叙述性文档
  • 筹款
  • 营销
  • 项目管理
  • 翻译内容
  • 网站设计和开发
  • 撰写技术文档

更多信息可以在 这里找到

与 NumPy 更进一步

如果你想深入了解,我发现这些资源很有趣:

  • 广播

* [## 广播—NumPy 1.19 版手册

注请参阅本文中有关广播概念的插图。广播这个术语描述了 numpy 如何对待…

numpy.org](https://numpy.org/doc/stable/user/basics.broadcasting.html)

  • 带代码片段的 NumPy 高级讲座

[## 2.2.高级数字—科学讲义

NumPy 是 Python 科学工具栈的基础。其目的是在许多项目上实现高效的操作…

scipy-lectures.org](https://scipy-lectures.org/advanced/advanced_numpy/index.html)

最后的话

NumPy 在科学和数据科学社区中拥有如此重要的地位,我们应该感谢多年来的辛勤工作。该项目面临着挑战,但也有一个坚实的社区,并利用最佳实践来保持组织和交付。NumPy 万岁!

编码快乐!

感谢阅读!喜欢这个故事吗? 加入媒介 可完整访问我的所有故事。

参考

[1] Harris,C.R .,Millman,K.J .,van der Walt,S.J. 用 NumPy 进行数组编程。性质 585,357–362(2020)。https://doi.org/10.1038/s41586-020-2649-2

[2] NumPy 团队(2020 年 9 月检查),案例研究:第一张黑洞图像https://numpy.org/case-studies/blackhole-image/

[3] NumPy 团队(2020 年 9 月入住),索引,https://numpy.org/doc/stable/reference/arrays.indexing.html*

为什么过期的任务仍然需要很长时间才能完成?

原文:https://towardsdatascience.com/why-overdue-tasks-take-still-a-long-time-to-finish-f291b9493a2a?source=collection_archive---------61-----------------------

这个问题我们问过自己很多次。下面是答案。

让我困惑了一段时间的典型情况如下:
-我们估计一项任务需要 3 天
-鲍勃已经为这项任务工作了 3 天
-在每日的 scrum 上,他说他只需要再处理几件事情,任务就会完成
-第二天任务没有完成

有时这样的任务即使工作了 5 天也没有完成。由于它们是典型的“更多的研究,更少的开发”任务,许多人建议接受这种不确定性,因为这是研究固有的。虽然我同意一点,但我不想这么容易放弃可预测性。一年前,Erik Bernhardsson 分享了一篇关于时间估计的精彩博文,他总结道,开发任务比预期花费更长时间的原因是膨胀因子(实际时间/预期时间)遵循对数正态分布,我们对中位数的估计是准确的,但对平均任务完成时间的估计不是那么准确。我真的很喜欢他的帖子,去年重读了几次,因为它最终帮助我理解了为什么玩 scrum poker 如此困难。我把他的模型作为我在这里工作的基础,看看我们是否需要微调我们对任务完成的估计。

估计比预期的完成时间短

在上面的例子中,Bob 在任务进行了 3 天时,直觉地认为他真的要完成任务了。毕竟,该任务估计需要 3 天时间。然而,从统计学上来说,我们对 3 天的估计是对基础分布中值的估计。分布的中间值并没有说太多关于值的比例,它只是简单明了地说,50%的时间任务会更快地完成,50%的时间会超过 3 天。中位数的一个问题是,它对任务中的不确定性不敏感。然而,当您想要计算一个特性的开发时间时,您确实想要考虑不确定性。因此,最好计算任务完成时间的期望值,因为我们已经有了几乎所有需要的信息。让我们看看这个期望值是什么样的。

对数正态分布的期望值为:

为了计算这个,我们需要知道两个参数μ和σ。幸运的是,我们有一个中位数的无偏估计,因为这是:

由此,我们可以简单地通过取中位数的对数来计算μ。对于σ来说,情况有点棘手,但并非毫无希望。埃里克的想法是利用冒险的直觉。此外,我的建议是使用 scrum poker 估计值的分布作为σ的未校准估计值。可以肯定的是,这是一个未经校准的估计,因为——尽管它应该与某种不确定性相关联——它仍然没有反映任何特定的比例因子。很可能,这也取决于团队和环境,所以最好根据从 sprints 中收集的实际数据来估计。基本上,您需要个人的估计和实际时间来拟合一个简单的模型,并为您的团队获得σ。一个补充:很可能,一个任务的不确定性可以用一个模型更好地估计,这个模型也考虑了谁是任务的接受者(没有冒犯任何人的意思;).有些人更擅长精简,而有些人则更注重细节。

“做”栏的百慕大三角

所以让我们回到每天的争论中,Bob 说他即将完成我们估计需要 3 天工作的任务(只是作为一个备注,Bob 是一个虚构的人)。问题是我们是否应该接受平均完成时间比我们的估计(中值)要长,或者这个故事比我们看到的要复杂。

假设我们做 scrum poker 的时候投票如下:我:2;约翰:2,鲍勃:3,莎拉:3,琳达:5,玛丽:5。基于此,我们有一个 3 天的估计。现在三天过去了,所以问题是我们是否还应该坚持同样的估计?事实上,结果证明约翰和我在评估任务的难度时都错了,所以人们已经可以直观地看到剩余投票的中位数(扣除我们糟糕的投票)可以被认为更高(现在是 4 天!).更一般地说,当我们在任务开始前进行估计时,我们考虑了各种结果,其中包括任务可能在几分钟内完成的情况(也许如果 Bob 意识到相同的特性已经存在于某个地方,但名称不同),以及非常困难的实现过程的荒谬情况(也许如果该特性比我们想象的更复杂)。从统计学上讲,我们通过对整个分布进行积分来计算期望值。现在,对于任何时间点 t > 0,显然我们不能在积分中考虑 0 和 t 之间的时间,而是必须计算如下期望值:

其中 f(x) 是给定我们考虑从 t 点的条件概率 x 。因此,我们不考虑我们已经知道没有实现的情况,而只考虑任务至少需要花费 t 时间才能完成的情况。

因此,尽管在分布的峰值之外,紧接在 t 之后的点比更远的点具有相对更高的概率,但是更远的点要多得多,并且曲率也随着远离峰值而变化,因此期望值实际上在膨胀。让我们通过一个例子来说明这一点。让我们用三个例子来说明,(1)任务处于“todo”阶段,我们还没有开始它,(2)任务已经工作了最初估计的时间(展开因子为 1),以及(3)任务已经工作了两倍于最初估计的时间(展开因子为 2)。

三个例子说明预期完成时间如何依赖于已经花费在任务上的时间。在第一个例子中,我们在开始任务之前。完成时间的期望值是最初估计的 1.65 倍。第二,我们已经在任务上花费了预计的时间。根据零分布的彩色区域,预计完成时间是最初估计的 2.77 倍。第三,任务逾期,完成时间进一步增长。使用σ=1 生成零分布,使用当前因子而不是实际时间进行总体估计。

现在你看到一个矛盾的事情:剩余的时间,由 E _ t-t 操作化,随着我们的进行不是在减少,而是在增加。当然,这并不意味着我们不能完成任务;通过将消耗的时间考虑到等式中,有助于对剩余的工作做出更好的估计。我们可以在多种场景中使用这些知识。首先,它可以帮助团队在何时削减或重组任务上做出更好的决策,并在总体上理解他们什么时候可以完成(即,根据经验,当爆发系数已经是 2 时,拒绝在下一个小时内完成的想法)。

第二,这种知识对于识别不可能及时完成的任务也很重要。我们已经看到了几个任务,乍一看似乎很容易处理,但后来却成了项目的怪物。尽早发现这些问题并重新思考可交付成果、处理期望和/或提出替代解决方案至关重要。

此外,本练习中的假设是,在任务执行期间,不存在“检查的反馈效应”。实际上,团队在日常的 scrum 中的反馈或者涉众在评审中的反馈可能会改变方法(和分布),从而也改变了预期的完成时间。事实上,如果你看一下 SiP 数据集(Erik 也看了)中放大因子的分布,右尾并不像人们从标准对数正态分布中预期的那样重,我的假设是,正是那些反馈、控制和重组机制——当放大因子变大时,它们开始起作用——对此负责。所以,我的主要建议是,团队要密切关注每日的争论,以避免故事完成时间的浪费。

代码可在 GitHub 上获得

备注:

  • 德里克·m·琼斯根据他对 SiP 数据集的分析为写了一篇有趣的论文。他期待着免费分析你的数据,条件是他可以公开匿名形式的数据。这是为贵公司获取这些参数的绝佳机会。
  • 在这篇文章中,我使用了对数正态分布,寻找最佳拟合分布,尽管这是一个活跃的研究领域。
  • 在 SiP 数据集中,估计是由单个开发人员进行的,而不是联合工作,而且大多数估计在 2 天以内。

感谢 Adam Csapo于尔根哈恩德里克 m 琼斯对初稿的评论。

为什么是 jK8v!ge4D 不是一个好的密码

原文:https://towardsdatascience.com/why-password-validation-is-garbage-56e0d766c12e?source=collection_archive---------1-----------------------

讨厌的密码不可避免地会出现在那里。凯利·西克玛的照片。

密码验证有一个基本问题

看看这两个密码:

  1. jK8v!ge4D
  2. 绿色电话

你认为电脑破解哪个密码需要的时间最长?还有你觉得哪个密码最容易记住?这两个问题的答案都是密码 2。然而,人们被鼓励创造看起来像数字 1 的密码。人们被教导写一些人类很难记住的密码,没有真正的原因。

让我们谈谈那个。

互联网标准里有很多稀奇古怪的东西。验证就是其中之一。作为一名前端开发人员,我需要验证用户在所谓的输入字段中输入的内容。这些是您在输入用户名、电子邮件、家庭地址、邮政编码等时使用的字段。前端开发人员有责任确保用户不会在这些字段中输入任何恶意或格式不正确的内容。

例如,请求邮政编码的字段通常只允许空格和数字,如果我们知道用户居住在哪个国家,我们也可以将其限制在一定数量的字符内。电话号码通常可以包括数字、加号(仅在开头)和破折号,如果我们觉得自由,可能还会有一些括号。电子邮件地址很难验证,但是一种常见的做法是它们必须包含一个 at 符号(@),后跟一个句点,即使完全有效的电子邮件地址实际上可能没有这些属性。一些网站试图通过强迫人们将他们的名字保持在一定长度内或强迫人们只使用某些字符来验证名字,尽管这种验证从未真正起作用,因为人们的名字可以是任何东西。

实现验证有几个原因。一个是安全问题。验证可以防止用户在字段中输入可能改变数据库或执行其他恶意操作的可怕代码。另一种是强制某种数据类型。如果一个字段应该只由数字组成,数据库工程师可能已经设置了一个只允许数字的数据库列,这意味着不是数字的符号会导致错误发生。

但是最主要的原因,实际上,是帮助用户避免犯错误。

强制您的密码

出于某种原因,前端开发人员被期望照看用户输入传统上认为是好的密码。它应该至少有八个字符长,包括大写和小写字符,一个数字,如果我们感到非常讨厌,它甚至应该包括一个特殊的字符,如感叹号。

这里有一个被普遍认为是可靠密码的例子:jK8v!ge4D。考虑到您经常被要求输入这样的密码,假设我们认为这是一个好的密码是公平的。

不是的。太蠢了。这是个错误的密码。

首先,怎么会有人记得呢?最终发生的情况是,用户记不住密码,所以他们把密码写在某个地方。比如在便利贴上。然后他们最终被“黑”了。

其次,用户最终会为不同的服务使用相同的密码,因为记录一大堆复杂的密码是令人讨厌的。当你为一个体面的网站创建一个帐户时,一些神奇的代码在幕后将你的密码转换成一个哈希(通常被错误地称为加密)。您的密码在数据库中最终看起来像这样:k 5 ka 2 p 8 bfusmovt 1 tzoyyuarekkkbccnqodkzyijl 9 RAE 8 ymnpgh 2 xzzf 0 ndruhgrclwg 78 xs 1 w5 jiypedfx。即使数据库被黑了,黑客也不能对这些信息做任何事情。如果密码足够普通,算法足够简单,那么有可能找出原始密码,尽管有一个经过适当哈希处理的相当不错的密码,它通常是相当安全的。

问题是,并非所有的服务都对用户的密码进行哈希运算。如果您对许多服务使用相同的密码,您可能最终会使用一个编程很差的服务,该服务实际上将您的密码以纯文本的形式保存在他们的数据库中。如果他们最终被攻破,黑客会突然得到你所有账户的密码,而你使用的是同一个密码。这很可怕,而且发生的频率比人们想象的要高得多。

这就是为什么你必须为不同的网站使用不同的密码。然而,今天的用户在成吨成吨的网站上拥有账户。他们怎么能记住所有的密码呢?高级用户可能会使用密码工具,但你不能指望普通用户这样做。

有更好的方法。

破解需要多长时间?

看看这一串字符:gtypohgt。它是八个随机字符,都是小写的。一台现代计算机只需几分钟就能强行破解它。用几个数字替换一些字符,你会看到一个需要一个小时才能破解的密码。让几个字符大写,密码要几天才能破解(g9YPo3gT)。扔一个特殊的标志在那里,它可能需要长达一个月(g9Y!o3gT)。

g9Y!o3gT 在技术上是一个体面的密码。没有人能猜出它,它不在任何常用密码的短名单上,计算机将需要相当长的时间来破解它。问题是这个密码对一个人来说很难记住——没有真正的原因。

现在来看看这个美景:带礼帽的绿色大象(greenelephantswithtophats)。那是 24 个字符,全部小写。没有数字,没有随机字符,没有诡计。然而,这个密码将需要计算机几千年才能破解。你看,每增加一个字符,电脑破解的时间就会大大增加。greenelephantswithtophats 不在任何常用密码的短名单上,也没有人能猜出它。

这是个不错的密码

做一个会讲故事的密码。需要脸书密码吗?afaceforabookbutapizzaforahorse(一本书的脸,一匹马的披萨)怎么样?想象一下。我们的空间记忆是我们最强的记忆。突然,你有了一个非常强大的密码,这个密码很容易记住,而且是某个网站独有的。密码一定是连非常了解你的人都猜不到的东西。你不经常谈论海龟,是吗?你见过紫色的乌龟吗?没有吗?想象一下。你现在有了。在你的密码里撒谎是没问题的:ioncesawapurpleturtleiswear(我曾经看到一只紫色的乌龟我发誓)。一台现代计算机要花几百万年才能破解,甚至你姐姐也猜不出来。

与 littlerufus 一起走在 grand pasroad 的路上需要数百万年的时间才能使用蛮力。人类也不可能猜得到——即使有人知道你的宠物叫鲁弗斯,他们也永远猜不到这句话会是你的密码。照片由杰米街拍摄。

这些密码很容易想象。不会飞的车不会飞。apple smaybegreatbutpearsarelikeheaven。山羊和鞋子在雨天快乐地训练。没有人会猜到这些。

然而,一些网站也不允许这些密码。他们会抱怨你没有加一个数字或者大写字母或者太长,或者其他一些无意义的非技术原因。

所以你可以欺骗系统一点点。加 A1!到任何上述密码的末尾,并且它们将被任何不调用它们太长时间的系统所接受。现在,您有了一个大写字符、一个数字和一个特殊符号。即使这三个在你所有的密码上都是一样的,密码的其余部分也会弥补它。ioncesawapurpleturtleiswear 和 ioncesawapurpleturtleiswearA1!都是计算机无法破解的,这意味着你必须在最后输入这些字符,这只会带来不便。

开发商的意图是良性的。人们输入错误的密码。网站管理者不希望出现任何丑闻,所以他们试图强迫用户输入像样的密码,不管最终会有多麻烦。

下次需要创建密码时,请记住这一技巧。做一个电脑很难破解而你又容易记住的——而不是反过来。

哦,但即使你没有,也要保证远离任何 123456,password123,qwerty 的变种。那些是实际上是糟糕的密码。

嗯,我估计这就是我们逼你写这种 jK8v 的原因吧!ge4D。

完整的一圈。

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

为什么政治和机器学习不太匹配

原文:https://towardsdatascience.com/why-politics-and-machine-learning-are-not-a-good-match-b13cd18d33?source=collection_archive---------29-----------------------

罗亚·安·米勒在 Unsplash 上的照片

随着部署机器学习(ML)带来的机会越来越多,人们很容易忘记负面影响和风险。ML 策略亏损、错过目标或让客户失望的主要原因之一是“坏数据”。坏数据可能以多种形式出现,如果处理和管理不当,可能会导致错误的见解。政治提供了许多误用数据的例子,并将被用来帮助说明这个概念。

在开始之前,定义一些数据科学中常用的术语是很有用的。一个群体被定义为某个群体的每个成员或每个数据点。如果我们希望了解加拿大人在即将到来的选举中的投票意向,我们会说所有加拿大人都包括在人口中。另一方面,样本是从总体中抽取的少量数据点。想象一个样本,3000 名加拿大公民被联系进行民意调查,并询问他们喜欢的候选人。

训练 ML 模型时的第一个常见问题就是没有足够的数据。当样本量很小时,可能会偶然引入偏差和误差。数据可能包含对结果有很大影响的异常值,因为它们对样本的其余部分相对重要。想象一下浏览 twitter 并试图辨别用户的政治观点。一个持有激进观点的用户会打乱你的评估,让你认为这些观点代表了大部分人。

虽然看起来很直观,小数据集可能是错误的,但大数据集也可能欺骗经理和他们的机器学习算法。想想有多少民意调查是在选举期间产生和公布的。似乎每天都有一个新的民意调查宣称要了解当时的选民情绪,结果却发现他们与真实结果相差甚远。

一个著名的例子来自 1936 年的美国大选。在选举前夕,一本名为《文学文摘》的杂志从读者那里收集了 240 万份答案,并预测挑战者阿尔夫·兰登将会使富兰克林·罗斯福总统下台。罗斯福最终获得了自 1820 年以来最高的普选票数。发生了什么事?

管理者需要考虑数据的来源以及在收集过程中可能引入的偏差。《文学文摘》的读者是上层阶级,他们更有可能反对罗斯福推出的政策。还有,倾向于回答民调的人可能和不回答民调的人有不同的看法。这些差异没有在数据中显示出来,并导致不代表总体的见解。

在训练模型之前,管理人员需要确保他们考虑了数据收集过程,确定了潜在的偏差,并确定数据集是否真正代表了他们希望获得洞察力的总体人群。请记住,数据收集和分析流程是数据科学家的工作。管理者的角色不是取代这种专业知识。相反,经理必须询问有关数据收集过程的关键问题,并帮助识别潜在的偏见来源。通过这种理解,公司可以避免部署包含有害偏见的模型,这些偏见会影响他们希望服务的客户。这种批判性思维还将有助于揭示组织中存在的人类偏见,并可能导致关于如何创建机器学习以造福所有人的建设性对话。

为什么概率是走向数据科学的垫脚石

原文:https://towardsdatascience.com/why-probability-a-stepping-stone-towards-data-science-a81f6714102e?source=collection_archive---------96-----------------------

理解概率及其在现实生活中的应用。

照片由 Alexas_PhotosPixabay 上拍摄

F 或者任何第一次踏入数据科学概率是一个必须知道的概念&一个至关重要的先决条件。数据科学的核心需要统计学的基础知识,从掌握概率开始。它是关于解释你获得的结果,并试图用一个模型来解释现实世界的数据。概率知识有助于你更好地完成这些解释。

概率是对不确定性的度量,因为它量化了事件发生的可能性。它给你一个平均 t 的可能性,基于模式的知情决策。数据科学在很大程度上高度依赖于概率及其应用。

GIF 由 AsmodeeGamesGIPHY 上生成

几个现实生活中应用的概率是:

  • 天气预报:预测海浪
  • 数据分析:检测数据中的模式
  • 金融/股票市场:开发定价模型
  • 运动攻略:在球员身上寻找价值。

让我们来看几个例子,看看概率在游戏中是如何运用的

使用概率的概念,可以决定靠近篮筐是投三分球还是两分球。

照片由丹金Unsplash 上拍摄

有史以来最伟大的例子之一就是体育管理是如何通过将统计学&概率应用于棒球比赛并由团队“奥克兰运动家”创造历史而被彻底改造的。他们使用了一种叫做打破偏见的方法,一种基于概率频率的方法来预测和发现球员的价值以及他们对团队的意义。

现在最重要的问题"为什么是概率?

数学是确定性的逻辑;概率是不确定性的逻辑。概率在各种各样的领域都非常有用,因为它提供了理解和解释变化,从噪声中分离信号,以及模拟复杂现象的工具。

例如,在以下情况下需要概率:

  1. 统计学 :概率是统计学的基础和语言,使许多利用数据了解世界的有力方法成为可能。
  2. 物理学 :爱因斯坦有句名言‘上帝不和宇宙掷骰子’,但目前对量子物理学的理解大量涉及自然界最基本层面的概率。
  3. 生物学 :无论是基因的遗传还是随机突变的建模,遗传学都与概率深深交织在一起。
  4. 计算机科学 :概率在研究随机化算法、机器学习、人工智能中也起着必不可少的作用。
  5. 金融学 :概率在量化金融学中处于中心地位。随着时间的推移对股票价格进行建模并确定金融工具的“公平”价格在很大程度上取决于概率。
  6. :近年来,政治学变得越来越量化和统计化,例如在预测和理解选举结果方面。
  7. 医学 :近年来,随机临床试验的发展改变了医学研究,在这些试验中,患者被随机分配接受治疗或安慰剂。
  8. 人生 :人生是不确定的,概率就是不确定的逻辑。虽然对生活中做出的每个决定进行正式的概率计算是不现实的,但认真思考概率可以帮助我们避免一些常见的谬误,揭示巧合,并做出更好的预测。

有趣的是,概率无时无刻不在我们身边,因此,人们形成了对概率的直觉。潜意识里,概率论帮助我们做出更好的决策提前计算事情。我们应该明智地使用它,把我们的情绪放在一边。

我希望我已经通过这篇文章引起了你对这个美丽主题的兴趣,尽管定义说“不确定性是概率的关键部分”,我希望你重新审视或研究这个有趣主题的事件发生的可能性是 100%,这使它是确定的。非常感谢你朗读这个故事。😃

照片由 Alexas_PhotosPixabay 上拍摄

为什么在 DS/ML 中概率分布是必须的?

原文:https://towardsdatascience.com/why-probability-distribution-is-must-in-ds-ml-4edf2057ecfe?source=collection_archive---------23-----------------------

综合指南

顾名思义概率分布是一个随机变量在所有可能的结果中总概率的分布。
例如,假设一家银行向其客户提供四种不同类型的借记卡(经典卡、银卡、金卡、白金卡)。每张借记卡都有不同参数的特定值,如最大交易金额、奖励积分、年度服务成本、最大购买金额等。

银行根据客户的年龄、教育状况、职业、工资、家庭规模、居住地等特征提供借记卡。

现在假设一个软件专业人员在银行开户,那么应该给他提供什么样的借记卡。在分析了所有客户特征之后,银行给出了一个概率表,如下所示。

借记卡类型的概率分布

上表表示借记卡的概率分布,其中总概率 (1.0)分布在所有四种类型的借记卡上,并带有相应的概率值。

概率分布在-

  • 数据分析
  • 决策

本博客强调在上述两种情况下需要概率分布,概率分布类型和正态性检验的不同类型。

让我们用 kaggle 上可用的 澳洲运动员数据集 来讨论一下。这个样本数据包含了运动员的各种身体属性。它包含了对 13 个不同特征的 202 次观察,如身高、体重、体重指数、性别、红细胞计数、白细胞计数等。

数据来源:https://www . ka ggle . com/vikashrajluhaniwal/Australia n-athletes-data-set

现在,让我们尝试建立一个简单的分类模型,一次使用一个变量对运动员的性别进行分类。为此,概率密度函数非常有助于评估一个连续变量的重要性。

附加说明:本文仅包含不同地块在交互模式下的最终可视化输出。为了访问 python 代码,请访问 kaggle 内核这里(https://www . ka ggle . com/vikashrajluhaniwal/5-must-know-probability-distributions)。

a .分析 rcc

由于两种性别类别的 rcc 的 pdf 相互之间略有重叠,因此不可能根据某种条件对所有的点进行正确分类。通过考虑两个 pdf 的交叉点,可以建立一个简单的模型

if(rcc<=4.68):
 sex = “female”
else:
 sex = “male"

从 pdf 曲线中,我们可以观察到,直到 4.68(交点处的值),属于女性类别的点数比男性多,类似地,在 4.68 之后,男性点数更多。但是该模型导致在 4.68 之后属于女性类别的点的错误分类,并且类似地导致在 4.68 之前属于男性类别的点的错误分类。

同样,我们可以考虑其他变量来建立一个简单的分类模型,就像这样。为了找出最重要的变量,可以使用 pdf 进行单变量分析。

使用 pdf 进行单变量分析

使用 pdf 确定最重要特征的经验法则:-

  • 不同类别目标变量的 pdf 曲线之间的间隔越高,分类越好

  • 重叠的 PDF 曲线导致最差的分类

现在,让我们使用 PDF 对要素子集执行单变量分析。

b .分析 wcc

由于两种性别类别的 wcc 的 pdf 曲线相互重叠,因此很难得出简单分类的条件。

c .分析体重指数

由于两种性别类别的 bmi 的 pdf 曲线相互重叠,因此简单分类模型将具有较高的误分类水平。

d .分析 pcBfat

使用 pcBfat 可以建立一个简单的模型(如下所示),但是这又会导致一些错误的分类。

if(pcBfat<=11.80):
    sex = "male"
else:
    sex = "female"

e .分析 lbm

使用 lbm 可以构建一个简单的模型(如下所示),但它再次将低于 64.10 的男性点误分类为女性,将高于 64.10 的女性点误分类为男性。

if(lbm<=64.10):
    sex = "female"
else:
    sex = "male"

使用 CDF 的单变量分析

以上所有的简单模型都导致了某种分类错误,但是使用 PDF,我们无法计算分类错误的程度。使用 CDF 曲线可以获得误分类误差的大小。

a .分析 rcc

从 CDF 曲线中,我们可以观察到高达 4.68(来自构建模型的条件值)的 12.74%的男性被错误分类为女性,类似地,19%的女性在 4.68 以上被错误分类为男性。

所以总的误分类误差= 12.74 + 19 = 31.74%

b .分析 pcBfat

从 CDF 曲线中,我们可以观察到高达 11.80(来自构建模型的条件值)的 18%的女性被错误分类为男性,类似地,14.70%的男性在 11.80 以上被错误分类为女性。

所以总的误分类误差= 18 + 14.70 = 32.70%

c .分析 lbm

从 CDF 曲线中,我们可以观察到高达 64.10(来自构建模型的条件值)的 12.74%的男性被错误分类为女性,类似地,在 64.10 以上,7%的女性被错误分类为男性。

所以总的误分类误差= 12.74 + 7 = 19.74%

结论

基于 rcc、pcBfat 和 lbm 之间的错误分类误差的最佳预测器是 lbm。

概率分布的类型

基于随机变量的类型(离散或连续),有两种类型的概率分布——离散和连续。在这篇博客中,我们将讨论以下概率分布。

  1. 离散概率分布
  • 离散制服
  • 二项分布

2.连续概率分布

  • 连续均匀
  • 正态分布
  • 对数正态分布

1.正态分布

正态(高斯)分布是一种钟形曲线,它的分布模式在大多数自然现象中观察到,如身高、体重、标志等。它有两个参数—均值()和标准差()。

服从正态分布随机变量的 PDF 为

正态分布的性质

  • 均值=中位数=众数
  • 本质上对称
  • 曲线下的总面积= 1
  • 随着我们远离平均值,PDF 值降低
  • 随着方差的增加,分布范围也增加,曲线变得更宽
  • 68–95–99.7 经验法则
    - 68.2%的数据位于距平均值一个标准差以内
    - 95%的数据位于距平均值两个标准差以内
    - 99.7%的数据位于距平均值三个标准差以内

如果我们事先知道一个变量遵循正态分布,那么我们就可以很容易地说出这个变量的许多属性,而不需要查看实际数据。

通过可视化和偏斜度检查身高、体重栏的正态性

从曲线中我们不难看出,身高和体重几乎呈正态分布,但存在少量的不对称性,这可以通过的偏斜度来衡量。****

偏斜度:是一个统计参数,用来衡量随机变量分布中均值的不对称性。该参数值可以是正数、负数或未定义。负值表示数据左偏,而正值表示数据右偏

这里,身高稍微偏左,而体重稍微偏右。

现在让我们试着回答下面的问题。

  • 身高<=165 cm?
  • What % of athlete has a height between 165 and 185 cm?
  • What % of athlete has height > 185 cm 的运动员占百分之几?

对于一个均值和标准差有限的随机变量,利用 切比雪夫不等式 可以很容易地回答以上这些问题。

假设高度强烈遵循正态分布,那么它的分布应该如下图所示**

如果身高特征完全符合正态分布,那么使用正态分布的 CDF,上述问题将很容易回答**

常态测试

正态性检验用于确定数据是否正态分布,或者样本数据是否来自正态分布总体。有各种各样的图形和数字测试来确定这一点。
1。图形测试

  • 直方图/密度图
  • Q-Q 图

2.数字测试

  • 夏皮罗-维尔克试验
  • 科尔莫戈罗夫-斯米尔诺夫试验

a. QQ 剧情

这是一种比较两个概率分布的图形方法,通过绘制它们的 分位数 来进行比较。对于正态性测试,一个分布是 w.r.t .我们想要测试的给定样本,另一个分布是标准正态性分布。
stats models 和 scipy 包中有内置方法可以绘制 Q-Q 图。我们也可以手动绘制。
**

手动绘制 Q-Q 图的步骤

假设 X 是代表给定样本的随机变量,Y ~ (0,1)是服从标准正态分布的随机变量,其中均值()等于 0,标准差()等于 1。****

  • 计算 x 的所有百分位数,比如 x'₁,x'₂,x'₃………..x'₁₀₀.这些百分位数也称为样本分位数。
  • 计算 y 的所有百分位数,比如 y'₁,y'₂,y'₃………..y'₁₀₀.这些百分位数也称为理论分位数。
  • 将 x 的每个百分位数与 y 的相同百分位数相对照,即 2d 点形成为(x'₁,y'₁)、(x'₂,y'₂)、(x'₃,y'₃)…………)..(x'₁₀₀,y'₁₀₀).
  • 如果所有点都在一条直线上(参考线 y=x),那么 X 遵循正态分布。**

从图中我们可以假设身高特征遵循正态分布吗?****

在这里,大多数点都落在参考线上,所以我们的假设似乎相当安全。

夏皮罗-维尔克检验

这是一个检验样本是否正态分布的数值测试。这是一个基于假设的测试,其中无效替代假设定义如下-****

H₀(Null 假设:样本为正态分布**

H₁(Alternate 假设:样本不是正态分布**

这样,如果为 W 统计量获得的 p 值 小于显著性水平 ( α ),则零假设被拒绝,反之,如果 p 值 大于 α ,则零假设被拒绝失败。****

这里对于 α = 0.05,得到了 p 值(0.2120)>α,所以我们没能拒绝无效的假设,即身高来自于一个正态分布的总体。****

柯尔莫哥洛夫-斯米尔诺夫(K-S)检验

K-S 检验提供了一种方法—

  • 检查样本是否来自参考概率分布(单样本 K–S 检验)**
  • 检查两个样本是否来自同一分布(双样本 K-S 检验)**

这是一种基于假设的检验,其中单样本K–S 检验的无效假设和替代假设定义如下-**

H₀(Null 假设):样本遵循参考分布**

H₁(Alternate 假设):样本不遵循参考分布**

这里对于 α = 0.05,得到 p 值(0.7958) > α ,所以我们未能拒绝无效假设,即身高服从正态分布。****

切比雪夫不等式

通过遵循 68–95–99.7 的正态分布数据集的经验法则,我们知道有多少%的数据位于 k 标准差均值之内,但是如果数据不遵循正态分布呢?或者如何知道对于任意随机分布,数据的多少部分位于 k 标准差内?****

要回答这类关于随机分布数据的分散性的问题 切比雪夫不等式 就是 的运用。

切比雪夫不等式 表示不超过 1/k 的分数的数据落在超过 k 标准差远离平均值的地方**

简单来说

换句话说,对于具有有限均值和有限标准差的样本,至少数据的1-(1/k)*部分落在 k 标准差内。*****

下面我们用几个 k 的值来多探讨一下不等式。

  • 对于 k = 2,1-(1/k)= 0.75,即至少 75%的数据落在任意随机分布的的两个标准差内。****
  • 对于 k = 3,1-(1/k)= 0.89,即至少 89%的数据落在任意随机分布的均值三个标准差内。****

下面我们试着用切比雪夫不等式来回答一下问题。**

  • 身高在 160.68-199.52cm 的运动员占百分之几?
  • 身高在 150.97-209.23cm 的运动员占百分之几?

2.对数正态分布

如果随机变量 X 的自然对数正态分布为正态分布,则称该随机变量为对数正态分布。换句话说,如果 log(X)正态分布*,则 X ~ LogNormal( ,σ )。*****

对数正态分布随机变量的 PDF 为

让我们画出 ferr 特征的分布图。

我们可以观察到 ferr 特征遵循某种对数正态分布,其中右边部分比左边部分长。**

使用 QQ 图比较 ferr 的分布与对数正态分布

**QQ 图可用于通过绘制两个概率分布的分位数来比较它们。

从上面的 QQ 图中,我们可以观察到,大多数点并没有紧密地位于参考线上,因此 ferr 特征并没有严格遵循对数正态分布。**

3.二项分布

二项分布是一种离散概率分布,用于从 n 伯努利轨迹中准确获得 k 个成功。

**伯努利尾迹的特征

  • 每条线索只有两种可能的结果——成功和失败。
  • 步道的总数是固定的。
  • 在所有的试验中,成功和失败的概率保持不变。
  • 这些轨迹是相互独立的。

二项式分布是一种从【n】伯努利轨迹中计算 k 成功概率的方法。**

**二项式随机变量的 PMF 如下所示

其中 p =成功的概率, (1-p) =失败的概率

k =成功次数,而 (n-k) =失败次数

从基础数据集中,我们可以观察到只有 12.37%(25/202)的运动员打篮球,现在如果我们选择一个由 50 名运动员组成的随机样本

  • 恰好两个运动员打篮球的概率是多少?
  • 最多 10 个运动员打篮球的概率是多少?
  • 至少 20 个运动员打篮球的概率是多少?

由于上述所有问题从固定数量的试验(50)中获得不同数量的成功(2,10,20),且 p = 0.1237,因此二项式分布可用于回答这些问题。**

4.均匀分布

4 .离散均匀分布

**离散均匀分布是一种对称分布,具有以下特性。

  • 它有固定数量的结果。
  • 所有的结果都同样可能发生。

如果一个随机变量 X 遵循离散均匀分布并且它有 k 个离散值比如 x₁、x₂、x₃………..x₁₀₀,则 X 的 PMF 为**

从给定的数据集中,我们可以观察到性别特征有两个可能的值男性女性。有几乎相等数量的男(100)女(102) 运动员所以如果我们假设性别特征严格遵循均匀分布那么****

因此,随机的运动员有 50%的机会成为男,同样,随机的运动员有 50%的机会成为女。****

4.b 连续均匀分布

如果在 ab 中定义了连续均匀分布的随机变量 X ,则 X 的 PDF 为

让我们考虑一组数据的 wcc 值在 4.40 和 5.40 之间,另一组在 7.70 和 9.90 之间。该数据子集的分布如下所示,其中概率连续范围的所有三个箱中是相同的。****

结束注释

在到目前为止的旅程中,我们讨论了不同种类的概率分布,特别强调了在 DS/ML 上下文中对概率分布的需求。

为什么概率在数据科学中很重要

原文:https://towardsdatascience.com/why-probability-important-in-data-science-58a1543e5535?source=collection_archive---------45-----------------------

数据科学

了解更多关于概率的知识,以及为什么我们数据科学家需要了解它

Riho Kroll 在 Unsplash 上拍摄的照片

L 运用概率基础知识应用数据科学概念。我们可以说出一些流行的术语,如“决策”、“推荐系统”、“深度学习”。像 TensorflowPytorch 这样著名的深度学习框架都是基于概率的概念来实现的。因此,了解什么是概率以及它是如何工作的,将有助于我们在学习数据科学的道路上走得更远。

依赖和独立

粗略地说,我们说两个事件 E 和 F 是相关的,如果知道一些关于 E 是否发生的信息,就给了我们关于 F 是否发生的信息(反之亦然)。否则他们就是独立的。

例如,如果我们掷一枚硬币两次,知道第一次掷的是正面并不能告诉我们第二次掷的是正面。这些事件是独立的。另一方面,知道第一次翻转是否是正面肯定会给我们关于两次翻转是否都是反面的信息。(如果第一次翻转是正面,那么肯定不是两次翻转都是反面。)这两个事件是相依的。数学上,我们说两个事件 E 和 F 是独立的,如果它们都发生的概率是每个事件发生的概率的乘积:

P (E, F) = P( E) * P( F)

在上面的例子中,“第一次翻转正面”的概率是 1/2,“两次翻转反面”的概率是 1/4,但是“第一次翻转正面和两次翻转反面”的概率是 0。

贝叶斯定理

要了解贝叶斯定理是如何工作的,请尝试回答下面的问题:

Steve is very **shy and withdrawn**, invariably helpful but **with very little interest in people** or in the world of reality. **A meek and tidy soul**, he has a need for order and structure, and **a passion for detail**. How likely Steve to be one of those:
1\. A librarian
2\. A farmer

很多时候,我们(非理性地)会认为史蒂夫“最有可能成为”一名图书管理员。嗯,如果我们了解农夫和图书管理员的比例,我们就不会这么想了。这么说吧,大概是 20/1。

在图书管理员类别中,假设 50%的图书管理员符合问题中的性格特征,而在农民类别中,假设只有 10%。

好吧,假设我们有 10 个图书管理员和 200 个农民。给定描述的农民的概率将是:

5/(5+20) = 1/5 ~ 20%

如果我们猜测候选人可能是图书管理员。我们可能错了。

下面是贝叶斯定理的公式。

P(H|E) = P(H)*P(E|H) / P(E)

其中:

P(H) = Probability of hypothesis is true, before any evidenceP(E|H) = Probability of seeing the evidence if hypothesis is trueP(E) = Probability of seeing the evidenceP(H|E) = Probability of hypothesis is true given some evidence

随机变量

是一个变量,其可能值具有相关的概率分布。一个非常简单的随机变量,如果硬币正面朝上,等于 1;如果硬币反面朝上,等于 0。一个更复杂的方法可能是测量投掷硬币 10 次时观察到的人头数,或者从范围(10)中选择一个数值,其中每个数字的可能性相等。相关分布给出了变量实现其每个
可能值的概率。硬币投掷变量在概率为 0.5 时等于 0,在概率为 0.5 时等于 1。range(10)变量的分布为 0 到 9 之间的每个数字分配概率 0.1。

连续分布

通常,我们会希望对结果的连续体进行分布建模。(出于我们的目的,这些结果将总是实数,尽管在现实生活中并不总是这样。)例如,均匀分布对 0 到 1 之间的所有数字赋予相等的权重。因为在 0 和 1 之间有无限多的数字,这意味着它分配给各个点的权重必然为零。为此,我们用概率密度函数(pdf)来表示连续分布,使得在某个区间看到某个值的概率等于该区间上密度函数的积分。

均匀分布的密度函数可以用 Python 实现,如下所示:

def uniform_pdf(x):
    return 1 if x >= 0 and x < 1 else 0

或者如果我们想为累积分布函数创建一个方法:

def uniform_cdf(x):
    if x < 0:
        return 0
    elif x < 1: return x
    else:
        return 1

结论

概率很有趣,但需要大量的学习。有很多关于概率的东西我在这篇文章中没有涉及,比如正态分布,中心极限定理,马尔可夫链或者泊松过程..所以花点时间去了解更多。

参考

从零开始的数据科学书——乔尔·格鲁什著

为什么处理是学习 Python 的最佳方式

原文:https://towardsdatascience.com/why-processing-is-the-best-way-of-learning-python-222a77f97cca?source=collection_archive---------23-----------------------

yasai 写的 p5.js 草图生成的柏林噪声图像。

学习 Python 有所有的好处,没有缺点

无论你是一个有经验的程序员,或者你从来没有编程过,你可能从来没有听说过 Processing。在创造性计算和视觉艺术领域,处理是一个众所周知的工具,但它在其他领域却显得非常小众。处理是(我引用官网):

一个灵活的软件速写本和一种语言,用于学习如何在视觉艺术的背景下编码。

在上面的引用中,Processing 被同时称为 sketchbook 和语言,因为最初(早在 2001 年)Processing 只与 Java 编程语言的定制/简化版本一起提供,因此它既是语言又是编码环境。从那以后,很多事情都变了。Processing 已经发展成为一个大型的社区支持项目,拥有大量的附加组件、视频教程和外部库。其中,在 2010 年和 2014 年之间,开发了 Python 模式。从那时起,就有可能使用 Python 编程语言在处理 IDE 中实际编程,我在这里告诉你为什么这是学习和/或教授 Python 的一个极好的方法。

忘记 Python 安装的噩梦吧

加工的本质使一切都变得容易。从安装处理应用程序本身,到开始使用第一批提供的视频教程,一直到导航复杂的示例和安装扩展。这就是处理-Python 协作的亮点。

Python 是接近编程世界的伟大语言,因为它的易用性和语法非常接近书面英语。然而,如果有一件事是绝对而不是适合初学者的,那就是安装过程。Python 是非常不明确的,它有几个版本(其中一些已被弃用)。此外,安装可以通过许多不同的渠道进行:Rodeo、Anaconda、brew、python.org…仅举几例!处理消除了学习者和 Python 之间的任何障碍,将安装程序置于任何其他处理模式之中!选择 Python 模式进行处理,单击 install,就可以开始了。

有人可能会说,使用类似于 Anaconda Navigator 的东西会让初学者以同样的易用性获得类似的结果。然而,Anaconda Navigator 仍然保留了 Anaconda 的大部分强大功能,因此界面更加复杂。此外,Navigator 只是一个包管理器,用户必须从那里选择并安装一个代码编辑器,增加不必要的步骤,这是 Python 初学者不应该担心的。

图片由 Processing 提供的一键安装的作者提供。

视觉反馈的力量

如引言中所述,“处理”是视觉艺术领域中一个非常著名的软件。这是因为处理的优势在于能够在代码和视觉效果之间建立紧密的联系,这使得使用代码生成视觉效果变得极其简单。Processing 并不是唯一允许这样做的软件( OpenFrameworks 是游戏中的另一个大玩家),但它绝对是最容易和最平易近人的环境之一。

当在处理中观察 Python 时,好处更加明显。Python 语言的脚本特性意味着第一次接触它的用户通常必须看到他们的第一个脚本的结果以文本的形式出现在 Python 控制台中(或者 ASCII arts,如果他们正在学习的教程很有趣的话)。处理彻底改变了这种范式,并提供了从第一行代码生成视觉效果的能力。能够以可视化的方式看到几行代码的结果是一个非常强大的工具,可以使学习之旅更加有趣和互动。

随着学习者变得更擅长编程,处理环境也随之增长,为视觉艺术世界提供了越来越多的深度:3D 环境、网格、纹理等等。最终,即使有一天处理环境可能会成为专业程序员的限制,但它为他们提供了轻松切换到更强大环境的工具。这甚至没有提到处理框架已经以许多不同的方式衰落了:从让你将草图移植到基于网络的环境的 p5.js,到让你在移动和基于 Linux 的平台上运行处理草图的 Android 和 Pi 的处理。

Golan Levin 的处理示例短片,标题为 Yellowtail,由 Jonathan Feinberg 翻译成 Python。

证明文件

最后,也是最重要的,文档:处理项目充满了优秀的文档!从参考手册开始,不仅包含每个内置功能的解释,还包含可以复制粘贴到草图中的现成代码,一直到由独一无二的丹尼尔·希夫曼制作的数千个视频教程。无论你被一个问题困住,或者你只是喜欢跟随一个指导你通过复杂的加工草图的错综复杂的教程,你一定会找到你需要的。

作者图片取自丹尼尔·希夫曼的编码训练提要,展示了数千个教程的多样性。

结论

总之,处理使 Python 入门变得更有趣和更具交互性。它为用户提供了一个测试和学习所有 Python 基础知识的良好环境,并支持程序员成长为一个强大的工具,直到学习者的旅程结束。
虽然我强烈认为 Python 的优势还在于虚拟环境的管理和外部模块的安装,但我认为这两个主题可以放在一边,以利于程序员旅程开始时更好的学习体验。

为什么心理学家可以成为伟大的数据科学家

原文:https://towardsdatascience.com/why-psychologists-can-be-great-data-scientists-970552b5223?source=collection_archive---------8-----------------------

数据驱动职业心理技能需求象限。图片由作者提供。

心理学和数据科学的交叉点

在我之前的一篇文章中,我谈到了从心理学(或任何社会科学)到数据科学的过渡。重点主要是成为一名成熟的数据科学家所需的技能。

[## 从心理学家转变为数据科学家的 5 个技巧

以及如何做到这两点。

towardsdatascience.com](/5-tips-for-making-the-transition-from-psychologist-to-data-scientist-8198fbbbb19e)

然而,如果你已经完成了转变,那该怎么办呢?作为一名数据驱动的专业人士,你能做些什么来利用你现有的心理学知识?丢掉多年的学习,忽视你所学的一切,这将是一种耻辱!

我真的相信心理学家有特定的技能,可以用来成为伟大的数据科学家!当然,作为一名心理学家,我有偏见,但是让我们暂时忽略这一点😉*

作为一名数据驱动型专业人员,本文将重点介绍在您的工作中可以使用哪些心理技能,以及如何使用。

这个不会像教程一样不言自明。这里的目的是激励你寻找创造性的方法在你的工作中既是心理学家又是数据科学家。我希望通过给你提供一些清晰的例子来实现这一点,这些例子可能会触发你以新的方式应用旧的心理学方法。

*:本文中的技巧并不专属于心理学家或有社会背景的人。焦点就在于此,因为心理学家可能比软件工程师更善于沟通。

1.心理技能

马库斯·温克勒的照片

让我们从头开始,为什么我会认为心理学家可以成为伟大的数据科学家?当然,这不是因为他们是伟大的程序员,也不是因为他们有丰富的 git 经验,对吗?不要!这主要是因为他们通常已经获得了两种广泛的技能:

  • 通讯技能💬
  • 研究技能🔍

现在你可能认为这看起来没什么,通过观察这两项技能,我倾向于同意你的观点。这似乎并不令人印象深刻…然而,掌握这些技能需要付出巨大的努力,使用它们的影响可能比你想象的要大。

这两种技能都是总括性的概念,因此包含了几个子技能,每个子技能都以自己的方式对心理学和数据科学领域做出了贡献。

下面,我将简要介绍其中的一些技能,让您感受一下为什么沟通和研究技能对数据科学来说比您可能意识到的更重要。

ELI5💬

Explain itlikeIam5(Eli 5)常用于对复杂的话题要求简单的解释。如果你能向一个 5 岁的孩子解释,你就真正理解了这个主题,并表明你能在所有知识水平上交流这些概念。

作为一名心理学家,你已经接受过这样的训练。你的病人理解复杂的方法是至关重要的,比如认知行为疗法,因为如果他们不理解,就很难实施治疗。

利益相关者管理💬

通过会议、电话会议、午餐等认识到公司是社会组织,这一点很重要。能够在高级水平上交流是非常有利的。

尤其是当涉及到利益相关者管理时,真正理解他们的问题,以及他们更喜欢的解决方案,需要你作为一个专业人士对他们有一种感觉。这个人为什么要求这个功能?他们想达到什么目的?

道德决策💬

不管你的专业是什么,心理学家都应该了解伦理学。在数据科学的背景下,这涉及到患者的保密性、隐私、决策等。理解并在复杂的伦理环境中工作有助于防止偏差,如选择偏差、确认偏差或反应偏差。

[## 如何检测人工智能中的偏差

检测数据中常见的(认知)偏差

towardsdatascience.com](/how-to-detect-bias-in-ai-872d04ce4efd)

实验知识🔍

现在,那些有社会背景的人学到的不仅仅是沟通技巧。在大多数项目中,很大一部分课程是为了理解涉及人类的实验设置。

实验设计的严谨性、对结果细致入微的解释、求知欲,这些都是优秀心理学家必备的技能。

统计数字🔍

有趣的是,大多数心理学项目都比你想象的更注重统计。在我的项目中,四分之一的课程是某种形式的统计学。这包括从统计测试和验证问卷,到 A/B 测试和

那些学习社会科学的人往往比大多数其他专业的人对实验设计和统计学有更深入的了解。鉴于大量的机器学习源于统计学,这是一项非常棒的技能。

主题🔍

当分析人类行为时,比如为 A/B 测试设计实验或解释个人的地理数据,那么很好地掌握驱动人类的事物肯定会有帮助。

心理学家在分析与人类行为相关的数据时会有很大的帮助!

2.数据专业人员的类型

马库斯·温克勒的照片

尽管上述技能很重要,但它们可能更重要或更不重要,这取决于你实际从事的工作。到目前为止,我一直在寻找数据科学家的视角。在实践中,数据科学家之间的工作可能会有很大不同,因为数据领域内的职业仍然没有明确定义。

数据职业

为了理解心理学如何有助于数据驱动的专业人士,重要的是你要定义你想成为什么样的专业人士!

根据我的经验,数据驱动型专业人士大致有 7 种*:

  • 经理(管理一个由数据驱动的专业团队)
  • 商业智能顾问
  • 数据分析师
  • 数据科学家
  • 机器学习工程师
  • 数据工程师
  • 人工智能研究员

这些角色对技术和心理技能的需求有很大不同。例如,经理通常不需要像人工智能研究人员那样多的技术知识,但肯定应该更倾向于心理学,以便正确地管理团队。

最适合你的数据职业可以浓缩成一个简单的问题:

在你的工作中,你希望心理技能和技术技能之间达到什么样的平衡?

回答这个问题可能会帮助你了解你想成为什么样的专业人士。如果这个问题的答案是你不是在找技术工作,那么大多数心理学专业都会适合你(例如,临床心理学、社会心理学家、I/O 心理学家等。).

然而,如果有一定数量的心理和技术技能是你想要的,这个问题就变得更难了。答案……一个象限

3.数据中的心理学象限

你的心理技能实际上有多大帮助很大程度上取决于你所做的工作类型。如果您是一名数据工程师,并且主要专注于创建数据管道,那么拥有这些技能就不那么有帮助和必要了。

下面,我创建了一个象限,显示了几种职业中对心理技能的需求与对技术技能的需求。尽管这是对现实的简化(谁真的想看一个四维图😅),希望这能帮助你决定最适合你的职业。

数据驱动职业心理技能需求象限。图片由作者提供。

如上所述,心理技能通常对应于沟通研究技能。在上面的象限中,更加强调沟通技能,以便将其与技术技能分开。

技术技能包括数据领域内的各种技能,如编程、机器学习、MLOps、数据架构等。

有趣的是,在填写象限时,我开始注意到职业相对位置的趋势。技术和心理技能之间似乎存在一条曲线:

对技术技能的更高需求往往导致对心理技能的更低需求,反之亦然。

低技术高心理

我把通常需要更多心理技能而不是技术技能的职业放在了右下象限:商业

那些在商业象限的人更有可能担任咨询/建议角色或者管理角色。随着对沟通和领导技能的更大需求,BI 顾问和经理填补了一个伟大的适合!

BI 顾问可能非常专业,尤其是当他们还负责底层数据模型的时候。然而,通常情况下,它更多的是关于理解业务,而不是创建复杂的算法分析。这个象限中的许多其他职业也是如此。

高技术低心理

我把通常需要更多技术技能而不是心理技能的职业放在了左上方的象限中:工程师

工程师象限中的人大多具有技术背景,如数据工程师或机器学习工程师。虽然拥有一些心理技能是有帮助的,但这不是工作的必要条件,因为你与利益相关者的互动不如数据科学家。

高技术和高心理

我把通常需要高心理和技术技能的职业放在了右上象限:独角兽 (ish)。

你不会经常看到人们同时拥有高技术和心理技能,因为这些技能很难独立获得,更不用说一起获得了。您可以在象限的人口中看到这一点:右上角没有角色。

在我看来,即使是数据科学家这种典型的独角兽角色,也不需要具备与人工智能研究员相同的技术技能。他们确实需要广泛的技术和心理技能,只是不是专家的水平。

低技术低心理

我把通常不需要多少心理和技术技能的职业放在右上方的象限中:无数据

每个象限都需要一个名称,所以我将所有与数据无关的角色都称为无数据。我怀疑有任何数据角色不需要技术和心理技能。

:由于数据驱动的职业通常定义不清,上述职位应被视为一种指示,而非事实。此外,这是我的观点,也是我对自己经历的偏见。

4.如何在数据科学中运用心理学

马库斯·温克勒的照片

最后,百万美元问题:

作为一名数据科学家,我如何在工作中真正运用心理学?

虽然这可以通过多种方式实现,但我想从三个方面入手:

  • 利益相关者沟通
  • 展示结果
  • 分析人类行为

利益相关者

由于利益相关者对他们的项目有看似模糊的需求,与他们的沟通通常是非常困难的。这通常不是涉众的错,而是要求那些需求的人的错!当你写下这些需求时,你需要理解涉众的意图。

它从超越需求开始。对于每个需求,询问涉众他/她想用这个需求完成什么。为什么要预测下一年的销售额?拥有这些知识,你想达到什么目的?

意识到双方都缺乏理解。涉众对你的工作知之甚少,反之亦然。跨过那座桥需要你开始认同利益相关者。

注意:在分析我和他人之间的沟通错误时,帮助我的是假设我是错误的。通过假设这是我自己的错误,我可以开始认识到我如何以不同的方式处理这种情况。如果你责怪对方沟通不畅,下次就没什么机会了。

沟通

优秀的沟通技巧可能需要几年的时间来培养,但是关注几个方面会对你的技巧有很大的帮助。让我们关注一种单一的沟通形式:呈现

展示您最新的分析结果可能比您预期的更加困难。您需要传达您的结果、技术假设、对业务的影响、验证指标等。所有这些都是有趣的过程。

这里有一些让你开始的提示:

  • 了解你的受众
  • KeepItSimple, S tupid (KISS)
  • 解释一下我喜欢我 T21
  • 像讲故事一样对待它
  • 专注于一条信息

保持简单,专注于一条信息,并用大多数人都能理解的方式解释,这是良好沟通的关键。

即使对于技术观众来说,从简单开始也是最好的。从一开始就钻研技术含量很高的内容需要极大的注意力。对于技术人员来说,你需要对你所展示的东西和你所应用的方法产生直觉。

分析人类行为

解释您的分析结果通常需要一定程度的领域知识。作为一名心理学家,人类行为是你的专业知识。然而,没有多少组织专门致力于分析人类行为。

幸运的是,大多数组织都有某种形式的关于人类行为的数据。例如,这可能是客户评论、票据,甚至是人力资源数据。现在所有的组织都有一个网站,你至少可以分析人们如何使用一个组织的网站,并开发一个行为流程。

在任何组织中,你都不需要寻找太多的行为数据。识别这些用例或问题可能是有益的,因为它允许你炫耀你的心理学领域的知识!

结束所有注释的注释:尽管这篇文章比我预期的要长,但它仍然缺少相当多的信息和脚注。为了压缩信息,我在这里或那里做了一些假设,但有时感觉未压缩的信息是必不可少的。我意识到我有时过于笼统,所以如果我遗漏了重要信息或者过于笼统,请纠正我。找到平衡被证明是相当困难的😅。

感谢您的阅读!

如果你像我一样,对人工智能、数据科学或心理学充满热情,请随时在 LinkedIn 上添加我,或者在 Twitter 上关注我。

有关心理学和数据科学交叉的更多信息,请点击下面的帖子之一:

[## 从心理学家转变为数据科学家的 5 个技巧

以及如何做到这两点。

towardsdatascience.com](/5-tips-for-making-the-transition-from-psychologist-to-data-scientist-8198fbbbb19e) [## 如何检测人工智能中的偏差

检测数据中常见的(认知)偏差

towardsdatascience.com](/how-to-detect-bias-in-ai-872d04ce4efd)

为什么纯粹的情感分析在当今的行业中不起作用

原文:https://towardsdatascience.com/why-pure-sentiment-analysis-does-not-work-in-todays-industries-df6eefe3fec4?source=collection_archive---------35-----------------------

入门

对下一级情感分析的完整介绍。

作者图片

在过去的几十年里,感知分析已经被多种类型的行业广泛使用。它不仅可以产生有用的见解,还可以通过利用机器学习的能力而不是手动收集和分析一堆数据中的信息来节省时间和精力。它只是对输入(通常以句子或文档的形式)是否包含正面或负面意见进行分类。下面一个简单的例子清楚地表明,情绪是负面的。

看起来很简单,对吧?当数据变得更长、更复杂时,问题就出现了。假设我们有一个超过 500 个单词的文档,或者……大约 50 个单词,就像下面的例子一样。它可能谈论不止一个单一的主题。如果文件的最终输出将只是正面或负面,它是否真的代表了整个文件的思想?如果这份文件包含积极和消极的情绪呢?情感分析的输出会是什么?

在这个大数据扮演非常重要角色的时代,大量非结构化信息很可能会产生各种各样的场景。大多数公司肯定希望从中获取尽可能详细的知识。不幸的是,情感分析不能满足他们的要求。

然后,怎么做?

今天,我们至少知道情感分析的 4 个子领域:基于方面的情感分析、有针对性的情感分析、有针对性的基于方面的情感分析和基于概念的情感分析。我们将看看他们中的每一个是如何做的比常规的情绪分析更多。

基于方面的情感分析(ABSA)

这是最常见的情感分析类型。除了情绪,还有一个叫做相位的东西应该被考虑。这里的方面是指预定义类别的列表,并且非常依赖于数据的领域。假设我们拥有的数据是关于笔记本审查的,我们将很可能定义离portabilityconnectivityoperation_performance以及任何其他与笔记本相关的东西不远的方面类别。许多公司利用 ABSA 来更好地了解他们自己的重要方面。与情绪分析不同,ABSA 可以给他们提供更详细、更结构化的信息。因此,他们只需要专注于改善那些容易产生负面情绪的方面。

SemEval 与 ABSA 相关的数据集一起举办了一场比赛(Pontiki 等人,2016 年)。从 SemEval 笔记本电脑数据集,下面是一个例子,以帮助您更好地理解。根据我们前面提到的一系列方面,示例中包含的方面是可移植性和连接性,它们的极性都是积极的。请注意,带下划线的单词并不是系统的真正输出。它们可以作为相应方面(可移植性和连接性)的线索和证据。

另一方面,还有另一种类型的 ABSA。实际上,输出和实现是完全不同的,但是人们经常使用同一个术语,这导致了混淆,尤其是对于那些刚刚了解这个领域的人。与前面的 ABSA 不同,这里的方面是直接从文档中提取的。它可以是任何东西,只要在文件中有说明,并且代表正在讨论的东西。通常以单词或短语的形式出现。因此,可以肯定地说,这种类型的情感分析比前一种更独立于领域。以下是取自 SemEval 数据集的一些示例。这里可以提取的方面是服务和人民,他们的极性分别是消极的和积极的。

目标情感分析

这个子领域通常被称为基于实体的情感分析,因为它分析出现在文档或句子中的实体。潜在的假设是在文档或句子中应该至少有一个实体被提及。实体通常以产品、人员、位置、组织等形式出现。下面是 Vo 和张(2015)的一个例子,其中的实体是窗户和,它们的极性分别为正和负。

基于方面的目标情感分析(TABSA)

顾名思义,这个任务基本上是有针对性的情绪分析和 ABSA 的结合。有三个组件需要分析:实体、方面和情感。摘自 Sentihood 数据集(Saeidi 等人,2016 年),下面是句子和输出可能看起来像什么的示例。

提到了两个实体:Boqueria 和 Gremio。博克里亚的设计是积极的,而服务是消极的。而且 Gremio 的服务(工作人员)和食物都是正面的。有趣的是,这两个实体有相同的方面(服务),但有不同的情感。换句话说,这项任务提供了对多个实体进行比较的优势。这对于公司来说非常有用,尤其是当他们想要将自己的产品与竞争对手的产品进行比较,并挖掘更多关于他们的信息时。

基于概念的情感分析

基于概念的情感分析方法侧重于通过使用网络本体或语义网络对文本进行语义分析,这允许聚合与自然语言观点相关联的概念和情感信息(Cambria,2013)。基本上和 aspect 差不多但是更一般。这就是为什么它能比其他产品产生更详细的输出。

让我们再来看看这篇文章开头的 50 个单词的例子。通过使用基于概念的情感分析,我们可以从这篇综述中获得几个概念(或主题),即使它们并不都有情感。检查我的余额进行转账是有效概念的例子,但是没有情感。而另外三个是有效的概念,有感情。阅读和分析结果似乎有点困难。这就是为什么在实践中,结果通常以关系图、词云等形式可视化。

结论

总之,情感分析有助于从任何领域,甚至是一般领域,给出更广泛的想法。但是,如果我们想要更细粒度的信息,根据我们想要关注的部分,有许多选项可用。

参考

[1]庞蒂克等, SemEval-2016 任务 5:基于方面的情感分析 (2016),第十届语义评价国际研讨会论文集

[2] DT。Vo 和 Y. Zhang,【2015】,第 24 届国际人工智能联合会议论文集

[3] Saeidi 等人,感知:基于目标特征的城市街区情感分析数据集 (2016),2016 年科林会议录

[4] E. Cambria,概念级情感分析介绍 (2013),墨西哥人工智能国际会议

[5] A. Lowe,概念层次情感分析:理解文本反馈中情感的下一层次

如果你喜欢阅读这篇文章,并想在这里听到更多我和其他作者的意见,请加入 Medium订阅我的时事通讯。或者直接点击下面的链接。谢谢大家!

[## 通过我的推荐链接加入媒体

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

medium.com](https://medium.com/@arfinda/membership) [## 每当 Arfinda Ilmania 发布时,都会收到一封电子邮件。

每当 Arfinda Ilmania 发布时,都会收到一封电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…

medium.com](https://medium.com/subscribe/@arfinda)

为什么 Python 比 R 更适合数据科学职业

原文:https://towardsdatascience.com/why-python-is-better-than-r-for-data-science-careers-44ec7a149a18?source=collection_archive---------10-----------------------

新数据科学家将从学习 Python 中获益更多的四个原因

新数据科学家都面临着一个极其重要的问题: 我该学 Python 还是 R?

这个问题非常重要,因为学习你的第一门编程语言需要数百个小时。试图两者都学是不切实际的,尤其是当你刚刚开始职业生涯的时候。

那么你应该选哪个呢?

根据我的经验,我相信如果你选择 Python,你的职业生涯会受益更多。

在我看来,Python 是从事数据科学职业的更好选择,尤其是如果你刚刚起步的话

我给你四个我认为 Python 是你职业生涯更好选择的理由,但是我也要明确一点 我不认为 R 是一个糟糕的选择

选择 R 不会对你的工作机会产生负面影响,根据你的团队,你甚至可能需要学习它。事实上,脸书将 R 用于其内部调查工具的分析组件,并且我们所有的数据科学基础设施都支持这种语言。

也就是说,我相信如果你首先学习 Python,作为一名实践数据科学家,你将更快地变得富有成效,并且你将能够在统计建模之外的重要领域更好地为你的团队做出贡献。

因此,学习 Python 将使你能够为你的公司带来更大的影响,你的职业生涯也将因此受益更多。

原因 1:无论如何,你可能都必须学习 Python

大多数公司要求他们的数据科学家做的不仅仅是预测建模(即机器学习)。至少,您可能需要维护为模型提供数据的数据管道,而这些数据管道很可能是用 Python 构建的。

如今管道的行业标准是基于 Python 的气流,在脸书,我们使用基本相同的内部 Python 工具。

事实上,我估计我们脸书的数据科学家每周 100%使用 Python,而大约 10%的人积极使用 r。

因此,选择 Python 可能更有效:虽然一旦找到工作,你可能会避免使用 R,但你不太可能避免使用 Python。

原因 2: Python 更容易学习

获得就业机会所需的时间非常重要,尤其是如果你在大学以外自学的话。

Python 以简单易学而闻名。学习了 Python 和 R(尽管对 Python 的了解更深),我认为 Python 的名声是当之无愧的。

当您开始使用统计建模之外的语言特性时,Python 易于学习的好处尤其明显。这些特性包括打包项目以供分发、开发命令行界面、用 SQLAlchemy 之类的 ORM 建模数据结构等等。

使用 Python 将使您更容易精通这些特性,您的职业生涯也将因此受益。

原因 3: Python 有一个更大的社区

Python 是世界上最流行的编程语言之一,在 stack overflow、kaggle 甚至 medium 等网站上都有一个庞大的社区。

因此,当你不可避免地遇到你自己无法解决的问题时,你更有可能找到在你之前遇到过的人,寻求帮助,并得到解决方案。

这意味着您将花费更少的时间来调试系统的兼容性问题,而将更多的时间用于交付对公司产生影响的代码。

原因 4:使用 Python 部署模型更容易

最后,在您的职业生涯中,您可能会希望将您的模型实时提供给最终用户。为了解决这个问题,您需要构建一个基于 REST 的 web 应用程序,这对于 Python 来说要容易得多。

事实上,Python 拥有一些世界上最流行的 web app 框架,即 Django 和 Flask。您公司的内部部署工具更有可能支持那些框架,而相对来说不太可能支持 r。

这些框架的流行也意味着它们受到平台即服务提供商的良好支持,如 Heroku、Amazon Lightsail 和许多其他提供商。您将能够在线发布您的个人项目,而这只是在 r。

最重要的是,如果你足够幸运,你的公司在自己的产品中使用 Python 框架,那么学习 Python 意味着你会很危险,足以建立自己的应用内跟踪。能够自主地为您的模型捕获更多的特性将会对您能够提供的影响产生巨大的影响。

当然,所有的决定都有取舍,选择学习 Python 而不是 R 也不例外。尽管我相信 Python 是数据科学职业的更好选择,但考虑它带来的负面影响也是值得的。

对我来说,最大的缺点是 Python 没有与 Rstudio 等效的工具。与 Python 最有可比性的工具是 Jupyter notebook,但我个人认为 Rstudio 更好,因为它具有数据探索功能。

编辑:自从写了这个故事, Marcelo Garcia 指出免费使用的 Spyder 包是 Rstudio 的 Python 替代品。我还没有机会尝试 Spyder,但它看起来很棒!

R 在学术界也非常流行,所以 R 中的包文档更有可能直接引用学术研究。这些文档对于从事“前沿”研究的数据科学家来说非常有用。

但是我不认为缺少 Rstudio 等价物就足以否定 Python 的相对优势。数据科学学术界的职业也更加罕见,这使得 R 的研究相关优势对大多数数据科学家来说不太相关。

所以尽管 R 有优势,我相信如果你选择学习 Python,你的职业生涯会受益更多。

最后,我觉得再次值得一提的是 我不觉得学 R 是个坏选择, 只是那个 Python 更有可能是你职业生涯更好的选择。根据您的具体情况,学习 R 可能对您更有意义。

不管你选择哪种语言,你都不应该觉得你不能改变你的想法。所有编程语言的相似之处比不同之处多得多:学习你的第二语言比学习你的第一语言要容易得多。

事实上,我自己已经选择先学 R 了!所以我很难强烈反对 R,即使我现在推荐 Python 作为你职业生涯的更好选择。

感谢阅读!如果你觉得这些内容有用,我写的是关于数据科学和编程的文章,所以请关注我,获取更多类似的文章。

为什么 Python 不是未来的编程语言

原文:https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66?source=collection_archive---------0-----------------------

意见

尽管未来几年对它的需求量会很大

Python 为我们提供了很好的服务——但是它会长久吗?戴维·克洛德在 Unsplash 上的照片

It It 花了编程社区几十年的时间来欣赏 Python。但自 2010 年初以来,它一直在蓬勃发展,并最终在受欢迎程度上超过了 C、C#、Java 和 JavaScript。

但是这种趋势会持续到什么时候呢?Python 最终什么时候会被其他语言取代,为什么?

给 Python 设定一个确切的到期日会有太多的猜测,它可能会像科幻小说一样过时。相反,我将评估目前推动 Python 流行的优点,以及将来会破坏它的弱点。

是什么让 Python 现在流行起来

Python 的成功反映在堆栈溢出趋势中,该趋势测量平台上帖子中的标签数。鉴于 StackOverflow 的规模,这是一个很好的语言流行指标。

StackOverflow 上各种编程语言的标签快照。

虽然 R 在过去几年中一直处于停滞状态,许多其他语言也在稳步下降,但 Python 的增长似乎是不可阻挡的。几乎 14%的 StackOverflow 问题被标记为“python ”,而且这一趋势还在上升。这有几个原因。

它是旧的

Python 在九十年代就已经出现了。这不仅意味着它有足够的时间成长。它还获得了一个庞大的支持性社区。

因此,如果你在用 Python 编码时遇到了任何问题,你很有可能通过谷歌搜索就能解决。仅仅是因为有人已经遇到了你的问题,并写了一些有帮助的东西。

这是初学者友好的

这不仅仅是因为它已经存在了几十年,给了程序员时间来制作精彩的教程。不仅如此,Python 的语法非常易读。

首先,不需要指定数据类型。你只需要声明一个变量。Python 将从上下文中理解它是整数、浮点值、布尔值还是其他什么。这对初学者来说是一个巨大的优势。如果你曾经不得不用 C++编程,你就会知道你的程序不能编译是多么令人沮丧,因为你把一个浮点数换成了一个整数。

如果你曾经不得不同时阅读 Python 和 C++代码,你就会知道 Python 是多么容易理解。尽管 C++在设计时就考虑到了英语,但与 Python 代码相比,它的可读性相当差。

[## 学习 Python:从零到英雄

快速全面的 Python 入门指南。

medium.com](https://medium.com/the-renaissance-developer/learning-python-from-zero-to-hero-8ceed48486d5)

它是多功能的

自从 Python 出现这么久以来,开发人员已经为每一种用途制作了一个包。如今,你可以找到几乎所有东西的包装。

想要处理数字、向量和矩阵吗?NumPy 是你的男人。
想为科技和工程做计算?使用 SciPy
想在数据处理和分析领域做大?给熊猫一个机会。
想从人工智能入手?为什么不用 Scikit-Learn

无论您试图管理哪种计算任务,都有可能有一个 Python 包来完成它。这使得 Python 在最近的发展中处于领先地位,这可以从过去几年机器学习的激增中看出。

Python 的缺点——以及它们是否是致命的

基于前面的阐述,你可以想象 Python 将在未来很长一段时间内保持在 sh*t 之上。但是像所有技术一样,Python 也有它的弱点。我将逐一检查最重要的缺陷,并评估这些缺陷是否致命。

速度

Python 很慢。非常慢。平均而言,使用 Python 完成一项任务所需的时间是使用任何其他语言的 2-10 倍。

这有各种各样的原因。其中之一是它是动态类型的——请记住,您不需要像在其他语言中那样指定数据类型。这意味着需要使用大量的内存,因为程序需要为它在任何情况下都能工作的每个变量保留足够的空间。大量的内存使用意味着大量的计算时间。

另一个原因是 Python 一次只能执行一个任务。这是灵活数据类型的结果——Python 需要确保每个变量只有一种数据类型,而并行进程可能会弄糟这一点。

相比之下,普通的网络浏览器可以同时运行十几个不同的线程。还有一些其他的理论。

但是到了最后,所有的速度问题都不重要了。计算机和服务器变得如此便宜,以至于我们谈论的是几分之一秒。最终用户并不真正关心他们的应用程序是在 0.001 秒还是 0.01 秒内加载。

[## 尽管(超级)慢,Python 为什么受欢迎

Bobby 对 Python 中速度问题无关性的漂亮解释。

medium.com](https://medium.com/@trungluongquang/why-python-is-popular-despite-being-super-slow-83a8320412a9)

范围

最初,Python 是由动态限定作用域的。这基本上意味着,为了计算一个表达式,编译器首先搜索当前块,然后依次搜索所有调用函数。

动态范围的问题是每个表达式都需要在每个可能的上下文中进行测试——这很繁琐。这就是为什么大多数现代编程语言使用静态作用域。

Python 试图过渡到静态范围,但是搞砸了。通常,内部作用域——例如函数中的函数——能够看到改变外部作用域。在 Python 中,内部作用域只能看到外部作用域,而不能改变它们。这导致了很多混乱。

兰姆达斯

尽管 Python 具有很大的灵活性,但 Lambdas 的使用还是相当有限的。Lambdas 在 Python 中只能是表达式,不能是语句。

另一方面,变量声明和语句总是语句。这意味着兰姆达斯不能用于他们。

表达式和语句之间的区别是相当随意的,在其他语言中不会出现。

空白使代码可读性更强,但可维护性较差。照片由欧文·史密斯Unsplash 上拍摄

空白

在 Python 中,使用空白和缩进来表示不同级别的代码。这使得它在视觉上很吸引人,理解起来很直观。

其他语言,例如 C++,更多地依赖于大括号和分号。虽然这可能在视觉上没有吸引力,对初学者也不友好,但它使代码更易于维护。对于更大的项目,这更有用。

像 Haskell 这样的新语言解决了这个问题:它们依赖空格,但是为那些不想使用空格的人提供了另一种语法。

移动开发

随着我们见证从桌面到智能手机的转变,很明显我们需要健壮的语言来构建移动软件。

但是用 Python 开发的移动应用并不多。这并不意味着不能这样做——有一个名为 Kivy 的 Python 包可以实现这个目的。

但是 Python 并没有考虑到移动。因此,即使它可能对基本任务产生可接受的结果,你最好的选择是使用一种为移动应用程序开发而创建的语言。一些广泛使用的移动编程框架包括 React Native、Flutter、Iconic 和 Cordova。

明确地说,笔记本电脑和台式电脑应该在未来很多年都会存在。但是既然移动早就超过了桌面流量,那么可以肯定的说,学习 Python 还不足以成为一个经验丰富的全能开发者。

运行时错误

Python 脚本不是先编译再执行的。相反,每次执行时它都会编译,所以任何编码错误都会在运行时显现出来。这导致性能差、耗时,并且需要大量的测试。比如,很多测试。

这对初学者来说很好,因为测试教会了他们很多东西。但是对于经验丰富的开发人员来说,用 Python 调试复杂的程序会让他们出错。这种性能的缺乏是在 Python 上设置时间戳的最大因素。

[## 现在要学习的 7 种现代编程语言

Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能

towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec)

将来什么会取代 Python 什么时候

编程语言市场上有一些新的竞争对手:

  • Rust 提供了与 Python 相同的安全性——没有变量会被意外覆盖。但是它用所有权和借用的概念解决了性能问题。根据 StackOverflow Insights 的说法,它也是最近几年最受欢迎的编程语言。
  • Go 非常适合 Python 这样的初学者。它如此简单,以至于维护代码更加容易。有趣的一点:Go 开发者是市场上收入最高的程序员之一。
  • Julia 是一种非常新的语言,与 Python 正面竞争。它填补了大规模技术计算的空白:通常,人们会使用 Python 或 Matlab,并用 C++库修补整个事情,这在大规模中是必要的。现在,人们可以使用朱莉娅,而不是在两种语言之间周旋。

虽然市场上有其他语言,但 Rust、Go 和 Julia 是修复 Python 弱点的语言。所有这些语言都在未来的技术中表现出色,尤其是在人工智能领域。虽然它们的市场份额仍然很小,正如 StackOverflow 标签的数量所反映的那样,但所有这些标签的趋势都很明显:向上。

StackOverflow 上各种编程语言的标签快照。

鉴于 Python 目前无处不在的受欢迎程度,这些新语言中的任何一种取代它肯定需要五年,甚至整整五年的时间。

这将是哪种语言——Rust、Go、Julia 或未来的新语言——目前还很难说。但是考虑到 Python 架构中的基本性能问题,不可避免地会出现这种情况。

为什么 Python 需要“pass”语句

原文:https://towardsdatascience.com/why-python-needs-the-pass-statement-30a4bdf87fa3?source=collection_archive---------33-----------------------

Pixabay 上的 pasja1000 拍摄

什么时候用“pass”?有其他选择吗?

对于像我这样从其他语言转向 Python 编程语言的人来说,经常会发现 Python 有一些非常独特的语句。“pass”语句就是其中之一,你很少能在其他编程语言中找到这样的东西。我一直在用 Java,C,C#,JavaScript,Objective-C,Swift,Scala 等等,没有一个有“通过”的语句。

其实“pass”语句在 Python 中是一个非常简单的表达式。在本文中,我将介绍这一独特语句的几个不同方面,包括它的用法、需要使用它的场景、使用它的好处、Python 需要它的原因以及潜在的替代方案。

定义

照片由惊奇Pixabay 拍摄

那么,Python 中的“pass”语句是什么呢?

一般来说,“通过”语句仅仅是一个空操作。具体来说,当它被执行时,什么都不会发生。

因此,“通过”语句通常在语法上用作占位符****。当没有代码需要执行时,我们可以把“pass”语句放在那里。

情节

sendocomunPixabay 上拍摄的照片

那么,我们可能或者需要使用“通过”语句的场景有哪些呢?事实上,它并不局限于在任何特定的场景中使用。然而,当然,到处放也没什么意义。所以,这里我总结了五种不同的典型场景。

1.循环往复

“pass”语句可用于循环语句,如 for-loop。

for i in range(10):
    pass

或者 while 循环。

while true:
    pass

因此,我们不需要在循环中编写任何逻辑,因为“pass”语句充当占位符,不做任何事情。

2.在 if-else 条件下

当我们定义一个 if-else 条件时,我们可以先决定条件,然后再考虑条件语句。

if a == 2:
    pass
else:
    pass

3.在函数中

它也经常被用在一个函数中。

def func(param):
    pass

当我们想定义一个函数,但又想以后实现它时,我们可以使用“pass”语句。

4.在一个班级

有时我们想创建一个类,但在以后实现它,如下所示。

class Cat(Animal):
    passclass Dog(Animal):
    pass

我们知道猫和狗是动物,所以我们想创建这些子类,并在以后实现它们。

5.在 try-expect 子句中

这是“pass”语句的另一个常见用例。

try:
    print(x)
except:
    pass

在这种情况下,我们希望使用 try-except 语句,但是我们实际上并不关心异常是什么。所以,我们可以只使用“通过”语句。

使用“通行证”的好处

绝对视觉Pixabay 上拍摄的照片

我们已经谈了很多关于“通”的说法。然而,我们为什么需要使用它呢?换句话说,使用它有什么好处?

首先,虽然“pass”语句什么都不做,但它仍然可以像我们在其他编程语言中所做的那样使用— //TODO。注释和“pass”语句的主要区别之一是后者可以被大多数 IDE 工具着色,因为它是一个关键字。

此外,与一段将被完全忽略的注释不同,“pass”语句毕竟是有效的代码。它将被翻译识别。因此,它被迫遵循 Python 语法的缩进,并帮助构造完整的代码片段。

Python 为什么需要“pass”?

Bru-nOPixabay 上拍摄的照片

让我们尝试一个不使用“pass”语句的函数。

无论我们是否放置了#TODO注释,代码都无法执行,因为 Python 依赖于缩进而不是花括号{}。注释#TODO是缩进的,但是会被解释器忽略。因此,我们不得不使用“通过”语句。它是一段有效的代码,不会被解释器忽略,成为函数的主体。

让我们更进一步。如果我们只需要一段有效的代码,“pass”语句可能不是唯一的选择。例如,我们可以使用一个字符串或一个数字,但不需要将它们赋值给任何变量,如下所示。

这次我们通过了编译。

但是字符串和数字放在函数体中没有任何意义,非常明显的是“pass”语句更加整洁优雅。

其他选择

奇莫诺Pixabay 上的照片

确实有一些其他关键字可以实现与“通过”语句类似的结果,例如returnyieldcontinuebreak

为什么我们不用它们?

首先,“pass”语句永远不会改变代码执行的顺序,也不会在它自己的域中产生任何影响。所以,如果我们把它们用于同样的目的,这是最安全的选择。

也就是说,

  • returnyield将停止一个功能的执行
  • break将停止一个循环
  • continue将停止当前循环

除此之外,这些关键词并不一般化。它们只能在特定的场景下使用。

  • returnyield只能在一个函数中使用
  • breakcontinue只能在一个循环中使用

因此,尽管一些关键字可以用于相同的目的,但还是建议使用“pass”语句。

摘要

照片由 Engin_AkyurtPixabay 上拍摄

在本文中,我介绍了 Python 中一种独特的语法,即“pass”语句。它是一段代表“空操作”的有效代码,通常在循环、函数、类等中用作占位符。使用它有几个好处,例如 IDE 会将它作为一个关键字。此外,Python 需要提供这样的关键字,因为它依赖缩进来定义函数的域等。因此,需要使用一段有效的代码作为占位符,而不是大多数其他编程语言中使用的“待办事项”注释。最后,虽然也有一些其他关键字如“返回”可以用来实现同样的事情,但它不够一般化,也没有“通过”语句那么整洁。

** [## 通过我的推荐链接加入 Medium 克里斯托弗·陶

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

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

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和数以千计的其他作者!(点击上面的链接)**

为什么 Python 将在未来十年保持无可争议的地位

原文:https://towardsdatascience.com/why-python-will-remain-undisputed-for-the-next-decade-79002a84345b?source=collection_archive---------49-----------------------

意见

了解为什么不管反对者怎么说,python 在下一个十年仍将保持原样和相关性

凯利·西克玛在 Unsplash 上的照片

ython 是一种非凡的改变游戏规则的编程语言,它将编程的前景提升到了一个完全不同的水平。python 的迅速崛起给整个行业带来了极大的好处,但是随着它越来越受欢迎,它总是会招致批评。

最近,我一直在阅读一些文章和观看一些视频,这些文章和视频暗示 python 的辉煌时代已经结束。

python 招致的批评通常从“它是一种缓慢的语言”到“全局解释器锁”,到“动态键入”,再到“缺乏移动应用程序”。

这些批评是真的吗?它们真的重要吗?

python 会在这个十年的剩余时间里保持相关性和完美性吗?

今天,我们将分析事实,打破一些神话!

我们开始吧!

主要的批评,它们重要吗?

Joel M Mathey 在 Unsplash 上拍摄的照片

1.Python“非常慢”:

不可否认,与 C、C++和 Java 等语言相比,python 速度较慢。这些语言更快的主要原因之一是因为它们是静态类型的,但 python 是一种动态类型的编程语言。

这些语言是在运行前编译的,不像 python 是在运行时编译的。

Python 还从其他编程语言导入外部库,而不是本地代码。

简单来说,这些因素是 python 慢的主要原因,但真正的问题!

有关系吗?

对于最终用户来说,这几乎没有什么不同。你的程序运行时间是 0.0001 秒还是 0.001 秒并不重要。

此外,如果你的计算速度是一个重要因素,值得注意的是汇编语言将比 C,C++,甚至 Java 快得多,但几乎没有人使用它们。

然而,python 速度的不足被其更快的开发时间和整体的简单性所弥补。

也就是说,可以对 python 代码进行优化,使其执行速度稍快一些。即使改进不明显,对大多数情况来说,这也不是什么大问题。

2.全局解释器锁(GIL):

Python 全局解释器锁(GIL)是 python 处理进程时使用的一种进程锁。一般来说,python 只使用一个线程来执行写好的语句集。GIL 限制了 python 中现成的并行编程。

这意味着在 python 中一次只能执行一个线程。在 python 中,单线程进程和多线程进程的性能是相同的,这个问题的原因是 GIL。

python 的开发者收到了很多关于这个问题的抱怨,但是他们不能带来像移除 GIL 这样重大的改变而不引起向后不兼容的问题。

有关系吗?

全局解释器锁是 python 中一个有争议的特性。它的引入是为了避免内存泄露和死锁问题。

它对整个计算过程的负面影响大于正面影响。然而,这在某种程度上可以用 python 中的多处理来解决。

多重处理允许你同时运行多个不相关的进程。对于 CPU 密集型任务,多处理优于多线程。

3.缺乏对移动应用开发的贡献:

Java 和其他编程语言在移动开发行业占主导地位。像 android studio 这样的应用程序利用了像 Java 和 XML 这样的编程语言。

Python 为计算机和服务器端系统提供了各种各样的开发。不幸的是,python 不太适合移动应用程序。事实上,python 甚至被认为是基于移动应用的弱势语言。

有关系吗?

智能手机、平板电脑和其他小型设备的普及程度正在上升。Python 在这方面的不足可能会阻碍它在未来作为一门重要语言的存在。

然而,事情可能不会像预期的那样糟糕,因为随着 python 的进步以及语言和框架的不断更新,它甚至可能为移动应用程序开发开辟一个市场。

承认 python 缺乏光彩的地方是很有意义的。但是理解这些因素对普通程序员的影响也同样重要。

现在让我们来看看使 python 成为一个发电站的因素,以及为什么它将在未来几年中发挥作用。

为什么 Python 将在未来十年保持相关性?

GIF 来自 GIPHY

1.初学者学习的最佳编程语言:

对于没有编程语言的初学者来说,Python 是一种非常棒的入门语言。Python 简单易学。它还有助于理解面向对象编程的基本概念。

Python 对于任何人来说都是最好的入门方式,即使是之前没有编程或编码语言经验的人,尤其是那些打算在数据科学、人工智能、机器学习等领域更进一步的人。

它有一个简单的方法,任何人都可以用它来学习这门语言。Python 极其通用,并且具有平台独立性。这意味着 python 也可以导入用其他编程语言构建的基本模块。

总的来说,Python 是一门开始学习的极好的语言,并且完全值得。它还可以在需要时帮助转换到其他语言。

2.受欢迎程度和社区支持:

在撰写本文时,Python 是世界上第二流行的语言,仅次于 JavaScript。这种受欢迎程度似乎不会很快降低。

要了解更多关于 python 和其他编程语言在 2020 年及以后的流行程度,我强烈推荐大家通过下面的链接查看我以前的一篇文章。

[## 2020 年及以后最受欢迎的 10 种编程语言

讨论当今 10 种最流行的编程语言的范围、优缺点

towardsdatascience.com](/10-most-popular-programming-languages-for-2020-and-beyond-67c512eeea73)

Python 还有一个精彩的社区,不断更新和更新版本。总的来说,python 社区充满了了不起的人,并且不断更新以改进 python。

社区成员积极参与开发新模块,以跟上编程世界的发展。与各种库和框架相关的大量资源正在不断开发。

3.在人工智能/数据科学领域占据主导地位:

GIF 来自 GIPHY

Python 的专长在于其执行可视化任务、探索性数据分析的能力,当然还有在机器学习、深度学习和神经网络方面的人工智能领域。

通过 python 模块和库可以访问的各种框架有助于解决复杂的机器学习和深度学习问题。

在这个时候说 python 在人工智能和数据科学领域的能力是显著的,几乎是无与伦比的,这不会错。

然而,正在崛起的新兴语言可能会对 python 构成潜在威胁,成为其巨大的竞争对手。我们将在以后的文章中更多地讨论这三种潜在的语言。

就目前而言,python 是一种很好的编程语言,可以帮助您开始数据科学之旅,解决复杂的机器学习和深度学习项目。

安德鲁在 Unsplash 上的照片

结论:

说到这里,我们来到了文章的结尾。

如果你是一个初学编程的人,在网上听到这些批评,你认为 python 可能不是当今时代学习的最好语言,那么你就被误解了。

希望我能够传达这样的信息,尽管有些人加入批评 python 的行列,批评它的一些缺点,但这并不意味着这种出色的编程语言的流行程度或性能将在未来几年内逐渐消失。

Python 仍然是相关的,被认为是初学者学习入门语言的客观的好选择。

它在人工智能领域的贡献是巨大的,它在机器学习、数据可视化和深度学习方面的相关性将在未来几年保持不变。

我很想知道观众的想法。如果你同意或不同意我的观点,请在下面留下你的评论。任何建设性的积极性、观点或批评都受到高度鼓励和赞赏。

看看我的其他一些文章,你可能会喜欢读!

[## 破解代码:用 Python 代码分析暴力攻击

浅析一种简单的密码技术及如何破解密码!人工智能和机器如何…

towardsdatascience.com](/breaking-the-code-analysis-of-brute-force-attack-with-code-in-python-6070389449d4) [## 必须使用内置工具来调试你的 Python 代码!

python 调试器模块指南,包含有用的代码和命令。有效且高效地利用这一工具…

towardsdatascience.com](/must-use-built-in-tool-for-debugging-your-python-code-d5f69fecbdbe) [## 聚类无监督学习简明指南!

借助聚类算法详细理解无监督学习的概念。

towardsdatascience.com](/concise-guide-to-unsupervised-learning-with-clustering-4924cdbb27cb) [## 4 个基本正则表达式操作符使自然语言处理变得更简单!

了解四种基本的常规操作,以清理几乎任何类型的可用数据。

towardsdatascience.com](/natural-language-processing-made-simpler-with-4-basic-regular-expression-operators-5002342cbac1) [## 带有完整代码片段和有用链接的 5 个最佳 Python 项目创意!

为 Python 和机器学习创建一份令人敬畏的简历的 5 个最佳项目想法的代码片段和示例!

towardsdatascience.com](/5-best-python-project-ideas-with-full-code-snippets-and-useful-links-d9dc2846a0c5) [## 人工智能是破解宇宙奥秘的关键,下面是原因!

人工智能、数据科学和深度学习的工具是否先进到足以破解人类大脑的秘密

towardsdatascience.com](/artificial-intelligence-is-the-key-to-crack-the-mysteries-of-the-universe-heres-why-56c208d35b62)

谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!

分析 2019-nCoV(冠状病毒)数据—为什么质量和感觉检查在数据科学中如此重要?

原文:https://towardsdatascience.com/why-quality-sense-checks-are-so-important-in-data-science-7ef80da760c3?source=collection_archive---------16-----------------------

世界卫生组织和 Kaggle 的 2019-nCoV(冠状病毒)数据库如何用不同的影响数字讲述相同的故事..

图片来源:WebMD.com

“我 真诚地为每一个中国人的安康祈祷。愿上帝给冠状病毒受害者和他们的家人足够的力量,让他们度过这段艰难的时光。请遵循 世卫组织网站 中概述的建议,以保持安全并受到保护

世界卫生组织担心什么?(问题背景)

“冠状病毒(CoV)是一个大的病毒家族,可引起从普通感冒到更严重疾病的疾病,如 中东呼吸综合征(MERS-CoV) 严重急性呼吸综合征(SARS-CoV) 一种新的冠状病毒(nCoV) 是一种以前在人类中未被识别的新毒株。关于始于中国武汉的冠状病毒爆发的消息变化很快。这种与 SARS 和 MERS 密切相关的呼吸道感染一直在中国蔓延,其他几个国家也诊断出了病例,包括美国、澳大利亚、日本等。”

[## 新型冠状病毒(2019-nCoV)——世卫组织新型交互式、基于网络的冠状病毒在线培训…

世卫组织的在线训练是目前对抗冠状病毒爆发的最佳武器;涵盖检测方法…

medium.com](https://medium.com/@angeleastbengal/novel-coronavirus-2019-ncov-whos-new-interactive-web-based-online-training-for-coronavirus-d0865f0b47af)

在哪里可以找到真实世界的信息?(数据来源)

约翰·霍普斯金大学创建了一个在线仪表板来监控冠状病毒的当前情况,数据从同一链接中提取,并以 csv 格式提供。大部分数据收集自各种来源,包括 【世卫组织】美国疾控中心ECDC中国疾控中心()NHCDXY 。DXY 是一个中文网站,几乎实时地汇总 NHC 和当地 CCDC 疫情报告,提供比国家一级报告组织所能提供的更多的当前区域病例估计,因此用于所有报告的 mainland China 病例(确诊、疑似、恢复、死亡)。美国病例(确诊、疑似、康复、死亡)取自美国疾病预防控制中心,所有其他国家(疑似和确诊)病例数据取自相应的地区卫生部门。 数据存在于国家、省&日期级别,包含约 368 条记录。****

图片来源:约翰·霍普斯金大学

我的数据来源可靠吗?(探索性数据分析)

分析领域中非常熟悉的术语,涉及构建摘要、检查数据重复、缺失值、关键绩效指标的分布。因为我们有大约 368 条记录,所以我在 Excel 中做了所有的数据验证。以下是我的发现:

  • 368 条记录中的 ~66 条记录没有州/省信息
  • 19 在中国、Mainland China、马拉西亚、巴西等国家获得的记录没有确诊、死亡或恢复病例的信息
  • “上次更新”时间馈送不符合数据类型一致性,需要清理,特别是 2020 年 1 月 23 日馈送
  • 描述性统计— 由于病例大多局限于中国,观察到较高的标准差或方差。世界其他地方的事件非常少

EDA —数据处理前的原始数据

我们有冠状病毒感染的风险吗?(调查结果)

迄今为止,这种风险仍主要局限在中国,然而,在美国和其他国家也发现了一些人际传播的病例。

泰国、香港、日本、新加坡位居前列,但仅构成 1%的病例确诊病例总数持续上升,但确诊病例的百分比增长至今没有显示出任何线性趋势,而死亡与确诊病例的比率保持平稳。


为了监控实时更新,我创建了一个基于 QlikSense 的仪表盘,带有每日更新连接器,用于分析不同场景的数据。

数据截止到 2020 年 1 月 29 日;冠状病毒对全球的整体影响——特别是中国和 Mainland China

数据截止到 2020 年 1 月 29 日;增长率和死亡与确诊率——中国与世界其他地区

数据从不说谎!但是,我如何验证真相呢?(质量和感觉检查)

任何分析的最大挑战是验证我们报告的数字。通常,数据整理过程很繁琐,需要在数据被使用之前进行大量清理。清理涉及可能会使我们的结果产生偏差的近似和假设。代码错误、数据收集根中的无效信息、仪表板中的系统或后端问题通常可能代表不正确的数字。因此,10K 报告说,通过真实的来源和一点点谷歌搜索可以确保正确的输出。为了验证仪表板上的数字,我查阅了世卫组织网站上的形势报告。以下是我的发现:

  1. 我的仪表板中报告了约 25000 例确诊病例,比世卫组织报告的高得多,约 17000 例(确诊+疑似+严重+死亡)
  2. 约 20 个国家& 45 个省至少有一例确诊病例,与世卫组织报告的 16 个国家一致
  3. 迄今为止,全球报告了约 2.3%的死亡病例和约 1.9%的康复病例
  4. 确诊病例的增长百分比没有显示任何线性/非线性趋势,随着时间的推移保持平稳,但有突然的峰值

作者简介:高级分析专家和管理顾问,帮助公司通过对组织数据的商业、技术和数学的组合找到各种问题的解决方案。一个数据科学爱好者,在这里分享、学习、贡献;你可以在链接上和我联系;

为什么科学计算对 Julia 如此重要

原文:https://towardsdatascience.com/why-scientific-computing-is-so-great-with-julia-e8cc2eab6298?source=collection_archive---------24-----------------------

这种年轻的科学编程语言有什么了不起的?

(图片由作者提供)

介绍

在过去的十年里,科学计算的热潮越来越高涨,随之而来的是程序员在数学计算和数据处理方面有了更多的选择。有一种语言可能不如这个领域的其他语言流行,比如 Python 和 R,它是一种开源的、多范例的、非常动态的语言,叫做 Julia。

Julia 是一种语言,它不仅被创建用于一般用途的应用程序,而且非常适合科学计算和计算分析。虽然这本身意味着 Julia 可能比不是为做这些操作而构建的语言更适合这些应用程序,但该语言也有许多非常好的属性,这使它非常适合科学计算,而不仅仅是为了做这些而构建的。

速度

正如您可能已经预料到的,在科学和统计中使用 Julia 语言的第一个主要好处是速度。语言的速度是可靠的,一致的,最重要的是;可复制。Julia 代码不仅几乎和 C 编程语言一样快,而且写起来也快得令人难以置信。与 C 代码甚至 C++代码相比,编写 Julia 代码的一个巨大优势是,使用 Julia,您可以将方法用作模板。例如,在 C++中,我们可以获取任何类并对其进行子类化——本田思域是轿车,是汽车,是交通工具。在 Julia 中,我们可以对使用多态分派的方法应用同样的“模板化”策略。

所有这些结合在一起,就形成了一种语言,它可以像 C 一样科学地用于相同的应用程序,但它的编写速度和易用性更类似于 Python、Nimrod 或 JavaScript。对于常规的通用应用程序来说,这当然是非常强大的,但它在机器学习、数据分析和科学计算等应用程序中得到了进一步的证明。

句法

Julia 支持的另一件大事是语法表达式。这些允许您将公式归属于标识符,并创建使用参数执行算术的简单且传统的科学方法。当然,有很多地方需要用到这一点 dispatch 本身就是一种语法表达。然而,作为一个例子,我们可以做 f(x ),其中 f(x)等于 x 的阶乘:

f(x) = factorial(x)

虽然这不是 Julia 中的唯一例子,但我们可以通过类似 sigma 的东西更进一步:

∑(x) = sum(x)

当然,我们也可以在表达式中加入算术:

μ(x) = sum(x) / length(x)

浮点精度

去年,我写了一篇文章,预测 Julia 可能是 Scala 的绝佳替代品。我反对使用 Scala 的一个重要理由是缺乏浮点精度,这是任何 Java 后代编程语言都会继承的问题。Julia 可以处理大数据操作,比如 Scala,同时使用不同的类型,比如 BigInt 和 BigFloat,将浮点精度保留到精确的小数。这些测量在科学上非常重要,这取决于你在做什么;小数部分可能意味着有效假设和接受零假设之间的差异。

生态系统

茱莉亚最大的弱点之一就是年轻。当你的编程语言如此新的时候,它很难成为未来的编程语言。然而,尽管它相对年轻,Julia 已经有了很多很棒的科学应用软件包。其中一些包甚至可能没有其他语言的对应部分。

你想用神经网络做机器学习吗?你想做生物信息学,占星学,量子计算,最优化,还是统计绘图?Julia 有可以执行所有这些操作的软件包。虽然它们可能不像其他语言中的一些包那样成熟,但是它们在不断地被改进,并且您总是可以自己提交代码来推进项目。

动态打字

许多科学语言的目标通常是动态类型化和功能化。然而,Julia 将泛型带到了一个全新的层次,它允许语言既具有传统的不可变数据、结构和常量类型的功能,又具有面向对象的功能,可以同时编辑包含在构造类型中的数据。

Julia 不仅是动态类型的,而且这种语言本身在本质上也是非常动态的——它几乎可以做任何你想让它做的事情,只要通过使用多分派作为范例来建立你想要的数据存储和操作方式。

结论

有很多很好的理由让科学程序员尝试 Julia 编程语言。Julia 不仅编译快,编写和开发也超级快。这对于所有使用该语言的程序员来说都是一个巨大的优势,但对于需要不断调整函数以处理新数据并改变在工作中处理特定类型的方式的科学程序员来说,这可能更为重要。

此外,Julia 是一种令人难以置信的动态语言,具有多态调度和语法表达式,允许人们操纵该语言编写类似科学公式的内容。当然,这不仅对科学程序员来说是一件好事,对任何打算使用同一方法对几种不同类型执行多重操作的程序员来说也是如此。与许多竞争对手相比,Julia 在计算分析方面也相当准确,这使它领先于计算高浮点值有问题的语言。

最后,尽管 Julia 的生态系统还很年轻,许多软件包还没有完全成熟,但是目前软件包开发的水平是惊人的。有这么多不同的软件包可用于这么多不同的科学应用,而且随着时间的推移,这只会变得更好。

对于科学编程来说,Julia 确实正在发展成为一种未来使用的奇妙语言。

为什么 Scrum 对数据科学来说很糟糕

原文:https://towardsdatascience.com/why-scrum-is-awful-for-data-science-db3e5c1bb3b4?source=collection_archive---------6-----------------------

越来越多的数据科学团队似乎在追赶 scrum 潮流,但这是个好主意吗?

Scrum 不适合大多数数据科学团队。图片来源

Scrum 是软件工程中一种流行的项目管理方法,最近这种趋势已经延伸到了数据科学。虽然 Scrum 在标准软件工程中的效用仍有争议,但在这里我将详细说明为什么它在数据科学(以及数据工程)中毫无疑问没有一席之地。这并不是说“敏捷”作为一个整体对数据科学有害,而是说 Scrum 的具体原则:冲刺、单一产品所有者、scrum master、每日站立(以及一连串的其他会议)不适合数据科学团队,并最终导致较差的产品。

冲刺/估计

Scrum 通常在两周的冲刺阶段优先创建“可交付成果”。虽然这在软件工程的某些领域可能很有效,但在数据科学领域却非常失败。数据科学本质上是一个科学过程,涉及研究、实验和分析。数据科学项目很难评估,因为很多时候他们要求团队做一些以前没有做过的事情。诚然,数据科学家可能在没有利用数据集或利用所需的特定技术之前就已经设计了类似的模型。这意味着在这个过程中有很多不确定性。像数据质量比预期的差、超参数调优的问题,和/或某项技术不起作用,都可能导致在 sprint 结束时“交付”失败。这意味着点估计通常不是毫无价值的,因为它们基于以前的项目,而这些项目通常与当前正在进行的项目没有相似之处。

此外,即使数据科学家“交付”了 sprint 所需的项目,在许多情况下,他们也可能牺牲了代码质量、模型健壮性或文档,以满足 sprint 的任意结束。我经常听到管理层正面描述两周冲刺中“更紧急”的好处。但是请记住,这种紧迫性也有缺点,主要是数据科学家更容易犯错误和忽略事情。

另一方面,我见过提前完成工作的数据科学家,他们因为害怕在 sprint 结束前无法完成新的故事而犹豫不决。因此,在下一次冲刺之前,他们只是闲坐几天。

但是我们不能分解这些大任务吗?Scrum 的支持者会争辩说,这里的问题不是 Scrum,而是需要更好地分解大任务(很可能需要额外的耗时整理会议)。然而,即使分解大任务也不能消除数据科学的不确定性。例如,像训练 XGBoost 模型和报告结果这样的任务,可能比单次 sprint 花费更长的时间,因为代码中缺少需要编码的值,或者根本不存在需要的数据。是的,这可以通过让之前的故事“探索数据集并填充缺失值”来解决,但是正如我将在第二部分描述的,大多数 PO 缺乏优先处理这些类型故事的专业知识,因为它不能立即完成交付。

不断旋转

与上述观点相关,Scrum 经常导致从一个项目到另一个项目的不断转换。的确,许多人认为旋转是一种“令人满意的”特性,然而这种方向的不断变化经常导致一事无成,有前途的项目被搁置,仅仅是因为它们没有产生直接的可交付成果。在数据科学领域尤其如此,许多项目需要在员工时间和资源上进行长期投资。我见过很多次有前途的项目被终止,因为它们没有足够快地交付性能改进,或者产品所有者只是看到了一些更耀眼的东西,他们想专注于这些东西。

缺乏跨团队授粉

Scrum 经常创造一个可怕的狭隘的焦点,只关注自己团队的冲刺门票,而排除其他一切。它阻碍了数据科学家(或任何人)为公司的其他计划做出贡献;他们的技能可能有所帮助的其他计划。它还倾向于推掉可能影响其他团队的重要问题,除非该团队与产品负责人直接接触。

产品负责人(PO)的角色

Scrum 的另一个关键问题是它将太多的权力放在了 PO 的手中。PO 通常负责积压工作,并确定哪些问题需要优先处理。然而,产品负责人通常对数据科学项目的技术细节了解不多。因此,诸如代码重构或模型性能的进一步分析等必要的工作经常被推到后面。此外,缺乏直接的“进展”可能会导致产品负责人完全离开项目。这并不是说数据科学家不应该定期与利益相关者沟通以确定票证的优先级,而是说,不是在所有会议上都有一个专门的产品负责人来决定任务的优先级,这对团队和产品本身的长期发展都是适得其反的。

日常站立、梳洗和其他时间浪费

我很少见过需要每天开会的团队。队友之间的交流很重要,但是,通常每周两次或三次就足够了。同样,应该鼓励队友在遇到困难或需要帮助时伸出援手。然而,每日站立通常除了微观管理员工之外什么都不做。

梳理(或细化)是 Scrum 团队的一次会议,会上讨论产品待办事项,并准备下一个冲刺计划。

梳理是另一个不必要浪费时间的环节。正如我上面提到的,数据科学中的技术复杂性通常意味着 sprint 的目标常常无法实现,或者只能达到很差的结果。这反过来经常导致更多的梳理会议(或我们过去称之为预梳理)的理由,以便“分解那些大问题”在永无止境的循环中,这些会议继续消耗越来越多的数据科学家的时间。

复古会议是我喜欢的少数几个 scrum 会议之一,然而,在这些会议上的建议通常不会被认真对待。例如,在我职业生涯中参加的几次 sprint 回顾会上,大多数队友都建议不要每天都站着说话,但是 scrum 主管和管理层对这些建议不予考虑,因为“那不是 scrum。”然而,相比之下,建议增加更多的梳理会议几乎总是毫无疑问地颁布。

Scrum 大师

另一个本质上无用的角色是 scrum master。scrum 大师的正式定义是:

scrum master 是团队角色,负责确保团队遵循敏捷价值观和原则,并遵循团队同意使用的流程和实践。“-敏捷联盟

什么…?在实践中,scrum master 扮演了一个非技术性的忙人角色,他强迫团队成员参加前面提到的无意义的会议,拖着 JIRA 卡片到处走,同时宣扬 scrum 将如何带领你的团队走向救赎的准则(例如,每次冲刺交付更多的分数)。

错误的二分法和不真实的 Scrum 论证

最后,Scrum 的支持者经常在将 Scrum 与瀑布和其他旧的项目管理方法进行比较时制造一个稻草人。此外,在许多公司,管理层采取要么全有要么全无的方法。有可能采用 Scrum、敏捷或其他形式的项目管理,而不完全遵循它们。例如,你可以在没有产品负责人、sprints 或 scrum 大师的情况下,利用像故事、史诗等想法。

我经常看到的另一个普遍趋势是人们说“你所经历的不是真正的 Scrum,等等等等实际上是瀑布。如果你有一个更好的产品负责人就好了……”这没有意识到 Scrum 作为一个系统滋生了这些类型的问题。委派一个单一的角色作为产品所有者必然会引起问题。当然,你可以有一个特别好的 PO,他有多年的 DS 经验或了解团队,但这可能不会发生。此外,冲刺的核心是鼓励在任意决定的持续时间结束时疯狂冲刺,以满足“承诺”。它还从根本上假设所有的功都可以被具体估计。Scrum 可能在软件工程领域工作,在那里有非常好定义的问题,这些问题仅仅是微小的变化(尽管即使这样,你也有 POs 和 Scrum masters 的问题)。然而,当存在任何不确定性时(比如在数据科学、数据工程和 Devops 中),Scrum 就会崩溃,导致时间和资源的浪费。

你应该用什么来代替?

这就引出了一个核心问题:你应该如何管理一个数据科学团队。没有单一的答案。我发现有一种基于看板的方法很有效,它没有产品负责人,但是与利益相关者定期讨论(每周或每隔一周)。此外,在制品限制似乎有助于简化流程。就像我上面提到的,一周两次会议(周二/周五)或者其他方式通常都很有效。

然而,这种方法并不适用于所有的团队。这就是为什么,特别是对于数据科学,我建议尝试许多不同的方法来确定什么对您的团队有效。关键是找到一个适合你的团队和利益相关者的系统,而不是一个仅仅迎合上层管理人员关于数据科学家团队应该如何运作的想法的系统。

附加链接

Reddit 上关于数据科学 Scrum 的讨论

Quora 问答

数据科学家为什么要用函数?

原文:https://towardsdatascience.com/why-should-data-scientists-use-functions-67cbbf932a99?source=collection_archive---------52-----------------------

让我们看看为什么必须将代码包装在函数中。

重要的事情先来

在开始学习数据科学之前,我就已经是一名软件工程师了。在过去的几年里,它让我理解了一个问题,通常初学者不会理解这个问题:用函数将代码分解成块。

过去几年,数据科学领域受到了大肆宣传,允许它以指数速度增长;随着互联网的出现,现在学习者可以简单地去 YouTube 或 Medium,开始理解和应用一切。

现在,让我们一起来看看这些标准方法之间的主要区别。

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

我们学习的方式

我不知道你的学习过程,但在我的数据科学课程中,我遇到了一个问题:为了以更简单的方式传递内容,我们的老师通常倾向于避免复杂的事情;如果这会使以后的解释变得非常困难,他们为什么要把代码包装在函数中呢?

我记得,在我的一堂课上,我的老师说了以下的话:

“还记得上节课我们要写的函数吗?没用的,其实是我的错;但我们不会在那上面浪费时间,只要写下面的代码就行了……”

这才是真正的错误!我们没有重写函数,解决问题,让我们知道它是如何工作的,以及函数有多大的好处,而是被教导要避免这样做,仅仅因为一行代码就可以破坏整个项目。他仅仅因为一个问题就忽略了功能系统的整体能力。

使用最简单的方法

今天,我们将深入了解函数的重要性;为了简单起见,我们用一个简单的例子:发现一个人的身体质量指数。我们将使用公制版本,因此公式如下:

体重(公斤)/(身高(米) 2)*

图片由雷南·洛里科拍摄——中号

这里,我们使用了一种使用两个“野蛮”数字的方法;这真的很容易做到,对不对?你只需要访问这两个数字,然后把结果插入到新的变量中,真的令人印象深刻。

您可以通过将固定数字转换为变量来增加一些抽象层次,这样我们可以通过简单地修改这个变量来轻松地将数字转换为总和,让我们来看看:

这对初学者来说是一种令人印象深刻的方式,但是让我们检查一下主要问题:修改。现在我们有了一个重量和高度的列表来测量身体质量指数,我们需要将代码包装在一个循环中…一些问题开始出现了。

这里有一些问题,让我们列举一下:

  1. 这里我只是打印输出,但是假设您需要将结果存储在一个变量上,或者更糟,应用一些修改;一个循环变得越重,我们需要花在它上面的时间就越多;
  2. 众所周知,随着时间的推移,代码变得陈旧,需要进行一些改进;假设在未来的某个时刻,你的公司决定为超重的人制作额外的标签,你会怎么做?

将数据包装在函数中

我想,现在你开始明白函数对每个人有多重要,但对我们这些数据科学家来说,它变成了处理数据的琐碎部分;

现在让我们修改一下上下文:假设我们已经从一个随机的人那里收集了五个月的身体质量指数结果,并且需要给出不同的建议。首先,让我们看一下数据集。

图片由雷南·洛里科拍摄——中号

正如你可以检查以上没有什么特别的,对不对?只是数据框架上的数据,非常简单;但是 特色工程 怎么样?你如何从数据中获得重要的洞察力?忠告:没有功能,真的很辛苦;正如我之前说过的,函数是数据科学家日常工作中微不足道的一部分,你需要使用它。让我们验证一个与我们的上下文非常匹配的函数:

哇哦。那是什么?冷静下来,先在功能上准确的看一下,没什么难懂的,只是实际体重和过去一个月的差异;现在,我们的数据框架看起来像这样:

哎呀!我忘了去掉身高一栏,这样才有意义……忽略它——雷南·罗利科

在数据帧上追加身体质量指数

还记得我们在本文开始时在循环中添加的代码吗?在处理真正的数据科学项目时,它不是真正抽象的?我们来看看它的功能版本:

正如你所看到的,现在我们能够以一种简单的方式使用特性工程,编写可重用的代码;一天结束时,我们的数据框架看起来像这样:

最后三列是使用函数——雷南·洛里科创建的

奖金

有了这个函数,现在我们能够毫无问题地处理未来的数据;你可以随时调用它来预测任何人的身体质量指数,换句话说,现在你可以不用担心所谓的样板文件了。看看下面的 gif:

作者:雷南·洛里科——中号

别忘了

你浪费在重写代码上的时间越多,你在真正重要的事情上投入的精力就越少;重用代码!数据科学领域的大数据工作,这意味着每一秒钟都取决于性能。

就这样,伙计们!

我希望你喜欢这个内容,并能熟练运用你的新知识!如果你想每天都学习有趣的东西,我很乐意与你分享精彩的内容!

另外,你可以在 Github 上查看我的个人资料。所有的关键概念都可以学习和重用!

[## 雷南·洛利科-吉图布

UI/UX 设计师。夜间跨平台开发者。还有,我讲数据科学和人工智能。解散…

www.github.com](https://www.github.com/renfelo)

我为什么要信任一个人工智能系统?

原文:https://towardsdatascience.com/why-should-i-trust-an-ai-system-6f06a28b163d?source=collection_archive---------36-----------------------

你如何区分人工智能系统的可解释性、可解释性和透明性?这些术语和信任有什么关系?

伯纳德·赫曼特在 Unsplash 上的照片

在过去的几年里,人工智能系统已经变得无处不在,并越来越多地影响着我们的日常生活。使用搜索引擎,跟随电影推荐或拍照被强大的新算法修正。这些算法也是决定我的信用度,我获得医疗保健的机会,甚至我是否必须进监狱。虽然这些算法正越来越多地影响我们与世界互动的方式以及我们被视为公民的方式,但我们可能想提出一个问题,即我们是否应该信任这些系统。

在过去,科学发明要经过几个阶段才能得到值得信赖的产品。例如,玛丽·居里(Marie Curie)或威廉·伦琴(Wilhelm Rö ntgen)等科学家对放射性元素和一般辐射进行了实验,并取得了突破性的发现。像莱特兄弟这样的早期飞机先驱在奥托·李林塔尔这样的工程师的工作基础上开发了第一架飞行器,这些工程师研究了空气动力学的基本原理,帮助我们了解如何开发飞行器。在人们信任产品之前,商业应用中的安全使用(如 x 光或商用飞机)通常需要长达十年的实验和法规的引入。人工智能系统似乎大多跳过了这一重要的开发步骤,但越来越多的人询问人工智能系统和隐含偏见、隐私或安全问题。

幸运的是,在过去的几年里,人们一直在热烈讨论如何让人工智能系统更加值得信赖,答案往往是它们必须更加透明。然而,在人工智能系统的环境中,透明意味着什么?我们希望每一行代码都是开源的吗?非专家真的能理解像卷积神经网络(CNN)和变压器这样的算法是做什么的吗?机器学习专家能否解释主要的神经网络技术是做什么的,以及这些系统是如何做出决定的?

在这篇文章中,我想探讨三个术语,它们将帮助消费者、人工智能开发者和人工智能系统提供商在人工智能系统所做的事情中灌输信任。我想提供三个不同的术语的清晰定义:(1)可解释性,(2)可解释性,以及(3)透明性。它们都通过另一个重要的概念联系在一起:信任。

可解释性

当人工智能工程师使用监督机器学习方法时,她基于训练数据创建 ML 模型。为了改进模型,已经开发了特征工程技术来选择最具预测性的特征。自从深度学习出现以来,这一步经常被忽略,因为网络中的隐藏层通常可以被视为肩负着特征工程任务的工作。例如,卷积神经网络的不同层可以通过学习如何识别图片的部分,如边缘、形状或甚至片段(如人脸的部分),来识别视觉识别任务的重要特征。

不同的层关注不同的特性(来自:https://developer . NVIDIA . com/discover/artificial-neural-network)

然而,ML 模型的工程师可能不会检查这些层,而只是简单地运行网络,而不能解释网络实际学到了什么。这可能会导致不可预见的后果,正如 Sameer Singh 和他的同事们的工作所显示的。他们研究了似乎为给定任务(例如,文本分类、视觉识别)提供高准确度的分类器,但是分类器可能没有出于正确的原因而学习了决策边界。如果某个特定特征恰好与分类器必须学习的类别高度相关,就会发生这种情况。这样的模型会做出正确的预测,但不能很好地概括。

例如,关于不同流行主题的帖子的文本分类系统可以包含写帖子的人的姓名。如果有一个非常多产的作家总是写同一个主题,这个名字可能会成为这个特定类别的一个很好的预测。然而,一旦作者选择了不同的主题,这个模型就会失效。由于使用模型作为黑盒的这种缺陷, Singh 等人发明了一种称为局部可解释模型不可知解释(LIME)的系统,该系统允许 ML 模型开发者更仔细地查看用于具体示例分类的特征。

LIME 是一个与模型无关的工具,用于解释分类器针对给定示例做出的决策。该工具允许开发人员通过局部近似黑盒模型来检查为什么一个文本被标记为某种方式。它关闭实例的某些部分(例如,使图片的某些部分变灰或省略文字)。然后,LIME 基于这些所谓的扰动实例创建了一个简单的回归模型。线性模型更容易解释,因为你可以很快看出哪些变量具有很高的权重。

为错误的原因预测正确的话题(来源:)https://www . oreilly . com/content/introduction-to-local-interpretable-model-agnostic-explaining-lime/

来自 20 个新闻组数据集的给定文本分类示例显示了单词 posting 如何对这篇文章的正确分类产生重大影响。然而,令牌帖子出现在电子邮件标题中,实际上与帖子中讨论的主题无关,分类器突然变得不太可信。

Singh 等人还对受试者进行了一些实验,对他们是否信任分类器的结果进行评级。他们为 20 新闻组任务创建了两个分类器:一个使用所有的标记,包括误导性的标记,如发帖,另一个使用一组干净的标记,以确保分类器更好地泛化。使用 Mechanical Turk,他们询问非人工智能专家,在给定 LIME 生成的解释的情况下,他们更信任哪个分类器。他们发现,受试者能够根据石灰产生的描述来区分分类器。

如果特性名称是描述性的,并且能够以易于用户使用的形式呈现给用户,那么 LIME 创建了可理解的描述。作者使用解释这一术语,因为即使对于机器学习的非专家来说,图片片段或文字也是可以理解的。然而,如果特征需要语言学专家知识(解析树的 c-command )或特定领域知识,那么将更难以将 LIME 的输出作为解释呈现给 AI 系统的用户。

因为 LIME 的输出与机器学习算法使用的特征密切相关,LIME 的描述对 ML 工程师很有用,可以更好地解释她正在开发的模型的内部工作方式(有关类似模型的相当全面的概述,请参见 DipanjanSarkar 的 文章)。人工智能系统的用户也可能从这些描述中受益,但它仍然缺乏对模型为什么选择某个标签的解释。LIME 或类似系统没有提供自然语言描述来证明标签的选择是正确的。

可解释性

诚然,可解释人工智能的方法经常与简单解释 ML 模型工作方式的方法重叠,决策树等方法经常被用作可解释人工智能的标准例子。我对可解释性的定义更加严格,可能超出了当前方法所能提供的范围,但我认为可解释性需要基于自然语言描述,就像人类在人工智能系统给出自动生成的摘要、分类结果或问题答案时会提供的那样。

各种各样的研究项目正在解决这样一个问题,即如何向用户提供对人工智能系统的更好的解释。在 DARPA 资助的名为可解释的人工智能(XAI)的项目下,人们可以找到几个研究如何更好地解释用户在查看 ML 算法输出时可能产生的问题的倡议。这些答案通常对军事和安全应用至关重要,对监控运输、支持医疗应用或法律研究的系统也是如此。

吉尔平等人(2018) 最近对可解释性方法的文献综述总结了以前的方法,分为三类:(1)处理,(2)表征,(3)解释产生。类别处理和表示包括代理方法,如 LIME,但也包括决策树,以及对神经元层在神经网络中所起作用的分析,类似于我所说的可解释性。第三类工作包含脚本对话或基于注意力的方法来自动产生解释。

当前的解释生成方法通常集中在多模态系统上,如生成解释和识别图片中用于活动识别任务(ACT-X)和视觉问题回答任务(VQA-X)的区域。 Huk Park et al. (2018) 例如,开发了生成口头辩护和突出显示用于视觉识别任务的图片中的区域的方法。

Huk Park 等人(2018 年)开发了一个提供多模态解释的指向和调整模型

生成叙事是向不一定是 ML 专家的用户解释模型输出的第一步。人工智能系统的用户应该能够向系统提问,以便真正地与输出进行交互。特别是,询问为什么问题和反事实对于使人工智能系统对用户更加透明很重要。

透明度

AI 系统提供商主要负责让 AI 系统更加透明。透明度是增加对人工智能系统信任的另一种方式,因为它允许用户“看引擎盖下”。然而,这并不意味着每个系统都需要开源或者训练数据必须公开。尽管学术界强烈推动这样做,但想要销售基于人工智能系统的产品的公司无法做到这一点。

然而,公司可以通过识别人工智能系统的开发使用了哪些数据源,通过合并结果显示的置信区间来显示更多的透明度(即,我 97%确定这张照片显示的是一个苹果)。当他们提供图像识别或文本分类等服务时,他们还应该根据他们如何处理来自少数群体的数据或预期的输入格式来确定能力的界限。

凯特·克劳福德特雷弗·帕格伦挖掘人工智能的图像

米切尔等人的作品。指出在交付基于人工智能的系统时包括模型卡。模型卡记录了用户、软件开发人员、政策制定者以及受影响的个人可能遇到的一系列重要问题。该列表包括以下一些问题:

  • 你能提供模型的基本信息吗?(模型是谁开发的?用了什么算法?目前使用的是哪个版本?什么时候训练的?)
  • 预期用途是什么?(主要的预期用途和用户是什么?哪些用法超出范围?)
  • 使用了哪些指标?(报告了哪些模型性能指标,为什么?如果使用决策阈值,它们是什么,为什么?)
  • 该模型的伦理含义是什么?(例如,模型是否使用任何敏感数据(例如,受保护的类)?模型使用中可能存在哪些风险?)

其他行业在遵循通常通过运营和安全审计强制执行的法规方面付出了大量努力。例如,航空业受到严格管制,以确保飞机安全运行。新药的开发受到临床试验几个阶段的指导。心理学中的人体实验需要得到机构审查委员会的批准,以确保参与者不会受到任何伤害。

主动描述人工智能系统的数据集、方法和限制,对于向科技公司目前正在开发的此类系统灌输信任至关重要。更具体地说,解释可以帮助用户更好地理解机器学习模型为什么做出特定的决定,而增加模型的可解释性的方法可以帮助模型开发者产生更好的模型。

相信我!

人工智能系统的发展已经达到了历史上的一个关键时刻,就像炼金术变成了化学,或者第一架飞行器变成了商用飞机。与描述空气动力学的周期系统和数学方法类似,AI 正在快速开发数学方法,以驱动越来越多的高级系统的进一步开发。在人工智能系统中加强可解释性、可解释性和透明度将增加对人工智能系统的整体信任,类似于安全设备和法规如何导致更安全的化学产品和飞机。

为什么您应该关心日志记录?

原文:https://towardsdatascience.com/why-should-you-care-about-logging-442a195b80a1?source=collection_archive---------23-----------------------

从 Python 初学者提升到中级

Ales KrivecUnsplash 上拍摄的照片

作为一个初学者,我们经常发现我们更倾向于写代码来完成工作,而不是如何完成工作。很少考虑整体应用程序的设计和应该遵循的最佳实践。虽然这对初学者来说没问题,但随着我们在编程之旅中不断前进,在将代码投入生产之前,我们还需要考虑应用程序的其他方面。正确的日志记录是将中级或高级开发人员与新手区分开来的一个方面。在本文中,我们将学习 Python 的'Logging'模块的基础知识。值得注意的是,尽管我们展示的是 Python 示例,但整体概念并不仅限于 Python,还可以应用于其他语言。

伐木及其重要性

作为 noobs,我们总是使用强大的 print() 函数在控制台中打印东西,也许是为了调试或显示中间变量和输出值。这在编码阶段很好,但是当你的应用程序在生产环境中运行时,它们需要适当的跟踪监控。日志记录是在应用程序执行不同任务或事件时提供有关应用程序信息的过程。日志记录提供了以下好处:

问题诊断:假设用户报告了一个 bug,您想要在您的开发环境中复制这个场景。现在,如果您已经在日志文件中记录了用户活动,那么引用这些日志并在非生产环境中复制它以供进一步分析可能会更容易。

bugs——作者 Xkcd

分析:通过分析网站日志,人们可以获得更多关于网站高峰时间的信息,或者流量来自哪个地区,或者用户在特定页面上花了多少时间等等。通过在日志文件中记录更多数据,您可以进一步分析用户行为,这可能会改善用户的整体体验。

大学网站—作者 Xkcd

我应该在日志中包含什么?

要记录的信息是主观的,取决于特定应用程序的上下文。但是,建议至少包括以下信息:

时:记录事件的时间戳
:应用名或用户名
其中:事件的上下文(登录模块、文件上传模块等。)
What :活动类型或错误类别(数据库错误、文件 I/O 等。)

切记不要在日志中包含任何敏感信息。

日志记录级别

Python 为此提供了一个内置模块,我们将在下面探讨。在进入代码之前,让我们看看这个包提供的不同级别的日志记录。“日志记录级别”主要讨论我们的日志中包含的信息类型。有 5 个这样的级别:

来源:Python 官方文档

根据我们的具体需求,我们可以选择一个或多个日志记录级别。它们都有一个与之相关联的数值。通常,我们选择这些级别中的一个,大于或等于所选日志级别的所有其他级别都会被捕获到我们的日志文件中。让我们借助一个例子来看看这一点。

来源:Python 官方文档

在下面的代码片段中,在第 1–7 行之间,我们正在导入 python 日志 模块,创建一个名为“ MY_FIRST_logger ”的 LOGGER 对象,并将日志记录级别设置为“ 警告 ”。这告诉程序不要捕获低于“警告”级别的日志(即调试&信息)。

从第 9–13 行开始,我们简单地指定了一个文件处理程序,并将其附加到我们的 logger 对象上。

在第 15–19 行,我们向上面列出的所有不同的日志记录级别发送消息。

运行这段代码后,让我们看看日志文件(my_log1.log)的内容。如下所示,它只打印“警告”及以上级别的记录。如果我们将日志记录级别设置为“DEBUG ”,那么所有的行都会出现在日志文件中。

my_log1.log 文件的内容(来源:作者)

可以使用参数 logger.level 检查记录器的当前级别。

***print(logger.level)
30***

接下来,让我们将这个 logger 函数添加到一个执行两个整数的除法并返回余数的程序中。我们还将在日志记录中添加更多信息,如时间戳、上下文等。这里使用的日志记录只是为了说明,可能不一定相关。在异常捕获块中添加这些日志命令是一种常见的做法,这样可以使日志更加全面。

函数“division”用不同的参数调用了 3 次。让我们检查一下日志文件在执行后的样子。

my_log2.log 文件的内容(来源:作者)

如上所述,由于除数为零,对该函数的第三次调用导致了一个 ZeroDivisionError 错误。查看日志,我们可以知道程序未能完全执行(因为计算了“余数”因故障未打印)。但是,因为我们在日志文件中记录了输入参数,所以我们可以从一个合理的起点来判断是什么导致了这个问题,并从那里开始着手。很明显这是一个过于简化的问题,但是对于一个有几十种方法的更复杂的应用程序,这是我们必须考虑的。

现在,我们可以根据我们的具体需求选择一个或多个上述级别,并且基于所选的日志记录级别,它们将显示在日志文件中。通常在生产中,它被设置为 info 及以上。

在结论中,我们探讨了在我们的开发过程中使用日志模块背后的动机。我们还浏览了不同级别的日志记录,以及如何在 Python 代码中实现它们。

非常感谢您的阅读,我希望这篇文章能让您对在您的下一个项目中使用 loggers 有一个基本的了解和认识。

您可能还喜欢:

* [## 面向初学者的 10 行人脸检测

使用 Python OpenCV 在图像和视频中检测人脸的介绍。

towardsdatascience.com](/face-detection-in-10-lines-for-beginners-1787aa1d9127) [## 使用 Streamlit-Python 向您的仪表盘添加动画图表

利用 ATP 网球排名数据对比网球四大

towardsdatascience.com](/add-animated-charts-to-your-dashboards-with-streamlit-python-f41863f1ef7c)

参考资料和进一步阅读:

[## 日志 HOWTO - Python 3.8.5 文档

日志记录是跟踪某些软件运行时发生的事件的一种方式。该软件的开发人员添加了日志调用…

docs.python.org](https://docs.python.org/3/howto/logging.html)*

为什么要关心粒子物理?

原文:https://towardsdatascience.com/why-should-you-care-about-particle-physics-c7770d684ed?source=collection_archive---------27-----------------------

从万维网到尖端人工智能,没有它我们将一事无成

阿特拉斯粒子探测器。欧洲核子研究中心提供

W W 惶然坐在火车上,前往工作。我正在研究一篇研究论文,而你却在上下打量我。

“你为什么会成为粒子物理学家?”

“因为我喜欢,”我直截了当地回答。

是的,但是——你的工作是由政府资助的。“所以很明显,你所做的事情应该会引起公众的兴趣,”

是的,当然。科学总是公众感兴趣的。这是因为对世界如何运转感到好奇是人类的天性。科学是找到答案的最佳途径,”

当然,但是我们不应该用科学来解决更大的问题吗?还有比搞笑小颗粒更重要的东西!癌症、人道主义危机、战争……

今天的科学是明天的技术

“你是对的,”我承认。当然,这些问题更为紧迫,我们绝对应该资助科学家和组织去解决它们。

但是我们也应该资助粒子物理学家。想想看:爱因斯坦在一个多世纪前发表了他的相对论。然而,如果没有它,我们今天就不会有 GPS,”

真的吗?我不知道。“这是为什么,”

嗯,全球定位系统和绕地球轨道运行的卫星一起工作。你在地球上的位置是根据这些卫星到你的设备的距离计算出来的。但是你需要考虑到它们绕地球运行的速度非常快。爱因斯坦的理论预测,对于快速移动的物体,时间会走得快一点。如果我们不考虑这一点,全球定位系统会非常不准确,你几乎无法使用它。

[## 为什么没有广义相对论 GPS 就不能工作

GPS 就像太空中的大钟!而且它的时间跑得比我们快……大英百科全书解释了它是如何工作的。

www.britannica.com](https://www.britannica.com/video/185396/GPS-satellites-relativity)

哦,哇。所以,如果政府没有资助爱因斯坦做他的理论,我们还会在没有现在位置的情况下使用地图吗?

事实上,无论如何你都会有全球定位系统。爱因斯坦是一个例外——他在做专利律师的时候,利用业余时间进行物理研究。他没有得到任何发展自己理论的资金。

看到了吗?“你已经过时了!”你脱口而出,脸上带着羞怯的笑容。

哦,不!没有粒子物理学的资助,我们就不会有万维网。

“什么?”

你没听错。万维网是由欧洲粒子物理研究所的粒子物理学家发明的。

[## 网络简史| CERN

万维网的起源,以及它的发明者蒂姆·伯纳斯·李的最初提议

home.cern](https://home.cern/science/computing/birth-web/short-history-web)

那些家伙一定是天才。“但是他们为什么不专注于他们的粒子呢?”

“你看,”我开始说道,“在欧洲粒子物理研究所,每年都会产生大量的数据。许多研究人员只在欧洲粒子物理研究所呆一两年,然后继续在他们自己的实验室从事他们的项目。因此,科学家们开发了一个系统,可以从任何地方获取信息。瞧,万维网诞生了!

哇哦。“我不知道。”

没有粒子物理学家的贡献,今天的互联网将是不可想象的。克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片

我微笑。是的,如果三十年前没有发生这种事情,今天的世界可能会是一个非常不同的地方。

好的,但那是不久前的事了。那么为什么今天人们还在那里工作呢?“我们不是在浪费钱吗,”

嗯,首先,我们对基本粒子还是很好奇的。这是主要的动机。希格斯玻色子 已经被发现,但是仍然有很多我们想要解开的谜团。

另外,这个叫做万维网的粒子物理学工具得到了广泛的应用。CERN 内部和周围不断开发新的工具。为什么这些不能对公众有用呢?

“那会是什么样的工具,”

比如机器学习和人工智能。粒子物理学家是这些技术的最早开发者和采用者之一。他们帮助理解他们收集的大量数据。

[## AI 你准备好了吗?数据驱动投资者的 Rhea Moutafis

正如我们今天所知,人工智能正在改变生活

medium.com](https://medium.com/datadriveninvestor/are-you-ready-for-ai-5301640e6c0d)

这么说,粒子物理学是一门包含大量数据的科学?

没错。这就是为什么欧洲粒子物理研究所和世界各地的粒子物理学家在开发这些算法时处于最前沿。这并不意味着他们是唯一的参与者——还有许多计算机科学家、数据工程师和其他相关人员。

但是粒子物理学家确实在帮助推进这个领域,因为他们需要这些工具来处理粒子数据。“我们仍处于起步阶段——但你可以期待人工智能以类似于万维网的方式改变世界。”

我们会看到这是否会发生…说到技术革命,还有量子计算。这在未来也很重要,对吗?粒子物理学家也研究这个吗?

[## 量子互联网时代来临了吗?

它可能会改变我们今天所知的世界

medium.com](https://medium.com/@rheamoutafis/is-the-era-of-quantum-internet-upon-us-c1e2c73382f0)

没那么多。量子物理学与粒子物理学有很多联系,但它们并不相同。与此同时,量子计算,尤其是量子互联网,可能会彻底改变整个科学计算。粒子物理学家可以从中受益,就像许多其他科学分支一样。谁知道这会带来什么样的技术和社会进步呢?

“是啊,谁知道呢,”你回答,凝视窗外。听起来确实很酷。粒子物理学似乎在每个人的生活中扮演着相当重要的角色,但以你意想不到的方式。

“你完全正确,”我回答道,当我们走向车门准备下车时,我心满意足地微笑着。

你必须、应该和不应该使用乳胶的理由

原文:https://towardsdatascience.com/why-should-you-learn-latex-or-at-least-give-it-a-try-8d0f3218b8e?source=collection_archive---------6-----------------------

最好的排版系统是开放的、免费的,它已经存在了 30 多年

阿玛多·洛雷罗在 Unsplash 上的照片

如果你必须写下一份文件,你会运行你默认的文本处理器(可能是 MS Word ),甚至不考虑任何其他选项。这款处理器可能满足您的所有需求。我敢说 95%的用户都不知道什么是 LaTeX。这完全没问题。然而,很可惜。因为 LaTeX 是有史以来最成功、最令人惊叹的自由软件项目之一。它已经存在了三十多年,有两位图灵奖获得者直接参与了它的设计和实现。乳胶一定有特别之处。希望在读完这篇文章后,你会考虑尝试一下。

我不会展示如何使用 LaTeX,因为周围有很多精彩的教程。我只会列举你什么时候必须,应该,不应该使用 LaTeX。

一点历史

唐纳德·克努特(1974 年图灵奖)于 1968 年出版了他的第一版计算机编程的艺术,当时他 30 岁。那时,书籍是使用 monotype 设置印刷的。Knuth 对最终的印刷很满意。然而,1976 年的第二版不得不再次排版,因为原来的字体已经不再可用。当克努特收到校样时,他很失望。他发现他们低人一等。

他致力于设计他的排版系统。我们说的是七十年代末,当时数字排版本身就是一个有待解决的问题。史蒂夫·乔布斯本人为这个话题做出了贡献。Knuth 计划在 1978 年休假一年来完成这个项目。他低估了这项任务的复杂性。最终的解决方案直到 1989 年才准备好!Knuth 将这种语言称为 TeX,每个字母都是大写的希腊字母 tau τ、epsilon ε和 chi χ。特克斯是τέχνη (techne)的缩写,意思是“艺术”和“工艺”。克努特一直坚持你应该把它读成/tɛk/.

当莱斯利·兰波特(2013 年图灵奖)开始使用 Knuth 的 TeX 时,他开始为自己的目的编写一些宏。LaTeX 只是 LAmport 的 TeX,它是 TeX 之上的一组宏,使之更容易。这是我们今天的主要收藏。

乳胶可以做什么?

有了 LaTeX,你可以不费吹灰之力就拥有高质量的排版(我认为是最好的)文档。因为它是免费的。不费吹灰之力。是的,毫不费力。这个索赔是巨大的。每个人都可以用一个免费的、几乎可以在任何地方运行的软件,写出纯文本和使用标记来获得专业的结果。这就是 LaTeX 成为学术界和工程界标准的原因。

这听起来很棒……但是正如你从这篇文章的标题中可以预料到的,它有一些缺点。最主要的是学习曲线。LaTeX 不是一个所见即所得的解决方案,需要一个学习期。让我给你一些指导,告诉你什么时候必须、应该和不应该使用它。当然这一切都来自于我使用 LaTeX 超过 15 年后的观点和经验。

什么时候必须使用乳胶?

  • 你是在学术界,尤其是在任何 学科。在这种情况下,手稿就是一切。内容真的很重要,需要大量的工作。在博士论文的情况下,你必须考虑花一些时间学习 LaTeX,以使你的最终结果有所不同。我看过用 MS Word 写的博士手稿,我不得不说,不知何故(对我来说),它降低了手稿的价值。
  • 你有丰富的参考书目。专业著作可能会管理数百篇引文。引文必须有一致的格式,否则你的参考书目部分会很乱。为了节省时间,必须搭配 LaTex + BibTeX。用引用条目填充 BibTex 文件,标记它们,并使用 latex 文档中的标记作为参考。编译器会完成剩下的工作。我知道有针对 MS Word 和其他文本处理器的插件和解决方案。但是记住,三十年了,这个问题已经用明文解决了。从我的经验来看,这些插件很麻烦。
  • 您正在使用公式。插件可以轻松管理公式,如:

其他公式如

可能写不出来。管理数学公式的每个像样的解决方案都是基于 LaTeX 的。为什么不直接用?

  • 你希望数字尽可能使用最好的质量。诸如 SVG 之类的格式不能用于您的文本处理器。使用 LaTeX,您可以生成嵌入了 SVG 图形的 PDF 文档。没有多少解决方案能提供这样的东西。
  • 你想要免费的解决方案
  • 你想让它向前兼容。乳胶已经存在三十多年了。我们可以对旧文件进行排版,看看它们原本是什么样的。
  • 一个入口点,多种输出格式。因为 LaTeX 是一个排版系统,你可以得到 DVI、PDF、HTML、XML 等格式的输出。只有一份文件。
  • 忘记文档布局。LaTeX 有点像 HTML + CSS。一旦你定义了文档结构,你就使用了一种标记语言,编译器会帮你把所有的东西都联系起来。不再用双倍行距而不是一倍行距分隔段落。

什么时候应该使用乳胶?

  • 您是 LaTeX 新手,您必须开始一个新项目,并且您正在寻找它提供的所有优势
  • 您希望您的文档在众多文档中脱颖而出。你会的。LaTeX outcomes 有一个人人都欣赏的独特品质。
  • 你正在考虑写一本书、一篇文章或一份手稿,也许会自己出版。随着亚马逊自助出版等平台的采用,这是一种常见的情况。有了 LaTeX,你可以从原始文本到高质量文本。epub,。mobi 电子书文件。

什么时候不应该使用乳胶?

  • 您的文档已经以另一种格式编写。内容物很可能容易被转移到乳胶中。然而,文档的布局可能很难得到。
  • 你在做协同工作,你是唯一的乳胶从业者。不要进入乳胶。想都别想。我的经验是,在开始一个共享的 LaTeX 项目后,你的同事会抱怨,你最终会在截止日期前两个小时将所有东西都转移到一个普遍理解的格式。
  • 你的文档布局对你来说意味着一切。你正在考虑一个迷人的打印,有 30 种字体,文本行穿过正文,图像在文档的每个可能的地方,等等。那么很可能 LaTeX 不是你的候选人。想想 QuarkXPress。

当人们抱怨乳胶时,他们会说…

  • 。LaTeX 的学习曲线比 MS 要陡峭得多,这是事实。然而,获得一个基本的 LaTeX(文本、图形、标题、表格)文档并不困难。外面有一百万个例子。复杂性来自于理解 LaTeX 使用的概念,比如浮动对象。
  • 我看不到我在做什么。LaTeX 不是所见即所得的解决方案。你必须编译然后检查输出。幸运的是,有一些程序如 TeXMaker 提供了更好的用户体验。
  • 数字没有出现在我想要的地方。这是一个关于 LaTeX 中人物放置工作方式的经典误解。LaTeX 会计算您的图形在文档中的最佳位置。然而,可以使用调节器改变位置。
  • 我不能轻易改变我的文档的布局。这是真的。如果你想建立自己的文档结构,你需要对宏有更深的理解。有一个很好的社区可以帮助你。然而,这可能需要一些时间和努力。幸运的是,已经有大量定义的模板可供使用。

而现在…

如果你已经读到这里,谢谢。我可能引起了你的兴趣。如果是这样,你可以从这里开始学习一些基础知识,如果你需要一些帮助,请查看 StackExchange

你呢?你使用 LaTeX 的体验是怎样的?你对新手或有经验的用户有什么建议?

本文的第一个版本发表在:https://jmtirado . net/why-you-should-learn-latex-or-at-that-it-a-try/

Kotlin 怎么可能成为 Android 上 ML 的新“Python”?

原文:https://towardsdatascience.com/why-should-you-use-kotlin-for-machine-learning-on-android-6dbab8ac59da?source=collection_archive---------36-----------------------

📱移动机器学习

强大的数组操作使它变得简单。

来源。

如果你是一个编程爱好者,开发 ML 算法听起来会很刺激。重要的事情,首先。假设您要用 Python 创建一个决策树分类器。你为什么要这么做?您很可能会使用 NumPy 进行数组操作,使用 Pandas 处理数据。有些人可能会使用 scikit-learnDecisionTreeClassifier。如果您打算从头开始创建决策树,您可以使用 Python 轻松完成。

kotlinlang.org

像其他编程语言一样,在 Python 中,不需要显式指定变量的数据类型。此外,它有许多软件包可以通过 pip 获得,所以拯救我们的生命!但是随着我们周围边缘设备数量的增加,你可能不得不在 iOS,Android,Rasberry Pi 等平台上编写 ML 算法。说到 Android(因为我是一名 Android 开发人员,你可能已经从故事的标题中推断出来了),在 Java 上使用数组可能是一场噩梦(还记得那些分号吗!).

进入科特林。一种新的 Android 编程语言。它拥有易于使用的数组操作方法,这使得它功能强大且对开发人员友好。它的语法也类似于 Python。在这个故事中,我们学习了一些优秀的 Kotlin 函数,这些函数将帮助你在 Android 中进行 ML 之旅。

1.映射数组中的元素

如果你想对你的一些用户照片进行图像分类或检测,我们可以使用 Kotlin 的map功能。

片段 1

在 Java 中,您可能必须编写一个for循环来遍历文件,并将它们逐个转换为Bitmap

特别是,Kotlin 中的 map()函数对于在数组上执行不同的操作非常有用。

计算存储在数组中的数的最小值、最大值和平均值对于各种 ML 算法都很重要。无论是 Python 中的argmax函数还是maxmin函数,我们都可以在 Kotlin 中拥有它们!

片段 2

在上面的代码片段中,我在map函数中使用了map函数来规范化多维数组。

看看我们如何连续使用map对一个数组执行任何操作。还有更多像groupBybinarySearch这样的方法可能有用。见本文档

2.过滤阵列

例如,在决策树算法中,您需要数组中某个元素的概率来计算信息增益。同样,对于 TF-IDF,我们也需要计算词频和 IDF。使用 Kotlin 的countfilter方法,可以更容易地处理数组中各种元素的概率和频率。

片段 3

在为 NLP 模型预处理数据时,过滤也很有用。可以使用filter函数执行一些任务,比如标记化、删除停用词和标点符号。

片段 4

一个你可以创建一个( word , frequency )词汇表并将其存储为HashMap<String,Int>的例子,

代码片段 5

3.科特林协程

Kotlin 协同程序可以帮助我们在后台线程上运行 ML 模型,从而提供优质的用户体验。如果您使用一个模型来增强图像的分辨率(超分辨率),您会希望异步运行它。在这里了解更多关于使用 Kotlin 协程的信息,

[## 掌握 Android 中的 Kotlin 协程——分步指南

在这篇博客中,我们将掌握 Android 中的 Kotlin 协同程序。我们将讨论协程到底是什么,以及…

blog.mindorks.com](https://blog.mindorks.com/mastering-kotlin-coroutines-in-android-step-by-step-guide) [## 协程概述- Kotlin 编程语言

异步或非阻塞编程是新的现实。无论我们是创建服务器端、桌面还是移动设备…

kotlinlang.org](https://kotlinlang.org/docs/reference/coroutines-overview.html)

听起来不错。在哪里可以看到代码?

我们都喜欢决策树,对吗?你也可以用 Kotlin 编写代码,

[## 在 Android 上从头开始设计决策树

从 Scikit Learn 到 Android 的旅程。

becominghuman.ai](https://becominghuman.ai/designing-decision-trees-from-scratch-on-android-68bf7ee0d01a)

它们很简单,对吗?我们需要有挑战性的东西!前馈神经网络(带反向传播)怎么样?

[## 用 Kotlin(或 Android)编写前馈神经网络

添加层,单位和激活了!

heartbeat.fritz.ai](https://heartbeat.fritz.ai/coding-feed-foward-neural-networks-in-kotlin-or-android-b93efd47538f)

强化学习,Q 学习?我们也供应那个!

[## 问:在 Android 的冰湖环境中学习

探索 Q 学习与冰湖环境,都在安卓!

heartbeat.fritz.ai](https://heartbeat.fritz.ai/q-learning-with-the-frozen-lake-environment-in-android-937cf48dcc52)

Android 上的端到端 FaceNet 实现(100%使用 Kotlin),

[## 使用 FaceNet 在 Android 设备上进行人脸识别

利用 Android 的 FaceNet 和 Firebase MLKit 的强大功能。

towardsdatascience.com](/using-facenet-for-on-device-face-recognition-with-android-f84e36e19761)

更多示例

作为一个热衷于 ML + Android 的开发者,我一直在 Kotlin 中从头开始构建 ML 算法。

结束了

在 Java 中规范化多维数组!来源

那么,Kotlin 对于机器学习来说怎么样?希望你会觉得比 Java 好!如果你有更多使用 Kotlin 的 ML 算法的例子,一定要在评论中提到它,让它出现在这里!感谢阅读!。

为什么是 Sigmoid:概率观点

原文:https://towardsdatascience.com/why-sigmoid-a-probabilistic-perspective-42751d82686?source=collection_archive---------7-----------------------

视频教程

你知道为什么 sigmoid 函数的输出可以解释为概率吗?

飞越太浩湖,2018 年春天,我和 DJI 马维克航空公司拍摄的照片

如果你以前上过任何机器学习课程,你一定在某个时候遇到过逻辑回归。有一个 sigmoid 函数将线性预测值与最终预测值联系起来。

根据您所学的课程,这个 sigmoid 函数通常是凭空产生的,并作为将数字线映射到所需范围[0,1]的函数引入。有无限多的函数可以做这种映射,为什么是这个呢?

需要注意的一个关键点是,sigmoid 的输出被解释为一个概率。很明显,0 和 1 之间的任何数字都不能被解释为概率。解释必须来自模型公式和随之而来的一系列假设。

如果不想看全文,可以在这里看视频版:

“为什么是乙状结肠”这个问题曾经困扰了我很久。网上很多回答都没有切中要害。我发现的这类答案最常提到的关键词是“logit”和“log odds ”,只是简单地将 sigmoid 转换为它的逆函数,这不仅没有解释为什么我们选择 log odds 作为线性预测器的目标,也没有说明这种选择的含义。一些更好的提到了“广义线性模型”,但它们与介绍性课程有着相同的弱点,介绍性课程提到了概念,但没有真正回答“为什么”的内在联系。真正的答案应该可以帮助你从零开始设计这个算法,而不需要事先了解它。当你面对一个只有基本概率和统计知识的二元分类问题时,你应该能够想到“好吧,解决这个问题的最符合逻辑的方法之一就是遵循这个精确的模型设计”。

在这篇文章中,我将尽最大努力以一种易于阅读的方式安排逻辑流程,这样就清楚了 sigmoid 是带有一些重要假设的概率二进制分类的自然设计选择。就像讲故事一样,逻辑不一定是好的和线性的,一些点可能看起来是平行的,但它们都有助于逻辑模型的设计动机。所以如果你关心这个话题,请坐下来耐心听我说一会儿。这将是一篇很长的帖子,信息量相当于机器学习书籍中的一整章。

一些关键词和主题在前面:

  • 线性回归的概率解释,最大似然估计
  • 高斯鉴别分析
  • 逻辑回归的潜在变量公式
  • 从替代方案中获得洞察力:概率单位模型
  • 指数族、广义线性模型和标准连接函数

1.线性回归的概率解释,最大似然估计

这里提到线性回归的原因是为了看看我们如何将它视为数据的概率模型,以及我们是否可以将类似的想法应用于分类。

我们假设我们的目标变量 y 和输入 x 通过(上标 I 是数据点的索引)相关

其中,ε是一个误差项,表示未建模效应或随机噪声。我们假设噪声来自不同的源并且不相关,所以基于中心极限定理它应该是高斯的。我们可以写出分布并将误差表示为目标值和线性预测值之间的差值,

我们称之为给定 x 的 y 的分布,以θ 为参数。我们不以θ为条件,因为它不是随机变量,而是要学习的参数。接下来,我们将可能性定义为

可能性是θ的函数。当被视为 y 和 X 的函数,且θ固定时,它只是概率密度函数。但当被视为θ的函数时,这意味着通过改变θ,我们可以将分布“拟合”到观察到的数据。寻找最佳拟合的过程称为最大似然估计(MLE)。换句话说,MLE 是在假设分布类型(在这种情况下是高斯分布)和参数(在这种情况下是θ,请注意,我们只关心平均值,而不关心方差/协方差矩阵)的情况下,试图找到使观察数据的概率最大化的分布。因为我们假设了独立的观察值,所以我们进一步以下面的形式将它写成单个数据点的乘积。

由于对数变换是单调的,我们使用下面的对数似然来优化 MLE。

为了找到描述生成数据的真实基础模型的最佳高斯,换句话说,就是最佳θ,我们需要找到给出最大对数似然的峰值。最大化上面的表达式等价于最小化下面的项,

现在我们看到了神奇之处:这正是最小二乘法!

简而言之,为什么线性回归使用最小二乘法拟合数据?

因为它试图以线性预测器加高斯噪声项的形式找到最佳模型,使从中提取数据的概率最大化

线性回归的概率公式不仅为我们后来的逻辑回归公式提供了一个鼓舞人心的例子,而且它还展示了模型设计的合理解释。我们将带有高斯噪声的线性预测器映射到目标变量。对于二元分类,如果我们可以做一些类似的事情,那就太好了,即,将带有某物的线性预测器映射到属于两个类别之一的概率(后验 p(y=1|x)),并使用 MLE 来证明模型设计,即它最大化了从我们的参数化分布中提取观察数据的概率。我将在第 3 节展示如何做到这一点,但接下来,让我们看一个激励人心的例子。

2.一个令人振奋的例子:高斯判别分析

让我们考虑对 1D 数据的二进制分类任务,其中我们已经知道两个类的基本生成分布:具有相同方差 1 和不同均值 3 和 5 的高斯分布。两个高斯都有 50k 个数据点,即相同的先验,p(C0) = 0.5 = p(C1)。(Ck 代表 y 的类)

由于我们在数据中只有一维,我们能做的最好的事情就是在某个地方画一个垂直的边界,尽可能的把两个类分开。视觉上很明显,边界应该在 4 左右。使用一种生成方法,其中我们知道类条件 p(X|Ck),这是两个高斯函数,以及先验 p(Ck),我们可以使用贝叶斯规则得到后验

结果绘制如下

我们可以清楚地看到后验中的边界,即我们算法的最终概率预测。红色区域被分类为 0 级,蓝色区域为 1 级。这种方法是一种生成模型,称为高斯判别分析(GDA) 。它模拟连续的特征。你可能听说过它的兄弟离散特征:朴素贝叶斯分类器

现在看看 S 形的后验边界周围,它描述了两个类之间的不确定性的过渡。

如果我们能够在事先不知道类条件的情况下直接建模这个 S 形状,岂不是很酷

但是怎么做呢?让我们解决一些数学问题。

请注意,红色和蓝色曲线是对称的,它们的总和总是 1,因为它们在贝叶斯定理中是归一化的。让我们看看红色的。它就是 p(C0|X ),它是 X 的函数。我们通过将顶部和底部分成以下形式,对前面的等式进行了一点修改,

对于右下角的项,我们可以取消先验,因为它们是相等的,并插入高斯条件句。

好吧,这很好!我们在 exp()里面有一个 x 的线性函数,如果我们设 z = -2x + 8,写出它的后验,就变成了,

这就是逻辑 s 形函数!如果你问为什么 z 有负号,那是因为为了方便起见,我们希望 p 和 z 在相同方向上是单调的,这意味着增加 z 将增加 p。这种情况的逆过程被称为对数几率logit ,这是我们可以使用线性函数建模的部分。

回头看看上面的逻辑流程,到底发生了什么,使得有一个 sigmoid 形式的后验概率和 x 对 z 的线性函数成为可能?这将为我们提供一些见解,以决定何时我们可以这样对分类建模。

对于 sigmoid 形式,您可以看到它自然地来自两个类别的 Bayes 规则,即目标变量的 Bernoulli 分布。它不要求类条件句是高斯型的!可能有一族分布具有相似的指数形式,符合我们上面的推导!只要输出 y 是二进制的,输入 X 在它们的类条件分布中就可以有一定的灵活性。

接下来,z 的线性形式。在本例中,我们有两个高斯函数,方差相同,先验为。这些事实让我们在推导中,抵消了先验和 X 的二次项。这个要求看起来挺严格的。事实上,如果我们改变高斯函数的形状,决策边界就不再是一条直线。考虑下面 2D 的例子。如果两个高斯函数具有相同的协方差矩阵,则判决边界是线性的;在第二张图中,它们具有不同的协方差矩阵,判定边界是抛物线。

来源:K. Murphy,机器学习:概率观点

这告诉我们,如果我们使用 sigmoid 函数和线性边界直接对后验模型进行建模(判别方法),这也被称为逻辑回归,与 GDA 的生成方法相比,它有一些优点和缺点。

  • GDA 具有比逻辑回归强得多的假设,但是当高斯假设为真时,它比逻辑回归需要更少的训练数据来实现类似的性能。
  • 但是如果类条件句的假设不正确,逻辑回归做得更好,因为它不需要对特征的分布建模。

在凯文·墨菲的机器学习:概率观点的第 8.6.1 节中,对 GDA 和逻辑回归进行了广泛的比较。我在这里讨论 GDA 只是为了说明这一点

当我们试图用一些假设对一个伯努利目标变量建模时,sigmoid 函数会自然出现。

3.逻辑回归的潜在变量公式

现在回到第一点。我们通过定义带有高斯噪声项的线性预测因子来设计线性回归。我们能在二进制分类的情况下做一些类似的事情吗?是的,我们可以!让我们这样来看,

线性预测值加上此处的误差评估为我们所谓的潜在变量,因为它是不可观测的,并且是根据观测变量 x 计算的。二元结果由潜在变量是否超过阈值(本例中为 0)决定。(注意,为了方便后面的累积分布解释,判定阈值被设置为 0,而不是通常的 0.5。从数学上讲,这里的值是 0 还是 0.5 并不重要,因为线性预测器可以更新偏差项进行补偿。)

如果我们假设误差项有一个 逻辑分布,其累积分布是逻辑 sigmoid 函数(如下并排所示),那么我们就得到逻辑回归模型!

来源:维基百科

将潜在随机变量表示为 Y*,线性预测值表示为 z,累积分布表示为 F,则观察结果 y = 1 的概率为,

我们让 F 成为 sigmoid 函数,所以它在 0 左右对称,

所以我们可以写作,

现在我们达到了目标,伯努利结果的概率表示为线性预测值的 sigmoid!

上面给了我们线性预测器 z 和预测 p 之间的关系,函数 F,或者机器学习上下文中的激活函数就是逻辑 sigmoid。激活函数的逆函数称为链接函数,它将预测映射回 z。它是逻辑回归中的 logit

概括地说,推导基本上是说如果我们假设误差项具有逻辑分布,我们的伯努利结果的概率是线性预测值的 sigmoid。

如果你仔细观察推导,这个公式并不需要一个逻辑分布来工作只需要在 0 附近对称分布。什么是合理的替代方案?一个高斯!

如果我们假设误差是高斯型的呢?

它实际上给了我们另一个与逻辑回归相似的模型,也能完成这项工作。它被称为概率单位回归

4.另一种选择:概率单位模型

与设计用于解决相同任务的替代模型进行比较是深入了解我们的主题:逻辑回归及其假设的一个很好的方法。

如前一节所述,二元分类的概率单位模型可以用相同的潜在变量公式表示,但存在高斯误差。你可能想知道为什么它不像逻辑回归那样被广泛使用,因为假设高斯误差似乎更自然。一个原因是高斯分布不具有封闭形式的 CDF,并且其导数在训练期间更难计算。逻辑分布的形状与高斯分布非常相似,但其 CDF(也称为逻辑 sigmoid)具有封闭形式且易于计算的导数。

我们来看看推导过程

φ是高斯的 CDF。注意,我们除以σ得到一个标准正态变量,并利用对称性得到最后的结果。这说明我们不能分别识别θ和σ,因为 p 只取决于它们的比值。这意味着潜在变量的规模没有确定。因此,我们设置σ = 1,并以潜在变量的标准差为单位解释θ。

上述推导与逻辑回归的唯一区别在于激活函数被设置为高斯 CDF,而不是逻辑 sigmoid ,即逻辑分布的 CDF。高斯 CDF 的逆函数被称为概率单位,它在这里被用作链接函数

概率单位回归作为一种惯例更多地用于生物和社会科学。它通常产生与逻辑回归相似的结果,并且更难计算。如果你不是这方面的专业统计学家,逻辑回归是首选模型。

还有另一个叫做互补双对数的链接函数,可以用于伯努利响应,我不会在这里详细介绍,但如果你有兴趣,可以阅读一下。

5.指数族、广义线性模型和标准连接函数

到目前为止,我们已经看到了线性回归、逻辑回归和概率回归。它们的主要区别之一是链接功能。如果我们把它抽象出来,并做一些额外的假设,我们可以定义一个更广泛的模型类别,称为广义线性模型。

GLM 对 p(y|x)的期望值进行建模,即μ= E[y | x;θ].对于线性回归,μ只是线性预测器,换句话说,它的连接函数就是恒等函数。但对于其他情况,p(y|x)可以是指数形式或其他形式,如果我们仍然想以某种方式使用线性预测器,我们必须将其转换以匹配输出。

为了跳到 GLM,我们首先利用一个很好的数学形式,将一些最广泛使用的分布组合在一起,这样我们就可以研究它们的共享属性。我们可以查看如下所示的共享表单,而不是查看每个带有各自参数的发行版,

可以调整成这种形式的分布称为指数族(注意,它与指数分布不同)。这里,y 是我们试图预测的目标响应变量。统计学家为这些术语起了一些别出心裁的名字。但我在这里关注的是η项,也称为自然参数出于我们的目的,我们可以假设 T(y)(称为充分统计量)只是 y。因此,自然参数η只是将 exp()中的结果 y 映射到左边的概率。让我们用一个具体的例子来说明我的意思。

对于均值为μ的伯努利目标变量,我们可以写为

自然参数η原来是 logit!

由于这种指数族公式,logit 也被称为伯努利分布的规范链接函数

正如我们之前看到的,概率单位也是一个链接函数,但它不是规范的,因为它不属于这里的指数族设置。

现在我们有能力跨越到 GLM。利用指数族及其自然参数,我们可以根据结果 y 的分布为我们的线性预测器定义一个规范链接函数在伯努利结果的情况下,这种方法为我们提供了 logit 链接和逻辑回归。

指数族给了我们很多好的性质。表明它们的对数似然总是凹的(等价地,负对数似然总是凸的),并且它们的基于梯度的优化共享相同的形式,因此我们总是可以使用一些迭代算法来找到最佳拟合

除了伯努利分布,其他一些著名的指数分布包括高斯分布、泊松分布、伽玛分布、指数分布、贝塔分布和狄利克雷分布。

要为机器学习任务选择 GLM,请考虑目标变量 y 的类型。例如,

  • 如果 y 是一个实数值,使用高斯(最小二乘回归)
  • 如果是二元的,用伯努利(逻辑回归)
  • 如果是计数,使用泊松(泊松回归)

等等。

摘要

在介绍性的课程和书籍中,解决方案经常在没有充分理由的情况下强加给读者。从许多不同的资源中寻找线索并理解它们并不容易。希望这篇文章能为有疑问的人提供一个比较全面和直观的答案。学习的目标不仅仅是知道如何,还要知道为什么,这样我们才能在实际应用中概括我们的学习。

这个话题引出了广义线性模型这个更广泛的话题。glm 是一类强大的模型,没有像深度学习一样受到关注。在许多情况下,正确应用 GLMs 可以完成工作,同时使您的生活更加轻松。与深度学习技术相比,GLM 的优势在于数学的简单性和经过充分研究的可解释性。对基础理论的深刻理解也可以帮助机器学习研究人员和实践者开发新的方法。如果你有兴趣进一步探讨这个话题,我推荐 Philippe Rigollet 的麻省理工学院 18.650 应用统计学讲座和我的参考资料。坚持学习!

上看我的其他帖子,或者在 上关注我的【推特】

参考

  • 主教。模式识别和机器学习。斯普林格,2006 年。第四章。
  • K. P .墨菲。机器学习:概率观点。马萨诸塞州剑桥。[美国]:麻省理工学院出版社,2013 年。
  • 吴恩达的机器学习讲座和笔记,第一至第三部分。
  • 罗德里格斯(2007 年)。广义线性模型讲义。网址:http://data.princeton.edu/wws509/notes/
  • 麻省理工学院 18.650 统计学应用讲座菲利普·里戈莱特https://www.youtube.com/watch?v=X-ix97pw0xY

为什么智能软件在人工智能炒作了十年之后仍然让风投们兴奋不已

原文:https://towardsdatascience.com/why-smart-software-remains-exciting-to-vcs-even-after-a-decade-of-ai-hype-dd6a690b878c?source=collection_archive---------32-----------------------

奥尔加·塔科夫斯基(Olga Tarkovskiy)描述的 Gartner 炒作周期。

竞争的加剧和对盈利能力的重新重视将使智能软件成为首席执行官们的首要任务

竞争将加速智能软件的采用

公司赚取利润要困难得多。过去 20 年,竞争扭曲了利润分配。前 10%的公司现在贡献了 80%的利润。虽然企业利润名义上将继续增长,但利润率预计将从 GDP 的 10%上升至 8%。数字化和采用智能软件是生存的关键。

高管们知道这一点,也有压力。Gartner 最新的首席执行官调查显示,与前几年相比,盈利能力成为重中之重。不幸的是,削减人员和预算是实现这一目标的首选手段。幸运的是,技术被视为下一个最佳解决方案。我认为智能软件是最好的解决方案。

什么是智能软件?它是一种软件,使用独特的内部和外部数据源,通过数据驱动的洞察来交付业务成果。人工智能的商品化和云服务提供商的可用性使得创建智能软件比以往任何时候都更容易。

智能软件有真正的价值。麦肯锡的研究显示,只有 3%的公司是“人工智能高绩效者”,即在商业活动中采用人工智能的公司。这些公司的收入增长或成本节约超过 10%的可能性是其他公司的三倍或四倍,这对利润率有明显的影响。

虽然人工智能已经成为精灵之尘近十年了,但它的应用还没有跟上。58%的公司在至少一个职能或业务部门的流程或产品中嵌入了至少一项人工智能功能。有多少人收养了两个或更多?30%.五个以上?3% 。企业距离前沿还有很大差距。这意味着企业家仍然有很大的空间来构建下一代智能软件,以定义行业和专业人士的工作方式。

我感兴趣的智能软件类型

智能商务应用

运营需要更加高效。但这意味着什么呢?这意味着公司职能部门需要更有效率——财务、人力资源、营销等。例如,将处理发票的时间从一天减少到一秒钟。在过去的十年中,IBM 和甲骨文公司在业务流程管理软件上投入了数十亿美元,但仍有很大一部分工作是自动化的。以目前的人工智能能力,超过 50%的这些活动可以自动化。企业家们发现了这一差距,并开发了三类我称之为商业运作软件的软件:横向的、跨职能的和功能性的。

横向一直是 UiPath、Signavio 和 AppSheet 的 RPA/BPM/No-code 方法。企业中有多个流程,在整个企业的单一界面中拥有自动化功能是一个强大的工具。

跨职能是指跨越不同职能的流程。合同管理就是一个很好的例子。DocuSign 是这方面的先驱,现在我们看到像 Lexion 这样的下一代创业公司正在利用机器学习的最新进展,从复杂的文件中准确提取信息,以提醒相关方履行义务。

功能性是指解决特定功能流程的解决方案。例如,应用程序跟踪系统主要是为人力资源团队设计的。Greenhouse 是这一领域的先锋,现在我们看到了下一代智能软件。Checkr 通过自动化流程和使用 NLP 对刑事指控进行分类,使用机器学习来加快背景调查。有 200 种独特的方式来报告指控被“驳回”。

GTM 软件(销售和营销)将继续令人兴奋,因为增长仍然是重中之重,但盈利能力的重新重要性将使商业空间更加令人兴奋。

智能垂直应用

解决特定行业痛点的垂直应用也很有吸引力。一些行业在数字化方面继续落后,更不用说人工智能了,因为数字化是先决条件。这为拥有领域和机器学习专业知识的创始人提供了一个机会,他们可以开发专有的数据集和解决方案,与现状相比,这些数据集和解决方案具有更大的优势。竞争迫使数字化程度较低的公司加快采用智能软件。发展缓慢的行业已经见证了“全栈”创业颠覆了他们的行业。零售领域的亚马逊 vs 沃尔玛。交通领域的优步 vs 出租车。现在,我们看到它发生在数字化和生产率增长较低的地区。物流领域的 Flexport。医疗保健的发展。农业中大量存在。

以下是一些初创公司构建智能应用来解决制药和农业领域特定流程痛点的例子。这些行业尤其令人感兴趣,因为它不仅与提高企业利润密切相关,还与直接拯救和改善生活密切相关。

在制药领域,FDA 要求在批准治疗前进行广泛的临床试验。每年有数以万计的患者注册,然而 85%的试验被延迟,主要是由于患者招募的延迟。每一天的延误都会造成几十万到几百万的损失。Deep 6 AI 将不同的数据集缝合在一起,在几分钟内而不是几个月内识别出高质量的预期患者。通过使用公共和专有数据集模拟合成对照患者,Unlearn Health 更进了一步。这不仅使所需的患者数量减半,而且也给了所谓的对照组患者接受有效治疗的机会,而不是被排除在对照组之外。

在农业领域,Aquabyte 通过使用高分辨率计算机视觉来计算海虱(对鲑鱼来说是一种致命的寄生虫),确定鱼的健康状况,并优化饲料数量,从而提高了养鱼效率。Taranis 为农场提供叶片级分辨率的航空影像,以便更好地管理作物。它甚至可以识别和计算一片叶子上的昆虫数量。每年因病虫害造成的损失高达 3000 亿美元。

开发智能应用程序的工具

随着数据成为智能软件的中心,我们需要工具来处理数据太少的问题,以及最近出现的数据太多的问题,也就是数据扩充的问题。在过去的几年里,数据标签公司作为交钥匙解决方案出现。最近,出现了两种互补的解决方案,它们采取了不同的方法:模拟生成更多的数据,以及(由于缺乏更好的术语)数据压缩——不是魔笛手意义上的压缩。模拟是一种相对更成熟的解决方案,像 MightyAI(被优步收购)和 AI Reverie 这样的计算机视觉初创公司提供了建立更好的计算机视觉模型的解决方案。数据压缩有不同的观点,因为数据越多不一定越好。保留好的数据,扔掉坏的。像 Gradio 这样的公司评估未标记的数据,并丢弃无用的数据。它不仅提高了模型精度,还降低了存储成本,加快了模型训练。

即将到来的深度潜水

在接下来的几个月里,我将深入探讨我感兴趣的特定领域,并更多地讨论每个领域背后的驱动因素。如果你正在一家初创公司从事所讨论领域的工作,你会很乐意与人交谈,只是呆在外面。

注:观点是我自己的。同样在 kenn.io.

为什么中小型企业必须采用不同于大型企业的分析方法

原文:https://towardsdatascience.com/why-smes-must-approach-analytics-differently-to-large-enterprises-e9c587b2b6c6?source=collection_archive---------39-----------------------

许多人在一级防范禁闭期间开始学习新技能,其中最受欢迎的是数据科学。唯一的问题是,这些课程通常是基于大公司使用的方法,因此对中小企业不实用。

原因:外推

好吧,为什么?

想象一下,有一袋 5 公斤重的大米,每一粒大米都代表你的产品/服务的一个潜在客户。一粒谷物的质量代表了潜在客户的预算。

你的公司需要知道单个颗粒的平均质量是多少。这代表了潜在客户必须花费的预算。

你购买 50 克大米作为测试数据集,测量每粒大米的质量并记录下来。这需要一段时间,但你会完成的。

良田中吉竹Unsplash 上的照片

(免责声明:数据科学不是一个简单或容易的过程,请做好长时间投入的准备,因为“在 10 分钟内构建一个tensor flow机器学习模型”的文章听起来很好,但在现实世界中并没有那么简单。)

你算了一下,完美的工作完成了!您的公司预算购买米粒,但是您发现每粒米粒的质量低于您在测试中计算的平均值。因此,此次购买的投资回报低于预期。

你的方法没有任何问题,但是你做了一个危险的假设:

“你的测试数据集代表了大米的整体。”

为什么这很重要?SME 通常没有能力收集足够的测试数据来获得整个数据集的代表性样本。

这就是中小企业与大企业的差距所在,因为中小企业的预算限制意味着这些测试只能在一小部分潜在客户身上进行。然而,对结果的解读方式往往与大型企业相同,在大型企业中,结果代表了更大比例的潜在客户****

作者图片

这对大公司有用,因为他们的预算足够高,可以接触到一定数量的潜在客户,从而对其他人的行为做出良好的预测。对于中小企业来说,预算并没有延伸到这一步,他们往往连 1%的潜在客户都达不到。

这个概念被称为外推,是一种有用的技术,但只有当您外推的数据代表整个数据集时才有效。

作为一个中小企业,你正处于一个两难的境地。你没有足够的预算来获得足够的数据,所以推断可能会给你带来不正确的结论。然而,如果没有一些数据,你会觉得你在完全盲目地做决定。

对于 SME 来说,思考你的方法是至关重要的。如果你是在推断,了解你的样本代表真实数据的比例是很重要的。使用我之前的例子,首先确定有多少米粒存在,然后看看你的样本代表的比例。

如果有 5 公斤的大米,但您的测试数据只有 5 克,那么当应用于 5 公斤的大米时,测试结果不太可能相似。这将根据数据而变化,有时数据点的变化会小得多,因此你不需要太多的测试数据来做出可靠的预测。

我想说的是,你可以使用最先进的分析和统计技术,但是如果你不考虑你要解决的问题的背景,那么你的模型再好也没用。在现实世界里是行不通的。

那么,中小企业能做些什么来解决这个问题呢?

  1. 首先花更多时间了解问题,而不是直接构建解决方案。相信我,从长远来看,会让你少很多痛苦。
  2. 不要孤军奋战,有比大多数人意识到的更多的数据。寻找公共数据或与其他 SME 合作,你拥有的数据越多,你就能更好地理解问题。(Twitter API、世界银行数据集、政府数据集、Data.world 都是很好的起点,不会让你付出任何代价)。**
  3. 除非你有真正可证实的证据来支持你的主张,否则不要做任何假设。分析的目标不是确认你的偏见(有意识或无意识),而是理解实际发生的事情。

如果你有兴趣讨论文章中提到的任何事情,以及它可能对你的组织产生的影响,请不要犹豫,通过LinkedIn联系我。

为什么在冠状病毒的时代,空间是特殊的

原文:https://towardsdatascience.com/why-spatial-is-special-in-this-age-of-coronavirus-8c4f0be8954a?source=collection_archive---------59-----------------------

不,我不是指带有地图的仪表盘,而是更深刻的方式。

Patrick Assalé 在 Unsplash 上的照片

我相信你注意到了地图在几乎每个新冠肺炎仪表板或数据可视化中的普遍使用。如果你已经看过著名的约翰·斯诺(John snow)1854 年的《流行病学之父——伦敦霍乱地图》,那么空间数据分析如何帮助抗击流行病就不足为奇了。

然而,地理或空间数据科学正在以更微妙的方式帮助对抗这种疫情,这些方式并不在聚光灯下,比如一直存在的仪表盘和新冠肺炎案例的其他数据可视化。

我的意思是,我们往往会忘记全球范围内的流动模式,这些模式可以加强对病毒传播的研究和预测。我们也有更频繁的卫星重访世界各地,以监测人类活动。让我们对空间数据科学进行一些创新性的使用和应用,以应对新冠肺炎大流行。

隔离状态下的流动性

尽管对智能手机跟踪数据的隐私问题感到担忧,但它们在新冠肺炎下的使用让我们对社交距离措施下人们的运动有了无与伦比的洞察力。事实上,国家利用这些可用的技术和移动数据集来研究或预测流行病的传播和规模。最近,欧盟委员会规定利用手机的移动数据来应对新冠肺炎的流行病。

聚合的和去匿名化的数据集已经通过不同的计划提供,例如脸书的永久数据谷歌的新冠肺炎社区移动性报告。

为了应对流行病,流动性是我们需要的一项重要信息。正如研究显示的那样,使用在线社交网络等这类数据集被证明对流行病学家和其他希望预测新冠肺炎等疾病传播的人很有用,一项使用脸书数据的研究表明了这一点。

社会联系指数——脸书

以脸书的社会联系指数为例,我们可以了解人们的一般运动模式,还可以模拟概率并预测疾病通过人际接触传播的可能性。

社会联系指数衡量两个地理区域之间的联系强度,以脸书友谊纽带为代表。这些联系可以揭示关于经济机会、社会流动性、贸易等方面的重要见解。(脸书数据为好)

意大利的社会联系例子。

社区移动性报告——谷歌

谷歌还在网上发布了社区移动报告,在新冠肺炎会议期间,世界上大多数国家都可以使用。测量了 6 种类型的移动性(零售和娱乐、杂货店和药店、公园、公交车站、工作场所和住宅)的增减。从伦敦谷歌社区移动性报告的摘录中可以看出,除了居住区,所有这些群体的移动性都有所下降,我们可以看到居住区在家的时间有所增加。

因此,流动性数据不仅可以使我们了解人类在这些困难时期的流动性和行为,还可以帮助建模和研究新冠肺炎的传播以及社会距离预防措施如何影响疾病的传播。事实证明,这些数据集对于解决和减少这种疫情的传播至关重要。

从卫星图像上鸟瞰

从太空观察冠状病毒的影响也是另一个空间数据科学前沿,它说明了这种流行病对世界经济和社会的深远影响。卫星图像可以从鸟瞰图揭示生命是如何在这个疫情下停止的。由于许多集会被取消,通过卫星图像可以很容易地看到空的地方。

麦加大清真寺,或称哈拉姆清真寺,位于沙特阿拉伯的麦加。左(2 月 14 日),右(3 月 3 日)——来源

研究我们在哪里看到最高的下降活动,并应用深度学习和人工智能来检测和分类冠状病毒对这些地方的社会经济影响,对于等待我们的漫长恢复过程至关重要。

气候和新冠肺炎

卫星图像的另一个重要的微妙洞见是人类活动的完全停止如何影响环境。对于气候研究人员来说,这是一个研究气候动态的好时机。由于监测大气的卫星任务的发射,我们现在可以收集和探索人类的足迹和气候。例如,由欧洲航天局(欧空局)和荷兰共同资助的对流层监测仪器(TROPOMI)公开提供的 sentinel 5 数据。

2019 年新冠肺炎和去年西班牙的二氧化氮排放量— 来源

结论

迄今为止所做的空间分析只是冰山一角,使用移动数据集和地球观测数据来揭示这一时期社会经济变化的隐藏模式和见解有着巨大的潜力。世界各地可用的开放和免费的空间数据集在研究和绘制不同交通方式、连通性和移动模式的变化,以及深入了解社会距离和隔离的真实世界动态方面具有更大的潜力。

在抗击新冠肺炎的战斗中部署空间成分的微妙和不那么微妙之处,可能会在冠状病毒疫情期间引出许多未解的问题。为什么世界各国不同地区的死亡率差异如此之大?地理、天气、人口年龄分布、生活方式等条件如何影响冠状病毒的传播或遏制?

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

参考

[1]http://pages.stern.nyu.edu/~jstroebe/PDF/SCI_and_COVID.pdf

[2]https://science . science mag . org/content/early/2020/03/25/science . abb 4218

为什么专门的数据科学项目令人失望

原文:https://towardsdatascience.com/why-specialized-data-science-programs-are-disappointing-a0c6f49978fe?source=collection_archive---------8-----------------------

来自多位数据科学家的想法

UnsplashNeONBRAND 拍摄的照片

我收到的最常见的问题之一是:

我应该参加数据科学训练营或大师赛吗?

我通常建议人们避免这些专门的数据科学项目,因为它们倾向于缺乏严谨性来为学生准备快速发展的数据科学世界。

我认为这些程序极其昂贵,试图利用数据科学热潮。因此,比起培养学生,他们更关注钱。

然而,我不确定我是否过于偏见,所以我在 LinkedIn 上提出了这个问题。我被回复的数量惊呆了。事实上,它们是如此之好,以至于我想试着提供一个总结和一些额外的想法。

不过,总的来说,大多数人似乎同意这些程序通常令人失望,并且没有提供成为一名成功的数据科学家的必要元素。

坚实的基础是关键

到目前为止,我看到的最大趋势是建立基于数学、统计学和计算机科学的基础的重要性。

RiskLens 的首席数据科学家 Tyler Byers 说:

我拿到了 DS 的一半硕士学位。与现有的各种 MOOC 选项相比,我对缺乏严谨性感到非常失望,尤其是考虑到价格问题(edX、Coursera、Udacity 一直是我的首选)。

似乎这些专门的项目通常并不专注于建立一个强大的技能基础,而是试图用足够的知识教授最热门的领域。例如,能够拼凑足够的 Keras 代码用于图像分类。

虽然我认为每个人都需要从某个地方开始,但如果你的学习就此止步,你将没有做好进入数据科学领域的准备。

正如乔·里斯所说:

扎实的数学背景很有帮助。我会说学习基础知识——数学、统计学、计算机科学。

我完全同意。感觉就像最先进的技术每周都在变化,如果你不从根本上理解这些模型是如何工作的,你就无法随着事情的变化而适应和调整。

这更像是给某人一条鱼,而不是教他或她钓鱼。你可能会离开一个有一些额外技能(鱼)的专业项目,但这些技能在进入劳动力市场时很快就会显示出缺乏深度。

也就是说,如果你找到一个专门的数据科学项目,提供强大的基础课程,如统计,微积分和线性代数,这可能是非常好的。

事实上,乔·赫勒在乌达城的纳米度中发现了价值:

Udacity 有一个纳米学位项目,它像关注 w 框架 API 一样关注数学。我很喜欢,也学到了很多。

另一方面,如果你看到的都是高水平科目的课程,你可能会去别处看看。

工作组合

这些类型的项目似乎做得很好的一个领域是确保每个学生在结束时都有一个项目组合。这很好,但是你可以用更少的钱达到同样的效果。正如马特·哈里森所说:

Y 你需要一些能给你带来作品集的东西来谈论。如果你很有动力,你可以免费这么做。💰⌛大多数人积极性不高,因此需要花钱才能感到有动力。MS 和 bootcamp 都能给你一个作品集。(反过来也一样)。🤔🏋️🐍

我完全同意。网上有大量令人惊叹的课程,它们将帮助你获得建立优秀投资组合所需的技能。而且大部分都是免费的!然而,你从自学中得不到的一件事是与一个受人尊敬的项目的联系。虽然这看起来没什么大不了的,但是通过最初的简历筛选是很重要的。

我认为这是专业项目失败的另一个领域。大多数都不是知名大学,即使项目很好,也更容易被招聘者忽略。有趣的是,少数与名牌大学相关的专业似乎缺乏严格性,除非它们是统计学或计算机科学等更传统学位的一部分。

此外,虽然您可能会从数据科学训练营获得一系列工作,但我发现对项目的理解往往是肤浅的。通常,它们需要你做足够的工作来让它工作,但不是真正理解你所开发的东西的内部工作原理。

软技能很重要

Ryan Russon 强调了软技能的重要性:

我可以说,我在美国海军获得了一些最有价值的经验,因为在那里我真正学会了如何有效地与人们和他们的期望合作,这也是我认为数据科学的真正价值所在。

几乎所有的技术课程都忽略了这一点,并且很少帮助学生发展软技能。不过,我认为这可能是一个专业项目具有优势的领域。

他们似乎试图变得更全面,我见过一些课程更侧重于领导力和沟通。这太棒了!但是通常缺乏基本的技术知识。要是有一个既能提供扎实的基础知识又能提供软技能培训的项目就好了。

保持好奇

最后,从评论和想法中可以清楚地看到,无论你选择什么样的项目,你都必须保持好奇心,并不断学习。

学习不会随着你的正规教育而结束。

因此,无论你选择如何学习数据科学,我希望你可以将你对该领域的热情融入到学习生活中。

不过,总的来说,如果你想继续深造,我会确保你选择的任何项目都能提供严谨的基础知识、你有深厚知识的工作组合,还有一个额外的好处——帮助你建立软技能。

不幸的是,似乎大多数专业项目目前都没有达到目标。

你可以在这里看到关于这个主题的所有评论

这篇文章也可以在这里找到。

加入我的 邮箱列表 保持联系。

如何在 SQL 中创建带参数或不带参数的函数

原文:https://towardsdatascience.com/why-sql-functions-raise-this-error-494cc4de5666?source=collection_archive---------37-----------------------

调试这个简单的错误可能会浪费您几个小时的时间。

UnsplashNeONBRAND 拍摄的照片

你不应该经历我在学习用 SQL 编写函数查询时的痛苦经历。在我最终发现括号花费了我很多时间之前,我已经花了很长时间仔细研究了我写的查询。

在本文中,通过查询示例,您将学习如何用 SQL 编写带参数或不带参数的函数。我找出了浪费我时间的简单错误。

下面的查询是一个没有参数的函数,它对 sales 列中的销售额进行求和。我使用了 AdvertureWorks 2012 数据库——销售。SalesTerritory 表—在本教程中。

注意:您可以使用任何其他数据库来遵循本教程。

如何在 SQL 中创建不带参数的函数

第一行创建了一个函数,然后将其命名为“YTDSALES()”。你可以给你的函数取任何名字。当没有参数时,记得在函数名中添加括号。

在下一行中,写下单词“RETURNS ”,后跟您想要的任何名称。我在这里用了" MONEY ",因为我想得到钱的总数。接下来写下关键字“AS”和“BEGIN”。

“将@YTDSALES 声明为 MONEY”出现在第 5 行。您可以将“@”与您选择的任何单词一起使用,而不一定是“@YTDSALES”。

以“SELECT @YTDSALES =”开始第六行,后跟列(SalesYTD),您希望在括号前加上“sum”。你应该包括表(销售。SalesTerritory),它包含列(SalesYTD)。

然后写“RETURN @YTDSALES”和“END”完成函数。运行您的查询。您将看到“命令成功完成”在你的屏幕上。

您刚刚创建了一个函数。要运行您的函数,请运行以下查询:

在上面的第一行,您可以给“@RESULT”起任何名字。

记得包括“dbo”你的函数名。在这种情况下,它是 dbo。YTDSALES()。创建函数时检查第一行,以了解函数的名称。这里,YTDSALES()是函数的名称。

将“PRINT @RESULT”作为查询的最后一行。

运行查询,您将获得指定列中数字的总和。

如何在 SQL 中创建带参数的函数

带参数的函数可以直接提取准确的信息。编写带参数的函数和不带参数的函数几乎是一样的。下面指出两者的区别。

首先运行上述查询来创建一个函数。

运行以下查询查看结果:

带参数的 SQL 函数和不带参数的 SQL 函数的区别之一是括号—()。注意上面查询的第一行,与带括号的查询函数不同,它没有括号!如果您错误地添加了一个括号,您将得到以下错误消息:

要亲身体验这个错误,请在上面创建的函数的第一行添加括号。

其他的区别是这里使用的“组”和“太平洋”这两个词。为了澄清起见,“GROUP”是列的名称,“Pacific”是“GROUP”列中要从中获取数据的地点名称之一。

当查询是有序的(没有括号)时,创建的带有参数的函数给出“Pacific”区域的总数。

结论

带参数的函数和不带参数的函数之间的差别很小。没有参数的函数的第一行以空括号结束。带参数的函数的第一行没有括号。请注意这一差异以及本文中提到的其他差异,以避免花费大量时间调试函数查询。

为什么回火稳定分布?

原文:https://towardsdatascience.com/why-tempered-stable-distribution-no-math-equations-5c91bb64e4e9?source=collection_archive---------30-----------------------

来源:无限可分分布?[ 点击

迈向稳定的分销之旅#0

资产收益的应用:为什么不是正态分布和稳定分布?

嗨,我是卢武铉( ρ )!欢迎来到“稳定分销之旅”系列

  • 第 0 部分:为什么是缓和稳定(TS)分布?
  • 第一部分:什么是厚尾分布?[ 点击
  • 第二部分:无限可分分布?[ 点击

在写这个系列的过程中,我周围的人让我写一篇文章,解释为什么需要它而不涉及数学,我决定总结一下,放在第 0 部分。因此,在这里,我们要讨论的是为什么我们需要“回火稳定分布”。此外,我将尝试在不涉及数学方程的情况下进行解释。

我们开始吧!

来源:什么是厚尾分布?[ 点击

我宁愿从为什么(不是)正态和稳定分布开始,因为调和稳定分布是为了克服这两种分布在资产回报建模中的缺点而开发的。

资产收益分布的尾部比正态分布重,但比稳定分布薄(Grabchak 和 Samorodnitsky,2010)

为什么(不是)正态分布?

  • 正态分布使用方便。两个正态变量的和也是正态的,这在金融应用中很重要 1) 两只股票的和将遵循高斯分布假设股票是高斯的 2)根据对数收益的定义,今天的收益可以写成前“n”天收益序列的和。
  • 易于以封闭形式计算各种风险度量(如 VaR 和 es)
  • 资产收益不是正态分布的。 不适合对分布具有非对称、偏斜和尖峰特性的资产收益建模
  • 尾巴 较轻,即它衰变得太快 (如果你不熟悉尾巴,请查阅第一部分 这篇文章 )

为什么(不是)非正态稳定分布?

  • 优于正态分布。它允许控制分布的偏斜、厚尾和对称程度。
  • 采样频率不一致! 经验估计的尾部指数似乎对更频繁的回报较低,对不太频繁的回报较高(Gencay 等人,2001)。
  • 这意味着你可能会发现每日(不太频繁)的回报有一个有限的方差,而微观二次抽样序列的回报有无限的方差。[ 尾巴悖论 ]
  • 对于非正态稳定分布,方差和高阶矩都是无穷大!然后发生了什么?

金融应用中的无穷方差问题

如果我们在金融应用中没有有限方差,会发生什么?两个最常用的金融应用变得毫无意义。

均值-方差投资组合构建

  • 如果方差(和高阶矩)不是有限的,就不能定义均值-方差投资组合。

期权价格建模

  • 为了获得定义良好的期权定价模型,收益分布的均值、方差和高阶矩必须存在。

我们想要什么?

让我们通过对稳定分布的尾部做一些事情来使矩(例如,均值和方差)是有限的,这样我们就有了具有较轻尾部的“类稳定”分布。

由卢武铉编辑,来源:Pixabay

怎么做?方法有很多!

修改尾巴!!怎么会?

1.截断尾部

2.在尾部乘以更快的衰减函数

3.翘起尾巴

更多详情,请参见[ 点击

一些插图

我提供两个例子。第一个是截尾,第二个是 TS 分布的尾部比稳定分布轻,比正态分布重。

截断尾巴!

资料来源:M. Grabchak,卢武铉编辑

正态< TS < Stable

We can see from the below graphs (log scale) that the 回火稳定分布位于尾部正态分布和稳定分布的中间。

资料来源:计算统计手册(第 1031 页)

为什么(不)回火稳定分布?

  • 能够控制一个偏斜的、肥胖的尾巴的水平,并且分布对称
  • 它有有限的时刻!
  • 像稳定分布一样,只有特征函数是已知的。
  • 密度或分布函数不存在封闭形式的公式。
  • 利用快速傅立叶(FFT)技术进行最大似然近似时,统计推断的难度

最后,这里列出了一些类型的调和稳定分布。

1 + 6 种 TS

  • 平滑截断稳定分布(STS)
  • 经典 TS (CTS)
  • 广义经典 TS(GTS)
  • 修改后的 TS (MTS)
  • 普通 TS (NTS)
  • 快速下降的 TS (RDTS)
  • 基姆-拉切夫 TS

摘要

我们讨论了为什么需要“缓和稳定(TS)分布”。我希望这份文件对你有帮助。如果你有任何问题,请在下面评论。我希望你对接下来会发生什么感到好奇。下一次,我将带着“稳定分布之旅[部分。1:什么是厚尾分布?”【点击

参考

  1. 风险值计算中的重尾分布,2010,A. Misiorek 和 R. Weron
  2. 米(meter 的缩写))Grabchak 和 G. Samorodnitsky (2010 年)。“财务回报的方差是有限的还是无限的?一个悖论和一个解释。”量化金融 10(8):883–893。
  3. 资产管理和风险管理中的重尾分布手册,2019,S. Stoyanov 等人。
  4. 《金融模型百科全书》(第 3 卷),241-258 页,2012 年,弗兰克。法博齐

我还为上面所有的参考资料添加了超链接。有关详细信息,请查阅参考资料。如果有我错过的任何事情,我将稍后更新参考。

感谢您阅读本文档。如果你觉得这个文档有用,不要忘记分享它。

  • 第 0 部分:为什么是回火稳定(TS)分布?
  • 第一部分:什么是厚尾分布?[ 点击
  • 第二部分:无限可分分布?【点击

为什么特斯拉不使用激光雷达

原文:https://towardsdatascience.com/why-tesla-wont-use-lidar-57c325ae2ed5?source=collection_archive---------1-----------------------

哪种技术最适合自动驾驶汽车

戴维·冯迪马尔在 Unsplash 上拍摄的照片

几乎每一家从事无人驾驶汽车的公司现在都在使用激光雷达。优步、Waymo 和丰田都用它,但特斯拉不用。我想回顾一下这两种相互竞争的技术能够提供什么,以及我们应该对未来的自动驾驶汽车有什么期待。

激光雷达与视觉

激光雷达是一种通过发射激光并检测它们返回需要多少时间来测量距离的方法。这个想法类似于雷达,但我们使用的不是无线电波,而是激光。这项技术在探测甚至高达毫米的物体时非常精确。

计算机视觉是人工智能的一个领域,训练计算机理解视觉世界。这基本上是对人类视觉的逆向工程。

特斯拉的愿景

(埃隆·马斯克在特斯拉自主日)

特斯拉一直严重依赖视觉,并与激光雷达传感器背道而驰。与此同时,所有其他公司使用激光雷达,似乎并不关心。埃隆·马斯克甚至说:

激光雷达是一个傻瓜的差事…任何依赖激光雷达的人都注定要失败。——埃隆·马斯克

如果你想了解埃隆对技术选择的所有想法,请务必查看他在特斯拉自主日的讲话。

费用

照片由 Pepi StojanovskiUnsplash 拍摄

特斯拉另辟蹊径最明显的原因是成本。在汽车上放置一个激光雷达设备的成本大约为10,000 美元。谷歌及其 Waymo 项目已经能够通过引入大规模生产来略微减少数量。然而,成本仍然相当可观。

特斯拉高度关注成本,确保人们买得起汽车。在已经很贵的汽车上增加激光雷达的价格意义重大。

实际道路应用

照片由 Charlie DeetsUnsplash 上拍摄

最重要的一点,也是会议中高度强调的一点,就是与人类视觉的相关性。作为人类,我们不会为了开车而朝各个方向发射激光。正如埃隆·马斯克所说,汽车也不应该。

我们在路上看到的一切都充满了视觉信息。所有的标志,转弯,十字路口都是为了帮助我们导航。所有这些都是静止的物体,激光雷达能够如此精确地探测到它们真是太好了。

移动物体出现在路上时,问题就开始出现了。人、狗、飞来飞去的塑料袋,都是我们在路上经常遇到的物体。激光雷达无法探测它们是如何移动的,甚至无法探测这些物体是什么。

激光雷达无法区分道路颠簸和塑料袋。这是会议中提到的一个例子,考虑到这一点非常重要。如果我们在高速公路上高速行驶,并且有一个塑料袋,我们不需要快速停车。如果我们撞上了,问题不大。

现在,如果汽车停下来,真正的危险就来了。后面的车可能无法对我们在路中间停车做出如此迅速的反应。这种情况进一步证明了制造自动驾驶汽车时对细节的关注。

特斯拉明确表示,他们的相机和雷达系统能够检测到一个物体是什么。向前看的雷达能够迅速判断前方是否有问题。一旦一个物体进入视线,摄像机将决定这个物体是什么,然后汽车可以对这种情况做出反应。

适应

照片由 Jp ValeryUnsplash 上拍摄

从 Autonomy Day 和埃隆·马斯克的其他采访中,另一个重要的收获是,系统是为了适应而生的。他们谈论了很多关于所使用的神经网络以及该系统如何能够使用所提供的数据来做出合理的决定。

特斯拉竞争对手的一个大问题是缺乏这种适应能力。这些系统中的大多数要么严重依赖带有道路线的高精度地图,要么从未在真实道路上测试过。是的,我们已经看到 Waymo 在城市中行驶。然而,只有大型道路具有高效率的地图。在这些演示中,照明、天气条件和交通都很理想。大多数人不会每天都在这样的路上开车。

更小的道路,有意想不到的转弯和大小变化的车道,更为常见。另外,特斯拉是一辆你可以买到的真车。人们已经驾驶特斯拉汽车行驶了超过 10 亿英里,而 Waymo 只测试了大约 1000 万英里。

特斯拉能够积累的大量困难且不可预测的道路数据是无价的。这就是系统学习和不断改进的方式。这种概念实际上很有前景,因为客户实际上看到了不断的改进。

准确(性)

Jannes Glas 在 Unsplash 上的照片

从康奈尔大学发表的一篇研究论文中可以推导出另一个有趣的观点。本文讨论了如何使用立体相机生成几乎与激光雷达地图一样精确的 3D 地图。

我们可以从这篇论文中得出结论,除了花费 7500 美元购买激光雷达设备,您还可以购买几台仅花费 5 美元的相机,并获得几乎相同的精度。因此,当特斯拉的人说这种硬件很快就会过时时,他们可能有道理。

最后的想法

随着自动驾驶汽车领域投入了多少资金,以及竞争的不断加剧,我们可以相当乐观地认为,这种汽车正在到来。特斯拉是否会成为这样做的公司,我们无法知道,甚至可能不需要知道。事实上,可能有几种方法来开发无人驾驶汽车。我们甚至可能最终看到两者的结合,这并不令人惊讶。

说到特斯拉,我们实际上可以购买这样一辆车。他们被带到世界各地,实际上可以实时观察到进展情况。你不能买 Waymo 或优步汽车。

特斯拉的决定的原因包括在这里,但这并不意味着我们都应该赌特斯拉。也许其他一些公司会先制造出自动驾驶汽车。我们所知道的是,一些公司会这样做,我们应该密切关注该领域发生的一切。

参考资料:

[1]王,杨,曹伟林,加尔格,d,哈里哈兰,b,坎贝尔,m .,&温伯格,K. Q. (2019)。来自视觉深度估计的伪激光雷达:弥补自动驾驶 3d 物体探测的差距。在IEEE 计算机视觉和模式识别会议论文集(第 8445–8453 页)。

[2]自动驾驶评测。(2019 年 4 月 27 日)。 Elon Musk 在相机上对比自动驾驶和自动驾驶汽车的激光雷达[视频]。YouTube。https://youtu.be/HM23sjhtk4Q

[3]霍金斯,A. J. (2019)。Waymo 将向不会与其机器人出租车业务竞争的客户出售激光雷达。2020 年 09 月 07 日检索,来自https://www . the verge . com/2019/3/6/18252561/waymo-sell-lidar-laser-sensor-av-customer-robot-taxi-competition

测试如何完全扭曲冠状病毒致死率

原文:https://towardsdatascience.com/why-testing-completely-skews-coronavirus-case-fatality-rates-c7cbf53ac4c8?source=collection_archive---------15-----------------------

加速测试势在必行。

在传染病爆发期间,如世界目前正在经历的新冠肺炎疫情,了解疾病的致命性至关重要——人们希望知道他们感染疾病后死亡的可能性。使用多种不同的方法来评估这一点,在本文中,我们将描述这些方法,并讨论与获取这些指标相关的困难。

测量杀伤力

疾病致死率有三个主要的衡量标准:病死率(CFR)、感染致死率(IFR)和死亡率(MR)。死亡率可以通过死亡人数除以总风险人口来计算。这告诉我们一个人在人群中死亡的概率。另一方面,CFR 使用相同的分子,但将其除以确诊病例数。也就是说,它表示一个人被感染(并报告它)而死亡的人的百分比。IFR 与 CFR 相同,只是它将死亡人数除以感染总人数。这考虑到了被感染的人,无论他们是否报告。在一个没有病毒病例未被发现并且所有病例都被报告的世界里,IFR 和 CFR 将是等同的。然而,正如我们将要讨论的,这是很难实现的,因为现实中并不是所有的感染都被考虑在内。

测量死亡率

为了测量死亡率,我们首先需要了解感染期间事件的时序。

感染期间的事件年表

这种疾病发病过程的年表有助于我们理解测量真正的发病至死亡间隔的困难。下面是时间表的分解(图 1)。从患病到康复/死亡,整个过程可能需要 2-6 周。

图 1

感染——病毒在你体内扩散,你被感染了。在这个阶段,你可能甚至不知道你已经被感染了。

B. 显示/不显示症状—您可能会也可能不会显示症状。如果没有症状,你就不太可能去做检查。

C. 接受测试——你可能会接受测试,也可能不会。如果你患有这种疾病,但没有进行检测,CFR 是无效的。如果你没有接受测试,你现在就退出了这个过程。

D. 结果——你得到了你的结果。这种滞后在不同的国家差别很大(在韩国你一天就能得到结果,而在美国需要 3-5 天)。在极少数情况下,可能会出现假阴性——例如,如果你是阳性,测试会返回阴性结果——但这种情况非常罕见,几乎可以忽略不计。

E. 住院——根据您病情的严重程度,您可能需要住院,也可能不需要住院(大约有5–20%的人需要住院)

F. 结果——从那以后,你的症状要么减轻,要么康复,要么死亡。

测试值

在像新冠肺炎这样的疫情期间,不清楚有多少人被感染,这使得很难准确测量 IFR。这是因为有许多没有症状的人没有意识到他们已经感染了病毒。这也可能是因为人们可能无法获得检测,检测结果需要很长时间才能处理,或者他们只是不报告自己的疾病。由于这个原因,IFR 将总是小于 CFR,因为它具有相同的分子和更大的分母。

在理想的情况下,如果人群中的每个人都经常接受检测,那么我们就能准确地知道有多少人被感染了。在这种情况下,IFR 将与 CFR 完全相同。然而,许多患有这种疾病的人(如新冠肺炎的情况)没有接受检测,因此没有被列入病死率的分母。不管原因是什么,这严重扭曲了 CFR。为了进一步了解 IFR 和 CFR 之间存在的差异,让我们来看看不同国家是如何协调对新型冠状病毒的检测的。

各国的检测率差异很大,这严重影响了它们的病死率。图 2 绘制了人均测试的 CFR,它清楚地表明 CFR 随着更多测试的实施而降低。德国、韩国和挪威实施了积极主动的测试。相比之下,意大利也进行了大量测试,但他们的反应是被动的;他们只在情况变得严重时才进行测试。尽管 CFR 可能因医疗保健、感染人群的年龄组合、基础设施等而异。,它很可能无法解释这种巨大的偏差。也就是说,除了其他因素之外,这些国家中的低 CFR 几乎肯定是其测试的函数。换句话说,德国的 CFR 更接近 IFR,而印度尼西亚和西班牙的 CFR 要高得多,因为他们主要测试的是已经患病的人。此外,与反应性检测(只对已经患病的个人进行检测)相比,从感染到死亡的过程在主动检测(国家在大规模疫情爆发前进行检测)下要长得多。

关键测量值如何因测试率差异而变化

图 3: CFR 与发病至死亡间隔的关系

在我最近的工作中,我们通过修改发病到死亡的时间间隔和疾病爆发的增长进行了多次模拟,以确定符合实际死亡人数的发病到死亡和死亡率的组合。我们在瑞士重现了这一点(图 3,4)。图 3 显示了发病至死亡间隔和病死率的组合,其中模型和实际数据最接近。从理论上讲,发病到死亡的时间间隔有很大的范围。

图 4:高斯核密度估计

在图 4 中,我们显示了死亡开始的分布以及高斯核密度估计,该估计最小化了模拟死亡数和实际死亡数之间的差异。我们估计 22 天的发病至死亡间隔是瑞士的最佳估计。图 5 显示了许多其他国家的这一数字,分散在人均检测中(点越大意味着病例越多)。

图 5:发病到死亡的时间间隔与人均检测

这表明发病到死亡和检测的流行之间有很强的相关性;广泛的测试导致更长的发病至死亡持续时间。几乎可以肯定的是,如果年龄结构、医疗保健和基础设施相似,每个国家的发病至死亡间隔应该很接近。这一措施的巨大差异明确表明,在检测较少的地方,发病至死亡的时间几乎肯定比实际时间短。也就是说,只有当人们已经生病时才进行测试。

像冰岛这样的国家,随机测试了 5000 多人,发现大约一半测试呈阳性的人没有症状。包括美国在内的大多数国家只检测那些出现发烧、咳嗽等症状的人。这使得发病到死亡的时间间隔更短,从而增加 CFR。因此,由于在不同国家进行的测试实践的差异,很难获得标准化的数字,使得 CFR 难以估计。

牵连

我们不应该相信 CFR—CFR 的变化应该表明年龄、合并症等因素的差异。CFR 目前强烈依赖于测试的事实表明,我们不能依赖 CFR 来确定我们的总体 IFR 或死亡率。

我们应该增加检测— 这不仅能让我们隔离感染者&追踪接触者,还能帮助确定真正的发病至死亡间隔。这将有助于我们计算 CFR。

我们不能相信我们的感染传播模型— 许多预测感染病例数的模型依赖于 R0(基本繁殖数),而 R0 又依赖于传染期的持续时间。然而,这个时间间隔是不可靠的,所以我们不能完全相信这些模型预测的感染数量。

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

为什么冠状病毒死亡率具有误导性

原文:https://towardsdatascience.com/why-the-coronavirus-mortality-rate-is-misleading-cc63f571b6a6?source=collection_archive---------0-----------------------

死亡率可能比我们想象的要高得多。

图片:约翰霍普金斯医学

你可能知道,冠状病毒,或新冠肺炎,是一种导致呼吸系统疾病的新病毒。它的起源可以追溯到 2019 年末的中国武汉。与 SARS、MERS 等其他动物源性冠状病毒不相上下。尽管大多数病例局限于湖北省(武汉是其中的一部分),但它已经蔓延到香港、台湾、日本、德国、美国,甚至可能还有朝鲜。尽管关于该病毒性质及其生长的新细节仍在出现,但我们知道它有一个2-14 天的潜伏期,每个感染者的平均传播次数大致在2-2.5的范围内。截至 2 月 14 日,超过 64,000 人被怀疑/确认感染,近 1400 人死亡。

尽管媒体似乎没完没了地报道该病毒,但许多问题仍未得到解答。真的只有 60,000+确诊病例,还是这个数字被缩小了?死亡人数是否也少报了?病毒每天传播的速度有多快?有多危险?为了让我们准确地衡量它带来的危险,有必要计算病死率(CFR)。即使病毒传播很快,如果人们在感染后没有死亡,它也不是一个大的威胁。

目前,病死率的计算是不正确和误导的。截至目前,是用死亡人数除以感染人数计算出来的。下图显示了湖北省自 1 月 22 日以来的“误导性”CFR。基于这些计算,目前的病死率确定为 2.5%左右。然而,这是不正确的,因为它没有考虑一个非常重要的因素:滞后效应

数据提供JHU·CSSE

什么是滞后效应?

假设 2020 年 1 月 10 日有 100 个人感觉不舒服。让我们跟踪他们一段时间。他们中的一些人在几天的时间里就病重了。一些人康复了,而另一些人继续生病。如果我们能从现在开始快进一年,我们就能准确知道死于这一群体的人数。大多数患病的人会康复,其他人会死去。在这一点上,你可以计算出这个群体的死亡率,死亡人数与最初被感染人数之比。例如,我们可以用这种方法来计算 2002 年在中国爆发的 SARS 的病死率,因为每个感染 SARS 的人现在要么已经康复,要么已经死亡。新冠肺炎的情况并非如此,因为它仍在继续。

在感染过程中,我们有不同阶段的不同人群。也就是说,昨天刚生病的几千人今天不会死;但是今天死去的人可能来自更早的年代。因此,用死亡人数除以感染人数来计算病死率是完全不正确的。正确的方法是分别跟踪每个队列,确定每个队列的死亡率。当然,当疾病完全停止时,这两种方法就会趋同。冠状病毒的流行正在进行,并没有停止,这种方法不会奏效。相比之下,这将与计算 SARS 病死率的工作。

这是描绘它的图解方式。

数据提供 JHU CSSE

x 轴上是群组成员被感染后的天数(他们都在同一天被感染), y 轴上是群组内的累积死亡率(死亡人数/感染人数)。

报告称,出现症状需要 2-14 天,可能还需要几周左右的时间,否则你可能会死亡。因此,不管队列成员的性质如何,死亡人数在最初几天可能为零。

为了便于说明,我们将看两个不同的组。假设一组是来自武汉的 25 岁男性(通过 2 %的 CFR 建模并在 14 天内达到峰值),另一组代表 80 岁男性的队列(通过 5%的 CFR 建模并在 7 天内达到峰值)。我们可以假设后者会比前者上升得更快,达到更高的高度,并更快达到稳定。这意味着,由于免疫力普遍较低,整体健康状况较差,更多 80 岁以上的老人将会更快死亡。心脏病和糖尿病患者以及长期吸烟者也是如此。除了这些因素(非常老和非常年轻的人表现出更多的脆弱性),群组曲线将随着国家、财富等而变化。

那么,为什么我们不能按队列计算并找到 CFR 呢?

这个想法在理论上听起来很简单:找到每天感染的人数,并在队列水平上跟踪他们,我们就可以得到病死率。在实践中,这有点困难。这里有一些挑战。

  1. 感染日期:由于潜伏期不一且仍不确定,因此很难确定感染日期。此外,不同群体的症状会有所不同,记录每个表现出咳嗽或发烧等症状的人会非常耗时。由于新冠肺炎没有明确的症状,咳嗽等不明确的症状很可能是流感或普通感冒的症状。
  2. 被感染的人数:可能有许多人没有接受检测,但却感染了病毒,且下落不明。这甚至更难,因为有些人已经感染,但没有症状。现在,由于武汉人被强制隔离,这稍微容易一些。
  3. 死亡时间:我们不知道人们死于感染需要多长时间,因为人们出现症状的日期可能不同,即使他们都在同一天感染,也可能在不同的日期报告。
  4. 死亡的风险随着年龄、健康状况等而变化:病人和老人比健康人更容易受到伤害。如果每个感染队列中不同风险群体的比例发生变化,病死率也会发生变化。
  5. 死亡风险因地而异:对于任何快速传播的传染病,选择用于确定 CFR 的样本都是有偏差的,因为病毒传播如此之快,影响不同地方的不同人。到目前为止,病死率主要由 1 月份在武汉市感染冠状病毒的人组成。随着病毒转移到不同的地方,死亡率必然会不同,因此,必须代表所造成的威胁,以便采取足够的预防措施。例如,由于人们的免疫力/健康、卫生设施、获得医疗服务的机会等因素,它对索马里人民造成的危险将远远高于对瑞士人民的危险。因此,为了准确评估这种威胁,CFR 应该用每个队列来表示。

理想情况下,我们如何解决这个问题?

我们需要在队列水平上有更多的粒度数据来帮助我们建立 CFR 模型。不幸的是,似乎没有这方面的数据。

三角形图表是按群组计算死亡率的正确方法。我们需要为尽可能同质的群体构建这些三角形图表,以确保某些成员不会扭曲死亡率。年龄、高风险医疗群体和国家是值得关注的细分领域。使用这些,我们可以最准确地测量每组的病死率。

下面是死亡率的三角形图表示例。

数据提供JHU·CSSE

这里,最上面的行描述了较老的组群,较新的组群由较低的行表示。每一列代表他们被感染后的额外一天,方框中的数字代表队列中的累计死亡人数。从右到左对角扫描方框,给出同一天每个群组的数字。

为了对死亡人数进行建模,需要做两个假设。

1)在所有队列中有 5%的病死率。

2)如果有人死亡,他们在感染病毒后 7 天内死亡。此外,数据仅来自武汉所在的湖北省。

数据提供JHU·CSSE

我们可以立即看到最顶行和最底行之间从冷到暖的梯度。这意味着较老的组群开始时规模较小,而较新的组群规模较大,表明了新冠肺炎的扩散。(见上图)

尽管这些信息可以描绘出正在发生的事情的全貌,阐明新冠肺炎病毒传播的基本性质,但该模型有几个不足之处。首先,并非所有信息都可用,因此整行都没有数据。可能有死亡人数没有被计算在内,尤其是在震中武汉。我们很可能大大低估了感染人数。我们也不明白一旦被感染,人们需要多长时间才会死亡。我们不知道老年人和年轻人的组合;健康有病;等等。尽管有缺陷,这个模型仍然是说明性的。

好的,这里有一些初步分析显示数据严重不正确

接下来,我们使用该模型(病死率为 5%,死亡天数为 7 天)来比较湖北省的预测死亡人数和实际死亡人数。

数据提供 JHU CSSE

该图将累积死亡数模型与假定的病死率和死亡时间与北京报告的数字进行了比较。我们的模型,以目前的参数,是惊人的接近。然而,考虑到除死亡时间和病死率之外的大量因素,我们永远无法完全确定真正的数字是多少。以下是一些关键的见解。

  • 如果感染人数确实是正确的,那么 CFR 可能远远高于 2.5%,接近 5%甚至更高。
  • 如果死亡时间长于 7 天,那么 CFR 将甚至大于 5%,并且可能高达 10%或更高。
  • 如果受感染的人数显著增加,CFR 可能会变得非常小(甚至小至 1%)。

应该注意的是,有多种方法可以通过改变这些参数来获得相同的死亡人数。不管怎样,很有可能数据是严重错误的(更多的人被感染)或者我们有一个严重的危机(CFR > 5%)。

外卖食品

  • 目前计算新冠肺炎病死率的方法存在固有缺陷,因为它没有考虑滞后效应。
  • 提出了一种新的(基于队列的)计算病死率的方法。
  • 使用特定参数(5% CFR &死亡前 7 天),模型和实际数据非常一致。
  • 这意味着要么病死率比想象的高,要么病例数比报道的高得多。

这里是一个更新,显示了病死率的可能性范围。另一个更新显示温暖的天气不会抑制增长。再来一次更新,我将揭示美国可能会经历多少死亡

编者按:towardsdatascience.com是一家以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家。想了解更多关于疫情冠状病毒的信息,可以点击 这里

为什么欧盟必须进一步质疑人工智能中的信任、卓越和偏见

原文:https://towardsdatascience.com/why-the-eu-must-further-interrogate-trust-excellence-and-bias-in-ai-715a4265e6b4?source=collection_archive---------55-----------------------

以下是对 2020 年 2 月 19 日欧盟委员会发布的《人工智能白皮书——欧洲实现卓越和信任的方法》的公开回应。该文件可以在这里找到:https://EC . Europa . eu/info/sites/info/files/commission-white-paper-artificial-intelligence-feb 2020 _ en . pdf

信用:【https://ec.europa.eu/futurium/en/ai-alliance-consultation

这份白皮书代表了欧洲人工智能政策的重要转变;从个人权利语言到社会关系语言的转变。我赞扬作者确保欧洲人工智能的未来植根于明确定义的公共价值观和共同的基本权利,如人类尊严和隐私保护。同样,整个文件中的关系语言令人钦佩地表明,委员会在提交建议时认真对待可持续发展目标、欧洲绿色协议和类似多边协议的邀请。该政策文件的两个组成部分是建立一个以“卓越生态系统”和“信任生态系统”为中心的政策框架,这两个组成部分在关系愿景中有很好的基础,表明经济政策框架将代表社会经济范围内各种人口的愿望。

然而,本白皮书中有几个元素可以使用更细微的差别和更有意识的参与。最值得注意的是,在本文档中,术语“信任”明显缺乏定义。虽然信任很重要的论点已经很明确了,但是“信任什么?”和“信任谁?”没有得到充分的回答。同样,围绕多样性、在进一步创建和执行这些建议时身份的平等代表性以及对可能受到影响的各种社区的下游影响,也缺乏重要的社会政治分析。该文件推荐的以人为中心的方法背后的理论是明确定义的,但是在这种方法的创建和应用中,哪些人将被卷入和迎合的问题没有明确说明。人们有理由担心,在制定这种以人为本的方法时,如果不充分关注代表性和多样性,可能会使那些在当前技术环境中已经处于无能为力境地的人进一步边缘化。

我还想请作者在定义“优秀”时更明确一些。该文件认为,欧盟可以通过更有效地与民族国家合作,集中研究和创新社区的努力,提供资源以更好地解决当前经济市场中存在的技能短缺等方式,培育卓越的生态系统。不幸的是,这份文件假设了优秀的定义,但这个定义从未被充分探讨过。这份文件最接近于一个定义,当谈到创建一个生态系统时,它使用一种沿着整个价值链刺激研究和创新的策略,加速采用基于人工智能的解决方案。我批评这种对“卓越生态系统”定义的片面探索,因为我担心没有明确意图的无节制增长对下游的影响。同样,这种片面的定义为经济体系的延续留下了空间,这种经济体系以已经边缘化的、较小的和较新的公司以及地球本身为代价,提升了已经掌权的机构和个人。

最后,我想评论一下委员会对多样性和偏见的分析。该文件正确地指出了解决人工智能技术中的偏见的困难,以及随着人工智能技术在世界各地变得更加普遍,人工智能技术中的偏见可能造成的巨大伤害。然而,作者没有回答这个关键问题,即谁应该对人工智能技术中存在的有害偏见负责,以及欧盟法律应该如何强制解决技术系统中的偏见。我很欣赏人工智能中解决偏见困难的微妙之处,但是我强烈建议委员会增加几个他们建议的解决这些困难的具体机制。

为什么 ETL 的未来不是 ELT,而是 EL(T)

原文:https://towardsdatascience.com/why-the-future-of-etl-is-not-elt-but-el-t-880f08aab74a?source=collection_archive---------11-----------------------

图片来自像素上的 SpaceX

在过去十年中,我们存储和管理数据的方式已经完全改变。我们从 ETL 世界转向 ELT 世界,像 Fivetran 这样的公司推动了这一趋势。然而,我们不认为它会就此停止;ELT 是我们头脑中向 EL(T)的过渡(EL 与 T 解耦)。为了理解这一点,我们需要辨别这一趋势的潜在原因,因为它们可能会显示未来会发生什么。

这就是我们在本文中将要做的事情。我是 Airbyte 的联合创始人,这是即将到来的新的数据集成开源标准。

ETL 有什么问题?

从历史上看,数据管道过程包括提取、转换和加载数据到仓库或数据湖中。这种顺序有严重的缺点。

顽固

ETL 本质上是僵化的。它迫使数据分析师事先知道他们将使用数据的每一种方式,他们将产生的每一份报告。他们做出的任何改变都可能代价高昂。它可能会影响初始提取下游的数据使用者。

缺乏可见性

对数据执行的每个转换都会掩盖一些底层信息。分析师不会看到仓库中的所有数据,只会看到在转换阶段保存的数据。这是有风险的,因为结论可能是基于没有经过适当切片的数据得出的。

分析师缺乏自主权

最后但同样重要的是,构建基于 ETL 的数据管道通常超出了分析师的技术能力。它通常需要工程人才的密切参与,以及提取和转换每个数据源的额外代码。

一个复杂的工程项目的替代方案是在一个临时的、时间密集的、最终不可持续的基础上进行分析和构建报告。

什么改变了,为什么英语教学变得更好了

基于云的数据计算和存储

ETL 方法曾经是必要的,因为本地计算和存储的成本很高。随着雪花等基于云的数据仓库的快速增长,以及基于云的计算和存储成本的直线下降,几乎没有理由在最终目的地加载之前继续进行转换。事实上,翻转这两者可以让分析师以自主的方式做得更好。

ELT 支持分析师的敏捷决策

当分析师可以在转换数据之前加载数据时,他们不必在决定需要获得的确切模式之前预先确定他们想要生成什么样的洞察。

相反,底层的源数据被直接复制到一个数据仓库,构成了一个“真实的单一来源”然后,分析师可以根据需要对数据执行转换。分析师将总是能够回到原始数据,并且不会遭受可能会损害数据完整性的转换,让他们放手去做。这使得商业智能过程无比灵活和安全。

ELT 在整个公司推广数据素养

当与基于云的商业智能工具(如 Looker、Mode 和 Tableau)结合使用时,ELT 方法还拓宽了对跨组织的通用分析集的访问。即使相对非技术用户也可以访问商业智能仪表板。

我们也是 Airbyte 英语教学的忠实粉丝。但是 ELT并没有完全解决数据集成问题,它也有自己的问题。我们认为 EL 需要与 t 完全解耦。

现在发生了什么变化,为什么 EL(T)是未来

数据湖和数据仓库的合并

Andreessen Horowitz 有一篇关于数据基础设施如何发展的精彩分析。这是他们在与行业领导者进行大量访谈后得出的现代数据基础架构的架构图。

作者图片,灵感来自 a16z 的分析

数据基础架构在高层次上有两个目的:

  1. 通过使用数据帮助企业领导者做出更好的决策— 分析用例
  2. 将数据智能构建到面向客户的应用中,包括通过机器学习— 运营用例

围绕这些广泛的用例,已经形成了两个并行的生态系统。

数据仓库构成了分析生态系统的基础。大多数仓库以结构化格式存储数据。它们旨在从核心业务指标中获得洞察力,通常使用 SQL(尽管 Python 越来越受欢迎)。

数据湖是运营生态系统的支柱。通过以原始形式存储数据,它提供了应用程序和更高级数据处理需求所需的灵活性、规模和性能。数据湖可以在多种语言上运行,包括 Java/Scala、Python、R 和 SQL。

真正有趣的是,现代数据仓库和数据湖开始变得越来越相似——它们都提供商品存储、本机水平扩展、半结构化数据类型、ACID 事务、交互式 SQL 查询等等。

因此,您可能想知道数据仓库和数据湖是否正在走向融合。它们在堆栈中可以互换吗?数据仓库也将用于运营用例吗?

EL(T)支持两种用例:分析和运营 ML

与 ELT 相反,EL 将提取-加载部分与可能发生的任何可选转换完全分离。

运营用例在利用传入数据的方式上都是独一无二的。有些可能使用独特的转换过程;有些甚至不使用任何转换。

对于分析案例,分析师将需要在某个时候根据自己的需要对传入的数据进行规范化。但是将 EL 从 T 中分离出来可以让他们选择任何他们想要的标准化工具。 DBT 最近在数据工程和数据科学团队中获得了很多关注。它已经成为转换的开源标准。甚至 Fivetran 也与他们整合,让团队使用 DBT,如果他们习惯了的话。

EL 扩展更快,并利用整个生态系统

转型是所有边缘案例的所在。对于任何公司内的每一个特定需求,对于每一个工具,都有一个独特的模式规范化。

通过将 EL 从 T 上解耦,这使得行业能够开始覆盖连接器的长尾。在 Airbyte,我们正在建设一个“连接器制造厂,这样我们可以在几个月内生产 1000 个预制连接器。

此外,如上所述,它将帮助团队以更容易的方式利用整个生态系统。你开始看到一个满足所有需求的开源标准。从某种意义上说,未来的数据架构可能是这样的:

作者图片

最终,提取和加载将与转换分离。你同意我们的观点吗?如果是这样,你可能有兴趣看看 Airbyte 是做什么的。

原载于 2020 年 11 月 3 日https://airbyte . io

为什么 2020 年对数据科学家来说是一个头疼的问题

原文:https://towardsdatascience.com/why-the-year-2020-will-prove-to-be-a-headache-for-data-scientists-5ff1f15f3cd3?source=collection_archive---------11-----------------------

冠状病毒的影响将波及数据科学项目

亚伦的照片:Unsplash

“你的模型和你的数据一样好”是数据科学中最基本的假设。好的数据等于好的模型!冠状病毒已经影响了全球数百万人的生活,对航空业造成了严重破坏,并粉碎了全球股票市场。冠状病毒无疑将继续影响许多人的日常生活,这取决于它得到控制的速度。和所有人一样,数据科学家也会受到影响。不,我不是说在家工作。
在经济学中,“反应滞后”一词用来表示一旦实施纠正措施,影响经济所需的时间。同样,数据科学家将滞后感受到这一巨大异常的影响,滞后的长度将取决于许多因素。
那么它将如何影响数据科学家?

预测将是乏味的

到目前为止,大多数团队已经意识到他们的预测模型失败了,这不是他们自己的错。无论模型多么稳健,它们总是容易受到异常的影响。这就是我们所处的行业。数据科学背后的核心力量是预测除随机事件之外的一切。如果你的模型能捕捉到数据中除随机性以外的所有预测信息,那就是你能做的最好的了。

但是,当 5 年后你使用 2020 年的数据时,有些事情很有趣,记住一个词;冠状病毒

零售和能源等依赖预测模型的行业正争先恐后地告诉投资者,他们将无法实现季度目标。这些都是公司正在处理的短期问题。

从长远来看,数据科学家将不得不应对 2020 年的扭曲数据。一个典型的预测模型需要至少 12 个月的数据,甚至更多,具体取决于应用。这种扭曲的数据会出现在每一个需要历史时间序列数据的数据科学项目中,这些数据会受到当前形势的影响,例如旅游、能源和金融行业等。这肯定会影响预测模型的结果,因为这种异常数据不仅仅是一个你可以扔掉的离群值。

戴维斯科摄影:Unsplash

整个数据是离群值吗?

传统上,当一些数据不符合数据集其余部分表现出的属性时,我们只是将它们标记为离群值,并将其从我们的模型中剔除。然而,考虑到冠状病毒现在是一种疫情病毒,并且迄今为止已经持续了几个月以上,我们不能简单地通过将其标记为异常值来丢弃整个数据。我们该如何处理?在这种不确定的情况下,我们如何设计我们的模型?还是我们接受它超出了作为数据科学家的范畴?

值得思考的一点

像这样的事件总是随机的,不在数据科学领域的控制之内。尽管这提出了一个重要的问题,数据科学家如何处理反映随机事件的扭曲数据,尤其是在预测中?我们是否必须等待数据再次积累,然后才能寻找解决问题的线索?或者我们可以用更早的类似惨淡情况的历史数据?所有这些问题都需要讨论和集思广益。但这并不仅限于冠状病毒。历史上有许多事件(想想经济衰退、战争)对生成的数据有类似的影响。我们是否仅使用数据来读取特定时期的数据?或者把它作为一个特例?我确信全球的数据科学家将不得不尽快回答这些问题。目前,在这样一个不确定的时期,这些数据足够丰富,可以从中得出重要的见解。

注意安全,保持健康!

关于作者

Usman Gohar 是一名数据科学家,明尼阿波利斯数据科学的共同组织者,也是一名技术演讲人。他非常热衷于最新的数据科学研究,机器学习,并通过帮助和授权年轻人在数据科学中取得成功而蓬勃发展。你可以在 LinkedInTwitterMedium&follow onGithub上和他联系。

为什么抖音让它的用户如此痴迷?让你上瘾的人工智能算法。

原文:https://towardsdatascience.com/why-tiktok-made-its-user-so-obsessive-the-ai-algorithm-that-got-you-hooked-7895bb1ab423?source=collection_archive---------2-----------------------

通过期限从 JaySanProduction

Tick Tok 正在席卷全球。根据 Sensor Tower 的数据,这款短视频应用在 App Store 和 Google Play 上的全球下载量已经超过了 20 亿次。这个耸人听闻的应用程序背后有什么魔力让你如此痴迷?不意外,答案是 ML backed 推荐引擎。

目录(预计阅读时间 15 分钟)

  1. 抖音概况。
  2. 抖音推荐系统的原型(数据、特征、目标、算法和训练机制)
  3. 抖音的推荐工作流程(实时实施, 必读)

好吧,我们实话实说吧。谁不喜欢狗的滑稽动作和滑稽的猫视频?尤其是在全球封锁的悲痛时期。

但这只是解释了抖音空前成功的一部分。在不到两年的时间里,它从一个小型粉丝社区的“唇同步”应用程序发展到 2020 年拥有近 8 亿月活跃用户的病毒应用程序。总的来说,带有#冠状病毒标签的抖音视频已经被观看了 530 亿次。

2020 年 1 月,抖音成为美国下载量最大的应用。(可见传感塔

抖音全球总下载量由传感器塔

它以产生病毒歌曲和滑稽的哑剧视频而闻名。

通常人们每天花 52 分钟在这款应用上,Snapchat、Instagram 和脸书的每日使用时间分别为 26 分钟、29 分钟和 37 分钟。

来自奥伯罗的报道

除了增长黑客战略,这个 60 秒的短视频应用程序充满了迷因、喜剧、舞蹈和人才。配备业内数一数二的 推荐引擎 ,不需要搜索也不知道看谁。点击一下就可以提供个性化的订阅源。

这种对容易获得的快乐的无止境的快速刺激使人很难停止浏览抖音。有人称之为终极时间杀手,它会吸走你的业余时间,并以某种方式创造出“抖音的 5 分钟等于现实生活中的 1 小时”的扭曲空间。

今天,我们将讨论抖音如何通过交互使用机器学习来分析用户的兴趣和偏好,然后为不同的用户显示个性化的提要。

推荐引擎对于数据科学社区来说并不陌生。相反,一些人认为它是老一代人工智能系统,因为缺乏令人眼花缭乱的效果,如图像识别或语言生成。

然而,该建议仍然是占主导地位的人工智能系统之一,在几乎所有的在线服务和平台上都有最广泛的实现。例如,YouTube 视频建议、您从亚马逊收到的活动电子邮件、您在浏览 kindle 书店时可能也会喜欢的书籍。

事实上,根据 Gomez-Uribe 和网飞的首席产品 Neil Hunt 发表的 研究论文 称,个性化和推荐的综合效果每年为网飞节省超过 10 亿美元。此外,80%的订户从引擎的建议列表中选择视频。

现在让我们来看看 TikTock 的不同之处。

1.推荐引擎介绍。

(对于已经熟悉这个话题的人,请跳到下一节。)

关于推荐引擎有用的文章和在线课程太多了,我不想重新发明轮子。

下面是两个资源,可以帮助你建立一些推荐引擎的基础知识。

  • 从头开始构建推荐引擎的综合指南[ 链接 ](阅读大约需要 35 分钟,复制 python 代码需要 40-60 分钟)
  • 来自吴恩达的推荐引擎[ 链接 ](花一个小时看视频)

除了基本的,工业化的推荐引擎需要一个健壮的后端和架构设计来集成。下面是一个主要的例子。

推荐引擎—由 Catherine Wang 创建,保留所有权利

一个实时系统应该有一个坚实的数据基础(用于收集和存储),以支持解决不同业务问题的多个抽象层(算法层、服务层和应用层)。

2.抖音推荐系统设计的原型

以用户为中心的设计仍然是原型的核心。简单来说,抖音只会推荐你喜欢的内容,从冷启动调整到为活跃用户明确推荐。

如果你点击了一个跳舞的视频,你的反馈最初会被定制为娱乐类别,然后后续机制会跟踪你的行为进行进一步分析,最终只会为你提供精确的建议。

高级工作流。

3 主要组件—由 Catherine Wang 创建,保留所有权利

在抖音的原型中,有三个主要的构建模块,1)标记内容,2)创建用户简档和用户场景,以及 3)训练和服务推荐算法。

我们将在下面的内容中逐一讨论。

2.1 数据和特征

首先,数据。如果我们正式描述推荐模型,它是一个符合用户对用户生成内容的满意度的函数。提供该功能需要从输入数据。

内容数据 —抖音是一个拥有海量用户生成内容的平台。每种类型的内容都有其特点,系统应该能够识别和区分它们,以提供可靠的推荐。

用户数据——这些包括兴趣标签、职业、年龄、性别、人口统计等。它还包括基于 ML 的客户聚类的潜在特征。

场景数据 —该数据根据不同的场景跟踪使用场景和用户的偏好变化。例如,当用户在工作、旅行或通勤时,他们喜欢观看什么类型视频

一旦收集了相关数据,就可以导出四种关键工程特征,并输入到推荐引擎中。

  • 关联特征 : 表示内容属性与用户标签之间的关联,包括关键词匹配、分类标签、来源匹配、主题标签,以及用户与内容之间的向量距离等潜在特征。
  • 用户场景特征 :从场景数据中设计,包括地理位置、时间、事件标签等。
  • 趋势特征: 它们基于用户交互,代表全球趋势、热点话题、热门关键词、趋势主题等。
  • 协同特性: 基于协同过滤技术。它平衡了狭义推荐(偏见)和协作推荐(泛化)。更准确地说,它不仅会考虑单个用户的历史,还会分析相似用户组的协作行为(点击、兴趣、关键词、主题)。

该模型将通过学习上述特征来预测内容是否适合场景中的用户。

2.2 无形目标

在推荐模型中,点击率、阅读时间、点赞、评论、转发都是可以量化的目标。您可以使用模型或算法来拟合它们,然后做出最终的预测。

但是,其他无形的目标是无法用那些可量化的指标来评价的。

例如,为了维护一个健康的社区和生态系统,抖音的目标是压制涉及暴力、诈骗、色情、胀气的内容,以及新闻等高质量内容。

为了这个目标,边界控制框架需要被定义在可量化的模型目标之外。(内容审核系统)

2.3 算法

推荐目标可以表述为一个经典的机器学习问题。然后通过包括协同过滤模型、逻辑回归模型、因子分解机、 GBD、深度学习等算法进行求解。

协作过滤的一个例子

一个工业级的推荐系统需要一个灵活的、可扩展的 ML 平台来建立实验管道,快速训练各种模型。然后将它们堆叠起来,以便实时提供服务。(例如,结合 LR 和 DNN,SVM 与 CNN)

除了主要的推荐算法,抖音还需要训练内容分类算法和用户描述算法。下面是内容分析的层次分类结构。

分级分类树—由 Catherine Wang 创建,版权所有

从主根向下钻取。向下每一层都是主类别和子类别。与单独的分类器相比,使用层次分类机制可以更好地解决数据偏斜问题。

2.4 培训机制

抖音使用实时在线训练协议,它需要较少的计算资源,并提供快速反馈。这些对于流媒体和信息流产品非常重要。

用户行为和动作可以被即时捕获,然后反馈给模型,以反映在下一个提要中。(例如,当您点击一个新视频时,您的订阅源将根据您的最新操作快速改变)

最有可能的是,抖音正在使用 Storm Cluster 来处理实时样本数据,包括点击、显示、收藏、喜欢、评论和分享。

他们还将自己的高性能系统构建为模型参数和特征服务器(特征库和模型库)。 特征库 可以保存和服务数千万个原始特征和工程矢量。并且 模型库 将维护和提供模型和 tuned_parameters。

在线培训机制(简化版)—由 Catherine Wang 创建,保留所有权利

整个训练过程是:1)在线服务器捕获实时数据,然后将它们存储到 Kafka 中,2) Storm cluster 消费 Kafka 数据和产品特征,3)特征存储收集新特征和推荐标签,以构建新的训练集,4)在线训练管道重新训练模型参数,将它们存储到模型存储中,5)更新客户端推荐列表,捕获新的反馈(用户动作)并再次循环。

3.抖音的推荐工作流程

抖音从未向公众或技术社区透露其核心算法。但基于该公司发布的零碎信息,以及极客使用逆向工程技术发现的踪迹。我得出以下结论。

(免责声明——这是我的解释和推断,可能与抖音的做法有所不同)

推荐工作流程-由 Catherine Wang 创建,保留所有权利

第 0 步:用户生成内容(UGC)双重审核系统

在抖音,每天有数百万的内容由用户上传。恶意内容更容易发现单机审查系统的漏洞,而人工审查在这种情况下是不现实的。因此,双审查成为抖音筛选视频内容的主要算法。

机器审核: 一般来说,Duo-audit 模型(基于计算机视觉)可以识别你的视频图像和关键词。它主要具有两个主要功能:1)检查剪辑中是否有违反,并检查文案。如果涉嫌违规,内容将被模型拦截,并标记为黄色或红色供人工审查。2)通过从视频中提取图片和关键帧,抖音的 duo audit 算法会将提取内容与其庞大的存档内容库进行匹配。重复将被选中,降低流量,减少推荐引擎的权重。

人工审核: 主要关注 3 个区域:视频标题、封面缩略图、视频关键帧。对于通过双重审核模型标记为可疑的内容,技术人员将手动审查它们。如果认定为违反规定,该视频将被删除,并暂停帐户。

第一步:冷启动

抖音推荐机制的核心是 信息流漏斗。 当内容通过 duo-audit 审核后,将被放入冷启动流量池。例如,在你的新视频通过审查过程后,抖音会分配 200-300 个活跃用户的初始流量,在那里你可以获得几千次曝光。

在这种机制中,一个新的创造者可以与一个社会影响者(可能有数万名追随者)竞争,因为他们有相同的起点。

步骤 2:基于公制的称重

通过最初的流量池,视频可以获得成千上万的观看次数,那些数据将被收集和分析。在分析中要考虑的指标包括喜欢,观点,完整的观点,评论,追随者,转发,分享数据等。

然后,推荐引擎将根据这些初始指标和您的帐户得分(无论您是否是高质量的创作者)来衡量您的内容。

如果引擎决定对你的内容进行加权,前 10%会额外增加 10,000-100,000 的流量曝光。

第三步:用户档案放大器

将进一步分析来自步骤 2 业务池的反馈,以决定使用用户简档放大器。在这一步中,跑赢的内容将在特定的用户群(如体育迷、时尚爱好者)中得到强化和放大。

这类似于“猜你喜欢什么”功能的概念。推荐引擎将建立一个用户简档库,以便它可以找到内容和用户组之间的最佳匹配。

第四步:精品潮流池

不到 1%的内容将最终进入趋势池。内容在这个池中的曝光率比其他池高一个数量级。因为趋势内容会无差别的推荐给所有用户。(假设,不管你是谁,你可能想看“黑人的生命很重要”的最新抗议者视频)

其他步骤:延迟点火

一些 Tiktokers 会注意到,他们的内容在发布了几周后突然获得了巨大的关注。

主要有两个原因:

  • 首先,抖音有一个算法(昵称“掘墓人”)来回顾旧的内容和挖掘高质量的候选人曝光。如果你的内容被这个算法选中,这表明你的帐户有足够的垂直视频来获得一个干净的标签。这个标签将增加你的内容在掘墓人中的可见性。
  • 第二,“新潮效应。”这意味着,如果你的一个内容获得了数百万的浏览量,它会将流量导向你的主页,从而增加我们旧内容的浏览量。这种情况经常发生在垂直创作者(如:滑稽猫视频创作者)身上。一个新潮的视频将点燃所有其他高质量的视频(人们想看到更多你可爱、好奇的猫)。

wiflegif.com

限制:流量峰值

如果一个内容云通过了信息流漏斗(duo-audit,weighing iterations,amplifiers),创作者的账号就会获得过度的曝光、用户互动和粉丝。

但是根据研究,这个高暴露时间窗口很窄。通常,窗口期会持续一周左右。过了这个时间段,这个内容和账号就会降温,甚至后续的视频也很难变得新潮。

为什么?

主要原因是抖音希望引入多样性,并消除算法中的无意偏差。通过这种设计,推荐引擎将不会倾向于特定类型的内容,从而确保新内容将获得平等的机会进入潮流池。

参考文献:

  1. *【https://www.businessofapps.com/data/tik-tok-statistics/ *
  2. https://media kix . com/blog/top-tik-Tok-statistics-demographics/
  3. https://en.wikipedia.org/wiki/TikTok
  4. http://shop.oreilly.com/product/9780596529321.do
  5. https://sensortower.com/
  6. https://www . nytimes . com/2020/06/03/technology/tiktok 是未来. html

关于我,我是*👧🏻谁住在澳大利亚的墨尔本。我学的是计算机科学和应用统计学。我对通用技术充满热情。在一家全球咨询公司担任人工智能工程师领导👩🏻‍🔬,帮助组织集成人工智能解决方案并利用其创新力量。在LinkedIn上查看更多关于我的内容。***

为什么训练集应该总是小于测试集

原文:https://towardsdatascience.com/why-training-set-should-always-be-smaller-than-test-set-61f087ed203c?source=collection_archive---------10-----------------------

在小样本上测试机器学习模型不是一个好主意

图片由来自 Pexelsluis gomes 拍摄

在机器学习领域,数据科学家经常被告知在大型训练数据集上训练监督模型,并在少量数据上测试它。训练数据集总是被选择为大于测试数据集的原因是有人说用于训练的数据越大,模型学习得越好。

我一直认为这种观点实际上并不完全正确,在本文中,我将向您展示为什么您应该保持尽可能小的训练集,而不是保留大部分数据用于测试目的。

衡量模型性能的问题

监督模型的真正任务不是在尽可能大的数据集上学习,而是以一种在未知数据上模型性能令人满意的方式学习。这就是为什么我们在看不见的数据集上执行模型交叉验证。

数据科学家通常会提供一些在此类测试数据集上计算的模型性能指标,如 AuROC、准确度、精度、均方根误差等。这个想法是,如果我们的模型在看不见的数据上表现得很好,那么它在生产环境中也可能表现得很好。

但是我们对模型性能的测量有多精确呢?如果我说我的模型在 100 条记录的测试数据集上有 86%的 AuROC,而另一个人说另一个模型在 10.000 条记录的测试数据集上仍有 86%的 AuROC,这两个值有可比性吗?如果你是一家大公司的经理,你被要求根据模型预测投资一些钱,你会选择哪一个?

我给你剧透一下。测试集越大,对其计算的任何性能指标的精确度就越高。

模型性能的精确度

我是一个物理学家,所以我总是被告知每一个测量都必须有一个误差估计。我可以告诉你我身高 1.93 米,但是我不会给你任何关于这个估计的精确度的信息。是 1 厘米,还是 12 厘米?你说不准。正确的信息可能是:我身高 1.93 +/- 0.01 米,这是 1.93 米,误差估计为 1 厘米。如果有人试图测量我的身高,他可能会得到 1.93 +/- 0.12 米,这是 1.93 米,误差估计为 12 厘米。哪种测量方法更准确?当然是前者。其误差比后者低一个数量级。

同样的方法可以应用于机器学习模型。每次计算模型性能(例如,AuROC、accuracy、RMSE)时,您都在执行一个测量,这个测量之后必须有一个误差估计。

那么,如何计算这种测量的误差估计呢?有许多技术,但我更喜欢使用 bootstrap,这是一种重采样技术,允许您计算估计的标准误差和置信区间。bootstrap 样本中可观察值的标准差是我们可以在报告中使用的标准误差。很容易证明,误差估计随样本容量的平方根而减小。

这就是为什么您必须使用大型测试集的原因。它提供了对未知数据的模型性能的更好估计。

例子

在以下 Python 示例中,我将模拟包含 4 个独立正态分布要素的 100 万条记录数据集,然后根据以下线性模型人工创建一个目标变量:

线性模型预测和样本 y 值之间的误差是正态分布的。

然后,我将拟合线性模型,计算 RMSE 及其标准误差,并向您展示测试集越大,标准误差越小,因此 RMSE 值的精度越高。

你可以在我的 GitHub 资源库找到完整的代码:https://GitHub . com/gianlucamalato/machine learning/blob/master/Small _ training _ large _ test . ipynb

首先,让我们导入一些库。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

让我们用 4 个正态和独立分布的特征来模拟 100 万条记录。

np.random.seed(0)
X = np.random.normal(size=4000000).reshape(1000000,4)

现在,我们可以应用正态分布噪声来创建输出变量。

y = []
for record in X:
   y.append(np.sum(record) + np.random.normal())
   y = np.array(y)

小型测试集

现在,让我们将我们的 X,y 数据集分成训练集和测试集,测试集大小是总大小的 20%。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

现在我们可以拟合线性回归模型。

model = LinearRegression()
model.fit(X_train,y_train)

在计算模型性能之前,让我们先定义一个函数,用 100 个样本的自举来计算 RMSE 及其误差估计。

def estimate_error(X_test,y_test):
  n_iter = 100
  np.random.seed(0)
  errors = [] indices = list(range(X_test.shape[0]))
  for i in range(n_iter):
    new_indices = np.random.choice(indices,
        len(indices),replace=True) new_X_test = X_test[new_indices]
    new_y_test = y_test[new_indices] new_y_pred = model.predict(new_X_test) new_error = np.sqrt(mean_squared_error(new_y_test,new_y_pred)) errors.append(new_error) return np.mean(errors),np.std(errors)

这些是结果:

所以我们有一个等于 1.0028 +/- 0.0015 的 RMSE。

大型测试集

如果我们使用一个覆盖总人口规模 80%的测试集会发生什么?

随机分割和模型训练变成:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8, random_state=42)model = LinearRegression()
model.fit(X_train,y_train)

新 RMSE 的估计是:

所以我们有 1.00072 +/- 0.00075。我们的误差已经减少了一个数量级,所以最后一个测量更准确。

到底发生了什么?

这些数字里没有魔法。简单地说,这是大数定律和自举技术的一种效果。对于更大的数据集,样本中的任何可观测估计值都变得非常接近其在样本总体中的值。

结论

更大的测试数据集确保更准确地计算模型性能。对较小数据集的训练可以通过分层抽样等抽样技术来完成。它将加速你的训练(因为你使用更少的数据),并使你的结果更可靠。

参考

[1]吉安卢卡·马拉托。自举。任何数据科学家的瑞士军刀。数据科学记者。https://medium . com/data-science-reporter/the-bootstrap-the-Swiss-army-knife-of-any-data-scientist-ACD 6 e 592 be 13

[2]吉安卢卡·马拉托。分层抽样以及如何在 R 中进行。走向数据科学。https://towards data science . com/layered-sampling-and-how-to-perform-it-in-r-8b 753 efde 1 ef

[3]吉安卢卡·马拉托。机器学习中如何从庞大的数据集中正确选择样本。数据科学记者。https://medium . com/data-science-reporter/how-to-corrective-select-a-sample-from-a-high-dataset-in-machine-learning-24327650372 c

为什么迁移学习会成功或失败?

原文:https://towardsdatascience.com/why-transfer-learning-works-or-fails-27dcb8095670?source=collection_archive---------43-----------------------

理解迁移学习和领域适应背后理论的(几乎)无数学指南。

来源:Sebastian Ruder,via slideshare

D 在 2016 年的 NIPS 教程演讲中,吴恩达表示,转移学习——机器学习的一个子领域,模型被学习,然后部署在相关但不同的领域——将是未来几年机器学习商业成功的下一个驱动力。这种说法很难反驳,因为避免从头学习大规模模型将大大减少 it 所需的高计算和注释工作,并节省数据科学从业者的大量时间、精力,最终节省资金。

作为后面这些话的一个例子,考虑一下脸书的 DeepFace 算法,该算法在 2014 年首次实现了接近人类的人脸验证性能。它背后的神经网络是在 440 万张 标记的人脸上训练的——大量的数据必须被收集、注释,然后训练整整 3 天,还没有考虑微调所需的时间。毫不夸张地说,如果没有脸书的资源和深度学习工程师,大多数公司和研究团队将不得不投入数月甚至数年的工作来完成这样的壮举,其中大部分时间都花在收集足够大的标注样本来构建这样一个精确的分类器上。

这就是迁移学习神奇地介入的地方,它允许我们在相关数据集之间使用相同的模型,就像如果它们来自相同的来源,我们会做的那样。尽管迁移学习算法在计算机视觉和自然语言处理等挑战性任务中非常有效和有用,但在实践中也很失败,解释为什么它可能会或可能不会发生是我下面要尝试做的。

追根溯源

到开始我对迁移学习理论的简单而轻松的介绍,让我介绍一下 Homer,一个快 30 岁的家伙,他因为机器学习的炒作而变得非常兴奋,并决定自动分类他在 Aliexpress 上为他的在线商店购买的所有奇怪的东西。荷马的主要动机源于他的懒惰,事实上,全球速卖通上翻译的英文描述通常非常混乱,至少可以说,这意味着只有荷马购买的照片才能提供任何关于实际商品的信息。

因此,Homer 下载了一个巨大的标注了亚马逊上销售的商品的数据集,希望一个分类器能够很好地处理他在全球速卖通上的图片。“是什么让他这么想的?”你可能会问。嗯,首先,Homer 假设有那么多来自亚马逊的图像,他可以使用最先进的具有 1 万亿层的深度神经网络为它们学习一个低错误的分类器。此外,在他祖母海边的房子度过的所有暑假期间,荷马有机会阅读了瓦普尼克先生和切尔沃嫩基斯先生的所有最新作品,他们(非常)宽泛地提出了以下不等式:

荷马知道,由于神经网络的能力能够从输入其中的任何垃圾中很好地学习,右手边的第一项可以变得尽可能小。此外,Homer 认为,第二项分子中神经网络的高度复杂性将由他可支配的大样本量来补偿,从而使其也接近于 0。困扰 Homer 的最后一块拼图是左手边,因为他不确定亚马逊上看不见的商品的分类错误是否会接近全球速卖通上的分类错误。为了解决这个问题,他做了如下简单的假设:

“什么样的距离?”一个好奇的读者会问,这样做是对的。但是荷马并不在乎这些细节,他现在对自己很满意,并继续进行下面的终极不等式:

“现在我知道该做什么了,”荷马对自己说,他指的是转移学习,而不是他那不安定的生活。“首先,我需要找到一种方法来转换来自亚马逊的图像,使它们看起来尽可能与来自全球速卖通的图像相似,从而缩短它们之间的距离。然后,我将在转换后的图像上学习一个低错误分类器,因为我仍然有它们的基本事实标签,并将在我的全球速卖通图像上进一步应用这个分类器。”

思考片刻后,他对自己的想法变得不确定了。“我是不是漏掉了什么?”他问自己,同时从速卖通网站订购了一把激光军刀伞,碰巧的是,他照做了。

什么叫做相似?

虽然荷马关于迁移学习的直觉在最后一个不等式中被形式化了,但他仍然缺乏一个关于距离的明确定义的概念,他可以用这个概念来衡量两个数据集之间的可迁移性。

“粗略地说,”荷马自言自语道,“有两种比较数据集的可能方式:无监督的和有监督的。如果我选择有监督的,这意味着我同时考虑图像和它们的标签来测量距离;如果我选择无监督的,我只考虑图像。”

这两种方法都困扰着荷马,但原因不同。对于监督方法,他必须有速卖通图像的标签,这是他最初试图通过迁移学习获得的东西。至于无监督的,他认为这是不够准确的,因为两个图像可能看起来很相似,即使它们属于不同的类别。“这怎么可能?”你可能会想。嗯,看看速卖通亚马逊网站上卖的以下两件商品,告诉我它们属于哪一类。

在全球速卖通(左图,来源:宁波 Creight Co .,via aliexpress)和亚马逊(右图,Regal Fish Supplies,via amazon)上销售的商品图片。

很明显,左边的那个是睡枕(很明显,不是吗?!),而右边的是三文鱼片。为了避免这种混乱,荷马决定提出以下假设:

Homer 认为,将标注函数放入等式中——从各自的在线平台输出任何可能项目的类别的函数——是考虑数据集注释和图像实际相似性的最直接方式。令人惊讶的是,这就是他如何(几乎)得出与迁移学习理论的开创性论文中的定理 1 极其接近的结果。

一个理论将他们联系在一起

如果我告诉你,大多数关于迁移学习理论的论文都可以归结为 Homer 从他对机器学习原理的最基本理解中得出的不等式,你可能会很惊讶。那些众多的论文和荷马脚踏实地的推理之间的唯一区别是,荷马必须通过做出假设,而不是通过实际证明与出版作品相反的预期结果。

我现在将向您展示一个稍微重新表述的不等式,它抓住了定理 1 和荷马推理的本质,然后我们将看到它如何用于证明所有那些在之前在 Medium 上讨论过的迁移学习算法。我的改写如下:

在这里,我的目标域是我想要分类的任何数据集,而不需要手动注释它;在 Homer 的例子中,它由在 Aliexpress 上销售的商品的图像组成。我的源域,在同一个例子中是丰富的 Amazon images,是任何带注释的数据集,我可以为其生成一个低错误模型,用于目标域的后记。右边的第二项是两个域之间的无监督距离,我们通常可以在不知道任何一个域中实例的标签的情况下计算该距离。致力于迁移学习的研究人员为这个术语提出了许多不同的候选词,其中大多数采取了这两个领域的(边缘)分布之间的某种差异的形式。最后,第三项代表通常所说的先验适应性:一个不可估计的量,只有当真正的目标域的标记函数已知时,我们才能计算它。后一种观察使我们得出以下重要结论。

虽然迁移学习算法可以显式地最小化我们不等式的前两项,但先验适应性项仍然不可控,潜在地导致迁移学习的失败

如果你在这一点上等待一个神奇的解决方案,那么我将不得不说没有这样的解决方案,这将使你失望。您可以使用基于内核的、矩匹配的或对抗性的方法,但这不会改变任何事情:最终您将受到不可估计项的支配,该项可能最终用其看不见的手影响您的模型在目标域中的最终性能。然而,好消息是,在大多数情况下,它仍然比完全不传输要好。

回到现实生活

我现在将展示一个在这篇论文中提供的简单例子,它强调了遵循上述哲学的迁移学习方法的一个缺陷。在本例中,我们将考虑两个一维数据集,分别代表源域和目标域,并使用下面给出的代码生成。

**import** numpy **as** np

np.set_printoptions(precision=1)**def** generate_source_target(xi):
 k=0
    size = int(1./(2*xi))
    source = np.zeros((size,))
    target = np.zeros_like(source)

    **while** (2*k+1)*xi<=1:
        source[k] = 2*k*xi
        target[k] = (2*k+1)*xi
        k+=1
    **return** source, target

执行这段代码会在区间[0,1]中产生两组点,如下图所示。

例如,当ξ = 0.1 时,它将返回以下两个列表:

source,target = generate_source_target(1./10)print(source)
[0\. 0.2 0.4 0.6 0.8]print(target)
[0.1 0.3 0.5 0.7 0.9]

我将进一步将标签 1 归属于来自源域的所有点,将标签 0 归属于来自目标域的所有点。我的最终学习样本将因此变成:

source_sample = [(round(i,1),1) **for** i **in** source]
target_sample = [(round(i,1),0) **for** i **in** target]

print(source_sample)
[(0.0, 1), (0.2, 1), (0.4, 1), (0.6, 1), (0.8, 1)]print(target_sample)
[(0.1, 0), (0.3, 0), (0.5, 0), (0.7, 0), (0.9, 0)]

为每个样本找到一个完美的分类器容易吗?是的,因为在源域的情况下,它可以使用阈值函数来完成,对于坐标小于 0.8 的点输出 1,否则输出 0。这同样适用于目标域,但这一次分类器将为坐标小于 0.9 的所有点输出 0,否则输出 1。最后,我们现在将确定这两个畴之间的距离取决于ξ,因此可以通过减小它来使其任意小。为此,我们将使用 1-Wasserstein 距离,在我们的例子中,它正好等于ξ。让我们使用下面的代码来验证它:

**from** scipy.stats **import** wasserstein_distance**for** xi **in** [1e-1,1e-2,1e-3]:
    source, target = generate_source_target(xi)
    wass_1d = wasserstein_distance(source,target)
    print(round(np.abs(wass_1d-xi),2))0.0
0.0
0.0

总的来说,我们现在有了一个可以学习完美分类器的源域和一个可以任意接近它并且也存在完美分类器的目标域。现在,我们提出的问题是:在这种看似非常有利的情况下,迁移学习能成功吗?!嗯,你可能已经猜到了,不,它不能,原因隐藏在我之前提到的不可估计项中。事实上,在这个设置中,无论您做什么,同时对两个域都好的分类器是不存在的。实际上,其最低可能误差将正好等于 1-ξ,同样,通过相应地操纵ξ,可以使其任意接近 1。正如《建立迁移学习理论的基础》一文中的作者所说,

“当没有对源域和目标域都表现良好的分类器时,我们不能指望通过在源域只训练目标模型来找到好的目标模型。”

遗憾的是,这个对于所有无法访问目标领域标签的迁移学习方法都是正确的。

便笺后

虽然这篇文章看起来有点悲观,但是它的主要目的是向感兴趣的读者提供迁移学习理论的一般理解,而不是欺骗他或她使用迁移学习方法。事实上,迁移学习算法在实践中通常非常有效,因为它们经常应用于它们之间有很强语义联系的数据集。在这种情况下,假设不可估计的项很小是合理的,因为很可能存在一个对两个域都适用的好分类器。然而,正如生活中经常发生的那样,除非你尝试一下,否则你永远不会知道是否是这样,这就是它的美妙之处。

如果你想更深入地讨论你感兴趣的关于迁移学习理论的论文背后的技术细节,请在评论中告诉我。

为什么真的是假的是假的->假的?

原文:https://towardsdatascience.com/why-true-is-false-is-false-false-dc41b11eb27a?source=collection_archive---------46-----------------------

由 xkcd

Python 很酷:在使用了这么多年之后,有一些奇怪的小东西让我感到惊讶。我最近偶然发现了一行非常简单的代码,我所知道的大多数有经验的 python 程序员不通过谷歌搜索就无法解释它。

WTF…

为什么令人惊讶?我想这是因为如果一个人被要求执行这个命令,他不会输出这个结果。我是这样推理的。

我需要执行第一条is语句,这将给我False,然后执行第二条is,这将给我True.:

有了括号,它确实像预期的那样工作。同样,如果你从右到左以相反的顺序做,你会得到同样的结果。

然后我想…

也许是is操作符在与另一个is组合时执行方式不同。

python is操作符所做的是比较对象的 id。当你做a is b时,你实际上是在问id(a) == id(b),即这些是否是相同的对象(不像a==b只比较值)。Python 的id操作符实际上指向存储对象的真实内存地址

我知道id有一些意想不到的行为。例如,[-5,256]范围内的整数的 T12 总是相同的,而对于其他整数,它在内存中分配单独的位置。我的意思是:

这是 Python 使用的一种启发式方法。下面是来自文档的解释:

当前的实现为所有在-5256之间的整数保留了一个 integer 对象数组,当你在这个范围内创建一个 int 时,你实际上只是得到了一个对现有对象的引用。所以应该可以改变1的值。我怀疑 Python 在这种情况下的行为是不确定的。😃

这是我所知道的,但是这里我们处理的是广播到01的布尔值的比较,它们依次落入[-5,256]范围。事实上,如果你检查一下,它们都指向同一个内存地址。

所以,这肯定是某个用双is语句把事情搞砸的东西。

啊哈…

然后我问自己:当你在一个语句中有多个比较操作符时,Python 中实际上发生了什么?以下是文档中所说的:

形式上,如果 abc 、…、 yz 是表达式, op1op2 、…、 opN 是比较运算符,那么a op1 b op2 c ... y opN z相当于a op1 b and b op2 c and ... y opN z,只是每个表达式最多求值一次。

所以实际上发生的是语句True is False is False被替换为语句True is False and False is False。显然,第一个True is False被评估为False,它决定了最终结果。

附:如果你喜欢这个故事,可以考虑在 medium 上关注我或者订阅我的 电报频道 或者 我的 twitter

为什么会变成咸菜?

原文:https://towardsdatascience.com/why-turn-into-a-pickle-b45163007dac?source=collection_archive---------43-----------------------

图片来自 Pixabay照片组合【我没有得到免费使用的泡菜里克图片:(】

泡菜是什么

Pickle 是一个 python 模块,用于将 python 对象序列化为二进制格式,并将其反序列化回 python 对象。

使用 pickle 的两个重要用例

第一种情况:

你在做一个机器学习问题,用的是最爱: jupyter 笔记本。您分析了数据并确定了将有助于您的模型的主要特征。您执行特征工程,并且您知道这将是您将传递给机器学习模型的最终数据。但是特征工程需要大量时间,并且您不希望在关闭笔记本电脑后丢失特征工程数据。

这就是泡菜的用武之地。

您只需将特征工程数据传递到 Pickle 并以二进制格式保存它。然后,当您准备好执行建模时,就可以加载这些数据了。

转储数据(保存)

#Code Example
#Import the module
import pickle#Do Some Feature Engineering
feature_engineered_data = do_feature_engineering(data)#Dump it(save it in binary format)
with open('fe_data.pickle','wb') as fe_data_file:
     pickle.dump(feature_engineered_data, fe_data_file)

加载回数据

#Code Example
#Import the module
import pickle#Load the data - No need to do Feature Engineering again
with open('fe_data.pickle','rb') as fe_data_file:
     feature_engineered_data = pickle.load(fe_data_file)#Continue with your modeling

那么到底有什么优势呢?

功能工程可能是一个繁重的过程,您不希望在笔记本电脑关机的情况下重做它。因此,以可重用的格式存储它是有益的。

假设您为 EDA、功能工程和建模管理不同的笔记本。使用 Pickle,您可以将数据从一个笔记本转储到另一个笔记本。

第二种情况:

一个更流行的案例是 pickle机器学习模型对象。

您已经完成了特征工程、建模,并获得了相当好的精确度,万岁!你在这里的工作已经完成,所以你关掉笔记本电脑,好好睡一觉。

第二天早上,您得到另一个测试集来测试模型,但是因为您关闭了笔记本电脑,所以您必须再次训练模型,这需要 6 个小时!

这就是泡菜再次出现的地方

保存训练好的模型,并在有新数据进行测试时加载该模型。

甩掉模特

#import module
import pickle#Train the data
model.fit(X_train, X_test)#Dump the model
with open('fitted_model.pickle','wb') as modelFile:
     pickle.dump(model,modelFile)

加载模型

#import module
import pickle#Load the model - No need to TRAIN it again(6 hours saved)
with open('fitted_model.pickle','rb') as modelFile:
     model = pickle.load(modelFile)#Predict with the test set
prediction = model.predict(X_test)

可以使用 Pickle 保存最终数据,用多个模型进行训练,也可以保存模型,用多个数据进行测试,不需要再次训练模型。多棒啊。

你对这些用例有什么看法,你还能想到哪些其他用例?请在评论中告诉我!

为什么样本使用 n-1?——她问

原文:https://towardsdatascience.com/why-use-n-1-for-the-sample-she-asked-aa4e5043571a?source=collection_archive---------35-----------------------

简单的视觉演示,以清除这个臭名昭著的疑问!

奥斯潘·阿里在 Unsplash 上的照片

在直接进入主题之前,让我们先来看看分别用于人口统计和样本统计的符号:

为了一致的解释,我将引用我以前博客中的相同信息:

[## 简化的中心极限定理

推论统计学背景中的一个重要定理,没有它,推论统计学就没有…

towardsdatascience.com](/central-limit-theorem-simplified-7a0689519a46)

继续 X 星球上 1000 名男性(总人口)的相同身高数据集:

(图片由作者提供)

正如我以前的博客中关于中心极限定理的演示活动所讨论的,评估专家从预先确定样本大小的总体中抽取样本,每个人给出 10 个总体均值的评估。我们有 5 个自称的评估专家来评估不同抽样选择的平均值:

(图片由作者提供)

让我们以第一个评估专家选择两个样本大小为例。对于他的第一个样本,他根据两个导出值(155 cm 和 165 cm)的平均值估计样本平均值为 160 cm。

(图片由作者提供)

(图片由作者提供)

请注意,评估专家在整个评估实践中并不知道总体均值,他对总体的最佳猜测是他从总体中得出的两个观察值的均值。这对于我们来说是显而易见的,因为我们很清楚总体分布和总体均值,但根据他的说法,总体均值的一个最佳可行位置是收集的观测值的均值,我们也很清楚,在该均值附近方差度量最小。因此,当我们使用 N(如在人口统计中)编写方差计算公式时,请注意当我们试图用样本数据估计它时会出现什么问题:

(图片由作者提供)

大绿条反映可行的总体平均位置(对于我们的数据,它是大红条-实际位置)。上述表示的目的是让您明白,总体均值可以在任何地方,与之相关的方差总是大于估计专家使用样本数据均值估计的方差

注意我们的实际差异是如何被当前公式低估的。

进一步澄清,评估专家以样本数据平均值的形式给出最佳评估,再次重复是总体平均值的可行位置之一。正如我们所知,这里的总体均值(170)位于估计均值(160)的右侧,但如果我们使用其他数据集,它可以在任何地方。假设样本数据平均值处的总体平均值位置缩小了方差测量值,即方差在样本数据平均值附近最低。这是我们需要通过操纵分母来扩大方差度量的唯一原因,用 n-1 代替 n 来补偿低估。

如果你想到,通过使用修改后的公式,我们仍然不能很好地进行估计,请记住,当我们增加样本量时,估计会提高(在本例中,我们只取两个样本量,样本量的增加最终会反映出估计的准确性)

*这个概念在中心极限定理博客中也有详细证明

为什么分母必须是 n-1,而不是 n-2,n-3 或 n-10?

当我们从总体数据中抽取一个样本时,很明显它的平均值是固定的(一个常数值):

让我们取一个任意的样本= 2,5,7,10,16 (5 个数据点)

样本均值= (2+5+7+10+16)/5 = 8

现在,如果我给某人这个样本的 4 个数据点和样本平均值(固定的),他/她能解出第 5 个数据点吗?答案是肯定的!

这是关键点,在样本统计中,我们失去了一个自由度,因为存在样本均值的约束(固定)。这就是为什么我们总是从样本量中减去 1 = n-1

这个 n-1 修正最初被称为贝塞尔修正,如果您对详细的推导感兴趣,请参考下面提到的链接:

[## 贝塞尔校正

在统计学中,贝塞尔的修正是在样本方差和样本……的公式中使用 1 代替 n

en.wikipedia.org](https://en.wikipedia.org/wiki/Bessel's_correction#Proof_of_correctness_–_Alternative_1)

对于人口统计,我们没有任何限制,因为人口数据点的选择对实际人口平均值没有任何影响,这就是为什么 N 被用作计算的分母。

这篇博客到此为止,我希望这个简化的解释最终消除了在分母中使用 n-1 而不是 n 来表示被低估的样本统计量的疑虑。偏差的唯一来源于估计练习,这是达到人口统计测量的接近近似值的唯一现实方法。最终的结论是通过使用贝塞尔的修正使有偏方差输出(被低估——通过样本计算获得)无偏。

我将在接下来的博客中介绍一个低调但非常重要的“自由度”概念,因为它对于解决统计学中的主要解释挑战非常重要,请保持关注

谢谢!!!

为什么 VAE 是基于可能性的生成模型

原文:https://towardsdatascience.com/why-vae-are-likelihood-based-generative-models-2670dd81a40?source=collection_archive---------12-----------------------

罗马法师在 Unsplash 上拍摄的照片

生成模型是学习从现有数据生成真实数据样本的强大工具

当我们必须决定使用什么具体方法来实现生成模型时,我们必须处理泛化与可解释性的权衡:简单的方法是可解释的,但它们的泛化能力明显低于像(大)神经网络这样的方法,神经网络已经显示出惊人的能力,但它们被认为是黑盒,因为我们仍然缺少一个合理的理论。

然而,从更抽象的角度来看这个领域,我们有一个很好的理论,它可以帮助我们理解一些重要的特征,并提供重要的见解,当我们必须监控这种模型的训练时,这将是有用的

我们将在这里集中讨论这个问题

最大似然估计

最大似然估计是参数估计的基本工具

从贝叶斯定理

贝叶斯定理,来自 https://www.saedsayad.com/naive_bayesian.htm

我们看到可能性被标识为 P(X|C ),但是它是什么意思呢?

严格来说,它代表一个条件概率,因此给定 C 为真,X 的概率是多少

但是当 C 是一个分布时会发生什么呢?

P(X|C)仍然是概率,因此它的输出在[0,1]中吗?

这个问题的答案是否定的:P(X|C)的输出恰好是非负的(事实上,贝叶斯公式中的所有其他项都是非负的,并且后验概率一定是非负的,因为它是一个概率),但它不是一个概率,因此它可以大于 1

那么这个值如何转化为后验概率呢?

这是贝叶斯公式中其他两项的工作:先验和证据(分母),虽然前者来自假设(因此在计算方面不存在问题),但后者需要计算,这实际上通常非常困难,因为它涉及非常大空间上的棘手积分。

无论如何,如果我们专注于可能性,我们就不必担心处理棘手的积分

想法是使用似然性作为两个分布 X 和 C 之间的相似性度量,并在其上定义一个优化问题

但是请注意,可能性不是距离,因为它不是对称的:所以 P(X|C)不是 P(C|X)

要理解什么样的顺序对你有效,只要想想你想要什么样的后验概率:可能性的顺序是相反的。

但是哪两个发行版?

因为我们的目标是在数据集 D 上训练生成模型 G(X ),那么我们将有

  • D:训练集中数据的分布

  • G(X):生成数据的分布

这意味着将训练转换为以最大化 P(D | G(X))为目标的优化问题

实际上,我们将使用本质上是参数函数的神经网络来实现 G(X ),我们称之为 G(X;因此,问题的最终目标是找到最大化数据集和生成数据之间的似然性的θ值

生成模型学习的最大似然法

生成模型

因此,虽然现在应该清楚我们的生成模型是参数化的,以及我们使用什么框架来估计它的参数,但我们还没有定义什么是 X

这是一个很好的观点,因为生成模型本身不需要额外的输入 X,它应该像一个黑盒

  • 按下按钮,我们就可以从中获取样本
  • 并允许我们改变一些设置,因为它们通过微分与结果有某种联系

但是实际上,如果我们使用一个神经网络,那么它就是一个完全确定性的架构:它没有任何新颖性,给定相同的输入和相同的参数化,那么它总是返回相同的输出

那么我们如何增加新鲜感呢?

为此我们需要一个额外的输入

我们终于能够将它与标题联系起来,并开始处理最初的问题,所以让我们介绍一下变分自动编码器

VAE

关于 VAE 的详细介绍,我推荐这篇来自 TDS 的文章

[## 了解变分自动编码器(VAEs)

逐步建立导致 VAEs 的推理。

towardsdatascience.com](/understanding-variational-autoencoders-vaes-f70510919f73)

来自https://towardsdatascience . com/understanding-variable-auto encoders-vaes-f 70510919 f 73

简而言之,VAE 的生成部分是解码器,它本质上是一个将潜在空间中的点映射到可观察空间中的点的函数,用于图像生成

-潜在空间作为 N 维欧几里得空间,所以潜在码本质上是 N 个实元素的向量

-作为 W x H x 3 张量空间的可观察空间,用于 W x H 大小的 RGB 图像

因此,从统计的角度来看,解码器得到输入分布 Z,并将其转换为输出分布 X,因此 G(Z) -> X 和 Z 的每个样本 Z 属于潜在空间,X 的每个样本 X 属于可观察空间

这个公式给出了在最大似然估计框架中使用的第二个术语:发生器分布,所以让我们用正确的符号重写这个公式

MLE 解码器培训

我们可以开始训练解码器了吗?

从技术上来说,是的,我们可以开始随机采样发电机潜在空间,并从数据集中随机选取图像,尝试调整θ,以对齐 2 个分布

它永远不会起作用,因为不仅潜在代码和期望输出之间没有关系,而且它还会随着时间而改变。

因此,让我们至少将潜在空间代码与数据集中的每个样本相关联:随机选择,但至少随时间保持不变。

在这种情况下,解码器将最好地完全过拟合训练集,但是将具有零泛化能力,因此完全无用。

我们缺少的组件是编码器,它与解码器的功能相反:从可见空间映射到潜在空间。

让我们用 F(X) -> Z 来表示它,让我们假设用神经网络来实现它,还有另一个参数函数

理论上,它应该增加参数空间大小,但是实际上编码器和解码器共享它们的权重(在某种意义上,它们的参数化是另一个的转置),所以让我们用θ来标识它们两者的参数化

加上这个就结束了循环,允许我们从图像生成代码,从代码生成图像。

因此,从分布角度来看,我们通过对数据集进行采样获得分布 X,该分布由编码器转换为分布,该分布由解码器转换为分布 X’,因此,通过比较 X 和 X’,可以在 MLE 框架中进行训练,我们可以表示如下

全自动编码器的 MLE 训练

结论

在这里,我们已经详细地展示了自动编码器如何在最大似然估计框架中被训练,以及为什么它们被称为基于似然的生成模型

为什么皮蓬对芝加哥公牛队来说如此便宜?

原文:https://towardsdatascience.com/why-was-pippen-such-a-bargain-to-the-chicago-bulls-8436f273beca?source=collection_archive---------71-----------------------

尽管他对球队做出了宝贵的贡献,但斯科蒂·皮蓬的合同不仅仅是偶然的。

来源:芝加哥公牛队的脸书页面

对于那些看过网飞的《最后的舞蹈》的人来说,纪录片提出的最好奇的一点是芝加哥公牛队的小前锋斯科蒂·皮蓬相对较低的工资。1987 年被公牛队选中,这位球员在 20 世纪 90 年代统治 NBA 期间成为全明星迈克尔·乔丹的主要搭档。尽管如此,在这支球队赢得的最后一个总冠军期间,公牛队的球星只有联盟第 112 高的工资,只有公牛队的第 6 高。相比之下,乔丹在 1997-98 赛季赚了 3300 万美元,而皮蓬只赚了不到 270 万美元

是什么导致了皮蓬这样的结局?在纪录片的第二集,集中在旧金山的历史,皮蓬解释说,他接受了公牛队最初的安全建议。这名球员担心职业生涯过早结束,而目前保护球队和球员的工资帽规则在 1991 年并不存在。哥伦比亚广播公司体育频道的山姆·奎因详细介绍了皮蓬的合同条款。

虽然人们普遍认为皮蓬接受了一份糟糕的合同,但如果公牛队能够重新谈判他的合同或放弃他,根据他的潜力,皮蓬在 1997-98 赛季应该赚多少钱?首先,让我们后退一步:鉴于皮蓬在 1996-97 赛季的表现,下赛季皮蓬对公牛队的价值是多少?根据收集的数据,在 1996-97 赛季,皮蓬的 VORP 为 6.1,调整后的使用率为 15.7%(分别落后于迈克尔乔丹的 8.6 和 15.8%)。但是,我们知道,这个表现并没有体现在皮蓬那个赛季的工资上。皮蓬的薪水仅排在第六位,相当于中锋卢克·朗利薪水的 80%,调整后的使用率为 7.5%,VORP 仅为 0.1%。换句话说:皮蓬是公牛队第二有价值的球员,但他的收入远非如此。

根据从 hoopshype.com 收集的数据(参见我的 Github 访问我的网页抓取脚本),在 1996-97 年期间,一名小前锋的平均工资为 150 万美元。皮蓬的合同保证他的工资为 225 万美元。尽管他的工资比小前锋的平均工资高 55%,但他无法获得小前锋中 24 个最高工资之一。但是据报道,皮蓬可以得到更多。事实上,他真的做到了,当他与公牛队和火箭队签署了一份先签后换的协议,几乎是他年薪的三倍。

图 1:小前锋的工资分布(1996-97)

但是 90 年代 NBA 一个球员的工资受什么影响呢?GM 怎么决定一个球员值多少钱?也许他们依赖于球员的统计数据,以前的成绩,球员可能给球队带来的影响(好的和坏的),球队对具有某些特征的球员的需求,以及最终他们可以付给球员多少钱。根据现有的统计数据,任何对此感兴趣的人的第一个明显的尝试是设计一个回归模型并对其进行调整。不幸的是,我们可能会认识到,使用球员统计数据的线性模型构建起来会非常复杂,并且可能会产生糟糕的结果。这就是为什么我试图使用尽可能少的球员数据来回答这个问题,并通过替补球员(VORP)、球员效率等级(PER)和年龄来解释每个赛季的工资。我还使用游戏和玩的分钟数来估计一种“调整后的使用率”,由下面的表达式给出:

因此,很容易理解,调整后的使用率永远不会高于 0.20,因为一名球员在球场上的时间不能超过一支球队上场时间的 20%。

但是,我没有构建回归模型,而是将统计数据分为以下 5 个百分点:

图 2:统计百分比

根据皮蓬的贡献,这可能是预测皮蓬应得工资的一个好方法,因为俱乐部总经理不能最大化为每个球员支付的每单位货币所获得的 VORP 或 PER,原因有三:(i) NBA 不是一个竞争性的劳动力市场(有限数量的俱乐部试图获得有限数量的有价值的球员);(ii)俱乐部和球员之间的谈判更类似于拍卖(如果球员不同意俱乐部给他的条款,他可以期待另一个球队的提议);以及(iii)谈判采取长期合同的形式(这意味着俱乐部和球员不会根据生产率逐年谈判工资)。

一个球员挣的工资可以由这些百分比决定吗?一旦我将百分位数作为字符加载,我们可以运行单向方差分析(ANOVA)来回答这个问题。正如我们在下面的 p 值中看到的,我们应该否认我们的零假设(H0 ),即根据变量的百分位数,总体均值是相等的。

图 3:方差分析—百分位数

正如我们在下面的交互图中看到的,VORP 和 PER 似乎都是很好的解释变量,因为绩效越低,工资就越低。在 1996-97 赛季期间,NBA 俱乐部的管理人员成功地根据球员的预期表现来决定球员的工资。只有当我们关注年龄在第 5 百分位的球员时,情况似乎才不是这样,对此最合理的解释可能是当一名球员即将满 30 岁时,他与他签订了更长的合同:随着球员年龄的增长,他不能像过去那样发挥作用。

图 4:互动图(绩效 x 工资 x 年龄)

所以,我的下一步是使用这些数据对我的基础进行聚类。作为一个通常的步骤,我运行了一个肘方法来帮助我发现最佳数量的集群,然后我运行了 Kmeans 算法,最佳数量为 4 个集群。请注意,我没有缩放数据,因为我的所有变量已经处于相同的比例。然后,我将每个球员的聚类数合并到我的主数据框中,发现皮蓬与迈克尔·乔丹、丹尼斯·罗德曼、克里斯·穆林、哈基姆·奥拉朱旺、雷吉·米勒等并列第一。

图 5: Kmeans 分析

有了这些聚类的知识,我们现在可以根据球员的表现和对球队的重要性以及他的职位来分析他的期望工资:

图 6:创建我的箱线图

这就是我们得到的。毫不奇怪,表现更好、对球队更重要的球员过去会挣得更多,这种情况一直持续到我们的时代。根据该图,集群 1 中玩家的平均工资曾经比其他集群中玩家的平均工资至少高 1.8 倍。但是引起我注意的是最低工资和标准差的值。凯文·加内特(160 万美元)、雷·阿伦(180 万美元)、阿伦·艾弗森(220 万美元)等人签下的新秀合同可以解释为什么一个贡献更多的球员工资相对较低。但是皮蓬的收入甚至低于平均工资(225 万美元)。

图 7: Bloxplot 和平均工资(按组)

到目前为止,我们已经有了很好的线索,但还没有确定一个值。我试图采用卡方独立性检验,使用平均工资作为我的参考值,来发现球员的工资是否与其集群和位置相关,因为我们对集群 1 的小前锋的工资感兴趣。p 值表示聚类和位置在统计上相互关联。进行分析,并检查观察值和期望值。正如我之前所展示的,一个小前锋在第一个赛季的平均工资是 200 万美元,但预期的平均工资应该在 270 万美元左右——不是很高,但比皮蓬那个赛季的工资高出 50 万美元。

图 8:卡方检验

那么,小前锋的工资怎么样呢?他们以前比其他位置的球员挣得多吗?少?上面的方框图告诉我们,在第一个集群中,小前锋的平均工资是 200 万美元,标准差是 70 万美元。一旦罗德曼的收入几乎是皮蓬的三倍,考虑到拉特里尔·斯普雷维尔是 1996-97 赛季收入最高的小前锋(700 万美元),认为小前锋过去收入更少并不为过——特别是如果我们考虑到在 90 年代, 大个子(大前锋或中锋)曾经在比赛中有更大的影响力——如果你怀疑这一点,我强烈推荐你柯克·戈德斯贝里的书,《翻滚的球》!

为了消除这种怀疑,除了 Tukey 测试之外,我还使用每个位置的平均工资来评估这种可能性,答案是位置可以决定球员的工资

图 9:方差分析—位置

根据这一点,我们可以说,这场比赛中最伟大的小前锋之一是一个便宜货,不仅因为他的合同不好,还因为 NBA 高管没有为大部分小前锋支付应有的工资。大前锋和中锋是最受关注的球员,也许是因为当时这项运动的特点,争夺空间是一个决定性因素,他们因此得到了更好的交易——哈基姆在乔丹之上被选中,公牛队的第三人是篮板手,甚至查尔斯·巴克利在 1993 年当选 MVP 都不是巧合。他们都是球员,除了荒谬的天赋,还有身体,力量和为空间而战的意愿。

皮蓬最好的机会是尝试得到一份更好的合同,就像他在 1997-98 赛季所做的那样。但是考虑到大个子是最有目标的球员,公牛队的高管们没有动力给他一份更好的合同,如果他们认为他们可以为那个位置找到另一个好球员的话。即使是 33 岁的勇士队传奇人物克里斯·穆林,那个赛季也只赚了 280 万美元(比标准偏差多一倍)。

最后,有人可能会说皮蓬应该像斯普雷威尔一样至少赚 700 万美元,但如果一个先签后换的交易可以给球队带来两名出色的球员,为什么要给皮蓬 700 万美元并超越上限呢?我们可以分析公牛队高层在 1996-97 赛季末面临的选择,是给皮蓬一份新合同。但这需要一堆博弈论,这是另一个帖子的问题。

为什么我们绝对没有过度宣传冠状病毒

原文:https://towardsdatascience.com/why-we-are-definitely-not-over-hyping-coronavirus-f69a8d3cc091?source=collection_archive---------20-----------------------

系统地

冠状病毒爆发的定量研究。在 Unsplash 上由 Ani Kolleshi 拍照

DDisclaimer:如果定量分析和微分方程吓到你了,别担心。本文重要的外卖都印在 ** 粗体 ** (而且是重要的!).此外,图表中有大量的智慧,即使你不在乎所有这些是如何计算的。

新闻告诉我们要保持社交距离。政府告诉我们要自我隔离。世界卫生组织(World Health Organization)正在讨论拉平新感染的曲线,这样我们就不会让世界卫生系统超负荷运转。

有些人声称这完全是一场骗局。其他人看到了情况的严重性,但不明白为什么这比季节性流感更糟糕。其他人再次认为,人死于许多不同的原因,冠状病毒造成的死亡人数与全因死亡率相比看起来相当小。

他们错了。

日冕是一个巨大的威胁。数字说明了一切。

在这个故事中,我将对世界范围内的疫情进行定量分析。这样做的目的是估计如果我们不采取行动,我们将不得不哀悼多少死者。这应该非常清楚地表明您是否需要关注(即自我隔离)。

[## 如果你因为冠状病毒而被锁在家里,11 堂最好的数据科学课

不用花一分钱就可以开始你的职业生涯

towardsdatascience.com](/11-best-data-science-classes-if-youre-locked-home-because-of-coronavirus-ca7d2d74a454)

有多少人被感染了?

出于几个原因,我使用德国的数据作为例子。一方面,欧洲是疫情的新中心,所以选择一个欧洲国家是有意义的。

另一方面,德国并不是第一个遭受日冕袭击的欧洲国家,因此它有更多的时间做好准备。这包括建立测试中心。所以确诊病例的数字可能更接近现实。

我选择了德国,而不是我居住的法国,因为测试似乎要好得多。截至记者发稿时,德国目前的确诊病例比法国多 50%。但是死亡人数也少了八倍!由于两国的医疗保健系统相似,这表明法国的许多病例没有被发现。

图 1:病毒爆发以来人均确诊电晕病例数。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。

德国官方数据由罗伯特·科赫研究所记录。从 3 月 4 日起的数据从他们的档案中提取;对于 2 月 24 日至 3 月 3 日之间的数据,我使用了相应的维基百科页面。不幸的是,由于官方来源没有提供数据,我无法提取恢复的人数。但是由于这个数字到目前为止还很小,忽略它不会使结果有很大偏差。

从 3 月 16 日起,德国推出了社交距离措施,如关闭学校、幼儿园和大学、酒吧、剧院和电影院,鼓励人们在家工作。由于这些措施需要一些时间来产生可见的效果,我们也包括了从 3 月 16 日到记者发稿时的数据。

图 1 显示了自爆发以来德国冠状病毒检测呈阳性的人口比例。截至记者发稿时,这一比例约为万分之十七。相比之下,普通流感每年平均影响 1 万人中的 61 人。

自疫情爆发以来,科罗纳啤酒的销量直线下降(尽管这种啤酒与病毒无关)。照片由汉尼斯·里克特Unsplash 上拍摄

会有多少人被感染?

下面是一些数学原理——如果你不介意,可以向下滚动到图 2。

我使用 先生模型来估计德国将出现的感染人数。

在这个模型中,我们有三组人: S 是易感者,即尚未被感染的人。我是目前被感染的人——这是我们感兴趣的。而 R 则是已经痊愈或者死亡的人。

对于时间点 t ,I 表示易感、感染或康复的人口比例,分别为 s(t)、i(t)r(t) 。请注意,我使用小写符号来谈论人口的比例。

这些分数是如何随时间变化的?开始时,除了一小部分感染者——2 月 24 日德国 8279 万人中的 16 人——每个人都是易感的。因此,在时间 t=0 ,我们有以下情况:

越来越多的人被感染,并最终康复(或死亡)。让 b 是被感染者每天传播病毒的平均次数。那么易感人群的数量将随着 b 以及感染者与易感者相遇的次数而减少。我们可以这样写:

同样,让 k 成为每天康复的人的分数。那么最终康复(或死亡)的人数的变化是:

我们假设这个国家的人口数量保持不变,也就是说,没有大规模的移民潮,也没有太多的出生和其他原因造成的死亡。这是一个合理的近似值,考虑到 EU-边境目前已经关闭,出生率也不算太高。那么所有组的变化总和必须为零:

因此,感染者的比例变化如下:

仅此而已!

这组微分方程有解析解,但是有点难处理。所以我让我的计算机来做这项艰苦的工作,用数字来解决它。

当然,我们希望模型能够很好地描述现实。我做了一个有根据的猜测,人们平均生病 15 天,因此 k = 1/15。还有,我猜测一个生病的人平均大约三天就会传染给别人一次,所以 b =1/3=0.33。

我稍微调整了一下模型以更好地适应数据。在图 2 中, b =0.32,但 b 仍为 15。第 12-23 天的感染率被低估了,但之后的感染率与之前持平。这可能会稍微影响我们的结果;稍后我将详细介绍这一点。

图 2:病毒爆发以来德国人均感染人数。红点是截至发稿时的真实数据,蓝线是拟合数据的模型。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。

现在有趣的部分来了:在疫情高峰期会有多少人被感染?这如图 3 所示。我用了和以前一样的模型,但它将在未来几个月展示。

根据我们的模型,在大约第 65 天——也就是离新闻发布还有 40 天——几乎一半的德国人口将在没有任何政府干预的情况下被感染。这太可怕了。

对这个模型有一个警告:即使它在数学上构建得很好,也没有办法调整参数使它更好地匹配第 12 天和第 23 天之间的数据。因此,它可能比实际情况更陡峭,并且在模型中峰值可能太早。

唯一的选择是低估一切。如果我稍微把感染率改成 0.31(而不是 0.32),模型曲线一直在数据下面。有趣的是,这并没有显著改变事情。当我低估时,高峰在 45 天后,46%的德国人口将被感染——非常接近高峰的 47%,如下图所示。

如果政府和人民不采取行动,几乎一半的德国人口将在五月初感染上科罗纳。

图 3:德国从病毒爆发到 6 个月后人均感染人数的模型。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。

医院会有多满?

根据迄今为止最大的研究,许多病例非常轻微,只有 19%的病例是严重的。

目前还不清楚有多少严重的病例需要住院治疗,但让我们假设它约占所有病例的 5%。这是一个乐观的猜测;我假设其他 14%的严重病例有足够的护理人员和设备在家治疗。

如果 5%的病人被感染,这意味着 2.35%的德国人口在高峰期需要病床。

德国是世界上人均医院床位密度最高的 T4 之一,每 1000 名居民拥有 8 张床位。但在高峰期,我们每 1000 名居民需要 24 张床位!

如果你看看重症监护室对床位的需求,情况会更糟。这些都是电晕病患者急需的,但德国每 10,000 名居民只有 3 张重症监护病床。

另外,我还没算上因为电晕以外的其他原因生病的人。这意味着医院将会非常非常拥挤…

即使每四个重症病例中只有一个需要住院治疗,德国也需要比现在多三倍的医院床位(以及医生和护士……)。这还不包括对重症监护室、人工呼吸器等的额外需求。

在疫情爆发的高峰期,医院的床位将变得稀缺。纽约公共图书馆在 Unsplash 上由拍摄的照片

有多少人会死?

不到两个月,德国的疫情将达到顶峰。这段时间不足以开发出治疗方法或疫苗。

因此,人们可以很容易地说,死亡率将会是至少 2.3%,而它到目前为止一直是

为了估计德国科罗纳的死亡人数,我们首先要估计有多少人被感染。我对图 3 中的曲线进行积分,然后乘以 k。

请记住, k 是每天好转的人的比率,所以 k 的倒数是感染的持续时间。因此,曲线下的面积除以持续时间得出了感染人数。

结果是 99%的德国人会在接下来的 6 个月内被感染。因此,德国每 50 个人中就有 1 个以上会死亡。

太可怕了。

在接下来的六个月里,德国的每个人——或任何其他与电晕打交道的国家的每个人——都会有至少两三个死去的熟人、朋友或亲戚要哀悼。

我们能做什么?

很多!即社会距离和隔离。

在我们的模型中,这意味着减少参数 b ,因为我们想要降低每天的平均感染率。我们无法真正改变 T21,因为这是疾病的内在属性。

图 4 显示了当每日感染率从 b =0.32 降至 b =0.14 时的感染人数。这意味着一个被感染的人每七天才会感染另一个人,而在上面的模型中是每三天。

你可以看到两点:第一,峰值下降到人口的 16%。如果医院里没有人患有其他疾病,也不需要额外的重症监护室,这就足够医疗保健系统处理了。在这种情况下,如果不建设额外的设施,每个人都得到他们需要的护理仍然是不太可能的。但至少没那么糟糕。

图 3:从病毒爆发到 6 个月后德国人均感染人数的模型,包括一些社交距离和隔离。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。

其次,峰值几乎是未来的三倍。这意味着,如果我们将社交活动减半,主要爆发将在 2020 年秋季。这将给我们更多(但可能不够)时间来开发治疗方法和疫苗。

在这种情况下,受感染的总人数也会下降,从之前的 99%下降到 83%。假设死亡率保持不变,这意味着你通过隔离拯救了六分之一人的生命。这在德国挽救了 30 万条生命。

社会距离将使医院免于人满为患,让我们有时间开发治疗方法,并拯救每个国家成千上万人的生命。

最后一点:呆在家里。拯救一条生命。

我知道当你总是穿着睡衣四处闲逛,而你一天的外出只是带着你的狗散步半个小时时,这感觉并不十分英勇。我知道——我住在法国,我们都被隔离在这里。

但是你正在做一些英勇的事情。延缓这场危机的高峰——拉平曲线——必须是我们当前的首要任务。洗手,不要摸脸,呆在家里。留下来。在。回家。

是的,我只是在重复世界各国政府的说法。因为我的定量分析证实了他们所说的一切!你不需要理解所有的分析,但是如果你是一个像我一样的极客,你可以随意探索它们的更多细节

最后,保持健康!

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

为什么我们如此想走出这条路?

原文:https://towardsdatascience.com/why-we-are-so-tempted-to-go-out-of-lane-c4141f1e3d51?source=collection_archive---------61-----------------------

工作使我们习惯于

(摄影:兰迪·欧)

上周早些时候,我认真考虑讨论数据人员如何需要非常谨慎地对待他们在公共场合谈论的关于新冠肺炎的事情。有很多没有上下文的数据和图表,对我们这些做数据的人来说就像一块磁铁。我们很容易在工作中制作一些图表,得出一些不切实际的结论,并通过传播对该领域专家的不信任,意外地造成弊大于利(只需看看第 4 页上他们模型参数的复杂性)。

这种情况的一个例子是在这个 twitter 线程这里[自删除]:

补充说明:这并不是说数据科学家和工程师垄断了新冠肺炎的可疑判断。我向熟悉病毒学和流行病学的人询问了一些他们见过的疯狂事情的例子,并得到了一些 MDs 甚至流行病学家的链接,这些人显然说了一些他们专业领域之外的不正确的事情。但是我已经超出了我的能力范围,不能评价这些人发的推特的质量,所以我避免在这里直接链接任何东西。

与此同时,我偶然看到 Amanda Makulec 的帖子,内容是关于在制作新冠肺炎图表 之前需要考虑的 10 件事情,在我这个外行看来,这非常合理,可以作为在处理新冠肺炎数据时不要完全介入的指南。

回到数据科学,我对整个情况思考得越多,我就越好奇为什么我们会有这种冲动?

我可以想象,我们中的大多数人不会认为我们天真的笔记本电脑天气模型可以揭示一些隐藏的真相,而专业气象学家和超级计算机还没有发现这些真相。为什么我们会认为我们可以比那些花了整个职业生涯思考这个问题的人更好地预测疾病的传播?大喊邓宁-克鲁格、${ field }的狂妄或天真是很容易的,但这并不令人满意。这些人很多既不傻,也没有恶意,为什么呢?

常青树 xkcd 漫画:《我是来帮忙的》

然后我突然想到,我确实是被雇来在我的日常工作生活中做同样的高周转理论分析的,这是导致这些问题的原因。有时候,我天真的方法工作得出奇的好,但是即使它们不成功,如果我做错了事情,我也会得到奖励,但是迭代最终把事情做对(ish)(T1)。这在本质上与正确的科学是相反的。隐藏无效结果的强大压力导致了文件抽屉问题

问题出在我们围绕自己建立的世界里。

在工业界,人们偏向于行动,而不是正确

机会成本在工业中是真实存在的。决策是在不确定和竞争的条件下做出的,因为没有什么是可以保证的。走出校门的人必须学会的最重要的事情之一是,如何判断什么时候工作“好到足以”用于商业决策。这是一个非常不同的严谨标准,与学术场合的要求不同。

由于决策将在一定时间内做出,无论数据是否可用,数据从业者的角色是在给定约束的情况下提供尽可能多的数据驱动的指导。可以接受的是,所提供的信息是不完整的,有助于增加成功几率的任何东西都比什么都没有好。

当然,我们可以主张等待收集更多的数据,而且肯定会有做出正确决定的时候。但是,当一项交易绝对需要在一周内签署,或者有紧急情况,等待将不是一个选项。

一个例子

想象一下,你在一家销售小配件的电子商务网站工作。有一天,你注意到有一笔不寻常的订单。他们都来自一个通常不会订购很多小配件的州。从以前的销售模式经验来看,这闻起来足够可疑,看起来像某种欺诈,尽管你不确定为什么。你是做什么的?

在这种情况下,大多数人会收集这些可疑订单的数据,寻找模式。都是出自一小撮 IP 吗?都是发往同一个地址吗?是否有某种外部事件以某种方式推动了对小配件的需求(比如疫情恐慌或名人代言)?)营销团队是否购买了该地区的电视广告?

有了这些数据,你需要找到一个令人信服的案例,让管理层知道该怎么做。您是否决定这不是欺诈,并接受将产品运出(可能被盗)的风险,并且订单的资金被收回?还是宣布是欺诈需要取消所有订单,甚至可能全国暂时封锁?您需要迅速做出决定,因为这些订单通常会在 24 小时内发货,除非停止发货,否则您避免损失的选择将变得极其有限。每一分钟,面临风险的资金都在增加。

如果我处于这种情况,我很可能会主张迅速冻结所有可疑订单,为进一步调查赢得时间,而不会让公司面临进一步的风险。在大多数情况下,需要一两个线图,几个谁在下订单的描述,上层管理人员会很容易同意这样的决定。这些年来,我已经非常擅长用数据来与决策者交流这类论点,以引起他们的注意。

看一看决策的风险状况。如果订单是合法的,让订单通过的风险要比给客户带来不便的风险大得多。如果他们的订单有问题,合法买家可能会稍后回来,欺诈不太可能做同样的事情。管理层同意最初的分析,并暂时锁定整个州中具有类似特征的每个人。

如果经过进一步调查,我们发现这实际上是一场欺诈(因为有些人溜了进来),我看起来就像一个阻止了一场灾难的英雄。"阻止了价值 X 美元的诈骗!"诸如此类。

如果我们发现我错了,并且拒绝了好的订单,公司会立即转向路线修正和损失控制。我们发表一份公开声明,也许提供折扣来挽回失去的顾客。我不太可能因为失败而受到指责,因为根据当时的信息,每个人都同意这是正确的决定。

我被称为失败者的唯一真正原因是,我在分析和报告中犯了重大错误或遗漏,近乎于疏忽。

门槛极低。

失败往往不是什么大事

由于奖励结构的不对称,我习惯于以特定的方式行动。以这种方式做了十多年后,它几乎是自动的。

我不在一个错误会导致生命损失或 T2 损失数十亿美元的行业工作。从全局来看,我的失败“无关紧要”。成本相对较低,失败是“快速失败,学习,重复”的科技文化的一部分。这是意料之中的事,我很大程度上被这个事实所掩盖。显然,我更希望尽可能经常有积极的结果,我也在努力做正确的事情,但我的负面影响很小。

最重要的是,整个过程有一个棘轮机制,在这种机制下,具有可见负面影响的变化可以回滚,而正面影响可以保留。拥有撤销按钮意味着你可以非常鲁莽。我敢肯定,你可以看到这是如何不能很好地转化为没有撤销按钮的情况,如紧急疫情通信。

理论?怕什么?

工业工作本质上(通常)是非常理论化的。虽然有“最佳实践”的总体主题,如“具有这些属性的电子邮件具有良好的回复率”,或“人脸往往会吸引用户的注意力”,但它很少被提炼到科学意义上的严格理论。我们通常不会在寻求一个有弹性的、可概括的真理的层面上运作。我们只是对找出适合当前情况的方法感兴趣。

这种做事方式的好处是你可以跟上不断变化的情况。也许没有一个神奇的好邮件或注册页面的通用理论。它可能会随着时间的推移而改变。最佳实践会随着时间的推移而发展。

理论性意味着我们经常用一套类似的工具来解决一系列问题,这些工具在本质上是通用的。例如,线性回归几乎在任何地方都有效,并给出合理的结果,尤其是当你盲目地进入一个问题空间时。当跨领域应用方法时,有趣的事情也会发生。

这种做事方式的问题在于,如果不考虑阐明理论概念,我们就很难真正坐下来思考和探索这个问题的所有因素。这意味着我们的模型不能解释许多产生误差的因素。所以我们最终使用相对简单的模型,因为任何更复杂的东西都会被抛弃。

当你在这样的条件下工作很长一段时间,就很容易认为简单化的模型对每个问题“足够好”,而不是某一组问题。这对于开始一场 Kaggle 竞赛来说可能是好的,但当你涉入一个确实有理论和精炼模型的领域时,它就不起作用了,这些理论和模型已经被许多科学家审查和实地测试了几十年。

所以等等,这里有什么危害?

你可能会问,坏处在哪里?最坏的情况是,我们让公众意识到情况的危险,对吗?现在每个人都落后了,这有什么不好?我们需要马上行动!

当我坐在办公桌前,越来越恐惧地看着美国对新冠肺炎的笨拙回应时,我并不是不赞同这种观点。但即便如此,我认为把东西扔在那里还是很危险的。原因如下。

我最近一直在翻阅各种各样的应急沟通手册,主要是由世卫组织和 FEMA 等政府机构编写的,以了解所有应急管理官员正在努力做些什么。他们的指导方针很大一部分集中在负责处理紧急情况的人需要如何通过有效的沟通建立和保持与社区的信任,以便当机构试图告诉公众以某种方式行动时,公众愿意倾听。

如果公众对沟通有足够的接受度,并且已经了解了情况,那么公众的行动和管理机构的目标更有可能是一致的。这将被认为是一件好事。我们希望人们现在洗手,避免大规模的人群聚集,但我们需要人们的合作来做到这一点。

这就是人们发表不负责任的言论所造成的损害。这不是因为“制造恐惧”或“传播恐慌”,而是因为它侵蚀了公众对专家的信任,无论他们是政府专家还是医学专家,他们试图让人们为了共同利益改变他们的行为。

信任很容易失去,也很难赢得,尤其是在有死亡风险的情况下。所以侵蚀的影响往往是不利的。这上面也没有撤销按钮。在这个时代,谣言一旦开始,就会很快失控。

在这种环境下,数据和可视化尤其危险,因为人们把重量和可信度归因于彩色图片和数字。即使这些数字完全是胡说八道,仅仅是数字的存在和右边标有“已感染”的红色可怕图表就让人们很难忽视。

这里是 Aner Tal 和 Brian Wansink 在 2016 年发表的一篇名为“被科学蒙蔽”的可爱论文,其中(在 3 项研究中的第 1 项)61 名参与者在一项基于土耳其机器人的研究中发现,当一种药物的广告有一个与广告文本相比没有添加新信息的图表时,它会更有说服力。虽然纯文字说服了 2/3 的参与者相信药物是有效的,除了一个人以外,所有看过图表的人都认为药物是有效的。

多亏了科学的神奇光环,我们才真正有了进入人们信息处理的作弊代码。这既可以用来行善,也可以用来作恶。

请小心这种力量。

这篇文章最初发表在 3 月 17 日兰迪的时事通讯上:计数材料。你可以免费订阅,一周收到一次类似的帖子,没有重新发布的延迟。

为什么我们关心日志丢失

原文:https://towardsdatascience.com/why-we-care-about-the-log-loss-50c00c8e777c?source=collection_archive---------27-----------------------

Kaggle 比赛中最常用的度量标准

(图片由作者提供)

机器学习管道中最关键的部分是性能评估。要了解模型的性能和缺点,需要一个强大而全面的评估过程。

对于分类任务,日志丢失是最常用的指标之一。它也被称为交叉熵损失。如果您关注或参加 Kaggle 竞赛,您会发现原木损失是评估指标的主要选择。

在本帖中,我们将看到是什么让日志丢失成为首选。在开始举例之前,让我们简要解释一下什么是日志损失。

对数损失(即交叉熵损失)通过比较实际类别标签和预测概率来评估性能。使用交叉熵来量化比较。

交叉熵量化了两个概率分布的比较。在监督学习任务中,我们有一个目标变量,我们试图预测。使用交叉熵比较目标变量的实际分布和我们的预测。结果是交叉熵损失,也称为对数损失。

在计算对数损失时,我们取预测概率的自然对数的负值。我们对预测越有把握,测井损失就越低(假设预测是正确的)。

例如,-log(0.9)等于 0.10536,而-log(0.8)等于 0.22314。因此,90%的把握比 80%的把握会导致更低的测井损失。

如果你想进一步阅读,我在另一篇文章中详细解释了熵、交叉熵和对数损失的概念。这篇文章更像是一个实践指南,展示了日志丢失如此重要的原因。

在分类任务中,模型通常为每个类别输出一个概率值。那么具有最高概率的类别被指定为预测类别。传统的度量标准,如分类准确度、精确度和召回率,通过比较预测类和实际类来评估性能。

考虑下面的情况。

import numpy as npy_true = np.array([1,0,0,1,1])

这是一个二元分类任务,有 5 个观察值标记为 0 或 1。这是两个不同模型的输出。

y_pred1 = np.array(
[[0.2, 0.8],        #predict 1
[0.6, 0.4],         #predict 0
[0.7, 0.3],         #predict 0
[0.65, 0.35],       #predict 0
[0.25, 0.75]])      #predict 1y_pred2 = np.array(
[[0.1, 0.9],        #predict 1
[0.7, 0.3],         #predict 0
[0.85, 0.15],       #predict 0
[0.55, 0.45],       #predict 0
[0.2, 0.8]])        #predict 1

虽然预测的概率不同,但是当选择具有最高概率的类别时,预测的类别是相同的。

因此,如果我们使用分类准确度来比较这两个模型,则两个模型的结果将是相同的。

from sklearn.metrics import log_loss, accuracy_scorey_pred1_classes = np.array([1,0,0,0,1])
y_pred2_classes = np.array([1,0,0,0,1])accuracy_score(y_true, y_pred1_classes)
0.8accuracy_score(y_true, y_pred2_classes)
0.8

两个模型都正确地预测了 5 次观察中的 4 次,因此精确度为 0.8。看起来这些模型的表现是一样的。这样想是错误的,因为预测的概率之间有很大的差异。

现在让我们基于日志损失来比较它们。

log_loss(y_true, y_pred1)
0.4856log_loss(y_true, y_pred2)
0.3292

如你所见,差别很大。认为这两个模型表现相同是错误的。

如果预测是正确的,则测井损失奖励在预测时更加确定。90%的对数损失小于 80%的对数损失。

另一方面,如果预测是错误的,它也惩罚更高的概率。假设对于特定的观察,真实的类标签是 1。两个模型预测结果为 0,概率分别为 0.65 (65%)和 0.55 (55%)。0.65 的对数损失高于 0.55 的对数损失。

考虑下面的场景。

(图片由作者提供)

所有预测的概率都是相同的,除了一个观察结果是唯一的错误预测。第二个模型更能确定错误的预测。让我们计算这种情况下的对数损失。

log_loss(y_true, y_pred1)
0.4856log_loss(y_true, y_pred2)
0.6550

第二个模型的对数损失更高,因为错误预测的概率更高。

对数损失考虑了预测的概率。它不仅基于正确的预测来评估性能,而且根据预测的概率来惩罚错误的预测。

这就是为什么 log loss 是一种稳健且全面的评估度量,并被广泛用于机器学习领域的原因。

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

为什么我们需要机器学习算法中的偏差

原文:https://towardsdatascience.com/why-we-need-bias-in-machine-learning-algorithms-eff0343174c0?source=collection_archive---------35-----------------------

有一种观念认为偏见不是最好的东西,因为根据定义,这是一种给客观观点增加主观性的方式。在机器学习中,算法中也有同样的偏差概念。听到这个,有人可能会说,为什么我们需要偏见,为什么我们不把它从算法中去除,并有一个算法,只使用它已经看到的数据来预测未知的新数据。

让我们看看为什么消除偏见的概念会从根本上破坏机器学习。

提供上下文让我们解决一个简单的分类问题。比方说,我们有一些鱼,我们想建立一个机器,可以分类鱼是鲑鱼还是鲦鱼。一个限制是机器只能测量鱼的高度和重量。现在我们已经定义了我们的问题,我们需要一些数据来学习。

这里有一些数据,是用鱼的种类标注的鱼的身高和体重。

培训用数据

现在我们有了一些数据,机器可以从中学习。

绘制的数据

我们希望确保机器没有任何偏见,或者对它正在学习的数据做出任何假设。所以机器只依赖上面提供的数据集。

假设我们想预测这条新鱼是鲑鱼还是小鱼。这条新鱼的身高和体重是 3 . 4。机器会将新的看不见的鱼与存储在它的存储器中的鱼进行比较,然后它注意到有一条尺寸完全相同的鱼,它是一条小鱼。厉害!所以机器确定这条新鱼是一条小鱼。如下图所示:

用绿色标出未知的鱼

让我们看另一条鱼,它的高度是 9,重量是 8。机器检查了所有的例子,然后说抱歉,我从来没见过这么高这么重的鱼,我不知道它是什么。我不想做任何假设,所以我不能给它贴标签。因此,这种消除偏差的概念将我们引向这种无偏概化器,当给定一个看不见的数据点时,它无法基于数据集做出概化。这并不令人惊讶,但并不明显。

用绿色标出未知的鱼

所以这意味着,为了做出一个概括,机器必须做出一些假设,必须有一些偏见,以便从一组可能的概括中选择一个概括。所以,机器学习就是选择这些偏差,并使用它们根据人口数据样本进行预测。

以下是一些来自众所周知的机器学习算法的不同概括或不同偏见的例子:

我们可以做的一个假设是,如果我们说寻找新示例的最近邻居,然后用最近邻居的标签来标记新示例。我们可以说最接近是基于两点之间的欧几里得距离。利用这一点,我们发现新的项目是鲑鱼。这实际上是一个非常著名的算法的基础,该算法被称为最近邻算法。我们引入了一个假设,即每种鱼的数据将来自相同的分布,因此彼此接近。如下图所示:

最近邻算法

我们还可以引入一种新的假设。如果我们像这样画一条线。这就产生了一个线性分隔数据的边界。我们这里的假设是,有一条线性线可以将数据分开。使用这条线,我们可以标记新的点,它说这是一条鲑鱼。这是逻辑回归算法的基础。ML 的订书钉。

逻辑回归算法

以上两种情况向机器引入了不同类型的偏差,并且当机器试图学习和预测时,还有许多其他类型的归纳可以考虑。

由用户决定向机器中输入多少偏差,并且由用户知道偏差如何影响算法决策。例如,我们可以使用一种叫做朴素贝叶斯的算法,它假设如果我们随机挑选一条鱼,得到一条鲑鱼和一条小鱼的可能性有多大。如果这个假设是非常错误的,那么我们其余的预测就完全错了。因此,了解每种 ML 算法的偏差以及它们如何影响决策过程是很重要的。有一点是肯定的,没有偏见就不会有学习。

我希望这已经提供了一些直觉,关于机器如何学习以及偏见如何成为学习过程的一部分。一篇对定义这些概念非常有帮助的论文是 Tom M. Mitchell 的“学习归纳中的偏见需求”,所以请随意查看。

感谢阅读!

为什么我们需要神经网络中的偏差

原文:https://towardsdatascience.com/why-we-need-bias-in-neural-networks-db8f7e07cb98?source=collection_archive---------6-----------------------

当偏见不是坏事的时候

图片由天空电视台拍摄

偏向 ”这个词有很多贬义。当我们想到它时,我们会看到不公平的待遇、偏见、歧视或偏袒某人或某事。这很自然。不幸的是,我们生活在一个所有这些事情都会发生的世界里。然而,根据上下文,单词有许多意思,令人惊讶的是,甚至偏见也是有帮助的。

机器学习是一个领域,我们可以在一些情况下遇到偏见。让我们仔细研究这些含义,并找出使神经网络有用的含义。

偏置数据

首先,让我们讨论偏见的最一般的背景。这是用于训练模型的数据中的偏差。每次我们向神经网络或其他模型提供数据时,它都会决定模型的行为。我们不能指望从基于有偏见的数据构建的算法中获得任何公平或中立的待遇。

这种有偏见数据的一个众所周知的例子是亚马逊招聘工具。它应该对简历进行一些预过滤,这样招聘人员就可以从最有前途的简历中进行选择。这在筛选简历方面非常有用!尤其是在过滤女性简历方面……不幸的是,这个美妙的人工智能解决方案有失偏颇。该系统有利于男性候选人,因为工程师在培训过程中主要使用男性简历[1]。

另一个有偏模型的例子是 Tay 。Tay 是微软发布的聊天机器人。它应该通过发布推文来进行对话。Tay 还能够从用户发布的内容中学习。还有那个注定要失败的泰。它学会了如何具有攻击性和侵略性。Tay 变得有偏见,关掉了。实际上,不负责任的用户用辱骂性的帖子破坏了它,使它变得有偏见。

freestocksUnsplash 上拍摄的照片

所以有偏差的数据肯定是一个负面现象。负责并意识到这一点是构建模型的重要部分。当你创造一个人造大脑时,你必须小心你放进去的东西。否则,你可能会让一个怪物复活。

整个神经网络的偏差

让我们来看看偏见的第二种情况。当我们训练和测试我们的神经网络或其他机器学习模型时,我们可以观察到两个主要趋势:

  1. 模型过度拟合数据。
  2. 模型无法从数据中学习模式。

过拟合就像用心学习。你的模型确实记住了你的大部分训练数据,但是,当新的东西出现时,它就不能正常工作了。你可以认为它擅长回答已经被问过的问题,但是当你打破常规提出问题时,这个模型就失败了。

如果我们根据训练集的大小来绘制验证和训练集错误,那么这样的问题可以很好地可视化。然后我们可以用学习曲线来预警。

如果训练集的误差相对较低,但验证集的误差较高,这意味着我们有一个高方差模型。图中可见的验证和训练集误差值之间的巨大差距是过度拟合造成的[3,4]。

高方差学习曲线(图片作者提供)。

让我们回到偏见。当我们在模型性能的上下文中谈论偏差时,我们可以说该模型具有高偏差。基本上,这意味着模型在训练期间做得不好,在验证期间做得不好。它的表现就像一个学生不能领会我们试图教给他们的思想。模型或我们的数据可能有问题[3,4]。

当我们看一下学习曲线图,我们看到训练集和验证集的误差都很高,这可能意味着您的模型有高偏差。训练集曲线和验证集曲线之间的差距将会很小,因为模型通常表现不佳。它缺乏归纳和发现数据模式的能力。

高偏差学习曲线(图片由作者提供)。

高偏见也是一件坏事。添加更多数据可能不会有太大帮助。但是,您可以尝试向数据集样本添加额外的功能。在搜索模式时,这些附加信息可以为模型提供更多线索。

您可能还需要更换型号。有时候模型太死板,无法从数据中学习。想想非线性分布的数据点,它们看起来像抛物线。如果你试图用一条简单的线来拟合这条抛物线,你的模型会因为高偏差而失败。在这种情况下,需要具有更多参数的更灵活的模型(如二次方程)。

作为单个神经元的偏差

让我们分析第三种情况,特定神经网络中的偏差。在文献中,我们可以找到术语【4】。为什么我们需要这种特殊的神经元?看一下图片:

简单神经网络(图片由作者提供)。

这个简单的神经网络由 3 种类型的神经元组成。输入神经元只是从数据集中传递特征( x₁ )。偏置神经元模仿附加特征,姑且称之为 x₀ 。这个额外的输入是总是 等于 1 。最后,还有一个输出神经元,这是一个成熟的人工神经元,它接受输入,处理输入,并生成整个网络的输出。

现在让我们详细看看我们的输出神经元:

神经元实现线性回归(图片由作者提供)。

它是如何工作的?我们取输入( x₀,x₁ )并乘以相应的权重( w₀,w₁ )。为了简单起见,输出神经元返回这些输入-权重乘积的和:

投入和权重乘积之和(图片由作者提供)。

在我们的例子中 i=1x₀=1 。因此,这样的神经网络实际上是一个线性回归模型:

神经网络线性回归(图片由作者提供)。

现在是关键的部分。为了理解我们为什么需要偏置神经元,让我们看看当完全没有偏置输入时会发生什么。这意味着将只有一个输入 x₁ ,仅此而已:

神经网络无偏倚线性回归(图片由作者提供)。

这样的模型不是很灵活。意味着这条线需要经过点 (0,0) 。线的斜率可能会改变,但是,它与坐标系的原点有关。看一下这个图像:

线可以改变斜率,但穿过原点(图片由作者提供)。

为了获得更大的灵活性,我们需要回到有偏差的原始模型。它将为我们配备重量 w₀ ,不依赖于任何输入。如果需要适应数据,这个权重允许模型上下移动。

有了 bias,线不需要穿过原点(图片由作者提供)。

这就是为什么我们在神经网络中需要偏向神经元的原因。没有这些多余的偏置权重,我们的模型在搜索解空间时的“移动”非常有限。

再举一个例子,看看使用非线性激活函数的神经元,比如 sigmoid:

Sigmoid 函数(图片由作者提供)。

在这种情况下,偏见也给了我们的激活功能“移动”的可能性。由于它,乙状结肠可以向左移动(正偏压)或向右移动(负偏压)。下图显示了这种情况,其中包含不同偏置值的 sigmoid 图:

根据偏差值的 Sigmoid 移位(图片由作者提供)。

(但愿)第三次交好运

最后,在经历了偏倚的数据和高偏倚的模型的概念后,我们得出了词偏倚的积极的背景。我们理解为什么偏置神经元是神经网络的关键元素,但还有最后一件事提出了一个问题。为什么一些有积极作用的东西会用一个负面的词来命名,比如偏见?

这是因为偏差权重与输入数据的任何元素都无关。但是,它是用来做决策的。所以偏向神经元或偏向权重反映了我们对数据集例子的信念或偏见。这就像用我们的经验而不是事实来调整我们对某人或某事的想法。挺偏的吧?

参考书目:

  1. https://www . Reuters . com/article/us-Amazon-com-jobs-automation-insight/Amazon-scraps-secret-ai-recruiting-tool-that-show-bias-against-women-iduscn1 MK 08g
  2. https://spectrum . IEEE . org/tech-talk/artificial-intelligence/machine-learning/in-2016-Microsoft-racistical-chatbot-discovered-the-dangers-of-online-conversation
  3. 乔尔·格鲁什,数据科学从零开始,第二版,ISBN:978–1492041139。
  4. Aurélien Géron,使用 Scikit-Learn、Keras 和 TensorFlow 进行机器学习:构建智能系统的概念、工具和技术,第二版,ISBN:978–1492032649。

数据产品中的密码学

原文:https://towardsdatascience.com/why-we-need-cryptography-80c7f60b6c0c?source=collection_archive---------55-----------------------

除了透明度和隐私之间的权衡之外

来源: Unsplash

技术(仅仅)是一种工具

随着数据产品技术的成熟,它也有潜力改变我们社会结构的底层。

通过改善我们的决策,它可以让我们走向更高的幸福。自动化可以提供更多的材料,减少重复性工作的时间,从而有更多的时间进行创造性表达。以自我实现为目标是我们大多数祖先做梦都想不到的现代奢侈品。我们进步的本质是技术发展。

然而,技术只是一种工具。正如火既可以烤一块牛排,也可以烧毁一所房子,技术也可以用于各种手段。它可以用来控制那些它应该提供价值的人。廉价的传感器和面部识别算法是潜在创造一个监视国家系统的基石。

数据是透明度的燃料

这种由技术引导的治理是通过数据的行为足迹实现的。社会可以看作是一个网络,不同的个体(节点)之间有关系(边)。每个人都可以传输数据点,这些数据点可用于管理他们所属的网络。

网络行为的透明性可以用收集的数据描述网络系统的实际状态的程度来量化。更高的透明度带来了更大的潜力来管理未来的系统状态,以达到期望的结果。

正如我们所看到的,没有隐私的数据透明所带来的自上而下的治理可能是有害的。透明度既可以用于社会发展,也可以用于压制。不管怎样,这都是一场不值得以牺牲我们的社会自由为代价的赌博。

密码学是保护隐私的工具

虽然人们越来越广泛地接受数据产品可以改变我们相互之间的交互方式,但这在密码学中并不明显。

加密技术可能是集体效率和个人自由之间缺失的一环,因此在保留我们隐私的同时实现了透明度的好处

密码原语形成了可在软件系统中用于该目的的构建块。

数字签名通过使签名成为被签名数据的函数,为我们提供了一种可靠的在线身份证明方式。 Merkle roots 可以捕获信息的身份,而不会泄露任何关于底层信息的信息。最后,零知识证明系统给了我们一个工具,让一方(证明者)向另一方(验证者)证明他们知道一些信息,而不共享除证明之外的任何信息本身。

今天,这些在密码经济系统的设计中形成了可信任的核心支柱。这些早期采用者推动了底层技术的成熟。不久,我们可能会看到越来越多的公共机构采用新的可用工具来构建保护隐私的数据产品。匿名、透明和开放的数据,可以聚合并用于治理。这肯定会使透明度和隐私之间的权衡变得更容易处理。

延伸阅读:

为什么我们需要数据库表的索引

原文:https://towardsdatascience.com/why-we-need-indexes-for-database-tables-25198145a8ca?source=collection_archive---------31-----------------------

托德·夸肯布什在 Unsplash 上的照片

引入没有任何公式和计算机科学理论的 B+树索引

如果您不是 DBA 或数据库开发人员,您可能不知道数据库索引的机制。但是只要你会写一些 SQL 查询,你一定听说过数据库索引,知道索引可以提高 SQL 查询的性能。

在本文中,我将尝试使用最简单的语言和图表来说明 B+树索引如何提高 SQL 查询的性能。我使用 B+树索引作为例子的原因是

  • 它被大多数关系数据库管理系统使用,如 MySQL、SQL Server 和 Oracle
  • 它可以提高大多数类型的 SQL 查询的性能,而不是特定类型的查询

它看起来怎么样?

照片由谢恩·豪泽Unsplash 上拍摄

让我们保持这个指令简单,这里有一个简化的图表说明了 B+树索引的结构。

在上面的 B+树示例中,每个矩形代表硬盘中的一个块,而蓝色填充的点代表将这些块链接在一起的指针。

请注意,出于演示目的,该图极大地简化了 B+树,因为它假设每个硬盘块只能包含 2 个键。实际上,这个数字会大得多。

理解 B+树索引是如何构造的很重要。我们需要知道“叶节点”级别应该包含创建该索引的字段的所有值。在上面的例子中,很明显我们在这个表列中只有 9 行,它们的值从 1 到 9。

如果你对上面的 B+树是如何构建的感兴趣,请参考我的另一篇文章:B+树索引是如何在数据库中构建的?

[## B+树索引是如何在数据库中构建的?

使用图表来说明如何在数据库管理系统中建立 B+树索引

towardsdatascience.com](/how-b-tree-indexes-are-built-in-a-database-6f847fb3cfcc)

它是如何工作的?

玛丽亚·克拉斯诺娃在 Unsplash 上拍摄的照片

B+tree 可以帮助大部分的数据库查询场景,这也是它有用的原因。

对平等测试的质疑

假设我们的 SQL 查询是在“equal”where 条件下进行检索,例如:

SELECT *
FROM TABLE
WHERE ID = 3

为了找到等于 3 的 ID,B+树的用法如下。

  • 从树的顶层开始,3 小于 5,所以我们需要使用数字 5 左边的指针
  • 在下一层,3 在 2 和 4 之间,所以我们需要使用中间的指针
  • 我们得到了叶节点上的块,3 在这里

对比较的质疑

如果我们的 SQL 查询在一个范围内搜索会怎样?例如,以下是 SQL 查询:

SELECT *
FROM TABLE
WHERE ID BETWEEN 3 AND 7

下面是该过程的演示。

  • 从树的顶层开始,3 小于 5,所以我们需要使用数字 5 左边的指针
  • 在下一层,3 在 2 和 4 之间,所以我们需要使用中间的指针
  • 我们得到了叶节点上的块,3 在这里
  • 因为我们是在比较中查询,所以光标将继续在这个块中获取,所以我们可以得到数字 4
  • 我们还没有到达 7,所以光标将继续移动到下一个(右)叶节点块
  • 我们到了下一个街区,所以我们得到了数字 5 和 6。但是它还没有完成,将使用与上一步类似的机制到达下一个块
  • 我们到达了下一个包含数字 7 的街区
  • 我们已经达到了范围的上限,因此查询结束

b+树特征

克里斯汀娜·戈塔迪在 Unsplash 上的照片

B+树索引最重要的特点是它由树的叶节点层搜索关键字层组成。

  1. 该索引列的所有值都出现在叶节点中。
  2. 非叶节点仅用于搜索目的,因此只有指向较低级别的指针。换句话说,它们不能导致实际的数据条目。
  3. 叶节点中的每个键都有一个指向数据条目的额外指针,因此它可以引导光标查找/获取数据行。

B+树如何提高性能?

安德斯·吉尔登在 Unsplash 上拍摄的照片

如上例所示,B+树适用于“相等”和比较条件。

叶片与非叶片水平

可以看出,查询只需要遍历非叶节点上的搜索关键字就可以找到期望值。因此,当 SQL 查询在创建 B+树索引的列上进行检索时,只需要遍历几层非叶节点。

您一定认为非叶节点一定是一种开销,当有大量数据行时,它会变慢,因为可能有许多非叶级别。

部分正确。是的,需要扫描非叶节点以获得期望值。实际上,扫描的次数正好等于非叶层的数量。但是,实际上,我们硬盘上的块会比上面的例子大得多。通常,一个有 1000 万个条目的表可以放在一个只有 3 个非叶层的 B+树中。即使表非常大,如十亿级,通常 B+树的非叶层的数量通常是 4 或 5。

因此,使用 B+树索引可以显著减少 SQL 查询中扫描的硬盘块数。

为什么扫描的块数很重要?

我想这篇文章的读者可能没有计算机科学背景,所以我想对“块”的简单解释对于更好地理解这个问题可能是必要的。

在我们的硬盘中,数据并不总是按顺序存储的。单个文件可能被分割并存储到不同的块中。因此,当我们读取文件/数据集/表时,为了扫描整个文件,有必要在不同的块之间跳转。

通常,对于机械硬盘,有一个只能上下移动的磁头。当需要从不同的位置读取数据时,整个硬盘驱动器会将该位置旋转到磁头所在的位置,以便磁头可以读取数据。

假设我们正在扫描 1000 个块。最坏的情况是磁盘需要旋转 1000 次。如果我们使用索引,这个数字将减少到 4-5 倍。这就是指数有助于提高性能的原因。

摘要

照片由 Aaron BurdenUnsplash

在这篇文章中,我分享了 B+tree 的样子以及它是如何工作的,并促进了一个 SQL 查询,通常使用相等和比较条件。

事实证明 B+Tree 不再是最先进的数据库索引,但是我相信,作为在大多数 RDBMS 中仍然普遍使用的最经典的索引,它仍然是展示为什么我们需要数据库表的索引以及它如何工作的最好例子。希望这对你来说足够有趣。

[## 通过我的推荐链接加入 Medium 克里斯托弗·陶

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

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

如果你觉得我的文章有帮助,请考虑加入灵媒会员来支持我和成千上万的其他作家!(点击上面的链接)

为什么我们都需要重新鉴定身份?

原文:https://towardsdatascience.com/why-we-need-person-re-identification-3a45d170098b?source=collection_archive---------20-----------------------

从不同角度和位置深入了解如何识别人

弗兰基·查马基在 Unsplash 上拍摄的照片

在这篇文章中,我将向您简要介绍跟踪和重新识别领域,但不涉及技术细节。在谈论重新识别之前,有必要提一下什么是身份识别(跟踪)及其工作原理。追踪是安全人员的职责,唯一的区别是机器完成了所有的工作。因此,计算机要么从监控摄像头接收一些预先录制的视频,要么接收实时视频,并试图区分人和对他们进行分类。在跟踪的帮助下,我们可以看到场景中每个人的形状,并识别他们的运动。这一切都很好,但在现实世界的场景中,跟踪还有几个问题...

多人跟踪问题

(图片由作者提供,由 Person reID project 制作)

虽然追踪可以让我们接收场景中任何人的所有运动轨迹,并区分不同的人,但当我们有多个摄像头时,问题就开始出现了。例如,如果同一个人穿过购物中心,在摄像机前脱下夹克,他将不会被认出来。不同的姿势、服装、背包和其他细节会搞乱我们的模型,把同一个人当成两个不同的人。

重新鉴定

(图片由作者提供,采用多摄像头物体跟踪方法制作)

R 问题的关键是找到代表一个人的特征。最近的许多模型使用深度学习的模型来提取特征并实现良好的性能。由于卷积神经网络(CNN)强大的特征学习能力和拟合能力,一些先进的方法是基于 CNN 提出的。

reID 的良好实践

朱利叶斯·德罗斯特在 Unsplash 上的照片

根据熊等人[3]的研究,有几种方法可以建立一个精确的 CNN 模型或改进现有的模型。这些方法在不同的重新识别方法上进行了测试,并被认为是普遍成功的。让我们简要地看一下这些实践,因为它们可以帮助我们定义一个好的重新识别模型应该是什么样子。

1.在全局池层之后使用批处理规范化

这是一个相当技术性的概念,所以总的来说,我们试图在训练中防止过度适应。过度拟合是指我们对一个数据集进行了过多的优化,其他的例子会因此变得不准确。

在批量标准化中,我们的目标是使用最小速度均值和方差来标准化每个神经元的输出。因为训练过程中的某些特征是一般化的,这允许我们在不同的数据集上应用相同的模型。

2.使用一个全连接层进行身份分类

在 CNN 中,通常有两个完全连接的层。第一个问题扮演了减少特征尺寸的“瓶颈”的角色。第二层执行身份分类。

作者建议去掉“瓶颈”层,因为它会降低性能,并直接使用第二层。此外,它还有助于防止过度拟合。

3.使用亚当进行 CCN 优化

Adam 是最近提出的随机目标函数的优化方法。与最常用的 SGD 相比,Adam 处理低阶矩,这使我们能够平滑梯度之间的变化。正如您可能已经想到的,这也有助于防止过度拟合,并减轻对预训练模型的干扰。

重新鉴定申请

(Accuware Inc .的视频)

它最典型的应用场景是某种视频监控。当多个摄像机位于购物中心、停车场、大学或任何其他位置,并且我们希望确保安全时。通过使用重新识别和跟踪模型,我们能够跟踪一个人正在走的路,并确保没有任何非法或不适当的事情发生。这种系统唯一担心的是隐私,但公共场所的监控已经在发挥作用,因此增加人员跟踪不会改变这种情况。

此外,可以跟踪车辆和其他物体。通过这种方式,可以分析路况并进一步改进。

结论

如果计算机的力量被明智而及时地使用,犯罪和其他非法行为可以被阻止,罪犯也很容易被追踪。尽管这种模型的开发仍在进行中,但它们的改进令人难以置信地令人印象深刻,并且应用广泛。

更多资源

以下是该领域中一些受欢迎的项目,供了解 Python 的每个人参考:

[## mhttx 2016/多摄像机-物体跟踪-通过将表示转换到俯视图

基于深度度量学习将表示转移到“俯视图”。通过将主成分分析应用于“俯视图”的可视化…

github.com](https://github.com/Mhttx2016/Multi-Camera-Object-Tracking-via-Transferring-Representation-to-Top-View) [## 开阳州/深-人-里德

Torchreid 是一个深度学习的人再识别的库,用 PyTorch 写的。它的特点:多 GPU 训练…

github.com](https://github.com/KaiyangZhou/deep-person-reid) [## layumi/Person _ reID _ baseline _ pytorch

一个小巧、友好、强大的 Person-reID 基线代码(基于 pytorch)。现在我们已经支持:Float16 保存 GPU…

github.com](https://github.com/layumi/Person_reID_baseline_pytorch)

参考文献:

[1]Person _ reID _ baseline _ py torch(2020)。从 https://github.com/layumi/Person_reID_baseline_pytorch取回

[2]通过深度度量学习的多相机对象跟踪(2018)。检索自https://github . com/mhttx 2016/Multi-Camera-Object-Tracking-via-transfer-presentation-to-Top-View

[3]熊福林,肖,杨,曹,郑,龚,方,周,周建堂(2018).建立有效的 CNN 基线模型进行身份识别的良好实践。 arXiv 预印本 arXiv:1807.11042

[4]Accuware 的 CCTV 行人识别和跟踪技术(2017)。从 https://www.youtube.com/watch?v=nuhBnlHKAK0取回

为什么我们需要微型人工智能?

原文:https://towardsdatascience.com/why-we-need-tiny-ai-bb04af9e48ae?source=collection_archive---------27-----------------------

图片由 Adobe Stock 授权的 Worawut 制作

我们都知道算法每天都在变得越来越智能,但它们也变得越来越环保了吗?

一点也不,这正在成为一个严重的问题。因此,研究人员正在努力寻找开发更小算法的新方法。

在这篇文章中,我们将讨论为什么微型人工智能是确保人工智能未来的重要一步。

人工智能在过去的几年里展示了许多突破。深度学习是那些为许多提供高精度的人工智能系统提供动力的突破之一。得益于深度学习,算法可以扫描医学图像并识别肿瘤,甚至在复杂的交通模式中导航自动驾驶汽车,并将文献从几乎任何语言翻译成另一种语言。

人工智能每天都变得越来越精确,但高精度背后隐藏着环境成本。

麻省大学阿姆赫斯特分校的研究人员最近进行了一项研究,揭示了算法的训练是多么耗费精力。根据这项研究,训练一个算法可能会消耗一辆普通汽车一生二氧化碳排放量的 5 倍,或者相当于纽约和旧金山之间大约 300 次往返飞行。

为了追求高精度,我们似乎已经失去了对能效的关注。

艾伦研究所的研究科学家罗伊·施瓦茨和他的合著者在一篇名为《绿色人工智能》的论文中建议人工智能研究人员应该努力将能效作为准确性和其他衡量标准的评估标准。

最近的一篇文章引用了 Schwartz 的话说“我们不想达到人工智能成为全球变暖的重要因素的状态。”

这就是微型人工智能可以帮忙的地方。

什么是 Tiny AI?

微型人工智能是用来描述人工智能研究社区努力减少算法大小的术语,特别是那些需要大量数据集和计算能力的算法。Tiny AI 研究人员开发了一种称为蒸馏方法的方法,这种方法不仅可以减少模型的大小,还可以加速推理并保持高水平的准确性。使用这些蒸馏方法,模型可以显著缩小,缩小倍数可达 10 倍。此外,一个小得多的算法可以部署在边缘上,而无需将数据发送到云,而是在设备上做出决定。

以伯特为例。BERT 是由谷歌的 Jacob Devlin 和他的团队开发的预训练语言模型(PLM)。这个算法非常有用,因为它有助于你写作。它可以做到这一点,因为与以前的模型不同,BERT 理解单词和上下文。因此,BERT 可以提出写作建议或完成您的句子。

但是伯特是个大模特。麻省理工科技评论报道更大版本的 BERT 有 3.4 亿个数据参数。此外,训练它一次所需要的电量相当于一个美国家庭 50 天的用电量。

伯特成了微型人工智能研究人员的完美目标。在最近的一篇文章中,华为的研究人员声称他们能够将 BERT 的大小减少 7.5 倍,同时将速度提高 9.4 倍

他们称他们的新模型为 TinyBERT。但是,TinyBERT 和 BERT 相比有多好呢?作者声称 TinyBERT 的表现达到了它的老师 BERT 的 96%。

随着这些进步的发展,我们将看到微型人工智能的许多好处。一方面,现有的服务,如语音助手和摄像头,将不需要在云和本地设备之间传输数据。

另一方面,微小的 AI 将使我们有可能在边缘设备上部署复杂的算法。例如,使用智能手机的医学图像分析。或者没有云的自动驾驶。最重要的是,将数据存储在 edge 上也提高了数据的隐私性和安全性。

考虑到人工智能的爆炸式增长,让研究人员和工程师研究和测量训练和部署他们的算法对环境的影响是很重要的。

让我们不要只是努力建立更精确的模型。让我们也考虑一下它们对环境的影响。否则,我们可能会发现自己又多了一项破坏我们星球的技术。

原载于 2020 年 2 月 28 日https://www . rapid digital . ventures

为什么我们需要使用 Pandas 新的字符串数据类型而不是文本数据的对象

原文:https://towardsdatascience.com/why-we-need-to-use-pandas-new-string-dtype-instead-of-object-for-textual-data-6fd419842e24?source=collection_archive---------27-----------------------

伊洛娜·弗罗利希在 Unsplash 上的照片

我们必须用数值来表示每一位数据,以便由机器学习和深度学习模型进行处理和分析。然而,字符串通常不会有一个好的和干净的格式,需要大量的预处理。

Pandas 提供了许多函数和方法来处理文本数据。在这篇文章中,我们将关注字符串的数据类型,而不是字符串操作。使用合适的数据类型是充分利用 Pandas 的第一步。文本数据目前有两种数据类型,对象字符串类型。

在 pandas 1.0 之前,只有“object”数据类型用于存储字符串,这导致了一些缺点,因为非字符串数据也可以使用“object”数据类型存储。Pandas 1.0 引入了一种新的特定于字符串数据的数据类型,即string type。到目前为止,我们仍然可以使用 object 或 string type 来存储字符串,但是在将来,我们可能会被要求只使用 string type。

这里需要注意的一点是,对象数据类型仍然是字符串的默认数据类型。要使用 StringDtype,我们需要显式声明它。

我们可以传递“字符串pd。用于选择字符串数据类型的 Dtype 参数的 string type()参数。

我们还可以使用 astype 函数将“对象”数据类型转换为“字符串”数据类型:

尽管默认类型是“object ”,但出于一些原因,建议使用“string”。

  • 对象数据类型的范围更广,允许存储几乎任何东西。因此,即使我们在应该是字符串的地方有非字符串,我们也不会得到任何错误。

  • 拥有专用的数据类型总是更好。例如,如果我们用“字符串”数据类型尝试上面的例子,我们会得到一个 TypeError。

  • 拥有专用的数据类型允许特定于数据类型的操作。例如,如果使用了“对象”数据类型,我们不能使用 select_dtypes 只选择文本列。Select_dtypes(include="object ")将返回任何具有对象数据类型的列。另一方面,如果我们对文本数据使用“string”数据类型,select_dtypes(include="string ")将给出我们所需要的。

就目前的性能而言,“字符串”数据类型并不优于“对象”。但是,预计随着未来的增强,“字符串”数据类型的性能将会提高,内存消耗将会减少。因此,对于文本数据,我们应该已经在使用“字符串”而不是“对象”了。

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

为什么正规化有效

原文:https://towardsdatascience.com/why-we-should-always-consider-regularization-3767062709e8?source=collection_archive---------66-----------------------

正规化背后的直觉

弗兰基·查马基Unsplash 上拍摄的照片

当我们训练机器学习模型或神经网络时,我们会看到有时我们的模型在训练数据上表现得非常好,但在测试或验证数据时却无法给出预期的输出。模型性能如此不同的许多原因之一是在模型训练期间学习的大权重,从而导致过度拟合。较大的权重会导致我们的模型不稳定,测试数据的微小变化会导致较高的误差。除此之外,大重量还会在训练的梯度下降步骤中造成问题。为了惩罚这些大的权重,我们将它们调整为较小的值。

但是为什么将权重调整到一个较低的值会有效呢??

让我们来探讨为什么权重的较低值实际上是必要的背后的直观逻辑。

首先是一些数学

梯度下降算法根据模型产生的误差更新权重。

梯度下降函数-作者图片

上述等式中的导数部分表示误差函数的斜率或误差函数相对于权重的变化。

这个导数部分经常用链式法则来计算。假设我们使用平方误差函数来计算误差,并对我们的线性输出应用 sigmoid 激活函数来获得最终输出。

以 H 为输入的线性函数-作者图片

Sigmoid 激活函数-作者图片

平方误差函数-作者图片

根据链式法则,我们需要计算:

  1. 误差函数相对于激活函数输出的斜率。
  2. 激活函数相对于线性输出的斜率。
  3. 最后,线性函数的斜率与权重相关。

链式法则-作者图片

模型的权重值在梯度下降的权重更新步骤中起着非常关键的作用。

我们通过一个简单的例子来理解这一点。

主要的戏剧

sigmoid 函数是用于确定模型输出的非常常见的激活函数。

上面给出的代码针对给定的 x 值绘制了一个简单的 sigmoid 函数,用于形式为 y=mx+c 的线性输出。m' 照常代表我们所说的线的斜率或我们模型的权重。

现在,我们将了解不同的斜率值如何影响我们的 sigmoid 函数。

plot_sigmoid(0.001)

产出 1:

输出 1 -作者的图像

plot_sigmoid(0.0005)

产出 2:

输出 2 -作者的图像

plot_sigmoid(0.0002)

产出 3:

输出 3 -按作者分类的图像

plot_sigmoid(0.0001)

产出 4:

输出 4 -按作者分类的图像

从以上 4 幅图中,我们可以观察到,随着线性函数中斜率或权重的降低,sigmoid 函数的陡度也随之降低。

对于输出 1,我们可以看到 sigmoid 函数的值从 0 快速变为 1。因此,该函数任意点的斜率大多保持接近 0 或 1。

这导致梯度下降步骤中的不便,因为它将导致权重几乎没有变化,从而减慢我们的模型的学习,并最终无法达到我们的误差函数的最小尖端,或者有时太大的变化可能导致错过误差函数的最小值。

现在,在其他 3 个输出中,我们随后降低了斜率值,并观察到输出函数的陡度也降低了。sigmoid 函数值开始从 0 到 1 逐渐变化,并忽略斜率的快速变化,这种变化有利于梯度下降步骤。现在,权重以更加一致的方式更新,从而实现误差函数的最小值。

很明显,当使用期望的正则化技术来训练模型时,为什么大的权重需要被惩罚并被带回到较低的值。

为什么我们应该更频繁地使用 Python Decorator

原文:https://towardsdatascience.com/why-we-should-use-python-decorator-more-often-e59b56b2b8df?source=collection_archive---------16-----------------------

Python 装饰者

Python Decorator 是一个强大的工具,它可以帮助我们操作一个函数的功能,一个只需添加@decorator_name 的测试方法

马库斯·斯皮斯克在 Unsplash 上的照片

在 Python 中,一切都是对象,这意味着每个实体都有一些元数据(称为属性)和相关的功能(称为方法)。这些属性和方法是通过点语法访问的。我们定义的名字只是绑定到这些对象的标识符。函数也不例外,它们也是对象(带有属性)。同一个函数对象可以绑定各种不同的名称。

例如:

这里我们将函数赋给一个变量。我们会注意到,变量赋值后,就变成了函数。下面是 test_decorator 的输出:

test_decorators.py::test_decorator PASSED                                [100%]8
3

Python 中的函数也可以将其他函数作为输入,然后返回其他函数。这种技术被称为高阶函数。

这里我们传递函数(double 或 triple)作为函数 operate 的输入。当运行 test_decorator 时,我们将在控制台中看到:

test_decorators.py::test_decorator PASSED                                [100%]6
9

函数和方法被称为可调用的,因为它们可以被调用。

事实上,任何实现特殊的__call__()方法的对象都被称为 callable。所以,在最基本的意义上,装饰器是一个返回可调用对象的可调用对象。

基本上,装饰者接受一个函数,添加一些功能并返回它。

运行 test_decorator 会显示

test_decorators.py::test_decorator PASSED                                [100%]I got decorated
I am ordinary
None

通常,我们会看到使用@decorator_name 以语法糖的方式编写 decorator

运行 test_decorator 会显示相同的

test_decorators.py::test_decorator PASSED                                [100%]I got decorated
I am ordinary
None

可以一起玩的简单装饰

这是一个简单的装饰器,为使用该装饰器的方法打印开始时间和结束时间。

在控制台中,您将看到

test_decorators.py::test_decorator_simple PASSED                         [100%]Start time is : 2020-07-21 14:41:44.064251
Time in test : 2020-07-21 14:41:44.064337
End time is : 2020-07-21 14:41:44.064366

有争论的装饰者

运行测试代码将向控制台显示这一点

test_decorators.py::test_decorator_with_arguments PASSED                 [100%]Inside wrapped_f()
Decorator arguments: Donald Le 1990
Testing decorator with arguments
After f(*args)

用 Python 链接装饰器

在 Python 中,多个装饰者可以链接在一起。

也就是说,一个函数可以用不同的(或相同的)装饰者进行多次装饰。我们简单地将装饰器放在期望的功能之上。

运行这个将显示

test_decorators.py::test_decorator PASSED                                [100%]..............................
Start time is 2020-07-22 10:35:17.462552
Test Decorator
End time is 2020-07-22 10:35:17.462579
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Decorators 与 pytest 等其他框架集成

然后我们可以在测试方法中使用它

很好奇装饰器的值是如何使用的,它实际上是在收集 testrail id 的 pytest 挂钩中使用的。

这是我们如何从 pytest 获得装饰值的:

testrail_ids = item.get_closest_marker('testrail').kwargs.get('ids')

就是这样。

感谢您阅读我的帖子。

参考

https://www.geeksforgeeks.org/decorators-in-python/

[## 装饰者——Python 3 模式、配方和习惯用法

请注意,本章是一项正在进行的工作;在我完成之前,你最好不要开始改变…

python-3-模式-习语-test.readthedocs.io](https://python-3-patterns-idioms-test.readthedocs.io/en/latest/PythonDecorators.html) [## Python 装饰者

Python 有一个有趣的特性,叫做 decorators,用于向现有代码添加功能。这也叫…

www.programiz.com](https://www.programiz.com/python-programming/decorator)

:如果你喜欢这个故事,想看类似这样的故事,而你还没有订阅媒体,请通过这个链接【https://ledinhcuong99.medium.com/membership】的订阅媒体。这可以支持我这样写内容。谢谢大家!

为什么我们在推荐系统中使用稀疏矩阵

原文:https://towardsdatascience.com/why-we-use-sparse-matrices-for-recommender-systems-2ccc9ab698a4?source=collection_archive---------23-----------------------

SciPy 的稀疏模块介绍

诺德伍德主题公司在 Unsplash 上拍摄的照片

在推荐系统中,我们通常使用非常稀疏的矩阵,因为项目领域非常大,而单个用户通常与项目领域的非常小的子集进行交互。以 YouTube 为例,用户通常会观看数百甚至数千个视频,相比之下,YouTube 的语料库中有数百万个视频,导致稀疏度超过 99%。

这意味着当我们在一个矩阵中表示用户(作为行)和项目(作为列)时,结果是一个由许多零值组成的极其稀疏的矩阵(见下文)。

稀疏用户-项目矩阵(来源按作者)

在现实生活中,我们如何最好地表示这样一个稀疏的用户-项目交互矩阵?

为什么我们不能只使用 Numpy 数组Pandas DataFrames

为了理解这一点,我们必须了解计算的两个主要约束条件— 时间内存。前者就是我们所知的“一个程序运行需要多少时间”,而后者是“程序使用了多少 ram ”。前者非常简单,但对于后者,确保我们的程序不消耗所有内存是非常重要的,尤其是当我们处理大型数据集时,否则我们会遇到著名的“内存不足”错误。

来源:stack exchange byalessandro 308

是的,我们电脑上的每个程序和应用程序都使用一些内存(见下图)。当我们运行矩阵计算,并希望将这些稀疏矩阵存储为 Numpy 数组Pandas DataFrame 时,它们也会消耗内存。

Mac 的活动监视器(来源作者)

为了形式化这两个约束,它们被称为时间空间复杂度(内存)。

空间复杂性

当处理稀疏矩阵时,将它们存储为完整的矩阵(从这一点上称为 密集 矩阵)是非常低效的。这是因为一个完整的数组为每个条目的占用一块内存,所以一个n x m数组需要n x m块内存。从简单的逻辑角度来看,存储这么多零根本没有意义!

从数学的角度来看,如果我们有一个100,000 x 100,000矩阵,这将需要我们有100,000 x 100,000 x 8 = 80 GB的内存来存储这个矩阵(因为每个 double 使用 8 个字节)!

时间复杂度

除了空间复杂性之外,密集矩阵也恶化了我们的运行时。我们将用下面的例子来说明。

那么我们如何表示这些矩阵呢?

介绍… SciPy 的稀疏模块

在 Python 中,稀疏数据结构是在 scipy.sparse 模块中有效实现的,它主要基于 Numpy 数组。实现背后的思想很简单:不是将所有值存储在一个密集的矩阵中,而是以某种格式存储非零值(例如,使用它们的行和列索引)。

在我们深入 CSR 之前,让我们比较一下使用 numpy 数组稀疏矩阵在时间和空间复杂度上的效率差异。

import numpy as np
from scipy import sparse
from sys import getsizeof# **Matrix 1**: *Create a dense matrix (stored as a full matrix).*
A_full = np.random.rand(600, 600)# **Matrix 2**: *Store A_full as a sparse matrix (though it is dense).*
A_sparse = sparse.csc_matrix(A_full)# **Matrix 3**: *Create a sparse matrix (stored as a full matrix).*
B_full = np.diag(np.random.rand(600))# **Matrix 4**: *Store B_full as a sparse matrix.*
B_sparse = sparse.csc_matrix(B_full)# Create a square function to return the square of the matrix
def square(A):
    return np.power(A, 2)

然后我们计算这些以不同形式存储的不同矩阵的时间,以及它们使用了多少内存。

%timeit square(A_full)
print(getsizeof(A_full))>>> 6.91 ms ± 84.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
>>> 2880112%timeit square(A_sparse)
print(getsizeof(A_sparse))>>> 409 ms ± 11.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>> 56%timeit square(B_full)
print(getsizeof(B_full))>>> 2.18 ms ± 56.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
>>> 2880112%timeit square(B_sparse)
print(getsizeof(B_sparse))>>> 187 µs ± 5.24 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> 56

显然,当我们使用稀疏模块存储稀疏矩阵时,可以获得时间和空间方面的最佳性能。

压缩稀疏行(CSR)

尽管在 SciPy 中有许多类型的稀疏矩阵,如键的字典(DOK)和列表的列表(LIL),我将只涉及 压缩稀疏行 (CSR),因为它是最常用和广为人知的格式。

CSR (还有 CSC,又名压缩稀疏列)用于一次写入多次读取任务[1]。为了有效地表示稀疏矩阵,CSR 使用三个 numpy 数组来存储一些相关信息,包括:

  1. data:非零值的值——这些非零值存储在稀疏矩阵中
  2. indices:列索引的数组—从第一行开始(从左到右),我们标识非零位置并返回它们在该行中的索引。在下图中,第一个非零值出现在第 0 行第 5 列,因此 5 作为第一个值出现在indices数组中,后面是 1(第 1 行,第 1 列)。
  3. indptr:代表索引指针,返回一个行开始的数组。这个定义让我困惑,我选择这样解释:它告诉我们每行包含多少个值。在下面的例子中,我们看到第一行包含一个值a,因此我们用0:1对其进行索引。第二行包含两个值b, c,我们从1:3开始索引,依此类推。len(indptr) = len(data) + 1 = len(indices) + 1因为对于每一行,我们用开始和结束索引来表示它(类似于我们如何索引一个列表)。

来源:StackOverflow 作者 Tanguy

构建 csr_matrix 有哪些方法?

创建一个全矩阵并将其转换为稀疏矩阵

some_dense_matrix = np.random.random(600, 600)
some_sparse_matrix = sparse.csr_matrix(some_dense_matrix)

如前所述,这种方法效率不高,因为我们必须先获得这个密集矩阵,这非常耗费内存,然后才能将其转换为稀疏矩阵。

创建一个空的稀疏矩阵

# format: csr_matrix((row_len, col_len))
empty_sparse_matrix = sparse.csr_matrix((600, 600))

注意,我们不应该创建一个空的稀疏矩阵并随后填充它们,因为csr_matrix被设计为一次写入多次读取。写入csr_matrix将是低效的,应该考虑其他类型的稀疏矩阵,如列表的列表列表在操纵稀疏结构方面更有效。

用数据创建一个稀疏矩阵

# **method 1**
# format: csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)])
# where a[row_ind[k], col_ind[k]] = data[k]data = [3, 9, 5]
rows = [0, 1, 1]
cols = [2, 1, 2]sparse_matrix = sparse.csr_matrix((data, (rows, cols)), 
                                  shape=(len(rows), len(cols))
sparse_matrix.toarray()>>> array([[0, 0, 3],
           [0, 9, 5],
           [0, 0, 0]], dtype=int64)# **method 2**
# format: csr_matrix((data, indices, indptr), [shape=(M, N)])
# column indices for row i: indices[indptr[i]:indptr[i+1]]
# data values: data[indptr[i]:indptr[i+1]]data = [3, 9, 5]
indices = [2, 1, 2]
indptr = [0, 1, 3, 3]sparse_matrix = sparse.csr_matrix((data, indices, indptr))
sparse_matrix.toarray()>>> array([[0, 0, 3],
           [0, 9, 5],
           [0, 0, 0]], dtype=int64)

希望这有助于你开始使用稀疏矩阵!

支持我! —如果你喜欢我的内容并且没有订阅 Medium,请考虑支持我并通过我在这里的推荐链接订阅 ( 注意:你的一部分会员费将作为推荐费分摊给我)。

参考

[1]Python 中的稀疏数据结构

[2] 复杂性和稀疏矩阵

为什么我们使用无监督学习(从头开始使用 K 均值聚类)

原文:https://towardsdatascience.com/why-we-use-unsupervised-learning-with-k-means-clustering-from-scratch-1401efdd6fde?source=collection_archive---------34-----------------------

为什么无监督学习是一个伟大的工具,却不能产生定量的结果。

在数据科学世界中,监督学习是一个有趣的话题,不从事数据科学的人通常不会强调这一点,此外,这也是许多数据科学家自己经常忽视的一个想法。对此有一个解释,因为对于许多就业机会来说,无监督学习根本不重要。当然,有时它会发挥作用,但在大多数情况下,企业不会投资做他们永远不知道结果的研究。在不知道结果的情况下做研究正是无监督形容词在这种情况下的应用,所以如果我们不知道我们的模型输出了什么,那么我们怎么能在它的预测和发现中找到价值呢?

分析

无监督学习算法的主要功能是分析。使用无监督学习算法来探索您的数据可以告诉您许多关于所述数据的某些属性的信息。例如,聚类分析可以显示某些连续值是如何分组的,不管它们是相关还是不相关。您可以使用无监督学习来发现数据中的自然模式,这些模式仅通过统计分析或比较值并不明显。

无监督学习算法在图像识别和基因组学中也有自己的优势。在基因组学中,它们可以用来对遗传学进行聚类或分析基因组数据序列。无监督学习用于建模概率密度,这对生物信息学学科非常有用。

无人监管的另一个好处是,不需要任何人工干预就可以非常容易地收集分析数据。典型的机器学习,无论是强化的还是监督的,都需要手动绘制标签,以便正确理解模型的结果。有监督学习和无监督学习的区别如下:

无监督学习

  • 不太准确
  • 不需要标记数据
  • 最少的人力

监督学习

  • 高度准确
  • 有一致的目标
  • 需要带标签的数据
  • 需要人的努力

示例:Kmeans 聚类

聚类是最常用的无监督学习方法。这是因为这通常是可视化探索和发现更多数据的最佳方式之一。有几种不同类型的集群,包括:

  • 层次集群:通过创建一个集群树来构建集群的多层次结构。
  • k 均值聚类:根据到聚类质心的距离将数据划分为 k 个不同的聚类。
  • 高斯混合模型:将聚类建模为多元正态密度成分的混合物。
  • 自组织地图:使用学习数据拓扑和分布的神经网络。
  • 隐马尔可夫模型:利用观测数据恢复状态序列。

在今天的例子中,我们将学习 klearn 中提供的 Kmeans 集群。在 K-均值聚类中,对于每个点 x:

  • 找到最近的质心 c
  • 将点 x 分配给群集 j

然后对于每个聚类 j (=1..k):

  • 新的质心 c 等于在前一步骤中分配给聚类 j 的所有点 x 的平均值。

虽然这个模型在 sklearn.cluster 的 KMeans 类下可用,但今天我将编写自己的函数来计算 K 均值聚类。我们将从创建一个能够测量欧几里德长度的函数开始。这就像使用 Numpy 的 linalg 一样简单。

import numpy as np
def euclidian(a, b):
    return np.linalg.norm(a-b)

我还导入了 Matplotlib.pyplot 和 Matplotlib.animation,以便将来对我们的集群进行可视化:

import matplotlib.pyplot as plt
# animation
import matplotlib.animation as animation

因为我将使用文本数据,所以我使用 numpy 的这个函数来加载它:

def load_dataset(name):
    return np.loadtxt(name)

现在是时候做我们实际的 K 均值函数了。首先,我们将添加参数 k、ε和距离(在我们的例子中是欧几里得的。)之后,我们将为质心创建一个空列表,并设置距离算法以使用之前的欧几里德函数。

def kmeans(k, epsilon=0, distance='euclidian'):
    history_centroids = []
    #set the distance calculation type 
    if distance == 'euclidian':
        dist_method = euclidian

接下来,我们将加载数据集并检查数据集的形状,以获得实例(观察)的数量和特征的数量

dataset = load_dataset('durudataset.txt')
num_instances, num_features = dataset.shape

现在,我们将使用 Numpy.random 中的随机数来定义 k 原型:

prototypes = dataset[np.random.randint(0, num_instances - 1, size=k)]

之后,我们会将它们添加到质心历史列表中:

history_centroids.append(prototypes)

现在,我创建了这些列表来存储我们的质心聚类,并在每次迭代中跟踪它们:

prototypes_old = np.zeros(prototypes.shape)
belongs_to = np.zeros((num_instances, 1))
norm = dist_method(prototypes, prototypes_old)
iteration = 0

然后,我们将按照我之前陈述的公式执行 for 循环:

while norm > epsilon:
        iteration += 1
        norm = dist_method(prototypes, prototypes_old)
        for index_instance, instance in enumerate(dataset):
            dist_vec = np.zeros((k,1))
            for index_prototype, prototype in enumerate(prototypes):
                #compute the distance between x and centroid
                dist_vec[index_prototype] = dist_method(prototype, instance)
            belongs_to[index_instance, 0] = np.argmin(dist_vec)

        tmp_prototypes = np.zeros((k, num_features))

当范数大于ε时,对于数据集中的每个实例,我们将定义一个 k 大小的距离向量。然后对于每个质心,我们将计算 x 和质心之间的差。接下来,我们将遍历我们的原型列表,并获取分配给该原型的所有点。然后,我们将找到这些点的平均值,这将为我们提供新的质心。最后但同样重要的是,我们将把相应的值添加到列表的索引中。

for index in range(len(prototypes)):
            instances_close = [i for i in range(len(belongs_to)) if belongs_to[i] == index]
            prototype = np.mean(dataset[instances_close], axis=0)
            #add our new centroid to our new temporary list
            tmp_prototypes[index, :] = prototype

最后,我们可以将我们的临时原型设置为等于我们的最终质心列表。为了创建一个 Matplotlib 动画,我还会在这里添加质心列表的历史。

prototypes = tmp_prototypes
history_centroids.append(tmp_prototypes)
return prototypes, history_centroids, belongs_to

对于最终的函数,如下所示:

def kmeans(k, epsilon=0, distance='euclidian'):
    history_centroids = []
    if distance == 'euclidian':
        dist_method = euclidian
    #set the dataset
    dataset = load_dataset('durudataset.txt')
    num_instances, num_features = dataset.shape 
    prototypes = dataset[np.random.randint(0, num_instances - 1, size=k)]
    history_centroids.append(prototypes)
    prototypes_old = np.zeros(prototypes.shape)
    belongs_to = np.zeros((num_instances, 1))
    norm = dist_method(prototypes, prototypes_old)
    iteration = 0
    while norm > epsilon:
        iteration += 1
        norm = dist_method(prototypes, prototypes_old)
        for index_instance, instance in enumerate(dataset):
            dist_vec = np.zeros((k,1))
            for index_prototype, prototype in enumerate(prototypes):
                dist_vec[index_prototype] = dist_method(prototype, instance)
            belongs_to[index_instance, 0] = np.argmin(dist_vec)

        tmp_prototypes = np.zeros((k, num_features))
        for index in range(len(prototypes)):
            instances_close = [i for i in range(len(belongs_to)) if belongs_to[i] == index]
            prototype = np.mean(dataset[instances_close], axis=0)
            #add our new centroid to our new temporary list
            tmp_prototypes[index, :] = prototype
        prototypes = tmp_prototypes
        history_centroids.append(tmp_prototypes)
    return prototypes, history_centroids, belongs_to

现在,如果我们决定绘制它,我的结果看起来有点像这样:

很酷,对吧?

结论

虽然非监督学习可能不会像大多数监督学习模型那样受到喜爱或使用,但仅仅因为结果没有被标记并不意味着不能从数据中学习到很多信息。无监督学习是探索和真正理解数据如何分组以及不同特征如何相互作用的一个很好的工具。虽然在很多情况下,数据科学家可能会偏离使用无监督学习有点远,但很容易明白为什么它有时会非常有益!

为什么世界范围的合作比自私行为的效率高 5 倍

原文:https://towardsdatascience.com/why-worldwide-collaboration-can-be-up-to-5-times-more-efficient-than-selfish-behavior-b0a8e05ce50d?source=collection_archive---------38-----------------------

用博弈论理解疫情和气候变化时代自私的代价

凯尔·格伦在 Unsplash 上的照片

你有没有想过,为什么我们需要所有这些试图让世界上所有 195 个国家为一个共同目标而合作的国际组织?你可能从其他人(甚至某些国家的总统)那里听说过,这只是浪费时间和金钱,对吗?!如果我们让每个人自己收拾残局,不是更容易吗?!令人惊讶的是,选择这种方法的后果在全球范围内可能是灾难性的,博弈论为我们提供了为什么会出现这种情况的清晰解释。

社会适性和自私行为

为了理解自私行为的后果,我将使用正在进行的新冠肺炎疫情的例子,其中不同的行动者(也称为代理人)由独立的国家代表,他们在面对疫情时所付出的成本由遏制它所需的费用(人道主义或经济)量化。为了分析在这种不景气的环境下协作的效果,让我们考虑以下场景:

  1. 我们假设有一个国家(例如,病毒的发源地)贡献最大。让我们用 1 来表示它的总损耗(它可以是 100 或 100K,为简单起见使用 1)。
  2. 与前一个国家相比,病毒随后传播到的每个国家都可以更有效地应对它。比方说,第二个国家只需支付第一个国家支付的一半(1/2)就可以遏制疫情,而第三个国家只需支付三分之一(1/3),以此类推。最终国家数 k 将只支付受影响最严重国家的 1/k 分数。
  3. 我们假设社会最优结果是通过要求每个现有国家平等地参与所需费用来遏制第一个国家的疫情。假设这个最优结果的总成本为(1+a ),其中> 0 是一个很小的开销,说明了为第一个受灾国家动员所需资源的成本。

请注意,虽然前两个假设没有反映现实中发生的一切,但通过根据疫情造成的损失按降序对国家进行排序,当前情况仍可简化为该模型。

显而易见,在我们的模型中,所有国家决定不合作的总成本等于调和数

其行为如下图所示:

自私成本和社会最优(表示为合作基线)之间的差异非常大,对吗?!你可能会奇怪,当手头有一个更有效的选择时,为什么有人会选择这样一个额外的损失。这就是博弈论与纳什均衡的概念相结合的地方,为了解释它,让我们考虑博弈中代理人的不同选择。

单边偏差

让我们从上面例子中的最后一个国家开始。在我们的模型中,这个国家可以选择支付 1/k 来独自遏制疫情,或者与其他潜在合作者一起支付(1+a)/k 来实现 1+a 的总体社会最优成本

自私的时候,这个国家会选择为了自己的利益付出 1/k 的选择。一旦发生这种情况,国家(k-1)面临的选择是与其他国家支付(1+a)/(k-1)或选择 1/(k-1)独自处理这种情况。

它再次选择自私的行为,原因和之前的国家一样。最终,自私的方法导致了纳什均衡的概念:每个国家都采用最小化其成本的策略,没有一个国家可以通过单方面改变他们的策略而做得更好。纳什均衡的总成本就是上面定义的谐波数。

价格稳定

纳什均衡的成本与社会最优之间的比率通常被称为稳定的价格 ( PoS )。

稳定的价格量化了自私行为的最佳结果(最佳纳什均衡)和涉及一组战略代理的给定博弈的社会最优之间的潜在效率损失。

在我们的例子中(FOCS 04 年 4 月的 Anshelevich 等人研究的所谓的公平费用分摊博弈的例子) PoS 以上面定义的调和数为界,其中 k 等于世界上现有的 195 个独立状态。如果我们非常粗略的疫情模型接近事实,那么缺乏全球合作的代价将是惊人的

再说一次,如果我们的模型,尽管它的设置过于简单,在某个地方接近正确,那么缺乏合作的成本会比社会最优成本多 5 倍。还要注意的是,这超出了我在 COVID 疫情的例子,并扩展到任何独立国家可以选择自己解决问题或选择全球合作的情况。例如,它强调了 195 个国家签署的巴黎协定对共同应对气候变化的重要性,并意味着我们很可能会避免效率急剧下降的情况,这可能对我们的未来产生毁灭性影响。

我们生活中的公平成本分担游戏

虽然我的文章可能看起来像一个抽象的博弈论结果的简单说明,当应用于具有高度社会重要性的情况时,它的信息更普遍,并且注定适用于我们每个人和我们的日常选择。

事实上,尽管有一些表面上的差异,地球上的所有人都在玩一个类似于上面描述的游戏,尽管有时甚至不知道。我应该乘公共汽车并与其他乘客分担旅行费用,还是应该坚持使用我的汽车?我应该选择共享经济平台,还是应该拥有我需要的所有商品?所有这些都是我们日常生活中的公平成本分摊游戏,所有这些都受制于低效率,当更多的人关注它时,这种低效率变得更加明显。

为了进一步推动这一想法,毫不夸张地说,我们经常试图为了眼前的利益而避免个人牺牲(1/k 或(1+a)/k 的情况),并认为一个人的行动不会改变太多。但是正如我的例子所显示的,一个人的行为足以对其他人的行为产生前所未有的改变。事实上,如果第一个国家选择牺牲其微不足道的收益,它就可以激励其他国家,让合作的选择对他们更有吸引力。

我同意全球合作可能一点也不容易。但是第一步是意识到它的好处。下一步就是当你在生活中面临任何这样的选择时,好好想想。谁知道下一步可能会是享受一个更好的生活环境。

为什么要用 WebAssembly 把 scikit-learn 放到浏览器里?

原文:https://towardsdatascience.com/why-would-you-use-webassembly-to-put-scikit-learn-in-the-browser-77671e8718d6?source=collection_archive---------21-----------------------

老实说。我不知道。但是我确实认为 WebAssembly 是 ML/AI 部署的一个很好的目标(在浏览器和其他地方)。

在我自己的学术工作中,以及在与各种公司和医院的合作中,我经常面临将经过验证的模型投入生产的挑战。部署证明是困难的;这是阻碍在各个领域采用许多有用模型的主要障碍之一。在尝试了各种解决方案后,我们决定使用 WebAssembly 二进制文件进行模型部署。现在,这种选择并不总是被理解:许多数据科学家还没有听说过 WebAssembly ,即使他们听说过,他们也大多将其与浏览器中的运行任务联系在一起。此外,感兴趣的读者会很快找到像 pyodide 这样的项目,虽然非常有趣,但却让读者误解了通过将整个 python 堆栈移动到浏览器中就可以完成模型部署:我们并不这么认为。我们简单地将 WebAssembly 视为一个安全、可移植、高效的编译目标,可以在任何地方部署合适的模型。在这篇文章中,我将试着解释我们选择这项技术的原因。

需求:当将模型投入生产时,我们想要什么?

选择一项技术通常受益于一套好的需求(如果你愿意的话,可以称为需求):我们希望我们的技术做什么?以下是我们为 AI/ML 模型部署考虑的一些事情:

注意:我在这里非常宽泛地对待“模型”的概念;这可能包括预处理和后处理。实际上,当生成推理时,“模型”通常只是对一些输入数据执行的一组操作,从而导致一些输出。

  1. 我们希望对那些创建和验证模型的人的工作实践产生最小的影响。实际上,如果构建和验证有用模型的数据科学家/研究人员也可以使用他们的首选工具进行部署,那将是一件好事。应该很容易。
  2. 我们希望部署的模型计算效率高(即速度快)。在训练期间,执行速度可能不是一个大问题(尽管训练速度很可能是),但当我们想要重复生成推理时,这将是一个问题。一旦你在一秒钟内评估一个模型数千次,如果它运行得很快就好了。
  3. 我们希望部署的模型具有较小的内存占用。在部署中,如果推理不仅在时间上有效,而且在内存上也有效,那就太好了。一个小而快速的任务最终改善了用户体验,降低了成本,并且节省了大量能源
  4. 我们希望部署的模型是可移植的。当我们将模型从服务器转移到物联网设备、手机和网络浏览器时,我们不应该不得不重建模型。
  5. 我们希望部署的模型是安全且可验证的。模型应在沙盒中安全运行,并且应能够验证正确的模型是否可用。
  6. 我们希望能够轻松地试验已部署的模型。一旦部署了模型,应该可以轻松地 A/B 测试模型的各种版本。

使用 WebAssembly 部署

鉴于上述迫切需要,我们研究了几种技术,从使用 docker 容器将 jupyter 笔记本投入生产,到在crust中重建我们的模型并为各种运行时编译可执行文件,到使用当前提供的不断增长的产品套件之一使模型投入生产更容易(即 pyTorchTFXLambdaAzure 等)。).都以这样或那样的方式失败了。Docker 容器允许您简单地复制现有的 Python 堆栈、包、模型等等,但是生成的容器通常臃肿而缓慢。重建是高效的,但是耗时的。现有的云服务在某些方面表现不错,但并非所有方面都是急需的。因此,我们创建了自己的模型部署流程。

我们使用 WebAssembly 的部署流程

在检查我们使用 WebAssembly 的部署流程是否符合需求之前,我想我应该解释一下相关的步骤:

  1. 我们允许数据科学家使用他们最喜欢的pythonR包/工具来拟合模型。
  2. 使用我们的简单包,例如python[sclblpy](https://pypi.org/project/sclblpy/)包,数据科学家可以直接从他们喜欢的工作空间上传存储的模型(或管道)。
  3. 上传模型后,我们自动“分解”它——也就是说,我们剥离所有不必要的细节——并将最基本的必需品转换成 WebAssembly 二进制文件。不可否认,这一步很有挑战性,构建起来让我们很头疼,但是幸运的是,对于每个模型类,只需要做一次。一旦完成,已知模型类的每个模型都可以自动优化并传输到 WebAssembly。( 举个例子: 假设你用 *scikit-learn* 拟合一个线性回归模型。在这种情况下,一个存储的模型对象包含了许多对于推断来说并不重要的信息:我们有效地剥离了该对象以创建一个只包含所需向量操作的 WebAssembly 二进制文件)。
  4. 在生成一个遵循 WASI 标准的.wasm二进制文件后,它可以在任何地方运行。我们通常会在服务器上托管二进制文件,并创建一个 REST 端点来执行推理任务,但是我们也在浏览器和边缘部署了模型对象。

这就是我们结束的过程。

什么是 WebAssembly?

我想简单地离题解释一下 WebAssembly 是有用的。根据官方 WebAssembly 页面“web assembly(缩写 Wasm)是一种基于堆栈的虚拟机的二进制指令格式。Wasm 旨在作为编程语言的可移植编译目标,支持客户端和服务器应用程序在 web 上的部署。”现在,虽然这是真的,但随着 WASI 的出现,以及我们在 Wasmer 的朋友提供的精彩开源工具,这个定义看起来太有限了:WASI 二进制文件可以在任何地方运行。因此,对我们来说,WebAssembly 是一个编译目标,它可以有效地提供以本机速度运行的可执行文件,放在非常小且高效的容器中,几乎可以在任何地方运行。

所以,让我们检查一下这是否合适…

需求 1:易用性

我们目前能够使用一行代码将模型转换为 WebAssembly。这里有一个超级简单的例子:

我们可以对几乎所有的sklearnstatsmodelsxgboost都这样做。你可以使用[sclblpy](https://pypi.org/project/sclblpy/) 来完成。

最近,我们开始支持 ONNX 上传,有效地覆盖了您想要部署的几乎任何模型或管道。

是的,我们认为这个过程很简单。

需求 2:计算效率

虽然 WebAssembly“承诺”高效快速,但看看实际数字总是好的。我们适合自动财产估价的 BART 模型(AVM);点击这里查看演示应用。当使用 Docker 容器部署 fitted 模型时,生成 1000 个后验绘制对于一次往返需要 4.5 秒多一点(即,包括网络延迟)。使用我们的 WebAssembly 部署始终如一地做同样的事情只需不到一秒钟。我们一直在寻找这样的速度提升:查看这篇文章,了解更多基准(我们也密切关注 WebGPU ,这是一个快速发展的补充标准,将使我们能够为我们的 CPU 优化 WebAssembly 二进制文件添加 GPU 支持)。

所以,是的,WebAssembly 模型部署很快。然而,理解为什么它通常比现有的基于rpython的推理要快得多是有好处的。在某种程度上,速度的提高来自于转向编译的、较低级的语言(即,强类型、更好的内存管理、强编译器优化等)。).然而,这些改进只是故事的一部分:WebAssembly 模型部署还允许我们剥离许多相关的“层”:

使用 docker 容器(左)和使用 WebAssembly(右)的模型部署;剥离这些层大大提高了执行速度。

由于每一层都需要时间和资源来运行,所以剥离它们最终会在延迟、能耗和计算成本方面带来巨大的好处。

需求 3:内存占用

我们希望模型在内存方面更小。并且,考虑到上面提出的层的分析,不仅仅是模型“包”本身应该小;如果整个运行时能尽可能的小而高效就好了。在 AVM 演示的基础上,这似乎工作得很好:在R我们把 BART 模型本身降低到大约 40Mb,运行时间降低到大约 80Mb(两者都需要一些努力)。使用 WebAssembly 部署,我们最终得到的模型“包”只有 3Mb 多一点,而运行时只有 10Mb。所以总共是 120Mb 对 13Mb。是的,WebAssembly 模型部署占用的内存很少。

需求 4:便携性

小而快创造了新的机会。WebAssembly 模型的可移植性允许在服务器、浏览器、或边缘设备上运行它们。这产生了新的用例:我们在无人机上部署了物体识别模型(绕着港口飞行,识别货运集装箱的维护状态)。我们还在用户的浏览器上运行了推荐模型,我们能够将模型发送到医院(用于放射诊断目的),而不是将敏感的患者数据发送到中央服务器。便携性。检查。

需求 5:安全且可验证

一个经常出现的问题是“我们如何确保返回的推论是有效的”?使用 WebAssembly 二进制文件的一个好处是,我们可以广泛地验证模型的输入和输出,并整合功能。随后可以使用简单的校验和来验证生成的二进制文件;我们可以确保在正确的地方交付正确的型号。

接下来是验证,我们显然希望模型包不会对周围的计算环境造成任何伤害;幸运的是,这就是 WebAssembly 的设计目的;它本质上是沙箱化的和安全的。

所以,是的,这一次也成功了。

渴望 6:简单的实验

一旦部署差距被弥合,世界不会停止。通常,一个已部署的模型只是所有模型的一个实例,这些模型可能是为特定问题而设计的。如果测试一个模型的不同版本很容易,那就太好了。WebAssembly 二进制文件使这个过程变得简单:一旦一个模型成为一个独立的、易于发布和易于运行的“包”,用两个二进制文件建立 A/B 测试(或者甚至建立自适应方案,例如 Thompson 在多个竞争模型上采样)就变得简单了。

适当的沙盒和可移植性使实验变得容易。

包裹

我们有很多将模型投入生产的经验。基于这一经验,我们最终开发了一个新的平台,通过 WebAssembly 简化了模型部署;对我们来说,这符合所有的条件。也就是说,一个技术解决方案永远不会完全解决“模型部署的问题”。每当我们试图弥合从模型训练和验证到实际使用之间的差距时,我们都会面临组织、法律、财务和伦理方面的问题。我们不能说所有这些都可以轻易解决。但是,我们确实认为从技术上来说,部署问题是可以解决的,WebAssembly 提供了解决相关挑战的完美工具。

放弃

值得注意的是我自己的参与:我是 Jheronimus 数据科学院 的数据科学教授,也是可扩展的的联合创始人之一。因此,毫无疑问,我对 Scailable 有既得利益;我有兴趣让它成长,这样我们就可以最终将人工智能投入生产并兑现它的承诺。这里表达的观点是我自己的。

为什么 XGBoost 不能解决你所有的问题。

原文:https://towardsdatascience.com/why-xgboost-cant-solve-all-your-problems-b5003a62d12a?source=collection_archive---------9-----------------------

入门

XGBoost 和其他基于树的算法的一个关键限制。

谢尔盖·科洛米耶茨Unsplash 上拍摄的照片

如果你曾经在 Kaggle 上参加过机器学习比赛,或者浏览过数据科学社区撰写的文章或论坛,你可能听说过 XGBoost。这种算法已经赢得了许多 Kaggle 竞赛,并且有许多基准研究表明 XGBoost 始终优于其他算法。XGBoost 是并行的,并且比其他梯度增强实现运行得更快,这一事实增加了它的吸引力。

对于那些不熟悉这个工具的人来说, XGBoost (代表“极端梯度提升”)是一个高度优化的框架,用于梯度提升一种迭代地组合几个弱学习器(如决策树)的预测的算法,以产生一个更强大、更健壮的模型。自 2014 年问世以来,XGBoost 已经成为许多数据科学家和机器学习实践者的首选算法。

“有疑问的时候用 XGBoost”——Avito上下文 Ad 点击预测比赛上 Kaggle

这听起来可能好得难以置信,对吗?XGBoost 对于许多任务来说无疑是强大而有用的,但是有一个问题…事实上,这个问题不仅影响 XGBoost,而且影响所有基于树的算法。

基于树的模型不擅长外推

这可能是所有基于树的模型固有的根本缺陷。不管你有一个决策树,一个有 100 棵树的随机森林,还是一个有 1000 棵树的 XGBoost 模型。由于基于树的模型划分任何给定问题的输入空间的方法,这些算法在进行预测时很大程度上无法外推超出训练数据限制的目标值。在分类任务中,这通常不是一个大问题,但在涉及预测连续输出的回归任务中,这绝对是一个限制。

如果训练数据集只包含 0 到 100 之间的目标值,则基于树的回归模型将很难预测出该范围之外的值。以下是一些预测性任务的例子,在这些任务中,外推很重要,而 XGBoost 可能并不奏效…

预测气候变化对全球气温的影响

在过去的 100 年里,全球气温上升的速度越来越快。想象一下,试图使用 1900 年到 2020 年的数据来预测未来 20 年的全球气温。像 XGBoost 这样的基于树的算法将受到今天全球最高温度的限制。如果气温继续上升,该模型肯定会低估未来 20 年全球气温的上升。

从 1880 年到 2020 年的全球温度异常。来源:美国宇航局 GISS

预测股票市场指数(如标准普尔 500)的价格

如果我们观察一个受欢迎的股票市场指数如标准普尔 500 在过去 50 年的趋势,我们会发现该指数的价格经历了高点和低点,但最终会随着时间的推移而上涨。事实上,根据历史数据,标准普尔 500 的平均年回报率约为 10%,这意味着价格平均每年上涨约 10%。尝试使用 XGBoost 预测标准普尔 500 的价格,您会发现它可能会预测价格下降,但无法捕捉数据中的整体上升趋势。公平地说,预测股票市场价格是一个极其困难的问题,即使是机器学习也没有解决,但关键是,XGBoost 无法预测超出训练数据中存在的范围的价格上涨。

标准普尔 500 历史价格。来源:标准普尔转载自 multpl.com 的

预测网络流量

这个任务是我几年前参加的下面这个 Kaggle 比赛的目标。正如 XGBoost 可能无法捕捉全球气温或股票价格的增长趋势一样,如果一个网页正在传播,那么即使增长趋势很明显,XGBoost 也可能无法预测该页面的流量增长。

树木不擅长外推背后的数学原理

决策树获取输入空间并将其划分为子部分,每个子部分对应一个单一的输出值。即使在回归问题中,决策树也使用有限的规则集来输出有限的可能值集中的一个值。由于这个原因,用于回归的决策树总是难以对连续函数建模。考虑下面的例子,决策树可以用来预测房子的价格。请记住,我下面创建的数据集是完全虚构的,并且只用于证明一个观点。

一个简单的房价数据集。

如果我们使用这个小数据集来训练决策树,下面的树可能最终成为我们预测房价的模型。

一种简单的房价预测决策树。

显然,这不是一个很好的模型或数据集,但它展示了决策树回归的一个基本问题。根据数据集,似乎卧室的数量和房子的大小与其价格正相关。换句话说,有更多卧室的大房子比有更少卧室的小房子要贵。这似乎合乎逻辑,但决策树永远不会预测低于 20 万美元的价格或高于 55 万美元的价格,因为它已经将无限的输入空间划分为有限的可能性集。由于决策树回归模型根据平均值为树叶赋值,请注意,由于有两栋 4000 平方英尺的三居室房屋,决策树预测了这两栋房屋在这种情况下的平均价格($550,000)。即使数据集中存在价值 600,000 美元的房子,决策树也无法识别价值 600,000 美元的房子。

即使像 XGBoost 这样的模型计算了 1000 个决策树的加权平均值,每个决策树也将被限制为仅预测一组范围的值,因此,加权平均值也被限制为取决于训练数据的预定范围的值。

基于树的模型擅长做什么

虽然基于树的模型不擅长外推,但它们仍然擅长解决广泛的机器学习问题。XGBoost 通常不能很好地预测未来,但它非常适合以下任务:

  • 分类问题,尤其是那些与现实世界业务问题相关的问题,如欺诈检测或客户流失预测。许多决策树的组合的基于规则的逻辑可以检测用于处理这些分类问题的合理的和可解释的模式。
  • 有许多分类变量的情况。决策树基于规则的逻辑能够很好地处理包括具有诸如是/否、真/假、小型/中型/大型等类别的特征的数据。
  • 训练集中存在的目标值的范围或分布可以预期与真实世界测试数据的范围或分布相似的问题。这个条件可以适用于几乎每一个训练数据被正确采样的机器学习问题。一般来说,机器学习模型的质量受到训练数据质量的限制。如果数据集中房屋的价格范围在 30 万美元到 40 万美元之间,则无法训练 XGBoost 有效预测房价。显然会有很多房子比训练集中的房子更便宜也更贵。对于像预测房价这样的问题,你可以用更好的训练数据来解决这个问题,但是如果你试图预测未来的股票价格,XGBoost 根本就行不通,因为我们对未来目标值的范围一无所知。

你应该用什么来代替推断

对于预测或任何涉及外推的机器学习问题,神经网络通常会优于基于树的方法。与基于树的算法不同,神经网络能够拟合任何连续函数,从而允许它们捕捉数据中的复杂趋势。在神经网络背后的理论中,这种说法被称为 通用逼近定理 。这个定理本质上是说一个 神经网络只要有一个任意大小的隐藏层,就能以任何期望的精度水平逼近任何连续函数。基于这个定理,神经网络可以捕捉股票价格的上升趋势或全球气温的上升,并可以预测训练数据范围之外的值。

只有一个任意大小的隐藏层的神经网络可以逼近任何连续函数。作者使用 NN SVG 创建的图像。

对于时间序列预测问题,如预测全球气温,具有 LSTM(长短期记忆)单元的递归神经网络可以非常有效。事实上,LSTMs 通常可以很好地处理序列数据,我甚至在本文的中使用它们进行文本分类。

这是否意味着神经网络比 XGBoost 更好?

不,不一定。对于某些问题,神经网络比 XGBoost 更好,但肯定不是所有问题。在机器学习中,没有免费的午餐,任何算法的优势都需要付出代价。

事实上,虽然神经网络的泛化能力是一个优势,但它也是一个弱点,因为神经网络可以拟合任何函数,也可以很容易地过度拟合训练数据。神经网络也倾向于需要大量的训练数据来做出合理的预测。有趣的是,与基于树的算法相比,使神经网络如此强大的复杂性也使它们更加难以解释和诠释

这个故事的寓意是不是所有的算法都是平等的,但是每个算法都有缺陷,没有一个算法在所有机器学习问题和商业用例中都是普遍优越的

摘要

  • XGBoost 是一个非常复杂的算法,但是像其他基于树的算法一样,当涉及到外推的任务时,它就有所欠缺。
  • 对于各种各样的现实世界的机器学习问题,XGBoost 仍然是一个很好的选择。
  • 神经网络,尤其是具有 LSTMs 的递归神经网络通常更适合于时间序列预测任务。
  • 机器学习中没有免费的午餐,每种算法都有自己的优缺点。

来源

  1. T.陈,C. Guestrin, XGBoost:一个可扩展的树增强系统,(2016),第 22 届 ACM SIGKDD 国际会议。
  2. Kaggle, Avito 上下文广告点击量,(2015),Kaggle 比赛。
  3. 美国宇航局戈达德太空研究所(GISS),全球气温,(2020),《全球气候变化:地球的生命体征》。
  4. 标准普尔, S & P 500 历史价格,(2020),multpl.com。
  5. 维基百科,通用逼近定理,(2020),维基百科免费百科。

将数据仓库迁移到云时需要考虑什么

原文:https://towardsdatascience.com/why-you-are-throwing-money-away-if-your-cloud-data-warehouse-doesnt-separate-storage-and-compute-65d2dffd450f?source=collection_archive---------23-----------------------

要让您的数据仓库和数据湖面向未来,需要考虑什么&雪花、亚马逊、谷歌、SAP 和 IBM 是如何实现存储和计算分离的

约翰·施诺布里奇在 Unsplash 上的照片

不久以前,建立一个企业数据仓库需要几个月甚至几年的时间。如今,有了云计算,您可以很容易地注册一个由云供应商提供的 SaaS 或 PaaS 产品,并且很快就可以开始构建您的模式和表。在本文中,我将讨论将数据仓库迁移到云时要考虑的关键特性,以及为什么选择一个将存储和计算分开的数据仓库是明智的选择。

将存储和计算分开意味着什么?

从单个服务器到数据仓库集群

归结起来就是向外扩展&向内扩展向上扩展&向下扩展之间的差异。在旧的数据库和数据仓库解决方案中,存储和计算驻留在单个(通常很大&强大)服务器实例中。这可能会很好地工作,直到这个服务器实例达到其最大计算或存储容量。在这种情况下,为了适应增加的工作负载,您可以纵向扩展,即将 CPU、RAM 或存储磁盘换成容量更大的,对于云服务,这意味着要切换到更大的实例。类似地,如果你的单个实例太大,为了省钱,你可以把它换成一个更小的,也就是缩减。这个过程有两个主要缺点:

  • 向上扩展和向下扩展的过程非常耗时,并且通常意味着您的数据仓库将在一段时间内不可用
  • 由于单个服务器实例的自然限制,您可以纵向扩展的范围是有限的。

大规模并行计算

为了缓解这个问题,数据仓库供应商开始使用 MPP ( 大规模并行计算)范例,允许您的数据仓库一次使用整个实例集群。这样,如果您开始达到最大容量限制,您可以简单地向集群添加另一个具有更多存储和计算容量的服务器实例(即横向扩展)。

MPP 可以在很大程度上解决最初的可扩展性问题。然而,这也要求您的存储和计算能力在集群中的节点之间紧密结合。这意味着,如果你想在晚上关闭一些计算能力(即扩展,因为几乎没有人在这段时间查询数据,你不能这样做,因为终止实例将意味着要么丢失数据,要么必须创建备份并在早上从它恢复。如果您的架构不允许您轻松扩展 闲置的计算资源,您只需扔掉您的钱

这里讨论的范例通常被称为无共享架构。维基百科[1]是这样定义的:

无共享架构 ( SN )是一种分布式计算架构,其中每个更新请求由单个节点(处理器/内存/存储单元)满足。目的是消除节点之间的争用。

如何才能把 SN 架构的 MPP 做的更好?

我们可以清楚地看到,瓶颈在于存储和计算紧密耦合,无法相互独立地扩展。理想情况下,我们希望获得一种架构,在这种架构中,我们可以根据查询工作负载按需扩展计算能力,并且在所有计算节点之间共享存储。存储应该具有无限的容量,以使架构经得起未来的考验,并且随着时间的推移,随着我们存储越来越多的数据,存储应该自动扩展。

所以我们想实现 SD-MPP共享数据大规模并行处理集群,而不是 SN-MPP。

这正是许多云供应商所做的。他们的实现有一些不同,但他们的目标是相同的:一个弹性计算层和一个独立且可无限扩展的共享存储层

为什么存储和计算的分离非常适合分析查询?

Hadoop 最初设计用于分析数据(,即运行查询以检索&流程数据,尽可能接近其存储位置。这意味着,如果您的销售数据存储在节点 A 上,那么您检索销售数据的查询也可能在节点 A 上执行,以提高性能。总的来说,获取数据进行处理的最快方式是(按此顺序):

  • 来自 RAM,
  • 然后从固态硬盘
  • 然后从硬盘和对象存储。

因此,将存储和计算分开可能看起来违反直觉,因为我们将数据(存储)移动到离处理数据的地方更远的地方。

然而,对于高性能列数据库,云供应商将许多优化技术 应用于存储和计算 ( 例如。AWS Redshift 应用 AQUA [4] ),因此存储与计算的分离不会对性能产生任何负面影响。这些优化技术涉及压缩、编码、缓存以及在对象存储和 SSD 之间内部移动数据的组合。

当您在一个列式内存数据库中运行一个查询时,在的掩护下,您只从一个共享存储层 ( 比如说从对象存储 ) 将该数据的一小部分加载到内存 ( 中,同时还对该数据应用字典编码和压缩以减小其大小)。然后,可以用与从具有块存储的本地磁盘加载时相同的方式处理这些数据。

Spark 等分布式计算引擎也支持直接从对象存储加载数据[2],这是分析数据处理的计算和存储分离的又一个例子。

在数据仓库中分离存储和计算有什么好处

  • 没有闲置的计算资源 —存储和计算可以相互独立地扩展和缩减
  • 如果与对象存储一起使用(例如。AWS S3)或与网络文件系统 (es。AWS EFS),我们以低成本获得无限的高可用性和容错存储
  • 没有存储节点管理 ( 这是您通常需要用 ex 维护的。Hadoop 集群节点或 Amazon 红移密集型存储节点)—使用 SD-MPP ,您(通常是)只需监控和扩展您的计算节点
  • 大幅降低成本— 能够在夜间、季节性高峰过后或不需要时关闭一些计算节点,可以节省大量资金
  • 让您的架构在数据增长方面面向未来 —随着我们这些天经历的数据增长,我们的数据量不可避免地会随着时间的推移而增加。通过使用 SN-MPP ,仍然有可能适应这种增长,但价格是许多公司无法承受的。
  • 灵活性 —能够将季节性考虑到您的架构中。在一年中的特定时间需要更多计算,例如黑色星期五、圣诞节或您发布新产品的时间
  • 更高的性能——你可以在你的时间内做更多的事情:例如。如果您有一些计算成本更高的作业,您可以启动一个具有更多 RAM 和 CPU 容量的额外计算节点,以更快地完成计算密集型作业,之后,您可以终止该节点,而不必重新设计整个数据仓库
  • 容错:如果由于某种原因,您的所有计算节点都停止运行,您不会丢失数据——您可以简单地启动一个新的计算实例,并立即恢复对您的模式和表的访问
  • 横向扩展时,无需对集群中的数据进行重新分配、重新分区或重新索引 —借助紧密耦合的 SN-MPP 架构,需要重新分区或重新索引来防止某些特定节点过度燃烧,即防止一个节点占用所有存储或所有计算工作,而其他节点保持空闲。简而言之,在节点间均匀分布存储和计算。
  • 将不同团队的计算分开,同时仍然将您的数据(共享存储)保存在一个每个人都可以访问的中心位置。例如,您可以将单独的“虚拟”计算能力分配给数据科学家,以便他们对 ML 的计算开销很大的查询不会影响其他用户。这个特性并不是所有云厂商都支持的(只从雪花那里听说过【10】)。

云供应商如何实现存储和计算的分离

在下文中,我只列出了利用 SD-MPP 架构的云数据仓库服务,该架构将存储与计算分开。由于这些云产品互不相同,我简要描述了它们是如何将共享数据范式整合到服务中的。

雪花

雪花首创,营销(他们好像有很扎实的营销预算!)多集群共享数据架构的概念( SD-MPP )。他们进一步将其分为[3]:

  • 数据库存储层 —在我们将任何数据加载到 Snowflake 之后,这是数据被持久化和优化的地方(变成柱状形式并被压缩)。这种存储对用户来说是抽象的,数据只有在运行查询时才可见。
  • 查询处理层 —决定数据在虚拟仓库内部如何处理。这是我们可以主动管理的计算层。我们可以为特定的团队创建几个仓库。
  • 云服务层 —包括元数据&基础设施管理、认证&访问控制以及查询优化。

雪花的最大卖点之一是他们的 SD-MPP 产品是云不可知的——你可以在亚马逊网络服务、Azure 或谷歌云平台上设置它[9]。

亚马逊红移

直到 2019 年 12 月,红移将被视为 SN-MPP 架构的典型例子。Redshift 是首批云数据仓库解决方案之一,自 2012 年 10 月上市。

AWS 可能注意到其他云供应商正在提供具有 SD-MPP 架构的竞争服务(由于存储和计算分离而大幅降低成本),或者他们可能听取了客户的意见。起初,AWS 实现了红移光谱——一种提供额外计算层以直接从 S3 查询数据的服务。这个特性允许我们创建外部表 ( 外部,因为它们不存在于数据仓库中——它们是从 S3 ) 中检索的,并将它们与数据仓库中的现有表连接起来。它提供了数据仓库和数据湖之间的无缝数据集成,但它没有解决红移所基于的 SN-MPP 架构的问题。

2019 年 12 月,AWS 发布:

  • 亚马逊红移托管存储,它允许我们在计算节点之间使用共享存储,可自动扩展至 8.2 PB。这种存储基于 S3 和固态硬盘的组合。AWS 完全管理数据在 S3 和 SSD 之间的存储和移动方式。
  • 面向红移的 AQUA(高级查询加速器) —在托管存储层中包含硬件加速缓存,以加快操作速度。根据 AWS 的说法,这使得 Redshift 比任何云数据仓库快 10 倍[4]。这是来自 re:Invent [5]的幻灯片,他们声称这种速度提升——然而,他们“忘记”链接他们性能基准的来源,所以我无法验证。
  • 新 RA3 实例类型 —此实例类型系列中的计算节点与红移托管存储协同工作。

AWS 雅典娜

亚马逊还有另一个可以用于数据仓库和数据湖的服务:Athena。与 Redshift 相反,Athena 是一个无服务器选项,它将 Presto 引擎(计算)与 S3 ( 存储)结合在一起,以按需从位于 S3 的数据湖中查询数据。您需要为每个查询支付+的 S3 存储费用。

国际商用机器公司

IBM Db2 Warehouse on Cloud 是一个完全托管的服务,采用 SD-MPP 架构,但有一些额外功能,如基于人工智能的查询优化器:

正常的查询优化器可能会继续建议相同的查询路径,即使在它被证明不如希望的有效之后,机器学习查询优化器可以模仿神经网络模式,从经验中学习。这有助于它不断改进,而不是不时地优化”。[6]

补充说明:在撰写本文时,IBM 声称提供 1000 美元的 IBM 云信贷,以便您可以试用他们的云数据仓库。你可以在这里找到更多关于的信息。

SAP 数据仓库云

在某些方面,SAP 采取了与雪花相似的方法,他们也提供虚拟仓库,他们称之为“空间”:

空间[…]是独立的,可以为可用磁盘空间、CPU 使用率、运行时间和内存使用率分配配额。[7]

他们承诺,在这些空间内,您可以彼此独立地扩展存储和计算。然而,存储似乎没有弹性增长,因为您被要求专门分配每个空间的磁盘空间配额。

谷歌大查询

BigQuery 是完全无服务器的,因此它从用户那里抽象出存储和计算是如何工作的。BigQuery 自动扩展存储和计算,无需我们做任何事情。在引擎盖下,它使用了一个名为 Colossus 的独立分布式存储层和一个名为 Dremel计算引擎。与 Amazon Athena 类似,Big Query 使用按查询定价的模型。

现代数据仓库解决方案中存储和计算的分离模糊了数据湖和数据仓库之间的界限

公司倾向于构建数据湖以节省成本 —数据湖提供无限存储,许多数据湖云服务提供附加服务以快速高效地从数据湖中检索数据,通常使用构建在数据湖之上的 SQL 接口。这样,我们可以获得一个存储层(你的数据湖 ex。通过利用 AWS S3* 和一些 SQL 查询引擎作为(无服务器计算层来查询这些数据(例如。亚马逊雅典娜)。从架构的角度来看,这是一个类似于数据仓库中共享数据层的概念。另外,使用那些为数据湖构建的 SQL 接口通常类似于使用数据仓库。在某种程度上,这模糊了数据湖和数据仓库之间的界限。*

证实这一假设的常见例子:

  • 开源的 Presto+亚马逊雅典娜的 AWS 实现
  • Upsolver 为摄取和转换存储在数据湖中的数据提供 SQL 接口[8]
  • “老好人” Apache Hive 自 2010 年以来就为存储在 Hadoop 上的数据湖提供了一个 SQL 接口
  • 雪花已经称自己为云数据平台,因为它在一个产品中结合了数据仓库和数据湖功能
  • Amazon Redshift 创建了 Redshift Spectrum 来提供在单个服务中一起查询数据仓库和数据湖的能力。

结论

在本文中,我们了解了为什么计算与存储的分离对于以经济高效的方式让您的云数据仓库和数据湖架构面向未来至关重要

我们回顾了我们如何实现共享磁盘大规模并行处理架构的历史,以及它是如何被雪花、亚马逊、谷歌、SAP 和 IBM* 实现的。*

最后,我们列出了这种方法的优势,并得出结论,在现代云数据仓库解决方案中,计算与存储的分离模糊了数据湖和数据仓库之间的界限。

感谢您的阅读,并随时关注我的下一篇文章。

资源:

[1]https://en.wikipedia.org/wiki/Shared-nothing_architecture

[2] Preetam Kumar: 切断绳索:使用对象存储将您的数据湖中的数据与计算分离https://www . IBM . com/cloud/blog/Cutting-cord-separating-data-compute-data-lake-object-storage

[3]雪花文档:https://Docs . snow flake . com/en/user-guide/intro-key-concepts . html #:~:text = installation % 20 和%20updates。-,雪花% 20 体系结构,节点% 20 在% 20 数据% 20 仓库中。

[4]AWS Pages:https://Pages . AWS cloud . com/AQUA _ preview . html #:~:text = AQUA % 20 is % 20a new % 20 distributed,to % 20 compute % 20 clusters % 20 for % 20 processing。

[5] AWS 幻灯片来自 re:Invent 2019 年 12 月https://D1 . AWS static . com/events/reinvent/2019/NEW _ LAUNCH _ Amazon _ Redshift _ re imagined _ RA3 _ and _ AQUA _ ant 230 . pdf

[6] IBM 博客:https://www . IBM . com/blogs/journey-to-ai/2020/03/the-technical-advances-behind-DB2/

[7] SAP 博客:https://saphanajourney . com/data-warehouse-cloud/resources/what-are-spaces/

[8]上解器:https://www.upsolver.com/data-lake-platform

[9]雪花—支持的供应商:https://docs . snow flake . com/en/user-guide/intro-cloud-platforms . html

[10]雪花虚拟仓库:https://www . analytics . today/blog/snow flake-Virtual-warehouse

作为一名数据科学家,你为什么感觉不够好,你能做些什么

原文:https://towardsdatascience.com/why-you-dont-feel-good-enough-as-a-data-scientist-and-what-you-can-do-about-it-c69ca51ca06b?source=collection_archive---------54-----------------------

尤其是如果你是一个有抱负的数据科学家

iSAW 公司Unsplash 上拍摄的照片

你有没有觉得自己没有资格去做别人信任你去做的事情?你有没有想过,你设法骗过他们给你一个机会,但他们发现你只是时间问题?你有没有觉得自己是个骗子,或者你不够好,只是运气好?

我去过那里。尽管我对自己的能力和技能完全有信心,但我仍然觉得除了我之外,还有很多事情大家都知道。我觉得我设法欺骗了系统,得到了一份工作,现在我不得不保护我的封面。

如果你也遇到过类似的情况,那说明你经历过冒名顶替综合症。如果你还没有,并且正在努力成为一名数据科学家,那么你可能会在第一份工作中有这种感觉。

冒名顶替综合征就是觉得自己无法胜任这份工作,认为自己是靠运气才走到这一步的,别人会发现你并指出你的错误。我来告诉你为什么我觉得这种感觉在数据科学家中特别普遍,为什么有这种感觉很正常。我也会给你一些建议,告诉你如何改变你的观点,拥有更健康的心态。

为什么这种感觉在数据科学家中很普遍?

数据科学或数据科学家还不是定义明确的术语。可能会看到许多相互矛盾的定义。因此,有抱负的数据科学家可能会看到不包括他们的定义,并认为他们仍然没有获得数据科学家的头衔,因为他们缺乏提到的某种技能。

更重要的是,数据科学经常被用作一个庞大的总括术语,其下还有许多其他领域。当你看到不断有新的主题、学科、技术、算法出现,并且都被描述为数据科学的一部分时,感到不知所措和不合格是正常的。记住,不是你听到的每件事都会适用于你。

我知道当你在网上听到同事、朋友、人们讨论某些你从未听说过的话题时,你会更难过。很自然的认为自己是面对地球唯一不知道这件事的数据科学家(候选人)。

除此之外,互联网本身对冒名顶替综合症没有帮助。正如我在以前的一篇文章中谈到的,数据科学精英可能会让你对他们的在线评论感到不满意。别让他们得逞。看到类似“谁能自称数据科学家?,“你如何判断一个人是否是真正的数据科学家?”“你怎么能算出一个假的数据科学家?".

为什么不好?

迷失在冒名顶替综合症中是不好的,因为它可能会限制你的潜力。特别是当你刚进入这个领域时,你的主要目标应该是从你的前辈和你正在做的项目中吸取一切,而不是隐藏你的缺点。

如果有的话,你应该感到足够舒服,公开谈论你不知道的事情,这样别人就会知道如何帮助你。

你能做些什么呢?

首先,你能做的是知道有这种感觉是正常的,并在这种感觉被触发时意识到这一点。我遇到过在各自领域都有成就的人,却仍然觉得自己懂得不够多,更别说新手了。在某种程度上,感觉不够好是好事,它会给你动力去学习更多,更努力。不过,你应该确保留意负面影响,这样它才不会阻止你发挥潜力。学会利用这种感觉。

为了减少冒名顶替综合症的影响,特别是如果你正处于旅程的开始,我建议你在允许自己称自己为数据科学家之前,保留一份你想学习的基本技能的列表。你可以保持它的灵活性,在你进行的过程中添加你认为合适的东西。只要确保不要把你在那里听到的所有与数据科学相关的东西都堆砌起来。需要有一个可实现的终点线。您可以使用数据科学入门课程中的理论知识层作为起点。说到底,谁是数据科学家并没有明确的描述,你需要建立自己的门槛,不要担心其他人在说什么。由你来定义你的标准。如果需要的话,你可以在以后调整你的标准以适应某个专业或某个职位。

因此,在学习要求方面,不要苛求自己。我以前说过,现在我再说一遍,你最重要的资产是你在需要的时候学习的能力。没有人指望你什么都知道。夯实你的基础,并愿意在此基础上再接再厉。这就是一个好的数据科学家。

👉对数据科学领域以及如何开始学习感到困惑? 免费参加数据科学入门迷你课程

测试准确度越来越低?像这样比较训练集和测试集

原文:https://towardsdatascience.com/why-you-may-be-getting-low-test-accuracy-try-this-quick-way-of-comparing-the-distribution-of-the-9f06f5a72cfc?source=collection_archive---------8-----------------------

如果你是一名数据科学家,这可能发生在你身上:你在学习过程中为你的模型获得了极好的结果,但是当使用测试集时,或者在部署到生产中之后,你得到了低得多的分数:一切都出错了。

来源: makeameme

我是不是太适合了?我的代码有问题吗?我是不是患上了数据泄露

有时,测试集中的数据分布与训练/验证集中的数据分布非常不同。也许你正在处理时间序列,测试数据属于我们 2020 年 4 月后的世界🦠.也许你需要在数据科学面试中取得好成绩。

这个问题也会发生,尤其是当您部署一个在运行时工作的模型时。事情是这样的:

  1. 你跟踪用户数据。您使用的跟踪系统通常会有一些错误,您会有不正确的或丢失的值。
  2. 您可以使用这些数据来训练模型并将其部署到生产中。
  3. 由于生产中的数据具有不同的分布,您的模型可能表现不佳。

不幸的是,如果测试集不在您的能力范围之内——例如,它是生产数据,而您无法访问它——那么解决方案就是获得运行时可用数据的更忠实的表示。这很有挑战性。

资料来源:imgflip

然而 ,如果你有访问测试集的权限,检查测试集的分布是否与训练集的分布相似是相当容易的。你是怎么做到的?

当然,随着更多的机器学习。

来源:可爱的 XKCD (CC BY-NC 2.5)

这个想法非常简单:构建一个随机森林模型(或任何其他分类器),其目标是对“训练”或“测试”中的数据点进行分类。您不应该能够正确地决定一行是属于训练集还是测试集,它们应该是不可区分的。因此,如果我们的模型表现太好,那么您可以将低测试分数归咎于与训练集具有不同分布的测试集。

这里有一个完整的工作示例。试试吧!

当正确创建训练和测试数据集时,分类器的平均准确度从 0.93 下降到 0.53。这正是我们所期待的!如果你稍微挖掘一下,你会发现(剧透一下)测试数据包含了 86%的目标变量等于‘virginica’的行。这就是问题所在。

还有其他方法来测试 2 个数据集的分布相似性。一个这样的例子是 Kolomogorov-Smirnov 测试,它是您分别应用于每一列的东西。我将在以后的文章中更多地讨论这个问题——优点、缺点、发现这个问题后该做什么,以及当你在进行 NLP 和工作嵌入时会发生什么。

更新:帖子现已上线:https://medium . com/@ Billy . mosse/why-you-may-get-low-test-accuracy-try-this-simp statistical-tests-30585 b7ee 4 fa

祝你黑客生涯愉快,并保持健康!

学到了什么?单击👏说“谢谢!”并帮助他人找到这篇文章。

为什么你可能得到较低的测试精度:试试 Kolmogorov-Smirnov

原文:https://towardsdatascience.com/why-you-may-be-getting-low-test-accuracy-try-this-simpstatistical-tests-30585b7ee4fa?source=collection_archive---------53-----------------------

Kolmogorov-Smirnov 帮助比较训练集和测试集的分布。首先使用 Mahalanobis 进行单词嵌入。

在之前的一篇文章中,我描述了一个当你获得高训练分数但低测试分数时可以尝试的巧妙技巧。这个想法是,也许你的测试集与训练集有不同的分布,你可以通过一点(更多)机器学习的帮助,实际上知道是否是这种情况。

在文章的最后,我提到这个问题也可以通过统计测试来解决:主要是 Kolmogorov-Smirnov 统计。它是如何工作的?

Kolmogorov-Smirnov 统计检验(所谓的“零”)假设,即从相同的连续分布中抽取两个独立的(数字)样本。它在 SciPy 中有一个 Python 实现。

让我们试一试。我们首先将数据非随机分为训练集和测试集,因此我们可以尝试 Kolmogorov-Smirnov 测试:

数据集包含列 sepal_lengthsepal_widthpetal_lengthpetal_width 。这可以通过运行以下命令来检查:

X.columns

那我们现在怎么办?Kolmogorov-Smirnov 试验必须在每个连续柱上分别进行。例如,让我们在 sepal_width_column 上进行:

stats.ks_2samp(X_train.sepal_length, X_test.sepal_length)

该行比较了 X_train.sepal_lengthX_test.sepal_length 的分布。它们是相同的吗?

我们得到以下输出:

Ks_2sampResult(
statistic=**0.5511895215183106**, pvalue=**9.307408288528052e-09**
)

统计值给了我们两个分布之间的距离的概念。对于那些稍微了解统计学的人来说,它无非是经验累积分布函数之间的距离的上确界:

来源:维基百科 (CC0)

基本上,这个值越大,分布的差异就越大。在我们的例子中,0.55 是一个很大的数字,因为 ECDF 输出 0 到 1 之间的概率值。这是有意义的:如果你检查我们如何创建 X_trainX_test ,我们让参数 shuffle 在分割期间为假,以模拟数据的非随机分割。

另一方面, pvalue 给了我们一个统计检验的重要性的概念。它告诉你我们应该有多信任这个测试。在这种情况下, 9.3 e09 是一个真正接近于零的值——e09 的意思是乘以 10^(-9)——所以我们处于安全区(通常如果低于 0.05,甚至 0.1 就足够了,这取决于上下文)。

为了结束这一部分,让我们看看如果随机选择训练和测试集会发生什么(在我们的例子中,删除 shuffle=False 选项就足够了)。所以,把这一行改成:

#We remove the shuffle=False option and add a specific random_state so that you get the same random splitX_train, X_test, y_train, y_test = train_test_split(
 X, y, test_size=0.33**, random_state = 42**)stats.ks_2samp(X_train.sepal_length, X_test.sepal_length)

我们得到以下结果:

Ks_2sampResult(statistic=**0.16813686180165732**, pvalue=**0.3401566277318967**)

0.168 的统计值表明我们可能有一个稍微不同的分布,但是我们不能拒绝零假设,即分布实际上是相同的,因为p 值不够小(它应该小于 0.1)。

太好了。这让我们可以比较列数据的分布。但只是一维数据。如果我们处理的是不能真正拆分成列的矢量数据,会发生什么?例如,如果我们的数据集由 NLP 单词嵌入组成呢?在这种情况下,列是非独立的,每个列本身没有太多意义。

好吧,同样,我们可以使用我在文章开头提到的这个简洁的[机器学习技巧](http://Ks_2sampResult(statistic=0.16813686180165732, pvalue=0.3401566277318967)),它非常适合矢量数据的分布。正如帖子所解释的,基本想法是尝试通过机器学习模型将数据点分类为训练或测试,例如随机森林。如果你成功了,这意味着集合有不同的分布。换句话说,你不应该能够成功。

还有其他方法。您可以转换数据,使其成为一维数据。例如,您可以计算向量的长度,然后将 Kolmogorov-Smirnov 应用于的。当然,在任何这些转换过程中,您都会丢失信息,因此,如果测试结果告诉您两个数据集具有相同的分布,您不应该过于相信测试结果。

一个不仅仅是计算向量长度的简单转换是计算数据的每一对数据点的 Mahalanobis 距离。当然,您可以(也应该)尝试进行多种转换,这样您就可以从不同的角度测试您的数据。

Mahalanobis 距离背后的一个可能的直觉是,它计算 2 个向量点之间的距离,就像我们都知道并喜爱的正常欧几里德距离(又名,尺子),但知道这 2 个点是属于特定分布的随机向量。

事实上,当计算两个向量点之间的马氏距离时,你必须通过一个叫做协方差矩阵的东西。这个对象是您用来描述您正在使用的发行版的。

这个协方差矩阵是从分布中计算出来的,并且在 Python 中有一个实现。现在,假设我们正在处理一个训练集 X 和一个测试集 Y。我们不应该计算两个不同的协方差矩阵(一个用于 X,一个用于 Y ),但我们需要处理 X 和 Y 的联合的协方差矩阵。请相信我,否则,您将丢失更多信息,并且无法检测到分布中的某些差异(用数学术语来说,您将无法检测到分布的……协方差中的差异)。)

我们得到以下结果:

 Ks_2sampResult(statistic=**0.13218600000000003**,
 pvalue=**0.0**)

所以分布略有不同,这是肯定的p 值很低,四舍五入为零。

如果我们在两种情况下使用完全相同的分布,我们可能会发现如下数字:

Ks_2sampResult(statistic=**0.008912000000000031**, 
pvalue=**6.42297518848271e-35**)

(当然,有随机性,所以这些玩具的例子你可能会得到不同的结果)。但是,检查一下统计值与之前相比有多低。

总而言之:

  • 有时,模型中的低测试分数可能是因为测试数据与训练数据的分布不同。
  • 您可以通过对数据集的每一列应用 Kolmogorov-Smirnov 统计测试来检查这一点。Python 中有一个实现,你也可以借用我的代码示例。
  • 如果你正在处理具有非独立列的数据集,比如单词嵌入,你不应该使用 Kolmogorov-Smirnov。你应该首先转换你的数据,使它是一维的。例如,你可以计算所有向量的范数,但是如果你使用马氏距离会更好。对此也有一个 Python 实现,您可以再次借用我的代码示例。

黑客快乐!

学到了什么?单击👏说“谢谢!”并帮助他人找到这篇文章。

为什么需要替代数据以及如何使用它

原文:https://towardsdatascience.com/why-you-need-alternative-data-and-how-to-use-it-54ff5f416f03?source=collection_archive---------50-----------------------

依赖传统数据集的日子已经一去不复返了

美国宇航局在 Unsplash 拍摄的照片

你是替代技术的所有者,这是沙特王国的一家连锁技术商店。迄今为止,替代技术在利雅得取得了成功,这主要归功于对当地市场的了解。

您的业务合作伙伴利用他们对当地动态的了解来定制商店:为会说正确语言的人配备员工,寻找战略位置,并为商店储备符合这些地区人们兴趣的商品。

你的下一步?扩展到吉达城。挑战?你不了解当地的动态,没有合作伙伴来填补这一空白,也没有数据来通知你的决定。

你知道,缺乏适当的数据是企业普遍面临的一大难题,尤其是在中东地区。然而,我希望你将此视为一个机会。

让我们退一步看看美国。美国人口普查局进行全国范围的人口普查,除其他外,产生邮政编码级别的人口统计数据,如收入、国籍和年龄组。政府、公共机构和私营企业等都利用这些数据来制定各种决策,包括:

  • 决定新住房和公共设施的位置和容量
  • 优化电信塔的位置
  • 开设和定制零售店

美国人口普查数据远非最佳,面临着记录过时和偏见等问题。然而,这是一个很好的起点。

中东的情况并非如此。传统数据不仅在许多方面缺乏,而且过于宽泛,通常只能在地区或区域一级获得。

这就是替代数据出现的地方。

那么什么是替代数据呢?这个名字源于金融,投资公司开始使用关于公司的非传统数据集,从常规公司文件以外的来源提取对公司业绩的独特和及时的见解。例如,对冲基金可能使用卫星图像显示零售商店的停车场,并使用这些图像预测季度收入,并相应地在股票市场进行交易。

事实上,2019 年,估计有 11 亿美元被注入替代数据行业,预计 2020 年将增长 55%。

简而言之,替代数据提供精细的最新信息,可以填补传统数据缺乏的空白(例如中东地区缺乏适当的人口普查),或者用来自不同的、可能是专有的视角的丰富信息覆盖现有数据集。

现在我们已经确定了什么是替代数据,让我们通过一个例子来帮助解释您将如何使用替代数据来指导您在吉达的新技术商店的决策。

  1. 确定你需要回答的问题。为了简洁起见,假设你有两个悬而未决的问题:商店应该设在哪里,销售人员应该说什么语言?
  2. 将问题转化为可以分析的维度。说店铺的位置主要取决于附近的收入水平,因为替代技术专注于高收入水平的地区。此外,假设语言主要是由附近的民族密度驱动的。
  3. 研究有助于回答这些问题的数据来源。首先,从研究官方数据开始,比如来自国家或地方当局的数据。虽然这些数据可能无法提供您想要的最新粒度视图,但它提供了一个基线,可以帮助您验证和三角测量您遇到的任何粒度数据。然后,探索替代数据。对于收入水平,你可以使用在线平台上的住宅价格数据作为替代。
  4. 使用数据分析提取、清理和汇总替代数据。对于房产价格,您可以解析(即提取信息)Airbnb 或 Property Finder 等平台,以确定每平方米的平均价格。并将这些社区分为三个等级:低、中、高收入水平。
  5. 验证你的发现。这是最重要的一步。事实没有单一的来源,而是对不同的数据源进行三角测量,以获得对业务有意义的精确的、最新的信息。为了验证调查结果,您可以对同一维度使用替代数据源的组合,或者使用以前收集的地区级数据来检查您的粒度调查结果并填补任何缺失的空白。

无论你是企业对消费者公司的决策者、政策制定者、顾问,还是公共机构的项目主管,你都可能已经从第一手资料中了解到,你的洞察力和为他们提供信息的数据一样好。因此,拥有补充传统数据集的替代数据源对于丰富您对决策之旅的见解极其重要。

这是关于数据分析和可视化领域的系列文章的第一篇。在接下来的文章中,我将进一步定义数据源,强调不同的用例,处理相关的风险,并触及数据分析和可视化中常用工具的各个方面。

[1]“替代数据。是什么,谁用,为什么有意思?”福布斯,2019 年 12 月 12 日,https://www . Forbes . com/sites/Forbes insights/2019/12/12/alternative-data-what-is-it-who-uses-it-and-why-it-is-interest/# 5024058 c 6123。

为什么你需要测试机器学习中的测试

原文:https://towardsdatascience.com/why-you-need-to-test-the-tests-in-machine-learning-fed99de5e1c7?source=collection_archive---------52-----------------------

即使您小心翼翼地分离训练和测试数据集,还有什么可能出错

国家癌症研究所Unsplash 上拍摄的照片

如果你曾经与机器学习产品进行过交互,你很可能知道将模型的训练和测试分开的重要性,以避免过度拟合,并确保模型能够在看不见的数据上很好地推广。

培训与测试分离的背景

对于那些在这个领域的人来说,如今对培训和测试的关注似乎是显而易见的,但并不总是如此。在数据科学出现之前,它的祖先统计学还没有完全接受这个概念。

为什么?

在机器学习和大数据出现之前,模型比较简单,而现在更多的数据已经允许我们建立更复杂的模型。正如我们所知,当模型复杂性增加时,过度拟合会变得越来越成问题。如果你运行的是线性回归,你就不用担心过度拟合。此外,简单模型的模型可解释性通常更容易,一些过度拟合可以通过细致的手工工作来补偿。

因此,分离训练和测试数据集更多地是一种需要,而不是最佳实践。

培训 vs 测试分离就够了吗?

假设你是一个机器学习产品的商业消费者或产品经理。您的数据科学团队开发了一种新的 ML 产品,采用黄金标准的方法来分离训练集和测试集。

您需要决定是否将产品投入生产。但是你要对它的性能有 100%的把握,才能做最后的决定。

因此,您要求数据科学团队向您展示模型和数据。他们向您展示了完整的数据集,以及它是如何划分为 70%的训练和 30%的测试子集的,并发誓最终的模型纯粹是在训练数据集上训练的,其性能指标仅来自测试数据集。

你现在放心了。不会出错的。对吗?

嗯,有三件常见的事情仍然可能出错。

1.测试数据集以前已经使用过

理论上,这个规则看起来很简单:不到最后阶段,永远不要使用测试数据集。然而在实践中,100%地尊重这一点是非常罕见的,其影响可以从小的高估到非常严重的错误。

为了验证这一点,需要问两个问题。

在哪个数据集上执行了初始数据探索?

数据科学的第一部分(通常更耗时)是数据探索和数据争论。这是在划分训练和测试数据集中的数据之前还是之后执行的?

从纯理论的角度来看,在模型评估的最后一步之前,你不应该以任何方式看到测试数据。短于这个时间的任何东西都可能让你对自己的预测能力过于自信。

然而,这在实践中往往不那么容易,尤其是如果您的数据来自业务环境。如果作为数据探索的一部分,您需要评估来自手动或外部来源的缺失数据并决定如何处理这些数据,该怎么办?(例如,是填充还是删除缺失的行或列)您在查看完整数据集时做出这些决定的事实偏离了理想的场景,但在实践中这通常是无法避免的。

如果在这个阶段您已经执行了特征选择和工程,这一点会变得特别重要。如果您根据要素与其在整个数据集中的目标变量的相关性来选择要素,这肯定会影响概化误差。

在测试数据集上评估了多少不同的模型?

测试集失去其纯粹状态的最常见方式是当您在其上测试多个模型时。这有时可能是恶意的,但是在我的经验中,大多数时候是糟糕的计划迭代的结果。

典型案例:您的数据科学团队选择并构建了一个模型,在某种程度上,他们确信它是最终的,因此他们在测试集上测试它以评估它的性能。在此阶段,与业务部门讨论模型,给出反馈并建议尝试合并另一个功能,或者降低某些变量的重要性。这样的迭代做两到三次可能不会被注意到,但是做的越多,问题就越大。

一个警告:如果你使用 交叉验证 呢?当您需要调整超参数时,通常最佳做法是进一步分割训练和验证集中的“训练”数据。如果您的数据有限,交叉验证可以帮助您将相同的子集用于训练和验证目的。然而,交叉验证不应该用来替代测试集,否则前面提到的问题仍然存在。

2.测试数据包含某种形式的数据泄漏

数据泄漏是指您的模型使用了在生产中不可用的数据。这可能会通过欺骗错误地增加模型性能指标。

发现数据泄露问题并不总是那么容易。实践中有两种常见的方式:

  • 只有在必须做出预测的时刻之后,数据才是可用的
  • 该数据在当时理论上是可用的,但在技术上对预测系统是不可用的

我在工作环境中遇到的一个场景是试图预测酒店预订的取消。预订酒店时,特定数据在当时可用(例如,关于客户、旅行、预订季节性),但其他数据仅在预订和计划入住日期之间的时间跨度内收集。

问题是,有些数据可能在数据仓库的相同表中被跟踪,或者可能在不断更新的相同字段中被跟踪。如果没有这些字段的历史视图,这些字段将无法用于模型训练目的。

最极端的情况是,一些字段可能只有在取消被实际处理时才被填充。例如,我们可能只在发送取消请求时收集某些客户信息。如果我们尝试使用这些字段来训练我们的模型,我们将获得取消结果的完美预测!

3.你仍然不能测试未来的数据

现在,让我们假设您已经非常小心地使用了您的测试数据集,并且避免了任何数据泄漏。

您还能相信经过测试的车型性能会在生产中得到体现吗?

好吧,至少你的泛化性能仍然是参考过去的数据,最有可能的是,你将使用你的模型来预测未来的现象。

每个模型的基本潜在假设是,在一定限度内,你相信你试图预测的现象在未来不会变化太快,否则你无法从过去的数据中进行推断。

这个问题有多大很难讲,当然很大程度上取决于应用程序。试图对此建模也可能变得棘手,可能需要结合对未来预期的假设(如贝叶斯模型),这通常不是微不足道的。

根据我在商业环境中的经验,这一点经常被忽视。然而,在后 COVID 时代,这种情况可能会改变。想想训练一个模型来预测酒店取消,就在 COVID 爆发之前(像我一样!).

当生活在 COVID 之后慢慢回归正常时,如果不进行某种调整,相信过去的数据来预测未来将变得越来越困难。但是这可能是另一篇文章的主题!

为什么需要像对待数据一样对待人工智能模型

原文:https://towardsdatascience.com/why-you-need-to-treat-ai-models-like-data-e34563c4e3e4?source=collection_archive---------61-----------------------

为什么像对待数据一样对待模型是一种非常战略性的方法

亚历山大·辛恩在 Unsplash 上的照片

这里有一个非常抽象的问题——人工智能或数据科学模型看起来像什么?我们在日常生活中都在使用数据科学模型。大多数不是数据科学家的人都经历过数据科学模型,但从未见过。所以,让我来揭示这个秘密。可能看起来很吓人。这是数据科学模型的样子

这是一个加密成字母数字字符的数学公式。但是不要搞错,这个看起来很奇怪的东西是让你的企业成功并击败竞争对手的秘密武器。它可以通过一些先进的高级分析来帮助您执行业务运营。各种业务案例,如增加收入的产品推荐、防止收入损失的欺诈检测、保护资产价值的资产故障预测,都有预测模型支持

因为模型在创造商业价值中是如此重要,我们需要小心处理它们。让我们看看处理这些模型的不同方式

最糟糕的护理—留在笔记本电脑上的模型:

最糟糕的是,这些模型被留在笔记本电脑上,通常是在最初创建的地方。想象一下,把你的企业秘制酱当成一个被遗弃在孤岛上的人。这种情况多少有点可比性。

照片由约翰·苏Unsplash 拍摄

不幸的是,这种情况发生了很多次。数据科学家使用笔记本电脑或个人电脑上的分析工具创建的模型仍然存在。大量的努力和脑力被用来创建它们,它们包含了企业成功的关键因素。然而,由于它们保留在本地机器上,并且从未被操作,这是对如此美丽的数据科学作品可能发生的最糟糕的事情

变得更好——将模型放入容器

更好的方法是将模型放在 docker 容器中。通过这种方式,你离以更好、更合理的方式对待模型更近了一步。您现在将模型放入容器中,这意味着它们在容器中是安全和隔离的,并且更易于操作。

威廉·费尔克在 Unsplash 上的照片

虽然模型在一个安全的容器中,但它仍然是孤立的。这意味着,如果您想要使用该模型,您需要将数据发送到 docker 容器,并使用 API 来获取结果。这意味着数据移动增加了,这可能不是所有业务运营都希望出现的情况

战略方法——像对待数据一样对待模型

近来,数据已经成为任何公司的宝贵资产。许多技术进步都是将数据作为一种宝贵的资产来管理,例如,数据仓库和大数据存储平台都围绕着保持数据的安全、可管理并使其易于使用来为企业带来好处

因此,如果我们开始将模型视为数据,我们就可以利用数据管理的所有优势,并将其应用于模型。通过像对待数据一样对待模型,我们确保模型也会像数据一样对业务运营具有战略意义。

以下几点说明了为什么将模型视为数据是一个有趣的命题

模型是由数据构成的

模型不是凭空产生的,也不是用魔杖创造的。它们是通过将算法应用于数据而创建的。你可以把它看作是数据的数学投影。因此,将它们视为数据的一部分是有意义的。

模型结果需要数据来理解它们

假设你的模型在未来几天提醒你一个关键的资产故障。为了能够采取任何行动,您需要了解关于该资产的更多细节,例如其位置和价值。您还需要评估是否有必要进行紧急维修或冒险等待下一次定期维护。

正如你现在意识到的,模型的输出只是一个警报触发器。真正的行动需要完成,而将模型输出转换成有形的东西需要关于有问题的资产的数据。因此,如果您将您的模型作为数据的一部分,即作为表中的数据存储在系统中,您可以轻松地将模型的输出与其他数据集成,这使模型输出变得有意义,也使其更具可操作性

管理数百万个模型

在《预测机器》(predictionmachines.ai)一书中,作者写道,人工智能预测变得越来越便宜,这意味着我们将更多地使用它。这也意味着会有越来越多的车型。

预测机器. ai

需要数百万模型的用例不是科幻小说。准确的零售库存预测需要每个商店中每种产品的模型。欺诈检测需要对正常的客户行为进行建模,以便预测任何偏离正常行为的情况。由于客户 X 的正常行为可能不同于客户 Y 的正常行为,您将需要与客户一样多的模型。

随着企业管理数以百万计的产品和数以百万计的客户,突然之间拥有数以百万计的模型的需求变得不可避免。

在这种情况下,最好将模型视为数据,并将所有大数据管理原则也应用于模型

模型是您企业的知识产权——保护好它们

模型是由数据构成的,它们编码了您的企业如何工作。例如,欺诈检测模型对您打算如何检测欺诈进行编码。这是贵公司的知识产权,因此应该妥善管理和保管。

想象一下,欺诈检测模型被盗并被解密,甚至更糟的是,解密后的模型被放在互联网上,让每个人都知道你是如何检测欺诈的。突然之间,您将很容易受到欺诈攻击。

然而,管理像数据这样的模型并将数据的所有安全原则应用于模型将有助于使您的知识产权更加安全。

管理模型的经济性

开发一个模型是有成本的,管理你的模型并保持其可操作性也是有成本的。如果你投资专门的系统来管理模型,你就增加了模型的成本。所以你需要仔细考虑创建和管理一个模型的总成本。

正如好的模型来自好的和集成的数据,如果你有一些好的模型,你已经有了一个数据管理平台。因此,如果您还利用数据管理平台来管理您的模型,您将保持模型的总体成本较低。从长远来看,这有助于保持模型的经济性和盈利性

现在,您已经看到了为什么管理像数据这样的模型是有意义的,让我简要地描述一下其中的内容。这些是你想把模型当作数据的一些构件

模型库 —这是一个存储模型数据的地方。通常,它是一个具有专门字段的表,用于保存模型加密定义

模型元数据 —模型看起来很奇怪,人类很难读懂。你需要某种元数据来描述这个模型是关于什么的。这就是使用模型元数据的地方。它包含诸如模型的用途、使用哪种算法以及关于模型准确性的信息

模型传承——像数据一样,你也需要知道模型是如何构建的,以及它是如何被使用的。您需要获取用于构建模型的数据信息。这在可追溯性或审计情况下非常有用

设计模式将外部模型引入数据库——模型就像数据。其中大多数都源自数据管理平台之外。如果您必须像管理数据一样管理模型,您需要将它们放入数据库中。这需要设计模式,设计模式描述了将外部模型引入数据库的不同方式

总之,如果你像对待数据一样对待模型,它们将会像有价值的资产一样被管理。

额外资源

网站(全球资讯网的主机站)

你可以访问我的网站进行零编码分析。https://experiencedatascience.com

订阅每当我发布一个新故事时,请随时关注。

[## 每当 Pranay Dave 发表文章时,您都会收到电子邮件。

每当 Pranay Dave 发表文章时,您都会收到电子邮件。注册后,如果您还没有,您将创建一个中型帐户…

pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)

你也可以通过我的推荐链接加入 Medium。

[## 通过我的推荐链接加入 Medium—Pranay Dave

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

pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)

Youtube 频道
这里是我的 Youtube 频道
https://www.youtube.com/c/DataScienceDemonstrated的链接

为什么你应该成为一名数据科学家

原文:https://towardsdatascience.com/why-you-should-be-a-data-scientist-86446b1c5c56?source=collection_archive---------46-----------------------

为什么数据科学是世界上最好的工作领域的动机。

本·怀特在 Unsplash 上的照片

如果您对数据科学以及它是否适合您感到好奇,您会喜欢这篇文章。或者,如果你已经是一名数据科学家,只是想听到你的职业充满赞美和迷人的话语。

数据科学是一个令人敬畏的工作领域,因为:

这就像用藏宝图寻宝一样。

是啊。说真的!
从事数据科学时,你会觉得自己像一名侦探或探险家,在寻找线索和提示。对我来说,这是非常令人兴奋的。你知道你面前的数据包含有用的信息,而这取决于你去发现它是什么。以来自 Kaggle 的介绍性 Titanic 数据集为例,然后考虑以下适合您的情况的场景(在移动设备上,您可能会滚动一点):

  • 如果你还没有处理过泰坦尼克号的数据集:

数据集包含了泰坦尼克号上可怜灵魂的数据。每位乘客都有关于性别、票价、年龄、父母和兄弟姐妹数量以及乘客是否幸存的数据。乍一看这些数据,很难准确地认识到哪些因素将决定一名乘客是否幸存,作为一名数据科学家,这就是探索步骤发生的地方。 现在开始激动人心了!

你现在可以扭曲和翻转数据,颠倒它,尝试不同的组合,用你的常识逻辑地和批判性地思考它。做所有这些事情,就像一个侦探试图解决一个犯罪,你将能够理解这些数据并获得有价值的信息。

  • 如果你已经使用过泰坦尼克号数据集:

试着回忆一下当你第一次意识到一个只区分男性和女性乘客的模型的准确率接近 77%时的感觉。你对此感到惊讶吗?有没有让你去:什么?”

又或许你只是淡然一笑,摇摇头,心想 “当然。他们当然会先救妇女”。

无论如何,几乎不管这种认识在你心中引发了什么样的反应,我确信它给了你一种积极的感觉。在我看来,这就是数据科学有趣和令人兴奋的地方。

你可以和世界上任何话题一起工作

你是一个好奇的人!我敢说这是因为你正在阅读《媒介》,从定义上来说,它把你归类为渴望学习和探索的人。数据科学是像你我这样好奇的人的完美领域。作为一名数据科学家,你有机会了解世界的各个角落。我一生中的大部分时间都想成为一名心理学家,因为我发现我们人类的行为方式很有趣,但我也认为社会科学和政治是非常有趣的话题。
事实上,我对这个世界上的一切都很好奇,除了数据科学,没有其他职业能让你接触这个世界提供的一切。这是一个非常好的机会。

某一周,你可能正在处理一家大公司的数据。你试图预测什么样的顾客应该得到更多的爱,以保持他们是快乐的顾客。
下一周,你可能会处理海洋中海豚的数据、体育统计数据、癌症患者或猫狗的图像识别。
你现在明白了。我只是想让你想想,作为一名数据科学家,你有多幸运,你可以洞察任何事情。这使得数据科学对我来说非常有价值。

逻辑思维、编码和工程

你喜欢通过对手头的信息进行逻辑思考来解决谜题和谜语吗?
如果你的答案是肯定的,那么数据科学可能非常适合你。

也许你已经熟悉了编程和代码,幸运的是数据科学也包括这些!

我喜欢编码。尤其是它的结构和逻辑。每次你做一个数据科学项目,你就可以构建一个新的系统。首先导入您肯定需要的基本库:例如 Pandas、NumPy 和 seaborn。然后,你对数据进行预处理,并将其分配给不同的变量,你将数据可视化,做一些调整,当一切准备就绪时,你就可以训练一个模型并测试它的性能。

如果表现不佳,你就咬紧牙关

并加以改进。

还有…

如果表现良好,你就会微笑

并加以改进。

这整个工作过程可以建立为一个组织良好的系统。这对我们逻辑思考者来说确实是令人愉快的。

可以远程工作的好工作

照片由埃里佐·迪亚斯Unsplash 上拍摄

作为一名数据科学家,你可以获得相当不错的薪水。当然,具体数量因国家和你的专业水平而异。想知道在你居住的地方作为一名数据科学家你能挣多少钱,试着谷歌一下你所在的地区和数据科学的薪水。

自由职业也是一个很好的选择。作为一名数据科学家,你有机会与许多国家的许多不同公司合作,你可以被派驻到世界上任何你想去的地方。只要你有一台电脑和互联网连接。

我并不是说做自由职业者很容易,我也要指出,在一家你会错过的公司任职有很多好处。刚开始做自由职业者时,你可能会经历一段艰难的时期,因为你必须向潜在的客户证明你值得他们的金钱和兴趣。
话虽如此,但你有选择、有机会、有自由来决定你想在哪里工作以及如何工作,这仍然令人惊讶。
这种自由对我来说意义重大!

你可以做出真正的改变

你想改变世界吗?
你想帮助治愈世界上像新冠肺炎这样的危险疾病?
你想为公司和真实的人提供价值?

你当然行!

这个世界需要更多像你这样的人。因为我们需要让地球成为每个人更好的居住地。这个世界有很多问题,我们有责任为一个更光明的未来而努力!如果不是为了我们自己,那么至少是为了子孙后代。

作为一名数据科学家,您可以参与做出必要的改变!
数据科学已被用于制作模型,帮助医生更早发现癌症肿瘤。它被用来更好地理解像新冠肺炎病毒是如何传播的。它允许我们制造自动驾驶汽车和许多其他很酷的东西。可能性是无限的!你可以有所作为。

数据科学在很多方面都充满乐趣、挑战和回报。

我希望这篇文章能启发您去研究数据科学领域。或者,如果你已经是一名数据科学家,那么你对数据科学的迷恋现在会更加强烈。

坚持学习!
—雅各布·托夫特加德·拉斯姆森

为什么应该使用 Python 分析营销活动

原文:https://towardsdatascience.com/why-you-should-be-analyzing-your-marketing-campaigns-with-python-453f3a3528e7?source=collection_archive---------17-----------------------

照片由威龙 AUnsplash 上拍摄

像大多数小孩一样,我最喜欢的生日游戏之一是 piata。我会急切地等待轮到我,在我被蒙住眼睛的时候露出最灿烂的笑容,手里拿着球棒走上前去,疯狂地挥棒打开一边,释放里面储存的所有美丽的糖果。显然,蒙着眼睛试图击中目标被证明是一项几乎不可能完成的任务,这令人难以置信地沮丧,因为你知道肯定有东西藏在那个皮囊里。

试图在没有数据的情况下建立一个成功的营销活动,就相当于蒙住眼睛时希望击中目标。不幸的是,从事营销工作常常会有这种感觉。许多营销团队努力获得足够的分析师资源,以成功采用数据驱动的方法开展增长型营销活动:识别用户群、发现增长机会、开发流失和保留预测模型,并最终设计和分析绩效&影响。如果没有数据,这些活动产生的任何影响都将是纯粹的运气。

我不喜欢蒙着眼睛做手术。我相信数据,你也应该相信。

于是我投入了时间和精力,自己去学习如何挖掘和分析营销数据。作为一名能够进行深入、有意义的数据分析的成长型营销人员,我能够识别营销和增长机会,设计快速实验,及时分析结果,并根据实验结果提出其他营销活动想法,而无需依赖数据科学家或分析师。

这并不容易。我花了将近两年的时间精通 SQL、Python 和统计学,达到了能够正确分析和解释增长型营销数据的水平。作为一名营销人员,达到这种水平的分析能力让我大开眼界,现在我已经达到了这一水平,我想帮助其他营销人员也摘掉眼罩。

事实是,你不必成为数据科学家来有效地分析营销活动,但是你需要精通统计学(尤其是频率学家)来设计和解释实验。如果你刚刚开始,我建议你先学习统计学的入门课程。如果您已经精通基础统计学,那么投资学习基本的 Python 函数,这将有助于您更高效、更深入地分析营销活动。

营销活动最常见的实验形式是 A/B 测试,也称为“假设测试”。虽然 Mixpanel 或 Amplitude 等程序提供了一些用于分析活动绩效的“现成”解决方案,但即使是在最基础的层面上使用 Python,也能让您探索数据中不同部分之间更复杂的关系,识别可能的错误或问题,并通过自动化节省时间。

让我们更详细地了解一下如何开始部署 Python 进行营销分析:

简化您的探索性数据分析(EDA)

每个分析都是从了解你的数据开始的。这包括(但不限于):了解数据的结构化方式,删除不需要的列,解决空值问题,运行汇总统计并通过创建段或组来探索可能的关系,最后通过绘制数据进行可视化探索。

由于您将利用的大多数功能都包含在您进行的每个 EDA 中,您可以创建一个模板,或者使用我在这里创建的的模板,以使探索您的数据变得简单而快速。

发现数据中的关系

每个营销活动都有特定的目标,大多数活动都将关注转化率指标。假设您正在发送一封电子邮件,让用户知道您的产品有限时折扣。为了正确分析您的活动的影响,您需要定义转化率指标,例如兑换了电子邮件目标折扣的用户的转化率,以及兑换折扣后继续使用该产品的用户的转化率。

你的活动可能会使一些用户比其他人更容易转化,所以你需要对不同的人群进行重复分析,以确定影响的差异。

使用 Python,您可以定义一个循环,该循环遍历您的人口的不同部分,并计算每个部分的转换率。您的细分可以是年龄组、参与度或任何其他感兴趣的细分。Python 允许你在更精细的层次上快速探索转化,这是每个成功的营销活动所需要的。如果没有 Python,您会发现自己要花费大量时间重复类似的分析。

现在让我们把这些原则付诸实践。

步骤 1:定义转换率和保留率的公式

转换率的计算方法是转换的用户总数除以目标用户总数。在本例中,我们将假设数据已经清除了空值,并进行组织,以便标记每个用户,如果他们是活动中的目标,如果他们在活动后转换,和/或如果他们在活动后被保留。

转化率和保留率计算示例(图片由作者提供)

对您的数据运行这些公式将会得出总体转化率和保留率。如果你是作为实验的一部分进行这种分析,你应该将你的结果与对照进行比较,或者将结果与活动设计中定义的其他基准进行比较。

步骤 2:使用自动化功能加速您的分析

一旦您对您的营销活动表现有了一个总体的了解,您将想要更深入地了解并发现在整个营销活动期间您的人群的子群体之间的表现差异,以及比较您的人群的某些特征。

这就是使用 Python 可以真正加快分析速度的地方。使用自定义函数,您可以分析您的群体中任何所需子群体的转化率和保留率,例如不同的语言、服务日期或您的目标群体的任何其他相关特征。

首先,创建接受任何数据集和列的自定义函数,并返回每个段的转换率和保留率。您可以通过使用“分组依据”功能来实现这一点。然后,您可以像在步骤 1 中那样计算转化率和保留率,并将结果作为新的数据帧返回。请注意,您可能需要首先拆分结果。您的函数应该类似于以下内容:

自定义转化率和保留率函数示例(图片由作者提供)

虽然您可以将这两个函数合并成一个函数,但我通常更喜欢将它们分开——您可能希望探索影响每个函数特定性能的不同特性。例如,在某些情况下,您可能会发现某些群体的转换率较低,但他们的保留率较高,您需要进一步探索可能分别影响每个比率的功能。

步骤 3: 使用自定义绘图功能来检测关系,并识别数据中可能的不一致

使用表格格式来探究不同功能和细分市场的影响可能会让人感到力不从心。使用绘图功能直观地(快速地)检测影响整体结果的波动和潜在关系通常更容易。您可以定义自定义绘图函数,以节省时间并简化调试。

自定义绘图功能示例(图片由作者提供)

数据波动可能有多种原因。在某些情况下,您可能会发现用户在一周的某些天或一天中的某些时间进行不同的转换。在其他情况下,您可能会注意到某些语言的表现差异,这可能表明与活动翻译相关的问题,以及活动是否以正确的语言提供给用户。你甚至可以确定需要使用不同类型的视觉效果、颜色或触发器,以便在不同的市场更好地定位活动。

深入数据并解决不一致可能需要更高级的编码,这超出了本文的范围。我将在以后的另一篇文章中探讨如何处理这些问题。与此同时,如果您发现数据中有任何可能的不一致,我建议您咨询您组织内的分析师。当我建立我的分析技能时,我发现来自我的分析师同行的输入是绝对无价的。

识别重要性和提升

当你开始发现你的目标人群中的子群体的关系和转换率时,你需要计算提升率——这将使你了解你的活动实际上增加了转换率。如果你以假设检验(也称为 A/B 检验)的形式设计你的活动,你首先需要将数据分成相关的对照组和治疗组,然后分别计算每组的转化率。在此基础上,您将计算治疗组转换率和对照转换率之间的差值,除以对照转换率。

升力计算公式(图片由作者提供)

使用 Python,我们可以为此定义一个函数:

自定义升力计算函数的示例(图片由作者提供)

最后,如果不理解它们的统计意义,你所揭示的转化率和保留率以及提升将毫无意义。要做到这一点,你需要进行 T 检验。T 检验有几种类型,取决于你的实验和活动的设计。在这种情况下,我们来看一个双样本 T 检验计算。T 检验将为我们提供一个 T 统计量和一个 P 值,它将决定得到一个至少和你最终得到的结果一样极端的结果的可能性。也就是说,这个活动的结果是随机的结果,还是这个活动确实有影响力?

一般来说,在 95%的显著性水平上,至少 1.96 的 T 统计被认为是统计学显著的。我们的 P 值需要小于 0.05 才能认为我们的结果具有统计学意义。

使用 SciPy 库时,在 Python 中运行 T-test 实际上非常简单。它应该类似于以下内容:

# t-tetst for two independent samples
from scipy.stats import ttest_indt= ttest_ind(control,treatment)print (t)

为了最准确地了解您的宣传活动取得成功的群体,重要的是要估计提升,以及这些结果在您的目标人群的子群体和人口统计数据中是否具有统计显著性。未能揭示占目标人群的子群的提升和统计意义,可能会导致对您的活动的整体影响的错误结论。

如果你想了解更多关于使用 python 进行假设检验,以及分析 lift 和显著性水平的信息,你可以在我的文章“使用 Python 设计 A/B 测试的成长型营销人员指南”中了解更多。

总而言之

虽然许多营销团队可能缺乏足够的分析师资源,但每个团队仍然可以采取更加数据驱动的营销方法。营销人员,特别是那些专注于增长型营销的营销人员,可以通过提高他们在统计和编码语言(如 Python)方面的熟练程度来开发更有意义的活动并正确分析其影响,从而大大受益。

在这篇文章中,我们介绍了使用 Python 可以如何帮助你:(1)快速发现影响产品使用的数据关系,(2)加快对每个活动的分析,这将允许你进行更多的试验,以及(3)优化你的活动,以提高转化率和保留率。

花时间学习成为最好的成长型营销者所需的工具。你会发现奖励甚至比那块旧皮纳塔糖还要好。

图片由拍摄经由pixabay.com

为什么你应该谈论可解释的机器学习

原文:https://towardsdatascience.com/why-you-should-be-talking-about-explainable-machine-learning-eb9430d11312?source=collection_archive---------68-----------------------

随着我们对机器学习的依赖增加,我们对它的理解也必须增加。

艾莉娜·格鲁布尼亚克在 Unsplash 上的照片

那么问题出在哪里?

简而言之:大多数机器学习(ML)模型都没有得到很好的理解,随着经济越来越依赖 ML 结果,人工智能驱动的技术中预测不佳和系统性歧视的风险也在增加。

长回答:

众所周知,几乎所有的大中型公司都是在数据的基础上做出决策的。大多数公司在某种程度上直接(通过内部开发)或间接(使用第三方软件)利用人工智能。我们现在已经到了“人工智能”不再是一个时髦词的地步——大多数公司对它的使用只是假设。

然而,所有人工智能的根源在于机器学习。传统上,机器学习模型是“黑匣子”,数据输入其中,预测出来,而开发人员不知道如何或为什么。一个模型的准确性足以让人相信它是可信的。

“随着 ML 现已内置于大多数应用程序中,数据驱动的系统性歧视和不公平预测实践的风险达到了前所未有的高度。”

考虑一笔因种族、性别、宗教或性取向而被拒绝的房屋贷款。这样的场景虽然不公平也很荒谬,但并不少见。类似的例子在几乎每个行业都很普遍——想象一下这种歧视在医疗保健、银行和保险等行业的影响!幸运的是,这种情况通常不是由恶意意图引起的,而是由发展中的数据科学家遗漏的有偏见的数据引起的。有了正确的技术和正确的应用,我们就可以告别歧视性的技术,迎来一个公平、没有偏见的 ML 驱动的世界。

进入可解释的机器学习

随着世界对 ML 的依赖越来越深,我们对预测是如何以及为什么在逐个模型的基础上产生的理解必须成熟。

可解释机器学习(EML)是下一代机器学习,它为 ML 模型提供可解释性和可解释性。正是这种技术将极大地降低有偏见和歧视性的机器学习的风险,并帮助组织和经济体做出更好的决策和更有效地运营。

那么我所说的可解释性和可解释性是什么意思呢?这两个术语经常(并且错误地)互换使用,但是在 ML 评估中,有几个关键的区别。

可解释性

可解释性用人类可以理解的语言回答了模型内部机制背后的“是什么”和“为什么”,带来了几个有价值的好处:

  • 非技术领域专家对模型功能的理解
  • 预测误差的发现
  • 识别以前未见过的概念(给定观察到的事件,可能会发生什么未观察到的事件)
  • 更好地理解何时存在不确定性、偏见或不公平

可解释性

可解释性回答了模型如何在不了解其内部机制的情况下获得给定的输出,有助于揭示数据科学家经常忽略的关键问题的答案:

  • 如果你改变特定的输入参数,会导致相同的、更好的还是更坏的结果吗?
  • 如果情况发生变化,事件还会发生吗?

“可解释的机器学习有效地充当了翻译器,允许其用户理解甚至改变结果。”

如果你曾经作为数据科学家工作过,或者与数据科学家一起工作过,你几乎肯定会思考这样一个问题:“为什么模型会做出这样的预测?”或者“我们能做什么来改变这个预测的结果?”。根据我自己的经验,能够清楚而自信地回答这些问题与微调模型的超参数一样重要,如果不是更关键的话。为什么?有几个原因。

EML 带来了什么

1。模型评估领域的专业知识

优秀的模型在开发时会考虑统计技能、计算机科学专业知识和特定于手头问题的领域知识的组合(你们都看过经典的维恩图)。因此,有效的模型在评估时也应该使用这三个领域。EML 邀请技术含量较低的团队成员加入到模型评估和解释的对话中——到目前为止,这一直是纯粹的统计学问题。随着这些额外的大脑加入到等式中,领域专业知识的透镜被引入到 ML 评估工具包中。

2。影响结果

如果一个预测是不利的,如果你不明白为什么它是不利的,你怎么知道如何改变结果?假设你开发了一个近乎完美的模型,能够以 98%的准确率预测客户流失(无论你的客户是否会离开)。您将您的预测传达给客户团队,他们注意到如果您不采取任何行动,您的最高价值客户几乎肯定会离开。如果你不知道他们为什么可能会离开,这有什么用?你不是应该能知道是哪些变量导致了这个预测吗?这是你能控制的吗?

“EML 不仅阐明了为什么我们可以期待某些结果,还让我们了解这些结果是如何受到影响的。”

3。高管买入

如果你不能简单地解释或证明你的预测,决策者为什么要相信你的预测呢?当一位拥有 20 年行业经验的高管质疑一项违背其直觉的预测时,他不太可能接受“该模型在验证数据上的准确率达到 90%,因此你可以相信它”作为答案。能够用他们的语言直观地证明和解释为什么一个模型达到了一个特定的结果,这是高管买入的关键。

4。公民数据科学家的崛起

加上自动机器学习(AutoML),EML 允许技术含量较低的人进行准确、无偏见和歧视的日常机器学习任务。通过消除日常机器学习任务对高技术数据科学家的需求,EML 正在推动一个“公民数据科学家”的新时代,并允许技术专家专注于更复杂的问题、行动和结果。

下一代

传统上,数据科学项目主要围绕收集正确的数据、清理和设计正确的功能,以及选择和调整正确的模型。下一代公平、自动化和可解释的机器学习才刚刚开始。

EML 正在通过将技术含量较低的工人与复杂的 ML 模型联系起来,并将数据劳动力市场从能够构建 ML 模型的人转移到能够理解它们、解释它们并采取行动的人,来增强公民数据科学家的能力。有了它,我们可以创造一个由人工智能驱动的世界,这个世界是公平的,没有偏见和歧视。

为什么应该使用 Pandas 数据框架进行关于图像分类问题的 Keras 培训

原文:https://towardsdatascience.com/why-you-should-be-using-pandas-dataframes-for-keras-trainings-on-image-classification-problems-db220134cbc6?source=collection_archive---------51-----------------------

停止使用 flow_from_directory,改用 flow_from_dataframe。

正如我在之前的文章中看到的,缺乏组织的研究项目可能会很艰巨。周围有如此多的资源,有时会减慢研究的进程。

在这篇文章中,我将关注由图像组成的数据集,尤其是那些用于图像分类问题的数据集。我们将看到在使用 Pandas 数据框架时,在这种数据集上启动 Keras 训练有哪些优势。

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

Keras 提供了一种在处理神经网络时使用大型数据集的方法:无论是在训练阶段还是评估阶段。这是 Keras 预处理模块,它有几个从磁盘加载数据并动态预处理数据的方法。最常见的方法是flow_from_directory(),这是一个非常简单的工作流程,因为你只需要将你的图像文件分成每个类的文件夹。生成器会将每个文件夹作为要训练的类。是的,这非常简单,但它涉及到必须开发耗时的脚本来为每个训练数据集版本将图像从一端复制或移动到另一端。

  • 但是,如果你决定为一个特定的实验做一些修改,比如把一个班分成两个班,那该怎么办呢?— 数据集版本化
  • 如果您想用来自两个或更多数据集的图像组成一个数据集,该怎么办?— 多个数据集的组合
  • 如果因为你的网络模型有两个输出,你想同时训练两个标签怎么办?— 多任务问题

我们将会看到如何使用熊猫图书馆来帮助缓解这些问题。

Keras 有一个生成器函数,使用 Pandas dataframe 从磁盘加载数据:flow_from_dataframe()。此数据帧必须有一列,您可以在其中为每个项目指定图像文件名。有了这个和directory参数,Keras 将按如下方式为每个图像文件构建路径:os.path.join(directory, <filename_column>) 此时,您可以忘记将文件组织在类的文件夹中的想法,取而代之的是,您可以将它们都放在同一个文件夹中。

下面的每一节都试图通过使用这个flow_from_dataframe()方法来回答前面三个问题中的一个。

数据集版本化

我在处理数据集时的工作流程是手动创建一个版本控制系统:每个版本都是我为特定实验所做的任何修改的结果:添加额外的数据、修改标签、修正等等。

这导致具有由数据帧更清楚地表示的不同数据集版本,而不是必须创建单独的文件夹,在该文件夹中用新的类结构复制图像。最重要的是,大文件(图像)仍然在同一个目录中。因此,您可以拥有由相同图像的不同组合组成的多个数据集版本(csv 文件)。

多个数据集的组合

正如我之前提到的,Keras 通过使用directory参数和文件名列组成了要读取的图像的路径。最新的必须有文件名,但它也可以包含子路径。Keras 将执行连接,而不询问是否只有文件名。这对于您在线下载的数据集来说非常强大,这些数据集具有特殊的结构,其中图像位于不同的子目录中。此外,通过这种方式,我们可以轻松地构建一个数据集版本,其中包含来自不同来源的图像,而不必将它们移动到同一个文件夹中。

让我们看一个例子:

假设数据集 1 和数据集 2 具有以下图像路径:

/media/datasets/dataset_1/train/image_1.png
/media/datasets/dataset_1/train/image_2.png/media/datasets/dataset_2/train/0289323/image_1.png
/media/datasets/dataset_2/train/3453453/image_1.png

数据集 1 具有所有图像都在同一目录下的结构: dataset_1/train/* 。但是,数据集 2 不同,它有子文件夹,图像文件名本身是重复的(“image_1.png”),所以我们需要将这个子文件夹添加到文件名列中。这是两个数据帧及其相应的 Keras 方法调用:

数据集 1(左)和数据集 2(右)的数据框

要创建一个合并的版本(数据集 3),我们只需要从两条路径变得不同的地方添加路径:“数据集 _ 1/”和“数据集 _ 2/”

包含不同来源文件的合并数据集示例

对于本例,我们必须将flow_from_dataframe()中的目录参数设置为公共路径,以便 Keras 能够组合适用于两个数据集的路径。

这里我建议创建一个文件夹,例如 dataset_3,用符号链接指向两个数据集:

~/datasets $ mkdir dataset_3
~/datasets $ cd dataset_3
~/datasets/dataset_3 $ ln -s ~/datasets/dataset_1/train dataset_1
~/datasets/dataset_3 $ ln -s ~/datasets/dataset_2/train dataset_2
~/datasets/dataset_3 $ ls -l
dataset_1 -> /home/sruiz/datasets/dataset_1/train
dataset_2 -> /home/sruiz/datasets/dataset_2/train

这只是出于组织的目的,因为两个数据集不同的基本路径将是: /home/datasets/dataset_3 ,而不是更一般的: /home/datasets。但是,如果数据集位于不同的位置,并且它们不共享任何基本路径,并且您不想移动它们,那么它也会非常有用。

多任务问题

在一个任务中,当训练一个多任务问题时,使用数据框架是不可协商的。这指的是可以为一个输入预测多个输出的网络模型:例如,如果一幅图像有一只猫或一只狗以及它的皮肤颜色。

对于这类问题,我们需要在训练步骤中为每个输入设置两个标签。因此,将文件分离到每个标签的文件夹中的方法,尽管也有可能,涉及到每个标签组合有一个文件夹。这可能会导致创建大量的文件夹。

一个数据框架的好处是,你可以有一个标签猫/狗的列和另一个皮肤颜色的列。将flow_from_dataframe()方法用于双输出网络时,您只需在y_col参数中指定标签在哪些列中:

感谢阅读。

塞尔吉奥·鲁伊斯(@塞尔楚)

[## 用概念组织和记录你的机器学习(或任何)研究项目

由于缺乏组织和文档,研究可能会很困难。

towardsdatascience.com](/organize-and-document-your-machine-learning-or-any-research-project-with-notion-623d52fae972)

作为一名数据科学家,你为什么应该建立自己的个人品牌

原文:https://towardsdatascience.com/why-you-should-build-your-personal-brand-as-a-data-scientist-c686bbc2b8ef?source=collection_archive---------29-----------------------

(来源)

当我刚开始从事数据科学时,在数据科学领域找工作时,我和其他人一样。

长话短说,我去了求职门户 , 投了几百份简历应聘各种数据科学家岗位,“希望”最好的

不出所料,大多数时候我都被拒绝了,到了一定程度,我的收件箱就塞满了电子邮件,比如:

感谢您申请 ___ 的数据科学家职位。不幸的是…

感谢您申请 ___ 的数据科学家职位。由于我们收到了大量的申请,我很抱歉地通知你…

我很沮丧,想知道这里出了什么问题。

我完全按照大学时代别人告诉我的去做。

“嘿,阿德蒙德,你需要取得好成绩,获得一些你所在行业的相关实习经验,润色你的简历,去工作门户网站申请工作,你就没事了。”

对不起…我不好。

最重要的是,我正面临着一段艰难的时期,甚至连一个面试的机会都没有。

🚀我人生的转折点

(来源)

但当我开始活跃在 LinkedIn 上,通过学习和分享数据科学社区时,出现了一个转折点

我从来没有意识到,作为一名数据科学家,我实际上是在打造自己的个人品牌。

从那以后,也有一些招聘人员/猎头和公司在找我,希望我能成为数据科学家。

更令人惊讶的是,机遇之门向我敞开了——说话写作商务 和工作岗位。

这些机会不仅帮助我发现了自己的潜力,走出了自己的舒适区,还将我的职业生涯,甚至生活带到了一个全新的水平,这是我以前认为不可能的。

现在,如果你问我,有没有一件事我希望在我的职业生涯中早点学会…

这将是建立我的个人品牌

在这篇文章结束时,我希望你能理解为什么作为一名数据科学家建立个人品牌如此重要,并希望能激励你开始采取行动!😄

让我们开始吧。

那么…什么是个人品牌?

如果你只是谷歌一下,个人品牌有很多定义。

但下面是我对个人品牌的理解。

P 个人品牌是关于做你自己——真实的自己,有你的信念、你自己的故事和经验,在你的领域展示专业知识和权威。

个人品牌不是仅仅为了打动招聘经理或雇主而伪造自己的品牌和经历。

你看。每个人都是独特的。每个人都有不同的视角、不同的心态和不同的信仰。

除了你自己,你不需要成为别人。个人品牌是关于你是谁,以及人们如何看待你,即使你不在那里。

建立个人品牌的最好方式就是做你自己。

你的价值观是什么?你的信仰和主张是什么?你为什么要这么做?你的动力是什么?

对我来说,我的使命是 让每个人都能接触到数据科学 以及使用数据赋予人们和企业清晰的洞察力。

这是我的信念,也是激励我的动力。你呢?

为什么苹果和耐克是世界上最成功的公司?

为什么苹果和耐克是世界上最成功的公司?

那是因为他们的 品牌和他们所信仰的 。句号。

🍎苹果公司相信有激情的人可以让世界变得更好。

✔️ 耐克表彰伟大的运动员,他们也表彰伟大的运动员。

苹果和耐克都很少谈论他们的产品,人们仍然在购买它们,因为人们喜欢他们的品牌,相信他们的愿景。

这与建立我们的个人品牌非常相似。当人们想到你时,他们会如何看待你?你的品牌和信念是吸引人们/公司的原因。

我们每个人都有自己的品牌,不管是有意还是无意。这就是为什么我们要有自我意识,在更深的层次上发现自己是很重要的。

为什么你现在应该作为一名数据科学家建立自己的个人品牌?

1.更多的工作机会

如果现在还不明显,建立个人品牌是在不久的将来获得工作机会的长期策略。

当你开始建立自己的个人品牌时,招聘人员/公司不会马上找你。

建立和赢得信任、信誉和关系需要时间。

但是一旦你在自己的领域建立了自己的个人品牌……相信我,随着你将自己定位为所在领域的权威(这里指的是数据科学),工作机会会逐渐向你走来。

你猜怎么着?你不再需要向不同的求职网站提交数百份——有时甚至数千份——简历,希望得到他们的回复。

2.与志同道合的人建立关系网

在建立个人品牌的过程中,你可能会利用社交媒体平台(LinkedIn、Medium 等)。)为他人提供内容和增加价值,让它为你说话。

因此,你也将有机会与志同道合的专业人士交流。

这意味着它允许你继续向他人学习,同时能够超越地域限制与他人分享你的激情和知识。

3.更多地了解自己

你看。谈论建立个人品牌很容易。

但是要真正理解你的价值观是什么,你相信什么…那是另一回事。

需要诚实、残酷和彻底的自我分析和自我认识才能在更深的层次上真正发现自己。

你会开始质疑自己所做的一切,并试图理解背后的原因。

这里的好消息是,你也将能够了解和发现更多关于你自己的东西来激励和推动你前进

4.激励和帮助他人

归根结底,建立个人品牌不是你一个人的事。

而是激励和帮助他人。

这是关于你如何用你的热情、专业知识和信念帮助他人。

能够帮助他人是我收到的最好礼物之一,因为帮助数据科学爱好者了解更多该领域的知识以及用数据科学解决方案帮助企业的成就感是无价的。

最后的想法

(来源)

感谢您的阅读。

我希望到现在为止,你已经理解了作为一名数据科学家建立个人品牌的重要性,并希望能激励你开始采取行动!😄

如果你认为数据科学是你的长期职业道路,那么在数据科学领域打造你的个人品牌就是你的长期战略,让你的职业生涯更上一层楼。

事实上,我最近创建并推出了一门在线课程— 数据科学家个人品牌工具包 —从头开始,指导你如何作为一名数据科学家建立个人品牌。

这些正是我用来在数据科学领域建立个人品牌的步骤、框架和策略,并最终获得大量工作和其他机会。看看就知道我什么意思了。

一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过我的网站LinkedIn 联系我。在那之前,下一篇文章再见!😄

关于作者

Admond Lee 目前是Staq的联合创始人/首席技术官,该平台是东南亚首屈一指的商业银行应用编程接口平台。

想要获得免费的每周数据科学和创业见解吗?

你可以在 LinkedInMediumTwitter脸书上和他联系。

[## 阿德蒙德·李

让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。

www.admondlee.com](https://www.admondlee.com/)

为什么您应该在下一个 API 项目中选择 Django 而不是 Flask

原文:https://towardsdatascience.com/why-you-should-choose-django-over-flask-for-your-next-api-project-81802dfcf088?source=collection_archive---------15-----------------------

Patrick 的博客—数据科学

解释为什么 Django 应该是你最喜欢的 python 后端框架

启动 Django 项目的终端命令。试试看!(图片来源:我自己的电脑。)

很多人都在使用 Django 或 Flask 中的一个,有些人甚至强烈建议使用其中一个框架来构建 REST API。几个月前我从弗拉斯克搬到了姜戈,我再也不会回去了。我想看看我是否能让其他人做出好的决定!

Django ORM 知道你的数据库的进出

如果您使用 Flask,您可能试图提供一些需要数据的功能,因此需要数据库。您可能从 SQLite 开始,因为将 Flask 配置到数据库看起来有点混乱或者至少很耗时,因为您可能依赖 SQLAlchemy 之类的 ORM 来管理您的数据库连接,除非您想耍流氓并使用 f 字符串编写 SQL 查询(祝您好运!).因为您是从 SQLite 开始的,所以在进行转换时,当您需要更专业的东西(如 MySQL 或 PostgreSQL)时,您会感到很困难。

使用 Django,您可以免费获得 SQL 连接。只需遵循文档就可以了,它会告诉你需要哪种数据库引擎,你是否需要 MySQL、PostgreSQL、MariaDB、Oracle,甚至玩具项目的 SQLite。引擎会为您管理连接。

你想要一个数据库表?如果你知道基本的 python 类,你就拥有了你所需要的一切!无需编写查询来创建您的表!指定一个从 django.db.models.Model 继承的类来定义数据库表,指定类属性来以一种非常可定制的方式定义所有可能的列类型,允许您使用一行程序功能进行跟踪,例如:

  • 整数字段、字符字段、文本字段、布尔字段、多项选择字段、浮点字段……对于 PostgreSQL,您甚至可以获得 JSONField。
  • 外键管理,以便您知道当相关模型被删除时,关系会发生什么(不再有死关系!)
  • 列定义重用:只需将字段构造为函数,并调用它们来定义新的模型列!
  • 模型继承通过 python 类继承以一种非常强大的方式进行管理(这里有一些陷阱,但是通过阅读好的文档,您可以避免所有的陷阱)。

您能想象通过使用 SQLAlchemy 来解决这些特性所解决的问题吗?就我个人而言,我认为这是浪费时间!

Django shell 是你的新朋友:一个关于 Django 经理的小故事

您负责公司的数据库,您正在开会,您的同事正在讨论一些与业务相关的话题。他们很恼火,因为他们还没有从业务分析部门得到他们的报告,他们只想在做出重要决定之前回答一个关于销售数据的非常具体的问题。

在那次会议中,你仍然穿着睡衣,你的相机关着,因为你还没有洗澡,但你知道如何找到这个问题的答案,因为你知道数据在哪里。您在终端中打开 VSCode,“python manage.py shell”并连接到 Django shell。在两行简短的代码中,您导入了包含订单的 Django 模型,并使用 django-pandas 作为模型的管理器,直接从模型中实例化了一个 dataframe,该管理器负责执行 SQL 查询、加载所有销售数据,并将所有数据转换为 dataframe。干净利落。您导入 matplotlib,对销售的 pandas 系列应用“hist”方法,并键入 plt.show()。你截图,在会上拍。在你的同事还没来得及想出该问谁之前,他们已经看到了全年的销售额。

你能想到 Flask & SQLAlchemy 有这样的设置吗?我不这么认为!

Django 管理器是一种强大的方式,不仅可以预先编写 SQL 查询,还可以以各种方式转换数据,帮助您随时理解数据,只需一个终端命令。当然,没有什么可以阻止您将这些命令放在 REST API 端点之后,以便将处理过的数据提供给最终用户!我即兴创作了这个情节,但是我可以让我的 Django 管理器运行任意的 python 代码,这样它甚至可以位于一个 API 端点之后,并且如果我愿意的话(如果这样的特性需要可重用的话),将数据或图像发送到 web 服务器。

别再和姜戈重复发明轮子了

如今,大多数 web 编程问题都已解决。这并不意味着,如果你试图建立一个技术栈,你不必实现这些问题的解决方案。在 Flask 中,实现取决于您!这意味着……大量的编码。您将最终编写代码来管理

  • 数据库查询(如上所述,还包括分页、缓存查询等。)
  • 认证系统
  • 端点管理(权限、资源、节流等。)
  • 设置配置
  • 序列化 SQL 数据和反序列化 HTTP 请求数据
  • 验证请求数据以避免损坏数据库
  • 等等等等。

在 Django 中,你不会通过写代码来解决这些问题。通过编写描述功能的配置,你挑选出已经实现的解决方案。这有一个很大的优势:你不需要解决已经解决的问题,你只需要从 Django 生态系统中挑选你的问题的解决方案。Django 非常清楚,如果有一个共同的问题,你需要一个解决方案,你需要一个维护和最新的解决方案,你可以足够灵活地配置它来满足你的需求,但不要太灵活,你可能会因为调整太多而遇到问题。以我的经验来看,每次我试图过多地调整 Django,要么是我在处理一个非常新的问题(在数据科学主题中可能会发生,但通常非常罕见),要么是我在最佳实践方面做错了什么,5 分钟后我就会被踢出局!

以有意义的方式组织你的代码

Django 有一个很棒的项目和应用系统来帮助组织和重用代码。有一个可重用 Django 应用的巨大生态系统,所以你可以向你的应用添加功能(认证, Django REST 框架用于将你的 Django 应用变成一个成熟的 API,表单 UI 组件用于 Django 模板,用 django-pandas 将你的数据库模型变成 pandas 数据框架,等等)。如果你自己想出了一个新的有用的功能,你也可以把你的 django 应用作为开源应用发布,让人们在他们的项目中重用它。很厉害!

用 Django 做你的后端,任何前端都放在它前面!

关于 Django 有一件小事要提一下:它有一个内置的前端框架,叫做 Django templates,但对于需要处理大量功能的网站来说,这确实是一个可怕的框架。当你看到 Django 网站时,你可以直观地看到网页本身的良好效果,但代码通常远远不够专业。我们说的是大型 HTML 文件和脚本标签,用于使用任何外部 JavaScript,这使得您的代码极难管理。React、Angular、Vue、Ember 等 JavaScript 前端框架解决了做前端的问题,这些框架都有一个共同点:它们都是用 JavaScript 编写的,因为浏览器是用 JavaScript 编写的,所以优化有很多好处。通过用 Python 和 Django 的 Jinja2 的等价物做事,许多已经作为开源库存在的功能不能在前端使用,必须在 Django 中重新发明,由于“我不是 JavaScript”的障碍,这通常不是一个好方法。

但是不用担心!以我的拙见,至少在未来 10 年内,前端将会而且应该用 JavaScript 来完成,因为这是浏览器所使用的,代码需要在浏览器中运行。所以你可以用美妙的 Django REST 框架把你的后端变成一个后端 API(这就是为什么它在一开始就对 Flask 有竞争力!)并在它前面附加任何你想要的前端。这就给了你任何你想要的选择,而且有很多选择,每一个都有它的优点和缺点!

我希望这篇文章激励你们中的一些人去尝试 Django。如果你有任何问题或者想和我分享你的 Django API 项目,请联系我;我很乐意在 LinkedIn/Medium 上联系!

为什么你应该考虑从事数据科学。

原文:https://towardsdatascience.com/why-you-should-consider-a-career-in-data-science-5f5468e516b6?source=collection_archive---------39-----------------------

如今,技术领域有如此多的选择,你为什么要考虑数据科学呢?

Unsplash 上由 Carlos Muza 拍摄的照片

“所有的数据都有它的美,但不是每个人都能看到。”
达米安明乐

数据科学炒作现在全世界都有。它已经存在了一段时间,但它的相关性仍然很高。人们说它是新兴技术的钻石。但这真的值得称赞吗?数据科学为其他技术提供了动力,推动未来技术的边界比我们想象的更远,催生了一个全新的领域,即商业智能,让人们意识到数据和数据收集的重要性,等等。在这个故事中,我将与您讨论是什么使数据科学成为对大多数寻求进入技术领域的人有吸引力的领域。我们将讨论它的许多优点,也将讨论它的缺点。

这是一个有趣的领域

我个人最喜欢进入数据科学领域的原因是因为它非常有趣。你可以从一个大部分人看不到的完全不同的层面来看待事物,你可以理解为什么事情会以这样的方式结束,你可以展望未来,以便做出关键的决定来阻止某事发生或增加某事发生的可能性。成为一名数据科学家会让你在某种程度上成为超级英雄,如果你真的对它充满热情并愿意学习,你每天都会学到令人惊讶的东西。

它能激发你的创造力

“以数据科学的简单性为目标。真正的创造力不会让事情变得更复杂。相反,它会简化它们。”
达米安·达菲语重心长

作为一名数据科学家,实际上意味着你可以将非常复杂的问题分解成非常简单的部分,这样你周围的每个人都可以理解并找到解决方法。当一个人保持开放的心态并接触到内在的创造性时,这是可以做到的。随着创造力而来的是简单,当事情变得简单时,人们可以很容易地注意到核心问题并很容易地找到解决方案。

需求量很大

数据科学是一个快速增长的领域,因为它给公司带来了强大的影响。在过去几年中,对数据科学家的需求激增,但对优秀和高质量数据科学家的供应增长速度却相当缓慢。大约 3 年前,IBM的专业人士进行的一项研究预测,到 2020 年,数据科学工作及其下的所有其他工作的需求将飙升 28%。许多人当时认为这是一个笑话,因为大多数新兴技术逐渐消亡。数据科学一直在发展,因为它有潜力,现在仍然如此。事实上,数据科学已经改变了我们看待商业世界的方式。它为企业带来了如此多的价值,以至于任何在商业领域工作的公司都觉得没有数据科学家或数据科学团队是不完整的。数据科学并没有停留在商业领域,它已经延伸到科学和技术领域,现在已经成为每个处理大数据的公司的支柱。数据科学不会很快消亡,它每天都在催生更多的技术。我不认为任何迈出大胆一步去学习成为数据科学家的人会后悔,尽管去做吧,这可能是你做过的最好的决定。

报酬很高

虽然数据科学的工资很大程度上取决于专业知识水平和经验年限,但与其他技术领域相比,即使是入门级职位的工资也很高。威斯康星大学教授进行的一项关于数据科学薪酬及其影响因素的研究显示,影响数据科学家薪酬范围的因素很多。收入最高的数据科学家在美国公司工作,收入最低的在非洲和亚洲公司工作。然而,当你发现在一家小公司工作的数据科学家的微薄薪水与其他领域的其他人相比相对较高时,你可能会感到震惊。如果你是一个考虑到金钱的人,那就去争取吧。

数据科学家很少见,尤其是当涉及到教育和技能的正确结合时。在最基本的层面上,数据科学家必须知道如何编写代码。事实上,工资最高的数据科学家属于那些每周工作 4 到 8 小时的程序员;薪水最低的是那些根本不写代码的人。

这是一个多样化的领域

数据科学如此受欢迎的另一个原因是,它接受各种各样的人,不管他们的背景和领域如何。几乎任何行业的人都可以进入数据科学,并在数据科学的帮助下在他们的行业中做令人惊叹的工作。来自银行和金融行业、食品和卫生部门、艺术、气候科学、工程和物理的人们都可以将他们的领域知识和专业技能与数据科学相结合,并取得突破性的进展。你不一定需要拥有计算机科学或工程的理学学士或理学硕士学位才能开始数据科学的职业生涯,而是将数据科学与你目前拥有的任何职业结合起来,找到一个你可以通过结合两者来解决的问题,并做一些事情。

它让事情变得更聪明

数据科学与人工智能、机器学习、机器人和物联网相结合,有能力真正实现任何事情的自动化,以使生活变得轻松。任务的自动化也能给公司带来巨大的进步,因为现在工作可以更快地完成。此外,当工作由人类完成时,存在不一致和犯与人类相关的错误的自然趋势。自动化任务处理这些问题,并在更短的时间内给我们更好的结果。危险和非常繁琐的任务也可以自动化,以减少与工作有关的事故。最后,需要极高精度的任务最好由机器人等自动化物体来处理,因为人类在处理手术等特定任务时很难达到良好的精度水平。

这是一个很大的伸缩

在任何公司,数据科学家都是一个非常有声望的职位。数据科学家通常被视为根据他们从所拥有的数据中做出的推断做出某些决定的人,他们做出的决定对于挽救公司免于崩溃或提高公司的整体成功至关重要。在任何一家公司,拥有如此大的权力都不容易,这需要经验和专业知识,这也是这个职位非常有声望的原因。

根据我们所讨论的一切,成为一名数据科学家似乎没有什么坏处。事实上,这个领域的人会遇到很多不利因素或问题。让我们讨论最相关的。

这是不可能掌握的

“有时候,数据科学家的工作就是知道你什么时候知道得不够多。”
凯茜·奥尼尔

数据科学是一个不断成长和发展的领域。每天都在开发新的工具和技术,让工作变得简单快捷。成为一名数据科学家直接意味着你已经报名参加了一次终身学习之旅,因此,你必须愿意在职业生涯的每一天学习。处于不断学习的过程中意味着你几乎永远无法掌握你正在学习的任何东西,你可能会非常精通你所做的事情,但绝对不是大师。如果一个人决心在这个领域变得非常精通,奉献和坚持是非常重要的。

您在数据科学方面的能力在很大程度上取决于您的领域知识

在我之前的文章培养对数据科学的良好态度中,我谈到了领域知识在数据科学世界中是多么重要。我想对我在那里陈述的事情再补充一点。作为一名数据科学家,领域知识能够为您带来价值。没有领域知识,你只是一个玩弄数据的人,不知道数据意味着什么。领域知识引导你从数据中做出好的有价值的推论。在进入数据科学领域之前,拥有一个好的领域知识没有两条路可走,它是绝对必要的,你不能没有它。

数据隐私问题

数据科学由数据驱动。但是,您收集和保留数据的方法必须符合数据隐私的一般道德规范。这个领域的一些人忽视了数据隐私的道德,使用不道德和非正统的方法来收集数据。但是,应该注意的是,违反数据隐私法是严重的法律罪行,将受到法律的惩罚。大多数情况下,我们可能会发现需要访问和使用其他人的数据,这些人可能是我们无法接触的顾客和客户。当这种情况发生时,最好的办法就是让这些人签署一份合同,明确授权你使用他们的数据。如果授予您的权利没有明确声明允许您访问和使用他们的数据,如果您被发现违反了数据隐私法,您可能会被法院起诉和处罚。

艾萨克·史密斯Unsplash 上拍摄的照片

应该注意的是,我在这个故事中所写的一切都是我对事物的看法,而这些看法是可以改变的。如果我的注意力被吸引到我犯的一个错误或我应该添加的一篇文章上,我将编辑或删除这篇文章的任何部分。

感谢您抽出时间阅读这个故事。我希望你学到了一些东西,这是有帮助的。欢迎你在回复部分分享你的想法和观点,你可以直接在 TwitterLinkedIn 上联系我。黑客快乐!

非常感谢 安娜·阿伊库 为我校对并纠正我写这篇文章时犯的许多错误。

为什么你应该考虑自动化你的求职需求

原文:https://towardsdatascience.com/why-you-should-consider-automating-your-job-search-needs-6ab2eeaeb7f7?source=collection_archive---------45-----------------------

使用数据提取和自动化技术识别工作机会

作者图片

免责声明:以下文章仅用于教育目的。所有提取的数据都在 Naukri.com 网站上公开,无需任何形式的登录即可访问。如果你想了解刮痧的合法性,我建议你试试这篇文章。

完整代码的 Github 链接可以在这里找到。

[## 网络抓取现在是合法的

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

towardsdatascience.com](/web-scraping-is-now-legal-6bf0e5730a78)

感谢 Covid19,LinkedIn 上疯人院。你可以看到人们对潜在的工作机会感兴趣的评论贴在左右和中间。大约有 100 家甚至更多的猎头公司和公司人力资源部门正在 LinkedIn 上发布他们的工作要求。让我们称这些帖子为我们的直接链接。直接链接是好的,它们是真实的,很可能你的申请会直接发送到发布它的人或他的公司。对这样的帖子发表评论甚至可能导致对你的 LinkedIn 个人资料的真正审查,如果你非常幸运,还会有反馈!现在是第二个环节。简历上写着将才能与机遇联系起来的人。他们大多分享这些直接链接,并试图将候选人重定向到这些链接。最后是第三个环节。LinkedIn 上的工作页面。从互联网上收集数据,大部分是像 Naukri 这样的招聘网站。所有这些可能都不会让你失去动力,你仍然会继续战斗!!

Giphy.com 图片由提供

有趣的是,当他们说你必须在 Instagram 上跟踪他们才能获得特定的工作列表时。或者直接评论他们的帖子来获取申请链接。这是数字营销 101,他们正在尝试做的事情,即跨平台竞选,这里也没有什么错,除了花了一整天寻找工作的候选人现在必须去 Instagram,看看哪个朋友在吃 foodgasm 或谁在山顶上不能再快乐了,然后寻找适用于他的工作的链接。然后就是你自己在这些各种各样的招聘网站上直接搜索。在应用了大约 10 个过滤器之后,包括你正在寻找的经验工资位置标准,你仍然剩下大约 2k 个结果。

图片由Giphy.com

在一个有如此多信息的市场中,被如此多的团体分发和再分发,有时对个人来说变得难以承受。2 天的积极申请和评论“感兴趣”之后,你失去了你的魔力,也许会沉浸在下一个趋势网飞系列。

作为学生,我们只能希望,在我们迄今发出的数百份申请中,很少有人能找到合适的工作,帮助我们获得梦想中的工作。但是,如果您愿意尝试几行通用 python 代码,有一种更聪明的方法来处理这些事情。

进入美素汤。

图片由Giphy.com

如果你是一个 IT 人员,你可能已经使用它们来测试客户网站。如果您需要立即从网站上大规模收集公开可用的数据,这两个 python 库就是您的面包和黄油。这些类型的提取很大程度上取决于这样一个事实,即你要寻找的信息大多会在网站上的固定位置找到。通过异常处理,可以管理多达 2-3 个不同位置的位置变化,但超过这个范围的变化就会成为问题。

“任何阅读这篇文章的列表网站所有者,如果你不想让你的公开数据被轻易抓取,试着在 DOM 中尽可能随机化你的数据的位置。这应该让我们这些微不足道的废物感到沮丧!!"

一个没有大量 CSS 样式或 javascript 启用按钮的网页可以只使用 Beautifulsoup 和 requests 来抓取。一旦 requests 命令成功加载了感兴趣的整个页面,Beautifulsoup 就会下载整个 DOM。但是,如果您的数据位于某个点,只有在单击特定项目后才会被披露,即启用了 JavaScript,那么您将需要 selenium 来拯救。一个更复杂的抓取库,它不只是请求,它可以点击,输入搜索关键词,设置过滤器,基本上模仿人类通过自动化 chrome 驱动程序实例可以完成的所有操作。

现在来谈这个问题。以 Naukri 的网站为例。在找工作的时候,你很可能会应用一定数量的过滤器,比如你想要的薪水、你的经验和你感兴趣的领域,然后浏览结果。这个页面在一个特定的框中包含了每个列表,如果您右键单击并检查元素,您可以看到页面上的所有列表都包含在特定 div 和类名的相同地址下。

定位主要元素(图片由作者提供)

如果一个页面上有 10 个列表,我们可以将所有这些地址保存为一个 python 列表元素,并逐个循环提取我们需要的数据。让我们称它们为汤吧。

定位所有相似的盒子

Soup.find_all 查找并存储所有相似的地址作为一个列表,而 Soup.find 可以解析特定列表项中的单个对象来提取数据。基本上,这就是美丽的声音。现在如果有大约 60 页的结果被分发,你需要从 selenium 中调用一个驱动程序的实例,找到点击进入下一页的按钮的地址,然后点击它。点击命令

处理不同的页面提取

是的,现在你可能会问我做这些的最终结果是什么。所以是时候来点激励了。

作者图片

下面是夏洛克用他的烟斗向你解释在 naukri.com 的工作列表中什么样的技能最受欢迎。

因此,很明显,如果你正在寻找技术技能,SAP 可能是一个很好的技能。另一方面,销售技巧似乎引领着上市,紧随其后的是审计。数据分析和风险合规性也不甘落后。

这是另一个生动的可视化图,根据我们给出的标准,向您展示了拥有最多工作列表的前 5 个行业。它还显示了这些工作所要求的平均经验。

作者图片

在浏览了过去 10 天发布的大约 3000 份工作后,所有的可视化都是从 Naukri 选择的 120 份工作中形成的。所有这些工作都符合最低工资标准,或者公司有很高的玻璃门评级。你的脚本可以在几个小时内完成这一切,并为你提供这些可视化效果(主要是单词云)。

想象一下,一旦你制作了这个爬虫,并在其他各种网站上运行,每周都会有这样的洞察力。

图片由giphy.com

好吧,那就回到编码上。

一旦您确定了您的数据可以出现在每个母地址项中的所有不同类型的地址,您只需在主循环中实例化一个 python 字典,继续使用格式为 d['您的键名']=value 的相关键保存字典中的每个数据点,如果您的数据有任何机会出现在 2-3 个以上的位置,则通过 try 和 except 命令处理异常,然后在填充了所有所需数据后将每个字典附加到一个列表。请记住,当您将列表作为数据框对象进行检索时,这些键将成为 CSV 文件的列名。

数据析取

现在,为了根据标准选择公司,你可以简单地放一个 if-else 语句,并规定你字典中的最低工资关键字和最低经验必须有一定的数字,你才能认为它是一家好公司。我将持有这些公司的变量命名为 gem(是的,有时你需要让你的代码变得乏味!!).一旦他们满足了这些条件,我们就可以使用 requests 和 BeautifulSoup 在 google 中搜索他们的 glassdoor 评论,方法与我们上面讨论的固定位置数据提取方法非常相似。

选择感兴趣的公司的逻辑流程

如果你考虑打开自己的 LinkedIn 页面,并帮助其他人寻找工作,你可以通过切换驱动程序句柄在新标签中打开 LinkedIn

driver.execute_script("window.open('about:blank','tab2');")
driver.switch_to.window("tab2")
driver.get("Your Linkedin page link")
input("please login linkedin")

然后在你的 LinkedIn 页面中找到 post 元素,提到它的 XPath 并通过 driver.find_element.click 函数点击它。您可以使用这个 XPath 元素位置和传递 keys 方法来完整地键入您的整个消息,并将其发布到 LinkedIn 上。这里应该使用 time . sleep不仅是为了让页面在每次点击后正确加载,也是为了防止你的程序运行过快。否则 LinkedIn 可能会大动干戈,向你抛出他们的违规条款!!

在 LinkedIn 上发帖

发布完成后,不要忘记切换标签,这样你的程序就可以继续搜索。这可以通过 driver.switch_to.window()来实现

一旦 CSV 文件组装完成,你就可以使用任何带有透明背景的图片作为你的 wordcloud 的蒙版。假设你想形成一个包含所有 JDs 的词云。您可能希望对文本进行如下预处理。我将感兴趣的文本保存在 jobs 变量下。

为词云预处理文本

这段代码基本上从文本中删除所有符号、数字、链接、停用词和其他不相关的对象,将单词词条化回其根源,例如,将 analytical 转换为 analytics。

你可以使用 imagecolourgenerator 来生成和原始图片相似的颜色,但是不要期望有同样的活力。最后,画出你的文字云来看看这些见解。下面是求职自动化的应用。

现在你知道了。你自己的爬虫,配有 LinkedIn 求职自动器,它可以自己发布更新,还可以给你提供与你的求职需求相关的急需的见解。所以,下次当其中一个页面告诉你去关注他们的 Instagram 或 twitter 账号,以获得特定工作的链接时,你可以给他们你自己研究过的工作链接,并告诉他们关注你。这涉及的范围很广。同一个程序稍加修改,甚至可以用来自动化你在几个网站的申请过程。我建议不要使用机器人发帖,因为 LinkedIn 对网站流量的进入方式有非常严格的规定,自动 chromedriver 可能会违反这些规定。根据自己的需要使用它,并且记住只提取公开可用的数据。祝好运和成功。

为什么你应该获得谷歌新的机器学习证书

原文:https://towardsdatascience.com/why-you-should-get-googles-new-machine-learning-certificate-56af4204744f?source=collection_archive---------1-----------------------

不要错过去⛵️的船

杰西卡·鲁斯切洛在 Unsplash 上的照片

谷歌刚刚打开了新的 ML 工程师证书的大门。在你开始之前,请记住,这是面向那些希望展示他们在分布式模型培训和扩展到生产等主题上的能力的专业人士的。

没有实际工作经验的学生最好先做动手项目。

从哪里开始

拿到这个证书并不容易。事实上,查看考试指南,你需要非常深入的六个领域的知识,包括高度专业化的主题,如权限问题、数据集血统和数据可行性。

这就是为什么谷歌建议你有 3 年以上使用 GCloud 产品的经验。如果你确实符合这一特征,那么这个证书就非常有价值,原因很简单。还没人有。

提醒你经济学中最基本的一课:随着供给增加,需求减少。

按作者。

直觉上,如果有 1000 个职位空缺和 600 个 ML 工程师证书持有者,他们将比有 6000 或 60000 个证书持有者更容易找到工作并获得高薪。

由于测试版注册刚刚开放,现在有 0 人拥有此证书。然而,由于谷歌是人工智能、云计算的领导者,也是世界上最大的科技公司之一,用不了多久,你就会看到这些新的认证随处可见。

事实上,著名的人工智能研究员吴恩达在他的 Coursera 课程中拥有多达 400 万的学习者。与此同时,全球仅有17100 名 ML 工程师。

虽然从这些课程中学习很棒,而且在某些情况下,获得这些课程的认证可能会有所帮助,但它们远不如几年前有价值。

所以,如果你想进入 ML 工程,最好不要犹豫谷歌的新机会。如果你想要一份更一般的数据科学工作,看看这个指南:

[## 不常见的数据科学工作指南

数据科学竞争异常激烈。以下是如何用“蓝海”策略取胜。

towardsdatascience.com](/the-uncommon-data-science-job-guide-3e215ba552bf)

可供选择的事物

ScaleGrid 统计。作者可视化。

请注意,谷歌云是而不是最受欢迎的云平台——该奖项属于 AWS,它拥有自己的机器学习证书

乍一看,从职业角度来看,选择 AWS 是更好的选择。然而,如果我们去 LinkedIn 搜索“AWS 认证的机器学习”(包括报价),我们会得到近 2000 个结果。这些人是经过认证的人,他们(1)有一个 LinkedIn,并且(2)愿意在他们的个人资料中添加它的确切名称。

记住前面的内容,只有非常有限的 ML 工程职位可供选择,所以要想有竞争力,你需要找到一个更少探索的利基。

目前持有人数为 0,获得谷歌专业机器学习工程师证书是一个“蓝海”战略:这是一个广阔、开放的空间,没有竞争。获得 Coursera 证书是另一个极端,是一种“红海”策略:水里有数百万条鲨鱼。AWS 证书位于中间。

不仅仅是证书

归根结底,重要的是要记住证书不是一切。事实上,它们甚至不应该是你申请的核心——它们应该是对基于实践技能和经验的强有力的描述的补充。

[## 跳过证书,改为这样做

创建深刻的分析,分享您的工作,并获得关注。

hackernoon.com](https://hackernoon.com/dear-aspiring-data-scientists-skip-the-certificates-do-this-instead-ubu3u8x)

你可以用一个简单的过程来增加你的个人资料的趣味,那就是挑选一个你感兴趣的话题,分析相关的数据,创造有洞察力的视觉效果和评论,并与你的网络分享。

数据科学几乎可以惠及任何行业——无论你是对流失分析推动电子商务销售感兴趣,还是对人员分析感兴趣,选择一个适合你的主题并传播你的知识。

错误的做法是在社交媒体上分享证书。

结论

证书并不是万能的,但新的谷歌专业机器学习工程师证书对于寻求职业发展的专业人士来说是一个很好的选择。

为什么即使你是对的,你也应该进行讨论

原文:https://towardsdatascience.com/why-you-should-have-the-discussions-even-if-youre-right-31a875015483?source=collection_archive---------44-----------------------

车头拍摄

我们工程师可能是一群有趣的人。由于我们工作的性质,我们天生就会以某种方式思考。工程师基本上被告知“我希望你从 A 点到 B 点”。两点之间没有道路、河流或任何东西。也许你会造一条路,也许你会造一个火箭,或者也许投石机又流行起来了。该由工程师决定如何到达那里。

这种类型的提问是典型的,会让你有非常善于分析的头脑。这种同样的心态也会让你很难和其他工程师一起工作。每个人都有如何最好地做事的想法,达成一致并不总是容易的。

如果你从未读过《编程烂透了》,我强烈推荐你读一读。这篇文章以一种滑稽的方式阐释了我所说的二分法。以下是摘录:

汤姆和哈里已经一起工作了多年,但一直在使用公制还是英制尺寸的问题上争论不休,这已经成为了“谁先到达设计的那个部分”的问题

这很有趣,看起来像一个笑话,但它确实发生在现实生活中。

工程师必然非常固执己见,通常在他们开始写代码之前就知道他们想如何解决问题。扩展协作变得非常困难。

我认为学习如何合作是最难学好的事情之一,尤其是在科技领域。如果你学会了如何做到这一点,你将会非常成功,原因如下。

协作可以让你确保你的计划万无一失,并考虑到一切需要。即使原来的计划是可靠的,它仍然提供了确认,传播了信息,也为合作者提供了潜在的学习机会。

如果可以的话,我会把最后两句话复制粘贴 10 遍,然后这篇文章就完成了。这是因为在那些句子中有很多我认为我们应该永远记住的东西。

协作:

  • 确保提供的解决方案充分满足所有要求/障碍。
  • 向团队传播信息。
  • 当团队成员提问时,你能够回答他们,这有助于他们理解和成长。

以下是一些没有明确列出的其他好处:

  • 提高你的沟通技巧,因为你必须向团队提出这个想法,然后明智地解决提出的任何问题。
  • 从上一点延伸,合作也让你更有见识。在知道足够做某事和知道足够谈论某事之间有一个知识鸿沟。
  • 有助于增加对模式的采用。查看链接文章获得更深入的解释。建立问题意味着你不仅要解决今天的问题,还要解决明天的问题。

结论

我想对上面的一些观点进行扩展。除此之外,谈论同行评审以及它如何导致更少的错误和更易维护的代码。我有意把这篇文章缩短,希望上面的信息不会在漫长的阅读过程中被冲淡或丢失。

协作可以让你确保你的计划万无一失,并且考虑到所有需要的东西(没有人是完美的)。即使原来的计划是可靠的,它仍然提供了确认,传播了信息,也为合作者提供了潜在的学习机会。所有这些都会让你成为一名更好的工程师,成为一个更有效率的团队,让工作变得更愉快。

为什么您应该知道如何在云中部署您的模型

原文:https://towardsdatascience.com/why-you-should-know-how-to-deploy-your-models-in-the-cloud-41d1c85a8df0?source=collection_archive---------38-----------------------

使用 Indeed.com 的招聘信息来展示数据科学家和机器学习工程师了解如何部署模型和导航云平台的重要性

来自 Pixabay.com

增长数据科学的技能,特别是机器学习,是一个漫长的过程。在过去的几年里,我参加了统计学和线性代数课程,完成了 ML 和深度学习的在线课程,并用 python 建立了模型。但是在所有这些工作之后,我意识到我缺少一项非常重要的技能…虽然我对处理数据和构建模型感到很舒服,但我没有将该模型实际部署到生产中的经验。

随着机器学习领域的不断发展和成熟,公司开始要求他们的数据科学团队提供更多切实的成果。而且,在一些情况下,这已经转化为公司需要他们的数据科学家更多的软件工程技能,特别是在 ML 模型的持续集成和部署领域。虽然这些技能最初似乎遥不可及,但大多数公司都在使用云技术来完成这些任务。对我们来说足够幸运的是,任何拥有设备和互联网连接的人都可以访问这些云平台。

为了展示对这些技能的需求,我编写了一个脚本,通过抓取Indeed.com来查看不同术语在任何给定搜索的招聘信息中出现的频率。使用这个脚本,我搜索了美国十个最大的“技术中心”的数据科学家机器学习职位(加利福尼亚州旧金山|纽约州纽约|华盛顿州西雅图|德克萨斯州奥斯汀|马萨诸塞州波士顿|伊利诺伊州芝加哥|华盛顿州 DC |加利福尼亚州圣何塞|马里兰州巴尔的摩|弗吉尼亚州阿灵顿)。这两个搜索中的每一个都在所有这些城市中发布了招聘信息,并用于创建下图。这些图表展示了部署这两个词在这些搜索中出现的频率。此外,我对不同的云技术进行了更深入的研究,以比较公司对具备三大云平台技能的候选人的需求频率:Amazone Web Services (AWS)、谷歌云平台(GCP)和微软 Azure。

在 Indeed.com 的数据科学家和机器学习职位发布中,关键词部署的出现频率。

Indeed.com 数据科学家和机器学习职位发布中的云平台频率。

上图描述了在部署模型和在云环境中工作时对技能组合的需求。虽然不是大多数,但相当大比例的招聘信息都在寻找具备这些能力的候选人。此外,鉴于数据科学家通常将大部分时间花在问题的模型构建(而不是模型实现)方面,提高这些技能可以让你从其他候选人中脱颖而出。此外,如果你正在寻找机器学习方面的角色,部署模型和在云环境中工作的需求甚至更高。

最后,我深入研究了这些招聘信息,比较了不同经验层次对这些技能的需求。下图显示,随着您努力晋升到更高级别的职位,尤其是从初级职位晋升到中级职位,部署和云技能变得越来越重要。

Indeed.com 数据科学家的招聘信息列出了各种经验水平的频率部署和云技能。

频率部署和云技能被列在 Indeed.com 机器学习的各种经验水平的招聘广告上。

上面的图表说明了你可以通过学习部署 ML 模型和在云平台上有效工作来实现的职业机会。但是,即使抛开所有这些专业优势,学习和发展这些技能也是令人兴奋的。因此,我决定开始一个博客系列,讨论将 ML 模型部署到产品中的所有不同方法。在这一系列的博客文章中,我将为每种部署方法提供一个简短的后续活动,并提供我对易用性的反馈。

下面列出了我当前关于 ML 部署的文章,并给出了您希望看到的任何平台/技术的建议!

注:这篇博文收集的数据是 2020 年 2 月 12 日从 Indeed.com 收集的。

为什么你应该学习自动化,即使你从来没有编码

原文:https://towardsdatascience.com/why-you-should-learn-automation-even-if-you-never-code-8afc9c3677ac?source=collection_archive---------80-----------------------

自我保健从给你更多的时间开始

UnsplashNeONBRAND 拍摄的照片

不管你在哪里工作,都有一个共同点。单调而卑微的工作永远是工作的一部分。这份工作的范围可以从报告到权威,为你的电子商务产品编辑照片,在谷歌地图中搜索经度/纬度,数据收集和格式化。这份工作烦人的地方不是任务的难度。然而,在这项工作上浪费了大量令人讨厌的时间。完成这项工作可能需要几个小时甚至几天,但下周/下个月还要做同样的事情。它让工作变得更累,并质疑你在工作中努力的价值。

这篇文章阐述了为什么自动化是你必须学习的一项基本技能,以及它对我们这些不从事编码工作的人的好处。这并不是要在自动化领域训练你,要知道已经有大量的文章和故事在探讨这个话题。如果你正在寻找这样的故事,你可以参考“走向数据科学”出版物以获得更详细的报告,或者访问自动化枯燥的东西。为了这个故事,自动化将被定义为任何可以减少体力劳动的过程。自动化文章专门讨论了无需任何其他设备就可以在计算机上执行的自动化。

1.自动化节省时间。

让我们从最明显的一个开始,创建自动化节省了大量时间。这是一个你在开始时投入很多,然后可以结出很多果实的时期。这些工作中的大部分是我们需要定期完成的负担,实际上浪费了我们几个小时或几天的时间。在没有自动化的情况下,工作人员需要编辑图片,以便在电子商务网站上为每个产品配上相框,或者填写数百张表格进行交易。虽然看起来很容易,但做这种重复的工作是令人疲惫和耗时的。

为什么这很重要?

创建自动化可以让您在更短的时间内完成重复的任务。像编辑几个小时这样的事情,几秒钟就能搞定。这大大提高了你的工作效率,让你有更多的时间去放松或处理另一个项目。这一点很重要,因为生活在资本主义社会(公司或初创企业)中,升职或获得晋升总是要证明自己。要求升职的时候有弹药还是好的。为了增加你的机会,我们经常需要在得到好处之前做上级的工作。这就是为什么公司经常赞美努力工作,因为他们想看到证据。升职对公司来说意味着更多的风险。这意味着赋予新员工新的责任。获得一个新的时间让你有更多的机会去证明你工作描述之外的优点。获得更多的时间意味着抓住更多的机会让你发展。

德文·扬塞·范·伦斯堡在 Unsplash 拍摄的照片

2。这对你的心理健康很不利。

在多个行业工作让我明白,我从不讨厌我的工作,我讨厌做单调的工作。波杰克说得好:

“每一天,事情都会变得简单一些。但你必须每天都做——这是最难的部分。”波杰克

虽然它可能是在不同的背景下,但它告诉我们这些无法摆脱单调工作流程的人。我们的思想没有受到挑战,我们感到徒劳无益,却厌倦了做那些我们知道永远不会结束的工作。《哈佛商业评论》发表了一篇关于“如果你精疲力尽,开辟一条新的道路”的文章,描述了单调的工作会对心理健康产生负面影响,给我们带来巨大的压力,并导致倦怠。在我们的工作中找到意义是很重要的,但是当我们总是觉得自己像机器中的一个齿轮一样工作到累的时候就很难了。

德文·扬塞·范·伦斯堡在 Unsplash 上拍摄的照片

自动化能做的是减轻单调工作的负担。然而,你可能需要监督代码的运行,但是它通过给你更多的时间去做你喜欢的事情,给了你权力和代理权。你不会因为单调的工作而感到窒息,而是为自己能为公司节省大量时间而感到自豪。尽管这看起来很卑微,但探索你工作中的意义而不仅仅是表面文章是至关重要的。

我们都希望有能力说我们不仅仅是一个齿轮

3.自动化减少了人为错误

工作最讨厌的部分就是收拾你/别人的烂摊子。不幸的是,这些错误将由于人为错误而存在。要么是我们筋疲力尽,要么是一个失误,或者可能是纯粹的无知经常导致危机管理不断地和精神上的消耗。不管是不是故意的,人为错误是所有公司都需要防止的危险。

自动化允许你使用你熟悉的工具,比如微软的 Excel 或者谷歌的工作表。它将这一点与 Python 代码相结合来模拟人类行为。这意味着不再有打字错误,无意点击,计算错误,或错过一个表格。理解公司和初创企业的工作总是整合的,并且受到人为错误的严重影响,会经常阻止其他团队。对此的补偿需要来回往复,而且当它已经在稍后交付时,通常是不可能的。当我们继续依赖人类时,人为错误的持续损害将持续存在。

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

4.它帮助你的公司发展。

单调工作的真相是,随着时间的推移,它只会变得更糟。当业务增长时,繁琐的工作量通常会变得更加突出。举一个向政府提交金融初创企业报告计划的例子。它在系统中进行的交易越多,就意味着员工需要填写更多表格并提交给政府。如果不使用自动化,公司最终会雇佣没有任何职业规划或外包给其他公司的人来做单调的工作。公司需要在这种危害开始变得太大直到扰乱业务之前阻止它。

自动化有什么帮助?自动化可以用来最大限度地减少这些工作量,并降低您可能用来雇佣或外包的价格。随着目前自动化的进展,它可以毫无困难地处理大量数据。这意味着,即使你的业务增长,你也不必增加投资。

除此之外,成为能够自动化和提高生产力的人将是对你职业生涯的重大推动。你积极地为公司做出更大的贡献,这让你在竞争中遥遥领先。

照片由 LYCS 建筑Unsplash 上拍摄

5.自动化框架是一种可转移的技能

理解单调的工作无处不在,这意味着自动化的工作机会将会存在。除非这份工作在某一点上已经饱和,这在短期内不太可能发生。可转移的技能是生活中必不可少的。我们大多数人毕业于经济或医疗危机,永远不能依靠一个行业来奋斗。我们过去选择专业的决定可能会改变。我们可能不喜欢我们的行业或环境。在一个我们总是赞美激情的世界里,我们忘记了激情是外部性的产物。我们选择了特定的专业,因为它很酷,或者其他人认为它有利可图。20 岁时,我们被迫选择人生的 60 年。有时候,我们希望我们的生活有所改变。当最坏的事情发生时,拥有自动化这样的技能可以充当安全网。

自动化时代

这里有一些你可能有兴趣自动化的东西

  1. 表格提交:不是给政府做报告,就是给你老板做报告。您可以使用 Microsoft Excel 作为输入,通过模板自动生成报告或提交表单。该程序将自动运行它,并让你摆脱键入数百份表格。与此同时,你可以做其他有成效的事情,或者通过网飞系列享受自我。如果我们假设 1 张表格需要大约 2 分钟,那么填写 100 张表格需要 200 分钟。这意味着从你的日常活动中抽出两个半小时。
  2. 数据分析和图表:数字在专业工作场所获得了新的重要性。标准报告包括数据收集、分析、创建图表和报告生成。理解所使用的大部分公式每个月都是重复的,Python 可以用于完成每一步,最终您可以从 CSV 的输入中获得完整的分析和 PDF 格式的报告。如果通常情况下,数据图表和分析需要大约 1 个小时来填写我们的公式,设计和格式化每个数据集。使用自动化,您可以在几分钟内创建与 power pdf 相同的数据和输出。
  3. 图片操作:从事电子商务业务需要你编辑每一件产品并创建一个框架。这个过程包括去除背景,调整质量,放在中心,并制作一个合适的框架。完成这项工作需要几分钟到几小时的时间。使用 Python,具体来说,一个名为 pillow 的包大约需要 1-5 分钟,这取决于您创建的图片数量。
  4. 报废:在网上收集信息经常是乏味的,但却是必要的。如果你知道要注意什么,自动化会给你很大帮助。寻找社交媒体对话中的模式,计算帖子中的字数,并从扫描的文档中获取数据。
  5. 日常活动:登录、给人发邮件、整理文件,任何需要重复点击和/或打字的事情都可以通过自动化来完成。

外卖食品

我们经常害怕尝试编程,因为学习语言是令人生畏的。除此之外,如果你还不是程序员,你可能感觉不到学习编码的直接好处。自动化创造了大多数人感觉不到的结果。它整合了你的工作,使它变得更加容易。如果您没有时间阅读整篇文章,请阅读以下内容:自动化节省了您的大量时间。它允许你在一定程度上控制你的生活。不管你从事什么行业,它都会提升你的职业前景,提高效率。

为什么您现在应该学习 CatBoost

原文:https://towardsdatascience.com/why-you-should-learn-catboost-now-390fb3895f76?source=collection_archive---------8-----------------------

CatBoost 正在永远改变机器学习的游戏,变得更好。

介绍

当我在为一个关于机器学习的培训设计内容时,我最终翻遍了 CatBoost 的文档。我在那里,被这个非常有能力的框架所困惑。它不仅可以在您提供的任何数据集上构建最准确的模型之一— 需要最少的数据准备 — CatBoost 还提供了迄今为止最好的开源解释工具,以及快速生产模型的方法。

这就是为什么 CatBoost 正在彻底改变机器学习的游戏,永远。这就是为什么学习使用它是提升技能和作为数据科学家保持相关性的绝佳机会。但更有趣的是,CatBoost 对数据科学家(像我一样)的现状构成了威胁,他们喜欢在给定数据集的情况下构建高度精确的模型,这应该是乏味的。CatBoost 正在改变这种情况。它让每个人都可以进行高度精确的建模。

图片取自 CatBoost 官方文档:【https://catboost.ai/

以极快的速度构建高度精确的模型

装置

你试过在笔记本电脑上安装 XGBoost 吗?你知道这有多痛苦。在另一端安装 CatBoost 是小菜一碟。快跑吧

pip install catboost

这就够了。

需要数据准备

不像今天可用的大多数机器学习模型,CatBoost 需要最少的数据准备。它处理:

  • 缺少数值变量的值
  • 非编码分类变量。
    注意,必须事先为分类变量填充缺失值。常见的方法是用新的“缺失”类别或最常见的类别替换 NAs。
  • 仅对于 GPU 用户,它也处理文本变量。
    不幸的是,我无法测试这项功能,因为我在一台没有 GPU 的笔记本电脑上工作。[编辑:即将推出的新版本将在 CPU 上处理文本变量。有关 CatBoost 团队负责人的更多信息,请参见评论。]

建筑模型

与 XGBoost 一样,您可以使用熟悉的 sklearn 语法以及一些特定于 CatBoost 的附加特性。

from catboost import CatBoostClassifier # Or CatBoostRegressor
model_cb = CatBoostClassifier()
model_cb.fit(X_train, y_train)

或者,如果您想要一个关于模型如何学习以及它是否开始过度拟合的酷炫视觉效果,请使用 plot=True 并将您的测试集插入到 eval_set 参数中:

from catboost import CatBoostClassifier # Or CatBoostRegressor
model_cb = CatBoostClassifier()
model_cb.fit(X_train, y_train, **plot**=**True**, **eval_set**=**(X_test, y_test)**)

请注意,您可以同时显示多个指标,甚至更人性化的指标,如准确度或精确度。此处列出了支持的指标。请参见下面的示例:

在训练时监测训练集和测试集的 Logloss 和 AUC

您甚至可以使用交叉验证,观察您的模型在不同分割上的精确度的平均值和标准偏差:

更多官方文档信息:https://catboost . ai/docs/features/visualization _ jupyter-notebook . html # visualization _ jupyter-notebook

微调

CatBoost 与我已经写过一篇文章的 XGBoost 非常相似。为了适当地微调模型,首先将 early_stopping_rounds 设置为一个有限的数字(比如 10 或 50 ),并开始调整模型的参数。有关梯度增强的关键参数的更多信息,如学习速率估计器数量,你可以阅读我以前的文章(XGBoost 的参数与 CatBoost 的非常相似):

[## 像老板一样在 Python 中微调 XGBoost

XGBoost(或极端梯度推进)不再被引入,只是在太多的数据科学中被证明是相关的…

towardsdatascience.com](/fine-tuning-xgboost-in-python-like-a-boss-b4543ed8b1e)

训练进行得很快。非常快。

不带 GPU

从他们的基准中,您可以看到 CatBoost 比 XGBoost 训练得更快,与 LightGBM 相对相似。众所周知,LightGBM 训练速度非常快。

带 GPU

当谈到 GPU 时,真正的奇迹发生了。

即使像 K40(2013 年发布)这种比较老的 GPU,训练时间至少也要分 4 次。使用最新的 GPU,训练时间最多可以除以 40 倍。来源:https://catboost . ai/news/catboost-enables-fast-gradient-boosting-on-decision-trees-using-GPU

解释你的模型

CatBoost 的作者已经明白的一件事是,这不仅仅是一个准确性游戏。既然有 XGBoost 和 LightGBM 可用,为什么还要使用 CatBoost 呢?好吧,说到解释,CatBoost 提供的开箱即用是无可匹敌的。

特征重要性

如果这个图能被大多数人理解,那么用来计算特性重要性的基本方法有时会产生误导。CatBoost 提供了三种不同的方法:预测值变化损失函数变化内部特征重要性。一切都在这里详述

本地解释

对于本地解释,CatBoost 附带了 SHAP,这是通常被视为唯一可靠的方法。

shap_values = model.get_feature_importance(Pool(X, y), **type='ShapValues'**)

在本教程之后,你可能会得到经典的本地解释和特性重要性的输出。

边际影响

那是迄今为止我最喜欢的东西。随着高精度的商品化(特别是随着 AutoML 的兴起),如今在更深层次上理解这些高精度模型变得越来越重要。

根据经验,以下情节已成为模型分析的标准。CatBoost 在其包中直接提供了它。

在这片土地上你观察到

  • 绿色表示数据的分布
  • 蓝色表示每个箱上的平均目标值
  • 橙色表示每个条柱的平均预测值
  • 红色表示部分依赖

在生产中使用 CatBoost 模型

在生产中实现您的模型从未如此容易。以下是如何导出您的 CatBoost 模型。

使用。save_model()方法为您提供了以下文档:

Python 和 C++导出

model_cb.save_model(‘model_CatBoost.py’, **format=’python’**, pool=X_train)

就是这样。你会过得很愉快的。您的回购中的 py 文件如下所示:

模型可以生产了!你不需要在制作新乐谱的机器上设置特定的环境。就 Python 3 就行了!

请注意,文档中提到 Python 评分方法“与本地 CatBoost 应用程序方法相比,性能较差,尤其是在大型模型和数据集上。”

二进制导出

显然这是获得新数据最快的选择。另存为。cbm 文件。

使用以下代码重新上传您的模型:

from catboost import CatBoostmodel = CatBoost()model.load_model('filename', format='cbm')

其他有用的提示

详细= 50

在大多数模型中,通常会有一个详细的输入,以便查看训练过程的进展情况。CatBoost 也有,但是比其他的稍微好一点。例如,使用 verbose=50 将每 50 次迭代显示一次训练错误,而不是每次迭代都显示一次,如果有很多树的话,这会很烦人。

使用 verbose=True

使用 verbose=10 训练相同的模型。更好检查。

注意,还会显示剩余时间。

模型比较

微调模型需要时间。通常,您可能有几个使您的模型准确的好参数列表。为了更进一步,您甚至可以比较模型如何学习不同的参数集,以帮助您在最终的参数列表中做出选择。

轻松比较 CatBoost 模型。来自官方文件的说明这里

训练时保存模型

你数据集很大,还怕训练时间太长?不再害怕。您可以在训练时保存您的模型,因此训练过程中的任何中断并不意味着您的模型需要完全重新训练!关于快照选项的更多信息,请点击

教育材料

谁在学校太酷了?文档中的训练材料非常有用,即使你认为你对梯度增强树了如指掌。他们有关于如何使用和理解 CatBoost 的笔记本和视频。我最喜欢的一个肯定是 NeurIPS 2018 大会上的一个(这个链接上的第二个视频)。

结论

看起来我们都等了很长时间才让这样的东西进入开源世界。如果你觉得这篇文章有帮助,不要犹豫,给一些掌声,收到它们总是感觉很好;)

为什么永远不要在 Lambda 函数中打印()

原文:https://towardsdatascience.com/why-you-should-never-ever-print-in-a-lambda-function-f997d684a705?source=collection_archive---------2-----------------------

如何识别 AWS Lambda 新手,就像那样

图片来源:卢卡·罗米欧

两个 Lambda 用户的故事

故事#1:业余爱好者

前一刻一切都很好,然后…砰!你的 Lambda 函数引发了一个异常,你得到了警告,一切都立刻改变了。

关键系统可能会受到影响,因此快速了解根本原因非常重要。

现在,这不是一些低容量的 Lambda,您可以通过滚动 CloudWatch 日志,以纯手动的方式找到错误。因此,您转而使用 CloudWatch Insights 对日志组运行查询,过滤错误:

CloudWatch Insights 错误查询过滤

看起来我们找到了错误!虽然很有帮助,但不幸的是,它忽略了与失败调用相关的任何其他日志消息。

根据上面显示的信息,也许——仅仅是也许——你可以找出根本原因。但更有可能的是,你不会自信。

你是否告诉人们你不确定发生了什么,如果问题再次发生,你会花更多时间调查?我很怀疑

因此,您可以转到 CloudWatch Logs 日志流,过滤相关时间戳的记录,并开始手动滚动日志消息,查找特定出错调用的完整细节。

解析时间:1–2 小时
λ享受使用指数:

故事#2:专业人士

同样的 Lambda 函数,同样的误差。但是这次日志记录和错误处理得到了改进。顾名思义,这涉及到用更好的东西代替print()语句。

那是什么,这个 Lambda 函数看起来像什么?让我们先来看看对于专业人员来说错误调试是什么样子的,然后再来看看代码。公平吗?

同样,我们从一个洞察查询开始:

CloudWatch Insights 查询,再次过滤错误

我们再次在日志中找到错误,但与上次不同的是,日志事件现在包含了来自 Lambda 调用的@requestId。这允许我们运行第二个 Insights 查询,根据 requestId 进行过滤,以查看我们感兴趣的确切调用的完整日志集!

@requestId 上的 CloudWatch Insights 查询过滤

现在我们得到 5 个结果,它们一起描绘了这个请求所发生的全部犯罪现场情况。最有帮助的是,我们可以立即看到触发 Lambda 的确切输入。由此我们可以推断出发生了什么,或者用完全相同的输入事件在本地运行 Lambda 代码进行调试。

解析时间:10–20 分钟
λ享受使用指数:高!

代码显示

我想想象我的读者坐在座位的边缘,乞求从上面的故事中知道业余和专业代码之间的区别。

不管这是真的还是假的,这是业余爱好者 Lambda:

当然,为了便于说明,这是有意简化的。错误是通过简单地传递不带artist作为键的事件字典而生成的,例如:event = {'artisans': 'Leonardo Da Vinci'}

现在是专业的 Lambda,它执行相同的基本功能,但是改进了print()语句和错误处理。

有意思!那么,我们为什么要使用日志模块和格式化异常回溯呢?

可爱的 Lambda 测井

首先,python 的 Lambda 运行时环境包括一个定制的记录器,可以很好地利用它。

它的特点是有一个格式化程序,默认情况下,在每个日志消息中包含aws_request_id。这是一个关键特性,它允许一个 Insights 查询,就像上面显示的过滤单个@requestId的查询,显示一个 Lambda 调用的全部细节。

异常处理

接下来,您可能会注意到奇特的错误处理。虽然看起来吓人,但使用sys.exec_info检索 python 中异常信息的标准方式

在检索到异常名称、值和 stacktrace 之后,我们将其格式化为一个 json 转储的字符串,这样这三者都出现在一个日志消息中,关键字自动解析为字段。这也使得基于特定错误创建定制指标变得容易,而不需要复杂的字符串解析。

最后,值得注意的是,相比之下,用默认的 Lambda 记录器记录一个没有任何格式的异常会导致一个不幸的多行回溯,如下所示:

多行异常追溯示例

包扎

我希望如果你的 Lambda 函数现在看起来更像业余 Lambda,这篇文章会激励你升级你的舞蹈并成为职业选手!

在我让您离开之前,我应该警告您,用适当的日志记录替换 print 语句的缺点是,您会丢失 Lambda 的本地执行所生成的任何终端输出。

有一些巧妙的方法可以解决这个问题,比如在一个lambda_invoke_local.py类型的文件中包含环境变量或一些设置代码。如果感兴趣,请告诉我,我很乐意在以后的文章中讨论细节。

最后,作为最后一点启发,不需要运行 Cloudwatch Insights 查询来调试自己,应该可以针对 Lambda 错误度量设置一个警报,在处于“In Alarm”状态时通知 SNS 主题。然后,另一个 Lambda 可以触发 SNS 主题,自动运行与 Pro 相同的调试洞察查询,并在 Slack 或其他地方返回相关日志。

会很酷,不是吗?

为什么您永远不应该满足于开箱即用的分析

原文:https://towardsdatascience.com/why-you-should-never-settle-for-out-of-the-box-analytics-10f2e2addf79?source=collection_archive---------53-----------------------

信任预定义的分析仪表板会导致业务灾难

预先制作的工具提供了一个有限的、不完整的场景,可能会对你的业务产生误导。图片由 Miquido 提供

人类有很多天赋,但完美的决策绝对不是其中之一。谈到业务增长,你真的能相信自己的直觉吗?你可能更愿意依靠事实和数据,对吗?

你当然会。幸运的是,市场也知道这一点,并提供了许多解决方案,让您可以跟踪和分析您的应用程序。你可以从谷歌分析、Firebase、Mixpanel 和脸书分析等工具中进行选择。

它们中的每一个都提供了许多预定义的仪表板,这可能是一个很好的起点。尽管如此,满足于他们提供的见解是导致商业灾难的最可靠途径之一。在这篇文章中,我会告诉你为什么。

商业智能的真正目的是什么?

商业智能 (BI)基本上是将收集到的数据以领域定制仪表板的形式转化为可操作的见解。整个过程都是数据驱动,使得决策更高效、更有力、更准确。

商业智能在软件开发过程中有什么帮助?

你为什么应该关心适当的分析和商业智能?原因很简单。作为一个利益相关者,你想知道你的应用程序表现如何。为此,您需要回答一些重要问题,例如:

  • 使用了哪些功能?
  • 哪些内容受欢迎,哪些不受欢迎?
  • 重点目标人群的转化率如何?
  • 用户如何遵循应用的关键路径?
  • 他们何时以及为什么会流失?
  • 他们什么时候被激活,你如何让他们参与进来?

即使是最好的分析工具的基本集成也不会立即给你许多特定领域的统计数据。例如,集成 Firebase 给你活跃用户的数量,他们的人口统计,设备甚至打开的屏幕。但这并没有直接回答上述问题,不是吗?安装数量或每月活跃用户的信息很重要,但这些很少是应用程序的实际目标。

为什么您需要的不仅仅是一个预制的解决方案?

这些工具是通用的,适合每个人。这意味着它们不是为任何人量身定做的。他们不能从不同来源(如应用数据库、CRM 或市场分析)汇总数据,也不能向您展示您的应用程序特有的指标。这些工具提供了一个有限的、不完整的情况,可能会对您的业务产生误导。他们通常也没有能力深入研究收集的数据,试图理解呈现的结果。

谷歌分析仪表板。照片由 Webaroo 拍摄

不要误解我的意思。这些工具很棒,我推荐使用它们。它们只需要适当定制。如果您想要获得关于内容、货币化(如订阅)或用户参与度的详细信息,您需要仔细规划和实施定制分析活动。下一步是利用收集的事件和存储在应用数据库中的数据构建定制的 BI 仪表盘。这种仪表板可以用来直观显示直接回答这些问题的最重要的数字。

从定义对您的业务重要的指标开始

数据驱动决策的影响

麦肯锡全球研究所对数据驱动的决策过程进行了研究。让我们看看它们如何影响使用它们的组织。

这些发现清楚地证实了检查你的关键指标确实是必须的。但是你有没有停下来真正考虑过哪些数字定义了你产品的成功?正如增长黑客所说,你的北极星或增长函数是什么?

在你开始构建你的分析之前,你必须清楚地陈述你的基本指标。大多数产品将分享一些收入增长的共同组成部分。这些可能是新用户的获取、激活和保留。尽管如此,每个应用都有自己的一套影响收入的特定业务因素。

如何识别影响你收入的因素

确定与用户体验你的应用的核心价值最直接相关的行动。对于优步,可能是已完成的乘坐、乘坐次数、重新预订乘坐的乘坐者人数。对脸书来说,它可能是被接受的邀请的数量或增加的帖子、评论和反应的数量。

分析工具提供的基本指标显然是有价值的。它们可能包括页面浏览量、安装数量或会话数量。然而,更重要的是跟踪对你的产品有影响的指标。像 Google Analytics 这样的工具提供了数百张图表。不幸的是,它们往往更令人困惑,而不是有所帮助。

仔细规划您的分析

在这一点上,你可能很想决定“跟踪一切”并在以后理解它。这是一个很常见的错误。这样做会直接导致灾难。

你需要数据科学家做什么?

你可能会认为你可以很容易地对应用程序中发生的一切有一个完整的了解。你只需要要求你的开发团队为每个按钮和每个动作发送事件,对吗?嗯……没有。

当然,开发人员会很乐意添加选定的 SDK,并为每个动作实现事件发送。但是如果他们没有更大的想法会发生什么呢?他们只会不顾一切地发送他们认为可能重要的信息。你最终肯定会得到大量的数据,但这些数据是非结构化的、混乱的,而且很可能会丢失关键参数。这就是为什么让数据科学家参与到流程中并制定数据收集计划如此重要的原因。

什么是数据收集计划?

数据收集计划基本上是需要从应用程序发送的所有事件的文档。一个数据科学家只需要几天的工作就可以准备一份。这种努力在开发期间得到了回报。这样,开发人员可以简单地遵循文档,而不必考虑事件实现。

从我自己的经验中,我发现了什么在这里最有效。与数据科学团队一起召开数据收集和利用研讨会,开始制定您的计划。在此会议期间,您确认您的数据收集目标。然后,您检查您的产品,建立数据点并确定关键指标。最后,您可以讨论它们将如何呈现在仪表板上。这样的会议将把误解的风险降到最低。

想象什么是重要的

清晰的数据呈现是成功的关键

在参与了几十个软件项目后,我发现决策者都太倾向于在商业智能上偷工减料。这是一个遗憾,因为 BI 是他们可以用来做出决策、推动增长和打造成功产品的唯一工具。这种态度通常基于一个错误的假设,即如果他们对产品的想法是正确的,它就一定会成功。但现实却大相径庭。所有成功的产品都是通过数据驱动的实验不断改进的。市场是残酷的——你打盹,你就输了。这就是持续跟踪应用程序的关键指标如此重要的原因。然而,如果没有熟练的仪表板定制,您将会得到大量的非结构化日志。你将经历信息过载,这只会阻碍你使用商务智能。

如何避免信息过载

你需要的是第一眼就能清楚地看到最重要的参数。这样,您就能够轻松地更深入地利用您的数据。这需要定制仪表板。基于这些分析,您可以构建商业智能仪表板。它们将让你了解用户如何与应用程序互动,得出结论,并将其应用到你的商业模式中。在某种程度上,你可以使用 Google Analytics 或 Firebase 等分析工具来做到这一点。但是,通常情况下,您需要组合来自许多不同数据源的结果,并创建定制的 BI 仪表板。下面你可以看到一个非常简单,但信息量大,在谷歌数据工作室创建的自定义仪表板的例子。

在 Data Studio 中创建的自定义仪表板示例

可以想象,对于一个有经验的数据科学家来说,创建这样的仪表板相对容易。在 Tableau、Graphana、Google Data Studio 或 Power BI 等工具中创建一个通常需要几天时间。与软件产品实现的整体努力相比,这几乎是微不足道的。当您考虑它们的附加价值时,定制仪表板绝对不能妥协。

不要盲目地去市场

我怎么强调都不为过,当应用程序上线时,至少有分析功能是多么重要。否则,你将失去在最需要的时候获得关键信息的唯一机会,也就是在市场上验证应用的时候。就所需的实施时间而言,适当的数据分析出奇地便宜。然而,不知何故,它经常被满足于最简单的解决方案的企业所忽视。

你需要以一种容易传达你的应用程序如何运行的方式来收集和可视化你的数据。不要退而求其次。你不想发现自己落后了,甚至不知道原因。就像没有持续监控关键飞行参数的适当仪器,飞行员无法驾驶飞机一样,没有正确的数据分析和展示,你将会盲目飞行。

如果您想为您的企业发现可能的分析解决方案,请随时给我们 hello@miquido.com 公司写信。

为什么不应该用 MARCO 女士来评估语义搜索

原文:https://towardsdatascience.com/why-you-should-not-use-ms-marco-to-evaluate-semantic-search-20affc993f0b?source=collection_archive---------34-----------------------

其他广泛使用的数据集可能也不多

如果我们想要研究语义向量(预训练或未训练)的能力和局限性,我们应该理想地优先考虑不太偏向术语匹配信号的数据集。这篇文章表明,MS MARCO 数据集比我们预期的更偏向于这些信号,并且由于类似的数据收集设计,相同的问题可能存在于许多其他数据集中。

照片由免费使用声音Unsplash

MARCO 女士是微软发布的大规模数据集集合,旨在帮助推进与搜索相关的深度学习研究。当我们决定创建一个教程展示如何用 Vespa 设置一个文本搜索应用时,这是我们的第一选择。这引起了社区的广泛关注,很大程度上是因为排行榜的激烈竞争。此外,作为一个大型的、具有挑战性的带注释的文档集,它检查了当时所有的框。

在第一篇基础搜索教程之后,我们发布了一篇博客文章和一篇教程,讲述如何在 Vespa 中使用 ML 来改进文本搜索应用。到目前为止一切顺利。我们的第一个问题出现在我们编写关于如何使用(预训练的)语义嵌入和近似最近邻搜索来改进应用程序的第三个教程时。在这一点上,我们开始意识到全文排序 MS MARCO 数据集可能不是最好的方法。

在更仔细地查看数据后,我们开始意识到数据集高度偏向于术语匹配信号。我的意思是,比我们预期的要多得多。

但是我们知道这是有偏见的…

在我们继续研究数据之前,我们必须说我们预料到了数据集中的偏差。根据 MS MARCO 数据集论文中的,他们通过以下方式构建数据集:

  1. Bing 搜索日志中的抽样查询。
  2. 过滤掉非问题查询。
  3. 使用 Bing 从其大规模网络索引中检索每个问题的相关文档。
  4. 从这些文档中自动提取相关段落
  5. 人类编辑然后注释包含回答问题的有用和必要信息的段落

看看第 3 步和第 4 步(也许还有第 5 步),在数据集中发现偏差就不足为奇了。公平地说,我认为这种偏见在文献中被认为是一个问题。令人惊讶的是我们观察到的偏见程度,以及这可能如何影响涉及语义搜索的实验。

语义嵌入设置

我们的主要目标是说明如何通过使用术语匹配和语义信号来创建开箱即用的语义感知文本搜索应用程序。这与 Vespa 执行近似最近邻搜索的能力相结合,将允许用户大规模构建这样的应用。

在接下来呈现的结果中,我们使用 BM25 分数作为我们的术语匹配信号,并且使用句子 BERT 模型来生成嵌入以表示语义信号。使用更简单的术语匹配信号和其他语义模型(如通用句子编码器)可以获得类似的结果。更多细节和代码可以在教程中找到。

组合信号

我们从一个合理的基线开始,它只包含术语匹配信号。接下来,当我们在应用程序中只使用语义信号时,我们得到了有希望的结果,只是为了检查设置的完整性,并确认嵌入中确实包含相关信息。在那之后,明显的后续步骤是合并两个信号。

Vespa 在这里提供了很多可能性,因为我们可以在匹配阶段和排序阶段结合术语匹配和语义信号。在匹配阶段,我们可以对语义向量使用nearestNeighbor操作符,并使用大量通常用于术语匹配的操作符,如常用的ANDOR语法,来组合查询标记或有用的近似,如weakAND。在排序阶段,我们可以使用 BM25 和 Vespa 张量评估框架等众所周知的排序功能,对输入信号做任何我们想做的事情,如语义嵌入。

当我们开始尝试所有这些可能性时,我们开始质疑 MS MARCO 数据集对于这种类型的实验的有用性。最主要的一点是,尽管语义信号在孤立的情况下表现不错,但是当考虑到术语匹配信号时,这种改善就会消失。

我们期望术语匹配和语义信号之间有一个重要的交集,因为两者都应该包含关于查询文档相关性的信息。然而,语义信号需要补充术语匹配信号才能有价值,因为它们的存储和计算成本更高。这意味着它们应该匹配相关文档,否则这些文档将不会被术语匹配信号匹配。

然而,就我们所见,情况并非如此。所以,我们决定更仔细地研究这些数据。

术语匹配偏差

为了更好地调查发生了什么,我们从 Vespa 收集了相关和随机文档的查询文档数据。例如,下图显示了查询和标题嵌入之间以及查询和正文嵌入之间的点积和的经验分布。蓝色直方图显示了随机(因此可能与查询不相关)文档的分布。红色直方图显示了相同的信息,但现在的条件是文档与查询相关。

嵌入的点积分数的经验分布。给定一组查询,蓝色表示随机(不相关)文档,红色表示相关文档。

不出所料,我们在相关文档上的平均得分要高得多。太好了。现在,让我们看一个类似的 BM25 分数的图表。结果是相似的,但在这种情况下更加极端。相关文档具有高得多的 BM25 分数,以至于几乎没有相关文档具有低到足以被排除在词语匹配信号的检索之外的信号。这意味着,在考虑了术语匹配之后,几乎没有相关文档需要通过语义信号进行匹配。即使语义嵌入是信息性的,也是如此。

BM25 分数的经验分布。给定一组查询,蓝色表示随机(不相关)文档,红色表示相关文档。

在这种情况下,我们所能期望的最好结果是,对于相关的文档,两个信号都是正相关的,这表明两个信号都携带了关于查询文档相关性的信息。这似乎确实是下面散点图中的情况,该散点图直观地显示了 BM25 分数和相关文档的嵌入分数(红色)之间的相关性比一般人群的分数(黑色)之间的相关性强得多。

嵌入的点积分数与 BM25 分数的散点图。给定一组查询,黑色表示随机(不相关)文档,红色表示相关文档。

备注和结论

在这一点上,一个合理的观察是,我们正在谈论预先训练的嵌入,并且如果我们针对手边的特定应用对嵌入进行微调,我们可以获得更好的结果。很可能是这种情况,但至少有两个重要的因素需要考虑:成本和过度拟合。资源/成本考虑很重要,但更明显的是要认识到这一点。你要么有钱去追求,要么没钱。如果你这样做了,你仍然应该检查一下你得到的改进是否值得。

在这种情况下,主要问题与过度配合有关。使用通用语句编码器和语句 BERT 等大而复杂的模型时,不容易避免过拟合。即使我们使用整个 MS MARCO 数据集,这被认为是一个大的和重要的最近发展,以帮助推进围绕 NLP 任务的研究,我们也只有大约 300 万个文档和 30 万个带标签的查询可以处理。相对于如此庞大的模型,这不一定很大。

另一个重要的观察结果是,与 BERT 相关的架构在相当长的一段时间内一直占据着 MSMARCO 排行榜的主导地位。安娜·罗杰斯写了一篇很好的文章,讲述了当前使用排行榜来衡量自然语言处理任务中模型表现的趋势所面临的一些挑战。重要的一点是,我们在解释这些结果时应该小心,因为很难理解性能是来自于架构创新还是为了解决任务而部署的过多资源(读取过拟合)。

但是,尽管有这些评论,这里最重要的一点是,如果我们想研究语义向量的能力和局限性(预训练或未训练),我们应该理想地优先考虑不太偏向术语匹配信号的数据集。这可能是一个显而易见的结论,但我们目前不清楚的是在哪里可以找到这些数据集,因为由于类似的数据收集设计,这里报告的偏差可能存在于许多其他数据集中。

为什么你应该停止使用 ROC 曲线

原文:https://towardsdatascience.com/why-you-should-stop-using-the-roc-curve-a46a9adc728?source=collection_archive---------10-----------------------

最受欢迎的指标可能没有你想象的那么有意义

当我开始作为一名数据科学家工作时,我曾经用 ROC 曲线来衡量一个模型的好坏。毕竟这是标准。然后,有一天,一个更有经验的同事告诉我:

"你应该停止使用 ROC 曲线,而应该使用平均精度."

当场就没多想那句话。我只是听从了同事的建议。毕竟他很有经验,而我是个菜鸟。当然,他一定比我更清楚。

然而,过了一段时间,我开始怀疑是否存在一种令人信服的方法来证明一个指标是否以及为什么比另一个更好。

这有什么关系?因为,当我们依赖一个指标——比如 ROC 面积或平均精度——时,我们假设模型性能的许多方面可以包含在一个数字中。归根结底,这个数字才是最重要的。因此,我们需要确保我们的选择是明智的。

这篇文章讲述了我如何最终找到证据证明我的同事是对的。

0.快速复习… ROC 和平均精度

如果你已经对流行率、ROC 曲线和精确回忆曲线等概念有信心,你可以跳过这一段,安全地进入第 1 段。

在本帖中,我们将重点讨论 2 类分类问题。这些是机器学习中最常见的问题,而且非常普遍,因为回归问题和 n 类问题也可以追溯到这一类别,但反之则不然。

在 2 类分类问题中,我们有一些观察结果,我们希望创建一个模型,能够将它们分配到两类中的一类(阳性阴性)。例如,在欺诈检测中,我们可能希望将一些金融交易分为阳性(欺诈)和阴性(非欺诈)。

我们需要一些术语表来继续:

  • n:观察次数;
  • n_positives:阳性数;
  • n_negatives:底片数量;
  • prevalence:n_positives/n
  • n_predicted_positives:模型已分类为阳性的观察值的数量;
  • n_true_positives:模型正确分类为阳性的观察次数;
  • n_false_positives:模型将错误地归类为阳性的观察次数;
  • precision:n_true_positives/n_predicted_positives
  • recall:n_true_positives/n_positives
  • false_positive_rate:n_false_positives/n_negatives
  • roc_curve:给定模型的所有可能对(false_positive_raterecall)的集合,取决于概率阈值;
  • precision_recall_curve:给定模型的所有可能对(precisionrecall)的集合,取决于概率阈值;
  • roc_area:在roc_curve下的区域;
  • average_precision:位于precision_recall_curve下方的区域。

给定一个模型,它的 ROC 曲线和精确召回曲线看起来是这样的:

二元模型的 ROC 曲线和精确回忆曲线

这些曲线的面积(即积分)——分别命名为 ROC 面积和平均精度——具有一些有用的特性:

  • 它们被限制在 0 和 1 之间。
  • 0 表示最差的分类,1 表示最好的分类。所以,越高越好。
  • 对于 ROC-Area,随机分类的得分为 0.5,而对于平均精度,它等于prevalence

由于这些原因,ROC 面积和平均精度通常被用作模型的良好性度量。

这一段只是基本的悬崖笔记。如果你希望加深这些概念,你可以阅读这些文章: 《理解 AUC-ROC 曲线》bySarang nark hede 《超越准确性:精度与召回》byWill Koehrsen

1.一般化的需要……(也就是寻找模型空间)

第 1 段和第 2 段有点理论化。所以如果你想跳到第三段,你会被原谅的。但是如果你和我在一起,你将会获得书呆子奖章。

当我决定我希望弄清楚 ROC-Area 和 Average-Precision 有什么不同时,我意识到我需要把它一般化。事实上,专注于单一模式是没有用的。如果我这样做了,我就只有两个数字可以比较:ROC 面积和平均精度。显然,仅仅下结论是不够的。

我想到的程序如下:

  1. 选择一个分类问题(实物大小的问题,不是玩具问题);
  2. 生成 n 不同性能的模型(其中 n 足够大,像成千上万)确保它们涵盖广泛的性能
  3. 计算这些 n 模型的 ROC 面积和平均精度,
  4. 比较 n ROC-Areas 和nAverage-precision,看看我是否能一劳永逸地评估一个指标是否优于另一个。

我确信你发现了我计划中的漏洞。第二点。的确,你如何生成成千上万个不同的模型?最重要的是,您如何确保它们以“足够”不同的方式运行?我愣在了那里。直到我开始玩这个想法:

给定一个问题,有没有办法表示与之相关的所有可能的预测模型?换句话说,有没有一种方法来表示一个“模型空间”,即该问题所有可能模型的集合?

为了回答这个问题,我们来看一个小问题:4 个观测值,其中 2 个是阳性

仔细想想,预测概率所假设的实际值是不相关的。毕竟,任何预测模型的结果都是对观察结果的排序

例如,假设我们有两个模型和以下预测概率:

  • 模型 1 预测:[.6,. 1,. 9,. 4],
  • 模型 2 预测:[.99,. 8,. 999,. 9]。

模型 1 和模型 2 基本相当(不考虑校准)。事实上,在两个模型中,观察结果的等级是相同的:第三个观察结果风险更大,其次是第一个,然后是第四个,最后是第二个。

因此,一旦对预测的概率进行了排序,不管它们的实际值如何,所有可能的模型都必然属于以下 6 种情况之一:

具有 4 个观测值的二元分类问题的全模型空间,其中 2 个为正

其中白色和黑色瓦片分别代表阴性阳性

所以,所有可能模型的个数,简单来说就是 所有可能排列的个数。在组合学中,这被称为“重复排列”。

总共有n个元素,其中n_positives个重复(因为它们都是 1)n_negatives个重复(因为它们都是 0),可能的排列数是n! / n_positives! / n_negatives!。事实上,在我们的虚拟例子中,我们有4! / 2! / 2! = 6可能的模型。如果你想知道我是如何得到这个公式的,看看这个漂亮的解释:“重复排列”

这个特殊的公式,即a! / b! / c!(其中abc为非负整数,a = b + c)被称为二项式系数,它在数学中经常出现(例如二项式分布就是以它命名的)

因此,更深刻地说,我们可以说:

模型空间中存在的模型数量由正负二项式系数给出。

尽管这是一个有趣的结果,但一旦观察次数增加,它很快就变得不可用了。例如,对于 10,000 个观察值和 100 个阳性结果,我们将有大约 6 * 10 ^ 241 个可能的模型!

不用说,我无法计算一些 6 * 10 ^ 241 模型的 ROC 面积和平均精度。所以我不得不放弃使用整个模型空间的想法。

2.但是我不想放弃……(也就是缩小的模型空间)

然后,我必须找到一种更聪明的方法,而不仅仅是列出模型空间中存在的所有可能的模型。这意味着我不得不满足于一个更小的——或者“缩减的”——模型空间。这很好,只要缩减的模型空间能够概括原始的模型空间。

好的,但是我怎样才能实现它呢?我的意思是,获得完整的模型空间很容易:你只需要列举出所有的积极和消极的排列。但是如何获得一个简化的模型空间呢?这个没有秘方。

让我们再举一个小例子:10 次观察,其中 4 次是阳性。我们知道,完整的模型空间应该由10! / 4! / 6! = 210个模型组成。因此,目标是找到 n 个模型(其中 n 比 210 小得多),这样它们就代表了不同性能的“等级”。

如何实现这一点?经过一些尝试,我想出了一个主意。

具有 10 个观测值的二元分类问题的缩减模型空间,其中 4 个观测值是肯定的

这 7 种型号实际上符合我们的要求,因为:

  • 7 远小于 210,
  • 这些模型的性能从随机(ROC-Area 为 0.5)到最佳(ROC-Area 等于 1)之间有着完美的“细微差别”。请注意,我们可以安全地忽略比随机模型更差的模型,因为实际上它们并不存在。

现在,你能猜出我用来产生这些组合的模式吗?

我通过一个从0 到n_negatives循环得到了这个(在本例中,从 0 到 6)。在每次迭代中:

  • 正数不允许放在某个位置之前,由迭代器的值给出(从 0 到n_negatives);
  • 在这个位置之后,阳性被尽可能等距离地放置(为了创建一种“平均”随机放置)

这样,随着迭代器的增加,被越来越多地“推到”最高的概率,这意味着一个逐渐更好的模型。在最后一次迭代中,所有的积极因素都恰好对应于最高的概率,这意味着我们已经达到了可能的最佳模型。通过这个过程,我们得到了一个“浓缩的”模型空间,一个完整模型空间的忠实但较小的复制品。

这是一个非常方便的技巧,因为它极大地减少了我们需要考虑的模型数量,从疯狂的n! / n_positives! / n_negatives!到仅仅n_negatives + 1。在这个简单的例子中,从 210 到 7。但是增益会随着n的增长越来越大。

如果想看看算法的 Python 实现,可以在我的 Github 里找。

这个简单的算法使得这项工作对于所有实际大小的分类问题都是可行的!例如,对于一个 100 万个观察值,10,000 个肯定值的问题,缩减的模型空间“仅仅”包含 990,001 个模型。

任务完成!

所以我们可以进入有趣的部分,但是在我遵守我的承诺之前…

来源:滴滴出行

3.现在是有趣的部分……(也就是健身房的数据科学家)

如果你通过了第 1 段和第 2 段,你应该得到我所有的感谢。如果你没有,不要担心:有趣的(和相关的)部分来了。

在第 1 段和第 2 段中,我们发现了一种自动生成许多不同模型并确保它们表现不同的方法,探索了两个极端之间所有可能的细微差别:随机模型和完美(理论)模型。这就是我们所说的“缩减”模型空间。

现在,是时候做我们真正感兴趣的事情了:比较模型的 ROC 面积和平均精度,并尝试理解它们的行为。

让我们来看一个分类问题:

  • n:11111
  • prevalence : 10 %(即n_positives:1111 人,n_negatives:10000 人)

然后,我们可以用第 2 段中描述的算法获得缩减的模型空间。在这种情况下,我们将获得 10,001 个模型,这些模型的编号从 0(随机)到 10,000(尽可能好)。对于每个模型,计算 ROC 面积和平均精度。

这是结果:

在缩减的模型空间中,所有模型的 Roc 面积和平均精度之间的比较,10%患病率

当我第一次看到这个情节时,我有一个“啊哈”的时刻。

我的同事是对的!

ROC-Area 具有线性行为,而 Average-Precision 具有指数行为。指数行为比线性行为更真实。为什么?如果你去过健身房,你就已经知道了。

假设你没有参加训练,你决定在这个夏天保持健康。你得到了你的健身房会员资格。第一天可以卧推 50 公斤。然后,经过三个月的艰苦锻炼,你达到 100 公斤。太神奇了!不是吗?

但是我给你个坏消息:三个月后,你就不能卧推 150 公斤了。换句话说,你在卧推上的进步不是线性的。

这正是机器学习所发生的事情。获得一个好的模型是相对简单的,获得一个非常好的模型是极其困难的。

这也是平均精度的情况。获得良好的平均精度相对简单,获得非常好的平均精度却极其困难。

4.我看不出这有什么用……(也就是说,我该如何向老板解释?)

卧推隐喻通过平均精度的行为来反映。而在问题比较难的时候更是如此。事实上,让我们来看看不同流行率值的平均精确度是如何变化的。

不同精度级别的缩减模型空间中所有模型的平均精度

如您所见,在 50%的流行率下,平均精度与 ROC-Area 非常相似。但是,患病率越低,学习曲线就“越呈指数增长”。很直观。如他们所说,拥有一个非常低的流行率就像是大海捞针。草堆越大,问题越难。因此,越来越难达到高水平的平均精度。

这正是使用平均精度而不是 ROC 面积的要点。平均精度更现实,并且让您对模型的实际表现有一个公平的想法。

你还不相信吗?让我们回到我们已经在第 3 段看到的例子,10%的流行情况。

假设我们已经训练了 3 个模型,我们希望根据它们在一些测试数据上的表现来比较它们。在括号内,我们显示了模型空间内每个模型的分位数,其中 0%是随机的,100%是可能的最佳(理论)模型。这些是结果:

  • 逻辑回归(60%),
  • 普通梯度增强算法(80%),
  • 相同的梯度推进算法,带有一些智能超参数优化(87%)。

到目前为止,这并不奇怪:优化梯度推进比普通梯度推进做得更好,而普通梯度推进又比逻辑回归做得更好。但关键是:

有多好?

相信我:这不是哲学。在 Kaggle 挑战中,你可以选择平均精度或 ROC-Area:这没有什么区别,因为越高越好,这是毫无疑问的。

但是在现实生活中,回答“A 型比 B 型好多少?”至关重要的。例如:

为了 ROC-Area 多 1%,花 10 个小时超参数优化值得吗?平均精度提高 1%呢?

能够回答这些问题是数据科学家最重要的技能之一。这就是为什么平均精度和 ROC 面积之间的区别如此重要。

事实上,让我们来看看这 3 个模型将被放置在哪里,基于它们的百分位数:

基于百分位数的某些模型的 ROC 面积和平均精度方面的性能

让我们先关注 ROC-Area(左图)。通过逻辑回归,你可以达到 80%的 ROC 区域,这已经很不错了。随着梯度推进,你可以达到 90%,这是伟大的。然后,假设经过 10 个小时的超参数优化,您可以使用优化的梯度增强达到 93%的 ROC 面积。此时,你的老板可能会合理地问你:“这真的有必要吗?10 个小时在 ROC 地区获得 3%的收益?为什么我们不满足于 90%?”你的老板说得很有道理。

在中华民国地区,从 90%上升到 93%似乎没什么大不了。我们为什么要烦恼呢?

嗯,如果你看看平均精度,你会得到一个完全不同的画面。通过从未优化的梯度增强转移到优化的梯度增强,平均精度惊人地提高了 10%:平均精度提高了近三分之一,从 36%提高到 46%!

如果这是一个反欺诈模型,这将意味着在 100 个被标记为潜在欺诈的交易中,优化的梯度增强将比普通的梯度增强平均多猜测 10 个欺诈。

不需要机器学习博士学位就能意识到这有很大的不同。

5.总结

在这篇文章中,我们发现了一些关于二类分类问题的有用的东西。特别是,我们有:

  • 发现模型空间的维度(即给定问题的所有可能模型的集合)由二项式系数给出:n! / n_positives! / n_negatives!
  • 找到了一种算法来获得一个更小的空间,称为“缩减”模型空间,它是完整模型空间的忠实缩影。这是非常有用的,因为它允许与可承受数量的模型一起工作:仅仅是n_negatives + 1
  • 比较了 ROC 面积和平均精度,发现 ROC 面积的值随着模型质量的提高而线性增加,而平均精度呈指数增长;
  • 我注意到 ROC-Area 的值可能会误导我们,导致我们有时高估,有时低估模型的实际性能。平均精度的行为在了解模型运行情况方面更有表现力,因为它在区分一个好模型和一个非常好模型方面更有感觉。此外,它与精确度直接相关:一个人类可以理解的指标。

感谢您的阅读!我希望这篇文章对你有用。

我感谢反馈和建设性的批评。如果你想谈论这篇文章或其他相关话题,你可以发短信给我我的 Linkedin 联系人

注意:所有用于获得前面图的 Python 代码——包括构建简化模型空间的算法——都可以在这里找到:https://github . com/smazzanti/why _ you _ should _ stop _ using _ the _ roc _ curve

为什么你应该尝试贝叶斯方法的 A/B 测试

原文:https://towardsdatascience.com/why-you-should-try-the-bayesian-approach-of-a-b-testing-38b8079ea33a?source=collection_archive---------3-----------------------

A/B 测试的直观方式。贝叶斯方法的优势以及如何做到这一点。

【不确定性】nicubunu.photoCC BY-SA 2.0 下授权

“批判性思维是一个积极的、持续的过程。它要求我们都像贝叶斯人一样思考,随着新信息的到来更新我们的知识。”
丹尼尔·j·莱维汀, 谎言现场指南:信息时代的批判性思维

介绍

在我们深入使用贝叶斯估计方法背后的直觉之前,我们需要理解一些概念。这些概念包括:

  • 推断统计学
  • 贝叶斯 vs 频繁主义者
  • A/B 测试
  • 概率分布

什么是推断统计学?

推断统计是当你根据总体的样本来推断总体的一些情况,与描述统计相对,描述总体的一些情况。

说到推断统计,主要有两种哲学:频率主义推断和贝叶斯推断。众所周知,频率主义方法是更传统的统计推断方法,因此在大多数统计课程(尤其是入门课程)中被研究得更多。然而,许多人会认为贝叶斯方法更接近人类自然感知概率的方式。

PhilWolff 的【1132 —常客 vs . Bayesian s】获得了 CC BY-SA 2.0 的许可

贝叶斯方法包括基于新的证据更新一个人的信念。例如,你在看医生,因为你感觉不舒服,你认为你得了某种疾病。几个医生给你做了检查,他们对你的病情有不同的看法。这些被称为先验信念(先验概率)。在你接受检查后,他们会对你进行血液测试。根据测试,他们已经排除了一些他们最初预期的可能疾病,并根据结果更新了他们的信念。这种新的信念被称为后验信念(后验概率)。

贝叶斯方法:

  1. 探索观察到的数据。
  2. 选择一个概率分布来表示数据。这是你的可能性函数。
  3. 考虑你对似然函数参数的主观信念,选择一个先验分布
  4. 使用贝叶斯方法用你的观察数据更新先验分布,得到一个后验分布。后验分布是一种概率分布,它描述了观察数据后您对参数的更新信念。

我知道,我知道,很多术语,但我会尝试解释例子中的一切。

贝叶斯方法什么时候更好?

随着证据实例的数量接近无穷大(即样本量越大),贝叶斯结果与频率主义者结果越一致。随着证据实例的数量变少(即样本量越小),推论变得越不稳定。这导致 frequentist 估计有更多的差异,从而更大的置信区间。然而,由于贝叶斯方法包含了先验和返回概率,我们可以保留不确定性。先验越恰当,结果偏差越小。此外,频率估计经常导致不收敛,不允许的参数解决方案,和不准确的估计。此外,频率主义方法假设概率是事件的长期频率,因此依赖于渐近理论【1】。

如前所述,贝叶斯哲学接近人类的思维方式,这意味着推理更容易理解。我们将通过一个 A/B 测试的例子来展示贝叶斯方法的直观性。

AB 测试—作者:Seobility —许可: CC BY-SA 4.0

A/B 测试示例

A/B 测试是一种广泛使用的研究方法,用于比较单个变量的两个变量(A 和 B)并找出差异。它有许多应用,但最受欢迎的是比较网站、应用程序等的布局..frequentist 方法包括进行假设检验、计算 Z 值、p 值等..

在本例中,我们将对一款流行的手机益智游戏 Cookie Cats 进行 A/B 测试。你可以在这里找到数据集。在这个游戏中,玩家通过关卡前进,有时他们会到达一个大门,迫使玩家等待一定的时间或进行应用内购买。该应用程序的创建者希望根据两种不同的关卡放置位置来查看用户的保留率:30 级的关卡和 40 级的关卡。

游戏截图。

我们通过绘制数据(数据已经是干净的)并查看响应变量的分布图来开始分析。我们将分别分析两个响应变量。答案是 1 天和 7 天的保留率。当用户对于变体 A 玩了 30 轮或更多轮游戏时,1 天保留为真,否则为假。对于变体 B,当用户玩了 40 轮或更多轮游戏时,1 天保留为真,否则为假。这种保留可能性可以表示为伯努利分布,可以认为是返回布尔值(是或否)的任何单个试验的一组可能结果的分布。

现在选择先验分布

选择你以前的发行版可能很棘手。一般来说,样本量越小,为了获得更准确的结果,先前的分布应该提供更多的信息。例如,如果您有非常大的样本量,您可以选择弱信息先验分布,并获得与选择强信息先验分布类似的结果。

有不同类型的先验可供选择:

  • 信息性先验表达了关于变量的明确信息,当你有确凿的证据时可以使用。 共轭先验 与后验分布属于相同的概率分布族,并且这些也用作信息先验[2]。
  • 弱信息先验表达了关于变量的部分信息,用于将推断保持在合理的范围内(可以将其视为防止过度拟合)。
  • 无信息先验表达了关于变量的模糊信息,会增加欠拟合的机会。

这些先验应该根据可获得的证据水平来选择。这非常直观,因为一般来说,你掌握的证据越多,你就越不依赖最初的假设。

  1. 获取变量的样本大小。
  2. 然后我们需要得到每个变量的观察值;这存储为 0 和 1 的数组。
  3. 假设两个变量的保留率的真实概率。你的先验越强,信息越丰富,你的假设就越不可靠。后验概率主要由证据决定,而不是由任何原始假设决定,前提是原始假设承认证据所暗示的可能性。在这个例子中,我使用了不太可能是真实概率的值(因为它们不同于样本均值)
  4. 使用 pyMC 3 创建一个模型,并假设不同变量的先验分布(这些先验分布可以互不相同)。在本例中,我们使用贝塔分布作为先验,因为它是伯努利和二项式似然函数的共轭先验。贝塔分布的参数越大,你应该越有信心。参数是成功和失败。可以使用的弱信息先验的例子是具有参数[0,1]的均匀分布。您可以对两者进行测试,并看到由于我们的大样本量,最终结果大致相同。
  5. 定义确定性 delta 函数。这就是利益的未知。
  6. 以各自的先验分布为参数,定义两个变量的似然函数。
  7. 使用 MCMC 算法对 20,000 次(或任意多次)迭代进行采样,并丢弃前 1000 次迭代,因为这些迭代通常与我们感兴趣的最终分布无关。

结果

在图中,我们可以看到变量的后验分布和变量的差异。分布越广,我们对 p(A)和 p(B)的真实值就越不确定。真实变量的不确定性与样本大小成正比。使用贝叶斯方法的好处是,现在我们可以量化不确定性。此外,我们可以看到,delta 后验概率的大部分分布在 delta = 0 以上,这意味着变体 A 可能比变体 B. 更好

我们还可以计算变量的相对性能,并绘制它们。在图中,您可以看到变体 A. 可能有 1–3%的改进

结论

使用贝叶斯方法进行 A/B 测试有很多原因。然而,“天下没有免费的午餐”这句话适用于任何事情。最重要的是,你可以将这两种方法应用到 A/B 测试中,看看它们是如何比较的,以及每种方法的可解释性。

贝叶斯方法的优势在于:

  • 样本大小并不重要
  • 你可以量化不确定性
  • 它非常直观,也非常容易理解
  • 没有愚蠢的 p 值或 Z 值
  • 这是自然的

免责声明:事实上,我对贝叶斯估计非常陌生,遗憾的是,我主要是以传统方式学习的。

[## 迈克尔·拉曼/贝叶斯 _ A-B _ 测试

贝叶斯方法是进行 A/B 测试的一种非常直观的方法。与频率主义方法不同,它不包括…

github.com](https://github.com/michaelarman/Bayesian_A-B_testing)

参考

c .戴维森-皮隆(2016 年)。黑客的贝叶斯方法:概率编程和贝叶斯推理

Sanne C. Smid,Daniel McNeish,Milica mio EVI & Rens van de Schoot(2020)小样本背景下结构方程模型的贝叶斯与频率主义估计:系统综述,结构方程建模:多学科杂志,27:1,131–161,DOI:10.1080/10705511 . 2019 . 1577140[1]

古铁雷斯-佩纳、爱德华多和皮埃特罗·穆里埃。"共轭先验代表了强有力的实验前假设."英国牛津 OX4 2DQ 加辛顿路 9600 号布莱克威尔出版社,2004。[2]

为什么每个 python 项目都应该使用虚拟环境!

原文:https://towardsdatascience.com/why-you-should-use-a-virtual-environment-for-every-python-project-c17dab3b0fd0?source=collection_archive---------8-----------------------

虚拟环境如何加速和清理您的整体 python 工作流

帕特里克·托马索在 Unsplash 上的照片

想象一下,你想要一本特定的书,然后走进图书馆寻找。然而,令你震惊的是,整栋建筑内完全没有组织——没有办法区分小说和非小说;没办法知道哪个作者写了什么;根本没办法找到你的书。你去找图书管理员,问她具体的书在哪里,但她只告诉你“搜索一下。”要找到你非常想要的那本书,你唯一的选择就是搜索每一个。单身。书。英寸的。建筑。

这个库是您的计算机,更确切地说是您的 python 包 bin。所有这些杂乱无章的书籍都是你多年来为每个随机项目安装的无尽的软件包。现在,下一次你安装一些东西或者开始一个项目时,你将完全不知道这个包是否是最新的,它是否与另一个包或者 python 版本冲突,或者它是否存在。这样的混乱会导致痛苦和无聊的挫折,不仅会占用你的项目,还会占用你本来可以做更有成效的事情的时间。

你问的解决方案是什么?虚拟环境

什么是虚拟环境?

照片由 Unsplash 上的伊尼基·德尔·奥尔莫拍摄

我喜欢把虚拟环境想象成我每个项目的包装书架。如果我正在做一个烹饪项目,我没有必要有一本关于冲浪的书。类似地,如果我正在进行一个机器学习项目,我就没有必要拥有一个前端库。在我的“书架”上只有我需要的**包,这消除了我可能遇到严重的全局安装和包冲突错误的所有机会,并允许我专注于真正重要的东西——我的代码。

就像包一样,我也可以为我的项目指定我想要的 python 的什么具体版本。如果你想要一个 python3 项目,就启动一个 python3 环境——如果你想要一个 python2.7 项目,就启动一个 python 2.7 环境——如果你想要一个 python 3.5.3 环境,猜猜看,今天是你的幸运日!**

汤姆·温克尔斯在 Unsplash 上的照片

虚拟环境通过创建特殊的隔离环境来帮助解决这些问题,在隔离环境中,您安装的所有软件包和版本都只适用于该特定环境。这就像一个私人岛屿!—但对于代码来说。岛上发生的任何事都不影响你的大陆,你的大陆发生的任何事都不影响你的岛。

一旦你完成了这个项目,就跳出这个岛回到大陆。

如果你仍然不相信,让我们花一点时间来看看利弊:

优点:

  • 你可以在特定环境下使用任何版本的 python,而不必担心冲突(对我的 python 2.7 mac 用户大喊!)
  • 您可以更好地组织您的包,并且确切地知道您需要哪些包来运行您的代码,以防其他人需要在他们的机器上运行它
  • 您的主 python 包目录不会被不必要的 python 包淹没

CONS:

  • 嗯……也许是太空?最多几百兆?这算不算骗局?

结论:

总的来说,虚拟环境在处理不同的项目时变得非常方便。当然,如果您的项目不依赖于包,那么就不需要版本和包的私人孤岛;但是,如果您的项目确实需要几个包,那么虚拟环境除了提供帮助之外,绝对无能为力。首先,看看 venvvirtualenvpipenv——我很快会有一篇文章描述它们各自带来的优势以及如何开始使用它们!

编辑:后续文章现已出,点此查看!

为什么应该用 Python 包装 Decorators

原文:https://towardsdatascience.com/why-you-should-wrap-decorators-in-python-5ac3676835f9?source=collection_archive---------11-----------------------

提高您的 Python 技能

利用 functools.wraps

照片由本杰明·沃罗斯Unsplash 拍摄

介绍

装饰器是 Python 中的一个重要特性。本质上,装饰器是修改被装饰函数的行为而不改变其固有功能的函数。在 Python 中,使用 decorator 的最常见语法是将 decorator 函数放在要修饰的函数之上。装饰函数名以@符号作为前缀,表示它是一个装饰函数。下面来看看它最基本的用法。

装饰者的基本用法

在上面的代码中,我们定义了一个名为invocation_log的装饰函数,它将记录特定函数调用前后的消息。要使用这个装饰器,我们只需简单地将它放在要装饰的函数之上,在本例中为say_hello。不要忘记装饰函数名前面的@符号。让我们调用修饰函数,看看会发生什么。

修饰函数的调用

这三行输出正是我们从装修中可以期待的。具体来说,decorator 只记录了两条消息——在调用被修饰的函数之前和之后。值得注意的是,如前所述,修饰函数做它最初定义的事情,而装饰函数做它自己的工作而不影响修饰函数的功能。

问题

在调试过程中,我们有时需要检查特定的对象,以便更好地理解实现细节。让我们考虑下面对上面定义的修饰函数的检查。

修饰函数的字符串表示

如你所见,它并没有真正告诉我们它是什么。相反,它告诉我们这个函数是装饰函数的内部函数。这并不奇怪,因为使用@ symbol 作为 decorator 函数的前缀来修饰函数相当于下面几行代码。换句话说,装饰函数实际上是在装饰函数中定义的返回的内部函数。

修饰函数的显式创建

如果其他人使用我们的代码,一些人可能需要获取关于函数调用的更多细节。为此设计了一个方便的内置函数——help()函数。但是对修饰的功能有帮助吗?不完全是,因为它显示了内部函数的信息。

修饰函数的帮助

或者,有些人更喜欢查看函数的文档字符串。然而,它并不像你想象的那样工作。

修饰函数的文档字符串

此外,有时我们希望使用序列化程序保存代码,比如标准库中的 pickle 模块。但是,我们不能将修饰函数序列化为它现在的形式,因为模块不能序列化在修饰函数范围内的本地对象。

装饰功能的酸洗问题

解决方案

实际上解决方案一点也不困难——我们可以利用标准库中 functools 模块中的包装函数。有趣的是,包装了函数本身就是一个装饰器,我们将使用这个函数通过配置要装饰的函数来装饰内部函数。听起来不简单吗?用下面的例子就很好理解了。

包装装潢师

如上图所示,我们只是使用了装饰器包装函数,通过包装say_hello函数来装饰内部函数。这只是一行代码。让我们看看这个看似微不足道的变化之后,事情是如何变化的。

包装装饰器的调用

如上所示,当我们不使用包装器时,装饰器的功能保持不变。更重要的问题是被修饰的函数是否有不同的“表现形式”。让我们通过运行下面的代码来检查一下。

支票装饰包装

正如您从输出中看到的,一切都按预期运行。例如,文档字符串显示了那些在say_hello函数中定义的内容。我们现在能够序列化该函数以供进一步处理。

结论

在本文中,我们回顾了为什么以及如何在 functools 模块中使用 wraps decorator 来解决我们使用 decorator 时出现的几个突出问题。通过几行额外的代码,修饰函数就像其他常规函数一样具有期望的行为。

为什么你不应该去赌场(3 个统计概念)

原文:https://towardsdatascience.com/why-you-shouldnt-go-to-casinos-3-statistical-concepts-a3b600086463?source=collection_archive---------0-----------------------

庄家总是赢家。我们都知道这句话。但这不仅仅是一句话。这是一个简单的,数学证明的事实。你只需要知道三个统计学概念就能明白为什么赌场总是赢。

Unsplash 上拍摄

你在赌场。轮盘赌的轮盘在旋转,球在弹跳。蹦,蹦,蹦,你笑:“红了!”然后再弹一次。不,是黑色的!你又失去了一切,空着口袋回家。

嗯,我希望你不会——因为你不去赌场,不买刮刮乐,不玩彩票或任何赌博游戏。

为什么?因为这些游戏是为了让你赔钱而设计的。

在这篇文章中,我会告诉你为什么。(查看 播客 视频 版本吧!)

庄家总是赢。我们都知道这个短语。但这不仅仅是一句话。这是一个简单的,数学证明的事实。你只需要知道三个统计学概念就能明白为什么赌场总是赢。

这三个统计概念也经常出现在数据科学项目中。因此,如果您想知道我为什么在数据科学频道上谈论赌博,请放心,您也可以在您的数据科学职业生涯中利用这些知识。

总之,三个统计学概念。

这些是:

  • 生存偏差
  • 预期值
  • 和热手谬误

先说第一个。

生存偏差

每个人都喜欢好故事!一个好故事会流传下来。

我敢打赌,你也有一个朋友——或者朋友的朋友——在体育赌博中赢了大钱,或者从拉斯维加斯带着 10,000 美元回家,或者用刮刮卡赢得了去马耳他的梦幻之旅……所以赢了大钱。

诀窍在于,在赌博中,好故事总是以大赢而告终。有道理。我奶奶从来不谈论她上周是如何在彩票上玩家庭号码,又是第 200 次,什么也没中。但是她永远不会忘记 2003 年她赢得 6000 美元的时候。

这是为什么呢?

因为输了没意思。是日常。每个人都会这样。获胜是令人兴奋的,这是一个有趣的故事,即使是在多年以后。

赢大 的故事熬过了 无聊的过滤。

这就是为什么这个统计概念被称为存活率 偏差。在这种情况下,获胜的故事就是幸存的事情。而为什么是 偏差呢?

因为这里发生了什么?

我的大脑听到一个胜利的故事。这是一个数据点。然后它听到另一个,然后另一个,然后另一个。有时它也会听到失败的故事…但远没有现实中那么多。所以我可怜的大脑会有一个不成比例的大样本量的成功故事和相对较少的失败故事。它无意识地从扭曲的数据中创造出虚假的统计数据——因此它认为我获胜的机会比真实的大得多。

我愚蠢的大脑就是这样工作的。好吧,好吧,坏消息是不仅仅是我的大脑,你的也是。其实是每个人的大脑:人类就是这样被创造出来的。我们本能地认为,我们在游戏中获胜的机会比实际情况更大。因为生存偏差。

哦,当然,几乎所有的赌场和在线博彩公司都尽可能地放大这种效应。

不管怎样,如果没有生存偏见,我们会更理性地看待赌博的机会,可能我们都不会去赌场。因此,如果你听到一个好的获胜故事,你应该永远记住,这不是完整的画面…在完整的尺度上,房子总是赢

我一直这么说,顺便说一句:房子总是赢。但是我还没有解释它背后的数学原理。所以让我们继续讨论这个问题,并转向第二个统计学概念。

预期值

这里,我就不赘述期望值计算本身的细节了。但是可以看看这篇文章了解更多:期望值公式。

但是,让我们回来,让我谈一点关于期望值的问题。

期望值显示了如果你无限次下同样的赌注你会得到的平均值结果。

我知道,这听起来有点棘手,所以让我举一个简单的例子来说明这一点。

抛硬币。

抛硬币通常是一个公平的游戏。当你抛硬币时,有 50%-50%是正面或反面。假设你下注,如果是反面,你的钱翻倍,如果是正面,你的钱输光。如果你反复这样做几次,比如说 1000 轮,你的赢和输就会互相抵消。你的平均利润将是 0 美元。这意味着这个博弈的期望值正好是 0 美元。**

期望值-硬币投掷模拟(图片由作者提供)

轮盘中,有一个非常类似于抛硬币的赌注。那就是赌红对黑。但是在轮盘赌中,你赢的几率比掷硬币要低一点点。当你把 10 美元押在黑色时,你的期望值不是 0。每回合负 0.27 美元。同样,我不会在这里进入数学,看看我提到的文章。但关键是,在你玩的每一轮中,你平均输 27 美分。这似乎是很小的一笔钱。但是超过 1000 回合,加起来,你的损失大约是 270 美元。

期望值—轮盘模拟(图片由作者提供)

我的意思是,当然,期望值是一个理论值,但它总会在长期中表现出来。换句话说:玩的越多,输的越多。

重点是:轮盘赌是一种期望值为负的游戏——因为它的概率是以一种你长期会输的方式设计的。这并不是什么大秘密,赌场里的每一场游戏都是以负期望值设计的。

这就是为什么房子总是赢。

这是第二个统计学概念,期望值。

先说第三个统计学概念:

热手谬论

这是另一个偏见,它解释了为什么当人们在一个系列赛中获胜时,他们不会退出比赛。

首先,你必须知道概率是很微妙的。它的工作方式对人脑来说很难解释。有些事件极不可能发生。就像你掷硬币时连续得到 10 个正面的机会。出现这种情况的概率不到 0.1%。尽管如此,在足够大的样本量中,假设你投掷硬币 100,000 次,这将不可避免地发生,甚至多次。

同样的事情也会发生在你身上。例如,如果你玩 1000 轮轮盘赌,你很有可能会走运。

期望值—轮盘模拟—有幸运跑!(图片由作者提供)

当一个人处于好运中时,很容易感觉到她有一手好牌。所以她提高了标准,下了更大的赌注——希望从这些获胜系列中获得最大收益。但事实是,这些系列赛的胜利只不过是盲目的运气,从统计上来说,每个人都会时不时地遇到这种情况。

在赌博中,没有热手这回事。在赌场里,就像你赢得东西的速度一样快,你失去它的速度也一样快。".再说一次,你无法摆脱统计规律——你玩得越多,失去的机会就越大。记住,庄家永远是赢家。所以不要被热手谬论所迷惑。如果你去赌场玩(违反常识)并且赢了(赔率很低),你能做的最好的事情就是立即离开,并为自己的幸运而高兴!

结论

那么你为什么不应该去赌场呢?

因为 3 个简单的统计概念:

  • 生存偏差
  • 期望值
  • 和热手谬误

而且不要误会,赌不赌是你自己的选择。我明白了。玩的时候很好玩,运气好很好玩,赢了也很好玩。

我只是想让你理解赌博背后的数学原理,让你更现实地了解你的机会,以及为什么赌场总是赢。

data36.com 的孙铁麟·梅斯特

为什么您不应该使用邮政编码进行超本地和最后一英里分析

原文:https://towardsdatascience.com/why-you-shouldnt-use-zip-codes-for-your-hyperlocal-last-mile-analysis-3b9f8613bcc1?source=collection_archive---------85-----------------------

邮政编码和区域边界忽略了它们内部属性的细微差别!探索地理空间 数据科学中可修改的面积单位问题。

合著者:里沙卜·贾因

当用不同的区域定义计算时,纽约市各区域的市场潜力存在显著差异。

介绍

Locale.ai ,我们与许多最后一英里、超本地和移动公司合作。对于这些公司中的大多数来说,地理空间分析是至关重要的,通常,他们在 BI 平台上或内部使用开源工具构建内部仪表盘。

他们使用我们产品的原因之一是为了强调应该关注哪些领域,以及如何将他们的策略与这些领域联系起来。这里需要注意的是,这些区域不是我们传统定义的城市区域或邮政编码区域。在本帖中,我们将深入探讨为什么使用传统的区域定义不是进行地理空间分析的好主意。

地图并不总是说实话!

基于直觉逻辑,公司要么用邮政编码边界,要么用一些手绘的街区边界来绘制他们最关键的指标,如市场潜力、利用率、平均客户价值等。这些构成了决策的重要组成部分,如扩展到哪些领域、进行促销或提供更多供应。

现在,如果你是一家很少或没有同城业务的企业,这种差异对你来说可能并不显著。但是,如果你在最后一英里或超本地级别提供服务,洞察力的差异会对企业和城市团队的决策产生重大影响。

这让我想到了下一个问题: 为什么这种差异如此显著?

经常发生的情况是邮政编码或任意定义的街区边界,不同地区描述的细微差别往往会消失。

换句话说,我们视为一个大单元进行分析的邮政编码由许多更小的单元组成,这些单元在人口统计或经济潜力方面没有任何相似性。

来源:维基百科

举例来说,如果你住在帕洛阿尔托,你就是世界上最重要的创新中心的一部分,支付的房价中位数为 118 万美元。然而,就在火车轨道对面,18%的东帕洛阿尔托居民生活在贫困线以下,人均年收入为 18385 美元。

这两个领域的特征行为会非常不同,虽然它们会出现在你收集的数据中,但往往不容易挖掘出来。

在下一部分中,我们将向您展示地图是多么容易说谎,以及为什么您团队中的不同成员会根据相同的指标集推荐一个城市中完全不同的区域!

纽约城市管理者的悲哀

让我们假设你是优步的城市经理,想在你有高市场潜力或市场份额的地区开展有针对性的促销和打折活动。在这个练习中,我们使用了可用的优步出租车数据集这里和可用的纽约市黄色出租车数据集这里。现在,我们可以简单地将市场潜力定义为

对于我们的区域定义,我们选择纽约市住宅区和纽约市邮政编码区。使用这两个区域定义,我们计算市场潜力,这是曲线图:

左边和右边分别显示了邮政编码和居住区

对优步来说,更环保意味着更大的市场潜力,而 pinker 则意味着它在该领域已经做得很好了。当我们尝试根据 M.P 大于 70%的区域进行筛选,以确定开展促销活动的主要区域时,我们看到了以下区域:

市场潜力大于 70%的领域

我们得到的区域完全不同!

可修改的面积单位问题

因此,可以有把握地得出结论,基于我们用于分析的一组边界,决策完全改变了。这是地理空间数据科学中的一个经典问题,称为可修改面积单元问题 (MAUP)。

由于 MAUP 问题,我们的决策变得依赖于区域的形状和大小,而不是其中用户的实际特征。

理想的区域应该有理想的形状和大小。让我们考虑找到理想的形状。我们可以将地理平面分成同样大小的正方形,或者三角形、五边形或其他形状!我们在现场使用六边形而不是任何其他形状,你可以在这里一瞥为什么:

[## 空间建模花絮:蜂巢还是渔网?

为什么我们 Locale.ai 喜欢六边形网格?

medium.com](https://medium.com/locale-ai/spatial-modelling-tidbits-honeycomb-or-fishnets-68a453ac455e)

让我们使用 hexes 来绘制纽约市的 MP。优步有一个非常合适的库,可以将 lat,longs 转换成给定大小的 hex。你可以在这里找到更多相关信息

从可视化中,我们可以看到整个城市的市场潜力分布非常均匀。我们可以根据市场潜力筛选这些六边形,以获得开展促销活动的最佳区域。

六边形区域的市场潜力

减少更多偏差的另一种方法是不要将位置绑定到区域,这将引出我们的下一节。

进入,地理空间聚类!

这个想法是让数据决定 MP 应该理想地被计算的重要区域。像 DBSCAN 这样简单的基于密度的聚类算法可能是一个很好的起点!如果您想了解其他类型的集群,我们已经写过了:

[## 地理空间聚类:类型和用例

深入探究所有不同种类的集群及其用例。

medium.com](https://medium.com/locale-ai/geospatial-clustering-types-and-use-cases-6caedecfc7f0)

我们根据彼此的接近程度对所有位置进行聚类,从而找到密集的聚类。然后,我们计算这些区域的凸包得到区域边界。现在,我们有了从数据本身生成的区域,适合以减少人为偏差的方式计算 MP。同样,我们根据 M.P .大于 70%的区域进行过滤,得到这些地方:

由我们的算法检测到的具有最高市场潜力的热点。

值得注意的是,由于问题的性质和定义,一个简单的基于密度的方法可以在这里工作。

由于我们只考虑位置,所以基于密度的空间聚类提取了在用户行为方面更紧密结合的潜在区域。

为了使这个决策在业务用例中真正可靠,我们不仅仅使用一个指标,而是采用一组在某个领域对用户行为有很大影响的指标。例如,某个地区的上班族和大学生可能会表现出完全不同的出行模式。

现在,正如这里强调的那样,使用我们在 Locale.ai 建立的自动化学习技术进行相似性和聚类分析,我们的算法努力根据你关心的指标(增长潜力、单位经济性、超级用户)找到哪些领域表现相似,并向你展示你的每个业务单位应该关注哪些领域。

这使您能够保存或导出这些 区域配置文件 ,并在不同种类的分析中重复使用它们,然后跟踪它们以最大化您在这些区域中的收入、需求和盈利能力,而不是使用任意定义的边界。

完整的实验连同代码可在 这里 。请随意尝试一些其他数据集!

还有,如果你对执行有什么建议、疑惑或者反馈,可以在这里找我:LinkedIn

如果您已经了解到这一点,这里可以先睹为快,了解为什么这是我们整个平台的基础,以及我们在此基础上开发的所有技术:

相似性分析和特征重要性

我们的地理空间模型不仅发现具有独特特征的区域群,还告诉我们为什么该区域是独特的。因此,在根据指标组合识别区域集群的同时,它还可以确定对这些指标有最大影响的因素。

两个不同的区域不一定要靠得很近才能表现相似。你可以把其中一个作为试验区,在不同的城市观察和应用同样的策略。

通过异常检测进行实时监控

仅仅知道仅在班加罗尔或 SFO 没有满足 SLA 是不够的,这没有意义。了解哪里的订单被延迟或取消,或者某个地区异常高的延迟是否是由于下雨导致供应突然下降引起的,这些都是非常有价值的。

添加位置背景和异常情况可以使我们的洞察力变得非常可行,并使决策变得非常简单。

在现场,我们正在构建一个分析和可视化产品,以帮助城市和业务团队准确、实时地了解他们的运营情况,而没有任何妥协和依赖。如果您想要一个演示,然后访问我们的网站了解更多详情或通过LinkedInTwitter与我们联系。

最初发布于此:

[## 为什么您不应该使用邮政编码进行超本地和最后一英里分析

合著者:Rishabh Jain 在 Locale.ai,我们与许多最后一英里和超本地以及移动公司合作。对于…

blog.locale.ai](https://blog.locale.ai/why-you-shouldnt-use-zip-codes-for-your-hyperlocal-last-mile-analysis/)

阅读相似:

[## 空间自相关:空间对象如何影响附近的其他空间对象

深入探讨空间自相关及其行业使用案例

medium.com](https://medium.com/locale-ai/spatial-autocorrelation-how-spatial-objects-affect-other-nearby-spatial-objects-e05fa7d43de8)

为什么你会爱上 Python 列表

原文:https://towardsdatascience.com/why-you-will-fall-in-love-with-python-lists-29d8882db9c4?source=collection_archive---------36-----------------------

列表是有序的和可变的美味

照片由元素 5 数码像素拍摄

当你开始着手你的项目时,你需要选择如何解决你的问题。在 Python 中你会经常用到列表,所以你可能已经习惯了。列表是很好的工作方式。在本文中,我想向您展示列表的各种用例。

创建列表

列表的语法是[]。如果你想创建一个列表,有几种方法可以做到这一点。第一种方法是手动为其赋值:

my_list = ['Hello' , 'World']

逗号分隔列表中的元素。

您可以使用方法list()基于其他值或直接创建一个列表。

word = 'listme'
word_list = list(word)
print(word_list)*>>> ['l', 'i', 's', 't', 'm', 'e']*new_list = list('super great')
print(new_list)*>>> ['s', 'u', 'p', 'e', 'r', ' ', 'g', 'r', 'e', 'a', 't']*

列表可以包含多种类型。这是一个有效列表:

sick_list = ['a' , 1 , ('x','y','z') , ['eggs' , 'milk'] , {'eggs' : 4 , 'milk' : 3}]

您可以像这样检查您的列表中有哪些类型:

for element in sick_list:
    print(f'element {element} is type: {type(element)}')*>>>
element a is type: <class 'str'>
element 1 is type: <class 'int'>
element ('x', 'y', 'z') is type: <class 'tuple'>
element ['eggs', 'milk'] is type: <class 'list'>
element {'eggs': 4, 'milk': 3} is type: <class 'dict'>*

有时,您可能需要基于输入、数学或其他随机值创建列表。你可能会遇到这些:

my_list = ['a']*10
print(my_list)*>>> ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']*my_other_list = list(range(0,13))
print(my_other_list)*>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]*

访问元素

有几种方法可以访问列表中的元素。根据你想做的事情,如果你寻找的话,这些元素应该在那里。

如果希望遍历 python 列表中的元素,可以使用for-loop

如果您只需要值,您可以像这样简单地遍历它们:

my_list = [1,2,3,'a','b','c']
for element in my_list:
    print(element)

有时你可能也需要索引。如果你来自另一种语言,像这样使用range(len())可能很自然:

my_list = [1,2,3,'a','b','c']
for element in range(len(my_list)):
    print(f'index: {element} , value: {my_list[element]}')*>>>
index: 0 , value: 1
index: 1 , value: 2
index: 2 , value: 3
index: 3 , value: a
index: 4 , value: b
index: 5 , value: c*

虽然它打印的是您想要的东西,但它很难看,而且不是 pythonic 式的访问元素的方式。如果你需要索引而不仅仅是值,使用enumerate()

for index,value in enumerate(my_list):
    print(f'index: {index} , value: {value}')

从索引中返回值

如果你知道你的元素的索引,你可以简单地要求程序给你那个索引的值。

my_list = [1,2,3,'a','b','c']
#index:....0,1,2, 3 , 4 , 5print(f'I love the first number: {my_list[0]}')
print(f'A is my favorite letter: {my_list[3]}')*>>> I love the first number: 1
>>> A is my favorite letter: a*

元素在里面吗?

您可以通过使用 if 语句询问某个元素来检查它是否在您的列表中:

my_list = [1,2,3,'a','b','c']
num = 82
print(f'is the number {num} in my list?')
if num in my_list:
    print(f'{num} sure is in your list!')
else:
    print(f'sory, can\'t find {num} in your list')*>>> sory, can't find 82 in your list*

试着把num改成1,看看能不能在列表里找到。

元素在哪里?

如果你想知道 b 在你的列表中的什么位置,你可以用。index(),它将返回可以找到 b 的索引。

my_list = [1,2,3,'a','b','c','b','b']
print(my_list.index('b'))*>>> 4*

.index()返回 b 第一次出现的索引,并在此结束。你可以看到 b 在列表中出现的次数更多了。它们位于索引4,67处。

有几种方法可以访问 b 的所有索引。如果您熟悉列表理解,您可以这样做:

b_occurances = [index for index,element in enumerate(my_list) if element == 'b']
print(b_occurances)*>>> [4, 6, 7]*

限幅

照片由卢卡斯派克斯拍摄

与字符串一样,您可以对列表使用切片。语法是:

[start:stop:step]

如果你有一个字符串:‘Hello World’你可以通过切片来访问字符串的一部分。让我们看一个例子。

sentence = 'Hello World'print(sentence[:5]) #Hello
print(sentence[6:]) #World

在第一个打印行,我们从开始处打印(start 没有设置任何值,所以它从开始处开始),并在索引 5 处停止。幕后发生的事情是这样的:

sentence = 'Hello World'print(sentence[0:5:1]) #Hello
print(sentence[6:11:1]) #World

也可以从负指数开始。这意味着你走到字符串的末尾,从那里开始计数。

print(sentence[-5:]) #World

这也是为什么您可以像这样反转字符串:

print(sentence[::-1])

它看起来像一个黑客,但是你告诉代码从开始开始,在结尾结束,但是每一步后退一次迭代。

让我们把我们的句子转换成一个列表,然后处理它:

sentence_list = list(sentence)
print(sentence_list)*>>> ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']*

如果我们想抓住地狱的元素,我们可以使用与字符串相同的切片。

print(sentence_list[:4]) *>>> ['H', 'e', 'l', 'l']*

向列表中添加元素

照片由 Pexelscottonbro 拍摄

。追加()

有几种方法可以向列表中添加元素。一种方法是使用.append()方法

groceries = ['milk' , 'eggs' , 'cheese']
groceries.append('ham')
print(f'\nplease purchase:')
for element in groceries:
    print(f'*{element}')*>>>
please purchase:
*milk
*eggs
*cheese
*ham*

当你使用 append 时,你将把你的元素添加到列表的末尾。请注意,如果您试图将一个列表附加到另一个列表,您将简单地将整个列表作为一个新元素添加。如果您想将列表添加到列表中,您需要使用 extend。这段代码将简单地添加几个列表作为元素。

receipe = []
dry_ingredients = ['flour' , 'sugar']
wet_ingredients = ['milk' , 'eggs' , 'butter_melted']
receipe.append(dry_ingredients)
receipe.append(wet_ingredients)print(f'receipe: {receipe}')*>>> receipe: [['flour', 'sugar'], ['milk', 'eggs', 'butter_melted']]*

。扩展()

Extend 是向列表中添加元素的另一种方法。我们不需要将一个列表附加到另一个列表上,而是可以扩展它并得到以下结果:

ingredients = ['flour' , 'sugar']
more_ingredients = ['milk' , 'eggs' , 'butter_melted']ingredients.extend(more_ingredients)
print(f'receipe: {ingredients}')*>>> receipe: ['flour', 'sugar', 'milk', 'eggs', 'butter_melted']*

你可能会注意到它看起来与+=相似,的确如此。+=可以解决类似的问题,但是你也要考虑范围。尝试此方法并修复错误:

#variations of receipes with milk:
receipe_list = ['milk']def extend_receipe(add_list):
    receipe_list.extend(add_list)def plus_equals_receipe(add_list):
    receipe_list **+=** add_listcake = ['egg' , 'flour', 'butter']
bread = ['oat' , 'flour']extend_receipe(cake)
print(receipe_list)
**plus_equals_receipe(bread)**
print(receipe_list)*>>> UnboundLocalError: local variable ‘receipe_list’ referenced before assignment*

。插入()

您可以通过指向其索引来更改列表中的现有值,并替换该值,如下所示:

my_list = ['a','b','c']
my_list[1] = 'B'print(my_list)*>>> ['a','B','c']*

您甚至可以使用切片来编辑范围

my_list = ['a','b','c']
my_list[0:3] = ['A','B','C']
print(my_list)*>>> ['A', 'B', 'C']*

通过指向列表末尾后的下一个索引来尝试添加一个值可能很有诱惑力,如下所示:

my_list = ['a','b','c']
my_list[3] = 'd'print(my_list)

这是行不通的,因为你试图先访问一个在列表之外的索引,然后再把值加进去。现在还不存在。如果d在列表的末尾,您通常会使用 append 来添加它,但是使用.insert()您也可以选择想要添加元素的位置。.insert()的语法是:

list.insert(index,element)

这里我们用它在ac之间添加b

my_list = ['a','c']
my_list.insert(1,'b')print(my_list)*>>> ['a', 'b', 'c']*

从列表中删除元素

照片由 cottonbroPexels 拍摄

有几种方法可以从列表中删除元素。它们有不同的功能,你需要考虑你的项目需要什么来决定如何移除元素。

。移除()

顾名思义,从列表中删除一个元素。

my_list = [1,2,3,'a','b','c']
my_list.remove('b')
print(my_list)*>>> [1, 2, 3, 'a', 'c', 'b']*

像使用index()一样,remove 只删除第一次出现的作为参数传递的元素。在我们的例子中b被删除了,但是只有第一个b

如果你想删除所有出现的b怎么办?你能像这样循环吗?

my_list = ['b',1,'b',2,3,'a','b','c','b','b','b','b']
for element in my_list:
    if element == 'b':
        my_list.remove(element)
print(my_list)*>>> [1, 2, 3, 'a', 'c', 'b', 'b']*

不,这样做的原因是删除会使列表更短。如果你把它分解,你就会明白为什么。这段代码将使您更容易:

my_list = ['b',1,'a','b','c','b','b','b','b']
print (f'list lenght is: {len(my_list)}')
for index,element in enumerate(my_list):
    print(f'working on index: {index} , value: {element}')
    if element == 'b':
        my_list.remove(element)
        print(f'removed value \"{element}\" from index {index}')
        print(f'new list looks like this: {my_list}')
print(my_list)

让我们看看输出:

list lenght is: 9
working on index: **0** , value: **b**
**removed value "b" from index 0**
new list looks like this: [1, 'a', 'b', 'c', 'b', 'b', 'b', 'b']
working on index: **1** , value: **a**
working on index: 2 , value: b
removed value "b" from index 2
new list looks like this: [1, 'a', 'c', 'b', 'b', 'b', 'b']
working on index: 3 , value: b
removed value "b" from index 3
new list looks like this: [1, 'a', 'c', 'b', 'b', 'b']
working on index: 4 , value: b
removed value "b" from index 4
new list looks like this: [1, 'a', 'c', 'b', 'b']
[1, 'a', 'c', 'b', 'b']

如果我们仔细看看这部分:

working on index: **0** , value: **b**
**removed value "b" from index 0**
new list looks like this: [1, 'a', 'b', 'c', 'b', 'b', 'b', 'b']
working on index: **1** , value: **a**

我们可以看到,当程序在索引 0 上工作时,它找到了一个 b,它按照你告诉它的去做,并删除了那个元素。新列表现在缺少第一个 b。

下一个要查看的索引是索引 1。记住,我们仍在循环中。我们完成了索引 0,现在我们跳到索引 1。问题是索引 1 现在是a,索引 0 是1。新旧列表之间没有链接,所以我们实际上缺少了一个元素— 11不会发生任何事情

这也是接下来会发生的事情,我们会剩下一个不起作用的程序,在这个程序中,b 会出现几次。

一种解决方案是对这个操作也使用列表理解

my_list[:] = [element for element in my_list if element !='b']
print(my_list)

注意[:]正在修改列表,而不是创建一个新的变量。如果您这样做:

my_list = [element for element in my_list if element !='b']
print(my_list)

my_list现在有了新的 ID 而不是被修改。

my_list = ['b',1,'a','b','c','b','b','b','b']
print(id(my_list))my_list[:] = [element for element in my_list if element !='b']
print(id(my_list))my_list = [element for element in my_list if element !='b']
print(id(my_list))*>>>
140559114976896
140559114976896
14055911497****6768***

你可以用print(id(my_list))来检查这个

或者,您只需创建一个新列表

new_list = [element for element in my_list if element !='b']
print(my_list)

append()extend()是其他方法的例子,它们在适当的位置工作,并且不会改变列表的 ID。

short_list = ['x','y']
print(id(short_list))
short_list.append('z')
print(id(short_list))*>>>
140559114976896
140559114976896*

。流行()

.pop()从列表中删除一个元素。removepop之间有一个小小的区别,那就是pop返回你移除的值。您还可以告诉 pop 您想要删除什么索引。默认位于列表的末尾。

my_list = ['b',1,'a']
#remove last item:
my_list.pop()
print(my_list)#remove 'b' at index 0
my_list.pop(0)
print(my_list)*>>>
['b', 1]
[1]*

由于 pop 返回值,您可以将它存储在变量中,也可以直接使用它。

my_list = ['b',1,'a']
new_list = []new_list.append(my_list.pop(1))
print(new_list)*>>> [1]*

。清除()

如果您想完全清除列表,可以使用。清除()。它完全符合您的预期。

clear_list = ['a',2,3]
clear_list.clear()print(clear_list)*>>> []*

其他有用的方法

当然,除了在列表中添加和删除元素之外,您还可以做更多的事情。让我们看一看。

。计数()

与返回列表长度的len(my_list)不同,.count()可以让你知道一个元素在列表中出现了多少次。

my_list = [1,1,1,2,3,3]
print(len(my_list))
print(my_list.count(1))*>>>
6
3*

。排序()

这些方法的名字非常具有描述性,并且很明显这也是做什么的。如果你使用.sort(),它会对列表进行排序。因为它就地工作并修改列表,所以您不能这样做:

my_list = [1,8,4,2,3,3]
print(my_list.sort())*>>> None*

但是,如果您进行排序,然后再次打印列表,您将打印排序后的列表:

my_list = [1,8,4,2,3,3]
my_list.sort()
print(my_list)*>>> [1, 2, 3, 3, 4, 8]*

您可能已经知道 sorted()函数。如果你尝试上面的列表,你可以这样做:

my_list = [1,8,4,2,3,3]
sorted_list = sorted(my_list)print(my_list)
print(sorted_list)
print(sorted(my_list))*>>>
[1, 8, 4, 2, 3, 3]
[1, 2, 3, 3, 4, 8]
[1, 2, 3, 3, 4, 8]*

。反向()

我们已经讨论了反转列表的方法。像 sort 一样,reverse 将就地编辑列表。

my_list = [1,8,4,2,3,3]
print(my_list)
my_list.reverse()
print(my_list)*>>>
[1, 8, 4, 2, 3, 3]
[3, 3, 2, 4, 8, 1]*

你也可以在列表上使用 python 的内置reversed()

print('reverse...')
my_list = [1,8,4,2,3,3]reversed_list = reversed(my_list)
print(reversed_list)
print(list(reversed(my_list)))*>>>
<list_reverseiterator object at 0x7f9e601529a0>
[3, 3, 2, 4, 8, 1]*

因为reversed()返回了一个迭代器,我们用这个迭代器创建了一个列表,打印出了一个漂亮的反向列表。

我们已经用切片反转了列表。

my_list = [1,2,3]
print(my_list[::-1])

。复制()

需要复制一个列表吗?

copy_from = [3,3,4,4,4]
copy_to = copy_from.copy()

拆包列表

您可以通过给元素分配变量来解包列表。假设列表中的前两个元素需要变量,剩下的就不用了。然后你还需要分配最后一个元素。

my_list = ['FirstName' , 'LastName' , '.txt' ,'.jpg' ,'.png','.docx', True]
first_name,last_name,*ext,approved = my_list
print(first_name)
print(last_name)
print(ext)
print(approved)*>>>
FirstName
LastName
['.txt', '.jpg', '.png', '.docx']
True*

。加入()

要将列表元素连接成一个字符串,可以使用。join()方法。它适用于字符串类型的元素。

my_list = ['FirstName' , 'LastName' , '.txt' ,'.jpg' ,'.png','.docx']
sentence = ' '.join(my_list)
print(sentence)*>>> FirstName LastName .txt .jpg .png .docx*

之前。join()你可以看到我们创建了一个空间。这是分离器。如果您愿意,您可以使用其他分隔符。

sentence = '-'.join(my_list)*>>> FirstName-LastName-.txt-.jpg-.png-.docx*

。zip()

如果你想压缩两个列表的元素,你可以使用 zip 方法。有了两个列表,你可以创建相应索引的元组对。

coordinates = ['x','y','z']
coor_values = [10,33,90]zipped_coordinates = zip(coordinates,coor_values)
print (zipped_coordinates)
print(list(zipped_coordinates))*>>>
<zip object at 0x7fd9f0076480>
[('x', 10), ('y', 33), ('z', 90)]*

和 reversed 一样,zip 返回一个迭代器。如果我们创建一个迭代器列表,我们得到元组对。如果列表长度不等,它将只考虑你传递的第一个列表。

coordinates = ['x','y']
coor_values = [10,33,90]
print(list(zip(coordinates,coor_values)))*>>> [('x', 10), ('y', 33)]*

最后

Python 列表太棒了!当你选择列表的正确用法时,你必须单独看所有的项目。也许你的项目会受益于字典。如果你想要不可变的对象,也许你正在寻找元组。

列表是超级通用的,所以如果你最终使用它们,你会有一个很大的用例库。

感谢阅读

-M

为什么您的公司需要一个数据洞察中心

原文:https://towardsdatascience.com/why-your-company-needs-a-central-hub-for-data-insights-e73a96bd648f?source=collection_archive---------47-----------------------

Gabriel Sollmann 在 Unsplash 上的照片

扩展数据驱动的决策

知识管理的一个问题

如今,全世界的公司都在投资各种方法,利用数据来帮助制定业务决策。企业可用的数据量呈爆炸式增长。对于那些学会应用这些数据洞察来推动更大商业价值的公司来说,这是一个巨大的优势。

然而,大多数公司只实现了这些见解的一小部分潜在价值,因为并非公司中的每个人都能够真正获得这些见解。

这是为什么呢?查看和分析数据的技术团队与组织内的非技术利益相关者(也就是其他所有人)之间存在脱节。这在很大程度上是因为所使用的工具技术性很强,将结果转换成更具可读性的格式以面向更广泛的受众仍然是一个持续的障碍。这导致了大量通过电子邮件和演示进行一对一的分享,而不是大规模的发布。

那么,我们如何在整个组织中有效地交流见解呢?答案是有一个集中的、正式的知识管理系统。以 Airbnb 为例——他们实际上建立了自己的开源工具来解决这个问题,并帮助他们的公司扩大利用数据做出决策的能力。

在这篇文章中,我将提出这样一个论点,即每家公司都需要做同样的事情,以促进更好地分享和组织知识,从而推动整个组织的讨论和学习。

  • 首先,我将讲述为什么我们要分享见解,以及发现和分享之间的区别。
  • 其次,我将讨论当前数据科学工具存在的挑战。
  • 最后,我们将看一个企业在采用这种中央知识中心前后的例子。

免责声明:我是 Kyso 的联合创始人之一,这是我们对数据中未被发现的知识问题的解决方案,是技术报告的中心。当然,我很乐意你使用我们的平台,但我还是要提出一个总的论点,为什么你应该建立一些分享见解的系统——不管这个系统是什么。

我们为什么分享&发现与分享

如果收集数据、建模和做出预测的目标是帮助每个人对组织的业务目标做出贡献,那么每个人都需要获得洞察力,以做出明智的数据驱动的决策。

公司如何确保这种情况在整个组织中发生?一个好方法是实现一个系统,在这个系统中,从数据分析创建报告的过程尽可能无缝。通过这种方式,他们洞察力的力量很容易被企业中的其他相关代理发现。让我们称之为民主化的见解。

我们分享结果,将见解转化为行动。但是,如果共享只是在请求时发生,而不是在一对多的系统中发生,那么整个组织中的业务代理在他们各自的角色中将会效率较低。为什么?因为与他们职位相关的数据洞察力没有有效地传达给他们。我们希望在所有业务领域推动基于分析的行动。

我们在这里做的一个主要区别是分享和发现之间的区别。我们都分享分析,通常是一对一的。我们共享屏幕、发电子邮件、做演示、在闲暇时或喝咖啡时讨论结果。

但是这些见解被孤立在所有这些不同的子群体中。爱丽丝与鲍勃分享,但链条就此停止。让人们发现你的工作真的真的很重要,因为其他人可以从这些私人分享的见解中受益,一些爱丽丝甚至没有想到的人。

如果企业中不同类型的利益相关者能够发现这些结果,并将其用于自己的工作,将会带来巨大的好处。发现是一个关键问题,已经产生了许多不同的工具,从一般的知识中心,如概念 & 汇合,到其他更多技术内容的平台,如 Github

这就是问题所在。

数据科学工具的挑战

数据科学家使用的工具,例如 Jupyter & R notebooks,仅由企业内的技术成员使用,他们用于共享、发现和再现的平台,如 Github,通常仅限于这些技术利益相关者。

需要某种东西来弥合这一鸿沟,将数据团队的工作流连接到整个公司的通用报告系统。

正如开篇提到的,Airbnb 建立了他们自己的解决方案,并且开源。Stripe 还构建了一个内部工具系统——虽然主要是为他们的技术团队,但其开发的目标是在一个中央知识库中共享结果。

像这样的中央知识管理系统的目标是让越来越多的利益相关者更好地使用数据洞察力并与之互动,并促进这些洞察力在整个企业中的更广泛交流。

个案研究

让我们想象一个你们很多人都熟悉的场景——一个将受益于集中式知识中心的示例组织,特别是在数据洞察方面。

ACME Inc .是一家在线 SaaS 公司,运行基于订阅的模型,为使用其产品的团队按座位(或用户)收费。它们是一个在线消息应用,在某些方面类似于 Slack 。首席执行官 James 希望更好地了解客户的行为&要求数据科学家 Sarah 撰写一份报告。

她开始在 Jupyter 笔记本上工作,从 MongoDB 导入公司数据,并绘制出一些关于用户如何使用该产品的关键分析。

  • 她绘制了一个简单的团队规模与团队数量的直方图。
  • 她还绘制了团队相对于团队规模的帖子数量(想想关于观点或融合的文章)和评论数量。
  • Sarah 发现帖子数量与团队规模之间存在超线性关系。超过 400 人的团队更多地使用该平台。评论数量的结果是一样的。

如果没有中心地方分享这个分析:

莎拉只需将报告通过电子邮件发送给首席执行官,由他阅读即可。莎拉可能会和她的一些直接同事讨论结果。首席执行官可能会通知董事会或投资者。但是,由于没有发现机制,产生的见解没有在公司内部得到广泛分享。

如果 ACME Inc .确实有一个中央枢纽会怎样?

鉴于整个世界现在都在远程工作,也许他们甚至被迫建立了一个。Sarah 将报告发布到内部知识中心——例如,idea、Confluence 或 Kyso。公司里的每个人现在都可以发现和阅读它。

  • 产品团队的玛丽看到了这份报告。Sarah 没有直接连接,但 Mary 在集线器上发现了它。而在产品工程团队中,以上的依赖对于 Mary 和她的团队的目标来说真的很有意思。为什么会存在这种关系?也许是因为,随着团队规模的扩大,联系的数量也在增加。或者这可能是一个政治问题——公司越大,工程副总裁越有可能推动该应用的内部使用。这种见解对 Mary 和她的团队显然很有价值。
  • 市场部的帕特里克也发现了这份报告。因为 Patrick 有固定的月度营销预算,他现在可能会决定专注于更大规模的团队领导,或者那些有潜力扩大的团队领导。因为公司是按座位收费的,这显然是帕特里克的一个相关见解。
  • 基础设施团队的芭芭拉怎么样?也许提供服务的成本并不均衡——她担心为更大的公司提供服务过于昂贵,因此他们需要提高系统的效率,或者她可能会在内部提出将重点放在更小的团队上。

因此,我们不仅有一个共享分析的中央系统,而且这个系统现在也在推动不同部门之间的交流。这是一个典型公司的例子,说明了从没有监管系统到有一个集中的结果场所是如何改变公司内部决策的。

不同职位的所有不同利益相关者,使用稍微不同的方法,在一个统一的平台上共享和交流他们的报告和项目。

结论

当所有相关利益相关者(即公司中的每个人)都可以使用数据,并使用正确的工具将数据转化为可操作的见解时,组织中对数据和分析价值的总体理解就会增加。每个人都可以开始通过更大规模的数据驱动决策来贡献商业价值。

在将数据科学家的工作与围绕业务做出的日常决策联系起来的过程中,数据团队将不再是组织中的瓶颈,而是更好的业务决策的驱动因素。在这样做的过程中,他们还在组织中建立了对分析能为业务做什么的更高层次的理解。需要专业知识的新项目将会运行得更加顺畅和快速。

我们在本文开头评论了当今的公司是如何跨各种业务应用程序收集大量数据的。将这些数据提供给他们的数据工程师、科学家和分析师是扩展数据驱动决策的第一步。第二步是让业务用户获得这些结果。

只有真正了解这两个方面的公司才能成功地让他们的组织做出大规模的数据驱动型决策并持续改进。将分析放在多数人手中将保持或提高他们的竞争优势。

为什么你的公司需要一名数据工程师

原文:https://towardsdatascience.com/why-your-company-needs-a-data-engineer-51735a1e5cf0?source=collection_archive---------23-----------------------

我们是现代的淘金者

刘玉英在 Unsplash 上的照片

数据专家在过去 5 年中呈指数级增长。越来越多的公司开始意识到数据的重要性,以及数据提升所有业务领域的能力,包括面向客户和内部业务。

2020 年,数据工程师在 LinkedIn 的新兴工作报告中被列为第八大增长最快的工作。另外两个数据角色也榜上有名:数据科学家(第三)和人工智能专家(第一)。这不是巧合,这些角色之间都有很深的联系。

你可能已经理解了对数据科学家的需求,但是在这篇文章中,我将讨论为什么数据工程师应该被认为是同样重要的。

[## 什么是数据工程师?

线索:我们是数据科学推动者!

towardsdatascience.com](/what-is-a-data-engineer-8084680048)

现代公司需要数据驱动

Gartner 在 2019 年发布的一篇文章称,数据是公司增长的关键驱动力,但却没有得到应有的重视。

“数据和分析是组织数字化和转型工作的关键催化剂。然而今天,只有不到 50%的记录在案的企业战略提到数据和分析是实现企业价值的基本组成部分。”

我认为可以肯定地说,我们都明白公司需要数据驱动,但许多公司只是在表面上做了些尝试。不到 50%的公司在其战略中记录了 it,为什么数据角色在增长列表中排名如此之高?

Gartner 的帖子也有这个问题的答案。

“到 2022 年,90%的企业战略将明确提到信息是关键的企业资产,分析是一项基本能力。”

Gartner 预计,在短短几年内,围绕分析制定战略的公司将增加 40%。这种增长已经开始导致许多公司投资于数据专家。数据科学是热门的新技术角色。

数据科学是现代分析的典型代表。人工智能和机器学习让领导者兴奋,这是理所当然的。就在十年前,为任何规模的企业提供的功能还是一个白日梦。然而,我觉得许多公司都被这种宣传所迷惑,并相信他们只需要几个数据科学家就可以将他们的业务转变为一个未来的、数据驱动的实体。

现在,不要误会我的意思,我不是想贬低数据科学的重要性。其实完全相反。任何想要真正成为数据驱动的公司都需要投资数据科学,但仅凭这一点,可能无法达到预期的效果。

当对科学的渴望与工程才华相结合时,数据的真正力量就显现出来了。

没有工程学,登上月球的科学永远不可能实现。

数据科学推动者

在谈到建立数据团队的 5 个常见陷阱时,Laurence Goasduff 在 Gartner 的一篇文章中谈到了如何克服数据和分析技能的不足。有趣的是,他的观点是,对数据科学家的需求远远高于供应。

虽然我部分相信这种观点,但我认为他在文章的后面提供了理由。

“到 2023 年,数据科学家和分析师将损失 60%至 70%的生产时间,用于寻找、准备、集成和共享数据集等活动,这使得数据工程师成为他们团队中的必备角色。”

在我看来,对数据科学家的需求很高,因为公司需要比预期更长的时间来实现现有团队的好处,所以他们正在寻求增加更多的数据科学家来帮助分散工作量。

这就像有一个前端 web 开发团队并雇佣更多的前端开发人员,因为他们在后端 API 和数据库上花费了太多的时间。

相反,他们应该寻求提高团队的效率,消除 60%到 70%的生产时间损失。这是数据工程师的发迹之地。我们是数据科学推动者。

与其花钱雇佣更多的数据科学家,不如把钱花在释放现有的数据科学家上。数据工程角色是围绕获取、清理和集成整个公司的数据而建立的。让数据科学团队深入研究问题所需的所有前期工作都应该由数据工程师完成。

这不仅会提高数据科学团队的效率,还会提高他们的产出。您的数据是一种资产,应该如此对待。让一名工程师在您的数据平台中构建可靠、可扩展和可重复的实践,对于任何希望利用分析实现增长的公司来说都是至关重要的。

这是另一个封闭空间的类比,因为我可以。

为了更快到达月球,你不需要更多的宇航员。你需要人们建造火箭,让宇航员完成他们的工作。

您的数据足迹只会越来越大

成为一家数据驱动型公司的全部意义在于,你可以利用这些见解来实现增长。使用数据来了解客户和业务是如何运作的,可以让你运用技术来实现更快的增长。随着这种增长而来的是更多的数据,这种循环还在继续。

随着数据的增长,管理数据的任务也在增加。您需要确保您可以针对以下需求进行扩展:

  • 数据吞吐量
  • 分析大量数据
  • 实时预测、洞察和客户反馈
  • 数据安全
  • 数据法规和合规性

所有这些都可以打包成数据工程角色。数据工程师可以让您的企业通过以下方式进行扩展:

  • 增加数据管道吞吐量
  • 用于可扩展分析的数据仓库
  • 构建实时数据平台
  • 确保数据在移动和静止时都是安全的
  • 自动化数据合规性和审计

如果你真的想成为一个以数据为中心的组织,那么管理数据平台是最重要的第一步。不仅如此,您还可以扩展和解放您的数据工程师,而且数据安全性、合规性和隐私也是当前的热门话题(理应如此)。

由于其数据管理政策,一个公司可以从英雄到零(见脸书)。人们越来越关注他们的数据足迹,您的首要目标应该是首先保护他们的数据。

毕竟,他们的数据是你能够快速增长的原因,所以在通过分析获得收益之前,先投资于这项资产。

想看独家数据工程内容?然后 注册我的简讯 学习现实世界的数据工程技术,并接收个人策划的内容。我还经常在时事通讯中刊登订阅者的文章,以增加你的影响力

为什么您的公司应该关注命名实体识别

原文:https://towardsdatascience.com/why-your-company-should-care-about-named-entity-recognition-e00de2f45700?source=collection_archive---------54-----------------------

命名实体识别的一个用例,展示了它为什么如此有用。

来源: PhotoMIX 公司来自 Pexels (CC0)。

命名实体识别是将文本分类成实体的任务,例如人、地点和日期。例如,对于句子On April 30, 1789, George Washington was inaugurated as the first president of the United States,该句子可以用以下实体来标记:

图片来自 Zach Monge

你可能会想,这到底有什么用?嗯,命名实体识别有许多潜在的用途,但其中一个是能够使数据库易于搜索。您可能会想,为什么我需要标记实体来使数据库易于搜索呢?我不能用简单的字典查找来精确匹配术语吗?嗯,是的,你可以,但这远远不是理想的,只是为了向你展示没有命名实体识别的搜索是多么无效,让我们通过一个真实的例子。

例子

最近,我在当地的杂货店 Weis Markets 点餐,并试图将濮培德冷冻鸡爪加入我的购物车。所以我在搜索栏里输入:

Zach Monge 从 Weis Markets 拍摄的图片

令我失望的是,我的搜索没有产生任何结果:

Zach Monge 从 Weis Markets 拍摄的图片

起初我以为他们可能没货了,但在搜索了几个其他项目后,我一直没有结果。过了一段时间,我开始怀疑 Weis 的搜索引擎只能找到几乎与产品标签完全匹配的搜索词(注意:我实际上并不知道 Weis 搜索引擎背后的机制)。所以我在谷歌上查找我想要的鸡爪的确切名称,我意识到它们被称为鸡而不是手指(当然!).于是我在搜索框里输入perdue chicken tenders成功了!然后,我成功地将鸡腿添加到我的购物车中。

Zach Monge 从 Weis Markets 拍摄的图片

Zach Monge 从 Weis Markets 拍摄的图片

我很高兴我能够将鸡腿添加到我的购物车中,但这是一项很大的工作,只是找到一个项目,我对其他几个项目也有同样的问题。这让 Weis 的网购几乎无法使用!从那以后,我再也没有在这家商店网购过食品——这实在是太麻烦了。

解决方案

幸运的是,对于 Weis Market 来说,有一个简单的方法可以解决他们的搜索引擎问题,那就是使用命名实体识别。通过命名实体识别,搜索引擎应该自动标记每个实体。例如,当我输入perdue chicken fingers时,它应该将Perdue标记为品牌,将chicken fingers标记为鸡肉嫩(我不是食品类别的专家,所以我实际上不知道鸡肉嫩是否是一个有用的类别)。

图片来自 Zach Monge

然后,这将搜索一个数据库,其中每个项目都已事先标记。所以我想要的实际鸡爪可能之前已经被贴上了以下类别的标签:品牌=濮培德;美食=鸡嫩;冷冻、新鲜、罐装:冷冻。

图片来自 Zach Monge

通过使用这些实体和一个结构化的数据库,我对perdue chicken fingers的搜索将会匹配到作为品牌的Perdue和作为食物的chicken tender,并且可能会在搜索结果中包含我想要的鸡爪。

结论

如你所见,命名实体识别非常有用,而且对某些产品来说几乎是必不可少的。除了为杂货店创建搜索引擎之外,您还可以想象所有其他可能的用途(例如,基于标记的实体推荐类似的在线文章,创建易于搜索的采访记录数据库等)。).我在这篇文章中没有提到的是机器学习方法,它可能被用来实际执行命名实体识别任务(在这个例子中,是在搜索中标记实体的任务perdue chicken fingers)。这是关于命名实体识别的一系列博客文章的第一部分,下一篇文章将更深入地讨论技术细节。最后,如果您认为您的公司可以从命名实体识别中受益,请随时联系我——我的联系信息可以在我的网站上找到。

为什么您的数据素养培训不起作用

原文:https://towardsdatascience.com/why-your-data-literacy-training-isnt-working-374ed74ee919?source=collection_archive---------26-----------------------

以及如何修复它

如果我们真的想让每个人都可以使用数据,我们需要重新思考我们进行数据培训的方式。

来自 2019 年 StackOverflow 黑客马拉松的照片

“我们预计,到 2020 年,80%的组织将在数据素养领域开始有意的能力发展,承认他们的极端不足。”— Alan D. Duncan ,Gartner 副总裁

最近大数据和数据科学的兴起受到了数据专家的极大欢迎。但是对于那些没有受过正式训练的人来说,使用数据仍然像以前一样难以捉摸和令人生畏。

因此,毫不奇怪,伟大的公司(例如 AirBnBNYT )现在正把目光转向利用数据让公司的其他部分变得更好。这种趋势被称为“提高数据素养”,甚至是“建立数据文化”。

不管我们叫它什么,两者都是试图解决同一个问题:我如何让我的员工更好地使用数据[以便我的数据团队有时间做更有价值的事情]?

我们的研究

在过去的两年里,我们一直在询问公司如何让他们的数据更易访问。作为一个团队,我们有自己的战斗恐惧,因为我们在大大小小、高科技和低科技的公司中捍卫数据。从所有的研究和经验中,我们发现大多数数据训练程序看起来都是一样的:

  • 1-2 周的强化训练
  • 这涵盖了特定的工具,如 SQL、Excel 和/或 Python
  • 使用演示数据(公司数据,如果适用)

这些会议的目标是让人们能够自己查询数据源并获得他们需要的信息。不幸的是,实际的结果是在几个月内:

  1. 参加者已经忘记了培训,因为他们没有练习
  2. 数据结构发生了重大变化(或者业务的大多数部分都无法访问)
  3. 最初教授的工具已被其他东西取代

因此,大多数与会者最终还是回到了几个月前的老地方,只是每个人都变得更加愤世嫉俗了。

我们认为还有另一种方法。

在过去的 6 个月里,我们一直在开展自己的数据培训课程。超过 500 人接受了培训,其中许多人将材料带回了自己的公司,我们整理了一些可以让您的数据培训计划坚持下去的东西:

1.设定正确的基调

不要说“我来教你……”而是说“我能帮你什么吗?”

通过启动“数据素养计划”,你让你的同事觉得这都是他们的错。你实际上是在说“如果你们对数据多了解一点,一切都会变得更好”,虽然这可能是真的,但并不特别鼓舞人心。(如果有人在某件事上叫你文盲,你会有什么反应?)

您公司中的大多数人都会同意他们喜欢用数据做更多的事情,并可能强烈地感觉到他们应该为自己的职业生涯做更多的事情。因此,不要把重点放在弥补不足上,而是要关注更多地了解数据所带来的好处和机遇。

突然,会议的基调从“你必须学会这个”变成了“让我们看看我们能一起做些什么。”这是一个简单但强大的变化,甚至可以让最凶猛的数据守财奴上船。

2.设定正确的目标

与其开一个关于如何编写 SQL 的培训会议,不如开一个关于问数据驱动问题的培训会议。

你不会让公司里的每个人都像你一样热爱数据。你甚至无法让人们停止一直向你索要报告。

但是,如果你专注于它,你可以做出重大改变。显然每个公司都会有自己的举措,但有一条我觉得每个公司都应该有的是:问好问题。而不是得到类似“你能把上个月的销售数据发给我吗?”,你会收到更多可操作的、有针对性的问题,比如,“我想看看我们新的社交媒体活动是否达到了销售线索同比增长 10%的目标。”前者含糊不清,没有任何商业意义。后者是具体的,表明请求者确切地知道他们在寻找什么。更重要的是,分析师可以通过推荐数据考虑事项或帮助分析来增加第二个陈述的价值。

底线是:最好的公司问最好的问题。

摘自我们的数据培训演示

3.缓慢而稳定

尝试每周一次的午餐学习会,而不是两周的强化学习。

当考虑这种类型的培训时,为期一周的强化课程肯定是有吸引力的——它们创造了一个专注的环境,几乎总能交付切实的成果。然而,如果不进行常规的文化变革,这些项目的长期效果就会降低。

这种类型的会议带来的机会不仅仅是让业务用户更有能力处理数据,而是让业务更好地处理数据。这意味着数据团队和业务团队合作的时间越长越好。

为此,我们建议让数据成为人们生活中更值得期待的一部分。进行季度 KPI 评审,或者可选的午餐和学习会议,人们可以在会上提出他们的数据问题。要有创意,但要持久!

那现在怎么办?

让您公司的数据更易访问,这对于转变您的业务有着不可思议的潜力,我们相信这绝对值得投资。在你开始设计一个项目之前,考虑你的公司和你的参与者的目标,并找到实现他们的最佳方式。挑战自己,让它不仅仅是一门两周的 SQL 课程,而是对你的公司和文化产生持久影响的东西。

关于我们

在过去的两年里,我们一直致力于让每个人都能更方便地访问数据。我们正在开发一些我们认为会有帮助的技术和培训材料。如果你对获取培训材料感兴趣,你可以在这里注册更新

资源

[1] S. Hippold,CDO 必须带头提高数据素养 (2019),Gartner

[2] J. Stober,Airbnb 如何通过“Data U Intensive”培训提升数据素养 (2018),Medium

[3] L.R .库克,我们如何帮助我们的记者学会热爱电子表格 (2019),中型

为什么你的实验的影响比你想象的要大

原文:https://towardsdatascience.com/why-your-experiments-impact-is-greater-than-you-think-a02828896252?source=collection_archive---------54-----------------------

当我们进行实验时,我们试图解决我们认为阻碍(或促成)转化成功的假设。例如,如果你的服务注册表格转化了 65%,可以想象有 35%没有转化的用户会遇到很多阻碍:

  • 他们不理解报价;
  • 他们不信任你;
  • 太长了,填不完;
  • 它要求他们不愿提供的细节;
  • 他们无法回答其中一个问题(有一个答案你没有考虑过);
  • 太慢了;
  • 这是错误的;
  • 他们觉得完成这个阶段对他们来说没有价值;

当我们进行实验时,我们会尝试解决一个这样的阻塞并将其移除。让我们假设我们相信(或者使用定性研究来发现)有些人觉得表格太长。您尝试删除一些字段,但是发现它只能提高 0.5%的转化率。这是否意味着这个问题的解决方案只是 0.5%用户的问题?号码

多个拦截器将导致最初的几个修复影响较小,随着我们对同一拦截器的工作越来越多,影响越来越大,直到它达到稳定状态。实际情况是,大多数人在完成一个过程/漏斗时,并不仅仅受到一个阻碍因素的影响。他们可能都觉得时间太长了不信任这个过程,或者不信任这个过程不明白我们在问什么。因此,当你开始解决“信任”问题时,如果你还没有接触任何其他东西,你只能影响那些只有有信任问题的人。即使您完全“修复”了信任,对于其他人来说,仍然存在阻止者。当你移除下一个障碍,比如说“理解”,你现在收获了预先解决信任问题和理解障碍的回报。该图说明了这里的动态,假设称为“信任”、“时间”(我没有时间填写)、“价格”和“理解”(我不明白为什么我需要它)。

转化率的瓶颈模型。图片作者。

你可以看到许多动态都是可能的,包括你认为已经解决的事情(不再是瓶颈)在其他事情解决后再次成为瓶颈。用户/客户也会改变偏好,或者用户的受众会改变,我们会接触到具有不同偏好组合的人,从而改变“屏蔽者”。

所有这些都是为了说明,重新审视你认为你以前已经解决的假设是很重要的,承认你不会立即看到所有努力的所有成果也是很重要的,但有时成功地“清除”用户成功的道路实际上依赖于许多以前的障碍,这些障碍以一种不可能衡量的方式被清除。本质上——每个实验的影响都被其他问题所篡改,所以你只能看到它的一部分效果。

为什么你的创业公司需要数据科学来度过这场危机

原文:https://towardsdatascience.com/why-your-startup-needs-data-science-to-survive-this-crisis-d04500df6c2a?source=collection_archive---------65-----------------------

新冠肺炎影响了每一个行业。以下是数据如何帮助你变得更加强大和繁荣

冠状病毒的传播给全球经济带来了巨大的打击。封锁和在家工作的限制已经迫使成千上万的初创公司停止扩张计划,取消服务,并宣布裁员。

该病毒也对初创企业融资和交易活动产生了影响,种子阶段的交易在本季度受到了严重打击。很明显,创业社区现在面临着,并且在未来的几个月里还将继续面临生存危机。

为了继续经营,创始人正在寻找保持流动性的方法,更好地了解他们的供需情况,确定远程员工的运营效率,并寻找机会进行调整。

如果说数据是每个企业的命脉,那么对于希望度过低迷时期的初创公司来说,它就更加重要。以下是初创公司如何利用数据和分析来度过当前危机的方法。

照片由 尼克菲宁

1。数据显示客户的购买模式如何变化

麦肯锡发现美国消费者正在彻底改变他们的消费和行为,尽管他们对经济表示乐观。调查发现,43%的人由于不确定性而推迟购买。

尽管短期内消费转向家庭必需品和远程渠道,但消费者行为预计将永久性地转向在线消费。创业公司必须把握消费者情绪变化的脉搏。

尽管市场研究报告和调查分享了有用的见解,但它们充其量只是滞后指标。寻找可以给你实时或早期信号的替代公共数据源。例如,Kinsa Health 发现他们的在线设备上的数字温度计读数提供了对新冠肺炎在各个城市的进展的洞察

来源:health weather图由金萨洞见

在线餐馆聚合网站 OpenTable 发布的数据显示,外出就餐预订需求下降。谷歌上的公共搜索查询揭示了一个地理区域内数百万消费者现在想要什么。

例如,大多数美国人想知道迪斯尼什么时候重新开放,任天堂 Switch 多快会有货。除了卫生纸的供应,他们同样担心 Roblox 的永久关闭。

来源: 谷歌 搜索

2. 数据帮助你了解你的员工如何应对危机

随着员工被要求在家工作,数百万人被抛入他们不习惯的工作环境,承受着前所未有的压力。虽然干扰和技术挑战是短期的刺激因素,但最大的心理健康风险是由于孤独和倦怠。

在这样的不确定时期,数据可以帮助公司了解他们的员工如何应对危机。自然语言可以为员工福利提供重要线索,而不是等待员工调查或传统的反馈方式。

奥斯汀德克萨斯大学的社会心理学家 James W. Pennebaker 发现,我们言语中的被动部分反映了我们的精神状态。例如,不太快乐的人倾向于更多地使用人称代词,即“我”或“我”,而不是“他”或“她”。

StatusToday 已经建立了一个人工智能解决方案,它可以连接到公司的电子邮件、聊天和通信系统,以识别员工是否处于倦怠的边缘。不用说,侵犯隐私和确保员工福利的洞察力之间只有一线之隔。组织需要信任他们的团队,并对如何使用这些见解保持透明,以避免增加被监控的额外压力。

3. 数据帮助您提高效率并调整您的业务产品

新冠肺炎危机毫无例外地冲击了每个行业。然而,在 2021 年之前,航空航天、旅游、保险、石油和天然气等行业可能不会反弹。在受影响的行业中,基于产品、商业模式以及销售和消费渠道,存在相当大的差异。

资料来源: 麦肯锡&公司 全球消费者情绪调查

面对不确定性,数据有助于提高业务效率。莱德利和莱德曼建议通过采用六种数据价值模式来使用结构化的问题解决方法。

这些价值模式是涵盖商业价值链最关键方面的场景——产品丰富、市场情报、竞争地位、人员能力、流程改进和风险管理。

该框架通过推动与利益相关方的正确对话,让您能够识别数据对您业务的潜力和限制。例如,当一家地区性银行失去了许多高财富客户时,它转向了数据价值模式。

通过系统地收集和分析数据,该银行发现客户对他们的交易执行和报告不满意。通过调查两种价值模式,该银行推出了流程改进,从而恢复了市场份额。

如果你的业务需要一个根本性的改变来度过当前的危机呢?这是数据可以帮助你的另一个领域。在当前的经济低迷时期,有些公司通过调整商业模式留住了客户或获得了新客户。

随着家庭消费的强劲增长,企业正在尝试快速采用在线渠道。

克里斯·蒙哥马利在 Unsplash 上的照片

例如,健身工作室和健身房正在与 T5 竞争,通过数字化来保持相关性。此类企业采用传统的内部模式,他们需要新的功能来远程吸引和留住客户。他们必须学会接受数据并使用分析来衡量客户体验并提高在线参与水平。

初创公司可以向网飞这样的数字本土公司学习,他们围绕用户分析开展业务。网飞一直在通过持续的数字创新巩固其领导地位。最近,它推出了网飞派对,这是一种在社交距离中一起看电影的有趣方式,以弥补与朋友错过的电影之夜。

克里斯·蒙哥马利在 Unsplash 上拍摄的照片

采用数据驱动的方法,从危机中走出来变得更强

当您评估和响应不断变化的业务优先级时,请将内部数据洞察与来自公共数据源的情报相结合。

利用数字工具和推断信号来支持和授权您的团队。使用六种数据价值模式框架来定义数据如何帮助调整您的业务战略。为了从数据计划中获得最佳结果,请确保您拥有一个平衡的数据科学团队,并促进与业务利益相关方的协作。

幸存下来的物种既不是最强壮的,也不是最聪明的。它是最能适应变化的。

查尔斯·达尔文的进化论给希望度过这场危机的公司上了重要的一课。幸存下来的物种既不是最强壮的,也不是最聪明的。它是最能适应变化的。那些能够快速利用数据洞察来应对、适应和发展创业公司的创业者将会变得更加强大。

这篇文章最初是由《分析》杂志上的**发表的。增加了插图。标题照片由* 大卫·克洛德 *

你电话面试失败的原因

原文:https://towardsdatascience.com/why-youre-failing-the-telephone-interview-365e9c45f090?source=collection_archive---------12-----------------------

来自数据科学招聘经理

一个让 95%的数据科学候选人失去资格的问题

图片来自皮克斯拜

我不是想拷问你。电话面试的门槛并不高。下一步,面对面,意味着会见一些团队成员。他们会拷问你。我的工作是筛选出令人不舒服的糟糕经历。

我只是想保护他们,不浪费你的时间。但是要做好准备——这个问题是一个技术问题。然而,这并不意味着测试你的技术知识的广度或深度,而是向我展示你的灵魂,揭示你是一名数据科学家。

我采访了数百名有经验、有抱负的数据科学家,并雇佣了几十名。我不是在寻找一种类型的人。我建立团队,不同的人有很多方法可以组成一个伟大的团队。我也不指望能找到我需要的那一块。我在找人投资。但是我的标准很高。

标准

责任重大。我把我的团队当成一家人。我在介绍一个潜在的新家庭成员。我想给每个家庭成员两样东西:

  1. 让他们感到安全,诚实地表达自己,而不用担心遭到报复。
  2. 我想让他们感觉到我们所做的工作是重要的,需要一定的性格力量。对于一个数据科学家来说,这种力量就是智力上的诚实。

如果我让一个不准备对自己和他人的工作质量直言不讳的人进来,即使是作为候选人,这也是一种侮辱。他们认为候选人的能力反映了我对他们的看法。

该设置

我不只是脱口而出这个问题。我希望它不张扬。我想知道你认为这个问题有多重要。我不想偏向你,所以我偷偷放进去作为后续。

所以首先请大家说说自己的相关经历。也许我会说,“你最引以为豪的项目是哪个?跟我说说。”

在这里,我要找两样东西:

  1. 作为技术专家,你能向我解释一下你做了什么吗?我不求口才,只求清晰。
  2. 你看重什么?当你谈论你引以为豪的事情时,你使用的语言(以及你关注的内容)会泄露你的价值观。

有些人在这个问题上面试失败,但很少。有些人无法解释他们的工作——以至于你会怀疑他们当时是不是在瞎编。其他人只是表现得很差——非常粗鲁地谈论以前的同事,或者说一些完全错误的事情。有一两个人在接下来的采访中一直在喋喋不休,拒绝被打断。

但是几乎所有的都通过了,现在正为大赛做准备。

谦逊的后续行动

现在,我终于可以衡量你的智力诚实程度了。你刚刚给我讲了这么多你最自豪的数据科学项目。在某些时候,你至少会提到对你的项目至关重要的统计或机器学习模型。所以,我随口问你你的模式是如何运作的。

因为我是随便问的,所以如果我得到一个肤浅的回答,我不会感到惊讶或气馁,但理想情况下,你会抓住机会详细讲述如何评估和测试你的模型。抓住这个机会。

如果你不知道,我会用怀疑来强调我的兴趣:“你怎么知道它有效?”。我第一次问的时候,就暗示它有效,而且效果很好。这是一个程度的问题,现在我要求辩护。

错误的答案

没有单一的正确的答案。但是有几个错误的回答。第二次拒绝这个问题可能是最糟糕的。我会抑制我的愤怒,进行第三次也是最后一次尝试,但这实际上是面试的结束。许多人绞尽脑汁,并透露他们不知道如何以最粗略的方式评估一个模型。

准确(性)

一个常见的糟糕回答是这样的,“我有一个测试集和一个训练集;该模型在测试集上的准确率为 90%”。这个为什么穷?好吧,首先,我需要更多的信息来知道 90%的准确率是一个好结果还是一个糟糕的结果。如果测试集的 95% 是同一个类的话, 90% 准确率就惨不忍睹了!

此外,该答案没有解决其他几个重要问题,包括:

  1. 在选择测试集时,您是如何避免偏见的?
  2. 是什么让你认为测试集是充分的?
  3. 测试集在多大程度上反映了您将在生产中看到的数据?
  4. 您为什么选择准确性作为您的评分标准?你还考虑了哪些其他指标?
  5. 你尝试了多少不同的模型,你怎么知道你没有过度搭配?

如果时间允许,我会尽可能多地问这些问题。我需要知道你至少关心你的模型是正确的,而不是仅仅转动曲柄直到你得到一个满意的结果。

交叉验证

在某种程度上,最常见的拙劣答案试图解决过度拟合的问题:“我使用了交叉验证”。似乎有一种普遍的误解,认为交叉验证解决了数据科学中几个基本而复杂的问题。并没有。

交叉验证是一个很好的工具,但是它不能保证什么。您仍然可以轻松地挑选结果或特征,将信息从一个文件夹添加到另一个文件夹,或者以生产中不可能的方式使用信息。它也不能解决数据科学中更多的认识论问题,如黑天鹅龙王、可重复性以及预测对其预期结果的影响。

别担心。我不是在找哲学论文。我只想知道你不认为机器学习是魔术。

像科学家一样思考

如果你想在大多数其他候选人失败的地方成功,像科学家一样思考。你的工作是发现真相,而不是证明或反驳任何特定的理论。不要只找模式,要找有意义的模式。

花点时间。思考你正在做的事情的含义。带着更多的怀疑探索数据科学。也许还要多读读科学哲学。深入研究您已经使用的工具的各种度量和模型评估包。

最重要的是,回顾一下你以前的工作,看看你能在你所做的工作中找出哪些漏洞。因为如果你不说,我会说的。

如果你在 LinkedIn 上很活跃,在这里 跟我说“嗨”。

Python 的维基百科 API

原文:https://towardsdatascience.com/wikipedia-api-for-python-241cfae09f1c?source=collection_archive---------6-----------------------

在本教程中,让我们了解维基百科 API 的用法。

图片来源:乌勒斯

介绍

维基百科,世界上最大的免费百科全书。这是一片充满信息的土地。我的意思是谁会在一生中使用维基百科(如果你没有使用过,那么很可能你在撒谎)。名为Wikipedia的 python 库允许我们轻松访问和解析来自维基百科的数据。换句话说,你也可以把这个库当作一个小刮刀,在这里你只能从维基百科上刮取有限的信息。我们将在今天的教程中了解如何做到这一点。此外,本教程的完整代码可以在我的 GitHub 资源库 下面找到:

[## 塔努-北帕布/Python

github.com](https://github.com/Tanu-N-Prabhu/Python/blob/master/Wikipedia_API_for_Python.ipynb)

装置

使用 API 的第一步是手动安装它。因为,这是一个外部 API,它不是内置的,所以只需键入以下命令来安装它。

  • 如果你正在使用一个 jupyter 笔记本,那么确保你使用了下面的命令(带“!”mark——这样做的原因是它告诉 jupyter notebook 环境正在键入一个命令(又名命令模式)。
!pip install **wikipedia**
pip install **wikipedia**

输入上述命令后,在上述两种情况下,都会出现如下所示的成功消息提示。这表明库已成功安装。

库安装成功

搜索和建议

现在让我们看看 Wikipedia API 提供的一些内置方法。第一个是搜索和建议。我很确定你们可能知道这两种方法的用法,因为它的名字。

搜索

search 方法返回查询的搜索结果。就像其他搜索引擎一样,维基百科也有自己的搜索引擎,你可以在下面看看:

[## 搜索

维基百科(一个基于 wiki 技术的多语言的百科全书协作计划ˌ也是一部用不同语言写成的网络百科全书ˌ 其目标及宗旨是为全人类提供自由的百科全书)ˌ开放性的百科全书

en.wikipedia.org](https://en.wikipedia.org/w/index.php?search)

现在让我们看看如何使用 python 检索查询的搜索结果。我将使用冠状病毒作为今天教程的主题,因为大家都知道它正在全球流行和传播。在开始使用 API 之前,你首先需要导入它。

import wikipediaprint(wikipedia.search("**Coronavirus**"))

当我们执行这段代码时,我们得到如下所示的列表形式的结果:

[**'Coronavirus',  
 '2019–20 coronavirus pandemic',  
 '2020 coronavirus pandemic in the United States',  
 'Severe acute respiratory syndrome coronavirus 2',  
 '2019–20 coronavirus pandemic by country and territory',  
 'Middle East respiratory syndrome-related coronavirus',  
 '2020 coronavirus pandemic in Italy',  
 '2020 coronavirus pandemic in Europe',  
 'Timeline of the 2019–20 coronavirus pandemic',  
 'Timeline of the 2019–20 coronavirus pandemic in February 2020'**]

以上是一些在维基百科上被搜索最多的问题,如果你不相信我,去我给的上面的链接,搜索这个话题,比较结果。搜索结果可能每小时都在变化。

你可以通过使用搜索参数来过滤搜索结果,比如结果建议(我知道不用担心拼写) 结果返回结果和建议的最大数量如果为真,返回结果和建议(如果有的话)的一个元组。

print(wikipedia.search("**Coronavirus**", results = **5**, suggestion = **True**))

在执行上述代码时,您将获得仅有的 5 个搜索结果,这些结果将存储在一个元组中,如下所示:

([**'Coronavirus',   
  '2019–20 coronavirus pandemic',  
  'Severe acute respiratory syndrome coronavirus 2',  
  'Severe acute respiratory syndrome-related coronavirus',   
  '2019–20 coronavirus pandemic by country and territory'], 
   None**)

建议

现在,顾名思义,建议返回查询的建议维基百科标题,如果没有得到任何标题,则不返回。

print(wikipedia.suggest('**Coronavir**'))

你可能已经在许多搜索引擎中注意到了这一点,当你开始输入的时候,搜索引擎会自动向你推荐一些主题。在这种情况下,建议方法返回“冠状病毒”作为建议。

‘coronavirus’

摘要

要获取文章摘要,请使用“摘要”方法,如下所示:

print(wikipedia.summary("**Coronavirus**"))

通过执行这行代码,您可以获得您正在寻找的文章的摘要。该方法的返回类型是字符串 'str '

'**Coronaviruses are a group of related viruses that cause diseases in mammals and birds. In humans, coronaviruses cause respiratory tract infections that can be mild, such as some cases of the common cold (among other possible causes, predominantly rhinoviruses), and others that can be lethal, such as SARS, MERS, and COVID-19\. Symptoms in other species vary: in chickens, they cause an upper respiratory tract disease, while in cows and pigs they cause diarrhea. There are yet to be vaccines or antiviral drugs to prevent or treat human coronavirus infections. \nCoronaviruses constitute the subfamily Orthocoronavirinae, in the family Coronaviridae, order Nidovirales, and realm Riboviria. They are enveloped viruses with a positive-sense single-stranded RNA genome and a nucleocapsid of helical symmetry. The genome size of coronaviruses ranges from approximately 27 to 34 kilobases, the largest among known RNA viruses. The name coronavirus is derived from the Latin corona, meaning "crown" or "halo", which refers to the characteristic appearance reminiscent of a crown or a solar corona around the virions (virus particles) when viewed under two-dimensional transmission electron microscopy, due to the surface being covered in club-shaped protein spikes.**'

但是有时候要小心,你可能会碰到一个DisambiguationError。意为同字异义。例如,单词“ bass ”可以代表一条鱼或节拍或更多。这时,summary 方法抛出一个错误,如下所示。

提示:方法要具体

print(wikipedia.summary("**bass**"))

当您执行上面的代码行时,会出现如下所示的错误消息提示您:

DisambiguationError                Traceback (most recent call last)[<ipython-input-34-d1d15ef541d1>](/<ipython-input-34-d1d15ef541d1>) in <module>()
----> 1 wikipedia.summary("bass")[/usr/local/lib/python3.6/dist-packages/wikipedia/wikipedia.py](/usr/local/lib/python3.6/dist-packages/wikipedia/wikipedia.py) in __load(self, redirect, preload)
 **391**       may_refer_to = [li.a.get_text() for li in filtered_lis if li.a]
 **392** 
--> 393       raise DisambiguationError(getattr(self, 'title', page['title']), may_refer_to)
 **394** 
 **395**     else:DisambiguationError: "**Bass**" may refer to:**Bass (fish)
Bass (sound)
Acoustic bass guitar
Bass clarinet
cornett
Bass drum
Bass flute
Bass guitar
Bass recorder
Bass sarrusophone
Bass saxophone
Bass trombone
Bass trumpet
Bass violin
Double bass
Electric upright bass
Tuba
Bass (voice type)
Bass clef
Bass note
Bassline
Culture Vulture (EP)
Simon Harris (musician)
Simon Harris (musician)
Tubular Bells 2003
Bass Brewery
Bass Anglers Sportsman Society
G.H. Bass & Co.
Bass (surname)
Bass Reeves
Chuck Bass
Bass Armstrong
Bass Monroe
Mega Man characters
Bass Strait
Bass Pyramid
Bass, Victoria
Division of Bass
Division of Bass (state)
Electoral district of Bass
Shire of Bass
Bass, Alabama
Bass, Arkansas
Bass, Casey County, Kentucky
Bass, Missouri
Bass, West Virginia
Nancy Lee and Perry R. Bass Performance Hall
Bass, Hansi
Bass River (disambiguation)
Bass Rock
Basses, Vienne
Bass diffusion model
Beneath a Steel Sky
Buttocks
BASS
USS Bass
Bas (disambiguation)
Base (disambiguation)
Bass House (disambiguation)
Basse (disambiguation)
Bassline (disambiguation)
Drum and bass
Figured bass
Miami bass
Ghettotech
Sebastian (name)**

此外,维基百科 API 给了我们一个选项来改变我们想要阅读文章的语言。你所要做的就是把语言设置成你想要的语言。房子里的任何法国读者,我都会用法语作为参考。

wikipedia.set_lang("**fr**")wikipedia.summary("**Coronavirus**")

现在,正如我所承诺的,上述文章的全部内容将被翻译成法语,如下所示:

"**Coronavirus ou CoV (du latin, virus à couronne) est le nom d'un genre de virus correspondant à la sous-famille des orthocoronavirinæ  (de la famille des coronaviridæ). Le virus à couronne doit son nom à l'apparence des virions sous un microscope électronique, avec une frange de grandes projections bulbeuses qui ressemblent à la couronne solaire.  \nLes coronavirus sont munis d'une enveloppe virale ayant un génome à ARN de sens positif et une capside (coque) kilobases, incroyablement grosse pour un virus à ARN. Ils se classent parmi les Nidovirales, puisque tous les virus de cet ordre produisent un jeu imbriqué d'ARNm sous-génomique lors de l'infection. Des protéines en forme de pic, enveloppe, membrane et capside contribuent à la structure d'ensemble de tous les coronavirus. Ces virus à ARN sont monocaténaire (simple brin) et de sens positif (groupe IV de la classification Baltimore). Ils peuvent muter et se recombiner. \nLes chauves-souris et les oiseaux, en tant que vertébrés volants à sang chaud, sont des hôtes idéaux pour les coronavirus, avec les chauves-souris et les oiseaux, assurant l'évolution et la dissémination du coronavirus.\nLes coronavirus sont normalement spécifiques à un taxon animal comme hôte, mammifères ou oiseaux selon leur espèce ; mais ces virus peuvent parfois changer d'hôte à la suite d'une mutation. Leur transmission interhumaine se produit principalement par contacts étroits via des gouttelettes respiratoires générées par les éternuements et la toux.\nLes coronavirus ont été responsables des graves épidémies de SRAS de 2002-2004, de l'épidémie de MERS et de la pandémie de Covid-19 en 2020\.  chez l'homme des graves épidémies de syndrome respiratoire aigu sévère (SRAS) en 2002/2003 et du syndrome respiratoire du Moyen-Orient (MERS) à partir de 2012, ainsi que la pandémie de Covid-19 de 2020, causée par le coronavirus SARS-CoV-2, contre lequel on ne dispose pas encore de vaccin ni de médicament à l'efficacité prouvée.**"

支持的语言

现在让我们看看维基百科支持哪些语言,这可能是人们经常问的一个问题。现在答案来了。目前,维基百科支持 444 种不同的语言。要找到它,请参见下面的代码:

wikipedia.languages()

这里列出了维基百科支持的所有语言,所有语言都以键值对的形式存储在字典中。

{'aa': '**Qafár a**f',  'ab': '**Аҧсшәа**',  'abs': '**bahasa ambon**',  'ace': '**Acèh**',  'ady': '**адыгабзэ**',  'ady-cyrl': '**адыгабзэ**',  'aeb': '**تونسي/Tûnsî**',  'aeb-arab': '**تونسي**',  'aeb-latn': '**Tûnsî**',  'af': '**Afrikaans**',  'ak': '**Akan**',  'aln': '**Gegë**',  'als': '**Alemannisch**',  'am': '**አማርኛ**',  'an': '**aragonés**',  'ang': '**Ænglisc**',  'anp': '**अङ्गिका**',  'ar': '**العربية**',  'arc': '**ܐܪܡܝܐ**',  'arn': '**mapudungun**',  'arq': '**جازايرية**',  'ary': '**Maġribi**',  'arz': '**مصرى**',  'as': '**অসমীয়া**',  'ase': '**American sign** **language**',  'ast': '**asturianu**',  'atj': '**Atikamekw**',--------------}

要检查是否支持某种语言,请编写如下所示的条件:

'**en**' in wikipedia.languages()

这里' en 代表'英语,你知道上面代码的答案。它显然是“或“”,这里是“

**True**

此外,要获得可能的语言前缀,请尝试:

wikipedia.languages()['**en**']

结果将是所需的语言:

**English**

页面访问

该 API 还让我们可以完全访问维基百科页面,在它的帮助下,我们可以访问完整页面的标题、URL、内容、图像和链接。为了访问该页面,您需要首先加载该页面,如下所示:

提醒一下,在本例中,我将使用单篇文章主题(冠状病毒)作为参考:

covid = wikipedia.page("**Coronavirus**")

标题

要访问上述页面的标题,请使用:

print(covid.title)'**Coronavirus**'

网址

要获取页面的 URL,请使用:

print(covid.url)**'**[**https://en.wikipedia.org/wiki/Coronavirus**](https://en.wikipedia.org/wiki/Coronavirus)**'**

内容

要访问页面内容,请使用:

print(covid.content)'**Coronaviruses are a group of related viruses that cause diseases in mammals and birds. In humans, coronaviruses cause respiratory tract infections that can be mild, such as some cases of the common cold (among other possible causes, predominantly rhinoviruses), and others that can be lethal, such as SARS, MERS, and COVID-19.----------------**'

提示:使用上述方法可以得到整个页面的内容

图像

是的,你说得对,我们可以从维基百科的文章中获取图片。但这里的要点是,我们不能在这里渲染整个图像,但我们可以将它们作为如下所示的 URL:

print(covid.images)[**'**[**https://upload.wikimedia.org/wikipedia/commons/8/82/SARS-CoV-2_without_background.png**](https://upload.wikimedia.org/wikipedia/commons/8/82/SARS-CoV-2_without_background.png)**',
  '**[**https://upload.wikimedia.org/wikipedia/commons/9/96/3D_medical_animation_coronavirus_structure.jpg**](https://upload.wikimedia.org/wikipedia/commons/9/96/3D_medical_animation_coronavirus_structure.jpg)**', 

'**[**https://upload.wikimedia.org/wikipedia/commons/f/f4/Coronavirus_replication.png**](https://upload.wikimedia.org/wikipedia/commons/f/f4/Coronavirus_replication.png)**',** **'**[**https://upload.wikimedia.org/wikipedia/commons/e/e5/Coronavirus_virion_structure.svg**](https://upload.wikimedia.org/wikipedia/commons/e/e5/Coronavirus_virion_structure.svg)**',** **'**[**https://upload.wikimedia.org/wikipedia/commons/d/dd/Phylogenetic_tree_of_coronaviruses.jpg**](https://upload.wikimedia.org/wikipedia/commons/d/dd/Phylogenetic_tree_of_coronaviruses.jpg)**',** **'**[**https://upload.wikimedia.org/wikipedia/commons/7/74/Red_Pencil_Icon.png**](https://upload.wikimedia.org/wikipedia/commons/7/74/Red_Pencil_Icon.png)**',  '**[**https://upload.wikimedia.org/wikipedia/commons/8/82/SARS-CoV-2_without_background.png**](https://upload.wikimedia.org/wikipedia/commons/8/82/SARS-CoV-2_without_background.png)**',** **---**]

链接

同样,我们可以从不同的网站或研究中获得维基百科用作参考的链接等。

print(covid.links)[**'2002–2004 SARS outbreak',  '2012 Middle East respiratory syndrome coronavirus outbreak',  '2015 Middle East respiratory syndrome outbreak in South Korea',  '2018 Middle East respiratory syndrome outbreak',  '2019–2020 coronavirus pandemic',  '2019–20 coronavirus pandemic',  'Acute bronchitis',  'Adenoid',  'Adenoviridae',  'Adenovirus infection',  'Adult T-cell leukemia/lymphoma',  'Alpaca',  'Alphacoronavirus',  'Anal cancer',------**]

好了,你到了 Wikipedia API for Python 教程的末尾。了解更多方法请访问 维基百科 API。我希望你们在学习和实现的过程中有很多乐趣。如果你们有任何意见或担忧,请通过下面的评论区告诉我。在那之前再见

注意安全。

R 中的 Wilcoxon 检验:如何在非正态假设下比较两组

原文:https://towardsdatascience.com/wilcoxon-test-in-r-how-to-compare-2-groups-under-the-non-normality-assumption-6fb7f9e92400?source=collection_archive---------44-----------------------

了解如何在 R 中执行学生 t 检验的非参数版本

安妮·斯普拉特的照片

介绍

在之前的一篇文章中,我们展示了如何使用学生的 t 检验在不同场景下比较两组。学生的 t 检验要求当存在小样本时,分布遵循正态分布1 在本文中,我们将使用 Wilcoxon 检验展示如何在违反正态假设的情况下比较两组。

Wilcoxon 检验是一种非参数检验,这意味着它不依赖于属于任何特定概率分布参数族的数据。非参数测试和参数测试有着相同的目标。然而,它们比参数测试有一个优势:它们不需要假设分布的正态性。例如,学生的 t 检验仅适用于数据为高斯分布或样本量足够大的情况(通常 n≥30)。在其他情况下,应该使用非参数。

有人可能会问,为什么我们不总是使用非参数检验,这样我们就不用担心正态性检验了。原因是当正态假设成立时,非参数检验通常不如相应的参数检验有效。因此,在其他条件相同的情况下,如果数据遵循正态分布,那么在非参数测试中,当零假设为假时,您不太可能拒绝该假设。因此,当假设得到满足时,最好使用统计检验的参数版本。

在本文的剩余部分,我们将给出 Wilcoxon 测试的两个场景,以及如何通过两个例子在 R 中执行它们。

两种不同的场景

至于学生的 t 检验,Wilcoxon 检验用于比较两组,看它们彼此之间是否有显著差异。

要比较的两个组是:

  1. 独立,或
  2. 成对的(即从属的)

实际上有两种版本的 Wilcoxon 测试:

  1. 当样本独立时,执行曼-威-威检验(也称为威-威秩和检验)(因此该检验是非参数的,相当于学生对独立样本的 t 检验)。
  2. 当样本成对/相关时,执行 Wilcoxon 带符号秩检验(有时也称为成对样本的 Wilcoxon 检验)(因此该检验是非参数的,相当于学生对成对样本的 t 检验)。

幸运的是,这两个测试可以用相同的函数在 R 中完成:wilcox.test()。它们将在以下章节中介绍。

独立样本

对于独立样本的 Wilcoxon 检验,假设我们想要检验统计考试中男女学生的成绩是否不同。

我们收集了 24 名学生(12 名女生和 12 名男生)的成绩:

dat <- data.frame(
  Sex = as.factor(c(rep("Girl", 12), rep("Boy", 12))),
  Grade = c(
    19, 18, 9, 17, 8, 7, 16, 19, 20, 9, 11, 18,
    16, 5, 15, 2, 14, 15, 4, 7, 15, 6, 7, 14
  )
)dat##     Sex Grade
## 1  Girl    19
## 2  Girl    18
## 3  Girl     9
## 4  Girl    17
## 5  Girl     8
## 6  Girl     7
## 7  Girl    16
## 8  Girl    19
## 9  Girl    20
## 10 Girl     9
## 11 Girl    11
## 12 Girl    18
## 13  Boy    16
## 14  Boy     5
## 15  Boy    15
## 16  Boy     2
## 17  Boy    14
## 18  Boy    15
## 19  Boy     4
## 20  Boy     7
## 21  Boy    15
## 22  Boy     6
## 23  Boy     7
## 24  Boy    14

以下是按性别划分的成绩分布(使用[{ggplot2}](https://statsandr.com/blog/graphics-in-r-with-ggplot2/)):

library(ggplot2)ggplot(dat) +
  aes(x = Sex, y = Grade) +
  geom_boxplot(fill = "#0c4c8a") +
  theme_minimal()

我们首先通过直方图和夏皮罗-维尔克检验来检查这两个样本是否遵循正态分布:

hist(subset(dat, Sex == "Girl")$Grade,
  main = "Grades for girls",
  xlab = "Grades"
)

hist(subset(dat, Sex == "Boy")$Grade,
  main = "Grades for boys",
  xlab = "Grades"
)

shapiro.test(subset(dat, Sex == "Girl")$Grade)## 
##  Shapiro-Wilk normality test
## 
## data:  subset(dat, Sex == "Girl")$Grade
## W = 0.84548, p-value = 0.0323shapiro.test(subset(dat, Sex == "Boy")$Grade)## 
##  Shapiro-Wilk normality test
## 
## data:  subset(dat, Sex == "Boy")$Grade
## W = 0.84313, p-value = 0.03023

直方图显示两种分布似乎都不符合正态分布,夏皮罗-维尔克检验的 p 值证实了这一点(因为我们在 5%的显著性水平上拒绝了两种分布的正态性的零假设)。

我们刚刚表明两组都违反了正态假设,所以现在是时候看看如何在 R. 2 中执行 Wilcoxon 检验了。记住,Wilcoxon 检验的无效假设和替代假设如下:

  • H0:两组是相似的
  • H1:两组是不同的
test <- wilcox.test(dat$Grade ~ dat$Sex)
test## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  dat$Grade by dat$Sex
## W = 31.5, p-value = 0.02056
## alternative hypothesis: true location shift is not equal to 0

我们获得检验统计量、p-值和被检验假设的提示。 3

p-值为 0.021。因此,在 5%的显著性水平上,我们拒绝零假设,我们得出结论,女生和男生的成绩有显著差异。

从上面按性别显示成绩的箱线图可以看出,女生似乎比男生表现得更好。这可以通过在wilcox.test()函数中添加alternative = "less"参数来正式测试: 4

test <- wilcox.test(dat$Grade ~ dat$Sex,
  alternative = "less"
)
test## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  dat$Grade by dat$Sex
## W = 31.5, p-value = 0.01028
## alternative hypothesis: true location shift is less than 0

p-值为 0.01。因此,在 5%的显著性水平上,我们拒绝零假设,我们得出结论,男孩的表现明显差于女孩(这相当于得出结论,女孩的表现明显好于男孩)。

成对样品

对于第二个场景,假设我们在学期开始时对一个 12 人的班级进行了一次数学测试,并在学期结束时对完全相同的学生进行了一次类似的测试。我们有以下数据:

dat <- data.frame(
  Beginning = c(16, 5, 15, 2, 14, 15, 4, 7, 15, 6, 7, 14),
  End = c(19, 18, 9, 17, 8, 7, 16, 19, 20, 9, 11, 18)
)dat##    Beginning End
## 1         16  19
## 2          5  18
## 3         15   9
## 4          2  17
## 5         14   8
## 6         15   7
## 7          4  16
## 8          7  19
## 9         15  20
## 10         6   9
## 11         7  11
## 12        14  18

我们转换数据集,使其具有整齐的格式:

dat2 <- data.frame(
  Time = c(rep("Before", 12), rep("After", 12)),
  Grade = c(dat$Beginning, dat$End)
)
dat2##      Time Grade
## 1  Before    16
## 2  Before     5
## 3  Before    15
## 4  Before     2
## 5  Before    14
## 6  Before    15
## 7  Before     4
## 8  Before     7
## 9  Before    15
## 10 Before     6
## 11 Before     7
## 12 Before    14
## 13  After    19
## 14  After    18
## 15  After     9
## 16  After    17
## 17  After     8
## 18  After     7
## 19  After    16
## 20  After    19
## 21  After    20
## 22  After     9
## 23  After    11
## 24  After    18

学期开始和结束时的成绩分布:

# Reordering dat2$Time
dat2$Time <- factor(dat2$Time,
  levels = c("Before", "After")
)ggplot(dat2) +
  aes(x = Time, y = Grade) +
  geom_boxplot(fill = "#0c4c8a") +
  theme_minimal()

(参见[{esquisse}](https://www.statsandr.com/blog/rstudio-addins-or-how-to-make-your-coding-life-easier/) [{questionr}](https://www.statsandr.com/blog/rstudio-addins-or-how-to-make-your-coding-life-easier/) 附加模块帮助您重新排列因子变量的级别,并使用[{ggplot2}](https://www.statsandr.com/blog/graphics-in-r-with-ggplot2/) 轻松绘制图表。)

在这个例子中,很明显两个样本不是独立的,因为同样的 12 名学生在学期前后参加了考试。假设正态假设被违反,我们因此对成对样本使用 Wilcoxon 检验。

该测试的 R 代码与独立样本的代码相似,除了我们将paired = TRUE参数添加到wilcox.test()函数中,以考虑 2 个样本之间的相关性:

test <- wilcox.test(dat2$Grade ~ dat2$Time,
  paired = TRUE
)
test## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  dat2$Grade by dat2$Time
## V = 21, p-value = 0.1692
## alternative hypothesis: true location shift is not equal to 0

我们获得了检验统计量、 p 值和被检验假设的提示。

p-值为 0.169。因此,在 5%的显著性水平上,我们不拒绝学期前后成绩相近的零假设。

等方差假设

正如文章开头所写的,Wilcoxon 检验不需要正态假设。

关于等方差假设,这个假设可能需要,也可能不需要,这取决于你的目标。如果你只想比较两组,你不必测试方差的相等性,因为两个分布不必有相同的形状。然而,如果您的目标是比较两组的中位数,那么您将需要确保两个分布具有相同的形状(因此,具有相同的方差)。 5

所以你的方差相等测试的结果将改变你的解释:两组“分布”的差异或两组“中位数”的差异。在这篇文章中,我不想比较中位数,我只想通过确定两组的分布是否有差异来比较两组。这就是我不测试方差相等的原因。

请注意,当执行 Kruskal-Wallis 检验以比较三组或更多组(即 ANOVA 的非参数版本)时,这是等效的:如果您只想检验各组之间是否存在差异,则不需要同质异方差,而如果您想要比较中位数,则必须满足此假设。

感谢阅读。我希望这篇文章能帮助你使用 Wilcoxon 检验比较 R 不服从正态分布的两组。如果您需要执行 Wilcoxon 检验的参数版本,请参见学生 t 检验,如果您需要比较 3 组或更多组,请参见 ANOVA

和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。

  1. 记住,正态性假设可以通过 3 种互补的方法来检验:(1)直方图,(2)QQ 图和(3)正态性检验(最常用的是夏皮罗-维尔克检验)。如果需要刷新,请参见如何确定分布是否遵循正态分布↩︎
  2. 注意,为了使用学生的 t 检验(Wilcoxon 检验的参数版本),要求两个样本都遵循正态分布。因此,即使一个样本服从正态分布(另一个不服从正态分布),也建议使用非参数检验。 ↩︎
  3. 请注意,相等元素(平局)的存在阻止了精确的 p 值计算。这可以通过使用{coin}包中的wilcox_test()函数:wilcox_test(dat$Grade ~ dat$Sex, distribution = exact())wilcox_test(dat$Grade ~ dat$Sex)计算精确的或渐近的 Wilcoxon-Mann-Whitney 检验来解决。在我们的情况下,结论保持不变。 ↩︎
  4. 我们加上alternative = "less"(而不是alternative = "greater")是因为我们想测试男生的分数比女生的分数少。使用"less""greater"可以从数据集中的参考电平中扣除。 ↩︎
  5. 关于 Wilcoxon 检验中的等方差假设,更详细的讨论见这三篇文章: 12 & 3↩︎

相关文章

原载于 2020 年 6 月 7 日 https://statsandr.comT21**

20 万美国人会死于新冠肺炎吗?

原文:https://towardsdatascience.com/will-200-000-americans-die-from-covid-19-742290262668?source=collection_archive---------38-----------------------

数字显示这很有可能。

疾控中心Unsplash 拍摄的照片

语境

几天前,白宫冠状病毒特别工作组事实上的发言人安东尼·福奇引起了全国的关注,当时他“10 万到 20 万”美国人可能死于新冠肺炎。来自美国最重要的传染病专家的如此可怕的预测让许多人怀疑:这真的可能吗?这是最好还是最坏的情况?在本文中,我将解决这些问题,并讨论这种情况发生的条件。

方法

要获得死亡人数,我们需要两样东西:病死率的范围和病例数。

估计病死率

我们使用一种基于队列的方法计算了美国至少有 25 人死亡的每个州的 CFR,我在这里详细描述了这种方法。我们将数学模型与队列分析方法相结合,以确定病死率(CFR)的范围。我们使用一个逻辑函数来描述依赖于三个参数的新冠肺炎病死率的指数增长和随后的平坦化:最终病死率(l)、病死率增长率(k)和发病至死亡间隔(t₀).使用具有特定参数(l、k 和 t₀)的逻辑斯谛模型,我们计算每个队列每天的死亡人数。我们建立了一个目标函数,使累积死亡的实际值和预测值之间的均方根误差最小化,并通过改变三个参数进行了多次模拟。使用所有这些值,我们可以找出与实际死亡人数相比,哪组参数返回的误差最小。然后,我们找到在 R 的前 1%内的参数范围。通过分析高斯核密度估计(参见图 3,4此处,我确定了最可能的 CFR 估计和最高/最低的可能 CFR。

预测病例数

我们没有使用模型来预测数量,而是通过改变人群中的渗透深度来探索美国的多个病例总数。

图 1:按国家分列的人均病例。选择的国家是截至 1 月 4 日确诊病例最多的 19 个国家

图 1 显示了许多国家每百万居民的病例数。对于美国近期可能遭遇的案例数量而言,这是一个合理的基准。它表明,随着疫情的增长,美国每百万人中可能有多达 2500 例病例(约 82.5 万例),这大约是目前数量的三倍。请注意,这些国家中的大多数疫情仍在继续增长,最终的每百万病例数将显著增加。

图 2:病例的 10 天增长

此外,我们可以分析美国目前的轨迹。图 2 描绘了病例 10 天增长的倍增因素。也就是 10 天内病例数翻了多少倍。在过去的几周里,它已经减少了,这是一个好的迹象。然而,由于指数增长的性质,即使低因素也是高度危险的;我们目前处于 4 左右。按照这种速度,到 3 月 1 日,美国很可能会出现 200 万个病例。

为了进行这一分析,我研究了多个范围—从当前(截至 4 月 1 日)的 210,000 到 2100,000 例。

结果

我首先分析计算了至少有 25 人死亡的不同州的低、中、高范围。

图 3:病例最多的 10 个州的病死率。

图 3 揭示了病死率最高的 10 个州。这表明密歇根州、路易斯安那州和纽约州的病死率最高。大多数州的“高”CFR 低于 20%。在低/中档,各州的 CFR 主要低于 10%。

我用 CFR 乘以一些场景下的死亡人数来计算死亡人数。表 1 显示了在低病死率、最可能的病死率和高病死率下,如果病例总数比 4 月 1 日的病例数多 2-100 倍,可能导致的死亡人数。

参考表 1,让我们看看美国可能出现 10 万到 20 万人死亡的情况。要做到这一点,我们至少需要大约 200 万个案例,这大约是我们目前拥有数量的 10 倍。但是我们能到达那里吗?是的,按照目前的轨迹,我们将在月底到达那里。

表 1:作为病例数函数的预测死亡数。注意死亡人数以千计。

如果我们达到 200 万例,表 1 告诉我们,我们将看到至少 73,000 例死亡,在较高的一端多达 203,000 例;福奇的估计很可能会实现。

其他影响

  • 美国每百万人大约有 2900 张病床,其中许多将被非新冠肺炎患者占据。如果我们看到百万分之 2500 以上的病例(这是非常可能的),医疗保健系统将承受巨大的压力。事实上,美国缺少医务工作者的个人防护装备。
  • 实施封锁/就地安置令、社会距离指导方针、关闭不必要的企业,对于阻止疫情蔓延和防止最糟糕的情况发生至关重要。

注意事项

  • 进一步的封锁可能会大幅减缓增长。虽然我们每 10 天增长 4 倍,但随着越来越多的人遵守社交距离,这个数字肯定会继续下降。
  • 这是 CFR,不是 IFR 或死亡率;它非常依赖于测试。我假设每个州的人均测试费用和当前的费用大致相同。如果检测率发生变化,病死率将受到影响。这还只考虑了确认感染的人。还有很多其他人没有症状,没有检测过,等等。因此,我们不能对整个人口的死亡率下任何结论。
  • 如果医疗基础设施变得不堪重负,CFR 很可能会与我们最糟糕的估计相似。发病到死亡的时间间隔将决定死亡发生的确切时间,以及对医院的影响。“曲线变平”肯定会导致死亡人数减少。

结论

如果美国达到 300 万例,死亡人数可能达到 20 万。大多数州的病死率约为 10%,高于中国湖北省。接下来的几天将会告诉我们这种情况会变得有多糟糕。当事情发生实质性变化时,我将更新这一分析。

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

posted @ 2024-10-16 09:02  绝不原创的飞龙  阅读(38)  评论(0编辑  收藏  举报