稀土掘金 稀土掘金

TowardsDataScience-博客中文翻译-2016-2018-二百五十五-

TowardsDataScience 博客中文翻译 2016~2018(二百五十五)

原文: TowardsDataScience Blog

协议: CC BY-NC-SA 4.0

使用 Sparklyr 设置种子值

原文: towardsdatascience.com/setting-you…

几个月前,我做了一个关于可重复研究的雄心勃勃的报告。本演示的一部分包括演示如何使用 R 和 Sparklyr 包分析 Spark cluster 上的数据。

当您接受数据科学家培训时,您首先要学习的事情之一是设置一个种子值。设置种子位于创建预测模型时运行的每个脚本的顶部。写那一行代码变得反射性和第二天性,以至于你可能会忘记为什么要写它。

你写它是为了可复制性。我不会深入讨论如何和在哪里,但是任何时候你可能必须生成随机数,你要确保如果别人运行你的脚本,他们得到相同的结果。由于预测建模算法大量使用随机数发生器,所以你必须在你做的几乎每个项目中播种。通过运行下面的示例代码,可以看到 set seed 的效果。

当我为我的演示构建 Sparklyr 示例代码时,我尽职尽责地用我以前无数次做过的方式设置了种子。然而,这一次,我不太确定我是否应该这样做。我看到的示例代码没有在任何地方设置种子。我认为这只是一个疏忽,但我不确定。因为我是习惯的奴隶,所以我把它留在了家里。

在展示的那天晚上,一位火花专家在人群中。我知道她每天都和 Sparklyr 一起工作,所以我邀请她随时参与进来。果不其然,她指出 set seed 与 Spark 的工作方式并不像我想象的那样。后来,我们就这个问题进行了热烈的讨论;最重要的是,我们都不知道为什么它不起作用。

让我们回到几天前:我正在准备另一个讲座,这次是专门关于 Sparklyr 的。我想检查一下 set seed 的问题是否已经解决。我用谷歌搜索了这个问题,用了各种我认为会有所收获的关键词,但什么也没找到。然后,我做了任何一个有自尊的工程师都会做的事,走向了 Stackoverflow。

你可以在这里看到帖子,但是我想把答案和提问的背景放在一起。 user6910411 很好地给了我一个全面的回答,我会在这里完整地分享。

TL;DR:当你在 R 中使用 Spark 时,你在两个不同的地方工作——你的本地机器和 Spark 集群。set seed 在您的本地机器上。要在群集上设置种子,请使用 Sparklyr 函数中的参数。

一般来说,set.seed 在它应该在的地方工作得很好——在本地 R 会话中,也称为驱动程序(您调用 spark_connect 的地方)。它不起作用,而且由于许多原因,它不能跨执行器工作,包括不同的执行上下文(R、JVM)和/或不同的环境(使用 spark_apply 这样的方法)。

带火花包装器:

用 ml_*或者 ft_ 等方法。种子由 Spark 设置,通常使用种子参数公开。例如 ml_kmeans:

也可以为 RNG SQL 函数设置种子:

带执行器端 R 代码

据我所知,目前还没有任何选择。跨多台机器正确设置 RNG 种子将需要 API 来访问低级任务信息,并且即使假设没有其他不确定性来源,在异构环境中也可能是脆弱的。

然而

RNG 状态不是分布式系统中非确定性行为的唯一来源。因为在 Spark 中一般不保证任何特定的执行顺序,所以不同运行之间的结果可能不同,即使 RNG 状态设置正确。

总体:

如果你的目标是可重复的研究,你可能仍然可以使用 Spark,但它需要一个防御性的编程,有意识地建立集群,这不是你可以用内置工具做的事情,更不用说像 sparklyr 这样有限的高级包装器了。

在您的个人电脑上设置数据科学环境

原文: towardsdatascience.com/setup-a-dat…

了解在本地计算机上使用 Python、R、Git 和 Unix Shell 设置数据科学环境的各种选项。

在像 Datacamp 这样的在线交互式培训和教育平台上学习之后,下一步就是利用在 Python、R、Git 或 Unix Shell 中获得的技能,并在本地计算机上使用它。要知道你想要的各种项目需要安装什么并不总是容易的。本教程将让你知道你需要安装什么包,什么软件来开始使用各种技术。本教程将包括:

  • Anaconda Python 发行版的好处以及如何在您的操作系统上安装它。
  • 一起使用 R 和 RStudio 的好处以及如何在您的操作系统上安装它们。
  • Unix Shell 的优点以及如何在您的操作系统上使用它。
  • 使用 Git 的好处以及如何在您的操作系统上安装它。

就这样,让我们开始吧!

计算机编程语言

为了能够在本地计算机上使用 Python,首先需要安装它。有许多不同的 python 发行版,但是对于数据科学来说,Anaconda Python 发行版是最受欢迎的。

蟒蛇的好处

Anaconda 是一个包管理器、环境管理器和 Python 发行版,其中包含许多开源包的集合。Anaconda 的安装附带了许多软件包,如预装的 numpy、scikit-learn、scipy 和 pandas,这也是安装 Jupyter 笔记本的推荐方式。下图显示了 Jupyter 笔记本电脑的使用情况。Jupyter 笔记本包含代码和富文本元素,如图形、链接和等式。你可以在这里了解更多关于 Jupyter 笔记本 的信息。

Anaconda 的其他一些好处包括:

  • 如果在安装 Anaconda 之后需要额外的包,可以使用 Anaconda 的包管理器 conda 或 pip 来安装这些包。这是非常有利的,因为您不必自己管理多个包之间的依赖关系。Conda 甚至可以轻松地在 Python 2 和 3 之间切换(你可以在这里了解更多 )。
  • Anaconda 附带 Spyder,这是一个 Python 集成开发环境。集成开发环境是一种编码工具,它允许您编写、测试和调试您的代码,因为它们通常提供代码完成、通过突出显示的代码洞察力、资源管理和调试工具以及许多其他功能。还可以将 Anaconda 与其他 Python 集成开发环境(包括 PyCharm 和 Atom)集成在一起。您可以在这里了解更多关于不同 Python 集成开发环境的信息。

如何安装 Anaconda (Python)

下面是一些关于如何在您的操作系统上安装 Anaconda 的指南的链接。

在 Mac 上安装 Anaconda

在 Windows 上安装 Anaconda

r 编程语言

大多数人一般会将 RStudio 和 R 编程语言一起安装。RStudio 集成开发环境(IDE)通常被认为是使用 R 编程语言的最简单、最好的方式。

RStudio 的优势

R 编程语言的安装为您提供了一组来自 R 语言的函数和对象,以及一个允许您构建和运行命令的 R 解释器。RStudio 给你一个集成的开发环境,它与 R 解释器一起工作。

当您打开 RStudio 时,会出现如上图所示的屏幕。四个 RStudio 窗格中包含的几个功能是:(A)文本编辑器。(B)工作环境仪表板。(C)口译员。(D)帮助窗口和包管理系统。所有这些特性使得 RStudio 成为你在安装 r。

您可以在 Datacamp 的两个课程系列中了解更多有关 RStudio 的有用功能,使用 RStudio IDE ( 第 1 部分、 第 2 部分)。

如何安装 R 和 RStudio

以下是一些关于如何在您的操作系统上安装 R 和 RStudio 的指南链接。

在 Mac 上安装 R 和 R studio

在 Windows 上安装 R 和 R studio

Unix Shell

导航目录、复制文件、使用虚拟机等等是数据科学家工作的一部分。您经常会发现 Unix Shell 被用来完成这些任务。

Unix Shell 的一些用途

  1. 许多云计算平台都是基于 Linux 的(利用一种 Unix Shell)。例如,如果你想 在 Google Cloud 上建立一个数据科学环境,或者在 Cloud (AWS EC2)中用 Jupyter 笔记本进行 深度学习,这需要一些 Unix Shell 知识。有时候你可能会用到一个 Windows 虚拟机,但这并不常见。
  2. Unix Shell 提供了许多有用的命令,例如:wc命令,用于计算文件中的行数或字数;cat命令,用于连接/合并文件;headtail命令,用于帮助您选择大文件的子集。您可以在 8 用于数据科学的有用 Shell 命令中了解更多信息。
  3. 您将经常发现 Unix Shell 与其他技术集成在一起,您将在本文的其余部分看到这一点。

与其他技术的集成

您经常会发现 Unix Shell 命令集成在其他技术中。例如,在 Jupyter 笔记本中,经常可以在 Python 代码旁边找到 shell 命令。在 Jupyter Notebook 中,您可以通过使用!切换到 shell 来访问 shell 命令。在下面的代码中,shell 命令ls(列出当前目录中的所有文件)的结果被分配给 Python 变量 myfiles。

myfiles = !ls

下图显示了一些集成在工作流中的 Python 代码,用于组合多个数据集。请注意集成在 Jupyter 笔记本中的 Unix Shell 命令(包含在红色矩形中)。

请记住,上图中的代码并不是完成某项任务的独特方式,而只是您可能看到的 Unix 使用情况的一个小例子。如果你想学习如何使用 Unix 进行数据科学,Datacamp 有一门免费的课程 介绍 Shell for Data Science 我推荐。这是一项被许多有抱负的数据科学家遗忘的技能,但在工作场所却是一项非常重要的技能。

Mac 上的 Unix Shell

Mac 自带 Unix 外壳,所以你通常不需要安装任何东西!重要的一点是,有各种各样的 Unix 系统有不同的命令。有时候你会发现你没有在另一个 Unix 系统上找到的 Unix 命令(比如wget)。类似于你如何通过 RStudio 和 Anaconda 拥有包管理器,Mac 可以拥有一个名为 Homebrew 的包管理器,如果你安装的话。下面的链接介绍了如何安装和使用家酿。

如何安装和使用家酿

Windows 上的 Unix Shell 命令

Windows 不附带 Unix Shell。请记住,Unix Shell 为您做的是为数据科学提供有用的命令。有许多不同的方法可以在 Windows 上获得这些有用的命令。您可以使用可选的 Unix 工具在 Windows 上安装 Git,这样您就可以在命令提示符下使用 Unix 命令。或者,你可以在 Windows 上安装 Gnu(GOW)(10mb) Cygwin(100 MB),还有许多其他选项。

饭桶

Git 是使用最广泛的版本控制系统。版本控制系统记录一段时间内对一个文件或一组文件的更改,以便您可以在以后调用特定的版本。Git 是一项重要的技术,因为它真的能帮助你与他人合作,而且你会在很多工作场所发现它。学习 Git 的一些好处包括:

  • 使用 Git 控制的版本不会丢失,所以您可以随时查看程序的以前版本。
  • 当您的工作与他人的工作发生冲突时,Git 会通知您,因此很难(但不是不可能)意外覆盖工作。
  • Git 可以同步不同人在不同机器上完成的工作,因此它可以随着您的团队的发展而扩展。
  • 了解 Git 有助于用 R 和 Python 对包进行开源开发。

与其他技术的集成

Git 的一个很酷的地方是你经常会发现它与其他技术集成在一起。前面我提到过,RStudio 集成开发环境(IDE)通常被认为是使用 R 编程语言的最佳方式。RStudio 提供版本控制支持,大多数 Python 集成开发环境(IDE)都提供版本控制支持。

如果你想学习如何将 Git 用于数据科学,DataCamp 有一门免费课程 介绍 Git 用于数据科学,我强烈推荐。

如何安装 Git

这里有一些关于如何在你的操作系统上安装 Git 的链接。

在 Mac 上安装 Git

在 Windows 上安装 Git

结论

本教程提供了一种在本地计算机上设置本地数据科学环境的方法。需要强调的重要一点是,这些技术可以而且经常集成在一起。如果你对本教程有任何问题或想法,欢迎在下面的评论中或通过 Twitter 联系我们。此外,请随意查看我的其他基于安装的教程,它们位于我的 Github 或我的 媒体博客上。

原载于

为机器学习和深度学习设置 Python 环境

原文: towardsdatascience.com/setup-an-en…

在过去的十年里,人们对机器学习和深度学习的兴趣激增。你会在计算机科学项目、行业会议和日常生活中的许多应用中看到机器学习。

我假设你已经知道机器学习,因此我不会解释什么和为什么。

因此,我发现许多初学者在安装库和设置环境时面临问题。当我第一次尝试的时候。所以这个指南完全是给新手看的。

在这个故事中,我将告诉您如何在您的系统上轻松设置 python 环境。我用的是 Windows,但是这个指南也适合 Ubuntu 和 Linux 用户。

完成本教程后,你将拥有一个工作的 Python 环境,开始学习和开发机器学习和深度学习软件。

PC 硬件设置

首先,要在任何数据集上执行机器学习和深度学习,软件/程序需要足够强大的计算机系统来处理必要的计算能力。因此,需要满足以下条件:

  1. 中央处理器(CPU) —英特尔酷睿 i5 第六代处理器或更高。AMD 同等处理器也是最佳选择。
  2. RAM —最低 8 GB,建议 16 GB 以上。
  3. 图形处理器(GPU) — NVIDIA GeForce GTX 960 或更高。AMD GPUs 无论如何都无法进行深度学习。有关用于深度学习的 NVIDIA GPUs 的更多信息,请访问 developer.nvidia.com/cuda-gpus。
  4. 操作系统 — Ubuntu 或者微软 Windows 10。我建议在继续之前将 Windows 10 更新到最新版本。

注:对于笔记本电脑,理想的选择是从任何合适的供应商处购买游戏笔记本电脑,如外星人、华硕、联想军团、宏碁掠夺者等。

让我们直接进入安装过程。我们要撞上岩石了😉

Nvidia GeForce 体验

该工具旨在更新您的 NVIDIA GPU 驱动程序,这样做要容易得多,如果您有 NVIDIA GPU,强烈建议安装该工具。

下载 NVIDIA GeForce 体验

目录

在本教程中,我们将介绍以下步骤:

  1. 下载蟒蛇
  2. 安装 Anaconda & Python
  3. 启动并更新 Anaconda
  4. 安装 CUDA 工具包& cuDNN
  5. 创建一个 Anaconda 环境
  6. 安装深度学习 API(tensor flow 和 Keras)

步骤 1:下载 Anaconda

在这一步中,我们将为您的平台下载 Anaconda Python 包。

Anaconda 是科学 Python 的一个免费且易于使用的环境。

  • 1.安装 Anaconda (Python 3.6 版本) 下载

我用的是 Windows,你可以根据你的操作系统来选择。

步骤 2:安装 Anaconda

在这一步中,我们将在您的系统上安装 Anaconda Python 软件。

下载安装程序后,安装非常简单快捷。打开设置并按照向导说明进行操作。

#注: 它会自动用它安装 Python 和一些基础库。

根据您的系统,这可能需要 5 到 10 分钟或更长时间。

步骤 3:更新 Anaconda

打开 Anaconda 提示符,键入以下命令。不要担心,Anaconda 提示符和 cmd 是一样的。

**conda update conda
conda update --all**

步骤 4:安装 CUDA 工具包& cuDNN

  1. 安装 CUDA 工具包 9.0 或 8.0 下载

根据您的操作系统和 GPU 选择您的版本。

#版本支持: 这里有一个检查你的 版本是否支持你的 Nvidia 显卡的指南

要下载其他版本,你可以点击这个链接: developer.nvidia.com/cuda-toolki…

#注: 由于 TensorFlow 与 CUDA Toolkit 9.1 和 9.2 版本不兼容,建议使用 CUDA 9.0。请根据您的 Nvidia GPU 版本选择 CUDA 版本,以免出错。

**#注:**9.0 版本的人 下载也可以在进行过程中出现错误的情况下安装给定的补丁。

2.下载 cuDNN 下载

下载 cuDNN 的最新版本。根据您的操作系统和 CUDA 选择您的版本。需要注册会员。别担心,您可以使用您的电子邮件轻松创建一个帐户。

将解压后的文件夹放入 c 盘,如下所示:

**C:\cudnn-9.0-windows10-x64-v7**

步骤 5:将 cuDNN 添加到环境路径中

  1. 使用( Win + R) 打开运行对话框,运行命令 sysdm.cpl
  2. 在窗口-10 系统属性中,请选择高级选项卡。
  3. 选择环境变量
  4. 将以下路径添加到您的环境中。
**C:\cudnn-9.0-windows10-x64-v7\cuda\bin**

步骤 6:创建一个 Anaconda 环境

在这里,我们将为我们的特定用途创建一个新的 anaconda 环境,以便它不会影响 Anaconda 的根。太神奇了!!不是吗?😛

打开 Anaconda 提示符,键入以下命令。

  1. 通过调用以下命令,创建一个名为“tensorflow”的 conda 环境(可以更改名称):
**conda create -n tensorflow pip python=3.6**

2.通过发出以下命令激活 conda 环境:

**activate tensorflow**
 (tensorflow)C:>  # Your prompt should change

第七步:安装深度学习库

在这一步,我们将安装用于深度学习的 Python 库,具体来说:TensorFlow,和 Keras。

  1. 张量流

TensorFlow 是机器学习的工具。虽然 TensorFlow 包含广泛的功能,但它主要是为深度神经网络模型设计的。

= >要安装 TensorFlow,请打开 Anaconda 提示符,键入以下命令。

要安装 TensorFlow 的 GPU 版本:

C:\> **pip install tensorflow-gpu**

要安装 TensorFlow 的纯 CPU 版本:

C:\> **pip install tensorflow**

如果您的机器或系统是唯一受支持的 CPU,您可以安装用于基本学习和练习的 CPU 版本。

= >您可以通过在 shell 上运行此程序来测试安装:

**>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))**

关于入门和文档,您可以访问 tensor flow网站。

2.

Keras 是一个高级神经网络 API,用 Python 编写,能够在 TensorFlow 、 CNTK 或 Theano 之上运行。

= >要安装 Keras,请打开 Anaconda 提示符,键入以下命令。

**pip install keras**

= >我们运行 Mnist_Mlp 试试。Py 在你的提示下。你也可以使用其他 例子。

打开 Anaconda 提示符,键入以下命令。

**activate tensorflow
python mnist_mlp.py**

关于入门和文档,您可以访问 Keras网站。

下面是我用 Python 实现的数字识别的 Keras 标准全连接神经网络

还有其他一些著名的库,如 Pytorch、Theano、Caffe2 等,你可以根据自己的选择和用途来使用。

恭喜你!😉您已经在 Windows 上使用 TensorFlow,Keras(带 Tensorflow 后端)通过 GPU 成功创建了环境!

如果你喜欢这个故事,请点击👏按钮并分享,以帮助其他人找到它。你也可以 给我买杯咖啡帮我给你写更多有趣的内容!

用熊猫重塑你的数据的七个简洁步骤或者我如何在 Excel 失败的地方使用 Python

原文: towardsdatascience.com/seven-clean…

概念:多级索引、旋转、堆叠、应用、lambda 和列表理解

用熊猫重塑数据是什么样子的…

用熊猫重塑数据是什么感觉……

几周前,一位同事发给我一份电子表格,里面有关于公共卫生干预的数据,由许多选项卡组成,每个组织一个选项卡。任务是开发一个灵活的仪表板来研究这些数据。问题是数据是宽格式的,但我们需要长格式。以前,这可能只是另一个复制粘贴的手动任务和其他非常长且重复的任务,但是我决定使用 Python 的 Pandas 库来自动化这项任务,所以我开始开发脚本。不到 30 分钟,我就有了灵活的、可重用的代码,这为我节省了数小时不必要的手工劳动!

我想和你分享我的过程,以防它出现在你自己的工作中。我还将展示一些技巧,并详细解释方法。当然,我已经对数据进行了净化,并为隐私生成了伪数字,但是要处理的格式和概念仍然是相同的。这是我们将如何对待熊猫的路线图:

  1. 设置环境并加载数据
  2. 调查数据
  3. 解析不同的数据标签
  4. 标准化现有列并创建新列
  5. 使用“应用”和“λ”功能清理数据
  6. 通过旋转多级索引和堆叠将数据从宽到长整形
  7. 连接并将最终结果保存回 Excel

我们还将把它包装成一个简洁的函数,可以重用这个函数来自动执行这个任务并节省时间。我已经在我的 github 账户上发布了代码和数据。此外,请查看 tichmangono.com/了解更多关于机器学习、Python 和公共卫生的想法。我们开始吧!

1.设置环境并加载数据

正如广告所说,我们只需要一个 Python 库来执行这个任务:Pandas!我们的数据是一个带有几个选项卡的 Excel 文件。我喜欢使用 Pandas 的 ExcelFile 对象功能,而不是 read 命令,因为它可以很好地处理多选项卡电子表格。

*# Import the relevant libraries...*
*# By the way, I am using Python 3*
**import** **pandas** **as** **pd**
*# Load the raw data using the ExcelFile object*
data = pd.ExcelFile('reshaping_data.xlsx')

2.调查数据

文件中有四个选项卡,每个选项卡代表一个组织的数据。

*# First, see the sheetnames available*
data.sheet_names Output: ['ABC_inc', 'HIJ_inc', 'OPQ_inc', 'XYZ_inc']

解析 ABC_inc organization 的第一个选项卡,我们可以看到,在将该格式用作标准数据框之前,还需要做一些工作。该数据包含公共卫生干预的目标。我们可以看到我们的列标题名称从第 6 行开始,并且我们有关于位置的信息(地区、省);参与的实体(合作伙伴、资金来源);以及目标年份(2017 年至 2020 年)。还要注意第 7 行是如何在数据中为每年的干预提供目标年龄组的额外信息的。数据主体从第 8 行开始向下。

*# Take a peek at the first 10 rows of the first tab*
data.parse(sheetname='ABC_inc', skiprows=0).head(10)

3.解析不同的数据选项卡

列出你的目标标签名。在我们的案例中,我们想要所有的。但是,如果您只想对其中的 2 个进行分析,那么您可以很容易地指定一个不同的列表。

tabnames = data.sheet_names

由于这些选项卡具有相似的格式,因此在本演示中我们将只使用其中的一个。最后,我们将把所有步骤合并成一个单一的、可重用的函数,并使用迭代将该函数应用于所有目标选项卡。然后我们将连接并保存结果。因此,将选项卡解析成数据帧 df,跳过顶部无用的空行。我总是使用“data.head()”来检查我的结果,并确保我的代码如我所愿。

i = 0
df = data.parse(sheetname=tabnames[i], skiprows=7)
df.head(2)

4.标准化现有列并创建新列

列出默认的列。我们将丢弃一些,但也会去掉其余的,以获得用于新列名的信息。我们需要保留特定年份、年龄组和组织的信息。

*# make a list of the header row and strip up to the 4th letter. This is the location and year information*
cols1 = list(df.columns)
cols1 = [str(x)[:4] **for** x **in** cols1]*# make another list of the first row,this is the age group information*
*# we need to preserve this information in the column name when we reshape the data* 
cols2 = list(df.iloc[0,:])
cols2 = [str(x) **for** x **in** cols2]*# now join the two lists to make a combined column name which preserves our location, year and age-group information*
cols = [x+"_"+y **for** x,y **in** zip(cols1,cols2)]
*# Assign new column names to the dataframe*
df.columns = cols
df.head(1)

*# Drop empty columns, Rename the useful columns*
*# Note when you drop, you should specify axis=1 for columns and axis=0 for rows*
df = df.drop(["Unna_nan"], axis=1).iloc[1:,:].rename(columns=    {'dist_nan':'district',                                              'prov_nan': 'province',                                                   'part_nan':'partner',                                                   'fund_nan':'financing_source'})df.head(2)

*# Engineer a new column for the organization, grab this name from the excel tab name*
*# This should read 'ABC inc' if executed correctly*
df['main_organization'] = tabnames[i].split("_")[0] + " "+ tabnames[i].split("_")[1]
df.main_organization.head(2)**Output:**
1    ABC inc
2    ABC inc
Name: main_organization, dtype: object

让我们暂停一下,看看目前为止我们的数据帧的结构。

df.info()

我们看到总共有 29 列。然而,目前,它们都具有“对象”数据类型,我们知道其中一些应该具有数字数据类型。我们还有冗余的“总计”列。请注意,列名仍然保留了多级信息,即特定列中的数据所属的年份和年龄组!这是本练习的一个关键方面,我们将在下一步中看到。在此之前,让我们稍微清理一下…

5.使用“应用”和“λ”函数清理数据

让我们删除更多的冗余列,并更改数据类型。

*# Make lists of the columns which need attention and use this as reference to execute*
*# You will notice that I use list comprehension every time I generate an iterable like a list or dictionary*
*# This is really amazing python functionality and I never want to go back to the old looping way of doing this!*
to_remove = [c **for** c **in** df.columns **if** "Total" **in** c] *# redundant*
to_change = [c **for** c **in** df.columns **if** "yrs" **in** c] *# numeric**# drop unwanted columns*
*# Notice that you need to specify inplace, otherwise pandas will return the data frame instead of changing it in place*
df.drop(to_remove, axis=1, inplace= **True**) *# Change the target column data types*
**for** c **in** to_change:
    df[c] = df[c].apply(**lambda** x: pd.to_numeric(x))

查看变化:

df.info()

看来成功了!

6.通过旋转多级索引和堆叠,从宽到长地重塑数据

现在,我最喜欢的部分——重塑数据!当涉及到数据时,这个功能给了你如此大的力量。鉴于电子表格和调查类型的数据在我的工作中非常流行,我经常使用它来清理和操作数据。对我来说,重塑数据就像是粘土,我正在亲手塑造它:)。因此,我们将在战略索引上使用旋转,然后使用堆叠来实现我们想要的形状。目前,数据是一种宽格式,但我们需要将其更改为长格式,以便我们可以轻松地将其传输到 Excel,长格式可以非常轻松地快速创建数据透视表和仪表板。

*# First, select the columns to use for a multi-level index. This depends on your data*
*# Generally, you want all the identifier columns to be included in the multi-index* 
*# For this dataset, this is every non-numeric column*
idx =['district','province','partner','financing_source'
,'main_organization']*# Then pivot the dataset based on this multi-level index* 
multi_indexed_df = df.set_index(idx)
multi_indexed_df.head(2)

在我们战略性设计的多级索引上旋转数据框后,我们现在将堆叠所有的数字列。这将使我们能够灵活地将数据恢复到我们希望的水平,就像 Excel 数据透视表一样。

*# Stack the columns to achieve the baseline long format for the data*
stacked_df = multi_indexed_df.stack(dropna=**False**)
stacked_df.head(25) *# check out the results!*

介意。吹了!我第一次看到这个的时候也是这种感觉。

*# Now do a reset to disband the multi-level index, we only needed it to pivot our data during the reshape*
long_df = stacked_df.reset_index()
long_df.head(3)

请注意,“level_5”列包含两条信息。这是从一开始就故意做的,以便在删除一些列和行时不会丢失任何信息。现在,让我们使用字符串操作来分离它们,然后删除任何冗余。

*# Make series of lists which split year from target age-group*
*# the .str attribute is how you manipulate the data frame objects and columns with strings in them*
col_str = long_df.level_5.str.split("_") 
col_str.head(3)**Output:**
0    [2017, 10-14yrs]
1    [2017, 15-29yrs]
2    [2017, 30+yrs]
Name: level_5, dtype: object*# engineer the columns we want, one columns takes the first item in col_str and another columns takes the second* 
long_df['target_year'] = [x[0] **for** x **in** col_str] 
long_df['target_age'] = [x[1] **for** x **in** col_str]
long_df['target_quantity'] = long_df[0] *# rename this column*
long_df.head(2)

*# drop the now redundant columns*
df_final = long_df.drop(['level_5', 0], axis=1)
df_final.head(2)

7.连接并将最终结果保存回 Excel

现在我们有了所有需要的成分,我们可以定义一个函数来自动调整形状,使用迭代将这个函数应用到我们想要的任意数量的选项卡上,然后最后将它保存到我们选择的电子表格中!请注意,在函数中,我组合了形状并添加了一个断言来检查输入是否正确,但代码基本相同。

*# Now define a function for doing the reshape*
**def** ReshapeFunc(excel_obj, i):
    *""" Takes in an excel file object with multiple tabs in a wide format, and a specified index of the tab to be parsed and reshaped. Returns a data frame of the specified tab reshaped to long format"""*

    tabnames = data.sheet_names
    **assert** i < len(tabnames), "Your tab index exceeds the number of available tabs, try a lower number" 

    *# parse and clean columns*
    df = excel_obj.parse(sheetname=tabnames[i], skiprows=7)
    cols1 = [str(x)[:4] **for** x **in** list(df.columns)]
    cols2 = [str(x) **for** x **in** list(df.iloc[0,:])]
    cols = [x+"_"+y **for** x,y **in** zip(cols1,cols2)]
    df.columns = cols
    df = df.drop(["Unna_nan"], axis=1).iloc[1:,:].rename(columns={'dist_nan':'district',                                   'prov_nan': 'province',                                                       'part_nan':'partner',                                                       'fund_nan':'financing_source'}) *# new columns, drop some and change data type*
    df['main_organization'] = tabnames[i].split("_")[0] + " "+ tabnames[i].split("_")[1]
    df.drop([c **for** c **in** df.columns **if** "Total" **in** c], axis=1, inplace= **True**) 

    **for** c **in** [c **for** c **in** df.columns **if** "yrs" **in** c]:
        df[c] = df[c].apply(**lambda** x: pd.to_numeric(x)) *# reshape - indexing, pivoting and stacking*
    idx = ['district','province', 'partner','financing_source'
,'main_organization'] multi_indexed_df = df.set_index(idx)
    stacked_df = multi_indexed_df.stack(dropna=**False**)
    long_df = stacked_df.reset_index()

    *# clean up and finalize*
    col_str = long_df.level_5.str.split("_") 
    long_df['target_year'] = [x[0] **for** x **in** col_str] 
    long_df['target_age'] = [x[1] **for** x **in** col_str]
    long_df['target_quantity'] = long_df[0] *# rename this column*
    df_final = long_df.drop(['level_5', 0], axis=1) **return** df_final

运行该功能

*# Check that our function works:*
check_df = ReshapeFunc(data, 2)
check_df.head(2)

酷!现在使用函数为每个选项卡创建一个数据框,将它们全部放入一个列表中,将它们连接成一个数据框,并将其保存回 Excel。

dfs_list = [ReshapeFunc(data, i) **for** i **in** range(4)]
concat_dfs  = pd.concat(dfs_list)
concat_dfs.to_excel("reshaping_result_long_format.xlsx")

这种长格式现在可以很容易地用于数据透视表,并通过透视描述性的非数字列的任意组合和聚合数字列来制作仪表板图表和分析。任务完成。

为了和我一起工作,请点击这里查看我的博客: 【https://tichmangono.com/】

编码快乐!

人工智能世界峰会的七大趋势

原文: towardsdatascience.com/seven-trend…

上周,阿姆斯特丹举办了世界人工智能峰会。在这两天里,人工智能专家、行业成员、学术界和机构聚集在一起,分享和讨论人工智能方面最热门的新闻和想法。显而易见的是,这个领域比以往任何时候都更令人兴奋,而且仍在以惊人的速度增长。在这里,我提出了讨论过的七个主要话题。

The World Summit AI introduction

  • 公平 AI :随着机器学习的普及及其在几乎所有行业的应用,确保机器学习算法的公平性变得越来越重要。虽然我们知道在收集的数据中可能存在偏差,无论是由于内在偏差还是由于数据收集和生成,我们的机器学习模型都应该尽可能无偏。这些担忧已经存在很多年了,尤其是在保险和银行等行业,但问题正在各地浮出水面。就在上周 亚马逊宣布将废弃其新的简历筛选引擎,原因是其中存在严重的性别偏见。控制模型偏差的建议解决方案有多种。目前一个很大的焦点是放在模型的可解释性上,我们将在下面的要点中展开。另一个强烈的话题,尤其是来自学术界的,与监管有关。这些法规将特别关注模型的透明度和公平性约束,包括输入数据和输出预测。在实践中,这可以作为一种新的机器学习模型,在有偏见的模型之上,使数据输入和预测输出无偏见。这些技术中的一些目前正在被探索,例如使用 生成对抗网络的特定架构。

An example of the structure for a fair ML model by Prof. Virginia Dignum

  • 模型可解释性:能够从机器学习模型中解释决策和预测的重要性是整个事件中反复出现的话题。这个想法是为了让模特感觉不那么像个黑匣子。可解释性的主要原因是模型责任。如果人工智能的公平性是一个问题,直接的后果是模型需要对它们做出的决定负责,需要对为什么做出某种预测做出解释。达到可解释性的两条主要途径是技术性的和规范性的。在技术方面,已经开发了多个框架来解释模型预测,如 LIME 和 ELI5 。许多其他公司,比如 Alpha 和 T7,也在致力于开发新技术,有望带来更加透明的模型。另一条实现模型可解释性的途径是通过监管。这是学术界讨论和研究的一个非常活跃的话题。一些规定已经在计划中,并将很快到位 ,作为可解释机器学习 GDPR的一部分。其他方法建议要求模型是开源的,这样它们就可以被检查。然而,这似乎是一个很大的要求,而且,没有用于训练模型代码的数据可能没有多大意义。模型可解释性的另一个原因是模型不仅可以用于预测。例如,在预测性维护的情况下,通过预测来了解系统的状态以及是否需要干预。然而,通过模型解释,我们还可以获得关于需要评审的组件或者处于风险中的特定过程的更详细的信息。因此,如上所述的新技术的发展也将极大地有益于这些类型的应用。
  • 从研究到应用:在过去几年里,在谷歌和脸书等巨头的推动下,人工智能的研究飞速发展。强大的新技术或改进的旧技术,加上计算能力的提高,已经允许在图像分类和语音识别等领域取得巨大成果,通常超过人类的准确性。现在,来自世界人工智能峰会的普遍感觉是时候将人工智能的重点从研究转移到应用,让这些新技术得到应用,以获得价值。许多因素都表明了这一点。首先,人工智能的民主化努力,这将在下一点讨论。第二,对实际应用的极大关注,在许多会谈中都得到强调。在金融、自动驾驶无人驾驶机队和人造卫星方面取得了巨大成就。医疗保健行业仍然被认为很少受到人工智能革命的影响,同时也被认为是人工智能应用可以蓬勃发展的最佳行业之一。
  • AI 民主化:AI 技能的传播是大会最大的主题之一。来自谷歌的 Cassie Kozyrkov 解释了他们如何训练 17k(!!!)决策智能方面的员工,即应用人工智能解决业务问题。这使得基本上每个团队都有能力在他们的产品中实现机器学习驱动的功能。民主化也可以通过云服务来实现。IBM 和 Google 等云提供商允许通过简单的 API 调用来应用复杂而强大的算法。这为更多的观众提供了快速而廉价地应用新技术的机会,而无需深入的 ML 知识或花费时间来制作和训练深度神经网络。人工智能民主化还伴随着一个新的、更广泛的概念,即规划数据科学项目和组建团队来应用机器学习。
  • 团队的多学科方法:虽然行业越来越关注应用人工智能和民主化人工智能,但关注如何获得成功结果也很重要,即如何构建团队,使他们能够推动创新。关键的一点是需要多种多样的技能。特别是,机器学习研究人员需要嵌入到由面向业务的专家、软件工程师、数据工程师等组成的团队中。多学科是数据科学项目成功的关键。这是因为最佳 ML 算法的应用和选择只是问题的一部分。数据管道、关注正确的业务问题、产品集成也同样重要,并且需要多种技能才能出现在项目中。

The future of AI, from Cassie Kozyrkov

  • **以人工智能为导向的决策者:**随着人工智能在似乎每个行业和我们生活中越来越多的部分的大规模扩散,我们也需要领导者和决策者以人工智能为导向。首先,这是机器学习项目成功和人工智能成功传播的关键。其次,人工智能提供了从海量数据中分析和获取洞察力的工具,使决策者能够做出更快、更明智的决策。例如,ING 展示了他们的人工智能驱动的投资工具。这个工具可以扫描数百万的资产和投资策略,为投资组合经理提供以前无法想象的大量交易机会的概览。
  • 人工智能带来的好处:最后,大量的注意力被投入到能够使用人工智能来关注巨大的社会问题的重要性上。Telefonica 成立了一家 moonshot 公司, Alpha ,专注于解决健康问题,尤其是帮助人们重新获得对日常行为的有意识控制。来自牛津大学的 Luciano Floridi 教授专注于人工智能可能为人类和地球带来的风险,以及人工智能可能为每个人带来的巨大潜力:让我们的生活变得更好,将我们从枯燥乏味甚至危险的工作中解放出来,增强人类的能力,让我们更加亲近。

AI dangers and opportunities, from Luciano Floridi presentation

结论

世界峰会人工智能真的很鼓舞人心。该行业显然处于良好状态,而且似乎只会上升。AI 未来肯定是红火的。尽管如此,在保护个人及其隐私的同时,让每个人都能正确使用这一令人惊叹的技术仍有许多挑战、不确定性和问题需要解决。

鸣谢:我要感谢 booking.com 给我参加这个盛会的机会。

数据科学入门的几本好书

原文: towardsdatascience.com/several-gre…

我在听一个关于数据科学和新闻的播客 部分衍生的旧节目。一位主持人提到,我们现在生活在“数据科学教学和学习材料的黄金时代”。我完全同意这种说法。每个月,大多数出版商似乎都有关于这个主题的另一本书,人们也在撰写令人兴奋的博客帖子,讲述他们的所学和所做。

我想按照我接触它们的顺序,列出几本对我有帮助的书。希望你可以用它们来获得这个领域更广阔的视角,或许可以作为一种资源传递给其他想学习的人。

从数据中学习

我第一次发现从数据中学习是通过加州理工学院关于这个主题的 课程。我仍然认为这是一篇优秀的文章,但是我不确定我是否会把它推荐给初学者。(对于刚刚进入主题的人,我可能会推荐列表中的下一个选择。)

然而,如果你有一点线性代数和概率的背景知识(足以阅读符号和查找事情的意思应该没问题),那么这绝对是一本入门的好书。从数据中学习让我第一次尝到了数据科学中使用的许多算法背后都有一些严格的数学理论。如果处理数据和观察结果表明这些方法有效,理论会告诉你为什么有效。

现在,理解一些关于理论的事情是很重要的,但是大多数时候,人们想知道它实际上能做什么。

数据挖掘技术:用于市场营销、销售和客户关系管理

我承认,在我阅读数据挖掘技术之前,我只是粗略地了解了什么是可能的。我知道最广泛使用的算法是用来评估风险的,比如信用评分。然而,我不太了解如何利用数据科学技术在营销领域获得收益。

我很欣赏作者在该领域的丰富经验,尤其是在大数据发展之前的经验。这本书清楚地表明,许多最有用的算法已经存在并使用了几十年。作者还从直接营销案例(印刷杂志和实体邮件)中提供了一些我没有考虑到的解释,例如排名算法,这种算法最初用于确定联系人名单的优先顺序,因为向人们邮寄纸张的成本很高。

最重要的是,我喜欢这些主题的广度,因为它们涵盖了几乎所有形式的营销算法,并且很好地向你提供了它们为什么重要的高层次观点。

从这本书中,你不会知道如何实现他们谈论的所有内容,但是你会知道哪些算法适合特定的任务。

这本书给了我一个更好的方法来思考一个项目的初始阶段,但我仍然需要一些帮助来学习如何交流数据以及如何将数据直接融入业务环境。

商业数据科学

我在度假的时候通读了这本(是的,我知道,我就是那种极客)。这并没有阻止我从其中汲取大量信息,了解数据科学如何应用于试图使用这些模型的公司。本书的大部分内容侧重于帮助您思考如何操作化运行和管理数据科学项目的流程,以及您可能期望从中获得什么结果。

除此之外,我认为它教会了我如何在公司更好地交流数据。能够谈论将一个项目付诸实施需要几个月的时间,并将其与 备选方案进行权衡,是在一家想要赚钱的公司工作的基本要素。此外,如果你认为一个特定的项目是正确的选择,你需要能够通过沟通的好处来支持这个选择。

我想说,这是一本非常“底线”的书,但有时听听也没关系。如果您的优先事项包括将成本控制在收入之下,那么数据科学并不总是最热门的技术或最大的技术。然而,我仍然没有学到多少如何在日常工作中处理数据。为此,我不得不依靠我提交的最后一本书。

应用预测建模

这是一本关于 R 语言预测建模和使用作者开发的软件包的书。总的来说,我认为即使你最终没有使用 R 作为你分析数据的首选工具,你仍然会从这本书中学到很多。它充分展示了 caret 在一个项目中可以为您提供的强大功能,以至于您会在自己选择的工具中寻找相同的功能(或者希望为我们构建它的等价物)。

作为一个软件工具,caret 为你可能要求的任何预测任务(分类或回归)提供了一个一致的界面。一些人对 R 包的一个问题是算法的接口不是很一致。学习如何使用一个包并不总能在一个完全不同的包中得到相同的理解。Caret 通过给你同样的方法为 许多不同的算法建立一个建模任务来解决这个问题。此外,它还可以自动执行多项任务,例如:

  • 数据分为训练集和测试集
  • 数据转换,如标准化或幂转换
  • 建模调谐和参数选择

本质上,它使得在 R 中工作很像使用 Scikit Learn ,但是有更多的选项和模型实现。

那么下一步是什么?嗯,在你阅读和学习新技能的时候,最好的办法是试着把这些技巧应用到你关心的问题上。也许下次你在会议上讨论公司的优先事项时,你需要围绕下一个数据项目展开对话,并将数据工作引向你的业务目标( 商业数据科学)。当你集思广益,试图预测并在营销活动中使用可能的东西时,你需要概述可能的技术以及它们能为你提供什么( 数据挖掘技术)。如果您正在评估候选算法准确执行任务的能力,您将需要从理论( 从数据中学习)和实践( 应用预测建模)的角度来衡量它们的有效性。

我希望这能帮助你在工作中应用数据科学,并给你在这个领域的视角。

这篇文章最初出现在我的个人博客 这里。

骑自行车还是不骑自行车?机器学习对旧金山自行车共享计划的可用性进行建模

原文: towardsdatascience.com/sf-bike-sha…

自行车共享项目正在世界各地的城市涌现,为专业人士和游客提供了灵活的交通方式。自行车共享系统通常建有“停靠站”,用户可以在那里借出和归还自行车。2013 年,旧金山推出了自行车共享计划,截至 2015 年,该计划在全市共有 70 个站点。

Imagine if cities had communal road bikes like this…!

自行车共享项目对项目所有者(城市)和使用者(骑手)都提出了挑战。例如,城市经常在车站之间手动重新分配自行车,以确保自行车和码头(归还自行车的槽)的可用性。城市也需要使用骑车人的数据来通知未来自行车站应该安装在哪里。对于用户来说,主要问题是:如果我现在离家/上班,到了最近的车站会有自行车吗?给定站点自行车的不确定性具有很强的商业含义,因为不可预测的自行车供应会阻碍骑行和停滞需求。这个项目关注自行车可用性的用户挑战。

该项目评估旧金山自行车共享系统的当前骑行趋势和预测自行车可用性(在请求后 30 分钟内)。这个项目的三个主要部分包括:探索性数据分析、一个简单的确定性模型和两个机器学习模型(一个具有时间和通勤特征,一个添加了天气数据)。在所有功能中,未来自行车可用性的最大预测因素是车站中的当前自行车,其次是周、月和通勤时间。在天气特征中,云层覆盖是最强的预测因素——如果你熟悉旧金山的天气,这并不奇怪!

具有高级特征工程的机器学习模型表现优于其他两个模型模型,误报率为 15%,误报率为 0.01%。

数据概述

使用了以下公开可用的数据( 来源):

  • 状态:每分钟更新 70 个站点中每个站点可用的自行车数量和码头数量
  • 天气:旧金山湾区的 zip 级每日天气模式
  • 电台:每个电台的元数据(n = 70)
  • 行程:行程级别记录,包括日期、开始/结束时间、开始/结束站点 ID、开始/结束站点名称、自行车 ID、骑手订阅类型和行程持续时间

探索性数据分析

在按订阅类型(订阅者:月会员或年会员,客户:临时现收现付会员)对乘客进行分组后,我探索了季节性、每周和每日的乘客模式。所有的时间框架都强调了订户和顾客的不同模式,支持了订户是通勤者而顾客主要是游客的假设。

乘客量在 8 月/9 月/10 月达到高峰,在冬季假期前后会有一个淡季。这可能是由于旅游趋势或天气影响了休闲通勤者是否骑自行车(秋天是众所周知的旧金山最好的季节,冬天——当我们不在干旱的时候——非常潮湿)。

Daily (2013–2015) (left): Daily ridership increased since implementation. Customer ridership shows seasonal patterns, peaking in Aug/Sept/Oct and with a lull around the holidays. Annual (right): Subscriber ridership dips around holidays: week 22 (Memorial Day), 27 (July 4th), 36 (Labor day), 46/47 (Thanksgiving), & 51/52 (Christmas & New Years). Excluding holidays, ridership increases slightly in the first half of the year, peaking in summer (week 34/35) in ideal bike weather. Customer ridership also increases slightly with local maximum during holidays and a global max during Labor Day; rides start to drop off in the Fall.

Weekly (left): High weekday ridership for Subscribers with a large drop (~1/5) on weekends. Customers have a reverse trend with ~2x rides on weekends vs. the beginning of the week. Hourly (right): Subscribers show a distinct bi-modal daily usage pattern, with peaks during AM & PM commute hours, and a small increase during lunch. Customers get a later start (as one does on vacation), with steady usage 11am until the early evening.

假设

现在我们已经了解了数据和用户行为的大致趋势,下一步是建立一个简单的确定性模型来预测自行车的可用性。从骑车人的角度来看,自行车可用性是一个二元问题:自行车可用吗?是或否。因此,二元分类器是合适的。注意,从我的经验来看,并不是自行车共享系统中的所有自行车都可以使用。因此,稍微调整分类器,所有模型对在给定时间在一个站点是否有至少 2 辆自行车可用进行分类。

我们可以在上面的图表中看到,不同的站点呈现出不同的模式。例如,在居民区的车站,自行车在早上减少,在晚上增加。相反,靠近办公室的车站则相反。这证明了我们的预测模型的简化假设:我们可以为每个站建立独立的模型,从而明确地选择忽略不同站的行为之间的相关性。

数据管道

这三个模型都依赖于预处理步骤,如数据过滤、协调/简化数据类型和特征工程。为了支持更快的处理和更容易从内核崩溃中恢复(原始状态数据文件为 2.5 GB),实现了预处理 Python 脚本来持久化输出数据。总的来说,这些转换阶段构成了进入模型的数据管道。

  1. 将人类可读的时间戳转换为纪元毫秒。
  2. 生成一个测试数据集(用于简单模型),其中的行满足两个条件:(1)一个月中的第几天小于给定的一个月中的第几天(例如,如果 max_day_of_month <5,则返回的测试集包含每个月的第 5 天,约为 13%)。(2)星期几等于 ISO 格式的给定星期几(星期几= 3,因为当前确定性模型是为星期三计算的)。

对于两种机器学习模型(从步骤 1 的输出开始):

  1. 添加两个新列(1-适当的模型时间;2-t+30 分钟的真实自行车可用性),如果该行的时间戳在指定模型时间(在数组中)的 30 分钟内。否则,它将从数据集中删除该行。
  2. 将以下离散化日期时间列添加到数据集:ISO 星期几(1–7);ISO 月(1–12);通勤标志为 3 个二进制列;非上下班时间(1/0);AM 通勤(1/0)—7 点到 09:00 之间的状态更新;PM 通勤(1/0)—16:00 到 18:00 之间的状态更新。
  3. 在 t+30 分钟内添加一个站点的真实自行车数量。

模型结构

确定性模型

为了与我们最终建立的机器学习模型进行比较,让我们创建一个确定性模型来计算 30 分钟间隔内每站自行车可用性的变化。自行车可用性的变化使用最小二乘法进行近似计算,最小二乘法拟合一条曲线,使数据集中的因变量(自行车可用性)与线性函数(时间= x)预测的值之间的差的平方和最小化。为了建立模型,我使用上面确定的每日交通模式来定义适当的模型时间。基于高需求,模拟了以下 30 分钟的间隔:早上(7:30,8,8:30,9AM)和晚上(4,4:30,5,5:30,6PM)。为每个站点计算最小二乘拟合线,自行车可用性预测为:当前自行车可用性+(最小二乘线的斜率 x 30)。

popt_all_stations = []
row_headers = []

**for** i **in** station_ids:
    s = station_availability(i, n_bikes= n_bikes, dow= dow)       
    popt_single = []
    **for** j **in** start_times:
        start_time = pd.to_datetime(j)
        end_time = start_time + delta
        df = s.between_time(start_time.time(), end_time.time())
        xdata = df.index.minute
        ydata = np.array(df.bikes_available)
        popt, pcov = optimization.curve_fit(func, xdata, ydata)
        popt_single.append(popt[1])
    popt_all_stations.append(popt_single)
    row_headers.append(i)

*# reshape model ouput with time as column headers, station as index*
df = pd.DataFrame(popt_all_stations)
df.columns = start_times
df.index = row_headers

*# Convert model from minute-by-minute change in bike availabilty --> total change during* 
*# model window (e.g. the 16:00 model applies to status updates between 16:00 and 16:29)*model = df*29
model['station_id'] = model.index
model = pd.melt(model, id_vars = ['station_id'])
model.head()

下面我将所有型号一起评估。

简单机器学习模型

第一个机器学习模型使用简单的功能,根据状态时间戳设计:星期几、月份、通勤时间(非通勤、上午或下午)。预处理在数据管道中执行——主要是因为 Jupyter notebook 无法将未来自行车的可用性映射到状态表中的每一行。如上所述,对于骑车人来说,自行车可用性的问题是二元的;骑车人不在乎有多少辆自行车,而是在乎有没有一辆自行车。在这种情况下,我们将使用一个随机森林分类器,这将有助于稍后使用梳理出我们的功能的相对重要性。

输出是每个站一个模型(70);下面总结了每个模型特性的重要性。使用。describe(),我们还能够收集关于站点间特征重要性差异的见解。总的来说,当前自行车的可用性是未来自行车可用性的最具预测性的特征。在较小的程度上,月份和星期几是可以预测的。通勤时间并不重要。

pd.DataFrame(feature_imp, columns=X_train.columns).describe()

机器学习模型 2:高级特征工程

现在我们已经看到了一个基本的机器学习模型,下一步是添加更多复杂的功能,希望提高模型的性能。特别是,当通勤者选择他们的交通方式时,天气的各个方面(例如温度、降水)是关键的决定因素。在接下来的模型中,我们将引入大量的日常天气特征。

Could temperature and wind speed help predict bike demand? There are clear seasonal patterns that could feasibly drive bike usage.

与第一个 ML 模型一样,这个模型是特定于站点的。为了快速比较,为单个站点(站点#2)创建了天气增强模型。

随机森林的要素重要性方法显示了天气增强模型中要素的相对重要性(即原始 ML 模型要素以及附加的新天气要素)。我们看到,目前的自行车可用性仍然远远超出了未来自行车可用性的最佳预测。一周中的某一天、AM 通勤时间和非通勤时间也是原始模型中相当重要的特性。在新增的天气特征中,云量是最重要的特征,其次是最大露点、最小露点和最大湿度。在一个天气不可预测、云层覆盖臭名昭著的城市(我正看着你呢,卡尔),云层覆盖影响自行车骑行率(以及自行车的可用性)并不奇怪。

*如果你不熟悉旧金山,夏天的日常大雾是如此强烈和常见,以至于它被亲切地称为卡尔。

那么哪个“更好”呢?

要回答这个问题,我们必须就如何恰当地评估模型达成一致。由于严重的类别不平衡(例如,一个类别在数据中明显占多数),准确性(一个常见的默认评估指标)在这里不会出现。只有一小部分自行车站点在车型期间没有足够的自行车可用。事实上,96.6%的车站在给定时间段有自行车可用。因此,预测所有车站始终有可用自行车的分类器将有 96%的准确率…但这将是一个可怕的分类器。混淆矩阵提供了更好的评估指标。

Confusion matrix

从骑手的角度来看,最重要的指标之一是假阳性率:假阳性(错误归类为阳性的阴性事件的数量)与实际阴性事件总数的比率。换句话说:如果一个模型说自行车将在 30 分钟内可用,当用户到达时,实际上会有自行车吗?

Comparison of evaluation metrics for all three models (2 machine learned models, and one simple deterministic model).

对于用户最重要的指标——误报率和漏报率——这两个机器学习模型都优于简单的确定性模型。具体来说,天气增强随机森林模型在假阳性率(简单模型的 FPR 的三分之一)和假阴性率(0.01%对简单模型的 0.66%)方面远远优于简单模型。

可能的扩展

除了运行额外的机器学习分类器(例如 SVM、逻辑回归)进行比较,该数据集还具有进一步特征工程的巨大潜力,包括:

  • 自行车可用性的历史变化率(例如,简单模型中最小二乘方线的斜率)
  • 在前一个 x 分钟窗口中在车站开始/结束的乘车次数-提供车站受欢迎程度的洞察,否则会在车站状态更新中丢失(例如,如果一个行程在车站 A 开始,而另一个行程在车站 A 结束,则可用自行车的数量将是静态的)
  • 行程开始/结束时间流行度(例如,使用一阶导数找到当地最大和最小行程数)
  • 用每个气象站绘制 zip 级别的每日天气数据,而不是海湾地区的平均值。

[## 格西/跳板 _ 数据 _ 科学

有关数据和源代码(Jupyter 笔记本),请查看我的 github。

github.com]( github.com/gussie/Spri…)

英国救护车服务与萨克拉门托市火灾的比较分析

原文: towardsdatascience.com/sfd-and-uk-…

“通过从供应方经济学转向需求方经济学找到可持续的解决方案”

执行摘要

1994 年,萨克拉门托市消防局接管了萨克拉门托市的救护车服务,并开始将病人运送到当地的急诊室。该计划取得了巨大的成功,包括缩短了救护车的响应时间,提高了患者护理水平,并通过运输计费为消防部门带来了新的收入来源。然而,在过去的 20 年里,对救护车的需求增加了,而每次呼叫的收入却下降了。需求增加的部分原因是市民对 911 救护车的期望发生了变化,因为 911 救护车可以为任何原因提供到医院的交通服务,包括重新配药。情况变得如此糟糕,以至于有些人经常拨打 911 叫救护车,因为他们有预约,但希望避免汽油和停车的费用。萨克拉门托市消防局(SFD)对救护车日益增长的需求的一贯反应是增加救护车的供应。SFD 从 1994 年的三辆救护车增加到 2016 年的十五辆。然而,增加救护车的成本可能很快超过萨克拉门托维持这一进程的能力。当救护车的供应无法满足需求时,由此产生的工作量会对人员、医院和危重病人造成伤害。 当救护车接到无生命危险的呼叫时,它们无法应对真正的紧急情况。每辆车平均要让一辆救护车停开 2 个小时,而用于救治非危重病人的救护车可能会给其他市民带来危险。继续这种做法对生命的威胁太大了。生命的风险、不断增加的成本和不断减少的收入表明,SFD 应该专注于减少对 911 救护车的需求,而不是增加供应。 我考察了英国的救护车服务,并与我们在萨克拉曼多的政策进行了比较分析。基于英国对优先调度、绩效衡量和高需求的使用,他们的挑战和解决方案与 SFD 的未来息息相关。 英国将绩效评估从“反应时间”转变为“患者结果”,并实施了“听和治疗”、“看和治疗”以及“治疗和运输”政策的解决方案。政策的转变使英国能够将 911 救护车的稀缺资源专用于危重患者,提高了急救护理的有效性和效率。 相对于反应时间,衡量病人的结果看起来像这样;如果一个脚趾疼痛的病人被救护车运送,到达医院时脚趾疼痛,出院时脚趾疼痛,那么就有一个中性的病人结果。反对以下情景;患者因严重气短被救护车运送,到达医院时有轻度气短,出院时无气短,则为阳性患者结果。 英国的演变本质上是从供给侧经济学向需求侧经济学的转变。换句话说,英国不是只关注增加救护车的供应,而是在关注危重病人需求的同时,采取措施减少对救护车的无谓需求。 我知道英国和萨克拉门托的政治环境大相径庭,每个地方都面临着独特的挑战。然而,对英国的一项分析显示,英国是一个非常繁忙的体系,正努力解决与 SFD 类似的问题,并最终通过从供应方经济学转向需求方经济学找到了一个可持续的解决方案。SFD 可以通过探索以下主题来学习英国的行动: 改变优先调度 制定包括每次事故成本、患者结果和投资回报的绩效衡量标准 根据上述绩效衡量标准制定数据驱动的政策决策 通过使用“倾听和治疗”政策来减少响应量 通过“观察和治疗”政策实施护理人员/医生发起的运输拒绝 使用替代形式的运输工具将合适的患者送往诊所。 SFD 勘探之外的任何行动都应包括医疗总监、市律师和工会的集中意见,以讨论该计划的潜在责任、成本和节约。

简介

1994 年,萨克拉门托市消防局接管了萨克拉门托市的救护车服务,并开始将病人运送到当地的急诊室。该计划取得了巨大的成功,包括缩短了救护车的响应时间,提高了患者护理水平,并通过运输计费为消防部门带来了新的收入来源。然而,在过去 20 年中,对救护车服务的需求和对服务的期望增加了,而收入却减少了。对救护车的需求和期望已经从仅用于紧急情况转变为任何需要的到医院的运输。情况变得如此糟糕,以至于人们经常拨打 911 叫救护车,因为他们希望避免油费和停车费。如你所知,病人拨打 911 搭车去医院配药的情况并不少见。 直到 2011 年,英国运营的救护车服务在规模、培训、绩效指标和响应模式方面与 SFD 非常相似。这项研究考察了英国的救护车服务,并与我们在萨克拉门托的政策进行了比较分析。英国经历了非常相似的救护车滥用问题,并在 2011 年颁布了一项名为“转变 NHS 救护车服务”的成功解决方案。 萨克拉门托市消防局(SFD)过去对救护车日益增长的需求的反应是增加救护车的供应。SFD 从 1994 年的三辆救护车增加到 2016 年的十五辆。然而,在过去的 20 年里,增加救护车的费用已经增加。 随着低影响呼叫需求的增加,收取合理费用的能力下降了。大多数 SFD 的救护车使用者都有联邦或州资助的健康保险;医疗或医疗保险。两者都提高了收取救护车运输费的要求,并降低了他们愿意为基本运输支付的金额。 最后,最大的问题是,当救护车致力于无生命危险的呼叫时,它们不能用于真正的紧急情况。每次运输平均需要救护车停运 2 小时。用于不便事件的救护车潜在地将其他公民置于危险之中。继续这种做法对生命的威胁太大了。生命的风险、不断增加的成本和不断减少的收入表明,SFD 应该专注于减少对 911 救护车的需求,而不是增加供应。

英国的救护车服务

英国有 6300 万人口,是世界上人口第 22 大国,面积略小于俄勒冈州。根据世界银行的数据,英国的人均 GDP 为 34000 美元,是世界上第 24 富裕的国家(比美国落后 14 位)。每平方英里 679 人,英国是世界上人口最多的 51 个国家(领先美国 131 位)。英国的救护车服务是国民医疗服务体系(NHS)的一部分,这是一个公共资助的医疗保健系统。救护车服务由 11 个地区性救护车服务机构提供,2009-2010 年的费用约为 19 亿英镑。NHS 由一般税收资助,向英国合法居民免费提供医疗服务。 大部分急救医务人员为(NHS)工作。通常,救护车配备有一名护理人员和一名紧急医疗技术人员(EMT)。英国的健康和护理专业委员会管理他们的护理人员和 EMT,其功能与 SFD 的 EMS 提供商非常相似。 2009-2010 年,救护车服务收到的紧急呼叫(英国 999,SFD 911)共计 640 万次,运送 470 万次。自 2007-08 年以来,英国的呼叫量平均每年增长 4%。与英国其他公共机构一样,NHS 的支出也受到国家审计局(NAO)的审查。NAO 独立于政府,向议会报告公共部门的效力和效率,如国民保健服务。 2011 年,NAO 对救护车服务进行了一次审计。其结果是对救护车服务进行了根本性的改革,目标是增加对危重患者的护理,同时每年节省约 7500 万英镑,成本下降约 4%。【2011 年之前,救护车响应分为三类;A-立即危及生命;B-严重但无生命危险;或 C-不会立即严重或危及生命。这些类别决定了响应时间目标,其中类别 A 要求响应时间在 75%的情况下少于 8 分钟。 NAO 2011 年的审计建议改变业务实践,尝试将适当的响应模式与需求相匹配。结果是三层系统;听与待,看与待,看与传达。本质上,审计建议接电话的人使用决策算法对电话进行分类,然后将结果类别与一个新的响应模型配对。例如,C 级呼叫将变成“听到并处理”呼叫。呼叫接听者会听取投诉,并提供除紧急救护车之外的替代解决方案。 此外,英国制定了新的绩效衡量标准,重点关注临床护理质量指标和效率节约目标。临床护理质量指标包括心肌梗死、心脏骤停和中风的结果。效率节约包括每名救护车工作人员的护理费用和每起事故的费用。

对比分析

由于英国的优先调度、性能测量以及来自非生命威胁呼叫的呼叫量增加,它与美国的密集城市(如萨克拉门托)非常相似。在 2011 年之前,英国将紧急呼叫的紧急程度分为三组:A 级-立即危及生命,B 级-严重但不立即危及生命,C 级-不立即严重或危及生命。这些类别确定了响应时间的目标,但最终未能确定响应的类型。为了减少总体响应时间,接听电话的人将每个电话作为 A 级开始,在真正审查电话之前假设最坏的情况。即使接电话的人在问了更多的问题后重新对电话进行了分类,救护车的反应已经开始了。换句话说,英国仍然会向 C 级呼叫发送最昂贵的响应模型,他们只是不希望他们那么快到达那里。结果,社区为非紧急电话付出了高昂的代价。 即使 SFD 的分类是相反的,D 级是威胁生命的,而 A 级不是立即的,SFD 使用相同的模型回应。像 2011 年之前的英国一样,每个呼叫都是在询问之前作为威胁生命开始的,每个响应都使救护车停止服务,这是最昂贵的响应模式。相比之下,在 2011 年审计后,英国停止了优先调度,并开始在发送和救护车之前审查呼叫,以更好地满足需求。因此,英国估计每年可节省 1 亿至 2.8 亿英镑,并改善患者的预后。 SFD 继续优先派遣的驱动力与英国相同;业绩计量。英国和 SFD 将每个呼叫视为威胁生命的原因是为了在 it 绩效评估中获得最高分;响应时间。

绩效指标

2011 年之前,英国的主要绩效指标是从电话响起到救护车到达现场的反应时间。响应时间驱使调度员通过将每个呼叫归类为威胁生命的呼叫来使救护车尽可能快地移动。意识到这一缺陷后,英国将绩效指标转换为病人结果、服务成本和不包括电话呼叫的响应时间。SFD 也有同样的缺陷,因为它衡量效率的主要指标是包括电话呼叫在内的响应时间。SFD 缺乏任何病人护理或成本效益表现措施,导致 SFD 每次都使用最昂贵的响应模型,而没有跟踪因所有救护车都被调度而错过的威胁生命的呼叫。 需求 与 SFD 类似,英国的救护车系统的呼叫量稳步增长。在 2007-08 年,英国救护车服务的呼叫量上升了 9 %,导致服务成本上升了 19%。结果,每次通话的费用增加了 10%。众所周知,SFD 的通话量和费用也在稳步增长,但是,自 2011 年审计以来,英国已经实施了多项计划来降低需求。 英国通过通话周期中的三个点来管理需求;闻而治,见而治,见而运。 heard and treat 允许调度员通过电话将呼叫转介给该地区的临床医生,而无需救护车。“聆听和治疗”减少了派遣次数,迅速处理了问题,救护车容量得到了更好的利用,救护人员受到的影响更小,并且患者被视为离家更近。最后,为了安全起见,听和治疗干预偏于谨慎,如果对严重性有任何疑问,发送一个响应模型。 SFD 没有切实可行的解决方案兼容听力和治疗。因此,SFD 的呼叫量持续增加,为病人提供的简单解决方案被推迟,救护车越来越少,救护人员超负荷工作,病人经常被运送到城镇的另一边。 观察和治疗使救护人员能够在现场解决事故,而不需要运送到急诊室。观察和治疗减少了救护车的总呼叫时间,有效地利用了人员培训,减少了对急诊室的影响,减少了治疗时间,并使患者离家更近。虽然从技术上讲,如果病人拒绝被运送,SFD 可以在现场“观察和治疗”病人,但这样做有很大的障碍。首先,病人必须坚持“看和治疗”政策,并签署一份法律表格,声明他们拒绝医疗建议,并坚持留在家中。第二,SFD 的非正式政策“你打电话,我们拖走”使这种思维定势制度化,即不管病人是否抱怨,都要把他们送到医院。SFD 的正式和非正式政策减少了对危及生命呼叫的救护车可用性,增加了急诊室的影响,增加了治疗时间,并可能将患者转移到整个城市。 除了英国实施的“倾听和治疗”政策和“观察和治疗”政策确保有更多的救护车可用于有生命危险的呼叫,并配备休息更好的医护人员之外,英国的“观察和运输”基本上与 SFD 相同。此外,英国还开通了一个“111”号码,为那些没有生命危险的来电者提供了另一个选择。“111”号码有助于确保有紧急需求的患者获得帮助,同时保证救护车资源可用于医疗紧急情况。 SFD 在 2010 年实施了类似的系统,名为“311”。然而,“311”只处理城市服务,如供水和街道,没有医疗需求的能力。缺乏“111”类型的系统迫使所有医疗请求通过 911 系统,并最终在最小的医疗问题上派遣救护车。 最后,英国已经建立了合作伙伴关系,以减少特定患者群体的来电。例如,跌倒占英国救护车呼叫的 10%。救护车服务部门和社会服务部门在一些地区建立了跌倒小组,为有重复呼叫风险的人提供建议和预防服务。 SFD 没有真正的合作伙伴来帮助重复拨打 911 的用户,例如该地区的无家可归者。许多无家可归者需要医疗服务,但不是三级救护车和急诊室。与英国等社会服务机构合作,转介高危患者,可以显著降低需求。

考虑

责任 应量化和审查因“倾听和治疗”政策或“观察和治疗”政策导致的延迟响应的责任。英国的医疗保健系统与美国的不同之处在于,它是一个由公共税收资助的国家医疗保健系统。由于延误治疗或运输的政策,患者遭受额外伤害或死亡的情况下的责任将在全国范围内蔓延,与萨克拉门托相反,诉讼可能会使萨克拉门托市面临巨额责任。应根据呼叫量和患者接触率来估计诉讼的可能性,以比较此类保单的潜在损失和潜在节省。

公众形象 改变消防部门的公众形象也是一个问题。目前,如果市民拨打 911,消防部门会不顾需要做出反应。这种一致性在社区和消防部门之间建立了信心和信任。一项新的“倾听和治疗”政策,即消防部门不向小型医疗救助派遣响应单位,可能会对社区支持和资金产生负面影响。

政治环境——劳工/行政人员 工会可能会因“倾听和治疗”或“观察和治疗”政策导致的来电量减少而感到威胁。工会的潜在反应可能看起来与直觉相反,因为这将减少其成员的工作量,但也可能减少对员工的需求,从本质上减少工作岗位。respond 模型中的任何政策变化都应提交给劳工,并最终得到劳工的认可。

如果任何新政策被证明在责任、信誉或政治货币方面更昂贵,它们可以很容易地被取消,并被当前的业务形式所取代。此外,新的政策可以分开,单独实施。例如,如果“听取并处理”策略耗费了太多的社区善意,则可以将其删除,并替换为该类别呼叫的“查看并处理”。

结论 目前,SFD 的功能与 2011 年前的英国非常相似;通过使用优先调度和依赖响应时间作为性能度量。然而,在 2011 年,英国发展并实施了新的程序,以减少需求,降低成本,并提高病人护理的质量。SFD 应该密切关注英国的救护车转型,并考虑这些政策是否适合我们的环境。

[## SFD 睡眠研究

“众所周知,一晚睡眠不足会对表现产生不利影响,并持续降低……

medium.com]( medium.com/@esaylors/s…) [## 量化负面:消防服务的真正价值

我们在公共安全领域面临的最大挑战之一是以可量化的方式阐明我们的价值。这个挑战是…

medium.com]( medium.com/@esaylors/q…)

Shab Dev 故事#01:试图通过反向投影找到梯度下降的矩阵形式

原文: towardsdatascience.com/shab-dev-st…

如果我用错了一些数学概念,我提前道歉,并请你告诉我是哪些,以便改进这篇我主要为自己写的文章。

如果我们想要实现使用梯度下降训练的神经网络,学习如何执行反向传播是早期步骤之一。然后,如果我们想在游戏中更认真一点,我们将我们的向前传球矢量化/矩阵化,因为这使代码更清晰、更有效。现实很快赶上我们,因为由于矩阵和矩阵乘积,我们向后传递的链式法则不再起作用。因此,我们调用我们的神奇技能,通过重新排序表达式使矩阵的维度匹配来解决整个问题。至少,我是这么做的。

在这篇文章中,我们试图看看我们用矩阵演算得到的矩阵形式的梯度下降的表达式是否与我们使用某种魔法得到的表达式相同。这不是通过反向投影对梯度下降的介绍,我认为它主要面向那些试图理解数学的开发人员(没有数学背景)。

有什么问题?

假设我们有一个两层网络(一个隐藏,一个输出),并且我们使用矩阵来表示它的参数(即权重)作为它的输入,并且我们使用矩阵值激活函数:

这里,X 是包含小批量输入的矩阵(行是实例,列代表特征)。W1 和 W2 是分别包含属于隐藏层和输出层中所有神经元的所有权重的矩阵(一列代表一个神经元,下面的行是其权重)。较低的 sigma σ是我们的矩阵值激活函数(例如,它基本上将 sigmoid 函数应用于所有输入矩阵元素)。现在,如果我们想计算(小批量)梯度下降步骤的 W1 的更新值,该怎么办呢?

我当时做的是尝试对一些损失函数(例如 MSE)取 w.r.t 到 W1 的导数。我的结局是这样的:

This chain rule is not sound.

这根本行不通,事实上,矩阵产品行不通,因为矩阵没有好的维度,这是我当时不知道的事情,大约一年前😕。我试着反过来表达,试着添加 Hadamard 产品,但这些东西都不起作用。然后,我学习了矩阵转置操作,并开始变魔术般地使矩阵形状和乘积起作用,同时确保我将得到标量形式的损失函数 w.r.t W1 的权重的偏导数的等价表达式。这给了我:

The delta of W1 given after backprop.

几个月过去了,不久前我开始研究一个玩具 OCaml 神经网络库,即使我的数学水平在一年内略有提高,我自己也无法用微积分为上面的表达式找到真正的数学依据。即使是在数学方面,我认为一个开发者不应该在没有尝试理解的情况下使用如此基础的东西。Andrej Karpathy 的 “是的,你应该理解 back prop”让我决定,我应该调查一个更好的理由来寻找平静。

寻找表达矩阵导数的方法

我们这里真正的问题是,有没有办法把一个成本函数 w.r.t 对 W1 求偏导数,更一般地说,有没有办法把一个矩阵值函数 w.r.t 对一个矩阵求导?

What’s the derivative?

我们可以说 F(X) w.r.t 对 X 的导数是一个具有 X 形状的矩阵:

Matrix derivative (wikipedia)

这个定义有些有趣。矩阵具有 X 的形状,这意味着我们的参数的更新将是直接的。然而,这个公式有一个缺陷:

是的,它不允许链式法则,没有链式法则->没有后退。

我们需要一个链式法则,这就是 JR. Magnus 和 H. Neudecker 在 矩阵微分学(ch9.3) 中给我们提供的。他们争论一些不好的符号和一个表示矩阵导数的好符号。他们基本上说对矩阵取矩阵值函数 w.r.t 的导数有些不一致,并主张将雅可比矩阵推广到矩阵:

Formula 1. vec is the vec operator

如果 F(X) 具有形状 p x q 并且 X 具有形状 m x nvec(F(X)) 将是具有形状 pq 的列向量。 转置(vec(X)) 将是具有形状 mn 的行向量,因此雅可比矩阵将具有形状 pq x mn 。虽然雅可比矩阵不完全是对 X 的偏导数,但它包含了我们获取它所需的所有信息,最重要的是,它允许一个链式法则:

Formula 2. Derivative of a composition

注意我们也可以说,我们正在寻找的导数是一个四阶张量(正如维基百科所指出的),但我没有找到任何可理解的资源。

逐步展开链式法则

警告/!这部分几乎只包含数学,可能不是很有趣。 现在我们有了一种表达矩阵导数的方法,我们可以陈述我们目前正在寻找的东西:

这个雅可比矩阵将为我们提供更新 W1 以进行梯度下降所需的一切。现在,让我们一步一步地展开链式法则:

Step 1.

对于第一个块,我们可以看到我们正在寻找一个表达式的导数,该表达式只对矩阵 U(平方减法的占位符名称)执行元素级标量乘法。我们知道对于标量来说axw . r . txa(a为常数),但是对于矩阵来说我们有:

Formula 3. The derivative of the identity function is the identity matrix(dim is dimension of a vector).

也就是单位矩阵。因此,我们只需:

然后,对于第二块,我们寻找平方矩阵 V 的导数(平方是指元素乘积,而不是矩阵乘积):

Step 2.

为了表示矢量化 Hadamard 乘积的导数,我们将使用允许我们将其表示为矩阵乘积的属性,以便我们可以使用众所周知的乘积规则导数:

The Diag function takes a row vector and puts its elements along the diagonal of a square matrix full of zeros everywhere else.

Formula 3. Vectorized Hadamard product expressed as a matrix product.

Formula 4. Derivative of vectorized Hadamard product using formula 3

作为 A,在我们的例子中 B 和 X 都等于 V;因此,表达式简化为:

正如你在下面看到的,我们已经可以开始简化表达式了,但是让我们一次只做一件事。

Step 3.

对于第一步,我们可以看到我们正在对减法求导,这是我们需要的明显公式:

Formula 5. Derivative of subtraction

然后经过简单的应用,我们得到:

在展开链规则的损失函数部分后,我们的表达式看起来是这样的:

表达式已经开始变得相当长了,所以让我们把链式法则的展开部分放在一边,把注意力集中在前馈方面,一步一步地推导它:

Step 4.

由于σ(A)是一个基于元素的函数应用,因此我们有:

Formula 6. Derivative of element-wise function

其中σ'是它的导数。

Step 5.

下一步,我们想要一个矢量化矩阵乘积的导数,那么我们该怎么做呢?首先,让我们介绍一些公式:

Formula 7 & 8. Vectorized product of 3 matrices and its derivative.

这些公式的有趣之处在于它们允许使用已知的矩阵。但是当我们只有两个矩阵的乘积时,我们如何把它们应用到我们想要的偏导数上呢?这里有两个“窍门”:

nrow(X) is the number of rows in X

ncol(X) is the number of columns in X

我们在表达式的左侧添加一个带有单位矩阵的乘积,这允许我们使用上面的公式:

我们可能会问,是什么阻止了我们对两个矩阵之间的矢量化矩阵乘积求偏导数?好处是导数可以用已知的矩阵来表示,也因为我们不需要自己去推导。

Step 6.

这一步非常简单,因为我们重用了已经使用过的公式(公式 6)。现在最后一步:

Step 7.

为了使用我们的公式(8 ),我们需要 W1 在中间,为了做到这一点,这次我们添加一个矩阵乘积,单位矩阵在右边。既然我们已经展开了所有的前馈侧,我们可以看一看整体表达式:

这相当大,所以让我们尽可能地减少它:

Reducing the expression.

请注意,我们可以继续减少,例如一个单位矩阵的转置本身,诊断可以合并等…

更新权重

好了,现在我们已经展开了链式法则,剩下一个雅可比矩阵,我们如何使用它来更新 W1(以及我们的参数)?

A Jacobian matrix.

如你所见,每一列都包含向量的一个元素的导数,因此为了得到这个元素的“总”导数,我们需要对行求和,我们可以用一个行向量来完成,这个向量包含的列数与雅可比矩阵包含的行数一样多:

它给出了一个行向量,包含 W1 的每个元素的总导数 w.r.t。

为了更新 W1,我们需要得到一个具有相同形状的矩阵,因此我们需要的是 vec 的反函数:

The inverse of vec reshape a column vector into a matrix.

现在我们有了一个与 W1 形状相同的矩阵,其中包含损耗 w.r.t 对每个矩阵元素的导数。注意,我们已经转置了行向量,因为 vec 输出一个列向量。

最后,让我们看看更新 W1 的最终表达式:

让我们回忆一下通过匹配尺寸找到的表达式:

我们可以推导出表达式,并看到它们在理论上是等价的(我已经这样做了),但这篇文章已经包含了很多数学,我不确定它是否值得。但是不要担心,我们将在实现中从数字上检查它们是否等价。

回到背面投影

到目前为止,我们专注于展开链规则,但是永远展开链规则不是反向传播,反向传播是一种算法,而不是公式,在某种意义上,它是它的计算效率的化身。反向传播是从损失函数误差开始,通过层和神经元将“误差”反向传播到权重。

回想一下,下面是通过匹配尺寸获得的反投影形式:

和更新语句:

我们用矩阵运算找到的反投影形式是:

反向传播误差背后的直觉是,首先,我们有损失函数级别的误差,也就是说,在 *H(X)中损失随时间变化多少。*然后从输出层开始,回到第一个隐藏层,我们计算当前层神经元的误差。这是通过在下一层的误差(除了输出层 btw,因为误差来自损失函数而不是层)和激活函数相对于该层输入的导数之间执行矩阵乘积来完成的。然后对于这一层的权重,w1,总误差 w.r.t 权重是当前层的神经元及其输入的误差的乘积。

下面是我们的两层神经网络的反向传播步骤:

然后更新层的权重:

履行

以下要点是通过 XOR 问题的两种反向投影形式使用梯度下降训练的神经网络的数字实现。学习率为 1,我们不将 deltas 除以 1/4,以使神经网络收敛更快。 np.kron 是 Kronecker 乘积, np.diag 是 diag 函数, np.eye 返回一个单位矩阵。

我们应该使用哪种反投影形式

我发现矢量化的导数更容易使用,也更有教育意义;你可以看到,我们从来没有解决一个矩阵元素 Aij,我们所做的就是展开链规则。然而,当然,我们应该使用通过使形状匹配找到的形式,因为它在内存和性能方面更有效。诊断矩阵和克罗内克产品的成本很高。

结论

很多人担心人工智能,担心它可能被用于不良目的,但我认为我们不应该忽视这样一个事实,即开发人员将人工智能算法用作黑盒也可能会无意中导致人工智能做坏事。这就是为什么我认为我们,开发者,至少应该试着理解模型是如何工作的。不需要成为一个数学家伙,你甚至可以阅读论文,并向你的朋友谷歌寻求帮助!现在在这个领域所做的事情是惊人的(DRL,GANs… ❤).开始永远不会太晚,我个人只是在去年看了钢铁侠电影后才对神经网络和人工智能产生了兴趣😅。

对贝叶斯优化的浅见

原文: towardsdatascience.com/shallow-und…

Sample data increases & Curve fitting gets improved.

预先知道的硬性条款

高斯过程

无噪声全局优化

噪声全局优化

采集功能

代理函数(/高斯过程)

随机的

贝叶斯回归

什么是高斯过程??

这是一个贝叶斯回归

——这是一种精确插值回归的方法。

——是线性回归的自然推广

  • 它指定了一个分配 功能

B 想象一下,如果我们不知道一个函数,我们通常会做什么?当然,我们会尝试用一些已知的先验知识来猜测或近似它。同样的想法背后是后验概率。这里的标准是我们有观察,其中的数据是一个记录接一个记录而来(在线学习),所以我们需要训练这个模型。训练好的模型显然会服从一个函数。我们不知道的那个函数将完全依赖于学习数据。所以我们的任务是找到最大化学习模式的超参数

我们这里有一些变量。一个是观察记录(特征+标签),第二个是参数,定义模型。

例如。

(比如说中的 like y = MX+c;m & c 是参数,y,x 是变量-标签&特征。我们有义务找到这些 m & c 来学习我们最好的模型)

贝叶斯优化有助于在众多模型中找到一个最佳模型。我们正在进行交叉验证。但是我们要在一个预先列表上尝试多少个样本来从中选择一个最好的模型。这就是为什么贝叶斯方法通过减少计算任务来加速这个过程,并且不期望人们帮助猜测数值。这种优化技术基于随机性概率分布。****

用我的话来说,第一个观测点来到模型。我们划清界限。那么下一点就来了。我们把这两点连接起来,从之前的曲线画一条调整过的线。第三点来了,所以我们画一条非线性曲线。当观察点的数量增加时,可能曲线的组合数量增加。这类似于统计学中的抽样定理,我们从样本参数中估计总体参数。

我们绘制了另一条直方图曲线以及非线性目标函数曲线。这表明,对于给定的目标函数曲线,在所有过去的观察值中, max 值将出现在哪里(找到 arg max)。

Histogram Curve, that is the Acquisition Function (includes different acq functions).

我们这里的目标是而不是用尽可能多的观察点将目标函数(未知)完全确定为一条曲线。相反,我们需要最大值的arg(max 函数的索引)。所以我们需要将注意力转向直方图函数。当目标函数曲线的可能组合增加时,直方图形成描述采集函数的分布。这是贝叶斯优化背后的思想。

记住,我们的目标,首先需要确定最大值的 arg,其次选择下一个最好的最大值,它可能在函数曲线上。

Many Random Ensemble Curves that we could draw from the above observed black samples.

我们在图中看到许多摇摆曲线。这告诉函数曲线的范围下一个点可以位于给定采样点的。方差给出了函数曲线上平均值的分布。

当我们通过将观测值叠加在未知函数曲线上进行估计时,那么这就是无噪声优化。但是当我们需要考虑噪声优化时,我们的未知函数会将观察点略微除以噪声误差值。

我们在许多测量下定义了采集函数,其中一些在这里,

1。PMAX

2。IEMAX

3。MPI =最大改善概率

4。MEI =最大预期改善值

5。UCB =置信上限

6。GP-对冲

MM =最大平均值

MUI =最大上限区间

采集标准 :- 接下来应该选择哪个样本

替代函数/响应面(模型)

  • 基于先前未观察到的点的后验超过。****
  • 参数可能基于先验。

采集功能:-

测量的是 改善的概率(PI)。

μ + =过去点中最佳 观察到的值。

我们正在寻找未知函数的最大值。但是在我们以往的观测当中,下一个 可能的最大值应该大于当前的最大观测值。

ε = 非常小的任意值表示高斯分布中的点。

我们的目标:-

Find the arg of the max of f(X)

PI(x) =发现未知函数下一个最大值高于最大观测值加上一些偏差的概率。

这只是高斯分布与最大观测值的阈值边界的 1D 积分。

对于未知函数中的每个点,我们考虑在每个点样本上垂直放置一个高斯分布。这个分布在未知函数的值上有均值&某个确定的方差。

我们把这个标准化在上面的 库什纳 1964 年 方程中。

探索&开发是解释一种现象和优化算法的常用术语。这两者之间存在一种权衡。因此,我们使用“采集函数”来平衡这种折衷。

我们的下一个选点(x ) 应该有高均值 ( 开采 ) & 高方差 ( 勘探)。

Choosing our next possible max point, with trade-off between Exploration & Exploitation.

因为我们在寻找高方差分布中的下一个点。这意味着探索 x 点。

高均值意味着我们选择了具有高偏移/偏差的下一个点(x ),因此我们应该给出一些开发权重来降低下一个点的均值。

The way we approach Bayesian Optimization.

上图给出了我们算法的一些直觉。红色曲线是我们的真实目标函数曲线。可惜我们不知道这个函数和它的方程。所以我们要用高斯过程来近似它。在我们的采样点(此处给出 4 个样本)中,我们绘制了一条与我们观察到的样本相符的直观/自信曲线。因此绿色区域显示了置信区域,在这里最有可能定位曲线点。根据上述先验知识,我们确定第二点( f+ )为最大观测值。所以下一个最大值点应该在它上面或者等于它。我们在这里画一条蓝线。下一个最大值点应该在这条线以上。因此,从 f+置信区域的相交点**,我们可以假设 f+ 以下的曲线样本应该与我们寻找 arg max 的目标一起被丢弃。因此,现在我们已经缩小了调查范围。对下一个采样点继续同样的过程。******

Data sample increases; comparison of different Acquisition functions with Curve Fitting.

参考:-

用机器学习塑造电子商务

原文: towardsdatascience.com/shaping-up-…

机器学习和人工智能已经流行了几年,但这个概念正在优步科技领域之外迅速变得熟悉并引起好奇心。这是有充分理由的。

人工智能是机器能够以我们认为“智能”的方式执行任务的更广泛的概念。机器学习是人工智能的一个当前应用,它基于这样一个想法,即我们应该能够让机器访问数据,并让它们自己学习。

你可能知道也可能不知道,机器学习已经影响到你的日常生活,几乎无处不在。你肯定已经在亚马逊上看到过它的概念,以及它的“个性化产品建议”。脸书用面部识别软件给照片中的人做标记。另一方面,你将在亚马逊上看到的另一个新颖的想法是它的“Dash”按钮,这是通过一个叫做物联网的概念的应用而成为可能的。

为你的电子商店实现机器学习技术是一个相对较新的可能性。然而,在过去的几年里,它仍然很容易被大大小小的商店老板们买到。任何知名的网上商店都不会考虑放弃 ML 的好处。

这是一颗神奇的子弹,把猜测工作从无限的营销活动中抽离出来。想象一下你的商店变成了一个水晶球。

除了最初的设置,一旦收集到足够的数据来使用它的算法,你就会开始享受销售的增长。当然,您需要花时间进行一些微调和维护,并且您可能希望及时添加更多功能。但是根据你的市场和产品,你的收入可能会上升 5-20%。

实施它的技术就像雇用一个销售代表。只是这个销售代表是沉默的,完全看不见的,小心翼翼地不被注意。更重要的是,这位销售代表不仅总是彬彬有礼,还能节省客户的时间。他们会很高兴通过网站上的个性化搜索结果和推荐块更快地找到想要的产品。在销售代表的亲自推动下,客户肯定会增加购买。此外,保留率更高。

当今电子商务中最常见的用例:

  • 个性化产品建议
  • 废弃购物车回收电子邮件
  • 搜索建议
  • 再营销和相似定位
  • 动态定价

个性化产品建议

亚马逊大约 50-60%的页面元素由产品和广告组成,这些产品和广告由机器学习算法组合在一起,产生个性化的产品推荐。这些街区已经成为这个地方的自然组成部分,并且增加了巨大的价值。

废弃购物车回收电子邮件

通过实施废弃购物车回收电子邮件,有可能进一步增加您的销售额。您的客户在废弃购物车中的相同产品将在他们的收件箱中提供给他们,这是另一个“水晶球”式的时刻。这些电子邮件还可以包括与现场推荐模块相同的个性化产品建议。

2017 年第 3 季度 SalesCycle 的一些全球统计数据:

  • 平均 76.8%的购物车被丢弃
  • 客户点击了 31.4%的购物车恢复电子邮件
  • 在这些被点击的电子邮件中,有 28.3%导致了销售
  • 11.6%的访问者继续在网站上购物

再营销和相似定位

个性化的产品推荐可以更进一步,超越你的网站和他们的收件箱,到达客户那里。和跨多个设备。与现场购物建议和电子邮件重新营销一样,你可以根据访问者浏览过的产品来确定他们的个人目标。此外,你还可以根据长相相似的人群吸引新客户。

搜索建议

大型零售商有数百万份产品清单。以易贝为例,它有 8 亿多种产品。当你登陆一个网站开始搜索产品时,过滤可能会让你失败,因为仍然有太多的选项需要浏览。

如果你的产品目录那么大,机器学习就变得无价了。ML 将根据您的性别、年龄和购买历史等因素对搜索结果进行排名。在它的帮助下,搜索结果将个性化,而不仅仅是匹配你用过的短语。此外,它还具有类似于谷歌的功能,可以在你打字时提供实时建议。

动态定价

航空公司是第一个接受动态定价的,比如瑞安航空。价格一天变化多次,所以如果你没有在第一次访问时预订,一旦你回到网站,你可能会遇到新的价格。价格波动可能意味着赢或输,取决于供求关系。

ML 如何在后台工作?

既然我们已经讨论了可能的使用案例,我们将很快看看引擎盖下,个性化和预测实际上是如何发生的。机器学习是一个概念,计算机算法通过无数次接触这些问题来解决问题,目的是找到解决方案。

ML 算法背后的逻辑是什么?通俗地说,

如果一个计算机程序在某类任务 T 和性能测量 P 上的性能(由 P 测量)随着经验 E 而提高,则称该程序从经验 E 中学习

如果你有点熟悉谷歌搜索的工作方式,那么你知道你会得到基于无限复杂算法的结果。这些考虑到你的位置,语言,以前的搜索历史和许多其他参数。就其核心性质而言,机器学习是类似的。它运行在智能和自我学习的预测 API 上。

机器学习分为三种类型:

  • 监督学习意味着期望的结果已经很清楚,样本数据已经标注了正确的答案。然后对算法进行“训练”,当输入新数据时,ML 会根据过去的经验给出结果。
  • 无监督学习意味着算法没有得到带有正确答案的预先标记的数据。例如,如果给定 ML 来随着时间分析一种语言,则算法开始检测模式。
  • 强化学习类似于无监督学习。没有提供带标签的数据,但分析后对结果进行了分级,这加强了预期的结果。

经过验证的结果表明,实施 ML 和 AI 后,收入至少会增加 60%。

新的电子商务浪潮和数据驱动的营销方法预示着电子零售商的新阶段。将持续评估当前状态。如果技术不再是限制因素呢?您的组织能够以多快的速度调整其策略以适应单个客户的需求?

分享你的 SageMaker 模型

原文: towardsdatascience.com/sharing-you…

本文原载于【blog.zakjost.com】

AWS 最近发布了 SageMaker ,它可以帮助你从零开始构建模型,到部署和扩展这些模型以用于生产。本文将假设您已经在 SageMaker 中运行了一个模型,并希望授予对另一个 AWS 帐户的访问权限,以便使用您的模型进行预测。

从父帐户向子帐户授予(有限)权限

在较高层次上,您需要创建一个有权调用端点的角色,然后授予子帐户对此角色的访问权限。为此,您需要孩子帐户的 12 位帐户 id。然后,按照以下步骤操作:

  • 登录父帐户控制台并导航到 IAM 服务
  • 创建名为“SageMakerExternalInvokeEndpoint”的新策略。粘贴以下策略。请注意括号中您需要输入的数据。
*{ "Version": "2012-10-17", "Statement": [ { "Action": ["sagemaker:InvokeEndpoint"], "Effect": "Allow", "Resource": "arn:aws:sagemaker:*:<parent   account_id>:endpoint/<endpoint name>” } ]}*
  • 单击“角色”并创建“SageMakerExternal”角色
  • 选择“另一个 AWS 帐户”并粘贴子帐户 id
  • 附加新的“SageMakerExternalInvokeEndpoint”策略(单击“策略类型”箭头“客户管理”,然后选择“SageMakerExternalInvokeEndpoint”)
  • 单击新角色并复制角色 arn,这将在后面的步骤中使用。

向子帐户授予“承担角色”策略

本部分将授予承担刚刚由子帐户创建的角色的能力。您将需要上述最后一步中的角色 arn。

  • 使用子帐户登录到控制台-> IAM
  • 如果您没有群,请创建一个。我把我的叫做“SagemakerTester”。如果您有现有用户,您可以将他们添加到组中。
  • 单击“权限”选项卡,展开“内联策略”箭头,然后创建组策略。添加此策略:
*{“Version”: “20121017”, “Statement”: { “Effect”: “Allow”, “Action”: “sts:AssumeRole”, “Resource”: “<SageMakerExternal role arn copied above>“ }}*

使用 Boto3 中的假定角色

现在权限已经配置好了,您需要能够在尝试访问端点时承担这个角色。如果您使用的是 Boto3,代码将如下所示:

*# Get temporary assumed role credentialsclient = boto3.client('sts') #assumes you’ve configured boto with normal child account credentialsresponse = client.assume_role( RoleArn="<SageMakerExternal role arn copied above>", RoleSessionName="testSessionName", # this is arbitrary ExternalId=‘<parent account_id>’ )# Create boto client using temp credentialsclient = boto3.client( 'sagemaker-runtime', aws_access_key_id=response["Credentials"]["AccessKeyId"], aws_secret_access_key=response["Credentials"]["SecretAccessKey"], aws_session_token=response["Credentials"]["SessionToken"],)# Invoke endpointclient.invoke_endpoint( EndpointName=<endpoint_name>, Body=<data>)*

鲨鱼攻击—解释泊松回归的使用

原文: towardsdatascience.com/shark-attac…

没有什么比鲨鱼袭击更能破坏佛罗里达群岛的理想夏季游泳了。除了令人印象深刻的背鳍、巨大的“白色”牙齿和普遍的恐慌之外,过去三十年间鲨鱼袭击对佛罗里达海岸线居民的涌入有多大影响呢?你会在哪里寻找数据?更重要的是,数据科学家会选择哪种算法来预测结果,为什么?

佛罗里达自然历史博物馆保存了国际鲨鱼袭击档案,记录了自 1957 年以来世界范围内无端的鲨鱼袭击(以及由此造成的死亡)。使用这些数据,我们可以通过检查攻击率的模式,使用泊松回归来预测沿海人口的变化,而不是人口变化与攻击次数直接相关的可疑假设。抛开双关语,让我们来看看什么是泊松回归,为什么这种方法是合理的选择,它的假设是什么,以及在依赖这种方法时我们应该采取什么预防措施。

泊松回归是回归分析的广义线性模型形式,由西蒙·丹尼斯·泊松于 1837 年提出,以支持他探索错误刑事定罪原因的工作。泊松回归,在处理分类数据时也称为对数线性模型,现在在大多数分析包中很常见,建议在需要对计数数据建模或构建列联表时使用。例如,这种模型可以有效地用于预测推特数据的转发,或各种操作条件下核电站的故障,或再次预测可识别的学生群体的考试成功率。

*这个模型的假设是什么?*泊松回归类似于逻辑回归,因为它也有一个离散的响应变量。该模型假设其期望值的对数可以通过未知参数的线性组合来建模。记录的事件以已知的恒定速率发生,并且与自先前事件以来的时间无关。更重要的是,该模型假设期望值(响应变量)具有泊松分布,而不是正态分布。换句话说,响应变量的可能值将是 0、1、2、3 等非负整数。

*泊松回归有哪些用例?*该模型可用于可观察事件随时间随机发生的随机过程。事件在给定时间间隔内至少发生一次的可能性与每个时间间隔的长度成正比。在每个时间间隔内,该事件发生两次或多次的可能性应该很小,如果有的话。接受这些假设,我们可以认为在固定的时间间隔(距离、面积或体积)内事件发生次数的概率分布符合泊松分布。

*使用泊松回归模型时,我们应该采取什么预防措施?*我想到了测试人群的三个潜在特征。作为一名数据科学家,您应该警惕数据中潜在的异构性——是否有多个流程生成预期值?过度分散是需要考虑的第二个异常现象——拟合模型的方差是否大于您假设的预期值?最后,数据样本是否反映了分散不足,即由于相邻子群的自相关,数据是否比二项式分布中预期的变化更小?

在建议的鲨鱼袭击案例中,泊松模型的选择是合理的,因为这种可怕事件相对罕见。正如 Jeffrey Simonoff 所建议的,我们可以应用一个广义线性模型,假设泊松模型使用对数链接来连接泊松均值μμ和随时间变化的速率。将拟合的平均值除以人口规模得到一个比率模型。为了提高模型的准确性,我们可以在种群方程中为种群大小的对数引入一个偏移项。因此,由于使用了对数链接,预测的时间趋势遵循指数模式,而不是线性模式。

Jeffrey Simonoff in his book Analyzing Categorical Data produced this summary output for the generalized model plus a transformed version — in this case the model predicts that the rate of shark attacks is rising by approximately 3% a year. [ii]

商业分析实践是商业分析学院的核心和灵魂。在我们在巴约纳的 暑期学校,以及我们在欧洲的 大师班,商业分析研究所专注于数字经济、数据驱动的决策、机器学习和视觉通信,将让分析为您和您的组织服务。

Lee Schlenker 是 baieurope.com 商业分析研究所的教授和负责人。他的 LinkedIn 个人资料可以在 www.linkedin.com/in/leeschle…]( www.linkedin.com/in/leeschle… twitter.com/DSign4Analy… Twitter 上关注我们]( twitter.com/DSign4Analy…)


【我】 www.floridamuseum.ufl.edu/shark-attac…

西蒙诺夫,杰弗里,2003,分析分类数据,施普林格

Shazam 高架线

原文: towardsdatascience.com/shazam-the-…

高铁每年有超过 400 万游客。今年春天,高线画廊举办了他们最新的艺术展览, 突变。我们认为这将是一个尝试新概念的完美项目,Shazam for Objects。 HBO 的《硅谷》以他们最近的《Shazam for Food》报道了这一点。所以,让我们为艺术建造一个 Shazam,把高线的突变作为我们的试点项目。

这个概念很简单,拍一张艺术品的照片,查看更多关于艺术家和艺术品的信息。

构建工具

首先,我们需要训练一个模型来识别每一件艺术品。

An example of the images we used to train the model

我们已经用 Clarifai 的定制模型训练为客户项目构建了定制模型,并得到了一些鼓舞人心的结果,所以我们将使用它来创建分类器。下一步是收集训练数据来训练高线模型。分类器需要每个艺术品的标记图像。

Clarifai’s Custom Model Visual Interface

我们通过走高线并对每件艺术品拍摄大量照片来收集训练数据。我们训练了模型,经过一些简单的调试,我们能够对大多数艺术品进行 90%以上的可靠分类。

Prediction confidence is shown in the top right of this image

既然我们的分类器正确地识别了艺术品,我们需要为人们建立一个用户界面来使用分类器。

使其成为产品

最好的平台是像 Shazam 这样的独立增强现实应用程序,但我不想只为高端产品下载应用程序。让我们使用一个现有的平台,人们将在那里分享他们的照片。我们将使用 Twitter 来证明这个概念。如果一个人用# HighlineNYC 标签发推文,我们将运行定制模型,看看他们是否在寻找突变,如果是,是哪一块。Instagram 会是一个很好的平台,但他们的 API 对此限制太多。

正确鉴定艺术品,应该归还什么?现在,我们将回复作品的名称、艺术家以及您可以在哪里找到更多信息。这里的可能性无穷无尽,令人兴奋。在这种情况下,你必须真正专注,否则你会迷失在巨大的可能性中。

返回的信息格式(对于我们简短的文本和一个网址)将根据产品的平台而改变。例如,根据我们的经验,Twitter 中的链接工作得很好,因为它们可以将用户连接到比 140 个字符多得多的信息,或者使用脸书信使,最好为用户返回带有按钮的结构化卡片。一个专用的应用程序可以让你定制这一切。

尝试一下

让我们试试我们的新模型,在推特上发布关于在#Highline 或# HighlineNYC 查看这种新艺术的消息:

看来成功了!它认出了 丹·巴德的装置棋。如果它不能识别艺术品会发生什么?我们通知用户,他们可以拍摄一张图片来了解更多信息:

厉害!那么下一步是什么?我们还可以用这个模型做什么?

扩展产品

该产品运行良好。艺术在视觉上足够独特,以至于分类器可以用很少的训练资源来识别它。这可以很容易地在其他装置、画廊和博物馆中重现。

有大量贴有标签的公共艺术品。我们不会一一列举,但这里有一个例子:

因此,Shazam for Art 很容易构建,并且能够以一种相当顺畅的方式接触到用户。我们还能建造什么?

下一步是什么?

Shazam for art 是一个有趣的开始,但是一旦你能够识别现实世界中的物体,你还可以做更多的事情。如果我们想要游戏化和个性化的高线体验呢?

艺术家可以将他们的作品扩展到物理空间之外,成为个性化的互动体验。如果你能玩一个异步人类象棋的互动游戏会怎么样。你可以拍一张棋盘的照片,它会告诉你下一步该怎么走。你拍下自己移动的照片,最后你可以把所有的照片拼接成一场漫长的夏季象棋比赛。

接下来…我们使用我们定制的计算机视觉和高线新突变装置来构建互动游戏。

第二部分将于本周晚些时候发布。

左移:授权即服务第 2 部分人工智能驱动的自动化

原文: towardsdatascience.com/shift-left-…

在第 1 部分“ 左移:支持即服务”中,我们探讨了左移通过接触更少、成本更低的交付渠道使 IT 服务更贴近员工的能力。决定实现左移只是第一步。那么,创建一个强大的 IT 服务组织的下一步是什么呢?将基于人工智能的自动化集成到一个更加数据驱动、更加注重商业价值的服务台。

在 ITSM.tools 最近进行的一项调查中,只有 26%的 ITSM 从业者认为他们的努力和价值得到了管理层的充分认可,只有 24%的受访者认为现有的 ITSM 最佳实践已经跟上了不断变化的 IT 和业务形势。

帮助每个团队成员掌控企业的发展目标,营造一个每个人都信奉 ITSM 价值观的环境。

自动化失速

自动化长期以来一直有望减少 IT 员工对重复性“维持正常工作”任务的依赖,并让 IT 部门腾出时间来处理更高价值的计划。然而,IT 员工缺乏自动化复杂 IT 流程所需的资源、能力和信任。

多年来,IT 部门发现,设计、构建和维护实现和维护任务和工作流自动化所需的代码和脚本可能需要大量的工作,更不用说确定它们是否与业务目标/KPI 保持一致了。

除了这一挑战,新工作方式的文化影响也会影响他们想要使用的设备、应用和系统。今天,自动化可能会在几天内过时,如果不是几小时的话。此外,IT 服务台的人员流动率往往很高,在保持工作流自动化和知识更新方面,这会耗费 IT 宝贵的时间和资源。

所有这些复杂性通常会导致 IT 组织发现传统的自动化方法弊大于利,会降低自动化速度,而不是加快自动化速度。

什么是基于人工智能的自动化?

基于人工智能的自动化提供了传统自动化的优势,减去了人工维护和人为错误的成本和工作量。

人工智能的一个关键好处是,它在跨多个记录系统的大量结构化和非结构化数据的基础上增加了认知能力(算法)。当与人工智能和机器学习相结合时,人类驱动的自动化允许 IT 组织在何时、何地以及如何提供服务方面做出更快、更准确的决策。

就左移而言,从人工智能系统中获得的知识和见解可以关联起来,并实时传播给 IT 支持人员、最终用户和系统。在人工智能的帮助下,IT 人员能够超越较低级别的任务(例如,解锁帐户和密码重置),转而执行对业务影响更大的任务。

当谈到自助服务(0 级)时,人工智能正在发展到这样一个阶段,在这个阶段,自主的虚拟代理可以维持越来越多的交互式对话,并执行情绪分析,以了解用户的感受(即不满意、沮丧和高兴),并相应地提出建议、执行流程和/或打开/发送票证。这消除了让 IT 人员专门处理日常任务的需要。

基于人工智能的自动化如何加速左移?

如今,员工发现 IT 服务不像消费者服务那样容易访问和使用。考虑到 IT 而设计的错综复杂的 SLA 和过程,对用户来说意味着漫长的等待时间和繁琐的手续。僵化的 ITSM 模式无法适应员工希望工作的时间、地点和方式的多样性,尤其是在下一代员工成长过程中,智能手机、平板电脑、社交媒体和即时获取信息已成为常态。

事实上,根据普华永道的一项调查,千禧一代倾向于对僵化的公司结构感到不舒服,并对信息孤岛感到厌烦。该调查强调,59%的千禧一代表示,在考虑工作时,雇主提供的最先进的技术对他们来说很重要,41%的人表示,他们更喜欢在工作中进行电子沟通,而不是面对面或甚至通过电话。

正如语音激活的人工智能助理(如 Siri、Alexa 和 Cortana)越来越多地被用于根据买家行为、购买决策和售后客户服务互动来更好地理解和优化消费者体验一样,基于人工智能的自动化也为 IT 提供了类似的好处。IT 组织可以利用这些技术与业务利益相关者建立更紧密的关系,并深入了解如何创造更具吸引力的服务体验。

基于人工智能的自动化通过使其能够识别和预测:

  • 交付和维护工作场所技术的最佳渠道、时间和实践
  • 可以通过接触较少、成本较低的交付渠道处理的手动和重复性流程
  • 哪些服务产生的查询最多,如何主动补救

在未来的博客中,我将讨论媒体围绕人工智能消除对人类的需求的炒作。然而,现在我只想说,试图让 it 专家脱离客户体验并实现自动化是不现实的,也不是所有的 IT 任务都可以完全自动化。

基于人工智能的自动化左移的目的是更好地利用和调整 IT 资源、组织数据和服务交付渠道。这对消费和提供商业服务的人来说都增加了 ITSM 的价值。

欠采样算法的缺点:CCMUT 和 E-CCMUT

原文: towardsdatascience.com/shortcoming…

什么、为什么、可能的解决方案和最终效用

在我以前的一篇文章中, 欠采样:不平衡数据的性能助推器 :

[## 欠采样:不平衡数据的性能助推器

在某些情况下,用于开发机器学习/深度学习模型的数据集通常是…

towardsdatascience.com](/under-sampling-a-performance-booster-on-imbalanced-data-a79ff1559fab)

我已经在成人人口普查数据上应用了基于聚类质心的多数欠采样技术(CCMUT) ,并证明了模型性能改进 w.r.t 最新模型,“成人人口普查收入水平预测的统计方法【1】。但是使用 CCMUT 开发的改进模型存在一个潜在的缺点。

CCMUT/E-CCMUT 的缺点:

所开发的模型给出了 90.78%的验证准确度,高于最先进的 88.16%。但是,在模型开发中,CCMUT 已经删除或欠采样了 68%的标签为 0 的实例(多数类实例)。因此,这 68%的实例既不包括在模型的训练集中,也不包括在模型的验证集中。因此,可以创建另一个数据集,测试集保存这些欠采样的实例,所有实例的标签都是 0。之后,在如此创建的测试集上测试经过训练和验证的模型。

令我十分惊讶的是,16810 个实例中只有 3 个被正确分类。这对开发出来的车型是一个很大的潜在威胁。而 Chakrabarty 和 Biswas [1]的最新模型在相同的 16810 个实例中正确地给出了16000 个,,从而保留了模型的通用性。现在的问题是,如果通过引入欠采样开发的模型导致了这样的错误,那么欠采样带来的性能改善究竟是什么?

是的,欠采样确实提高了性能。通过欠采样创建的模型的验证集有 3,151 个混合标签(0 和 1)的实例。在该验证集上,该模型从 3,151 个实例中正确分类了 2,861 个(90.78%的准确率),而当在这 3,151 个实例上测试时,最新技术从 3,151 个实例中给出了 2,589 个正确预测(82.16%的准确率)。因此,在这方面,性能肯定有所提升。但与此同时,还有一个表现不佳的典型案例。

退税原因:

这种缺点的主要原因在于 CCMUT 和 E-CCMUT 的成帧。这些算法是使用特征空间几何和聚类理论构建的。因此,欠采样实例实际上并不重要。它们是离群值,很有可能处于任何机器学习算法绘制的决策边界的错误一侧的边界或**。换句话说,这些实例可以被解释为难以正确分类的实例。所以,我只是倒回 CCMUT/E-CCMUT 算法工作声明,并进行修正:**

离聚类中心最远的数据点最难分类/预测,而离聚类中心最近的实例最容易分类/预测**。**

因此,在更容易分类/预测的实例中,CCMUT/E-CCMUT 表现得更好,从而提高了性能。但是当在难以分类的实例上测试时,CCMUT/E-CCMUT 表现不佳。这是因为在欠采样的情况下,训练集没有获得足够的难以分类/预测的实例,并且仅获得更接近多数类的聚类质心的实例,这些实例更容易分类/预测。当在这样的实例(困难的实例)上进行测试时,模型会完全混乱,并在大多数情况下预测错误的标签。

消除缺点的方法:

  1. 欠采样应该以很小的百分比进行(1-10%)。然后,模型开始学习一些难以分类的实例。但是,如果这不能在它自己的验证集中获得任何性能改进,它可能会失败。
  2. 欠采样之后是随机选择:这里,在欠采样少于 50%之后,在欠采样实例中,可以进行数据点的随机选择。那么这些随机选择的数据点可以包含在模型的训练集中。另外,未被随机选择的剩余欠采样实例可以形成测试集。****

我完全出于直觉设计了这些方法,这些方法背后没有数学依据。这些方法也不能总是在每个数据集上获得性能提升。

CCMUT/E-CCMUT 的效用在哪里?

排序程序(最易分类— — >难分类)在识别样本性质中起着非常重要的作用。因此,CCMUT/E-CCMUT 可用于数据集细化或数据清理**。如果数据集已准备好,但它包含噪声实例,这对机器学习模型开发可能是一种威胁。因此,数据集创建者/编译器( UCI / Kaggle )可以使用 CCMUT/E-CCMUT 对这类实例进行欠采样,从而有利于预测分析。**

撰写本文的动机

我要感谢 Victor Deplasse 作为我这篇文章背后的动力,他通读了我的文章“ 欠采样:不平衡数据的性能助推器 ”,并质疑欠采样算法 CCMUT 和 E-CCMUT 的一致性,因为我确信它们是完美的性能助推器。我还要感谢 TDS 团队给了我一个平台,让我以文章的形式交流我的想法,并得到我的读者的认可。

非常感谢 数据科学!!!

参考文献

[1]查克拉巴蒂和比斯瓦斯,2018 年。成人人口普查收入水平预测的统计方法。 arXiv 预印本 arXiv:1810.10076

最有效的数据说书人说服,而不是告知

原文: towardsdatascience.com/should-data…

Tempting the audience? Photo by Aaron Kato on Unsplash

转变思维,完善您的数据故事

在你创建一个数据故事之前,你需要一些指导方针,一些规则。你想变得有效率。你花了这么多时间来检查数据并确定它的含义。但是到底什么是数据故事呢?

我最近的目标是找到一个标准的数据故事定义。经过几个小时的研究,我明白了一百万种讲述更好的数据故事的方法,但仍然不知道这个数据故事的目的是提供信息还是说服他人。

为什么找到一个定义如此棘手?

数据叙事是一个包罗万象的短语吗?

不同的专家提出了几种定义。所有的定义都同意这是一个可视化分析数据结果的过程。一些描述包括像“影响业务”或“决定行动”这样的词,以表明这个故事需要一个说服的元素。其他人很乐意停留在“告诉别人你学到了什么”这一点上。

当你寻找例子时,它变得更加奇怪。我不会指名道姓,但这里是我的一些发现。

  • 一篇文章说,如果你有一个带有描述性标题的结构良好的图表,那么你就有一个数据故事。如果图表是 米纳尔德的拿破仑俄国战役地图,这个例子可能是对的。
  • 一篇很有前途的文章提供了许多讲述数据故事的方法,但没有实现。它展示了几幅图表。这表明折线图是一个关于价值变化的数据故事。有一张图表显示了消极和积极的趋势。因为这是两个不同的数据故事。(或者这是一个带有点击诱饵标题的产品演示?)
  • 另一篇以谷歌视频为特色的文章被贴上了数据故事的标签。这段视频展示了一位女士在输入一个查询,一些时髦的人在跳舞,还有一段嘻哈音乐。视频从未呈现数据。消息“哟!谷歌爱自己,做查询”很明显。不是一个揭示的情节线和不是一个数据故事

有两种数据讲故事的方法吗?

完成研究后,我发现了两种数据故事类型——信息型和说服型。数据记者讲翔实的故事,营销人员讲有说服力的故事。

一个信息丰富的数据故事是纽约最嘈杂街区的地图。这个深入的数据故事通过几个图表编织了一个叙事。令人惊讶的事实是,某些社区对冰淇淋车的抱怨多于其他因素。

Trying to read on a busy street. Photo by Moses Vega on Unsplash

这很有趣,但并不令人信服。**“大城市很吵”**似乎并不奇怪。作者本·威灵顿解释了它们为什么吵闹。他的结论是“应该有人来解决这个问题。”所以,他有一个平台,但他没有提出任何改变的建议。感觉他在浪费我的时间。

找到令人信服的数据故事很难。我想起了已故的汉斯·罗斯林。他的数据故事说服观众让世界变得更美好。在他的 数字是无聊的,人是有趣的谈话中,他用自己作为例子。他鼓励我们改变对家庭的看法。(他的书名透露了一个讲故事的好秘诀—— 讲的是人,而不是统计 。)

这个定义有共鸣吗?

如果你想把数据故事带入商业世界,用一个营销者的观点。我提供的数据解释了发生的事情,没有重点,甚至没有建议——这是新闻。

像威灵顿教授一样,我有一个平台,但没有一个观点。当我用数据证明一个观点并要求改变时,我是最有效的。

请击鼓。这是我的定义:

“数据故事以一种鼓励组织行动的方式结合了引人注目的数据、有价值的可视化和强有力的叙述。”

数据专业人员需要在工作中运用说服技巧。组织花费大量精力来组织他们的数据。在未来几年,将数据转化为导致变革的故事的能力至关重要。

我应该用 Kickstarter 来资助我的想法吗?

原文: towardsdatascience.com/should-i-us…

image ” by rawpixel on Unsplash

我在实践中学习,所以我一直在寻找有趣的数据集来分析,这样我就可以不断建立我的数据分析技能集并展示它。自然,我很高兴在 Kaggle 上看到关于 Kickstarter 活动的数据集。我听说过很多关于 Kickstarter 作为一种为自己的企业融资的方式,我想知道它实际上是一种多么成功的方式。以下是从数据中获得的一些见解。

Kickstarter 活动通常是由美国人发起的。

其他公司位于北美、澳大利亚和西欧。Kickstarter 在亚洲(日本除外)、南美或非洲几乎没有业务。

The largest market for Kickstarter campaigns is the US with almost 300k campaigns, almost 10x the next largest market of Great Britain.

Kickstarter 作为众筹平台的受欢迎程度在 2014 年达到顶峰

我惊讶地发现,Kickstarter 活动在 2014 年达到顶峰,此后一直稳步下降,每季度约 8 千英镑。是什么导致了这样的下降?一种假设可能是由于 2014 年 2 月的 数据泄露,这可能导致宣誓者和活动所有者对该公司失去信任。另一个假设是一个视频游戏开发商(克里斯·罗伯茨)在 2014 年年中公布的 WordPress 众筹插件。最后,这种下降也可能是由于竞争对手网站 GoFundMe 的崛起,该网站 在 2014 年第四季度超过 KickStarter 成为最受欢迎的众筹网站。

成功达到 Kickstarter 目标的几率有多大?

大约三分之一,尽管它因 Kickstarter 的类别而异,并随着时间的推移而变化。

For every successful Kickstarter campaign, there are roughly two failed or canceled campaigns.

近年来,成功率已上升至 38%,但仍低于 2011 年 46%的峰值。

什么类型的活动最有可能成功?

漫画和舞蹈有超过 60%的成功几率。有趣的是,舞蹈是 2017 年美国最不受欢迎的 Kickstarter 类型,只有不到 300 个活动。

成功的竞选活动也有较高的支持者中位数。

在美国,成功竞选的每位支持者承诺的金额中值是 42 美元!大多数人的认捐额在 0-20 美元之间。

这些年来,认捐少于 20 美元的支持者人数一直在上升,而支持者总数却在下降。

Total number of backers per campaign has decreased recently

结论:

如果符合以下条件,Kickstarter 将是为你的想法提供资金的好方法:

  1. 你的想法与舞蹈或漫画有关
  2. 你有一个庞大的网络
  3. 你的目标很小
  4. 你期望每个支持者贡献大约 20 美元或更少。

我们应该害怕 AI 吗?

原文: towardsdatascience.com/should-we-b…

在技术、媒体和广告世界,我们不断听到人工智能将如何改变一切。这些讨论大多是关于人工智能将如何使流程和产品变得更好更快的鼓励。但是这里的利害关系也是我们成为人类的原因。

人工智能有很多好处。毫不奇怪,人工智能的一个应用是软件。

许多人工智能支持的软件倡议正试图减少招聘的偏见,如 unity。作为数十年招聘研究的成果,Unitive 简化了审查过程,因此人类的无意识不会在性别、种族或其他身份因素方面影响招聘。

班卓琴使用人工智能进行预测。数据是从世界各地的社交网络和网站上收集的,用于对可能发生的事件进行有用的预测,如特定地点的极端天气事件或恐怖袭击。

这些应用代表了人工智能的一些优势。然而,这种外包给人工智能的做法正是埃隆·马斯克所担心的。众所周知,他告诫人们不要过度依赖他所谓的人类“最大的生存威胁”

与任何技术一样,人工智能也存在被滥用的真实可能性。这里的一个主要问题是隐私。人们并不总是意识到,也不一定同意使用他们的个人数据来增加公司的利润或跟踪感兴趣的人。

AI Now 是试图监控 AI 的组织之一。由凯特·克劳福德(Kate Crawford)和梅雷迪思·惠特克(Meredith Whittaker)组成的多学科倡议正试图分析人工智能对社会不平等、劳动力和医疗保健的影响。他们最近发表了一份关于如何让人工智能“更加公平公正”的报告

我们仍然有时间探索一个充满人工智能的世界的好处和潜在陷阱。人工智能对个人的影响现在大多是间接的,而且往往过于间接,人们不会注意到。这将在不久的将来改变。已经有一些工作类型最容易受到早期机器学习浪潮的影响,比如卡车司机和工厂工人。事实上,那些在过去几十年中失去的蓝领工作已经成为一个政治热点 可以主要归因于自动化而不是外包。

但我们认为的许多工作在技术上是安全的,比如医学、法律和金融领域的工作,也同样可能屈服于人工智能。 《哈佛商业评论》指出这 5 个步骤几乎适用于所有工作,无论薪水如何:

  1. 收集数据
  2. 分析数据
  3. 解释结果
  4. 确定推荐的行动方案
  5. 实施行动方案

机器很有能力掌握这一进展,不会像人类医生那样有来自有限资源的先天偏见。

然而,情商(EQ)目前是衡量人类劳动价值的一个重要因素。 理解、互动和激励其他人是人工智能在未来几年很难复制的事情。领导力和同理心将是让人工智能陷入困境的原因……就目前而言。

已经有聊天机器人通过了图灵测试,或者非常迷人,以至于人类似乎不在乎他们是否在和机器人说话。微软 Xiaoice 背后的人工智能是基于“ 情感计算、”的,这是一种优先于任务完成的关系。意思是,确保和你谈话的人对你感到满意,而不是对你提供的东西感到满意。这是人类互动的一个基本原则,也是人工智能准备不仅从卡车司机那里抢工作,还从治疗师和男朋友那里抢工作的一个原则。

应该读 Udacity AI 纳米学位还是 AI 硕士学位?

原文: towardsdatascience.com/should-you-…

我创造了自己的 人工智能硕士学位。其中包括两个 Udacity 纳米学位,以及其他课程。

  1. Udacity 深度学习纳米学位
  2. 人造纳米度

Udacity 的课是我上过的质量最高的课。

我从未获得过真正的硕士学位,但无论如何让我们比较一下。

成本

我去我大学的开放日看研究生学习。我调查的计算机科学项目是两年内每年 42,000 美元。你需要先付 50%。

我没有多余的 42,000 美元。所以我去了别处。

创建我自己的学习路径,我总共花了 3500 美元。各种课程、书籍和工具。3500 美元不是免费的,但远低于 84000 美元。

预先支付一切意味着我也没有任何债务。

时间

如果我报名参加计算机科学项目,至少需要 2 年才能完成。

我自己的课程已经学了一年,快完成了。

然而,学习这些技术是永无止境的。每周都有一个新的艺术基准要了解。每周!很好玩。

学习

我想学习计算机科学,因为我想了解人工智能。这比什么都更能激发我的兴趣。

但是大学提供的课程似乎什么都教,除了我所追求的。

上网后,我可以研究任何我想研究的东西。我直奔我想学的东西的来源。这很难。但是学习新事物总是很难。你不妨把精力投入到你想学的东西上。

反馈

在我的本科学位期间,我交了作业,有时三个月都得不到反馈。到那时,这对我来说已经不重要了。考试也是如此。

Udacity 的评审人员会在你提交项目后的 24 小时内给你反馈和建议,有时会在一小时内。更不用说 Udacity 论坛和 Slack 频道了。这些对我的学习是非常宝贵的。与其一次在一个问题上坚持几个星期,不如(几乎)立即就能得到帮助。

质量

我是视觉学习者。我必须亲眼目睹事情的发生才能理解它们。阅读大量的课堂笔记对我来说不是最好的学习方式。

Udacity 的动画团队做了大量的工作来配合他们的讲座。我经常发现自己反复观看观想十几次,让这个概念在我的脑海中扎根。

Udacity 还与行业专家合作。在我参加的纳米学位课程中,有来自 IBM 和 Google 的人提供了他们的见解。

内容

我自己的硕士学位是否可以和真正的硕士学位相提并论?

我不知道答案,但是这样看。

大学硕士学位经受住了时间的考验。它们是为你将来的学习和研究做准备的。许多公司仍然认为它们是有价值的,甚至是必需的证书。

当然,我的硕士学位会有一些漏洞,纳米学位不会涵盖你需要知道的一切,因此得名。但更重要的是,我创造了自己的道路,其中包含了我想学的东西。这使得学习变得更加愉快。

最好的课程是那些激发你兴趣去拓展知识的课程。Udacity 课程为我做到了这一点。

机遇

两个月前,我开始做机器学习工程师。从那以后,我从事了一系列需要我在纳米学位中学到的技能的项目。

然而,我也不得不根据项目的要求学习更多的东西。

有了硕士学位,我能申请更多的机会吗?可能吧。但是我没有。

相反,我知道我正在学习的技能是有价值的,并确保建立一个在线文件夹来作为我工作的证明。

Udacity 也与科技公司合作,并提供职业服务来帮助你找到一个角色,然而,我还没有利用这些。

进一步学习

我只记得我所学的 1%。这就是为什么我的口号是继续学习

现实世界中的大多数数据并不像你在一些课程中发现的那样整齐地打包,包括纳米学位。你必须不断地想出新的方法来以一种可以使用人工智能技术的格式获取数据。

从纳米学位或硕士学位毕业并不是你学习旅程的结束,而是一个新旅程的起点。

你永远不会为你所接受的挑战做好充分准备,但是有了你所获得的基础技能,你将能够学到你所需要的。

总结

完成 AI 纳米学位后,我是不是最好的人工智能工程师?

号码

我读传统的人工智能硕士会不会更好?

也许吧,但我不打算做。

我能按要求学习新技术并应用于新问题吗?

是的。

我学的课程让我兴奋吗?

是的。

我的知识中有陷阱吗?

是的,但是我可以和在这些方面比我强的人在一起,并向他们学习。或者,我可以找出我的弱点,并加以解决。

如果你想节省成本和时间,直接进入人工智能的前沿,我会推荐人工智能纳米学位等课程。

如果你想接受更传统、更全面的教育,并有望继续深造、攻读博士学位之类的课程,那就去攻读人工智能硕士学位吧。

你可以用这些技能解决很多问题。它们需求量大是有原因的。

不断学习。

本帖开始是 我对 问题的回答一个 Udacity 纳米学位和一个人工智能硕士学位有什么区别?Quora 上。

在 LinkedIn 上与我联系。

在 YouTube 上看我。

你应该去争取吗?使用 MLB 数据的基础窃取预测器

原文: towardsdatascience.com/should-you-…

棒球运动中最令人兴奋的事情之一是偷垒。如果跑垒者计时正确,会有两种结果:

或者他们不…

有时甚至会发生令人惊奇的事情。

Those moves by Jayson Werth

偷垒是一场精心策划的赌博,游戏的形势决定了成功的机会。要决定是否去做,需要跑垒员和经理的正确判断,这种判断只能从打了几十年的高水平棒球中获得。然而,如果只需点击一个按钮就能做出这个决定,那会怎么样呢?我决定为我的第三个 Metis 项目建立一个预测模型,并创建了一个 Flask app ,部署在 Heroku 上。

数据

获取数据:

为了建立这个模型,我需要许多偷垒情况及其结果的例子。幸运的是 Kaggle 有这样一个由 Sportsradar 提供的数据集。这个 MLB 数据集托管在谷歌的 Bigquery 平台上,包含了 2016 赛季每一场比赛的信息。我最终将这些数据上传到 PostgreSQL 服务器,因为初始数据集包含 760,000 多行和 145 个要素,这对于加载到本地内存来说太大了。

在探索这个数据集的过程中,最初的一个怪癖是试图只提取基本窃取事件。最初,我试图通过在描述中对“steal”进行通配符搜索来找到它们:

 SELECT *  
  FROM baseball  
  WHERE description LIKE '%steal%';

但是这个查询太小了,因为它只返回了 500 个条目。例如,2017 年 MLB 赛季有:

The total of the top 10 teams was 1098 SB (stolen bases).

所以只有 500 个整数太低了。深入挖掘,我发现多个偷垒事件在描述中遗漏了信息。因此,我最终使用以下命令来查询偷窃事件:

 SELECT *
    FROM baseball
    WHERE rob1_outcomeid LIKE '%CS%'
    OR rob1_outcomeid LIKE '%SB%'
    OR rob2_outcomeid LIKE '%CS%'
    OR rob2_outcomeid LIKE '%SB%'
    OR rob3_outcomeid LIKE '%CS%'
    OR rob3_outcomeid LIKE '%SB%';

由于每个 rob(跑垒者)都有一个结果 id,通过寻找“SB”(偷垒)或“CS”(偷垒被抓)的出现,我就能够抓住偷垒事件。

有了 145 个特征,每个剧本都有很多可用的信息。虽然这些特征中有很多最终都不具有预测性,但有几个特征我认为是有信息的,但不能反映实时情况。例如,关于投球类型、投球速度和投球位置的信息对跑垒员来说非常有用。这些特征将允许跑垒者估计他们到达下一个垒大约需要多少时间。然而,在现实世界中,跑步者或管理者无法获得这些信息,所以我决定在模型中限制这些特征。

作为替代,我将来自 方图的玩家统计数据加入我的数据集。具体来说,我利用了投手 的投球类型分布统计数据作为投球类型和速度的代理,而击球手 的平板训练统计数据作为投球位置的代理。这反映了跑垒员如何根据他们过去的倾向猜测投手会投出什么球。

数据清理:

虽然 Sportsradar 的数据很全面,但我仍然需要清理数据。该数据集包含 760,000+个条目,我必须对其进行过滤,以仅过滤出基本的盗窃事件。我取消了任何摘球活动或季后赛活动。我的推理是,偷球不同于普通的偷球,季后赛的行为也不同于常规赛的行为。这些数据削减留给我 3000+基地盗事件。许多功能,如游戏 ID,出席,venueName 也被排除在外,因为我觉得他们不会预测。

数据插补:

除了子集之外,还有一些条目缺少投手或击球手的统计数据。当所列的投手或击球手从 Fangraphs 统计中缺失时,就会发生这种情况。由于数据集的年份差异(2016 年与 2015 年),这是意料之中的。假设有 2016 年的球员没有参加 2015 年的比赛是合理的(比如菜鸟)。为了解释这些缺失值,我最终用从训练数据中计算出的相应中值来输入这些特征。

特征生成:

有了大量的分类变量,我最终不得不虚拟化许多特征,使它们能够被我的模型解释。在这样做的时候,我确保不会陷入 虚拟变量陷阱 (DVT)。例如,为了确定击球手的惯用手,我创建了一个列“is_hitter_R ”,而不是两个列,因为这将落入该数据集的 DVT 中(只有一个击球手是双手并用的)。

我使用的另一种特征工程涉及 box-cox 变换。许多玩家统计特征不是正态分布和紧密分组的,所以为了纠正这一点,我应用了 box-cox 变换,其中每个特征都用优化的 lambda 进行了变换。

建模:

优化指标:

作为一名经理,这个应用程序可以尝试优化多个可能的指标。首先是最大化基础抢断的数量(最小化错误否定),然而这样的策略可能太冒险,因为那可能导致太多出局。第二是尽量减少被抓住的偷窃事件(尽量减少误报),但是这种策略可能过于被动,没有利用可能的得分机会。相反,我决定对 F1 进行优化,这将带来一个平衡的方法

型号选择:

在用其他模型进行实验后最大化 F1 时,两个模型表现最好:逻辑回归(LR)和梯度推进树

这两个模型最终在训练集上获得了相似的 F1 分数。因此,我选择 LR 模型有两个原因:LR 模型的特征重要性更容易解释,LR 模型的运行时间更快。如果我试图部署一个实时应用程序,后者会很重要。

功能重要性:

从 LR 模型来看,这些是每个结果最重要的特征:

BC refers to the box-cox representation of the feature

最主要的特征是跑垒员是否在一垒。在所有特征中,它的预测性似乎是第二接近的两倍。这在物理上是有意义的,因为一垒上的跑垒员在其他任何一个垒上都有更好的机会去偷一垒。

模型性能:

我的 LR 车型的测试 F1 成绩是 0.924。与测试分数的微小差异意味着我的模型对新数据概括得很好,没有过度拟合。学习曲线强化了这一点:

在完整数据集上重新训练模型,它能够生成以下混淆矩阵:

最终 F1 分数为 0.9354,模型性能正好介于训练和测试 F1 分数之间。解释这些结果的一种方法是将被抓到的偷窃(CS)事件的数量等同于本可以被挽救的运行次数。对于模型能够分类的 922 个 CS 事件,节省的运行的大概估计是 123 个运行。我利用了我在网上找到的这个回合 表来翻译每一次抢断尝试的比赛情况(除以 2 是保守的)。

有了这个模型,我还构建了一个交互式 Flask 应用程序,它可以根据用户选择的输入进行预测,如图所示

如果你想自己玩,你可以在这里访问

未来工作:

虽然我最终得到了一个工作模型,但是如果我想进一步扩展这个项目,我可以实现一些改进:

  • 多名跑垒员:用目前的模型,只能准确预测单个跑垒员事件。虽然如果有多个跑垒员,它可以预测盗垒的成功,但这种预测不能解释多次出局。
  • 跑垒员信息:我的模型目前没有考虑跑垒者的能力。因此,我想包括跑垒者的跑垒统计数据。可以利用的一些统计数据是一个跑垒员前一年偷垒的数量,以及像他们 40 码冲刺时间这样的指标。
  • 更多数据:我相信获取更多数据将有助于极大地改进这个模型。如果我从其他 MLB 赛季获得数据来纠正 CS 和 SB 事件之间的不平衡,我相信我会发现更多的预测特征。

这个模型和 Flask 应用程序的代码和数据可以在我的 Github repo 获得。

你的顾客应该被人类还是人工智能欺骗?

原文: towardsdatascience.com/should-your…

《礼宾》vs《绿野仙踪》MVP

“从我的脑海中,我会说你正在寻找一个博斯基,一个吉姆·布朗,一个戴西小姐,两个叶忒罗和一个利昂·斯平克斯,更不用说有史以来最大的艾拉·费兹杰拉!”

使用“礼宾”或“绿野仙踪”这样的行话感觉就像 11(或 12 或 13)罗汉 在讨论他们将要实施的骗局,这是 受到真实的信心诡计的启发。

MVP 和原型制作与诈骗没有太大区别。我们希望从前期投资很少的人那里获得诚实的反馈金,以避免构建一切。你应该考虑人们有什么问题以及他们的解决方案。

人工智能大会

谈到 AI 通常从奇点或它是如何变得神奇开始。当真正的讨论开始时,关注的焦点是自动化,因为它可以削减成本或节省人员。我们应该考虑人工智能如何成为辅助的、增强的、 代理的,甚至是为人类需求而生成的。

通过 MVP,您可以了解人们面临的真正问题,因此您可以迭代地构建解决这些问题的东西。人类为机器提供目的。大多数情况下,人需要参与解决机器不能很好处理的异常情况。

对于具有人工智能的产品,你需要问一些重要的问题:你的客户会信任人类优先还是机器优先的系统?你想让人们期待一个有着各种怪癖的人会出现吗?还是想从机器上冷效率和缺乏偏见?

我们将讨论每个模型的优缺点,以及如何避免在构建人工智能、机器学习、深度学习和其他机器智能时的常见陷阱。

看门人

Connie, Hilton’s robot concierge.

“礼宾”是你自己解决顾客问题的方式。你把界面简化为人类和顾客之间的直接交流。以人性化的方式解决顾客的问题。

特别是,你正在学习如何通过自己动手来解决这些问题。在礼宾解决方案的情况下,最有价值的学习来自于接触所有你在构思服务时没有想到的案例。

人工智能通常会扮演自动化或辅助角色,帮助扮演门房的人更快地完成工作。随着时间的推移,服务得到了改进,使更多的人类任务从机械到复杂实现了自动化,并消除了决策过程中的干扰。

StitchFix 是一家采用礼宾模式来提供服务的公司的典范。随着时间的推移,他们在如何决定库存哪些服装方面变得更有创造力。 StitchFix 的算法帮助设计师决定给顾客送什么衣服。

Brad Klingenberg,造型算法总监,做了一个关于人工智能循环使用中的人类的精彩演讲。不仅仅是一个人工智能反馈周期,还有多个包括设计师、客户、仓库等的工具。:

当你需要大规模的时候,门房 MVP 技术就失效了。一般来说,这是一个很好的问题,但这表明你需要找到另一种方式来做事情,而不仅仅是增加人数。

当计划使用人工智能时,您可能无法访问数据,或者无法训练正确的模型来取代大量的人工干预。

绿野仙踪

《绿野仙踪》就是你让它看起来像是由一台机器完成的,但实际上是一个人在幕后操纵。你构建了一个服务的 UX 外观,看起来是全机械化的,但实际上是有人在幕后操作。当您知道基础知识并将其构建到外观中时,这是最好的,但不要假设很多例外。

客户的期望是,这是一项应该能够正常工作的服务。如果它不起作用,它会把错误很好地传达给他们。他们不期望与一个人(或自主代理)进行复杂的对话。

《绿野仙踪》人工智能 MVP 的强大之处在于,幕后的人类正在从交互中创建带标签的数据。人类将采取机器最终应该采取的理想行动。

Expensify ,一个伟大的费用管理服务,是他们收据智能扫描技术的一个很好的例子。当他们第一次开始解析收据的照片时,他们会自动做一些事情,但会使用 Mechanical Turk 来解析收据( 除了一些争议)。如果你不熟悉机械土耳其人,这是亚马逊的一项服务,它将短期任务外包给真人,每项任务收取几分钱。

MTs 人工协助存在一些与零工经济相关的问题。当你不知道人类在做这项工作时,人们不会担心把他们当人看待。

虽然《绿野仙踪》并不总是适合这项服务。大多数聊天机器人就是一个很好的例子。他们在与客户的对话中提出了自动化系统的想法,但最初确实需要人类来驱动大部分系统。这是对《绿野仙踪》的错误使用,因为你没有正确设定期望值。

门房大战绿野仙踪

总之,MVP 模型最大化了不同的东西,但仍然试图抓住客户需求的核心。

你对顾客和他们的问题了解得越少,礼宾部就能更好地帮助你发现问题。

你认为你越了解你的顾客和他们的问题,《绿野仙踪》就能越好地帮助你验证和否定这些知识。

关于这两位 MVP 的更深入的背景,请查看由 艾伦·程和 蚱蜢牧人发表的一些伟大的帖子。

人类优先还是 AI 优先?

Human head and horse body or horse head with human body?

除了了解你的客户和他们的问题之外,你还可以测试他们对人类优先或人工智能优先界面的感受。不管怎样,你都应该建造结合了人类和机器精华的半人马系统。

当考虑这两个选项时,你需要考虑随着时间的推移你将建立的信任。再问一次:你想让人们期待一个有着各种怪癖的人是可以得到的吗?还是想从机器上冷效率和缺乏偏见?

最后,它归结为你试图融入人们生活的利基。当与客户谈论你的 MVP、进行用户研究或测试你的原型时,这里有一些问题:

  • 你更信任谁来做这件事:人还是机器?为什么?上一次是什么时候?
  • 你更相信专家还是机器?为什么?上一次是什么时候?
  • 解决这个问题时,异常有多重要?你上一次不得不处理异常是什么时候?
  • 上次出了问题,你需要知道什么?什么类型的解释有帮助?哪些类型的解释没有?

Empathy Mapping for the Machine during our NYC Media Lab Summit workshop.

和你的最终客户一起跑步锻炼也是有益的。在 Philosophie,我们已经使用机器的 移情映射来帮助理解与服务交互的人类的期望。 混淆映射可以帮助理解系统的错误案例如何影响客户结果。这些练习通过询问与客户实际需求相关的注重结果的问题,避免了人工智能术语。

人类应该在处理异常的循环中,但我们应该始终考虑如何以有意义的方式解决人们的问题。你需要考虑你的客户是想要一个人还是一台机器来帮助他们解决问题。

连体网络和三重损耗

原文: towardsdatascience.com/siamese-net…

介绍

深度学习迅速崛起到人工智能的前沿,这是由大量可用数据推动的。深度学习概念在它所应用的几乎所有用例中都表现得非常好,例如计算机视觉、医疗保健、NLP 等。但是,当缺乏可用的训练数据时,它很难执行。在许多用例中,模型可用于训练的数据量相当低,这阻碍了模型学习有助于预测的特征的能力。一个这样的用例是你为一个组织建立一个面部识别系统。

一次性学习

一次性学习是从单个样本中学习表示的技术。以前面提到的例子为例,假设有一个组织,它想要一个面部识别系统来允许其员工进入大楼,而您被赋予了构建这样一个系统的任务。这项任务的问题是,组织可能不会为每个员工提供超过 10 张图片。因此,构建和训练一个典型的卷积神经网络是行不通的,因为它无法学习给定数据量所需的特征。所以,这是一个一次性的学习任务,你可以建立一个相似度函数来比较两幅图像,并告诉你是否匹配。

假设,左边的图像是该组织员工的脸。由于没有太多的数据来构建 CNN,您可以构建一个相似性函数来比较右边的图像和左边的所有图像。相似性函数将返回一个值,如果该值小于或等于一个阈值,您可以说这两个图像是相似的,否则它们不是。

暹罗网络

在暹罗网络中,我们获取一个人的输入图像,并找出该图像的编码,然后,我们获取相同的网络,不对权重或偏差进行任何更新,并输入不同人的图像,再次预测其编码。现在,我们比较这两种编码来检查这两个图像之间是否有相似之处。这两种编码充当图像的潜在特征表示。同一个人的图像具有相似的特征/编码。利用这一点,我们比较并判断两幅图像是否是同一个人。

三重损失

你可能想知道,如何训练网络?您可以通过获取锚点图像并将其与正样本和负样本进行比较来训练网络。锚图像和正面图像之间的相异度必须低,而锚图像和负面图像之间的相异度必须高。

Triplet Loss Funciton

上面的公式表示三重损失函数,使用该函数计算梯度。变量“a”表示锚图像,“p”表示正图像,“n”表示负图像。我们知道 a 和 p 之间的相异度应该小于 a 和 n 之间的相异度。另一个称为裕度的变量是一个超参数,它被添加到损耗方程中。Margin 定义了相异点应该有多远,即如果 margin = 0.2 并且 d(a,p) = 0.5,那么 d(a,n)应该至少等于 0.7。边距有助于我们更好地区分两幅图像。

因此,通过使用该损失函数,我们计算梯度,并且在梯度的帮助下,我们更新暹罗网络的权重和偏差。为了训练网络,我们取一个锚定图像并随机采样正图像和负图像,计算它的损失函数并更新它的梯度。

结论

使用这样的新方法,深度学习正在不断缩小人类水平表现的差距。我相信在几年之内,人工智能甚至可以在其应用的某些领域超越人类水平。因此,人工智能和人类一起可以拯救生命,让人们的生活更轻松。

确认

所有图片均取自吴恩达 深度学习课程。

暹罗网络和斯图尔特·威茨曼靴子

原文: towardsdatascience.com/siamese-net…

在之前的一篇文章中,我写了如何使用 R-CNN 模型来检测和分割出第二阶段模型要使用的衣服。在他的文章中,我用 Pytorch 暹罗神经网络建立了一个第二阶段模型的例子。这个想法是,通过结合这两个模型,你可以获取一个原始图像,只分割出衣服,然后将这些衣服与衣服项目数据库进行匹配,以找到类似的项目。

因此,这篇文章的第一部分将重点放在建立暹罗网络上,在接近结尾时,我将展示一个使用我的细分模型的输出的例子,以及暹罗网络如何从鞋子推广到它从未见过的其他物品。

什么是暹罗网络,我们为什么要关心?

暹罗式网络的目标不是对对象进行分类,而是确定项目是相似还是不同。这些真的可以是任何东西。 脸书用它们进行面部识别,最初的应用是 签名验证,我已经用它们来看 艺术家风格和 游戏角色。

你通过初始化两个网络“塔”来训练暹罗网络,其中你保持它们的权重相等,并通过每个塔馈送输入来进行成对比较。通过最小化相似输入之间的距离和最大化不相似输入之间的差异,训练网络来确定呈现给它的两个对象是相同还是不同。

Image of a siamese architecture for facial recognition by Andrew Ng in his deep learning course

暹罗网络没有回答经典的分类问题,X 是什么?相反,它们回答了这个问题,物体 X 和 Y 相似吗?

也就是说,我认为有理由问,如果你可以训练一个标准网络来进行这些识别,为什么还要费心去构建一个连体结构来进行成对比较呢?

作为回应,暹罗网络有许多我认为非常有用的特性。最主要的一点是,他们能够超越他们所受的训练进行归纳,能够分辨出他们不一定接触过的不同阶层之间的差异。另一个特性是,由于它们可以推广到没有被明确训练过的类,暹罗网络不需要每次被要求观察新事物时都被重新训练。

下面看一些网络认为相似然后又不同的鞋子的例子。

Lower scores indicate similarity, so the network finds these to be similar! I guess these could be similar?

在上面的例子中,模型为每只鞋生成嵌入,并且嵌入之间的欧几里德距离很小。所以网络认为这些鞋子相当相似。

Higher score and yep, these are dissimilar

技术实现

在这篇文章中,我用 Pytorch 在 jupyter 笔记本上建立了我的暹罗网络。我使用了一个自定义数据集函数,从头开始训练网络,并在笔记本上进行测试。

在 github 这里随意查看笔记本

我从网上收集了 220 张鞋子的图片,并把它们分成不同的款式。我用了 6 个类别“鞋跟”、“靴子”、“便鞋”、“凉鞋”、“运动鞋”、“平底鞋”。暹罗网络基本上是通过展示几双鞋来训练的,它必须判断这两幅图像是否来自同一类别。

jupyter 笔记本中的 SiameseNetworkDataset 类本质上是通过索引引用给定的图像,并将它与数据集中的另一个图像配对。它返回图像对和目标 0 或 1,这取决于它们是否匹配。在训练过程中,该数据集被调用来生成样本,并显示了暹罗网络的另一个有用特征,其中数据集的有效大小远高于其实际大小。在这种情况下,我有 200 个左右的训练图像,所以当你选择第一个图像时,有 199 个其他图像与之配对。所有这些都是有效的成对比较,可以在训练中使用。总的来说,暹罗网络的这一特点让你可以用很少的数据来训练它们,但更多的数据仍然更好。

对比损失函数本质上测量两个输出之间的欧几里德距离,并相应地调整它们,以使相似图像之间具有更短的距离,同时增加不同输入之间的距离。

These are dissimilar

训练循环运行了 50 个纪元,在我的 Nvidia 1080 GPU 机器上完成可能需要一个小时。

很酷…但是有点不实用?

我同意这一点。实际上,必须对数据库中的所有内容进行成对比较是非常不切实际的。例如,如果你有数百万张图片,你会在几个小时或几天内找到匹配,这太可怕了。因此,我们需要找到一种方法,使用暹罗网络的专业化来确定相似性,这种方法并不可怕。

退一步说,在机器学习的许多领域,我们发现如果我们能够以一种有意义的方式浓缩样本的表示,它可以极大地帮助我们的分析。原始图像非常大,即使将彩色图像调整到 224x224 像素,也意味着要浏览 15 万个值(224x224x3)。你也可以把它们描述为非常稀少,就什么信息对我们真正重要而言。因此,如果您可以创建一个有用的嵌入来在一个不太复杂的空间中表示该图像,那么您可以使用其他方法/模型非常快速地匹配相似的图像。

暹罗网络允许你很好地扮演这个角色,创建图像的嵌入,因为它们被优化以确定相似性。您可以输入 150K 的原始图像值,并获得 128 个值的输出嵌入(这是我的网络输出向量的长度)。然后,当您将该图像与另一个图像进行比较时,您可以看到输出嵌入的 128 个值是多么相似。

举个例子,拿下面这张鞋子的图片,通过暹罗网络传递。鞋子作为一个 224x224x3 的数组输入,并作为一个长度为 128 的向量输出。我觉得这个挺优雅的!

Example of output embedding of an image of a high heeled shoe. I am unsure what the 128 values map to, but to me that does not really matter because they turn out to be quite effective.

在大规模环境中,您可以使用一个经过训练的暹罗网络来提取数据库中所有图像的特征嵌入,然后您可以构建其他模型或应用其他方法来匹配该数据库。这利用了这样的事实,即通过暹罗网络馈送的相似图像也将具有相似的嵌入,并且这扩展到它从未暴露的图像/类,并且仍然为相似的图像产生相似的嵌入。

讨论暹罗网络结果

我已经展示了这个网络的一些成功之处,但是展示它的局限性也很重要。因为这个网络是在一个非常小的数据集上训练的,所以在很多情况下它仍然不能很好地评估。

These are similar which is good

These should also be similar but they are not

While these are not super similar, they rate more similarly than I think they should

这三个例子展示了这个网络的一些弱点,这些弱点是在一小组图片上训练出来的。随着更多的数据和更长的训练时间,这些问题可能会得到解决。

另一个问题是,图像在技术上可能是相似的,但是从不同的角度看将会返回不同的结果。这个问题在像面部识别这样的情况下得到解决,其中向模型提供人脸的多个角度以进行优化,从而允许模型处理侧视图或部分障碍。在下图中,我将每个人都标记为“游手好闲者”,因此从技术上讲,它们应该是相似的,但是模型将它们评估为完全不同

我发现的另一个有趣的事情是,当我使用边界框而不是来自 Mask R-CNN 模型的分段靴子时,它实际上与靴子的分段图像非常相似。这可能是因为背景相当干净,但如果这在其他图像中是一致的,这意味着您可能不需要全掩模 R-CNN 模型,并且可以使用较轻重量的对象检测模型并使其表现良好。如果这是一个持续的趋势,这是一个很酷的发现!

然而,我跑题了,这篇文章的目的是要说明,你可以在第一阶段模型中分割图像,将它传递给第二阶段的暹罗网络,然后将它与一些已知的图像进行匹配。虽然这个网络很小,有一些问题需要改进,但在结合我的 Mask R-CNN 图像分割模型进行测试时,它仍然表现很好,因此无需进一步讨论…

欢迎来到丛林!

例如,如果一家公司希望能够从用户那里获取一幅野外图像,并将他们商店中与图像中的服装相似的商品返回给用户。给一个像下面这样的原始图像供料是相当困难的,因为在这个图像中有大量的“噪声”。在这种情况下,噪音意味着除了衣服以外的任何东西。即使您能够对图像中不同类型的服装进行分类,也很难在没有首先定位到这些商品的情况下返回良好的相似商品。

因此,为了解决信噪比问题,你可以使用一个图像分割模型,就像我的客户训练的 多类掩模 R-CNN 模型。它穿过图像并定位到衣服上。

然后,您可以使用这些生成的图像掩码只返回衣服项目。

最后一步是打电话给我在这篇文章中概述的关于这些物品的暹罗网络,这样你就可以寻找类似的已知服装物品。

为了便于说明,这里有一个使用这些成对比较的例子。左边的鞋子可以代表我们正在测试的已知鞋子中的图像,右边的鞋子是从上面的原始输入图像中提取的靴子。

这第一对图像没有很好的分数,所以我们会说它们不相似。

在这种情况下,您可以在数据库中返回 Stuart Weitzman 的靴子,它与原始输入图像中模型上看到的靴子相似,也是 Stuart Weitzman 的靴子。

超越他们的训练

我已经说过,暹罗网络是有用的,因为它们有能力超越他们所受的训练进行归纳。因此,为了展示这一点,在我运行分割模型的原始图像中,还有一个方格手袋。由于我从原始图像中提取了这个手提包,所以我决定进行一些测试,并发现经过鞋子训练的暹罗网络在寻找类似的包时表现良好。

第一个图像右边是提取的手提包图像,左边是与之匹配的黑色手提包。该网络发现他们很不相似,得分为 0.77

现在看第二张图片。我们再一次在右边找到了提取的手提包,在左边我在网上找到了一个格子手提包的图片。该模型将这些评估为具有 0.43 的相异分数,这意味着它认为它们相当相似。

这最后一点是一个很酷的小测试,我不确定我在一小组图像上训练的暹罗网络是否能够通过。我猜它有助于方格图案使包相当独特。然而,这仍然说明了暹罗网络可以推广到它们没有明确训练过的图像类型的想法。

结束语

在这篇文章中,我介绍了什么是暹罗网络,为什么它们有用,我是如何建立这个网络的,以及如何使用一个网络作为第二阶段的模型来让你将来自野外的图像中的物品与衣服库中的物品进行匹配。

这篇文章结合我以前的图像分割文章,展示了如何建立一个可能的完整的端到端深度学习管道,以解决各种领域中一些非常真实的商业问题,而不仅仅是服装。它甚至不一定是我在这里展示的具体型号。

对于第一阶段的模型,您可能不需要完整的图像分割模型,可能只需要一个简单的对象检测模型就可以了。这将使训练更快,因为建立对象检测数据集比建立完整的图像分割数据集更容易。

在第二阶段,我展示了一个暹罗网络如何有助于构建特性嵌入。我真的很喜欢暹罗网络如何能够进行超出其训练范围的概括,但你可以使用一个经过训练的模型来完成这项任务,该模型可以对特定领域的图像进行分类,然后重新调整它的用途以进行特征提取。就我个人而言,我喜欢在这里使用暹罗网络,因为它被明确地训练来进行相似性比较,而不是重新利用另一个模型来做这项工作。

十年 Twitter 数据的可视化(第一部分——数据集)

原文: towardsdatascience.com/side-projec…

本文是数据可视化项目生产笔记的一部分:

[## @tanyofish 的 10 年推特

10 年间超过 10.2 万条推文的可视化

tany.kim]( tany.kim/twitter)

10 年前的今天,我开通了我的推特账户,从那以后我已经发了超过 102,000 条推特。是的,我经常发微博。这是一个私人账户,我主要用韩语发微博,所以请不要马上离开来关注我。

作为一名数据可视化设计师,我一直想从我自己的推文中做出一些东西,可能是我能获得的最个性化、最大规模和最强大的数据集。 在实际的设计和编码之前,我一直在思考这些数据的哪些方面会让自己设计起来有趣,让别人开心。在这个项目开始时,我想发现的包括:

  • 我真的经常发微博吗,即使是在工作时间,甚至是刚睡醒的时候?
  • 我多久用 Twitter 和朋友聊天一次?
  • 电脑和电话,我更常使用哪一个发微博?
  • 我和 Twitter 朋友的关系网是什么样的(它更具探索性,最终会有很多想法)?

在这篇文章中,我描述了我想用这个可视化项目展示什么,以及相应地我是如何生成数据集的。

获取和清理数据

我认为有两种方法可以检索你所有的推文——1)下载并存档你的推文,这个选项可以在你的帐户设置下找到,2)使用 Twitter 的 Rest API。众所周知,没有一个数据集的格式是完美的,没有丢失的信息,所以我必须彻底清理数据集。我可以写一篇关于这个过程的全新文章,但是我的 Python 代码可以更好地解释这个过程。几个亮点是

  1. 关于时间戳,来自下载档案的旧推文数据只有最新的,而不是小时、分钟或秒。因为我想知道一天中我发推特的时间,所以我需要这些数据。为此,我使用 rest APIs 获取每条 tweet 的所有完整元数据,这些 tweet 的 ID 可以在存档中找到。
  2. 再说一次,我想知道我什么时候发微博。每条 tweet 的元信息现在包括精确到秒的时间戳,但是,它是用 UTC 表示的,所以我必须将所有的时间戳转换成正确的时区。为此,我制作了一个 JSON 文件 ,列出了我过去 10 年居住和旅行过的地方,包括时区。

为此,我查看了护照上的印章,并查看了我的机票预订电子邮件。因为我不知道我搬到另一个时区的确切时间,所以我把搬家/旅行开始日期的所有推文都转换到了新的时区。我知道这不是完美的清理,但考虑到整个数据量(+10 万条推文),这是可以接受的。

一条 tweet 的 JSON 数据如下所示:

[## 获取状态/查找— Twitter 开发人员

编辑描述

dev.twitter.com]( dev.twitter.com/rest/refere…)

数据集:“推特”和“朋友”

现在我有+102K 的 tweets,包含正确的时间和时区信息以及其他元数据。那接下来是什么?设计数据可视化时,明确您想要传递的信息是至关重要的。澄清消息并不意味着你限制用户将要探索的见解或故事,而是帮助你找出你必须关注原始数据的哪些方面。

在对我的推文数据进行了大量的迭代和构思之后,我最终得到了两个主题——推文和朋友

小鸟叫声

Tweets 视图显示了我在宏观和微观角度发推文时的**。首先,它用柱状图显示了每月的推文数量。在这个条上,一个滑块被覆盖以选择时间跨度,在该范围内进行进一步的分析。关于所选的时间跨度,我添加了一个可视化的 7 天 24 小时矩阵,每个 7X24 块代表我在所选的时间跨度内,在所选的小时和天的组合中发了多少条推文。**

当然,发推的时间告诉了我一些有趣的事情(例如,我一起床就发了很多推),我也想利用一条推的所有元数据。在硕果累累的数据中,我重点关注了四类——交互、媒体、语言、来源*。*

互动有三种类型——提及、转发和引用。提及是对另一个用户的直接引用,通常是以@开头的推文,带有用户名。转发和引用是引用其他公开推文的方式。

媒体有四种类型— 照片、视频和网址。事实上,一条 tweet 可以同时包含照片和 URL,但是在这个分析中,URL 意味着 twee 只包含外部源的链接。

正如我之前提到的,我主要用韩语发微博,但是在乞讨的时候,我主要用英语发微博。所以我加了这一类,看看语言超时使用的变化。这两种语言——朝鲜语和英语——是我包含的语言类型。分析中没有指定其他或未定义的(主要是纯表情符号推文)语言。

Source 指的是我发微博时使用的媒介。一些例子是“iPhone 的 Twitter”(iOS 的官方应用程序)和“Twitter Web 客户端”。在这个分析中,我将这些来源归纳为两大类— 大屏幕和小屏幕。大屏幕包括我用在大屏幕上的网络客户端,那是我的电脑。小屏幕意味着包括 iPhone、Android 和 Windows Phone 应用程序在内的移动设备以及移动浏览器。如果您通过第三方服务上的共享按钮发布推文,源将被指定为服务,例如“Ask FM”或“YouTube”这些第三方来源从技术上来说来自大屏幕或小屏幕,但我没有包括这些,因为我想将来源视为我用于推特的物理设备。

在挖掘从早期步骤获得的数据到前端使用的最终数据集时,我希望优化文件大小和格式,以便 Javascript 代码完成最少的工作。现在一个单独的 tweet 数据如下所示。数组第二项中的单个字母代表类别的类型(例如,p 代表照片,k 代表韩语)。整个+102K 的最小化数据的大小现在是 3.6M!

*["2017-04-15 13 6", ["p", "f", "k", "s"]]*

老友记

我在推特上认识了很多很棒的人。作为一个 10 年的 Twitter 用户,我没有太多的追随者,主要是因为我大部分时间都在保护我的账户。我上面描述的分析显示,我有 349 个好友,这还不包括已删除的账户。最初我想包括那些被删除的账户,尽管我无法检索他们唯一的数字 Twitter ID。然后我意识到,如果我从我的 tweets 文本中手动追踪所有那些被删除的帐户(大部分包括@),可能会违背那些朋友在 Twitter 上抹去他们痕迹的意图。因此,349 个好友是截至 2017 年 4 月保持其账户活跃的人。

通过分析我的 Twitter 好友,我可以发现哪些有趣的事实?我的一些即时想法是我给他们发了多少封短信,以及我和他们聊了多久。通信的计数和持续时间很容易被挖掘;Count 是指对特定朋友自己的推文“回复推文”的次数。当朋友的 ID 被简单地包含在推文中时,她或他的 ID 不被包含在内;持续时间是第一次提及和最后一次提及之间的时间差。

除了计数和持续时间,我想做一些更个人化和面向社区的事情。

*出于一些个人方面的考虑,我手动将每个朋友标记为以下人员— **1)我在现实世界中首先遇到的人,2)我仅通过 Twitter 交谈的人,3)我首先在 Twitter 上遇到的人,然后是本人,4)非人类(即机构或事件账户)或名人。*在可视化中,这四个类别是可视化的颜色编码。一个朋友的数据简介是这样的:

*{
  "name": "exampleUser",
  "points": [
    [
      "2017-04",
      32
    ],
    [
      "2017-03",
      69
    ],
    [
      "2017-02",
      27
    ]
  ],
  "first": "Feb  6, 2017",
  "count": 128,
  "duration": 53,
  "id": "931827750",
  "common": 9,
  "category": 2
}*

Twitter 允许我通过连接到我朋友的朋友来建立我的网络。考虑到 Twitter 的这种性质,我想知道当我与其他人交谈时,都有哪些人参与其中。当一个回复的线程生成时,通常在一条推文中会提到多个 Twitter 账户。通过分析这些提及,我得出了一个社区的数据集— 这些人参与了与朋友的对话。

最后,我分析了我所有 twitter 好友的计数、持续时间和共享好友数量的分布。朋友部分更像是一个视觉分析工具,超越了一组交互式可视化。可以用多种方式选择朋友,包括传统的搜索/下拉菜单,以及可视化的交互式特征。选择一个朋友会触发所有这些可视化的更新,并指定该朋友的计数、持续时间和共享朋友数量的排名。

下一步是什么?

该项目现已在 tany.kim/twitter[可用]( tany.kim/twitter)

在下一篇文章中,我将描述数据可视化的设计过程,包括可视化形式和交互的决策。

玻璃钢生产厂家浙江走廊商场美陈供应商西宁玻璃钢动物雕塑定制九江仿铜西式玻璃钢雕塑佛山玻璃钢造型雕塑厂家中山玻璃钢彩绘大象雕塑澳门玻璃钢彩绘雕塑安乡玻璃钢花盆花器辽宁雕塑玻璃钢卡通商场美陈订购杭州玻璃钢卡通雕塑厂家直销盐城玻璃钢雕塑定制价格常州玻璃钢卡通雕塑厂家供应起跑玻璃钢雕塑长宁区进口玻璃钢雕塑优质商家江苏商场主题创意商业美陈步骤玻璃钢雕塑橡胶模制作方法南宁玻璃钢雕塑价格表商场临街门店美陈管理制度中原区人物玻璃钢雕塑仿真玻璃钢雕塑生产景观玻璃钢卡通雕塑批量定制石嘴山玻璃钢雕塑福建秋季商场美陈批发价商场室外圣诞树美陈望城玻璃钢雕塑厂家亳州多彩玻璃钢雕塑设计武威人物玻璃钢雕塑定做玻璃钢蚂蚁 卡通雕塑南通玻璃钢雕塑设计价位云南玻璃钢雕塑设计公司哪里有香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化