TowardsDataScience 博客中文翻译 2021(一百)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

使用 Plotly 和 Flask 的交互式 Web 仪表板

原文:https://towardsdatascience.com/an-interactive-web-dashboard-with-plotly-and-flask-c365cdec5e3f?source=collection_archive---------2-----------------------

数据可视化

要用 Dash 创建一个真正交互式的应用程序,你需要使用回调。你可以用 Plotly 和 Flask 达到同样的效果。

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

应用程序和代码—由 autho 提供的图像

看起来好像我对 Dash 有意见。老实说,我没有;这是一个很好的产品,得到了 Plotly 的大力支持,做了它想做的事情。

但是,正如我在上一篇文章中试图演示的那样,当您可以用 HTML 编写 HTML 时,就没有必要用 Python 编写 HTML(因为 Dash 要求您这样做)!我现在要补充的是,Flask 应用程序中不需要额外的复杂层——从根本上说,Dash 是一个 Flask 应用程序——只要一点 Javascript 和 HTML 就可以完成同样的工作。

在我的上一篇文章中,我展示了你可以创建一个简单的 web 应用程序,不需要破折号就可以合并 Plotly 图表。相反,你可以结合使用 Flask 和网页模板。这也给了你创建多页面应用的优势。

[## 用 Plotly 和 Flask 实现 Web 可视化。

towardsdatascience.com](/web-visualization-with-plotly-and-flask-3660abf9c946)

但是 Dash 也允许你通过使用回调函数将新数据加载到图表中来创建交互式应用。所以问题是,我们能用 Plotly plus Flask 模型轻松做到这一点吗?当然,答案是肯定的。你可以用 Dash 做的任何事情也可以用它的底层技术来做:Python、Flask、HTML 和 Javascript。

但是,这真的更容易吗?

这要由你来判断,但从我(可能有偏见)的角度来看是这样的。如果你需要学习一点你以前从未接触过的 HTML 或 Javascript,那么很好,你可能会在未来找到它的用处。

为了演示这一点,我们将快速运行一个显示一系列国家人均 GDP 的基本 web 应用程序。交互性体现在您可以键入一个新的国家名称,图表会通过回调服务器并使用新数据重新加载图表来自动更新。

该应用程序如下所示:

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

它基于来自 Gapminder 基金会的数据,这些数据包含在 Plotly 库中,并在他们的一些示例程序中使用。

这个应用程序非常小,非常简单,但是演示了可以用来创建令人印象深刻的交互式仪表板应用程序的技术(并提供了可以重用的代码)。你将需要使用一点 HTML,一点 Javascript,并知道如何创建和运行 Flask 应用程序的基本知识(见这里的简单介绍:如何创建和运行 Flask 应用程序)。

您可以在本文末尾找到代码的链接——以 zip 文件的形式下载它,或者从我的 Github 存储库中访问它。

烧瓶应用程序

您可以在下面的代码中看到定义了两条路由:第 13 行的根、 /、和第 9 行的回调。他们都使用来自函数 gm (完成大部分工作)的数据,但是方式不同。根路径使用模板chartsajax.html(我们将在下面看到)并将数据传递给它,而回调只是返回数据本身。你大概可以看到这是怎么回事。

这个应用程序是一个由根路径和chartsajax.html渲染的页面。这将绘制一个初始图,但也允许用户输入一个新的国家名称。当输入该名称时,一个请求被发送到回调路径,从该路径返回的数据被用于更新绘图。结果是一个令人满意的图表更新,但没有您在重新加载整个页面时会遇到的空白屏幕。

第 17 行的函数 gm 实际上创建了情节。它需要一个参数,我们要绘制的国家的名称。该参数缺省值为‘英国’,以满足从没有传递参数的根路径进行调用的需要。然后在第 18 行从 Gapminder 数据集创建一个 Pandas 数据帧。由此我们创建了这个国家的图表。

第 22 行使用 Plotly 自带的编码器将图表编码为 JSON,这是在 HTML 页面中呈现图表所必需的,然后将它返回给调用者。

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

HTML 页面

HTML 定义了一个简单的布局,如下面第 17 到 23 行所示。几个标题后面是一个单独的段落,一个文本输入框,然后是这个节目的明星,图表。Plotly 需要一个 HTML 中的 < div > 标签来构建一个图表,并在第 22 行显示。

这是最简单的部分——并不是说其余的部分很复杂。

当页面加载 Plotly 和 JQuery 的库时——我们需要 Plotly 来呈现图形,当然,我们将使用 JQuery 函数来实现对服务器的回调。接下来,Javascript 函数 cb 被定义——稍后会详细介绍。

然后加载页面主体,第 25 行到第 28 行的 Javascript 第一次也是唯一一次被执行。我们可以在这段代码中看到,变量 d 被设置为模板变量 graphJSON 的值——这是我们在 Flask 应用程序中传递给模板的值。然后使用 Plotly Javascript 库中的 newPlot 函数绘制 Plotly 图形。这给了我们默认的情节。

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

现在,如果我们想改变图表以显示不同国家的数据,我们只需输入国家的名称,然后按回车键。图表会自动更新。(注意,如果你输入一个无效的国家,你只会得到一个空白的图表。)

这通过使用第 21 行输入字段中的 onchange 属性来实现。 onchange 做的正是你所期望的:当输入字段的值改变时,函数 cb 用字段的值调用。

回电

那个函数 cb ,就是回调函数。它获取输入字段的值,并通过 JQuery 函数 getJSON 将其发送给回调路由。 getJSON 是一个 AJAX 调用,它对指定的 URL 执行异步 HTTP 请求,向其传递数据,接收响应(它将其解释为 JSON 编码的),并定义当接收到成功结果时要调用的函数。

success 函数获取返回值——这是 JSON 编码的图表——并调用 Plotly newPlot 函数来更新图表。

(顺便说一下,AJAX 代表异步 Javascript 和 XML——换句话说,使用 Javascript 的异步 HTTP 请求使用 XML 作为数据传输的格式,只是目前 JSON 是更常见的数据传输格式,而不是 XML。)

我不会深入介绍 JQuery 函数如何工作的细节,您可以将它作为可以重用的样板代码,或者在这里了解更多关于 JQuery 的内容。然而,了解有用的是数据参数。这看起来像这样

data: { ‘data’: selection } 

并且它是将被发送到 Flask 应用中的回调函数的数据。数据是正在发送的参数的名称,而选择是它的值(从文本输入字段传递过来)。

下一步怎么样

正如所承诺的,这是一个使用 Flask、Plotly 和 AJAX 的简单交互式 web 应用程序的快速设计。我希望,随着“Web Visualization with Plotly and Flask”的发布,您可以使用 Dash 的底层技术轻松地构建交互式仪表盘,而且这并不是一项令人畏惧的任务。

Dash 教程还演示了其他一些更复杂的行为,当然,这些也可以使用与我演示的技术类似的技术来实现。但那是以后的事了。

一如既往,感谢阅读。如果你想知道我什么时候发表新文章,请考虑在这里注册一个电子邮件提醒。

如果你不是一个媒体订阅者,那就注册吧,这样你就可以每月花 5 美元阅读尽可能多的文章。在这里注册,我会赚一点佣金。

更新:在你可以在下面下载的代码中,我包含了一个新版本,它只使用 Ajax 来加载图表,也就是说,它不使用传递给模板的参数来加载初始图表。它还在图表上标注了它所代表的国家,我认为这是一个小小的改进——详情请参见自述文件。

获取代码

请在我的代码库中查看代码,或者在这里的 Github 页面上下载这篇文章和上一篇文章的 zip 文件。

贝叶斯统计的一次有趣的散步:MAP 和 MLE 之间的差异。

原文:https://towardsdatascience.com/an-interesting-walk-from-bayesian-statistics-differences-between-map-and-mle-2daea5fc15b?source=collection_archive---------29-----------------------

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

纳赛尔·塔米米在 Unsplash 上的照片

这篇文章将让你了解任何机器学习模型的基础。用简单的文字和几个公式,你将得到贝叶斯,最大似然估计和最大后验估计充分的能力。

具体来说,让我们从概率和判别函数的角度开始讨论二元分类。这是一次有趣的步行,旨在了解 scikit-learn 和 keras 设施之外的机器学习算法的原理。

想象一下,我们必须将汽车分为两类:环保型和污染型。我们拥有的关于汽车的信息是制造年份和消耗量,我们用两个随机变量 X1 和 X2 来表示。当然,还有其他影响分类的因素,但它们是不可观测的。记住我们可以观察到的,汽车的分类由伯努利随机变量 C 表示( C=1 表示环保, C=0 污染),条件是可观察值 X =【X1,X2】。因此,如果我们知道 P(C|X1,X2) ,当一个新的入口数据点以 X1=x1X2=x2 出现时,我们会说:

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

作者图片

其中错误概率为 1-max(P(C=1|x1,x2),P(C=0|x1,x2)) 。表示 x=[x1,x2] 那么我们可以使用贝叶斯定理,它可以写成:

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

作者图片

P©被称为先验概率,因为它是我们之前在数据集中拥有的关于 C 的信息,用来分析可观测的 x. 正如你所想象的, 1=P(C=1)+P(C=0)。

P(x|C)被称为类可能性,因为它是属于 C=c 的事件具有相关观察值 x. 的概率

P(x)是证据,因为它是在我们的数据集中看到观察值 x 的概率。这个术语也称为规范化术语,因为它将表达式相除,得到一个介于 0 和 1 之间的值。证据概率是所有可能情况的总和(也称为全概率定律):

P(x)= P(x | C)1)P(C = 1)+P(x | C = 0)P(C = 0)

最后,P(C|x)是我们想要知道的,每一类给定一个观察值的概率。这被称为后验概率因为我们在看到观察值 x 后对其进行了分类,当然 P(C=0|x)+P(C=1|x)=1。

在有几个类的情况下,我们可以将这个表达式扩展到 K 类:

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

作者图片

并且贝叶斯分类器将从 K 个选项中选择具有最高后验概率 P(Ci|x)的类。

在之前的文章中,我解释了如何根据区分函数来理解分类,区分函数限制了空间中的假设类别区域。按照同样的思路,我们可以实现那组判别函数。具体来说,我们选择 C_i,如果:

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

作者图片

如果我们将判别函数视为贝叶斯分类器,则最大判别函数对应于最大后验概率,得到:

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

作者图片

请注意,我们已经删除了归一化项(证据),因为它对所有判别函数都是一样的。该集合将特征空间分成 K 个决策区域:

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

作者图片

在实践中,我们观察到的信息片段,又名数据点,它们通常遵循一个给定的概率分布,我们将其表示为 P(X=x) ,正如我们之前所讨论的。当我们有像 P(C=1|x)或 P(X=x)这样的值时,贝叶斯分类似乎很容易计算。然而,如果我们不确切地知道P(X),因为我们不能访问所有的数据点,我们试图从可用的信息中估计它,于是统计就出现了。

统计数据是从给定样本中计算出的任何值。

P(X)可以有不同的形状,但是如果给定的样本来自一个已知的分布,那么我们说它遵循一个参数分布。参数分布是非常理想的,因为我们只需要知道几个参数就可以画出一个完整的分布。我们该怎么办?基于我们所看到的(样本),我们通过计算样本的统计量来估计分布的参数,即分布的充分统计量。这使我们能够获得数据的估计分布,我们将使用它来做出假设和决策。

最大似然估计

如果你已经到了这一步,请忘记之前贝叶斯解释的一切。

让我们从头开始:我们的数据集中有 N 个数据点。看起来这些数据点的概率密度遵循一个清晰的分布族 **p(x),**但是我们对真实分布的形状没有任何线索(它的真实中心,它的真实离差,等等)。如果我们面对的是参数分布,那么计算定义真实分布的参数就很简单。怎么会?让我们根据现有的给定样本来看看最有可能的选项。

我们有一个独立同分布(iid)样本:

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

作者图片

它的概率密度由一组参数θ定义。让我们找出使给定样本的分布尽可能接近的具体θ参数。因为数据点是独立的,所以它们的似然性是各个点的似然性的乘积。具体来说,对于给定的θ,我们来看概率 p(x|θ)。概率越高,匹配度越高。

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

作者图片

那么,对于给定的数据集 X, l(θ|X) 的θ的可能性等于 *p(X|θ)。*为了使事情更简单,我们通常将对数应用于可能性,因为计算速度更快(求和而不是乘法):

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

作者图片

现在,我们只需驱动对数似然,然后根据θ将其最大化(例如使用梯度下降)。

**重要提示:**我们通常互换术语“可能性”和“概率”。然而,它们是不同的东西。概率是固定分布(特定情况)下的面积。对于概率,我们想知道给定分布情况下的概率。相比之下,可能性是分布中可以移动的固定点的 y 轴值。似然性是指为某个特征的固定值找到最佳分布。可能性包含的不确定性信息要少得多,它只是一个点而不是一个区域。

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

作者图片

我们搜索不同的θ值,选择使对数似然最大的θ:

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

图片作者。蓝点代表样本的数据点。从不同的θ值得出不同的分布,选择“最匹配”的一个。

如果我们观察许多不同的样本,分布参数的估计量将更准确,与真实参数的偏差更小。稍后我们将看到如何评估估计量的质量,换句话说,估计量与θ的差异有多大。

将最大似然法应用于伯努利分布

在伯努利中,有两种可能的状态:真或假,是或否。事件发生或不发生。因此,每个数据点可以取两个值:0 或 1。实际上,它以概率 *p,*取值 1,以概率 1-p. 取值 0,因此:

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

作者图片

该分布用一个参数建模: p. 因此,我们想从一个样本中计算它的估计量 p̂。让我们根据 p: 来计算它的对数似然

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

作者图片

现在,求解 dL/dp=0 以获得最大化表达式的 p̂:

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

作者图片

最大后验概率

现在是时候回到贝叶斯理论了。有时,在查看样本之前,我们可能有一些关于参数θ可能取值范围的信息。当样本很小时,这些信息会非常有用。

因此,先验概率 p(θ) 定义了θ在查看样本之前可能取的值。如果我们想在查看 X 样本后知道可能的θ值, *p(θ|X),*我们可以使用贝叶斯:

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

图片由作者基于[1]

注: 我们可以忽略规格化项(或证据),当我们在谈论优化时,它并不影响。

因此,如果我们想要一个模型来预测给定输入 x 的输出, y=g(x) ,就像在回归中一样,我们实际上是计算 *y=g(x|θ)。*视分布情况而定。

然而,由于我们不知道 *θ、*的真实值,我们必须使用 θ ( 按概率加权)的所有可能值对预测取平均值:

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

作者图片

积分的计算可能非常复杂和昂贵。代替这样做,我们可以只取一个点,最可能的点,最大后验概率。

因此,我们想要得到 *θ,*最可能的值,或者换句话说,最大化 P(θ|X),,这与最大化 P(X|θ)P(θ): 相同

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

图片由作者基于[1]

如果你花一点时间将这个公式与 MLE 方程进行比较,你会发现它的不同之处仅在于 MAP 中包含了先验 P(θ) 。换句话说,可能性是用来自先验的信息来加权的。最大似然法是无先验信息映射的特例。

MLE 是映射的一个特例。

如果这个先验信息是恒定的(均匀分布),它对最大化没有贡献,我们将得到 MLE 公式。

具体来说,想象θ可以取六个不同的值。因此,P(θ)在分布中处处都是 1/6:

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

图片由作者基于[1]

然而,如果先验不是常数(它取决于分布的区域),概率也不是常数,必须考虑它(例如,如果先验是高斯的)。

**重要:**可以选择最大后验概率而不是计算积分,前提是我们可以假设 P(θ|X) 在其模周围有一个窄峰。为什么?因为我们取的是单个点,而不是计算所有的区域,没有不确定性的表示。当模式周围没有窄峰时,可能会发生这样的事情:

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

作者图片

参考书目:

[1]奥古斯丁·克里斯蒂亚迪的博客https://wiseodd.github.io/techblog/2017/01/01/mle-vs-map/

[2]艾瑟姆·阿尔帕丁。机器学习导论,第 4 版。

PyTorch 闪电简介

原文:https://towardsdatascience.com/an-introduction-of-pytorch-lightning-230d03bcb262?source=collection_archive---------9-----------------------

只需更改一个参数,即可将代码从单 GPU 移植到多 GPU 训练

PyTorch lightning 帮助您将代码扩展到多 GPU 培训,无需任何工程工作

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

Johannes Plenio 在 Unsplash 上拍摄的照片

坊间传言 PyTorch lightning 是普通 PyTorch 的更好版本。但是,它能给我们的世界带来什么样的共识呢?嗯,它帮助研究人员通过多 GPU 训练、Fp-16 训练和 TPU 支持的训练来扩展模型,只需改变一个参数。

吉菲

是的,你没看错。只要改变一个论点,你就可以做所有这些惊人的事情。还记得我们过去是如何编写多 GPU 训练代码的吗?我们必须了解 PyTorch 支持的不同训练架构,然后自己实现它们。谢天谢地,再也没有了!PyTorch Lightning 将改变我们编写代码的方式,并帮助我们在一秒钟内完成所有这些任务。

为了涵盖所有的变化,我用以下方式构建了这个博客:

  • PyTorch 和 PyTorch Lightning 在实现上的差异的总体比较
  • 比较每个模块,如模型、损失函数等。为了 PyTorch 和 PyTorch 闪电
  • 多 GPU 训练
  • TPU 培训
  • FP16 培训
  • 提前停止
  • LR 取景器

py torch 和 PyTorch Lightning 的基本对比

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

两个框架之间的比较(图片由作者提供)

具有相同颜色的代码块表示相同模块的实现。例如,两个框架中的模型定义都是浅绿色的。

首先要注意的是,PyTorch lightning 在类 Net 本身*中加入了 train_dataloader、configure _ optimizers、training_step 。*另外,请注意,我们在 PyTorch 中编写的整个训练循环在 PyTorch lightning 中只有几行。

通用深度学习代码组件

一般来说,深度学习代码具有以下组件

  • 模型
  • 数据
  • 失败
  • 【计算机】优化程序
  • 训练和测试回路
  • 记录

让我们了解 PyTorch 和 PyTorch lightning 在上述组件方面的区别。

模型

正如我们上面注意到的,模型架构和定义是相同的,除了在 Pytorch Lightning 中所有其他函数定义也在同一个类中。

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

模型对比(图片由作者提供)

数据

在 Pytorch Lightning 中定义数据加载器有两种方法。

  • 您可以在 Net 类中定义 train_dataloderval_dataloader 函数,就像前面所做的那样(在第一个例子中)
  • 你可以像 PyTorch 中一样定义自己的 train_dataloaderval_dataloadertrainer.fit ,如下图所示。

MNIST 数据加载器

使用上述方法,您可以为 PyTorch 和 PyTorch lightning 定义数据加载器。两者的主要区别在于 Pytorch Lightning 中的 trainer.fit() 将所有数据加载器作为参数。

trainer.fit(net, train_dataloader, val_dataloader)
trainer.test(net, test_dataloader)

失败

对于 n 类分类,我们要计算交叉熵损失。交叉熵与 NegativeLogLikelihood(log _ soft max)相同,所以我们将使用它来代替。

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

损失比较(图片由作者提供)

【计算机】优化程序

让我们使用 Adam 优化器。

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

优化程序比较(图片由作者提供)

自我parameters() 这里传递的,包括模型中定义的所有可学习的参数。

训练和验证循环

在 PyTorch,我们必须

  • 定义训练循环
  • 加载数据
  • 通过模型传递数据
  • 计算损失
  • 做零工
  • 反向传播损失函数。

然而,在 PyTorch 闪电中,我们必须

  • 定义 training_step 和 *validation_step,*在这里我们定义我们希望数据如何通过模型
  • 计算损失

我们甚至不用指定 model.train()model.eval()

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

训练和验证比较(图片由作者提供)

记录

Tensorboard 是美国研究人员最常用的记录器之一。所以正如你在 PyTorch lightning 上面注意到的,在函数 training_stepvalidation_step 的最后一行,提到了 self.log() ,这是用来记录训练损失的。这将创建一个名为 lightning_logs 的文件夹,并在其中保存所有日志和时期。

概述

  • 模型定义过程类似,但有两个主要区别。1)所有其他函数也是用 PyTorch lightning 的模型类本身定义的。2)神经网络。Pytorch 中的模块在 PyTorch lightning 中被 nn.LightningModule 覆盖。
  • 可以用同样的方式定义数据加载器。对于 PyTorch lightning,我们必须在 train.fit() 时通过 train_loaderval_loader
  • Optimizer 和 loss 可以用同样的方式定义,但是它们需要作为 PyTorch lightning 的主类中的一个函数存在。
  • 培训和验证循环在 PyTorch lightning 中预定义。我们必须定义训练 _ 步骤验证 _ 步骤,即给定一个数据点/批次,我们希望如何通过该模型传递数据。
  • 用于记录的函数是预定义的,可以在 Pytorch Lightning 中直接调用。

既然我们知道了这两者之间的区别,那就让我们来理解为什么我们首先要开始这个比较。为了使代码可伸缩并减少我们的工程工作,让我们看看感兴趣的特性。

多 GPU 训练

我们可以使用下面的代码来实现。

trainer = Trainer(gpus=8, distributed_backend='dp')

您可以定义要用于分布式培训的 GPU 数量,以及要使用的后端。这里我定义了“dp ”,它是并行分布的。也可以定义为‘DDP’,即分布式数据并行。

TPU 培训

我们可以使用下面的代码来实现。

trainer = Trainer(tpu_cores**=**[5])

这个代码意味着模型将在 ID 为 5 的 TPU 核心上训练。我们还可以通过使用单个参数启用多 TPU 训练来定义需要使用多少个内核。

FP16 培训

这是我最喜欢的。FP16 有助于加快训练过程,而不会对性能造成太大影响。

trainer = Trainer(precision**=**16)

提前停止

这用于在训练模型时,如果您看不到模型性能有任何进一步的提高,则停止训练。我们如何持续检查模型性能是否在提高?为此,我们可以使用验证损失或准确性。

from pytorch_lightning.callbacks.early_stopping import EarlyStoppingdef validation_step(...):
    self.log('val_loss', loss)trainer = Trainer(callbacks=[EarlyStopping(monitor='val_loss', patience=3)])

在上面的例子中,培训师将跟踪验证的准确性。如果过去 3 个时期(耐心值)的性能没有改善,那么它将停止训练,从而防止过度拟合。

LR 取景器

学习率是最重要的超参数之一,正确设置初始学习率至关重要。否则,在训练模型时,可能会出现模型收敛到无法提供最佳性能的局部最优值的情况。

net **=** LightningMNISTClassifier()

*# finds learning rate automatically*
*# sets hparams.lr or hparams.learning_rate to that learning rate*
trainer **=** Trainer(auto_lr_find**=True**)

trainer**.**tune(net)

为了找到最佳学习率,你必须使参数 auto_lr_find 为真*,*,然后调整训练器(使用 trainer.tune() ),这将帮助你找到学习率。之后可以调用 trainer.fit() 对模型进行训练。

只需添加一些参数,Pytorch Lightning 就能帮助我们享受许多功能,而每一项功能对我们来说都至关重要。现在您有了一个基本的想法,通过编写您的第一个神经网络并探索该库提供的不同功能,开始实践 PyTorch lightning。

如果你想学习深度学习的很酷的应用,请查看我们关于深度学习语音处理的博客这里

成为 介质会员 解锁并阅读介质上的许多其他故事。关注我们的 阅读更多此类博文

阿帕奇气流简介

原文:https://towardsdatascience.com/an-introduction-to-apache-airflow-21111bf98c1f?source=collection_archive---------6-----------------------

作为数据科学家,这是一个很好的管道自动化工具

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

克里斯托夫·高尔在 Unsplash 上拍摄的照片

什么是阿帕奇气流?

成为数据科学家的很大一部分是能够自动进化模型并生成报告。对于需要定期收集数据、生成周期报告等的模型。手动运行程序非常耗时且不可扩展。能够自动化整个数据管道来生成报告是非常有用的。这正是阿帕奇气流带来的东西。

Apache Airflow 是一个开源的作业调度程序,它可以组织、执行和监控任何周期性时间间隔内的任何工作流。这个项目是从 Airbnb 开始的,已经被很多大公司如谷歌和亚马逊接手。

气流是如何工作的?

Airflow 利用有向无环图(Dag)来创造就业机会。

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

DAG 由节点和有向箭头组成。每个节点都是一个函数,当该函数运行时将被执行,每个箭头都指向当前节点之后将被执行的下一个节点。对于有多个箭头进入的节点,必须先完成所有的依赖关系,然后节点才能启动。

图中的每个节点都由一个运算符定义。有许多运算符,如 BashOperator、PythonOperator 等。每个操作员负责运行该操作员类型的功能。例如,如果您有一个 PythonOperator,您可以告诉操作员运行 python 函数。这是所有可能的气流操作员的列表。

每个 DAG 由 DAG python 文件指定,该文件指定节点和节点之间的依赖关系。

气流 DAGs 页面

从 Dag 视图中,您可以看到当前注册到 Airflow 中的所有 Dag。从这里,您可以查看作业的状态、触发现有作业、刷新作业等等。

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

设置气流

设置气流非常简单。此设置过程将用于 MacOS,但在线也有相应的 Windows 设置步骤。在安装过程之前,请确保您已经安装了自制软件[ 说明 ]。家酿是一个软件包安装程序,它使得安装程序和软件包更加简单。

1.安装 Python3 和 pip

安装 Python3,然后检查以确保 Python 版本是 3+

% brew install python% python --version
python 3.8.3

安装 pip

% curl [https://bootstrap.pypa.io/get-pip.py](https://bootstrap.pypa.io/get-pip.py) -o get-pip.py% python get-pip.py

要安装 Airflow,请确保 pip 版本为 20.2.4

% pip install --upgrade pip==20.2.4% pip --version
pip 20.2.4 from /usr/local/anaconda3/lib/python3.8/site-packages/pip (python 3.8)

2.[可选]创建虚拟环境安装气流

一般来说,安装一个虚拟环境是一个很好的实践,这样你就不会把你的本地环境和很多包聚集在一起。虚拟环境可以很容易地激活和停用。安装virtualenv并为虚拟环境创建一个名称,本例中的名称是venv

% pip install virtualenv% virtualenv -p python venv

现在激活虚拟环境,这样所有的包都会安装到虚拟环境中,而不是您的计算机上。

% source venv/bin/activate

现在,您的虚拟环境被激活。你的控制台现在应该有(venv)在它前面。

3.安装和设置气流

在新的airflow目录中安装气流

(venv) % mkdir airflow && cd airflow(venv) % pip install apache-airflow

设置正确的目录结构,并创建一个新的气流文件夹。首先用pwd获得 airflow 文件夹的路径,然后将其作为 airflow 主目录导出到该路径。

(venv) % pwd
/Users/<username>/airflow/airflow(venv) % export AIRFLOW_HOME=/Users/<userid>/airflow/airflow

最后,初始化气流数据库。Airflow 使用 Sqlite 数据库来跟踪所有 airflow DAGs 的元数据。

(venv) % airflow db init

现在,您应该会看到 airflow 目录中的一堆文件。在下面的终端输出中,我使用了一个名为tree的包,但是ls也可以工作。是一个非常有用的查看目录结构的包。

(venv) % brew install tree(venv) f.liang@fliang-ltm airflow % tree
.
├── airflow.cfg
├── airflow.db
├── logs
│   └── scheduler
│     ├── 2021-04-16
│     └── latest -> /Users/<userid>/airflow/logs/scheduler/2021-04-16
├── unittests.cfg
└── webserver_config.py

4.启动气流

在第一次启动 Airflow 时,您必须创建一个新用户。我刚刚对大多数字段使用了简单的admin,但是你可以自定义它。

(venv) % airflow users create \
      --role Admin \
      --username admin \
      --email admin \
      --firstname admin \
      --lastname admin \
      --password admin

要检查用户是否已成功添加,请列出所有用户

(venv) % airflow users list
id | username | email | first_name | last_name | roles
===+==========+=======+============+===========+======
1  | admin    | admin | admin      | admin     | Admin

然后启动 Airflow 作业调度程序

% airflow scheduler

创建一个新的终端(Mac 上的CMD + T,并再次设置AIRFLOW_HOME路径。如果您之前设置了虚拟环境,请不要忘记激活虚拟环境。如果不这样做,那么airflow命令在新的终端中将不起作用。然后启动 web 服务器。

(venv) % export AIRFLOW_HOME=/Users/<userid>/airflow/airflow(venv) % airflow webserver

从这里开始,一切都应该设置好了,所以打开任何网络浏览器并转到 localhost:8080 。8080 应该是您的airflow.cfg文件中的默认端口,但是如果这不起作用,请打开您的 airflow.cfg 文件,查找web_server_port字段并将其设为 8080。在这里,只需输入您之前创建的用户名和密码(用户名和密码都是admin)并登录。

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

登录后,您可以浏览并运行许多示例 airflow 作业。

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

5.创建您自己的 Dag

要阻止示例 dag 的显示,请打开您的airflow.cfg文件并将load_examples设置为False,然后创建一个 Dag 文件夹,如airflow.cfg中的dags_folder变量所指定的。故障 dags 文件夹路径为AIRFLOW_HOME/dags

(venv) % mkdir /Users/<userid>/airflow/airflow/dags

将您的 DAG 文件添加到dags/文件夹中,Airflow scheduler 将自动拾取 DAG,并在几分钟内将其反映在 web 服务器中。任何编译错误也会显示在 UI 和 logs 文件夹中。

结论

Apache Airflow 对于任何机器学习工程师或数据科学家来说都是一个非常方便的工具,可以用来安排和自动化工作流。通过用 docker 容器替换虚拟环境并将 docker 映像托管在云中,工程师可以在几分钟内部署和监控整个数据管道。

机器人简介

原文:https://towardsdatascience.com/an-introduction-to-bots-ff142bb07603?source=collection_archive---------24-----------------------

它们是什么,它们的类型是什么?

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

安德烈斯·乌雷纳在 Unsplash 上拍摄的照片

在当今世界,我们被技术包围着,每天都有新的技术被开发和制造出来。技术以我们以前无法想象的方式让我们的生活变得更好。也许其中一项有影响力的技术是机器人。

机器人是一种特殊的软件,被设计和开发用来在没有人类帮助的情况下自动完成特定的重复性任务。机器人被开发出来是为了通过比人类更快、更有效地完成某些任务来减轻人们的负担。

大多数时候,机器人是在某种类型的网络上运行的软件,通常是互联网。它们与其他机器人、网页甚至人类互动,寻找它们旨在解决的问题。如果我们想对机器人进行分类,我们可以定义两个通用类别,好机器人和坏机器人。

</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>

“好的机器人”是一个用来描述帮助用户并提供有效服务的机器人的术语。坏的或恶意的机器人是那些执行非法且有时不道德的任务的机器人。但是,我们必须记住,机器人就像任何其他技术形态一样,没有好坏之分;相反,人们决定使用它们的方式决定了它们是好是坏。

如何对机器人进行分类?

如果你试着用谷歌搜索各种类型的机器人,你会发现有些人说有六种、七种,或者有些人甚至说有四种类型的机器人,因为当对机器人进行分类时,人们通常会设置自己的规则和术语来描述他们将如何做。因此,我们最终有了各种各样的分类。

在本文中,我们将坚持好的和坏的机器人的一般分类,以探索我们在机器人领域的道路。也就是说,机器人可以以许多其他不同的方式分类。

具有良好应用程序的机器人(好机器人)

№1:聊天机器人

从名字上看,聊天机器人是那些被设计用来与人类对话的机器人。这些机器人最常用于客户服务,以解决问题并帮助人们更好地了解服务或产品。聊天机器人是为了模仿自然的人类互动而构建的。

要让聊天机器人模仿人类互动,它们需要能够理解和使用人类语言。理解人类语言是一个复杂的问题;这是自然语言处理的核心挑战。这就是为什么大多数聊天机器人被设计为针对特定场景的狭义上下文 AI。

有很多聊天机器人,但第一个,也是被认为是聊天机器人诞生的人是伊莱扎。这个聊天机器人有硬连线的问答脚本,用于与人类交流。聊天机器人的其他例子有来自美洲银行的财政援助埃里卡,以及通过推特与人互动的微软人工智能聊天机器人泰伊

</6-nlp-techniques-every-data-scientist-should-know-7cdea012e5c3>

№2:爬虫

好的机器人列表中的第二种类型的机器人是爬虫。爬虫是持续运行的机器人,分别与 API 或网站进行交互以收集一些数据。这些类型的机器人只获取公共可用的数据或他们有权获取的数据。

最广为人知的爬虫是搜索引擎蜘蛛。搜索引擎蜘蛛是一种机器人,旨在从 web 中提取 URL,然后这些 URL 用于下载和解析数据到可搜索的索引中。常用的搜索引擎蜘蛛有 GooglebotBingbot

爬虫不仅仅是搜索引擎蜘蛛;另一种类型的爬虫是机器人,它们被构建来监视和管理系统,并在发生变化时发出警报。这类爬虫的例子有定价助手、监控电子商务网站的价格变化,以及 Alertbot 监控网站的服务器正常运行时间、漏洞和网站错误。

№3:交易型机器人

交易型机器人是为了代表人类而构建的。他们需要与系统交互来完成某些任务,这些任务通常与数据移动有关。由于事务型机器人是为特定的任务而构建的,它们可以被设计成不同的定制解决方案。

交易型机器人涉足的领域之一是机器人领域。一些已知的事务性机器人是 Birdly 一个用于为你检索特定数据的 Slackbot,以及 x.ai 的 Amy Ingram,一个旨在通过电子邮件与人互动的机器人,以找到分布式团队的最佳会议时间。

№4:信息机器人

最后但同样重要的是,在好的机器人列表中,我们有信息机器人。信息机器人旨在通过推送通知或发送电子邮件和文本来提供有用的信息。

信息机器人最常见的用法是突发新闻机器人。这些机器人监控新闻,并在有事发生时发出警报。这种机器人的一个例子是 GuardianBot ,它允许你通过 Facebook Messenger 获得最新新闻的点播简报,以及 GamerBot,允许你通过 Facebook Messenger 获得特定点播内容的定期游戏新闻更新。

在不良应用中使用的机器人(不良机器人)

№1:黑客

让我们从黑客机器人开始我们的坏机器人名单。这些机器人旨在通过电子邮件或网站分发和启用恶意软件。这些机器人的目标是攻击数据,有时破坏网络。他们通过寻找网络或应用程序中的漏洞,然后利用这些漏洞来破坏网络或应用程序。

黑客机器人的数量每年都在增加;一旦电脑或网络被黑,他们的信息就永远被利用。机器人的设计者可以将它用于不同的目的。

№2:刮刀

爬行器是爬行器的坏版本。爬虫在从 API 或网页获取数据时遵循 low。然而,抓取程序会窃取他们不该访问的数据,如电子邮件地址、密码和个人信息。

这些机器人通常被设计为忽略 API 和网站数据获取规则来获取目标数据。一旦这些机器人窃取了数据,它们就会重新发布数据并利用这些敏感信息。

№3:垃圾邮件制造者

垃圾邮件发送者是一种机器人,顾名思义,垃圾邮件是通过电子邮件或错误广告向用户提供的内容,最终将流量导向某个特定的网站或博客。你可能在网上见过的例子有评论和邮件垃圾。

幸运的是,由于好的机器人和搜索引擎的发展,检测坏机器人的行为,垃圾邮件或任何垃圾邮件的数量在最近几年迅速下降。

</4-software-development-techniques-to-level-up-your-data-science-project-59a44498ca3f>

№4:模仿者

最后但同样重要的是,我们有模仿机器人。这些机器人旨在模仿特定用户的行为,以获取有关他们的信息或窃取一些敏感数据。

这些机器人经常在政治中大量使用,以模仿人类行为,并将注意力从对手身上转移到特定目标上。为此使用模仿者创造了所谓的宣传机器人。

最后的想法

作为数据科学家,我们有时需要比想象中更频繁地设计、构建、开发和处理机器人。不仅仅是作为数据科学家,如今每个人都至少每周与机器人打交道一次。这就是为什么知道什么是机器人和什么类型的机器人是一个很好的信息。

我们可以用不同的方式对机器人进行分类;在本文中,我们根据使用方式对机器人进行了一般分类。机器人可以被构建并用于执行合法的、道德的任务,也可以被用于执行非法的任务。

机器人仅仅是一项技术,一项本身没有好坏之分的技术;总的来说,他们是中立的。这只是取决于如何利用它们。所以,下次你听到有人称一个机器人为“坏机器人”,只要知道他们的意思是这个机器人已经被用坏了。

构建世界级欺诈预测模型简介

原文:https://towardsdatascience.com/an-introduction-to-building-a-world-class-fraud-prediction-model-aed1c3c314d2?source=collection_archive---------32-----------------------

模型的类型、要使用的关键特性以及如何评估模型

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

Bermix 工作室Unsplash 拍摄的照片

介绍

随着世界变得越来越数字化,人们更好地配备了新技术和工具,欺诈活动的水平继续达到创纪录的高水平。根据普华永道的一份报告,2020 年欺诈损失总计 420 亿美元,在过去 24 个月中影响了 47%的公司。

矛盾的是,同样的技术进步,如大数据、云和现代预测算法,让公司比以往任何时候都更好地应对欺诈。在本文中,我们将特别关注最后一点,欺诈预测算法,具体来说,我们将了解欺诈模型的类型、欺诈模型中使用的功能以及如何评估欺诈模型。

欺诈预测模型的类型

因为“欺诈”是一个非常全面的术语,所以您可以构建几种类型的欺诈模型,每种模型都有自己的用途:

特定于配置文件的模型与特定于交易的模型

档案特定模型专注于识别用户级别的欺诈活动,这意味着这些模型可以确定用户是否欺诈。

交易特定模型采用更精细的方法,识别欺诈交易,而不是欺诈用户。

乍一看,这些模型似乎服务于相同的目的,但欺诈交易并不总是来自欺诈用户。这方面的一个例子是信用卡盗窃-如果用户的信用卡被盗,并且在该信用卡上进行欺诈性交易,则该用户不应被视为欺诈。类似地,欺诈用户进行欺诈交易的情况并不总是如此——是否应该允许该用户进行任何交易是另一个话题。

因此,考虑特定于概要文件和特定于事务的模型是很重要的。

基于规则的模型与机器学习模型

基于规则的模型是带有硬编码规则的模型,想想“if-else”语句(或者 case-when 语句,如果你是 SQL 天才的话)。对于基于规则的模型,您有责任自己提出规则。如果您知道指示欺诈活动的确切信号,基于规则的模型非常有用。

例如,信用卡公司通常有一个基于规则的方法来检查您使用信用卡的位置。如果你用信用卡消费的地方和你的家庭住址位置之间的距离超过某个阈值——如果你离家太远——交易可能会自动被拒绝。

随着过去十年数据科学的出现,机器学习欺诈检测模型变得越来越受欢迎。当您不知道指示欺诈活动的确切信号时,机器学习模型非常有用。相反,你提供一个具有少量特征(变量)的机器学习模型,并让该模型自己识别信号。

例如,银行将数十种工程特征输入机器学习模型,以识别哪些交易可能是欺诈性的,并进入第二阶段进行进一步调查。这将进入下一部分,这是您应该在欺诈模型中使用的功能。

在您的模型中使用的关键功能

为您的模型选择特征的主要目的是包含尽可能多的指示欺诈活动的“信号”。

为了帮助激发一些想法,下面是机器学习模型中常用的关键功能的非穷举列表:

  • 注册或交易时间:用户注册或交易的时间是一个很好的信号,因为欺诈用户的行为并不总是与普通用户相同。这意味着他们可能会在人们通常不进行交易的时候进行大量交易。
  • 交易地点:正如我之前提到的,交易发生的地点可以很好地表明交易是否欺诈。如果交易是在远离家庭住址 2000 英里的地方进行的,这是一种不正常的行为,可能是欺诈行为。
  • 成本与平均支出比率:这是给定交易的金额与给定用户的平均支出的比较。比例越大,交易越不规范。
  • 邮件信息:您可以实际查看邮件的创建时间。如果在同一天创建了电子邮件和帐户,这可能意味着欺诈行为。

您可以提供的信号越多,信号越强,您的模型在预测和识别欺诈活动方面就越好。

如何评估一个欺诈模型

由于问题的性质,评估欺诈预测模型必须以不同于正常机器学习模型的方式进行,这将在下一节中详细阐述。

为什么你不应该使用准确性

欺诈检测被归类为**不平衡分类问题。**具体来说,欺诈性档案/交易的数量与非欺诈性档案/交易的数量之间存在显著的不平衡。因此,使用准确性作为评估标准是没有帮助的。

举例来说,考虑一个包含 1 个欺诈性交易和 99 个非欺诈性交易的数据集(在现实世界中,这个比例甚至更小)。如果一个机器学习模型将每一笔交易都归类为非欺诈性的,那么它的准确率将达到 99%。然而,这未能解决手头的问题,即对所有欺诈交易进行分类。

要使用的度量标准

相反,在评估欺诈预测模型时,您应该考虑两个指标:

精度也称为正预测值,是相关实例在检索到的实例中所占的比例。换句话说,它回答了“多大比例的积极认同是正确的?”

当将非欺诈性交易归类为欺诈性交易的成本太高,并且您可以接受仅捕获一部分欺诈性交易时,Precision 是首选。

回忆,也称为敏感度、命中率或真阳性率(TPR),是实际检索到的相关实例总数的比例。它回答了“有多少比例的实际阳性被正确识别?”

当确定每一笔欺诈性交易至关重要,并且可以接受将一些非欺诈性交易错误归类为欺诈性交易时,最好使用召回。

每种方法都有自己的优缺点,应该根据手头的业务问题进行选择。下面是一张图片,可以更好的理解两者的区别。

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

作者创建的图像

感谢阅读!

如果你想了解更多关于欺诈、电子商务和数据科学的知识,请收听 Riskified 数据科学副总裁 Elad Cohen 的播客。同样,如果您想了解如何用 Python 构建一个实际的欺诈预测模型,您可以查看这个 Kaggle 的信用卡欺诈预测模型库

一如既往,我祝你学习一切顺利:)

不确定接下来要读什么?我为你挑选了另一篇文章:

又一个!

特伦斯·申

云原生模型简介

原文:https://towardsdatascience.com/an-introduction-to-cloud-native-model-3076183294e5?source=collection_archive---------18-----------------------

转向云原生的原则和优势

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

照片由西格蒙德Unsplash 上拍摄

云原生改变了软件行业的动态,以及人们对部署和操作软件应用程序的看法。

根据 维基百科 云原生计算是软件开发中的一种方法,它利用云计算“在现代的动态环境中构建和运行可扩展的应用程序,如公共云、私有云和混合云”。

简而言之,它允许您基于云计算交付模型构建和运行应用程序。

让我们来了解一下什么是云计算——“它指的是云存储等资源的按需可用性,并在没有直接主动用户管理干预的情况下计算能力”

请注意,类似云的交付不限于公共环境,它同样适用于私有云。它本质上关注的是如何创建和部署应用程序,而不是在哪里。

根据云原生计算基金会(CNCF),云原生计算使用开源软件堆栈来:

  • 集装箱化
  • 动态编排
  • 面向微服务

了解关键组件和术语:

在我们进一步讨论之前,有许多术语需要进一步讨论和澄清,所以让我们先了解它们:

  • DevOps: 它是软件开发(Dev)和 It 运营(Ops)的结合。它是一种跨职能的文化,促进高质量软件的更快交付。
  • **容器:**它将执行应用程序所需的一切,例如虚拟机、应用服务器和应用程序本身,打包到一个可执行的包中。然后,容器在虚拟环境中运行,因为应用程序变得独立于其环境,所以具有可移植性。它可以被认为是部署单个微服务的计算介质。

容器具有水平伸缩的优势,可以根据用户需求添加或删除容器的多个实例。

随之而来的是下一个关注点,即如何管理当前的系统负载并决定是启动额外的节点还是关闭已经运行的节点。这让我们想到了编排的概念。

  • **编排:**它监控系统并自动启动/关闭容器,以便管理活动应用程序实例之间的负载。
  • **微服务:**顾名思义,微服务是一种小型的、很大程度上解耦的服务。每个微服务都提供了一个小的应用程序,它具有定义明确的边界和 API,易于由一个小团队操作。许多这样的微服务一起构成了系统的整体功能。

将一个大型应用程序分解成多个较小的应用程序,可以加快实现速度,并易于适应新的需求。

高效的扩展是它的另一个好处:如果单个微服务接收到更多的负载,在其他服务继续无缝运行的情况下,扩展微服务系统被证明是非常划算的。这省去了启动完整单片系统的额外实例。

但是如果构建微服务允许如此高效地使用云资源,那么挑战在哪里?微服务确实允许可扩展性,但增加了系统级的复杂性。这种增加的复杂性可以降低吗?在一定程度上,是的,可以通过使微服务尽可能相互独立或者通过在依赖服务之间提供有效的通信来减少这种情况。

  • **连续交付:**它使组织能够自动地将增量软件变更推向生产。

云原生原理:

  • 基于微服务构建应用
  • 将微服务打包成容器
  • 使用 DevOps 进行基础架构部署
  • 向最终客户持续交付应用程序

云原生模式的优势:

  • DevOps 团队由开发人员和运营团队组成,能够快速交付软件,即缩短交付周期。
  • 手动完成基础架构扩展时,人为错误的范围更大(由于手动创建和管理服务器),这在云原生产品中得以消除,因为基础架构扩展是自动进行的
  • 云原生抽象出底层基础设施的依赖性,让团队只关注软件。而应用程序与传统应用程序系统中的底层操作系统、硬件、存储和支持服务有着密切的依赖关系。
  • 持续交付促进了对客户需求的更快响应,因为单个功能/更新一旦准备好就会发布。
  • 微服务允许开发人员进行快速更新和扩展,从而实现敏捷开发和部署。
  • 由于业务需求和 IT 团队之间的一致性更好,云原生支持更快的代码交付
  • 基于云模型的部署允许组织构建可以在任何云(公共云或私有云)上顺利运行的应用程序。

网飞、优步和微信等公司已经采用了云模式,能够更快地部署服务。

上面提到的是基于云的模式对组织业务影响的几个例子。您可以查看此链接,了解更多关于采用云原生模式的一些公司的迁移目标、策略和结果。

总之,转向云原生是满足用户不断增长的需求的解决方案,不会出现停机和错误。但是,组织在以下方面有自己的顾虑:正确的云迁移方法是什么,如何在内部基础架构和公共云提供商之间做出决定,如何构建可扩展的结构,这需要在开始云之旅之前进行适当的研究和时间投入。

结尾备注:

我希望这篇文章对您有所帮助,在这篇文章中,我们讨论了什么是基于云的模型,以及组织如何跟上这一领域的发展以获得竞争优势。很高兴知道你的建议,或者如果你想让我解释任何具体领域或细节,这些都是受欢迎的。

参考文献:

决策树和预测分析简介

原文:https://towardsdatascience.com/an-introduction-to-decision-trees-and-predictive-analytics-92924a8a77e7?source=collection_archive---------6-----------------------

你如何确保产品发布会成功?决策树是使用数据科学解决这类业务问题的绝佳入门

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

图片由 Pixabay 上的 fietzfotos 拍摄

决策树表示一系列连接的测试,这些测试越来越向下分支,直到特定的路径匹配一个类或标签。它们有点像抛硬币的流动图表,if/else 语句,或者当满足时导致最终结果的条件。决策树对于机器学习中的分类问题非常有用,因为它允许数据科学家选择特定的参数来定义他们的分类器。因此,无论您面对的是降价还是数据的目标 KPI 值,您都有能力在多个级别对数据进行排序,并创建准确的预测模型。

现在有很多很多的应用程序利用决策树,但是在这篇文章中,我将着重于使用决策树来做出商业决策。这涉及到衡量客户对新产品的兴趣,我们将使用来自在线咖啡豆经销商的数据!

问题:

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

图片由内森·杜姆劳Unsplash 上拍摄

您的客户 RR Diner Coffee 是一家总部位于美国的零售商,在世界各地销售特种咖啡豆。他们希望增加一个精选品牌的新产品。这种新的增加将大大提高销售额,改善他们的声誉,但他们需要确保产品将实际销售。为了添加该产品,您需要向您的客户证明至少有 70%的客户可能会购买它。幸运的是,您的营销团队发出了一份调查,您已经获得了大量数据。让我们来看看。

探索数据

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

作者图片

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

作者图片

在继续之前,我们肯定需要清理我们的数据,但是仅仅通过查看数据,我们就可以知道如何处理它。关于这些数据,非常方便的是,由于“决策”列,我们已经知道一些客户是否会购买这种新产品,因为我们不必对我们的训练数据进行任何猜测,我们可以建立一个监督模型。在确定哪类客户会说“是”时,任何其他特征都可能是有用的,但我们稍后会弄清楚。

为了清理这些数据,我所做的就是:

  • 更改一些列名,使其更容易理解
  • 确保所有的性别回答都是相同的格式,比如把“男性”、“M”、“M”和“男性”都变成“男性”,反之亦然。
  • 将决策列中的 1.0s 和 0.0s 分别更改为“是”和“否”,暂时保留空数据。

现在我们知道了我们的数据是什么样的,我们可以采取什么方法,让我们继续为我们的模型进行训练/测试分割

训练/测试分割

因为只有 702 个条目,所以我想保存尽可能多的数据,即使是那些具有空决策的数据。对于这个训练/测试分割,我创建了一个决策值不为空的数据子集,并将其称为 NOPrediction。

就像这样,我们有了训练/测试分割,可以用来评估我们的模型。现在让我们开始真正的表演:决策树模型!

车型

就像每一种机器学习方法一样,在选择模型时,有大量不同的方法可供选择。我只是给你看一些我在这个项目中尝试过的,但是你应该多读一些,找出哪些最适合你!Scikit-learn 的网站有大量优秀的文档:点击这里查看

熵模型

你可能还记得高中物理,熵测量系统中的无序或随机。当使用决策树时,你会遇到很多随机性,但作为一名数据科学家,你的工作就是用最小的熵来建立预测模型。基本熵模型试图从最大熵的树的顶部开始,向下到最小熵的根部,这就是如何准确地对数据进行分类。这在视觉上更容易解释,所以让我告诉你我的意思。

输出应该如下所示:

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

作者图片

如果你从顶部开始,你可以看到,随着你的工作沿着模型向下,你会做出正确和错误的决定。随着这些决策分支,熵变得越来越低,我们能够创建定义清晰的数据集群。

在这种情况下,我们从未定义最大深度或给模型任何其他参数,因此这个版本是最准确的,平衡精度得分为 98.7%。不过,有时为了时间和计算机处理能力的限制,牺牲一些准确性也是好的。就像在这个例子中,我们将最大深度设置为 3:

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

作者图片

该模型需要做出的决策更少,并且产生了 86.5%的平衡准确度分数。这仍然是一个非常可靠的预测模型,只有没有最大深度的模型的一半决策。你现在大概能明白我在说什么了。如果你在寻找最精确的模型,时间和计算能力不是问题:没有必要设置最大深度。但是,如果你时间紧迫或者资源有限:设置一个最大深度将会节省你很多时间,并且给你带来非常相似的结果!

基尼杂质模型

就像熵模型一样,这种决策树模型在对数据进行分类时寻求最小化任何随机性。然而,与前两个模型不同,基尼杂质模型不使用对数函数,随着时间的推移,它可以为您节省大量计算能力。这两者的区别如下:

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

图片来自 scikit-learn 文档

设置与熵模型非常相似,让我们看看它是如何执行的。

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

作者图片

这样,我们得到了 98.1%的平衡准确度,只是比第一个熵模型稍差一些。就像熵模型一样,你也可以设置基尼决策树的最大深度。

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

作者图片

这个模型惊人地拥有 96.9%的平衡精度!与原始基尼模型相比,只有 1.2%的差异,决策数量要少得多。

每个模型都有自己的优点和缺点,除了这四个例子之外,还有其他的可以探索。你会选哪一个?在我看来,最大深度为 3 的基尼模型为我们提供了良好性能和高度准确结果的最佳平衡。肯定存在这样的情况,其中最高的准确度或最少的总决策是优选的。作为一名数据科学家,你可以选择哪个对你的项目更重要!

做预测

现在我们已经创建了模型,让我们使用它们吧!为了证明 RR Diner 的咖啡会引起至少 70%顾客的兴趣,我们必须向预测模型中输入一些新数据。还记得在我们的数据集中,实际上只有 474/702 人做决定吗?如果我们使用其他 228 个条目进行预测呢?我们必须建立一个新的数据框架,添加一些虚拟变量,然后将它们输入到模型中。看起来是这样的:

这将输出 45NO 和 183 YES 的数组。如果我们使用 value_counts()原始数据集的“决策”列,我们会得到 151 个否和 323 个是。现在我们可以把它们加在一起:

  • 183 是+ 323 是= 506 是
  • 506 个是/ 702 个客户总数= 0.72

这意味着,根据我们进行的调查和我们的模型预测,72%的客户会有兴趣购买 RR Diner 咖啡!在这种情况下,我们已经满足了供应商设定的标准,应该能够将他们的产品添加到我们的业务中。如果你真的想打动他们,你甚至可以补充说,我们的预测模型准确率超过 96%。谁知道呢,获得这样一笔交易可能会给你带来奖金,甚至升职;数据科学是商业世界中极其宝贵的资产。

结论

我希望通过这个例子,你已经很好地了解了决策树,以及如何使用它们来帮助你或你的企业做出准确的预测!关于决策树,还有很多很多有趣的事情我没有提到,比如随机森林模型或者在衡量整体准确性时使用精度/召回分数。我很想在未来写更多关于它们的文章,但是现在,有很多很好的资源可以让你了解更多关于预测分析的知识。查看 scikit-learn 的文档进行真正的深度探索,或者观看来自 Edureka 的这个信息丰富的视频!如果你想了解更多!

一如既往,非常感谢您阅读这篇文章!如果你喜欢我的内容,请考虑在 medium 上关注我,因为我希望在未来发布更多数据科学内容。希望你有一个伟大的一天!😃

跟我来!——https://bench-5.medium.com/

数据源-https://github . com/akthammomani/Decision-Tree-Based-Binary-Classifiers/Tree/main/Tree _ Based _ Classifier _ RR _ Diner _ Coffee/raw _ data

实体解析简介——需求与挑战

原文:https://towardsdatascience.com/an-introduction-to-entity-resolution-needs-and-challenges-97fba052dde5?source=collection_archive---------2-----------------------

因为好的分析和数据科学始于正确的数据

介绍

实体解析是一种技术,用于识别单个数据源或多个数据源中引用同一现实实体的数据记录,并将这些记录链接在一起。在实体解析中,几乎相同但可能不完全相同的字符串在没有唯一标识符的情况下进行匹配。

真实世界的数据远非完美。各种组织经常面临各种人以自己的方式从不同的来源多次输入的大量客户数据。

这里有两种不同的客户规格。

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

在上述记录中,姓名或者分为名、中、姓、首字母,或者是组合在一起。名字有时与称呼混在一起,头衔不同,中间名不见了,电话号码写得不同,地址被拆分和组合,一个城市的新旧名字被记录为同一地址,使用缩写,标点符号不同,一些字段被省略。

当您阅读这些记录时,您会理解这两个数据源描述的是同一个人。但是,只知道相等或不相等的计算机会将这些数据值标记为相同吗?

为了理解数据,计算机需要识别引用同一个现实世界实体*的记录。这个识别谁是谁的过程——不考虑无数的表示——是实体解析或记录匹配。实体解析也称为模糊匹配、合并清除和数据匹配。当在人的上下文中使用时,实体解析被称为身份解析。当涉及单个数据源并且目的是删除重复条目时,模糊匹配被称为记录重复数据删除或重复数据删除。

公司服务提供商可以使用实体解析来解析组织名称,尽管存在不同的表示、拼写错误、缩写和印刷错误。

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

一家保险公司需要协调拼写差异、缩写、同义词和不同的词序来关联其数据。

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

金融和银行公司要求匹配不同的数字和百分比表示。

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

前导和尾随空格、连字符、大小写差异和点可以使任何两个地址看起来不同,而实际上它们并不不同。

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

此外,国际客户数据库可能包含不同语言的数据。总而言之,由于数据的非标准化,在同一实体的不同记录中,每个属性都可能以多种方式变化,数据库中充满了这些变化。

公司使用实体解析来连接不同的数据源以清理数据,查看多个数据仓库之间不明显的关系,并获得数据的统一视图。在这个过程中,他们可能通过组合来自各种来源的数据来构建主数据管理系统(MDM ),从而开发出单一的真实来源。

企业实体解析

我们都知道数据质量的 1-10-100 规则,而 Gartner 将规则描述为:在记录输入时验证一条记录需要 1 美元,清理和删除重复数据需要 10 美元,如果什么都不做,则需要 100 美元,因为错误的后果会反复出现。

实体解析是至关重要的,因为它匹配不相同的记录,尽管所有的数据不一致,而不需要不断制定规则。通过使用模糊匹配连接数据库,我们可以清理数据和分析信息。我们可以在统一的数据上绘制模式,得出结论,并看到更大的画面。

这种更干净、更精简、关联度更高的数据对于高效运营和防止欺诈也至关重要。最重要的是,我们以更低的运营成本获得了单一客户视图。

让我们来看一些不同的场景,在这些场景中,模糊数据匹配使组织能够提供个性化的客户体验,高效地推动营销工作,提高销售额,并保持合规性。

行业使用案例

生命科学和医疗保健

《金融时报》援引麦肯锡全球研究所的一份报告称,通过更好地整合和分析从临床试验到医疗保险交易到智能跑鞋的所有数据,美国医疗体系每年可以节省 3000 亿美元——每个美国人 1000 美元。

生命科学和医疗保健行业需要关于医疗保健组织和提供商、患者及其互动和治疗、医院、医生、实验室和产品的最新和最相关的数据,以便不仅清楚地了解这些相互依赖的利益相关方,而且在适当的时间在他们喜欢的平台上向他们提供统一和个性化的信息。

例如,一家制药公司可以使用模糊匹配来汇总从其所有地点配送的药物数据,以了解一年中每种药物的处方量和销售量。由于数据输入不同的系统,药品名称会有差异,模糊匹配将能够协调名称。该公司还可以使用其所有购买者(医院和诊所)的单一视图来查看谁需要新的供应品以及谁欠他们钱。

制药公司还必须整合全球实验室科学家的生物和医学研究数据,以进行研究和制造新药。模糊匹配在这里很方便,可以连接和匹配包含数百万行的数千个电子表格中的化合物和反应,所有这些电子表格都有不同的列名、格式和不一致性(如甘精胰岛素和甘精胰岛素)。

除了一般的研究和分析之外,医疗保健系统还需要对每位患者的医疗旅程有一个全面的了解(也许是一个 MDM 平台)。他们利用患者的这种实时 360°视图来提供个性化的智能医疗建议,改善患者体验以建立强大的客户关系,并创造更好的产品。干净和匹配的患者数据也可用于创建健康指标。实体解析支持整合来自各种数据源的患者数据,匹配来自医院和私人诊所、保险提供商和理赔、个人档案以及来自互联网和社交平台的数据,以创建每个患者的独特档案。

例如,医疗保健行业可以分析汇编的数据,以了解患者过去是否有任何过敏反应,或者上次适合患者的确切布洛芬混合物。使用这些数据,医疗保健提供者可以计算出统计数据,如定期心脏健康检查期间印度 55-60 岁年龄组男性的平均心率,并得出结论。

制药公司还在推出任何新产品之前,使用关联数据进行市场研究,进行竞争和定价分析。如果他们对市场没有一个统一的看法,产品发布要么失败,要么推迟。

生命科学和健康行业有着复杂的法规遵从性要求。如果一家公司未能遵守各种健康责任法案或消费者数据隐私法规中的任何一项,它可能会受到严厉处罚或被关闭。

以前,公司要花费前所未有的大量时间来汇总报告以提交给监管机构。但是,敏捷记录匹配可以连接和协调生命科学数据的各种大量流入,如来自医院、内部记录、第三方来源、离线媒体和社交媒体的数据,以确保永远符合法规要求。

保险

保险公司经常与碎片化的数据孤岛作斗争,因为不同的保单(汽车、健康、家庭等)维护着他们自己的个人记录。因此,它们无法协调客户的人口统计数据、偏好、过去的保险单和信用评级。

在缺乏对客户的整体看法的情况下,保险业缺乏对她理想的保险范围、风险暴露和其他分析的理解。个性化营销和交叉销售的机会也被错过了。

例如,如果保险提供商不知道申请健康保险的感兴趣的客户是该公司现有保险持有人的丈夫,他们将无法提供组合方案,并将在客户服务和/或这些客户的最佳回报上妥协。投保者可能不知道他们的选择,但公司应该能够告诉他们。在这种情况下,将所有内部数据与可能的潜在客户进行集成和匹配,可以提供特定地理位置的大量客户的统一视图。

实体解决方案是保险业以客户为中心的关键。如果保险管理人员对他们的潜在客户有统一的看法,他们可以为他们提供高度个性化的保险计划,从而轻松击败竞争对手。

欺诈检测是保险行业中模糊记录匹配的最大用例之一。如果保险公司不能识别出那些在过去犯有保险欺诈的人,而这些人现在申请了细节略有变化的高额保险计划,他们可能会遭受巨大的损失。

索赔管理、策略管理和法规遵从性也依赖于策略和法规数据的整合。

制造业

借助模糊数据匹配,制造商可以分析他们在大范围内的支出,优化供应商和原材料采购。这种分析将允许公司通过缩小支出差距、聘用最便宜的供应商并从他们那里采购来降低成本。库存分析有助于消除库存和配送中的盲点。

例如,如果一个制造单位已经有 100,000 个单位的过去库存,那么他们不需要生产更多的单位,直到收到新的订单。但是,如果他们来自中国的零部件供应链由于政治动荡而中断,那么他们需要迅速查看整合的供应商数据库,以确定下一个最便宜的供应商,并立即下订单。

对客户的统一看法将允许制造企业提供一致的客户体验,并交叉销售和追加销售他们的产品。交叉连接来自研究、过去的设计项目、竞争、制造质量、故障和维护报告的数据也可以为卓越的质量铺平道路。

实体解析还允许合并产品目录和价目表。多个条目,因此,同一产品的不同定价会在任何公司引起混乱。协调定价对于向每位买家展示一致和正确的产品信息至关重要。

金融服务

由于金融服务的高风险性,如果客户经理的服务质量差或态度不认真,金融服务可能会失去很多客户。不连续和不干净的数据也可能使企业面临不必要的风险。

支持统一投资组合准备和审计的单一客户数据源对于每个金融公司的顺利运营和成功至关重要。例如,不同关系经理为同一客户输入的不同客户数据(姓名、电话号码、地址等的拼写错误)必须使用实体解析进行汇总和清理,以获得客户的整体视图。

只有统一的客户观才能使金融公司提供良好的客户服务,这将导致更高的客户保留率,从而带来更高的投资组合价值。如果你和一家投资银行有值得信赖的关系,你会希望他们将你每年的储蓄持续投资,而不是寻找新的金融服务。

关联客户数据对于建立个人信用评级和财务稳定性也至关重要。这些评级可用于在发放贷款、移交信贷和检测欺诈活动方面做出明智的决策。模糊数据匹配用于将 KYC 数据与客户投资联系起来。KYC 信息连同信用评级可以证明是非常有助于检测和避免债务欺诈。

麦肯锡关于反洗钱的一篇文章指出“在美国,主要银行的反洗钱(AML)合规人员在过去五年左右的时间里增加了十倍。”文章强调,模糊逻辑(众多工具之一)可以让银行验证更多的客户身份,并映射特定客户与高风险个人和法律实体之间的联系。

能源、石油和采矿

全球能源、采矿和石油公司需要清理、分类、统一和理解来自各种来源、地理位置和工程角度的不同数据,以降低运营成本并平稳运营。这些公司需要对零件和材料进行分类,了解他们把钱花在哪里,并发现更好更便宜的机械供应商。

能源组织需要统一的数据,这不仅是为了降低成本,也是为了保持合规性并高效准确地报告。模糊匹配帮助这些公司整合他们的数据,并为他们提供一个强大的数据管理平台,可以提供上述所有功能。

随着用例列表变得越来越长,模糊记录匹配有着无尽的好处这一认识令人欣喜。

我们没有将两个记录理解为一个实体,这可能会破坏主数据。关系和模式会被错过。聚合和计算没有任何意义。关键信息将会被搁置。关键的决定会失控。生活、国家、组织和社区的方方面面都可能受到威胁。

在所有情况下,我们可以通过链接记录来了解情况,并可以跟踪从人到疾病到新计划的任何事情。整合不同行业的数据仓库具有指数级的价值。

功能用例

销售和营销

向客户提供的建议和有效的营销方案无法基于不同的数据孤岛进行预测。

如果在整合中没有查看买家数据,大多数营销工作都会白费,因为外联计划和客户互动不会个性化,购物者不会购买。在缺乏有用的客户体验的情况下,公司会因为糟糕的客户服务而被抛弃,从而输给竞争对手。

通常,由于客户姓名的不同拼写或电话号码的键入错误,客户在两个不同的商店数据库中被多次列出不同的购买记录。来自该公司的重复电子邮件只会错失销售机会,或者更糟的是,可能会导致客户将该公司的营销电子邮件标记为垃圾邮件。

CRM 中的客户重复数据删除是实体解析非常有效的另一个领域。由于不同销售人员的不同条目,或者从多个渠道获得的潜在客户名单,客户关系管理系统通常具有同一客户的多个条目。在外展过程中,多次联系同一个销售线索是一种浪费,因为这会导致糟糕的品牌体验和接受者的不适。宝贵的销售周期也被浪费了,因为不止一个销售人员在联系同一个人。通过记录匹配进行的客户重复数据删除确实有助于销售和营销的卓越运营。

在另一个场景中,汽车供应商需要通过网站和移动应用程序来协调所有线索,以消除重复的线索,然后专注于紧凑列表。

例如,如果一位顾客退回一件产品,但第二天又买了一件更大的,公司会发送以下信息:

方案一:你退了产品,买了一个更大的。请放心,我们会尽快把它寄给你。

选项 2:您刚刚退回了一件产品。再来这里购物。

信息 2 对客户来说是多余的。在这种情况下,退货详情必须首先与客户档案进行核对。

在所有场景中,在进行任何营销之前,必须通过实体解析来统一客户数据。

通过模糊匹配和统一来自不同内部和外部数据仓库(如网上商店、移动应用程序、线下商店、忠诚度计划和个人资料)的客户数据,企业可以创建一个 360 度的客户视图,并通过为每个客户提供独特的个性化体验,将营销工作提升到一个新的水平。

360 度客户视角也是了解交叉销售和追加销售产品和服务机会的非常有效的工具。现在,以低得多的客户获取成本增加客户终身价值将成为可能。

如果顾客在商店买了一件大衣,这些离线信息可以用来给她发送冬季服装的折扣代码。不管接触点是什么,对客户来说都是同一个品牌。

这种客户统一可以通过更新和匹配来自客户独特旅程之上的所有来源的实时客户交互数据来实现。

所有数据驱动和面向客户的企业,如酒店、医疗服务提供商、保险公司、零售品牌、汽车公司,都将从这种个性化营销方法中受益匪浅。根据麦肯锡的说法,以客户为中心的思维模式的根本改变,以及运营和 IT 方面的改进,可以使客户满意度提高 20%到 30%。

通过将各种营销计划和最终的销售联系起来,公司可以了解带来最高投资回报率的广告渠道和形式。买家行为也可以用来修改营销活动和预算。

供应链

准确、互联的供应商数据对于保持敏捷的供应链至关重要。在缺乏供应商统一的情况下,供应链的竞争力将会下降,大量的资金将会花在应对供应和库存问题上。

匹配供应商并建立统一的供应商档案并不容易。除了体积复杂之外,描述中的变化可能是巨大的,名称可能会被拼错或以不同的方式表示。每个季度都会有不同描述的新采购。

实体解析通过整合分布在各种业务单位、地区、地理位置以及零件和材料类别的数据仓库中的供应商数据来维护一个强健的供应链。

供应商匹配还将使公司能够了解跨部门的定价,轻松找到给定产品的最佳供应商,协商价格,更快地加入新供应商,消除重复供应商,并管理与供应商地理位置相关的风险。

假设一家 CPG 公司想要比较两家类似产品的供应商,以确定谁以更低的价格销售了大部分产品。两家厂商会用不同的方式表达产品名称。一个卖主可能称这种产品为薄纸,另一个卖主可能称它为纸手帕、薄纸或卫生纸。

由于产品名称不会完全匹配,实体解析用于协调产品,比较它们的价格,并决定哪个供应商卖得更便宜。实体解决方案还将阻止再次注册的欺诈性卖家,他们的详细信息略有变化。

挑战

比较来自不提供任何唯一标识符的不同数据源的充满非标准和不一致数据的大数据记录是一个复杂的问题。

计算机可以评估等式并进行数学比较,但无法自行理解模糊匹配。尽管人们可能会把记录中的两个人——卡玛拉·哈里斯夫人和哈里斯·卡玛拉——称为同一个名字,但一个编程系统却不知道该怎么办。

不同的用户、技术系统、地理位置、地区、年份和组织可以用不同的格式表示相同的数据。记录在打字错误、称呼、空格、缩写、语言、拼写、完成、省略、语音、顺序、后缀、前缀等方面有所不同(如上所示)。数据输入中的错误会导致一个实体的多个记录,即使是在一个源中。

考虑到表现形式的变化,相同数据的排列和组合的数量是空前的。根据各个实体的类型,名称匹配、地址匹配、位置匹配、供应商匹配、产品匹配都具有独特的匹配标准。

数据管理系统应该理解所有标准,并匹配各种记录来代表一个客户或产品或销售商或供应商。姓名、地址、位置、零件、产品、电话号码、日期匹配对于协调来自不同仓库的数据至关重要。

我们谈论的是大量的数据。庞大的数据量加上丰富的格式使得匹配成为一项艰巨的任务。微调任何算法以适应每种实体类型、记录类型和值将是一项艰巨的工作。

传统的数据管理方法无法在实际的时间范围内处理这些不同的数据。

为了理解数据匹配解决方案的复杂性,让我们更仔细地分析基于规则的匹配。为了匹配同一实体的任意两个记录,将定义各种基于字符串的比较规则。每个记录将与所有这些规则上的其他记录一起运行,以推断这两个记录是否相同。

这里只是这种基于规则的匹配的一些限制。

完全

考虑到一个属性的单个数据值的不可预测的变化数量,为一个字段定义匹配规则并不容易,需要对数据配置文件有深刻的理解。你能涵盖阿尔茨海默氏症的所有拼写或所有不同的细长纤维的描述吗?例如,在我们写这篇文章并研究汽车行业的模糊匹配之前,我们不知道底盘是指车架。那就忘了同义词相等规则吧。

设置匹配规则是一个麻烦、昂贵且冗长的过程。

复杂性

除了定义规则之外,组合记录的不同属性的匹配规则将更具挑战性。如果街道 1 和街道 2 看起来相似,但电话号码不匹配或不相交,记录应该相同吗?

维护

必须定义大量的规则来涵盖各种各样的数据表示。但规则仍会被遗漏,角落案件会不了了之。

更新规则并使其适应不断变化的数据也很棘手。随着数据源数量的增加,格式和数据类型随着数据量的增长而增长,定义规则变得越来越复杂。

无论您创建多少规则,一组固定的规则都无法处理所有前所未有的数据变化,这使得基于规则的匹配非常难以实施和维护,并且成本高昂。

规模

由于大多数实体缺少可以比较的唯一键,所以每条记录都以强力方式与其他记录匹配。对于 n 个记录,存在 n*(n-1)/2 个唯一对。为了建立平等,每一个规则将在每一对上运行。

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

当记录数增加 10 倍时,比较次数增加 100 倍。因此,随着记录数量的增长,比较的次数会呈指数增长。因此,即使我们假设最快的比较技术,比较的时间也是指数级的。

基于规则的数据匹配是一种计算上具有挑战性且不可扩展的解决方案。运行这些规则的时间也将立即呈指数增长。

精确

即使在推导出匹配逻辑之后,区分匹配和不匹配的最佳匹配阈值是什么?由于规则的性质,许多误报和漏报肯定会出现在结果中。

回忆

你在匹配标准中犯了一个错误,整个数据匹配将被连根拔起。许多真正的积极因素可能会被遗漏。理解属性和记录为什么可以说是相同的是一个游戏改变者。

其他挑战

除了基于规则的集成解决方案的复杂性之外,这里还有更多适用于所有数据匹配解决方案的复杂性,这说明了为什么匹配是最难解决的问题之一,

变量数据存储器

数据将保存在各种数据存储中,如关系数据库、NoSQL 数据存储、云存储和本地文件系统。不同的数据库意味着数据会以不同的格式出现——文本、专有、JSON、XML、CSV、Parquet、Avro 等等。

数据源中的模式变化

实体表示通常因系统而异。属性的数量可以不同,它们的表示也可以有很大的不同。一个数据系统中的地址属性可以在另一个数据系统中分为地址 1 和地址 2。或者,即使是相同的属性,列的命名也可能不同。例如,可以写街道 1 和街道 2,而不是地址 1 和地址 2。价格可以写成 MRP 或销售价格。对齐各种模式是一项具有挑战性的任务。

*实体定义:正如我们所知,实体是一种独特的东西——一个人、一家企业、一种产品、一个供应商、一种药物、一个组织。每个实体都有其描述属性,如名称、地址、日期、颜色、形状、价格、年龄、网站、品牌、型号、容量等。

实体解析是匹配不一致数据的一种很好的技术,但它也带来了挑战。我们最近开源了一个基于 Spark 的工具 Zingg ,通过使用机器学习来解决实体解析。如果您需要帮助来协调您组织的数据,请务必查看。

数据科学信息论导论

原文:https://towardsdatascience.com/an-introduction-to-information-theory-for-data-science-4fcbb4d40878?source=collection_archive---------11-----------------------

思想和理论机器学习

定义一般相关性度量的第一步

本文旨在信息论框架内简要介绍信息量的概念,并概述这一概念在数据分析领域的可能用途。从这些简单的元素中,我想到了本文https://medium.com/analytics-vidhya/how-to-measure-the-non-linear-correlation-between-multiple-variables-804d896760b8中提出的多元非线性相关性度量。

代表信息可变性

信息量代表描述任何情况所需的最少字数

信息论在很大程度上是基于克劳德·香农在 20 世纪 40 年代末发表的著作(参见文章一种通信的数学理论*,发表于 1948 年的贝尔系统技术杂志,以及次年发表的 《通信的数学理论 )。*

它的主要目标是提供工具来改善电信系统中的信号传输。这意味着对信息的含义有一个特殊的定义,尽管如此,在数据分析等领域,这个定义还是很丰富的,乍看之下,它与电信系统中的信号编码技术没有什么关系:一条消息中包含的信息被定义为编写该消息所需的最少比特数。

哈夫曼树的实用方法

为了更清楚地理解这个定义,让我们假设我想用特定的编码来写单词“analyse ”,以便将每个字母翻译成 0 和 1 的序列。

我可以选择任何编码,比如这个:

 *╔════════╦══════════╗
                         ║ Letter ║ Encoding ║
                         ╠════════╬══════════╣
                         ║   a    ║    111   ║
                         ║   n    ║    110   ║
                         ║   l    ║    101   ║
                         ║   y    ║    100   ║
                         ║   s    ║     01   ║
                         ║   e    ║     00   ║
                         ╚════════╩══════════╝*

因此,单词“分析”将被写成:111–110–111–101–100–01–00(我写破折号只是为了简化阅读,当计算机编写或解密消息时,它们不存在)。因此,这个词是用 19 位编码的:“分析”这个词包含的信息量最多等于 19。

然而,字母“a”的出现频率高于其他字母,这意味着如果该字母例如由 01 编码,而字母“s”由 111 编码,那么该单词的编码将只需要 18 位。这使得我们可以确认“分析”一词所包含的信息量最多等于 18。

为了定义简约编码,这意味着用最少的比特数对文本进行编码,可以使用霍夫曼码,基于这样的想法,即最好用短的二进制数对频繁符号进行编码,并且仅对最不频繁的符号使用最长的二进制数。

霍夫曼码可以用霍夫曼树来定义(这里我不详细介绍)。对于单词“分析”,可能的树是:

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

单词“分析”的霍夫曼树(图片由作者提供)

该树提供了以下代码:

 *╔════════╦══════════╗
                         ║ Letter ║ Encoding ║
                         ╠════════╬══════════╣
                         ║   a    ║     00   ║
                         ║   n    ║     01   ║
                         ║   l    ║    100   ║
                         ║   y    ║    101   ║
                         ║   s    ║    110   ║
                         ║   e    ║    111   ║
                         ╚════════╩══════════╝*

我们最终得到了“分析”这个词的二进制编码:00–01–00–100–101–110–111。

单词“分析”再次由 18 位编码。这个位数是对单词“分析”进行编码所需的最少位数吗?一般来说,给定任何消息,有人能容易地确定消息中包含的信息量吗?克劳德·香农给出了这些问题的答案。

香农熵的理论方法

如果我们注意到 P(1)字母“a”在单词“analyse”中出现的频率,P(2)字母“n”出现的频率,等等。,那么 Claude Shannon 告诉我们,对单词“analyse”的每个字母进行编码平均所需的最少位数是:

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

熵的定义(作者图片)

他把这个量命名为“熵”。对于“分析”这个词,我们得到数量 2.5。

由于这代表了对单词“analyse”的每个字母进行编码所绝对需要的平均位数,所以这个数量必须乘以单词中的字母数,最终得到 17.5。

因此,对该字进行编码所需的最小位数是 18 位,因为只能使用整数位,而数字 17.5 被解释为包含在“分析”字中的信息量。

从现在开始,我将把重点放在熵上,也就是说每个字母编码所需的平均比特数。事实上,这赋予了消息(或数据)内在的“可变性”,而不管其长度(或数据量)。

“可变性”的概念对于研究变量之间的相关性是至关重要的,因为研究相关性是关于研究变量如何相对于彼此变化。例如,在气象学中,如果一个人注意到在地球的一部分,当温度上升时降水量增加,那么这两个变量是相关的,不管记录温度和降水量的天数是多少。

为什么不考虑方差而不是检查香农的熵呢?

因此,熵表征了集合的“可变性”:元素的集合越多样化,这个集合的熵就变得越重要。然而,在统计学领域,集合的可变性可以由集合中元素之间的方差来表示。为什么我们不满足于方差,而使用熵呢?

方差要求对数据进行推测

方差虽然众所周知并且非常有用,但它需要对所研究的数据做出许多假设。

首先,方差只能对数值型数据进行计算。

另一方面,方差的确定是基于均值的估计:

Var(X) = E[(X - E[X]) ]

当数据是数字的并且有足够数量时,这并不构成问题:通常的均值和方差估计量给出非常精确的结果。

然而,最终目的不是确定不同变量的方差,而是确定几个变量之间的相关性。因此,我们必须计算一个变量的方差,假设另一个是已知的:

Var(Y|X) = E[(Y|X - E[Y|X]) ]

在这种情况下,如果我不假设变量 X 和 Y 之间的关系,方差的任何估计都是可能的。事实上,如果我拒绝做出任何假设,对我来说,考虑一个从可用数据中过拟合的足够程度的多项式模型就足够了,因此当 X 的实现已知时,断言 Y 的方差为零。

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

“完美”的模型总是可以找到的(图片由作者提供)

所以,要计算两个变量之间的皮尔逊相关,我们假设 X 和 Y 的关系是线性的,除了测量误差;在所有可能的方差中,我们选择最小方差。由于这个原因,皮尔逊相关是线性相关,并且通过普通最小二乘法与线性回归有内在联系,该方法包括最小化:

Var(Y|X) = E[(Y|X - E[Y|X]) ]

假设:

E[Y|X = x] = αX+β

熵不需要假设,以数据离散化为代价

与方差不同,熵不能从数值数据中计算,而是需要分类数据。

一个集合中的类别越多,这些类别被发现的可能性越大,熵就越大。因此,熵度量的是可变性,即数据集中数据的“内在无序”,而不对数据应该如何组织做出任何假设。

因此,熵使得克服关于数据之间关系的假设成为可能,特别是线性假设,但是以离散化信息为代价。在考虑数字数据时,试图定义一个不是基于任何假设的相关性在任何情况下都是注定要失败的。事实上,如果我拒绝对变量之间的关系做出任何假设,这意味着我没有限制潜在模型的复杂性。因此,我总是能够找到一个模型,将完美地插值数据,这将允许我说,两个变量之间的相关性总是完美的。这当然是过度拟合的情况:因此,必须通过表达假设(如线性假设)或通过离散化数据来防止过度拟合,从而限制基础模型的复杂性。

最后,应该注意,任何多样性指数都可以替代熵,因为它们具有对于非线性相关性的定义至关重要的相同性质。

量化两个变量之间的互信息

第一部分的考虑,尤其是方差和熵之间的比较,值得更详细地解释。从今以后,我认为我们正在研究两个变量 X 和 y 之间的关系。我们如何测量这两个变量之间的相互信息,或者说得不那么细致,一个可以在多大程度上预测另一个?

为了避免皮尔逊线性相关性和非线性相关性之间的任何混淆,我将讨论线性情况下的相关性,以及非线性情况下两个变量之间的互信息。

然而,在我们研究互信息的理论方面之前,让我们看看熵如何帮助我们比较不同的变量。

信息论和集合论

香农的信息测度和集合论之间存在联系,集合论以一种非常实用的方式允许我们使用集合论进行推理,并利用维恩图来直观地表示公式。

理论辩护

我在这里不提出信息论和集合论之间联系的理论依据。有兴趣的读者可以参考 Raymond T. Weung 的《信息论初级教程 第六章

公式的可视化

通过考察信息论和集合论之间的联系,我们可以得出结论:用文氏图直观地表示信息论公式是可能的。在这样的图中,每个圆盘代表一个变量的“可变性”,而“可变性”的度量就是香农熵。因此,我使圆盘 X 的面积等于相关的熵 H(X)。

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

单个随机变量的熵(图片由作者提供)

多元熵 H(X,Y)被定义为变量 Z=(X,Y)的熵。在图形术语中,H(X,Y)是 X 和 Y 圆盘并集的面积。

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

两个随机变量的联合熵(图片由作者提供)

因此,图表显示:

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

联合熵不等式(图片由作者提供)

两个变量共有的“可变性”是两个变量圆盘的重叠表面:这个交集的面积是两个变量之间的互信息。换句话说,X 和 Y 之间的互信息 I(X,Y)由圆盘 X 和 Y 之间的相交面积表示,并对应于 X 和 Y 之间“共享”的熵。

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

两个随机变量之间的互信息(图片由作者提供)

当变量 X 和 Y 完全相关时,那么两个圆盘 X 和 Y 完全重叠,因此 H(X,Y)=H(X)=H(Y)。相反,当 X 和 Y 没有任何共同点时(变量之间没有相关性的情况),则盘 X 和 Y 不相交,H(X,Y)=H(X)+H(Y)。

互信息的定义

考虑到数据分析的实际应用,现在有可能以简化的方式介绍 Claude Shannon 的互信息定义。

在离散变量 X 和 Y 的情况下,两个变量之间的归一化互信息的度量可以定义为:

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

两个变量的归一化互信息(图片由作者提供)

这种互信息的标准化度量假定值在 0 和 1 之间。事实上,从前面的公式可以推断出:

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

归一化互信息的界限(图片由作者提供)

当变量 X 和 Y 完全“相关”时,则 H(X,Y)=H(X)=H(Y),因此标准化互信息值为 1。相反,当 X 和 Y 没有共同点时,则 H(X,Y)=H(X)+H(Y)并且互信息因此也为零。

连续变量的情况

对于连续的 X 和 Y 变量,我们必须:

  • 将变量离散化,以便能够应用前面的部分公式(或类似的公式)
  • 或者使用一种形式的微分熵(例如 Kullback-Leibler 散度——一种非对称互信息的度量),它假设我们知道随机变量 X 和 y 的概率分布。

当变量 X 和 Y 的概率分布已知时,第二种方法可以给出 X 和 Y 之间的互信息的精确测量。为此,Kullback-Leibler 散度可以被视为一种定义互信息的精确测量的方法,而无需离散化变量。事实上,这是一个比较与变量相关的分布的问题,可能是连续的。

然而,在实践中,变量的分布往往不是一眼就能看出来的。估计它们迫使我们要么对分布的形状作出假设,要么通过创建直方图来离散化变量,这些直方图随着观察次数的增加,最终与未知分布的形状相匹配。因此,最后一种方法相当于离散化数据的行为,因为从直方图估计分布相当于采用数据的离散化视图。

概括地说,要计算任何类型的“相关性”,要么对所研究的变量之间的关系做出假设,要么将数据离散化,这一点似乎至关重要。

线性相关的相似性

归一化互信息非常类似于皮尔逊相关。一个显著的区别是皮尔逊相关性在-1 和 1 之间,而归一化互信息在 0 和 1 之间。这是因为在两个变量之间存在线性关系的情况下,它们可以以两种方式相关,并且只有两种方式:正相关或负相关。然而,在变量之间有任何关系的情况下,它们之间有无数种相互关联的方式。因此,归一化互信息应该主要与皮尔逊相关的绝对值进行比较。

皮尔逊相关的几个性质

类似于标准化的互信息,皮尔逊的绝对值总是在 0 和 1 之间,并且当 X 和 Y 独立时,它们之间的相关性为零。

相比之下,如果 Y=αX+β(完全线性相关),那么皮尔逊相关等于 sgn(α)。因此,根据α是正还是负,相关等于 1 或-1。

学习所需的数据量

我说过,为了测量几个变量之间的非线性“相关性”,数据科学家面临着一个两难的境地:要么对变量之间的关系做出假设,要么对数据进行离散化。

实际上,这两种可能性是等价的。事实上,对于任何对学习理论感兴趣的人来说(Vapnik-Chervonenkis 理论或 PAC-Bayesian 理论——“PAC”的意思是“可能大致正确”),很明显有四个方面是相关联的:

  • 可供学习的数据量
  • 研究空间中的数据分布(数据是集中在一起,还是非常分散?换句话说,数据方差是多少?)
  • 用于表达变量之间关系的模型的复杂性(模型是线性模型还是 10 次多项式?)
  • 模型的泛化误差。

我们拥有的数据越少,我们就越被迫局限于简单的模型,以便能够合理地希望模型在一般情况下给出令人满意的结果:这就是为什么当只有两个点可用时,使用线性模型是无用的。

当考虑到大量变量时,这种情况更为明显,这就是所谓的“维数灾难”。

通过使用大量的类来离散化数据,我们允许计算机观察变量之间非常复杂的关系。这相当于考虑非常复杂的模型:互信息的测量因此可能是极好的,但是泛化误差将很可能非常大。相反,通过只使用几个类,计算机只能考虑它们之间的基本关系:因此,互信息分数会降低,另一方面,泛化误差通常会更低。

因此,进行离散化的方式直接关系到可用的观察值的数量和问题的维数。在一般情况下,数据科学家可以多次这样做:例如,他可以在训练数据上建立决策树,然后检查验证数据,泛化错误似乎是合理的。如果在验证样本上获得的结果不令人满意,数据科学家可以在这种情况下考虑新的模型,并重复他的工作,直到他获得适当的结果(同时注意不要过度拟合验证样本本身)。

不幸的是,这种方法在目前的情况下毫无意义,因为我们要寻找几个变量之间“相关性”的度量。让我们想象一位数据科学家,在发现两个变量之间的高度“相关性”后,决定建立将它们绑定在一起的线性关系。然后,他注意到,即使在训练样本上,这种线性关系也是不存在的(例如,学习样本上的线性回归呈现 5%的 R):最初使用的“相关性”将是非常无用的(这同样适用于任何降低问题维度的尝试,例如主成分分析基于变量之间相关性的测量)。

如果我们不谨慎的话,在线性相关情况下不可能发生的事情很可能在互信息测量的情况下发生。特别是,能够定义“良好的离散化”仍然是必不可少的。然而这是一块绊脚石。关于这个主题的文献浩如烟海,结果有时非常复杂,据我所知,没有完美的解决方案(至少目前是这样)。

因此,我在这里只提出一些实际实现互信息测量的经验法则。假设我们试图测量一组称为描述符的变量所提供的信息,以描述称为目标变量的其他变量。

第一条规则是,目标变量必须根据实际情况的需要和需要进行离散化。例如,如果目标变量由以摄氏度为单位的温度数据组成,并且如果对于用例来说区分“低”、“中”和“高”温度是必要且充分的,那么将目标变量离散成三个相应的类别是必要且充分的。目标变量的类的数量越多(对于描述符以相反的方式工作),过度拟合(即,不适当地获得高互信息分数)减少得越多;尽管如此,要求超过必要的水平会产生为利息问题获得人为的低互信息分数的风险(除非你有非常大量的数据)。

第二个规则是,描述符必须根据不同的分位数进行离散化,以使类别尽可能平衡。为了确定要考虑哪些分位数,我假设每个描述符的类数量对应于以下公式的一个不等式:

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

离散化的经验法则(图片由作者提供)

在这个等式中,m 是可用数据项的数量。为了确定 c,让我们假设我们必须回答以下问题:如果我想在两个变量 X 和 Y 之间建立可能的线性关系,我可以从训练样本的多少最小数据量允许自己执行线性回归(希望泛化误差将“非常可能足够接近”学习误差)?这个量等于 c。

假设上一个问题的答案是 c = 7。假设我们试图预测 Z 是 X 和 Y 的函数(因此描述符的数量是 2),并假设我们有 500 个数据项。因此,变量 X 和 Y 中每一个的最大类别数将是:

(1/7) ∙ √500 ≃ 3,20.

因此,我们可以使用中位数(将数据分为两类)或三分位数(创建三类)来离散化 X。对于 y 也是一样。

在一些变量(描述符或目标变量)已经是离散的情况下,为了满足前面的要求,一些类最终必须被合并。

正确量化两个变量 X 和 Y 之间的线性关系所需的最小数据量并不明显,我将在以后的文章中详细介绍一种可能的方法。

结论

简而言之,信息论是一个特别广泛的理论,超出了电信应用的范围,可以方便地用于数据分析。它通常用于构建某些决策树,但据我所知,只考虑了单变量的影响。然而,从这里提出的基本考虑,有可能制定一个多元非线性相关定义,这是我上一篇文章的主题。然而,当从线性相关性转移到非线性相关性时,复杂性出现了,因为被认为是潜在模型的函数的复杂性不再是有限的,于是话题转向了学习理论。

内核方法介绍

原文:https://towardsdatascience.com/an-introduction-to-kernel-methods-9c16fc8fefd2?source=collection_archive---------25-----------------------

从核密度估计到非参数回归。

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

斯科特·韦伯在 Unsplash 上拍摄的照片

介绍

统计机器学习中的许多技术都源自“从某种概率分布中抽取数据”的概念。概率分布本身是数据点可能性(或者频率,如果你愿意的话)的模型,即观察到某个值、结果等的可能性有多大。基于这种想法的方法(或算法)被称为参数化,因为它们是由底层分布(如高斯分布)的参数指定的。

然而,假设的可能性模型可能不真实;“真实的”分布可能是偏斜的,具有不同成分的多模态,等等。一般来说,这对于分析数据的科学家来说是未知的。为了克服参数模型的局限性,一类基于所谓的 内核非参数方法被并行开发。这篇文章旨在展示内核背后的基本思想以及它们在统计学和机器学习中的应用。

核密度估计

当估计某个变量 x 的概率分布时,会出现第一个问题。为了获得分布的第一印象,绘制了具有不同仓宽的三个直方图(图 1)。

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

图 1: 不同仓宽下 x 的经验分布。(来源:作者)

根据仓宽的不同,关于底层分布的结论完全不同;它可以是均匀的,也可以是具有三种或更多模式的多模式。因此,不清楚使用哪个概率分布来估计相应的参数(如均值和方差)。注意,每一次观察都将 ρ 的一些“量”添加到它所在的仓中。因此,上面的图可以通过在 x 的不同水平的个人贡献的总和来构建。假设样本是独立同分布的。因此,我们所能做的就是将概率分布表示为数据点 xᵢ 周围的“小密度”的叠加,即所谓的 核密度 (通过观察量归一化)。因此,p(x)= 1/nσk(x,xᵢ) ,以 K(x,y) 为内核。

核密度函数。

一个可能的内核是 高斯内核;高斯核的公式如下所示。它本质上是一个以 xᵢ为中心的概率分布。

高斯核函数。

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

图 2: 高斯核对于 γ 有不同的取值。(来源:作者)

高斯核由一个超参数 γ (图 2)进行参数化,该参数作为方差并确定点 xᵢ 周围的密度“浓度”。还有其他可用的核(均匀核、抛物线核、余弦核等)。),但是现在使用这个就足够了。

形式上,内核是一个具有两个输入 xy 的非负函数。对内核 K(x,y) 的要求是

  • 它是对称的,即 K(x,y) = K(y,x)
  • 半正定的,即具有成对评估的有限矩阵应该没有负特征值,
  • 它应该整合成一个。

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

图 3: 不同 γ值的概率密度。(来源:作者)

出现的一个问题是 γ 的选择,其值必须是固定的。根据 γ 的值,密度可能看起来非常不同(图 3),就像图 1 中的面元宽度一样。对于太大的值,模型过于简单,重要信息丢失(拟合不足),而对于太小的值,情况正好相反(拟合过度)。这里的主要问题是“小”样本量,因为通常估计量是 一致的 并且收敛于无限多个样本的极限中的真实密度。虽然有选择 γ 的经验公式,但最简单的方法是进行 交叉验证 寻找其最优值。

核密度估计的交叉验证。

更准确地说,使验证集中的数据概率最大化的值 γ 被认为是最优的。图 4 显示了作为 γ 的函数的负对数似然性,以及具有最佳参数的密度,这似乎非常符合。

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

图 4: 负对数似然和核密度,以及 γ的最佳值。(来源:作者)

非参数回归

因为回归和分类问题可以从概率分布中导出,所以核也可以用于执行回归和分类。一条回归线是条件分布 p(y|x) 的期望 E ,即f(x)= E【p(y | x)】。而且认为 p(y|x) = p(x,y)/p(x) 。于是, E[p(y|x)] = ∫ y[p(x,y)/p(x)]dy

这产生了 f(x) 的以下表示,称为 Nadaraya-Watson 核估计器

非参数回归函数。

预测可以被视为加权平均,而权重是训练数据中的样本到新点的相对位置。因此,核充当相似性度量。此外,出现与上述相同的问题,因为超参数 γ 必须被“调整”。这一次,要优化的度量将是 均方误差

回归问题的交叉验证。

γ 的最佳值是最小化均方误差的值。在图 5 中,最左边的图显示,对于高值,函数过于简单(欠拟合),而对于低值,函数变得有些嘈杂(过拟合)。最佳值似乎在 0.01 和 0.001 之间,最右边的图显示了通过交叉验证发现的该问题的最佳回归线。注意,均方误差的最小值对应于数据中不可约的误差(噪声)。

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

图 5: 非参数回归。(来源:作者)

内核作为内积

除了作为一种表达概率分布的方式,内核还可以以另一种方式进行解释,这在对高斯内核进行泰勒级数展开时变得清晰(图 6)。

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

图 6: 高斯核的泰勒级数展开。(来源:作者)

展开表明,核 K(x,y) 实际上是两个向量 xy 的多项式基展开φ的<(x)、φ(y)>(具有无限阶)。因此,原始数据被隐式地映射到由多项式的新基向量构建的新空间,即特征图 — ,在支持向量机中被用作所谓的核技巧

结论

总之,核方法是估计函数的另一种简单的方法。然而,这种非参数技术也有一些缺点。例如,计算从训练转移到评估(懒惰学习),因为训练几乎是免费的(除了只有一个超参数估计)。另一方面,他们不能在训练数据之外进行外推,这在图 5 中最右边的图中是可见的;对于 x 的高值,曲线变平,这直观上看起来是“错误的”。最后,潜在的机制没有被发现,也就是说,模型不是真正可解释的,除非应用一些模型检查技术。对于参数模型,参数的大小表示变量的相关性。尽管如此,如果唯一的目标是预测,核方法无疑是经典方法的一种替代方法。

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

斯蒂芬·菲利普斯-Hostreviews.co.uk 在 Unsplash 上的照片

知识图导论

原文:https://towardsdatascience.com/an-introduction-to-knowledge-graphs-faedb6f2435a?source=collection_archive---------13-----------------------

了解如何使用知识图不仅可以让数据科学家能够从大量数据中提取相互关联的事实和假设,还可以帮助他们了解如何通过链接和语义元数据形成上下文联系和理解数据,这有助于提供统一的数据分析和智能方法。本文是对知识图、重要概念及其应用的介绍。

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

杰森·温加特在 Unsplash 上拍摄的照片

简介

知识图用于绘制来自不同来源的数据集合,并在给定主题(如人、地点或事物)的不同实体之间建立联系,以提供数据的意义并消除任何语义模糊(Ristoski 和 Paulheim,2016 年)。图表技术和分析为连接驱动的系统提供了工具——从社交连接到金融连接,它有助于将数据分析和智能从仅仅制表和检索数据转移到形成现实世界的意义和关系(Needham 和 Hodler,2019)。

知识图可以被认为是一种语义网络,它形成了网络中概念和实体之间关联的基础——现实世界对象、事件、情况或抽象概念之间的连接(“语义网络”,2021)。尽管它们可以互换使用,但知识库和知识图并不相同,因为知识图中的信息是用图来组织的,这并不适用于所有的知识库。不同的组织提出了不同版本的知识图,每个版本都有不同的复杂程度,如谷歌的知识图、知识库、微软的 Satori、脸书的实体图等。作者图片

2012 年,谷歌推出了名为“谷歌知识图”的知识图,利用现代人工智能诞生以来一直存在的方法,使用户能够快速发现与他们的查询相关的新信息(Singhal,2012)。

资源描述框架和本体

知识图是不同范例的组合,一个提供通过结构化查询探索数据的方法的数据库,一个提供网络数据结构的图,一个解释数据和推断新事实的知识库,以及一个用作正式语义数据模型的本体,该模型用于定义主题中存在的对象类型和用于描述它们的属性(本体文本,无日期)。

资源描述框架

资源描述框架是一种图形数据模式,用于以三元组的形式描述信息的语义或含义,三元组基于实体属性值(EAV)模型,即资源、属性和属性值(主语、谓语、宾语)的组合,形成用于表示不同资源之间复杂关系的语句(Wu et al .,2014)。这意味着 RDF 让我们有机会通过基于一组规则发现关于数据的新事实来从数据中进行推断,并且由于 RDF 的语义性质,我们不需要存储显式的关系,这意味着 RDF 可以从现有的三元组中生成新的事实。

在表 1“Muizz 研究机器学习工程”中,Muizz 是主语,Studies 是谓语,机器学习是宾语。与示例中的 RDBMS 相比,它旨在通过预先创建的连接向计算机应用程序提供可理解的信息。

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

作者图片

图 1 中的 RDF 模式是与 rdf:type 数据科学相关的一切,我们看到指向数据科学的实体是数据科学下的一个主题,我们看到项目管理虽然与数据科学有相似的特征,因为他们都学习项目管理课程,但他们不是数据科学 rdf:type 的一部分,因此也不是数据科学家。这使得查看实体之间的连接变得容易,而不必创建复杂的连接,因为我们知道任何指向数据科学的实体都是该类的一部分。RDF 通过支持现有标准和本体重用的按作者的统一图像结构提供互操作性。他们使用跨不同系统的独特标准,通过使不同的代理、服务和应用程序能够共享知识和情报来促进数据集成和发布(Noy et al .,2005)。

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

作者图片

本体

在计算机科学中,本体是我们如何正式创建命名和定义类别、属性和话语域之间关系的约定(“本体(信息科学)”,2021)。本体论不同于分类学,分类学是一组受控的词汇表,用于使相关信息的查找、管理和呈现变得更容易——它们表达了一个类别内的层次关系(SCHWEIZER,无日期)。

本体是一种知识库,帮助建立人、地点和事物之间的关系,即类、实体和属性,使用户能够以各种方式将多个概念与其他概念联系起来。本体表示允许知识的语义建模,这意味着它为数据和它们之间的关系添加了基本的意义,并用于形成人工智能(AI)应用程序中的知识库(SCHWEIZER,无日期)。

知识图可以被描述为一个非常大的本体,具有额外的功能,如数据收集、提取、整合来自外部来源的数据,扩展了基于知识的系统和推理引擎(Ehrlinger 和 W o,2016)。诸如网络本体语言(OWL)之类的语言用于表达本体,它们被设计成通过指定对象类和关系属性以及分类法(本体文本,无日期)来表示关于对象和它们之间的关系的广泛知识。

知识图表的可用性

我们将探索知识图表在分析和商业智能中的应用。电信是关于连接的——在人、卫星或计算机之间交换信息,这使得知识图成为建模、存储和查询各种电信数据的完美候选。电信系统具有结合了各种复杂网络结构和系统的体系结构,它们提供各种各样的产品供应和捆绑,并在高度竞争的环境中高度投资于客户满意度和流失率,实施知识图不仅提供了监控网络系统本身的有效手段,而且使企业能够更加敏捷地处理他们的客户需求和要求。

考虑一家拥有数百万客户、代理和合作伙伴的大型电信公司。他们使用监控系统来监控客户使用情况、关键绩效指标、应用程序运行以及报告和事件通知的生成(SLAC,2021)。此类组织通常会有分析问题,例如:

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

作者图片

知识图降低了传统数据库中使用的一些昂贵连接的成本,因为它需要较少的资源来回答分析问题。在传统的商业智能平台中,寻找不同关系数据库之间的连接需要耗时的数据建模和查询操作。随着每一个新的业务问题的出现,我们将需要一个新的数据集和模式,这不是一个智能和知识的可持续方法(Clark,2020)。实施客户智能知识图,重点关注与客户最相关的实体,如其用户中最常见的实体:捆绑包类型、投诉、数据使用和订阅率,将为企业带来竞争优势。专注于那些最有可能提供最佳和令人愉快的用户体验的领域将有助于提高此类组织的分析和智能(Kempe,2014)。

真实世界知识图示例:微软学术图

Microsoft academic graph 是学术信息和数据的知识图实现,它收集了诸如人员、出版物、研究领域、会议和位置等实体。它提供了研究人员和与他们相关的研究之间的联系,这可能很难确定(Noy 等人,2019 年)。

Microsoft Academic Knowledge Graph(MAKG)是一个大型 RDF 数据集,包含超过 80 亿个关于科学出版物和相关实体(如作者、机构、期刊和研究领域)的三元组信息。MAKG 使用在开放数据共享归属许可(ODC-By)下许可的数据。通过使用 RDF 转储文件,这种知识图能够将大量的学术出版物和数据汇集到网络上,这些数据来源于与 URIs 相链接的开放数据云,该开放数据云能够工作并连接到多个数据源(Farber,2006)。Microsoft academic graph 以通过识别表示实体或联系的语义对象的词汇结构从文本中获取知识为中心。MAKG 使用一种称为概念的分层实体类型来表示文档的语义内容,这是一种定义作者和从属关系等实体的抽象方法,因此没有定义它们的具体方法(Kuansan 等人,2019)。

参考文献

[1]克拉克,K. (2020)什么是知识图?。可在以下网址查阅:https://www . stardog . com/blog/what-is-a-knowledge-graph/(访问日期:2021 年 5 月 11 日)。

[2] Ehrlinger,L .和 W . o . W .,《走向知识图的定义》语义学(2016)。

[3] Farber,M. (2006)微软学术知识图:具有 80 亿三元学术数据的链接数据源。德国卡尔斯鲁厄理工学院 AIFB 学院。

[4]C . Feilmayr 和 W . o . W .,“对应用于商业数据知识工程的本体论及其成功因素的分析”语义学(2016)。

[5] Kempe,S. (2014)为什么您的企业需要客户数据知识图?。可从以下网址获得:https://www . data versity . net/business-needs-customer-data-knowledge-graph/(访问日期:2021 年 5 月 11 日)。

[6]关山,w .,智宏,s .,池源,h .,杰汉,w .,达林,e .,小宇,d .,接君,q .,安舒尔,k .,阿尔文,c .,和理查德,R.(2019)“微软科学学学术服务的生物学家观点”,大数据前沿杂志,(2),第 45 页。可在:https://www . frontiersin . org/article/10.3389/fdata . 2019 . 2020015(访问日期:2021 年 5 月 11 日)。

[7] Noy,n .,Gao,Y .,Jain,A .,Narayanan,A .,Patterson,A,和 Taylor,J .(2019)行业规模知识图表:经验和挑战。可查阅:https://cacm . ACM . org/magazines/2019/8/238342-industry-scale-knowledge-graphs/(查阅时间:2021 年 5 月 10 日)。

[8]诺伊,麦克吉尼斯,和海斯,P.J. (2005)“使用 RDF 和 OWL 的语义集成互操作性”,W3C 期刊。可在:【https://www.w3.org/2001/sw/BestPractices/OEP/SemInt/ (访问时间:2021 年 5 月 11 日)。

[9]《本体论》(2021)。维基百科。在 https://en.wikipedia.org/wiki/Ontology.可用(访问时间:2021 年 5 月 11 日)。

[10]《本体论(信息科学)》(2021)。维基百科。可在https://en . Wikipedia .org/wiki/Ontology _(information _ science)获取。(访问日期:2021 年 5 月 11 日)。

[11] Ontotext(无日期)可在以下网址查阅:https://www . onto text . com/knowledge hub/fundamentals/what is-a-knowledge-graph/(查阅日期:2021 年 5 月 11 日)。

[12] Ontotext(无日期)可在以下网址查阅:https://www . onto text . com/knowledge hub/fundamentals/whatare-ontologies/(查阅日期:2021 年 5 月 11 日)。(正文,无日期)

[13] Needham,m .和 Hodler,E. A. (2019)图形算法:O’Reilly Media,Inc .

[14] Ristoski,p .和 Paulheim,H.(2016)“数据挖掘和知识发现中的语义网:一个全面的调查,Web 语义学杂志”,Web 语义学杂志,4(2),第 1–22 页。可用时间:https://doi.org/10.1016/j.websem.2016.01.001.(访问时间:2021 年 5 月 11 日)。

[15] SCHWEIZER,c .(无日期)分类学和本体论有什么区别?这是一个复杂的问题。可从以下网址获得:https://www . earley . com/blog/what-difference-between taxonomy-and-ontology-it-matter-complexity(访问日期:2021 年 5 月 11 日)。

[16]《语义网络》(2021)。维基百科。可在https://en.wikipedia.org/wiki/语义网获得。(访问日期:2021 年 5 月 11 日)。

[17] SLAC 国家加速器实验室(2021 年)可在:https://www.slac.stanford.edu/xorg/nmtf/nmtf-tools.html获得(访问日期:2021 年 5 月 11 日)。

[18] Singhal,A. (2012)介绍知识图:事物,而不是字符串。可在:https://blog . Google/products/search/introducing-knowledge-graph-things-not/(访问时间:2021 年 5 月 11 日)。

[19] Stanford CS 520(无日期)可在以下网址查阅:【https://web.stanford.edu/class/cs520/2020/】T4notes/What _ Are _ Some _ High _ Value _ Use _ Cases _ Of _ Knowledge _ graphs . html(访问日期:2021 年 5 月 11 日)。

[20] Wu,b .,Zhou,y .,Yuan,p .,Jin,h .和 O’Hara,j .(2014)“SEM Store:一个语义保持的分布式 RDF 三元组存储。”,载于第 23 届 ACM 信息和知识管理国际会议(CIKM '14)的会议录。美国纽约州纽约市计算机械协会,网址:https://doi . org/10.1145/2661829.2661876(访问日期:2021 年 5 月 11 日)。

面向深度学习的线性代数导论

原文:https://towardsdatascience.com/an-introduction-to-linear-algebra-for-deep-learning-c1b72de78543?source=collection_archive---------20-----------------------

深度学习都是关于数据的,我们需要表示数据并对其进行操作,以训练我们的深度网络。

线性代数构成了深度学习的基础。更好地掌握该领域的基础知识将有助于你对深度学习算法中数据的处理方式有更好的直觉。

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

https://en.wikipedia.org/wiki/Linear_algebra

深度学习都是关于数据的,我们需要表示数据并对其进行操作,以训练我们的深度网络。数据必须用矩阵形式表示。更好地理解矩阵运算和矩阵代数将有助于你对深度学习算法如何工作有更好的直觉。这就是为什么线性代数可能是深度学习中最重要的数学分支。在这篇文章中,我将试着澄清这个领域的基本话题。

我们所说的数据是什么意思?

让我们考虑一个简单的例子,其中你有每所房子的属性,你的目标是尝试并预测给定房子的价格。这些属性也称为解释变量,我们将利用它们来训练我们的模型。为了简单起见,我们只考虑三个属性:卧室数量、房子大小、位置。现在,每座房子将被表示为一个包含三个值的向量。

【X _ number of bedrooms,X_size,X _ location】
但是等等,这里我们只考虑单套房子。我们通常有由数千所房子组成的数据集,每所房子被称为一个数据点。至此,我们要做的就是把房子的向量叠加起来,形成一个矩阵。每行代表一所房子,每列代表一个解释变量。太好了,我们现在已经有了设计矩阵!

x₁₁:第一栋房子的房间数
x₂₁:第一栋房子的大小
x₃₁:第一栋房子的位置

简单线性回归

这里,我们将尝试建立一个简单的模型来预测给定房屋的价格。让我们来看看这三个解释变量的线性组合。我的意思是,这可能是你能得到的最简单的模型;简单的线性回归。现在让我们正式地看看这个:

y =xβ+ϵ

如你所见,我们有三个权重,每一个都乘以 EV。你可以认为它们是决定价格的每个变量的重要性。简单的想一想,如果房子大,位置好,价格肯定高。因此,所有电动汽车都与价格正相关。通过查看最高权重,我们可以确定最相关的变量,这将为我们提供模型对每个变量的敏感性的良好感觉。现在,让我们用矩阵符号重写一切。

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

作者图片

如您所见,以矩阵形式编写所有内容可以更简洁地描述正在发生的事情。但是我们如何乘矩阵呢?别担心。这是令人震惊的简单和直观。

乘法矩阵

首先让我们直观地思考一下。我们只想将每个 EV 乘以其相应权重。我们有 n 个房屋/示例,所以从逻辑上讲,我们应该将设计矩阵中的每一行乘以列向量 w。为了简洁起见,我们将考虑一个简单的示例,其中有两个示例和三个解释变量:

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

作者图片

矩阵和列向量的乘法将产生另一个列向量。

现在让我们考虑两个矩阵相乘。不要忘记,要乘矩阵,第一个矩阵的列数应该与第二个矩阵的行数相同。结果矩阵的大小可以很容易地计算出来:如果 A=[aij]是 m×n 矩阵,B=[bij]是 n×k 矩阵,则 AB 的乘积是 m×k 矩阵。我有一些好消息;你已经知道如何乘两个矩阵。这个过程与矩阵乘以向量是一样的,但是这一次,假设您有不止一个列向量。然后,将得到的列向量并排放到一个矩阵中。

PyTorch 和 Tensors

在这一节中,我们将研究 PyTorch 张量,并使用它们进行矩阵乘法。PyTorch 是著名的深度学习库,张量起着至关重要的作用。你可以把张量想象成更高维的矩阵,PyTorch 让我们可以高效地对它们进行数值运算。现在你可能已经猜到了,矩阵和张量构成了深度学习的基础。
让我们看一个简单的例子,我们初始化两个矩阵并对它们执行矩阵运算:

*A = torch.tensor([[1,2,3] , [2,3,4]])**B = torch.tensor([[3,1] , [4,2] , [2,3]])**torch.matmul(A,B)*

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

矩阵乘法的输出

神经网络。

考虑到目前为止我们所学的一切,我们可以开始应用矩阵运算来表示神经网络。在这里,我将假设你知道神经网络的基础知识。因此,首先,让我们看看我们的模型架构在单一隐藏层的情况下会是什么样的。

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

http://alexlenail.me/NN-SVG/index.html

从上图可以看出,我们有输入神经元,它们的表现方式和我们的房子数据一样。接下来,我们有四个神经元的隐藏层。每个神经元将是通过非线性函数的输入神经元的线性组合。在这个例子中,我们将考虑一个广泛使用且简单易懂的激活函数。整流线性单元是一个激活函数,如果输入值为负,则输出零,否则输出输入。数学上,ReLU 函数为 f(x)=max(0,x) 。为了表示隐藏层中的四个神经元,我们将把我们的设计矩阵乘以具有四列三行的权重矩阵;行数应等于输入的维数,列数应等于后续层中目标神经元的数量。

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

作者图片

剩下的就是最终的输出层了。输出神经元也是前一层神经元的线性组合。因为我们正在处理一个回归问题,其中我们想要一个没有边界的值,所以我们不需要最后一层的激活函数。这一层的矩阵乘法要容易得多,因为我们将只采用隐藏层的线性组合。这应该类似于线性回归,事实上,它确实是线性回归。整个模型可以表示如下:

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

摘要

所有的深度学习操作都用矩阵计算来表示。学习数据如何用矩阵和张量表示的基础知识,将会让你对事情的本质有更好的直觉。我建议任何人通过观看 3Blue1Brown 关于线性代数本质的系列文章来学习更多的线性代数知识。当然,人们永远不会忘记吉尔伯特·斯特朗教授的精彩讲座。学习愉快,愿母体与你同在!

参考

https://en.wikipedia.org/wiki/Linear_algebra https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/

朱莉娅中的线性代数导论

原文:https://towardsdatascience.com/an-introduction-to-linear-algebra-in-julia-1d6f8764c910?source=collection_archive---------19-----------------------

Julia 中线性代数包的快速概述。

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

(src =https://pixabay.com/images/id-327488/

介绍

OJulia 编程语言的一个伟大之处是语言中强大的数学功能。这种语言有一些非常棒的特性,在这方面使它有别于类似的语言。线性代数对于数据科学极其重要。Julia 的目标是科学计算和数值分析,因此可以假设 Julia 非常擅长线性代数。这当然是事实,然而,Julia 中的线性代数被构建在语言的核心中,这在编程中并不常见。除了 Julia 和其他类似编程语言之间的差异之外,代数表达式和语法与许多其他选项也有很大不同。

每当我考虑有人想使用 Julia 语言进行数据科学研究时,我总是会想到 Python 用户。话虽如此,Python 和 Julia 还是有很多区别的。其中一些只是方法调用上的细微差别,其他的则是相当戏剧性的,改变了我们在语言中处理数字的方式。考虑到这一点,我想在本文中为那些对编程和线性代数不熟悉,但对 Julia 语言不熟悉的人创建一个基础速成班。

笔记本

阵列和矩阵

在我们开始在 Julia 中创建代数表达式之前,我们首先需要回顾一下我们在做线性代数时可能会看到的不同类型以及它们之间的区别。这个类型列表中的第一个是向量。Julia 中的 vector 与 Python 中的 list 概念完全相同,我们可以使用[]元素语法创建一个 vector:

one_D = [5, 5, 7, 2, 3]

这将创建一个一维数组。为了创建一个多维数组,我们改为像 Lisp 那样用空格分隔元素,然后用分号分隔行。

multi_D = [5 10 2 4; 5 8 10 3]

这将创建一个新的 2 x 4 矩阵。我还做了另一个同样尺寸的,用来执行一些基本的算术运算:

multi_D2 = [10 7 4 3; 9 5 3 10]
one_D = [5, 5, 7, 2, 3]

让我们也考虑一下这些新变量的类型。多维数组是矩阵类型的,一维数组是向量类型的。然而,这两种类型都是抽象数组类型的子类型,如下图所示:

println("An array is a sub-type of an abstract array:\n")
println("Type: ", typeof(one_D))
println(typeof(one_D2) <: AbstractArray)
println("\n==============================\n")
println("Is a matrix an abstract array?\n")
println("Type: ", typeof(multi_D2))
println(typeof(multi_D) <: AbstractArray)

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

(图片由作者提供)

这意味着尽管它们是不同的类型,但它们通常会被分派给相同的方法。这意味着可以使用一个到另一个的许多方法。举个例子,

println(length(multi_D))8

让我们也考虑一下这些数组的形状。我们可以使用 shape()方法来重塑我们的数组。我们还可以使用 size()方法来检查数组的大小:

size(one_D)
size(multi_D)

例如,我将复制并重塑我们的多维数组:

copmd = copy(multi_D)
copmd = reshape(copmd, (4, 2))

尽管该方法通常不会对类型进行变异,也没有变异函数(带有!,)我还是复制这个数据结构以防万一。没有什么比丢失数据更糟糕的了,尤其是如果它只是请求的数据,而不是本地存储的数据。让我们来看看两者的区别:

println("We went from this")
display(multi_D)
println("to this:")
display(copmd)

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

作者图片

发电机

我们接下来要看的是发电机。生成器是线性代数中非常重要的一部分,尤其是在机器学习应用中。Julia 拥有你能想到的所有生成器,比如零,都是受支持的。然而,在 Julia 中有一些相当独特的生成器怪癖,其中一些是最近才出现的。不赞成使用 eye 方法,而赞成使用 UniformScaling 运算符。只需在整数后加一个 I 就可以使用这个运算符,这是一种非常朱利安式的方法:

5I

让我们来看看零的例子:

zeros((5, 10))

单位矩阵和零可能是两种最常见的生成器,但是您可以随意查看完整的文档来了解其他各种生成器:

操作

现在我们已经完全熟悉了处理和创建矩阵的一些基本方法,让我们来看看一些基本操作。我们将从可以用来执行一些运算的基本操作符开始。第一个是逐元素乘法。这将把每个元素乘以另一个数组中相应的元素,这个运算的运算符是。*.

multi_D .* multi_D2

对于 Julia 中的所有数学位操作符,也有等价的元素操作符。

multi_D .+ multi_D2
multi_D .- multi_D2
multi_D ./ multi_D2

由于这些是基于元素的,所以它们也可以用于一维数组:

one_D .* one_D2

现在我们已经看了所有的元素操作符,让我们考虑一些处理矩阵的基函数。我首先要介绍的是 transpose 方法,它将执行与我们在前面的示例中所做的完全相同的整形操作:

transpose(multi_D)

如您所料,还有 dot():

dot(multi_D, multi_D2)

还有通过 cat、vcat、hcat …方法的串联:

hcat(multi_D, multi_D2)

最后,我们可以使用 cumsum()方法进行累积求和。我们需要为这一呼叫提供 dims 关键字参数:

cumsum(multi_D, dims = 5)

当然,还有很多这方面的功能可以从 Julia 的基础上使用。此外,LinearAlgebra.jl 包中还有更多可以使用的内容。但是,浏览它们可能需要相当长的时间,所以我将提供文档链接:

https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/

结论

感谢您阅读我在 Julia 中的线性代数入门。虽然与许多其他语言相比,它肯定是独一无二的,但它肯定适合这份工作。我认为,人们可能会发现,朱莉娅处理这类任务的方式实际上是相当令人印象深刻的!尽管这仅仅是对该语言能力的一个简要介绍,但是您还可以做更多的事情,尤其是使用 LinearAlgebra.jl。希望这篇文章能够很好地介绍整个伟大的数组数学世界!

线性回归导论

原文:https://towardsdatascience.com/an-introduction-to-linear-regression-9cbb64b52d23?source=collection_archive---------21-----------------------

回归主要用于预测或解释数字数据

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

回归|照片由王昊拍摄

这篇文章是上一篇讨论贝叶斯统计的系列文章的继续。

波动性是股票市场固有的,但也许“迷因股票”的兴起超出了传统的理解。这篇文章不是关于这种“股票”——这是一种讽刺性的股票拼写错误,概括了千禧一代中新的投资时代精神(广义而言)。相反,我在思考乘坐$GME 过山车的神话般的感觉,这是应用线性回归的一个及时的例子;人们可以对给定的股票应用线性回归模型来预测其未来的价格。本文和后续文章将详细阐述线性回归的概念和几种相关的方法,模型分析的相关误差以及残差。

但是什么是回归呢?回归的目标是生成一个模型,该模型代表某些观察数据的最佳拟合。一个更好、更具体的说法是,回归被用来预测或解释数字数据**——比我聪明的人几十年来一直在将这种模型应用于金融数据(如$GME)。但是,如果你想预测某人是否会生病,或者某人是否会穿黑色衣服,或者某项资产是否会升值或贬值,这些都不是回归,而是分类。回归是数字数据的解释模型或预测模型。在大多数情况下,我们将处理可以描述一个函数的函数,这意味着一个输出,我们可以描述一个或多个输入变量和一个输出变量之间的关系(对于线性回归)。**

历史

回归基于最小二乘法或最小均方误差法。围绕最小二乘或平均误差的想法已经发展了近三个世纪。已知的第一份“平均法”出版物是德国天文学家托拜厄斯·迈耶在 1750 年发表的。皮埃尔·西蒙·拉普拉斯在 1788 年发表了一个类似的方法。最小二乘法的第一个出版物是由法国数学家阿德里安-玛丽·勒让德在 1805 年发表的。

撇开历史不谈,德国物理学家和数学家卡尔·弗里德里希·高斯很可能早在 1795 年就发展了最小二乘法,但他直到 1809 年才发表了这一方法。勒让德坚决反对任何认为高斯在 1805 年出版日期之前就已经使用这种方法的观点。

查尔斯·达尔文的表兄弗朗西斯·高尔顿在 1886 年创造了回归这个术语。高尔顿感兴趣的是确定包括人类在内的动植物的哪些特征可以说是遗传的。虽然高尔顿发明了一种现代形式的回归,但却是卡尔·皮尔逊将回归和多元回归置于坚实的数学基础之上。他在 UCL 创建了世界上第一个大学统计系。皮尔逊 1898 年的出版物提出了我们今天所理解的回归方法。

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

卡尔·皮尔逊|来源维基百科

自皮尔森的关键论文发表以来的一个世纪里,许多其他人扩展了回归理论。值得注意的是,约瑟夫·伯克森在 1944 年发表了逻辑回归方法,这是最早的分类算法之一。近年来,对机器学习(ML)的兴趣激增,导致回归模型的数量和类型迅速增加。

回归的类型

有各种类型的回归,包括许多非线性的,与我要讲的内容完全无关的回归;它们用于预测数字结果,但使用不同的底层技术。一些常见的回归类型有:

  • 线性—最常见
  • 逻辑—二元结果(成功/失败)
  • 多项式-当直线不是最佳拟合时
  • 阶梯式脊线和套索(常见于 ML)

最小二乘线性回归

最小二乘回归是我今天要阐述的类型。注意,大多数人会把这和线性回归混为一谈。现在这两者不一定是相同的,但只是警告你,大多数人会把这两者混为一谈。线性回归仅仅意味着你将使用一个线性参数集合来做一些事情。还有各种其他方法来进行回归,这些方法不会使用这些参数的线性集合;其中每个参数与一个变量相关联。

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

线性回归|来源维基百科

我们有线性回归,它最常用于描述如上图所示的直线,但对于逻辑和多项式也是如此。并且可能也适用于阶梯式脊和套索的大多数情况。所以有两种关于线性的定义——这将会令人困惑。

线性的一个定义是穿过数据的线。换句话说,一条线适合你的数据。线性的另一个定义是当你有一个参数的线性集合,每个参数与一个变量相关联。换句话说:基于解释变量的相关(目标)值的线性可预测行为。****

这是一种奇特的说法:

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

参数的线性集合

在上面的示例中,参数 a、b、c 与输入变量 x1、x2 和 x3 具有线性关联,x0 是偏移量。当我说变量时,那意味着它们是回归的输入。

最小二乘线性回归是借助线性代数和一些微积分推导出来的。我相信理解线性模型是理解一大堆统计和 ML 模型行为的基础。事实上,我相信大约一半的机器学习模型会使用这种形式的线性回归,至少在它们的起点。

型号选择:11 点

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

模型 1 |一阶线性回归,最佳拟合的简单直线

对一些数据进行回归的一个非常合理且可接受的方法(比如上面的例子)就是盯着它,然后在上面画线。你想称之为倒退,那很好。我怀疑它还能被称为线性回归,但它肯定是一个回归。这是一个非常有效的方法。现在我们将讨论回归,我们可以展示从数据点到最佳拟合线的数学规则。

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

数学上定义上面的线

前面我定义了线性回归,现在我将展示一个二次方程的例子,它仍然是我们定义的线性方程:

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

模型 2 |二阶二次回归

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

等效地:

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

我们要做的或者我们能做的是,我们可以说,“好的”,y 不是接受一个变量,即 x1 的函数的输出,而是接受两个变量的函数的输出;第一个是 x1,第二个是 x1。事实上,我们可以称 x1 乘以 x1 为变量 x2。

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

通过将 x1 重新标记为 x2,我们恢复了线性回归

我们可以用非直线来拟合线性方程!从这里延伸,我们基本上可以得到任何多项式。下图具有与二次示例相同的数据,但最佳拟合线不同。

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

模型 3 |使用与二次示例相同的数据的高阶回归

唯一真正改变的是我们对他们的划分。在这两种情况下,我们都在使用我们所谓的线性关系——从事回归业务的人(数学家/物理学家)这样称呼它。他们非常清楚这不是一条直线。但是他们声称在更高维度中,这实际上是直的;称之为超平面而非直线。

超平面在那些维度上不是弯曲的。尺寸可能是:

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

也许需要一个四阶。

这是毗邻拓扑学的数学领域,与粒子物理学家和爱因斯坦的广义相对论非常相关,总的来说(哈哈)!物理学家会说棒球击球的轨迹是一条直线。在高中,我们学习了这条路径是一条抛物线但是在弯曲的时空中,路径是一条直线测地线(测地线是弯曲拓扑景观中的一条“直”线)。你可能熟悉的测地线包括地球上的纬线。

所以这里要问的相关问题是,这三个过程模型中哪一个是正确的?一阶线性的?二阶线性的那个?四阶线性的那个?好吧,更好的问题是这三个中哪一个更有用,这自然需要我们知道模型的用途。

一般规则是,这是一个非常重要的规则,模型越简单,它就越有用。记住这个启发!稍后我会写正则化,这只是一种使模型更简单的方法。当你简化你的线性模型(任何模型,但这里的上下文是线性模型)时,它不仅更容易理解,更重要的是,它们工作得更好!

没有完美的数据,误差永远存在。另一个需要记住的有用的启发是“所有的模型都是错误的,但有些是有用的!”事实是,上面的一些数据可能只是错误。上面的 11 个点是训练数据。当我们观察新数据时,可能会发现,或者可能会发现,它们不会遵循有趣的曲线,即我们的高阶模型。“超平面”模型很可能就是我们所说的过度拟合的一个例子。并且过拟合的逆过程或撤销过拟合的过程被称为正则化。因此,概率的平衡表明我们的第一个模型是进行进一步分析的最有用的模型。

术语

  • 反应(因变量):主要感兴趣的变量,我们试图预测或解释的变量。就像上面 Jupyter 笔记本中的例子一样,答案在等号的左边——“y”依赖于等号右边的值
  • 解释性(独立)变量:试图解释反应变量的观察结果的变量。在一个等式中,如果你改变“y”(因变量),你不会改变右边的“x”变量,因此它们与“y”的变化无关

线性模型中有两种类型的参数:

  • ****y 轴截距,以上称为偏移量
  • 斜率,上升超过游程,y 的变化除以 x 的变化。如果有多个输入,那么我们有多个斜率(我们称之为部分斜率)

作为题外话,但是我想提一下,数据通常不是线性的,因此数据需要被转换以应用回归分析。一个重要的此类转换是在处理非线性数据时进行对数转换。

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

国家面积与人口|来源维基百科

这个原始数据不是线性的,但是,我们可以通过应用对数变化使它看起来是线性的,这里它将是以 10 为底的对数:

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

同样的数据,转换后|来源维基百科

进行对数转换的原因是因为现在你的错误可能会始终一致,这很可能会更好。可以用指数线拟合数据,进行非参数线拟合,但这样误差就不一致了,它们的规模也不一样,这使得下游分析更加困难。

错误术语

在解释最小二乘回归之前,我们需要了解误差是什么:

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

ε表示误差,I 表示它是哪个数据点(第一、第二等。)

E(误差)是每个点和回归线之间的距离。我们选择每个点和直线之间的平方差和最小的直线。

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

回归线和每个点的误差

上面的线非常适合上面的五个点,但它并不完美。我们想知道的是因变量的误差有多大。添加ε项是为了弥合我们的预测值(y_hat)和实际观察值之间的差距,预测值是红点跟随绿线并与回归线相交的位置。误差是预测变量和观察变量之间的差异。这将在下面的代码分析中进一步解释。

利用一点微积分和线性代数,我们试图找到所有可能的回归线的误差总和的最小值。这个总和就是最佳拟合线。这是非常费力的计算。相反,如果你说你想最小化这个值的平方,结果是有很好的解析解。这就是为什么我们做最小二乘拟合。所以我们并不试图最小化这些虚线,或者这些虚线的总和,而是试图最小化它们的平方和。那么平方和是多少呢?

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

回归线误差平方和的可视化

现在,平方相加。这些正方形的最小总面积就是我们认为的最佳拟合线。除了漂亮的解析解之外,这种方法的优点还在于它惩罚了较大的误差——惩罚了异常值。在上例中,假设最大误差比最小误差大 6 倍。在最小二乘回归中,误差是最小平方的 36(6×6)倍。

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

显式解决方案存在使用微积分

我们让计算机求解上面的方程,通过摆弄斜率和截距来找到最小二乘方的和。从实际(观察)值中减去预测(理论)值并求和。

Python 示例:回归模型

下面的代码可以在 Jupyter 笔记本中运行,以帮助获得最小二乘线性回归的感觉和可视化。

注意:我们使用合成数据,因为我们对发生的事情有很大的控制权。合成数据并不总是最好的。

# relevant imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline# synthetic data points between 0 and 10 with standard deviation of #the errors of 1 (std deviation of y should be around 3-the square #root of 10)
n_points = 80
x_start, x_end = 0, 10
y_start, y_end = 0, 10
y_sd = 1 # std deviation of the errors# data columns, the y values are the errors added to the x values
x_data = np.linspace(x_start, x_end, n_points)
y_error = np.random.normal(loc=0, scale=y_sd, size=n_points)
y_data = np.linspace(y_start, y_end, n_points) + y_error# create dataframe
syn_data = pd.DataFrame({‘x’:x_data, ‘y’:y_data})syn_data.head()

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

我们 80 个合成数据点的前五行

现在让我们将数据可视化—注意数据的强线性。记住这个练习的目的是回答这个问题“如果我们知道 X 的值,我们能预测 Y 的值吗?”我们相信,通过画出最佳拟合线,如果有人给我们一个 X,比如说一个我们还没有的 X,那么我们就能算出 Y 值是多少。

plt.plot(syn_data[‘x’], syn_data[‘y’], ‘ko’) # ko = black points
plt.grid(True)
plt.xlabel(‘x’)
plt.ylabel(‘y’)
plt.title(‘x vs y’)
plt.show()

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

我们的合成数据-在大多数情况下,x 值大约是 y 值

建立线性回归模型

按照一个简单的模板,我们可以建立我们的模型。您可能熟悉一个可以做到这一点的常见包:Sci-Kit Learn。sklearn 的一个怪癖是它最适合 NumPy 数组,这正是它所习惯的。以下模板为模型定型和评估重塑和转换数据:

# standard lin reg template# imports
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score# create numpy arrays for the x (independent) and y (dependent) #variables
x = syn_data.x.values.reshape(-1,1)
y = syn_data.y.values.reshape(-1,1)# model initialization
regression_model = LinearRegression()# train the model (fit data)
regression_model.fit(x, y)

y_predicted = regression_model.predict(x)# model evaluation
rmse = mean_squared_error(y, y_predicted)
r2 = r2_score(y, y_predicted)# printing values
print(‘Slope:’ ,regression_model.coef_)
print(‘Intercept:’, regression_model.intercept_)
print(‘Root mean squared error: ‘, rmse)
print(‘R2 score: ‘, r2)# plotting values
plt.scatter(x, y, s=10)
plt.xlabel(‘x’)
plt.ylabel(‘y’)plt.plot(x, y_predicted, color=’r’)
plt.show()

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

这条线很适合数据

当我们评估模型的性能时,下面将更详细地解释统计值。

绘制残差

以下是理解您的回归模型有多好的重要工具——残差图。正在发生的是,对于每个点,观测值和预测值之间的差异被绘制出来。

import seaborn as sns
sns.residplot(x, y)
plt.show()

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

预测 y 值与实际 y 值的差异

残差是误差,我们之前画过了。x 轴是 x 值。y 轴是实际 y 值和预测 y 值之间的差异,即误差。

from sklearn import linear_model
# from sklearn.linear_model import LinearRegression# initialize the model.
linear_model = linear_model.LinearRegression()# define x and y
x_input = syn_data['x'].values.reshape(n_points, 1)
y_output = syn_data['y'].values.reshape(n_points, 1)# fit the model to the existing data with lm.fit(x,y)
linear_model.fit(x_input, y_output)# fit model to make predictions
y_pred = linear_model.predict(x_input)# plot
plt.scatter(x_input, y_output)
plt.plot(x_input, y_pred, linewidth=2)
plt.grid(True)
plt.xlabel('x')
plt.ylabel('y')
plt.title('x vs y')
plt.show()# model parameters
print('Intercept: {0:.5f}'.format(linear_model.intercept_[0]))
print('Slope : {0:.5f}'.format(linear_model.coef_[0][0]))

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

统计模型包

另一个较老且较少使用的 Python 包是 Stats Model sm。下面的代码重复了 Sci-Kit 的学习工作。请注意两个 w/r 在输出显示方式上的细微差异。

注意:统计数据是相同的,但是软件包之间的表示和健壮性是不同的。sklearn 是这几天学习的首选套餐。

import statsmodels.formula.api as sm# ols = ordinary least squares
ols_model = sm.ols(formula = ‘y ~ x’, data=syn_data)# fit the model
results = ols_model.fit()print(‘Intercept: {0:.5f}’.format(results.params.Intercept))
print(‘Slope : {0:.5f}’.format(results.params.x))

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

# add predicted to dataframe
syn_data[‘predicted’] = y_pred# add residuals to dataframe
syn_data[‘resids’] = y_output — y_pred# verify data is as expected
syn_data.head()

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

# coefficients of line of best fit
m = linear_model.coef_[0]
b = linear_model.intercept_
print(‘m = {}’.format(m[0]))
print(‘b = {}’.format(b[0]))

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

解释参数

知道如何解释参数非常重要(由于创建数据时的随机种子,您的结果会有所不同)。

  • y 截距(b) :当 x 为零时,y 为-0.13…
  • slope (m) :当我们将 x 增加 1 时,我们预计 y 将增加 1.03…

很简单,我敢打赌大多数读者对这些基础知识都有很强的掌握,但重要的是要让每个人耳目一新,并建立在一个坚实而通用的基础上。

模型汇总统计

这就是 SM 的闪光点——漂亮的成果总结。目前,本地显示的数据比我们理解最小二乘回归所需的数据要多得多。残差也在 OLS 报告后绘制。

import statsmodels.formula.api as sm
import seaborn as snsols_model = sm.ols(formula = ‘y ~ x’, data=syn_data)results = ols_model.fit()# print slope (m) and y-intercept (b)
print(‘Intercept, Slope : {}’.format(results.params))print(‘\nSSE, SST, SSR, and RMSE:’)
mean_y = np.mean(y_output)
sst = np.sum((y_output — mean_y)**2)
ssr = np.sum((y_pred — y_output)**2)
sse = np.sum((y_pred — mean_y)**2)print(‘Sum of Squares Explained (SSE): {}’.format(sse))
print(‘Total Sum of Squares (SST): {}’.format(sst))
print(‘Sum of Squared Residuals (SSR): {}’.format(ssr))
print(‘RMSE: {}’.format(np.sqrt(results.mse_resid)))# print linear regression statistics
print(‘\n’, results.summary())

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

# plot histogram of the residuals
sns.distplot(results.resid, hist=True)
plt.xlabel(‘Residual’)
plt.ylabel(‘Frequency’)
plt.title(‘Residual Histogram’)
plt.show()

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

关于上面绘制的残差,首先要注意的是,它们大致是正态的。这是可以预料的,因为合成数据就是这样产生的,所以这有点像自我实现的预言。y 数据是从添加到随机生成的 x 数据的误差中创建的,y 数据具有+/-1 的标准偏差。

回归模型的评估

现在我们已经建立了一个回归模型,我们可以定量地评估我们的回归模型的性能。回归模型的评估是基于误差的测量。

如果我们想知道我们做得有多好,我们必须考虑什么是好的基准。一个常见的简单基准是看看我们是否能比仅仅预测目标变量的均值更好。****

我们定义了以下术语:

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

现在,我们需要定义以下误差指标:

  • 残差平方和(SSR) :这是最小二乘法能够用最佳拟合线最小化的值。回归的目标是最小化这个量。

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

回归的目标——最小化它

  • 总平方和(SST) :这是对目标均值预测有多差的度量

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

  • 解释的平方和(SSE) :这是(SST — SSR)的逐点差平方和。你也可以认为这是一种衡量,我们对变异的解释比均值好多少

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

请注意 SST = SSR + SSE

  • **只有在对训练数据进行回归时,该公式才成立!如果你在测试数据上这么做,这个公式就不再成立了。这个公式适用于你的决定系数(COD)与你的皮尔逊相关系数 R 相同的情况。**他们不一样!它们有时可能是相同的,但仅在对训练数据进行最小二乘拟合的情况下,而不是在使用测试数据或不使用非最小二乘拟合的情况下。SSR 可以变得比 SST 大,导致 R 为负!

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

线性回归模型误差的可视化

我们现在可以谈论均方根误差(RMSE)** 。我们这样做的原因是“平方和误差”(也称为均方误差)的单位是 x 。要将误差转换为单位 x ,我们需要均方误差的平方根或残差平方和的平方根。这是 RMSE:**

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

记住回归的目标是最小化残差, SSR 。具体来说,我们希望用我们的模型尽可能解释原始数据中的最大方差。我们可以用决定系数(COD)来量化这个想法,也称为 R :

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

仅使用最小二乘拟合和测量训练数据进行校正

只要

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

****R 是模型解释的原始数据方差的分数。一个完美解释数据的模型,R = 1。一个完全不能解释数据的模型 R = 0。这意味着训练数据分布得如此均匀,以至于您无法通过它绘制任何最佳拟合线。你可以在数据中画一条线,但这条线不会是最佳拟合线。

然而,R 并不完美:

  • r 不针对自由度进行偏差调整
  • 更重要的是,模型参数的数量没有调整。随着模型参数数量的增加,SSR 一般会降低。没有调整,你会得到一个错误的模型性能

我们通过定义调整后的 R (R adj)** 来解决这个问题:**

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

在哪里

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

这使得 R adj 为:

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

在哪里

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

可以重写:

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

现在,我们有了一个随着更多参数的增加而减少的指标,奖励简单性——记住前面的内容,简单的模型比复杂的模型更受欢迎。

结论

到目前为止,我们已经介绍了许多回归概念:

  • 直线的单一回归方程为

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

  • 使用 Python 模型对象linear_model.LinearRegression()初始化模型
  • 使用fit方法使模型符合数据
  • 使用predict方法计算因变量(y)的分数(预测值)
  • coef拉模型参数——m(斜率)和 b(y 轴截距)——用intercept
  • 残差是 y 输出和 y 预测之间的差值
  • 使用statsmodelsseaborn库获取汇总统计数据并绘制诊断图
  • sklearn优于sm包,它使用起来更简单,也更健壮
  • 什么是残差,为什么我们要画它们

我们用summary方法评估了 OLS 回归结果

  • SSR (残差平方和)是与回归线的误差差(尽量最小化)
  • SST ( 总和的平方和)是目标平均值的差值
  • SSE (解释的平方和)是回归直线到平均值的变化
  • RMSE (均方根误差)是 SSR 的平方根
  • R 是由模型解释的原始数据的方差的分数,想要一个接近 1 的数字
  • SST = SSR + SSE 只适用于你的决定系数(COD)与你的皮尔逊相关系数 R 相同的情况。对于训练数据的最小二乘回归,是的。在这种情况之外,根据测试数据或当 SSR > SST 时,公式不成立

在我的下一篇文章中,我将介绍多元回归用回归模型自举

Linkedin 上找到我

物理学家兼数据科学家——适用于新机遇| SaaS |体育|初创企业|扩大规模

机器学习竞赛简介

原文:https://towardsdatascience.com/an-introduction-to-machine-learning-competitions-133cce76e219?source=collection_archive---------12-----------------------

通过这三个竞争平台进行竞争、练习和赢取

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

Serghei TrofimovUnsplash 拍摄的照片

学习数据科学最重要的一个方面是将你的知识付诸实践。在我看来,数据科学是最好通过实践来学习的东西。

如果你在正规教育或工作经验之外学习数据科学,找到练习你所学技能的地方可能会很棘手。机器学习竞赛为数据科学技术的实际应用提供了一个非常有效的平台。

参加数据科学竞赛可以帮助你学习、赚钱,还可以提供项目组合,帮助你在该领域获得第一份工作。

作为初学者或更高级的从业者参加机器学习竞赛提供了一系列好处,包括:

  • 建立一个可以展示你技能的项目组合。
  • 将你的技能与该领域的其他人进行比较。
  • 利用您的技能解决接近真实世界的数据科学问题。
  • 学习新技能。
  • 潜在的收入,有些奖金高达 20 万美元。

有几个网站举办机器学习比赛。大多数都有类似的格式。这通常包括技能水平范围内的各种比赛的可用性,以及无奖励练习问题和附有经济奖励的比赛。

比赛本身通常会提供一个数据集和要解决的问题,以及一个排行榜,当你提交你的结果时,你会在那里。大多数比赛允许无限的条目,这意味着你可以不断完善你的模型,提高你的分数。

这是一个很好的学习方式,因为排行榜让您了解潜在的模型性能,并且您可以通过反复试验,很好地了解最适合改进模型以解决特定问题的技术和工具。

在本文的剩余部分,我将介绍三个我最喜欢的机器学习竞赛网站。这将包括每个网站的简要说明,谁最适合比赛,以及你可能获得的奖励水平的想法。

卡格尔

最适合: 从初学者到高级修炼者的所有人。

典型头奖: $10 万。

突出特点: 有一个很棒的社区为初学者提供支持。

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

Kaggle 比赛主页。图片作者。

Kaggle 可能是最广为人知的机器学习竞赛网站。它还建立了一个优秀的社区来支持人们学习数据科学。教程、课程、示例内核和一个论坛都提供支持,帮助初学者开始比赛。

Kaggle 竞赛有一些重要的奖励,最高奖金在 10 万美元左右。比赛的复杂程度和所需的技术水平也各不相同。这意味着,无论你是希望将所学付诸实践的初学者,还是希望进一步拓展技能的高级从业者,都有合适的挑战来竞争。

分析 Vidhya

最适合: 初学者。

典型头奖: 学习潜力。

脱颖而出特色: 竞赛涵盖的问题比较全面。

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

分析 Vidhya 竞赛页面。作者图片

Analytics Vidhya 是另一个出色的数据科学社区,也定期举办机器学习竞赛。然而,与 Kaggle 不同的是,大多数比赛纯粹是为了学习,而不是任何经济奖励。这样做的好处是,比赛通常更适合该领域的初学者,并提供了一个很好的机会来与其他也在学习的人对比你的技能。

总有一系列的竞赛,涵盖了数据科学的大多数关键领域,包括自然语言处理、图像识别、一般分类和回归以及预测。

驱动数据

最适合: 中级到高级武者。

***典型头奖:***20 万美元。

脱颖而出特色: 争夺头奖的机会,同时为解决社会问题做出贡献。

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

驱动数据竞赛页面。图片作者。

DrivenData 的目标是众包数据驱动的解决方案来解决一些世界上最大的社会问题。因此,这个网站上的比赛让你能够学习和竞争奖品,同时还有助于解决重要的社会挑战的额外奖励。

这些比赛通常相当具有挑战性,但会吸引一些非常大的经济回报。目前提供的头奖价值 20 万美元。除了这些更难的问题,还有一些初级水平的练习问题。虽然这些通常没有奖金。

在这篇文章中,我已经给出了三个机器学习竞赛网站的描述。然而,还有许多其他地方可以竞争,如 InnocentiveCodalabCrowdANALYTIX 等等。数据科学竞赛提供了一种将您的技能付诸实践的有用方法,也是一个学习的好地方。

如果你是独立学习,这也是了解你的技能水平的一个很好的方法。如果你不像在正规教育中那样受益于同龄人或通过考试,就很难了解你的学习进展如何。参加机器学习比赛并了解自己能够在排行榜上获得多高的名次是实现这种了解的一个绝佳方式。

如果您目前正在学习数据科学,无论技能水平如何,请从今天开始参加竞赛。你越早开始在实践中应用你的技能,你就越早发现你不知道的地方和你需要改进的地方。这是迄今为止最快的学习方法。在你知道之前,你将在排行榜上名列前茅,并赢得那些 Kaggle 奖牌

感谢阅读!

我每月发一份简讯,如果你想加入,请通过此链接注册。期待成为您学习旅程的一部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值