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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

从圆形到 ML 通过蝙蝠侠:第一部分

原文:https://towardsdatascience.com/from-circle-to-ml-via-batman-part-i-51ab4cf2db66?source=collection_archive---------36-----------------------

美丽的方程式不仅仅是艺术!

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

“M”、“L”和蝙蝠侠符号都是单个不等式的结果。查看图表

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

蝙蝠侠不等式一:查看图

简介:

这个圆圈本身很漂亮,不是吗?但是,带着一些好奇心,你可以超越一个圈子。它不需要任何微积分或任何先进的概念,只是用我们最喜欢的 10 级数学和一些美丽的想法,我们可以超越圆,甚至创建蝙蝠侠不等式。这篇文章是关于为我们想要的任何形状创建不等式。在第二部分,我们将看到如何改进和推广这个框架,并派生出机器学习中常用的函数。

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

这是一个从左边的曲线到右边的曲线的旅程

这里创建的所有可视化都是在公开可用的软件中生成的,如 Desmos 和 Geogebra。我建议读者继续使用这些工具玩这些方程,自己探索其中的美妙之处。

一圈之势!

谦逊的圆描述了与给定中心点等距的多个点。让我们以各种形式来看看我们熟悉的朋友。当所有的点都位于给定的距离时,让我们考虑 1 个单位,我们得到一个圆。距离小于 1 的点位于圆内,距离大于 1 的点位于圆外。在三维空间中,方程为 z = x+y–1 的抛物面与 XY 平面相交时形成我们的圆。

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

圆的不同视图

我们都知道圆通常采用 x +y =1 的形式。如果我们超越 2 的幂,你认为会发生什么?这就是神奇之处。让我们取 2 到 10 的值,观察会发生什么。

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

从 3 到 10 的幂

对于偶次幂,我们看到圆开始看起来像一个正方形,在无穷次幂时它确实变成了一个正方形。但是为什么它会这样做,尤其是在偶数倍的情况下?我们将首先试图理解曲线上的点(xn+yn=1)是如何表现的,然后研究曲线内的点的本质和属性(xn+yn<=1).

先来了解一下奇幂。如果幂是奇数,假设 x 是负的,那么 x^n 项的结果也是负的,因此 y^n 项取一个大于 1 的值,所以和仍然是 1。对于大功率,随着功率的增加,2 个数的差异变得无关紧要。让我们举个例子,如果 x⁵是-100,000,那么 y⁵的值应该是 100,001,以满足等式。但是,我们绘制的是 x 和 y,所以证明该等式正确的 x 和 y 的值是(-10,10.0000199…).这非常接近 y=-x 线。这也适用于负 y 和正 x 的情况。另请注意,功率越高,与 y=-x 的偏差越小。这在负 y 和负 x 的情况下是不可能的,这就是为什么我们在该象限中看不到函数的一部分。当 x 和 y 都是正数时,我们看到类似正方形的一部分。这是因为如果 x 明显小于 1,比如 0.7,那么 x⁵会很快变得非常小(这里是 0.168)。因此,y⁵必须是 1-x⁵,也就是 0.832,这意味着 y 将非常接近 1,但这里稍小(0.9638)。同样的逻辑反过来也适用。因此,对于远离 1 的 x 值,y 取接近 1 的值(像水平边),对于接近 1 的 x 值,y 快速下降到 0(像垂直边)。这使得曲线看起来像正方形的一部分。这可以从下面看出:

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

用 n=9 演示自然。

一旦理解了奇幂,理解偶幂就变得容易多了。负值的情况现在不存在了,所以整个函数在所有象限看起来都像一个正方形。这点可以从下面看出来。这是我们从现在开始要关注的。

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

n=10 的图表

最后,圆和方并不矛盾,他们的力量相当。希望你能接受这些观点,不要被怀疑所困扰,我们不走捷径地回到数学。

等等!!!数学宝库中还有很多东西。我们也知道如何移动坐标。左减右加。所以我们不仅可以生成一个正方形,还可以把它放在任何我们想放的地方。不仅如此,我们还可以重新缩放,从而拉伸正方形,使之成为矩形。让我们来试试:

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

改为矩形:(2(x-3)) ⁰+(3(y-2)) ⁰ <=1; 查看图形

到现在为止,你们中熟悉更深层次数学的人应该能够明白这与闵可夫斯基距离F-范数中的概念有什么联系,但是我们将把它们留到将来。

超越圈子

除了圆形和矩形,我们还必须从稍微不同的角度来看待这些图表。这次我们从不等式的角度来看曲线上和小于 1 的点。如果两个正数之和小于 1,那么这两个数字都必须小于 1。类似地,如果有很多这样的项,那么所有的项都必须尽可能小,以使总和不超过 1。即使其中一项大于 1,不等式也不成立。这不是很像交集的思想吗?所选点应位于所有集合中(即所有不等式应给出接近 0 的值),如果它们甚至不在其中一个集合中,则它们不被选择(即使其中一项大于 1,不等式也不成立)。因此,上面制作的正方形可以被视为两个术语的交集区域,x^(2n) <1 and y^(2n)<1 (referred to as trenches for their shape) as shown below. Higher values of n allow the terms to be as small as possible.

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

The squares(z = x¹⁰+y¹⁰) as the intersection of 2 trenches made by z=x¹⁰ and z=y¹⁰

And now we have taken a humongous step. We can make very complex figures which emerge from such intersections and take our designing skills to the next level.

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

A diamond as the intersection of diagonal trenches: z = (y-2x)¹⁰+(y+2x)¹⁰

We can get back our graph by just making z=1:

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

The same figure in 2D: (y-2x)¹⁰+(y+2x)¹⁰<=1. Higher the power, better is the approximation of intersection. 视图图

让我们在一些简单的事情上试试这个策略:

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

这是一个简单的形状,有三条边和一个圆弧,所以很容易制作。表情:((y+x-1)/2)⁵⁰+((y-x-1)/2)⁵⁰+(y-0.5)⁵⁰+(x+y)⁵⁰<=1; 查看图表

请记住,我们制作的沟槽在以下位置有壁:y — f(x)=1 和 y — f(x)= -1。这是因为所有小于 1 的绝对值趋于零,因此是沟槽的一部分,而所有大于 1 的绝对值增加得非常快,因此形成了壁。所以我们可以使用下图所示的沟渠。

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

我们现在已经完全准备好制作蝙蝠侠标志,并且已经走了一半以上的路程。策略不仅仅是相交,还包括从曲线中消除区域以雕刻出形状。这是通过一个接一个地提取曲线,并对它们和它们的位置进行精炼以匹配形状来完成的。在某些地方,曲线必须反转,即大于 1 的区域必须小于 1,反之亦然。这是通过改变曲线功率的符号来实现的。请注意,这种策略可以应用于许多形状。所有这些曲线都具有一边大于 1(远离符号)而另一边小于 1(朝向符号)的性质。因此,每个部分都有自己的曲线,然后使用前面描述的大偶次幂的和来组合这些曲线。

使用以下表达式(根据曲线形状选择):

  • f1(x,y):(0.5(x-1.16)(2.8))(2)+(y+1.6):右翼下边缘
  • f2(x,y):(0.5(x+1.16)(2.8))(2)+(y+1.6):左翼下边缘
  • f3(x,y):(0.5(y+1.6))^(8)+(x+3):左翼的左边缘
  • f4(x,y):(0.5(y+1.6))^(8)+(-x+3):右翼的右边缘
  • f5(x,y):y+0.6:上水平线
  • f6(x,y):(3(x+0.45))^(14)-y+1:头部和翅膀之间的左曲
  • 头部和翅膀之间的 f7(x,y):(3(x-0.45))^(14)-y+1:右曲线
  • f8(x,y):e((3(y-0.1)-258.18((1.9x+0.1)(1.9x-0.1))(1.6))):形成了头和耳朵

当所有这些曲线组合在一起时,得到下图:

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

请注意,边上有额外的位,但原始功能是完整的。

为了去除多余的位,通过添加另一项来清理函数,该项在我们想要的形状附近给出接近 0 的值,而在我们不想要的位置给出大于 1 的值。这使得最终数字为:

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

上图经过清洗,有如下等式(第一项多余);查看图形;第一学期做什么?它不会杀死我们的曲线,所以它只是使它更强(通过消除不需要的部分)。

我们可以分别识别曲线的所有部分,如下所示:

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

用不等式表示的 f(x,y)=1 形式的所有曲线

结论和下一步

我们刚刚获得了对圆和类似的高偶次幂不等式的深刻理解。我们理解了为什么他们的行为像不等式的交集,并通过创造我们自己的蝙蝠侠不等式掌握了这一点。除非有人去做,否则一切都是不可能的。嗯,蝙蝠侠方程式是十年前创立的,所以我们尝试了蝙蝠侠不等式。但是,我们仍然不得不与大国打交道,不得不削减我们的规模,这个过程似乎仍然很复杂。本博客的第二部分将消除所有这些挑战,并简化一切。它还将以 Softmax(我们的分类朋友)、Softplus(众所周知的激活函数)、log-sum-exp(常用函数和 Softmax 之父)和其他相关方向的形式解释这些思想如何与机器学习相关。

数学在申请前是最重要的。而且我向你保证,申请来了!

参考

[1] J.S. Grover,代数表达式的可微集合运算(2019);Arxiv 符号计算。

[2] K.M .肯丁,单方程可以画图 (1991)。大学数学杂志 22.2:134–139。

从圆形到 ML 通过蝙蝠侠:第二部分

原文:https://towardsdatascience.com/from-circle-to-ml-via-batman-part-ii-699aa5de4a66?source=collection_archive---------42-----------------------

更多的艺术!在 ML 中衍生美。

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

“M”、“L”和蝙蝠侠符号都是单个不等式的结果。查看图表

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

查看图表

背景

等等!上面的等式和我们上次发现的不一样吗?是的,非常不同,但看起来还是一样的,或者更好一点。万一你想知道我在说什么,请参考本系列的第一部分。这里陈述的许多观点都来自那篇文章,并且解释得非常清楚。主要的问题是:为什么圆变得像正方形,我们如何把它看作是沟渠的交叉点,以及我们如何通过交叉这些沟渠来构建我们自己的图形和方程。

挑战

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

我们之前用来制作图表的沟渠(左边)在我们的蝙蝠侠(右边)中造成了额外的区域

在战壕里工作并不是一件快乐的事情,不是吗?老实说。他们有两面墙,而我们通常只用一面。另一个只是徘徊,有时会产生不必要的区域。记住,我们也因为同样的原因不得不修剪我们的蝙蝠侠。接下来,我们只能执行战壕的交集和否定(翻转力量的符号),但它们的联合仍然有点挑战性,但非常有用。强大的能力带来了巨大的计算困难。将我们的输入提升到非常高的幂是不常见的,并且在计算上也不是非常有效。因此,我们先前所获得的范围受到了我们设计技巧的限制。

数学的宇宙集合是无限的,我们永远无法将它表达为我们有限思想的结合。所以,让我们开始寻找应对挑战的解决方案吧!

从战壕到边界

请记住,每当权力变得太大,无法控制,对数和指数来拯救。有壕沟的根本原因是当使用大的偶次幂时,会形成两堵墙。一个在 y-f(x)=1(我们一般用这个),另一个在 y-f(x)=-1(我们一般弃用这个)。因此,我们必须做一些改变,使每个沟槽只有一面墙(这使它只是一面墙)。我们可以很容易地做到这一点。只是用 e^(nx).代替 x^(2n)一切正常的主要原因是,对于大于 1 的绝对输入值,我们的函数会快速增加到 1 以上,而对于小于 1 的输入值,我们的值接近于零。在 e^(nx 的情况下)对于正 x,我们的输出值很快超过 1,而对于负 x,它们接近于零。第一个挑战解决了!指数是常用的,并且有快速的实现。这是一个很好的财产,不是吗?

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

一堵墙总是比一条沟好,尤其是当没有人需要为此付钱的时候(至少在我们的例子中不是计算上)。

补集、交集和并集

一旦我们有了这个合适的工具,我们就能明白我们能用它做什么伟大的事情。我们刚刚定义的边界对于负 x 有接近于零的值,对于正 x 趋向于无穷大,那么让我们来理解什么是集合。这里的集合本质上是一个类似 y≤x 或 x +y -1≤0 的不等式。这些集合的边界就是我们想要表现的。因此,我们可以乘以大的 n,并对两边取幂来得到我们的边界。因此,y-x≤0 将看起来像 e^(50(y-x))≤1,类似于(y-x)⁵⁰≤1(我们以前的一个战壕边界)。我们前面看到的逻辑同样适用于这两种情况。

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

让我们看看集合的补集,我们可以像上次一样,通过简单地改变幂的符号来得到它。

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

查看图表

接下来,让我们看看我们最喜欢的十字路口。这和我们之前推导的一样,因为小数字之和小于 1 的逻辑没有什么不同。这可以从以下几个方面来看:

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

查看图表

最后是我们的新人,尤宁。我们来推导一下。根据德-摩根定律,我们知道 AUB = (A’∩B ‘)’。因此,这意味着集合的逆和的逆。啊啊!这就像你如何评估并联电阻的电阻(1/Rt=1/R1+1/R2)。或者,对于熟悉的人来说,是调和平均数而不是总和。让我们看看:

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

查看图表

还有一个很重要的观察。集合内点的值趋于零,集合外点的值趋于无穷大的性质也适用于上述集合运算的结果。因此,这些集合运算也是可重复的,无需再次求幂。这意味着我们可以通过逐一应用上述集合运算来计算更复杂的运算,如 AU(B∩(CUD))。

代数和集合论中各种想法的结合引导我们通过数学和创造性艺术的狭窄交叉。总结我们所有的高能量想法,我可以说与我们目标的差异将很快趋于零。还有最后一项活动,我想对其进行指数运算,我们将为机器学习的应用做好准备。

让我们做点什么吧!

让我们制作下面的拼图:

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

查看图表

上面的等式可以通过首先创建一个正方形,然后与两个圆(突出的那些)合并,接着与另外两个圆(移除的那些)的补集相交来获得。设正方形的 4 条边分别表示为 A、B、C、d,每条边是一条直线。进行并的圆被表示为 E 和 F,而被去除的圆被表示为 G 和 H,因此上图为:((A ∩ B ∩ C ∩ D) U E U F) ∩ G’ ∩ H '。

让我们来代表这些集合:

  • 答:e^(50(x-1)
  • B: e^(-50(x+1))减号来改变集合的方向(使其面向图内)
  • 丙:e^(50(y-1))
  • D: e^(-50(y+1))减号来改变集合的方向
  • E: e^(50((x+1) +y -0.25))
  • F: e^(50((x) +(y-1) -0.25))
  • G: e^(50((x-1) +(y) -0.25))
  • H: e^(50((x) +(y+1) -0.25))

表演(A ∩ B ∩ C ∩ D)给出:(e(50(x-1))+e(-50(x+1))+e(50(y-1))+e(-50(y+1)))

接下来是与圆结合,从而给出:

((e(50(x-1))+e(-50(x+1))+e(50(y-1))+e(-50(y+1)))-1+e(-50((x+1)+y -0.25))+e(-50((x)+(y-1)-0.25)))-1

最后,与另外两个圆的补集相交,得到上图所示的理想方程。

所有上述操作也与我们之前所学的相一致,因此正方形可以恢复其真实的形状:x⁵⁰+y⁵⁰=1.给出了如下所示的相同图形的替代等式。注意第一项。

((x⁵⁰+y⁵⁰)-1+e(-50((x+1)+y -0.25))+e(-50((x)+(y-1)-0.25)))-1+e(-50((x-1)+(y)-0.25))+e(-50((x)+(y+1)-0.25))≤1

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

查看图表

真实应用

请记住,如果我们可以创建好看的图形和它们的方程,那么我们也可以创建一些在各个领域中常用的非常有趣的函数,甚至为我们自己创建一些函数。我的背景是机器学习,因此我熟悉在我的领域中使用的一些功能。

导出 Log-sum-exp 和 Softmax

我们都已经学习了很多关于 max 函数的知识,它接受多个数字,然后吐出最大的一个。在机器学习的许多应用中,我们希望最大值运算不仅尽可能接近实际的最大数,而且与非最大数有某种关系。这些数字越接近最大值,它们对结果的贡献就越大。这是很重要的,因为它允许梯度在反向传播或其他训练算法期间也通过非最大值项传播。不深入 ML,我们可以说我们需要一个最大运算的近似值,它考虑了所有的项。这种固定(硬)决策函数的近似,如 max、if-else、排序等。叫做软化

max 本质上是什么?它是单个函数的联合,最大的一个在输出端显示。请注意,union 运算中最大的函数下面会自动包含较小的函数。对于一维示例,max(y=1,y=2,y=3)是 y=3。我们也可以把这个写成并集的边界(y≤1,y≤2,y≤3)。联合是 y≤3,所以边界是 y=3。让我们想象一些更真实的函数:

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

深蓝色曲线代表 4 条输入线的最大值。因为这等同于对给定输入 x 的每个输出执行 max,所以它被称为逐点 max。

设输入函数为 f(x),g(x)和 h(x)。我们可以把它们表示为 y-f(x)≤0,y-g(x)≤0,y-h(x)≤0。让我们执行这些边界的并集,以生成最大值函数的近似值:

(e(-n(y-f(x))+e(-n(y-g(x))+e(-n(y-h(x)))-1≤1

取边界上的点,我们得到:(e(-n(y-f(x))+e(-n(y-g(x))+e(-n(y-h(x)))-1=1

重新排列结果,使其成为 x 的函数,得到:

y = ln(e(nf(x))+e(ng(x))+e^(nh(x)))/n

这实质上是对数和指数的形式。1/n 通常指温度,记为 T,通常取为 1。对于多个术语,我们得到:y=ln(sum(e^xᵢ,所有 I)。由此导出其名称 log-sum-exp (LSE)。

之前说的软化和 ML 是怎么回事?请注意,log-sum-exp 始终大于实际最大值。这种差异解释了第二大项、第三大项等等。如上式所示,输出是所有项的混合,但较大项的贡献要比较小项大得多,因为我们已经逼近了最大值运算。记住!!n 的值越大,圆越接近正方形。类似地,较大的 n 意味着较大的项比较小的项贡献更大,从而使近似更精确。注意弯曲的可微角,这是我们近似的另一个好处,在 ML 中非常有用。顺便问一下,对数和指数的导数是什么?是我们共同的朋友 Softmax (对,分类层一)。我希望现在你能明白这个著名的函数是如何得到它的名字的。是的,我知道这不是维基百科的文章,所以我会继续。

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

不同 n 值的图表。随着 n 值的增加,近似性提高;查看图表

对数和指数方程的应用并不少见。它的许多属性都在它的维基百科页面上讨论过。也有论文直接用它作为架构,就像用它作为泛凸逼近器泛函数逼近器一样。这个函数有更多的应用,因此它在从 Numpy 到 Pytorch 和 Tensorflow 的几乎所有 ML 库中都内置了有效的实现。即将到来的应用程序就像这一个的特例。

导出软加激活函数

软加激活是神经网络中使用的一种非线性类型。一种常见的非线性是 ReLU,其形式为 max(0,x ),非常常用。在这篇论文中描述的许多条件下,我们需要近似 ReLU 函数。不要深究激活函数和 ML 细节,我们可以通过用我们刚刚学到的方法近似 ReLU 函数来处理这个挑战。

因此,我们必须近似 max(0,x)。为什么不直接引用我们的对数和指数的推导。需要的两个分量是 y≤0 和 y-x≤0。这将因此给联盟作为(e(-ny)+e(-n(y-x)))^-1≤1.这将因此给我们以下等式:y = ln(1+e^(nx))/n.当 n 是 1 时,这被称为软加激活函数。除了最初的论文,这个函数还被用于其他激活函数,如 swishmishsoft++

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

随着 n 的增加,近似性提高;查看图表

我们甚至可以超越并创造出我们自己的 softplus 变种,称之为 leaky-softplus。本质上是使用相同程序的 leaky-ReLU ( max(0.05x,x))的近似值。该函数采用以下形式:y = ln(e(0.05nx)+e(nx))/n.,根据通常的惯例,我们设 n=1。结果如下所示。测试和实验留给读者。;-)

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

不同 n 下的漏软加;查看图表

推导对数损耗

在许多回归任务中,使用被称为绝对损失的损失函数,其本质上是误差的平均绝对值。这种损失在零处是不可微的,并且对于使用高阶导数的训练算法也没有二阶导数。Log-cosh 通过对其进行近似处理很好地处理了这些问题,因此看起来像接近零的均方误差和远离它的绝对损失。更多信息可在这篇文章中了解。因此,我们必须近似|x|,它本质上是 max(x,-x)。我们可以用同样的老把戏得到:y=ln(enx+e-nx)/n.我们还没有达到我们的目标。我们现在可以加减 ln(2)/n,给我们:ln((enx+e-nx)/2)/n+ln(2)/n.下一步是使 n=1,忽略常数,因为它不影响训练过程。这给了我们:ln((ex+e-x)/2)也就是 ln(cosh(x))。这是我们的对数损失函数。

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

注意与 0 附近的抛物线相似。这就是我们进行 ln(2)调整的原因。查看图表

结论

纯粹出于好奇的简单想法可以有非常广泛的应用。好奇心和它能给我们的东西没有上限。希望这些文章为您提供了新的工具和视角,您可以将其应用于科学、工程和艺术等不同的领域。对于好奇的人,我想留下一个很好的资源来提高您对这一思想的理解:代数表达式的可微集合运算

挑战

用一个不等式得出这个数字:

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

解决方案!

用一个不使用模函数的不等式制作这个图形:

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

这个图形向四面八方无限延伸。解决方案。

从 CityGML 三维城市模型到三维网络应用

原文:https://towardsdatascience.com/from-citygml-3d-city-model-to-3d-web-application-829eb8e90514?source=collection_archive---------20-----------------------

实践教程

在 Web 应用程序上可视化 CityGML 的分步指南——荷兰海牙市的一个示例区域。

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

本教程的预期输出截图——在海牙地区使用 3D 语义建筑模型的 3D 网络应用(作者)

基于虚拟地球的 3D 可视化最新技术是一个独特的机会,可以促进各种应用领域的高级分析和可视化任务,如城市规划、室内/室外步行导航、环境模拟、文化遗产或设施管理。让这个概念成为现实的一个核心数据是由开放地理空间联盟(https://www.ogc.org/ OGC—)开发的 CityGML 模型。CityGML 是用于描述 3D 地理空间化城市模型的全球数据模型模式。公开提供开源 CityGML 模型的城市越来越多。

本文将指导您如何基于这些 CityGML 3D 城市模型数据集使用 CesiumJS 创建交互式 3D web 地图。本指南材料最初是(由作者)特别为 2020 年荷兰大地测量和地理信息中心(NCG) 研讨会研讨会制作的。

架构和工作流程

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

基于这些 CityGML 3D 城市模型使用 CesiumJS 创建交互式 3D 网络地图的工作流程(作者)

3D 网络 app 的整体系统架构如上图所示。它包括四个主要组件:CityGML 数据集、3D Tiles 数据集、Web 服务器和用户。

  • 组件 1) CityGML 3D 城市模型
  • 组件 2) 3D 瓦片城市模型
  • 组件 3)网络服务器
  • 组件 4)用户

因此,让我们开始一起创建每个组件💻

组件 1) CityGML 3D 城市模型

我们可以下载 CityGML 格式的 3D 城市模型。在这篇文章中,我选择了海牙地区的 3D 城市模型,因为它是一个紧凑的模型。

当然,您也可以自由探索其他 CityGML 数据集。越来越多的城市公开提供数据集,如下文所列:

[## 2020 年开源 3D 语义建筑模型

开源 3D 城市模型的完整列表(2020 年 10 月更新)

towardsdatascience.com](/open-source-3d-semantical-building-models-in-2020-f47c91f6cd97)

组件 2) 3D 瓦片城市模型

为了优化 3D web 可视化,必须将 CityGML 转换为 3D 切片格式。有几种工具可以执行这种转换。在这篇文章中,我们将使用 FME,它有一个开放免费许可证至少可以免费使用一年,供家庭、研究人员等使用。

用 FME 将 CityGML 模型转换成 3D 瓦片

  • 从打开 FME 工作台开始,将所有 CityGML 模型拖放到 FME 窗口。

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

  • 选择输入格式“CityGML”和工作流选项“单一合并要素类型”。

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

  • 点击“添加一个新的作家”按钮,并选择格式“铯三维瓷砖”

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

  • 工作流应该如下图所示。单击运行,然后等待转换完成。然后,最终的 3D 平铺城市模型将位于您输入的目标文件夹中。

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

组件 3) Web 服务器

使用 CesiumJS 库准备 3D Web 应用程序

在这一步中,我们将使用 CesiumJS 库创建一个包含 3D Web Globe 的 HTML web 文档。你可以使用任何你喜欢的代码空闲或编辑器。我的选择是 VS 代码。然后,创建一个名为“denHaagApp.html”的文件。您可以使用自己喜欢的名称创建文档,并遵循下面的示例 HTML 代码。

  • CesiumJS 查看器(第 13 行)是构建具有灵活设置的 3D globe 的主要组件(如本例中的第 14 到 21 行)。您可以查看 CesiumJS API 文档了解更多可用设置。
  • 3D Tiles 数据可以作为 tileset 加载到 CesiumJS 查看器中(第 23 到 25 行)。不要忘记在第 24 行指定目标 Tileset.json 的 URL。您可以查看文档 CesiumJS API 文档了解更多关于 3D Tiles 数据集的设置。

在 Web 服务器上托管 3D Web 应用程序

这一步,我们将在 Web 服务器上托管第 2 步中的 Web 应用程序和第 1 步中的 3D Tiles 城市模型。你可以自由使用任何你喜欢的网络服务器。在这个例子中,我们使用 XAMPP 开源 web 服务器。(可以从https://www.apachefriends.org/index.html那里得到)

  • 安装 XAMPP。打开 XAMPP 控制面板并启动 APACHE web 服务器。或者,您可以通过C:\ xampp \ Apache \ bin \ httpd . exe 手动启动 Apache。

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

用 XAMPP 控制面板启动 Apache web 服务器。(作者)

  • 在 macOS 和 Linux 中,您可以使用终端输入以下命令来触发 Apache HTTP 服务。
**$ sudo apachectl -k start** // start Apache **$ sudo apachectl -k stop** // stop Apache **$ sudo apachectl -k restart** // restart Apacheor **$ sudo /usr/sbin/apachectl -k start** // start Apache **$ sudo /usr/sbin/apachectl -k stop** // stop Apache **$ sudo /usr/sbin/apachectl -k restart** // restart Apache
  • 将最后一节中的 web 文档(【denHaagApp.html】)和组件 2)中的 output 3D Tiles city models 文件夹放在 C:\xampp\htdocs 目录中。

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

复制并粘贴 3D 瓷砖模型和 web 文档。(作者)

  • 在 HTML web 文档中,将 URL 值更新到 htdocs 文件夹中 3D Tiles 模型的 tileset.json 文件。例如,如果您的 3D Tiles 目录位于 C:\ xampp \ htdocs \ 3D tile \ tileset . JSON .您应该将 URL 值设置为"。/3dtile/tileset.json “或"http://localhost/3d tile/tileset . JSON"因为 APACHE 将为相对于” http://localhost "的 htdocs 目录中的所有内容提供服务。

组件 4)用户

前三个组件完成后,我们可以通过 Web 服务器测试 3D Web 应用程序。您可以在您的 web 浏览器上访问您的 3D web 应用程序可视化 3D 城市模型,网址为http://localhost/denhaagapp . html

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

用本地主机测试 3D Web App。(作者)

结论

本文提供了从 CityGML 语义 3D 城市模型创建 3D 基于 web 的应用程序的分步教程。该指南首先介绍了 CityGML 数据模型。然后,引入 FME 作为从 CityGML 到 3D 瓦片格式的转换工具。最终的 3D web 应用程序由 CesiumJS 库创建,托管在 Apache HTTP web 服务器上。

作者

**Thunyathep Santhanavanich(JOE)**博士候选人
地理信息、计算机科学和数学系,
应用科学大学,斯图加特,Schellingstr。24、D-70174 斯图加特
thunyathep . santhanavanich @ hft-Stuttgart . de

⭐需要我协助你的项目吗?在这里找到我

引用

[1]吴,何,何,龚等(2010).公众参与城市规划过程的基于虚拟地球的三维可视化和交互式框架。计算机,环境和城市系统,34(4),291–298。https://doi.org/10.1016/j.compenvurbsys.2009.12.001

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Joe t . Santhanavanich

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

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

从云到设备

原文:https://towardsdatascience.com/from-cloud-to-device-the-future-of-ai-and-machine-learning-on-the-edge-78009d0aee9?source=collection_archive---------40-----------------------

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

Unsplashtrail 拍摄的照片

人工智能和机器学习的未来在边缘

在设备上训练 ML 模型的最新技术的简要概述。要进行更全面的调查,请阅读我们关于本主题全文。

我们被智能设备包围着:从手机、手表到眼镜、珠宝,甚至衣服。但是,虽然这些设备小巧而强大,但它们仅仅是计算冰山的一角,这个冰山始于你的指尖,终于遍布世界各地的巨大数据和计算中心。数据从设备传输到云,在云上用于训练模型,然后再传输回来部署到设备上。除非用于学习简单的概念,如唤醒词或识别你的脸来解锁你的手机,否则机器学习在计算上是昂贵的,数据在转化为有用的信息之前别无选择,只能传播数千英里。

这种从设备到数据中心再回到设备的旅程有其缺点。用户数据的隐私和安全性可能是最明显的,因为这些数据需要传输到云中并存储在那里,通常是无限期的。用户数据的传输容易受到干扰和捕获,存储的数据也有可能遭到未经授权的访问。但是还有其他明显的缺点。基于云的 AI 和 ML 模型具有更高的延迟,实施成本更高,缺乏自主性,并且根据模型更新的频率,通常更不个性化。

随着设备变得越来越强大,通过将部分或全部模型开发转移到设备本身来解决云模型的缺点成为可能。将模型开发转移到设备上通常被称为边缘学习或设备上学习。进行边缘学习的最大障碍是模型训练,这是模型开发过程中计算量最大的部分,尤其是在深度学习时代。通过向设备添加更多资源或者更有效地使用这些资源或者两者的某种组合,可以加速训练。

将模型开发转移到设备上通常被称为边缘学习或设备上学习。

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

图 1:边缘/设备上学习的各种方法的分层视图。灰色方框是本文和相应论文中涉及的主题。作者图片

图 1 给出了改进设备上的模型训练的方法的分层视图。左边是与实际芯片组一起工作的硬件方法。该领域的基础研究旨在改进现有的芯片设计(通过开发具有更多计算和内存、更低功耗和更小尺寸的芯片)或开发具有新型架构的新设计,以加快模型训练。虽然硬件研究是改善设备上学习的有效途径,但它是一个昂贵的过程,需要大量的资本支出来建立实验室和制造设施,并且通常涉及长时间的开发。

软件方法包含了该领域当前工作的很大一部分。每种机器学习算法都依赖于一小组计算库来高效执行一些关键操作(如神经网络中的乘法-加法)。支持这些操作的库是硬件和算法之间的接口,并允许不基于任何特定硬件架构的算法开发。然而,这些库被大量调整到执行操作的硬件的独特方面。这种依赖性限制了新库所能获得的改进。当涉及到在边缘上改进 ML 时,软件方法的算法部分得到了最多的关注,因为它涉及到机器学习算法本身的开发和改进。

最后,理论方法有助于指导最大似然算法的新研究。这些方法提高了我们对现有技术的理解,以及它们对新问题、环境和硬件的可推广性。

这篇文章集中在算法和理论方法的发展。虽然硬件和计算库同等重要,但考虑到新硬件的长交付周期以及硬件和库之间的相互依赖性,算法和理论空间的最新发展变化更快。

算法

设备上 ML 的大部分工作都是部署模型。部署侧重于使用模型量化和模型压缩等技术来提高模型大小和推理速度。对于设备上的训练模型,需要在模型优化和超参数优化(HPO)等领域取得进展。但是,这些领域的进步提高了准确性和收敛速度,通常是以计算和内存使用为代价的。为了改进设备上的模型训练,重要的是具有知道这些技术将在其中运行的资源约束的训练技术。

为了改进设备上的模型训练,重要的是具有知道这些技术将在其中运行的资源约束的训练技术。

进行这种资源感知模型训练的主流方法是设计满足代理软件中心资源约束而不是标准损失函数的 ML 算法。这种替代测量被设计成通过渐近分析、资源剖析或资源建模来近似硬件约束。对于给定的以软件为中心的资源约束,最先进的算法设计采用以下方法之一:

轻量级 ML 算法 —现有算法,如线性/逻辑回归或支持向量机,具有较低的资源占用,并且不需要对资源受限的模型构建进行额外的修改。这种低占用空间使得这些技术成为构建资源受限学习模型的简单而明显的起点。但是,如果可用设备的资源小于所选轻量级算法的资源占用,这种方法将会失败。此外,在许多情况下,轻量级 ML 算法导致模型复杂度低,可能无法完全捕捉底层过程,从而导致拟合不足和性能不佳。

降低模型复杂性 —控制学习算法的大小(内存占用)和计算复杂性的更好方法是通过约束模型架构(例如,通过选择更小的假设类)。这种方法具有额外的优势,即这些模型可以使用传统的优化例程来训练。除了模型构建,这是为模型推理部署资源高效模型的主要方法之一。最重要的是,这种方法甚至可以扩展到深度神经网络(DNNs ),如图 2 所示,这是朝着更小、更快、更精简架构的缓慢但稳定的进展。这一进展得益于神经结构搜索(NAS)技术的使用增加,该技术显示出对更小、更有效的网络的偏好。与轻量级 ML 算法方法相比,模型复杂性降低技术可以适应更广泛的 ML 算法类别,并且可以更有效地捕获底层过程。

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

图二。模型复杂性按时间顺序演变的球形图。最高精度是在 ImageNet 数据集上测量的。模型复杂性由 FLOPS 表示,并由球的大小反映。精确度和误差来自模型的原始出版物。模型的时间是相关联的出版物首次在线可用的时间。郭俊耀图片。

修改优化例程 —算法上最重要的进步是专门针对资源高效模型构建的优化例程的设计,其中在模型构建(训练)阶段纳入了资源约束。这些方法不是预先限制模型架构,而是可以调整优化例程以适应任何给定模型架构(假设类)的资源约束。

资源受限的以模型为中心的优化例程关注于通过随机舍入、权重初始化或通过将量化误差引入梯度更新来提高将在训练后量化的模型的性能。分层训练和用计算换取内存的技术也很流行,这两种技术都试图减少与训练 dnn 相关的计算需求。在某些情况下,这种方法还可以动态地修改架构以适应资源约束。尽管这种方法提供了更广泛的模型类别选择,但设计过程仍然依赖于特定的问题类型(分类、回归等)。)并取决于所选择的方法/损失函数(线性回归,回归问题的岭回归)。

资源受限的通用优化例程,如 Buckwild!SWALP 致力于通过使用低精度算法进行梯度计算来减少模型训练的资源占用。另一条工作路线涉及实现定点二次规划(QP ),例如用于求解线性模型预测控制(MPC)的 QSGD 或 QSVRG。这些算法中的大多数涉及修改凸优化的快速梯度方法,以在资源受限的设置下在有限次迭代中获得次优解。

数据压缩 —数据压缩不是限制模型的大小/复杂性,而是在压缩数据的基础上构建模型。目标是通过固定的每样本计算成本来减少数据存储和计算,从而限制内存使用。一种更通用的方法包括采用高级学习设置,以适应样本复杂度更小的算法。然而,这是一个更广泛的研究课题,不仅仅局限于设备上的学习。

数据观察的新协议 —最后,完全改变传统数据观察协议的全新方法是可能的(如在批处理或在线设置中 i.i.d .数据的可用性)。这些方法由潜在的资源约束学习理论指导,该理论根据泛化能力捕捉资源约束和模型的良好性之间的相互作用。与上述方法相比,该框架提供了一种通用机制来设计资源受限算法,用于更广泛的学习问题,适用于针对该问题类型的任何方法/损失函数。

挑战如果没有恰当地抽象出硬件依赖性,相同的模型和算法在不同的硬件上可能会有非常不同的性能特征。虽然新的损失函数可以考虑这种依赖性,但它仍然是一个相对较新的研究领域。在许多情况下,假设可用于培训的资源预算不会改变,但通常情况下不会。我们的日常设备通常是多任务的——查看电子邮件、社交媒体、给人发消息、播放视频……不胜枚举。这些应用和服务在任何给定时刻都在不断争夺资源。将这种不断变化的资源状况考虑在内,对于有效的边缘模型训练来说是一个重要的挑战。

最后,需要改进的模型分析方法来更准确地计算算法的资源消耗。这种测量的当前方法是抽象的,并且集中于应用软件工程原理,例如渐近分析或像 FLOPS 或 MACs(乘加计算)这样的低级测量。这些方法都没有给出资源需求的整体概念,并且在许多情况下代表学习期间系统所需的总资源的微不足道的一部分。

理论

每一种学习算法都是基于一种保证其性能某些方面的基本理论。该领域的研究主要集中在可学性——开发框架来分析算法的统计方面(即错误保证)。虽然传统的机器学习理论是大多数当前方法的基础,但开发包含资源约束的新的可学习性概念将有助于我们更好地理解和预测算法在资源受限的环境下将如何表现。大多数现有的资源受限算法可以分为两大类理论

传统学习理论 —大多数现有的资源受限算法是根据传统的机器学习理论(如 PAC 学习理论、错误界限、统计查询)设计的。这种方法的局限性在于,这些理论主要是为分析用于模型估计的算法的误差保证而建立的。资源约束对算法泛化能力的影响没有通过这样的理论直接解决。例如,使用降低模型复杂性的方法开发的算法通常采用两步方法。首先,假设类的大小被预先限制为那些使用较少资源的假设类。接下来,设计一种算法来保证该假设类中的最佳模型。这种框架所缺少的是错误保证和资源约束之间的直接相互作用。

资源受限的学习理论 —更新的学习理论试图克服传统理论的缺点,特别是因为新的研究表明,在资源受限的设置下,学习假设类可能是不可能的。早期的大多数算法假设新的数据观察协议都属于资源受限理论的范畴。通常,这种方法修改了以批处理或流式方式呈现的 i.i.d .数据的传统假设,并引入了限制该方法所使用的存储器/空间占用的数据可观察性的特定协议。这些理论提供了一个平台,在内存受限的设置下,利用现有的计算高效的算法来建立具有强错误保证的机器学习模型。著名的资源受限学习理论包括有限注意力焦点(RFA)、基于新的统计查询(SQ)的学习范式,以及将假设类建模为假设图的基于图的方法。分支程序在资源约束(记忆)下以矩阵的形式(与图相反)翻译学习算法,其中在矩阵范数的稳定性(以其最大奇异值的上界的形式)和具有有限记忆的假设类的可学习性之间存在联系。虽然这种理论驱动的设计提供了一个通用框架,通过该框架可以为广泛的学习问题设计算法,但是迄今为止,基于这些理论开发的算法非常少。

挑战

结论

当我们把第一代 iPhones 放进口袋时,充满智能设备的未来还是科幻小说中的东西。13 年后,设备变得更加强大,现在承诺人工智能和人工智能的力量就在我们的指尖。然而,这些新发现的能力是由大规模计算资源(数据中心、计算集群、4G/5G 网络等)支撑的门面,这些资源将人工智能和人工智能带入了生活。但是,只有当设备能够切断它们和云之间的生命线时,它们才能真正强大。这需要在这些设备上而不是在云中训练机器学习模型的能力。

迄今为止,在设备上训练 ML 模型仍然是一种学术追求,但随着智能设备数量的增加和硬件的改进,人们对在设备本身上执行学习产生了兴趣。在行业中,这种兴趣主要是由硬件制造商推动的,这些硬件制造商推广针对特定数学运算进行优化的人工智能专用芯片组,以及主要在计算机视觉和物联网领域为特定利基领域提供特别解决方案的初创公司。从 AI/ML 的角度来看,大部分活动位于两个领域——开发可以在资源约束下训练模型的算法,以及开发为这种算法的性能提供保证的理论框架。

在算法层面,很明显,当前的努力主要针对利用已经轻量级的机器学习算法,或者以减少资源利用的方式修改现有算法。在我们能够在边缘上一致地训练模型之前,存在许多挑战,包括需要将算法与硬件解耦,以及设计捕捉资源约束的有效损失函数和度量。同样重要的是,扩展对具有低样本复杂度的传统以及高级 ML 算法的关注,并且处理资源预算是动态的而不是静态的情况。最后,提供一种简单可靠的方法来分析资源约束下的算法行为将会加快整个开发过程。

资源受限算法的学习理论关注的是算法在资源受限情况下的不可学性质。自然的下一步是找出能够保证算法可学性和相关估计误差的技术。现有的理论技术也主要关注这些算法的空间(存储)复杂性,而不是它们的计算要求。即使在可以确定满足资源限制的理想假设类别的情况下,也需要进一步的工作来从该类别中选择最佳模型。

尽管有这些困难,边缘机器学习的未来是令人兴奋的。即使是深度神经网络,模型规模也一直在下降。苹果的 Core/CreateML 等主要平台都支持设备上模型的再训练。虽然模型的复杂性和训练制度继续增长,但出于隐私和安全、成本、延迟、自主性和更好的个性化的原因,我们可能会继续看到将计算从云卸载到设备的趋势。

本文由 Sauptik Dhar、Junyao Guo、Samarth Tripathi、Jason Liu、Vera Serdiukova 和 Mohak Shah 供稿。

如果你有兴趣对边缘学习进行更全面的调查,请阅读我们关于这个话题的 全文

从相关到因果

原文:https://towardsdatascience.com/from-correlation-to-causation-49f566eea954?source=collection_archive---------18-----------------------

如何避免常见的陷阱,并从相关性到因果关系?

在现实生活和商业中,我们经常想知道具体行为的偶然联系。我们想知道新的政府政策是否在减少贫困,上私立大学是否会增加我们未来的收入,或者我们在应用程序中推出的新功能是否会增加销售额。

基本术语

相关性是指一对变量线性相关的程度。

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

因果关系暗示了两个变量之间的因果关系,意味着一个变量的变化会引起另一个变量的变化。

相关性并不意味着因果关系

相关性并不意味着因果关系一定是你听说过的。那到底是什么意思?如果 A 与 B 相关,这可能意味着 A 导致 B(因果关系)。但它也可能意味着所有这些其他事情——B 导致 A(反向因果关系),两者可以互为因果(双向因果关系),C 导致 A 和 B(共同的因果变量)或只是 A 和 B 之间的巧合关系(虚假相关)。下面是一个来自有趣的网站的虚假关联的例子,它收集了一些荒谬的关联。

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

虚假相关的一个例子

在美国,一所精英私立四年制大学比公立大学要贵得多。在本州上公立大学的人通常每年要少付 20,000 美元。那可是一大笔钱啊!但是私立大学可能更好,因为它有更杰出的教师、更好的设施和更聪明的同龄人,这导致了一个合理的假设,即它可以给你未来的收入带来显著的增长。如果你比较两个群体之间的收入,那些上私立大学的和那些上公立大学的,它确实揭示了一个有利于私立大学的巨大差距。

其他条件不变的意思是“所有其他事情都一样”,这是因果推理的核心思想。这里的比较是其他条件不变吗?私立大学通常更具选择性,要求更高的 SAT 分数,让更聪明的学生去那里。此外,事实上他们花费更多,使得去那里的普通学生更富有。通常来说,经济背景较好的聪明人比其他人挣得多,不管他们上的是什么大学。这里的因果关系问题是,如果一个学生在“其他条件相同”的情况下去了公立大学和私立大学,那么收入会有什么不同?当然,我们不能在同一个学生身上观察到两者。

观察行为的平均差异=平均因果效应+选择偏差

为了从观察到的差异中获得偶然效应,你需要消除选择偏差。这方面的黄金标准是随机对照试验(RCT)。随机分配一些人,给他们应用程序中的新功能,称他们为治疗组。将他们与另一组随机分配的没有新特征的人进行比较,称他们为控制组。当你比较两组之间的销售差异时,你会发现你的新功能对销售的因果影响。随机分配确保了选择偏差在平均水平上相互抵消,并且假设你的群体代表了你的真实群体,它留给你因果效应。

媒体经常忽略这一点,用吸引人的标题暗示因果关系。看看《赫芬顿邮报》这篇题为狗能帮你活得更久的文章。这是基于一项研究得出的结论,养狗可以降低 24%的全因死亡率。然而,它也提到“一个可能的限制是分析没有针对混杂因素进行调整”。这意味着这是一项没有考虑选择偏差的观察性研究。养狗的人比不养狗的人更富有、更快乐、锻炼更多,这可能是他们活得更久的真正原因。

有时影响更可怕——研究表明,接受激素替代疗法(HRT)的女性患冠心病(CHD)的几率更低。这导致医生建议用激素替代疗法来治疗冠心病。后来的随机对照试验表明,HRT 的使用导致冠心病风险的小幅增加。原来,最初进行 HRT 分析的妇女更有可能来自更高的社会经济背景,可能有更好的饮食和更多的锻炼,这是 CHD 发病率较低的原因。下次你看到一篇声称“吃这种新时尚饮食的人更长寿”或“服用特定的维生素补充剂会让你更聪明”的文章时,花点时间想想这是否真的是其他因素不变。

缺乏随机分配的因果关系

随机分配并不总是可能的。你不能让一群学生随机加入特定的大学。我肯定学生和大学都会反对。如果你仔细控制选择偏差,我们仍然可以在实践中获得真实实验的偶然力量。

我们可以通过对 SAT 分数和性别(通常是容易获得的数据)进行控制,首次发现这种因果关系。在 SAT 分数相近、性别相同的人群中,我们还能看到收入上的差异吗?我们仍然看到了积极的影响。这是否意味着你应该选择私立大学?收入的影响远不止这些——家庭背景、学生志向和人脉都可能影响收入。可能性是无穷无尽的,有些很难量化。我们如何解释这些可能导致选择偏差的省略变量?

Stacy Berg Dale 和 Alan Krueger 的一项聪明的研究使用了一种捷径来捕捉这些效应。关键的假设是,申请类似的选择性大学并被类似的选择性大学录取的学生应该是相似的(基于 Barron 的方案,该方案将大学分为 6 类,从最具竞争力到无竞争力)。通过对此进行控制的回归分析,他们发现上私立大学似乎与未来收入无关。

当然,可能有一些隐藏的变量,我们没有数据,因此无法控制。例如,这里我们没有家庭规模的数据。但是我们知道较小的家庭平均收入较高。此外,私立学校的学生一般来自较小的家庭。因此,我们可以对这个被忽略的变量的可能影响进行有根据的猜测——也就是说,控制这个变量可能会对私立学校收入优势的假设产生更大的影响。这让我们对原来的结论更有信心。这种对省略变量的仔细推理通常是因果分析的重要部分。在添加了几个关键控件之后,添加更多的控件应该不会对我们的结果产生太大的影响。在这里,在添加了对申请和录取选择性的控制后,添加更多的控制,如 SAT 分数,不会对结果产生太大影响。这也让我们对结果更有信心。

让我们以另一个假设的商业例子来结束。假设你去年在社交网络应用中推出了一项新功能,即加入当地社区的能力。你想知道它是否让用户对应用程序有了更多的参与。如果你比较加入社区的人和没有加入社区的人,并比较他们的参与度,你会发现加入社区的人参与度更高。但是那些已经对你的应用有更多参与的人很可能是加入你的社区的人。如果你看看在过去一年中有类似参与并加入社区的人,也许你会意识到社区减少了他们之间的参与。这可能是因为这些社区中有很多仇恨或垃圾邮件,这使得用户不太喜欢这个应用程序。

揭示隐藏的变量和有一个强有力的潜在原因表明因果关系,直到它可以被证明不是这样。

最后的想法

好的比较总是能解释选择偏差。对于许多业务应用程序,这在实践中通常就足够了。对于更重要的政策,在使用更复杂的方法之前,这可以是一个很好的基准,如使用工具变量或 T2 回归不连续设计。尽可能使用随机分配。

参考

  • 黛比·A·劳洛尔,乔治·戴维·史密斯,沙·易卜拉欣,评论:激素替代-冠心病难题:这是观察流行病学的死亡吗?https://doi.org/10.1093/ije/dyh124国际流行病学杂志,第 33 卷,第 3 期,2004 年 6 月,第 464–467 页
  • Joshua d . ang rist & jrn-Steffen Pischke,2014 年。“掌握‘度量’:从原因到结果的路径”,经济学书籍,普林斯顿大学出版社,第 1 版
  • 史黛西·伯格·戴尔和克鲁格(2002)。估算上一所更好的大学的回报:选择在可观察和不可观察上的应用。《经济学季刊》, 第 117 期 (4),1491–1527 页。于 2020 年 5 月 10 日从www.jstor.org/stable/4132484检索

机器学习中从相关性到因果性:为什么和如何

原文:https://towardsdatascience.com/from-correlation-to-causation-in-machine-learning-why-and-how-4485bca8d145?source=collection_archive---------10-----------------------

为什么我们的人工智能需要理解因果关系

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

乌列尔 SCUnsplash 上的照片

相关性怎么了?

2016 年 5 月,COMPAS 算法被标记为种族偏见[1]。这种算法被美国用来通过预测再次犯罪的可能性来指导刑事判决。据估计,在其他背景因素相同的情况下,黑人比白人更有可能再次犯罪。

问题是,该算法将相关性(过去的犯罪模式)与因果关系(黑人更有可能犯罪)混淆了。

这在医学上也是一个问题。请考虑以下情况:

100 名患者因肺炎入院,其中 15 名还患有哮喘。医生知道哮喘使他们更容易生病,所以给他们更积极的治疗。正因为如此,哮喘患者实际上恢复得更快。

如果我们使用这些数据来训练一个模型,并且不小心的话,这个模型可能会得出哮喘实际上可以改善恢复的结论。因此,它可能会建议减少治疗的力度。当然,我们可以看到这是错误的——但对于一个人工智能模型来说,这并不那么明显。

从统计学到机器学习

这个没有因果关系的相关问题是机器学习中的一个重要问题。

正如 ryx,r 博客指出的那样,统计学和机器学习的一个关键区别是我们关注的焦点。在统计中,重点是模型中的参数。例如,对于预测房价的模型,我们希望了解每个参数以及它如何影响预测。

另一方面,在机器学习中,重点是更少关于参数,更多关于预测。参数本身的重要性仅在于它们预测感兴趣的结果的能力。

机器学习非常擅长在大量数据中识别复杂、微妙的关系,以高精度预测结果。问题是:这些关系是相关性,而不是因果关系。

相关性和因果性有什么区别?

简而言之:

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

关联是一个关联。当一个事物上升时,另一个事物下降。或者向上。其实无所谓,只要他们一起改变就好。

但是我们不知道第一次变化是否引起了第二次变化。或者即使第二个导致了第一个。还可能有第三个因素,它实际上独立地改变了这两点。

假设我们注意到晒伤和冰淇淋销售之间的相关性。人们被晒伤后会买更多的冰淇淋吗?还是人们买了冰淇淋,然后在太阳下晒了太久?

也许吧,但这与相关性的真正原因相比微不足道。两者都有一个共同的原因。晴朗的天气。在这里,太阳是一个**“混杂因素”——**同时影响两个感兴趣的变量(导致相关性)。

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

dinosoftlab制作的图标。经许可使用。受安东尼·菲格罗亚的启发相关性不是因果关系

因此,总而言之,从相关性到因果关系,我们需要排除所有可能的混淆因素。如果我们控制所有的混杂因素(并考虑随机机会),我们仍然观察到一种联系,我们可以说有因果关系。

那么,我们如何去除混杂因素呢?

金标准是随机对照试验(RCT)

这里,我们完全随机地将样本人口分成两部分。一半接受一种治疗,另一半接受另一种治疗。因为这种分裂(至少在理论上)是完全随机的,结果之间的任何差异都是由于不同的治疗方法造成的。

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

来源:人工智能在医疗保健中的作用是什么?目前的证据表明了什么。原纸

但有时我们不能跳 RCT。也许我们已经收集了数据。或者,也许我们正在调查一个我们无法改变的变量(比如遗传或天气的影响)。我们能做什么?

这里有一个简洁的数学方法,叫做**‘分层混杂’**。我不会在这里深入讨论细节,但是本质上它通过对它们的值的每一个可能的组合求和来去除混杂因素。(如果感兴趣,朱迪亚·珀尔是这一领域的先驱,并在这里概述了方法论。费伦茨·胡萨尔分享了一个更简短的描述。

因果关系:机器学习的未来?

将因果关系引入机器学习可以使模型输出更加稳健,并防止前面描述的错误类型。

但是这看起来像什么呢?我们如何将因果关系编码到模型中?

确切的方法取决于我们试图回答的问题和我们可用的数据类型。

最近的一个例子是巴比伦健康的这篇论文。他们使用因果机器学习模型,根据患者的症状、风险因素和人口统计数据对可能的疾病进行排序。

他们训练模型问“如果我治疗这种疾病,哪些症状会消失?”以及“如果我不治疗这种疾病,会留下哪些症状?”。他们将这些问题编码成两个数学公式。使用这些问题带来了因果关系:如果治疗疾病导致症状消失,那么这就是因果关系。

他们将他们的因果模型与只关注相关性的模型进行了比较,发现它表现更好——特别是对于更罕见的疾病和更复杂的病例。

展望未来

尽管机器学习潜力巨大,令人兴奋,但我们不能忘记我们的核心统计原则。

我们必须超越相关性(关联)来看待因果关系,并将其构建到我们的模型中。

我们可以通过去除混杂因素来做到这一点;通过随机对照试验或智能数学操作。

这对于确保我们作为一个社会能够受益于机器学习而不屈服于其缺陷至关重要。

原载于 2020 年 10 月 31 日chrislovejoy . me

参考文献

(1) 刑事量刑中的机器偏见——Pro Publica

(2) 统计学中的因果推断:初级读本,第 3 章:干预的效果

(3) ML 超越曲线拟合-推理博客

(4) 从统计学到机器学习— ryx,r 博客

(5) 用因果机器学习提高医疗诊断的准确性【研究论文】巴比伦健康

其他关于相关性和因果关系的文章:

附录:因果推理层级(朱迪亚·珀尔的因果阶梯)

朱迪亚·珀尔描述了因果推理的阶梯。

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

来源:chrislovejoy . me

当超越联想推理时,他考虑了两种主要类型:介入因果推理反事实因果推理。

介入式因果推理 问“如果我把 A 设为值 X,B 会怎么样?”如果将 A 的值设置得更高导致 B 的值更高(没有混杂因素),我们说这种关系是因果关系。

反事实因果推断 有点小技巧。我们问“假设 A 是值 X,这导致 B 等于 Y,如果 A 实际上是一个更高的值,会发生什么?”(即。它在事件已经发生之后询问这个*。如果不同的 A 会导致不同的 B 值,我们说这种关系是因果关系。*

如果有兴趣了解这些区别,请查看以下资源:

从尖端研究到 Giotto 的工业应用

原文:https://towardsdatascience.com/from-cutting-edge-research-to-industrial-applications-with-giotto-c5657a4450de?source=collection_archive---------27-----------------------

为拓扑机器学习创建自己的转换器指南。

由迭戈·费奥里、托马斯·波伊斯路易斯·汤斯顿翁贝托·卢波弗朗切斯科·帕尔马编剧

如果你是一名企业数据科学家,你最好能接触到最前沿的研究,因为这个领域发展如此之快。其中一个挑战是,与 PyData 堆栈和 scikit-learn 等机器学习框架的集成很难做到简单。

从前沿研究到工业应用需要什么?

目前,机器学习的大多数研究都是以文章的形式发表的,在某些情况下,还会以伴随代码的形式发表。通过设计,这些代码库针对特定的研究应用进行了优化,将这些工具与更广泛的生态系统集成并不总是那么简单。

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

L2F ,我们启动了 Giotto 开源项目,其愿景是让更广泛的数据科学社区可以使用先进的机器学习技术。我们目前开发了两个库:

在这篇文章中,我们的目的是展示如何使用最先进的技术进行图形分类,并将其与 giotto-tda 集成。具体来说,我们将把最近 GUDHI/Inria 的 Royer 等人的研究开源代码整合到 giotto-tda 管道中。

GitHub repo 用于图形拓扑特征的自动提取(以下分子毒理学分类示例)

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

GithubTwitterSlack 上关注 Giotto 的最新动态

Royer 等人引入的算法被称为 ATOL,用于自动面向拓扑的学习。它解决了拓扑数据分析(TDA)中的一个关键问题,即从所谓的持久性图中自动提取特征。持久性图是一个数据集的全局拓扑的表示,以其同时在所有尺度上的连通性表示,它是通过逐渐连接相邻点并记录结构“同源性”的演变而获得的。这是一种理解、可视化和从数据中提取特征的新方法。

对于拓扑机器学习、持续同源/持续图以及如何在 ML 管道中使用 giotto-tda 的一般介绍,您可以参考这篇博客文章

在 giotto-tda 中推出您自己的评估工具

与 scikit-learn 的紧密集成是 giotto-tda 背后的关键设计原则之一。这使得为您自己的项目实现与 scikit-learn 管道、元估算器和网格搜索等模型选择工具交互的定制组件变得简单。

让我们通过考虑 scikit-learn 提供的 transformer 模板来热身。从模板中,我们可以看到,要创建一个定制的转换器,我们需要实现三个基本组件:构造函数“init”、“fit”和“transform”。

scikit-learn 中的 transformer 方法模板

变压器是特殊类型的估算器。估计器是基于一些训练数据来拟合模型的对象。所有估计器都实施“拟合”方法,该方法将估计模型存储在公共或私有属性中:

拟合方法的模板

创建对象时,您会希望定义一个实例化方法,该方法定义了对象的默认参数。__init__方法应该只定义独立于训练数据的模型的超参数。

init 方法的模板

变压器与一般估算器的不同之处在于,它们还应该实现一种用于过滤或修改数据的“转换”方法。传递给“transform”的数据可能与用于拟合模型的数据不同,在“fit”中学习到的信息可以用于“transform”中—通常情况下,这是监督或非监督统计学习的情况!

转换方法的模板

从纸张到代码

在 ATOL 的例子中,原始代码的作者已经定义了一个 transformer 类*、Atol* 、T2(检索于 2020 年 1 月 21 日)。如您所见,它实现了“fit”和“transform”方法。“fit”的主要作用是将 KMeans 算法的运行所计算的聚类中心存储在一组持久性图中,而“transform”可以应用于一个单个不可见的持久性图,以产生一个向量表示。

这个 Atol 类接近于在机器学习框架中直接使用,但是它有一个关键的缺点:如果你的数据问题产生了持久性图的集合,你可能会希望“transform”方法也能够作用于持久性图的集合。这是 scikit-learn transformers 的典型特征,也是模型验证等工作的关键。

这一点,加上其他旨在使 Atol 转换器更符合 scikit-learn 的贡献指南的小变化,就是为什么我们在这里放在一起这个类的一个稍微修改的版本。下面是新的转换方法。它通过在集合的每个元素上调用“transform_single_diag”方法来作用于图的集合 X

专家将注意到另一个技术差异,这与 giotto-tda 向用户单独展示不同“同源维度”的独特能力相关(因此将 Atol 独立应用于每个*)。*

拓扑特征自动生成

将持久性图与机器学习集成的一个常见挑战是需要将图矢量化为特征向量。多年来,提出了各种各样的建议。几个特别的矢量化方法被社区广泛使用,其中许多都在 giotto-tda 中实现!然而,找到自动学习特定于任务的向量表示的鲁棒方法仍然是一个具有挑战性的研究问题。

为了解决这个问题, Royer 等人最近提出了一种新的
算法来自动矢量化持久性图。ATOL 基于以下步骤:

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

ATOL 算法的不同宏步骤

  1. 为目标向量空间选择一个嵌入维数 d。
  2. 将一组持久性图连接成一系列点。
  3. 在这些点上运行聚类算法以获得 d 个聚类中心
    c₁,…,d.
  4. 对于每个聚类中心 cᵢ,计算所谓的拉普拉斯对比度
    函数(将其视为从 2D 平面到真实直线的特殊映射)。
  5. 连接拉普拉斯函数以形成一个向量(v₁,…,v_d ),该向量
    从持久性图中捕获基本的拓扑信息。

用 Giotto-learn 对分子进行毒理学分类

图分类是一项核心的机器学习任务,可用于确定分子的毒性,或将社交网络的成员分为一个或多个类别。观察结果是完整的图表,目标是预测它们属于哪一类。

化学和图形,它们有点像手和手套:天生一对。有趣的事实是,图形这个术语本身首次出现在 1878 年的《自然》杂志论文,将代数的应用庸俗化为……化学。

GitHub repo 用于 TDA 毒理学分类

图上的机器学习

为了发挥它们的魔力,机器学习算法要求输入是数字形式的。为了学习图形,我们需要一种方法来用数字编码它们的结构。

图编码了实体之间关系的一个非常基本的概念,这使它们成为非常灵活的对象。然而,只有在它们的数值表示中,我们才能对它们进行机器学习。

两张看起来非常相似的图实际上可能有很多不同之处。图与图之间的距离表示我们认为图与图之间的差异很小的程度,并且是根据它们的数值表示来计算的。

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

图可以通过其路径网络的鲁棒性来表征。

路径网络移除一条或两条边的弹性是根据不连通区域的创建来衡量的。移除图 0 和图 1 中的一条或两条随机边会限制您从一个节点到另一个节点自由移动的能力,因为一些点会与其余的点不相交,而在图 4 或图 6 中不会发生这种情况。

用 TDA 实现图形矢量化:HKS +阿托尔

在你能想到的所有数据结构中,图是最有可能有一些拓扑概念的。

HKS 算法(热核签名)研究当您在图中添加或删除边时,图的组件如何合并。在固定了参数 t 之后,它为每个 H₀和 H₁.输出两个持久性图我们对 t=0.1 和 t=10 运行 HKS,并有 8 个图表来描述该图。

ATOL 算法然后基于 N 个持续图的集合产生特征向量。在固定了多个聚类 b 之后,Atol 输出大小为 Nb 的特征向量。我们对 b=2 运行 HKS,这产生了 82=16 个坐标。

基于标记为安全或有毒的 1478 个分子的集合(分类比率为 93:7 ),我们使用 ATOL 从持久性图中构建描述性特征。

结果

数据集上的现有基准在 AUC 中通过称为 TextCNN 的单一深度学习模型达到 0.995。利用分子的特征和我们管道中产生的特征,我们达到了非常可观的 0.976。

更具体地说,我们最终的 XgBoost 模型具有以下特性:

  1. 分子中存在的化学物质(17 个特征)
  2. 关于键取向的化学特征(3 个特征)
  3. 环礁特征(16 个特征)

有趣的是,仅环礁特征(没有化学信息)在 AuRoc 上的得分为 0.72。

更多带代码的文章:

图形嵌入

时间序列

可视化

坚持

乔托

参考

  • 马丁·罗耶、弗雷德里克·夏萨尔、池宇一、梅田裕平。自动面向拓扑的学习。2019. ⟨hal-02296513⟩
  • ATOL:python 3 package for ATOL:Automatic topological-Oriented Learning开源代码作者 Martin Royer,版权:Inria。

从数据分析师到数据故事讲述者只需 3 步

原文:https://towardsdatascience.com/from-data-analyst-to-data-storyteller-in-3-steps-54b56815b567?source=collection_archive---------8-----------------------

使用 Matplotlib 中的这个简单过程改进您的数据可视化

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

为什么你需要学习这个

众所周知,各种形式的数据准备构成了数据科学家工作的 80%以上。鉴于进入该领域的新人似乎认为这一切都是关于昂贵的计算机和复杂的深度学习模型,这是一条有价值的信息。你也许可以用这些东西给数据团队的同事留下深刻印象,但是你的经理和客户通常不太关心技术细节。然而,让这些人注意到并正确理解你的工作是至关重要的。这就是为什么你需要学习数据可视化!

对某些人来说,数据可视化只是困扰着烦人的利益相关者。这是一种非生产性的思维方式,也是错误的!请这样想:

如果你不能可视化你的结果,你就不知道你的结果。

每个人和他们的祖母都可以创建一些单行散点图,并称之为数据可视化。然而,要将基本的可视化转化为一个故事,让您的经理和客户不仅能够理解,还会感到兴奋和受到鼓舞,这需要一个充满激情和技能的数据科学家。在这篇文章中,我将帮助你把你的技能提升到一个新的水平!你所需要做的就是遵循一个简单的三步程序,这个程序可以应用到你的每一个视觉化形象中。你的经理、客户和未来的雇主会感谢你努力阅读这个故事!

糟糕的视觉效果是什么样的?

试着想象一些你的第一个 matplotlib 可视化。很可能,它们看起来像图 1。我在这里尝试做的是将不同年龄组的各种音乐类型的流行程度形象化。

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

图 1 —我们的基本图

该线图由以下代码生成:

fig, ax = plt.subplots(figsize =(10,6))# Loop through the genres
for i, g in enumerate(genres):

 # Define x and y
 x = np.arange(7)
 y = music_pref_2019[g]

 # Plot lines
 ax.plot(x, y, label = g)

 # X axis
 ax.set_xticks(x)
 ax.set_xticklabels([“14–19”, “20–29”, “30–39”, “40–49”, “50–59”, “60–69”, “70+”])

ax.legend()plt.show()

这个情节有很多问题。我们将通过以下三个步骤来改进它:

  1. 添加信息
  2. 减少信息
  3. 强调信息

信噪比描述了与不必要的信息量相比有价值的信息量。在任何创造性的产品(文章、视觉化图像、音乐作品)中,我们应该以最大化这个比率为目标。

我们可以通过添加有用信息来提高信噪比,也可以通过删除无用信息来提高信噪比。在理想的可视化中,所有重要的信息都被呈现和强调,而没有任何实际价值的东西都被删除。

步骤 1—添加信息

让我们集思广益,看看图 1 中缺少了什么。以下是我的观察。我们需要补充:

  1. 一个标题
  2. 轴标签
  3. y 轴的刻度和刻度标签
  4. 直接从行中读取不同年龄组的单个值的方法

我们可以通过在完整的可视化代码中包含以下代码行来实现这一点:

# 1
ax.set_title("Popularity of Different Genres by Age Groups")
# 2
ax.set_xlabel("Age")
ax.set_ylabel("Amount of people with preference (%)")
# 3
ax.set_ylim(0,1)
ax.set_yticklabels(int(i*100) for i in ax.get_yticks()) # Turns the # decimals into percent values
# 4
ax.scatter(x, y) # adds points at every tick of x

最重要的是,我为我们的系列选择了不同的颜色。matplotlib 标准颜色对于色盲的人(比如我)来说很难处理。因此,我在下图中只使用了 tableau 色盲调色板中的颜色。

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

图 2 —增强图

我们可以清楚地看到,从图 1 到图 2,在给出的信息量方面有所改进!通过添加相关信息,我们提高了信噪比。我们需要不惜一切代价保护相关信息!因为我们需要的一切都以某种形式包含在可视化中,所以很容易就把它留在那里。然而,这就是奇迹发生的地方。第 2 步和第 3 步将保留所有相关信息,但使用某些技术使整个图表更加清晰易读。

第二步——减少信息

减少信息并不总是意味着删除标签、图例或记号等信息。有时,它只是意味着减少信息对读者的阻碍程度。这里有一些关于如何处理这个情节的想法:

我们可以:

  1. 移除蜱
  2. 移除脊椎
  3. 去掉大图例,直接把标签写在每一行上
  4. 仅在 y 轴上留下 4 个刻度
  5. 去掉 x 和 y 标签,直接在最后一个刻度上标出
# 1
ax.tick_params(bottom = False, top = False,
                  left = False, right = False)
# 2
for key, spine in ax.spines.items():
    spine.set_visible(False)
# 3
ax.text(0,.875, "Rock/Pop", rotation = -1.5)
ax.text(0,.144, "Classical", rotation = 16)
ax.text(0,.395, "Hardrock/Metal", rotation = 4.5)
ax.text(0,.679, "Hip Hop/Rap", rotation = -31)
ax.text(0,.592, "Techno/House", rotation = -15)
# 4
ax.set_yticks([0,0.25,0.5,0.75,1])
# 5
ax.set_xticklabels(["14-19", "20-29", "30-39", "40-49", "50-59", "60-69", "70+ years"])
ax.set_yticklabels([0, 25, 50, 75, "100%"])

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

图 3 —简化图

第三步——强调信息

现在我们已经添加了所有相关信息,并删除了所有不相关的信息,我们仍然可以优化我们的可视化。也许我们可以做些什么来强调某些方面。这里有一些关于这个特定情节的想法:

  1. 更改标题的字体、字号和粗细
  2. 强调数据的连续质量

要改变标题字体,我们可以创建一个 font_dict,在 ax.set_title()函数中调用。

title_font= {"family" : "Cambria",
             "size" : 16,
             "color" : "black",
             "weight" : "roman"}
# LATER IN THE CODE
ax.set_title("Popularity of Different Genres by Age Groups", fontdict = title_font)

为了强调数据的连续质量,我们需要去掉类别标签,改用平均年龄。对于分类变量,我们不知道任何年龄组参与者的平均年龄是多少。然而,我们可以使用类别中可能年龄的四舍五入平均值。任何 c 类的平均年龄 m 为:

m = int(c_start + c_end)

现在,我们可以用这些平均年龄作为 y 轴标签:

ax.set_xticklabels(["17", "25", "35", "45", "55", "65", "70+ years"])

为了进一步强调数据的连续性,我们可以减小点的大小和透明度,同时增加线的大小:

ax.scatter(x, y, c = cb_colors[i], label = mapping_dict[g], marker = ".", linewidth = 3, alpha = 0.8)ax.plot(x,y, c = cb_colors[i], linestyle = "-", linewidth = 2.5, alpha = 0.8) # lowering alpha is also good here, as it gives more attention to the annotations and labels

我还将注释大小增加到了 12pt。

这将给出我们的最终输出(图 4)。

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

图 4 —最终图

在这里,我们可以清楚地看到,线开始有意义。虽然这不完全是数据告诉我们的(毕竟这是绝对的),但我们的平均年龄允许我们讲述一个真实的故事。通过这种可视化,我们可以预测偏好如何随年龄变化,而不仅仅是比较它们在不同年龄之间的差异。这些点仍然允许我们针对特定的年龄,并看到它的准确值,同时也揭示了点之间的联系是线性预测,而不是实际数据。

我们也可以走另一条路,强调数据的分类特征。图 5 是这种方法的一个例子。

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

图 4 —备选最终图

在这里,我强调了点,并在背景中添加了一个网格。我还保留了原来的类别标签。

结论

在本文中,我向您展示了如何使用三步公式来改进 matplotlib 可视化。这篇文章要带回家的一个关键点是,魔力不在于你添加的信息,而在于你删除或转换的信息。请看图 1,并将其与我们的最终结果进行比较。然后检查你自己最近的想象,看看你是否能利用三步公式使它们变得更好!

感谢阅读!

从数据湖到数据水库

原文:https://towardsdatascience.com/from-data-lakes-to-data-reservoirs-aa2efebb4f25?source=collection_archive---------22-----------------------

使用 Apache Spark 和 Delta Lake 创建干净、美观、受保护的数据资源

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

混乱中有美。图片来源:Unspalsh @powwpic

数据以各种形状和大小出现

有趣的是,当我们谈论数据时,最好的类比通常植根于水。为了理解数据的概念,这是有意义的——数据以各种形状和大小出现——人们倾向于接受抽象。可以说,单个数据记录可以被比作一滴水,许多相同种类(记录类型)的水滴聚集并结合成孤立的数据池(表/目录),而正是这些池驻留在更大的构造中,该构造是数据湖的主体。

数据湖是一个生态系统,它支持多种类型的记录在无数用例中共存,但从足够高的角度看,它似乎是一个简单的容器,用于存储几乎无限量的数据。

拥抱抽象

作为工程师,我们所做的大部分事情都遵循这样的路线:将一个大的概念或者可能是一个更松散的组合“想法”分解成更小的组成部分,以便理解构建一个系统或框架的方法,该系统或框架的*“行为就像】*那个东西。

同样的策略可以应用于您的数据建模方法中,更一般地说,可以应用于您如何定义表示事件指标和实体的结构化数据,甚至更具体地说,可以应用于您希望从您的数据存储中涌现出来的行为趋势。这些数据是你对过去发生了什么,现在正在发生什么的时间点镜头,可以作为一个参考框架来预测未来“可能”发生什么。

然而,存储在不完美系统中的完美数据可能会导致大规模甚至灾难性的失败。我喜欢把这看作是污染了数据湖。没有人希望这样,过去几年发布了许多新的框架,试图解决与大规模(甚至小规模)运营数据生态系统密切相关的许多陷阱和未知的未知问题。

所以我们来了。我们知道以下为真

  1. 数据可以是复杂的狂野的
  2. 存储的数据“可以”用于 解决未来的问题 并提供对过去发生的事情的洞察。
  3. 数据随时间变化 。这可能导致历史数据损坏。不要往井里投毒!
  4. 基于水的数据类比几乎和糟糕的双关语一样有趣!

鉴于上述各点。除了第四点,我真的想深入 进入这篇文章的核心,它围绕着将你所知道的数据湖转换成我所认为的数据库的概念,我还将介绍一些目前正在使用的框架,它们可以帮助你的数据湖增加结构和吸引力,例如 Apache Parquet、Apache Spark、 DeltaLake

数据湖的意义是什么?

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

数据湖。它看起来很有条理,但却建立在一个破碎的想法之上。图片来源:法比奥哈Unsplash

数据湖有一个主要目标。这个目标是充当一个廉价的、水平可伸缩的(或无限可伸缩的)集中式筒仓,存储基于文件系统布局“最佳实践”松散组织的原始、半结构化或结构化数据。例如,一些众所周知的最佳实践集中在 a)限制基于单个目录的文件总数,以便快速列出操作,以及 b)遵循可用于将数据分组到可理解的实体中的目录方案。

例如 HDFS://insights/hive/tableName/year = 2020/month = 7/day = 30。这两种最佳实践相结合,允许使用文件系统快速跳过不相关的数据,而不使用索引,并轻松列出目录中文件的总数。

廉价存储

云计算是变革性的,因为它使各种规模的公司能够将服务器和网络的管理工作交给几家真正擅长运行服务器的云提供商。这些相同的云供应商(亚马逊、微软等)随后开始提供基于他们云产品的其他服务,如亚马逊的 S3 和微软的 Blob 存储。这花了一段时间,但最终达成了普遍共识,云足够安全,可以存储宝贵的数据,而不会因为糟糕的备份、糟糕的硬件、糟糕的机架/交换机等而丢失数据,这一新颖的想法开始兴起。公司意识到,他们可以存储所有数据,而成本只是目前内部解决方案的一小部分。

“如果我们可以存储我们所有*的数据,而成本与我们目前只在所有数据的一小部分上花费的成本相同,那会怎么样”

更简单的开发人员操作

这一想法导致了从更昂贵的 Hadoop 集群和为大型企业扩展 Hadoop 的开发-运营团队到商用存储和几乎无限的可扩展性的概念的转变。

数据湖采用这种集中式数据存储层的形式,可用作*公司或组织内所有数据的统一暂存平台,通过提取转换加载(ETL) 管道/流程将数据送入更严格、更标准化的数据仓库;传统上运行 SQL 的一些变体(Oracle、MySQL、Postgres、SQL Server ),由于这些 OLAP(在线分析处理)引擎的分析性质,这些变体产生了好几个数量级的响应时间。

本质上,你可以在准备好了的时候 解冻你的旧数据 ,重新读取它并重塑它来解决许多问题,但这并不是典型的情况。

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

数据湖解决了数据孤岛问题。ETL 为王:图片来源:微软

白日梦

真正的白日梦是数据湖还可以用来解决未来尚未确定的问题。这到底是什么意思?在缺乏可靠想法的情况下,许多公司会存储数据,希望最终能够使用这些数据。然而,大约 73%的公司存储的数据从未被访问用于分析,我愿意打赌,对于许多公司来说,超过 50%的存储数据从未被访问过一次。

公司存储的 73%的数据从未被用于分析…

许多公司围绕如何将数据输入这些数据湖制定了自己的政策,目的是通过提前设计时间并考虑 1 / 3 / 5 年后如何访问数据来保留其数据的未来处理能力。虽然这可能感觉像是不可思议的想法,但也有许多公司决定即兴将半结构化数据或非结构化数据(也称为 JSON 或 CSV)写入许多单独的文件或大的换行(\n)分隔的文件,以便在批量操作期间读取。但是如果没有模式、读/写策略,治理最终会陷入混乱…

对许多公司来说,这是蛮荒的西部

就像许多事情一样,那些从最美好的意图开始的事情往往会在没有规则和标准的情况下转变并呈现出新的形态。数据湖很容易变成廉价的、水平可伸缩的、集中式的数据混乱,它的运行没有任何规则或秩序,就像“狂野西部”一样。虽然我们都可以支持牛仔,有时可能会梦想没有规则和条例的生活,但在我们的内心深处,我们最有可能得出类似的结论

“没有规则,就没有秩序感或平衡感”。

那么,我们如何解决潜在的混乱呢?

结构化数据湖:政策、框架和治理

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

结构化数据湖的出现正在引领一场新的数据革命!图片来源: sortinoUnsplash

标准的出现

好主意一旦形成,就会像野火一样迅速传播。最近,数据社区已经标准化了至少一种足够好的核心数据格式。这就是文件存储格式 Parquet,我们将进一步了解为什么它是静态数据的绝佳选择。静态数据只意味着它当前不在活动内存中。

感谢谷歌赠送的拼花地板。

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

拼花拼花是什么做的?信用: Apache Parquet docs

虽然看起来像某种巫术,但实际上它只是一个执行得非常好的柱状数据存储原语。

当你分解文件格式时,你会看到有行、列和类型。

这允许通过通用格式(模式)封装的大量记录被有效地压缩或压缩到更小的空间中。

例如,如果我有 4000 万条记录存储为 JSON,每条记录的开销在 1-2kb 之间,那么我大概有 40gb 的文件。

现在,如果您使用 JSON 并将其转换为 parquet,您可以预期在文件开销方面节省大约 50–80%。但是除了节省成本之外,还可以轻松地对数据进行分区,并使用 snappy、gzip、lz4 或任何二进制可拆分压缩格式进一步压缩。

根据经验,我可以说每天大约有 4000-8000 万条中等复杂程度的记录(例如,超过 20 个字段)可以被分解到 128 个分区中,并且存储在 12-24gb 之间!这包括作为快速压缩分区的拼花页眉和页脚,并支持数据集的分布式读取,这非常适合我们的许多用例,这些用例都以 Spark 为中心的数据平台为中心。

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

Cloudera 基准测试(parquet/avro/csv)。图片来源: Cloudera :拼花赢了

然而,减小磁盘大小并不是唯一的重大胜利。一旦您的数据被存储为 parquet,您就能够在数据中进行行或列级别的高效跳转—因此,在 4000 万条记录中检索 1-2 条记录可能只需要大约 5 秒钟。在读取实际内容之前,Parquet 能够只读取页脚来检查某些内容是否存在于 parquet 块中。它使用列统计来帮助加速这一直观的行/列级提取和过滤过程。如果你想看看它与 Avro 相比如何,你可以从 Cloudera 看到这个基准。

最后,parquet 已经成为当今许多最广泛使用的数据工程和数据分析框架和平台的事实上的标准,如 Apache Spark (SparkSQL 与 Parquet 进行开箱即用的本地互操作) PrestoDeltaLakeApache 胡迪等等。

Apache Spark 是数据催化剂

Apache Spark 的出现应该感谢它在组织和统一整个数据从业者社区方面接过了接力棒并引领了前进的步伐。 Databricks ,Spark 社区背后的公司已经付出了很多努力来保持社区的参与,并继续生产在 Spark 生态系统中运行的令人惊叹的新技术。核心 SparkSQL 引擎的一个较新的补充是一个名为 DeltaLake 的框架,它将原子操作、更新(插入或更新)、合并、删除和附加的条件 SQL 逻辑直接添加到 Spark DSL 中。为与现有数据湖体系结构一起工作而编写的这一微妙的增强带来了最佳实践,包括文件系统布局、操作可观察性以及对增量表中现有记录所做操作的良好审计跟踪支持。

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

三角洲湖泊生态系统:图片来源:数据块/三角洲

还记得之前我提出的问题吗:毒害了数据湖,以及事物如何需要某种秩序和治理才能进化成更伟大的东西。我称之为数据库,我相信 DeltaLake 已经准确地标准化了一个数据湖应该如何工作,并在适当的位置设置正确的安全防护,以确保数据湖随着时间的推移保持干净和美丽。让我们深入探讨这是如何可能的。

增量模式和文件布局

从第一次写入增量表开始,Spark 就使用与它正在写入数据湖的数据帧相关联的底层 StructType 来确保模式将被保留,并且新的写入符合那个严格模式或者在写操作时执行一个 “mergeSchema=true” 。下面是一个将数据帧写入 Delta 的示例。

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

以批处理模式将数据帧写入增量。

此操作将与原子提交日志一起存储。

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

上面操作中的 _delta_log 示例。

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

DeltaLake 表的其余部分。按年、月、日划分。

这个模式和文件位置元数据存储在所谓的 _delta_log 中,它存在于你的 Delta 表的根中。这个小目录存在于封装您的“表”的文件系统层次结构的根目录旁边。

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

增量提交日志的示例。信用:自我

现在,对增量表进行的任何附加操作都将具有关于变异的文件、当前表的版本、与该表相关联的模式的信息。这为您提供了观察应用于存储在这个数据湖(DeltaLake)中的数据的操作的机会。

在三角洲湖读书轻而易举

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

借助 Delta,读取和转换用于分析的数据变得非常简单。信用:自我

从上面的代码片段可以看出。从 delta 读取很简单。有趣的是,在上面的查询中,我们没有引用数据的 load 命令中的特定路径,我们可以使用所谓的分区下推来跳过目录,只扫描六月 (col("month ")的内容。在上面的 where 子句中,equalTo(6) 。这利用了文件系统的优势,因此您不必将所有的表实体加载到位。节省时间和金钱。

支持批量写入和完全连续流写入

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

Delta 处理批量读/写和流读/写。太好了。信用:自我

上面是一个从我们之前用批处理创建的增量表创建 readStream 的例子。Delta 带来的新奇事物是批量读/写、流读/写流的混合用例支持。想想 Airflow 解决了一些困难的用例——air flow 基本上只是在父作业完成时触发子作业,然而 DeltaLake 允许您生成 spark 作业的复杂流 DAGS (有向无环图),如果您喜欢 Spark,这会让您有点流口水。Spark to the rescue 解决您所有与 Spark 相关的需求。

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

Zeppelin 视图:展示了如何使用批处理查询从流表中读取数据(参见上面的查询以查看窗口写流)

你可能有一些上游作业需要完成,以便下游作业能够继续工作,就像传统的数据传送带一样。现在,您可以利用完整的端到端流系统来编排这种体验——把它视为您的数据传承管道——您的数据工程工作变得越来越简单。

鉴于当今数据生态系统中的数据湖需要能够进行近乎实时的插入/上插/合并、准确的历史分析、高效的 ETL 到机器学习作业和更快的在线特征存储中,并且还需要成为可靠可信数据的支柱,那么单独使用 DeltaLake 就可以解决所有这些用例。我认为这是数据工程和分析的瑞士军刀,是 ETL 到更快的内存数据存储(如 Redis 或 ElasticSearch,取决于您的数据检索 SLA)的坚实基础。

结论

传统的数据湖通常是非结构化或半结构化的,数据的质量与向数据湖发布数据的团队一样好。随着时间的推移,这个过程很容易被污染和破坏,导致可怕的数据湖中毒。

您可以通过依赖您可能已经在使用的系统(S3、Apache Spark,也许 parquet 已经出现或者您已经在使用 Parquet)来解决您未来的未知问题,DeltaLake 只是让您更容易以标准和结构化的方式快速移动。在整个组织中处理数据时,将快乐带回桌面。

干杯。

从数据框架到 N 元语法

原文:https://towardsdatascience.com/from-dataframe-to-n-grams-e34e29df3460?source=collection_archive---------5-----------------------

数据科学/ Python NLP 片段

使用 nltk 为自然语言处理创建和可视化 n 元语法排序的快速入门指南。

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

坦纳·马迪斯在 Unsplash拍摄的照片

当我第一次开始学习 NLP 的时候,我记得我被信息过载弄得沮丧或害怕,所以我决定写一篇涵盖最基本内容的帖子。你知道他们说什么,“先走后跑!”

这是一个非常温和的介绍,所以我们不会在这里使用任何花哨的代码。

简而言之,自然语言处理或 NLP 简单地指使用计算机阅读和理解书面或口头语言的过程。举个最简单的例子,我们可以用电脑来阅读一本书,并计算每个单词被使用了多少次,而不是我们手动去做。

NLP 是一个很大的话题,已经有很多关于这个主题的文章,所以我们在这里不做介绍。相反,我们将关注如何快速实现 NLP 中最简单但有用的技术之一:N 元语法排序。

n 元语法排序

简单地说,一个 n-gram 是一个由 n 个字组成的序列,其中 n 是一个范围从 1 到无穷大的离散数字!例如,单词“cheese”是 1-gram (unigram)。单词“奶酪味”的组合是一个 2 克(双字母)。同样,“奶酪风味小吃”是一个 3 克(三元组)。而“终极芝士味零食”是 4 克(qualgram)。如此等等。

在 n-gram 排名中,我们只是根据 n-gram 在文本主体中出现的次数对其进行排名,无论是一本书、一组推文还是贵公司客户留下的评论。

我们开始吧!

获取数据

首先,让我们获取数据并将其加载到 dataframe 中。你可以在这里下载样本数据集或者从特朗普推特档案创建你自己的数据集。

import pandas as pddf = pd.read_csv('tweets.csv')

使用df.head()我们可以快速熟悉数据集。

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

特朗普总统的推文样本。

导入包

接下来,我们将导入包,以便正确设置我们的 Jupyter 笔记本:

# natural language processing: n-gram ranking
import re
import unicodedata
import nltk
from nltk.corpus import stopwords# add appropriate words that will be ignored in the analysis
ADDITIONAL_STOPWORDS = ['covfefe'] import matplotlib.pyplot as plt

在上面的代码块中,我们导入了熊猫,这样我们就可以用各种不同的奇妙方式来塑造和操作我们的数据!接下来,我们为 regex 导入了re,为 Unicode 数据导入了unicodedata,并导入了nltk来帮助解析文本并稍微清理一下。然后,我们指定了我们想要忽略的额外的停用词。这有助于降低噪音。最后,我们导入了matplotlib matplotlib,这样我们可以在以后可视化我们的 n 元排序的结果。

接下来,让我们创建一个执行基本数据清理的函数。

基本清洁

def basic_clean(text):
  """
  A simple function to clean up the data. All the words that
  are not designated as a stop word is then lemmatized after
  encoding and basic regex parsing are performed.
  """
  wnl = nltk.stem.WordNetLemmatizer()
  stopwords = nltk.corpus.stopwords.words('english') + ADDITIONAL_STOPWORDS
  text = (unicodedata.normalize('NFKD', text)
    .encode('ascii', 'ignore')
    .decode('utf-8', 'ignore')
    .lower())
  words = re.sub(r'[^\w\s]', '', text).split()
  return [wnl.lemmatize(word) for word in words if word not in stopwords]

上面的函数接受一列单词或文本作为输入,并返回一组更清晰的单词。该函数执行规范化、编码/解码、小写和词汇化。

让我们使用它!

words = basic_clean(''.join(str(df['text'].tolist())))

上面,我们只是简单地调用函数basic_lean()来处理我们的数据帧df'text'列,并使它成为一个带有tolist()的简单列表。然后我们将结果分配给words

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

已经清理、规范化和词条化的单词列表。

N-grams

有趣的部分来了!在一行代码中,我们可以找出哪些二元模型在这个特定的 tweets 样本中出现得最多。

(pd.Series(nltk.ngrams(words, 2)).value_counts())[:10]

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

我们可以很容易地将数字 2 替换为 3,这样我们就可以得到前 10 个三元模型。

(pd.Series(nltk.ngrams(words, 3)).value_counts())[:10]

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

瞧啊。我们给自己开了个好头。但是为什么现在停止呢?让我们尝试一下,做一个小眼睛糖果。

奖励回合:可视化

为了让事情变得简单一点,让我们将 n 元语法的结果赋给具有有意义名称的变量:

bigrams_series = (pd.Series(nltk.ngrams(words, 2)).value_counts())[:12]trigrams_series = (pd.Series(nltk.ngrams(words, 3)).value_counts())[:12]

我用[:12]替换了[:10],因为我希望结果中有更多的 n-grams。这是一个任意值,因此您可以根据自己的情况选择对您最有意义的值。

让我们创建一个水平条形图:

bigrams_series.sort_values().plot.barh(color='blue', width=.9, figsize=(12, 8))

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

让我们通过添加标题和轴标签来美化一下:

bigrams_series.sort_values().plot.barh(color='blue', width=.9, figsize=(12, 8))
plt.title('20 Most Frequently Occuring Bigrams')
plt.ylabel('Bigram')
plt.xlabel('# of Occurances')

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

就是这样!通过几行简单的代码,我们很快从一个熊猫数据帧中制作了一个 n-grams 的排序,甚至制作了一个水平条形图。

我希望你喜欢这个。自然语言处理是一个很大的话题,但是我希望这个温和的介绍将鼓励你探索更多并扩展你的技能。

在下一篇文章中,我们将 可视化一个 n-gram 在 Power BI 中的排名,只需简单地点击几下鼠标和一小段 Python!

敬请期待!

你可以通过推特或 T2【LinkedIn】联系我。

从数据帧到命名实体

原文:https://towardsdatascience.com/from-dataframe-to-named-entities-4cfaa7251fc0?source=collection_archive---------15-----------------------

数据科学/ Python NLP 片段

使用 spaCy 从 Pandas 数据帧中提取命名实体的快速入门指南。

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

韦斯利·廷吉Unsplash 上拍摄的照片

很久以前,在一个遥远的星系,我在分析客户留下的评论时,注意到他们似乎更多地提到了特定的公司。这给了我一个想法。也许有一种方法可以从评论中提取公司的名称,我可以量化它们并进行进一步的分析。

有!输入:命名实体识别

命名实体识别

根据维基百科,命名实体识别或 NER“是信息提取的子任务,旨在定位非结构化文本中提到的命名实体并将其分类为预定义的类别,如人名、组织、位置、医疗代码、时间表达式、数量、货币值、百分比等。”换句话说,NER 试图提取归类为专有名词甚至数字实体的单词。

在这篇文章中,我将分享让我们使用 spaCy 从 Pandas 数据帧中提取命名实体的代码,spaCy 是一个开源库,提供 Python 中工业级的自然语言处理,是为生产使用而设计的。

首先,让我们使用以下 pip 命令安装 spaCy:

pip install -U spacy

之后,让我们下载英语的预训练模型:

python -m spacy download en

解决了这个问题,让我们打开 Jupyter 笔记本,开始吧!

进口

将下面的代码块运行到一个单元格中,以将所有必需的导入内容导入到我们的 Python 环境中。

# for manipulating dataframes
import pandas as pd# for natural language processing: named entity recognition
import spacy
from collections import Counter
import en_core_web_sm
nlp = en_core_web_sm.load()# for visualizations
%matplotlib inline

这个块中重要的一行是nlp = en_core_web_sm.load(),因为这是我们稍后将用来从文本中提取实体的。

获取数据

首先,让我们获取数据并将其加载到 dataframe 中。如果你想跟进,请在这里下载样本数据集或从 Trump Twitter 档案创建你自己的数据集。

df = pd.read_csv('ever_trump.csv')

在单元中运行df.head()将使我们快速熟悉数据集。

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

获取代币

其次,让我们创建将作为 spaCy 输入的令牌。在下面一行中,我们创建了一个变量tokens,它包含了df数据帧的'text'列中的所有单词。

tokens = nlp(''.join(str(df.text.tolist())))

第三,我们要提取实体。我们现在只能提取最常见的实体:

items = [x.text for x in tokens.ents]
Counter(items).most_common(20)

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

作者截图

提取命名实体

接下来,我们将根据类别提取实体。我们有几个选择,从人到事件甚至组织。要获得 spaCy 提供的所有内容的完整列表,请查看他们关于命名实体的文档。

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

作者截图

首先,我们将使用PERSON类型提取人(真实的和虚构的)。

person_list = []for ent in tokens.ents:
    if ent.label_ == 'PERSON':
        person_list.append(ent.text)

person_counts = Counter(person_list).most_common(20)df_person = pd.DataFrame(person_counts, columns =['text', 'count'])

在上面的代码中,我们用person_list = []创建了一个空列表。

然后,我们利用一个 for 循环来遍历在带有tokens.ents的令牌中找到的实体。之后,我们创建了一个条件,如果实体标签等于PERSON类型,它将追加到先前创建的列表中。

我们想知道某个PERSON类型的实体在令牌中出现了多少次,所以我们对person_counts = Counter(person_list).most_common(20)进行了处理。这一行将给出这种类型的前 20 个最常见的实体。

最后,我们创建了df_person数据帧来存储结果,这是我们得到的结果:

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

作者截图

我们将为识别国籍、宗教和政治团体的NORP类型重复相同的模式。

norp_list = []for ent in tokens.ents:
    if ent.label_ == 'NORP':
        norp_list.append(ent.text)

norp_counts = Counter(norp_list).most_common(20)df_norp = pd.DataFrame(norp_counts, columns =['text', 'count'])

这是我们得到的结果:

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

作者截图

奖励回合:可视化

让我们创建一个df_norp数据帧的水平条形图。

df_norp.plot.barh(x='text', y='count', title="Nationalities, Religious, and Political Groups", figsize=(10,8)).invert_yaxis()

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

作者截图

瞧,就是这样!

我希望你喜欢这个。自然语言处理是一个巨大的话题,但是我希望这个温和的介绍将鼓励你探索更多,扩展你的技能。

敬请期待!

你可以在 Twitter 或 LinkedIn 上找到我。

[1]:维基百科。(2020 年 5 月 22 日)。命名实体识别https://en.wikipedia.org/wiki/Named-entity_recognition

[2]: spaCy。(2020 年 5 月 22 日)。【https://spacy.io/】工业级自然语言处理中的 PythonT23

从数据框架到网络图

原文:https://towardsdatascience.com/from-dataframe-to-network-graph-bbb35c8ab675?source=collection_archive---------1-----------------------

数据科学/ Python 代码片段

使用 networkx 和 matplotlib 可视化熊猫数据帧的快速入门指南。

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

照片由 Alina GrubnyakUnsplash 上拍摄

我非常偶然地发现了如何从 JIRA 导出数据,于是我开始想办法将信息可视化,并从数据集中收集一些见解。我偶然发现了网络图的概念,这个想法很快抓住了我的想象力。我意识到我不仅可以用它来讲述人与人之间的关系,还可以用它来讲述单词之间的关系。但是 NLP 是个大话题,我们先走后跑怎么样?!

这只是一个非常温和的介绍,所以我们不会在这里使用任何花哨的代码。

网络图“显示了一组实体之间的互连”,其中实体是nodes,它们之间的连接通过链接或edges来表示。在下图中,点是节点,线称为边。

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

马丁·格兰让/CC BY-SA(https://creativecommons.org/licenses/by-sa/3.0)

在这篇文章中,我将分享一些代码,这些代码将让我们使用一个流行的网络图包来快速可视化熊猫数据帧: networkx

首先,让我们获取数据并将其加载到 dataframe 中。你可以在这里下载样本数据集

import pandas as pddf = pd.read_csv('jira_sample.csv')

其次,让我们裁剪数据帧,只包含我们想要检查的列。在这种情况下,我们只需要“受托人”和“报告人”列。

df1 = df[['Assignee', 'Reporter']]

第三,是时候创建图形将要存在的世界了。如果你还没有安装,通过快速的pip install networkx来安装 networkx 包。

import networkx as nxG = nx.Graph()

然后,让我们用来自df1数据帧的'Assignee''Reporter'列填充图表。

G = nx.from_pandas_edgelist(df1, 'Assignee', 'Reporter')

接下来,我们将在 matplotlib 的帮助下具体化我们创建的图表以进行格式化。

from matplotlib.pyplot import figurefigure(figsize=(10, 8))
nx.draw_shell(G, with_labels=True)

上面这个块中最重要的一行是nx.draw_shell(G, with_labels=True)。它告诉计算机使用打开实体标签的 shell 布局来绘制图形G

瞧啊。我们得到了一个网络图:

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

马上,我们可以告诉有一个来自三个主要玩家的台词高度集中,“芭比娃娃”,“苏珊·李”和“乔·苹果籽”。当然,为了保险起见,用一些硬数字来证实我们的“目测”总是一个好主意。

奖励回合

让我们看看“芭比娃娃”。

G['barbie.doll']

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

要查看“芭比娃娃”有多少联系,让我们使用len():

len(G['barbie.doll'])

接下来,让我们创建另一个显示节点及其连接数的数据框架。

leaderboard = {}for x in G.nodes:
 leaderboard[x] = len(G[x])s = pd.Series(leaderboard, name='connections')df2 = s.to_frame().sort_values('connections', ascending=False)

在上面的代码块中,我们首先初始化了一个名为“leaderboard”的空字典,然后使用一个简单的 for 循环将名称和连接数填充到字典中。然后,我们从字典中创建了一个系列。最后,我们从使用to_frame()创建的系列中创建了另一个数据帧。

要显示数据框,我们只需使用df2.head(),我们就有了自己的排行榜!

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

就是这样!通过几行简单的代码,我们很快就从熊猫的数据帧中制作了一个网络图,甚至显示了一个带有名称和连接数的表格。

我希望你喜欢这个。网络图分析是一个大话题,但我希望这个温和的介绍将鼓励你探索更多和扩大你的曲目。

在下一篇文章中,我将通过 Power BI 的自定义可视化工具“网络导航器”到 创建一个网络图 ,只需简单地点击几下鼠标。

敬请期待!

你可以在 Twitter 或 LinkedIn 上找到我。

[1]:数据到即(2020 年 5 月 15 日)。【https://www.data-to-viz.com/graph/network.html】网络图网络图网络图

从决策树和随机森林到梯度推进

原文:https://towardsdatascience.com/from-decision-trees-and-random-forests-to-gradient-boosting-6c7dabc516c3?source=collection_archive---------26-----------------------

在垃圾邮件数据集上回顾机器学习中的关键概念

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

图 1:图片引用:Brett Jordan 在 Unsplash 上的照片。

假设我们希望对分类问题执行监督学习,以确定传入的电子邮件是垃圾邮件还是非垃圾邮件。 垃圾邮件数据集 由 4601 封电子邮件组成,每封都被标记为真实(或非垃圾邮件)(0)或垃圾邮件(1)。该数据还包含大量预测值(57),每个预测值或者是字符数,或者是某个单词或符号的出现频率。在这篇短文中,我们将简要介绍基于树的分类的主要概念,并比较和对比最流行的方法。

统计学习的要素,第二版中详细介绍了这个数据集和几个工作示例。

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

图 2:统计学习的要素第二版。图片引用:https://web.stanford.edu/~hastie/ElemStatLearn/

数据:

垃圾邮件数据集由 4601 个观察值组成,响应为 Y ,不是垃圾邮件(0)也不是垃圾邮件(1)。该数据还包括 57 个预测值 x 。每个预测值反映了电子邮件中某个单词或字母或某个符号的频率。例如大写字母的总数,符号“$”的频率等。看一看原始数据的样本。

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

图 3:垃圾邮件数据集的前 15 个观察值和前几列。图片来自作者。

请注意,预测值非常小,似乎有许多零数据点。在拟合模型来帮助处理这个问题之前,我们对预测值进行对数变换。我们将ε0.1 添加到我们的日志中,以确保我们不会试图取 0 的日志。

我们还将数据集随机分为训练集和测试集。稍后我们将使用测试集来评估我们的模型性能。

决策树:

用于分类的决策树是最古老和最简单的机器学习算法之一。由于直观的解释,它们很受欢迎。然而,在实践中,他们倾向于过度拟合训练数据,这导致在试图进行预测时表现不佳(也称为高方差问题)。r 允许我们很容易地用 rpart 函数来拟合决策树。有几种方法来决定什么是“好”或“最好”的树,但通常我们使用 基尼杂质 。理想情况下,一个终端节点应该只包含一个类。混合得越多,就越不“纯粹”,树在新数据上的表现就越差。

该函数构建了几棵树,在每个点上,我们根据预测值向左或向右移动。我们可以看到,在我们的训练数据中,“$”似乎是确定电子邮件是否为垃圾邮件的最重要特征。根据’ $ ‘的不同,我们要么向左,在这一点上检查’ remove ‘,要么向右,在这一点上查看’ hp '。不管我们的路径如何,我们最终会到达一个终端节点,在那里我们的电子邮件被分类为垃圾邮件(1)或非垃圾邮件(0)。在我们的根节点,我们有 100%的训练样本。根据 log 的值($+0.1),我们要么向左(76%的情况下发生),要么向右(24%的情况下发生)。中间的数字代表那个节点的‘杂质’。我们的根节点有大约 40%的杂质,因为我们的训练数据包含大约 40%的垃圾邮件。

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

图 4:适合垃圾邮件数据的简单决策树。符合对数(预测值+0.1)。在每次分割时,我们查看预测器来确定我们下一步要去哪一侧。作者使用 r。

一旦我们将模型拟合到我们的训练数据,我们就可以看到它在我们的测试数据上的表现。这是通过把我们的新例子放入树中并遵循指示的路径来完成的。为了评估性能,我们检查混淆矩阵。我们获得了相当高的 91%的测试准确度。

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

图 5:我们混淆矩阵的总结。我们使用一个简单的决策树获得了低于 91%的准确率。图片来自作者。

随机森林和装袋:

在决策树中,我们的算法构建了几棵树,并选择了一棵我们认为是“最好”的树。然后,我们用这一棵树对新邮件进行预测。 Brieman 通过引入两个关键概念,对这些简单模型进行了大幅改进。首先是装袋或引导聚集,最后是随机森林。这些组合了许多(数百或数千)树,我们从我们的观察和预测中随机抽取样本来形成新的树。

随机森林通过对多棵树进行平均,极大地减少了过度拟合的可能性(即减少了方差),这有时被称为群体智慧。

Hastie 在一次演讲中描述了以下内容(参考资料链接):

  • Bagging (Breiman,1996):“将许多大树拟合到训练数据的自助重采样版本,并通过多数投票进行分类。”
  • (布雷曼 1999) :“更好的装袋版本”

本质上,随机森林利用套袋形成数百棵树。由于 bagging 的定义排除了一些模型中的某些观察值,我们可以使用不包含某个观察值的树来获得“超出 bagging 误差”的估计值。我们还可以通过观察哪些预测因子在许多树中始终是重要的,来获得对最重要特征的估计。注意,自举聚合通常会导致预测值的去相关。因此,如果我们有一些基本相同的预测器,随机森林应该能够梳理出这些预测器,并且只保留一个副本。

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

图 6:使用 randomForest 函数的测试数据的混淆矩阵。图片来自作者。

我们使用 R 中的 randomForest 包来拟合一个模型。我们还可以保留我们的树中包含最多的变量,这允许我们可视化“变量重要性”。我们将准确率从不到 91%提高到了 94.6%。

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

图 7:可变的重要性。统计学习的要素,第二版。https://web.stanford.edu/~hastie/ElemStatLearn/

随机森林的一个伟大之处在于,它们还允许我们保留预测者的“相对重要性”。图 7 总结了在确定垃圾邮件时哪些符号/单词是重要的,哪些是不重要的。

梯度提升:

  • *Boosting (Freund & Shapire,1996): *“使许多大树或小树适合训练数据的重新加权版本。按加权多数票分类。”——哈斯蒂。

梯度推进是对随机森林的一种改进(如果你调整好超参数的话)。现在,我们不再仅仅拟合引导聚合树,而是考虑中间树的表现。使用这些中间树,我们调整未来树的权重(我们对某些树的权重大于其他树)。这可以认为是重复拟合我们模型的残差。我们从一个基本模型开始,看看它如何预测新的观察结果。残差是我们在预测方面做得不好的地方,所以我们将我们的下一棵树拟合到这些残差,以此类推,以说明我们做得不好的地方(我们也不使用 bagging,而是用替换进行采样)。梯度推进也倾向于创建许多“浅”树。也就是说,它们包含一个根节点和少量的后续分割。通常,他们只包含一个单一的分裂,这些被称为“树桩”或“弱学习者”。

  • **“梯度提升继承了树的所有好的特征(变量选择、缺失数据、混合预测器),对弱的特征进行了改进,比如预测性能。”——特雷弗哈斯蒂

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

图 8:说明装袋的图像。图片引用:知识共享。

图 8 示出了上面讨论的装袋。装袋可以被视为一种并行工作的算法。也就是说,装袋是通过选择多个同时替换的器械包来完成的。

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

图 9:展示了一般的增强方法。图片引用:知识共享。

装袋和助推是不一样的。如图 8 所示,Bagging 是并行完成的,用于形成几组观察值来构建模型。Boosting 实际上使用中间树来调整计算最终预测时使用的权重。如图 9 所示,boosting 不是并行完成的,它会随着进程更新权重。

我们使用 R 包“gbm”对数据集进行梯度增强。使用梯度增强进行拟合需要

超参数 n.trees、interaction.depth 和 shrinkage 可以使用网格搜索和交叉验证来调整。我们将相互作用深度设置为 6,这允许六阶相互作用。

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

图 9:我们使用梯度增强获得了最佳精度,精度超过 95%。图片来自作者。

我们已经将测试数据的准确率提高到了 95%以上!

总结:

基于树的分类仍然是当今使用的最流行的算法之一,主要是因为它易于解释并且能够处理大量的预测值。决策树是基于树的方法中最基本的,并且可以容易地解释,但是非常容易在训练数据上过度拟合。幸运的是,这些年来已经有了一些改进来解决简单决策树所面临的弱点。随机森林利用 Bagging (Bootstrap Aggregation)来获得许多树,并使用群体的智慧来获得较低的方差预测。提升树通过考虑中间树的表现进一步改进了以前的算法,并调整树以在它们以前表现不佳的地方表现得更好(并对强大的树加权更多)。所有这些技术和方法都很容易在 R、Python 和其他编码语言中使用。尤其是梯度推进仍然是机器学习竞赛中最受欢迎的算法之一,例如 Kaggle 上举办的那些竞赛。**

我希望这篇文章提供了这些基本 ML 技术的广泛概述和简单示例。感谢阅读!

代码:

  • 【https://github.com/Robby955/spam 号

来源:

[1]特雷弗·哈斯蒂的演讲,助推https://www.cc.gatech.edu/~hic/CS7616/pdf/lecture5.pdf

[2]利奥·布雷曼(1996 年)。打包预测值。机器学习

[3]利奥·布雷曼(2001 年)。随机森林。机器学习

[4] 哈斯蒂,提比拉尼,弗里德曼(2009)。统计学习的要素 2。

[5]j . h .弗里德曼(2002 年)。随机梯度增强。计算统计&数据分析38 (4),367–378。

[6] Liaw,a .,& Wiener,M. (2002 年)。randomForest 分类和回归。 R 新闻2 (3),18–22。

[7]杰努尔、波吉、J. M .和图洛-马洛特(2010 年)。使用随机森林的变量选择。模式识别字母31 (14),2225–2236。

泰国曼谷从工程到数据科学的转变

原文:https://towardsdatascience.com/from-engineering-towards-the-data-e7551eaf8c9d?source=collection_archive---------55-----------------------

办公时间

将你的职业生涯转移到数据科学领域的初学者指南

D ata 科学仍然是当今泰国最具吸引力的趋势。与两年前相比,现在有许多数据科学家、数据工程师和数据相关职位的空缺。我也是跳进这个领域的人之一。我想和大家分享一下我转行到这个领域的历程。

决定

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

照片由马丁·亚当斯Unsplash 拍摄

2017 年,我是一名机械工程师,在泰国罗勇省的石化工厂工作。通常,我会向管理团队做一个关于机器故障原因或如何防止机器故障的演示。当时,我有机会利用数据来确保和回答大多数技术问题。

有一天,我意识到罗勇不是一个适合我定居的地方。我想回曼谷,所以我需要找到一种方法来重新安置自己。我正在找工作,很难找到一份好的工作,因为我的背景是机械工程,在曼谷并没有很多好的工程工作。因此,我决定从工程领域转到数据领域。

入门指南

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

绿色变色龙Unsplash 上的照片

首先,我收集了有关这一领域的信息,这在当时的泰国是相当新的。我也开始参加在线课程,看看这个主题是否是我继续前进的正确选择。幸运的是,我选修了斯坦福大学最著名的机器学习课程“机器学习”。该课程由吴恩达(Coursera 平台创始人)教授。由于吴恩达精彩的解释,每一件复杂的事情都变得简单易懂,同时也变得有趣。我决定在那之后修几门课,因为我觉得在这个新领域很愉快。

其次,我进入了名为“Kaggle”的平台。对我来说,这是迈向数据科学领域的真正起点。我参加了许多比赛,学会了如何通过内核编写数据分析代码。对于新手来说,内核是一个很好的资源,可以让你想学多少就学多少。几种内核可以加速您的数据技能,如探索性数据分析(EDA)、建模、集成、堆叠和其他特殊的数据处理技巧和诀窍。

还有,我在转行阶段拿了应用统计学硕士。我希望扎实的学术背景能帮助我抓住新的机会。然而,这并没有我预期的数据科学工作那么重要。我建议任何对这个领域感兴趣的人去寻找 Kaggle 用例,或者自己开发。坚实的用例在说服你的面试官时非常重要。

需要多长时间?

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

Unsplash 上由 Aron 视觉拍摄的照片

在申请数据科学家职位之前,我花了大约 8 到 9 个月的时间研究和探索 Kaggle 平台。那是 2018 年年中左右。在泰国,没有多少公开的数据科学家职位。大部分分析工作仍然在商业智能和分析师领域。我认为 Linkedin 是你进入这个领域的一个有益的工具。在泰国,许多信息技术或数据职位已经放在 Linkedin 上,招聘人员非常积极地寻找该职位的候选人。我真的建议你们专业点。

提交了很多申请后,我面试了几家公司,从初创公司到有限公司。有幸有机会去泰国最大的银行面试,和数据科学家这个职位钉在了一起。Kaggle 竞赛对我获得第一份数据科学家工作帮助很大,因为有一个名为“数据挑战”的面试测试,你有有限的时间来完成分析/建模任务,并在一天结束时向面试官展示。我从 Kaggle 竞赛中获得的模式和最佳实践让我如此自信和舒适。

到目前为止我所做的

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

照片由克莱门特 HUnsplash 上拍摄

从那以后,我已经做了大约 3 年的数据科学家/分析师。我涉足的领域很多,例如,贷款、投资、保险、酒店和商业建筑等。做数据科学家的好处是有很多机会接触很多业务运营领域。另一方面,缺点是数据永远不会被清理。我们不得不花大部分时间净化、探索、理解,以提取有意义的洞察力。有时候这让我很难过,但是花在分析上的时间是值得的。当你在 A/B 测试阶段看到指标上升时,这是如此令人震惊。

差别

与我学习在线课程和参加 Kaggle 竞赛时相比。我想指出我得到这份工作前后的区别。

建模部分是所有数据科学任务中最令人兴奋和愉快的部分,但是与其他任务相比,我花在这上面的时间最多只有 20-30%。

就像大家在数据科学博客中指出的,最耗时的任务是数据清理,我想把范围扩大到数据理解和修正。我在 Kaggle 竞赛中看到的所有漂亮的数据框架都不是现实生活中存在的。我需要与多方合作,以获得我们必须分析的数据的真相。在我们根据这些数据做出决定之前,有许多事情需要核实。这不像 Kaggle 竞赛,我们提供了完整的元数据来阅读。有时,没有人知道操作过程的有效和准确的数字,因为根本没有看过数据。

第二项耗时的任务是数据分析团队和业务运营部门之间的来回流程。大量的会议和交流在这里起着至关重要的作用。您知道需求可以根据您向其提交分析的人而动态地改变。如果他们有足够高的职位,他们可以根据自己的喜好请求添加任何内容。你必须明智地说服并推荐他们,这样我们才能顺利地通过实施阶段。

了解这种差异可以帮助你们重新调整从事数据科学工作的期望值。我听到许多人抱怨工作范围没有他们期望的那么有趣,或者他们要等多久才能做建模。我希望这能让你对数据科学的日常生活有一个更清晰的认识。

下一步是什么

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

sporlabUnsplash 上拍摄的照片

现在,泰国的数据领域与 2 年前相比增长了很多。许多人已经将他们的分析用例交付给内部企业。管理团队开始意识到在他们自己的组织中拥有数据团队的好处。即使有些人对数据能做什么有误解,这对那些不在技术领域的家伙来说也是正常的。我们需要不断告诉他们利用数据的正确方法及其对业务的重要性。

对我自己来说,我仍然喜欢日常的数据操作,也期待着向数据工程学科扩展我的专业知识。当你知道模型能做什么时,就好像你有神奇的工具来影响销售/推荐产品。然而,它需要将正确的数据输入到模型中,以获得有希望的预测结果。数据工程是控制数据管道质量和完整性的答案。我希望这是一个正确的选择,让我在这个领域有一个光明的未来。

我希望这能鼓励那些有兴趣将工作/责任转向这个领域的人。我认为这个行业仍然需要许多人和社区在整个混乱中实现可持续发展。让我们加入进来,一起产生影响。

从金融到电信:在西班牙建立数据科学职业生涯

原文:https://towardsdatascience.com/from-finance-to-telecom-building-a-data-science-career-in-spain-ee7a36140fb6?source=collection_archive---------34-----------------------

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

虽然数据科学角色在旧金山和纽约已经变得无处不在,但该领域在世界各地仍处于早期阶段。在欧洲,传统公司开始采用预测分析的思维模式,为决策提供信息。

进入这个领域的最好方法是利用你以前的分析或技术经验,再加上硕士学位或训练营。我与 Euskaltel 的首席数据科学家 Ignacio Vilaplana 坐在一起,他是从风险管理职业转型过来的。

你能分享你的故事吗?

我最初来自西班牙南部。你听说过赫雷斯吗?它是雪利酒的发源地,至今仍在那里酿造。在农村。这不是一个你会想到会有很多数据科学家的地方。

从小到大,我一直热爱科技。我想从事工程方面的职业。我去了马德里,学的是电信工程。在我完成学业后,我去埃森哲工作,成为一名程序员。

我和其他程序员一起帮助管理项目,并向我们的客户交付项目。我在那里呆了几年。然后,我转向了银行业。

我受雇于西班牙两大银行之一的 BBVA 银行,担任风险分析师。因为我的技术背景,我开始和 quants 并肩工作,把他们的项目交付给银行的风险领域。

我开始学习更多的金融定量模型。构建金融产品有许多复杂的方式。当你为客户创造产品时,理解这一点会给你带来优势。我还学会了如何管理和评估这些产品带来的风险。

几年后,我搬到了桑坦德银行。我在那里呆了将近四年。我继续从事技术方面的工作。我与量化团队密切合作。与此同时,我开始攻读定量金融学的硕士学位。

我在工作的时候完成了这个。它专注于传统的数学金融,但也引入了现代数据科学的概念。我发现数据科学中的技术可以产生类似于使用复杂的数学公式甚至长时间模拟的结果,这需要大量的计算能力来计算数十万种产品的价格。

有时候,你可以从机器学习模型中获得相同的值。在那里,我了解了什么是机器学习模型,以及一般的数据科学。

我对可能发生的事情感到惊讶。我开始学习越来越多。我开办了一个数据科学训练营,是在工作的时候完成的。我想说,这甚至比我过去的两个金融硕士还要密集。我没想到会如此激烈,但我喜欢完成所有的项目,也喜欢学到许多新概念。

与此同时,我搬到了英国,因为我的妻子找到了一份更好的工作。当我结束训练营时,我不得不开始在一个新的县找工作。幸运的是,对数据科学家的需求很大。当我被 Atom bank 雇佣时,我还在训练营做我的最后一个项目,Atom bank 是一家数字银行。

我不确定有多少人意识到这有多重要。如果你正在向数据科学转型,你将在你工作过的行业中最成功地分析数据。

是的。我从初级数据科学家做起,因为我有金融行业经验和足够的数据科学经验来帮助他们建立模型。

几年后,我再次回到马德里,这次是作为 DataRobot 的数据科学家。这是一个巨大的机会,因为我帮助了很多客户解决他们的问题。

我大致了解了西班牙大量公司的人工智能成熟程度。他们真正的问题是什么,他们倾向于拥有什么样的数据基础架构,甚至是他们组织内部的人员。

这是对西班牙数据科学行业的宝贵概述。如你所知,由于病毒,很多公司都进行了裁员,DataRobot 就是其中之一。在西班牙工作的 9 人中,有 7 人被解雇。我是其中之一。

我以为运气好的话要两三个月才能再找到工作。仅仅两周,我就收到了两份工作邀请。我决定接受西班牙北部一家电信公司的邀请。我是首席数据科学家。我在公司负责 ML/AI 项目。这是更多的责任。我们有许多项目正在进行中。我很期待这个新角色。

我一直在 LinkedIn 上关注你。我看到了你关于被解雇的帖子,然后两周后又被新的职位录用了。我以为我看错了什么。

在英国和西班牙,数据科学工作的面试是怎样的?

说实话,我在英国参加的面试不多。由于我有金融方面的经验,我在最初的求职中瞄准了银行和相关公司。我的经验帮助我很快找到了一份工作。

我找新工作的时候,面试了 DataRobot 和其他几家公司。我是 DataRobot 的超级粉丝,所以我确保我为面试过程做好了准备,并能够获得录用。然而,当我在没有任何通知的情况下被 DataRobot 解雇时,我发现自己没有工作。

我对此没有准备。我开始申请很多地方。这是我第一次参加很多面试。我在西班牙公司的经历不同于英国(Atom bank)和美国(DataRobot)公司。

在西班牙,有两种面试。一种与你在英国或美国会发现的相似。面试有很多步骤,对于某些步骤,你可能需要解决一个问题。您可能需要演示如何使用实时编码,或者您可能需要演示您的编程、SQL 或如何创建基于数据的模型的知识。我参加的 30-40%的面试都是这样安排的。这些面试是由有技能的人进行的,他们花时间创建一个强大的流程,并想看看你如何解决问题。你需要在这些面试中投入大量时间。我的建议是确保你想要这些角色,否则你会浪费很多时间来完成面试挑战。有些挑战甚至需要几天的努力。在我收到的两个提议之一中,我花了一周时间为他们准备一个模型,然后我接受了数据组织所有成员的面试。花了很多时间才拿到最终报价。

其他 60–70%的采访是由不知道数据科学是什么的人完成的。他们不知道该问什么。你可能是他们要雇佣的第一个数据科学家。他们不确定你是否是 IT 人员,他们不确定如何评估你的知识水平。就像被一个不知道你在做什么的 HR 成员面试一样。我感觉那些公司暴露了。他们不知道如何评估你的经历,也不知道是否可以信任你。即使组织中负责评估你的个性或你喜欢如何在团队中工作等等的人面试你,你也需要向他们证明你不仅精通数据科学,而且你可以解决问题。

如果你是唯一一个要处理模型或数据的人,那么你需要证明你能独立解决问题,你是独立的,有决心的,积极主动的。

我注意到你得到了提升,而且升得很快。

离开金融领域的高级职位开始新的职业生涯是什么感觉?

当我开始职业转型时,这是一个巨大的风险。我在桑坦德银行有个好职位。在我之前的工作中,我在 BBVA 领导团队。当我开始担任这家英国银行的初级成员时,这是一个艰难的决定。银行里和我职位相同的其他人都比我年轻 10 岁。我已经在大得多的银行工作并向高层汇报。但说实话,我并不在乎。

我知道如何管理项目,以及如何或多或少地在一个大的组织内部活动。一旦你知道如何做到这一点,你可以在另一个领域复制它。然而,我不知道数据科学的技术方面。我不得不从头学起。在银行的时间对此很重要。

当我转到 DataRobot 时,我处于一个更好的位置,不仅可以为 DataRobot,也可以为他们的客户提供更多价值。现在,我觉得我在管理项目,就像在大银行一样,但对于电信公司来说,我是从我热爱的技术角度来管理项目的,这就是数据科学。

我把我的旅程视为爬山。在我之前的职业生涯中,我一直在上升,在金融领域已经很高了。然后有一个下降,然后我又迅速上升。主要是因为数据科学急需新的人才。如果你在正确的时间在那里,你有正确的经验,他们会给你责任。

你未来的职业发展方向是什么?是继续做个人贡献者,还是晋升到管理层?

我不想和技术面脱节。这是我喜欢做的事情。我喜欢写模型,看数据来发现一些可能被人忽略的东西。这是对数据的技术好奇心,类似于人们喜欢在 Kaggle 上竞争的原因,但在一家公司内部解决真正的问题。

另一方面,我喜欢解决公司的大问题,并在公司内跨职能部门工作,交付项目并解决这些问题。要解决那些问题,你需要有更高的视角。

在未来,我认为自己是一个混合角色,既要负责技术方面的工作,又要对他们在公司创造的价值负责。

这个领域有哪些让你感到兴奋的趋势?

我感到兴奋的一个趋势是人工智能的民主化。这是我们每年看到的越来越多的事情。云提供商正在创造工具和平台,使交付价值变得更加容易。我们正朝着这样一个方向前进,在这个方向上,部署预测模型将需要更少的编程和技术知识。

现在有一些工具可以让你上传数据。数据清理、准备、特征提取和分类是自动化的。你只需要确定你得到的解决方案和答案是你想要的。你仍然需要知道你在做什么,但是你需要更少的数学和编程知识。

在西班牙,没有足够的数据科学家。我们需要有足够数据科学经验的人来维护他们的模型。数据科学家不仅在你为项目创建算法时需要,在你将项目投入生产时也需要。

你需要有人持续关注这个模型,以确保它给出的答案是正确的,它接收的数据是正确的,并且一切都有意义。你需要知道什么时候重新训练模型,什么时候不需要重新训练。你需要一个了解整个项目的人。自动化工具使这一过程变得更加容易。

我发现的另一个令人着迷的趋势是人工智能中的伦理概念。这越来越重要,也是我所关心的事情。不是把数据科学比作医生,而是医生必须考虑他们所有行为的道德性。

数据科学家的模型和预测会影响许多人的生活,这种情况比人们通常理解的要多。它会影响一些人是否能买房子,或者一些人是否能贷款买车。将来,它可能会决定一个人是否能够接受医疗手术。模型做出的决定对人们的生活有很大的影响,这些模型做出这些决定的原因需要明确。

同样重要的是,输入到模型中的数据是公开和透明的。客户需要知道你为什么要这些数据,为什么要保存这些数据。关于处理人们的数据的道德方面也很重要。这是目前普遍理解的事情。我们有关于如何处理数据的法规和指南,比如欧洲的 GDPR。

我们仍然没有一个关于如何在人工智能中操作道德的同质框架,但社区正在继续发展并产生更多影响。你报道一个模型如何工作以及为什么工作的方式可能会有所不同。你需要透明地报告这个模型正在做什么,为什么它正在做它正在做的事情,以及它对人和企业的影响。这是我们在项目期间的责任。

工作之外,你有什么副业或爱好?

我喜欢的一项活动是瑜伽。在我知道这是什么之前,我认为这是一件奇怪的事情。当我遇到我的妻子时,她做瑜伽,虽然我觉得她做瑜伽有点疯狂,但渐渐地,她让我相信这一点也不奇怪。我现在可以说,我比她更热爱瑜伽。我几乎每天都练习,甚至比她还多。这是一项我能够在 COVID 前后保持相同水平的活动

我也试图帮助其他人更接近技术。我一直在帮助孩子们学习如何编码。我在英国的时候就开始这样做了。我也在马德里成立了一个小组,所以我已经做了将近三年了。这种事情已经停止了,因为这是一种面对面的活动。然而,我现在已经开始与非政府组织合作。他们通常不能雇人来管理他们的数据。我在马德里和一群人一起工作。我正在帮助非政府组织了解如何获得更好的融资,以及如何对社会产生更大的影响。

你会给那些对这个领域感兴趣的人什么职业建议?

这里是再次提及非政府组织的好地方。人们去很多地方学习如何做数据科学。他们通常去上在线课程,这些课程有时是免费的,有时是付费的。他们开始在 Kaggle 上完成数据科学挑战。之后,他们希望被一家公司雇佣。然而,这通常不会发生,因为他们没有数据科学方面的经验。

我所做的是鼓励那些想转向数据科学的人开始帮助非政府组织。非政府组织不在乎你没有经验,因为即使你没有经验,你也有他们需要的知识水平,而这是他们找不到的。如果你免费帮助一个 NGO,你可以处理现实生活中的场景和现实生活中的数据技术。帮助非政府组织意味着你将对社会产生影响。你将能够在面试中利用这段经历。这是很多人没有想到的一件大事。我已经和一些想转向数据科学的人一起工作了。这对他们来说太棒了。他们获得的经验是,在为社会做有益的事情时,他们需要被雇用。

好主意。在美国,我们有 DataKind 和 Statistics without Borders,人们可以在那里做志愿者。

谢谢你接受采访。

没问题。谢谢你。

为什么你应该在你的离线 A/B 测试中使用贝叶斯方法

原文:https://towardsdatascience.com/from-frequentism-to-bayesianism-going-deeper-part-2-offline-a-b-test-d3324f7a39bb?source=collection_archive---------15-----------------------

从频率主义到贝叶斯主义

在假设检验方面,贝叶斯方法可以取代经典的统计方法。这里将使用非常具体的 web 分析案例来说明我们的演示。

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

Carlos MuzaUnsplash 上拍摄的照片

第一次介绍贝叶斯方法在经典统计学中的重要性可以在这里找到,还有一个更高级的应用那里

假设检验是统计学中的一个中心话题,它的应用范围很广,超出了数学的界限,扩展到了大多数科学领域。

我们将强调常规统计频率方法的局限性,并提出一个相关的贝叶斯框架来解决在零售或营销领域工作的数据科学家可能遇到的最常见的情况之一: A/B 测试

问题陈述

A/B 测试(也称为桶测试分批次测试)是一个随机实验,有两个变量,A 和 B。这是一种比较单个变量两个版本的方法,通常是通过测试受试者对变量 A 和变量 B 的反应,并确定两个变量中哪个更有效。[维基百科]

也许我们想测试我们网站的新设计、新功能,甚至是针对我们客户的新策略(邮件、RTB 等)。),以衡量哪一个会带来最高的投资回报率。为了清楚起见,我们将考虑一个广告商试图使用两个创意 A 和 B 中的一个来提高转换率的情况:广告与用户的每次互动都可以被视为一个伯努利试验,正好有两种可能的结果,“转换”和“不转换”,这取决于用户是否在看到广告后购买了我们的产品。

可以考虑两种设计来进行该实验:

  • 离线:实验运行,结束后才进行分析和决策。(这个故事中我们只考虑这个设计)
  • 在线:分析和决策是在实验过程中做出的。

对于这个故事,只有离线的情况将被处理,因为在线的 A/B 测试问题需要完全不同的解决方案。

频率主义方法:p 值和 ROC 曲线

我们考虑为弱者运行测试的情况,向每个用户展示概率为 0.5 的创造性 A 或 B,并直接转换为未知概率 p_A=0.04p_B=0.05。

第一个困难很快就出现了:为了确定一个创意是否明显优于另一个创意,我们应该使用什么测试?下表总结了常见的测试,由我们选择最适合我们问题的测试。

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

来源:维基百科

在我们的案例中, Fisher 精确检验Barnard 检验似乎是最相关的,因为我们关注的是从二项式分布中获得的转换率,尽管考虑到我们将在实验中获得的观察值数量,卡方检验也可以使用。

我们将使用 Fisher 检验,它具有属于精确检验类的特征,之所以这样叫是因为它的 p 值可以精确计算,用

  • H0:创意表现相当(p_A = p_B)
  • H1:一个创意比另一个表现得更好

良好实践希望我们确定测试的统计功效。它可以通过模拟来计算,给出我们的环境是如何具体设计的。我们的目标是 0.8,为了达到这个阈值,我们将校准我们将使用的观测值。为方便起见,我们将只考虑一个替代假设”(H1)“替代假设 p_A=0.04p_B=0.05 ”,这将使我们很容易计算出我们的检验的功效。

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

测试 13500 和 10000 次观察的 ROC 曲线

通常α= 0.05 是 p 值拒绝区域可接受的极限,换句话说,就是假阳性率。对于这个阈值,将需要至少 13500 次观察的平均值。

解释测试的结果

我们面临着和我们在这里做的相似的情况,问我们自己相似的问题。从我们的测试结果和 p 值中我们可以得出什么结论?

  1. 我们有办法估计创意 A 优于创意 B 的概率吗?
  2. 如果是这样,我们能估计它们之间的改进吗?

我不会再让你担心了。这两个问题的答案都是否定的。我们已经知道 p 值仅仅是在假设(H0)下观察结果的一种概率,至少是极端的。但这也凸显了 p 值最重要的局限性:

p 值不是效应大小的量度!它没有给我们任何关于创造性的 A 比 B 表现好多少的信息,即使是在正面结果的情况下!

为了提取关于效应大小的知识,常客可以使用另一个更强大的工具:置信区间。

置信区间。

置信区间表示未知参数的似是而非的值的范围,与真实参数在建议范围内的置信水平相关。

正因为如此,竞争情报给了我们更容易理解和丰富的洞察力,为我们提供了关于我们估计的概率和不确定性的知识。然而它们也有自己的缺点:

  1. 我们需要选择不同的方法来定义这些区间,这取决于许多假设:二项分布的置信区间
  2. p_A 和 p_B 值的置信区间不能直接转化为 p _ A 和 p_B 之间差值的置信区间!幸运的是,存在直接计算差值置信区间的方法,然而,我们需要从几十种方法中选择一种。

例如,我们可以使用“最简单的”,即没有连续性校正的 Wald 方法:

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

无连续性修正的沃尔德方法

用𝑝̂对 p_A et p_B 的经验估计,z 对应于正态分布的α/2 百分位。因此,对于 95%的置信区间(即α=0.05),相应的 z 值为 1.96。

数值应用将给出区间[0.0009;0.0171]以 0.009 为中心,没有像我们希望的那样与 0 重叠!

贝叶斯方法:简单之美

对于这一部分,我们将使用 python 的 PyMC3 库,这使我们可以轻松地构建贝叶斯非参数模型。

重要的是要记住,作为统计学家或数据科学家,我们的目标显然是构思准确和相关的结果,但同样重要的是,要生成可以被任何其他利益相关方(甚至是非科学家的利益相关方)共享和理解的 KPI,并且包含尽可能多的信息。贝叶斯方法给了我们这样做的工具,它允许我们精确地计算我们正在寻找的东西:P _ A 和 p_B 的后验分布,即 P(p_A|X)和 P(p_B|X)以及 P(p_A — p_B > 0| X),即。创意 A 比创意 b 产生更多转化的概率。

这里,贝叶斯建模再次变得非常简单,因为我们已经用数学方法设计了环境,我们只需要用贝叶斯语言复制它。

先验选择的问题不可避免地出现了。我们将为 p_A 和 p_B 选择无信息的制服先验。

我们还可以计算贝叶斯网络的图形表示:

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

贝叶斯网络

就这么简单,我们的工作结束了!我们剩下的工作就是**通过网络运行 MCMC 算法来计算后验分布。**这些将给予我们比以前的方法更多的洞察力,因为现在我们可以通过从后验样本直接得到任何α水平的置信区间。

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

MCMC 抽样估计的 p_A,p_B 和 delta = p_A — p_B 的后验分布

(重要的是要注意,δ不能从 p_A 和 p_B 的后半部分计算,因为 p_A 和 p_B 可能是相关的)

结果

然后,我们可以简单地计算δ小于 0 的后验概率:

np.mean(delta_samples<0)

这里我们得到 0.956,这相当于创意 A 比创意 B 有 96%的可能性产生更多的转化!

但是我们可以更进一步。设想从设计 B 转移到设计 A 是昂贵,且已经确定只有至少 5%的性能改进才是有利可图的。我们有办法计算这个!只需在我们的网络中插入一个新的确定性变量 Tau = p_A / p_B 并对后验分布进行采样。

tau = pm.Deterministic(“tau”, p_estimates[0] / p_estimates[1])

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

从 MCMC 抽样估计的τ的后验分布

np.mean(tau_samples>1.05)

这次我们得到 0.91……不像我们通常希望的 95%那样具有决定性。如果我们需要更多的信心,我们只需要运行 A/B 测试更长时间。

结论

  • 贝叶斯框架为 A/B 测试的经典方法提供了一个易于执行的和易于阅读的替代方案**,并允许我们通过简单地计算后验分布来测试任何假设**。
  • 贝叶斯方法使我们能够在 A/B 测试的情况下实现更有效的离线决策,以及更有效的在线决策,这将在另一个故事中展示。

评论

对于 frequentist 方法,我们必须选择一个特定的测试和一个特定的方法来计算我们的置信区间,其他测试和区间计算会给出不同的值;就像不同的先验会给我们不同的后验一样。

更进一步

贝叶斯网络的应用很多,A/B 测试只是冰山一角。当它被证明是一个非常强大的工具时,它可以用于建模和机器学习,正如你可以在文章中读到的:

[## 贝叶斯分层建模(或者“autoML 还不能取代数据科学家的更多原因”)

贝叶斯网络允许我们对协变量之间的实际关系进行建模,弥补所提供信息的不足…

towardsdatascience.com](/bayesian-hierarchical-modeling-or-more-reasons-why-automl-cannot-replace-data-scientists-yet-d01e7d571d3d)

参考

  • 卡梅隆.戴维森-皮隆。(2015)黑客的贝叶斯方法:概率编程和贝叶斯推理

假设检验,贝叶斯框架优越性的简单说明

原文:https://towardsdatascience.com/from-frequentism-to-bayesianism-hypothesis-testing-a-simple-illustration-11213232e551?source=collection_archive---------17-----------------------

从频率主义到贝叶斯主义

当谈到假设检验时,贝叶斯方法可以取代经典的统计方法,我们将通过一个简单的例子来说明:不公平硬币。

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

维吉尔·卡亚萨Unsplash 上拍摄的照片

通常假设检验并不是我们谈论贝叶斯主义时首先想到的话题。目前的趋势确实是更多地将这种方法纳入机器学习模型,而不是审查老式的统计数据。

然而,越来越多的研究揭示了许多研究论文的失败程度,这些失败可以归因于对“初级”统计方法的误解/误用。鉴于这种现象的程度,很明显,这并不是科学家个人在这方面缺乏认真的结果,而是一种已经持续了相当长时间的全球系统性异常现象。鉴于此,似乎应该考虑更直观、更易于解释的方法。

**对什么是 p 值的误解是这种情况的根源,或者至少最能体现这一现实。**如今,当谈到机器学习时,大多数数据科学家都受过良好的教育,甚至连最基本的统计概念都受到了损害;假设检验就是其中之一。

我们现在将探索一个统计学家可能必须运行的最简单的测试之一,并从那里了解如何建立一个贝叶斯方法,它允许一个简单而直接的结论。

问题陈述

我们将考虑一个最简单的实验,为了不忽略我们想要用不必要的卷积来证明的观点:**抛硬币。**问题是这样定义的:

  • 一枚硬币可以被翻转有限的次数。
  • 我们的目标是找出这枚硬币是否公平。换句话说,我们想知道我们的假设(H0)“硬币是公平的”有多大可能是假的。

很简单,对吧?

实验设计:p 值和 ROC 曲线

实验的设计应该考虑到将用来回答我们问题的统计方法。学生 t 检验似乎是我们假设检验的一个明显的选择。我们将样本的平均值与数值 0.5 进行比较。

良好实践希望我们在设计研究时计算统计功效,以便估计适当的样本量,或者至少告诉我们样本量已经固定时研究的局限性(通常要求功效至少为 0.8)

二元假设检验功效是当特定的替代假设 (H1)为真时,检验拒绝零假设 (H0)的概率。

换句话说,测试的能力是当硬币实际上不公平时,在指定阈值下获得 p 值的概率。

为了方便起见,我们将只考虑另一个假设(H1)“硬币遵循参数 p = 0.4 的伯努利定律”,这将允许我们轻松地计算我们的测试的功效。

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

100°和 192°翻转的 ROC 曲线

看一下这个测试的 ROC 曲线将有助于我们理解发生了什么。对于给定的显著性水平α,我们可以通过分析或模拟得出真阳性率和假阳性率;或者换句话说,测试的统计功效和显著性水平本身。

通常α= 0.05 是可接受的极限,对于这个阈值,最少需要翻转 192 次才能达到我们的目标(因为当一个人想到娱乐活动时,翻转硬币不是第一个想到的事情,我们将限制自己翻转硬币 192 次!).

解释测试的结果

我们的问题来了。假设我们发现硬币是不公平的,p 值= 0.01,我们现在可以得出什么结论?

  • 零假设为真的可能性有 1%吗?
  • 我们 99%确定我们的硬币不公平吗?

这些都不是你可能已经得出的结论。事实上,在这一点上,没有办法给出我们的硬币不公平的概率…相当烦人,特别是考虑到我们最初的问题:我们的硬币有多大可能不公平?我们能得出的唯一结论是,如果硬币是公平的,我们只有 0.01 的概率观察到如此极端的结果。

事实上贝叶斯定理给了我们计算这个值的方法,但是我们需要更多的信息:先验。H0 =“硬币不公平”,H1=“硬币公平”,S =“测试成功,p 值< 0.05”,我们有:

P(H0 | S)= P(H0)* P(H0)/(P(H0)* P(H0)+P(H1)* P(H1))

最初假设我们的硬币更可能是公平的,我们设置 P(H1) = 0.9 和 *P(H0) = 0.1。*于是我们有了

p(H0 | S)= 0.8 * 0.1/(0.8 * 0.1+0.05 * 0.9)

P(H0 | S) = 0.64

所以即使我们的测试呈阳性,我们的硬币也只有 64%的机会不公平。与我们希望的 95%相差甚远…然而这个概率比简单的 p 值包含了更多的见解,幸运的是我们可以走得更远。这仅仅是进入贝叶斯世界的第一步,正如我们现在将要看到的,还有更多需要展开来改进我们的测试!

贝叶斯方法

对于这一部分,我们将使用 python 的 PyMC3 库,这允许我们轻松地构建贝叶斯非参数模型。

我们对一个不公平硬币(p = 0.4)的抽样建模,并计算得到的后验分布。虽然使用了非平凡的马尔可夫链蒙特卡罗 ( MCMC ) 算法,但其背后的思想仅仅是贝叶斯定理的应用。

既然我们已经理解了如何用贝叶斯术语来转置我们的常规假设检验,我们可以调整先验分布来反映我们对系统初始状态的真实信念:以 0.5 为中心的 beta 分布将强调这样一个事实,即我们认为如果硬币有偏差,它一定不会像 0 或 1 那样极端。

import pymc3 as pm
N = 192 #Sampling sizewith pm.Model() as model:
    p = pm.Uniform("p", 0, 1)
    observations = pm.Binomial("observations", N, 0.4)
    obs = pm.Binomial("obs", N, p, observed=observations)
    step = pm.Metropolis()
    start = pm.find_MAP()
    trace = pm.sample(100000, step=step, start=start)
    burned_trace=trace[1000:]

p_samples = burned_trace["p"]
  • 我们也可以像许多贝叶斯主义者建议的那样,提供非信息性的前科。例如,我们可以假设 p 在[0;1].
p = pm.distributions.continuous.Beta("p", 2, 2)

在每种情况下,我们可以直接计算 p < 0.5 from the posterior distributions.

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

Posteriors densities after 192 flips

print(np.mean(p_samples<0.5))

We get respectively 0.98 and 0.97 with the uniform prior and the beta(2,2) prior, informing us of the degree of confidence we have that the coin we observe is actually fair or not.

Going further

In his paper 贝叶斯估计取代 t 检验(最佳)的概率, John Kruschke 建议查看他所谓的最高密度区间,它由包含 95%后验密度的最小区间组成,以便定义我们的检验标准。

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

192 次翻转后的最高密度区间

例如,在我们的例子中,我们想知道这些区间是否与我们针对 0.5 测试的值重叠,并且如果 0.5 不包括在这些区间中,则得出结论(H0)被拒绝。

用密度进行推理使我们能够利用我们所能接触到的所有信息。更好的是,它允许我们从数据中捕捉所有的细微差别,并得出明确的结论。

鉴于我们必须选择一个先验,有人可能会认为我们的分析是有偏见的。我不会在这里讨论频繁主义和贝叶斯主义之间的范式差异,而是简单地回忆一下,不选择先验往往等同于隐含地选择一个。

结论

  • 贝叶斯框架提供了一个易于执行的和易于阅读的来替代经典的统计测试。
  • 后验密度为我们提供了更便于理解和使用的数学概念,而 p 值等概念已经被无数次地证明具有误导性。
  • 最终,贝叶斯网络的概念允许我们设想更复杂的实验,并通过简单地考虑后验分布来测试任何假设,就像我们观察 A/B 测试 的情况一样。

参考

  1. T.V. Pereira 和 J.P.A. Ioannidis。"统计上有意义的临床试验荟萃分析可信度不高,效果夸大."临床流行病学杂志 64,第 10 期(2011):1060-1069。DOI:10.1016/j . jclinepi . 2010 . 12 . 012
  2. 约翰·克鲁施克。(2012)贝叶斯估计取代了 t 检验。实验心理学杂志综述。

从 GLM 到 GBM

原文:https://towardsdatascience.com/from-glm-to-gbm-5ff7dbdd7e2f?source=collection_archive---------38-----------------------

诺贝尔经济学奖如何给保险和贷款带来革命

作者:迈克尔·普罗克什博士;帕特里克·霍尔

简介

保险和信贷借贷是高度监管的行业,几十年来一直严重依赖数学建模。为了给他们的模型提供可解释的结果,这两个行业的数据科学家和统计学家都非常依赖广义线性模型(GLMs) 。然而,这篇文章认为现在是时候过渡到更现代的方法了。具体来说,我们致力于使用一种新型的机器学习(ML)模型,梯度推进机器(GBM)的过渡。GBM 不仅是更复杂的风险评估工具,而且由于被称为 Shapley values 的诺贝尔奖得主突破,它们现在看起来和传统 glm 一样可以解释。对保单和信贷发行人来说,更细致的风险评估意味着更少的支出和冲销,但也意味着更广泛的客户群体可以参与主流保险和信贷市场。Shapley values 提供的高级可解释性使您能够向客户、业务合作伙伴、模型验证团队和监管机构解释模型预测。简而言之,所有这些意味着更少的损失、更多的客户和管理法规要求!你感兴趣吗?向下滚动以了解更多信息。

GLMs:满足监管要求和业务需求

在美国,许多联邦和州法规管理预测模型在保险和金融服务中的使用。例如,去年纽约金融服务部向人寿保险公司发出了一封指导函以解决“非常规来源或类型的外部数据……包括算法和预测模型中的数据”的使用问题,声明保单定价必须排除“种族、肤色、信仰、国籍、家庭暴力受害者身份、过去的合法旅行或任何形式的性取向,或任何其他受保护的类别” 以避免歧视。当然,人工智能监管不仅仅是美国现象,而是一个国际现象。至少加拿大、德国、荷兰、新加坡、英国和美国的政府已经提出或颁布了针对人工智能的法规。一般来说,这些现有的和提议的法规旨在确保预测建模过程准确、受监控、无歧视、稳定、安全和透明

众所周知,glm 是高度稳定和透明的模型。在大型保险和金融机构的“回归艺术家”手中,它们也可以非常准确。各机构花费了数年时间来优化 GLM 方法,并围绕 GLMs 建立文档、区分测试、监控和验证流程。因此,由于数学和面向过程的综合原因,GLMs 至今仍被广泛使用。然而,新的方法可以提供更准确、更灵活、更透明的方式来创建更高级的预测模型。

Shapley values 和 GBM 相对于 GLM 的优势

GLMs 已被证明对保险业和银行业具有的巨大价值。然而,新算法在准确性甚至可解释性方面胜过线性模型。特别是,GBM 可以解决预测器和因变量之间的非线性以及预测器变量之间的交互**,而无需大量手动调整。这就是为什么 GBM 通常比 glm 在样本外预测中显示出更高的准确性,从而导致重大的业务影响。(这将在这篇博文的第二部分演示。)**

GBM 的解释可以基于几种技术,如累积局部效应(ALE)图、个体条件期望(ICE)图、部分相关图、替代模型、变量重要性以及最近的 Shapley 值。沙普利价值观以二战中的数学家、经济学家、密码破译者 劳埃德·沙普利**【1923–2016】**命名。沙普利在 1953 年介绍了他的方法,并在 2012 年因其发明获得了诺贝尔经济学奖。

从 20 世纪 60 年代开始,Lloyd Shapley 使用合作博弈理论来研究不同的匹配方法。在一个合作博弈中,其中收益必须归于做出不平等贡献的玩家,而沙普利值决定了收益的最公平分配。例如,Shapley 值可用于确定当每个人分享他们的食物时,一个组中的每个成员在餐馆应该支付的费用。Shapley 值的理论基于四个公理原则,效率、对称性、对称性和可加性,这使得这种方法与其他解释技术相比是独一无二的——甚至是我们心爱的回归系数!此外,研究表明,与其他解释相比,与人类解释有更强的重叠。

GBM 与 GLM 的区别:情景分析

信任一项新技术的第一步是,对比你习惯做的事情,看看它是如何工作的。博客这一部分的其余部分将针对 GBMs 和 Shapley 值与 GLMs 进行比较。沙普利值和 GLM 增量值计算之间最重要的区别之一是它们有不同的基线:

GBM 和 Shapley 值基线:当所有输入变量的贡献等于 0 时,模型预测的平均值。

GLM 基线:当所有输入变量的等于 0 时,数据中已知结果的平均值。

因此,当预测变量的值等于 0 时,线性模型的基线(或截距)是平均预期结果,当 Shapley 值仅评估一个变量的影响时,它们总是包括所有的观察值和变量!这看起来不是更现实吗?现实世界中的什么事件是以完全独立的方式发生的?

让我们看一个更详细的例子来看看一些更基本的区别。在汽车保险方面,当投保人不在夜间开车时,只有 20%的司机不开车,他们发生事故的可能性较低。在一个简单的示例建模场景中,Shapley 值显示了与普通驾驶员相比,该客户节省的成本。相比之下,GLMs 使用非驱动因素作为基线,并将额外的风险支付值添加到该基线。知道了差异,就可以对两种情况下的增量值进行精确的比较和计算。为了显示 GBMs 和 GLMs 在准确性和解释能力方面的更多差异,我们想在汽车保险示例的上下文中引入三个场景:线性场景、非线性场景、案例和交互场景(参见图 1)。

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

图 1: 展示 GBM 和 GLM 区别的三个场景。

假设数据集包含每个场景的 50 个观察值。在所有三个场景中,没有这个特征的支付,比如说在晚上开车,是 50 个硬币(见图 2)。在线性关系场景中, 10 个成员都是夜间司机,他们每个人都有额外损失 50 个硬币的风险。结果显示,两个模型都是 100%准确的,总共属性 500 个硬币(所有 10 个成员)。在线性情况下,两个模型都是准确的,并且将正确的硬币数量归因于特征。第二种情况包括预测值和因变量之间的非线性关系。我们现在也观察一个人晚上开车的频率。如果你一周只开一次车,你就造成了额外 50 个硬币(8 个顾客)的损失风险。如果每周开车两次或两次以上,就是 70 个币(2 个客户)。最终归属的硬币应该加起来是 540。然而,只有 GBM 显示 540 作为结果,误差为 2%,而 GLM 显示 4%的预测误差和 503 归因硬币作为结果。最后一种情况包括变量夜间驾驶和大于 1 小时的通勤时间的相互作用。每个变量都增加了 50 个硬币作为可能的损失,但加起来就是 200 个。结果应该是 3000 个硬币,但只有 GBM 显示正确的归属,预测误差为 0%。

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

图 2: 三个示例场景的 GBM 与 GLM 结果。

虽然我们只显示了不同预测变量的结果归因的总和,但通过 Shapley 值得出的每个客户的归因也可能比 GBM 与 GLM 的结果更准确。每个客户的属性将在第二部分进一步讨论。

总结

在这篇博文中,我们展示了 GLM 模型和 GBMs 模型都具有很高的准确性,能够在不太现实、线性和独立的情况下提供有效的解释和归因。一旦我们更深入地研究更复杂的情况,GBM 在预测非线性和相互作用关系方面更加准确,并且它们还为每个变量的增量影响提供准确的结果。这篇博文的第二部分将更深入地比较一个更现实的信用卡违约例子的不同模型和结果。与此同时,如果你想自己比较 GLMs、GBMs 和 Shapley 值,你可以免费检查并开源 H2O-3 (或 XGBoost ,或 shap ,或尝试 H2O 无人驾驶 AI

从 GLM 到 GBM(下)

原文:https://towardsdatascience.com/from-glm-to-gbm-part-2-7045e3fd52a2?source=collection_archive---------30-----------------------

更好模型的商业价值

作者:帕特里克·霍尔和迈克尔·普罗克施博士

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

  • 这篇文章从技术上概述了从可信的广义线性模型(glm)向新型梯度推进机(GBM)的过渡,同时实际考虑了已知的风险、合规性要求和业务影响。
  • 它带有代码
  • 查看迈克尔·普罗克什的第一部分帖子和 H2O.ai 帖子

介绍

在第 1 部分的中,我们提出了利用机器学习(ML)实现更好的收入和管理监管要求。我们通过一个简单的保险例子,展示了梯度推进机(GBM )( ML 的一种)如何精确匹配,然后超越流行的广义线性模型(glm)的技术优点和商业价值。

本博客的第 2 部分使用了一个更现实、更详细的信用卡违约场景来展示单调性约束、Shapley 值和其他事后解释,以及判别测试如何使从业者能够在 GLM 和 GBM 模型之间进行直接比较。这种比较可以使从业者以循序渐进的方式建立从 GLM 到更复杂的 GBM 模型,同时保持模型的透明度和检验歧视的能力。在我们的信用用例中,我们表明 GBM 可以带来更好的准确性、更多的收入,并且 GBM 也可能满足模型文档、不利行动通知和区分测试要求。

一些银行家最近对贷款中的人工智能(AI)表示怀疑——这是正确的。(参见:https://www . American banker . com/opinion/ai-models-could-fight-to-hand-the-market-downhttps://www . American banker . com/opinion/don-let-ai-trigger-a-fair-lending-violation。)要明确的是,我们不是提倡脑残人工智能炒作。我们希望在这篇文章的第二部分提出一个明智的、可测试的、循序渐进的方法,从 GLM 过渡到 GBM。或许很明显,我们认为 GBMs 比 GLMs 更能模拟真实世界和信用风险。我们还认为 ML 可以在保持极高透明度的同时,防止算法歧视。

本文的第 1 部分已经表明,GBM 可能不仅是更准确的预测因子,而且当与 Shapley 值结合时,它们还可以更准确地解释和归因于预测因子的因果影响。在第 1 部分的基础上,我们现在想展示贷款从 GLM 到 GBM 的过渡所带来的潜在透明度和商业利益。为了完全透明(并有望再现),我们使用了 UCI 信用卡数据,它可以从 UCI 机器学习数据集库中免费获得,以及开源 h2o-3 代码。信用卡数据集包含 30,000 名信用卡客户的人口统计特征信息以及支付和账单信息。要预测的因变量是付款拖欠。我们的用例将从技术和业务角度比较一个 GLM 和几个不同的 GBM。

机器学习可以推动商业影响

为了显示 GBM 相对于 GLM 的商业价值,我们训练了几种不同的算法(GLM、单调 GBM (MGBM)、GBM 和混合 GBM)。以下是这些模型的简短总结:

  • GLM: 弹力网罚物流 GLM。
  • 最大 46 棵树。深度 3,所有变量单调约束。
  • GBM: 最多 44 棵树。深度 5,无单调约束。
  • **杂交:**最多 50 棵树。深度 14,学习了一些变量的单调约束。

正如您将在下面看到的,在我们的测试中,这些型号的预计收入有很大差异。为什么?这些模型对风险的判断不同。如果不进行人工调整,GLM 无法反映变量之间的非线性关系和相互作用。GBM 固有地模拟变量之间的非线性关系和相互作用。过去,GLMs 被认为是高度透明的,因此更适合用于商业目的。GBM 在过去被认为是黑箱。但是使用单调性约束可以赋予 GBM 与 glm 相同的内在可解释性,并且不会牺牲准确性。表 1 提供了不同测试模型及其功能的概述。

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

表 1:模型及其功能概述。“+”表示功能的存在。“-”表示没有能力。能力是相对于 GLM 来衡量的。

通过网格搜索选择所有模型,并使用验证 AUC 进行评估。结果见表 2。GLM 模型的 AUC 得分最低,为 0.73,而最好的 GBM 模型的 AUC 达到 0.79。太好了…但是这对企业来说意味着什么呢?

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

表 2:模型模拟结果。箭头表示每次测量的改进方向。货币是新台币。

为了评估每个模型的业务影响,我们做了一些基本假设,如表 3 所示。信用卡客户,我们准确地归类为拖欠客户,是中性的成本。一个准确分类的没有拖欠的客户将带来新台币 20,000 元的终身价值,一个错误分类为拖欠的客户将导致新台币 20,000 元的终身价值,而错误地向拖欠客户提供信贷将导致新台币 100,000 元的注销。

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

表 3:用于估计表 2 中业务影响的假设。货币是新台币。

基于这些假设,GLM 模式的结果显示最低收入为新台币 790 万元。影响最大的模式是混合 GBM,其业务价值为新台币 1922 万元,几乎是 GLM 模式的 2.5 倍!

这怎么可能呢?混合 GBM 模型在避免那些代价高昂的假阴性预测方面要好得多。这个简单的例子表明,从 GLM 到 GBM 模型的过渡可以显著增加业务价值和降低风险。现在,让我们从技术角度看一下如何比较 GLMs 和 GBMs,这样您就可以决定如何以及何时从 GLMs 过渡到 GBMs。

更好的模型,同样的透明度

事实上,GLMs 具有出色的可解释性。他们是如此可解释,因为他们的加法单调形式和他们的低程度的相互作用的变量。信不信由你,GBMs 也可以有极高的可解释性。通过单调性和交互约束的明智应用,GBM 用户现在可以将领域知识用于建模任务,增加可解释性,避免过度适应开发数据,并对何时使用何种模型做出明智的决定。(例如:https://xgboost . readthe docs . io/en/latest/tutorials/monotonic . htmlhttps://xgboost . readthe docs . io/en/latest/tutorials/feature _ interaction _ constraint . html。)

单调性约束

用户通常可以在 GBM 中指定与 GLMs 中相同的单调性变量。在图 1(右)**、**中,特征 PAY_0 的 GLM 模型化行为,或客户的最近还款状态,是单调增加的。随着 PAY_0 值变大,违约概率也变大。在图 1(右)中,MGBM 使用正单调约束来模拟相同的行为——就像 GLM 一样!随着 GBM 下的 PAY_0 增加,违约概率也增加。

不同的是 GLM 的函数形式和广义相对论的函数形式。在这种情况下,GLM 被限制为逻辑曲线,而 GBM 可以采取任意复杂的阶梯形式,也遵守用户提供的单调性约束。此外,图 1 显示了 GBM 和混合模型在没有单调性约束的情况下对 PAY_0 的表现。你觉得哪个看起来更真实?图 1(左)中 PAY_0 的直方图和均值行为可以帮助您确定哪个模型最符合数据。目标是匹配直方图加权的红色平均目标线。好消息是,无论您喜欢哪种功能形式,您现在都可以用一种反映业务领域知识的可解释的方式来使用它。

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

图 1:PAY_0 的直方图,用红色表示目标的平均值,DEFAULT_NEXT_MONTH,用 PAY _ 0 表示(左)。每个模型的部分相关性和 ICE 估计行为(右)。通过左图中数据的频率衡量平均行为有助于衡量右边模型的拟合度。该图还允许对简单模型和更复杂的模型进行有意义的比较。

事后解释

我们如何能够看到 GBM 建模 PAY_0 的方式?通过所谓的部分依赖和个体条件期望(ICE)图[1],[2]。在图 1(右)中,部分相关(红色)显示了模型的估计平均行为。图中的其他 ICE 曲线显示了某些个体在模型下的行为。通过结合这两种方法,我们得到了一个图表,显示了我们模型的整体和个体行为。部分依赖和 ICE 只是事后解释技术的一个例子,或者说,在对模型进行训练以更好地理解其工作原理之后,我们可以在模型上运行的过程。

沙普利值,一个诺贝尔奖获得者的博弈论技术,为 GBM 模型提供了额外的和关键的见解[3]。当应用于 GBM 等基于树的模型时,Shapley 值是一个高度精确的测量变量对模型预测的影响,无论是对整体还是对任何单个客户。这对于可解释性非常有帮助,因为它支持:

  • 模型预测的整体业务驱动因素分析(图 2)。
  • 对单个客户的预测描述,以及潜在的不利行动通知的生成(图 3)。
  • 比较 GLM 系数和对 GBM Shapley 值的贡献(图 2 和图 3)。

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

图 2:与 DEFAULT_NEXT_MONTH 的绝对 Pearson 相关性和每个模型的平均特征贡献。GLM 和 GBM 的贡献可以在对数优势空间中解释。该图允许对简单模型和更复杂的模型进行有意义的整体比较。

正如图 1 显示了如何从 GLM 到不同的 GBM 处理 PAY_0 的变化,现在可以直接比较 GLM 和 GBM 的总体(图 2)和每个客户(图 3)的可变贡献。在图 2 中,我们可以看到每个模型如何从整体角度处理变量,并将简单模型(如皮尔逊相关、GLM)与更复杂的模型进行比较。在图 3 中,我们可以看到每个模型是如何对三个客户做出预测的。所有这些都可以直接比较 GLM 和 GBM 对变量的处理,因此您既可以充分记录 GBM,又可以满怀信心地做出向 GBM 过渡的决策!此外,图 3 中显示的每个客户的信息还可以提供不利行动通知所需的原始数据,这是信贷中一个重要的监管考虑因素。

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

图 3:在 GLM 模型预测的选定百分位数,个体对预测的可变贡献。这种类型的分析允许对简单和复杂模型如何对待单个客户进行有意义的比较,并可能生成不利行动通知。

模型诊断的另一个重要方面是辨别测试,在美国的一些联邦和地方法规下必须进行该测试。当然,如果发现某些类型的歧视,那么也必须予以纠正。在这种情况下,GLMs 的透明度通常是有帮助的。然而,上面概述的约束和事后解释步骤使得在 GBM 模型中发现和修复歧视比以前容易得多。此外,ML 中良好模型多样性的概念——其中单个数据集可以生成许多精确的候选模型——提供了许多解决歧视的选项,这些选项通常对于 GLMs 是不可用的。(参见:https://www.youtube.com/watch?v=rToFuhI6Nlw。)

辨别测试

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

表 4。测试模型的女性(受保护)对男性(对照)的区分措施。该表允许比较简单和更复杂的模型。

在我们的信用卡示例中,使用具有长期法律和监管先例的措施来测试 GBM 的歧视性:负面影响比率(AIR)、边际效应(ME)和标准化平均差异(SMD)。这些结果见表 4。幸运的是,在男性和女性之间,我们的模特几乎没有歧视的迹象。然而,如果发现歧视,GBMs 实际上可能比 GLMs 提供更多的补救选择。

基本上,GBM 只是比 glm 有更多的旋钮可以转动,留下更多的回旋空间来找到一个准确和非歧视的模型。除了变量和超参数选择,研究人员还提出了潜在的兼容对抗方法来训练非歧视性 ML 模型[4],GBM 现在为用户提供单调性和交互约束,可以帮助修复歧视性模型结果。同样,上面描述的事后解释技术也可以用来理解算法歧视的驱动因素,并验证它们从 GBM 模型中的移除。

机器学习和合规

许多政府机构已经暗示了未来可能的洗钱管制,或者在美国以外,已经开始实施这样的管制。值得注意的是,美国政府监管机构并没有说禁止洗钱。一般来说,他们说要确保你的 ML 是有记录的,可解释的,可管理的,可监控的,并且歧视性最小。可以说,第 2 部分中概述的步骤为使用 GBM 进行可解释性和区分性测试提供了蓝图,这反过来应该有助于模型文档的各个方面。此外,大多数大型金融机构已经为其传统预测模型建立了模型治理和监控流程。这些可能适用于 ML 模型。

当然,非监管者真的没有资格评论什么符合监管,什么不符合监管。所以,你可以自己看看一些美国政府机构在想什么:

机器学习的动力

在政府之外,一些金融服务组织已经声称在受监管的交易中使用机器学习,研究人员正在发布关于信用贷款应用的 GBM 和 Shapley 值。例如,2018 年,Equifax 宣布了他们的神经决策系统,“一项正在申请专利的机器学习技术,用于合规的高级神经网络信用评分建模。”自 2018 年以来,富国银行还推出了几种用于模型验证的机器学习技术,包括 LIME-SUP [5]、可解释的神经网络[6]以及许多附加的模型调试方法

2019 年,英格兰银行的 Bracke 等人发表了一个可解释的人工智能信用风险用例,其中包括 GBM 和 Shapley 值[7]。同年晚些时候,巴斯曼等人发表了一篇类似的文章,在《信用风险管理》杂志上介绍了一个 GBM 和 Shapley value 的例子。2020 年 3 月,Gill 等人发表了一份基于单调约束 GBM、可解释神经网络和 Shapley 值的抵押贷款工作流,该工作流仔细考虑了美国不利行动通知和反歧视要求[9]。

结论

现在看来,从可信的 glm 到更复杂的 GBM,可以采取谨慎的步骤。使用约束、事后解释和区分测试,可以将 GBM 与 glm 进行比较。这些技术也可以很好地符合不利行动通知、歧视和文件要求。幸运的话,GBMs 可以为消费者、保险公司和贷款人带来更好的财务结果。随着监管金融服务中机器学习的势头和宣传的增加,我们希望这篇文章的第 1 部分和第 2 部分将有助于那些寻求负责任地从 GLM 过渡到 GBM 的人。

参考

  1. Friedman、t . Hastie 和 r . TiB shirani(2001 年)。统计学习的要素(第 1 卷,№10)。纽约:统计学中的斯普林格系列。网址:【https://web.stanford.edu/~hastie/ElemStatLearn/ 。
  2. Goldstein,a .,Kapelner,a .,Bleich,j .,& Pitkin,E. (2015 年)。窥视黑箱内部:用个体条件期望图可视化统计学习。计算与图形统计杂志24 (1),44–65。网址:https://arxiv.org/pdf/1309.6392.pdf
  3. Lundberg,S. M .,& Lee,S. I. (2017 年)。解释模型预测的统一方法。在神经信息处理系统的进展(第 4765–4774 页)。网址:http://papers . nips . cc/paper/7062-a-unified-approach-to-interpretation-model-predictions . pdf
  4. 张,B. H .,b .,& Mitchell,M. (2018 年 12 月)。用对抗性学习减轻不必要的偏见。在 2018 年 AAAI/ACM 关于人工智能、伦理和社会的会议录中(第 335-340 页)。网址:https://arxiv.org/pdf/1801.07593.pdf
  5. 胡,l,陈,j,奈尔,V. N .,& Sudjianto,A. (2018)。基于监督分割(LIME-SUP)的局部可解释模型和效果。 arXiv 预印本 arXiv:1806.00663 。网址:https://arxiv.org/pdf/1806.00663.pdf
  6. Vaughan,j .,Sudjianto,a .,Brahimi,e .,Chen,j .,& Nair,V. N. (2018 年)。基于加性指数模型的可解释神经网络。arXiv 预印本 arXiv:1806.01933 。网址:https://arxiv.org/pdf/1806.01933.pdf
  7. 布莱卡,p .,达塔,a .,荣格,c .,和森,S. (2019)。金融中的机器学习可解释性:违约风险分析的应用。网址:https://www . bankofengland . co . uk/-/media/BOE/files/working-paper/2019/machine-learning-explability-in-finance-an-application-to-default-risk-analysis . pdf .
  8. 北卡罗来纳州巴斯曼、乔治迪奇、马里内利和帕彭布洛克(2019 年)。信用风险管理中的可解释人工智能。信用风险管理(2019 年 12 月 18 日)。网址:【https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3506274 。
  9. 北卡罗来纳州吉尔、北卡罗来纳州霍尔、堪萨斯州蒙哥马利和北卡罗来纳州施密特(2020 年)。一个负责任的机器学习工作流程,侧重于可解释的模型、事后解释和辨别测试。信息11 (3),137。网址:https://www.mdpi.com/2078-2489/11/3/137

从优秀到卓越—为您梦想中的数据科学角色打分

原文:https://towardsdatascience.com/from-good-to-great-scoring-your-dream-data-science-role-c61e5906fba0?source=collection_archive---------30-----------------------

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

图片来自 Pexels

首先是闯入数据科学领域,然后是获得一个梦寐以求的数据科学职位。从某种意义上来说,每个人都应该追求自己热爱的东西&在那个领域获得经验。解决大问题的角色,或者给你经验的角色,这些经验是你无法获得的,或者是你特别感兴趣的领域的角色。一个领域越热门,竞争就越激烈。那么如何在竞争激烈的领域脱颖而出呢?

一般来说,你需要展示这些特质:

  • 激情(你需要热爱你的工作,并展示出来)
  • 承诺(克服所有的拒绝)
  • 主动性(学会如何为自己开门)
  • 和蔼可亲(你需要软技能来建立联系)
  • 结果(展示你所做的工作,以及如何应用这些工作)

本质上,你需要改变你个人故事背后的等式:

“我是一名数据科学家,对想要的领域(比如篮球)感兴趣”(许多人)

….“我是一名对(所需领域)感兴趣的数据科学家,曾帮助 x、y、z……而且做了 a,b,c”(很少)。

你应该把用尽所有可能的方法来达到后者作为你的目标。你需要从众多人中的一员跃升为少数人中的一员。

这里有一些积极的步骤,可以帮助你一路前行。

做你的研究

首先研究你选择的特定领域,以及数据驱动决策在该领域的应用有多成熟。找出正在做什么,由谁做。如果这个领域竞争特别激烈,寻找邻近的机会,就像直接在那个领域工作一样——开始建立你的关系网和投资组合。

基于你已经做的研究,开始关注在那个领域特别有洞察力的人,如果可能的话,接触他们。

多年来,联系导师的渠道已经发生了变化,可能因人而异,然而,两种相对可靠的方式是通过 LinkedIn 或工作邮件。

说明你正在做什么,哪里可能有合作的机会,在你们是同事,而不是竞争对手或下属的基础上开始对话。讨论想法而不是个性(即不要花太多时间介绍自己,让你的工作、想法和抱负成为这些关系中的通用语)

创建投资组合

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

来自 Pexels先生先生的照片

一旦你确定了该领域的关键影响者,开始宣传类似质量的工作,希望从不同的角度宣传他们正在做的事情。开始管理您的在线状态。通常这需要超越更新你的 LinkedIn 个人资料和将代码推送到 Github。整理你的想法,并把它们记录在博客里,这是一个很好的开始。fast . ai 的联合创始人 Rachel Thomas 在这里详细介绍了这样做的原因

此外,开始维持一个投资组合。不是一个代码组合,虽然可能会涉及一些代码,但这是一个讲述你所做的所有项目的故事,付费或其他方式,以及结果的组合。想想一个设计师的项目组合。你也在做项目,所以开始跟踪和展示它们。一份精心设计的作品集将表明你既有条理又高效,还能让你展示自己的才华(如果你愿意的话)。

仅仅拥有一个作品集或者博客就能帮助你在“多数”和“少数”之间走得更远——不管你想进入哪个领域。

充分利用你得到的机会

学会如何索取,如何让自己变得有用,如何支持自己,即使在没有机会的地方。要求别人给你的东西是一项关键技能。超出预期也是如此。

如果突然冒出来某个数据管理的角色,和你想从事的领域有关,就把它当成一个数据主管的角色,做副业,展示你的价值,让人需要/想要你。理想情况下,你想找一个既有报酬,又有成长报酬的角色。寻找能让你接触到更大问题和更好关系的角色。

找到你的 MVP 角色,将想法付诸实践

学习如何将想法付诸实践。不管你梦想中的 MVP 角色是什么样的,为了你所处的地理位置,为了你所拥有的手段,试着把它作为第一步。

以体育为例,假设你想为一支 NBA 球队进行数据分析。明智的第一步是联系你当地的大学团队,成为他们运营分析的负责人。

还是那句话,关键是找到小机会,这些小机会可以变成大机会。定期进行自我评估,以确保你与你的总体目的和目标保持一致。如果出现偏差,一定要认识到这是因为你犯了一个特殊的错误(不太可能,但如果是这样,要从中吸取教训),还是仅仅因为 21 世纪职业的现实非线性。

从优秀走向卓越

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

照片由 SnapwirePexels 拍摄

一旦你在你想要的领域有了一个角色,就开始疯狂地建立关系网,扩大你的影响圈。你已经迈出了第一步,所以你能做的最糟糕的事情就是满足。记住,好是伟大的敌人。利用你已经为自己建立的机会,开始扩大你的人际网络和联系。到目前为止,你已经证明了你可以增加价值,现在你可以通过联系人们和想法来让自己变得更有价值。

最后,学会如何向后推,尤其是当你想兑现你通过做上述所有事情积累的经验时。当是时候去扮演那些你迄今为止所有工作的顶点的角色时,确保你独特的故事能够被理解。

记住你已经走过了从许多到少数的道路,所以不要让人们把你归类和区分开来。例如,让(招聘人员)将你归为宽泛的类别,会让你在确保自己的价值主张真正与众不同方面所做的大量出色工作前功尽弃。

本文原载此处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值