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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们?

原文:https://towardsdatascience.com/what-are-lambda-functions-in-python-and-why-you-should-start-using-them-right-now-75ab85655dc6?source=collection_archive---------14-----------------------

初学者在 python 和 pandas 中开始使用 lambda 函数的快速指南。

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

图片由来自 PixabayXavier Espinosa 拍摄

许多初学数据的科学家听说过 lambda 函数,但可能不确定它们是什么以及如何使用它们。本文将解释:

什么是 lambda 函数?

lambda 函数和普通函数有什么不同?

lambdas 函数为什么有用?

will 将给出一些 lambda 函数在 python 和 pandas 中的实际用法。

让我们开始吧。

什么是 lambda 函数,它们与普通函数有什么不同?

这里我假设您熟悉普通的 python 函数定义。它总是以单词 def 开头,后面是函数名、括号中的参数,最后是冒号。然后在新的一行或多行中,我们有一个函数体来执行所需的操作,通常以返回语句结束。让我们来看看这个函数的例子,它执行一个非常简单的操作,将一个数字加 1:

def add_one_to_number(number):
    return number + 1

上述函数实际上可以用 lambda 符号重写:

lambda x: x + 1

您会注意到,为了使用 lambda 函数,您需要使用 lambda 关键字,后跟参数名(通常是一个字母)和一个冒号。冒号后面是函数定义。仅此而已。

您可以看到,这个定义比您习惯的普通 python 函数定义简单得多。它简单、简洁,可以用一行代码编写。在继续之前,有一些关于 lambda 函数的重要事情需要记住:

Lambda 函数有时被称为匿名函数。这是因为它们没有名字。

Lambda 函数只能接受一个表达式,因此您将无法创建长的多表达式函数定义。

为什么 lambdas 函数有用?

一旦你理解了 lambda 函数就像是没有名字的普通函数,并且是用单一表达式编写的,那么就该解释为什么它们是有用的了。当您想要使用将另一个函数作为参数的函数时,它们会很有用。python 中这种函数的一个例子是:filter()、map()或 reduce()。

lambda 函数变得如此有用的原因是,使用简单明了的 lambda 符号通常比以传统方式定义新函数更方便,特别是如果函数被设计为只执行一个单一操作,而不是作为可重复的组件。

python 中 lambda 函数的一个实际例子。

让我们看看如何使用带有 lambda 符号的 python filter()函数。 Filter() 函数将一个函数作为第一个参数(这将是我们的 lambda 函数),将 list 作为第二个参数,我们要对其应用过滤函数。让我们看一个例子:

my_list = [1, 2, 3, 4, 5]
list(filter(lambda x: x > 2, my_list))[3, 4, 5]

在上面的例子中,我们可以看到我们使用了 filter()函数和一个被定义为 lambda x: x > 2 的匿名函数,并将其应用于 my_list 。因此,我们过滤了初始列表,只包含大于数字 2 的元素,结果得到[3,4,5]。注意,我们必须将 filter()函数的结果改为一个列表,否则结果将是一个 filter 对象而不是列表本身。

我们可以以类似的方式对 map()reduce() 使用 lambda 符号,但是我们不打算在这里讨论它。Filter()示例应该可以让你自己理解如何使用 lambda 实现上述功能。相反,我们将转到一些熊猫函数的例子。

lambda 函数与熊猫应用的实际例子()

作为一名数据科学家,你会经常使用熊猫图书馆,这是一个你会经常使用 lambda 符号的地方。匿名函数主要与 apply()、applymap()和 map()一起使用。如果你不确定这些函数是什么,你可以看看我解释它们用法的文章:

* [## Pandas 数据操作函数:apply()、map()和 applymap()

以及如何在熊猫身上正确使用它们…

towardsdatascience.com](/pandas-data-manipulation-functions-7b3519fc1370)

如果你已经知道这些函数是如何工作的,你可以直接跳到例子中。我们先从加载虹膜数据集开始。

from sklearn import datasets
import pandas as pdiris_data = datasets.load_iris()
df_iris = pd.DataFrame(iris_data.data,columns=iris_data.feature_names)
df_iris['target'] = pd.Series(iris_data.target)
df_iris.head()

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

现在让我们创建一个函数,它将在初始的萼片长度列的基础上添加一个萼片长度描述列。为此,我们将在萼片长度列上使用 apply()。

df_iris['sepal_length_description'] = df_iris['sepal length (cm)'].apply(lambda x: 'sepal length is: ' + str(x))
df_iris.head()

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

如您所见,我们已经创建了一个简单的函数“on the go ”,它连接了字符串“ sepal length is: ”,结果是将 sepal_length 列的数值更改为字符串。

可以想象,带有 lambda 符号的 apply()非常强大,它将允许您高效地操作和创建具有所需结果的新列。但是,如果您想对多个数据框列使用 lambda 函数,会发生什么情况呢?*

如何通过 apply()使用 lambda 函数并访问不同的列

如上所述,您可以使用 lambda 函数和 apply()来组合来自不同列的信息。说明这一点的一个很好的例子是对 Iris 数据集使用 apply()函数。我们将合并几个栏目的信息,创建一个名为“sepal description”的新栏目:

*df_iris['sepal_description'] = df_iris.apply(lambda x: 'sepal length/width ration is :' + str(round(x['sepal length (cm)'] / x['sepal width (cm)'], 2)), axis=1)
df_iris.head()*

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

如您所见,我们在这里使用了整个数据框的 apply()函数。在这个例子中,变量“x”指的是整个数据帧,我们可以像对传统数据帧那样调用各个列。因此,我们使用 x[‘萼片长度(厘米)’]x[‘萼片宽度(厘米)’【T3]]来计算萼片比例,然后我们对结果进行舍入,将其改为浮点型,最后将结果连接到描述字符串。

这个例子很好地展示了 lambda 函数在处理数据时是多么有用。这里我们只使用了两列,但是您可以很容易地看到,如果您的操作需要,您可以访问任意数量的列。

总结

在这篇简短的文章中,我们解释了什么是 lambda 函数,以及如何在 python 和 pandas 中使用它们。我们已经介绍了一个 filter()示例,然后演示了如何将 lambdas 与 apply()一起用于 os 系列和 DataFrame 对象。

我希望您已经发现这些示例很有用,并且您将开始在自己的代码中使用 lambdas。

*最初发布于 about datablog . com:*python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们?2020 年 4 月 16 日。

PS:我正在aboutdatablog.com上撰写深入浅出地解释基本数据科学概念的文章。 如果你喜欢这篇文章,还有一些其他的你可能会喜欢:

* [## Pandas 数据操作函数:apply()、map()和 applymap()

以及如何在熊猫身上正确使用它们…

towardsdatascience.com](/pandas-data-manipulation-functions-7b3519fc1370) [## 对熊猫中的数据框进行排序

如何快速有效地排序数据帧

towardsdatascience.com](/sorting-data-frames-in-pandas-a5a3af6f346a) [## Jupyter 笔记本自动完成

数据科学家的最佳生产力工具,如果您还没有使用它,您应该使用它…

towardsdatascience.com](/jupyter-notebook-autocompletion-f291008c66c)*

人们都在问新冠肺炎什么?一种新的问题分类数据集

原文:https://towardsdatascience.com/what-are-people-asking-about-covid-19-a-new-question-classification-dataset-adcaeaddcce4?source=collection_archive---------70-----------------------

COVID-Q 是一个新的数据集,包含 1,690 个关于新冠肺炎的问题,已被注释为 15 个问题类别和 207 个问题类别。

**这个问题。**在像目前新冠肺炎疫情这样的大规模流行病期间,最大的挑战之一是能够让人们了解最新和最相关的信息。即使像疾病预防控制中心和食品及药物管理局这样的知名来源维护着新冠肺炎的常见问题网站,用户可能仍然很难找到他们的问题,许多常见问题仍然没有答案。

我与其他研究人员合作编译了 COVID-Q [ 数据集链接 ],这是一个新冠肺炎问题的数据集,希望这个数据集对其他研究人员有用。我们的全文可以在这里找到。

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

数据集—概述。COVID-Q 是一个由 13 个在线来源的 1690 个关于新冠肺炎的问题组成的数据集。数据集通过将问题分类为 15 个问题类别以及将询问相同问题的问题分组为 207 个问题类别来进行注释。

COVID-Q 可用于多种问题理解任务:

  • 问题类别可用作标准文本分类任务,以确定问题询问的信息的一般类别。
  • 问题类可用于检索问题回答。在这个任务中,系统有一个问题和答案的数据库。给定一个新问题,系统必须在数据库中找到与给定问题提出相同问题的问题,并返回相应的答案。

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

COVID-Q 中问题的来源分布。报告的问题数量不包括已经删除的无关、模糊和无意义的问题。A *表示问题来自 FAQ 页面。

**数据采集和处理。**为了收集数据,搜集了十三个来源来收集关于新冠肺炎的问题;其中 7 个来源是来自 CDC 和 FDA 等知名组织的官方 FAQ 网站,6 个来源是基于人群的(如 Quora、Yahoo Answers)。

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

COVID-Q 中问题类别的分布,每个类别的问题数量显示在括号中。

**数据标注。**数据集有两种注释方式。首先,问同样问题的问题被手动分组到问题类别中。两个问题被定义为问相同的问题,如果它们可以用相同的答案来回答。接下来,每个至少有两个问题的问题类被赋予一个名称,这个名称概括了问题类询问的内容。然后使用这些来将每个问题分类到上图所示的 15 个问题类别中的一个。在下图中也可以看到问题类的分布。

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

至少有两个问题的所有问题类的每个问题类的问题数。问题类中的所有问题问的都是同一个问题。

标注质量。现在,你可能想知道:如果这些问题是人工标注的,我们怎么能相信你没有疯狂地标注呢?嗯,这是个公平的观点。为了验证注释的质量,标签由两个合作者进行了两轮验证。在这些验证中,每个合作者独立检查给予每个问题的类别和类标签,以验证标签是正确的。在第一轮验证中,有 67 个标签被更改。在第二轮验证中,又修改了 15 个标签。

我们还通过向三名土耳其机械工人展示每个问题类中的三个随机问题(至少四个问题)来验证注释。给定一个问题,我们要求每个工人从五个选项中选择最能描述该问题的问题类别,其中一个是我们的原始注释。对于这些抽样问题,我们 93.3%的标签同意工人的大多数投票。

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

官方 FAQ 网站没有回答的常见问题示例。中间一列表示问题类别中的问题数量(即,询问此问题的问题的出现次数)。

**常见问题不匹配。**我们发现一个有趣的现象,即疾病预防控制中心和食品及药物管理局等政府机构的常见问题网站上有很大一部分问题与其他来源的问题不匹配。例如,44.6%的疾病预防控制中心的常见问题是不匹配的,42.1%的食品和药物管理局的常见问题是不匹配的。此外,54.2%的问题类别包含来自至少两个非官方来源的问题,但仍未得到官方来源的回答。这些数据似乎表明,组织认为人们正在询问的关于新冠肺炎的问题和人们实际上正在询问的关于新冠肺炎的问题之间存在不匹配。

作者生成的问题。由于数据集在分成训练集和测试集时很小,因此手动生成了 249 个问题。这些问题以与其他问题相同的方式进行了注释和验证。

**问题分类任务。**如前所述,COVID-Q 可用于问题类别分类(这个问题问的是什么类型的信息?)和问题类分类(还有什么问题在问和这个问题一样的东西?).

**问题类别分类。**问题类别分类任务将每个问题分配到一个宽泛的类别。对于我们的基线,我们为训练集的每个类别选择了 20 个随机问题,并将剩余的问题放入测试集中。下表显示了这种数据集分割。

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

问题类别分类的数据分割。

我们使用支持向量机(SVM)和基于余弦相似性的 k-近邻分类(k-NN)作为我们数据集的基线模型,其中 k = 1。通过获得每个问题的 BERT 平均汇集令牌,对这些模型进行评估。我们还测试了一些简单的数据扩充技术。这些结果可以在下表中看到。

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

在训练集中有 15 个类和每个类 20 个示例的问题类别分类上的 BERT 基线的性能(准确度为%)。

**题型分类。**问题类分类任务要求将一个测试问题分组到一个问同样事情的问题类中。对于我们的基线,我们只考虑至少有四个问题的问题类别。我们将每个问题类中的三个问题分成训练集,其余的问题分成测试集。下表显示了这种数据集分割。

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

问题分类的数据集分割。

对于基线模型,我们使用来自问题类别分类的 k-NN 基线,还使用一个简单模型,该模型使用三重损失函数来训练一个两层神经网络。这些模型也通过获得每个问题的 BERT 平均池标记来评估。类似地,我们也为这个任务运行数据扩充。这些结果可以在下表中看到。

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

在训练集中有 89 个类别和每个类别 3 个示例的问题类别分类上,BERT 基线的性能(准确度百分比)。

结论。 COVID-Q 是一个新的数据集,包含来自 13 个来源的 1,690 个新冠肺炎问题,标注了 15 个类别标签和 207 个类别标签。COVID-Q 可以直接帮助训练问答系统或作为评估资源。COVID-Q 包含了简单的 BERT 基线。未来的工作包括收集更多的问题(可能与搜索引擎公司合作)或评估更复杂的模型。

完整的数据集可以在这里找到。

全文可以在这里找到。

什么是随机变量

原文:https://towardsdatascience.com/what-are-random-variables-7c4794fae530?source=collection_archive---------29-----------------------

理解什么是随机变量以及它们与函数的关系

在概率论或数理统计课程中,随机变量第一次成为人们的噩梦。在这篇博客中,我将带你了解随机变量。如果我说随机变量不是变量,而是取随机值的函数呢。我在上面的定义中使用了 function 这个词。让我们从理解数学中的函数开始。

想象一下,你有一台果汁自动售货机,你只有 3 种水果:苹果、芒果和香蕉。你把苹果放进机器,然后你得到苹果汁作为输出。同样,芒果可以得到芒果汁,香蕉可以得到香蕉汁。

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

这里我们可以看到两组:

  1. 输入集:{芒果,香蕉,苹果}
  2. 输出集:{芒果汁,香蕉汁,苹果汁}

这两个集合通过果汁自动售货机相互关联。同样,数学函数也是两个集合之间的映射:输入集合和输出集合。这些通过称为 f(x) 的规则相互关联。设 f(x) = 2x + 1 。现在如果你输入 1 到这个函数,你会得到 3 作为输出。对于-2,输出将是-3,对于输入 5,输出将是 11。

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

在上面果汁的例子中,输入集合是水果,输出集合是果汁,这两个集合通过榨汁机(我们的 f(x) 相互关联。

随机变量也是函数,其输入集是随机实验的结果,输出集是一组实数。这些用大写字母表示(例如 X )考虑一个抛硬币的实验。我们可以有两种结果:正面反面。让我们把正面映射到 1,反面映射到 0。

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

  • X(头)= 1
  • X(尾部)= 0

同样,我们可以使用随机变量将任何实验结果映射到实数。再举一个例子,我们在一个盒子里放了三个不同颜色的球:红色、绿色和蓝色。所以我们用下面的方式映射实验的结果。

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

现在有人会问,我们为什么要做这样的映射?为了理解这一点,让我提出几个概率问题:

  • P(掷骰子一次得到 3 个以上)
  • P(掷 4 次硬币得到 2 个正面)
  • P(在一次掷骰子中得到 2 到 5 之间的数字)

你不觉得这种表示概率的方法很乏味吗?我们需要找到一种方法来用数学形式表示这些概率,以便我们可以对它们进行数学运算。这是使用随机变量实现的。现在我将使用随机变量重写上述概率。

  • P(X > 3) :这里 X 是骰子上的数值
  • P(X = 2) :此处 X 为头数
  • P(2 < X < 5) :此处 X 为模具上的数值

正如我们所看到的,随机变量方法更加简洁,并且提供了一种执行数学运算的便捷方式。

但为什么称之为 变量 又叫 随机 ?让我们考虑一下上面的果汁例子。我们对果汁机的投入是水果。但是哪种水果呢?水果可以是苹果、香蕉或芒果。那么,对于水果的价值,我们能说些什么呢?是固定的还是可变的?由于水果的值可以取水果集中的任何值,所以它是可变的。所以任何值不固定的东西都叫做变量。如果我们将 X 作为投掷硬币的结果,其中正面将被映射为 1,反面将被映射为 0。那么 X 可以取什么值呢? X 可以是 0 或者 X 可以是 1。这样,随机变量就被当作一个变量。

现在让我们扩展一下果汁的例子。现在你拥有了一家出售 3 种果汁的果汁店。所以你的顾客会来要这三种果汁中的任何一种。作为一名店主,你能确定下一位顾客会要求哪种果汁吗?根据你过去的经验,你只能猜测,但不能百分之百肯定地说什么。对果汁类型的需求是随机的,可以取任何值。同样,当你扔硬币时,你能肯定地说它是正面还是反面吗?或者当你扔骰子时,你能预测它的结果是什么数字吗?所以随机变量之所以称为随机,是因为这个变量的值不能确定地定义,我们只能猜测,这个猜测称为随机变量具有特定值的 概率 。抛硬币实验中, P(X=1) = 0.5 。所以我们只能说有 50%的机会正面朝上。

但是方程中变量 x 的区别是什么:

*y = 2x + 1*

以及抛硬币的变量 X 。如果我告诉你 *y=1,*你能告诉我 *x 的值是多少?*你不能完全肯定的说 x 的值会是 0 吗?所以这里的变量 x 是确定性的,不是随机的。所以这不能称为随机变量。

从上面的讨论中,我们可以说随机变量是一个将随机实验的结果映射到 T42 实数的函数。因为这是函数的输入集,所以它被称为随机变量的定义域,用ω表示。而输出集或 Co 域是由ℝ.表示的一组实数在函数符号中,它可以这样定义:

X: Ω → ℝ

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

对于抛硬币实验,ω= {正面,反面}和ℝ = {1,0}。所以我们可以这样写:

  • X(人头)= 0
  • X(尾)= 1

为了方便起见,我们省略了括号部分,简单地写成 X = 0X = 1 ,这样看起来更像是一个变量而不是函数。

我希望这已经澄清了随机变量的概念,现在你可以明白为什么我们更多地把随机变量当作一个变量而不是一个函数,尽管随机变量实际上是函数!

什么是小世界网络模型?

原文:https://towardsdatascience.com/what-are-small-world-network-models-87bbcfe0e038?source=collection_archive---------12-----------------------

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

来源:像素

介绍将现实世界的网络浓缩成小型网络的数学模型。

什么是小世界网络模型,为什么

在社会网络分析领域,许多现实世界的网络,如互联网,脸书网络,有数百万个节点和数十亿条边。它们的拓扑结构太复杂,而且太大,研究人员无法分析。

因此,研究人员转向网络的生成模型。其思想是,如果我们可以设计生成图形的模型,并保证模拟图形在网络属性方面与真实世界的网络非常相似,我们就可以以更简单的方式对合成网络而不是真实世界的网络进行分析。此外,利用网络的生成模型,我们不仅可以更好地理解现实世界网络的数学基础,还可以进行现实世界网络可能无法进行的受控实验。

基于上述原因,研究人员提出了几种产生小世界网络的网络模型。在本帖中,我们将列出社交网络分析领域中 3 个最常见的网络模型。

  1. 鄂尔多斯-雷尼模型
  2. 瓦特-斯特罗加兹模型
  3. 巴拉巴斯-艾伯特模型

erdős–rényi 模型

鄂尔多斯-雷尼模型通常被称为随机图模型;它根据概率分布随机生成网络。鄂尔多斯-雷尼模型有两个变体, G(n,p)G(n,m) ,它们彼此非常相似。

网络生成

使用 G(n,p) 模型,我们生成一个具有 n 个节点的无向网络,并且网络中每个可能的边都是独立生成的,并且以概率 p 同分布。

使用 G(n,m) 模型,我们生成一个具有随机均匀选择的 n 个节点和 m 条边的无向图。

限制

  • 它的度分布不同于真实世界的网络,真实世界的网络通常遵循幂律。
  • 鄂尔多斯-仁义网络的聚类系数太小。
  • 最重要的是,现实世界的网络不是随机产生的。

瓦特-斯特罗加兹模型

由于 Erdos-Renyi 模型具有小的聚类系数,这与真实世界的网络非常不同,Watts-Strogatz 模型的思想是在生成的模型中具有高的聚类系数和短的平均路径长度。

网络生成

如果我们生成规则的网格,我们可以有高的聚类系数,但是它们在形状上是固定的。我们想给网络增加随机性,这可以通过随机重新布线来实现。随机的重新布线过程会产生长距离连接,并给生成的网络增加随机性。

  • 生成一个规则的格子
  • 对于网络中的每条边,以概率 p 重新布线,同时避免自循环和链路重复(多条边)

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

来源:维基百科

限制

  • 它仍有不符合幂律的不切实际的度分布
  • 固定的节点数量,与真实网络不同,节点数量会持续增长

巴拉巴希-艾伯特模型

上面提到的两个随机网络模型受限于两个条件,这两个条件不同于真实世界的网络。

  1. 不切实际的学位分布
  2. 固定数量的节点

为了解决这些限制,研究人员试图模拟真实世界网络的形成过程。结果,他们观察到以下特征,并开发了巴拉巴斯-艾伯特模型。

  • 现实世界的网络建设是一个稳定增长过程的产物。这种特征被描述为持续增长。
  • 大多数真实网络中的新节点更喜欢链接到更多连接的节点。这种特性被称为优先依恋。

上述两个特征是现实世界网络具有无标度特性的原因,这种特性使得网络的度分布遵循幂律。Barabasi-Albert 模型旨在捕捉导致现实世界网络无标度特性出现的机制。

网络生成

构建 Barabasi-Albert 网络,我们从 m0 节点开始,任意选择节点之间的链路,只要每个节点至少有一条链路。网络发展了以下两个步骤,

  • 在每个时间步,我们添加一个新节点,该节点有 m (≤ m0 )条链路,这些链路将新节点连接到网络中已经存在的 m 个节点。这使得网络不断增长。
  • 新节点的链路连接到节点 i 的概率与节点 i 的度成比例。这也被称为优先依附。

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

来源:维基百科

摘要

  • 小世界网络旨在生成与真实世界网络相似的网络,以提供真实世界网络的数学解释。
  • Erdos-Renyi 模型和 Watts-Strogatz 模型是随机生成的。
  • Barabasi-Albert 模型通过在网络生成中加入连续增长和优先依附特性,生成具有无标度特性的网络。
  • 总的来说,所有小网络模型的另一个限制是随机模型只生成无向网络,而许多现实世界的网络是有向的。

参考

[1]邓肯·j·瓦茨和史蒂文·h·斯特罗加兹,“小世界”网络的集体动力学,自然杂志

[2]艾伯特-拉斯洛·巴拉巴希,网络科学:巴拉巴希-艾伯特模型

[3] 鄂尔多斯-仁义模型,维基百科

python 中最流行的 10 个标准库是什么?

原文:https://towardsdatascience.com/what-are-the-10-most-popular-standard-libraries-in-python-359defb104d6?source=collection_archive---------31-----------------------

基于 GitHub 存储库的样本数据集探索流行的 python 标准库。

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

杰西卡·鲁斯切洛在 Unsplash 上的照片

Python 以其有用的库和包而闻名,即使没有软件工程背景的人也可以编程。

如今,Python 是人工智能和机器学习领域最受欢迎的编程语言之一。Python 以其有用的库和包而闻名,即使没有软件工程背景的人也可以编程。Python 有一组用 Python 语言发布的标准库,如 DateTime 、 *math、*或 random 。在本文中,我们的目标是在 GitHub 的 python 库中找到 10 个最有用的标准库。为了实现我们的目标,我们研究了 GitHub 中不同的 python 库,并收集了它们常用的库来回答这个问题。为了开始我们的研究,首先,我们收集了 GitHub 中 5 个著名的 python 库去年的提交。然后,我们解析这些存储库中的 python 源文件,并收集提交中使用的库。最后,我们可视化了这些 GitHub repos 的提交中使用的 10 个最流行的 python 标准库。

这篇文章结构如下:

1.如何收集数据?

2.如何解析 Python 源代码?

3.GitHub 库中最受欢迎的 10 个 python 库是什么?

4.结论

5.参考

  1. 如何收集数据?

有不同的方法可以访问 GitHub 存储库中的数据,如 GitHub torrent 、 *Git API 调用、*或 google big query 。但是,在本文中,我们想尝试一个新的非常有用的 python 包,名为 Pydriller ,来收集我们需要的数据。Pydriller 快速且易于使用。我通过我的博士研究熟悉了这个有趣的包。你可以在这里查看 Pydriller 的文档。从 Pydriller 开始,首先,我们安装这个包:

pip install pydriller

在 GitHub 中,每次提交可以更改一个或多个源文件。在 GitHub 等版本控制系统中,每次提交都有一个文件,名为“diff”。它通过提交特定的提交来存储源文件中应用的更改。在 GitHub 库的提交中查找库的方法之一是在“*diff”*文件中搜索正则表达式。但同样,我们想在这篇文章中尝试一些不同的东西。我们在应用提交之前和之后比较源文件的两个不同版本,然后收集这两个文件在库名上的差异。通过这种方法,我们可以发现这些库在不同的提交中使用的频率。好消息是 Pydriller 允许我们在提交之前和之后访问源文件的版本。下面是收集数据所需的代码:

使用 Pydriller 收集 GitHub 中 5 个著名的 python 库

我们在 GitHub 上收集了去年提交的 5 大 python 项目:【Django】熊猫NumPyhome assistant系统-设计-初级 。**“repository mining”*是 Pydriller 中主要的 API 调用之一。我们可以用repository mining:中的两个参数定义一个时间段来收集不同存储库中的提交。此外,我们考虑提交所有以“结尾的源文件。py “因为在这些库中有其他编程语言的源文件,但是我们专注于 python 库。我们收集三个特征:【commit . hash】source _ code _ before’【source _ code】。Pydriller 中的commit . hash*返回提交 id, source_code_before 是应用提交前源文件的版本, source_code 显示提交提交后源文件的内容。这是我们收集的数据的标题:

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

“图片由作者提供”:tf_source.head()

到目前为止,我们收集了开始旅程所需的数据。在下一节中,我们将学习如何在这些源文件中探索库。

2。如何解析 python 源代码?

从源代码中提取信息的方法之一是将源代码转换成抽象语法树。然后,我们可以遍历树并收集目标节点。但是,重要的一点是,我们只想收集 python 标准库,而不是存储库中使用的所有包,比如只在存储库中有意义的本地定义的库。Python 标准库是用 python 语言发布的。因此,为了将标准包与其他包分开,我们需要拉取 python 中所有有效的标准库。然后,我们可以编写一个函数来收集源代码中的库名。我们可以将这一部分分为两步:

2.1.收集 python 中所有可用标准库的列表

2.2.构建一个基于 AST 收集库名的函数

2.1。收集 python 中所有可用标准库的列表

python 网站上,有一个 python 中所有标准库的列表,还有一个小描述。这个页面按照字母名称对所有 python 标准库进行排序,帮助我们了解 python 中的所有标准库。我把所有 python 标准库的列表放在这里放在一个中。csv 格式。**

2。2.构建一个函数来收集基于 AST 的库名

现在我们有了所有标准 python 库的列表,我们需要从 python GitHub 存储库中收集样本数据集中的库名。正如我们提到的,方法之一是遍历 AST。在本文中,我们的目标节点是*【import】【import from】*。我们希望有一个函数遍历解析树,找到目标节点,并返回库的名称。下面是一个这样做的类。

用 python 代码收集库名的类

为了更好地理解这个类是如何工作的,这里有一个简单的代码。这个示例代码只有两行,分别导入两个不同的库。其中一个库是 python 标准库: tokenize 另一个是本地库: assistant

**import tokenize as tz
import assistant as ass**

下面是这个示例代码的解析树的转储。可以发现,我们需要收集的是作为 【名称】 自变量的 别名 类。此外,我们需要检查库的名称是否在我们从 python 原始网站收集的所有标准库的列表中。我们拯救了。csv 文件在一个名为*【API _ name】*的列表中。如果我们在这个示例代码上应用这个类 FuncParser,,它将只返回 “tokenize” ,因为另一个库 assistant 在 python 标准库列表中不可用。

**Module(body=[Import(names=[alias(name='tokenize', asname='tz')]), Import(names=[alias(name='assistant', asname='ass')])])**

3。python 库中最流行的 10 个基于 GitHub 提交的标准库是什么?

到目前为止,我们在 GitHub 中收集了 5 个著名的 python repo 的样本数据集,并构建了一个类来收集 python 代码中的库名。现在,我们需要将这个函数应用于来自 GitHub 的样本数据,并找到提交这些存储库时使用的前 10 个库。正如我们前面所讨论的,我们将提交提交之前源文件的 AST 与提交提交之后同一源文件的 AST 进行比较。然后我们收集不同的库节点。首先,我将向您展示如何比较这两个 AST 的分步示例,最后,我将所有代码一个接一个地放在一起,循环遍历整个数据集,并计算每个库的出现次数。

3.1.在 提交提交之前,收集库名 列表

正如您在第 1 节中看到的,我们将样本数据集存储在“TF _ source”中。我选择这个数据集的第一行来解释整个过程。TF _ source[’ Commit _ before '][0]返回在我们的示例数据集中应用第一次提交之前的代码内容。然后,我们应用 FuncParser() 来收集这个源文件中的所有库名,并将结果返回到 file_contents 列表中。我们在之前创建一个名为tokens _ 的数据帧,并存储这个列表。**

 **text_before=str(**tf_source[‘Commit_before’][0]**)

 bf_obj = **FuncParser**()
 bf_tree = ast.parse(text_before)
 **file_contents** = []
 bf_obj.visit(bf_tree)
 dtobj_before = pd.DataFrame(file_contents, columns=[‘token’])
 **tokens_before** =pd.DataFrame(dtobj_before[‘token’].value_counts())**

3.2.在 提交提交后,收集库名 的列表

**我们重复与 3.1 相同的过程。,但这次对源文件的内容提交了 commit 后,**TF _ source[’ Commit _ after '][0]。同样,我们将结果存储在一个数据帧中,称为, tokens_after。

**text_after=str(**tf_source**[‘Commit_after’][0])

 aft_obj = **FuncParser**()
 aft_tree = ast.parse(text_after)
 **file_contents** = []
 aft_obj.visit(aft_tree)
 dtobj_after = pd.DataFrame(file_contents, columns=[‘token’])
 **tokens_after** =pd.DataFrame(dtobj_after[‘token’].value_counts())**

3.3.提取两个列表之间的差异

在这一步中,我们从令牌 _after** 中减去令牌 _before 中的令牌 _ after来计算它们的差值。**

**diff = tokens_after.**subtract**(tokens_before)
diff_token = diff[(diff.select_dtypes(include=[‘number’]) != 0).any(1)]
 diff_token=diff_token.fillna(0)
 diff_token= diff_token.abs()
 **diff_token** = diff_token.reset_index()**

3.4.计算库的数量

最后,我们统计每个库在 diff_token 数据帧中出现的次数。为此,我们创建一个名为 py_lib 的字典,并统计库的出现次数。

****py_lib**={}
j=0 
for j in range(0,len(diff_token)):
        word = diff_token['index'][j].lower()
        if word in py_lib:
            py_lib[word]+=diff_token['token'][j]
        else:
            py_lib[word]=1
        j+=1**

为了将上述步骤应用到我们在第 1 节中收集的整个样本数据中,我在步骤的开头添加了一个循环。代码如下:

收集整个样本数据集中的库

现在我们收集了 GitHub 中 python 库提交的所有库及其频率,我们希望在 py_lib 字典中找到前 10 个库。我们可以用下面的代码收集字典中的前 10 个值。我们可以看到,基于我们的样本数据集,诸如‘warnings’,【sys’‘datetime’之类的库位于前 10 名 python 标准库的列表中。

**from operator import itemgetterd=sorted(py_lib.items(), key=itemgetter(1),reverse=True)[:10][('warnings', 96.0),
 ('sys', 73.0),
 ('datetime', 28.0),
 ('test', 27.0),
 ('os', 22.0),
 ('collections', 18.0),
 ('io', 16.0),
 ('gc', 10.0),
 ('functools', 9.0),
 ('threading', 7.0)]**

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

“作者图片”:基于 GitHub 样本数据集的 python 十大标准库

另外,我们可以绘制 python 库的单词云图和它们的频率。

**import matplotlib.pyplot as plt
from wordcloud import WordCloud wordcloud = WordCloud(background_color='black',max_font_size = 50)
wordcloud.generate_from_frequencies(frequencies=py_lib)
plt.figure(figsize=(8,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()**

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

“Image by Author”:基于 GitHub 样本数据集的流行 python 库的单词云图

4。结论

在本文中,我们试图基于一个样本数据集收集 10 个最流行的 python 库。该数据集包含 GitHub 中 5 个著名 python 库去年的提交。我们使用 Pydriller 从 GitHub 收集数据。我们比较提交提交前后源文件的 AST,并收集这些提交中使用的库的列表。然后,我们在 word 云图中绘制最流行的 python 库。

复制这篇文章的所有代码都可以在 GitHub 的这里获得。

5。参考文献

[1]牟,李,郭刚,张,李,王,田,金,张(2014).用于程序语言处理的树形结构卷积神经网络。 arXiv 预印本 arXiv:1409.5718

[2] Spadini,d .,Aniche,m .,Bacchelli,a .,2018,10 月。Pydriller:用于挖掘软件仓库的 Python 框架。在2018 年第 26 届 ACM 欧洲软件工程会议和软件工程基础研讨会会议录(第 908–911 页)。

[3]d .舒勒和 t .齐默尔曼(2008 年 5 月)。从版本档案中挖掘使用经验。在2008 年矿业软件库国际工作会议论文集(第 121-124 页)。

https://github.com/ishepard/pydriller

https://docs.python.org/3/py-modindex.html#cap-p

评估回归模型的 3 个最佳指标?

原文:https://towardsdatascience.com/what-are-the-best-metrics-to-evaluate-your-regression-model-418ca481755b?source=collection_archive---------1-----------------------

R 平方,校正的 R 平方,均方差,缅因州 RMSE

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

来源:Issac Smith 在 Splash 上拍摄的照片

模型评估在数据科学中非常重要。它有助于您了解模型的性能,并使向其他人展示您的模型变得容易。有许多不同的评估指标,但只有其中一些适合用于回归。本文将涵盖回归模型的不同度量以及它们之间的差异。希望在你读完这篇文章后,你能清楚哪些指标适用于你未来的回归模型。

每次当我告诉我的朋友:“嘿,我建立了一个机器学习模型来预测 XXX。”他们的第一反应会是:“酷,那么你的模型预测的准确度是多少?”与分类不同,回归模型中的准确性稍微难以说明。你不可能预测准确的值,而是你的预测与真实值有多接近。

回归模型评估有 3 个主要指标:

1.R 平方/调整后的 R 平方

2.均方差(MSE)/均方根误差(RMSE)

3.平均绝对误差

R 平方/调整后的 R 平方

r 平方衡量模型可以解释因变量的多少可变性。它是相关系数®的平方,这就是它被称为 R 平方的原因。

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

r 平方公式

通过预测误差的平方和除以用平均值代替计算预测的平方和来计算 r 平方。r 平方值在 0 到 1 之间,较大的值表示预测值和实际值之间的拟合较好。

r 平方是确定模型拟合因变量的好方法。但是没有考虑过拟合问题。如果您的回归模型有许多独立变量,由于模型太复杂,它可能非常适合定型数据,但对于测试数据来说表现很差。这就是引入调整后的 R 平方的原因,因为它将惩罚添加到模型中的额外独立变量,并调整度量以防止过度拟合问题。

#Example on R_Square and Adjusted R Square
import statsmodels.api as sm
X_addC = sm.add_constant(X)
result = sm.OLS(Y, X_addC).fit()
print(result.rsquared, result.rsquared_adj)
# 0.79180307318 0.790545085707

在 Python 中,可以使用 Statsmodel 或者 Sklearn 包计算 R 平方

从样本模型中,我们可以解释大约 79%的相关可变性可以由模型来解释,并且调整后的 R 平方与 R 平方大致相同,这意味着模型相当稳健。

均方差(MSE)/均方根误差(RMSE)

虽然 R 平方是模型拟合因变量的相对度量,但均方差是拟合优度的绝对度量。

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

均方差公式

MSE 的计算方法是预测误差的平方和,即实际输出减去预测输出,然后除以数据点数。它给你一个绝对的数字,告诉你你的预测结果与实际数字有多大的偏差。您无法从一个单一的结果中解读许多见解,但它给了您一个真实的数字来与其他模型结果进行比较,并帮助您选择最佳的回归模型。

均方根误差(RMSE)是 MSE 的平方根。它比 MSE 更常用,因为首先有时 MSE 值可能太大而不容易比较。第二,MSE 是通过误差的平方计算的,因此平方根使它回到预测误差的相同水平,并使它更容易解释。

from sklearn.metrics import mean_squared_error
import math
print(mean_squared_error(Y_test, Y_predicted))
print(math.sqrt(mean_squared_error(Y_test, Y_predicted)))
# MSE: 2017904593.23
# RMSE: 44921.092965684235

可以使用 Sklearn 包在 Python 中计算 MSE

平均绝对误差

平均绝对误差(MAE)类似于均方误差(MSE)。然而,MAE 取的不是 MSE 中误差的平方和,而是误差绝对值的和。

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

平均绝对误差公式

与 MSE 或 RMSE 相比,MAE 是误差项和更直接的表示。 MSE 通过平方对大的预测误差给予较大的惩罚,而 MAE 对所有误差一视同仁

from sklearn.metrics import mean_absolute_error
print(mean_absolute_error(Y_test, Y_predicted))
#MAE: 26745.1109986

可以使用 Sklearn 包用 Python 计算 MAE

总体建议/结论

R 平方/调整后的 R 平方更适合用于向其他人解释模型,因为您可以将数字解释为输出可变性的百分比。MSE、RMSE 或 MAE 更适合用来比较不同回归模型之间的性能。就我个人而言,我更喜欢使用 RMSE,我认为 Kaggle 也使用它来评估提交。但是,如果值不太大,使用 MSE 是完全有意义的,如果不想惩罚大的预测误差,则使用 MAE 也是完全有意义的。

调整后的 R 平方是这里唯一考虑过拟合问题的度量。R square 在 Python 中有一个直接的库可以计算,但是除了使用 statsmodel 结果之外,我没有找到一个直接的库来计算调整后的 R Square。如果你真的想计算调整后的 R 平方,你可以使用 statsmodel 或者直接使用它的数学公式。

有兴趣了解用于评估分类模型的顶级指标吗?请参考下面的链接:

[## 评估分类模型的 5 大指标

与回归模型不同的是,当我们评估分类模型的结果时,我们不应该只关注预测…

medium.com](https://medium.com/@songhaowu/top-5-metrics-for-evaluating-classification-model-83ede24c7584)

需求计划的最佳实践:预测流程

原文:https://towardsdatascience.com/what-are-the-best-practices-for-demand-planning-part-2-forecasting-process-be9800c981db?source=collection_archive---------25-----------------------

下面这篇文章是我的一篇 LinkedIn 帖子 的总结。如果你对这样的辩论感兴趣,那就 连线吧! 感谢以下人士在原讨论中的真知灼见: 蒂莫西·布伦南克里斯·戴维斯瓦列里·马诺欣莱昂纳多·卡夫雷拉查理·坎茨卡尔-埃里克·德沃斯派罗斯·马克里达基斯

供应链需求计划人员经常问自己:预测我的需求的最佳模型是什么?我应该遵循哪些最佳实践来改进(或建立)我的预测(并使其对我的供应链更有用)?

对这些问题不可能给出一个明确、绝对的答案。但是我将尝试在两篇文章中(这是第二篇,你可以在这里找到第一篇)回顾大多数现有的预测模型,然后向你展示调整和选择它们的技巧、诀窍和最佳实践。第二篇文章将研究各种最佳实践,介绍如何选择最佳预测模型,根据您的供应链进行调整,并改进您的总体需求计划流程。

📔步骤 1:四维预测框架

在任何供应链中,预测总是达到目的的手段,而不是目的本身。我们需要记住的是,只有当预测能够使供应链采取适当的行动时,预测才是有意义的。一个好的预测模型应该允许你的供应链提高服务水平,更好地计划,减少浪费和总成本。

在进行预测时,您必须定义四个维度:粒度范围审查频率指标(我喜欢称之为四维预测框架)。让我们一个一个地讨论那些。

📦 1.粒度

您应该首先为您的预测确定正确的粒度。你应该预测每个产品,每个包装类型,每个国家,每个销售渠道,每周,每月?要回答这些问题,你必须考虑你的供应链基于这一预测所采取的决策。请记住,只有当预测有助于供应链采取行动时,它才是有意义的。例如,假设您必须在本地仓库运送产品。在这种情况下,对每个国家进行预测可能是个好主意。如果您的生产过程需要生产特定包装的产品,您应该预测每个包装。如果不同的仓库(或流程)服务于不同的销售渠道,您应该分别对它们进行预测。另一方面,如果你只有一个仓库,你应该问问自己,你真的需要对每个地区进行预测吗?

🔭 2.地平线

一旦您知道您将在什么粒度级别上工作,您就应该选择正确的预测范围。同样,你可以通过思考你的供应链试图优化/实现什么来回答这个问题。假设你的供应商(或生产工厂)需要提前三个月收到订单/预测。在这种情况下,你知道你应该在 M+1/+2/+3 上工作。可以跳过 M+4(或者至少不关注它)。

❗统计模型可以免费提供无限期的预测。机器学习模型就不是这样了。所以你可能不得不坚持用统计模型来预测长期趋势。需求计划员(以及任何其他从事预测工作的人)的时间也是有限的,所以他们也应该选择一个有限的时间范围来关注。

❗ **多重视野?**注意多个流程(团队)可能会使用您的预测。一个团队可能使用它进行短期规划(提前 1-3 周;例如,部署),另一个团队负责长期决策(提前 6 到 18 个月;例如,打开/关闭工厂)。在这种情况下,拥有两个不同的预测过程(具有不同的粒度、范围、审查频率和指标)可能会很有趣。

⏱️ 3.审查频率

现在您已经知道了您的预测范围,您可以定义预测复查频率:您应该每周、每月还是每季度进行预测?

更频繁地更新预测可能会提高准确性(因为您手头有更新的数据)。更新太频繁可能会造成混乱,因为你对需求的变化反应过度,为了有限的附加值消耗太多的资源。如果您发现您的预测流程的预测附加值越来越低,也许您应该减少预测审核频率。

📖**定义:预测附加值。**一个预测流程框架,跟踪每个团队/流程步骤相对于基准的附加值。它是由迈克尔·吉利兰在 21 世纪 10 年代设想和推广的(见他的书这里)。

🎯 4.韵律学

为预测流程/模型选择正确的指标并不简单。根据所选的指标,你可能会过于重视异常值(RMSE 弱点),或者冒着预测有偏差的风险(美国市场弱势)。我在这里详细讨论这些指标。通常,查看 KPI 的组合(如 MAE & Bias)将是一个实用的解决方案。

💡**加权 KPI。**在我的《供应链预测的数据科学第二版(你可以在这里 预定 )中,我建议在总体指标计算中根据盈利能力、成本或总体供应链影响对每种产品(或 SKU)进行加权。这个想法是,你想更多地关注最重要的 SKU。

💾步骤 2:数据质量和收集

一旦定义了预测流程的四个维度,就可以开始收集数据了。它在项目中经常被忽视,因为这部分不是最性感的,而且经常被视为一种成本。但是如果没有足够好的数据,你将无法创建一个有意义的模型。在讨论型号选择之前,发现哪些数据可用非常重要。

🔎数据质量

我喜欢调整模型,直到我不能挤出超过 0.1%的额外精度。如果您正在争取额外的 0.1%的准确性,您应该分配多少时间来使您的需求数据质量达到 99.99%?要提高需求数据质量,您应该注意以下几点:

  • 你收集失去的销售(或未完成的订单)吗?
  • 你跟踪每个订单的初始要求交货日期还是仅仅发货日期(或者更糟,开票日期)?
  • 您是否记录了每个取消订单的取消原因
  • 假设一个客户由于缺乏库存而无法履行其初始订单,后来又回来下同样的订单。你会将注册为需求的两倍吗?

数据量

您将需要一定数量的需求数据,这取决于您需要预测的模式类型以及您将使用的模型。如果你面对季节性需求,你将需要至少三年的数据才能让一个统计模型工作。机器学习模型通常需要更多数据(尤其是如果你想进行中长期预测)。

第三步选择模型

一旦你收集了数据,知道了你的预测过程的 4 个维度,你就可以选择一个模型(关于预测模型的回顾,见本文的第一部分这里)。

🧮统计模型

使用指数平滑通常是一个安全的赌注。它们易于实现,易于解释(大多数需求计划软件都依赖于它们)。他们也可以很容易地做出长期预测。

🖥️机器学习

假设您想更进一步,实现更好的预测准确性。那样的话,你应该去找机器学习模型。不幸的是,尽管指数平滑模型相当通用(它们仍然需要一些微调),但机器学习模型需要适合你的数据集。这就是为什么你应该首先寻找数据收集,然后选择模型。对你来说,不经过任何调查和微调,很难得到现成的模型。和往常一样,您应该首先检查您的需求数据质量。在一个糟糕的数据集上运行最先进的 ML 模型是没有意义的。关于如何使用机器学习进行预测的介绍,请参见我的文章这里

📊功能选择

(大部分)数据科学的艺术在于特征选择。你应该向你的机器学习模型展示哪些信息,让它预测需求?同样,对于每个供应链来说,没有最好的特性。

🎚️参数优化

最后,一旦您选择了一个模型和一组(潜在的)特征,模型优化应该遵循数据科学的最佳实践(例如使用随机搜索和交叉验证)。

💪更进一步:了解你的业务

一旦建立了预测模型,您仍然有许多机会来进一步提高预测的准确性。

特定产品的特定型号

假设您有一个由不同需求模式的产品组成的产品组合。在这种情况下,为它们中的每一个开发特定的模型可能是一个好主意。值得注意的是,间歇产品和新产品可以受益于特定的模式。

  • **间歇性产品。**间歇性产品可能需要特定的模型、库存政策和供应链管理技术。参见我的文章如何预测高利润低产量的产品?了解更多信息。
  • **新产品。**新产品也需要不同的算法,因为你不能依赖太多(如果有的话)历史数据。开发特定的 ML 算法可能是在产品发布期间预测需求的正确解决方案。

🧠判断性预测和预测附加值

通过使用判断性预测,需求计划员应该能够改进预测基线。与各种利益相关者(客户、营销和定价团队)沟通应该有助于你微调你的预测。

一旦你知道在哪里可以找到额外的信息来丰富你的基线预测,你就应该跟踪你可以增加多少额外的准确性。为此,您必须跟踪每一步的预测附加值

🏆培训和用户成功

最后一点,最好的预测模型或软件,如果没有训练有素的用户,将会是一场灾难。这就是为什么我通常会通过一轮培训来启动任何咨询项目。

通常,一个被用户很好理解和使用的标准预测引擎,与它所影响的供应链同步,将会创造出比最佳预测模型更好的结果(而且你现在知道没有所谓的最佳预测模型)。

关于作者

[## Nicolas vande put——顾问,创始人——供应链| LinkedIn

查看 Nicolas Vandeput 在世界上最大的职业社区 LinkedIn 上的个人资料。尼古拉斯有 7 份工作列在…

www.linkedin.com](https://www.linkedin.com/in/vandeputnicolas/)

icolas Vandeput 是一名供应链数据科学家,擅长需求预测和库存优化。他在 2016 年创立了自己的咨询公司 SupChains ,并在 2018 年共同创立了 SKU 科学——一个快速、简单、实惠的需求预测平台。尼古拉斯对教育充满热情,他既是一个狂热的学习者,也喜欢在大学教学:自 2014 年以来,他一直在比利时布鲁塞尔为硕士学生教授预测和库存优化。自 2020 年以来,他还在法国巴黎的 CentraleSupelec 教授这两个科目。他于 2018 年出版了 供应链预测的数据科学(2021 年第 2 版)和 2020 年出版了 库存优化:模型与模拟

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

数据科学中常用的统计检验有哪些

原文:https://towardsdatascience.com/what-are-the-commonly-used-statistical-tests-in-data-science-a95cfc2e6b5e?source=collection_archive---------11-----------------------

数据科学家的便利收藏

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

JESHOOTS.COMUnsplash 上拍照

业务分析和数据科学融合了许多专业领域。来自多个领域和教育背景的专业人士正在加入分析行业,追求成为数据科学家。

我职业生涯中遇到的两种数据科学家。关注算法和模型细节的人。他们总是试图理解幕后的数学和统计学。想要完全控制解决方案及其背后的理论。另一类人对最终结果更感兴趣,不看理论细节。他们着迷于新的和先进的模型的实现。倾向于解决手头的问题而不是解决方案背后的理论。

这两种方法的信徒都有自己的逻辑来支持他们的立场。我尊重他们的选择。

在这篇文章中,我将分享一些数据科学中常用的统计测试。不管你相信哪种方法,知道其中的一些是有好处的。

在统计学中,从任何探索中得出推论有两种方法。参数估计是方法之一。这里,通过各种方法计算总体参数的未知值。另一种方法是假设检验。它有助于我们测试由一些先验知识猜测的参数值。

我将列出一些你在数据科学中经常会遇到的统计测试程序。

“检验一个假设有效性的唯一相关方法是将其预测与经验进行比较.”—米尔顿·弗里德曼

作为一名数据科学家,我真的需要了解假设检验吗?

在数据科学的大多数决策过程中,我们都知道或不知不觉地使用假设检验。这里有一些证据来支持我的说法。

作为数据科学家,我们所做的数据分析可以分为四大领域

  1. 探索性数据分析

2.回归和分类

3.预测

4.数据分组

这些领域中的每一个都包括一些统计测试。

探索性数据分析

这是数据科学不可避免的一部分,每个数据科学家都要在其中花费大量时间。它为创建机器学习和统计模型奠定了基础。EDA 中涉及统计测试的一些常见任务是—

  1. 正态性检验

2.异常值测试

3.相关性测试

4.匀性检验

5.分布相等性检验

这些任务中的每一项都涉及到在某一点上对假设的检验。

1。如何检验正常?

统计学中正态性无处不在。我们在统计学中使用的大多数理论都是基于正态假设。正态性意味着数据应该遵循一种特定的概率分布,即正态分布。它有特定的形状和特定的功能。

在方差分析中,我们假设数据是正态的。在进行回归时,我们期望残差服从正态分布。

为了检查数据的正态性,我们可以使用夏皮罗-维尔克检验。此测试的零假设是—数据样本的分布是正态的。

Python 实现:

import numpy as np
from scipy import stats
data = stats.norm.rvs(loc=2.5, scale=2, size=100)
shapiro_test = stats.shapiro(data)
print(shapiro_test)

2。如何检验一个数据点是否是离群值?

当我开始任何新的数据科学用例时,我必须适应一些模型,我做的例行任务之一是检测响应变量中的异常值。异常值对回归模型影响很大。对于异常值,需要采取谨慎的消除或替换策略。

如果离群值明显偏离数据的其余部分,则离群值可以是全局离群值。如果它仅偏离源于特定上下文的数据点,则称为上下文异常值。此外,当一组数据点与其他数据点偏离很大时,它们也可能是异常值。

Tietjen-Moore 检验对于确定数据集中的多个异常值非常有用。此测试的零假设是—数据中没有异常值。

Python 实现:

import scikit_posthocs
x = np.array([-1.40, -0.44, -0.30, -0.24, -0.22, -0.13, -0.05, 0.06, 0.10, 0.18, 0.20, 0.39, 0.48, 0.63, 1.01])
scikit_posthocs.outliers_tietjen(x, 2)

3。如何检验两个变量相关系数的显著性?

在数据科学中,我们处理许多解释因变量行为的自变量。自变量之间的显著相关性可能会影响变量的估计系数。这使得回归系数的标准误差不可靠。这损害了回归的可解释性。

当我们计算两个变量之间的相关性时,我们应该检查相关性的显著性。可以用 t 检验来检验。该检验的零假设假设变量之间的相关性不显著。

Python 实现:

from scipy.stats import pearsonr
data1 = stats.norm.rvs(loc=3, scale=1.5, size=20)
data2 = stats.norm.rvs(loc=-5, scale=0.5, size=20)
stat, p = pearsonr(data1, data2)
print(stat, p)

4。如何在两个数据集中检验一个分类变量的同质性?

如果我用一个例子来解释同质性检验会很方便。假设你,我们想检查网飞用户的观看偏好对于男性和女性是否相同。你可以用卡方检验来证明相同。你必须检查男性和女性的频率分布是否明显不同。

测试的零假设是两个数据集是同质的。

Python 实现:

import scipy
import scipy.stats
from scipy.stats import chisquare
data1 = stats.norm.rvs(loc=3, scale=1.5, size=20)
data2 = stats.norm.rvs(loc=-5, scale=0.5, size=20)
chisquare(data1, data2)

5。如何检查给定的数据集是否遵循特定的分布?

有时在数据分析中,我们需要检查数据是否遵循特定的分布。甚至我们可能想要检查两个样本是否遵循相同的分布。在这种情况下,我们使用 Kolmogorov-Smirnov (KS)检验。我们经常使用 KS 检验来检验回归模型的拟合优度。

该测试将经验累积分布函数(ECDF)与理论分布函数进行比较。此测试的零假设假设给定数据遵循指定的分布。

Python 实现:

from scipy import stats
x = np.linspace(-25, 17, 6)
stats.kstest(x, ‘norm’)

回归和分类

我们在数据科学中做的大多数建模要么属于回归,要么属于分类。每当我们预测某个值或某个类时,我们都会借助这两种方法。

回归和分类都涉及决策不同阶段的统计测试。此外,数据需要满足一些先决条件,才能胜任这些任务。需要进行一些测试来检查这些条件。

一些与回归和分类相关的常见统计测试是—

  1. 异方差检验

2.多重共线性测试

3.回归系数的显著性检验

4.回归或分类模型的方差分析

1。如何检验异方差性?

异方差是一个相当沉重的术语。它只是意味着不平等的方差。我举个例子解释一下。假设您正在收集不同城市的收入数据。你会发现不同城市的收入差异很大。

如果数据是异方差的,它会极大地影响回归系数的估计。这使得回归系数不太精确。估计值将与实际值相差甚远。

为了检验数据中的异方差性,可以使用怀特检验。White 的测试考虑了零假设,即数据的方差是常数。

Python 实现:

from statsmodels.stats.diagnostic import het_white
from statsmodels.compat import lzip
expr = ‘y_var ~ x_var’
y, X = dmatrices(expr, df, return_type=’dataframe’)
keys = [‘LM stat’, ‘LM test p-value’, ‘F-stat’, ‘F-test p-value’]
results = het_white(olsr_results.resid, X)
lzip(keys, results)

2。如何测试变量中的多重共线性?

数据科学问题通常包括多个解释变量。有时,这些变量由于其来源和性质而变得相关。此外,有时我们会从相同的潜在事实中创建多个变量。在这些情况下,变量变得高度相关。这就是所谓的多重共线性。

多重共线性的存在会增加回归或分类模型系数的标准误差。它使得一些重要的变量在模型中变得无关紧要。

法勒-格劳伯检验可用于检查数据中多重共线性的存在。

3。如何检验模型系数是否显著?

在分类或回归模型中,我们需要识别对目标变量有强烈影响的重要变量。模型执行一些测试,并为我们提供变量的重要程度。

t 检验用于模型中检查变量的显著性。检验的无效假设是-系数为零。您需要检查测试的 p 值,以了解系数的显著性。

Python 实现:

from scipy import stats
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
stats.ttest_1samp(rvs1, 7)

4。如何检验一个模型的统计显著性?

在开发回归或分类模型时,我们进行方差分析(ANOVA)。它检查回归系数的有效性。ANOVA 将模型引起的变化与误差引起的变化进行比较。如果模型引起的变化与误差引起的变化显著不同,则变量的影响显著。

f 检验用于做出决定。此测试中的零假设是—回归系数等于零。

Python 实现:

import scipy.stats as stats
data1 = stats.norm.rvs(loc=3, scale=1.5, size=20)
data2 = stats.norm.rvs(loc=-5, scale=0.5, size=20)
stats.f_oneway(data1,data2)

预测

在数据科学中,我们处理两种数据——横截面和时间序列。电子商务网站上的一组客户的简档是横截面数据。但是,电子商务网站中一个项目一年的日销售额将是时间序列数据。

我们经常使用时间序列数据的预测模型来估计未来的销售额或利润。但是,在预测之前,我们会对数据进行一些诊断性检查,以了解数据模式及其对预测的适用性。

作为一名数据科学家,我经常对时间序列数据使用这些测试:

  1. 趋势测试

2.平稳性测试

3.自相关测试

4.因果关系检验

5.时间关系测试

1。如何测试时间序列数据的趋势?

随着时间的推移,从业务中生成的数据通常会显示上升或下降的趋势。无论是销售或利润,还是任何其他描述业务绩效的绩效指标,我们总是更喜欢估计未来的变化。

为了预测这种变化,你需要估计或消除趋势成分。要了解趋势是否显著,您可以使用一些统计测试。

曼-肯德尔检验可以用来检验趋势的存在性。零假设假设没有显著的趋势。

Python 实现:

pip install pymannkendall
import numpy as np
import pymannkendall as mk
data = np.random.rand(250,1)
test_result = mk.original_test(data)
print(test_result)

2。如何检验一个时间序列数据是否平稳?

非平稳性是大多数时间序列数据的固有特征。在任何时间序列建模之前,我们总是需要测试平稳性。如果数据不稳定,建模后可能会产生不可靠和虚假的结果。会导致对数据理解不佳。

扩充的 Dickey-Fuller (ADF)可用于检查非平稳性。ADF 的零假设是序列是非平稳的。在 5%的显著性水平,如果 p 值小于 0.05,我们拒绝零假设。

Python 实现:

from statsmodels.tsa.stattools import adfuller
X = [15, 20, 21, 20, 21, 30, 33, 45, 56]
result = adfuller(X)
print(result)

3。如何检查时间序列值之间的自相关性?

对于时间序列数据,过去值和现在值之间的因果关系是一种普遍现象。对于金融时间序列,我们经常看到当前价格受到前几天价格的影响。时间序列数据的这一特征是通过自相关来度量的。

要知道自相关性是否足够强,可以测试一下。德宾-沃森测试揭示了它的程度。此测试的零假设假设值之间没有自相关。

Python 实现:

from statsmodels.stats.stattools import durbin_watson
X = [15, 20, 21, 20, 21, 30, 33, 45, 56]
result = durbin_watson(X)
print(result)

4。如何测试一个变量对另一个变量有因果关系?

两个时间序列变量可以共享因果关系。如果你熟悉金融衍生品,一种定义在基础股票上的金融工具,你会知道现货和期货价值有因果关系。他们根据情况相互影响。

格兰杰因果检验可以检验两个变量之间的因果关系。该测试使用回归设置。一个变量的当前值根据另一个变量的滞后值以及自身的滞后值回归。f 检验确定无因果关系的零假设。

Python 实现:

import statsmodels.api as sm
from statsmodels.tsa.stattools import grangercausalitytests
import numpy as np
data = sm.datasets.macrodata.load_pandas()
data = data.data[[“realgdp”, “realcons”]].pct_change().dropna()
gc_res = grangercausalitytests(data, 4)

5。如何检查两个变量之间的时间关系?

两个时间序列有时会一起移动。在金融时间序列中,你会经常观察到衍生品的现货和期货价格一起变动。

这种协同运动可以通过一个叫做协整的特征来检验。这种协整可以用 Johansen 的检验来检验。该检验的零假设假设变量之间没有协整关系。

Python 实现:

from statsmodels.tsa.vector_ar.vecm import coint_johansen
data = sm.datasets.macrodata.load_pandas()
data = data.data[[“realgdp”, “realcons”]].pct_change().dropna()
#x = getx() # dataframe of n series for cointegration analysis
jres = coint_johansen(data, det_order=0, k_ar_diff=1
print(jres.max_eig_stat)
print(jres.max_eig_stat_crit_vals)

数据分组

在现实生活中,我们经常试图在数据点之间寻找相似性。目的是将它们组合在一些桶中,并仔细研究它们以了解不同桶的行为。

这同样适用于变量。我们识别一些潜在的变量,这些变量是由一些可观察的变量组合而成的。

零售店可能有兴趣对其客户进行细分,如成本意识、品牌意识、批量购买者等。它需要根据客户的特征(如交易、人口统计、心理特征等)对客户进行分组。

在这方面,我们经常会遇到以下测试:

1.球形度测试

2.抽样充分性测试

3.聚类趋势测试

1。如何检验变量的球形度?

如果数据中的变量数量非常多,这种情况下的回归模型往往表现不佳。此外,识别重要变量变得具有挑战性。在这种情况下,我们试图减少变量的数量。

主成分分析(PCA)是一种减少变量数量和识别主要因素的方法。这些因素将帮助你建立一个降维的回归模型。此外,帮助识别任何感兴趣的对象或事件的关键特征。

现在,变量只有在它们有一定的相关性时才能形成因子。它是通过巴特列氏试验来检验的。该检验的无效假设是——变量不相关。

Python 实现:

from scipy.stats import bartlett
a = [8.88, 9.12, 9.04, 8.98, 9.00, 9.08, 9.01, 8.85, 9.06, 8.99]
b = [8.88, 8.95, 9.29, 9.44, 9.15, 9.58, 8.36, 9.18, 8.67, 9.05]
c = [8.95, 9.12, 8.95, 8.85, 9.03, 8.84, 9.07, 8.98, 8.86, 8.98]
stat, p = bartlett(a, b, c)
print(p, stat)

2。如何检验变量的抽样充分性?

当样本量足够大时,PCA 方法将产生可靠的结果。这被称为抽样充分性。将对每个变量进行检查。

凯泽-迈耶-奥尔金(KMO)检验用于检查整个数据集的抽样充分性。该统计测量变量中可能是普通方差的方差的比例。

Python 实现:

import pandas as pd
from factor_analyzer.factor_analyzer import calculate_kmo
a = [8.88, 9.12, 9.04, 8.98, 9.00, 9.08, 9.01, 8.85, 9.06, 8.99]
b = [8.88, 8.95, 9.29, 9.44, 9.15, 9.58, 8.36, 9.18, 8.67, 9.05]
c = [8.95, 9.12, 8.95, 8.85, 9.03, 8.84, 9.07, 8.98, 8.86, 8.98]
df= pd.DataFrame({‘x’:a,’y’:b,’z’:c})
kmo_all,kmo_model=calculate_kmo(df)
print(kmo_all,kmo_model)

3。如何测试数据集的聚类趋势?

为了将不同桶中的数据分组,我们使用了聚类技术。但是在进行聚类之前,你需要检查数据中是否有聚类趋势。如果数据具有均匀分布,则不适合聚类。

霍普金斯检验可以检查变量的空间随机性。此测试中的零假设是—数据是从非随机、均匀分布中生成的。

Python 实现:

from sklearn import datasets
from pyclustertend import hopkins
from sklearn.preprocessing import scale
X = scale(datasets.load_iris().data)
hopkins(X,150)

在本文中,我提到了一些数据科学中常用的测试。还有很多其他的我不能提及。如果你发现了一些我在这里没有提到的,请告诉我。

参考:

https://www . stats models . org/dev/generated/stats models . TSA . stat tools . grangercausalitytests . html

https://pypi.org/project/pyclustertend/

数据可视化的重要原则是什么?

原文:https://towardsdatascience.com/what-are-the-important-principles-of-data-visualization-3d3ca6c8c303?source=collection_archive---------29-----------------------

数据科学,数据可视化

数据可视化的架构必须专注于增强您公司的能力。要做到这一点,需要实践一些重要的原则。

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

卢克·切瑟在 Unsplash 上的照片

在这篇文章中,你可以探索数据可视化,什么样的可视化编码技术应该被考虑,你如何可以完善可视化,你所说的叙事可视化是什么意思?

“没有信息过载这回事。只有糟糕的设计。”—爱德华·塔夫特

“为了找到数据中的信号,我们必须学会减少噪音——不仅是数据中的噪音,还有我们身上的噪音。除了数据中的噪音,嘈杂的大脑几乎不可能感知到任何东西。”—斯蒂芬·诺

你说的数据可视化是什么意思?

数据可视化是将原始数据转化为图表的过程,这些图表解释了数字,并使我们能够深入了解它们。它改变了我们利用知识构建意义、发现新模式和识别趋势的方式。

作为人类,我们通过视觉化快速理解信息。通俗地说,数据可视化就是获取数据的图形化表示。这使得决策者能够根据可视化和呈现的证据更有效地采取行动。

数据的可视化可以帮助企业。分析并将数据整合到企业中,将赋予原始数据更大的意义和用途。在旅游行业,数据可视化通过为服务提供透明和可操作的信息,真正使旅游管理员和消费者能够进行报告。数据驱动软件为所有利益相关者带来了好处,从财务总监到安全经理,从人力资源经理到旅行者本人。

数据可视化是任何分析师甚至企业最重要的技能之一。无论一个人在分析数据方面有多好,如果他们不能以一种传达他们想要呈现的内容的方式进行打包,并且人们不容易理解,那么很多分析就会丢失。

你应该考虑什么样的视觉编码?

(Smyers,2013)指出,数据可视化正在塑造我们的行业。更进一步,(Steele 等人,无日期)建议,当你详细了解你的数据时,你可以做视觉编码。

颜色并不是按照人脑的自然顺序排列的。因此,应避免误用颜色,如过度明亮的颜色。

根据(几个,2006)一个线图应该只用于时间序列数据。它有助于我们显示跨时间序列的多个数据点。

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

来源:https://www . perceptual edge . com/articles/b-eye/encoding _ values _ in _ graph . pdf

尝试显示时间序列数据的折线图,以避免遮挡,遮挡意味着隐藏数据。

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

来源:https://en.rockcontent.com/blog/line-vs-area-charts/

(Lundblad,noDate)指出,对于编码过程,长度、方向、角度、面积和体积、颜色阴影都应考虑在内。

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

来源:https://blog.qlik.com/visual-encoding

据《纽约时报》报道,近年来的饼状图受到观众的回避。此外,与可用于物品的水平条相比,垂直条应仅在物品较少时使用。此外,与抖动图相比,箱形图给出了清晰的结果。

(利略等人,2004 年)建议在给数据图形着色时应该考虑到贝佐尔德效应。贝佐尔德效应显示了观众感知的颜色是如何受到周围颜色的影响的。这意味着一种颜色会改变整个设计。

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

来源:https://en.wikipedia.org/wiki/Bezold_effect

类似地,(Bradley,2014)陈述了 prgnanz 定律,即观众能快速感知简单、清晰且易于理解的事物。

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

来源:https://www . smashingmagazine . com/2014/03/design-principles-visual-perception-and-the-principles-of-gestalt/

我们在选择颜色时需要非常小心,并且需要挑选颜色顺序。避免在同一个图形中使用红色和绿色,以保证色盲的人可以很容易地分辨数据。

如何提炼自己的可视化?

(Nelson,2016)指出 Tufte Lie Factor 有助于评估如何完美呈现视觉效果。这意味着图像中显示的效果大小应该等于数据的效果大小。你的数据应该有故事。

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

来源:自己的工作

根据(Bernhard,2012)不要标记所有的图,只标记重要的图。擦除冗余非墨迹数据就好。遵循这些原则将有助于观众快速理解图形。请尽量避免网格线。

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

来源:自己的工作

请尽量避免在图形中使用阴影

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

来源:https://silo.tips/download/principles-of-data-visualization

尽量显示数据变化,避免显示设计变化。

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

来源:https://silo.tips/download/principles-of-data-visualization

(Giard,2011 年)指出应该删除网格线,还指出当它在图表中过度使用时会引起振动,这会分散观众的注意力。

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

来源:http://davidgiard . com/2011/05/13/data visualization part 6 chart junk . aspx

(少,2011)建议应避免图表垃圾。装饰图形的内部对观众没有帮助,这是多余的数据墨水,不创造任何价值。请尽量避免在图形上使用装饰性的修饰。这也分散了观众对数据的理解。图表垃圾有利于视觉,但不利于理解数据。

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

来源:https://www . perceptual edge . com/articles/visual _ business _ intelligence/the _ chart junk _ debate . pdf

你说的叙事视觉化是什么意思?

(Taylor,2014 年)指出可视仪表板应以概述开始,其中应给出故事摘要。此外,使用放大和向下钻取来聚焦数据。

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

来源:https://public.tableau.com/profile/saurav.singla08#!/viz home/ukroadincidentsanalysis 2015 _ 15973397476360/ukroadincidentsanalysis 2015

请尝试实现故事的互斥和集体穷尽(MECE)技术。在故事构建中,请考虑纵向和横向逻辑。

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

来源:https://www.caseinterview.com/mece

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

来源:https://depictdatastudio . com/when-to-use-horizontal-bar-charts-vs . vertical-column-charts/

在叙述以下问题时应予以考虑:

  • 作为数据可视化工作的结果,你想提出什么要点?
  • 在浏览者看完你的数据图表后,你希望他们带着什么样的信息离开?
  • 你发现了哪些重要的趋势?
  • 有没有特别不寻常的例子你应该强调一下?

结论

数据可视化使得从数据中看到趋势和模式变得更加容易。遵循基本原则,每个人都很容易在视觉上感知物体。它有助于描绘来自数据的洞察力。它使决策者能够直观地查看数据,以便他们能够理解复杂的概念或识别新的模式。

参考

●伯恩哈德律师事务所,2012 年。数据可视化原理。可从网站 http://stat . pugetsound . edu/courses/class 13/data visualization . pdf获取

●南布拉德利,2014 年。设计原则:视觉感知和格式塔原则。可从https://www . smashingmagazine . com/2014/03/design-principles-visual-perception-and-the-principles-of-gestalt/获取

●利特尔·s,2006 年。可从https://www . perceptual edge . com/articles/b-eye/encoding _ values _ in _ graph . pdf获取

●少,s,2011 年。关于海图垃圾的辩论。可从https://www . perceptual edge . com/articles/visual _ business _ intelligence/the _ chart junk _ debate . pdf获取

●卡尼尔,s .没有日期。可从https://www . rdocumentation . org/packages/viridis/versions/0 . 4 . 1获得。

●贾德博士,2011 年。数据可视化,第六部分:图表垃圾。可查阅http://davidgiard . com/2011/05/13/data visualization part 6 chart junk . aspx

●j .利略、l .阿瓜多、h .莫雷拉和 I .戴维斯,2004 年。明度和色调感知:贝佐尔德-布鲁克效应和颜色基本范畴。Psicológica,25(1)。

●Lundblad,p .,noDate。将数据映射到可视化的第二个支柱:可视化编码。可从https://blog.qlik.com/visual-encoding获得

●g .尼尔森,2016。不要被发现用数据撒谎——看看 Tufte 的谎言因素。可从https://www . thot wave . com/blog/2016/08/15/don-get-catched-lie-with-data-check-out-tuftes-lie-factor/获取

斯迈尔斯,英国,2013 年。约翰·怀尔德·图基:大数据和可视化的先驱。可从 http://control trends . org/building-automation-and-integration/05/John-wilder-tukey-the-pioneer-of-big-data-and-visualization/获得

●斯蒂尔,j .,伊林斯基,n .,诺达特。第四章。从https://www . safari books online . com/library/view/designing-data-visualizations/9781449314774/ch04 . html中选择适当的可视编码

●t .泰勒,2014 年。如何在网络情报仪表板中使用信息搜索咒语?可从 https://www.recordedfuture.com/information-seeking-mantra/获得

●纽约时报,没有日期。数据可视化:基本原理。可从 http://paldhous.github.io/ucb/2016/dataviz/week2.html获得

现在,把你对Twitter*,Linkedin,以及Github!!*

同意 还是 不同意 与 Saurav Singla 的观点和例子?想告诉我们你的故事吗?

他乐于接受建设性的反馈——如果您对此分析有后续想法,请在下面的 评论 或联系我们!!

推文@ SauravSingla _ 08,评论Saurav _ Singla,还有明星SauravSingla马上!

2020 年数据科学家需要什么技能

原文:https://towardsdatascience.com/what-are-the-in-demand-skills-for-data-scientists-in-2020-a060b7f31b11?source=collection_archive---------20-----------------------

将自然语言处理应用于实际的工作发布

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

来源: pixabay

如果你想成为一名数据科学家,你可能会问:

应该学习哪些数据科学语言/工具?

雇主想要的顶级技能是什么?

对学历的最低要求是什么?

为了以数据科学家的方式回答这些问题,我们对的职位描述应用了自然语言处理(NLP)技术。我们纳入了 2020 年 1 月 25 日来自北美 8 个城市的 2,681 份数据科学家职位发布。

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

来源:的确

很快我们也会在本文后面贴出用 Python 编写的分步分析。敬请关注。

更新:我们已经贴出了这篇文章的技术部分。查看如何在 Python 中使用 NLP:一个实用的分步示例——了解数据科学家对 NLTK 的需求技能。

先看结果吧!

热门工具需求

在分析中包含的工作公告中, 86% 列出了工作所需的特定工具。没有这些工具/语言,数据科学家就无法工作。

雇主需要的十大工具有:

  • 计算机编程语言
  • 结构化查询语言
  • 稀有
  • 火花
  • 亚马逊网络服务
  • Java 语言(一种计算机语言,尤用于创建网站)
  • 张量流
  • Hadoop
  • 斯堪的纳维亚航空公司

Python 是无可争议的赢家。62%的招聘信息要求具备 Python 知识。而其他一些需要 Python 相关的工具或包,如 Pytorch、Pandas、Numpy。

为什么?

因为 Python 是一种如此强大而简单的语言,它能做的不仅仅是机器学习建模。例如,数据科学家也可以使用它来自动化任务,使用云服务,并进行 web 开发。

要成为数据科学家,应该先学习哪种工具?

Python

SQL 也出现在 40%的招聘信息中。了解这种数据库查询语言仍然是一个好主意。经典永远不会过时。

人们经常认为 R 是 Python 的竞争对手。但是,根据这一分析,它并不接近。只有 39%的数据科学家的职位描述提到了 r。

其他与大数据相关的工具,如 SparkCloudAWSTensorflow 和 Hadoop 也很受欢迎。当雇主拥有大量数据时,这些都是基本要素。

除了 Python 和 R, Java 对一些雇主来说也很有价值。这对数据工程师来说更重要,但对数据科学家来说也很有用。

虽然 SAS在大公司中仍然很受欢迎,但对数据科学家的需求却减少了。该软件更适合报告,但在数据分析方面不够灵活。

数据科学家的招聘信息中提到的前 50 名工具列表如下。

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

数据科学家的 50 大工具

每个工具类别在职务公告中不会相互排斥,即一个公告可能会提到多个工具。“没有指定”意味着工作描述没有要求任何工具。

顶级技能需求

除了工具之外,数据科学家必须具备特定的技能或技巧才能成功。

用人单位要求的十大技能有:

  • 机器学习
  • 统计数字
  • 研究
  • 预言;预测;预告
  • 形象化
  • 建议
  • 最佳化
  • 深度学习
  • 自然语言处理
  • 回归

对许多人来说,机器学习就是数据科学家所做的一切。这个概念是有原因的。64%的招聘信息提到了机器学习。

数据科学家需要学习监督/非监督学习、强化学习等不同的算法;还有不同的模型,如决策树、人工神经网络、支持向量机。

机器学习是对算法和统计模型的科学研究,计算机系统使用这些算法和统计模型来执行特定的任务,而不使用明确的指令,而是依靠模式和推理。它被视为人工智能的一个子集。

根据维基百科的定义,它是计算机科学和统计学的混合领域。

统计学知识为数据科学家奠定了坚实的基础。59%的职位招聘都需要它。要成为数据科学家,我们应该学习数据收集、实验设计、概率分布和其他统计概念。

研究也被认为是数据科学家的一项重要技能。50%的工作要求这样做。数据科学是一个快速发展的领域。数据科学家必须具有创造性和适应性;探索和应用新概念。

机器学习或统计技能的子集,包括预测推荐优化、深度学习、自然语言处理和回归,也有需求。

不同的雇主需要不同的技巧。例如,一家信用卡公司可能希望我们预测客户的信用状况;一家聊天机器人公司希望我们分析自然语言。

数据可视化也越来越受欢迎。一张图胜过千言万语;右图或图像是大数据的总结。数据科学家需要很好地展示他们的分析结果。

下面是数据科学家招聘信息中提到的 50 大技能列表。

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

数据科学家的 50 大技能

像工具一样,每个技能类别在职位发布中并不相互排斥,即一个发布可能会提到多种技能。

最低教育要求

而且数据科学家往往被要求有较高的教育水平。

  • 49%的招聘信息要求最低学历为学士学位。
  • 27%提到了硕士以上学历。
  • 9%要求博士
  • 只有很少的职位要求博士后或工商管理硕士。
  • 15%的职位要求“未指定”,可以更开放一些。

所以好消息,相关领域的学士学位就够了。也就是说,拥有硕士或博士学位的人更有竞争力。

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

数据科学家的最低教育水平

成为数据科学家是一个令人兴奋但充满挑战的旅程。

但是正如我们所有人都知道的,在可预见的未来,数据科学将继续受到需求。

无论你是否已经拥有这些技能,开始都不晚!

资料来源:吉菲

在你离开之前,别忘了 报名参加刚刚进入数据快讯 !或者通过推特脸书与我们联系。
所以您不会错过我们的任何新数据科学文章!

更多来自 Lianne & Justin 的数据科学文章:

[## 如何在线学习数据科学:你需要知道的一切——进入数据

这是利用在线资源进入数据科学的完整路线图/课程。你是否想学习…

www.justintodata.com](https://www.justintodata.com/how-to-learn-data-science-online-all-you-need-to-know/) [## Python 中的数据清理:终极指南(2020)——只进入数据

我们用 Python 创建了这个新的完整的分步指南。你将学习如何寻找和清理的技巧:丢失…

www.justintodata.com](https://www.justintodata.com/data-cleaning-python-ultimate-guide/) [## 如何像老板一样操纵 Python 中的日期和时间——只处理数据

这是利用在线资源进入数据科学的完整路线图/课程。你是否想学习…

www.justintodata.com](https://www.justintodata.com/manipulate-date-and-time-in-python/)

Matplotlib 中的“plt”和“ax”到底是什么?

原文:https://towardsdatascience.com/what-are-the-plt-and-ax-in-matplotlib-exactly-d2cf4bf164a9?source=collection_archive---------0-----------------------

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

图像由 MediamodifierPixabay 上生成

在纸上绘图,还是在纸上的单元格中绘图?

事实上,作为最流行和最基本的数据可视化库,Matplotlib 从某些角度来看有点令人困惑。通常是看到有人问起

  • 什么时候应该用“斧子”?
  • 为什么有些例子用“plt ”,而另一些用“ax ”?
  • 两者有什么区别?

网上有那么多例子向人们展示如何使用 Matplotlib 绘制这种图表或那种图表,这很好,但我很少看到有教程提到“为什么”。这可能会让编程经验比较少或者是从 R 之类的其他语言切换过来的人变得非常困惑。

在本文中,我不会教你使用 Matplotlib 绘制任何特定的图表,但会尝试解释关于 Matplotlib 的基本但重要的内容——人们通常使用的“plt”和“ax”是什么。

概念

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

absolute visionPixabay 上拍摄的照片

澄清一下,我说的“plt”,在 Matplotlib 库中是不存在的。之所以叫“plt”是因为大部分 Python 程序员喜欢导入 Matplotlib,做一个别名叫“plt”,这个我相信你应该知道,但是以防万一。

import matplotlib.pyplot as plt

然后,回到我们的主要话题。让我们画一个简单的图表来演示一下。

import numpy as npplt.plot(np.random.rand(20))
plt.title('test title')
plt.show()

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

如上面注释的截图所示,当我们使用plt绘制图形时:

  1. 生成一个Figure对象(显示为绿色)
  2. 一个Axes对象被生成隐式带有绘制的折线图(显示为红色)
  3. 所有绘图元素,如 x 轴和 y 轴,都呈现在Axes对象内(显示为蓝色)

好吧,如果我们在这里使用某种隐喻:

  • Figure就像一张纸,你可以画任何你想画的东西
  • 我们要在一个“单元格”里画一个图表,在这个上下文里就是Axes
  • 如果我们只画一个图形,我们不必先画一个“单元格”,只要在纸上简单地画就行了。所以,我们可以用plt.plot(...)

明确地画出“细胞”

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

照片由 LUM3NPixabay 上拍摄

当然,我们可以在“纸上”明确地画一个“单元格”,告诉 Matplotlib 我们要在这个单元格内画一个图表。然后,我们有下面的代码。

fig, ax = plt.subplots()
ax.plot(np.random.rand(20))
ax.set_title('test title')
plt.show()

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

完全一样的结果。唯一的区别是我们显式地绘制了“单元格”,这样我们就可以得到FigureAxes对象。

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

事实上,当我们只想绘制一个图形时,没有必要“画”这个单元格。但是,你必须注意,当我们想要在一个图中绘制多个图形时,我们必须这样做。换句话说,次要情节。

n_rows = 2
n_cols = 2fig, axes = plt.subplots(n_rows, n_cols)
for row_num in range(n_rows):
    for col_num in range(n_cols):
        ax = axes[row_num][col_num]
        ax.plot(np.random.rand(20))
        ax.set_title(f'Plot ({row_num+1}, {col_num+1})')fig.suptitle('Main title')
fig.tight_layout()
plt.show()

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

在这个代码片段中,我们首先声明了我们想要“绘制”多少行和列。2 乘 2 意味着我们要画 4 个“单元格”。

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

然后,在每个单元格中,我们绘制一个随机折线图,并根据其行号和列号分配一个标题。请注意,我们使用的是Axes实例。

之后,我们在“论文”上定义一个“主标题”,就是Figure实例。所以,我们有了这个不属于任何“细胞”的超级标题,而是在纸上。

最后,在调用show()方法之前,我们需要请求“paper”——Figure实例——通过调用它的tight_layout()方法自动在单元格之间给出足够的填充。否则,

摘要

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

博多贝Pixabay 上拍摄的照片

希望现在你能更好地理解什么是人们正在使用的pltax

基本上,plt是大多数人常用的matplotlib.pyplot的别名。当我们使用plt比如plt.line(...)绘制东西时,我们隐式地在Figure对象中创建了一个Figure实例和一个Axes。当我们只想画一个图形时,这完全没问题,而且非常方便。

但是,我们可以显式调用plt.subplots()来获得Figure对象和Axes对象,以便对它们做更多的事情。当我们想在一个Figure上绘制多个支线剧情时,通常需要使用这种方法。

此外,这里是 Matplotlib 官方 API 对FigureAxes类的参考。强烈建议你去看看,自己尝试一些方法,以确保你理解得更深。

[## Matplotlib . axes-Matplotlib 3 . 3 . 1 文档

实例通过实例的回调属性支持回调。您可以连接到的事件有…

matplotlib.org](https://matplotlib.org/api/axes_api.html?highlight=axes#matplotlib.axes.Axes) [## Matplotlib . figure . figure-Matplotlib 3 . 3 . 1 文档

所有绘图元素的顶层容器。Figure 实例通过回调属性支持回调…

matplotlib.org](https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure) [## 通过我的推荐链接加入 Medium 克里斯托弗·陶

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@qiuyujx/membership)

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)

机器学习有什么实际好处?

原文:https://towardsdatascience.com/what-are-the-practical-benefits-of-machine-learning-c9820dbdd67c?source=collection_archive---------64-----------------------

从非技术角度了解机器学习和数据科学在我们日常生活中的实际使用案例和影响。

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

Unsplash 上由 Franck V. 拍摄的照片

我在之前的一些关于机器学习和数据科学的入门帖子有点技术性。然而,我这篇文章的目的是从一个以前从未接触过 ML 的非技术性门外汉的角度来解释一些 ML 的实际使用案例。为了满足您的好奇心,如果您想了解更多,我还将提到通常适用于每个用例的特定 ML 算法。

ML 帮助我们解决什么类型的问题?不考虑具体领域,它提供了什么答案或可行的见解?我们在这里将更多地关注“是什么”和“为什么”,而不是“如何”。

这是什么?a 还是 B?

这个 ML 算法家族预测一个观察值属于仅有的两个可能类别中的哪一个。没有其他第三种可能的选择。假设管理层想要预测哪些现有客户会流失。答案只能是特定客户会不会流失。其他实例包括:

  • 这是不是垃圾邮件?
  • 这个客户会不会违约?
  • 这些症状是否是特定疾病的症状?
  • 该客户是否会继续购买?
  • 这是男孩还是女孩的形象?

正式名称为二元分类,相关算法包括:

  • 逻辑回归
  • 支持向量机
  • k-最近邻
  • 分类决策树

这是什么?a 还是 B 还是 C 还是 D(或者别的什么)?

二元分类的扩展,这里,潜在类别的数量可以多于两个。假设您正在开发一个人脸识别模型;特定图片中的人可以是数据库中的任何个人。可能正确答案的数量仅限于模型开发过程中使用的数据量。其他实例包括:

  • 光学字符识别:这是哪个字符?
  • 这幅图中是哪种动物?
  • 这部电影属于哪种类型?
  • 情绪分析:与这条推文相关的感觉是什么?
  • 这段录音里是谁的声音?

正式名称为多类分类,相关算法包括:

  • 随机森林
  • 分类决策树
  • XGBoost
  • k-最近邻
  • 人工神经网络

有多少或多少东西值得期待?

这一系列的 ML 算法将某事物的数量预测为连续的输出或数字(即,预测可以是无限数量的可能结果中的任何一个)。没有可以预测的固定的可能类别,例如,预测下一季度的销售量。该销售预测可以是 1,000 台、10,000 台、1,200 台或任何其他正实数。

这些算法的输出可以是任何实数(正数、负数、零、分数);然而,您的具体用例将决定是否可以预期和接受负数或分数。例如,销售预测不能为负数。

这类算法的其他实际使用案例包括:

  • 明天的温度是多少?
  • 下个季度我们可以与多少潜在客户签约?
  • 下个月我们的能源消耗是多少?
  • 一个事件发生需要多长时间?

正式名称为回归,相关算法包括:

  • 线性回归
  • 回归决策树
  • XGBoost
  • 人工神经网络

这个数据是正常还是异常?

通常,我们更感兴趣的是某个特定的观察结果是不典型的、异常的还是异常的。或者仅仅是一个正常和平常的观察。我们可以将历史观察分为异常或非异常。或者可能是这种历史分类不存在的情况,并且将使用 ML 算法来检测任何异常值。

典型的使用案例包括:

  • 这次购买与客户过去的购买有实质性的不同吗?
  • 这种来自计算机网络的流量模式是典型的吗?
  • 这些来自工业设备的输出是非典型的吗?

正式名称为异常值或异常检测,相关算法包括:

  • 隔离森林
  • 基于密度的噪声应用空间聚类(DBSCAN)
  • z 分数(技术上不是 ML 算法,而是识别异常值的统计测试)
  • 单类支持向量机

我们如何组织这些数据?

是否有任何潜在的可识别特征可用于将数据分类和组织到特定的组(也称为簇或段)中?我们不知道这些独特的特征,通常,甚至不知道潜在簇的数量。对数据进行聚类或组织可能有助于您进一步分析或制定特定于聚类的策略。

例如,我们可以根据客户的年龄、性别、购买历史等将他们划分为不同的群体。设计特定细分市场的销售、营销或促销策略。

这类算法的其他实际使用案例包括:

  • 我们的哪些订户喜欢类似的电影或歌曲?
  • 我们如何对几个文本文档或录音进行分类?
  • 我们如何更好地细分我们的产品或服务?
  • 哪种型号的机器更容易出故障?

正式名称为聚类,相关算法包括:

  • k 均值聚类
  • 均值漂移聚类
  • 基于密度的噪声应用空间聚类(DBSCAN)
  • 凝聚层次聚类
  • 使用层次结构的平衡迭代约简和聚类(BIRCH)

下一步做什么?

这就是 ML 变得真正有趣的地方,ML 算法不仅预测,而且告诉我们如何给定它的预测。这个 ML 算法家族对于所有用例来说可能还不够成熟;然而,鉴于先进的深度学习算法和我们可用的更大处理能力,最近取得了实质性进展。

这些算法依赖于反复试验和多重反馈循环,而不像其他算法那样严重依赖数据。主要适用于自动化系统,推荐的操作通常由机器执行。

正式名称为强化学习,通常通过深度神经网络实现。

强化学习的一些实际应用包括:

  • 在工业企业的情况下,机器人下一步应该做什么?
  • 我们应该调节温度还是保持不变?
  • 自动驾驶汽车应该如何反应(加速、减速、刹车等)。)鉴于前方的危险?

结论

现在你有了:一个实用的、严肃的功能场景介绍,其中 ML 用简单的语言帮助我们。

如果您想进一步讨论与机器学习、数据分析、风险评分和金融分析相关的任何内容,请自由发表评论或联系 me

下次见,继续!

我们是什么,心理学家?

原文:https://towardsdatascience.com/what-are-we-psychologists-e33f82bf263d?source=collection_archive---------31-----------------------

肯定不是,但是我们可以通过在代码中输入电影名称来模仿它们

有时会有一个突然的想法,比如“自 1990 年以来,每年最畅销的电影是什么?”当我们在找事情做的时候突然出现。但是我们不想浪费时间去探究每一条独立的信息,比如发布日期、受欢迎程度、评论或者谷歌、IMDb、TMDb 或烂番茄的平均评分。

对于那些想尽快得到这些信息的人,我写了一些代码来加载电影信息,只需输入标题就可以快速分析电影评论。仅供参考,我使用 TMDb 的 API 编写代码。

在抓取网站之前

必须检查该网站的“robots.txt”文件,以确定该网站是否允许其内容被抓取。要查找给定网站的 robots.txt 文件,请键入基本 URL 并添加“/robots.txt”。

例如,如果我们想从 google.com 搜集一些数据,在 URL 框中输入 https://www.google.com/robots.txt。

  • 如果 robots.txt 允许完全访问,则不允许字段将为空,例如:

用户代理:*

不允许:

  • 如果 robots.txt 阻止所有访问,不允许字段将包含反斜杠,例如:

用户代理:*

不允许:/

  • 如果 robots.txt 允许部分访问,禁止和允许的部分将用一对反斜杠标识,例如:

用户代理:*

不允许:/section/

允许:/section/

例如,我键入https://www.imdb.com/robots.txt来检查来自 IMDb 的 API 可用性,但是它似乎不可用。

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

幸运的是,电影数据库(TMDb)在其网站上提供了开放的 API,所以我选择了 TMDb API 来编写代码。

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

首先安装所有模块

首先,我安装了所有用于编写代码的模块,包括使用 TMDb 数据的 tmdbsimple 模块。这个模块是 TMDb API 的包装器。

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

安装所有模块

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

输入 API 密钥(该密钥可在 TMDb 网站上获得)

用标题和上映日期(年份)搜索电影

设置 tmdb。Search() 模块,然后输入您想要搜索的任何电影名称。

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

年份是可选的(如果您不知道确切的发布日期,可以将该字段留空)

我搜索了“寄生虫”,年份为空。

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

输入’寄生虫’后,上述代码中的信息

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

为了可读性,只提取标题、id、流行度、发布日期

我提取了标题、id、人气、发布日期数据,并将这些数据输入到 Moive_info 列表中。之后,我把 Movie_info 列表转换成 Pandas DataFrame。

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

数据帧中的电影信息

在数据中,id 是一个唯一的值,因此它可以区分相同或相似的数据。比如上表中有那么多含有“寄生虫”的标题。即使这些电影在不同的日期上映,如果只有片名信息,人们可能会感到困惑。然而,如果他们有电影 id,这意味着他们有关于每部电影的唯一信息。因此,他们只能得到他们想得到的信息。如果他们使用标题来搜索电影评论,结果会与其他电影的相同或相似标题的评论混淆。

获取 TMDb 评论

因为 URL 通常包含 id 号来创建每部电影的网址,所以我们需要这个惟一的值来获得电影评论页面。例如,我使用上表中的 id‘496243’来获取 TMDb 上寄生虫的网页。

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

获得 API 链接后,我使用requests . get 模块请求 HTTP。<响应【200】>表示效果良好。然后我通过解析 API URL 得到了一个包含“寄生虫”电影评论的数据帧。TMDb 上好像有五条关于“寄生虫”的评论。

之后,我提取了“结果”列,其中包含了评论、作者、内容等等。

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

在 4 个关键字中,实际的评论包含在“内容”关键字中

然后我做了一个空列表,然后把“内容键”放入“评论”列表

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

[输出]:

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

应用分词器分析评论中的每个单词

**标记化是文本清洗的一种方式。**将一段文本分割成更小的子段——通常,这可以分解到单个单词的级别,即每个不同的单词都成为一个“标记”,并且一个单词或短语的所有后续实例都被赋予相同的标记值。

将评论从 NLTK 库输入到 word_tokenize 模块对句子进行分词,然后打印分词器创建的分词。

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

[输出]:

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

标记化句子

从文本中删除停用词

停用词是经常出现的词,通常不作为名词或动词传达实质意义。一些例子:“一个”,“一个”,“the”,“and”,“or”等。在文本挖掘过程中,停用词经常被丢弃/忽略。

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

导入停用词

从列表“tokens”中获取不包括在英语停用词中的单词,然后将提取的单词放入列表“word_list”中。

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

情感分析

Afinn 库

我使用了 Afinn 库,这是一个情感分析库,显示了从-5 到+5 的整数形式的英语单词的积极和消极水平。给句子打分时,会计算句子中的所有单词。这是一个非常简单的库,但是它最常用于情感分析。

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

我通过使用连接函数将列表形式转换为字符串。join 函数将列表转换为包含特定分隔符的字符串。之后,将字符串放入 Afinn 库中以获得情感分数。

[输出]:

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

至于结果,每篇评论的总分是 7.0、30.0、1.0、26.0、41.0。例如,第一篇评论中有许多来自整个句子的单词——[‘什么,使,寄生,满足,提交,两者都不是,错误,……It,电影,节日,评论’]。最后 7.0 分是每个单词得分的总和。

EmoLex 库

这一次,我尝试用不同的方式分析相同的字符串:使用 NRC 字典的 EmoLex 库。NRC 的数据可以在这里获得用于非商业研究用途。

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

141,820 行

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

提取得分为 1(非 0)的标签来评估情感得分

[输出]:

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

13,901 行

141,820 行→ 13,901 行—大幅缩减!

之后,为了保持一致,我将所有文本转换为小写的**。**

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

文本清理—将所有文本转换为小写****

然后,我将“寄生虫”电影评论中的字符串与 NRC 字典中的情感文本进行匹配,以获得情感得分。

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

[输出]:

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

可视化

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

使用 plot.bar() 函数创建一个条形图。

[输出]:

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

表格中的相同数字可视化,以方便读者阅读

我们要去哪里

现在我们发现对《寄生虫》的评论总体上是正面的。我为情感分析生成了非常简单的代码,在下一篇文章中,我将通过数据清理和正则表达式来分析更多的评论。

一般来说,情感分析的目标是分析新闻报道、电影、社交媒体帖子(如推文、Instagram 帖子等)的观点,以引导消费者做出理性决策。例如,分析“寄生虫”评论的结果可以让人们决定他们是否要看这部电影。

情绪分析是目前每个人都想谈论的话题,因为人们知道感觉总是先于决策。换句话说,沉浸在情绪分析中已经开始了,人们希望很容易地看到当代趋势。

从你渴望了解更多的话题中分析感悟。如果你这样做了,你会比任何人都更早了解到你感兴趣的最新趋势。

大数据到底意味着什么

原文:https://towardsdatascience.com/what-big-data-actually-means-d4b00e8ae00?source=collection_archive---------38-----------------------

本文简要总结了您必须了解的大数据这个术语

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

红杉——世界上最大的树,图片由作者提供

一般定义

大数据是指来自互联网、移动电话、金融行业、能源行业、医疗保健等领域的大量数据。以及智能代理、社交媒体、智能计量系统、车辆等来源。使用特殊解决方案对其进行存储、处理和评估[1]。

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

与大数据相关的领域和术语—按作者分类的图片

4 伏电压

为了处理、存储和分析数据,必须考虑以下四个挑战:

  • (庞大的数据量——2025 年的数据将是 2017 年的八倍[2])
  • 速度(数据生成和处理的速度,例如流媒体、IOT、社交媒体)
  • 多样性(结构化和日益非结构化的数据)
  • 准确性(缺乏数据质量和评估技术)

技术方面

但是我们什么时候谈论大数据呢?必须收集多少数据?正常的数据存储技术通常以兆字节/千兆字节工作。当数据量达到万亿字节/千兆字节时,我们就在谈论大数据。这种经验法则的原因是,当处理这种数据量时,传统系统不再足够强大,而且成本也明显更高。

大数据(存储)技术的典型特征是:

  • 分布式存储
  • 数据复制
  • 本地数据处理
  • 高可用性
  • 数据划分
  • 非规范化数据
  • 处理结构化和非结构化数据

分析和可视化方面

通过使用大数据技术,使用和分析数据有了新的可能性:

  • 通过更多可用的计算能力(关键词:云),可以更快地处理/分析更大量的数据(例如,对于机器学习是必不可少的)
  • 深度学习(基于大量数据,例如图像)
  • 实现实时报告是必要的,例如在物联网领域

但是由于大量的数据,可视化领域也带来了新的方法和挑战。因此,必须创建新的可视化技术,以使数据量对用户来说更加有形。

下图显示了一些可视化示例:

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

可视化—来源:https://gear heart . io/blog/how-build-custom-data-visualization-software/[3]

未来会带来什么?

虽然就数据量而言,许多公司尚未进入大数据世界,但大数据的一两个特征可能适用于他们的数据。但是有一点是明确的:数据量将不断增长,即使不是指数增长,因此为这个主题做好准备也是有用的。人们在考虑他们的 IT 架构和系统环境时,需要考虑大数据。

还有一点,深度/机器学习这个新兴领域,通过更多的数据进行训练,变得越来越高效。因此,该区域是大数据的完美补充。借助功能强大且易于使用的公共云提供商服务,人们能够更快、更轻松地处理、存储和分析大数据。这对于中小型公司来说尤其有利[4]。

结论

大数据绝对是一个时髦词,并不是每个公司都需要大数据,但如果大数据领域提供了巨大的优势和处理数据的新方法。然而,它带来了需要克服的技术挑战。有了公共云服务,这一挑战更容易应对。

来源

[1]谷歌,【https://cloud.google.com/what-is-big-data

[2]麦肯锡公司,人工智能下一个数字前沿? (2017)

[3] itsvit,https://it svit . com/blog/big-data-information-visualization-techniques/

[4] Bernice M Purce 大数据利用云计算 (2013)

进一步阅读

[## 大数据:信息可视化技术

我们最近探讨了大数据可视化原则。现在是时候深入研究大数据可视化了…

towardsdatascience.com](/big-data-information-visualization-techniques-f29150dea190) [## 如何构建一个自定义的数据可视化软件?

在大数据成为新石油的时代,几乎任何有销售历史的公司都需要新的决策方法…

gearheart.io](https://gearheart.io/blog/how-build-custom-data-visualization-software/)

博士学位能给你的数据科学职业生涯增加什么?

原文:https://towardsdatascience.com/what-can-a-phd-add-to-your-data-science-career-b7204ef1c7bc?source=collection_archive---------18-----------------------

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

约书亚·厄尔在 Unsplash 上的照片

(你花了多少钱。)

有许多通向数据科学的职业道路。尽管这个领域最初主要由有学术背景的人组成,但这绝对不是唯一有效的切入点。关于是否应该拥有博士学位才能成为数据科学家的长期争论已经得到解决:你不需要。然而,博士学位绝对可以提供一些非常独特的好处,可以提升你的工作和生活。在这篇文章中,我的目的是客观地提供这条道路最重要的优点和缺点。

在我们继续之前,我要做的正确的事情是介绍我自己,向你表明我是根据个人经历来说的。所以,我是一个训练有素的纯数学家。我已经完成了我所有的数学学位(学士、硕士和博士),因为我太喜欢它了。读完博士后,我加入了一个计算生物学研究小组,担任博士后研究员,这是我通向机器学习的大门。在接下来的三年里,我将深度学习应用于各种细胞生物学问题,主要与高通量显微镜有关。目前,我正致力于建立我的创业公司。我从个人经历中知道,博士学位可能是一段美丽而又艰辛的旅程。如果你在做这个选择之前,我希望我能为你提供有用的信息来做决定。

你想要博士学位吗?

如果你想获得博士学位,有一个基本要求必须满足。在我从事学术界的七年时间里,我遇到过无数在终点线前放弃的学生。

有一个因素决定谁成功谁失败:推动知识边界的深层内在动力。

我认识的那些完全为了可能的职业发展而开始旅程的人没有一个例外地完成了学位。读博对他们来说是一段痛苦的经历。如果你真的不想读博士,那么,好吧,别读了。如果是这样的话,有更多的最优路径让你成长。

然而,如果你有某种内在驱动力,你会发现这条路有几个独特的价值。

好的一面

每个工作和博士职位都不一样。从每个方面来看,它们分布在一个很宽的范围内,在这个范围内,极端是可能的。这意味着我在这里提到的好处并不仅限于学术界,在某些情况下,它们可能根本不存在。例如,我首先要谈的是学术自由。有些公司可能会允许你控制发展方向,因为有些研究小组你无法影响你作为博士生的研究方向。

话虽如此,趋势是明显的。平均而言,行业职位往往落在光谱的一边,而博士职位则落在另一边。

学术自由

当你有一个博士职位时,它不同于任何工作。如果你受雇于一家公司,除非你得到了一个非常高级的职位,或者你是一家初创公司的首批雇员之一,否则你影响企业方向的空间将是有限的,甚至是不存在的。但是,当你在做研究的时候,通常不是这样。作为一名博士生,你被期望控制项目的计划和执行,有可能自己探索新颖的想法。与工业相反,在这里兴趣常常胜过实用性。这种自由既是福也是祸:你可以追求广泛的主题,但很难决定哪些是值得的。

深入研究一个课题

在你的研究中,你必须成为你狭窄领域的顶尖专家。如果你能在未来的工作中找到利用这些知识的方法,这会让你远远领先于所有人。这是一个你不太可能在工业界得到的机会,因为那里的事情进行得更快,而且通常你没有时间真正深入。

启发智力的环境

你的环境在你的成长中起着重要的作用。和非常聪明的人在一起是提升自己的好方法。你的导师、教员和你的同学都是想法和激发讨论的极好来源。就其本质而言,学术是推动艺术发展的地方。

拓展知识的边界

创新需要失败,这在行业环境中通常是不可取的。然而,在研究中并非如此,所以作为一名博士生,你被给予了经常失败的机会。(相信我,这一点非常重要。)你没有要服务的用户,没有要维护的产品,这让你可以专注于不断前进。在典型的行业环境中,这样做的动机通常很少。

更多展示你作品的机会

作为一名博士生,一个重要的部分就是在会议上展示你的演讲。通常在科学基金中有一个特别的预算分配,或者会议可以自己提供基金。除了 Twitter 等在线媒体,会议是展示你的工作、获得反馈和建立关系网的最佳方式。

不好的一面

除了好东西,学术道路还有几个困难。如果你正在考虑这个方向,你必须意识到这一点。如果你意识到了,一些潜在的麻烦可以减轻。

机会成本

从职业的角度来看,花在读博士上的时间并不是花在建立学术之外的职业生涯上。如果你希望最终进入这个行业,那你就错过了那些年。获得学位后,你很可能仍会被聘用到初级职位,这实际上让你落在了后面。博士学位是对知识的投资,需要数年才能收回。

财务成本

这取决于你的国家的高等教育体系,但一般来说,你获得的奖学金远远超过了工业工资,即使是大三学生。你甚至可能不得不支付非常昂贵的学费,这可能会让你负债累累。如果你不确定这项投资会有回报,让自己负债并不是一个好主意。

长期时间承诺

如果你开始了一份新工作,但很快你意识到它并不适合你,通常你可以离开而不会对你的职业生涯产生负面影响。但是,对于 PhD 来说就不是这样了。研究生课程的结构是这样的,最大的回报——你的博士学位——本质上是在一个时间门之后。提前退出这个项目就像在你的授权期开始前放弃一份创业工作。不幸的是,正如我们看到的,有很多理由离开。

没有动力去正确地建造东西

在研究中,第一个解决问题或有所发现是最重要的。如果你的竞争对手刚好在你之前冲过终点线,基本上你所有的工作都白费了。你将不能发表文章,也不会被承认你的成果。正因为如此,一些东西常常被拼凑在一起,只是为了让它们更快地工作,这使得其他人很难在结果的基础上进行构建。此外,你通过出版来推进你的事业,这也激励你快速前进。

幸运的是,这些趋势正在慢慢改变,至少在计算机科学和数据科学领域是如此。

没有人在那里帮助你

在研究中,荣誉很重要。每个博士生都在做他们的大项目,这对合作是不利的。然而,各研究领域之间存在差异。在计算机科学领域,人们更倾向于合作,但在生命科学领域,你几乎肯定是孤立的,你的同学可能是你的竞争对手。滥用职权的主管会让这种情况变得更糟。我曾见过导师将几个学生放在同一个问题上,让他们相互对抗以激发竞争。第一个解决问题的人能够毕业,其余的人不能。

独自工作也会影响工作本身的数量。没有 DevOps 团队来帮助你,没有人会代替你写文章,没有人会画插图,拼凑一个合适的用户界面,推广你的作品等等。最有可能的是,你必须独自完成这项工作。

压力大

由于我们已经谈论的所有事情,压力对一个学生来说经常是巨大的。这些来源既有内在的,也有外在的,往往在恶性循环中相互助长。对于一个研究人员来说,这是一个很难做到的事情。这导致了潜在的精神问题,使完成目标更加困难,进一步放大了内部斗争。

心理健康问题在博士生中频繁出现并非偶然。有几个关于这个的研究,例如下面的一个强调了在几个组中受每个问题影响的人的比例。

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

来源:工作组织与博士生心理健康问题,Katia Levecque 等人。

杀不死你的会让你变得更强

根据我的个人经验,我知道我们刚刚讨论的所有内容。我有经济困难,与我的导师关系不好,在出版压力下挣扎,有自杀倾向,不得不寻求帮助,还有许多其他问题。但是每一步,我都努力克服这些,我最终成功了。

我从博士学位中获得的最重要的东西是勇气。

最有价值的收获不是职业利益,也不是渊博的知识。它从另一边走出来,知道所有的障碍都可以通过艰苦的工作和努力来克服。

如果你喜欢把机器学习概念拆开,理解是什么让它们运转,我们有很多共同点。看看我的博客,我经常在那里发表这样的技术文章!

AI 能从大脑学到什么?

原文:https://towardsdatascience.com/what-can-ai-learn-from-the-brain-e981e2f0ef4f?source=collection_archive---------40-----------------------

什么是智能?以及大脑如何成为人工智能的灵感。

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

亚历山大·奈特Unsplash 上拍照

本文将分享以下内容:

什么是智能?

当我们在军事意义上思考情报时,我们想到的是知识。其他人可能会在智力的定义中加入技能。还有一些人认为智力是获得知识和技能的能力。我认为我见过的对智力的最好定义是由谷歌深度学习研究员 Francois Chollet 给出的,他本质上说,智力是有效地学习技能和知识以解决以前没有见过的新问题的能力。这个定义中有一些有趣的东西:

  1. 拥有知识或技能不被定义为智力。因此,当 IBM 的沃森在《危险边缘》中击败肯·詹宁斯时,或者深蓝在国际象棋中击败卡斯帕罗夫时,他们都是令人印象深刻的技术壮举,但他们是 T42 而不是智力的展示。这些系统依赖于人类程序员的聪明才智和插入到这些系统中的知识。沃森或深蓝无法看到一些如何烹饪的例子,并开始制作意大利晚餐。
  2. 这个定义特别强调了新技能的高效学习。像 GPT-3 这样的系统已经展示了令人难以置信的自然语言和生成文本的能力——但是它们是使用大多数网络公开知识训练出来的(从 45TB 文本开始!).很难说这是有效的。更重要的是,GPT-3 仅限于文本相关的任务。你不能提供一个新的任务——比如叠衣服或如何识别一个成熟的鳄梨——并希望同一个系统能够有效或高效地学习这项任务。

Chollet 在人工系统的智能测量方面开创了一些有趣的工作。他试图量化指标,并提出了一种方法和一些初步测试来量化系统的有效学习能力。没有这样的客观测量,很难判断我们是否正在向真正的智能系统发展。这是他关于智力测量的论文的链接,但是这个播客有一个很好的对话和概述,正如这个博客帖子一样。额外的此类测试包括原始的 Winograd Challenge 和修订的wino grade Challenge以更好地尝试理解常识推理。

[## #120 -弗朗索瓦·乔莱:智力测量|麻省理工学院|人工智能播客

弗朗索瓦·乔莱(Franç ois Chollet)是谷歌的人工智能研究员,也是 Keras 的创始人。

lexfridman.com](https://lexfridman.com/francois-chollet-2/)

神经网络

"N 神经网络是一系列模拟人脑运作的算法,用来识别大量数据之间的关系。"这里有一个简单的图像来帮助形象化这个概念:

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

形象信用

至少有一些变化,但是机器学习(例如监督机器学习)的基本概念是:

  1. 计算任务可以被建模为神经网络。以计算机视觉和识别图像是猫还是狗为例。该任务是复杂的非线性函数,其中输入是一组像素(例如输入图像),输出是表示图像是猫或狗的标志。
  2. **人类标注的数据可以用来训练系统。**由人类识别和标记的狗和猫的已知图像可以被输入到系统中,以训练函数的参数。

一个简短的时间线:受大脑生物学的启发,神经网络在 20 世纪 40 年代构思,在 60 年代末和 70 年代初普及,在 80 年代复兴,在 90 年代消亡,在 21 世纪初再次崛起。在过去的 10 年里,随着深度学习(deep learning)的出现,它们真正变得有用了。深度学习是指用于解决计算机视觉、语音识别等有趣问题的深度多层神经网络,互联网提供了大量的训练数据,计算能力的大幅提高使这些计算和算法变得实用。

深度学习的挑战

虽然受到大脑的启发,并且取得了令人印象深刻的成就,但神经网络和深度学习仍然相对简单。正如我们在 GPT-3 的例子中看到的,训练一个系统可能需要大量的数据,而这些系统只能获得有限的知识,不能灵活地学习另一项任务。

根据 NYU 大学心理学和人工智能教授 Gary Marcus 的说法,深度学习面临几个这样的挑战:数据效率转移学习,分层知识,开放式推理,可解释性,整合先验知识,因果推理,不稳定世界建模,以及鲁棒性。

从根本上说,这些深度学习系统最多是为了狭隘的理解而设置的。它们对环境的重大变化或稍微不同的任务并不健壮。他们没有常识性的理解。他们没有能力将学习从一项任务转移到另一项任务。

AI 如何向大脑学习?

在设计人工智能系统时,仍有许多人从儿童如何学习中获得灵感。孩子们表现出难以置信的学习能力,并有效地利用一系列工具。加州大学伯克利分校的人工智能教授 Jatindra Malik 在本期播客中,结合这篇论文,分享了以下 6 件人工智能可以从孩子身上学到的事情:

  • 多模态
  • 是递增的
  • 探索
  • 社交化
  • 身体力行
  • 使用语言

[## #110 - Jitendra Malik:计算机视觉|麻省理工学院|人工智能播客

Jitendra Malik 是伯克利的教授,是计算机视觉领域的开创性人物之一,是那种…

lexfridman.com](https://lexfridman.com/jitendra-malik/)

例如,儿童使用多种方式学习——也就是说,他们会看到、触摸、听到他们周围的世界,并通过这种方式收集关于行为的情报和知识。

他们以增量方式做这件事开始时几乎没有什么知识,随着他们的经历,他们将脚手架和新知识添加到结构中。

当你把玻璃杯掉在地上时,你可以听到它破碎的声音。所以看起来像玻璃的东西通常是易碎的。多种模态——例如整合视觉和听觉——和增量学习可能是加速人工智能系统学习的重要构造。

孩子们也探索 T21,和他们周围的世界玩耍。他们会尝试一些事情。如果有些东西不起作用,他们可以继续尝试,或者他们身边会有一个更有经验的人(例如父母)来纠正他们或教他们;这是他们生活的社会世界的本质,这可能对人工智能有用。尝试某事的想法——而不是输入一堆静态的历史数据或标签数据——是一种思考学习、与世界互动的有趣方式,或许能更有效地加速我们对它的学习。

加里·马库斯关于“为什么初学走路的孩子比电脑聪明”的 TED 演讲准确地解释了这些概念:

强化学习是机器学习中的一种相关技术,它可以更少地依赖于训练数据,而更多地依赖于实现目标和自我游戏。这种技术在 AlphaGo 项目中被广泛使用,成功击败了围棋世界冠军。AlphaGo 通过独自玩游戏****数百万次,并学习哪些策略有效,哪些策略无效,从而学会了下围棋。虽然效率不高,也不完全可移植,但这些概念似乎很有前途。如果你还没有看过,我强烈推荐 AlphaGo 纪录片——我既被创造这个系统的团队的独创性所鼓舞,又在看着一个人输给这台机器时感到矛盾。

** [## 谷歌的 AlphaGo 如何击败围棋世界冠军

2016 年 3 月 19 日,世界上最强的围棋选手李·塞多尔坐下来与谷歌 DeepMind 的…

www.theatlantic.com](https://www.theatlantic.com/technology/archive/2016/03/the-invisible-opponent/475611/)

直接引用史密斯和加塞的论文来总结人工智能可以从大脑学习的最后两个领域:

婴儿生活在一个物理世界里,充满了丰富的规律来组织感知、行动和最终的思维。婴儿的智力不仅存在于他们自身,还分布在他们在现实世界中的互动和经历中。物质世界有助于提升更高的精神功能。

婴儿学习一种语言,这是一种共享的交流系统,具有象征意义。这改变了一切,使孩子们能够形成更高层次和更抽象的区别。

总之,人类学习的方式有许多方面——社会地、渐进地、通过多种方式——人工智能可以从 中获得灵感,从而实现 真正的智能,也就是高效地学习全新的任务。

我们能从整个社会学习吗?

虽然人工智能研究可以从研究个体人类学习中受益和进步,但人工智能可以从整个社会中学到什么?如果你把一个今天的婴儿和一万年前的婴儿放在一起,他们在生物学上非常相似,但是今天的婴儿会比他/她的生物祖先学得更多,也许更快。为什么?是的,现在有了更多的信息,但是除了书籍和维基百科,这些信息是如何编码的呢?我们如何转移这样的常识和文化学习?社交学习、编码习俗、行为甚至价值观的概念是一个有趣的概念,观察我们如何将文化和相互依赖塑造成未来的自主代理人将是一件有趣的事情。

结论

如今,机器学习取得了令人难以置信的进步和发展,这得益于更多的数据、更快的计算以及更好的算法和架构。然而,我们离智力和学习的一般理论还很远,从理解我们的生物学习系统中,我们还有很多要学习和收获的。我对认知科学、心理学、神经科学和计算机科学之间的多学科学习以及改善我们自己的生物——以及推进人工智能的前景感到鼓舞、兴奋和高度乐观。**

这篇文章是关于大脑的系列文章的一部分。请随意点击这里的查看这个系列的开头,它包括了关于神经解剖学、行为、学习、人工智能和自由意志的其他文章的链接。

参考

分析 200 多万个街道名称能揭示什么?

原文:https://towardsdatascience.com/what-can-analysing-more-than-2-million-street-names-reveal-c94be585759?source=collection_archive---------16-----------------------

我分析了英国的每一个街道名称,以下是四个最令人兴奋的结果。

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

林肯郡范妮·汉兹巷。来源

争论场、裤裆新月、屎特顿、公鸡巷、乳头街都是英国有趣的街道名称。这些街道名称不仅有趣,而且揭示了许多关于社区、他们的文化和历史。最近对英国愚蠢名字的抱怨包括房价下跌和住在这些愚蠢街道名字里的孩子受到更多欺负。

街道命名不仅是政治和行政决策,也反映了城市的社会和文化价值。我们道路的名字象征着文化、价值观和历史。我们以传说、名人和历史事件来命名街道。

然而,街道名称的定量数据来源和实证分析探讨较少。在分析社区、城市和地区的街道名称时,大数据分析和数据可视化可以揭示什么?他们能表现出多大的性别失衡?宗教狂热和街道名称呢?我们的道路比街道多吗?车道、大道或车道呢?最著名的书名有哪些?

为了深入了解这些问题,我分析了英国 200 多万条街道的名称。Github 上提供了数据的代码和预处理。我将在这里揭示通过数据可视化分析得出的四个最重要的见解。

1.最受欢迎的街道名称——高街 vs 车站路

在 2,323,627 个街道名称中,“高街”是最受欢迎的名称,出现频率为 16593 次,其次是“车站路”和“主街道”,分别有 11521 个和 7623 个条目。下图显示了英国 30 个最常见的街道名称。

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

也可以深入挖掘,找到每个区最常见的街道名称。例如,诺里奇的“迪尔罕路”是最常见的名称,而伊普斯威奇的“纳克顿路”是最常见的名称。另一方面,我们可以在更高的级别上进行汇总,以找出最著名的街道名称:

英国——“高街”

苏格兰——“主街”

威尔士“高街”

2.后缀—道路与车道

不同城市的名字后缀差别很大。尽管有一些通用的标准将后缀分类为道路、小巷或街道。通过对数据的一点点预处理,我们还可以找到最流行的后缀。下图显示了街道名称中最常用的 20 个后缀。

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

“道路”后缀占主导地位(775,537),其次是小巷和街道,分别有 238726 和 213881 个频率。我们可以看看这些名字在地理上是如何分布的。这里,我们汇总了每个城市的所有后缀,并取每个城市中出现频率最高的街道后缀名称。结果很能说明问题。

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

这张地图显示了所有地区用作后缀的“道路”的数量。事实上,只有 18 个区的「路」字尾不在最前面。这是所有 18 个地区的名称和最常用的后缀。

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

3.街道名称中的性别失衡

街道名称也能让我们描绘出性别失衡的地图。性别方面是一个独特的机会,因为在城市一级往往很难找到性别不平衡的指标。

为了将名字按性别分类,我使用了性别化服务,它允许你每天自由地对 1000 个名字进行编码和性别化。我数了每个名字及其出现的次数,根据它们的出现次数进行了分类,并取了前 1000 个。根据出现的总次数来选择最著名的名字是有好处的。虽然数据集中有 99,088 个独特的街道名称,但通过对前 1000 个进行性别区分,我们覆盖了几乎 50%的数据集。然而,这也有它的缺点,因为它留下不太有名的名字,可能会给出不同的结果。

最常用的 1000 个街道名称的性别分类

上图显示了街道名称中明显的性别不平衡。大多数流行的街道名称都是以男性分类名称命名的。

为了更深入的理解,也由于性别化 API 的限制,我选择了利物浦市并对其所有街道名称进行了分类。这是一张有性别分类百分比的地图。

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

利物浦的调查结果也清楚地指出了街道名称中的性别不平衡。看看其他城市并找出结果将会很有趣。

4.虔诚

街道名称有多大的宗教影响?我们能量化它们吗?为了找到答案,我们可以假设有强烈宗教倾向的社区倾向于用宗教名称来命名更多的地方。

使用 Oto‐Peralias 方法,我们可以按如下方式衡量一个城市的宗教程度:

Religiosity = R / N x 100

其中,分子 R 是城镇中包含下列宗教名称的街道数量。

Church, Chapel, Augustine, Bethlehem, St., St. John’s, Mary’s, Jerusalem, Palestine, Jesus, Christian, Father, Trinity, Babylon, Bethel, Presbyterian, Baptist, Gospel, Hell, Paradise, Jericho, Nazareth, Nimrod, Ninevah, Ophir, Patmos, Zion, Antioch, Canaan, & Heaven.

虽然搜索的术语不是所有宗教名称的综合列表,但它是迄今为止使用最广泛的街道名称。

分母 N 包含每个城市的街道总数。

分析结果如下图所示。

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

宗教街道名称的比例较高,主要出现在英格兰,尤其是东部地区。在城市中,锡利岛和萨福克中部的宗教街道名称比例最高。

结论

街道名称是定量数据分析的一个很好的来源,可以揭示许多关于社区及其历史的信息。这是一个尚未开发的数据源,在本文中,我们只是触及了皮毛。

本文使用的数据来自法令调查,可从此处访问。

关于过度拟合,博尔赫斯能教你什么?

原文:https://towardsdatascience.com/what-can-borges-teach-you-about-overfitting-e5ac2dd21217?source=collection_archive---------63-----------------------

豪尔赫·路易斯·博尔赫斯(1899–1986)是一位才华横溢的作家,也是有史以来最有影响力的作家之一。但是博尔赫斯能教你什么是过度拟合呢?

Funes 纪念馆

博尔赫斯在 1954 年写了《纪念的 Funes》(原名《纪念的 Funes el memorioso》)。这个故事诞生于作者失眠之后。这个故事讲述了患有健忘症的 Ireneo Funes 的故事。在一次骑马事故后,富内斯发现他可以记住几乎所有的事情:一天中每时每刻云的形状,房子每个角落灯光的位置,两个月前他每分钟都做了什么,等等。

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

公共领域下的博尔赫斯形象。

在这个故事中,博尔赫斯探讨了关于我们生活中需要“遗忘的艺术”的几个方面的各种主题。通过完全记住每件事,Funes 失去了思维过程中最重要的特征之一:概括。Funes 不能理解为什么“狗”这个词可以把每只狗归为一类,如果它们明显不同的话。他可以很容易地区分眼睛发亮的小黑狗和左眼有红点的小黑狗,但他不明白是什么让狗成为狗。

过度拟合或泛化能力的丧失

健忘症与其说是礼物,不如说是不幸。没有概括就不可能使用抽象思维。而且没有抽象思维,Funes 更接近机器而不是人。他进入了我们期望从机器学习中获得的相反方向。

过度拟合 对于机器学习来说,就像健忘症对于 Funes 一样。过度拟合的模型无法区分噪声观测和基础模型。这是,他们不能一概而论。

下图显示了两个二元分类器(黑线和绿线)。过度拟合的分类器(绿线)非常依赖于训练数据,当新的观测值到达时,它很可能表现不佳。

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

Ignacio Icke维基百科的知识共享下

我如何知道我有一个过度拟合的模型?
当您观察到训练集中的性能比测试集中的性能好得多时。

那么,如何防止过度拟合呢?

  • 考虑足够大的数据集。如果你的数据集太小,你的模型会简单地记住所有的规则。
  • 交叉验证时刻牢记。
  • 正规化总是有帮助的。
  • 模型的集合有助于归纳。
  • 提前停车。迭代算法(CNN,DNN,RNN 等。)苦于局部极小问题。按时停车能给你更好的效果。

希望你会考虑读 Funes the memorious 或任何博尔赫斯的故事。希望,当你找到下一个过度装配的模型时,你会想到有趣的事。

最初发布于:https://jmtirado . net/what-can-Borges-teach-you-about-over fitting/

新冠肺炎预测者能从帕斯卡的赌注中学到什么

原文:https://towardsdatascience.com/what-can-covid-19-forecasters-learn-from-pascals-wager-acb010f347e0?source=collection_archive---------46-----------------------

在本文中,我们分析了一个锁定了一个国家的预测,并展示了在建模中犯小错误导致结果中的大问题是多么容易。

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

来源:Adobe Stock

在此分析中,我们将验证重症监护病房(ICU)的峰值负荷预测。这一预测是由国家卫生官员做出的。这种预测在时间有限的政策决策中发挥着突出的作用,这些决策试图在完全的社会瘫痪和不必要的生命损失之间取得平衡。对每一个参数值、模型和图形的仔细检查是最重要的。只有通过审查,才能根据数据和建模做出合理的决策。

我们将以芬兰卫生当局——THL——和他们的 ICU 高峰负荷预测为例。文章中的所有内容都可以应用于其他类似的预测。

我们已经使所有的发现,材料和代码允许直接复制的结果可用。你可以在文章末尾找到链接。

在这份报告中,我们得出以下结论:

  • 当我们修正 THL 的模型参数以符合经验证据时,否则保持模型原样,我们发现在公布的预测中有 45%的误差
  • THL 的模型假设了一条明显落后于经验时间序列数据的曲线
  • THL 的模型是基于每 23 天的指数增长,根据证据,增长率接近 10 天
  • 为了重现 THL 的预测,我们使用了蒙特卡罗模拟,找到了有限的几种可能的情况

经验证据、可比方法和 THL 模型假设中的明显误差表明,预测的 ICU 高峰负荷实际上是不可能实现的。尽管在本报告中,我们没有提出替代预测,但我们得出结论,使用我们公布的方法[ 1 ],很容易观察到更高的 ICU 高峰负荷是可能的。足以引出一个重要的问题。

较高的数字会如何改变基于较低的数字已经做出的决定?

我们所做的模拟是基于蒙特卡罗方法,即使没有受过正规统计训练的人也很容易理解。使用更简单的版本[ 2 ],我们通过改变 *doubles_in_days、*max _ patient _ capacity、case _ deactivity _ rate输入参数,经历了大量可能的情况。我们已经用一个更精细的[ 3 ]验证了结果,该模拟器也是基于蒙特卡罗的,允许更多的输入参数,并将标准 ICU 负荷与通气 ICU 负荷分开。

在一个为期 20 天的模拟中,我们发现大约一半的可能情况以生命损失告终,因为对 ICU 的需求超过了能力。

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

模拟的详细结果超出了本文的范围,我们将在两周内以另一篇文章的形式发布。

什么是好的数据驱动决策?

有许多方法可以利用现有的信息来支持决策;基于基于当前理解(理论)和基于直觉的数据。基于数据的决策可以基于最近的事件或历史趋势。当我们使用数据时,无论是历史数据还是当前数据,我们的目标都是利用这些数据来预测未来。当理论、直觉和数据都说同样的事情时,它可以给预测或发现带来可信度。该发现必须是可重复的;否则,它必须被视为一个错误。即使该发现在其他方面符合可信度的标准,除非它可以被复制,否则只能保证低可信度

然而,我们必须记住,即使一个发现是可信的,也不意味着我们可以预测未来。我们可以尝试,有时我们会做得很好,但我们永远不能用历史来预测未来。唯一可以用来预测未来的工具当然是“一个有效的推论”,一个用在哲学中的工具。例如,我们当然可以说,只要有燃烧,就会有一些热量。但是作为数据科学家,我们没有那种奢侈。我们总是研究概率和分布。从不确定。这是我们工作领域中一个微妙但非常重要的点。

帕斯卡的赌注

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

来源:维基媒体

概率方法之父布莱士·帕斯卡发展了统计学来回答上帝是否存在的问题。在研究这个问题多年后,帕斯卡最终得出结论,即使上帝存在的可能性非常小,人们也不应该冒险过着不真实的生活。这被称为“帕斯卡赌注”,这是应用概率方法的一个关键原则。特别是在介绍我们工作结果的责任方面。“帕斯卡赌注”适用于所有至关重要的预测,例如人类生命的损失是预测错误的结果。一种有意义的呈现发现的方式是在概率和与方法相关的警告之间保持平衡。但尤其是在演示阶段。

经验证据的重要性

建模必须以经验证据为基础。关于新冠肺炎,在许多领域,我们的情况是,现有数据描绘了一幅有意义的问题图。下面我们总结了本报告中使用的可用证据,这些证据有助于建立 ICU 峰值负荷模型。所有数字都基于芬兰现有的最新数据。大多数国家都提供类似的数据。

这种病毒有多常见?
所有检测病例中大约有 6%呈阳性。

有多少检测呈阳性的人需要住院治疗? 超过 10%的检测呈阳性者需要住院治疗。

有多少住院病人需要重症监护?大约 40%的住院病人需要重症监护。

ICU 中有多少人需要通气?
根据现有文献,我们估计它在 55%[ 4 ]和 65%[ 5 ]之间

ICU 停留时间有多长? 根据来源不同,我们估计平均持续时间在 7-12[6][7]天之间。我们注意到,较低的数字可能是由于能力问题导致死亡率上升。我们发现,在流感患者中,ICU 停留的平均时间为 12 天。

目前有多少 ICU 病人?
截至 2020 年 4 月 6 日,有 81 名 ICU 患者。

目前 ICU 负担的增长因素是什么? 每周大致 50%。

批判性地评估已经做出的预测

THL 提出,ICU 负担高峰将少于 300 人。峰值预计出现在曲线的第 9 周。包括总理在内的芬兰政治家一再提到 THL 的预测推动了各种措施,如社会距离。THL 的模型以大约 60 名 ICU 患者为起点,并以几乎四周的速度翻倍。

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

资料来源:Yle

基于 3 月至 4 月间 ICU 患者数量的经验倍增率大约是这个数字的一半。换句话说,实际增长大约是 THL 预测的两倍。

即使生长因子中相对较小的误差也会对结果产生显著的影响。THL 的模型假设周增长率为 1.2 倍。如果增长率是 1.3 倍,预测的相对准确性是 91.7%,但绝对 ICU 负担几乎翻倍。1.4 倍的周增长率(相对准确性仅相差 15%)导致超过 3 倍的绝对峰值负载。

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

THL 模型中的另一个重要假设是住院和重症监护需求之间的关系。例如,在曲线的第二周,THL 预测有 283 人住院,其中 88 人需要重症监护。这意味着 THL 假定有 31%的重症监护室率。根据现有数据,芬兰的实际失业率为 39%,比 THL 的假设高出 21%。从经验数据来看,这种程度的偏差可以认为是重要的。此外,THL 解释说,该模型假设重症监护室平均停留时间为 8 天。根据现有的文献,这可能是十天左右。根据历史患者记录,ICU 平均住院时间为 8.5 天,但流感患者的平均住院时间为 10.5 天[ 11 ]。因此,我们发现 THL 的预测有 20%的额外误差。

结合基本假设偏离经验数据的方式所产生的误差,我们不得不假设,基于 THL 的模型,峰值负担将是 406 而不是 280。我们发现,虽然模型本身可能是有用的,但目前公布的预测包含一个重要的错误。这个 45%的误差是假设没有其他偏差可以识别,即,这不包括模型中的任何其他问题。简而言之,当我们修正 THL 模型中的输入参数以遵循经验证据时,基于该模型发布的预测包含了一个重要的错误。

我们还发现,当比较 THL 的模型与几个可用的模型,明显较高的峰值负荷值是突出的。

重要的是要明白,偏离事实是可能的;世界上还没有人清楚地了解新冠肺炎预测问题。十年来,在超过 60,000 名 ICU 住院患者中,我们发现 187 例出现了流感和肺炎患者。目前,许多医院一天要处理更多的病例,显然我们都在探索新的领域。这使得建模和预测非常困难,并突出了利用经验数据的时间序列预测和影响输入参数范围的经验数据的蒙特卡罗模拟等方法的重要性。这一点,以及与金融科技(fintech)和广告科技(adtech)等相关领域的密切合作。

骑在虎背上,小心行事

正如帕斯卡的赌注所规定的,模型的输出应该根据一个错误决策能造成多大的损失来评估。例如,如果肺癌被错误地诊断为阴性,患者的生存几率就会急剧下降。类似地,如果对 ICU 容量的需求被错误地预测为低于实际需求,患者存活的几率就会大幅下降。对于新冠肺炎患者和所有在高峰容量期间需要重症监护的患者来说都是如此。由于重症监护的结构是在生命无法维持的情况下维持生命,可以有把握地认为,一旦需要重症监护的病人被拒绝,该病人存活的机会就降到了零。

使用的方法

检验声明的最佳方式是使用各种不同的方法重现它。使用下面强调的方法,我们试图重现 THL 的预测,但失败了。只有当我们偏离经验上合理的输入参数时,我们才能始终如一地实现它。

  • 文献评论
  • 审查公开可用的模型
  • ICU 住院数据的定量分析
  • 可用经验数据的回归分析

我们制作了所有的发现、材料和代码,允许通过https://autonom.io/icu_burden直接复制结果,并鼓励所有研究人员在工作中做同样的事情。

你能以同样的方式仔细检查你国家的官方预测吗?还是我们在这篇文章中提出的主张?审视是推动知识前进的力量。做吧,去仔细检查。

编者注: 走向数据科学 是一份以研究数据科学和机器学习为主的中型刊物。我们不是健康专家,这篇文章的观点不应被解释为专业建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值