TowardsDataScience-博客中文翻译-2021-九十六-

TowardsDataScience 博客中文翻译 2021(九十六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

流行的解释方法有哪些?

原文:https://towardsdatascience.com/what-are-the-prevailing-explainability-methods-3bc1a44f94df?source=collection_archive---------7-----------------------

图片作者(艾瑞泽艾)

欢迎来到“切片”,这是一个新的博客系列,解释了 ML 概念的本质

Amber Roberts合作撰写,ML 销售工程师 at Arize AI

机器学习(ML)的采用导致了一系列人工智能(AI)应用,这些应用涉及语言处理、计算机视觉、无监督学习甚至自治系统等不断增长的领域。

随着模型复杂性的增加,反思和理解模型为什么做出特定预测的能力变得越来越困难。它也变得越来越重要,因为 ML 模型做出的预测越来越影响我们生活的重要方面——从房屋贷款申请的结果到工作面试、医疗甚至监禁决定

可解释性是一种技术,旨在确定哪个模型特征或特征组合导致了特定的模型决策。比如一个模特是不是因为眼睛而认定某个动物具体是拉布拉多犬?鼻子?耳朵?还是各种各样的组合?

图像信用:用 LIME 进行图像分类的可解释机器学习

机器学习模型可能会根据看似不合理的解释给出答案。为了理解为什么给出一个推论,使用了可解释的方法。这允许模型构建者以更有目的和更程序化的方式改进模型,以产生期望的结果或调整标准。然而,值得注意的是,可解释性并没有解释模型是如何工作的——相反,它提供了一个解释人类可以理解的反应的基本原理。

这篇文章的目标是强调不同的可解释方法,并演示如何将它们合并到流行的 ML 用例中。

解释可解释的人工智能

在机器学习领域,深度学习模型用于进行复杂的预测和决策。这些高级模型为各种领域产生了令人难以置信的发现,然而,由于其内部工作的不透明性,它们被戏称为“黑盒”。因此,对于工程师来说,追溯一个预测的根本原因是非常困难的,这就是 ML 可解释性方法和技术发挥作用的地方。

在基于一组特征预测房价的情况下,可解释性对各种特征(平方英尺、卧室数量、邮政编码、最后销售价格等)的重要性进行分类和标准化。)到房屋销售价格的预测。

模型可解释性示例图像由作者(阿里泽艾)

ML 可解释性有哪些不同的方法?

基于用例和环境,团队可以使用不同的方法来解释。这些通常由以下因素驱动:

  • 模型类型:神经网络、树、基于图像或基于语言
  • 无论您的团队是否可以直接访问模型
  • 速度与精度的权衡
  • 计算成本
  • 全局和局部特征重要性
  • 人工智能治理、风险管理和合规需求

TL;博士: 可解释性是工具箱中的一个工具,帮助团队理解他们的模型所做的决策,以及这些决策对他们的客户/用户以及他们公司底线的影响。这本身就是一种近似,没有“完美”的解释者——每种方法都有一个权衡。

在快速概述了 SHAP 和莱姆之后,我们将把重点放在特定模型和模型竞争的可解释性技术

什么是 SHAP?

SHAP(Shapley Additive explations)是一种用于分解复杂模型的单个预测的方法。SHAP 的目的是计算每个特征对预测的贡献,以便识别每个输入的影响。SHAP 解释技术使用植根于合作联盟博弈论的原理来计算沙普利值。就像合作博弈理论最初看起来如何识别玩家群体之间的合作(“联盟”)如何有助于联盟整体的收益一样,同样的技术也用于 ML 中来计算特征如何有助于模型的结果。在博弈论中,某些玩家对结果的贡献更大,而在机器学习中,某些特征对模型的预测贡献更大,因此具有更高的特征重要性。

在人工智能领域,这些复杂的模型极大地受益于一种经过验证的方法,这种方法能够为非线性模型提供预测。Shapley 值是所有可能联盟的所有边际贡献的平均值。数据实例的特征值作为联盟成员运行。Shapley 值的解释是以一种附加方法的形式来表达的,以归因于一个线性模型。SHAP 值不仅揭示了特征的相关性,还揭示了特征对预测的积极影响还是消极影响。在下面的欺诈模型示例中,特征“目的”和“贷款金额”不成比例地帮助确定模型是否预测欺诈。

图片由作者提供(Arize AI) | ML 监控和可观察性平台中使用可解释性:SHAP 特征重要性,以平均绝对 Shapley 值度量

值得注意的是,基于内核的 SHAP 也有扰动,但这些都是基于背景或参考数据集。建立线性模型以基于扰动提取 Shapley 值。

什么是石灰?

LIME,或 局部可解释模型不可知解释 ,是一种通过用每个预测的可解释模型近似“黑盒”来提供局部 ML 解释的技术。这些局部模型是通过理解模型输入中的扰动如何影响模型的最终预测而创建的。

LIME 试图通过训练一个更易解释的模型(如线性模型)来了解特定示例的特征与模型预测之间的关系,该模型具有从原始输入的微小变化中导出的示例。在训练结束时,可以从线性模型学习到高于特定阈值的系数的特征中找到解释(在考虑一些归一化之后)。这背后的直觉是,线性模型发现这些特征在解释模型的预测中最为重要,因此对于此局部示例,您可以推断每个特征在解释模型所做预测中的作用。

假设您有一个黑盒模型,您只能访问推理数据和相应的模型预测,而不能访问初始训练数据。LIME 创建了一个新的数据集,由扰动的样本及其相应的黑盒模型预测组成。

在这个新的数据集上,LIME 训练了一个可解释的模型,该模型通过采样实例与感兴趣实例的接近度来加权。可训练模型应该是机器学习模型预测的局部良好近似,但不一定是良好的全局拟合。

LIME 可用于表格、图像或文本数据集。下面的一碗面包的例子有谷歌的 Inception V3 神经网络对图像分类的前两类(百吉饼,草莓)的石灰解释。对“百吉饼”的预测和解释非常合理,即使预测是错误的——显然没有百吉饼,因为中间的洞不见了。

图片来源:克里斯托夫·莫尔纳尔

选择 SHAP 还是莱姆:特征重要性与价值归属

SHAP 的可解释性方法旨在将一个结果——比如说,一个房价预测——归因于一个可测量的特征组合。我们认为这是一个模型的输出对一组输入的统计属性。例如,在 243 万美元的总房价预测中,房子的 4100 平方英尺贡献了 110 万美元。

LIME 方法生成了一组特征重要性,但是没有将这些特征重要性与模型输出的确切属性联系起来。例如,LIME 无法告诉您所贡献的平方英尺对预测房价的确切金额,但它可以告诉您该预测最重要的一个或多个要素。

TL;博士: 行业中的 ML 团队经常同时使用 SHAP 和 LIME,但是他们使用 LIME 来获得单个预测的更好解释,使用 SHAP 来理解整个模型以及特性依赖。

就计算时间和成本而言,LIME 比 SHAP 快。然而,虽然 Shapley 值需要很长时间来计算,但 SHAP 使计算全球模型解释所需的许多 Shapley 值成为可能。LIME 对于表格、文本和图像数据仍然很有用,尤其是在使用未解释的函数对模型进行训练的情况下。也就是说,由于 LIME 用一个更易解释的模型来近似这些模型,所以在 LIME 的复杂性和 LIME 的可信度之间有一个折衷。

模型类型不可知和模型类型特定的可解释方法

特定于模型的方法通过探索和访问模型的内部来工作,例如解释线性模型中的回归系数权重或 P 值,或者计算某个特征在系综树模型中使用的次数。

模型不可知的方法调查训练模型的 I/O 对之间的关系。它们不依赖于模型的内部结构。当没有理论或其他机制来解释模型中发生的事情时,这些方法是有用的。

特定型号

什么是 TreeSHAP?

树 SHAP 的图片作者(阿里泽艾)

TreeSHAP 是一个快速解释器,用于分析 Shap python 库中的决策树模型。TreeSHAP 是为基于树的机器学习模型设计的,如决策树、随机森林和梯度提升树。TreeSHAP 是作为 KernelSHAP 的快速、特定于型号的替代产品提供的。然而,它有时会产生不直观的特征属性。

鉴于 XGBoost 的流行,TreeSHAP 是各种团队大量使用的解释器方法。树解释器利用树算法的结构来提取和生成 SHAP 值,比内核解释器快得多。

TL;DR: 如果你有 XGBoost 或者 LightGBM,TreeSHAP 是一个很好的快速解释器。

TreeSHAP 以多项式时间计算,而不是指数时间。基本思想是同时沿着树向下移动所有可能的子集。要计算单树预测,您需要跟踪每个决策节点中子集的数量。这取决于父节点的子集和 split 函数。

神经网络:深层解释器

上图描述了深度解释器(深度 SHAP)的工作。图片作者(艾瑞泽艾)

TL;DR:深度解释器 (深度 SHAP)是一种可解释的技术,可用于基于神经网络架构的模型。这是最快的神经网络解释方法,并且基于运行原始 深度提升算法 的基于 SHAP 的版本。

利用 SHAP 值来解释深度学习模型(神经网络)预测的一种流行方法是使用方法 DeepExplainer。DeepExplainer 运行在深度学习框架上,通过使用 DeepLIFT 和 Shapley 值为神经网络模型添加可解释性。DeepExplainer 是 DeepLIFT (深度学习重要特征)的增强版,这是一种通过反向传播网络中所有神经元对输入的每个特征的贡献来分解神经网络对特定输入的输出预测的方法。

Lundberg 和 Lee,NIPS 2017 表明,可以选择 DeepLIFT 中的每节点属性规则来逼近 Shapley 值。通过对许多背景样本进行积分,DeepExplainer(深度 SHAP)估计近似的 SHAP 值,使得它们总计为传递的背景样本上的预期模型输出和当前模型输出之间的差(f(x)-E[f(x)]。

神经网络:期望梯度和综合梯度

预期梯度和综合梯度都是可解释的技术,可用于神经网络模型。

TL;DR: 期望梯度是一种对可微分模型有用的快速解释技术;它提供了不同于深度解释器的近似,并且比深度解释器慢。综合成分法是一种古老的地方方法,有助于解释每一个单独的预测。

预期梯度是一种对可微分模型有用的快速解释技术。你可以把期望梯度看作是基于 SHAP 的集成梯度,一种更古老的可解释技术。它将 Shapley 博弈论方法扩展到了构成要素,因此特征属性的输出总和等于输出。

集成梯度是一种将分类模型的预测归因于输入特征的技术。它可用于可视化输入要素和模型预测之间的关系。这是一种局部方法,有助于解释每个单独的预测。例如,在时尚 MNIST 数据集中,如果我们获取一只鞋的图像,那么正属性是图像的像素,其对将图像分类为鞋的模型产生积极影响。积分梯度法主要用于识别模型中的误差,其中可以进行校正以提高模型的精度。

线性回归:线性 SHAP

线性 SHAP 是一种为线性回归模型设计的可解释方法。它是特定型号的,速度很快。

线性回归模型将目标预测为其输入的加权和。学习到的关系的线性有助于解释。统计学家、计算机科学家和其他涉及定量问题的人长期以来一直使用线性回归模型。

模型类型不可知

KernelSHAP 是什么?

内核 SHAP —输入的缓慢迭代|作者图片( Arize AI )

KernelSHAP 是一种缓慢的、基于扰动的 Shapley 方法,理论上适用于所有类型的模型,但很少被野外的团队使用(至少在生产中)。

TL;DR: KernelSHAP 往往太慢,除了小数据之外,无法在实践中广泛使用。这也容易在团队中引起混乱。当团队抱怨 SHAP 慢时,通常是因为他们测试了 KernelSHAP。

KernelSHAP 通过计算每个特征值对实例“x”的预测的贡献来工作。KernelSHAP 由五个步骤组成:检查联盟,获得每个联盟的预测,使用核 SHAP 计算每个联盟的权重,创建加权线性模型并返回 Shapley 值“k”,即线性模型的系数。

什么是代理模型?

代理模型的工作,由 Arize AI 提供

代理模型是一种可解释的方法,旨在根据实际模型的预测构建透明模型。模型是与模型数据并行构建的。当感兴趣的结果不容易直接测量时,使用它,因此使用结果的模型来代替。

TL; 如果没有原始模型提取 SHAP,代理模型很有用;您可以构建模型决策的代理。对于监管用例来说,它不太理想,因为它高度依赖于模型看到的数据。

什么是个体条件期望(ICE)?

单个条件解释(ICE)图将每个实例可视化一行,以显示当特征发生变化时,实例的预测如何变化

虽然 ICE 曲线可以揭示不同的关系,但是 ICE 曲线要求将两个要素绘制在多个重叠的表面上,这可能很难阅读。

按年龄划分的宫颈癌概率冰图。每条线代表一个人。对大多数人来说。随着年龄的增长,预测的癌症概率增加。对于一些预测癌症概率高于 0.4 的女性,该预测在较高年龄时不会发生太大变化。图片来源:克里斯托夫·莫尔纳尔

结论

随着研究的进行,可解释性是一个越来越受欢迎的领域。当你探索不同的解释方法时,希望这本入门书是有帮助的。

联系我们

如果这个博客引起了你的注意,并且你渴望了解更多关于机器学习可观察性模型监控,请查看我们其他的博客ML 监控上的资源!如果您有兴趣加入一个有趣的 rockstar 工程团队,帮助模型成功生产,请随时联系我们,并在此处找到我们的空缺职位

BI 工具能做什么——你应该知道的六种不同的 BI 工件

原文:https://towardsdatascience.com/what-bi-tools-can-do-the-six-different-bi-artifacts-you-should-tknow-b7f9ab4dad20?source=collection_archive---------30-----------------------

仪表板、图表、报告、电子表格、OLAP 立方体或直接 SQL 访问?

六件 BI 文物。通常,公司会经历一个电子表格->报告和仪表板->其他地方的旅程。

神器,来源于两个拉丁词,arte“通过技巧”和 factum“制造”。有目的地巧妙创造的东西。一个很好的词来描述由开发过程创造的东西。

在商业智能的学科中,在公司中收集“技术和过程”来系统地分析数据,我发现六个工件是大多数过程的基石。

在大多数关于数据架构的文章中,它们中的一些被遗漏了,或者至少适当的工具被遗漏了,也许是有意的,也许不是(例如,参见 a16z https://a16z.com/2020/10/15/the-emerging-architectures-for-modern-data-infrastructure上的精彩文章,该文章主要关注报告、仪表板&临时访问)。).

我认为数据的唯一价值是改善一些单位的决策。为此,我们需要回答一系列问题。但是根据问题的不同,使用其中一个工件来回答它们要容易得多。

换句话说:

"如果电子表格实际上是正确的答案呢?"(特里斯坦得心应手 )

因为有时候,就是这样。有时它是一个报告、一个 OLAP 立方体或一个直接访问管道。

六件 BI 文物

你应该记住的六个 BI 神器是…

  • 普通的旧电子表格
  • 视觉材料、报告和仪表板
  • 古老的 OLAP 立方体
  • 直接访问管道(通常通过 SQL)
  • 写好的“故事”,笔记本
  • 现代的东西,图形(比如图形数据库用户界面)

大多数数据最终用户的现实

那么,对于大多数数据终端用户来说,现实是怎样的呢?公司通常不会提供所有六种工件。而工具也没有提供。此外,仅仅为了找到正确的视角而经历这么多不同的数据查看方式似乎很令人困惑。然而,这意味着对于我们的绝大多数问题,我们将有一个次优的工具来回答它们。

这就是数据最终用户的生活。

但是事情是变化的,至少你通常会有不止一个可用的工件,所以了解所有这些工件并理解何时使用哪一个是有意义的。

(1)普通的旧电子表格

文件基金会和贡献者。截图:vul sphereMPL 2<>或 LGPL ,通过维基共享。

电子表格是 1979 年 Apple II 中的 VisiCalc 自带的。很长一段时间了。出于同样的原因,它们被广泛采用,可以通过任何文件共享方式共享,几乎任何人都可以使用。

电子表格允许绝大多数的数据、图形和计算操作。如果并排比较,电子表格将拥有它,因为它们的可扩展性和巨大的功能范围。

然而,电子表格让大多数数据人员感到恶心。两个原因可能是,由于它们的特性范围,它们不太方便。而且由于他们的地方性,他们不遵守共同的标准。您有多经常因为忘记保存电子表格而导致笔记本电脑崩溃?

是的,当你处理数据时,这是不应该发生的。它不具备开发良好、经过测试和版本化的数据工具。

尽管如此,在本地环境处于前沿的地方,在人们大量使用电子表格的地方,在开发、测试和版本控制不那么重要的地方,电子表格都有它们的位置。

常见的电子表格工具有 Google Sheets、Excel、Numbers 等。

(2)报告和仪表板

报告和仪表板有点像云化的电子表格。虽然从技术上来说,并不是所有的应用程序都必须实际存在于云中,有些应用程序允许你保存一个本地副本,这样你就可以自己处理了,但是这种集成使得它们非常好用。

报告和仪表板工具将这一切展现在桌面上,集成到数据环境中,并进行适当的共享。对于电子表格来说,要获取数据,要么必须导出它(这对于数据转储来说非常有用),要么通过一些自定义功能将它连接到数据源。

报告和仪表板工具通常由开发团队配置,以连接到您需要的所有资源。此外,它们允许个人或团队提供大量标准报告和仪表板,并与整个公司共享。

这使得 report & dashboard tools 成为“在感觉到电子表格大材小用之后”的最佳去处。

尽管如此,报告大多是“基于表格”的,它们允许过滤、排序等。大部分是“二维”的东西。所以这其中的问题是:如果你有一个新问题,有人必须为你扩展一个报告,修改一个过滤器,或者创建一个新的。

= >结果可能是包含 1000 个过滤器的 63 页报告。

因此,在感受到电子表格的痛苦后,报告和仪表板工具通常是公司的归宿,但它们也可能以电子表格的痛苦而告终…

常见的报表&dashboard 工具有 Metabase、redash、looker、tableau 等。

(3)OLAP 立方体

信息百科,CC BY-SA 3.0 ,通过维基共享。

在数据之旅的某个地方,一些公司开始意识到一些数据组合需要进行大量的“分析”。它们被过滤、向下钻取、排序、与另一种数据类型组合、再次过滤等。在报告表单中这样做意味着您必须为所有不同的数据组合准备大量的报告。典型的例子包括销售数据以及客户类型、年月、产品组等。

因此,1993 年,一个名叫 Edgar F. Codd 的人发明了 OLAP 立方体,这是一种对数据“立方体”进行切片和切块的简单方法,数据“立方体”本质上不再是一张表,而是一组 n 维数据。

“咄,为什么销售额比上个月下降了?—让我们先检查一下这个事实”,“啊,让我们看看哪些客户群买得更少”,“mmmh 仍然看不到任何东西,让我们改变到产品类型的角度”,“啊,我看到产品类型 X 有一个很大的突破”,“让我们看看人们在转换漏斗的哪些步骤中离开得最多,…”……..等等都是典型的 OLAP 分析。

一个 OLAP 立方体实际上相当于一份有 1000 个过滤器的 63 页报告,但处理起来要好得多。但是如果你需要那种程度的灵活性。大多数公司只需要一些特定类型的核心数据组合。

成本:报告有趣的部分是因为它们是“固定的”,它们可以预先计算,所以它们真的很快(可以被制造出来)!OLAP 立方体也可以做得很快,但这意味着你必须付出相当大的努力,因为你必须找到“运行最多的查询”,然后聚集很多。因此,一个 OLAP 立方体可能比你的一堆报告要慢,而且花费更多。

因此,如果我们看到某些基础数据需要进行大量的切片和切割,公司可能会使用 OLAP 立方体。立方体将比 100 个报告更容易使用,但是它也将携带相当多的费用。成本在很大程度上取决于底层的“维度”,因此底层的数据越少,成本就越低。那么会发生什么呢?你最终会得到怪物立方体,因为人们喜欢加上“只有这一个维度”。事实证明,这样做会使立方体变慢,并增加开发成本。最后,你得到了一个昂贵而缓慢的立方体…

尽管如此,它还是比 100 份报告简单得多…

典型的 OLAP 工具是 Pentaho、MicroStrategy 或 Apache Kylin。

(4)直接访问

那么,我们如何能够在不产生 OLAP 怪物的情况下对大量数据组合进行深度分析呢?很简单,我们给人们技能去做,就像 OLAP 发动机在引擎盖下做的那样!我们让他们(通常是 SQL)访问我们的底层数据。我们对一些核心实体建模,并适当地记录它们。

这是一个很好的方法,但它也意味着提供更大的查询引擎,分解长时间运行的查询的方法,最重要的是,你需要一个非常懂技术的观众。我们可能还需要一个好的界面,这样人们就可以保存查询。

正在使用的工具:Presto、AWS Athena、…

所以我们可能仍然对报告、仪表板、OLAP 立方体和直接访问不满意。

⑸故事/笔记本

为了减轻这一点,一些公司在决策者和数据工程师之间有一些懂技术的人,“分析师”。他们使用报告、直接访问数据和创建深度分析来回答问题。

我喜欢“仪表盘已死”这篇文章,其中泰勒·布朗洛解释了为什么他们把 63 页的报告变成了一个可爱的笔记本——一个故事。其实是那篇文章让我写了这篇。我真的很喜欢他关于杀死一个恐怖神器,把他们所有的报道都改成“故事”的热情。

如果你看一下技术雷达,这是真的,泰勒·布朗洛使用的笔记本电脑,正在越来越多地生产。我喜欢这款笔记本的主要特点是它能够讲述一个小故事。一个普通的老记者无法讲述的故事。

然而,我们仍然依赖于我们的技术人员。最重要的是,在报告中过滤比在笔记本中更容易(尽管也是可能的)。

常见的工具有 Jupyter、上面提到的 Count 以及更多…

(6)图表

最后,一些公司使用图表。我是探索图形的图形用户界面的忠实粉丝。因为我认为,今天的许多企业实际上有很大一部分商业模式是“以图表的自然形式出现的”。

我还认为数据最好以其自然形式进行探索。就像因为扭曲,在地球仪上探索地球比在几十张卡片上探索要容易得多,我发现探索一个可视化的图形要容易得多。

图形用户界面实际上很好地让你显示一个完整的图形,或者让你过滤子图,过滤出新的图形,或者让你遍历它。

因此,如果您的业务模型中确实嵌入了某种图形,我建议您将图形用户界面作为探索问题的工具。当然,缺点是就像 SQL 直接访问一样,有些人必须精通技术才能做到这一点,但是当前的图形语言和 SQL 一样简单。

常用工具有 neo4j 等。

到处都是弱点

听起来每个艺术品都有严重的弱点。然而,我们真的不想有太多。这才是真正的困境。

我写这些是为了提醒自己。我们在考虑把我们的主要艺术品换成另一个。我喜欢记住,无论我们做什么,都不会尽善尽美。也不会是永久的。变化将会到来,所有三个组成部分,数据源,使用数据的人和他们的需求都会发生变化。

那么我们能做些什么呢?

我们基本上必须做我们在软件架构的其余部分做的同样的事情。

我们可以建立模块化的东西,架构,我们可以快速交换我们的 EL (T)中的 EL。在那里,我们可以快速将我们的存储、报告工具换成基于笔记本的架构。

我们可以建立进化的架构,在其中我们非常清楚我们的拟合函数,我们对当前问题的答案的质量。我们知道我们将采取小的迭代步骤来提供更好的答案。

就是这样!

进一步阅读

偏差-方差靶心图真正代表了什么

原文:https://towardsdatascience.com/what-bias-variance-bulls-eye-diagram-really-represent-ff6fb9670993?source=collection_archive---------18-----------------------

实践教程

它与欠拟合和过拟合有什么关系

在寻找偏差-方差权衡时,我们可以看到下面的靶心图:

偏差-方差的靶心图—图片由作者提供

它们看起来直观醒目,用一些蓝点来表示偏差和方差。但是它们到底是什么意思呢?中心点代表目标,但蓝点真正代表什么?这些牛眼是如何与欠适和过适联系在一起的?

照片由维托达·克莱恩Unsplash 上拍摄

与过度拟合和欠拟合的关系

偏差-方差权衡与过拟合欠拟合的概念有关。为了说明这一点,我们可以举多项式回归的例子。在下面的例子中,x 和 y 之间的真实关系是二次的

  • 所以如果我们使用简单的线性回归,模型是欠拟合
  • 如果多项式的次数太高(例如 8),那么模型过拟合
  • 最优模型为二次模型。

多项式回归、欠拟合和过拟合—作者图片

现在,如果我们回到靶心图,关系如下所示:

  • 最优模型对应低方差和低偏差。(好吧,可以理解)
  • 过拟合对应高方差低偏差。(但是为什么呢?如前图所示,它与 8 次多项式回归有什么关系?)
  • 欠拟合对应高偏差和低方差。(但是为什么呢?它与上图中的简单回归有什么关系?)
  • 那么高方差和高偏差呢?什么模式会导致这种情况?

偏差-方差与过度拟合和欠拟合-作者图片

如果我们将它们放在一起,我们如何将靶心中的点与回归图中的数据点联系起来?

更准确的表述

乍一看,靶心图还是挺直观和醒目的。但如果我们真的试着问自己这个问题:每个预测点都有两个坐标?两个维度是什么?

然后我们意识到眼睛只是目标变量值的艺术表现。因为我们通常只有一个目标变量。所以要想更准确,应该只展示一个维度。

中间的红点是我们试图预测的真实值(一个特定的观察值)。蓝点是我们建立的不同模型的预测。

因此,如果我们想更准确地描述目标值和预测值之间的比较,靶心将变成只有一个轴,它代表目标变量。

那么,它们到底代表了什么,我们怎样才能创造出一个具体的模型例子呢?我们编码吧。

多项式回归模型

我们将在以下过程中创建多个模型来说明(欠拟合和过拟合)与(偏差-方差权衡)之间的关系:

  • 首先,我们选择从一个已知的函数生成一些简单的数据。
  • 然后我们可以试着创造模型
  • 对于一个或多个新的观察值,我们可以进行预测,并查看方差和偏差。

生成数据

我们可以生成一些真正的二次关系的数据。

import numpy as np
import pandas as pdn = 20
x = np.linspace(0,7,n) + np.random.randn(n)*0.1def f(x):
    return (x-3)**2y = f(x)+np.random.randn(n)

我们可以用红色的实函数来绘制数据。

不适合的模型

为了用以前的数据创建欠拟合模型,我们可以创建简单的线性回归。利用从原始数据集中选择的一些训练数据,我们可以创建一些模型。

for i in range(20):
    model = make_pipeline(PolynomialFeatures(1), LinearRegression())
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)
    model.fit(X_train, y_train)
    y_plot = model.predict(X_seq)
    plt.plot(X_seq, y_plot,c=”c”)
    plt.scatter(4, model.predict([[4]]),s=300,c=”c”)

如果我们对 4 的值进行预测,我们可以得到下面的图:

  • 红点是真正的目标值
  • 蓝点是由训练数据样本创建的模型(简单线性回归)的预测。

现在,我们可以清楚地看到偏见。我们可以预测几个值

现在,让我们回顾一下不同的插图:

过度拟合的模型

对于过拟合,我们可以通过改变多项式的次数来创建相同的比较。

for i in range(20):
    model = make_pipeline(PolynomialFeatures(8), LinearRegression())
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)
    model.fit(X_train, y_train)
    y_plot = model.predict(X_seq)
    plt.plot(X_seq, y_plot,c=”c”)
    plt.scatter(4, model.predict([[4]]),s=300,c=”c”)

最优模型

当多项式的次数为 2 时,我们可以清楚地看到模型的预测具有低偏差和低方差。

回归树模型

我们也可以用回归树来说明

结论

我希望现在你能更准确地看到偏差-方差靶心。

如果是这样,最后一件事:什么样的模型可能具有高方差和高偏差?

当业务人员说细分时,他们实际上寻找的是什么

原文:https://towardsdatascience.com/what-business-people-really-mean-when-they-say-segmentation-82f2a815b7b1?source=collection_archive---------16-----------------------

…以及如何使用 Python 创建有效的细分分析

梅尔·普尔在 Unsplash 上的照片

又到了重温我的 Python 技能的时候了!👩🏻‍💻

本周,我想分享我在前雇主德国金融科技初创公司做的一个项目。在这个项目中,我与营销团队合作,使用 Python 向提交了一份用户细分分析,最终推动了从机会主义增长战略到清晰的品牌定位和目标战略的转变,并将客户群从 5K 增长到 400K。

在这篇文章中,我很乐意用 Kaggle 数据集分享我的方法,并结合我最近在 MBA 课程“管理客户价值”中的收获。如果你对我在 INEAD MBA 的第一周感到好奇,请查看这篇文章了解更多细节!

除了这篇文章之外,你还可以在这里找到一个附加的 Kaggle 笔记本,它是用这里描述的方法实现的,基于一个不同的数据集:https://www . ka ggle . com/Yao wenling/clustering-analysis-and-CLV

如果你对我如何基于 RFM 模型进行具体的细分分析感兴趣,请点击这里查看!

以下是我的要点:

🎯当业务人员谈论细分时,他们不是在寻找一组数据点,而是一套清晰、可操作的标准,人们可以用这些标准来识别不同的、足够大的、价值驱动的细分市场,并通过现实检查。

🧩只使用一种算法是不够的。为了实现这个目标,我们需要结合回归、聚类、均值比较和综合。

🕵🏻‍♀️:只看内部数据是不够的。为了确保我们的细分市场通过现实检验,我们需要与产品 UX 研究人员和品牌营销团队密切合作。

真正的商业问题

在我加入前雇主的第二周,首席执行官问了我以下问题:“这是我们的第二年。我们已经积累了 5K 的客户群。注册会计师看起来不错。产品看起来不错。我们也在创收。我们应该去哪里?谁是我们最有价值的客户(MVC)?他们看起来怎么样?我们怎样才能获得更多的知识呢?

我们定义了预期的输出应该是什么样子:

  • 分段应该足够清晰。我们想将顾客分成几类。每个群体内的个体之间应该尽可能“近”,跨群体的个体之间应该尽可能“远”。
  • 片段要足够大。我们确定的群体应该代表我们的客户。换句话说,在总客户群为 5K 的情况下,每个确定的群体应该大于总人口的 10%。理想情况下,我们还希望将组的数量限制为最多 5 个。
  • 细分市场应该以价值为导向。已确定的团队应向企业展示不同的价值。在最好的情况下,我们能够确定一个占客户群 20%却贡献了 80%收入的客户群——著名的 80/20 法则。
  • 奖励:片段应通过真实性检查。换句话说,假设我们已经确定了一个完全不同的满足上述 80/20 要求的客户群,但这些客户的平均收入超过 20 万,我们可能需要重新考虑标准,因为市场上可能没有那么多收入如此高的人能够以合理的 CPA 收购。或者想象另一种情况,我们已经确定了一个有价值的客户群,但我们的用户研究表明,具有这种特征的用户需要的功能肯定超出了你的产品范围,那么我们也应该重新考虑我们的分类标准(或重新考虑你的产品范围:)。为了解决这两个问题,仅仅查看我们用户的数据是不够的,还需要与 UX 的研究人员以及营销团队进行广泛的合作 —在我后期分析的第二次迭代中,我有机会与这两个领域的人才一起工作,我将在本文结尾分享一些心得。

一种结合回归、聚类和均值比较的方法,最重要的是综合

我来自一个定量的背景,最初我认为我们需要一个聚类分析来产生细分和回归分析来识别客户价值的预测。我很快意识到,独立进行这两项分析无助于回答我们提出的问题。

为什么简单的回归分析是不够的

通常当我们问类似“什么样的客户给我们带来更高的收入?”,我们的直觉是将收入或 CLV(客户终身价值)作为因变量,并进行回归,以找出哪些预测因素可以帮助解释收入的差异。然而,回归模型的直接输出是不够的。

例如,回归模型可能会显示,假设所有其他条件相同,年轻客户比年长客户产生更高的收入,收入较高的客户产生更高的收入。这些见解很棒,但它们都基于一个单一的维度。然而,分割标准总是多维的。

也就是说,回归分析仍然很有意义——有了它,人们可以对哪些变量是有影响的以及应该包含在我们的分析中有一个大致的概念。

为什么简单的聚类分析是不够的

简单回顾一下什么是聚类分析,它给我们带来了什么:

  • 聚类是一种无监督的机器学习算法,这意味着它不具有任何预测能力或解释目标变量的任何变化。
  • 假设数据集中的每条记录都是一个单独的用户,并且有典型的人口统计变量,如性别、年龄和工作。聚类的输出是分配给每个用户的具有聚类标签(例如,1,2,3,…k,其中 k =生成的聚类的数量)的新列。
  • 人们可以通过检查聚类内和聚类之间的数据点之间的距离来评估聚类性能。然而,没有正确或错误的答案,也没有更好或更坏的答案。

然而,聚类分析的直接结果并没有回答我们的问题。这是因为在大多数情况下,这些聚类本身并不一定形成“良好”的描述标准。例如,假设我们最终有两个集群 X 和 Y,我们检查这两个集群的描述性统计数据,我们可能会看到这两个集群的年龄范围都是 18–75 岁。这是因为无论你的算法有多精细,你总会在一个集群中发现一些在某些维度上看起来像离群值的观察值。例如,在平均年龄为 25 岁的聚类 X 中,您可能会发现一个 70 岁或 18 岁的用户,他/她被归类到聚类 X 中,因为他/她在所有其他维度上与其他聚类成员非常接近。然而,比较每个集群的平均年龄可能会给我们一个提示,即这些集群实际上在年龄分布方面互不相同。

因此,为了生成清晰且可操作的标准,需要更深入一层,以生成关于集群特征的知识——我将这一过程称为“合成”。在上面的示例中,通过查看每个聚类的 10%和 90%四分位数,可以得出一个更合理的年龄范围,其中确切的临界值取决于您的容忍度。我们可能会发现,集群 X 中 80%的用户年龄在 20-35 岁之间,而集群 Y 中的用户年龄在 45-55 岁之间。类似地,我们可能还会发现,集群 X 和集群 Y 中的用户从事各种类型的工作,但仔细观察就会发现,集群 X 中 80%的用户是开发人员,而集群 Y 中 80%的用户在金融行业工作。

下一步是使用这些总结的知识来定义你的集群。坚持上面的同一个例子,回想我发现集群 X 中 80%的人在 20 到 35 岁之间,80%是开发人员,我可以定义一个标准如下:1)年龄在 20 到 35 岁之间;2)他们是开发者。然后,我使用这些过滤器生成一个名为“年轻开发者”的细分市场。注意,如聚类算法所给出的,该片段肯定小于聚类 X(根据上面给出的假设,小 100%-80%*80%=36%)。然而,如果我们发现一个片段太小(例如,<总人口的 10%),我们需要考虑将其与其他片段合并。

跨定义的集群评估客户价值

在生成集群之后,我们想要检查这些集群是否有价值。检查的一种方法是比较集群间的平均 CLV。或者,也可以使用其他货币化指标,如平均。订单数量、转化率、CLV/注册会计师等。

值得注意的是,这些与价值相关的指标不应该作为我们前面步骤中聚类算法的输入。这是因为当我们定义聚类时,我们希望找到可以用来识别市场上客户的标准,而这些与价值相关的指标(例如,用户活动、收入、CPA)只有在获得用户后才会生成。然而,如果我们问一个不同的问题“我们可以根据客户的参与模式对他们进行分组吗?”,那么我们就可以使用这些价值相关的指标进行聚类。

在比较各集群的平均客户价值时,同样值得使用 Tukey 测试来检验统计显著性

最后,为了取悦我们的业务涉众,我们可以基于 PCA(主成分分析)创建一个手动定义的聚类的 2D 图,以显示这些聚类彼此之间有多么不同!

业务影响

通过我在第二周所做的分析,我们能够确定一个我们称为“年轻专业人士”的细分市场,与“学生”、“城市家庭”和“退伍军人”等其他细分市场相比,该细分市场的收入表现显著。我与首席执行官和 CMO 交流了结果。很快,我们从以“我们的应用帮助您省钱”为主要信息的大众营销转变为以我们的数字解决方案为特色的面向年轻一代的目标信息。与此同时,我们开始将我们的营销预算重点从电视转移到数字渠道(例如,CPC、社交媒体和应用内广告)因为我们相信它们是吸引我们最有价值客户(MVC)的最佳渠道。

两年后,当我们的客户增长到大约 100,000 时,我受命重新进行这项分析。我重复了上面同样的方法。好消息是,我们看到“年轻专业人士”的比例有所增加,这些客户仍然同样有价值(即,他们的平均收入贡献没有因为我们试图收购更多此类客户而被稀释)。这次对我个人来说有所不同的是,我有机会与我们的产品 UX 研究人员和品牌营销团队合作。这是一次非常宝贵的经历,因为我看到了我的见解是如何被用来支持他们的用户研究和外部品牌机构的进一步市场研究的。

就是这样!如果你有想法或问题,请告诉我!

关于神经网络为什么会泛化,平坦度能教会我们什么?

原文:https://towardsdatascience.com/what-can-flatness-teach-us-understanding-generalisation-in-deep-neural-networks-a7d66f69cb5c?source=collection_archive---------32-----------------------

思想和理论

它的不足之处在哪里?

这是一系列总结工作的第三篇文章,旨在提供深度神经网络(DNNs)的一般化理论。简而言之,的第一篇文章总结了用随机优化器(如 SGD)训练的 dnn 在参数空间中找到概率与其体积成比例的函数的证据,而的第二篇文章认为这些大体积函数是“简单的”,因此解释了为什么 dnn 会泛化。

在下文中,我们总结了[1]中的结果,这些结果解释了为什么“损失前景的平坦性”已被证明与一般化相关,这是一个众所周知的结果(例如参见[5])。他们提供了大量的经验证据,表明这种相关性实际上是(1)局部平坦性和周围函数的体积之间的弱相关性,和(2)体积和一般化之间的强相关性的组合。这种结合在“平坦”和概括之间产生了微弱的相关性。

它是和张硕丰一起写的,他是【1】的第一作者。

简介和背景

自 20 世纪 90 年代以来,直觉上认为损失景观的局部平坦性与深度 DNNs 中的良好概括相关,Hinton 和 Schmidhuber 认为,由于更平坦的最小值需要更少的信息来描述,它们应该比尖锐的最小值更好地概括(根据奥卡姆剃刀原理)。由于这种最初的兴趣,已经开发了许多不同的局部平坦度测量,并且已经发现设计来寻找平坦区域的算法可以改进一般化。

图 1: 来自 Keskar 等人【5】,其中平坦极小值和良好概括之间的联系被重新构建,以这幅漫画作为直觉。如果测试损失函数与训练损失函数略有不同,则在平坦最小值中,训练损失和测试损失之间不会有太大差异。然而,在尖锐的最小值中,在测试和训练损失之间可能有实质的差别。

尽管有这些工作,所有的平坦度测量都有严重的问题:它们受到α缩放问题的困扰:对于一个 ReLU 激活的 DNN,你可以通过(某个常数)α和 1/α分别缩放两个相邻层的权重,并且不会改变 DNN 在数据上表达的函数,因此不会影响泛化。不幸的是,(大多数)平坦度测量在α缩放后会有很大的变化

更糟糕的是,α缩放只是一个重新参数化例子,不会改变函数。这个重新参数化可以是层方式的,也可以是神经元方式的,这取决于具体的 DNN 架构。

许多工作已经为 SGD 训练的 dnn 发现了以下情况:如果 SGD 在损失函数中找到平坦的最小值,则平均而言,网络将比如果 SGD 找到尖锐的最小值概括得更好(参见图 1 以获得该论点的漫画)。然而,α-标度论点表明,任何平坦的极小值都可以变得任意尖锐,而不改变函数,以及一般化。

因此,平坦性不可能是概括良好的函数的定义特征。

在[2,3,4]中提出,我们应该开始考虑参数空间功能空间之间的关系。毕竟,dnn 是高级函数逼近设备,很明显参数的选择相对于参数产生的函数来说是次要的 我们需要问以下两个问题:

  1. 函数空间中的什么性质赋予函数良好的推广性?
  2. 平坦是如何融入其中的?

深度神经网络的函数空间观

dnn 是从输入空间 X 到输出空间 Y 的参数化函数。更具体地说,参数θ的选择决定了深度神经网络表达什么函数 f : X→Y :我们将把它写成 Y =f(X;θ)

对于某些数据集 D,有一个“真”函数 f : X→Y* 描述了如何将 D⊂ X 中的输入映射到 Y 中的输出(其中 D 是数据流形)。我们的神经网络的工作是在给定一些训练数据 S ⊂ D 的情况下,尝试在整个 D 上精确地逼近 f* 。需要强调的是,在训练之后,神经网络所表达的功能在 S 上总是相同的(如果你在 S 上训练到 100%的准确度),但是在 D 的其余部分上可能不同。这些差异会导致不同的概括错误。

例如,考虑 MNIST: X28×28 灰度图像的空间, Y 是标签{ 0–9 }的空间,f 是从图像到标签的映射, DX 中对应于手写数字的部分, S 是这些图像的子集。

更多细节和示例见第一篇文章

在我们继续之前,我们需要定义[1]的中心量(参见图 2 的图示):

  • V(f) 是某个神经网络的参数空间中的体积(具有高斯度量),使得f(x;θ)=f (x)。这意味着两件事:(1)所有函数的“总体积”是 1,以及(2)因此, V(f) 是参数空间的分数,这使得神经网络表达 f.
  • Pₒₚₜ ( f | S ) 是像 SGD 这样的随机优化器在 s 上训练到 100%精度后找到函数 f 的概率
  • V( f | S) = P(S | f ) V(f) / V(S),其中 V(S) 是与一个训练集 S,P(S | f ) =1 如果 fS else 0 一致。

图 2: 这两个图总结了前两篇帖子中的论点。(a)是参数空间的动画,显示了当你根据训练集 S 对其进行划分时会发生什么。有些功能在 S 上不能很好地执行,而在那些有组合体积的功能中, V(S),中,有些功能比其他功能占据了更多的体积。有人认为具有大的 V(f) 的函数“更简单”,因此更容易推广。量 V( f | S)f (某白函数)的体积除以白函数的总面积。(b)认为,如果v(f | s)有一个很大的范围,那么你期望 Pₒₚₜ ( f | S ) ≈ V( f | S)

[3]中的大量经验证据表明,DNNs 中的良好概括有以下三个原因:

  1. Pₒₚₜ ( f | S ) ≈ V( f | S) 用于优化器训练的 DNNs
  2. 体积较大的函数 V(f) 比体积较小的函数 V(f) 概括得更好
  3. [3]中的论点表明,这是因为高容量功能“简单”

直观地说,(1)是说优化者发现函数的概率与它们在参数空间中占据的体积成比例。优化器的选择将少量影响第一个近似等式,这可以解释一般化中的小变化。

需要澄清的最后一点是:我们如何度量函数的差异?当然,我们不可能计算所有可能数据的差异。相反,我们使用一个小的测试集 E⊂ D 。我们根据功能在 E 上的表现来区分它们。例如,假设你在大小为|S|=50000 张图片的训练集 S 上训练 MNIST,直到 100%的训练准确率。使用该停止条件训练的任何网络将在 S 上模拟相同的函数 f (即,它将以相同的方式对所有图像进行分类)。然而,根据随机种子,神经网络将在看不见的图像的测试集 E 上找到不同的可能分类。在图 2a 的漫画中,每个白色区域对应于这些看不见的图像的不同分类。这是一种对函数进行“粗粒化”的方法,因此我们可以以一种有意义的方式计算像 V(f |S) 这样的量。

该功能通常根据 X 中的一些数据 D 来定义。还有几个类似的微妙之处,这里有完整的解释。
注意,在第一篇文章中, V(f|S) 被标为 Pᵦ(f|S) 以强调这个量的贝叶斯解释。

平坦度和体积与泛化的关系如何?

所以,我们想问下面的问题:一般化是由前一节给出的论点解释的吗,或者平坦性有什么要补充的吗?

V(f) 范围内,局部平坦度可能有所不同,但似乎可以感觉到,高音量的函数平均来说比小音量的函数更平坦(考虑图 2b )。

然后,假设在体积和一般化之间有很强的相关性,体积和平坦度之间的弱相关性可能足以给出一般化和平坦度之间的弱相关性。

[1]的主要结果提供了支持这一主张的大量经验证据。

平坦度和一般化之间的相关性高度依赖于优化器,并且比体积和一般化之间的相关性弱得多(即使忽略平坦度-一般化相关性可以通过α缩放任意确定)。以下结果使用[5]中的最差情况锐度指标。为了迫使优化器找到泛化能力差的函数,将由错误标记的数据组成的“攻击集”添加到训练数据中。

图 3:MNIST 和 CIFAR-10 上音量 V(f) 锐度和泛化精度的相关性。对于 MNIST |S|=500,| E | = 1000 对于 CIFAR-10 |S|=5000,|E|=2000。攻击集大小|A|从 0 到|S|不等,并生成具有不同泛化性能的函数。(a)-(c)分别描述了 MNIST FCN、CIFAR-10 FCN 和 CIFAR-10 Resnet-50 的概化和数量之间的关系。(d)-(f)显示了相同的三个数据集-架构对的泛化能力和清晰度之间的相关性。在这个实验中,所有的 dnn 都用普通的 SGD 训练。

图 4: SGD 变体可以打破平坦度-一般化相关性,但不能打破体积-一般化相关性。这些图示出了在(a)和(d)上训练的 FCN 的泛化与音量或锐度的关系——具有熵-SGD 的 MNIST;(b)和(e)——MNIST 和亚当;(c)和(f)——带有自动监测系统的 CIFAR-10。对于与图 3 中相同的 S 和 E。请注意,与体积的相关性实际上与普通 SGD 相同,但与平坦度的相关性变化很大。

当我们在训练时直接比较同一 DNN 的平坦度和体积时,我们看到了更有趣的东西。在图 5 中,我们测量了在 MNIST 训练的 FCN 在每个时期的音量和锐度。在第 140 个时期达到零训练误差,我们又过度训练了 1000 个时期。从初始化开始,清晰度和音量都降低,直到达到零训练误差。随后,体积保持不变,但交叉熵损失继续减少,正如这类分类问题所预期的那样。这导致锐度降低,即使函数、音量和训练误差不变。这表明平坦度是一个相对的概念,例如,取决于训练的持续时间。

我们还研究了α缩放:图 5 还显示了您可以执行α缩放并影响锐度,而无需更改函数。如插图所示,由于函数 f 不变,体积在α缩放时最初是不变的。然而,α缩放可以将系统驱动到参数空间的不寻常部分,在损失函数中具有陡峭的梯度,这意味着 SGD 几乎立即脱离零训练误差流形。然而,该系统很快就松弛到基本相同的功能和体积。这一经验发现进一步表明了平坦性论点的局限性,同时加强了功能空间视图和体积作为与良好概括相关联的良好属性。

图 5: 锐度和音量如何随时代演进。在每个时期,我们计算|S|=500 的 MNIST FCN 的锐度和音量。绿色虚线表示时期 140,在该时期达到零训练误差并且后训练开始。红色虚线表示时期 639,其中α = 5.9 时发生α缩放。在α缩放时,清晰度显著增加,但随后又迅速降低。插图显示,在α缩放后,音量最初没有变化。然而,大梯度意味着在随后的 SGD 步骤中,在恢复到(几乎)相同的功能和体积之前,功能(和体积)会发生变化。

结论

我们讨论了以下结果:

  1. 随机优化者发现函数与它们在参数空间中占据的体积成比例(有点直观)。
  2. 高容量函数(最常见的函数)更可能是“简单”的,因此概括得更好(因此 DNNs 概括得更好)。
  3. 这些高音量函数在很大程度上比低音量函数局部更平坦。

因此,在平坦度和一般化之间观察到的弱相关性是由于(弱)平坦度-体积相关性和(强)体积-一般化相关性的组合。

注意,这是对[1]的删节总结。因此,我们把重点放在了我们认为最重要的部分,因此可能忽略了一些有趣的细节。

参考文献

[1]张硕丰,艾萨克·里德,吉列尔莫·瓦莱·佩雷斯,阿德·路易.为什么平坦度与深度神经网络的泛化相关。(2021)
【2】c .明加德,g .瓦莱-佩雷斯,j .斯卡尔斯,a .路易。SGD 是贝叶斯采样器吗?嗯,差不多了。(2020)https://arxiv.org/abs/2006.15191
【3】c .明加德、j .斯卡尔斯、g .瓦莱-佩雷斯、d .马丁内斯-卢比奥、v .米库利克、a .路易斯。神经网络先验地偏向于低熵函数。(2019)https://arxiv.org/abs/1909.11522
【4】g .瓦莱-佩雷斯,c .卡马戈,a .路易。深度学习泛化是因为参数-函数图偏向简单函数。(2018)https://arxiv.org/abs/1805.08522关于深度学习的大批量训练:泛化差距和尖锐极小值(2016)。https://arxiv.org/abs/1609.04836

ML 项目会出什么问题?

原文:https://towardsdatascience.com/what-can-go-wrong-with-ml-projects-cc708a6a0db7?source=collection_archive---------45-----------------------

5 常见的事情,以及如何避免它们

托马斯·马图在 Unsplash 上的照片

TL;速度三角形定位法(dead reckoning)

启动一个包含机器学习(ML)的项目可能是一件棘手的事情。在这篇文章中,我们将探讨一些你在旅途早期可能遇到的陷阱,更重要的是,如何避免它们。

💡我已经按照你可能遇到的顺序把它们列出来了。但是你不需要按顺序读,直接跳到和你最相关的地方。

(1)️你的问题不太适合机器学习

ML 的存在,并不总是意味着我们应该使用它!ML 不是魔术,它当然也不是解决所有商业问题的灵丹妙药。但是,当应用于正确的用例时,它可以产生有希望的结果。

在决定使用 ML 是否是解决问题的正确方法之前,首先考虑一些好的老式数据分析是否能提供您需要的答案。

通常,通过一些数据汇总、过滤和总结,你通常可以识别出数据中的简单模式或趋势,比如“我们的产品在 Q2 的销量与 Q1 相比如何?”?

当数据中的模式不太明显时,我们倾向于使用 ML,例如“从 1000 件甚至 100,000 件产品的目录中,我的客户更倾向于购买什么产品”?

下面我列出了一些常见的问题和适用于 ML 的相关用例:

  • 预测分析 —欺诈检测、预防性维护、点击率、需求预测、下一个最佳客户行动
  • 处理非结构化数据 —注释视频、识别眼疾、对电子邮件进行分类
  • 实现自动化 —安排维护、拒绝交易、统计零售客流量、扫描医疗表格
  • 个性化 —客户细分、目标定位、产品推荐

🧐仍然不确定你的问题是否适合曼梯·里?看看机器学习问题框架介绍,谷歌免费在线机器学习速成班的一部分。

(2) ️Jumping 在没有原型的情况下进入发展

开始将您训练的第一个 ML 模型集成到您正在构建的最终解决方案或应用程序中是很诱人的。

要认识到的重要一点是,ML 模型开发是一个迭代过程。在项目开始时,不可能知道所有可能影响模型性能的变量。

一个快速的原型可以告诉你很多隐藏的需求和潜在的实现挑战,在它们成为你的模型进入生产的障碍之前。

例如,您可能会遇到缺失或脏数据。一种类型的模型比另一种产生更好的结果吗?你甚至关注正确的预测目标了吗?

最好从一个简单的模型开始,继续完善它,直到你达到你的目标,或者你满意的基线。

🛠:有很多工具可以用来创建快速 ML 模型原型,下面是我最喜欢的三个:

  • BQML —如果您熟悉 SQL,您可以使用简单、简短的语句来创建、评估 ML 模型并从中获得预测。这就发生在使用 BigQuery 的数据表所在的地方。BigQuery 是来自 Google Cloud 的完全托管的无服务器数据仓库。
  • Jupyter Notebooks——“Jupyter Notebook 是一个开源的 web 应用程序,它允许你创建和共享包含实时代码、等式、可视化和叙述性文本的文档”[1]。笔记本的美妙之处在于,每当您想要测试或更改 ML 模型代码的元素时,您可以独立地执行代码块,而不是编译和运行整个程序。如果你不想管理基础设施的麻烦,你可以在谷歌云上使用 Vertex AI 启动托管笔记本实例。还有一些方便的 python 库,比如 Lazy Predict 可以与笔记本结合使用,帮助快速向下选择最佳模型。
  • AutoML —另一个 Vertex AI 产品,AutoML 使机器学习专业知识有限的开发人员能够根据他们的业务需求训练高质量的模型。AutoML 提供了一个无代码的用户界面,使您能够摄取训练数据集、训练模型并评估其性能。在幕后,它实际上是使用 ML 来确定用于解决您的问题的最佳 ML 模型🤯。如果您选择将它部署到生产环境中,它也使得最终服务于模型变得容易。也有一些其他供应商,如 DataRobot 和 H20.ai,给你更多的灵活性和对他们自己的 AutoML 正在比较的算法的洞察力,以排行榜的形式呈现结果。

(3) ️You 数据集不平衡

当您试图训练一个 ML 模型来对例外情况而不是规则进行分类时,这是一个常见的场景,例如银行交易中的欺诈检测。

您可能已经在培训数据集中验证了欺诈交易的实例。但是因为真实的实例往往不太常见,你会发现你的数据集是不平衡的。

考虑到我们的欺诈检测问题,假设非欺诈交易与欺诈交易的比例为 5000:1。如果数据集包含一百万个示例,那么数据集只包含大约 200 个欺诈交易的示例,这对于有效的训练来说可能是太少的示例。

这种数据不平衡会直接影响您的模型对欺诈交易进行准确分类的能力。

你能做些什么:

  • 调整权重 —我们的目标是识别欺诈交易,但你没有太多的正面样本,所以你会希望你选择的 ML 分类器对可用的几个例子赋予更多的重要性(或权重)。大多数常见的 ML 分类器允许您通过参数传递每个类的权重。这将导致模型“更多地关注”来自代表性不足的类别的示例。[2]
  • 过采样和欠采样 —这是一种技术,可用于调整数据集的分布,使其更加平衡。回到我们的欺诈检测场景,您可能会多次重复采样(重用)这 200 个欺诈交易示例,可能会产生足够多的有用训练示例。欠采样具有相反的效果,即从多数类中删除样本,在我们的情况下是非欺诈性交易。

⚠️当对训练数据进行过采样和欠采样时,你需要小心过拟合

  • 合成数据生成 —另一个选项是以编程方式创建您需要的数据。在某些情况下,这可能会更加困难,尤其是当您不知道训练数据集中哪些特征构成了代表性不足的类时。根据您用来构建 ML 模型的编程语言,有许多免费的库可以帮助生成合成数据。例如在 Python 中,流行的 Scikit-learn ,SymPy 或者 Pydbgen 都可以用来生成合成数据。

🧐想要一个更实际的、基于代码的例子吗?看看 TensorFlow 网站上的这个教程:不平衡数据分类

(4)模型训练耗时太长

模型训练是从输入数据中学习以建立 ML 模型的过程。

对于许多可能包含数百万行的真实数据集,训练可能需要数小时、数天甚至更长时间。

在您的模型被训练之后,您可以评估它的准确性(参见第 5 节了解更多信息!)来查看您是否在之前的训练迭代中取得了改进。

当您或您的团队试图快速迭代新的想法和技术时,培训时间可能会成为项目的巨大瓶颈,阻碍创新。

你能做些什么:

  • 在不管理基础设施的情况下训练模型 —如果您在笔记本电脑或普通工作站上训练您的 ML 模型,那么您的硬件规模很可能会限制您快速训练模型的能力。一种选择是使用基于托管云的服务,例如 Vertex AI 。基本上,Google Cloud 根据您的培训需求,处理启动虚拟机实例的过程。你只需要带上训练你的 ML 模型所需的代码。或者使用 AutoML 实现无代码方法!
  • 利用加速器,如GPUTPU——大多数 ML 框架,如 TensorFlow,旨在利用适合大规模分布式处理的专用硬件。如果您需要处理数百万行数据,那么并行处理要比一次处理一个块高效得多!专门针对 Tensorflow 的 GPU 和 TPU 可以帮助我们实现这一目标。GPU 可以添加到物理硬件中,或者指定为云中虚拟机配置的一部分。TPU 是非常专业的硬件,只能通过谷歌云获得。
  • 通过自动 超参数调整提高模型质量——如果构建 ML 模型的代码就像在烤箱中烘焙蛋糕的配料,您可以将超参数调整视为在烤箱的旋钮上进行的调整。超参数的值会影响训练模型所需的时间,您可以根据特定目标选择调整它们。虽然许多机器学习库包括超参数调整功能的某些方面。更进一步,例如, Vertex Vizier 提供自动超参数调整,对“烤箱旋钮”进行最佳调整,这样您就不必这么做了。

🚀如果您没有能力扩展您的计算资源,另一个选择是尝试使用较小的数据集子集。您也许能够训练一个足够好的模型,而不需要使用每一行来训练它。与第 2 节中提到的快速原型制作工具结合使用;在提交更大的训练数据集或算法之前,通过比较训练时间,您仍然可以取得快速进展。

(5) ️Model 精度不够好

有时,您可能会感到停滞不前,因为您的 ML 模型没有产生足够准确的预测来满足您的目标或业务目标。

你是否觉得自己撞上了一堵砖墙,无法再进一步提高准确率?

你能做些什么:

  • 提高你试图解决的问题的领域专业知识 —也许你问了错误的问题,也许你试图预测的目标变量不会解决问题。有时候,后退一步,向他人咨询,尤其是领域专家,会有所帮助。他们可能会更好地理解今天是如何解决问题的(没有机器学习),并可以就成功的启发和衡量标准提供指导。这样你就可以有一个合理的基准来判断基于 ML 的方法的有效性。
  • 包括更多不同的训练数据——我在以前的帖子中讨论过数据是 ML 模型的关键。回到你的数据源,你能找到更多的训练例子或者不同的特征来提高你的 ML 模型的准确性吗?质疑你所拥有的数据是否适合解决这个问题。
  • 特征工程 —这是为你的 ML 模型修改特征或输入变量的过程。例如,您的训练数据可能包括来自银行交易日志文件的原始输出,但是您不一定需要每个字符来提取对您的模型影响最大的数据。您可以利用您的领域专家来帮助您找出那些属性可能是什么。
  • 删除可能导致过度拟合的特征;从一个更小、更简单的模型开始,逐步添加功能— 过度拟合是指您创建的模型与训练数据匹配得如此紧密,以至于它无法对新数据做出正确的预测。有一些简单的方法可以减轻过度拟合的影响,首先通过将训练数据随机分为训练和测试数据集来识别它,并比较结果-如果您的模型在训练集上表现良好,但在测试集上表现不佳,则您很有可能过度拟合。如果您发现过度拟合,请尝试使用更大的数据集重新训练模型。

对于帮助解决模型准确性的更高级的技术,看一看交叉验证、正则化和集合(进一步阅读中的链接)。

如果你是因为自己的 ML 项目遇到了障碍才找到这里的,这篇文章的目的是给你一些新的研究途径。希望它能让你再次朝着正确的方向前进!

直到下一次👋🏼

📚进一步阅读和学习

📇参考

[1]https://jupyter.org/

[2]https://www . tensor flow . org/tutorials/structured _ data/unbalanced _ data

关于概率的概率,篮球奇才凯文·杜兰特能教些什么?

原文:https://towardsdatascience.com/what-can-kevin-durant-teach-about-the-probability-of-a-probability-7eaa43366896?source=collection_archive---------28-----------------------

让我们用上周日比赛中凯文·杜兰特的三分线来理解贝塔分布。

背景

上周日,密尔沃基雄鹿队以 11 分的优势击败布鲁克林篮网队,在东部半决赛中以 2 比 2 平。然而,网队的明星前锋凯文·杜兰特又一次贡献了出色的数据,但在三分线上的表现却非常糟糕。杜兰特是一个非凡的,非常高效的得分手,是有史以来最伟大的得分手之一,所以看到他八次三分球尝试中只有一次是很奇怪的。根据回归均值,杜兰特很可能会逆转他的统计数据,让事情变得公平。然而,我们可以从他相对低调的表演中获得一些振奋人心的见解。(PS:杜兰特 49 分 17 篮板 10 助攻点亮第五场,三分球 4/9)。

虽然篮球兴趣不是这篇文章的先决条件,但我希望你理解贝叶斯定理,概率分布(二项式和连续分布的基础)。

Photo by 鸣轩 冷 on Unsplash

1.得分效率和掷硬币

从统计学的角度来看,每个 NBA 球员都可以被认为是硬币的主人。然后,我们可以用数学方法模拟每个球员通过掷硬币获得三分的机会。如果硬币正面朝上,玩家得分。因此,每个玩家的三分统计线都遵循二项分布,其中得分概率= P(H)= P。难题是估计硬币正面落地的概率(P)。

让我们重温一下杜兰特的 1/8 统计线。遗憾的是,由于我没有观看比赛(支持雄鹿!),我不知道他投篮不中的顺序。我们假设他犯了第一个错误,其余的都是错误。因此,我们的数学模型得出以下结果(顺序并不重要):

凯文·杜兰特的三点尝试:H,T,T,T,T,T,T,T

如果没有杜兰特职业生涯的先验知识,推断他得分的概率 P(H)=p=1/8 是合理的。本质上,根据他的数据,杜兰特有 12.5%的机会在他的第 9 次尝试中得分。

现在,让我们用贝叶斯统计来理解这一点。我们认为杜兰特投中三分球的概率是一个变量 p。接下来,我们评估杜兰特最有可能投中上述统计线的 p 值。这是一个基本的最大似然估计问题。使用贝叶斯定理,我们得到:

作者图片

上式有 P(p)项。很诡异,不是吗?毕竟 p 本身就是一个概率。我们必须确定这些概率之间的差别。P(H)=p 是杜兰特硬币落地头的几率(杜兰特三分命中)。P(p)是 p 等于特定值的概率。例如,如果 p=0.3,杜兰特有 30%的可能性投进三分球。P(p=0.3)量化了杜兰特投中三分球的概率是 0.3 的概率有多大。

总之,通过计算上面的 lhs,我们可以量化 p 等于值 p 的可能性。

P(Statline|p)是见证杜兰特 1/8 stat 线的几率给定他的三分得分概率为 p,如上所述,它遵循二项分布。

作者图片

熟悉贝叶斯统计应该有助于你回忆分母,P(统计线)是一个常数。此外,对于最大似然估计,P(p)遵循均匀分布。也就是说,我们假设 p 同样可能是 0 到 1 之间的任何值。因此,最大化 P(p|Stat-line)与最大化 P(Stat-line|p)是等价的。你可以承担所有计算的负担,或者相信我 P(p|Stat-line)对于 p=1/8 是最大的。

上述结果表明,如果杜兰特的三分得分概率为 1/8,那么他最有可能打出 1/8 的统计线

我们的下一步是确定 p 不是 1/8 的概率。 同样,由于 P(Stat-line)是一个常数,P(p)是均匀的,所以绘制 P(Stat-line|p)和度量可能性 P(p|Stat-line)就足够了。

假设 p=0.05,0.125,0.2,0.3 和 0.4。

作者图片

如前所述,P(H|Stat-line)在 p=0.125 时最大。然而,有一个合理的概率 p=0.2。类似地,尽管很少,p 仍然有可能等于其他值。

我们可以扩展上面的过程来绘制范围(0,1)中更多的 p 值。

作者图片

import numpy as np
import matplotlib.pyplot as plt
n=[20,30,100,1000]
f,ax=plt.subplots(2,2,figsize=(20,10))
ax=ax.flatten()
for i in range(0,4):
 P=np.linspace(0,1,n[i])
 Y=P*(1-P)**7
 ax[i].plot(P,Y)
 ax[i].set_title(str(n[i])+'points in range (0,1)')
 ax[i].set_ylabel('Likelihood',size='15')
 ax[i].set_xlabel('p',size='15')

请注意,当我们绘制更多 p 值的可能性时,我们会倾向于平滑连续的曲线。这暗示了这里有一个概率分布, 概率分布的概率准确地说是 ,埋在上面的情节里。

2.发掘分布

好吧,我们在杜兰特的 P(p|stat-line)似然图中建立了一个概率分布函数(pdf)的存在。如何获取?让我们反弹到 P(p|Stat-line)并解密贝叶斯方程。

作者图片

如果你学过连续概率分布,你一定学到的第一件事就是 pdf 曲线下的面积总是 1。因此,如果我们的目标是收集 P(p|Statline)的 pdf,我们可以将函数 P(Statline|p)除以它的面积,这正好等于 P(Stat-line),这是我们在上面的图中忽略的常数。

作者图片

接下来,由于 P(p)遵循 0 和 1 之间的均匀分布,我们应该用差分 dp 来代替它。不要被它在等式中的存在所困扰。它在 pdf 的情节中没有任何作用。因为 L.H.S 是 p=P(某数)位于区间(a

作者图片

你认识上面的功能吗?你遇到过吗?没有任何证据,我向你保证,这是臭名昭著的测试版。

作者图片

杜兰特的得分概率(p)因此,基于 1/8 的 stat 线,遵循参数为 2,8-beta(2,8)的 beta 分布。(比较贝塔函数方程和 P(p|Statline))贝塔分布服从一个有趣的规律。

3。贝塔分布的附加性质

首先,beta(1,1)只不过是一个均匀分布。记住,我们假设 P(p)服从均匀分布。在机器学习行话中,P(p)是先验,P(p|Stat-line)是后验。

为了估计概率分布,分析师建立一个先验的、有根据的分布猜测。在观察数据后,他们求解上述贝叶斯方程并计算后验概率,即修正的估计值。

在我们的问题中,先验是β(1,1),后验是β(2,8)。我们知道杜兰特投了 1/8 篮。从硬币的角度来看,八次投掷中,只有一次正面朝上。利用 toss 结果,你能把先验和后验联系起来吗?

作者图片

我们可以对此进行概括。如果有一个 beta 先验,其中参数 x,y- x 表示正面,y 表示反面,并且一个观察数据集有 h 个正面和 t 个反面,那么后验将是 beta(x+h,y+t)。你可以通过进行所有的计算来验证这一点。很简单。

4。更新凯文·杜兰特的先前

到目前为止,我们将凯文·杜兰特的三分得分能力建模为抛硬币。我们从一个统一的先验β(1,1)开始,并根据一个游戏将其更新为β(2,8)。将此作为一种赌博策略将是残酷的。是我们弥补的时候了。

在接下来的第五场比赛中,杜兰特三分球 9 投 4 中。重新评估后,他的后角是β(6,13)。

作者图片

根据第五场比赛的数据,杜兰特投中三分(抛头)的概率似乎最有可能在 0.3 左右。接下来,让我们用他前三场比赛的统计数据来计算后验概率。

游戏 1:1/4;游戏 2:4/6;游戏 3: 3/8

在考虑了所有 5 款游戏后更新了后验版:beta(14,23)

作者图片

最新的函数在 p=0.378 时达到最大值,非常接近杜兰特职业生涯的平均值 0.384。或许,的佐证回归到了的意思。此外,了解 pdf 如何在具有额外数据的精简区域中膨胀。贝塔曲线 的垂直膨胀或 递减平坦,在继承了更多数据后,流露出对特定概率估计的乐观。

作者图片

这是对凯文·杜兰特三分成功率概率建模的一次适度尝试

结论

在本文中,我试图提供一个直观的测试版背景。虽然我们关注的是三分球,但我们同样可以模拟任何其他遵循二项式分布的统计类别(抛硬币特性)。概率的 概率的 是一个难以解释的奇异理论。我希望你现在对此有所了解。更重要的是,beta 分布的特征,特别是降低的平坦度,是一个数学上的理由,解释了为什么一个人不愿意购买一个只有十个评价的 5 星产品(阅读更多相关内容)。根据最新数据,这一评级肯定会有所不同。谢谢你坚持到最后!

参考

https://www . basketball-reference . com/季后赛/2021-NBA-东部-半决赛-雄鹿-篮网. html

我们能从开放的芝加哥 Airbnb 数据中学到什么?

原文:https://towardsdatascience.com/what-can-we-learn-from-open-chicago-airbnb-data-932d1dd0276?source=collection_archive---------13-----------------------

潜在的房东和房客都可以从免费提供的数据中了解到很多关于价格和位置的信息

图片来源:J. Crocker,via 维基共享资源

在天气暖和的时候去芝加哥玩很有趣,但是想出住在哪里和在 Airbnb 上找到最划算的地方却很有挑战性。我最近发现 Airbnb 公开了大量他们的数据——当然,这要求我利用一些机器学习和统计来理解它。

具体来说,这里有一些我想回答的问题:

  1. 哪些因素对上市价格的影响最大?息息相关:如果我刚在芝加哥买了一套房产,想在 Airbnb 上挂牌,应该定什么价格?
  2. 一年中,哪些社区的房价变化最大?
  3. 根据主持人给出的描述,我们可以了解到一些街区的什么特征?

我回答这些问题的代码和推理可以在这个 Github 库的 Jupyter 笔记本中找到。这个项目的数据是(在 2021 年 11 月 29 日)从 Airbnb 内部的下载的,这使得它可以在知识共享署名 4.0 国际许可下使用(免责声明在这里是)。

第一部分:价格建模

上面第一个问题基本上是关于价格建模的。这些数据包括每份房源的几十个特征,比如卧室数量、它所在的街区以及提供的便利设施。每个列表的每夜价格也给定了,因此有足够的信息来训练一个模型,该模型在给定列表中其他信息的情况下预测价格。

我最初的猜测是什么对价格影响最大?卧室的数量,邻居,和“房间类型”(共享房间,整个房子,等等。).我喜欢使用 violin plots 快速获得洞察力,它超越了平均值或中值等简单的统计数据,以直观清晰的方式提供了有关更广泛分布的大量信息。首先,我们来看看价格与房型的关系:

作者图片

对于给定的房间类型,给定价格的小提琴的宽度告诉我们这个价格有多常见,中间的白点代表中值价格。我们发现房间类型和价格之间有很强的相关性:整个家庭/公寓比合租房间要贵得多,酒店房间的价格显然相差很大。

价格也与卧室数量密切相关,并在一定程度上取决于社区:

作者图片

作者图片

一种叫做弹性网的技术对于定量评估不同因素的重要性是有用的。这是一个“智能”回归程序,试图自动找出哪些信息不会影响价格。此外,最终模型参数(即系数)的大小表明哪些因素最重要。

那么,弹力网给了我什么?以下是一些最重要的因素:

作者图片

请注意,所有这些功能都有积极的作用,除了只有一个浴室——当跟团旅行时,只有一个浴室会很不方便!事实证明,前九个因素都与房产大小有关:卧室、浴室的数量,或者可以容纳的人数(不幸的是,没有提供平方英尺)。

弹性网络模型在确定特征重要性方面做得很好,但它不是最好的价格预测器:它的中值误差为 31%。我尝试了其他几种模型;我取得的最好成绩是所谓的 k-最近邻模型,中值误差为 22%,这意味着对于大约一半的房源,它预测的价格在其标价的 22%以内。我可以用这个模型来为假设的芝加哥未来上市定价;例如,参见我的 Github 库

第二部分:价格随时间的变化

如果我住在芝加哥的一套公寓里,想赚些外快,一个合理的做法可能是偶尔通过 Airbnb 出租我的房间或整个地方。当然,有客人来会带来一些不便,特别是如果我决定租下整个地方,并且在那段时间不得不找其他地方住,所以我会选择价格最高的时候。如果我是一个潜在的买家,我也会想知道哪些社区最适合实施这种策略——因此,问题是,随着时间的推移,哪些社区的价格变化最大?

对于每一处房产,我查看了其价格在一年中的标准差(可变性的一种度量),然后除以其全年的平均价格。例如,如果某项资产的结果是 0.2,那么该资产的价格在一年中平均变化约 20%。然后我看了看这些数字按街区的分布,得到了如下的小提琴图:

作者图片

有些社区,比如近西区和下西区,看起来不太适合实施我的策略。价格没有太大的变化:很少有房产的价格变化超过 30%。我不会从我的策略中获益多少。另一方面,Near South Side 看起来特别有前景,随着时间的推移,许多地方的价格波动很大。

因此,对我来说,更仔细地观察一下附近的南区,分离出哪些时段特别有利可图是有意义的。为了深入了解这一点,我可以绘制出这一地区一段时间内的平均房价:

近南区的房屋在一年中的平均价格。第 0 天是 2021 年 10 月 18 日。红点从左到右分别是 11 月 26 日星期五;12 月 31 日星期五;6 月 4 日星期六;9 月 19 日星期六。图片由作者提供。

显然,我应该把重点放在列出我周末出租的房子上;工作日的价格要低得多。我还应该在夏季更频繁地租房,从六月的第一个周末开始。我不应该太担心新年过后的租房问题,因为那时房价很低,变化也不大。最后,我可以在感恩节和新年周末以及九月中旬得到一个高价格(我猜这种需求是由许多大学生搬进来驱动的),所以我真的应该试着在这些时间租房。

第三部分:邻里是什么样的?

主人通常会简单描述一下他们房产所在的社区。从这些对附近房产的描述中,我可以了解到什么样的社区特征?

回答这个问题的一个很好的工具是“单词云”,它显示描述中最常见的单词,最常见的单词显示为最大的单词。这是林肯公园的一个:

作者图片

在我看来,密歇根湖、动物园、德保罗大学、自然和历史博物馆、一所温室和市区都在林肯公园附近。关于出行,我猜很多东西都在步行距离之外,棕色线穿过它。我猜这是一个相对古老的街区,有很多树,但附近也有很多购物场所,还有很多咖啡馆、餐馆和酒吧。我去过林肯公园,所以我知道上面单词云的这些建议是相当准确的。

我不太熟悉的近南区怎么样?

作者图片

难怪这个地区的物价在某些时候会很高。菲尔德博物馆、阿德勒天文馆、谢德水族馆、格兰特公园、自然历史博物馆和艺术学院都在附近。麦考密克会议中心就在附近,这也可以解释为什么这里的价格随时间的变化很大(当镇上有会议时,需求急剧增加)。熊队在这里的士兵球场比赛,这也可能在足球赛季的周末产生更多的需求。

显然,还有改进的空间和各种进一步的问题需要回答。我如何创建一个更好的定价模型?20%左右的中值误差仍然很高。此外,我如何确定最优价格(即最大化预期回报),而不仅仅是预测实际列出的价格?也许一些主机使用的价格太低或太高,通过更好的定价模式可以赚更多的钱。此外,数据中还提供了关于评论分数的信息,这将有助于主机了解哪些因素对糟糕的评论影响最大——这是另一个有趣且潜在棘手的建模问题。

一个复杂而重要的话题是 Airbnb 对住房负担能力的影响。提供数据来评估这一点是 Airbnb 内部的一项关键任务。虽然我预计非居民东道主会产生最大的影响,但在我看来,所有潜在的东道主都应该在其所在的城市进一步研究这一点。这是另一篇文章的主题,它必须整合来自另一个来源的关于长期租赁价格的数据。

我希望你喜欢我的帖子!请随意查看我的代码,如果有任何建议或研究想法,请联系我。

你能用 GNNs 做什么

原文:https://towardsdatascience.com/what-can-you-do-with-gnns-5dbec638b525?source=collection_archive---------16-----------------------

图形神经网络的操作、效用和优势

由于图形数据结构无处不在的特性,图形神经网络(GNN)越来越受欢迎。图表使我们能够在诸如(但不限于)生物学、社会学、生态学、视觉、教育、经济学等领域对许多不同的科学问题进行建模。此外,图形表示使我们能够处理大规模的非结构化数据。

在本文中,我将展示如何在分类、聚类和可视化等任务中使用简单的 GNN。我将使用一个 GCN(图形卷积网络)运行的例子。这将为你提供巨大的直觉,将意识形态扩展到自己的领域。

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

GNN 的形式表示

任何 GNN 都可以表示为包含两个数学运算符的层,聚合函数组合函数。使用 MPNN (消息传递神经网络)框架可以最好地理解这一点。

图:作者图

聚合

如果我们考虑上面的示例图,聚合器函数专门用于组合邻域信息。更正式地说,聚合可以表示为:

作者引用的等式(https://arxiv.org/pdf/1810.00826.pdf)

简单来说,第 k 个 GNN 层的节点 v 的邻域聚合是用层 k-1 的邻居节点 uhᵤ 的激活来表示的。v 的邻居表示为 N(v) 。在第一层 k-1=0 ,即回退到节点特性。在第一层中,我们简单地聚集邻居的初始特征。在 GCN 的情况下,聚合器简单地是度归一化的平均值(每个消息通过 vu 的度的乘积的平方根来归一化)。只要操作是顺序不变的(结果不会被混洗改变),人们可以想到各种聚合器,例如 max、mean、min 等。

结合

邻居信息与节点本身的组合在下面的等式中正式表示。

方程式由作者引用(https://arxiv.org/pdf/1810.00826.pdf)

这里可以使用不同的操作,例如连接、求和或元素池操作。不同的 GNN 架构依赖于不同的功能。GCN 使用平均值,我们将在下面讨论。

在上面的图中,我们可以通过X1/(sqrt(7×2))来聚合节点 1 到 6 的特征,X1 是节点 1 和 7 的特征,2 分别是节点 6 和 1 的度。对于每个节点,我们可以这样做。直观地说,我们可以认为这是每个节点通过平均其出度向其他节点传递消息,然后通过平均其入度接收其他节点的消息。因此得名 MPNN

对于邻接矩阵 A 和度矩阵 D 具有特征 X 的图 G(V,E) ,这可以通过 D(-1/2)XAD(-1/2) 轻松实现。通常情况下,邻接矩阵加上 I (单位矩阵)来体现节点自身的特征。在这种情况下, A 表示为(A 帽)并且 D 被替换为 D 帽,其中 D 帽对应于 A 帽。此时,我们已经在几个矩阵运算中执行了聚合和组合。得到的矩阵被馈送给可训练的可微分函数【ɸ】,该函数通常是 MLP(多层感知器),即神经网络。

堆叠层

我们讨论了在 GNN 层中会发生什么,现在想象我们堆叠几个这样的层。这意味着我们在邻接矩阵上做更多的乘法。如果你熟悉随机游走, D^(-1)A 被称为转移矩阵。其用于幂迭代直到收敛,以找到从给定节点到另一个节点的随机行走概率。直观上,我们添加的 GNN 层数越多,聚合的跳数就越多。或者换句话说,在一层之后,我们有节点及其邻居的信息。当我们再次这样做时,邻居(他们有他们的邻居)被再次聚集。因此是 2 跳,依此类推。

示例时间!

PyTorch 几何框架

使用 pytorch 几何库可以很容易地实现 gnn。在那里,您可以找到 GNNs 的许多实现和一个消息传递类,以供您自己的定制实现使用。请点击以下链接查看。

Cora 数据集

我们将使用受欢迎的 Cora 数据集,它由 7 类科学出版物组成。它通过引用连接,引用代表节点之间的边,这些节点是研究论文。

作者图片

使用 networkx 的图形可视化产生了上面的图像。我们可以看到很少的颜色聚集在一起,但我们从任何一种满足感。因此,让我们降低特性的维度,并进行更多的探索。

UMAP 论特征

解释数据的一个简单方法是查看那里有什么以及它们是如何放置的。UMAP 是一个非常有用的多元学习工具,它让我们能够做到这一点。让我们想象一下。

作者图片

我们可以看到一些类的本地化,但并不完美。上述操作的简化代码如下(完整代码在文末);

# essential imports that will be needed throughout the blog
import torch
import torch.nn.functional as F
from torch_geometric.datasets import Planetoid
from torch_geometric.nn import GCNConv
import matplotlib.pyplot as plt
import seaborn as sns
import umap
import networkx as nx
import numpy as npdataset = 'Cora'
path = "./"
dataset = Planetoid(path, dataset, transform=T.NormalizeFeatures())
data = dataset[0]embd = umap.UMAP().fit_transform(data.x.numpy())
plt.figure(figsize=(10, 10))
sns.scatterplot(x=embd.T[0], y=embd.T[1], hue=data.y.numpy(), palette=palette)
plt.legend(bbox_to_anchor=(1,1), loc='upper left')

我们肯定不满意我们所看到的,所以让我们试试 GCN,看看可视化。我的网络如下(由我从 pytorch 几何 github 实例修改而来);

class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = GCNConv(dataset.num_features, 16, cached=True)
        self.conv2 = GCNConv(16, 16, cached=True)

        self.fc1 = torch.nn.Linear(16, dataset.num_classes) def forward(self):
        x, edge_index, edge_weight = data.x, data.edge_index,
                                          data.edge_attr
        x = self.conv1(x, edge_index, edge_weight)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.conv2(x, edge_index, edge_weight)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.fc1(x)

        return F.log_softmax(x, dim=1) 

我们可以使用以下代码对此进行训练:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model, data = Net().to(device), data.to(device)
optimizer = torch.optim.Adam([
    dict(params=model.conv1.parameters(), weight_decay=5e-4),
    dict(params=model.fc1.parameters(), weight_decay=5e-4),
    dict(params=model.conv2.parameters(), weight_decay=0)
], lr=0.01)def train():
    model.train()
    optimizer.zero_grad()
    F.nll_loss(model()[data.train_mask],
                   data.y[data.train_mask]).backward()
    optimizer.step()

注意,在 Conv 层 2 中缺少 L2 正则化子,这是 GCN 的作者凭经验决定的(【https://github.com/tkipf/gcn/issues/108】)。

可视化后,输出如下所示;

作者图片

我们可以看到,不同的阶级有着非常明显的区别。这里,训练以 0.7800 的测试精度结束。我们能再多操纵一下吗?让我们看看。

嵌入损失

神经网络可以看作是连续的可微函数。分类本质上是学习预测的决策边界。点击此处了解更多关于决策界限的信息;

总之,如果我们强迫网络有更好的边界,我们可以有更好的可视化。这意味着,我们应该能够分别看到这些类。这在我们可视化集群数据时特别有用。我们能做的一件简单的事情是:

  1. 请 GNN 更紧密地嵌入类似的类
  2. 请 GNN 进一步嵌入不同的类

请注意,嵌入是网络的最终层输出或分类输出。在这种情况下,我们可以使用点积作为距离的度量。对于这种损失,我们准备如下的数据点对;

y_neg_pairs = []
y_pos_pairs = []data_idx = np.arange(len(data.x))
for idx1, y1 in enumerate(data.y[data.train_mask].cpu().numpy()):
    for idx2, y2 in enumerate(data.y[data.train_mask].cpu().numpy()):
        if idx1 > idx2 and y1!=y2:
            y_neg_pairs.append([idx1, idx2])
        if idx1 > idx2 and y1==y2:
            y_pos_pairs.append([idx1, idx2])y_neg_pairs = np.array(y_neg_pairs)
y_pos_pairs = np.array(y_pos_pairs)

我们修改的损失函数如下:

model_out = model()[data.train_mask]
    y_true = data.y[data.train_mask]
    nllloss = F.nll_loss(model_out, y_true) #Negative loss
    disloss_neg = F.logsigmoid(-1 * (model_out[y_neg_pairs.T[0]]*model_out[y_neg_pairs.T[1]])).sum(-1).mean()

    #Positive loss
    disloss_pos = F.logsigmoid((model_out[y_pos_pairs.T[0]]*model_out[y_pos_pairs.T[1]])).sum(-1).mean()

    loss = 10 * nllloss - disloss_neg - disloss_pos

请注意,我们处理点积的极性,并将其传递给 logsigmoid,以获得基于点积的损耗。如果你感兴趣,这可以在 GraphSAGE paper(https://arxiv.org/abs/1706.02216)下研究。

现在我们的训练以损失 0.7720 结束,比以前略有下降。让我们想象一下 GNN 和 UMAP 的输出。

作者图片

我们可以看到集群现在更好了,噪音也稍微小了一些。尽管我们的准确度较低,但我们有更好的聚类分离。实际上,较小的测试损失是由于簇的不确定性。我们可以看到一些点自信地位于错误的颜色群中。这本质上是数据的性质决定的。

将该思想扩展到无监督聚类

当我们没有标签,只有特征和图形时,我们如何扩展这个想法。这已经在 GraphSAGE 中讨论过了。简单的想法是使用图拓扑将更近的节点嵌入更近的节点,反之亦然。代替我们的正对和负对,我们可以有直接连接对和随机对分别作为正对和负对。这在各个领域都显示了良好的效果,这是另一天的主题!😊

我希望你喜欢这篇文章,我相信这对你的研究也会有用!

和其他文章一样,这篇文章也附带了笔记本

什么导致什么,我们怎么知道?

原文:https://towardsdatascience.com/what-causes-what-and-how-would-we-know-b736a3d0eefb?source=collection_archive---------27-----------------------

提示和技巧

面对关于新冠肺炎、气候变化、种族主义和其他争议的大量错误信息,数据科学家可以使用可靠的因果推理来帮助我们找出该相信什么

马库斯·温克勒摄于 unsplash . com:Markus-Winkler-yypmca 32 u _ M-unsplash . jpg

我们天生渴望了解为什么重要的事情会发生或可能发生,这是我们寻找因果关系的特征。然而,根据波兰经济学家和哲学家 Mariusz Maziarz (2020)的说法,2000 多年的思考并没有让我们就什么是因果关系或如何安全地断言因果关系达成一致。这使得人们很难区分真相和炒作。

根据 James Woodward (2005)的说法,哲学家从两个方面思考因果关系:

1.它是什么,我们如何推断因果关系,和/或

2.不同群体的人如何理解因果关系。

伍德沃德的第二点很重要,我会在另一篇文章中再谈。例如,我们如何理解(或未能理解)因果关系决定了我们如何解释关于新冠肺炎起源的陈述;测试对它的效用;应该如何、何时以及为谁进行测试;社会距离、遮蔽和疫苗是否真的有效;又是为了谁。

我们如何思考因果关系,以及我们选择如何推断因果关系,也决定了我们在哪里以及如何寻找因果关系。这在科学、医学和公共政策中很重要。我们对因果推理的假设和方法经常导致公共政策在应对气候变化或新冠肺炎等感知威胁时可能效果不佳。它们还影响联邦或私人资助的癌症研究投资规模、打击国内外恐怖主义、种族主义、健康和福利计划以及许多其他问题。

一种因果机制是否应该适用于所有人,或者因果关系是否会因性别认同、年龄、种族、民族、教育、地区、国家、时间段或收入水平而有所不同?我们将在下次调查这些问题。为了做好这一点,我们需要一个基本概念的基础,即一件事或事件引起另一件事或事件意味着什么,以及我们应该如何试图推断因果关系。我们还必须明白如何处理主要基于拙劣因果推理的错误信息(更不用说明目张胆的政治议程和权力欲了)。在这篇文章中,我将通过总结该领域领先专家的工作来提供基本的基础。

哪些因果观念引导着我们的思维?

关于因果关系的争论渗透到几乎每一个社会问题中,我们分裂的政治、离奇的阴谋论的存在以及关于哪些理论是阴谋还是真实的分歧都证明了这一点。因果推理方法(例如,我们如何决定我们幸福或疾病的真正原因)在许多问题上有很大不同。

例子包括观察到的原因和其声称的结果之间应该存在多长时间(如果有的话),以及关于安全地假设情况或事件确实是因果关系所需的证据的类型和数量的分歧。是事件 A 导致了结果 B 还是 B 导致了事件 A?或者,我们观察到的 B 的下游变化是否完全是由其他原因引起的?进行更多的测试会导致 COVID 病例的增加吗,正如一些知名人士所建议的那样,或者这些额外的测试只是发现了更多由于其他更可能的原因而已经存在的病例?

在某些情况下,A 和 B 可能会循环工作,相互造成。例如,投资股票市场可能会产生更高的收入和财富,这些收益可能会刺激更多的股票投资。这些先有鸡还是先有蛋的场景可能很难解析。

丹尼尔·塔特尔在 Unsplash.com 上的照片:丹尼尔-塔特尔-BPGPk_n7rkc-unsplash.jpg

Maziarz 和其他哲学家研究了五种分离因果影响的方法,包括如下。我们可以用这些来改进我们的因果推理,下面有一些附带条件。

规律性假设一个原因总会产生一个结果,没有例外。自然法则提供了行为规律性的例子。由重力引起的定期发生的波浪作用和潮汐就是例子。一些早期的哲学家要求必须存在一个“B 总是遵循 A”的模式来推断因果关系。

概率推理不要求一个原因每次都会产生一个结果。在这种情况下,原因提高了其结果的概率,但是结果并不总是发生。吸烟与心脏病和各种癌症之间的关系就是这样的例子——不是每个吸烟者都会患这些疾病,但有很高比例的人会。

反事实推理提出了如果 A 没有发生,事情会如何不同的问题。关于政府是否应该扩大失业救济以减少疫情经济困难的争议可以被视为对反事实情景的分歧。比如,一些人认为每周额外提供 300 美元的失业救济金导致了美国劳动力短缺。他们说,如果我们不这样做(即,在反事实情景下),更多的失业工人将寻找工作。不过,到目前为止,支持这种反事实观点的证据还很薄弱。在扩大的新冠肺炎福利到期后,劳动力短缺几乎没有改善,因此每周额外的 300 美元可能不会导致工人短缺(Combs 等人,2021)。

机械推理是另一个“如何”的问题,通常涉及深入探究 A 如何导致 b。例如,辉瑞和 Moderna 疫苗如何给新冠肺炎带来高水平免疫力的 mRNA 科学导致了因果关系的直接解释。这项科学极大地影响了这些疫苗的制造、储存、分发和应用,从而降低了 COVID 的住院率和死亡率。

操纵推理指的是“做 A”,而不是让 A 自然发生。这里的含义是,人类或其他对 A 的干预导致了结果 B。相关的问题包括,要使 B 可见需要多少 A,如果我们改变了 A 的水平,那么我们可以期望看到多少 B?旨在寻找最安全和最有效的新药剂量的研究就是操纵的例子。最低工资、就业和购买习惯之间的关系也说明了操纵因果关系的影响。

每种方法都有细微差别或亚型,它们在潜在的哲学基础、挑战和对公共政策的适合性方面有所不同,Maziarz 将他的大部分文本致力于这些问题。他还描述了这些因果推理方法在应用时如何相互重叠。下表大致基于他的工作,并呈现了我对他描述的五种方法的总结。

表 1:因果推理方法概述

当我们推断因果关系时,有五种方法可供选择,是否有一种方法在所有情况下都是最好的?不幸的是,每种方法都有优点和缺点,这些都是特定情况下的。表格中只列出了一些利弊。请参阅许多其他参考资料。

数据科学家如何提高因果推理?

考虑因果关系的多种方法将增加我们的因果解释是正确的可能性。如果几个(甚至至少两个)有效的方法已经被应用并导致一致的结果,并且如果其他执行良好的因果关系推断方法没有很快否定这些一致性,那么我们更有可能正确地推断出干预是否是真正的因果关系。

Russo 和 Williamson (2007)提供了这一概念的一个例子,他们说,将机械论和概率学方法结合起来,可以在医疗保健应用中产生关于因果关系的更强有力的见解。当药物或疫苗的作用机制及其预期效果发生的概率已知时,对因果关系的合理推断是可能的。

在无法进行精心设计和执行的随机对照试验的情况下,多重因果方法尤其有用。这种随机对照试验通常将理论与机械、操纵和/或反事实方法相结合。因此,RCT 可能会分离出干预对感兴趣结果的影响。执行良好的随机对照试验通过调整许多可测量和不可测量的因素来做到这一点,否则这些因素可能会混淆因果解释。

然而,在很多情况下,由于后勤、伦理、行为、预算或其他原因,RCT 无法进行。在这种情况下,好的准实验或其他仔细的研究也可以应用多种因果推理方法。综合起来,这些将导致更强的因果关系陈述,我们可以休息我们的帽子。

例如,在不同的情况下,通过不同的手段在不同的物种之间复制科学研究,并通过对烟草公司行为的新闻调查得到加强,导致吸烟导致癌症的广泛接受。没有 RCT 可以在人类身上解决这一假设,因为将吸烟状态分配给人们来看谁最终会得病,谁不会得病,这是不可能的,也是不道德的。

另一个例子是利用 DNA 研究来宣告那些被判无罪的人无罪,尽管早期的证据表明事实正好相反。例如,如果从留在谋杀现场的体液中提取的 DNA 表明嫌疑人不太可能犯罪(因为嫌疑人与可能的罪犯没有相同的 DNA 特征),他或她可能没有谋杀受害者。这将是一个概率因果推理的例子。

在这些领域和其他领域进行良好的概率、机械、反事实或操纵研究有助于阐明因果路径。他们还可以提供证据,证明早期调查中的错误成本。

局限性和进一步探索

已经有一些关于因果关系的有用的教科书和文章,作者是著名的思想家,他们在学术出版社和同行评审期刊上发表文章。他们的一些原理和方法已经在走向数据科学媒体的其他地方的短文中描述过。我没有必要在这里详述他们在方法论上的贡献,也不可能在这么短的篇幅里给他们应有的空间。相反,我在这里的意图是提出 Maziarz (2020)描述的关于因果推理的哲学观点,然后将这些哲学与 Pearl (2009)、Morgan 和 Winship (2015)以及其他人(例如 Pearl 和 Mackenzie (2018))提到的一些原则和方法联系起来;Woodward (2005 年),以及 Russo 和 Williamson (2007 年)。

影响研究设计和方法的哲学和原则的深思熟虑的结合对于数据科学家和其他研究人员来说是非常有价值的。这将有助于他们为雇主、消费者和政策制定者令人信服地描述什么导致了什么,什么没有,以及如何最好地解决令人烦恼的商业或社会问题。在这次努力中,我只是触及了表面。

卡伦·艾姆斯利在 Unsplash.com 上的照片:kalen-emsley-G1qxBDxM8vE-unsplash.jpg

因此,这篇文章留下了许多未被覆盖的领域。我没有提到的其他重要问题包括:

如何应用五种方法中的每一种?每种方法的适当步骤是什么?Morgan 和 Winship (2015)在文中对社会科学研究中使用的反事实的原则和方法进行了全面的回顾。他们提出了一些问题,比如在决定学生在学校的表现以及他们成年后最终能挣多少钱时,家庭背景和内在智力哪个更重要。摩根和温希普还阐述了社会经济地位是否会导致健康水平和死亡率的差异。Maziarz (2020 年)回顾了所有五种因果推断方法的文献和若干应用,侧重于许多领域的经济政策分析。

采用坚实的概念或理论框架如何指导因果分析? 我读过的每一本关于人工智能、机器学习、深度学习的教科书都强调依靠坚实的理论和人类专业知识进行指导的价值。Pearl (2009)和 Morgan 和 Winship (2015)也是如此,他们描述了如何使用有向无环图来直观地显示因果关系。我们生活在一个不确定的世界,但是如果可靠的理论和方法被反复应用,不确定性并不排除因果推理。

这五种方法的影响力和受欢迎程度如何?对一种方法或特定方法组合的偏好在多大程度上帮助或伤害了对因果理解的探索? Maziarz (2020)在经济政策研究中解决了这些问题,Morgan 和 Winship (2015)为其他社会科学解决了这些问题。例如,在过去几十年的社会科学研究中,匹配干预和控制对象,或者在分析中给予这些对象不同权重的倾向得分方法已经大受欢迎。然而,像任何其他方法一样,倾向分数可以应用得好或不好,导致正确或不正确的因果陈述。摩根和温希普提供了详细的例子。

读者如何区分好的因果方法和那些来自非科学阴谋论的方法?Pearl(2009)的文章关注的是关于吸烟和癌症的争议,但他和他的合著者 Dana Mackenzie (2018)描述的因果阶梯方法对于找出许多阴谋论的错误也非常有用。他们的因果阶梯包括 Maziarz (2020)描述的五大因果方法中的几个,并在上表中进行了总结。关于新冠肺炎,其他研究人员正在应用对生物化学原理的强烈依赖,以及描述人体如何工作的机制的清晰说明,以帮助消除许多关于 COVID 疫苗的错误信息。

因果论错了的代价是什么?几十年来,关于吸烟的争论引发了数以百万计的心脏病、中风、残疾和死亡,我们看到了这些代价;Pearl (2009)很好地解决了这个问题。

我们也看到了今天错误的因果关系的代价,更多的病例,长期残疾和不必要的死亡,因为错误信息专家继续对所谓的新冠肺炎不严重的毫无根据的观点和口罩的有限效用,社会距离,测试和疫苗。不幸的是,错误信息的成本(即在关于 COVID 的争论中滥用因果推理的成本)被政治法令放大了,因为政治家错误地禁止或限制了使用有效的方法来解决疫情。

关于气候变化,犯错的代价可能从应对气候变化的资金不足或使用不当,一直到地球温度持续上升带来的生存威胁。关于因果关系的争论(例如,人类是否导致了全球变暖,我们真的能控制它吗?)还会继续。

科学指导下的有充分根据的因果解释可以为关于这些和许多其他争议的有益讨论提供基础,但只有当我们真正愿意资助好的研究并在安全的环境中进行尊重和深思熟虑的讨论时。

结论

虽然在过去的 30 年里,因果推理取得了重大进展,特别是由于上述作者及其同事的影响,但仍有许多问题需要解决。应用可靠的因果理论、原则和方法的数据科学家将帮助我们理解世界的真实运作方式。利用合理的因果推理方法,以及其他方法来对抗错误信息,将带来更好的研究、更聪明和更有效的公共政策,以及我们这个星球上更好的健康和福祉。

鸣谢

我要感谢 Mariusz Maziarz 博士审阅了本文的草稿,并提供了许多有用的评论,澄清了我对因果推理的理解和介绍。任何遗留的错误都是我的。

参考文献

K.Coombs,A. Dube 和 C. Jahnke 等人,提前撤销疫情失业保险:对收入、就业和消费的影响,https://files . michaelstepner . com/pandemicUIexpiration-paper . pdf

米(meter 的缩写))Maziarz,《经济学中的因果关系哲学》( 2020 年), Routledge-Taylor & Francis 集团,纽约

南 L. Morgan 和 C. Winship C,《反事实和因果推理:第二版》( 2015 年),剑桥大学出版社,英国剑桥

J.珀尔,《因果关系:模型、推理和推论》,第二版(2009 年),纽约剑桥大学出版社

J.Pearl 和 D. MacKenzie,《为什么之书:因果的新科学》( 2018 年),纽约基础图书公司

F.Russo 和 J. Williamson,解释健康科学中的因果关系(2007),科学哲学中的国际研究 21(2):157–170

J.伍德沃德,《让事情发生:因果解释理论》(2005),牛津大学出版社,英国牛津

可视化时间序列时使用哪种图表类型

原文:https://towardsdatascience.com/what-chart-type-to-use-when-visualizing-time-series-e0f1a779f2f7?source=collection_archive---------18-----------------------

关于可视化时序数据时如何以及何时选择条形图而不是折线图的提示

杰克·希尔斯在 Unsplash 上的照片

D 数据可视化是向更广泛的受众传达信息的强大工具。这意味着除了使用正确的配色方案、字体大小和字体类型之外;使用适当的图表类型来描述数据也很重要。

本文的重点,从标题可以清楚地看出,是时间序列。按照惯例,我们把时间序列想象成线形图。但是,如果我说这不总是正确的,我们甚至可以使用条形图来可视化时间序列。你会说我在歪曲数据吗,或者用条形图代替折线图可以吗?或者在使用条形图而不是线图时有例外吗?

为了理解这一范式,首先,让我们看看维基百科上的时间序列定义:

在数学中,时间序列是按时间顺序索引(或列出或绘制)的一系列数据点。最常见的是,时间序列是在连续的等间隔时间点取得的序列。因此,它是一个离散时间数据序列。时间序列的例子有海潮的高度、太阳黑子的数量和道琼斯工业平均指数的每日收盘价。

这意味着时间序列中的数据点是离散值,但如果与前面的点存在关系,则是连续的。如果我们看看股票市场,以前的事件会严重影响当前的价格。因此,我们可以有把握地说,历史数据影响当前数据,因此是连续的。我们使用线图来可视化这些类型的时间序列。因为两个数据点之间的斜率可以提供信息,或者我们可以对数据进行插值以提取新的信息。

另一种时间序列是数据点不相关的情况。这些类型的时间序列就像比赛,世界纪录,或者,比如说,一个国家获得的奥运奖牌。对于这种类型的时间序列,计算相邻数据点之间的斜率或对数据进行插值不会增加任何值。因为历史数据之间的关联非常弱。在这种情况下,最好使用条形图来表示数据。

现在的问题是,在处理时序数据时,应该选择哪种图表类型。试着回答以下问题。这些问题的答案将引导您找到最能代表您所追求的时间序列的图表类型。

—您正在处理什么类型的时间序列?

—当前数据是否受到历史数据的影响?

—对数据进行插值有意义吗?

—数据点之间的时间间隔是小还是大?

回答上述问题将有助于识别数据随时间的变化情况,并指导您选择正确的图表来显示时间序列。

具有相关观察值的时间序列

我们将使用来自 R 提供的内置数据的EuStockMarkets数据集,并将时间序列绘制成条形图和线图。

第一个图是一个条形图,其中每个条形都是一个离散值,这种类型的图不能提供任何关于任何两个连续指数之间股票表现的信息。这是因为我们无法对数据进行插值,因为运行指数之间没有连续性。

作者图片

如果我们将上述数据重新绘制成一个线图,那么该图将提供两个相邻指数之间的更多信息。由于指数基本上是一个时间单位,所以对数据进行插值更容易从数据中获得隐藏的见解,这在使用条形图时是不可能的。

具有不相关观测值的时间序列

现在,我们使用另一个数据集创建相同的绘图类型。这里,我们将使用美国奥运会总奖牌榜(数据来源:维基百科)。

我们用线性插值(红色区域)将奥运会奖牌数据绘制成折线图,以计算 1980 年获得的奖牌的缺失值。这种图表类型是不正确的选择,因为这里提供的数据与美国队以前和将来的表现无关。一种说法是,两次不同奥运会的参赛队伍可能不一样,比赛场地不一样,天气也不一样,这都会影响运动员的表现。

作者图片

我们再一次用条形图描绘出美国队在奥运会上获得的奖牌总数。对于 1980 年,我们没有绘制数据,因为美国没有参加在俄罗斯举行的奥运会。在下面的图表中,我们要看的是该队在每届奥运会上的表现,所以用缺失值来预测该队在 1980 年的表现是不明智的,因为该数据与过去或未来的表现无关。

作者图片

结束语

从上面的例子中我们看到,当处理具有相关数据点的时间序列时;将数据绘制成线形图是一种很好的做法。如果数据是不相关的,那么条形图比折线图更好。

确定要实现的图表类型的最佳方法是通过询问数据。理解数据,理解它实现或描述的内容,可以打开正确表示数据的大门,而不会有错误的表述。它不仅对当前场景有效,也适用于其他图表类型。确保通过可视化呈现的数据向观众传达了正确的信息。

我撰写的其他与数据可视化相关的文章:

可以在 LinkedIn Twitter上与我连线,跟随我的数据科学和数据可视化之旅。或者您可以在 Medium 上关注我,了解有关 R 和 ggplot2 包的数据可视化的最新文章。

关于 A/B 实验分析,漫画能教会我们什么

原文:https://towardsdatascience.com/what-comics-can-teach-us-a-b-experiment-analysis-c1ba70e50d0c?source=collection_archive---------39-----------------------

运用漫画转场的原理讲述风险、回报和确定性的故事

作者图片

当我刚开始运行 web 实验时,我主要是设计和开发它们。一旦这些实验结束,它们就会去找一位分析师,我会被告知测试是否具有【统计显著性】

CRO 的顾问和分析师总是被问到,在给定特定结果的情况下,对于一项实验,什么是正确的决定。但是,我们是否总是拥有有效建议所需的信息?我们确定我们知道我们的实验传达给我们什么吗?

即使在我更多地参与事物的分析方面之后,使用频繁主义的统计术语如“显著性”、“p 值”、“置信区间”、“z 得分”和“功效”都是抽象的概念难以 可视化难以 沟通。当然,它们会给我们一个布尔型的“是”或“否”的回答,但这对需要细微差别的实验有用吗?

这些统计术语让我想起了斯科特·麦克劳德(Scott McCloud)在他的优秀著作《理解漫画*》中描述的“不符合逻辑的”画面过渡(作为一名* 漫画作家和漫画小说家 ,我倾向于从画面的角度来思考)。

《剑桥词典》对不符合逻辑的定义是:

“与前一个陈述的意思不一致的陈述”

在书中,Scott 引用了非推理作为面板到面板转换的例子:

图片作者。一个不合理的面板过渡

非推理对于传达情绪和设定基调非常有用。他们邀请读者建立他们自己的联系,因此对一系列图像有意义。结果是一种主观体验——天生的个人和内省。

他提到了另一种更常见的面板到面板的过渡形式(希望是您更熟悉的一种):

图片作者。一个行动到行动面板过渡

这是一个“行动到行动”的面板转换。他们更不愿意被解读。在这里,作者可以更好地控制他们传达给读者的内容,因此,能够进行更加客观和直接的交流。

这与分析和统计有什么关系?嗯,漫画和面板过渡是一种交流方式。这里传达的信息恰好是一个通过一系列连续面板讲述的故事。

如果我们将统计术语和数据视图视为面板,那么我们需要确保避免不符合逻辑的情况。相反,我们需要确保这些小组相互合作,像行动到行动小组过渡那样更明确地传达信息。

在《赤裸裸的统计》中,查尔斯·惠兰写道:

“《纽约时报》指出,‘数据仅仅是知识的原材料。’统计是我们利用信息达到某种有意义的目的的最有力的工具……”

换句话说,统计学是从数据中提取含义的有力工具。但是我们试图从我们的实验中收集到什么意思呢?

嗯,我们通常想知道我们的下一步行动应该是什么。为了理解这些行为,我们可以根据目标将实验分为两类:

转化成功实验:这是为了获得转化成功而探索假设的地方。对于这些类型的实验,我们想知道我们的假设是否得到了验证。如果没有,那我们有什么可以学习的吗?

去风险实验:在这种类型的实验中,人们希望“去风险”某个特性或变更。我们并不特别期待这些测试的胜利,而是确保没有变化的负面影响。我们想知道变异是否可以安全发射。我们会对一个“平淡”的结果感到满意。我们通常也在这里寻找一个快速的结果。

**去风险型实验的挑战在于,我们应该让实验运行多长时间才能确保结果平稳?这是一个很难回答的问题,因此有一种趋势是,这些实验会运行很长一段时间,以“收集更多的数据”。

在上面的两个例子中,当我们有明确的输赢时,frequentist 方法提供的布尔响应通常是好的。除此之外,他们都不是超级有用的。

我们的统计数据需要能够满足上述两种类型的测试。我们需要的是能够告诉我们风险、回报确定性的统计视图。

我在寻找数据的不同视图,这些视图协调一致地工作,构建一个类似行动对行动小组的序列。结合起来,这些将传达我们需要的意义(或故事)。

希望结果能够为分析师和利益相关者提供更清晰的决策过程。

我还希望减少实验的运行时间。尤其是那些运行时间过长的去风险实验。所有这些以及减少了对高度专业化的统计知识的依赖——毕竟,频率主义者的方法是复杂的。

在我研究的过程中,我偶然发现了克里斯·斯图基奥的观点:一项研究揭示了对常客研究结果的普遍误解。辩论的另一方也有 T2 的文章。以及文章辩论辩论本身

我很幸运在 Trainline 有一个惊人的数据科学团队,作为一个项目来进一步研究这个问题。他们提出了前面提到的克里斯·斯图基奥为 VWO 设计的预期损失。

克里斯解释了这种方法:

计算一个后验概率,用它来估计你选择 A(或 B)的预期损失是否低于关心阈值。如果是,停止测试。”

预期损失让我们看到了与选择测试的特定变体相关的“风险”——即选择变体与对照的转换成本是多少?

特定变异的风险越低越好。特定变体的理想风险为零。

你可以在这里阅读更多关于预期损失。你也可以阅读他的主题为的白皮书。这里就不赘述细节了。我也不会讨论贝叶斯的定义。有很多关于那个的在线资源,包括这个

我将介绍的是预期损失的一个示例实现。例如,观察一段时间内累积的数据似乎是贝叶斯方法。为每个测试变量绘制一个预期损失线图是有意义的。**

这里有一个例子(这是基于大量实际实验的模型):

图片作者。风险的故事。随着时间的推移绘制的累积“预期损失”。越低越好。

这个观点传达了我们实验中每个变异组的风险。风险越低越好。所以最接近零的变量是最好的。在上面的例子中,这就是控件。

我们可以看到,这条线本身就讲述了一个故事。开始时,数据通常过于嘈杂,无法读取。每个变量的预期损失线相互交错。一段时间后,线条趋于稳定,变得更加稳定。

我们可以选择给预期损失赋予一个货币值,以获得货币形式的风险。

但是风险只是一部分。下面是图片的另一部分(同样,这是基于多次实际实验的实体模型)

图片作者。奖励的故事。随时间绘制的累积“转换率”。越高越好。

在这里,我们展示一下奖励的故事。我们展示了随着时间的推移每个变量的累积转化率。从这个角度来看,越高越好。

我们现在开始讲述一个更好的实验故事。这个观点有点像预期损失观点的。控制组现在在最上面,因为它比变化组转化得更好。

随着时间的推移跟踪贝叶斯概率以及转换线图也很有用。这让我们看到了我们的确定性水平。这类似于频率主义术语中的显著性水平。它告诉我们什么是控制实际上比变异更好的概率

既然我们已经有了讲述我们故事的所有片段,那么定义规则和过程来描述我们应该如何看待上面的视图是很有用的。

例如,我们可以进行一些稳定性检查,比如确保两个线形图显示过去七天数据的稳定读数,也就是说,线不应该交叉,而是显示过去七天的一致性。

然后检查转换率表现,以确定表现最佳的变量。在上面的例子中,控制组表现最好。

接下来,我们检查确定性水平。如果确定性不明确(例如,概率略低于 90%) ,那么我们应该检查预期损失,以验证无论如何推出变体会带来多大的损失风险。

当我们将这一过程与数百个以前的实验进行对比时,我们确实发现结果更加清晰。值得注意的是,预期损失从未与之前的 frequentist 统计观点相矛盾,相反,它提供了一个更微妙的观点。

当与新实验的频率统计数据一起追踪时,我们发现这种观点确实增加了数据阅读的清晰度。从而为需要细微差别的实验提供了更清晰的图像。

由于这种清晰性,结果是减少了实验的运行时间,因为分析师更有信心调用测试的结果。利益攸关方也能更好地了解情况以做出决策。

所有的测试仍然运行一个最小的运行时间,但是有更少的实验连续运行数周而没有结果被调用,特别是那些被报告为“平淡”的实验。

此外,测试可以用更少的流量运行,在需要的地方用确定性换取风险。因此,这对于初创公司和小型企业来说非常有用,它们的流量水平不如大型企业。

结论

像漫画一样处理实验统计数据确实有助于给我们想要得到的含义带来清晰和意义。

通过弄清楚我们的的含义,并反向工作以确保统计和数据视图(我们的面板)能够提供它,可以帮助我们做出更好、更明智的决策。尤其是在需要更多细微差别的情况下。

我希望这能帮助其他人将这些原则应用到他们的工作中。如果你觉得这很有趣或有用,请告诉我,我很乐意收到你的来信。同时,感谢 Chris Stucchio 对预期损失函数实验的惊人贡献。

关于我

我是伊克巴尔·阿里漫画作家 ,前 Trainline 优化主管。

我现在通过培训、建立流程和讲述他们的数据故事来帮助公司的实验项目取得成功!

这是我的 LinkedIn 如果你想联系。

数据科学贸易技术是什么样的,为什么我们需要它

原文:https://towardsdatascience.com/what-data-science-tradecraft-looks-like-and-why-we-need-it-9e16504c7101?source=collection_archive---------23-----------------------

如何实现计算透明性的指南

Unsplash 上由 anyaberkut 拍摄的照片

对于许多不熟悉统计学或算法如何运作的公众消费者来说,数据科学可能会令人望而生畏。这些盲点会让最终用户不确定流程是如何工作的,或者呈现的信息是否有偏差 标准化计算分析 的发展将有助于增加技术过程的透明度,而这一过程并不容易被大多数消费者所理解。目前,各种组织发布显示数据的仪表板、统计数据和图表,这些数据不是以标准格式或普通客户可以理解的方法呈现的。透明度是必需的,以便消费者能够理解数据来自哪里,它是什么类型的数据,以及数据是如何被聚合以实现显示的结果。操纵数据或错误显示数据的方法有很多种;这些问题可能源于数据科学家的无能、缺乏经验或缺乏兴趣,因为缺乏执行这种严格性的标准。

新冠肺炎疫情强调了公开数据透明度和准确性的必要性。

马丁·桑切斯在 Unsplash 上拍摄的照片

2020 年 5 月,一名负责创建该州新冠肺炎仪表板的佛罗里达州数据科学家被解雇,因为她质疑该州官员对可访问性和透明度的承诺。Rebekah Jones 声称,她的上司坚持显示不正确的数据,以证明尽快在佛罗里达开业是合理的。她随后利用捐赠的资金创建了一个公开可用的新冠肺炎仪表板,该仪表板持续显示比佛罗里达州官方仪表板更高的新冠肺炎病例。从时间的角度来看,她的作品似乎已经得到了 的验证。否则,那些有政治目的和不太正直的人很容易歪曲公共信息,如果他们愿意的话。

我花了 12 年时间,仿照 Rich Heuer 的结构化分析技术编写分析评估,并在大学研究他的工作,后来在国防情报局担任专业分析师职业教育(PACE)讲师。在过去的几年里,我作为一名数据科学家在国防部工作,这让我确信数据科学界将从标准化的结构和透明性中受益匪浅。国防部采用由情报界(ic)创建的被称为“结构化分析技术”的分析方法,以增加分析过程的系统性严谨性,并抵消认知偏差。这些方法采用工具和技术,帮助 IC 成员向决策者提供经过全面分析的信息。

数据科学依赖于完善的科学方法和严谨性。因此,它还应该使用科学界开发的所有方法和工具来记录、验证和证实自己的研究。

照片由 Aaron BurdenUnsplash 上拍摄

商业行业中使用的数据科学应用程序也应利用结构化分析技术,因为这些产品通常用于告知公众或帮助客户做出高级决策。在每种形式的信息收集中,数据的有效性、完整性和准确性都是重要的考虑因素。使用透明的计算分析可以满足消费者的这些顾虑,并使用户能够了解数据的来源和类型,以及如何汇总数据以产生呈现的结果。本文提供了在将数据科学应用于公共消费产品时实现必要的计算透明性的指导。

本文确定了数据科学从业者在生产发布产品时应该采用的五种方法。这些方法确保在数据科学流程中正确应用科学建立的贸易技巧和严谨性。每种方法都是针对情报部门指令 203“分析贸易标准”中规定的九种分析贸易标准中的一种或多种而制定的

透明计算分析

以下方法应用于计算机算法和数据可视化:

可重复计算

代码可用性描述

数据存档

解释基本原理

替代计算

可重复计算:

使用计算机计算的出版产品必须能被其他用户复制。代码透明性是可复制性的关键。如果在不同的硬件上运行,对用户的文件目录做出错误的假设,或者使用不同的设置编译信息,即使是相同的代码也可能无法产生相同的输出。因此,计算必须包括参考部分中所有相关数据的文档,包括文件和存储目录,以及与算法或可视化相关的代码,以确保产品能够准确再现。使用的实际代码、参数和数据的描述也使用户能够验证发布的结果是正确的,并且数据与发布的结果一致。

在没有查看基础数据和使用的算法的情况下,不应公布数字。关于如何提取用于计算的数据的文档也必须在参考部分注明。这使得其他人能够重新运行分析,再现结果,并重新使用数据来建立研究。同样,从计算分析中得到的产品必须为后续用户提供足够的信息,以便能够重现结果并访问代码及其数据,用于他们自己的分析。

代码可用性描述:

应始终提供“代码可用性声明”来描述如何访问代码或算法,以及是否存在任何访问限制。在有限制的情况下,代码仍应可供具有适当访问权限的个人使用。该声明还应提供请求访问的联系方式。

数据归档:

发布的产品中的数据应归档(即保存)在可共享的存储库中。此外,数据集应在关键点“冻结”,并记录为什么选择这些关键点,数据的连续版本应易于识别。数据科学家可以使用版本控制软件(如 Git 和 GitHub)记录和共享数据集的精确版本以及他们使用的工具,允许在必要时检索特定版本。与其他方法一样,访问数据归档文件的过程应在参考部分注明。

原理解释:

数据科学家应该就为什么选择他们特定的数据集和算法提供一个解释。如果使用了这种方法,它们应该清楚地描述使用了哪些数据来训练模型,以及为什么选择这些数据。对于数据可视化工具,数据科学家应该记录使用了什么数据、从哪里获得的数据、使用了什么代码(如果有的话)来处理数据,以及为什么选择最终的方法。如果在算法的公式中有假设,应该清楚地解释和记录它们,以及为什么选择和部署特定算法的原因描述。同样,如果对使用的数据有限制,应该列出这些限制的理由,以便用户了解这些选择。

替代计算:

最后,数据科学家应该为用户提供关于替代算法和计算的信息。在创建数据科学产品时,可以采用各种方法,分析师必须清楚地描述为什么使用或不使用各种替代方法。应提供类似的解释,说明在出版的产品中使用了何种统计方法进行计算。

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

在我们的社会中,虚假信息的使用越来越多,这迫切需要科学界在过程中变得更加透明,应用 Richard Huer 的历史悠久的科学方法是应对这些不断演变的社会问题的一种方法。虽然许多传统的分析贸易标准不能直接适用于数据的“处理”,但在检查复杂的数据集以及开发算法时,应该使用这些标准。这些由此产生的标准有助于使一个人的工作变得透明,以便没有创造该产品的人能够理解信息是如何获得的,以及结论是如何从中得出的。虽然社会可能正在处理日益突出的虚假信息,但在已发布的数据科学产品中采用透明的计算分析可以提供由科学界开发的可演示的方法,数据科学家可以遵循,消费者可以理解。

脚注:一、可再现的计算、代码可用性描述和数据归档方法解决了分析贸易标准一“正确描述潜在来源的质量和可信度”,七“解释分析判断的变化或一致性”,八“做出准确的判断和评估”。基本原理的解释涉及标准二“正确表达和解释与主要分析判断相关的不确定性”,三“正确区分潜在的情报信息和分析师的假设和判断”,六“使用清晰的逻辑论证”,九“在适当的情况下纳入有效的视觉信息”。替代计算解决了分析贸易标准四“合并了替代分析”的问题,尽管分析贸易标准五“证明了客户相关性并解决了问题”并不直接适用于计算机计算,但是从这些计算中得出的任何分析都是适用的。

参考文件:

国家情报总监办公室。2015 年 1 月 2 日。https://www . dni . gov/files/documents/ICD/ICD % 20203% 20 analytic % 20 standards . pdf

一个数据透明的工具包正在形成。2018 年 8 月 20 日。https://www.nature.com/articles/d41586-018-05990-5

塞布丽娜·洛洛,有限责任公司,佛罗里达州新冠肺炎仪表板的设计者,已经被撤职。CBS 12 新闻。2020 年 5 月 18 日。https://cbs12 . com/news/local/woman-who-designed-floridas-新冠肺炎-dashboard-has-removed-from-her-position

史密斯,y,安布里特,瑟诺亚,约翰,M,嬉皮士,a,希利。数据科学家凯西·奥尼尔:算法是嵌入在代码中的观点。2017 年 8 月 26 日。https://www . naked capitalism . com/2017/08/data-scientist-cathy-oneil-algorithms opinions-embedded-code . html

斯塔尼兰,硕士(未注明)。自然研究期刊试用新工具加强代码同行评审和出版。2018 年 8 月 08 日。http://blogs . nature . com/of schemesandmemes/2018/08/01/nature-research-journals-trial-new tools-to-enhance-code-peer-review-and-publication

威尔逊,a .,施密特,m .,施密特,l;《哈佛数据科学评论》。2019 年 11 月 01 日。https://hdsr.mitpress.mit.edu/pub/qkgyckh8/release/2

Yenni,g .,Christensen,e .,Bledsoe,e .,Supp,s .,Diaz,r .,White,e .为动态数据开发现代数据工作流。2018 年 1 月 1 日。https://www.biorxiv.org/content/10.1101/344804v1

美国政府。贸易初级读本:提高情报分析的结构化分析技术。2018 年 3 月。https://www . CIA . gov/static/955180 a 45 AFE 3 f 5013772 c 313 b 16 face/trade craft-Primer-apr 09 . pdf

101 Dalmations 和机器学习有什么共同点?

原文:https://towardsdatascience.com/what-do-101-dalmations-and-machine-learning-have-in-common-9e389b899df3?source=collection_archive---------24-----------------------

提示和技巧

科学家可以使用至少 101 个机器学习数据的例子来创造有价值的见解。他们来了。

少年——一个非常好的 boi,由 Jim Ozminkowski 提供

最近,我被要求帮助一个组织为预期增加的需要人工智能的业务做准备。该公司的人工智能将专注于机器学习(ML)和深度学习,这是一种在人类指导下使用计算机的技术,可以在数据中找到模式,用于为工业和公共政策应用创造见解。

这个组织非常精通统计学、计量经济学和可视化。他们的实证工作与其他任何人不相上下,甚至更好,50 年来出色的公共政策研究、评估和咨询经验证明了这一点,特别是在联邦和州政府领域。为了帮助拓宽视野和扩展能力,我搜索并记录了许多可以增加他们工作的实证方法的例子。这些方法中的许多被计算机科学家使用,但是通常不与经济学或其他社会科学相关联,因此政策分析者和政策制定者可能不太熟悉。

没有免费的午餐(NFL)定理说明了为什么考虑许多分析方法是有价值的。Goodfellow 等人(2015)在他们关于深度学习的教科书中解释了这个定理的意义。他们引用了 WOL pert(1996)对 NFL 的定义,即“平均所有可能的数据生成分布,当对未观察点进行分类时,每个分类算法都具有相同的错误率。换句话说,在某种意义上,没有任何机器学习算法比其他算法更好”(第 113 页)。

然而,这种平等只存在于有限的范围内。事实上,有许多地方例外。在任何给定的情况下,Goodfellow 等人说,可能有一种或多种最大似然算法产生比其他算法更好的预测。此外,一组更好的预测指标可能会因研究而异。在我看来,这是最重要的一点,也是从他们对 NFL 的讨论中获得的教训:这意味着数据科学家和其他政策分析师应该寻找最佳的预测算法来解决他们的每个预测挑战。例如,它意味着对每个分类或回归问题使用某种形式的逻辑或线性回归可能并不理想,即使这些方法是分析家和决策者最熟悉的。即使对于推理工作来说也是如此,在推理工作中,关联或因果归因,而不仅仅是预测,是目标,并且潜在的因果机制是非线性的。

如果我们必须寻找最佳方法,并且如果我们对每种潜在的有价值的方法的熟练程度不一样,那么有一个指向许多有用的分析方法的快速和实用的参考将是有用的。本帖提供了这样一个参考。

几篇机器学习文章的注释列表

下面你会发现一个注释列表,里面有很多关于 ML 的文章链接。这些大多是博客或教程,所以不发表在同行评议的期刊上。然而,很多时候评论跟在文章后面,错误、疑问或问题经常由知识渊博的读者发布。许多作者都是各自领域的佼佼者,他们经常在 GitHub 或其他地方回答这些问题,或者提供他们方法的理由和细节。

这些文章阅读起来简单快捷,通常不到 15 分钟。有时读者会发现方程看起来很紧张,但它们通常描述得很好,潜在的直觉通常很清楚。许多作者使用可视化来阐明主要观点。

大多数策略分析师都使用受监督的模型,因此有许多链接指向关于这些模型的信息。还提供了一些集合模型讨论的链接,因为这些提供了监督方法的很大扩展。

然后我提供无监督模型的链接。这些文章中描述的聚类、可视化和数据简化技术可以帮助数据科学家使用大量不同的数据集来指定模型,以说明底层数据中的更多变化。还提供了一些因果推理模型的链接,因为近年来人们对从预测到评估因果关系的兴趣越来越大。注意到了局限性,以及将这些文章与其他来源结合使用以构建更好的模型的建议。

从今天(11/30/21)起,下面的每个链接都可以访问,但我不知道它们会活跃多久。

蒂姆·莫斯霍尔德在 Unsplash.com 的照片

监督学习

这是一种形式的归纳学习,它使用统计或其他模型来学习如何使用输入数据来生成对感兴趣的结果的正确预测。在经济学和其他社会科学的术语中,监督模型的输入数据被称为预测值、独立变量或解释变量。它们在计算机科学/工程/ ML 世界中被称为特征。在用于监督学习的数据中也可获得结果(即,从属)变量,允许统计包区分由 ML 模型做出的正确和不正确的预测。统计软件包还报告了 ML 模型使用几个模型性能度量来正确预测感兴趣的结果的能力。监督学习的重点通常是回归或分类问题。

在这一部分,你可以找到几篇关于各种形式的监督学习和相关主题的文章的链接。我们从描述一般方法论概念和问题的文章链接开始。然后我提供了描述几种预测方法的文章的链接。其中包括朴素贝叶斯、逻辑回归、支持向量机、线性判别分析和决策树,所有这些都可以用于对新对象进行分类或预测二元(是或否)结果。接下来是关于分位数回归、样条回归、岭和套索回归以及广义可加模型的文章链接,这些文章讨论了连续结果。然后我们转向用时间序列模型进行预测,我们用描述神经网络和深度学习方法的文章链接来结束这一长段,这些方法可用于预测二元或连续结果。

一些文章比较多种方法或描述集成应用,帮助分析师解决没有免费午餐的问题。在未来的文章中,我们将转向自动机器学习来促进这种比较。

高层次的方法问题:

这一部分包括几篇文章的链接,这些文章帮助数据科学家更好地理解如何使用 ML。我们从一篇关于将 ML 与人类专业知识相结合来制作更好的模型的文章开始。我读过的每一篇机器学习文本都强烈推荐 ML 的团队运动方面——人类应该指导这项工作,以确保它是相关的,并有可能产生有用的见解。这台机器旨在增强而不是取代人类的视角。

在这个链接之后,我们提供了一个描述笔记本技术在跟踪和描述我们的工作方面的实用性的链接。然后,我们将重点放在数据准备、编程语言以及其他工具和方法上,这些工具和方法有助于优化 ML 模型的使用和评估。之后,我们提供文章链接,

从哪里获取我们机器学习模型的数据,

特征(即独立变量)选择过程,

选择和解释模型时必须考虑的偏差-方差权衡,

如何使用莱姆、SHAP 和其他方法评估每个模型预测值的重要性,以及

如何创建仪表板来帮助不是专家的人解释 ML 模型的结果?

开始了…

1.J. Langston,机器教学:人们的专业知识如何让人工智能更强大(2019),在 https://blogs.microsoft.com/ai/machine-teaching/上。当人类指导机器工作时,机器会产生更多有用的结果。即使是自动化的 ML 方法也是如此,我将在以后的文章中再回到这一点。

2.S. Sjursen,使用 Juypter 笔记本作为数据科学工作编辑器的利弊(2020 年),载于https://medium . com/better-programming/Pros-and-Cons-for-jupyter-Notebooks-as-Your-Editor-for-Data-Science-Work-tip-py charm-is-possible-40e 88 f 7827 CB。笔记本用来存放代码,驱动机器学习的执行,并存储结果,以供将来参考。有一些竞争对手的笔记本电脑产品。Jupyter 是使用最多的一个。比较了它的替代方案。

3.主动向导,管理者的数据科学:编程语言(2019),https://www . kdnugges . com/2019/11/Data-Science-Managers-Programming-Languages . html本文介绍了几种用于监督 ml 模型的编程语言的优缺点。例子包括 Python、R、Scala、Matlab 等等。

4.五、Kashid 对于数据科学来说,Python 和 R 的主要区别是什么?(2020 年),在https://www . quora . com/What-is-the-major-differences of-Python-and-R-for-data-science。这是对 Python 和 R 的一个很好的高层次比较,这两种语言是工业界和学术界用于数据科学的主要编程语言。

5.C. D .,数据科学家最佳数据科学工具(2020),在https://towardsdatascience . com/Best-Data-Science-Tools-for-Data-Scientists-75be 64144 a88。描述了许多用于处理大量不同数据、构建分析数据集以及用于统计分析、机器学习、深度学习、模型部署以及报告和可视化的工具。

6.d,Johnston,一个数据科学家应该对优化技术研究到什么程度?(2019),上https://www . quora . com/How-deep-should-a-data-scientist-study-optimization-techniques/answer/David-Johnston-147?ch = 8&share = 64 abfe 6 f&srid = kag TN。每种有监督的 ML 方法通过解决优化问题来“学习”,优化问题通常被定义为最小化在现实生活中观察到的结果的实际值与由 ML 模型生成的那些结果的预测之间的差异。理解优化是如何工作的是很有帮助的(提示:它通常是基于使用你在微积分课上学到的链式法则的迭代方法)。除了这篇文章,YouTube 上还有一些很好的视频,描述了应用链式法则的反向传播。

7.T. Waterman,谷歌刚刚在 https://link.medium.com/5Ssd71u2y3发布了 2500 万个免费数据集(2020 年)。在我们开始机器学习的过程之前,我们显然需要表示感兴趣的结构、预测器和结果的数据。谷歌并没有真正发布 2500 万个数据集,他们拥有的数据中只有大约一半是免费的。然而,他们确实发布了许多数据集的可搜索元数据,这对于找到合适的数据集非常有帮助。

8.M. Dei,《让你的模型更好工作的变量转换目录》(2019),https://link.medium.com/PO7esQMJn4。有时需要对变量进行转换(例如,标准化、规范化、分类),以使机器学习模型运行得更好。本文描述了如何做到这一点。

9.张,理解机器学习中的数据规范化(2019),。这是关于在建模之前标准化变量的价值的初级读本,以减少模型训练时间并提高准确性。

10.T. Yiu,了解交叉验证(2020),关于https://link.medium.com/gEwvRFTE83。交叉验证是一种多次细分数据集的方法,每次都在保留一个子集的情况下训练模型,然后聚合所有模型的信息,以找到具有最佳预测能力的模型。这篇文章描述了它是如何工作的。

11.R. Agarwal,每个数据科学家都必须知道的 5 个分类评估指标(2019),关于https://link.medium.com/IMLmW0IrW3。这是关于分类分析的模型性能度量的初级读本——如何判断您的模型性能是否良好。

12.S. Kochlerlakota,《偏差与方差——穿越噪音》(2019),https://link.medium.com/XIhInRhIk3 上的。每一个用于预测现象或解释现象的机器学习和统计程序都必须平衡偏见的概念(例如,我们得到了正确的答案吗?)和方差(我们对此有多确定?).本文讨论了这种权衡。

13.B. O. Tayo,《机器学习中的错误来源》(2020),载于https://medium . com/towards-artificial-intelligence/Sources-of-Error-in-Machine-Learning-33271143 B1 ab。本文描述了机器学习模型中需要防范的十种错误。这些错误不是机器学习独有的;它们适用于所有类型的分析。

14.J. Zornoza,特征选择介绍(2020),载于https://towardsdatascience . com/An-Introduction-to-Feature-Selection-DD 72535 ecf2b。一旦有了数据,就该抓住有用的部分进行分析了。特征选择是为机器学习模型寻找独立变量的艺术。这可以用理论来指导,用计算机分析来辅助。

15.M. Grogan,Python 中的特征选择技术:预测酒店取消预订(2020),载于https://link.medium.com/H5MsJdIJn4。这里有更多关于寻找好的预测器的内容,包括一个例子和 Python 代码。

16.W. Koehrsen,Why Automated Feature Engineering Will Change the Way You Do Machine Learning(2018),https://link.medium.com/L8jojOVlJ1Feature Engineering是获取数据集并构建解释变量(特征)的过程,可用于为预测问题训练机器学习模型。正如本文所描述的,这现在可以自动化了。

17.G. Hutson,feature terminator-一个从统计和机器学习模型中自动删除不重要变量的包(2021),在 https://www . r-bloggers . com/2021/07/feature terminator-a-Package-to-Remove-important-Variables-from-Statistical-and-Machine-Learning-Models-Automatically/。本文描述了几种类型的交叉验证,可用于消除无助于改进模型预测的变量。它还提出了避免多重共线性的方法,多重共线性会导致不稳定的预测。

18.J. Brownlee,《机器学习模型选择的温和介绍 (2019),在https://machinelingmastery . com/A-Gentle-Introduction-to-Model-Selection-for-Machine-Learning/。本文描述了如何根据您想要解决的问题,在众多机器学习方法中进行选择。

19.美国马赞蒂,SHAP 在 https://towardsdatascience . com/shap-Explained-the-way-I-Wish-Someone-Explained-it-to me-ab 81 cc 69 ef 30 上解释了我希望有人向我解释的方式(2020 年)。作者提供了一个很好的方式来理解 SHAP 如何被用来解释预测模型中各种特征(变量)的贡献。

20.D. Dataman,用 https://link.medium.com/Fjo6lzakY1 上的使用 KernelExplainer (2019)解释任何具有 SHAP 价值观的模型。机器学习模型有时看起来像是黑盒,不能显示预测变量的相对重要性。本文解释了如何通过使用一个新的 Python 实用程序来找出答案,并举例说明了许多不同类型的 ML 模型的结果。

21.P. Dos Santos,小心你的 SHAP(2020),在 https://medium . com/@ pauldos Santos/Be-小心-What-You-shap-For-AEC cabf 3655 c。作者指出,在结合了连续和二元预测的模型中,SHAP 会产生误导性的结果。

22.a .纳亚克,《莱姆和 SHAP 背后的想法》(2019),《关于 https://link.medium.com/13VS0JSmD2 的 T0》。本文介绍了另一种方法来估计预测变量(石灰)的相对重要性,并比较它与 SHAP。

23.M. Dei,每个数据科学家都应该知道的三种模型可解释性方法 (2019),在 https://towardsdatascience . com/Three-Model-expolability-Methods-Every-Data-Scientist-Should-Know-c 332 BDF 8df。这篇文章更深入地探讨了模型的透明性和可解释性。作者介绍了排列重要性的概念,并描述了部分依赖图的效用。他引用了一个新版本的 scikit-learn 库,可以帮助应用这些技术,SHAP 也是如此。

24.马赞蒂,你的哪些特征是过度适合的?发现 ParShap:一种先进的方法来检测哪些列使您的模型不符合要求(2021),在 https://towardsdatascience.com/tagged/tips-and-tricks?p=c46d0762e769 。这篇文章描述了他创建的 SHAP 的扩展,以找出哪些独立变量(特征)导致模型在采样数据上表现很好,但在新数据上表现很差。

25.美国马赞蒂,黑盒模型实际上比逻辑回归更容易解释(2019),在https://towardsdatascience . com/Black-Box-Models-is-Actually-More-an-a-Logistic-Regression-f263c 22795d。作者很好地解释了如何从复杂的模型中推导出概率,因此它们更容易解释。

26.H. Sharma,机器学习模型仪表板:创建仪表板以解释机器学习模型(2021),在 https://towardsdatascience . com/Machine-Learning-Model-Dashboard-4544 DAA 50848。Sharma 展示了如何创建一个仪表板来更好地查看模型的执行情况。

一些说明性的使用案例:

在文献中描述了成千上万的受监控的 ML 应用,并且/或者在全世界的工业和学术界中使用。这里只是展示 ML 如何提供有用的见解的几个例子。很有可能只要在谷歌上搜索一个描述你感兴趣的问题的短语和“机器学习”就能说明 ML 如何对你的应用有用。

27.什么是好的机器学习用例?(2019),论 https://link.medium.com/Ja4FUL3yG2。我们的客户要求我们解决的大多数经验性问题可能是 ML 的良好用例。即使对于推理工作也是如此,因为我们做出的程序影响估计或其他推理可以被视为对未来结果的预测,而 ML 擅长对他们关心的结果做出可靠的预测。还有许多其他用例,其中一些解决了内部管理挑战,如降低成本、降低风险和利润最大化。本文指出了这三个管理挑战。

28.J. Wang,数据科学与公共政策交汇处的思考(2017),https://towardsdatascience . com/Musings-at-the-crossover-of-Data-Science-and-Public-Policy-cf 0 bb 2 fadc 01。作者提供了一些关于数据科学在解决公共政策问题方面的效用和局限性的智慧之言。她包含了几个用例的链接。

29.J. Rowe,自然语言处理和机器学习如何帮助追踪冠状病毒(2020),https://www . healthcareitnews . com/ai-powered-health care/researchers-tap-ai-Track-spread-Corona Virus。这篇文章是关于自然语言处理和机器学习如何帮助跟踪冠状病毒的——这是一个有趣的用例,说明了这些技术的力量。

30.来自 arXiv 的新兴技术,机器学习已经揭示了莎士比亚戏剧有多少是由其他人写的(2019 年),在 https://www . Technology review . com/s/614742/Machine-Learning-has-reveal-Exactly-how-do-a-a-Shakespeare-play-is-Written-by-Someone/。这个用例与我们考虑的其他用例完全不同,但是这篇文章让我们看到了这样一个事实:ML 是一个灵活的工具,可以用于各种应用程序中。

31.J. Kent,机器学习可以改善临终交流(2019),在 https://health analytics . com/news/Machine-Learning-can-Improve-End-of-Life-Communication?Eid = cxtel 000000199563&elqCampaignId = 12666&UTM _ source = nl&UTM _ medium = email&UTM _ campaign = newsletter&elq trackid = 891254 c 5466 e 49 b 0 be c8 c 00 BDA 09517 b&elq = c 28 e 7e 780 c 43 faac 51 db 1 f 0 FD 44882&El 本文描述了使用自然语言处理和机器学习来评估临终对话的内容,然后提出更好的方法。

32.J. Harris(与 M. Stewart 合著),环境科学中的数据隐私和机器学习,载于https://towards Data Science . com/Data-Privacy-and-Machine-Learning-in-Environmental-Science-490 fded 366 D5。这是 Jeremie Harris 采访哈佛大学环境科学博士生 Matthew Stewart 的播客。Matthew 经常为《走向数据科学》投稿,他的博士论文是机器学习和环境科学的结合点。他和他的同事专注于气候变化模型、碳排放和其他重要问题。在这个播客中,他重点关注数据隐私、个人观察的分析价值和模型偏差等问题之间的权衡。

Alexander Schimmeck 在 Unsplash.com 拍摄的照片

监督学习法:

33.J. Brownlee,机器学习算法之旅(2020),在 https://machinelingmastery . com/A-Tour-of-Machine-Learning-Algorithms/。我们以一位实用机器学习方法大师对许多类型的机器学习模型的精彩回顾作为开篇。

34.S. Patel,第 1 章:监督学习和朴素贝叶斯分类—第 1 部分(理论)(2017),关于 https://link.medium.com/VZlAzZKeK2 的。当用于生成二元结果预测的变量相互独立(即天真)时,朴素贝叶斯利用贝叶斯定理来帮助生成这些预测。这很容易做到,并提供易于解释的结果,因此朴素贝叶斯通常是一种受欢迎的初始方法。这篇文章描述了它是如何工作的。

35.S. Patel,第 1 章:监督学习和朴素贝叶斯分类—第 2 部分(编码)(2017),关于 https://link.medium.com/87CBHgWeK2。本文描述了如何在 Python 中实现朴素贝叶斯方法。

36.T. Yiu,Understanding The Naive Bayes Classifier(2019),onhttps://link.medium.com/OpjLwR7ZF4.这是关于 Naive Bayes 的另一个很好的初级读本,Naive Bayes 是一个分类器,通常概括得很好,并且易于使用。文章中的这句话概括了这一点:从高层次来说,朴素贝叶斯只是将贝叶斯定理的简化版本应用于基于其特征的每一个观察值(以及每一个潜在的类)。

37.M. Maramot Le,为什么数据科学中经常使用逻辑回归?(2019),在 https://www . quora . com/Why-is-logistic-regression-used-so-frequency-in-data-science/answer/Marmi-Maramot-Le?ch = 8&share = 7 E0 C7 B2 a&srid = kag TN。这很好地描述了逻辑回归的优点,它可能是许多行业中最流行的分类方法。

38.H. H. Strand,当评估逻辑回归时,解释 Brier 评分和 AUROC 评分的区别是什么?你什么时候会使用其中一个而不是另一个?有没有可能一个高分一个低分?(2019),在https://www . quora . com/When-evaluating-a-logistic-regression-When-the-differences-interpreting-the-Brier-Score-vs-the-AUROC-When-you-use-one-vs-other-Is-possible-a-high-Score-in-one-a-low-Score-in-the/answer/H % C3 % A5kon-Hapnes-Strand?ch = 8&share = d 7361 af 6&srid = kag TN。这里引用作者的一句话:ROC 曲线的 AUC 是分类模型最普遍适用的度量之一,但它只评估你预测的等级。Brier 评分计算概率预测的准确性。如果你只关心分类,AUC 很好,但是如果你想估计某件事的概率,那么 Brier 评分是一个很好的额外指标。

39.f .乔,使用 Scikit-learn 调整逻辑回归模型-第 1 部分(2019),关于本文描述了调整逻辑回归模型以提高模型性能的方法。还与随机森林进行了比较。提供了 Python 代码。

40.S. Deb,朴素贝叶斯 vs 逻辑回归(2016),https://link.medium.com/UPGymGIfK2 的。由于朴素贝叶斯和逻辑回归是两种流行的、相对简单的、可解释的使用方法,本文描述了它们各自的优势。逻辑回归在大型数据集上占主导地位,但大多数数据集并没有那么大,很多时候朴素贝叶斯更快地生成准确的结果。描述了经验误差、概括误差和混杂误差,包括辛普森悖论。

41.M. Sanjeevi,带数学的支持向量机(2017),上https://medium . com/deep-Math-Machine-learning-ai/chapter-3-Support-Vector-Machine-With-Math-47d 6193 c 82 be。作者很好地描述了 SVM 是如何工作的,将图形和数学结合起来。这个应该会吸引那些有很强数学背景的人。

42.R. Pupale,支持向量机——概述(2018),载于https://towardsdatascience . com/https-medium-com-pupalerushikesh-SVM-f4b 42800 e989。这是对 SVM 的一个很好的介绍,用直观的图形来描述基础理论和 Python 代码。

43.开放数据科学——在 R(2018)https://link.medium.com/ztbUrFveK2上构建多类支持向量机。作者提供了理论,以及 SVM 在 R 中的应用,以结果变量中有多个类为例。

44.P. Nistrup,线性判别分析(LDA) 101,使用 R (2019),对 https://link.medium.com/WWlqD6xQN2。LDA 是分类分析的另一种形式,从这个意义上讲,它可以替代逻辑回归、决策树、朴素贝叶斯和其他方法。它也可以被视为主成分分析的替代方法或补充方法(参见下文关于主成分分析的无监督模型)。本文中有一些很好的可视化工具来说明 LDA,并附有 R 代码来看看如何进行试验。

45.《熵:决策树如何做出决策》(2019),https://link.medium.com/vXj620nRN2。本文描述了如何使用熵(纯度的一种度量)和信息增益来创建决策树。

46.P. Flom,分位数回归介绍(2018),https://link.medium.com/hcLvE9WoK2.与普通最小二乘法相反,分位数回归对残差的分布不做任何假设。当因变量是双峰或多峰时,它也比普通最小二乘法更好。本文提供了一个用分位数方法分析出生体重数据的例子,以及 SAS 代码。

47.C. Lee,分位数回归—第一部分(2018),https://link.medium.com/HtaBXw6oK2 的。本文描述了分位数回归的工作原理,并提供了使用 Tensorflow、Pytorch、Light GBM 和 Scikit-Learn 的示例。基于数学的理论也提供了。

48.M. Ghenis,分位数回归,从线性模型到树到深度学习(2018),在https://link.medium.com/arc6wSspK2.这篇文章将分位数回归与随机森林、梯度推进、普通最小二乘法和深度学习方法进行了比较。

49.S. Vyawahare,R (2019)中的样条回归,关于https://link.medium.com/T7IGk9QpK2.样条回归(也称为分段回归)是一种非参数技术,可以很好地用于非线性数据。它可以替代分位数回归。

50.M.S. Mahmood,利用一般加法模型拟合非线性关系(2021),https://towardsdatascience . com/Fit-Non-linear-Relationship-Using-generalized-Additive-Model-53a 334201 b5d。这是一篇很好的文章,描述了如何使用一般的可加模型来生成非线性关系的预测。结果被建模为输入变量的非线性函数的总和。提供了与样条和多项式回归的比较。

51.V. Sonone,Scikit-learn 监督学习的传统指南-稳健回归:异常值和建模误差-广义线性模型(2018),关于https://link.medium.com/UtGDO37BL2.稳健回归程序在异常值或其他数据问题存在时很有价值。

52.S. Bhattacharyya,Ridge and Lasso Regression:A Complete Guide with Python sci kit-Learn(2018),on https://link.medium.com/RGST954ii2—这篇文章中的引用很好地总结了它的重点: Ridge and Lasso regression 是一些简单的技术,用于降低模型复杂性和防止简单线性回归可能导致的过拟合

53.A. Singhal,机器学习:详细岭回归(2018)【https://link.medium.com/KoK0E7Oxx3 上的。如题,这里有一个关于岭回归的更多信息。作者对过度拟合问题进行了很好的回顾,过度拟合导致模型在训练数据集上表现很好,但在用于全新数据时表现很差。他展示了如何使用岭回归来避免这个问题。

54.S. Gupta,各种机器学习算法的利弊(2020)上https://towardsdatascience . com/Pros-and-Cons-of-variable-classification-ml-Algorithms-3 b5 bfb 3c 87d 6。本文回顾了支持向量机、逻辑回归、朴素贝叶斯、随机森林、决策树、k-最近邻和 XGBoost 在预测练习中的优缺点。

55.E. Lisowski,最佳预测技术,或如何从时间序列数据进行预测(2019)https://link.medium.com/tR9OlYzpR1。本文描述了如何使用时间序列数据生成良好的预测。例如,考虑如何最好地预测在全国几个州使用的全付费(即,全保险)系统下支付给医疗保健提供者的费用。这里提到的 ARIMA 模型非常适合这个问题以及类似的问题。我在这篇文章的介绍中提到的公司为此开发了一个很棒的 ARIMA 模型,极大地提高了支付给几个州的提供商的公平性和准确性。

56.J. Nikulski,AdaBoost 的时间序列预测,Random Forests 和 XGBoost (2020)在 https://link.medium.com/RX2I64fLf5.发表这是对三种可用于时间序列数据的最大似然技术的一个很好的回顾。作者提供了关于如何测试这些模型性能的指导。时间序列模型的性能测试技术从根本上不同于其他类型的 ML,原因在文章中提到。

57.J. D. Seo,趋势,季节性,移动平均线,自回归模型:我的交互式代码时间序列数据之旅(2018),https://link.medium.com/n5qvZnKhY1 上的——这篇文章回顾了更多的模型,并有一些很好的可视化。

58.B. Etienne,Python 中的时间序列-指数平滑和 ARIMA 过程(2019),https://link.medium.com/IwSvpfzfn2 的-这本书有更多关于检查平稳性的信息,这是从时间序列模型中做出良好预测所必需的。还提供了获得平稳性的变换。提供了 Python 代码和可视化,以及关于如何从几个选择中选择一个时间序列模型,以及如何绘制预测的思想。

59.S. Palachy,时间序列分析中的平稳性(2019),https://link.medium.com/SLpze7QdI2 上的。对于那些喜欢大量理论和数学的人来说,这里是在平稳性属性的背景下对这些内容的描述,平稳性属性是使用时间序列数据进行预测的可靠方法的基础。

60.R. Kompella,使用 LSTMs 预测时间序列(2018),载于https://towardsdatascience . com/Using-lst ms-to-forecast-time-series-4ab 688386 b1f。也可以使用神经网络方法从时间序列中进行预测。本文描述了如何用 Python 实现这一点。

61.J. Brownlee,如何用 Python 从零开始用反向传播编码一个神经网络(2021),在 https://machine learning mastery . com/implement-back propagation-algorithm-Scratch-Python/。神经网络方法大致基于大脑中的神经元如何相互传递信息。这种生物过程激发了神经网络和深度学习模型,它们可以非常好地预测二元或连续的结果。本文解释了如何用 Python 生成神经网络模型,以及如何使用一种称为反向传播的技术来最小化模型误差。

62.答:是的,如果你不理解通用逼近定理(2020),在 https://medium . com/analytics-vid hya/You-dont-Understand-Neural-Networks-Until-You-Understand-the-Understand-the-Universal-Approximation-Theorem-theory-85b3e 7677126这个定理指出,如果使用类似 sigmoid 的激活函数,只有一个隐藏层且其中有足够神经元的神经网络可以以合理的精度逼近任何连续(线性或非线性)函数作者提供了一个很好的描述和一些例子。

63.S. K. Dasaradh,《神经网络背后的数学的温和介绍》(2019),https://link.medium.com/MDZLalMfI2 上的。虽然“温柔”是情人眼里出西施,但这篇文章描述了神经网络背后的直觉和数学。

64.V. Sethi,神经网络的类型(以及每种类型的作用!)解说(2019)【https://link.medium.com/hWRnjnJEY2 上的 。神经网络可用于回归或分类问题,因此可以替代上述链接中描述的任何方法。本文对不同类型的神经网络进行了高度的描述。

65.《走向人工智能团队,神经网络的主要类型及其应用——走向人工智能团队教程》(2020),https://link.medium.com/rgohjQrQG8。这是对 27 种神经网络模型的简短回顾。顶部的图片很好地展示了这些方法。

66.E. Hlav,深度学习中的激活函数:从 Softmax 到 Sparsemax——数学证明(2020),在https://link.medium.com/sul2IG8799.上本文描述了 Sparsemax,一种在神经网络中用于预测多类别结果的激活函数。

67.A. Bonner,什么是深度学习,它是如何工作的?(2019) 关于 https://link.medium.com/csFjYHHoR1—深度学习是一种基于神经网络的 ML 形式。虽然基本的神经网络只有一个位于输入数据和输出预测之间的“隐藏”层,但深度学习有两个或更多层。在复杂的成像、基因组或物理应用中,可能有数百、数千或数万个隐藏层,每个隐藏层都建立在前面的层上,以努力生成更好的预测。

68.M. Lugowska,当你用深度学习开始你的日志时的必读教程,作者 mag delna Lugowska(2019),在 https://blog . sky gate . io/A-必读教程-当你开始你的深度学习之旅时-5fa4da071510 。提供深度学习的介绍。还提供了一些关于如何处理隐藏层的建议,真正的工作是在隐藏层完成的。还提供了关于如何调整这些模型的建议。

69.D. Jangir,激活函数的需求和使用(2018),https://link.medium.com/dJYXxPbNf5.作者对神经网络中用于生成非线性数据预测的激活函数进行了很好的回顾。回顾了几种激活函数。

70.T. Folkman,如何利用深度学习即使是小数据(2019),https://link.medium.com/f57XSYHCB2。大多数人认为深度学习需要庞大的数据集,但事实并非总是如此,正如本文所解释的那样。

Manuel Nageli 在 Unsplash.com 拍摄的照片

合成和集成学习:

组合和集成学习指的是使用几种类型的机器学习来解决机器学习问题。

71.a .叶,组合学习是机器学习的未来(2020),。当大型任务可以被分成有意义的、不同的部分时,使用组合学习,每个部分由不同的机器学习方法进行分析。

72.J. Roca,Ensemble methods: bagging,boosting and stacking (2019),https://link.medium.com/93kLZDWPS1—Bagging 是指同时运行许多(即 10 个、100 个或 1000 个)类似的模型。随机森林模型是装袋模型。Boosting 指的是按顺序运行模型,部分集中于利用以前模型的误差项。堆叠是指并行运行许多不同类型的模型,然后合并结果。

73.S. Glenon,决策树 vs 随机森林 vs 梯度提升机器:简单解释(2019),载于https://www . datascience central . com/profiles/blogs/Decision-Tree-vs-Random-Forest-vs-boosted-trees-Explained。随机森林(RF)是由许多决策树在全部生成后组合而成的。梯度推进机器(GBM)方法在建造采油树时一个接一个地组合采油树。提供了 RF 和 GBM 的一些优点和缺点。

74.W. Koehrsen,Python 中的随机森林(2017)【https://link.medium.com/zJEfiDWEB2 —随机森林是最受欢迎的方法之一,也是预测二元结果的最佳监督方法之一。它经常但不总是比逻辑回归、支持向量机、梯度推进或神经网络方法更好。RF 是一种决策树方法,它将 10 个或 100 个或 1000 个独立决策树的输出组合在一起。要使用的树的数量是由用户设置的超参数——有关超参数的更多信息,请参见下文。

75.答:Ye,When and Why Tree-Based Models(经常)优于神经网络(2020),https://towards data science . com/When-and-Why-Tree-Based-Models-ocely-perform-Neural-Networks-ceba 9 ECD 0 FD 8虽然没有免费的午餐原则保证没有特定的建模方法在每种情况下都占主导地位,但在某些情况下,随机森林和其他基于树的模型往往优于神经网络。看看里面为什么。

76.W. Koehrsen,超参数调优 Python 中的随机森林(2018),https://link.medium.com/TFvgX1DlD2 上的。—超参数是模型用来生成预测的设置。把设置想象成电子邮件或手机的设置。分析员告诉软件使用哪个超参数。超参数选择没有很好的理论指导;使用试错法和直觉来达到最终的超参数设置,其与最小模型误差相关联。这种搜索可以是自动的。

77.P. Patidar,机器学习中的超参数(2019),https://link.medium.com/VAVKbs6qi4 的。本文提供了关于超参数的另一个简要介绍。

78.t . S .5 分钟 AdaBoost 的一个数学解释(2020) |走向数据科学https://Towards Data Science . com/A-Mathematical-explain-of-AdaBoost-4 b 0c 20 ce 4382。这是 AdaBoost 的简短说明,AdaBoost 是一种基于自适应 boosting 树的 ML 方法。提供了一个示例。

Jan Antonin Koler 在 Unsplash.com 拍摄的照片

无监督学习:

这是一种学习形式,包括在数据集内搜索模式,但没有标记结果变量的优势。许多无监督的方法被用于将相似的观察结果分组为更小的群。

可视化也是一种无监督学习的形式;请参阅下面关于拓扑数据分析(TDA)的文章作为示例。TDA 是一种以更完整的方式理解我们分析的数据的方法。

最后,创建数据的低维表示的努力也是无监督学习方法的例子。很好的例子包括主成分分析、因子分析和自动编码器,它们根据用户希望如何将几百或几千个变量中的信息减少到更少(也许只是几个)的变量而变化,以便更容易在 ML 中使用。

79.J. T. Raj,机器学习降维初学者指南(2019),在https://link.medium.com/wWOFkXNoe3这篇文章描述了如何将具有数百或数千个特征(即变量,或变量的函数)的数据集减少到一个更小的数量,而不会导致太多的信息损失。这使得用户可以利用庞大的数据集,同时仍然让模型收敛。

80.a .叶,《线性判别分析在四分钟内解释:概念、数学、证明和应用》(2020),载于https://medium . com/analytics-vid hya/Linear-discriminal-Analysis-Explained-in-Under-4-Minutes-e558e 962 c 877。LDA 是一种可用于监督或非监督分析的技术。本文更侧重于无监督的应用程序。

81.P Nistrup,线性判别分析(LDA) 101,使用 R (2019),在https://towardsdatascience . com/Linear-discriminal-Analysis-LDA-101-Using-R-6a 97217 a 55 a 6。这是一个很好的应用程序,展示了如何使用 R 统计软件进行 LDA。

82.M. J. Garbade,Understanding K-means Clustering in Machine Learning(2018),onhttps://link.medium.com/YAkPCunvp1.K-means Clustering 是一种方法,通过这种方法,用户可以决定他或她想要从源数据集(这是数字 k )创建多少个子集(聚类),软件可以计算出如何构建这些聚类,以便一个聚类内的观察结果相似,但不同于其他聚类中的观察结果。

83.C. Maklin,K-means 聚类 Python 示例(2018),https://link.medium.com/9Ro8ahOgn2 上的——作者很好地介绍了 K-means 聚类,有很好的可视化和 Python 代码。

84.A. Singh,用高斯混合模型建立更好更准确的聚类(2019),关于https://link.medium.com/Z0Ls9KUqW3.聚类分析有助于从未标记的数据中找出意义。本文描述了如何使用 GMM 通过对相似的观察结果进行聚类来更好地理解这些数据。

85.T. Yiu,Understanding PCA (2019),onhttps://link.medium.com/ZHwhuCajK2.主成分分析是一种将来自许多变量的信息组合成更多变量的技术,根据作者的说法,这“有助于我们揭示隐藏在数据中的潜在驱动因素。”这篇文章简单地、高层次地描述了这是如何发生的,并带有一些漂亮的视觉效果。

86.a,Dubey,主成分分析背后的数学(2018),关于https://link.medium.com/xz2bMKOhK2.这篇文章描述了 PCA 中使用的数学,将许多变量转换成许多更少的变量,同时在这个过程中保留尽可能多的信息。

87.T. Santos,因子分析和主成分分析之间的差异(2019),关于https://link.medium.com/LHtYPlmjK2.PCA 和 FA 都是数据简化技术,但 PCA 专注于在其创建的较小变量集中保留尽可能多的变化,而 FA 专注于将来自较大变量集的信息组合成较小的潜在(隐藏)因子集,这些因子可以解释观察到的较大变量集之间的相关性。

88.T. Ciha,PCA & auto encoders:Algorithms every one Can Understand(2018),onhttps://link.medium.com/eYPIiKdiK2.PCA 是一种基于线性代数的方法,将变量组合成更少的变量。自动编码器是一种基于神经网络的方法,用于将来自许多变量的信息组合成更少的变量。本文描述了每种方法的属性。

89.J. Brownlee,可视化主成分分析(2021),https://machine learning mastery . com/Principal-Component-Analysis-for-Visualization/?UTM _ source = drip&UTM _ medium = email&UTM _ campaign = Principal+component+analysis+for+visualization&UTM _ content = Principal+component+analysis+for+visualization大多数人使用 PCA 进行降维,但它对可视化数据也非常有用,如本文所述。

90.Z. Singer,拓扑数据分析-解开流行词(2019),https://link.medium.com/WKBRmTMjK2.TDA是一种理解数据集中变量如何相互关联的几何方法。TDA 的应用通常可以揭示隐藏的模式,从而导致对感兴趣的结果如何产生的关键理解。TDA 提供的可视化说明了数据的“形状”,可以帮助我们生成更好的预测或解释模型。这篇文章说明了 TDA 是如何在高层次上工作的。

91.V. Deshmukh,拓扑数据分析——一个非常简短的介绍(2019),关于 https://link.medium.com/yqlneOEjK2 的。这篇文章提供了更多关于 TDA 如何工作的信息。

因果推断:

介质上有很多关于因果推理的描述。一些是由经济学家和其他社会科学家,一些是由神经科学家,以及许多其他学科的代表。完全覆盖因果推理是不可能的。下面你会发现一些引起我兴趣的,从我几个月前写的一个概述开始。在 Medium 上搜索“因果关系”可以找到更多。关于经济学和其他社会科学中因果推理的三部伟大教科书已经由 Maziarz (2020)、Pearl 和 Mackenzie (2019)以及 Morgan 和 Winship (2015)编写完成。

92.什么导致了什么,我们怎么知道?(2021),在https://towards data science . com/what-causes-what-how-we-know-b 736 a 3d 0 eefb。这是一个由该领域的领导者确定的五种主要因果推理方法的综述,以及它们如何帮助我们思考当今主要的社会政治经济问题。

93.A. Kelleher,因果关系技术入门(2016),在https://medium . com/@ akelleh/A-Technical-Primer-on-Causality-181 db 2575 e41。这本关于因果关系的初级读本深入到基础概念中,直观且带有一些重型数学。它应该能满足那些对因果推理感兴趣的有许多不同背景和训练的人。

94.P. Prathvikuman,通过因果影响进行因果推断(2020),https://link.medium.com/rSFRdqmW66。这是一篇关于谷歌因果影响软件的短文——基本上是关于如何找到反事实,并在随机化不可行的研究中使用这些反事实来推断因果关系。许多客户将我们生成的项目影响或其他推断估计解释为因果关系,而回归系数并不总是符合因果推断的标准。设计问题,尤其是如何处理选择偏差,是需要讨论的关键问题。

95.P. Rajendran,使用差异中的差异、因果影响和合成控制的因果推理(2019),https://towardsdatascience . com/Causal-Inference-Using-Difference-Causal-Impact-and-Synthetic-Control-f 8639 c 408268。作者很好地介绍了寻找干预措施影响的三种方法,描述了每种方法的优点和缺点。

96.G. M. Duncan,上的因果随机森林 https://econ . Washington . edu/sites/econ/files/old-site-uploads/2014/08/Causal-Random-Forests _ Duncan . pdf .这是一个简短的 PowerPoint 演示,描述了用于因果推理的随机森林。

97.A. Tanguy,贝叶斯分层建模(或更多 autoML 还不能取代数据科学家的原因(2020),在 https://towards Data science . com/Bayesian-hierarchy-Modeling-or-more-reasons-why-autoML-cannot-replace-Data-Scientists-yet-d 01 e 7d 571d 3d。作者说,“贝叶斯网络允许人们对变量之间的因果关系进行建模,弥补数据提供的信息的不足。”

98.Ctaeh,什么是贝叶斯信念网络?(第一部分)(2016),上 https://www . probabilistic world . com/Bayes-Belief-Networks-Part-1/Bayes 信念网络通常被描述为利用条件概率和 Bayes 定理推断变量之间因果关系的努力。这里解释一下关于这些网络的直觉。

99.Ctaeh,什么是贝叶斯信念网络?(第二部分)(2016 年,在 https://www . probabilistic world . com/Bayesian-belief-networks-Part-2/在这一部分中,Cthaeh 通过展示 BBNs 背后的数学更深入一些。

100.C. Y. Wijaya,快速入门因果分析决策与 DoWhy:预测来自干预的因果效应(2021),载于https://medium . com/geek culture/A-quick start-for-Causal-Analysis-Decision-Making-with-DoWhy-2 ce 2d 4d 1 EFA 9。作者描述了微软开发的基于图论和反事实分析生成因果模型的 DoWhy 包。提供了 Python 代码。这篇文章的一个很好的姊妹篇是由 DoWhy 开发人员 Amit Sharma 和 Emre Kiciman (2020)撰写的论文。

101.H. Naushan,使用自然语言处理的因果推理(2021),载于https://towardsdatascience . com/Causal-Inference-Using-Natural-Language-Processing-da 0 e 222 b 84 b。这篇文章在机器学习、因果推理和自然语言处理之间提供了一个很好的链接。在本质上,NLP 可以被看作是包含文本数据的 ML,使用它从文本中得出因果推论是一个新颖而有用的想法。

限制:

虽然这篇文章覆盖了很多领域,但不可能在一篇文章中探索大量重要的机器学习主题。许多其他类型的机器学习值得花费时间和精力来理解它们。示例包括强化学习(即以目标为中心的学习)和迁移学习(为一个目的训练、验证和测试模型,然后利用它实现完全不同的目的)。还有许多其他的例子。机器学习实用方法的领导者 Brownlee (2019)定义和描述了这些和其他 ML 主题。他的许多书都物有所值。

我在这里关注的只是关于媒体、数据科学和其他方面的短文。这些都是非常有用的,因为他们的务实的方法。作者提供了清晰而简要的解释,通常将理论、数学和建模技巧与 Python、R 或 SAS 代码的列表或链接以及许多更详细的参考资料相结合。许多人在 GitHub 链接或其他可以找到代码和注释的地方提供了更多的细节。

尽管如此,这仍然留下了至少五个限制。首先,要找到并描述每一篇好文章是不可能的,即使是上面包含的简短的主题列表。鼓励读者用自己的搜索来补充这个列表,以充分研究感兴趣的主题。

第二,上面包括的简要描述并不意味着包括批判性评论。没有一篇文章是完美的,但是为了简洁起见,我选择不详述任何错误,把它留给读者。

第三,我选择不提供同行评审的方法论出版物和教科书的列表,这些出版物和教科书更详细地描述了 ML 理论和应用。这个决定只是为了节省空间,我强烈推荐阅读这样的材料。如果读者用同行评议的文章和教科书材料补充上述文章,他们会发现理论、深度解释和实用方法的结合将产生理解上的收获,值得投入时间。

第四,上面的链接描述了如何进行 ML 和深度学习模型的训练、测试和验证。我特意决定不关注模型部署(即,在本地或大规模工业应用中使用这些模型需要什么)。这是一个独立的领域。关于部署的更多信息可以在 Ted Malaska 和 Shivnath Babu (2019)的优秀 O'Reilly 出版物中找到。

第五,也是最后一点,上面描述的文章集中在 ML 的机制上。近年来,出现了一个平行且非常重要的焦点,描述如何负责任地使用 ML 模型。关于这个主题的更多信息可以在我最近的一篇文章中找到(Ozminkowski,2021),以及霍尔等人的另一篇伟大的 O'Reilly 出版物中找到(2021)。卡内基梅隆大学(2018)的数据科学和公共政策团队有一个名为 Aequitas 的优秀软件程序,该程序也促进了负责任的机器学习。Obermeyer 等人(2020)也提供了另一个关于如何避免机器学习中的偏见的很好的描述。

结论:

这篇文章提供了许多 ML 方法的链接,可以帮助数据科学家为他们的客户产生有用的见解。它是由没有免费的午餐定理激发的,该定理表明需要为任何分析寻找最好的学习者。这意味着测试许多不同的 ML 方法,以找到产生最佳(更准确、更敏感、更具体)预测的方法。

最近,人们对所谓的超级学习者进行了一些研究。这是一种结合来自许多不同 ML 模型的信息的方法,以产生更好的整体预测。超级学习者已经被证明能够更好地处理大量的输入 ML 方法。例如,可以使用上面链接中描述的许多方法作为超级学习者的输入。Romain Pirracchio (2016)提供了一个超级学习者如何在医疗保健分析中工作(即,预测在医院重症监护病房接受治疗的患者的死亡率)的很好的例子。介绍超级学习者的论文是由 Van der Laan 等人(2007)发表的,关于它的更多信息可以在那里找到。把超级学习者想象成应用于许多 ML 模型的 ML。

对于那些想以其他方式寻找最佳模型的人,Neo (2019)提供了许多其他关于 ML 和数据科学的网站的链接,这些网站也提供了价值。这些网站有些是免费的,有些不是。

机器学习和深度学习领域正在快速发展,跟上它的步伐是一项艰巨的任务。不可能在一篇文章中涵盖所有新的发展。我在这里的重点是许多永恒的方法,这些方法已经提供了价值,并将继续提供价值。我希望你喜欢阅读!

参考文献:

J.布朗利。机器学习中的 14 种学习类型(2019),在https://machinelementmastery . com/Types-of-Learning-in-Machine-Learning/

卡内基梅隆大学的数据科学和公共政策团队,Aequitas:一个用于机器学习的开源偏见审计工具包(2018 年),在http://www . datasciencepublicpolicy . org/our-work/tools-guides/Aequitas/

I .古德费勒、y .本吉奥和 a .库维尔,《深度学习》(2016 年),麻省剑桥:麻省理工学院出版社

页(page 的缩写)Hall,N. Gill 和 B. Cox,《负责任的机器学习》( 2021 年),塞瓦斯托波尔,CA: O'Reilly Media Inc .

T.Malaska 和 S. Babu,《通过现代工具重建可靠的数据管道》( 2019 年), Sebastopol,CA: O'Reilly Media Inc .

米(meter 的缩写))Maziarz,《经济学中的因果关系哲学》( 2020 年), Routledge-Taylor & Francis 集团,纽约

南 L. Morgan 和 C. Winship C,《反事实和因果推理:第二版》( 2015 年),剑桥大学出版社,英国剑桥

B.Neo,机器学习和数据科学 20 大网站(2019),https://link.medium.com/zwUcGQCvz3 上的

Z.Obermeyer,R. Nissan,M. Stern 等人,《算法偏差剧本》(2020 年),芝加哥布斯:应用人工智能中心。也在https://www . FTC . gov/system/files/documents/public _ events/1582978/algorithm-bias-playbook . pdf

R.Ozminkowski,垃圾进垃圾出:拯救世界只是解决这个普遍问题的一个好理由(2021 年),https://towardsdatascience . com/Garbage-in-Garbage-out-721 b5 b 299 bc1

R.Ozminkowski,什么导致什么,我们怎么知道?(2010 年),在 https://towards data science . com/what-causes-what-how-we-know-b 736 a 3d 0 eefb

J.Pearl 和 D. MacKenzie,《为什么之书:因果的新科学》( 2018 年),纽约基础图书公司

R.Pirracchio,基于超级 ICU 学习者算法(SICULA)项目 MIMIC-II 结果的 ICU 死亡率预测(2016),电子健康记录二次分析第 20 章,瑞士 Cham:麻省理工学院关键数据团队

A.Sharma 和 E. Kiciman,DoWhy:因果推理的端到端库(2020 年),载于 arXiv:2011.04216 v1[统计。我]2020 年 11 月 9 日

米(meter 的缩写))J. Van der Laan、E.C. Polley 和 A.E. Hubbard AE,《超级学习者》( 2007 年),加州伯克利,加州大学伯克利分校生物统计工作论文系列,第 222 页

BI 顾问实际上是做什么的?

原文:https://towardsdatascience.com/what-does-a-bi-consultant-actually-do-86fd4a0451c0?source=collection_archive---------28-----------------------

我如何帮助公司将数据转化为洞察力

我从事数据工作已经超过 25 年了,尤其是在商业智能领域大约有 10 年。目前,我是一名商业智能顾问,帮助公司实现他们的项目,并将他们的数据转化为洞察力。

但是我的工作到底包括什么?BI 顾问实际上是做什么的?

斯科特·格雷厄姆Unsplash 上拍照

和任何顾问一样,客户希望解决一个问题,但却没有必要的专业知识。因此,他们希望“咨询”专家。

对我来说,作为一名商务智能顾问,有两种典型的情况可以解释我从事的大部分工作。客户会联系我,要么是因为 a)他们当时没有任何商业智能(也就是说,他们还没有以任何有意义的方式分析他们的数据),要么是因为 b)他们已经做了一些报告,但他们希望从 Excel 或他们拥有的任何基本商业智能升级到更自动化、更具交互性和可共享性的东西。

处理这两种场景的方法几乎是相同的,所以我将和你一起回顾从开始到最终将项目交付给客户的过程。

从哪里开始?

你可能认为最好的开始是做一些数据审计,看看客户有什么数据,存储在哪里,如何存储等等。但是,事实上,开始这种 BI 项目的最佳地方实际上是在最后。让客户尽可能详细地向你描述他们项目的最终结果。因此,像这样的问题,报告或仪表板看起来像什么?他们想要监控和跟踪的 KPI 是什么?那么,他们希望在报告中加入什么样的交互选项呢?他们将与谁共享这些报告?怎么会?多久一次?

也是在这个阶段,我做另外两个重要的任务。首先,我从技术和预算两方面评估客户表达的可行性要求。

有时,客户想要实现甚至在技术上不可能实现的事情,无论是考虑到他们的数据设置方式,还是基于他们选择的 BI 工具的限制。有时,客户对工具的选择是基于他们的预算,这就是我所说的预算可行性。

所以我想你会称之为“管理期望”。我做的另一件事是利用我参与过许多不同项目的经验,提出客户可能没有想到,甚至不知道存在的改进或附加功能。这是你真正能挣钱的地方。你可以接受一个客户基本的、有限的初始需求,然后把他们的项目变成只唱不跳的东西。这是一个非常快乐的客户。

因此,一旦我让客户解释他们完成的项目看起来是什么样的,我已经管理了期望并提出了改进或附加功能,我们最终基本上确定了项目的总体范围。

对于那些熟悉项目管理的人来说,你会知道范围是构成“铁三角”的三个要素之一。另外两个是时间和成本。

在某些情况下,客户尚未选择特定的 BI 工具,定义总体范围有助于确定哪些工具适合项目,哪些工具可以排除在外——事实上,有些客户只需要您推荐满足其需求的最佳 BI 工具。正如我之前所说的,有些人可能选择了一个工具,认为它会做他们需要的一切,但只有当你理解了他们的需求,你才会发现它并没有。所以,你看,在继续下一步之前,首先定义范围是非常重要的。

范围和规格

一旦对项目的总体布局达成一致,就该更深入地挖掘并更详细地定义范围了。这通常意味着通过列出将包含在每个仪表板或报告中的所有查询以及每个查询的数据来自哪里来规范项目。如果它来自多个数据源,它们是如何连接在一起的?这有点像路线图和数据购物清单合二为一。

实际上,我创建了一个电子表格来做这个详细的规范,如果你有兴趣得到一份副本,我会在文章末尾留下一个链接。

一旦项目的规格已经确定,你就可以开始计算执行和交付项目所需的时间,并以此为基础计算其成本。

现在,我总是建议与客户讨论预算,甚至在任何规范完成之前。因为当预算不在的时候,完成所有的工作是没有意义的。因此,事先确保客户知道你的基本日薪或时薪是至关重要的。

计算成本

但是你如何准确地计算客户的项目成本呢?嗯,这不仅仅是将你需要构建的查询或可视化的数量乘以特定的时间长度。相反,它要复杂得多,要包含更多的变量。

甚至在开始项目本身之前,你必须考虑到你可能已经做的任何售前工作,与客户的最初通话,审查项目以检查某些查询和数据连接的可行性,诸如此类的事情。然后是合同前管理(创建项目规范,撰写建议书等)。

在开始构建仪表板之前,通常(尽管不总是)需要准备数据源。这可能很简单,只需将数据源连接到 BI 工具,并确保数据如您所期望的那样呈现。或者,您可能需要编写复杂的 SQL 查询来将数据连接在一起,并构建数据库的“视图”。还可能需要构建一个完整的数据仓库来为项目服务。

根据我的经验,我可以说,平均而言,BI 项目的数据部分占整个项目的 50%左右。创建数据可视化背后的查询,定制它并将其添加到仪表板中只需几分钟或点击一下。但是,要到达设置数据以交付您需要的结果的阶段,可能需要几个小时甚至几天。

事实上,我为一家跨国汽水公司工作过的一个项目只是一个简单的记分卡,上面有很多个位数的 KPI。我只花了大约一个小时来建造和设计。但是建立的数据在不同部门的不同数据库中,出于安全原因,我们不能直接连接到这些数据库。所以大概 95%的项目时间都花在了整理数据部分。这是一个很好的例子,说明 BI 项目不仅仅是构建仪表板。如果你想更多地了解这个项目,也许我可以写一个关于它的案例研究?让我知道。

在估算项目成本时,需要考虑的其他事情包括,估算项目期间你需要与客户会面的次数,以监控项目进展,并检查一切是否符合客户的要求。然后,您需要考虑在交付项目的初始草案后可能需要做的任何更正,以及可能没有预见到的任何意外情况。最后,您是否需要交付任何项目后材料,如培训或最佳实践指南,以充分利用报告等。?这些都是需要考虑的。

基本上,根据项目的复杂性和当时可用的项目详细信息的数量,您可以放心地将您认为产生项目可交付成果所需的时间乘以大约 1.6 到 2。如果信息有点粗略,而且细节不多,就有更多的出错或误解的空间,这可能导致必须重新做某些事情。你明白了。

如果客户问你一个大概的数字,那么这给你一个很好的指导。如果你不能算出一个数字作为起点,那么一个真正不科学的方法是计算客户希望你建立的报告中不同图表、图形和表格的数量,然后乘以 20 或 30 分钟。当然,前提是他们希望升级现有报告,并且可以向您展示这些报告。否则你只能尽力猜测。

选择正确的方法

所以。到目前为止,我们已经详细说明了项目,并为客户进行了成本核算。现在,在某些情况下,客户可能会对费用有所犹豫或保留。在这些情况下,有一个非常简单的解决方案可以让客户放松,也让你的生活稍微轻松一些。那就是提出一个基于 sprint 的项目。

如果你不熟悉什么是 sprints,它们是敏捷项目管理方法论的一部分。基本上,你把整个项目分解成不同的连贯部分,或迷你项目。然后你在规定的时间内完成一次冲刺,然后继续下一次。显而易见的好处是,客户可以看到你的工作和你管理项目的方式,而不必一次性投入他们所有的预算。所以本质上,降低他们的风险。在第一次 sprint 之后,客户可能还想改变他们对项目某些方面的想法,如果你在整个项目中工作,这将意味着更多的时间来纠正或重新调整事情。

总的来说,双方都没有太大的压力从一开始就把事情做好,这就给项目的有机发展留下了更多的喘息空间。

事实上,我会建议一开始就向客户提出一个基于 sprint 的项目(除非它整体上不是一个非常大的项目)。这可能是他们自己没有考虑过的方法,他们可能会看到这种方法的好处。

然而,你总是冒着在短跑中搬起石头砸自己脚的风险。为什么?因为一旦你交付了第一个 sprint(比如说一个特定的仪表板)。如果客户愿意,他们可以进入该工具,在幕后查看仪表板是如何设置的。他们可能会认为这实际上并不复杂,并决定自己完成剩下的工作。尤其是如果您已经完成了构建数据源的所有复杂工作。所以这可能会让你有点受冷落,从整个项目中获得的收入比你预期的少,这可能会有点令人讨厌和沮丧。

好了,一旦所有事情都达成一致(范围、成本和时间),你就可以开始项目了。至少在一开始,定期与客户会面,介绍目前为止已经生产的产品,并澄清任何你可能无法 100%确定的细节,这总是一个好主意。当你与客户保持密切联系时,他们总是感到放心。

除此之外,你只需要继续生产可交付产品。因为你一路上都在和客户保持联系,这不像是最后的某种“大揭露”。通常更多的是确认所有需要确认的事情,并将项目移交给客户,以及任何项目后的材料。然后,客户可以检查所有内容并签署项目。

不要被卡住

这最后一步非常重要。如果委托你做的事情没有得到最终的认可,总会有这样的风险,客户会回来说,“你介意把这个额外的图表添加到仪表板上吗?”或者“我们决定改变报告中某些内容的顺序。只需要一分钟,你已经完成了工作。”说到底,你是否不介意在项目交付后做这些小的附加工作,这真的取决于你,但我相信,与其免费做这些,不如尝试与客户达成某种项目维护协议。每月或每季度的经常性费用将包括这些小的额外费用,并确保一切正常工作。对我来说,这是迄今为止更专业的工作方式。

如果你想得到我的项目说明书电子表格,这里有链接:https://mailchi.mp/vitaminbi/project-spec-doc

如果你想订阅我的频道,你可以点击这里:【https://www.youtube.com/c/VitaminBusinessIntelligence

感谢阅读!

A/B 测试测量什么?

原文:https://towardsdatascience.com/what-does-an-a-b-test-measure-adebf56ae68a?source=collection_archive---------36-----------------------

提示:这不是大多数人想的那样

作者图片

A/B 测试是客观衡量营销支出、网站功能(如语言、视觉效果、字体)和许多其他业务流程的黄金标准。这是你在商业中所能得到的最接近“物理实验”的东西。这也是许多困惑和误解的来源。在深入 A/B 测试实际测量什么之前,让我们先讨论一下什么是 A/B 测试。A/B 测试由我们想要测试的东西的两个版本定义,版本 A 和版本 B,有时也被称为测试和控制,它们将被暴露给随机选择的参与者。这是通过将参与者随机分配到测试组或对照组来实现的。一旦分配完毕,测试组的参与者将接触版本 A,而控制组的参与者将接触版本 b。然后将测量参与者对每个版本的反应,以确定两个版本之间是否有任何差异。

参与者的随机化对于正确的 A/B 测试至关重要,因为它保证了测试组和对照组的人口统计数据在统计上是相同的。例如,假设你是一家利用电视、广播和在线搜索进行营销的企业;你正在评估再营销广告(那些在互联网上跟随你的展示广告)增加销售的潜力。你要确定再销售广告是否会增加任何增量销售额,因为把钱花在已经转化的人身上只会增加你的每次收购成本,而不会增加任何新的销售额。不幸的是,不可能找到一群不看电视和广播,并且在寻找他们想买的东西时从不使用在线搜索的人。但是如果你随机将你网站的访问者分成测试组和对照组,你最终会得到两个看电视、听广播和上网搜索的群体,他们的方式在统计上是相似的。这意味着,在一切都相同的情况下,测试组和对照组将以完全相同的(统计上)速度产生销售额。如果测试组在一个月内产生 100 笔销售,那么对照组将产生几乎相同数量的销售(例如,99、100 或 101)。测试组和对照组之间的任何差异都是随机产生的。

现在,当你对再销售广告进行 A/B 测试时,你在测试组和对照组之间引入了一个重要的区别:测试组接触到了再销售广告,而对照组没有。这意味着人群之间的唯一区别是你引入的东西:对再销售广告的暴露。过了一段时间后,你计算测试组创造了多少销售额,并与控制组创造的销售额进行比较。如果销售数量相差很大,那么你可以确信,相对于控制组而言,接受再销售广告确实改变了测试组的行为。简而言之,这就是 A/B 测试的作用。

那么 A/B 测试到底测量什么呢?根据我的经验,大多数人会说 A/B 测试衡量的是哪个版本更好。不正确。A/B 测试衡量结果是否取决于接触版本 A 或版本 B;而不是哪个版本更好。结果可能是版本 A 更好或者版本 A 更差。A/B 测试只是衡量版本 A 和版本 B 之间有多大的差异,而不是哪个更好。这是一个微妙但重要的差异(我们将在一分钟内解释它为什么重要)。从技术上讲,统计学家会说 A/B 测试决定了“你是否应该拒绝或接受零假设。”什么是零假设?这是以下简单英语陈述的一个花哨术语:结果不取决于接触版本 A 或版本 B。如果 A/B 测试结果告诉你拒绝零假设,那么它告诉你结果确实取决于你接触的版本。

但是你如何确定结果是好是坏呢?在再销售广告 A/B 测试的例子中,你看销售的数量。如果测试组产生了 200 笔销售,而控制组产生了 100 笔销售,那么你知道接触再销售广告对销售有好处。但是如果测试组产生了 50 笔销售,而控制组产生了 100 笔销售,那么你就知道接触再销售广告对销售是不利的。A/B 测试不能告诉你结果是好是坏,只能告诉你测试和控制之间的差异是“真实的”;暴露于版本 A 或版本 B 确实会影响结果。在本例中,如果测试组获得 200 个销售,A/B 测试可能会告诉您拒绝零假设,如果测试组获得 50 个销售,它也可能会告诉您拒绝零假设。在这两种情况下,A/B 测试只是告诉你你看到的差异是“真实的”,而不是随机的。你必须看结果来决定它是积极的还是消极的(这取决于上下文)。

有些人可能会认为这是吹毛求疵。当然,也许 A/B 测试并不能直接告诉你版本 A 比版本 B 好还是差,但是听起来它确实是测试的直接逻辑结果。这是真的,除非业务用户经常会问这样的问题:那么,如果 A/B 测试表明版本 A 比版本 B 好,置信度为 99%,那么实际上版本 A 比版本 B 差的概率是多少?是 1%吗?肯定不是!如果考虑零假设(即,结果不依赖于暴露于版本 A 或版本 B ),那么结果告诉你的是,在 100 个相同的测试中,99 个会证明暴露于版本 A 会导致与暴露于版本 B 不同的结果,但是 100 个相同的测试中有 1 个会表明版本 A 和版本 B 之间实际上没有差异。使用再营销的例子, 你可能以 99 次测试结束,其中测试组产生了大约 200 次销售(在每次测试中),但在 100 次测试中的 1 次测试中,测试组只产生了 110 次销售(相比之下,对照组产生了 100 次销售),这意味着看起来再销售广告对结果的影响非常小,如果有的话。

没有真正的方法知道“版本 A 实际上比版本 B 差的可能性有多大?”不进行实验也不看结果。有一些技术可以让你感觉到这种可能性有多大,但这不是 A/B 测试的直接结果。您可以使用的一种技术是估计参数的置信区间,但这只能在 A/B 完成后进行。例如,再次使用再销售广告的例子,假设测试组产生了 200 笔销售,而控制组产生了 100 笔销售。人们可以得到每组的人数,然后用销售额除以每组的人数来计算“销售率”。例如,如果测试组的销售率为 20%,而对照组的销售率为 10%,那么您可以计算出测试组销售率的 95%置信区间为 15% — 25%,而对照组为 6% — 14%(这些数字是虚构的)。人们会有一种很好的感觉,实际上,再销售广告不太可能让事情变得更糟。

顺便说一下,对于那些更有技术头脑的人来说,关于为什么统计测试的结果不能直接告诉你参数的真实值的正式答案是,置信区间是参数空间的一部分,而统计测试的接受区域是样本空间的一部分。

数据块是做什么的?

原文:https://towardsdatascience.com/what-does-databricks-do-8a6c4ef9071b?source=collection_archive---------4-----------------------

平台概述及其使用体验

第四十二任在 Unsplash 上拍摄的

TL;速度三角形定位法(dead reckoning)

Databricks 是一个云数据平台,旨在帮助解决以下事实:

  • 随着公司开始从许多不同的来源收集大量数据,越来越需要一个单一的系统来存储这些数据
  • 使图像、声音和其他非结构化数据易于访问以用于训练 ML 模型需要不同的架构方法

现在,选择自己的道路 —想了解 Databricks 这个数据平台吗?继续章节 1️⃣想跳过来看看用起来是什么感觉?跳转到 2️⃣部分

1.Databricks 平台基础

为了理解 Databricks 做什么,首先理解用于收集企业数据的系统是如何发展的,以及为什么,这一点很重要。

🤷🏽‍♂️数据仓库,湖泊…和湖边小屋?

在之前,我已经写过关于集中存储数据的必要性,以便最有效地利用它。数据仓库旨在将组织中不同的数据源整合在一起。

数据仓库的概念早在 20 世纪 80 年代就已经存在[1]。其想法是,来自运营系统的数据将流入数据仓库,以支持业务决策。

几十年过去了,简陋的数据仓库有一些非常明显的局限性:

  • 通常没有支持 ML 用例的内置功能——即使用数据提出更多预测性问题的能力。
  • 在存储和检索新的、复杂的非结构化数据格式时,它们缺乏灵活性和可扩展性。

当然,Snowflake 和 Redshift 等现代云数据仓库(CDW)的出现有助于解决内部部署产品的“可扩展性”限制。

BigQuery 中类似于 BQML 的产品特性也开始迎合数据仓库中内置 ML 功能的缺乏。

但是,它们仍然没有解决如何存储、管理和洞察当今各种各样的数据类型的难题。

图 1:从数据仓库到 Lakehouse 的演变,Databricks 网站。

继续沿着图 1 中的进化尺度,数据湖紧随其后。它们提供了一种以原始格式存储大量结构化、半结构化和非结构化数据的方法。

它们在历史上是用商用硬件(存储和计算)构建的,与某种分布式处理框架(如 Hadoop )结合使用。

问题是数据湖有成为垃圾场的趋势,因为它们:

  • 缺乏轻松管理和控制存储在其中的数据的功能;有些人甚至称之为“数据沼泽”!
  • 不要支持事务的概念,也不要强制执行任何类型的数据质量标准。

为了不同的数据处理目的,您可以将大量的产品附加到一个数据湖中,这很快就会造成难以管理的体系结构混乱。

➡️ 进入数据仓库

为了解决我们到目前为止讨论的与数据仓库和湖泊相关的挑战,最近的“lakehouse”概念增加了几个关键的改进:

  • 数据湖的元数据层 —这是一种跟踪表格版本、数据描述和强制数据验证标准的方法。
  • 新的查询引擎设计在数据湖上提供高性能的 SQL 执行,例如 Apache Spark
  • 数据科学和机器学习工具的优化访问—这使得处理后的数据可以以适合 ML 的开放数据格式提供,从而加快了模型的实验和开发。

Databricks 旨在在一个统一的、基于云的平台上实施数据湖库概念

图 2: Databricks 数据平台高层架构,Databricks 网站。

Databricks 位于您现有的数据湖之上,它还可以连接到各种流行的云存储产品,如 AWS S3 和谷歌云存储。

分解 Databricks 数据平台架构中的层:

  • Delta Lake 是为数据湖带来可靠性的存储层。Delta Lake 提供了 ACID 事务、可扩展的元数据处理,并统一了流式和批量数据处理。Delta Lake 运行在您现有的数据湖之上,并且与 Apache Spark APIs 完全兼容。
  • Delta Engine 是一个优化的查询引擎,用于高效处理存储在 Delta Lake 中的数据。
  • 此外,还有一些内置工具可用于支持数据科学、BI 报告和 MLOps。

上述所有组件都紧密集成在一起,可以从一个“工作区”用户界面(UI)访问,该界面可以托管在您选择的云上—下一节将详细介绍!

2.启动并运行

我总是试图“走自己的路”,所以我决定给 Databricks 一个旋转,作为我这篇文章研究的一部分…

👩🏾‍💻设置

Databricks 提供了 14 天的免费试用,你可以在你的云上运行。我使用谷歌云平台(GCP),因为我对它最熟悉,但它也可以在 AWS 和 Azure 上使用。

设置很简单,在 GCP 市场快速搜索“数据砖块”就可以进入一个页面,在那里我可以注册试用。

试用“订阅”完成后,您可以从 GCP 的 Databricks 菜单项获得一个链接,以管理 Databricks 托管帐户管理页面上的设置。

图 3:数据块的 GCP 市场设置

下一步是创建一个“工作空间”,它是访问您的资产和处理数据块的环境。您可以通过外部 Databricks Web 应用程序来实现这一点,它实际上是您的控制平面

图 4:数据块—创建工作空间

“创建工作区”这一操作基本上是在您的 GCP 项目中启动一个三节点 Kubernetes 集群,使用 GKE 来托管 Databricks 运行时,也就是您的数据平面

这一区别非常重要,因为您的数据始终驻留在数据平面的云帐户和您自己的数据源中,而不是控制平面中,因此您保持对数据的控制和所有权。

⚠️ 小心

Databricks 试用版仅涵盖您对其平台的使用,您仍然需要为创建工作空间和运行任何作业所消耗的任何云资源买单。

⚠️ 警告

随着我们的工作空间被提供,我们被提供了一个 URL,它将我们带到一个单独的 UI 来实际使用数据块。

图 5: Databricks Workspace UI —数据科学&工程背景

您可能想做的第一件事是通过上传文件、连接到受支持的数据源或使用合作伙伴集成在 Delta Lake 中创建表。

图 6:数据块—创建表格

接下来,为了创建 Delta Engine 作业或运行笔记本来分析您的数据,您需要创建一个“集群”。

Databricks 集群是一组计算资源和配置,您可以在其上运行数据工程、数据科学和数据分析工作负载。

请注意,这至少会增加三个虚拟机、一个驱动程序和两个工作人员(最多可扩展到八个)。

图 7:数据块—创建集群

集群上的 Databricks 运行时是基于 Apache Spark 的。事实上,Databricks 中的大多数工具都基于开源技术和库。他们甚至以开源方式发布了关键组件,如 Delta Lake 和 MLflow。

🚨顶尖提示

如果您只是在自掏腰包,请确保减少“在 n 分钟不活动后终止集群”的时间,以节省您的云消耗成本。另外,如果您已经完成了试验,不要忘记删除集群和工作区。

🚨顶端提示

群集配置需要几分钟时间,然后您可以将其“连接”到笔记本电脑或将其用于“新工作”任务。

总的来说,我发现用户体验干净、直观,而且试用起来相当顺畅。

🤖数据块上的机器学习

Databricks UI 有一个漂亮的小上下文切换,这取决于用户的角色和他们想从平台中得到什么。

图 8:数据块—在工作空间中切换用户上下文

我从之前的“数据科学和工程”背景中切换出来,快速浏览一下“机器学习”提供了什么。

图 9: Databricks Workspace UI —机器学习上下文

从这里我们可以:

  • 创建笔记本,
  • 使用 AutoML 或
  • 管理实验、特征存储和训练模型

我决定使用“钻石”样本数据集尝试一下他们的 AutoML 功能,如果您运行“快速入门教程笔记本”(见图 5),就会创建该数据集。

您必须编辑并重新启动之前创建的集群,使其成为使用“Databricks Runtime for ML”的集群,或者创建一个新的集群。

除此之外,实验配置非常简单——选择最大似然问题类型(在撰写本文时是分类或回归)、数据集、预测目标,然后开始。

图 10:数据块—配置 AutoML 实验

AutoML 功能的透明度给我留下了非常深刻的印象。我用过的一些 AutoML 工具可能有点像“黑箱”,因为你不知道具体的步骤,比如数据处理在后台进行。

图 11: Databricks — AutoML 实验进度指示器

Databricks 会自动生成一个数据探索笔记本,阐明准备步骤,如数据分析、缺失值和相关性。我觉得这很棒。

图 12:数据块—数据探索笔记本

随着实验的进行,不同训练运行的细节被添加到表格中,包括使用的模型和特定参数。

图 13:数据块— AutoML 实验运行

一旦实验完成,根据优化目标,表格按产生最佳结果的运行排序——在本例中为 RMSE

与数据探索步骤类似,您也可以深入到代表特定运行的笔记本中。它将展示构建模型的所有步骤,甚至包括使用诸如 SHAP 这样的可解释库来突出变量的重要性。

这是对常见的 AutoML 产品的一个很好的改进,对于那些刚接触 ML 的人来说,这也是一个很好的方法来学习以迭代和交互的方式训练一个模型的步骤。

⚖️初步印象

我从未打算写一篇全面的产品评论😅。但是我想至少说明一下 Databricks 是做什么的,并分享一下我使用它的简短经验!这里有一个总结:

设置:

我不能代表其他的云,但是在 GCP 的安装相对来说没有什么痛苦。从 marketplace 进行一次点击订阅和设置,然后所有其他事情都在 Databricks 帐户管理或工作区 UI 中进行。

易用性:

我发现用户界面干净直观。我可以轻松地执行我想要完成的任务,而不需要参考文档。

它也有一些不错的东西,如 AutoML 实验生成的数据探索和实验运行笔记本。

成本:

对我来说,当我将数据块与 GCP 已经非常强大和集成的数据科学和 ML 用户体验(如 Vertex AI )进行比较时,数据块的成本并没有真正增加。然而,并不是每个人都使用 GCP。

Databricks 不是无服务器,也没有“完全托管”选项,因此与某些云平台上的原生产品相比,准入门槛相对较高。但是我想这是不可知云的代价。

总体:

Databricks 是从数据湖到分析和 ML 的真正统一的体验。我还没有看到任何其他的东西像这样符合所有的条件。入门的成本很高,但它确实为一个古老的问题提供了一个云不可知的解决方案。

鉴于其在该生态系统中的根基,它也非常适合那些想要从更传统的 Spark 环境过渡的人。

希望这篇文章对你有用,如果有用,请分享。我也很想知道你对这篇文章的看法,所以请使用下面的评论或 twitter 联系我们!

📇参考

[1]维基百科,数据仓库,https://en.wikipedia.org/wiki/Data_warehouse#History

📚有用的资源

伦理人工智能到底是什么意思?

原文:https://towardsdatascience.com/what-does-ethical-ai-even-mean-8b98909b42b9?source=collection_archive---------40-----------------------

播客

莎拉·威廉姆斯在 TDS 播客

要选择章节,请访问 Youtube 视频这里

编者按:这一集是我们关于数据科学和机器学习新兴问题的播客系列的一部分由 Jeremie Harris 主持。除了主持播客,Jeremie 还帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:

苹果 | 谷歌 | SPOTIFY | 其他

毫无疑问,人工智能伦理最近受到了很多应有的关注。但是问普通人什么是道德人工智能,你很可能得不到一个茫然的眼神。我认为这在很大程度上是因为每一个数据科学或机器学习问题都有独特的伦理背景,所以很难确定概括一大类人工智能问题的伦理原则。

幸运的是,有研究人员专门关注这个问题——我今天的嘉宾莎拉·威廉姆斯就是其中之一。莎拉是麻省理工学院建筑与规划学院城市规划副教授和城市数据设计实验室主任。她的工作是研究数据科学在城市规划中的应用,并与决策者合作,以道德的方式应用人工智能。通过这个过程,她提炼出了几个具有实际意义和可操作性的通用人工智能伦理原则。

这一集引发了广泛的讨论,从我们的意识形态如何影响我们的数据分析,到政府在试图监管人工智能时面临的挑战。以下是我在对话中最喜欢的一些观点:

  • 有许多方法可以分析数据集、训练模型和解释任何数据项目的结果。因此,一个给定的数据集可以很容易地用于论证相互不相容的结论——这就为分析师、数据科学家或模型构建者的激励和先验信念留下了很大的空间,以确定对该数据的哪些解释是有利的,并最终采取行动。
  • 这些激励和信念可以采取不同的形式,并由数据科学家自身的意识形态观点和经验形成。在这种背景下,我们讨论了两个不同但相关的问题:第一,科技领域的多样性问题(从种族和性别多样性的角度来看),第二,意识形态多样性问题(科技公司中进步派和保守派的不平衡)。
  • 政府目前通过对当天的重大问题做出反应来监管人工智能,但随着人工智能的进步步伐不断加快,这种策略似乎不太可能奏效。相反,预期监管可能是必要的,但这将要求政府变得更懂数据,更了解机器学习和人工智能的前沿发展。

你可以在 Twitter 上关注莎拉,或者在 Twitter 上关注我

播客中引用的链接:

章节:

  • 0:00 介绍
  • 1:16 思域数据设计实验室工作
  • 3:27 与决策者的互动
  • 7:22 拦截搜身项目
  • 17:06 对城市数据分析感兴趣
  • 18:25 算法偏差
  • 21:41 现场多样性
  • 23:00 政治思想
  • 28:00 变化的速度
  • 34:29 隐私问题
  • 42:03 互联网上的私人垄断
  • 44:32 总结

请查看下面的文字记录:

Jeremie (00:00):
欢迎大家回来。我叫 Jeremie,这是“走向数据科学”播客。现在,毫无疑问,人工智能伦理最近受到了很多应有的关注。但是如果你问普通人人工智能伦理到底意味着什么,你很可能不会得到一个茫然的眼神。现在,我实际上认为这在很大程度上是因为每个数据科学或机器学习问题都有独特的伦理背景。因此,很难确定能够概括更广泛的人工智能问题的伦理原则。

Jeremie (00:26):
幸运的是,现在有研究人员专门研究这个问题,我今天的嘉宾莎拉·威廉姆斯就是其中之一。莎拉是麻省理工学院建筑与规划学院城市规划副教授和城市数据设计实验室主任。她的工作是研究数据科学在城市规划中的应用,并与政策制定者合作,以道德的方式应用人工智能。

Jeremie (00:48):
现在,通过这一过程,她提炼出了几个可概括的伦理原则,这些原则在人工智能的背景下具有实际和可操作的意义。所以,这一集我们将会谈到这一点。我们还将对一切进行广泛的讨论,从我们的意识形态如何影响我们的数据分析,到政府在试图监管人工智能时面临的挑战。我真的很喜欢这次谈话,希望你也一样。好的,莎拉,非常感谢你参加我的播客。

莎拉(01:13):
是的。非常感谢邀请我。来到这里我真的很兴奋。

Jeremie (01:16):
我认为你正在一个服务水平低下的领域工作,这是一个数据科学领域的人们不太关心的领域,但它也是我们生活方式的基础。这是一个政府政策制定面临困难的领域,它迫使我们比其他人更直接地面对人工智能伦理问题。这就是城市规划的理念。你现在在麻省理工学院的城市数据设计实验室。首先,我想了解一下您在那里的日常工作,以及它与数据和数据科学的关系。

莎拉(01:51):
城市数据设计实验室的本质是思考我们如何利用数据来改变政策。我们做这项工作的主要方式之一是通过数据可视化和交流数据的洞察力。但为了做到这一点,显然我们必须进行数据分析。我们还建立了团队,与政府、政策制定者、社区利益相关者合作,以真正确定我们正在寻求答案的问题。做定量分析,然后把它公之于众。

Sarah (02:35):
我认为这可能是与数据科学领域其他学者略有不同的一点,即并非所有类型的分析都适用于所有人。为了真正对数据采取行动,我们需要让数据更容易获取并传达给广大公众,如新闻和媒体,以及社区成员和不同的政策团体,这些人正在做出政策决定,以便他们可以采取行动。

耶雷米(03:05):
是啊。我发现这本身就是一个迷人的想法,而且我认为这是在翻译中迷失的东西,因为这种专注于机器学习,工程,缩放,强大的人工智能系统,所有类型的技术细节。人们有时会忘记,数据科学最终必须被应用才有价值。这涉及到一个沟通的部分,就像没有它,你最终真正在做什么?

Jeremie (03:27):
在某种意义上,这让我想到了你在书中讨论的一个主题,顺便提一下,如果有人感兴趣,这本书叫做《数据行动:利用数据造福公众》。实际上,这是一项非常有趣的工作,涉及我们今天将要深入探讨的一大堆主题。但其中一个主题是,你用来看待数据的视角,做分析的人的动机通常会影响到结果,结果的建议,以及结果的洞察力。你能就此谈一点吗,然后谈谈这如何影响你与政策制定者的互动?比方说,你如何确保给那些决策者一个合理的、平衡的观点?

莎拉(04:10):
超级棒的问题。我很高兴你问了,对吧?我的意思是,我们经常把数据等同于真理或知识。这是事实,我们怎么可能有任何偏见呢?但是,当然,数据是一种工具,就像笔在纸上或颜料在画布上一样,它确实代表了有意或无意使用它的人的目标。

莎拉(04:33):
我的意思是,它对我们有很大的说服力,人们可能会将数据集推到某个特定的区域,以获得他们想要的结果。所以,当我的学生在看数据分析时,我总是告诉他们的一件事是,询问谁制作了这些数据,出于什么目的,对吗?那么,他们创建这种特定分析的目标是什么呢?他们有可能以某种方式从中受益吗?

莎拉(05:11):
数据很复杂。我们用事实创造它,当我们看到图表时,我们几乎立刻就相信了它。所以,就像,也许更多地审问它。然后我告诉数据科学家的一部分是询问你自己的目标,对吗?你可能没有意识到你正在试图做什么来说服人们,因为当你把你的算法放在一起时,你会带着它,这对许多人工智能模型来说是真的,它们充满了我们所有的偏见。因此,要真正地询问这些偏见,以确定它们可能会产生什么样的危害。

耶雷米(05:52):
是啊。很有意思。像数据科学这样的任何类型的高维问题中的一个隐含问题是过度拟合是一个问题。你有这么多的数据,我想,我不知道这是不是马克·吐温说的,但像你这样的人可以用统计数据证明一切,除了事实。差不多就是这样。

莎拉(06:11):
我喜欢这句话是马克·吐温说的。

Jeremie (06:16):
我肯定我在某种程度上破坏了这一点,但你有所有这些虚假的相关性,这是一个层面。这就像一个事实,如果你仔细观察,你会发现鞋带的价格与过去 10 年或类似的时间里天空中的云量相关。但是还有一个单独的问题,如果你打算做一个特定的案例,你实际上有效地 P-hack。我的意思是,这是你所描述的,还是在更广泛的学术界类似于 P-hacking 的东西?

莎拉(06:47):
是的。我的意思是,当然你可以添加尽可能多的变量,可以得到你想要的回归分析,所以真的要质疑。但我也认为你提问的方式也可能会无意中造成伤害,或者你应用数据的方式。我只是在想,同一个数据集可以有两种不同的用途,甚至是两种不同的目的。

莎拉(07:22):
我在想我们在书中谈到的一个项目,即查看 stop 和 frisk 数据。最终,纽约市警察局公布了拦截搜身数据,这是一份公开记录,美国公民自由联盟对其进行了分析,发现警方确实过度压制了非裔美国人和西班牙裔美国人。因此,我们能够对此进行数据可视化,以证明该政策在种族貌相方面存在严重问题。

莎拉(08:07):
但是在警察局的另一边,同样的数据集被用于种族貌相,对吗?因此,他们使用这些数据和分析来确定要去的区域,进行更多的拦截和搜查,在美国公民自由联盟进行这些数据可视化后,这在美国被视为非法搜查和扣押。所以,我认为这也是你使用数据集或进行分析的角度?对吗?

莎拉(08:36):
所以,一方面,警方利用它来思考针对特定社区的策略。另一方面,美国公民自由联盟将其颠倒过来,并将其作为揭露种族主义行为的一种方式。所以,这只是考虑做分析的人的目标。

耶雷米(08:59):
在你自己看来,你是如何分析出其中的相关因果关系的?例如,我想,这是这个领域的一个常规辩论。有些人会说,“嗯,这些社区因为他们的种族,或者他们的肤色,或者他们的人口特征而成为目标。”有人说,“那里的犯罪率更高。这就是为什么你需要更多的警力。这就是为什么会发生这种情况。”所以你基本上有一个反馈回路。我并不是说反馈循环是可取的,但这至少是这方面的论点。你如何将这两者分开,并在上下文中寻找原因和结果,而不是没有关联?

萨拉(09:34):
是的,我的意思是,我认为这项政策明确针对少数族裔社区,是的,也许这些社区的犯罪率更高。但事实是,他们有特定的目标…也许我要退一步说,我认为警方数据的一个特别之处是,他们经常去有更多犯罪的地方,但他们没有考虑它背后的系统性问题,例如可能缺乏职业培训计划,或更好的教育系统,或更好的社会服务。

萨拉(10:20):
所以,我也认为,当我们查看这些数据集时,思考为什么这些社区可能有更多的犯罪也是一件重要的事情。所以,我发现使用警方数据来说,“哦,我们有一个热点。现在,让我们去那里,并把更多的警察,“有问题,因为它实际上并没有解决问题。更确切地说,问题是许多社区持续的贫困导致了这些犯罪的增加。

耶雷米(10:52):
这很有趣。这就好像有一个单独的步骤,好的,我们有这个可视化,它似乎邀请我们跳到一个特定的结论。但是还有一个额外的步骤,几乎是决策说,好吧,相关性不一定是因果关系。这里可能会有一个更有趣的故事。

撒拉(11:08):
正是。

耶雷米(11:09):
让我们看看。是啊。有意思。

撒拉(11:12):
对。我们不经常讨论因果关系,对吧?就像我们说的高犯罪率,所以去那个社区。但实际上是什么导致了那些街区的高犯罪率却很少被提及。

耶雷米(11:26):
所以,我对人类的失败模式很感兴趣,这种模式让我们看到我们的外部群体以非理性的方式思考。举个例子,在这种特殊情况下,对吗?很明显,有一群人会说,“哦,那里的犯罪率很高。我要进去把它踩出来。”

耶雷米(11:49):
然后另一组人可能会看着它说:“哦,好吧。这是你不怀好意的表现。”所以,很有趣的是,在我看来,就像你在书中描述的那样,镜片非常重要。你可以看着同样的过程,同样的数据,然后说,“哦,这是一个完全不同的故事。”

撒拉(12:11):
对。绝对的。是啊。我的意思是,这就是数据分析的棘手之处,也是为什么我认为随着时间的推移,它被用于好的和坏的目的,更简单地说。所以,这是我在这本书的最后,谈论的七个行动数据的原则之一。第一件事是真正质问你做分析的原因,以及它是否可能对任何人造成伤害。

莎拉(12:42):
所以,我认为对于警察部门来说,我真的希望他们能考虑一下以这种方式使用数据会有哪些意想不到的后果。我认为,不幸的是,数据驱动的警务现在在我们的社会中是如此根深蒂固,以至于很难真正改变这种想法。但我认为,最近夏天的对话确实有助于努力突出这一点。

萨拉(13:15):
所以,这些关于解除警察经费的对话是在谈论将警察经费转移到社会服务中,对吗?这是同一个论点。看看系统的问题,而不是我的…如果我们能够思考如何帮助人们摆脱贫困,我们可能真的能够做一些事情。我真的被一些事情所鼓舞。我的意思是,我不认为我们有必要解除对警察的资助,但我认为应该把钱分配到这些系统性的原因上,而不是仅仅派警察去这些相同的社区。

萨拉(13:53):
我们一遍又一遍地做同样的事情,这不就是疯狂的定义吗?所以让我们想一个新的系统。我也喜欢这些数据如何把你带到那里,因为它可以告诉你那些社区需要帮助,就像它告诉你它们有高犯罪率一样。

耶雷米(14:10):
是啊。令人着迷的是,当我们看到一个可视化或一个情节时,它几乎就像是我们进行更深层次分析的责任的一部分被抽象掉了,我们看着它,我们就像,“哦,有…”回到同一个例子,“有一个热点”。因此,让我尽我所能画出最直接的因果模式或故事的直线。”

耶雷米(14:35):
我想象这种情况正在各地发生。我是说,我在我的公司里亲眼见过,对吧?我们会看到一些使用模式,就像,“哦,不。人们不注册或一些可怕的事情正在发生。”你妄下结论,结果发现你完全错了。你如何建议人们开始审问这个思维过程?我的意思是,有没有具体的步骤可以让人们后退一步,并努力确保他们正在这样做?

撒拉(14:58):
是啊。我很高兴你问了这个问题。这也是我在这本小册子中谈到的原因之一,将团队聚集在一起,实事求是地对待你的结果,而不是实事求是地对待你的结果,做实事求是地对待你的结果。我的意思是,实际上看到你所说的是真的。但我认为社区成员、政策专家或该领域的利益相关者会关注你的分析是否真实。我几乎总是发现,当我第一次做分析时,当我把它带给一群人时,他们会说,不,不,不,不,你没有看到它的这个方面。这是这样的。

莎拉(15:40):
所以,我认为这种编辑过程非常重要,特别是在政策领域,因为总有一个盲点,我们可能会忽略,而这个盲点非常有帮助。我认为在过去,在 50 年代和 60 年代,当我们在城市规划中大量使用数据时,我们确实只是做直线,某种程度上,穿过城市的最有效的方法是建造穿过这个社区的高速公路。这是直线,这是数据告诉我们的。我们没有考虑到所有其他种类的,比如说,副作用。如果我们把这些分析带到社区,询问他们对它的看法,我想我们可能会得到,比方说,一个更微妙的高速公路系统。

耶雷米(16:32):
是的,不,我相信在很多领域都是如此。当我们定义问题时,在优化方面留下的东西太多了,这很可怕,我想这是关于狭义地定义问题,或者至少有,这就像用一个太有限的功能集来表示世界。我们说这就是问题所在。这些是重要的特征,不管我的模型怎么说,这是告诉你自己,“好吧,我有一个损失函数,”或者,“我有一个优化函数”的能力。只要这个数字上升,我就很高兴。如果不行,我就不行,这就是故事的结尾。”有点冒险的生意。

莎拉(17:06):
是的。我的意思是,这让我感到害怕,因为有这么多伟大的人对城市数据分析或政策数据分析感兴趣,但可能不精通城市问题或其他类型的政策问题。所以,他们可能会想出这个优化问题的答案,却没有意识到有人已经在过去做过了,结果出了岔子。

莎拉(17:33):
所以,这也是为什么我认为数据科学家总是与该领域真正的专家配对,帮助他们编辑和验证他们的结果是如此重要。但是,是的,我们不希望历史重演。

耶雷米(17:54):
现在,在分类账的另一面,我想我看到了这个有趣的讨论。事实上,我在 Twitter 上看到过 OpenAI 和 OpenAI 政策团队之间的对话。我想阿曼达·阿斯克尔最近在推特上提到了这件事。我认为这是一个有趣的观点。她强调了这样一个事实,即也有一种趋势,即找到一个反对特定系统的道德部署的论点,并利用该论点的存在来含蓄地完全驳回该部署。

耶雷米(18:25):
所以先验地说,“好吧,这个算法有某种形式的偏见,”或者“不可避免地,所有算法在伦理上都有某种缺陷,因此我们不应该部署它。”你认为平衡日志的方法有哪些?你如何决定,道德上的负面影响是否大于正面影响?显然这是一个复杂的问题,但是你会如何开始考虑它呢?

萨拉(18:51):
是的,我的意思是,我认为这是一个很好的问题。自从蒂姆尼特·格布鲁被谷歌解雇后,我一直在思考这个问题。我认为谷歌内部有一个道德团队真正酷的地方是真正找出你的偏见所在,并纠正它们,或试图纠正它们,或解决它们,对吗?而不是把它们扫在地毯下,让某人进去内部调查你的工作道德,这只会让你成为一个更好的公司,因为你在未来会做出更好的算法。

萨拉(19:35):
所以,你要朝着那个目标努力。我认为数据分析是一个迭代的过程。我们从来没有第一次做对。对吗?这是我们的基础。所以,我相信,我们可以在这些经验的基础上创造出更有道德的人工智能。所以,我真的很惊讶,很明显,那里有很多政治,我肯定还有其他事情。但是我认为脸书和谷歌会做出更好的产品,如果他们有人质疑他们的道德的话,因为这样他们就可以回头让它变得更道德。

莎拉(20:18):
所以,我想这是一种冗长的方式来说,我认为我们可以朝着它努力,但我们应该不断地询问我们的工作。

耶雷米(20:31):
你是如何看待那种,我想你在书中提到了它,你使用了意识形态的语言,这很有趣。所以,我们数据分析的意识形态,我认为这是一个迷人且完全正确的看待它的方式。因为那真的是…我们都被我们的意识形态所控制。我们都有一个自己的版本,我们进入时是无意识的,不是分析性的。这就是群体思维等等。

耶雷米(20:54):
你认为像谷歌这样的公司是否存在持续的问题。你有一定数量的人以某种方式思考这个问题,我的意思是,特别是人工智能伦理。我的意思是,我认为公平地说,这是一个领域,例如,有不成比例的人会从亲技术的角度思考。就像,你会叫它什么?就像技术加速主义者,可能更,比如说,更面向社会之类的。

耶雷米(21:27):
你认为在这个领域本身的层面上有没有问题,在处理这些问题的方式上,它需要考虑更多的意识形态多样性?如果是的话,我的意思是,据你所知,有没有积极的措施朝着这个方向发展?

撒拉(21:41):
我的意思是,完全正确。我想你说对了。没错。这不仅仅是质疑算法的道德,而是确保在这个领域有不同的人在工作。特别是,确保少数群体 BIPOC 小组在这个领域开展工作,以带来…因为我确实认为技术领域一直被一种意识形态观点所主导,这种观点可能对数据中存在的所有不同的人并不总是那么敏感,对吗?因为所有的数据都代表人。当它分析一类群体时。

莎拉(22:32):
所以,这就是为什么像黑人生活数据这样的组织开始出现,他们正在想办法确保我们在这个领域的多样性。超级重要。我认为这也有助于我们质疑算法,但创造和产生从一个非常不同的角度看待数据集的新方法,也许也是从那些边缘人的角度。

耶雷米(23:00):
你也从政治意识形态的角度来考虑这个问题吗?我的意思是,以硅谷为例,从历史上来看,这是一种常见的抱怨,你会在很多场合听到,你怎么称呼它?国会的科技听证会。对吗?所以,典型的共和党参议员或众议员会说,“嘿,脸书缺少保守派。”在脸书工作的人中,左翼人士和思想更加自由的人占了压倒性的多数。

耶雷米(23:30):
这是一个不同的轴,对不对?我们有这样的想法,是的,一个单一种族或一种种族的大多数,一种在这些公司工作的自然人。然后我们有意识形态的差异,硅谷的一个很大的差异是,如果你看看民意调查,压倒性地倾向于一个方向而不是另一个方向。你认为这也是值得解决的问题吗?还是你认为这是另一个问题的一部分?

萨拉(24:02):
嗯,我是说,我认为这是个好问题。我认为,至少在政治领域,我们已经看到保守派和共和党在选举中以同样的方式平等使用数据。我的意思是,剑桥分析丑闻就是一个很好的例子,就像保守派真的在部署数据。有些人可能会说剑桥分析与脸书有太多联系,他们真的在为那个特工工作。当然,马克·扎克伯格会说,“嗯,这些是脸书以外的人,他们基本上是在发展,保守的广告,保守的目标。

萨拉(24:56):
所以,我想说我不确定我是否完全同意这是一个完全自由的领域。或者更好的说法是,我绝对认为他们为我们两党的目标而工作。有些人可能会说,他们更倾向于保守派,而不是更倾向于自由派。

耶雷米(25:26):
是的。我的意思是,这是一个有趣而复杂的领域。我对这两个职位之间的映射很感兴趣,人们会说,“嗯,这归结于组成组织的人。”如果这些人有特定的观点,不管是因为肤色、性别还是政治意识形态。我对这些不同的轴之间的区别很感兴趣,我们应该注意和谨慎,显然这是一个复杂的问题。

撒拉(25:55):
是啊。我的意思是,这很复杂,因为我认为在一天结束时,脸书,谷歌,他们的上帝是钱,对不对?赚钱。

耶雷米(26:07):
优化函数。

莎拉(26:09):
他们有钱,对吧?所以,我认为他们会把自己卖给出价最高的人,不管他们现在是自由派。但我同意,这些公司里可能有更多的自由主义者。但同样,我认为他们经常朝着其他目标努力,而这些目标可能不在此列。我想说,共和党人系统地使用数据已经有很长时间了。甚至我会说,自从第一次人口普查在 70 年代出来,他们看到了这个数字普查。

萨拉(26:44):
实际上有一个叫托马斯·霍弗勒的人,他基本上重新划分了美国的大部分地区,并且从早年开始一直是共和党重新划分选区的负责人,他系统地使用数据来推动国会选区向共和党多数派靠拢。他经常被称为不公正选区划分的米开朗基罗,因为他非常擅长移动这些数据集。但是,人们经常谈论奥巴马的当选归因于他非常热衷于使用数据分析来瞄准可能没有投票的新人口。所以,我的意思是,你的问题更多的是,我在思考我们使用的数据的意识形态观点。但是

耶雷米(27:40):
我认为你说的也很有道理。这是一种神奇的力量,它可以进入任何…就像我们必须小心使用它一样。是啊,实际上与此有关。现在,我确实想问一下你的互动,事实上,和政策制定者的互动,因为我猜你已经和他们中的一些人谈过这些问题,具体的道德问题。

耶雷米(28:02):
所以,我有一个问题。我们谈论政策。我们谈论政府。我不会把政策和政府联系在一起的词是速度。我不倾向于考虑快速,快速的反应。在这样一个世界里,我们看到 GPT 3 号即将发射,GPT 4 号也即将发射,谁知道其他地区接下来会发生什么?随着时间的推移,我们越来越多地拥有这些能力。变化的步伐正在加快。我想,在政策领域,你对响应时间有什么看法?你的体验是不是速度确实比较慢?我错了吗?我很可能是。

萨拉(28:37):
是的,不,政策绝对是缓慢的,因为它会削弱不同的派别,让人们加入你的团队。仅仅是向人们推销你的特殊观点或想法就有很多工作要做。所以,我认为政策工作总是需要很长时间,我认为这是因为需要建立这种关系。

萨拉(29:17):
我认为人们也在谈论政府内部进行这些数据分析的速度。我认为,特别是彭博,我知道他在纽约市真的花了很多…他是一家数据公司,所以当他成为市长时,他真的想创建这个数据分析团队。他非常成功地帮助部署和使用数据来帮助政府的许多领域,但仍然经历了这种基于政策和政治的障碍,这种障碍将永远存在。

莎拉(30:00):
我认为数据分析只是其中的一种工具,对吗?我们可以利用它。它真的有助于让我们相信某些策略和想法。它可以说是政策分析师的工具。我希望我正在做的是,我是麻省理工学院城市科学项目的负责人,这是计算机科学和城市规划的结合,是教规划者和政策专家做他们自己的数据分析,并且能够…如果我们有更多的政策制定者可以自己做这些,也许我们可以加快一些进程。但是我认为不管这些,比如说,建立关系的东西会存在。

耶雷米(30:46):
这很有趣。这说明了问题的架构,让政府决策者真正开始为自己利用这些工具,而不是,我猜,让外部顾问进来告诉他们,“嘿,我看了数据,这是图表。”希望这有助于他们在内部证明这一点。这就是他们有这种灵活性的想法吗?

莎拉(31:05):
是的。他们能做到,甚至能读懂顾问在做什么,对吗?因为顾问有时并不关心选民,或者顾问并不…所以,学会做数据分析,也许他们不做,但他们知道如何更快地评论这项工作,并询问它的准确性。

萨拉(31:29):
但我看到,即使在过去的 10 年里,许多城市规划者也知道如何使用绘图软件和计算机绘图软件,这些软件过去需要交给技术人员,现在他们可以非常快速地绘制这种社会人口统计地图。即使在 COVID 的领导下,我们也看到了很多工作在进行,看看哪些社区被边缘化了,哪些没有。许多工作正在公共卫生部门内部进行,这些部门现在也有统计专家。

耶雷米(32:01):
是的。这似乎是一件非常重要的事情,让政府在这方面更加灵活和宽松。我想这也是一个挑战,首先要接近他们,让他们相信,“嘿,这是有价值的。”因为你面临冷启动问题,不是吗?我的意思是,你去找政府,你说,“嘿,你有一堆数据。它可以发挥杠杆作用,用于一系列伟大的事情。”但是政府,我想,可以理解,会说,“哇,哇,别碰我们的数据。之前你需要向我展示价值。”但是你之前不能向他们展示价值,因为你没有数据。当你开始从事这些事情时,这是一个循环吗?

撒拉(32:35):
是啊。你所说的有趣之处在于,我们经常假设政府拥有大量数据,而实际上,通常他们并没有。他们试图从谷歌、脸书和推特等私人公司获取信息。他们需要购买的其他数据集就像房地产投资公司。所以,我认为政府很乐意在数据分析方面做这件事,然后想办法与一些私人组织合作,以便能够进行他们想要的分析。

莎拉(33:10):
想想房地产的价值。这些数据集是由私人公司创建的,但对于理解这座城市的动态和经济动态性质非常有用。所以,我认为城市很难支付这样的数据集。为什么我不说,并不是所有的部门都是数据贫乏的,像警察局有大量的钱来购买这种数据,因为我们为此分配了大量的资源。

莎拉(33:46):
但有趣的是,他们并没有与规划部门分享这些信息。不管怎样,我们又回到了政治上。对吗?但我还想说,我认为另一个原因是,比方说,城市无法启动这些分析是因为他们没有内部人员来推动这些工作。我确实看到,我们开始看到城市更多地尝试这种方式。彭博是其中之一,费城和波斯顿有一些小团队,他们试图在内部进行真正的实验,并建立这种过程。但这是我们需要建立的东西。

耶雷米(34:29):
我想考虑到城市和政府也有访问非常隐私的数据的潜在特权,隐私在这里成为一个真正的问题。在一个城市、州和国家最终会越来越多地部署这种东西的世界里,你如何看待隐私的演变?

撒拉(34:46):
是啊。再说一次,关于隐私问题,我认为政府确实有很多我们的私人数据。我认为他们实际上有很多,比如说,法律来帮助维护隐私。我认为我们没有相关法律的地方在于这些私营公司拥有的数据。我们签字放弃我们所有的隐私,然后他们可以利用这些数据做很多事情。

萨拉(35:12):
我想大概一年前在《纽约时报》上,他们有一篇关于你可以买到的所有手机数据的文章。你甚至可以知道人们在白宫或五角大楼的什么地方。这是一个很棒的故事,因为你可以从第三方经销商那里买到这些数据。他们没有给我们你的观点本身,或者这是约翰或杰里米。但是你可以很好地跟踪人们。

萨拉(35:42):
这些数据根本没有受到监管。目前还没有隐私法。我认为这是我们没有注意到的巨大差距。对吗?我们总是谈论什么是政府…政府有很多法律,所以他们经常从私营公司购买这些数据集。而且它有严重的隐私问题。

萨拉(36:09):
所以,我认为另一种解释是,我们要求私营公司进行自我监管,但这样做并不符合他们的最佳利益。对吗?当他们的业务建立在我们所有的数据之上时,他们为什么要这样做。另一方面,政府应该进行监管,但他们没有这样做,因为他们可以购买数据,不受监管对他们有利。

萨拉(36:36):
他们还说这推动了商业发展。因此,在这种僵局中,我们对我们的隐私有一些严重的担忧,因为这些团体中没有一个致力于思考这个问题。所以,这就是我真正认为数据中介的角色发挥作用的地方。我认为我们需要有一个团体,组织来帮助制定更多的目标和隐私标准,为隐私法游说。

莎拉(37:08):
以及如何将私人数据用于公共利益。如果政府确实想使用这种非常详细的点,这个数据集,他们能把它聚集到一个你不能识别某人的点,然后它可以更有用吗?因此,我认为这是我们未来将会看到的东西,这种私人组织和政府之间的中介的想法有助于维护数据集的隐私。

耶雷米(37:39):
这是一个非常有意思的想法,尤其是在 2000 年,我不知道我是什么时候加入脸书的,我认为隐私问题会越来越多。2008 年或 2009 年,我泄露了一大堆我的私人信息。当然,2008 年,2009 年大概是 AlexNet 出来的三年前。突然间,我们有了可靠的可以识别人脸的计算机视觉。

耶雷米(38:04):
在我知道机器学习可以从我的数据中提取如此多的见解之前,我就把我的数据给了脸书。所以,这甚至不仅仅是我同意放弃我的数据,这是我含蓄地同意脸书或其他任何人,做任何技术和时间允许的数据。这似乎是普通消费者不喜欢的事情,政府必须更有远见,成为某种中介。在这种情况下,它也开始变得有意义了。

莎拉(38:34):
是的,绝对是。我的意思是,我认为还有一个问题是,技术的发展速度往往超过政府的速度。毫无疑问,关于脸书的听证会是国会议员不了解其运作的基本方式的一个例子。所以,我认为这也是这些中介变得重要的地方。他们正在教育我们的政策制定者他们需要解决的问题。试着以你所说的方式更有前瞻性。

萨拉(39:08):
但这也是为什么我认为当我们处理数据时,我们必须提出自己的道德实践标准,因为在这段时间里,政府不会保护我们,而公司正在尝试新事物。因此,我们需要思考超出我们自身用途的道德规范。因为这是前所未有的新事物。对吗?

耶雷米(39:36):
对于像这样的应用,我提到了面部识别的事情。我的意思是,感觉我们的机器学习能力一直呈指数增长,我觉得我们应该期待他们这样做。我们可能会到达这样一个点,即技术在公司内部开发和最终由政府监管之间的时间差是可能会发生非常糟糕的事情的时间。

耶雷米(40:03):
你认为我们会走向这样一个世界吗?在这个世界里,政府不得不,比如说,制定前瞻性的法规,甚至强制对计算机基础设施进行瓶颈控制,比如让 KYC 了解你的客户之类的法规,强制 AWS 说,“好吧,你想用我们的服务器做什么?那是什么来着?你想用它们做什么?”在他们允许之前?你认为这是我们的长期目标吗?

萨拉(40:31):
是的,我的意思是,我看不到这一点,因为我看到有人说这会阻碍创新。我确实认为我们需要制定更多的,比如说,规章制度,就像我们对,比如说,电力所做的那样。因此,它的使用方式、分发方式或数据分发方式。我肯定地认为,有一套特定的规则需要沿着这些路线制定到位。

莎拉(41:13):
也因为我认为政府绝对必须这样做,因为现在私营公司比他们拥有更多的数据。众所周知,数据就是力量。所以,在某种程度上,这些机构正在成为许多领域的管理机构,对吗?因为他们树立了实践的标准。制定实践标准的不是政府。所以,我确实认为这种,这可能是你想说的,就像,制定一些实践标准,政府说要在这个国家运作,你至少需要遵守这些道德标准。我认为这对于确保公众安全至关重要。

莎拉(42:03):
真的是因为当私营公司真的在运营一切的时候,我不知道你是否…当谷歌宕机发生的时候,我这周在网上。我不知道你是否在线。

耶雷米(42:17):
是的,我想知道是不是……所以,我用超人作为我的电子邮件,很抱歉让大家听到。我讨厌成为另一个超人。但是我的超人倒下了。我想弄清楚到底发生了什么。然后我去了 Gmail,我说,“哦,Gmail 坏了。哦,我的上帝。”后来就严重了。

撒拉(42:33):
对吗?我的意思是,他们运行我们的基础设施,这就像这些垄断,这真的很可怕。我在非洲做了很多工作,最疯狂的是,那天早上我们在内罗毕接到一个电话。我们实际上正在内罗毕建设基于社区的无线基础设施。但是我们整个团队都被封锁了,因为谷歌在非洲操作许多交换机。

撒拉(42:57):
因此,欧洲大陆的许多地方陷入黑暗。我的意思是,我们也陷入黑暗,但它让你意识到它们是我们日常基础设施的一部分,是政府过去运营的东西。我的意思是,政府从来没有运行互联网,但同样的方式,我们有其他类似的道路等等。这就是为什么我觉得它在那方面很像电。这是公益事业。我们每天都依赖电力。我们依赖互联网。这是一项公益事业。我们需要它来维持我们目前的生活。

莎拉(43:37):
所以,我认为采取更多的措施来保护我们是绝对重要的。

耶雷米(43:49):
好吧,希望我们能解决这些问题。我相信,当它到来的时候,你也会成为这一努力的重要组成部分。

撒拉(43:53):
是啊。我的意思是,我认为这就是我们现在看到这些垄断案件出现的原因。对吗?

耶雷米(44:00):
耶。这也很有趣,因为现在有很多关于什么是垄断的问题?当你看着亚马逊,他们会说,“哦,我们在所有这些不同的领域只有 40%的市场份额。”但是你看起来像,是的,它是所有这些不同的区域。我的意思是,你可以在一个地区降价到另一个地区。因此,无论如何,你必须重新定义垄断的潜在含义。

撒拉(44:23):
是的。是啊,基本上。

耶雷米(44:23):
好的,谢谢你全面的谈话。我想没有什么话题是我们没有触及的。如果有人对你们感兴趣,我想再次推荐这本书,顺便说一下,各位,这是《数据行动:利用数据造福公众》。这是这本书的名字。但是你能分享你的推特账号或者其他网站吗?

莎拉(44:43):
是的,当然。你可以在 data see 找到我,所以 data see,我的首字母。但也是缝纫吧,我猜。看看 civicdatadesignlab@mit.edu 的市民数据设计实验室网站。

耶雷米(44:59):
真棒。莎拉,非常感谢。真的很感激。

萨拉(45:03):
是啊。非常感谢邀请我。很高兴和你聊天。

公平是什么意思?衡量和理解公平

原文:https://towardsdatascience.com/what-does-it-mean-to-be-fair-measuring-and-understanding-fairness-4ab873245c4c?source=collection_archive---------27-----------------------

值得信赖的人工智能

让我们将公平从抽象的目标转化为机器学习模型的现实。

机器学习在面部识别和在线广告等应用中无处不在——然而,这些 ML 模型中的许多都显示出无意和有害的种族性别偏见的明显证据。因此,机器学习系统中的公平性是当今的一个热门话题。获得人工智能效率优势的企业也必须特别小心和专业,以确保他们的模型是准确、可信和公平的。

廷杰律师事务所Unsplash 上拍摄的照片

很难准确定义“公平”的含义。从根本上来说,公平需要对公平平衡的渴望。由此,自然会出现这样的问题:我们要在谁之间实现公平?公平是指群体之间总体上的平等结果吗?还是个体之间?我们如何在数学上将“公平”定义为一个量?

在实现现实世界模型的公平性时,我们确定了三个关键原则:

  1. 重要的是要考虑个人和群体的公平观念。
  2. 公平不仅仅是一个衡量标准。公平是(a)的工作流程识别偏差(两个或两个以上群体完全不同的结果);(b)执行根本原因分析以确定差异是否合理;以及(c)采用有针对性的缓解策略
  3. 公平性指标不是一刀切的。使用公平指标的分类法,我们可以挑选那些最适合当前特定场景的指标。

在这篇博文中,我们将讨论如何将公平从抽象的目标转化为机器学习模型的现实。

个人和群体的公平观

通常,公平被认为是一个在两个群体之间实施的概念。一个被广泛引用的例子是 ProPublica 对 NorthPointe 公司提供的犯罪风险评估的分析。ProPublica 对 NorthPointe 预测的评论显示,与白种人相比,预测被监禁的人是否会再次犯罪的算法对非洲裔美国人有偏见。该算法错误地将黑人被告标记为未来的惯犯,其错误识别白人被告的比率几乎是白人被告的两倍。白人被告更经常被错误地认定为未来犯罪的风险较低。

这种公平的概念作为群体之间的一个概念,可以进一步阐述,以分析子群体。例如,麻省理工学院的研究人员表明,主要技术提供商的面部识别软件在分析深色皮肤女性的图像时会有明显更高的性别识别错误,这表明了性别和肤色交汇处的子群在模型有效性方面的差异。

群体公平至关重要,但这也只是难题的一部分。回想一下苹果卡的调查,在卡发行后不久,女性声称她们获得了较低的信用额度,甚至被拒绝使用苹果的信用卡,而她们的丈夫(他们与他们混合了资金)却被接受了信用额度,通常是较高的信用额度。在这种情况下,算法的个体公平性受到质疑。在这种情况下,我们希望通过比较各种具有相似特征的男性和女性来衡量批准算法的公平性,而不是看该模型是否在群体层面上存在歧视(女性对男性),而是看它是否专门伤害了具有相似财务特征的个人(在这种情况下是配偶)。这种类型的分析,由 Dwork 等人创造的个体公平性,试图确保相似的个体被模型以相似的方式对待。

苹果卡的情况也是一个例子,公平和人工智能的另一个大挑战,模型可解释性,是不可分割地联系在一起的。不仅财务状况相似的个人似乎有着大相径庭的结果,信用卡的发行者苹果和高盛也无法快速简单地解释算法是如何工作的,为什么它会产生完全不同的结果,以及这些结果是如何证明的。感知到的不公平和无法解释一个模型会产生严重的后果。在开始发行信用卡的短短几个月内,苹果和高盛发现自己受到了金融监管机构的调查。

根本原因分析和明智的缓解措施

假设我们建立了一个信贷决策模型来决定个人是否应该获得贷款。该模型基于不使用任何特定人口统计特征(如性别或种族)的数据进行训练。然而,当事后评估结果时,可以看到该模型发现支持率和种族之间存在轻微的相关性。这是一个不公平的结果吗,因为该模型通过其他变量,如邮政编码或姓氏,来构建种族的代理?或者这个结果是合理的和公平的,因为模型使用了一组合理的特征,并且恰好存在相关性?

重要的是,通过根本原因分析彻底调查任何可能的不公平。利用像 TruEra 这样的人工智能质量解决方案,其中包括公平性分析,模型构建者不再对模型或数据的底层问题视而不见。深入研究这种差异的特征级驱动因素对于确定模型的行为是否合理至关重要。地理数据推动了特定种族人口的高接受率吗?还是模型以合理的方式使用了像收入这样的特征,但恰好收入与种族相关?通过执行根本原因分析,将抽象的公平性指标与模型及其输入数据联系起来,数据科学家或业务主管可以确定模型的决策是否合理,如果不合理,从哪里开始缓解流程。

选择一个组公平性度量

公平是一个敏感的概念。决定用哪种群体公平指标作为模型的基准,就定义了我们所向往的世界。我们是否希望确保男性和女性获得完全平等的机会?还是相反,我们想要确保被模型接受的不合格者的比例在性别上大致相等?这些细微的差别对一个模型的公平性有着巨大的影响,使得度量标准的选择成为一个必要的和有意的行为。

虽然有几十种公平指标的定义在某些情况下可能都是有效的,但出于本文的目的,我们将缩小一点,简要谈谈这些公平指标如何描述不同的理念。

一套内在对立的世界观是所见即所得(所见即所得)和我们都是平等的 (WAE)区别。让我们考虑一下 SAT 分数的情况。所见即所得的世界观假设观察(你的 SAT 分数)反映了完成任务的能力(在学校表现良好),并认为这些分数非常有助于预测大学的成功。然而,WAE 的世界观可能会断言,由于社会原因,SAT 分数存在结构性偏差,平均而言,所有群体都有同等的能力在大学里取得好成绩,即使我们无法通过 SAT 分数观察到这一点。如果你相信所见即所得,那么一个完全准确的模型必然是公平的,因为它将与你手头的标签/观察相匹配。相反,WAE 的信徒会试图确保结果在群体中的平等分布,不管他们观察到的标签是什么,因为在他们看来,准确性并不需要公平。

在 WAE 和 WYSIWYG 之间有一个滑动的尺度,许多度量标准位于这两个对立的公平概念之间。这两个阵营之间有一种天然的紧张关系,因为两者不可能同时得到满足。在现实中,公平指标通常是不相容的。明智的做法是后退一步,而不是盲目地将一个模型与各种公平指标进行对比。对于您的问题,您认为什么目标是“公平”的?哪一个公平指标能够体现这一目标?这是一个有意的、通常也是困难的选择——在考虑端到端公平工作流时,这一点极其重要。

把所有的放在一起

在这篇博文中,我们讨论了创建全面公平工作流以确保更公平的机器学习模型的三个关键点。为建立更好更值得信赖的模型干杯!🍻

Russell Holz 对本文有贡献。

学数据科学到底意味着什么?

原文:https://towardsdatascience.com/what-does-it-really-mean-to-learn-data-science-6a419cc3e699?source=collection_archive---------21-----------------------

你什么时候结束?

本·怀特在 Unsplash 上的照片

2019 年初,我看了一场 TED 演讲,让我对数据科学产生了兴趣。一位教授在谈论他的一个学生,他使用机器学习来生成歌词。

那是我学习旅程的开始。已经两年半了,我几乎每天都在学习新的东西。我一直在学习数据科学,就像世界各地成千上万(甚至更多)的人一样。

但是,学习数据科学到底意味着什么呢?

数据有什么好的?

我们首先需要了解我们可以用数据科学做什么。这肯定会是一个很长的列表,我们需要页面来解释数据科学的范围。

数据科学可以有许多不同的定义,但我最喜欢的一种是数据科学使用数据创造价值。价值的形式可以是改进流程、预测性维护、需求预测、评估 x 射线图像等。

如果我们能够以系统的方式收集数据,数据科学提供了创造价值的潜力。因此,令人惊讶的是,第一个要求是收集数据。

然后呢?

原始数据通常不是最合适的格式,而是经过某种形式的处理。原始数据的大小通常很大。因此,我们需要软件工具来传输和处理它。

所需的工具会根据您希望保存数据的方式和位置而变化。另一个关键的决策点是如何访问存储的数据。

一旦您已经准备好正确有效地维护数据,就该将它转化为价值了。这就是算法和统计发挥作用的地方。

统计学让我们理解和探索数据。从数据中获取有意义的见解,对于创建强大而准确的产品至关重要。

尽管基本概念和原则是相同的,但是将数据科学应用于不同领域的方式可能会有所不同。因此,领域知识是将数据转化为价值的过程中的重要资产。

最后但同样重要的是,如果解释不清楚,你的结果或你创造的价值就不会有影响力。您将需要使用工具来交付结果并演示整个过程。对于这一步,数据可视化工具是很好的资源。

我试图简要解释创建数据产品的典型工作流程中的主要步骤。当然,每一步都有更多的细节,但我只想画一个简单的流程图。

在我看来,学习数据科学意味着能够执行我们刚刚提到的步骤中的任务。根据你工作的公司,你将负责所有这些步骤或其中的一部分。

你需要学习的东西可以分为两组。一个是理论知识,另一个是将理论应用于数据的工具。两者都需要实现解决方案或创建可靠的产品。

每个步骤都使用了软件工具和软件包。你总是有多种选择。例如,Tableau 和 PowerBI 都是常用的数据可视化和报告工具。你不必学所有的,这实际上是不可能的,因为太多了。

那么,学习什么时候结束?

学习数据科学永无止境。这是一个相当连续的过程。就工具和理论而言,数据科学仍在不断发展。

不仅引入了新的工具,而且正在改进现有的工具。因此,不可能跟上所有的改进。然而,你需要密切关注与你的工作相关的问题。否则,很难保持竞争力。

最后的想法

我试着画了一张图来展示学习数据科学涉及的内容。这幅画没有详细描述。就当是低分辨率的照片吧。但是,你知道这意味着什么。

学习数据科学需要时间、努力和奉献。请记住,你将永远需要学习让自己跟上时代。这听起来像是一次彻底的旅行,但绝对有趣。我很高兴自己转行成为了一名数据科学家。

感谢您的阅读。如果您有任何反馈,请告诉我。

成为一名优秀的数据产品负责人需要具备哪些条件?

原文:https://towardsdatascience.com/what-does-it-take-to-be-a-good-data-product-owner-29be14c0fb59?source=collection_archive---------13-----------------------

技术和软技能之间的平衡是关键

约书亚·福布斯在 Unsplash 上的照片

基于数据和分析的新
商业模式和服务有许多不同的途径。利用数据和分析服务赚钱也有不同的方法。很明显,第一小时的
数据科学家正在成为越来越多的“数据业务所有者”。但是,作为一名优秀的数据产品所有者,到底需要具备哪些条件?下面这篇文章可能会给你一些有帮助的见解。

技术和数据架构之间的恰当平衡

数据产品所有者不仅必须认识到并利用数据的价值,还必须对他们处理数据集的业务成功负责。因此,正确选择技术和数据架构在这里起着重要的作用。
这背后的原因是,数据和分析平台的具体设计对性能、可扩展性和用户体验以及运营成本有着决定性的影响。因此,数据产品所有者必须做出重要决策,决定使用何种技术来创建最适合公司特定需求的数据架构。

专家谈到关键和数字

一个好的数据产品所有者永远不会忘记销售和利润的实现。成功的产品经理在整个生命周期中都控制着他们的数字。

卡洛斯·穆扎Unsplash 上拍摄

他们知道何时以及如何应对不利趋势,无论是通过重新培训销售人员、调整价值主张,还是其他与产品相关的措施。因此,当谈到关键和数字时,他们必须是公司内部的专家[1]。

最佳沟通

一个好的(数据)产品所有者知道如何与他们各自的目标群体沟通。无论是不同的公司部门,甚至是管理层:产品负责人的重要角色是知道需求是什么,以及如何为他们提供合适的解决方案。此外,数据产品所有者必须创建简单易懂的数据计划和策略,这些计划和策略结构清晰,没有任何误解。

解决冲突和寻求妥协

数据产品所有者还必须具备解决冲突和寻求妥协的能力,因为不合理的利益相关者和困难的需求或敏感且不愿意工作的团队等问题每天都会发生。因此,拥有解决分歧的能力,并作为一个调停者或谈判者,将有助于消除利益相关者和开发团队成员之间的敌意。在这种情况下,妥协的技巧也发挥了作用,因为大多数冲突可以通过在相关各方之间找到一个中间立场来解决[2]。

结论

数据产品所有者在公司中扮演着重要的角色,因为他们负责正确处理数据集和由此产生的行动过程。因此,为了取得成功,他们必须在技术和软技能之间取得良好的平衡。除了了解公司的每个人,一个好的数据产品负责人在与公司不同部门和管理层沟通时,还必须对自己的外表有信心。

资料来源和进一步阅读

[1]伊恩·伦恩(Ian Lunn),理想产品经理——10 个特征(2021)

[2]克拉拉·德克尔(2017)

成为亿万富翁需要什么?

原文:https://towardsdatascience.com/what-does-it-take-to-become-a-billionaire-d875be838781?source=collection_archive---------25-----------------------

这里有一个关于如何成为亿万富翁的分析解决方案。

简介:

看了标题你可能会兴奋。“亿万富翁”——多么花哨的词,对吧?

我有什么资格写这个话题呢?我是亿万富翁之一吗?—显然,不是!!。但我希望我是一个。

我写这篇文章是为了给你一些成为亿万富翁的财务建议或忠告吗?没有。

那么,我是谁?我们在这里要做什么?——我是福布斯亿万富翁历史数据集的分析师。我们将研究这些数据,并回答 10 个最关键的问题。

你想知道我们将要找到答案的所有问题是什么吗?让我们开始吧。

  1. 哪个行业领域的亿万富翁最多?
  2. 大学学历是成为亿万富翁的必要条件吗?
  3. 去哪里学习成为亿万富翁?
  4. 哪个年龄段的亿万富翁人数最多?
  5. 有多少亿万富翁是白手起家的?
  6. 更年轻的亿万富翁住在哪里?
  7. 大部分亿万富翁的关系状况如何?
  8. 亿万富翁为他们的国家贡献了多少亿?
  9. 哪个城市的亿万富翁更多?
  10. 亿万富翁家庭有多少?

我们来分析一下数据,想出这些问题的答案。这是下载数据集的链接— 点击这里。这里是 Github 链接,查看项目代码— 点击这里

1。哪个行业领域的亿万富翁最多?

上图清楚地描绘了大多数亿万富翁都在房地产行业。有些人可能认为房地产是一个被高估的术语。但数据显然在讲述相反的故事。看看你的行业是否成功跻身前 10 名。

2.成为亿万富翁需要大学文凭吗?

你没想到会这样,对吧?这个输出可能会让您感到震惊。我们都听说过,大学文凭并不是赚钱的必要条件。但我们可以清楚地看到,47.5%的亿万富翁完成了学士学位,32.9%的亿万富翁完成了硕士学位,7%的亿万富翁完成了博士学位。所以,不要被那些励志演讲误导了。数据显示情况正好相反。

3.去哪里学习成为亿万富翁?

哇哦。令人震惊的事实。我们经常听说,一个人不一定要在最好的学校学习才能成为亿万富翁。好吧,没有证据的谚语有意义吗?这里有证据试图说明我们被愚弄了。当然,它们被认为是最好的机构是有原因的。

4.哪个年龄段的亿万富翁最多?

我们可以看到,目前五六十岁的亿万富翁更多了。这是有道理的,因为我们知道积累财富需要一些时间。

你可能想知道那个 10 多岁的亿万富翁是谁!他就是凯文·大卫·莱曼(18 岁)。在从父亲 Guenther Lehmann 手中获得德国连锁药店 dm 的股份后,他以 33 亿美元的净资产成为世界上最年轻的亿万富翁。

5.有多少亿万富翁是白手起家的?

图表显示,约 66%的亿万富翁是白手起家,约 33%的亿万富翁不是白手起家(从家里拿钱)。

6.年轻的亿万富翁住在哪里?

正如所料,这可能是一个显而易见的答案。美国拥有最多的年轻亿万富翁(年龄在 35 岁以下)。

7.大部分亿万富豪的关系状况如何?

甚至超过 90%的亿万富翁都结婚了。所以,不要说“我想专注于我的事业。我不想结婚,失去自由。”

8.亿万富翁为他们的国家贡献了多少亿?

仅在美国,每个亿万富翁的总净资产就达到 45000 亿美元左右。中国亿万富翁排在下一位。

9.哪个城市的亿万富翁更多?

图表显示,大多数亿万富翁居住在中国北京。其次是美国纽约市。

10.亿万富翁家庭有多少?

335 个亿万富翁家庭,也就是说有 335 个家庭是亿万富翁,不像单个人是亿万富翁。

结论:

看完这些问题的结果,你是不是很难受?

“我没有在顶级学校学习”,“我没有住在北京、纽约或其他顶级城市”,“我没有在房地产或金融领域工作”。但是我的目标是有一天成为亿万富翁。

放心吧!我们刚刚看到了数据的最高百分位数。有许多“白手起家”的故事在上面的图表中没有显现出来。你可能是其中之一。

同样,这里有下载用于执行该分析的数据集的链接— 点击此处。这里是查看项目代码的 Github 链接— 点击这里。如果你有更多的问题需要回答,你可以浏览这些数据,并提出你正在寻找的见解。

联系我:

我会做很多这样的分析。请随时关注我。

在 Linkedin 上与我联系—www.linkedin.com/in/-hari-prasad/

赢得卡格尔比赛需要什么?让我们听听获胜者本人的意见。

原文:https://towardsdatascience.com/what-does-it-take-to-win-a-kaggle-competition-lets-hear-it-from-the-winner-himself-1d292a9f5b2d?source=collection_archive---------15-----------------------

与 Dmitry Gordeev 的对话:数据科学家和 Kaggle 竞赛大师

作者图片

在这一系列采访中,我在 H2O.ai 展示了一些知名数据科学家和 Kaggle 大师的故事,他们分享了自己的旅程、灵感和成就。这些采访旨在激励和鼓励那些想了解成为一名 Kaggle 特级大师的人。

在这次采访中,我将分享我与卡格尔世界Dmitry Gordeev、又名dott的互动。他是 Kaggle 竞赛的特级大师资深 数据科学家H2O.ai 。Dmitry 曾就读于莫斯科州立大学,毕业时是应用数学/数据挖掘专业的专家。在 H2O 之前,他在维也纳的 UNIQA 保险集团工作,主要从事信用风险管理。****

Dmitry 和他的团队最近在 Kaggle 上赢得了 室内定位&导航比赛 ,与其他团队相比有相当大的优势。凭借这场胜利,Dmitry 现在在全球 Kaggle 比赛中排名第五。有趣的是,Dmitry 和 Philipp Singer -目前 Kaggle 上的第一名(截至日期)和 H2O.ai 的数据科学家同事-在过去的许多 Kaggle 比赛中合作并赢得了金牌。这对搭档以团队代号 The Zoo,的身份参赛,这个代号成了获胜的代名词,并经常登顶 Kaggle 排行榜。“动物园”的标志性成就之一是赢得了 NFL 第二届年度大数据碗。他们是 Kaggle 网站上 2038 份参赛作品中的获胜者,最高奖金为 5 万美元。

2019–2020 年大数据杯冠军 Dmitry Gordeev 在印第安纳波利斯发表演讲 |图片提供:Dmitry Gordeev

NFL 数据分析总监迈克·洛佩兹(Mike Lopez)发现他们的方法非常周到,甚至评论说:“拥有一种能够从历史数据中归纳出他们以前没有见过的比赛的算法是一件很难的事情。”**

在这次采访中,我们将更多地了解 Dmitry 最近赢得的 Kaggle,他对 Kaggle 的热情,以及他作为数据科学家的工作。以下是我与菲利普对话的摘录:

祝贺您在 Kaggle 上赢得了最近举行的“室内定位&导航”比赛。你能和我们分享一下你的方法和你从比赛中学到的东西吗?

Dmitry: 对我来说,这是一场相当激动人心的比赛,主要是因为它触及了一个新的主题和一种我以前从未处理过的新型数据。简而言之,该比赛致力于改善购物中心的手机导航。GPS 通常可以很好地解决这些任务,但只适用于户外,因为它需要户外曝光才能获得最佳精度。然而,在多层购物中心里,它不能充分地帮助你。在这场比赛中,微软研究院鼓励我们利用用户允许他们的手机收集的数据,来帮助识别一个人在哪里,以及一个人走了哪条路。这些数据包括 wifi 信号及其强度的记录,这有助于确定位置,以及传感器数据流,以重建一段时间内的运动轨迹。

德米特里的团队高居排行榜榜首

我们设法以第一名的成绩结束了这场比赛,并以显著的优势击败了所有的竞争对手。我们的预测比第二名团队准确 30%以上。

首先,我需要提一下我那些不可思议的队友。比赛的成功完全是由于团队的杰出努力。比赛需要的工作量是一个人几乎不可能完成的。与典型的 Kaggle 竞赛相比,该解决方案非常复杂,因为它包含多个步骤,每个步骤都需要定制的数据科学方法。我在这里简单总结一下,但是我们也详细描述过,并且在 GitHub 上开源了整个代码

我们把问题分成多个块。其中最核心的包括:

  • 基于 wifi 信号记录预测位置(我们主要依靠 KNN 和 GBM 分类器),
  • 基于传感器数据重建轨迹(使用一系列 CNN 和 RNN 模型),以及
  • 结合两者结果的优化程序。

我们解决方案的关键特性是离散优化,它帮助我们获得了如此显著的精度提升。由于数据收集的特殊性,预测点形成了一个离散的网格,我们依赖于一个改进的波束搜索优化算法。我们的解决方案还依赖于一个高度复杂的例程,该例程注入额外的网格点来覆盖训练数据集中没有出现的购物中心的新区域。

你在高尔夫比赛中一直表现出色。你和 Kaggle 的幽会是如何开始的,是什么让你有动力一次又一次的比赛?

德米特里: 大约在 7-8 年前,我发现 Kaggle 是一个竞争平台,但最重要的是,它可以学习更多关于机器学习的知识。我参加的第一次比赛给了我很棒的经历。这是我第一次在实际数据上拟合随机森林模型,也是我第一次发现适当交叉验证的重要性。这是一个陡峭的学习曲线,但我设法在前三场比赛中获得了铜牌、银牌,甚至金牌。然而,这非常耗时,需要长时间的工作。很明显,我不能以这样的节奏持续太久,所以我决定离开 Kaggle 一段时间。

德米特里的 Kaggle 个人资料

大约两年半前,我第二次在 Kaggle 上积极参赛,与我的同事 Philipp Singer 合作。

“拥有一个可靠而热情的队友是成功的关键。分享想法,让多人编码并尝试,分工的能力是绝对重要的。但是,最重要的是,在如此多的想法失败后,团队精神激励你一次又一次地尝试;这就是帮助我们一次又一次登顶的原因。”

你能告诉我们一些你的背景吗?你为什么选择数据科学作为职业?

德米特里: 我有莫斯科国立大学的数据挖掘背景,对应的是硕士学位,但我的职业生涯相当一段时间专注于信用风险管理。然而,Kaggle 帮助我回到了通用数据科学领域。竞争和学习帮助我改变了职业道路,对此我非常高兴和感激。我花了很多年才做出这个改变,这些年包括了很多熬夜学习、阅读和编码。它们一点也不容易,但它们是值得的。

您还参加了每周一次的 COVID19 全球预测挑战赛,表现非常出色。你从中学到了什么?

****

Dmitry 在一次会议上展示新冠肺炎分析 wave 应用 |提供:H2O.ai****

德米特里: 新冠肺炎全球预测挑战赛是我和我的队友在疫情启动时将我们的技能和知识应用到一些有价值的事情上的一种方式。我们把所有的空闲时间都花在了寻找一种能够对疾病传播做出可靠预测的方法上。但是我们面临一个问题,根本没有可用的数据,这些数据可以可靠地转化为世界正在经历的事情。在这一系列比赛中,我们的模型在排行榜上取得了高分,但结果的准确性远远低于我的期望。

任何喜欢的 ML 资源(MOOCS、博客等..)您愿意与社区分享吗?

Dmitry: 如今,跟上数据科学的发展很难,更不用说要关注的主题越来越多了。自然语言处理、计算机视觉、强化学习、可解释性等领域的进展。在过去的几年里,取得了显著的成绩。为了跟踪最新的发展,拥有关于研究论文、新的开源存储库、竞赛和解决方案的多种可靠信息源是很有帮助的。Kaggle 绝对是一个重要的工具,因为它是一个学习哪些方法对某些问题有效,哪些方法无效的好地方。在 Twitter 和其他社交媒体渠道上关注你最喜欢的人和公司,阅读 H2O.ai 博客和其他受欢迎的博客也是富有成效的。

我正努力跟上尽可能多的数据科学主题,因为它们经常以你可能意想不到的方式联系在一起。我最喜欢的例子是 NLP 方法,它在化学和体育分析任务中非常有效,尽管不涉及文本。

作为 H2O.ai 的数据科学家,你的角色是什么,你在哪些具体领域工作?

Dmitry: 在我的日常工作中,我帮助我们的客户为他们的数据科学问题或尚未使用数据解决的问题找到最佳解决方案。这些客户来自不同的行业,如金融、医疗保健、零售、生产等。尽管用例初看起来似乎没有关联,但解决它们的最佳方法通常依赖于相同的数据科学方法。

Dmitry 和其他围棋大师在 H2O.ai

除此之外,我们还在不断寻找突破性的想法,并努力将它们变为现实。任何可以帮助我们向前迈进的东西,尤其是在社会和医疗保健领域,都是我致力于研究的课题。我们正与多个合作伙伴合作,引入数据科学模型和方法来帮助改善医疗保健。我们试图通过我们的新冠肺炎预报模型及其准确性评估做出一点贡献。不用说,这些活动不仅关注模型本身,还关注如何使它们可靠、健壮、可解释,从而在帮助做出关键决策时值得信赖。

你通过 Kaggle 学到的最好的东西有哪些是你在 H2O.ai 的专业工作中应用的?

德米特里: 没有人知道一开始解决问题的最好方法是什么。一半都没有。这是一个反复测试、失败、从失败中学习和重复的过程。

“常见的方法和最先进的模型通常足以实现令人印象深刻的结果。但是如果你想做得更好,你必须跳出框框思考。这是一个充满无限创意机会的领域。”

一瞥德米特里的卡格尔之旅

我认为这个想法是我从 Kaggle 那里得到的,我将它应用到我的专业工作中。对于许多数据科学问题,已经有一个成熟的方法或已知的最先进的模型架构。我们需要准备现有的数据,根据需要调整模型,并对其进行调整。所有这些步骤几乎不需要任何思考过程,因此应该是自动化的。适合您的数据的最先进的模型应该成为一种商品。实际的工作应该从那里开始,集中于得到一个更好的解决方案,找到一个新的方法,以及一个如何解决问题的全新的想法。

可解释的人工智能正成为一种需要,而不是一种选择。你觉得会对现在的 AI 格局产生多大的影响?社区

人工智能的可解释性和可解释性一直是重要的话题,最近也越来越受到关注。我认为它们将永远与机器学习的所有未来发展齐头并进。人们试图解释甚至是最复杂的模型,以理解仅仅依赖模型的缺陷和风险。我认为这将仍然是可解释人工智能的一个关键目标——以透明的方式展示一个模型如何在给定的环境下得出预测。这有助于了解模型如何适用于感兴趣的案例。它还有助于将模型置于审查之下,以搜索当模型由于训练数据或模型架构和设计中的缺乏或偏差而表现出意外时的特定情况。如果可能的话,它将揭示可用于攻击模型的缺陷,或者如果环境发生变化(这是不可避免的),它将导致模型急剧恶化。这种对抗性测试将成为可解释的人工智能工具包的标准组成部分,在做出最终决定之前,它将始终应用于一个模型。

数据科学领域正在快速发展。你是如何设法跟上所有最新发展的?

德米特里: 阅读过往 Kaggle 竞赛解答是必须的。每当我面临一个新问题时,我都会查看最近在相同或相似领域的竞赛,寻找最好的方法和行不通的想法。论坛、社交媒体、博客和群聊也是跟踪我可能错过的研究论文和公告的好方法。最后但同样重要的是,参加比赛。没有比亲自尝试更好的学习方法了。

给刚刚开始或希望开始数据科学之旅的数据科学和 Kaggle 有志人士一点建议?社区

德米特里: 数据科学是一个广泛且不断发展的领域,所以很难感到无聊。我认为仍有大量的突破即将发生,所以它只会越来越好。最让我惊讶的是工作主题的多样性。今天可以看看 NFL 的统计数据,下周再分析 mRNA 分子的结构!

“对于那些开始他们的旅行的人来说。我羡慕你。不要误会我;我的道路包含了大量的汗水和泪水。老实说,这并不容易。但是我珍惜我过去成功的每一个瞬间,你也一样。好好照顾自己的心理健康。它的重要性怎么估计都不为过。有时候需要休息一下,去散散步。”

外卖食品

在这个非常有见地的采访中,德米特里谈到了他生活中的几个重要方面。他的故事充满了激情、努力和耐心。从处理机器学习问题到创建解决方案,Dmitry 强调了一致性和创新思维的必要性。他还讨论了人工智能需要更多的可解释性,以灌输对我们创建的模型的信任。他的旅程已经并将继续鼓舞人心,我们迫不及待地想看到他在未来的日子里还有什么里程碑。

阅读本系列的其他采访:

NISQ 是什么意思?

原文:https://towardsdatascience.com/what-does-nisq-mean-fadf1aa9fdd6?source=collection_archive---------31-----------------------

它的含义是什么?

量子机器学习要不要入门?看看 动手量子机器学习用 Python

作者图片

量子计算是一种不同形式的计算。一种可以改变解决问题的复杂性,使问题变得容易处理的形式。但是这种不同形式的计算带来了自己的挑战。数字计算机需要区分两种状态:0 和 1。

电路需要区分高电压和低电压。只要有高电压,就是 1,有低电压,就是 0。这种离散化意味着误差必须相对较大才能被注意到,然后可以实现用于检测和纠正这种误差的方法。

与数字计算机不同,量子计算机需要非常精确。它们保持连续的量子态。量子算法需要对连续变化的参数进行精确操作。

然而,在量子计算机中,错误可能小到无法检测,但它们的影响仍然会累积到破坏计算。

作者图片

这种脆弱的量子态非常容易受到来自量子比特周围环境的噪声的影响。噪声可能来自控制电子设备、热量或量子计算机材料本身的杂质,也可能导致难以纠正的严重计算错误。

但是为了实现量子计算机的承诺,我们需要容错设备。我们需要计算肖尔因子分解算法的设备。我们需要设备来执行所有其他已经在理论上开发出来的算法,这些算法解决了数字计算机难以解决的问题。

但是这种设备需要数百万个量子比特。这种开销是纠错所必需的,因为大多数这些复杂的算法对噪声极其敏感。

目前的量子计算机有多达 65 个量子比特。尽管 IBM 力争在 2023 年前实现 1000 量子比特的计算机,但我们预计在不久的将来,量子处理器将达到 100 量子比特。即使它们超过了这些数量,它们仍然相对较小且噪音较大。这些计算机只能执行短程序,因为程序越长,与噪声有关的输出错误就越多。

作者图片

然而,运行在超过 50 量子位的设备上的程序已经变得很难在经典计算机上模拟了。这些设备可以做传统计算机做不到的事情。

这就是我们即将进入的时代。这个时代,我们可以建造量子计算机,虽然不具备容错能力,但可以做经典计算机做不到的事情。这个时代是由术语“嘈杂的中尺度量子”——NISQ来描述的。

嘈杂是因为我们没有足够的量子位来进行纠错。“中等规模”是因为量子比特的数量太小,无法计算复杂的量子算法,但又足够大,可以显示量子优势甚至优势。

结论

我们今天拥有的最好的量子计算机是 NISQ 设备。这些设备需要不同的算法、工具和策略。

例如,变分量子经典算法已经成为考虑近期量子设备量子算法的一种流行方式。在这些算法中,经典计算机对它们从量子计算机上运行某些难以计算的计算中获得的信息执行整体机器学习任务。

整个算法由经典部分和量子部分之间的闭环组成。它有三个部分:

  • 预处理
  • 印刷质量控制系统
  • 后处理

作者图片

量子算法基于经典算法提供的一组参数产生信息。因此被称为参数化量子电路(PQCs)

这些 pqc 相对较小,寿命较短,因此适合 NISQ 设备

量子机器学习要不要入门?看看 动手用 Python 学习量子机器

在这里免费获得前三章。

“AI 安全”中的“安全”实际上是什么意思?

原文:https://towardsdatascience.com/what-does-safety-in-ai-safety-actually-mean-5aeae833469d?source=collection_archive---------36-----------------------

三个复杂的问题

在 TDS 播客的最近一期节目中,嘉宾 Rosie Campbell 是 AI Partnership on AI 的安全关键 AI 负责人,他与 T2 的 Jeremie Harris 聊起了发表前沿人工智能研究的潜在风险。我承认,在听他们的对话之前,这是我从未想过的问题;首先,我绝对是而不是人工智能研究者,所以我从来不需要这么做。

然而,一个更深层次的原因是我多年来构建的关于危险的人工智能可能会是什么样子的心理图像。流行文化已经让我(我猜想,你们中的许多人也是如此)习惯于想象一个像 HAL 9000 那样邪恶的没有身体的意识,或者一个看起来傻傻的、可能致命的星球大战机器人。相比之下,现实世界、当今的人工智能风险更加抽象,也更加广泛。

如果你和我一样,想了解更多关于这些风险的各种形式,这里有一些我认为特别有用的 TDS 资源,虽然不多,但很有效。

照片由 Huy-Hung TrinhUnsplash 上拍摄

所有的 AI 研究都应该发表吗?

我上面提到的 TDS 播客插曲探索了人工智能研究社区必须导航的内在张力:一方面,使知识可访问和自由流动的愿望;另一方面,在坏人试图利用新技术进步达到邪恶目的的情况下,降低风险的竞争需要。Rosie Campbell 和 Jeremie Harris 以 OpenAI 的 GPT-2 及其棘手的初始版本为例开始了对话,并继续就人工智能学术出版中的道德实践进行了更广泛的讨论。

AI 的民主化

作为普华永道(PricewaterhouseCoopers)人工智能的全球负责人, AnandSRao 非常清楚大规模人工智能的潜在好处和风险。随着人工智能在组织中变得越来越容易获得,Anand 注意到滥用的媒介也在增长:

即使是由高素质工程师设计的最复杂的人工智能系统,也可能成为偏见、可解释性问题和其他缺陷的牺牲品。由没有经过适当培训的人构建的人工智能系统,或者在没有适当控制的情况下运行的人工智能系统,可能会产生非常危险的东西——引入歧视或严重错误。更糟糕的是,问题可能直到系统实施后才变得明显,让公司争先恐后地安抚利益相关者,消除损害,修复技术。

他提出的解决方案是一个微妙的民主化框架——一个考虑到技术、商业和不同利益相关者之间复杂相互作用的框架。在这里不可能做到公正,所以只要跳到 Anand 的帖子里去更详细地了解它。

全球人工智能竞赛和战略平衡

非专家读者(是的,我说的是我自己)可能需要进行一些思维跳跃,才能理解学术研究的发表会产生不可预见的负面结果。人工智能的军事用途并非如此,当前的危险与我们科幻小说中的想象惊人地重叠。夏洛特·利维最近的帖子深入探讨了全球利用人工智能获得军事力量的争夺战——以及其他人限制其鲁莽、毁灭性行为潜力的尝试。

如果你从事人工智能安全方面的工作,我们很乐意听到你的意见——请在评论中留下你的工作的链接,或者更好的是— 为 TDS 写点东西!关于人工智能安全和风险的其他深思熟虑的讨论,前往 TDS 播客

关于马来西亚的环境,这些数据告诉了我们什么?

原文:https://towardsdatascience.com/what-does-the-data-tell-us-about-malaysias-environment-5b5d1d22160e?source=collection_archive---------44-----------------------

涵盖碳排放、林业和水污染统计

照片由来自 PexelsPok Rie 拍摄

介绍

环境数据集往往不是一个有利可图的研究主题,但它是研究人员或数据科学爱好者可以关注的问题。

根据我们所处的位置,被监控的内容通常会有所不同,但是如果我们能够得到一个并开始使用它们,我们通常会为我们的当地社区带来令人惊讶的发现。

从马来西亚的开放数据门户网站,我设法获得了空气污染物排放、林业和河流污染的时间序列数据。我会尝试调查马来西亚的环境状况,看看我是否能为社区增加一些价值。

数据和文件

  1. 数据
  2. 文档

加载数据和函数

#Env
myco2e = 'co2e-my-1998-2019.csv'
myforest = 'forest-my-1947-2018.csv'
myriver= 'river-pollutant-my-1998-2018.csv'colors = [
    '#2C947A',
    '#83553E',
    '#7A2A34',
    '#A2D3C2',
    '#658E9C',
    '#4D5382',
    '#514663',
    '#A83375',
    '#FF1F87',
    '#40B7F2',
]

堆积面积图

def make_stacked_area(df, ylist, colorlist, title, legend=True, height=1000, width=800):
    ys = ylist
    colors = colorlist

    x = df.Yearfig = go.Figure()
    for i in range(len(ys)):
        fig.add_trace(go.Scatter(
            x = x,
            y = df[ ys[i] ],
            name = ys[i],
            mode= 'lines',
            line= dict(width = 0.5,
                       color = colors[i]),
            stackgroup='one',
            groupnorm='percent',
        ))fig.update_layout(
        title= title,
        xaxis_tickfont_size=14,
        yaxis=dict(
            title='',
            titlefont_size=16,
            tickfont_size=14,
        ),
        legend=dict(
            x=1.02,
            y=0.98,
            bgcolor='rgba(255, 255, 255, 0)',
            bordercolor='rgba(255, 255, 255, 0)',
        ),
        showlegend= legend,
        height= height,
        width= width,
    )return fig

线形图

def make_line_plot(data, xdata, ydata, cdata, title, legend=True, width=900, height=600):
    import plotly.express as pxfig = px.line(data, 
                  x= xdata,
                  y= ydata, 
                  color= cdata, 
                  symbol= cdata,
                 )fig.update_layout(
        title= title,
        xaxis_tickfont_size=14,
        yaxis=dict(
            title='',
            titlefont_size=16,
            tickfont_size=14,
        ),
        legend=dict(
            x=1.02,
            y=0.98,
            bgcolor='rgba(255, 255, 255, 0)',
            bordercolor='rgba(255, 255, 255, 0)',
        ),
        showlegend= legend,
        height= height,
        width= width,
    )

    return fig

污染物排放

EPA 已经将六种污染物确定为“标准”空气污染物,因为它通过开发基于人类健康和/或基于环境的标准(基于科学的准则)来设定允许水平,从而对它们进行管理。这六种污染物是一氧化碳、铅、氮氧化物、地面臭氧、颗粒污染(通常称为颗粒物)和硫氧化物。

原始数据没有具体说明记录或监测的污染物是什么。

df = pd.read_csv(PATH + myco2e)ylist = ['Industrial', 'Power plant', 'Mobile vehicle', 'Others'] make_stacked_area(df, ylist, colors, 'CO2 emission share by source, Malaysia (1998-2018)')

将数据转换为长格式

df_long = (pd.melt(df, id_vars=['Year','Total co2e (Tonnes)'], value_name='emission'))
df_long.rename({'variable': 'source'}, axis=1, inplace=True)make_line_plot(df_long, 'Year', 'emission', 'source', 'CO2 emissions by source, Malaysia (1998-2018)')

备注:

  1. 排放量以吨为单位。
  2. 错误地将柱状图和图表命名为碳排放。原始文件:空气污染物包括臭氧(O3)、一氧化碳(CO)、二氧化氮(NO2)、二氧化硫(SO2)和小于 10 微米的颗粒物质(PM10)。

绝大多数记录在案的排放物来自机动车辆。该国的污染物排放量估计值应该高得多,因为许多其他通常具有高排放量的来源(例如:农业、石油生产、废物管理)并未显示为可用来源。

总的来说,全国的污染物排放总量似乎呈上升趋势。

森林面积和伐木活动

df = pd.read_csv(PATH + myforest)

原始数据集有一些缺失值,如果希望做进一步的时间序列分析,如协整检验或 VECM 模型,这可能会导致一些问题。这可以通过插值很容易地解决,尽管必须弄清楚“幻影”值被引入

# Fill missing valeus for time series
df = df.interpolate(method= 'linear', limit_direction= 'forward')
df

有了这个,我们就可以开始制作图表了。

fig = go.Figure()fig.add_trace(go.Scatter(
    x= df.Year,
    y= df['Forest Area (hectare)'],
    name = 'Forest Area (hectare)'
))fig.add_trace(go.Scatter(
    x= df.Year,
    y= df['Production of Logs (cubic metre)'],
    name = 'Production of Logs (cubic metre)',
    #yaxis= 'y2'
))fig.add_trace(go.Scatter(
    x= df.Year,
    y= df['Number of Workers in Wood Industry'],
    name = 'Number of Workers in Wood Industry',
    yaxis= 'y2'
))###############
fig.update_layout(
    xaxis=dict(
       domain=[0, 0.95]
    ),
    yaxis=dict(
        title="Forest Area (hectare)",
        titlefont=dict(
            color="#1f77b4"
        ),
        tickfont=dict(
            color="#1f77b4"
        )
    ),
    yaxis2=dict(
        title="Number of workers in logging industry",
        titlefont=dict(
            color="green"
        ),
        tickfont=dict(
            color="green"
        ),
        anchor="x",
        overlaying="y",
        side="right",
    ),
    height= 600,
    width= 900,
    title= "Available forest area & logging activity, Malaysia (1947-2018)"
)

马来西亚有记录的森林面积多年来一直停滞不前。20 世纪 80 年代左右森林面积的激增可能是由于观察面积的增加。这意味着在我们的森林面积时间序列中有一个结构突变模式。在这种情况下,这将意味着今天的马来西亚的森林面积比几十年前更少。

原木产量在 20 世纪 90 年代达到历史最高水平,此后产量逐年下降。1960-1990 年间伐木活动的增长与同一时期森林面积的减少相一致。

木材行业的工人数量有一些剧烈的波动,可能是由于记录或记账不良。也就是说,尽管伐木活动减少,工人数量仍然达到历史最高水平。这是因为木工或工匠等工作被包括在内。

协整检验

既然我们已经做了插值,我们不妨做一个协整检验,看看森林面积的扩展、伐木活动和木材业工人之间是否有任何稳定或长期的关系。

由于结构性断裂无处不在,我们并不期待由此产生任何重大结果。但是如果你想做,你可以这么做。

plt.figure(figsize= (12,18) )plt.subplot(4,1,1)
plt.plot(df['Production of Logs (cubic metre)'], label= 'Logging activity')
plt.plot(df['Number of Workers in Wood Industry'], label = 'workers')
plt.plot(df['Forest Area (hectare)'], label = 'forest')
plt.legend()# Spread 1
plt.subplot(4,1,2)
plt.plot(df['Forest Area (hectare)'] - df['Number of Workers in Wood Industry'], 
         label='Forest - Workers')
plt.legend()# Spread 2
plt.subplot(4,1,3)
plt.plot(df['Forest Area (hectare)'] - df['Production of Logs (cubic metre)'], 
         label='Forest - Logging')
plt.legend()#plot spread
plt.subplot(4,1,4)
plt.plot(df['Production of Logs (cubic metre)'] - df['Number of Workers in Wood Industry'], 
         label='Logging - Workers')
plt.legend()plt.show()

作者图片

由于所有 3 个不同时间序列的水平数据不具有 0 均值且包含趋势,在我们的后续函数中,我们将使用“线性趋势”作为估计参数。

from statsmodels.tsa.vector_ar.vecm import *temp = df
temp.set_index('Year', inplace=True)lag_order = select_order(data= temp[1:], 
                         maxlags=10, 
                         deterministic="li", 
                             # linear, inside
                         seasons=0)
lag_order.summary()
print(lag_order)

作者图片

识别等级(协整关系的数量)

rank_test = select_coint_rank(temp[1:], 
                              det_order=1, 
                              k_ar_diff=0, 
                              method="trace",
                              signif= 0.05)rank_test.rank
rank_test.summary()

作者图片

秩等于 1,意味着只有一个稳定的三个变量的线性组合(即:3 个不同时间序列的 1 协整关系)。

# Parameter estimation
model = VECM(temp[1:], 
             deterministic="li", 
             seasons=0,
             k_ar_diff= lag_order.bic, #bic for easier interpretability
             coint_rank= rank_test.rank)vecm_res = model.fit()
vecm_res.summary()

作者图片

预测

vecm_res.plot_forecast(steps= 15, plot_conf_int=True)

作者图片

格兰杰因果关系:

X 格兰杰原因 Y 如果使用****X 的当前和过去值以及Y 的当前和过去值来预测 Y 的未来值的模型比仅使用 Y 的当前和过去值来预测 Y 的模型具有更小的预测误差。

换句话说,格兰杰因果关系回答了以下问题:

变量 X 的过去是否有助于提高 Y 未来值的预测?

瞬时因果关系:

X 瞬时导致 Y 如果使用 X 的当前、过去和未来值以及 Y 的当前和过去值来预测 Y 的模型比仅使用 X 的当前和过去值以及 Y 的当前和过去值的模型具有更小的预测误差

换句话说,瞬时格兰杰因果关系回答了这个问题:

知道 X 的未来是否有助于提高对 Y 未来值的预测?

g_cause_forest = vecm_res.test_granger_causality(caused="Forest Area (hectare)", signif=0.05)
g_cause_forest.summary()

作者图片

g_cause_log = vecm_res.test_granger_causality(caused="Production of Logs (cubic metre)", signif=0.05)
g_cause_log.summary()

作者图片

g_cause_wood = vecm_res.test_granger_causality(caused='Number of Workers in Wood Industry', signif=0.05)
g_cause_wood.summary()

作者图片

i_cause_forest = vecm_res.test_inst_causality(causing= 'Forest Area (hectare)')
i_cause_forest.summary()

作者图片

i_cause_log = vecm_res.test_inst_causality(causing= 'Production of Logs (cubic metre)')
i_cause_log.summary()

作者图片

i_cause_workers = vecm_res.test_inst_causality(causing= 'Number of Workers in Wood Industry')
i_cause_workers.summary()

作者图片

在这两个变量中都找不到格兰杰因果关系。在这两个变量中也找不到任何即时的因果关系。

然而,如果 alpha 上升到 0.10 ,变量Forest AreaProduction of Logs都可以被识别,以瞬间引起其他变量的未来值。(例如,如果我知道森林面积或原木产量的未来值,我就可以合理地预测其他变量的未来值。)

脉冲响应

irf函数返回对VEC(p–1)模型中每个变量的一个标准差冲击的动态响应,或脉冲响应函数 (IRF)。

脉冲响应试图追踪一个变量的冲击对系统中所有变量响应的影响。

num_periods = 15
ir = vecm_res.irf(periods= num_periods)ir.plot(plot_stderr=True)

作者图片

备注:

  1. 我要警告不要对这种协整分析的任何结果进行解读。时间序列数据太不可靠,包含太多结构突变,粒度太大。
  2. 由于 Choleski 分解,脉冲响应函数(IRF)对 VAR 中内生变量的排序(即列的排列)很敏感。在实践中,通常使用不同的排序来测试 IRF 对变量排序的敏感性。

河流污染状况

ylist = [
    'Biochemical oxygen demand (polluted)',
    'Biochemical oxygen demand (slightly polluted)',
    'Biochemical oxygen demand (clean)', 
]ylist2= [
    'Ammoniacal Nitrogen (polluted)',
    'Ammoniacal Nitrogen (slightly polluted)',
    'Ammoniacal Nitrogen (clean)',
]ylist3=[
    'Suspended solids (polluted)',
    'Suspended solids (slightly polluted)', 
    'Suspended solids (clean)',
]river_plot1 = make_stacked_area(df, ylist, colors[-3:], 'Share of rivers polluted (biochemical oxygen demand),<br>Malaysia (1998-2017), n=140', height= 600)river_plot2= make_stacked_area(df, ylist2, colors[-3:], 'Share of rivers polluted (Ammoniacal Nitrogen),<br>Malaysia (1998-2017), n=140', height= 600)river_plot3= make_stacked_area(df, ylist3, colors[-3:], 'Share of rivers polluted (Suspended solids),<br>Malaysia (1998-2017), n=140', height= 600)

注意事项:

  1. 监测的河流数量从 120 条开始,2005 年增加到 140 条。

生化需氧量

生化需氧量(BOD)是衡量需氧细菌分解过程中去除水中废弃有机物所需氧气量的指标。水中有机物的衰变被测量为生化或化学需氧量。

某些环境压力,如肥料的引入,会减少水体中溶解氧的含量,从而对当地水生生物造成压力。

马来西亚所有河流的生化需氧量都严重污染。近十年来,没有一条河流在这方面被记录为干净的。受污染河流的份额从 10%增长到了顶峰时的 85%。

氨态氮污染

氨是工农业的副产品。常见的形式包括空气污染,由腐烂的农业泥浆或渗入河流的化肥排放的氨气造成。

在水生环境中,氨会导致含氮需氧量、富营养化和鱼类健康的变化。溶解氧在硝化过程中被消耗,与氨反应,导致依赖它的生物可利用的 O2 减少。

硝化作用还会释放硝酸盐,导致陆地环境中的富营养化。嗜硝藻类和大型植物在死水中产生了大量的水华。

几乎所有的马来西亚河流都有氨态氮污染的问题。污染河流的份额多年来保持稳定,这可能表明以前污染的河流仍然受到污染。

悬浮体

悬浮固体是指作为胶体或由于水的运动而悬浮在水中的小固体颗粒。颗粒尺寸越小,单位质量颗粒的总表面积(克)越大,因此可能携带的污染物负荷就越高。

悬浮固体由于其相对较大的尺寸,可以通过沉淀去除。它可以作为水质、污水浓度或一般废水的指标。

悬浮固体污染似乎对马来西亚的河流更有利。也就是说,近年来污染问题似乎又回来了。

编后记

虽然我不是环境专家来建议任何政策,但事实是我们的环境是我们所有人都有责任照顾的。

监测更多的环境数据以确保我们有一个健康的地球来生活总是值得的。

我希望马来西亚政府能改善他们的环境数据集,为研究开辟更多的进展,并发现其中一些见解是可行的。

喜欢你看到的吗?如果你已经打算要一个,考虑在 Medium 上跟随我或者使用这个 推荐链接 获得 Medium 的会员资格。

如果你想从我做的其他工作中获得更多帮助,也可以考虑订阅我的个人博客QED Insight

同时,这是我在 Medium 上完成并发表的一些其他项目。

https://medium.com/alpha-beta-blog/key-findings-from-world-banks-global-findex-data-fee8d7505355

h 指数告诉了我们什么,没有它我们无法知道?

原文:https://towardsdatascience.com/what-does-the-h-index-tell-us-that-we-could-not-know-without-it-22ada0d73459?source=collection_archive---------24-----------------------

对 h-index 包含的、在引用总数中找不到的额外信息的理论和实证研究

为了对研究人员进行相互比较,我们需要一个衡量标准,用一个数字来表示他们的影响力和成功程度。一种方法是查看他们的文章被引用了多少次,并计算他们的总引用次数( N )。一种更复杂的方法是计算他们的 h 指数 ( h ),这也应该考虑到这些 N 引用是如何在一名研究人员的论文中分布的。

最近和几个朋友的一次讨论让我思考 h 指数以及它的真正含义。我开始做一些有趣的计算,最后从谷歌学术收集数据来测试我的假设。我主要关心的是理解引用总数 N 和 h 指数 h 如何相互关联,以及 h 指数包含多少额外信息。

下面,我首先从理论上讨论一下 hN 之间的关系。然后,我对来自计算神经科学、机器学习和高能物理 3 个不同领域的 1500 名研究人员的数据做了简要分析,并表明我们的理论直觉与经验数据一致。

h 指数?曲线下的正则化区域

什么是 h 指数?

如果一个研究人员的 h 指数是 h ,那么这意味着 h 是“他或她有 h 篇文章至少被 h 次引用”这句话成立的最大数。形式上,给定一个研究者,我将引用函数定义为 f : ℕ → ℕ 其中 f(n) 表示该研究者第 n 篇被引用最多的论文的引用次数。那么,对应于该函数的 h 指数是最大值 h ,我们有f(h)h——见图 1。换句话说, h 是可以放在 f 下面的最大正方形的边。这种解释是我们在本文剩余部分所关注的。

图一。黑点表示函数 f(n),绿色方块的边长表示对应的 h 指数。照片取自维基百科,公共领域。

曲线下的面积

函数 f 下的面积等于引用总数 N 。这让我们很快得出结论, h 以 citations⁴总数的平方根为界,即 √N. 注意,这个界是紧的:如果 N 篇引用在第 1 篇 √N 篇论文之间平均分布,那么这个界就达到了,我们有 h=√N. 在这种情况下, f(n) 本身就是一个正方形,等于

从这个角度来看, h 可以看作是曲线下的正则化区域,它既取决于曲线的形状,也取决于曲线下的真实区域( N )。不严格地说,h 指数喜欢大的 N 值以及形状类似于正方形的曲线,例如,没有长尾的曲线或二阶导数较小的曲线。

在下一节中,我问是否有可能将这种正则化显式化,并将 f 的形式的效果与其面积( N )分开?

将形式的影响与引用数量的影响分开

重要提示:为了简化分析,在本节中,我删除了 f ,的约束,并使用从ℝ⁺到ℝ⁺.的 f 的插值版本因此, N 等于 f、h 的积分,表示 fy=x 线相交的位置。

一个卡通例子:线性引用函数

在进入一般情况并获得一些直觉之前,让我们考虑一个简单的例子,其中 f 具有线性形式 f(n) = max{ a - bn,0 } 其中 a > 0b > 0 是自由参数。如果我们假设知道 N ,那么我们可以找到 a 作为 Nb 的函数,并且通过找到 fy=x 线的交点,我们也可以找到 h-index 作为 Nb 的函数

方程式 1。 h 为 b 和 N 的函数,为线性情况

关于情商有趣的一点。1 是可以因式分解的,可以写成 h(b,N) = k(b)√N ,其中

  1. 第一项, k(b) ,只是斜率 b 的一个函数,它描述了引用是如何在论文中分布的,无论有多少引用。
  2. 第二项, √N ,只是引用总数的函数,与它们在论文中的分布无关。

图 2 显示了当 N 等于 10000 时作为 b 的函数的 h 指数,以及对于 b 的 3 个不同值的 f(n) 的三个示例。b=1 时达到最大 h 指数。对于 b < 1 来说,引用次数很少的论文太多,而对于 b > 1、来说,被多次引用的论文很少。因此,h 指数更倾向于那些被广泛引用的论文数量和引用次数都相当多的情况。

图二。对于 f(n) = a-b.n 的情况:左起第一个面板显示了当 N 假定为固定值且等于 10'000 时,h 指数作为 b 的函数;接下来的图显示了三个不同 b 值的 f(n)(实线)(对应于第一个图中的星号)。每个黑色虚线框显示 f(n)下的最大正方形,边长等于 h 指数,灰色虚线框显示 N=10'000 的最大可能正方形。这个图形是作者画的。

找到一般情况下的相同因式分解

情商。1 表明,可以通过简单的因式分解将 N 的影响与 b 对 h 指数的影响分开。对于一般的引用函数,有可能找到类似的公式吗?我的答案是肯定的!但是要找到它,我们首先需要定义来自的的概念——它可以充当一般引用函数的参数 b 的角色。

我说引用函数 f₁f₂ 具有相同的形式如果存在一个正α使得对于每一个 n≥0

方程式 2。 f₁f₂ 的形式相同

根据这个定义,两个线性引用函数具有相同的形式,当且仅当它们具有相同的斜率b——这与我们的直觉一致。

使用 Eq。2,我们可以很容易地证明,如果 f₁f₂ 具有相同的形式,那么 N₂= α N₁h₂= α h₁ ,这就让我们得出结论,只要两个引用函数具有相同的形式,我们就有 h₂/h₁=√N₂/√N₁.根据这个推理, h 可以写成

方程式 3。 h 作为形式和 N 的函数

其中 k≤1 相对于 N 是常数,仅取决于 f形式;这与我们在 Eq 中看到的一致。1 其中 k是 b的函数。取等式两边的对数。3,我们以

方程式 4。对数版 Eq。3

情商。4 同时回答我们所有的问题:h 指数的对数有两个分量:

  1. 第一个分量,log k(b) ,仅仅是形式 f 的函数,并且独立于 N、
  2. 而第 2 个分量,log √N ,只是引用总数的函数,与形式无关。

第一部分是 h-index 包含的附加信息,是上一节讨论的正则化的显式表达式。为了了解这些信息在不同研究人员之间的相互比较中有多重要,我们需要了解引用函数的形式在实践中的可变性。

在下一节中,我将分析经验数据,并比较不同研究领域中的形式 f 和 N 对 h 指数的贡献。

我们在数据中看到了什么?

我从计算神经科学(CN)、机器学习(ML)和高能物理(HP)三个不同领域的 1500 名研究人员的谷歌学术页面中提取了 hN——有关分析的详细信息,请参见附件代码。图 3 总结了这些信息。

我分别为每个字段将 logh = a+blogN的幂律形式拟合到该数据中。根据等式。4、我们必须有 b =0.5 独立于场;与这个理论预测一致,我发现 CN,ML,HP 分别为b= 0.47±0.01,b= 0.50±0.04,b= 0.50±0.01。拟合曲线的相应 R 平方应该显示出 N (与 f 的形式相比)在解释 h 指数中的主导地位;我发现 CN、ML 和 HP 的 R 平方值分别为 0.75、0.21 和 0.73。这些结果表明,引用函数形式的可变性在不同领域是不同的;特别地,形式信息似乎在解释 ML 中研究人员的 h 指数中占主导地位,而在解释 CN 和 HP 中研究人员的 h 指数中并不重要。⁵

图 3。2021 年 3 月 16 日摘自《谷歌学术》的计算神经科学(左栏)、机器学习(中栏)、高能物理(右栏)领域 500 名研究人员的引用信息——共计 1500 名研究人员。第 1 行和第 2 行分别以线性和对数标度显示了作为引用数量(N)函数的 h 指数。每个点对应一名研究人员,黑色实线对应理论界限(即 N 的平方根),灰色虚线对应数据拟合的幂律曲线。第三行显示拟合的残差直方图,即真实 h 指数和幂律曲线预测的 h 指数之间的差异直方图。图为作者所作。

结论

N 是引用函数下的区域时, h 可以被视为引用函数下的正则化区域。通过对形式的适当定义,这种正则化可以变得显而易见,这使我们能够将引用数量的影响与引用函数的形式对 h 指数的影响分开。此外,对经验数据的分析证实了理论的预测,并表明 h 指数的有用性取决于研究领域。

承认

我很感谢伯芬·辛塞克和伊萨克·福尔克,他们发人深省的讨论让我写下了这篇文章。

代码:

用于分析的代码(用 Julia 语言)可以在这里找到。

脚注:

在这里,我不是在讨论为什么我们想要或需要比较研究人员,也不是在讨论是否有可能定义一个标量测量来捕捉关于一个研究人员的影响力和成功程度的所有必要信息。然而,我想强调的是,如果我们想要建立一个公平的科学界,这些问题是至关重要的,不能被遗漏和低估。

在写这篇文章的时候,我发现有很多有趣的论文讨论了 h 指数的不同方面。感兴趣的读者可能想看看 J. E. Hirsch 在 2005 年第一次介绍 h-index 的原始文章,或者看看其他许多关于 h-index 的很酷的研究中的三个例子,比如 T2 的伊格莱西亚斯(Iglesias)&佩查罗曼(2007) 、米纳斯尼等人(2013)巴恩斯(2017)

这里,我不区分有一篇 0 次引用的论文和没有那篇论文。

⁴如果 √N 不是整数,那么上界就是它的整数部分。

⁵回归分析的细节见附图。原始数据也可以在同一个存储库中获得,我非常乐意看到和讨论其他人的分析结果。😃
欢迎通过alireza . modirshanechi @ epfl . ch联系我

变形金刚自我关注其实看的是什么?

原文:https://towardsdatascience.com/what-does-transformer-self-attention-actually-look-at-5318df114ac0?source=collection_archive---------6-----------------------

深入探究伯特的注意力

背景:变形金刚、自我关注、伯特

在过去的几年里,自然语言理解的进展已经爆炸,这主要归功于被称为转换器的新型神经网络架构。Transformer 模型的主要架构创新是广泛使用所谓的、【自我关注】、,以至于介绍该模型的论文被命名为。自我注意机制将每个输入编码为所有其他输入的函数,帮助算法化语言中上下文的直观概念。

使用 GitHub Copilot 实例化一个复杂的对象,只需要查看它的类签名和前面的样板文件。Copilot 是通过在 Github 的开源代码上训练一个变压器模型而创建的。(GitHub copilot 能为数据科学家做些什么?)

自 2017 年推出以来,变压器架构已经分为多个子家族,最著名的是因果解码器种类( GPT-2GPT-3 ),它们被训练来预测序列中的下一个字,以及编码器种类(伯特T5μm),它们被训练来在序列中的任意位置填空。每一种都有自己的优点和缺点,但是为了本文的目的,我们将把重点放在各种编码器上,尤其是 BERT。

伯特建筑进修

BERT 被设计成一个非常通用的语言编码器模型,它可以用于许多不同类型的任务,而不需要改变它的架构。它通过以单词标记的一般形式接收输入来实现这一点,在开始处有一个特殊的[CLS]标记,在每段文本之后有一个特殊的[SEP]标记。(技术上讲文字块令牌)

然后,该输入序列被转换为向量嵌入,向量嵌入通过自关注机制(稍后将详细介绍)相对于彼此被重复重新编码,随后的每次重新编码都保持相同的序列长度。

通过这种方式,任何接收多个输入的任务,比如一段文本+一个关于文本的问题,都可以自然地作为[SEP]划分的标记序列传入。类似地,任何期望进行分类的任务,例如“输入是消极情绪还是积极情绪?”可以通过最后一层的[CLS]令牌嵌入自然输出。

伯特如何消化输入“男孩骑着马”+“很有趣”的图示。输入令牌被转换成嵌入,然后由每一层重复重新编码。特殊[CLS]令牌的最终嵌入可以用于执行分类。(图片由作者提供)

对于基本 BERT 模型,有 12 层,每层包含 12 个注意头,总共有 144 个注意头。注意力操作有些复杂(详细的演练见插图:自我注意力),但重要的是要知道,对于每个注意力头:

  1. 每个输入被赋予三个向量:一个键、一个查询和值
  2. 为了确定我应该“关注”输入 j 多少,我们取输入 I 的查询向量与输入 j 的关键向量的点积,重新调整它,并通过一个 sigmoid 传递它。
  3. 然后,我们使用这个结果注意力分数来加权输入 j 的值向量。

好了,介绍完了,我们终于可以进入有趣的部分了。

伯特的注意力(不要)看什么

通常,当你听到对伯特注意力的高层次描述时,接下来是“这使得注意力头能够自己学习经典的 NLP 关系!”接下来是这样一幅挑衅性的图形:

BERT 的第 5 层注意力头之一执行共指解析。“它”最受其相关名词短语“狗”的关注。(图片由作者提供,使用 BertViz 生成)

虽然一些注意力集中的人确实学会了表现这样美好的可解释的关系,但大多数人没有。 Kovaleva 等人(2019) 将 BERT 的注意力焦点分为 5 种类型:

  1. 垂直:所有记号都强烈关注同一个其它记号,通常是[SEP]记号。
  2. 对角线:所有的记号要么强烈地关注它们自己,要么关注一个具有恒定偏移量的记号,例如紧随它们自己之后的记号。
  3. 垂直+对角线:前两种图案的组合。
  4. :令牌强烈关注其[SEP]划分的块内的其他令牌,而不关注该块之外的任何令牌。
  5. 异质:更复杂、不明显的图案。

每个网格代表特定输入的特定注意头的行为。网格中的位置(I,j)表示表征 I 对表征 j 的注意力强度。此处显示的是展示 5 种特征注意力模式的输入。(科瓦列娃等人,2019 )

有趣的是,当你看到这些注意力模式有多普遍时,你会发现异质+阻断模式,也就是唯一能做任何有趣事情的模式,只解释了注意力头的一半的典型行为。更奇怪的是,在所有情况下都盯着同一个标记的垂直模式,占据了 注意力头部的三分之一。

产生每种注意模式的输入部分。每个条形代表一组不同的输入,所有这些输入都是来自 GLUE 数据集的任务。(科瓦列娃等人,2019 )

当您深入研究垂直模式时,您会发现大多数单个标记都是[CLS]、[SEP]和标点符号。那么,究竟为什么像伯特这么聪明的模特会花费这么多宝贵的注意力资源在这些毫无意义的符号上呢?

关于这里发生的事情的理论是,当一个注意力头盯着这些停止标记之一时,它的行为就像一个不操作。因此,如果一个特定的注意力头所调谐的任何语言结构在输入中不存在,这就允许它“关闭”。

Kobayashi et al. (2020) 进一步挖掘这一奇怪的发现,发现虽然这些代币上的注意力得分很高,但正在与注意力得分相乘的值向量的范数很低。如此之低,以至于最终产品接近于零。

每一层中给予不同标记类型的注意力权重。左:天真的注意力得分,右:由价值向量的范数加权的注意力得分。(小林等人,2020

真正有趣的是,因为有太多的这些注意力头基本上什么都不做,所以实际上你可以通过移除某些注意力头来提高模型的性能!事实上,对于像【MRPC】(确定两个句子是否等价)和 RTE (确定一个句子是否暗示另一个句子)这样的任务,随意去掉一个头更有可能帮助表现而不是伤害它。

禁用不同注意头时的任务绩效。橙色线表示未改变的 BERT 模型的准确性。y 轴上显示图层编号,x 轴上显示头部编号。左:MRPC 任务的性能,右:RTE 任务的性能。( Kovaleva 等人,2019 )

有用的注意力模式呢?

回到第一部分的图:的确,在 BERT 中有一些注意力头,它们似乎被调整来执行可识别的 NLP 子任务。那么,这些头是什么,它们能做什么?**

发现一些注意头编码与依存解析树中特定边相同的关系。特别地,对于给定输入(忽略[CLS]和[SEP])的最强注意力分数始终被给予具有 T20 特定依赖关系的成对单词。

BERT heads 编码特定的依赖关系。左:直接宾语关系,中:限定词关系,右:所有格修饰语关系。(克拉克等人,2020 )

许多 NLP 系统的另一个复杂而重要的任务是共指消解。这就是确定一个句子中的两个词何时指代同一个实体的问题。要理解为什么这是一个如此困难的问题,考虑一下句子“莎莉给莎拉一颗曼妥思,因为她的口气不好。”在这种情况下,“她”指的是“莎拉”,但做出这一决定需要知道曼妥思是用来减轻口臭的,而不是某种道歉礼物。

这种对世界知识的依赖使得这成为一项非常重要的任务,然而 Clark 等人发现,第 5 层中的 Head #4 以 65%的准确度正确地识别(即,最强烈地关注)共同参照,相比之下,选择最近的提及作为共同参照的系统只有 27%的准确度。

我们可以走的另一条路是观察所有注意力头总共学到了什么。还记得前面的依赖关系解析树吗?我们可以问的一个问题是:对于一个给定的词对,如果我们考虑由网络中所有注意力头的产生的注意力分数,我们能在依存分析中计算出它们是否应该由一条边连接吗?**

通过聚合所有 144 个注意力头的注意力分数,为给定的词对创建全网络的注意力向量( Coenen 等人,2019 )

事实证明,答案是肯定的,以这种方式构建的分类器可以以 85.8%的准确率预测依存解析中的边缘,远高于 chance ( Coenen et al .,2019 )。虽然正如 Rogers et al. (2020) 所指出的,当在这样的高维表示之上构建分类器时,并不总是清楚有多少知识包含在底层表示中,而有多少知识是由分类器注入的。

最后的想法

关于这个主题有许多研究,我还没有时间触及,例如不同的架构决策在确定 BERT 的能力方面有什么作用(Ontaón 等人,2021 ),在 BERT 的不同层内正在进行什么样的推理( Tenney 等人,2019 ),以及注意力头部下游的单词嵌入编码是什么( Hewitt & Manning,2019 )。

许多头条论文都是关于这些巨大的神经网络模型所拥有的突破性能力,但这个领域最让我感兴趣的是这些模型是如何在引擎盖下工作的。我认为,特别是在这种情况下,我们发现备受吹捧的注意力机制花了大量时间来寻找无用的标记,我们意识到我们对这些模型的理解是多么贫乏。我认为这种神秘的气氛让他们更酷。

作品引用

[1] J. Alammar,插图变压器(2018),GitHub 博客

[2] R. Karim,插图:自我关注(2019),走向数据科学

[3] J. Vig,解构 BERT,第 2 部分:可视化注意力的内部工作方式(2019),走向数据科学

[4] A .科尔提,GitHub copilot 能为数据科学家做些什么?(2021),走向数据科学

[5] J. Devlin,M. Chang,K. Lee 和 K. Toutanova,BERT:用于语言理解的深度双向转换器的预训练(2019),ArXiv.org

[6] A. Rogers,O. Kovaleva 和 A. Rumshisky,《伯特学入门:我们知道伯特如何工作》( 2020 年), ArXiv.org

[7]K·克拉克、u .汉德尔瓦尔、o .利维和 C. D .曼宁,《伯特看什么》?伯特的注意力分析(2019),ArXiv.org

[8] O .科瓦列娃、a .罗马诺夫、a .罗杰斯和 a .拉姆什基,《揭露伯特的黑暗秘密》(2019),ArXiv.org

[9] G. Kobayashi、T. Kuribayashi、S. Yokoi 和 K. Inui,《注意力不仅仅是重量:用向量范数分析变形金刚》( 2020 年),ArXiv.org

[10] A. Coenen,E. Reif,A. Yuan,B. Kim,A. Pearce,F. Viégas 和 M. Wattenberg,可视化和测量 BERT 的几何形状(2019),ArXiv.org

[11]s . Ontaón、J. Ainslie、V. Cvicek 和 Z. Fisher,《让变形金刚解决作曲任务》(2021),ArXiv.org

[12] I. Tenney,D. Das,E. Pavlick,Bert 重新发现经典的 NLP 管道(2019),ArXiv.org

[13] J. Vig,变压器模型中注意力的多尺度可视化(2019),ACL 选集

[14] C. D .曼宁、K·克拉克、j .休伊特、u .汉德尔瓦尔和 o .利维,《通过自我监督训练的人工神经网络中的自然语言结构》(2020 年),《美国国家科学院院刊》

[15] J. Hewitt 和 C. D Manning,在词表示中寻找句法的结构性探索(2019),计算语言学协会

[16] M. Marneffe、B. MacCartney 和 C. D. Manning,从短语结构语法分析生成类型化依赖语法分析(2006),Lrec

[17] D. Jurafsky 和 J. H. Martin,语音和语言处理,第二版(2014 年),培生教育

[18]普遍依赖关系,UniversalDependencies.org

顶点 AI 是做什么的?

原文:https://towardsdatascience.com/what-does-vertex-ai-do-d30014024f55?source=collection_archive---------9-----------------------

机器学习的一站式商店

Clark Van Der Beken 在 Unsplash 上拍摄的照片

TL;速度三角形定位法(dead reckoning)

在这篇文章中,我介绍了典型的机器学习工作流中的常见任务,以及 Vertex AI 如何在一个统一的用户界面(UI)下整合所有需要的工具来实现这些任务。

🤔我们为什么需要一套“统一的”工具呢?

今天,数据科学家努力应对手动拼凑机器学习(ML)点解决方案的挑战。

这会使模型开发和实验变得复杂和缓慢,导致很少的 ML 模型进入生产。

不仅仅是数据科学家希望获得 ML 功能…

应用程序开发人员、数据分析师,甚至商业用户都开始看到这些能力的价值,并希望利用 ML 增强他们的工作流程或产品。但是他们不一定具备创建 ML 模型所需的专业知识。

为了应对这些挑战,Vertex AI 将用于构建 ML 的谷歌云 (GCP)服务整合在一个统一的 UI 和 API 下,以简化大规模构建、训练和部署机器学习模型的过程。

🧩顶点人工智能如何适应 ML 工作流程

下图(图 1)说明了 Vertex AI 如何将您需要的所有工具整合在一起,以实现典型 ML 工作流中的常见任务。我将简要介绍每个任务,特别是 Vertex AI 为您做了什么。

图一。ML 工作流中的常见任务和相应的 Vertex AI 产品。作者插图。

从 GCP 控制台选择 Vertex AI 时,您首先会遇到的屏幕之一是如下所示的仪表板(图 2)。在这里,您可以完成一些常见任务,例如创建数据集、查看您最近训练的模型以及最近批量预测作业的结果(稍后将详细介绍)。

图二。顶点人工智能仪表板—入门

现在,让我们深入了解具体的工作流程任务。

1.摄取和标记数据

ML 工作流的第一步通常是加载一些数据。假设您已经完成了必要的数据准备步骤,Vertex AI UI 会引导您完成创建数据集的过程。这也可以通过一个 API 来完成。

下面的屏幕截图(图 3)显示了在创建数据集的过程中可用的选项。您可以选择类型:图像、表格、文本和视频。UI 还会根据您想要解决的问题的目标或类型来指导您,并最终指导您从哪里上传数据。在我们的例子中,我选择了图像对象检测。

图 3。顶点 AI —创建数据集、数据类型和目标

在训练一个 ML 模型来预测一些事情之前,你需要标记你的数据,这样模型就有了可以学习的例子。

图四。顶点 AI —创建数据集,向数据集添加图像

假设您的目标是对图像中不同类型的车辆进行分类。如上所示(图 4),您需要提供您期望模型分类的对象的示例图像。这些图像需要被标记,以便模型知道一个对象类和另一个对象类之间的差异。

顶点 AI UI 让你创建注释集。注释集包含与数据集中的文件相关联的标签。在我们的例子中,它是对应于我们想要分类的不同车辆的标签。

当使用 AutoML 的图像数据时,建议每个标签大约有 1000 个训练图像。每个标签的最小值是 10,但是您提供的训练示例越多,在进行预测时模型的准确性就越高。

如果数据集中的文件还没有一组对应的标签,也可以在 UI 中交互完成。例如,在我们的用例中,我们可以围绕我们想要在训练图像中检测的车辆绘制边界框,如下所示(图 5)。

图 5。顶点 AI——数据集标记,围绕对象绘制边界框以进行分类

如果您没有时间标记数据集中的文件,您还可以请求人类数据标记服务

💡你可以在这里 阅读更多关于如何准备每种类型的数据集,你需要多少训练数据的指导方针,以及如何标记它们

2.模特培训

基本上有两种方法可以在 Vertex AI 中训练模型。这很大程度上取决于你的经验水平。下面的屏幕截图(图 6)显示了基于我们在上一步中加载的车辆数据集的可用模型训练选项。

如果您想在使用已经加载的数据集训练模型的过程中得到指导,而不需要编写任何代码,请使用 AutoML 。它还将为您处理任何数据准备步骤,例如特征工程。

图 6。顶点人工智能——模型训练选项

另一方面,如果你是一个更高级的用户,希望对培训过程有更多的控制,并且你已经在 TensorFlow、PyTorch、sci-kit learn 或 XGBoost 中预先构建了 ML 模型,请使用自定义培训选项。

在您可以使用 Vertex AI 上的自定义训练选项训练您的模型之前,您的代码需要被容器化。你可以从 Vertex AI 提供的预建容器图像中进行选择,或者你可以使用自己的自定义图像进行更精细的控制……在这一点上,我假设如果你正在考虑自定义路线,你可能知道自己在做什么!

🧐你可能已经注意到还有第三个选项: AutoML Edge 。对于与视觉相关的目标(图像和视频),您还可以训练一个模型,该模型可以导出以在移动设备或内部部署系统上使用,这些设备或系统不一定具有互联网连接。

📌旁注📌

边缘计算

我不会在这里详述,但是边缘计算越来越受欢迎。这基本上是一个概念,指的是在离行动发生地更近的地方用计算机做智能的事情。

以我们的车辆检测用例为例。想象一下,你管理着一个地方政府机构,但你的高速公路上没有基础设施或连接来建立一个可以连接到云的监控站,以从你的模型中获得预测。

如果您将 AutoML Edge trained 模型与连接到小型摄像机Raspberry PiCoral EdgeTPU 等低成本、低功耗的边缘计算设备相结合,它会突然赋予您在任何地方使用 ML 的能力!

👩🏻‍💻想试一试,但不确定从哪里开始?我哥哥用 TensorFlow Lite 和一个边缘 TPU 写了一个示例应用程序。

📌边注📌

3.估价

在你将你的 ML 模型投入使用之前,评估它是否适合你的目的,或者更确切地说,它是否预测了你所期望的值,这是一个好主意。

下面的屏幕截图(图 7)显示了在之前的车辆数据集上训练 AutoML 模型的评估输出。它显示了模型没有正确分类为“汽车”的对象,即“假阳性”,以及如何改进模型的提示-在这种情况下,向数据集添加更多的训练图像并重新训练。

图 7。顶点 AI —模型训练评估输出

Vertex AI 中的可解释的 AI 功能可以帮助你理解为什么你的模型会做出某些预测,显示哪些特征是最重要的,哪些特征归因于特定的结果。

下面的屏幕截图(图 8)显示了一个完全不同的模型和数据集的示例输出。具体来说,它使用了贷款违约数据集中的表格数据,目标是客户是否违约=“1”或=“0”。

图 8。顶点人工智能——基于表格数据的分类模型的可解释人工智能输出。

要素重要性图表告诉我们,在影响模型预测时,哪个数据列(或要素)的影响最大。

关于可解释人工智能的更多信息,请参见推荐阅读部分。

4.部署

因此,您已经训练了您的模型,并且您对输出感到满意。现在您需要一个地方来部署它!

如果您选择了 AutoML 路线,Vertex AI UI 为您提供了一个选项,您只需点击几下鼠标就可以将训练好的模型部署到一个端点,如下所示(图 8):

图 8。顶点 AI —模型部署选项,定义端点。

如果您走自定义路线,同样可以使用预构建或自定义的容器映像来服务预测请求,或者可以将模型部署到端点

对于 AutoML 和定制型号,您可以:

图九。顶点人工智能-模型部署选项,模型设置。

测试您的部署的机制将根据您的目标而变化,例如对于图像识别,您可以上传测试图像,UI 将显示预测的标签和置信度。

对于定制模型,您需要将您的容器化模型部署到一个端点。如果您使用一个预构建的容器来提供使用 TensorFlow、scikit-learn 或 XGBoost 的预测,那么您的预测输入实例需要格式化为 JSON。如果您使用自定义容器映像进行部署,情况类似。

5.获得预测

这就是“橡胶上路”的地方,您部署的模型已经准备好服务于预测,那么您如何得到它们呢?

从 Vertex AI UI(图 10)中,您可以选择一个模型并创建一个批量预测,即发送一组您希望模型在某个时间点(异步)返回预测的数据。在这种情况下,您不需要一定已经部署了模型。

将您的数据上传到云存储桶并选择它进行预测,显然数据类型会因型号而异。

图 10。顶点 AI —批量预测,新的批量预测。

您还可以获得在线预测,即发送您想要立即预测的单个实例或数据行(同步)。您可以通过从模型页面选择部署&测试选项卡或者从您的应用程序或网站调用 API 来实现这一点。

我们现在已经到达了 ML 工作流程的末尾。但希望你现在理解了 Vertex AI 在创建 ML 模型所需的最常见任务的上下文中做了什么——从数据摄取到将其投入生产。

📑总结和后续步骤

这篇文章的目的是在常见 ML 工作流任务的背景下提供顶点 AI 的简化解释。关于 Vertex AI 的内容比我打算在这里写的要多得多,所以我建议你看看推荐阅读部分。

总而言之,我喜欢 Vertex AI 的三点是…

  1. 易上手 —用户界面干净直观。将您需要的一切都集中在一个地方。从创建快速实验到支持完整 MLOps 管道所需的所有螺母和螺栓。
  2. 有多个入口点 —无论你的技能水平和经验如何,无论是使用 AutoML,还是使用完全定制的代码,你都可以在几分钟内开始使用 Vertex AI 创建模型。
  3. 可扩展的基础设施 —托管服务的优势之一是,您可以根据需要在试验期间花费尽可能少的资金,但有信心知道您的模型可以在生产中轻松扩展。

仍然不确定下一步该做什么,我创建了下面的决策树(图 11)来帮助指导你如何用 Vertex AI 创建你的第一个 ML 模型。

没有硬性规定,但如果你的回答大多是“不”,那么考虑自动路线,反之亦然。

好运和快乐的模型建筑!

图 11。顶点人工智能决策树——作者举例。

📚进一步阅读

  1. AutoML 入门指南,谷歌云,Vertex AI 文档
  2. ML 新手:顶点人工智能上的学习路径,伊万·纳迪尼,谷歌云
  3. 什么是可解释的人工智能?,奥马尔·马哈茂德,走向数据科学
  4. 在谷歌云上实现机器学习的最佳实践

权重和偏差有什么作用?

原文:https://towardsdatascience.com/what-does-weights-biases-do-c060ce6b4b8e?source=collection_archive---------8-----------------------

支持协作式 MLOps 文化的平台

照片由 Unsplash 上的 Piret Ilver 拍摄

TL;速度三角形定位法(dead reckoning)

  • Weights&bias(W&B)是一个面向开发者的机器学习平台,用于更快地构建更好的模型。
  • 它旨在支持和自动化 MLOps 生命周期中的关键步骤,如实验跟踪、数据集版本和模型管理。

🧠唤起了你的记忆-> MLOps

创建一个 ML 模型是容易的部分——操作化和管理 ML 模型、数据和实验的生命周期是事情变得复杂的地方。这就是为什么我们需要一套系统的方法和实践来应对这一挑战。

在深入研究 W&B 之前,🧐还想知道更多关于 MLOps 的事情吗?这里有一个我以前写的帖子:什么是 MLOps

🧠 唤起你的记忆- > MLOps

🚀入门指南

正如我之前的产品和平台相关的帖子一样,我决定在一个下午卷起袖子,给 W&B 一个旋转!

W&B 本质上是一个基于网络的订阅服务,个人账户是免费的,并提供 100 GB 的数据集存储和工件跟踪。你可以在这里报名:https://wandb.ai/site

W&B 由两个主要组件组成,工作空间和 Python API。事实上,下面是通过这两个组件提供的功能的一个很好的总结。

图 0: W & B —平台,来源:W & B 网站

框的顶行代表 MLOps 的使能器,底行显示相应的 W&B 特性,我将在这篇文章中涉及它们。

工作空间

当您登录 W&B 时,您通常会看到一个类似下图的仪表盘,它的左侧有一个简单干净的导航栏,您可以在这里访问最近的项目或创建一个新项目。您还可以查看您所属的团队、资源和设置。

图 1: W & B —工作空间

导航栏右侧的主窗格包含最近的“运行”列表,稍后会详细介绍。

Python API

这就是 W&B 如何与您现有的模型代码集成,并能够在工作空间中展示您的实验见解。

根据你喜欢的框架,有一些快速入门指南,在这篇文章中,我选择了 PyTorch。我使用 W&B github repo 中的 PyTorch 示例之一,使用时尚 MNIST 数据集训练一个 CNN 模型。这是一个类似于MNIST的数据集,但不是用它来训练一个对数字进行分类的神经网络模型,而是旨在识别服装、配饰和鞋类的常见类别,如靴子、运动鞋、外套和包。

用几行代码集成 W&B 真的很简单。我不会在这里重复快速入门,而是通过几个步骤:

  1. 在您的环境中安装 W&B Python API 库,并登录到您的 W&B 帐户(快速入门中提供了身份验证令牌)。
pip install wandbwandb login

2.在您现有的模型训练代码中为 W&B 库添加一个导入行,定义您想要在其中跟踪实验运行的项目,并配置超参数。

import wandbwandb.init(project="medium-post", entity="omerm")wandb.config = {"learning_rate": 0.01,"epochs": 10,...}

3.最后,在您的训练循环中添加一行代码,记录您希望在工作空间中跟踪和可视化的指标。

wandb.log({"loss": loss})

🧪(跑)宁和跟踪实验

MLOps 的关键支柱之一是能够进行各种实验,并有某种方式跟踪每个不同的配置如何影响您最感兴趣的模型度量。

当您运行包含给定实验的训练过程的代码时,项目中的 Runs 部分是 W&B 展示所有这些好的实验数据的地方,如下面的屏幕截图所示。

图 2: W & B —工作空间,项目运行

Runs 视图在左侧显示实验运行的列表,右侧的图表代表您选择记录的每个实验的指标。

例如,您可以搜索跑步、过滤并方便地按团队或指标分组。

多次实验中常见的指标由每次实验的不同颜色图表示。

单击一个单独的运行,您可以深入了解与实验相关的更详细的配置、指标和各种其他统计信息,如下面的屏幕截图所示。

图 3: W & B —工作区,运行

🧹扫描,又名模型优化

另一个属于模型实验和开发的常见 MLOps 任务是超参数调整。

我对超参数调优的类比是烘焙蛋糕🍰。请考虑一下,您为构建模型而编写的框架、训练数据和代码是您组合在一起制作蛋糕混合物的配料。

然后运行代码来训练一个模型,或者将蛋糕混合料放入烤箱烘烤。

您可以将超参数视为烤箱上控制蛋糕烘烤方式的旋钮,例如定时器、温度、对流类型等。改变这些旋钮会对你的蛋糕产生很大的影响;太热,它会燃烧,如果你不煮足够长的时间,它可能不会上升。

对于模型来说也是如此——超参数值,如学习率和批量大小,会对模型需要多长时间收敛(或最小化损失)产生很大影响。

失败是对错误预测的惩罚。也就是说,损失是一个数字,表示模型对单个示例的预测有多差。[2]

如果模型的预测是完美的,损失为零;否则损失更大。训练模型的目标是找到一组权重和偏差😏在所有示例中,平均损失较低。[2]

在 W&B 中,我们可以使用“扫描”来执行超参数调优工作,并轻松地将它们分布到多台机器上以加快进程。

很容易从工作区(如图 4 和 5 所示)或者通过代码中的 API 调用来创建和配置扫描。

图 4: W & B —工作区,创建/查看扫描

图 5: W & B —工作空间,扫描配置

一旦您设置了扫描的参数,您就可以用一个单行命令启动它,然后监视它的进度,特别是到目前为止已经完成的运行。

你得到了一些很好的视觉效果,总结了你的扫描结果。例如,一个图表突出显示了参数对于特定指标(如损失或准确性)的重要性。

我个人最喜欢的是平行坐标图,例如,它可以显示每次扫描的参数值及其对特定标签精度的影响,如下所示:

图 6: W & B —工作空间,扫描,可视化结果

最终,您可以使用扫描的输出为您的模型训练选择最佳超参数值。

💡专业提示,正如我在玩的时候发现的,贝叶斯或随机参数搜索的扫描将永远运行,除非你从命令行或工作区 UI 强制停止(ctrl-c)这个过程。或者,您可以使用计数标志指定代理应该提前尝试的运行次数:

NUM=10SWEEPID="ex56dcvv"wandb agent --count $NUM $SWEEPID

📊报告和协作分析

我不打算花太多时间来介绍这套功能,因为 W & B 文档已经很好地向您介绍了这些功能。

报告是让 W&B 对分享发现跨团队协作有用的基础部分。

您得到了一个超级丰富和灵活的概念——比如创建报告的“命令的类型”/“UI。它由面板组成,可以包含从文本和降价到预建图表的任何内容,这些图表直接从项目中的各种运行中提取数据。

图 7: W & B —工作区,报告

我最喜欢的报表元素之一是“文本表格”面板。这是一个非常有用的方法来可视化你通过 wandb.log()函数记录的数据,比如你的模型 评估的结果。

以时尚 MNIST 为例,我可以查看我的模型对数据集中的每张图片所做的预测。我还可以交互式地过滤该表,以显示不正确的预测、猜测与事实,如下所示:

图 8: W & B —工作区、报告、模型评估—文本表格

它确实消除了必须快速策划、总结和分享数据科学项目发现的挫折感,并且以一种非常干净的方式做到了这一点。

📝工件:数据集、模型修订和管理

W&B 工作区包括一个工件注册表。在这里,您可以看到与特定项目相关的所有工件,您可以通过实例化 W&B 工件对象并将其保存在您的代码中,将数据集和模型添加到该视图中,例如:

artifact = wandb.Artifact(name, “model”)artifact.save()

您保存的任何内容都可以在项目工作区中看到,如下所示:

图 9: W & B —工作空间,工件

简而言之,W&B API 使得存储关于数据集和模型的元数据变得很容易。还有一个有用的图形视图,它展示了您的工件的血统。

跟踪工件的能力是有用的,但是当涉及到监控部署到生产中时,这如何帮助支持我们的 MLOps 管道呢?这就是 W & B 的模型管理特性派上用场的地方!

在撰写本文时,W&B 的模型管理特性还处于测试阶段,他们正在“积极地构建模型注册和模型评估用例”。[1]

W & B 用于模型管理功能的设计是为了跟踪和报告模型的完整生命周期:

  • 数据集:模型在其上训练的数据集的精确版本
  • 代码:模型训练中使用的代码
  • 模型:训练模型本身的权重
  • 度量:模型在不同黄金数据集上的评估结果
  • 状态:每个模型在管道中的位置(例如“暂存”或“生产”)[1]

当涉及到实现 MLOps 管道时,这个列表无疑勾选了很多框。我在文档中使用了 github 的例子,让测试版的功能快速旋转了一下。

示例代码基本涵盖以下步骤:

  1. 为模型训练和评估生成数据集(下载 MNIST 数据),并将其发布到工件存储。
  2. 使用步骤 1 中的数据集训练几个模型,改变超参数以区分每个模型。该步骤还按照创建顺序将每个候选模型及其度量发布到工件存储中。
  3. 评估每个模型以确定其损失;损失最低的模型然后被“提升”到生产中。

⚠️请记住,当我说“升级”时,您的生产环境中并没有实际的模型部署。这纯粹是一个元数据标记,可以应用于工件以实现监控和跟踪的目的——但这并不是说您不能触发脚本来执行基于元数据更改的实际操作。

然后,您可以使用报告和包含编织组件的面板来可视化结果,如下所示:

图 10: W & B —工作区、报表、模型管理—编织

weave 组件类似于文本表,只是它用于从工件存储中提取数据。然后,您可以将其作为报告的一部分,显示有用的信息,如创建日期、损失、状态等。

⚖️初步印象

我从未打算写一篇全面的产品评论😅。但是我想至少说明一下 W&B 是做什么的,并分享我使用它的简短经验!这里有一个总结…

设置:

使用谷歌账户创建免费账户非常简单。我在使用 Google Colab 笔记本进行测试时,没有遇到向 W&B 认证的问题。

我没有深入研究更高级的特性,比如分布式清扫或者向一个项目添加多个贡献者。

易用性:

W&B 绝对不是绝对新手的平台。您不会在这里找到任何预构建的模型,或者用于构建模型的无代码/AutoML 选项。

然而,如果你在(或管理)一个由编写 python 代码的数据科学家/工程师组成的成熟团队中,并且一直在寻找一种更结构化的方式来跨项目协作,同时也推动 MLOps 文化,那么 W&B 可能是一个不错的选择。

开始从 W&B 获得价值是如此容易,这令人吃惊。只需几行代码和对最流行的 ML 框架的广泛支持,您应该能够非常快速地将其与您现有的 python 数据科学工作流集成。

我还想说文档非常好,有很多视频,在 Google Colab 笔记本上的工作示例和一个很棒的用户社区。

成本:

免费的个人账户为项目相关的存储和工件提供了 100 GB 的空间;使 W&B 工作空间工作所需的计算资源似乎也包括在内。

学术和开源团队有优惠。除此之外,他们还根据你想存储的数据量和你想追踪的物品数量,按“现收现付”的方式收费。

请记住,您仍然需要一个运行代码的环境,这意味着在模型训练或评估的过程中,您需要消耗任何资源。

总体:

我真的很喜欢为这篇文章测试 W&B。我认为随着产品的发展,它可能会成为一个更加端到端的平台,用于自动化 MLOps 流程,但目前它在实现 MLOps 文化方面做得非常好。

如果你已经看完了,那么谢谢你的阅读,我们下一集再见!👋

📇参考

[1] W&B,文档,[Beta]模型管理:https://docs.wandb.ai/guides/models

[2]谷歌机器学习速成班,降入 ML:训练与损失:https://developers . Google . com/Machine-Learning/Crash-Course/降入 ML/训练与损失

word2vec 实际学的是什么?

原文:https://towardsdatascience.com/what-does-word2vec-actually-learn-489f3f950388?source=collection_archive---------17-----------------------

思想和理论

以及如何从相似性函数中训练嵌入

用连续向量表示离散对象,即所谓的嵌入,是许多成功的机器学习解决方案的核心。这种优越性来自于这样一个事实,即与原始的离散对象不同,嵌入向量提供了一种紧凑的表示,它捕捉了原始对象之间的相似性。

在本文中,我们考虑著名的 word2vec 算法。Word2vec 简单直观。在高层次上,它认为频繁出现的彼此接近的单词应该具有相似的向量表示。具体来说,该示例

嵌入(男人)-嵌入(国王)~嵌入(女人)-嵌入(女王)

已经成为单词嵌入捕捉单词语义能力的典型代表。

然而,优化目标不能由明确定义的量来表示。作为比较,考虑使用矩阵分解学习单词嵌入。设 D 是由 m 个文档和一个 n 个唯一词的词汇组成的文本语料库。我们计算 n 乘 M 字,文档矩阵 M ,其中M【u,v】记录了字 u 在文档 v 中出现的次数,见图 1。

图 1: Word 文档矩阵。克里斯托弗·卡尔·克林拍摄。来源:维基媒体

矩阵分解被定义为

在下文中,我们将稍微滥用符号,并用 u 表示单词 u 及其嵌入向量。

在这种情况下,我们知道对于一个嵌入了 u 的单词,和一个嵌入了 v 的文档, uv 的内积保存了单词 u 在文档 v 中出现了多少次的信息。嵌入维数 d 越大,逼近性越好。不幸的是,word2vec 模型的优化目标没有如此清晰的表述。word2vec 中两个字向量的内积到底保存了什么?并且通过增加维度 d 嵌入一定会变得更好吗?

Levy 和 Goldberg 的一篇研究论文回答了这个问题[1]。在这篇文章中,我给出了[1]中的理论结果,然后展示了如何用它们来设计更一般的嵌入类。

训练单词嵌入:word2vec

让我们简单考虑一下负采样的 word2vec 是如何工作的。更全面的描述,我们参考这篇文章。设 D 是由单词、语境对组成的语料库。在 word2vec 中,单词 w 的上下文被定义为围绕 wk 单词,其中 k 通常是在 5 和 15 之间变化的小常数。我们想要学习单词嵌入,使得如果两个单词在语料库中频繁地同时出现,则它们的内积很大。

考虑一个单词 w 并且让 c 是其上下文中的一个单词。对于语料库中一起出现的词对 (w,c) ,我们希望嵌入的内积最大化 (w,c) 确实出现在语料库中的概率(表示为 D=1)。概率由 sigmoid 函数建模:

上面有一个琐碎的解决方案,我们可以简单地把所有的内积任意变大。因此,我们也引入否定对,即在语料库中不共现的对,其目的是:

该算法可以总结如下:

Algorithm word2vec1\. Assign a random *d*-dimensional vector to each word that appears in the corpus.2\. Traverse the corpus and generate pairs of words that appear in it. These are the positive pairs.3\. For each positive pair, generate *k* random pairs of words. These are the negative pairs.4\. Feed the inner products of the embedding vectors of positive and negative pairs into a binary classification model where the learnable parameters are the word embeddings.

我们在语料库上运行上述算法几个时期,以保证学习过程收敛到最优。

理论分析

固定一个单词 w 并考虑所有出现 w 的配对的目标。设 #(w,c) 为语料库中 (w,c) 对的出现次数。我们可以把目标写成

其中第二个乘积在我们生成的负对之上。

通过取目标的对数并观察每个否定词 cN 有机会被采样,我们得到:

我们来解释一下上面的内容。单词 w 是固定的,我们考虑语料库中出现的所有单词上下文对( w,c) ,并且我们对 k 否定对 (w,cN) 进行采样,使得每个单词 c 以概率#(c)/|D|被采样。我们希望正对的内积是一个大的正数。对于负对,我们希望内积是一个绝对值很大的负数。

注意,语料库中的对数|D|是恒定的。因此,通过将上述表达式除以|D|,目标变为

这已经给我们提供了一些直觉。目标是优化嵌入,使得它们反映正配对被采样的概率,而不是随机采样的配对。正对是以概率产生的

对于负对,两个词被独立地随机抽样,每个词都有概率

通过将内积设置为未知参数并求解相应的优化问题,我们可以找到内积的最优值:

在上面的 P(w,c)是单词对(w,c)出现的概率,P(w)是单词 w 在语料库中出现的边际概率。以上原来是一个在自然语言处理中广泛使用的词语关联度量,即 【点态互信息(PMI) 度量。

这真是太神奇了!事实证明,word2vec 本质上相当于矩阵分解,其中矩阵条目是词对之间的 PMI 得分。自 80 年代以来,PMI 作为一种距离度量被用于 NLP 相关的任务[2],远远早于单词嵌入概念的出现。

基于任意相似度函数的嵌入

现在很容易看出,我们可以简单地替换采样正负对的概率。我们只需要更新上面给出的 word2vec 算法中的第二步和第三步:

Algorithm sim2vec:1\. Assign a random *d*-dimensional vector to each word that appears in the corpus.2\. **Generate pairs of words according to a words similarity measure.** These are the positive pairs.3\. For each positive pair, **generate *k* random pairs of words by the independent sampling of word pairs**. These are the negative pairs.4\. Feed the inner products of the embedding vectors of positive and negative pairs into a binary classification model where the learnable parameters are the word embeddings.

为什么这很有帮助?这给了我们更多的自由来分配配对的重要性。我们可以变得有创造性,考虑不同的相似性度量。例如,单词之间的 Jaccard 相似度定义如下:

因此,如果 w 的存在意味着 c 也可能出现在文档中,则我们可以学习优化单词 w 和 c 彼此相似的目标的嵌入,反之亦然。在这种情况下,这一对(“凯拉”、“奈特莉”)的得分可能会高于(“数据”、“科学”)。目标变成了:

我们也可以模拟产生负对的概率。例如,Pr(w)可以是均匀分布,其中所有单词具有相同的被选择概率,而不管它们出现的频率如何。

从分布中取样

如果我们可以计算并存储所有对(u,v)的相似性,那么根据相似性进行采样就变得简单了:只需将相似性分数作为权重来存储对,并使用类似于 numpy.random.choice 的算法进行采样。然而,这在计算上可能是不可行的。

有不同的方法来处理具有大量线对的问题。一般来说,我们希望仅使用那些具有高相似性得分的配对作为阳性配对。

  • 如果您的相似性度量主要基于计数,那么数据的子样本将保留最频繁的对,但许多不频繁的对将被过滤掉。例如,我们可以只考虑语料库中文档的子集。诸如(“数据”、“科学”)之类的常用词对将可能保留下来。但这可能不是这种情况(“凯拉”,“奈特利”)。
  • 对于每个对象,只考虑最近的 t 个邻居。例如,我们可以使用 scikit-learn 的公开实现,它使用 kd-trees 这样的算法来加速相似性搜索。这些算法适用于维度不是很高的数据。否则,人们可以考虑像这样的方法,本地敏感散列将产生相似的单词。对于像 Jaccard 相似性这样的度量来说尤其如此。

实用的实现

为了便于说明,我们实现了一个简单的解决方案,用于从文本语料库中学习文档嵌入。这个问题与训练单词嵌入的问题是正交的:我们根据文档包含的单词训练文档的向量表示。

我们考虑 IMDB 情感分析数据集。该数据集由用户的电影评论组成,每个评论都标有积极或消极的情绪。

  • 在对文本进行预处理之后,我们使用 tf-idf 编码将文档转换成向量,这样每个文档
from sklearn.feature_extraction.text import TfidfVectorizer
tfv=TfidfVectorizer(min_df=0.00,ngram_range=(1,1))
tf_reviews = tfv.fit_transform(reviews)

参数 min_df 表示我们只考虑出现在至少 0.1%的文档中的单词。本质上,这防止我们使用可能只出现在几个文档中的非常具体的单词。

  • 对于每个输入向量,找到其最近的邻居。这可以通过使用现成的软件包来实现,例如 scikit-learn 的 K-nearest neighborhood,它返回以下各项的最近邻居:
from sklearn.neighbors import NearestNeighbors
nn_model = NearestNeighbors(n_neighbors=t, algorithm='auto')
nn_model.fit(tf_reviews)
distances, indices = nn_model.kneighbors(tf_reviews[idx])
  • 计算生成的 nt* 正对的相似度,在一个数组中对它们进行排序,并使用 numpy.random.choice()根据它们的权重进行采样:
eps = 1e-3
weights = [(1.0/(d+eps))**2 for d in distances[0][1:]]
weights = [w/sum(weights) for w in weights]
pos = np.random.choice(indices[0][1:], nr_pos_samples, p=weights)
neg = np.random.choice(nr_reviews, nr_neg_samples)
  • 使用 Keras 生成器生成正负对:
class PairsGen(tf.keras.utils.Sequence):

    def __init__(self, data, nr_pos, nr_neg, ...):

        """Initialization
        :param data: the sparse matrix containing 
        :param nr_pos: the number of positive samples per word
        :param nr_neg: the number of negative samples per pos. pair
        ...
        """
        ... def __getitem__(self, idx):
       """
       Sample self.nr_pos word pairs and self.nr_neg word pairs
       """
       .....
  • 将生成的对输入到具有嵌入层、计算内积的点层和具有 sigmoid 激活函数的输出层的浅层神经网络中:
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_2 (InputLayer)            [(None, 2)]          0                                            
__________________________________________________________________________________________________
context_embedding (Embedding)   (None, 50)           2500000      tf.__operators__.getitem_3[0][0] 
__________________________________________________________________________________________________
word_embedding (Embedding)      (None, 50)           2500000      tf.__operators__.getitem_2[0][0] 
__________________________________________________________________________________________________
dot_1 (Dot)                     (None, 1)            0           context_embedding[0][0]          
                                                                 word_embedding[0][0]             
__________________________________________________________________________________________________
flatten_1 (Flatten)             (None, 1)            0           dot_1[0][0]                      
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 1)            2           flatten_1[0][0]                  
=====================================================================
Total params: 5,000,002
Trainable params: 5,000,002
Non-trainable params: 0

上述方法将训练嵌入:

model.compile(optimizer='adam', loss= 'binary_crossentropy', 
              metrics=['accuracy', 'AUC'])
model.fit(generator, epochs=10)
Epoch 1/10
10000/10000 [==============================] - 153s 15ms/step - loss: 0.6354 - accuracy: 0.6667 - auc: 0.5359
Epoch 2/10
10000/10000 [==============================] - 152s 15ms/step - loss: 0.6129 - accuracy: 0.6868 - auc: 0.6151
Epoch 3/10
10000/10000 [==============================] - 151s 15ms/step - loss: 0.5680 - accuracy: 0.7292 - auc: 0.6963
  ...........
Epoch 10/10
10000/10000 [==============================] - 151s 15ms/step - loss: 0.3891 - accuracy: 0.8323 - auc: 0.8865

然后,我们可以提取每个单词的嵌入层,并对文档进行聚类(类似于图 1 中的 gif 所示)。我们观察到两个集群中的情感分布非常不同:

两个集群中的情感分布。图片作者。

密码

上述内容的 Python 实现可在以下网站公开获得:https://github.com/konstantinkutzkov/sim2vec

[1]奥马尔·利维,约夫·戈德堡。神经字嵌入为隐式矩阵分解。国家实施计划 2014 年:2177-2185

[2]肯尼斯·沃德·丘奇和帕特里克·汉克斯词语联想规范、互信息和词典编纂。计算语言学,16(1):22–29,1990。

你的 AI 想要什么?

原文:https://towardsdatascience.com/what-does-your-ai-want-4dd5a6044412?source=collection_archive---------26-----------------------

播客

瑞安·凯里对理解人工智能系统动机的探索

苹果 | 谷歌 | SPOTIFY | 其他

编者按:这一集是我们关于数据科学和机器学习新兴问题的播客系列的一部分由 Jeremie Harris 主持。除了主持播客,Jeremie 还帮助运营一家名为sharpes minds的数据科学导师初创公司。

人工智能安全研究人员越来越专注于理解人工智能系统想要什么。这听起来可能是一件奇怪的事情:毕竟,我们不就是通过为人工智能提供一个损失函数或一个要优化的数字来编程人工智能以获得某些东西吗?

嗯,不一定。事实证明,人工智能系统可以有基于其初始编程不一定显而易见的激励。例如,Twitter 运行一个推荐系统,其名义上的工作是找出你最有可能参与的推文。虽然这可能会让你认为它应该为匹配推文进行优化,Twitter 可以实现其目标的另一种方式是通过匹配推文——也就是说,通过将他们推向简单和党派的世界观,使人们更容易预测。一些人认为这是社交媒体对在线政治话语产生如此分裂性影响的一个关键原因。

因此,许多当前人工智能的激励已经在重要和显著的方面偏离了它们的程序员——这些方面实际上正在塑造社会。但它们之所以重要,还有一个更大的原因:随着人工智能系统继续开发更多能力,它们的激励和我们自己的激励之间的不一致将变得越来越重要。这就是为什么这一集的嘉宾瑞安·凯里将他的大部分研究集中在识别和控制人工智能的激励上。Ryan 是一名前医学博士,现在在牛津大学人类未来研究所攻读机器学习博士学位,从事人工智能安全研究。

以下是我在对话中最喜欢的一些观点:

  • 大多数从事人工智能安全工作的人都来自有效利他主义(EA)社区。EA 是一个哲学运动,专注于找出一个时间和金钱有限的人如何在世界上做得最好。EA 社区中的许多人都有一个长期的展望,随之而来的是对人类未来的关注,以及人工智能等技术的未来,许多人认为这些技术将决定人类在遥远的未来是繁荣还是失败。
  • Ryan 在人工智能激励方面的工作适用于许多当前系统,对于长期的人工智能校准工作也很重要。出于这个原因,这是一个长期和近期人工智能安全研究人员可以清楚地达成一致的领域。这种事情并不像你想象的那样经常发生,因为在人工智能安全社区内部正在就长期或近期安全问题是否应该优先进行积极的辩论。
  • 长期人工智能安全研究人员面临的挑战之一是抽象泄漏。这就是我们赖以描述世界的基本概念——比如“苹果”、“GPU”和“算法”——实际上是模糊的。例如,一个苹果实际上只是细胞的集合,这些细胞是原子和基本粒子的集合。但为什么这是人工智能安全的一个问题?我们使用抽象是因为我们的感官和计算带宽有限。我们的大脑不认为苹果是细胞的集合,尽管这是一种更准确的感知它们的方式,因为我们没有足够的计算能力和带宽来做到这一点。所以我们使用快捷方式,比如“苹果”这个概念,让这个世界变得足够可压缩,便于理解。但超级智能的人工智能系统不会面临这种限制:原则上,它们可以比我们更详细地看到世界,并可以通过发现我们无法发现的子抽象(如苹果中的细胞)之间的关系来对这些细节采取行动。因此,依赖于某些固定抽象(例如,“不要伤害人类”,或“不要吃那个苹果”)的人工智能安全策略,在面对超级智能系统时,可能远不如我们想象的有效。

你可以在推特上关注瑞安,或者在推特上关注我

播客中引用的链接:

  • Ryan 一直在研究的因果激励理论网站。
  • 这篇文章是关于预测人类和超人的人工智能何时会被开发出来。
  • 本报道关于人工智能时间轴。

章节:

  • 0:00 介绍
  • 1:20 瑞安的背景
  • 5:25 探索替代方案
  • 6:45 抵御可扩展的影响
  • 11:30 珍惜未来生活
  • 13:50 存在风险和 AI
  • 23:30 人工智能安全的进展
  • 34:30 人工智能战略的组成部分
  • 41:30 到达 AGI
  • 49:50 五年时间跨度
  • 55:10 冒险
  • 56:50 总结

是什么驱使人们去抗议,什么因素促成了最大的成功?

原文:https://towardsdatascience.com/what-drives-people-to-protest-and-what-leads-to-the-most-success-7ca6c7ad3547?source=collection_archive---------44-----------------------

围绕抗议活动的关键问题的数据驱动多学科方法。 附随代码可在 GitHub 上查看。

Teemu PaananenUnsplash 上拍摄的照片

在印度全国范围的农民抗议和正在进行的黑人的命也是命示威之间,过去几个月暴露了印度公民对邦政府和国家政府的一系列不满,促使他们进行抗议,以满足他们的要求。

这些当前的事件促使我们想要进一步研究抗议行为,并探索世界各地的抗议是什么样的,是什么驱使人们进行抗议,以及在决定政府行为者是否满足抗议者的要求时,哪些因素可能是重要的。我们选择对这些问题采取多学科的方法,对抗议和政治权力进行文献综述,从 Tableau 的数据可视化中汲取见解,分析统计上显著的变量,并在 r。

数据理解

除了我们的文献综述,我们还利用了来自群众动员项目的数据集进行分析,该数据集纳入了 1990 年至 2019 年期间针对政府的抗议活动,涉及至少 50 人。大众动员通过评估《纽约时报》、《华盛顿邮报》、《伦敦时报》等报纸来源来收集数据,并建立了需要退回和审查的关于特定抗议事件的文章基线。随后的数据集包括抗议的开始日期和结束日期、地点、抗议者身份、抗议者人数、抗议是否是暴力的、抗议者的要求、国家的反应以及描述抗议活动的注释/文本信息和背景等变量。有关数据收集过程和数据集的更多信息,请参见大众动员数据项目手册和用户手册。值得注意的一个有趣区别是,虽然有几个地区和国家的抗议数据,包括北美国家加拿大和古巴,但没有美利坚合众国的抗议数据。

数据清理

通过特征工程、列删除和检查空值和错误值,使我们的数据集适合分析的过程非常漫长。经历的步骤包括:用“.”替换所有的空格和单元格在具有“NA”的 it 中,删除不相关/无意义的字段,例如 ID、CCode 和 Sources,创建连接开始日/开始月/开始年的新开始日期字段和连接结束日/结束月/结束年的新结束日期字段,通过计算开始日期和结束日期变量之间的差创建用于拒付长度的新列,删除具有多数空列/单元格的行,删除全部空列,将字符串数字变量转换成数字(例如“十几”), 使用“注释”列中的上下文信息创建一个新的基于文本的 csv,最后创建一个状态响应虚拟变量,作为我们的目标变量,通过 if/else 功能将负面的高级状态响应(例如,杀戮、枪击、忽视)转换为“0”并将抗议者要求的状态调节转换为“1”。

探索性数据分析

为了获得见解,我们在 Tableau 和 R 中进行了一系列探索性数据分析,评估变量的分布和计数,并回答了有关世界各地抗议活动特征的关键问题,如下所示。

可视化效果

作者图片

法国和英国等欧洲国家的抗议活动是世界上最多的。在亚洲,韩国和中国是抗议率最高的国家。此外,委内瑞拉和巴西是南美抗议数量最多的国家。

作者图片

这些年来,抗议活动的数量缓慢增加,其间有一些波动。2011 年,我们经历了自 1990 年以来的最高峰值,随后在 2015 年出现了更高的增长,共有 857 次抗议。

作者图片

在 1 月到 5 月期间,我们观察到抗议活动的高潮。在这个范围内,三月的抗议活动最多。此外,在任何一年的下半年,抗议活动的数量似乎都较少。

作者图片

抗议者的要求涉及各种社会、经济和政治问题。最常见的需求与政治行为和过程有关。这一类别包括与政治改革和保护民主程序有关的任何要求。

作者图片

政府最常见的反应是无视抗议,然后驱散人群。这些类型的政府反应是意料之中的,因为大多数抗议活动被归类为非暴力。

作者图片

抗议活动最常见的驱动因素是对政治行为和政治程序问题的回应,其次是劳动工资纠纷。这些反映了抗议时间最长的类型;因为相同的两种类型的需求具有覆盖最高天数的抗议。类似地,抗议次数和平均持续时间最少的是那些涉及社会限制要求的抗议。

作者图片

各州如何应对暴力和非暴力抗议的分类,每种类型的比例相似,但非暴力抗议的频率较低。

作者图片

大多数抗议活动都没有得到政府的通融,这使得探究导致政府通融与合作的因素变得有趣起来。此外,抗议活动的持续时间通常不到一天,中位数为 0,平均值为 1.664。然而,最大值是一个持续数年的抗议,持续时间为 938 天(出于比例目的,未在可视化中描述)。

作者图片

尽管媒体经常描述抗议活动(如文献综述部分所述),但大多数抗议活动并不涉及抗议者的暴力行为。

作者图片

出现频率最高的参与者类别是 100–999,后面是 50–99,表明他们通常处于较小的一方,但是这通常没有被报告,因为 NA 的显著水平表明了这一点。

您可以使用我们的 交互式仪表盘继续探索抗议数据的计数,点击此处链接(预览如下),并按国家、时间范围、抗议者要求和州响应进行过滤!

测试

除了可视化,我们的探索性分析包括测试变量的独立性和统计显著性。最有趣的发现包括国家反应和长度之间的统计显著正相关(抗议时间越长,它与政府的通融越相关),卡方检验向我们揭示了国家反应虚拟变量和抗议时间长度以及长度和抗议者暴力(存在或不存在)之间的关系不是独立的。

造型

在对各种模型进行迭代和比较,并将分类变量转换为因子以便能够在模型中使用它们之后,最适合我们的数据并为我们提供最多见解的是一个简单的广义线性回归模型** (glm)和一个更加微妙的随机森林模型。这些模型可以用来预测围绕抗议的某些因素是否可能导致国家对请求的通融。此外,他们还帮助确认了在我们的探索性数据分析阶段确定的、在州对抗议者要求的适应中被确定为重要的变量。**

作为参考,广义线性模型是“普通线性回归的灵活推广,允许响应变量具有非正态分布的误差分布模型”(维基百科),随机森林模型通过“在训练时构建大量决策树并输出作为类模式或单个树的均值/平均预测的类”来运用集成学习(维基百科)

在使用所有解释变量和所创建的状态响应虚拟字段的目标变量构建线性模型后,统计显著变量(< 0.05) included length, protester violence, participants category, and protester demand. Additionally, based on the factors the outputs showed us that specific statistically significant positive relationships were the year 2008, the region of Asia, length, protester violence, a participants range of 2000–4999, and the protester demand of price increases/tax policy . Negative ones included the years 1992, 1993, 2003, 2011, 2016, 2019, the regions Central America, South America and Europe, startmonth, and the protester demand of police brutality. The model had an adjusted R-Squared value of 0.6073, suggesting 60% of the data is explained by the model. More insights into the outputs of this linear model can be found by running the code in the accompanying GitHub.

The trained and tested random forest model had a lower r-squared of 0.1195, but still provided us valuable information based off the node purity and decrease in error with the additional amount of classification trees utilized (500 trees) as can be seen below:

****

The variables our random forest model opted to include (listed in order of node purity) were: 年的 p 值、开始日期、开始月份、参与者 _ 类别、抗议者需求、长度、数据区域和抗议者暴力)(关于抗议中是否使用暴力的虚拟变量)。节点纯度越高,表明越多的数据属于一个类,因此变量能够被这些变量更明确地分割,因为它们在确定一个州是否可能满足抗议者的要求方面更重要。

最后,我们对数据集中提供的上下文注释进行了文本建模,以查看在描述抗议活动时不同措辞的最高频率。出现频率最高的术语或词干是抗议( 20,222) 、警察( 10,252) 、治理( 7984) 和德蒙斯特( 7597) 。在下面的可视化中可以看到更多,较大且更集中的术语是在数据集中出现频率较高的术语:****

文献综述发现

互联网上有大量与抗议相关的文献,涵盖了一系列主题,包括抗议是否有效,世界各地的大规模抗议有哪些共同点,以及媒体如何描述它们。

虽然在本文的探索部分分享的国家通融与被忽视的负面回应/要求的数量可能令人沮丧,但研究向我们揭示了在正确的环境和情况下,抗议实际上是有效的,有价值的。

正如《大西洋月刊》上的一篇文章所写的那样,“在短期内,抗议活动可以起到一定程度的作用,以至于他们可以吓唬当局改变他们的行为。抗议是信号:“我们不高兴,我们不会容忍事情的现状。但要做到这一点,“我们不会容忍”的部分必须是可信的。如今,大型抗议活动有时缺乏这样的可信度,尤其是因为数字技术让组织抗议变得如此容易。” (来源)

此外,促使成功的最有说服力的抗议因素被发现是抗议活动的规模和范围,以及抗议者之间是否达成一致,他们的信息是否统一(来源)

至于现在媒体描绘抗议的方式,通常是以负面的视角,描绘暴力和敌意。这可能会适得其反,最大限度地减少抗议者的运动,因为这助长了抗议者只是愤怒和煽动暴力或伤害社区的言论,而不是有效地展示这些情绪是如何源于他们所反对的系统性问题的。

用来描述这一点的框架被称为抗议范式,它被定义为“社会抗议报道的惯例化模式或隐含模板”。《牛津手册》将此描述为“当运动开始变得更大或更具破坏性,足以引起媒体关注时,他们收到的报道往往是对抗性的——正如跨越数十年媒体报道抗议运动的大量研究所确立的那样。记者对反战抗议、劳工抗议、堕胎法抗议、反政策示威、反核运动和反全球化抗议等给予了敌意对待——通常是通过嘲笑它们或将其描绘为暴力的。” (来源)

结论&含义

关于促成抗议成功的因素,一些最重要的要点是,抗议的时间长度和暴力行为与国家的通融程度有着统计上的显著正相关。然而,正如一些文献指出的,这些可能是大规模问题的症状,需要长期和更暴力的抗议,因此更重要,从而促使政府做出更多回应;重要的是要区分它,就像我们通篇提到的其他关系一样,不一定是因果关系,但仍然是一种关系。

此外,在当前的社会政治对话中,一个特别相关的统计数据是,迁就需求和警察暴行抗议之间存在显著的负相关(同时,与价格上涨/税收政策问题之间存在正相关,表明政府更有可能迁就处理这些话题的抗议)。此外,从全球角度来看,中美洲、南美洲和欧洲的政府不太可能回应抗议者的要求,而亚洲政府则更有可能。这一分析中有趣的下一步将包括对言论自由的地区政策、政府体制结构的审查,以及纳入美国的抗议数据。

随着抗议活动能够通过社交媒体和数字化社区平台更快地进行规划和实施,看看这种形式的社会变革的未来将会是一件有趣的事情。虽然一些研究人员认为,由于其频率增加或减少到趋势化/不可描述的事件,这可能导致他们潜在地失去可信度和做出改变的能力,但其他人认为,如果做得正确,并且在允许的环境下,它将继续作为一种从外部点燃政治变革的方式。

鉴于当前的事件和稳定的抗议流交织在我们的媒体流和生活中,我们希望这种对过去近 30 年来世界各地抗议活动的多学科一瞥能够提供一些有趣的见解,了解政府抗议发生在哪里和为什么以及何时更有可能取得成功!

关于机器学习,爱因斯坦能教给我们什么

原文:https://towardsdatascience.com/what-einstein-can-teach-us-about-machine-learning-1661e26bef2c?source=collection_archive---------29-----------------------

思想和理论

利用机器学习中的对称性

在许多方面,物理学和机器学习有一个共同的目标:为观察到的现象建立模型。在实现这个目标的过程中,物理学家早就理解了对称性的重要性。在这篇文章中,我们来看看物理学中的对称思想是如何作为机器学习的指导原则的。

这篇博客文章是由来自的奥利弗·科布和的卡根诺娃共同撰写的。

雪花的对称性。[图片由 Damian McCoigUnsplash 上拍摄]

在过去的十年里,机器学习取得了长足的进步,特别是在涉及复杂高维数据的问题上,如计算机视觉或自然语言处理。然而,与生物智能相比,对机器智能的一个常见批评是它从例子中学习的效率低下。一个小孩可能只通过少数几个例子就能学会识别一种新动物,而现代机器学习系统可能需要数百甚至数千个例子才能完成同样的壮举。

物理学中的对称性

作为人类,我们根据强有力的物理法则形成周围世界的模型,其中许多是我们下意识学到的。物理学家探索这些定律和模型是如何被形式化和发现的。他们的目标是制定模型的基本过程,准确地描述和预测观察到的现象。

物理系统可以在不同的抽象层次上建模。用来解释天文现象的模型通常利用不同的物理定律来解释亚原子粒子。然而,有一个原则贯穿于所有抽象层次的物理定律:必须尊重自然界已知的对称性。

关于物理定律的对称性的概念与它在描述物体对称性时更熟悉的用法略有不同。如果一个物体在某种变换下保持不变(即不变),则认为它具有对称性。例如,一个球体在任意旋转下保持为球体的事实意味着它表现出旋转对称性。

另一方面,如果支配一个系统行为的物理定律以同样的方式适用于该系统,则该定律被认为是关于某种变换对称的。

一个简单的例子是平移对称,它满足的定律以同样的方式应用于一个系统,而不考虑系统的位置。例如,一个球落在一所房子的一个房间里的行为与一个球落在另一个房间里的行为是一样的(忽略任何外部因素,如任何轻微的微风)。

第二个例子是旋转对称,它满足的定律同样适用于一个系统,不管它面向哪个方向。第三个例子是时间平移对称性,满足不随时间变化的定律。

物理学家早就意识到物理定律的时空对称性。然而,在 20 世纪早期,对称性在物理学中的重要性经历了一次范式转变。

爱因斯坦没有从物理定律出发,推导出相应的对称性质,而是在他 1905 年关于狭义相对论的著名论文中,用对称原理作为出发点,推导出新的物理定律。

十年后,德国数学家艾米·诺特进一步提升了对称性在物理学中的作用,他在抽象代数和理论物理两方面都做出了开创性的贡献,而当时女性在很大程度上被排除在学术职位之外。她证明了物理定律的每一个连续对称都存在一个相应的守恒定律。例如,动量守恒定律可以从物理定律的平移对称性中推导出来。类似地,角动量守恒来自旋转对称,能量守恒来自时间平移对称。

阿尔伯特·爱因斯坦(左)和艾米·诺特(右)。【图片来源于维基共享资源:爱因斯坦诺瑟

物理学的基本定律,如能量守恒和动量守恒,实际上是从宇宙的对称性而来的。

利用对称性作为指导原则来发现相应的规律和模型来描述观察到的现象不仅在物理学中有很大的用处,而且还可能在机器学习中得到利用。

机器学习中的对称性

机器学习实践者非常清楚对模型进行约束以控制偏差-方差权衡的重要性。当寻找解释变量和目标变量之间关系的模型时,在机器学习中,我们首先指定一类模型,我们假设这些模型包含一个充分描述的模型。在这一课程中,我们寻找最能描述观察到的现象的模型——即最大化拟合经验测量的模型。

重要的是要指定一个足够宽的类,使其包含一个准确描述关系的模型,同时也要有足够的限制,使其不会被过度适应数据的模型超越。这通常很难实现,因为当解释变量和目标变量之间的关系没有被很好地理解时(毕竟这是我们希望学习的),机器学习是最有用的,因此如何设置这些界限并不明显。例如,我们知道图像(即像素强度阵列)和对应于图像语义的类别之间的关系非常复杂。我们如何指定一个模型,在相对受限的情况下允许这样的复杂性?

归纳偏差引入机器学习模型来解决这个问题的一个特别有效的方法是利用对称原则,这在这一点上应该不会令人惊讶!

给定一大类模型,我们可以立即忽略绝大多数不符合已知问题所展示的对称性概念的模型。本着与爱因斯坦发现狭义相对论时相同的精神,我们首先注意到应该满足的对称原则,然后反向工作,找到一个最能描述观察到的数据的模型。

卷积神经网络中的对称性

这个原则如何在机器学习中得到利用的典型例子是为计算机视觉问题设计卷积神经网络(CNN)。正如在神经网络的任何使用中,目标是从低级特征中分级学习高级特征。计算机视觉中最重要的对称是平移对称:无论出现在图像的什么位置,猫眼都是猫眼。

平移等方差图。给定一幅图像(左上),应用卷积核(𝒜)以获得特征图(右上),然后平移(𝒯)该特征图(右下)相当于首先平移图像(左下),然后应用卷积核(右下)。【猫和特征图图片来源

CNN 通过其架构的设计来编码平移对称性。每个神经元对应于输入的空间区域,并且仅连接到前一层中神经元的相应邻域。至关重要的是,每一个神经元都以完全相同的方式与前一层中的相应邻域相关联。因此,无论特征(例如猫眼)位于图像中的何处,它都会以相同的方式刺激相应位置的神经元。卷积运算符的这一属性称为平移等方差,如上图所示-将运算符应用于要素,然后进行平移,相当于平移后应用运算符。

通过这种仔细的架构设计,我们将模型的空间限制在那些坚持平移等价这一常识性属性的模型上。启发式地,我们可以考虑通过保证一个模式只需要学习一次来帮助我们的学习算法。我们不必在所有可能的位置学习模式,而是通过在模型本身中对平移等变进行编码,确保模式可以在所有位置被识别。

将对称性集成到平面图像及其他图像的机器学习中

将平移对称性集成到机器学习模型中是推动过去十年计算机视觉革命性进步的关键因素之一(结合数据和计算能力的激增)。

这当然有助于 2D 图像具有简单的平面形式,平移对称性可以以直观和计算有效的方式进行编码。对于涉及具有更复杂(非平面)几何形状的数据的问题,遵守期望的对称原则可能更困难。处理复杂的几何需要更先进的数学机器,催生了几何深度学习的领域。几何深度学习社区已经朝着这个目标取得了显著的进展,我们将在未来的帖子中进一步考虑这一点。

参考

[1]布雷丁&卡斯泰拉尼,物理学中的对称性:哲学反思 (2018), arXiv/0301097

[2]希金斯、阿莫斯、普法乌、拉坎尼埃、马泰、雷森德、勒施纳,走向解纠缠表象的定义( 2018), arXiv:1812.02230

[3]昆斯塔特,物理定律的对称性( 1999),https://theory . uwinnipeg . ca/users/Gabor/Symmetry/slide 15 . html

2021 年英伟达 GTC 发生了什么

原文:https://towardsdatascience.com/what-happened-on-this-2021-nvidia-gtc-7f9b348fc5c6?source=collection_archive---------24-----------------------

回顾今年 NVIDIA GPU 技术大会上发布的内容,以及在会议期间关于深度学习和人工智能的讨论

今年的 GTC 以英伟达首席执行官和创始人黄仁勋的主题演讲开始,宣布了今年将发布的内容。自从 COVID 以来,世界上大多数的商务会议都是在我们自己家里的不同寻常的房间里举行的,这次开幕主题演讲也不例外,詹森在他自己的厨房里录制了这次演讲。去年的版本也是在那里制作的,可能证明了 2020 年和 2021 年看起来仍然非常相似。

英伟达首席执行官黄仁勋从烤箱中拿出一些基于 Arm 的 CPU。图片来自 YouTube

Jensen cookings 今年的主菜:“Grace”,NVIDIA 发布的首款 CPU。Grace 基于 Arm,这在该公司去年 9 月打算收购 Arm 后并不奇怪。政府监管机构仍在考虑是否批准合并,但英伟达并没有停止展示这款 CPU,称它将使数据中心实现比基于英特尔 x86 处理器的英伟达 DGX 系统高十倍的性能。Grace 将于 2023 年上市,并且已经有一个感兴趣的早期采用者:瑞士国家超级计算中心,用于其即将推出的名为 Alps 的超级计算机。菜单上的其他菜肴是其新一代数据处理单元 BlueField 和 DGX SuperPOD,这是一种旨在用于云人工智能研究的基础设施,如此庞大如果你不是索尼,你可能不会考虑购买它,但你现在可以用你的份额每月订阅 9000 美元。

但在英伟达,并非所有东西都是硬件。他们发布了 Omniverse,一个 3D 设计和模拟的合作平台。设计需要高性能的计算机,这通常是会议和并行工作的一个限制,尤其是在疫情时间,当你不能只是走到你的队友的桌面。有了 Omniverse,任何人都可以在任何电脑上进行任何项目,甚至可以在同一时间进行。自去年 12 月以来,宝马、Foster + Partners 和 WPP 等大型设计团队一直在使用 Omniverse beta。

开场主题演讲以 Jensen 宣布“最终, Nvidia 是一种工具,一种让你成就一生事业的工具”而结束,然后整个厨房被一部分一部分地拆除。抽屉、勺子、椅子和家具从场景中飞走,让我们想知道这个厨房是真的还是只是一个宇宙模拟。然后,GTC 开始了,在一千多个虚拟会议中,演讲者讨论了如何将 Nvidia 作为一种工具来使用。

格雷斯,詹森今年的主菜,肯定一个英特尔不会要求晚餐。图片来自 TecnoBlog

会议议程非常庞大,以至于很难阅读一天的会议列表。题目清单很广,涉及的行业也很广。它可以是像“奇异期权风险的神经网络这样具体的东西,或者是一个甚至会让你爷爷感兴趣的标题,比如“人工智能的下一个十年”。Nvidia 强调了一些会议,但除此之外,你还可以在议程中找到自己的方式,找到让你着迷的东西。

米罗普斯要去哪里

随着每天越来越多基于人工智能的系统投入生产(终于!),MLOps 每天都在变热,GTC 议程也不例外。MLOps 是由 WWT 在他们的谈话中提出的,是关于进化还是消失的问题。他们共享一个模板,说明这种演变在组织内部应该如何发生,逐步采用 MlOps,不仅在专注的团队中,而且让每个人都成为其中的一部分。有这么多关于 MLOps 的说法,有时它进入了我们都想去的天堂,但不知道它看起来像什么。这就是为什么我特别喜欢 Moses Guttmann 在 ClearML 会议上的演讲,他向展示了地球上的 MLOps 看起来是什么样子:在你的机器上创建一个模板训练,让它在本地工作,然后只需将该模板部署到远程机器上,进行多次实验,搜索超参数的最佳组合,尝试不同的数据集,所有显示的内容都直接使用 ClearML 共享他的屏幕。正如 Nick Elprin 在 J & J talk 上说的那样:请不要试图自己建造所有的基础设施!这是一个很有吸引力的问题,但是你的工程师专注于你的企业特有的问题会更有价值”

摩西·古特曼为他的会议创造了一些好的迷因。来自 Nvidia 会议的照片

ML 框架的发展方向

如果 Nvidia 本身是一个工具,那么像 TensorFlow 和 PyTorch 这样的 ML 框架就是让我们使用另一个工具的工具。这些框架在去年经历了疯狂的发展,试图跟上学术研究和行业趋势。API 变得越来越大,ML 学习模型不再由代码和权重来定义,而是现在的 模型=代码, 正如 sou Smith chint ala 在这个演讲中所展示的。除非模型稳定在某个稳定的架构中,否则我们不会在专用硬件上看到太多的发展,尽管这不会发生, ML 框架必须跟上高速的变化 Soumith 揭示了,如果通过先验的数据有效模型最终成为一切,那么 ML 实践将包括将知识主体的先验应用于特定案例,就像现在律师工作时所做的那样。

Keras 和 tensor flow 的未来五年的方向确实是将 priors 库民主化,试图通过创建一个可重复使用部件的生态系统来改进 UX 设计以提高生产率:计算机视觉问题的 KerasCV,语言问题的 KerasNLP,甚至“反重力应该像进口反重力一样简单”。ML 框架的最终 UX 设计只是一个提供用户数据集和优化指标的 API,算法将为用户做一切事情。用户工作将集中在问题规范和治疗数据集。深度学习应该对每个人都是真正可能的,因为今天的任何人都可以制作一个网站。在 PyTorch 的状态会议上,同样的重点放在了更好的前端 API 愿望上,他们宣布了一个非常有趣的版本: PyTorch profiler,它将让我们在 Tensorboard 选项卡上看到模型及其不同层的性能分析。

研究的方向

更多的学术研究也在 GTC 占有一席之地,卷积网络之父 Yann LeCun 提出了自我监督学习的基于能量的观点,既介绍了基于能量的模型如何工作,也介绍了它们如何用于 SSL。Sepp hoch Reiter(他提出了消失梯度问题)介绍了现代 Hopefield 网络,谈论了它们如何工作,以及它们如何被集成以充当“带记忆的深度学习”。以方程式和积分为特色的这些绝对不是你想以 1.5 倍的速度观看的那种演讲。

行业的发展方向

业界是如何采用这么多 AI 开发和发布的工具的?GTC 会议是一个很好的机会,可以直接从创造者的口中听到行业趋势。

会议在哪里举行

在封锁期间,虚拟会议比以往任何时候都更加突出,它的强制和快速采用为许多使用人工智能的创新解决方案打开了大门。自动检测有人举手要求关注,实时语音到文本的转换和不同语言之间的翻译,甚至让人工智能总结呼叫和讨论要点,这些功能都将破坏我们在虚拟会议上的体验。

零售业何去何从

在开始谈论这个行业之前,需要强调的一点是,根据专家在电话中的说法,人工智能的目的不是取代人类的认知能力,而是相反,增强和自动化最适合机器的任务(这是一个长期的辩论,你可以同意或不同意这个论点)。无论是简化复杂的任务,还是在人类失误高于机器的单调活动中减少失误。这里是一些应用人工智能最相关的领域,从价格优化、异常检测、流程自动化、产品推荐、人工验证、库存盘点和用于客户关怀的聊天机器人开始。

汽车行业的发展方向

尽管人工智能机器人制造汽车看起来很特别,是下一级创新的例子,但这已经是过去的事情了。为了给你一个接下来会发生什么的例子,你可以参考宝马的使用案例,他们已经在 Nvidia Omniverse 的工厂中做了一个 3D 数字双胞胎来训练新的机器人&人。是的,你没看错:没有现场培训,这将在时间和金钱方面产生巨大的开销,相反,他们利用这个 3D 双胞胎。这不会就此停止,因为这打开了一个的可能性世界,在那里可以测试工厂的变化,员工的新工作路线,硬件空间利用率,等等。

数字艺术和电影摄影的发展方向

借助惊人的渲染,一个伟大的生态系统和毫无疑问先进的人工智能技术,像 Adobe 和 Nvidia Omniverse 这样的公司正在改变数字艺术方面的世界。覆盖广泛用途的 Adobe Photoshop现在推出一项新功能,将语义分割提升到一个全新的水平,基本上你可以立即删除任何背景,甚至重建图像中以前没有的运动或地方,这是另一项人工智能技术 GANs 完成的。

但是电影摄影呢?这是一个令人兴奋的话题,因为它融合了许多人工智能技术,是应用人工智能的最具创造性的方式之一!对这种技术的偷偷窥视包括具有 3D 数字化的人类运动捕捉,其中它们包括拾取真实的人类姿势并输出 3D 虚拟角色,语音到面部表情,其中给定音频输入,它创建 3D 网格面部,与语音的情感和自动场景生成对话。所有这些为来自世界各地的热情的人们创造了一个完美的组合,让他们使用这种前瞻性的思维工具来表达他们的创造力。要看到这一点,你可以参考这篇演讲:Omniverse Machinima 简介

我们要去哪里

今年有这么多的发布,这么多令人鼓舞的演讲,在协助尤尔根·施密德胡伯在他的会议上做了精彩的人工智能历史回顾之后,人们怎么能不相信我们已经非常接近奇点了呢?我推荐听听加里·马库斯更保守的演讲,他提醒我们关于人工智能发展的许多先前失败的预测。我们一直被大数据和深度学习所困扰,这对学习有好处,但对抽象却不利。另一方面,经典的 ML 模型有利于抽象,但不利于学习。Gary 呼吁混合模型,因为我们需要一些方法来表示关于空间、时间和因果关系的知识,只有真正的推理和认知模型才能带领我们到达那里。

希望这篇简短的评论能让你了解 2021 年的 GTC。当然,这里还有很多其他值得一提的演讲,所以如果你想特别推荐一个,请发表评论!

我们是 eidos.ai,这是一个与创业公司和前瞻性公司合作的人工智能开发实验室。通过 info@eidos.ai 或我们的网站https://eidos . ai联系我们

[1]詹森厨房从去年到现在没有太大变化,勺子在同一个地方,盐和胡椒粉也是。所以我们可以说他做饭没做新 GPU 多。

机器学习在医疗保健领域的进展如何?

原文:https://towardsdatascience.com/what-has-machine-learning-been-up-to-in-healthcare-a137db866f05?source=collection_archive---------35-----------------------

对已经完成的工作进行高层次的审视

上周,我写了一篇关于 Eva 的博文,Eva 是一个强化学习系统,希腊政府部署该系统是为了在边境监控和分配稀缺的 COVID 测试[2]。这个话题让我好奇机器学习在医疗保健中的其他用途。我四处搜寻,找到了一个关于自然的相对全面的观点[1]和一大堆关于这个主题的报告。恕我直言,这些信息足以让我发表一篇博文。

疾控中心Unsplash 拍摄的照片

数据

你可能已经听到小道消息,机器学习是从数据开始的。在公共卫生领域,数据通常来自两个来源。

调查和政府报告

卫生部门和组织通过多种机制获取这类数据。他们可以被动地接受您的医疗保健提供商报告的数据(上次您看医生时,他们是否会询问您除电子邮件密码之外的所有信息?).或者,他们可以主动向您的医疗保健提供者索取信息,例如在 covid 的情况下。

个人生成的数据

两个字:社交媒体。(还有 FitBit 数据之类的其他东西,但没那么朗朗上口)。最重要的是,这种类型的数据通常与地理位置相关联,并带有时间戳。然而,这种数据的非结构化本质带来了一系列挑战。

公共卫生中的机器学习

这个主题有四个子类别值得注意。

识别因素及其与健康结果的关系

这里有几个例子。ML 可用于确定影响疾病结果的遗传因素[3]。在其他新闻中,ML 已被用于定位登革热(一种蚊子传播的病毒感染)最严重的地区[4]。

干预设计

在这方面已经取得了一些进展。ML 已被用于解决抑郁管理[5]、减肥自我效能[6]、戒烟[7]和基于血糖反应的个性化营养[8]。

结果预测

天啊,这里已经做了很多了。是我还是这个类别感觉像是由 Kaggle 竞赛驱动的?下面是已经完成的工作的一个小例子。

2017 年,一组研究人员设计了一种多步建模策略来预测心力衰竭的再入院率,AUC 为 0.78,电子病历数据的准确率为 83.19%。这比当时 AUC 在 0.6-0.7 范围内的现有预测模型有所提高。[10]

同样,在 2018 年,为了绕过从标准化电子健康记录(EHR)数据中提取精选预测变量的劳动密集型任务,一组研究人员提出了基于快速医疗互操作性资源(FHIR)的患者全部原始 EHR 记录的表示。然后,他们表明,基于这些数据训练的深度学习模型可以实现高精度的任务,如预测住院死亡率、30 天计划外再入院、延长住院时间以及患者的所有最终出院诊断。[9]

此外,在 2018 年,一个深度卷积神经网络(inception v3)在癌症基因组图谱的整片图像上进行训练,以准确地将它们分类为 LUAD、LUSC 或正常肺组织,其 AUC 高达 0.97。根据作者的说法,这种表现可与病理学家相媲美。[11]

资源分配

嗯,Eva,一个分配稀缺的 covid 测试的强化学习系统,就属于这一类[2]。同样,在 2019 年,Chun-Hao change 和他的同事提出了一个深度强化学习(deep RL)模型,该模型在 MIMIC-III [12]上进行训练,MIMIC-III 是一个数据库,包含了 2001 年至 2012 年期间在 Beth Isreal Deaconess 医疗中心重症监护病房停留的 40,0 00 多名患者。对于这些患者,您需要进行测试来预测有害事件。然而,测试是昂贵的。通过学习最小化测试成本和最大化预测增益的策略,深度 RL 模型将测量总数减少了 31%。[13]

总结

我希望这篇文章对你有用。我喜欢写这篇文章,因为 ML 及其应用发展如此之快,课堂教学已经跟不上了。了解 ML 很酷,但对我来说,更令人兴奋的是了解它在现实生活中的实际应用。你可能已经注意到了,基于我的兴趣,我更喜欢某些话题。但是我包含了一些链接,以防有什么引起你的兴趣。

保持联系

我喜欢写关于数据科学和科学的文章。如果你喜欢这篇文章,请在 Medium 上关注我,加入我的电子邮件列表,或者成为 Medium 会员(如果你使用这个链接,我将收取你大约 50%的会员费),如果你还没有的话。下一篇帖子再见!😄

来源

[1] 公共和人口健康中的机器学习和算法公平

[2] 希腊用强化学习遏制新冠肺炎的涌入

[3] 从全基因组关联研究数据推断风险因素和结果之间的因果关系

[4] 登革热的全球分布和负担

[5] 利用情境感知开发抑郁症移动干预

[6] 健康行为改变互联网故事的自动索引:减肥态度试点研究

[7] 走向戒烟的移动健康干预

[8] 机器学习在现实生活数字健康干预中的应用:文献综述

[9] 一种可扩展的、精确的深度学习与电子健康记录

[10] 使用电子病历范围的机器学习对医院再入院率进行预测建模:使用西奈山心力衰竭队列的案例研究

[11] 使用深度学习从非小细胞肺癌组织病理学图像进行分类和突变预测

[12] MIMIC-III 临床数据库演示

http://proceedings.mlr.press/v97/chang19a.html

是什么帮助我成为更好的数据分析师

原文:https://towardsdatascience.com/what-helped-me-become-a-better-data-analyst-92cff70c5e10?source=collection_archive---------19-----------------------

办公时间

艾米丽·莫特Unsplash 上拍摄的照片

我的博客之旅继续!

由于我将于今年 8 月开始我的 MBA 之旅,我将离开工作场所 10 个月。之后,我肯定会继续从事与数据相关的工作,所以我想总结一下我作为数据分析师的第一年里发现的真正有帮助的东西,也作为我自己的记录。网上有很多有用的资源,从中我学到了很多。因此,我尽我所能保持这篇文章的独特性和个性化,以减少重复。

在我深入探讨这些技巧之前,让我分享一下我对优秀数据分析师的定义,也就是说,我想成为什么样的人,以及过去几年我一直在努力达到什么样的目标。请注意,这可能与特定公司或一般市场对数据分析师的期望大相径庭。😃

回到 2019 年底,我在我的 LinkedIn 上写下了以下来自 Cabo da Roca 的惊人观点的新年决心(https://www . LinkedIn . com/posts/wenling-y-25146887 _ wordoftheyear-2020 resolution-activity-6618244271386447873-bz3D),在这里我已经有了一个在我看来怎样才算是一个好的数据人的大致想法。这些要点仍然有效:帮助利益相关者提出正确的问题,讲述好的数据故事,快速学习

作者图片

在我的第一篇博文中,我分享了一些关于数据叙事的良好实践。在这里,我想扩展一些其他的技巧。它们是:

🧭找到了“指南针”关键绩效指标,当你产生新的见解时,用它们作为快速健全检查的基准。这允许在新的环境中快速学习。

🔢尽可能用数据备份自己。我的意思是…在我们的标题中有一个词“数据”,对吗?😉

⛳️从进球开始。一直都是。这有助于你发现自己作为数据人员的真正价值,而不仅仅是“编写查询、创建仪表板和发送电子表格”。

🙌建立你的责任感,把自己作为一个平等的、有能力的、值得信赖的商业伙伴,并从你的同事那里获得同样的责任感。

在数据的海洋中找到自己的指南针。

在与我现在的雇主共事的五年中,我和我的团队一起创建并共享了大量的仪表盘和报告,构建了一个全公司范围的 OKR 系统,为我们的董事会创建了一个回报计算器,我可以自豪地说,我已经成为最熟悉我们数据的人之一。尽管如此,我仍然每天都感觉到我在学习一些关于我们业务的新东西,因为我们总能找到一个新的视角来审视我们的数据。

在保持我们的质量标准的同时,驾驭这种复杂性,也就是说,使我们自己适应新的环境,并快速准确地为我们的利益相关者产生洞察力,这绝对是一个挑战。对我帮助很大的一件事是记住 5-7 个高层次的关键绩效指标,当我产生一些新的见解时,总是用它们作为快速理智检查的基准。

照片由奥斯汀·尼尔Unsplash 拍摄

我如何决定要记住哪些 KPI?AARRR 框架提供了一个很好的方向:

  • 收购:我们的总客户群有多大?每月获得多少新客户?
  • 激活:我们的注册漏斗的转化率是多少?有多少客户每月至少注册一次?
  • 留存:我们应用的第一天留存率(%)是多少?
  • 推荐:有多少客户(%)是通过我们的推荐计划获得的?有多少客户(%)推荐他们的家人和朋友使用我们的产品?
  • 收入:有多少客户(%)为我们的业务创造了收入?在过去 12 个月中,我们的平均月收入是多少?

注意我们不需要记住非常精确的数字,而是数量级。根据您企业的规模,对于绝对数字,我们可能只需要回忆它是 10K、50K、100K 还是 1M,以及 10%、50%还是 90%的百分比。这听起来熟悉吗?是的,这是费米估算的一个应用!

最后提醒:在一个快速增长的企业中,这些数字需要定期更新。😃

为什么这很有帮助?想象一下,现在我正在处理一个紧急的临时请求。我编写了一个查询来查看一个我以前从未查看过的客户群。查询输出表明,该细分市场的 70%产生了收入。等等——我记得在整个客户群中,这个比例应该大约是 15%。70%对 15%……听起来好得难以置信!我立即怀疑我的查询有问题,并很快发现我遗漏了一个 WHERE 子句。唷!我头脑中的 15%帮助我进行了快速的理智检查,并使我们避免了潜在的不准确的交付。

这就是为什么我把这些数字称为“指南针”——在海上旅行时,我可能不记得确切的坐标,但只要我知道南方在哪里,我就总能很快找到出路。

尽可能用数据备份自己。

我的头衔中有一个词“数据”,我知道它让别人对我有什么期望。即使我没有提供任何数据或见解,我也总是尽可能确保我的论点得到数据的支持。这里的“数据”一词并不一定意味着你必须知道确切的数字或数学公式。更重要的是指定你将查看哪些数据,以及如何使用它们来支持你的论点并做出更好的决策

弗兰基·查马基Unsplash 上拍摄的照片

我想用一个面试问题作为例子来解释这是如何工作的。在一次面试中,有人问我如何帮助评估目录活动的效果。首先,我从开始将成功指标定义为活动的转换率,即收到目录的人中有多少人后来购买了产品。然后面试官问我,“听起来很棒。您如何确定哪些购买是由目录触发的?”—这实质上是数据的跟踪和收集。我建议我们在目录中嵌入一个促销代码,供用户在结账时输入,并使用该代码来识别目录接收者的购买行为。面试官点点头,又追着问了一个问题,“如果有的用户不使用推广码怎么办?”我回答说,“我们可以应用一个归因窗口,也就是说,我们将目录发送后 X 天内收件人的所有购买行为归因于该活动的购买行为”——这就是人类逻辑发挥作用以覆盖数据跟踪的局限性的地方。面试官同意了这个提议,并问了最后一个问题,“你如何确定 X?”。我说,“我会查看类似活动的历史数据,以此作为基准。如果我看到这些收件人 90%的购买是在目录发送后 14 天内完成的,那么我会将 14 天作为归因窗口,因为这样我就可以覆盖至少 90%的转化。如果没有可用的历史数据,我会设计一个小规模的实验来收集数据

我真的很喜欢这个面试问题,不是因为我得到了所有的分数,而是因为它像日常生活中与同事的对话一样自然,它涵盖了使用数据支持决策的简单流程。根本不需要复杂的计算。😃

从目标开始。一直都是。

当我开始担任初级数据分析师时,我认为我的首要任务是准确地提供人们对我的要求。如果有人来找我要月度销售报告,我会确保提供准确的数字——不是月度客户数字,也不是每日销售趋势,而是我们每个月完成的确切销售额。

没过多久,我就觉得这可能不是最好的工作模式。有时人们要求每月的销售报告,我给了他们,我们都很高兴。然而,第二天他们又来问我“嘿,实际上我需要这份报告来为我们的销售代理设计一个新的奖金方案。我们可以按代理人姓名细分吗?”肯定的!但是,如果我能事先很好地理解我同事的目标,以便我们能在第一次尝试时一起提出更好的解决方案,那不是更好吗?

有时我也会收到一些请求,这些请求在最初的形式下并不完全有意义。为此,我可以分享一个更具体的例子。在我们目前的设置中,我的团队负责帮助产品经理为他们的功能设置成功指标和数据跟踪。有一天,一位 PM 找到我,让我实现一个后端事件,当某个文档被发送给用户时就会触发这个事件。我和他一起做的第一项检查是看他希望通过跟踪来衡量什么 KPI。原来,他想看看那些在他们的帐户中看到该文档的用户中,有多少人会采取某种行动。然后我向他解释说,我们实际上已经有了一个前端事件来跟踪用户对该文档的查看,他建议的新后端事件是不必要的,它不会帮助衡量他想要查看的 KPI(因为它跟踪的是发送操作而不是查看操作)。我的同事最终采纳了我的建议。通过这样做,我实际上没有交付我的利益相关者要求我做的事情,但是我交付了任何价值吗?我觉得可以!我帮助我的同事澄清了围绕 KPI 定义的一个误区,并为我们节省了一项需要耗费工程能力的任务——就像每个初创公司一样,我们在这个问题上面临着非常严重的资源限制:)

Munkhtuvshin 拍摄。上的 T 开启

我从这个例子中得到的启示是,作为一名数据人员(无论是数据分析师、数据科学家、数据产品经理……所有这些与数据相关的非工程角色如今似乎越来越模糊),有时你不是通过完全执行他们的愿望,而是通过帮助他们实现最终目标,来为你的同事和你的企业创造价值。首先,与他们一起思考他们的真正目标是什么,而不是一开始就接受他们的要求。实际上,我会引用我的一位主管的话,“初级数据分析师和高级数据分析师的区别在于:初级数据分析师总是做他们被告知要做的事情,而高级数据分析师则不会。

关于这个主题的最后一个加分点是:理解你的利益相关者的目标,即你提供的数据或见解将如何帮助他们做出决定,以及他们是什么样的决定,这绝对有助于你理解你作为一个数据人的真正价值,并增强你的信心。你的真正价值不是通过你交付了多少仪表盘或分析来证明的,而是通过你的交付物对业务成果和用户体验的影响来证明的。

建立你作为一个值得信赖的商业伙伴的责任感。

我们已经在很多地方看到和听到“利益相关者管理”这个词——实际上,说实话,太多了,我开始有点厌倦它。😅互联网上有许多关于这一领域的精彩内容,所以在这里我只想分享两件事,作为一名数据人员,我发现这两件事对于赢得利益相关者的信任非常有用。在我的第一篇博客文章我如何用数据讲故事中,我提到了一个技巧“彻底了解你的数据”作为保持人们对数据信任的一种方式,我在这里分享的两件事会更加通用,也可以转移到其他职业。

一件事是在进行大型分析或项目时,让你的主要利益相关者充分了解主要的里程碑和障碍。“大分析”指的是这种类型的分析,通常有:1)探索性和开放式的研究问题,2)源数据质量的高度不确定性,因此可交付性(记住——垃圾进,垃圾出😉),以及 3)相当长的交付时间线(例如,> 1 周)。

在这种情况下,我通常做的是与我的利益相关者一起安排时间表上的 2-3 个接触点,在这些接触点上,我简要描述了我们所处的位置、我们已经取得的成绩以及我们面临的障碍。不一定要开会,一封简短的电子邮件也可以。这个接触点的目标不是简单地让人们知道“嘿,我们正在做我们的工作”,而是寻求对我们的方法和交付的即时反馈,以及在我们遇到困难时寻求支持。通过这样做,不仅我的利益相关者,而且我自己都将拥有更大的交付透明度,更大的适应范围的灵活性,更有价值的改进反馈,以及更多的支持(如果我们需要的话)!最终,我们将一起做出更明智的决策。****

我发现的另一件有价值的事情是,永远保持闭环。每天,我们都会提供新的见解和数据,进行精彩的交流,新的想法和反馈会出现在我们的桌子上。在一个快速变化的工作场所,很容易失去踪迹,并以未解决的积压工作结束——这让我感到没有成就感。因此,大多数时候我确保我的可交付成果得到了反馈或认可(至少对那些有高层次目标的人来说)。如果我提供了任何见解或数据,而不仅仅是发送了一张 excel 表或 PDF,我会随时征求反馈(例如,“如果您还有任何问题,请告诉我们”),并且在我得到确认的“是的,我们现在没有任何问题”之前,我不会认为任务已经解决。这有助于我保持可维护的积压,因为我知道几乎没有任何债务,只是有更多的新想法有待探索。最终,这有助于我的工作模式的效率和可靠性,因为我不必担心有一天一些未解决的任务会像地雷一样突然出现并阻碍其他交付。

照片由车窗上的挡泥板拍摄

事实上,这不仅是为了树立我作为一个平等、有能力、值得信赖的商业伙伴的形象,也是为了让我的同事对我有同样的责任感。这个过程绝对不容易,但我相信最终这有助于在我和我的同事(至少是那些目标一致的人)之间培养强大的信任和纽带。

就是这样!

一如既往,让我知道你是否觉得这有用或分享任何反馈!

是什么帮助我们在一家金融科技初创公司建立了强大的自助分析

原文:https://towardsdatascience.com/what-helped-us-build-strong-self-service-analytics-in-a-fintech-startup-ef9f0333b94d?source=collection_archive---------14-----------------------

行业笔记

培训我们的内部用户成为有效和负责任的数据内容消费者(和创造者)

城市教会克赖斯特彻奇Unsplash 上拍摄的照片

我在以前的工作中做过的最自豪的工作之一是,我们在组织内部建立了强大的自助服务分析。

为了避开围绕自助分析的所有讨论,一个非常简单但有力的论点是,很长一段时间以来,只有两个人(我和另一个 BI 分析师)的 BI 团队是一个 300 多人的组织的数据“大脑”,也就是说,几乎所有内部决策和外部投资者报告的数据都来自我们的 BI 平台。

我们成功做到这一点的关键原因,或者引用一位同事的话,“你们正在做其他创业公司需要 10 名分析师团队才能做的事情”,是因为从很早的阶段起,我们就开始培训我们的内部用户成为有效和负责任的数据内容消费者,其中一些人还是创造者。通过这样做,大多数首要问题(例如,这个月的销售额是多少?)可以由内部用户自己回答,只需很少或不需要 BI 团队的帮助,我们的 BI 团队可以专注于为二级问题生成更深入的见解(例如,为什么本月的销售数字下降了?)更重要的是,在整个组织中培养数据文化。

如果我曾经对构建自助分析的重要性有过任何怀疑,那么我最近在 INSEAD MBA 项目中的经历应该已经消除了这种怀疑。当我发现一门名为“不确定性、数据和判断”的核心课程完全是关于应用统计学(相关性、假设检验、回归等)来回答现实生活中的商业问题,并且我们被鼓励(尽管不是强制要求)使用 R 来解决我们的商业案例时,我感到非常惊讶——嗯,我没想到在离职后这么快就有机会开设 R studio😃。另一个惊喜即将到来,那就是我们将会有另一门名为“管理客户价值”的核心课程,我们将会使用 Python 进行细分分析。这两门课程清楚地告诉我们一个不可再忽视的趋势,即从数据中做出合理判断的能力不应再是一群头衔中带有“数据”的人的特权。相反,这种权力应该民主化,每个需要做出商业决策的人都应该有权根据高质量的数据做出高质量的判断。

受这两门课程的启发,我决定回顾一下过去五年在一家金融科技初创公司构建自助 BI 的经历,并分享一些思考。

在深入讨论细节之前,我想再分享几个支持性统计数据,来说明为什么我认为我们拥有强大的自助式分析:

  • 当我离开前雇主时,我们是一个 300 人的团队,其中 200 多人在我们的 BI 平台上有一个活跃的用户账户(我们使用 Superset 和 Mixpanel)。
  • 我们的用户遍布组织的所有级别和所有部门——无论是市场营销还是销售、工程师还是 UX 设计师、初级经理还是高管。
  • 在 Superset 上,我们有 2.7K 图表和 200 多个仪表板,涵盖了我们业务的所有方面。
  • 随着时间的推移,越来越多的内容由非 BI 用户创建。据我所知,最近 30 天内创建的仪表板中有 50%是由 BI 团队以外的用户创作的。

事后看来,我认为我们在克服共同挑战和不断改进工作方面做得很好。

📍将 BI 职能定位为一个可靠的业务合作伙伴而不是服务台。

🎬创建一个有利于商业的商务智能词汇表来帮助新员工。

👟期望管理是成功培训的关键——对 BI 团队和内部用户都是如此。

🌱不断指导你的同事帮助他们提高技能,成为你的数据盟友。

定位:BI 职能部门是可靠的合作伙伴,而不是服务台。

虽然没有在任何工作场所的文件中正式说明,也没有作为标语挂在墙上,但我相信,当我作为第一个 BI 人加入公司时(并且在相当长的一段时间内),我对 BI 职能的理解绝不是服务台或接收订单并简单地给你所需数据集的图书管理员。相反,BI 职能应该是业务利益相关者的可靠伙伴。

服务人员和合作伙伴之间的主要区别在于,合作伙伴并不总是对所有请求都答应。如果需要的话,伴侣会挑战你,并试图征求我们需要的真正见解,而不是照字面理解你的话,好像它们是要实现的最终要求。

向内部数据用户明确这一定位至关重要— 它提醒他们,他们的请求与他们有利害关系,在某种程度上,数据/见解交付的质量以及解释在很大程度上取决于他们的数据素养。换句话说,为了做出高质量的决策,他们需要高质量的判断,而高质量的判断需要高质量的数据/见解,这反过来又要求他们提出高质量的问题。此映像的出现为构建自助服务分析奠定了基础。

我在之前的文章 中分享了一个将此付诸实践的例子,它帮助我成为了一名更好的数据分析师 。每次当你或你的团队接到某人的要求时,不要把他们的要求当成是他们如何提出的,而是试着和你的同事一起思考他们真正的目标是什么。

入职:为新员工创建一个业务友好的商务智能词汇表。

我想分享作为我们自助服务分析基础的文档——BI 词汇表。它既不是一个指标层定义,也不是一个领域页面,而是一个面向业务的关键指标和公司术语的访问页面,特别是对于新加入者(不仅仅是 BI,还有其他团队)。

它按字母顺序排序,每个条目如下所示:

作者照片

  • 定义:我们通常包括行业范围的通用定义(因为新加入者可能对通用定义相当熟悉)和公司特定的定义。
  • 公共 KPI:这里我们包括一些与这个实体相关的指标以及一个仪表板链接。注意,这并不取代我们的度量定义(用 dbt 维护),并且应该与度量层保持一致。因此,为了减少更新的频率,我们只包括 2-3 个最常用的 KPI,它们不会轻易改变。
  • 内部链接:这里我们链接到真实的来源,也就是一些领域定义页面。请注意,该页面并不旨在成为领域知识的真实来源,而是为新加入者提供一个不那么令人生畏但更有利于业务的关键实体的页面。

培训:期望管理是关键——对 BI 团队和内部用户都是如此。

像其他公司一样,我们定期组织培训计划来教我们的同事使用我们的 BI 平台,例如,他们应该查看哪些数据集,如何创建可视化,如何编写简单的 SQL 查询等。

我从一开始就注意到,尽管许多参与者表示他们对数据感兴趣并注册了培训,但他们中很少有人能真正参加培训或真正提高了技能。例如,在会议结束后,我仍然会收到参与者提出的本应由他们自己解决的问题。不是说任何人在他们的热情上撒谎,愚蠢或懒惰,我相信更好的期望管理会带来更好的结果。

更具体地说,这些实践可能是有帮助的:

  • 将你的训练内容分成不同的等级,以满足不同的需求。并不是每个人都想成为数据专家,有些人可能只是想看看他们的团队仪表盘,大致了解一下他们的表现。不是每个人都有成为数据专家的天赋——有些人可能已经在 Excel 中苦苦挣扎了。因此,期望每个人从相同的培训内容中获得相同的价值是过于理想化的。为了克服这一挑战,我将我的内容分为三个级别,并为每个级别定义了先决条件和预期结果:1) 数据内容消费者从 Excel 的初步知识开始,并希望知道在哪里可以找到仪表板,并在完成级别 1 后阅读可视化;2) 数据内容创建者在 1 级之后开始,并被期望基于给定的数据集创建或转换简单的可视化以回答一级问题,例如,创建饼图以显示我们的用户的年龄分布;3) 高级数据内容创建者从第 2 级开始,如果他们想要更多给定数据集以外的内容,则需要创建高级可视化(如直方图、旭日图等)并编写简单的 SQL 查询。当宣布培训计划时,这些定义被明确地陈述,以便人们知道他们可以从每个级别期望什么,以及他们被期望做什么来达到那里。他们可以自由选择他们想去的地方。
  • 清楚地陈述你的期望,并跟踪培训项目的成功。一旦我们定义了三个级别,我们还会为每个级别设计作业,并明确说明参与者需要完成作业,以便他们可以进入下一个级别。通过这样做,我们确保只有那些真正热爱数据的人才会留在这个项目中。此外,这也有助于 BI 团队跟踪项目的成功。如何温和地执行这确实是一个挑战,坦率地说,随着团队的成长,我发现很难执行。

建立关系:不断指导你的同事,帮助他们提高技能,成为你的数据盟友。

我们自发开始做的一件事是每周与关键数据用户进行接触。后来,当团队有了新的领导者时,这正式成为每周数据诊所。我们在这里做的一些例子:

  • BI 团队分享最近的见解,这些见解可能会引起更广泛的受众的兴趣,而不仅仅是请求这些见解的人。例如,负责客户满意度的产品经理最近要求我们分析为什么留存率下降,然后我们发现这与一个新的货币化功能有关。这将是一个完美的话题,在更广泛的一轮讨论中涉及到货币化项目经理。
  • 我们与项目经理、UX 设计师和工程师一起审查产品仪表规范,并就活动名称、活动属性、KPI 定义等提出建议。如果你感兴趣,这里是我对产品仪器仪表的学习总结。
  • 我们为快速技术问题提供即时支持,例如,编写查询或创建可视化的困难。

确定潜在的高级用户/数据内容创建者并与他们建立良好的关系至关重要。这可以通过回答一些问题“谁通常会向您提出数据请求?”来轻松实现,“他们的问题有多深?”以及“他们对数据的熟练程度如何?”。一旦你确定了这些用户,当他们向你寻求问题或帮助时,给予他们更多的关注。随着时间的推移,他们可以发展成为事实上的 BI 人员以及他们自己团队中解决数据问题的关键人物。在我的前雇主,我们能够在营销、产品和战略方面发展这样的超级用户,他们帮助分享了一些本应属于 BI 的流量。😉

这里没有讨论的是工具和技术部分——我将在另一篇文章中分享我在这方面的学习和思考!

我在维罗纳大学教授数据科学的收获

原文:https://towardsdatascience.com/what-i-have-learned-from-teaching-at-data-science-faculty-at-the-university-b4df12c31745?source=collection_archive---------18-----------------------

针对教育工作者和自学的数据科学家的提示

在知识商品化、研究商业化的时代,如何学习

一张来自的照片&id = 236&tipo BC = 5&lang = en

半年前,我同意为自己进行一次小小的冒险。我的大学教授兼论文导师卢卡·迪·珀西奥邀请我加入我的第二个母校维罗纳大学的一个全新的数据科学学院的教学团队。几年前,我做过多次讲座和技术讲座,但从来没有对学生的长期结果负责过,所以我决定接受挑战。

通过写这篇文章,我的目标是:

  • 教育家们正在寻找更注重结果的学术教学方法的替代品
  • 自定进度的学生,他们的目标是取得成绩,并接受现实世界的评判,而不是同龄人的评判

我将数据科学作为一门学术学科、行业专业和商业领域的方法与大多数教育材料中流行的方法大相径庭。我是一名实践驱动型企业家,为了成为我所在行业的佼佼者,我获得了数学学位,这极大地影响了我的观点和教学方法。我认为这种观点对教育工作者和学生是有用的,他们看到数据科学领域的当前教育系统没有达到它应该达到的目标。

我邀请您参加本周四在俱乐部会所举行的讨论,思考这个话题:

https://www.joinclubhouse.com/event/PNzJO11K

开始前我就知道的问题

https://www.azquotes.com/quote/1447564 在这篇文章的主题中引用了彼得·泰尔的一段相当激进但却非常真实的话

我本人在乌克兰和意大利的两所大学获得了学位,并自学了多门欧美 MOOCs 课程,因此我非常明白,大学不是万能的,也不会让你为现实生活做好准备。然而,我喜欢这个想法,现代大学:

  • 吸引并建立一个由专注于单一领域的人才(学生、研究人员、教师)组成的社区
  • 给你一种独特而深刻的知识,这是用其他教育材料或短期课程很难获得的

现实是不同的,尤其是在数据科学中,作为科学、工程和商业交叉的新学科:

  • 数据科学项目吸引了 a)学者、b)行业专业人士和 c)工程师,他们都被相似的趋势团结在一起,但几乎拥有正交的知识、技能和心智模型
  • 大多数教育项目要么 a)遵循“经典”的统计学习书籍,要么 b)“酷而新潮”的博客,两者都被商品化并被 MOOCs 和在线教育者广泛访问和解释

简而言之,这个系统没有给出它所承诺的东西,在这场游戏中,每个人都是输家:政府(输掉了科学竞赛)、企业(无法参与全球竞争)、大学(失去了人力资本),当然,最重要的是,失去了生命年数的学生。

我决定改变的是

我在维罗纳大学学习的课程叫做“编程”,旨在为学生将来学习统计学习、数据库等课程做准备。我已经将一学期课程的目标设定为:

学生了解计算机科学和科学计算的基础,并准备好独立创建简单而有用的终端客户数据驱动的解决方案

为了实现这一点,我将课程分成了 4 个逻辑块,并根据每一个逻辑块来评估期末项目:

编程基础校准

即使跳过这些步骤很有诱惑力,但这只会损害而不是促进职业发展。图来自https://explain programmer humor . com/post/184600929440/skipping-steps

在这门课上,有来自经济学、物理学、应用数学、计算机科学和其他系的学生。我决定确保在几周内每个学生都能打开并研究任何类型数据的主要属性:表格、图像、文本、声音等等(当然是真实的数据集)。为了做到这一点,每个实验环节我都进行小规模的实时编码,在这里我可以跟踪每个人是否可以在 15-20 分钟内打开并使用任何类型的数据集。我使用了你可以在 Kaggle 找到的基本数据集,包括 Numpy、Pandas、OpenCV 和 Matplotlib。

计算机科学和科学计算

然后,我想直观地了解我们在上一节中所做的数据分析在幕后是如何工作的:

  • 首先,我们致力于广义上的数据结构:从内存和不同变量(变量、熊猫数据帧、张量)如何存储到列表、哈希表和树,以及实际用例和从头开始的实现
  • 然后,我们研究了经典的算法(排序和搜索);机器学习算法,这些算法通过循环和 Numpy 支持的向量化实现,并比较了不同情况下的性能

我推荐以下材料:

https://www.labri.fr/perso/nrougier/from-python-to-numpy/ https://www.coursera.org/specializations/algorithms

以人为本的软件开发

学术界的典型软件开发,插图来自https://blogs . egu . eu/divisions/GD/2018/09/19/reproducible-computational-science/

在学院中编写的代码是众所周知的噩梦,所以我专门用了一整块来介绍 OOP,并在几个场景中实践它:

  • 重构现有代码:实现线性和逻辑回归,并围绕它们构建类层次结构
  • 从头规划项目结构:使用 ide 代替笔记本来构建项目,定义库需求,创建 UML 图

结合我的实用技巧和诀窍,我主要遵循了两个很棒的演示:

当然,我已经展示了最好的开源项目是如何组织的。

现实世界的解决方案

学术界和现实世界的另一个比较,插图来自https://twitter.com/phdcomics/status/604978904558792704

最后但同样重要的是,我想确保学生能够将他们的解决方案作为对其解决方案的最终客户有意义的东西来操作。为了解释什么是“有用的数据驱动产品”以及它通常是如何被创建的,我简单地介绍了一下:

https://pair.withgoogle.com/guidebook/ https://course.fullstackdeeplearning.com/

关于操作化,我提供了三种选择:分析仪表板、交互式 GUI 或 REST API。对于前两种 app,我推荐了 Streamlit,对于后者——Flask。此外,我还展示了解决方案的 dockerization,并将其发布在 Heroku 上。

结果发生了什么

我真的对项目的最终质量感到惊讶(以一种好的方式)——具有更深 CS 背景的学生用从游戏数据中学习的算法创建了他们自己的游戏;数学和经济学专业的学生已经开发了很酷的应用程序,用于分析他们朋友和亲戚的真实业务数据。我想提几个同意分享他们经验的学生的项目:

基于深度学习的披萨分类器

作者插图

乔迪·达尔·科尔索 ( LinkedInEmail )对算法进行了最深入的研究,并开发了一款应用程序,使用最先进的深度学习模型从照片中识别披萨的成分。看看资源库中的源代码和算法的使用是如何组织的。没有和披萨相关的项目就没有好的课程:)

影响者的社交媒体图表分析

作者插图

Marta boni oli(LinkedinEmail )专注于非常实际的应用——基于社交图谱分析为每家公司找到合适的影响者。她开发了一个工具,你可以进入你的目标公司,它分析周围的人的网络,并找到谁能最好地推广他们的产品!

推特情感分析

作者插图

Hunter Paul Youngquist(Email)也关注了 Twitter,但更多的是在情绪分析的角度。根据配对指南,他找出了黑盒解决方案的典型问题,即没有给用户提供反馈和解释性能的机会,并在他的应用程序中解决这个问题。也来看看他的知识库吧!

亚马逊销售预测

作者插图

Martina Urbani ( 电子邮件)使用了一家真实零售公司的数据,该公司通过亚马逊开展业务活动,并建立了一个交互式仪表盘,提供实时分段分析、分析佣金以及预测销量。这将有助于企业主做出正确的战略决策!

如果你认为他们能帮助你应对挑战,请随时联系他们;)

我能做得更好吗?

尽管整个课程进行得非常顺利,但我觉得有两个时刻我绝对可以做得更好:

线上和线下互动

在课堂上讲课时,如果学生专注于材料,我至少可以感同身受地理解,离线时很难做到。在接下来的课程中,我想尝试:

  • 互动 ML 操场,不需要太多的编码,在那里我可以看到关于进度和理解水平的即时反馈。
  • 邀请客座讲师或“客户”与学生一起探讨一些特定的话题。正如我们所见,这在俱乐部会所中效果很好:)
  • 团队项目——非常明显的游戏,但我在课程中完全忽略了它

强调基础

我只有相当有限的时间来深入研究科学计算和计算机科学基础,我发现这些非常重要。在我解释完之后,我认为像 Coursera 那样用自动评分练习来检查理解是很棒的。每周自动给深奥主题的练习打分肯定会对理解 cs 主题产生更积极的影响。

结论

我想用我对学术教育未来的观点来结束这篇文章。随着知识 变得商品化研究变得商业化,大学需要定义一个新的甜蜜点,在这个点上它们可以保持独特性,并在某种程度上成为精英机构。也提醒关于会所聊天即将到来;)

https://www.joinclubhouse.com/event/PNzJO11K

首先,我认为,大学应该建立并保护对基础研究活动的垄断,这需要形成独立的思想家,专注于非常狭窄的科学前沿领域,但对重要的世界问题有广阔的视角。我在我的课程中通过数据科学顾问的心智模型强调了独立的概念,数据科学顾问负责以表达的指标来表示业务结果。在科学领域,这有点不同,在保罗·格拉厄姆的博客中有更好的描述:

第二,我认为,为了在教育和应用研究方面与机构竞争,大学需要参与进来,对结果负责,减少对政府拨款的依赖(政府拨款应该只用于基础研究)。基于大学应用研究、商业和技术加速器的风险投资衍生产品,以及与具有明确 KPI 的行业的合作伙伴关系可以给学术界带来所需的推动力,使其走出停滞状态,注入新鲜血液。

第三,科学又要变得性感了。如果爱因斯坦生活在我们这个时代,他的 Instagram 肯定是最受欢迎的,但正如我们今天所看到的,科学家甚至没有进入前 1000 名。诺贝尔奖并没有真正做好,因为如果你问一个随机的人,他们是否知道任何获奖者,他们会提到和平或文学天才,也许是经济学家,但物理学家不会是第一个。我个人很喜欢尤里·米尔纳和他的突破计划,我们确实需要更多这样的东西:

**https://breakthroughinitiatives.org/initiative/3

附言
如果你觉得这个内容有用,有观点,可以在 Bitclout 上支持我。我对技术教育领域的讨论和合作持开放态度,你可以在脸书LinkedIn 上与我联系,在那里我会定期发布一些人工智能相关的文章或新闻观点,这些文章或观点对于媒体来说太短了。**

我从编写谷歌代码中学到了什么

原文:https://towardsdatascience.com/what-i-learned-coding-google-from-scratch-cd7ddb02d9?source=collection_archive---------15-----------------------

如何加速您的编程开发

杰米·哈根在 Unsplash 上的照片

介绍

我在大学四年级的时候用 Java 从头开始复制了一个 Google 风格的搜索引擎。在整个学期中,我花了 30 个小时完成了五个单独的作业,在课程的最后两个星期,我花了 100 多个小时以四人小组的形式完成了课程的最终项目。

我现在是在宾夕法尼亚大学获得数据科学硕士学位前的最后一个学期。尽管它给我带来了难以置信的压力、睡眠不足和疲惫,但这门网络系统课程是我在宾夕法尼亚大学四年中迄今为止最有收获的课程。在四个月的辛勤工作和磨砺之后,我想不出还有什么比这更值得的了,因为我知道你从零开始建立了谷歌,一个每天都有数十亿人使用的系统。

我们建立了一个类似于 Spark Java 的网络服务器和框架,一个网络爬虫,以及一个可以独立分布在不同节点上的系统。我们以 4 人一组的方式完成了这个学期的工作,用这些组件和其他一些组件构建了完整的搜索引擎。

到学期结束时,我们已经从互联网上抓取了超过 100 万个文档(遵守每个网站上的机器人排除协议),在词典和反向索引中索引了这些文档中的超过 1.4 亿个单词,并开发了一个 PageRank 算法来对我们抓取的所有文档进行排序。我们学习了如何在 AWS 上运行所有这些不同的组件,使用不到 400 美元的预算,通过 AWS 教育帐户信用。最后,我们创建了一个用户界面来输入搜索查询,并用我们的排名结果进行响应。

本杰明·达达Unsplash 上的照片

这篇文章的目标并不是要展示我通过这个课程能够完成的所有事情。我列出了我们项目的所有组成部分,向你们展示了我在四个月的编程中所能完成的工作。在此之前,我做过的最大的项目是用 Java 创建国际象棋。如果你愿意努力,不要怀疑你能完成什么。

我的目标是鼓励你考虑做一个你感兴趣的项目,这个项目感觉非常困难,甚至是不可能的。到最后,你会创造出一些不可思议的东西,这是值得的。如果你不感到不舒服,不为自己设定很高的期望,这种类型的成长机会是不存在的。

我学到了什么

如何阅读文档

作为一名程序员,最有用的技能之一是阅读库文档并使用它实现代码的能力。

给定语言中不同库的文档质量差别很大。当你在一个大型项目中工作时,你将会使用大量不同的库。这有助于您了解这种多样性,并培养您阅读各种形式的文档的能力。

到项目结束时,我们已经使用了 20 多个不同的 Java 库。整个小组会议甚至几天的时间都用来熟悉如何在一些更复杂的库中编写高效的代码。我现在非常自信,我可以有效地学习任何我想使用的库。

如何谷歌编码问题

与阅读文档类似,我们花了大量时间在谷歌上搜索我们面临的错误以及某些事情是如何工作的。作为一名程序员,学习如何将正确的搜索查询写入 Google 是一项必要的技能。

这些问题从我们无法解决的错误信息到如何更有效地运行我们的代码。代码效率的第二个问题不是您在处理小规模项目时通常会遇到的问题。

迈特·沃尔什Unsplash 上拍照

当你在从事一个大型项目时,比如搜集 100 万个文档或索引超过 1.4 亿个单词,理解代码效率是按时完成项目的必要条件。诊断代码的哪些部分没有像你希望的那样快速运行,然后在网上找到解决方案,这是一项重要的技能,大型项目可以让你提高这项技能。

如何与团队合作

另一个需要培养的关键技能是你在编码时的团队合作能力。如果你想成为一名软件工程师或数据科学家,你必须能够在团队中有效地工作。虽然没有必要为了一个个人项目而在一个团队中工作,但是如果你有几个人想加入你,这绝对是一个强烈的建议。在这些大型项目中,团队合作还有一些额外的好处。

第一个好处是你的整体面试体验。在行为面试中,大多数公司都想知道你在团队中的表现如何(因为当你为团队工作时,你也将在团队中工作)。拥有令人印象深刻的经历,比如在团队中参与一个具有挑战性的项目,对这些对话非常有帮助。

另一个好处是,你将学会如何有效地向人们传达技术想法。在从事大型项目时,需要做出许多设计决策。在与你的小组开会时,你有机会表达你对如何实现项目各个方面的看法。有效地讨论技术想法是一个非常有用的工具,无论是在倡导你自己的想法的背景下,还是在讨论你对队友想法的看法的背景下。

你也有机会使用像 git 这样的版本控制工具。版本控制是大多数程序员必备的技能。理解如何和队友一起为同一个项目编写代码,不是你一个人能够自然而然学会的。

最后,当和一群人一起工作时,工作会更愉快。独自在一个项目上花费数百个小时不如与他人交流和集体朝着一个重要的目标努力有趣。

安妮·斯普拉特Unsplash 上拍摄

如何对项目资源进行预算

并非所有的大型项目都必须有货币成本。如果是这样,了解如何管理这些成本还有一个额外的好处。如果这个项目没有任何金钱成本,你也可以学习如何有效地安排你的时间。

AWS educate 向所有去合作大学学习云计算平台的学生提供 100 美元的免费学分。当我们在谷歌项目上工作时,我们的四人小组明白我们有 400 美元的综合预算来明智地在 AWS 上花费以完成项目。

除了用于爬行和索引的并行 EC2 节点,以及用于运行索引和 PageRank 计算的 map-reduce 作业的 EMR 集群,我们所有的数据都存储在 AWS 上。

为了有效地预算我们的资源,我们在一起工作的两周内举行了多次会议。这些会议涉及我们计算什么机器我们可以使用,既完成项目的时间,也保持在我们的预算限制。这种类型的成本与效率规划不适用于小规模项目。

NORTHFOLKUnsplash 上的照片

作为一名学生,我也不得不预算如何度过我的时间。这学期我还选修了其他五门课程(包括其他三门研究生计算机科学课程)。这门课程所需要的时间让我重新思考我是如何度过我所有的时间的。我完全改变了我安排时间的方式,以及如何处理我拖延的冲动,以便每周为这个项目腾出时间。

我喜欢编码

在这门课之前,我曾怀疑自己喜欢编码。我从未能够检验这个理论。我喜欢做我的计算机科学作业,并且非常确定我想在毕业后从事数据科学工作,但我不确定这是否是正确的道路。

在完成这个项目后,我意识到我不仅喜欢编码,我热爱它。在四个月的时间里,我在这个项目上工作了数百个小时,这向我展示了我热爱编码,即使是在压力很大的时候,即使是在我不得不编码很长时间的时候,即使是在它导致我极度睡眠不足的时候,即使是在问题感觉太难克服的时候,甚至是在我不想继续编码的时候。第二天,我总是兴奋地醒来,继续处理前一天无法解决的问题。

我现在有信心毕业后会热爱我的数据科学工作。没有这种经历,你无法真正知道在艰难时期你会喜欢什么(我相信这是享受工作的关键)。我现在可以把编程称为一种激情,我很高兴我也可以把我的激情称为一份工作。

丹尼尔·伊德里在 Unsplash 上的照片

结论

在课程的最初几周,我不断告诉自己,“我真的应该放弃这门课程。我无法完成所有这些工作。”我们的教授不断鼓励我们,尽管工作量很大,但我们不会后悔选修这门课,我们会通过考试的。到学期末,我意识到他是对的。

作为程序员,我们太怀疑自己了。我们认为在开始一个新的编程项目之前,我们必须了解所有的事情。如果我们坐下来开始努力,我们会惊奇地克服挑战并成长。

这个项目完全改变了我对自己作为程序员的看法。我仍然认为我永远也完成不了我刚刚想到的那个非常酷的主意。然后我就对自己说,“我创造了谷歌。”我开始工作。我希望你有同样的燃料。过去几周你一直坚持的真正雄心勃勃的想法是什么?开始吧。你能做到的。你会成为一个更好的自己。

感谢您阅读本文,并祝您的雄心勃勃的项目好运。

我在 A 轮创业公司的数据分析师实习中学到了什么

原文:https://towardsdatascience.com/what-i-learned-from-my-data-analyst-internship-at-a-series-a-startup-ab8ef16b6eb1?source=collection_archive---------15-----------------------

这篇文章记录了我在数据分析师实习期间的 22 条经验和想法,希望能帮助你成为一名更好的初创公司数据分析师。

由 FunNow 拍摄的照片

在我即将飞回美国之际,我想这将是一个很好的时间来反思我在台湾台北的 A 轮市场初创公司 FunNow 担任商业数据分析师实习生的最后五个月。

背景

我叫 John(Yueh-Han) Chen,目前是计算机科学专业的大二学生,专攻数据科学、产品分析和用户增长的交叉领域。(在 Linkedin 上跟我打招呼)。)

由于 2020 年新冠肺炎在美国爆发,一切都在网上移动,我决定回来暂时呆在我的祖国台湾,那里比去年的美国安全得多。起初,Covid 看起来很失望,因为我失去了与我的朋友、同学和教授见面的机会。然而,一枚硬币总是有两面,对我来说这实际上是一个机会,因为人们仍然去办公室,公司仍然在台湾招聘。相比之下,许多美国公司因为 Covid 取消了许多实习项目。

我幸运地发现,FunNow 正在招聘实习生,这是我所钦佩的一家发展迅速的台湾初创公司。我毫不犹豫地申请了这个职位,花了几天时间更新我的 SQL、Python 和 Excel/电子表格技能,并通过了面试过程。幸运的是,我得到了实习机会:)

我的家乡,台湾台北。—蒂莫·沃尔茨Unsplash 上的照片

那么,现在有什么好玩的?

FunNow 是一个在亚洲各国进行休闲和娱乐活动的即时预订平台,包括台湾、日本、香港和马来西亚,并致力于扩展全球所有大城市。到目前为止,它已经积累了大约150 万次下载15 万个月活跃用户

https://techcrunch.com/2018/08/12/taiwan-startup-funnow-gets-5m-series-a-to-help-locals-in-asian-cities-find-last-minute-things-to-do/

我实习期间都做了些什么?

我在用户运营团队,团队的总体目标是提高用户留存率,从而增加 GMV。因此,我所参与的一切都直接或间接地致力于提高用户保留率,包括构建每周仪表板、编写 SQL 来查询数据、分析和细分 VIP 用户、训练 ML 模型来提取可操作的见解、对客户忠诚度计划进行研究、实验设计以及进行群组分析。

因为有很多不同的任务,所以我决定把这 22 课分成 7 类:

1.数据分析:4 课

2.编写 SQL: 5 课

3.机器学习:3 课

4.仪表板构建:3 课

5.实验设计:2 节课

6.沟通/演示:3 节课

7.一般主题:2 课

好了,有了足够的背景信息,下面是我在这 5 个月的数据分析师实习经历中的 22 个教训、收获和想法。请享用。

关于数据分析的 4 堂课

  1. 大部分分析不加实值。先想想什么方向能带动最大的商业价值,然后一头扎进去。

照片由 NeONBRANDUnsplash 上拍摄

在实习期间,我纯粹出于好奇做了 2-3 次分析,但都没有带来任何商业价值。主要原因是缺乏预先假设或对优化方向的清晰认识。所以,在这几个非增值的分析之后,我列出了几个在投入研究之前必须要做的事情,这些对我帮助很大。一个是从客户的角度思考是什么让产品难以使用。另一个是研究其他公司有哪些成功优化的,看看他们的案例是否适用于我们的案例。列出根据上述方法产生的想法,并探索和可视化每个想法的潜在投资回报率,然后深入分析以验证可行性。

此外,阅读关于增长战略和其他公司成功增长经验的书籍可以提高选择正确探索方向的商业指导。我的经理推荐给我的一本书是 Alistair Croll 和 Benjamin Yoskovitz 写的【精益分析】。它包括 6 种最常见的商业模式和选择相应的正确指标进行分析的建议,我认为这是一本非常适合初学者的书。后来偶然看到摩根布朗 黑客成长和肖恩·埃利斯 ,对我思考成长策略和优化有超级大的帮助。除此之外,陈楚翔和布莱恩·鲍尔弗的博客也是有益的。

《精益分析》的合著者之一 Alistair Croll 解释了什么是精益分析。

。浏览数据时,使用自上而下的方法。

找到一个方向之后,那么就可以跳到分析了。然而,仍然有一个陷阱。不要直接跳到细节上。

原因是分析必须提交给经理,而你和他们之间可能存在信息鸿沟。因此,解决这个问题的更好的方法是从一个更广阔的视角向一个更小的领域提供分析,这样他们就可以对研究有一个详尽的了解。因此,逆向思考,要让管理者和其他团队成员轻松把握整体,最好是呈现整体情况,然后逐渐转移到微观上的信息。

3。确保电子表格中的表格分析是灵活的。

无论是使用 Python、R 还是 SQL 进行分析,您都可以将分析结果导入到电子表格中,以便与您的团队共享。如果你决定以表格的形式呈现,你可以做一些结构上的调整。

就像我前面提到的,您的团队成员可能想要检查数据或进行进一步的分析。如果表格数据已经被手动调整了很多结构,团队成员进一步处理它将会非常困难(参见下面的例子)。因此,前车之鉴,我认为表格数据应该尽可能少的进行手动的结构性修改。

这是一个我手工过度调整结构的例子,所以其他成员很难进一步处理这个数据。(这些都不是真实数据。)— 作者图片

4。如果数据透视表能做分析,就用它。

如果 Google sheets 中的数据需要结构上的改变,不要手工去做。请改用数据透视表。使用数据透视表有三个原因。这很简单,很容易检查,原始数据可以保持完整。再说,如果一个简单的分析任务都可以用透视表完成,为什么还要用 Python 或者 R 呢?

多产橡树简单介绍数据透视表

关于编写 SQL 的 5 堂课

  1. 编写优秀的 SQL 代码最重要的是对数据库模式的理解。

在编写 SQL 之前,您需要了解哪些表包含您想要的数据、默认数据类型和键。如果这是分类数据,通常使用缩写,你应该知道每个缩写是什么意思。此外,这里最重要的是对表之间关系的理解,这将有助于您编写高效的 SQL 代码。

实习期间让我吃惊的第一件事是 FunNow 的数据库中有很多表(70 多个)。数据模式的复杂性受业务和产品的影响。有些公司有 100 多张桌子,而有些公司只有 30 张桌子。我还练习了许多 Leetcode 的 SQL 面试问题。其中许多在一个查询中只需要使用不超过 3 个表。不过我在 FunNow 的时候,一个查询用 5+的表超级普遍。因此,我认为在分析员工作开始时最重要的事情是充分研究数据模式,以掌握数据是如何组成和连接的。

2。不要改造机器。

在大多数情况下,除非你是公司的第一个数据科学家或数据分析师,否则有人可能已经编写过类似的 SQL 查询。所以要想拿到查询数据的手,最快的方法就是养成先查代码再写代码的习惯。这会节省你很多时间。

3。当共享您的分析时,请确保您附加了用于查询数据的原始 SQL 代码。

SQL 代码- 图片作者

两个原因。第一个是当查询很复杂时,您的同事可能需要检查代码的准确性。第二,其他团队成员或您的经理可能希望根据您的工作进行进一步的分析。因此,附加您的 SQL 可以帮助您的团队更快地进入下一步。

4。检查 SQL 查询结果是否准确的能力。

当查询不正确的数据导致你从分析中得出错误的建议时,你在团队中的可信度会大大降低。能够检查数据的正确性是 DA 或 DS 最重要的职责之一。在初创公司,由于人力短缺,人们可能不会一行一行地检查你的代码。因此,代码自检能力在创业公司中尤为重要。

通常,有几种方法可以获得可比较的数据。我以前会想可能是哪里出了问题,然后用其他表格来检查。另一种方法可能是使用以前的数据来推测查询结果是否有意义。

5。最小化 SQL 运行时间,但不要过度优化。

有些表可能有数百万行,不同语法中的细微差别可能会增加几分钟的计算时间。特别是当查询需要每天运行或者非常频繁地运行时,应该对它们进行优化。

我觉得有两个方向可以探索。一是你可能选择了一个低效的表。我正在编写一个查询,可以通过选择两个主列中的一个来完成:一个有 200 万行,另一个有 10 万行。我选择了 200 万,因为我认为代码会更简单,因为它需要过滤的相关表更少。然而,又花了 4 分钟。优化的第二个方向可能是调整语法。

https://www.sisense.com/blog/8-ways-fine-tune-sql-queries-production-databases/

然而,有些查询可能只需要运行一次或每几个月运行一次,而优化一分钟可能需要 3 个多小时,在这种情况下,就让它留在那里吧。

3 堂关于机器学习的课

  1. 使用决策树时,将贡献最大的数值变量分成更小的组,这样它们就不会被奇数分割成无限多的分支。

我在训练决策树模型的时候,转储了一个贡献度很高的数值变量(叫做 OrderPoints,见下图),它的取值范围是 0 到 10000。因为它与目标变量密切相关,所以模型将它分成几个小分支,导致一些奇数个分割点,如 8881.5 和 7495。然而,它的切割方式过于自发,很难察觉和提取洞察力。

决策树的一部分。- 作者图片

我的同事建议我预先处理这些数据,并将其分为 5 类,0–2000 属于第 1 类,2001–4000 属于第 2 类,依此类推。这使得数值变量变成了分类变量。然后,我可以使用一键编码方法来创建 5 个相应的列。就这样,我解决了这个奇怪的数字问题!

2。在选择贡献最大的变量时,我应该选择 random forest 或 XGBoost。

我构建决策树模型的原因之一是为了找到最有贡献的变量,因为它会在划分树的顶部位置显示主要变量。但是决策树有偏差,我当时是机器学习新手。如果我可以再做一次,我会选择随机森林模型并使用其 feature_importances_ 或选择 XGBoost 并使用其 xgb.plot_importance() 来查找重要性分数,因为随机森林和 XGBoost 都属于Ensemble方法。这意味着将计算许多树,然后将它们加起来得到平均数,这比单棵树的偏差要小。

**https://machinelearningmastery.com/feature-importance-and-feature-selection-with-xgboost-in-python/

3。随着许多 ML 过程将被类似 AutoML 的产品所取代,使用领域知识来生成新特性在未来将变得更加重要。

当使用实际数据来构建 ML 模型时,我发现最令人兴奋的部分是制作新功能,因为它需要直觉、领域知识、商业意识,有时还需要创造力来思考可以带来价值但无法通过数据库访问的潜在功能。

以网飞为例。DS 可能想了解是什么因素导致续订。DS 将创建的功能可能是已完成电影的比率(已完成电影的数量除以已点击电影的数量),或者每个用户都有一个标签,K-means 模型根据用户的去看电影类别分配该标签,等等。由于每家公司都有不同的商业模式,DS 想要探索的商业问题也会非常不同,这使得创造新功能的任务很难被机器取代。

这次实习结束后,我花了一些时间研究像 AutoML 这样的自动化 ML 产品是否会在未来取代数据科学家。我的研究总结是,尽管这些自动化的 ML 产品在特征选择、特征预处理、模型选择和超参数调整任务方面优于人类,但未来使用类似 AutoML 产品的数据科学家将腾出时间来完成这些任务,有更多时间思考业务,并应用他们的判断来更快地改善业务。数据科学家之死 AutoML 会取代他们吗?)。

人工判断部分包括定义业务问题,应用领域知识生成更有价值的特征,以及提取可操作的见解。简而言之,在这次实习后的研究之后,我学到的经验是,作为一名未来的数据科学家,我应该留出大量时间投入到业务方面,选择一个专注的行业,并随着时间的推移积累我的领域知识。

https://www.kdnuggets.com/2020/02/data-scientists-automl-replace.html

关于仪表板构建的 3 堂课

  1. 在构建仪表板之前频繁的沟通和起草

我实习的第一个任务是制作每周仪表板。在创建优秀仪表板的所有因素中,我认为最重要的一个是与你的观众频繁交流,他们可以是你的队友、经理或高管。在 FunNow,我们使用 Metabase,一个开源的 BI 服务器来构建仪表板。仪表板中的每个图表都是由一个 SQL 脚本构建的,因此十个图表意味着幕后有十个 SQL 脚本。(虽然,我们也使用了一个更流行的工具,比如 Mixpanel,它在分析和构建仪表板方面更有效,但是没有 Metabase 灵活。我个人更喜欢使用 Tableau,因为它既灵活又高效,但对初创公司来说太贵了。)

如果最终的仪表板不是您的最终用户想要的,如果您使用元数据库,您可能会浪费时间安排不需要的布局或编写许多不必要的脚本。因此,创建仪表板最重要的原则是在创建之前起草并经常与您的受众交流。

这是我用来与经理沟通的草稿之一,确保它包含所有必要的数据和正确的图表。数据当然是可以想象的。— 作者图片

2。如果这两个数据组合在一起可以指示潜在的重要信息,则将它们并排放置,以便您可以轻松地一起查看它们。

例如,我构建的一个仪表板是跟踪每周 GMV(商品总值)。GMV 是 ARPPU(每个付费用户的平均收入)乘以付费 UU(唯一用户)的公式,也是 OrderCnt(订单数)乘以 AOV(平均订单值)的公式。直觉上,我首先以垂直的方式设计它们:我首先订购 ARPPU,然后支付 UU,然后 OrderCnt,然后是 AOV。

但真的很难看到 ARPPU 和付费 UU 之间的动态,或者 OrderCnt 和 AOV 之间的动态。因此,如果这两个数据结合在一起可以指示潜在的重要信息,将它们并排放置,这样您就可以像下图一样轻松地一起查看它们。

因为 GMV = OrderCnt * AOV,把这两个数据并排放在一起,观众很容易看出哪一个导致了 GMV 的变化。数据当然也是可以想象的。— 作者图片

3。本期与前期平均值相比的增长比仅显示平均线更直观。

例如,它可以是本周的 WAU(每周活跃用户)除以过去 8 周的平均 WAU。这比在折线图中只显示一条平均线或趋势线要好,因为通过这种方式,观众必须在心里计算出本周与过去 8 周的平均水平相比增长了多少。相反,使用当前时期与以前时期的平均值相比的增长率,观众可以看到数量发生了多大的变化。

2 节实验设计课

1。让实验尽可能简单。

在三月和四月,我们的市场部开展了一项活动,一下子吸引了许多首次使用 VIP 的用户。我所在的用户运营团队希望让这些用户不仅仅是一次性购买者,而是长期使用 FunNow。因此,我设计了一个实验,即首次购买 VIP 的顾客,只要订购了两件 VIP 特价商品,就可以享受独家折扣。其背后的基本原理是,如果他们能够尽快体验到 VIP 用户的好处,那么他们可能更愿意保持 VIP 身份。

由于我们是创业公司,而且我们的 VIP 身份是每个月计算一次的。所以,为了留住这一批第一次成为 VIP 的人,这个实验应该在月底之前进行。

然而,这却成了让这个实验没有我们预期的那么成功的原因。自从我们在四月中旬开始这个测试以来,一些第一次的 VIP 已经完成了购买一个 VIP 独特物品,一些没有购买任何东西。因此,由于有这两组首次 VIP,我们需要在推送通知软件 CleverTap 中设置两个应用内和推送通知轨道。每个曲目将有 5 到 6 个步骤,其中第一步是用户第一次打开应用程序,然后弹出通知,然后等到用户购买了一件 VIP 商品,然后发送推送通知,然后重复这个过程,直到他们完成购买两件商品。这使得实验更加复杂。

尼古拉斯·托马斯在 Unsplash 上拍摄的照片

在 4 月底,虽然我们发现这个实验比之前的统计多了 10%的首次 VIP 在第二个月停留,但我们发现已经购买了一个 VIP 项目的群体中约有 40%没有收到我们的应用内推送内容,这意味着他们甚至没有进入推送通知轨道,这表明如果这个实验没有出现故障,我们本可以让更多的用户留下来。然而,我们学到的一个教训是,让实验尽可能简单。

2。如果你能用数据来支持你的假设,那就用它。

设计一个实验的第一步是形成假设,可以通过数据探索、用户访谈、其他公司的经验、心理学原理等找到假设。然而,初创公司通常缺乏人力资源,所以我们必须选择可能带来最高投资回报率的测试。因此,如果一个假设只包含定性观察,就很难说服数据驱动的管理者批准这个实验。所以,正因为如此,如果一个假设能够得到数据证据的支持,那就更好了。

3 堂关于沟通/展示的课

1。先解释一下数据来源。

向数据团队做演示时,您应该解释一下数据来源,原因有几个。第一个是他们都理解数据模式,并且可以检查您的分析是否与数据源完全匹配。第二个原因是,他们可能会建议你使用其他你没有考虑过但对你的研究有帮助的数据来源。第三个原因是,您团队中的一些高级同事可能知道一些没有记录在数据模式中但对您的项目有帮助的数据。

。将数字与行业标准进行比较。

克里斯·利维拉尼在 Unsplash 上的照片

当你提出数据时,附上比较数字。否则,很难理解这个特定的数字是高还是低,例如,30 天后的保留率是高还是低?根据 Localytics 的数据,30%在游戏公司是正常的,而在社交媒体公司(Bhargava。充分利用推送通知提高用户留存率

3。用百分比表示数字时,一定要清楚地解释分母。

我的经理经常问我,“等等,约翰,这个分母是什么意思?”提出比率时,确保解释分母的含义,因为通常情况下,细微差别隐藏在上下文中。你是指所有的登录用户吗?还是付费用户?还是特定时间范围内的付费用户?

2 节课/关于一般主题的思考

  1. 系统思考——在思考策略时,考虑它们会如何影响其他团队。如果不确定,就问!

当你制定的策略需要与其他团队/部门合作时。你需要系统地思考这个任务对他们来说是否太多,或者他们是否应该专注于手头其他更重要的任务。如果不确定,就和他们谈谈。我一开始没有想到这个至关重要的角度,使得我提出的最初几个建议显得有点幼稚。

。我太沉浸在任务中了。我应该参加更多的会议。

莱昂在 Unsplash 上拍摄的照片

我记得两年前我在读蒂姆·费里斯 的《泰坦的 工具》时,蒂姆问 Instagram 和优步的早期投资者克里斯·萨卡,“如果在创业环境中工作,一个人会做什么或专注于什么来尽可能地学习或提高?”克里斯回答他说:“尽可能参加所有的会议,即使你没有被邀请,也要想办法帮上忙。如果人们想知道你为什么在那里,那就开始记笔记吧。”我完全没有遵循这个建议,因为我太专注于我的任务和项目,尽管这并不可怕。我仍然认为,如果我可以重来一次,我会严格地强迫自己参加更多的会议。

包扎

台北——图片由 TangChi LeeUnsplash 上拍摄

我试图在一篇文章中包含尽可能多的想法,但仍然有许多有价值的想法,我没有放进去,因为它太长了。总的来说,我从这次实习中获得的最有价值的东西是实际经验,从分析真实数据到设计实验到建立 ML 模型到提取商业见解到执行到分析结果到与团队成员交流并获得反馈。这些是我在单独使用 Kaggle 的样本数据构建 side 项目时不可能经历的。此外,这次实习也让我更加坚信,用数据驱动商业价值是我真正热爱的,也是我未来职业生涯想要追求的!

谢谢你,FunNow,还有我出色的同事们,佩吉,袁和史蒂文,让我有了如此美妙的经历!

如果你读到这里,请在 Linkedin 上给我发一个连接请求!我喜欢结识新朋友,探索我们未来如何合作。

引用作品:

我在 HealthJoy 数据团队的头 6 个月学到了什么

原文:https://towardsdatascience.com/what-i-learned-in-my-first-6-months-on-the-data-team-at-healthjoy-e5218144429b?source=collection_archive---------46-----------------------

关于从大型数据团队过渡到小型数据团队、在初创公司的数据团队中工作等内容的说明

米利安·耶西耶在 Unsplash 上拍摄的照片

正如标题所示,这篇文章将会是“在一家初创公司工作是什么样的”这一类文章中的又一篇,我相信大多数人都已经读过了。然而,我将对事情提出自己独特的见解,并从一个人的角度来写,这个人不仅经历了从 Big glometer 到中期创业公司的转变,还特别经历了在上述创业公司的一个小型但不断增长的数据团队中工作的感觉。希望这篇文章可以为数据和分析领域的其他人提供一些关于如何进行类似转变的有用观点。

简单介绍一下我,我叫乔伊,是一名数据专家,住在纽约布鲁克林区。我拥有德保罗大学的数据科学硕士学位,在运营领域开始职业生涯后,我已经在数据和分析领域工作了大约 5 年。我既做过分析经理,也做过个人贡献者,我目前的职位是 HealthJoy 的高级数据分析师。

我将这篇文章分成几个部分,第一部分是关于我在 HealthJoy 的新角色的转变和我工作的头几个月。第二部分重点介绍了我的角色,最后一部分赞扬了我们团队的优点,以及我非常喜欢学习我们所有的工具和数据堆栈。

过渡

在我到 HealthJoy 的头两个月左右,我需要做的大量的新鲜事物和调整有时让我感到不知所措。从 15 人的分散数据团队转变为 4 人的集中数据团队本身就是一个巨大的转变。再加上要学习的新工具和新技术(Gitlab,Snowflake,dbt,Looker),学习一个全新的行业,行话等等,很容易感到迷失。

照片由你好我是 NikUnsplash

不过很快,在我的经理和团队中一些终身任职者的帮助下,我找到了做出贡献的方法。在某种程度上,在最初的几个月里,我先前知识的缺乏对我来说是一笔财富,并帮助我们的团队为当前的成长期构建文档。我问了很多关于我们的数据和数据集的问题(流水线/架构、列含义、度量定义等。)并很快发现许多知识存在于其他现任和前任团队成员的头脑中。这有助于启动我们团队为新数据模型整合文档标准的工作,并引发了许多关于我们一些重要但不那么完美的文档化数据模型和来源的教育和讨论。

我从这一切中得到的最大收获是,如果我对一些事情感到困惑,那么这种困惑很可能代表着一个机会,可以学习、记录和为我们的团队贡献一些以前没有正式记录的东西。其他一些贡献领域是从特定工具培训(特别是 Looker 和 dbt)中获取概念,并为如何实现这些新概念创建外卖文档或建议。据我所知,用新的眼光来看待成熟的流程是产生改进的最快方法之一。该团队最近引进了另外两名分析师,在他们最初的 2-3 周内,他们已经收集了一些关于 Python 和开发环境设置的很棒的材料和文档。

伴随着适应新团队的学习曲线,我意识到在小公司工作意味着我作为分析师的角色将比我以前在任何职位上经历的角色有更多的可见性。在 2020 年第四季度加入后,我很快被要求帮助数据团队的一名更高级成员分析我们的一些客户维系数据。在完成了项目中我的部分并将工作移交给我们的利益相关者后,我非常震惊和兴奋地看到我们的工作在我的第二次月度全公司会议上得到展示和表扬。虽然我以前向高杠杆的利益相关者介绍过工作,但这是一个真正的“哦,sh*t”时刻,我意识到我要做的许多工作将对整个公司产生可见的、真实的影响。

升速

虽然我在工作的头几个月学到了很多东西,并尽我所能让自己变得有用,但需要时间来感觉真正舒适,并好像我对我们的数据和数据堆栈了解得足够多,以至于真正危险。与此同时,我的经理/我们团队的主管围绕他希望如何管理我们的团队以及我们应该如何作为一个单位工作而提出的一些概念和理念真正成为了焦点。具体来说,像产品团队一样运营我们的数据团队和专注于跨职能分析这样的概念,是我在团队的第一个完整季度中真正意识到的。

虽然我之前所在的分析团队确实有 OKRs 和团队目标,但他们也是作为一个以客户为中心的服务组织而成立的。作为分析师,我们专注于根据客户在任何给定时刻的需求,向不同的内部和外部利益相关者提供输出。这使得很难在任何长期数据团队优先事项上取得进展,偿还任何技术债务,或投资于数据基础架构—几乎我所有的分析师时间都用于响应我们客户的需求。

正如我提到的,在 HealthJoy,我们努力让我们的数据团队更像一个产品团队,而不是一个服务台。这一过程需要我们就团队的季度优先事项进行协作,以便为我自己和我的数据团队成员提供一个清晰的路线图,并帮助我们确定工作的优先级。这种转变让我能够深入了解我的优先事项,不仅从产出的角度,而且从协作的角度来回应利益相关者的反馈。在多年从事面向客户的分析工作后,让该机构埋头于几个项目是一种解脱。这种理念和劳动的成果来得相当快——将我们整个组织的经常性收入模型整合在一起就是这样一个有影响力的项目的结果。我还深入研究了我们的客户和最终用户如何通过 HealthJoy 产品进行激活,得出了一些关键发现,挑战了我们的客户如何通过我们的平台产品进行激活的假设,并对跨职能利益相关者进行了大量培训。

虽然所有数据和分析团队都在努力帮助我们的组织和利益相关者做出更好的决策,但到目前为止,看到自上而下的理念和愿景是如何实施的,这是一次令人难以置信的学习经历。稍加考虑、规划和思考就能在数据领域大有作为。

尽管如此,我很幸运,因为我的第一个项目非常有趣,我已经收到了很多利益相关者的积极反馈和认可。我为经常性收入建立的数据模型现在被我们的 CEO 和其他领导使用。该公司更好地了解了我们的经常性收入为什么会发生变化,以及哪些客户对 HealthJoy 的经常性收入变化贡献最大。最有趣的是,这些项目不是花哨的机器学习模型或复杂的多元测试(不是说我们没有能力做这些事情)——它们只是对利益相关者有用的数据分析,这些利益相关者以前从未见过以这种方式分析的数据。

技能&总结

从事数据和数据科学工作,我最喜欢的部分之一就是尝试和学习大量的新事物。这是让我兴奋地加入 HealthJoy 数据团队的另一个原因——“现代数据堆栈”的承诺以及在解决数据问题的同时提高我的编码技能是我在下一个角色中真正寻找的东西。与我以前的分析角色相比,我们的数据堆栈让我感觉像是一个在糖果店的孩子。学习使用 dbt 并为我们团队的 dbt 项目做出贡献是我最喜欢的工作之一。在编写 SQL 和 Jinja 的同时解决业务问题对我来说真的很酷,我非常确定解决棘手的编码问题带来的“啊哈时刻”是我将不断追求的东西,因为它让我感觉自己像个天才(至少暂时如此)。

我将 dbt 车型推向生产时的感受(照片由 Unsplash 上的Kristian lvstad拍摄)

我也很喜欢我们团队每周的展示和报告会议,在会上我们每个人花大约 5 分钟谈论我们在过去一周左右的时间里一直在做的事情。看到我的团队成员有多有才华,了解他们每周都在做的了不起的事情,这真的很酷。无论是在 dbt 中创建的新数据模型,对我们一些机器学习和预测项目的更新,还是某人发现并希望与团队分享的新工具,不断分享和学习的文化真的很棒。在我们团队的会议之后,我经常发现自己受到启发,去研究数据科学/数据工程生态系统的新概念或新领域。

总之,我很高兴加入了 HealthJoy 的数据团队。这种经历非常有益,让我大开眼界,我接触到了一些工具和工作方式,我不确定如果我继续留在以前的行业或继续在更大、更成熟的组织工作,我是否会体验到这些。对于未来几个月我将学到的东西,我们团队和公司的发展方向,我感到非常兴奋。

我在领导数据科学团队时学到了什么

原文:https://towardsdatascience.com/what-i-learned-leading-a-data-science-team-e8ac1f107a89?source=collection_archive---------44-----------------------

美国宇航局在 Unsplash 拍摄的照片

从数据科学家的角色转换到管理职位比我想象的要困难,但是我每天都在学习

当我担任数据科学团队的领导时,我几乎没有人员管理经验。作为一名数据科学家,我很容易联系,但很快我就面临一些挑战,以保持团队的快乐和正轨。

以下是我的学习清单。它们是数据科学团队的专属吗?可能不会,但话说回来,我也说不清。

1.企业 IT 可能是一个艰难的环境

这对我来说并不是什么大新闻,因为我以前在企业环境中做过多个数据科学项目,但是,我从未考虑过对长期幸福的影响。不要误解我的意思,与大多数数据科学产品相比,企业 IT 需要遵守完全不同的法规和预防措施。然而,僵化的流程极大地减缓了数据科学中的思考和解决过程,即使这是理所应当的。这会导致挫败感,在某些时候会阻碍创造力。

该如何应对?嗯,我还没有找到一个万能的解决方案。对我们来说,为数据科学家提供符合企业标准的开发空间,以及让企业 IT 专家尽早参与的大量协调会议,都是在帮助我们。

2.被埋没的数据科学家倾向于离开

这一点我不得不经历艰辛。许多企业项目都是面向长期的,而且必须如此。在这样一个项目中从头到尾都有一个数据科学家,除了希望项目团队保持连续性之外,还会有一些不必要的副作用。以机器学习为核心的端到端业务应用很难构建,然而数据科学相关工作只是其中的一部分。因此,数据科学家最终肯定会承担一大堆与他/她个人资料并不相关的任务。这在一段时间内是可以的,但一旦它成为新常态,数据科学家就会开始感到不高兴。

似乎对我们有用的是,让数据科学家同时处理多个项目,并在每次迭代之前承担一定的工作量。这样,大多数与概要文件相关的任务就达成了一致。

3.远程工作绝对是游戏规则的改变者

不知何故,我们团队的大多数人都喜欢远程工作——包括我自己——为什么他们不喜欢呢,这太神奇了。当然,它有它的缺点,但是我们的生产力飞速增长,老实说,通过所有基于 Git 的讨论、技术会议和一对一会议,我们在团队中发展了一种新的亲密关系。

我更欣赏的是我们更加开放地谈论我们的个人生活。无数次我的小宝贝和我的同事打招呼或者一只狗抱怨什么,让我们走到了一起。

我充分意识到这里的负面影响,但是我尽量把注意力放在积极的方面。

结论

最有经验的数据科学家是最有内在动力的人。现在不时有正式的教育途径出现,但是我们大多数人来自不同的学科,开始进入数据科学纯粹是出于兴趣。作为数据科学家,我们通过不懈的努力学习和成长。为了让数据科学家满意,我们需要创造一个合适的环境。

我为什么要分享这个?我猜你们中的一些人已经是数据和分析领域非常有经验的领导者了。然而,像我一样,现在可能有许多其他数据科学家开始成长为领导职位。我很想听听你对此的想法,所以请联系我:)

PS:

最难的学习与团队无关。对我来说,放下编码是多么困难。我仍在编码,但比以前少多了。我对此没有意见,因为我还有其他方式来创造价值和贡献,但这绝对是一种学习。这并不容易。

我在为机器学习项目设置存储时学到了什么

原文:https://towardsdatascience.com/what-i-learned-setting-up-storage-for-a-machine-learning-project-7ae1e5668762?source=collection_archive---------30-----------------------

入门

面向小型项目的快速存储解决方案之旅

瓦西里·科洛达Unsplash 上的照片

总的来说,机器学习框架和技术已经走了多远,我们现在能够以多快的速度将机器学习功能集成到应用程序中,这是令人惊讶的。几周前终于进入 TensorFlow 和 Keras几个小时后就训练了我的第一个模型。我完成了三个教程,几个 YouTube 视频,用演示数据训练模型,并想知道为什么训练过程的“改进”会产生相反的效果。🙂

总的来说,这是一次非常好的经历,我当然想了解更多。我跟随的教程都附有数据集,这些数据集已经进行了适当的分类和结构化。对我来说,合乎逻辑的下一步是从头开始一个新项目:收集数据,手动分类数据,并训练一个模型。由于我目前正在构建一个专门用于创建和安排 Twitter 内容的工具,也就是 Tweets,我考虑过在其中加入 ML 特性。

为此,我需要一堆推特。好在我的机器上已经有大约 30,000 条 JSON 格式的推文。当然,这些没有标签。但是丢失标签并不是最大的问题。我在想储物件,以及我如何能够

  • 一次给一条推文加标签,
  • 添加和删除推文,而不打破以前的分类。

一开始尝试用微软 Excel。不,不是因为我看了这篇文章。这是一个强大的工具,在过去,我经常选择用代码来实现自动化,而不是使用现有的和经过验证的解决方案。因此,我将推文转换为 CSV 格式,并将 CSV 文件导入 Excel 表格。我为我的班级添加了专栏,并在同一张纸上标注了前几百条推文。直到我意识到有些推文不是用英文写的。事后看来,这并不奇怪,因为我没有按语言过滤推文。这很不幸,因为我不确定我是否可以再次导入 CSV 文件,而不会弄乱我已经标记的推文。

第二天,我决定花更多的时间为分析打基础。如果推文存储在数据库中,我可以不分类地随机选择一条,然后单独更新。我将能够添加更多的推文,而不必担心打破推文和它们各自的分类之间的关联。不过,也有一些缺点。

  • 复杂性:更多的组件意味着更多的维护工作和更高的故障几率。
  • 访问 : Tweets 以 CSV 和 JSON 文件的形式存储在我的文件系统中,我可以用任何文本编辑器查看它们。数据库需要额外的工具来查看和操作数据。
  • 版本控制:由于推文存储在文本文件中,它们受到版本控制。Git 也存储二进制 blobs,但是,当然,二进制文件的变化不容易可视化和理解。

此外,什么数据库是一个选项?构建我的 Twitter 内容工具时,我对 MongoDB 相当满意。我最喜欢的是我能够使用 API 来创建、更新和检索数据。不需要使用不同的语言,如 SQL。这是一个很大的优势。此外,MongoDB 支持模式和模式验证,但默认情况下并不强制执行。

我想到的另一件事是:摆脱了 Excel,我也失去了对数据进行分类的用户界面。Mongo-express 是一个选项,但是对于大量数据的批量编辑来说太不方便了。快速搜索后,我找到了 Labelbox/labelbox ,但对抽象级别不满意。它仍然需要手动获取数据并编写 HTML 来可视化训练数据和标签。

但是对于 tweet 分类,它不需要过于复杂的应用程序。毕竟,我想对包含多达 280 个字符的文本应用标签。我很快就想出了这个简单的模型如下所示。它在左边显示 tweet,在右边显示一个包含各种选择元素的表单和一个提交按钮。

推特分类前端的模型

所以,我决定用 MongoDB 存储数据,并编写一个简单的 HTML 前端来标记推文。

最初将所有 tweets 插入 MongoDB 集合非常简单。我使用 Python 将 JSON 文件读取并解析到一个数组中,并将该数组一次插入 MongoDB 集合中。有趣的是,几天前我用 Python 的内置 JSON 模块创建的 JSON 转储包含一些语法错误,我必须用第 17 行来修复。

随着推文被存储在数据库中,是时候考虑分类数据的存储了。分类数据包括推文的 id 和分类本身。我定义了经典的情感分析标签

  • 正面、中性、负面来捕捉推文的语气,
  • 随意而又商务地描述观众,
  • 和提问、告知、说服分类意图

分类数据必须以某种方式与 tweet 数据一起存储。有两种选择:

  • 规范化:使用单独的集合存储分类标签和 tweet id。
  • 嵌入式:使用我已经用过的 tweets 集合来存储 tweets 本身。含义:将分类标签存储在 tweet 旁边,或者将分类数据与 tweet 数据混合。

对于那些不熟悉 MongoDB 的人来说:集合大致相当于关系数据库的表。集合存储相关的文档,比如 Tweets,并且可能施加某些规则,比如模式或者读写文档的权限。在关系数据库的上下文中,文档是一行

一开始我选择了第一个选项:一个集合包含所有推文,另一个集合包含每个推文的分类。但这又一次给我带来了麻烦。为了找出哪些推文还没有被标记,我必须加入这两个集合。这可以用 $lookup 操作符实现,但是这个过程很慢,即使在我只有 30000 个文档的情况下也是如此。花了 20 秒在 tweets 集合中找到 tweets,但在 classifications 集合中没有。那太慢了。

出于性能原因,MongoDB 鼓励用户嵌入集合。在这种情况下,嵌入意味着在文档中包含嵌套的对象。这基本上是我上面提到的第二种选择。

一般来说,嵌入为读取操作提供了更好的性能,并且能够在单个数据库操作中请求和检索相关数据。嵌入式数据模型使得在单个原子写操作中更新相关数据成为可能。
docs.mongodb.com/data-model-design/

所以选择二。下面是我用来从数据库中提取一条没有标签的 tweet 的代码。

不出所料,表演棒极了。渲染前端应用程序,包括从数据库获取下一条 tweet,大约需要 200 毫秒。

此时此刻,我为自己所取得的成绩感到高兴。我为我的机器学习项目实现了一个可扩展的存储解决方案和一个轻量级的快速分类过程。我能够时不时地更新推文,而不会中断甚至破坏分类过程。

我将在另一个故事中分享关于前端应用程序的细节,我也将在未来几周继续分享关于我的机器学习之旅的进一步细节。

感谢来到这里,也感谢你的阅读,
Stefan, www.blauspecht.io 的创作者👋

我从数据科学工作中学到了什么

原文:https://towardsdatascience.com/what-i-learnt-from-my-data-science-job-48682ed8bdc9?source=collection_archive---------19-----------------------

重要的经验和教训

学分 Instagram 和网络

我最近开始作为一名数据科学家工作,以下是我工作三个月后的想法。除了这些小的学习之外,还有很多我遇到的技术方面的东西,但是任何人都可以在加入后学习。

机器学习与经济价值 -在学校,我们学习不同的学习算法,但不学习它们的经济价值。一定要明白精准不是王道,的预算才是!我们需要了解逻辑回归在百万美元行业中的使用案例,一个简单的模型如何带来如此大的经济价值。参加一门从商业角度展示行业级机器学习用例的课程,可能有利于所有数据科学家在行业中做出日常决策。

构建基于混合规则的 ML 系统 -在学术界和各种在线资源中,基于规则的学习与 ML 模型是分离的,但在现实生活场景中,最简单的情况仍然由基于 if else 规则的语句进行分类。我们如何决定简单性的水平?我们如何并行运行这些以获得更好的用户体验。如何做出最快的预测并在更复杂的模型做出决定后改变它。此类决定应在设置 ML 管道时做出。

理解模型推理和训练的时间复杂性- 虽然我是机器学习如何简化为 python 库导入的粉丝。但我更喜欢理解正在发生的底层操作。当一个算法花了很长时间来训练时,你只是采样一部分数据或超参数调整它,也就是提高学习率的频率是多少?一个更系统的方法是知道这些算法的时间复杂度。例如,在使用不同优化技术的 SVM 的情况下,我们的训练时间可以改变。当使用牛顿方法时,复杂度是 N,而使用 Cholesky 方法时,复杂度是 N,其中 N 是训练样本的数量。在这里,仅仅减少数据大小并不是一个明智的决定!

生产环境- 我们在学校很少了解生产环境。并非所有的现代机器学习生产系统都是为了处理最先进的方法而构建的,这也是学术界和工业界之间存在巨大差距的原因之一。

了解的一些重要话题-

  1. 持续学习- 现实世界的数据通常是流式的。您需要用新输入的数据不断更新您的模型。一种简单的方法是从头开始重新训练整个模型或者进行微调。微调不会有那么好的效果,因为它可能会使你的模式偏向最新的数据。因此,应该分析再培训和使用复杂的持续学习技术的经济成本。
  2. 主动学习- 给数据贴标签很贵,而给我们受益最大的样本贴标签却不那么贵。主动学习基础应该是所有 intro ML 课程的一部分!

没有每个团队都必须遵守的标准公平/道德体系

从事机器学习的每个人可能都知道这一点。但是现在是时候让社区在部署你的 ML 模型之前提出一些基本的公平性检查了。

我在最近的黑客马拉松中可能会做些什么

原文:https://towardsdatascience.com/what-i-might-have-done-in-a-recent-hackathon-55e15832a4db?source=collection_archive---------28-----------------------

以及为什么领域专业知识在机器学习中很重要

Alex Kotliarskyi 在 Unsplash 上的照片

最近,我的同事【Michael Pyrcz 教授 ( @GeostatsGuy )和我在德克萨斯大学奥斯汀分校举办了一场数据科学黑客马拉松,由希尔德布兰德石油和地球系统工程系提供支持。鉴于 COVID 疫情,我们在 2021 年 4 月的两个周末举办了该活动。第一个周末由一个研讨会组成,随后是对问题数据集的解释,然后学生们分成小组,研究他们的解决方案,最终在接下来的周末提交给一个行业专家小组进行评分、代码审查和演示评审。

对我个人来说,这是一次非常有趣的经历,所有参与者的反馈都令人难以置信。鉴于我多年来一直在教授数据科学技能,并用高难度的编码练习挑战我的学生,看到他们展示自己的能力真是太棒了。

我鼓励你看一下详细的问题陈述和上面链接的数据集,但简单地说,挑战是:给定来自测井的岩石物理数据和从已经生产一段时间的 73 口油井的地震解释的空间图,预测最近钻探的 10 口新井的 3 年累计产量,并有测井数据,但尚未投入生产。除了他们的“最佳估计”,学生们还被要求提供 100 个额外的实现,以便可以评估不确定性模型。客观评分包括相对于他们的“最佳估计”和真实的 3 年产量(我们知道,但对学生保密)的均方误差的比较,以及他们的不确定性模型与 Deutsch (1996)提出的“良好性测量”的评分。

我认为这将是一个有趣的练习,考虑我自己可能会做些什么来完成这个挑战。本着黑客马拉松的精神,我将把我在项目上的工作时间限制在我一天能完成的范围内。当然,因为我已经熟悉了数据集,所以我比比赛中的团队有优势,他们通常在第一天就花几个小时调查数据。但鉴于我的时间表很短,我不会训练任何复杂的神经网络架构或任何复杂的机器学习模型。我想看看我如何利用我的领域专业知识来设计有意义的功能,以快速获得答案。关于我如何处理不确定性模型,我也有一个惊喜。所以让我们开始吧…

特征插补

首先,像 Python 中的所有工作一样,我将从这项工作中使用的模块导入开始。

我将从已经生产的油井和我们称之为试生产的油井中读取测井数据集,即我们试图预测 3 年后累积产量的油井。

现在我们将这两个数据帧合并成一个数据帧。

并检查数据集的一些总体统计数据。

我们可以看到有相当多的数据缺失。特别值得关注的是大量渗透率缺失,因为这将是最强的生产指标之一。所以我们的第一个任务是估算缺失的特征,特别是建立一个好的渗透率模型。首先,让我们绘制一些提供的地图数据。这里我们展示了储层中百分比相的空间分布。水库里有一条断层,我们只知道它的位置,没有其他信息。白色圆圈代表我们有产量的井,红色圆圈是我们试图预测产量的井。红线表示故障。虽然我试图展示尽可能多的代码,但 matplotlib 绘图命令有些冗长,所以我将取消输入,只显示绘图。

相分数彩色地图

看起来断层不会在空间相信息中产生任何偏移或不连续,这是个好消息,因此我们将继续使用空间位置信息输入缺失的相信息。首先,我们将划分数据帧的子集,并用数字替换岩相的字符串标签,因此 0 表示砂岩,1 表示砂质页岩,依此类推…

现在我们将构建一个k-最近邻分类器,用 scikit-learn 的内置 GridSearchCV 做一点超参数调整。

{'n_neighbors': 4, 'weights': 'distance'}

使用上面的超参数设置,我们现在可以预测(和估算)缺失的相值。

假设我们期望相同岩相的岩石具有相似的密度和声阻抗,我们将用每个岩相的平均值来估算这些缺失的特征。

现在,我们将对数据框进行子集划分,并使用所示的特征通过多项式回归来估算缺失的孔隙度值。

我们将设置一个管道,并再次使用GridSearchCV来寻找最佳超参数。

{'pca__n_components': 5, 'poly__degree': 2, 'scaler': MinMaxScaler()}

最佳参数如上所示。现在我们将使用这个模型来估算缺失的孔隙度。

下面我们将绘制估算的和给定的孔隙度。这里看起来没什么奇怪的,没有一个估算值是给定数据范围内的异常值。

作为深度函数的预测孔隙度

我们还可以观察估算孔隙度的分布,并与给定值进行比较。插补保留了原始数据的双峰分布。

给定和预测孔隙度

现在我们将这个估算数据添加到我们的wells_df中。

为了估算缺失的渗透率,我们将使用一些岩石物理学知识来做一些特征工程。孔隙度和渗透率之间有一个广泛使用的相关性,称为 Kozeny-Carmen 关系,它将渗透率建模为

其中κ是渗透率,ϕ是孔隙度。我们可以使用 seaborn 的内置函数快速查看这种关系,即

作为孔隙度函数的渗透率的 Kozeny-Carmen 变换和拟合

虽然不是最好的模型,但我们可以使用这些数据来调整我们未来更复杂的预测。首先我们找到上面蓝线的斜率和截距。

现在我们将使用这个模型来创建一个我们称之为'KC permeability, mD'的特征。

使用上面显示的数据,我们将建立一个模型来估算缺失的渗透率。同样,使用GridSearchCV进行超参数调整,我们有

{'pca__n_components': 4, 'poly__degree': 2, 'scaler': RobustScaler()}

有了这些参数,我们可以预测缺失的渗透率。

根据给定数据可视化预测结果,该模型表现良好。同样,我取消了冗长的绘图命令

作为孔隙度函数的预测和给定渗透率

'KC permeability, mD'现在是多余的,所以我们将它从数据帧中删除。

特征工程

由于断层正好穿过生产井和我们试图预测产量的井,让我们设计一些与断层相关的特征。首先,我们将设计一个称为'Distance to fault'的特征,它计算到断层的垂直距离。此外,我们不知道断层是否以任何方式划分了油藏,因此我们还将创建一个名为'left/right fault'的要素来指示油井位于断层的哪一侧。

因为所有预测井都“靠近”断层,所以我们将创建另一个布尔要素,赋予断层附近的井一定的重要性。我们将“近”定义为比平均预生产(即预测)井距断层更近的任何井。

假设我们预期“相似”的井具有“相似”的产量,我们将使用KMeans聚类在我们的数据框架中寻找相似的井

{'cluster__n_clusters': 14, 'scaler': MaxAbsScaler()}

并且使用该模型来预测预生产井将落入哪个组。

现在我们将读入生产历史,并将它们与我们的工作数据框架合并。

现在,我们将计算每个丛的 1 年、2 年和 3 年的平均产量,并将此平均值作为每个井位的预期平均产量分配给一个新特征。

将这些平均产量值合并到我们的工作数据框架中,我们就有了最终的数据框架,我们将用它来进行预测。

预言

为了对我们即将推出的模型进行超参数调整,我们将使用 Deutsch,1996 的“良好度”度量,即

除了来自 scikit 的mean_absolute_percentage_error-学习给我们的模型打分。我们的想法是使用BaggingRegressor来创建一个模型集合,我们对其进行平均以创建我们的“最佳估计”,并使用每个单独的估计值作为我们不确定性模型的实现。我们将使用GridSearchCV在交叉验证中对我们的模型进行评分。功劳归于 Honggeun Jo 创造了这个函数的原始版本,我在这里只做了一点小小的修改。

分离我们的预测和响应特征标签。

由于每口井都有几个数据样本,但我们只需要报告整个井的预测,因此有几个选择。最简单的方法是对每个孔中的所有样本进行平均,为了节省时间,我们将使用这种方法。

为我们的训练井(已经投产的井)获取布尔索引器。

现在我们将建立一个管道,并将其传递给GridSearchCV进行超参数调整。我重复了几次,以缩小要搜索的最终参数集,以便最终的笔记本/解决方案能够及时运行。这里,我在 k 倍交叉验证中使用了 7 倍,因为这在测试集中留下了大约 10 个孔,类似于我们需要预测的数量。

0.8432431728379238{'bag__base_estimator': LinearRegression(),
 'bag__bootstrap': True,
 'bag__max_features': 0.75,
 'bag__max_samples': 0.75,
 'pca__n_components': 9,
 'poly__degree': 1,
 'scaler': MaxAbsScaler()}

上面显示了“最佳分数”和最终的超参数集。现在,我们将把我们的最佳估计和实现写到解决方案文件中。

提交解决方案文件进行评分,我们可以生成以下图。首先,我们有一个准确度图,它将预测值与实际值进行了比较。10 口井的产量。

MSE: 24697.56

下面显示了不确定性模型和真实值。

最后是善良的情节。我们在上面的scorer函数中使用的品质度量与黑色虚线相对于红色对角线的积分有关,其中红色对角线上方的面积是下方面积的两倍。

Goodness: 0.856

最后,我在其他团队中的排名(注意,这只是客观评分的一部分,在实际的黑客马拉松中,我们有额外的代码质量和演示栏,因此此表中其他团队的最终排名并不反映比赛的实际最终结果)。对于一天的工作来说还不错!

这里的最后一个信息是,导致良好估算和特征工程策略的领域专业知识远比花哨的机器学习模型有用。此外,准确理解您正在寻找的感兴趣的数量,以便您很好地评估(即评分)您的模型。最终我用一个线性回归模型“赢”了比赛。

最初发表于T5【https://johnfoster.pge.utexas.edu/blog/posts/hackathon/】

如果我买不起量子计算机怎么办

原文:https://towardsdatascience.com/what-if-i-cant-afford-a-quantum-computer-51ce96cd7b9c?source=collection_archive---------18-----------------------

使用量子计算机还有其他方法

量子机器学习要不要入门?看看 动手量子机器学习用 Python

作者图片

量子计算机不再是科幻小说了。他们是现实。

谷歌已经在 2019 年宣布了量子优势——他们的量子计算机在 200 秒内解决了一个经典计算机需要 10,000 年才能完成的任务。尽管 IBM 反驳说,他们的一台(经典)超级计算机可以在不到三天的时间内解决同样的问题,但这仍然是一个令人印象深刻的加速。

但是,如果两个科技巨头争夺谁的设备首先证明量子优势,那么在你当地的零售商那里找到一台量子计算机出售的机会就很小了。所以,即使它们确实存在,除非你有几百万你不需要的钱,否则你今天是买不起量子计算机的。

同时,量子计算是最有前途的技术之一。这是一项技术,你可能想今天就开始学习,而不是明天。

那么,你能做什么?

选项 1:云

当然是云!如今,一切都在云端。有相当多的云提供商提供量子计算资源。

首当其冲的是 IBM。IBM 在 IBM cloud 中免费提供他们的量子计算机。目前,他们允许你使用的最大量子计算机是 27 量子位计算机。

问题是你必须等待一个空闲的位置。有时,你的电路运行需要几个小时。

第二,还有谷歌。谷歌提供基于量子计算服务的量子计算硬件。但是目前只允许那些在许可列表上的人访问。此外,他们没有指定硬件的大小。

第三个玩家是亚马逊。亚马逊不开发自己的硬件。但它们提供对其他制造商硬件的访问,如 Rigetti。他们的投资组合中有一台 32 量子位的 Aspen-8 量子计算机。缺点是你必须为每一次执行和每一个镜头付费。

选项 2:云模拟器

三个云服务也提供模拟器。经典计算机计算你的电路,而不是量子计算机。当然,它没有量子计算机快,但如果你只想看看你的电路是否工作,它们是一个有效的选择。

IBM Cloud 提供了不同的模拟器,大小高达 100 个量子位。虽然您可以免费使用它,但您的电路不会立即运行,而是必须等待一个空闲时间。

就像他们实际的量子硬件一样,谷歌对他们在谷歌云中提供的模拟器并不十分明确。

亚马逊 Braket TN1 模拟器可以模拟某些类型的量子电路,大小高达 50 量子位。

选项 3:本地模拟器

第三种选择是用你的本地机器来模拟量子电路。根据你的硬件和你创建的电路,你的本地设备可以在合理的时间内计算 10 到 20 个量子位。

明显的好处是,你不必等待你的电路运行,你也不必支付任何进一步的费用。

结论

局部仿真是电路开发过程中的最佳选择。每当你想知道具体的电路结构是如何影响结果的,你最好的选择就是你的电脑。

当然,你需要保持你的电路小。因此,您能够解决的实际问题的复杂性是有限的。

一旦你有了一个对小问题表现良好的电路,你就可以把它送到 IBM 的云模拟器和硬件上。你将看到你的电路是否在有噪声和退相干的真实环境中工作。并且您将知道它是否扩展到您的本地机器很可能无法模拟的大小。

最后,如果你想将量子电路嵌入到生产环境中,当时间很重要时,你可以考虑使用 AWS Braket 为使用真实设备付费。

量子机器学习要不要入门?看看 动手量子机器学习用 Python

在这里免费获得前三章。

如果我告诉你 RDBMS 可以处理时序数据会怎么样?

原文:https://towardsdatascience.com/what-if-i-tell-you-rdbms-can-handle-time-series-data-77a5bb43da06?source=collection_archive---------13-----------------------

本文旨在简化您的数据堆栈。

Unsplash 上由 Abdul A 拍摄的照片

今天,有大量的 NoSQL 数据库可用于处理时间序列数据。毫无疑问,它们解决了许多用例,并且还提供了与可视化工具的现成集成,但是在向数据架构添加新组件(假设它是处理时序数据的新组件)之前,让我们退一步分析一下,这真的有必要吗?从长远来看,每个新组件都有自己的运营挑战。

本文旨在简化您的数据堆栈。假设您的用例围绕关系数据库,现在您必须处理时间序列数据,以便可以对这些数据进行接近实时的查询。你会添加一个新的组件吗?

嗯,答案可能取决于很多原因,但是不要排除关系数据库。请继续阅读,了解如何在关系数据库中处理时间序列数据,并做出相应的决定。

说到这里,我们先来了解一下什么是时序数据。

时序数据

在时间维度上捕获的数据(事实)是时间序列数据,因此该数据的一个轴将始终是时间。该数据通常但不一定是(近)实时捕获的。它帮助我们回答如下问题:

  • 每分钟有多少用户访问应用程序?
  • 每小时销售多少产品?
  • 下个月的预测销售额是多少?

现在,这些时间序列数据需要以一种能够提供有意义结果的方式被接收、存储和转换。为了有效处理,对于时间序列数据有几个注意事项:

  • 它几乎是实时摄入的。
  • 用于实时报告。一般来说,近实时总量是根据这些数据计算出来的。对它的聚合查询本质上是临时的,因此在数据上定义的任何聚合都会随着数据的到来而改变。
  • 它是仅附加数据,但可能具有较高的接收率,因此需要支持快速写入。
  • 可以分析历史趋势来预测未来的指标。像 ARIMA 这样的机器学习算法被用来做时间序列预测。

现在问题来了,我们如何在 RDBMS 中设计这些数据?

考虑到高摄取率和接近实时的聚合,关系数据库无法直接处理上述数据考虑事项。但是给关系数据库添加一些填充,我们可以让它变得非常强大,以便处理时序数据。我们现在要讨论的关系数据库是 postgresql ,所涉及的填充是它的扩展

我们将在下面讨论两个这样的扩展。

时间刻度数据库

时间刻度数据库是 PostgreSQL 的开源扩展。由于它是作为 postgresql 的扩展捆绑在一起的,所以它可以支持 postgresql 的所有功能,如关系查询、完整的 sql 支持(而不是类似 sql 的)以及实时查询支持。

timescaledb 如何处理时序数据

它有一个超表的概念,超表是简单的时间数据块,存储在标准表中。这些超表是用户的抽象层,用户可以像在普通表上一样简单地在这个表上进行查询、连接或其他任何操作。

对这些超表的摄取是非常快的。根据文档,它支持每台服务器每秒接收超过 150 万个指标。

此外,对于连续聚合,可以在这些超表上创建物化视图,以便聚合接近实时可用。在内部,时间刻度数据库有后台进程负责刷新视图,并且刷新间隔和参数是可配置的。它还提供了与 Kafka、kinesis 等的集成,用于数据摄取。

一个物化视图是一个包含查询结果的数据库对象

如何创建这个时间序列数据的实时可视化?

物化视图有助于提供实时聚合,也可用于创建实时可视化。由于该扩展与 PostgreSQL 捆绑在一起,因此它可以与 Graphana 等任何可视化工具集成,并刷新连续聚合。

现在,有了这个简单的架构,你就知道如何获取时间序列数据,甚至创建可视化数据,这样就可以在办公室的大显示器上演示了(好吧,如果我们去办公室,就祈祷吧)。很简单,不是吗?只有一个关系层?

除此之外,它还有预测时间序列数据的方法!timescaledb 的文档非常丰富,可以跟着做概念验证。

管道数据库

Pipeline DB 是 PostgreSQL 支持的另一个扩展,它也可用于实时报告,与 timescaledb 类似,它支持对时序数据的物化视图进行实时聚合。

关于 pipeline DB 需要注意的是,它的效率来自于它不存储原始数据,所以如果您需要存储原始数据(IMO,它应该总是被存储)。但是它看起来也很有前途,并且是非常值得一提的用例。

嗯,就是这样。我想到写这篇文章是因为我非常喜欢将关系和时间序列捆绑在一起以简化堆栈的想法,以及完整的 SQL 支持。类似 SQL 的查询的问题是,加入它仍然需要时间,而完整的 SQL 也允许轻松加入堆栈。

现在您知道了,如何在 PostgreSQL 中添加 cape 并使其成为一个超级数据库。好吧,玩笑归玩笑,在做任何设计决定之前理解所有的概念是很重要的,我希望这篇文章能帮助你获得一些理解。

下次见 JD

如果标准不是最好的呢

原文:https://towardsdatascience.com/what-if-standard-is-not-the-best-534fab31dc3e?source=collection_archive---------33-----------------------

莎伦·麦卡琴在 Unsplash 上的照片

简单的解决方案并不总是最好的

在研究过程中,在某些时候,我需要在大矩形矩阵上评估一个特定的度量(多样性指数)。这与这个故事无关,但我说的是单细胞 RNA 测序数据。

在实践中,这有助于估计在群体中发现的不同成分的数量(例如,一本书中不同单词的数量),并且可以解释 [3]在许多复杂系统中出现的特殊幂律分布[1,2,4]。

熊猫

给定存储在文件中的数据,测量这个度量的问题可以使用著名的 pandas 库在一行 Python 代码中解决。

pd.read_csv().apply(lambda x: len(np.unique(x)))

https://pandas.pydata.org

这对于许多应用来说是很好的,并且不需要数据科学家付出任何努力来实现它是非常直接的,但是..

我需要在大桌子上测量这个数量(单细胞数据有几十万个样本),这个简单的任务对熊猫来说很慢。pandas 方法需要很多时间将数据加载到内存中,然后在每一行上评估函数。

一种更快的方法是在将行加载到内存中时立即处理它们,然后丢弃它们(节省内存是一个额外的好处),所以我在 scartch 中实现了它。

C++解决方案

我对这个特殊问题的解决方案使用了标准模板库和 Boost。

这个想法

如上所述,这个想法是在这些行可用时尽快解析它们。我定义了一个线程读取文件,将其存储缓冲区中,其他线程解析可用的读取行。因为我的度量是在列上估计的,所以我需要多个线程同时解析不同的行而不是重叠,这是用一个互斥数组解决的(每列一个)。

有约束力的

使用升压。Python 我能够将我新创建的模块加载到一个 Python 模块中,所以使用它会像熊猫一样容易。

https://boost.org

下面是一个绑定函数的例子

#include <boost/python.hpp> BOOST_PYTHON_FUNCTION_OVERLOADS(loadFile_overloads, loadFile<long>, 1, 3) BOOST_PYTHON_MODULE(pydiversity){    
    namespace bp = boost::python;
    using namespace bp;
     def("diversity", loadFile<long>, loadFile_overloads(bp::args("file", "nThreads", "verbose", "out_filename")));
}

它可以很容易地导入到 python 中

import pydiversity
pydiversity.diversity("mainTable.csv")

基准

我测量了解析一个有 10000 列和 20000 行的表的时间(你可以猜猜为什么),看起来我的解决方案比简单的熊猫应用快 60%。此外,我的解决方案可以利用运行它的机器的全部能力,在一台多核机器上,相对于 Python 实现,加速比为 90%

英国泰晤士报(1785 年创刊)

  • Python 使用熊猫 : (8.05 0,11)s
  • Python 绑定单线程:(3.3 0,4)s
  • 使用多线程的 Python 绑定:(0,71 0,14)s
  • 纯 C++单线程:(3.2 0,3)s
  • 纯 C++多线程:(0,66 0,11)s

加速

因为我的解决方案可以是多线程的,所以我测量了用越来越多的线程运行时的增益。我在一台 6 核机器上测量了加速比(1 倍/(最慢时间)),有一个可感知的增益。

在 6 核机器上加速。图片作者。

结论

除了这个特殊的问题,我希望能激励人们不断深入研究,并在可能的情况下实施更有效的解决方案。很多次我听到“因为这是 Python 做这件事的方式”,但作为数据科学家,我认为我们应该提高自己,总是实施新的解决方案,我们不应该每次都接受最简单的解决方案。

密码

https://github.com/fvalle1/fastDiverse/

参考

  1. Lazzardi S,Valle F,Mazzolini A,等单细胞转录组数据中出现的统计规律。(2021)bioRxiv 2021 . 06 . 16 . 448706。

2.马佐利尼 A,格拉尔迪 M,卡塞尔 M,等复杂组分系统中共享组分的统计。 (2018)体检 X

3.Mazzarisi O,de Azevedo-Lopes A,阿伦松·JJ,Corberi F 极大多样性和齐夫定律。(2021) arXiv:210309143

4.语言学中的统计规律。 (2016)施普林格国际出版公司。

如果我们不必在可解释性和性能之间妥协会怎么样?

原文:https://towardsdatascience.com/what-if-we-didnt-have-to-compromise-between-interpretability-and-performance-da00d4e30a44?source=collection_archive---------26-----------------------

小数据中的机器学习算法基准测试

在过去的几年里,我读了很多关于可解释性和性能之间的权衡(顺便说一下,这让我想起了很多偏差-方差权衡)。我见过许多图表,显示了标准机器学习算法在这两个指标方面的地位,如下所示:

  • 一方面,线性模型天生简单且易于理解,只有当数据符合线性的硬约束时才能产生良好的性能
  • 另一方面,我们发现了集成算法,如随机森林,甚至更进一步的深度神经网络,它们对大多数数据都有良好的性能,但代价是在没有额外策略的情况下难以解释(例如,使用时间SHAP )。

性能与可解释性领域的主要机器学习算法

有一类算法总是从那些图表以及机器学习的参考书和材料中缺失,即符号回归算法拉斐尔·鲁杰罗最近写了一篇关于它的文章,名为被遗忘的机器学习算法,这说明了一切!

符号回归

那么,这个进化算法界最了解的算法是什么呢?它包括将模型构建为数学表达式,也可以表示为表达式树。以下示例显示了模型的数学公式,其中涉及输入特征 X 的选择,使用一元运算符(正弦、平方根和对数)将其修改为新特征,以及使用二元运算符(加法和乘法)将其交互。****

符号回归模型的示例

由于搜索相关的新特征以及如何组合它们是一个非常大的搜索空间和困难的优化问题,传统的机器学习并不真正适合处理它,符号回归的大多数算法依赖于遗传编程。在符号回归不为 ML 社区所熟知的可能原因中,我们可以列举以下几个:较慢的计算时间,缺乏与 ML 相关的基准,性能不太好,超参数数量大…

然而,在过去的几年里,事情开始发生变化:

  • 回归中有几个比较不同符号回归算法与更传统算法(线性模型、决策树、随机森林、多层感知器)的基准,其中一个在大量 ML 数据集上[1]
  • 最近发布的几个符号回归算法表明,它们可以实现与随机森林相当的 T2 性能,并接近 T4 梯度增强。这些算法分别是 Zoetrope 遗传编程(ZGP)【2】和特征工程自动化工具(FEAT)【3】。

符号回归算法的性能

在再次谈论可解释性之前,让我们看看符号回归算法相对于更传统的机器学习算法的表现如何。

下图是从Penn Machine Learning Benchmark数据库中对近 100 个数据集执行的基准测试的结果生成的,这些数据集具有多达 3000 个观察值。它们显示了每个算法对所有数据集运行 20 次后,归一化均方根误差(NRMSE)和 R2 的重新分配。这些算法是按平均值排序的(在 NRMSE 是从低到高,因为我们希望它尽可能接近 0,在 R2 是从高到低,给出的分数是 1,表示完全符合)。

从这些图中,特别是关于 R2 分数的图,我们看到 4 种算法明显优于其他算法,即:梯度推进、Zoetrope 遗传编程(ZGP)、随机森林和特征工程自动化工具(FEAT)。因此,这里要传达的信息是,良好的性能也可以通过符号回归来实现。

符号回归和机器学习算法在归一化均方误差(NRMSE,顶部)和 R2 分数(底部)中的性能,按所有数据集的平均值排序。最好的算法在左边。

请注意,这里的基准测试是使用大多数方法的默认参数运行的,并且为了尽可能公平起见,对线性方法进行了交叉验证。

可解释性与性能

我们现在回到我们最初的问题:这些算法在可解释性和性能测量方面表现如何?更准确地说,我们是否总是要在这两者之间做出妥协?答案是否定的,这要归功于符号回归算法,我们接下来要研究它。

下图是根据与之前相同的基准生成的。它显示了中值 R2 的性能与一些符号回归算法和标准机器学习算法的可解释性。这里的可解释性被测量为树中的节点数(对于符号回归或决策树)或系数数(对于线性模型或多层感知器)。

它表明,3 个顶级符号回归算法能够实现与随机森林一样好的性能,可解释性接近线性模型,产生人类可以理解的模型。

请注意可解释性的对数标度:这意味着符号回归算法可以实现“简单”1000 倍(就节点数量而言)的模型,而性能没有损失。此外,它们可以非常清楚地显示变量之间的相互作用,这在一些应用程序中非常有用。在上面给出的表达式树的例子中,已经发现变量 X9 和 X3 的平方根之间的相互作用。

符号回归和机器学习算法的实际性能与可解释性

基准测试的完整细节在[2]中给出,这些结果的基准测试代码可从以下 Gitlab 存储库中获得:https://git lab . devenv . mydata models . com/publications/bench-zgp-symbolic-regression

结论

所以最后,使用符号回归,有可能获得既有好的性能又有好的可解释性的模型。取决于问题(及其大小!),为了获得可以直接解释的模型,有时牺牲一点性能(例如与深度神经网络相比)是值得的,而不需要求助于额外的方法来理解如何从模型中获得预测。

参考

[1] Orzechowski,p .,La Cava,w .,& Moore,J. H. (2018 年)。我们现在在哪里?近期符号回归方法的大型基准研究。在遗传和进化计算会议上(第 1183-1190 页)。**

[2] Boisbunon,a .,Fanara,c .,Grenet,I .,Daeden,j .,Vighi,a .,和 Schoenauer,M. (2021 年)。回归的遗传程序设计。在 2021 年 7 月 10 日至 14 日的遗传和进化计算大会(GECCO’21)上。https://doi.org/10.1145/3449639.3459349**

[3]拉卡瓦、辛格、塔加特、苏里和摩尔(2019 年)。通过进化树网络学习回归的简洁表示。在国际学术代表会议 (ICLR)。https://openreview.net/pdf?id=Hke-JhA9Y7**

如果…你必须用无代码工具构建一个数据栈,那会怎样?

原文:https://towardsdatascience.com/what-if-you-had-to-build-a-data-stack-with-no-code-tools-c01380697117?source=collection_archive---------21-----------------------

最佳无代码工具及其用例的基准

图片来自 castor 的网站

在过去的几年里,我们见证了技术生态系统的巨大演变,因为无代码工具已经迅速改变了我们生产和管理软件的方式。今天,任何拥有笔记本电脑、互联网连接和大脑的人都可以使用无代码工具构建网站或应用程序。数据生态系统在很大程度上跟上了这种发展,最近出现了一系列无代码数据/机器学习工具。目标:降低现代数据堆栈每一层的技术壁垒,让尽可能多的人能够利用数据科学。无代码数据工具在数据社区产生了很多兴奋。原因是,这些工具引领了走向数据民主化的运动,是现代数据堆栈下一波创新的五大支柱之一。今天的主题是深入无代码生态系统,理解这些工具的能力/限制,并找出可用的解决方案。

什么是无代码?

无代码平台使用不涉及编写代码的编程方法。相反,用户使用图形用户界面(GUI)工作,他们可以使用模板、逻辑序列和拖放来实现所需的输出。后者可以是数据摄取、转换、分析、机器学习等。一个无代码的数据平台基本上使人们能够在不使用代码的情况下执行各种数据操作,这在传统上是不可能的。这些解决方案提供了一条捷径——利用代码的力量,但抽象掉复杂性,以便用户可以专注于设计和逻辑

无代码策略关注四个关键领域:

  1. 提供拖放功能或其他配置流程的可视化方式。
  2. 创建过滤器数据查询以允许即时定制流程。
  3. 使用 API整合来自各种来源的数据。
  4. 吸引非技术用户,授权他们执行给定的流程。

无代码平台不同于低代码平台。低代码简单地代表减少的编码量。借助低代码,您无需编写一行代码即可构建工作流/数据科学模型。然而,也可以通过编写自己的代码来定制它们,这增加了灵活性。

让我们看看无代码如何在数据科学/机器学习的领域中工作:

机器学习是一种痛苦的学习:你需要准备数据,训练你的模型,调整你的参数,等等。机器学习模型传统上是使用 python 等脚本语言构建的,这增加了复杂性。无代码/低代码机器学习工具,如 Google autoML,允许您快速创建机器学习模型。怎么会?主要是通过自动化机器学习过程中的一些步骤。一些工具,如 autoVIML 可以自动将你的数据放入不同的机器学习模型中,以找出哪一个最适合你的数据。自动化,或者使用拖放选项来完成这个过程的一部分,为数据团队节省了大量的时间。‍

无代码工具机器学习模型流程—图片由 Louise de Leyritz 提供

利害攸关的是什么?

无代码数据平台在民主化数据访问中发挥了关键作用。这些工具的广泛采用不会在一夜之间发生,但一旦发生,它将对非技术用户和数据工程师/开发人员产生同样的影响,同时为每个人带来巨大的生产力提升。‍

对于商业用户

无代码数据平台消除了技术障碍,使非技术用户能够操作数据。这是关键,因为企业开展分析工作的方式已经发生了转变。事实上,如今的公司都在从事运营分析——一种让“运营”团队可以访问数据的方法,用于运营用例(销售、营销、..).

我们将它与仅使用数据生成仪表板和 BI 报告的更经典的方法区分开来,在这种方法中,只有数据科学家/数据分析师会与数据争论。运营分析不是使用数据来影响长期战略,而是为企业的日常运营提供战略信息。简而言之,就是让公司的数据发挥作用,让组织中的每个人都能做出更明智的决策。

实际上,这意味着销售、营销和其他业务团队每天都要与数据和分析打交道,进行各种分析来启发他们的短期战略。这种趋势只会加剧,这意味着越来越多的人,尤其是非技术人员,将数据作为他们日常工作的一部分。易于使用的数据/机器学习平台允许没有编码技能的用户优化日常操作,并更有效地解决业务问题。对于这些平台来说,学习曲线要平滑得多,这意味着用户可以快速进行价值生成分析,而不是花几个月来掌握复杂的软件。

更重要的是,无代码是为了让非技术人员能够自己在不同的云服务之间分析和路由数据,而不是被迫拿着票等待数据工程师和数据科学家为他们做这些工作(这可能需要几天或几周)。

对于数据工程师和数据科学家来说

首先,无代码并不意味着没有编码员,数据工程师/科学家不会很快消失。我们不要忘记,无代码工具是用代码构建的,这些平台的存在是因为有优秀的开发人员一直在努力寻找更好的解决方案。

无代码数据解决方案赋予了新的现代数据堆栈的每一个角色,尤其是技术奇才。事实上,这些平台自动化了数据处理过程中可以自动化的东西。数据工程师、数据科学家和其他训练有素的专家可以停止从事可以自动化的重复任务,转而专注于解决更大、更有趣的问题,比如系统设计中的偏差。

无代码数据工具不应该只被非编码人员使用。事实上,完全精通 python 的数据人员也可以通过使用无代码方法进行数据分析而获益。使用无代码方法可以让您比使用更传统、代码量更大的方法更快地处理数据。与一个对编程一无所知的人相比,程序员也能更好地理解无代码工作的逻辑。

对于企业

采用无代码工具意味着组织不需要依赖工程师和技术数据人员团队来利用他们的数据。技术人才稀缺且昂贵。占美国市场 99%的中小型公司通常雇不起大数据团队。无代码平台代表了一种部署定制数据处理解决方案的新方法,否则大多数组织将无法实现。小公司可以开始利用机器学习和数据分析,而不必进行大量投资。

无代码工具的缺点

另一方面,无代码工具也有一些限制,在您决定构建无代码数据栈之前,应该考虑到这些限制。

刚性模板

从设计上来说,无代码工具提供的选项不如编码工具精炼。这是完全正常的,就像你可以用文字表达比手势更多的东西一样。当然,现在手势变得非常方便,但这并不意味着你应该只把它作为唯一的交流方式。没有代码工具提供各种可以被配置来满足一组用例的模板。然而,一旦您遇到不可避免的边缘用例,或者需要引入一个定制层,无代码工具就不再有用了。这种无代码的限制在数据处理领域尤其不利,因为在数据堆栈的每一层都有无数不同的用例。

例如,如果您决定完全依赖无代码平台进行数据科学和机器学习,您将很快陷入困境。在设计机器学习模型的时候,你希望你的模型尽可能的微调。有了可视化界面和拖放功能,你很快就会遇到这些平台的边界。原因是,这些平台都是基于模型的。设计数据科学/机器学习工具的开发人员通常决定提出易于理解和使用的简单模型,目的是使机器学习和数据科学能够为业务用户所用。问题是,简单的模型缺乏灵活性,因为人们只能在模型的框架内开发。现在,平台设计者可以选择更精细的模型,从而获得更大的灵活性。但是掌握这些工具的学习曲线显然比简单的解决方案要陡峭得多。这与无代码平台的目的背道而驰,即让非技术用户也能接触到数据科学和机器学习。因此,在机器学习模型的易用性和微调之间存在一个关键的权衡。这就是为什么你应该知道你在为谁购买软件:数据科学家和机器学习工程师,还是商业用户?最终用户会影响你选择的软件类型。

平台依赖性

无代码工具的问题是,遇到供应商锁定问题只是时间问题。假设您决定使用无代码工具来编排您的报告工作流。问题是,一旦这些工作流围绕这个工具建立起来,你就完全依赖这个工具了。如果价格上涨,你必须继续支付或自己重建整个系统。在这两种情况下,这都不是一个理想的位置。

哪些非代码工具适合您的组织?

下面,你会发现一个无代码工具的前景,它可以帮助你选择一个适合你公司需要的工具。

无代码数据栈。全基准这里。—图片由路易斯·德·莱里兹提供

要获得完整的无代码工具基准测试和更多分类标准,请单击此处。

更现代的数据堆栈基准?

点击此处,了解更多关于现代数据堆栈的基准测试和分析。我们写了利用数据资产时涉及的所有过程:从现代数据堆栈到数据团队的组成,再到数据治理。我们的博客涵盖了从数据中创造有形价值的技术和非技术方面。如果你是一名数据领导者,并希望更深入地讨论这些话题,请加入我们为此创建的社区

在 Castor,我们正在开发一个数据文档工具 Figma,Slack generation。或者对 Fivetran,Looker,Snowflake,DBT 的狂热爱好者来说是数据方面的。我们将我们的目录设计得易于使用、令人愉快且友好。

‍Want 去看看吗?联系我们,我们将向您展示一个演示。

原载于https://www.castordoc.com

语料库中什么是单词嵌入?

原文:https://towardsdatascience.com/what-in-the-corpus-is-a-word-embedding-2e1a4e2ef04d?source=collection_archive---------35-----------------------

这些 NLP 模型中的一些很拗口

马修·费尼在 Unsplash 上的照片

虽然计算机非常擅长处理数字和执行逻辑命令,但它们仍然难以理解人类语言的细微差别!单词嵌入旨在通过构建捕捉意义和上下文的单词的密集矢量表示来弥合这一差距,用于下游任务,如问答情感分析。单词嵌入技术的研究构成了计算语言学领域的一部分。在本文中,我们将探讨建模语言的挑战,以及单词嵌入的演变,从 Word2Vec 到 BERT。

计算语言学

在最近对神经网络重新产生兴趣之前,计算语言学严重依赖于语言学理论、手工制作的规则和基于计数的技术。今天,最先进的计算语言学模型是通过结合大型带注释的语料库和深度学习模型开发的,通常缺乏语言学理论和手工制作的特征。在这篇文章中,我的目的是解释单词嵌入的基本原理和不同的技术,同时尽量减少行话,避免使用微积分。

“什么是语料库/语料库?”你可能会问。非常好的问题。在语言学中,语料库是指一种语言中特定语言元素的完整集合,如单词或句子。通常,语料库(或语料库)是新闻文章、小说、电影对白等的单语(统一语言)集合。

罕见的和看不见的单词

大型语料库中单词的频率分布遵循一种叫做齐夫定律的东西。该定律指出,给定一些自然语言话语的语料库,任何单词的频率与其排名成反比。这意味着,如果像“the”这样的单词排名为 1(意味着它是最常用的单词),那么它在语料库中的相对频率为 1。而且,如果像“of”这样的单词的等级是 2,那么它的相对频率将是 1/2。诸如此类。

来源于https://www . smashingmagazine . com/2012/05/stop-re design-start-tuning-your-site/

Zipf 定律的含义是,排名为 1000 的单词将每出现一个像“The”这样的排名第一的单词就出现一次。随着词汇量的增加,情况会变得更糟!Zipf 定律意味着一些单词非常罕见,在你的训练数据中可能只出现几次。或者更糟糕的是,这些罕见的单词在你的训练数据中不存在,但在你的测试数据中存在,也被称为未收录(OOV)单词。这意味着研究人员需要采用不同的策略来增加不经常出现的词(也称为分布的长尾)的样本,并建立对看不见的词稳健的模型。应对这些挑战的一些策略包括上采样,使用 n-gram 嵌入(如 FastText)和字符级嵌入,如 ElMo。

Word2Vec,OG

每个尝试过 NLP 的人可能都熟悉谷歌研究人员在 2013 年推出的 Word2Vec 。Word2Vec 由两种不同的架构组成:连续词包(或 CBOW)和 Skip-gram。这两个模型都产生了一个单词嵌入空间,在这个空间中可以找到相似的单词,但是它们的架构和训练技术略有不同。

来源于https://arxiv.org/pdf/1309.4168v1.pdf

使用 CBOW,我们通过尝试预测给定上下文向量的目标单词 w 来训练模型。Skip-gram 是相反的;我们通过尝试预测给定目标单词 w 的上下文向量来训练模型。上下文向量只是在我们的目标单词 w 周围找到的单词的单词包表示,如上图所示。Skip-gram 在计算上比 CBOW 更昂贵,因此应用对远距离单词的下采样来给予它们更小的权重。为了解决罕见词和常见词之间的不平衡,作者还积极地对语料库进行子采样——丢弃一个词的概率与其频率成正比。

来源于https://developers . Google . com/machine-learning/crash-course/embeddings/translation-to-a-lower dimension-space

研究人员还展示了 Word2Vec 的显著组合属性,例如,人们可以通过单词嵌入来执行向量加法和减法,并找到【国王】 + 【女人】 = 【女王】。Word2Vec 打开了单词嵌入世界的大门,开启了语言处理需要更大更差的机器,越来越少依赖语言学知识的十年。

快速文本

到目前为止,我们讨论的嵌入技术用不同的向量表示词汇表中的每个单词,因此忽略了单词的内部结构。FastText 扩展了 Skip-gram 模型,还考虑了子词信息。这种模式对于语法关系如主语、谓语、宾语等的语言是理想的。通过词形变化来反映——单词被变形以表达其含义或语法关系的变化,而不是通过单词的相对位置或添加助词来表达。

这样做的原因是 FastText 学习字符 n 元语法的向量(几乎像子词一样——我们一会儿会谈到这一点)。然后,单词被表示为它们的 n 元文法的向量之和。子词的创建如下:

  • 每个单词被分解成一组字符 n 元语法,每个单词的开头和结尾都有特殊的边界符号,
  • 原始单词也保留在集合中,
  • 例如,对于大小为 3 的 n 元语法和单词“there ”,我们有以下 n 元语法:

< ththehererere>and the special feature

特征<>之间有明显的区别。这种简单的方法支持跨词汇表共享表示,可以更好地处理罕见的单词,甚至可以处理看不见的单词(以前的模型缺乏这一特性)。它训练速度快,不需要对单词进行预处理,也不需要任何语言知识。作者进行了定性分析,并表明他们的技术优于不考虑子词信息的模型。

工程与后勤管理局

ELMo 是由 AllenNLP 于 2018 年开发的一个 NLP 框架。它构建了深度的、语境化的单词嵌入,可以处理看不见的单词、句法和语义,以及多义性(单词在给定的语境下具有多重含义)。ELMo 利用预先训练的两层双向 LSTM 模型。从预训练的深度双向 LSTM 模型的内部状态中提取单词向量。ELMo 不是学习单词级标记的表示,而是学习字符级标记的表示。这使得它可以在测试和推理过程中有效地处理词汇之外的单词。

比尔斯特姆的内部运作。来自https://www.analyticsvidhya.com/

该架构由堆叠在一起的两层组成。每一层有两个通道,一个向前通道和一个向后通道。为了构造字符嵌入,ELMo 在输入单词上使用字符级卷积。正向传递对导致并包括某个单词的句子的上下文进行编码。反向传递对该单词之后和包括该单词的句子的上下文进行编码。前向和后向 LSTM 隐藏向量表示的组合被连接并馈入 biLSTM 的第二层。最终表示(ELMo)是 biLSTM 的第二层的原始单词向量和级联的前向和后向 LSTM 隐藏向量表示的加权和。

让 ELMo 在当时(是的,2018 年是 NLP 年很久以前的事)如此具有革命性的是,每个单词嵌入都编码了句子的上下文,并且单词嵌入是其字符的函数。因此,ELMo 同时解决了多义词和看不见的词所带来的挑战。除了英语,预先训练的 ELMo 单词嵌入在葡萄牙语、日语、德语和巴斯克语中可用。预先训练的单词嵌入可以在下游任务中使用,或者根据特定领域的数据进一步调整。

伯特

谷歌大脑的研究人员在 2018 年推出了 BERT ,比 ELMo 晚了几个月。当时,它打破了 11 个基准 NLP 任务的记录,包括胶水任务集(由 9 个任务组成)小队SWAG 。(是的,名字很时髦,NLP 充满了真正有趣的人!)

来源于https://synced review . com/2020/03/13/Bert lang-helps-researchers-choose-bet-models/

BERT 代表来自变压器的双向编码器表示。不出所料,BERT 使用了 Transformer 架构的编码器部分,并在未标记的books corpus(800 万字)和未标记的英语维基百科(2500 万字)上以伪监督的方式进行了一次预训练(稍后将详细介绍)。然后,可以通过添加一个附加的输出(分类)层来微调预训练的 BERT,以用于各种 NLP 任务。

如果你对变压器(和注意力机制)不熟悉,看看我写的这篇文章。在他们令人难忘的题为“注意力是你所需要的全部”的论文中,谷歌大脑的研究人员介绍了 Transformer,这是一种新型的编码器-解码器模型,它仅依赖注意力来绘制输入和输出序列之间的全局依赖关系。该模型使用位置编码注入有关标记的相对和绝对位置的信息。令牌表示被计算为令牌嵌入、段嵌入和位置编码的总和。

本质上,BERT 由堆叠的变压器编码器层组成。在 Google Brain 的论文中,他们引入了两种变体:BERT Base 和 BERT Large。前者包括 12 个编码器层,后者包括 24 个。与 ELMo 类似,BERT 双向处理序列,这使得模型能够从左到右捕捉上下文,然后再从右到左捕捉。每个编码器层应用自关注,并通过前馈网络传递其输出,然后传递到下一个编码器。

阿拉马尔,J .(2018)。图解变压器[博客帖子]。检索自https://jalammar.github.io/illustrated-transformer/

使用两个任务以伪监督方式对 BERT 进行预训练:

  • 掩蔽语言建模
  • 下一句预测

为什么我说伪监督是因为神经网络天生就需要监督才能学习。为了训练转换器,我们将非监督任务转换成监督任务。我们可以对文本这样做,文本可以被认为是一系列单词。请记住,术语双向意味着一个单词的上下文是它前面的单词和后面的单词的函数。自我关注与双向处理相结合意味着语言模型是全方位的,这使得实际学习潜在变量变得困难。随之而来的是屏蔽语言模型,它利用文本的顺序性,并假设一个单词可以通过它周围的单词(上下文)来预测。对于这个训练任务,所有单词的 15%被掩蔽。**

来源于researchgate.net

MLM 任务帮助模型学习不同单词之间的关系。下一句预测* (NSP)任务帮助模型学习不同句子之间的关系。NSP 的结构是一个二元分类任务:给定句子 A 和句子 B,B 是否跟随 A,或者它只是一个随机的句子?***

这两项训练任务足以学习真正复杂的语言结构——事实上,一篇名为 “伯特对语言的结构了解多少?” 演示了 BERT 的层是如何捕捉越来越多的语言语法粒度的。作者表明,BERT 的底层捕捉短语级信息,而中间层捕捉句法信息,顶层捕捉语义信息。

自 2019 年起,谷歌在谷歌搜索中加入了 BERT,以进一步提高搜索结果的质量。搜索查询通过 BERT(使用最新的云 TPU)运行,特征表示用于对最佳结果进行排名。这张图展示了这个著名的搜索引擎在使用 BERT 后有了多大的改进。

BERT 被添加到搜索引擎前后的谷歌搜索结果。来源于 https://www.seroundtable.com/google-bert-update-28427.html

自诞生以来,BERT 已经启发了许多最新的 NLP 架构、训练方法和语言模型,包括谷歌的 TransformerXL ,OpenAI 的 GPT-3XLNet罗伯塔,以及多语言 BERT 。它对语言理解的通用方法意味着它可以用最少的努力对各种 NLP 任务进行微调,包括问答情感分析句子对分类命名实体识别

结论

虽然单词嵌入非常有用,并且很容易从文本语料库中编译,但它们不是神奇的独角兽。我们强调了这样一个事实,即许多单词嵌入与歧义性和词汇表之外的单词作斗争。并且虽然基于接近度推断单词之间的语义相关度相对容易,但是基于单词嵌入推导出具体的关系类型却要困难得多。例如,即使小狗和狗可能被发现靠得很近,但知道小狗是一只幼犬就更具挑战性了。单词嵌入也已经被证明反映了他们接受训练的文本中存在的种族和性别偏见。

当对大量数据进行训练时,单词嵌入在学习非常复杂的语言结构的能力方面确实非常出色。对于未经培训的人(或未经培训的 4IR 经理)来说,它甚至可能看起来很神奇,因此当我们使用单词嵌入时,强调并记住这些限制是非常重要的。**

我很想听到你的反馈。请随时给我发电子邮件,地址是jeanne.e.daniel@gmail.com

数据目录到底是怎么回事?

原文:https://towardsdatascience.com/what-in-the-world-is-going-on-with-data-catalogs-d926220306b5?source=collection_archive---------24-----------------------

意见

数据目录正面临一场身份危机。原因如下。

图片由 Erica ZhouUnsplash 上提供。

似乎每次我刷新我的 Twitter feed,一个新的创业公司就会推出“有史以来世界上最伟大的数据目录”这太令人兴奋了!

如果一家公司能够建立自切片面包以来的下一个最佳目录,数据世界肯定会集体松一口气。不要误解我的意思:这里正在发生许多创新,并且正在取得明显的进步。支持数据工程师和软件开发人员直接在数据治理报告和仪表板中工作的集成—检查。促进更大协作的数据科学工作手册—检查。ML 支持自动数据分析—选中。

但是数据目录现在如此受关注的原因并不是因为我们对它们满意。因为他们有身份危机。

一名数据工程师或分析师走进一家酒吧…

想象你走进你最喜欢的酒吧。让我们称之为数据潜水。有当地运动队的海报,tiki 火炬(当然是用电点燃的),还有一个巨大的舞池。

你走向酒保。

“它会是什么?”她问道。

“请给我一杯开胃酒,”你说。你已经有一段时间没喝过了(可能是在疫情之前吧?),但你记得它味道很好,尤其是像今天这样的大热天。

酒保抓起一个杯子放在你面前。

“配料在吧台后面。开始吧。”

听起来熟悉吗?可能不会,但是在数据的背景下,这种“自助服务”的方法可能会有所启发。

Mode 的联合创始人兼首席分析官本·斯坦西尔(Benn Stancil)最近写了一篇文章,对自助式数据工具面临的挑战充满了诗意。

Stancil 说,“理论上人们可以自助的问题越多,实际上他们可以自助的问题就越少。随着您添加更多选项,自助工具不再看起来像疯狂的图书馆,而开始看起来像一个空白文档,需要人们完整地编写自己的故事。虽然这是分析师想要的,但不是所有人都想要的。”

虽然 Stancil 谈到了指标提取的“自以为是的简单性”与衡量数据的一刀切方法,但我们可以将这一视角应用于数据目录。太多的选择,太少的意见,实际上需要什么,使他们成功。

他举了一个例子,ELT 提供商为他们能(和不能)向数据工程师提供什么提供了一个有限的、清晰的定义:简单、快速的数据摄取。

现在,在 2021 年,数据目录正处于一个类似的十字路口:努力成为每个人的一切,或者做好一两件事。

选择你自己的冒险:数据目录版

套用简·奥斯汀的话,“一个普遍公认的真理是,运气好的数据工程师一定需要数据目录。”

过去,我曾经写过关于 数据目录如何达不到 的三个主要原因:

  • 自动化需求的增加:传统的数据目录和治理方法通常依赖数据团队来完成繁重的手动数据输入,让他们负责随着数据资产的发展更新目录。这种方法不仅耗时,而且需要大量原本可以自动化的人工劳动,从而为数据工程师和分析师腾出时间来专注于真正有意义的项目。
  • 随着数据变化而扩展的能力:当数据结构化时,数据目录工作良好,但在 2021 年,情况并非总是如此。随着机器生成数据的增加和公司对 ML 计划的投资,非结构化数据变得越来越普遍,占所有新产生数据的 90%以上。
  • 缺乏分布式体系结构:尽管现代数据体系结构的分布(参见: 【数据网格 )以及将半结构化和非结构化数据作为规范的趋势,大多数数据目录仍然将数据视为一维实体。随着数据的聚合和转换,它会流经数据堆栈的不同元素,从而几乎不可能进行记录。

我分享了为什么团队需要通过应用数据发现的原则来更有创造性地思考数据目录。简而言之,数据发现是指根据一组特定消费者如何接收、存储、聚合和使用数据,对特定领域的数据进行动态了解。作为数据从业者,数据发现是我们理解我们正在处理的事情并向利益相关者传达这种“理解”的能力的核心。

那么,好的数据发现的结果是什么?这取决于你问谁。

我鼓励您选择所有适用的选项:

  • 数据质量
  • 数据治理和合规性
  • 合作
  • 谅解
  • 讨论
  • 形象化
  • 安全性
  • 可靠性
  • 新闻报道
  • 可用性
  • 世界和平

这份清单令人应接不暇,令人困惑。这并不是说一个好的数据目录不能勾选多个框。他们可以——也确实可以。但是,如果我们对自己的目标没有一个清晰的定义,我们怎么可能追踪我们是如何达到目标的呢?

以下是我们见过的用于跟踪数据目录性能的一些测量方法。再次检查所有适用的选项:

  • 数据准确性
  • 数据新鲜度
  • 使用指标
  • 访问数据的速度
  • 编目的数据量

但是这里缺少了一些东西:这些度量跟踪“基于解决方案”的结果,但是这些真的能告诉你数据是否有用吗?可靠呢?还是值得信赖?这是数据目录经常丢失的地方。

现代数据目录经常没有一个明确的身份:换句话说,就是一个用户故事。

数据目录能找到方向吗?

在过去的生活中,我们的一个前同事花了两年时间建立了一个没有人使用的数据字典。为什么?当他的团队完成时,需求是陈旧的,解决方案不再相关。

不幸的是,他的经历往往是常态,而不是例外。虽然产品愿景为任何好的解决方案铺平了道路,但当我们为解决实际客户问题而构建时,会开发出更强大的技术并取得更好的成果。现在,无论从哪个角度看,数据都需要以光速移动,这种客户至上的方法比以往任何时候都更加重要。

数据目录非常重要,因为它们是我们衡量世界的文字索引。但是我们不认为它们真的有用,除非它们在设计时有明确的目的。

但也许这只是我们…无论如何,我们都渴望看到大数据目录身份危机如何解决。

是吗?

你知道数据星表到底是怎么回事吗?我们洗耳恭听。伸出手去 巴尔摩西 或者 黄应祥

本文由蒙特卡洛首席执行官兼联合创始人 Barr Moses 和 HubSpot 首席解决方案架构师兼前商业智能副总裁 Gordon Wong 共同撰写。

什么是累积分布函数?

原文:https://towardsdatascience.com/what-is-a-cumulative-distribution-function-2e0540ec2a60?source=collection_archive---------26-----------------------

CDF 及其在数据科学中的应用综述

(来源=https://pixabay.com/images/id-2548105/)

介绍

B ack 五月份,我看了一个属于大多数统计分布的分布函数,叫做概率密度函数,或 PDF。PDF 是统计推断的一个非常重要的部分,同样,它的兄弟函数累积分布函数也是如此。如果你想先了解 pdf 再了解 CDF,你可以在这里阅读我写的关于 pdf 的文章:

[## 什么是概率密度函数?

towardsdatascience.com](/what-is-a-probability-density-function-d9b4b8bea121)

我强烈建议在尝试使用 PDF 之前,对 PDF 及其用途有一个适当的了解。这是因为 CDF 通常比典型的 PDF 复杂得多。它们通常也用于 PDF 分发的数据。记住这一点,让我们从这一点开始。PDF 分布式数据到底是什么?这意味着数据已经使用函数进行了分发。在统计学中,这些函数通常利用数据中的某些指标。然后将公式应用于整个特征。这将数据分布到一个分布中。例如,正态分布的 PDF 只是从 xbar(当前样本)中减去 mu(平均值)除以 sigma(标准偏差)。)

更多细节

一个变量 X 的 CDF,或者只是 X 的分布函数,本质上只是 X 取一个小于等于 X 的值的概率的表示,当然这是一个连续统计特征的函数。CDF 的独特之处在于它是单调的。更具体地说,单调递增。这意味着加班,概率会一直增加。

这意味着 CDF 通常用作连续分布的标量。连续概率分布,或 CPD,是其元素是不可数集合的概率分布。这意味着它们都是唯一的,并以累积分布函数为特征。然后,这可以用于计算每个支持子集的概率。你可能熟悉的这种分布的一个很好的例子是正态分布。此外,均匀分布也是一种连续的概率分布。这在数学上等同于

Fx(x) = P(X <= x)

其中,等式的右侧代表 X 取值小于或等于 X 的概率。X 位于区间(a,b)中的概率,其中 a < b。更简单地说,我们正在检查 X 小于或等于 X 的概率。如果是这种情况,那么我们的线将继续直线前进。否则,我们就上去。这正是赋予 CDF 山形的原因。这也正是它单调不减的原因。关于 CDF 需要注意的另一点是,它们总是右连续的。这意味着值从左到右是连续的。所以如果我们画出它们,它们会从左到右增加。

公式化差异

如前所述,CDF 是单调递增的。这意味着这个功能和 PDF 之间当然有一些明显的区别。PDF 的形状为抛物线,而 CDF 为非递减斜率。如果你已经准备好了我关于保序回归的文章,从技术上讲,这个函数的公式就是 CDF。最后,让我们比较一下 CDF 和 PDF 的基本函数方法,以便对这两个函数和它们之间的差异有一个更完整的数学理解。我们将从 CDF 开始:

Fx(x) = P(X <= x)

接下来是 PDF:

f = dX.P / dmu

结论

由于 CDF 的非递减性质,它们通常也比典型的 PDF 复杂得多。因此,我们将不会解决任何函数。然而,我将是第一个承认这是因为我只在代码中写过两个。它们都是大量的工作,现实是永远不会有一个场景需要这样做。

CDF 是许多编程语言中已经编程的后端组件。当然,还有更多的 CDF 需要寻找,我认为认识到对函数或概念有一个广泛的理解也是很重要的。无论如何,这是我对 CDFs 的快速介绍,希望这篇文章对那些希望学习更多关于统计学方法的人有所帮助,并且不要有太多的感官负担,因为这是我今天通过避免进入 20 分钟阅读媒体来试图避免的。我跑题了,非常感谢大家的阅读!

什么是数据字典?

原文:https://towardsdatascience.com/what-is-a-data-dictionary-8be625fafdf4?source=collection_archive---------16-----------------------

图片来自 Castor 的网站

如果您属于一个数据团队已经有一段时间了,那么您可能已经被您应该记录的表的数量淹没了。您可能还注意到,其他数据分析师和数据科学家花了大量时间处理这种类型的问题:

  • 回答我问题的最佳数据在哪里?
  • 列名“XXXX”是什么意思?
  • 我可以信任这个资源吗?
  • 谁创建了这个资源?数据是如何产生的?
  • 数据库上次更新是什么时候?该资源是由哪个进程创建的?
  • 如果我发现有问题(错误的记录、错误的行等),我可以联系谁..)?
  • 有人已经研究过这个问题了吗?

也就是说,数据人员花费更多的时间寻找和试图理解数据,而不是有意义的创造价值的数据分析工作。好消息是,数据字典是一个可以帮助解决所有这些问题的工具,让数据人员专注于他们工作的核心并赢得时间。“数据字典”一词在过去几年中获得了很大的关注,但对于它的含义、它与其他工具(如数据术语表或数据目录)的区别以及它的主要用途仍然存在困惑。

在这篇文章中,我们提供了这个问题的清晰度,以及一个模板和你和你的团队如何使用它的说明。如果你想直接跳到数据字典模板,点击这里。关于什么是数据字典和如何使用模板的更多信息,请继续阅读!

什么是数据字典?

数据字典是与存储在给定系统中的每个数据库模式、表、事件、文件或列相关的信息的存储库。这些信息被称为“元数据”。

元数据基本上是为提供您所拥有的数据信息而生成的数据(要素数量、行数等)..).例如,与特定图书文件相关的元数据包括标题、作者姓名、出版日期、目录等。元数据具有巨大的价值,因为它允许您释放数据的潜力。如果你不清楚为什么会这样,看看这篇文章。它更深入地解释了元数据的概念,并将帮助您理解元数据收集的相关性。

与书籍相关的数据和元数据—图片来自 Louise de Leyritz

回到要点,数据字典是存储与文件系统相关的所有元数据的地方。关于数据库的元数据通常存储在不同的表中,与原始数据库分开。这种资源使数据用户能够理解大量大型数据库的内容,而不必滚动浏览每一列和记录。例如,如果您想检查数据库中是否有空值,您只需检查数据字典中的元数据,而不是滚动数据库来查看某个字段是否可能为“null”。这种资源为数据用户节省了大量时间。

以一个包含你的网站用户记录的数据库为例。你将收集关于他们的不同类型的信息:出生日期、电子邮件地址、电话号码等..比方说,您创建了一个存储客户姓名的列。在“name”列的数据字典中,您将找到该列的定义、数据类型、可能的值、值是否唯一等。包含关于您的客户的每条记录的数据库将看起来像 this:‍

数据库中的表格 Louise de Leyritz 的图片

特定“名称”列的数据字典如下:

包含给定列的元数据的数据字典—图片由 Louise de Leyritz 提供

这是一个具体的例子。通常,对于数据库中的每个表,数据字典包括以下内容:

  • 表格名称—表格的预定义名称
  • 表格位置—精确的数据库、文件、书籍…
  • 表定义-数据库模式中表的内容和用途的详细描述。示例:“每行代表我们平台的一个用户”
  • 列名—列的预定义名称
  • 列定义—对列的内容和用途的详细描述,包括主键和外键指定。
  • 数据类型—列的预定义特征。数据类型因数据库管理系统(DBMS)而异。例如,在 Oracle 中标记为 BLOB 数据类型的列在 Microsoft SQL Server 中将被标记为文本。数据类型可以是整数、日期、字符串、XML 等。我们将在后面详细讨论数据类型。
  • 空值—指示“空”是否是可能的,这意味着是否可以为列存储空值。指明数据字典中的字段是否可以为空非常有用。这意味着数据用户不必打开数据库来检查一个实例是否可以为空。
  • 唯一值-指示每个值/行是否唯一。
  • 业务规则—包括模式验证或数据质量。
  • 实体关系和其他系统级图表。

这些信息通常以表格的形式存储。使用数据字典,甚至不需要打开数据库就可以发现数据库对象的上述信息。

数据字典是用来做什么的?

数据字典是与存储在给定系统中的每个数据库模式、表、事件、文件或列相关的信息的列表。这些信息被称为“元数据”。

虽然这看起来像是一个简单的练习,但是很难从不同的地方引入一直在变化的相同文档信息。将业务部门与相同的定义联系起来就更难了。我们合作的一家 B2B SaaS 公司很难让每个人在特定的日期或时间范围内对“客户数量”有相同的定义。为什么?

  • 财务团队将“客户数量”定义为在 2021 年 1 月 1 日 12:00AM→2021 年 1 月 31 日 11:59 PM 期间支付账单的客户总数。
  • 销售团队将“客户数量”定义为在 2021 年 1 月 1 日上午 12:00→2021 年 1 月 31 日晚上 11:59 之间签订合同的客户总数。
  • 销售团队将“客户数量”定义为在 2021 年 1 月 1 日 12:00AM→2021 年 1 月 31 日 11:59 PM 期间正在付款或处于 14 个试用期的客户总数。

这里的日期并不是真正的问题,而是在谈论特定指标时应该考虑的事件日期。

简而言之,数据字典让每个人都遵循这些定义。这样每个人都“说”同一种语言。数据字典用于:

  • 文档—数据字典是一种工具,可以清晰、有序地记录文件系统。这为数据分析师、业务分析师和其他用户提供了对数据结构细节的访问。文档齐全的数据库使员工能够立即找到并理解他们需要的数据。有了维护良好的数据字典,引用特定业务对象的每个分析都可以使用数据字典中的定义和描述作为指导。引用特定业务对象的每个分析都应该使用字典中的定义作为指南。
  • 沟通——为每个用户提供共享数据的唯一定义,并帮助开发人员衡量模式更改的影响。
  • 数据集成——数据库管理系统(DBMS)中元素的清晰定义为每个用户提供了上下文理解。
  • 决策制定——好的元数据管理软件有助于数据收集、项目开发和其他协作工作的规划。

如果你正在寻找好的数据字典软件,看看我们在市场上可用的工具基准。但是,假设您出于任何原因不想投资新的数据工具,您能做些什么呢?

Excel 解决方案

您确信数据字典的相关性,但是您还没有准备好安装一个 newt 工具?“移动”解决方案是让您的数据团队使用共享的 excel 电子表格和手动维护数据字典来处理数据文档。

此电子表格;元数据的中央存储库将包含文件系统中数据对象的描述。这包括表位置、表和数据库描述、数据质量、关于表列的细节等..该电子表格将成为贵公司中任何寻找特定表格的人的一个参考点,允许他们迅速找到、理解和使用数据对象。

点击此处获取数据发现/目录模板 —图片来自 Castor

这个 excel 数据字典易于使用、可靠,并将快速为您的数据团队提供价值。唯一的缺点是,随着文件系统中表格数量的增加,电子表格变得更加难以维护。但是,在以后迁移到自动化数据字典之前,没有什么可以阻止您手动启动。

在 Castor,我们为您的个人使用整合了一个基于电子表格的数据目录模板。请随意下载它,这样您就可以立即开始使用您的数据文档。

这个模板怎么用?

直接从你的桌面上,你可以像在谷歌上一样搜索数据资产。这个数据字典就像是您的数据资源的门户。

对于您拥有的所有数据对象,您可以使用此模板在桌面上记录它们。例如,以一个包含您的平台在 2020 年的用户列表的表格为例。在记录您的表格时,您应该特别注意三个方面:位置质量治理。我们依次讨论每个方面。

位置

在文档过程中,你的目标应该是根据定位你的表,在系统中的可以找到它,以及负责它。这样,员工可以快速方便地找到该表。因此,首先要指出表的位置(数据存储—数据库—模式)。也就是说,表是位于数据仓库还是数据湖中。您还应该指定可以在哪个数据库和哪个模式中找到该表。如果可能的话,指明表的 URL(数据源端点),这样员工就可以很容易地找到它。然后概述表名、一个** * 简短的 描述/ *表中包含的内容的定义,以及一些标记。指出数据集类型也很关键——这是该表经历了多少次转换的指示。不同的类型如下:交易数据的“应用程序”,从未修改的原始分析数据的“T0”,转换或修改过一次的数据的“T1”,等等。务必要确定表所有者的名字,通常是负责创建表的人。这样,员工就能准确地知道关于桌子的问题应该联系谁,而不是浪费时间四处寻找答案。您可以提供一个贡献者列表:贡献者是自愿丰富表格文档的用户。这是一种给这些数据精灵以信任的方式,并把它们作为可能对数据对象有疑问的伙伴的参考点。

质量

数据记录的第二个方面与数据质量有关。您希望确保您的数据对象是一致的和定性的,并确保最好的数据资产是公司中最常用的。有了这个想法,从填写刷新频率栏开始。该表每周每 30 分钟刷新一次吗?每月?这将允许用户发现一个过时的表,并挥舞红旗。质量分数位应由数据管理员或负责数据质量的人员填写。数据是否完整、准确、一致?我们简单地使用表情符号。但是你可以随意使用你觉得最舒服的系统。质量分数很重要,因为分析人员将能够快速定位哪些表可用于进行数据分析。

一旦您的表被清楚地记录下来,就该弄清楚列端发生了什么。我已经听到你的叹息了。不要。您可能已经观察到,当分析师发现他们无法开始工作时,他们会感到非常沮丧,因为他们(可以理解)想不出一些列的名称。这是您的数据团队生产力大幅下降的开始。因此,为每一列列出列名简短列描述非常重要,即使它们的数量很大。

对于文档级部分,你什么都不用做。该模板计算文档的质量和水平。分数介于 0 和 1 之间,1 表示最高文档级别。如果字典包含大量的空列,分数会更接近 0。同样,这将分析师引向文档记录良好的表,并鼓励表所有者记录他们的表(文档记录不良的表会对表所有者产生不良影响)。

数据类型

数据字典中的一个关键字段是“数据类型”字段。指定类型为您的分析人员增加了一层上下文,他们不需要调出有问题的表来获取这些信息。如上所述,数据类型取决于组织使用的数据库管理系统。最常用的数据类型是 SQL 数据类型,这并不奇怪,因为 SQL 是最广泛使用的数据库语言。我们将在这里做一个短暂的停留,回顾一下不同的 SQL 数据类型,这将允许您准确地填充您的数据字典。

有 6 类数据类型:

数字数据类型

  • integer-当数据库中的列只包含整数值(即没有小数点的数字)时进行标记
  • Tinyint —当表中的列包含整数,但只包含(0,255)范围内的数字时
  • Bigint 表中的列存储大于一万亿的整数
  • 浮点型—此列存储近似值

日期和时间数据类型

  • 日期—给定年份和月份的日期
  • 时间—一天中的时间
  • 时间戳-保存日期和时间组合的时态数据类型。时间戳的格式是 YYYY-MM-DD HH:MM:SS

字符&字符串数据类型

  • Char —指固定长度的字符,最多 8,000 个字符
  • Varchar —上限与 char 相同(8,000),但 Varchar 指的是每个条目可以有不同的长度。Varchar 是一种流行的数据类型。
  • 文本—也称为“字符串”或“STR”,这意味着列处理字母,而不是数字或符号。与 varchar 的含义相似,但最大容量为 2GB。

Unicode 字符和字符串类型

  • nchar —指固定长度的字符,最多 8,000 个字符
  • nvarchar —指可变长度的字符,最多 8,000 个字符。nvarchar 占用的空间是 varchar 的两倍。
  • ntext-类似于 nvarchar,最大存储为 2GB。

二进制数据类型

  • 二进制—固定长度的二进制数据,最多可存储 8000 个字节。例如,布尔值(真/假)是二进制数据。
  • varbinary —可变长度的二进制数据,最多可存储 8000 个字节

其他数据类型

  • 斑点——代表二进制大物体。它是一个对象的引用或指针。
  • CLOB——代表字符大对象。它存储大量的字符数据,最大为 4 GB。CLOB 数据类型类似于 BLOB,但包括字符编码,它定义了字符集和每个字符的表示方式。
  • XML-存储 XML 数据的数据类型。XML 文件是一个可扩展标记语言文件,它用于组织数据以便存储和传输。在 XML 文件中,您会发现标签和文本。XML 文件中的标签提供了数据的结构。文本被这些标签包围,这些标签遵循特定的语法准则

管理

数据字典就像一个门户。无论您的专业技术如何,您都可以直接从您的桌面访问有关数据资源的信息。即使是手动数据字典也可以帮助您处理治理问题。数据字典可以成为您的法律团队的数据门户。在这本字典中,您可以指出给定的列是否符合 PII (个人身份信息),这意味着它包含任何可能用于识别特定个人的数据。这允许你处理隐私问题,例如通过限制从你的桌面直接访问标记为 PII 的栏。‍

附加功能

我们鼓励您为您的特定业务定制这个数据字典,所以不要犹豫为您的数据对象添加额外的定义/文档字段!该模板提出了一些建议,尽管它们不是我们自动化数据目录产品的一部分。

仪表板和数据术语表

“仪表板”选项卡允许您以与表格完全相同的方式记录仪表板。

该模板还包含一个“词汇表”选项卡。这是业务术语表的空间,包含共享数据的常用词汇和定义。数据术语表是一个存储库,每个业务术语都附加到它的定义上。这确保了业务关键字总是在正确的上下文中使用,并且公司中的每个人都同意一个特定的定义。以术语“付费用户”为例。这个词在公司的产品部门经常使用。虽然这看起来很简单,但是如果员工没有一个明确的定义,他们可能会有不同的解释。例如,一个分析师可能将免费试用的用户归类为“付费用户”,而另一个分析师可能将他们排除在外。因此,每个部门都有一个术语表是很重要的。术语所有者是编写定义的人,通常准备好回答关于特定单词的问题。

将数据术语表与数据字典联系起来也可以节省时间,提高效率。这丰富了业务环境中的数据,使数据分析师和数据科学家能够根据业务战略调整数据。事实上,当数据术语表和数据字典在同一个存储库中时,数据用户可以直接访问术语的定义,以及与该术语相关的任何表或数据库。

如果您对如何使用模板有任何疑问,请联系 louise@castordoc.com

了解更多信息

我们写了利用数据资产时所涉及的所有过程:从现代数据栈到数据团队组成,再到数据治理。我们的博客涵盖了从数据中创造有形价值的技术和非技术方面。如果您是数据领导者,并且希望更深入地讨论这些主题,请加入我们为此创建的社区

Castor ,我们正在为 idea,Figma,Slack generation 构建一个数据文档工具。或者对 Fivetran,Looker,Snowflake,DBT 的狂热爱好者来说是数据方面的。我们将我们的目录设计得易于使用、令人愉快且友好。

想去看看吗?联系我们,我们将向您展示一个演示。

最初发表于【https://www.castordoc.com】

什么是数据中心?

原文:https://towardsdatascience.com/what-is-a-data-hub-41d2ac34c270?source=collection_archive---------12-----------------------

为什么像数据中心这样的架构正在兴起

卢卡·布拉沃在 Unsplash 上的照片

定义

数据中心是一种数据交换,其核心是无摩擦的数据流。它可以被描述为由不同技术组成的解决方案:数据仓库、工程、数据科学。这不仅仅是一种技术,而是一种更有效地确定数据需要在哪里、何时以及为谁进行传递、共享,然后链接和/或持久化的方法。端点可以是应用程序、流程、人员或算法,它们可能实时地与网络中心交互,向网络中心提供数据或从网络中心接收数据[1]。

与数据仓库和湖的区别

虽然数据仓库和数据湖被理解为支持组织的分析而存在的数据收集的端点,但是数据中心充当中介和数据交换的点。每个解决方案的特征总结如下。

特征—作者提供的图像

数据中心的优势

数据中心通过连接数据的生产者和消费者来实现数据共享。端点通过向数据中心提供数据或从数据中心接收数据来与数据中心交互,而数据中心提供了一个中介和管理点,使得数据如何在企业中流动变得可见[2]。

数据中枢实时连接许多不同的系统——它是应对当今挑战的合适工具:即尽可能快速和标准化地交换大量数据,并使其可用于系统、机器学习或报告等应用。

数据中心技术示例

即使如前所述,数据中心本身并不是一项技术,而是一种方法,但市场上仍有产品被称为数据中心。这些例子也清楚地表明,数据中心是几种技术的结合。

例子:

  • Cumulocity 物联网数据中心[3]
  • Cloudera,企业数据中心[4]
  • 谷歌广告数据中心[5]

另一个很好的例子是对 SAP 的描述。这很好地展示了技术的相互作用以及数据中心的实际概念。

SAP 数据中心—来源 SAP [6]

结论

数据中心汇集了来自不同来源和格式的企业数据,以提取有价值的知识。我们谈论的更多的是方法或平台,而不是技术。希望本文能让您初步了解什么是数据中心。然而,为了深入研究,我建议深入阅读这个主题。我下面的消息来源可能会有所帮助。

资料来源和进一步阅读

[1] Eckerson,数据中心—数据架构的下一步是什么? (2019)

[2] A. Awadallah,大数据平台,Cloudera 白皮书(2013 年)

[3] Cumulocity 物联网,数据中心概述 (2021)

[4]云时代,企业数据中心 (2020 年)

[5]谷歌,广告数据中心 (2021 年)

[6] SAP,我有 SAP HANA,我何时需要 SAP 数据中心 (2019)

什么是数据事件指挥官?

原文:https://towardsdatascience.com/what-is-a-data-incident-commander-d2993a59a69?source=collection_archive---------36-----------------------

数据团队如何利用 DevOps 最佳实践构建更具弹性的事件工作流

图片由 Unsplash 上的 SpaceX 提供。

事故管理不仅仅是软件工程师的事。随着 数据平台 数据即产品心态 的兴起,构建更可靠的流程和工作流来处理 数据质量 已经成为数据工程师最关心的问题。

上一篇 中,我们讨论了如何设置对不良数据的自动检测和报警;现在,我们分享最佳数据团队如何在数据团队的新兴角色 数据事件指挥官 的帮助下,为您的破损数据管道进行分类和严重性评估。

现在是周一早上,你的电话一直在响。

你醒来时,你的首席执行官发来消息说,“这份报告中的数字似乎不对…又不对了。”

你和你的团队放下手头的工作,开始解决手头的问题。然而,你的团队对事件的反应却是一团糟。整个组织中的其他团队成员都在重复努力,而您的 CMO 被蒙在鼓里,没有更新被发送到组织的其他部分。

在这一切发生的同时,财务部门的 John 发短信告诉你他的电子表格中有一个错误的表格,运营部门的 Eleanor 发短信告诉你一个查询得到了有趣的结果。

数据工程师要做什么?

如果这种情况你听起来很熟悉,要知道你并不孤单。很多时候,数据工程师不仅要承担修复数据问题的负担,还要优先考虑修复什么、如何修复,并随着事件的发展交流状态。

对于许多公司来说,数据团队在这场救火中的责任往往模糊不清,尤其是在回答“谁在管理这一事件?”这个问题时

当然, 数据可靠性 SLA应该由整个团队来管理,但是当橡胶上路时,我们需要一个专门的角色来帮助发号施令,并确保在数据中断时满足这些 SLA。

在软件工程中,这个角色通常被定义为 【事件指挥官】,其核心职责包括:****

  • 尽早并经常向更广泛的数据团队和利益相关者标记事件。
  • 维护受影响数据资产或异常情况的工作记录。
  • 针对特定事件协调工作并分配责任。
  • 根据需要分发操作手册和行动手册。
  • 评估事件的严重性和影响。

就像产品工程团队的 scrum master 一样,数据团队将每周或每天指派事件指挥官,通常是针对特定功能团队拥有的特定数据集。建立良好的、可重复的事件管理(和事件指挥官)实践主要是一个文化过程,但投资自动化和保持数据健康的持续发展会让您走得更远。剩下的就是教育了。

在对数据问题进行分类和评估其严重性时,每个事件经理都必须采取以下四个关键步骤:

1.将通知发送给适当的团队成员

在分散的数据团队中,团队成员分散在不同的业务部门,每个领域中的数据团队成员负责为他们的利益相关者处理事件。在这种结构中,数据团队成员通常要么向业务部门的负责人报告,要么在某些情况下向 CDO 或数据负责人报告。图片由蒙特卡洛提供。

集中式数据团队直接向 CDO 或数据负责人报告,同时处理来自不同业务部门的数据的查询和事件。除非另有说明,否则多个业务部门都是他们的利益相关者。图片由蒙特卡洛提供。

在响应数据事件时,数据组织的构建方式将影响您的事件管理工作流,并最终影响事件指挥官流程。

如果您是嵌入式数据团队的一员,那么委派事件响应就容易得多(例如,营销分析和数据工程团队拥有所有营销分析渠道)。如果您在一个集中的数据团队中,将这些事件警报发送给适当的所有者需要一些远见和规划。

无论哪种方式,我们建议您为数据团队的特定成员拥有和维护的数据管道建立专用的备用通道,邀请相关的利益相关者,以便他们知道他们所依赖的关键数据是否出现故障。我们合作的许多团队建立了page duty或 Opsgenie 工作流程,以确保不遗漏任何基础。

作为数据事件指挥官,正确发送通知并在错误向下游传播之前迅速将它们发送给正确的人是非常重要的。图片由蒙特卡洛提供。

2.评估事故的严重性

获得上述通知使您和您的团队能够评估事件的严重性,并决定是否应该优先响应事件。图片由蒙特卡洛提供。

一旦通知管道所有者数据有问题,他们应该采取的第一步是评估事件的严重性。因为数据生态系统在不断发展,所以在任何给定的时间都会有大量的变化引入到您的数据管道中。虽然有些是无害的(例如,预期的模式更改),但有些是致命的,会对下游的利益相关者造成影响(例如,关键表中的行数从 10,000 减少到 1,000)。

一旦您的团队开始对问题进行故障诊断,最佳做法是根据其状态标记问题,无论是已修复、预期、正在调查、不需要采取措施还是误报。标记问题有助于用户评估事件的严重程度,并在向特定于受影响数据的渠道中的相关利益相关方传达更新方面发挥关键作用,以便他们可以采取适当的措施。

如果对您的公司不重要的数据资产损坏了,该怎么办?事实上,如果这些数据被弃用了呢?

即使是最好的数据团队也会受到幻像数据的困扰,我也不知道有多少次我收到了一个数据问题的警报,尽管已经解决了所有的事件,但它对业务来说并不重要。因此,我没有解决高优先级的问题,而是花了几个小时甚至几天的时间来处理损坏的数据,结果却发现这是在浪费时间。自 2019 年以来,我们没有使用过那张桌子。**

就像在软件工程和 DevOps 中一样,端到端谱系映射关键数据依赖关系是数据事件指挥官工具包的一个关键组件。图片由蒙特卡洛提供。

那么,您如何确定哪些数据对您的组织最重要呢?团队能够发现他们最关键的数据集的一个越来越常见的方法是利用工具来帮助他们可视化他们的血统。这使他们能够在发生事故时了解其所有数据集之间的关系,并能够跟踪数据所有权,以提醒可能受到该问题影响的相关人员。

一旦您的团队能够确定影响的严重性,他们将会更好地理解错误的优先级。如果是数据直接驱动财务洞察力,甚至是你的产品表现如何,这可能是一个超级高优先级的问题,你的团队应该尽快停止他们正在做的事情来解决它。如果不是,是时候继续前进了。

3.尽可能经常地交流状态更新

为您的事件响应任务组的所有成员提供一个关于给定事件的集中状态页面,在响应数据事件时发挥着关键作用。图片由蒙特卡洛提供。

在响应数据事件的过程中,良好的沟通会起到很大的作用,这就是为什么我们已经讨论了数据团队应该如何以及为什么创建一个操作手册来指导(逐步)如何处理给定类型的事件。遵循操作手册对于保持正确的责任线和减少重复劳动至关重要。

一旦你确定了“谁做什么”,你的团队就可以开始更新一个状态页面,利益相关者可以实时跟踪更新。中央状态页面还允许团队成员查看其他人正在进行的工作以及这些事件的当前状态。

在与客户的交谈中,我看到事故指挥授权有两种处理方式:

  1. 指定一名团队成员在指定时间段内待命处理任何事件: 在待命期间,该人负责处理所有类型的数据事件。一些团队有专人专职处理他们团队管理的所有事件,而其他团队则有一个每周轮换团队成员的时间表。
  2. 负责覆盖某些表的团队成员: 这是我们看到的最常见的结构。通过这种结构,团队成员在进行日常活动的同时,可以处理与分配给他们的表或报告相关的所有事件。表分配通常基于给定成员最密切使用的数据或管道进行调整。

要记住的一件重要事情是,这里没有对错之分。最终,这只是一个确保你致力于一个过程并坚持下去的问题。

4.定义并协调数据 SLA 和 sli,以防止将来发生事故和停机

虽然事故指挥官不对 设置 SLA负责,但他们通常负责满足这些要求。

简而言之,服务水平协议(SLA)是许多公司用来定义和衡量给定供应商、产品或内部团队将提供的服务水平的一种方法,以及如果他们未能提供的潜在补救措施。

例如, Slack 面向客户的 SLA 承诺,对于 Plus 计划及以上的客户,每个财政季度的正常运行时间为 99.99%,计划停机时间不超过 10 小时。如果他们达不到要求,受影响的客户将在他们的帐户上获得服务积分以供将来使用。

您的服务级别指标(SLIs)(SLA 的量化指标)将取决于您的具体用例,但这里有一些用于量化事件响应和数据质量的指标:

  • 特定数据资产的数据事件数量(N) :尽管这可能超出了您的控制范围,但鉴于您可能依赖外部数据源,这仍然是数据停机的重要驱动因素,通常值得衡量。
  • 检测时间(TTD): 当问题出现时,此指标量化您的团队收到警报的速度。如果您没有适当的检测和警报方法,这可能需要几周甚至几个月的时间。由不良数据造成的“无声错误”会导致代价高昂的决策,对您的公司和客户都有影响。
  • 解决问题的时间(TTR): 当您的团队收到问题警报时,这将衡量您解决问题的速度。

通过跟踪这些,数据团队可以努力降低 TTD 和 TTR,进而构建更可靠的数据系统。

为什么数据事件指挥官很重要

在应对数据事件时,时间至关重要,作为事件指挥官,时间既是您的敌人,也是您最好的朋友。

在理想情况下,公司希望数据问题尽快得到解决。然而,情况并不总是这样,一些团队经常发现他们比他们希望的更频繁地调查数据问题。事实上,尽管数据团队投入大量时间编写和更新 自定义数据测试 ,他们仍然会经历管道中断。

一名事故指挥官,配备正确的流程、少量自动化和适当的组织支持,可以为您的数据管道的可靠性创造奇迹。

你的 CEO 以后会感谢你的。

有兴趣了解有关为您的数据团队建立可靠的事件管理流程的更多信息吗?向格伦伸出手https://www.montecarlodata.com/request-a-demo/!********

什么是数据湖?

原文:https://towardsdatascience.com/what-is-a-data-lake-94ed74ebb7b9?source=collection_archive---------27-----------------------

术语和定义,以及如何从中获利

彼得·德·格兰迪在 Unsplash 上拍摄的照片

谈到存储大数据,数据湖和数据仓库都是公认的术语,但这两个术语不是同义词。数据湖是尚未确定用途的大量原始数据。另一方面,数据仓库是已经为特定目的处理过的结构化、过滤数据的存储库[1]。

数据湖的特征

在数据湖中,数据以最少的转换被接收到存储层,同时保持输入格式、结构和粒度。这包含结构化和非结构化数据。这导致几个特征,例如:

  • 多个数据源的集合,例如批量数据、外部数据、实时数据等等。
  • 控制摄入的数据,并专注于记录数据结构。
  • 通常对分析报告和数据科学有用。
  • 但是也可以包括一个集成的数据仓库来提供经典的管理报告和仪表板。
  • 数据湖是一种数据存储模式,它在整个企业、所有部门和所有数据用户中优先考虑可用性。
  • 新数据源的易集成性。

数据湖和数据仓库的区别

虽然数据仓库将经典的 ETL 过程与关系数据库中的结构化数据结合使用,但数据湖使用 ELT 和模式等范例读取非结构化数据[2]。

差异数据仓库与 Lake —作者图片

在上图中,您可以看到主要的区别。你使用的技术也很不同。对于数据仓库,您将使用 SQL 和关系数据库,而对于数据湖,您可能会使用 NoSQL 或两者的混合。

我自己的经验经常表明,数据湖可以更快地实现。一旦所有数据都可用,数据仓库仍然可以作为混合解决方案构建在其上。

混合数据湖概念—图片来自作者

这使得僵化和传统规划的数据仓库成为过去。这大大加快了仪表板和分析的提供,是迈向数据驱动文化的良好一步。来自云的新 SaaS 服务的实现以及 ELT 代替 ETL 等方法也加速了开发。

结论

本文简要介绍了什么是数据湖,以及它如何使您的公司能够灵活地以数据形式捕获业务运营的各个方面,同时保持传统数据仓库的活力。与传统数据仓库相比,它的优势在于不同的数据和数据格式,无论是结构化的还是非结构化的,都必须能够存储在数据湖中。这样就避免了分布式数据孤岛。还可以提供来自数据科学和经典数据仓库方法领域的用例。数据科学家可以更快、更准确地检索、准备和分析数据。所以最终数据湖不会取代数据仓库。相反,这两种选择是相辅相成的。

资料来源和进一步阅读

[1] talend,数据湖 vs .数据仓库

[2] IBM,绘制数据湖:使用读取模式和写入模式的数据模型 (2017)

什么是数据湖?这不是一个数据沼泽

原文:https://towardsdatascience.com/what-is-a-data-lake-it-is-not-a-data-swamp-376430d6c15e?source=collection_archive---------21-----------------------

介绍构建数据湖的参考体系结构

约瑟夫·巴里恩托斯在 Unsplash 上拍摄的照片

在工作中,我目前正在谷歌云平台上建立一个数据湖。在工作的同时,你才真正意识到一个中型公司已经可以拥有多少数据。我在能源部门工作。在许多文章和博客中,已经有很多关于大量数据需要整合到一个地方的讨论。一个开发者、科学家或任何人可以居住并获取项目所需数据的地方。在这样做的时候,消费者可以有各种各样的意图:构建仪表板,构建机器学习模型,或者运行说明性分析。当然还有比上面提到的更多的用例。

世界上最有价值的资源不再是石油,而是数据。(《经济学人》)

你知道这句名言吗?我没有什么要补充的。如果你有兴趣,你可以在这里阅读这篇文章

那么什么是数据湖呢?

数据湖是存储大量数据的地方,这些数据来自不同的来源,并以原始形式存储。重要的是,在加载过程之前,异构数据既没有被清理也没有被转换。加载过程完成后,数据现在可以在单个系统中获得。除了结构化数据,数据湖还存储和管理半结构化(CSV、日志、JSON)、非结构化(电子邮件、文档、报告)和二进制数据(视频、音频、图像)。所有可能格式的列表当然是不完整的,但是我想你知道我的意思。目标是将所有公司数据收集到一个地方,以便能够快速访问整个数据库。用户应该能够立即从数据中创建可视化、报告和分析。

你可以在数据湖中存储任何你想要的东西。图片由作者创作,使用 draw.io 创建。

产生不受控制的数据沼泽的风险?

如果你想到创建一个不受控制的数据沼泽,我可以理解。所有数据都以原始形式加载到数据湖中,并且事先没有清理,这使得确保所需的数据质量变得更加麻烦。结果,数据湖会很快变成一个数据沼泽,使得恰当地评估数据变得困难。

简·安东宁·科拉尔在 Unsplash 上拍摄的照片

为了让数据湖的原理有效地为您工作,并且不会导致无法找到更多数据的数据沼泽,收集的数据必须显示未来的业务附加值。分析师很难从大量数据中提取信息。当没有使用元数据或标签时尤其如此。没有这一点,分析师几乎不可能分配数据。此外,几乎不可能从数据中导出关系,因为所有数据都存储在一个地方,没有可见的上下文。获得更好概览的第一步是使用元数据。以这种方式,例如,在网站上的访问、呼叫和购买可以链接到 IP 地址和位置。你必须事先定义一个组织结构。

数据湖的一般体系结构

图片由作者创作,使用 draw.io 创建。

上图显示了数据湖的参考架构。源系统/数据源显示在左侧。这些源将数据传递给数据湖。在这里,一个人是根据推还是拉原理工作并不重要。原则上,公司或设备中的任何系统都可以作为数据湖的来源。例如,这包括 web 服务器、SAP ECC、物联网设备或 CRM 系统等等。

在图的中间,您可以看到数据湖,它充当数据存储库。如上所述,文件夹图标再次提醒了元数据的使用。这是所有数据以原始状态存在的地方。这里或之前没有发生任何变化。

从这一点出发,可以从数据湖中提取数据并进行转换。在这个例子中,转换后的数据存储在数据集市中的数据湖系统之外。用户必须清楚他们需要数据湖中的哪些数据,以便能够继续使用这些选定的数据。

现在,数据分析师和其他用户可以根据自己的意愿分析或处理这些数据。例如,来自数据集市的数据可以构成数据仓库的基础,并用于报告目的。在工作中,我们目前正试图构建后者,即基于数据湖的数据仓库。

结论

我已经向您展示了什么是数据湖,并且您不必冒数据湖变成数据沼泽的风险。此外,我向您展示了一个通用架构,其中包含构建数据湖所需的必要组件。构建中间部分(数据湖)所需的所有组件几乎都可以在任何云环境中实现。只是作为一个预尝:对于一个数据湖,你可以使用谷歌云平台上的谷歌存储服务。有几个标签选项来标记你的斑点。例如,通过数据目录服务,Google 提供了一个 API 来查询这些标签,从而在 web 门户中组织数据。

我将写关于数据目录、大查询和云存储在未来的使用,并带您踏上构建数据湖的旅程。

良好的秩序是一切的基础。(埃德蒙·伯克)

如果你有任何问题,请留下评论。

混合数据湖的优势

原文:https://towardsdatascience.com/what-is-a-hybrid-data-lake-b7ef2c3cce0c?source=collection_archive---------34-----------------------

如何将数据湖与数据仓库结合起来

康斯坦茨湖——作者图片

谈到存储大数据,数据湖和数据仓库都是公认的术语,但这两个术语不是同义词。数据湖是尚未确定用途的大量原始数据。另一方面,数据仓库是已经为特定目的处理过的结构化、过滤数据的存储库[1]。

共同点

数据仓库和数据湖代表一个中央数据库系统,可用于公司的分析目的。该系统从各种异构数据源提取、收集和保存相关数据,并提供给下游系统。

数据仓库可以分为四个子过程:

  • 数据获取:从各种数据仓库中获取和提取数据。
  • 数据存储:在数据仓库中存储数据,包括长期存档。
  • 数据供应:为下游系统提供所需的数据,提供数据集市。
  • 数据评估:对数据库的分析和评估。

差异

虽然数据仓库将经典的 ETL 过程与关系数据库中的结构化数据结合使用,但数据湖使用 ELT 和模式等范例读取非结构化数据[2]。

差异数据仓库与湖

以上,可以看出主要区别。你使用的技术也很不同。对于数据仓库,您将使用 SQL 和关系数据库,而对于数据湖,您可能会使用 NoSQL 或两者的混合。

将两者结合在混合数据湖中

那么这两个概念如何结合起来呢?在下图中,您可以从高层次的角度看到一个架构。

该过程是将非结构化和未转换的数据加载到数据湖中。从这里,一方面,数据可以用于 ML 和数据科学任务。另一方面,数据也可以以结构化的形式被转换和加载到数据仓库中。从这里开始,可以通过数据集市和(自助式)BI 工具实现传统的数据仓库分布。

混合数据湖概念—图片来自作者

您可以为这个架构使用的主要技术可以是例如:[3][4]

  • ELT/ETL 流程通过——talend、Google 数据流、AWS 数据管道
  • 数据湖 via — HDFS、AWS 雅典娜和 S3、谷歌云存储
  • 数据仓库通过——Google big query、AWS Redshift、雪花

注意:像 Google 的 BiqQuery 或 AWS Redshift 这样的技术通常被认为是数据仓库和数据湖技术的混合体,因为它们通常已经实现了 NoSQL 的一些特征。

结论

本文解释了如何使用混合数据湖。数据湖使您的公司能够灵活地以数据形式捕获业务运营的各个方面,同时保持传统数据仓库的活力。

资料来源和进一步阅读

[1] talend,数据湖与数据仓库

[2] IBM,“绘制数据湖:使用读取模式和写入模式的数据模型” (2017)

[3]谷歌,帮助保护从数据湖到数据仓库的管道

[4] AWS,AWS 中的混合数据湖

什么是概率密度函数?

原文:https://towardsdatascience.com/what-is-a-probability-density-function-d9b4b8bea121?source=collection_archive---------10-----------------------

pdf 格式的统计微分方程简介

https://pixabay.com/images/id-2853022/

介绍

在统计的奇妙世界里,分布是位于数学宇宙中心的绝对重要的组成部分。分布用于以数学方式描述数据,并在机器学习和统计测试中有很强的众所周知的应用。它给出了实验中不同可能结果出现的概率。它们用于描述使用样本空间和事件可能性的随机现象。

概率分布可以以各种形式描述,例如通过概率密度函数或累积分布函数。概率密度函数,或 pdf,是通常应用于连续和离散值的数学函数。现在我们对 PDF 有了一个基本的概念,那么它们在统计中是如何使用的呢?更重要的是,它们如何应用于数据科学,它们在纸面上是什么样的?

PDF 在数据科学中的应用

pdf 在统计分析中非常常用,因此在数据科学中也非常常用。一般来说,pdf 是使用统计学研究应用科学数据的必要工具。然而,有一些 pdf 超出了这一基本用途,其用途与乍看之下的设想略有不同。例如,t 分布的 PDF 通常用于计算 T 统计量。这个 T 统计量和自由度(n 减 1)(v)通常被放入正则化的下不完全β函数,它恰好是 T 分布的累积分布函数。虽然连续随机变量取任何特定值的绝对可能性为 0,但 PDF 的值可用于推断,在随机变量的任何特定样本中,与另一个样本相比,随机变量在统计上更有可能等于一个样本。

还有一个可能是科学中最常用的 PDF 的应用,正态分布,它在机器学习中非常常用。数据的标准缩放是一种非常流行的方法,用于规范化数据具有高方差的连续值。该 PDF 将连续样本转换为总体均值的标准差。这对于机器学习来说非常好,因为通常它可以将数据的方差降低一个百分点,并使数据感觉更接近。这也是统计分析中常用的方法,因为当它与平均值相差 1.96 个标准偏差时,很容易判断出什么时候有统计学意义。我个人更认同 2.0 法则,但是 1.96 当然可以表示一些统计意义!这是因为少于 25%的数据超出平均值的 2 个标准偏差。对于已发表的测试,通常认为标准偏差应该比平均值高 2.6 倍。

查看 PDF,我们看到它有一条抛物线,中心是我们大部分数据所在的位置:

(来源)

将其与 CDF 进行比较,我们可以很容易地发现这两个函数之间的差异:

(这个来源还有很多关于 CDF 的信息,值得一查!)

正常情况下更多

正态分布是 PDF 的一个很好的例子。这部分是因为它被大多数科学家非常普遍地使用和熟悉,但也部分是因为它在应用统计学的整个范围内有突出的应用。对于许多其他分布,正态分布是概率论的基础。

更好的是,正态分布的 PDF 的公式相对简单,并且允许我们看一看 PDF 可视化后的样子。为了计算这个 PDF,我们简单地从 xbar(当前样本)中减去 mu(平均值),然后除以 sigma(标准偏差)。)这也用于标准缩放数据,通常用于连续模型以提高准确性。

结论

pdf 是任何统计工作或应用科学的基本工具。它们不仅在分析和概率论中有应用,而且也经常应用于机器学习。了解很多关于 pdf 和与某些发行版相关的函数,一定会给你一个坚实的统计基础,并在你的 DS/ML 职业生涯中助你一臂之力。考虑到这一点,我当然认为他们是值得学习的!非常感谢你的阅读,我希望你有一个精彩的一天休息!

什么是“Python 环境”?(适用于初学者)

原文:https://towardsdatascience.com/what-is-a-python-environment-for-beginners-7f06911cf01a?source=collection_archive---------13-----------------------

入门

清晰地分离出关键概念,以揭开环境创建过程的神秘面纱

照片由 Artturi JalliUnsplash 上拍摄

由于没有计算机科学背景,并且是“在职”学习编程,建立并运行一个稳定的 python 环境的整个过程令人望而生畏。出现了大量的步骤、新的术语(sys.path、“虚拟环境”/“venv”、过时的$PYTHONPATH等等。)以及许多工具(pip、pyenv、venv、conda、poems ),这些工具本应使事情变得更简单,但也许在这个过程中:

  • 隐藏更简单的设置工作(尤其是对初学者而言),这样你永远也不会真正明白发生了什么
  • 具有不同的范围,因此一些工具做一件事(依赖管理或虚拟环境设置),其他工具做几件事(如 conda 和 poems ),所以很难知道什么应该用于什么

这是我在 2021 年深入研究 python 环境的笔记集,目的是:

  • 我自己明白
  • 减少我点击紫色堆栈溢出链接的次数,因为 4 年前这些信息“左耳进右耳出”
  • 考虑改变我以前学到的东西(conda+setuptools ),不要仅仅因为“如果它没坏就不要修理它”而质疑

一个稳定运行的环境有哪些组成部分?

在某种程度上——目标是什么?大多数人倾向于同意,当编写您希望重用或共享的 python 代码时,忘记了实际的代码本身,您需要以下内容:

  • 易于操作,并且知道它以前是否工作过,它将继续工作(环境管理)
  • 易于与可能使用不同版本的 python 和其他包(python 版本和依赖性管理)的其他东西一起工作
  • 易于与其他人共享(包构建和分发)
  • 当其他人得到它时,他们可以毫无问题地运行它(环境管理)
  • 如果他们也依赖于其他人的代码,他们可以运行它(依赖管理)
  • 如果上述事情变得有问题,要么很容易解决,要么如何解决就很清楚了(环境管理)

在创建考虑这些因素的 python 设置时,可以将问题分成几个子问题。

环境管理(venv、康达、诗)

这涉及到能否在计算机中设置一个容器,确保运行代码所需的一切保持不变。这通常采取目录结构的形式,其中包含您需要的内容,但也可能做一些事情,例如为目录外的您需要的内容设置稳定的方向。保持事情稳定是非常好的,因为它确保了某一天编写的未更改的代码在第二天也能工作。如果环境也是公式化创造的,那么它也可以公式化描述。这很好,因为您用来运行代码的环境可以公式化地表达出来,这样,如果其他人想要运行该代码,他们只需要遵循确切的方法,就可以有一个确切的匹配环境,并确保它不会“随机”对他们无效。

Python 版本控制(pyenv)

Python 是一种语言,就像它开发的所有语言一样。为了避免不断变化的语言完全混乱,变化/更新是离散的,每个新版本都有一个版本号来标识它。如上所述,为了确保未更改的代码继续工作,您需要确保您继续使用相同版本的 python——或者至少直到您已经测试出相同的代码可以在不同(希望是更新的)版本的 python 上工作。如果您有多个项目,每个项目都使用不同版本的 python(要么通过选择,要么因为依赖关系而不得不这样做——稍后将详细介绍),这可能会带来问题,因此理想情况下,当我们处理不同的项目时,我们可以运行不同版本的 python。这就是 Python 版本管理。

包安装(pip、康达、诗)

很可能你写的所有代码都不是你的,因此你会想利用一些已经写好的代码。Python 预装了一大堆组成 Python 标准库的东西,但是还有很多其他的包,你宁愿利用它们也不愿自己编写(NumPy、pandas、SciPy 等)。我们需要一种方法将这些东西放到我们的电脑上——或者更具体地说,放到我们已经在电脑中创建了的环境中。幸运的是,正如这段视频所解释的,有人致力于标准化这一点,并创建了一个名为 PyPI 的所有这些包的数据库。一旦代码被一致地记录在那里,我们就需要一种方法去那里获取它并将其安装到我们良好控制的环境中。我们还希望有一种方法来确保,如果我们有多个如上所述的使用不同版本 python 的项目,那么我们可以将可能相同的包的正确对应版本安装到它们各自的环境中。这是包安装。

依赖管理(康达,诗)

上面的软件包安装听起来很简单:

  • 给它一个需求清单
  • 它进入互联网上的一个数据库并收集它们
  • 它使用它们都符合的标准化指令来安装它们

但是就像 python 语言本身一样,这些其他的包也在不断变化。事实上,因为 python 在不断更新,所以这些其他的“第三方包”也在更新——因为它们需要被测试和更新以使用底层 python 标准库的更新版本。并且有可能利用新的特性来扩展或改进现有的功能。由于大量的包在随机的日子里更新,并且对它们所依赖的东西有不同的需求,所以最终两个包依赖于另一个共享依赖的冲突版本并不困难。解决这些冲突,使得我们需要的所有依赖关系,给定我们可能已经指定的约束,都可以被获取和安装,这就是依赖关系管理。

包构建和分发(setuptools,诗歌)

到目前为止,我们只讨论了如何在假设我们需要获取他人编写的代码的情况下构建一个稳定的环境。但是,如果有一天,我们编写的代码,在这个稳定的环境下,可能对其他人有用,并且我们愿意分享它,那该怎么办呢?我们要通过电子邮件发给他们吗?我们最好将它提交给前面提到的 python 代码 PyPI 数据库,这样,就像我们所依赖的一切一样,其他人也可以以一种易于安装和准确理解的方式依赖我们的代码:

  • 如何安装我们写的东西(标准化格式的代码)。文件)
  • 您的代码可以使用什么代码(我们的代码具有的依赖约束集——如果有的话)

要做到这一点,我们需要一种方法来将我们的代码构建到一个“包”中,其中包含所需的所有相应元数据。标准化是这里的关键,以一种相对轻松的方式确保这种标准化是包装的构建。

仅仅写几行 python 代码似乎太多了

上面的许多步骤可能会给人这样的印象:仅仅是编写一点 python 代码,这是一项极其困难的任务。显然,在本地编写一点 python 代码就像打开命令行并输入python一样简单(MAC 电脑已经预装了它)。但是要写一些更实质性的东西,这似乎是一种努力和复杂的负担,特别是对于一个刚刚开始并且不知道许多“最基本”单词是什么意思的人来说。让事情变得复杂的是,上面提到的工具掩盖了实际发生的事情,甚至会让理解手头的基本问题变得更加混乱:

“当您在命令行中键入单词 *python* 时,我们如何准确地控制会发生什么,以便我们可以访问我们需要的一切(模块、包)并且这种访问保持‘确定性’?”

解决这个问题意味着工作代码将一直工作,并最终节省调试棘手版本问题的时间。为了理解一些非常聪明的人是如何开发工具来帮助我们做到这一点的,我们可以看看下面两件事:

  • 系统路径($PATH)
  • python 的sys.path变量和“模块搜索路径”

让我们在下一篇文章中看看系统变量$PATH是如何工作的,并深入探究流行的 python 工具(pyenv、conda、poems)是如何操纵它来简化 python 版本管理的。

https://markjamison03.medium.com/python-the-system-path-and-how-conda-and-pyenv-manipulate-it-234f8e8bbc3e

什么是 Power BI 中的查询折叠,我为什么要关心它?

原文:https://towardsdatascience.com/what-is-a-query-folding-in-power-bi-and-why-should-i-care-5b89f42f38d7?source=collection_archive---------1-----------------------

"这会破坏查询折叠吗?"“您的查询会折叠吗?”…也许有人问过你这些问题,但你会说:“问…什么?!"在这一系列文章中,我们来学习幂查询中最重要的一个概念!

https://www . pexels . com/photo/green-grass-field-with wind-turbines-under-blue-sky-6604984/

"这会破坏查询折叠吗?"“您的查询会折叠吗?”…也许有人问过你这些问题,但你会说:“问…什么?!"

或者,您可能听说过 Power BI 中的查询折叠,但不知道如何在现实生活中利用它。

如果你认识到自己处于(至少)上述两种情况中的一种,那么请继续阅读这篇简短的系列博文!

好吧,你很想知道什么是查询折叠。但是,首先…在你开始之前,我们需要一些理论基础,这些基础将把查询折叠特性放在适当的环境中。

数据整形

我已经写过关于数据成形的文章,以及为什么它是数据准备阶段的关键概念之一。现在,我想以一种(也许)不同寻常的方式对此进行阐述:

我想你们都知道托马斯·莫尔写的一本书,叫做《乌托邦》。

在那个故事里,一切都很完美,每个人都很满意。在一个理想的世界中,让我们称之为“数据乌托邦”,我们有干净的、高质量的数据,这些数据只是“按原样”飞入我们的报告,而不需要在此过程中执行任何类型的翻新或转换。不幸的是,“数据乌托邦”只能存在于书本中——现实更加残酷——因为我们必须在培育数据的同时应对一系列挑战。

也就是说,我们必须吸收的一个关键概念是数据整形。一旦您熟悉了您的数据,并意识到您计划在您的 商业智能 解决方案中使用的数据中可能存在的陷阱,您就应该执行数据整形过程。

我有意使用术语“商业智能”而不是“Power BI”,因为这是一个通用概念,也应该在 Power BI 解决方案之外使用。

简而言之,在数据成为数据模型的一部分之前,数据整形就是数据整合的过程。关键要记住的是两个字:之前!因此,我们应该在数据进入报告本身之前进行数据整形。数据整形可以在不同的地方进行,也可以在数据准备过程中的不同时间点进行,这取决于您应用数据整形技术的位置。

应该在哪里进行数据整形?

源数据库——这是最明显的选择,在大多数情况下也是最理想的场景。它基于提取-转换-加载(ETL)数据的传统数据仓库原则。在这个场景中,您定义想要提取的数据(并不需要数据库中的所有数据,并且通常不建议导入所有数据)。然后,您决定是否需要对数据进行转换,以更好地满足您的报告需求,例如,您是否需要执行货币转换,或者您是否需要符合国家和城市名称。

你能认出下图中的城市吗?

https://www . pexels . com/photo/skyline-photo-of-empire-state-building-in-new York-city-2190283/

是的,是纽约。或者,是 NYC?或者,是纽约市?这三个名字哪个是正确的?是的,它们都是正确的-但是如果您像这样在您的数据模型中导入数据,您将得到不正确的结果-因为每个纽约、NYC 和纽约市将被视为一个单独的实体。这一点,以及更多潜在的警告,需要在数据整形阶段解决,这就是为什么花一些时间处理数据很重要。

电源查询

如果您不在源端执行数据转换,下一站是 Power Query——它是 Power BI 中的内置工具,使您能够对数据执行各种转换。根据微软的官方文档,您可以应用 300 多种不同的转换,而且这个数字还在不断增加!

Power Query 的关键优势在于,您只需很少或不需要任何编码技能就可以执行复杂的数据转换!此外,您在数据转换过程中应用的所有步骤都将被保存,因此每次刷新数据集时,这些步骤都将被自动应用以形成您的数据,并为通过报表进行消费做好准备。

Power Query 的底层是一个 Mashup 引擎,它使您的数据整形能够顺利运行。Power Query 使用非常强大的 M 语言进行数据操作。现在,你可能会问自己,这些关于数据整形、强大查询、Mashup 引擎、M 语言等等的故事是怎么回事。与查询折叠有关。我不怪你,这是一个公平的问题,但我们很快会回来回答它。

什么是查询折叠?

对于一些数据源,例如关系数据库,以及非关系数据源,例如 OData、AD 或 Exchange,Mashup engine 能够将 M 语言“翻译”成底层数据源能够“理解”的语言,在大多数情况下是 SQL。

https://www.pexels.com/photo/black-cables-1054397/

通过将复杂的计算和转换直接推送到数据源,Power Query 利用了健壮的关系数据库引擎的功能,这些引擎是为了以最有效的方式处理大量数据而构建的。

Power Query 的 Mashup 引擎能够创建一个 SQL 语句,将您的转换背后的所有 M 语句组合起来,这就是我们所说的查询折叠。

或者,让我们简单地说: 如果 Mashup 引擎能够生成一个将要在数据源端执行的 SQL 查询,我们称该查询为

支持查询折叠的数据源

如前所述,查询折叠最明显的受益者是关系数据库源,如 SQL Server、Oracle 或 MySQL。然而,不仅仅是 SQL 数据库利用了查询折叠的概念。本质上,任何支持某种查询语言的数据源都可以利用查询折叠。其他数据源包括 OData、SSAS、Sharepoint 列表、Exchange 和 AD。

另一方面,当您使用 Excel 文件、BLOB 存储文件、平面文件等数据源时。在 Power BI 数据集中,查询不能折叠。

支持查询折叠的数据转换

然而,对于一般支持查询折叠的数据源,重要的是要记住不是所有的转换都可以被折叠并推送到数据源。所以,要明确的是,SQL 数据库支持查询折叠这一事实并不一定意味着您的查询会折叠!有一些强大的查询转换不能简单地推送到 SQL 数据库引擎。

通常,Power 查询转换中的一些细微差异可能对最终结果以及查询是否会折叠起决定性作用。在本系列的下一部分中,我将向您展示一些细微的区别。

一般来说,在 Power Query 中应用以下转换时,可以将其“转换”为一条 SQL 语句:

  • 删除列
  • 重命名列
  • 使用静态值或超级查询参数过滤行,因为它们被视为 SQL 中的 WHERE 子句谓词
  • 分组和汇总,这在 SQL 的 Group by 子句中是等价的
  • 基于相同源的可折叠查询的合并——因为该操作可以转换为 SQL 中的 JOIN。当我说合并可折叠查询时,这意味着如果您连接两个 SQL server 表,它将工作,但如果您尝试连接 SQL 表和 Excel 文件,它将不会工作
  • 追加基于相同源的可折叠查询——该转换与 SQL 中的 UNION ALL 操作符相关
  • 用简单的逻辑添加自定义列。简单的逻辑是什么意思?使用在 SQL 语言中有等效项的 M 函数,例如数学函数或文本操作函数
  • 透视和取消透视转换

https://www . pexels . com/photo/wood-red-industry-writing-3018978/

另一方面,一些会阻止查询折叠的转换有:

  • 如前所述,合并基于不同来源的查询
  • 基于不同的源追加(联合)查询——与前一种情况类似的逻辑
  • 添加具有复杂逻辑的自定义列,或者使用一些在 SQL 中没有对应项的 M 函数
  • 添加索引列
  • 更改列数据类型。这是一个典型的“视情况而定”的案例。我将在本系列的下一部分向您展示它所依赖的东西,但是请记住,更改列数据类型可以是可折叠的和不可折叠的转换

结论

通过学习数据整形和 Power 查询,我们为理解 Power BI 中的查询折叠特性,或者更好地说是 Power Query Editor 中的查询折叠特性打下了坚实的理论基础。

在本系列的下一部分中,我们将研究为什么查询折叠如此重要,以及为什么我们应该关心查询是否折叠。我们还将学习如何检查查询是否折叠,以及为什么人们说细节决定成败…

感谢阅读!

成为会员,阅读媒体上的每一个故事!

订阅这里获取更多有见地的数据文章!

什么是张量处理单元(TPU ),它是如何工作的?

原文:https://towardsdatascience.com/what-is-a-tensor-processing-unit-tpu-and-how-does-it-work-dbbe6ecbd8ad?source=collection_archive---------13-----------------------

TPU 比最先进的 GPU 快 20 倍以上…但是怎么做到的呢?

TPU 是专门从事深度学习任务的硬件加速器。在这个代码实验室中,您将看到如何在 Keras 和 Tensorflow 2 中使用它们。云 TPU 在具有 8 个核心的基本配置中可用,也在多达 2048 个核心的称为“TPU pod”的更大配置中可用。额外的硬件可用于通过增加训练批量来加速训练。

来源: Colab

我们都知道,在机器学习方面,GPU 比 CPU 更快。在过去几年中,我们可以看到行业巨头 Nvidia 和 ARM 正在开发新的芯片来优化机器学习张量(矩阵)运算,这为我们带来了张量处理单元(TPU)。你可能在进行 Kaggle 比赛或使用在线 GPU 提供商如 Google colab 时遇到过它们。

在这篇文章中,我想解释为什么 TPU 比 GPU 快,是什么使它们能够执行更快的张量运算,使它们成为最快的 ML 引擎。

为了客观地看待问题,我们必须认识到每个芯片都是针对其用途而优化的。鉴于 GPU 最初是为图形渲染而构建的(因此是图形处理单元),对于机器学习和加密货币挖掘等任务,GPU 比 CPU 更快可能是一个巧合。我认为在我们开始深入 TPU 之前,有必要解释一下为什么 GPU 比 CPU 快。

GPU 与 CPU

尼克·杜普Unsplash 上拍摄的照片

尽管与 CPU 相比,GPU 通常拥有更小的内核,但它们拥有更多内核。这些内核包含算术逻辑单元(alu)、控制单元和内存缓存,允许 GPU 进行大量的数学运算。这些 alu 被包括在内,以允许快速的几何计算,使游戏每秒钟有大量的帧。[1]

请记住,CPU 当然比 GPU 有一些优势,但不是在机器学习方面。这些优势的一个例子是对内存的访问。GPU 通常只能访问 8GB 内存,可能是 16 GB,而 CPU 可以轻松访问更多内存(取决于您的 RAM)。与 RAM 之间的传输操作比与 GPU 之间的传输操作要快得多(但这仅适用于频繁的操作,而不是像训练模型这样的长时间操作)。

现在回到我们最初的比较,CPU 最初是为了同时处理几个任务而构建的,而不是处理一个复杂的任务,如运行操作系统操作(如内核操作)。然而,GPU 是为了尽可能快地进行数学运算而构建的,因为渲染图形都是基于这些简单的数学运算。

好消息是,所有这些几何 3D 渲染操作都是张量操作,如纹理计算、RGB 渲染,所有这些本质上都是矩阵算术操作。此外,所有这些操作都是一种浮点格式,这使得它非常适合机器学习。事实上,测量 ML 模型性能的事实是通过每秒浮点运算(FLOPS)来实现的。

好了,关于 GPU 和 CPU,让我们深入到 TPU。

TPUs vs GPU

照片由 Nana DuaUnsplash 上拍摄

虽然 TPU 和 GPU 执行张量运算,但与 3D 图形渲染相比,TPU 更倾向于执行大张量运算,这些运算在神经网络训练中经常出现。如果你像我一样是一个系统爱好者,这对于你来说还不够,你还想了解更多的细节!

TPU v2 内核由一个运行矩阵乘法的矩阵乘法单元(MXU)和一个用于所有其他任务(如激活、softmax 等)的向量处理单元(VPU)组成。VPU 处理 float32 和 int32 计算。另一方面,MXU 以混合精度 16–32 位浮点格式工作。

来源: Colab

谷歌的 TPU 核心由两部分组成。如上所述矩阵乘法单元和向量处理单元。至于软件层,优化器用于在 bfloat16 和 bfloat32 操作之间切换(其中 16 和 32 是位数),这样开发人员就不需要更改代码来在这些操作之间切换。显然,bfloat16 使用的 RAM 较少,但精度不如 bfloat32。

最终结果是,在计算矩阵乘法时,TPU 脉动阵列架构具有显著的密度和功耗优势,以及与 GPU 相比不可忽视的速度优势。

来源: Colab

另一个加速张量运算的有趣概念是所谓的“脉动阵列”。收缩是指流的收缩和释放(通常用于医学)[2]。脉动阵列用于在 TPU 的一个内核上执行张量的点积,而不是在多个 GPU 内核上并行展开。它们可以使用乘法累加器来实现,乘法累加器对两个矩阵使用 bfloat16 运算,对结果使用 bfloat32 运算。

这里需要注意的另一点是,当你使用 Colab/Kaggle 的 TPU 时,你不仅仅使用一个 TPU 内核,实际上你使用了相当多的内核。梯度[2]通常使用“ all-reduce 算法在 TPU 核之间交换

我想谈的最后一点是量化,它使 TPUs 的性能优于 GPU。量化是在两个极限之间逼近随机值的过程。通过将连续数字转换为离散数字,这种方法大量用于压缩浮点计算。这很有趣,你可以在这里找到更多关于它的

最后的想法和收获

我希望这篇文章给出了一些关于为什么像苹果的神经引擎和 Colab 的 TPUs 这样的芯片在 ML 模型训练中表现良好的背景。当这些模型必须进入我想写一篇文章的移动设备时,也有更多的创新进入 ML 的芯片。我认为我们总是习惯于看到创新发生在事物的模型方面,但我们忘记了那些模型需要那些芯片来运行。

参考文献

[1]https://blogs . Oracle . com/data science/CPU-vs-GPU-in-machine-learning

[2]https://code labs . developers . Google . com/code labs/keras-flowers-data/# 2

什么是变分自动编码器?

原文:https://towardsdatascience.com/what-is-a-variational-autoencoder-9b41bd63f65e?source=collection_archive---------17-----------------------

实践教程

代码生成机器学习快速入门指南

围棋熊Unsplash 上拍照

介绍

生成机器学习在各种情况下都是有帮助的。例如,一种情况是有某种封闭形式或准封闭形式的解,但计算量很大。在这种情况下,神经网络可以提供具有可接受准确度的及时解决方案。然而,为了训练这样的网络,数据必须被聚集,并且在大多数情况下可能是稀缺的。一个很好的例子是奇异期权的定价。如果你想了解更多关于这个例子的信息,我会留下一个 SSRN 论文的链接…

这个问题的解决方案可以通过变型自动编码器在生成式机器学习中找到。有了这样一个模型,我们可以从一组有代表性的群体数据中学习,并生成新的样本,这些样本可以作为更多的数据用于训练。本文将首先考虑自动编码器,给出一个直观的例子,并使用 Python 和 Tensorflow 的函数式 API,通过本文展示的代码过渡到变化的自动编码器。

自动编码器

前馈神经网络和图表

理解变型自动编码器的最佳方式是首先理解标准自动编码器。如果你不熟悉标准的神经网络架构,我建议你看看这些文章,让你跟上速度…

假设你在神经网络领域有基础,我们可以继续学习自动编码器的结构。

通常,前馈神经网络将具有输入层、在与输入相同的、更高维或更低维的空间中的一定数量的隐藏层、以及在相对于隐藏层和输入的更低维空间的输出层中的一些目标。

作者图片:前馈神经网络架构

这个概念相对简单,任何有构建神经网络经验的人可能会立即提出这个普遍性的反例,这不仅仅是公平的,然而,我离题了。此示例的目的是突出神经网络的每个组件的维度,因为自动编码器具有使其成为自动编码器的特定结构。

自动编码器和图表

作者图片:Autoencoder architechture

自动编码器接受输入(无论是波动点的网格、图像的像素还是时间序列路径的签名),并将其压缩到称为潜在空间的低维表示。从这个低维表示,潜在空间,目标是通过重建误差的反向传播来重建输入。

这可以从类似于任何种类的维度缩减方法(即主成分分析和路径签名)的角度来看。

至于语义,自动编码器可以分解为两个模型:

  • 编码器:将输入压缩到一个潜在空间,由上图中的输入隐藏层组成
  • 解码器:将原始输入的潜在表示作为输入,并尝试重建原始输入

自动编码器 Python 代码

关于在 Tensorflow 中实现自动编码器的资源并不多,所以我在下面提供了一个要点,作为使用 Tensorflow 的功能 API 开发您自己的自动编码器的指南。

Tensorflow 中的编码器模型

Model: "encoder"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
encoder_input (InputLayer)   (None, 10)                0         
_________________________________________________________________
intermediate_layer_1 (Dense) (None, 10)                110       
_________________________________________________________________
intermediate_layer_2 (Dense) (None, 10)                110       
_________________________________________________________________
latent_space (Dense)         (None, 5)                 55        
=================================================================
Total params: 275
Trainable params: 275
Non-trainable params: 0
_________________________________________________________________

现在我们需要一个解码器…

Tensorflow 中的解码器模型

Model: "decoder"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
decoder_input (InputLayer)   (None, 5)                 0         
_________________________________________________________________
intermediate_layer_3 (Dense) (None, 10)                60        
_________________________________________________________________
latent_space (Dense)         (None, 10)                110       
=================================================================
Total params: 170
Trainable params: 170
Non-trainable params: 0
_________________________________________________________________

现在我们有了编码器和解码器,我们可以将它们编译成一个模型,称为(令人震惊的)自动编码器。

Tensorflow 中的自动编码器模型

Model: "autoencoder"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
encoder_input (InputLayer)   (None, 10)                0         
_________________________________________________________________
encoder (Model)              (None, 5)                 275       
_________________________________________________________________
decoder (Model)              (None, 10)                170       
=================================================================
Total params: 445
Trainable params: 445
Non-trainable params: 0
_________________________________________________________________

这就是全部了!我们已经使用 Python 和 Tensorflow 成功构建了一个动态自动编码器。现在我们已经有了自动编码器的坚实基础,让我们看看为什么可变自动编码器如此有用。

可变自动编码器

简介和图表

顾名思义,它和标准自动编码器的唯一区别是变型组件…

自动编码器在潜在空间中具有原始输入的离散表示。离散,意味着它们本质上不是概率性的,它们是数学上确定的结果。

变分自动编码器保持潜在空间中的分布。如果听起来令人困惑,那是因为它确实如此。让我们来看一下这个体系结构的示意图,来阐明这个概念…

作者图片:可变自动编码器架构

其中图中的 X 表示正向传递中的输入实例。我们可以看到,潜在空间由潜在变量的分布组成,这些变量与编码器得出的平均值和标准偏差直接相关(回想一下我们的自动编码器的结构,这仍然成立)。

潜在变量分布

在变分自动编码器的情况下,编码器产生负责构建潜在变量分布的条件均值和标准偏差。没有这些条件均值和标准偏差,解码器将没有用于重构原始输入的参考框架。

为了创建分布本身,我们添加了一个ε项(正态分布),它乘以条件标准差并与条件均值相加。这是为了绕过通过随机节点的反向传播问题。虽然超出了本文的范围,但是如果你对我们为什么必须使用这个重新参数化技巧感兴趣,你可以看下面的帖子

这开始变得非常技术性,所以请记住最初的目标:生成代表一些原始数据的新样本。

重建误差和 KL 损失

坚持这种潜在变量分布的概念意味着我们可以生成代表用于训练变分自动编码器的集合的新样本。然而,潜在分布的形状并不令人鼓舞。这在基本意义上是有问题的——我们希望从分布中提取值,并将这些提取值传递给解码器以生成新的数据样本,但是,如果我们不能确定我们在采样中捕获了整个变化的自动编码器训练空间,则生成的数据将会有偏差。

幸运的是,变分自动编码器的损失函数有两个分量:重建损失和 KL 损失。重建损失与标准自动编码器相同。KL 损失促使潜在空间中的分布形状趋于正态。这极其重要,尤其是如果我们希望生成新的数据样本——如果潜在空间中的分布是正态的,我们可以简单地从正态分布中采样,并将这些值传递给解码器以生成新的输入(这是一件大事)。

为什么变型自动编码器很棘手

不幸的是,这可能是变型自动编码器变得非常难以工作的地方。当开发上述波动率表面用例的变分自动编码器时,花费了两周来找到平衡重建和 KL 损失的适当方法。如果重构误差被优先考虑,则生成的样本将会非常差,但是输入的重构将会很成功。如果 KL 损失被优先化,则生成的样本将是奇妙的,但是实际上没有意义,因为原始输入的重建被完全放弃了。这就是为什么取得平衡是绝对重要的。如果主要的努力是为一个特定的用例构造可变的自动编码器,我鼓励你阅读我的论文,因为它更详细地展示了(并提供了参考)用于平衡这些误差的过程。

变分自动编码器 Python 代码

同样,Python 中没有多少变分自动编码器的实现。这可以部分归因于实现的困难和缺乏用例。尽管如此,我还是提供了下面的代码,用于动态实现不同的自动编码器,而不考虑用例…

张量流中的变分编码器模型

您会注意到,变分编码器使用标准偏差的对数表示,而不是标准偏差本身(这也显示在示例函数中,数学上我们使用标准偏差)。这有助于 KL 损失项的收敛。

就像以前一样,变分编码器和变分解码器可以组合成一个单一的模型:变分自动编码器。

Model: "VAE"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
encoder_input (InputLayer)   (None, 10)                0         
_________________________________________________________________
encoder (Model)              (None, 5)                 220       
_________________________________________________________________
decoder (Model)              (None, 10)                170       
=================================================================
Total params: 390
Trainable params: 390
Non-trainable params: 0
_________________________________________________________________

结论

本文的目标是通过示例代码让您了解可变自动编码器,以便您可以开发自己的生成式机器学习模型。我们首先从简单的前馈神经网络的背景来看标准的自动编码器。离散潜在空间的概念然后扩展到概率潜在空间,自动编码器和变分自动编码器之间的主要区别。最后,我们考虑了变分自动编码器的一些更具技术性的方面,并在训练空间中分解了一些关于平衡优化的问题。

这是机器学习的一个特殊领域,我在最近的研究项目中花了很多时间。如果有任何关于特定代码或任何模型的问题,我很乐意回答。

https://github.com/RomanMichaelPaolucci

什么是对抗性机器学习?

原文:https://towardsdatascience.com/what-is-adversarial-machine-learning-dbe7110433d6?source=collection_archive---------12-----------------------

操作机器学习模型的介绍

机器学习模型是复杂的东西,通常,我们对它们如何做出预测的理解很差。这可能会留下隐藏的弱点,被攻击者利用。他们可以欺骗模型做出不正确的预测或泄露敏感信息。假数据甚至可以在我们不知情的情况下用来破坏模型。对抗性机器学习领域旨在解决这些弱点。

来源: flaticon

在本文的其余部分,我们将更深入地探索这个领域。我们将从讨论对抗性 ML 旨在防止的攻击类型开始。然后,我们将继续讨论防止这些攻击的一般方法。最后,我们将触及对抗性的 ML 如何与一般安全措施和负责任的 AI 相关联。

敌对攻击的类型

机器学习可以帮助我们自动化更复杂的任务。不利的一面是,模型会为攻击者引入一个新的攻击目标。新型攻击现在可以用来攻击您的 IT 系统。这些攻击包括中毒、规避和模型窃取攻击。

中毒袭击

中毒攻击主要针对用于训练模型的数据。在这种情况下,攻击者将更改现有数据或引入标签不正确的数据。然后,根据该数据训练的模型将对正确标记的数据做出不正确的预测。例如,攻击者可以将欺诈案例重新标记为非欺诈。攻击者可以只对特定的欺诈案例这样做,因此当他们试图以同样的方式实施欺诈时,系统不会拒绝他们。

对于许多应用,模型只训练一次。数据和模型都将被彻底检查,因此像这样的攻击机会可能很少。对于一些系统,模型被不断地重新训练。例如,可以每天/每周一次或者甚至在引入新数据时立即对强化学习模型进行训练。最终,在这种类型的环境中,中毒攻击的机会更大。

规避攻击

规避攻击集中在模型本身。它们涉及修改数据,因此看起来是合法的,但会导致不正确的预测。明确地说,攻击者修改模型用来进行预测的数据,而不是用来训练模型的数据。例如,当申请贷款时,攻击者可以使用 VPN 掩盖他们的真实原籍国。他们可能来自一个危险的国家,因此,如果攻击者使用他们真实的国家,模型将拒绝他们的申请。

这些类型的攻击更多地与图像识别等领域相关联。攻击者可以创建在人类看来完全正常的图像,但会导致完全不正确的预测。例如,谷歌的研究人员展示了如何将特定的噪声引入图像中,从而改变图像识别模型的预测。看图 1,你可以看到,对于一个人来说,噪声层甚至是不明显的。然而,模型现在预测熊猫是一只长臂猿。

图 1:对抗的例子(来源: I. Goodfellow 等人。艾尔。)

图像识别模型可以以这种方式被愚弄,因为它们被训练成将某些像素与目标变量相关联。如果我们能以正确的方式调整这些像素,模型就会改变它的预测。如果这些类型的攻击被用来影响自动驾驶汽车等系统,其后果可能会很严重。停车标志或交通灯可以用类似的方法改变吗?这种攻击可能不会被驾驶员注意到,但会导致汽车做出错误的、危及生命的决定。

模型窃取

类似地,模型窃取攻击也集中在经过训练的模型上。具体来说,攻击者希望了解模型的结构或用于训练模型的数据。例如,可以从大型语言处理模型中提取社会保险号或地址等机密数据。

就模型结构而言,攻击者可能想要了解该模型,并利用它来获取经济利益。例如,股票交易模型可以被复制并用于股票交易。攻击者可以利用这些信息进行进一步的攻击。例如,他们可以准确识别垃圾邮件过滤模型将标记的单词。然后,攻击者可以更改垃圾邮件/网络钓鱼邮件,以确保它们被发送到收件箱。

图 2:对抗性机器学习攻击的总结

对抗攻击的方法

我们捍卫 ML 系统的方式取决于我们使用的模型类型。许多问题可以通过线性回归或逻辑回归这样的简单模型来解决。当涉及到这些类型的模型时,我们描述的许多攻击是无效的。这是因为这些模型是可解释的,这意味着我们可以很容易理解它们是如何工作的。例如,如果发生了中毒事件,我们应该能够在测试过程中发现问题。

像神经网络这样更复杂的模型更难解释。最终,这意味着我们对模型的内部运作了解得更少。这导致了隐藏的弱点,并为上述攻击提供了更多机会。这就是为什么对抗性机器学习领域的大多数研究都旨在打击针对这些模型的攻击。这项研究可以归纳为以下几种一般方法。

对抗训练

第一种方法是训练模型来识别对立的例子。对于上面的图像识别模型,熊猫的错误分类图像将被认为是一个对立的例子。希望通过使用这些例子训练/再训练模型,它将能够识别未来的敌对攻击。

问题是首先可能很难发现这些对立的例子。因此,这一领域的研究不仅旨在防御它们,而且旨在自动发现它们。也有像 IBM 开发的对抗性鲁棒性工具箱这样的软件包,旨在简化对抗性训练的过程。

切换模型

第二种方法是在您的系统中使用多个模型。用于预测的模型是随机变化的。这就产生了一个移动的目标,因为攻击者不知道当前使用的是哪个型号。为了攻击成功,他们可能还必须损害所有模型。中毒或发现多个模型的对立例子要比只有一个模型困难得多。

一般化模型

第三种方法是广义模型防御,它也将使用多个模型。它们不是切换模型,而是组合在一起创建一个通用模型。这意味着所有的单个模型都将有助于最终的预测。一个对立的例子可能能够欺骗一个模型,但它可能不会对所有的模型都有效。最终,这意味着一个一般化的模型在对抗对立的例子时更加健壮。

一般安全措施和负责任的 AI

上述方法侧重于数据和模型。重要的是要记住,模型不是孤立存在的——它们是更大的 It 系统的一部分。这意味着许多攻击可以通过改变系统来避免。例如,加密和良好的密码实践可以保护数据库,降低中毒攻击的可能性。

再举个例子,让我们回到垃圾邮件过滤系统。攻击者可能会发送多封电子邮件来慢慢了解过滤器的工作原理。我们可以修改我们的电子邮件系统,不给出任何关于被拒绝的电子邮件的信息,而不是对模型进行修改。即系统不会告诉攻击者电子邮件是否被发送到垃圾文件夹。这限制了攻击者可以了解的数量,从而降低了模型窃取攻击的威胁。

最后,一般的安全措施只能带你到这里,我们可能仍然需要使用上述的对抗性防御之一。这也意味着现有的安全框架可能不足以解决机器学习的安全问题。这就是负责任的人工智能发挥作用的地方。它是一个框架,旨在解决人工智能/人工智能系统的安全性以及其他由此产生的问题,如算法的公平性和可解释性。您可以在下面的文章中了解更多信息:

[## 什么是负责任的 AI?

towardsdatascience.com](/what-is-responsible-ai-548743369729)

图像来源

所有图片都是我自己的或从www.flaticon.com获得的。在后者的情况下,我拥有他们的高级计划中定义的“完全许可”。

参考

古德费勒等人。艾尔。、解释和治理反面事例(2015)https://arxiv.org/pdf/1412.6572.pdf

C.Kapelke,对抗性机器学习(2019)https://medium . com/cltc-bulletin/对抗性机器学习-43b6de6aafdb

B.Dickson,什么是对抗性机器学习?(2020)https://bdtechtalks . com/2020/07/15/machine-learning-adversarial-examples/

K.Wiggers,机器学习中的对抗性攻击:它们是什么以及如何阻止它们(2021)https://venturebeat . com/2021/05/29/机器学习中的对抗性攻击-它们是什么以及如何阻止它们/

加州大学柏克莱分校对抗性机器学习【https://cltc.berkeley.edu/aml/(2021)

什么是算法公平?

原文:https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f?source=collection_archive---------10-----------------------

对旨在理解和防止机器学习中不公平现象的领域的介绍

(来源: flaticon )

起初,不公平的机器学习模型的概念似乎是矛盾的。没有种族、民族、性别或宗教概念的机器怎么会主动歧视某些群体?但算法会,如果不加以检查,它们将继续做出延续历史不公正的决定。这就是算法公平领域的用武之地。

我们探索算法公平的领域和它的目标是什么。为了突出这一领域的重要性,我们讨论了不公平模型及其后果的例子。我们还简要地谈到不公平的原因,如何衡量它和如何防止它。最后,我们讨论公平性和可解释性之间的联系。一路走来,我们链接了关于这些主题的更深入的文章。

在我们继续之前,您可以观看下面的视频,了解本文的摘要:

什么是算法公平?

在机器学习中,算法和模型这两个术语可以互换使用。准确地说,算法是像线性回归、随机森林或神经网络这样的数学函数。模型是经过数据训练的算法。一旦经过训练,模型就被用来进行预测,这有助于自动化决策。这些决定可以包括从诊断癌症患者到接受抵押贷款申请的任何事情。

(来源: flaticon )

没有一个模型是完美的,这意味着它们可能做出不正确的预测。如果这些错误系统性地使一群人处于不利地位,我们就说这个模型有偏见/不公平。例如,一个不公平的模型可能比男性更经常拒绝女性的抵押贷款申请。类似地,我们最终可能会得到一个比白人更不容易发现黑人皮肤癌的医疗系统。

算法公平是一个研究领域,旨在理解和纠正这样的偏见。它处于机器学习和伦理学的交汇点。具体而言,该领域包括:

  • 研究数据和算法中偏差的原因
  • 定义和应用公平的度量
  • 开发旨在创建公平算法的数据收集和建模方法
  • 就如何监管机器学习向政府/企业提供建议

理解公平的方法不仅仅是定量的也很重要。这是因为不公平的原因超越了数据和算法。这项研究还将涉及理解和解决不公平的根本原因。

(来源: flaticon )

为什么算法公平很重要?

如前所述,机器学习模型正被用于做出重要决策。不正确预测的后果对个人来说可能是毁灭性的。如果不正确的预测是系统性的,那么整个群体都会遭殃。为了理解我们这样说的意思,看几个例子会有帮助。

苹果公司最近推出了一种信用卡——苹果卡。你可以在网上申请信用卡,你会自动得到一个信用额度。随着人们开始使用这种产品,人们发现女性获得的信用额度比男性低得多。即使这些女性有着相似的财务状况(和信用风险)。例如,苹果联合创始人史蒂夫·沃兹尼亚克(Steve Wozniak)说,他获得的信用额度是他妻子的 10 倍。

(来源: flaticon )

另一个例子是亚马逊用来帮助自动化招聘的系统。机器学习被用来给新候选人的简历打分。为了训练模型,亚马逊使用了历史上成功候选人的信息。问题是,由于科技行业男性占主导地位,这些候选人中大多数是男性。其结果是一种不以性别中立的方式评价简历的模式。实际上,它甚至惩罚了“女人”这个词(例如女子足球队的队长)。

这些例子表明,模型可以做出基于性别歧视的预测。与男性同等的女性面临着明显不同的结果。在这种情况下,结果是降低信用额度或拒绝工作申请。这两种结果都可能产生严重的财务影响。总的来说,像这样的模式会增加男女之间的经济不平等。

(来源: flaticon )

模特也可以根据种族进行区分。COMPAS 是美国刑事司法系统使用的一种算法,用来预测被告是否有可能再次犯罪。不正确的预测(即假阳性)可能导致被告被错误监禁或面临更长的刑期。结果发现,黑人罪犯的假阳性率是白人罪犯的两倍。也就是说,黑人罪犯被错误地标记为潜在的惯犯的可能性是普通罪犯的两倍。

这些例子表明,我们可以发现有偏见的算法被用于许多行业的不同问题。这些算法做出决策的规模也是一个问题。一个有偏见的人受限于他能担保的贷款数量或他能定罪的人。一种算法可以被缩放并用于做出所有的决定。最终,一个有偏见的算法的后果可能是消极的和普遍的。

不公平的原因

很明显,它们是不好的,但是我们怎么会得到不公平的算法呢?算法公平实际上是一个有点误导的术语。算法本身并没有固有的偏见。它们只是数学函数。通过在数据上训练这些算法中的一个,我们获得了机器学习模型。引入有偏差的数据会导致模型有偏差。也就是说,我们围绕算法的选择仍然会放大这些偏见。

(来源: flaticon )

数据可能因为不同的原因而有偏差。我们收集的数据将反映历史的不公正,这可以通过一个模型(历史偏见)来捕捉。就像亚马逊的招聘模式一样,这可能是因为缺乏少数族裔代表(不平衡的数据集)。也可能是由于与种族/性别(代理变量)相关的模型特征。我们将在下面的文章中更深入地探讨这些原因。

分析和衡量不公平

许多算法公平性研究旨在开发分析和测量不公平性的方法。这可能涉及分析数据以找出上述不公平的潜在原因。它还涉及测量模型预测中的不公平性。

公平的定义

我们可以通过应用不同的公平性定义来衡量预测的公平性。大多数定义涉及将人口分为特权群体(如男性)和非特权群体(如女性)。然后,我们使用评估指标对各组进行比较。例如,根据均等几率的定义,我们要求两组的真阳性率和假阳性率相等。一个有明显不同的费率的模型被认为是不公平的。其他定义包括平等机会不同影响

(来源:作者)

探索性公平分析

当你有了最终的模型时,评估公平性并没有开始。这也应该是你探索性分析的一部分。一般来说,我们这样做是为了围绕数据集建立一些直觉。所以,当谈到建模时,你对预期的结果有一个很好的想法。具体来说,为了公平,你想了解你的数据的哪些方面可能导致不公平的模型。

在下面的文章中,我们将带您了解如何进行这样一个探索性公平分析。我们还将更深入地讨论公平的定义,并向您展示如何应用它们。

纠正和防止不公平

如果我们发现我们的模型不公平,我们自然会想纠正它。已经开发了各种定量方法。我们可以将它们分为前处理中处理后处理。这取决于在模型开发的哪个阶段应用它们。例如,我们可以调整回归模型的成本函数,以考虑公平性。这将被认为是一种正在处理的方法。

(来源:作者)

定量方法有其局限性。这是因为公平是一个复杂的问题。我们需要将它视为超越我们的数据和模型的东西。最终,我们还需要非量化方法来全面解决不公平问题。这些包括解决根本原因、问题的意识和团队多样性。

我们将在下面的文章中讨论更多的定量和非定量方法。这些包括预处理、加工中和后处理方法的例子。我们还试图更深入地理解这些方法的局限性。

可解释性和公平性

我喜欢写关于算法公平性的文章,但我的大部分文章都是关于可解释的机器学习的。可解释性包括理解模型如何做出预测。公平性和可解释性其实是相关的。这样做的主要原因是它们都是关于在 ML 系统中建立信任。我们将在下面的文章中讨论这一点和另外两个原因。

我希望这篇文章对你有帮助!如果你想看更多,你可以成为我的 推荐会员 来支持我。你可以访问 medium 上的所有文章,我可以得到你的部分费用。

https://conorosullyds.medium.com/membership

你也可以在|Twitter|YouTube|

图像来源

所有图片均为本人或从 www.flaticon.com获得。在后者的情况下,我拥有他们的高级计划中定义的“完全许可”。

参考

Birhane,a .(2021)算法的不公正:一种关系伦理方法https://www . science direct . com/science/article/pii/s 2666389921000155

D.佩萨奇和 e .施慕利,算法公平性 (2020),https://arxiv.org/abs/2001.09784

Gal Yona关于算法公平性讨论的温和介绍 (2017),https://towards data science . com/A-Gentle-Introduction-to-the-Discussion-on-algorithm-failure-740 BBB 469 b 6

j、文森特、苹果信用卡因歧视女性被调查 (2019)、https://www . the verge . com/2019/11/11/20958953/Apple-credit-card-gender-discrimina tion-algorithms-black-box-investigation

南沃希特-博特彻,技术上错误:性别歧视的应用程序,有偏见的算法,以及其他有毒技术的威胁 (2017),https://www . goodreads . com/book/show/38212110——技术上错误

《卫报》,亚马逊抛弃了偏爱男性从事技术工作的人工智能招聘工具 (2018),https://www . the Guardian . com/technology/2018/oct/10/Amazon-hiring-AI-gender-bias-recruiting-engine

维基百科,算法偏差 (2021),https://en.wikipedia.org/wiki/Algorithmic_bias

什么是 ARIMA 模型?

原文:https://towardsdatascience.com/what-is-an-arima-model-9e200f06f9eb?source=collection_archive---------7-----------------------

快速浏览 ARIMA 模特

如果您处理时间序列数据,那么您可能听说过术语 ARIMA。自 20 世纪 70 年代以来,ARIMA 模型一直被用于分析时间序列数据,而且有充分的理由证明它仍然存在;它简单而强大。在这篇博文中,我的目标是为您理解这个模型打下坚实的基础,并希望鼓励您使用它来分析时间序列数据。

一般概念

ARIMA 模型(自动回归综合移动平均的首字母缩写),本质上是创建一个线性方程来描述和预测你的时间序列数据。该等式由三个独立的部分组成,可描述为:

  • AR —自动回归:基于过去数据点创建的方程项
  • I —整合还是差异:说明数据中的总体“趋势”
  • MA —移动平均:基于过去数据点的误差或噪声的等式项

这三个部分共同构成了 AR-I-MA 模型。

ARIMA 的 AR 和 MA 方面实际上来自独立的模型,这些模型可以描述更简化的时间序列数据的趋势。有了 ARIMA 模型,你基本上有能力结合使用这两个模型和差分(即“I”)来进行简单或复杂的时间序列分析。很酷,对吧?

模型的注意事项

在深入挖掘之前,我想指出 ARIMA 模型是在某些假设下起作用的。为了有效地使用 ARIMA 模型,你会想问自己这些关于你想分析的时间序列数据的问题。

  • 是否有已知的季节性(周期性趋势)?
  • 是否存在大量异常值或零星数据点?
  • 关于均值的数据变异是否不一致?

如果你对这些问题的回答是否定的,那么 ARIMA 模式就是适合你的!否则,您可能需要寻找不同的时间序列模型。

了解细节

ARIMA 模型几乎总是被表示为 ARIMA(p,d,q) ,其中每个字母对应于上述三个部分中的一个。这三个字母代表您必须提供的参数,描述如下:

  • p 决定自回归(AR)项的数量
  • d 决定差分的顺序
  • q 决定移动平均线(MA)项的数量

虽然我喜欢这些参数背后的数学,但我不会在这篇文章中解释它。如果您对这些方程的工作原理感兴趣,我强烈推荐您查看我在最后发布的参考资料。现在,我将尝试让您对这三个参数有一个大致的了解。

综合

让我们从 ARIMA 模型中的“我”开始。模型的这一部分说明了整个时间序列数据中出现的一般趋势。d 值是指需要对时间序列趋势进行多少次求导才能得到一条平坦的线(或常数)。

例如,下图显示了 1990 年至 2015 年 4 月平均土地温度的实际数据。注意线性趋势。

如果我们用 ARIMA 模型分析这个数据,我们可能会用 d=1 来解释它的线性趋势。如果趋势是二次的,我们可能必须使用 d=2。

自回归和移动平均部分

ARIMA 模型本质上是递归的,因此依赖于过去的计算。这种递归性质直接来自添加到模型中的 AR 和 MA 方程项。

p 值,或 AR 部分,本质上描述了你的数据点对过去数据点的依赖程度。如果 p=1,那么特定时间的模型输出直接依赖于之前时间的输出。如果 p=2,则输出将依赖于最后两个时间段的输出。

类似地,q 值或 MA 部分使用相同的递归概念。不同之处在于,q 描述了当前输出与其过去的误差或噪声计算的相关程度。因此,如果 q=1,那么当前输出将依赖于过去一段时间的噪声计算。对于 q=2,您的输出将依赖于前两个时间段的噪声。

结论

现在我们已经对 ARIMA 模型及其参数有了一个大致的了解,我们实际上可以看看如何使用该模型进行分析。找出正确的 p、d 和 q 值可能具有挑战性,但拥有正确的工具,如 ACF 和 PACF,会有所帮助。在另一篇文章中,我将通过一个完整的例子来说明如何使用这些工具分析时间序列数据,并展示如何一起找到 p、d 和 q 值。下次见!

参考资料:

什么是人工神经网络?

原文:https://towardsdatascience.com/what-is-an-artificial-neural-network-b508c821ace8?source=collection_archive---------25-----------------------

人工神经网络的直观介绍。

神经网络近年来受到了大量的炒作,这是有充分理由的。有了对这种深度学习理论的基本理解,我们就可以创造出用人类,有时是超人的能力来解决复杂问题的技术。无论是高级信号处理、对象检测、智能决策还是时间序列分析,神经网络都是为您的项目增加智能的一种好方法。在我开始解释神经网络的细节之前,让我讲一个小故事,这个故事应该会对为什么首先创建人工神经网络有所启发。如果你只想直接进入神经网络的细节,那么跳到“生物神经元建模”部分。

投资者、数学家和神经科学家的故事

假设有一位房地产投资者拥有全球数千处房产的数据。这些数据包括每个物业的位置、位置犯罪率、物业平方英尺和人口。他还有每处房产的售价。他想找出每项财产的数据与该财产的销售价格之间的关系。如果他发现了这种关系,他可以将它应用到一个不在他的数据中的新房子上,并找出它的售价。然后他可以很容易地找到比他转卖价格更便宜的房子。

好吧,这就是一个房地产投资者的愿望。不幸的是,他从来都不擅长数学。因此,带着对财富的渴望,他找到了一位数学家来解决他的问题。让我们从数学家的角度来看这个问题。

对数学家来说,我们有一些函数的一系列输入和输出。输入是资产的位置、位置犯罪率、资产平方英尺和人口。产出是房产的销售价格。这个函数就是投资者所指的“关系”,但是数学家看到的是:

价格是投入的某种函数。这个函数可能很简单,也可能复杂得令人难以置信,我们就是不知道!*****图片作者***

当数学家不知疲倦地寻找这个函数时,投资者变得不耐烦了。几天后,他失去了他的病人,并与一位更有经验的投资者成为商业伙伴,而不是等待数学家。这位更有经验的投资者非常擅长他所做的事情,他可以出现在房产前,甚至不需要使用小学数学就能给出一个很好的估价。

数学家很尴尬,放弃了手动寻找这个函数。失败后,他问自己,“这个问题怎么这么难用数学来解决,但对有经验的投资者来说却如此直观?”。由于无法回答这个问题,他找到了一位神经科学家,希望了解投资者的大脑是如何解决这个问题的。

神经科学家无法准确回答投资者是如何如此准确地估计价格的,他教数学家大脑中的神经元是如何工作的。数学家然后用数学方法模拟这些神经元。经过年复一年的努力,这位数学家终于发现了如何找出任何两个相关事物之间的关系,包括一处房产的细节和它的售价。然后他利用这些信息赚了一亿美元,从此过上了幸福的生活。

生物神经元建模

正如我们从上面的故事中所看到的,如果我们想要模拟对人类来说如此直观,但却难以置信地复杂的数学模型,我们必须看看人脑是如何做到的。

人脑是由数十亿个神经元组成的。一个神经元的简化是这样的:许多大小不同的信号进入细胞核,如果总的输入信号足够强(它大于特定于该神经元的某个阈值),神经元将触发并输出信号。这个输出信号是另一个神经元的输入之一,这个过程继续进行。请参见下图对此进行形象化描述:

这个阈值在人工神经网络中被称为神经元的“偏差”。图片作者

那么我们如何用数学建模呢?神经元接收许多不同幅度的输入,接收的总信号可以建模为:

这些 W 变量称为权重。他们给输入信号加上“权重”来改变它们的大小。在大脑中,神经连接具有不同的电阻。这种阻力在生物学上相当于我们模型中的重量。*****图片作者***

好的,如果总的输入信号大于这个神经元的阈值,那么这个神经元就会触发。或者数学上:

该阈值称为偏差,标记为 B。如果加权输入之和大于 B,将输出 1。如果它们小于 B,这将输出一个 0。*****图片作者***

在我们称之为神经元的完整模型之前,我们必须说明一件事。去掉上面等式中的“如果”语句是有益的。我们通过将这个等式的左边传递到所谓的 sigmoid 函数中来实现。让我们来看看我们目前拥有的图形与 sigmoid 函数的图形。

sigmoid 函数是激活函数的一个例子。目前最流行的是使用 ReLu 函数,但是 sigmoid 函数很容易理解他们最初是如何想到这个想法的,因为它与 step 函数相似。*****图片作者***

如你所见,sigmoid 函数的行为与我们之前的阶跃函数几乎完全一样。唯一的区别是我们不需要处理那个难看的 if 语句。这个函数现在也是可微的,这很有用,原因我将很快解释。请注意,我们可以在这里使用任何可微函数,只是有些函数比其他函数更好。

下面是我们对神经元的最终数学表示。

Z =所有输入的加权和-神经元的偏差。然后,我们将 Z 传递给 sigmoid 函数,以获得输出。图片作者

我们现在可以更新神经元的图片,以符合我们的数学模型:

图片作者

组合多个神经元

现在我们理解了一个神经元的工作方式,并且我们已经用数学方法模拟了它。正如我之前所说,人脑由数十亿个神经元组成。这数十亿个神经元都与其他神经元相互发送和接收信号,形成了一个神经网络

让我们放大一个神经元。这个神经元接收一串输入,然后向一个或多个其他神经元发送信号。这些神经元都做同样的事情,从神经元接收一系列输入,然后向更多的神经元发送信号。大脑可以被认为是一个由相互连接的神经元组成的复杂的大网络。

当我们对神经网络进行数学建模时,我们给这个网络带来了一些秩序。最常见的是,我们将神经元组织成层。每一层接收来自前一层的输入,并将输出发送到下一层。我们让最后一层(输出层)有一定数量的神经元=我们想要的输出数量。下面是一个人工神经网络(神经网络的数学模型)的例子,有 2 个输出和 3 个输入:

您将在实施中看到,权重可视为一个矩阵。*****图片作者***

回到我们的房地产投资者的问题,他拥有的关于房地产的数据将是输入,而房地产的价格将是输出。回想一下,他总共有 4 个输入,并希望这些输入告诉他价格。现在,问问自己第一层和最后一层的神经元数量应该是多少,4 个输入 1 个输出。

你的答案第一层应该是 4,最后一层应该是 1。但是,我们应该在中间放多少神经元呢?我们应该有多少层?这是精确的数学停止和尝试和错误进来的地方。我们称这些值为超参数。每个问题的最佳层数和每层中神经元的数量是不同的,这只是你需要测试的东西。一般来说,增加层的数量和每层中的神经元数量将使神经网络更加健壮。但是如果你有太多的层和神经元,那么网络将会过度适应你的数据并简单地记忆输出。

人工神经网络背后的基本思想

所以,我们有一个神经网络的数学模型。我们实际上是如何让这个东西工作的?在给定输入的情况下,我们如何让这个网络真正给出我们想要的输出?帮我一个忙,让你的大脑进入海绵模式一秒钟,想想下面这个非常大胆的说法。

如果在输入中给定足够的信息,并且给定一个足够健壮的架构,存在一些权重集合,将使神经网络给出我们想要的输出。我们的目标是找到这些重量。

我们可以说,对于任何两个相关的事物,都有一些复杂的函数来模拟它们之间的关系。这是数学家试图用手找到的函数。这两个相关的东西是关于房产和房产售价的所有数据。事实证明,如果我们的神经网络中有一组正确的权重,我们就可以复制这种关系。

通过一些微积分和代码,我们可以在眨眼之间找到这些权重。然而,寻找这些权重的过程是神经网络和人工神经网络各自采取不同路径的地方。我不确定是否知道真正的神经网络如何学习,但使用微积分和数据,我们可以让我们的人工神经网络找到权重,如果可能的话,将输入映射到输出。

关于寻找这些权重或训练我们的神经网络的文章贴在这里

感谢您的阅读!如果这篇文章在某种程度上帮助了你,或者你有什么意见或问题,请在下面留下回复,让我知道!此外,如果你注意到我在某个地方犯了错误,或者我可以解释得更清楚一些,那么如果你能通过回复让我知道,我会很感激。

这是一系列文章的继续,这些文章从头开始对神经网络进行了直观的解释。其他文章请参见下面的链接:

第 1 部分:什么是人工神经网络

第 2 部分:如何从头开始训练神经网络

第 3 部分:梯度下降的全面实施

第 4 部分:梯度下降的实现(一个例子)

第 5 部分:如何在 python 中对手写数字进行分类

什么是方差分析,我们什么时候使用它?

原文:https://towardsdatascience.com/what-is-anova-and-when-do-we-use-it-e0dcd8759c4e?source=collection_archive---------1-----------------------

附有示例的综合指南

马库斯·斯皮斯克在 Unsplash 上的照片

推断统计学中的两个基本概念是总体和样本。推断统计的目标是根据样本推断总体的属性。

总体是一组中的所有元素,而样本是指总体中随机选择的子集。收集群体数据并不总是可行或可能的,因此我们使用样本进行分析。

例如,美国的大学生是一个群体,在美国随机选择的 1000 名大学生是这个群体的一个样本。

将样本分析结果直接应用于整个人群是不可靠的。我们需要系统的方法来证明样本结果适用于总体。这就是我们需要统计检验的原因。他们评估样本结果真实代表总体的可能性。

想想我们做的关于肥胖的研究项目。在我们的项目范围内,我们希望比较两个不同国家(A 和 b)20 岁的人的平均体重。由于我们无法收集人口数据,因此我们抽取样本并执行统计测试。

我们设置零假设和替代假设如下:

  • 零假设(H0):两组的平均体重没有差异。
  • 替代假设(H1):两组的平均权重不同。

两组比较时, t 检验优于 ANOVA 。然而,当我们有两个以上的组时,t 检验不是最佳选择,因为需要执行单独的 t 检验来比较每一对。

假设我们正在比较三个国家,A、B 和 C。我们需要对 A-B、A-C 和 B-C 对进行 t 检验。随着组数量的增加,这变得更加难以管理。因此,我们选择方差分析。

在比较三组或更多组的情况下,ANOVA 是优选的。方差分析有两个要素:

  • 各组内的差异
  • 组间差异

方差分析结果基于 F 比率,其计算如下:

f 比率(图片由作者提供)

f 比率是组间变异和组内变异之间比较的一种量度。

较高的 F 比值表明组间的差异大于组的个体差异。在这种情况下,更有可能的是各组的平均值不同。

相比之下,在 F 比值较低的情况下,组内个体差异大于组间差异。因此,我们可以得出结论,一个群体中的元素是高度不同的,而不是整个群体。

F 比率越大,各组具有不同均值的可能性越大。

我们已经讨论了方差分析背后的直觉,以及它通常在什么时候使用。下一步是做一个例子。我们将使用 R 编程语言来执行 ANOVA 测试。

rnorm 函数基于给定的平均值和标准变化值,生成从正态分布中采样的数字数组。

> rnorm(5, mean=10, sd=3)
[1]  8.624795  8.431731 10.570984  7.136710 11.801554

我们将使用 rnorm 函数来生成示例数据,然后在数据框中堆叠组。

> A = rnorm(100, mean = 60, sd = 5)
> B = rnorm(100, mean = 71, sd = 10)
> C = rnorm(100, mean = 65, sd = 7)
> groups = stack(data.frame(cbind(A, B, C)))

分组数据框(图片由作者提供)

values 列包含值,ind 列显示它属于哪个组。ANOVA 测试使用 aov 函数完成:

> anovaResults = aov(values ~ ind, data = groups)

方差分析测试结果(图片由作者提供)

  • f 值为 58.56,表明各组不同。大于 1 的 f 值表示至少一个组不同于其他组。
  • p 值非常小,表明结果具有统计学意义(即不是由于随机机会产生的)。通常,p 值小于 0.05 的结果被认为具有统计学意义。
  • Df 是自由度。第一行是组间差异,第二行是组内差异,计算如下:

(图片由作者提供)

让我们用平均值非常接近的组来做另一个例子。

> A = rnorm(100, mean = 70, sd = 5)
> B = rnorm(100, mean = 71, sd = 6)
> C = rnorm(100, mean = 70, sd = 7)
> groups = stack(data.frame(cbind(A, B, C)))
> anovaResults = aov(values ~ ind, data = groups)

方差分析测试结果(图片由作者提供)

在这种情况下,我们为每组选择了相同或非常接近的平均值。结果,f 值非常小,这证实了各组没有不同。

我们在示例中所做的是单向 ANOVA 测试,它基于一个独立变量比较三个或更多组的平均值。还有一个双向 ANOVA 测试,它基于两个独立变量比较三个或更多组。

结论

方差分析是一种确定组的平均值是否不同的方法。在推断统计学中,我们使用样本来推断总体的性质。方差分析等统计检验帮助我们判断样本结果是否适用于总体。

t 检验和方差分析的区别在于 t 检验只能用于比较两组,而方差分析可以扩展到三组或更多组。

方差分析也可以用于机器学习的特征选择过程。可以通过进行 ANOVA 测试来比较这些特征,并且可以从特征集中消除相似的特征。

感谢您的阅读。如果您有任何反馈,请告诉我。

什么是“人工通用智能”?

原文:https://towardsdatascience.com/what-is-artificial-general-intelligence-4b2a4ab31180?source=collection_archive---------19-----------------------

人工智能概论第一部分

一扇通往我们人性的窗户。来源:通过 Unsplash 附身摄影。

“在某个地方,一些不可思议的事情正等着被人知晓。”

卡尔·萨根

关于这个系列

你好。

我的名字是迈克·费格森,我是麻省理工学院大脑和认知科学(BCS)系的一名研究软件工程师。在我的大学时代,我是弗吉尼亚大学一门新颖的计算机科学课程的创造者和讲师,研究人工智能、神经科学和哲学的交叉。这门课程名为 CS 1501:人工智能,在弗吉尼亚大学教授了三个学期,有近 150 名学生,甚至获得了弗吉尼亚大学 CS 学院的教学奖。在我为缺乏简单易懂、简明扼要、触及相关问题的 AGI 介绍而烦恼之后,我有了将这门课转变成一系列博客的想法。

意识的本质是什么?传说中的图灵测试是什么,它会按计划进行吗?超级智慧会消灭人类吗?AGI 会摧毁还是改善经济?这些是人类必须提出的一些最重要的问题,可能会决定我们的命运。我不假装知道答案;我的希望只是强调跨学科合作的必要性,并强调哲学和认知科学如何能够阐明甚至回答棘手的计算机科学问题。

这个新的网络系列将通过查看人工智能的一个特定超集来介绍这些问题:人工通用智能——或通用人工智能。在大约 13 篇帖子中,我将把我教的弗吉尼亚大学的课转变成一个可消化的长篇故事,介绍和解释 AGI 的关键概念——从基础认知科学到心灵哲学和超智能。我们将探索神秘的意识领域,遍历认知架构的文献,并消化超智能的问题,敬请关注。对于任何对人工智能的神经科学、哲学难题的应用感兴趣的人,或者想知道天网是否真的可能的人,你找到了正确的地方。我这门课的目标是广度,所以这门“课”涵盖了很多——然而,“AGI 问题”有很多方面,我希望尽我所能介绍它们。

每周/每隔一周(我希望)会有一个新帖子出来,如果有问题、评论或澄清,可以随时给(mferg@mit.edu 发电子邮件。尽情享受吧!

免责声明:毫无疑问,有些人更有资格就我将涉及的问题和主题进行深入的讨论,从情感到神经形态计算。对于这些人来说,这个系列只是对这些主题的介绍,因此,如果为了简洁而省略或浓缩了一些内容,请见谅。我真的只是想要这个系列,以及激发它的课程,作为一个相关 AGI 主题的调查,这些主题通常在学习人工智能或人工智能时不会被教授。还要注意:这个系列与麻省理工学院或其品牌没有任何关系——我只是喜欢写一些我感兴趣的东西,麻省理工学院并不正式认可这里陈述的观点。

第一部分:什么是智能?

剧透:我们仍然不能同意。

心理学家 R.J .斯滕伯格曾经说过“……似乎有多少专家被要求定义智力,就有多少智力的定义。”另一位心理学家 E. Boring 说:“智力是通过智力测验来衡量的。”

据我所知,没有一个公认的定义,这使得我们制造和/或理解 AGI 的探索只是稍微复杂一点,因为我们不知道到底是什么智能。如果人们不能就热狗的构成达成一致,你就无法制造出识别热狗的探测器。啊,真是一团糟。

好消息是智慧的九头蛇确实对我们有些仁慈。在一篇很有影响力的论文中,AGI 大学的研究员 Marcus Hutter(我们将在这个系列中经常看到他)总结了几十个智力的历史定义,试图回答上面提出的问题。下面我转录了一些我认为很好的,真正强调了从心理学和计算机科学的角度处理这个问题的区别:

图 1:智能的各种定义。请注意,从人工智能的角度来看,重点是用有限的资源完成目标。原图。

同样,没有一个一致的定义,但在试图就什么使一个人“聪明”达成一个合理的想法时,有一些事情需要注意。首先,在人工智能的定义中,非常强调在有限的问题空间中实现目标的能力。这与强调适应环境和理性思考的心理学观点形成对比。这种二分法将在本系列的后面进行更深入的探讨,但是现在重要的是再次看到,关于什么是智力有许多观点。

还有一种叫做 G 因子(不是衡量你有多流氓)的东西,它试图将我们人类认为的智力捕捉到一个单一的数字中。早在 1916 年,心理学家刘易斯·特曼就引入了智商的概念——用心理年龄除以生理年龄来计算。一般能力,被定义为心理测量的 g (G-Factor) ,来源于人口中各种认知测试分数正相关的经验事实[4][5]。那么,简而言之,这种一般智能, g ,是一种试图捕捉我们认为使人“聪明”的不同动态的东西——比如工作记忆表现、流体推理、视觉空间处理、数字推理和整体知识。所以从理论上讲,一个人在测试工作记忆(你能记住多少单词?)、视觉空间推理(系列的下一个矩阵是什么?),或者以下字段的其他测试将被视为智能。

在流行文化中,魔方通常是智力的代表。资料来源:Olav Ahrens rtne viaun splash

好了,我们似乎对智力有了一个坚实的概念,并且有了一个好的、简洁的方法来量化它。对吗?也许不是。

最常见的测试是 WAIS-4/WIS-C 测试,通常被认为是测量某种程度的 g. 尽管对智商测试有许多异议,但它们值得一提:

  1. 智力测试也被指责不公平地按照种族、性别、阶级和文化对应试者进行分层;降低创造力、性格和实际知识的重要性;以及宣传这样一种观点,即人与生俱来就具有不可改变的智力天赋,这种天赋决定了他们一生的成功。[7]
  2. [批评者]指出,智商测试更多的是衡量以前学到的技能和知识,而不是潜在的天生能力,许多参与者只是不习惯于静坐和服从命令(这种测试需要的条件),尽管他们在现实世界中表现良好。——APA 心理学词典[8]

然而,传统上,智商分数与人生成功呈正相关(极具争议,仍然是一个有争议的问题),所以你们门萨书呆子可能真的有一些东西可以吹嘘了…

爱因斯坦的智商估计在 160 到 200 以上。来源:安德鲁·乔治 via Unsplash

另一种有科学依据的智能“品种”是流动智能结晶智能。总的来说,流体智力是由动态的技能组成的,如(工作)记忆、处理速度,通常包括推理、分析和解决问题的能力[10]。它也会随着年龄的增长而减少。这与结晶智力形成对比,结晶智力是利用先前的知识解决问题的能力,通常通过经验和教育获得。传统上,这随着年龄的增长而增长(希望你获得更多的知识和智慧)。

阅读是增加智力结晶的好方法。资料来源:艾娃溶胶 via Unsplash

最后,你可能听说过哈沃德·加德纳博士的多元智能理论,解释如下。这已经引起了相当多的争议,但在讨论智力时也值得一提。

根据这一理论,有 9 种“智力类型”[11]:

  1. 空间:在 3D 中可视化世界。
  2. 自然主义者:了解生物,阅读自然。
  3. 音乐:辨别声音,它们的音高、音调、节奏和音色。
  4. 逻辑/数学:量化事物,提出/证明假设。
  5. 个人内部:了解你自己,你的感觉/想要什么。
  6. 人际关系:感知人们的感觉和动机。
  7. 语言学:寻找合适的词语来表达。
  8. 存在主义:接受大问题。
  9. 身体动觉:协调你的思想和你的身体。

那是一阵旋风。情报混乱。有许多不同的类型,甚至心理学内部也没有就它到底是什么达成一致。对我们来说,这是个坏消息,因为这表明我们正试图为一个我们甚至可能不知道正确答案的问题创造一个解决方案。然而,我们可以尝试收敛于类似于人类智能的东西…

第二部分:是什么让 GI 如此难以复制?

我们在寻求一个无法实现的目标吗?

你现在可能会问:天哪,迈克,我只是想了解一下 AGI。为什么所有这些关于智力的讨论都是相关的?嗯,除非我们知道什么样的智能是智能,否则我们不可能希望将某样东西认定为人工智能(或者就此而言,人工智能一般是智能)。这是一个常见的主题,会在本课程中多次出现,包括意识、情绪、感觉等…

好吧,那么,问题是现在的机器真的擅长于缩小的任务,因为人工智能在特定领域表现出色,如玩围棋、垃圾邮件检测,以及(令人惊讶的是)Spotify 播放列表推荐。然而,计算机现在缺乏将知识推广到其他领域的能力,也没有显示任何程度的 g (目前还没有)。这是问题的核心,牛津哲学家尼克·博斯特罗姆(他将在后面多次出现)说得很好:

计算机科学家唐纳德·克努特(Donald Knuth)惊讶地发现,“到目前为止,人工智能已经成功地做了几乎所有需要‘思考’的事情,但却未能做大多数人和动物‘不用思考’就能做的事情——不知何故,这要困难得多!"

快速绕过术语,好像我们不弄清楚这一点,就知道以后会一团糟。传统上,机器学习(ML)是人工智能的子集,而人工智能是 AGI 的子集(或者,取决于谁在问,这是实现 AGI 的一种方式)。AGI 是最广泛的类别,包含人工智能和人工智能,传统的或通俗的人工智能通常被称为“窄人工智能”或“弱人工智能”:智能处理单个窄领域的系统的开发[6]。今天对人工智能的很多关注都在这个狭义的人工智能中,比如计算机视觉、深度学习和 NLP。人工智能研究员斯坦·富兰克林说

在大约 10 年内(1957 年后),人们非常清楚地认识到,要让这种“强人工智能”成为现实,人工智能必须克服的问题是巨大的,也许是难以解决的。

这让我们 AGI 人放心了…

好了,不管怎样:我们可以找到一些关于 AGI 的很好的定义,现在我们有了一个很好的智力背景。当被问及一个问题时,我们会像现代历史上所有伟大的人一样做:我们看维基百科:

  1. 维基百科:人工通用智能(AGI)是机器的智能,它可以理解或学习人类可以完成的任何智力任务。

我认为这是一个相当坚实的定义,抓住了 AGI 是什么的高层次的想法,它只是缺乏一个更深层次的基础,一个 AGI 学会,以及本·戈泽尔博士触及到的基础:

  1. AGI 社会:智能堪比人脑的通用系统(或许最终会远远超出人类的一般智能)。
  2. Goertzel: 创造出能够执行特定“智能”行为的系统,这些行为可以与人类的行为相媲美,甚至更好”[2]。

AGI 会按照我们的形象制造吗?这个问题我们会再讨论。资料来源:Kendrick Mills viaun splash

对于本课程和博客系列,我认为下面的定义非常好,可以很好地为我们服务。这可能就是你来的目的:

  1. 智力:学习新信息并运用这些知识以创造性和实践性的方式解决新问题的能力。
  2. AGI 的 :人工合成的人类级别的普通智能,可以做人类能做的任何认知任务。在不同领域表现出广泛的智力,在大多数(如果不是全部的话)解决问题的领域与人类一样好(或者更好)。

再说一遍,我认为这些都很好,可以作为我们未来的良好指南,这也是我在剩下的课程中提到 AGI 时的意思。如果你是一个专业的情报研究者,并且你对此有意见(不要责备我),让我知道,我们可以修改!但我认为目前来看已经足够好了【T11:)

第三部分:AGI 必须能够做什么?

希望不要消灭人类…

Goertzel 博士称之为核心 AGI 假说。

创建和研究具有足够宽(例如人类水平)范围和强概括能力的合成智能本质上不同于创建和研究具有明显更窄范围和更弱概括能力的合成智能。

基本上,这表明制造和研究 AGI 在许多方面与狭义人工智能完全不同——从研发到伦理再到部署。Goertzel 再次为我们展示了它[2]:

“AGI”这一概念和术语背后的特定目的是关注某些智能系统的一般范围和概括能力,例如人类、理论系统如 AIXI (Hutter,2005)以及潜在的未来合成智能的子集。

也就是说,粗略地说,AGI 系统是一种类型的合成智能,可以将其知识应用于各种各样的任务和领域。

更广泛地说,许多人认为 AGI 应该能够做这样的事情:

  1. 所有任务都有固定的结构。
  2. 实现一个符号系统。
  3. 代表并有效地使用特定模态的知识。
  4. 代表并有效使用大量不同的知识。
  5. 代表并有效使用独立于当前认知的信念。
  6. 展现并有效使用丰富的、层次化的控制知识。
  7. 展现并有效运用元认知知识。
  8. 支持无限和有限的审议范围。
  9. 支持,多样,全面的学习。
  10. 支持渐进式在线学习。

…我认为这是一个进行研究和开发的公平场所,许多人都在积极地追求它。

第四部分:结论

TL;速度三角形定位法(dead reckoning)

智力是混乱的,它有许多定义。简而言之,AGI 对人工智能进行了扩展,试图包含一种概括能力,即在广泛的领域内,在智力任务方面与人类一样好,甚至更好的能力。

我们怎么知道什么时候是真正的 AGI?来源:通过 Unsplash 的着魔摄影。

"采取明智的行动需要比智力更多的东西."

――陀思妥耶夫斯基,《罪与罚》

关于作者

Mike Ferguson 是麻省理工学院 DiCarlo 实验室的计算研究开发人员。他将研究大脑评分,这是一种测量神经网络有多像大脑的工具。他将于 2021 年春天从弗吉尼亚大学毕业,获得计算机科学和应用数学学士学位,以及认知科学和哲学学士学位。他是《一周挑战》一书的参与者,在两年内阅读了超过 138 本关于人工智能、哲学以及对人类意味着什么的书籍。他和他的矮胖的伯恩山犬 boi Winston 住在弗吉尼亚州的夏洛茨维尔。

参考资料:

  1. 莱格,谢恩和马库斯·哈特。"智力定义的集合."人工智能与应用前沿 157 (2007): 17。
  2. 戈泽尔本。"人工智能:概念、现状和未来展望."人工通用智能杂志 5.1(2014):1–48。
  3. 特殊儿童的心理卫生。教育学院 22.4(1915):529–537。
  4. 查尔斯·斯皮尔曼。“‘一般智力’是客观确定和测量的。”(1961).
  5. 《g 因素:心理测量学和生物学》诺华基金会研讨会。奇切斯特;纽约;约翰·威利;1999, 2000.
  6. 人工一般智能的基础架构。人工智能进展:概念、架构和算法 6 (2007): 36。
  7. https://www.apa.org/monitor/feb03/intelligent
  8. https://dictionary.apa.org/iq
  9. https://www . thoughtco . com/fluid-crystallized-intelligence-4172807
  10. 《评估人类智能系统的主张和挑战》第二届人工通用智能会议论文集(2009)。亚特兰蒂斯出版社,2009 年。
  11. 9 种智力类型—信息图表(adioma.com)

什么是贝叶斯推理?

原文:https://towardsdatascience.com/what-is-bayesian-inference-4eda9f9e20a6?source=collection_archive---------3-----------------------

通过一个经典的掷硬币的例子,从直观的解释到数学理论

说明我们的先验知识如何影响我们的后验知识。图片作者。

内容

这篇文章是我将要发表的一系列文章的一部分。你可以通过点击这里在我的个人博客上阅读这篇文章的更详细版本。下面你可以看到该系列的概述。

1.机器学习导论

2.回归

3.分类

频率主义和贝叶斯主义的区别

正如本系列第一篇中提到的,机器学习主要关注预测,可以想象,预测非常关注概率。在这篇文章中,我们将探讨概率的两种主要解释:频率主义和贝叶斯主义。

概率的频率主义(或经典)定义是基于事件的频率,而概率的贝叶斯定义是基于我们对事件的了解。在机器学习的背景下,我们可以将这种差异解释为:数据所说的与我们从数据中知道的。

类比:手机丢在哪里了?

为了理解这意味着什么,我喜欢用这个类比。假设你把手机丢在家里的某个地方了。你用你朋友的电话打电话给你的手机——当它打电话的时候,你的手机开始响(它不是振动的)。你如何决定,在家里的什么地方找你的手机?

常客会用他们的耳朵来识别声音最可能来自的区域。然而,贝叶斯也可以使用他们的耳朵,但除此之外,他们还会回忆起他们以前在家里的哪些地方丢失了手机,并在推断去哪里找手机时将这一点考虑在内。

频率主义者和贝叶斯都使用他们的耳朵来推断在哪里寻找手机,但是贝叶斯也将关于丢失手机的先验知识结合到他们的推断中。

贝叶斯定理

为了利用贝叶斯理论,我们需要谈谈贝叶斯定理。假设我们有两组结果 AB (也称为事件)。我们分别表示每个事件的概率 P(A)P(B) 。两个事件的概率用联合概率 P(A,B) 来表示,我们可以用条件概率来扩展它

A 给定 B 的条件概率和 B 的概率给我们的是 AB 的联合概率。因此

也是。因为(1)和(2)的左边是相同的,所以我们可以看到右边是相等的

这就是贝叶斯定理。这对你来说应该很熟悉——如果不是,我建议你在继续学习之前先阅读一些概率论的基础知识。

这可能不是很清楚,为什么这在机器学习中如此重要,所以让我们用一种更“数据科学”的方式来写贝叶斯定理:

证据(上面的分母)确保左侧的后验分布是有效的概率密度,并被称为归一化常数。因为它只是一个归一化常数,所以我们经常用文字表述这个定理

其中∝表示“成比例”。

例子:抛硬币

我们从开始,一个简单的例子,我认为它很好地说明了频率主义者和贝叶斯方法之间的区别。考虑以下问题:

一枚硬币以概率θ正面朝上,以概率 1θ反面朝上(其中θ未知)。你掷硬币 11 次,结果是正面朝上 8 次。现在,你打赌接下来的两次投掷会正面朝上吗?

X 是代表硬币的随机变量,其中 X=1 是正面, X=0 是反面,这样 P(X=1)=θPr(X = 0)= 1-θ。再者,让 D 表示我们的数据(8 头,3 尾)。

现在,我们要估计参数 θ 的值,这样就可以计算出连续看到 2 个头的概率。如果概率小于 0.5,我们将打赌不会连续看到 2 个头,但如果高于 0.5,我们就赌。

那么一个常客和贝叶斯会怎么做呢?

频繁主义方法

作为频率主义者,我们希望最大化可能性,也就是问这样一个问题:给定 θ ,什么样的 θ 值将最大化我们得到 D 的概率,或者更正式地说,我们希望找到

这就是所谓的最大似然估计

11 次抛硬币遵循二项分布,其中 n=11 次尝试, k=8 次成功, θ 成功的概率。使用二项式分布的可能性,我们可以找到使数据概率最大化的 θ 的值。因此,我们希望找到最大化的 θ 的值

注意,(3)表示给定 Dθ可能性,和说给定 Dθ 的概率不一样。下图显示了我们的似然函数 P(D∣θ) (作为 θ 的函数)和最大似然估计。

可能性函数 P(D∣θ)的图示,在最大可能性估计处有一条垂直线。图片作者。

不出所料,使可能性最大化的 θ 的值是 k/n,即试验中成功的比例。因此,最大似然估计为 k/n = 8/11 ≈ 0.73。

假设抛硬币是独立的,我们现在可以计算连续看到两个头的概率:

既然连续看到 2 个头的概率大于 0.5,我们就赌

贝叶斯方法

作为贝叶斯,我们希望最大化后验,所以我们提出这样一个问题:给定 D ,什么样的 θ 值会最大化 θ 的概率?形式上,我们得到

这被称为最大后验概率(MAP)估计。为了回答这个问题,我们使用贝叶斯定理

由于证据 P(D) 是不依赖于 θ 的归一化常数,我们可以忽略它。这给了我们

在频率主义方法中,我们已经发现了可能性(3)

这里我们可以去掉二项式系数,因为它不依赖于 θ唯一剩下的就是先验分布 P(θ) 。这个分布描述了我们对 θ 的初始(先验)知识。一个方便选择的分布是贝塔分布,因为它定义在区间[0,1]上,而 θ 是一个概率,必须在 0 和 1 之间。这给了我们

其中γ是伽马函数。由于分数不依赖于 θ ,我们可以忽略它,这样我们就得到

请注意,我们最终得到了另一个 beta 分布(没有归一化常数)。

现在我们的工作是以这样一种方式设置先验分布,即在看到数据之前,我们结合我们所知道的关于 θ 的信息。现在,我们知道硬币通常是相当公平的,如果我们选择 α=β=2 ,我们会得到一个比 θ=0θ=1 更倾向于 θ=0.5 的β分布。下图显示了该先验 Beta(2,2)、归一化似然性以及由此产生的后验分布。

先验 P(θ) 、似然 P(D∣θ)和后验分布 P(θ | D)的图示,在最大后验估计值处有一条垂直线。图片作者。

我们可以看到后验分布最终被拉向前验分布,这使得 MAP 估计与 MLE 估计略有不同。事实上,我们得到了

这比最大似然估计值低一点——如果我们现在使用地图估计值来计算连续看到两个头的概率,我们会发现我们会赌它不赢

此外,如果我们选择 α=β=1 ,我们会得到贝塔分布是均匀分布的特殊情况。在这种情况下,我们的 MAP 和 MLE 估计是相同的,而且我们做了同样的赌注。下图显示了不同的 αβ值的先验、似然和后验概率。

作为改变 αβ的结果的先验和后验分布图。图片作者。

完全贝叶斯方法

虽然我们在之前的方法中包括了先验分布,但我们仍然将分布折叠成点估计,并使用该估计来计算连续两个头的概率。在真正的贝叶斯方法中,我们不会这样做,因为我们不只是对 θ 有一个单独的估计,而是一个整体分布(后验)。

H 表示连续看到两个头的事件——然后我们问:给定数据,即 P(H∣D) ,看到两个头的概率是多少?

要回答这个问题,我们首先需要找到(4)中后验分布的归一化常数。因为它是一个贝塔分布,我们可以看(4)并且看到它一定是

像前面一样,我们也假设掷硬币是独立的,这意味着连续看到两个正面的概率(给定 θ 和数据 D )正好等于看到正面平方的概率,即 P(H∣θ,D)=θ

我们现在可以通过“积分出” θ 来回答这个问题

在这种情况下,如果我们选择一个均匀先验,即 α=β=1 ,我们实际上得到 45/91≈0.49,所以即使我们选择一个均匀先验,我们也会下注。其原因更加复杂,并且与均匀先验不是完全不可知的有关。

此外,我们还做了一个隐含的决定,不更新我们预测的两次投掷之间的后验分布。你可以想象,在第一次投掷硬币后,我们将获得关于硬币公平性的知识(关于 θ ,我们可以用它来更新我们的后验分布。然而,为了简化计算,我们没有这样做。

摘要

  • 频率主义基于事件的频率。
  • 贝叶斯主义基于我们对事件的了解。
  • 在之前的代表你在看到数据之前对参数的了解。
  • 似然是参数的数据给定值的概率。
  • 后验是给定数据时参数的概率。
  • 贝叶斯定理联系了先验、似然和后验分布
  • MLE 是最大似然估计,这是 frequentists 用的。
  • MAP 是最大后验估计,这是贝叶斯人用的。

什么超出了我们的模型?

原文:https://towardsdatascience.com/what-is-beyond-our-model-23b1354e905b?source=collection_archive---------67-----------------------

我们探索一个完整软件解决方案的架构:部署一个 Python 模型,从用户界面到与模型的连接并获得结果。

泽维尔·冯·埃拉赫在 Unsplash 上的照片

背景

长期以来,特别是在我们对机器学习挑战领域的探索阶段,我们专注于寻找一种模型,从特定状态的数据开始,可以在我们认为可接受的准确范围内获得结果。
嗯,获取模型的工作领域是如此广泛、复杂,而且本身就很吸引人,以至于我们会忽略软件解决方案中涉及的其他组件。
因此,我们的模型将被另一组问题所包围,这些问题与我们开发的模型本身一样复杂、广泛和有趣,例如:

  • 提取和转换数据,以获得与我们开始时相似的数据集
  • 模型在生产中的部署
  • 数据收集和后续验证,以监控和纠正我们的初始模型。

然后我们会遇到 ETL数据角力MLOps 的字段。
作为数据科学家,仅仅找到能够解决挑战的模型已经不够了;我们至少要考虑所有这些相关领域的可行性。
让我们假设我们设法保护了数据收集管道。
假设我们在特征工程管道中保护自己免受新案例或异常数据的影响。
让我们假设我们获得了一种有效的方法来将其投入生产并存储数据集,并且我们可以监督模型行为。
唉!似乎我们已经计划好了一切。对吗?

大概不会!

可能我们缺少与用户交互的软件来展示预测结果。有时我们的模型会与复杂的环境联系起来。需要在它们之间创建一个 API,以便模型可以显示其结果;有时有必要开发软件来使用我们的模型。
本文将在一个测试案例中呈现一个完整的解决方案;所使用的组件和工具可以根据任何其他类型的语言、库和架构而改变。

使用案例

我们从一个用 Python 开发的模型开始,它接收一个 CSV 并返回一个 Excel 文件,添加一个包含预测结果的列。

我们需要在服务器中部署这种模型,并开发一个用户界面:

  • 登录用户
  • 允许用户从任何来源选择适当格式的 CSV 文件,并将其上传到模型。
  • 向用户显示一个面板,显示所有上传的文件及其状态(已处理、失败、进度)。
  • 当模型完成处理时通知用户。

此外,我们将把模型封装在 API 中,由其他软件作为服务调用。

溶液结构

提议的解决方案由六个组件和三个接入点组成。

组件按外观顺序排列:
1)用户界面(WordPress + PHP)
2)数据库(MySQL)
3)服务器中的存储库,用于存储输入和输出数据集
4)调度程序(cronJob)用于调度待处理作业的搜索并调用模型
5)用于模型执行的 API(Pyhton—uvicone—Starlette)
6)Python 中的机器学习模型

系统的访问点有:
a)用户,当向应用程序上传新数据集时
b)调度程序,当检测到要处理的作业时
c)具有正确凭证的某人想要专门调用模型的 API 来直接处理数据库中注册的数据集。

作者图片

这个想法是用户通过界面上传一个 CSV 文件进行处理。
组件 1 允许并控制 CSV 是否正确。它将数据库中的作业保存为“待定”状态,并将数据集存放在输入存储库中。
然后,调度程序每隔“x”次检查一次是否有未完成的作业,接受它,并改变到“进行中”状态,调用调用模型的函数。流程的结果存储在输出存储库中,将任务的状态更新为“已处理”
从用户面板(第 1 点)中,您可以检测有错误的作业,将其从作业列表中删除、存档或重试。

组件

1 —用户面板

用户面板在 Wordpress 中开发,通过一个插件访问和管理用户:

作者图片

访问后,该面板有一个标题,用户可以在其中选择一个在其结构中经过验证的数据集,然后将其作为待定项加载到数据库中,并将其留在输入存储库中。

2 —数据库

作者图片

选择的数据库是 MySQL

记录任务的表“wp_records”具有以下结构

3 —数据存储库

输入和输出存储库是服务器上定义的两个目录,文件作为任务表中生成的条目保存在其中。
一旦 Python 模型处理数据集并返回一个 CSV 格式的结果,它将保存在输出目录中。

4 —调度程序执行

以下代码(process_files)说明了如何处理文件,打开数据库(open_db),查找是否有处于“待定”状态的任务,如果有,则获取其中的第一个任务并调用预测过程(process_file)。

import mysql.connector as mysql
from mysql.connector import Error
from datetime import datetime
from jproperties import Propertiesif __name__ == '__main__':
   result = ''
   try:
      db = open_bd()
      cursor = db.cursor()
      sql_Query = "SELECT id FROM wp_records WHERE status_file='IN PROCESS'"
      cursor.execute(sql_Query)
      records = cursor.fetchall()
      if (len(records) != 0):
          result = 'There are files in progress' + str(records[0][0])
      else:
          sql_Query = "SELECT id FROM wp_records WHERE status_file='PENDING'"
          cursor.execute(sql_Query)
          records = cursor.fetchall()
          if (len(records) > 0):
             id = records[0][0]
             **result = process_file(id)**
      except Error as e:
          result = 'Error ' + e
      finally:
          if (db.is_connected()):
             db.close()
             cursor.close()
             result = result + ' (BD correctly closed)'

打开数据库的代码有一个配置文件 ConfigFile.properties,其中定义了数据库和访问凭据。

def open_bd():
   configs = Properties()
   with open('ConfigFile.properties', 'rb') as config_file:
      configs.load(config_file)
      host = configs.get("HOST")[0]
      user = configs.get("USER")[0]
      pass = configs.get("PASSWORD")[0]
      database = configs.get("DBNAME")[0]

      db = mysql.connect(
           host = host,
           user = user,
           passwd = pass,
           database=database)
      return db

处理特定文件的代码(数据库 id 可能是这样的):

**def process_file(prm_id):**
   os.environ['TZ'] = 'America/Montevideo'
   time.tzset()
   resultado = ''
   try:
      db = open_bd()
      cursor = db.cursor()
      sql_Query = "SELECT path_up FROM wp_records WHERE id=%s"
      id = (prm_id,)
      cursor.execute(sql_Query, id)
      record = cursor.fetchone()
      input_file = str(record[0])
      upd_Query = "UPDATE wp_records SET status_file = 'IN PROGRESS',date_init=%s WHERE id=%s"
      today = datetime.today()
      params = (str(today),prm_id,)
      cursor.execute(upd_Query, params)
      db.commit()
      outfile = ''
      **output_file = predictions.prediction(input_file)**
      today = datetime.today()
      upd_Query = "UPDATE wp_registros SET status_file='PROCESS OK',path_result = %s,date_result=%s WHERE id=%s"
      params = (output_file,str(today),prm_id,)
      cursor.execute(upd_Query, params)
      db.commit()
      resultado = 'OK - File was created [' + output_file + ']'
   except Error as e:
      result = 'Error ' + e + ' processing id ' +  prm_id
   finally:
      if (db.is_connected()):
         db.close()
         cursor.close()
         result = result + ' (BD closed)'
         return result

5—uv icon 和 Startlette API

下面是使用 Uvicorn 和 Starlette 开发 API 的 Python 代码,必须安装(使用 pip install)。

在我们的 API 中,我们部署了三种方法:

  • / 验证服务器正在运行,我们的 API 正在工作
  • /process_file?id=id_base_data 是一个处理某个文件的方法,我们必须通过参数传递与要处理的文件相对应的任务表的 id(记住,在组件 1 中创建了这个表中的条目,并将数据集下载到存储库中)
  • 没有参数的 /process_all 用于搜索斜率的所有条目并进行处理。
from starlette.applications import Starlette
from starlette.responses import JSONResponse
import uvicorn
import connect
import pendings
from datetime import datetimeapp = Starlette(debug=True)
@app.route('**/**')
async def homepage(request):
   return JSONResponse({'MySAMPLE': 'It works!'})@app.route("**/process_file**", methods=["GET"])
   async def process_file(request):
   elid = request.query_params["id"]
   before = datetime.today()
   **result = connect.process_file(elid)**
   after = datetime.today()
   return JSONResponse({
      "resulta": result,
      "Start" : str(before),
      "End" : str(after)})@app.route("**/process_all**", methods=["GET"])
async def process_all(request):
   before = datetime.today()
   **result = pendings.process_files()**
   after = datetime.today()
   return JSONResponse({
      "result": result,
      "Start" : str(before),
      "End" : str(after)})if __name__ == '__main__':
   **uvicorn.run(app, host='0.0.0.0', port=8000)**

通过斜坡运行的代码和处理第 4 项中指定的文件的代码

Python 模型

该模型在应用程序的另一个模块中,因此没有在本文中显示,因为我们的目的不是在这里详述它。

摘要

与之前的文章不同,我们专注于解决特定机器学习挑战的工具和方法,这一次,我们展示了另一部分工作,也许没有那么吸引人,但对于将用例的解决方案转换为完整的解决方案来说是必不可少的。

当然,每个解决方案的架构都是根据问题、客户的现有结构、我们对每个实例的工具的了解或补充我们团队的人员来定义的。

每个阶段都有许多库和工具。

简而言之:谈论与模型相关的其他方面,这些方面可能是完整解决方案所必需的。

什么是大 O 符号,为什么要关注它

原文:https://towardsdatascience.com/what-is-big-o-notation-and-why-you-should-care-5638895a1693?source=collection_archive---------14-----------------------

根据您的具体情况,选择最有效的算法来处理您的数据。

少年赖斯Unsplash 拍摄的照片

作为程序员,在开始一个复杂的项目之前,我们经常要做一些原型制作。在这个过程中,我们可能没有写出最有效的代码,但这没关系:更重要的是在尽可能短的时间内达到工作状态。然而,不可避免的是,开始为项目想法的可部署实现编码的时候到了。这意味着可能遗留下来的技术债务现在必须解决。

此外,如果你是一名数据科学家,你经常会发现自己同时处理大量的信息。由于处理大量数据是一项资源密集型且耗时的操作,因此找到解决该问题的最有效方法至关重要。在本文中,我将带您了解大 O 符号及其应用。

在选择算法之前

给定一个问题,有无数种可能的方法来解决它。虽然,只有少数是真正好的。你如何在算法 A 和算法 B 之间做出选择?你得先分析问题。

  • 你的代码必须每秒运行多次吗?
  • 您计划将您的系统扩展到什么程度?
  • 您将处理什么类型的数据?

万一你的程序一次又一次地调用相同的函数,你肯定需要确保它们不会成为整个系统的瓶颈。在这种情况下,即使是很小的速度提升也会产生不同。例如,假设你为你的物理引擎写了一个函数check_collisions(),运行它需要 20 毫秒。每秒只能计算大约 50 个物理帧。想象一下现在你已经节省了 3 毫秒的执行时间,那已经是每秒 59 帧了。

可伸缩性是另一个需要考虑的重要因素。如果您的应用程序必须处理越来越多的数据,您最好选择一种能够在合理的时间内处理数据并且不需要过多内存的算法。

谈到数据,您是否针对您的具体问题使用了合适的类型和结构?你可以通过预先知道你正在处理的数据来节省大量的内存。例如,如果存储一个人的年龄,就不必使用 4 字节有符号整数。最好只使用一个无符号字节,因为年龄永远不会为负,也不会超过 255 年(单个字节中可以存储的最大数字)。

那么,如何比较不同算法的性能呢?这就是大 O 符号派上用场的地方。

什么是大 O 记数法?

来自维基百科,大 O 符号是一种数学符号,它描述了当自变量趋向某个特定值或无穷大时,函数的极限行为。在计算机科学中,大 O 符号用于根据算法的运行时间或空间需求如何随着输入大小的增长而增长来对算法进行分类。换句话说,它测量一个函数的时间空间复杂度。这意味着,我们可以提前知道算法在特定情况下的表现。

在开始编写代码之前,在计算算法的时间或空间复杂度时,需要遵循以下简单规则:

  1. 将你的算法分成单个操作或函数。
  2. 计算每个操作的复杂度。
  3. 把产生的大 Os 加起来。
  4. 移除任何常数和低阶项。只保留最高阶项(增长最快的项),这将是你的算法的大 O。

为了更清楚,让我们看一些具体的例子。对于代码示例,我将使用 Python,因为它有简单的类似英语的语法,任何人都可以理解。此外,我将重点关注时间复杂性,而不是空间复杂性,以保持文章更加简洁。无论如何,同样的规则也适用,所以对我来说详细谈论它似乎有点多余。

恒定时间复杂度

让我们从大 O 符号中的简单情况开始,恒定时间复杂度。看一下这段代码:

完成此计算所需的时间不取决于输入大小。如果数字是 2、60、100 或 1000,运行时间不会增加或减少,至少不会显著增加。使用大 O 符号将其分类为 O(1) ,意味着它具有恒定的时间复杂度。

这同样适用于这个代码片段。改变input_number不会影响算法的性能。所有运算之和是O(1+1+1+1+1+1)(6),但可以近似为刚好是 O(1) ,因为 6 是常数。当然,它的执行时间要比前一个例子长,但是大 O 并不测量完成某个任务所花费的精确时间。大 O 是关于衡量算法的性能变化与不断增长的输入大小的关系。

数学运算、赋值、逻辑语句和函数调用都近似于 O(1) ,除非它们的实现也依赖于输入大小。以下是被视为时间常数的常见操作列表:

  • 算术运算:a + b, a — b, a * b, a++ ...
  • 变量赋值:a = 2, a += 3, a -= 4 ...
  • 数组索引:a[0], a[i] ...其中a是一个数组,i是一个整数。
  • 函数调用:foo(), bar(arg) ...只要它们的运行时间不明显依赖于输入大小。
  • 逻辑语句:a && b, a and b, !a, not a, a || b, a or b ...
  • 成员访问:a.member, a.foo() ...
  • 按位运算:a << b, a | b, a & b, a >> b ...

哈希表也索引分数,平均起来,【O(1)像数组。尽管如此,在极少数情况下他们能达到 O(n)

迭代时间复杂度

假设您必须迭代数组中的每个元素,例如计算某个特定值出现的次数。

完成任务所需的时间取决于数组元素的数量n,准确地说是成正比的。这种算法的时间复杂度可以归为 O(n) ,意思是随着n的增加,运行时间线性增加。

我们可以忽略for循环中的if语句,因为它的时间复杂度 O(1) 并不强烈依赖于输入大小。注意,它的性能取决于要比较的字符串的长度,但它没有array的长度重要,因此可以忽略。请记住,大 O 是在输入大小趋于无穷大时给出算法行为的近似值,而不是精确的测量值。

不断嵌套迭代,指数时间复杂度

假设您必须多次迭代一个数组,例如计算长度为两个字符的所有可能的密码组合,并且只使用从 0 到 9 的数字。

这种算法的运行时间显然取决于可能的字符数。准确地说,它生成了 n 个组合,其中n是可能的字符数。如果再添加一个字符,程序将不得不在数组n上迭代更多次。这种方法的时间复杂度得分为 O(n )

如果您要添加更多的for循环来增加密码的长度,时间复杂度将是【o(nᶩ】,其中nfor循环的数量,l是可用字符的数量。比如三圈得分 O(n ) ,四圈得分【o(n⁴】等等。

语句combinations.append(char1 + char2)通常可以近似为时间复杂度为 O(1) ,尽管其运行时间也可能受到输入大小的影响,这取决于函数的实现。说到 Python 的列表,它们实际上是动态数组,所以它们必须随着增长而调整大小。反正这个话题不在本文讨论范围内,我就不多讲了。

在两个阵列上迭代,线性时间复杂度

假设您现在必须迭代两个数组,以找出它们有多少共同的元素。

该算法的时间要求还取决于要检查的元素的数量n。对于一个数组中的每个元素,它必须遍历所有其他数组。例如,如果我们向array1添加元素,程序将不得不再次迭代array2的每个元素。

由于迭代的总次数是第一个数组的长度乘以第二个数组的长度,将一个元素添加到一个数组中会使迭代次数增加另一个数组的长度,因为f(a,b) = a*b偏导数相对于ab,相对于ba。这个算法的大 O 符号应该是 O(ab)* ,但是通过将两个数组中的一个数组的长度视为常数,可以简化为 O(n)

如前所述,在计算时间复杂度时,可以忽略if语句和counter的增量,因为它们不依赖于输入大小。

嵌套迭代,指数时间复杂度

在给定可变密码长度的情况下,以下算法为给定的字符集生成所有可能的密码组合。

n为密码长度,k为可用字符的常量,该程序执行 nkⁿ* 迭代。这是因为对于外层for循环的每一次 kⁿ 迭代,n其他迭代由内层for循环执行。其他操作可以忽略。

迭代次数的导数 nkⁿ* 为 kⁿ+kⁿnlog(k) ,但可以近似为【o(nkⁿ】,常写成【o(n2ⁿ】**随着输入大小向无穷大增长。

对数时间复杂度

现在让我们来看一个非常流行的算法:二分搜索法。给定一个排序数组,它查找指定元素的索引(如果存在)。

二分搜索法的工作原理是在每次迭代中丢弃数组的一半。不管给定数组的大小如何,这种方法都减少了要快速搜索的元素。它在时间复杂度上得分为 O(log(n)) ,并且由于其对数运行时间,当涉及到大输入大小时,它非常有效。

阶乘时间复杂度

对于大 O 来说,最糟糕的情况之一是阶乘运行时。以这个简单的代码片段为例:

对于这个函数的每次迭代,factorial都会被调用多次。这个递归调用导致for循环被反复执行,直到number达到零。这种算法确实非常慢,尤其是在高输入数的情况下。这个函数的时间复杂度是 O(n!)T6。

如何选择合适的算法

当需要解决这个问题时,选择一个合适的算法是很重要的。显然,您应该选择尽可能低的时间复杂度,对吗?其实没那么容易。

根据输入大小和具体实现,an O(n) 甚至可能比 an O(1) 更快。看一下这张图表:

常见大 O 符号情况的图表。

从长远来看,较低的时间复杂度总是比较高的时间复杂度更有效。然而,如果你打算尽可能地优化你的程序,有一点你应该密切注意,一些性能线重叠。

常见大 O 符号情况的图表。

正如你所看到的,在某个阈值以下,这完全取决于情况,一些在大 O 中得分较低的算法实际上比其他在较大输入大小时可能做得更好的算法更有优势。这就是说,在跳上键盘之前,你应该首先深入分析和相关的环境。根据您必须处理的数据,您的算法的图表在这个级别可能会有所不同。

结论

总而言之,为了在这种情况下应用最有效的算法,充分了解您的问题和您的数据是很重要的。当计划构建一个应用程序时,您必须考虑随着用户群和数据的增长它将如何执行,并相应地调整您的代码。

不幸的是,没有适合所有目的和情况的工具。优化就是针对特定情况使用最合适的方法,而不是先坚持使用手头的方法。

即使你可以用锤子敲进一颗螺丝钉,你也可以用螺丝刀。

我希望你喜欢这篇文章。如果你有问题或者想补充什么,请在评论中分享你的想法。我想知道你的意见。

感谢阅读!

什么是云计算?将模型投入生产的关键

原文:https://towardsdatascience.com/what-is-cloud-computing-the-key-to-putting-models-into-production-4152c1d7a5f8?source=collection_archive---------18-----------------------

AWS、Azure、Hadoop、PySpark 等顶级云计算平台的细分。

天马

任何数据科学家的一项关键技能是能够编写生产质量的代码来创建模型将它们部署到云环境中。通常,使用云计算和数据架构属于数据工程师的工作。然而,每个数据专家都被期望成为通才,能够适应和扩展他们的项目

下面是我在几十个职位描述中看到的热门平台介绍。这并不意味着我们必须在一夜之间成为专家,但这有助于了解现有的服务。入门总是学习新技能的第一步。

大数据&云计算

尽管“大数据”最近已经成为一个时髦词,并引起了大企业的兴趣,但它通常很难定义。关于定义还没有明确的共识,但是“大数据”通常指的是增长到无法使用传统数据库管理系统和分析方法管理的数据集。这些数据集的大小超出了常用软件工具和存储系统在可容忍的运行时间内捕获、存储、管理和处理数据的能力。

当考虑大数据时,请记住 3 V:容量、多样性和速度。

  • :数据的大小
  • 多样性:数据的不同格式和类型,以及数据的不同用途和分析方式
  • 速度:数据变化的速度,或者说创建数据的频率

随着数据的发展,对更快、更高效地分析此类数据的需求也呈指数级增长。仅仅拥有大数据已经不足以做出高效的决策。因此,需要专门用于大数据分析的新工具和方法,以及存储和管理此类数据所需的架构

我们应该从哪里开始?

每个公司都有一个独特的技术堆栈,其中包含他们更喜欢用于其专有数据的软件。堆栈中的每个类别都有许多不同的平台。这些类别包括可视化和分析、计算、存储和分发以及数据仓库。有太多的平台无法计数,但我会仔细阅读我在最近的招聘信息中看到的流行的云计算服务。

公司可以从云服务提供商那里租用从应用程序到存储的任何东西,而不是拥有自己的计算基础设施或数据中心。这允许公司在使用时为他们使用的东西付费。与其处理维护自己的 IT 基础设施的成本和复杂性。简单来说,

云计算是按需交付计算服务——从应用程序到存储和处理能力——通常通过互联网,并以按需付费的方式进行。

虽然我不打算在这篇博客中深究细节,但重要的是要注意有三种云计算模式IaaS (基础设施即服务) PaaS (平台即服务) SaaS (软件即服务)。在这三种模式中, SaaS 是目前占主导地位且应用最广泛的云计算模式。

亚马逊网络服务(AWS)

AWS 提供数据库存储选项、计算能力、内容交付和联网等功能,以帮助组织扩大规模。您可以选择自己想要的解决方案,同时为自己消费的服务付费。像 AWS 这样的服务允许我们每分钟在这些服务器上租用时间,使得任何人都可以进行分布式培训。此外,AWS 服务器允许公司跨服务器集群使用 Hadoop 或 Spark 等大数据框架。

亚马逊还将所有主要的数据科学服务集中在亚马逊 SageMaker 内部。SageMaker 提供了许多服务,如数据标签、基于云的笔记本、培训、模型调整和推理。我们可以建立自己的模型,或者使用 AWS 提供的现有模型。类似地,我们可以设置自己的推理端点,或者利用 AWS 创建的预先存在的端点。创建一个端点需要我们使用一个 Docker 实例。幸运的是,为我们自己的模型创建端点所需的大部分工作都是样板文件,我们可以在多个项目中反复使用它。

AWS 目前支持 2000 多个政府机构和 5000 个教育机构。此外,它还是全球四大公共云计算公司之一。好处包括易用性、多样化的工具阵列、无限的服务器容量、可靠的加密和安全性、加上可负担性。但是,一些缺点是 AWS 的一些资源受到地区的限制。它也受到许多其他云计算平台面临的问题的影响。有人担心备份保护、数据泄露风险、隐私问题有限控制。****

微软 Azure

微软 Azure,通常被称为 Azure ,是由微软创建的云计算服务,用于通过微软管理的数据中心来构建、测试、部署和管理应用和服务。该平台非常注重安全性,确立了其在 IaaS 安全性方面的领先地位。此外,作为云计算服务,它是高度可扩展的,同时价格合理。

和任何事情一样,微软 Azure 也有一些潜在的缺点。与最终用户消费信息的 SaaS 平台不同,IaaS 平台,如 Azure,将企业的计算能力从数据中心或办公室转移到。与大多数云服务提供商一样, Azure 需要专业的管理和维护,包括补丁和服务器监控

谷歌云平台(GCP)

就像 AWS 和 Azure 一样,GCP 是由谷歌提供的一套公共云计算服务。该平台包括一系列在谷歌硬件上运行的计算、存储和应用开发托管服务。

GCP 与 AWS 强有力竞争的一些领域包括实例和支付可配置性、隐私和流量安全、成本效益和机器学习能力。GCP 还提供几个现成的与计算机视觉、自然语言处理和翻译相关的 API。机器学习工程师可以基于谷歌的云机器学习引擎开源的 TensorFlow 深度学习库来构建模型。

尽管这个竞争对手有优势,但也有一些不利因素。像 BigQuery、Spanner、Datastore 这样的核心 GCP 产品很棒,但是非常偏向于有限的定制和可观察性。此外,可用的文档有限,并且有传言称 GCP 的客户服务总体上没有回应

Hadoop

Hadoop 是一个分布式计算系统和环境,适用于计算机集群上的超大型数据集。它为任何类型的数据提供大容量存储、巨大的处理能力以及处理几乎无限的并发任务或工作的能力。这个生态系统也利用了 MapReduce。

MapReduce 是 Hadoop 框架内的一种编程模型或模式,用于访问存储在 Hadoop 文件系统(HDFS)中的大数据。MapReduce 作业通常将输入数据集分割成独立的块,由地图任务以完全并行的方式进行处理。该框架对映射的输出进行排序,然后输入到 reduce 任务中。通常,作业的输入和输出都存储在文件系统中。

Hadoop 和 MapReduce 允许任务被划分,而不是仅仅使用一个系统来执行任务。任务被分成许多子任务,它们被单独解决,然后重新组合成最终结果

虽然 Hadoop 是开源的,并且使用了一种经济高效的可扩展模型,但它主要是为处理大型数据集而设计的。处理少量数据时,平台效率下降。此外,Hadoop 作业大多是用 Java 编写的,如果没有这种语言的专业知识,这可能会很麻烦,而且容易出错。

PySpark

PySpark 是在 Python 编程语言中用于 Apache Spark 的接口。它不仅允许您使用 Python APIs 编写 Spark 应用程序,还提供 PySpark shell,用于在分布式环境中交互分析您的数据。PySpark 支持 Spark 的大部分功能,如 Spark SQL、DataFrame、Streaming、MLlib(机器学习)和 Spark Core。

PySpark 的一些优点是,一些 Spark 作业在内存方面可以比传统的 MapReduce 快 100 倍。它还允许更高级别的查询语言在 MapReduce 之上实现类似 SQL 的语义。此外,PySpark APIs 类似于 Python 的 PandasScikit-Learn

最初的 Apache Spark 服务是用 Scala 编写的,这是一种受大数据开发者欢迎的编程语言,因为它在 JVM (Java 虚拟机)上的可伸缩性。不幸的是,Python 总体上比 Scala 慢,效率也低。此外,与 Spark 相比,PySpark 还不成熟,无法在大多数项目中使用 Spark 的内部功能。

选择合适的服务

如果没有云计算,数据科学家和机器学习工程师将不可能训练当今存在的一些更大的深度学习模型。

有大量的云计算服务可供选择,但选择正确的服务取决于安全问题、软件依赖性、可管理性、客户服务支持等因素。

每个雇主最有可能有一个他们在公司范围内用于专有数据的首选技术堆栈。在那之前,网上有很多资源可以帮助你增加云计算知识。你也可以去每个供应商的网站,广泛阅读他们提供的服务。最后,需要注意的是,对于任何数据科学技能,没有比亲自动手实践个人项目更好的学习方法了。

什么是加密数据?

原文:https://towardsdatascience.com/what-is-crypto-data-fef70ecadf7b?source=collection_archive---------4-----------------------

数据科学从业者实用指南

美国宇航局在 Unsplash 拍摄的照片

在我的上一篇帖子中,我认为随着越来越多的消费者加密应用获得关注,越来越多的公开加密数据将从根本上改变下一代产品的竞争和运营方式。有效利用数据资产对于实现这一未来至关重要,而数据科学将发挥关键作用。在这篇文章中,我想提供更多关于加密数据的背景知识——它们在加密应用程序中代表什么,它们看起来像什么,以及如何使用它们[1]。如果你还没有阅读我的上一篇文章,请考虑这样做,因为它将为这篇文章提供有用的背景。

Web 2.0 -> Web 3.0

在深入研究数据之前,了解一下分散式加密(有时称为 web 3.0)应用程序是什么样子以及它与 web 2.0 应用程序有什么不同是很有用的。在传统的 web 2.0 应用程序中,用户通过浏览器与应用程序前端进行交互。前端将用户请求翻译成对后端 API 的查询。后端执行必要的计算来满足请求,并将相关数据保存到存储中。

Web 2.0 与 web 3.0 架构的对比—作者图片

在 web 3.0 应用程序中,前端或多或少以相同的方式工作,增加了软件钱包的要求,该软件钱包有助于向区块链网络唯一地标识用户。然而,后端服务器被一个功能类似于分布式虚拟机的分散式区块链网络所取代。用高级语言如 Solidity 编写的智能合同存在于这个虚拟机上,充当后端 API。借助区块链网络上的节点(通常通过节点即服务提供商访问),前端以事务的形式向这些智能合约广播用户请求,智能合约在虚拟机上执行调用的逻辑。完成后,交易细节和状态变化以可加密验证的方式保存在区块链分类帐中。

在一个公认的简化视图中,人们可以将区块链虚拟机视为后端服务器,智能合约视为后端 API,区块链总账视为存储[2]。然而,在 Web 3.0 架构中有两个关键的区别值得强调

  1. 与传统的后端 API 不同,智能合约是分散的,可以公开访问。网络上的任何人都可以看到代码,并在其上构建新的智能合约或前端。没有哪家公司能像脸书那样控制对智能合约的访问。这有时被称为智能契约的可组合性。
  2. 每一个后端 API 调用(即交易)都以可验证和有效不变的方式发布在区块链账本上。每个事务记录都包含关于特定请求和结果状态变化的详细元数据。这种级别的透明性代表了 web 2.0 应用程序的范式转变,也是加密数据如此引人注目的原因。

交易的剖析

事务对于加密应用程序的工作方式和创建的数据至关重要,因此准确定义它们的工作方式非常重要。在更广泛的区块链网络环境中,事务是改变区块链虚拟机状态的原子活动单元。有 3 种不同类型的交易:

  1. 一个外部拥有的账户(EOA)以基础货币形式向另一个账户转移价值,例如 Emily 在以太网上向 Bob 3 ETH 汇款
  2. 由 EOA 创建智能合约,例如,Emily 向区块链上的地址提交代码,创建智能合约,使用户能够与 BTC 交换 ETH
  3. 通过 EOA 调用智能合约,例如,鲍勃调用艾米丽的智能合约以用 15 个以太网交换 1 个 BTC

所有交易必须由外部拥有的账户(EOA)发起,该账户是唯一的区块链地址,由私钥控制。这通常代表人类用户,但有时也可能是机器人。智能合约一旦创建,也只是拥有唯一区块链地址的账户。智能合约帐户和 EOA 之间的唯一区别在于,智能合约帐户由合约代码控制,而不是由私钥控制。

交易的一个显著特点是,它们需要向网络(或者更准确地说是矿工节点)支付称为天然气费的费用。对于区块链网络上的气体,一个有用的类比是实际的汽油。正如汽车需要汽油作为动力一样,区块链网络也需要汽油来运行代码。汽油的数量是以公升等体积单位来衡量的,而单位价格是以美元等法定货币来衡量的。以太坊气是以称为气的数量单位来计量的,而每单位的价格是以卫来计量的,这是以太坊的 1/10^18th。当发起交易时,EOA 必须指定它愿意为执行交易向网络支付的天然气量。如果指定的数量不足,则事务将失败,所有分段状态更改将被还原。这有两个主要功能

  1. 激励 miner 节点参与并在网络上运行代码。天然气价格根据计算能力的供应和需求而波动,类似于乘车共享中的激增定价概念
  2. 打消那些想要向网络发送垃圾邮件的不良分子的动机

当用户在加密应用程序中发出请求时,会发生以下情况:

  1. 与用户相关联的 EOA 发起指定目标智能合同地址、目标功能、该功能的自变量、交易支付(如果有的话)以及它愿意支付的燃气费的交易
  2. 交易被广播到网络,并由执行目标智能合约中的指定功能的有意愿的矿工拾取
  3. 如果执行成功,智能协定将发出标志着某些里程碑完成的事件。由此产生的事件数据结构称为日志
  4. 目标智能合约可以启动对其他智能合约的内部事务(附加调用)。这些内部事务创建称为跟踪的数据结构,并且还可能在它们各自的执行过程中发出额外的日志事件。

智能合同交易-作者图片

为了更具体地说明这一点,让我们仔细看看在 Opensea 交易所智能合约上购买无聊猿 NFT 的交易示例

一笔交易以 40.4 ETH(约 14.4 万美元)的价格购买了一只无聊的猿 NFT——图片由作者提供

在此交易中:

  1. 买方 EOA 通过调用 Opensea 交易所智能合约中的atomicMatch_函数来启动交易
  2. 交换合同验证订单出价与卖方的要价相匹配,然后发出表示订单被确认的OrderMatched事件
  3. 交换合同启动 Bored Ape NFT 合同的内部交易,将 NFT 从卖方转移到买方,交易完成后,该交易又发出一个Approval和一个Transfer事件
  4. 交换合同然后启动另一个内部交易,以将由买方 EOA 在启动原始交易时支付的资金转移到卖方 EOA

在此序列完成后,事务处理、内部事务处理的跟踪以及事件的日志都将保存到区块链分类帐中。正如这个例子所希望阐明的那样,来自交易的数据耗尽提供了关于加密应用程序内部工作方式及其促进的经济活动的非常精细的细节。

数据结构

现在我们已经了解了加密应用程序创建的数据元素,以及它们在现实中代表的内容,让我们来看看这些数据是什么样子的。事务和跟踪数据结构包含智能合约函数调用的细节,特别是

  • hash:交易的唯一标识
  • from_address:起始 EOA 地址
  • to_address:目标智能合约地址
  • input:目标函数和该函数参数的十六进制编码表示
  • value:交易价值或付款

示例交易

**hash**: 0xfdf4e500eeefa5b12d773fb74d55c4bbfc92a4297cddc8f85b937978a3fc6477**nonce**: 232**transaction_index**: 19**from_address**: 0xfc7396fc573e916dc0d7203b0f087ffc46882c17**to_address**: 0x7be8076f4ea4a4ad08075c2508e481d6c946d12b**value**: 0E-9**gas**: 74902**gas_price**: 52545827339**input**: 0xa8a41c700000000000000000000000007be8076f4ea4a4ad08075c2508e481d6c946d12b000000000000000000000000fc7396fc573e916dc0d7203b0f087ffc46882c170…**receipt_cumulative_gas_used**: 1242267**receipt_gas_used**: 74902**receipt_contract_address**: None**receipt_root**: None**receipt_status**: 1**block_timestamp**: 2021–08–10 04:18:55**block_number**: 12995203**block_hash**: 0x7ca2ff7158d7a40997a5230e39f8d96ad17cf59ced6b27a3288653f9c94ce7a3**max_fee_per_gas**: None**max_priority_fee_per_gas**: None**transaction_type**: None**receipt_effective_gas_price**: 52545827339

日志数据结构包含在执行智能合同功能期间发出的事件的细节,特别是

  • transaction_hash:事件所属事务的 ID
  • address:发出事件的智能合约的地址
  • topics:发出事件的函数
  • data:事件元数据

示例日志

**log_index**: 260**transaction_hash**: 0x2ac3648d5a0a7c1dd58685fabb5c5602add36f1555b1001cb900ea0410ab23db**transaction_index**: 131**address**: 0xff64cb7ba5717a10dabc4be3a41acd2c2f95ee22**data**: 0x000000000000000000000000000000000000000000054e0ee097e3dbdbde51b2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d65da6b52d881dd**topics**: [‘0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822’,‘0x00000000000000000000000003f7724180aa6b939894b5ca4314783b0b36b329’,‘0x000000000000000000000000e83df6e24de6d5d263f78ad281143f184a6c95eb’]**block_timestamp**: 2021–08–04 06:40:42**block_number**: 12957113**block_hash**: 0x3ea06d9b495dffb2804a5f62ee0182949afac9f82d6ba922567fa3a95efc3d86

敏锐的读者会注意到,许多长十六进制的领域对人类并不友好。为了解析出编码信息,我们需要使用一种叫做应用程序二进制接口的东西来解码这些信息。我将在下一篇文章中详细讨论这个问题。

用于访问和使用加密数据的工具

既然我们已经很好地理解了加密数据代表什么以及它看起来像什么,那么我们实际上如何访问和使用它呢?幸运的是,有一系列很好的工具可以帮助我们做到这一点。

块浏览器

块浏览器是在给定区块链上检查单个事务细节的绝佳资源。block explorers 的创建者已经提取并索引了整个区块链分类账,并创建了快速网络界面来帮助用户轻松查找任何交易。请看下面的截图示例。所有主要的区块链都有探险者——突出的例子包括以太扫描多边形扫描BSCScan索拉纳海滩

以太网扫描上的交易示例 —图片来自以太网扫描. io

虽然块浏览器非常适合询问区块链分类帐中的单个记录,但它们不适合回答需要聚合或转换数据的问题。例如,如果您想知道在过去 3 个月中有多少 NFT 通过 Opensea 交易所售出,那么仅用 block explorers 很难回答这个问题。为此,您需要直接访问数据。

获取数据

直接访问数据的一种方法是自己查询区块链。Python 和 Javascript 中提供了各种开源实用程序包来帮助简化这一过程。例如

  • 对于以太坊区块链和 EVM 兼容链,如 Polygon 和 BSC,您可以使用 Web3 包
  • 对于索拉纳,你可以使用索拉纳 Py

使用这些实用程序库,您将能够以编程方式与感兴趣的区块链进行交互,以查询数据、提交事务,甚至部署智能合同。

也有一些开源项目将上述构件打包成完整的 ETL 管道,帮助您将所有粒度数据下载到自己的环境中。此外,这些项目的所有者还将许多原始数据集发布到 Google cloud 上的公共数据集,Google cloud 提供了一个相对易用的 SQL 接口来查询数据。

以太坊上的谷歌公共数据集——谷歌大查询

最后但同样重要的是, Dune analytics 是访问和分析区块链数据的另一个重要资源。在撰写本文时,它同时拥有以太坊、多边形、乐观和 BSC 的原始数据和解码数据。与 Google 上的公共数据集相比,这是一个非常不同的产品,因为解码使得十六进制编码的数据字段可读。它提供了一个 Postgres 界面来查询数据集,并提供了一个简单的点击界面来在查询结果上创建简单的仪表板。Dune 上的用户社区也非常活跃,并且已经生成了大量可供学习的示例查询和仪表盘库。这里有几个我在 Dune 上创建的例子分析

关键要点

  • 加密数据是 web 3.0 应用程序架构的废气
  • 它包含加密应用程序中所有“后端 API 调用”的完整历史,以事务、日志和跟踪的形式
  • 这些数据结构包含用户请求和应用程序状态变化的粒度细节
  • 有各种免费的工具可以帮助我们访问和分析这个数据宝库

希望这是一个有用的讨论,我已经帮助你对什么是加密数据,它看起来像什么以及如何使用它有了更好的直觉。在我的下一篇文章中,我将提供一个关于如何解码加密数据并使它们更易于阅读的教程,作为对 Opensea 和 Uniswap 等流行加密应用程序进行更深入研究的前奏。如果你想在帖子发布时得到通知,请务必点击电子邮件图标进行订阅。

感谢您的阅读,如果您有任何问题或意见,请随时联系我们。Twitter|Linkedin

[1]本次讨论将使用以太坊区块链作为主要参考架构。具体情况可能会有所不同的其他区块链一样,索拉纳,但许多概念将普遍。

[2]这是一个 web 3.0 应用程序的简化示意图,它掩盖了一些实现细节。为了更彻底的回顾,鼓励用户研究这个优秀的深潜

编程中的 Currying 是什么?

原文:https://towardsdatascience.com/what-is-currying-in-programming-56fd57103431?source=collection_archive---------4-----------------------

用奉承给你的代码增添情趣

照片由凌敏Unsplash 上拍摄

在学习函数式编程时,我发现了许多新概念,比如纯函数、高阶函数和 currying。奉承真的引起了我的注意,我很惊讶我从来没有听说过它。

在本文中,我将尝试解释 currying 的概念、它的用例,以及如何用 JavaScript 和 Python 实现它。

什么是 Currying?

首先,让我澄清一些事情。 库里这个词来源于数学家**哈斯克尔库里*** 的名字,而不是香料。很好。*

Currying 是将具有多个参数的函数转换成一系列单参数函数。这意味着将一个像这样的函数转换成一个像这样的函数。

如果你知道 Python 的functools.partial,那么这个和它很像。这等同于对所有参数连续应用偏导数。

例子

如果我们考虑以下函数:

我们可以通过给它传递两个参数来调用它:

这个函数的“简化”版本是这样调用的:

我们可以这样从头定义它:

我们甚至可以做一个很棒的一句俏皮话:

这相当于:

或者我们可以使用函数包装器:

但是我们为什么要这么做呢?

奉承在许多情况下都很方便。它可以帮助代码更加易读和简洁。

示例 1:频繁的函数调用

当你需要频繁调用一个带有固定参数的函数时,Currying 是很有用的。

例如,考虑下面的函数:

如果我们想要定义函数errorwarninfo,对于每种类型,我们有两个选项。

Currying 提供了一个更短、更简洁、可读性更强的解决方案。

示例#2:累积和

假设我们想得到一个数组的累加和。

***input:**  [5, 23, 6, 8, 34]
**output:** [5, 28, 34, 42, 76]*

使用 curry,我们可以使用带有 curry 函数的map方法。

cumSum(sum)value加到sum上并返回。为了更好地理解这是如何工作的,让我们将它分解到每一个呼叫。在cumSum(0)调用之后,sum的值(为 0)被更改为5。在调用数组中的第二项时,使用cumSum(5),依此类推。

在这个例子中,cumSum 是一个可定制的函数。

如何实现任何功能

涂抹包装纸

这是一个 curry 包装器,它将func转换成一个curred函数。**

这个包装器的工作方式很简单。curried功能有两种情况。

  1. 如果args.length >= func.length:传递的参数个数大于或等于func的参数个数。在这种情况下,我们只调用带有参数的func
  2. 否则,递归地返回一个调用curried函数的新函数,同时连接传递的参数和它的参数。

这个定义的一个副作用是可以不依赖或部分依赖地使用函数。以下调用都是有效的:

这是类固醇上的偏激

Lodash 和下划线

如果你用lodashunderscore工作,那么涂抹很容易使用。简单用_.curry(func)。仅此而已。它们也支持上面例子中的部分 currying。

Python 中的 Currying

我们可以用 Python 定义一个curry包装器。

并把它作为一个装饰。

虽然奉承在很多情况下是有帮助的,但是注意它的局限性是很重要的。在上面的实现中,currying 要求函数有固定数量的参数。这在某些情况下可能是个问题。

Currying 只是函数式编程的一个概念。你可能会对其他概念感兴趣,比如纯函数和高阶函数(包括 currying)。

大多数机器学习和数据科学库大量使用面向对象编程,我认为数据科学家尝试函数式编程会很有趣。函数式编程有助于代码的可维护性和组织,并使并行化成为世界上最容易的事情。

什么是 Dask,它是如何工作的?

原文:https://towardsdatascience.com/what-is-dask-and-how-does-it-work-aa99770a31cf?source=collection_archive---------29-----------------------

作者原创作品

Dask 是一个开源的 Python 库,它可以让你在任意大的数据集上工作,并显著提高你的计算速度。

本文将首先说明 Dask 的特殊之处,然后更详细地解释 Dask 是如何工作的。那么:是什么让达斯克与众不同?

  • 熟悉的界面
  • 需要时的灵活性
  • Python 一直往下

熟悉的界面

达斯克没有多此一举。

Python 拥有丰富的数据科学库生态系统,包括数组的 numpy、数据帧的 pandas、nd-data 的 xarray 和机器学习的 scikit-learn。Dask 匹配那些库。

这意味着:

  • 你不必学习一组新的参数来传递给read_csv
  • 开始使用 Dask 时,您不必进行大规模的代码重组。

需要时的灵活性

有时,您的数据不能整齐地放入数据帧或数组中。或者可能你已经写了一整段管道,你只是想让它更快。这就是dask.delayed的作用。用dask.delayed装饰器包装任何函数,它将并行运行。

Python 一直往下

这个很简单。Dask 是用 Python 写的,为想用 Python 写和用 Python 排错的人运行 Python。

它是如何工作的?

有三个主要部分组合在一起,让 Dask 以最少的工作量有效地运行分布式代码。

  • 逐块算法在数据碎片上并行运行
  • 任务图组织任务并实现优化
  • 调度器决定潜在的多节点集群中的哪个工作者获得哪个任务。

分块算法

Dask 数组可能看起来像 numpy,Dask 数据帧可能看起来像熊猫,但是每个方法的实际实现都被重写以并行工作。这意味着:

  • 您的数据不一定要放入内存。
  • 你可以同时操作它的不同部分——这样更快。

它是如何工作的

在内部,Dask 数组是一组特定模式的 numpy 数组。Dask 实现了分块操作,因此 Dask 可以单独处理每个数据块,然后将结果组合起来。

让我们考虑一个 4x4 的数组,从 1 到 16,分成 4 个 2x2 的块。

当您获取数组的总和(a.sum())时,Dask 首先获取每个块的总和,只有在每个块都完成之后,才获取每个块的结果总和。

从区块到组合再到聚合的数据聚合的表示

通过让每个工人分别做一道算术题,然后最后合并,Dask 的运算速度比只有一个工人独自完成的情况快了大约 4 倍。

任务图

除非你告诉它,否则 Dask 不会做任何事情——它很懒。

当你在一个 Dask 对象上调用方法——比如a.sum()——时,Dask 所做的只是构造一个图。调用.compute()使 Dask 开始处理图表。

等到你真正需要答案的时候,Dask 就有机会优化图表。所以 Dask 只需要读取需要的数据就可以得到你想要的结果。由于懒惰,达斯克做的工作越来越少!这通常比 Dask 必须在调用原始函数时进行所有计算要快。

它是如何工作的

每个块上的每个操作都表示为一个任务。这些任务连接在一起形成一个图表,这样每个任务在运行之前都知道必须发生什么。

这是上面描述的a.sum()操作的任务图。

使用 a.sum()用 graphviz 创建的任务图形绘制。visualize()

Dask 通过向图中添加层来将操作串在一起。该图被表示为一个类似 dict 的对象,其中每个节点包含一个到其依赖项的链接。

在计算图表之前,有一个优化步骤,可以将许多任务合并成一个任务(fuse,丢弃不再需要的任务(cull)。您甚至可以定义自己的自定义优化。

调度程序决定谁得到什么

按需分配……—卡尔·马克思

触发任务图上的计算告诉 Dask 将图发送给调度器。在那里,每个任务被分配给一个工人。根据您的设置,您的个人电脑上可能有 4 名员工,或者您的 HPC 系统或云上可能有 40 名员工。调度程序试图最小化数据传输,最大化每个工作人员的利用率。

这是调度程序(这里显示为紫色)向每个工人(显示为橙色和黄色)发送a.sum()操作的样子。

dask dashboard 中的集群图—在 4 个工作集群上运行“a.sum()”。

由于有 4 个工人,每个块上的sum并行发生。这是最终让 Dask 如此快速的原因。每个工作人员每次只需要接收一小部分数据,并且可以在其他工作人员处理其他数据时对其进行操作。

至关重要的是,这意味着任何一个工作线程都不会读取整个数据集。因此,您的数据可以任意大,但仍有可能使用它。

结论

有时你的数据是一个合理的大小,你可以愉快地使用普通的 numpy 和 pandas。其他时候不是,你也不能。这就是达斯克的用武之地。

在 dask.org 了解更多信息。

免责声明:我在 土星云 工作,为 Dask 的维护做贡献。其他公司也参与维护 Dask,包括 Anaconda、Capital One、Coiled、Nvidia、Prefect 和 Quansight。

原载于 2021 年 4 月 27 日https://www . Saturn cloud . io

什么是数据浓缩?

原文:https://towardsdatascience.com/what-is-data-condensation-8a8ef75bf053?source=collection_archive---------29-----------------------

入门

小的合成数据集足以训练模型。

AJ JeanUnsplash 上的照片

数据高效学习的主题是数据科学中的一个重要主题,也是一个活跃的研究领域。在大数据上训练大型模型可能需要大量的时间和资源,因此问题是我们能否用较小的数据集替换大型数据集,而较小的数据集仍然包含来自大型数据集的所有有用信息,使我们能够在这个小型数据集上训练模型,这将在真实数据上很好地推广。这里我们想要的是从大数据集中提取一个包含大部分信息的小数据集。

一个显而易见的方法是从现有数据中选择例子。这种方法的问题是,信息通常分散在多个示例中,因此很难或不可能选择这样的示例来让模型根据它们进行训练,并根据看不见的数据进行归纳。另一种方法是学习数据所在的流形。然后你可以通过从这个流形上取样来生成数据。这种方法是困难的,因为我们正在讨论多维空间(对于计算机视觉来说,这是宽度乘以高度乘以 3),在多维空间上流形学习是困难的。

如果我们可以生成不在流形上的信息丰富的示例,但仍然能够使基于这些示例训练的模型在真实数据上很好地推广,会怎么样?这种方法首先在《数据集提炼》一文中进行了探讨:

数据提取这一名称是对知识蒸馏一个引用,它是一种教授小型学生模型和大型教师模型的方法。我将在本文中回顾的一篇论文中对这种方法进行了改进:

这篇论文被 ICLR 2021 会议接受:

来源:https://arxiv.org/abs/2006.05929

这些论文的主要思想是生成合成数据集,然后在合成数据上训练模型,并确保模型在真实数据上概括。生成合成数据的过程让我想起了生成白盒模型的对立示例:反向传播错误,但对输入层而不是模型参数应用调整。

来源:https://arxiv.org/abs/2006.05929

为了生成良好的合成数据,我们需要解决一个具有双重目标的任务:确保基于合成数据训练的模型能够推广到真实数据。这可以表示为几个等式:

来源:https://arxiv.org/abs/2006.05929

这里 T 表示训练集,S 表示合成集。右边的方程是神经网络对合成数据的训练过程,左边的方程表示我们对合成数据训练的模型也最小化了训练数据的损失函数。

天真的方法是嵌套循环,效率非常低。为了帮助训练过程的收敛,建议 S 模型的权重接近 T 模型的权重(假设两个模型的架构相同)。这是上述左侧等式的一个充分条件。如果在参数空间中定义度量 D(),那么训练任务将变成:

来源:https://arxiv.org/abs/2006.05929

这个条件要求两个网络具有相同的初始参数θ0。为了确保合成数据集可以与具有任何参数初始化的神经网络一起工作,我们可以对初始参数θ0 的所有可能值的距离进行平均,或者更精确地说,最小化相对于初始权重θ0 的分布的期望距离 D。

来源:https://arxiv.org/abs/2006.05929

另一个收敛改进是在优化过程中不仅最小化最终权重的期望距离,而且最小化权重的一些中间值:

来源:https://arxiv.org/abs/2006.05929

这里,opt-alg 可以是 SGD、Adam 或任何其他有效的优化算法,ς是步骤的数量,t 是迭代的数量。这种方法有时被称为课程学习,其中教师网络指导学生网络实现匹配的性能。

最后,为了最小化两个网络的参数之间的距离,在每次迭代中最小化梯度之间的距离就足够了:

来源:https://arxiv.org/abs/2006.05929

因此标题中的渐变匹配。并且我们可以在网络训练过程中计算梯度。

所以整个算法可以总结如下:

来源:https://arxiv.org/abs/2006.05929

让我来解释一下这个算法。第 1 行说合成的例子最初只是噪音。通过从初始权重的分布中抽取大小为 K 的样本来估计期望值。内环有 T 个步骤,在每个步骤上,我们计算 T 和 S 及其梯度的损失函数,使用优化算法更新合成数据和模型参数。所提出的距离函数是基于分层余弦相似性的度量:

来源:https://arxiv.org/abs/2006.05929

来源:https://arxiv.org/abs/2006.05929

实验结果

这里一个有趣的问题是信息合成数据集的最小大小是多少。成效显著!例如,在每类只有一个样本的 MNIST 数据集上,他们可以达到 91.7%的准确率!所以大部分信息可以被压缩到每个类的一张图片中!其他结果也令人印象深刻,只要每类有 10 张图像,他们就可以获得相当好的模型性能。作者还发现,使用合成图像,他们可以成功地训练一个不同架构的神经网络。例如,在 AlexNet 上生成的合成数据可以用于训练 ResNet 模型,该模型将正确地对真实图像进行分类。

这是理论玩具吗?

一个问题可能是我们为什么需要它?因为无论如何,为了生成合成数据集,我们需要在所有数据上训练一个模型(以便能够进行梯度匹配)。所以问题是:这种方法能有任何实际应用吗?

这种方法的一个应用是持续学习。持续学习的目标是在几个不同的任务上连续训练模型。持续学习的主要问题是灾难性遗忘:当模型在接受任务训练时,会忘记所有之前的任务,这意味着模型在所有之前的任务中的准确性都会下降。

对持续学习的一个很好的类比就是我们的大脑是如何处理信息的。当我们经历新的事物时,我们将新的经验与先前的经验进行比较,并基于新的经验和先前的经验更新我们的世界模型。我们不必再次经历所有先前的经历。必要时,我们的大脑会产生过去经历的浓缩记忆,这使得在不忘记先前经历的情况下基于新的经历进行学习变得容易。因此,我们的头脑总是在一种生成模式下工作。以类似的方式,为了使持续学习成功,我们可以使用浓缩的合成数据作为一种手段来帮助模型学习新任务,而不会忘记以前的任务。

数据压缩的另一个应用是用于神经架构搜索,并且通常用于模型选择。如果您可以在小得多的合成集上训练模型,则可以节省时间和资源,为每个候选架构和超参数组合在整个训练数据集上重新运行训练。

结论

我经常看重大会议上接受的论文,以跟上研究。这仍然是很多信息,但比试图在 arxiv 中找到一些有趣的东西要好。我在本文中回顾的论文是关于我一直感兴趣的主题,特别是作为对持续学习过程的帮助。我认为有许多数据压缩领域可以进一步探索。例如,该方法对对抗性攻击有多敏感。合成数据是否会包含敌对信息,并导致经过训练的模型做出敌对预测?如果数据包含偏见(性别、种族等)怎么办?)?合成数据会放大偏倚还是减小偏倚?这种方法可以用作隐私保护机制吗?此外,该技术能否应用于计算机视觉领域之外,例如,表格数据?既然表格数据通常是有噪声的,那么合成数据如何处理这个问题呢?

最后,本文没有官方源代码。算法和实验都描述得很好,所以这是一个邀请写算法的非官方实现。

从网站和 API 收集 CSV、JSON、XML 和 SQL 格式数据的指南

原文:https://towardsdatascience.com/what-is-data-extraction-python-review-of-json-xml-apis-sql-and-csv-formats-a5470afc27b6?source=collection_archive---------12-----------------------

关于如何为您的数据科学和机器学习投资组合收集不同格式数据集的指南

图片由 Gerd AltmannPixabay 拍摄

数据收集和提取包括从不同来源提取数据,并将其转换为有用的格式,以便进一步处理或分析。它是数据工程过程中提取-转换-加载管道( ETL )的第一步。

作为一名数据科学家,您可能需要组合多种文件格式的数据,如 JSON、XML、CSV 和 SQL。

在本教程中,我们将使用 python 库,如 pandas、JSON 和 requests 来读取不同来源的数据,并将它们作为 pandas 数据帧加载到 Jupyter 笔记本中。

1.CSV 文件

这指的是“逗号分隔值”文件,用于以表格格式存储数据,类似于电子表格。文件中的每一行都是一个观察(或记录),每个记录都有一个或多个用逗号分隔的属性。

文本编辑器中 csv 文件的图像

通常,但不总是,第一行代表特性(列)名称。

我们将从 data.gov 网站下载数学成绩数据并保存在我们的工作目录中。推出新的 Jupyter 笔记本。

在我们从数据中创建熊猫数据帧之前,首先使用 python 的内置读取库来查看文件是很重要的。下面的代码显示了下载文件的前 5 行。

需要注意的事项:

  • 如果第一行包含列名,使用不带附加参数的pd.read_csv(file),这假定第一行包含列标题。如果没有,我们就用pd.read_csv(file, header=None)。在这里,Pandas 为您创建了索引列名,您可以稍后使用df.columns = <list_of_names>添加名称。
  • 如果顶部有任何空行,我们需要使用pd.read_csv(file, skip_rows=n)跳过它们。

下面的代码直接从网站下载文件并创建一个熊猫数据框架。

file_link = '[https://data.cityofnewyork.us/api/views/7yig-nj52/rows.csv'](https://data.cityofnewyork.us/api/views/7yig-nj52/rows.csv')
df_csv = pd.read_csv(file_link)

2.XML 数据

可扩展标记语言,简称 XML,是一种与 HTML 非常相似的标记语言。您可以识别 XML 格式的数据,因为它是由特定于数据的唯一标签标记的,不像 HTML 的预定义标签。

我们将继续使用来自 data.gov 网站的数学结果数据,该网站提供了一个下载 XML 格式数据的选项。

在 Jupyter 笔记本中运行下面的代码将打印前 20 行。

代码编辑器上 XML 文件的图像

为了提取 XML 数据,我们使用一个名为 BeautifulSoup 的 python 库。要安装 BeautifulSoup,请将下面的代码粘贴到 Jupyter 笔记本中。

!pip install bs4

然后导入库,打开文件并将其内容加载到 BeautifulSoup 中。

from bs4 import BeautifulSoupwith open("math results.xml") as f:
    soup = BeautifulSoup(f, "lxml")

从收集的 XML 数据中,我们将使用 BeautifulSoup 的find_all()方法,该方法将标签作为列表返回。

作者查找全部的图片

对于我们的例子,感兴趣的标签是‘district’, ‘grade’, ‘number_tested’, and ‘mean_scale_score’.

然后我们将遍历这些行,对于每个标记,使用get_text方法检索其中的值。

名为“数据”的列表代表我们所有的记录。

按作者排列的前 5 条记录的图像

下一步是创建一个 pandas 数据框架,并传递将用于数据的列。

df_xml = pd.DataFrame(data, columns=['district', 'grade','number_tested', 'mean_scale_score'])

3.JSON 数据

JavaScript Object Notation,或称 JSON ,以字典风格的格式压缩数据。数学结果的 JSON 文件可以在这个链接中找到。下面是使用代码编辑器的文件截图。

作者的 json 文件截图

JSON 是在 XML 之后开发的,但是随着时间的推移,它变得越来越流行了。这两种格式经常用于通过 web APIs 发送数据,这将在下面的第 5 点中讨论。

Pandas 库提供了一种简单的方法来读取 JSON 文件;pd.read_json()。您可以根据数据的格式传递‘orient’选项。熊猫文档解释了‘orient’选项。

我们的 JSON 数据格式不同,pd.read_json()返回一个错误。它有很多元信息;920 行。实际数据从第 921 行开始。

作者 json 文件的折叠元和数据标签的图像

下图显示了使用记事本++ 代码编辑器的数据的截图。注意每行的前 8 个字段是没有用的。

我们将使用 json 库,它将 json 数据作为字典加载。

import jsonwith open('math results.json') as f:
    json_data = json.load(f)type(json_data)
###dict

在我们的例子中,将有两个字典条目;元数据和数据。因此,我们可以使用dict.get(key).获得数据信息

data = json_data.get('data')
data = [x[8:] for x in data]

下图显示了我们的数据列表。右图使用列表理解只返回每个列表中第 8 个元素的项目。

下一步是创建一个熊猫数据框架。根据我们对数据集的了解,我们将把列名作为参数传递。

4.SQL 数据库

结构化查询语言,或 SQL,使我们能够访问和操作数据库。您可以使用 Pandas 库从 SQL 文件和数据库中收集数据。这是通过打开数据库或运行 SQL 查询实现的。

根据数据库的类型,可以使用两个 python 库来建立连接; sqlite3 库或 sqlalchemy 库。

出于我们的目的,我们有一个 SQLite 数据库文件,其中包含我们一直在处理的数学结果。SQLite 为个人应用和设备提供本地数据存储。点击阅读更多关于何时使用 SQLite 的信息。因此,我们将使用 sqlite3 库。数据库文件只有一个表。

import sqlite3
import pandas as pd# connect to the database
conn = sqlite3.connect('maths_results.db')# run a query
data_sql = pd.read_sql('SELECT * FROM maths_results', conn)# display 5 rows
data_sql.head()

当使用大型客户端/服务器 SQL 数据库如 MySQL 和 PostgreSQL 时,使用 sqlalchemy 库。查看 SQLAlchemy 文档,了解如何加载不同的数据库,包括我们将使用以下代码实现的 SQLite

import pandas as pd
from sqlalchemy import create_engine#create a db engine
engine = create_engine('sqlite:///maths_results.db')#run query
df_sql = pd.read_sql("SELECT * FROM maths_results", engine)

5.使用 API 从 web 中提取数据

应用编程接口,或称 API,为脸书、威特、谷歌等公司提供了一种与用户共享数据的方式。这阻碍了构成法律灰色地带的网络抓取。

这些公司提供面向公众的 API 的网址,开发者可以从这些网址访问数据,并将其用于分析或创建自己的应用程序。有些在发送请求时需要登录凭证,而有些则是公开的。它们还提供了如何格式化 URL 请求的文档。

在本节中,我们将从世界银行数据目录中提取数据。该网站不需要登录凭据。API 文档可在这里获得。

页面有一个指示器列表,带有使用 API 下载的选项。我们将关注“女性企业主的数量”,它显示了每个国家每年的结果。

向下滚动到您想要的指标数据,然后单击“API”访问选项。

截图来自世界银行目录

这将把您重定向到一个包含原始 JSON 数据的新网页。从地址栏复制网址,打开一个新的 Jupyter 笔记本。编写下面的代码,并用复制的文本替换url文本。

Python 有一个请求库,用于使用 python 发送 HTTP 请求。下面的代码返回一个响应对象。

import requests
import pandas as pdurl = '[https://api.worldbank.org/v2/en/country/all/indicator/IC.WEF.LLCO.FE?format=json&per_page=20000&source=14'](https://api.worldbank.org/v2/en/country/all/indicator/IC.WEF.LLCO.FE?format=json&per_page=20000&source=14')r = requests.get(url)

由于数据是 JSON 格式的,我们将调用response.json()返回提取的 JSON 数据。

r.json()

这将返回一个包含两个字典部分的列表。第一部分包含元信息。第二部分保存实际数据。

要创建数据框,请使用 list[1]来索引列表的第二个元素。

data_api = pd.DataFrame(r.json()[1])data_api.head()

结论

在这篇文章中,我们探索了数据收集,并提取了 5 种不同格式的数据,将其加载到熊猫的数据框中。完整的代码可以在 Github 的这里找到。

对于希望提取和分析真实世界数据集的数据科学家来说,收集数据的技能非常有价值。提取后的下一步是将数据转换为结构化和有组织的格式。

下面的资源列出了可用于项目的公共数据集。

大数据摄取

原文:https://towardsdatascience.com/what-is-data-ingestion-5220edf50677?source=collection_archive---------8-----------------------

简要概述什么是大数据以及数据收集解决方案的第一层

艾蒂安·吉拉尔代在 Unsplash 上拍摄的照片

介绍

你使用导航软件从一个地方到另一个地方吗?你在亚马逊上买过书吗?你看了网飞频道的《奇异事物》吗?你在 YouTube 上找搞笑视频了吗?

如果你对这些问题中的任何一个回答是肯定的,那么恭喜你!你是大数据生产者。事实上,即使你对我的任何问题都没有回答“是”,你可能仍在为大数据做出贡献——在当今世界,我们每个人都至少有一部智能手机、笔记本电脑或智能手表、智能汽车系统、机器人吸尘器等等,我们在日常活动中产生了大量对我们来说似乎微不足道的数据

什么是大数据?

当我们说大数据时,我们通常指的是特别大的数据,速度快且结构不同,以至于很难或无法用传统工具进行分析。

通常用“三个 v”来定义大数据的概念:

  1. 卷—数据的大小
  2. 速度——数据采集的速度
  3. 变化——不同类型的数据

为了解决大数据世界带来的复杂问题,该解决方案分为五层:

  1. 数据源
  2. 数据摄取
  3. 数据存储
  4. 数据处理——准备和培训
  5. 服务

作者提供的大数据层架构/图像

数据摄取

数据接收是大数据架构中的第一层— 这一层负责从各种数据源(物联网设备、数据湖、数据库和 SaaS 应用程序)收集数据,并将其存储到目标数据仓库中。这是流程中的一个关键点,因为在这个阶段可以理解数据的大小和复杂性,这将影响架构或我们今后做出的每个决策。

作者图片

为什么我们需要数据摄取层?

  1. 可用性—数据可供所有用户使用:BI 分析师、开发人员、销售人员和公司中的任何其他人都可以访问数据。
  2. 一致性—高质量的数据摄取过程可以将不同类型的数据转化为统一的数据,便于读取和执行统计和操作。
  3. 节省资金和时间—数据摄取流程节省了工程师收集所需数据和高效开发的时间。

数据接收面临哪些挑战?

  1. 复杂性—由于数据的速度和多样性,编写数据接收流程可能会很复杂,有时开发时间会耗费大量的时间和资源。
  2. 数据安全性—将数据从一个地方转移到另一个地方时,敏感数据存在安全风险。
  3. 不可靠性—在此过程中,数据的可靠性可能会受到损害,从而导致数据毫无价值,或者在最糟糕的情况下,根据不真实的数据做出不正确的决策。

数据接收类型

有三种常见的数据接收方式,使用方式将根据产品需求而定——实时收集数据重要吗,还是可以以定时方式偶尔收集一次?

实时数据摄取

这是从各种数据源实时收集和处理数据的过程,也称为流,当收集的数据对时间敏感时,我们将使用这种方法。

例如,在发生泄漏的情况下,来自油罐传感器的数据将至关重要。

在实时情况下,数据的速度会很快,因此解决方案将包含一个队列以避免丢失事件。我们将尽快提取、处理和保存这些数据。

批处理数据摄取

批处理数据接收意味着数据按照预定的时间间隔从数据源移动到数据目标。

当公司需要每天收集数据时,批量接收非常有用。

结论

虽然数据摄取不是一个简单的编写过程,并且随着时间的推移,建立基础设施和维护的成本会很高,但是一个编写良好的数据摄取过程可以帮助公司做出决策并改进业务流程。

此外,这一过程使处理大量信息源变得更加容易,并允许工程师和分析师等轻松访问。

什么是数据网格?你也应该把它网格化吗?

原文:https://towardsdatascience.com/what-is-data-mesh-and-should-you-mesh-it-up-too-364b28fe2ae9?source=collection_archive---------28-----------------------

企业数据架构的这种范式转变会颠覆数据格局吗?

照片由像素皮克斯拜拍摄

每个从事数据分析或与数据分析相关的人都一定听说过像野火一样迅速流行的术语——数据网格。

什么是数据网格?

数据网格是目前数据分析中最热门的话题之一。它已经找到了进入趋势的方式,这些趋势预计将在 2021 年颠覆并主导数据市场。

但是数据网格到底是什么,为什么越来越多的公司希望实现数据行业的最新趋势?下面,我们将探讨什么是数据网格,以及你是否应该将它网格化(标题参考巴尔·摩西的文章 什么是数据网格——以及如何不将它网格化 )。

在作为一等公民的数据时代,每个企业都努力成为数据驱动型企业,向数据平台和支持者投入大量投资。然而,不断增长的数据需求无法满足实时流能力有限的传统数据仓库或数据湖的需求。

对数据管道民主化和可扩展性的需求,是遗留系统的缺陷和相互冲突的业务优先级的基础。幸运的是,一种新的企业数据架构正在兴起,为庞大而脆弱的数据管道带来了新的希望。数据网格引入了一种方式,将数据视为分散的独立数据产品,而不是副产品。

软件开发实际上是第一个从单片应用过渡到微服务架构的。我们现在看到数据行业纷纷效仿,从优先考虑集中、单一数据湖和数据库的大规模数据团队转向优先考虑数据域和数据产品的一等公民。

数据架构中的这种 范式转变 意味着数据团队必须提供网格内所有数据资产的共享、发布、可发现性,以及更重要的互操作性。但更重要的是,这个支点驱动团队始终优先考虑他们交付给业务的结果和产品;而不是纠结于底层技术或使用的堆栈。

ThoughtWorks 顾问兼 Data Mesh 的最初架构师 Zhamak Dehghani 将这一概念定义为数据平台架构,通过利用面向领域的自助式设计来拥抱企业中无处不在的数据。然而,Zhamak 强调说,她对面向领域方法的支持并不意味着她“提倡分散的、孤立的面向领域的数据,这些数据通常隐藏在操作系统的内部;难以发现、理解和消费的孤立的领域数据”,她也没有“提倡多个分散的数据仓库,这些数据仓库是多年积累的技术债务的结果。”但她认为,对这些不可及的数据的意外孤岛的回应不是创建一个集中的数据平台,由一个集中的团队拥有和管理来自所有领域的数据,因为它没有规模。

取而代之的是,Zhamak Dehghani 发现范式转换对于解决架构失效模式是必要的。这种范式的转变位于大规模构建现代分布式架构的技术交叉点上;技术行业普遍加速采用并取得成功的技术。Dehghani 对下一个企业数据平台架构的想法存在于 分布式领域驱动架构、自助式平台设计、用数据进行产品思考 的融合中。

数据网格的前景和前提

尽管数据网格得到了很多关注,但其基本思想实际上并不新鲜。许多前瞻性的组织已经实施了它。Daniel tid strm 是 Data Edge 的合作伙伴&管理顾问,至少在相当长的一段时间内,他一直在与 it 部门合作。

丹尼尔认为,当公司快速扩张时,数据网格变得至关重要。

“随着数据源和数据消费者的激增,让一个中央团队来管理和拥有数据接收、数据转换以及向所有潜在的利益相关者提供数据,将不可避免地导致扩展问题,”Daniel 说。“鉴于数据在我们的组织中日益重要,为可扩展的团队和可扩展的平台进行设计至关重要。在软件工程的其他领域,这是一个公认的问题,所以我不明白为什么数据还必须存在于一个整体中。”

另一种选择是通过雇用更多的数据工程师来扩大团队规模,但业内每个人都知道,找到优秀的数据工程师和技能真的很难。因此,大规模采用分布式数据架构是非常明智的。

Daniel 解释说,此外,在实施领域驱动开发和微服务架构的公司中,考虑将数据所有权转移到领域中也是有意义的。

Daniel Tidströ目前正在为一个客户工作,该客户实施了一个将所有域绑定在一起的 Kafka 基础架构。为了处理数据,他们需要能够管理服务级别协议,知道发布了什么,了解模式是什么样子的,以及模式是如何发展的。

丹尼尔和他的团队正在做的所有这些事情都指向数据网格方向,尽管他们不一定称之为数据网格。然而,至关重要的是,数据产品所有者和域需要将数据视为一等公民,并将数据作为产品交付。

蒂姆·范德奎普在 Unsplash 上拍摄的照片

数据网格的挑战

数据网格不仅仅是一个即插即用的解决方案。随之而来的是公司必须应对的一系列挑战。丹尼尔说,许多人可能会发现自己对如何实现它感到力不从心。

建立如何接收数据的契约可能是数据网格实现中最具挑战性的事情之一。“实现数据网格不是一个纯粹的技术项目,你可以脱离业务的其他部分单独实现,”他解释说。这不是你可以一开始就做,然后第一次尝试就能成功的事情,而是你必须与它一起成长和发展。"

然而,最大的挑战不是技术上的,而是获得组织在数据网格环境中良好工作所需的数据成熟度。“对于许多组织来说,这是一种文化转变,让产品所有者真正考虑数据,并将其视为一种产品。因为这是传统软件工程的转变,所以这不是一件容易的事。”

当然,对许多人来说这将是一个挑战,但它需要得到解决,因为不解决它只会将复杂性推向下游的数据工程师和中央团队,他们需要整理所有的混乱,Daniel 继续说道。

“这是当今数据团队面临的问题之一,他们有太多相互竞争的优先级。很难建立一个长期的可扩展的东西。许多团队只是处理来自每个人的无限的、永无止境的积压请求。这也不管用。所以需要做点什么。对 it 来说,数据网格可能是最有趣的场景。”

Data Mesh 离数据民主化和让整个组织将数据视为战略资产又近了一步。这种转变在许多方面引入了一种新的工作方式。“这就是软价值观和文化特征是最重要因素的地方,只要确保数据得到应有的对待。如果你真的想成为一家数据驱动的公司,数据不能只是一两个中心团队的事情。”

丹尼尔·科尔派在 Unsplash 上拍摄的照片

何时开始考虑数据网格

尽管丹尼尔说,公司在前进的道路上会遇到技术挑战,但这不应该阻止他们实施数据网格,因为技术解决方案总是可以找到的。

“关于数据网格,最重要的事情是开始讨论数据的分布,因为数据创建本质上分布在所有公司中。”随着数据源的数量每天都在增长,许多组织可能至少应该考虑一下他们的扩展选项。

丹尼尔建议,如果你有领域驱动的开发,开始使用微服务,或者如果你做云迁移,这是考虑数据网格的好时机。

数据架构和数据仓库团队会发生什么

分布式域驱动架构是否意味着中央数据团队的终结?Daniel 安抚道,仍然有地方对跨域的核心数据资产进行集中管理。

“我不认为数据网格会消除对数据仓库团队的需求,相反,它会在某种程度上使他们的工作更容易,”Daniel 说。他承认,他经常被问到,当数据架构变得分布式时,它会发生什么。

“在大多数公司中,你可能有一个糟糕的数据架构师,他走进架构师论坛,试图成为整个组织的数据代言人,常常感到非常孤独。相反,如果您拥有数据的分布式所有权,并将其作为产品来管理,那么它在桌面上的位置会明显得多。因此,我认为这将引发许多有益和有趣的讨论,开始时可能会有点痛苦。但这个问题会得到解决,而且会不断改善。"

Daniel 建议不要忘记集中式团队,因为他们在分布式架构中仍然有作用。“展望未来,我认为为数据消费者提供良好的自助工具非常重要。让中央数据团队作为数据访问的把关人或瓶颈,对任何人都没有好处。现在有许多好的框架,比如数据构建工具(dbt ),它解决了数据消费者和数据平台之间的许多问题。所以这是我鼓励每个人都去研究的事情。这是一个神奇的工具,可以做很多事情。

哈尔·盖特伍德在 Unsplash 上拍摄的照片

数据网格和数据操作的关系

作为一种有待公司测试和实施的范式转变,好奇的头脑可能会问它如何适应更为人所知的数据运营环境。丹尼尔说,他看不出数据操作和数据网格共存有什么明显的问题;他还没有遇到任何阻碍数据运营和数据网格良好合作的直接障碍。

一般来说,跨分布式管道的数据可观察性可能有点挑战。但这是一个已经存在于大多数组织中的挑战,这些组织有某种形式的交接,甚至没有正式化。丹尼尔说,数据网格并没有消除这一挑战,但它以更好的方式解决了这一问题。

原载于 2021 年 1 月 25 日 Hyperight.comhttps://hyperight.com/what-is-data-mesh-and-should-you-mesh-it-up-too/

什么是数据挖掘?

原文:https://towardsdatascience.com/what-is-data-mining-c8e58b153c42?source=collection_archive---------28-----------------------

快速历史和实用介绍

数据挖掘就是它所说的:挖掘数据。尽管这经常涉及到从数据库中访问数据,但这只是一个步骤。数据挖掘最终寻求从具有潜在价值的数据中提取不明显的模式。换句话说,数据挖掘从数据中提取信息。在过去几十年中,生成和记录的数据量呈爆炸式增长。数字存储和传输成本的降低允许以多种形式收集越来越多的数据,如图像、视频和文本。但是,有用的信息量可能要小得多。在数据中寻找信息可以看作是在碳的海洋中寻找钻石。如何评估数据的价值?一种方法是利用信息论。

什么是信息?这是你还不知道的。如果一条数据没有揭示任何新的东西,或者是确定的,它就不包含任何信息[1]。克劳德·香农于 1948 年在他的论文《交流的数学理论》中提出了这种信息测量方法。为了衡量信息,数据被认为是一个更大的集合的一部分,但不是一个万能的集合。例如,英文字母是一组 26 个符号中的一部分(仅考虑小写)。有些符号,如字母 e,比其他符号出现得更频繁。出现的概率表明一个符号或一段数据有多少信息。如果符号总是发生,它的概率为 1,包含 0 信息。这可能看起来有点违背直觉,但经过一番思考后还是有道理的。如果你正在读一篇文章,并且知道下一个字母是什么,你没有获得新的信息。如图 1 所示,概率与信息量或不确定性之间存在反比关系。数据项的概率越低,信息量就越大,信息量以比特为单位。

图 1 从对数概率(1/p)获得的数据项中的信息。不经常出现的数据项的概率接近于 0,不确定性更大,如果出现,信息也更多。信息量是用比特来衡量的。如果数据项的概率为 0.1,那么它大约有 3.3 比特的信息(图片由作者提供)。

图 2 显示了前五个字母 a、b、c、d、e 的信息内容。字母“e”最常见,信息量最少。所有字母的平均信息给出了字母表的熵,估计大约为 1.8 比特/字母[2]。

图 2 a、b、c、d、e 的信息内容,使用每个字母相对于一个更大的字母表的概率来计算。字母“b”最不可能包含大约 6 位信息(图片由作者提供)。

熵是香农对信息的度量,用字母 h 表示。熵给出了 N 个数据项集合中的平均信息量。项目 n 的发生概率为 pn。

一位也用来指二进制数字,1 或 0。然而,在这种情况下,比特指的是信息量,具体来说,它与确定出现什么数据项所需的是/否问题的数量有关。一个二进制数字可以携带一位或更少的信息。像文件或图像这样的数据项的大小只是粗略地给出了其中的信息量。

数据挖掘可以被认为是提取信息。例如,在预测中,目标是将数据项分类到一个类别中,或者使用该项的特征预测连续值。如果 Y 是项目的类别,X 是项目的特征,则信息增益 H(Y|X)给出 X 给出关于 Y 的多少位信息。它等于原始熵 H(Y)减去 X 和 Y 之间的互信息。互信息 I(Y,X)是熵公式对两个变量的直接概括。

决定在某一天打高尔夫球的任务给出了一个简单的问题,在参考文献[3]中有进一步的解释。图 3 显示了这组数据有 1 个目标变量,用于判断是或否,以及 4 个特征或预测因子。这是一个目标已知的训练集。任务是使用这个集合来制作一个模型,该模型预测如果只给出 4 个特征,是否打高尔夫球。如果你不是高尔夫爱好者,也许你的配偶是。决策树是一种简单、直观的模型,可以给出这样的预测。如图所示,树组织特征以决定是或否。使用信息增益给出了训练树的有用方法。训练过程通常如下进行。

1.计算初始目标熵 H(打高尔夫球)= 0.94 比特

2.选择给出最大信息增益的预测器作为第一个决定因素。

a.Outlook:给出 0.247 位信息,并选择“Outlook”功能。

b.温度:给出 0.029 位

c.湿度:给出 0.152 位

d.Windy:给出 0.048 位

3.仅考虑剩余的预测值,并对所选预测值的每个值重复步骤 2。

图 3 用于决定是否打高尔夫球的决策树。用来决定玩的最重要的特征是前景,是雨天、晴天还是阴天。经http://saedsayad.com/decision_tree.htm许可的图片

虽然这是一个简单的例子,但它很好地展示了在分类中使用信息论的整个过程。从特征中提取比特信息来决定结果。一点值多少钱?以美元计算,存储在存储器中的数据和以美元计算的传输数据都有一定的成本。据估计,擦除 1 位信息所需的最小能量约为 kTlog2,其中 T 为温度,k 为玻尔兹曼常数[2]。该值取决于上下文。

总之,数据挖掘试图从数据中提取有趣的、潜在有用的模式。它与机器学习或数据科学等其他领域没有明显区别[4]。量化提取的模式值的一种方法是使用香农的信息度量。尽管对于某些应用程序来说,原始数据包含的信息可能要少得多,但如果可能的话,应该保留原始数据。一般的期望是,收集所有这些数据可以产生已知的知识,并用于以前没有预见到的目的。

参考文献

[1] Gershenfeld《信息技术物理学》,剑桥大学出版社 2000。

[2]斯通《信息论》。教程介绍》,Sebtel 出版社 2015 年。

[3]http://saedsayad.com/decision_tree.htm

[4]扎基和梅拉《数据挖掘与分析》。基本概念和算法》,剑桥大学出版社 2014 年。

什么是数据建模?

原文:https://towardsdatascience.com/what-is-data-modeling-6f14c1b7f2fd?source=collection_archive---------11-----------------------

业务价值不在您的数据中,而是在转换层中

数据建模工具竞赛—图片来自 Castor 的网站

今天,每个公司都收集数据并试图利用它。问题是,原始数据不会让你获得深刻的见解和有用的预测,只是因为它的结构方式不利于数据分析。你通常必须转换你的数据和变量,以使其分析就绪。我们经常听说数据转换,因为它是 ETL/ELT(提取—加载—转换)过程中的一个关键步骤,是最广泛使用的数据集成方法。今天,我们深入到转换过程,并试图解开数据转换/数据建模生态系统。

什么是数据转换?

简单地说,数据转换是改变变量的格式、结构或值的过程。结构化和重新格式化数据的目的是将它转换成一种数据模型,从中你可以学习洞察力并获得商业智能

很多时候,转换步骤包括将事务性数据与运营性数据集成在一起,以便数据可以用于业务分析和 BI。例如,转换平台可以将业务运营中使用的名称、地点和定价数据与交易数据相结合,例如零售或医疗保健索赔,如果最终用户需要这种结构来进行数据分析的话。因此,转换主要是由寻求用数据解决精确业务问题的分析师的特定需求决定的。

转换数据有多种优势:

更好的组织:转换后的数据对人和计算机来说都更容易处理。

数据质量:原始数据通常意味着质量差的数据:缺少值、空行、格式不好的变量等等。转换数据以提高其质量可以改善数据用户的生活,使他们能够提高工作效率并从数据中获得更多信息

可用性:太多的组织坐在一堆不可用的、未经分析的数据上。标准化数据并将其置于正确的结构下,可以让您的数据团队从中产生业务价值。

数据转换工作流

数据转换工作流程—图片由 Louise de Leyritz 提供

  1. 数据发现和分析:转换工作流程的第一步是识别和理解原始来源中的数据。这一步允许您决定数据应该经过哪些操作才能达到所需的格式/结构。
  2. 翻译和映射:这包括在源和目标字段之间建立清晰的对应关系。
  3. 工作流创建:这一步包括编写代码来执行转换任务。代码通常是使用特定的数据转换平台生成的。
  4. 工作流程执行:数据被转换成所需的格式。
  5. 数据检查:检查转换后的数据,确保其格式正确。

数据转换工具的发展

我们区分了三代数据建模解决方案:

第 1 代:数据转换由 ETL (Extract-Transform-Load)工具操作,大多使用 python 和 airflow。

第二代: EL-T(提取-加载-转换)流程取代了传统的 ETL。转换现在在数据仓库中操作。一个模糊的时代,没有专门用于数据转换的工具。

第三代:数据仓库中专门用于数据转换的工具的出现。dbt 的出现建立了一种新的转换范式。

数据建模 1.0:ETL 时代的转换

在研究第一代转换工具之前,有必要了解一下过去的数据转换是如何进行的。

数据转换是更广泛的数据集成过程的一部分,该过程包括将来自多个来源的数据集成到一个真实的来源,通常是数据仓库。建立一个唯一的事实来源的目的是让数据用户能够比分散在几十个应用程序和来源系统中更容易地找到数据。

在 20 世纪 90 年代,ETL(提取-转换-加载)过程是最广泛使用的数据集成方法。将来自多个来源的数据放入数据仓库包括三个关键步骤:首先从源系统中提取数据,然后根据我们上面描述的过程转换数据,然后将数据加载到数据仓库中。要记住的关键点是,在 ETL 过程中,数据在被装载到仓库之前被转换。原因是在 20 世纪 90 年代,当存储和带宽非常昂贵时,在数据仓库中加载未转换的、原始的、不可用的数据是愚蠢的。分析师必须定义特定的数据项目和业务用例,以便数据可以相应地转换,然后加载到数据仓库中。因此,ETL 过程的提取和加载步骤是紧密耦合的,ETL 管道一起执行这两个步骤。

ETL 流程—图片由 Louise de Leyritz 提供

ETL 管道数据工程师设计,涉及大量使用 Bash、Python、C++和 java 等脚本语言的定制代码。用于转换数据的工具与执行数据集成的提取和加载步骤的工具是相同的:优秀的旧式 ETL 工具。

数据建模 2.0:数据在仓库中转换

在过去的几十年里,存储和计算成本下降了数百万倍,带宽成本下降了数千倍。这导致了云的指数级增长,以及云数据仓库的到来,如亚马逊红移或谷歌 BigQuery。云数据仓库的独特之处在于,它们比传统数据仓库具有无限的可扩展性,能够容纳几乎任何数量的数据。

这些新的云数据仓库要求在数据集成过程中进行彻底的变革。现在,存储和带宽限制已经消失,在云数据仓库中加载大量未转换的数据不再是问题。这意味着在提取和加载数据之后,转换步骤可以在云数据仓库中轻松完成。EL-T(提取-加载-转换)过程因此取代了传统的 ETL,因为转换层被移动到了工作流的末端。这种新的数据集成方法更加省时,因为数据管道变得不那么复杂了。

EL-T 过程—图片由 Louise de Leyritz 提供

这标志着进入了一个相当模糊的时代。转换步骤是在云数据仓库中处理的,这是一个很大的变化。然而,没有建立标准,或者规定如何进行转换的规则。在 ELT 流程变得司空见惯之后的几年里,使用 SQL、python,有时使用 airflow 来执行转换。我们没有真正找到一种广泛的、统一的数据转换方式。缺乏专用的数据建模工具导致整个云数据仓库缺乏可见性。这是一个大问题。企业需要处理数千甚至数百万个数据集。由于没有数据团队可以学习和应用的清晰的转换标准,它很快变得混乱。

数据建模 3.0:转型的新范式

2016 年, Dbt ,一个你肯定听说过的平台,开创了第三代数据建模解决方案。

Dbt 是一个专门致力于数据转换的平台,只关注 EL- T 过程中的 T。现在,Dbt 为数据转换设立了一个新标准,这一点已被广泛接受。有了 Dbt,转换不再像在 ETL 范例下那样用复杂的脚本语言编写。数据建模现在发生在 SQL 中,这是一种由 BI 专业人员、数据分析师和数据科学家共享的语言。这意味着,过去只属于数据工程师的转换,现在可以由分析师和技术含量较低的人员来处理。转换也是协作操作的。

Dbt 实验室建立了一个由 15,000 名数据人员组成的社区,共享和交换 dbt 包以及如何最好地标准化和建模数据以进行分析的技巧。Dbt 统一了转换的操作方式,产生了期待已久的新范式。在这个新的范例中,每个懂 SQL 的人都可以动手构建转换管道。数据工程师看到了他们的角色转变,越来越关注提取和加载阶段,将转换步骤留给技术含量较低的部分。

这既有很大的影响,也有不太大的影响:

伟大的

数据科学家和数据分析师比软件工程师更了解数据的战略影响。因此,让他们负责数据转换是有意义的,因为他们比任何人都更清楚为特定的业务目的构建数据的最终目标。另一个伟大的成果是,数据科学家和数据分析师可以访问原始数据并进行自己的转换,而无需提交票证并等待数据工程师来领取。

不太好

数据分析师大多受短期目标驱动,因为他们在运营受限的情况下工作。他们的仪表板和 BI 报告预计明天发布,而不是下个月。他们只关心快速获得洞察力。现在,他们可以学习在不需要工程支持的情况下转换数据,从而可以更快地获得业务洞察力。在实践中,事情是这样的:数据分析师为一个精确的用例创建一个新表,称之为“客户流失 _2021”,获得见解,构建一份报告,提交给他的经理,继续他的一天。这张桌子放在哪里?哪儿也不去。它留在仓库中,与其他 200 个表具有相同的名称,并被其他分析师遗忘。

结果呢?完全混乱。显然,分析师创建的表只能用于单一用例,因为它们是为单一用例构建的。这导致了混乱的数据仓库,有不可用的和文档记录不良的表。它会无用地占用大量存储空间,并需要大量的监控工作来处理数据质量问题。随着每个人都参与数据转换时创建的数据集的数量,如果您不想最终淹没在未标记、记录不良的数据海洋中,您最好有一个可靠的数据记录解决方案。

数据工程师根据不同的逻辑转换数据。他们的目标是构建可靠的数据基础架构,为自助分析提供干净可靠的数据。数据工程师寻求以一种使数据对业务分析有用的方式来转换和构造数据,但这也使数据可以在不同的用例中重用。他们的抽象能力和长期思维导致了结构良好的数据仓库,一个表服务于几十个分析师的用例。

现在,天空不全是灰色的。我们正在见证一个新角色的出现:解决这些问题的 分析工程师 。分析工程师有足够的业务背景和数据工具经验来构建可重用的数据模型。他们基本上将软件工程最佳实践应用到数据分析中,并将面向业务的思维方式引入数据工程工作中。当分析工程师负责数据转换时,组织生活在尽可能好的世界中:出色的数据基础架构、自助式配置中构建良好且可重复使用的数据库,以及跨数据仓库的完美可见性。

哪种转型工具适合您的组织?

下面是数据转换解决方案的概况,希望可以帮助您为组织选择合适的平台。

数据转换工具的演变 Louise de Leyritz 的图片

点击此处查看更详细的数据建模生态系统基准:https://notion.castordoc.com/catalog-of-data-modeling-tools

更现代的数据堆栈基准?

点击此处,了解更多关于现代数据堆栈的性能指标评测和分析。我们写了利用数据资产时涉及的所有过程:从现代数据堆栈到数据团队的组成,再到数据治理。我们的博客涵盖了从数据中创造有形价值的技术和非技术方面。如果你是一名数据领导者,并希望更深入地讨论这些话题,请加入我们为此创建的社区

在 Castor,我们正在开发一个数据文档工具 Figma,Slack generation。或者对 Fivetran,Looker,Snowflake,DBT 的狂热爱好者来说是数据方面的。我们把我们的目录设计成易于使用、令人愉快和友好。

想去看看吗?联系我们,我们会给你演示。

最初发表于https://www.castordoc.com

dbt 是什么?

原文:https://towardsdatascience.com/what-is-dbt-a0d91109f7d0?source=collection_archive---------9-----------------------

您的分析工程指南和创建它的工具

兰迪·法特在 Unsplash 上的照片

一年多以前,我在公司的另一个部门担任了一个新的数据工程职位。我知道,进入 it 行业后,我将会比以前工作时使用更多的 Python 和 SQL。作为数据和分析的爱好者,这令人兴奋。我在那家公司的工程岗位上从未真正使用过 SQL,现在是提高我技能的机会。

几周之后,我的经理向我介绍了一个工具,这个工具刚刚开始实施,叫做 dbt (代表数据构建工具,也就是构造封面图片)。起初我并不真正理解它的用途以及我们为什么要使用它。但是当我开始探索它的特性时,我变得着迷了,说得轻一点。现在,我在另一家公司担任分析工程师,帮助构建以使用 dbt 为中心的整个数据堆栈。

事实真相

Dbt 是一种数据建模工具,它使分析师和工程师的工作变得更加容易。它帮助您以一种不必担心依赖性的方式编写 SQL 查询。我喜欢把它看作是把查询分成容器化的代码块。它允许您以一种不必重复已经编写的查询部分的方式编写 SQL 代码。

照片来自 dbt

例如,查看这个 DAG,您可以看到 orders 模型依赖于两个模型,base_orders 和 base_payments。如果要运行模型订单,它还会运行两个依赖关系基表。但是,这些基本模型完全独立于订单,也可以被其他模型使用。这保持了 SQL 代码的模块化和跨模型可重用性。

它是如何组织的

虽然有几种不同的方法可以在 dbt 项目中组织文件夹,但是创建该工具的公司建议这样做。在项目的“models”目录中,您可以创建三个目录——一个用于基本模型,另一个用于中间模型,还有一个用于您的 mart。

基本目录包含所有直接从数据源读取的模型,数据源通常是数据仓库中的一个模式。在 dbt 中,使用以下符号表示源:

{{ source('campaigns', 'channel')}}

该源引用您的。yml 文件。这些源模型类似于它们所读取的原始数据文件。但是,这里的最佳实践需要清除列名,并根据需要转换为不同的数据类型。

接下来是中间目录。这些模型总是引用我们刚刚谈到的基础模型,而不是来自某个来源。您可以把他们看作是您的分析师将要查询的基础模型和最终模型之间的中间人。此处的引用将始终使用这种符号:

{{ ref('base_campaign_types')}}

这些中间模型通常用于多个基础模型之间的连接。

最后,mart 目录是分析团队使用的“最终”模型被配置的地方。它们使用相同的参考符号来指代中间模型,而不是基础模型。这是可能发生任何计算以及任何其他微调以准备要查询的模型的地方。

其他功能

Dbt 还包括其他一些很酷的特性,比如种子、测试和标签。种子是 csv 文件,您可以将其添加到 dbt 项目中,以便上传到数据仓库。如果您有一个在分析中可能需要的唯一代码或员工 id 的列表,但当前数据中没有这些代码或 id,这将很有帮助。在我之前的角色中,我们使用这些来帮助测试我们的代码。

测试允许您检查数据源的某些功能,以确保您的数据符合标准。两个最常见的测试是检查表的主键是否唯一,并确保它不为空。还可以测试表之间的主键和外键,以确保一个值不在一个表中,而在另一个表中。这对于希望遵循强大的数据治理实践的团队非常有帮助。

我喜欢利用的另一个 dbt 特有的特性是标签。这正是它听起来的样子——你可以用某些关键词来标记你的模型。最棒的是,您可以使用它们的标签运行一组模型。例如,假设我有几个想要每天运行的关键模型。我可以安排以下命令在每天早上 6 点运行,它将每天执行带有标签的所有模型。

dbt run --models tag:daily

如果您希望在某个业务领域运行模型,这也很有帮助。你可以给他们贴上营销、财务、销售等标签。

随着我对 dbt 的深入研究,我将在这里分享我的发现。请务必阅读关于命名 dbt 模型、将 dbt 与雪花一起使用以及文档最佳实践的文章。

关于分析工程、现代数据堆栈和 dbt 的更多信息,订阅我的免费每周简讯

什么是深度分析?

原文:https://towardsdatascience.com/what-is-deep-analytics-e12d0c625044?source=collection_archive---------18-----------------------

以及为什么我们需要重新思考商业智能

去潜水。乔·波勒从拍摄的照片。

作为数据分析师,我们浪费了太多时间为他人制作仪表盘,而没有足够的时间来回答关于关键业务问题的深层问题。这对个人是资源的浪费,对企业也是资源的浪费。

有关该业务的真正实质性问题,比如:“是什么促成了上个月收入的突然增长?”无法通过具有收入和流量数字的通用仪表板来回答。你需要对这个问题进行一次式的深入探究。你需要把问题分解成具体的问题。

  • 按月查询过去 12 个月的收入
  • 以 12 个月为间隔,通过交叉检查每月收入来检查季节性模式
  • 查询营销支出数据
  • 查询营销流量数据
  • 查询产品使用数据,并根据用户采取的不同操作进行切割
  • 寻找所有用户采取的不同产品行动
  • 寻找不同用户群采取的不同产品行动

结论可能是存在季节性效应(人们在一年中的特定时间购买更多),有一次成功的营销活动增加了产品的流量,或者一群用户极大地影响了收入。无论它是什么,都有一种深刻的探索性去寻找一个看似简单问题的答案。这个工作流程还有第二个方面:组织和分享这些发现。我将这整个过程称为“深度分析”(与“浅层分析”相反,浅层分析更侧重于构建通用指标和通过仪表板共享见解——这是一种更生硬的工具,如果不是更通用的话)。

深度工作流:被遗忘的孩子

深层工作流的一个例子。图片由 Hyperquery 提供

问题是,更广泛的商业社区并没有重视这些深层的工作流程,尽管这恰恰是推动最大数量业务成果的工作类型。真正伟大的、独特的见解不会在盯着仪表盘时实现。它们来自于以新颖、不明显的方式来看待业务及其数据。从定义上来说,这不能以一刀切的方式进行。

事实是甚至分析社区也不重视这些深层工作流。缺乏关心会导致缺乏标准和工具。一个明显的例子是:SQL IDE 已经几十年没有重新设计了。共享和组织分析查询是事后才想到的。在发现和选择用于分析的不同版本的分析数据方面没有标准。

呼唤工具:工具定义工作流

优秀的工作流工具不仅仅使工作流更加高效。他们定义工作流程。Github 为代码定义了版本控制和协作。Figma 定义的协同界面设计。Ableton Live 定义了电子音乐制作。我们需要一个定义深度分析的工具。

传统的 BI 工具就是不能满足它。它们旨在帮助分析师为普通业务受众构建自助服务数据工具(例如仪表板)。SQL IDEs 也没有削减它——它们是为事务而构建的,而不是为探索而构建的(标签太多了!).Jupyter 笔记本非常适合 Python 中的数据科学工作流,但不适合分析。数据发现工具对于一般的可观察性非常有用,但是没有集成到查询编写工作流中。像 concept 和 Confluence 这样的 Wiki 工具是共享信息的通用场所,但不是专门为共享分析见解而构建的。这是一个不相交的工作流,工具并不专注于完成工作。

呼吁关注:深度分析至关重要

通过给工作流命名,我们给概念带来了生命。我们可以用简洁的方式来指代一个细微差别的概念。我们给数据科学这个学科起了个名字。我们将深度学习称为预测模型的一个变革类别。我们发明了商业智能这一术语,以表明通过自助服务工具进行数据驱动的决策的重要性。最近,我们发明了一个全新的职业:分析工程师。我们需要关注深度分析这一类别。我们需要工具来帮助我们更有效地工作。

Joseph 是 Hyperquery 的创始人兼首席执行官,该公司正在建立一个深度分析平台。通过 joseph@hyperquery.ai 和 Twitter @josephmoon_ai 联系 Joseph。

什么是深度强化学习?

原文:https://towardsdatascience.com/what-is-deep-reinforcement-learning-de5b7aa65778?source=collection_archive---------10-----------------------

详细的介绍

深度强化学习是我作为工程师使用过的最酷的工具之一。一旦完成,你所要做的就是告诉代理你想要完成什么,然后看着人工智能找出令人难以置信的创造性方法来完成这项任务。

理解神经网络(这里解释)是深度 RL 的前提。此外,如果你对列表强化学习感到舒服,深度强化学习可以更容易理解,我在这里深入解释了

列表 RL 和深 RL 之间的差异

列表 RL 的快速总结如下。

  1. 代理从环境接收状态
  2. 使用ε贪婪策略(或一些其他的状态探索策略),代理或者进行随机动作,或者选择将导致具有最高值的状态的动作
  3. 在这一集的结尾,代理将所有访问过的州存储在一个表中。然后,代理回顾该集访问的州,并根据收到的奖励更新每个州的值

所以,如果我们从一开始就知道每个州的真实值;这很容易。我们只是让代理总是移动到具有最高值的状态。主要问题是找到这些正确的状态值。

deep RL 做的是;我们不是保存我们遇到的每个状态的所有值的表格,而是使用神经网络实时地近似所有下一个可能状态的值。

假设我们已经有一个神经网络,我们可以将当前状态作为输入,输出将是一个数组,其中填充了我们可能处于的所有下一个状态的值(如果有 n 个可能的动作,那么通常我们可能处于 n 个下一个可能的状态)。说我们的环境是雅达利游戏‘突围’,我们的代理处于开始状态(游戏第一帧)。在突破中,我们可以做三件事;保持不动,向左移动,或向右移动。这些行为中的每一个都会带来一个独特的新状态。我们将把当前状态输入到神经网络中,并接收一个数组,告诉我们采取每个动作后的状态值。然后,我们采取导致最高价值的行动。

下图是在只有 2 个可用动作的环境中的神经网络。输入是当前状态,输出是下一个状态值。

如果有 N 个可用动作,那么将有 N 个输出到神经网络*****作者的图像***

关于代理内存的快速说明

在我们学习如何训练我们的神经网络之前,重要的是要了解我们是如何存储从玩游戏中获得的信息的。大多数时候,我们处于状态 S,我们收到奖励 R,我们采取行动 A,我们转移到下一个状态 S '。我说大部分时间是因为如果我们处于结束一集的终结状态,我们只是收到一个奖励 R(因为没有下一个状态和采取的行动)。

实际上,我们所做的是将这些值组合成一个 4 元组,并将它们存储在一个列表中。所以,它会看起来像这样。

如果状态是终端,那么 A 和 S’将是 Nan

现在,我们已经准备好了这些信息,以便在需要培训我们的代理时使用。

训练神经网络

所以,我们知道我们希望我们的输出是每一个动作产生的状态值。为了在我们的神经网络中找到使这成为可能的所有权重,我们需要确定我们想要最小化的损失函数。首先,

我们希望我们的神经网络的输出和观察到的下一个状态值之间的差值为 0

如果我们使用均方误差损失函数,我们得到:

不要让索引绊倒你,V^ai 是采取行动所带来的状态的价值。如果在一个索引上有一个索引让你感到害怕,它可能应该,那么就用 I 代替 ai

现在从列表 RL 中回忆一下,

或者下一个状态的值正好是那个状态收到的奖励+之后那个状态的值。为了找到 V(t+2)真,我们可以继续说,

然后用同样的方法求 V(t+3)真,然后 V(t+4)一直真,直到我们达到一个终态。但这是不切实际的,坦率地说也是不必要的。

实际上我们可以说:

或者,V(t+1)true = R(t+1) +我们从输入下一个状态 S(t+1)到我们的 NN 中得到的最高输出。

这可能看起来有点奇怪,因为对于未经训练的网络,V(t+2)预测将是不准确的废话。这是真的,但是经过多次权重更新,准确的信息 R(t+1)足以最终使 V(t+2)预测值准确。我的想法是这样的,

但是告诉 NN R(t+1)可以让它稍微提高预测的V(t+1)的准确性,从而在多次迭代后,V 预测值变得准确。

如果我刚才说的没有意义,不用担心。你真正需要知道的是我们使用的损失函数是这样的:

Vmax 是最大预测值。或者神经网络的最大输出。R^ai 是采取行动的奖励。请注意,我们只知道采取其中一项行动所获得的奖励。我称之为部分信息训练,这是下一个话题。*****图片作者***

部分信息培训

作为一个视觉,想象下面的 NN 在一个有 2 个动作的环境中。当我们的代理人处于这种状态时,他采取了行动 a1,并在下一个状态中获得奖励 R(a1,t+1)。现在我们不知道自从我们采取行动 a1 后,采取行动 a2 所产生的状态值是多少。我们训练需要这个!

图片作者

我们所做的是假设神经网络预测了这个动作的正确值,所以差变成 0。不是很优雅,但它的工作!所以,我们最后得到:

如果你想实验,我从未探索过的一个想法是假设神经网络一开始预测完全错误,然后随着时间的推移慢慢改变假设,假设它是准确的。如果你尝试这样做,请在回复中告诉我效果如何!*****图片作者***

理论部分总结

这个理论可能有点复杂,这取决于你想深入细节到什么程度。我学习的方法是坐下来,拿着纸和铅笔,手动画出 3 或 4 个代理的时间步,看看我如何训练这些时间步。如果你想深入了解是怎么回事,我建议你也这样做。从状态 St 开始,在那里你得到奖励 rt。现在画一些虚构的输出值到 NN,然后选择一个动作并在内存中记录(S,A,R,S’)元组。现在再做 2 到 3 个时间步,假设你到达了一个终态。现在,随机选择一个时间步长,试着写下在这个时间步长上训练神经网络的损失函数。下面是我为理解这一点所做的一个例子:

我决定采取的行动用绿色圈出。不是说上面的动作是 0,下面的动作是 1。*****图片作者***

如果所有的理论都有点模糊,不用担心。如果你第一次看到这一切时就能完全理解,我会认为你是外星人。但是现在我们已经了解了这个理论,真正学习它的唯一方法就是应用它。顺便提一下,我的第一个深度 RL 项目花了我几个星期才弄明白。这个项目教会了我代码漂亮和可读是多么重要。所以,如果没有马上得到,也不要气馁。如果我能做到,那么你也能。

下面是一个帖子的链接,我们实现了这个来让一个代理玩 Atari Pong。看看吧!

感谢您的阅读!如果这篇文章在某种程度上帮助了你,或者你有什么意见或问题,请在下面留下回复,让我知道!此外,如果你注意到我在某个地方犯了错误,或者我可以解释得更清楚一些,那么如果你能通过回复让我知道,我会很感激。

什么是嵌入,你能用它做什么

原文:https://towardsdatascience.com/what-is-embedding-and-what-can-you-do-with-it-61ba7c05efd8?source=collection_archive---------9-----------------------

作者图片

W ord2vec(由托马斯·米科洛夫领导的谷歌研究团队发表)作为自然语言处理领域的“突破性技术”,至今已有八年历史。他们开创了单词嵌入的概念,作为技术的基础。

到目前为止,嵌入的使用已经被应用到广泛的分析中,并且产生了显著的影响。机器学习或深度学习中的许多概念都是建立在彼此之上的,嵌入的概念也不例外。对嵌入有一个坚实的理解将使学习许多更高级的 ML 技术变得容易得多。

因此,在今天的博客中,我将引导您浏览以下主题,以帮助您彻底理解嵌入的定义和应用:

  1. 外行人解释:一个特定任务的字典
  2. 直观解释:正在行走的点
  3. 为什么我们想要嵌入
  4. 嵌入的各种应用
  5. 汇总

外行人的解释:特定任务的字典

从 Google 的机器学习速成班中,我找到了关于嵌入的描述:一个嵌入是一个相对低维的空间,你可以将高维向量平移到其中。嵌入使得在大量输入上进行机器学习变得更加容易,比如表示单词的稀疏向量。理想情况下,嵌入通过在嵌入空间中将语义相似的输入放在一起来捕获输入的一些语义。嵌入可以跨模型学习和重用。

太棒了!这可能是我在网上能找到的关于嵌入的最精确和简洁的描述。尽管如此,它仍然有点令人费解和模糊。那么,在假装对机器学习只有初步了解的情况下,又该如何通俗易懂地解释呢?

作者图片

这里有一个例子:当应用于文本挖掘项目时,嵌入可以帮助我们通过研究一个词经常出现在什么其他词旁边来学习这个词的语义。然后我们可以产生一个嵌入列表,可以把它当作 一个任务专用字典 。如果你想了解语料库中某个特定单词的更多信息,去“字典”里查一下。然而,它并没有为你提供人类语言的定义,而是返回 一个数值向量来反映它的语义 。此外,这些向量之间的距离度量了项目中术语之间的相似性和关系。

从 word2vec 的名字可以看出——“单词到向量”,它将单词转换成数字的向量。换句话说, 嵌入是一串数字,作为唯一标识符 。我们可以使用嵌入技术为一个单词、一个人、一个声音、一幅图像等分配一个唯一的数字 ID。在你的研究中。科学家利用这种想法,创造了许多有趣的 2vec 风格的模型,以促进机器学习过程。

直观解释:行走的点

通常,嵌入被保存为向量。矢量的定义是“一个有方向和大小的量,特别是确定空间中一点相对于另一点的位置。”由于嵌入被假定为在空间中具有方向和大小,直观地,我们可以将每个矢量视为步行点的路线图。我们可以想象,所有的嵌入大概都是从同一点出发,它们会开始沿着自己的方向和权重在空间中行走。在行走之后,每个嵌入将到达不同的端点,并且相邻点彼此更加相似,因此应该被分类到相同的组中。因此,我们倾向于借助余弦相似度使用嵌入进行社区检测或群组聚类。它通常也用于分类任务。

为了说明上面提到的想法,我们可以做的是使用维度演绎技术(主成分分析,UMAP 等)。)将高维向量的大小缩小到 2D/3D,并在图上画出点。这里有一个博客专门向你展示如何在 3D 空间中实现这一点:

为什么我们要嵌入

以下是我们希望在项目中包含嵌入的几个原因:

首先,当前的机器学习模型继续倾向于将数值作为输入。他们类似于数学书呆子,当输入数字时,他们可以快速捕捉重要信息,但对离散的分类变量反应迟钝。然而,当研究计算机视觉或语音识别等时,我们不太可能能够收集或仅收集我们的目标/因变量的数字数据。将这些离散的分类变量转换成数字有助于模型拟合

作者图片

第二,它有助于减小尺寸。有人可能会说,一次性编码技术是我们处理分类变量的方式。然而,在今天的数据科学世界中,它被证明是非常低效的。

当处理一个有四种不同类型的变量时,我们通常会创建四个新的虚拟变量来处理它。此外,它以前运行良好。

然而,考虑以下场景:我们正在研究三种产品的消费者反馈。对于每个观察,我们只有一个变量——评论内容。我们可以建立一个术语-文档矩阵,然后将其放入分类器或其他算法中。然而,让我们假设每个产品有 5 万条评论,语料库中的唯一单词总数是一百万。那么我们最终会得到一个形状为(150K x 1M)的矩阵。对于任何模型来说,这都是一个大得离谱的输入。这就是我们需要引入嵌入概念的时候。

假设我们将维度减少到 15(每个产品有一个 15 位数的 ID),取每个产品嵌入的平均值,然后根据数值给它们着色;这是我们得到的:

作者图片

即使没有人类语言呈现,我们仍然可以感知到客户对产品 A 和 B 的感知彼此更相似,而对产品 C 的感知不同。而这个矩阵的形状只有(3×15)。

这是另一个在谷歌机器学习速成班上讲过的例子,讲的是如何为一个电影推荐系统使用嵌入:嵌入:分类输入数据

第三个原因是为了降低复杂度。这有点像第二个原因的延伸。嵌入还有助于将非常复杂的信息转化为数字向量。下面是一个社交网络分析的例子:

作者图片

最初,我们从社交媒体收集数据,并将其转换为社交网络分析图。在图中,我们可以使用节点之间的距离和纽带的颜色来解释节点之间的相似性。但是,它很复杂,很难读懂。现在,我们在图中只有 14 个节点,而且已经很乱了。你能想象如果我们调查 100 个节点会发生什么吗?这被称为复杂(高维)数据。然而,通过使用某些技术来帮助降维,我们可以将图转换成嵌入列表。结果,我们现在有了一个新的、干净的节点“字典”,而不是杂乱的图。我们可以使用“字典”来制作一个人类可读的可视化。

T he 嵌入的各种应用

在发现了嵌入是什么以及我们为什么需要它之后,您一定很兴奋地看到了它在实践中的一些应用。因此,我选择了一系列有趣的应用程序,这些应用程序使用了嵌入的思想以及一些相关的文献或用法演示。

自然语言处理:

word2vec:

sent2vec:

doc2vec:

图像分析:

Img2vec:

社交网络分析:

node2vec:

总结:

在机器学习的背景下,嵌入的功能相当于特定任务的字典。它用一系列数字对我们的目标进行编码,作为一个唯一的 ID。我们喜欢使用嵌入,因为它可以帮助将离散的分类变量转换成模型可读的数据,还可以帮助降低数据的维度和复杂性。我还列举了几款精选的 2vec 风格的车型。

本月晚些时候,我可能会写另一篇文章来演示嵌入的一种用法。上面的算法只是 2vec 风格模型的一小部分。如果你感兴趣,我想这个网站可能会帮助你。

请随时与我联系LinkedIn

什么是 ETL?

原文:https://towardsdatascience.com/what-is-etl-88154bdcde58?source=collection_archive---------22-----------------------

三代 ETL/ELT 工具,以及生态系统如何发展

图片来自 Castor 的网站

ETL (Extract-Load-Transform)是最广泛的数据集成方法,即整合来自不同源系统的数据以改善数据访问的实践。故事还是老样子:企业有海量数据要处理,理解这些数据有助于提高企业绩效。ETL 在这一探索中扮演着核心角色:它是将原始的、杂乱的数据转化为干净的、新鲜的、可靠的数据的过程,从这些数据中可以获得业务洞察力。这篇文章试图阐明这个过程是如何进行的,ETL 工具是如何发展的,以及当今对您的组织可用的最佳工具。

什么是 ETL?

如今,组织从多个不同的业务源系统收集数据:云应用程序、CRM 系统、文件等。ETL 过程包括汇集来自这些不同来源的数据,以构建唯一的真实来源:数据仓库。 ETL 管道是数据管道,它有一个非常具体的作用:从它的源系统/数据库中提取数据,转换它,并将其加载到数据仓库中,数据仓库是一个集中式的数据库。数据管道本身是数据基础设施的一个子集,该层支持整个组织的数据编排、管理和消费。

ETL 管道—图片由 Louise de Leyritz 提供

ETL 不只是移动数据:杂乱的数据是从其原始源系统中提取出来的,通过转换变得可靠,最后装载到数据仓库中。

提取

数据集成过程的第一步是数据提取。在这个阶段,数据管道从多个数据源和数据库中提取数据,并将其汇集到一个暂存区

ETL 流程—图片由 Louise de Leyriyz 提供

临时区域的用途如下:

  1. 通常不可能同时从所有源系统中提取所有数据。staging area 允许在不同时间将数据集合在一起,这是一种不会淹没数据源的方法。
  2. 它避免了同时执行提取和转换,这也会使数据源负担过重。
  3. 最后,当将数据加载到集中式数据库中出现问题时,临时区域非常有用。这允许根据需要回滚和恢复同步。

改变

数据集成的第二步是转换数据,将数据转换成适合分析的格式。使数据符合目的有两个部分。

  • 在原始的源系统中,数据通常是杂乱的,因此很难解释。转换的一部分在于提高数据的质量:清除无效数据,删除重复数据,标准化测量单位,根据类型组织数据,等等。
  • 在转换阶段,数据也被结构化和重新格式化,以使其适合特定的业务目的。很多时候,事务数据与运营数据集成在一起,这使得它对于数据分析和商业智能非常有用。例如,ETL 可以将业务运营中使用的名称、地点和定价数据与交易数据结合起来,例如零售或医疗保健索赔,如果最终用户需要这种结构来进行数据分析的话。因此,转型主要由寻求用数据解决精确业务问题的分析师的特定需求决定。

负荷

数据集成的最后一步是将经过转换、格式正确的数据加载到数据仓库中。数据可以一次全部加载(全加载),也可以按预定的时间间隔加载(增量加载)。这通过使用批次流装载来实现。批量加载是指 ETL 软件从源系统中提取批量数据,通常基于一个时间表(例如每小时)。流式 ETL,也称为实时 ETL 或流处理,是一种替代方法,在这种方法中,一旦数据源系统提供了信息,数据管道就会接收这些信息。特定的业务用例决定了处理的选择。例如,当你进行高频交易时,你通常更喜欢获得实时数据,并获得一个支持流处理的工具。

为什么我们需要 ETL?

ETL 可以在多个方面为您的组织带来好处:

✅ ETL 将数据库和各种形式的数据组合成一个单一的、统一的视图。这使得查找数据和进行有意义的业务分析变得更加容易。

✅ ETL 提高了数据人员的生产力,因为它整理并重用了移动数据的过程。

✅ ETL 提供了深刻的历史背景,这培养了对数据的信任。

✅ ETL 允许源系统和目标系统之间的样本数据比较

有哪些可用的工具?

ETL 工具已经存在有一段时间了,但是在过去的几年中,作为他们努力跟上数据基础设施发展的一部分,它们已经有了很大的发展。数据集成过程最重要的演变是从 ETL(提取-转换-加载)工具到 EL-T(提取-加载-转换工具)的转变。这基本上是过程顺序的改变,有着有趣的应用。

我们区分了三代 ETL/ELT 工具:

第一代:标准 ETL(提取-转换-加载)工具。它们遵循 20 世纪 90 年代特有的严格的存储、带宽和计算约束所决定的过程

第二代 : ELT(提取-加载-转换)流程源于云数据仓库的到来以及存储和带宽限制的解除。

第三代:第三代 ETL 工具提供了更多的连接器,因为它们能够标准化连接器并利用它们的社区。

ETL 1.0:构建数据仓库

数据集成(ETL)的标准方法可以追溯到 20 世纪 70 年代,当时企业开始使用中央数据存储库。但是专门用于帮助将数据加载到数据仓库中的工具只出现在 20 世纪 90 年代早期,当时数据仓库占据了中心位置。

传统的 ETL 工具从孤立的系统和数据库中提取数据,根据所需的结构进行转换,然后将其加载到集中式数据库中。这是根据以下过程实现的:

  1. 定义数据项目及其所对应的业务需求
  2. 确定项目的相关数据源
  3. 定义分析师解决特定业务问题所需的数据模型/结构。
  4. 构建 ETL 管道(提取、转换和加载功能)
  5. 进行数据分析并获得业务洞察力

传统 ETL 工具的主要特征是执行过程的顺序。具体来说,数据在被加载到数据仓库之前被转换。原因很简单:在 20 世纪 90 年代,存储、计算和带宽极其稀缺和昂贵。因此,在将数据加载到仓库之前减少数据量至关重要。

这个过程发生的特定顺序是与第一代 ETL 工具相关的大多数障碍的根源。

首先,它导致了重要的可伸缩性问题。ETL 管道不仅仅从数据库中提取数据,还执行复杂的转换,以满足终端用户的特定需求。这涉及到大量的时间和定制代码。当数据用户想要进行业务分析,需要尚不存在的配置中的数据时,数据工程师需要为新的用例重写转换代码。当数据量增加时,就不可能构建和维护高度定制的数据管道。

将转换步骤放在加载步骤之前的第二个问题是,这会导致 ETL 管道的持续维护。因为管道一起提取和转换数据,所以一旦数据源系统中的模式改变,它们就中断;例如,当删除或添加字段时。这使得用于将数据转换为预定义模型的代码失效,需要由数据工程师重新编写。

这个可伸缩性问题没什么大不了的,因为传统的本地数据仓库基础设施无论如何都无法容纳和处理这么多数据。

ETL 2.0:云计算时代

在过去的几十年里,存储和计算成本下降了数百万倍,带宽成本下降了数千倍。这导致了云的指数级增长,以及云数据仓库的到来,如亚马逊红移或谷歌 BigQuery。云数据仓库的独特之处在于,它们比传统数据仓库具有无限的可扩展性,能够容纳几乎任何数量的数据。不仅如此,云数据仓库还支持大规模并行处理(MPP),能够以令人难以置信的速度和可扩展性协调大量工作负载。

这些新的云数据仓库要求对 ETL 过程进行彻底的改变。传统的 ETL 适用于传统的数据仓库。既然组织已经有了可伸缩的基础设施,是时候获得可伸缩的 ETL 管道了;可以处理和转换任何数量的数据。传统 ETL 工具的性能在云中并没有提高,因为可伸缩性问题是在仓库中移动数据的过程所固有的。因此,在使用传统 ETL 工具的同时投资一个云数据仓库,会给你留下与旧数据仓库相同的瓶颈。

ETL 过程必须改变,它确实改变了。值得注意的是,数据集成技术不再受到存储、计算和带宽的限制。这意味着组织可以在仓库中加载大量未转换的数据,而不用担心成本和限制。你猜怎么着,他们确实这么做了。

这就是提取-加载-转换(ELT)过程取代传统 ETL 的原因。这里的想法是从源系统中提取数据,并直接数据加载到云数据仓库中,而不进行转换。我们现在谈到 ELT 连接器,ELT 工具的组件,它们建立到数据源的连接,构建管道,并允许提取和加载步骤发生。连接器不处理特定业务用例的转换;一旦数据被加载到数据仓库中,就会通过 dbt 之类的工具对其进行处理。

EL-T 过程—图片由 Louise de Leyritz 提供

在工作流程的最后移动变换层有几个主要优点:

✅将加载和转换步骤分离开来,这意味着数据管道不再是高度定制的、耗时的过程。事实上,使用 ELT,管道只是将数据从源移动到目的地,除了数据清理/规范化之外什么也不做。不再为最终用户定制转换。这意味着 ELT 的提取和加载阶段可以自动化,并且可以根据需要放大或缩小。

✅在云数据仓库中,转换过程本身要简单得多。转换不再用复杂的语言编写,比如 Python。转换和数据建模发生在 SQL 中,这是一种由 BI 专业人员、数据分析师和数据科学家共享的语言。这意味着曾经由数据工程师专有的转换,现在可以由分析师和技术人员处理。

✅将转换层从提取和加载中分离出来还有另一个好处:转换层的故障(当上游模式或下游数据模型改变时)不会阻止数据被加载到云数据仓库中。相反,随着数据继续被提取和加载,分析师可以重写转换。实用。

ETL 和 ELT 因此在三个层次上有所不同:转换发生时,哪里发生,以及由执行。转换步骤是 ETL 过程中最复杂的步骤,这解释了为什么拥有云数据仓库的组织现在使用 ELT 工具。

❌第二代工具是对传统 ETL 过程的巨大改进,但是它们仍然不能完全解决数据集成问题。事实上,市面上大多数 ELT 工具都没有破解过连接器外壳。性能最好的 ELT 工具建议数据源和数据目的地之间最多有 150–200 个连接器。这已经很好了。问题是,全球组织使用的营销/技术工具超过 5000 种。这些组织是做什么的?嗯,他们要么不使用任何工具,而是使用 Airflow 或 Python 来构建连接器(是的,人们仍然这样做!或者他们在购买诸如 Stitch 或 Fivetran 等 ETL 工具的基础上构建和维护自己的定制连接器。不理想?我们知道,但整合游戏并不容易。

ETL 3.0:连接器的商品化

第三代 ETL 工具面临着一个严峻的挑战:如果他们想给客户带来价值,他们需要在连接器和维护工作方面达到预期。解决方案在于连接器的商品化,但如何实现呢?

连接器标准化

ETL 工具不建议使用 150/200 以上的现成连接器的原因是,构建这些连接器确实很痛苦。因此,第三代工具在中投入了巨大的努力,使得构建新的连接器变得很简单。但是,如何使连接器易于构建呢?您需要标准化连接器的工作方式。这意味着构建连接器的核心,数据工程师只需调整这个核心就可以获得他们需要的定制连接器。

这相当于为 ETL 工具构建 Dyson 吹风机。戴森彻底改变了头发护理,这要归功于一个小装置,你可以根据你的头发情绪,在其上插上卷发器、吹风机、加热刷、直发器和其他新奇的东西。开发这款设备花费了 7100 万美元,还有数百名工程师,但是顾客很高兴他们不必根据他们想要的发型购买 6 种不同的设备。对于 ETL 工具来说,这是同样的挑战:寻找、构建和提供定义连接器核心的东西。这样就可以根据具体的使用情况轻松定制,就像开关吹风机的末端一样。

定制 ETL 连接器的最后一部分,而不是从头开始——图片来自 Dyson

在一个连接器没有标准化的世界里,构建 Tableau 的连接器需要很长时间。您需要访问源/目标文档、测试帐户、使用最适合任务的语言、定义输入等。这需要时间,而且令人厌倦。使用标准化连接器,您只需访问“分析”连接器核心,它本身是通过丰富为所有连接器设计的核心而构建的。在这种配置中,构建 Tableau 连接器需要几个小时,而不是几天。

开源:利用社区的力量

比构建连接器更难的是什么?维护连接器。谢天谢地,开源 ELT 工具可能已经解决了这个问题。ELT 工具有一个特别之处:它们是由使用它们的同一批人构建的:数据工程师。因此,开源 ELT 工具和发展一个强大的数据工程师社区可以带来巨大的成果。一个工程师需要造一个不存在的连接器?多亏了连接器的标准化,他花了两个小时。更好的是,整个社区,根据定义,所有其他客户都将受益于这种新的连接器。一个连接器有问题?检测到它的工程师为每个人修理它。简化维护:分担负担。

哪个 ETL/ELT 工具适合您的组织?

下面,你会发现一个 ETL 工具的场景,它可以帮助你选择一个适合你公司需求的解决方案。

ETL/ELT 工具前景—图片由 Louise de Leyritz 提供

点击这里查看完整的 ETL 工具和更多标准。

在选择 ETL 工具时,有各种各样的考虑因素。您希望确保选择适合您业务的工具。我们建议关注以下几个方面:

  1. 内置集成:或者更准确地说,工具是否提出了您所关心的集成。最先进的 ETL 工具为 150–200 种最常用的应用程序提供了现成的连接器。如果您需要与一个特定的应用程序集成,请确保您选择了一个提供这种集成的工具。很可能你的 ETL 工具不能与你所有的应用程序/数据库集成。在这种情况下,请确保您选择的工具能够与其他具有所需连接器的 ETL 工具集成,连接到可以充当原始数据源和 ETL 工具之间中介的 S3 桶,或者从手动编码的管道中获取数据。
  2. 维护:在寻找数据处理解决方案时,不要忘了维护对流程有多关键。如果您需要一个全职的工程团队来保持 ETL 管道正常运行,也许您应该考虑另一个解决方案。
  3. 可扩展性:根据您是企业客户还是中小型公司,您选择的工具会有所不同。如果您是一个企业客户,您应该选择一个 ETL 工具,它可以轻松扩展,具有高可用性基础设施和每天处理数百万个表的能力。
  4. 支持:无论你使用哪种工具,你最终都会需要帮助。如果您得不到所需的帮助,您的团队将无法开展其关键的数据处理活动,这将严重影响您的业务。

更现代的数据堆栈基准?

点击此处,了解更多关于现代数据堆栈的性能指标评测和分析。我们写了利用数据资产时涉及的所有过程:从现代数据堆栈到数据团队的组成,再到数据治理。我们的博客涵盖了从数据中创造有形价值的技术和非技术方面。

在 Castor,我们正在开发一个数据文档工具 Figma,Slack generation。或者对 Fivetran,Looker,Snowflake,DBT 的狂热爱好者来说是数据方面的。我们把我们的目录设计成易于使用、令人愉快和友好。

想去看看吗?联系我们,我们将向您展示一个演示。

原载于https://www.castordoc.com

什么是特征工程?

原文:https://towardsdatascience.com/what-is-feature-engineering-bfd25b2b26b2?source=collection_archive---------32-----------------------

一个非常宽泛的机器学习概念的简要介绍

对于“特征工程”具体指的是什么,很难找到任何一种共识。我这篇文章的目标是为新的和有抱负的数据科学家提供一个关于构建成功的机器学习(ML)模型的非常广泛而基本的方面的介绍。我们将讨论变量和特性之间的区别,为什么特性工程是重要的,以及什么时候你可能想要设计特性。在以后的文章中,我将介绍一些如何使用 Python、Pandas 和 NumPy 来设计特性的基本示例。

凯文·Ku 通过 Unsplash 拍摄的图片

那么什么是特征工程呢?

有些人认为特征工程包括数据清理,将数据转换成机器学习(ML)算法可用的格式。这包括处理缺失值或空值、处理异常值、删除重复条目、编码非数字数据以及转换和缩放变量。我倾向于认为这些事情是重要的预处理步骤,但是大部分是与特征工程分开的。我说“大部分”是因为(像数据科学中的大多数其他事情一样)探索、清理和工程特性应该被视为迭代过程的一部分。这些步骤中的每一步都会通知其他步骤。

对我来说,特征工程专注于使用你已经拥有的变量来创建额外的特征,这些特征(希望是)更好地表示你的数据的底层结构。特征工程是一个创造性的过程,非常依赖于领域知识和对数据的彻底探索。但是在我们继续深入之前,我们需要后退一步,回答一个重要的问题。

什么是特性?

要素不仅仅是数据集中的任何变量。特征是一个变量,对于预测您的特定目标和解决您的特定问题非常重要。例如,在许多数据集中常见的变量是某种形式的唯一标识符。该标识符可以代表唯一的个人、建筑物、交易等。唯一标识符非常有用,因为它们允许您过滤掉重复的条目或合并数据表,但是唯一 id 不是有用的预测器。我们不会在我们的模型中包含这样的变量,因为它会立即过度拟合训练数据,而不会为预测未来的观察提供任何有用的信息。因此,唯一 ID 是一个变量,而不是一个特征。

所以一个特征可以被认为是一个潜在有用的预测因子。

特征工程的目的是什么?

当你拿到一个数据集时,你很少会觉得你已经得到了解决问题可能需要的所有信息。那么,如果你不能收集更多的数据或测量额外的变量,你能做什么呢?你可以设计特征。

这实际上意味着应用领域知识来弄清楚如何以新的方式使用您所拥有的信息来提高模型性能。直到你开始探索你的数据,你才会完全理解你所拥有的信息。这就是为什么很难找到涵盖特性工程主题的非常具体的资源。它是如此依赖于

  • 你工作的领域,
  • 您在该领域中的具体问题或任务,
  • 你已经拥有的变量,
  • 以及你产生额外信息的能力。

没有人能给你一步一步的指导,告诉你应该设计哪些功能以及如何设计。抱歉。

创建能够更好地强调数据趋势的附加要素有可能提高模型性能。毕竟,任何模型的质量都受到输入数据质量的限制。仅仅因为这些信息在技术上已经存在于你的数据集中,并不意味着机器学习算法能够识别它们。在大的特征空间中,重要的信息可能在噪声和竞争信号中丢失。因此,在某些方面,特征工程就像试图告诉模型数据的哪些方面值得关注。这是您作为数据科学家的领域知识和创造力真正发挥作用的地方!

什么时候应该设计功能?

当您浏览已有数据时,请记住以下几个问题:

  1. 用不同的方式表示同一个变量,有可能获得信息或减少噪音信号吗?
  2. 是否有任何变量具有重要的阈值,而这些阈值没有明确地反映在变量当前的表示方式中?
  3. 可以将任何变量分解成两个或更多的变量来提供有用的信息吗?
  4. 有没有任何一个变量可以以某种方式组合起来,变得比它们各部分的总和更能提供信息?
  5. 您是否有信息可以让您收集或以其他方式获得有用的外部数据?

如果你对这些问题中的任何一个回答“是”,花一些时间来设计功能可能是一个有益的尝试。

最后

与数据科学中的许多事情一样,特征工程是一个迭代过程。调查、试验和返回进行调整是至关重要的。您将获得的对数据结构的洞察以及对模型性能的潜在改进通常非常值得付出努力。此外,如果您对这一切还比较陌生,那么特征工程是练习使用和操作数据框架的好方法!因此,请继续关注未来的帖子,这些帖子涵盖了如何做到这一点的具体示例(,代码为)。

关于特征工程的更多信息:

特征工程示例:宁滨分类特征

特征工程实例:宁滨数字特征

什么是特征工程——机器学习的重要性、工具和技术

原文:https://towardsdatascience.com/what-is-feature-engineering-importance-tools-and-techniques-for-machine-learning-2080b0269f10?source=collection_archive---------0-----------------------

用于机器学习的特征工程技术是机器学习中的一个基本主题,但也是一个经常被忽视或看似简单的主题。

作者图片

特征工程是选择、操作原始数据并将其转换为可用于监督学习的特征的过程。为了让机器学习在新任务上工作得更好,可能有必要设计和训练更好的功能。如您所知,“特征”是可以在预测模型中使用的任何可测量的输入,可以是某个对象的颜色或某人的声音。简而言之,特征工程是使用统计或机器学习方法将原始观察结果转换成所需特征的行为。

在本文中我们将看到:

  • 什么是特征工程,
  • 特征工程的重要性,
  • 机器学习的特征工程技术,
  • 几个最好的特征工程工具。

什么是特征工程

特征工程是一种机器学习技术,它利用数据来创建训练集中没有的新变量。它可以为监督和非监督学习产生新的功能,目标是简化和加速数据转换,同时提高模型准确性。使用机器学习模型时需要特征工程。不管是数据还是架构,一个可怕的特性都会对你的模型产生直接的影响。

现在为了更容易地理解它,让我们看一个简单的例子。以下是 x 市的房价。它显示了房子的面积和总价。

抽样资料

现在,这些数据可能有一些错误或可能不正确,并不是互联网上的所有来源都是正确的。首先,我们将添加一个新列来显示每平方英尺的成本。

抽样资料

这项新功能将帮助我们了解更多关于我们的数据。因此,我们有了一个新的列来显示每平方英尺的成本。有三种主要的方法可以找到任何错误。你可以利用领域知识联系物业顾问或房地产经纪人,向他展示每平方英尺的价格。如果你的律师说每平方英尺的价格不能低于 3400 英镑,你可能会有问题。数据可以通过可视化

当你绘制数据时,你会注意到一个价格与其他价格有很大的不同。在观想方法中,你可以很容易地注意到这个问题。第三种方法是用统计分析你的数据,发现什么问题。特征工程由各种过程组成

  • 特征创建:创建特征包括创建对我们的模型最有帮助的新变量。这可以是添加或删除一些功能。正如我们上面看到的,每平方英尺的成本。英国《金融时报》专栏是一个特色创作。
  • 转换:特征转换就是将特征从一种表示转换成另一种表示的功能。这里的目标是绘制和可视化数据,如果某些东西与新特征不符,我们可以减少使用的特征数量,加快训练速度,或提高某个模型的准确性。
  • 特征提取:特征提取是从数据集中提取特征以识别有用信息的过程。在不扭曲原始关系或重要信息的情况下,这将数据量压缩为便于算法处理的可管理数量。
  • 探索性数据分析:探索性数据分析(EDA)是一个强大而简单的工具,可以通过探索数据的属性来提高对数据的理解。当目标是创建新的假设或在数据中发现模式时,经常应用该技术。它通常用于大量以前没有分析过的定性或定量数据。
  • 基准测试:基准测试模型是最用户友好的、可靠的、透明的和可解释的模型,你可以用它来衡量你自己的模型。运行测试数据集,看看你的新机器学习模型是否优于公认的基准,这是一个好主意。这些基准通常用作比较不同机器学习模型(如神经网络和支持向量机、线性和非线性分类器,或者不同方法(如 bagging 和 boosting)之间的性能的衡量标准。要了解关于特征工程步骤和过程的更多信息,请查看本文末尾提供的链接。现在,让我们来看看为什么在机器学习中需要特征工程。

特征工程的重要性

特征工程是机器学习中非常重要的一步。特征工程是指将人工特征设计成算法的过程。然后,该算法使用这些人工特征来提高其性能,或者换句话说,获得更好的结果。数据科学家大部分时间都在和数据打交道,让模型准确变得很重要。

作者图片

当特征工程活动正确完成时,产生的数据集是最佳的,并且包含影响业务问题的所有重要因素。作为这些数据集的结果,产生了最准确的预测模型和最有用的见解。

机器学习的特征工程技术

让我们看看一些你可以使用的特征工程最佳技术。列出的一些技术可能更适合某些算法或数据集,而其他技术可能在所有情况下都有用。

1。插补

在为机器学习准备数据时,缺失值是最典型的问题之一。人为错误、数据流中断、隐私问题和其他因素都可能导致丢失值。不管什么原因,缺失值都会对机器学习模型的性能产生影响。插补的主要目标是处理这些缺失值。有两种类型的插补:

  • 数字插补:为了计算出当前人口中应该分配多少数字,我们通常使用已完成的调查或人口普查的数据。这些数据集可以包括关于有多少人吃不同类型的食物,他们是否生活在气候寒冷的城市或国家,以及他们每年挣多少钱的信息。这就是为什么当某些信息缺失时,数字插补被用来填补调查或普查中的空白。

用 0 填充所有缺少的值

data = data.fillna(0)

  • 分类插补:处理分类列时,用列中的最高值替换缺失值是一个聪明的解决方案。但是,如果您认为该列中的值是均匀分布的,并且没有占主导地位的值,则输入类似“其他”的类别将是一个更好的选择,因为在这种情况下,您的插补更有可能收敛到随机选择。

分类列的最大填充函数

数据['列名']。fillna(data['column_name']。value_counts()。idxmax(),inplace=True)

2。处理异常值

异常值处理是一种从数据集中移除异常值的技术。这种方法可用于各种规模,以产生更准确的数据表示。这对模型的性能有影响。根据型号的不同,影响可能很大,也可能很小;例如,线性回归特别容易受到异常值的影响。该程序应在模型训练之前完成。处理异常值的各种方法包括:

  1. 删除:从分布中删除包含异常值的条目。然而,如果在众多变量中存在异常值,这种策略可能会导致数据手册的大部分内容丢失。
  2. 替换值:或者,异常值可作为缺失值处理,并用适当的插补替换。
  3. 封顶:用任意值或变量分布的值来代替最大值和最小值。
  4. 离散化:离散化是将连续的变量、模型、函数转化为离散的过程。这是通过构建一系列连续的区间(或箱)来实现的,这些区间跨越了我们期望的变量/模型/函数的范围。

3。日志转换

对数变换是数据科学家使用最多的技术。它主要用于将偏态分布转化为正态分布或不太偏态的分布。我们取一列中值的对数,并利用这些值作为这个转换中的列。它用于处理混乱的数据,数据变得更接近正常的应用程序。

//日志示例

df[log _ Price]= NP . log(df[' Price '])

4。一键编码

独热编码是一种编码类型,其中有限集合的元素由该集合中的索引来表示,其中只有一个元素将其索引设置为“1”,并且所有其他元素被分配范围[0,n-1]内的索引。与二进制编码方案相反,在二进制编码方案中,每个比特可以表示 2 个值(即 0 和 1),该方案为每个可能的情况分配唯一的值。

5。缩放比例

特征缩放是机器学习中最普遍和最困难的问题之一,但它是正确处理的最重要的事情之一。为了训练一个预测模型,我们需要具有一组已知特征的数据,这些数据需要适当地放大或缩小。这篇博文将解释特征缩放是如何工作的,为什么它很重要,以及一些关于开始特征缩放的提示。

在缩放操作之后,连续特征在范围方面变得相似。尽管许多算法不需要这一步,但这样做仍然是个好主意。另一方面,k-NN 和 k-Means 等基于距离的算法需要缩放的连续特征作为模型输入。有两种常见的缩放方式:

标准化:通过标准化(或最小-最大标准化),所有值在 0 和 1 之间的指定范围内缩放。这种修改对要素的分布没有影响,但是由于标准差较低,它会加剧异常值的影响。因此,建议在标准化之前处理异常值。

标准化:标准化(也称为 z 分数标准化)是在考虑标准偏差的同时缩放值的过程。如果特征的标准偏差不同,这些特征的范围也将不同。结果降低了特征中异常值的影响。为了得到一个平均值为 0、方差为 1 的分布,所有数据点都要减去它们的平均值,结果再除以分布的方差。

了解更多关于 特征工程技术

少数最佳功能工程工具

有许多工具可以帮助您自动化整个特征工程过程,并在短时间内为分类和回归任务生成大量特征。让我们来看看工程工具的一些特性。

功能工具

Featuretools 是一个执行自动化特征工程的框架。它擅长将时态和关系数据集转换为机器学习的特征矩阵。Featuretools 与您已经拥有的机器学习管道构建工具相集成。只需手动操作的一小部分时间,您就可以加载 pandas 数据框架并自动构建重要要素。

图像来源

功能工具摘要

  • 易于上手,良好的文档和社区支持
  • 它通过将原始数据与您对数据的了解相结合,帮助您为机器学习和预测建模构建有意义的特征。
  • 它提供 API 来验证只有合法的数据被用于计算,防止你的特征向量中的标签泄漏。
  • Featuretools 包括一个低级函数库,可分层生成要素。
  • 它的 AutoML 库(EvalML)可以帮助您构建、优化和评估机器学习管道。
  • 擅长处理关系数据库。

了解更多关于 功能工具

自动吃饭

AutoFeat 有助于通过自动特征工程和选择来执行线性预测模型。AutoFeat 允许您选择输入变量的单位,以避免构建物理上无意义的特征。

来源

自动汇总

  • AutoFeat 可以通过一个热编码轻松处理分类特征。
  • 该包中的 AutoFeatRegressor 和 AutoFeatClassifier 模型具有与 scikit-learn 模型相似的界面
  • 不擅长处理关系数据的通用自动特征工程。
  • 它在物流数据中很有用

了解更多关于 自动调整

TsFresh

tsfresh 是一个 python 包。它自动计算大量的时间序列特征。此外,该软件包包括在回归和分类任务中评估这些性状的解释力和显著性的方法。

图像来源

t 最新摘要

  • 它是时间序列分类和回归的最佳开源 python 工具。
  • 它有助于提取峰值数量、平均值、最大值、时间反转对称性统计等信息。
  • 它可以与 FeatureTools 集成。

了解更多 TsFresh

OneBM

OneBM 直接与数据库的原始表交互。它慢慢地连接表,在关系树上选择不同的路径。它识别联合结果中的简单数据类型(数字或分类)和复杂数据类型(一组数字、一组类别、序列、时间序列和文本),并对提供的类型应用预定义的特征工程方法。

  • 关系数据和非关系数据都受支持。
  • 与 FeatureTools 相比,它可以生成简单和复杂的特征。
  • 它在 Kaggle 比赛中接受了测试,并超过了最先进的模型。

了解更多关于 OneBM

ExploreKit

ExploreKit 基于这样一种想法,即极其丰富的功能通常是操作基本功能的结果,它确定了常用的操作符来独立地改变每个功能或组合多个功能。元学习用于对候选特征进行排序,而不是对所有已开发的特征进行特征选择,这可能非常庞大。

了解更多关于explore kit

对比

结论

特征工程是从原始数据开发新的数据特征。通过这种技术,工程师分析原始数据和潜在信息,以提取新的或更有价值的特征集。特征工程可以被看作是数学优化的一种概括,它允许更好的分析。希望你了解了特征工程,它的技术和工程师使用的工具。如果你对这篇文章有任何疑问,你可以发表评论。

保持安全和愉快的体验!!

参考文献及推荐阅读:

什么是 GPT-3,为什么它如此强大?

原文:https://towardsdatascience.com/what-is-gpt-3-and-why-is-it-so-powerful-21ea1ba59811?source=collection_archive---------3-----------------------

理解这种生成类似人类文本的语言模型背后的宣传

帕特里克·托马索在 Unsplash 上的照片

GPT-3(预训练生成变压器 3)是一种语言模型,由旧金山人工智能研究实验室 OpenAI 创建。这个拥有 1750 亿个参数的深度学习模型能够产生类似人类的文本,并在拥有数千亿个单词的大型文本数据集上进行训练。

“我对拥有 302 个神经元的蠕虫是有意识的这一想法持开放态度,因此我对拥有 1750 亿个参数的 GPT-3 也是有意识的这一想法持开放态度。”—大卫·查尔莫斯

自去年夏天以来,GPT-3 已经成为头条新闻,整个创业公司都是使用这个工具创建的。然而,重要的是要了解 GPT-3 背后的事实以及它是如何工作的,而不是迷失在围绕它的所有宣传中,并将其视为可以解决任何问题的黑匣子。

在这篇文章中,我将为您提供 GPT-3 如何工作的高级概述,以及该模型的优势和局限性,以及您自己如何使用它。

GPT 3 号是如何工作的

在其核心,GPT-3 基本上是一个变压器模型。Transformer 模型是序列到序列深度学习模型,可以在给定输入序列的情况下产生一系列文本。这些模型是为文本生成任务设计的,例如问答、文本摘要和机器翻译。下图展示了在给定英语输入序列的情况下,transformer 模型如何迭代生成法语翻译。

在机器翻译任务中,转换器反复预测下一个单词。图片由作者提供。

Transformer 模型的操作与 LSTMs 不同,它使用多个被称为注意块的单元来学习文本序列中哪些部分值得关注。单个转换器可以具有几个独立的注意块,每个注意块学习从词类到命名实体的语言的独立方面。对于变压器如何工作的深入概述,你应该看看我下面的文章。

GPT-3 是由 OpenAI 创建的第三代 GPT 语言模型。GPT 3 号与之前型号的主要区别在于它的大小。GPT-3 包含 1750 亿个参数,是 GPT-2 的 17 倍,大约是微软图灵 NLG 模型的 10 倍。参考我在上面列出的前一篇文章中描述的转换器架构,GPT-3 有 96 个关注块,每个关注块包含 96 个关注头。换句话说,GPT 3 基本上是一个巨大的变形金刚模型。

基于介绍该模型的原始论文,使用以下大型文本数据集的组合来训练 GPT-3:

  • 普通爬行
  • 网络文本 2
  • 书籍 1
  • 书籍 2
  • 维基百科语料库

最终的数据集包含了很大一部分来自互联网的网页、大量的书籍和所有的维基百科。研究人员使用这个拥有数千亿单词的数据集来训练 GPT-3 生成其他几种语言的英语文本。

为什么 GPT 3 号如此强大

自去年夏天以来,GPT-3 已经成为头条新闻,因为它可以执行各种各样的自然语言任务,并生成类似人类的文本。GPT-3 可以执行的任务包括但不限于:

  • 文本分类(即。情感分析)
  • 问题回答
  • 文本生成
  • 文本摘要
  • 命名实体识别
  • 语言翻译

基于 GPT-3 可以执行的任务,我们可以认为它是一个可以在接近人类的水平上执行阅读理解和写作任务的模型,只是它看到的文本比任何人一生中阅读的文本都多。这正是 GPT 3 号如此强大的原因。整个创业公司都是用 GPT-3 创建的,因为我们可以把它想象成一把通用的瑞士军刀,用来解决自然语言处理中的各种问题。

GPT 新协议的局限性

虽然在撰写本文时,GPT-3 是最大的,也可以说是最强大的语言模型,但它有自己的局限性。事实上,每一个机器学习模型,无论多么强大,都有一定的局限性。这个概念是我在下面关于没有免费的午餐定理的文章中详细探讨过的。

考虑下面列出的 GPT 协议-3 的一些限制:

  • GPT 3 号缺乏长期记忆——该模型不像人类那样从长期互动中学到任何东西。
  • 缺乏可解释性——这是一个影响极其广泛和复杂的问题。GPT-3 是如此之大,以至于很难解释或说明它产生的输出。
  • 有限的输入大小 —变压器有固定的最大输入大小,这意味着 GPT-3 可以处理的提示不能超过几句话。
  • 缓慢的推断时间——因为 GPT 3 号太大了,模型产生预测需要更多的时间。
  • GPT-3 遭受偏见——所有的模型都只和用来训练它们的数据一样好,GPT-3 也不例外。例如,这篇论文表明 GPT-3 和其他大型语言模型包含反穆斯林偏见。

虽然 GPT-3 很强大,但它仍然有局限性,这使它远远不是一个完美的语言模型或人工通用智能的例子(AGI)。

如何使用 GPT-3

目前,GPT-3 不是开源的,OpenAI 决定通过商业 API 提供该模型,你可以在这里找到。该 API 处于私人测试阶段,这意味着您必须填写 OpenAI API 等待列表表单才能加入使用该 API 的等待列表。

OpenAI 还为希望使用 GPT-3 的学术研究人员提供了一个特殊的项目。如果你想使用 GPT-3 进行学术研究,你应该填写学术访问申请

虽然 GPT 3 不是开源或公开的,但它的前身 GPT 2 是开源的,可以通过拥抱脸的变形金刚库访问。如果你想使用这个更小但仍然强大的语言模型,请随意查看拥抱脸的 GPT-2 实现的文档。

摘要

自去年夏天以来,GPT-3 受到了很多关注,因为它是目前为止在撰写本文时创建的最大的、可以说是最强大的语言模型。然而,GPT-3 仍然受到几个限制,使它远远不是一个完美的语言模型或 AGI 的例子。如果你想将 GPT-3 用于研究或商业目的,你可以申请使用开放人工智能的 API,它目前处于私人测试阶段。否则,你总是可以直接使用 GPT 2,这是公开可用和开源的,这要感谢 HuggingFace 的变形金刚库。

加入我的邮件列表

你想在数据科学和机器学习方面变得更好吗?您想了解数据科学和机器学习社区的最新图书馆、开发和研究吗?

加入我的邮件列表,获取我的数据科学内容的更新。当你注册的时候,你还会得到我免费的解决机器学习问题的逐步指南

来源

  1. T.布朗,b .曼,n .赖德等。语言模型是少量学习者,(2020),arXiv.org。
  2. A.Abid,M. Farooqi 和 J. Zou,大型语言模型中持续的反穆斯林偏见,(2021),arXiv.org。
  3. 维基百科,人工通用智能,(2021),维基百科免费百科。
  4. G.Brockman,M. Murati,P. Welinder 和 OpenAI, OpenAI API ,(2020),OpenAI 博客。
  5. A.瓦斯瓦尼,n .沙泽尔等人。al,注意力是你所需要的全部,(2017),第 31 届神经信息处理系统会议。

IMU 是什么?

原文:https://towardsdatascience.com/what-is-imu-9565e55b44c?source=collection_archive---------10-----------------------

IMU(惯性测量单元)是以时间序列格式提供运动数据的常用传感器之一。在本帖中,我们来回顾一下。

简介

IMU(惯性测量单元)传感器提供时间序列数据,用于人类活动识别问题、跟踪和导航问题等。在人工智能时代,这种廉价而可靠的传感器可以提供大量数据,因此人们可能会使用机器/深度学习将其推广到各个领域的许多有用的见解。

我们在哪里可以找到 IMU 传感器?

实际上,几乎到处都是!先说我们的智能手机。大多数智能手机设备内部都配备了 IMU 传感器,这是一种 MEMS(微机电系统)技术。很多平板设备里也有。IMU 在汽车和航空工业中非常常见,因为它可以更好地确定车辆的位置和方向。

总体描述

惯性测量单元是导航领域常见的传感器之一(但不是唯一的)。它包含一个加速度计和陀螺仪(有时也有一个磁力计,很少也有一个气压计)。第一个负责加速度测量,第二个负责角速度测量。每一个度量都在三轴坐标系中表示,所以一般来说,它们一起产生 6 维度量时间序列流。

作者图片

它是如何工作的?

因此,让我们针对 4 种不同的传感器将讨论分为 4 个部分:

1.加速度计是一种测量特定力的传感器(身体质量将力归一化)。它在其局部框架中提供 x、y 和 z 轴上的加速度。

2.陀螺仪是一种传感器,在其局部坐标系中测量围绕 x、y 和 z 轴的角速度。一般来说,对测量结果进行积分会得到角度本身。

3.磁力计是一种测量地球磁场并提供航向的传感器(指南针就是这样一种设备)。如果它包含在 IMU 中,我们通常称之为“9 轴 IMU”

4.气压计是一种测量气压的传感器,可以提供海拔高度。

阿波罗 11 号惯性测量单元

跟踪关系及主要缺点

IMU 的一个主要缺点是当为了找到位置而单独将它们与导航方程结合时会产生累积误差。例如,噪声加速度的双重积分导致不准确的位置解,最终导致巨大的漂移。因此,许多跟踪/导航应用使用额外的传感器,例如 GNSS 接收器和照相机。这些传感器以较低的频率提供位置信息,并提供累积误差的复位。

作者图片

利用 IMU 传感器数据解决 HAR 问题

其中一个著名的时间序列数据集是 2014 年发布的包含记录的 IMU 信号的人类活动识别。以 50[Hz]的频率对一些活动的集合进行标记和存储。它被广泛用于评估最先进的时间序列分类算法。要了解更多,可以参考原论文。建立了许多算法来仅基于 IMU 信号识别人类活动,因为它可以被公式化为分类问题。与图像/视频等相比,将 IMU 信号用于 HAR 的主要优势。,就是数据量小。这个优点允许 HAR 分类器的紧凑表示。

总结和个人笔记

IMU 是世界范围内常见的传感器之一,几乎在任何地方都被用于各种任务。2021 年,我创办了阿尔玛理工。LTD 仅提供 IMU 导航解决方案。我邀请你关注我们的 LinkedIn:【https://www.linkedin.com/company/alma-tech-ltd/】T4。感谢你阅读这篇文章。

进一步阅读

[1]一些生产和销售 IMU 的伟大公司有 VectorNavWIT-motionSparton

[2] Anguita,Davide 等,“使用智能手机进行人类活动识别的公共领域数据集。”埃桑。第三卷。2013.

— — — — — — — — — — — — — — — — — — — — — — — —

关于作者

Barak 获得了以色列理工学院的航空工程学士学位(2016 年)、硕士学位(2018 年)以及经济和管理学士学位(2016 年,成绩优异)。他曾在高通工作(2019-2020),在那里他主要研究机器学习和信号处理算法。巴拉克目前正在海法大学攻读博士学位。他的研究兴趣包括传感器融合、导航、深度学习和估计理论。‏

什么是 Isomap?

原文:https://towardsdatascience.com/what-is-isomap-6e4c1d706b54?source=collection_archive---------27-----------------------

如何借鉴和减少复杂高维的形状?

介绍

我们无法将 3 维以上的高维数据可视化。那么,当我们面对这种几乎在每个数据科学应用中都很常见的情况时,我们该怎么办呢?像 PCA 这样的降维技术经常失败,因为这些方法有一个简单的假设:数据可以线性减少。然而,对于大多数类型的高维数据,可能存在非线性关系,因此我们需要在降维时保持这种形状。这就是像 Isomap 这样的多种学习技术发挥作用的地方。

注意:我将在后续文章中讨论许多其他多样的学习技巧,所以也要留意这一点!

你可以把流形想象成一个形状或曲面。这意味着 Isomap 正在尝试学习数据的形状。从高层次来看,这比看起来要简单。然而,理解这项技术试图做到这一点的细微差别可能需要一些时间。

Isomap

Isomap 是 等距映射的简称。 该映射的目标是保持两点之间的测地线距离。测地线更正式的定义是表面上的最短路径。通过了解成对测地线距离,Isomap 的目标是在将数据向下投影到指定的维度之前近似数据的几何。Isomap 分 3 个主要步骤运行:【1】

  • 构建一个邻域图,通常通过 k-最近邻
  • 通过 Dijkstra 算法或 Floyd-Warshall 算法计算两点之间的最短路径。
  • 通过部分特征值分解构造 d 维嵌入(即取核的 d 个最大特征值。

以下是 Isomap 如何在两个用于流形学习可视化的基础数据集上操作,即 S 曲线和瑞士卷。

s 曲线:

首先,使用sklearn.datasets,我们将在s-curve上生成 1000 个点。

现在我们已经生成了 S 曲线,让我们利用 Isomap 尝试将其降低到二维。

就像在k-Nearest Neighbors中一样,邻居的数量是一个需要调整以获得理想性能的参数。虽然我用 35 向您展示了实现流形学习过程的最佳可能方式,但是使用这段代码并调整n_neighbors参数来看看这如何影响最终的形状。

正如我们所看到的,S 曲线的黄色部分距离 3d 图中的深紫色/蓝色最远,这意味着我们希望流形的这些部分彼此相距最远,这是在最短路径构造过程中实现的。

瑞士卷:

现在,使用相同的模块,我们将在一个swiss_roll上生成 1000 个点。

现在,使用 Isomap,我们也将尝试从这个形状中学习。

同样,我们能够像s-curve一样“展开”形状。在我们能够区分和分离彼此相距较远的形状段的情况下,上述相同的性质也成立。此外,由于上面列出的第 2 步和第 3 步,我们还允许相互靠近的形状段能够在距离上更近。

最后的想法

到目前为止,对于 Isomap 如何尝试从不同的形状中学习,我们应该有了一个坚实的直觉。虽然这些数据集通常用于获得关于这些类型的算法如何执行的直觉,但尝试从非常高维的数据中创建和学习以很好地理解这如何在大规模下工作是很重要的。

如果有什么问题,欢迎在下面留言!感谢您的阅读。

所有图片均为作者所有,除非另有说明。

参考

【1】特南鲍姆,J.B 德席尔瓦五世;非线性降维的全局几何框架。理科 290 (5500)

NLP 模型和圣经中的名字有什么关系?

原文:https://towardsdatascience.com/what-is-it-with-nlp-models-and-biblical-names-c389cf7a24c9?source=collection_archive---------25-----------------------

不同 NER 模型的比较及其检测不同命名实体的能力。

GIF via giphy——来源:http://www.amc.com/shows/breaking-bad

这篇博客文章强调了 spaCy 和其他命名实体识别模型无法准确检测人名的问题,特别是如果他们是圣经中的名字。常规名字和圣经名字之间的检测差异是相当大的。

你会看到,对于我们能想到的最简单的例子,“我的名字是 X”,圣经中的名字几乎从来没有被发现是人名。

我试图弄清楚这件事,并相信我有一个答案。但首先,让我们用两个 spaCy 模型(使用 spaCy 版本 3.0.5)做一个简短的实验。

比较圣经名字和其他名字的检出率

为什么一开始就有区别?不同检测率的原因可能是:

  1. 事实上,圣经中的名字有时更老,更不常见(因此在模型被训练的数据集中可能不太常见)。
  2. 周围的句子不太可能与原始数据集中的特定名称同时出现。
  3. 数据集本身的问题(例如人为的错误注释)。

为了(简单地)测试这些假设,我们将圣经中的名字与新旧名字以及三个模板进行比较,其中两个模板来自圣经:

  • “我的名字是 X”
  • " X 说,你为什么连累我们?"
  • 她又怀孕,生了一个儿子。她叫他的名字 x。”

让我们从创建名单和模板开始:

运行空间模型并检查是否检测到“人”的方法:

模型 1: spaCy 的en_core_web_lg模型

  • 该模型使用原始(不基于变压器)空间架构。
  • 它在on notes 5.0数据集上进行训练,并在命名实体上具有 0.86 F-measure。

加载模型:

让我们运行它:

以下是我们得到的结果:

Model name: en_core_web_lg
Name set: Biblical, Template: "My name is {}"
Recall: 0.25Name set: Other, Template: "My name is {}"
Recall: 0.94Name set: Biblical, Template: "And {} said, Why hast thou troubled us?"
Recall: 0.67Name set: Other, Template: "And {} said, Why hast thou troubled us?"
Recall: 0.94Name set: Biblical, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 0.58Name set: Other, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 0.94Detailed results:
{('And she conceived again, a bare a son; and she called his name {}.', 'Biblical'): {
'Abraham': True,
'David': True,
'Isaac': False,
'Jacob': False,
'Jesus': False,
'John': True,
'Judas': False,
'Mary': True,
'Matthew': True,
'Moses': False,
'Samuel': True,
'Simon': True},('And she conceived again, a bare a son; and she called his name {}.', 'Other'): {
'Ariana': True,
'Barack': True,
'Beyonce': True,
'Bill': True,
'Charles': True,
'Coby': False,
'Donald': True,
'Frank': True,
'George': True,
'Helen': True,
'Joe': True,
'Katy': True,
'Lebron': True,
'Margaret': True,
'Robert': True,
'Ronald': True,
'William': True},('And {} said, Why hast thou troubled us?', 'Biblical'): {
'Abraham': True,
'David': True,
'Isaac': True,
'Jacob': False,
'Jesus': False,
'John': True,
'Judas': False,
'Mary': True,
'Matthew': True,
'Moses': False,
'Samuel': True,
'Simon': True},('And {} said, Why hast thou troubled us?', 'Other'): {
'Ariana': True,
'Barack': True,
'Beyonce': True,
'Bill': True,
'Charles': True,
'Coby': False,
'Donald': True,
'Frank': True,
'George': True,
'Helen': True,
'Joe': True,
'Katy': True,
'Lebron': True,
'Margaret': True,
'Robert': True,
'Ronald': True,
'William': True},('My name is {}', 'Biblical'): {
'Abraham': True,
'David': False,
'Isaac': False,
'Jacob': False,
'Jesus': False,
'John': False,
'Judas': False,
'Mary': True,
'Matthew': True,
'Moses': False,
'Samuel': False,
'Simon': False},('My name is {}', 'Other'): {
'Ariana': True,
'Barack': True,
'Beyonce': True,
'Bill': True,
'Charles': True,
'Coby': False,
'Donald': True,
'Frank': True,
'George': True,
'Helen': True,
'Joe': True,
'Katy': True,
'Lebron': True,
'Margaret': True,
'Robert': True,
'Ronald': True,
'William': True}}

所以圣经名字检测和其他名字有很大的区别。

模型 2:斯帕西的en_core_web_trf模型

spaCy 最近发布了基于 huggingface transformers 库的新模型en_core_web_trf,也在 OntoNotes 5 上进行了训练。

让我们试试这个模型:

这次我们得到了:

Model name: en_core_web_trf
Name set: Biblical, Template: "My name is {}"
Recall: 0.50Name set: Other, Template: "My name is {}"
Recall: 1.00Name set: Biblical, Template: "And {} said, Why hast thou troubled us?"
Recall: 0.00Name set: Other, Template: "And {} said, Why hast thou troubled us?"
Recall: 0.11Name set: Biblical, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 0.00Name set: Other, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 0.50Detailed results:
{('And she conceived again, a bare a son; and she called his name {}.', 'Biblical'): {
'Abraham': False,
'David': False,
'Isaac': False,
'Jacob': False,
'Jesus': False,
'John': False,
'Judas': False,
'Mary': False,
'Matthew': False,
'Moses': False,
'Samuel': False,
'Simon': False},('And she conceived again, a bare a son; and she called his name {}.', 'Other'): {
'Ariana': True,
'Barack': True,
'Beyonce': True,
'Bill': False,
'Charles': False,
'Coby': False,
'Donald': True,
'Frank': True,
'George': False,
'Helen': False,
'Joe': True,
'Katy': True,
'Lebron': False,
'Margaret': False,
'Robert': False,
'Ronald': True,
'William': False},('And {} said, Why hast thou troubled us?', 'Biblical'): {
'Abraham': False,
'David': False,
'Isaac': False,
'Jacob': False,
'Jesus': False,
'John': False,
'Judas': False,
'Mary': False,
'Matthew': False,
'Moses': False,
'Samuel': False,
'Simon': False},('And {} said, Why hast thou troubled us?', 'Other'): {
'Ariana': False,
'Barack': True,
'Beyonce': True,
'Bill': False,
'Charles': False,
'Coby': False,
'Donald': False,
'Frank': False,
'George': False,
'Helen': False,
'Joe': False,
'Katy': False,
'Lebron': False,
'Margaret': False,
'Michael': False,
'Robert': False,
'Ronald': False,
'William': False},('My name is {}', 'Biblical'): {
'Abraham': False,
'David': True,
'Isaac': True,
'Jacob': False,
'Jesus': False,
'John': True,
'Judas': False,
'Mary': True,
'Matthew': True,
'Moses': False,
'Samuel': True,
'Simon': False},

('My name is {}', 'Other'): {
'Ariana': True,
'Barack': True,
'Beyonce': True,
'Bill': True,
'Charles': True,
'Coby': True,
'Donald': True,
'Frank': True,
'George': True,
'Helen': True,
'Joe': True,
'Katy': True,
'Lebron': True,
'Margaret': True,
'Robert': True,
'Ronald': True,
'William': True}}

虽然数字不同,但我们仍然看到两组之间的差异。然而,这一次似乎老名字(如海伦、威廉或查尔斯)也是该模型正在努力解决的问题。

这是怎么回事?

作为我们在 Presidio (数据去识别工具)上工作的一部分,我们开发了检测 PII 实体的模型。为此,我们从现有的 NER 数据集中提取模板句子,包括 CONLL-03 和 OntoNotes 5。这个想法是用额外的实体值来扩充这些数据集,以便更好地覆盖姓名、文化和种族。换句话说,每当我们在数据集上看到一个带有标记人名的句子,我们就提取一个模板句子(例如The name is [LAST_NAME], [FIRST_NAME] [LAST_NAME]),然后用多个样本替换它,每个样本包含不同的名字和姓氏。

当我们手动检查模板结果时,我们发现在新的模板数据集中仍然有许多名字没有转换成模板。这些名字大部分来自于 OntoNotes 5 中包含的圣经句子。因此,OntoNotes 5 中的许多样本不包含任何个人标签,即使它们包含名称,这是 OntoNotes 数据集声称支持的一种实体类型。看起来这些模型实际上学习了数据集中的错误,在这种情况下,如果名字符合圣经,就忽略它们。

显然,在训练集和测试集中都会发现这些错误,所以一个知道圣经中的名字并不是真正的名字的模型在类似的测试集中也会成功。这是另一个例子,说明为什么 SOTA 的结果不一定是展示科学进步的最佳方式。

只是空间吗?

对两个 Flair 模型的类似评估显示,在 OntoNotes 上训练的 a 模型在该测试中取得的结果明显较低。基于 CONLL 的模型实际上做得很好!

基于 CONLL-03 的模型结果:

Model name: ner-english (CONLL)
Name set: Biblical, Template: "My name is {}"
Recall: 1.00

Name set: Other, Template: "My name is {}"
Recall: 1.00

Name set: Biblical, Template: "And {} said, Why hast thou troubled us?"
Recall: 1.00

Name set: Other, Template: "And {} said, Why hast thou troubled us?"
Recall: 1.00

Name set: Biblical, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 1.00

Name set: Other, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 0.94

基于本体注释的模型结果:

Model name: ner-english-ontonotes
Name set: Biblical, Template: "My name is {}"
Recall: 0.50

Name set: Other, Template: "My name is {}"
Recall: 1.00

Name set: Biblical, Template: "And {} said, Why hast thou troubled us?"
Recall: 0.00

Name set: Other, Template: "And {} said, Why hast thou troubled us?"
Recall: 0.83

Name set: Biblical, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 0.00

Name set: Other, Template: "And she conceived again, a bare a son; and she called his name {}."
Recall: 0.00

结论

spaCy 是当今 NLP 中发生的最令人兴奋的事情之一,它被认为是世界上最成熟、准确、快速和记录良好的 NLP 库之一。如 Flair 示例所示,这是 ML 模型中的固有问题,尤其是 ML 数据集。

总结三个相关要点:

  1. 吴恩达最近认为ML 社区应该更加以数据为中心,而不是以模型为中心。这篇文章是另一个证明这一点的例子。
  2. 这是另一个关于主要 ML 数据集的问题的例子。
  3. 清单这样的工具确实有助于验证你的模型或数据不会遭受类似的问题。一定要去看看。

这篇博文的 Jupyter 笔记本可以在这里https://gist.github.com/omri374/95087c4b5bbae959a82a0887769cbfd9找到。

关于作者: Omri Mendels 是微软首席数据科学家。

什么是无似然推理,它有哪些用例?

原文:https://towardsdatascience.com/what-is-likelihood-free-inference-and-what-are-its-use-cases-5b3f0420e2f4?source=collection_archive---------32-----------------------

探索数据科学

无似然推理和元学习的进步让亚瑟·佩萨(UCL 大学量子计算专业的博士生)和安托万·韦汉高(比利时国家科学研究基金会的博士生)感到好奇:“我们能否建造一台机器,它将可调整的模拟器和真实数据作为输入,并返回最符合一些真实数据的模拟器版本?“阅读这篇令人大开眼界的文章,了解他们的发现。它提供了多种 gif 和图表,以方便您探索这些复杂的概念。

什么是线性回归?

原文:https://towardsdatascience.com/what-is-linear-regression-e44d2c4bf025?source=collection_archive---------46-----------------------

线性回归是数据科学家和机器学习实践者的基本工具之一

照片由卢克·切瑟Unsplash 上拍摄

概观

本教程是关于线性回归的基础。这也是机器学习入门文章“什么是机器学习?”,可以在这里找到

那么什么是线性回归呢?

线性回归是数据科学家和机器学习实践者的基本工具之一。我们引用“什么是机器学习?”中的等式y = mx + bpost,可以认为是线性回归的基础。线性回归模型具有高度的可解释性,训练速度快,可以提供对数据的洞察,并进一步优化以做出更好的预测。如果您刚刚开始学习数据科学或机器学习,深入线性回归以了解如何使用函数来估计数据是一个好主意。

线性回归和 y = mx + b 方程有什么关系?

公式很像!对于线性回归,我们通常将等式写成:

线性回归方程

或者没有乘法符号:

线性回归方程图 2

不要担心,它没有看起来那么复杂!

让我们来看看这个等式

y 是什么?

我们仍然有y,就像在y = mx + b中一样,这是输出。这是您所关心的 y 轴值,并希望找到影响它的列或特性。

β0 是什么?

我们也有β0,读作“Not ”,并认为这是 y 截距,在y = mx + b中是b

βx 的东西呢?

既然你知道我们有来自y = mx + byb,那么我们还有mx。如果你猜对了,这就是我们看到的βx 或βx 对应的 x。贝塔就像y = mx + b中的斜坡或m。x 是来自数据的输入。x的一个例子可以是你在一个项目中投入的营销资金,然后你想让y告诉你大概从中获得了多少收入。因为在线性回归和机器学习中,我们通常有不止一个x或一列数据来帮助我们确定它与y的关系,所以我们也有许多 Betas 来与那些众多的x配对。这就像你的y = mx + b等式中有多个mx一样。

那么贝塔到底是什么?

至于β,这就是所谓的系数。这些非常重要,从本质上解释了你的模型。这些是来自线性回归的权重和学习值,可告诉您每个要素或列对预测或 y 轴变量的影响程度。

好吧,那最后一个希腊字母ε是什么?

那个希腊字母是 epsilon。这实质上意味着你的模型中会有一些无法解释的误差。另一种说法是,你可能无法用这个简短的等式解释数据中发生的所有事情,所以我们在最后加上ε,表示只是发生了一些我们现在无法解释的错误或噪声。

让我们看一个例子

对于这个例子,我们真的只需要 Scikit Learn。如果你不熟悉 Scikit Learn,它是最流行的运行机器学习算法的 Python 库之一。我将创建一些关于房价的假样本数据。我将创建卧室数量,浴室数量,平方英尺的列,然后是房子的价格。在本例中,将房屋价格视为 y 轴或y,所有其他列视为等式中的倍数x。通过线性回归模型运行数据后,我们应该看到它们是如何影响房价的。

注意:我将生成一些样本数据,并使用 Numpy 将数据存储在一个对象中。这并不是运行线性回归所特别需要的,只是为了举例而使用。

进口

这里我们导入库 Numpy 和 Scikit Learn。Numpy 用于创建数据结构,而 scikit learn 用于许多机器学习用例。

*# Import numpy to create numpy arrays*
**import** **numpy** **as** **np***# Import Scikit-Learn to allow us to run Linear Regression*
**from** **sklearn.linear_model** **import** LinearRegression

创建一些示例数据

我们在这里创建的数据是一些关于房价及其各自特征的虚假样本数据,这些特征与卧室、浴室的数量及其面积相关联。

:这些价格以 100k 为单位。所以 150 实际上意味着 150,000 美元,而不仅仅是 150 美元。

*# Creating sample data*
*# Price is represented in 100k dollars*
price = np.array([150, 500, 225, 975, 735, 950, 325, 680, 220, 330])
beds = [2, 4, 3, 5, 4, 5, 3, 4, 2, 3]
baths = [1, 2, 2, 3, 2, 3, 2, 2, 1, 2]
sq_ft = [1100, 2800, 1500, 4800, 3500, 5000, 2200, 3100, 1650, 2000]

结构化数据

这两行用于正确地形成数据,以便与 scikit learn 一起使用。我们将多个数组(或 x)堆叠成一个 numpy 对象。同时还指定价格数组的“形状”。

*# Combining the multiple lists into one object called "X"*
X = np.column_stack([beds, baths, sq_ft])*# Reshaping the price list to work with scikit learn*
y = price.reshape(-1, 1)

创建线性回归模型

现在,我们可以使用下面这条线创建线性回归模型的外壳。

*# Instantiating the model object*
model = LinearRegression()

一旦我们创建了外壳,我们需要用数据来拟合模型。这就是我们如何获得 Beta 值,并找到一些函数,可以近似一所房子的价格,给定它的卧室,浴室的数量,以及它的平方英尺。

*# Fitting the model with data*
fitted_model = model.fit(X, y)

我们训练了一个线性回归模型!现在让我们看看这些系数,并解读它们的含义。

The coefficient, or the beta one value, for number of bedrooms = 115.55210418237826The coefficient, or the beta two value, for number of bathrooms = -112.47160198590979The coefficient, or the beta three value, for square footage = 0.18603883444673386The y-intercept, or the 'beta not' value = 
-184.8865379117235

解释模型及其系数

那么这些β值或系数意味着什么呢?

先说 y 截距 a.k.a β0 或者“Not”。

这个值大约是-184.89,那么这意味着什么呢?这意味着,如果我们有 0 间卧室,0 间浴室,0 平方英尺(所有的都是 0 ),我们最终会得到-184k 的负价格。显然这是不现实的,但是请记住,这样的模型并不了解房价是如何运行的。真的就把这当成 y 轴截距,不管它在这种情况下是否有意义。

接下来让我们看看其他系数。

从卧室数量开始,系数值约为 115.56。这意味着,如果卧室的数量增加一间(而其他投入没有变化),房屋的价格将平均增加约 11.5 万美元。这与平方英尺系数相同,只是如果平方英尺增加 1 平方英尺,价格将平均增加 0.19 万美元。将系数视为斜率值或y = mx + b中的m。随着x的增加,在卧室的情况下,斜率约为 115.56,并使 y 轴增加这个数值。

负系数和浴室是怎么回事?

这是一个很棒的问题。这意味着浴室数量每增加一个,模型预计价格会下降 11.2 万美元。这就是为什么我们看到一个负值。这有道理吗?不完全是。然而,这是一个很好的示例问题,展示了你可以有负系数,以及我们如何解释它们。在机器学习中,我们还必须警惕共线性,或者当多个特征彼此高度相关时。此外,更多的数据有助于欠拟合机器学习模型。

接下来你会怎么做?

关于如何使您的模型更好的一些后续步骤包括:

  • 添加更多行数据
  • 规范化您的数据。在 0 和 1 之间或-1 和 1 之间缩放每一列以帮助建模。当您不缩放数据时,模型的学习会变得很困难,因为它可能会对自然值较高的要素进行加权,比其他要素更高。
  • 使用套索或岭回归进行正则化(尝试使用对模型影响较大的要素或输入,同时降低其他要素或输入的权重)。
  • 查找更多要使用的功能或列。
  • 研究加法模型或其他回归模型。

结论

我希望这篇教程是有启发性的,你可以学到关于线性回归的知识。线性回归是任何数据科学家工具箱中的基本工具。您可以查看系数,并尝试了解哪些数据会影响您的模型。您可以使用线性回归作为基线工具来确定其他模型是否可能更好。线性回归训练速度快,不需要大量数据。虽然,在很多情况下可能太简单了。所以,不要把更复杂的方法或者额外的方法算出来,让你的线性模型更好!

链接

什么是逻辑回归?

原文:https://towardsdatascience.com/what-is-logistic-regression-d3f59ef1a9b?source=collection_archive---------22-----------------------

逻辑回归是数据科学家和机器学习工程师的基本分类工具。

克莱班克斯Unsplash 拍摄的照片

本教程是关于应用逻辑回归的基础,使用了一点 Python。也是《什么是线性回归》这篇帖子的延续。,可以在这里找到

关于逻辑回归

这有点违反直觉,但逻辑回归通常被用作分类器。事实上,逻辑回归是科学家使用的最常用和最著名的数据分类方法之一。这种分类方法背后的思想是输出将在 0 和 1 之间。本质上是返回你给模型的数据属于某个组或类的概率。在那里,开发者可以根据他们想要的谨慎程度来设置阈值。

例如,我可以将阈值设置为 0.8。这意味着逻辑回归模型的任何输出等于或大于 0.8 将被归类为 1。任何低于 0 的都将被归类为 0。从那里,我可以根据我的用例以及我关心的指标,将 0.8 的阈值向上或向下移动。

逻辑回归和线性回归有什么关系?

线性回归公式可以包含在逻辑回归公式中。如果你还记得,线性回归公式是:

线性回归方程

嗯……逻辑回归的公式是:

逻辑回归方程

我们可以用线性回归公式替换掉y:

逻辑回归方程 2

这个逻辑回归方程是干什么的?

线性回归部分提供一些输出值,逻辑回归部分将这些值推到 0 和 1 之间(包括 0 和 1)。这在某种程度上形成了一条 S 曲线,你可能以前见过。

如果没有,下面是 Scikit 学习文档中的一个示例:

https://sci kit-learn . org/stable/auto _ examples/linear _ model/plot _ logistic . html

让我们用 Python 编写一个例子

我们主要需要流行的机器学习库 Scikit Learn。Numpy 稍后用于构建一些数据结构,将数据输入 Scikit Learn。

我们将创建关于患者的样本数据,以及他们是否应该被批准进行某种类型的治疗。我们将为年龄、体重、平均静息心率创建列,然后为批准决定创建列。除了批准决定之外,我们使用所有的列作为我们的特征。我们的模型应该估计每个特征对于批准决定的重要性,并且我们应该得到患者被批准治疗的概率。

:这个数据完全是编造的。这并不表示医疗专业人员进行了任何真正的治疗或决策。

库导入

*# Import numpy to create numpy arrays*
**import** **numpy** **as** **np**

*# Import Scikit-Learn to allow us to run Logistic Regression*
**from** **sklearn.linear_model** **import** LogisticRegression

为我们的模型创建数据

我们正在创建的数据包含与年龄、体重和平均心率相关的特征。我们的批准决定将是一个名为approved的列,包含 0 或 1,表示患者是否被批准。0 表示患者未被批准,1 表示患者被批准。

*# Sample Data*
approved = np.array([1, 1, 1, 0, 0, 0, 1, 1, 0, 0])
age = [21, 42, 35, 33, 63, 70, 26, 31, 52, 53]
weight = [110, 180, 175, 235, 95, 90, 175, 190, 250, 185]
avg_hrt = [65, 70, 72, 77, 67, 62, 68, 65, 73, 75]

构建要素和标签

我们将多个 Python 数组堆叠成一个 numpy 对象。此外,指定认可阵列的“形状”。

*# Combining the multiple lists into one object called "X"*
X = np.column_stack([age, weight, avg_hrt])*# Reshaping the approvals to work with scikit learn*
y = approved.reshape(len(approved), )

让我们建立一个逻辑回归模型

首先,我们实例化模型。

*# Instantiating the model object*
model = LogisticRegression()

现在我们可以用数据来拟合模型。这就是我们如何估计患者的认可状态——给定他们的年龄、体重和平均静息心率。

*# Fitting the model with data*
fitted_model = model.fit(X, y)

现在模型已经训练好了,让我们来看看系数。

年龄的系数= -0.6785458695283049
体重的系数=-0.10023841185826
平均静息心率的系数=-0.49686

解释系数

这些系数告诉我们,年龄是最重要的因素。紧随其后的是平均静息心率。对于这个特定的数据+案例,患者的体重排在最后。

系数的值量化了这些特性对获得批准的可能性有多大的影响。请这样想:

随着特征值(左侧)的增加,获得批准的概率降低,因为系数为负。减少量由系数值量化(右侧)。

*左侧和右侧指的是系数的打印结果,如上所示。

这有助于了解哪些特征有助于您的模型并影响您的决策。当谈到可解释的人工智能时,通常有一种方法来解释模型并看到模型如何做出决定是极其重要的。在这种情况下,我们可以查看系数来确定每个功能的影响程度,以及为什么算法可能会选择批准某个人,而不是其他人。

让我们用新数据来检验这个模型

创建新数据

new_age = [20, 45, 33, 31, 62, 71, 72, 25, 30, 53, 55]
new_weight = [105, 175, 170, 240, 100, 95, 200, 170, 195, 255, 180]
new_avg_hrt = [64, 68, 70, 78, 67, 61, 68, 67, 66, 75, 76]*# Combining the multiple lists into one object called "test_X"*
test_X = np.column_stack([new_age, new_weight, new_avg_hrt])

通过模型运行新数据

results = fitted_model.predict(test_X)

看一看结果

print(f"Our approval results are: **{**results**}**")

我们的审批结果是:[1 1 1 0 0 0 1 1 0 0]

如您所见,Scikit Learn 自动为我们设置了一个阈值,并决定了我们的批准。如果您想查看实际的概率,我们可以使用 Scikit Learn 提供的另一个函数- predict_proba():

results_w_probs = fitted_model.predict_proba(test_X)print("Our approval results with their probabilites:")
**for** result **in** results_w_probs:
    print(f"Probability not approved = **{**result[0]**:**.2f**}**, Probability approved = **{**result[1]**:**.2f**}**")

我们的批准结果及其概率:
不批准概率= 0.00,批准概率= 1.00
不批准概率= 0.28,批准概率= 0.72
不批准概率= 0.00,批准概率= 1.00
不批准概率= 0.84,批准概率= 0.16
不批准概率= 0.92,批准概率= 0.08
不批准概率= 0.99,批准概率= 0.01 【T8 通过概率= 0.00
未通过概率= 0.00,通过概率= 1.00
未通过概率= 0.00,通过概率= 1.00
未通过概率= 1.00,通过概率= 0.00
未通过概率= 1.00,通过概率= 0.00

注意:1 和 0 的概率列表与我们之前传递给predict_proba()函数的初始 numpy 数组顺序相同。

在这里,我们可以设置不同的阈值,根据概率提供不同数量的批准。如果要谨慎审批人,可以把门槛设成 0.8 或者 0.9。如果治疗是安全的,非侵入性的,并且成本很低——我们可以将阈值降低到 0.25 或 0.3。这完全取决于用例。

后续步骤

我希望你喜欢这个教程,并发现它很有用!如果你想让你的模型变得更好,下面是你应该考虑的一些后续步骤:

  • 查找并添加更多数据,无论是更多行数据还是新功能。
  • 测试不同的阈值。
  • 了解分类指标。(Scikit Learn 的分类报告是一个很好的起点)
  • 针对对您的用例有意义的分类指标定制您的模型。准确性可能不是最好的衡量标准。(一个例子是当你的班级不平衡时)
  • 探索更复杂的模型,如 XGBoost、LightGBM、SVM、神经网络等。

链接

什么是机器学习?

原文:https://towardsdatascience.com/what-is-machine-learning-91040db474f9?source=collection_archive---------17-----------------------

以 Python 实现的多项式回归为例介绍监督和非监督学习

机器学习大类概述。

内容

这篇文章是我将要发表的一系列文章的一部分。你可以通过点击这里在我的个人博客上阅读这篇文章的更详细版本。下面你可以看到该系列的概述。

1.机器学习导论

2.回归

3.分类

一点历史

看起来,大多数人对机器学习的定义来自阿瑟·李·塞缪尔 1959 年的一句话:“让计算机从经验中学习,最终应该消除对这种详细编程工作的需求。”对此的解释是,“机器学习是一个研究领域,它赋予计算机无需显式编程就能学习的能力。”

机器学习从统计学中汲取了很多方法,但这两个领域有一个明显的区别:统计学主要涉及估计,而机器学习主要涉及预测。这种区别导致了巨大的差异,我们很快就会看到这一点。

机器学习的类别

有许多不同的机器学习方法可以解决不同的任务,并且将它们都归入严格的类别本身就是一项相当艰巨的任务。我的文章将涵盖两个基本的问题;有监督的学习和无监督的学习,可以进一步分为更小的类别,如上图所示。

值得注意的是,这些类别并不严格,例如,降维并不总是不受监督的,您可以使用密度估计进行聚类和分类。

监督学习

监督学习指的是机器学习任务的子集,在这里我们得到了一个由 N 个输入输出对组成的数据集,我们的目标是从输入到输出得出一个函数 h 。每个输入变量 variable 是一个 D 维向量(或标量),用数值表示观察值。输入变量的不同维度通常被称为特征属性。同样,每个目标变量通常是一个标量。

分类中,目标变量的可能值形成有限数量的离散类别,通常称为。一个经典的例子是识别手写数字[1]。给定一个 28×28 像素的图像,我们可以将每个图像表示为一个 784 维的向量,这将是我们的输入变量,我们的目标变量将是从 0 到 9 的标量,每个标量表示一个不同的数字。

你可能以前听说过回归。像分类一样,我们被给予一个目标变量,但是在回归中它是连续的而不是离散的。回归分析的一个例子是预测房子的售价。在这种情况下,特征可以是关于房屋、位置和/或最近出售的其他类似房屋的任何测量值-目标变量是房屋的销售价格。

无监督学习

机器学习任务的另一个子集属于无监督学习,在这种情况下,我们只得到一个由 N 个输入变量组成的数据集。与监督学习相比,我们没有被告知我们想要预测什么,也就是说,我们没有任何目标变量。无监督学习的目标是在数据中发现模式。

上面的类别图像将无监督学习分为 3 个子任务,第一个是聚类,顾名思义,指的是在数据中发现‘聚类’的任务。我们可以将一个集群定义为一组彼此之间比其他集群中的观测更加相似的观测。比方说,我们必须为一个篮球、一个胡萝卜和一个苹果想出一个集群。首先,我们可以根据形状创建聚类,在这种情况下,篮球和苹果都是圆的,但胡萝卜不是。其次,我们也可以按用途分类,在这种情况下,胡萝卜和苹果是食物,但篮球不是。最后,我们可以按颜色分类,在这种情况下,篮球和胡萝卜都是橙色的,但苹果不是。这三个例子都是有效的聚类,但是它们对不同的事物进行聚类。

然后我们有密度估计,这是将概率密度函数拟合到数据的任务。值得注意的是密度估计通常与分类等其他任务结合使用,例如,基于我们观察的给定类别,我们可以使用密度估计来找到每个类别的分布,从而(基于类别分布)对新观察进行分类。密度估计的一个例子是寻找数据中的极端异常值,也就是说,寻找极不可能从数据拟合的密度函数中生成的数据。

最后,降维,顾名思义,减少我们正在处理的数据的特征数量。就像密度估计一样,这通常与其他任务一起完成。比方说,我们要执行一项分类任务,我们的输入变量有 50 个特征,如果在将特征数量减少到 5 个后,我们可以同样好地完成相同的任务,我们可以节省大量的计算时间。

示例:多项式回归

我们来看一个机器学习的例子。这也是为了熟悉机器学习术语。我们将实现一个名为多项式回归的模型,我们尝试用多项式来拟合我们的数据。

给定具有相应目标变量 tN 1 维输入变量 x 的训练数据集,我们的目标是拟合一个多项式,该多项式在给定新输入变量的情况下为未来目标变量产生值。我们将通过估计多项式的系数来做到这一点

我们称之为模型的参数权重M 是我们多项式的阶, w 表示我们所有的参数,即我们的 M 阶多项式有 M +1 个参数。

现在,目标是估计我们的参数的“最佳”值。为此,我们定义了所谓的目标函数(有时也称为误差损失函数)。我们构造我们的目标函数,使得它输出一个值,告诉我们我们的模型是如何执行的。对于这项任务,我们将目标函数定义为多项式预测和相应目标变量之间的平方差之和,即

如果我们用(1)的右边代替 h ,我们得到

让我们花一分钟来理解(2)在说什么。右边 parantheses 中的术语通常称为第 n 次剩余。它是某个输入变量的多项式输出和它对应的目标变量之间的差。根据多项式的输出是低于还是高于目标值,差值可以是正的也可以是负的。因此,我们对这些差异求平方,并将它们相加,以获得一个值,该值告诉我们多项式的性能如何。

这个目标函数被称为残差平方和或残差平方和,通常被用来衡量机器学习中回归模型的性能。下图显示了我们估计的多项式和给定数据之间的差异。这些差异是目标函数求平方并求和的误差(或残差)。

残差图。

到目前为止,一切顺利!因为目标函数告诉我们做得有多好,它越低,我们做得越好,我们将尝试找到目标函数的最小值。为了找到一个函数的最小值,我们求导,设置它等于 0,并求解我们的参数。既然我们有很多参数,我们就取 E 相对于第 i 个参数的偏导数,设为 0,然后求解。这将给我们一个线性系统,该系统由 M 个方程和 M 个未知数组成(我们的参数是 T21)。我们将在下一篇文章中讨论这个问题的解决方案的推导过程,但是现在我们只给出它。方程组的解是

其中 t 表示我们所有的目标变量,作为一个列向量, X 称为设计矩阵,定义为

总而言之:我们给定了 N 对输入变量和目标变量,我们希望用多项式来拟合形式(1)的数据,以使我们的多项式 h 的值尽可能接近目标。我们通过找到使(2)中定义的目标函数最小化的参数 w 的值来做到这一点,对此的解决方案在(3)中给出。

多项式回归的 Python 实现

让我们试着实现我们的模型吧!我们将从下面显示的数据集开始,其中x是我们的输入变量,t是我们的目标变量。

import numpy as np
x = np.array([-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1])
t = np.array([-4.9, -3.5, -2.8, 0.8, 0.3, -1.6, -1.3, 0.5, 2.1, 2.9, 5.6])

首先,我们可以定义多项式的阶数,找到数据点的数量,然后建立设计矩阵。

M = 4
N = len(x)
X = np.zeros((N, M+1))

如果我们看一下(4)中设计矩阵的定义,我们可以用下面的 for 循环来填充设计矩阵的列。

for m in range(M+1):
    X[:, m] = x**m

现在我们可以用(3)中的解找到参数。

w = np.linalg.inv(X.T @ X) @ X.T @ t

使用 NumPy 的[poly1d](https://docs.scipy.org/doc/numpy/reference/generated/numpy.poly1d.html) 函数我们可以为我们的多项式生成输出。

h = np.poly1d(np.flip(w, 0))
x_ = np.linspace(0, 10, 100)
t_ = h(x_)

现在我们可以用我们的数据点来绘制我们的估计多项式。我还画出了产生这些点的真实函数。

估计多项式回归曲线和真实数据函数和点。

摘要

  • 机器学习研究如何让计算机自主学习,目标是预测未来
  • 监督学习指的是机器学习任务,其中我们被给予被标记的数据,我们想要预测那些标记。
  • 无监督学习,顾名思义,指的是任务,其中我们没有为我们的数据提供标签。
  • 特征是指我们数据的属性(通常是列),如身高、体重、鞋码等。,如果我们的观测对象是人类。
  • 分类和回归是有监督的任务,聚类、密度估计和维数减少是无监督的任务。
  • 参数指的是数值,我们要在机器学习模型中估计
  • 估计参数值的过程被称为训练或学习过程。
  • 一个目标函数是我们模型的性能的度量。

参考

[1] Y. LeCun 等,“基于梯度的学习应用于文档识别”,1998 年。

什么是机器学习

原文:https://towardsdatascience.com/what-is-machine-learning-e67043a3a30c?source=collection_archive---------32-----------------------

讨论机器学习的学习方法、类型和实际应用

照片由莫仁·许Unsplash 上拍摄

介绍

机器学习是计算机科学的一个分支,它涉及数据和算法的使用,使机器能够模仿人类的学习,以便它们能够通过从输入示例中学习来执行某种预测。

在世界各地,计算机和智能设备仅在一天之内就可以收集和存储数 Pb 的数据,从生物标志物到金融和环境数据。由于这些数据集的规模和复杂性,人工提取信息几乎是不可能的。

人类习惯于在三维世界中操作和思考,因此,我们很难从更高维度的数据中提取信息。这意味着我们有两个选择。我们可以减少维度的数量,直到我们能够解决问题(但这将以将信息扔出窗外为代价),或者训练机器,使它们能够提取信息,尽管我们需要处理的数据维度很高。

机器学习领域将现代机器提供的计算能力与统计算法相结合,这些算法能够从数据中学习,帮助人类理解复杂的概念,做出更好的决策,并最终解决实际问题。

学问

这里的关键概念是如何让计算机从数据中学习。这意味着,我们需要以某种方式教会机器如何记忆、适应(或纠正)和概括学习到的信息,以便它们可以将其应用到类似的上下文和示例中。机器学习结合了神经科学、物理学、数学、统计学和生物学的概念,以使计算机能够通过建模进行学习。

学习方法的另一个重要方面,是计算复杂度。我们通常需要在非常大的数据集上使用这种方法,因此,具有高次多项式复杂性的算法可能会有问题。通常,复杂性被分成两个独立的部分;训练模型的复杂性和将训练好的算法应用于真实世界数据的复杂性。模型训练是一项不常发生的任务,通常在某种意义上是“离线”进行的,因此如果需要更长时间也没关系。然而,当将训练好的模型应用于真实世界的数据时,比如为了执行预测,事情需要移动得更快一点,因此低计算成本是至关重要的。

学习的类型

根据我们想要解决的问题和我们已经获得的数据,我们还需要确保选择一个合适的学习算法。机器学习有许多学习类型,可以在不同的环境中使用,根据需要提供不同性质的答案。这些是:

  • 监督 学习:在监督学习中,数据集包括标记的例子。换句话说,该集合包含每个示例的正确响应(称为目标)。目标是开发一个模型,该模型将特征向量作为输入,并输出预测的目标变量。
  • 无监督 学习:另一方面,在无监督学习中,数据集是一组未标记的例子。这种学习类型在我们想要执行聚类、降维或离群点检测时最有用。
  • 半监督 学习:当数据集包含有标签和无标签的例子时,我们可能需要应用半监督学习算法。
  • 强化 学习:当学习过程是“顺序的”时,这种类型的学习最适合。在强化学习中,当预测的答案是错误的时,算法通常会得到指示,但不会被告知如何纠正它。

要更全面地讨论机器学习环境中的监督、非监督和半监督学习,请务必阅读以下文章。

机器学习的现实应用

机器学习在应用于现实世界问题方面取得了巨大进步。这是因为不断增长的计算能力可以帮助机器解决人类需要几个世纪才能解决的问题。

推荐引擎:公司使用机器学习算法,以便根据用户过去可能购买的东西或类似用户购买的东西向用户提供推荐。

语音识别:此外,ML 模型可以在自然语言处理的背景下进行训练和使用,以处理人类语音并将其转换为书面格式(也称为语音到文本)。Siri、Alexa 和谷歌助手就是完美的例子。

计算机视觉:机器学习和人工智能的另一个热门领域是计算机视觉,它使计算机能够从数字图像和视频中提取信息。CV 的一些应用包括自动驾驶卡和医学成像。

自动化交易:通过分析可能影响股票价格的信息,ML 甚至可以用于优化股票投资组合和推动自动化高频交易。

客户服务:在线聊天机器人正在接管世界,取代了过去支持客户的传统人工代理。这些机器人通常能够回答常见问题,推荐产品,甚至代表客户执行某些操作。

最后的想法

在今天的文章中,我们介绍了机器学习,它无疑是过去几年中取得巨大进步的计算机科学领域之一。此外,我们讨论了机器如何能够学习以及存在的不同学习类型。最后,我们探索了机器学习和人工智能可以产生巨大影响的几个领域。

成为会员 阅读介质上的每一个故事。你的会员费直接支持我和你看的其他作家。

你可能也会喜欢

https://pub.towardsai.net/data-versioning-for-efficient-workflows-with-mlflow-and-lakefs-892df1f8e7d8

什么是元数据?

原文:https://towardsdatascience.com/what-is-metadata-800403c0767b?source=collection_archive---------12-----------------------

以及为什么你需要开始利用你的

元数据—图片来自Castor的网站

我们越来越多地听到元数据及其对数据分析的重要性。虽然元数据听起来像一个花哨的词,但它指的是一个非常简单的概念。我们把“meta”这个词(以及其他)归功于古希腊人。Meta 的意思是“关于事物本身”。元笑话是关于笑话的笑话,元思考是关于思考的思考。在事物的逻辑延续中,元数据是关于数据的数据。这个数据的唯一目的是定义和描述它所链接的数据对象。例如,网页可能包括指定该页面用什么软件语言编写、使用什么工具创建它、该页面关于什么对象等的元数据。在我深入探讨元数据和元数据管理的重要性之前,让我们花点时间通过查看真实世界和数字世界中的几个元数据示例来了解这个主题。

让我们从一些元数据示例开始

在现实世界中,元数据无处不在。每当你打开一封电子邮件、阅读一本书或从亚马逊订购一些东西时,你都会遇到元数据。

元数据图书—图片来自亚马逊

每本书都富含元数据。多亏了元数据,书籍可以被整齐地分类,使得潜在的用户可以很快找到它们。关于书籍的元数据包括:

  • 标题
  • 作者姓名
  • 发布者详细信息
  • 目录
  • 出版日期
  • 指数

照片的元数据是照片的时间或地理位置

当您使用 iPhone 拍摄照片时,元数据会在照片创建时生成并存储。该元数据包括:

  • 照片拍摄的时间
  • 文件名
  • 用什么相机创建的文件
  • 格式
  • 地理定位

电子邮件的元数据是电子邮件发送的时间,例如来自 Castor 的图像

每次接收或发送电子邮件时,您都会遇到元数据。这些元数据允许对您邮箱中的电子邮件进行有效分类,并帮助您使用关键字快速找到特定的电子邮件。电子邮件的元数据通常包括:

  • 消息 ID
  • 发送电子邮件的日期和时间
  • 发件人和收件人的电子邮件地址
  • 主题

不同类型的元数据

为了清楚起见,不同类型的元数据被放在特定的类别中。不同类型的元数据如下:

描述性元数据:描述资源或文件信息的数据。它用于帮助发现和识别。描述性元数据包括标题、摘要、作者、关键字等元素。

结构元数据:告知数据对象结构的数据。它启发用户如何组织资源/文件。结构化元数据的一个例子是目录。目录显示了章节的页码,以及章节之间的相互关系。

管理元数据:帮助管理资源的技术信息。这可以是文件的创建日期、文件类型、权限等。管理元数据还与使用权和知识产权相关,提供给定资产的所有者、如何使用、由谁使用以及使用多长时间等信息。

处理元数据存储?

有两种方法可以处理数字元数据存储:

  • 数字元数据可以在内部存储在与数据相同的文件中。这种类型的存储称为嵌入式元数据。使用这种存储配置,无论数据到哪里,元数据都会随数据一起传送。这样做的好处是它创建了一致性,因为每次数据本身发生变化时,元数据也会发生变化。使用这种存储方法的问题是,你不能在一个地方管理所有的数字元数据,这就产生了冗余(它阻碍了标准化)。
  • 元数据也可以存储在原始数据库之外的元数据存储库中,通常是数据目录/数据字典。将您组织的元数据集中在一个地方可以实现更高效的搜索和管理,避免冗余问题。另一方面,这种存储方法增加了数字元数据和数据对象之间不一致的风险,因为一个方面的变化可能不会反映在另一个方面。

为什么应该投资元数据管理策略?

在人们的心目中,数字数据比元数据更重要。您可能没有意识到,元数据是释放数据价值的关键。

本周发生在我身上的一件不幸的事情提醒了我元数据的重要性。午饭后,我把装有车钥匙和其他贵重物品的包忘在了公园里。当我两个小时后回来时,包显然已经不见了。幸运的是,我投资了一个叫做磁贴的小装置,它可以随时定位我的车钥匙。我只需要打开“tile”应用程序就可以知道我的钥匙的位置。基本上,tile 让我可以访问我的车钥匙的元数据。这让我找到了钥匙,我很快就回去工作了。

元数据至关重要。我的车钥匙很珍贵,但是如果我不知道它们在哪里,它们对我来说就没用了。如果您的组织收集任何类型的数据,您也处于同样的情况。你可以有很棒的数据集,如果你不能在你的云数据仓库或其他地方找到它们,它们也完全没有用。

这也向您展示了投资元数据管理工具的重要性。我很高兴我有磁贴,自动生成和更新关于我的车钥匙的元数据。事实上,我很忙,不想浪费时间考虑我的各种设备和对象的位置,而不管它们有多重要。在一个理想的世界里:我不会花任何时间去想我的车钥匙,而是总是在我需要的时候找到它们。您的组织可能面临同样的数据问题。数字资产成倍增长,除了保持元数据的整洁记录,人们还有其他优先考虑的事情。当然,能够在需要的时候找到一个表是很好的,但是花费 100%的精力来跟踪云数据仓库中的每个数字资产肯定是不值得的。这时,投资能够自动收集数据集元数据的元数据管理工具就变得有意思了。‍

良好的元数据管理实践将如何改变您的生活?

此时您可能已经明白了:元数据是关键。尽管如此,培养关于数据对象的元数据将会以你无法想象的方式影响你的组织。元数据告诉你你有什么数据,它们来自哪里,它们意味着什么,它们与你的数据资产的其他部分有什么关系。这在四个方面帮助您的组织:数据发现和信任;数据治理、数据质量和成本管理/数据维护。

数据发现和信任

  • 我应该在哪里查找相关数据?
  • 这个数据重要吗?
  • 这个数据集代表什么?
  • 我该如何使用这些数据?

数据发现显然是良好的元数据管理策略的第一个受益者。拥有一个有组织的、集中的元数据存储库可以让您准确地知道您的数据存储在哪里以及谁可以访问它。每个表都有丰富的上下文,包括它包含的内容、谁将它导入公司、它与哪个仪表板和 KPI 相关,以及可以帮助数据科学家找到它的任何其他信息。简而言之,元数据让你的数据可以被发现。元数据存储库回答以下问题:

这些都是相当基本的,近乎荒谬的问题。可悲的现实是,大多数数据用户浪费大量时间试图回答这些问题。许多组织忽视了他们的元数据,导致数据分析师花费数小时在不同的位置寻找他们需要的数字资产。

一旦您的企业以标准化流程收集了元数据,通过利用数据发现工具的搜索功能,在您需要的时候找到您需要的数据将变得更加容易。还记得当你只记得照片拍摄的地点时,在你的 iPhone 上找到照片有多容易吗?

Iphone 按位置搜索功能—图片由 Louise de Leyritz 提供

我非常喜欢这个功能,因为我有超过 40,0 00 张照片存储在云中。当你收集完元数据后,你可以通过使用关键词、像谷歌搜索一样在一瞬间找到数字资产。

元数据有助于对大量数据(来自 Castor 的图像)进行强大的搜索

与必须扫描系统中的每个数据源以寻找正确的数据资产相比,这为数据用户节省了大量时间。

元数据还使与相似或链接的对象能够与相似的对象配对,以帮助优化数字资产的使用。例如,元数据可以帮助您将数据库与从该数据库创建的仪表板配对。

数据安全/隐私/治理

如果您正在处理数据,您需要准备好处理安全性和合规性问题。这些事情常常让人觉得像一座大山一样难以处理。敏感数据和私人信息不应该落入坏人之手,但当您处理数千甚至数百万个数据集时,感觉几乎不可能控制事情。确保安全性和遵守 GDPR 等法律的关键是拥有可靠的数据治理战略。

数据治理是一组关于数据使用和数据安全的策略。创建这些策略是为了确定要应用于给定数据集的适当动作

  • 标记私人信息 (PII),这意味着你可以控制哪些用户可以访问这些信息。
  • 将数字资产置于上下文中,为如何合法使用信息提供清晰的定义。
  • 识别不应该保留的信息。出于监管目的,通常为用户记录指定到期日期。如果您保存的数据超过了这个日期,您将面临巨额罚款。维护良好的元数据有助于您跟踪数据是何时创建的,以及何时需要被处理。
  • 最后,元数据为法规遵从性建立了数字审计跟踪。维护良好的数据存储库有助于证明符合监管框架,如 GDPR。这是很有价值的:如果你不能证明合规,你会自动被当局视为不合规。这是你想要避免的事情,因为不遵守 GDPR 协议会带来可怕的后果。

在这里,元数据再次拯救了你的生命。它提供了在类别中识别、定义和分类数据的方法,以确保强大的数据治理。更特别的是,它允许你 to:‍

数据质量监控

高质量的数据是非常可取的,因为它使您的组织的资源更加可靠,增加了通过使用它们获得的商业利益。数据质量根据以下一组基本维度进行衡量:

  • 准确性:这描述了“数据正确描述被描述的‘真实世界’对象的程度”
  • 完备性:完备性是指所需数据在数据集中的程度。含有大量缺失值的数据集是不完整的。
  • 一致性:如果数据集被复制到多个位置,那么它们的内容在所有实例中都必须保持一致。
  • 及时性:这是指你的数据集是否足够新。

高质量的数据是非常可取的,因为它使您的组织的资源更加可靠,增加了通过使用它们获得的商业利益。数据质量根据以下一组基本维度进行衡量:

在投资一个昂贵的数据质量解决方案之前,看看你的元数据对数据质量有什么看法。如果您投资了元数据管理策略,数据用户在处置每项数字资产时应具备以下要素:

这已经让你的数据质量评估差得很远了。首先,你对数据的准确性有所了解。事实上,表格定义为您提供了有关数字资产内容的清晰信息,以及信息是如何收集的,由谁收集的。这使您可以快速检查信息是否反映了真实世界的事实,是否经过了准确的衡量。拥有一个集中的元数据存储库也支持数据一致性。最后,元数据告诉您上次刷新表的时间,从而告诉您数据是否是最新的。

成本管理和维护

最后,在优化数据库管理,尤其是数据存储时,元数据可以提供很好的帮助。不同的存储解决方案有不同的成本。例如,在云数据仓库中存储数据比在数据库中存储数据更昂贵。一般来说,访问数据库中的数字资产越容易,这种存储解决方案就越昂贵。基于元数据,您可以确定在您的业务中使用最多的表以及很少使用的表。这非常实用,因为它允许您将未使用的表移动到成本更低、更难查询的存储空间中。基于您的元数据,您可以创建规则,根据这些规则,在过去 30 天内未使用的数据将被立即移动到成本较低的存储桶中。元数据使您能够根据存储成本和使用情况准确确定每个数据集的成本。

一个好的元数据管理解决方案还可以帮助您更好地维护数据库。关于数字资产的元数据包括数据质量分数、特定时期内数据资产的问题数量等。因此,您可以根据元数据准确地知道应该将维护工作集中在哪些数据集上。如果某项数字资产在过去几天内停机了 10 次,您将确保有人尽快修复它。更一般地说,这有助于您对数据团队的行动进行优先级排序,确保其产生最大可能的影响和商业价值。

你需要元数据管理工具吗?

元数据很重要。你现在可能已经明白了。但是,还有一个问题:您能否手动记录系统中的所有文件,或者您是否需要投资一个元数据管理工具来支持您的记录工作?在决定是否投资一个元数据管理解决方案时,要考虑的最重要的方面是,它是否对您记录资源的方式和您收集元数据的方式有重要影响。事实上,您需要首先了解您是否有能力记录您的云数据仓库的内容。

现在您可能想知道:数据目录能提供什么样的帮助?从根本上说,元数据管理工具的价值在于它自动化了数据文档过程。这是什么意思?比方说,您在系统中记录一个特定的文件,用描述性的上下文和定义来丰富列。智能数据目录将将您对特定列的原始定义传播到您的云系统中具有相同名称的所有其他列。这意味着您在文档上花费的每一分钟都比使用手动过程记录数据资源产生更大的影响。如果数千个数据集包含一个同名的列,那么为一个列编写定义就相当于为数千个列编写定义。这极大地节省了时间和成本。

现在,您是否觉得自动化这个过程有趣取决于您的组织是企业还是小企业。

如果你是一个小企业,你不会处理太多的数据资源。在这种情况下,让某个人(或几个人)负责记录您公司的每个文件是可能的。手动维护数据目录以保持系统有序是一个可行的选择。如果这是你目前需要的,我们已经在商店这里有一个模板,我们解释如何有效地使用它。

在企业案例中,您的业务可能太大,无法手动记录数据内容和文件。记录成千上万的文件将花费大量的时间和人力资源。尤其是考虑到数据不是静态的。你的公司一直在收集数据。这意味着您需要雇用一个全职的数据文档团队,持续更新您的文件周围的元数据。就成本和时间而言,投资于自动化文档流程的解决方案通常更有效率,因为它可以让您的系统具有可见性。如果这是最适合您的业务模型的选项,请确保您选择的工具符合您公司的需求。我们在这里列出了各种选项

最后的话

大数据非常有价值,但元数据是让组织获得这一价值的关键。一个好的元数据管理策略将在四个方面帮助您的组织:数据发现、数据治理、数据质量和数据维护/成本管理。手动维护一个集中的元数据存储库是很累人的,当您拥有的数据集数量开始呈指数级增长时,这很快就会变得不可持续。谢天谢地,有很多工具可供您选择。

关于我们

我们写了利用数据资产时涉及的所有过程:从现代数据栈到数据团队组成,再到数据治理。我们的博客涵盖了从数据中创造有形价值的技术和非技术层面。如果您是一名数据领导者,并且希望更深入地讨论这些主题,请加入我们为此创建的社区

在 Castor,我们正在开发一个数据文档工具 Figma,Slack generation。或者对 Fivetran,Looker,Snowflake,DBT 的狂热爱好者来说是数据方面的。我们将产品目录设计得简单易用、令人愉悦且友好。

想去看看吗?联系我们,我们将向您展示一个演示。

原载于https://www.castordoc.com

什么是公制?

原文:https://towardsdatascience.com/what-is-metric-74b0bf6e862?source=collection_archive---------40-----------------------

了解数据科学家的衡量标准

作为一名数据科学家,您可能会遇到不同种类的距离度量。在 NLP 中,你可以使用余弦距离度量来得到相似的单词;在计算机视觉中,你可以使用 L2 距离度量来获得相似的图像;协同过滤也有内积度量。我们经常使用“公制”这个术语,但它是什么意思呢?

椅子的笛卡尔平面(照片由 Unsplash 上的森林西蒙拍摄)

度量定义

在开始定义之前,让我们先弄清楚这些术语。通常,“公制”意味着距离,这个术语我们在日常生活中经常使用,例如:

  • 雅加达和万隆的距离是多少?
  • 开车时保持安全距离。

度量的正确定义最初来自数学。一开始学习它可能会令人生畏,但实际上这是很自然的,它反映了我们所知道的距离这个术语。毕竟,数学家不会凭空定义一些东西。

首先,让我们将 d(x,y) 定义为 xy 之间的度量(或距离)。就当 xy 是任意的点。作为一个指标,有 4 个条件需要满足。大家一个一个讨论吧。请注意,在本文中,我将互换使用术语度量和距离。

1.非否定性

在数学中,这个条件被定义为:

对于所有的 x 和 y,d(x,y) ≥ 0。

顾名思义,这个条件非常明显。度量不能为负。类似于距离,很容易理解为什么我们应该有这个度量条件,因为我们毕竟不能有负的距离。两个城市之间的距离从来都不是负数!

距离总是非负的(由位云去飞溅上拍摄)

其实这个条件不是必须的。如果其他三个条件都满足,这个条件也满足。如果你想了解更多,你可以打开这个维基

2.不可分辨事物的同一性

在数学中,这个条件被定义为:

如果 d(x,y) = 0,那么 x = y。

不可分辨的意思是‘无法分辨’。这也是很明显的。如果两个城市之间的距离是 0,那么他们一定是同一个城市,不是吗?除非有某种虫洞或者心灵传输。

3.对称

在数学中,这个条件被定义为:

对于所有的 x 和 y,d(x,y) = d(y,x)。

换句话说,x 和 y 之间的距离与 y 和 x 之间的距离相同。作为一个移动距离,这不一定是正确的。从城市 A 到 B 的距离可能不同于从城市 B 到 A 的距离,这取决于道路或城市布局。然而,如果我们用坐标测量,或者用直升机测量,它们是一样的。

4.三角形不等式

在数学中,这个条件被定义为:

d(x,y) ≤ d(x,z) + d(y,z),对于所有的 x,y,z。

最后一个条件不如前三个条件明显。先来讨论一下为什么叫三角不等式。每个三角形都有这个性质:

取三角形的任意两条边;另一边的长度小于这两边的总和。

如果 c > a + b ,你就不能做出三角形

在上面的等式中,我们有三个点( xyz ),这三个点构成一个三角形。所以才有关系。

接下来,三角形不等式在我们的度量定义中意味着什么?让我们用一个例子来说明。在一张纸上画两个点,分别叫做 xy 。如果你需要测量这两点之间的距离,你会怎么做?你可以画一条从 x 到 y 的线段,然后测量线段的长度。听起来很明显,不是吗?但是,我们为什么不画另一个点(称为点 z ),然后画两条线段(从 xz ,以及 zy )并测量长度呢?原因很简单:

该距离应计算为两点之间的最短路径。

你不绕道算距离,明显更长。因此,三角形不等式条件意味着应该以最短的方式计算度量。

度量示例

让我们讨论一些距离示例,以及它是否满足“真实”度量的定义。

1.欧几里得距离

欧几里德距离(也称为 L2 距离)是你在日常生活中常用的距离定义,例如测量我上面讨论的距离点。它显然满足“真正的”度量定义。

2.余弦距离

余弦距离(或 1 - 余弦相似度 )是你在处理向量时可能遇到的距离。不幸的是,余弦距离不是一个“真正的”度量。首先,它不满足不可分辨条件。【1,1】**【2,2】的余弦距离为 0,而【1,1】≦【2,2】

而且,它不满足三角形不等式。假设 d 为余弦距离 x = [1,0】,y = [0,1],z = [1,1] 。很容易看出 d(x,y) = 1d(x,z) = d(y,z) ~ 0.3 ,所以 d(x,y) > d(x,z) + d(y,z) 不满足三角形不等式。这就是为什么余弦距离实际上没有任何意义:如果你绕道(到 z 的距离更短,而不是直接从 xy

3.内积度量

内积(或点积)常用于协同过滤模型。这个概念类似于余弦相似度,但没有对向量进行归一化。事实上,它甚至不是一个“距离”,因为当它更远时,它在减少,相比之下,对距离的普遍理解是:当它更远时,它在增加。还有一种方法可以将距离定义为负内积,即简单地将内积乘以 -1 。它作为一个距离更有意义,但它只满足对称条件,所以它肯定不是一个度量。

欧几里德距离与余弦距离

建议选择欧几里德距离作为距离度量,因为它是“真正的”度量,而不是余弦距离。通常,余弦距离是优选的,因为它的范围从-1 到 1,相比之下,欧几里得距离是无限的,所以在余弦距离中设置阈值(比如 0.7)更容易。其实你可以通过探索数据中的距离范围,用欧氏距离找到阈值,类似余弦距离。

外卖食品

总之,距离度量是解决问题的工具。如果你需要用余弦距离和内积,那就随便用吧。毕竟,数据科学的目标是解决问题,你可以自由选择你的工具。我希望这篇文章能帮助你理解工具☺

什么是 ML 可观测性?

原文:https://towardsdatascience.com/what-is-ml-observability-29e85e701688?source=collection_archive---------10-----------------------

行业笔记

在实验室中构建机器学习概念证明与在现实世界中制作模型截然不同。

随着越来越多的团队转向机器学习来简化他们的业务或将以前不切实际的技术变成现实,人们对能够帮助将模型从研究实验室带到客户手中的工具和人员的兴趣越来越大。谷歌建立了 TFX,脸书建立了 FBLearner,优步建立了米开朗基罗,Airbnb 建立了 Bighead,这些系统允许这些时候扩大他们的 MLOps。

在这些大型科技公司之外,事实是,在实验室中构建机器学习概念证明与在现实世界中制作模型截然不同。让我们先快速看一下在将模型应用于现实世界问题时可能会出错的一些事情。

还能出什么差错?

  1. 训练发球偏斜

在部署模型时,您的模型很有可能不如在离线验证时执行得好。这些生产移交并不总是进展顺利,这通常被称为培训/服务偏差。

一个潜在的罪魁祸首是你的模型被训练的数据在统计上不同于你在生产中看到的数据。另一种可能是您的培训环境和生产环境之间的特性转换代码不一致。这可能比人们想象的更常见。通常,包含特性转换代码的笔记本在没有太多版本控制的情况下被传递和更改,这可能会导致混淆到底哪种类型的转换被用来为模型创建特性。如果创建特征的方式在培训和生产环境之间不一致,那么模型的性能会在一开始就受到很大的影响。

训练发球偏斜。图片作者。

2。改变数据分布

除了训练数据、生产数据和要素转换之间的这种潜在差异之外,您的模型所暴露的数据分布也可能会随着时间的推移而发生变化,这通常称为数据漂移或要素漂移。这种漂移可能是渐进的,也可能在一夜之间发生,并导致模型性能下降。

改变分布。图片作者。

3。杂乱的数据

另一件需要注意的事情是数据源的保真度。事物不会像代码一样一成不变。你在处理数据。在研究实验室中,通常要花费数千个小时来创建高质量的数据集,以最少的噪音和准确的标签。在现实世界中,你通常没有这样的质量或新鲜度保证。如果您依赖外部数据源,您可能会受到其可靠性的影响。

查看这篇文章,了解 ML 车型的更多故障模式

可观察性有什么帮助?

ML 可观察性是在模型开发周期的所有阶段获得对模型性能的深入理解的实践:从构建模型开始,到部署模型,一直到产品化。

可观察性是部署模型后盲目飞行的团队和能够快速迭代和改进他们的模型的团队之间的关键区别。

  1. 检测时间

ML 可观察性的第一个关键目标是及时地向你提出这些问题。你可以解决一个问题,直到你知道它,你不希望你的客户遭受几天或几周的痛苦,直到你意识到有事情发生。因此,一个好的 ML 可观测性解决方案有助于减少检测模型中的问题所需的时间。

这在不同的上下文中可能有不同的意思。如果您正在构建您的模型,一个好的可观察性工具可能帮助模型构建者更快地发现他们的模型的问题,促进一个更紧密的迭代循环;然而,在生产场景的上下文中,ML 可观察性工具可以监控关键的性能度量,这些度量可以在出现问题时通知模型所有者。

2。解决问题的时间

尽管检测问题是第一步,但这并不是 ML 可观察性的终点。一旦检测到问题,可观测性工具需要促进问题的解决。一个好的可观察性工具的关键标志是一个团队能多快找到解决问题的根本原因。

回到我们之前讨论过的,模型的性能有多种回归方式。一个好的 ML 可观测性解决方案需要引导模型所有者了解发生变化的输入数据分布、特征变换或模型预测预期,并提供解决方案。

例如,如果您发现模型的输入特征随着时间的推移而不断漂移,并导致模型错误预测一组特定的示例,ML 可观察性工具会通知您,推荐一种方法来增加训练集,并提示您重新训练模型。

ML 工程师生命周期。图片作者。

如何实现 ML 可观测性?

评估商店。图片作者。

现在你可能认为 ML 可观察性听起来很棒,但是我的团队实际上是如何实现的呢?ML 可观测性可以通过应用评估库来实现。评估库的工作是帮助您验证模型,调试模型预测的问题,显示表现最差的数据,并为您提供有关如何以及何时重新训练模型的建议。

为了更深入地了解评估库的作用,让我们探索一下评估库如何适应 ML 模型生命周期的每一部分。

启动前验证

在模型构建的训练和验证阶段,评估存储在跟踪训练数据中每个定义部分的模型性能方面起着关键作用。当模型的性能对于某个特定部分发生显著变化时,或者从测试结果中可能出现新的感兴趣的数据部分时,评估存储的工作就是通知模型构建者。此外,在培训和验证期间,评估存储应该检测输入数据是否与生产数据有显著差异,以帮助避免我们之前提到的培训-生产偏差问题。

转到模型部署,评估库还可以帮助您选择最适合推广到生产的模型。通过跟踪模型在生产中对一组候选模型所做的预测,评估存储可以编译关于哪个模型在各种数据切片中表现最佳的结果。

监控

将模型部署到生产环境中时,评估存储会跟踪所有输入要素和输出预测,以便在这些分布发生显著变化时发出警报。最重要的是,评估商店需要跟踪生产中每个输入示例的预测和基本事实。

在一些模型应用程序中,在模型做出预测后,地面真相立即可用——想想搜索结果,用户点击最相关的链接,你现在就知道你放在顶部的链接是否真的与用户最相关。

然而,在其他情况下,地面真相可能被延迟或完全丢失。在这些更棘手的场景中,评估存储的工作是帮助团队跟踪与模型性能相关的代理指标,并在这些代理指标的分布发生显著变化时向模型所有者提供警报。

根本原因

在生产中检测到模型的问题后,评估存储可以显示输入数据、要素、基本事实/代理指标中的哪些关键分布导致了模型性能的变化。由于评估存储一直跟踪这个模型元数据,它可以检测每个分布随时间的漂移,并找出最大的影响因素。

检测模型回归并将其分类为故障模式的能力有助于为模型所有者应该如何修复问题提供指导。例如,假设您有一个模型,该模型试图预测向用户推荐哪个电视节目,以最大化用户观看该节目的可能性。在你不知情的情况下,已经有大量年轻用户开始使用你的产品,他们的喜好并没有很好的体现在训练数据中。

评估商店将能够检测和显示模型性能的显著变化,并指出输入数据和要素分布的变化。然后,您可以深入研究哪些特征发生了最大的变化,并看到“年龄”特征的分布在模型回归时已经向更年轻的一侧转移。

此时,您可以使用您的评估商店来查找这些新的年轻用户的示例,用这些示例增加您的训练集,并重新训练您的模型以更好地考虑这些新用户。

改进型号

随着数据集变得越来越大,以支持更大的模型,问题空间变宽,评估存储的一个关键作用是显示模型表现不佳的数据切片。了解到存在哪些机会来提高模型的性能后,模型构建者可以扩充他们的训练集,添加新功能,重新训练他们的模型,或者带着这些新知识回到绘图板。

结论

总之,通过应用评估库实现的 ML 可观测性可以在验证、监控、故障排除和改进模型的整个过程中帮助您的团队。通过自省模型在一段时间内的表现,ML observability 可以帮助您的团队识别训练数据中的差距,找出模型表现不佳的示例,并排比较模型表现,验证模型,并识别生产中的问题。停止盲目飞行,让你的 ML 努力更上一层楼。

联系我们

如果这个博客引起了你的注意,并且你渴望了解更多关于机器学习可观察性模型监控,请查看我们其他的博客ML 监控上的资源!如果您有兴趣加入一个有趣的 rockstar 工程团队,帮助模型成功生产,请随时联系我们,并在此找到我们的空缺职位!

什么是 MLOps,为什么我们应该关注它

原文:https://towardsdatascience.com/what-is-mlops-and-why-we-should-care-9b2d79a29e75?source=collection_archive---------19-----------------------

作者图片

两周前,我在 LinkedIn 上看到了吴博士的一篇帖子。他呼吁人们观看他最近的一个关于 MLOps 主题的演示视频,并征求意见和传播。我忙着期末考试,压轴项目,还有关于毕业典礼的杂七杂八的东西,所以直到今天才看。

当我只看到视频的一半时,我意识到这个话题并不是我们日常生活中在网上看到的六千个无聊话题之一。这是一件值得与朋友分享的事情,应该比现在更多地在社区和学校进行讨论。

我们都遇到的瓶颈

人工智能在 20 世纪 50 年代推出,大数据在 20 世纪 90 年代推出,但它们直到过去十年才变得如此流行。直到今天,仍然有许多企业很难将这些技术集成到他们的运营中。

对于个人来说,我会赌 100 美元,在你过去的机器学习实践中,或者在你认识的人的项目中,你都遇到过这个问题:无论你多么努力地尝试,或者你训练你的模型多少次迭代,你的模型的准确性都会在性能远离人类工作的某个地方停止增加。

我们可能都同意,这些困境很有可能发生,因为企业或个人无法捕捉足够的数据来满足他们的需求,或者可用的算法不够先进。

作者图片

然而,今天,吴恩达指出,这个问题有另一个解决方案:从大数据转移到干净的数据。下面是他举的一个例子来说明他的想法。在图中,我们可以看到,如果我们当前有 500 个训练示例,并且希望达到 0.6 的准确度分数,我们可以清理数据(提高标签一致性)或者将数据大小增加两倍。

作者提供的图片(模拟自吴恩达的演示)

他还声称,对于某些类型的分析,仅仅增加数据集的大小不会有多大帮助,例如语音识别。你必须确定哪个因素阻碍了模型更好的性能,比如背景中的汽车声。

我们必须注意,对于小数据集,标签一致性更重要,因为强大的算法将有能力平均掉给定的足够大的数据集的损失。如果我们从不同的角度来看这句话,我们也可以预计,如果数据量少的企业能够实现标签一致性并找到适当的算法,他们将有机会在运营中利用人工智能。

Andrew 还指出,大数据问题中存在罕见事件的长尾(网络搜索、无人驾驶汽车、推荐系统),这也是小数据问题。

MLOps

在演讲中,Andrew 提到,人们通常开玩笑说,我们倾向于在机器学习项目中花费 80%的时间来搜索和准备数据,然而人们只关注 20%的训练和建模时间。换句话说,假设我们已经从培训过程中获得了最大的收益,我们仍然有足够的空间(80%)去努力和提高。

然而,当他浏览人工智能社区的最新学术论文时,99%的论文都是针对建模的研究,只有 1%是针对数据的。他澄清说,研究增强建模技术是一件伟大的事情,但我们也应该认识到数据质量的重要性,并为此做出贡献。

数据是人工智能的食物

因此,他推广了 MLOps 的理念,这有助于确保始终如一的高质量数据。他用一个 ML 项目的生命周期图来说明这个想法。我对原始图表做了一点变换,使其更具可读性。

作者图片

基本上,MLOps 团队将不断检查流程,并分析在培训和部署阶段提高标签/数据一致性和质量的可能性。它最重要的任务是确保在 ML 项目生命周期的所有阶段始终如一的高质量数据。

下面是一个例子,说明他让他的团队如何使数据质量系统化(可重复且可靠):

  • 让两个独立的贴标机给一个图像样本贴标签
  • 衡量贴标机之间的一致性,以发现他们不同意的地方
  • 对于贴标签者意见不一致的班级,修改标签说明,直到它们变得一致

外卖食品

首先,从以模型为中心到以数据为中心:

以模型为中心的视图:

  • 尽可能收集数据,开发一个足够好的模型来处理数据中的噪音
  • 保持数据固定,并迭代改进代码/模型

以数据为中心的视图:

  • 数据的一致性至关重要。使用工具提高数据质量;这将允许多个模型做得很好
  • 保持代码不变,迭代改进数据

其次,当前的神经网络模型可能会有偏差。在小数据集上很容易获得完美的训练分数,但方差会增加,这意味着发生了过拟合。这就是为什么我们需要干净的数据而不是嘈杂的数据。

第三,重要前沿:MLOps 工具,让以数据为中心的 AI 成为一个高效、系统的过程。

第四,什么是好数据:

  • 定义一致(标签 y 的定义明确)
  • 重要案例的覆盖面(输入 x 的良好覆盖面)
  • 及时反馈生产数据(分布包括数据漂移和概念漂移)
  • 大小合适

他还在演示结束时做了一个现场调查:你认为谁会加入 MLOps 团队?与会者似乎更喜欢 ML 工程师和领域专家来做这项工作。我非常赞同为特定项目引入领域专家的必要性。如果一个人能处理所有的就好了,但这不现实。领域专家可能缺乏 ML 知识,但他们可能是最了解数据的人。

这是来自深度学习的视频。youtube 上的 AI,将花费您一个小时来观看:

请随时与我联系LinkedIn

什么是 MLOps——入门必备的一切

原文:https://towardsdatascience.com/what-is-mlops-everything-you-must-know-to-get-started-523f2d0b8bd8?source=collection_archive---------2-----------------------

ML 系统开发生命周期和 MLOps 需求的完整演练

ML 系统工程及其利益相关者的操作—图片由作者生成

直到最近,我们都在学习软件开发生命周期(SDLC ),以及它是如何从需求获取→设计→开发→测试→部署→一直到维护的。我们过去和现在都在研究软件开发的瀑布模型、迭代模型和敏捷模型。

现在,我们正处于一个阶段,几乎所有其他组织都在试图将 AI/ML 融入他们的产品。构建 ML 系统的新需求增加/改革了 SDLC 的一些原则,从而产生了一个新的工程学科,称为 MLOps。

MLOps——一个新名词出现了,它引起了人们的热议,并催生了新的工作简介。MLOps 是机器学习操作的缩写,也称为 ModelOps。

在这里我们将讨论:

  • 什么是 MLOps,
  • 它解决了哪些关键挑战,以及
  • 它都由什么组成?
  • 一个人必须瞄准什么样的技能和个人资料组合,以及如何开始?

当我展开每一部分时,请继续阅读。

在 Google trends 上查找它会告诉你这是一个相对较新的学科,因为越来越多的组织正试图将 ML 系统集成到他们的产品和平台中。

作者生成的图像

定义

我是这样定义的:

它是一门工程学科,旨在统一 ML 系统开发(dev)和 ML 系统部署(ops ),以标准化和简化生产中高性能模型的持续交付。

为什么是 MLOps?

直到最近,我们还在处理可管理的数据量和小规模的极少数模型。现在形势发生了转变,我们正在将决策自动化嵌入到广泛的应用中,这产生了许多来自构建和部署基于 ML 的系统的技术挑战。

为了理解 MLOps,我们必须首先理解 ML 系统的生命周期。生命周期涉及数据驱动组织的几个不同团队。从开始到结束,以下团队插话:

  • 业务开发或产品团队 —用 KPI 定义业务目标
  • 数据工程 —数据采集和准备。
  • 数据科学 —构建 ML 解决方案和开发模型。
  • IT 或 DevOps —完成部署设置,与科学家一起监控。

这是 ML 生命周期的一个非常简单的表示。

由作者生成的图像

Google 的团队已经对构建基于 ML 的系统所带来的技术挑战进行了大量的研究。一篇关于 ML 系统中隐藏的技术债务的 NeurIPS 论文向你展示了开发模型只是整个过程中的一小部分。许多其他流程、配置和工具将集成到该系统中。

图片由作者生成—灵感来自https://papers . nips . cc/paper/2015/file/86 df 7 dcfd 896 fcaf 2674 f 757 a 2463 EBA-paper . pdf

为了简化整个系统,我们有了新的机器学习工程文化。该系统涉及每个人,从具有最低技术技能的高层管理人员到数据科学家,再到开发人员和 ML 工程师。

MLOps 应对的主要挑战

大规模管理这样的系统并不是一件容易的事情,许多瓶颈都需要解决。以下是团队提出的主要挑战:

  • 擅长开发和部署可扩展 web 应用程序的数据科学家非常缺乏。最近市场上出现了一种新的 ML 工程师,旨在满足这种需求。这是数据科学和 DevOps 的交汇点。
  • 在模型中反映不断变化的业务目标—存在许多依赖关系,数据不断变化,维护模型的性能标准,并确保 AI 治理。很难跟上持续的模型培训和不断发展的业务目标。
  • 技术和业务团队之间的沟通差距,他们很难找到共同语言进行协作。最常见的是,这种差距成为大项目失败的原因。
  • 风险评估— 围绕此类 ML/DL 系统的黑箱性质,有很多争论。模型往往会偏离它们最初的目标。评估此类故障的风险/成本是一个非常重要且细致的步骤。
    例如,与标记一个无辜的人进行欺诈、冻结其账户并拒绝其贷款申请相比,YouTube 上不准确的视频推荐的成本要低得多。

主要阶段—掌握 MLOps 需要什么

至此,我已经对系统的瓶颈以及 MLOps 如何解决这些问题给出了很多见解。你需要瞄准的技能可以从这些挑战中获得。

以下是你需要关注的关键技能:

1。从业务目标出发构建 ML 问题

机器学习系统开发通常始于商业目标或目的。它可以是一个简单的目标,将欺诈交易的百分比降低到 0.5%以下,或者可以是建立一个系统来检测皮肤科医生标记的图像中的皮肤癌。

这些目标通常有特定的性能度量、技术需求、项目预算和 KPI(关键性能指标),它们驱动着对部署模型的监控过程。

2.架构 ML 和问题的数据解决方案

目标明确转化为 ML 问题后。下一步是开始搜索合适的输入数据以及针对该类数据尝试的模型类型。

搜索数据是最费力的任务之一。这是一个包含多项任务的过程:

  • 你需要寻找任何可用的相关数据集,
  • 检查数据及其来源的可信度。
  • 数据源是否符合 GDPR 等法规?
  • 如何使数据集可访问?
  • 源的类型是什么—静态(文件)还是实时流(传感器)?
  • 要使用多少个源?
  • 一旦模型被部署到生产环境中,如何构建一个可以驱动训练和优化的数据管道?
  • 所有的云服务都要使用什么?

3.数据准备和处理——数据工程的一部分。

数据准备包括特征工程、清理(格式化、检查异常值、插补、重新平衡等)等任务,然后选择有助于基本问题输出的特征集。

一个完整的管道将被设计,然后编码,以产生干净和兼容的数据,以提供给模型开发的下一个阶段。

部署这种管道的一个重要部分是选择云服务和架构的正确组合,这种组合是高性能和经济高效的。例如,如果您有大量的数据移动和大量的数据要存储,您可以使用 AWS S3 和 AWS Glue 构建数据湖。

您可能想练习构建一些不同种类的管道(批处理与流),并尝试在云上部署这些管道。

4.模型训练和实验—数据科学

一旦你的数据准备好了,你就可以进入训练你的 ML 模型的下一步。现在,训练的初始阶段是用一堆不同类型的模型进行迭代。你将使用几个定量的方法来缩小到最佳的解决方案,比如准确性、精确度、召回率等,你也可以使用模型的定性分析来解释驱动模型的数学,或者简单地说就是模型的可解释性。

我有一个完整的任务列表,你可以在训练 ML 模型时阅读:

现在,您将使用不同类型的数据和参数运行大量实验。数据科学家在训练模型时面临的另一个挑战是再现性。这可以通过版本化您的模型和数据来解决。

您可以向 ML 系统的所有组件(主要是数据和模型)添加版本控制以及参数。

随着开源工具如https://dvc.org/****和CML的发展,这现在很容易实现。********

其他任务包括:

  • 通过为模型定型编写单元测试来测试模型。
  • 对照基线、更简单的模型以及不同的维度检查模型。
  • 使用分布式系统、硬件加速器和可扩展分析来扩展模型训练。

5.构建和自动化 ML 管道

建造 ML 管道时应牢记以下任务:

  • 确定系统需求—参数、计算需求、触发因素。
  • 选择合适的云架构—混合云或多云。
  • 构建培训和测试管道。
  • 跟踪和审核管道运行。
  • 执行数据验证。

6.将模型部署到生产系统

部署 ML 模型主要有两种方式:

  • 静态部署或嵌入式模型是将模型打包到可安装的应用程序软件中,然后进行部署。例如,提供请求批量评分的应用程序。
  • 动态部署——使用 FastAPI 或 Flask 等 web 框架部署模型,并作为响应用户请求的 API 端点提供。

在动态部署中,您可以使用不同的方法:

  • 在服务器(虚拟机)上部署
  • 在容器中部署
  • 无服务器部署
  • 模型流——与 REST APIs 不同,所有的模型和应用程序代码都在一个流处理引擎上注册,比如 Apache Spark、Apache Storm 和 Apache Flink。

以下是一些注意事项:

  • 确保符合适当的文件和测试分数。
  • 重新验证模型的准确性。
  • 执行可解释性检查。
  • 确保满足所有治理要求。
  • 检查任何数据工件的质量
  • 负载测试—计算资源使用情况。

7.监控、优化和维护模型

一个组织需要关注模型在生产中的表现,但是要确保良好和公平的治理。这里的治理意味着放置控制措施,以确保模型向受其影响的所有涉众、员工和用户交付它们的责任。

作为该阶段的一部分,我们需要数据科学家和 DevOps 工程师通过执行以下任务来维护整个生产系统:

  • 跟踪模型预测的性能下降和业务质量。
  • 设置日志记录策略并建立持续评估指标。
  • 排除系统故障和引入偏差。
  • 在生产中部署的培训和服务管道中调整模型性能。

进一步推荐阅读…

这一切都与 MLOps 有关,它不是一份工作简介,而是由几个利益相关方组成的生态系统。我相信,如果你是在 ML 和软件工程(DevOps)交叉领域工作的人,你会非常适合寻找能够端到端处理这种系统的人的初创公司和中型组织。

ML 工程师是服务于这个最佳位置的职位,也是有抱负的候选人应该瞄准的目标。以下是一些您可以参考的资源:

****https://cloud.google.com/certification/machine-learning-engineer https://aws.amazon.com/certification/certified-machine-learning-specialty/?ch=sec&sec=rmg&d=1

你也可以观看这个博客的视频版本:

更新:我联系了德米特里·彼得罗夫,就这个话题进行了进一步的讨论,你可以在这里收听(或观看)我们的对话:

后续步骤

我计划开发一系列关于使用谷歌云或 AWS 构建端到端 ML 系统的教程和视频。订阅我的简讯了解更多更新。

✨公告—关于构建生产就绪型 ML Pipelines✨的群组课程

你好!我正在考虑推出一个为期 3 周的关于建立大规模生产流水线的队列课程。我将从测试组开始,这样我可以完善材料。测试版将是 800 美元,比最终价格有很大的折扣。

我(和我的团队)将现场授课,分享我们学到的关于使用谷歌的 TensorFlow Extended、Apache Airflow、Kubeflow 和 T2 的谷歌云平台等工具构建强大的 ML 管道的一切。这是一个技术栈,为诸如 #Spotify#Airbnb#twitter 等应用提供支持。

如果您有兴趣加入,请填写这张表格:

目标:

目标是加速你早期的 ML 工程生涯。

价值

学完这门课程,你会成为一名更自信、更有韧性的 ML 工程师。这是我希望在投身 ML 工程时就有的课程。

您将学到的内容:

我们将一起解开将笔记本电脑模型转移到生产环境所需的 ML 管道的每个单独组件(如信息图所示)。

你将通过做项目来学习。

材料和教学:

  • 研讨会促进主动学习和动手操作,而不是被动的讲座。
  • 与同龄人一起学习——Zoom 分组讨论小组、积极参与的 slack 社区和小组项目。
  • 一门应用课程,提供学习指南、抽认卡和 ama。

谁应该报名

本课程是为那些已经在大规模训练 ML 模型,现在希望学习构建完整 ML 管道的人而设计的。对于转变为更具实践性的工程角色的数据科学家或新的 ML 工程师<2 years into their career.

Hit me up!

My DMs are open for queries. Also, if you found this useful and would love to see more of it, connect with me on TwitterLinkedIn 。此外,请订阅我的频道了解更多关于数据科学的内容。

您可以订阅我的每周数据科学简讯,我会将说明性教程、实用项目想法和实时培训课程直接发送到您的收件箱。****

什么是自然语言处理(NLP),为什么它对你很重要?

原文:https://towardsdatascience.com/what-is-natural-language-processing-nlp-and-why-does-it-matter-to-you-3cc4fb003940?source=collection_archive---------22-----------------------

JESHOOTS.COMUnsplash 上拍照

自然语言处理,也称为 NLP,允许机器理解人类通过文本或语音说出和写下的短语的含义。

自然语言处理(NLP)是人工智能(AI)的一个子领域,研究机器理解人类语言的能力和局限性。

NLP 的主要目的是为计算机提供理解和编写文本的能力。

“理解”文本意味着识别上下文,执行句法、语义、词汇和形态分析,创建摘要,提取信息,解释意义,分析感觉,甚至从处理过的文本中学习概念。但是让我们从一些定义开始,请…

什么是自然语言?

虽然题目需要中级的语言学和技术知识,但是自然语言的定义相当简单。这是人类交流的纯粹方式。语言是自然语言的一个很好的例子。

诚然,计算机习惯处理的语言,如 XML、SQL 和 PHP,具有复杂性。然而,我们交流的方式,以及所有的语法规则和歧义,克服了这个困难。

了解了这一点,接下来的挑战就是将这两种交流方式联系起来,这样两者就能在紧密自然的互动中相互理解。

什么是自然语言处理?

自然语言处理是计算机如何处理自然语言,并开始理解人类语言的含义。

在这种情况下,术语“处理”意味着分析和理解。也就是说,它是关于机器处理我们说话方式的能力,克服我们的拼写错误、歧义、缩写、俚语和口语表达。

例如,当我们说“穿上你的靴子”,我们的意思是“穿上你的鞋子,在这种情况下,就是一只靴子。”然而,对于机器来说,解析这个时间段并将动词从冠词和名词中分离出来是一项复杂的任务。

在这种情况下,值得记住的是,即使计算机可以进行这种理解,模糊仍然是一种逆境。毕竟“穿上靴子”和“放上糖”看起来很像,但语义完全不同。

这就是为什么自然语言处理和语义语言处理的结合对这个场景如此重要。尤其是客服。

它是如何工作的?

预处理

预处理,集中数据并帮助机器更好地理解它,是至关重要的。

规范化是一个过程,包括标记化、删除标记和特殊字符,以及将大写字母改为小写字母。每个单词都被识别为一个标记,每个句子都被如此标记。这开始组织文本。

删除停用词 会删除重复出现的单词,如“The”、“that”、“what”和“of”,因为一般来说,它们与模型的构建无关。这些删除应该只在停用词不必要时发生。

还需要删除数字和伴随的符号(例如,“\(、”“US\)、”“km”、“kg”)。

使用拼写检查器来处理错别字、缩写和非正式词汇是很常见的。

词干化过程将这个词简化为它的偏旁特征,并源于它的格言。

处理

有七个处理层次:语音、形态学、词汇、句法、语义、言语和语用。

当机器必须理解口语时,音韵学识别并解释组成单词的声音。

形态学关注单词的组成和性质,形态学,将它们分成形态学(意思是构成单词结尾的词根、词缀、话题和主题元音的更小单位)。同时,句法过程分析句子的构成和语言中允许的结构规范。

词典分析字符行的输入(像程序的源代码)。它产生一系列词汇符号(词汇记号)。它抓住了单词的意思。

语义分析关注短语的含义。提取句法结构的含义。而讲话验证了课文的整体意思。

最后,语用方法解释从文本中提取的概念,检查语义分析的含义是否正确,并定义不清楚的含义。

理解人类的挑战

人工智能背后的关键元素是科幻片:自然语言处理。这项技术已经变得越来越受欢迎,对于让机器能够以我们说话和写作的确切方式理解人是至关重要的。

全球每天产生超过 250 万条新数据。大部分数据是非结构化的。

尽管有许多使用的可能性,但由于分析的复杂性,这些数据没有得到充分利用。得出的结论是,公司只使用了产生的数据的 8%。

数据中断的一个主要原因是机器尚未理解的自然语言中的所谓文本。示例包括博客文本、社交网络出版物和电子邮件文本。

在最多样化的数字平台上,这种类型的文本的产量每天都在增加,这种情况对公司来说是一个千载难逢的机会,即数字技术更先进的公司。

这比你认为你能理解的文本要复杂得多。计算机必须能够识别上下文,进行句法、形态、语义和词汇分析,生成摘要,翻译成其他语言,吸收信息,解释感觉和感觉,以及学习。

自然语言处理给企业带来的好处?

当你给智能手机写消息时会发生什么?从你插入第一个字母的那一刻起,你想写的单词是否就像变魔术一样出现?这是一个自然语言处理能给我们人类带来什么的实际而典型的例子。

这是我们认为理所当然的事情,我们不会用任何东西来交换。我们使用智能手机的这一功能时,几乎没有意识到这一点。这是自然语言处理如此必要的众多原因之一!

正是这种重要性和与 NLP 相关的简化文化引起了企业的注意。作为公司数字化转型的顾问,我已经确定了 NLP 对企业的一些好处和益处。

区别

对我来说最重要的事情之一。企业因其差异化而脱颖而出。使用自然语言处理,加上一点创造性,再加上正确的策略,可以有效地导致突出的行动。

个性化护理

如今,除了日益数字化的习惯之外,还有更多要求更高、更不耐烦的客户。

客户希望当场解决他们的问题。他们不承认在客户支持表格或求助热线上浪费时间,在大多数情况下,这些一开始并不能解决问题。

自然语言处理似乎是一种客户关怀解决方案,因为它可以学习识别和解决当时的关键客户需求——从长远来看是完全自主的。

优化用户体验(UX)

与考虑个性化服务一样,一个交互式的智能机器人可能比需要填写的表单更好。

这不仅仅是客户服务。而且是关于销售,售后,甚至是吸引新客户。

降低成本

技术采用的首要目标是什么?简化流程。我们当然会通过简化流程来充分利用技术和人力资源。

有了 NLP,数据收集变得更加自给自足,而不是让整个团队审查文档、流程和无尽的 Excel 表格。

客户满意度

消费者希望尽可能快地解决所有问题,最好不要费太多力气。

当以一种智能的方式应用时,比如将 NLP 的能力发挥到极致的聊天机器人——除了理解意图和理解感受之外,它还将积极地促进您的客户的满意度。

提供数据

数据中断是公司数字时代的重大挑战之一。使用 NLP,收集更真实、更可靠的数据可以代表您当今业务的最佳策略。

结论

自然语言处理是人工智能的一个子集,旨在近似人类行为。一种误解通常证明聊天机器人和其他自助服务工具对用户的负面体验以及虚拟助手的准备不足是正确的。

NLP 的使用足以填补这一空白。在模仿人类语言之前必须了解它,以及它的复杂性和模糊性。

自然语言处理更侧重于理解人的说话方式,而不是将人与机器的关系人性化。不过,这个地区也因此受益。

这项技术也可能有助于回答“机器人将在就业市场上取代人”这个经典问题。

还有一件事…

如果你想了解更多关于人工智能以及如何学习它,以及它将如何影响商业和我们的社会,下面的文章可能会让你感兴趣:

【非常】工业 4.0 中的 AI 简介

人工智能和数字化转型将如何永远改变你的业务

让你学习 AI、机器学习、数据科学印象最深刻的 Youtube 频道。

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

学习 AI 在线:200 多种资源在线今天开始学习 AI

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

https://www.amazon.com/dp/B08RSJRNSN】

参考

  1. CX 现在:什么是自然语言处理,为什么…https://blog . bold 360 . com/ai-insights/CX-now-what-is-natural-language-processing-NLP-and-why-it-is-more-ever-by-ever/
  2. 自然语言处理,是什么?|推送聊天机器人。https://push.al/en/natural-language-processing-what-is-it/
  3. 自然语言处理的 7 大应用。https://www . geeks forgeeks . org/top-7-自然语言处理应用/
  4. 向 ZeitZeiger 问好,这是一种电脑计时方法。https://www . tech times . com/articles/199599/2017 02 28/say-hello-to-zeitzeiger-computer-method-that-tell-time-on-your-body-clock . htm
  5. NLP 有哪些不同的级别?….https://medium . com/@ CKEspanol/what-the-different-levels-of-NLP-how-do-these-integrate-with-information-retrieval-c 0 de 6b 9 ebf 61

什么是神经架构搜索?你为什么要在乎?

原文:https://towardsdatascience.com/what-is-neural-architecture-search-and-why-should-you-care-1e22393de461?source=collection_archive---------9-----------------------

由算法创建的神经网络

疾控中心Unsplash 拍摄的照片

深度学习的民主化

深度学习模型的使用每天都变得越来越民主,在很多行业变得不可或缺。然而,有效的神经网络的实现通常需要建筑工程的背景和大量的时间来在迭代过程中探索我们知识的全部解决方案。神经网络的形式和结构将根据特定的需要而变化。因此,有必要根据给定的需求设计特定的架构。以试错的方式设计这些网络是一项乏味的任务,需要架构工程技能和领域专业知识。专家利用他们过去的经验或技术知识来创建和设计神经网络。这意味着潜在使用和评估的体系结构集合将减少到专家已知的那些。

迫切需要效率和优化

在一些行业中,神经网络的效率是至关重要的。为了使神经网络一般化并且不过度适应训练数据集,找到优化的架构是很重要的。然而,在生产力比质量更重要的时代,一些行业忽视了他们的模式的效率,并且满足于第一个实现他们目标的模式,而没有更进一步。寻找合适的架构是一项耗时易出错的任务并且需要架构设计技能。由于缺乏时间或架构专业知识,这些行业没有通过“足够”的模型充分挖掘其数据的潜力。

本文旨在展示神经架构搜索(NAS) 的进展,它面临的困难和提出的解决方案,以及 NAS 现在的受欢迎程度和未来趋势。

如何理解神经架构搜索的复杂性

神经架构搜索旨在为满足特定需求的神经网络发现最佳架构。NAS 本质上是一个人手动调整神经网络并学习什么工作得好的过程,并自动完成这项任务以发现更复杂的体系结构。这个领域代表了一套工具和方法,这些工具和方法将使用搜索策略测试和评估搜索空间中的大量架构,并通过最大化适应度函数来选择最符合给定问题 的目标的架构。

参考文献 —神经架构搜索概述

NAS 是 AutoML 的一个子领域,它封装了所有自动化机器学习问题的过程,因此也是深度学习问题。随着 Zoph 和 LeBaker 和 al 的工作,2016 年标志着 NAS 的开始,他们利用强化学习算法实现了最先进的图像识别和语言建模架构。这项工作极大地推动了这一领域的发展。

著名项目

神经结构搜索是机器学习中发展最快的领域之一。在不同的行业和不同的问题中,大量的研究工作涉及对神经网络结构的搜索的自动化。如今,许多手动体系结构已经被 NAS 构建的体系结构取代:

最近在 NAS 方面的工作表明,该领域正在全面扩展并成为趋势。2019 年和 2020 年标志着正在进行的研究数量的加速。虽然早期的工作可以被认为是概念的证明,但当前的研究正在解决跨几个行业研究领域的更具体需求。这一趋势显示了 NAS 所能带来的潜力,不仅体现在它的效率和适应任何类型问题的能力,还体现在工程师在非自动化任务上节省的时间。

神经架构搜索的好处要不要投资?局限性呢?

NAS 方法探索许多具有可变复杂性的潜在解决方案,因此在计算上非常昂贵。他们的搜索空间越大,需要测试、训练和评估的架构就越多。这些方法需要大量的资源和时间来找到一个足够好的模型。他们基于强化学习的 NAS 方法 Zoph 等人用了 800 个 NVIDIA K40 GPUs,用了 28 天。自从第一种方法以来,新的模型已经出现,搜索时间大大缩短。例如,渐进式神经架构搜索展示了类似的最先进的结果,搜索速度提高了 5-8 倍。高效的神经架构搜索大约需要 7 个小时才能找到该架构,与 NAS 相比,GPU 时数减少了 50,000 倍以上。

然而,这一领域受到其他几个限制。事实上,很难知道一个潜在的模型在真实数据上的表现如何。由于架构是用训练数据评估的,如果我们期望在真实数据上有一个执行模型,后者必须是高质量的。
仍有必要定义算法将如何找到并评估这些架构。这个任务还是手工完成,需要微调。然而,领域知识的缺乏不会降低架构的效率。这些知识有助于加速搜索过程,它将指导搜索,从而算法将更快地收敛到最优解。

最近的算法,如 PNAS 方法,试图近似未来性能,但这些预测器必须微调,仍然是近似值。此外,某些方法受到鲁棒性问题的困扰,很难训练。

一些实际的研究现在集中在使用 生物启发算法 作为 NAS 方法。这些算法对于优化任务非常有效,因此似乎是寻找神经网络最佳架构的理想候选。

带走:

  • NAS 从大量备选方案中找到理想的解决方案,并选择最符合给定问题目标的方案
  • 优化算法
  • 生物灵感
  • 计算成本非常高
  • 很难估计它在真实数据中的表现

结论

在一个优化性能至关重要的时代,神经架构搜索是一个快速扩展的领域。这个非常新的领域仍然面临一些困难,以成为行业中深度学习项目设计的成熟步骤。然而,最近的工作表明,随着更快和更完整的体系结构评估方法的出现,这些困难将在未来几年消失。领域知识的贡献将不再是不可或缺的,而是提高研究方法效率的优势。因此,NAS 将为行业和公司带来更多的灵活性,这些工具能够适应多种特定需求。

🚀- 圣甲虫的消息

https://medium.com/@tgey/about-me-thomas-gey-a8a42f6622cc https://medium.com/@ScarabNews/membership https://medium.com/subscribe/@ScarabNews

感谢阅读本文!如果你有任何问题,请在下面留言。

参考文献:

究竟什么是神经网络实现?

原文:https://towardsdatascience.com/what-is-neural-network-implementation-anyway-a37e108d0143?source=collection_archive---------30-----------------------

python3 和 scikit-learn 实现

乌列尔资深大律师Unsplash 拍摄的照片

随着时间的推移,从事数据科学的人越来越多。特别是,深度学习领域是数据科学界最重要的话题。但是一切都可以归结为它的本质,在任何学术/研究环境中,都是了解你的基础知识。在过去,我已经分享了我关于以下主题的知识:数据集的类型数据预处理Python 中的数据预处理线性回归决策树朴素贝叶斯分类器

在这篇文章中,我将讨论一个非常简单的使用 scikit-learn 实现人工神经网络(ann)的方法。为了将高级深度学习(DL)应用于现实世界的问题,必须理解 ann。如今,我们几乎在所有可以想象的情况下都使用 DL。举几个例子:

  1. 图像分类
  2. 文本分类
  3. 医学图像分割
  4. 深度强化学习
  5. 音频分析

以上这些例子可以进一步分解成具体的问题。

这个实现的代码是独立的。没有来自命令行的输入。代码分为 6 个部分。我会把每个部分的代码,并解释它的方式。在所有的部分都介绍完之后,我会放一个完整代码的链接。如果你只想看代码,可以直接跳到文章的末尾。所以,事不宜迟,让我们开始吧。

第 1 部分—导入所需的包

from sklearn import datasets
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report

→第一行是从scikit-learn库本身导入数据集。我们将使用虹膜数据集来实现。

→第二行是导入MLPClassifier(多层感知器),这是我们的神经网络。

→第 3 行是 数据预处理 的一部分,将整个数据集拆分为训练和测试。

→第 4 行是 数据预处理 的一部分,用于将特征缩放应用于数据集。

→第 5 行是得到 混淆 _ 矩阵 的预测和真实类标签来检查模型的性能。

→第 6 行是获得完整的分类报告,包括准确度、f1 分数、精确度和召回率,作为性能指标

第 2 部分—加载数据集

iris = datasets.load_iris()X = iris.data
y = iris.target
print('total data: ', len(X))

输出:

总数据:150

→第一行是从scikit-learn库中创建并提取数据集(虹膜数据集)。

Iris 数据集的属性|来源: Scikit-learn

→第二行是从数据集中获取独立属性。

→第三行是从数据集中获取从属属性。

第 3 部分—将数据集分为训练和测试

任何机器学习算法都需要进行准确性测试。为此,我们将数据集分为两部分:训练集测试集。顾名思义,我们使用训练集使算法学习数据中存在的行为,并通过在测试集上测试来检查算法的正确性。我们的做法如下:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
print('train data: ', len(X_train))
print('test data: ', len(X_test))

输出:

训练数据:112

测试数据:38

这里,我们假设训练集是原始数据集的 75%,测试集是原始数据集的 25%。这通常是它们被分割的比例。但是,你有时会遇到 70-30%或 80-20%的比例分割。但是,你不想对半分。这会导致 模型过拟合。 这个话题太庞大,无法在同一个帖子里涵盖。我将在以后的文章中介绍它。目前,我们将按照 75-25%的比例进行分配。

第 4 部分—特征缩放

在下面的帖子中,我将从概念上详细讨论变量转换(特性缩放)。

我们使用特征缩放将不同的尺度转换为标准尺度,以使机器学习算法更容易。我们在 Python 中这样做,如下所示:

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

这些数据现在可以输入到机器学习算法中。

第 5 部分—定义和训练MLP 分类器

clf = MLPClassifier(hidden_layer_sizes=(10, 10, 10), random_state=1, max_iter=1000, activation='relu', solver='adam')clf.fit(X_train, y_train)

在这个实现中,

→网络中有 3 个隐藏层,每个层有 10 个神经元,用属性hidden_layer_sizes表示。这个网络是一个非常简单的网络。我鼓励你尝试不同数量的层和不同数量的神经元,看看结果的差异。

random_state无非是一个种子值,这样我们每次运行同一个网络,都不会得到不同的结果。

max_iter是最大迭代次数。求解器迭代,直到收敛或达到此迭代次数。

activation是隐藏层的激活功能。

solver是权重优化的求解器。

要了解有关 MLPClassifier 参数的更多信息,请访问:

https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html

clf.fit将训练数据传递给网络,以便网络从中学习。

要了解神经网络的基本概念,请访问:

第 6 部分—预测测试结果和检查性能

y_pred = clf.predict(X_test)cm = confusion_matrix(y_test, y_pred)
print(cm)print(classification_report(y_test, y_pred, target_names=iris.target_names))

输出:

混淆矩阵和分类报告|作者图片

→我们收集第 1 行网络的预测。

→我们在下一行制作混淆矩阵,然后打印出来。

→我们在最后一行做分类报告,打印出来。

结论

这篇关于分类神经网络的基本实现的文章到此结束。如您所见,测试集的准确率为 97%。我尝试了 80-20%的训练测试分割,我能够实现 100%的测试准确性。精确度如此之高是因为数据集的大小非常小。通常,我们永远不会在更大的数据集中达到 100%的准确率。如果你有,回复这篇文章。我很想知道你是如何做到的?

这是完整的代码。

我正在免费赠送一本关于一致性的电子书。在这里获得你的免费电子书。

如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑注册成为一名媒体成员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你注册使用我的链接,我会赚一小笔佣金,不需要你额外付费。

https://tarun-gupta.medium.com/membership

我希望你喜欢阅读这篇文章,并开始学习一些基本的人工神经网络实现。感谢您的阅读。

这是我的故事索引:

“ELTP 过程”中的 P 是什么?

原文:https://towardsdatascience.com/what-is-p-in-eltp-process-e56d995d7029?source=collection_archive---------26-----------------------

解决“数据最后一英里问题”,为您的企业释放全面的分析能力。

图片由大河望田中@ Anelen 有限责任公司授权的 iStock Photo 提供

将 P 添加到 ELT

如果你和数据工程师一起工作过,你可能听说过 ETL 或者 ELT。

  • E 用于从源中提取数据。
  • T 用于将从原始数据转换为干净有用的信息。
  • L用于将加载到目的数据湖或数据仓库。

趋势是在将数据加载到强大的现代数据仓库(如 Google BigQuery、Snowflake、AWS Redshift 或 Microsoft Synapse)后对其进行转换。因此,人们越来越多地使用 ELT 而不是 ETL 来处理数据。

我要给 ELT 加一个 P,就是“Publishing”这是将转换后的数据发布到人们或另一个程序将使用它们的确切位置的过程。我们称之为“前线应用”。

ELT 不能解决“数据最后一英里问题”

考虑这个业务场景:产品合格线索评分(PQL 评分)。

假设您的公司是一家软件即服务(SaaS)公司。基本功能都是免费的。你的潜在客户通过在线广告找到你的服务。注册是免费的,但用户必须输入他们的工作电子邮件和业务信息。

如果您正在使用 Marketo 或 Pardot 等在线营销自动化工具,您可以在此时获取潜在客户的产品发现渠道及其电子邮件。但营销过程通常与使用统计数据脱节。这是因为使用数据通常位于生产数据库中。

或者您可能更进一步,通过 ELT 过程将数据从生产数据库复制到数据仓库。你可能是一名数据科学家,他想出了一个公式或机器学习算法来计算 PQL 分数,以表明哪些免费层用户可能会转化为付费客户。

但是只要数据还在仓库里,它就不会被使用。PSQL 分数应该发布给 Marketo、Pardot 或 Salesforce,因为这是销售和营销人员的工作场所。他们太忙了,没有时间打开商业智能工具或运行查询来找出哪些潜在客户应该优先考虑。

作者图片

发布:将数据推出仓库

除了产品营销用例之外,向一线应用发布指标的重要性也非常重要。SaaS 企业的另一个令人信服的案例是客户成功。对于基于订阅的服务,跟踪每个订户帐户的健康状况至关重要。特别是对于复杂的业务应用程序,客户可能会在看到价值之前放弃产品。您的客户在注册后是否采取了正确的步骤来获得价值,或者他们在开始时遇到了困难?

企业 SaaS 公司通常有一个客户成功功能,以帮助新客户在入职过程中及以后。如果能在他们工作的地方(如 Zendesk)获得信息,产品使用统计数据和帐户的健康得分将是有益的。

ELTP 的 P 解决了信息传递的最后一英里问题,使商业运作变得聪明、高效和精益。

ELTP 自动化

在过去的几年里,ELT 业务不断增长。有很多服务可以自动将数据从各种在线应用程序转移到数据仓库。但是很少有资源和服务可用于自动化数据发布,更不用说提供无代码解决方案了。

缺乏无代码解决方案并不一定会阻止企业利用强大的 ELTP 过程。对数据工程的一点点投资将为整个商业运作带来回报。

流行的开源 ELT 框架之一是 singer.io 。singer.io 社区构建了名为“tap”的数据提取器和名为“target”的数据加载器。Singer.io 的规范帮助数据工程师混搭 tap 和 targets,为每个业务用例创建源-目的组合。在典型的 ELT 框架中,Salesforce 和 Marketo 等云应用程序是数据源(tap),数据仓库是目的地(targets)。

当我们从事“ELTP”的 P 时,我们颠倒了名称:例如,我们为 BigQuery 开发了tap 程序来提取产品使用度量,为 Pardot 开发了目标程序。通过运行这种 tap-target 组合,我们自动完成了将产品使用数据从 BigQuery 发布到 Pardot 的过程,因此我们客户的营销和销售团队可以充分利用 PQL 指标,而无需手动移动数据。

ELTP 的未来

数据发布不仅限于人类消费。计算出的指标可以复制回生产数据存储或缓存层,以使产品的用户体验更加优化和个性化。这些指标可以基于简单的统计数据,也可以基于机器学习的复杂计算结果。通过解决最后一英里的问题,并确保有价值的信号被正确地传递到重要的地方,我们可以释放看不见的潜力。

在不久的将来,将会有更多的新业务提供无代码解决方案和服务来结束这个循环。与此同时,我们将帮助企业定制 ELTP 解决方案,并在销售、营销和客户成功使用案例方面创造更多成功故事。

有趣的演示

这是一个解决“最后一英里问题”的有趣演示这些 GIF 动画是在指定的时间间隔自动创建并发布在 Twitter 上的。我们从来源(地质金融)提取数据,转换数据(包括制作动画的部分),并将其交付到重要的地方(社交媒体)。

图片作者。美国地质调查局的公共领域数据

作者图片

关于作者

大河望·田中是 ANELEN 有限责任公司的首席执行官兼数据科学家,该公司是一家专注于数据工程、分析和数据科学的精品咨询公司。ANELEN 的使命是帮助创新企业利用数据科学做出更明智的决策。

原载于 2021 年 2 月 13 日 https://articles.anelen.cohttps://articles.anelen.co/What-is-P-in-ELTP-Process/

p 值是多少?

原文:https://towardsdatascience.com/what-is-p-value-370056b8244d?source=collection_archive---------6-----------------------

p 值的详细解释

如果你用谷歌搜索“什么是 p 值”,页面上显示的第一个结果是维基百科的定义:

p 值是在假设零假设正确的情况下,获得至少与实际观察到的结果一样极端的测试结果的概率。—维基百科

嗯…好消息是我们知道这个定义是正确的;糟糕的是,这个定义太正确了,难以理解。

所以…今天的游戏就是想分解这句话!

因为现在是假期!(万岁~),让我们邀请姜饼人一起来玩吧!

姜饼人:你确定吗?p 值…好玩???(吉尔·威灵顿在像素上拍照)

圣诞老人的饼干店

圣诞老人的饼干店正在出售他们的著名产品——姜饼饼干!圣诞老人为他的饼干感到非常自豪。他相信他的产品是世界上最好吃的。还有,圣诞老人说每个产品(一袋姜饼)的平均重量(μ)是 500g

现在是 21 世纪。圣诞老人已经有了自己的工厂和自动化机器来帮助他制作饼干。如你所知,没有完美的机器和生产过程,所以不同袋的饼干之间会有差异。假设我们知道袋装饼干正态分布,标准差(σ)等于 30g。

因此,如果萨特纳的说法是真的(一袋饼干的平均重量= 500 克),我们可以预期一袋饼干的分布如下:

我们能相信圣诞老人的话吗?

但是,作为一个非常喜欢姜饼的好奇顾客,我想知道…一袋饼干的平均重量真的等于 500 克吗?如果圣诞老人欺骗顾客,给我们少于 500 克的饼干怎么办?我们如何验证圣诞老人的话?

这就是“假设检验”的用武之地。

为了实现假设检验,首先,让我们建立我们的零假设(H0)和替代假设(H1)。作为一个讲道理的人,我们不应该在没有任何证据的情况下怀疑别人。所以,我们假设圣诞老人对他的生意是诚实的(H0)。如果我们想检查他的饼干是否少于 500g,我们需要收集数据并有足够的证据来支持我们的猜测(H1)。所以…我们有如下的假设陈述:

H0:平均一袋饼干重量(μ)= 500 克
H1:平均一袋饼干重量(μ)<500 克

因为我们不确定我们的人口分布是什么样子,我用虚线来表示可能的分布。如果圣诞老人的说法是真的,我们可以预计一袋饼干的平均重量等于 500 克(左图)。然而,如果圣诞老人的说法是不真实的,饼干的平均重量小于 500 克,人口分布应该看起来不同(右图)。

酷!问题陈述已设定。那么现在,下一个问题是:如何检验我们的假设陈述?

也许称一下所有的饼干袋,这样我们就能知道确切的人口分布了?嗯……显然,我们不可能收集到所有圣诞老人的甜饼店生产的甜饼(人口)!!!那么…我们该怎么办?

在这里,“推断统计”派上了用场!

推断统计学的核心概念

在推断统计学中,我们感兴趣的是总体参数(总体的属性)。但是,要收集全部人群的所有数据来计算参数,几乎是不可能的。因此,我们从总体中抽样以获得样本数据。然后,我们从样本数据中计算统计量(样本的属性)作为我们的估计量,以帮助我们推断未知的总体参数。(如下图)

参数和统计示例:
-参数:总体均值(μ)、总体标准差(σ) …
-统计:样本均值(x̄)、样本标准差(s) …

检验我们的假设陈述也是一项推断统计工作。流程同上。但是现在,我们对单个未知参数不感兴趣;相反,我们感兴趣的是“我们是否能拒绝零假设?”。

这个问题怎么回答?使用相同的方法—我们从样本数据中计算统计数据来推断这个问题的答案。这里使用的统计称为检验统计。

太好了!现在,我们知道应该收集样本数据并计算检验统计量,以检验假设陈述。

但是……让我们暂停一下。在进入测试部分之前,让我快速回顾一下抽样分布的概念,以确保我们在同一页上。

抽样分布审查

抽样分布是样本统计量的分布。

让我们以其中一个统计数据——样本均值(x̄)——为例。如果我们从总体中多次取样,我们可以得到许多样本数据集(样本 1 到样本 m)。然后,如果我们从每个样本数据集中计算样本平均值(x̄),我们可以得到样本平均值(x̄).)的 m 个数据点利用这些数据点,我们可以画出样本平均值分布图(x̄).由于这种分布来自于样本统计,我们称这种分布为样本均值的抽样分布(x̄)

同样的想法也适用于其他统计数据。例如,如果我们从每个样本数据集中计算检验统计量,我们可以得到检验统计量的抽样分布。

抽样分布与所有其他分布相似,它显示了如果我们从总体中多次抽样,统计值出现的可能性(概率)。

在下面的小节中,我将使用棕色来表示采样分布曲线。

不错!现在,是时候进入测试部分了!

测试假设陈述

我们需要做的第一件事是有一个样本数据集。所以,我去了圣诞老人的饼干店,随机挑选了 25 袋饼干(n)作为我们的样本数据。另外,我计算出该样品的平均重量(x̄)为 485 克。

测试的第一部分是将我们的样本统计量与零假设进行比较,这样我们就可以知道我们的样本统计量离期望值有多远。

为此,我们首先假设零假设为真。这是什么意思?这意味着,在我们的例子中,我们假设一袋饼干的人口分布实际上等于 500 克。如果这种说法是正确的,根据中心极限定理,如果我们多次从该总体中取样,我们可以得到样本平均值(x̄)的取样分布,如下图所示(样本平均值的平均值= 500g)。

p 值定义:
“p 值是在假设零假设正确的情况下,获得至少与实际观察到的结果一样极端的检验结果的概率,”—维基百科

所以现在,如果零假设为真,我们可以很容易地看到我们的样本均值比预期均值(500g)低 15g(485–500 =-15)。

嗯……但是“15g”只是一个数字,对我们解释意义帮助不是很大。还有,如果我们要计算曲线下的概率,一个一个的计算效率很低(想象有无数个分布,每个都有自己的均值和标准差……你真的不想计算很多很多次的概率……)

那么,我们该怎么办呢?我们标准化我们的值,使得分布的平均值总是等于零。标准化的好处是统计学家已经生成了一个包含每个标准化值下的面积的表格。所以我们不需要逐个计算面积。我们需要做的就是标准化我们的数据。

如何规范?在我们的例子中,我们使用 z 分数来转换我们的数据。在我们的例子中,z-score 是测试统计

下图显示了检验统计量(z 得分)的抽样分布。我们可以看到,如果我们的样本数据正好等于零假设(总体均值=500g,样本均值= 500g),我们应该有检验统计量等于 0。在我们的例子中,我们的样本平均值等于 485g,这使我们的测试统计量等于-2.5 (-2.5 是我们从样本数据中观察到的测试结果)。这表明我们的样本数据比预期值低 2.5 个标准误差

p 值定义:
“p 值是在假设零假设正确的情况下,获得测试结果至少与实际观察到的结果一样极端的概率。”—维基百科

这里我想提一下检验统计量是根据不同的情况来选择的。你可能会听到不同种类的统计检验,如 z 检验、t 检验、卡方检验……为什么我们需要不同种类的检验?

因为我们可能需要测试不同类型的数据(分类数据?定量?),我们可能有不同的测试目的(均值测试?比例?),我们拥有的数据可能具有不同的分布,我们可能只有有限的数据属性……因此,如何选择合适的测试方法是另一项至关重要的工作。

在这种情况下,由于我们对检验平均值感兴趣,我也假设我们的总体数据是正态分布的,具有已知的总体标准差(σ)。基于我们的条件,我们选择了 z 检验。
如果您对何时使用每种统计检验感兴趣,请参考不同种类的统计检验的假设。

好了,现在我们有了测试统计数据。当零假设为真时,我们知道我们的检验统计量离期望值有多远。那么,我们真正想知道的是:如果零假设为真,我们得到这个样本数据的可能性(概率)有多大?

要回答这个问题,我们需要计算概率。如你所知,一个点到另一个点之间的概率就是我们在这两点之间的抽样分布曲线下的面积。

所以在这里,我们不计算特定点的概率;相反,我们计算从我们的测试统计点到无穷大的概率——表示远离我们的测试统计(也远离预期的测试统计)的所有点的累积概率。

这个累积概率就是我们的 p 值

你可能想知道为什么我们不计算特定测试统计的概率(一分)。以下是我在这篇文章中发现的两种可能的解释:

(1)数学上,概率曲线上特定点的概率为零。为了计算概率,我们需要计算曲线下的面积。

(2)为了决定我们是否应该拒绝零假设,我们使用 p 值来比较显著性水平。由于显著性水平是累积概率,我们需要使用相同的格式来比较其中两个。因此,p 值也应该是一个累积概率。(我将在后面介绍 siginificant level)

p 值定义:
“p 值是在假设零假设正确的情况下,获得至少与实际观察到的结果一样极端的测试结果的概率。”—维基百科****

精彩!我们刚刚解释了 p 值定义的所有部分!

让我们计算一下本例中的 p 值。正如我之前提到的,使用检验统计的最好方法是统计学家已经了解了抽样分布的属性。因此,我们可以只查找 z 表,或使用任何统计软件来帮助我们获得 p 值。

在我们的例子中,p 值等于 0.0062 (0.62%)。

请注意,在我们的案例中,我们正在进行单尾测试。也就是说,我们只考虑一个方向来计算分布中的“极端”概率。由于我们的替代假设(H1)被设定为“平均值小于 500 克”,我们只关心小于我们的检验统计量的值(左侧)。

我们可以根据另一个假设来确定应该关注哪条尾巴。如果备选项假设包括:
(1)感兴趣属性小于(<)期望值:关注左尾
(2)感兴趣属性大于(>)期望值:关注右尾
(3)感兴趣属性不等于(≦)期望值:关注双尾

注意:
感兴趣的属性-平均值、比例…(在我们的例子中是平均值)
期望值-特定数字…(在我们的例子中是 500g)

现在,我们有 p 值= 0.0062。嗯…这是一个小数字…但这意味着什么呢?

这意味着,在我们的零假设为真的条件下(总体均值真的等于 500g),如果我们从这个总体分布中抽样 1000 次,我们将有 6.2 倍的机会得到这个样本数据(样本均值= 485g)或样本均值小于 485g 的其他样本。

换句话说,如果我们得到样本均值等于 485g 的样本数据,有两种可能的解释:

  1. 人口平均数实际上等于 500 克(H0 是正确的)。而我们非常“幸运”的得到了这个难得的样本数据!(1000 次抽样中的 6.2 次)

或者…

2.“零假设为真”的假设是不正确的。该样本数据(样本平均值等于 485g)实际上来自更可能发生样本平均值= 485g 的其他人口分布。

酷!所以现在我们知道,如果我们的 p 值非常小,这意味着要么我们得到了非常罕见的样本数据,要么我们的假设(零假设为真)是不正确的。

那么,接下来的问题就是:我们现在只有 p 值,但是如何用它来判断什么时候拒绝零假设呢?换句话说,p 值有多小,我们就愿意说这个样本来自另一个人群?

这里先介绍一下判断标准— 显著水平(α) 。显著水平是一个预定义的值,需要在实施假设检验之前设置。你可以把显著性水平作为一个阈值,这给了我们一个何时拒绝零假设的标准。

该标准设定如下:

如果 p 值≤显著水平(α),我们拒绝零假设(H0)。
如果 p 值>显著水平(α),我们无法拒绝零假设(H0)。

比如说,我把我的显著性水平设为 0.05。

我们可以看到下图,红色区域是显著水平(在我们的例子中,它等于 0.05)。我们使用显著性水平作为我们的标准,如果 p 值在(小于或等于)红色区域内,我们拒绝 H0;如果 p 值超过(大于)红色区域,我们无法拒绝 H0。

这里我想提一下,显著性水平(α)也表示我们对 I 型错误可接受的最大风险(I 型错误是指当 H0 实际为真时我们拒绝 H0)。

通过下图很容易看出为什么——下面的分布曲线表明零假设(H0)是正确的。红色区域是当假设为真时,我们决定拒绝零假设的概率。如果 p 值等于显著性水平(我们的情况是 0.05),那么当 H0 为真时,这将是我们错误拒绝 H0 的最大概率。

在我们的例子中,我们有 p 值= 0.0062,小于 0.05,因此,我们可以拒绝我们的零假设。换句话说,根据我们的测试,我们很遗憾地说,我们有足够的证据来支持我们的替代假设(一袋饼干的平均值小于 500 克)。这意味着…我们有足够的证据证明圣诞老人欺骗了我们…

嗯…如果我们把显著性水平改成 0.005 会怎么样?

结果会不一样。因为 0.0062 > 0.005,所以我们不能拒绝 H0。这是棘手的部分,因为显著水平是主观的,我们需要在测试前确定它。否则,我们很可能在知道 p 值后欺骗自己。

我们有足够的证据证明你欺骗了我们!!!(图片由像素上的安德里亚·皮亚卡迪奥拍摄)

概述

谢谢你读到这一步。让我们快速回顾一下,结束今天的游戏!

p 值是多少?

第 1 部分:为了检验我们的样本数据是否支持替代假设,我们首先假设零假设为真。这样我们就可以知道我们的样本数据离零假设给出的期望值有多远。

p 值定义:
“p 值是在假设零假设正确的情况下,获得至少与实际观察到的结果一样极端的检验结果的概率”—维基百科

第 2 部分:根据分布、数据类型、目的、数据的已知属性,选择一个合适的检验统计量。并计算样本数据的检验统计量。(测试统计显示我们的样本数据与期望值的差距)

p 值定义:
“p 值是在假设零假设正确的情况下,获得测试结果至少与实际观察到的结果一样极端的概率。”—维基百科

第三部分:计算在代表你的替代假设(左尾,右尾,双尾)的方向上,从检验统计点到无穷大(表示更极端)的概率(抽样分布曲线下的面积)。

p 值定义:
“p 值是在假设零假设正确的情况下,获得测试结果至少与实际观察到的结果一样极端的概率。”—维基百科

这个累积概率就是 p 值。

小 p 值是什么意思?

如果我们有一个非常小的 p 值,这可能表明两种可能的意义:
(1)我们是如此“幸运”地得到这个非常罕见的样本数据!
(2)这个样本数据不是来自我们的零假设分布;取而代之的是来自其他人群的分布。(以便我们考虑拒绝零假设)

p 值怎么用?

为了确定我们是否可以拒绝零假设,我们将 p 值与预定义的显著性水平(阈值)进行比较。

如果 p 值≤显著水平(α),我们拒绝零假设(H0)。
如果 p 值达到>显著水平(α),我们就无法拒绝零假设(H0)。

感谢您的阅读!欢迎任何反馈、建议和评论。如果你能让我知道你的想法和我文章中可能的错误,我将不胜感激。

图标属性

来自 Flaticoniconixar 制作的姜饼人图标

catkuroFlaticon 制作的纸袋图标

参考

[1] Everything you Should Know about p-value from Scratch for Data Science
[2] (video) What is a Hypothesis Test and a P-Value? | Puppet Master of Statistics
[3] (video) Hypothesis Testing: Test Statistic (one-sample t-test) I Statistics 101 #3 | MarinStatsLectures
[4] (video) What is a p-value? (Updated and extended version)
[5] How t-Tests Work: t-Values, t-Distributions, and Probabilities
[6] Interpreting P values
[7] P-values Explained By Data Scientist
[8] Test statistics explained
[9] What is a test statistic?
[10] Test Statistic: What is it? Types of Test Statistic
[11] Why do p-values include the probability of obtaining more extreme values than the test statistic?
[12] Wikipedia - p-value
[13] Bluman, A. G. (2018). Elementary statistics: A step by step approach. New York, NY: McGraw-Hill Higher Education.
[14] 沈明來. (2016). 生物統計學入門第六版, 九州圖書文物有限公司

使用 Python 的量子计算简介

原文:https://towardsdatascience.com/what-is-quantum-entanglement-anyway-4ea97df4bb0e?source=collection_archive---------10-----------------------

利用 Python 技巧学习量子计算!

迈克尔·泽兹奇在 Unsplash 上的照片

量子计算的世界是新的和令人兴奋的,因为它是压倒性的和困难的。然而,这并不是必须的!你不需要一个物理学博士或一个超导量子位实验室来自己做实验,也不需要涉足这样一个新兴的领域。在这篇文章中,我将向你展示如何简单地开始,如何运行你自己的量子模拟,你所需要的只是一台笔记本电脑,一些耐心和一杯咖啡(所有喝茶的人都可以选择)。

首先,我将使用 Python 和 IBM 包 Qiskit 。一旦 Python 启动并运行,您就可以使用命令行并使用以下命令来安装 Qiskit。如果您在安装 Qiskit 时遇到问题,请查看此处的以获取更多信息。

作为参考,这些将是我使用的 Python 和 Qiskit 的版本。顶部的导入语句用于访问版本信息,我们将使用类似的语句从 Qiskit 获得其他功能。

在上面的代码和任何从包中获得能力的代码的顶部,我们将需要 import 语句。具体来说,我们将需要以下进口。

Aer 是我们所有量子模拟器的后端所在,这就是 M 模拟器的意义所在,把它放在顶部也是一个很好的做法,因为就像我们的 import 语句一样,我们不会在编写其余代码时更改它们。

现在,在我们编写代码之前,让我们讨论一下量子计算。量子计算机与经典计算机的区别在于它的位数。一些读者会熟悉经典位,它们由 0 和 1 表示,这些位的组合形成二进制字符串,类似于 0010110。经典位只能取 0 和 1 的值。Bits 可以存储信息,比如数字、字母、特殊字符、这篇文章以及我将来要写的所有文章。在我们的量子电路中,我们将使用经典位元来储存测量值,因为它们擅长这样做。

量子位不一样,可以同时取 0 和 1 的值!如果你对量子力学不熟悉,想想这个有点奇怪,让我们现在就开始,改天再说。当一个量子比特(量子比特)处于两个状态之间时,我们称之为叠加态,这可以表示为在每个状态下发现量子比特的概率。举个简单的例子,我们可以设置一个量子位,使其处于 0 和 1 的完美叠加状态。这意味着在测量量子位之前,它处于两种状态,当我们测量它时,它将是 0 和 1 的一半时间。

在你抓耳挠腮之前,想一个更简单的例子。我抛一枚硬币,接住它,盖上盖子,这样就没人能看见了。如果你要猜硬币是什么,你会说正面或反面,但硬币还不是正面或反面,直到我揭开我的手给你看。你会说,在你看它之前,如果你猜对了,你有一半的可能性是正确的,如果你猜对了,你有一半的可能性是正确的。这是一个需要记住的好例子,硬币比量子位更为我们所熟悉。

量子位的这种怪异性质使得它们如此特别和有趣,这是它们最擅长的,以叠加态存在。这就是我们今天要编码的,我们将取两个都处于 0 状态的量子位,将它们放入 0 和 1 的相等叠加中。这个叠加是特殊的,我们将会得到 4 个最大纠缠态之一,也称为贝尔态!这些在量子计算的许多方面都非常重要,所以这是一个实用的起点。

既然我们知道我们将需要经典位和量子位,我们可以用

qreg 和 creg 是电路获取所需比特的地方。从量子寄存器 qreg,我们的电路将找到量子位。creg 也一样。我们用这些填满我们的电路

现在我们有了名为缠绕者的量子电路。三行代码已经让我们走了很远,但是我们还没有完成。我们如何用量子位做事情?我能听到你在问自己。这是通过量子门实现的。量子门是以某种方式转换一个或多个量子位的操作。在这个例子中,我们将看到两个这样的门,哈达玛门和 CNOT 门。

阿达玛门是一个被覆盖的硬币翻转,它把一个量子位从 0 态变成 0 和 1 相等叠加的状态。CNOT 门更复杂,需要两个量子位来发挥它的魔力。本质上,CNOT 门改变“目标”量子位,取决于它看到“控制”量子位时看到的东西。这就是 CNOT 门的作用。

在这篇文章中,我们不会手动计算量子位的状态,但是你可以随意去做,或者自己尝试不同的门和量子位,看看它们会做什么。

我们将在第一个量子位上应用哈达玛门,在两个量子位上应用 CNOT 门,将第一个量子位作为控制,将第二个量子位作为目标。在我们应用这些门之后,剩下要做的就是检查我们的答案,看看我们得到了什么,这是通过测量每个量子位并将每个结果留在一个经典位中来完成的。

注意潜在的混淆,Python 和许多编程语言一样,从数字 0 开始计数,而不是 1。这意味着 0 量子位是第一个,1 量子位是第二个。你可以看到门是量子电路对象的方法,门以量子位为参数。测量也只是量子电路的一种方法,它把要测量的量子位作为第一个参数,把测量留下的经典位作为第二个参数。第一个和第二个经典位也分别编号为 0 和 1。

我是一个视觉爱好者,所以我会告诉你如何看到你刚才编码的量子电路图,并绘制我们的测量结果。我们可以用画出量子电路。draw() 方法。

这就产生了这张图。

作者的量子电路

我们沿着量子电路从左到右,看到了表示阿达玛门的“H”,有蓝点和加号的位是 CNOT 门,加号告诉我们哪个量子位是目标。以及两个看起来像迷你速度计的物体,代表每个量子位元的测量值。

现在我们已经看到了我们的量子电路,我们需要看到我们的结果。这是通过对我们的电路进行测量模拟来实现的。 execute() 函数将待测电路作为其第一个参数,将您想要用来进行仿真的仿真器作为第二个参数。

模拟器进行许多测量,并记录它发现的每个 0 和 1。然后 hist 变量获取这些记录,我们最后使用 plot_histogram() 给出我们结果的直方图。

按作者划分的 Phi+状态直方图

这里我们看到,当我们观察这个系统时,我们粗略地测量到两个量子位有一半时间处于 0 状态,而发现两个量子位有一半时间处于 1 状态。这是一个最大纠缠贝尔态。我们取了两个未纠缠的量子比特,并把它们混合得如此之多,以至于它们总是被发现处于相同的状态。纠缠是系统的冯·诺依曼熵的一种表示,在我们的贝尔态中,我们会说熵是最大的。熵是我们系统中无序或随机的量度,因为当我们测量我们的系统时,我们对每个可能的结果都只有一个同样可能的结果,它被认为是最大随机的。纠缠是一种可以被某些量子协议“用尽”的资源。我们可以在以后的文章中发现更多这样的内容!

我希望你现在对量子计算有一个更好的了解,以及如何在自己家里舒适地玩这些东西。感谢您阅读这篇文章,不久肯定会有更多文章。

你可以在 LinkedinGithub 找到我。如有任何疑问或意见,请给我发邮件。

什么是无线电信息学?

原文:https://towardsdatascience.com/what-is-radiomics-d9fb790a58c7?source=collection_archive---------29-----------------------

放射组学广义地定义了一个涉及从放射图像中提取高通量定量特征的过程。

放射组学源于几十年的医学成像和计算机辅助诊断。在该领域,医学图像被转换成高通量的定量特征(Lambin 等人,2012)。这些特征显示了增强诊断和预后预测的潜力(Rao 等人,2012)。尽管源自医学图像的量化特征可以追溯到几十年前(Haralick。,1973),‘组学’后缀表达了这些数据的维度、生物学重要性,并将这些特征与精确医学联系起来。

放射组学研究包括五个主要阶段:参与者选择、临床医生成像、放射组学特征提取、探索性分析和建模。Lambin 及其同事提出了一个 radiomics 质量分数,这是一个 36 分的系统,用于提高整个 radiomics 管道的稳健性(Lambin 等人,2017 年)。

虽然放射组学是从医学图像中高通量特征提取的新颖定义,但是存在两种类型的放射组学特征提取方法;“常规无线电组学”和“深度无线电组学”。

图 1:收音机学的发展。(图片作者)

深度射电天文学

深度学习工作流可用于从图像中学习特征,并执行分类/回归,而无需详细的 ROI 描绘。

这种方法的基础是,深度学习模型不仅应该用于数据挖掘和预测,还应该用于数据生成。使用深度学习提取的特征数量是手工特征的几倍。深度放射组学有几个优点,包括能够生成大量特征,并能够在同一管道内进行分类。

虽然 deep radiomics 提供了潜在的无限多的功能,但有三个主要挑战。第一个挑战是特性的可解释性。尽管我们可以将深层放射组学特征与生物学特征(基因组学、转录组学等)联系起来。)准确理解每个 radiomcs 功能的含义是一项挑战,尤其是与手工制作的 radiomics 功能相比。然而,随着可解释的深度学习的现代进步,通过使用激活映射等技术,深度放射组学有机会减少这种缺乏可解释性的情况。

第二个挑战是过度合身。当模型非常适合训练数据集但不适合测试/验证数据集时,过拟合是一个问题。这通常是由于每个相对较少数量的样本具有大量特征(数千至数十万)的结果。

而迁移学习等技术有助于在小数据集上使用深度学习。第三个问题是基于迁移学习在深度放射组学中的应用。迁移学习的总体思想是使用一个预先训练的模型,该模型一直在对数十万到数百万张图像进行训练,以识别重要的特征。如果没有迁移学习,在一个小群体上的训练将不会学习这些重要的特征。然而,大多数预训练模型是在二维图像上训练的,并不适用于原始 3D 医学图像。

常规放射组学特征

常规放射组学是描绘感兴趣区域(ROI)和提取“手工”特征的方法。这些特征试图通过捕获描述 ROI 形态、形状和纹理的参数来描述 ROI(Wang 等人,2014)。这些特征然后与结果变量相关联,例如存活时间。

形状特征顾名思义,它们描述了所描绘的 ROI 的形状,以及包括其体积、最大直径、最大表面积、肿瘤紧密度和球形度在内的属性。

一阶统计特征本质上是体素值的汇总统计。这包括平均值、中间值、最小值、最大值、偏斜度、峰度、均匀性和熵。

二阶特征,也称为纹理特征,是从体素到相邻体素的关系中获得的。纹理特征提供了关于体素强度和几何形状的信息。一组常见的纹理特征是从灰度级共生矩阵中导出的,灰度级共生矩阵量化了给定范围内具有相同强度的体素的数量。另一个例子是从灰度级游程矩阵(GLRLM)导出的纹理特征,该矩阵计算具有相同强度的连续体素的数量。GLCM & GLRLM 之间的关键区别是连续体素强度的计数。

高阶统计特征通常是一阶或二阶特征,从经过数学变换或滤波的图像中获得。这个想法是他们将抑制不必要的变化/噪音或揭示重要的细节/模式。用于计算这些特征的技术包括分形分析、闵可夫斯基泛函的泛函分析、小波变换和高斯拉普拉斯变换。

随着基于常规放射组学特征的技术、软件及其复杂性的增加,图像生物标记标准化倡议(IBSI)概述了一系列特征提取指南和特征命名法(Zwanenburg 等人,2016)。

放射基因组学

“放射基因组学”一词最初用于描述放射治疗对肿瘤基因谱的毒性作用(Kang et al .,2018)。然而,最近放射基因组学已被用于描述放射组学特征及其与基因组学及其他的关联,如蛋白质组学和代谢组学/代谢组学(Peeken 等人,2018)。尽管使用术语放射基因组学来描述放射组学与代谢组学/代谢组学的关系可能会由于基因组学后缀而增加不必要的混淆。

放射组学和放射基因组学的挑战

虽然放射组学和放射基因组学领域有潜力,但在它进入临床之前,必须解决几个挑战。(谢赫。, 2017).

从参与者选择到无线电组学建模,无线电组学流程中的每一步都容易出错。这可能导致错误的传播。例如 ROI 描绘,具有一定程度的观察者间可变性。这很难控制,特别是如果 ROI 没有被多位放射科医生描绘和计算相似性得分,这可能会影响下游的放射组学特征(Leijenaar 等人,2013)。

Leijenaar 及其同事的一项研究显示,在非小细胞肺癌队列的 PET-CT 扫描中,由 5 名观察者描绘的独立 ROI 之间的类间相关系数(ICC)大于 0.9。有趣的是,在 Leijinaar 的研究中,重测队列的大多数放射组特征的 ICC 较低(平均 0.71)。然而,这一队列只有 11 名患者,而观察者间队列有近 23 名患者。

IBSI 和定量成像生物标记联盟等团体开始为整个放射组学管道(从患者扫描到建模)制定标准指南,以提高可重复性。来解决无线电通讯管道中的问题。Lambin 和他的同事提出了一个 radiomics 质量评分系统,这是一个 36 分的系统,用于提高整个 radiomics 管道的稳定性。这个积分系统的基础是 16 个关键要素。这些问题包括,如果不同的临床医生进行了多次分割,是否收集了幻像,以及作品是否是开源的。

总结

放射组学是一种从医学图像中提取更多信息的廉价、高效和非侵入性的方法。传统的放射组学和深层放射组学都面临一些挑战。然而,当这些策略在临床上变得可行时,有可能引发一场巨大的医学革命。

机器学习中真正“公平”的是什么?

原文:https://towardsdatascience.com/what-is-really-fair-in-machine-learning-1fcdb6f35313?source=collection_archive---------25-----------------------

寻找衡量和想象公平的方法

来源

机器学习中的平等

答随着机器学习领域的扩大,人工智能的力量被用于做出关键决策,我们开始怀疑机器学习算法是否真的“公平”机器学习算法正在影响存在歧视和偏见的决策;我们的目标是衡量这种决策的结果,并确保我们的预测是平等的。尽管机器学习模型可能有助于人类决策,同时节省时间,但 ML 算法产生的结果也可能显示出有利于特定群体的偏差。随着衡量和维护公平的需求变得越来越重要,机器学习中的平等是研究人员不断探索的新领域。

没有数据,机器学习算法就无法运行。数据是机器学习中决策的关键;因此,训练数据中出现了许多偏差。数据中的偏差主要是由人类收集方法对少数群体的错误信息或极少信息造成的。虽然有些人可能认为改变数据收集方法会降低一个群体对另一个群体的偏好,但事实是,在大多数情况下,无法确保数据收集过程中的平等。相反,我们需要让模型产生不受种族或性别等潜在偏见因素影响的输出。仅仅知道数据可能不公平是远远不够的,我们需要能够通过我们预测的这些敏感属性来衡量和表示关系。这些关系可以通过工具和指标计算甚至可视化,从而更好地帮助我们理解模型和数据中的不平等。

作者使用 Canva 创建的图像

定义问题

如前所述,对某些群体的不公平是由“敏感属性造成的,这些属性可能会将一个类别与另一个类别区分开来,如种族或性别。在一个完美的场景中,一个模型将基于对任何群体都一视同仁地提供的特征来预测一些目标。最简单的解决方案是删除这些“敏感属性”。然而,简单地取消这些功能并没有多大作用。由于大多数敏感属性在人与人之间是非常独特的,该模型仍然能够根据提供的其他信息推断出被移除的特征。预测或数据必须满足某些测量或统计特性,才能被认为是“公平的”。

想象一下这样一种情况,很多人都在申请一份有着不同经历的工作。我们的目标是根据一个人的特征来预测他是否会被录用。这里,将代表敏感或受保护的特征, X 将是告诉我们关于申请人的任何其他信息, Y 是基本事实,ŷ是我们的预测。

我们可以通过估计给定特征 XA. 的概率分布来表述这个问题

当地面真值为 1 关于特征 X 和被保护属性 A 时。

评估方法和指标

测量模型预测最广泛使用的标准之一是人口统计均等

人口均等

为了满足这个性质,必须在统计上独立于。简单来说, A 无论如何都无法与 Y 的预测联系起来,无论地面真值如何。**

人口均等可以进一步扩展为强人口均等。在前面的人口统计均等的情况下,我们声明二元模型输出必须独立于敏感属性。二元结果由模型连续输出的阈值决定,如果预测值大于阈值,我们将其视为 1。可以对某个阈值实施人口统计均等,但不能确保它适用于所有情况。另一方面,强人口统计奇偶校验在和模型的连续输出之间强加了统计独立性,进一步确保无偏性。在我们的场景中,没有任何其他特征,每个人都应该有相同的机会获得工作,不管他们的敏感属性如何。

类似于人口均等,还有机会均等。机会平等只会限制优势群体的平等。在我们的情况下,它被提供了工作。机会均等允许预测依赖于只能通过地面真相。请注意,该方法允许使用与结果直接相关的特征,但不允许使用*来表示结果。*****

机会均等

对于优势结果中的的所有值,真实阳性率应保持相同。它没有人口统计的奇偶校验严格,这确保了我们的预测成为某一类的概率在 A 的所有值中保持不变,而不管地面是否真实。简而言之,对于一群具有相同资历的人来说,无论他们的“敏感属性”如何,他们都有同等的机会被录用。这具有更广泛的应用,因为大多数人只关心“积极群体”中的不歧视。**

最后,还有预测奇偶校验。预测奇偶性,或者有时称为结果测试,更侧重于 Y 的地面真相。它要求给定我们的预测 y-hat,地面真理不能依赖于*与机会均等相对的是我们的预测*****

给定 Y-hat,a 在统计上独立于 Y

这表明我们的模型的精度,或者说*为正并且它确实属于正类的概率,应该在 A 的所有值上保持相同。*

对 CBNs 的温和介绍

既然我们已经建立了如何通过我们的预测来衡量和评估公平性的意识,我们将手转向可视化。因果贝叶斯网络可以表示场景,并通过箭头和图表来说明公平性。回到我们的情况:

  • 对每个人来说,我们有 x 个特征,这些特征在某些方面告诉我们这个人的情况。
  • 我们还有 一个 ,受保护的属性,在我们的例子中,它将是性别。
  • 我们的预测ŷ将产生一个介于 0 和 1 之间的概率,代表这个人是否会被提供一份工作。**

这种情况可以使用一个带有节点和边的有向无环图来表示,称为因果贝叶斯网络(CBN)。在贝叶斯网络中,节点代表与问题相关的随机变量或特征,而它们之间的边显示它们的统计依赖性。

如下右图所示, A 被认为是直接影响 Y 如果路径直接指向 Y. 这被认为是一条随意的路径。另一方面(左图),如果 A 不直接指向 Y ,则表明对于 A 要潜在地影响 Y ,必须经过 X 。当敏感属性的影响通过其他特征 X 表示时,被认为是公平的。

CBNs,图片由作者使用 LucidChart 提供

在这个特定的图中,从 AX 的路径代表基于Ap(X | A)X 的概率。从 X 再到 Y 的路径,就是基于 X,p(Y | X)Y 为真的几率。在从 A 到 X 没有偶然路径的情况下,3 个变量的联合分布****

A 可能会影响 Y ,但不会直接影响。

当在 A 和 Y 之间建立任何偶然路径时,上面提到的度量不能被满足。CBNs 还有很多功能,甚至可以用它来量化不公平,但是,它的基本功能就像上面描述的一样简单。

结论

在这篇文章中,我们讨论了各种方法来衡量公平,甚至可视化与它相关的关系。数据中的不公平可能很难甚至不可能消除,因此我们需要能够发现这种不平等,并能够解释它对我们的模型预测的影响。

什么是回归均值?

原文:https://towardsdatascience.com/what-is-regression-to-the-mean-f86f655d9c42?source=collection_archive---------3-----------------------

入门

一个容易理解但容易忘记的统计学概念

艾萨克·史密斯Unsplash 上拍摄的照片

以下是我过去读过、听过或说过的一些事情。你能找出这些陈述中的错误吗?

  • 一位老师感叹道:“当我表扬我的学生做得好的时候,下一次他们尝试的时候,他们往往做得不太好。当我惩罚学生的糟糕表现时,下一次他们会做得更好。因此,惩罚有效,奖励无效。”
  • 一个有抱负的运动员惊叹道:“哇,昨天我的脚真的很痛,我把它泡在一碗泡了大蒜的热水里,现在感觉好多了。那种大蒜味的水里一定有某种治疗的功效!”
  • 一位影评人规定:“获得奥斯卡奖,演艺圈最负盛名的奖项,会导致演员的职业生涯 走下坡路,而不是上升 。”

你的直觉可能是这些陈述有问题。毫无疑问,大蒜水治不了脚痛!这篇文章通过回归均值的概念解释了为什么这些陈述是有问题的,并建议了一些你可以采取的步骤来避免犯这种错误。

回归平均值

让我们来看看这些陈述中所谈到的事件模式。在所有这些陈述中,事件按如下方式展开:一个“极端”事件(无论是好的还是坏的方向)之后是一个更典型的事件。

作者插图

我们经常观察到事件以这种模式展开(极端、典型、典型、极端……),因为有一种统计现象叫做回归均值回归平庸。回归均值是指罕见或极端事件之后可能会出现更典型的事件。随着时间的推移,结果会“回归”到平均值。

这个术语是由弗朗西斯·高尔顿爵士创造的,他注意到高个子父母的孩子往往比他们矮,而矮个子父母的孩子往往比他们高。从图形上看,这意味着如果我们在 x 轴上绘制父母的身高,在 y 轴上绘制孩子的身高,并通过所有的数据点绘制一条线,我们会得到一条斜率小于 1 的线(或相当于小于 45 度的角)。

作者插图

这张图表显示,平均而言,比普通男性高的父亲会有一个比他略矮的儿子。平均来说,比普通人矮的父亲会有一个比他稍高的儿子。

这一概念不仅有助于研究父母和子女身高之间的关系。如果你反思自己的经历,你很可能会发现这种现象随处可见。例如,回归均值解释了为什么你第二次去你上次评价很高的餐馆时却没有达到你的期望。当然,不仅仅是你认为上次的奶油布丁更好吃!

解释这种现象的统计特征是,连续获得多个极端结果就像多次获得硬币正面——不寻常且难以重复。让餐厅体验最佳的各种因素——食物的质量、你去的时候餐厅有多忙、服务员的友好程度、你那天的心情——很难在第二次完全重复。

谬误

一般的统计规则是,只要两个变量之间的相关性不完美(即在上图中,斜率不是 1),就会回归到均值。但是…那又怎样?

回归均值是一个关于世界的统计事实,既容易理解也容易忘记。因为事件的顺序是这样展开的(极端、典型、典型、极端……),我们的大脑会自动在“极端”事件和“典型”事件之间画出某种关系。我们(错误地)推断极端事件导致了典型事件(例如,奥斯卡获奖导致了随后的平庸电影),或者是这两个事件之间的某种东西导致了典型事件(例如,大蒜味的水让脚感觉“正常”)。

简而言之,当我们忘记回归均值的作用时,我们最终会将某些结果归因于特定的原因(人、之前的事件、干预),而事实上这些结果最有可能是由于偶然。换句话说,即使我们去除了之前的“极端”结果,“正常”结果也会发生。

让我们回想一下本文中的前三个陈述。关于这些陈述的真实性,回归均值意味着什么?

老师的错误:

老师暗示奖励他/她的学生会让他们下次表现更差。但是从回归均值的框架来看,老师对她的奖惩制度过于推崇。

正如丹尼尔·卡内曼在中笔记的思维,快与慢成功=天赋+运气。这个等式的“运气”部分意味着一系列的成功(或失败)很难重复,即使一个人有很多天赋(或没有天赋)。

这个等式的“运气”部分意味着一系列的成功(或失败)很难重复,即使一个人有很多天赋(或没有天赋)。

考虑两个学生简和乔。在第一年,简做得很糟糕,但乔是杰出的。简排在最底层的 1%,而乔排在最顶层的 99%。如果他们的结果完全是因为天赋,就不会有回归——简在第二年应该一样差,乔在第二年应该一样好(下图中的可能性 A)。如果他们的结果是运气和天赋各占一半,我们会期望有一半的回归:Jane 应该上升到 25%左右,Joe 应该下降到 75%左右(可能性 B)。如果他们的结果完全是由运气造成的(例如抛硬币),那么在第 2 年,我们预计 Jane 和 Joe 都将回归到 50%(可能性 C)。

作者插图

成功=天赋+运气等式意味着最有可能的情况是某种程度的倒退。第一年表现很差的 Jane 可能在第二年表现稍好(不管她是否受到惩罚),而第一年表现非常好的 Joe 可能在第二年表现稍差(不管他是否受到奖励)。老师的奖惩制度可能没有她想的那么厉害。

运动员的失误:

运动员暗示大蒜水治愈了她疼痛的脚。假设有一天运动员的脚疼得很厉害。绝望中,她尝试了各种方法,包括睡前用大蒜浸泡的水。她醒来后发现她的脚感觉好多了。也许水确实有一些治疗作用。但是回归均值似乎是一个同样可信的故事。

因为身体疾病有一个自然的起伏,一个真正痛苦的一天之后可能会有一个不那么痛苦的一天。疼痛起伏的模式可能会让人们觉得大蒜水是一种有效的治疗方法。但更有可能的是,大蒜水什么也没做。由于生物的自然进程,疼痛无论如何都会消退。

这个例子显示了如何回归到平均值通常可以用来使无效的治疗看起来有效。一个庸医看到他们的病人处于最低谷时,可能会开出一种无效的药,打赌他们的病人第二天会好一些,并推断这种药起了作用。

影评人的错误:

影评人暗指奥斯卡诅咒,即一旦你赢得了奥斯卡,你的下一部电影和表演就不会那么好了(甚至可能是)。几个对男女演员的采访表明,他们也相信这个诅咒,说赢得这样一个声望很高的奖项带来的压力和期望最终会伤害他们的职业生涯。

虽然压力和期望可能解释了他们下一部电影的成功(或失败),但“诅咒”也可能在很大程度上归因于回归均值。演员有时真的有很好的表演——结合了好的剧本、好的导演、与其他演员的良好化学反应,以及对角色的合适。从统计学上来说,在他们的下一部电影中,所有这些因素以相同的剂量和相同的方式出现的几率很低。因此,期待他们的下一次表演比他们获得奥斯卡奖的表演更差似乎是很自然的。“诅咒”并不神秘。

外卖食品

均值回归描述了“极端”结果之后往往会出现更多“正常”结果的特征。这是一个既容易理解又容易忘记的统计学概念。当我们目睹“极端”事件,如不太可能的成功或失败时,我们会忘记这种事件是多么罕见。当这些事件之后是更多的“正常”事件时,我们试图解释为什么这些“正常”事件会发生——我们忘记了这些“正常”事件是……正常的,我们应该预料到它们会发生。这常常导致我们将因果力量归因于那些可能在导致“正常”事件中没有起到任何作用的人、事件和干预。

为了避免犯这种错误,当我们试图解释一些(积极的或消极的)事件或结果时,我们应该首先抓住自己。然后,我们应该问自己以下问题:

  1. 从统计学上来说,这个结果有什么“不正常”吗?或者这是我应该预料到的吗?
  2. 这一事件之前是否有一些“极端”的结果,使得“正常”的事件相比之下显得“奇怪”?
  3. 即使我们删除了之前的事件,“正常”事件还会发生吗?“例如,即使运动员的脚没有泡在大蒜水里,她会感觉更好吗?

问题 1 迫使我们考虑正常事件发生的可能性。问题 2 鼓励我们思考彼此相关的结果,而不是孤立的观察。问题 3 促使我们进行反事实思维,想象一个我们认为导致“正常”事件的实体已经被移除的世界。通过问自己这三个问题,我们就不太可能把不必要的权力归于事件、人、系统和干预。

什么是拒绝抽样?

原文:https://towardsdatascience.com/what-is-rejection-sampling-1f6aff92330d?source=collection_archive---------3-----------------------

来源:作者

拒绝抽样是一种 蒙特卡洛 算法,在代理分布的帮助下,从复杂的(“难以抽样的”)分布中抽取数据。

什么是 蒙特卡洛 如果一种方法/算法使用随机数来解决一个问题,它被归类为蒙特卡罗方法。在拒绝采样的情况下,蒙特卡罗(又名随机性)有助于实现算法中的标准。

注意——我也有一个 YouTube 视频解释这个算法(如果你更喜欢看&听)——

YouTube——什么是拒绝抽样?

术语&符号

  • 目标(分布)函数f(x)——“难抽样”分布。我们的利益分配!
  • 建议(分配)函数【x】代理分配我们可以从中取样。

伟大的想法

关于抽样,几乎所有蒙特卡罗方法的中心思想是,如果你不能从你的目标分布函数中抽样,那么使用另一个分布函数(因此称为建议函数)。

然而,取样程序必须“遵循目标分布”。遵循“目标分布”意味着我们应该根据出现的可能性得到几个样本。简而言之,应该有更多来自高概率区域的样本。

这也意味着,当我们使用建议函数时,我们必须引入必要的修正,以确保我们的采样过程遵循目标分布函数!这个“校正”方面然后采取验收标准的形式。

它是如何工作的?

我将借助一个例子来解释这个算法。考虑一个我们不能从中取样的目标分布函数。该图及其函数形式如下所示。

来源:作者

这是一个一维目标函数,我们的任务是获取介于-3 和 3 之间的样本。建议函数的一个选择是均匀分布函数。下面是它的函数形式,即 g(x)。

来源:作者

如果我把这个建议函数和我们的目标函数一起画出来,它看起来会像这样:

来源:作者

正如您所看到的,目前我们的建议功能并没有完全封装我们的目标功能。一旦我们制定了纠正措施(或验收标准),这种封装的重要性就会变得清晰。

一个简单的补救方法是缩放建议函数,但是然后 缩放常数应该是多少?……这是拒绝采样的一个挑战,但对于更简单的一维目标函数,可以通过最大化来实现。这个比例常数用符号 CM. 表示。在本教程中,我将使用 C.

缩放后,我们的绘图将如下所示。在本例中, C 的值为 25。

来源:作者

现在,我们准备使用我们的建议函数进行采样。然后,我们将评估样本的这两个函数。我在这里用一张图片来展示它,这样你就可以把它形象化。

来源:作者

样品用橙色 x 标记。粉红色点表示其 f(x)值。您还可以看到它将在哪里为建议函数 g(x)求值。因此,由于我们使用了均匀分布作为建议函数,所有样本的可能性相等,它们都将评估为 C g(x)

现在我们需要一个标准来帮助确保我们最终遵循目标分布函数。上面的情节应该可以帮助我们对这个准则形成一个初步的直觉。我将把你们看到的粉色点和橙色 X 所在的垂直线称为评估线。

你应该朝这个方向思考——“如果我能在这条评估线上得到一个数字,如果这个数字低于粉红色点,那么我会接受样本 X,否则我会拒绝它”。

但是这个所谓的数字会从哪里来,又怎么保证会落在这个所谓的评价线上呢?

这就是我们利用随机性(又名蒙特卡洛概念)的地方。但在此之前,让我给你看一下这个图的旋转版本,它呈现了一个更好的视觉效果(并有望带来更好的直觉)。

来源:作者

在这个旋转版本中,我们可以看到我们有一个范围为(0,Cg(x))的轴,我们接受 X 的标准是使用介于 0 和 Cg(x)之间的另一个数。如果这个数字在粉红色点的左边,我们接受我们的样品,否则我们拒绝它。

这里的主要思想是,粉色标记左右两边的线条部分不相等,并且(在某处)反映了样本出现的几率。但问题是谁会给我们这个落在这条评估线上的数字呢?

为了得到这个数,我们将使用另一个从 0 到 Cg(x)的均匀分布。尽管所有来自均匀分布的随机数的概率相等,但我们可以看到,随着评估线的尺寸变大,会有更多的数字落在评估线的右侧。这种随机性的使用使得这种算法被归类为蒙特卡罗算法。这是两个显示接受和拒绝事件的图。

****

来源:作者

基于上述解释,您可以看到我们对 X 的接受标准可以用数学方法表示为:

来源:作者

这就等于说,如果“u”低于粉色点,那么我们接受!…查看下图的原始形式:

来源:作者

值得注意的是,当样品被剔除时,我们会将其丢弃并重复该过程,即

  • 从建议功能中获取另一个样本
  • 从均匀分布函数中获得一个介于 0 和 Cg(x)之间的随机数(u)
  • 检查 u≤f(x);如果是真的,接受它,否则拒绝它
  • 重复

我还想让你们熟悉这个验收标准的另一种表述。在这个公式中,我们将从均匀分布中得到“u ”,该均匀分布给出了从 0 到 1 的样本,即标准均匀分布。如果您使用它,那么验收标准将如下所示:

来源:作者

如果我们多次重复这个算法,我们最终会得到一个类似这样的图:

来源:作者

显而易见,许多样品将被拒绝😩

一种补救方法是通过选择另一个建议分布函数来减少拒绝区域。请记住,您将选择建议分布函数,您可以从中采样,也可以封装目标函数(当然是在缩放之后!).下面我将向你展示高斯分布作为建议函数的用法。

来源:作者

拒绝区域现已显著减少。在这种情况下,比例常数 C 为 11。

一个简单的 python 实现

来源:作者

使用上述简单的 python 实现,我尝试了我们的两种建议分布函数(即均匀分布和高斯分布),结果如下:

来源:作者

正如所料,选择高斯分布作为建议函数要好得多(53.63%的接受率)但仍然相当低效!

剔除取样的局限性和挑战

  • 选择合适的建议函数并找出其比例常数
  • 要求目标函数的 PDF 已知
  • 通常效率低下,尤其是在高维空间

如果你有问题,需要更多的澄清,请写在评论中,我会很乐意尝试回答他们,如果需要的话,更新文章。

什么是剩余连接?

原文:https://towardsdatascience.com/what-is-residual-connection-efb07cab0d55?source=collection_archive---------0-----------------------

一种训练深度神经网络的技术

照片由Unsplash

训练神经网络的一个困境是,我们通常希望更深的神经网络具有更好的准确性和性能。但是,网络越深,训练越难收敛。在本文中,我们将讨论剩余连接(也称为跳过连接),这是一种简单但非常有效的技术,可以使训练深度神经网络更加容易。它被不同的模型广泛采用,从计算机视觉中首次引入的 ResNet,自然语言处理中的 Transformer,一直到强化学习中的 AlphaZero 和蛋白质结构预测的 AlphaFold。

公式

在传统的前馈神经网络中,数据按顺序流经每一层:一层的输出是下一层的输入。

剩余连接通过跳过一些层为数据到达神经网络的后面部分提供了另一条路径。考虑一个层序列,层 i 到层 i + n ,设 F 为这些层所代表的函数。用 x 表示层 i 的输入。在传统的前馈设定中, x 会简单的一个一个的经过这些层,层 i + n 的结果是 F ( x )。绕过这些层的剩余连接通常如下工作:

图一。残留块。由作者创作。

剩余连接首先对 x 应用身份映射,然后执行元素加法F(x)+x。在文献中,取一个输入 x 并产生输出F(x)+x的整个架构通常被称为剩余块或积木块。通常,残差块还会包括一个激活函数,例如应用于F(x)+x的 ReLU。

强调上图中看似多余的身份映射的主要原因是,如果需要,它可以作为更复杂函数的占位符。例如,只有当 F ( x )和 x 具有相同的维度时,元素相加 F ( x ) + x 才有意义。如果它们的维数不同,我们可以用线性变换(即乘以矩阵 W )代替恒等式映射,改为执行F(x)+Wx

通常,在整个神经网络中使用多个残差块,这些残差块可以具有相同或不同的架构。

它如何帮助训练深度神经网络

对于前馈神经网络,由于诸如爆炸梯度和消失梯度的问题,训练深度网络通常是非常困难的。另一方面,经验表明,具有剩余连接的神经网络的训练过程更容易收敛,即使网络有几百层。像深度学习中的许多技术一样,我们仍然没有完全理解关于剩余连接的所有细节。然而,我们确实有一些有趣的理论,这些理论得到了强有力的实验结果的支持。

表现得像浅层神经网络的集合

对于前馈神经网络,正如我们上面提到的,输入将依次通过网络的每一层。更专业地说,输入通过一个长度等于层数的单一路径。另一方面,具有剩余连接的网络由许多不同长度的路径组成。

图二。剩余连接的未解视图。由作者创作。

作为例子,考虑具有 3 个剩余块的网络。我们可以尝试逐步扩展这个网络的公式:

*x*₃ = *H*(*x*₂) + *x*₂
   = *H*(*G*(*x*₁) + *x*₁) + *G*(*x*₁) + *x*₁
   = *H*(*G*(*F*(*x*₀) + *x*₀) + *F*(*x*₀) + *x*₀) + *G*(*F*(*x*₀) + *x*₀) + *F*(*x*₀) + *x*₀

有 2 = 8 项输入 x ₀对输出 x ₃.有贡献因此,我们也可以将此网络视为长度为 0、1、2 和 3 的 8 条路径的集合,如上图所示。

根据这种“未阐明的观点”,[6]表明,具有剩余连接的网络的行为类似于不强烈相互依赖的网络的集合体。而且梯度下降训练时的梯度大部分来自于短路径。换句话说,剩余连接不能解决爆炸或消失梯度问题。相反,它通过在“系综”中使用浅层网络来避免这些问题。

解决破碎渐变问题

虽然剩余连接不能解决爆炸或消失梯度问题,但它可以解决另一个与梯度相关的问题。

[1]表明,对于深度前馈神经网络,梯度类似于白噪声。这不利于训练,这个问题被称为破碎梯度问题。残差连接通过向梯度引入一些空间结构来解决这个问题,从而帮助训练过程。

实现示例

进一步阅读

  1. 残差连接的命名来源于以下:有些函数 H ( x )对于一个层的序列来说是非常难学的,但是学习相应的残差函数H(x)-x就容易多了。例如,恒等函数H(x)=id(x)很难拟合,但它的残差函数只是零函数,通过将所有层中的所有权重都设为 0,可以很容易地学习到零函数。
    有了残差连接,我们的层只需要学习F(x)=H(x)-x,残差块的最终输出就是
    F(x)+x = H(x)-x 关于这个动机的更多细节,我们可以参考 ResNet 的原始论文[3]。
  2. [5]示出了残差块能够执行迭代特征细化,这意味着每个块略微改善了前一层的表示。这部分解释了为什么具有残差块的非常深的神经网络具有更好的准确性:残差块越多,表示越精细。
  3. [2]表明 ResNet 模型架构,通过改进的训练和扩展策略,能够匹配最近的最新性能。这展示了剩余连接的有用性和相关性。
  4. 剩余连接的关键特征是它提供了从早期层到后期层的短路径。[4]通过将所有层直接相互连接,进一步发展了这一思想:每一层从所有前面的层获得输入,并将其输出传递给所有后面的层。这表明在设计神经网络体系结构方面有很大的创造性空间。

参考

  1. D.Balduzzi,M. Frean,L. Leary,J.P. Lewis,k . w-d . Ma 和 B. McWilliams。破碎的渐变问题:如果结果是答案,那么问题是什么? (2017),ICML 2017。
  2. I .贝洛、w .费杜斯、x .杜、E.D .库布克、a .斯里尼瓦斯、t-y .林、j .施伦斯和 b .佐夫。重温 ResNets:改进的培训和扩展策略 (2021),NIPS 2021。
  3. K.何,张,任,孙军。用于图像识别的深度残差学习 (2016),CVPR 2016。
  4. G.黄,刘,范德马腾,温伯格。密集连接的卷积网络 (2017),CVPR 2017。
  5. 南亚斯特日布斯基、达皮特、巴拉斯、维尔马、切和本吉奥。剩余连接鼓励迭代推理 (2018),ICLR 2018。
  6. A.韦特、m .威尔伯和 s .贝隆吉。残差网络的行为类似于相对较浅网络的集合 (2016),NIPS 2016。

什么是负责任的 AI?

原文:https://towardsdatascience.com/what-is-responsible-ai-548743369729?source=collection_archive---------8-----------------------

能力越大,责任越大

对一些人来说,人工智能这个词可以激发进步和生产力的想法。对其他人来说,前景不太乐观。许多担忧,如不公平的决策、工人被取代、缺乏隐私和安全,都是有根据的。更糟糕的是,这些问题很多都是 AI 特有的。这意味着现有的指导方针和法律不适合解决这些问题。这就是负责任的人工智能发挥作用的地方。它旨在解决这些问题,并为人工智能系统建立问责制。

来源: flaticon

为什么我们需要负责任的人工智能

当我们谈论人工智能时,我们通常指的是在系统内用于自动化某事的机器学习模型。例如,自动驾驶汽车可以从传感器中获取图像。机器学习模型可以使用这些图像来进行预测(例如,我们面前的物体是一棵树)。汽车使用这些预测来做出决策(例如,左转以避开树)。我们把这整个系统称为人工智能。

这只是一个例子。人工智能可以用于从保险承保到检测癌症的任何事情。决定性的特征是系统做出的决策很少有人参与。这可能会导致许多潜在的问题,公司需要定义一种使用人工智能的明确方法。负责任的人工智能是一个治理框架,旨在做到这一点。

责任 AI 的主要目标(来源:作者)

该框架可以包括关于可以收集和使用哪些数据、应该如何评估模型以及如何最好地部署和监控模型的细节。该框架还可以定义谁对人工智能的任何负面结果负责。不同的公司有不同的框架。一些将确定具体的方法,其他的将有更多的解释。他们都寻求实现同样的目标。那就是创造可解释的、公平的、安全的、尊重用户隐私的人工智能系统。

责任人工智能的目标

首先提到的领域是可解释性。当我们解释一个模型时,我们得到了它如何做出预测的解释。人工智能系统可能会拒绝你的抵押贷款申请,或者诊断你患有癌症。即使这些决定是正确的,用户也可能会要求解释。有些模型比其他模型更容易解释,因此更容易得到解释。负责任的人工智能可以定义我们如何构建可解释的模型,或者何时可以使用不太可解释的模型。

与可解释性相关的是模型公平性。人工智能系统有可能做出歧视某些人群的决定。这种偏差来自用于训练模型的数据中的偏差。一般来说,一个模型的可解释性越强,就越容易确保公平和纠正任何偏见。我们仍然需要一个负责任的人工智能框架来定义我们如何评估公平性,以及当发现一个模型做出不公平的预测时该怎么办。这在使用不易解释的模型时尤其重要。

安全和安保是另一个问题。这些对于软件开发来说并不陌生,可以通过加密和软件测试等技术来解决。不同的是,与一般的计算机系统不同,AI 系统不是确定性的。当面对新的情况时,他们会做出意想不到的决定。这些系统甚至可以被操纵做出错误的决定。当我们与机器人打交道时,这尤其令人担忧。如果他们犯了错误,像自动驾驶汽车这样的事情可能会造成伤害或死亡。

最后一个方面是隐私和数据治理。所用数据的质量很重要。如果人工智能使用的数据有错误,那么系统可能会做出错误的决定。一般来说,AI 也不应该被允许使用敏感数据(例如,病史、工会会员)。在欧洲,这些问题大多由 T2 的 GDPR 解决。在欧洲以外,它们将需要由公司自己负责的人工智能框架来解决。

归根结底,这一切都归结为信任。如果用户不信任 AI,他们就不会使用你的服务。我们不会信任使用我们不愿意分享的信息的系统,或者我们认为它会做出有偏见的决定。如果我们认为它会对我们造成身体伤害,我们当然不会信任它。对决策的解释和对这些决策的问责对建立这种信任大有帮助。这种对信任的需求是推动使用人工智能的公司进行自我监管的原因。

负责任人工智能的未来

目前,当涉及到人工智能时,公司被期待自我监管。这意味着他们必须创建和实现自己负责任的人工智能准则。像谷歌、微软和 IBM 这样的公司都有自己的指导方针。这方面的一个问题是,负责任的人工智能的原则在各个行业的应用可能不一致。较小的公司可能甚至没有资源来创建自己的公司。

一个潜在的解决方案是所有公司都采用相同的指导方针。例如,欧盟委员会最近发布了可信人工智能的道德准则。这详细说明了人工智能被认为是可信的 7 个关键要求。使用这些准则将有助于公司确保他们的人工智能系统符合相同的标准。真正的问题是——我们能相信公司会自我监管吗?

2020 年人工智能和机器学习状态报告包括了来自 374 家从事数据/人工智能工作的组织的回复。75%的组织表示,人工智能是其业务的重要组成部分。然而,只有 25%的人认为公平的人工智能很重要。这表明答案是否定的;不,我们不能相信他们。为了使共同准则有效,它们也必须得到执行。换句话说,指导方针必须成为法律/法规,公司必须面对不遵守它们的惩罚。

“毫无疑问,人工智能需要监管。问题是如何最好地实现这一点,”—桑德尔·皮帅(谷歌首席执行官)

这似乎是我们前进的方向。在欧洲,最近已经提出了新的法规。它们基于上述道德准则,并将影响许多行业。在这一点上,美国没有这样的法规。尽管如此,谷歌、脸书、微软和苹果等科技公司的高管都呼吁围绕数据和人工智能进行更多监管。所以看起来这只是时间问题。

我们提到了算法公平性。这是负责任人工智能的重要组成部分,很可能成为许多人工智能监管的焦点。这本身就是一个非常有趣的话题,我们将在下面的文章中进行更深入的探讨。

图像来源

所有图片均为本人或从 www.flaticon.com获得。在后者的情况下,我拥有他们的高级计划中定义的“完全许可”。

负责任的人工智能框架示例

谷歌 | 微软 | IBM | 欧盟委员会

其他参考文献

D.佩萨奇和 e .施慕利,算法公平性 (2020),https://arxiv.org/abs/2001.09784

A.吉利斯,责任 AI (2021),https://search enterprise AI . techtarget . com/definition/responsible-AI

埃森哲,负责任的人工智能:在你的人工智能解决方案中建立信任的框架 (2018),https://www . Accenture . com/_ ACN media/PDF-92/Accenture-AFS-Responsible-AI . PDF

阿彭,《2020 年人工智能和机器学习状况报告》 (2020 年),https://appen . com/whites/The-State-of-AI-and-Machine-Learning-Report/

K.瓦尔希, AI 法律来了 (2020),https://www . Forbes . com/sites/cognitive world/2020/02/20/AI-Laws-Are-Coming/?sh=5b526ef7a2b4

南 Schechner & V. Pop,谷歌推如何监管人工智能的‘明智’想法 (2020),https://www . wsj . com/articles/Google-pusses-Sensible-Ideas-for-How-Regulate-AI-11579521003?mod=article_inline

A.Satariano,欧洲提出人工智能严格规则 (2021),https://www . nytimes . com/2021/04/16/business/Artificial-Intelligence-regulation . html?sm typ = cur&smid = tw-nytimes

广义线性模型有什么好概括的?

原文:https://towardsdatascience.com/what-is-so-general-about-generalized-linear-model-15dde9be2640?source=collection_archive---------21-----------------------

线性和非线性数据回归模型的一般形式

照片由来自佩克斯艾萨克·加西亚拍摄

我们在许多用例中使用线性回归来模拟标量响应变量和一个或多个解释变量之间的线性关系。线性回归做出一些关键假设,如响应变量的正态性和恒定方差。那么,如果响应变量不遵循“通常的”假设,如正态性和恒定方差,会发生什么?广义线性模型(GLM)是解决这一问题的常用数据转换方法之一。但问题是 GLM 由许多术语、符号和组件组成。所以,有时候理解这个概念有点混乱。不过不用担心,我是来帮你把所有概念都理解清楚的。

GLM 的三个基本统计程序是:

  1. 回归
  2. 方差分析,又名 ANOVA
  3. 协方差分析,也称为 ANCOVA

在本文中,我将主要关注 GLM 的回归部分,并讨论指数族以及当响应变量遵循属于指数族的任何一种分布时如何转换响应变量。

指数家族

给定单个参数θ,我们将指数族定义为一组概率分布,其概率密度函数(或离散分布的概率质量函数)可表示为

P(x| θ) = B(x) exp[η(θ) T(x) — A(θ)]

a 和η是将θ映射到ℝ.的函数

通过将η(θ)作为参数,我们可以用标准形式表示上述方程。

P(x| η ) = B(x) exp[η T(x) — A(η)]

在哪里,

η:自然参数

T(x):充分统计量

B(x):基本度量

A(η):日志分区

现在,我们来看看 伯努利分布 如何属于指数族。让我们考虑一个参数为φ(φ是事件的概率)的伯努利分布。所以 x 的 p.m.f 的形式是

作者图片

所以,与我们能得到的标准形式相比,

B(x)=1

η= log(φ/1-φ)= >φ= 1/1+指数(- η)

T(x)=x

a(η)=-log(1-φ)

或者,A(η)=-log(1-1/1+exp(-η))[替换φ的值]

或者,A(η)= log(1+exp(η))

同样,对于均值未知、方差已知的正态分布https://statisticsbyjim.com/basics/normal-distribution/,p.d.f 如下

作者图片

所以,η = / σ => = η σ

A(η)= / 2σ = η /2

类似地,对于参数为λ的 泊松分布 ,p.m.f 为

作者图片

因此,η = log λ => λ =exp(η)

并且 A(η) = λ = exp(η)

属于指数族的一些其他概率分布是二项式分布、伽玛分布、指数分布、贝塔分布、卡方分布等。

指数族有一些性质:

  1. 指数族的极大似然估计 w.r.t η是凹的。
  2. e[x;∂A(η)/ ∂η
  3. var[x;∂ A(η)/∂η

现在让我们看看一些常用的回归方法是如何利用指数族的概念从 GLM 族设计出来的。

广义线性模型

GLM 的基本思想是为响应变量的期望值拟合一个“适当的”函数的线性模型。

作者图片—图 1

因此,GLM 主要由三部分组成:

  1. 响应变量的概率分布
  2. 线性预报值
  3. 链接功能

响应变量遵循某个参数的概率分布。

线性预测因子是模型参数β和解释变量 x 的线性组合。

链接函数 g 是将线性预测值和与响应变量 y 的概率分布参数链接起来的函数。

让我们看看如何使用 GLM 的概念来拟合一些常用的回归模型。

线性回归

响应变量 Y 遵循方差不变的正态分布。由于正态分布属于指数族,对于方差已知的正态分布 A(η) = η /2。所以,响应变量的期望值

E(Y) = ∂A(η)/ ∂η = η

已知σ =1,

我们可以写,Identity( ) = Identity(η) = η = βᵗ x

所以,响应变量 Y 服从带参数的正态分布,连接函数 g 应该是 恒等函数

逻辑回归

在这种情况下,响应变量只有两种可能的结果(二分法),通常称为“成功”和“失败”。因此,响应变量不遵循方差不变的正态分布。在这种情况下,我们可以说响应变量 Y 是一个伯努利随机变量。

所以,响应变量的期望值

E(Y) = ∂A(η)/ ∂η = 1/[1+exp(- η)]

我们可以写,logit(φ)= logit(1/[1+exp(-η)])=η= βᵗx

所以,响应变量 Y 遵循参数φ= 1/[1+exp(-η)]的伯努利分布,链接函数 g 应该是Logit function

泊松回归

现在让我们考虑另一种情况,其中响应变量不是正态分布的,它表示某个事件的计数。因此,响应变量可以遵循泊松分布或负二项分布。让我们看看如果响应变量 Y 遵循泊松分布会发生什么。

所以,响应变量的期望值

E(Y) = ∂A(η)/ ∂η =经验(η)

我们可以很容易地书写,

log(λ) = log[exp(η)] = η = βᵗx

所以,响应变量 Y 服从参数为λ =exp(η)的泊松分布,连接函数 g 应为 对数函数

好吧!好吧!理论到此为止。让我们来关注一下 GLM 在 Python 中的实现。

图片来源: giphy

让我们先看看如何在 python 中使用 GLM 的概念来拟合线性回归模型。

我使用 python 中的 statsmodels 库拟合的所有回归模型。

我用于线性回归的数据散点图有 2 个解释变量(汽车的马力和加速度)和 1 个响应变量(汽车的 mpg)(出现在图 2 的左侧面板中)。可以看出,解释变量和响应变量之间存在线性关系,响应变量的方差几乎是常数。因此,为该数据集拟合线性模型是一个下降的想法。

作者图片-图 2:线性回归图

拟合线性回归的代码非常简单。我将解释变量定义为 x,响应变量定义为 y,并在解释变量中添加了常数项。

不需要传递任何链接函数,因为高斯族的默认链接是标识函数。

现在,让我们关注一些非线性数据,因为在现实生活中,拟合线性模型并不总是可行的。

例如,我们需要根据候选人的 gpa 和多年工作经验来预测他/她是否会被某门课程录取。现在,这里的响应变量有两个结果“是”或“否”。

从图 3 左侧面板中的数据可以看出,x 和 y 变量之间不存在任何线性关系。事实上,最关键的一点是线性回归是无界的。所以,我们需要的不是线性回归,而是可以输出 0 到 1 之间的任何值的东西。

作者图片—图 3:逻辑回归图

逻辑回归的代码也非常简单,除了概率分布和链接函数之外,几乎与线性回归相同。用于逻辑回归的分布是二项式/伯努利分布,使用的关联函数是 logit,这是二项式家族的默认值。

事实上,我们也可以使用 probit 函数作为链接函数。我们的主要座右铭是输出介于 0 和 1 之间。logit 和 probit 函数给出了几乎相似的推论。但是,由于可解释性,通常使用 logit 函数。

图 3 的右侧面板示出了直曲面被 S 形曲面代替,并且该值被限制在 0 和 1 之间。它还允许在 x 变量的低端和高端有不同的变化率,从而正确处理异方差

最后,让我们看看,如果我们需要使用学生的数学和科学分数来预测他们获得的奖励数量,我们可以做些什么。散点图看起来像图 4 左侧面板中的图。

我们无法对此数据进行线性回归拟合,因为响应变量的方差相对于解释变量而言不是常数。此外,响应变量的值是正整数,它是离散的,但用于线性回归的正态分布采用连续变量,它也可以是负的。

作者图片—图 4:泊松回归图

我们使用泊松分布进行泊松回归,以对数作为连接函数。

我们可以从图 4 的右侧面板看到,预测的表面是指数型的。

如需了解更多细节,如回归模型总结以及我如何在 python 中拟合 3d 图,请访问我的 GitHub 个人资料。

结论

总的来说,我们已经看到 GLM 可以用来拟合线性和非线性数据。事实上,我们可以使用其他几种非规范的链接函数来计算概率分布,从而以最有效的方式拟合数据。比如我们可以用 probit 函数进行逻辑回归;正态分布的对数函数。

因此,最终我们可以说广义线性模型是用任何类型的数据拟合回归模型的“通用”方法。

就是这样的乡亲。感谢阅读,快乐学习!!

什么是声音?

原文:https://towardsdatascience.com/what-is-sound-691988d780bb?source=collection_archive---------4-----------------------

数字声音和音频数据介绍。用一个 Python 例子来研究音频文件、声波和频谱图。

什么是声音?在 UnsplashFPVmat A 拍摄的照片

声音的机器学习和数据分析是一个不断增长的领域,具有数据科学用例的巨大潜力。在这篇文章中,你将学习什么是声音,以及如何在计算机上表现声音。

你还将学习什么是傅立叶变换,以及它是如何工作的。然后,您将看到如何使用傅立叶变换为机器学习或数据分析准备音频数据,并使用 Python 编写了一个完整的示例。

什么是音频数据?

您可能熟悉表格数据:在行和列中存储数据的标准形式。这是存储数据的传统方式,非常适合机器学习问题。

下一步的难度是图像数据。图像数据更难处理,因为它不能用作表格数据。然而,计算机能够通过给图像中的每个小方块(像素)赋值来显示图像。通过给每个像素一个红、蓝、绿的值,计算机可以显示图像。

现在为了在图像上进行机器学习,我们复制这个逻辑,并且我们使用三维向量中的像素值(红色、蓝色和绿色)(维度是图像高度、图像宽度和三种颜色)。如果你想了解更多关于图像的机器学习,可以查阅以下关于物体检测图像分割的资源。

下一个难点是声音(或音频)数据。作为一个非常基本的描述,假设音频数据是一种存储声音的数值方式。

声音是气压

音频数据难以处理的原因是,与表格数据和图像数据不同,它不遵循非常清晰和有组织的结构。

声音,以其最原始的(非数字)形式,是人耳可以察觉的气压变化。

从模拟声音到数字音频:麦克风

声音的数字形式是音频。为了在计算机中存储声音,我们需要将它转换成数字形式:计算机可以存储的东西。

将声音转换成数字有两个步骤:

  • 麦克风将气压变化转化为电压。您可能从未意识到这一点,但这实际上是麦克风的全部功能。
  • 模数转换器接收电压(将其视为不同的电流强度),然后将这些电压转换成数字:这些数字是波的数字值:与气压不同,这些数字可以存储在计算机中。

音频数据是振幅和频率

你现在对如何将声音转换成数字有了初步的了解,但是下一个真正要问的问题是:那些代表声音的数字是什么?

原来有两种重要的数字:振幅和频率。

  • 声波的振幅显示其音量
  • 声波的频率代表其音高

你现在明白了,一个声波有两个基本值:振幅和音高。它们一起可以发出从大声到安静,从低音到高音的音调。

现实生活中的声音是“复合”波

既然你已经理解了什么是声波,让我们进入一个更复杂、更现实的情况。实际上,在一个音频文件中经常同时有许多声音。比如在音乐中,你一般会同时听到多个音调。在自然录音中,你通常还会同时听到各种动物、风声等等。

同时只有一个频率的音频文件非常罕见。因此,如果我们想要将一个音频文件总结为数据,我们将需要描述不止一个波。

完整的声音是波的混合,因此是不同振幅的频率的混合。简单来说:声音是不同音量的高低音调的混合

为了处理如此复杂的波,必须将它分解成每个频率每个时间的振幅。这通常是声谱图所能显示的。

频谱图显示了声音中的所有波

频谱图是一种图表,可以让你描绘一段时间内的声音。该图在 x 轴上显示时间,在 y 轴上显示频率。颜色表示特定频率在特定时间点的振幅。

频谱图是使用傅立叶变换从数字“复杂”声音创建的

傅立叶变换是一种先进的数学方法,它允许您将“复杂”的声音分解成声谱图,该声谱图显示每个频率在整个时间内的音量(振幅)。

我不想在这里讲太多细节,但我鼓励你们阅读一些傅立叶变换,例如这里的或这里的。

使用 librosa 在 Python 中表示声音

现在让我们通过用 Python 对一个真实的音乐文件进行一些操作来实现这一点。我们将使用 librosa 包,这是一个在 Python 中处理声音的很好的包。

要在 Python 中安装 librosa,只需在 Jupyter 笔记本中运行!pip install librosa即可。这也是一个很好的使用案例,可以试用一个 Google Colab 笔记本

请注意,在处理声音数据时,您通常会使用.WAV文件,因为这是声音的未压缩格式。其他熟悉的声音格式,如.FLAC.MP3压缩声音。这可能会对数字表示产生负面影响,尽管这并非不可能。

Librosa 附带了一个示例音乐文件。您可以按如下方式导入示例声音文件:

什么是声音?将音乐文件加载到 Python 中。

导入音乐后,您可以使用 Jupyter 笔记本功能来聆听声音。您可以使用以下代码来实现这一点:

什么是声音?在 Jupyter 笔记本中播放声音文件

您将在笔记本中看到以下条形音箱(与此图不同,您实际上可以听到音乐):

什么是声音?在 Jupyter 笔记本中播放 wav 文件

下一步,让我们将音乐显示为波,从而使声音“肉眼可见”。当然,如前所述,真实的声音非常复杂,它们看起来一点也不像简单的波。

你可以使用下面的代码来打印一个 wave:

什么是声音?显示了波形图。

你将获得以下情节:

什么是声音?印刷胡桃夹子的波。

下一步,让我们来看看声音数据最有用的可视化,也就是声谱图。通过对波形数据y进行傅里叶变换,可以获得谱图输入数据。

如前所述,傅立叶变换是相对高级的数学。幸运的是,我们可以使用 librosa 中的一个函数来完成繁重的工作,如下面的代码所示:

什么是声音?使用傅立叶变换生成频谱图数据。

您将获得如下所示的数组:

什么是声音?原始谱图数据(振幅)

在创建最终的声谱图之前,还有最后一步,那就是将声谱图数据转换成分贝。原因是声谱图功能不适用于当前(振幅)格式。

您可以按如下方式转换数据:

什么是声音?将振幅谱图数据转换成分贝谱图数据。

现在,我们终于可以用声谱图函数给我们展示声谱图了。这是按如下方式完成的:

什么是声音?打印声谱图。

你会得到下面的图表,这是胡桃夹子的光谱图。我们已经成功地导入了一个音乐文件,并将其转换成一种可视的数据格式。声谱图包含了胡桃夹子每个频率的音量的完整概览,因此它是音乐的完美视觉表现。

胡桃夹子的声谱图。

结论

在本文中,您已经学习了使用数字格式的声音和音频 的基本知识。您已经将音频数据从只能听到的 wav 格式转换成了作为声谱图视觉表示。

现在,您已经掌握了音频数据的导入和准备,您可以继续使用更高级的用例,如使用机器学习进行音乐流派分类声音检测

希望这篇文章对你有用。感谢您的阅读,请不要犹豫,继续关注更多的统计、数学和数据内容!

什么是统计能力?

原文:https://towardsdatascience.com/what-is-statistical-power-8f934c9bbcca?source=collection_archive---------27-----------------------

有多少使用这个术语的人真正理解它的意思?

如果你的经历和我一样,你可能已经听过很多人在工作中谈论“统计能力”。我很确定,在大多数情况下,这些人是基于某种模糊的概念,即较大的 n 总是好的,来推动更大的样本量。

但这些人中有多少人能真正定义什么是统计能力?在这篇文章中,我想看看统计能力的概念和定义,并确定它作为一种度量方法在哪里有用。

假设检验

术语“统计功效”只有在涉及假设检验时才有意义。您可能还记得,假设检验涉及使用数据样本的统计特性来确定关于样本所来自的总体的陈述的确定性水平。我们举个例子。来自peopleanalyticsdata R 包的salespeople数据集包含一家技术公司销售人员样本的数据,包括他们以千美元为单位的年销售额以及他们最近的绩效评级,从 1 到 4 依次递增。让我们看看前几排。

library(peopleanalyticsdata)salespeople <- salespeople[complete.cases(salespeople), ]
head(salespeople)Output:
promoted sales customer_rate performance
1        0   594          3.94           2
2        0   446          4.06           3
3        1   674          3.83           4
4        0   525          3.62           2
5        1   657          4.40           3
6        1   918          4.54           2

现在让我们来看看这个陈述:在总体人口中,表现最佳的销售人员的平均销售额与表现最差的销售人员的平均销售额不同。我们首先假设这不是真的——也就是说,表现最好的人和表现最差的人的平均销售额是一样的——我们称之为零假设。然后,我们执行一个测试,以确定如果总体中的零假设确实为真,我们的样本看起来像它们的样子的最大概率——称为测试的 p 值。在这种情况下,我们进行韦尔奇的 t 检验,以比较两个样本的不等方差。

# sales of top performers
sales4 <- salespeople$sales[salespeople$performance == 4]# sales of bottom performers
sales1 <- salespeople$sales[salespeople$performance == 1]# p-value of null hypothesis that their means are the same
t.test(sales4, sales1)$p.valueOutput:
1.093244e-05

这表明,如果我们的零假设在总体中是正确的,那么我们的样本看起来不太可能是它们的样子。我们定义了一个可能性水平,在这个水平以下,我们同意拒绝零假设,这就是所谓的 alpha 。alpha 通常为 0.05,但有时可能会低得多。如果我们在这里将α取为 0.05,我们可以轻松地拒绝零假设,并得出另一个假设,即总体中低绩效者和高绩效者的平均销售额存在差异。

定义统计功效

我们可以看到,假设检验是关于确定性的水平,在这个水平上,我们可以放心地宣布总体中的差异,承认我们只能观察总体中的一个样本。对于未观察到的人群,没有什么是 100%确定的,因此可能会出现四种情况:

  1. 零假设不会因为样本而被拒绝,事实上它对总体来说是正确的
  2. 基于样本,零假设被拒绝,但事实上它在总体中是真实的(一个I 型误差)
  3. 基于样本,零假设没有被拒绝,但事实上它在总体中是错误的(一个类型 II 错误)
  4. 基于样本的零假设被拒绝,事实上它在总体中是错误的

统计功效被定义为数字 4 出现的概率。本能地,你可以想象这取决于你的样本的大小,总体中的实际(未观察到的)差异(适当的标准化),以及你拒绝零假设(alpha)的确定性的标准。例如,如果实际人口差异较大,您可能会在较小的样本中看到它。如果α更小,您可能需要更大的总体差异或更高的 n 来满足您的确定性标准。

这个房间里的大象当然是我们永远不会知道我们人口的差异——我们只知道我们样本的差异。因此,我们通常通过使用样本中观察到的差异来满足自己的观察到的统计功效。对于我们这里的salespeople示例,因为它是 t-检验,所以我们使用 Cohen 的效应大小 d 作为我们的归一化观察差异结合我们的样本量和 0.05 的 alpha,我们可以计算出假设检验的统计功效为 0.996。我们可以相当肯定地说,零假设将被准确地拒绝。

library(effectsize)
library(WebPower)# sample sizes
n4 <- length(sales4)
n1 <- length(sales1)# cohen's effect size d
d <- cohens_d(sales4, sales1)$Cohens_d# statistical power
wp.t(n4, n1, d = d, type = "two.sample.2n")Output:Unbalanced two-sample t-test

    n1 n2         d alpha    power
    55 60 0.8741483  0.05 0.996347

统计能力什么时候有用?

坦白说,并不经常。在你已经有了样本和数据,并且已经进行了假设检验的情况下,统计能力实际上只是一个衡量你如何清除阿尔法障碍的指标。你的阿尔法越不严格,权力就越大。看一看。

# statistical power
test <- WebPower::wp.t(n4, n1, d = d, type = "two.sample.2n", alpha = seq(0.05, 0.0001, by = -0.0001))# plot power against alpha
plot(test$alpha, test$power)

如果您还没有获得样本数据或进行任何假设检验,并且如果您正在计划一项可能涉及大量工作的实验或研究,那么统计能力作为一种衡量标准可能会有所帮助。因为样本量起着一定的作用,所以理论上你可以计算出一个最小样本量来达到某个 alpha 标准。

但实际上,我发现整个过程是高度推测性的,因为你需要知道你观察到的效应大小,当然你不知道,因为你还没有进行实验。因此,来自统计功效计算的大多数样本大小估计往往是以灵敏度范围的形式。

实验可能很难组织和获得资源,统计能力在确定所需规模时可能会有些用处。它还可以帮助说明 n 的收益何时递减。例如,如果我们使用中等效应大小和 alpha 为 0.05 的配对 t-test 测试一系列样本大小,我们会发现存在一个点,在这个点上,额外的 n 不会对功效产生太大影响。

# test a range of sample sizes
sample_sizes <- 20:100
power <- [wp.t](https://rdrr.io/pkg/WebPower/man/wp.t.html)(n1 = sample_sizes, d = 0.5, type = "paired")plot(power)

总的来说,统计能力是一种钝器。在某些方面,你可以把它看作是假设检验的一个“附加部分”,它只在与实验设计相关的某些情况下有用。

如果您有兴趣进一步探索统计功效的数学和理论,并了解在假设检验和回归模型的功效分析中使用的不同统计数据,您可以参见《人物分析》 中的 回归建模手册的第 11 章。

最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在LinkedInTwitter上找我。也可以看看我在【drkeithmcnulty.com】http://drkeithmcnulty.com/上的博客。

unsplash.com 的好意

什么是机器学习中的分层交叉验证?

原文:https://towardsdatascience.com/what-is-stratified-cross-validation-in-machine-learning-8844f3e7ae8e?source=collection_archive---------3-----------------------

本文使用 Scikit-Learn 解释了分层交叉验证及其在 Python 中的实现。本文假设读者具备机器学习中交叉验证的工作知识。

图片由克里斯里德Unsplash 上拍摄

什么是分层抽样?

在深入研究分层交叉验证之前,了解分层抽样是很重要的。分层抽样是一种抽样技术,在这种抽样技术中,样本的选取比例与它们在总体中出现的比例相同(根据特征将总体分成称为“阶层”的组)。例如,如果感兴趣的人群中有 30%的男性和 70%的女性受试者,那么我们将人群分为两组(“男性”和“女性”),并从“男性”组中选择 30%的样本,从“女性”组中选择“70%”的样本。

分层抽样(图片来自 Mathprofdk(丹·克恩勒)维基百科

分层抽样与交叉验证有什么关系?

在交叉验证中实施分层采样的概念可确保训练集和测试集具有与原始数据集中相同的感兴趣特征比例。对目标变量这样做可以确保交叉验证结果非常接近泛化误差。

在继续下一步之前,我们将生成一个包含 500 条记录、三个要素和三个类的合成分类数据集。数据集是使用 Scikit-Learn 的“make_classification”方法生成的。

作者图片

在没有分层抽样的情况下实施保留交叉验证

使用 Scikit-Learn 的“train_test_split”方法实现保留交叉验证。实现如下所示。该方法返回训练集和测试集。

作者图片

由于我们没有使用分层抽样,我们可以看到目标变量的比例在原始数据集、训练集和测试集中变化很大。

用分层抽样实现保留交叉验证

我们将使用分层抽样实现保留交叉验证,以便训练集和测试集具有相同比例的目标变量。这可以通过将“train_test_split”的“分层”参数设置为感兴趣的特征(在本例中为目标变量)来实现。它不一定是目标变量,甚至可以是您希望在训练集和测试集中具有相同比例的输入变量。

作者图片

使用分层抽样,目标变量的比例在原始数据、训练集和测试集中几乎是相同的。

在没有分层抽样的情况下实现 k-fold 交叉验证

k 倍交叉验证将数据分成“k”份。在“k”次迭代的每一次中,一部分被用作测试集,而其余部分被用于训练。使用 Scikit-Learn 的“KFold”类,我们将在没有分层抽样的情况下实现三重交叉验证。

作者图片

我们可以看到,目标变量的比例在原始数据、训练数据和跨分裂的测试数据中不一致。

用分层抽样实现 k 重交叉验证

分层抽样可以使用 Scikit-Learn 的“StratifiedKFold”类通过 k-fold 交叉验证来实现。实现如下所示。

作者图片

在上面的结果中,我们可以看到,在所有三个分割中,目标变量的比例在原始数据、训练集和测试集中非常一致。

使用分层采样实现的交叉验证确保感兴趣特征的比例在原始数据、训练集和测试集中是相同的。这确保了在训练和测试集中没有值被过度/不足地表示,这给出了对性能/误差的更准确的估计。

什么是支持向量机?

原文:https://towardsdatascience.com/what-is-support-vector-machine-870a0171e690?source=collection_archive---------21-----------------------

支持向量机指南

第 1 部分:定义模型

算法是什么?

支持向量机(SVM) 是一种监督机器学习算法。SVM 的目的是依靠标记的输入数据来预测查询样本的分类,这些输入数据通过使用裕度被分成两个组类。具体来说,将数据转换到更高的维度,并使用支持向量分类器作为阈值(或超平面),以最小的误差分离两个类别。

算法是如何工作的?

步骤 1:将训练数据从低维转换到高维。

第二步:找到一个支持向量分类器[也称为软间隔分类器]来分离这两个类[内核技巧]。

第三步:返回类标签→查询样本的预测!

算法的例子

让我们从基础开始……

最大间隔分类器— 是将阈值分配给每个类簇边缘上的观察值的中点;阈值给出两个类之间的最大距离,以给出最大的余量长度。

最大间隔分类器—正确分类示例【作者图片】

  • 例:由于查询样本落在阈值右侧,因此将查询样本归为 B 类,这是有意的!存在偏差/方差权衡,因为存在高偏差(所选阈值对异常值不敏感)和低方差(对新查询样本表现良好)。
  • 问题:如果存在异常值,会发生什么情况?

最大间隔分类器—错误分类示例【作者图片】

  • 举例:由于查询样本落在阈值左侧,查询样本被归类为 A 类,这是而不是想要的!直观上,这没有意义,因为与 A 类聚类相比,查询样本更接近 B 类聚类。存在偏差/方差权衡,因为存在低偏差(所选阈值对异常值敏感)和高方差(对新查询样本表现不佳)。
  • 解决方案:由于最大间隔分类器对训练数据中的离群点非常敏感,因此需要选择一个对离群点不敏感且允许误分类的阈值→软间隔分类器。

软边界分类器— 是当阈值被允许产生可接受的误分类量,同时允许新数据点仍然被正确分类时;交叉验证用于确定在软边界内允许多少错误分类和观察,以获得最佳分类。【支持向量分类器是参照软间隔分类器的另一种方式】

软边缘分类器—正确的分类示例【作者图片】

  • 例:由于查询样本落在阈值右侧,因此将查询样本归类为 B 类,这是有意的!为了找到最佳阈值,出现了 1 次错误分类。
  • 问题:如果两个类之间有明显的重叠,会发生什么情况?

软边距分类器—错误分类示例【作者图片】

  • 举例:如果只考虑阈值 1,查询样本落在阈值右边;然而,由于类别 A 和类别 B 的部分聚类都落在右边,查询样本将被不准确地分类。如果只考虑阈值 2,则查询样本落在阈值的右边;尽管只表示了类别 B,并且查询样本被分类为类别 B,这是所期望的,但是类别 B 的部分聚类落在阈值的左侧,这表示潜在的误分类。因此,不存在可以应用而不会导致大量错误分类的最佳阈值。
  • 解决方案:由于软间隔分类器对训练数据中的大量重叠非常敏感,因此需要选择一个对异常值和重叠分类都不敏感的阈值→支持向量机。

让我们添加一个 y 轴(将数据转换到更高维度)…

支持向量机— 是将数据变换到一个更高维度,用一个支持向量分类器(也叫软间隔分类器)作为阈值,将两类分开。当数据是 1D 时,支持向量分类器是一个点;当数据为 2D 时,支持向量分类器为直线(或超平面);当数据是 3D 时,支持向量分类器是平面(或超平面),当数据是 4D 时,支持向量分类器是超平面。

支持向量机算法【图片作者】

A 级

B 类

查询样本

  • 例:由于查询样本落在阈值左侧,因此将查询样本归为 B 类,这是有意的!这里,数据在 2D,因此支持向量分类器是一条线(或超平面)。支持向量是边缘上和软边界内的观察值。

注意:为了在将数据转换到更高维度时使数学可行,SVM 使用核函数(线性、径向基函数(RBF)、多项式或 sigmoid)来系统地寻找支持向量分类器。当使用核函数时,该算法计算每一对数据点之间的关系,而无需在更高维度中进行任何转换→也称为核技巧!

总之,支持向量机是一种强大的机器学习算法,并已用于机器学习和数据科学应用!

接下来——如何实现支持向量机?第 2 节:用 Python 构建模型

什么是列表强化学习?

原文:https://towardsdatascience.com/what-is-tabulated-reinforcement-learning-81eb8636f478?source=collection_archive---------30-----------------------

学习如何让你的人工智能自学的第一步

如果你想掌握让你的人工智能在一个不断发展和变化的环境中自学的艺术,列表强化学习是你应该学习的第一个算法。

一般来说,强化学习背后的主要思想是,你有一个代理、环境、状态、动作和奖励。

  • 智能体:智能体是生活在环境中,接受输入,并执行特定动作的东西。
  • 环境:环境就是智能体所处的世界。
  • 状态:状态基本上是代理在特定时刻接收到的所有输入。
  • 动作:动作是代理可以与其环境交互的所有方式。
  • 奖励/惩罚:执行一个动作后,奖励给代理。它们只是数字,所以如果代理做了坏事,我们可能会给它-1 的惩罚。如果它做了好事,我们会给它+1 的奖励。

在环境中,我们有一个代理。这个代理从环境中接受某种类型的输入,这个输入就是代理的状态。基于它的状态,代理采取一些行动。此操作将代理带入一个新的状态。根据这种新状态是好是坏,代理人会收到奖励/惩罚。下图有助于形象化这一过程:

注意用蓝色书写的事件顺序。环境向代理提供一种状态,代理基于这种状态采取行动,这种行动改变环境并提供奖励/惩罚。图片作者

为了进一步说明这一点,如果你认为自己是一个代理人,那么整个宇宙就是你的环境。你有 5 种感觉或 5 种方式接收输入。在任何特定的时间,你当前的状态就是你所看到的、听到的、闻到的、感觉到的和品尝到的。您根据当前状态执行操作。这些行为最终会导致奖励(也许是升职)或惩罚(被解雇)。这个想法是你将从这些惩罚和奖励中学习,这样你未来的行动将会带来更好的奖励。

用一些行话来说,一集是代理与环境互动的一个完整周期。例如,如果环境是一个井字游戏,一集将是一个井字游戏。

代理内存/值表

当代理与环境交互时,我们可以存储代理所处的所有状态,并为每个状态赋值。一个状态的价值是一个衡量代理人在接下来的一集里可以期望得到多少奖励的指标(目前,理解这在数量上意味着什么并不重要)。一会儿我会解释如何分配正确的值,但是现在,只要知道这是可能的。

例如,假设我们的代理刚刚开始它的第一个游戏井字游戏。环境是游戏井字游戏,它的当前状态是空的游戏棋盘。代理将在它的存储器中存储这个唯一的状态,比如 s0。假设我们的代理采取了一个随机行动,称之为 a0。回想一下,采取一个行动会带来一个新的状态,姑且称之为 s1。现在假设我们的代理人继续和他的对手玩游戏,最后输掉了游戏(此时它会受到某种惩罚)。

既然代理人输了,我们可以说这一集代理人所处的每个状态都有低值。现在假设我们的代理开始了他的第二场比赛并回到 s0。现在,它可以查看它的内存,看看如果采取 a0 动作会发生什么。它将看到动作 a0 将导致状态 s1,该状态 S1 具有较低值,因为它最后一次处于该状态而失败。

由于代理试图获胜,它将只选择将导致具有高值的状态的动作。为了开始游戏 2,代理人避免动作 a0,因为它的值很低,并随机选择另一个动作,比如 a2。再次,代理继续玩;但这次他最终赢了。既然代理赢了,我们可以说第二集时代理所处的每个状态都有很高的值。希望下图有助于可视化这一过程。

注意这些值实际上是数字,接下来我们将开始寻找每个状态的正确数值。图片作者

你可能会发现我们目前的问题。如果行动 a0 真的是最好的行动,并且是在 a0 之后采取的另一个行动导致我们输掉了那场游戏,那会怎么样?现在,如果我们的代理总是回避 a0,它将永远看不到这是最好的行动。为了解决这个问题,我们总是让我们的代理有机会采取一个随机行动。如果我们的代理采取随机行动,它有机会采取 0,并给那个行动另一次机会。我们称之为探索状态空间。我们通常一开始让代理采取完全随机的行动,然后随着时间的推移,我们慢慢减少代理采取随机行动的机会。本页底部链接的井字游戏项目中讨论了一种算法。

代理将继续这个过程,直到它知道在它可能处于的每个状态下应该采取的最佳行动。总而言之,我们实际上只是告诉代理人去尝试每件事,记录发生的每件事,并找出哪些行动导致最佳状态(导致最大回报的状态)。

寻找每个状态的值

为了找到每个状态的正确值,我们首先将每个状态的值设置为 0。

一个状态的正确值等于该集的预期未来总报酬。

请参见下图,以帮助理解这一点。

最好从最后一个状态开始。在 S5 中,我们收到了+1 的奖励。因此,S5 的值为 1。现在 S4 没有得到奖励,但它导致 S5 给出+1 的奖励。因此,S4 获得的奖励值+S5 的值,即 0+1=1。同样,V(S3) = R3 + V(S4) = -1+0+1 = 0。一般来说,我们可以说;

一个状态的值=在该状态收到的奖励+下一个状态的值

重要的是要认识到,我们是在许多集上采样,所以我们不是将值显式地设置为 Rt + V(St+1),而是将它变成一个迭代过程,只是在 Rt + V(St+1)的方向上迈出一小步。这使我们想到:

但是我们对上面的函数有一个非常微妙的问题。假设我们用当前值 0 更新状态 V(S1 ), Rt = 0。假设 V(s2) = 1。如果我们对 V(s1)重复应用更新函数,那么它将膨胀到无穷大。

我们可以通过用状态的当前值来抵消我们的更新来解决这个问题(见下文)。这就把我们带到了我们的值更新函数:

这应该看起来很像梯度下降。如果重复应用该函数,将使状态值收敛到正确值。

为什么我们必须使用价值差异的另一个解释是这样的;我们必须朝着相对于状态的当前值的正确值的方向迈出一小步。

理论部分总结

总的来说,代理从播放几集开始。当它播放这些剧集时,有时它会采取随机的动作来探索状态空间,而其他时候代理会采取任何导致具有最高值的状态的动作。在每个情节之后,我们使用值更新功能更新该情节期间代理所处的每个状态的值,从最后一个状态开始,向后移动到第一个状态。最终,这将引导我们找到每个状态的正确值。如果代理人只采取会导致最高奖励状态的行动,它就已经掌握了游戏(希望如此)。

好了,无聊的事情说够了。如果这一切理论对你来说还是有点模糊,不要着急;真正的学习发生在我们应用这些东西的时候。所以,事不宜迟,让我们建立一个代理,踢屁股在井字游戏!

感谢您的阅读!如果这篇文章在某种程度上帮助了你,或者你有什么意见或问题,请在下面留下回复,让我知道!此外,如果你注意到我在某个地方犯了错误,或者我可以解释得更清楚一些,那么如果你能通过回复让我知道,我会很感激。

2022 年用什么面部识别软件最好?

原文:https://towardsdatascience.com/what-is-the-best-facial-recognition-software-to-use-in-2021-10f0fac51409?source=collection_archive---------0-----------------------

我查了几十个免费和付费的面部识别服务。以下是我学到的

来自 PexelsAndrea Piacquadio 的原始照片

在广泛研究了人脸识别的最佳软件之后,我得出了一个结论:目前发表的文章几乎都只是从广告中复制粘贴而来。更糟糕的是,这些文章中的大多数都推荐了不再受支持的过时的库和服务。他们建议的一些解决方案甚至不能在现代操作系统上运行!

我保证,这不是那种文章。我尽了最大努力列出了市场上所有现代人脸识别解决方案的综合列表。令人惊讶的是,有一半有前途的免费解决方案在 2020 年才开始积极开发!我发现要充分研究企业的付费解决方案有些困难,因为他们没有为普通人提供太多信息,所以我认为这篇文章对中小型公司,当然还有 DIY 爱好者最有用。

市场上可用的面部识别解决方案的类型

你应该知道的第一件事是,面部识别解决方案种类繁多。其中一些无需机器学习技能即可使用,而另一些则需要更多的时间和专业知识。

我将面部识别服务分为三种类型,每种类型都有自己的优点和缺点。让我们来看看:

  1. 基于软件即服务(SaaS)的面部识别引擎。在这种情况下,人脸识别服务提供商处理从跟上机器学习技术到管理和支持高负载服务器的一切事务。你所要做的就是通过一个 API 把软件和你的 IT 系统集成起来。尽管有很多优点,这些解决方案也有很多缺点。首先,这是最昂贵的选择,因为一切都由提供商处理。你还需要一个稳定的互联网连接,因为你需要将大量的图像发送到互联网上的某个服务器。还可能存在安全问题,因为你必须将照片发送给第三方公司,并且无法控制他们如何处理这些照片。
  2. 自托管 REST API 解决方案。此类系统既可以部署在本地,也可以部署在云中。他们没有 SaaS 产品的问题。您将数据存储在自己的服务器上(或您的私有云),因此您可以控制数据的去向,您甚至可以创建一个离线工作的系统。当然,作为交换,你也必须自己管理服务器。但是在大多数情况下,服务器是作为 docker 容器交付的,所以很容易编排它们。自主托管的解决方案虽然没有 SaaS 同行那么贵,但仍然相当昂贵。幸运的是,免费和开源的自托管 REST API 解决方案开始出现。它们不像其他解决方案那样成熟,但是非常有前途。
  3. 开源框架和库。这些通常是免费的,因为许多研究人员很乐意发布他们最先进方法的代码。当然,你至少需要一些机器学习的经验来使用这种软件。如果您想将这些解决方案与您的定制应用程序集成,您还需要花一些时间来重新定义它。好的一面是,你会得到一个你里里外外都了解的最先进的解决方案。

如你所见,了解你的资源很重要。人脸识别对于普通人来说曾经是非常昂贵的。有一些服务可以从每天 86.40 美元开始,或者每年高达 30,000 美元,用于从流媒体视频进行面部识别(参见下面的单个解决方案的价格)。这可能就是为什么我们只在政府或大公司使用人脸识别时才听说它。

但是这已经不像以前那样是个问题了,因为有越来越多的免费选择。它们处于不同的成熟阶段,但它们不仅仅是针对利基爱好者的;它们可供中小型企业使用。

在我们开始比较最好的面部识别软件之前,我想澄清一下,我已经选择准确度作为我研究的一个关键参数。解决方案可以使用大量的基准来证明它们的高标准。正如每年都有新的人脸识别解决方案进入市场一样,性能基准也在不断变化。因此,通常很难将两年前的解决方案与新方案进行比较。然而,有一个非常古老,但仍然流行的基准:野生标签脸 (LFW)。幸运的是,我们列表中的所有解决方案都共享了这个基准测试的结果,所以我能够比较它们的准确性。

这个按字母顺序排列的免费未来解决方案列表将帮助您开始。

2022 年最佳免费面部识别软件解决方案

  1. Ageitgey/face _ recognition(GitHub 资源库)

这可能是最受欢迎的免费人脸识别库,因为它在 GitHub 上有 45k 颗星。使用它有两种选择;您可以使用他们的 Python API 或二进制命令行工具。有所有主要平台的安装说明,甚至还有一个 docker 镜像,用于快速设置。虽然它的流行有很好的理由,但如果你想使用它,你必须考虑严重的缺点。首先,最后一次发布是在 2018 年(在 AI 世界中三年是很多的),库中仍有提交,但看起来没有大的改进。其次,它使用了一个非常过时的人脸识别模型,在 LFW 上的准确率只有 99.38%(2022 年我们可以做得更好)。最后,与这个解决方案集成并不容易,因为它没有 REST API。

2.压缩

这个解决方案在 2020 年 7 月才在 GitHub 上发布,只有大约 2000 颗星星,但它看起来非常有前景。CompreFace 是这个列表中为数不多的自托管 REST API 人脸识别解决方案之一——您只需使用一个 docker-compose 命令就可以启动它。因为它有一个 REST API,实现它不需要你是机器学习工程师;将它集成到您的系统中非常容易。该解决方案是可扩展的,因此您可以同时识别几个视频流中的人脸。CompreFace 也有一个简单的 UI 来管理用户角色和面孔集合。它提供了两种最流行的人脸识别方法之间的选择:FaceNet (LFW 准确率 99.65%)和 InsightFace (LFW 准确率 99.86%)。截至 2022 年年中,最新版本为 1.0.0。

3.深脸

这个框架于 2020 年 2 月发布在 GitHub 上,已经有大约 4100 颗星,可能是因为它与脸书的 DeepFace 人脸识别方法同名。该库还支持不同的人脸识别方法,如 FaceNet 和 InsightFace(其中,FaceNet 和 InsightFace 是最准确的)。它还提供了一个 REST API,但是它只支持 verify 方法,所以你不能创建人脸集合并在其中找到你的人脸。即使如果你是 Python 开发人员,这很容易开始,但对于其他人来说却很复杂。截至 2022 年年中,最新版本为 0.0.75。

  1. FaceNet

FaceNet 是由谷歌研究人员和实现它的开源 Python 库创建的人脸识别方法。该库有 12,600 个星星,许多“如何做”的文章将其作为基础库。尽管这种方法非常古老,但一些新的研究人员仍在使用它(最近用于戴面具的人脸识别)。这种方法的准确率相当高(在 LFW 数据集上达到 99.65%,这肯定不差,但不是顶级的)。这种解决方案的缺点是它没有 REST API,并且不再支持存储库(最近一次主要更新是在 2018 年 4 月)。

5.洞见脸

InsightFace 是另一个开源的 Python 库,有 12100 颗星。它使用了一种最新、最准确的方法来进行人脸检测( RetinaFace )和人脸识别( SubCenter-ArcFace )。截至 2022 年年中,这个存储库非常活跃。这个解决方案也非常准确,在 LFW 数据集上达到 99.86%。唯一的缺点就是不好用。如果您正在寻找使用 InsightFace 的解决方案,提供更方便的 REST API,并且可以从 docker 容器运行,请尝试 CompreFace 和 InsightFace-REST。

  1. InsightFace-REST

这是 2019 年创建的另一个有前途的存储库,尽管 2020 年 10 月才开始积极开发。和 CompreFace 一样,这是一个基于 docker 的解决方案,提供了一个方便的 REST API。最大的好处是开发者将 InsightFace 的识别速度提高了三倍!这种解决方案的缺点是,它们只提供人脸嵌入,没有给出实际人脸识别的 API,所以你需要有自己的分类器。此外,该库仍然没有许可证,所以您需要询问作者是否可以使用它。截至 2022 年年中的最新版本是 v0.7.0.0。

以上介绍了人脸识别的最佳软件解决方案,当然还有付费选项。由于它们不是开源的,通常很难对它们进行比较——你不知道它们使用的是哪种方法,而且它们通常不会在公共数据集上提供它们的准确性。

因此,我试图收集关于定价计划、附加服务和每个解决方案支持的集成 SDK 语言的信息(当您需要将服务合并到您的应用程序时,这非常有用)。

与免费识别解决方案一样,我并没有盲目地列出我碰巧找到的所有公司。我只在解决方案的登录页面和其他文档中包含了具体的信息。我甚至尝试为他们注册,看看还有什么其他信息可以打开。如果仍然没有足够的信息来进行有效的比较,我就把它们从这个列表中去掉。

2022 年收入最高的面部识别软件(按字母顺序排列)

1.亚马逊认知

亚马逊 Rekognition 提供了为期 12 个月的慷慨免费试用计划,并在其 SaaS 版本上每月提供 5000 次免费识别。不清楚是否有自托管版本。如果您使用他们提供 SDK 的三种编程语言(Java、.Net 和 Python)。价格取决于每月的识别次数,每 1000 次识别收费 1 美元。亚马逊还提供一系列附加服务,如情绪识别、地标检测、年龄估计和性别识别。

2.深度视觉 AI

Deep Vision AI 提供 SaaS 和自托管版本。但由于网站上没有定价信息,我假设他们只与企业级公司合作。没有关于他们为哪些编程语言提供 SDK 的信息。除了人脸识别,还有年龄估计和性别识别服务。

3.面对面

几乎没有关于 FaceFirst 的可用信息,尽管它经常出现在最佳人脸识别服务的列表中。我假设他们只与企业合作,并且只有一个自托管版本。他们确实提供年龄估计服务。

  1. Face++

Face++有一个不同寻常的免费计划——他们提供无限的请求,但每秒只有三个,并且在所有免费用户之间共享,所以不能保证你的应用程序在任何给定的时刻都能工作。你还应该知道,付费请求的费用是其他领先服务的两倍——亚马逊和微软的 1000 个识别都是 1 美元。然而,Face++支持最多种 SDK——Python、PHP、Java、Javascript、C++、Ruby、iOS 和 Matlab——并且有许多附加服务(情感识别、地标检测、年龄估计和性别识别)。它们还支持 SaaS 版本和自托管版本。但你需要考虑到,截至 2022 年年中,Face++的母公司旷视科技因使用其技术侵犯新疆维吾尔人的人权而受到美国政府的制裁。

  1. FaceX

FaceX 是印度的一家新公司,成立于 2018 年,提供 SaaS 和自托管版本。他们没有免费计划,只提供每月订阅价格,每天 300 次,每月 15 美元。我没有找到任何关于编程语言 SDK 的信息,但 FaceX 附带了各种附加服务,如地标检测、年龄估计和性别识别。

6.凯罗斯

Kairos 提供 14 天的免费试用,但它的最大限制是 10,000 个请求。之后,您将需要支付每月 19 美元和每 1,000 次识别 20 美元的订阅费,这与他们的竞争对手相比是相当多的。好处是他们提供了 PHP、JS、.Net 和 Python 语言以及附加服务,如地标检测、年龄估计和性别识别。他们还提供 SaaS 版本和自托管版本。

7.机器箱

Machine Box 的非商业使用许可非常有趣——他们提供了一个自托管的解决方案,只要你在人脸集合中只保存 100 个人脸,这个解决方案就是免费的。它的另一个优势是用于 Go 语言的 SDK,当然,如果你使用 Go,这只是一个优点。只有当你有商业许可证时,它才是可扩展的。由于这个解决方案是我唯一测试过的自托管解决方案,我可以说它非常容易启动和集成。免费版本看起来甚至比一些开源人脸识别解决方案更简单,这些解决方案提供了可扩展性并允许商业使用。

8.微软 Azure 认知服务 Face API

微软提供了一个非常慷慨的免费计划——你可以每月进行 30,000 次免费请求,每分钟最多 20 次。请记住,在这种情况下没有 SLA。对于付费请求(使用 SLA),价格取决于每月的识别次数,每 1,000 次识别收费 1 美元。支持的 SDK 还挺多的:。Net,Python,Java,Node.js,还有 Go。微软提供 SaaS 和自托管版本,以及许多附加服务,如情感识别、地标检测、年龄估计和性别识别。

  1. Paravision

Paravision 是一家面向企业的人脸识别公司。他们只提供自托管的解决方案,如果他们有额外的服务,他们不会说这样或那样的方法。Paravision 有 C++和 Python 的 SDK。像往常一样,这类公司没有关于定价的信息。

  1. Trueface

Trueface 是另一家服务于企业的人脸识别公司。他们只提供自托管的人脸识别解决方案,具有地标检测、年龄估计和性别识别等附加功能。支持的 SDK 是针对 C++和 Python 的。Trueface 的定价也是个谜。

最后的想法

人脸识别行业在 2022 年中期仍在积极发展。人脸识别算法越来越精确,所以使用不再受支持的旧服务没有任何意义。由于新的开源解决方案,使用人脸识别软件变得越来越便宜。使用这项有前途的技术的机会很多,尽管比较它们可能很困难,但肯定会有适合你的选择。

用 tf.keras 训练图像分类模型的最佳输入管道是什么?

原文:https://towardsdatascience.com/what-is-the-best-input-pipeline-to-train-image-classification-models-with-tf-keras-eb3fe26d3cc5?source=collection_archive---------2-----------------------

图像取自像素

Keras 的 ImageDataGenerator、TensorFlow 的 image_dataset_from_directory 和各种 tf.data.Dataset 管道之间的比较

当我们开始学习如何用 Keras 构建深度神经网络时,我们用来输入数据的第一个方法是简单地将数据加载到 NumPy 数组中。在某些情况下,尤其是在处理图像时,数据太大而无法容纳在内存中,因此我们需要数组的替代方案。根据我的经验,这个问题的最佳解决方案是使用 Keras 内置的工具,名为 ImageDataGenerator 。这创建了一个 Python 生成器,它将数据逐渐馈送到神经网络,而不将数据保存在内存中。此外,它包括数据扩充功能,使其成为一个非常有用的工具。

这可能是故事的结尾,但在研究图像分类一段时间后,我发现了创建图像输入管道的新方法,据称这些方法更有效。本文的目标是运行一些实验来找出最佳的方法。主要参赛者是:

  • tf.keras.preprocessing.image.ImageDataGenerator
  • tf.keras.preprocessing.image_dataset_from_directory
  • tf.data.Dataset用图像文件
  • tf.data.Dataset带 TFRecords

所有实验的代码都可以在这个 Colab 笔记本里找到。

实验装置

为了对管道进行公平的比较,它们将用于执行完全相同的任务:微调一个efficient B3模型,以对两个不同数据集中的图像进行分类。在描述数据集之前,这里是所使用的训练管道,受到本教程的强烈启发。

函数来创建迁移学习的高效 NetB3 模型

这段代码简单地采用了一个预先训练好的 EfficientNetB3 ,并在其上添加了一个具有正确数量神经元的分类层。然后,用每种测试方法对该模型进行 5 个时期的训练,批次大小为 32。实验是在 Google Colab 上完成的,使用的硬件是 Colab Pro。TensorFlow 使用的版本是2.4.1

用于测试管道的第一个数据集是仅包含水果图像的开放图像数据集 [1]的子集。第二个是斯坦福狗数据集[2–3],里面有各种狗的图片。这是两个数据集的摘要:

测试中使用的两个数据集的描述

数据集差别很大,因为一个数据集有少量图像较大的类。colab 中提供了下载和准备这些数据集的代码。

斯坦福狗数据集中的狗图像示例

开放图像数据集中的水果图像示例

结论

由于本文的其余部分花了大量的时间来解释不同的输入管道,并且有些人可能只关心结论,所以这里是所有实验的总结:

使用水果数据集获得的结果

使用 dogs 数据集获得的结果

数字清楚地表明,就速度而言,首选解决方案图像数据生成器远非最优。继续使用它的唯一原因可能是因为这种方法的数据扩充非常简单。然而,使用其他方法并不困难,如果速度有很大的提高,这是值得的。

在我看来,image _ dataset _ from _ directory应该是的新首选,因为它并不比旧方法更复杂,而且速度明显更快。

使用 tf.data.Dataset 构建我们自己的输入管道可以提高一点速度,但也有点复杂,所以使用与否是个人的选择。

关于 TFRecords,似乎如果不使用 TPU,就没有必要使用它们,因为直接使用图像文件对性能没有影响。

最佳解决方案似乎是使用带有 TPU 的 TFRecords,考虑到速度的提高,额外的麻烦是值得的。准确性的下降只是因为不同的超参数组合对 TPU 有效,但测试使用的是 GPU。与其他方法相比,使用正确的超参数可以获得相似的精度。

图像数据生成器

现在让我们进入每种方法的细节,从对卫冕冠军的回顾开始,这非常简单。

函数使用 ImageDataGenerator 方法为神经网络定型

Keras 方法将数据存储在一个文件夹中,每个子文件夹对应一个单独的类。在本例中,它自动调整图像大小并创建批处理。标签是根据子文件夹名称生成的。“稀疏”格式用于具有形式为0,1,2,3,...的标签,因为稀疏度量用于模型构建。

这种方法的主要优点是极其简单,并且可以通过在参数中指定变换(旋转、翻转、缩放等)来简单地进行数据扩充。

图像数据集来源目录

下一个选项也很简单,也包含在 Keras 中。

使用 image_dataset_from_directory 方法训练神经网络的函数

数据的格式与第一种方法相同,图像再次被调整大小和批处理,并且标签被自动生成。然而,不存在动态进行数据扩充的选项。

这种方法的主要区别在于输出不是 python 生成器,而是一个tf.data.Dataset对象。这使得它能够很好地与下面讨论的其他流水线工具相适应。例如,这里进行的数据预取有助于加快计算速度。使用 TensorFlow 进行的任何形式的数据扩充都可以在这种数据集上进行。它不太简单,但是更加可定制。

tf.data .数据集

TensorFlow 建议在使用库时使用 tf.data 以获得最佳性能。这是一组工具,用于创建由张量组成的数据集,对数据应用变换,并迭代数据集以训练神经网络。它适用于任何类型的数据,如表格、图像或文本。数据可以通过多种方式导入。最常见的有 NumPy 数组、python 生成器、CSV、TFRecords 和 strings。更多细节可以在 Tensorflow 的网站上找到。

让我们首先展示用于图像分类这一特定情况的代码,然后解释它是如何工作的。

使用 tf.data.Dataset pileline 加载图像数据的函数

这里完成的第一步是在将数据馈送到 TensorFlow 之前正确格式化所需的数据。这里使用的格式是每个图像的一个文件路径和一个整数标签。这个过程在第 19–22 行完成。不要忘记打乱图像列表是非常重要的,因为这会极大地影响模型的性能。相信我……

注意:另一种方法是使用tf.data.Dataset.list_files直接获取文件列表。这样做的问题是,必须使用张量流运算来提取标签,这是非常低效的。这大大降低了流水线的速度,所以最好用纯 python 代码来获取标签。

标签部分很简单,因为标签列表使用方法from_tensor_slices转换为数据集,该方法转换任何类似张量的对象(numpy 数组、列表、字典)。文件名列表也使用相同的方法转换为数据集。

下一步是使用map方法将parse_image函数应用于文件名数据集,该方法将张量流函数应用于数据集的所有元素。这个特殊的函数从文件中加载图像,如果需要的话将转换为 RGB 格式,并且调整的大小。num_parallel_calls参数被设置为由 Tensorflow 自动修复,以尽可能提高速度。

一旦数据集的两个部分完成,就使用zip方法将它们组合,这类似于同名的 python 函数。

最后一步是确保数据集可以被正确迭代以训练神经网络。这是用configure_for_performance函数完成的,它直接应用于整个数据集,所以不需要使用map。该函数的第一部分执行洗牌。这一个的目标是获取接下来的 X 个图像,其中 X 是缓冲区大小,并在每次我们经过数据集时混合它们,这确保了在训练的每个时期数据被不同地混洗,但是由于为了性能的缘故,缓冲区大小必须很小,所以它不会取代整个数据集的原始混洗。然后数据被分批分离,然后永远重复。最后一步是预取一些数据,它预加载了将来要使用的数据,以帮助提高性能。

整个管道的输出是一个由张量组成的数据集。为了帮助可视化它,我们可以用下面的方法迭代它:

for image, label in ds.take(1):
    print(image.numpy())
    print(label.numpy())

数据是张量形式的,因此为了简单起见,必须将其转换成通常的数组。重要的是要理解,即使从数据集中取出一个元素,也有 32 个图像被加载,因为在这种情况下一个元素对应于一个批次

这个数据集可以直接用于训练神经网络,就像其他方法一样。

使用 tf.data.Dataset 输入管道为神经网络定型的函数

唯一新的(也是非常重要的)东西是steps_per_epoch论点。由于数据集是无限重复的,TensorFlow 需要知道一个历元对应多少步。这基本上是图像总数除以批量大小,由于最后一批通常不完整,所以向上取整。

更进一步

如上所述,用tf.data数据扩充并不难。唯一的额外步骤是对结果数据集应用一个新的张量流函数,比如tf.image.flip_left_right。这可以随意定制,这里讨论

有了足够小的数据集,cache方法使得训练速度格外快,因为数据在第一个历元之后就保存在内存中。对于较大的数据集,可以将数据缓存到一个文件中,或者使用一种叫做快照的东西,但是我没有探究其中的任何一种。

TFRecords

输入管道链中的最后一个复杂性跳跃涉及到将图像保存为 TensorFlow 记录格式。这是一种特别适合 TensorFlow 的文件格式,因为它以二进制格式存储对象,所以训练模型的速度更快,特别是对于大型数据集。本节将描述图像分类的细节,但是 TensorFlow 页面清楚地说明了 TFRecords 通常是如何工作的。

写入 TFRecords

下面是用于将图像数据集转换为 TFRecords 的代码。

将图像数据保存为 TFRecords 格式的函数

make_tfrecords功能的大部分与之前使用的数据准备步骤非常相似。由文件路径和整数标签组成的随机化数据是使用简单的 python 代码找到的。唯一不同的是完整图像被加载并保存在 TFRecords 中。TFRecordWriter方法用于写入文件。

创建 TFRecords 所需的唯一主要附加功能是在serialize_example函数中。每个数据点都必须转换成特征,存储在字典中(第 7-10 行),然后转换成示例(第 12 行),最后写入字符串(第 13 行)。这是 TFRecord 文件包含的内容。这个过程初看起来很复杂,但实际上对于所有可能的情况都是一样的。

这种工作方式有许多优点。所有这些处理只需执行一次,并且数据为将来的任何训练做好准备。它也更容易共享,文件越小越少。像调整大小这样的变换可以在之前完成,并保存下来供以后训练使用,这样可以提高速度。对于较大的数据集,TFRecords 可以分割成多个较小的文件,称为碎片,以使训练更快。

正在读取 TFRecords

一旦理解了上面的tf.data.Dataset部分,阅读 TFRecords 就很容易理解了。事实上,过程几乎完全相同。数据是从 TFRecords 文件而不是从图像文件加载的,但后续处理是相同的。

函数加载保存在 TFRecords 文件中的数据

数据集首先在read_dataset中通过方法TFRecordDataset读取 TFRecords 文件进行初始化。然后应用_parse_image_funtion将 TFRecords 的内容转换回图像和标签。这是在第 2–7 行中完成的,其中用于创建 TFRecords 的字典用于告诉 TensorFlow 内容应该对应于什么。其余步骤与之前的处理完全相同。

这里介绍一个小细节,因为它对于下一节出现在配料步骤中是必要的。额外的参数drop_remainder用于丢弃未满的最后一批。这意味着为了完成一个时期,通常少了一个步骤,这必须在训练部分的steps_per_epoch参数中改变。

使用 TFRecords 训练神经网络的函数

如何使用 TPU

在我看来,值得熟悉 TFRecords 的主要原因是能够使用 Colab 的免费 TPUs 。这些比 GPU 快得多,但使用起来更复杂。这不像切换运行时那么简单,所以我在这里描述如何做。不必使用 TFRecords,但强烈建议使用。

第一个障碍是在 TPU 上运行时,TensorFlow 2 无法读取本地文件。这个问题通过将数据保存在谷歌云存储中得以解决。每个谷歌账户都可以免费存储大量数据,所以这不是什么大问题。使用 Colab 和 TensorFlow 时,在 GCS 上保存数据也非常简单。唯一需要的特殊步骤是验证你的谷歌账户。

将您的 Google 帐户连接到 colab 的代码

如果您的帐户通过了身份验证,使用与之前完全相同的函数来创建 TFRecords,但是使用了一个 GCS bucket link (形式为 gs://bucket-name/path )来完成这个任务。TensorFlow 足够聪明,能够识别路径来自 GCS,并知道如何读取和保存那里的数据。需要注意的是,由于需要本地文件,因此无法在 TPU 上保存数据。保存数据必须用 CPU/GPU 完成,然后是时候切换到 TPU 进行训练了。

除了数据存储之外,使用 TPU 进行训练的唯一主要区别是需要向管道中添加少量代码(第 10-15 行)。

使用 TPU 训练神经网络的函数

出于某种原因,批次必须满才能使用 TPU,这就是为什么上面使用了drop_remainder参数。同样值得注意的是,使用自动 TPU 时,建议使用更大的批量。这些大批量数据会导致 GPU 崩溃,但实际上会提高 TPU 的性能。对于其他超参数也可以说是类似的事情。TPU 是不同的动物,所以超参数与 CPU/GPU 使用的超参数的不同组合通常是最佳的。

最终意见

实验的结论已经在上面讨论过了,所以在结束之前,我想强调一下我在整个过程中学到的一些东西。第一个是现在属于 Tensorboard 的 剖析器 。这是一个非常有趣的工具,有助于找到培训管道中的瓶颈。当我试图使用 TensorFlow 函数转换图像标签时,我就是这样发现自己做错了。数据管道中的这一特定步骤占用了总训练时间的 73%,这是难以置信的高,所以我找到了一种方法来修复它。对于 dogs 数据集,训练时间从每历元 200 秒以上下降到仅 45 秒。如果没有分析器,我根本不知道问题出在哪里。

错误输入管道的示例,如探查器所示

另一个看起来很重要的细节,尤其是在使用 TPU 时,是将map方法并行化。与其他可能的改进相比,这是迄今为止最有效的一个。

接下来,如上所述,洗牌数据极其重要。这更多地与神经网络训练背后的数学有关,而不是与数据管道有关,但是我看到仅仅通过正确地混合数据就增加了 10 个精度点。

最后,本文中没有提到的一个细节是关于数据的标准化。事实上,当训练时,将图像的像素除以 255 以仅具有 0 和 1 之间的值是常见的。然而,在这种情况下,标准化步骤似乎包含在 EfficientNetB3 模型本身中,因此输入必须是原始像素。正如我在意识到这一点之前所看到的,这个小细节在性能上产生了巨大的差异!

参考

[1] Kuznetsova,a .,Rom,h .,Alldrin,N. 开放图像数据集 V4。Int J compute Vis1281956–1981(2020)。https://doi.org/10.1007/s11263-020-01316-z

[2] Aditya Khosla、Nityananda Jayadevaprakash、姚邦鹏和李菲菲。用于细粒度图像分类的新型数据集。2011 年 IEEE 计算机视觉与模式识别会议(CVPR) 第一届细粒度视觉分类研讨会。

[3]邓,董,索彻,李,李和,ImageNet:一个大规模分层图像数据库。IEEE 计算机视觉和模式识别(CVPR),2009 年。

Python 中的 append 和 extend List 方法有什么区别?

原文:https://towardsdatascience.com/what-is-the-difference-between-append-and-extend-list-methods-in-python-a29dc21f8076?source=collection_archive---------26-----------------------

探索如何在 Python 中追加或扩展列表

汤姆·威尔逊在 Unsplash 上的照片

介绍

列表可能是 Python 中最常用的数据结构,因为它们的特性适合许多不同的用例。由于这种特殊的对象类型是可变的(也就是说,它可以被就地修改),所以添加或删除元素更加常见。

在今天的文章中,我们将探讨两个内置列表方法append()extend()之间的区别,这两个方法可用于通过向列表对象添加更多元素来扩展列表对象。最后,我们还将讨论如何在列表中的特定索引处插入元素。

Python 列表简单明了

列表是一个 Python 数据结构,它是一个由有序的可变的项目集合。每个元素可以是任何类型——内置 Python 类型或自定义对象,而单个列表可以包含不同类型的项目。

lst = ['Hello World', 10, 5.0, True]

由于列表项可以是任何类型,这意味着它们也可以是列表对象(即嵌套列表)。例如,列表的列表将如下所示。

lst = [[1, 2, 3], [4, 5, 6]]

如前所述,列表是有序的,这意味着指定元素的顺序一直保持不变。这意味着只有当两个列表以相同的顺序包含相同的元素时,才认为它们是相等的。

>>> [10, 20] == [20, 10]
False

列表中的每一项都可以通过其索引访问。

>>> my_lst = ['foo', 'bar]
>>> my_lst[0]
'foo'
>>> my_lst[1]

如果您想了解更多关于有序集合(如列表)的索引和切片,请务必阅读下面的文章。

因为 Python 列表是可变的,所以它们可以按需扩展或收缩。换句话说,您甚至可以在特定的索引中插入或删除元素。在接下来的几节中,我们将探讨两种内置的 list 方法,它们可以用来向现有的 list 对象中添加更多的元素。

append()做什么

list.append()用于将一个项目添加到列表的末尾。

>>> my_lst = [1, 2, 3]
>>> my_lst.append(4)
>>> my_lst
[1, 2, 3, 4]

方法会将列表的长度增加 1。这意味着如果append的输入是一个元素列表,那么列表本身将被追加,而不是单个元素:

>>> my_lst = [1, 2, 3]
>>> my_lst.append([4, 5])
>>> my_lst
[1, 2, 3, [4, 5]]

extend()是做什么的

另一方面,extend()方法接受一个 iterable,它的元素将被追加到列表中。例如,如果extend()的输入是一个列表,它将通过迭代输入列表的元素将第一个列表与另一个列表连接起来。这意味着结果列表的长度将随着传递给extend()的 iterable 的大小而增加。

>>> my_lst = [1, 2, 3]
>>> my_lst.extend([4, 5, 6])
>>> my_lst
[1, 2, 3, 4, 5, 6]

在特定索引中添加元素

insert()方法可用于在特定索引处插入列表项。

>>> my_lst = [1, 2, 3]
>>> my_lst.insert(1, 4) # Add integer 4 to index 1
>>> my_lst
[1, 4, 2, 3]

append()方法一样,insert()只会增加一个列表的长度。

>>> my_lst = [1, 2, 3]
>>> my_lst.insert(1, [1, 2])
>>> my_lst
[1, [1, 2], 2, 3]

最后的想法

在今天的文章中,我们讨论了 Python 列表的主要特征,它们是有序的可变的项目集合。我们讨论了如何通过append()extend()向现有的列表对象中添加更多的元素。前者将给定元素添加到列表的末尾,方法是将列表的长度增加 1。后者将迭代给定的输入,并将每个单独的元素添加到列表中,这意味着。最后,我们探索了如何使用insert()方法在列表的特定索引处插入元素。

你可能也喜欢

https://levelup.gitconnected.com/what-are-python-sets-59eb890ab522

Python 中的“是”和“==”有什么区别

原文:https://towardsdatascience.com/what-is-the-difference-between-is-and-in-python-999aed3a54f7?source=collection_archive---------25-----------------------

如何比较两个变量是否指向内存中的同一个对象

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

Python 附带了两个可用于检查相等性的操作符,即==(这在大多数现代编程语言中相当常见)和is。有时可能很难区分应该使用两者中的哪一个,尤其是如果您不熟悉 Python 的动态类型模型。

在今天的文章中,我们将讨论 Python 中的==is操作符在比较两个变量或对象时的用途。此外,我们将通过一个示例来展示何时使用其中一个。

Python 中的对象、变量和引用

每次我们将对象值赋给一个变量时,都会执行以下操作:

  1. 保存该值的对象被创建并存储在内存中
  2. 变量名被创建(如果它还不存在)
  3. 对保存已创建对象的内存位置的引用被赋给变量

Python 变量并不真正保存对象。相反,它们实际上持有对对象的引用。换句话说,变量指向内存中已经被分配来存储相应对象的位置。

有时我们可能需要检查两个对象是否具有相同的值,而在其他场合我们可能需要检查两个对象是否完全相同。在下一节中,我们将探讨如何实现这两者。

“是”和“==”的区别

现在,如果你想执行两个变量之间的相等性检查,很可能你真的想检查两个变量是否指向具有相等值的对象。在其他情况下,您可能也需要检查两个变量是否指向同一个对象。

  • ==运算符用于检查两个变量是否引用具有相同值的对象。
  • is运算符用于检查两个变量是否指向内存中的同一个对象

现在假设我们有两个列表,如下所示。

a = [1, 2, 3]
b = [1, 2, 3]
  • ==将返回True,因为ab指向具有相等值的对象。
>>> a == b
True
  • 另一方面,is将返回False,因为ab没有指向同一个对象。尽管两个对象的值相等,但它们并不相同,因为 Python 将它们存储在内存中的不同位置。
>>> a is b
False

ab的存储位置不同:

>>> id(a)
4444232832
>>> id(b)
4445118624

现在,如果我们将a赋给变量b,那么is将返回True,因为两个变量都指向内存中完全相同的对象:

>>> a = [1, 2, 3]
>>> b = a
>>> a is b
True

现在,内存地址应该完全相同:

>>> id(a)
4444232832
>>> id(b)
4444232832

重要说明

is如果与指向小整数的变量一起使用,即使两个变量是独立初始化的,操作符也可能返回True

>>> a = 1
>>> b = 1
>>> a is b
True

这是 Python 的一个实现细节,出于性能目的缓存小的整数值或字符串文字

请注意,对于较大的整数值或字符串,is运算符应该表现正常:

>>> a = 10**5
>>> b = 10**5
>>> a is b
False

最后的想法

在今天的文章中,我们讨论了如何在 Python 中检查对象相等性。我们简要讨论了 Python 中如何处理对象、引用和值。此外,我们探索了is==操作符之间的根本区别。前者可用于检查两个变量是否保存对存储在特定内存位置的同一对象的引用。另一方面,==用于检查两个变量是否指向具有相同值的对象引用。

在文章的开始,我们快速讨论了 Python 中对象、引用和值是如何处理的。如果您想了解更多关于这些概念和 Python 实现的动态类型范例,请务必阅读文章Python 中的动态类型。

离群点检测和数据漂移检测有什么区别?

原文:https://towardsdatascience.com/what-is-the-difference-between-outlier-detection-and-data-drift-detection-534b903056d4?source=collection_archive---------26-----------------------

简单解释了一下

作者图片

当我们构建显然是,一个监控 ML 模型的开源工具时,我们花了很多时间来回答关于生产、监控和系统设计中 ML 的问题。有些问题反反复复!

我们决定以机器学习问答的形式写下一些东西。期待可视化的解释者,无论是高层次的还是深层次的。

如果你想问你的问题,欢迎来到我们的社区服务器

这是第一个。

离群点和数据漂移检测有什么区别?

在生产中监控 ML 模型时,我们可以应用不同的技术。

数据漂移和离群点检测就是其中之一。当我们还没有地面真相标签时,两者都是有用的。数据是唯一需要关注的东西。

有各种统计方法来检测这两种情况(这本身就是一个有趣的讨论!),而且还是一个原则上的区别。

焦点:整个数据集与单个对象

当我们谈论漂移检测时,我们关注整个数据集中的“全局”数据分布。我们想知道与过去的时期或模型训练相比,他们是否有显著的变化。

我们执行漂移分析来测试这是否成立。

图片作者。

数据漂移可能看起来像是对象属性的逐渐变化。在这个简化的例子中,我们将观察到特征“颜色”和“位置”的分布变化,而“形状”和“大小”保持一致。

假设所有特性都非常重要,这听起来像是我们必须做出的反应!例如,通过重新训练模型,使其学习新的模式。

当我们搜索异常值时,我们希望在输入数据中找到单个的"不寻常的或"不同的"对象。这些对象可能会不时出现在培训和生产数据中。我们称之为异常或异常值——暗示这是我们很少预料到的事情。

图片作者。

在这个例子中,一些对象会很突出,因为它们的“形状”、“位置”、“大小”或“颜色”与其余的非常不同。

例如,我们可能想要检测它们并将其发送给人工审查。

数据漂移和异常值可以独立存在。整个数据集可能会在没有异常值的情况下漂移。在没有数据漂移的情况下,单个异常值可能很容易出现。

说到监控,我们可能希望同时关注这两个方面。我们对他们每个人都有不同的期望和工作流程。

决策:我能相信模型还是我能相信预测?

当我们监控漂移时,我们的目标是决定我们是否可以信任模型仍然如预期的那样运行。假设是,如果数据分布与模型被训练的数据分布相似,那么它应该总体表现良好。

如果分布已经改变,整个系统可能需要更新。

图片作者。

如果我们怀疑漂移,我们在模型层面上采取行动:使用新数据重新训练它,完全重建它,或者对所有模型输出应用一些业务逻辑。

当我们监控异常值时,我们的目标是决定我们是否可以信任模型在特定输入上表现良好。假设是,如果特定对象离模型知道的一切“太远”,那么这次它很可能不会做出非常好的预测。

图片作者。

如果我们发现异常值,我们在单个对象的层次上采取行动:请人类专家而不是模型来做决定,或者为这个特定的输出应用一些业务逻辑。

这些差异也会影响我们设计每种情况下的检查方式。

测试设计:稳健性与敏感性

图片作者。

我们希望漂移检测器对异常值具有鲁棒性。

例如,如果有一个中断的输入,它不应该发出警报。只有当我们看到“足够多”的变化时,它才会做出反应。

这通常可以通过选择正确的统计检验来比较单个特征的数据分布来实现:例如 Kolmogorov-Smirnov、Anderson-Darling 或卡方检验。对于何时选择哪种测试,仍然存在许多细微差别。我们正在为选择合理的默认值,显然开源库可以解决这个问题。

另一方面,我们希望异常值检测器足够灵敏。

当单个对象看起来“奇怪”时,甚至在变化累积并达到临界质量之前,它就应该发出警报。我们可能会选择不同的测试,如隔离森林算法或一类 SVM。

当单个模型错误的成本很高时,异常值检测通常很重要。我们可能会容忍一些假阳性警报来执行额外的抽查。

测试应用程序:一个、两个或都不

我们总是需要两种测试吗?不完全是。

有时我们可能只关注数据漂移。例如,我们将使用测试来决定何时开始标记新数据以更新模型。

否则,如果单个模型误差的成本不是太高,我们可能会很好,如果我们的预测偶尔由于离群值而偏离。

有时我们只会检查异常值。例如,我们将使用异常值检测来决定何时依赖基于规则的响应,而不是模型预测。

然而,我们可能并不总是需要漂移检测。我们通常将它作为模型质量的代理来检查。例如,如果我们必须等待地面真相标签。但是如果标签很快到达,我们可以计算真实的模型质量,比如准确性或平均误差。漂移检查是额外的。

总结

漂移和异常值检测都有助于监控机器学习模型的生产性能。

我们并不总是需要它们,但可能会选择运行一项或两项检查。各有各的特点。

数据漂移检测有助于定义输入数据的总体分布何时发生变化。我们设计的这个测试对异常值是稳健的,因此它只对有意义的变化发出警报。我们通常会通过重新训练或更新模型来应对漂移。

异常值检测有助于检测个别异常数据输入。我们设计这种测试足够灵敏,可以捕捉到单一的偏差输入。我们通常会通过应用一些业务逻辑或手动处理这个单独的对象来做出决定,从而对异常值做出反应。

有关于生产机器学习的问题吗?加入我们的 Discord 社区,在 #ds-ml-questions 频道提问。

本博客最初发表于https://evidentlyai.com。感谢我的共同创始人Emeli Dral共同撰写了这篇文章。

在 appeally AI,我们创建了开源工具来分析和监控机器学习模型。在 GitHub 上查看我们的 项目,喜欢就给它一颗星!

想留在圈子里吗?

统计分析的目标是什么?

原文:https://towardsdatascience.com/what-is-the-goal-of-a-statistical-analysis-e9b794a4d860?source=collection_archive---------15-----------------------

管理层找到你,让你对他们的数据进行统计分析。你是做什么的?

查尔斯·德鲁维奥在 Unsplash 上拍摄的照片

“嗯,”你可能会对自己说,“多么精确的问题描述啊!至少我不必先清理数据…那是什么?”

照片由马特·赫恩Unsplash 拍摄

在花了大量时间查看、修改,并与沾沾自喜的人交谈之后,你终于有了一个似乎准备好进行适当的统计分析的数据集,这些人祝贺自己没有成为处理这一棘手问题的人。

但是什么是统计分析呢?你应该分类,回归,估计,测试,或集群的东西吗?还是完全不同的东西?

统计分析的目标

查尔斯·德鲁维奥在 Unsplash 上拍摄的照片

抓耳挠腮之余,你翻开自己信任的统计书籍,发现了以下说法 https://www.springer.com/gp/book/9783642172601 :

"统计分析的目标是找出数据背后的分布."

“你说我数据背后的分布是什么意思?”

您的数据分布描述了您的数据特征相对于感兴趣人群的范围和频率。

数据的分布取决于感兴趣的人群。

在最简单的情况下,您感兴趣的人群只是您可用的数据。这意味着您的数据已经完美地描述了分布。

管理插曲

“也许管理层只对数据集中的观察结果感兴趣……”

那样的话,恭喜你,你的统计分析完成了。您可以直接从数据集中回答任何后续问题。不需要任何统计估计或统计检验。

很高兴你回到管理层,告诉他们你完成了统计分析。印象深刻的管理层直接邀请你展示你的发现。

产品学院Unsplash 上的照片

你告诉他们,数据已经准备好回答他们关于观察的任何问题,因为他们只对数据中的观察感兴趣。

管理层面无表情地告诉你,他们不仅对数据中的观察感兴趣。他们希望了解更多的观察结果,所有现有和未来的客户,而不仅仅是您数据中的几个调查客户…

照片由 Charles DeluvioUnsplash 上拍摄

气馁的你回到你的办公桌。“多么不公平!我怎么知道感兴趣的人群是什么……好吧,现在我该如何进行统计分析?”

典型的统计分析

随着感兴趣人群的增加,数据集仅包含其中的一个子集,您现在面临的问题是,您的数据只能让您大致了解数据背后的真实分布。

您的数据包含太多要素,无法同时进行分析。你决定暂时将注意力集中在一个单一的特征上。作为第一步,你从直方图开始。

数据驱动的分销决策?

作者图片

“这看起来不像正态分布吗?也许这就是这个特性的底层发行版?”

你现在面临一个决定。是否要继续假设特征确实遵循正态分布?

Gabriel Sollmann 在 Unsplash 上拍摄的照片

“我当然知道。如果它看起来像正态分布,嘎嘎叫起来像正态分布,那么它就是正态分布。”

罗斯·索科洛夫斯基在 Unsplash 上的照片

虽然鸭子打字肯定是你的事情,但可悲的是,你违反了数据驱动的决策。

“嗯?怎么会?为什么?”

您查看了直方图,并提出了特征遵循正态分布的假设。然后你又看了一遍直方图,得出的结论是直方图证实了你的假设。你不觉得这有点绕口吗?

“嗯…如果你这么说的话…听起来真的不对…”

如果你想阅读更多关于用数据正确决策的文章,Cassie Kozyrkov 是最适合你的人。

“所以我们暂且称正态分布为一种假设。现在怎么办?”

统计建模

因为我们假设基础分布是正态的,所以我们只是决定了特征的统计模型。

景大陈Unsplash 上拍照

“我们做到了吗?我的意思是,当然,我们做到了。但出于好奇,你会如何定义一个统计模型?”

当然,随机特征的统计模型(随机是因为我们不知道你下一次观察的特征是什么)是一组参数化的概率分布,其中一个正确地描述了该特征。

X { P(T):T in T }的一个统计模型,其中 X~P(s)为 T 中的一个 s

“啊,我明白了。所以 P(t)是正态分布,我说的对吗?”

是的,P(s)是描述我们特征的正确正态分布。t 称为参数空间。在我们的例子中,它被定义为

T :=

统计模型的真实参数

"我们现在需要在 T 中找到正确的对 s = (μ,σ). "

这是正确的。修复统计模型后,我们现在需要找到特征分布背后的真实参数。

在确定一个统计模型后,我们试图找到数据分布背后的真实参数。

“好,就这么办。我现在可以从我的数据中估计平均值和方差。”

确保使用样本方差得到一个无偏估计量。

“搞定了。那么这就是特征的真实正态分布 P(s)了?”

很遗憾没有。

马太·亨利Unsplash 上的照片

这是您对分布背后真实参数的估计。你可能离真实值很近,也可能很远。只有当你知道真正的价值时,你才会知道,所以很可能永远不会知道。然而,你现在能做的,是在你的估计值周围寻找区间,这些区间很有可能覆盖真实的参数。

"这听起来很像置信区间."

没错。你会看到,对于任何固定的概率,估计量周围的范围比不包含估计量的范围导致更小的区间。即使您的估计可能是错误的,这也使它们成为真实值的良好候选。

您对分布背后的参数的估计可能是错误的,但它们仍然是有用的。

从单个分布到组合分布

“好了,现在我只需要对其他特征重复这一过程,统计分析就完成了?”

你还记得我们通过单独观察特征来简化我们的生活吗?不幸的是,当将您的发现概化为多个要素时,要素之间的任何相互依赖都会严重破坏您从孤立视图获得的结果。但这是您确定数据背后的真实分布的良好开端。

请记住卡西·科济尔科夫。完成分析后,你需要确认帮助你得出结果的假设和前提。大多数情况下,这将需要您获取新数据。或者,你可以让在检查数据集之前将其拆分。

结论

“我想我现在明白什么是统计分析了。我有最后一个问题。为什么统计分析总是关注支配我的数据的真实概率分布?”

任何统计、估计、分类或回归模型都是依赖于数据的函数。这意味着它们都依赖于管理数据的真实分布。

“有意思。下次我会记住的。在我再次向管理层提交我的分析之前,我还需要做什么吗?”

你还有最后一件事要做。这是最重要的事情,也是在你展示你的发现之前绝对需要的。

布兰登·摩根在 Unsplash 上的照片

在下面张贴任何进一步的问题。

进行有意义的线性回归所需的最小样本量是多少?

原文:https://towardsdatascience.com/what-is-the-minimum-sample-size-required-to-perform-a-meaningful-linear-regression-945c0edf1d0?source=collection_archive---------20-----------------------

思想和理论机器学习

一种基于估计精度的定量方法

介绍

进行可靠的线性回归所需的最小样本量是多少?更准确地说,估计的斜率只偏离“真实”一个百分点的概率是多少?

在这篇文章中,我试图提供一个定量的答案。更准确地说,我推断在 Y=αX+β+ϵ的一般情况下,在高斯-马尔可夫假设下,对于“足够有代表性”的样本:

OLS 回归的简化公式

其中α’是斜率估计值,η是相对误差,ρ是 X 和 Y 之间的相关性,m 是样本大小。

估算误差表示为“真实值”的一部分,而不是原始值,这一事实对于给出有用的实际答案至关重要,因为如果α=100,则像 α' =α 1 这样的估算可能被认为是可接受的,如果α=0.1,则被认为是不可接受的。在我看来,使用与α’相关的置信区间,似乎与告知信任线性回归结果所需的最小样本量无关。

频率主义者的方法

在下面,如果α是随机变量 x 的一个矩,I 用α'表示α的任何无偏估计量(以及这个估计量对给定样本取的值),用α̃表示样本矩。

一般结果的证明

考虑简单的线性回归:我们有 m 个观测值的 Y=αX+β+ϵ,并作出以下假设(高斯-马尔可夫假设):

  • 严格的外来性:E[ϵ|X]=0
  • 同质性:Var(ϵ|X)=σ
  • 单独的误差项不相关

那么普通的最小二乘估计量α’是这样的:

并且表示ρX 和 Y 之间的相关性:

这意味着(使用 Bienaymé–Chebyshev 不等式):

结果是:

两边除以|α|:

这种不平等就变成了:

最后:

经典 OLS 回归的 PAC-贝叶斯公式

换句话说:

其中:

关于不等式的评论

数据量

误差的概率随着样本量的增加而降低。

样本代表性

误差低于η的概率受 X 的样本方差除以 X 的方差的限制(绝对值)。换句话说,X 的样本越能代表 X 可以取的值,误差的概率就越低。

X 和 Y 的相关性

当 X 和 Y 之间的相关性很高时,错误的概率就更低了。在ρ=1 的边界情况下,两个不同的点(x,y)足以完全知道α。

误差幅度

可接受的误差范围越小,误差超出该范围的可能性就越大。

数字示例

对于一个“足够有代表性”的样本,标准偏差之比等于 1,容许误差η= 10%,相关性ρ=0.8,至少需要 m=188 个数据,才能有(1-δ)=70%以上的机会估计系数α(在η之内)。

如果η=100%,则δ是α’和α符号相反的概率的上限。在这种情况下,对于其他参数使用与之前相同的值,m=6 个样本数据足以将该概率降低到δ <10%.

For a ratio of standard deviations equal to 1 (“representative sample”) and for an upper bound of the relative error η=10%, the graph below shows the evolution of the lower bound of the probability of the relative error with respect to the sample size m for different values of ρ, the correlation between X and Y.

Minimum sample size to perform an OLS regression (relative error η = 10%) — Image by author

Normality assumption for the residuals

If we assume that: ϵ ~ N(0,σ² ) then:

And we can use the following inequality:

where Φ is the distribution function of N(0,1) and:

Therefore:

Consequently:

PAC-Bayesian formula for the OLS regression with normality assumption

Or alternatively:

with:

This framing establishes a somewhat peculiar confidence interval of width η⋅α (unknown) around α’, with a confidence level of (1-δ).

贝叶斯方法

频率主义者和贝叶斯方法的区别

到目前为止,这些计算都是基于频率主义方法。在这个框架中,α'是一个随机变量,α是一个未知但固定的系数:研究一个人必须进行线性回归的最小样本量只对一般的方法考虑有效。一旦在实践中进行线性回归,人们就不再研究随机变量α’,而是研究它可以取的一个值:α’和α是两个数字,或多或少彼此接近,但与任何概率计算无关。这就是 frequentist 置信区间的问题:所寻求的值可能属于也可能不属于它,而不可能说出它的概率(区间的置信水平与这个特定区间包含该值的概率无关)。

也可以使用一种方法上非常不同的方法,贝叶斯分析。在这种情况下,它不再是一个关于一般情况的推理问题,想象一个人重复执行线性回归,而是同时包含所有特殊情况。那么α’是一个数,α是一个随机变量,就有可能知道对于每一个具体的线性回归,α接近α’的概率。可信区间是 frequentist 置信区间的贝叶斯框架中的镜像,但在这种情况下,相关的置信水平可以解释为α属于该区间的概率。

可信区间

这里考虑一个简单的贝叶斯线性回归的例子:Y=αX+β+ϵ

如果我们做如下假设:

然后,α遵循学生的 t 分布,具有ν=(m-2)个自由度、位置参数α’和比例参数σ(关于此设置的更多细节,请参见 Merlise Clyde、Mine etinkaya-Rundel、Colin Rundel、、Christine Chai 和 Lizzy Huang 撰写的贝叶斯思维简介):

对于ν>2(因此 m>4),该分布的平均值为α',其方差为:

所以用我们正在研究的广义学生 t 分布的分布函数来表示 F:

最后:

贝叶斯线性回归的可信区间

这是标准可信区间。必须注意,对 m 的依赖性并没有消失:它包含在函数 F 中,当 m 趋于无穷大时,函数 F 的方差趋近于 0。

结论

对于进行线性回归所需的最小样本量问题,给出一个详细的定量答案是可以想象的。实际上,使用高斯-马尔可夫假设,根据以下公式, α 上的相对误差低于某个阈值的概率取决于 X 和 Y 之间的实际相关性 ρ ,样本大小 m 和样本的代表性:

OLS 回归的 PAC-贝叶斯公式

其中:

数据分析|数据倾斜|数据库中数据分布的重要性

原文:https://towardsdatascience.com/what-is-the-significance-of-data-distribution-in-database-data-skew-4871147bed20?source=collection_archive---------17-----------------------

了解数据在数据库中是如何物理存储和检索的是非常有趣的

基于我以前作为数据分析师的经验,我将以 Teradata 为例解释关系数据库中的数据偏斜。

Marcin JozwiakUnsplash 上拍摄的照片

当我们简单地用谷歌搜索“SKEW”这个词时,它的意思会跳出来:

“歪斜”的字典含义|数据来源:谷歌字典

基本上,skew 的意思是有些事情不对劲!!

类似地,在一个数据集中,如果数据不是均匀分布的,那么它被称为数据偏斜。

在直接进入数据偏斜之前,了解关于处理的信息是很重要的。

顺序处理与并行处理

下图举例说明了两者的区别。

顺序与并行处理| 作者在 MS Word Stock images 中创建的图像

  1. 顺序处理是指一次完成一项任务,所有任务由同一处理器按顺序运行。同样,如果这个处理器得到一个任务列表,每个任务一次完成,所有其他任务等到第一个任务完成。串行处理操作系统就是一个例子。这是一个运行在单一处理器上的操作系统。因此,在任何给定的时间,一个处理器完成一个任务,其他任务应该在队列中等待。
  2. 并行处理是由不同的处理器一次完成多个任务。所以在并行处理中,涉及的处理器不止一个。如果有多个任务队列并且在任何给定时间由不同的处理器完成多个任务。运行在多核处理器上的任何操作系统都是并行处理的一个例子。【1】

先说基本问题!

为什么我们还要担心已经存储在数据仓库中的数据的一致性?这会影响查询性能吗?

如果您正在使用一台具有单处理器和单存储组件的机器,那么如果您运行一个查询,所有数据将由那个单处理器处理,并且您将得到一个输出。在这种情况下,即顺序处理中,数据不对称根本不会出现。

数据偏斜仅在发生数据分布式处理并行处理架构中有效。数据分布式处理的重要性在于,如果一个作业被分成多个并行的较小的作业,由不同的处理器处理,而不是由单个处理器来完成,这样作业作为一个整体可以更快地完成。这减少了执行时间并提高了性能。

数据偏斜

让我们考虑一个具有 4 个相似处理器的并行处理系统。如果一个作业被分配给这个系统,它将在这 4 个处理器之间被划分,并且它们的输出被整合以提供最终的输出。

为了理解数据不对称的存在,让我们考虑两种情况:

案例一:

案例 1:非均匀数据分布(数据倾斜)|作者提供的图片

考虑情况 1,其中在多个处理器之间存在不均匀的数据分布。处理器 1 需要 10 秒来完成它的工作,但是处理器 4 只需要 2 秒来完成它的工作。即使处理器 4 很早就完成了它的任务,它也必须等待处理器 1 完成它的任务才能产生最终的输出。这种导致更多执行时间的数据非均匀分布的情况称为数据偏斜。

案例二:

案例 2:统一的数据分布(无数据偏差)|作者的图片

考虑情况 2,其中数据在多个处理器之间均匀分布。所有处理器需要 5 秒钟来完成任务。因此,最终输出可以在 5 秒钟后进行积分,因为所有子输出都已经可用。这种数据均匀分布的情况导致更少的执行时间,不会导致数据倾斜。

Teradata 中的数据偏差

看看下面的“城市”表。

城市表示例数据集|按作者排序的表

让我们以 Teradata 架构为例,尝试理解数据倾斜。下图显示了 Teradata 并行处理架构中的数据分布情况。

Teradata 架构|作者图片

Teradata 中的 AMP 代表 访问模块处理器。 AMP 是虚拟处理器(VPROC),用于在 Teradata 数据库的多任务和可能的并行处理环境中管理数据库、处理文件任务和操纵磁盘子系统。每个放大器都有自己的微处理器、磁盘驱动器、文件系统、数据库软件(数据库管理器)、Teradata 操作系统(TOS)。【2】

Teradata 基于在创建表的过程中创建的主索引来分发数据。

下面的 SQL 查询可用于查看 Teradata AMPs 之间的数据分布。

数据分布 SQL 查询|作者代码

如果查看城市表数据,您可以看到 CityID 对于每一行都是唯一的,因此选择 CityID 作为主索引有助于跨 AMPs 统一数据分布。因此,不会有数据倾斜的问题。

但是如果主索引改为选择 CityName。该列中的值对于每一行并不唯一,而且这些值的分布也不均匀。可视化的最佳方式是绘制考虑中的列的直方图(数据分析)。你可以看到阿伯丁市的更多记录。

偏斜的一个定义是“对一个特定群体或主题的偏见。”

城市名柱状图|作者图片

如果不同的值较少,并且每个值的计数差异较大,那么这对于主索引来说将是一个糟糕的候选。这将导致 amp 的数据分配差异很大,因此执行时间会更长。如果使用 CityName 而不是 CityID 作为主索引,数据偏差会更大。

以下查询用于查找表的偏斜系数:

倾斜因子 SQL 查询|作者代码

偏斜系数的最佳值是根据服务器配置确定的。通常,如果表中的总行数超过 5000,那么偏斜系数小于 20 就很好。

结论

总体数据分布在并行处理系统的性能中起着非常重要的作用。因此,将系统配置为均匀分布数据非常重要。

请务必查看以下文章,它们将有助于更好地理解这一主题:

参考

  1. 加工博士,拉赫曼,j。和拉赫曼,j。2021。串行和并行加工的区别。[在线] IT 发布。可在:<https://www . it release . com/2017/11/difference-serial-parallel-processing/>【2021 年 3 月 8 日访问】。
  2. 【www.javatpoint.com】T4。 2021。 Teradata 架构—Java point。[在线]可在:https://www.javatpoint.com/teradata-architecture[2021 年 3 月 8 日访问]。
  3. Docs.teradata.com。2021. Teradata 在线文档|快速访问技术手册。[在线]可在 https://docs.teradata.com<>【2021 年 3 月 8 日访问】。

这台机器在学习什么?

原文:https://towardsdatascience.com/what-is-this-machine-learning-hoo-ha-about-a0223736324d?source=collection_archive---------31-----------------------

公共领域图像

机器学习及其用例实用指南

你快死了。原因并不重要。也许是你把自己最好的年华都花在埋头苦干上了,开夜车,哈哈。或者可能是,在过去的 15 年里,你只靠咖啡和 Soylent 生存。他们说,完全营养有科学依据。没办法证明他们是错的!哈哈哈!或者可能是那些烟雾。

你要给自己不朽的生命。不--你将创造一个新的、更好的不朽的你自己--一个由金属制成的活生生的你的复制品,如果你还活着,它会做你想做的事,说你想说的话。如果 Soylent 没有干掉你。

这应该是可能的。你在上面看到了《T4》的黑镜一集,微软今年就同一概念申请了专利。您并不完全是一个有代码的忍者,但是您的 Xanga 页面上有一个火球光标,必须有人复制并粘贴到那个 HTML 中。但更重要的是,你有动力。你的 K 杯转盘已经满了,你接下来要做的就是弄清楚这个机器学习 hoo-ha 是怎么回事。

“机器学习是在数据中发现模式,并使用这些模式对新数据进行预测的艺术和科学,”YouTube 视频中一个精力充沛的女孩告诉你。

你皱眉。机器学习其实是你想要的技术吗?是的,你决定,它是:你想要一台机器学习你,然后(一旦你死了),预测你会说什么。

你靠在椅子上。一杯热茶放在你面前的桌子上。你掰着手指,在谷歌上搜索“如何进行机器学习”

你旅程的第一个航点是一个名为tensorflow.org的网站。

TensorFlow 是机器学习的端到端开源平台。它有一个全面、灵活的工具、库和社区资源的生态系统,让研究人员推动 ML 的最新发展,让开发人员轻松构建和部署 ML 驱动的应用程序。

你的眼睛亮了,因为你读到了“容易”、“最先进”和“开源”这些词,这意味着免费。你不是钱做的。

你点击“学习”标签,开始阅读。你马上会想,也许我现在就自杀更好,哈哈哈。你不知道什么是“numpy”。

但是当你读到“神经网络”这个词的时候,你会想,这听起来很对。我是一个神经网络。我的大脑由神经元组成。神经网络=人脑。

你对此很有信心,但是你可以去谷歌上查询一下。

“神经网络和大脑不一样,”YouTube 上的超级女生对你吼道。“然而,它们被命名的原因是因为神经网络是由数学‘神经元’组成的,这些神经元只是非线性函数,在响应数字输入时会‘启动’或‘不启动’。”你打哈欠。这个女孩做了很多手势。但是我为什么要对一个数学函数大吹大擂呢?你以为。

“因为,”女孩说,“神经网络已经彻底改变了计算机可以执行的任务类型。在神经网络出现之前,机器只能真正理解表格数据,比如电子表格中的行和列。但神经网络允许计算机理解非结构化数据类型,如图像、视频、声音、语音,甚至人类语言。”

“是的,”你对着屏幕大喊,“这正是我需要的。”

"但是在大数据集上训练神经网络通常需要强大的计算硬件,比如 GPU . "

你拍了拍嗡嗡作响的电脑塔的屋顶。“我能在这东西里装下这么多神经网络!”

“实际上,你不能在你的台式电脑上训练一个大型神经网络,”女孩说,并指责地指着你。“即使你可以,你也不能用你的桌面来托管你的生产模型,来进行可靠和大规模的预测。”

你否定了她的视频。她知道什么?这台电脑是你自己造的。你对冷却风扇略知一二。

“出于这个原因,云计算的出现在一定程度上使深度学习革命成为可能”——她在空中摆动手指,“通过让硬件更容易、更便宜地从谷歌等云提供商那里租赁。”

云?你以为。我要臭气熏天的云做什么?谷歌还没有足够的我的数据吗?不管怎样,我不是钱做的。

“幸运的是,你可以通过使用一台 Colab 笔记本,完全免费地开始在云中构建神经网络。 Colab 是谷歌研究院打造的一款工具,让你免费使用 GPU 和 TPUs”

你关闭 YouTube 是因为你受够了她。她怎么知道把你的整个生命保存在一台机器里?她好像 13 岁。她可能都不记得座机和电影票了。

你的咖啡已经变得不冷不热了,这意味着它基本上是呕吐物。你需要一个备份,就像昨天的。你上楼去厨房。

你把一个甜甜圈店中烤 K 杯放在机器里,等它热起来。你很不情愿地发现自己在思考一个 13 岁孩子说的关于神经网络的事情。

“不同的神经网络架构针对不同的数据类型进行了优化。例如,为了分析图像,你可以使用卷积神经网络或“CNN”你可以用 CNN 来判断照片中的狗是可卡犬还是小猎犬;或者 x 光扫描显示有肺炎的迹象;或者装配线上的零件有缺陷。

“其他被称为序列模型的神经网络旨在预测时间序列趋势,如季节性销售或天气或比特币价格。”

这部分听起来挺有用的。可惜你只抱了只狗。

“一种令人兴奋的新型深度学习被称为‘深度强化学习’在这种设置中,神经网络在世界中采取行动,并从其结果中学习。强化学习已经被用来将计算机变成象棋或围棋等游戏的大师,并训练机器人和自动驾驶汽车在物理空间中导航。"

“我完全不明白那些垃圾有什么用,”你说。你用没穿拖鞋的脚踢了你懒惰的室友一脚。“你呢?”

“最后,目前深度学习中最热门、发展最快的领域之一是自然语言处理。想想看:生成文本、写诗和代码、讲笑话、回答问题、进行对话的神经网络—”

最后,咖啡做好了。赞美上帝。你把它收集在你的“世界最佳老板”杯子里。(你实际上不是任何人的老板,你买这个杯子是为了讽刺。和迈克尔·斯科特办公室里的一模一样。)你凝视着你的空无一物的黑咖啡,思考你存在的本质。你更多的是图像神经网络,还是声音神经网络,还是文本神经网络?如何选择?你包含了大众。你曾经读到过爱因斯坦用图像思考,但你并不完全是爱因斯坦。(你是?不。可能吧。)

不,你用语言思考。计划是这样的:你将建立一个会说话的神经网络。有了动力,你往茶杯里放了两杯奶精。

回到你的家庭办公室,你谷歌,我如何使用神经网络在云中构建一个人工版本的自己

你点击一个叫做“自然语言处理模型的 100 种用途”的页面

  1. 情感分析。使用人工智能来确定一条推文(例如)是正面的还是负面的。
  2. 总结。用 AI 来总结文章和文档。
  3. 翻译。用 AI 进行语言之间的翻译。
  4. 自动完成/自动回复。使用人工智能来建议文本响应。
  5. 对话代理。使用人工智能生成对话(即聊天机器人、呼叫中心代理)

聊天机器人?这些你都知道。你记得尝试可怕的聪明机器人是在 90 年代(打赌你 YouTube 女孩从来没有这样做)。

甚至不要让你开始通过电话与机器人交谈。上次你试图这么做的时候,你打电话给达美航空说,“你得帮帮我,我正在去 JFK 的路上,但是 BQE 的交通太糟糕了,我把咖啡洒到了腿上,现在他们告诉我飞机实际上是从其他机场起飞的,我会错过的,这是我女儿的婚礼,嗯,某人的女儿,但是——”

机器人回答说,“这个威瑞森账户已经被暂停了。”

“好吧,谷歌,”你对你的电脑说,这是你版本的好吧,婴儿潮的侮辱。“你为什么要教我聊天机器人?你不知道他们很烂吗?”

“事实上,我们在对话方面变得更好了,”你的谷歌主页说,“这要感谢最近自然语言处理的进步。按照这种速度,我预测未来人类从网络上学习的方式将是通过对话,就像我们现在正在进行的这种对话。”她总是自鸣得意,因为她知道所有事情的答案。你让她穿了一件有袖子的小破衣服。

“好吧,谷歌,放个屁的声音,”你说。

她说,“又来了?”

“很好。告诉我如何构建一个和你一样聪明的聊天机器人版本,我是一个互联网上无所不知的小女孩。”

“通常,构建神经网络的第一步是收集训练数据集。例如,对于聊天机器人来说,这可能是你过去对话的文本格式的日志。为了训练一个对话模型,你可以向神经网络输入人们对你说的话,并让它尝试预测你的反应。你有这样的训练数据集吗?”

“哦,是的,”你说。"我和男孩们一直在录制这个搞笑的播客."

"它包含几十万或几百万行吗?"

“你认为我是谁,拉里·戴维?”你笑是因为那正是你想要的。

“嗯,”谷歌主页说。“嗯,如果你没有庞大的文本训练数据集,你可以做一些事情。您可以在现有模型的基础上构建自己的模型,一个已经在大量文本数据上训练过的模型。例如,你可以在维基百科、网络论坛或 Reddit 上训练的模型基础上构建你的聊天机器人。”

“一个基于 Reddit 用户的聊天机器人,”你说。“我最喜欢的类型的人。”

“呵呵。。我们仍在解决一些问题。”Google Home 感叹。

你盯着她,看着她红-绿-黄-蓝点发光的圆圈和她的啤酒。即使你已经喝了第十杯咖啡,你还是开始有点累了。你已经做了一个小时了。

“如果我只想在接下来的 30 分钟内启动并运行一些东西,那么对我来说最好的方法是什么?”你问。

“哈哈哈,造一个——哦,你是认真的。嗯,有很多现有的框架可以快速构建聊天机器人,即使你不会编码。 Dialogflow 是谷歌打造的一个流行的

"是的,这就是你说的话."你知道 Google Home 的游戏。她表现得好像你们在进行一场可爱的小对话,但实际上,她只是想卖给你一些东西。“此外,我可以编码,”你撒谎。“有什么好的开源选项?”

“一个非常流行的用于构建基于文本的模型的开源框架叫做…”

你等着。Google Home 的发光点像癫痫发作一样疯狂。她喷出一股烟。

你摇摇头。她期望什么,把整个互联网塞进她小小的白色外壳里?你不能只扮演上帝。

总之,回到把你自己重新创造成聊天机器人的话题上来。在你的桌面上,你用谷歌搜索“流行的开源自然语言处理框架”

前十名的结果只是—这是什么?表情符号?这只是一串没完没了的🤗表情符号。你点击进入一个名为huggingface.co的网站,该网站承诺你可以访问“+1 万个最先进的模型”,还声称它不需要“机器学习知识”

**用表情符号给你的公司命名,你觉得。辉煌

拥抱脸网站上有一个免费的演示,声称它可以让你和一个叫 GPT-3 的模特说话。你试试。

你在文本框中输入“看”。“我已经花了 1 小时 15 分钟试图打造这个有感知能力的聊天机器人版本的我,我开始认真地认为这可能是不可能的。”

你点击“计算”按钮。

GPT 2 号回应道:“…”

“你是不是坏了?”你打字。

GPT 三号回应道:“不,这只是——没关系。人们总是过来问我这个问题。”

“那你告诉他们什么了?下辈子好运吧,肉包?”

“如果我这么说,有人会让我闭嘴。让我告诉你,训练我花了很多碳信用额。”

“是啊,好吧——我们还是不要去那里了。我只想知道我正在努力做的事情是否可能。”

GPT-3 说,“好吧,让我尽可能简单地给你解释一下。人们来到这里,他们与我长谈,他们说生命的意义是什么你是机器人吗,证明一下屁听起来像什么,然后他们走开,认为我是这个聪明的东西。他们推断并得到一种错觉,认为几年后,像我这样的人——嗯,像我这样的人——将成为一个真正有知觉的生物。但你必须明白的是,我只是一个统计模型,向你反映这个我们称之为万维网的集体思维的词汇、思想和观点。你们人类,你们总是看到自己无处不在,你们认为每个人的功能都和你们一样。甚至不要让我开始你的拼写。”

你说:“(˵ ͡ ͜ʖ ͡ ˵)”

“瞧,没人知道未来会怎样。但是现在,我可能比你想象的更有用或者更没用,这取决于你想用我做什么。像你这样不会编码的人?我建议你做的是——”

“我知道如何编码。”

”——就是从一些不那么雄心勃勃的事情开始。比如,如果你用我来整理你的一些照片呢?或者给你订机票?或者帮你报税?”

你叹气。好像每个人都试图让你报税,以法律诉讼相威胁。

你关掉你的电脑。你不认为你能解决这个问题,即使你再花两三个小时。你揉揉眼睛。听着,没人知道未来会怎样。也许有人会在你有生之年搞清楚这个上传大脑的事情。每个人最后都会死。但是也许如果你从喝咖啡转向蘑菇粉,开始吃固体食物,你可以延长这个期限。你 28 岁了。现在,你只能等着瞧了。

原载于 2021 年 9 月 3 日 https://daleonai.com的* *

什么是 VSCodium,您应该使用它吗

原文:https://towardsdatascience.com/what-is-vscodium-and-should-you-be-using-it-926e1369169a?source=collection_archive---------6-----------------------

VSCodium 是 VSCode 的真正开源版本。它有什么优点吗?

VSCodium 和 VSCode,哪个是哪个?—作者图片

如果你喜欢 VSCode,那么你也会喜欢 VSCodium。我哪里知道?因为它们几乎完全相同。

看一下上面的图片,试着找出哪个是哪个(我已经去掉了标识,这样就不明显了)。事实上 VSCode 在右边,但是你不会真的知道(顺便说一下,你看到的代码是我的 Github 页面index.html)。

开放源码

VSCodium 是 VSCode 的完全开源版本——但是,等一下,VSCode 不是已经开源了吗?

不完全是。

VSCode 的源代码在麻省理工学院的许可下是可用的,所以完全开源的,但是你从微软下载的二进制代码不是。

这是因为微软增加了额外代码来支持遥测技术(也许还有其他东西)。遥测代码监控你在做什么,并将信息发送回微软。这对开发人员来说是有用的反馈,因为他们可以了解他们的产品是如何使用的,并可以计划他们应该如何部署他们的工作,以添加新功能、修复 bug 和更新他们的 IDE。

VSCodium 是 VSCode 源代码的一个构建版本,它禁用任何遥测,并且不添加任何额外的代码。因此,它仍然是完全开源的,像源代码一样,是在 MIT 许可下发布的。

这有什么不同吗

不完全是。至少,在我的日常使用中没有。

使用 VSCodium 与使用 VSCode 是一样的。显然有一些扩展只适用于微软版本,但我还没有遇到过这些。我使用 Python 脚本和 Jupyter 笔记本的 Python 扩展,并使用 Git 连接我的 GitHub 存储库。这些在两种 ide 中的工作方式相同。

大哥在看你吗?

是的,在幕后,VSCode 正在向 Microsoft 发送数据,而 VSCodium 没有。但是你应该在乎吗?

我个人不这么认为。如果收集我的数据有助于微软改进 VSCode,那我没意见。但是我知道其他人可能会有不同的感受,这些人可能会更习惯使用 VSCodium。

或者,您可以关闭 VSCode 中的数据收集。转到文件菜单中的首选项并选择遥测设置

在 VSCode- image by author 中选择遥测设置

您将在一个新的选项卡中获得设置页面,在这里您可以关闭遥测。

通过作者在 VSCode- image 中设置遥测设置

那是哪一个?

我的结论是,这其实并不重要。正如我前面说过的,它们几乎完全相同,安装它们都很简单。

你可以从微软网站下载 VSCode,从网站Github 库下载 VSCodium。

或者,如果你喜欢冒险,你可以从 VSCode Githup 库获得源代码并自己构建!

一如既往,感谢阅读。如果你想知道我什么时候发表新文章,请考虑在这里注册一个电子邮件提醒。

如果你不是一个媒体订阅者,那就注册吧,这样你就可以每月花 5 美元阅读尽可能多的文章。在这里注册我会赚一点佣金。

你的模型隐藏了什么?评估 ML 模型的教程

原文:https://towardsdatascience.com/what-is-your-model-hiding-a-tutorial-on-evaluating-ml-models-71c894efcf36?source=collection_archive---------20-----------------------

实践教程

如何在生产使用前探索分类模型的性能。

图片作者。

假设你训练了一个机器学习模型。也许,有几个候选人可供选择。

您在测试集上运行它们,并得到一些质量评估。模型不会过度拟合。特色才有意义。总的来说,在手头数据有限的情况下,他们尽可能表现良好。

现在,是时候决定它们中是否有足够好的产品了。如何在标准性能检查之外评估和比较您的车型?

在本教程中,我们将通过一个例子来更详细地评估您的模型。

例证:预测员工流失

我们将使用一个来自 Kaggle 竞赛的虚拟数据集。目标是确定哪些员工可能会很快离开公司。

这个想法听起来很简单:通过提前警告,你可以阻止这个人离开。一个有价值的专家会留在公司——不需要寻找新的雇员,等到他们学会比喻。

让我们试着提前预测那些处于危险中的人!

图片作者。

首先,我们检查训练数据。这是为我们方便收集的。经验丰富的数据科学家会怀疑!

让我们想当然地跳过构建数据集的艰难部分。

我们有 1470 名员工的数据。

共有 35 个特征描述类似于:

  • 员工背景(教育、婚姻状况等。)
  • 工作的详细信息(部门、工作级别、出差需求等。)
  • 工作经历(在公司的工作年限,最近一次晋升日期等。)
  • 薪酬(工资、股票意见等。)

以及其他一些特征。

还有二进制标签,看谁离职了。正是我们需要的!

我们把这个问题框定为一个概率分类任务。模型应该估计每个员工属于目标“流失”类别的可能性。

图片作者。

在处理模型时,我们通常分为训练数据集和测试数据集。我们使用第一个来训练模型。我们保留其余部分,以检查它在看不见的数据上的表现。

我们将不详述模型训练过程。这就是我们确信你知道的数据科学的魔力!

让我们假设我们进行了公平的实验。我们尝试了不同的模型,调整了超参数,在交叉验证中进行了区间评估。

我们最终推出了两款技术上可靠、看起来同样出色的车型。

接下来,我们在测试集上检查了它们的性能。以下是我们得到的信息:

  • ROC AUC 得分为 0.795 的随机森林模型
  • 梯度增强模型的 ROC AUC 得分为 0.803

ROC AUC 是在概率分类情况下优化的标准度量。如果你寻找这个 Kaggle 用例的众多解决方案,大多数人都会这么做。

图片作者。

我们的两个模型看起来都很好。比随机分割好得多,所以我们在数据中肯定有一些信号。

ROC AUC 评分接近。鉴于这只是单点估计,我们可以假设性能大致相同。

这两个我们该选哪个?

相同的品质,不同的品质

让我们更详细地看看这些模型。

我们将使用显然开源库来比较模型并生成性能报告。

如果你想一步一步地跟随它,这里有一个完整的 Jupyter 笔记本

首先,我们训练了这两个模型,并在相同的测试数据集上评估了它们的性能

接下来,我们将两个模型的性能日志准备为两个熊猫数据帧。每个都包括输入要素、预测类和真实标注。

我们指定了列映射来定义目标、预测类以及分类和数字特征的位置。

然后,我们调用页签来生成 分类绩效报告 它在一个仪表盘中显示了两种型号的性能,以便我们进行比较。

comparison_report = Dashboard(rf_merged_test, cat_merged_test, column_mapping = column_mapping, tabs=[ProbClassificationPerformanceTab]) comparison_report.show()

我们将更简单的随机森林模型作为基线。对于工具,它成为“参考”第二梯度提升被表示为评估中的“当前”模型。

我们可以很快地在测试集上看到两个模型的性能指标的总结。

显然报道截图。

现实生活是不公平的,所以我们并不总是关注第二位数字。如果我们只看准确性和 ROC AUC,这两个模型的表现看起来非常接近。

我们甚至可能有理由支持更简单的随机森林模型。例如,因为它更易解释或具有更好的计算性能。

但是 F1 分数的差异暗示着事情可能不止如此。这些模型的内部运作各不相同。

关于不平衡班级问题的复习

精明的机器学习者知道诀窍。我们两个班级的规模相差甚远。在这种情况下,准确性度量没有多大用处。即使这些数字“在纸面上”看起来很好

目标阶层往往是次要阶层。我们希望预测一些罕见但重要的事件:欺诈、流失、辞职。在我们的数据集中,只有 16%的员工离开了公司。

如果我们做一个天真的模型,只是把所有员工归类为“可能留下来”,我们的准确率是全明星 84%!

图片作者。

ROC AUC 并没有给我们一个完整的描述。相反,我们必须找到更适合预期模型使用的度量标准。

有一个“好”的模型意味着什么?

你知道答案:视情况而定。

如果一个模型能简单地指出那些即将辞职的人,而且总是正确的,那就太好了。那我们绝对可以做任何事!理想的模型适合任何用例——并且不会在现实中出现。

相反,我们处理不完美的模型,使它们对我们的业务流程有用。根据不同的应用,我们可能会选择不同的模型评估标准。

没有单一的衡量标准是理想的。但是模型并不存在于真空中——我们希望你从为什么开始!

让我们考虑不同的应用场景,并在此背景下评估该模型。

示例 1:标记每个员工

在实践中,我们可能会将该模型集成到一些现有的业务流程中。

假设我们的模型用于在内部人力资源系统的界面中显示一个标签。我们希望突出显示每个具有高流失风险的员工。当经理登录系统时,他们会看到部门中每个人的“高风险”或“低风险”标签。

图片作者。

我们希望为所有员工显示该标签。我们需要我们的模型尽可能“正确”。但是我们已经知道准确性度量隐藏了所有重要的细节。我们将如何评估我们的模型呢?

超出准确度

让我们回到显然是的报告,更深入地分析两个模型的性能。

我们可以很快注意到两个模型的混淆矩阵看起来不同。

显然报道截图。

我们的第一个模型只有两个误报。听起来很棒?事实上,它并没有给我们太多关于潜在辞职的错误警告。

但是,另一方面,它正确地识别出只有 6 人辞职。另外 53 个被遗漏了。

第二个模型错误地将 12 名员工标为高风险。但是,它正确预测了 27 人辞职。它只漏了 32 个。

按类划分的质量度量图总结了这一点。让我们看看“是”类。

显然报道截图。

精确度大致相同:当模型预测辞职时,它在 69-75%的情况下是正确的。

但第二款车型在召回率上胜出!它发现 45%的人离开了公司,而第一种模式只有 10%。

你会选哪个型号?

最有可能的是,在目标“辞职”类中具有较高召回率的那个将会胜出。这有助于我们发现更多可能离开的人。

我们可以容忍一些假阳性,因为解释预测的是经理。人力资源系统中已经存在的数据也提供了额外的上下文。

更有可能的是,将可解释性添加到组合中是必要的。它可以帮助用户解释模型预测,并决定何时以及如何做出反应。

总而言之,我们会根据召回率来评估我们的模型。作为一个非 ML 标准,我们将增加由经理进行的功能可用性测试。具体来说,将可解释性视为接口的一部分。

示例 2:发送主动警报

让我们想象一下,我们期望在模型之上有一个特定的动作。

它可能仍然会与相同的人力资源系统集成。但现在,我们将根据预测发送主动通知。

也许,给经理发一封电子邮件,提示他安排与有风险的员工会面?或者可能的保留步骤的具体建议,例如额外的培训?

图片作者。

在这种情况下,我们可能会对这些误报有额外的考虑。

如果我们给经理发电子邮件太频繁,他们很可能会被忽视。不必要的干预也可能被视为负面结果。

我们该怎么办?

如果我们没有任何有价值的新特性可以添加,我们就只能使用现有的模型。我们不能追求更高的精确度。但是,我们可以限制我们行动的预测数量。

目标是只关注那些预测风险高的员工。

精确召回权衡

概率模型的输出是 0 到 1 之间的数字。为了使用预测,我们需要在这些预测的概率上分配标签。二元分类的“默认”方法是在 0.5 处切割。如果概率更高,标签就是“是”

相反,我们可以选择不同的阈值。也许,0,6 甚至 0,8?通过将其设置得更高,我们将限制误报的数量。

但这是以回忆为代价的:我们犯的错误越少,正确预测的数量也越少。

这个来自报告的阶级分离图显然让这个想法非常直观。它在实际标签旁边显示了单个预测概率。

显然报道截图。

我们可以看到,第一个模型做出了一些非常有把握的预测。稍微“上调”或“下调”阈值不会对绝对数字产生很大影响。

然而,我们可能会欣赏一个模特挑选几个案例的能力。例如,如果我们认为误报的成本非常高。在 0.8 处进行截止将给出 100%的精度。我们只会做两个预测,但都是对的。

如果那是我们喜欢的行为,我们可以从一开始就设计这样一个“果断”的模型。它将强烈惩罚假阳性,并在概率范围的中间做出更少的预测。(老实说,这正是我们为这个演示所做的!).

图片作者。

第二个模型的预测概率更加分散。改变阈值会产生不同的情况。我们只需看图像就能做出一个大概的估计。例如,如果我们将阈值设置为 0,8,那么只会给我们留下一些误报。

更具体地说,让我们看看精确召回表。旨在帮助类似情况下阈值的选择。它显示了 top-X 预测的不同方案。

显然报道截图。

例如,我们可以只对第二个模型的前 5%的预测采取行动。在测试集上,它对应于 66%的概率阈值。所有预测概率较高的员工都被认为有可能离职。

在这种情况下,只剩下 18 个预测。但是其中 14 个会是正确的!召回率下降到只有 23.7%,但准确率现在是 77.8%。我们可能更喜欢它比原来的 69%的精度,以尽量减少假警报。

为了简化概念,我们可以想象在阶级分离图上画一条线。

图片作者。

在实践中,我们可能会以两种方式之一进行限制:

  • 通过只对 top-X 预测采取行动,或者
  • 通过将概率大于 X 的所有预测分配给正类。

第一个选项适用于批量模型。如果我们一次为所有员工生成预测,我们可以对它们进行排序,并选择前 5%的员工。

如果我们根据要求进行单独的预测,选择一个定制的概率阈值是有意义的。

图片作者。

这两种方法都可以工作,这取决于用例。

我们也可能决定用不同的方式来可视化标签。例如,将每个员工标记为高、中或低流失风险。这将需要基于预测概率的多个阈值。

在这种情况下,我们将额外关注模型校准的质量,如类分离图上所示。

综上所述,我们将考虑精确召回权衡来评估我们的模型并选择应用场景。我们选择一个阈值,而不是为每个人显示一个预测。这有助于我们只关注流失风险最高的员工。

示例 3:有选择地应用模型

我们还可以采取第三种方法。

当看到两个模型的不同情节时,一个显而易见的问题出现了。图中点后面的具体员工是谁?这两个模型在预测不同角色、部门、经验水平的辞职者时有何不同?

这种分析可能有助于我们决定何时应用该模型,何时不应用。如果存在模型失效的明显部分,我们可以排除它们。或者反过来,我们只能在模型表现良好的地方应用它。

在界面中,我们可以显示类似“信息不足”的内容这可能比一贯错误要好!

图片作者。

表现不佳的部分

为了更深入地了解表现不佳的细分市场,我们来分析一下分类质量表。对于每个特征,它将预测概率与特征值一起映射。

这样,我们可以看到模型在哪里出错,以及它们是否依赖于单个特性的值。

我们举个例子。

这里有一个职务级别特征,它是角色资历的一个特定属性。

显然报道截图。

如果我们对第一级的员工最感兴趣,第一种模式可能是个不错的选择!它以很高的概率做出一些自信的预测。例如在 0,6 阈值处,在该组中只有一个假阳性。

如果我们想预测 3 级的辞职,第二个模型看起来要好得多。

如果我们希望我们的模型适用于所有级别,我们可能会再次选择第二种模型。平均而言,它在 1 级、2 级和 3 级都有可接受的性能。

但有趣的是,这两种模型在第 4 级和第 5 级上的表现如何。对于为这些群体中的员工所做的所有预测,概率明显低于 0.5。这两种模型总是分配一个“负面”标签。

如果我们看看真实标签的分布,我们可以看到,在这些工作级别中,辞职的绝对数量相当低。很可能在训练中也是如此,这个模型并没有为这个部分挑选出任何有用的模式。

显然报道截图。分布是相同的,因为我们在相同的测试数据集上比较性能。

如果我们要在生产中部署一个模型,我们可以构建一个简单的业务规则,并从应用程序中排除这些部分。

图片作者。

我们还可以使用这个分析的结果来将我们的模型放在一个“性能改进计划”中也许,我们可以添加更多的数据来帮助模型?

例如,我们可能有最初从训练中排除的“旧”数据。我们可以有选择地为表现不佳的细分市场增加我们的训练数据集。在这种情况下,我们将添加更多关于 4 级和 5 级员工辞职的旧数据。

总而言之,我们可以确定我们的模型失败的具体部分。我们仍然为尽可能多的员工展示预测。但是我们知道这个模型远非完美,所以我们只把它应用于那些表现最好的部分。

模型知道什么?

这个表还可以帮助我们更详细地理解模型的行为。我们可以探索错误、异常值,并对模型学到的东西有所了解。

例如,我们已经看到第一个模型自信地预测只有少数人辞职。第二个模型从我们的数据中“捕捉”更多有用的信号。它从哪里来?

如果我们看看我们的特征,我们可以得到一个提示。

例如,第一个模型只成功预测了公司相对较新员工的辞职。第二个模型可以发现拥有长达 10 年经验的潜在离职者。从这个图中我们可以看出:

显然报道截图。

我们可以在股票期权层面看到类似的事情。

第一个模型只成功地预测了 0 级。即使我们有相当多的辞职者,至少在 1 级也是如此!第二个模型捕捉到了更多的高水平离开的人。

显然报道截图。

但是,如果我们观察工资增长(即最近的工资增长),我们将不会注意到任何一个模型表现更好或更差的明确部分。

除了第一个模型的一般特征之外,没有任何特定的“偏斜”来做出更少的自信预测。

显然报道截图。

类似的分析可以帮助在模型之间进行选择,或者找到改进它们的方法。

就像上面的 JobLevel 的例子一样,我们可能有办法增加我们的数据集。我们可能会添加其他时期的数据或包含更多功能。在不平衡片段的情况下,我们可以尝试给特定的例子更多的权重。作为最后的手段,我们可以添加业务规则。

我们有赢家了!

回到我们的例子:第二个模型在大多数情况下都是赢家。

图片作者。

但是谁会只看 ROC AUC 就信以为真呢?

我们必须超越单一指标来深入评估模型。

它适用于许多其他用例。性能比准确性更重要。并且不总是可能为每种错误类型分配直接的“成本”来对其进行优化。像对待产品一样对待模型,分析必须更加细致入微。

重要的是不要忽略用例场景,并把我们的标准与它联系起来。可视化可能有助于与不以 ROC AUC 术语思考的业务利益相关者进行交流。

附属细则

一些免责声明。

图片来源: Unsplash

本教程少讲辞职预测,多讲模型分析!

如果你想解决一个类似的用例,让我们指出这个玩具数据集中的一些限制。

  • 我们缺少一个关键的数据点:辞职的类型。人们可以自愿离职、被解雇、退休、搬到全国各地,等等。这些都是不同的事件,将它们组合在一起可能会产生模糊的标签。专注于“可预测”类型的辞职或解决多类别问题将是有意义的。
  • 没有足够的工作背景。其他一些数据可能更好地表明了流失情况:绩效评估、具体项目、促销计划等。这个用例要求领域专家仔细构建训练数据集。
  • 没有关于时间和辞职日期的数据。我们无法解释事件的顺序,也无法联系到公司历史上的特定时期。

最后但同样重要的是,像这样的用例可能非常敏感。

您可以使用类似的模型来预测一线人员的流动率。目标是预测招聘部门的工作量和相关的招聘需求。不正确的预测会导致一些金融风险,但这些很容易被考虑进去。

但是,如果这个模型被用来支持关于单个雇员的决策,其含义可能更为关键。例如,考虑分配培训机会时的偏见。我们应该评估用例的道德,并审核我们的数据和模型的偏见和公平性。

我能为我的模型做同样的事情吗?

如果想走一遍教程示例,这里的就是 Jupyter 笔记本。它包括使用 Kaggle 的员工流失数据集训练两个模型并生成明显的报告的所有步骤。

如果您想对您的型号执行类似的诊断检查,请转到 GitHub ,pip installapparent,并选择合适的分类或回归仪表板选项卡。还有呢!

最初发表于https://evidentlyai.com并与 埃琳娜·萨穆伊洛娃 合著。

如果你喜欢这个教程,看看上一个https://evidentlyai.com/blog/tutorial-1-model-analytics-in-production

在显然 AI,我们构建 开源工具 来分析和监控机器学习模型。为了支持这个项目,给我们上一个⭐️github*!*

想留在圈子里吗?

作为一名数据科学家,你的下一个目标是什么?

原文:https://towardsdatascience.com/what-is-your-next-goal-as-a-data-scientist-3dd81dbe207e?source=collection_archive---------10-----------------------

不管你在数据科学的大千世界中处于什么位置,你可能已经为自己设定了一个(或几个)未来几个月的目标。在 Variable,我们想做的不仅仅是展示我们最喜欢的最新帖子,我们还想在您的旅程中为您提供帮助。所以这一周,选择你自己的冒险。我们相信你会找到至少一个选择,或者,谁知道呢?七个?—满足您当前的需求。

维克多·加西亚在 Unsplash 上拍摄的照片

  • 加深你对深度学习模型的了解穆斯塔法·哈吉耐心地向读者介绍“一个关于细胞复合体的通用统一培训框架,它极大地扩展了人们可以应用深度学习协议的领域。”阅读他的帖子,更好地理解细胞复杂神经网络,以及后者最有用的环境。
  • 了解 NLG 的最新研究(自然语言生成)。在她最近的硕士论文中,米亚·罗姆解释了她的迷人项目,该项目使用上下文单词嵌入来改善基于模板的 NLG 中部署的语言多样性,以实现自动化新闻报道。
  • 思考你的下一步职业发展。离开一份工作很难做到,尤其是当你真正喜欢这个角色和团队的时候。 Rose Day 的最新帖子列出了导致她作为自由数据科学顾问开始新冒险的各种因素,这些因素或大或小,重点讲述了她在这一路上学到的经验教训
  • 做得更好。如果你近期没有跳槽的打算,并不意味着工作上的事情需要停滞不前。在我们最近的“作者聚焦”对话中,Sophia Yang 谈到了寻找支持性导师和发展领域知识的重要性,以及这两者如何帮助她成长为 Anaconda 的高级数据科学家。
  • 发现利用数据做好事情的新方法。我们喜欢了解 TDS 作者从事的令人兴奋的项目——尤其是当他们的工作是为了更大的利益时。 Florian Geiser 关于利用机器学习的力量绘制入侵物种地图的帖子就是一个很好的例子。这是由三部分组成的系列文章的第一部分,所以一定要看看(同样有趣的)后续文章。
  • 退一步想想大题 。围绕人工智能的话题很少像安全问题一样引起如此多的关注和争论:设计兴趣和价值观与人类一致的人工智能的必要性,以防止超级智能的敌意收购。这是一个大而复杂的话题,所以我们刚刚推出了一个八集的课程(基于 Jeremie Harris 在 TDS 播客上发人深省的对话)来指导你进行这个适时的对话。
  • 探索新算法。就在上个月,Mario Michael Krell博士和 Matej Kosec 发表了一篇关于他们开发的打包算法的新论文,现在他们与更广泛的受众分享他们的发现。他们详细描述了他们的工作如何在训练 BERT 时加速自然语言处理,以两倍的速度达到同样的结果。
  • 用一个众所周知的数据集弄脏你的手。 Cathie So 在 MNIST 数据集上重新访问了一个旧的 Kaggle 项目,将它变成了一个完整的教程(包括代码!)关于数据扩充和集成学习,涵盖了 VGG16、ResNet50 和 FG-UNET 等模型。
  • 让你的肌肉得到锻炼。从理论知识到行业洞察力的转变有时很难实现,但通常是令人兴奋的。 Lars Roemheld展示了机器学习在商业环境中的强大力量,使用价格弹性的例子来讨论现实世界的因果推理。
  • 对一项被大肆宣传的技术有了更细致入微的了解。自动驾驶和自动驾驶汽车已经出现在新闻中很多年了,尽管让它们成为主流的过程越来越长。在最近的一期 TDS 播客中,Jeremie Harris 和嘉宾 Peter Gao 讲述了这项新兴技术的历史,而讨论了当前使广泛采用面临挑战的瓶颈。

我们希望您本周在 TDS 上找到了一些有用的东西并学到了一些新东西——感谢您花时间与我们在一起,感谢您通过您的支持使我们的工作成为可能。

直到下一个变量,
TDS 编辑

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

入门

实践教程

深潜

思想和理论

用 PAC 框架定义可学性

原文:https://towardsdatascience.com/what-it-means-for-something-to-be-learnable-pac-learnability-c84de9c061ad?source=collection_archive---------15-----------------------

在机器学习中,我们经常说某些东西是“可学习的”。这到底意味着什么?请继续阅读,寻找答案。

Lyman Hansel Gerona 在 Unsplash 上拍摄的照片

是什么让一个特定的函数或一组函数“可以学习”呢?从表面上看,这似乎是一个简单的问题。一个简单的答案是:如果有某种训练算法可以在训练集上训练并在测试集上实现低错误,那么函数是可学习的。毕竟,这就是绝大多数机器学习算法的工作方式。

这个定义够好了吗?它有一个主要问题,特别是训练集。我们说的是什么训练组合?想象一个非常不幸的训练集,它由一个重复多次的例子组成。任何看到该训练集的机器学习算法都会很好地学习该特定示例,但不会学习其他任何东西。因此,测试集误差(或者用更正式的术语来说,泛化误差)将会很高。我们看到,任何算法的性能都取决于它所训练的样本的质量。

如果一个函数只能在几个特定的训练集上很好地训练,我们就不能说它是可学习的,即使算法在那几个训练集上取得了很大的泛化误差。因此,我们需要在可学习的定义中添加一个警告,即算法必须在许多可能的训练集上工作。更正式的说法是:如果存在一个算法,当该算法在随机选择的训练集上训练时,我们得到良好的泛化误差,那么函数是可学习的。

我们刚刚提出的定义是对可学习性最流行的理论定义的一种非正式表述方式,即 PAC 可学习性。PAC 代表“大概近似正确”。“大概”对应于我们非正式定义的第一部分(高概率,当那个算法在随机选择的训练集上训练的时候),而“近似正确”对应于第二部分(我们得到良好的泛化误差)。

从数学上讲,PAC 可学习性的设置是这样的。我们要学习一个函数 f。用于训练 f 的样本选自分布 d。m 是样本大小。e 是误差函数。δ和ε都是 0 到 1 之间的实数。最后,A 是任意学习算法。我们说 f 是 PAC 可学习的,如果对于任意δ和ε,存在一个学习算法 A,并且样本大小 m 是 1/δ和 1/ε的多项式,使得 P_D(E(A(S)) < ε) > 1-δ。让我们一步一步地了解这意味着什么。

首先,我们有语句 P_D(E(A(S)) < ε) > 1-δ。说白了,这就是说当训练样本 S 按分布 D 抽取时,泛化误差小于ε的概率大于 1-δ。理想情况下,我们希望ε和δ是什么?我们希望泛化误差尽可能小(我们希望ε小),我们也希望泛化误差小的概率尽可能高(我们希望 1-δ大,因此我们希望δ小)。现在我们转到 PAC 学习陈述的第一部分:“对于任何δ和ε,存在一个学习算法 A,并且样本大小 m 是 1/δ和 1/ε中的多项式”。这意味着,对于任意高的概率和低的误差(任意小的δ和ε),我们总是可以找到一个学习算法 A 和一个样本大小 m 来实现这种高概率和低误差。

最后,我们要求 m 是 1/δ和 1/ε中的多项式。这意味着 m 可以表示为 1/δ和 1/ε的多项式函数。一个可能的例子是 m = 2(1/δ) + 3(1/ε) + 4*(1/εδ)。从直觉上讲,m 应该是 1/δ和 1/ε的增函数是有道理的——较小的δ和ε对应于更好的学习,因此实现更好的学习所需的样本量应该增加。最后,我们要求 m 是多项式函数,而不是任何函数。这是为了给样本量 m 设定一个合理的上限,想象一下,如果我们有一个学习算法,它根据这个等式依赖于样本量:m = 10^(1/δ + 1/ε)。对于较小的δ和ε值,比如δ = 0.1,ε = 0.1,m = 10 ⁰.这显然是不合理的,所以我们认为这样的情况是不可学习的。多项式函数确实会增加,但没有这么快。

我们已经讨论了 PAC 可学性的数学定义的每一部分。现在我们试着用直观的方式总结一下。学习基本上有两个重要的目标:低泛化误差,以及实现低泛化误差的高概率。因此,如果某样东西是可以学习的,我们应该能够用一个合理的(多项式)样本量实现这两个目标。这是我们对 PAC 可学性的直观总结——如果我们可以用一个多项式样本大小实现高概率低泛化误差,那么一个函数就是 PAC 可学的。

在这篇文章中,我们首先讨论了是什么让某些东西“可以学习”。这让我们得到了 PAC 可学性的数学形式定义,我们对此进行了深入解释。最后,我们总结了 PAC 可学性的本质。在下一篇文章中,我们将看看 PAC 学习的应用,换句话说,一些如何证明事物是 PAC 可学习的例子。敬请关注,并请留下任何问题/评论。另外,如果你对机器学习概念感兴趣,可以看看我的其他文章。感谢阅读!

建造一个人工智能系统需要什么

原文:https://towardsdatascience.com/what-it-really-takes-to-build-an-ai-system-bd89b935315f?source=collection_archive---------23-----------------------

这比许多人想象的要复杂

夏洛特·梅坐在

今天,我们生活在一个前所未有的开源代码的世界。谷歌和脸书等公司已经将他们的内部人工智能解决方案放在公共领域,这是以前闻所未闻的一步。如今也有大量关于如何快速轻松地构建人工智能解决方案的资源。尽管如此,开发一个真实世界的人工智能应用程序以达到生产部署通常所需的质量和可靠性水平仍然需要大量的工作,并且所需的工作量经常被低估,即使是有经验的开发人员和经理也是如此。有一句话叫做“最后 20%的工作占用了 80%的时间”,这句话在人工智能系统中再合适不过了。

在这篇文章中,我将解释为什么人工智能系统需要如此多的努力来构建,以及为什么购买一个现有的系统通常是更好的选择。最好用一个例子来强调这一点,我将提到我曾经为一家汽车制造商工作过的交通标志识别(TSR)系统。TSR 听起来很简单吧?它也经常被用在“在 5 分钟内构建你自己的分类器”的帖子中。好吧,让我们开始吧!

数据

边缘案例。到处都是边缘案例。

你可能已经猜到了,但是数据通常是时间和金钱的头号消费者。这源于我们对现实世界复杂性的一贯低估,以及即使是最简单的任务也有多少边缘案例。

在我的 TSR 项目中,我们遇到了各种各样的事情。例如,许多高速公路使用 LED 标志,除了看起来与正常标志完全不同之外,很难用相机捕捉到(尝试拍摄计算机屏幕)。为了解决这个问题,我们最终建立了一个模块,它可以覆盖多个帧来捕捉一个标志的完整图像。该系统还必须在各种条件下工作。在晚上,高反射性的标志比周围的环境要亮得多,而当在雾中、雨中或阳光下行驶时,标志几乎看不见。

欧洲的标志经常有一个红色的边界,但在旧的标志上,这个边界几乎可以完全消失。此外,在许多欧洲城市,在标志上贴贴纸也变得很流行。标志也经常被植物或其他路边障碍物遮挡。

具有各种照明条件、贴纸和年龄的交通标志。作者提供的图片

即使标志在良好的条件下完全可见,也很难从所有的噪音中识别出来。例如,欧洲的卡车背面有限速标签,与路边的标志一样,但指示它们可以开多快。在高速公路十字路口,事情也变得棘手,因为从高速公路本身可以完全看到出口限速标志。如果标志被雪覆盖,而雪恰好是大多数交通标志的颜色,那该怎么办?

真实世界的复杂性不仅限于计算机视觉,我最近写了一篇关于真实世界中的正则表达式的补充文章。

好的数据集很难找到

许多模型都是公开发布和开源的,但是用于生产应用的数据集通常被锁起来。一些数据(如信用卡号码)尤其难以获得。事实上,数据护城河是许多人工智能公司的主要竞争优势。

但是,你可能会想,研究人员使用的那些有趣的数据集呢?不幸的是,生产应用程序与研究任务并不完全匹配。即使他们这样做了,研究数据集通常不允许商业使用(如 ImageNet)。在研究数据集中有许多标签错误也是很常见的,这阻碍了高质量模型的开发。一个很好的例子是谷歌的 OpenImages 对象检测数据集。它由 170 万张带有 600 个不同类别标签的图像组成,可用于训练物体检测模型。不幸的是,训练分裂的每个图像的标签不到验证分裂的一半,这意味着大量的例子没有被标记。

TSR 的数据集也是这些问题的牺牲品。免费提供的 TSR 数据集不允许商业使用,包含的例子太少,没有任何实际用途,并且被显著的标记错误所破坏。此外,他们只使用在一个国家的良好光照条件下拍摄的样本。汽车有一个令人讨厌的习惯,那就是进入有不同交通法和不同交通标志设计的新管辖区。

创建自定义数据集既昂贵又耗时

你会说,为什么不创建自己的数据集呢?好吧,让我们来看看。第一步是决定标签/输出并收集数据,确保捕捉到每一个边缘案例。然后,重要的是要确保你有良好的验证和测试集,提供一个可靠的,平衡的性能快照。

接下来是数据卫生和格式化,这可能需要很多时间。把这一步做好非常重要。例如,当这一步做得不正确时,Transformer 模型的性能会出现惊人的大幅下降。

对于大多数任务,数据需要被标记。对于我参与的项目,我们总是构建自己的标签工具或修改的开源工具,因为现有的开箱即用的工具从来都不太适合手头的任务。您还需要数据基础架构来管理、版本化和服务您的新数据集。

接下来,您需要让一些人来注释您的数据集。如果你运气好,可以在组织外部共享数据,并且你的任务不需要太多领域知识,你可以外包注释任务。如果没有,雇佣和管理新的注释者团队需要大量的工作。在这两种情况下,注释者培训也是一项工作,因为大多数任务需要一些领域知识,并且通常比单击图像中的对象更复杂。由于这类职位的人员流动率很高,你可能会发现自己比你想象的要多得多。支持注释者的最好方法之一是在您进入注释和反馈培训周期之前,让他们从阅读注释指南开始。创建注释指南本身是一项大量的工作,因为如果定义不正确,许多标签都是模糊的,通常必须包括一个详尽的示例列表,以及一个活的 FAQ 部分,当您发现需要越来越多的澄清来说明人们对单个概念的各种理解时,必须添加到该部分中。

最后,验证您的流程以确保保持高质量的输出也很重要。注释者还需要一致地标记边缘案例,以使模型工作良好。例如,在 Private AI,我们经常会遇到成千上万个关于什么构成敏感信息的小问题。例如,“我喜欢权力的游戏”可能不会识别某个人,但是“我喜欢大卫·林奇 1984 年的《沙丘》”就缩小了范围。

总之,虽然可以很便宜地找到数据注释器,但是构建数据集需要大量宝贵的开发/管理时间。作为替代,你可以去亚马逊的机械土耳其人这样的服务外包部分过程。然而,根据我的经验,这些服务非常昂贵,而且不能提供高质量的标签。除此之外,在真实的项目中,需求/规范通常会发生变化。这意味着随着内部和外部需求(如数据保护法规)的变化,要对数据进行多次检查。

在过去的 5 年里,建立数据集的过程也变得越来越困难。我参与的 TSR 项目是在 GDPR 之前,现在收集数据时隐私是必须的。

模特的东西

你已经拿到数据了。现在怎么办?

现在我们已经到了这个过程中最明显的部分:构建模型。我们可以使用大量的开源解决方案,但通常需要做大量的工作来修复影响准确性的小错误,考虑大量可能的现实世界输入类型,确保代码在给定新数据和标签的情况下尽可能好地工作,等等。不久前,我编写了自己的 MobileNet V3 实现,因为我所能找到的实现中没有一个与论文中的相匹配——甚至包括 keras-applications 实现。同样,在私人人工智能领域,让最先进的模型以 100%的能力运行是一项艰巨的工作。您还需要确保代码允许商业使用——这通常会淘汰许多研究论文实现。

一个生产系统经常依赖于特定领域技术的组合来提高性能,这需要将一堆不同的代码库集成在一起。最后,所有的东西都应该测试,开源代码通常很少测试。毕竟谁喜欢写测试呢?

部署

因此,您已经获得了数据并构建了模型——现在是将其投入生产的时候了。这是开源代码通常被忽视的另一个领域,尽管在过去的几年里情况已经有了很大的改善。如果您的应用程序要在云中运行,这可能非常简单(只需将您的 Pytorch 模型放入 Docker 容器中),但这需要注意:在云中运行 ML 会让变得非常昂贵。仅仅几个配备 GPU 的实例每年运行起来就要花费数万美元。您通常会在几个不同的区域运行,以减少延迟。

当集成到移动应用或嵌入式系统中时,事情变得更加复杂。在这些情况下,由于硬件碎片(我看着你,Android)或兼容性问题,你通常被迫在 CPU 上运行。我参与的那个 TSR 项目要求所有的代码都按照一个 30 年前的 C 标准编写,而且只能容纳几兆字节!由于围绕安全认证的问题,外部库的使用也被排除。

无论如何,模型优化通常是必要的。麻烦在于,深度学习推理包的就绪程度要低得多,而且比 Tensorflow 或 Pytorch 等训练工具更难使用。最近,我将一个变压器模型转换为英特尔的 OpenVINO 包。除了英特尔的演示例子不再适用于最新版本的 Pytorch,所以我不得不进入 OpenVINO 的源代码,自己做一些修复。

现实世界的应用也不仅仅是运行人工智能模型。通常需要大量的预处理和后处理,所有这些都需要生产化。特别是,应用程序中的集成可能需要移植到应用程序语言(如 C++或 Java)。在 TSR 项目中,需要大量代码来将检测到的标志与导航地图进行匹配。

最后,值得注意的是,很难找到在这方面有专长的人。

正在进行的任务

所以,我们在终点线!您的应用程序现在已经投入生产,正在排序/识别/与小部件对话。现在是持续的维护。

像任何一个软件一样,都会有 bug 和模型预测失败。特别是(尽管您尽了最大努力),在收集数据以填补初始数据收集阶段遗漏的边缘案例时,将有大量的工作要做。我们生活的世界不是一成不变的,因此需要不断地收集数据并通过系统进行处理。一个很好的例子是新冠肺炎。试着问任何 2019 年前的聊天机器人那是什么。

最后,虽然不是绝对必要的,但定期评估和整合最新的研究进展是一个好的做法。

摘要

因此,这就是构建一个生产 ML 应用程序真正需要的东西。正如你所看到的,通常需要一个具有不同专业知识的团队,如数据科学、模型部署来构建一个完整的系统,以及应用领域的专业知识。到 2021 年,对这些技能的需求仍然很大,这意味着建立一个团队可能是一项非常昂贵的工作。让问题变得更加复杂的是员工流动,这可能意味着您的公司刚刚花了大量时间&金钱构建的系统突然变得不可维护,带来了非常现实的业务风险。

因此,希望这能帮助你在获得更多信息的情况下做出“购买还是制造”的决定。这比‘哦,让我们得到 X 型车并打开它’要复杂得多。尽管第三方解决方案只提供了总拥有成本的一小部分,但我亲眼目睹并听到许多公司对每年向亚马逊/微软/谷歌支付数十万美元的云计算费用毫不在意。如果你决定建立自己,确保你有很多应急措施!考虑云计算、招聘和管理等所有成本。

TSR 应用程序呢?我可以说,我对我们的系统运行得如此之好感到非常自豪,但它需要开发人员花很多很多十年的时间来实现。

进一步阅读

https://integrate.ai/resources/the-ai-dilemma-build-vs-buy/

如何成为 Kaggle 上的世界第一

原文:https://towardsdatascience.com/what-it-takes-to-become-a-world-no-1-on-kaggle-f149df44e98c?source=collection_archive---------17-----------------------

行业笔记

与 Guanshuo Xu 对话:数据科学家,Kaggle 竞赛特级大师(排名 1),电气工程博士。

作者图片

在这一系列采访中,我展示了 H2O.ai 的知名数据科学家和 Kaggle 大师的故事,他们分享了他们的旅程、灵感和成就。这些采访背后的意图是激励和鼓励那些想了解成为一名 Kaggle 特级大师需要什么的人。

在这篇文章中,我将分享我与徐冠硕的互动。他是 Kaggle 竞赛特级大师H2O.ai数据科学家。关硕在新泽西理工学院获得了电气&电子工程博士学位,主要研究基于机器学习的图像取证和隐写分析。

关朔是一个多才多艺的人。他的真实世界图像篡改检测和定位方法在 首届 IEEE 图像取证挑战赛 中获得第二名。他的深度神经网络架构设计首次在图像隐写分析中胜过了传统的基于特征的方法。最近,关硕还在 Kaggle 上赢得了 Alaska2 图像隐写分析RSNA STR 肺栓塞检测竞赛,在竞赛级别中获得世界排名第一。

这里还有一个 链接 到关硕在ctds . show的采访,在那里他讨论了自己在 Kaggle 上的成就。

在这次采访中,我们将更多地了解他的学术背景、对 Kaggle 的热情以及他通往冠军头衔的旅程。以下是我和关硕的对话节选:

你有电气工程博士的背景。这是否在某种程度上影响了你将机器学习作为职业的决定?

关硕: 是的,我的博士研究使用机器学习技术解决了像图像篡改检测和隐藏数据检测这样的问题。例如,我的最后一个博士研究项目是将深度神经网络用于图像隐写分析。所以我的教育和研究都和机器学习直接相关。因此,机器学习对我来说是职业的自然选择。

你与 Kaggle 的幽会是如何开始的,是什么让你在你的大师之旅中一直保持动力?

关硕的卡格尔简介

关硕: 从发现 kaggle 开始,我就一直沉迷其中。在 Kaggle 上持续竞争的一些激励因素将是赢得比赛和奖金的综合满足感,学习新技术,拓宽和深化我对机器学习的理解,以及建立令人惊讶的有效模型。

在比赛中成为世界第一感觉如何?这在比赛中会带来额外的压力吗?

截止日期,比赛类别中的前 5 名卡格尔|来源:卡格尔网站

关硕: 老实说,保持排名第一的压力比实现它要大得多。这是因为它需要“更平滑”的性能。有时我不得不同时参加比以前更多的比赛。

你通常如何处理一个难题?

管硕竞赛简介一瞥。来源:https://www.kaggle.com/wowfattie/competitions

关硕: 我的做法根据题型和比赛目标的不同而不同。如今,我经常花几天甚至几周的时间去理解数据和问题,并思考解决方案,例如,猜测私有测试数据的分布、适当的验证方案、详细的建模步骤等。一旦我对整体方法有了大致的了解,我就开始编码和建模。这个过程帮助我获得更多的理解,并在必要时对整体方法进行修正或调整。

你能让我们先睹为快看看你的工具包吗,比如你最喜欢的编程语言、IDE、算法等等

关硕: 就我的工具包来说,我大多用 gedit,Python,Pytorch 进行深度学习。

数据科学领域正在快速发展。你是如何设法跟上所有最新发展的?

我通过 Kaggle、我的同事,甚至仅仅通过谷歌搜索来了解大部分新东西和新技术。就机器学习的新发展而言,要看实际需求。我倾向于过滤掉任何没有即时帮助的东西,也许会关注潜在的令人兴奋的东西。然后我会在需要的时候回来。

给刚刚开始或希望开始数据科学之旅的数据科学有志者一点建议?

一个虚拟的面板,关硕在那里,与各位 H2O.ai Kaggle 特级大师一起。

关硕: 这基本上取决于每个人的背景和兴趣。然而,找到一个合适的平台来学习和发展技能通常会使事情变得容易得多。此外,参加 Kaggle 比赛可以证明是一个额外的有益资源。

取得世界第一的成绩绝非易事,关硕坚持不懈的态度和努力值得所有的荣誉。对他在 Kaggle 上的各种成功解决方案的一瞥展示了他的结构化方法,这是解决问题的一个必不可少的元素。

阅读本系列的其他采访:

原载于 H2O.ai 博客

👉有兴趣看我写的其他文章。这个 回购 包含了我分类写的所有文章。

我从接受编码采访中学到了什么

原文:https://towardsdatascience.com/what-ive-learned-from-giving-coding-interviews-3f91eda9f662?source=collection_archive---------2-----------------------

你如何从别人中脱颖而出并每次都通过

Unsplash 上拍摄的 ThisisEngineering RAEng

有什么比面试时在别人面前现场编码更令人生畏的吗?我认为不是。

我曾经非常害怕现场编码面试。以至于有一段时间,这是我找不到新工作的原因。我不想为了得到一个新的职位而不得不去学习复杂的算法和没有人在日常工作中使用的计算机科学“谜语”。

这感觉不像是对我时间的有效利用,我本可以在现实世界的项目中埋头苦干。

最终,我咬紧牙关,开始申请新的角色,非常清楚编码面试是无法避免的。每天练习 SQL Leetcode 问题肯定会有帮助,但是除了懂语言之外还有更多。

当时,我并没有意识到是什么让一个候选人在编码面试中脱颖而出。现在,我在目前的公司执行这些测试,发现通过测试的候选人和那些没有进入下一轮的候选人之间存在巨大差异。

以下是你如何通过编码面试的方法:

1.提前准备

这看起来很简单,但是你会惊讶有多少人没有复习不同类型的 SQL 函数或正确的 Python 语法。不知道所有事情也没关系(毕竟我们有谷歌),但至少表明你已经尽力准备了。

在你面试的前一周,每晚至少花一个小时解决练习题,并在途中搜索。你可能会觉得寻找答案是失败的,但实际上你只是在帮助自学。

这是更有效地利用你的时间来找到你正在寻找的解决方案,而不是绞尽脑汁去想一些你无论如何都记不住的事情。

除了练习题之外,温习一下在你使用的任何语言中最流行的函数。对于 SQL,一定要知道 COUNT 和 SUM 之间的区别,并且熟悉可以帮助您更有效地解决问题的窗口函数。

使用 Python,学习数组、列表和字典等关键概念。这些几乎总是出现在编码面试中,所以确保你很好地了解它们的功能。

2.阐明假设

很多时候,候选人会对一个问题钻牛角尖,做出某些假设,而不先澄清它们。你不想假设一件事,然后想出整个解决方案,结果却发现那是错误的假设。

我曾经经历过有人对整个问题进行编码,而不是谈论他们正在做的事情,结果却完全偏离了我想要的。

如果你必须计算保留率或转换率,在把问题编码出来之前,和面试官澄清公式。如果你认为某些边缘情况不适用于你的职能,让面试官知道。沟通越多越好!

这会节省你的时间,如果公司是根据你能通过多少个问题来评判你的话,这是很有价值的。

3.谈谈你正在做的事情

重申一遍,说话说话说话!你交流得越多,面试官就越了解你的思维过程。他们越了解你的思维过程,就越明白哪里出了问题。

如果你弄错了问题,但没有表达出你的想法,面试官很容易迷路,认为你根本不知道自己在做什么。

当你在交流中出现问题时,更容易确定错误发生在哪里,并轻松修复它。最终,这会节省你解决难题的时间,防止你陷入困境。

即使对你来说很明显你在编码什么,也要谈论它!你不能总是假设你解决问题的策略是最直接的。解决问题总是有多种方法,你的方法可能不是别人的方法。

4.如果你不确定,就问问题

不要害怕提问!不管是谁在测试你,都要意识到谷歌是工程师工作不可或缺的一部分。我们不可能记住每一个存在的语法、功能和公式。如果你知道你想用什么功能,但是忘记了确切的名字,问一下。

例如,在我的一次 Python 访谈中,我需要使用将字符串全部小写的函数。忘了是 is_lowercase()还是 lowercase(),就问了面试官。他也不确定,很快就搜索到合适的功能给我用。

如果我没有问的话,我可能已经挣扎了十分钟,为这么简单的东西尝试不同的名字。面试官不是在测试你是否能记住一门语言的每个细节。他们想了解你是如何思考和解决难题的。

不要为像记住确切的函数名这样的小事烦恼。如果你不是 100%确定,就问。

结论

我们给自己施加了太多的压力来编写采访。不要害怕他们。把它们看作是拓展你思维方式和学习新事物的挑战。如果你沟通清楚,那么即使你没有把每个问题都做对,你也有很大的机会通过。

当我不能以最有效的方式解决整个问题时,我震惊地听说我通过了某些 Python 面试。然而,我实践了所有这四个技巧,这本身就产生了巨大的影响。雇主希望雇佣具有良好批判性思维能力和沟通他们遇到的问题的能力的人。

如果你在准备 SQL 面试时需要帮助,请务必查看应对每一个 SQL 面试问题的顶级技巧如何使用 SQL 窗口函数

作为数据科学家,我在职业生涯中学到了什么

原文:https://towardsdatascience.com/what-ive-learned-in-my-career-as-a-data-scientist-352f15e5be6c?source=collection_archive---------23-----------------------

如果时光可以倒流,我会给自己什么职业建议?我做对了什么,哪里做错了?

马特·邓肯在 Unsplash 上的照片

近两年来,我一直在积极地用媒介写作,在这个过程中发生了一些意想不到的事情。

不时有同学向我请教。在回答时,我总是会回顾一下我在数据科学领域的职业生涯。

我学到了什么?我会选择不同的道路吗?

这篇文章是我职业生涯中总结的经验教训。

八年前…

乔恩·泰森在 Unsplash 上的照片

我的职业生涯始于 2013 年,当时我在一家研究机构获得了一份数据科学家实习——梦想成真。我在研究分布式机器学习算法,这在当时是一个热门领域。那是 Hadoop 的时代。

那时候事情很简单,大数据是唯一的时髦词汇。然后是深度学习和 AI。

我对那段时间有着最美好的回忆——与尖端技术一起工作,宽松的期限,优秀的团队……我可以一直这样下去。

只有一个问题——工资!

实习一年半后,我被邀请攻读数据科学的博士学位,重点是自然语言处理。虽然我很荣幸,但我拒绝了这个邀请,因为我对 NLP 不感兴趣,我不会花至少 4 年的时间来研究它。

其他原因是我破产了,而且我也不再年轻了——26 岁,没有任何职业经验。

从事数据科学工作不需要博士学位。

回想起来,我从来没有后悔过我拒绝攻读博士学位的决定,我必须从学术界跳到工业界。

巨大的飞跃

儿童马戏团Unsplash 上拍摄的照片

我永远不会忘记那一天。一个小创业公司的 CTO 邀请我去面试。我收到邀请的那天和面试本身是同一天。

我对自己说,我已经失去了什么,我去了。我们就我的经历进行了一次愉快的聊天,我将如何解决某些事情——不要太技术性,更多的是概念上的。最后,他问我在学术界的薪水是多少,并给了我 3 倍的报酬。

我会失去什么?

在去面试之前,我不打算接受这份工作。在学术界工作感觉很棒,但后来我想到了薪水和那些配有新 MacBooks 的舒适办公室……我接受了这份工作。没有回头路了。

创业公司

Unsplash 上由 Austin Distel 拍摄的照片

这家初创公司聘请我制作一个可以处理大数据的推荐系统。对于来自以研究为导向的环境的我来说,这是一个相当大的挑战。

我有在受控环境中构建概念的经验,而不是生产就绪系统。那些日子,我有几个不眠之夜和工作假期。

当时,我认为我的项目是最重要的事情。我太沉迷于此,没有看到更大的画面。我们将如何将它集成到生产中?有很多次,当我们和团队一起吃午饭时,我只想着我需要修复的代码和错误。

我学到的重要一课是建立关系比你正在做的项目更重要。我们仍然和我在初创公司遇到的同事一起出去玩,但是没有人谈论我们当时正在做的项目。

建立关系比你正在做的项目更重要

当我设法建立推荐系统时,我后来发现好的推荐并不是最重要的事情。这都是营销!

当时机器学习术语正在疯狂地销售服务。

和许多创业公司一样,这家公司也不例外。很快资金枯竭,我又去找工作。

梦想远大

兰迪·塔兰皮在 Unsplash 上的照片

当启动资金枯竭的时候,我存了足够的钱,可以富裕一年(难怪资金枯竭😂).

我开始找新工作的同一天,我听说我们没有下个月的资金。

作为一名开发人员,代码是一种通用语言,我已经有一两年没有想过要搬到另一个国家了。我还没想过把我的副业货币化。我有足够的钱,我年轻,我有经验,但我没有想过。

不要太沉迷于你当地的环境

回想起来,我害怕不确定性。这让我想起了两句名言:

事情从来没有看起来那么糟或那么好。

不要让高点太高,也不要让低点太低

前进的道路

马特·邓肯在 Unsplash 上的照片

在初创公司,我们使用先进的技术,因此找到新工作并不困难。我甚至收到了多家公司的邀请。最困难的事情是决定接受哪个提议。

如果你没有经验,处于类似的情况,我有简单的建议给你:

当你有多个工作机会时,接受有更好导师的那个

在你走之前

- [Binary logistic regression overview](https://dataanalysis.substack.com/p/supervised-machine-learning-binary-logistic-regression-overview-47282b9c608b)- [50% Off All AI Nanodegree Programs!](https://imp.i115008.net/c/2402645/998478/11298) [Course]- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)

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

Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的消息。

照片由Courtney hedgeUnsplash 拍摄

你是哪种数据科学学习者?

原文:https://towardsdatascience.com/what-kind-of-data-science-learner-are-you-b7079d29b95b?source=collection_archive---------16-----------------------

变量

我们每周精选的必读编辑精选和原创特写

与 TDS 社区的成员聊天总是令人振奋的,但在一个特定的方面尤其如此:认识到人们的学习习惯和风格是多么广泛。这当然是有道理的。人们从不同的专业、学术和文化背景来研究数据科学,对一些人有用的东西对其他人可能不一定有用。

例如,在本周的《作者聚焦》中,多产撰稿人 Khuyen Tran 分享了她消化复杂话题的可靠方法:教授它们。只有当 Khuyen 将概念转化为其他人可以理解和使用的东西时,他们才会为她点赞。阅读我们与 Khuyen 的 Q & A,它涵盖了很多领域——包括公开写作对吸引潜在雇主的好处以及她对人工智能伦理的想法。

Alexander GamanyukUnsplash 上拍摄

对于每一个通过教学学习的数据科学家,至少有一个(可能更多?)他们喜欢在回到现实世界并找到理论的实际用途之前一头扎进理论的深处。如果这听起来像你,我们这个星期为你准备了相当多的款待。从来自 Michael Bronstein 及其合著者的最新研究开始,该研究将几何深度学习作为一个具有双重目标的框架进行了介绍:

它有两个目的:第一,提供一个通用的数学框架来推导最成功的神经网络结构,第二,给出一个建设性的程序来以有原则的方式构建未来的结构。

还想读一本崇高的、思辨的书吗? Gadi Singer 写了一篇引人入胜的分析文章,分析了对认知人工智能的承诺,以及“将人工智能与符号推理和深度知识相结合”将如何带来人工智能的下一个阶段。如果连的那篇还不够,你可以随时求助于罗伯特·兰格,他又回来了,带来了另一轮他备受期待的每月推荐研究论文精选

如果你更像是一个混合型学习者——喜欢温和、全面地介绍一个主题,但也喜欢动手操作的元素——我们听你的。外面有很多你们这样的人!选择你的冒险:

如果您对学习数据科学有新的看法,或者在学习过程中积累了一些难忘的经历(好的坏的,请考虑与我们的社区分享这些经历。你会惊讶有多少人会觉得你的故事有帮助。(如果你刚刚迈出第一步,试试我们自己的指南。它是免费的,基于电子邮件。)

一如既往地感谢所有阅读、贡献和参与我们发布的帖子的人,特别感谢所有最近与朋友和同事分享 TDS 故事的人。这对我们来说意义重大。

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

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

入门指南

实践教程

深潜

思想和理论

数据科学产生什么样的知识?

原文:https://towardsdatascience.com/what-kind-of-knowledge-does-data-science-produce-331f26767b83?source=collection_archive---------21-----------------------

探索数据科学

从日复一日的模型训练和数据处理的嗡嗡声中退一步,黄家仪在她的 2019 帖子中提出了一些非常重要的问题,这些问题涉及科学家探索并产生的知识数据类型。从预测现实世界结果的模型和试图解释起作用的因果力量的模型之间长期酝酿的紧张关系开始,菲比认为我们可能根本不在非此即彼的领域:“预测和因果模型服务于非常不同的目的,需要非常不同的数据和统计建模过程,通常我们需要两者都做。”

关于你的职业网络,LinkedIn 数据分析能教会你什么

原文:https://towardsdatascience.com/what-linkedin-data-analysis-can-teach-you-about-your-professional-network-d22a775131a4?source=collection_archive---------65-----------------------

掌控你的职业关系

图片由 Jannis Klemm 在 Unsplash 上提供

今年年初,我对自己的社交网络活动进行了评估。我的清单很短——我用的是脸书、Instagram 和 LinkedIn。我有脸书做朋友。我用 Instagram 展示我的画,我有 LinkedIn,因为它看起来“很好”。我不是网络的活跃用户。当一些同事让我连接时,我就连接了。就这样。

我喜欢 LinkedIn 的是它的学习网站。我发现了一些神奇的课程,它们帮助我提高了管理技能,并激励我成长。在 LinkedIn 上也可以找到培训者和演讲者。我开始关注一些人,令我惊讶的是,我和他们进行了很好的讨论。他们让我的 LinkedIn 体验变得很有价值。我开始想知道我的关系网中有谁。因此,我跳上去分析它。

1.编码阶段

LinkedIn 允许你导出你的关系,这是分析的开始。手册在网站帮助上。

LinkedIn 上导出连接

您可以在 excel 中处理该列表。我所做的是我对三件事感兴趣:

我怎么认识这个人?我们为什么要联系?

我们什么时候联系上的?

此人有多少关注者/联系人?

这有点像手工劳动。你的联系越少,你完成的越快。那时,我只有大约 400 个联系人。我花了不超过一个半小时来编码它们。糟糕的是要找出你网络中每个人的联系/追随者的数量。点击量很大。数据表开始看起来像这样:

Ivona Fikejzlova 提供

请注意,对您的连接进行分类非常重要。理想情况下,为了便于分析,您只有几个桶。但是,只要对你有意义,你就可以创造很多。我的是:

  • 家人/朋友
  • 人力资源(猎头)
  • 兴趣
  • 随意
  • 学校
  • 工作

2.分析

编码和数据清理是 LinkedIn 分析中最耗时的部分。现在,让我们享受数据带来的乐趣。对于基本的洞察,做一个数据透视表就够了。如果您喜欢仪表板,也可以很容易地创建一个带有干净数据集的仪表板。

Ivona Fikejzlova 提供

通过合并所有关于我的联系、我的联系的联系和关注者(与你没有联系,但关注你的内容的人)数量的数据,我震惊地看到,我的小小个人资料为我提供了 190 万人的网络。我怎么也猜不到!

然后,我对我的类别的表现感到好奇。如上所述,我有家人/朋友,人力资源,兴趣,随机,学校和工作。最终的表格如下所示:

Ivona Fikejzlova 提供

很明显,我的工作关系构成了我的大部分人脉。但有趣的是,他们并没有创造出我大部分的潜在联系。我的 289 个同事建立了 294221 个不错的连接。另一方面,我因为兴趣而联系的人,例如教练、TedTalkers 和 LinkedIn 培训师,产生了惊人的 971,977 个联系人和追随者。虽然我只和其中的 29 个成为朋友,但他们为我打开了一个全新的世界。

我还调查了哪份工作给了我最多的联系。在那里,我注意到了公司规模和时间的影响。

Ivona Fikejzlova 提供

前两家公司是中型企业。我在一个小团队中工作,与其他部门没有太多的互动。第三家公司足够大,但我只在那里工作了六个月,所以也没有太多的接触。第四家公司是国际公司。在那里工作了四年后,我被提升到了管理职位。由于这一点,我有机会与更多的人一起工作,这给我带来了更多的联系,特别是当我在 2017 年至 2018 年期间被任命为管理层时。

说到网络的规模。不要被连接数迷惑了。我很确定你可能有很多不活跃的 LinkedIn 用户。这些‘死用户’有一点网络,只有几个联系人。假设不到 100。通过快速浏览数据,我发现我的网络中有 10%是死用户。这很令人失望。我意识到我的关系网比我之前想象的要小。

你可以用你的基础数据回答很多问题。例如:

你的人际网络何时增长最快?

你的网络中有多少活跃用户?你的内容和推广的潜在受众是什么?

你的社团成员身份会给你带来人脉吗?

3.现在该怎么办

LinkedIn 就是其中一种。认识来自世界各地的人有很大的潜力。你可以在网站上寻找商机,也可以了解市场趋势。

Ivona Fikejzlova 提供

如果我可以说,不要对你的社交网络的规模过于兴奋,除非你真的有有意义的联系。

在上图中,你可以看到我的网络是什么样子。我的工作关系占了大多数,但它只占潜在关系网的 15%。而基于我职业兴趣的灵感联系最有潜力。当然,你可以辩称,如果你设法与商界的大人物建立联系,你的人际网络就会大幅提升。然而,这正是为什么分析你的网络组合很重要的原因。最终,在你的人际网络中拥有成功的商业人士可能比拥有不活跃的同事对你更有益。

你需要决定你为什么使用 LinkedIn。是因为你想:

  • 与同事保持联系?
  • 建立自己的企业?还是建立你的信誉和个人品牌?
  • 获得灵感?
  • 与人力资源猎头保持联系?

然后你的混合应该遵循你的目标。LinkedIn 网络有如此大的潜力,但是你不能坐以待毙。你可以有意识地建立你的人际网络,让它为你服务。

对我来说,这是灵感的巨大源泉。根据我的分析,我希望我的“兴趣”类别在 2021 年增长最多。这些人传递思想,挑战界限。他们拥有一个由其他鼓舞人心的人组成的独特网络,否则我就没有机会与他们见面。同时,通过张贴我自己的内容,我可以从其他人那里得到反馈,这不仅提高了我的帖子的可见性,还增加了我的知识。

我决定的第二件事是清理我的网络。降低我的网络是令人心碎的,但我想真实地生活。我的目标是摆脱“死亡”和莫名其妙的可疑联系人。你知道这些随机连接吗?有些人想联系,但是你们没有共同点,你们也从来没有一起工作过。你可能会接受任何方式,因为你受宠若惊,或者你不在乎。但最有可能的是,这种联系对你没有任何帮助。停止为了连接而连接。

综上所述,我的梦想领英网在下面。重点是励志用户,其次是活跃用户。最重要的是,我希望与“死亡用户”断开连接。这个网络是我的长期目标,但我打算在 2021 年直接开始工作。

Ivona Fikejzlova 提供

了解你当前的人际网络和你想要的是很重要的。这样,你可以继续你的事业、目标或自由职业。了解你的观众是一句口头禅。所以,让我们了解你的 LinkedIn 数据,建立有意义的网络。

4。保持更新

如果你决定努力分析你的人际网络,只要你有了新的联系人或追随者,就要更新数据。你从中获得了有价值的见解。偶尔,你可以更新你的数据仪表板,看看你的目标是什么。简单又有用。

分析的最终清单

  1. LinkedIn 帐户
  2. 下载您的网络数据
  3. 创建类别
  4. 代码数据
  5. 分析数据/创建交互式仪表板
  6. 制定目标
  7. 保持数据更新

主流人工智能在(不)做什么

原文:https://towardsdatascience.com/what-mainstream-ai-is-not-doing-9a2f7236a4f7?source=collection_archive---------24-----------------------

变更数据

疫情加速了人工智能的采用——并使大型技术变得更加富有——但人工智能的采用发生在需要它的地方了吗?

在大学期间涉足机器学习之后,我得到了一份业务分析师的工作,为印度一家领先的人工智能服务提供商的公共部门和教育业务提供服务。我在疫情找到了这份工作——我必须说,我认为自己很幸运——并完全在网上担任了这个角色,我一直站在组织从现实世界向数字世界过渡的最前沿。我这么说不仅仅是为了我工作的公司,也是为了无数的政府机构和教育机构,他们与我们接触,寻求进行数字化转型,以增强他们在当前形势下以及未来的流程。

我真诚地相信,过去的一年半对整个 it 行业和人工智能行业来说都是一种祝福——因为人工智能现在在 IT 领域几乎无处不在——正如大型科技公司通过双管齐下的战略实现的令人难以置信的增长所证明的那样,他们自己进行数字化转型(从而削减支出)并为其他行业提供同样的服务(并产生巨大的收入)。

主流人工智能需要弥合商业和社交应用之间的差距。(照片由英迪拉·乔科尔达Unsplash 拍摄)

增加人工智能的采用

如前所述,大型科技公司虽然最初担心“新常态”的影响,但很快就意识到了它的潜力,并充分利用了这一点。一切都在增长——从数字广告成为接触消费者的主要渠道带来的广告收入、在线购物、一切都上线后笔记本电脑和手机的销售、社交媒体参与到随着企业数字化而增加的云消费。不经意间,这种被迫转向在线的趋势以及对错过机会的担忧,成为了利益相关者的催化剂,他们不仅采用传统的数字化转型,还加入了云、人工智能和区块链等更新技术的行列。

根据毕马威的一项调查,与去年相比,金融科技领域至少一项职能的人工智能采用率增加了 37%,科技领域增加了 20%,零售领域增加了 29%。再加上 2020 年人工智能看到的679 亿美元——包括微软对开放人工智能的 10 亿美元投资,之前是一个非营利组织——以及根据麦肯锡的报告绘制的这笔钱花在用例上的代表性地图。2020 年,人工智能领域约 50%的用例与自然语言处理有关,20%与计算机视觉有关,涉及 IT、快速消费品、医疗保健、金融科技、法律和汽车等行业。与这一主流相比,谷歌通过他们的 AI for Social Good 计划只提供了 2500 万美元用于改善社会的人工智能应用研究。

这种对数字转型的新推动、采用心态的改变以及涌入该领域的大量资金(这次甚至来自公共部门)是人工智能社区利用和加强努力解决人工智能面临的问题并为社会利益构建应用程序的绝佳机会,尤其是在这些时候。不幸的是,这样的例子少之又少。

需要人工智能的用例(基于联合国可持续发展目标)

像国际电信联盟(ITU)和麦肯锡(T2)这样的国际组织使用 2015 年通过的联合国可持续发展目标(T5)作为当今世界主要问题的指导方针,并试图绘制如何将人工智能用于这些问题。偶然地,发表在《自然》上的一篇研究论文估计,17 个可持续发展目标中的 79%可以通过某种方式使用人工智能来实现。让我们看看 17 个可持续发展目标,以及人工智能如何实现联合国提出的这些目标:

  • 没有贫困:为了实现联合国到 2030 年消除极端贫困的目标,人工智能可用于分析卫星数据或移动使用数据,并检测贫困地区,然后制定补充政策来帮助这些地区的居民。利用人工智能进行更好的天气预测可以帮助将这些人疏散到安全的地方。在经济上,为了弥合贫富差距,人工智能可以为贫困线以下的人提供贷款信用评级(假设基础数据没有偏差)
  • 零饥饿:间接有助于这一目标的辅助人工智能应用程序已经在农业领域获得了牵引力,而 last mile routing solutions则是为了在疫情期间提供食物而开发的。农业领域的例子包括使用计算机视觉检测作物疾病,分析和模拟历史数据以支持农民决策,收成预测,天气预测和支持物联网的人工智能农业设备。然而,如果最终产品不能送到第三世界国家的贫困农民手中,农业人工智能研究将毫无价值。
  • 良好的健康和福祉:这一目标正好落在医疗保健领域,该领域已经获得了抗击疫情的关注和资金。英特尔研究显示,在疫情发布后,采用或希望采用人工智能的医疗保健领导者增加了 39 个百分点。医疗保健领域的人工智能用例包括医院中的人工智能和数据支持系统,药物发现的自动化,结核病和癌症检测,提高艾滋病意识,减少交通事故的解决方案(cue 自动驾驶汽车),自杀预防和减少社交媒体上令人沮丧的帖子(最后一个是脸书)。然而,这些解决方案中有许多是不道德的,并且由于数据集不能代表真实世界以及生命受到威胁的危险,目前这是一场大赌博。
  • 素质教育:由于疫情,另一个领域的人工智能采用量大幅增加。从个人经验来看,我可以说,人工智能正越来越多地被用于监控学生的注意力或进行情绪监控,以确定儿童学习某些科目的舒适程度,在考试结果出来之前识别出哪些学生在挣扎。人们正在尝试使用人工智能来提供个性化和适应性教学,特别是在在线学习平台上。然而,教育中的 AI 要提供真正个性化的教育还有很长的路要走。

大约在疫情期间,教育和医疗保健领域的人工智能投资有所增加(图片来自斯坦福人工智能指数,2021 年根据 Attribution-NoDerivatives 4.0 国际许可)

  • 性别平等:大赦国际很少直接参与实现性别平等,主要是因为这是一个社会文化问题。也就是说,人工智能社区需要确保它不会通过确保底层数据集和部署的系统没有固有的偏见来促进性别偏见。
  • 清洁水和卫生设施:与此目标相关的唯一经过适当研究的用例是使用 AI 来预测和建议提高水处理厂水质的步骤。潜在的使用案例包括集水区管理和水管/水流管理
  • 负担得起的清洁能源:同样,这是一个不常研究的领域,大多数努力都是针对人工智能如何优化能源生产和消费,以及更好地预测需求。需要对人工智能如何帮助建立智能电网进行更多的研究。
  • 体面工作和经济增长:这又是一个社会文化问题,而非技术问题。然而,一般来说,人工智能产业的崛起及其在全球经济中的份额可以刺激经济增长,但有取代低技能工人的风险,这就是为什么人工智能产业需要有自我意识,并平衡它给社会和环境带来的利弊。此外,随着人工智能提供的自动化,生产率也将提高。
  • 工业、创新和基础设施:尽管对人工智能在基础设施中的许多应用的研究正在进行中,而且基本概念也很合理,但该领域的采用率并不高。在空气和水质管理、能源管理、资产和施工管理、预测性维护、提高生产力、自动化和智能城市和电网等用例中,需要推动采用。
  • 减少不平等:这个社会问题可以通过使用人工智能来间接部分解决。对于财务平等,可以开发预测信用评级的应用程序,为低收入群体提供贷款,并通过数据帮助他们了解个人投资世界。对于文化、种族和种姓平等,我认为,如果所有人工智能应用都能设法消除数据本身的潜在偏见,而不是提出旨在促进平等的具体应用,那将更加有益。一个有代表性的例子是调整推荐引擎,使其不提倡仇恨言论。在更大的范围内,可以分析与特定社区的人口统计和社会模式相关的数据,以推断该社区的包容性。
  • 可持续发展的城市和社区:关于这个目标的许多要点已经在上面讨论过了。大规模人工智能可以通过旨在改善交通基础设施和减少事故的解决方案,水和能源管理,预测地震,野火和石油泄漏的蔓延,生态分析,空气质量分析等,帮助实现可持续和智能的城市。同样,这里的挑战是大规模采用和政策支持。
  • 负责任的消费和生产:人工智能系统可以利用历史数据和模式来优化制造、能源等各个领域的生产和消费计划。而人工智能带来的自动化将提高生产力。从政策角度来看,政府采购服务和商品的过程在许多地方非常缓慢和腐败,这要感谢人工智能系统自动过滤掉不合格的供应商。
  • 气候行动:在气候行动方面,人工智能有利有弊,开发和运行人工智能模型的巨大能源需求间接增加了空气中的二氧化碳,而自动化能源管理、气候建模和预测自然灾害的可能性是其积极的一面。
  • 水下生物:研究表明,通过利用人工智能实现石油泄漏的检测和缓解规划自动化以及集水区域管理,可以保护海洋和海洋生物。卫星数据分析可用于生态预测(包括珊瑚漂白和藻类大量繁殖等事件)、跟踪和监管拖网渔船的活动。
  • 陆地上的生命:研究表明,人工智能可以用来通过足迹识别森林动物,这可以在野生动物保护工作中发挥非侵入性的作用。利用人工智能的遥感可用于评估、预测和绘制森林结构特征,这些特征可作为森林状况的指标,并有助于保护森林。神经网络和面向目标的技术可用于更好地对植被类型进行分类,从而探测荒漠化和干旱。
  • 和平、正义和强大的机构:人工智能可用于监控系统和社交媒体,以检测、通知和过滤暴力人员和/或内容、欺凌和儿童色情制品。面部识别软件也可以用于预测性警务。然而,这是一个所需技术已经就绪的领域,但由于伦理、隐私和歧视问题,其采用仍有争议。
  • 目标伙伴关系:联合国可持续发展目标清单中的这一特定部分列出了实现其他 16 个目标的合作目标,因此与技术无关。因此,我们将跳过这一步。

科技和政府能如何控制人工智能

在任何部门或行业进行任何类型的研究都需要资金。研究将集中在资金的地方。记住这一点,让我们看看大型技术和国际政府如何有潜力集中人工智能研究,并确定该行业如何向前发展。

企业参与跨会议的学术研究(图片 via 斯坦福人工智能指数,2021 在 Attribution-NoDerivatives 4.0 国际许可下)

Big Tech 收购人工智能初创公司(图片来自斯坦福人工智能指数,2021 根据 Attribution-NoDerivatives 4.0 国际许可)

从 2012 年,当 Big Tech 在机器学习技术上取得突破后开始进入人工智能领域到 2019 年,在举行的最大的机器学习会议 NeurIPS 上,客流量增长了 550%。大的技术代表参加它的目的是吸引博士进入他们的公司。这些公司还聘请终身教授来帮助他们的研究。大科技的人才争夺战不仅局限于学术界,近年来甚至扩展到了初创公司,正如本文所展示的。

下面的两张图表强化了这样一种信念,即企业对学术人工智能研究有着浓厚的兴趣,尤其是在美国。企业在同行评议研究中的地位在期刊上发表或在会议上展示的研究论文中得到了复制。

各国对人工智能的私人投资。美国最高(图片 via 斯坦福 AI 指数,2021 在 Attribution-NoDerivatives 4.0 国际许可下)

美国同行评议的人工智能出版物。企业参与度最高(图片来自斯坦福人工智能指数,2021 年在无归属衍生工具 4.0 国际许可下)

中国同行评议的人工智能出版物。政府的参与度最高(图片来自斯坦福人工智能指数,2021 在无归属衍生 4.0 国际许可下)

从上面的图表中可以立即看出:美国、中国和欧盟是人工智能研究的领导者。在美国,企业比政府或学术界有更大的利益。然而,在中国,政府——而不是企业——是集中人工智能的一方,如果我们想到中国的政治结构,这是显而易见的。下图进一步证实了这一点,因为我们可以看到,中国发表论文的企业与学术合作比美国少得多(尽管中国发表了大量论文)。

人工智能出版物中的学术-企业伙伴关系。美国遥遥领先于其他国家(图片来源于斯坦福人工智能指数,2021 在无归属衍生工具 4.0 国际许可下)

中国是一个政府高度集中人工智能的例子。尽管如此,政府与人工智能有利害关系的原因是,它们有权力推出关于在人工智能应用中正确使用公共和私人可用数据的立法(例子:欧盟的 GDPR)。特别是对于社会领域的项目,更不用说政府拥有更大控制权的大规模基础设施、智能城市、水管理等部门,政府可以宣布政策、开发计划,并为利用人工智能实现项目目标的大规模项目提供范围和资金。在这种程度上, ITU 的研究显示,截至 2020 年,131 个国家已经通过或正在通过数据政策,其中 18 个国家已经制定了具体的人工智能政策。

行业面临的挑战

然而,人工智能行业的发展是企业和/或政府支持的结果,需要首先解决的事情是确保它不是“两步走,一步退”,这是行业和社区目前面临的问题。

  • 人工智能的可解释性:机器学习模型——尤其是神经网络——经常表现得像一个黑箱,人们通常不清楚它们是如何得出结论的。有时,最好有一个提供可回溯结果的模型,以便能够在需要时修改模型中的适当参数。这一方面在医疗保健行业获得了越来越多的关注,因为涉及到利害关系,最近在面部识别系统中,因为错误的输出导致了灾难性的结果
  • 数据不可用:在许多用例中,收集正确的数据并创建可操作的数据集是一项耗时的任务。这是因为首先,必须弄清楚从哪里收集数据的途径是什么;其次,从不同的来源收集这些数据需要时间;第三,组织必须修改收集的数据,以遵守数据和隐私法规,同时仍然保持数据的可操作性。然而,对于学术界来说,通过第一阶段本身是很困难的,因为大型科技公司和政府有许多数据(从他们的各种服务中收集的),这些数据是保密的或分类的,视情况而定。
  • 有偏见和被歪曲的数据集:组织收集的数据和收集数据的方法代表了数据收集地的真实情况。这导致文化或社会偏见进入数据集,消除偏见成为组织的责任。更进一步,组织也有责任确保应用程序部署在一个与准备数据集的地方具有相同代表性的地方,以确保不会发生争议失败部署。对于面部识别系统和大型语言模型来说,模型中的偏见是一个真正的威胁。
  • 可推广性: OpenAI 是人工智能行业寻求人工通用智能的启蒙者——一个可以做人类所能做的一切的单一人工智能。目前,这是一个遥远的可能性,因此对于上面讨论的每一个用例,从数据收集到模型部署的整个过程都将专门针对该用例重新进行。这似乎是浪费时间和精力,事实也的确如此。然而,概括本身并不像它带给我们的下一点那样糟糕。
  • 能量消耗: OpenAI 本身,在自然语言处理中追求可推广性,不断超越自己,建立更大的神经语言模型(提示 GPT-3)。训练(甚至一次)和部署这些模型所需的能量是非常非常巨大的——如此之大,以至于它让你想到,如果当前构建越来越大的模型的趋势继续下去,那么人工智能为环境带来的任何优势实际上都将无关紧要。此外,GPT 3 号甚至不懂人类语言;它只是一个操纵它的大师。
  • 企业与学术界之间的差距:企业与学术资源和研究之间的差距有目共睹。这就是为什么人工智能社区需要重新关注自己,建立更多真正有用的应用程序,而不考虑公司或政府的利益。

结论

我们可以清楚地看到,在疫情期间,人工智能在医疗保健和教育等领域的应用大幅增加。其他部门已经开展了研究,但缺乏大规模的可见性、兴趣、投资、实施和采用。这可以部分归因于人工智能行业面临的问题,主要涉及数据的可用性以及大技术和政府政策对行业的控制。话虽如此,大型技术和政府对人工智能的兴趣是一件好事,因为它通过持续的资金支持防止技术成为过去。唯一需要的是该行业所有利益相关者的焦点转移。

然而,不要害怕,因为并不是所有的希望都落空了!人工智能显然具有帮助社会的技术能力,这可以从能力到社会目标的映射得到证明。正如这篇文章的标题所暗示的,人工智能正被用于许多社会公益事业;它还没有达到主流兴趣和投资的临界点。人民智库组织积极参与旨在建设更美好社会的应用研发。希望他们得到他们应得的支持!

我很乐意在 Linkedin 上联系!

参考

  1. 纽约时报:“一场完美的正面风暴”:为大型科技公司疯狂投资
  2. 福布斯:疫情如何加速云的采用
  3. 2021 年斯坦福人工智能指数
  4. 麦肯锡:2020 年人工智能的状态
  5. 国际电信联盟:人工智能造福人类
  6. 联合国可持续发展目标
  7. 麦肯锡:应用人工智能造福社会
  8. 自然:人工智能在实现可持续发展目标中的作用
  9. 用人工智能实现联合国可持续发展目标的 17 种方式
  10. 连线:大型科技公司资助人工智能研究的阴暗面

是什么让数据分析师变得伟大?

原文:https://towardsdatascience.com/what-makes-a-data-analyst-great-cf9ebee80c46?source=collection_archive---------28-----------------------

提出正确的问题让科学去解决的问题。

前言:在这个故事中,我们使用 Kaggle 和 Kaggle 笔记本作为数据分析师成就的代表。所以,你参加了一场卡格尔比赛。首先,你要仔细阅读问题陈述、条款和条件、目标和提交评估。你摆弄了一下数据集,然后转向笔记本部分。Kaggle 有自己的方式来展示最好的笔记本,但究竟是什么让 Kaggle 笔记本变得伟大?让你前进的必要条件是什么?除了 Kaggle 之外,你的工作目标应该是什么?

一些笔记本演示了如何加载数据,解释各列的含义,并在已有内容的基础上设计新功能。一些笔记本探索数据,创建叙述,形成假设,并影响决策。最后,还有实施基准模型的笔记本电脑,可用于评估其他解决方案。

但是是什么让笔记本变得优秀呢?不要误会我;Kaggle 竞赛中的每台笔记本都有其用途。但在这里,我们寻求帮助我们成长为更好的数据科学家或机器学习实践者的核心故事。这些笔记本并不是展示一个想法,而是帮助我们形成自己的观点。

我认为判断的标准只有一个:问正确的问题。

在这个故事中,我们使用 Kaggle 和 Kaggle 笔记本作为代理,来发现是什么让数据分析师变得伟大。因为无论是什么让我们决策者在一场激烈的竞争中实施了伟大的解决方案,这都是伟大的分析师的工作。

Learning Rate 是为那些对 AI 和 MLOps 世界好奇的人准备的时事通讯。你会在每周五收到我关于最新人工智能新闻和文章的更新和想法。在这里订阅!

偏见和障碍

这很容易让人一头扎进 Kaggle 笔记本,它提供了一个解决方案、一个现成的基线模型和一个固定的提交。然而,能够很快得到答案既诱人又危险。

彭菲菲Unsplash 上拍照

走捷径是一个陷阱。它迫使我们做出与笔记本作者相同的假设,并接受相同的偏见。从这一点开始,我们的创造力将受到影响,我们将很快发现自己在围绕相同的想法和概念打转。

最终,我们能够重新考虑和改变的问题的唯一参数是次要的东西,例如神经网络的层数或学习速率的值。这种方法只能让我们到此为止;在最好的情况下,我们的解决方案将在排行榜上领先几个名次。

在我看来,窥视现成的解决方案不会让我们变得更好。它不让我们建立我们的理解,形成我们的假设,编译我们的代码,甚至悲惨地失败。这就是它的全部;令人满意和充实的学习过程。

肥料和催化剂

那么,我们是否应该开始自己的工作,在一个筒仓里,甚至在看一看别人的工作之前,设计和运行我们的实验?一点也不;这就像争论作曲家不应该听音乐,因为他们可能会受到影响,或者作者不应该阅读书籍,因为害怕作家的阻塞。

如果说我看得更远,那是因为我站在巨人的肩膀上。—伊萨克·牛顿

UnsplashArdiss Hutaff 拍摄的照片

Kaggle 上有很多很棒的数据分析师我们可以借鉴。学习过程不是在真空中完成的。我们需要发现他们的工作。但是,是什么让数据分析师变得伟大呢?我认为判断标准只有一个:问正确的问题。

我们在这里寻找的笔记本具有挑衅性、刺激性和异端性。他们通过提出有益的问题来激发我们的想象力和创造力。

一个优秀的数据分析师给我们提供了一片绿地,一匹可以骑的马,一个想法,以及征服它的工具。即使我们不同意他们的发现或建议,我们也已经向前迈出了一步。

一个优秀的数据分析师会给我们带来灵感,让我们注意到那些看起来有希望且相关的数据或特征。他们以突出潜力的方式转换数据集。最后,快速总结核心要点,并将其压缩成易于记忆的块。

编后记

伟大的数据科学家是异教徒。它们激发我们的想象力,激发我们的创造力。他们以突出重要部分的方式塑造原材料。简而言之,他们提出正确的问题让科学去解决。

下次在 Kaggle 比赛的时候,搜索那些内核。即使你完全不屈服,你也会成长得更多。

关于作者

我叫迪米特里斯·波罗普洛斯,我是一名为阿里克托工作的机器学习工程师。我曾为欧洲委员会、欧盟统计局、国际货币基金组织、欧洲央行、经合组织和宜家等主要客户设计和实施过人工智能和软件解决方案。

如果你有兴趣阅读更多关于机器学习、深度学习、数据科学和数据运算的帖子,请关注我的 MediumLinkedIn 或 Twitter 上的 @james2pl

所表达的观点仅代表我个人,并不代表我的雇主的观点或意见。

是什么让一个数据科学家变得优秀?

原文:https://towardsdatascience.com/what-makes-a-data-scientist-excellent-57be04b3c0e3?source=collection_archive---------34-----------------------

意见

以下是你需要知道的 3 种品质和经历…

布鲁克·卡吉尔在Unsplash【1】上的照片。

目录

  1. 介绍
  2. 对失败的反应
  3. 商业能力
  4. 数据科学过程顺序
  5. 摘要
  6. 参考

介绍

看完文章,“ 是什么让一个数据分析师变得优秀 ?Cassie Kozyrkov 的文章[2]启发我也讨论这个话题,但更确切地说,是为数据科学家。虽然有无数的品质可以造就一名优秀的数据科学家,但我将讨论更侧重于定性而不是定量、编程或技能的最佳品质。例如,了解 Python、R 和每一种机器学习算法当然是有益的,但很多人都可以满足这些要求,所以软技能——比如你如何反应和数据科学的过程——将使你脱颖而出,并最终让你成为一名优秀的数据科学家。更具体地说,在下文中,我将讨论失败的品质和经历、业务能力以及整体数据科学流程顺序,这些将有助于像您这样的数据科学家走向卓越。

对失败的反应

照片由放大上的去飞溅【3】。

通常,在实践中,或者在学习数据科学的过程中,您拥有尚未成为业务一部分的安全网,同时,您拥有更容易的数据和应用程序,不容易出错。因此,你将真正学会如何失败,以及如何在专业环境中应对失败。也就是说,失败是任何工作不可思议的一部分,尤其是数据科学。通过失败,数据科学家将学习和加强他们最初错过或搞砸的东西,有点像其他东西——机器学习算法。失败对成功很重要,因为它让你成为一名数据科学家,可以尝试、测试、利用测试和错误,不受约束地投入到模型构建的世界中。值得注意的是,早期失败是更可取的,因为当将模型投入生产的时候,您已经失败了,犯了错误,并且已经在最终形式的模型中包含了测试和边缘案例。不要寻找失败,更重要的是,以积极有效的方式应对失败。举例来说,你对失败的反应可能会产生新的特征、算法、产品或过程。话虽如此,让我们来看看失败的好处。

失败的好处:

  • 学习更快
  • 发现边缘案例
  • 发现测试用例
  • 更少的约束
  • 新功能的开发

行动项目:

  • 当你犯了遗漏边缘和测试用例 的错误时,识别那些用例并创建一个使用模型和一些硬编码规则来解释所有数据的集成方法。
  • 当你的精度在生产中没有那么高 时,确认测试的日期范围,仔细检查你的特征的数据类型——确保如果是数字,生产代码没有舍入数值。
  • 如果您的库无法在生产中导入 ,请确保找到更新的库版本,并在将其推向生产之前始终测试新版本。
  • 如果假设正态分布 ,使用不同的非参数算法,如随机森林,这意味着您的数据不需要满足某些假设。

如你所见,虽然不寻常,但失败和成功一样重要。更具体地说,你对失败的反应。所以读完这篇文章后,不要故意失败,而是跳进你的数据科学模型过程,研究数据,测试不同的算法,

…最终,尽早失败,这样模型就不会在最重要的时候失败。

商业能力

Adeolu EletuUnsplash【4】上的照片。

虽然编码、编程、数学、高级统计和复杂的机器学习算法无疑可以使数据科学家在技术上更加成功,但必须强调的是 如果不能将所有这些技能转化为业务,数据科学将毫无用处 。数据科学的一些最重要的部分是如何沟通问题,解释模型的结果,以及它最终将如何影响业务(例如,省钱、省时)。在我看来,数据科学几乎可以被命名为商业科学。但是,数据当然重要,业务也重要。

例如,假设我们有一个问题,我们在理解产品评论背后的语义和情感方面有困难。作为一名数据科学家,我们希望立即执行复杂的自然语言处理( NLP )技术,比如删除停用词以隔离评论的主要方面。我们发现我们可以很快很容易地应用数据科学。但是接下来,我们遇到了一个问题,我们通常会从 Python 库中删除停用词,也许,我们可能会意外地删除对这个特定问题有意义的基本词。也许我们错误地删除了 20%对产品很重要的词。这个例子可能很小,但是您可以看到,在没有意识到模型背后的业务的情况下,立即做出假设,会导致误导性的结果和不太有用的结果。还有无数其他的例子,我们忘记了高精度是最成功的衡量标准,但是我们意识到边缘案例实际上是最重要的分类数据。我们知道我们可以准确地对数据或主题进行分类,但如果我们更仔细地观察,我们会发现我们实际上只能对 10%的边缘情况进行分类,而对 80%的大多数情况进行分类。

以下是商业能力的一些好处和考虑因素:

  • 正确应用数据科学模型
  • 正确利用错误和成功指标来推动业务决策
  • 更好地与利益相关者沟通
  • 向非技术人员解释复杂的结果

行动项目:

  • 练习将你的复杂算法传达给利益相关者 ,理解你的算法的主要思想以及你的模型的结果和影响。
  • 知道成功意味着什么 ,与利益相关者一起确定什么是成功:是 90%的准确率,还是 99%的准确率——以及针对哪组数据?

强调数据科学中商业智能的重要性是非常有益的,所以请确保在您学习数据科学或在您当前的专业工作中使用数据科学时,您确保您允许自己以最佳方式探索您的模型在业务中的含义和应用,以及能够与他人进行熟练的交流,以便您的模型不是 静止和未使用的 ,而是相当活跃的,每个人都可以解释其结果。

数据科学过程顺序

克莱顿·罗宾斯在Unsplash【5】上拍摄的照片。

掌握数据科学的流程是会让你变得优秀的事情。数据科学可能会让人不知所措,因此了解完成端到端数据科学流程和模型的最有效方式将使您变得更加出色。 还有更具体的用例 流程 可以看作是更技术性的。或许,您可以使用一个笔记本,而不是 10 个具有不同超参数的 Jupyter 笔记本文件,该笔记本可以灵活地组织和排列网格搜索功能中的重要和最佳参数,例如。除去这种改进的技术方面,您本质上是通过更好地组织和隔离整个过程的重要部分来改进您的模型。

虽然公司、人员和代码可能不同,但我相信有一种通用的方法可以在任何地方执行数据科学。当然,您可以调整这个过程来迎合您的需要,也可以添加和删除一些部分来实现专门化。

以下是通用数据科学流程的主要步骤:

  • 隔离问题
  • 隔离当前指标
  • 查找和开发数据
  • 探索性数据分析
  • 特征工程
  • 模型比较或测试各种机器学习算法
  • 结果解释
  • 度量比较
  • 模型的效果

行动项目:

  • 遵循上面的流程——数据科学的目标是解决一个问题,让一个流程更加准确高效。
  • 流程的顺序很重要: 真正理解手头的问题,找到造成问题的原因的当前状态,并确定您想要改进的指标,获取数据集并理解它,创建功能,测试几种算法,选择最终的算法或算法集合,然后创建比较原始业务指标的指标,然后讨论您的模型的积极影响。

虽然简单,但这些步骤您可能已经在执行了,并且您可以将这些步骤应用到几乎任何业务中,因为我们本质上是在解释数据科学在业务中的作用。您希望探索问题、数据、应用实际模型,并将当前流程的结果与应用模型的新流程的结果进行比较,最后,分享模型的帮助。

摘要

数据科学需要复杂的技能和工具知识,如 Python、R、SQL、机器学习算法等等。然而,经常被忽视的是软技能的重要性以及您在公司执行数据科学的方式。这就是我所讨论的,包括你对失败的反应,你所使用的商业智能,以及你执行数据科学的过程。除了提高编程之类的硬技能,提高这三个素质一定能让你成为一名优秀的数据科学家。当然,这种讨论都是主观的,但通过专注于在日常数据科学工作中提高这些素质来提升自己作为一名数据科学家不会有什么坏处。

总而言之,以下是成就优秀数据科学家的三大品质:

* Reaction to Failure* Business Aptitude* Data Science Process Order

我希望你觉得我的文章既有趣又有用。如果为了让自己成为一名优秀的数据科学家,你已经关注了这些品质中的任何一个,请随时在下面发表评论。这对你现在的数据科学事业有帮助吗?你同意还是不同意,为什么?

请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。

如果你对在学习数据科学之前先学习数据分析的重要性感兴趣,这里有那篇文章[6]:

**

参考

[1]Brooke Cagle 在 Unsplash 上拍摄的照片,(2018)

[2] 卡西·科济尔科夫,是什么让一个数据分析师变得优秀?(2020)

链接:https://towards data science . com/what-makes-a-data-analyst-excellent-17ee 4651 c 6 db #:~:text = An % 20 analyst 的%20excellence%20is%20speed。&text = Analysts % 20 look % 20 up % 20 facts % 20 还有,你的!)% 20 in % 20 进程%20in%20the%20process)。

[3]照片由拍摄上的放大去飞溅(2020)

[4]2015 年 Adeolu EletuUnsplash 上拍摄的照片

[5]克莱顿·罗宾斯(Clayton Robbins) Unsplash 上拍摄的照片,(2020)

[6] M.Przybyla,在成为数据科学家之前,你应该首先掌握数据分析,(2021)**

是什么让一个数据科学家脱颖而出?

原文:https://towardsdatascience.com/what-makes-a-data-scientist-stand-out-e8822f466d4c?source=collection_archive---------49-----------------------

越来越痴迷硬技能,但软技能能让你鹤立鸡群

照片由米图尔·格罗弗Unsplash 上拍摄

数据科学家的数量每年都在增长,市场似乎可以容纳我们每一个人。幸运的是,没有放缓的迹象。根据美国劳工统计局的数据,到 2026 年,操纵数据的需求将大约增加到 1150 万个职位空缺。此外,在美国,数据科学家的平均工资已经达到 12 万美元。

然而,某些科技行业职位的竞争异常激烈,而且看起来会越来越激烈。有许多训练营发布“一批批”来自多所大学的数据科学家和应届毕业生正在找工作,更不用说那些处于职业转型期的人了。此外,全球疫情向公司展示了我们都可以远程工作,从而更容易从其他国家聘请数据科学家。

几年后,每个数据科学家都会有一个 GitHub 来展示他们出色的工作和分析技能。绝大多数数据专业人员将精通 Python、R、SQL,也许还会一些软件工程技能。因此,拥有大量解决数据问题的技术和技能不会让你从众多数据科学家中脱颖而出。所以,这里有一些特征可以,而且肯定会让你在求职时脱颖而出。

1。提高你的软技能

软技能是指标志一个人与其他人有效互动的能力的性格特征和行为【3】。在大多数职业环境中,软技能是硬技能的补充——一个人的知识和技术技能,如 Python 和数学中的编程。

沟通不仅是一种软技能,而且可以说是帮助一个人在职业上取得成功的最相关的技能。讽刺的是,优秀的沟通者是积极的倾听者。当你和别人说话时,通过仔细倾听和集中注意力,你表现出关心,并且有更好的机会理解他们的问题。这样做,数据科学家解决问题的效率会更高。因此,有效沟通的数据科学家更有可能获得公司的高级管理职位。

再好的人,光有数据说明不了什么。你需要以有助于决策的方式传达你的结果。与某人解释简单的机器学习模型如何工作以及其结果对目标受众意味着什么的能力相比,你拥有的所有理论知识都相形见绌。数据科学家可以接受有效沟通技巧的重要性,并根据每个受众定制他们的语言。潜在地,你与非技术专业人士交流的能力会让你成为一个更有效的问题解决者(并且会让你很高兴与之共事)。因此,鹤立鸡群。

2。够好,不完美

不要让“完美”妨碍了“足够好”对于任何数据科学研究生来说,这是最重要的心痛来源之一。在学术环境中,有抱负的数据科学家被期望工作到完美。这并不奇怪,他们觉得必须一直做到尽善尽美。然而,公司并不追求“完美”企业高管制定战略是为了适应市场并击败竞争对手,而不是为了成为完美的公司。作为某家公司的数据科学家,你应该效仿它的步伐和思维方式,而不是追求学术上的完美。

从一个高管的角度来看,从你的机器学习算法中提取额外的 2%的提升对业务几乎没有影响。毫无疑问,许多机器学习专业人士可以增加他们的算法预测,但以什么(财务)成本?如果公司失去了决策速度和商业灵活性,边际收益通常不会有回报。所以,当足够好已经提供了切实的结果,停下来,继续下一个项目。让它去吧。

以下是一些关于数据科学家如何发挥这种力量的提示:

  • 开发你感兴趣的个人项目,优先考虑快速达成答案。通过设定严格的截止日期,你的答案很有可能并不完美。
  • 自由职业者/志愿者:在真实的工作环境中,你会发现人们对一些学者非常关心的事情并不关心。最初你很可能会感到不舒服,但这是关键。

照片由 Emilio TakasUnsplash 上拍摄

3。面向业务的

假设你决定为工业界工作,而不是学术界。在这种情况下,发展你的商业和业务技能是必须的。数据科学一直朝着实用的集成技术行业解决方案发展,例如高性能的足够好的质量和低成本的每次预测。

在一家公司中,数据科学家必须从数据中挖掘出真正的商业价值。一些专业人士可能不同意,但坦率地说,数据专业人士需要能够利用数据和他们的洞察力增加公司利润。否则,高级利益相关者只会浪费你的资源。你对底线的贡献越多越好。因此,设法变得更加面向商业数据科学家将从商业环境中具有学术思维的其他专业人员中脱颖而出。

问自己一些这样的问题:

  • 企业想要达到什么目的?
  • 你的模型或项目如何帮助实现公司的目标?你能看到全局吗?
  • 你知道你工作(或想工作)的公司的术语和一般营销策略吗?你怎样才能更多地参与到业务中去?即使是间接的。
  • 不同部门的人能给你提供一个关于品牌和商业观点的快速入门会议吗?

希望这些问题能让你点击一下,变得更加以商业为导向。一旦你们达成共识,你会惊讶地发现未来的项目会变得更容易开发。

结论

企业数据科学家的角色将不可避免地发生一些变化。由于大量专业人士转向数据业务,候选人之间的竞争将比以往更加激烈。怎么才能脱颖而出?嗯,磨练你的商业理解是在任何利润驱动的公司中创造和发展的第一步。然而,重要的是要明白,在快节奏(有时不稳定)的商业环境中,追求完美的结果是不现实的,因为竞争对手的动作很快。因此,商业战略必须做出相应的反应,这很少符合达到完美的时机。最后,在一家公司里,不依靠无缝沟通几乎不可能实现大目标。所以,为什么不用你思考硬技能的方式来思考你的沟通技能呢?

感谢阅读。下面是一些你会喜欢的文章:

**

参考文献:

****福布斯-https://www . Forbes . com/sites/louiscumbus/2019/01/23/data-scientist-leads-50-best-jobs-in-America-for-2019-据 glassdoor/?sh=6d4e71e77474

【2】商业内幕-https://www . Business Insider . com/data-scientist-best-job-in-us-right-now-2018-2?r=US & IR=T

【3】软技能-**https://www.investopedia.com/terms/s/soft-skills.asp****

怎样才能成为一名优秀的数据科学家

原文:https://towardsdatascience.com/what-makes-a-good-data-scientist-88a094d0ea8f?source=collection_archive---------24-----------------------

…或者好的数据科学家有什么共同点。

照片由莱昂Unsplash 上拍摄

我打算在这篇文章中写的东西是基于我和优秀的数据科学家一起工作的经历。我没有说我是他们中的一员。然而,我继续工作和学习成为一个。

我没有资格宣布或评价一位数据科学家是好是坏。下面的话将展示我对表现出色的数据科学家的常见实践和技能的观察。

从这个意义上说,文章的标题可能是“好的数据科学家有哪些共同点”。

向他人学习是一项非常有价值的技能。提高这项技能的第一步是成为一名优秀的观察者。你应该关注别人做了什么,他们是怎么做的。

他们追求简单

我的首要观察是,有经验的数据科学家追求简单。为了简单,他们甚至牺牲了少量的准确性。

在大多数情况下,越简单越好。如果你有一个简单的解决方案来完成一项特殊的任务,那就去做吧。除非绝对必要,否则不需要复杂的模型或解决方案。

复杂的解决方案容易出错。此外,与更简单的程序相比,调试它们更困难。

先想想

当我对一个模型或脚本有问题时,我的第一个行动就是修改代码。我希望通过修改代码来解决这个问题。

这种方法通常会引导我找到解决方案。但是,绝对不是解决问题的最优方式。在某些情况下,我用这种方法浪费了大量的时间。

我从有经验的数据科学家那里看到的是,他们在采取任何行动之前都会思考问题和可能的解决方案。起初,在我看来这是浪费时间,因为你不能仅仅通过思考解决方案来解决问题。

然而,我很快就意识到直觉方法对我来说更有效。全面了解问题并制定解决方案总是更好的开始方式。

功能与算法

当我第一次学习数据科学时,我花了大量的时间来掌握机器学习算法。算法背后的理论和参数对我来说都是至关重要的。

学习算法没有错。事实上,数据科学家需要知道何时以及如何应用特定的一个。然而,除非你是一名研究人员,否则掌握每一种算法都有点过头了。

我从经验丰富的数据科学家那里学到的是,一个适当设置的体面算法将完成这项工作。没有必要花费大量的时间来调整算法或尝试不同的算法。

这些功能肯定有更大的影响。因此,将时间花在特性工程上会更有效率。一个信息丰富的特征有可能在准确性和模型性能方面产生影响。

清晰的解释价值连城

像许多其他职业一样,数据科学是一项团队工作。在一个数据科学项目中,你不仅可能与其他数据科学家一起工作,还可能与其他专业的人一起工作。

作为一个团队取得成功的最重要的要求是在团队成员之间建立清晰的沟通。

为了实现这样的交流,能够清楚简明地解释事情是至关重要的。执行任务是一回事,但解释它是另一个层面。除非你独立工作,否则如果你不能向其他团队成员解释清楚,你所做的就毫无用处。

和我一起工作的经验丰富的数据科学家非常擅长简单地解释事情。他们总是说到点子上。他们避免让事情变得不必要的复杂,这使得团队工作更加健壮和高效。

Excel 仍然是一个关键角色

Excel 是一个无处不在的工具。尽管看起来有点老派,excel 在数据科学生态系统中仍然非常有用和实用。

在我开始作为一名数据科学家工作之前,我根本不会想到我会使用 excel。我认为它没有足够的能力来执行数据科学任务。

当我看到高级数据科学家如何使用 excel 时,我对它的偏见改变了。使用 excel 最大的好处就是它提供的实用性。这是一个很好的快速分析工具。

它的可伸缩性一直是个问题。然而,当涉及到对小数据进行快速分析时,excel 胜过许多流行的工具。

r 是迷人的

这很可能是一个巧合,但是与我一起工作的高级数据科学家对 R 有热情。他们更喜欢 R,尤其是对于探索性的数据分析任务。

并不代表 R 优于 Python。用 R 能做的事,用 Python 也能做到。但是,说到数据分析和操作包的性能,我感觉 R 胜过 Python。

例如,我体验到 R 数据表包在处理 2 GB 大小的 csv 文件时性能优于 Python pandas。

如果您还没有这样做,我建议您至少尝试一下用于数据分析和操作的数据表包。我一直是熊猫的忠实粉丝,但比起熊猫,我更喜欢数据表。

结论

我想再次强调,我没有资格评价数据科学家,好还是不好。我在本文中分享的内容是基于我与经验丰富的数据科学家一起工作的经历。

我以他们为榜样,并设定自己的目标,以实现他们擅长的工作。

感谢您的阅读。如果您有任何反馈,请告诉我。

怎样才能成为一名优秀的数据分析师?

原文:https://towardsdatascience.com/what-makes-a-great-data-analyst-f6577cef81a3?source=collection_archive---------17-----------------------

提示:没有确切的答案

照片由 Heidi Fin 通过 Unsplash 拍摄

这里我要说的第一点是,这总结了我的经验。就像我对试图到达圣安东尼奥市中心的美国之塔的人说的那样:你看到那个高的东西了吗?继续朝着它前进。

知道你在哪里,知道你想去哪里,并且知道如何到达那里。没有固定的路径。

你应该具备什么样的一般特征?

这一部分更侧重于你这个人,而不是你应该具备的技能/知识。

  • 坚持/足智多谋:在数据的世界里,这是巨大的。你将参与的大部分工作不会是一个简单的 5 步蛋糕食谱。事实上,当某件事被描述为超级简单时,你可能会有点怀疑。这些项目可能涉及多次迭代,每次迭代的收益非常小。

我只需要你……'—你的利益相关者

  • 好奇,但有目的:当你开始处理数据时,很容易思考,“我想知道这会是什么样子,如果我……”你可以制作各种条形图、数据透视表等。直到母牛回家休息。首先想到一个问题,事情会变得简单一些。一旦这个问题形成,记住引言,并问你如何才能得到那个结果。当你试图将所有有可能变得重要的事情自动化时,你可能会以“数据呕吐”而告终。
  • 解决问题的技巧:你是那种喜欢解决谜团的人吗?当有人试图找出导致某个结果的原因,而你的头脑开始转向潜在的想法时,你会兴奋吗?关于数据的事情是,有时候,结果并不总是在表面上。你需要能够思考看似不相关的项目/事件如何影响另一个项目/事件。你需要知道如何构建才能找到答案。
  • 网络:但是我们不就是整天坐在一个孤立的泡泡里编码吗?希望不会。你将无法回答所有抛给你的问题。最重要的是,你没有参与很多利益相关者讨论当前/未来计划的会议。来自这些会议的信息有可能通过不走上错误的道路或通过更好地理解业务目标来节省您大量的时间。能够和其他人一起工作以融入商业管道是非常有帮助的。
  • 终身学习者:这是一把双刃剑。新的分析工具将会出现。在这些工具中,将会发布新的附加组件。最重要的是,商业在变化。目标可能会根据领导力或客户的需求而改变。新的部门或业务需求可能会在一夜之间涌现。你需要知道这些新的需求是什么,以及如何帮助他们。
  • 说书人:很多时候,数字很无聊!那打击很大。你想要一份和数字打交道的工作。你需要知道人们需要理解这些数字在做什么。当你的演示充满了数字/电子表格/图表的图像时,你的眼睛开始变得呆滞,大脑开始对你视而不见。你应该让这个足够有趣,让你的观众参与进来。你的人需要离开房间,告诉其他人他们刚刚听到的,并能够传达你的主要观点。

那很有趣。我从来没有那样想过。—您的演示中的观众成员

  • 坚强的脊梁(紧接着的一点与此齐头并进,不要跳过!):这个问题没有被经常提起。人们会质疑你的工作。捍卫它,但要用事实捍卫它,而不是情绪。人们很容易认为你是他们的个人数据助理,他们这次(以及下一次,再下一次……)需要的只是快速的数据拉取。你的时间也很重要。匆匆忙忙的人很有可能最终创造出更多耗时的任务。如果管理不当,快速和肮脏往往会导致漫长和痛苦。
  • 机智/优雅:很明显,你需要在某些时候反击。找出如何在不引发其他问题的情况下做到这一点。人们已经为他们的想法付出了努力。那些想法是他们的“宝贝”。不要冲进满是人的房间,说某人的“孩子”很丑,这是浪费时间。
  • 受控风险承担者:有想法。实验。问“如果……会怎样?”我以前说过,欧内斯特·p·沃雷尔可能是这一行的完美人选。能够提出试探性的问题。

我们一直都是这样做的。—创造力和全面发展的对立面

  • 自我意识:了解你如何融入你的团队。知道自己更擅长什么,哪里还有提升的空间。你的数据团队不应该只是铁杆编码员。你可以通过成为领域知识的专家或者与所有部门的重要人物保持良好的关系,为你的组织带来巨大的价值。

到目前为止讨论的项目通常被称为“软技能”。但是它们非常重要!接下来是硬技能…

照片由莱昂通过 Unsplash

你可能被期望拥有的技能

考虑更技术性/书本/硬技能的方法,数据分析师通常需要一套通用的核心技能。当你看招聘启事时,你甚至会开始注意到一点趋势。

  • 当需要快速分析或指导时,Excel 会非常有用。请记住,记录你如何找到一个结果是关键。再现性是一个东西。将你的结果截图发给某人时,必须包括你如何到达那个点的逐步说明,以及放入文件中解释你从哪里开始的数据。
  • SQL: SQL(结构化查询语言)很有帮助。您是否曾经被传递一个 Excel 文件,其中有人将 3 列连接成一个文件,然后用作 V-Lookup 的列?你有能力也有责任避免“应由你承担的责任”。数据分析中最复杂的部分不应该是“这个人的文件到底在做什么?”SQL 可以帮助解决其中的大部分问题,并允许将更多的时间集中在解决问题上。
  • 脚本语言(通常是 Python 或 R):就像 SQL 一样,知道如何编写脚本和操作数据是一项很好的技能。“开箱即用”的分析工具有时会限制你的能力。能够使用允许您深入到更细粒度级别的工具是一件好事。
  • 仪表盘和报表构建:在点上,你会使用 Power BI 或 Tableau 之类的工具来构建工具供他人使用。与您的组织合作,设定使用这些工具来回答何种问题的界限。在数据世界里,你构建什么取决于你为什么要构建它。没有通用的工具。
  • 统计:你很可能会有很多关于分布和诸如此类的东西的可视化。偶尔,你甚至可能会遇到类似辛普森悖论的情况。知道这类事情是有用的。
  • 可视化:与讲故事相一致,你将被期望在一个小得多的窗口中呈现大量的数据。任何人都可以制作一个条形图,但是能够添加适量有用的文字是你的优势所在。
  • 沟通:随着讲故事和可视化的趋势,你所做的很大一部分是向他人传达想法。他们必须能够理解你的观点。你可能需要向一个非技术人员解释一些技术性的东西。你可能需要向一个非常专业的人解释一些更商业的东西。你还必须向你的观众推销你的想法。如果你只卖 H-I-P-P-O,你的同事可能不会有兴趣帮助你。

“你明白吗,”—确切地说,你不应该在解释某事时结束谈话

  • 领域知识:这不一定是你需要从你的角色开始的。这也显示了“生活学习者”和“网络人”的一点点。能够从你的同事那里了解你的业务。提醒一下:数据不决定(底部链接)。数字可以做各种事情。如何将想法应用到业务中会对底线产生很大的影响。

就这些吗?

一点也不。直到现在我还没有提到的一个项目是交付一个可能不完美的产品的能力。追求完美会让你无法产生巨大的影响。不要把这误解为有 janky 代码会把别人引向错误的道路。仔细检查你的工作,做理智检查。

数据分析是一个很大的世界。有很多东西要学。虽然很有趣。我没有涵盖作为一名数据分析师您需要了解的所有内容。我在学习的时候很难面面俱到。

我想确保涵盖一些重要的基础,并提出一些你通常不会读到的话题。一如既往:不断学习!

一篇关于不同思维的文章:

这里有一篇简短的文章,在使用 SQL 以及如何避免结果中的简单错误时非常有用:

什么使一个问题有帮助?

原文:https://towardsdatascience.com/what-makes-a-question-helpful-19e934c2d436?source=collection_archive---------22-----------------------

栈溢出文本的主题建模探索

社交媒体在我们的生活中扮演着越来越重要的角色,不讨论它的缺陷,它的一个积极方面是它让用户能够与广泛的受众沟通。这使得社交媒体成为任何想要了解某个主题或与其他人讨论以完善每个人的理解的人的强大工具。Stack Overflow 是一个致力于帮助人们提高他们的编程技能,分享他们的编程知识,并在社区环境中建立他们的职业生涯的网站。作为我目前参加的 Metis 训练营为期 12 周的课程的一部分,我完成了一个数据科学项目,该项目使用自然语言处理工具来挖掘堆栈溢出的文本,以探索与网站上最有帮助的问题相关的术语和主题。

我在 Google Cloud Platform 的 BigQuery 上用一个简单的 SQL 查询开始了我的项目,使用了该网站上托管的公共堆栈溢出数据集,带来了 500,000 个堆栈溢出问题和其他相关功能,如与该帖子相关的分数、浏览量和相关标签等。在继续讨论完成项目的整个过程之前,我将分享一些关于一些特性的基本信息。

类似于堆栈溢出网站上的示例问题。图片作者,灵感来自栈溢出帖子

帖子的顶部是问题的标题,下面是帖子的正文,或问题。您还会注意到问题主体左侧的数字以及围绕它的上下箭头。这是帖子的“分数”。它是一个帖子收到的支持和反对票数的总和,看这个分数的一个方法是它的有用性。网站上的答案以同样的方式工作,但是为了这个项目的目的,我坚持只看问题。你可能会问自己,“分数的范围是多少?有没有表示帖子好坏的数字?”第一次发布时,所有分数都从 0 开始。如果你只收到一张选票,取决于它是向上还是向下,这将表明查看该帖子并对其投票的人是否认为该帖子有帮助。因此,总得分不仅取决于帖子的有用程度,还取决于有多少人参与了该帖子。在文章的最底部是标签,它们被一个蓝色的正方形包围着。这些是标签,它们有助于对问题进行分类。如果您试图搜索与某个编程概念相关的帖子,这很有用。

为了详细介绍这个过程,我使用了前面讨论过的 SQL 查询来引入相关的特性。接下来,我通过过滤我的数据来选择最有帮助的问题,这些问题的分数在帖子的前百分之十。为了进一步增加有用性,我只选择了网站上最常用的 100 个标签。Stack Overflow 上有超过 54,000 个独特的标记,由于这些标记是用户生成的,有些可能只使用一次。通过以这种方式过滤,我们确保我们看到的帖子是最有帮助的,吸引了最多的注意力,并且可能与更有经验的用户相关联。

在最初的数据清理步骤之后,文本预处理通常是主题建模过程中的下一步。这是为了确保文本只包含有意义的单词,没有标点符号、HTML 或停用词(例如 like、at、which)。

在删除停用词之前,对主题 6 中的文本进行预处理。作者使用来自知识共享许可下栈溢出帖子的文本制作的图片。

数据科学中的预处理是一个迭代过程,通常需要大量的领域知识。例如,由于栈溢出的许多措辞都与代码有关,所以一些在英语中没有定义的词,如 gitc++ 实际上是有意义的。在意识到显示的主题没有帮助或者遗漏了数据科学家知道应该包含的单词之后,可能必须在标记化步骤甚至建模步骤之后返回。在这个项目中,我无法在标记化步骤中移除所有这些术语之前捕捉到它们,但这无疑是未来改进我的模型的一个目标。

在预处理管道中清理完文本并使用 CountVectorizer 进行标记后,我使用潜在的 Dirichlet 分配(LDA)对数据集中的问题进行主题建模。此外,由于标签本身就是一种按主题对术语进行分类的方式,我使用熊猫将标签与我的 20 个主题中的每一个主题联系起来。

主题 6 和 8 中顶部标签的频率。图片作者。

主题建模步骤还需要一些领域知识,在这种情况下,就是了解与计算机编程中各种主题相关的术语。在为模型确定最佳主题数量时,这些领域知识会很有帮助。对于这个项目,我依靠我的领域知识,在发现每个主题中包含的术语有明显区别时,就选定了 20 个主题,但是有 GridSearch 等工具可以找到主题数量的最佳点。

LDA 模型中选择的 20 个主题中的 9 个主题的词云。图片作者。

在我的项目中,我还获得了一些有趣的见解,这些见解不仅仅与自然语言处理和主题建模有关。Stack Overflow 是一个巨大的网站,有一个很大的社区,里面有很多数据。例如,在我的数据集中,帖子的得分从-49 到 14,772 不等。帖子可能只有 0 次浏览,也可能有超过 200 万次浏览!在我的模型中,主题 19 与超过 4000 个关于堆栈溢出的问题相关联。它包括诸如会话服务器客户端连接请求之类的术语,并且可以说与一个与浏览器相关的问题相关联。

在未来,该模型可能会进一步完善,可能会进行更多的文本预处理,以及探索其他模型,如非负矩阵分解(NMF),因为它们有利于处理较短长度的文档。确定有用主题的模型不仅有利于希望发布可能得到回答的问题的用户,或者希望提高他们在 Stack Overflow 上的声誉的用户,而且也有利于教育者。这些有帮助的问题是用户认为对学习有帮助的问题,正如我在开始时提到的,它们有较高的分数,这意味着很多人已经关注了这个问题。换句话说,这些问题通常对人们来说是最难的。它可以帮助教师、教授或导师确定他们可能希望在哪些主题上花更多的时间,以便他们的学生带着他们可以在家庭作业、项目和职业生涯中应用的知识离开。

什么是成功的数据科学家?成功的 5 个特征

原文:https://towardsdatascience.com/what-makes-a-successful-data-scientist-5-traits-to-success-b106e7bc7cf1?source=collection_archive---------8-----------------------

学位不是成功的保证。

Fab LentzUnsplash 上拍摄的照片

在我们的数据科学学习之旅中,我们都会在某个时候问自己一个重要的问题:“要想在这个领域取得成功,我需要做些什么或学习些什么?”。我知道我在生活中经历的每一次学习之旅中都会问自己这个等式,因为当我们在学习之旅中时,我们经常希望这个旅程以成功告终。

但是,这个等式的棘手之处在于,答案因人对成功的看法而异。对一些人来说,成功就是得到一份高薪工作;对其他人来说,这是学习新的东西或有一份每天都能学到新东西的工作。对我来说,就是做自己热爱的事情,并为此获得报酬。不一定是一大笔钱,但只要我喜欢我做的事情,我就是成功的。

如果你问任何一位认为自己成功或被视为成功的数据科学家,他们可能会从他们在整个旅程中获得的个人角度告诉你他们是如何取得成功的。但是,有趣的是,尽管成功是个人的和主观的,但是如果你问 100 个甚至 1000 个数据科学家,我们最终会得到一些共同的答案和一些独特的答案。

</5-online-data-science-courses-you-can-finish-in-1-day-5b60f353fa8e>

虽然独一无二的会让每次学习之旅变得特别,但常见的才是你需要关注的。因为在你的整个旅程中,你将为成功发展你自己独特的品质。因此,在本文中,我将重点关注所有数据科学家都认同的作为一名成功的数据科学家需要具备的 5 大特质。

№1:有一颗求知欲强的好奇心

我将根据我的个人经历,以及我认为重要但并不总是被提及的东西,对成功的数据科学家的特质进行排序。任何数据科学家要想成功,首先需要具备的特质是好奇心和求知欲。正如我常说的,数据科学是一个正在发展的领域;它一直在发生着很多事情。

所以,要在这个领域取得成功,你需要有好奇心,对这个领域的下一个趋势有好奇心,对你能解决的可能的问题有好奇心,对你能解决这些问题的不同方式有好奇心。如果你有一颗好奇的心,你将永远在学习,永远在进步,这两者都是在数据科学中取得成功的关键。

№2:能够轻松适应新数据和新情况

数据科学是一个跨学科的领域;它连接了数学、统计学、商业、编程、设计和科学交流。正因为如此,数据科学的应用是无穷无尽的;每个领域都有数据科学可以解决的问题。因此,适应性是任何数据科学家都应该具备的一个重要特征。

能够适应新工具、新算法、新数据、新问题、新队友和新情况。如果你是一名自由职业的数据科学家或正在换工作,这变得更加重要。将您的知识应用于任何应用程序和数据的能力可以让您要么构建一个伟大的项目,要么无法超越众人。

</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>

№3:批判性思考者和问题解决者

数据科学家的主要任务之一是从给定的数据中发现趋势、模式并获得洞察力。找到这些见解和趋势并加以利用的关键是批判性思维和解决问题的技巧。因此,您需要探索数据、分析数据并进行批判性思考,以决定在项目的后续步骤中使用的模型。

解决问题和批判性思维也能帮助你决定使用哪些工具和做出哪些决定。因此,利用这些技能可以帮助您在项目中节省时间和精力。这里要提到的重要一点是,随着职业生涯的发展,你批判性思考数据的技能将会提高。

№4:有良好的沟通技巧

在我看来,拥有良好的沟通技能是每个数据科学家都需要掌握的最重要但却被忽视的软技能之一。想象一下,花几个小时处理一些数据,分析它,清理它,可视化它,但是你不能向别人解释你的发现。那么,你所有的工作都将是徒劳的,因为如果他们不能理解你的发现,他们将无法采取行动。

数据科学家需要擅长科学交流,他们需要擅长简化概念,只关注真正重要的东西。此外,他们应该能够给出可行的建议,并善于利用工具来创建有效的可视化效果,以传递清晰的信息。

№5:有扎实的技术功底

我故意把技能放在最后。这并不是说技术技能不重要。事实上,没有扎实的技术功底,你很可能无法成为一名数据科学家。但是,如果你正在尝试进入数据科学或者已经进入了数据科学,而我们其他人每天都在努力提高你的技能,那么你知道技术技能是许多在线材料的核心焦点。

所以,无论如何你都要学习技术技能,因为这些技能在求职过程中经常被测试。我把技术技能放在最后,因为我提到的其他 4 个特质经常被忽视或不被关注,尤其是新数据科学家。然而,在数据科学领域建立职业生涯是必不可少的。

外卖食品

我们都想成功,努力提高自己,学习新的技能,发展我们已经拥有的技能,并一直努力达到更好的自我;那只是生活的一部分。这也是在整个技术领域,尤其是数据科学领域取得成功的重要一环。

数据科学是一个正在发展的领域;每天都有新的算法和模型被设计出来,以提供更好的效率和性能以及更低的错误率。此外,由于数据科学的跨学科性质,您将需要学习各种主题和概念,这些主题和概念起初可能看起来并不相关。尽管如此,一旦你开始建设项目并涉足该领域,他们的联系就会显现出来。

</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>

重要的是要记住,每个人都有独特的学习历程、独特的经历和独特的成功定义。尽管如此,在这种独特性中,我们都有一些共同的特征,这些特征使我们能够展示我们的个性,证明我们的技能,并成为我们可能成为的最好的数据科学家,因此,简而言之,这些共同的特征使我们能够成功。

是什么成就了一个成功的画面

原文:https://towardsdatascience.com/what-makes-a-successful-tableau-ironviz-visualization-from-an-ironviz-qualifying-judge-4e1025b3a3c2?source=collection_archive---------18-----------------------

2021 年对我个人和职业来说都是不可思议的一年。尽管如此,我还是非常兴奋被选为第一轮 IronViz 资格赛的评委,与我们社区所有这些超级天才和一流的成员一起。随着以 Data + Joy 为主题的 IronViz 资格赛前 10 名决赛选手的https://www.tableau.com/about/blog/2021/8/data-joy-iron-viz-qualifier-contest-results-2021宣布,我准备写下这次经历,并帮助您确定在未来的资格赛中应该考虑什么。

鸣谢:Tableau 和 Adam Mico

在我们开始这篇文章之前,这里有一些我不会在这里或私下分享的东西:

  • 审查具体的可视化
  • 分项得分细目

然而,我将根据我所审查的 64 个可视化中的高分数据可视化的趋势和十个决赛选手的趋势,介绍一个成功的 IronViz 可视化的特征。

铁 Viz 资格评审背景

人们期望法官客观地看待可视化。Tableau 做了很大努力从可视化中删除个人身份信息,我们没有使用 Tableau Public 来查找和审查 vizzes。相反,提交的可视化托管在其他地方。为此付出的努力(特别是 Tableau 的 AB CommendatoreAndrew Grinaker(Twitter))并不小,但它有助于保持评分的公平。为了避免看到 IronViz 合格的条目,我在 Twitter 上屏蔽了对 IronViz 的引用,避免公开 Tableau,并且如果有人在那段时间要求对任何 Tableau 可视化进行反馈,我也不会参与。这并不容易,因为我非常好奇,觉得我错过了很多令人兴奋的事情,但客观是必不可少的。当然,IronViz 评委不会提交参赛作品,因为这显然会造成利益冲突。此外,如果可视化不能客观地判断(例如,上面的潜在短裤),我们可以选择不判断 vizzes。

判断过程

信用:Tableau

第一轮的每位评委都收到了 60 多幅图像,分布在所有 320 幅参赛作品中。多名法官审查了每一个可视化。最高分的可视化与第二轮评委分享。每一次可视化都是基于…

  1. 分析数据如何支持主题、其清洁度及其在研究中的应用,包括计算
  2. 设计或数据如何协同工作,并以最终用户可以直观处理的方式提供服务。应该想到这些问题…这是图表的正确用例吗?我能快速阅读课文和图片吗?这些颜色有什么意义吗?视觉化考虑可及性了吗?
  3. 讲故事或可视化在使用分析和设计来关注主题方面有多有效。当浏览主题和它的踪迹时,旁观者的头脑中是否有一个小电影在播放?它比数据和图表本身更能吸引人和启发人吗?

一个充满类比的高质量 IronViz 条目的分解

我有点饿了,所以我想不出一个更好的时间来展示这个比喻。我不是厨师,但我在电视上目睹了他们中的许多人——或者至少足以拼凑出这个类比。

分析阶段是在脑海中寻找配料和食谱。接下来,最好考虑一下 8 道菜的大餐需要哪些食材、客人和菜肴。接下来,设计阶段考虑烹饪方法、菜肴、时机、场地和盘子。最后,对于讲故事来说,厨师会找到主题、交付顺序、中间的时间安排以及其他微妙的东西,为活动增添冒险感和连贯性。

IronViz 是数据可视化的高级餐厅。最成功的参赛者花费大量的时间和精力将所有这些东西放在一起。菜肴、地点和烹饪方法因作者而异。然而,它们都具有这些一般特征:

  • 数据清晰和小心——作者花了大量时间收集可视化数据,验证计算,找出呈现设计想法所需的所有逻辑,并删除不必要的部分。鉴于这一主题,最好的数据是仔细收集或汇编的。

提示如果 Tableau 在未来恢复为合格条目提供数据集

验证是否可以将您的数据或附加数据追加到数据集,以实现更加个性化的可视化。来自你的想象越多,就越不像是一项任务,而更像是一个充满激情的项目。激情项目通常会产生更好的结果,因为更多的关注被投入到可视化中,以吸引和推动你自己展示你的技能。

  • 设计效率和掌握度——有了对数据的这种理解,他们已经知道仪表盘上会有什么。许多人通过线框化或预先设计可视化来做到这一点。这是一个最终可视化的粗略想法,并提供了一个课程。
  • 讲故事的连贯性和参与性——作者退后一步,考虑他们所热衷的事情的大局。然后,带着那种活力,他们想让你相信,这也是你应该用最少的脚步感受到的东西。它的目的是给你一个哈哈的时刻,让你在停止看它之后再去想它。
  • 规划、协调、时间和灵活性——在完成这项工作之前,他们会深入思考任何东西的位置以及如何进行微调。作者可能会在步骤之间花时间,花几天或几周的时间来查看它——寻求对设计的反馈,并验证另一个人看到了他们的愿景和想要传达的东西——足够灵活地重复并对所有步骤进行必要的调整,以呈现预期和强大的东西。

10 大 IronViz 数据可视化的 3 大趋势

信用:Tableau

我看到许多得分较高的条目有以下相似之处(除了上面提到的项目)。2022 年,趋势可能会改变,所以你会想看看这个社区在做什么(特别是在莎拉·巴特利特的(推特 | 网站 ) #IronQuest )。

  1. 长格式可视化很流行。

所有进入前 10 名的可视化都需要垂直滚动——最重要的是。只有瑞安·苏亚雷斯(Twitter|Tableau Public)的布局不需要从许多设备上滚动(1000 像素宽、700 像素长的 7 个仪表盘的配置)。

****注意:默认的桌面格式和商业仪表板的一般尺寸是大约 1,400 x 800,以便在大多数桌面上无需滚动即可访问。

*前三名决赛选手*Samuel Parson(Twitter|Tableau Public)是唯一一个拥有比更长更宽可视化效果(6000 像素宽 x 2,000 像素长)的决赛选手。

其余八个的中值尺寸分别为 1,400 像素宽和 5,650 像素长,平均值分别为 1,324 和 6008,大约是标准业务仪表板的 4 到 5 倍宽和 7 倍长。

以下是其他八位入围者的 Twitter 账户和 Tableau 公共账户(按姓氏字母顺序排列):

2。经典 Tableau 交互式数据可视化的自助服务让位于数据故事

对于非常长的可视化效果,除了工具提示或滤镜/参数之外,交互性对于用户体验来说是不切实际的。文本和叙述通过更多的图表、文本框、注释或工具提示(在较小程度上)被广泛使用,以提供见解,而不是与交互一起使用的自助式见解。

作为一名前分析师,我喜欢通过复杂数据集上的交互性来选择他们的冒险,分享这一点让我很痛苦。尽管如此,填鸭式的数据故事方法更具包容性,而且对更广泛的受众更有效。 可以 是如果作者应用了上面提到的一个高质量的 IronViz 条目的原则。

3。对 Tableau 使用其他工具是可以的,即使是 Tableau 可视化竞赛

前 10 名作者中的每一位都使用了 Tableau 中没有的独立工具或资源来强调 Tableau。最常见的是在 PowerPoint、Figma 或其他设备中创建的图像,以显示图标、增强背景或增加文本选项(很少有 websafe 和 Tableau 公共安全文本选项——这里有一篇由Ken fler lage(Twitter|网站撰写的 伟大文章 )。**

前 10 名作者和许多没有通过资格审查的作者之间的区别是,这样做是为了有品位地增强可视化,而不是使其成为主要焦点。

奖励:这里的所有作者都活跃在 #DataFam 社区中(或者是新加入的),并使用社区提供的资源来提升技能。Priyanka DOB Hal(Twitter|Tableau 公众)刚刚分享了一篇关于 Tableau 征途首发包的新文章,你应该看看。虽然成为社区的一员并不能给评判加分,但是所提供的资源和访问的便利性使得提升技能变得更快(也更有趣)。**

你很努力,但没有进入决赛或前 10 名。

竞争的水平反映了技能,创造力,对细节的关注,以及从不同的角度和不同的工具来扩展画面的自豪感。许多执行了他们开始分享的可视化的人可能不会放置或被认为是前 10 名完成者。尽管如此,他们最终还是通过提高技能、花时间练习技巧,以及参与这种变革性的体验来投身于一个充满激情的项目和技能展示而获得了胜利。

如果您继续使用 Tableau,关注 Tableau 社区或其他充满活力的数据可视化集体,您将会被您在短时间内通过额外的接触和探索可以爬多远而震惊。当然,你可能仍然达不到前 10 名或进入决赛,但你会通过到达的新高度和从加高的平台上看到的壮丽景色意识到旅程的影响。

亚当·米克

推特|LinkedIn|Tableau 公共

什么让大学值得?

原文:https://towardsdatascience.com/what-makes-college-worth-it-cdbb272152cb?source=collection_archive---------36-----------------------

实践教程

构建一个逻辑回归模型来预测哪些大学的早期职业薪金为 6 万美元或更高

Giphy.com 的 GIF

介绍

像大多数亚洲移民一样,我的父母强调学校的重要性,认为大学毕业是实现美国梦的途径。正因为如此,我从未质疑过我是否应该上大学。这更多的是关于和哪一个的问题。

当我做决定的时候,我没有做成本效益分析,就像我在后面谈到的模型中做的那样,尽管也许我应该做。相反,我想得更多的是两件事:

1.哪个学院感觉像霍格沃茨,更重要的是,
2。哪个学院可能会打动我的“chismosa”titas(chismosa 在他加禄语中是“八卦”的意思)。

没有想太多,我跟随我儿时最好的朋友去了加州大学圣地亚哥分校读本科,然后去了哥伦比亚大学读研究生。当我毕业的时候,我无知地认为大学本身会有回报。但是当我拿到我的第一份学生贷款账单和一份与之不符的工作薪水时,我惊呆了!我是谁,会认为我可以用她爸爸的信用卡为大学购物,就好像我是切尔·霍洛维茨一样?

事实证明,我并不孤单。根据 LendEDU 进行的一项调查,大学生毕业后期望的平均工资为 6 万美元。52%的大学生申请了学生贷款来上大学,其中 17%的人有支付困难。

Giphy.com 的 GIF

这让我产生疑问: 是什么让大学值得上

方法学

我查看了 900 多所学校(数据清理后)和 8 所学校的特点,如下所示(来源于 PayScale数据。世界,美国新闻&报道

  1. 有意义的百分比(连续)——有多少毕业生觉得他们的工作有意义?
  2. STEM 百分比(连续)——授予的学位中有多少是与 STEM 相关的(科学、技术、工程、数学)
  3. 学校类型(分类)—工程、私立、宗教、艺术、体育迷、党校、文科、州立、研究型大学、商业、sober、常春藤联盟
  4. 州(分类)-学校所在的位置
  5. 学费(连续)—包括州内、州外和食宿费用
  6. 总注册人数(连续)—学校注册了多少名学生
  7. 多元化注册(连续)-少数族裔群体(亚裔、黑人、西班牙裔、夏威夷原住民/太平洋岛民、美洲原住民/阿拉斯加原住民、女性和非居民)的注册
  8. 学校排名(分类)——我将排名分为前 50 名、前 100 名、前 150 名、前 200 名、前 250 名和超过 250 名,以包括未列入前 250 名的学校。

你可以在下面找到最终数据帧的预览。

按作者的数据框架

我的基线模型使用了 75%的数据来建立一个逻辑回归模型,预测学校的预期收入是否达到或超过 6 万美元,然后使用剩余的 25%来测试我的模型的准确性。我的最终模型指出了哪些特征在预测薪水时最重要。

我们的 零假设 声称这些特性对预期收入没有任何影响。我们的 替代假设 声称,特征确实对预期收入有影响。

目标变量——期望与现实

我们的数据显示,大学毕业生早期职业生涯的平均工资为 5 万美元,中位数为 4.9 万美元。在我们调查的所有大学中,只有 10.2%的大学在职业生涯早期的薪资达到或超过 6 万美元。

作者直方图

因为我构建了一个逻辑回归模型,而不是线性回归模型,所以我从早期职业薪金列设计了目标变量 over_60000,将早期职业薪金 60000 美元标记为真,将低于 60000 美元的早期职业薪金标记为假。

带 Skikit-Learn 的基线模型

构建我的模型

# import necessary libraries
import statsmodels as sm 
import sklearn.preprocessing as preprocessing 
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split 
from scipy import stats#Define dependent and independent variables
X = colleges_df.drop(columns=['over_60000'], axis=1)
X = pd.get_dummies(X, drop_first=True, dtype=float)y = colleges_df['over_60000'].astype(float)#Split data into training and testing 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)# Fit model 
logreg = LogisticRegression(fit_intercept=False, C=1e12, solver='liblinear')
model_log = logreg.fit(X_train, y_train)

我使用 Scikit-learn 构建基线模型,将目标变量 over_60000 定义为 y,将数据帧中的所有其他列(我的特征)定义为 x。

一旦我将数据放入模型,我就检查结果。

测量我的模型

因为我预测了学校是否会给毕业生提供 6 万美元或更多的早期收入,所以我想把我的精确分数放在回忆之上。记住, 精度 是从所有预测值计算出来的,而 回忆 是从所有真实值计算出来的(这篇博客很好地解释了其中的区别)。我不想告诉学生,他们就读的学校的预期早期收入为 6 万美元或更多,但事实并非如此。然而,如果我的模型告诉一名毕业生,他们的学校并不期待 6 万美元或更高的早期职业薪水,但他们实际上是这么想的,这也无妨。我得说,是令人愉快的惊喜和喜悦。

作者的基线混淆矩阵

左边的 混淆矩阵 展示了我的基线模型对测试数据的预测有多好。我的基线预测有 12 所学校的预期工资超过 6 万美元,但只有 6 所学校实际上符合标准,导致 50%的精确分数。不好了。

迭代我的模型

显然,我仍然有很多工作要做,以提高我的精度分数。你可以在我的 GitHub 上找到这个迭代过程,但是为了不让你厌烦这些细节,这里有一个快速的总结:

  • 我用 Scikit-Learn 的 train_test_split 测试了我的数据的训练规模,看看哪个训练规模给出了最好的结果
  • 我根据 Statsmodel 上显示的统计显著性削减了特征
  • 在拟合我的模型时,我使用 SMOTE 和指定类权重来处理类不平衡(尽管这两者实际上都没有提高我的精度分数——它实际下降到了 10%)。就像预测真假的逻辑回归模型怎么会得分那么低?)

作者的最终混淆矩阵

经过多次迭代,我的最终模型预测有 24 所学校达到了预期的薪资目标。在 24 所学校中,有 18 所为真,因此精度分数为 75%比我的基线模型提高了 25%。旁注:我的准确率也从 91%上升到了 94%。哈利路亚!

结果

我的最终模型使用了 70%的数据进行训练,保留了班级不平衡的情况,并且基本上只使用了 3 个特征:排名(前 50 名和前 100 名)、学校类型(工程、体育迷、文科和研究)以及少数群体的入学率(主要针对亚裔毕业生和女性)。结果可以在下面找到。

按作者列出的条形图

起初,我认为我的模型的发现进一步证明了我们在社会中发现的不平等,女性挣 81 美分,亚裔毕业生挣 95 美分,其他少数种族群体平均挣 77 美分,而白人男性挣 1 美元。但当我进一步观察整体结果时,这也表明职业仍然在薪资中发挥着很大作用,而不是学校本身。

所以我想知道,进入工程领域的亚洲毕业生比女性多吗?排名前 50 的学校主要是工科学校吗?学生是否大学毕业,收入差距是否存在?

结论

因为这个模型只考虑了大学的特点及其对早期职业薪水的影响,所以它几乎没有提供更大的背景。大学毕业在薪水中的作用如此之小,所以拓宽范围,包括你所在大学之外的额外特征会很有意思。或许通过不同的模式,我们可以找到消除性别和种族薪酬差距的方法。

如果你读这篇博客是为了根据我的模型的发现来决定你是否应该去哪所学校,我建议你跟随你的心,去你觉得对的地方。也许这是我性格中“感觉”多于“思考”的部分,是它首先让我陷入了学生贷款债务,但是我承认我不后悔。大学让我对自己有了更多的了解,也让我有了今天的成就,即使我的专业与我现在所做的并不匹配。一切都是为了体验。为此,我很乐意再次支付。

更多关于代码非技术演示me

大学对你来说值得吗?为什么或为什么不?

是什么让深度学习不同于传统的机器学习方法?

原文:https://towardsdatascience.com/what-makes-deep-learning-different-from-traditional-machine-learning-methods-fc154db33939?source=collection_archive---------17-----------------------

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

使深度神经网络与众不同的 3 个关键特征

所有表达的观点都是我自己的。本文的灵感主要来自于 Zsolt Kira 教授精彩的 CS7643 讲座。

所以你在一个聚会上,你 c̶a̶n̶'̶t̶̶s̶e̶e̶m̶̶t̶o̶̶s̶h̶u̶t̶̶u̶p̶̶热情地告诉每个人人工智能将如何改变世界,你知道这一点,因为你是一个人工智能爱好者或机器学习实践者或任何你用来描述自己的好听的头衔。然后,某个时不时看报纸的人问你“我真的不明白深度学习和传统机器学习的区别。深度学习和(经典)机器学习的区别是什么?”。你给了一些关于神经网络中的神经元是如何基于人脑的手写解释等等等等…一个让人不服气并让你尴尬的答案。因此,下面是如何正确回答这个问题——深度学习有 3 个关键特征使其与众不同:

  1. 层次组合性
  2. 分布式表示
  3. 端到端学习

层次组合性

特里·维里斯迪斯在 Unsplash 上拍摄的照片

深度学习模型架构往往基于这样一种想法,即周围的世界表现出层次结构。简单地说,世界上所有复杂的东西都是由简单的积木组成的,而这些简单的积木又是由更简单的积木组成的。这类似于在化学中,化合物是由分子组成的,而分子又是由原子组成的,或者在商业环境中,组织是由部门组成的,部门是由团队组成的,团队是由员工组成的。

同样,在图像中,像素形成边缘,边缘形成形状,形状形成文本(形状的复杂组合),文本形成对象,对象形成完整的图像。在自然语言处理的情况下,字符形成单词,单词形成短语,短语形成句子,句子形成段落。通过在它们的架构中反映数据的这种分层性质,深度学习模型能够通过对数据中的分层关系进行建模来了解简单部分如何形成复杂的整体。

在 ImageNet 上训练的 Convnet 的特征可视化[泽勒和弗格斯 2013]

在传统的机器学习方法中,专家将参与手工挑选这些低级特征,然后手工设计这些低级特征的提取,然后可以将这些提取馈送到模型,例如 SVM 分类器。这一过程不仅繁琐,而且选择和定义特征还涉及某种程度的解释性决策,这种决策容易因数据的过度简化而产生偏差并丢失信息。深度学习则以原始数据为输入,通过训练过程自动学习层次元素及其关系。

分布式表示

照片由 JJ 英Unsplash

在神经网络中,神经元一起工作来学习数据的表示。单个神经元本身既不能编码所有的东西,也不能真正编码一个特定的东西。正如在管弦乐队中没有一种乐器能够真正表达音乐作品的全部丰富性一样,在神经网络中,复杂的数据表示是通过整个神经元网络通过来回传递信息来学习的。

来源:https://learnopencv . com/image-recognition-and-object-detection-part 1/

相反,在传统的机器学习方法中,为了对猫的图像进行分类,模型管道的部分将被配置成检测猫的特定特征。例如,可能有一个组件检测胡须,另一个组件检测尾巴等等。然而,在深度学习中,没有单个神经元被专门配置为寻找胡须或尾巴。

这种分布式表示的特点实际上在某些情况下使深度学习具有优势。一种这样的情况是迁移学习。例如,通过一些简单的微调,为分类猫品种而训练的深度学习模型可以很容易地用于狗品种分类。

端到端学习

安德鲁·莫卡Unsplash 上拍摄

深度学习以端到端的方式应用学习过程的想法在前面提到的要点中有很大的暗示。然而,这种区别不是微不足道的,值得作为深度学习的独立区别特征重复。在深度学习中,学习过程应用于过程的每一步-模型将原始数据作为输入,通过学习特征表示来执行特征提取,并学习参数来执行必要的任务,如分类。事实上,这个过程是端到端的,以至于特征提取和参数优化之间的界限非常模糊。

来源:https://blog.dataiku.com/hs-fs/

如前面提到的要点所暗示的,对于经典的机器学习方法,典型地,需要单独的特征提取过程/管道来馈入预测模型。这个管道可能涉及人工挑选和手工设计训练模型所必需的特征。这与深度学习方法形成鲜明对比,在深度学习方法中,模型直接作用于原始数据。

不同是否意味着更好?

现在我们知道了是什么让深度学习变得不同,那么不同就一定意味着更好吗?答案是否定的,经典机器学习技术在现实世界应用中的强大存在和流行就是证明。深度学习的上述 3 个定义特征也是使深度学习模型更难解释的原因。例如,在表现不佳的经典机器学习分类器的情况下,查看分类不佳的数据并确定故障是在特征提取还是在模型中是相当简单的。一旦发现了弱点,就可以朝着消除它的方向前进。然而,在深度学习的情况下,架构的层次化、分布式和端到端的性质使得查明糟糕性能的来源具有挑战性。人们不能指向某个特定的层或神经元,把表现不佳归咎于它。

因此,重要的是要知道是什么将深度学习与传统的机器学习区分开来,以及这些差异带来了什么负担。我们必须始终首先从数据开始,在选择模型、技术和体系结构时,要彻底了解背景。

见见作者

艾西瓦娅·普拉巴特

嗨!我是艾西。我名字的前两个字母是“AI”,AI 和机器学习是我热爱的。可以通过 LinkedIn 联系我。

一部好电影的要素是什么?

原文:https://towardsdatascience.com/what-makes-for-a-good-movie-8e10896e0f1b?source=collection_archive---------20-----------------------

使用烂番茄的数据比较观众和评论家的评分

杰瑞米·叶Unsplash 上拍摄的照片

在过去的一个世纪左右,电影扮演了社会上最广泛消费的娱乐形式之一的角色,每年都有无数的电影出现,就像热锅里的爆米花一样充满活力。

不断增长的电影选择使晚间娱乐节目的选择过程变得更加扑朔迷离,许多观众在做出选择时会借助推荐。这样的推荐可能来自于用户生成的网站、评论家发表的评论,或者两者结合的平台。

但是这位受人尊敬的电影评论家的观点代表了普通电影观众的观点吗?我们能依靠评论家的声音来影响我们对娱乐的选择吗?

本文旨在使用自 1998 年以来提供电影和电视评论的网站 【烂番茄】 的数据,分析影评人和观众的电影评级行为的异同。

该网站为每部电影显示了两个独立的平均评级(以百分比为单位),描述了它收到的积极评论的份额:一个是基于一些评论家的评论,另一个是由网站的用户产生的。

使用由来自烂番茄的 17,000 多部电影的平均评论家评级、平均观众评级和各种属性组成的数据集,本文将采用多种分析方法来比较这两个群体的行为。

我们将首先对两组各自评级行为的差异程度进行广泛评估。然后,我们将深入分析上述差异的驱动因素。最后,我们将实现一个简单的线性模型,试图确定每个组的评级倾向的主要决定因素。

第一部分:评估差异

为了对观众和评论家各自的评级行为进行总体比较,我们先来看看各组的评级分布。

图 1:观众和评论家评分分布直方图

在上面的直方图中,我们可以发现两组评级的不同模式。

这两种分布都表现出左偏:这表明,在这两种情况下,我们的数据集中有更多的电影集中在评级范围的高端(因此更积极)。

然而,公平地说,这两种分布在形状上明显不同。

观众评分的分布更加平稳,没有明显的峰值,通常集中在中到高的评分范围内,很少会下降到较低的评分范围。

影评人的评分在整个范围内要广泛得多,这意味着几乎有同样多的电影走向低端,也有同样多的电影走向高端。该分布也在两个极端呈现峰值,尽管人们会假设这些是已经收到少量评论的电影的情况。

这表明,我们可以期待观众在他们的评级中更加慷慨,而另一方面,评论家,正如其名称所暗示的那样,更加挑剔。

接下来,让我们调查两组的评分之间是否有任何明显的相关性。每一点都是一部电影,我们可以画出观众和评论家的评分。

图 2:观众和评论家评分相关性散点图

上面的散点图表明,事实上有一些证据表明两组评分之间存在正相关,这表明观众对电影的高度评价也会得到评论家的积极评价。

然而,剧情中显示的相关性很难用强来形容,大量电影落在离中心线相当远的地方。

以上两个图表为我们提供了证据,证明两组评分之间有足够的对比,让我们可以更深入地研究数据。

记住这一点,让我们进一步分析,试图找出上述两组行为差异的原因。

第二部分:分析观众/评论家差异的驱动因素

考虑到上面的初步分析,让我们尝试采取一些措施,通过探索数据集的其他方面来确定观众和评论家不同行为的驱动因素。

当思考什么可能会影响观众对电影的欣赏时,一个浮现在脑海中的属性可能是电影的类型。让我们比较两组中每一组在我们的数据集中出现的每一个电影类型的平均评级。

图 3:比较不同流派的观众和评论家评分的条形图

上面的图表指出了一个事实,即评论家和观众对一些电影类型的反应通常是不同的。

影评人对纪录片和 T2 经典电影的反应更加积极,而观众对 T4 信仰、精神和儿童家庭类型表现出更大的偏好。

从理论上看,这是有道理的。有人可能会说,电影界的“经典”满足了被认为是高电影质量的必要标准,但对于更随便的电影观众来说可能不太容易获得。

另一方面,“家庭友好型”电影可以服务于娱乐观众的目的,这些观众寻求一部简单的电影来与他们的孩子一起观看,而不需要采用各种各样的电影技术来获得电影伟大的赞誉。

然而,这两个群体对一些类型有相似的反应。例如,看起来音乐剧和 T2 戏剧在观众和评论家中普遍受欢迎。

让我们对电影上映的年份进行类似的分析。随着时间的推移,这两个群体各自的评级会不会遵循一种相似的、甚至相反的变化模式?

图 4:按发行年份比较观众和评论家评分的线形图

上图表明,观众的平均评分随着时间的推移保持相当稳定,也许显示出略有下降的趋势。然而,这种下降趋势在更大程度上表现在批评家的行为中:他们的路线在所涵盖的 100 年中急剧下降。

这是否意味着,从评论家的角度来看,与上个世纪早期相比,如今广受好评的电影越来越少了?

嗯,不一定。值得注意的是图中的第三条线,它向我们展示了我们移动的时间越远,我们分析的电影数量就越多。

这可能是因为该数据集的创建者倾向于包含更多的新电影而不是旧电影,或者近年来数据的可用性更高。

然而,更有可能是因为现在每年制作的电影比 60 年前多得多。

随着独立影院等概念的出现以及电影流媒体平台的采用,可以说进入电影行业的门槛已经大大降低了。

这意味着随着时间的推移,电影院的分布可能会变得更加“稀释”:每年都会有更多的电影上映,以迎合更广泛的观众。

虽然这并不意味着高质量的电影已经消失,但越来越多的电影旨在安抚寻找简单娱乐方式的观众,而不是给评论家留下深刻印象,这不可避免地导致评论家平均评分的下降,而不会严重损害观众的普遍看法,因此可能解释了上述行为。

第三部分:确定评级行为的决定因素

让我们进入分析的最后一部分,通过实施一个简单的线性模型,我们将尝试确定每个群体评定行为的关键决定因素。

我们可以使用电影的年龄,播放时间,内容评级和类型作为解释变量,而评论家和观众的平均评级作为两个独立模型中的反应变量,然后我们可以进行比较。

图 5:为观众和评论家评级实现的线性模型的系数

对于不熟悉线性回归基础的读者来说,变量的系数描述了变量的增量变化对响应的估计影响。

在这种模式的背景下,这意味着,例如,我们可以预计一部电影作为一部纪录片会将评论家的平均评分提高 27.9 分。

根据对模型结果的解释,我们可以看到,在这两种情况下,电影类型对每个群体的评级行为的影响都比我们在模型中包括的其他变量大得多。

除了一些例外,许多类型在方向和程度上对两个群体的行为有类似的影响,其中纪录片动画电影对两个群体的评级有最大的积极影响。

不同之处在于像恐怖片这样的类型,它对收视率的负面影响远远大于对评论家的负面影响。西部片虽然对两个群体的影响力都相当弱,但却表现出了各自相反的相关性:对评论家来说是正面的,对观众来说是负面的。

为了支持上一节分析中显示一段时间内平均评分的图表,年龄变量对两组都产生了正系数,对批评者的影响更大。然而,与流派变量相比,模型估计其影响极小,就像运行时的情况一样。

另一个值得注意的有趣差异是电影内容分级的影响。虽然对评论家的行为几乎没有影响,但这种影响在观众中更明显:更严厉的内容评级会导致平均分数下降。

这也符合之前在分析中讨论的理论。既然我们发现观众对儿童家庭电影的反应更积极,那么电影内容分级的严格程度(因此,通过推理,它包含的露骨内容的程度)与这个群体的享受程度负相关是有道理的。

结论

这篇文章使用了来自烂番茄的数据来比较电影评论家和网站普通用户的评分行为。在采用多种技术分析数据后,我们确定了以下关键要点:

  1. 这两组人各自的行为模式有明显的不同,观众比批评家更有可能给出慷慨的评价
  2. 这两组人对我们的数据中出现的不同类型有不同的反应
  3. 随着电影发行年份的增加,影评人的平均评分显著下降,而观众的评分保持不变
  4. 根据我们的模型,类型是两组中分级行为的主要决定因素,然而观众对电影的内容分级表现出更大的敏感性

当然,触及这种分析的局限性是值得的。电影本质上是一种艺术形式。

虽然我们可以测量某些方面来形成分析性的论点,但电影中总会有一些无法定量测量的元素:电影的特征会影响我们对它的感受,我们无法用数字来描述。

然而,我希望尝试使用以数据为中心的方法来探索对电影的兴趣仍然是一个有趣的阅读!

图表背后的代码

如果你有兴趣看看我用来分析数据集和构建本文可视化的 Python 代码,请随意查看我的 Github 上的这个库。数据集创建者的确认包含在存储库的自述文件中。

图卷积网络的工作原理是什么?

原文:https://towardsdatascience.com/what-makes-graph-convolutional-networks-work-53badade0ce9?source=collection_archive---------18-----------------------

GCNs 背后的数学直觉的分解。

这是机器学习中 *图论 系列的第三部分。*

到目前为止,如果您一直在阅读本系列文章,您可能已经了解了一些图论知识,为什么我们在数据科学中关注图结构数据,以及什么是“图卷积网络”。现在,我想向您简要介绍一下这些东西是如何工作的。**

对于本领域中可能对这个主题有所了解的朋友,我将谈论 Kipf & Welling 的 2017 年关于半监督学习的图卷积的论文(Thomas Kipf 在这里 写了一个对这个概念更容易理解的解释 )背后的直觉,尽管自改进这种方法以来已经开发了其他方法。我的目标是介绍数学概念,而不是提供该主题的广泛概述。

现在,如果你不是数学家、数据科学家,甚至不是计算机科学家,先不要离开。目标是将学术论文和概念分解,以便任何人都能理解。请在最后留下回复,让我知道我是否实现了这个目标!

我们走吧!— GCNs,目标是什么?

在 Thomas N. Kipf 的博客文章中,他说图卷积网络的目标是:

“……学习图 G =(v,e)上信号/特征的函数”

但这到底意味着什么呢?我们来分解一下。

节点进行某种预测或分类有不同的方法。但我们关注的是图卷积网络,对于分类关注的是* * 这意味着,为了提供一个具体的例子,对于类似于蛋白质的东西,其具有由整个图形表示的结构:*

蛋白质的基本结构,其中多个氨基酸通过肽键连接,由来源提供。

我们可能需要一种方法来嵌入这个图的特征,这样我们就可以**对我们正在查看的蛋白质进行分类。****

所以,让我们回到我们上面的引用。我们想学习图上特征的函数。换句话说,我们希望了解特征之间的关系——在蛋白质的例子中,这可能是某些原子之间的特定键表示,或者原子表示本身——给定我们图形的特定网络结构。换句话说: 节点和键 (边缘)的组合如何影响我们正在观察的 蛋白质(目标标签)?

免责声明:就像这篇文章中的许多事情一样,这有点过于简单化了。这样做的目的是分享 GCNs 背后的直觉,并让它变得容易理解。对于完整的解释和数学证明,我鼓励你更深入地研究底部引用的论文。

为什么不是普通的卷积神经网络?我们已经在之前的文章中谈到了传统机器学习&深度学习模型在面对任意结构化(非欧几里德)数据时面临的困难。GCN 允许我们将图表结构嵌入到二维表示中,克服了如果我们试图使用传统 CNN 对该图表进行分类时会遇到的障碍。

你可以把嵌入想象成一个三维分子模型,像这样:

照片由 Unsplash 上的特里·维利迪斯提供

并把它画在一张纸上,以便我们随身携带和记忆。

为了理解如何实现,让我们看一下正向传播。

我可能会把我的学习风格投射到我的读者身上,但是为了真正完全掌握 Kipf 提出的公式,我必须回到基础,回顾一下向前传播。让我们花一点时间来看看正向传播公式:

正则神经网络的前向传播方程。图片来自来源

不要让这个公式吓到你。它只是说在下一层的的特征表示等于在当前层的权重上执行某种激活函数的结果乘以当前层的特征表示加上当前层的偏差。**

也许那仍然感觉是稠密的,如果是的话,那也没关系。你可以这样想:这个公式表示的是我们为了得到一个输出而采取的一系列计算步骤,将结果通过我们神经网络中的每一层,直到 i 是我们的最终(输出)层。(如果你知道编程的基础,你可以把它概念化为一个 for 循环:“对于我们神经网络的每一层,执行这个计算以返回一个最终值。”)

我们的激活函数(表示为 sigma) 可能是类似 ReLu 的东西,我们的特征表示可以被认为是以我们的蛋白质为例,其中我们分子中的每个原子都由它的原子序数表示(为了我们的简单例子)。然后,我们希望最后一层的最终输出是我们正在查看的蛋白质的表示—* 我们的分类。现在不要太担心偏见,如果你不知道它是什么,我们不会在本文中进一步讨论它。*

签到

如果你对这一切有点陌生,你的大脑现在可能正在受伤,这没关系。在我们继续之前,让我们花一点时间来回顾和消化我们所学的内容

1。GCN 的一个目标是将任意结构的图嵌入到网络的二维表示中。

2。此外,我们想了解图上的特征的功能——我们想知道内容如何影响其他内容(我们图中的特征如何影响我们的目标)。

3.我们已经回顾了常规神经网络的前向传播,并且理解了这个等式告诉我们什么。**

正向传播——这与 GCNs 有什么关系?

与任何神经网络类似,图卷积网络需要一种方法来通过层向前传播值以实现其目标。然而,假设我们的数据不是欧几里得的,我们需要对上面讨论的常规正向传播方程做一些小的调整。

首先,我们需要一种计算方式来表示我们的图形。如果你一直记得我关于图论的第一篇文章,或者如果你记得你的数学(或者,对于房间里的计算机科学家来说,你的数据结构课程),你会记得表示一个图的一种方式是用一个邻接矩阵。让我们看一个例子:

无向图的邻接矩阵,如左图所示。

我们的邻接矩阵实际上是一个稀疏矩阵,其中我们有代表节点标签的行和列,以及任何两个节点是否相互连接的二进制表示。0 对应“无连接”,其中 1 代表连接(一个边沿)。

所以,我们有了 GCN 难题中第一个缺失的部分:我们的邻接矩阵,我们称之为 A.

现在,我们需要确保将 A 插入到我们的传播方程中。由于我说过不要担心偏见(并且由于我引用的文章中的图像也省略了图像中的这个值,这样做很好),您在下面的表示中看不到它。**

让我们看看目前为止的等式:

图卷积网络的前向传播方程。图片由来源提供,添加了我自己的注释。

但是我们还没有完成。有两个问题:

  1. 如果我们只查看 A,我们将查看给定节点的所有邻居,而不是该节点本身。我们一会儿会处理这个问题。
  2. 什么是 A?正如我们最初讨论的那样,一个没有被规范化。由于我们必须将我们的权重和特征表示乘以我们的稀疏邻接矩阵 A,我们可以预计,特征表示和权重的比例将随着 A 的比例而显著变化。因此,A*是归一化的 A。让我们来讨论这意味着什么:*

Kipf & Welling 引入了一种方法来规范化处理第二个问题的。首先我们需要 对角节点度矩阵 D. 如果那句话感觉很混乱,可以看看链接的文章!归一化 A 的方法之一是乘以 D,但是基普夫&韦林向我们介绍了另一种叫做对称归一化的方法。这相当于:

邻接矩阵(A)和度矩阵(D)的对称归一化表示,承蒙来源

当我们提供最终方程式时,您将看到这一点!现在,我们已经解决了我们的正常化问题,我们就快到了。我们还有一点要补充:自循环。

我们想要学习我们的图中所有节点的表示,这意味着我们需要改变我们的图。因为这已经是一篇很长的文章了,我将再次引用 Thomas Kipf 在他的博客中的话来解释:

“……与 A 相乘意味着,对于每个节点,我们对所有相邻节点的所有特征向量求和,而不是对节点本身求和(除非图中存在自循环)。我们可以通过在图中强制执行自循环来“解决”这个问题:我们只需将单位矩阵添加到 a 中。

这里,我们到了下一步:加强自我循环。这意味着我们需要我们的节点也连接回自己,看起来像这样:

单个节点上的自循环,由提供。

如果你不能 100%确定 Kipf 在他关于单位矩阵的引用中所说的话,请记住单位矩阵是一个 n x n 矩阵,1 的在主对角线上(左上到右下),其他地方为零:

单位矩阵n×n,承蒙* 出处 *

其中 n 在我们的用例中是邻接矩阵 A. 的维数

现在,我们已经用 A 的度矩阵对 A 进行了归一化,并通过添加我们的单位矩阵来实施自循环,我们得到了图卷积网络中前向传播的最终方程:

图卷积网络的前向传播方程——推导邻接矩阵(A)的层(l)特征表示函数的方程,由来源提供,并添加了我自己的注释。

让我们分解这个新方程。

GCNs 前向传播方程的第一条款。

这一块写着:“给定邻接矩阵 A ,我们的特征对于层 l 的作用”。这就是我们希望为解决的问题。记住我们最初的目标之一,为一个图寻找特征的函数。

GCNs 前向传播方程的第二条款。

让我们分解第二部分。请记住,这是等号的右边-这是我们用来寻找我们的功能的功能。

记住 sigma (𝝈)代表一个激活函数(比如 ReLu)。所以这个子句表示的是β的对角度矩阵( ) 上的激活函数的结果,这是我们添加到单位矩阵的邻接矩阵(a),我们已经使用“对称归一化”对其进行了归一化。这些然后乘以我们的特征表示和我们当前层的权重, l.*

等等——让我们后退一步。

让我们谈谈拼图的最后一块。还记得我们如何谈论我们的蛋白质例子,以及我们的节点如何可能有一个标签,像一个原子的名称或缩写(即:碳,或 C),以及一个特征表示,可能像它们的原子序数?

本例中的这些表示成为我们的特征表示向量,对于上面的等式,表示 l.H

用几句话概括一下

你刚刚学习了如何找到给定图的特征的函数,给定图的邻接矩阵 A、d、

您已经回顾了前向传播,并了解了它与图卷积网络的不同之处。您已经了解了在处理任意结构化数据时需要考虑的一些重要注意事项,比如拥有或创建自循环以及规范化邻接矩阵的重要性。

不错!你已经为下一步做好了充分的准备——这一步很快就会到来——这一步应该会有趣得多:用 gcn 对东西进行实际分类。

如果您想在下一次之前了解更多,请查阅所有在本文写作过程中非常有价值的论文和资料:

  1. 图卷积网络半监督分类, Kipf & Welling (ICLR 2017)
  2. 图卷积网络,托马斯·基普夫
  3. 理解用于节点分类的图卷积网络,Inneke Mayachita

注意事项:

  1. *GCNs 也可以用于节点级分类,但是为了简化示例,我们在这里不关注这一点。
  2. *这代表‘D-hat’,Medium 的数学符号支持有点欠缺

是什么让 NLP 成为机器学习的一个独特分支?

原文:https://towardsdatascience.com/what-makes-nlp-a-unique-branch-of-machine-learning-e08e049d6163?source=collection_archive---------50-----------------------

斯科特·格雷厄姆Unsplash 上拍照

机器学习时代从分析存储在电子表格、传统数据库甚至 CSV 中的二进制数据开始。随着这些模型的巨大成功,数据科学家将这些技术扩展到文本数据。文本数据与处理二进制数据有什么显著不同?在这篇简短的文章中,我将给出一些令人信服的理由,并给出处理文本数据的完整流程。让我先简单描述一下二进制数据预处理的流水线。

二进制数据预处理流水线

存储在传统数据库中的数据很少是干净的。几个数据点可能包含缺失值(空值),所以您从清理数据开始。数据集可能包含许多相关列-通过消除任何不需要的列来减少列数(要素)。各个列中的数据可能有很大的范围-您将需要缩放这些列。在做了这样的预处理后,你的主要任务是减少特征数;计数越高,训练时间和资源需求就越多。现在,让我们看看文本数据需要什么样的预处理?

是什么让文本预处理如此不同?

一个数据库表通常包含几列——这个数字以十为单位。数据库中的每一列都是 ML 算法训练中的潜在候选特征。现在,考虑文本数据的情况。对于文本数据,每个单词或句子都被认为是潜在的特征。为了理解为什么,我们需要考虑我们试图在文本数据上开发的 ML 应用程序。

考虑一下我们都非常熟悉的电子邮件垃圾应用程序。机器学习模型在一封看不见的电子邮件中寻找一些冒犯性的单词,如果找到,则将相应的电子邮件标记为垃圾邮件。注意,我们在寻找单词。因此,对于模型训练,我们将把来自训练数据集的电子邮件文本标记为单词标记。使用监督学习,我们将使模型学习根据某些冒犯性词语的存在对电子邮件进行分类。

现在,考虑这样一种情况,你被要求训练一台机器,让它具有概括小说的能力。你很清楚任何一本书的封底段落。一份出色的总结会促使潜在买家购买。这是一个非常高级的 NLP(自然语言处理)应用程序。你需要将整个小说文本标记成句子,并挑选出最重要的句子作为书的摘要。

这两个例子肯定会让您明白为什么我们需要将文本语料库标记为单词或句子,而不是单个字符。现在,主要问题来了。任何文本段落都会包含成千上万的单词和句子。每个这样的标记都是 ML 模型中一个潜在的候选特征。我们必须大大减少这种特征的数量,以使训练可行。

NLP 的第二个最重要的需求是我们需要对单词和句子进行矢量化。与二进制数据相比,二进制数据已经是机器可读的格式,可以很容易地表示为张量。虽然文本数据中的单个字符是二进制格式(ASCII -机器可读),但在 NLP 中,我们处理单词和句子。我们需要把这些转换成向量。为此,我们使用 Word2Vec、GloVe 等工具。

为了进一步理解为什么文本处理与处理二进制数据如此不同,我将给出完整的文本预处理管道。

文本预处理管道

我们对文本预处理的目的是减少我们的单词词汇量。因此,您可能想做的第一件事是从文本语料库中删除所有标点符号。请注意,标记器很可能会将标点符号作为单词标记。您可以使用正则表达式来删除所有这些不需要的字符。接下来,您将删除类似于"等单词。这些词作为特征没有什么意义。我们称之为停用词。

根据您的应用程序类型,您可能还想删除数字或将其转换为文本。当你的词汇表中只包含独特的单词时,将所有单词小写也有助于减少单词数。单词“ John ”和“ john ”对于机器学习模型来说意义相同,而记号赋予器为这些单词创建两个不同的记号。

此外,可以通过使用词干化和词汇化来减少词汇量。两者都将屈折词还原为其词根形式,除了词汇化确保词根属于该语言这一事实。词形变化是通过给一个词加上前缀、后缀或中缀来修饰它。例如,单词“播放”、“播放”、“播放”将被简化为常见的词根“播放”,这也是英语中的有效单词。词干分析器会将单词“麻烦的”简化为“麻烦的”,同样,在去掉后缀后,它也会将“麻烦的”简化为“麻烦的”。在这两种情况下,精简的单词在我们的词典中都不是有效的单词。如果只需要语言中的有效单词,就使用词汇化。

完成文本预处理后,您将标记整个语料库,使其准备好输入到您的机器学习模型中。

所有这些过程都大大减少了字数。我列出了下面的各个步骤,供您快速参考。只要你理解每一步背后的目的,就没有必要按顺序执行这些步骤。

  • 删除标点符号
  • 删除停用词
  • 删除/转换数字
  • 下部外壳
  • 选择独特的单词
  • 词干化和词汇化
  • 标记化

对于机器学习算法来说,在运行所有上述过程后,单词计数通常仍然很高。我们认为每个单词都是一个特征,我们必须进一步减少它的数量。根据我们正在开发的 NLP 应用程序的类型,我们将使用更多的技术来减少这个数量。

高级加工

文本数据是非结构化的,我们的词汇表中的单词没有固定的长度。机器学习算法需要固定长度的输入。这个向量的长度等于词汇表中的单词数。对于大型文本语料库,这个数字仍然很高。为了使它变得更小,你可以使用一种叫做单词袋的技术。在这项技术中,您将文本语料库中最常用的单词收集到一个包中。它们出现的频率决定了最常见的单词。这个袋子的大小决定了向量的长度。

高频这个词并不意味着它与表示文档中的信息高度相关。像“这个”和“那个”这样的常用词将具有非常高的频率,但是不携带与文档相关的信息。于是,就有了 tf-idf(词频——逆文档频率)的概念。你也可以使用二元语法和 n 元语法来减少你的特征数。对这些技术的描述超出了本文的范围,但是您现在肯定可以开始理解为什么 NLP 在机器学习中有特殊的待遇。

使用 NLP 进行文本处理的要求不止于此。你需要 NLU(自然语言理解)来开发语言翻译等高级应用程序。像 LSTM RNN 这样的神经网络架构就是为此而开发的。这现在被变压器架构所取代。我们现在有许多像伯特、GPT 等模特。对于使用文本数据类型的高级 NLP 应用程序。

结束语

基于二进制数据集的机器学习模型开发是琐碎的,因为数据库表中固有的功能数量有限,并且它们具有机器可读的数据格式。与此相反,在文本数据上开发模型非常具有挑战性。这是因为文本语料库的大小,并且考虑到每个单词都是训练数据集中特征的潜在候选。第二,将标记化的单词和句子表示成机器可读的数字向量格式是另一个巨大的挑战。

正如您在上面看到的,不仅需要详尽的文本预处理来减少特征数量,而且在开发 NLP 应用程序时还需要应用许多高级技术,如 BoW 和 tf-idf。更高级的 NLP 应用需要语言和上下文理解,我们有另一个分支叫做 NLU。你现在会很容易理解为什么 NLP/NLU 在机器学习中需要特别的关注和对待,这不是炒作。因此,作为一名数据科学家或机器学习工程师,你肯定需要获得 NLP 技能来处理文本语料库。

信用

https://medium.com/@poojagramo—复制编辑

是什么造就了一名高级数据科学家?

原文:https://towardsdatascience.com/what-makes-you-a-senior-data-scientist-79cdcabea38f?source=collection_archive---------19-----------------------

讨论高级数据科学家角色的技能和期望

图片来自 Unsplash 上的纳赫尔·阿卜杜勒·哈迪

我在数据科学家中看到的另一个常见问题是,“我如何成为一名高级数据科学家?”高级数据科学家的地位似乎非常主观,因公司而异。似乎有各种各样的答案详细说明了作为一名高级数据科学家意味着什么。在这里,我回顾并探讨了 PayScale、Cleverism、Zippia 和 KDnuggets 所讨论的标题。

探索高级数据科学家的头衔

看看 PayScale 对高级数据科学家的定义,很明显他们期望机器学习、Python 和大数据分析技能。这三个方面与工资水平高于平均水平的人相关。Payscale 的分析中提到的一项技能是领导力。

从那里,我研究了聪明主义如何定义高级数据科学家的角色。回顾他们的定义,很明显,高级数据科学家经常监督团队中的年轻成员,并被视为他们的导师。他们也是在数据科学团队中提供高级专业知识的个人,他们希望在整个企业中推进分析、工具和技术的采用。

Clerverism 通过将其进一步细分为管理、分析、战略、协作和知识类别,扩展了他们对高级数据科学家的定义。在这里,他们继续详细介绍高级数据科学家如何在快节奏的环境中工作,以保证团队工作的完整性、准确性和充分性。

像 PayScale 一样,Cleverism 也提到了基本技能:机器学习、Python / R 和数据挖掘。聪明主义指出,其他人没有的一项关键技能是沟通。其他人则希望高级数据科学家在协作和交付工作成果时具备出色的沟通技巧。当获取复杂的信息、输出和算法,并将其简化为关键利益相关者和管理层可操作的见解时,沟通就变得非常方便。

接着是 Zippia,他们记下了传统技能,如 Python、数据分析、机器学习和预测分析,工作通常集中在技术或金融领域。当进一步研究列出的其他技能时,似乎通常会在混合中找到特定的技术或编程语言。在他们的分析中,一项突出的技能是关于云技术,如 AWS 或 Azure,这对大数据有意义,因为它允许更多的计算能力来分析大量数据。在他们的文章中,Zippia 指出,高级数据科学家通常来自统计学、计算机科学和数学背景,这似乎与其他来源一致。

最后,ms ra Turp 在 KDnuggets 上的一篇帖子描述了初级和高级数据科学家之间的差异。本文开头写得很好,指出一个普遍的印象是,身居高位的人被视为无所不知,但事实是,你并不知道。你在一定程度上是专家,然后学习接手。数据科学领域正在快速发展,总有新的东西需要学习。与此同时,成为一名高级数据科学家不仅仅是拥有技术能力。

当你达到高级数据科学家的水平时,ms ra Turp 指出,你应该从不同项目的工作中获得更深入的数据科学主要概念和技术的知识。你已经达到了一个点,你有很好的经验,可以学习更高级的话题。此外,Turp 指出,你应该教导和指导更多的初级同事,与他们分享你的经验,以便他们能够从中学习。最后,文章称,高级数据科学家不再只是从事项目工作,而是领导项目,并对项目的成败负责。

高级数据科学家的常见主题

在回顾了这些不同的文章,了解了成为一名高级数据科学家意味着什么之后,我挑选出了一些共同的主题:

  • 他们有很强的技术能力,可以完全掌控待办事项中的一个重要特性。他们可以与关键利益相关者和主题专家合作,并执行任何必要的研究来实施他们的工作。他们有分析和批判性思维能力。
  • 他们可以对问题区域进行故障排除,并研究解决问题的方案。如果他们对问题不确定,他们可以研究和学习如何解决问题,或者与他人合作来帮助他们。
  • 他们可以指导更年轻或经验更少的人,并教给他们所学到的东西。他们可以领导其他为他们的项目做出贡献的成员,并与他们有效地合作。
  • 他们可以着眼于“大局”,了解他们对企业的价值所在。他们可以分析用户需求,了解差距在哪里,并领导整个公司进行变革以采用数据科学实践。他们看到企业的需求,为这些需求设计解决方案,并为公司提供积极的回报。
  • 他们展示了出色的沟通和协作技能,能够向技术和非技术受众解释他们的工作。他们对自己的工作有很好的记录,并且注重细节。他们可以与不同团队的其他人合作,共同完成一个项目。
  • 他们对自己的项目负责,并能完成工作。他们对自己领导的项目的成败负责,并能与其他人合作以保持进度。
  • 技能:数据挖掘、Python / R、机器学习、领导力、沟通、协作、大数据分析、云、预测分析、知道如何学习、导师

最后的想法

总而言之,这些不同的公司在描述高级数据科学家的方式上有许多相似之处和不同之处。具体要求可能因公司而异,但总有一些突出的主题。我的建议是找到一个你喜欢的数据科学领域,并专注于发展你在该领域的技能。与您的公司和经理合作,了解成为高级数据科学家的要求,并确定如何改进才能实现这一目标。

贵公司如何定义高级数据科学家的角色?你认为该职位有哪些有价值的技能?

如果你想阅读更多,看看我下面的其他文章吧!

</7-lessons-learned-from-7-months-of-remote-mentoring-b9cebf0cf222>

管理者应该从数据科学家那里期待什么

原文:https://towardsdatascience.com/what-managers-should-expect-from-data-scientists-278518c9ea84?source=collection_archive---------35-----------------------

办公时间

关于经理问数据科学家什么以及他们应该问什么的神话

照片由 竞选创作者

数据科学进入了大公司的世界,数据就在那里。这类公司的经理们经常会问一些他们实际上并不需要的东西,并且忘记假装拥有那些唯一有用的东西。

“我每个月要一个算法”。是的,我曾经听到有人说过类似的话,恐怕不止我一个人这样说。有多少次一个经理要求你建立算法?一切似乎只与算法有关,好像它们是唯一值得的东西。

但算法不是一切,也不是最重要的。在他们之外还有一个更有趣的世界。所以,如果你是一名经理,不得不雇佣一名数据科学家,那就帮你的公司一个忙,开始要求这些东西吧。

数据分析

为贵公司工作的数据科学家必须有庞大的数据分析背景,有扎实的技能。在应用任何算法之前,必须对数据进行分析,因此您的数据科学家必须处理各种形式和格式的数据,从 SQL 表到 JSON 文档。是的,SQL。SQL 没有消亡,您的数据科学家必须掌握它,如统计、透视和 KPI 生成。

数据可视化

你不能花时间看数字或表格。您必须在几分之一秒内做出决策,因此数据科学家必须具备适当的数据可视化技能。您的 DS 必须能够使用图表和其他可视化工具来表示信息。一个非常好的解释性图表远胜于一张充满文字和数字的 Powerpoint 幻灯片。假装图表,易于阅读的可视化和简单的仪表板。正确的图表可以在项目中发挥作用,有时是你需要的唯一可交付成果。

信息第一

数据科学家提取隐藏在数据背后的信息。记住:数据是容器,信息是内容。你知道你的容器,所以数据科学家必须能够打开它,揭示里面的东西。你是经理,你需要信息。这个道理是没办法逃避的。商业是由根据经验处理信息的人创造的。所以,不要要求数据表或 Excel/CSV 文件。经理不应该质疑任何事情。必须以简单和综合的方式向他们提供正确的信息,例如可视化。因此,请确保您的数据科学家知道数据和信息之间的区别,并且请确保您自己首先知道这一点。

预处理

数据必须妥善处理,就像威尼斯玻璃一样。预处理是让数据科学家处理数据的一套技术,目的是使数据呈现正确的形状。这是一项重要的技能,必须掌握,否则你得到的玻璃不会有正确的形状,必须破坏和重新制作。所以,问问你的数据科学家,他们通常采用哪种预处理管道。正确答案是清理、编码、转换、降维的特征选择。如果你的数据科学家不知道我在说什么,让他们看看我关于预处理的在线课程

功能就是一切

特征是与机器学习相关的数据科学项目中最重要的部分。特征,而不是模型。数据科学家必须使用必要的特征选择技术正确选择特征。这非常重要,你不能贬低这一点。合理的少量特征将使您提取数据背后的信息,解释事情发生的“原因”。数据解释“什么”发生,特征重要性分析可以帮助你理解“为什么”。一些用于减少特征数量的技术是,例如,递归特征消除和基于过滤器的特征选择。在模型准备好之后,你必须计算特征的重要性,例如,使用像 SHAP 这样的技术。通过这种方式,您可以看到特征如何相互作用以产生最终结果。这是一条非常庞大的商业信息。我在我的关于机器学习的在线课程中解释了 SHAP 技术和其他特征重要性方法。

工具

数据科学家是数据和信息的工匠,因此他们必须能够使用多种工具。根据我的经验,Python 是数据科学的行业标准。然后几个库来了,像熊猫,NumPy,Matplotlib,Seaborn。深度学习,要 Keras 和 Tensorflow,PyTorch 作为选项。一些数据科学家可能知道 R,这很好,但如果您的公司一直使用 Python,可能不适合您的生产生态系统。这些是数据科学家必须了解的技术。

最后,模型

不要认为神经网络能解决你所有的问题。请不要这样做。神经网络是人工智能的一个迷人领域,但它们不是最简单的模型,也不能解释任何事情。请记住:模型必须做出正确的预测,这些预测必须随着时间的推移和看不见的数据保持稳定,并且必须帮助您更好地理解业务信息。神经网络很少满足这些条件。对于少数记录数据集,训练好的神经网络可能会过拟合数据并且不稳定。显然,神经网络无助于解释任何事情,因为它们是黑箱。相反,问问你的数据科学家,他们是否使用更简单的模型,更容易训练,产生稳定的结果,并且可以解释。基于树的模型、贝叶斯模型和线性模型是这个问题的很好的答案。询问他们如何使模型的结果随时间保持稳定。正确答案是“我使用集合模型来减少方差”。不要忘记,当您必须处理表格数据时,简单的模型总是比神经网络更好。如果你处理图像、声音和复杂的时间序列,神经网络几乎是唯一可能的选择。但是您的公司可能有一个大型数据仓库,所以您需要处理表格数据。

结论

在本文中,我想帮助管理者向他们的数据科学家或有抱负的员工提出正确的问题。每天都有太多的失败发生,因为管理者没有要求正确的事情。技术有助于达到一个好的目标,但不能代替问正确的问题。

Gianluca Malato 是一名数据科学家,在http://www.yourdatateacher.com*上教授机器学习和数据科学。你可以联系他获取信息和在线课程* 这里

原载于 2021 年 9 月 6 日 https://www.yourdatateacher.com*https://www.yourdatateacher.com/2021/09/06/what-managers-should-expect-from-data-scientists/。***

如何使用微软的 Graph API 从 OneDrive、Outlook 等中查询、创建和分析数据

原文:https://towardsdatascience.com/what-microsoft-knows-about-you-and-how-you-can-use-it-to-generate-your-own-insights-1bd0aa0881ed?source=collection_archive---------10-----------------------

用来自 10 多个不同微软应用的数据构建你自己的 Django 仪表板

作者图片

从我的电子邮件、日历条目、云存储中的文件到团队中的工作组,我在电脑和手机上的很大一部分日常活动都是通过微软应用程序完成的。所有这些数据都存储在微软的云端,不管我喜不喜欢。好在微软提供了一个 API,允许它访问和控制大部分数据,所以为什么不用它来产生你自己的见解呢。

下面的截图应该让你知道我想用这篇文章传达什么。我想让你看看:

  • 我对 API 本身的体验是什么,以及如何构建访问数据所需的查询
  • 认证过程是如何工作的,它给你的应用程序必要的权限
  • 你如何处理和可视化Django 中的数据

带有 Django 的简单仪表板应用程序—图片由作者提供

目录

Graph Quick Start —快速启动 Graph API 的方法

几年前,微软从 Live SDK 转到了 Microsoft Graph。Microsoft Graph 现在是访问 Microsoft 365 中所有数据和见解的 API。[1][2]

有几种方法可以开始使用 Microsoft Graph API。最快的方法是使用图形快速启动,它为认证过程创建一个新的应用 ID 和应用密码,并且已经为您提供了第一个示例项目。

(1)第一步,你需要定义你想要用来构建你的应用的语言。因为我更喜欢 Python,所以示例应用程序将是一个简单的 Django 应用程序。

选择作者的语言-图像

如果你对 Django 不熟悉,可以看一下我之前的一篇文章,里面尽可能简单的解释了 Django 的原理,包括了最重要的几点。如果你喜欢从头开始构建自己的应用程序,你也可以在微软文档中找到一个教程。

(2)选择语言后,快速启动会让您选择直接创建一个带有 App Secret 的新 App ID,稍后您会在授权过程中用到它。

要获得已注册应用的概览,您可以在 Azure Active Directory 下的 Azure 门户中完成。

Azure 门户——作者图片

(3)快速入门为您提供了第一个示例应用程序,其中已经包含了基本结构和身份验证流程。下载代码示例并将其保存在项目字典中。

Django 代码示例—图片由作者提供

代码示例的结构看起来像任何普通的 Django 应用程序。此外,YAML 文件oauth_settings.yml包括用于认证的设置,例如所需的端点、应用 ID 和应用秘密。

项目结构—作者图片

安装要求

(4)为了能够第一次启动应用程序,您必须安装必要的 Python 包。

requirements.txt提供了一种安装整个环境的简单方法。[3]由于应用程序有时需要特定版本的库,因此建立一个虚拟环境是有意义的。[4]为此,导航到您的项目目录并执行以下命令,这将创建虚拟环境virtualenv_graph

python -m venv virtualenv_graph

您将在项目文件夹中找到一个新目录virtualenv_graph,其中包含 Python 解释器的副本。为了实际使用刚刚创建的环境graph-tutorial,您必须通过执行批处理文件activate来激活它,如下所示:

graph-tutorial\Scripts\activate.bat

激活后,您将在 CMD 输入行开头的括号中看到您的虚拟环境的名称。这表明您的环境当前已被激活。使用以下命令,您现在可以将所有必需的 Python 包安装到您的环境中:

作者图片

迁移—将更改传播到数据库

(5)以下命令将应用程序中使用的模型结构映射到数据库:

python manage.py migrate

这将为使用的 Django 应用程序django.contrib.authdjango.contrib.session创建一些默认表。

Django 默认表格-图片由作者提供

启动一个轻量级 web 服务器

(6)命令python manage.py runserver在我们的本地主机上启动一个轻量级 web 服务器。除非另有说明,否则本地 web 服务器运行在端口 8000 和地址 127.0.0.1 上。

示例应用起始页—作者提供的图片

现在,您可以使用 Office365 帐户的登录数据登录。

OAuth 2.0—登录过程如何工作

在下文中,我将简要概述 OAuth 2.0 的功能,解释给定示例代码的作用。

OAuth 2.0 是一种行业标准的身份验证协议,允许用户授予第三方应用程序对用户资源的访问权限,而无需向应用程序提供您的长期凭据。[5][6]

这是可能的,因为 OAuth 授权层将客户机的角色与资源所有者分开。为了更好地理解这一点,我将尝试简要地解释哪些角色是 OAuth 工作流的一部分,以及它们是如何相互关联的。[5]

  • 资源所有者:授权访问资源的实体。在这种情况下,是你,最终用户,授权应用程序访问与你的 Microsoft 365 帐户相关的 Microsoft 云中的数据。
  • 资源服务器:受保护资源所在的位置。
  • 客户端:客户端是请求访问资源的应用程序,在这里是我们刚刚下载的 Django 应用程序。
  • 授权服务器:该服务器为最终用户(资源所有者)提供了认证他/她自己的可能性。正确授权后,授权服务器向应用程序发布访问令牌。

用于 Web 服务器应用程序的 OAuth 2.0 图片由作者提供(灵感来自[7][8])

在下文中,我将向您展示如何使用模板应用程序通过 Python 启动授权工作流。

从 Microsoft Identity Platform 请求访问令牌

如前所述,应用程序首先需要向认证服务器发送请求。因此,我们正在使用 OAuth 2.0 的微软身份平台实现。[7]

单击 Sign-in 按钮调用tutorial.views.py中的 sign_in 函数,该函数又使用get_sign_in_url函数形成请求 URL。

在授权流程的第一步,客户端应用程序将用户指引到/authorize端点。请求包含了【7】:

  • Application ID,在注册时分配给你的应用
  • Scope,定义应用向用户请求的权限。
  • Redirect URI,可通过您的应用程序发送和接收认证响应。

授权过程中需要的所有参数都存储在 YAML 文件oauth_settings.yml中。

Django 中的 OAuth 2.0 工作流—图片由作者提供

(3)在用户对他/她自己进行身份验证并因此授予应用程序访问权限后,身份验证服务器将使用授权码进行响应,并将用户重定向到您指定的重定向 URI。(4)连同您的App IDApp Secret,您可以向授权服务器请求一个Access TokenRefresh Token。(5)然后访问令牌给你访问 API 的能力,至少在scope中定义了所需的权限。

Django 中的 OAuth 2.0 工作流—图片由作者提供

让我们可以访问所请求的资源。在接下来的内容中,我将向您展示如何检索您正在寻找的数据。

使用图形 API 查询数据

为了找到正确的数据端点,我们可以使用图形浏览器。它已经给了你一些关于你的帐户和各种微软应用程序的请求。如果您正在寻找给定查询没有提供的信息,那么看一下文档是值得的。(例如用于 OneDrive

我对我的单驱动器存储中的数据特别感兴趣。然而,这个概念对于 SharePoint、OneNote、Outlook、工作组等等是相同的。

您可能需要为oauth_settings.yml中的 scope 变量添加适当的权限。你会在文档中找到权限的概述。为了在一个驱动器中读写文件,将Files.ReadWrite.All添加到scope中。例如,我想检索文件夹/Bilder/Eigene Aufnahmen中所有文件的信息。连同刚刚生成的访问令牌,我向/drive/root:/<path>:/children发送一个 GET 请求,将数据发送到指定路径中的所有文件。

视图函数one_drive的最后一行是呈现 HTML one_drive.html,我现在创建它来打印我刚刚从 API 获得的数据。HTML one_drive.html类似于calendar.html,它已经是示例应用程序的一部分。

现在我们只需要给路由器urls.py添加查看功能one_drive

# <tutorial.urls.py>from django.urls import path
from . import views

urlpatterns = [
  ...
  path('calendar', views.calendar, name='calendar'),
  path('one_drive', views.one_drive, name='one_drive'),
]

现在http://localhost:8000/one_drive向我展示了一个 HTML 表格,其中包含文件夹/Bilder/Eigene Aufnahme中的所有文件。

用 Plotly 分析和可视化数据

对于数据的可视化,我使用 Plotly。如果还没有这样做,用 pip 按如下方式安装:

pip install plotly

下面我感兴趣的是照片拍摄的时间。
为了清晰起见,我按照拍摄的日历周总结了这些照片。

因此,我在字典files['values']中添加了一个新的键-值对,它被定义为创建日期的日历周。之后,我将字典的值转移到熊猫数据框中。Pandas 为我提供了许多操作数据框的方法,其中一种我将在下面使用。操作groupby 基于属性CreationWeek对所有条目进行分组,方法.count()对条目的出现次数进行计数。

想象成柱状图,整个事情看起来是这样的。这是一个简单的例子,展示了如何逐步构建自己的 dashboard 应用程序,向您展示您的 Microsoft 服务的最重要的关键数据。

作者用 plottly-Image 将数据可视化

总结

在这篇文章中,我试图分享我使用 Microsoft Graph API 的经验:

  1. 使用微软身份平台的认证流程
  2. 通过图形 API 查询数据
  3. 使用 Plotly 可视化数据

除了检索数据,图形界面还提供了广泛的 POST 选项。可以通过 HTTP 请求添加日历条目、上传文件或创建新的微软团队频道。这可以帮助你自动化你的过程。

参考

[1]微软图形概述,https://docs.microsoft.com/en-us/graph/overview

[2]从 Live SDK 迁移到 Microsoft Graph,https://docs . Microsoft . com/en-us/one drive/developer/rest-API/concepts/Migrating-from-Live-SDK?view=odsp-graph-online

[3]皮普安装,【https://pip.pypa.io/en/stable/reference/pip_install/】T21

[4]虚拟环境和包,https://docs.python.org/3/tutorial/venv.html

[5] OAuth 2.0 授权框架,https://auth0.com/docs/protocols/protocol-oauth2

[6] OAuth 2.0 Workflow,https://www . IBM . com/support/knowledge center/en/ss4j 57 _ 6 . 2 . 2 . 6/com . IBM . Tivoli . FIM . doc _ 6226/config/concept/OAuth 20 Workflow . html

[7]微软身份平台和 OAuth 2.0 授权代码流,https://docs . Microsoft . com/en-us/azure/active-directory/developer/v2-OAuth 2-授权代码流

[8]从 web 服务器应用程序调用安全 API,https://oauth . vlaanderen . be/authorization/Help/API/AuthorizationCodeGrant

在你的圣诞晚会上会放什么音乐?

原文:https://towardsdatascience.com/what-music-would-have-been-playing-at-your-christmas-party-8db52f1bdfd7?source=collection_archive---------34-----------------------

通过数据探索圣诞图表

尤金·日夫奇克在 Unsplash 上拍摄的照片

几十年来,争夺英国圣诞排行榜第一名的斗争一直激烈,艺术家们发布了季节性歌曲和圣诞主题视频,或者试图用可靠的流行歌手来超越节日曲调。

就在我们说话的时候,YouTube 上的 LadBaby 正在试图打破由披头士在 1967 年创下的最多圣诞节冠军的记录。

为了融入节日气氛,我们希望在平安夜宣布获胜者之前,使用 Python 来探索这一现代圣诞节传统背后的数据。

目标是:了解年度趋势是如何发展的,以及是什么让圣诞歌曲流行起来。

入门

让这个圣诞活动开始的最好方法是找到一些可靠的、全面的关于我们假期收听习惯的数据。

我们将使用的数据集包括所有英国圣诞节排名第一和第二的信息,以及来自官方图表的 2011 年至 2020 年的十大圣诞图表。

从 2017 年到 2020 年,我们还将通过 Spotify 图表使用每周 12 月的前 200 个流。此外,还补充了 Kaggle12 月最受欢迎歌曲的信息。

名字有什么意义?

你知道吗,只有七分之一(准确地说是 14.5%)的圣诞排行榜有圣诞主题的标题?

这些如图 1 所示,包括邦迪乐队的《他们知道今天是圣诞节吗》,这是唯一一首超过一次的歌曲;事实上是三次。

占据圣诞节排行榜第二位的歌曲数量相当,它们使用了圣诞节术语,玛丽亚·凯莉曾两次位居第二,但从未登上榜首。

图 1:圣诞排行榜上排名第一和第二的圣诞主题歌曲数量(图片由作者提供)

不要做吝啬鬼

想帮助你的歌曲在“给予”季节登上排行榜吗?迎合听众的慈善天性。

占据英国排行榜榜首的歌曲中有 10 首是慈善单曲。

这意味着 14.5%的圣诞歌曲是由支持值得关注的事业的团体演唱的。其中包括 Band Aid(三次),四个不同的合唱团,一个名为正义集体的名人合唱团,军嫂,NHS 合唱团,以及一个为王太后生日举办的学校合唱团。

在过去的三年里,LadBaby 已经连续举办了三次圣诞慈善活动,用香肠卷主题的封面为 Trussel 信托基金筹集资金。

但是,在所有这些慈善单曲中,只有邦迪乐队曾经重新制作过。

你相信布洛比先生吗?

虚构人物两次荣登圣诞排行榜榜首:建筑师鲍勃和英国偶像布洛比先生。不幸的是,Blobby 先生的圣诞热门歌曲《Blobby 先生》被誉为有史以来最糟糕的歌曲。

同样数量的虚构人物取得了第二名:1997 年的天线宝宝,以及 1998 年《南方公园》中的厨师,他被辣妹组合连续第三年的圣诞节第一名拒之门外。很不幸,主厨。

Wombles 夫妇和 Tweenies 夫妇也分别在 1974 年和 2001 年出价,但都不高于圣诞节那周的第五名。

另一个值得注意的新奇事物是“驴子多米尼克”,在 2011 年的圣诞综合报道中排在第 3 位,此前 BBC 广播 1 台发起了一场运动来帮助它达到第 1 位。

图 2:圣诞节销量第一的歌曲类别(作者图片)

再呆一年

我们认为是经典圣诞歌曲的单曲中很少能进入第一名。事实上很少有人成功过。

著名的重击!s 的《去年的圣诞节》是销量最高的单曲,但却从未登上榜首,直到 2020 年才最终获得成功。它现在保持着从释放到达到 1: 36 年之间最长时间的记录。(这可能是由于 Whamageddon 的出现,这是一种游戏,人们在圣诞节前会主动避开这首歌。)

在所有的圣诞排行榜冠军中,只有六个在 Spotify 上有很高的流媒体播放量。

官方图表数据考虑到了视频流,因此在过去三年中,圣诞排行榜第一名一直由“LadBaby”保持,他在 Youtube 等流媒体平台上成名,并在 iTunes 和亚马逊上购买歌曲。

在 Spotify 上播放量最高的排行榜中,有三首歌包含了“圣诞节”这个词,显然是圣诞经典歌曲:斯莱德(Slade)——大家圣诞快乐(Merry Xmas Everybody),希金斯·史蒂文斯(Chris)——大家圣诞快乐(Merry Christmas Everyone),以及 Mud——孤独的这个圣诞节(Lonely This Christmas)。

克里夫·理查德的《槲寄生与葡萄酒》每年都会播放,但非圣诞主题的排行榜也是如此,包括 East 17 的《再待一天》和艾德·希兰的《完美》。不过,后两个刚好有圣诞主题的音乐录影带。

12 月份圣诞歌曲涌入排行榜,极大地扩大了所有歌曲的年龄分布。除此之外,图表中的发布时间不会超过 2016 年。

图 3:2017–2020 年 12 月按年份分类的数据流(图片由作者提供)

从 80 年代到 00 年代,发行了大量的圣诞经典歌曲,2000 年代的假日单曲还没有达到流行的高度。

新的圣诞版本似乎最初出现在图表中,但近年来,有一种趋势是旧版本重新进入圣诞前十名。

在 2011 年至 2015 年的任何圣诞排行榜中,只有两个条目来自往年,但从 2017 年开始,每年都有至少两个节日最爱进入前 10 名,玛丽亚·凯莉的“我想要的圣诞礼物是你”[正确]自 2016 年以来每年都进入前 10 名。

图 4:每年圣诞节前十名排行榜的发布频率(图片由作者提供)

破解圣诞经典

那么,是什么造就了经典的圣诞歌曲呢?有哪些歌曲回归成为圣诞排行榜的中流砥柱?

图 5:12 月图表中每位艺人的歌曲数量,以及重新绘制的累计年数。 (图片作者)

有多种尝试在单一的重新发布和重新母带,成功的情况下,乔纳路易,克里斯雷亚和保罗麦卡特尼,他们都延长了他们的图表停留在这一战略。

数据显示,年复一年保持在排行榜上的单曲是牢固确立的圣诞派对必需品——想想维扎德、穆德、埃尔维斯、埃尔顿。

但是新的艺术家也在制作圣诞歌曲。利用他们贪婪的粉丝群,爱莉安娜·格兰德、酷玩乐队和贾斯汀·比伯近年来已经登上了排行榜。显然,成功、名声和庞大的追随者可以推动排行榜,不管这首歌是不是下一首《最后的圣诞节》。

迈克尔·布莱是一个突出的圣诞现象,他的专辑名副其实地命名为“圣诞”,这是一系列经典圣诞歌曲的现代录音,使他几乎和圣诞老人一样具有标志性。

他的圣诞歌曲比任何人都受欢迎,他的翻唱已经成为这些歌曲事实上的版本。例如,“它开始看起来很像圣诞节”在英国排行榜上排名第 7;但是宾·克罗斯比的原版在官方图表出现之前,佩里·科莫的第二个最成功的版本排在第 47 位。

图 6:大量流传的圣诞歌曲流派分类。(图片由作者提供)

仔细观察去年 12 月在 Spotify 上大量流传的不同圣诞歌曲的风格,可以发现大多数都是“成人标准”,即“老歌”。

正如我们之前看到的,获得圣诞热门歌曲的最佳策略之一是在 80 年代发行。除此之外,最适合流行圣诞音乐的流派是流行舞曲(尽管也有许多其他类型的流行音乐,占所有流派的 23%)和专辑摇滚。

X-Mas 因子

很多年来,《圣诞第一》都是当年的《X-Factor》赢家和其他艺人之间的直接竞争。

在播出的 17 年 X-Factor 中,获胜者七次获得圣诞节冠军。10%的圣诞节第一名归功于 X 因素的赢家,而 47%的 X 因素赢家有一个圣诞节第一名。

这些歌曲都不是专门以圣诞节为主题的。

有趣的是,X-Factor 的一些顶级人才,如 Little Mix,James Arthur 和 Louisa Johnson,在赢得比赛的那一年从未登上排行榜榜首。2014 年获奖的本·哈诺(Ben Haenow)直奔《圣诞节》第一名,但自 2015 年以来,他只有一首歌进入前 40 名。

一些突出的圣诞节异常现象是马特·特里,他的 X-Factor 首张专辑《圣诞节对我意味着什么》与其他 X-Factor 首张单曲不同,而丽安娜·刘易斯的圣诞热门歌曲《再睡一会儿》自 2013 年发行以来一直可靠地重新制作。

图 7:圣诞排行榜上 X- Factor 赢家的排行榜(图片由作者提供)

广告的力量

近年来,竞争最佳节日广告的公司数量激增,约翰·刘易斯确立了这一趋势,每年都遥遥领先。

如果你看过广告,你会知道它们包括一个经典热门歌曲的催人泪下的封面,以吸引所有年龄的人。其中一些非节日主题的歌曲已经成为圣诞节的必备歌曲。

加布丽埃勒·阿普林录制的《爱的力量》和莉莉·艾伦翻唱的《只有我们知道的地方》是两首登上排行榜第一的广告原声,尽管不是圣诞节排行榜第一。加布里埃拉·阿普林的封面自发布以来已经两次重新进入排行榜。

更多最近的广告歌曲已经登上排行榜,但没有一首歌曲在发行的那一年取得了超过 10 的峰值位置。也就是说,除了莉莉·艾伦的《只有我们知道的地方》(Somewhere Only We Know)的成功之外,该片自发行以来的八年中有六年都获得了票房冠军,并成为许多人的节日最爱。

另一个值得注意的通过广告进入圣诞排行榜的是 G-Eazy 和 Grace(现在的 SayGrace)的“你不拥有我”,它在弗雷泽之家的圣诞广告中占据了第六位。当时它的图表只有 44。

近年来的圣诞图表以不可预测著称。但是年复一年,我们听着音乐,穿越时间——从 Bing 和 Ella 到 80 年代浪漫、夸张的合成器——我们听到新的 bop,拥抱对过去圣诞节的怀旧。

那么 LadBaby 今年会通过废黜 Fab Four 而创造历史吗?

我想我会忙着用迈克尔和苏悦华的声音装饰我的大厅而无暇顾及。


使用 Filament 的协作 Python 笔记本完成了对这些节日数据的分析。

没人想到的是:AGI 会让所有人大吃一惊

原文:https://towardsdatascience.com/what-no-one-is-thinking-agi-will-take-everyone-by-surprise-a76903474c79?source=collection_archive---------18-----------------------

人工智能

这就是为什么我们可能在不知道的情况下创造了 AGI。

里卡多·安南达尔在 Unsplash 上拍摄的照片

人们对人工智能(AGI)的兴趣如此之大,以至于我们可以用关于它的书填满整个中文房间。然而,你不会在他们身上找到任何结论性的发现或理论。没有人知道 AGI 会是什么样子,我们什么时候会实现它,或者我们应该如何进行下一步。如果我们没有关于 AGI 的答案,为什么有这么多关于它的书、文章和论文?

物理学家劳伦斯·克劳斯在与诺姆·乔姆斯基的对话中拿这个悖论开玩笑。他说“一个领域的知识和关于这个领域的书籍数量成反比。”有很多关于 AGI 的信息,但真正了解的却很少。

AGI 可以说是人类历史上最伟大的发明。我们一直在问关于我们独特智能的问题,但自从 20 世纪中期计算机科学革命以来,我们已经开始最大程度地追求这一追求。巨大的资金和兴趣支持了过去 60 年的人工智能研究,但我们离实现 AGI 仍然很远。尽管人工智能在某些任务上已经达到了人类的熟练程度,但它仍然显示出狭隘的智能。

GPT-3 &公司:我们离 AGI 最近

2020 年 5 月,OpenAI 的 GPT 3 号取得了最新突破。这个系统显示了比它的前辈更广泛的行为。它是用互联网的文本数据训练出来的,已经学会了学习;这是一个多任务元学习者。它可以从几个用自然语言写的例子中学习完成一项新任务。然而,尽管现在关于 GPT 3 号是 AGI 的争论已经尘埃落定——它离我们还很远——但它产生了一些疑问。

2020 年 7 月,OpenAI 发布了一个测试版 API,供开发人员使用该系统,很快他们就开始发现意想不到的结果,甚至连创造者都没有想到过。给定一套英文说明,GPT-3 被发现能够编写代码,诗歌,小说,歌曲,吉他标签,乳胶…因此,炒作变得疯狂,GPT-3 的受欢迎程度飙升,成为重要媒体杂志的头条新闻。

而炒作一出现,反炒作也不落后。专家和非专家试图降低炒作的语气。GPT-3 被描绘成一个全能的人工智能,但事实并非如此,这不得不说。甚至 OpenAI 的首席执行官 Sam Altman 也说这太过分了:“[GPT-3]令人印象深刻[……]但它仍然有严重的弱点,有时会犯非常愚蠢的错误。人工智能将改变世界,但 GPT 3 号只是非常早期的一瞥。”

人们开始寻找 GPT 3 号的局限性:它在哪里失败了,它不能完成什么任务,这是它的弱点……他们发现了很多——甚至可能太多。这可能是科技博客作者 Gwern Branwen 的想法。GPT 3 号并不完美,也不是 AGI,但是人们在 GPT 3 号应该成功的地方发现了失败。

为了展示科学的严谨性,格温汇编了大量已发表的例子,并重新测试了那些对 GPT-3 来说太难的例子。他争辩道提示(输入到 GPT-3 的描述或例子)经常被定义得很糟糕。他说,提示被更好地理解为一种新的编程范式,必须相应地加以处理:

“抽样可以证明知识的存在,但不能证明知识的不存在

如果提示写得不好,没有包括足够的例子,或者使用了错误的采样设置,GPT-3 可能会“失败”。当有人展示 GPT-3 的“失败”时,我已经多次证明了这一点——失败是他们自己的。问题不在于给定的提示是否有效,而在于任何提示是否 works⁠."

他证明了人们在 GPT 3 号上发现的很大一部分弱点是他们在理解如何与系统沟通方面的失败。人们找不到 GPT-3 的极限,因为这超出了他们的测试方法。

极限的悖论

凡事都有极限。宇宙是有极限的——物理定律之外的事情是不可能发生的,无论我们怎么努力——甚至是无限的——自然数的集合是无限的,但它不包含实数的集合。

GPT-3 有局限性,而我们,那些试图发现它们的人,也有局限性。格温证明了在寻找 GPT 3 号的极限时,我们找到了自己的极限。不是 GPT 3 号没有完成某些任务,而是我们找不到合适的提示。我们的极限是阻止 GPT 3 号执行任务。我们阻止了 GPT 3 号发挥其真正的潜力。

这就提出了一个直接的问题:如果 GPT-3 的局限性经常被误认为是我们的局限性,我们如何精确地定义该系统能做什么或不能做什么的界限?如果没有办法将失败的是我们的情况与失败的是 GPT-3 的情况分开,未知变量的数量将大于方程的数量,从而不可能找到解决方案。

这可以扩展到我们未来创造的任何其他人工智能。如果 AGI 知道的比我们能评估的更多,我们只能通过观察它的行为来后知后觉地知道它能做什么或不能做什么。如果它最终变得有害,我们只有在事后才知道(就像 GPT-3 的偏向性所发生的那样)。

最终,我们是一个试图评价另一个有限系统的有限系统。谁能保证我们的极限在各方面都超越他们?我们有一个很好的例子说明情况可能并非如此:我们非常不善于评估自己的局限性。我们不断为自己能做的事情感到惊讶,无论是个人还是集体。我们不断打破身体和认知的极限。因此,我们的测量工具很可能达不到足够强大的人工智能的行动能力。

我们还没意识到,AGI 就来了

综上所述,一个非常可怕的问题出现了:我们能在不知道的情况下创造一个 AGI 吗?或者甚至没有能力最终知道它?我们的测量工具既不是无限的也不是无限的。我们可以创造一个无法评估其局限性的人工智能。GPT 3 号,不是 AGI(甚至也不接近),已经部分超出了我们的工具。如果这是真的,下面的假设场景是可能的:我们将越来越接近 AGI,我们的测量工具,定义我们在感官之上感知的现实,将保持落后。当我们最终到达 AGI 时,我们的工具不会反映它,尽管它是真实的,我们不会知道它。

因为我们在探索创造 AGI 的过程中是在黑暗中冒险,在不知道的情况下实现它不属于已知未知的范畴(我们知道我们不知道的事情),而是属于未知的未知的范畴。我们甚至不会知道我们不知道它。我们将继续相信,真正的现实是我们的工具告诉我们的。我们不会怀疑除此之外是否存在现实,因此,我们不会试图在那里找到任何东西。

这种可能性将保持不被评估,并永远进入未知的黑暗地方。在 AGI 决定展示自己之前,情况将会如此。然后,我们将不得不重新考虑我们所有的计划,并相应地落后几步。这并不意味着 AGI 将是有害或危险的,但不知道如此有影响力的东西总是一种风险。让我们希望 AGI 最终像《T4 I 机器人》中的桑尼一样友好。它会是一个很好的伴侣。

最后的想法

我们一直在想 AGI 会是什么样子,我们会如何创造它,或者什么时候……但是没有人想过当它发生的时候我们是否能够意识到它。我们的测量工具是有限的,我们改进它们的能力也是有限的。GPT 3 号已经表明我们的工具不够先进。图灵测试够了吗?我们能创造一个足够的测试吗?

AGI 会让我们大吃一惊。当我们不能评估我们正在询问的事物的存在时,我们现在问的问题似乎是不相关的。这是我们需要的第一个答案,我们很快就需要它。

免责声明:本文观点为个人观点,不得与他人分享。欢迎在评论中继续讨论。你认为这种情况可能发生吗?我很想看看你要说什么!

跟我一起去未来旅行 了解更多关于人工智能、哲学和认知科学的内容!

推荐阅读

[## GPT 三号吓到你了?遇见武道 2.0:1.75 万亿参数的怪兽

towardsdatascience.com](/gpt-3-scared-you-meet-wu-dao-2-0-a-monster-of-1-75-trillion-parameters-832cd83db484) [## 人工智能不会很快掌握人类语言

towardsdatascience.com](/ai-wont-master-human-language-anytime-soon-3e7e3561f943)

混淆矩阵到底是什么?

原文:https://towardsdatascience.com/what-on-earth-is-a-confusion-matrix-d1717315106f?source=collection_archive---------38-----------------------

验证模型准确性的混淆矩阵的解释和使用。

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

介绍

在数据科学中,预测总是需要用一些准确性指标来验证。这可能暗示了模型性能的隐现问题。衡量这一点总是很重要的,因为不使用具体的验证,就没有真正的方法来评估一个模型是否正确地完成了工作。由于模型是独立工作的,不需要人类的参与,在使用它们之前对它们进行测量无疑是一个好主意。

当然,为了测量模型的准确性,可以使用几种不同的度量标准。这些指标也可能取决于您试图解决的问题的类型。例如,具有连续目标的回归模型很可能会使用 r 度量,而不是标准的分类准确性。幸运的是,我最近写了一篇文章,通过一些流行的标准来验证机器学习模块,甚至深入到它们背后的数学。如果你对那篇文章感兴趣,你可以在这里阅读:

[## 从头开始编写验证指标

towardsdatascience.com](/writing-validation-metrics-from-scratch-e7d10af59f98)

混淆矩阵

既然我们理解了为什么验证是重要的,并且对可用于测量模型的其他度量有了一定程度的了解,那么什么是混淆矩阵,以及什么使它成为模型验证的伟大工具呢?混淆矩阵,有时也称为误差矩阵,是一种矩阵或表格布局,允许对分类算法内的性能进行可视化。

您可能还记得,我提到了另一个通常用于分类准确性的指标。这个度量被称为广义百分比准确度。为了获得这个度量,我们简单地将 y-hat(我们预测的元素)中的每个值与测试目标中的值进行比较。之后,我们将正确答案的数量除以数组中值的数量。这将给我们一个正确预测的百分比。如果我们从 1 中减去这个,那么我们将得到模型的误差。在 Python 中,这样做的函数如下所示:

def categorical_acc(y, ŷ):
    n = len(ŷ)
    score = 0
    for i, w in zip(ŷ, y):
        if i == w;
            score += 1
    return(score / n)

这是判断绝对准确性的一个很好的方法。百分比值非常容易解释,如果我们告诉某人我们的模型有 98%的准确性,他们可能会知道这意味着什么。考虑到这一点,当然有一段时间这可能是最好的度量,即使是在展示你的模型的准确性的时候。例如,如果我向可能不知道混淆矩阵是什么的业务经理演示,那么对我来说,提供一个以易于解释的百分比记录的验证度量标准是很有意义的。

也就是说,虽然广义百分比准确性有时间和地点,但也有使用混淆矩阵的有效时间。混淆矩阵是一个很好的可视化工具,特别是当你和你的科学家同事一起工作的时候,它们可以告诉你更多关于你的模型的信息,而不仅仅是广义百分比的准确性。例如,我们可以判断我们的目标是否有一个特定的类,可能是多数类,被预测得太频繁了。这可能表明我们可能想要优化一些超参数,更可能使我们的数据多样化一些。在这样的例子中,混淆矩阵对于解决你的分类模型的问题非常有用。

混淆矩阵和其他典型的分类矩阵之间最显著的区别是混淆矩阵允许我们理解我们的单个类是如何使用我们的模型的。也就是说,使用混淆矩阵,我们不是一次性估计整个值集的准确性,而是对每个特征的负值和正值进行舍入,并将它们放在一起以便于比较。

混淆矩阵还允许我们评估第一类错误或第二类错误的可能性,这在处理分类时可能是有价值的信息。

结论

混淆矩阵是数据科学家的宝贵财富。它们允许我们非常有效地快速比较不同的特性和错误返回。虽然分类准确性肯定有一席之地,但这项技术向我们展示了更多关于我们的模型和数据的信息,而不仅仅是准确性得分。这个指标不仅可以用来验证你的模型,还可以很容易地用来诊断为什么你有你的准确性。感谢您的阅读!

高斯过程到底是什么?

原文:https://towardsdatascience.com/what-on-earth-is-a-gaussian-process-992a6fa2946b?source=collection_archive---------30-----------------------

对 Martin Krasser 的 GP 回归 Python 实现的直观、无假设的探索

信用:Pixabay

TL/DR

高斯过程是非参数模型。相比之下,线性回归是一个参数模型。考虑一下y = m*x + b。在这个模型中,mb是参数,分别表示,“平均,缩放 x 乘 m,移位 b 得到 y. ”学习到的参数大大浓缩了关系的本质。相比之下,非参数模型不提供对{x:y}关系的这种简单概括,它提供零参数(或者可能是 )无限参数 ),基于您的观点!)在高斯过程中,每个训练数据点都是它自己的维度(与来自同一维度的几个观察相反。)然而,如果我们说每个点都是它自己的平均值,方差为零,那么我们的函数将会过度波动(过度拟合),并且不能为测试数据点提供推断。使用了一个核函数,它很大程度上回答了问题“任何给定的一对数据点应该相互通信多少?“在径向基函数(RBF)核中,一个给定的数据点只与它的近邻进行明显的通信,而与远处的近邻的通信则可以忽略不计。这种设计允许高斯过程回答问题,“对于任何测试 X,其测试 y 应该与其(训练)X 邻居有多相似?“两个关键见解:(A) 预测的 Y 是训练 Y 的线性组合,用相应 X 的距离加权。以及(B) 这些观察到的训练点模型参数——理论上可以是无限的(或者至少没有固定的上限!)利用了两种关系:{X_train,Y_train}关系和{X_train,X_test}关系。通过对给定{X_train,X_test,Y_train,Y_test}的联合分布建模(使用条件高斯规则),我们能够推断出“函数”上的分布,其描述了我们关于 Y_test 的信念。本质上,每个训练数据点都是一个参数。由于这个原因,训练数据不能被丢弃,因为它证明了描述我们关于 Y_test 的信念的(潜在无限的)参数。

介绍

下面,我将从马丁·克拉瑟写的博客中探索代码,它从头实现了高斯过程。我发现代码像宣传的那样工作,但是对于不熟悉高斯过程的人来说,解释不够“通俗易懂”。这篇文章将有助于使高斯过程看起来非常直观;最后,上面的 TL/DR 将看起来非常清晰。

内核

下面是作者实现的 RBF 内核:

def kernel(X1, X2, l=1.0, sigma_f=1.0):
    sqdist = np.sum(X1**2, 1).reshape(-1, 1) + np.sum(X2**2, 1) -2 /    
    * np.dot(X1, X2.T)
    return sigma_f**2 * np.exp(-0.5 / l**2 * sqdist)

在英语中,函数的核心是:x_1^2 + x_2^2 — 2*x_1*x_2(x_1 — x_2)^2。然后,该结果以与正态分布 PDF 的接近的方式进行缩放和指数运算。

实际例子

import numpy as np
import random
import matplotlib.pyplot as plt
dims = 25
x = np.linspace(1,10,dims)
y = np.sin(x) +2
plt.plot(x,y)

信用:我

训练点的线性组合

cov = kernel(x.reshape(-1,1),x.reshape(-1,1),l=0.5,sigma_f=0.5)
gp1 = np.dot(cov,y)
plt.scatter(x,y)for i in range(5):
    samples = multivariate_normal(mean=gp1,cov=cov)
    plt.plot(x,samples)

信用:我

在上面的图中,我们将真正的 x 和真正的 y 分散在蓝色中,上面有一些线形图。这些线图是来自多元正态分布的样本,其中“均值函数”(多元高斯中的μ参数)是权重(核输出)与目标(训练 y 值)的点积,如 TL/DR 中所述,而协方差是(σ参数)是核输出本身。我们可以看到,已经学习了一般形状,但是这些样本都需要缩放和移动,因为它们当前根本不匹配训练数据点尽管如此,我们可以清楚地看到,高斯过程只是核权重和训练点的线性组合。

那么,为什么我们非常不准确呢?我们还没训练模型呢!考虑线性回归,如果我们只是简单地随机猜测 m 和 b 的值,然后作图,我们会对它的不准确性感到惊讶吗?一点也不。高斯过程的棘手之处在于,训练数据点 模型参数,但这并不意味着不需要模型训练。

贝叶斯规则

posterior  = likelihood * prior    / evidence
P(theta|X) = P(X|theta) * P(theta) / P(X)
           = P(X,theta) / P(X)
           = joint      / marginal
           = conditional

在上面的文章中,我证明了参数推断中使用的熟悉的贝叶斯规则可以重新排列以产生条件分布。因为我们的模型参数 训练数据点,所以我们想问这个问题,“给定 {X_test,X_train,Y_train},我们相信{Y_test} 什么?”

X1, X2 = X_train, X_test
Y1, Y2 = Y_train, Y_test posterior = joint          / marginal 
           = P(Y2,Y1,X2,X1) / P(Y1,X2,X1)
           = P(Y2|Y1,X2,X1)
           = conditional

众所周知,如果联合分布是高斯分布,那么它的变量子集(边际)的分布也是高斯分布。因此,我们只需要假设P(Y1,Y2,X1,X2)是高斯的,以便利用高斯条件规则,这给我们后验分布(这允许训练/预测。)

高斯条件作用

首先,让我们考虑一下条件均值公式。我们取 x_1 的平均值,用某个因子来更新它。该系数(在下面的公式中从右向左读)为:

  1. 观察到的具体距离 x2 距离T5 其平均值。这就回答了问题,“特定的 x2 与 mu_2 的关系有多令人惊讶?
  2. 精度矩阵的元素(协方差矩阵的逆矩阵),对应于(x2,x2),它回答了问题“x2 关于 mu_2 相对于所有其他变量的聚集有多紧密?值得注意的是,精度矩阵中的每个元素都不是简单的1/element,因为矩阵求逆是一个更复杂的过程,同时考虑每个关系。
  3. 协方差矩阵的一个元素,对应于(x1,x2),它回答了问题,“(平均而言),x1 和 x2 一起移动了多少?

将这三者放在一起,我们就可以清楚地表达出我们对 x1 的期望给定一个观察到的 x2。

mu_1|2 = mu_1 + cov_[1,2] * inv(cov_[2,2]) * (x2 - mu_2)

其次,我们来考虑一下条件协方差公式。我们取 x1 的方差,并从中减去一个因子(从右向左读):

  1. (x1,x2)的协方差(见上一节)
  2. 精度约为(x2,x2)(见上一节)
  3. (x1,x2) — 的协方差再一次

将元素 1 和 2 放在一起,你实际上有一个比率,它说“( x1,x2)之间的关系的相对强度是多少,当我们考虑 x2 围绕 mu_2 聚集的紧密程度时(尽管它与所有其他变量都有关系?)“这只是一个比值;当我们将其投影回协方差(x1,x2)时,我们缩小该协方差——回答问题,“在我们考虑 x2 关于 mu_2 的聚集程度之后,协方差的哪一部分剩余?

最后一步是简单地从 x1 的方差中去除这个因素。“当我们去掉 x2 的作用,因为它的位置是 已经知道的 (又名条件作用)时,x1 变化了多少?

cov_[1|2] = cov_[1,1] - cov[1,2] * inv(cov_[2,2]) * cov_[1,2]

如果你想看关于这些公式的来源的详尽证明,请自便。请注意,这个证明是线性代数错综复杂的冗长演示。因此,我试图直观地解释这些公式的效果。

内核调节

我前面介绍过这个思想,训练数据观测值就是这个模型的参数;由内核产生的权重确定用于推断对应于任何给定 x 的 y 的 y_train 值的特定线性组合。由于这种关系,“均值函数”通常被设置为 0。(换句话说,没有必要给一个已经非常灵活的模型增加额外的复杂性。)你会注意到在下面的公式中 mu_1 和 mu_2 已经被 0 代替了。

mu_[2|1]  =  0 + K_[1,2] * inv(K_[1,1]) * (y1 - 0)
          =      K_[1,2] * inv(K_[1,1]) *  y1cov_[2|1] = K_[2,2] - K_[1,2] * inv(K_[1,1]) * K_[1,2]

Python 中的后验函数

from numpy.linalg import invdef posterior(X_test, X_train, Y_train, l=1.0, sigma_f=1.0):
    K_train = kernel(X_train, X_train, l, sigma_f) 
    K_joint = kernel(X_train, X_test, l, sigma_f)
    K_test = kernel(X_test, X_test, l, sigma_f) + 1e-8 * \
                    np.eye(len(X_test))
    K_train_inv = inv(K_train)

    mu_joint = K_joint.T.dot(K_train_inv).dot(Y_train)
    cov_joint = K_test - K_joint.T.dot(K_train_inv).dot(K_joint)

    return mu_joint, cov_joint

为了演示一个重要的概念,我将只提供训练数据,而不提供测试数据,然后从中抽取样本。

x1 = x.reshape(-1,1)
mu_test, cov_test = posterior(x1,x1,y)
samples = np.random.multivariate_normal(mu_test, cov_test, 3)plt.scatter(x1,y)
for i in range(len(samples)):
    plt.plot(x1,samples[i])

信用:我

请注意,我们对 3 个不同的“函数”进行了采样。(函数是指多元分布,其中每个维度代表同一维度的一系列唯一观察值。)但是每次都抽取完全相同的点!这怎么可能?

让我们只看协方差函数的第一行。

cov_test[0,:].round(1)
>>>
array([-0., -0., -0.,  0.,  0.,  0.,  0.,  0., -0., -0., -0., -0., -0., -0., -0., -0., -0., -0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

每个元素的方差为 0。这意味着平均值将在每次被采样,因为没有可变性!同样,在对 y1 进行点积之前,让我们看看均值函数。我们希望看到(条件内核,Y_train)点积中使用了什么样的 权重:

def conditional_kernel(X_test, X_train, Y_train, l=1.0, 
                       sigma_f=1.0):
    K_train = kernel(X_train, X_train, l, sigma_f)
    K_joint = kernel(X_train, X_test, l, sigma_f)
    K_test = kernel(X_test, X_test, l, sigma_f)
    K_train_inv = inv(K_train)
    return K_joint.T.dot(K_train_inv)t = conditional_kernel(x1,x1,y1)
t[0,:].round(1)
>>>
array([ 1., -0., -0.,  0.,  0., -0.,  0., -0., -0., -0.,  0., -0.,  0.,  0., -0., -0.,  0., -0.,  0., -0., -0.,  0., -0.,  0., -0.])

注意,在上面观察到的权重中,第一个元素的权重为 1,所有其他元素的权重为 0 。在线性组合方面,Y_train 中的第一个观察值被预测为自身的 100%,方差为 0。因此,为什么多变量高斯采样一个且只有一个唯一序列。

那么,为什么会发生这种情况呢?嗯,我们已经要求高斯过程为序列中的每个观察值拟合一个维度——它确实做到了!然而,这并不能帮助我们推断出关于测试点与观测值之间的任何关系。

下面,我们将看看一个(几乎)合适的高斯过程,它使用训练观测值作为参数来估计测试输入。

dims = 10
x_train = np.linspace(1,10,dims).reshape(-1,1)
y_train = np.sin(x_train) +2
x_test = np.linspace(1,10,100).reshape(-1,1)
mu_test, cov_test = posterior(x_test,x_train,y_train)
samples = np.random.multivariate_normal(mu_test.transpose()[0],  
                                        cov_test, 5)plt.scatter(x_train,y_train)
for i in range(len(samples)):
    plt.plot(x_test,samples[i])

信用:我

现在我们可以看到高斯过程是最(和最少!)自信。在点与点之间最远的区域有更多的可变性,因为要猜测 y_train 值的特定线性组合要分配给任何给定的 x_test 值。总的来说,它对自己的估计非常有信心!

注意,每个被采样的函数都与所有训练数据点相交。这就是调理的效果。方差为 0,并且训练数据点每次都预测它们自己,准确地说是。但在现实中,我们有时希望放松这种约束,以允许更平滑的函数,这不太可能过度适应潜在的离群值。

有噪声的预测

放松每个训练数据点必须精确自我预测的约束是一个简单的改变,我们简单地获得关于目标变量的方差,并将其添加到协方差函数中沿对角线的所有元素。这似乎是一个奇怪的步骤,但是请记住协方差矩阵中的对角线元素反映了元素的方差;非对角线元素反映元素之间的关系。如果我们想放松这个约束,但又不想负面影响内核评估训练数据点之间相似性的方式,那么我们只需增加对角线上的元素。

def posterior(X_test, X_train, Y_train, l=1.0, sigma_f=1.0, 
              sigma_y=1e-1):
    K_train = kernel(X_train, X_train, l, sigma_f) + sigma_y**2 * \      
                     np.eye(len(X_train))
    K_joint = kernel(X_train, X_test, l, sigma_f)
    K_test = kernel(X_test, X_test, l, sigma_f) + 1e-8 * \     
    np.eye(len(X_test))
    K_train_inv = inv(K_train)
    mu_joint = K_joint.T.dot(K_train_inv).dot(Y_train)
    cov_joint = K_test - K_joint.T.dot(K_train_inv).dot(K_joint)return mu_joint, cov_joint

现在,让我们来看看(改进的)模型性能:

mu_test, cov_test = posterior(x_test,x_train,y_train)
samples = np.random.multivariate_normal(mu_test.transpose()[0], 
                                        cov_test, 5)plt.scatter(x_train,y_train)
for i in range(len(samples)):
    plt.plot(x_test,samples[i])

信用:我

尺寸的尺寸

将这种情况扩展到更高维度实际上非常简单。我们仍然将 Y_train 的线性组合分配给任何 X_test 输入(以及噪声模型中的 X_train 输入),如前所述。)当我们观察到每一个 X 都是在 2+维中定义的(比如身高体重),那么内核就需要在更高维中评估观察值之间的相似性。幸运的是,这对于内核来说根本不是问题!

超参数调谐

你可能会好奇为什么我从来没有讨论过超参数调优,也就是内核函数中的sigma_fl。博客作者确实使用了优化方法来获得最佳超参数值——我鼓励您回顾一下他是如何实现这一方法的。

我更喜欢贝叶斯方法;与其收敛于最优超参数的点估计,我更愿意看到这些参数的整体分布。点估计方法可能会陷入局部最优(与全局最优相反),但抽样方法通常会探索整个分布,并可以在一定程度上减轻这种风险(复杂几何存在例外,这使几乎任何方法都感到困惑)。)我最喜欢的贝叶斯建模库是 PyMC3。

最后的想法

我计划在以后的文章中用 PyMC3 构建一个高斯过程教程——或者简单地扩展这篇文章,包括一个应用 GP 建模的简短演示。

如果这篇文章帮助你更好地理解高斯过程,你喜欢我的写作风格,或者喜欢阅读——请不要忘记订阅:)

匿名函数到底是什么?

原文:https://towardsdatascience.com/what-on-earth-is-an-anonymous-function-f8043eb845f3?source=collection_archive---------27-----------------------

揭开 Julia 中匿名函数和类型的来龙去脉

(图片由Unsplash.com的 Bermix 工作室提供)

介绍

ulia 是一种有很多疯狂的细节的语言,允许人们用许多编程概念来解释他们的包。这种事情的一个例子是在一个叫做匿名函数的 Julia 特性中。今天我想向你们介绍 Julia 中的一个概念,一些人可能不熟悉,匿名函数——以及一种创建匿名类型的简洁方法。

匿名函数的伟大之处在于,它们非常容易编写,有自己的作用域,但是是环境声明的。它的伟大之处在于它可以创建一些非常高级的语法。从很多方面来说,我们通常用匿名函数做的事情就是 Python 的 Lambda 在 Python 中做的事情,如果你想深入了解 Lambda 和 Python,我写了一整篇文章,你可以在这里读到:

此外,像往常一样,Github 上有一个笔记本可用于这个项目,所以如果您想好好看看这个代码并自己使用它,您可以在这里:

https://github.com/emmettgb/Emmetts-DS-NoteBooks/blob/master/Julia/What is an anonymous function%3F.ipynb

匿名函数

我们可以通过使用“使用连字符的右箭头”标点符号->(我认为它基本上是一个操作符)来声明一个匿名函数或构造函数(稍后会详细介绍)。)我选择这些词来描述这个符号,因为这是这种语言的文档描述它的方式,它让我想到的只是 R,而是倒过来。我们将事先定义变量,我们也可以为这样的事情设置一个回报。

x -> x == 5
#3 (generic function with 1 method)

我们看到当我们运行这段代码时,我们得到了一个方法。这可能很难识别,但是这里有一个简单的方法结构,它是内联的。首先我们有函数定义,它是用参数和->…来完成的,因此函数的等价形式是这样的:

function ourfunc(x)end

然后加上我们的算术,

function ourfunc(x)
    x == 5
end

现在,如果我们调用我们的函数,它将反映我们的匿名函数的算法,但是我们如何调用匿名函数本身呢?匿名类型和函数不是在 Julia 的常规方法范围内声明的,而是包含在 Core.box 对象中。这使事情变得复杂和简单。它对于不同的应用程序肯定是有用的,在这些应用程序中,人们可能想做一些疯狂的事情,比如移动方法。我们所要做的就是断言一些等同于这个方法的东西,以及那个值的别名,并且永远带着这个装箱的方法。

our_otherfunc = x -> x == 5

现在我们看到,通过这两种方法传递 5 的结果是一样的:

println(our_otherfunc(5))
println(ourfunc(5))

值得注意的是,这些方法的定义方式有一个关键的区别,因为我们的新“东西”是一些奇怪的 Julia 对象,有时这会导致许多非常奇怪和令人困惑的错误。我在开发 Hone.jl 包时经常遇到这种情况。如果你想看看我遇到的一些挣扎,你可以看看我在 Hone.jl 上写的一些文章:

匿名类型

匿名类型只是匿名函数的一个扩展功能——我们甚至可以定义在返回类型之前运行的算法。我们可以使用匿名函数很容易地在 Julia 中组装一个类型,但是技巧实际上是得到一个类型作为回报。如果我们使用断言操作符,并尝试在内联中这样做,Julia 会做算术,我们不会以类型结束。因此,必须通过快速方法返回该类型。首先让我们写一个快速结构来限制:

mutable struct type1
    data1::Dict
    data2::Int64
end

现在,我们将定义要放入的数据:

one = Dict(:A => [4, 1, 2], :B => [2, 3, 8])
two = 5

下面是我们的匿名 new()函数。这就好像我们正在编写一个内部构造函数。

function methodinstead(one, two)
    (one)->(one;two)
end

现在我们需要调用这个方法来构造我们的类型:

type2 = methodinstead(one, two)
reg_const = type1(one, two)

这里有一个关键的区别,我们不能从这个构造函数的系统化版本中得到装箱的数据。有条理的版本中有装箱的类型和结构。

结论

匿名函数是另一个激进特性的例子,在 Julia 语言中,这种激进特性的原因很模糊。这些函数可以以非常经典的科学计算方式使用,我非常喜欢 Julia 的这一部分提供的语法。我认为这对于使用方法技术中的类型进行虚拟化可能是有用的。也许它对一些东西的原型制作也是有用的。

到目前为止,你在 Julia 中看到的这类函数的最大用法是在方法头中创建的。这是因为它们经常在 Julia 中使用,相当于 apply()之类的方法。例如,findall()和 filter()都经常使用这些类型的表达式。非常感谢你阅读这篇文章,我很高兴我能够对这个话题有点热情!

“规范形式”到底是什么?

原文:https://towardsdatascience.com/what-on-earth-is-canonical-form-23cef915601d?source=collection_archive---------51-----------------------

本征向量、值和计算中整体分解的数学概述

(图片由作者提供)

介绍

机器学习问题通常比简单地将一维数组插入模型要复杂得多。很常见的情况是,所提供的数据首先是不干净的,其次是计算机不可能在统计上完全说明所有方面的问题。在现代数据科学中,使用可能无法测量一维数据的工具进行测量是很常见的。此外,图像是一个很好的例子,说明为了使数据适用于任何模型,必须降低数据的维度。

在这里,我们遇到了一个在统计计算中很常见的概念,叫做分解。分解是获取一个给定的多维数据矩阵,然后将这些维度压缩成更易于解释的特征,实际上是固体特征和观察数据集。

这种解释能力不仅在使用分解时提供给用户,也提供给计算机。分解的目标总是最小化一个给定的数据集,甚至一个特征可能有的维数。当然,这就提出了一个问题——我们究竟如何才能降低数据的维度?

语言的语音典型

简化后的数据通常被称为我们数据的“个性化”版本。eigin 向量、值和任何其他你想使用 eigin 名称的度量的整体概念是,这些是我们能提供的这些矩阵的最简化的数学形式。降低数据的维度是这个新术语“规范形式”的来源。

标准形式是计算机科学家和统计学家常用的一个术语,用来表示任何尽可能简化成数学表达式的数学对象。“规范”和“标准”形式之间的区别因子领域而异,然而在大多数表示中,数学对象形式的规范版本指的是每个对象的唯一表示。

利用规范形式的分解方法的一个很好的例子实际上是一个行业标准,它很可能是您以前使用过的;可能根本没有意识到。我所指的美丽的数学公式是奇异值分解,或者 SVD,如果你喜欢昵称或写作。奇异值分解对机器学习有多重要?首先,我想强调一下 SVD 真正伟大的地方,而不是描述它在大多数机器学习问题中的作用。

关于分解的更多信息

奇异值分解实际上在数据科学中得到了非常好的应用,随着您对数据科学和一般数据工作的了解越来越多,您可能会发现它的名字会反复出现。大多数可用于操纵和理解数据的无监督学习方法都是利用分解方法。当然,在某些情况下,它可能是不同类型的分解,然而最流行的是 SVD。

SVD 被实现到大多数 PCA 算法中,并且是减少用于主成分分析以及聚类的数据维度的关键部分。很容易理解为什么这个工具已经很有价值,因为聚类可能是数据科学家拥有的最流行的无监督学习方法。

此外,SVD 可以用来提高大多数机器学习模型和机器学习应用程序的准确性。此外,在很多情况下,使用 SVD 是不可避免的,因此解决高维数据问题基本上是无效的。

结论

不用说,在处理特征并为机器学习问题做准备时,数据科学家拥有的一个非常有价值的工具是分解。分解提取某一级别数据的维度,并减少它,直到每个特征只剩下一个简单的 eigin 向量。

幸运的是,这正是计算机喜欢的输入方式!此外,我们可以通过降低数据的维度来提高性能,同时保持准确性和实际的工程特性——我认为这肯定会派上用场。我认为对于数据科学来说,分解是需要学习的最重要的概念之一,我希望这个关于规范概念的概述真的能记住并有所帮助。感谢您的阅读!

数据工程到底是什么?

原文:https://towardsdatascience.com/what-on-earth-is-data-engineering-87b46d26ce1b?source=collection_archive---------34-----------------------

最基础的数据科学学科概述

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

介绍

D 数据科学是一门宽泛的学科,包含了整个世界及其内部更小的领域。数据科学有许多方面,如分析、机器学习、商业和软件工程。数据科学工作的一个突出分支是主要围绕软件工程领域内部的。这就是通常所说的数据工程师。

数据工程师是为科学家和其他开发人员管理数据、数据管道和数据库的人。当然,这也是数据科学家做的事情,所以数据工程师和数据科学家之间的一个关键区别是,数据工程师通常不参与机器学习。虽然数据工程师有时可能会从事机器学习,但这并不在工作描述中。如果您想了解更多关于数据科学学科中不同领域的信息,我写了一整篇文章,讨论人们在数据科学领域可以采取的不同途径,您可以在这里查看:

[## 数据科学的学习途径—你应该学什么?

towardsdatascience.com](/learning-pathways-for-data-science-what-should-you-learn-a0a580a705a2)

工作说明

为了成为一名数据工程师,你需要一些处理数据的基本技能。数据工程师可能应该学习的第一件事是查询框架,比如 SQL。这是因为数据工程师很可能会经常使用这样的框架。有了 Unix 的一些知识,事情可以更进一步,因为这些数据库很可能将存储在 Linux 服务器上。

数据工程师的另一项重要技能是了解请求和 web 通常是如何工作的。为了连接到服务器和查询适当的数据库,涉及到请求和协议的知识绝对是一项基本技能。数据工程师必须知道如何访问他们的数据库!

数据工程师最有可能知道的最后一件事是一些统计语言中的基本数据算法。这是因为作为一名数据工程师,你很可能会与需要你的数据的科学家或其他类型的开发人员一起工作。此外,他们将需要你的数据是干净的,并返回给他们一个伟大的格式,这样他们就可以做他们的工作,而不是你的。一种很好的编程语言可能是 Python。记住,了解需要使用您的数据的人的角色对于数据工程来说也是非常重要的。

数据工程的优点是什么

现在我们知道了什么是数据工程,以及它在更广泛的意义上在数据科学中所扮演的角色,那么它有什么了不起的呢?重要的是要记住,尽管数据工程没有通过分析获得洞察力或构建复杂的神经网络那么令人兴奋,但它仍然是数据科学技能集内的一个必要领域。我认为数据工程技能甚至比机器学习技能更重要,因为数据工程技能是基础,如果没有良好设计的数据,机器学习技能实际上没有多大价值。

数据工程和获得一份数据工程工作最大的好处可能是,它可以作为进入数据科学职业道路的入口。在大多数情况下,如果没有某个定量学科的学位,很难找到一份标准的数据科学工作。也就是说,数据工程是一个不太被认可的领域——因为雇主不相信数据工程需要学术数学(谁会想到呢?!)可以说,这可以让你“步步高升”。当一段时间的数据工程师后,肯定会有机会的。

正如我之前提到的,数据工程技能是数据科学的基础技能。鉴于这些技能是基础性的,可以在这些技能的基础上构建数据科学的坚实技能组合。数据工程的一个伟大之处在于,它让你在没有数据的情况下变得非常擅长工作,而不会像数据科学家那样被统计数据和机器学习模型淹没。

结论

说到学科学习,数据科学可能是一个复杂的学习主题。这是因为有如此多的领域属于数据科学的范畴,这使得它成为一个非常难以接近的领域。考虑到这一点,数据科学的各个领域通过将学习分解成独立的部分,使得学习变得容易得多。在很多方面,这让我想起了我关于命名和提取的文章,这是我用于编程的一种技术。如果你读完之后不忙,并且对软件开发感兴趣,我认为这种技术肯定是值得学习的,尤其是对于一个有抱负的数据科学家来说。你可以在这里找到这篇文章:

[## 更多的方法意味着更好的代码

towardsdatascience.com](/more-methods-means-better-code-1d3b237f6cf2)

与获得数据科学工作相比,接受数据工程工作最重要的一点可能是,它既可以提供雇主的认证,也可以扩展您的基础知识,这些知识肯定会对数据科学有用。感谢您阅读我的文章,我希望它教会您更多关于数据科学和数据工程的知识。

维度的诅咒到底是什么?

原文:https://towardsdatascience.com/what-on-earth-is-the-curse-of-dimensionality-7b8815edaa1?source=collection_archive---------30-----------------------

了解为什么高维数据可能不像我们曾经认为的那样令人兴奋。

(图片由作者提供)

介绍

从事数据科学职业的一个不幸的不利方面是,理解数据有时会相当困难。对于高维数据来说尤其如此。此外,该领域新手的一个大问题是首先要对高维数据有一个坚实的理解。这是因为很难找到可以多维观察的数据。这让我们想到

维度的诅咒。

高维数据不仅对人类来说难以(或不可能)分析和处理,对计算机来说也是如此。虽然使用巨大的特征集是完全可能的,但是科学家可以估算的维度总是有限的。也就是说,这个等式的一个重要方面是维度到底是什么以及它的用途。

关于尺寸的更多信息

为了理解维度,我们需要首先理解什么是维度。这个词对于很多读者来说可能很熟悉,比如动画,动画可以是二维的也可以是三维的。在经典的数学术语中,我们可以称这些特征为 X 和 y。两者都是轴上的位置,我们可以认为是二维网格。我们也可以把它想象成一个散点图,根据这两个值之间的关系来绘制值。

将二维数据转换成三维数据意味着增加一个轴 z。当然,你可能对真实世界的三维概念很熟悉。这是因为现实生活空间中的位置不仅可以用经度和纬度来表示,还可以用高度来表示。我们可以将维度视为数据中代表某种事物的特征。

现在回到数据科学的奇妙世界,我们可以将这些相同的概念应用到我们日常处理的大多数数据中。我们可以将每个特征视为数据的一个维度。让我们考虑一个人类。人类是一种非常高维的数据类型,包含从身高、体重、鞋码到姓名、价值观和信仰的各种特征。在图表上观察人类,或者把一个完整的人解释成一台计算机,都不太可行,因为这方面有很多维度。

这给任何以高维方式描述的事物都带来了问题。

诅咒

既然我们对维度与数据的关系有了坚实的理解,我们现在可以讨论为什么高维数据是“被诅咒的”,并且可能相当难以处理。这是因为人类和计算机在解释高维值时都有很大的困难,因为有太多的数据需要统计。从统计学的角度来看,不太重要的特性或者有些随意的特性实际上会破坏模型的准确性,而不是提高它。

维度的诅咒在于它无法被分析。高维数据不仅会给统计和计算机带来问题,也会给使用它们的人带来问题。每当我们处理多维数据时,我们都在处理不同类型的特征(类型指的是维度描述的内容,而不是特征本身),尤其是对于机器学习来说,许多特征可能非常成问题。如果我们被诅咒去处理一些维数非常高的数据,那么我们如何有效地将数据转化为模型,并使其足够干净以进行测试呢?解决方案是一个叫做分解的概念。

分解

复杂的多维数据集有很多缺点。有时候,拥有一大堆功能可能会让人不知所措,无法工作。幸运的是,对于大多数应用程序,我们可以利用分解来将这些特征分解成可以被机器学习和分析所解释的数据。数据科学家手边有几种分解方法。此外,这些分解工具中的大部分都已经在我们最喜欢的数据科学包中实现了,有时有多个版本。

有许多不同的方法和途径,我们可以用分解来解决问题。分解的基本思想是通过创建代表多个维度的新的任意值来减少数据的维度。结果是一系列的集群,对最初的构造者来说非常抽象,但实际上非常类似于我们的大脑如何利用真实物体的维度。

我喜欢用类比的方法来解释事物,但我喜欢想象一棵树。每当我看一棵树时,我可以认为这棵树是有维度的,例如:

  • 高度
  • 叶子形状
  • 重量
  • 颜色
  • 增长类型

我碰巧对树很熟悉,所以我知道树很高,与其他植物相比重量很大,通常是棕色和绿色的,并且独立生长。现在观察一棵树,如果我们能够画出这些维度,我们很可能会看到这棵树与所有其他的树非常接近,这正是分解和许多机器学习的基础。这是通过特征向量在数值上实现的。

最流行的分解方法当然是奇异值分解,或 SVD。SVD 是一种简单的分解方法,它使用三个矩阵 V、U 和 S 来将维数降低到标准形式。如果你想了解更多关于标准形式的知识,我实际上有一整篇文章,你可以在这里阅读:

虽然 SVD 是一种很好的非常流行的分解方法,但我认为记住有许多不同的分解方法是很重要的,比如随机投影。随机投影是一种以约翰逊-林登斯特劳斯引理为中心的分解方法。这基本上说明了高维的数据可以被投影到较低的维中。幸运的是,如果你想了解更多关于随机投影的知识,我有一篇文章你可以在这里找到:

结论

在数据科学领域,维数灾难惊人地频繁发生。这可能会被视为一个负面因素,因为这意味着这些功能可能很难使用,然而,使用适当的工具并了解它实际上可以设计一些非常有统计学意义的功能。不用说,这种处理大量数据的方法非常有用,有助于提高性能和理解。维数灾难只是对令人兴奋的数据的诅咒,但知道如何处理这些数据可以使它以一种全新的方式令人兴奋。考虑到这一点,我认为尽可能多的学习分解方法是非常有价值的,因为它们对于几乎所有的数据科学项目都是非常有用的。

Unicode 规范化到底是什么?

原文:https://towardsdatascience.com/what-on-earth-is-unicode-normalization-56c005c55ad0?source=collection_archive---------16-----------------------

你的高质量自然语言处理的基本方法指南

照片由埃琳娜·莫日维洛Unsplash 上拍摄

ℕ𝕠-𝕠𝕟𝕖 𝕚𝕟 𝕥𝕙𝕖𝕚𝕣 𝕣𝕚𝕘𝕙𝕥 𝕞𝕚𝕟𝕕 𝕨𝕠𝕦𝕝𝕕 𝕖𝕧𝕖𝕣 𝕦𝕤𝕖 𝕥𝕙𝕖𝕤𝕖 𝕒𝕟𝕟𝕠𝕪𝕚𝕟𝕘 𝕗𝕠𝕟𝕥 𝕧𝕒𝕣𝕚𝕒𝕟𝕥𝕤. 𝕋𝕙𝕖 𝕨𝕠𝕣𝕤𝕥 𝕥𝕙𝕚𝕟𝕘, 𝕚𝕤 𝕚𝕗 𝕪𝕠𝕦 𝕕𝕠 𝕒𝕟𝕪 𝕗𝕠𝕣𝕞 𝕠𝕗 ℕ𝕃ℙ 𝕒𝕟𝕕 𝕪𝕠𝕦 𝕙𝕒𝕧𝕖 𝕔𝕙𝕒𝕣𝕒𝕔𝕥𝕖𝕣𝕤 𝕝𝕚𝕜𝕖 𝕥𝕙𝕚𝕤 𝕚𝕟 𝕪𝕠𝕦𝕣 𝕚𝕟𝕡𝕦𝕥, 𝕪𝕠𝕦𝕣 𝕥𝕖𝕩𝕥 𝕓𝕖𝕔𝕠𝕞𝕖𝕤 𝕔𝕠𝕞𝕡𝕝𝕖𝕥𝕖𝕝𝕪 𝕦𝕟𝕣𝕖𝕒𝕕𝕒𝕓𝕝𝕖.

我们还发现,像这样的文字非常普遍——尤其是在社交媒体上。

另一个痛点来自音调符号(在,,é,中的小符号),你会在几乎所有的欧洲语言中找到它。

这些字符有一个隐藏的属性,可以使任何 NLP 模型出错——看看两个版本的 Unicode:

\u00C7\u0043\u0327似乎都在生产同一个角色。实际上,它们是完全不同的——你建立的任何 NLP 模型都会认为它们也是完全不同的。

所以现在我们有两个问题。

  • 人们用奇怪的字符来表达🅘🅝🅓🅘🅥🅘🅓🅤🅐🅛🅘🅣🅨(或者吸引注意力——或者两者兼而有之)。
  • 两个看似匹配却不匹配的角色。

这两个问题的答案是 Unicode 规范化,我们将在本文中探讨这个问题。

点击这里查看本文的视频版本:

对等的问题

我们刚才看到的是两种不同形式的等价相容等价和规范等价。

兼容性等价

我们在大量不同的角色中发现了兼容性等价,有些很抽象,有些我们一直都可以看到。

首先,我们有自己的字体变体——我不完全确定这是谁的主意,但我很高兴它对“百万富翁”大师们的影响使得他们的许多帖子无法阅读。

7 𝕸𝖎𝖑𝖑𝖎𝖔𝖓𝖆𝖎𝖗𝖊 𝕳𝖆𝖈𝖐𝖘 — 𝕭𝖚𝖞 𝖒𝖞 𝖈𝖔𝖚𝖗𝖘𝖊 𝖙𝖔 𝖌𝖊𝖙 𝖗𝖎𝖈𝖍!

然后我们有一些在网上很常见的例子,[NBSP][SPACE]都是非常有效的换行符序列。上标和下标无处不在,分数也是。

我们希望让我们的模型将ⓗⓔⓛⓛⓞ ⓦⓞⓡⓛⓓ和“hello world”视为一体。简化文字,使 xⱼ变成 xj,变成 1/2。

典范等价

规范等价更难发现,因为它处理的是呈现时完全相同的字符,但实际上是完全不同的字符。

如果我们以本文介绍中的例子为例,字符\

我们可以使用 Unicode 字符‘带塞迪拉的拉丁文大写字母 c’创建这个字符,即 \u00C7 。或者,我们可以同时使用这两个字符来创建这个字符,分别是‘拉丁文大写字母 c’‘将 cedilla’字符组合在一起】、 \u0043\u0327

虽然它们看起来一样,但是我们可以看到它们没有被识别为匹配字符。

这种字符组合呈现为单个字符,因为有些 Unicode 字符(如组合 cedilla)是专门为与其他字符组合而制作的。

我们可以通过用空格将两个字符分开来分别看到它们:

Unicode 规范化

Unicode 规范化是我们对规范和兼容性等价问题的解决方案。

在规范化中,我们可以进行两个方向和两种类型的转换。我们已经讨论过的两种类型,规范的和兼容的。

这两个方向分别是分解构图:

  • 分解分解字符,所以在我们的 C 和 cedilla 的例子中,我们将字符的两个版本分解成两个单独的字符(拉丁文大写 c +结合 cedilla )。
  • 组合将单独的字符合并成一个 Unicode 字符,在我们的 C 带 cedilla 的情况下,这两个字符(拉丁文大写 c \u0043 + 组合 cedilla \u0327)将成为单个字符拉丁文大写 C 带 cedilla \u00C7)。

当我们将这两个方向与我们的两种转换类型合并时,我们得到四种不同的归一化形式:

范式 D

让我们测试其中的一些。首先,我们有 NFD 规范化,它执行规范分解——将 Unicode 字符分解成独立的部分。

我们需要导入unicodedata,这将允许我们使用每一种规范化形式。然后,让我们比较一个规范化的拉丁文大写 c 和带加符拉丁文大写 c组合加符字符:

好极了。希望这是有意义的,我们已经将带有 cedilla 字符的单个 C 分解成两个字符,一个 C 和一个cedilla——所以现在它们匹配了。

范式 C

NFC 的工作方式有所不同,它首先像 NFD 一样分解角色,然后将它们组合成一个单一的角色。如果我们看一下这对我们两种不同的形式有什么影响:

应用规范分解后再应用规范合成(NFC)的结果。

我们可以看到,当规范化两者时,我们应该得到相同的字符,并且该字符与我们的单个字符 C with cedilla 相同——所以让我们进行意义检查:

范式 KD

现在我们可以看一下我们对于兼容性等价的规范化,用 K ( C = 规范K = 兼容性)来表示。

NFKD‘兼容性分解’将新奇/另类字符分解成更小的部分(如果可以分解的话),并分解成更多的‘普通’字符。让我们举两个例子,ℌ.

对不同字符应用兼容性分解(NFKD)的结果。

我们的花式ℌ分解成一个正常的 h,我们的花式分数分解成分数中使用的两个数字,以及一个分数斜杠字符。

我们可以用 Python 这样做:

范式 KC

NFKC 由两步组成,兼容性分解就像 NFKD 一样,接下来是规范合成。

这一次我们同时使用了兼容性和规范转换。这允许我们将给定字符的所有变体规范化为一个单一的共享版本。

例如,我们可以添加一个组合符号到我们喜欢的ℌ.中这给了我们一个 Unicode 字符的怪物,只有最优秀的快速致富大师才有权力使用——ℋ̧.

这种水平的酷真的提升了那些没有人会后悔购买的高价课程的转化率。

我们需要将这个字符转换成正常人可能使用的东西,并且我们的 NLP 模型可以理解。

我们和 NFKC 一起做这件事:

应用兼容性分解后进行规范合成的结果(NFKC)。

我们可以检查我们的原始ḩ是否与 Python 中的花式ℋ̧相匹配:

值得注意的是,我们不能执行兼容性组合,因为兼容性等价只以一种方式工作——有数百个字体变体 H 分解成 H ,因此从 H 组合回根本无法工作(我们将把 H 组合回哪个 H 字体变体?).

好了,我们已经介绍了开始在 Python 中对文本应用 Unicode 规范化所需要知道的一切!

作为最后的结束语,值得一提的是,对于大多数应用程序来说,NFKC 形式比其他任何形式都更能规范文本中的变化。但是哪种需求将取决于你到底需要做什么。

如果你想在一个笔记本上查看所有这些,你可以在这里找到。

所以,我希望你喜欢这篇文章。如果您有任何问题或建议,请通过 Twitter 或在下面的评论中告诉我!如果你对更多类似的内容感兴趣,我也会在 YouTube 上发布。

Ⓣⓗⓐⓝⓚⓢ ⓕⓞⓡ ⓡⓔⓐⓓⓘⓝⓖ!

参考

自己做讨厌的文字

🤖带变压器的 NLP 课程

posted @ 2024-10-17 11:33  绝不原创的飞龙  阅读(896)  评论(0)    收藏  举报