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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

在发现这些技巧之前,我一直以为自己在掌握 Python

原文:https://towardsdatascience.com/i-thought-i-was-mastering-python-until-i-discovered-these-tricks-e40d9c71f4e2?source=collection_archive---------0-----------------------

Python 最佳实践和技巧将使您快速高效地编码

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

阿尔瓦罗·雷耶斯在 Unsplash 上拍摄的照片

Python 是最受初学者欢迎的编程语言之一,这使它成为世界各地学校中教授最广泛的语言。

但是,学习 Python 并不是一件容易的事情。要开始,你首先需要找到到达那里的最佳在线方式,这本身就很难。有成千上万不同的 Python 课程和教程,都声称是最好的。

诚然,光是练习是不完美的,但完美的练习才是。这意味着你需要确保你总是遵循最佳的编码实践(评论你的代码,使用正确的语法,等等)。),否则你很可能会养成坏习惯,这会损害你未来的代码行。

“一个通用的约定提供了所有的可维护性、清晰性、一致性,以及良好编程习惯的基础。它没有做的是坚持让你违背自己的意愿去跟随它。那是 Python!”

——Tim Peters 关于 comp.lang.python,2001 年 6 月 16 日

在本文中,我将给出我的 10 大技巧来帮助你快速有效地用 Python 编码。

1.可读性很重要

程序必须写给人们阅读,并且只是附带地给机器执行。

哈尔·阿伯尔森

首先,遵循一些编程惯例,尽量让你的程序易读。编程惯例是经验丰富的程序员在编写代码时遵循的惯例。没有比无视习俗更快的方式来表明你是一个新手了。其中一些约定是特定于 Python 的;其他的被所有语言的计算机程序员使用。

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

从本质上来说,可读性是一种特性,它规定了另一个人理解你的代码的某些部分有多容易(而不是你!).

举个例子,我不习惯用垂直对齐来写,也不习惯用开始定界符来对齐函数的参数。

*# No, to avoid: 
func = long_function_name(var_one, var_two,
       var_three, var_four)#Yes, 
func = long_function_name(var_one, var_two,
                          var_three, var_four)*

看看 Python 代码的风格指南中的其他例子,决定什么看起来最好。

我们经常做的另一件重要的事情是模仿我们以前看过或写过的程序,这就是为什么我们接触可读程序在学习编程中很重要。

2.避免无用的条件

通常,一个长的 if & elif & …else 条件是代码需要重构的标志,这些条件会让你的代码变得冗长且难以解读。有时它们可以很容易地被取代,例如,我曾经这样做过:

*def f():
    if condition:
    	return True
    else:
    	return False*

这太蠢了。该函数返回一个布尔值,那么为什么要首先使用 if 块呢?正确的做法应该是:

*def f():
	return condition*

在一个黑客排名的挑战中,给你一年,你必须写一个函数来检查这一年是否是闰年。在公历中,识别闰年必须考虑三个标准:

  • 一年可以被 4 整除,是闰年,除非:
  • 一年可以被 100 整除,它不是闰年,除非:
  • 年份也能被 400 整除。然后就是闰年了。

所以在这个挑战中,忘记ifelses 只做以下事情:

*def is_leap(year):
    return year % 4 == 0 and (year % 400 == 0 or year % 100 != 0)*

3.充分使用空白

  • 不要混用制表符和空格
  • 函数之间的换行
  • 两个类之间的换行符
  • 在字典中的*“、”**、列表、元组、参数列表中的参数后和字典中的 “:” 后添加一个空格,但不在前面。*
  • 在赋值和比较周围加空格(列表中的参数除外)
  • 左/右括号或参数列表前没有空格。
*def function(key, value=0):
    """Return a dictionary and a list..."""
    d = {key: value}
    l = [key, value]
    return d, l*

4.文档字符串和注释

  • Docstrings =如何使用代码
  • 注释=为什么(rational)和代码如何工作

文档字符串解释了如何使用代码:

  • 解释一个功能的目的,即使它对你来说是显而易见的,因为它对其他人来说不一定是显而易见的。
  • 描述预期的参数、返回值和引发的异常。
  • 如果该方法与单个调用者强耦合,则提及调用函数。

注释解释了代码维护者的需求。例子包括给自己的注释,例如:

# !!!BUG: …

# !!!修复:这是一个黑客

# ???为什么会在这里?

写好的文档串和好的注释是你的责任,所以要经常更新它们!进行更改时,确保注释和文档字符串与代码一致。

你会发现一个详细的 PEP 专用于 Docstring:【Docstring Conventions】

5.变量和赋值

在其他编程语言中:

*c = a
a = b
b = c*

在 Python 中,最好在一行代码中使用赋值:

*b, a = a, b*

你可能已经看过了,但你知道它是如何工作的吗?

  • 逗号是构建元组的语法。
  • 右边创建一个元组(元组打包)。
  • 元组是左边的目标(元组解包)。

其他示例:

*>>> user =['Jan', 'Gomez', '+1-888-222-1546']
>>> name, title, phone = user
>>> name
'Jan'
>>> title
'Gomez'
>>> phone
'+1-888-222-1546'*

在结构化数据的循环中有用(上面的变量用户已被保留):

*>>> people = [user, ['German', 'GBT', 'unlisted']]
>>> for (name, title, phone) in people:
...      print (name, phone)
...
Jan +1-888-222-1546
German unlisted*

也可以反过来做,只要确保左右两边的结构相同即可:

*>>> jan, (gname, gtitle, gphone) = people
>>> gname
'German'
>>> gtitle
'GBT'
>>> gphone
'unlisted'
>>> jan
['Jan', 'Gomez', '+1-888-222-1546']*

6.列表连接和联接

让我们从字符串列表开始:

*colors = ['red', 'blue', 'green', 'yellow']*

我们想把这些链连接在一起,形成一条长链。特别是当子字符串的数量很大时,请避免这样做:

*result = ''
for s in colors:
    result += s*

它非常慢。它使用大量的内存和性能。总和将被累加、存储,然后移动到每个中间步骤。

相反,请这样做:

*result = ''.join(colors)*

join () 方法一次性完成整个拷贝。当你只处理几个字符串的时候,没什么区别。但是要养成以最佳方式构建链的习惯,因为有了成百上千条链,它将真正发挥作用。

下面是一些使用 join () 方法的技巧。如果您想要一个空格作为分隔符:

*result = ' '.join(colors)*

或者逗号和空格:

*result = ', '.join(colors)*

为了造一个语法正确的句子,我们希望每个值之间都有逗号,除了最后一个值,我们更喜欢用“或”。拆分列表的语法完成了剩下的工作。 [: -1] 返回除最后一个值之外的所有内容,我们可以用逗号将最后一个值连接起来。

*colors = ['red', 'blue', 'green', 'yellow']
print ('Choose', ', '.join(colors[:-1]), \
      'or', colors[-1])>> Choose red, blue, green or yellow*

7.测试真实条件

对于布尔值,利用 Python 既优雅又快捷:

*# Do this :     # And not this :
if x:             if x == True:
   pass                  pass# Do this :     # And not this :
if items:         if len(items) != 0:
    pass                pass# and especially not that :
        if items != []:
               pass*

8.尽可能使用枚举

枚举 函数获取一个列表并返回对(index,item):

*items = ['zero', 'one', 'two', 'three']
>>> print list(enumerate(items))
[(0, 'zero'), (1, 'one'), (2, 'two'), (3, 'three')]*

需要使用列表来显示结果,因为 enumerate 是一个惰性函数,仅在被请求时才一次生成一个项目(一对)。for 循环需要这样的机制。 打印 不一次取一个结果,但必须拥有要显示的全部信息。因此,在使用 print 之前,我们自动将生成器转换为列表。

因此,使用下面的循环要好得多:

*for (index, item) in enumerate(items):
    print (index, item)# compared to :              # And :
index = 0                     for i in range(len(items)):
for item in items:                    print (i, items[i])
    print (index, item)
    index += 1*

枚举的版本比另外两个版本更短更简单。一个展示枚举函数返回迭代器的例子(生成器是迭代器的一种)

9.列表理解

传统方式用表示表示:

*new_list = []
for item in a_list:
    if condition(item):
        new_list.append(fn(item))*

使用列表理解:

*new_list = [fn(item) for item in a_list if condition(item)]*

列表内容清晰而直接。如果条件 在同一个 listcomp 内,但超出两个或三个,或者条件比较复杂,那么循环 和 可以有几个 ,建议您使用通常的 循环

例如,从 0 到 9 的方块列表:

>>> [n ** 2 for n in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

前一个列表中的奇数列表:

>>> [n ** 2 for n in range(10) if n % 2]
[1, 9, 25, 49, 81]

另一个例子:

>>>   [(x, y) for x in (1, 2, 3, 4) if x % 2 == 0 
       for y in ['a', 'b'] if y == 'b']
[(2, 'b'), (4, 'b')]

10.生成器表达式

让我们对小于 100 的数字的平方求和:

# With a loop :
total = 0
for num in range(1, 101):
    total += num * num

我们也可以使用 sum 函数,它通过构建正确的序列来更快地完成这项工作。

# With a list comprehension :
total = sum([num * num for num in range(1, 101)])# With a generator expression :
total = sum(num * num for num in xrange(1, 101))

生成器表达式类似于列表理解,除了在它们的计算中,它们是懒惰的。Listcomps 在一次传递中计算整个结果,并将其存储在一个列表中。必要时,生成器表达式一次计算一个值。当序列非常长,并且生成的列表只是一个中间步骤而不是最终结果时,这特别有用。

例如,如果我们必须对几十亿个整数的平方求和,我们将达到一个列表理解的内存饱和,但是生成器表达式不会有任何问题。不过,这需要一段时间!

total = sum(num * num for num in range(1, 1000000000))

语法上的区别是 listcomps 有方括号,而生成器表达式没有。生成器表达式有时需要括号,所以您应该总是使用它们。

简而言之:

  • 当预期结果是列表时,使用列表理解
  • 当列表只是一个中间结果时,使用生成器表达式

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

来源:https://www.azquotes.com/quote/669106

结论

在本文中,我介绍了一些学习 Python 编程的最佳技巧。如果你真的想成为一名程序员或者在你的技能中增加一项编码技能,学习 Python 是一个很好的起点。在网上寻找高质量的 Python 培训,并开始了解如何用 Python 编程。我建议您在学习更难的概念之前,先通过互动课程学习基础知识。

你不应该把学习过程加快太多,否则你可能会错过重要的信息。记笔记,确保定期复习,并尽可能多地练习编写代码。

与像你一样学习的同事联系,当你有问题时不要害怕提问。当别人有问题时帮助他们可以是一个很好的回顾,使用别人的代码是学习新事物的好方法。

如果你做到了这一切,没有什么可以阻止你!你还在等什么?现在就开始用 Python 编程!

我尝试过(也失败了)用甘斯创作艺术,但还是值得的。

原文:https://towardsdatascience.com/i-tried-and-failed-to-use-gans-to-create-art-but-it-was-still-worth-it-c392bcd29f39?source=collection_archive---------43-----------------------

这部作品大量借鉴 Pytorch DCGAN 教程 和 NVIDA 论文关于渐进式 GAN。

我一直想探索的一个计算机视觉领域是 GANs。所以,当我和妻子搬进一个有额外墙壁空间的房子时,我意识到我可以创建一个网络来制作一些墙壁艺术,这样就不用去贝德柏士比昂公司了(一举两得!).

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

我将尝试创造的风格的一个例子(照片由 Jen TheodoreUnsplash 上拍摄)

什么是甘?

GANs(生成对抗网络)使用两个协同神经网络工作:一个创建伪造图像(生成器),另一个神经网络接收伪造图像以及真实的艺术作品,并试图将它们分类为真实或伪造(鉴别器)。然后网络不断迭代,生成器越来越擅长制造假货,鉴别器越来越擅长检测假货。在这个过程的最后,你有希望拥有一个生成器,它可以随机地创建看起来真实的艺术作品。在她的书《你看起来像个东西,我爱你》中,Janelle Shane 讨论了如何使用 gan 来制作各种东西,从饼干食谱到接台词(这也是这本书得名的原因)。

如果你不知道 GANs 是什么,我建议你阅读这篇 Pytorch 文章以获得更深入的解释。

挑战

创建一个能产生满意结果的 GANs 模型有几个困难,我需要在我的项目中解决这些困难。

数据。像所有的神经网络一样,你需要大量的数据;然而,GANs 似乎有更大的胃口。我读过的大多数 GAN 项目都利用了数万或数十万张图片。相比之下,我的数据集只有几千张图片,是我从谷歌图片搜索中获得的。就风格而言,我喜欢以类似 Rothko 的东西结束,但我会满足于普通的床浴和其他东西。

***训练时间。*在 NVIDA 关于 progressive GANs 的论文中,他们使用多个 GPU 对他们的网络进行了数天的训练。在我的情况下,我将使用谷歌 Colab,并希望免费层硬件将足够好。

模式崩溃。除了是我的新 dubstep 项目的名字之外,当各种生成的图像开始汇聚时,就会发生模式崩溃。本质上,生成器看到一些图像在欺骗鉴别器方面做得很好,并决定使其所有输出看起来像这几个图像。

***图像分辨率。*想要的图像越大,需要的网络就越大。那么我需要多高的分辨率呢?嗯,数码照片每英寸的推荐像素数是 300,所以如果我想要的东西可以挂在 12x15 英寸的框架中,我需要 54,000 平方像素的最终分辨率!很明显,我不能建立一个如此高分辨率的模型,但是对于这个实验,我会说这是我的目标,我会看看我的最终结果。为了帮助解决这个问题,我还将使用一种渐进的 GANs 方法。这是由 NVIDA 首创的,他们首先在低分辨率下训练一个模型,然后逐步添加增加图像分辨率所需的额外层。你可以把它想成是涉水入池,而不是直接潜入深水区。在他们的论文中,他们能够生成分辨率为 1024 x 1024 像素的名人图像(我的目标只是这个数字的 50 倍)。

进入代码

我的完整代码可以在 github 上找到。我想在本文中展示的主要内容是生成器和鉴别器。

***鉴频器。*我的鉴别器看起来像任何其他图像分类网络。这个类的独特之处在于它将层数(基于图像大小)作为参数。这使我可以做渐进式 gan 的“渐进式”部分,而不必在每次增加图像大小时重写我的类。

***发电机。*发生器本质上是鉴别器的反向器。它将一个随机值向量作为噪声,并使用转置卷积层将噪声放大到图像中。我的图层越多,最终图像就越大。

测试网络

在我开始尝试生成抽象艺术之前,我首先要测试我的网络,以确保事情设置正确。为此,我将在另一个 GANs 项目的图像数据集上运行该网络,然后看看我是否会得到类似的结果。animeGAN 项目非常适合这个用例。在他们的项目中,他们使用了 143,000 张动漫人物的脸部图像来创建一个生成新角色的生成器。下载完他们的数据集后,我用 32 像素的目标图像大小运行了我的模型 100 个时期,瞧!

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

我的 GAN 模型的结果

结果实际上比我预期的要好。有了这些结果,我确信我的网络设置正确,我可以移动到我的数据集。

培养

现在是最后在艺术数据上训练模型的时候了。我的初始图像大小将是一个微薄的 32 像素。我将在这个尺寸下训练一段时间,之后我将添加一个额外的层到生成器和鉴别器,将图像尺寸加倍到 64。只是冲洗和重复,直到我得到一个令人满意的图像分辨率。但是我怎么知道什么时候该穿下一个尺码呢?围绕这个问题已经做了很多工作。我将采取简单的训练方法,直到我从 Google 获得 GPU 使用限制,然后我将手动检查结果。如果他们看起来需要更多时间,我会等一天(这样使用限制就解除了)再训练一轮。

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

你好黑暗,我的老朋友

***32 像素结果。*我的第一组结果看起来很棒。不仅没有模式崩溃的迹象,生成器甚至复制了一些图像包含一个框架。

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

以 32 尺寸生成的图像

***64 和 128 像素的结果。*64 像素的效果也相当不错;然而,当我将尺寸增加到 128 像素时,我开始在生成器结果中看到模式崩溃的迹象。

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

开始看到相同的输出

***256 像素结果。*当我得到这个尺寸的图像时,模式折叠已经将结果减少到只有大约 3 或 4 种类型的图像。我怀疑这可能与我有限的数据集有关。当我达到这个分辨率时,我只有大约 1000 张图像,有可能生成器只是在模仿集合中的一些图像。

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

模式崩溃

结论

最后,我的渐进式甘斯模型并没有取得很大进展。然而,我仍然惊讶于一个相当简单的网络能够创造出什么。当它生成动漫人脸或将其生成的一些画作放入相框时,令人震惊。我理解为什么人们认为 GANs 是近年来最伟大的机器学习突破之一。现在这只是我对 GANs 的 hello world 介绍,但我很可能会回来。

我用代码创造了动画。以下是方法。

原文:https://towardsdatascience.com/i-used-code-to-create-animation-heres-how-a7c7cd88fccd?source=collection_archive---------15-----------------------

在处理过程中执行简单的 Java 代码,创建有趣、娱乐和有用的动画。

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

KOBU 社Unsplash【1】上的照片。

目录

  1. 介绍
  2. 处理
  3. 编码
  4. 例子
  5. 摘要
  6. 参考

介绍

从我的文章中,你会学到两个要点:

1.处理软件平台是什么。

2.如何执行代码来创建一个娱乐性和美观的动画?

你不需要成为一个专业的程序员或软件开发人员来创建令人敬畏的可视化。在本教程和大纲中,有几种方法可以展示用一点点代码和一点点处理技巧可以做些什么。本文中的所有原则也可以应用于可视化数据科学计划。最终,你将能够呈现一个动人的动画;一张信息图、一幅有趣的漫画或一个具有强大视觉效果的故事。通过使用易于理解的可视化和动画,该工具可用于将复杂的数据科学结果解释为非技术用途。

本文中的例子具体展示了一艘帆船在海洋上穿过雷暴。类似于 Excel、Tableau 或 Google Data Studio 的图表、图形和地图也可以在处理中执行。要了解有关处理的更多信息,请阅读下面的内容,以及对所用代码的进一步解释和更多代码的参考资料。最后,如果你想跳到最后的动画,请点击视频。

处理

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

当您单击鼠标来激活灯光时,创建一个动作的示例代码。作者截图[2]。

Processing【3】是一个没有多少人听说过的软件,但是非常有价值,当然,使用起来也很有趣。它被认为是一个为独特的可视化编码的素描本。这些视觉效果甚至可以被认为是艺术,因为代码是由用户一行一行地编写的,创作的数量是无穷无尽的。主要由 Java 代码组成,用户创建相互继承的编程类和 voids,这将最终创建移动和动画的形状。

Processing 和 Java 的伟大之处在于,使用这个工具,你不需要成为一个专业的数据科学家或软件工程师。

因为它是开源的,这意味着有大量可用的信息和代码,你可以在他们的网站上找到模板、教程和想法,让你可以制作相同的可视化和动画。一旦您也习惯了它,并从中学习,您就可以添加自己的代码并创建个性化的输出来共享。

编码

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

欧文·史密斯Unsplash【4】上拍摄。

如果您对代码本身感兴趣,请阅读这里;如果没有,继续滚动,看看成品是什么样子,以及可用的模板和例子的信息。

闪电动画

我将在这里概述本文最终可视化中使用的一个类。闪电级是一个黄色的动画形状,将在这场暴雨中击中船只。它是一个包含对象的颜色、位置和形状坐标的类。如您所见,有几个顶点,它们是 X 和 Y 坐标的位置,最终充当闪电形状的轮廓。你用同样的颜色填充灯光轮廓,这样它看起来完全是实心的。下面的代码[6]创造了闪电的形状:

class Lightning {
color c;
float xpos;
float ypos;Lightning(color tempc, float tempxpos, float tempypos) {
c = tempc;
xpos = tempxpos;
ypos = tempypos;
}void display(){
beginShape();
noStroke();
fill(c);vertex(xpos+246, 0);
vertex(xpos+145, ypos-285);
vertex(xpos+172, ypos-269);
vertex(xpos+54, ypos-184);
vertex(xpos+89, ypos-178);
vertex(xpos, ypos);vertex(xpos+112, ypos-187);
vertex(xpos+94, ypos-191);
vertex(xpos+210, ypos-278);
vertex(xpos+189, ypos-291);
vertex(xpos+300, 0);
endShape(CLOSE);
endShape(CLOSE);
}
}

上面的代码指的是一个特定的形状,但是,有一个特定的模板或格式,你可以按照它来开发你的第一个简单的动画。通常的代码模板是:

  • 空设置()-形状的尺寸
  • void draw() —背景的颜色

还有其他几个独特的处理部分,比如鼠标点击,这意味着当你点击鼠标时,这个 X 动画就会出现。

例子

为了找到大量的例子来练习,OpenProcessing 在他们的网站上编辑了一个独特的列表。

这个代码【6】是用来创建视频中动画的一些代码。它非常全面,但对于学习如何包含不同的颜色、形状和动画是一种有益的方式。

最终产品。下面是动画[7]。执行代码后,或’击中 play ',帆船将在暴雨中开始移动,随后由于雷击在船上造成一些损坏,并将继续在水面上向右移动,也变得更靠近移动的风车:

加工最终的动画。作者视频[7]。

摘要

起初,处理看起来令人生畏,但是通过使用代码样本、示例和教程,您可以学习制作几乎任何您想要的动画。无论是抽象艺术、图表、类似漫画的动画,还是在暴风雨中航行的船只,处理都允许用户表达他们的创造力。像 Tableau 这样的工具是可视化的领跑者,这个软件被证明是一个独特的技能集,你可以将其作为简历、教育或工作的一部分,特别是作为一名数据科学家甚至软件工程师。我希望你觉得这篇文章有趣,谢谢你的阅读!如有疑问,欢迎在下方评论。

参考

[1]照片由 KOBU 机构Unsplash(2018)上拍摄

[2] M.Przybyla,处理截屏,(2020 年)

[3] 加工,(2020)

[4]Irvan Smith 在 Unsplash 上拍摄的照片,(2018)

[5] 打开处理,(2020)

[6] M.Przybyla,要点,(2020)

[7] M.Przybyla,动画,(2020)

我研究了 500 多个数据科学面试问题

原文:https://towardsdatascience.com/i-worked-through-500-data-science-interview-questions-51e2e4dead9d?source=collection_archive---------9-----------------------

以下是我一路走来学到的东西

感谢一群专注的数据科学训练营毕业生、Zoom 和万维网,我已经听了太多的数据科学面试实践问题,并回答了太多的问题。过去几个月的实践教会了我很多东西,不仅是数据科学,还有自信、努力工作以及通过网络建立关系的力量。

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

绿色变色龙Unsplash 上的照片

我将从数据科学的东西开始,因为这是一个数据科学博客,这也是你们可能在这里的原因。

我就拿“什么是数据科学?”请给我 200 美元。

在参加数据科学训练营时,我觉得自己已经很好地掌握了大多数主题。但是,当回答关于关键主题和模型的概念性问题时,我意识到我的一些知识很肤浅。

在博学的同事面前当场回答概念问题非常有价值。我从大学就知道,和别人一起学习是一个好主意,因为当你独自一人时,很容易说服自己知道主题,但回答朋友的问题将测试和巩固你的知识。

我建议找一个已经在这个领域的人或者也想进入数据科学领域的人,解决一系列概念性问题,为面试做好准备,并加强你的数据科学知识和理解。以下是我认为是“经典”概念问题的一些问题的列表,基于在不同网站上收集的 10 多个问题。

  • 定义机器学习。
  • 什么是合奏模型?
  • 解释决策树模型的工作原理。
  • 数据科学中的偏倚/方差权衡是什么?
  • 解释交叉验证。为什么用?
  • 什么是第一类和第二类错误?举例说明。
  • 什么是 PCA?你什么时候使用它?
  • 如何处理数据中的缺失值?
  • 请向我介绍探索性数据分析的一般步骤。在项目的这个阶段,你在寻找什么?
  • 解释离散变量和连续变量。
  • 解释描述性、预测性和规范性模型之间的区别。
  • 有监督和无监督的机器学习有什么区别?
  • 解释过拟合和欠拟合。你如何减少这些?

你对这些问题的回答是否感到不确定?是时候找个朋友了!或许是教科书,或者更可能是谷歌。我不会给出我会给出的答案——也许我会在以后的文章中给出——因为我发现寻找这些答案、与他人讨论和辩论并自己得出答案是一个有价值的学习过程。

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

JESHOOTS.COMUnsplash 上拍照

互联网上有足够多的编码问题和挑战,足以让你忙上很长时间。对于数据科学家来说,精通编程非常重要。但是,在我看来,让数据科学家有价值的主要是他们对该领域的知识以及应用这些知识的能力。你可以随时参加 Python 速成班,温习 R,或者谷歌一下 95%置信区间的公式。但是,如果你对基本的数据科学概念没有信心,当你接手一个项目时,你怎么知道从哪里开始呢?

如果你正在寻找面试问题,我已经在这篇文章的结尾包括链接。如果你想知道成百上千的问题还教会了我什么,请继续阅读。

人际网络和全面发展的重要性

通过一位家庭成员,我与我在本文开头提到的数据科学训练营毕业生群体建立了联系。他们承诺每周三次在 Zoom 上回答实践数据科学面试问题,每次一小时。(印象深刻吧?)

起初,很容易说服自己不要加入他们的 Zoom 电话。我的新兵训练营还没有结束,有一半的时间我既不理解问题也不理解他们的答案。我觉得我会搞砸一个简单的答案,或者根本无法做出贡献。

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

照片由艾莉Unsplash 拍摄

我过去也有过类似的感受。这很难,很不舒服,而且好处通常不会立即(或永远)显现出来。但是,这些变焦电话教会了我坚持下去的价值!这些电话中的其他有抱负的数据科学家已经成为我的惊人资源,最重要的是,他们已经成为朋友。我认为,与仅仅获得一张名片或 LinkedIn 联系相比,互利互惠、更像是建立关系的人际关系网,会让你不那么疲惫。

我了解到我可以为数据科学面试做好充分准备,但实际上获得面试是另一个更重要的挑战,我没有为此做好充分准备。

所有这些最终成为我在过去几个月里学到的一大课:全面发展的重要性。

我听说过数据科学独角兽这个词,用来描述雇主想要一个几乎可以做任何事情的数据科学家的职位描述。虽然这种期望是不现实的,但成为一名数据科学家有很多不同的要求。因此,当你申请工作时,注重培养你在所有这些方面的技能是很重要的!我知道我需要花时间拓宽我的编码知识,加深我对统计和数学的理解,学习更多关于数据科学的概念,并练习将这些东西传达给更关注业务的受众。

这都需要时间。

我通常是一个没有耐心的人。但是,你不能指望自己在短短几个月内深入了解所有这些领域!这没关系。我的新兵训练营经历从 5 个月的目标变成了总共 7 个月,我很高兴我花时间慢下来,真正理解事情,并通过写文章和在 LinkedIn 上变得更加活跃来建立网络。

为了你好,我希望你已经是数据科学独角兽了。但是,因为我自己还没有在野外见过,所以我希望这篇文章对您成为数据科学家有所帮助。

现在,对于那些练习题链接:

* [## 109 个常见的数据科学面试问题

准备面试并不容易-数据科学面试问题存在很大的不确定性…

www.springboard.com](https://www.springboard.com/blog/data-science-interview-questions/) [## 2020 年 100+数据科学面试问答| Edureka

在这个数据科学面试问题博客中,我将向您介绍数据方面最常见的问题…

www.edureka.co](https://www.edureka.co/blog/interview-questions/data-science-interview-questions/) [## 30 大数据科学面试问题。

数据科学面试问题

towardsdatascience.com](/top-30-data-science-interview-questions-7dd9a96d3f5c) [## 超过 100 个数据科学家面试问题和答案!

来自亚马逊、谷歌、脸书、微软等公司的面试问题!

towardsdatascience.com](/over-100-data-scientist-interview-questions-and-answers-c5a66186769a) [## Top 210+机器学习面试问答 2020[更新]

如果你正在搜索机器学习面试问题和答案,那么你就在正确的地方。我们的…

www.gangboard.com](https://www.gangboard.com/blog/machine-learning-interview-questions-and-answers)

附注:我很抱歉,其中有些问题或答案令人困惑和/或写得不好。不过总体来说都是不错的资源:)

祝你好运,学习愉快!

要阅读我关于走向数据科学的其他文章,请点击这里。*

Ibis:用于开发和生产的 Python 数据分析框架

原文:https://towardsdatascience.com/ibis-a-framework-to-tie-together-development-and-production-code-588d05e07d11?source=collection_archive---------32-----------------------

Ibis 通过统一的 API 将开发和生产阶段结合在一起。

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

亚历克斯·维根Unsplash 上拍摄的照片

训练完你的机器学习模型后,你想投入生产。一旦您的模型被提供并准备好进行预测,您可能需要在将收到的数据发送到模型之前对其进行预处理。这可能是某种类型的要素工程或数据清理,但无论是什么,通常都会使用标准数据框来完成,一次一个样本。

然而,当您仍处于开发阶段时,您正在处理更大的数据,可能有数百万个训练样本或更多。在这种情况下,使用常规数据帧(例如熊猫)会太慢。所以你求助于其他工具,比如 Spark,BigQuery 等。

这就存在一个潜在的问题:这些工具有不同的 API。对于 Spark,它将是 big Spark 的 DataFrame API 对于 BigQuery,应该是 SQL。诸如此类。要点是:这段代码不同于您将在生产中使用的代码。从长远来看,维护两个不同的代码库并不是一个好主意。

有解决这一困境的办法。例如,使用谷歌的数据流,它可以完全消除它,因为数据流可以在训练和预测时使用。另一个解决方案涉及 TensorFlow Extended ,它的创建正是为了解决深度学习应用的这个问题。或者,您可以尝试尽可能多地提取核心功能,并使其可由定型代码和预测代码重用。

这些解决方案都不完美,尽管 Ibis 也不完美,但这是一个有趣的提议,因为它从另一个角度处理问题,因此在这个领域非常独特。

Ibis 提议的是一个用于数据操作的 api,以及一个核心引擎,它将根据后端把这个高级 api 翻译成低级代码。因此,如果我们使用一个 pandas 后端,Ibis 将翻译成 pandas python 代码。如果我们使用一个 BigQuery 后端,Ibis 将转换成 SQL。用户使用 Ibis api 编写代码,只是在训练和预测之间交换后端。

目前,Ibis 支持相当多的后端:pandas、Spark、BigQuery、PostgreSQL、sqlite 等等。在项目健康方面,有一些正在进行的提交和问题,尽管它不是有史以来最活跃的项目。熊猫的创造者韦斯·麦金尼几年前是一名投稿人,但现在不是了。

让我们看一个具体的例子,因为我是 BigQuery 的粉丝,所以我就从它开始。我将使用stackoverflow公共数据集,特别是posts_questions表。

安装必备组件:

pip install ibis-framework 
pip install ibis-framework[bigquery]

为了连接到 BigQuery,我使用一个凭证文件:

from google.cloud import bigquery 
from google.oauth2.service_account import Credentials credentials = Credentials.from_service_account_file('path_to_file') client = bigquery.Client(credentials=credentials,
                         project=credentials.project_id )

然后连接到表:

import ibis conn = ibis.bigquery.connect(project_id=credentials.project_id,
                             credentials=credentials ) table = conn.table('posts_questions', 
                   database='bigquery-public-data.stackoverflow')

我们可以print(table):

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

现在,我们可以进行一些简单的数据操作(例如,创建新列):

projection = table['title', 'answer_count', 'creation_date'] projection = projection.mutate(
          year=projection.creation_date.year(),
          javascript=projection.title.re_search('(?i)java.?script'),
          answered=projection.answer_count > 0)

此时,实际上没有从 BigQuery 中检索到任何行。Ibis 只构建了内部执行图。

要实际执行查询:

res = projection.head().execute() 
res

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

您会注意到,在上面的代码中,我只要求我的投影的头部,所以我只得到 5 行返回,但是我可以很容易地在整个表上运行查询。为了好玩,我们可以编译我们的投影,并查看 Ibis 为我们生成的代码:

ibis.bigquery.compile(projection)

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

漂亮!

再过几个月,我们就可以投入生产了。这意味着,我们需要对小熊猫数据帧进行完全相同的预处理。

没问题:

import pandas as pd 
from datetime import datetime df_local = pd.DataFrame({
    'title': ['Matlab Function block with Design Verifier'],  
    'answer_count': [1],
    'creation_date': [datetime.now()]
})

Ibis 连接到本地数据框的方式如下:

conn = ibis.pandas.connect({'data': df_local}) 
projection = conn.table('data')

下面是我们在 BigQuery 上使用的几乎完全相同的代码:

projection = projection.mutate(
    year=projection.creation_date.year(),
    javascript=projection.title.re_search('(?i)java.?script'),   
    answered=projection.answer_count > 0) projection.execute()

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

美妙之处在于:我们没有被 BigQuery 所困,甚至没有被熊猫所困。例如,我们可以轻松地切换 sqlite(在磁盘上和/或内存中)或 Spark,而不需要对我们的代码库做任何修改。最后,值得一提的是,Ibis 支持所有典型的数据处理操作:聚合、过滤、连接、应用用户定义的函数等。

结论:Ibis 是一个非常有趣的项目,值得一看。我希望看到更多关于它的活动,如果时间允许的话,也可以做出贡献,但同时,我会毫不犹豫地使用它,或者向任何寻求统一培训和生产数据处理代码的人推荐它。

感谢阅读!

链接:

Coursera 上的 IBM 数据科学专业证书:工作准备好了吗?

原文:https://towardsdatascience.com/ibm-data-science-professional-certificate-on-coursera-job-ready-a06a08c14341?source=collection_archive---------7-----------------------

来自之前认证的数据学生的诚实评论

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

Nikolay Trebukhin 在 Unsplash 上拍摄的照片

介绍

去年,我参加并完成了 9 门主要课程,这些课程组成了 IBM 在 Coursera 上提供的IBM 数据科学专业证书 (此处链接到证书)。

在过去几年中,我一直想证明我的数据科学技能,因此当我发现 IBM 在著名的电子学习平台上发布了一个大规模目录时,我抓住了参加这一系列课程的机会,我发现自己在其他课程和专业中使用了很多目录,其中一些我也在 Medium 上回顾过。

[## Coursera 的 GCP 专业证书数据工程:更好的内容还是更好的营销?

来自最近认证的数据学生的诚实评论

towardsdatascience.com](/courseras-data-engineering-with-gcp-professional-certificate-better-content-or-better-marketing-6159bc95e7f5)

总体体验

参加证书考试无疑是一次总体上积极的经历,让我对现代 Python 数据科学堆栈的很大一部分有了坚实的概念理解,并让我能够接触到 capstone 项目,这些项目让你远离更多的理论讲座。

我特别欣赏课程系列的广泛和模块化方法,它从植根于数据科学方法的理论基础开始,然后引导您进入更实用的编码课程和顶点项目。同时,这些课程还向您介绍了如何使用 IBM Watson Studio 等 IBM 云资源,以便您学习如何将 IBM 产品集成到您的工作流中。

我欣赏的证书的另一个方面是,它的整个课程结构就像一个项目,以一种平稳的方式带你从一知半解到项目交付,不会让你觉得太累或太无聊。因此,我经历了各种主题和组件之间的平稳过渡。

为了让您自己判断,我在下面总结了如果您决定参加 Coursera 上的 IBM 数据科学专业证书课程将会发生什么,以便您能够决定是否继续进行时间和投资(29/月订阅,直到完成-价格可能会因您所在的位置而异

结构、课程主题和技术堆栈

IBM 的数据科学专业证书由 9 门课程组成。

指示性总时长为 10 个月,每周 5 小时。如果你热衷于花固定的时间学习和浏览资料,你绝对可以把它缩短到几个月,尤其是如果这不是你的第一个数据科学系列课程。

课程列表如下:

  1. 什么是数据科学?
  2. 数据科学工具
  3. 数据科学方法论
  4. 数据科学的 Python 和 AI
  5. 数据科学的数据库和 SQL
  6. 数据分析用 Python
  7. 用 Python 实现数据可视化
  8. 用 Python 进行机器学习
  9. 应用数据科学顶点

遵循并完成本系列课程没有先决条件,这将有助于解决以下问题:

工具: Jupyter / JupyterLab、GitHub、R Studio 和 Watson Studio

: Pandas,NumPy,Matplotlib,Seaborn,Folium,ipython-sql,Scikit-learn,ScipPy 等。

**项目:**随机相册生成器,预测房价,最佳分类器模型,邻里之战

赞成者

  1. 参与学习体验

我从不厌倦听课,这是一个很大的优势,尤其是如果你的目标是完成专业证书的全部课程。

视频讲座和实践很好地结合在一起,而且传达材料的方法和信息感觉非常自然和流畅,让你想从一个讲座跳到另一个讲座,以了解更多信息,从而建立在以前看过的材料上。

学习体验当然是主观的,但将这些课程与我参加的其他课程相比,我发现在这种情况下,内容的交付更有效,这使我坚持到最后。

教师都是 IBM 数据科学从业者,这严重影响了该系列对实用性的关注,使得可能纯粹的学术教学方法有点落后。

在电子学习行业中,在线课程的完成率很低,找到能激励你并激发你想知道更多并因此浏览所有资料的课程是一项非常难得的壮举,因此,这个 IBM 专业证书绝对值得称赞。

2。树立信心开始个人项目

该证书强调的实用方法在最终的 Capstone 项目中得到最好的体现,该项目围绕使用 RESTFUL APIs 来获取地理位置数据,然后在聚类算法中使用。

虽然自然会有一些学生参与,但以一个项目结束课程系列确实很好,因为好奇的学生希望围绕新获得的数据科学技能和个人兴趣的交集探索更多项目工作,这将不可避免地导致更多基于项目的学习。

在这方面,证书当然让学生处于一种非常“动手”的心态,这肯定是值得赞赏的。

3。更高级课程的精彩介绍

我喜欢把这门课看作是一个很好的“”使学生能够进入更深层次的训练领域。它教你足够多的 Python、SQL 和数据科学方法,让你继续学习。

尤其是在 Coursera 上,他说学习的土壤非常肥沃,可以引导你走上各种有趣的道路。

我推荐的后续课程/专业是:

  • 机器学习(作者 Andrew NG) :常青树经典必备(即使是基于 MATLAB/Octave)→为了透明起见,我在这里链接了我的课程完成证书**
  • IBM AI 工程专业证书:IBM 提供的另一系列课程,这次更侧重于围绕深度学习的实际应用。我清单上的下一个。
  • 深度学习专业化 : 由 DeepLearning.ai 提供,旨在覆盖深度学习算法和应用的所有重要方面,具有完善的理论方法。一般建议在尝试这一项之前,先完成 机器学习(Andrew NG)

4。入门级数据科学职位大卖

总的来说,这是申请入门级数据科学/数据分析职位的一个很好的证书,特别是如果你正在重新掌握技能,并在来自邻近和相关领域的数据科学浪潮中跳跃。

展示您的证书表明您对学习和实践您的技能非常感兴趣,以便作为初级数据科学家从业者迈出第一步,为各种公司和项目增加价值。

我对这门课程的问题是,这方面的定位有点混乱。

IBM 承诺他们将使你达到数据科学的“熟练程度”,我认为这更像是一种营销策略(如果不是简单的夸大的话),而不是一种现实的学生期望,因为我不会认为自己完全精通这样一个广泛定义的专业领域。

因此,我会小心地为自己定位更高级的数据科学职位,并将更多地关注利用此类证书来构建基础工具包和该领域的入门知识,然后通过进一步的培训和在职学习来补充。

坏处

  1. 点亮统计和数学

虽然这是一门实践性很强的课程,但我肯定会对一些对数据科学至关重要的基本构件的背景信息有更多的了解,例如基本的统计概念和定理,以及线性代数变换和推导。

相反,该系列更侧重于用入门级和开箱即用的数据科学工具包武装学生,而有时会掩盖一些更好奇的学生可能想要了解而不是想当然的理论方面。

从某种意义上说,这些课程旨在向您展示数据科学概念和方法背后的“是什么”,而不一定总是“为什么”。

虽然不可能要求一份包罗万象的证书,但对一些基本直觉的一些提示肯定会受到赞赏。

2。对 IBM 云资源的依赖

作为该系列的提供者,IBM 投入了大量时间来利用 IBM 资源,这些资源是 IBM 云产品套件的一部分,比如 Watson studio。

因此,寻找更开放源代码的学习方法的学生可能会不满意,因为学生依赖于采用 IBM 套件来完成证书。

这是一般的(营销?)组织采用的实践,这些组织建立了向公众开放的学习计划,同时利用屏幕时间达到提高产品利用率的次要目标。这方面肯定是超越了整体伟大的课程质量,因此,这不能被认为是一个重大故障。

至少在撰写本文时,IBM 可能会遇到的问题是,学生可能希望将学习数据科学技能与市场上更广泛采用的其他云平台(GCP、AWS、Azure)结合起来,以最大化即时技能平台的适用性。

定论

总而言之,如果您符合以下条件,我仍然建议您参加本课程:

  1. 一位卓有成就的 BI 分析师,希望在您的分析职业生涯中迈出下一步
  2. 希望获得认证并准备/申请入门级数据科学职位
  3. 寻找现代数据科学堆栈和项目方法的广泛概述,同时不要只在 Jupyter 笔记本上工作。

如果您符合以下条件,我会而不是仍然推荐您参加本课程:

  • 希望在完成 Coursera 的专业证书后成为一名熟练的数据科学家
  • 寻找对最先进的机器学习模型的深入研究,尤其是在深度学习领域。更多的深度学习和神经网络课程可能会证明对你更有效。

访问我的免费数据科学资源清单 这里

** [## 通过我的推荐链接加入 Medium-Edoardo Romani

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

edo-romani1.medium.com](https://edo-romani1.medium.com/membership)**

为了追求正义和种族平等,IBM 不再提供面部识别技术。

原文:https://towardsdatascience.com/ibm-no-longer-offers-facial-recognition-technology-in-pursuit-of-justice-and-racial-equity-134aca27c2a?source=collection_archive---------62-----------------------

机器反映了训练它们的人的“编码凝视”——优先权、偏好和偏见。

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

鸣谢:@ Cooper _ baumgartnerviaUnsplash

“我们认为,现在是时候就国内执法机构是否应该以及如何使用面部识别技术展开全国性对话了。”

—阿文德·克里斯纳(IBM 首席执行官)

IBM 将不再提供、开发或研究通用面部识别技术。首席执行官 Arvind Krishna 向国会发表了关于有偏见的系统的内在危险的演讲,引用了对“大规模监控、种族貌相[和]侵犯基本人权和自由”的担忧。

这种奥威尔式的技术需要改革。以人工智能为燃料的自动化有助于确定谁被解雇、雇用、晋升、获得贷款或保险,甚至一个人要在监狱里呆多久。州和地方警察部门有他们自己的先进的面部识别系统,这些系统在很大程度上是不受监管的,并且已经被证明会对少数种族和少数民族造成不成比例的影响。

截至 2016 年,每两个美国成年人中就有一个在执法人脸识别网络中。至少有四分之一的州或地方警察局可以选择通过他们或其他机构的系统进行人脸识别搜索,这影响了美国 1.17 亿人。这些系统并不是天生中立的:它们反映了那些有能力塑造人工智能的人的“优先事项、偏好和偏见——编码的目光”。

机器受到人类视觉的偏见。与其他人相比,算法在分析黑色和棕色身体时表现更差,并且错误识别 POC 的可能性高达 100 倍。根据麻省理工学院和斯坦福大学发表的一项研究,这些偏见的存在是因为算法被输入了训练数据超过 77%的男性和 83%的白人。当面部识别程序搜索面部照片数据库时,POC(特别是年轻的黑人男性)在可能的匹配中出现过多。即使算法被输入公平的数据来纠正有偏见的训练,现有刑事司法系统中面部识别的 使用可能只会复制黑人和棕色人种社区的过度监管

2018 年初,IBM 软件在分析性别和肤色方面的固有偏见受到了严格审查。《性别阴影:商业性别分类中的交叉准确性差异》一书的作者发现,在分析包含深色皮肤女性的图像时,存在较高的误差,而对浅色皮肤男性的分析结果最为准确。在多年试图提高准确性和减少边际结果的偏差后,IBM 决定终止该软件,这样州和联邦机构就不能再滥用该技术了。私营公司终于开始采取措施把人放在利润之上。但是这就够了吗?

高级记分卡告知普通消费者具体的州和联邦机构表现,但忽略了关于种族偏见的具体指标。在分配和获利之前,我们需要更好地理解人工智能如何促成系统性种族主义和偏见的循环。我敦促你们在发布算法或软件系统之前,考虑一下新兴技术是如何反映编码凝视的。

“我们冒着失去民权运动和妇女运动在机器中立的错误假设下取得的成果的风险。我们必须要求增加透明度和问责制。”

性别差异

你能做些什么来保持消息灵通?

  • 跟随米米·奥诺哈,布鲁克林的艺术家、研究员和技术专家调查数据收集的社会含义。她的工作使用文本、代码、性能和对象来探索缺失的数据以及人们被抽象、表现和分类的方式。
  • 与半机械人妈妈(又名戴安娜·努塞拉)保持同步。她是一名组织者和艺术家,她的工作重点是开发受欢迎的教育材料,使社区能够使用媒体和技术来调查、阐明和开发应对挑战的有远见的解决方案。她的音乐和激光表演创造了连接故事、振奋灵魂和提升我们集体科技意识的机会。
  • 看看这篇关于人工智能的文章。
  • 考虑向为未来而战捐款,这是一个非营利性的草根倡导组织,旨在组织禁止不公正的面部识别技术。

阅读一些技术文献:

感谢阅读!我真的很想听到你的反馈😃。

ICLR 2020: NLP 亮点

原文:https://towardsdatascience.com/iclr-2020-nlp-highlights-511deb99b967?source=collection_archive---------25-----------------------

ICLR 2020 概述,重点关注自然语言处理(NLP),尤其是变形金刚和 BERT 变体。

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

作者图片

这篇文章是我关于 ICLR 2020 的一些亮点。因为我目前的研究是自然语言处理(NLP),所以这篇文章将重点关注这一领域。但是,计算机视觉、量子启发算法、通用深度学习方法等。也会提到。

这也是我在 Medium 上的第一篇帖子,所以我也很乐意联系并听取社区的反馈!

1.关于 ICLR 2020

从主网站https://iclr.cc/:

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

https://iclr.cc/ ICLR 标志(来源:)

学习表征国际会议(ICLR) 是专业人士的顶级聚会,致力于促进人工智能的表征学习分支,但通常被称为深度学习

ICLR 是顶级的国际人工智能会议之一,与 NIPS 和 ICML 齐名。其中一个区别是,ICLR 的主要关注点是深度学习。

参与者可以来自许多背景,“从 学术和工业研究人员,到企业家和工程师,到研究生和博士后。”

审查过程是双盲和开放式审查,即作者和审查者在审查过程中互不认识,所有审查和作者的回应都可以公开查看。

所有资料均可在 ICLR 虚拟页面上访问

带有 ICLR 2020 代码的文件

2.技术趋势

我的主要兴趣是自然语言处理(NLP),所以我将把重点放在这个领域。

答:热门话题:

NLP 的许多其他主题我在这里没有涉及,所以请到网站来阅读和发现这些主题。

b .新出现的议题:

我发现会议中出现了几个话题:

3.思想

今年是 ICLR 第一次以虚拟方式举行,从我的角度来看,组织者做了出色的工作:接受论文的搜索引擎,论文相似性的可视化,作者和参与者的聊天论坛,缩放室等。

我有机会直接询问许多作者,也参与了 NLP 和 Huggingface(一个流行的 NLP 框架)研究人员的公共论坛。我也有机会参加公司的赞助商聊天。

Yann LeCun 和 Yoshua Bengio 关于深度学习方向的最后一次演讲也非常有见地,例如如何将 NLP 中的自我监督学习成功应用于计算机视觉,他们如何看待量子算法,神经科学思想也将是重要的。他们如何走到今天的故事也很鼓舞人心。

你可以在 VentureBeat 上读到其中一篇总结。

4.详情:精选论文集锦:

【多语伯特跨语言能力实证研究】

多语言模型的一个流行假设是,由于语言之间的词汇重叠,它们学习得很好。在本文中,作者发现“语言之间的词汇重叠在跨语言成功中起着微不足道的作用,而网络的深度是其中不可或缺的一部分。”(Karthikeyan 等人,2020 年)

ELECTRA:预训练文本编码器作为鉴别器而不是生成器

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

来源: ELECTRA:预训练文本编码器作为鉴别器而不是生成器

这篇论文为计算资源少的实体预先训练他们自己的语言模型打开了大门。特别是,作者“在一个 GPU 上训练了一个模型 4 天,在 GLUE 自然语言理解基准测试中,它的表现超过了 GPT(使用 30 倍以上的计算进行训练)。”(克拉克等人,2020 年)

  • 代码可在 Github 上获得。
  • ELECTRA 型号可用于支撑面
  • Github 上有一个针对越南人的培训前电子小程序项目

关于自我注意与卷积层的关系

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

来源: 关于自我注意与卷积层的关系

在 NLP 任务中成功地用基于注意力的模型取代了 RNN 之后,研究人员现在正在探索他们是否可以在卷积层和计算机视觉任务中做同样的事情。在这篇论文中,作者“证明了具有足够数量的头的多头自我关注层至少与任何卷积层一样具有表达能力。我们的数值实验表明,自我关注层与 CNN 层一样关注像素网格模式,这证实了我们的分析。(Cordornnier 等人,2019 年)

  • 该代码可在 Github 上获得

StructBERT:将语言结构融入深度语言理解的前期训练

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

来源: StructBERT:将语言结构融入深度语言理解的前期训练

在本文中,作者添加了两个额外的预训练任务,这些任务“在单词和句子级别利用语言结构”,并在 GLUE benchmark 中取得了 SOTA 结果。(王等,2019)

变压器是序列间函数的通用近似器吗?

本文更多的是在理论方面。在这篇论文中,作者“证明了变换器模型可以普遍地逼近紧域上任意连续的序列间函数。”他们还证明了“固定宽度的自我注意层可以计算输入序列的上下文映射,在变压器的通用近似属性中起着关键作用。”(云等,2019)

关于我

我是一名 AI 工程师和数据工程师,专注于研究最先进的 AI 解决方案和构建机器学习系统。你可以在 LinkedIn 上找到我。

参考

瓦斯瓦尼,a。新泽西州沙泽尔;新泽西州帕马尔;Uszkoreit,j;琼斯湖;戈麦斯。凯撒大帝。;和 Polosukhin,I. 2017。你需要的只是关注。神经信息处理系统进展,5998–6008。

德夫林,j。张明伟;李,k。以及图塔诺瓦,K. 2018。Bert:用于语言理解的深度双向转换器的预训练。arXiv 预印本 arXiv:1810.04805。

变压器是序列到序列函数的通用近似器吗?." arXiv 预印本 arXiv:1912.10077 (2019)。

《论变形金刚中的可识别性》(2020).

石,,等,“变压器的鲁棒性验证”arXiv 预印本 arXiv:2002.06622 (2020)。

科多尼尔、让·巴普蒂斯特、安德里亚斯·洛卡斯和马丁·贾吉。“自我注意和卷积层的关系.” arXiv 预印本 arXiv:1911.03584 (2019)。

把语言结构融入深层语言理解的前训练。 arXiv 预印本 arXiv:1908.04577 (2019)。

Lee,Cheolhyoung,Kyunghyun Cho 和 Wanmo Kang。“混合:微调大规模预训练语言模型的有效正则化.” arXiv 预印本 arXiv:1909.11299 (2019)。

吴,,等。〈长短距注意的简装变压器〉。arXiv 预印本:2004.11886 (2020)。

兰,等译,《阿尔伯特:一个用于自我监督学习语言表征的简易伯特》 arXiv 预印本 arXiv:1909.11942 (2019)。

尤,杨,等《面向深度学习的大批量优化:76 分钟训练 bert》国际学习代表会议。2019.

基塔耶夫、尼基塔、祖卡斯·凯泽和安塞姆·列夫斯卡娅。“改革家:高效的变压器.” arXiv 预印本 arXiv:2001.04451 (2020)。

伊莱克特:预先训练文本编码器作为鉴别器而不是生成器 arXiv 预印本 arXiv:2003.10555 (2020)。

《用于长程序列模拟的压缩变压器》 arXiv 预印本 arXiv:1911.05507 (2019)。

范、安吉拉、爱德华·格雷夫和阿曼德·朱林。“通过结构化压差按需降低变压器深度.” arXiv 预印本 arXiv:1909.11556 (2019)。

Lee,Cheolhyoung,Kyunghyun Cho 和 Wanmo Kang。“混合:微调大规模预训练语言模型的有效正则化.” arXiv 预印本 arXiv:1909.11299 (2019)。

梅利斯、加博尔、托马什·科奇斯克和菲尔·布伦松。“莫格里弗·伊斯特姆” arXiv 预印本 arXiv:1909.01792 (2019)。

Orhan、A. Emin 和 Xaq Pitkow。“用顺序非正常动力学改进循环神经网络的记忆。” arXiv 预印本 arXiv:1905.13715 (2019)。

涂、、何凤翔、陶大成。"理解递归神经网络中的泛化."国际学习代表会议。2019

多语种伯特的跨语言能力:实证研究。国际学习代表会议。2020.

加博尔·贝伦德。“大规模多语言稀疏单词表示.”(2020 年):Azonosító-2582。

曹、史蒂文、尼基塔·基塔耶夫和丹·克莱因。"上下文单词表示的多语言对齐."arXiv 预印本:2002.03518 (2020)。

王,子瑞,等。“跨语言对齐与联合训练:一个比较研究和一个简单的统一框架。” arXiv 预印本 arXiv:1910.04708 (2019)。

帕纳西、阿里阿克巴、塞兰·萨伊迪和汤姆·阿罗兹。" word2ket:受量子纠缠启发的节省空间的单词嵌入." arXiv 预印本 arXiv:1911.04975 (2019)。

克伦尼迪斯,约尔达尼,乔纳斯·兰德曼和阿努帕姆·普拉卡什。“深度卷积神经网络的量子算法.” arXiv 预印本 arXiv:1911.01117 (2019)。

苏,,等。〈视觉语言表征的预训练〉。 arXiv 预印本 arXiv:1908.08530 (2019)。

陈、于、吴和穆罕默德扎基。“基于强化学习的自然问句生成图序列模型.” arXiv 预印本 arXiv:1908.04942 (2019)。

《逻辑和$ 2 $-单纯变压器》 arXiv 预印本 arXiv:1909.00668 (2019)。

张,马修·顺时,和布拉德利·斯塔迪。“通过雅可比谱评估对递归神经网络进行一次性剪枝.” arXiv 预印本 arXiv:1912.00120 (2019)。

余,郝楠,等。〈用奖励和多种语言玩彩票:RL 和 NLP 中的彩票〉 arXiv 预印本 arXiv:1906.02768 (2019)。

数据科学的理想 Python 环境设置

原文:https://towardsdatascience.com/ideal-python-environment-setup-for-data-science-cdb03a447de8?source=collection_archive---------10-----------------------

设置 Python 环境以开始数据科学项目的指南。

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

视频教程带你完成这个过程。

手头有一个数据科学项目要开始吗?不确定什么是合适的 Python 机构来平滑这个过程?你不需要再深入,因为这篇文章将解决数据科学环境中的所有问题,让你在本地工作。我们将介绍在您开始从这些数据中抽离出来之前,您可能需要安装的工具、软件包或软件。

您需要开始项目的三个要素是:

  1. 在你的机器上安装一个 UNIX shell 并熟悉它。
  2. Anaconda
  3. Git 和 GitHub — 使用最令人惊叹的版本控制系统来跟踪变更,并优化协作开发,从而对您的项目进行版本控制。

1。UNIX shell

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

数据科学家或软件工程师几乎每天都在使用 UNIX shell 来完成他们过多的分析任务。

UNIX shell 对数据科学家的重要性:

在某个阶段之后,你的项目将不得不投入生产。你将在一个云计算平台上工作,比如谷歌云平台或亚马逊网络服务。几乎所有的平台都是基于 Linux 的,并且要求您使用 UNIX shell。这里有一个关于 shell 脚本的备忘单

我们将使用命令行界面来安装 anaconda、git 并执行其他操作,如启动 jupyter notebook 本地服务器、提交和推送我们对远程存储库的更改。

**MacOS 用户:**您的系统已经有了一个 Unix shell(bash)。如果没有,可以用自制安装。

Windows 用户: Windows 没有附带 UNIX shell。你可以安装 Cygwin ,它提供了一系列 GNU 和开源工具以及 Windows 上的其他功能。

2.安装 Python 和 Anaconda

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

蟒蛇标志

要设置您的 python 环境,您首先需要在您的机器上安装一个 python。有各种 python 发行版可用,我们需要最适合数据科学的版本。Anaconda 附带了自己的 Python 发行版,将与它一起安装。

为什么是蟒蛇?

数据科学通常需要你使用许多科学软件包,如 scipy 和 numpy,数据操作软件包,如 pandas 和 IDEs,以及交互式 Jupyter Notebook
Anaconda 自带 conda(用于命令行界面)和 Navigator (用于图形用户界面)。它是所有这些包版本和依赖项的完美管理器。

现在,你不需要担心任何 python 包,大多数都是预装的,如果你想安装一个新的包,你可以简单地通过使用 condapip 来完成。

以下是 Anacondan for MAC OS 安装的分步指南:

[## 在 macOS 上安装- Anaconda 文档

您可以使用图形化安装程序(“向导”)或命令行(“手动”)指令来安装 Anaconda

docs.anaconda.com](https://docs.anaconda.com/anaconda/install/mac-os/)

为 Windows 安装 Anaconda。

为 Linux 安装 Anaconda。

【Conda 环境管理

随着您的进步,您会发现自己正在处理多个应用程序/项目。这些应用程序将依赖于不同版本的 Python/包。您将与一个团队/合作伙伴一起工作,并且可能想要标准化配置,以便他们都能够运行项目。

在这种情况下,您需要创建和配置不同的环境。

Conda 帮助了我们,它允许我们创建包含文件、包及其依赖项的独立环境,这些环境与其他环境相隔离。

使用 conda 环境

  1. 使用 conda 创建一个名为dswh_env的新环境:
conda create --name dswh_env

您的环境现在已经创建,但是您现在还没有使用它。

2.使用或激活环境:

conda activate dswh_env

3.如果您想查看系统中的所有环境,请键入:

conda info --envs

4.要停用环境,请使用:

conda deactivate

3.安装 Git 和使用 GitHub

版本控制是程序员的福气,Git 是使用最广泛的版本控制系统。它允许我们跟踪我们的进展。我们有一个日志,记录了我们什么时候做了什么,并允许我们回到项目的前一个状态。

GitHub 是一个基于云的代码托管服务,可以帮助你跟踪你的源代码历史。如果我们想在本地跟踪我们的项目,我们不需要使用 GitHub。但是,如果你正在与一个团队合作,或者如果你想展示你的项目和技能,你可以通过把你的项目以存储库的形式发布出来,在 GitHub 上建立一个强有力的档案。

  1. 下面是为您各自的机器安装 Git 的链接:

[## Git -安装 Git

在开始使用 Git 之前,您必须让它在您的计算机上可用。即使已经安装了,也是…

git-scm.com](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)

2.如果您没有帐户,请在 GitHub 上创建一个帐户。

摘要

随着对每个组件的熟悉,您现在应该能够使用 UNIX shell、Python & Anaconda 和 Git 来设置您的环境。

Harshit 的数据科学

通过这个渠道,我计划推出几个涵盖整个数据科学领域的系列。以下是你应该订阅频道的原因:

  • 该系列将涵盖每个主题和副主题的所有必需/要求的高质量教程。
  • 解释了为什么我们在 ML 和深度学习中做这些事情的数学和推导。
  • 与谷歌、微软、亚马逊等公司的数据科学家和工程师以及大数据驱动型公司的首席执行官的播客。
  • 项目和说明,以实现迄今为止所学的主题。

[## Harshit 的数据科学

涵盖整个数据科学课程和其他所有内容。指导了 1500 多名学生,课程…

www.youtube.com](https://www.youtube.com/channel/UCH-xwLTKQaABNs2QmGxK2bQ)

你可以在 LinkedInTwitterInstagram 上与我联系(在那里我谈论健康和福祉。)

注意:在这些黑暗的时期,自我隔离为自我提升腾出了一些空间,我们可以利用这些空间来发展新的技能、爱好,并帮助未来的自己。

识别社交媒体上与投诉相关的帖子

原文:https://towardsdatascience.com/identification-of-complaint-relevant-posts-on-social-media-4bc2c8b625ca?source=collection_archive---------63-----------------------

针对投诉检测的平台无关的半监督方法的初步工作

通过这篇博客,我旨在解释在 2020 年计算语言学协会第三届电子商务和 NLP 研讨会上接受的论文“针对社交媒体中特定领域投诉检测的半监督迭代方法”中所做的工作。这个顶级场所服务于研究的融合,包括但不限于计算语言学、认知建模、信息提取和语义学。这项工作是首次尝试利用分散的社交媒体景观来列出投诉和识别不满。我们通过在社交媒体平台 Twitter 上评估交通相关服务来强调我们方法的实用性。这篇文章将简要概述这项研究的动机、方法和应用。更多的技术细节可以在论文中找到。我们的团队热切期待任何关于这项工作的建议和改进。

动机

社交媒体最近已经成为用户表达对各种产品和服务的意见的主要场所之一。这些意见对于了解用户对这些服务的看法和感受极其有用。它们对于识别潜在缺陷也很有价值,并且对于下游客户服务响应的执行至关重要。像运输和物流这样的公共部门企业受到公众舆论的强烈影响,并构成一个国家经济的一个重要方面。通常,企业依靠社交媒体来确定客户反馈和初步反应。因此,自动检测社交媒体上的用户投诉可以证明对客户和服务提供商都有利。

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

一名社交媒体用户向相关部门表达了他们的不满。

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

拥有大量市场份额的运输相关公司。

传统上,列出投诉涉及社交媒体用户用他们的投诉标记相关个人。然而,有一些缺点降低了这种方法的实用性。
与其他贴有相关当局标签的帖子相比,此类帖子的出现率较低。此外,媒体平台受到冗余的困扰,帖子在重新发布之前会被重新措辞或进行结构变形。此外,大量不可避免的噪音使得很难识别可能需要立即关注的帖子。

我们的贡献

为了建立这样的检测系统,我们可以采用有监督的方法,这通常需要大量的标记训练样本。然而,正如我们所讨论的,标记社交媒体帖子以捕捉对特定服务的投诉是一项挑战。先前在事件检测方面的工作已经证明,简单的语言指示符(短语或 n-gram)在准确发现社交媒体中的事件方面是有用的。虽然用户投诉与事件不同,更像是一种言语行为,但我们认为类似的指标也可以用于投诉检测。为了追求这一假设,我们提出了一种半监督迭代方法来识别抱怨特定服务的社交媒体帖子。在我们的实验工作中,我们从 326 个交通投诉样本的注释集开始,经过该方法的四次迭代,我们收集了 2,840 个指标和超过 3,700 条推文。我们从最终数据集中随机抽取了 700 条推文进行注释,发现超过 47%的样本是实际的交通投诉。我们还描述了基本分类算法在这个数据集上的性能。在这样做的时候,我们还研究了不同的语言特征是如何对该领域中的监督模型的性能做出贡献的。

方法和途径

我们提出的方法从大量与交通相关的推文和少量带注释的投诉开始。我们使用这些标记数据来创建一组种子指标,以驱动我们迭代投诉检测流程的剩余部分。

数据收集

我们将实验集中在 2018 年 11 月至 2018 年 12 月期间。我们创建交通相关推文语料库的第一步是识别与交通领域相关的语言标记。为此,我们从交通相关的网络论坛 *中随机搜集了一些帖子。*这些论坛让用户讨论他们的不满,并提高对各种交通相关问题的认识。然后,我们处理这些数据,提取具有高 tf-idf 分数的单词和短语(单字、双字和三字)。然后,我们让人工注释者进一步删除重复和不相关的项目。

我们使用 Twitter 的公共流 API 来查询在所选时间范围内包含 75 个短语中任何一个的推文。然后,我们排除了非英语推文和任何少于两个令牌的推文。这导致收集了 19,300 条推文。我们将这个集合称为文集 C 。我们从这个集合中随机选择了 1500 条推文作为人类注释的样本。我们雇佣了两名人工注释者从这 1500 条推文中识别与交通相关的投诉。手稿中提到了注释细节。在注释者不同意的情况下,标签通过讨论来解决。分歧解决后,最终的种子数据集包含 326 个与交通相关的投诉样本。我们将这个集合称为 Ts

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

从精选数据集中识别为投诉相关的示例推文图像。从图像中删除个人识别信息。

迭代算法

图中总结了我们提出的迭代方法。首先,我们使用种子数据 Ts 构建一组投诉的语言指标 I 。然后,我们使用这些指标从语料库 C 中获取潜在的新投诉 Tl 。然后我们合并 TsTl 来构建我们的新数据集。然后,我们使用这个新的数据集来提取一组新的指标。指标与原指标 I 结合,提取出下一版本 Tl 。这个过程一直重复,直到我们再也找不到任何新的指标。

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

迭代投诉检测算法。

提取语言指标

如算法所示,提取语言指标(n-grams)是该过程中最重要的步骤之一。这些指标对于识别最有可能是特定领域投诉的推文至关重要。我们采用两种不同的方法来提取这些指标。对于带注释的种子数据 Ts ,我们只选择 tf-idf 得分最高的 n 元文法。在我们的实验工作中, Ts 有 326 条带注释的推文。我们确定了 50 个具有最高 tf-idf 分数的 n-grams 来初始化 I 。一些例子包括像问题、车站、服务、通行费、回复、故障、提供信息、司机、地区、乘客这样的术语。

当从没有注释的 Tl 中提取指标时,可能会出现不一定表示投诉的频繁出现的短语。这些短语可能会导致后续迭代中的概念漂移。为了避免这些离题,我们在选择指标时使用了一个域相关性的度量。这被定义为 n-gram 在 Tl 中的频率与在 Tr 中的频率之比。 Tr 是随机选择的不与 C 相交的 tweets 的集合。我们将 Tr 定义为来自不同时间范围的 5000 条推文的随机样本,而非 C.

我们的迭代方法在四轮中收敛,之后没有提取任何新的指标。经过四次迭代,这种方法选择了 3732 条推文,生成了 2840 个独特的指标。我们还手动检查了流程中选择的指标。我们观察到,只有域相关性分数大于 2.5 的指标被选择用于后续迭代。

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

一些强弱指标的例子。括号中的数字表示各自的域相关性分数。

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

每次迭代后收集的指标和 tweets 的频率。

我们从最终的投诉数据集 T 中随机选择了 700 条推文,并手动对它们进行了注释,以帮助理解质量。手稿中已经讨论了这些指导方针,并且也使用了和以前一样的注释者。注释者获得了 kappa= 0.83 的高一致分数。在解决分歧后,我们观察到 332 条推文被标记为投诉。这占了 700 条样本推文的 47.4%。这表明,我们的半监督方法选择的近一半推文是与交通相关的投诉。这在原始 seed 数据 Ts 中的比例要高得多,其中只有 21.7%是实际投诉。

系统模型化

我们进行了一系列实验,以了解我们是否可以自动建立简单的机器学习模型来检测投诉。这些实验还帮助我们评估最终数据集的质量。此外,这项实验工作还研究了不同类型的语言特征如何有助于发现社交媒体投诉。对于这些实验,我们使用 700 篇文章的注释样本作为测试数据集。我们通过从原始语料库 C 中选择另外 2000 个帖子来建立我们的训练数据集,并再次对它们进行注释。为了评估机器学习算法的预测强度,我们使用了各种语言特征。这些特征可以大致分为四组。

(i) **语义:**第一组特征基于简单的语义属性,例如 n-grams、单词嵌入词性标签

(ii) **情感:**第二组特征基于预先训练的情感模型词汇库

(三)正投影:第三组特征使用正投影信息,如标签用户提及增强符

(iv) 请求:最后一组特征再次使用与一个请求相关联的预训练模型或词典,这是一个密切相关的言语行为。

出于实验目的,我们对来自每个预训练模型或词典的完整推文使用了定量或归一化的分数。关于这些类型特征的先前文献的更多细节可以从该论文中获得。

结果

我们使用描述的每一个特征训练了用于投诉检测的逻辑回归模型。表现最好的模型基于 unigrams,准确率为 75.3%。不同情感模型的性能没有显著差异。有趣的是,观察到简单的特征,如不同代词类型的数量和加强词的数量,具有很强的预测能力。总的来说,我们观察到这里研究的大多数特征都有一些预测抱怨的能力。

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

与不同类型特征相关的预测准确性和 F1 值。分类器利用逻辑回归(弹性网络正则化),因为与同类产品相比,它具有最佳性能。

这项研究的潜在使用案例

正如所讨论的,我们所提出的架构的效用是多方面的:
(i)我们相信我们的工作可能是改进下游任务的第一步,这些任务与投诉相关,例如聊天机器人开发、创建自动查询解决工具或收集关于服务的低成本公众意见。(ii)我们的方法将帮助语言学家从词汇或语义的角度理解批评和抱怨中使用的语言。
(iii)所提出的方法具有高度的
灵活性**,因为它可以根据种子数据中使用的词汇扩展到其他领域。
(iv) 架构的迭代本质减少了人为干预,因此在训练阶段不会出现任何无意的偏差。这也使得对帖子中随时间发生的词汇变化具有鲁棒性
(iv)由于它是半监督的,因此减少了投诉检测对大量预标记样本的依赖,并且减轻了监督方法中普遍存在的类别不平衡问题。**

结论和未来工作

作为这项工作的一部分,我们提出了一种迭代半监督方法,用于自动检测投诉。投诉解决是各种基于产品的公司的产品改进计划的重要部分;因此,我们认为,我们提出的方法可以有效地衡量公众意见的低成本评估或路由投诉到适当的平台。我们手动验证了所提出方法的有效性,并观察到在收集投诉相关推文方面有显著的改进。未来,我们的目标是部署聚类机制来隔离不同性质的事件相关推文。我们还计划使用额外的元数据上下文和 tweet 会话性质来增强系统性能。我们的团队热切地期待着关于这篇论文的任何反馈或建议。请随时联系论文的作者。我希望这篇文章能激励另一位像我这样的年轻研究人员去着手解决一个相关的社会问题,并利用人工智能和数据科学的潜力来解决这个问题。

相关链接

[## 社交媒体中特定领域投诉检测的半监督迭代方法

摘要在本文中,我们提出了一种半监督自举方法来检测产品或服务相关的…

www.aclweb.org](https://www.aclweb.org/anthology/2020.ecnlp-1.7/) [## MIDAS-研究/运输-投诉-检测

这个语料库可以免费用于研究目的。下面列出的文件提供了创建和使用…

github.com](https://github.com/midas-research/transport-complaint-detection)

识别词汇语义词的关系——初学者指南

原文:https://towardsdatascience.com/identification-of-lexico-semantic-word-relations-a-beginners-guide-427ed331e287?source=collection_archive---------38-----------------------

对我目前工作的一个虚拟介绍——识别一对给定单词之间的语义关系的本质。

当我请求你“请容忍我”的时候,你让自己做好了不得不容忍我的准备。如果你被告知“这个泰迪熊是毛绒绒的”,你的大脑会想象出一个柔软、可爱、毛茸茸的玩具,让蹒跚学步的孩子抱上床。如果你读到熊濒临灭绝,你会想到北极海冰中的北极熊。当他们在下周的新闻中告诉你冠状病毒危机让我们陷入了我们这一代人最糟糕的熊市时,你会本能地知道他们在谈论股票。

你的英语知识,以及你理解上下文依赖、词汇和句法结构以及语言细微差别的能力,有助于你区分同一个词的四种意思。你认为这是理所当然的,几乎不去想它,但是你花了很多年才获得这种能力。你直接或间接地从你的个人经历中学习。你通过在上下文、信息、行为和反应之间建立联系来学习。当你下意识地触发一组中子来交流或倾听时,神经认知反应的级联反应是一个奇迹。所有这些再加上你的遗传天赋,让语言对你来说毫不费力。

另一方面,理解人类语言对计算机来说是个难题。不像你和我,计算机没有像我们一样进行语言训练的特权。甚至编程语言也不由它们直接解释——它们首先被转换成低级机器语言。真正的机器码仅仅是一串原始的,通常是二进制的(1 和 0)数据。虽然人类获得了分析、处理、推断和交流的能力,但对于计算机来说,从人类语言中挑选出来的任何单词都是难以理解的胡言乱语,直到它接受了足够的训练来理解这种语言。

这项任务是教机器像我们一样理解语言,这被称为自然语言处理或 NLP。NLP 是人工智能的一个分支,它本身是许多其他子问题的保护伞。这类问题的日常例子有搜索、语音识别、翻译、摘要、问答等。但是所有这些都回避了一个问题——如果计算机除了 1 和 0 什么也不懂,它们怎么能理解人类语言的复杂性呢?

单词向量—以数字的形式表示单词

考虑一个空间,其中所有的英语单词都是基于它们的语义特征来填充的。这个想象的空间是这样的,共享相似描述或概念的词共享相似的空间属性。例如,“猫”和“狗”这两个词会非常接近,因为猫的概念和狗的概念非常相似。两者都是四足动物,是可爱宠物的家养品种。对于意义不相似但代表相同概念的单词,单词相对于彼此的位置概括了这种关系。在语义空间中,“国王”与“王后”的相对位置类似于“男人”与“女人”或“男孩”与“女孩”之间的相对位置,因为在所有三种情况下分隔单词的定义概念是相同的——性别。

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

在下面的语义空间示例中,您可以看到狮子、老虎、猎豹和大象等动物的向量非常接近。这很直观,因为它们经常在相似的上下文中被讨论;例如,这些动物很大,是野生的,而且有潜在的危险——事实上,描述性的单词“野生”与这组动物非常接近。

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

由于单词最纯粹的形式无法被计算机解释,我们通过将单词固有的概念和思想映射到每个单词的一组代表性数字来简化它们。这些数字集由“神经网络”(一种算法)以代数方式生成或“学习”,被称为“单词向量”。这些词向量具有跨词集合捕获关于语义关系和句法结构的信息的能力。生成单词向量的方法建立在 Firth(1957)分布假设的基础上,该假设陈述:

“从一个人所交的朋友,你就可以知道他说了什么。”

换句话说,拥有相似语境的单词往往有相似的意思

词向量可以有任意维数,尽管标准数通常是 50、100 或 300。这些维度中的每一个都代表一个意义或一个抽象概念,其程度取决于该词在该特定维度上的数字权重。这里有一个例子来说明这一点。考虑一个只有十个单词(而不是几百万个)的词典,想象我们的单词向量是三维的(而不是三百个)。

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

在上图中,为了更好的理解,我们假设每个维度都有一个明确定义的含义,而不是一个抽象的概念。例如,如果你想象第三维度代表“蓬松度”的概念,那么每个单词在那个维度上的权重代表它与那个概念的关系有多密切。让兔子拥有最高的蓬松系数 0.45 是完全合理的。这是对单词向量的相当大的简化,因为维度在现实中并不具有如此明确定义的含义,但这是一种有用且直观的方式来让你理解单词向量维度的概念。我们不会深入研究神经网络如何学习单词嵌入的数学细节,因为这将涉及到线性代数的漫长弯路。但是现在你知道了驱动数学的基本思想。

词汇关系解析

我目前的研究工作集中在一个叫做词汇关系消解的问题上。词汇关系是一种文化上认可的关联模式,存在于一种语言的词汇项(一个词、一个词的一部分或一串词)之间。例如,“打开”和“关闭”之间的词汇关系是反义关系,而“关闭”和“关闭”是通过同义关系连接的。其他不对称的词汇语义关系包括上下义关系(如电话←→监视器)、上下义关系(如电话→扬声器电话)或部分义关系(如电话→话筒)等

识别给定单词对之间的语义关系的确切性质是至关重要的,并且形成了所有其他 NLP 应用(问答、摘要、语音识别等)的基础。)就是我上面提到的。

过去已经提出了几种方法来区分一对单词之间的多种语义关系。但是,这仍然是一项艰巨的任务,尤其是在区分某些关系时。(例如同义和同义)。

研究工作—补丁、注意、长方体

为了解决这个问题,我们的工作提出研究在特定单词的邻域中引入相关单词,并测量它对单词关系的预测准确性的影响。我们最初的假设是,如果每个单词被固定数量的相邻单词(或“补丁”)的单词向量所增强,则可以获得改进的性能。

存在许多相似性度量来说明链接两个单词的词汇语义关系。在我们的例子中,我们使用余弦相似性度量,它在过去被证明对于各种语义关系是成功的。简单地说,余弦相似性是一种用于确定两个实体有多相似度量。我们以直接的方式将余弦相似性扩展到面片。两个块之间的相似性是它们各自块中所有单词之间的一对一余弦相似性度量的集合。

下一步包括将补丁转换为学习输入,因为尽管我们可以在大脑中绘制和可视化补丁,但计算机需要具体的数字数据来理解它。将每个单词的 300 维单词向量与小块中所有单词的 300 维单词向量进行比较,并且为每次比较提供单个相似性得分。实际上,我们取 600 个值(两个单词各取 300 个)并借助余弦相似度将其简化为一个。如果我们将邻居的数量设置为 10,那么我们将得到 10×10 次比较,从而得到 100 个相似性值。这些值一起形成“片内相似度表”。下面给出了四个不同补丁及其补丁内分数的例子。

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

人们决定,除了在片内保持概念中心性之外,在片之间保持关系中心性也是有意义的。重要的是要认识到,只有两个补丁中的某些单词可能是决定两个单词是否处于词汇语义关系的核心。如果两个补丁共享对两个概念都很重要的一组紧密语义相关的单词,那么决策过程在直觉上应该更可靠。

然而,我们最初的发现表明,直接引入邻词并没有带来改善。我们认为这主要是由于战略变化导致的概念中心性的丧失。如果通过并列两个补丁而不是两个单词来评估单词关系,那么对原始单词的关注可能会被削弱。

下一个合乎逻辑的步骤是根据单词向量在概念中的中心地位来权衡它们。为此,我们引入了一种基于 PageRank 算法的注意力机制(这是谷歌用于网络搜索的算法之一。PageRank 是为了衡量网站页面的重要性而开发的)。我们用它来分配一个权重的中心性的每个词的邻居在补丁。一个单词在补丁中越重要,它得到的分数就越高。这些分数然后被用作邻居的相应单词向量表示的注意力权重。该机制的目标是基于补丁中每个词向量的重要性分数来提高我们的系统的预测能力。我们发现,当与正确的架构结合部署时,注意力调整补丁支持了我们的模型,并对先前的结果给予了显著的推动。我将不得不涉足非常技术性的领域来解释架构的细节,所以,现在,我们将省去那些细节。

事实上,与非补丁基线方法相比,二元分类(在两个关系之间做出决定)的平均改进可以达到 10.6%,多类分类(在两个以上关系之间做出决定)的平均改进可以达到 8%。就目前情况而言,我们认为,如果我们构建一个长方体,我们可能会获得更好的结果,其中两个单词的单词向量不是折叠成单个相似度值,而是通过仅将它们从 600 维压缩到 300 维来更大程度地保留。(我们通过取两个向量之间的点积来实现。两个 300 维向量的点积产生新的 300 维向量)。我们在长方体上的结果很有希望,并且在我们以前的基线上表现出了增强的性能。然而,在被称为对其前身的彻底升级之前,该模型还需要通过更多的测试。我们的下一步是将我们的结果与试图解决同样问题的模型进行比较。无论结局如何,我一定会在博客上更新我们的进展。

至于一般的 NLP,毫无疑问,我们仍然需要几十年,或者最多几年,才能设计出像我们一样说话和交流的人工智能。今天训练一台计算机完成最简单的任务所需的数据量是巨大的。就数据表示的质量而言,我们既没有达到顶峰,也没有足够的计算能力来将基于当前数据表示训练的模型扩展到特定范围之外。

然而,回想起来,对我来说,有一点数学知识、足够的计算能力和对编程语言的相当熟悉,就可以教一个完全无生命的物体理解我们人类的语言,这永远不会停止疯狂。当你想到它的时候,它是相当超现实的。​

这篇博文基于 Nesrine Bannour 和 Houssam Akhmouch 在 gal Dias 教授的指导下所做的工作。

您可以访问我的页面 这里 。你可以关注我的推特 这里

使用华盛顿 DC 地铁数据确定有利可图的广告位置

原文:https://towardsdatascience.com/identify-profitable-advertising-locations-using-washington-dc-metro-data-a03c5c4fc18f?source=collection_archive---------59-----------------------

深入分析

使用 Python 中的骑手脚步数据进行简单分析

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

感谢:大卫·TRAN/SHUTTERSTOCK

在 DC 的华盛顿生活了一年,我开始意识到 WMATA 地铁是这个充满活力的城市的生命线。地铁网络庞大,在整个车管所区域连接良好。当我第一次搬到没有汽车的首都时,我经常跳上地铁四处走动。我一直喜欢坐火车旅行,因此不出所料,地铁成了我探索这座美丽城市最喜欢的方式。在旅途中,我经常注意到地铁站台上、自动扶梯/电梯附近、地铁车厢内等地方的产品广告。对地铁乘客数据的良好分析将有助于广告商识别哪些地铁站在什么时间最繁忙,从而增加广告曝光。我偶然发现了这个免费的数据集,并决定深入研究它。在本文中,我将向您介绍我的分析。

第一步:导入必要库

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")

第二步:读取数据

让我们称我们的熊猫数据帧为“df_metro ”,它将包含原始数据。

df_metro = pd.read_csv("DC MetroData.csv"

第三步:目测数据帧的数据和长度

df_metro.head()

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

df_metro.columns

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

len(df_metro)

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

第四步:检查不同列下的不同值

让我们检查一下“时间”列中的唯一值是什么

df_metro['Time'].value_counts().sort_values()

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

“日”列中的唯一值如下:

df_metro['Day'].value_counts().sort_values()

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

下一步是分析几个问题。

Q1。有哪些热门的出入口?

按降序排列的每个地铁站的不同记录计数将告诉我们哪些是受欢迎的入口和出口。

df_metro['Entrance'].value_counts().sort_values(ascending=False).head()

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

df_metro['Exit'].value_counts().sort_values(ascending=False).head()

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

热门地点似乎是

  1. **画廊区-唐人街:**主要景点有首都一号竞技场(吸引大量人群观看体育赛事和音乐会)、餐馆、酒吧等。
  2. 雾谷:该地区的政府办公楼使其成为一个受欢迎的通勤目的地
  3. 五边形城市:距离华盛顿市中心的国家广场仅 2 英里,这使得该地区成为酒店和企业的热门地点。
  4. **杜邦环岛:**位于该地区的国际使馆
  5. 联合车站:长途旅行者的重要地点
  6. 地铁中心:一个受欢迎的市中心位置
  7. 托腾堡的地铁站是绿色、黄色和红色线路的热门换乘点

**要点:**广告商应该瞄准上述乘客流量高的热门地铁站,以最大限度地吸引买家的注意力。

Q2。在一周的不同日子/时间,乘客量是什么样的?

这可以通过简单地绘制不同日期和时间的骑手数据来回答。我们将利用 seaborn 库来创建这个。

sns.set_style("whitegrid") 
ax = sns.barplot(x="Day", y="Riders", hue="Time",
             data = df_metro,
             palette = "inferno_r")
ax.set(xlabel='Day', ylabel='# Riders')
plt.title("Rider Footfall on different Days/Times")
plt.show(ax)

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

**外卖:**地铁是城市中工作通勤的热门选择,因此,正如所料,工作日期间乘客流量最高,尤其是在早高峰和晚高峰期间。计划推出新产品的公司应该瞄准这些时段,以吸引消费者的注意力并引起他们的兴趣。对于周末期间的广告机会,最有吸引力的时间段似乎是中午,紧随其后的是下午高峰。

Q3。在一个典型的工作日期间有什么繁忙的路线?

为了分析这个问题,我们将考虑在任何给定的地铁站超过 500 名乘客的客流量。首先,我们将创建一个数据帧“busy_routes ”,其中包含关于超过 500 名乘客的路线的数据。其次,我们将过滤该数据帧,使其仅包含“AM 峰值”的数据。第三,我们将对过滤后的输出进行排序。

busy_routes = weekday[weekday['Riders']>500][['Merge', 'Time', 'Riders']]
peak_am = busy_routes.query('Time=="AM Peak"')
peak_am.sort_values('Riders').tail()

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

对“PM 峰值”重复相同的步骤。

peak_pm = busy_routes.query('Time=="PM Peak"')
len(peak_pm)
peak_pm.sort_values('Riders').tail()

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

**外卖:**我们看到,上午高峰期间客流量大的路线与下午高峰期间客流量大的路线相同,如西福尔斯教堂—法拉古西,维也纳—法拉古西,Shady Grove —法拉古北。这告诉我们,这些是受欢迎的工作通勤路线,因为人们在上午高峰期间去法拉格特工作,在下午高峰期间返回他们在维也纳/瀑布教堂/Shady Grove 的家。广告商应该瞄准这些高流量的通勤路线,以最大化他们的广告和产品植入。

Q4。周末最受欢迎的地铁路线是什么?

让我们执行一个类似于工作日的分析。由于我们在这里处理周末数据,我们将考虑客流量超过 200 人的地铁站。

saturday = df_metro[df_metro['Day']=='Saturday']
busy_routes_sat = saturday[saturday['Riders']>200][['Merge', 'Time', 'Riders']]
busy_routes_sat.sort_values('Riders').tail()

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

sunday = df_metro[df_metro['Day']=='Sunday']
busy_routes_sun = sunday[sunday['Riders']>200][['Merge', 'Time', 'Riders']]
busy_routes_sun.sort_values('Riders').tail()

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

**要点:**史密森尼是一个非常受游客和城市居民欢迎的目的地,因为它有几个博物馆,并且靠近白宫、国会大厦、国家纪念碑、战争纪念馆等。我们的分析告诉我们,人群在中午从水晶城、五边形城、维也纳、弗兰科尼亚前往史密森尼博物馆,在下午高峰返回。这些人群中大多数是有孩子的年轻家庭,这是公司推出针对包括儿童在内的年轻人群的产品的理想受众。

Q5。作为一名广告客户,我应该在深夜锁定哪些位置?

我们将做一个与上面类似的分析,以确定哪些地铁站是深夜投放广告的理想场所。对于“深夜”,我们将考虑客流量超过 50 人的地铁站。

late_night = df_metro[df_metro['Day']=='Late Night']
busy_routes_latenight = late_night[late_night['Riders']>50][['Merge', 'Time', 'Riders']]
busy_routes_latenight.sort_values('Riders').tail()

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

**外卖:**我们看到,深夜,乘客们从热门地点乘坐地铁,如画廊广场、克拉伦登、杜邦环岛和 U 街,夜生活热闹非凡。因此,想要吸引这部分人群(通常是较年轻的人群)的广告商应该潜在地瞄准这些地铁站来抓住最大的注意力。

**结束语:**这个数据集相当简单,因此,我们没有花太多时间清理和争论数据。有了给定的数据,我们就能找到最佳点,确保广告商的钱得到最大的回报。感谢阅读!

在无向图中识别良好连接的用户

原文:https://towardsdatascience.com/identify-well-connected-users-in-a-social-network-19ea8dd50b16?source=collection_archive---------45-----------------------

该出版物主要讲述如何使用无向图和 Scipy 的稀疏矩阵实现(首席运营官)来存储数据,并通过计算三角形来分析用户连接。

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

艾莉娜·格鲁布尼亚克在 Unsplash 上的照片

我最近发现,我的一位前雇主有一个类似于脸书的社交网络,因此有大量数据迫不及待地需要分析。社交网络相当成熟,发展良好,最重要的是,也使用了很多。所以我决定更详细地研究一下关系数据。

在浏览网页的时候,我发现了一个让“计算连接质量”成为一个可行且有趣的任务的方法。这里的关键词是数三角形。这似乎是一个很好的方法,通过检查他们与第三方有多少关系来找到关系良好的用户。为了使这一点更具体,让我们做一个简单的例子。

甲认识乙,乙认识丙。简单,没有三角形,因此不是我们要寻找的。

A 认识 BB 认识 CC 认识 A 。嗯,这正是我们要找的,因为我们在这里看到,这三个人在这个星座中最多有 2 个联系。因此,最大连接数。

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

无向示例图

graph = np.array([
    [0,1,1,0,0,0,0,0],
    [1,0,1,1,1,0,0,1],
    [1,1,0,0,0,0,0,0],
    [0,1,0,0,1,0,1,1],
    [0,1,0,1,0,1,0,0],
    [0,0,0,0,1,0,0,0],
    [0,0,0,1,0,0,0,0],
    [0,1,0,1,0,0,0,0]
])

from numpy import linalg
w,v = linalg.eig(graph)
w,v

round(np.sum(w**3) / 6,1)

卡内基梅隆大学【1】发表的一篇论文中关于矩阵中三角形计数的有趣实践。本文已经提供了非常容易理解的伪代码片段——但是,我们稍后将研究另一种方法。Charalampos E. Tsourakakis(卡内基梅隆大学)提出了一种经过广泛测试的精确方法(95%+),通过“特征值的立方之和”来计算网络中的三角形。

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

C. E .措拉基斯的“特征三角形”

在常规的英语措辞中,我们是在计算一个无向图中三角形的总数,其中 lambda 表示第 I 个特征值。为了得到三角形的数目,我们需要特征值立方的和。请注意除以 6。这可以从一个三角形包含的三个节点中推导出来,由于我们将每个三角形计为 2,因此我们需要乘以分母,我们将在下面进一步找到这个“神奇的 6”。

如果你是那些“特征人”中的一员(笑话来自麻省理工学院的吉尔伯特·斯特朗教授[2]),我很确定上面的等式对你来说很有趣。根据 Tsourakakis 的说法,我们需要以下面陈述的形式提供数据。给定的 pseudo 和 Python 代码需要计算/创建邻接矩阵(“图”)和计算所有 Iλ:

对于你的计算机程序来说,这是一个非常简单的任务:

# a few lines implementing (1) from above
from numpy import linalg

def return_eig_triang(graph):
  w,v = linalg.eig(graph)
  w,v
  no_of_triangles = round(np.sum(w**3) / 6,1)
  return no_of_triangles # total triangles in the matrix

因此,我们现在看到的图形示例中共有 3 个三角形,这与我们在图表中看到的完全匹配。有三个三角形 (0,1,2)(1,3,4)(1,3,7) ,因此与用户 56 相比,用户 0,1,2,3,4,7 看起来连接得相当好。

现在让我们转到一个更随机的问题,我们之前没有调整数据,以观察特定的输出。为此,让我们创建一个人工稀疏数据集。我从可能有 20 个用户的数据集中选择了一个简单的随机样本——实际上这当然要多得多,因此我们将考虑一个通过坐标寻址的稀疏矩阵,尽管这对于我们的人工数据集来说不是必需的。

# create sparse dataset
connections_list = []

for i in range(31):
    connections = np.random.choice(21,2) # obviously, repeated values are likely, let's see whether we get triangles too..
    connections_list.append(list(connections))

print(connections_list)

现在我们可以检查我们的随机数据——请注意,我们也将坚持我们的第一个较小的例子来证明这个过程是可行的。在上面的几行中,我们创建了一些随机的连接。如果我们观察到(8,7)和(16,8),我们将希望得到另一个(16,7)对,以便得到一个三角形。注意,用户不能和自己做朋友!

random 函数创建的内容如下——乍一看,我认为我们可以使用它(重复是好的,必须避免自引用):

[[2, 3], [18, 3], [14, 10], [2, 10], [3, 12], [10, 11], [19, 16], [7, 2], [6, 0], [14, 9], [11, 5], [12, 3], [19, 8], [9, 0], [4, 18], [12, 19], [10, 4], [3, 2], [16, 6], [7, 3], [2, 18], [10, 11], [8, 18], [2, 10], [19, 1], [17, 3], [13, 4], [2, 0], [17, 2], [4, 0], [1, 17]]

当首先检查两个坐标 X 和 Y 中的模式值时,我们得到与该模式同时出现的值 {2,3,7,17} 。查找这些值的查询很简单,我们只需检查每个列表的元素[0]或[1]是否等于我们的模式 (X == 2) | (Y == 2) 。因为我们打算将稀疏数据存储在各自的数据结构中,所以让我们继续讨论稀疏矩阵。为了这个目的,我创建了一个快速剪辑来支持你的理解。

# adding coordinates symmetrically
x,y = [],[]

for element in connections_list:
    xi = element[0]
    yi = element[1]

    x.append(xi)
    x.append(yi) # make symmetric
    y.append(yi)
    y.append(xi) # make symmetric

# create 'one' entries for the coo matrix
vals = np.ones(len(x))

# numpy(scipy.sparse)
from scipy.sparse import coo_matrix
m = coo_matrix((vals,(x,y)))

现在看来,三角形很可能出现在之前给出的集合中。以便在更大的范围内对特定行的三角形进行计数(其中每行代表X【index _ number】)—这与我们第一种方法不同,在第一种方法中,我们对所有三角形进行计数!—我们需要另一个方程来评估这个结果。

很长一段时间我都没能解决这个问题,但是当我做一些练习时,我发现了一个非常好的解决方案,它是由非常受赞赏的 Richard Vuduc 教授提出的3。在寻找三角形的任务中,我借用了一种线性代数方法,这种方法我可以从 Vuduc 教授的一本出色的笔记本中学到。

首先,我们创建矩阵的点积(其中 M 和 M.T 总是相等的)。这将计算从一个用户到另一个用户的所有连接。正如我们将看到的,也有一些“过数”。当点积最终被初始矩阵 m 的成对乘法“掩盖”时,这些将消失

多么优雅的解决方案!

# dot & pairwise multiplication
# = connection count + "masking"

M = (m.dot(m)) * m

在最后一步,最终我们能够获得连接良好的用户,我们将计算每个用户的三角形数。请注意,任何给定的数字都不能被认为是“人 m 有 n 个三角形”,但结果可以排序,这将允许您识别最佳或最少连接的用户。

备注:如前所述,如果我们把所有的连接加起来,然后用这个数除以我们的 6 ( 1/3 代表三角形,1/2 代表我们把三角形数为 2),我们将再次看到三角形连接的总数。

正如已经从获得的模式值中假设的,与用户 2 的连接最有可能导致三角形,这也可以在我们的示例数据中观察到。高三角形值用星号突出显示:

# obtaining "triangle-values" is easy:
np.sum(M.toarray(), axis=1)
user:  0 	Triangle value:  [[66.]]
user:  1 	Triangle value:  [[26.]]
user:  2 	Triangle value:  [[**187.**]] *****
user:  3 	Triangle value:  [[**167.**]] *****
user:  4 	Triangle value:  [[69.]]
user:  5 	Triangle value:  [[13.]]
user:  6 	Triangle value:  [[22.]]
user:  7 	Triangle value:  [[70.]]
user:  8 	Triangle value:  [[30.]]
user:  9 	Triangle value:  [[24.]]
user:  10 	Triangle value:  [[**127.**]] *****
user:  11 	Triangle value:  [[59.]]
user:  12 	Triangle value:  [[71.]]
user:  13 	Triangle value:  [[15.]]
user:  14 	Triangle value:  [[34.]]
user:  15 	Triangle value:  [[0.]]
user:  16 	Triangle value:  [[15.]]
user:  17 	Triangle value:  [[77.]]
user:  18 	Triangle value:  [[93.]]
user:  19 	Triangle value:  [[39.]]

从这个例子中我们可以得出:与三角形相关的值确实具有相对较高的值,但是我们还需要考虑额外的简单连接也会增加我们的整体值。这尤其可以在非三角形和三角形的情况下 1017 中观察到。

正如我前面提到的,我们将再次查看我们的起始示例,以确保我们的结果是可信的。由于用户 1 是 3 个整体三角形的一部分,我们当然希望这个用户有最高的分数。将完全相同的步骤应用于我们的第一个小型数据集的结果证实了我们的预期,并显示了以下内容:

user:  0 	Triangle value:  2
user:  1 	Triangle value:  6
user:  2 	Triangle value:  2
user:  3 	Triangle value:  4
user:  4 	Triangle value:  2
user:  5 	Triangle value:  0
user:  6 	Triangle value:  0
user:  7 	Triangle value:  2

我希望我能为您提供一个小而有用的例子,说明如何识别无向图中的连通项,并使用稀疏矩阵来存储和处理数据。我很想听听,你是如何将这种逻辑应用到其他话题上的。下次见

[1]charalappos e . Tsourakakis,大型真实网络中三角形的快速计数:算法和法则

[2]https://www.youtube.com/watch?麻省理工学院 Gilbert Strang 教授 v=cdZnhQjJu4I

Richard Vuduc 教授,CSE 6040,https://cse6040.gatech.edu/fa17/details/

确定数据的分布

原文:https://towardsdatascience.com/identify-your-datas-distribution-d76062fc0802?source=collection_archive---------2-----------------------

你的分布假设正确吗?让我们找出它。

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

卢克·切尔在 Unsplash 上的照片

每天我们都会遇到各种数据,如传感器数据、销售数据、客户数据、流量数据等。此外,根据用例的不同,我们会进行各种处理,并在上面尝试几种算法。您是否想过这些关于您的数据的问题:

你的数据是什么样的?

你对它的价值有信心吗?极值‘x’出现的可能性有多大?

您应用的算法可能会对数据分布做出一些假设,这些假设是正确的吗?

数据分布会随着时间或特殊季节而变化吗?

数据分布是一个列出数据可能取的所有值的函数。它可以是一个连续的离散的数据分布。几种已知的标准概率分布函数提供了实验中不同可能结果出现的概率。一些众所周知的概率分布正态对数正态βγ等。其具有标准形式。

但是,挑战在于现实世界的数据可能不遵循任何众所周知的概率分布。在这种情况下,我们可以近似最可能的概率分布,并检查其拟合优度。

通过这篇博客,我打算强调了解你的数据和近似它的概率分布的好处。我还将展示如何做到这一点的实际例子,并测量拟合分布与观察分布的拟合优度。博客中使用的数据集是 Kaggle 的二手车数据集 。这篇博文中用到的代码可以从 这里 下载。

了解数据潜在概率分布的优势

1.良好实践

一旦开始处理数据,了解数据是一个很好的习惯。许多算法,如线性回归,假设变量遵循特定的分布。不符合假设的成本有时会很高。

2.附加置信区间

知道了底层的概率分布,我们就可以找到它的概率密度函数。这有助于我们将置信区间与数据可能取值的范围联系起来。我们也可以求出极值出现的概率。

3.记录分布如何随着时间的推移或在特殊事件/季节中发生变化

分布有参数。有了这些参数,我们可以跟踪分布如何随着时间的推移或在特定的季节/事件中发生变化。

4.众所周知的统计特性

标准概率分布具有众所周知的统计特性,这简化了我们的工作。我们可以用几个参数来解释数据及其行为。

近似数据分布

对于这篇博客,我将使用 Kaggle 二手车数据集。我们将尝试近似各种变量的分布,并检查其拟合优度。我过滤掉了几列。让我们来看看数据:

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

二手车数据集的几行

Id:识别车辆的唯一标识符

价格:车辆的销售价格

年份:制造年份

制造商:汽车的品牌

状况:汽车状况

里程表:里程表读数表示行驶的距离

数据集有 539K 条记录。我们将尝试识别/近似’*价格’*和’*里程表’*变量的分布。

近似“价格”的概率分布函数

Python 的 Scipy 库允许估计 200+分布的参数。此外,拟合优度可以通过各种度量来测试,如卡方统计科尔莫戈罗夫-斯米尔诺夫测试QQ 图等。

卡方统计

根据 Adam Hayes的博客,卡方(χ2)统计是一种测试,用于衡量预期与实际观察数据(或模型结果)的对比情况。用于计算卡方统计的数据必须是随机的、原始的、互斥的、来自独立变量的、来自足够大的样本的。例如,投掷一枚硬币 100 次的结果符合这些标准。[[Source invest opedia]]

卡方统计的公式如下-

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

χ2 统计量的计算公式(公式复制自)

其中 c 是自由度,O 是观察值,E 是期望值。

文章链接

[## 卡方统计定义

卡方(χ 2)统计是一种测试,用于衡量期望值与实际观察到的数据(或模型…

www.investopedia.com](https://www.investopedia.com/terms/c/chi-square-statistic.asp)

一定要看看我关于卡方统计测试的博客来决定打赌的赢家。

[## 统计数据决定赢家的力量

谁是对的?经理还是餐馆老板?

medium.com](https://medium.com/analytics-vidhya/whos-right-the-manager-or-the-restuarant-owner-aaa9b92e153f)

科尔莫戈罗夫-斯米尔诺夫试验

俗称 K-S 检验,用于检验观察分布与理论分布的拟合优度

这里有一篇关于这个话题的文章。

[## 统计学— Kolmogorov Smirnov 检验

该测试用于必须在观察到的样本分布和…之间进行比较的情况

www.tutorialspoint.com](https://www.tutorialspoint.com/statistics/kolmogorov_smirnov_test.htm)

QQ 图

根据维基百科,QQ 图是一种通过绘制两个概率分布的分位数来比较它们的图形方法。

这里有一个关于 QQ plots 的有趣的 StatQuest 视频

Josh Starmer在 QQ-plots 上发布的 StatQuest 视频

通过足够好的复习,我们都可以开始我们的主要任务分配拟合。

我们将尝试使用以下分布来估算’ price’ ,看看哪种分布在卡方统计方面表现最佳-

dist_names = [‘weibull_min’,’norm’,’weibull_max’,’beta’,
              ‘invgauss’,’uniform’,’gamma’,’expon’,   
              ‘lognorm’,’pearson3',’triang’]

为了得到稳定的结果,我去除了极端的异常值(两端各 1%的数据)。拟合分布:

Python 代码使用 Scipy 库来适应发行版

拟合分布和检查拟合优度

基于卡方统计的不同分布拟合和拟合优度检验

按拟合优度排序的输出如下所示:

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

就拟合优度而言,前两种分布是指数分布逆高斯分布

这两种分布的参数是:

**Parameters of Exponential Distribution**
<scipy.stats._continuous_distns.expon_gen object at 0x12abd2390>
(loc = -1.19, scale = 1.19)
where Lambda = 1/scale**Parameters of Inverse Gaussian Distribution** <scipy.stats._continuous_distns.invgauss_gen object at 0x12ac90c50>
(mu = 0.45, loc = -1.64, scale = 3.61)

除分布参数外, Scipy 库还提供 loc 和 scale 参数。Loc 参数将分布移动适当的量,Scale 参数根据需要拉伸分布。

[## 统计函数(scipy.stats) — SciPy v1.4.1 参考指南

这个模块包含了大量的概率分布以及不断增长的统计函数库。

docs.scipy.org](https://docs.scipy.org/doc/scipy/reference/stats.html)

让我们想象一下结果:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(9, 5))# Histogram Plot of Observed Data
axes[0].hist(y)#Exponential Distribution Fitting
axes[1].plot(y,expon.pdf(y_std,-1.19, 1.19))#Inverse-Gaussian Distribution Fitting
axes[2].plot(y,invgauss.pdf(y_std,0.45, -1.64, 3.61))fig.tight_layout()

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

观察数据和拟合分布

这两种分布都表现得相当不错。指数分布比逆高斯分布略胜一筹。卡方统计也表明了同样的情况。

让我们也分析一下 QQ 的情节

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

QQ 情节

这两个发行版都做得相当好。在近似“价格”数据方面,指数略优于逆高斯。

“里程表”概率分布函数的近似

我们将尝试使用以下分布对’里程表’'进行近似,并查看哪种分布在卡方统计方面表现最佳-

dist_names = [‘weibull_min’,’norm’,’weibull_max’,’beta’,
              ‘invgauss’,’uniform’,’gamma’,’expon’,   
              ‘lognorm’,’pearson3',’triang’]

为了得到稳定的结果,我去除了极端的异常值(两端各 1%的数据)。拟合分布:

Python 代码使用 Scipy 库来适应发行版

拟合分布和检查拟合优度

基于卡方统计的不同分布拟合和拟合优度检验

按拟合优度排序的输出如下所示:

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

拟合优度排名前 2 的分布是贝塔三角分布。然而,卡方统计中的差异非常大,Beta 似乎是明显的赢家。

这两种分布的参数是:

**Parameters of Beta Distribution**
<scipy.stats._continuous_distns.beta_gen object at 0x12abb72d0>
(a = 1.51, b = 2.94, loc = -1.71, scale = 5.02)**Parameters of Triangular Distribution** <scipy.stats._continuous_distns.triang_gen object at 0x12acf4050>
(c = 0.12, loc = -1.79, scale = 4.90)

除了分布参数之外, Scipy 库还提供了 loc 和 scale 参数。Loc 参数将分布移动适当的量,Scale 参数根据需要拉伸分布。

[## 统计函数(scipy.stats) — SciPy v1.4.1 参考指南

这个模块包含了大量的概率分布以及不断增长的统计函数库。

docs.scipy.org](https://docs.scipy.org/doc/scipy/reference/stats.html)

让我们想象一下结果:

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

观察数据和拟合分布

贝塔分布比三角分布表现好得多。从视觉上看,其清晰的卡方统计数据也表明了这一点。

让我们也分析一下 QQ 的情节

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

QQ 情节

QQ 图也清楚地表明,Beta 分布很好地逼近了“里程表”(距离)数据。

结论

在这篇博文中,我介绍了在分析数据或对数据应用算法之前了解数据的优势。了解/逼近数据的概率分布也有助于我们使用其统计属性,并为其可能取值附加置信区间。我还介绍了如何使用 Python 实现这一点,并介绍了各种度量标准来检查拟合度。使用的 Kaggle 数据集可以从这里下载。项目的代码可以从这里下载。

如果你有任何疑问,请联系我。我很想知道你是否有一些有趣的问题要解决,并认为近似数据的概率分布会有所帮助。

我的 Youtube 频道获取更多内容:

[## 阿布舍克·蒙戈利

嗨,伙计们,欢迎来到频道。该频道旨在涵盖各种主题,从机器学习,数据科学…

www.youtube.com](https://www.youtube.com/channel/UCg0PxC9ThQrbD9nM_FU1vWA)

关于作者-:

Abhishek Mungoli 是一位经验丰富的数据科学家,拥有 ML 领域的经验和计算机科学背景,跨越多个领域并具有解决问题的思维方式。擅长各种机器学习和零售业特有的优化问题。热衷于大规模实现机器学习模型,并通过博客、讲座、聚会和论文等方式分享知识。

我的动机总是把最困难的事情简化成最简单的版本。我喜欢解决问题、数据科学、产品开发和扩展解决方案。我喜欢在闲暇时间探索新的地方和健身。在 Linkedininsta gram关注我,查看我以前的帖子。我欢迎反馈和建设性的批评。我的一些博客-****

识别和解决模糊的数据科学问题

原文:https://towardsdatascience.com/identifying-and-solving-ambiguous-data-science-problems-d392701a03fa?source=collection_archive---------46-----------------------

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

资料来源:来自 Pexels 的(CC0)。

在数据科学中,实际上是一般意义上的科学,需要解决的问题通常是不清楚的。如果你不从事科学工作,你可能会觉得这很令人惊讶。当你阅读研究论文时,似乎解决论文中提出的问题是该领域自然而然的下一步,但事实往往并非如此,往往需要大量的创造力才能决定回答什么问题。这同样适用于工业,如果不是更多的话。许多公司有大型的数据仓库,但是不知道他们可以用这些数据做什么(也就是说,他们不知道他们应该问的问题),但是没关系!幸运的是,对于公司来说,他们可以雇佣那些发现数据价值的专家——数据科学家。一名优秀的数据科学家能够适应不确定领域的工作,并能够识别和解决为公司带来价值的问题。

就识别和解决这类问题的培训而言,这是一个持续的学习过程,通常是通过经验获得的。对我来说,我目前是一名工业领域的数据科学家,但我主要是在完成博士学位的同时获得了在不确定领域工作的培训。我经常处理由另一位不再在大学工作的研究人员收集的数据集,要解决的问题并不总是很清楚。但这仍然是一个持续的学习过程。

尽管我认为最好是通过经验来学习这些技能,但在这里,我将分享一些我发现在识别和解决模糊的数据科学问题时有用的策略。

1.确定可以通过数据科学解决的高影响问题

通常,在与企业合作时,数据科学家会努力帮助增加利润。可能有许多问题如果得到解决将会增加利润,但由于一天只有这么多小时,因此识别可能受益于数据科学的高影响问题是有益的。当试图确定要解决的高影响问题时,我通常会调查客户的问题,以增加收入或降低成本。几个例子可以是建立一个推荐系统来增加销售或优化分销工作流程来降低成本。应该探索和讨论许多场景。考虑问题的可行性也很重要,这是第二步发挥作用的地方。

2.确定可用数据或资源以收集新数据

在确定了几个候选问题之后,下一步就是确定可以用来解决这个问题的数据。要解决数据科学问题,通常需要有数据。这可能是公司已经拥有的数据,也可能是开源数据集(甚至是两者的组合!).也可能存在最好收集新数据的情况。根据所收集的数据类型,使用亚马逊机械土耳其人(Amazon Mechanical Turk)这样的服务,这可能没有你想象的那么困难。如果数据不完美也是可以的。许多数据科学家都有处理杂乱数据的丰富经验,所以这对我们来说并不新鲜;此外,在第 4 步中,我将讨论我们如何随着时间的推移改进数据集。在回顾了数据来源之后,下一步是选择第一个问题作为目标!

3.解决问题

接下来就是解决问题了!我的大部分工作都涉及训练机器学习分类器,但认识到训练模型通常只是解决方案的一部分非常重要。不仅仅是模型预测,通常模型解释是最重要的步骤。例如,你可以训练一个模型来预测你是否会留住一个客户,但是仅仅预测是没有用的。你需要确定你可以操纵什么特性来改变你的客户的行为。这就是利用模型解释技术和运行模拟经常发挥作用的地方。我在我的前一篇博文中对此进行了更详细的讨论。

4.重复

根据问题的类型,通常即使在问题“解决”之后,仍然有更多的工作要做。首先,在第 2 步中,我提到你经常想要随着时间的推移改进数据集。例如,您可能希望获得用户的反馈,以继续增加数据集的大小。随着数据集的增长和质量的提高,您可能希望尝试更复杂的机器学习方法。此外,关于从用户那里获得反馈,根据问题的类型,您可能必须监控模型漂移(即,确保模型性能保持在预期的水平)。

结论

我希望这些步骤对你有用。再次强调,在不确定的领域变得舒适是一个学习的过程,所以如果你一开始很挣扎也没关系。如果你是一名有抱负的数据科学家,我认为学习这些技能的第一步是简单地认识到许多公司不知道他们应该回答哪些问题来从他们的数据中提取价值,所以你已经完成了第一步!最后,如果你认为你的公司可以从我的服务中受益,请随时联系我(我的联系信息可以在我的网站上找到)。

时间序列分析:使用 ACF 和 PACF 图识别 AR 和 MA

原文:https://towardsdatascience.com/identifying-ar-and-ma-terms-using-acf-and-pacf-plots-in-time-series-forecasting-ccb9fd073db8?source=collection_archive---------1-----------------------

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

尼克·崇在 Unsplash 上的照片

选择候选的自回归移动平均 (ARMA)模型用于时间序列分析和预测,理解序列的自相关函数 (ACF)和偏自相关函数 (PACF)图对于确定 AR 和/或 MA 项的顺序是必要的。虽然 ACF 和 PACF 没有直接规定 ARMA 模型的顺序,但这些图可以帮助理解顺序,并提供一个模型可以很好地适合时间序列数据的想法。在这篇文章中,我主要分享了我在理解 ACF、PACF 图以及它们在选择 ARMA 模型阶数时的重要性方面的经验。

ACF 图是时间序列与其滞后值之间相关系数的条形图。简而言之:ACF 解释了给定时间序列的现值如何与过去(1 个单位的过去,2 个单位的过去,…,n 个单位的过去)的值相关联。在 ACF 图中,y 轴表示相关系数,而 x 轴表示滞后次数。假设,y(t-1), y(t),y(t-1),…。y(t-n) 是一个时间序列在 *t,t-1,…,t-n,*时刻的值,那么 lag-1 值就是 y(t)y(t-1) 之间的相关系数,lag-2 就是 y(t)y(t-2) 之间的相关系数,以此类推。

PACF 是偏自相关函数,解释了序列和滞后本身之间的偏相关性。简单地说,PACF 可以用线性回归来解释,我们从 y(t-1),y(t-2),y(t-3)【2】预测 y(t) 。在 PACF,我们将 y(t)y(t-3) 中未被 y(t-1)y(t-2) 预测的“部分”关联起来。

通过 ACF 和 PACF 图识别 AR 和 MA 订单:

假设时间序列是平稳的,如果不是,那么我们可以执行序列的变换和/或差分,以将序列转换为平稳过程。一旦序列稳定下来,我们就可以绘制 ACF 图和 PACF 图来确定 ARMA 模型中 AR 项和 MA 项的阶数。有时,仅 AR 项或 MA 项就足以对流程建模。表 1 解释了如何根据 ACF 和 PACF 选择 AR 和 MA 术语[1]:

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

表 1:基于 ACF 和 PACF 的 AR 和 MA 术语

ACF 和 PACF 图应一起考虑,以确定该过程。对于 AR 过程,我们预计 ACF 曲线将逐渐下降,同时 PACF 在 p 显著滞后后将急剧下降。为了定义 MA 过程,我们期望从 ACF 和 PACF 图中得到相反的结果,这意味着:ACF 应该在某个 q 数量的滞后之后显示急剧下降,而 PACF 应该显示几何或逐渐下降的趋势。另一方面,如果 ACF 和 PACF 曲线都表现出逐渐下降的模式,那么 ARMA 过程应该被考虑用于建模。

图 1 和 2 示出了给定平稳时间序列数据的 ACF 和 PACF。ACF 显示出逐渐降低的趋势,而 PACF 在一个滞后之后立即降低。因此,图表表明 AR (1)模型将适用于时间序列。

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

图 1:时间序列的自相关函数

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

图 2:时间序列的部分自相关函数

图 3 和图 4 分别示出了平稳时间序列的 ACF 和 PACF。ACF 和 PACF 图表明,MA (1)模型将适用于时间序列,因为 ACF 在 1 个滞后之后切割,而 PACF 显示出缓慢下降的趋势。

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

图 3:时间序列的自相关函数

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

图 4:时间序列的部分自相关函数

图 5 和图 6 显示了另一个平稳时间序列数据 ACF 和 PACF。ACF 和 PACF 都显示缓慢衰减(逐渐降低)。因此,ARMA (1,1)模型将适用于该系列。再次观察 ACF 图:它在两个显著滞后之后急剧下降,这表明 MA (2)将是该过程的良好候选模型。因此,我们应该对该过程使用 ARMA (1,1)和 MA (2)进行试验,然后根据 AIC(赤池信息标准)等性能指标选择最佳模型。

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

图 5:时间序列的自相关函数

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

图 6:时间序列的部分自相关函数

总之,理解 ACF 和 PACF 图对于确定 AR 和 MA 项的顺序以选择合适的候选模型是必要的。

我还写了一篇文章,讨论如何为真实世界的时间序列数据选择最佳的 ARIMA 模型。你可以点击链接阅读:

[## 现实世界的时间序列数据分析和预测

应用 ARIMA 模型预测时间序列数据

towardsdatascience.com](/a-real-world-time-series-data-analysis-and-forecasting-121f4552a87)

另一个有趣的阅读- 如何在预处理步骤中避免数据泄露

阅读马苏姆的每一个故事(以及媒体上成千上万的其他作家)。

你的会员费将直接支持和激励你所阅读的作家。你还可以在媒体上看到所有的故事—【https://masum-math8065.medium.com/membership】

读书快乐!

参考

[1]https://rinterested.github.io/statistics/arima.html

[2]https://r studio-pubs-static . S3 . Amazon AWS . com/19198 _ ABA 6 db cabd 0748159 E3 f 395 cc 02 c0f 0 c . html

使用深度学习识别烛台模式

原文:https://towardsdatascience.com/identifying-candlestick-patterns-using-deep-learning-b7d706726874?source=collection_archive---------2-----------------------

在蜡烛图上训练一个神经网络,然后用它来识别蜡烛图上的模式

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

使用下述方法生成的一些热图(图片由作者提供)。

最近我完成了一个非常有趣的项目,其中我试图使用深度学习来识别大型印度股票图表上的烛台模式,结果非常有趣!这个博客是一个教程,这样你就可以自己尝试这个迷人的“实验”。

我称之为“实验”,是为了强调这是一个实验,并明确表示你不应该根据这里给出的内容做出任何财务决策!

简言之,我们将执行以下步骤(使用 python):

  • 使用 python 库 nsepy 收集多只股票的每日历史股票数据。
  • 将数据转换成蜡烛图。
  • 根据特定方向的百分比运动(收盘价),给蜡烛图贴上“上升”或“下降”的标签。
  • 在数据上训练深度学习模型。
  • 获取感兴趣的区域(基于激活值)并使用热图对其进行可视化。

你可以在这里找到包含这个项目的 Jupyter 笔记本的 GitHub repo。随着我们的发展,我们将需要以下库:

  • nsepy
  • 熊猫
  • numpy
  • matplotlib
  • 法斯泰

我将一段一段地解释代码。所以让我们开始吧!

在上面这段代码中,我们定义了获取历史股票数据并为其绘制蜡烛图的函数。简要概述:

  • 函数“获取数据”将股票代码、开始和结束日期作为输入,给出一个包含股票数据的 Pandas 数据帧。
  • 函数“plot_candles”(最初是由 Daniel Treiman 编写的,我对它做了一些小的改动)接收熊猫数据帧并输出一个蜡烛图。

很抱歉输出这么长,但我希望如此,以便让您了解代码是如何工作的。

在以上部分,我们将完成以下步骤:

  • 使用“获取数据”功能获取历史股票数据(过去两年)。
  • 根据未来五天的走势,决定一个特定的图表是应该分类为“上涨”还是“下跌”。
  • 创建一个 20 天的蜡烛图。
  • 将蜡烛图保存到各自的文件夹中(向上/向下)。
  • 对许多不同的股票重复上述步骤。

我们现在完成了数据收集;开始训练模型吧!

在上面这段代码中,我们正在设置数据,以便我们可以使用它来训练深度学习模型。我们正在完成以下任务:

  • 为模型定型设置批量大小。
  • 将数据分成训练和验证数据集。
  • 对数据应用扩充(以减少过度拟合)。

现在开始训练模型吧!

我们在上面训练了一个深度学习模型(在验证集上的准确率接近 62 %)。我们所做的更详细的概述如下:

  • 使用迁移学习,以适当的学习速率在我们的图表上训练预训练的神经网络。
  • 增加了我们图像的尺寸(之前的训练周期是 224 乘 224,然后我们增加到 352 乘 352)
  • 再次使用迁移学习,以适当的学习速率在新的较大图像上训练先前的网络。

在我们的验证数据集上,我们获得了近 62 %的准确率!

现在,我们将创建热图,突出显示使用激活的神经网络感兴趣的区域。让我们这样做吧!

我们完成了上一节中的以下步骤:

  • 创建了一个要分析的所有图表的列表(这些图表被高度准确地预测)。
  • 从上面的列表中获得一个特定的图像,并将其传输到 GPU。
  • 在向前传递以获得激活的过程中,使用钩子钩住模型。
  • 使用 matplotlib 激活创建热图。
  • 保存了热图。

瞧啊。我们设法训练了一个神经网络,并用它来识别蜡烛图中的模式。

我想再次强调,请不要使用此处给出的任何内容来做出任何财务决定!

希望你喜欢看这个博客,
谢谢你一直读到最后!

附注
如有任何问题或建议,请随时通过 LinkedIn 与我联系。

P.P.S.
我已经生成了许多烛台图表的热图,如果你想看看它们,请随时联系 me

使用数据识别客户

原文:https://towardsdatascience.com/identifying-customers-using-data-7b5cf626a301?source=collection_archive---------68-----------------------

这个项目是作为 Udacity 数据科学家纳米学位项目的一部分进行的。

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

图片由马库斯·斯皮斯克Unsplash 上拍摄

在这个竞争激烈的世界里,对一个公司来说,充分了解客户无疑是在竞争中取胜的首要条件。我们将在本文中讨论的项目围绕着这个想法。分析中使用的数据集由德国公司 Arvato 提供,该公司为全球商业客户开发和实施创新解决方案。问题陈述如下:

一家邮购公司是 Arvato 的客户之一,销售一些有机产品,并希望获得新的客户。为此,他们计划开展一场营销活动,旨在吸引越来越多的人购买他们的产品。现在的问题是如何有效地做到这一点?

我们不想接触到居住在德国的每一个人(非常耗时和低效)或任意锁定目标人群(有失去潜在客户的风险)。相反,如果我们能够以某种方式将更有可能成为顾客的人与其他人区分开来,任务就完成了!这就是数据的力量发挥作用的地方。该公司拥有其现有客户的属性和人口统计信息。德国人也有类似的一组数据。人们可以将客户数据与一般人群数据进行匹配,以识别具有高概率成为公司客户的个人。

战略

你可能已经猜到了,这本质上是一个无监督的学习问题。解决这个问题的一个想法是使用现有顾客和一般人群的可用信息来形成在每种情况下以某一组特征为特征的人群。由于客户和一般人群数据集具有完全相似的结构,因此从这些数据集形成的聚类将是等效的。剩下的问题就简单了。然后,可以使用这些聚类来识别更接近特征空间中的现有客户的普通人群的部分。因此,这些人将成为公司营销活动的目标。

分析数据

在这一节中,我们将整个分析分解成小的子步骤。

1.数据预处理

这是我们分析中最具挑战性和最耗时的部分,更不用说是最重要的部分。我们在这里考虑的数据集总共有 366 个不同的特征,与每个由 id 号唯一标识的个体相关联。数据的预处理包括以下步骤:

  • 每当处理新数据集时,首先要做的就是检查是否有空值。理解基于空值应该保留什么功能以及应该删除什么功能非常重要。这里,我们删除所有超过空值阈值 20%的列和行。

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

图 1:一些特性中空值的百分比

  • 通过查看随数据集一起提供的要素描述文件,我们发现数据集中的一些值被标记为未知

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

图 2:标记为未知的属性值

我们用 NaNs 代替所有这些未知值。在这之后,我们重新检查每一列和每一行中的空值的百分比,这些值可能会由于这种替换而增加。如果发现任何行/列超过阈值,我们就删除它。

  • 如果发现具有高相关性(> 80%)的特征对,则丢弃其中一个以避免信息中的冗余。
  • 我们丢弃基数高(> 15)的分类特征,并在必要时对它们进行编码。
  • 如果有重复的行,我们删除所有的行,只保留第一个出现的行。
  • 我们计算数据集中每个条目的 z 得分,并将 z 得分绝对值大于 3 的条目标记为异常值。如果任何列/行中有显著百分比的异常值(,例如)。,> 10%),我们立即放弃。
  • 使用 scikit-learn 库的估算类的策略最频繁中值(取决于特性)估算数据集的空值。
  • 最后,我们标准化所有的特性。

2.降维

即使在数据清理之后,我们发现数据中仍然存在大量的特征。因此,在尽可能多地保留信息的同时,尝试降低数据集的维度是一个好主意。这可以通过使用主成分分析(PCA)技术来实现,在该技术中,我们将数据集从原始特征空间转换到由不相关主成分跨越的新空间。这些主成分是原始特征的线性组合,说明了数据中的差异。在目前的分析中,我们选择了 150 个主成分来解释数据中超过 85%的方差。

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

图 3:作为主成分数量函数的累积方差

我们发现正相关和负相关的特征都存在于主成分中。

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

图 4:第一主成分中前 5 个正相关和负相关的特征

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

图 5:第一个主成分中的顶部正相关和负相关特征的描述

通过查看特征描述文件,我们发现第一主成分中的顶级特征与个人的财务状况相关,例如,他们拥有多少套房子,拥有多少辆汽车,他们属于社会的哪个阶层,总收入等等。

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

图 6:第三个主成分中最高正相关和负相关特征的描述

另一方面,第三主成分主要由与个人特征相关联的特征支配,例如、年龄、传统心态、尽职尽责、社会参与等。

3.使聚集

最后,是时候根据人们在特征(或主成分)空间中的距离对他们进行分组,为此,我们使用聚类技术,特别是 k 均值聚类。该算法最重要的超参数是要形成的簇的数量,n_clusters。找到这个数的传统方法是使用肘图,肘图是度量‘组内平方和’(wcss)作为组数的函数的分布图。随着聚类数量的增加,wcss(质心和聚类中其他数据点之间的平方距离之和)减少。可以从图中选择最佳的聚类数作为一个点,超过该点,度量不再变化或者变化不显著。

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

图 7:肘图

对于当前的分析,我们选择 12 个聚类,并对人口和客户数据运行 n_clusters=12 的 k-means 算法,以形成由不同特征集表征的聚类。回想一下,我们的目标是确定哪部分人群与现有客户最相似。可以通过比较每个集群中人口和客户的比例来实现这一点。

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

图 8:每个集群中普通人群和客户的比例

如果对于一个聚类,客户部分大于人口部分,则属于该部分特征空间的人更有可能变成公司的客户,因此是公司的目标基础。从上面的图中我们可以看出,在即将到来的营销活动中,公司的目标人群应该是第 3、8、5、6 群,也许是第 11 群(按这个顺序)。

构建预测模型

该项目的最后一部分要求我们建立一个模型,给定一组与个人相关的特征,该模型将能够预测该人对该活动做出积极响应的可能性。提供了两个数据集,一个用于训练,一个用于测试模型。数据集严重失衡,只有很少的样本(~ 1%)来自积极类(,做出回应的人)。

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

图 9:目标变量 y 中类的比例

因此,与其预测一个人属于哪个阶层,不如计算一个人转化为客户的概率更有意义,这样公司就可以瞄准具有高响应概率的人。因此,我们计算 ROC 曲线下的面积(假阳性率对真阳性率)来评估模型的性能。

在此分析中,我们考虑了 4 种分类算法——逻辑回归、随机森林分类、Adaboost 分类,最后是 XGB 分类,并对每种算法执行网格搜索,以找出具有最佳参数集的最佳模型,该模型在网格搜索过程中对遗漏的数据给出最高分。

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

图 10:模型性能的总结

虽然 Adaboost 和 XGB 分类产生几乎相等的 ROC 分数,但我们选择 XGB 分类器,因为它比 Adaboost 分类器花费更少的时间来训练模型。我们模型的一些重要特征(使用 feature_importance_ 属性计算)显示在下图中:

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

图 11:最终模型的前 5 个特性的重要性

显然,功能“D19_SOZIALES”优于其他功能。虽然我们没有这个功能的描述,但它很可能与个人的社会问题有关(感谢谷歌!).类似“GEBURTSJAHR”、“KBA13_HALTER_35”的下一个重要特征与年龄有关,这是关于个人拼车的信息。

唯一剩下的部分是预测测试数据集中每个个体的响应概率。下表显示了我们在测试数据集上运行模型后得到的几个个体(由 LNR 列中的唯一 id 号标识)的响应概率。

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

图 12:测试数据集中一些个体的响应概率

我们可以在哪里改进?

我们在这个项目中处理的数据集包含大量的特征。这使得我们可以利用它们来获得越来越精确的结果。可能需要进一步关注的一些领域如下:

  • 这个项目的主要挑战是数据争论。尽管我们删除了具有大量缺失值的特性,但是我们可以尝试从这些特性中设计新的特性,并编码它们对最终结果的间接影响。
  • 空值的插补可以高度定制化。然而,这需要关于相关特征的更多信息。
  • 应该尝试对分类模型进行更精细的超参数扫描。另外,考虑其他分类算法也是一种选择。
  • 由于我们的数据集是严重不平衡的,所以可以尝试不同的技术来提高少数(,正类,)类的模型性能,简单地过采样少数类和欠采样多数类,使用 SMOTE 技术合成少数类的新示例,等等。

你可以在我的 GitHub 库上查看分析的全部代码。编码快乐!

用 k 均值识别新兴市场

原文:https://towardsdatascience.com/identifying-emerging-market-segments-with-k-means-bf221147528f?source=collection_archive---------47-----------------------

数据如何在疫情过后有所帮助

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

Unsplash 上由 OC Gonzalez 拍摄的照片

EY 的未来消费者指数是一个 8 分钟的简短读数,汇集了 2020 年 4 月 6 日一周内对美国、加拿大、英国、法国和德国 4859 名消费者的调查结果。利用一些相当时髦的数据可视化技术,EY 提出,在新冠肺炎疫情事件之后,将出现五种不同类型的消费者,每种消费者在购买决策方面都有不同的行为和情绪。其中一些人很悲观——大幅削减支出——而一些人非常乐观,随着社交距离限制的逐渐取消,他们会抓住机会增加支出。

除了一般的定性描述之外,我们还不清楚 EY 到底是如何定义这五种类型的(“回归正常”、“谨慎奢侈”、“保持节俭”、“不断削减”和“大力反击”)。然而,它确实让我思考。ey 考虑的两个关键变量是乐观度和收入。显然,乐观与消费者的消费意愿有关,而收入与他们的消费能力有关——两者都会影响个人的购买决策。假设我们可以获得消费者相对乐观程度和收入的定量数据。我们如何根据这些数据,以严格且可重复的方式将客户分组?

k 均值算法

k-means 聚类是一种将多个点分成 k 组的方法。简而言之,该算法搜索 k 个“质心”的空间,并将每个数据点分配给这些质心之一。该算法然后反复迭代,旨在最小化每个点簇内的方差。通过这种方式,我们最终找到了(希望)不同的 k 个组,它们反映了数据中组的真实性质。

举例来说,让我们创建一个数据集,其中有五组,每组 100 名消费者,并在 r 中实现 k-means 算法。假设每组都有一个典型的收入和乐观水平,围绕这些值有一些自然变化。我们可以用图形表示这种情况,如下所示:

[...] # Set seed and generate data for 100 consumers from each groupincomes <- cbind(normal_incomes, extravagant_incomes, frugal_incomes, cutting_incomes, bang_incomes)optimisms <- cbind(normal_optimisms, extravagant_optimisms, frugal_optimisms, cutting_optimisms, bang_optimisms)colours <- c("red", "blue", "green", "orange", "purple")# Set up an empty plotting area
plot(NULL, xlim=c(0,100), ylim=c(0,100), xlab="Income", ylab="Optimism", main="500 surveyed consumers, labelled")# Plot data points
for (i in 1:5){
  points(incomes[,i], optimisms[,i], col=colours[i], pch=3)
}[...] # Add legend

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

有两个变量的情况特别容易思考,因为每个点都位于 2D 收入的某个地方——乐观“空间”。然而,k-means 算法可以应用于任意数量的维度,也就是说,我们可以轻松地扩展我们的模型,以包括第三个变量(可能与消费者居住的国家有关,因为不同的政府采取了不同的措施来应对病毒),第四个变量,甚至更多。

当然,在现实世界中,我们不会事先知道这些群体的特征——我们甚至不知道有多少个群体!所以暂时忘记我到目前为止告诉你的,看看你是否能把下面的数据分组:

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

没那么简单,是吗?确定一些集群是完全可能的,但是有多少个集群,一个集群在哪里结束,另一个集群在哪里开始?问十个不同的人,你会得到十个不同的答案。但是有了 k-means,我们可以采用一种数学的、数据驱动的方法,每次都会给出相同的答案。让我们应用算法,看看我们得到了什么:

[...] # Aggregate data into one matrix with incomes in the first column and optimisms in the second# Fit model using k-means
model <- kmeans(data[,1:2], centers=5)# Retreive centroids
centroids <- model$centers
centroids#     income optimism
# 1 68.76713 58.50722
# 2 43.95596 57.64992
# 3 65.51750 83.71031
# 4 34.73630 34.00436
# 5 39.11255 89.01036# Retreive clusters
clusters <- model$cluster
clusters# [1] 2 2 1 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 5 2 2 2 2 2 2 2 2 2 2 5 2 2 2 2 4 2 2 2 2 2 2 4 2 5 2 2 2 2 2 2 2 2 2 2 5 2 2 5 2 5 1 2 2 2 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 ...

我们可以看到,按照要求,k-means 已经找到了五个质心,并根据每个数据点到质心的距离,将每个数据点分类到五个聚类之一。让我们将我们的结果绘制成图表,以便更好地理解:

# Add k-means cluster result to the data
data <- cbind(data, clusters)# Define function to map cluster number to a colour
map_colours <- function(num){
  colours[num]
}# Apply function to data
clusters_colours <- lapply(clusters, map_colours)# Set up empty plotting area    
plot(NULL, xlim=c(0,100), ylim=c(0,100), xlab="Income", ylab="Optimism")# Plot data points
for (i in 1:500){
  points(data[i,1], data[i,2], col=colours[as.integer(data[i,4])], pch=3)
}

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

最后,进行横向比较:

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

我们可以看到 k-means 总体上做得相当不错——该算法已经能够从乐观程度和收入方面挑出五个群体的一般特征。在这个例子中,我们手头有基本事实,因此我们可以看到 k-means 将一些更悲观的“谨慎奢侈”的消费者分组到“保持节俭”集群的大部分中。虽然我们知道 k-means 在这方面的问题是“错误的”,但这五种类型的消费者之间无疑有重叠的地方。这甚至可能被证明是一种有用的见解——该算法指出了这些消费者之间的相似之处,否则我们可能不会发现。

结论

k-means 算法确实有其局限性,但它可以揭示数据中的模式和趋势,这些模式和趋势可能不会立即被人眼看到。这就是为什么当我们试图理解一个新的和不熟悉的数据集时,聚类算法经常被用在探索性数据分析中。每当我们进行购买时,我们都会继续以惊人的速度产生数据——你可以打赌,随着经济在大流行后的世界中逐渐复苏,将会有无数的分析师使用这样的技术,希望能够弄懂这一切。

更多信息和积分

Andrew Hetherington 是英国伦敦的一名见习精算师和数据爱好者。

  • LinkedIn 上与我联系。
  • 看看我在 GitHub 上摆弄什么。
  • 用于制作本文作品的笔记本可以在这里找到。

图片:由 OC GonzalezUnsplash 上拍摄。

所有的情节和代码输出都是作者使用 RRStudio 创建的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值