TowardsDataScience 博客中文翻译 2019(三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

作为一名新毕业的数据科学家,在 FAANG 找到工作的 10 个技巧

原文:https://towardsdatascience.com/10-tips-on-landing-a-job-at-faang-as-a-new-grad-data-scientist-ac72a4e8eeef?source=collection_archive---------14-----------------------

作为一名新毕业生,我旅途中的小贴士

我找工作的漫长旅程

今年夏天,我作为一名数据科学家在脸书实习,我将返回硅谷。两年前当我进入研究生院时,我从未想过我能在美国找到工作,更不用说在 FAANG 了。

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

Photo by MD Duran on Unsplash

我在中国度过了成长的前 20 年,一切都是那么顺利和按计划进行。高中的时候,那么多人跟我说“现在努力高考,大学就自由了”。这是我唯一的目标,难怪我在选择专业时会惊慌失措,即使我通过了考试。在大学里,我主修统计学,花了两年时间探索自己的兴趣,但仍然不知道自己想做什么。2016 年夏天,我在加州大学伯克利分校上了一门生物统计学课程,故事就是从那时开始的。我仍然记得有一天,当我们经过敦巴顿桥穿过海湾后,优步的司机指给我看脸书的校园和“竖起大拇指”的标志。大三的时候,我遇到了当时和现在的导师,他告诉我实习的重要性。在我大四参加威斯康辛州为期一年的访问项目之前,我做过两次数据分析师的实习,之后又做过一次数据科学家的实习。我甚至不知道如何用 Python 编程,直到我去了麦迪逊,那时我决定加入南加州大学的工程学院。我甚至在开学前就开始找工作了,并在 10 月份签了一份聘书。今年的全职求职比去年的实习求职容易多了,因为我学到了一些经验。

我一直在指导几名本科生和一年级硕士生。我知道大部分的招聘都需要几年的工作经验,也知道作为一名应届毕业生找到一份工作有多难。这里有一些有用的提示。

1.早点开始

重要的事情先来。我无法充分说明这一点。“早点开始,早点结束。开始晚了,你可能永远也完成不了。”这是我一直告诉我的学员的。“早起的鸟儿有虫吃”。如今,一些公司在夏季开放下一年的实习岗位。当它被填满的时候,它们会关闭开口。你知道实习可以带来全职工作。没有准备不是拖延的借口。没有人会有所准备。

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

Photo by You X Ventures on Unsplash

2.积极努力地练习

成就感,儿时的梦想,助学贷款,不管是什么,找到能激励你的东西。设定目标,粉碎目标。

去年我安排了对脸书的第一次采访后,我没有和朋友出去玩,直到采访结束。因为你知道机会有多珍贵,你不想浪费它们。作为应届毕业生,获得面试机会比获得面试机会更难。

确保每天练习面试题。请朋友或专业人士帮你做一次模拟面试,并寻求反馈。你可能会发现一些意想不到的东西,你可以工作。

3.找一个导师

我感谢所有帮助过我的人,尤其是我的导师。行业专家是指出你的错误并为你指路的最佳人选。在非常早期的阶段,他们不一定是你的确切角色,但必须熟悉这个行业,并愿意帮助你。

4.选择一首曲目

我知道看不同的角色很有诱惑力,但请记住,当你专注于一件事时,它更容易完成。当人们告诉我这是在美国找工作最简单的方法时,我曾经考虑转到软件工程。也有人告诉我,无论你选择哪条职业道路,最终都会看到光明。我很困惑,但后来我意识到他们不是我。我是最了解我的人。虽然有更多的机会,但转行 CS 并不一定是一条更容易的路。我应该坚持走我更有信心和经验的路。

其次,数据科学可以是很多东西。商业智能可以是数据科学,机器学习也可以是数据科学。你的兴趣是什么?确保你符合招聘启事中的要求。

5.不要把自己封闭起来

在我有史以来的第一次实习中,我的日常工具是 Excel 和 photoshop(是的。我知道)。当我准备 SQL 的时候我很害怕,我在滴滴出行的第二份工作中经常用到 SQL。但那又怎样?当我知道今年夏天我需要为我的项目做数据工程和 UI 时,我实际上把它看作是一个学习新东西的好机会。谁说数据科学家不能更进一步?在你的舒适区之外多学习总是好的,有时机会会因此而选择你。

6.网络很重要

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

Photo by Brooke Cagle on Unsplash

在脸书和许多其他公司,需要表明这个人是如何认识他们所指的人的。这是有道理的,因为人们倾向于雇佣他们更熟悉和信任的候选人。公司也对那些主动并对他们表现出更多激情的候选人更感兴趣。

如果你还没有注册 LinkedIn,就注册吧。保持您的个人资料更新和专业。Headline 在 newsfeed 帖子中介绍你,你肯定希望这些帖子能吸引读者,让他们点击来了解你。浏览您的个人资料,就像它不是您的一样。标题对你有吸引力吗?体验描述详细吗?

除了与招聘人员或你梦想中的公司的员工联系,人际关系网还包括参与社区活动。和处境相同的人在一起,互相鼓励。

7.利用资源

在互联网时代,你几乎可以在网上找到所有的东西。但是没人会把它交给你。在我的校园里,就业中心每周都会邀请公司进行讲座和信息发布会,但只有少数学生到场。这与 2 号提示相关。只要你有上进心,你也是渴求资源的。

8.拥有数据科学产品组合

简历不是作品集。

Python、SQL、Tableau,一个数据科学家简历上列出的一些最常见的技能。是什么让你脱颖而出?好吧,展示你的项目并“证明”你有能力胜任数据科学家的角色。没有工作经验或其他证据,你的投资组合说明了一切。别担心,如果你对网络编程一无所知,使用网站生成器是完全没问题的。最后但同样重要的是,推广你的投资组合。我在简历后面加了两个二维码,一个加到我的作品集,一个加到我的 LinkedIn 个人资料。

9.跟踪这个过程

我使用 OneNote 跟踪我申请的每份工作、参加的每场面试和参加的每场职业活动。面试后,写下你做得好的地方,你可以做得更好的地方,以及对你来说是新的东西。不要为错误责怪自己,继续前进。

“从过去中学习,活在现在,为未来做准备.”

―奥黛丽·法瑞尔

10.现在祈祷吧

找工作有时需要一点运气。一切都是如此。作为一个数据迷,我认为这是一个概率游戏。朝着你的目标努力,把“n”和“p”都增加,永不放弃!

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

Photo by Steve Halama on Unsplash

改善绘图的 10 个技巧

原文:https://towardsdatascience.com/10-tips-to-improve-your-plotting-f346fa468d18?source=collection_archive---------13-----------------------

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

因为在现实生活的数据科学中,绘图确实很重要

我必须诚实地告诉你:当我学习数据科学时,我完全低估了绘图的重要性。没错,那时候一切都是一团糟:在从头开始学习 Python、思考所有可能的算法和理解一切背后的数学之间,绘图是我的最后一个问题。

为什么不应该呢?我们总是在策划同样的事情。你知道:pairplots、distplots、QQ plots……你在可视化数据时使用的那些图表是理解它的唯一方式。非常有用的图表。但也是非常通用和默认的图表。于是复制粘贴一堆代码成了我那几天最好的朋友。

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

对于我的项目来说,可交付成果总是一个模型。希望能得到一些合理的分数,这要归功于数小时的清理和功能工程。我是参与我的项目的唯一一个人,我的教授们自从把数据给我之后,已经知道了所有关于这些数据的事情。那么我会为谁策划呢?我自己?拜托…没必要!对吗?我比任何人都清楚我每一步想要达到的目标。我不需要向任何人解释任何事情。

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

但是除了这一切,说实话,密谋一点都不花哨。任何人都可以策划。我 60 岁的父亲只用 Excel 就能从帽子里变出一些图表。如果每个人都能做到,当然,这就是不花哨的定义。因为在这里,我的朋友们,我们正在做数据科学和机器学习。大多数人甚至不知道那是什么。正如《哈佛商业评论》杂志所言,这就是为什么我们都如此酷和性感。

问题是 peeps-如果你还没有发现我的过度讽刺,这不是真正的生活是如何工作的。我相信这可能是我沉浸在数据科学中最大的失败:没有足够重视可解释性和可解释性的重要性。你可能是个天才,但是如果你不能向第三方解释你是如何以及为什么会得到那些美妙的预测,那么你可能什么都没有。例如,在 Ravelin Technology ,我们提供基于机器学习的防欺诈解决方案。想象一下,告诉一个客户,我们正在阻止 X%的交易,因为机器学习模型是这样说的,但完全不知道为什么要这样做。对于任何试图最大化转化和销售的电子商务来说,这肯定不是很有吸引力,对吗?想象一下,现在在医疗保健等其他敏感领域也出现了同样的情况……灾难就在眼前。

现在,除了与业务相关的问题,甚至除了从法律角度或从你的业务可能只关心预测的事实来看——无论你如何获得它们,理解算法实际上是如何工作的都会有所帮助。不仅是为了更好地向客户解释结果,也是为了更好地协调数据科学家和分析师的活动。

因此,在现实世界中,情况与我从事学术数据科学项目时的情况完全不同:我从来不是项目中的唯一参与者,我的同事和/或客户通常不太了解我使用的数据。那我现在会为谁策划呢?听起来还没必要吗?大概不会。能够向人们解释你的思维过程是任何数据相关工作的关键部分。这就是为什么复制和粘贴图表是不够的,图表个性化变得非常重要。

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

Te Fight Club

在这篇文章的剩余部分,我想和你分享 10 个基本的、中级的和高级的工具,我发现它们在现实生活中非常有用,可以用来解释你的数据。

我将在下面几行中引用的库是:

  • Seaborn | From: 将 Seaborn 作为 sns 导入
  • matplotlib | From:matplotlib . py plot as PLT

此外,如果您愿意,您可以设置一种风格和您喜欢的格式,如:

plt.style.use(‘fivethirtyeight’)%config InlineBackend.figure_format = ‘retina’%matplotlib inline

说到这里,让我们直接跳到工具:

1。绘制多幅图

你可能会想在一张图中画出几样东西,我们会简单介绍一下。但是其他时候,您可能希望在同一行或同一列中显示不同的图表,相互补充和/或显示不同的信息。

为此,我们将看到一个非常基本却又必不可少的工具:支线剧情。怎么用?很简单。matplotlib 中的图表是使用以下内容构建的:

  • 图形:用于绘制图表的背景或画布
  • 坐标轴:我们的图表

通常,这些东西是在我们的代码的背景上自动设置的,但是如果我们想要绘制几个图,我们只需要以下面的方式创建我们的图形和轴对象:

fig, ax = plt.subplots(ncols=number_of_cols, nrows=number_of_rows, figsize=(x,y))

例如,如果我们设置 ncols = 1,nrows = 2,我们将创建一个大小为 x,y 的图形,只有两个图表,分布在两个不同的行中。剩下的唯一事情就是使用“ax”参数从 0 开始指定不同绘图的顺序。例如:

sns.scatterplot(x=horizontal_data_1, y=vertical_data_1, **ax=ax[0]**);sns.scatterplot(x=horizontal_data_2, y=vertical_data_2, **ax=ax[1]**);

2.轴标签

这可能看起来没有必要,或者不是很有帮助,但是你无法想象如果你的图表有些混乱,或者看到它的人不太熟悉数据,你会被问多少次 X/Y 轴上有什么。按照我们前面的两个图的例子,如果我们想为我们的轴设置一个特定的名称,我们必须使用下面的代码行:

ax[0].set(xlabel=’My X label’, ylabel=’My Y label’)ax[1].set(xlabel=’My second X label’, ylabel=’My second and very creative Y label’)

3.设置标题

如果我们向第三方展示我们的数据,另一个基本但关键的工具是使用标题,它的工作方式与我们之前的轴标签点非常相似:

ax[0].title.set_text(‘This title has to be very clear and explicative’)ax[1].title.set_text(‘And this title has to explain what’s different in this chart’)

4.注释图表中的内容

通常情况下,仅将 y 轴放在图表的右边或左边本身并不清楚。无论是因为所有值之间非常接近,还是因为精度对于被分析的事物非常重要。无论是哪种情况,在图上标注值对增加澄清和自我解释非常有用。

假设现在我们使用支线图,所以我们有几个图表,其中一个是在 ax[0]位置的 Seaborn 柱状图。在这种情况下,获取每个条上的注释的代码有点复杂,但非常容易实现:

for p in ax[0].patches:ax[0].annotate(“%.2f” % p.get_height(), (p.get_x() + p.get_width() / 2., p.get_height()),ha=’center’, va=’center’, fontsize=12, color=’white’, xytext=(0, -10), textcoords=’offset points’)

对于图表中的每个“小块”或条形,代码直到“ha”参数获得条形的位置、高度和宽度,以将值标注放在正确的位置。以类似的方式,我们也可以指定注释的对齐方式、字体大小和颜色,而“xytext”参数指示我们是否希望在某个 x 或 y 方向上移动注释。在上面的例子中,我们将在 y 轴上向下移动文本。

5.使用不同颜色区分标签

在某些情况下,在一段时间或一个数值范围内,我们可能会测量不同种类的对象。例如,假设我们在 6 个月内测量了狗和猫的体重。在期末,我们要画出每只动物的体重,但是分别用蓝色和红色来区分狗和猫。为此,在大多数传统绘图中,我们可以使用参数“hue”来提供元素的颜色列表。

举以下例子:

weight = [5,4,8,2,6,2]month = [‘febrero’,’enero’,’abril’,’junio’,’marzo’,’mayo’]animal_type = [‘dog’,’cat’,’cat’,’dog’,’dog’,’dog’]hue = [‘blue’,’red’,’red’,’blue’,’blue’,’blue’]sns.scatterplot(x=month, y=weight, hue=hue);

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

6.更改散点图中的点的大小

使用上面的同一个例子,我们可能还想在图表中添加动物体重的大小,使用从 1 到 5 的范围。将此额外指标添加到图中的一个好方法是修改散点图的大小,通过“大小”参数将大小分配给新的附加向量,并使用“大小”来调整它们之间的关系:

size = [2,3,5,1,4,1]sns.scatterplot(x=month, y=weight, hue=hue, **size=size, sizes=(50,300)**);

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

顺便说一下,如果像上面的图表一样,图例使情节更难阅读,而不是有所帮助,你总是可以通过设置“legend”参数等于 False 来删除它;)

7.包括一条线来显示数据中的阈值

在现实生活中的许多情况下,数据高于或低于某个阈值可能是问题的信号或错误的警告。如果我们想在图上清楚地显示这一点,我们可以使用以下命令添加一条线:

ax[0].axvline(32,0,c=’r’)

其中:

  • ax[0]将是我们要插入线条的图表
  • 32 将会是画这条线的数值
  • c='r '用红色绘制

如果我们正在处理支线剧情,就像在上面的例子中给相应的轴添加一条轴线一样简单。然而,如果我们不使用支线剧情,我们应该做以下事情:

g = sns.scatterplot(x=month, y=weight, hue=hue, legend=False)**g.axvline(2,c=’r’)**plt.show()

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

8.多 y 轴绘图

这可能是最简单的,但也是最有用的提示之一。

有时,我们只需要在聊天中添加更多信息,除了在图的右侧 y 轴上添加一个新指标之外,没有其他办法:

ax2 = ax[0].twinx()

现在,您可以添加任何您想要的图表,将“ax”参数指向“ax2”

sns.lineplot(x=month, y=average_animal_weight, ax=ax2)

注意,这个例子再次假设你正在处理支线剧情。如果你不是,你应该遵循与上一点相同的逻辑:

g = sns.scatterplot(x=month, y=weight, hue=hue, legend=False)g.axvline(2,c=’r’)**ax2 = g.twinx()**sns.lineplot(x=month, y=average_animal_weight, **ax=ax2**, c=’y’)plt.show()

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

请注意,要做到这一点,您应该在两个图表中为 x 轴设置相同的数据。否则,它们不会匹配。

9.重叠的地块和变化的标签和颜色

在同一个轴上重叠图表很容易:我们只需要为我们想要的所有绘图编写代码,然后,我们可以简单地调用’ plt.show()'来将它们绘制在一起:

a = [1,2,3,4,5]
b = [4,5,6,2,2]
c = [2,5,6,2,1]sns.lineplot(x=a, y=b, c=’r’)
sns.lineplot(x=a, y=c, c=’b’)plt.show()

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

然而,有时重叠会导致混乱,所以我们可能希望个性化我们的图表,使吃得更清楚。

例如,假设您想在同一个图中重叠两个不同样本的身高分布:一个来自您的同事,另一个来自您当地的篮球队。这将是很好的个性化的东西,如两个地块的颜色,并添加一个说明哪个是哪个的图例,对不对?嗯,很简单:

  • 设置“颜色”标签我们可以为每个标签设置特定的颜色。请注意,有时该参数可以简单地更改为“c”
  • 使用’ label ‘参数,我们可以通过简单地在’ x.legend()'之后调用来为它们指定任何要显示的文本

举以下例子:

g = sns.distplot(workmates_height, color=’b’, label=’Workmates’)sns.distplot(basketball_team, color=’r’, ax=g, label=’Basket team’)g.legend()plt.show()

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

10.在条形图中为轴设置订单

最后,一个非常特别的工具,如果你喜欢使用条形图,你可能会遇到这样的问题:你的条形图没有按照你想要的顺序排列。在这种情况下,有一个简单的解决方法,将一个包含您想要的特定顺序的列表传递给“order”参数:

a=[‘second’,’first’,’third’]b=[15,10,20]sns.barplot(x=a,y=b,order=[‘first’,’second’,’third’]);

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

绘图本身就是一个世界,根据我的经验,提高技能的最好方式就是练习。但是我希望当现实世界的数据科学像发生在我身上一样打击你时,这些工具和技巧能帮助你:)

最后,别忘了看看我最近的一些文章,比如我在训练测试分割中犯的 6 个业余错误,或者 5 分钟内完成的 T2 网页抓取。所有这些都可以在我的个人资料中找到。另外,如果你想直接在你的邮箱里收到我的最新文章,只需 订阅我的简讯 😃

回头见!

Python 中级程序员应该知道的 10 个高级概念

原文:https://towardsdatascience.com/10-topics-python-intermediate-programmer-should-know-3c865e8533d6?source=collection_archive---------1-----------------------

想成为一名专业的 python 开发者,请阅读这篇博客,了解 python 中的 10 个高级概念。

  1. Python 中的 Everything Object 是怎样的?
  2. 理解(多重和嵌套)
  3. 扩展关键字参数(*args,**kwargs)
  4. 闭包和装饰器
  5. 生成器和迭代器协议
  6. 上下文管理器
  7. @staticmethod 和@classmethod
  8. 继承和封装
  9. 运算符重载
  10. Python 包和程序布局

我会逐一解释所有的话题。

python 中的一切都是对象吗?

字符串是对象。列表是对象。函数是对象。甚至模块也是对象。任何东西都是对象,因为它可以被赋给一个变量或者作为一个函数的参数传递。

在 Python 中,任何可以(合法地)放在等号右边的东西都是(或创建)一个对象。

> def hello():
      print("say hello")> hi = hello()> hi()
"say hello">hello()
"say hello"

对象:

  1. 一个身份
  2. 一个值(可变或不可变)

Mutable: 当您更改项目时,id 仍然不变。字典,列表

**不可变:**字符串,整数,元组

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

理解

创建集合和可迭代对象的简写语法。

  • 列表理解:
[ expr(item) for item in iterable ]
  • 设定理解:
{ expr(item) for item in iterable }
  • 字典理解:
{ key_expr:value_expr for item in iterable }
  • 生成器理解:
( expr(item) for item in iterable)
  • 用 If-从句理解:
[ expr(item) for item in iterable if predicate(item) ]
  • 多重理解:
[(x,y) for x in range(10) for y in range(3)]
  • 嵌套理解:
[[y*3 for y in range(x)] for x in range(10)]

扩展关键字参数

当在 Python 中调用函数时,你经常不得不在使用关键字参数或位置参数参数之间做出选择。关键字参数经常可以用来使函数调用更加明确。当我们使用关键字参数时:我们经常会忽略参数的默认值。

Def function_name(arg1, arg2=1.0,):
    BODYArg1 => Positional ArgumentArg2 => Keyword Argument
  • 扩展的形式参数语法:

自变量在功能 定义端。

**How we use print, format function?**Ex: 
> print(“one”)> print(“one”, “two”)We are passing any number of argument in print statement.

扩展参数的数据类型:

*args => tuple
**kwargs => dict**these arguments should be pass in sequence.**Def func(arg1, arg2, *args, kwarg1, **kwargv):
    print(type(*args))
    print(*args)
    print(type(**kwargv))
    print(**kwargv)
  • 扩展实际参数语法

自变量在函数 调用方

> print_args(*t)
  1
  2
  (3, 4, 5)

关闭和装饰

在开始闭包之前,我们应该了解局部函数。

  • 局部功能:

函数内部的函数是局部函数。

  • 适用于专门的一次性功能
  • 有助于代码组织和可读性
  • 类似于 lambdas,但更通用
  • 它可能包含多个表达式
  • 可能包含语句

通过 LEGB 规则进行范围解析:
在 Python 中, LEGB 规则用于决定在范围解析中搜索名称空间的顺序。
范围按照层级排列如下(最高到最低/最窄到最宽):

  • Local(L):在函数/类内部定义
  • Enclosed(E):在封闭函数内部定义(嵌套函数概念)
  • 全局(G):在最高层定义
  • 内置(B):Python 内置模块中的保留名称
def func():    
    def local_func():
        a = 'hello, '
        b = 'world'
        return a + b
    x = 1
    y = 2
    return x + y
  • 返回功能:
def outer():
    def inner():
        print('inner')
    return inner> I = outer()
> I()
"inner"
  • 闭包:

维护对早期作用域中对象的引用。

def outer(x):
    def inner(y):
        return x+y
    return inner
> add_plus3= outer(3)
> add_plus3(2)
  5

我们可以使用 closure 来验证函数是否是闭包。

i = outer()  
> i.__closure__
  • 装修工:

修改和增强功能而不改变它们定义。实现为接受并返回其他可调用函数的可调用函数。

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

decorator workflow

我们也可以创建作为装饰者的类和作为装饰者的实例。

发生器和可迭代协议

  • Iterable : 对象可以传递给内置的 iter()函数得到一个迭代器。
  • 迭代器 : 对象可以传递给内置的 next()函数来获取下一项。
iterator = iter(iterable)item = next(iterator)
  • 发电机:

Python 生成器是一种创建迭代器的简单方法。我们上面提到的所有开销都是由 Python 中的生成器自动处理的。

一个生成器是一个函数,它返回一个我们可以迭代的对象(迭代器)(一次一个值)。

如果一个函数包含至少一个 yield 语句,它就成为一个生成器函数。

不同之处在于,当 return 语句完全终止一个函数时,yield 语句暂停该函数并保存其所有状态,然后在后续调用中继续执行。

为什么在 Python 中使用生成器?

  • 易于实施
  • 内存高效
  • 表示无限流
  • 流水线发电机
def PowTwoGen(max = 0):
    n = 0
    while n < max:
        yield 2 ** n
        n += 1

上下文管理器

上下文管理器是一个设计用于 with 语句的对象。

上下文管理器确保资源得到正确和自动的管理。

with context-manager:
    context-manager.begin()
    Body
    context-manager.end()

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

context manager workflow

_ _ 回车 __()

在进入 with 语句体之前调用

绑定到变量的返回值

可以返回任何类型的值

通常返回上下文管理器本身

_ _ 出口 __()

当 with 语句体存在时调用

exit(self,exc_type,exc_val,exc_tb)

@staticmethod,@classmethod

class attributes versus instance attributes:Class A:
    CLASS_ATTRIBUTE = 1
    Def __init__(slef, instance_attribute):
        Self.instance_attribute = instance_attribute

如果需要访问函数中的类属性,最好使用@classmethod。

如果你不需要使用 cls 对象,那么使用@static 方法。

与其他语言不同,在 python 中,静态方法可以在子类中被覆盖。

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

继承和封装

  • 传承 :

继承是一个类获取另一个类的属性的机制。例如,一个孩子继承了他/她父母的特征。通过继承,我们可以重用现有类的字段和方法。因此,继承促进了可重用性,并且是 OOPs 的一个重要概念。

  • 单一继承 :

子类将拥有基类的所有功能,它还可以修改和增强。

子类初始化器想要调用基类初始化器来使整个对象初始化有意义。

class SubClass(BaseClass):

调用其他类初始化器:

  • 其他语言自动调用基类初始化器
  • Python 对待 init()就像对待任何其他方法一样
  • 如果被覆盖,则不调用基类 init ()
  • 使用 super()调用基类 init()

isinstance (实例,类):判断一个对象是否属于指定的类型。

Issubclass ( 子类,基类):确定一个类型是否是其他类型的子类。

  • 多重继承:

定义具有多个基类的类。

Class SubClass(Base1, Base2, …):

python 怎么知道应该调用哪个基类函数?

Python 使用方法 Resolution Order 和 super 来做到这一点。

__bases__ => a tuple of base classes
__mro__ => a tuple of mro ordering

方法解析顺序

确定方法名查找的顺序

  • 通常被称为“MRO”
  • 方法可以在多个地方定义
  • MRO 是继承图的一种排序
  • 其实很简单

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

MRO workflow

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

  • 封装:封装:

请参考本文,了解关于封装的更多细节。

[## python——封装存在吗??

封装是将数据和对数据进行操作的功能打包到一个组件中,并限制…

medium.com](https://medium.com/@manjuladube/encapsulation-abstraction-35999b0a3911) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

操作员超载

Python 运算符适用于内置类。但是同一个操作符对不同的类型表现不同。例如,+运算符将对两个数字执行算术加法,合并两个列表并连接两个字符串。

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

Examples of operator overloading

Python 包和程序布局

是一个可以包含其他模块的模块。

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

modules and packages

sys . pathPython 搜索模块的目录列表。

PYTHONPATH 列出添加到 sys.path 的路径的环境变量。

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

minimal package

1.包是包含其他模块的模块。

2.包通常被实现为包含特殊

init。py 文件。

3.init。py 文件在导入包时执行。

4.包可以包含自己实现的子包

init。目录中的 py 文件。

5.包的模块对象具有 path 属性。

绝对导入: 使用完整路径导入模块。

from test.test import Tester

相对导入: 使用相对路径导入同一个包中的模块。

from .test import Tester

all: 通过模块导入*导入的属性名称列表

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

Recommended project structure

如果你喜欢这篇文章,欢迎你来关注,这样你就不会错过未来的新更新。

数据科学家使用 Jupyter 笔记本的 10 个技巧

原文:https://towardsdatascience.com/10-tricks-for-data-scientists-using-jupyter-notebooks-f28387f73f77?source=collection_archive---------5-----------------------

5 分钟:提高效率 x 简单性 x 生产力

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

当我开始使用 Python 进行数据分析时,我很快发现 Jupyter 笔记本是一个很好的工具,可以为我的代码提供更好的结构。然而,有些事情仍然很烦人。如果我为了更好的可读性而使用标题,较大的笔记本会很快变得混乱。如果我在一个单元格中计算多个值,我只会收到最后一个变量的输出,以此类推…
但是,我们使用的是 Python,其他人也遇到了同样的问题,并找到了很好的解决方案。我想分享其中的一些。

目录:

1.两个数据集并排
2。打印特定单元格
3 的每个输出。改变屏幕宽度
4。Jupyter 扩展
4.1 代码折叠
4.2 可折叠标题
4.3 执行时间
4.4 便笺式存储器
4.5 内核空闲
4.6 Zenmode
4.7 表格美化器

1.两个数据集并排

有时我想并排比较两个较小的数据帧。使用下面的 css 代码片段,您可以调整输出:

CSS = """
.output {
flex-direction: row;
}
"""HTML('<style>{}</style>'.format(CSS))

现在,您可以在一个 Jupyter 单元格中对多个数据帧使用display(df):

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

2.打印特定单元格的每个输出

假设您在一个单元格中计算两个变量(即使这不是最佳实践😉).通常只显示最后一个结果:

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

只需添加以下语法,每个结果都将被打印出来:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

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

3.调整屏幕尺寸

按照标准配置,Jupyter 笔记本电脑可覆盖 60%的屏幕。用一个简短的 css 命令你可以调整宽度(这里是 80%):

from IPython.core.display import display, HTML
display(HTML("<style>.container { width:80% !important; }</style>"))

在下面的屏幕截图中,您可以看到结果:

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

4.Jupyter 扩展

现在我们来到一个非常有趣的话题:Jupyter 扩展。正如我已经提到的,很多人编写扩展来优化笔记本。我将向您展示一些真正有用的数据科学扩展。如果您使用的是 conda,只需键入:

conda install -c conda-forge jupyter_contrib_nbextensions

之后你就可以使用 Jupyter 扩展了。在您通常启动笔记本的菜单中,您也可以选择现在的扩展(红色标记的区域)。我将向您展示 7 个有用的扩展(绿色标记的区域)。您可以通过单击复选框来激活它们:

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

4.1 代码折叠

如果你写了很多代码,过一会儿读起来会很混乱。使用Codefolding你可以隐藏缩进的代码

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

如果你激活扩展Codefolding,一个小三角形会出现在每个单元格的左上角。你可以点击它,缩进的代码将被最小化。

4.2 可折叠标题

可折叠的标题将使每个项目可读性更好。之前的扩展帮助你构建单元格的内容。有了这个扩展,你可以给整个笔记本一个更好的结构:

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

在截图中,您可以看到我为本文创建的笔记本的第一部分。第一个标题由#创建,第二个标题由##创建。类似于Codefolding扩展,你可以使用左上角小三角形的Collapsible heading。你可以点击它,一个标题后的所有内容都会被隐藏:

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

这是一个分层系统,如果您单击 h1 标题的三角形,h2 标题也会被隐藏:

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

4.3 执行时间

一旦您熟悉了用于数据分析的 Python 包,您就会希望提高代码的性能。Jupyter magic 命令%% timeit对于获取一个单元的执行时间非常有用,因为它将被执行 100 或 1000 次,以获取执行时间的有效平均值。对于更快的检查,扩展Execution time非常有用,因为它将始终显示每个输出单元中所需的时间:

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

4.4 草稿栏

有时候想尝试笔记本里的东西。通常,我创建一个单元格,然后删除它。但是在更大的项目中,我有时会忘记删除一些垃圾,我的笔记本中会出现不必要的命令。更好的做法是使用Scratchpad。这个扩展允许创建“抛弃式”代码片段:

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

一旦你激活扩展,你就可以用右下角的小三角形打开你的Scratchpad

4.5 内核空闲

较大的脚本有时需要几分钟甚至几小时来执行。使用扩展Kernle idle,当执行完成时,您将收到来自浏览器的通知:

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

您可以禁用通知或在笔记本顶部更改时间。如果您将时间更改为 30,您将只收到执行时间超过 30 秒的脚本的通知。

4.6 Zenmode

在下面的截图中,你可以看到一个干净的笔记本,没有不必要的菜单。我非常喜欢这个外观,您可以通过激活zenmode模式来获得它:

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

4.7 餐桌美化师

我认为学习 Python 代码是很重要的,并且我认为用语法记录你所做的一切总是更好。使用Table beautifier,您可以通过点击它来对列或索引进行排序。对于快速检查,这非常有用:

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

结论

Jupyter 笔记本非常适合分析,但仍有潜力让它们变得更好。作为数据科学家,有一些真正有用的 css 片段和扩展,让您的工作更加舒适。我希望你喜欢这篇文章。如果你知道任何其他有用的扩展,欢迎发表评论。

如果您喜欢中级和高级数据科学,并且还没有注册,请随时使用我的推荐链接加入社区。

每个数据科学家都应该知道的 10 种可视化

原文:https://towardsdatascience.com/10-viz-every-ds-should-know-4e4118f26fc3?source=collection_archive---------5-----------------------

现实世界中的数据科学

一张图胜过一千句话

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

Photo by Willian Justen de Vasconcellos on Unsplash

在对世界上被茂密丛林或巨大森林覆盖的地区进行多年调查后,有时会发现古代遗迹。考古学家在发现那一刻的感觉为科学家在通过可视化方式查看数据时经常拥有的感觉提供了一个窗口,这种感觉澄清了分析的一个关键方面。

对两者来说,这是一个 突然发现 的时刻!

数据可视化扮演两个关键角色:

1.向普通观众清楚地传达结果。

2.组织数据视图,提出新的假设或项目中的下一步。

毫不奇怪,大多数人更喜欢视觉效果,而不是大量的数字表格。这就是为什么带有有意义解释的清晰标记的情节总是出现在学术论文的前面。

这篇文章着眼于你可以对数据进行的 10 种可视化处理——无论你是想让更广阔的世界相信你的理论,还是打开你自己的项目并采取下一步行动:

  1. 直方图
  2. 条形图/饼图
  3. 散点图/线图
  4. 时间序列
  5. 关系图
  6. 热图
  7. 地理地图
  8. 三维绘图
  9. 更高维的图
  10. 单词云

直方图

让我们从直方图开始,它给我们一个感兴趣的数值变量的所有可能值的概述,以及它们出现的频率。简单而强大,直方图有时被称为数据分布。

从视觉上来说,我们绘制了一个频率表,其中感兴趣的变量被分成 x 轴上的多个范围,我们在 y 轴上显示每个范围中的值的频率。

例如,想象一下,一家公司通过提供因邮政编码不同而异的折扣,使其智能恒温器对消费者更具吸引力。恒温折扣直方图有助于理解其值的范围,以及每个值的频率。

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

Histogram of Thermostatic Rebates in USD

请注意,大约一半的恒温器折扣在 100 美元到 120 美元之间。只有极少数的邮政编码有超过 140 美元或低于 60 美元的折扣。

数据来源此处

条形图和饼图

条形图(和饼图)对于分类变量就像直方图对于数值变量一样。条形图和饼图最适用于只能取固定数量值的变量分布,如低/正常/高、是/否或常规/电动/混合。

酒吧还是馅饼?重要的是要知道条形图在视觉上经常是不准确的。人类的大脑并不特别擅长处理饼状图(在这篇文章中阅读更多关于这方面的内容)。

太多的类别会导致条形图或饼图淹没视觉效果。在这种情况下,考虑选择最高的 N 值,并且只可视化那些值。

下一个例子显示了病人血压的条形图和饼图,按类别分为低、正常和高。

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

Bar and Pie Charts for Patient’s Blood Pressure

数据来源此处

散点图和折线图

最简单的图表可能是散点图。它们在笛卡尔平面上显示数据的二维(x,y)表示,对于检查两个变量之间的关系特别有帮助,因为它们让查看者可以直观地探索任何相关性。折线图是散点图,但用一条线连接所有的点(当变量 y 连续时经常使用)。

例如,假设您想要研究房子的价格与其面积之间的关系。下图显示了一个散点图,y 轴表示房价,x 轴表示面积。请注意该图如何显示变量之间的线性相关程度,一般来说,平方英尺越多,价格越高。

我特别喜欢散点图,因为你可以用颜色和大小来扩展它们的维度。例如,我们可以根据每栋房子里卧室的数量给这些点上色,从而增加一种立体感。

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

将散点图扩展到 3 维或 4 维的一个简单方法是使用气泡的颜色和大小。例如,如果最后一个图中的每个泡泡都用每栋房子的房间数来着色,那么我们在图表中就有了第三个维度。

这里的数据源

时间序列图

时间图是散点图,时间范围在 x 轴上,每个点形成一条线的一部分——提醒我们时间是连续的(尽管计算机不是)。

时间序列图非常适合直观地研究数据随时间变化的趋势、跳跃和转储,这使它们特别受金融和传感器数据的欢迎。

这里举个例子,y 轴代表 2015 年到 2017 年特斯拉股票的每日收盘价。

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

Time Series Plot of Tesla Stock Close Price from 2015–2017

数据来源此处

关系图

如果您的目标是开发一个全面的假设,那么直观地表示数据中的关系会特别有帮助。假设你是一家医疗保健公司的常驻科学家,从事一个数据科学项目,帮助医生加快他们的处方决策。假设有四种药物(A、C、X 和 Y ),医生给每个病人开一种且只有一种药物。您的数据集包括患者处方的历史数据,以及患者的性别、血压和胆固醇。

关系图是如何解读的?数据集中的每一列都用不同的颜色表示。图表中线条的粗细表示两列值之间的关系有多重要(频率计数)。我们来看例子深入解读一下。

药物处方的关系图提供了一些见解:

所有高血压患者的处方药物 A 和 y 大致相同。

药物 C 仅适用于低血压患者。

  • 开了 X 药的病人没有一个表现出高血压。

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

有了这些有趣的见解,你可以开始制定一套假设,并开始新的研究领域。例如,机器学习分类器可能会准确地预测药物 A、C 以及 X 的用法,但由于药物 Y 与所有可能的特征值相关,因此您可能需要其他特征来开始进行预测。

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

Patient Drug Prescription Relationship Chart

数据来源此处

热图

另一种给二维图带来额外维度的酷而有趣的方法是通过热图,它在矩阵或地图显示中使用颜色来显示频率或浓度。大多数用户觉得热图特别直观,因为色彩浓度会引出趋势和特别感兴趣的区域。

下图显示了 IMDB 数据库中电影标题之间的 Levenshtein 距离。每部电影的片名离其他片名越远,它在图表中出现的颜色就越暗,例如(以 Levenshtein 距离计算)超人永远的蝙蝠侠远,但接近超人 2

这一伟大的想象归功于迈克尔·扎格姆。

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

Heat Map of Distances Between Movie Titles

地图

像大多数人一样,我喜欢地图,可以花小时在使用地图可视化有趣数据的应用程序上:谷歌地图、Zillow、Snapchat 等等。如果您的数据包含经度和纬度信息(或另一种按地理位置组织数据的方式(邮政编码、区号、县数据、机场数据等)。)地图可以为您的可视化带来丰富的背景。

考虑前面直方图部分的恒温器折扣示例。回想一下,返点因地区而异。由于数据包括经度和纬度信息,我们可以在地图上显示折扣。一旦我指定了从最低折扣(蓝色)到最高折扣(红色)的色谱,我就可以将数据放到州地图上:

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

Thermostats Rebates in USD

数据来源此处

单词云

大量可供研究的数据以简单自由文本的形式出现。作为数据的第一步,我们可能希望可视化语料库中的词频,但直方图和饼状图确实最适合数字而非文字数据中的频率。所以我们可以转向单词云。

对于自由文本数据,我们可以从过滤掉像“a”、“and”、“but”和“how”这样的停用词开始,并将所有文本标准化为小写。我经常发现,根据您的目标,需要做额外的工作来清理和调整数据,包括删除变音符号、词干等等。一旦数据准备好了,很快就可以使用单词云可视化来了解语料库中最常见的单词。

在这里,我使用大型电影评论数据集为正面评论和负面评论分别绘制了一个词云。

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

Word Cloud From Positive Movie Reviews

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

Word Cloud From Negative Movie Reviews

三维绘图

通过向散点图添加第三维来可视化三维数据变得越来越普遍。这些图表通常受益于交互性,因为旋转和调整大小可以帮助用户获得有意义的数据视图。下一个示例显示了一个二维高斯概率密度函数,以及一个用于调整视图的控件面板。

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

2D Gaussian Probability Density Function

这里的数据源

更高维的图

对于高维数据,我们希望将四个、五个或更多特征的影响可视化。要做到这一点,我们可以首先利用前面提到的任何可视化技术,投影到二维或三维空间。例如,想象一下在我们的恒温器折扣图上添加第三维,其中每个点延伸成一条垂直线,指示该位置的平均能耗。这样做将得到四个维度:经度、纬度、折扣金额和平均能耗。

对于高维数据,我们经常需要使用主成分分析(PCA)或 t-随机近邻嵌入(t-SNE)来降低维数。

最受欢迎的降维技术是 PCA,它基于找到使数据的线性变化最大化的新向量来降低数据的维度。当数据的线性相关性很强时,主成分分析可以在几乎不损失信息的情况下显著降低数据的维数。

相比之下,t-SNE 是一种非线性降维方法,它降低了数据的维度,同时近似保留了原始高维空间中数据点之间的距离。

考虑一下 MNIST⁴手写数字数据库的这个小样本。该数据库包含数千幅从 0 到 9 的数字图像,研究人员用这些图像来测试他们的聚类和分类算法。这些图像的大小是 28 x 28 = 784 像素,但是通过 t-SNE,我们可以将 784 个维度减少到两个:

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

t-SNE on MNIST Database of Handwritten Digits

数据来源此处

这里有十种最常见的可视化类型,每一种都有有意义的例子。这篇博客的所有可视化都是使用沃森工作室桌面完成的。除了 Watson Studio Desktop,一定要考虑像 R、Matplotlib、Seaborn、ggplot、Bokeh 和 plot.ly 这样的工具——仅举几例。

祝您好运,让您的数据成真!

[1]斯蒂芬很少。(2007 年 8 月)。“把馅饼留着当甜点”。https://www . perceptual edge . com/articles/visual _ business _ intelligence/save _ the _ pies _ for _ dessert . pdf

[2]迈克尔·扎加姆和豪尔赫·卡斯塔尼翁(2017 年)。基于物理学的数据科学协作方法中等岗位

[3]安德鲁·马斯、雷蒙德·戴利、彼得·范、黄丹、安德鲁·吴和克里斯托弗·波茨。(2011).学习用于情感分析的词向量。 计算语言学协会第 49 届年会(ACL 2011)。

[4] Yann LeCun 和 Corinna Cortes。(2010). MNIST 手写数字数据库。在 http://yann.lecun.com/exdb/mnist/有售

特别感谢史蒂夫·摩尔对这篇文章的大力反馈。

推特:@ castan LinkedIn:@jorgecasta

机器学习将影响你生活的 10 种方式。

原文:https://towardsdatascience.com/10-ways-machine-learning-will-affect-your-life-522889a72c8?source=collection_archive---------13-----------------------

机器学习的兴起:我们的日常生活正在发生怎样的变革?

过去,机器体验是一种拖累。按一个按钮,拉一个杠杆,然后完成任务。几十年后,随着随后的计算创新,机器已经转变为超智能、自我学习、自动化的版本,正在席卷人类的景观。

重塑机器以个性化人类体验的底层技术是机器学习(ML),这是人工智能的一个分支,也是当今数字优先世界的一个热门词汇。本质上,它是关于编程机器通过利用大数据来注入自我学习的能力。分析从各种接触点提取的信息,并用于预测可操作情报的意图。

好消息是,的最新技术正在不断进步,彻底改变我们日常生活的方方面面。当语音控制的个人助理——亚马逊的 Echo 和 Alexa——推出时,人类第一次接触到了机器学习。随着智能家居趋势的加快,这些设备成为了一种新常态。无人驾驶汽车是典型的科幻幻想,但现在并不是遥远的未来。这些新时代的车辆旨在减少人类劳动,并在世界各地测试其效用。

最初,智能机器的想法是荒谬的。代表人类行动的机器并不常见。然而,随着机器学习在我们日常生活中的实现和发展,人类的景观正在发生根本的变化,以及如何变化。

下面,我们提到了机器学习正在彻底改变我们生活的 10 种方式。让我们开始吧。

健康

目前,机器学习被应用于快速患者诊断和加速医疗保健服务。尽管这些机器受到了“不够人性化”的审查,但它们提供的准确度和精确度是无与伦比的。

从管理、记录保存到成熟的诊断和治疗,ML 有能力分析即将到来的危机,并将其与众多其他方案进行比较,以获得正确的治疗和程序。这种比较节省了时间,并为决定性的医疗方法铺平了战略道路。

此外,机器学习可以使手术机器人在医疗程序中帮助医生,同时确保最小的侵入和高精度。这一成就可以提高外科手术的成功率,加快周转时间,降低成本。在医疗保健领域,ML 可以成为高效诊断、研究和治疗的关键推动者,从而强调该领域的整体转型。

根据麦肯锡的一份报告,制药业的停滞将会结束,医疗保健行业将开始转型之旅,仅在美国就可以节省 1000 亿美元。

交通

今天的交通行业受机器学习的影响很大。该技术通过部署传感管理和自动化,在消除鲁莽驾驶带来的威胁方面发挥了重要作用。这使得车辆能够理解周围的参数,并在需要时采取预防措施,以确保乘客的安全。

中国正在测试其城市的无人驾驶公交车,而谷歌和劳斯莱斯已经合作设计并在 2020 年前推出世界上第一艘无人驾驶船只。这艘船将利用谷歌的云机器学习引擎来了解大海和周围的物体。这将实现船舶的远程控制,并最终减少运输中涉及的资源。

除了车辆,机器学习很快可以用于交通管理和防止道路交通拥堵。目前,中国和新加坡正在引领创新,创造可以帮助司机选择畅通路线的算法。

BFSI —银行和金融服务业

几家银行和金融机构正在使用基于 ML 的复杂算法来分析和预测贷款风险,并评估应用程序的质量,从而帮助他们做出明智的决策。它还有助于通过分析检测欺诈和诈骗。

其他传统行业青睐机器学习,以缓解其转型瓶颈,并为利益相关者(包括客户)创造更好的用户参与。语音识别、聊天机器人和预测分析正在帮助弥合金融机构和潜在客户之间的差距。如今,客户可以在一天中的任何时间联系企业,并对聊天机器人的即时、实时回复感到放心。这不仅节省了时间,还改善了组织的客户体验。

例如,JP 摩根大通投资于技术,并在最近采用了一种内部元素-合同情报(COiN)平台,该平台用于"分析法律文件并提取重要数据点和条款"。这是机器学习如何影响金融集团目前工作方式的众多例子之一。

教育

诚然,机器人无法取代教师,但机器学习可以从整体上为他们的教学和教育方法提供多样性,这肯定可以帮助他们。多元智能能力用于评估孩子的学术理解,分析他/她感知知识的方式,并创建定制的学术计划,以帮助关注特定学生的健康属性。

这些算法分析测试结果,并创建一个独特的评分系统,可以节省教师的时间,并帮助完善儿童教育模块。更不用说,ML 对有残疾和学习差距的学生有极大的帮助。

除了教学之外,ML 还简化了管理职责,并通过其自动响应、定制软件等帮助教育机构创建一种有组织的方法来管理学生和员工。这一切都是为了打破流程,减轻组织机构的负担。

定律

律师仍然很忙。因此,自动化他们的日常活动可以将他们从多余的任务中解放出来,并帮助他们专注于为手头的案件创建可靠的解决方案。

机器学习带来了这种自动化,并给传统行业带来了新的变化。它增强了文件、它们的处理,并且还分析它们以用于证明和研究,这可以帮助律师提取相关信息,而不必花费时间在书籍和法律文件上。他们还可以帮助系统化的运作任务,如保持与听证会并驾齐驱,并注意即将到来的日期。

曼梯·里可以策划律师如何审查他们的案件,并有希望加快案件,否则需要几个月甚至几年才能解决。

机器学习与未来

简而言之,机器学习正在解决所有行业的复杂性,如果我们根据大量统计数据,几乎所有行业都将接受基于算法的工作并简化其处理过程,这是非常合理的。机器学习是未来,那些选择跳过这一进化元素的人可以确信他们即将衰落。

弄乱数据的 10 种方法

原文:https://towardsdatascience.com/10-ways-to-mess-up-your-data-804b0e27ff5?source=collection_archive---------30-----------------------

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

或者:如何惹恼你的数据分析师/科学家,即使那就是你

至少一半的数据分析工作是清理、争论和整理——实际上有点像为人父母。当您真正需要完成真正的工作时,仅仅以可用的形式存储数据就可以使事情变得更加顺利。另一方面,把基本要素搞错会导致很多令人头疼的事情。

不要做这些事情:

不要:在一列中组合数据类型

最常见的是:“51 (22%)”。停下来。为百分比制作第二列,或者将它们放在另一个表中,或者在需要时即时计算它们。不要把这些东西混在一起,因为你永远无法对它们执行操作。

感叹:随机改变列命名约定

如果一个表显示“单价”,另一个表就不应该显示“单价”。另一个常见的犯罪者:随意使用缩写,或者不使用,或者使用不同的缩写,即“学生入学”或“Stu Adm”或“StdAdmiss”。请停下来。

帮助:随机更改大写和大小写规则

如上,不要在“单价”、“单价”、“单价 _ 单价”和“单价.单价”之间切换。挑一件事,坚持下去。

请不要:在列名中使用空格和奇怪的字符

没有括号,没有斜线,没有散列。看在上帝的份上,不要逗号或制表符。理想情况下,避免任何空白,这样我就不必引用每个列名。

为什么?用“新”或“旧”标记一列

有人在某个时候认为这是个好主意。他们也可能认为他们会在一年后回来,并摆脱旧列。现在为时已晚,因为已经使用“boss_custom_roi_formula_new”为关键报告编写了 50 个查询。明年会发生什么?" boss _ custom _ ROI _ formula _ new 2 updated "。

如果重要的话,用一个具体的日期。使用一些其他版本或控制代码。或者更新旧的计算并适当地调整元数据。别这么做。

呻吟:去掉 NAs,因为它们很丑

在计数数据中,从缺失数据中估算出一个零是常见且合理的。但是在大多数情况下,数据确实是未知的,必须进行特殊处理。在一些计算中,他们会被包括在内,在一些计算中不会;现在不要在数据阶段做出决定,让以后的用户,包括您自己,适当地处理 NAs。你把他们剥光不是在帮他们的忙。

Ugh:在数据列中放置百分比符号或单位符号

那么它们就不会被当作数字来处理,以后你必须把它解析成两个值。将 50%编码为 0.5,以此类推。

新手提示:忘记指定单位

以上并不意味着你应该完全忽略单位。例如,您可能有一个“长度”列。什么长度?米?英寸?语境总不能告诉你,三年后你也不会记得。将其存储在另一列或元数据中。

停止:创建重叠和模糊的垃圾箱

假设您导出直方图的数据并对数据进行绑定,如下所示:

箱 1:1–10
箱 2:10–20
箱 3:20–30

现在 20 进了什么鬼地方?二号箱还是三号箱?我不知道!指定准确的包含值,或左/右利手,或使用括号符号。

倒数第一:丢掉数据然后跑

我的意思是,不要在某个地方保存一个随机的带有一些值的平面文件,不要标明它是什么,它来自哪里,是谁制作的,或者将来如何更新。

你需要文档,可能是元数据的形式。某处应该有一些指示:

  • 数据源。不仅仅是负责数据的实体,还包括您访问数据的方式和时间。这种接触可以采取各种形式。你对某人有特殊要求吗?它发表在标准报告中了吗?还是运行了 SQL 查询?如果你运行了那个查询,它在哪里?
  • 描述哪些假设、限制和定义适用于这些数据。至少找出任何可能让其他人犯错的模糊之处。例如,数据显示“销售”,但表格只显示了东部地区的销售情况,这一点要非常清楚。
  • 记录数据的时间(与访问数据的时间分开)。用户数量是记录在日历年的年末,还是年初?你做调查的时候。财政年度结束?这可能因数据类型的不同而有所不同,并且可能会在以后产生影响!

这是数据治理的最基本层面。但是避免这些“不要”会节省很多沮丧和浪费的时间——就像确保第一次就把尿布穿好,而不是在凌晨 2 点。

人工智能 100 天

原文:https://towardsdatascience.com/100-days-of-artificial-intelligence-3a38c75b6a5d?source=collection_archive---------29-----------------------

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

Photo by @davidclode

100 天内每天写一篇关于人工智能的文章

100 天前,我决定在 500 天内每天写一篇关于人工智能的文章。因为这是第 100 天,我现在已经完成了目标的五分之一。我写的东西比以前任何时候都多,并且能够专注于一个主题。这是一次非常令人羞愧的经历。这一点的亮点远远超出了写作,在这篇文章中,我将提到大声思考的好处;我写作中的一些线索的总结;以及我将要写的东西。我已经达到了一个里程碑,我很自豪我成功地朝着更好地理解人工智能迈出了这一小步。

大声思考你关心的话题

我经常写作的直接好处是成为一名更好的作家。现在我已经有规律地写作 100 天了,但我绝不认为这是我得到的最大的好处。中国有一句话,在这方面让我产生了共鸣。

请教别人一次是 5 分钟的傻子,从不请教别人是一辈子的傻子— Qǐngjiào biérén yīcì shì 5 fēnzhōng de shǎzi, cóng bù qǐngjiào biérén shì yībèizi de shǎzi

问问题的人是五分钟的傻瓜;不问问题的人永远是傻瓜。

然而,我不认为一个人永远是个傻瓜——倾听很重要。然而,在学习社会科学领域不同学科的编程时,我开始对这种技术发展提出如此广泛的问题,这让我觉得不那么愚蠢了。

读书和做事时大声思考有明显的好处。我将列举几个以我的经验对学习过程有帮助的例子:

  1. 朋友、教授和同事给我发来与我感兴趣的主题相关的文章链接。
  2. 被一系列来自不同背景的人问及关于你当前想法的关键问题。
  3. 接近文本可能意味着被不同身份的其他作者接近,以便与另一个受众进行对话或写作。
  4. 挑战自己可以激发他人通过写作来表达自己,这可能会揭示你尚未发现的精彩方面。
  5. 回顾过去和现在来判断你的写作,回顾在某个特定的时刻你是谁,你现在是什么。

想要成为一名更好的作家,不仅仅是语法正确或文字华丽。写作是对你是谁的诠释,是别人对你所想的解读。文字能传达你的意图,因为它在阅读之外连接到读者。我是如此幸运和幸运地体验到写作可以超越我的直接期望,为此我很感激。

感觉人工智能

当你面对两个词*‘人工智能’*时,很难知道从何说起。我花了前 50 天考虑人工智能的一般方法,写下我能找到的一切。接下来的 50 天,我一直专注于人工智能安全,试图将这一领域的想法与气候危机联系起来。一路走来,毫无疑问,我好几次觉得自己一无是处,或者像个傻瓜一样,有时只是路过。

如果我继续探索这个领域,这个过程很可能会重复。我必须拥抱未知,才能了解我不知道的东西——或者在未知的未知中我不知道的东西。当我写作的时候,缺乏清晰的发现让我每天都很兴奋,不确定性在某种意义上是确定的。只要我继续成长,我不需要长得很快。

不怕慢, 就怕停 — bù pà màn, jiù pà tíng

不怕成长慢,就怕停滞不前。

理解需要时间,我还没说完。我还有 400 天的时间,但是在这之后还有一辈子。我遇到过几个研究人工智能的研究人员,他们几乎从我出生之前就开始研究人工智能,或者一直在积极地编程。我所欣赏的学者和专业人士将他们的知识传授给了我,我将尽我所能发扬光大,尽我所能为社会做贡献。尽我所能。

因此,为了总结我在 50 天内探索的两个主题,我想说以下内容。

  • 人工智能(AI) 是一个让人又爱又恨的概念,一个与人类或非人类毫无关系的模糊词。一个人不仅仅是一系列程序化的行为,然而我们也是这样。随着机器学习新技术的出现,人工智能的可持续性也出现了问题。不负责任地使用技术会加剧气候危机,尤其是当大型技术公司自我监督或自我评估时。
  • 人工智能安全必须超越网络安全和可能存在的威胁。此外,它还关注机器学习技术的扩散和数据量的增长带来的环境后果、外部性或后果。我们在技术背景下狭义地谈论安全,通常没有这些观点或治理。当一些公司从“用户”转向“公民”焦点时,这种对话的变化至关重要。我们必须开发新的方法、法规和实践,以适当的方式解决这些问题。

试图将 100 篇文章缩减为两段是很奇怪的,但我尽了最大努力,我希望这对你有价值。你可以通读全部 100 篇文章,但是我不认为大多数人有机会或时间这样做。我正在做一个小项目,将这些知识整理成一个更好的格式,很快就会公布。如果你愿意以任何方式提供帮助,我恳请你的耐心和帮助。

我从这里去哪里或者写什么?

我告诉自己,我应该每天做更多的编程,并把它与我的写作联系起来。因此,在接下来的 100 天里讲述 Python,这种最著名的编程语言之一,对我来说是有意义的。100 天致力于使用定性和定量方法的社会科学家的机器学习,听起来像是一个有趣的挑战,我想接受。

100 天的 Python 和数学的确挑战了我的极限,事实上是在推动它们。我对用 Python 导航、写关于 Python 的文章或用 Python 编程一点也不舒服。因此,在我看来,这是最好的着手方式之一。在接下来的 100 天里,每天探索代码库和浏览一些 Python 代码不会让我成为一个伟大的程序员,但是它会让我成为一个稍微好一点的程序员。

如果你在这种情况下对我的写作感到失望,我的文章没有达到你认为必要的水平,我道歉。我想问一下,如果你读了这本书,你能帮助我理解和学习会不会更好。

写作时什么最重要?

写作时最重要的是:不要太执着。正如你可能已经猜到的,我不能说我完全生活在这条线上,或者它与我目前的行为一致。然而,我认为这是我在这个特殊时刻所能想到的最重要的方面。

你可以纠结于你的错误,担心每个人都会注意到你有多糟糕。你可能会纠结于自己对某个话题缺乏了解,几乎可以肯定有人在说你的写作不好。一旦一篇文章最终出版,你可能会纠结于你应该写些什么,然后再回去没完没了地修改。这一切都很好。

然而最重要的是,你可以沉迷于写作而不是爱情。

这是所有与写作相关的困扰中最具毁灭性的。当你在键盘上打字的时候,你看到你爱的人想要你的注意。对于一个作家来说,忽视爱情是最大的罪过。

忘记为你爱的人感到骄傲,并通过你的行动告诉他们他们有多棒,这是不对的。在所有这些问题上,我都是有罪的,如果我要继续写 100 或 400 天,这是我必须改变的事情。

当达到一个里程碑时,习惯上要感谢某人,有很多人让这种学习经历有了回报。

我想首先对我的妻子说一声谢谢,她总是理解我,并且有着我无法理解的耐心。我要感谢我的家人,感谢他们通过如饥似渴地阅读我的文章来支持我。我要感谢我的同学挑战我的假设,感谢我的教授质疑我想法的基础。最后,我的朋友们,你们给了我分享和挑战自我的信心:谢谢你们。

这是#500daysofAI 的第一个 100 天。

人工智能 100 天

1。定义 AI—# 500 days ofai:
https://medium . com/@ alexmoltzau/500-days-of-artificial-intelligence-1-191 CB 486921 b?source = friends _ link&sk = 887 e 8744 ed 51 e 477458 AE 60d 2859 dbad

2。一篇关于应用人工智能和可持续城市的论文: https://medium . com/@ alexmoltzau/an-Essay-On-Applied-Artificial-Intelligence-and-Sustainable-Cities-463 FAE 866 d77?source = friends _ link&sk = 23 a53 C2 db 129 bdda 4 f 243 BD 1c ee 9188 a

3。人工智能资助的一些当前问题: https://medium . com/@ alexmoltzau/some-Current-Issues-In-Funding-of-ethical-Artificial-Intelligence-a7be 9 ca 1a 178?source = friends _ link&sk = 70ba 1570388643 fc 8334 f 305 D4 EBD 706

4。人工智能领域专利: https://medium . com/@ alexmoltzau/patents-In-The-Field-of-The-Artificial-Intelligence-2019-52 db 9 b 03 Abe 6?source = friends _ link&sk = effdefe9c 85481794 fedad 27d 053990 e

5。AI for Good 与 AI for Bad —发表于创业: https://medium . com/swlh/AI-for-Good 与 ai-for-bad-71627e3d7849?source = friends _ link&sk = 7ed 4065 FD 7913 db8b 71354 f 3480 F2 b 25

6。阿根廷和乌拉圭的 AI 治理: https://medium . com/swlh/AI-Governance-in-Argentina-and-Uruguay-aeb 68417 db 93?source = friends _ link&sk = d 352 D3 f 641 fcafc 9 b 45649 a 9035 cf 15b

7。AI 领域的三位作家: https://medium . com/@ alexmoltzau/three-Writers-In-The-Field-of-AI-44 f14 c0e 3402?source = friends _ link&sk = 3610 e 4980 c 85 f 65d 70 e 791d 5 af 082248

8。斯堪的纳维亚 AI 策略 2019 —发表于《成为人类: https://medium . com/@ alexmoltzau/斯堪的纳维亚-AI-Strategies-2019-16 ecec 9f 17 DC?source = friends _ link&sk = 46 ECB 92 fa 21 edd 4a 3268037 c 7 FD 7 b 926

9。社会科学家与 AI —发表于 AI 社会研究: https://medium . com/AI-Social-Research/Social-Scientists-and-AI-1d9d 97 a 5246?source = friends _ link&sk = fb29 f 5178 E3 C4 b 34 b 7 EC 56082 bfc 3 e 47

10。10 对 AI 的思考:
https://medium . com/@ alexmoltzau/10-thinks-on-artificial-intelligence-e94c 6c 533270?source = friends _ link&sk = 1d 9868554318868 DCE 78 D1 d 7 e 973 e 58 c

11。Spacemaker AI 的崛起与崛起——发表在《走向数据科学:
https://towardsdatascience . com/the-Rise-and-Rise-of-space maker-AI-5c 800 a 001 CAA?source = friends _ link&sk = f 820 a 79 f1 d 7 e 5 a3 a9 b 6708099 e 31 c 363

12。不等式与 AI —发布于创业: https://medium . com/@ alexmoltzau/inequalities-and-AI-255 c28 a 706d 4?source = friends _ link&sk = 540641 BD 952 b 87 C2 F7 b 8672 ACC 70 ca 0b

13。人工智能与宗教:
https://medium . com/@ alexmoltzau/artificial-Intelligence-and-Religion-7 aebd 77 f 95 f 1?source = friends _ link&sk = e 765 EB 857 cc 905410 EFA 1884433 db 94d

14。AI 上下文感知引擎: https://medium . com/@ alexmoltzau/AI-Contextual-Awareness-Engine-283 cfbf 2280?source = friends _ link&sk = 64d 482122 c 97895 a 68 EB 57 f 679935 fab

15。A Noob 在批判我的算法: https://medium . com/@ alexmoltzau/a-Noob-Is-criticing-My-Algorithm-7c 0 BF 585758 f?source = friends _ link&sk = ce 1165 e 59 AEC 6 f 8665 b 246 A8 be 177 ee 9

16。 虹膜。AI 你的科学助手—发表于初创: https://medium . com/swlh/iris-AI-Your-Science-Assistant-60 eefd 3628 ab?source = friends _ link&sk = ade 9119 c 43 DD 4634 E1 f 10 ca 37 EFE 4b 15

17。数字不安全:
https://medium . com/@ alexmoltzau/ai-网络安全-区块链和气候危机-a10880046cd?source = friends _ link&sk = D1 a7 ff 36975422 c8 aa 05 b 0 E1 DD 293496

18。瑞士的人工智能: https://medium . com/@ alexmoltzau/artificial-Intelligence-in-Switzerland-a 2d 6391 b 7 c 4?source = friends _ link&sk = 4f3de 129 c 60 EEC 480 a6f 632008524980

19。水与人工智能
https://medium . com/@ alexmoltzau/水与人工智能-a7cf2ac23c17?source = friends _ link&sk = bfb 2c 3 e 8 c 81 a 558023 f 3232 e 46473 e 74

20。人工智能与音乐:
https://medium . com/@ alexmoltzau/artificial-Intelligence-and-Music-f3f3b 1421529?source = friends _ link&sk = BC 218 c8 f 48 FB 7 ea 3c a 43962 b5 DCD 3473

21。# 500 daysofai 20 天后: https://medium . com/@ alexmoltzau/500 daysofai-after-20-days-99 daf 69 a8f 02?source = friends _ link&sk = AFA 3992 D5 e 96 befd 4c 318 E3 f 6 EFE 48 c 2

22。日常生活与微预测: https://towardsdatascience . com/daily-Life-and-micro prediction-f76c 1721872 a?source = friends _ link&sk = a5ae 0 af 21348 e 80 b 0 cf 482 fc 30856 a 73

23。偏向香蕉?🍌 https://medium . com/zero-equals-false/biased-bananas-957 f 335 ec2?source = friends _ link&sk = 2 ACD 54689734 e 95 DCD 50022 DC 40 beffe

24。AI 与九种智能形式
https://towardsdatascience . com/AI-and-Nine-Forms-of-Intelligence-5cf 587547731?source = friends _ link&sk = 62970 b5 ed8c 29279 e 1069657304 c526 b

25。利用人工智能提高生活质量的多模态老年护理系统: https://medium . com/@ alexmoltzau/multimodal-animal-Care-Systems-Using-Artificial-Intelligence-to-Improve-Quality-of-Life-992 de 2980787?source = friends _ link&sk = ed 622 b 591d 2445 FB 0 DBE 39 Fe 9 B4 ebb 7

二十六。来自古德温的故事 https://medium . com/@ alexmoltzau/tales-From-goodwind-d 4403 C1 da 48 b?source = friends _ link&sk = 7b 59 cf 627 b 8 cabc 3 df 0476 CD 09285 c 23

27。人工智能研究中心(CAIR) https://medium . com/@ alexmoltzau/the-Centre-for-Artificial-Intelligence-Research-cair-5 C1 F4 a 0 a 440d?source = friends _ link&sk = 33 E3 b 01d 9d 180 a1 de 8 F2 E0 b 605 c 09968

28。定性数据科学家
https://towards Data science . com/the-Qualitative-Data-Scientist-E0 EB 1 FB 1c EB 9?source = friends _ link&sk = 816 b5 c 2278239 Abd 478346 ec5f 3023 af

29。实体产品设计中的 AI https://medium . com/@ alexmoltzau/AI-in-Physical-Product-Design-e 67 c 02 A8 C2 c 1?source = friends _ link&sk = 9 fcad 1 f 438 c 0 BF dcb 082622786925 e37

30。非常人造的诗
https://medium . com/@ alexmoltzau/非常人造的诗-1e690f8f097?source = friends _ link&sk = c 36 e 9 f 4 E1 f 226d 966 b 918 b 97913 b 1222

31。人工智能 30 天
https://medium . com/@ alexmoltzau/30-Days-of-Artificial-Intelligence-96b 56 b 1966 e 6?source = friends _ link&sk = 2ed 9253d 507 be 094357 DD 4c 0 c 07 B3 Fe 5

32。AI 与冒名顶替综合征
https://towardsdatascience . com/AI-and-The-Imposter-Syndrome-BF 66 E1 daf 8d 8?source = friends _ link&sk = 8e 168 Fe 5d 71 b 939 D5 f0ac 43557883623

33。新锐中文创业智能音箱 Startup Maybe
https://medium . com/@ alexmoltzau/the-New-Chinese-Smart-Speaker-Startup-Maybe-3b 290 D6 cc 5c 3?source = friends _ link&sk = 80389 Fe 70 DFA 8 b 0 e 500 b 724 c 80 f 892 e 7

34。人工智能物联网
https://medium . com/@ alexmoltzau/artificial-Intelligence-of-Things-97278 f 810 d8a?source = friends _ link&sk = 592 b 357 a 75d 3 e 76 DC 0 c 0 adcc 2 Fe 81760

35。数据白
https://towardsdatascience.com/databaiting-d26cad4c49ca?source = friends _ link&sk = DD C5 a5 ed 46 c 4947 FB 1010 e 50 c 112d

36。AI 即服务
https://towardsdatascience . com/AI-as-a-Service-b 465 DDC 0 c 7 e 0?source = friends _ link&sk = CD 53 b7a 877301333 D4 f 7671540 c8 e 910

37。数字暴力与 AI
https://medium . com/@ alexmoltzau/digital-Violence-and-AI-8300 dee 795 c 9?source = friends _ link&sk = BCA 08914176 ab b5 c8 c 983 cc 408 c 1486

38。以艾的名义住手!
https://medium . com/forward-artificial-intelligence/stop-in-the-name-of-ai-490 B1 CDA 26 b?source = friends _ link&sk = DBF 7 cdd 8 b 35 da 8 b 06 a3 FD 9b 31762 ed 37

39。Google AI 和半监督学习的发展
https://towardsdatascience . com/Google-AI-and-Developments-in-Semi-Supervised-Learning-5b 1 a4 ad 29d 67?source = friends _ link&sk = DDC 7 B1 d 106980109 b 8699 b 187 ee 39191

40。无监督增强数据半监督学习的进步
https://towardsdatascience . com/advances-in-Semi-Supervised-Learning-with-Unsupervised-Data-augmentation-fc 1 fc 0 be 3182?source = friends _ link&sk = cbac 033 D5 f 98 b5 ff 54 daf 4547 a 3d 0 ace

41。半监督学习中静悄悄的革命是如何改变行业的?
https://towardsdatascience . com/how-is-the-quiet-revolution-in-semi-supervised-learning-changing-the-industry-4a 25 f 211 ce 1 f?source = friends _ link&sk = 5d 489 e 00953626 AC 206 eceee 8 AC 3c 5 fc

42。40 天伴随 500 天的 AI
https://medium . com/@ alexmoltzau/40 天伴随-500 天的 ai-a05167e9ac69?source = friends _ link&sk = 364 ef 2e 465d 53 cf 076 c 0 ba 9 FB 4079 c 64

43。用警句拯救野生动物 AI
https://medium . com/zero-equals-false/saving-Wildlife-with-警句-ai-32db125e4e22?source = friends _ link&sk = 08d 4 ab 5 ab 4c 951519 e8d 7 fa 5519 f 01 f 9

44。Google Federated Learning and AI
https://towardsdatascience . com/Google-Federated-Learning-and-AI-64c 6 E4 e 4 e 22 f?source = friends _ link&sk = 45176 a2f 883275 f 562669 a 7931190 cf1

45。人工智能与养老
https://medium . com/swlh/artificial-Intelligence-and-Pension-f 94c 6 f 4915 ee?source = friends _ link&sk = 2d ca 013 AE 1 ee 10728 ab3b 6771 E0 d0a 8 f

46。使用 FaceApp 进行数据绑定
https://medium . com/zero-equals-false/data baiting-with-face app-1d 810089 f 61d?source = friends _ link&sk = e 034427 c 03 a 753 FDD 2 b 88 fbf 03877d 4

47。走向社会数据科学
https://towardsdatascience . com/走向-社会-数据-科学-f90c5c020855?source = friends _ link&sk = 2c 86 ddf 5 dcdef 6 f 055843 D3 f 01771 bed

48。脸书 vs 欧盟人工智能与数据政治
https://towardsdatascience . com/Facebook-vs-EU-Artificial-Intelligence-and-Data-Politics-8 ab 5b a4 Abe 40?source = friends _ link&sk = 756 BBC 8 cf 12 D7 Bab 4c 83 f 6b 802 abdf 9 e

49。人工智能与公平
https://medium . com/@ alexmoltzau/artificial-Intelligence-and-Fairness-75c 2490 e8d 57?source = friends _ link&sk = 32fc 4151778 EDB 664 EB 79 DD 57e 712118

50。极右翼极端主义和 AI
https://medium . com/@ alexmoltzau/极右翼极端主义-和-ai-ef93d55c6dee?source = friends _ link&sk = 64 f 67 ba 00148 ddfd 563 ad 14 af 37d 57 c8

51。走向人工通用智能
https://medium . com/data series/open ai-or-closedai-FAE 7 BDD 0 fcff?source = friends _ link&sk = 4b 572783 e9ff 49 add 07 E4 AEF 3 ded 34 c 3

52。辩论 AI 安全辩论
https://towards data science . com/distribution-the-AI-Safety-Debate-d93e 6641649d?source = friends _ link&sk = 55e 9229 db 0464 a 53 C5 b 27d 715 c 79 B1 fa

53。脸书如何定义与人工智能相关的恐怖主义:
https://towardsdatascience . com/Artificial-Intelligence-and-Terrorism-in-social-media-cf 166 adaf 78 e?source = friends _ link&sk = 2bd 40d 725 ee 8 f 99 a 91181272 BF 20 cfde

54。人工智能中的避免副作用和奖励黑客
https://towards data science . com/avoiding-Side-Effects-and-Reward-Hacking-in-Artificial-Intelligence-18c 28161190 f?source = friends _ link&sk = b71f 8915 DC 595 Fe 44 CBD eeb 2 f 7 d0a 735

55。AI 安全与气候危机
https://medium . com/swlh/AI-Safety-and-the-Climate-Crisis-DD 232 af 145 a 2?source = friends _ link&sk = 6f 039 ba 378 b 8269 CAD 8276 F3 cf 7858 f 0

56。用机器学习缓解气候变化
https://towardsdatascience . com/用机器学习缓解气候变化-197f09c00fac?source = friends _ link&sk = 22 C6 f 39 C3 fbf 7 fa 34 a 12 ab 91 fbb 42 CB 7

57。用机器学习适应气候变化
https://medium . com/@ alexmoltzau/adaptation-to-Climate-Change-with-Machine-Learning-47421 CD 04387?source = friends _ link&sk = 91 aed 82 ad 9 c 85320 c 179633 ef 900184 c

58。AI 安全与社会数据科学
https://towardsdatascience . com/AI-Safety-and-Social-Data-Science-527 C2C 576 a 98?source = friends _ link&sk = 23c 6 f 786 de 9571012 aeec 56d 9 ad CFF 74

59。人工智能与挪威性别配额
https://medium . com/swlh/artificial-Intelligence-and-Norwegian-Gender-Quotas-11d 8d 9 BF 114 a?source = friends _ link&sk = 1217743d 41 CBF C1 DD 4 efad 588143769 a

60。AI +安全与 DNV-GL
https://towardsdatascience . com/AI-Safety-with-DNV-GL-826500 a401a 7?source = friends _ link&sk = a5d 372109d 613 BAE 39 ABC 3a 4486 e 4248

61。人工智能&旁观者
https://medium . com/@ alexmoltzau/人工智能-旁观者-8185ed9367b7?source = friends _ link&sk = 770916644 EC 3 feb 299 e 2512 AC 1852 a 20

62。AI 安全到底考虑不考虑工作安全?
https://becoming human . ai/does-ai-safety-consider-job-safety-or-not-f 21af 695824 e?source = friends _ link&sk = e5e 9 a 69612 afae 433 e 31571 BC E0 ba 412

63。斯坦福大学 AI 安全中心
https://medium . com/data series/center-for-AI-Safety-at-Stanford-University-FCE 999 f 12 BC 8?source = friends _ link&sk = 00 BF 743 b 0 aed 34d 57 B3 c 9829 be 33125 c

64。非常人造诗# 2
https://medium . com/@ alexmoltzau/非常人造诗-2-f0f2fde5450a?source = friends _ link&sk = 6 fc 0 be 6733 f 236 ab 6179 C4 ACC 0032d 99

65。人工智能伦理与世界统治
https://towardsdatascience . com/artificial-Intelligence-Ethics-vs-World-Domination-7 cf2a 5734151?source = friends _ link&sk = 43 D1 f 42 DC 31 c 89 d3b 4410 C3 a3 A0 de 271

66。人工智能与近期十亿美元投资 2019
https://medium . com/data series/artificial-Intelligence-and-Recent-Billion-Dollar-Investments-2019-759 e 78 b 042 ad?source = friends _ link&sk = 698504869969768 DD 65 CEC 8 BC 8 cf 8306

67。人工智能与信任
https://becoming human . ai/artificial-Intelligence-and-Trust-e 2 BC 1 AC 548?source = friends _ link&sk = 301 a1 D6 d 95 f 8660 f 48 b 8d 9 e 576d 55d 73

68。安全人工通用智能
https://towardsdatascience . com/safe-Artificial-General-Intelligence-29 CB 4 ad 0814 e?source = friends _ link&sk = 3827586 b 6571324 e19f 63177 FD 5022 FB

69。关于高级 AI 的顶级神话
https://medium . com/@ alexmoltzau/the-Top-Myths-About-Advanced-AI-9961 eb1 f 6987?source = friends _ link&sk = 7 fc 705 f 4096 addfc 059513067 dffe 383

70。AI 安全与设计理解人类真正想要什么
https://medium . com/@ alexmoltzau/AI-Safety-and-design-to-Understand-What-Humans-Want-adcd 3455 d0c 0?source = friends _ link&sk = 905 ACF 0832 aa 754280 ABC 3c 47 a9 b 277 b

71。人工智能 70 天
https://medium . com/@ alexmoltzau/70-days-of-Artificial-Intelligence-d 2522 f 209 EC 7?source = friends _ link&sk = ca a3 f 87d 22504 c 7d 37 b 466 DD 147 a19 e 1

72。人工智能与 UNDP
https://towardsdatascience . com/artificial-Intelligence-and-the-UNDP-779 b 50 de 9 ACD?source = friends _ link&sk = 15b 4720 FB 4210392 b 6 e 79 aab 48 fac 223

73。艾元素
https://medium . com/@ alexmoltzau/elements-of-AI-b 68 FFB 60526 a?source = friends _ link&sk = 391 dee 2 b 6b 14 ce 1 e 2751 dbb 664 c 40 a 64

74。AI 安全——你如何防范对抗性攻击
https://towards data science . com/AI-Safety-How-Do-You-Prevent-Adversarial-Attacks-ede 17480 a24d?source = friends _ link&sk = 6412985 e 912 CB 5 e33 a 407490d 342991 a

75。人工智能领域内的解决方案有多安全?source = friends _ link&sk = 6 D3 FEC 62 c 29 bb 188 BAF 42 b 98974 c 3d 43

76。AI 安全与法律技术
https://medium . com/data series/artificial-intelligence-and-law tech-4d 7181 a 03202?source = friends _ link&sk = 034 ca 8 e 79398847 BF 9 CAC 61 c 2 Fe 53 f 46

77。人工智能与生物技术
https://medium . com/datadriveninvestor/artificial-Intelligence-and-Biotechnology-c 787 c 02 f 4d 62?source = friends _ link&sk = 3 f 276 dab 183 c 40 aa 2087 cc 3 e 558 b 85 e 9

78。评测人工智能
https://medium . com/@ alexmoltzau/evaluating-Artificial-Intelligence-5ca 22 e 9 f 9 BDB?source = friends _ link&sk = 671 d0 f 39 ee 1 fa 7 f1 dfed de 982 ed 0 a 714

79。AI 与集体行动
https://towardsdatascience . com/AI-and-Collective-Action-ce2c 15632911?source = friends _ link&sk = 19 a68a 623 FB 02 B3 ACD 04 f 8758 ff 9 ea 26

80。塞伦盖蒂的 AI 安全
https://medium . com/zero-equals-false/AI-Safety-in-the-the-Serengeti-8 a2 c 9 DCF 174 a?source = friends _ link&sk = 20 af 45 a 84 ab 409407 cd5d 9587 DC 937 af

81。英国与人工智能
https://medium . com/@ alexmoltzau/United-Kingdom-and-Artificial-Intelligence-1a 97 ad 37 AC 17?source = friends _ link&sk = CFD 651518 c8 d9 ba 43 C6 e 30300 DFB 8 CD 5

82。80 天人工智能
https://medium . com/@ alexmoltzau/80-days-of-Artificial-Intelligence-3dc 55749 d6e 6?source = friends _ link&sk = 00 CBF cc 1225 b 2 b 8 e 8 ce 88d 891d 604681

83。DeepMind 联合创始人请假
https://towardsdatascience . com/deep mind-联合创始人-请假-59730259f2a4?source = friends _ link&sk = e 25 DDB 5 E8 e9 b 928418 b8ee 077320 fc9 f

84。人工智能与可持续发展
https://medium . com/@ alexmoltzau/artificial-Intelligence-and-be-Sustainable-c 963 e 10 e 8 a 49?source = friends _ link&sk = 378 AC 80312 c6b 6894 b 288419 DD 48968

85。AI 安全与智债
https://medium . com/datadriveninvestor/AI-Safety-and-Intellectual-Debt-f3c 6380 BD 0a 8?source = friends _ link&sk = 494787995 FD 43 de 6 dbb 0 a 7 a 5 ecadb 811

86。每个计算机科学学位都应该要求开设网络安全课程吗?
https://medium . com/@ alexmoltzau/should-every-computer-science-degree-require-a-course-in-cyber-security-b79ec 4948 e 69?source = friends _ link&sk = 32 BF 4 BC 918 e 63379176 f 812d 7d 4d f1 e 0

87。埃隆·马斯克和马云在 2019 年 8 月上海世界人工智能大会上的辩论:
https://medium . com/@ alexmoltzau/elon-Musk-and-Jack-MAS-Debate-at-World-Artificial-Intelligence-Conference-in-Shanghai-2019-8-c1d 8970 fac 05?source = friends _ link&sk = 3329262 f 86 e5a 152 aa 2722 c 369 ACF 90 e

88。探索 AI 上的伙伴关系:
https://medium . com/@ alexmoltzau/exploring-the-Partnership-on-AI-9495 ff 845 a 39?source = friends _ link&sk = a3b 87883 bb 0975978 bc3a 8615 c 85 DC 73

89。人工智能与非营利组织:
https://towardsdatascience . com/artificial-Intelligence-and-non-profit-E6 cdaaae 166 f?source = friends _ link&sk = 3d 8b 684 c 139 ebb 42 f 342 BD 49334 CD 92d

90。参与式规划中的人工智能:
https://medium . com/ai-social-research/artificial-Intelligence-in-participant-Planning-5934 c 8779 e 93?source = friends _ link&sk = b 911 da 08 ce 85 f 969 b 39438 a 076 b5 BD 49

91。代码的投机执行:
https://medium . com/@ alexmoltzau/speculative-Execution-of-Code-FD 06 c 20 BBB 8?source = friends _ link&sk = 72243 ab 0 CD 7 BC 39 e 79808 af B4 a 6 a3 ea 9

92。人工智能与森林管理:
https://medium . com/odsc journal/artificial-Intelligence-and-Forest-Management-50f 480 b 56325?source = friends _ link&sk = a 50 D1 af 97210032739 f 34 c 318d 9711 f 2

93。什么是迁移学习:
https://medium . com/@ alexmoltzau/what-is-Transfer-Learning-6 ebb 03 be 77 ee?source = friends _ link&sk = fc 1 af 22d 1877 D7 f 566 f 93 D8 c8 CFB 149 e

94。在社会科学和计算机科学之间:
https://medium . com/ai-Social-research/in-Between-Social-Science-and-Computer-Science-532383 de 9 f 73?source = friends _ link&sk = c 865 dbfe 1529745 E1 cbda 964 DC 266 c 01

95。非常人造诗# 3:
https://medium . com/@ alexmoltzau/非常人造诗-4-8f 87 b 6 CFG 408?source = friends _ link&sk = 81a 062 CB 3 bad 63 F5 a55a 826282909388

96。为什么是数字孪生?
https://medium . com/@ alexmoltzau/why-digital-twin-4f 5796795 a0d?source = friends _ link&sk = 7012 f 0 EB 5 db 69d 4 e 632 b 45933 f 7 b5 DC 3

97。Google 的 AI for Social Good:
https://medium . com/@ alexmoltzau/Googles-AI-for-Social-Good-ab 88 b 5 BCF 1 b 3?source = friends _ link&sk = d6c 8 D2 fc 35760 fc 42045 b 98d 352 ce 106

98。人工智能与理解时间:
https://medium . com/swlh/artificial-Intelligence-and-understand-Time-735711777072?source = friends _ link&sk = 65e 48365 c 00041 E4 ce 368 e 139 edd 1d 8d

99。人工智能与数据公民权:
https://medium . com/@ alexmoltzau/artificial-Intelligence-and-Data-Citizenship-a 1602 BD 3b 31 c?source = friends _ link&sk = b 861805177 ac6b 06275d 926 a4 e 16 ee7a

100。人工智能 100 天(今天)

如果你对中国人感到好奇,那是因为我正在学习普通话,而且我对中国的历史、政治和文化有浓厚的兴趣。

这是第 500 天的第 100 天。我目前第 100-200 天的重点是 Python 编程。如果你喜欢这篇文章,请给我一个答复,因为我确实想提高我的写作或发现新的研究,公司和项目。

数据扩充速度提高 1000 倍

原文:https://towardsdatascience.com/1000x-faster-data-augmentation-b91bafee896c?source=collection_archive---------11-----------------------

有效学习数据扩充策略以提高神经网络性能。

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

Effect of Population Based Augmentation applied to images, which differs at different percentages into training.

在这篇博客文章中,我们介绍了基于人口的增强(PBA),这是一种快速有效地学习最先进的方法来增强神经网络训练数据的算法。PBA 与之前在 CIFAR 和 SVHN 上的最佳结果相匹配,但使用的 比计算 少一千倍,使研究人员和实践者能够使用单个工作站 GPU 有效地学习新的增强策略。你可以广泛使用 PBA 来提高图像识别任务的深度学习性能。

我们讨论来自我们最近论文的 PBA 结果,然后展示如何在 Tune 框架中的新数据集上轻松运行 PBA。

为什么您应该关注数据增强?

深度学习模型的最新进展在很大程度上归功于近年来收集的数据的数量和多样性。数据扩充是一种策略,使从业者能够显著增加可用于训练模型的数据的多样性,而无需实际收集新数据。裁剪、填充和水平翻转等数据扩充技术通常用于训练大型神经网络。然而,用于训练神经网络的大多数方法仅使用基本类型的增强。虽然已经对神经网络体系结构进行了深入研究,但是很少关注发现强类型的数据扩充和捕获数据不变性的数据扩充策略。

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

An image of the number “3” in original form and with basic augmentations applied.

最近,谷歌已经能够通过一种新的自动化数据增强技术 AutoAugment 在 CIFAR-10 等数据集上推动最先进的准确性。自动增强已经表明,先前的工作仅使用一组固定的变换,如水平翻转或填充和裁剪,会在桌面上留下潜在的性能。AutoAugment 引入了 16 种基于几何和颜色的变换,并制定了一个增强策略,该策略在特定幅度级别选择最多两种变换应用于每批数据。这些更高性能的增强策略是通过使用强化学习直接在数据上训练模型来学习的。

有什么蹊跷?

自动增强是一种非常昂贵的算法,它需要训练 15,000 个模型来收敛,以便为基于增强学习的策略生成足够的样本。样本之间没有共享计算,学习 ImageNet 增强策略需要花费 15,000 英伟达特斯拉 P100 GPU 小时,学习 CIFAR-10 策略需要花费 5,000 GPU 小时。例如,如果使用谷歌云按需 P100 GPU,发现一个 CIFAR 策略将花费大约 7500 美元,发现一个 ImageNet 策略将花费 37500 美元!因此,在新的数据集上进行训练时,一个更常见的用例是转移预先存在的已发布策略,作者显示这种方法效果相对较好。

基于人口的增长

我们的数据增强策略搜索公式,基于人口的增强(PBA ),在各种神经网络模型上达到类似的测试精度水平,同时利用三个数量级的较少计算。我们通过在 CIFAR-10 数据上训练一个小模型的几个副本来学习增强策略,这需要使用 NVIDIA Titan XP GPU 五个小时。当在较大的模型架构上使用 CIFAR-100 数据从零开始进行训练时,该策略表现出很强的性能。

相对于训练大型 CIFAR-10 网络收敛所需的几天时间,预先运行 PBA 的成本是微不足道的,并且显著提高了结果。例如,在 CIFAR-10 上训练金字塔网络模型需要在 NVIDIA V100 GPU 上超过 7 天,因此学习 PBA 策略仅增加 2%的预计算训练时间开销。对于 SVHN 来说,这个开销甚至会更低,不到 1%。

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

CIFAR-10 test set error between PBA, AutoAugment, and the baseline which only uses horizontal flipping, padding, and cropping, on WideResNet, Shake-Shake, and PyramidNet+ShakeDrop models. PBA is significantly better than the baseline and on-par with AutoAugment.

PBA 利用基于群体的训练算法来生成增强策略时间表,该时间表可以基于当前的训练时期进行调整。这与独立于当前纪元编号应用相同变换的固定增强策略形成对比。

这允许普通工作站用户容易地试验搜索算法和增强操作。一个有趣的用例是引入新的增强操作,可能针对特定的数据集或图像模态,并能够快速产生定制的高性能增强时间表。通过消融研究,我们发现学习的超参数和调度顺序对于良好的结果是重要的。

增强计划是如何得知的?

我们使用基于群体的训练,对 16 个小型广域网络模型进行群体训练。群体中的每个工人将学习不同的候选超参数计划。我们从零开始转移最佳执行时间表来训练更大的模型,从中我们得到我们的测试误差度量。

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

Overview of Population Based Training, which discovers hyperparameter schedules by training a population of neural networks. It combines random search (explore) with the copying of model weights from high performing workers (exploit). Source

在感兴趣的目标数据集上训练群体模型,从所有设置为 0 的增强超参数开始(不应用增强)。在频繁的间隔中,“利用-探索”过程通过将高绩效工作者的模型权重复制给低绩效工作者来“利用”高绩效工作者,然后通过干扰工作者的超参数来“探索”。通过这个过程,我们能够在工人之间大量共享计算,并在不同的训练区域瞄准不同的增强超参数。因此,PBA 能够避免为了达到高性能而训练数千个模型来收敛的成本。

示例和代码

我们利用 Tune 内置的 PBT 实现来简化 PBA 的使用。

我们用自定义探索函数调用 Tune 的 PBT 实现。这将创建我们的 ResNet-40–2 模型的 16 个副本,并对它们进行时间复用训练。每个副本所使用的策略时间表被保存到磁盘上,并且可以在终止后被检索以用于训练新的模型。

您可以按照以下位置的自述文件运行 PBA:https://github.com/arcelien/pba。在 Titan XP 上,只需要一个小时就可以在 SVHN 数据集上学习一个高性能的增强策略时间表。在自定义数据集上使用 PBA 也很容易:只需定义一个新的数据加载器,其他一切就都就绪了。

非常感谢 Eric Liang、Richard Liaw、Daniel Rothchild、Ashwinee Panda、Aniruddha Nrusimha、Daniel、Joseph Gonzalez 和 Ion 在撰写本文时提供的有用反馈。请随时在 Github 上与我们联系!

[1]何大一,梁,杨,阿比尔,陈曦,,《基于人口的增强:增强政策时间表的高效学习》 (2019),机器学习国际会议(ICML) 2019

没有 Python 多重处理,并行 Python 速度快 10 倍

原文:https://towardsdatascience.com/10x-faster-parallel-python-without-python-multiprocessing-e5017c93cce1?source=collection_archive---------0-----------------------

更快的 Python,无需重构代码

虽然 Python 的多重处理库已经成功地用于广泛的应用程序,但在这篇博客文章中,我们发现它在几个重要的应用程序类别中表现不佳,包括数值数据处理、有状态计算和带有昂贵初始化的计算。有两个主要原因:

  • 对数字数据的低效处理。
  • 缺少有状态计算的抽象(例如,无法在独立的“任务”之间共享变量)。

Ray 是一个快速、简单的框架,用于构建和运行解决这些问题的分布式应用。关于一些基本概念的介绍,请看这篇博文。Ray 利用 Apache Arrow 提供高效的数据处理,并为分布式计算提供 task 和 actor 抽象。

这篇博客文章对三个不容易用 Python 多处理表达的工作负载进行了基准测试,并比较了 Ray 、Python 多处理和串行 Python 代码。请注意务必始终与优化的单线程代码进行比较。

在这些基准测试中,比串行 Python快 10–30x, 比多处理快 5–25x*,比大型机器上的这两个快 5–15x**。***

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

On a machine with 48 physical cores, Ray is 9x faster than Python multiprocessing and 28x faster than single-threaded Python. Error bars are depicted, but in some cases are too small to see. Code for reproducing these numbers is available below. The workload is scaled to the number of cores, so more work is done on more cores (which is why serial Python takes longer on more cores).

基准测试使用 m5 实例类型在 EC2 上运行(m5.large 用于 1 个物理内核,m5.24xlarge 用于 48 个物理内核)。运行所有基准测试的代码可从这里获得。缩写片段包括在这篇文章中。主要区别在于,完整的基准测试包括 1)计时和打印代码,2)预热 Ray 对象存储的代码,以及 3)使基准测试适应较小机器的代码。

基准 1:数字数据

许多机器学习、科学计算和数据分析工作负载大量使用大型数据阵列。例如,一个数组可能代表一个大型图像或数据集,应用程序可能希望有多个任务来分析该图像。高效处理数字数据至关重要。

下面 for 循环的每一遍使用 Ray 花费0.84 秒**,使用 Python 多处理花费7.5 秒,使用串行 Python 花费24 秒(在 48 个物理核上)。这种性能差距解释了为什么可以在 Ray 上构建像 Modin 这样的库,而不能在其他库上构建。**

射线看代码如下。

Code for a toy image processing example using Ray.

通过调用ray.put(image),大数组被存储在共享内存中,并且可以被所有工作进程访问,而无需创建副本。这不仅适用于数组,也适用于包含数组的对象(如数组列表)。

当工人执行f任务时,结果再次存储在共享内存中。然后当脚本调用ray.get([...])时,它创建由共享内存支持的 numpy 数组,而不必反序列化或复制值。

这些优化之所以成为可能,是因为 Ray 使用了 Apache Arrow 作为底层数据布局和序列化格式,以及 Plasma 共享内存对象存储

使用 Python 多重处理的代码如下所示。

Code for a toy image processing example using multiprocessing.

这里的区别是 Python 多处理在进程间传递大型对象时使用 pickle 来序列化它们。这种方法要求每个进程创建自己的数据副本,这增加了大量的内存使用和昂贵的反序列化开销,Ray 通过使用 Apache Arrow 数据布局和零副本序列化以及等离子存储来避免这种情况。

基准 2:有状态计算

需要在许多小工作单元之间共享大量“状态”的工作负载是对 Python 多处理提出挑战的另一类工作负载。这种模式非常常见,我在这里用一个玩具流处理应用程序来说明它。

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

On a machine with 48 physical cores, Ray is 6x faster than Python multiprocessing and 17x faster than single-threaded Python. Python multiprocessing doesn’t outperform single-threaded Python on fewer than 24 cores. The workload is scaled to the number of cores, so more work is done on more cores (which is why serial Python takes longer on more cores).

状态通常封装在 Python 类中, Ray 提供了一个 actor 抽象,这样类就可以在并行和分布式环境中使用。相比之下,Python 多处理并没有提供并行化 Python 类的自然方法,因此用户经常需要在map调用之间传递相关状态。这种策略在实践中可能很难实现(许多 Python 变量不容易序列化),而且当它起作用时可能会很慢。

下面是一个玩具示例,它使用并行任务一次处理一个文档,提取每个单词的前缀,并在最后返回最常见的前缀。前缀计数存储在 actor 状态中,并根据不同的任务而变化。

这个例子用 Ray 的 3.2s ,Python 多处理的 21s ,串行 Python 的 54s (在 48 个物理核上)。

射线版本如下图。

Code for a toy stream processing example using Ray.

Ray 在这里表现得很好,因为 Ray 的抽象符合当前的问题。这个应用程序需要一种在分布式环境中封装和改变状态的方法,而 actors 符合这个要求。

多重处理版本如下。

Code for a toy stream processing example using multiprocessing.

这里的挑战是pool.map执行无状态函数,这意味着在一个pool.map调用中产生的任何变量,如果您想在另一个pool.map调用中使用,都需要从第一个调用中返回,并传递给第二个调用。对于小对象来说,这种方法是可以接受的,但是当需要共享大的中间结果时,传递它们的成本是令人望而却步的(注意,如果变量是在线程之间共享的,这就不正确了,但是因为它们是跨进程边界共享的,所以必须使用像 pickle 这样的库将变量序列化为一个字节串)。

因为它必须传递如此多的状态,多处理版本看起来非常笨拙,最终只实现了比串行 Python 小的加速。实际上,您不会编写这样的代码,因为您不会使用 Python 多重处理进行流处理。相反,您可能会使用专用的流处理框架。这个例子表明 Ray 非常适合构建这样的框架或应用程序。

有一点需要注意,使用 Python 多处理有很多方法。在这个例子中,我们与Pool.map进行比较,因为它给出了最接近的 API 比较。在这个例子中,通过启动不同的进程并在它们之间设置多个多重处理队列,应该可以获得更好的性能,但是这导致了复杂而脆弱的设计。

基准 3:昂贵的初始化

与前面的例子相反,许多并行计算不一定需要在任务之间共享中间计算,但无论如何都会从中受益。当状态初始化代价很高时,甚至无状态计算也可以从共享状态中受益。

下面是一个例子,我们想从磁盘加载一个保存的神经网络,并用它来并行分类一堆图像。

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

On a machine with 48 physical cores, Ray is 25x faster than Python multiprocessing and 13x faster than single-threaded Python. Python multiprocessing doesn’t outperform single-threaded Python in this example. Error bars are depicted, but in some cases are too small to see. The workload is scaled to the number of cores, so more work is done on more cores. In this benchmark, the “serial” Python code actually uses multiple threads through TensorFlow. The variability of the Python multiprocessing code comes from the variability of repeatedly loading the model from disk, which the other approaches don’t need to do.

这个例子用 Ray 的 5s ,Python 多处理的 126s ,串行 Python 的 64s (在 48 个物理核上)。在这种情况下,串行 Python 版本使用许多内核(通过 TensorFlow)来并行化计算,因此它实际上不是单线程的。

假设我们已经通过运行以下代码创建了模型。

Code for saving a neural network model to disk.

现在,我们希望加载模型,并使用它来分类一堆图像。我们分批进行,因为在应用程序中,图像可能不会同时可用,图像分类可能需要与数据加载并行进行。

射线版本如下。

Code for a toy classification example using Ray.

加载模型非常慢,我们只想做一次。Ray 版本通过在 actor 的构造函数中加载一次模型来分摊成本。如果模型需要放在 GPU 上,那么初始化会更加昂贵。

多处理版本较慢,因为它需要在每次 map 调用中重新加载模型,因为映射的函数被假定为无状态的。

多重处理版本如下。请注意,在某些情况下,可以使用initializermultiprocessing.Pool的参数来实现这一点。然而,这限于这样的设置,其中初始化对于每个过程是相同的,并且不允许不同的过程执行不同的设置功能(例如,加载不同的神经网络模型),并且不允许不同的任务针对不同的工作者。

Code for a toy classification example using multiprocessing.

我们在所有这些例子中看到的是,Ray 的性能不仅仅来自于它的性能优化,还来自于拥有适合手头任务的抽象。有状态计算对许多应用程序都很重要,将有状态计算强制转换成无状态抽象是有代价的。

运行基准测试

在运行这些基准测试之前,您需要安装以下软件。

**pip install numpy psutil ray scipy tensorflow**

然后上面所有的数字都可以通过运行这些脚本来重现。

如果你安装psutil有困难,那么尝试使用 Anaconda Python

最初的性能指标评测是在 EC2 上运行的,使用的是 m5 实例类型(1 个物理内核使用 m5.large,48 个物理内核使用 m5.24xlarge)。

为了使用正确的配置在 AWS 或 GCP 上启动一个实例,您可以使用射线集群启动器并运行以下命令。

**ray up config.yaml**

这里提供的就是一个config.yaml的例子(用于启动一个 m5.4x 大型实例)。

关于雷的更多信息

虽然这篇博客文章关注的是 Ray 和 Python 多处理之间的基准测试,但是苹果之间的比较是具有挑战性的,因为这些库不是非常相似。差异包括以下几点。

  • Ray 是为可伸缩性而设计的,可以在笔记本电脑和集群上运行相同的代码(多处理只能在单台机器上运行)。
  • Ray 工作负载会自动从机器和进程故障中恢复。
  • Ray 是以一种与语言无关的方式设计的,并且初步支持 Java

更多相关链接在下面。

数据科学家应该熟悉的 11 个评估指标——来自高级 Kagglers 新书的教训

原文:https://towardsdatascience.com/11-evaluation-metrics-data-scientists-should-be-familiar-with-lessons-from-a-high-rank-kagglers-8596f75e58a7?source=collection_archive---------8-----------------------

《赢得 Kaggle 的数据分析技术》一书

是关于损失函数的,对吗?不,不是的。

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

Photo by Andreas Wagner on Unsplash

这是一本新书*“赢得 Kaggle 的数据分析技术”*中介绍的技巧,由三位高级 Kaggle 作者撰写(不包括我自己,因此这不是个人推广!😃 )

这本书的完整目录见我的其他帖子

目录:

评估指标与损失函数

回归任务中使用的评估指标

#1 — RMSE(均方根误差)

#2 — RMSLE(均方根对数误差)

#3 —平均绝对误差

#4 — R 平方(R )

用于二进制分类任务中 0/1 预测的评估指标

#5 —准确度和误差率

# 6——精度和召回

#7 — F1 分数和 Fbeta 分数

#8 — MCC(马修斯相关系数)

#9 —平衡精度

#10 —对数损失(或交叉熵或负对数似然)

#11 — AUCROC(受试者工作特性曲线下面积)

评估指标与损失函数

评估指标,这个帖子的一个主题,对于 ML 初学者来说,是一个与另一个相关但独立的概念损失函数有些混淆的概念。它们在某种意义上是相似的,当我们足够幸运时,它们可能是相同的,但这不会每次都发生。

评估度量是通过建模过程“我们想要”最小化或最大化的度量,而损失函数是通过模型训练“模型将”最小化的度量。

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

Photo by AbsolutVision on Unsplash

举一个简单逻辑回归的例子:

  • 损失函数是模型将在训练中最小化的量。它也被称为成本函数或目标函数。逻辑回归的非常基本的版本使用负对数似然作为损失函数。搜索模型的参数以最小化负对数似然性是在训练模型时完成的事情。
  • 评估指标是我们希望模型最大化的指标。它独立于模型培训流程,并且理想情况下,评估指标应该反映我们的业务需求。根据业务应用,我们可能希望最大化 AUC ,或者我们可能关心召回有多好。

损失函数与模型紧密相关,通常模型具有损失函数候选的限制性列表,例如,逻辑回归的[ 负对数似然、带惩罚项的负对数似然][],因为损失函数的选择是模型算法创建者核心决定的一部分。

另一方面,评估指标可以是我们想要设置的任何值。最终,我们可以将“1”用于任何模型,尽管使用通用的“1”作为评估指标从来没有意义。评估指标有多高通常由训练中未使用的数据来衡量,如折叠外数据或测试数据。

评估分数广泛用于超参数调整,但对于更有经验的数据科学人员来说,理解损失函数和评估度量的区别的最有用的案例之一是提前停止。早期停止是一种通常用于确定何时停止训练的技术,以避免在增强类型的模型或神经网络类型的模型中过拟合。

[提前停止]

当模型基于损失函数的最小化来调整参数时,检查一次迭代对评估度量的改善程度,如果没有更多改善,则停止学习。

在 Kaggle 中,比赛参与者按“排行榜分数”进行排名。排行榜分数有两种类型,公开和私人,但这是另一个故事。排行榜分数可以归类为竞赛主持人为满足其业务目标或需求而设定的评估指标。

那么,了解评价得分,以及如何通过模型训练使其最大化,应该是赢得 Kaggle 比赛的一条道路。

所以,现在你明白了评价指标和损失函数的区别。接下来,我们将进一步了解常见的评估指标及其属性。

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

Photo by Tierra Mallorca on Unsplash

回归任务中使用的评估指标

#1 — RMSE(均方根误差)

(用于 Kaggle 比赛【Elo 商家类别推荐】 )

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

Formula of RMSE

  • 当假设误差是正态分布时,RMSE 有相当于最大似然法的解。因此,当 y 的分布在一些基础结构周围是正态分布时是有利的。
  • RMSE 对异常值很敏感。因此,预先裁剪或移除异常值是很重要的。

#2 — RMSLE(均方根对数误差)

(用于 Kaggle 竞赛中的 招募餐厅访客预测)

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

Formula of RMSLE

  • 当 y 具有长尾分布,或者我们对真实值和预测值的比值感兴趣时,使用 RMSLE。
  • 当 y 为零时,增加 1 以避免发散。

#3 —平均绝对误差

(用于 Kaggle 竞赛中) Allstate 索赔严重程度)

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

Formula of MAE

  • 与 RMSE 相比,对异常值稳健。
  • 在真 y =预测 y 处不是二阶可微的,因此 xgboost 等一些算法不允许 MAE 作为损失函数。
  • 代替 MAE,诸如“公平函数”或“伪 Huber 函数”的近似函数可能是可用的。

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

Fair Function

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

Pseudo-Huber Function

另见这张由 Ioannis Dassios 发布的 MAE 与 Fair 函数和 Pseudo-Huber 函数的对比图。

#4 — R 平方®

(用于 Kaggle 比赛】 奔驰更环保制造)

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

Formula of R-Squared

  • 0≤R ≤1(通常情况下,但在一些最坏的情况下,您会看到负值),R 越高越好,这意味着预测更接近数据。
  • 分母不依赖于预测,并且一旦设定数据就固定不变。因此,最大化 R 等价于最小化 RMSE

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

Photo by Riccardo Pallaoro on Unsplash

二元分类任务中 0/1 预测的评价指标

#5 —精确度和误差率

(用于 Kaggle 竞赛中的 文字规范化挑战——英语)

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

Formula of Accuracy and Error Rate

在这里,两个字母的字母表当然来自混淆矩阵。

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

Confusion Matrix

  • NG 用于不平衡数据因为预测一切为正或为负的非常糟糕的模型很容易破解不平衡数据中的高精度。
  • 对于不平衡数据,使用 F1-score、Fbeta-score、MCC 或稍后介绍的平衡精确度

#6 —精确度和召回率

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

Formula of precision and recall

  • 精确度和召回率分别表示混淆矩阵中第一水平行或第一垂直列上 TP 的比例。
  • 介于 0 和 1 之间,越高越好。
  • 当截止点(=根据概率确定预测是 0 还是 1 的阈值)移动时,精确度和召回率会向相反的方向移动。
  • 与正负互换是不对称的,这意味着当我们改变哪个称之为“正”(无论 y=1 还是 0)时,精度和召回率都会改变。

#7 — F1 分数和 Fbeta 分数

(用于 Kaggle 比赛中) Quora 言不由衷问题分类)

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

Formula of F1-Score and Fbeta-Score

  • 它被称为精确度和召回率的“调和平均值”。
  • 介于 0 和 1 之间,越高越好。
  • Fbeta-score 可以改变查全率和查准率之间的平衡,当 β < 1 加权到查准率,β > 1 加权到查全率。当我们更喜欢一个而不是另一个时,可能会有用,就像医学诊断通常更喜欢假阳性而不是假阴性,因为前者只会带来额外的成本,而后者会带来晚期治疗并可能导致死亡。
  • 同样,这些对于正负互换来说是不对称的,就像精度和召回也不是一样。

#8 — MCC(马修斯相关系数)

(用于 Kaggle 竞赛的 博世生产线性能)

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

Formula of MCC

  • 取-1 和 1 之间的值,越高越好。0 表示预测等同于随机。
  • 最后,这是对称正反互换!

#9 —平衡的精度

平衡精度是可用于二元分类和多类分类的度量。

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

Formula of balanced accuracy

其中,M:类别数,n_m:数据大小属于类别 M,r_m:准确预测属于类别 M 的数据数。

这里,如果问题是二进制分类,

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

Balanced accuracy when binary classification

  • 适用于多类分类和二类分类。
  • 介于 0 和 1 之间的值,越高越好。
  • 对较小类别的准确预测赋予较高的权重,因此适用于不平衡数据

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

Photo by Denys Nevozhai on Unsplash

二元分类任务中概率预测的评价指标

#10 —对数损失(或交叉熵或负对数可能性)

(用于 Kaggle 比赛中的 Quora 问题对)

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

Formula of logloss

  • 分类中常见的嫌疑人。
  • 这是损失并且越高越糟糕。
  • 当 p_i 较低而 y_i=1 时,意味着不是好的概率预测,或者相反,logloss 变高。
  • 在许多模型的损失函数中也很常见。

#11 — AUCROC(受试者操作特征曲线下的面积)

(用于 Kaggle 竞赛中) 家庭信用违约风险)

这通常也称为 AUC,但为了避免与 AUCPR(精确召回曲线下面积)混淆,我坚持使用 AUCROC。

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

Illustration of AUCROC and ROC

  • 从 0 到 1 的值。0.5 表示预测相当于随机的。
  • 分类中的另一个常见疑点,但只针对二元分类而非多类分类。
  • 与基尼系数的关系如下。AUCROC 的最大化相当于基尼系数的最大化。

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

Relation with Gini and AUCROC

  • 可以用以下形式等价地表示:

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

Alternative representation of AUCROC

  • 因此,只有预测概率的顺序与有关,这意味着当四个记录的概率为[0.1,0.3,0.7,0.9]或[0.01,0.02,0.3,0.99]时,AUCROC 是相同的,只要顺序保持不变。
  • 与原始定义相比,这种替代表示更容易知道模型预测改进对分数改进有多大贡献。
  • 在不平衡数据的情况下(例如,正数据是小类到负数据),正小类数据的概率始终很高对于 AUCROC 很重要,而负大类数据的概率对噪声不敏感。

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

ROC curve and AUCROC visualized by code

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

Photo by Kelly Sikkema on Unsplash

结论

在 Kaggle 内部和外部,评估指标有许多可能的选择。每个评估指标都有它们的属性,当我们优化它们或者选择正确的评估指标时,理解它们的行为是很重要的。

在另一篇帖子中,我将讨论我们在多类分类和推荐中使用的评估指标,我们还将找到优化评估指标的技巧,同时通过最小化损失函数来调整模型。

生产质量数据科学代码的 12 个步骤

原文:https://towardsdatascience.com/12-steps-to-production-quality-data-science-code-35ae2f868003?source=collection_archive---------8-----------------------

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

有一个呆伯特漫画,呆伯特告诉他的老板,他不能接管一个同事的软件项目,除非他花一周时间唱衰这个同事的现有代码。如果你曾经接手维护过别人的代码,你会立刻发现其中的真相。

没有人喜欢接手维护或处理别人的代码。在最好的情况下,你会面临几个小时或几天的时间试图弄清楚前一个程序员在做某些决定时在想什么——即使代码被很好地注释了。

在最坏的情况下,你最终会盯着糟糕的代码看,以至于你开始考虑换一份职业来逃避它。

有一次,我从一位最近退休的同事那里继承了一段 40 多页的 SAS 代码,其中有太多的死角、不必要的变量,并且注释掉了一些垃圾,当我清理完之后,最终的代码还不到两页长。五年过去了,我仍然没有完全从那次经历中恢复过来。

我怀疑编写没有人会抱怨的代码是不可能的。然而,有可能将代码中人们可以抱怨的事情的数量保持在最少。

数据科学家甚至需要写好代码吗?

如果你的代码要投入生产,那么它应该是“生产质量”的。

进入“生产”的含义因工作而异,但是为了本文的目的,让我们将生产代码定义为一项工作的最终版本,它将使用真实数据在生产服务器上运行,或者作为一项分析的证据。

根据这一定义,以下是生产代码的所有示例:

  • 包含在 Jupyter 笔记本最终版本中的代码详细描述了一项分析;
  • 用于生成自动化月度报告或执行自动化数据提取/争论的代码;
  • 用于运行机器学习管道或位于管道顶部的应用程序的最终版本的代码;和
  • 用于以编程语言(如 Python 或 r)创建包的代码。

这些都是数据科学家经常需要执行的任务的示例,尽管大多数数据科学家并不参与软件工程,并且都是数据科学家生成的代码通常需要在未来共享和维护的情况。

因此,代码的最高质量是非常重要的。即“生产-质量”。

生产质量代码应该是:

  • 可读;
  • 没有错误;
  • 对异常具有鲁棒性;
  • 高效;
  • 有据可查;和
  • 可复制。

如果您想查看生产质量代码的示例,请查看您最喜欢的 Python 包的 GitHub 存储库(例如, scikit-learnNumPy )。但是,如何让您的代码达到产品质量标准呢?

下面是我在开发自己的 Python 包 mlrose 时使用的 12 个步骤。

第一步:确定你想要达到的目标

在你写一行代码之前,先弄清楚为什么你要写这些代码。你希望实现什么?也就是你的代码的目标是什么?

如果你正在进行一项分析,你试图回答什么研究问题?

如果你正在建立一个机器学习模型,你希望产生什么样的输出,一旦你得到它们,你打算用它们做什么?

如果你正在为一种编程语言编写一个包,你希望这个包有什么功能?

一旦你得到了这个问题的答案,让你可能与之合作的任何客户或利益相关者来运行它,以确保每个人都在同一页上,并且你不会花费你生命中的几天/几周/几个月来生产实际上不想要的东西。

当每个人(或者至少是大多数人)都同意的时候,就是开始的时候了。

步骤 2:构建一个最小可行的产品

编写一段代码,实现您在步骤 1 中确定的目标。不要管它长什么样,也不要管它有没有效率。你的目标只是产生一段工作代码,做你想让它做的事情。您将在这个过程的后续步骤中提高代码的质量。

如果在实现第一步目标的过程中有任何问题,在你对代码投入太多时间之前,这是你想要识别它们(并解决它们)的地方。

第三步:减少重复

将 DRY(不要重复你自己)软件开发原则应用到你的代码中。

DRY 原则的目标是最大限度地减少代码中的重复,以使代码更具可读性,更易于维护,并降低出错的风险。

实践中应用 DRY 原理的最常见方式是通过函数的创建。如果您不止一次地编写本质上相同的代码段,请将其转换为一个或多个函数(理想情况下,每个函数应该只做一件事)。

例如,应用 DRY 原则,您可以重写:

import math 
area2 = math.pi*2**2 
area5 = math.pi*5**2 
area7 = math.pi*7**2 
area10 = math.pi*10**2

作为:

import math def circle_area(radius): 
    return math.pi*radius**2 area2 = circle_area(2) 
area5 = circle_area(5) 
area7 = circle_area(7) 
area10 = circle_area(10)

函数名和变量名可以重复多次。这是你不想重复的功能背后的逻辑。

步骤 4:创建单元测试

对于代码中的每个函数,编写一个或多个测试,以确保它在一系列不同的环境下做它应该做的事情。这样的测试被称为“单元测试”,它们可以像你希望的那样简单或复杂。

当编写我自己的单元测试时,我通常会想出足够简单的例子,我可以用手/计算器/Microsoft Excel 确定函数输出,然后围绕它们编写单元测试。

例如,对于步骤 3 中给出的 circle_area()函数,这可能涉及检查 circle_area(2)实际上是否输出 12.56637,以及 circle_area(0)是否输出 0。

在 Python 中,可以使用 unittest 包来自动化这些测试。

若要通过 unittest 包运行单元测试,请创建一个类,并将单元测试编写为位于该类中的方法(即函数)。例如,要测试 circle_area()函数,您可以编写:

import unittest class TestFunctions(unittest.TestCase): 
    def test_circle_area2(self): 
        assert abs(circle_area(2) - 12.56637) < 0.0001 def test_circle_area0(self): 
        assert circle_area(0) == 0 unittest.main(argv=[''], verbosity=2, exit=False)

在这个例子中,我将我的测试类命名为“TestFunctions”,但是如果这个类有 unittest,您可以随意命名它。TestCase 作为其父类。

在这个类中,我创建了两个单元测试,一个测试 circle_area()对半径 2 的作用,另一个测试半径 0 的作用。这些函数的名称并不重要,除了它们必须以 test_ 开头并带有参数 self。

代码的最后一行运行测试。

假设所有的测试都通过了,您的输出看起来会像这样,每一个已经通过的测试的顶行上都有一个点。

..
------------------------------------------------------------------
Ran 2 tests in 0.000sOK

或者,如果您的一个测试失败了,那么输出的顶行将为每个失败的测试包含一个“F ”,并且将提供进一步的输出,给出失败的细节。

F. ====================================================================FAIL: test_circle_area0 (__main__.TestFunctions) 
--------------------------------------------------------------------Traceback (most recent call last): 
    File "D:/Documents/Unit_Test_Examples.py", line 13, in test_circle_area0 
    assert circle_area(0) == 1 
AssertionError --------------------------------------------------------------------Ran 2 tests in 0.000s FAILED (failures=1)

如果您使用 Python 脚本编写代码(即。py 文件),理想情况下,您应该将您的单元测试放在一个单独的测试文件中,将它们与您的主代码分开。但是,如果您使用 Jupyter 笔记本,您可以将单元测试放在笔记本的最后一个单元格中。

一旦你创建了你的单元测试并让它们工作,每当你对你的代码做任何(显著的)改变时,重新运行它们是值得的。

第五步:处理异常

当你写一个函数的时候,你通常期望函数参数只取某一类型或某一范围内的值。例如,在前面描述的 circle_area()函数中,隐含地假设参数输入将是非负整数或浮点数。

但是如果有人试图使用不属于预期类型或者不在预期范围内的参数值来运行函数,该怎么办呢?

最好的情况是,您的代码会出错,但是错误消息可能不清楚。

最坏的情况是,您的代码将运行并产生一个无意义的结果,您当时可能没有意识到这是无意义的,从而导致后续的流动问题。

为了解决这个问题,您可以在函数中添加异常测试,以检查参数输入是否符合预期,如果不符合,则输出定制的错误消息。

例如,我们可以扩展 circle_area()函数,以包含异常测试来验证 radius 的值是整数还是浮点数(第一个 if 语句)以及非负数(第二个 if 语句)。

def circle_area(radius): 
    if not isinstance(radius, int) and not isinstance(radius, float): 
        raise Exception("""radius must be an integer or float.""") if radius < 0: 
        raise Exception("""radius must be non-negative.""")    return math.pi*radius**2

如果某个参数值未通过异常测试,将打印异常消息(作为 exception()的参数给出),代码将停止。

第六步:最大化效率

仅仅拥有可读且没有错误的代码是不够的(尽管,这是一个好的开始),您还希望它在时间和空间上都是高效的。毕竟,如果你的代码运行 27 年都没有错误,或者占用的空间超过了你电脑的内存,这真的有关系吗?

因此,有必要检查一下你的代码,看看有没有什么方法可以让它运行得更快或者占用更少的空间。

就 Python 而言,已经有很多关于性能优化的文章。然而,根据我的经验,简单地检查代码并使用 NumPy 对任何 for 循环进行矢量化,就足以显著提高代码的时间效率。这是因为很多 NumPy 是用 C 编写的,而且 C 是一种比 Python 快得多的语言。

例如,考虑对包含十亿个 1 的向量求和的问题,我们尝试用两种不同的方法来解决这个问题,第一种方法使用 For 循环,第二种方法使用 NumPy sum()函数。

import numpy as np 
import time x = np.ones(1000000000) # For loop version 
t0 = time.time() total1 = 0 for i in range(len(x)): 
    total1 += x[i] t1 = time.time()

print('For loop run time:', t1 - t0, 'seconds') # Numpy version 
t2 = time.time() total2 = np.sum(x) t3 = time.time() print('Numpy run time:', t3 - t2, 'seconds')

使用 for 循环,这个问题需要 275 秒(超过 4 . 5 分钟)才能解决。然而,使用 NumPy sum 函数,运行时间减少到 15.7 秒。也就是说,for 循环花费的时间是 NumPy 求和的 17.5 倍。

For loop run time: 275.49414443969727 seconds 
Numpy run time: 15.738749027252197 seconds

第七步:让名字有意义

你有没有读过这样的代码,其中每个变量都有一个类似“x”或“temp”的名字(更糟糕的是,变量名在整个代码中被重新定义和重用,只是为了最大限度地混淆)?

我见过这样的代码,我被迫猜测变量的定义,然后保留这些定义的手写列表,以便遵循代码。这并没有说明代码的可读性。

您可以通过检查您的代码并用更具描述性的替代名称替换任何无意义的变量或函数名称来解决这个问题。

例如,您可以重写:

def area(l, w):
    return l*w

作为:

def rectangle_area(length, width): 
    return length*width

第八步:对照风格指南进行检查

编码风格指南是一个文档,它列出了特定编程语言的所有编码约定和最佳实践。在 Python 中,风格指南是PEP 8——Python 代码风格指南,其中包括以下建议:

  • “将所有行限制在 79 个字符以内;”
  • 函数名应该小写,单词之间用下划线分隔,以提高可读性和
  • “谨慎使用行内注释……行内注释是不必要的,事实上,如果它们陈述的是显而易见的事情,会分散注意力。”

PEP 8 是一个 27 页的文档,所以确保你的代码符合每一项可能是一件苦差事。幸运的是,有一些工具可以帮助你做到这一点。

如果您将代码编写为 Python 脚本,flake8 包将检查是否符合 PEP 8。

安装这个包(使用 pip install flake8)后,只需导航到包含您要检查的代码的文件夹,并在命令提示符下运行以下命令:

flake8 filename.py

输出将告诉您代码不符合的确切位置。

例如,此输出告诉我们 Python 脚本 Production_Examples.py 包含 8 个不合规的实例。第一个实例位于第 2 行第 1 列,其中包“numpy”已导入但未使用:

Production_Examples.py:2:1: F401 'numpy as np' imported but unused Production_Examples.py:66:1: E302 expected 2 blank lines, found 1 Production_Examples.py:76:14: E261 at least two spaces before inline comment 
Production_Examples.py:76:15: E262 inline comment should start with '# ' 
Production_Examples.py:79:1: E302 expected 2 blank lines, found 1 Production_Examples.py:86:1: W293 blank line contains whitespace Production_Examples.py:93:1: W293 blank line contains whitespace Production_Examples.py:96:1: E305 expected 2 blank lines after class or function definition, found 1

在 Jupyter 笔记本中,有几个扩展可以确保符合 PEP 8,包括 jupyterlab-flake8jupyter-autopep8

第九步:确保再现性

再现性意味着不同的东西,这取决于你试图执行的任务。

如果你开发的代码是定期由他人运行的(例如,定期报告或机器学习管道背后的代码),那么可再现性就意味着建立一个你可以维护和他人可以利用的代码的主副本。例如,为您的项目创建一个 GitHub 存储库。

但是,如果您正在执行一项分析,那么您希望他人能够复制的不仅仅是您的分析背后的代码,还有您的分析的确切结果,这样您基于该分析做出的任何声明都可以得到独立的验证。

许多统计和机器学习过程涉及某种程度的随机化。例如,将数据集随机分成训练和测试子集,或者许多机器学习算法的随机优化方面。

这意味着每次重新运行这些流程时,即使输入数据完全相同,也会产生稍微不同的输出。

通过在程序开始时设置随机种子(例如,在 Python 中可以使用 NumPy np.random.seed()函数),或者在任何涉及随机化的算法中作为参数(例如,许多 Python scikit-learn 函数为此包含可选的 random_state 参数),可以避免这种情况。

这将保证,只要程序的输入保持不变,输出将总是相同的。

步骤 10:添加注释和文档

为所有函数、类和方法编写 docstrings,并添加块注释或行内注释(即以#开头的注释),以澄清代码中用途不明显的部分。

大多数程序员已经熟悉并使用了块注释和行内注释,如下例所示:

# This is a block comment 
def test_function(x): y = x + 5 # This is an inline comment 
    return y

但是,docstrings 不太常用。

docstring 是一个函数(或类或方法)的概要,用三重引号括起来。它通常包括以下内容(尽管最后两项是可选的):

  • 对该功能的简要描述(一行);
  • 每个函数参数的描述(包括它们的预期类型和任何默认值);和
  • 每个函数输出的描述(包括类型)。

例如,我们的 circle_area()函数的 docstring(为了便于说明,我对它做了一些修改)可能如下所示:

def circle_area(radius=1): 
    """Calculate the area of a circle with a given radius. 
    Parameters 
    ---------- 
    radius: float, default: 1 
        The radius of the circle. Must be non-negative.     Returns 
    ------- 
    area: float 
        The area of the circle. 
    """ 
    area = math.pi*radius**2     return area

这个 docstring 示例中使用的格式约定是特意选择来与 Python sphinx 包集成的。

Sphinx 通常用于创建 Python 包的文档,并且已经用于创建许多流行包的文档,包括 NumPy、NLTK 和 scikit-learn),并且可以将文档字符串转换成各种格式的文档,包括 HTML、pdf 和 ePub。

下面是一个使用 sphinx 创建的文档示例:

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

它还与 GitHub 和 ReadtheDocs (一个文档托管平台)集成,这样每当您的代码更新被推送到 GitHub 时,您的文档就会自动重建,确保您的文档始终保持最新。

步骤 11:请求代码评审

如果你和其他程序员在一个环境中工作,那么在部署你的工作之前,你应该总是要求进行代码审查。除了能够发现代码中可能存在的任何错误之外,您还可以就各种问题向审阅者寻求反馈,包括:

  • 你的文档有多清晰;
  • 单元测试的覆盖率;
  • 他们是否能看到你可能忽略的效率提升空间;和
  • 你的代码是否达到了你最初的目标。

但是,如果你还处于职业生涯的早期,还没有在编程团队中工作,该怎么办呢?

您可以采用一些替代方法来审查您的代码,包括:

  • 与处于类似或更高级编程生涯阶段的朋友分享你的代码,并要求他们评审你的代码(潜在地,作为交换,你在将来的某个时间评审他们的代码);
  • 利用在线论坛,用户可以从其他用户那里请求代码反馈,包括代码评审栈交换和评审子条目: /r/codereview//r/reviewmycode//r/critiquemycode/;或者
  • 如果你真的绝望了,没有其他选择,把你的代码放在一边一段时间(比如一个月),然后当你有时间忘记更好的细节时再回来,进行你自己的回顾。

这一步是开发过程中最重要的部分之一,因为通过代码评审,你将学会成为一名更好的程序员。

步骤 12:部署

一旦您完成了前面的所有步骤,您的代码就可以部署了。这并不意味着你的代码不会再次改变。这仅仅意味着你创作了一部作品,它的水准足以让你自豪。

事实上,一旦人们开始使用你的代码,或者它的输出,几乎可以肯定他们会带来你从未想过的改进,或者检测出你完全忽略的错误。

预计到这一点,现在安排一段时间到未来的一到六个月,在那里您将再次回顾您的代码,并整合您在部署后不可避免地收到的任何反馈。

一位名叫约翰·f·伍兹的智者曾经说过:

“总是把维护你的代码的人当成一个知道你住在哪里的暴力精神病患者来编码。”

我之前从其他不知道如何编写产品级代码的程序员那里继承了代码,对此我完全同意。但是,即使你的生活不依赖于你的代码质量,产生高质量的代码也应该是一件值得骄傲的事情。

就像你不会把自己写的充满拼写或语法错误的报告交给老板或同事一样,你也不应该分享一段不符合某些最低编码标准的代码。

这就是成为一名专业数据科学家的意义所在。

Genevieve Hayes 博士是数据科学家、教育家和人工智能及分析专家,拥有Genevieve Hayes Consulting。你可以在LinkedIn或者Twitter上关注她。她还是 价值驱动数据科学 的主持人,这是一个每月两次的播客,面向希望最大化其数据和数据团队价值的企业。

想要发掘企业数据的价值,但不知道从哪里开始?**下载免费的数据科学项目发现指南。

我作为机器学习工程师的第一年学到的 12 件事

原文:https://towardsdatascience.com/12-things-i-learned-during-my-first-year-as-a-machine-learning-engineer-2991573a9195?source=collection_archive---------0-----------------------

成为你自己最大的怀疑者,尝试不可行的事情的价值,以及为什么沟通问题比技术问题更难。

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

The workstation, the home office and the art studio. Photo by the author.

机器学习和数据科学都是广义的术语。一位数据科学家的工作可能与另一位大相径庭。机器学习工程师也是如此。常见的是利用过去(数据)了解或预测(建立模型)未来。

为了将下面的观点放在上下文中,我将解释我的角色是什么。

我们有一个小型的机器学习咨询团队。从数据收集到操作,从模型构建到服务部署,你能想到的每个行业,我们都做到了。所以每个人都戴着许多帽子。

过去时是因为我已经离开了我作为机器学习工程师的角色,开始从事自己的业务。我为此制作了一个视频。

我的一天是什么样子的

上午 9 点,我会走进去,说早上好,把我的食物放在冰箱里,倒一杯咖啡,走到我的办公桌前。然后我会坐下来,看着前一天的笔记,打开松弛的部分。我会阅读消息,打开团队分享的论文或博客帖子的链接,会有一些,这个领域发展很快。

一旦信息被清除,我会浏览报纸和博客帖子,阅读那些留下的。通常有一些事情可能对我正在做的事情有所帮助。阅读需要一个小时,有时更长,这取决于它是什么。

为什么这么久?

阅读是终极元技能,如果有更好的方法来做我正在做的事情,我可以通过学习和实施它来节省时间和精力。

现在是上午 10 点。

如果截止日期临近,阅读会被缩短以推进项目。这是一天中最大的一块去了。我会回顾前一天的工作,检查我的记事本记录下接下来的步骤。

我的记事本是流动的日志。

“我已经将数据处理成正确的形状,现在我需要在模型中运行它,我将在开始时保持简短的训练,然后在取得进展时加快训练。”

如果我被困住了。

“出现了数据不匹配的情况。下一步将是在尝试新模式之前,修复组合匹配并获得基线。”

大部分时间都在确保数据处于可以建模的形式。

下午 4 点左右,是时候开始放松了。收尾工作包括清理我创建的混乱代码,使其清晰易读,添加注释,重组。如果别人不得不读这个呢?这是我想问的问题。通常是我。令人惊讶的是,一连串的想法很快就被遗忘了。

到了下午 5 点,我的代码出现在 GitHub 上,第二天的笔记出现在我的记事本上。

这是理想的一天,但不是每天。有时候,在下午 4:37,你会有一个美好的想法突然出现在你的脑海中,并遵循它。

现在你已经对每天发生的事情有了一个大概的了解,我们来具体说说。

1.它总是关于数据

如果你熟悉一些数据科学的基本原则,这似乎是老生常谈了。但令人惊讶的是我经常会忘记。太多时候,你会专注于构建一个更好的模型,而不是改进你正在构建的数据。

建立一个更大的模型和使用更多的计算能力可以提供令人兴奋的短期结果。然而,走了足够多的捷径,你最终会走捷径。

当第一次参与一个项目时,要花大量的时间来熟悉数据。我说不正常,是因为通常你不得不把你的第一次估计乘以 3。从长远来看,这会节省你的时间。

这并不意味着你不应该从小处着手。我们会谈到这一点。

对于任何新的数据集,你的目标应该是成为主题专家。检查分布,找到不同种类的特征,异常值在哪里,为什么是异常值?如果你不能讲述一个关于你正在处理的数据的故事,你怎么能期望你的模型呢?

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

An example exploratory data analysis lifecycle (what you’ll do every time you encounter a new dataset). More on this in A Gentle Introduction to Exploratory Data Analysis.

2.沟通问题比技术问题更难

我遇到的大多数主要障碍都不是技术性的,而是交流性的。当然,总会有技术挑战,但解决技术挑战是工程师的职责。

永远不要低估内部和外部沟通的重要性。没有什么比解决一个错误的技术挑战更糟糕的了。

这是怎么发生的?

从外部来看,这是客户所追求的与我们能提供的不匹配,而是机器学习能提供的不匹配。

在内部,由于许多人身兼数职,很难确保每个人都有相同的目标。

这些挑战并非独一无二。机器学习看起来很神奇。在某些情况下的确如此。但如果事实并非如此,承认这一点很重要。

你如何修理它?

触底。定期。你的客户明白你能提供什么吗?你了解你客户的问题吗?他们明白机器学习能提供什么,不能提供什么吗?你可以用什么有用的方式来交流你的发现?

内部呢?

你可以根据试图解决内部沟通问题的软件工具的数量来判断这个问题有多难。Asana,吉拉,Trello,Slack,Basecamp,周一,微软团队。

我发现的最有效的方法之一是在一天结束时在相关的项目频道中进行简单的消息更新。

更新:

  • 3-4 分
  • 关于我所做的
  • 为什么

接下来:

  • 基于以上,我下一步要做的是

完美吗?不。但它似乎起作用了。这给了我一个机会,让我反思自己做了什么,想做什么,还有公开的额外好处,这意味着如果我的工作看起来不成功,可能会受到批评。

无论你是一名多么优秀的工程师,你保持和获得新业务的能力都与你传达你的技能及其带来的好处的能力相关。

3.稳定>最先进(总体而言)

我们有一个天生的语言问题。将文本分类成不同的类别。目标是让用户向服务发送一段文本,并让它自动分类到两个类别中的一个。如果模型对预测不自信,将文本传递给人类分类器。负载大约是每天 1000-3000 个请求。不庞大,也不小。

伯特曾是今年的热门人物。但是如果没有 Google scale compute,用 BERT 训练一个模型来做我们需要的事情需要太多的按摩。这还是在投入生产之前。

相反,我们使用了另一种方法, ULMFiT,,这种方法在理论上不是最先进的,但仍然产生了足够多的结果,而且更容易操作。

运送有用的东西比坐在你努力追求完美的东西上提供更多的价值。

4.机器学习的两个缺口

将机器学习付诸实践有两个缺口。从课程工作到项目工作的差距,以及从笔记本中的模型到生产中的模型(模型部署)的差距。

在互联网上搜索机器学习课程会返回大量结果。我用它们中的许多创造了我自己的人工智能硕士学位

但即使在完成了许多最好的课程之后,当我开始成为一名机器学习工程师时,我的技能也是建立在课程的结构化主干之上的。事实上,项目不是结构化的。

我缺乏具体的知识。课程中无法教授的技能。如何质疑数据,探索什么与利用什么。

特定知识:不能在课程中教授但可以学习的技能。

解决方法是什么?

我很幸运能和澳大利亚最优秀的人才在一起。但我也愿意学习,愿意犯错。当然,犯错不是目标,但是为了正确,你必须找出错在哪里。

如果你正在通过一门课程学习机器学习,那么继续学习这门课程,但是通过在自己的项目中工作将你所学的东西付诸实践,用特定的知识武装自己。

部署呢?

我还是不擅长这个。但是我注意到了一个趋势。机器学习工程和软件工程正在融合。有了像塞尔顿库伯弗洛库伯内特斯这样的服务,机器学习很快就会成为堆栈的另一部分。

在 Jupyter 笔记本上建立一个模型是一回事,但是你如何让成千上万甚至数百万人使用这个模型呢?从最近在云原生事件上的演讲来看,大公司之外没有多少人知道如何做到这一点。

5.20%的时间

我们有一个规则。20%的时间。这意味着我们 20%的时间可以用来学习。事物是一个松散的术语,意思是机器学习世界中的事物。有很多。

这不止一次被证明是非常宝贵的。超过 BERT 的 ULMFiT 使用率是 20%时间的结果。

20%的时间意味着 80%将花在核心项目上。

  • 80%在核心产品上(机器学习专业服务)。
  • 20%用于与核心产品相关的新事物。

它并不总是像这样分裂,但它是一个很好的目标。

如果你的商业优势是在你现在做的事情上做到最好,那么未来的商业取决于你继续在你做的事情上做到最好。这意味着不断学习。

6.十分之一的论文被阅读,很少被使用

这是一个粗略的指标。但是探索任何数据集或现象,你很快就会发现它无处不在。是齐夫定律或者普赖斯定律,其中一个,都和我差不多。普莱斯定律表明,一半的出版物来自所有作者数量的平方根。

换句话说,在每年成千上万的投稿中,你可能会有 10 篇开创性的论文。在这 10 篇开创性的论文中,有 5 篇可能来自同一个机构或同一个人。

外卖?

你不可能跟上每一个新的突破。最好是把基本原理的基础打牢,并加以应用。这些经历了时间的考验。原始突破新突破指的是。

但是随之而来的是探索与开发的问题。

7.做你自己最大的怀疑者

你可以通过成为自己最大的怀疑者来处理探索与开发的问题。

探索与利用的问题是在尝试新事物和重新应用已有成果之间的两难选择。

剥削

很容易运行一个你已经使用过的模型,得到一个高精度的数字,然后作为一个新的基准向团队报告。但是如果你得到了一个好的结果,记得检查你的工作,一次又一次,让你的团队也这样做。你成为工程师兼科学家是有原因的。

探测

20%的时间有助于此。但 70/20/10 可能效果更好。也许你花 70%在核心产品上,20%在构建核心产品上,10%在兼职上,这些事情可能不会(也可能不会)奏效。

我从未在我的角色中练习过这个,但这是我正在努力的方向。

8.玩具问题第一件事起作用

玩具问题管用。尤其是为了帮助理解一个新概念。建造一些小东西。它可能是您的数据的一个小子集,也可能是不相关的数据集。

在一个小团队中,诀窍是让一些东西发挥作用,然后快速迭代。

9.橡皮鸭

罗恩教我这个。如果你困在一个问题上,坐着盯着代码可能会解决它,但可能不会。相反,与队友用语言交流。假装他们是你的橡皮鸭。

“罗恩,我试图循环这个数组,在循环另一个数组的同时跟踪状态,然后我想把这些状态组合成一个元组列表。”

“循环中的循环?你为什么不把它矢量化呢?”

“我能做到吗?”

“让我们看看。”

10.从头开始构建的模型正在衰落(或者至少你不需要它们开始)

这又回到了机器学习工程与软件工程融合的问题上。

除非您的数据问题非常具体,否则许多主要问题都非常相似:分类、回归、时间序列预测、建议。

谷歌和微软的 AutoML 等服务正在让世界一流的机器学习对每个可以上传数据集和选择目标变量的人开放。时间还早,但它们的势头正在迅速增强。

在开发人员方面,你有像 fast.ai 这样的库,可以用几行代码提供最先进的模型,还有各种模型动物园(一个预建模型的集合),像 PyTorch hubTensorFlow hub 提供同样的服务。

这意味着什么?

仍然需要了解数据科学和机器学习的基本原理。但是知道如何将它们应用于您的问题更有价值。

现在,你的基线没有理由不接近最先进的水平。

11.数学还是代码?

对于我处理的客户端问题,我们都是先编写代码的。所有的机器学习和数据科学代码都是 Python 编写的。有时我会通过阅读一篇论文并复制它来涉猎数学,但是 99.9%的时间,现有的框架已经涵盖了数学。

这并不是说数学是不必要的,毕竟,机器学习和深度学习都是应用数学的形式。

至少知道矩阵操作,一些线性代数和微积分,特别是链规则对从业者来说已经足够好了。

请记住,我的目标不是发明一种新的机器学习算法,而是向客户展示机器学习对他们的业务有(或没有)的潜力。

**边注:**在这篇文章的美好时机,fast.ai 刚刚发布了一门新课程,从基础开始的深度学习,它从头开始讲述深度学习的数学和代码。它是为像我这样熟悉应用深度学习和机器学习,但缺乏数学背景的人设计的。为了解决这个问题,我正在浏览它,它立即被添加到我最喜欢的机器学习和数据科学资源列表中。有了坚实的基础,你可以建立自己的艺术状态,而不是重复以前的。

12.你去年做的工作明年可能会无效

这是已知的。并且由于软件工程和机器学习工程的融合而变得更加如此。

但这是你报名参加的。

什么保持不变?

框架会变,库会变,但底层的统计、概率、数学,这些东西没有截止日期(新的 fast.ai 课程甚至更好的时机)。

最大的挑战仍然是:你如何应用它们。

现在怎么办?

可能有更多,但 12 个足够了。

在 Max Kelsen 工作是我做过的最好的工作。问题很有趣,但人们更好。我学到了很多。

离开不是一个容易的选择,但我决定用我学到的东西来检验自己。你会发现我站在健康、科技和艺术的十字路口,并在 YouTube 上直播。

如果您有任何问题,我的 Twitter DM 已开通订阅我的时事通讯,了解我的最新动态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值