TowardsDataScience-博客中文翻译-2019-六-

TowardsDataScience 博客中文翻译 2019(六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

AI——恐惧、不确定和希望

原文:https://towardsdatascience.com/ai-fear-uncertainty-and-hope-3162066184bd?source=collection_archive---------25-----------------------

如何应对人工智能并开始成为它的一部分

如果你今天打开一个新闻网站,你几乎肯定会看到一篇关于人工智能、机器人、量子计算、基因工程、自动驾驶汽车、自然语言处理和其他技术的文章,这些文章来自名为“第四次工业革命”的盒子。对这些技术进行评级毫无意义,因为它们都有可能永远改变我们的世界。然而,人工智能已经涌入所有其他技术。通过掌握大数据来促进模式识别或预测是人工智能的固有品质,并经常被用于支持其他技术中的突破性发现。

我曾经听到一位驾驶教练把握着方向盘的手比作手中有枪,因为开车是多么危险。人工智能也是危险的,我们也需要面对人工智能的黑暗面,而不仅仅是陶醉于它带给我们的辉煌利益。其他的都是鲁莽驾驶。

恐惧和不确定性

随着对人工智能的接触越来越多,我们人类的身份和智力正在受到挑战。AI 什么时候会变得比我们聪明?这可能吗?有多少工作会被 AI 接管?会创造等量的新工作吗?我公司的市场会受到影响吗?我能做些什么吗?到目前为止,所有的担忧和保留都是众所周知的。每一个关注点都有足够的材料来写一篇文章。

如何应对 AI

应对人工智能挑战的一种方式是否认。简单地把这一切贴上一个会过去的大炒作的标签,为下一个大事件腾出位置。

好吧,AI 目前正在流入私人个人和企业的日常生活中,并且很有可能我们所有人从今天早上起床起就已经与 AI 接触过几次(有意或无意)。五年前,情况不会是这样。

在我看来,已经实施并完全融入我们生活的人工智能解决方案的数量,加上在世界各地推出的创新和开创性新产品的高频率,表明否认不是选项。

你手机上的 Face ID,谷歌地图,亚马逊产品推荐,谷歌翻译,你手机上的个人助理,都是使用人工智能的产品,它们已经成为我们生活中不可或缺的一部分。

那么,怎么做才能坐上 AI 的列车呢?你如何防止被落下?

认识人工智能

当开始熟悉人工智能时,认识到基于规则的专业知识和基于经验的专业知识之间的区别是很重要的。你可以认为这两者都是人工智能,因为基于规则的系统也可以包含“智能”。基于规则的系统包含了开发它的人的知识。基于经验的(ML)系统通过由制造它的人控制的学习过程获得它的知识。通过将输入与预期输出进行比较,调整神经网络(NN)并再次尝试数百万次来训练它。这意味着一个 ML 解决方案可以获得比它的创建者更多的关于特定任务的知识和经验。这才是重点!传统的基于规则的人工智能软件永远不会比设计它的人更聪明,而 ML 软件解决方案却可以。

两个简单的例子:

基于规则的计算器

基于经验的面部识别

计算器的输入是非常结构化的,并且处理规则可以以直接的方式进行逻辑描述。数字“1”永远是“1”,而不仅仅是“一种 1”。

另一方面,在面部识别中,对象在结构上更加不清楚。每张脸都有不同的大小、形状、发色,在某些情况下,你甚至只能看到一只耳朵。

使用 ML 制作计算器是非常低效的,过去的经验表明,使用传统的基于规则的方法来创建面部识别系统几乎是不可能的。

当你在手机上启动一个应用程序或在笔记本电脑上启动一个应用程序时,如果你考虑它是哪种应用程序,它将帮助你更加了解人工智能。是计算器(基于规则)还是面部识别(ML)类型?请注意,AI/ML 解决方案通常是作为基于规则的解决方案中的附加支持功能来实现的。相机应用程序就是一个很好的例子。相机应用程序中的一些功能是使用基于规则的逻辑解决的,其他功能(如面部识别)是使用 AI/ML 解决的。

一旦你发现了一个 AI/ML 函数,试着弄清楚它是如何被训练的。使用了什么样的数据?想象一下你会怎么做。培训数据是否可用,或者是否有必要/可能创建模拟数据?要做到这一点,您不必成为 IT 专家。只要你出于纯粹的好奇,稍微多关注一下它是如何工作的,你大脑中自己的私人神经网络就会自动识别人工智能功能,这又会增加你对它的认识。

想象你自己的人工智能解决方案

为人工智能未来做准备的另一种方式是开始想象你自己的人工智能解决方案。在你的日常生活中,在家里和工作中,花一些时间玩玩人工智能的想法。你能找出一个能被人工智能执行或支持的功能吗?发挥你的想象力,这甚至可能成为你未来某处的新工作。如果你有点创造力,或者喜欢寻找优化你的私人或职业任务的方法,那么这实际上会很有趣。像这样玩人工智能概念将帮助你获得对这个话题的兴趣,它将支持你形成自己的关于什么是好的人工智能,什么是压制和危险的人工智能的观点。

跳出框框思考,呆在现实的框架内(实际上非常宽)。也许你或你的组织将成为下一个谷歌人工智能影响挑战赛的受资助者之一。

希望

当今社会谁最聪明?统治我们国家的是同一批人吗?拥有 180 的智商会让你凌驾于他人之上吗?世界上最富有的 10 个人和智商最高的 10 个人是一样的吗?为什么不呢?我认为人类不仅仅是智慧,我想我们大多数人都是这样认为的。我们的生活不仅仅是被智力支配,甚至是控制。然而,人工智能挑战我们去意识到其他的组成部分——人的因素。意识、同理心、好奇心以及巨大的自我克制和求生意志。

人工智能需要监管层面的法律和行为规则,就像我们社会的任何其他重要和常见的领域一样。幸运的是,今天有数以千计的人工智能项目旨在改善全世界人类的生活。

就个人而言,我们都需要参与,我们已经这样做了。问题是。你是否有意识地参与——这是你的选择。

有趣的链接。

自己试试这个游戏:这是一个连接四个游戏。它是由 GraphPipe 项目开发的,作为他们 ML 模型部署项目的一个用例。如果你对其背后的细节感兴趣,安东尼·杨写了一篇关于它的好文章

克劳斯·施瓦布关于第四次工业革命的文章

谷歌云人工智能历险记的国玉峰很好地描述了机器学习

Photo by Kristopher Roller on Unsplash

算法交易的人工智能:重新思考棒线、标签和平稳性

原文:https://towardsdatascience.com/ai-for-algorithmic-trading-rethinking-bars-labeling-and-stationarity-90a7b626f3e1?source=collection_archive---------2-----------------------

Image from https://www.tradingsetupsreview.com/trading-charts-without-time-range-tick-volume/

在一系列文章中,我应用了一种非常简单的方法来预测金融时间序列:利用整个数据集,使用滑动窗口方法生成 X 和 Y,将其分为历史数据和样本外数据,训练一些机器学习模型将 X 映射到 Y,并回测简单的多空策略。但是正如我在的上一篇博客文章中所展示的,我开始意识到,“正常”静态数据(如图像、文本、音频、表格数据,甚至不太混乱的时间序列)的管道不能用于金融时间序列分析。

问题不仅仅在于数据是随机的,难以预测。这完全是对其内在本质的误解,这影响了数据集准备、交叉验证、特征选择和回溯测试。在本文中,我们将专注于众所周知的“酒吧”,它们有什么问题,以及如何正确地烹饪它们,以便稍后在机器学习模型中使用。在重建了这些条之后,我们将会发现一些新的方法来构建输入和输出。当然,我们将从统计和经验两方面比较这些方法。我在这里展示的观点受到了《T2》洛佩兹·德·普拉多 的书的很大影响,我推荐任何想深入了解更多细节的人阅读这本书。您还可以在这里找到所有代码:

[## rach nog/高级深度交易

大部分实验基于“金融机器学习的进步”一书- Rachnog/Advanced-Deep-Trading

github.com](https://github.com/Rachnog/Advanced-Deep-Trading/tree/master/bars-labels-diff)

蜡烛怎么了?

我们习惯于使用所谓的“蜡烛线”数据,这些数据代表特定时间段(从几分钟到几天)的开盘价、最高价、最低价和收盘价。这种方法有一个主要问题:市场不遵循这个时间规则。人们不会在某个时间或每隔 N 分钟/小时下单和交易。此外,由于现代市场是由算法驱动的,它们肯定会在需要的时候下注,而不是在 N 秒过后下注。如果我们基于恒定的时间间隔对历史数据进行采样,会发生什么呢?当交易非常活跃时,我们会欠采样,而当交易不活跃时,我们会过采样。最后但并非最不重要的是,从上面提到的所有情况来看(根据经验),按时间采样的棒线遵循“坏的”统计特性:它们具有低序列相关性,具有异常值,并且不能通过分布正态性检验。

解决方案在于根据另一种规则对这些棒线进行采样:

  • 分笔成交点:当出现 N 个分笔成交点时,对 OHLC 棒线进行采样
  • 成交量棒线:当某项资产的 X 股交易时,对 OHLC 棒线进行取样
  • 美元棒线:当资产以 Y 美元(或其他货币)交易时,对 OHLC 棒线进行采样
  • 不平衡棒线:当价格或买入/卖出的涨跌比率偏离我们的预期时,对 OHLC 棒线进行取样

从下面一个时间序列样本的图片中,你可以直观地了解这些条形是如何产生的:

Comparison of some of the above-mentioned bars on IVE ticker

上面提到的所有方法都是为了创建含有等量信息的棒线:分笔成交点有相同的交易数量,但是交易量可能有很大的不同,所以我们可能更好地选择交易量相同的棒线作为样本。美元棒扩展了这个想法链,使每个棒都有相同的市场价值。不平衡棒线可以应用于分笔成交点、成交量或美元棒线。让我解释一下分笔成交点不平衡棒线背后的想法。不平衡分笔成交点是遵循相似价格趋势的 N 个分笔成交点的样本。

正如你所看到的,所有这些想法都严重依赖于市场微观结构来重建我们已经非常了解的时间序列。让我们来看看这些酒吧是否真的像看起来那么好。他们没有太多的市场微观结构数据的来源,有出价,要价和大小列,我可以找到这个相同主题的教程,但我会自己实现大多数方法。这里我们有每 10 分钟采样一次的时间棒线,每 100 根棒线采样一次的价格棒线,每 10000 笔交易的交易量和每 1000000 美元的交易量(几个月内):

Comparison of distributions of returns with different bar rules

统计属性呢?下面你可以找到不同参数的不同棒线的比较,以及它们的序列相关性、标准差和正态性检验。

正如我们所看到的,对于每个参数,替代棒线比时间棒线表现得更好(除了方差之外,方差无论如何都非常低)。我以前怎么会用时间条呢?😦

!更新!

GitHub 用户https://github.com/mpugna对代码进行了修复,这使得时间条仍然非常吸引人:

自相关是-0.079,Jarque-Bera 78692.65,Shapiro 0.7924。常态测试仍然比另类酒吧差,但至少现在看起来更有吸引力。

如何正确标注数据集?

在我之前的文章中,我预测了价格在 N 根棒线通过后的变化。例如,我想预测 30 分钟后价格将如何变化,并根据预测做多或做空。但这真的是从业者和交易者的行为方式吗?当他们在一些信号后开仓时,他们会记住他们的止盈目标和止损目标。这意味着,我们更关心这 30 分钟内发生了什么,而不是当它们过去时会发生什么。此外,由于市场的波动,我的利润和亏损目标可能会随着时间的推移而变化。此外,由于我要在市场价格变动的某个方向下注,我需要知道我应该下多少注。最后但同样重要的是,从我的模型的角度来看,我对我的预测的信心感兴趣,不要在随机信号上浪费时间。

因此,我对一种新的标记方法感兴趣,它包括:

  • 考虑收益的滚动波动率
  • 考虑到止损止盈
  • 告诉我的不仅仅是一方,还有赌注的大小

动态阈值

我们先从收益的波动性说起。让我们考虑一个简单的框架,其中我们仍然有一个固定的预测范围,我们想标记三个类别:如果当前价格和未来的回报大于某个阈值 T (如 T = 0.1 时 r = 0.2),小于-T(如 T = 0.1 时 r = -0.12),或不显著(如回报的符号小于 T,如 T = 0.1 时 r = 0.05)。我们可以固定整个数据集的 T 值,也可以使用回报率的标准变化来自适应地计算 T 值。让我们检查一下这个想法,选择固定的 T = 0.025 阈值用于 60 个分笔成交点的水平回报,并将其与 T 进行比较,这等于最近 100 个回报的绝对值的标准偏差:

Histogram of labels for fixed threshold (left) and volatility driven labeling (right) for the fixed horizon

正如我们所看到的,基于波动性的标记仍然不是很平衡,但固定阈值标记基本上使大多数标记为 0 (其中-1 表示下降,1 表示上升,0 表示无显著变化)。我只想注意,这些标签是在使用滑动窗口在条形上循环时创建的,这不是采样数据点的最佳方式,但我们稍后将讨论这个问题。

三重屏障标记

现在让我们研究另一种用于标记数据集的适应性,这种适应性在书“三重屏障方法”中被称为。我们想知道接下来的 N 根棒线会发生什么——我们会遇到止损的情况吗?或者我们应该获利?或者价格会有一点波动,所以我们最好不要下注?或者甚至是这些事件的组合?我们可以用三个障碍来描述这三种情况:两个水平障碍(代表止损和止盈)和一个垂直障碍,这意味着最终的地平线(在我们前面的例子中是固定的地平线)。当然,这些水平障碍不应该是对称的(例如,你是一个激进的玩家,你的止损与止盈目标相比相当低)。

Image from http://www.quantresearch.info/Innovations.htm

赌注的大小和元标记

好的,我们有一些聪明的方法来标记价格是上涨还是下跌,考虑到波动性和我们的止损和获利目标。但我们仍然不知道我们应该赌多少(以及我们是否应该下注)!Lopez de Prado 提供了两步标记,其中一个标记负责方向,另一个标记负责赌注的确定性(以及赌注的大小):

  • 将每个样本标记为将首先上涨或下跌的样本,使用动态阈值作为初步止损和止盈屏障(基本上我们想知道价格将首先上涨还是下跌)
  • 了解这一点后,我们希望根据我们的预定义止损和止盈目标下注或不下注,因此,如果我们的第一个标签显示“上涨”,我们将检查我们是否也会达到止盈目标,如果我们得到确认,我们将第二个标签设置为 1。如果我们有第一个标签“下跌”,我们将触及止损——我们仍将其标记为 1。只有当我们在第一个标签的方向和止损或止盈之间没有对应关系时,我们才会将它标记为零。

最酷的是。在准备数据集时,我们在我们的特征集上训练一个预测边(标签 1)的模型。我们还训练了第二个模型,它将所有以前的特征作为输入,并标记一个特征。因此,在根据第一个模型预测了方向之后,我们希望知道第二个模型的确定性水平,并根据其从 0 到 1 的输出,我们进行适当的押注。例如,如果第一个模型显示“上涨”,但第二个模型显示 0.05 左右,这意味着即使价格也会上涨,很可能我们不会达到止盈目标。

内存和平稳性呢?

正如我们所知,在将数据传递到任何机器学习模型之前,我们需要以某种其他方式规范化或标准化或使其稳定。当我们谈论金融时间序列时,我们通常会进行一些滞后的微分(通常滞后 1,我们称之为回报)。它确实使时间序列平稳,但是这个时间序列中应该有一些记忆的信息发生了什么?就这么被消灭了!为什么?由于滞后 1 的这种差异,它看起来仅落后一个棒线,对之前发生的事情一无所知,因此为了平稳起见,我们对历史时间窗口中的所有棒线都这样做。我们仍然希望有一个平稳的时间序列,但不删除其中所有有用的内存…如果我们只能用小于 1 的阶来区分它会怎么样?事实上我们可以,这叫做,分数阶微分。我将把更多的细节留给主书或其他资源,现在让我们相信我们可以区分滞后 0.1、0.3 或 0.75 的时间序列,这应该会给我们更多一点的内存。

Backshift operator of arbitrary order (from Wikipedia)

让我们通过 ADF 测试来衡量对数价格与不同种类的差异和平稳性之间的相关性保留了多少信息:

ADFs and correlation for tick bars (left) and time bars (right)

正如我们所见,在这些分笔成交点时间序列中,分数阶微分不会给我们更好的平稳性,但确实有更多的相关记忆。在时间条的情况下,我们可以使用 0.5–0.75 阶微分来稍微改善我们的数据

把它全部输入神经网络

好了,现在是时候看看当我们试图用新的目标来塑造我们的新酒吧时会发生什么。我将使用非常简单的 softmax 回归作为分类算法(剔除正则化),并将历史窗口内的收盘价、成交量和回报率标准化为特征。Keras 中的模型看起来像:

main_input = Input(shape=shape, name='main_input')
x = Flatten()(main_input)
x = Dropout(0.25)(x)
output = Dense(3, activation = "softmax")(x)

相应地,长窗口长度为 100,短窗口长度为 50,预测范围为 25 小节。阈值 T = 0.01。数据集将由刻度条组成:

Tick bars for a train (blue), validation (yellow) and test set (green)

正如你所看到的,在集合之间有一些自由空间,这被称为“禁运”并且有助于确保我们的模型在未来会工作得更好。我们稍后将详细研究它,现在让我们把它看作一个更现实的拆分场景。为了处理类别不平衡,基于训练集和验证集计算每个类别的权重。

固定阈值与波动阈值与三重屏障

我们的基线将只是对价格上涨或下跌或不超过阈值 t 的预测。分类报告将如下(0 级代表下跌,1 级代表不显著的上涨,2 级代表上涨):

 precision    recall  f1-score   support

           0       0.09      0.32      0.14       899
           1       0.90      0.36      0.52     11116
           2       0.06      0.41      0.11       765

   micro avg       0.36      0.36      0.36     12780
   macro avg       0.35      0.36      0.25     12780
weighted avg       0.79      0.36      0.47     12780

印象不深,对吧?而不是精确度/召回率的不平衡以及数据集标签的不平衡。那么波动阈值呢?

 precision    recall  f1-score   support

           0       0.39      0.33      0.36      4922
           1       0.20      0.30      0.24      2896
           2       0.38      0.34      0.36      4962

   micro avg       0.33      0.33      0.33     12780
   macro avg       0.33      0.32      0.32     12780
weighted avg       0.35      0.33      0.33     12780

数字越来越好。我们在精确度/召回率方面没有不平衡(这意味着分类器是公平的,随着算法本身和功能的改进,我们将在精确度方面有值得信赖的改进),数据集不平衡现在不是那么关键。好了,让我们试试三重屏障,现在根据波动率在滚动 T 的值处对称止盈止损,就像上一个例子一样:

 precision    recall  f1-score   support

           0       0.50      0.28      0.36      6225
           1       0.48      0.47      0.47      6189
           2       0.02      0.22      0.04       366

   micro avg       0.37      0.37      0.37     12780
   macro avg       0.33      0.32      0.29     12780
weighted avg       0.48      0.37      0.41     12780

平均结果大致相同,因为等级 2,这里代表接触垂直线的障碍,人口非常少。如果我们避免这种情况,基于止盈和止损的上下波动的精确度将会高于前面的例子,但精确度/召回率会出现轻微的不平衡。将这些预测作为二元预测模型的元标签,该二元预测模型将学习赌注的一面,它将具有以下准确度:

 precision    recall  f1-score   support

           0       0.03      0.58      0.06       360
           1       0.98      0.52      0.68     12420

   micro avg       0.52      0.52      0.52     12780
   macro avg       0.51      0.55      0.37     12780
weighted avg       0.95      0.52      0.66     12780

分数微分与整数微分

现在让我们用 d = 0.5 来替换具有微小差异的对数价格的特征集合中的回报,并看看相同的实验会发生什么。基线(还是没什么印象):

 precision    recall  f1-score   support

           0       0.09      0.47      0.15       899
           1       0.88      0.45      0.60     11116
           2       0.05      0.16      0.08       765

   micro avg       0.44      0.44      0.44     12780
   macro avg       0.34      0.36      0.28     12780
weighted avg       0.78      0.44      0.54     12780

波动范围已经比“正常”分化好一点:

 precision    recall  f1-score   support

           0       0.41      0.37      0.39      4922
           1       0.24      0.28      0.26      2896
           2       0.40      0.40      0.40      4962

   micro avg       0.36      0.36      0.36     12780
   macro avg       0.35      0.35      0.35     12780
weighted avg       0.37      0.36      0.36     12780

最后,三重屏障及其元标签:

 precision    recall  f1-score   support

           0       0.49      0.37      0.42      6225
           1       0.49      0.44      0.47      6189
           2       0.04      0.25      0.06       366

   micro avg       0.40      0.40      0.40     12780
   macro avg       0.34      0.35      0.32     12780
weighted avg       0.48      0.40      0.43     12780 precision    recall  f1-score   support

           0       0.03      0.53      0.06       360
           1       0.98      0.54      0.69     12420

   micro avg       0.54      0.54      0.54     12780
   macro avg       0.50      0.54      0.38     12780
weighted avg       0.95      0.54      0.68     12780

我想我们确实可以确认,分数阶微分是一个非常有用的变换,它允许从原始时间序列中保存更多的信息!

结论

在本文中,我们回顾并重新定义了我们过去在金融网站上看到的经典酒吧是如何创建的。我们发现了它们的统计特性,我们真的同意成交量或美元棒线比标准的时间棒线更有吸引力。我们还建立了几种更现实的方法,根据不断变化的波动性和预定义的止盈止损目标来标记产出。最后但并非最不重要的是,我们回顾了一种方法,使金融时间序列平稳,而不会失去所有的记忆。我们还用数据和标签评估了所有这些实验,我们实际上可以看到,所有这些有意义的改进确实使结果更加稳定和充分。当然,这不是一个神圣的圣杯,但至少它不像我和许多其他人以前做的那样愚蠢……:)不要忘记查看我的库中的代码!

附言
如果你觉得这个内容有用,有观点,可以在 Bitclout 上支持我。关注我还可以在脸书上看到太短的人工智能文章,在 Instagram 上看到个人信息,在 Linkedin 上看到!

人工智能检测癌症

原文:https://towardsdatascience.com/ai-for-cancer-detection-cadb583ae1c5?source=collection_archive---------26-----------------------

Credit: pixabay

CANCER——这个词几乎总能引起任何人的恐惧。在新加坡,据估计每 4 到 5 个人中就有一个人会在一生中患上癌症,其中乳腺癌在女性中居首位(T5【来源】T6)。虽然令人欣慰的是,随着医疗保健的进步,癌症不再是每个病人的死刑,但治疗费用过高。事实上,晚期癌症治疗的费用从每月 8k 美元到 17k 美元不等( 来源 ) 。解决办法?不,不是人寿保险,而是…..及早发现!

使用来自 kaggle 的乳腺癌数据集,我的目标是建立一个机器学习模型来区分恶性和良性病例。

概观

该数据集由 569 个病例组成,其信息跨越从乳腺肿块提取的细胞核的数字化图像上的 33 个特征。

Rows     :  569
Columns  :  33

Columns : 
 ['id', 'diagnosis', 'radius_mean', 'texture_mean', 'perimeter_mean', 'area_mean', 'smoothness_mean', 'compactness_mean', 'concavity_mean', 'concave points_mean', 'symmetry_mean', 'fractal_dimension_mean', 'radius_se', 'texture_se', 'perimeter_se', 'area_se', 'smoothness_se', 'compactness_se', 'concavity_se', 'concave points_se', 'symmetry_se', 'fractal_dimension_se', 'radius_worst', 'texture_worst', 'perimeter_worst', 'area_worst', 'smoothness_worst', 'compactness_worst', 'concavity_worst', 'concave points_worst', 'symmetry_worst', 'fractal_dimension_worst', 'Unnamed: 32']

数据集有些不平衡。

B    357
M    212 

功能选择

在 33 个特征(又名列)中,并非所有特征对恶性肿瘤的确定都有同等贡献。Random forest 有一个函数调用 feature_importance 来帮助识别重要的。

# Plot the top 10 features based on its importance
(pd.Series(model.feature_importances_, index=X.columns)
 .nlargest(10) 

以下是按降序排列的 10 大特征。

这 10 个特征分布的直观表示揭示了其中恶性病例的一些“钟形曲线”模式。

我们真的需要 10 项功能吗,或者可以进一步减少吗?这些前 10 个特征与我们的目标(“诊断”)的关联热图偶然显示其中 5 个特征彼此之间有很强的相关性。这意味着我们可以选择一个作为代表,并消除其余的。它们都与周长、面积和半径有关,是有意义的。(体积不包括在内,因为数据集属于 2d 信息,否则它很可能在其中。)如果您想知道为什么每个重要特征都显示正相关,这是意料之中的,因为所有 33 列都与维度相关,并且我们知道可量化的癌细胞越多,它就越先进。每个人都有癌细胞。如果是可检测的量,这就是我们将患者标记为患有癌症的地方。

我满足于用“radius_worst”来表示这些高度相关的特征,并重新定义 X(特征)和 Y(目标)。

X = df.loc[:,[‘radius_worst’,’concave points_worst’,’concave points_mean’,‘concavity_mean’,’area_se’,’concavity_worst’]]y = df[‘diagnosis’]

模型建立和比较

建立模型的下一步是将数据集分为训练数据集和测试数据集。我采用了 80%-20%的分割,并使用分层方法在训练集和测试集中保持相同的恶性-良性病例比率,因为数据集是不平衡的。

下一步是将 kfolds 应用于训练集,以在 80%的数据集上执行训练验证。我再次应用 StratifiedKFold 来保持我的(n_split = 5)折叠的分布。10 种常见机器学习算法的结果令人振奋。有三个强有力的竞争者。

通过调整参数来查看这些模型是否可以进一步改进被证明是有用的,因为大多数模型在大多数指标上都有所改进。

从视觉上看,很明显这将是一个艰难的决定,在我值得的候选人中。从下面的图表来看,LogisticRegression、RandomForest 和 XGBoost 之间的竞争几乎不分上下。

当考虑 ROC-AUC 度量时,逻辑回归是冠军,ROC-AUC 度量说明了模型区分两个类别的能力。

结论

然而,如果我们从时间消耗的角度考虑成本,那么就有一些权衡。对我来说,我觉得这仍然是可以接受的,也是在实际部署时需要考虑的一个因素。但是现在,由于数据集不是非常大,它仍然是可管理的。

我希望在处理不平衡数据集时需要注意的不同算法、指标和因素(分层训练-测试分割、使用分层文件夹的交叉验证)是有用的。

地震破坏模拟的人工智能

原文:https://towardsdatascience.com/ai-for-earthquake-damage-modelling-7cefae22e7e1?source=collection_archive---------33-----------------------

人工智能和预测性分析如何帮助更快地从地震中恢复的案例研究

Image credit : Sky News

2015 年 4 月,尼泊尔发生了 7.8 兆瓦或 8.1 毫秒的大地震,最大麦卡利烈度为八度(严重)。根据尼泊尔开放数据门户网站,它影响了 3,677,173 个人和 762,106 财产。灾后,尼泊尔花了数年时间收集和评估损失,这是世界上最大的损失评估数据之一。像地震这样的大规模灾难之后,恢复通常分为两个阶段

  1. 收集人口、建筑和法律数据
  2. 领域专家使用这种大规模嘈杂数据进行的损害评估

基于建筑物的位置和结构,我们的目标是预测 2015 年尼泊尔廓尔喀地震对建筑物造成的破坏程度。

数据看起来怎么样?

在本案例研究中,我们使用了结构、所有权和损坏数据来准备训练和测试数据集。原始数据来自尼泊尔的开放数据门户。如果您想使用我的前置数据,您可以从下面的链接中获得(结束注释部分)。现在,让我们更仔细地看看清理后的数据

shape of the cleaned training and test data

数据不平衡,60%的“高”损害等级,22%的“低”损害等级和 18%的“中等”损害等级。为了处理不平衡的数据,需要手动采样。从最初清理的 700,000 个数据中,已经对每个类的 100,000 个数据进行了采样,并且已经为训练准备了 300,000 个数据点的训练集。分层抽样已用于准备最终的训练、测试和验证数据集。极少数数据点包含缺失值(< 30),so we ignored these data points.

Is Age a factor?

Our final data set is of 41 dimension.Our independent variables are either numerical,categorical or binary.We have analysed the numerical and categorical variable in order to gain insights over data.For example Let’s take a snapshot of how buildings developed over last 10 years were affected

The ‘Age Factor’

Interestingly there are some properties where age is more than 950 years ! Are these outliers? As per Wikipedia there are few properties in Nepal which are actually that old. As per our data the number is 2521 )。

damage grade of properties aged over 950 years

绩效指标

我们预测破坏程度从 1 到 3(低、中、高)。损坏程度是一个顺序变量,意味着排序很重要。这可以看作是一个分类有序回归问题。(有序回归有时被描述为介于分类和回归之间的问题。)

为了衡量我们算法的性能,我们使用了 F1 分数,它平衡了分类器的精度和召回率。传统上,F1 分数用于评估二元分类器的性能,但由于我们有三个可能的标签,所以我们使用了一个称为微平均 F1 分数的变体。

|TP| is True Positive, |FP| is False Positive, |FN| is False Negative, and |k| represents each class in |1,2,3|

车型及性能:

在预处理和数据准备之后,我们从一个随机模型作为基线开始。尝试了各种机器学习模型,如逻辑回归、nystrome 逼近的线性 SVM(用于内核技巧)、随机森林、Light GBM 等。我们从一个非常基本的逻辑回归模型开始,复杂性逐渐增加。

为了从各种模型中获得最佳效果,必要时使用了 GridsearchCV 和简单的交叉验证技术。在实践中,经过调整的逻辑回归、SVM 和随机森林模型产生了在 0.65 到 0.69 范围内的微观平均 f1 分数。为了得到更好的分数,多数投票分类器和轻量级 GBM 模型被开发出来。让我们看看如何为多类分类问题定义一个定制的评估标准,以应用轻量级 GBM

通过对 lightGBM 和多数投票分类器进行适当的超参数调整,我们能够分别获得 0.78 和 0.74 的 f1 分数。我们也尝试了各种深度学习架构(MLP、LSTM、1D CNN),但与经过调整的机器学习模型相比,性能很差。

以下是所获得结果的对比视图

现实世界影响

自动化评估可以帮助两种类型的最终用户

  1. 政府机构:政府机构无需人工干预就能更接近、更快速地了解地震造成的损失,从而促进损失恢复。
  2. 保险公司:大规模灾难发生后,保险公司的理赔系统被大量新的索赔淹没。索赔处理人员查看所有损坏数据并确定损坏严重程度变得更加困难。将索赔系统与基于人工智能的损害评估服务相结合,将有助于索赔处理人员查看单个指标(损害等级)并决定损害的严重程度。这可以加快索赔处理的速度。

结束注释

您可以在我的 GitHub 资源库中找到这个案例研究的所有必要文件、代码和数据集。

引用:

  1. https://eq2015.npc.gov.np/#/
  2. https://arxiv.org/abs/1606.07781
  3. https://www.npc.gov.np/en
  4. https://en.wikipedia.org/wiki/April_2015_Nepal_earthquake

面向所有人的人工智能:神话还是现实?

原文:https://towardsdatascience.com/ai-for-everyone-myth-or-reality-44edc24f7982?source=collection_archive---------16-----------------------

脸书题为“物体识别对每个人都有效吗?”

Photo by Perry Grone on Unsplash

“AI 是一个工具。如何部署是我们的选择。”柳文欢·埃齐奥尼

人工智能技术正在缓慢而稳步地侵入我们的生活。他们已经在为我们做一些重要的决定,比如我们是否有资格申请抵押贷款,我们喜欢什么样的电影或歌曲,甚至建议给我们发电子邮件回复。计算机视觉是人工智能的一个积极发展的子领域,它有着很大的前景。面部识别、物体检测、图像识别、情感分析等技术正被各行各业用来增强消费者体验、降低成本和提高安全性。但如果这些系统的结果对某个特定的种族、性别或地区有偏见呢?嗯,肯定有比看上去更复杂的东西。

最近,脸书研究人员在一篇题为: 的论文中称,物体识别对每个人都有效吗? 就当前 SOTA 异议检测技术结果的适用性提出了一个非常中肯的问题。他们的研究强调了在低收入或非西方国家识别普通家庭用品时的强烈地理偏见。下图显示了低收入国家的预测结果与实际情况相差甚远,而西方国家的预测结果却非常准确。

Household item recognition in Low income Vs High-Income Countries.

有偏见的数据导致有偏见的模型

计算机视觉系统中的偏见和代表性不足的故事并不新鲜。许多研究都清楚地表明了这种模式。这里有两个具体的例子。

  • 论文 商业性别分类的交叉准确性差异 强调了这样一个事实,即商业使用的性别分类系统对于肤色较浅的男性比肤色较深的女性更为准确。
  • 职业图片搜索结果中的不平等代表性和性别刻板印象显示,谷歌搜索结果中女性代表性不足。

这种有偏差的结果的最可能的原因之一是用于训练模型的数据类型。在大多数情况下,数据收集本身是有偏差的,正是这种偏差最终渗透并显示在模型的预测中。在当前的研究中,发现几乎所有流行的数据集中使用的照片集合包括COCOOpenImages 。大部分数据来自欧洲和美国,地理分布非常不均匀。

Data Distribution VS Population Distribution

令人惊讶的是,尽管大部分人口集中在非洲、南美、中亚和东南亚,但他们对数据的贡献却少得多。

需要多样化的数据

这项研究是在 美元街 数据集上完成的,该数据集收集了来自 50 个国家的 264 个家庭的家居用品。这些图像是由 T21 Gapminder 基金会收集的,目的是为了衡量世界上人们生活条件的差异。

与其他流行的影像数据集不同,Dollar Street 数据集具有相当分散的数据。以下 Cholorpeth 地图显示了 Dollar street 数据集中每个国家的影像数量。

A more geographically spread Dollar Street dataset

美元街数据集还记录了每栋被拍照房屋的月消费收入。这揭示了当前对象检测系统中与收入差距相关的另一个重要因素。****

“与每月收入超过 3500 美元的家庭相比,每月收入低于 50 美元的家庭的物体识别系统的错误率大约低 10%”Terrance 等人。(2019)]

The accuracy of the object detection models w.r.t the income levels.

以下是顶级模特的表现以及她们的 5 大预测。相当惊人。

结论

该论文强调了数据收集方法中的严重问题及其对全世界正在开发的人工智能系统的影响。为了培养对这些系统的更多信任和信心,重要的是研究不应局限于某一特定地区或经济状况,而应包括社会的所有地区、性别和种族。只有到那时,人工智能才会对所有人真正有意义。

参考

参考

文中引用的所有图片和数据均摘自论文: 物体识别对每个人都有效吗?作者:Terrance DeVries,Ishan Misra,Wang,Laurens van der Maaten 脸书艾研究

《人工智能为每个人》:吴恩达想用 30 分的非技术课程传达什么。

原文:https://towardsdatascience.com/ai-for-everyone-what-andrew-ng-want-to-convey-with-this-non-technical-course-in-30-points-bedaea57c81b?source=collection_archive---------13-----------------------

Source

人工智能对每个人来说都是一门非技术性的课程,学习这门课程,你会比世界上大多数 CEO 学到更多的知识。至少吴恩达是这么宣称的。所以让我们简单地了解一下他想传达什么。

  • 到 2030 年,人工智能将创造 13 万亿的价值,主要用于零售,其次是旅游和汽车行业。
  • 人工智能大致分为人工狭义智能(ANI)和人工广义智能(AGI)。随着 ANI 的大量进步,人们开始错误地相信他们正在 AGI 进步。

  • 不要在收集数据的 IT 基础设施上花费太多。尽可能早地向人工智能团队提供数据,以便他们可以判断收集数据是否有用,并可以改变数据收集策略。也不是说数据越多,价值越大!
  • 机器学习就是学习 A 到 B 的映射,其中 A 是输入,B 是输出标签,而数据科学更多的是从数据中提取见解和结论。机器学习的输出是软件,而数据科学的输出是幻灯片
  • 深度学习是“神经网络”的品牌名称,这些网络只不过是大型数学方程。神经网络受到大脑的启发,但内部功能几乎与实际大脑的工作方式无关。
  • 正如:
    商场+互联网!=互联网公司 同理:
    任何公司+深度学习!= AI 公司。
  • 人类用一秒钟的思考所能做的任何问题,以及有大量标记数据可用的问题,都可以用监督的 ML 来自动化。例如——用户是否会点击添加。
  • AI 目前无法感同身受或理解手势。人工智能无法学习少量数据复杂任务。
  • 对于机器学习:
    收集数据,训练模型,部署模型。 对于数据科学:
    收集数据,分析数据,建议修改
    例如:在招聘中,数据科学将通过分析数据帮助我们优化招聘流程。而机器学习可以帮助自动简历筛选。
  • 选择对你的生意既可行又有价值的项目。在决定一个项目时,人工智能专家和领域专家应该一起工作。
  • 自动化任务而不是作业。了解您业务中的痛点
  • 即使没有大数据也可以进步。
  • 除了业务勤勉和技术勤勉,还要考虑道德勤勉你正在建设的项目是否会给人类带来一些好处。
  • 对于人工智能团队,在测试集上指定你的统计接受标准。
  • 角色:
    软件工程师:像写函数/子程序一样写软件代码。
    机器学习工程师:负责创建模型
    机器学习科学家:负责扩展技术状态
    应用 ML 科学家:介于 ML 工程师和研究员之间的角色
    数据科学家:检查数据并提供见解以推动业务决策
    数据工程师:确保数据可以以安全且经济高效的方式轻松访问
    AI 产品经理

Source

  • 执行相关的人工智能试点项目可以设定 6-12 个月的牵引。
  • 创建一个中央人工智能团队,并在 CAIO(首席人工智能官)的领导下分散到多个业务部门。最初,首席执行官应该向人工智能部门提供资金,而不是阿布提供资金,在初始投资后,人工智能团队必须展示其为业务部门创造的价值。
  • 商业领袖必须了解人工智能能为他们的企业做什么。人工智能团队领导应该设定项目方向并监控资源。内部人工智能工程师应接受人工智能管道方面的培训
  • CLO 应该知道如何管理内容,而不是创造内容。
  • 只有在执行了一两个项目后才建立人工智能策略,否则它将成为一个学术策略而不是实用策略。不同的公司有不同的策略。
  • 少数据起家的好产品,才会有用户。随着时间的推移,这些用户将生成可用于改进产品等的数据
  • 战略数据采集。不要为了收集有用的数据而将产品货币化。像机器学习工程师这样的新角色应该被提升。
  • 将工程人才与商业/销售人才配对,寻找可行且有价值的项目。
  • 不要期望人工智能项目第一次就能成功,也不要在人工智能项目中执行传统的计划流程。
  • 找朋友学 AI,头脑风暴项目,找导师!
  • 也不要对 AI 过于乐观超级智能即将到来。也不要太悲观关于 AI 那个 AI 冬天来了!在中间的某个地方!
  • 可交代性AI 是硬的。
  • AI 可以变成有偏有偏数据。
  • 人工智能系统对对抗性攻击开放。在未来,公司可能会与敌对的攻击者展开战争。
  • 美国和中国在人工智能方面领先,但这项技术仍然不成熟给了其他国家同等的竞争优势。
  • 根据麦肯锡公司的报告,到 2030 年,人工智能取代了 4-8 亿份工作,创造了 5 . 55-8 . 9 亿份工作

谢谢你吴恩达!总的来说,我喜欢这个课程,我希望能有更多的人力资源专业人士应该了解像 tensorflow,keras 等工具。但是再一次,很高兴看到吴恩达回来了。最后一个笑话来结束它!

为什么 AI 会有那么多令人震惊的结果?

因为人工智能是新的电力,

电击!!😄

阅读我在 Medium 上的其他文章:

  1. 我的第一次数据科学面试
  2. 机器学习:什么、何时、如何?
  3. 卡尔曼滤波面试

关于我:我是一名自动驾驶汽车工程师,专注于使用深度学习为车辆提供智能。请在 LinkedIn 上联系我,这是与人交流的好机会。

人工智能的好处:盲人钞票检测

原文:https://towardsdatascience.com/ai-for-good-banknotes-detection-for-blind-people-373efc81a482?source=collection_archive---------15-----------------------

使用深度学习人工智能制作最先进的验钞机的指南

这项服务可以识别钞票是哪种货币(欧元美元美元)以及面额(5、10、20、…)。社会影响的目的是帮助盲人,所以我小心翼翼地制作了“现实生活”的训练图像,将钞票握在手里,有时折叠,有时遮住一部分。

这篇文章希望有助于鼓励其他人学习深度学习。我在用令人惊艳的 fast.ai 在线免费课程,非常推荐。作为他们务实、自上而下方法的证明,这个附带项目是基于第 3 课。在他们的在线论坛上,你可以找到更多令人惊叹的同学申请。

我的项目部署在 iris.brunosan.eu

这里有一个推论的例子:

令人惊讶的是,快速、有趣和简单的部分是深度学习部分(恭喜 fastai!),生产服务器花费了大约 10 倍的时间(我还必须了解一些关于 docker 和无服务器应用程序的细节)。

挑战

我发现在识别钞票上做了一些努力来帮助盲人。一些尝试使用计算机视觉和“比例不变特征”(大约 70%的准确率),一些使用机器学习(准确率高得多)。在机器学习方面,值得一提的是微软研究院去年的一项研究和尼泊尔程序员 Kshitiz Rimal 今年的一项研究,它们得到了英特尔的支持:

我的目标是复制一个类似的解决方案,但我将只制作一个功能正常的网站,而不是应用程序,也不是设备上的检测(我现在离开这一点)。但是,我将使用不同的架构。由于我想一次做几种货币,所以我想尝试多类分类。我见过的所有解决方案都使用单一类别检测,例如“1 美元”,我想将其分为两个类别,“1”和“美元”。原因是我认为跨货币(所有美元看起来都相似)和跨面额(例如,5 美元和 5 欧元有相同的数字 5)都有一些特征需要学习。共性应该有助于网络强化每个类别的特征(例如,一个大数字“5”)。

简单的部分,深度学习

我基本上遵循了 fast.ai 课程中关于卫星探测的多类课程,没有做太多修改:

数据

在现实生活中,很难在单张钞票上获得图像。完成这个项目后,我找到了我上面提到的关于约旦货币的学术论文,以及尼泊尔的项目,它们都链接到了他们的数据集。

我决定依靠谷歌图片搜索和来自欧洲央行和美国造币厂的图片,我知道它们会给我不切实际的好钞票图片。我也用家里的钱拍了一些小面额的照片(可惜我家里没有 100 美元或 500 欧元)。我总共有 14 到 30 张每种面值钞票的图片。一点也不多。我的图像数据集是这里的。

Training images for identifying banknotes, a combination of stock photos and some I made.

由于我没有太多的图像,我使用了参数加宽的数据增强。(我错加了空翻,这可能不是个好主意):

*tfms = get_transforms(do_flip=True,flip_vert=True, 
 max_rotate=90, 
 max_zoom=1.5, 
 max_lighting=0.5, 
 max_warp=0.5)*

最终,数据集在训练/验证期间看起来是这样的:

Note the effect of data augmentation, rotating, flipping and cropping the images.

用这么少的图像就能得到这么好的结果,真是令人惊讶。

培训

我使用 20%的分割进行验证,图像的像素大小为 256,并使用“ resnet50 ”作为预训练的模型。在 resnet 冻结的情况下,我做了 15 个时期(每个时期 2 分钟)来训练添加的顶层,并且得到了. 087 '的 [fbeta](https://en.wikipedia.org/wiki/F1_score) ,已经很不错了。然后解冻,并在 20 个时期内以分段学习率(最后一层的学习率更大)进行更多的训练,以得到 fbeta =.098`。我能够通过再次冻结预先训练的模型并做更多的纪元来获得更多的准确性。最好的是“fbeta=0.983”。没有过度拟合的迹象,我使用了默认的辍学参数。

导出模型并测试推理。

将模型导出到 PyTorch Torch 脚本进行部署只是几行代码

我确实花了一些时间测试导出的模型,并查看输出(包括原始激活和 softmax。然后我意识到我可以用它来推断自信:

  • 积极的原始激活(总是转化为高 softmax)通常意味着高置信度。
  • 当没有明确的标识时,会出现负的原始激活但非零的 softmax 概率,所以我可以将它们用作“试探性的替代方案”。

例如,让我们看看这张有问题的 5 美元折叠图片,它覆盖了 5 美元的大部分

A difficult image, folded, and covering most of the number 5 that correctly identifies the denomination.

*{‘probabilities’: 
 ‘classes’: [‘1’, ‘10’, ‘100’, ‘20’, ‘200’, ‘5’, ‘50’, ‘500’, ‘euro’, ‘usd’]
 ‘softmax’: [‘0.00’, ‘0.00’, ‘0.01’, ‘0.04’, ‘0.01’, ‘0.20’, ‘0.00’, ‘0.00’, ‘0.00’, ‘99.73’], 
 ‘output’: [‘-544.18’, ‘-616.93’, ‘-347.05’, ‘-246.08’, ‘-430.36’,* ***‘-83.76’****, ‘-550.20’, ‘-655.22’, ‘-535.67’,* ***‘537.59’****], 
*** *‘summary’: [‘usd’]****, 
 ‘others’: {****‘5’: ‘0.20%’****, ‘20’: ‘0.04%’, ‘100’: ‘0.01%’, ‘200’: ‘0.01%’}}*

只有类“ usd”的激活是肯定的(数组的最后一个),但是 softmax 也正确地启动了类“5”,并对类` 20 '产生了一些疑问。

部署

这是最难的部分。

基本上你需要两部分。前端和后端。

  • 前端是人们看到的,它做的是给你一个页面看(UI 我用 Bootstrap),代码选择一个图像,最后显示结果。我在前端添加了一些代码,使用 Javascript 在客户端对图像进行缩减采样。原因是现在的相机图片很重,所有的推理过程需要的是一个 256 像素的图像。这是客户端上的 11 行代码,用于向下采样。由于这些都是静态代码,我在同一个库上使用了 github 页面。为了将图像发送到服务器,我直接将它们作为 DataURI 传递,而不是将它们上传到某个地方,然后从那里提取。
  • 后端接收图像,在我们的模型上运行推理代码,并返回结果。是难中之难:),见下文:

我第一次使用谷歌云引擎(GCE),按照这里的指示。我的部署代码在这里是这里是,它包括上传和保存带有推断类的用户图像副本的代码,因此我可以检查错误的分类,使用它们进行进一步的训练。相当整洁。

总的来说,它很容易部署。它基本上创建了一个 docker,可以部署您需要的任何代码,并根据需要旋转实例。我的问题是服务器总是在运行,实际上至少有两个实例。GCE 意味着非常高的可伸缩性和响应,这很好,但这也意味着我一直在付费,即使没有人使用它。我认为应该是每月 5-10 美元。如果可能的话,我想部署一些不用花太多钱就能长时间在线的东西。

我决定转 AWS Lambda(课程说明这里)。流程看起来比较复杂,但其实没那么难,巨大的好处就是你只需付费使用。此外,就使用水平而言,我们将处于免费层(除了在 S3 上保留模型的成本,这是最低的)。我要部署的代码是这里的。因为您正在部署 Torchscript 模型,所以您只需要 PyTorch 依赖项,AWS 有一个很好的 docker 文件,包含您需要的所有内容。我必须添加一些 python 库来格式化输出和记录日志,它们都在那里。这意味着您实际的 python 代码很少,并且您不需要使用 fastai(在课程线程中,另一名学生分享了她的部署技巧,如果您需要将 fastai 也用于部署的话)。

UX,反应时间。

分类的推断大概需要 0.2 秒,确实很快,但是用户从选择图像到得到结果的整体时间可能长达 30s,甚至失败。额外的时间部分用于将图像从客户端上传到服务器,如果需要的话,在上传之前缩小图像。

在实际测试中,响应时间的中位数是 1s,这是可以接受的…除了第一次,第一次响应有时需要长达 30s。我认为这被称为“冷启动”,对应于 AWS 从存储中取出 Lambda 的时间。为了最小化这种影响,我添加了一些代码,在您加载客户端页面时触发对服务器的 ping。ping 只返回“pong ”,所以不会消耗太多的计费时间,但是它触发 AWS,让 lambda 函数为真正的推理调用做好准备。

支持

今年夏天,我在西班牙国家广播电台每周有一个小节目来谈论影响科学,我专门在一集里谈论人工智能及其对就业和社会的影响。我将这个工具作为一个例子。可以听一下(西班牙语,时间戳 2h31m): 朱莉娅恩拉翁达,翁达塞罗

后续步骤

我很想得到你的反馈和想法。或者如果你试图复制它有问题,让我知道。

以下是我为下一次冲刺已经想到的几点:

  • 使用类似“MobileNetV2”的移动友好型工具重新训练模型
  • 使用尽可能多的货币(和硬币)重新训练模型。随着您添加更多的货币,多类别分类检测面额的好处应该会变得明显。
  • 添加服务器代码来上传用户图像的副本,就像我在 GCE 部署中所做的那样。
  • 具有设备上推理的智能手机应用。

面向医疗保健的人工智能

原文:https://towardsdatascience.com/ai-for-healthcare-c975ffad1e8b?source=collection_archive---------18-----------------------

Antique Glass Medicine Bottles. Photo by Matt Briney

我在 Ai4 医疗保健会议上的经历

当你把内科医生、外科医生、首席执行官、首席技术官、首席运营官、战略总监、产品经理、软件工程师、数据分析师、教授和研究人员聚集在一起讨论人工智能在医疗保健领域的现状时,会发生什么?这就是 Ai4 医疗保健公司的理念。

Ai4 Healthcare 是在纽约举行的为期两天的会议,重点是将数据从业者、医疗临床医生和商业领袖聚集在一起,以促进围绕人工智能在医疗保健中的应用的讨论。此次活动的特色是有 85 位演讲者在,大量的交流机会和关于参加哪些讲座的技术/非技术“跟踪”指导。因为我正在为《走向数据科学》写作,而且我自己也是一名工程师,所以我主要关注技术方面的讨论。

我在会议上的观察非常清楚地表明,Ai4 医疗保健代表了所有这些专业人员之间非常需要的对话,以确保临床医生和技术专家的目标一致。我注意到的最常见的目标是:

  • 为医生提供更多与患者面对面的时间
  • 为患者提供尽可能最好的护理,无论他们在哪里
  • 将可解释性构建到临床接受的模型中
  • 减少浪费性支出

四大亮点

Building an AI Future that Benefits Patients and Doctors, Christopher Khoury, American Medical Association. Photo by Andrew DeCotiis-Mauro.

造福患者和医生的人工智能未来

想象一个医生可以花大量时间和病人在一起的世界。这对医疗保健领域会有什么影响?如果医生没有压力,医学会受到怎样的影响?如果医疗费用不那么高,病人会怎么样?美国医学协会(AMA)一直在思考实践的这些方面,以及如何将人工智能集成到医学实践中来帮助迈向这样的未来。

Figure 1: 2017 Health Spend per Capita. Source: Health System Tracker

Figure 2: EHR Adoption Rates in the United States. From the Office of the National Coordinator Health IT.

在美国,人均医疗保健支出约为每年1 万美元 ( 图 1 )。最重要的是,它的价值是许多富裕国家的两倍,据信其中大约 25-30%被浪费在各种系统低效上。幸运的是,提高效率是数据科学的主要优势之一。我们可能需要首先回答的一个问题是,我们从哪里获得数据?

自从 2009 年美国复苏与再投资法案 (ARRA)颁布以来,电子健康记录系统(EHRs)的采用大幅增加(图 2 )。ARRA 包括了有助于向 EHRs 转变的资金。到 2014 年 1 月,它还将医疗保险报销与电子病历的“有意义使用”挂钩。

虽然使用电子健康记录有一些问题,但是有很多好处。电子病历提供了前所未有的对患者信息的访问——这允许协调护理、提高诊断效率和更安全的护理。此外,电子病历还提供了大量信息,可用于提高护理标准,提高护理质量,甚至更早发现疾病爆发。

Figure 3: Main sources of physician burnout. Source: Medscape

AMA 关心的另一个问题是医生的健康。医生面临倦怠的比率几乎是普通大众的两倍。图 3 根据 Medscape 国家医师倦怠、抑郁&自杀报告( 2019 ),突出了倦怠的主要来源。我们面临的首要问题是:过多的官僚任务;工作时间太长;还有 EHRs。

AMA 将术语增强智能视为前进的方向。这种人工智能的概念化侧重于以辅助的角色使用人工智能,以强调其设计增强了人类的智能,而不是取代它。增强智能将以机器学习模型为特色,这些模型可以减少临床医生的工作量——通过帮助诊断或减少花费在管理工作上的时间。会议展示了两款旨在减少制图时间的产品——淑熙赛卡拉

AMA 在他们的网站上有一整块区域致力于人工智能在医疗保健系统中的作用。

无论哪里需要,都能提供更好的护理

AI and the Intersection of Robotics and Surgery, Prakash Gatta, MultiCare Health System. Photo by Andrew DeCotiis-Mauro.

pra kash Gatta 医生梦想有一天,无论患者身在何处,都可以获得高质量的标准化外科治疗。Gatta 是机器人辅助手术的支持者(免责声明——他与动词外科直觉外科合作)。在他对未来的展望中,机器人辅助手术系统提供了一个奇妙的平台,使医院手术设备标准化。

机器人辅助手术有许多好处,包括缩短住院时间、减少疼痛和不适、更快恢复、降低感染风险和减少失血。此外,机器人辅助手术可以通过上述改善的结果和更短的住院时间来降低成本(尽管快速搜索表明其成本是否低于传统的腹腔镜手术仍有争议)。Gatta 展示了一个机器人手术的视频,并描述了在腹腔镜/机器人手术之前,这是一个需要长时间恢复的主要手术。[这里有一段视频是 Gatta 展示另一个机器人手术,如果你好奇的话]

与人工智能的联系来自机器人产生的数据。正如 Gatta 指出的,每一个动作都是一个数据点。他设想未来机器人能够预测外科医生的下一步行动,要么提供反馈,要么为手术的下一步做准备。此外,他认为该系统可以根据手术进行的方式实时预测结果。例如,机器会知道手术中一个特别重要的步骤比外科医生的平均时间多或少,从而提供有价值的预测数据。

综上所述,手术设备的未来标准化和强大数据的整合可以用来推动护理标准的发展。也许,随着时间的推移,Gatta 获得护理的梦想将会实现。

注释的可解释人工智能

当算法显示医学图像有恶性肿瘤时,会发生什么?放射科医生应该盲目相信结果吗?为什么放射科医生一开始就应该相信一个预测模型呢?

这是一个在会议上反复出现的问题——我觉得在一个名为的演讲中,这个问题至少得到了部分解决,这个演讲的主题是 Evan Schwab 在飞利浦所做的工作

医学图像,如胸部 X 射线(CXR)、磁共振成像(MRI)或计算机断层扫描(CT),在计算机视觉领域提出了独特的挑战。虽然对象在图像中的定位是一致的,但是可用的训练图像的数量是有限的,并且当它们可用时,它们通常具有有限的注释。此外,正确的风险很高——可能和某人的生命一样高。

最终目标是创建一个端到端的管道,该管道在胸部 X 射线中准确地自动分类和定位关键发现,而无需对局部地面实况进行注释(“强”注释)。

来自麻省理工学院模拟胸部 X 射线数据库的图像使用自然语言处理(NLP)进行标记,以提供“弱”注释,即该 CXR 患有气胸。这些图像然后使用小块采样(以保持图像分辨率)进行处理,并被输入预先训练好的卷积神经网络 (CNN)。使用多实例学习框架,该模型能够组合来自每组补丁的信息。

得到的预测允许图像的逐块分类。这提供了可解释性,因为在可以呈现给放射科医师的 CXR 中指示了预测具有恶性肿瘤的区域,从而允许放射科医师确定模型的准确性。下面是这次谈话的部分结果。

Annotated Chest X Rays from Evan Schwab’s presentation Explainable AI for Training with Weakly Annotated Data. Each chest X Ray is overlaid with grids indicating the probability of pneumothorax, with white indicating low probability of disease and thick red boxes indicating high probability of disease. Ground Truth is shaded in red/orange. Image altered to show details more clearly. Photo by Andrew DeCotiis-Mauro.

会话

在整个会议过程中,我尽力与尽可能多的人进行简短的交谈。我想知道是什么让他们来参加会议,他们的角色以及他们已经走了多远。会议组织者通过提供对社交应用程序 Brella 的访问来帮助每个人,并将建立社交网络纳入日程。

Brella had a section for requesting meetings with other attendees. I thought I’d try to use it to learn more about what drew people to the conference.

布雷拉让像我这样内向的人很容易就能要求与我可能没有机会见面的人见面。同样,我设计了我的个人资料,看看我是否能吸引一些其他与会者告诉我他们的故事。

我在这个领域遇到了一些非常有趣的人。他们从全国各地赶来参加会议——加利福尼亚、亚利桑那、罗德岛、康涅狄格、费城,甚至还有一个来自我工作的地方——他们来的原因各不相同。

这是我遇到的人:

  • 几名外科医生:两名心脏外科医生对将人工智能引入他们的部门感兴趣,第三名是一名神经介入外科医生除了将大数据收集的信息应用于医院信息系统以发现医疗保健难题的新方向外,还希望将这些信息融入他们的思维模式。
  • 一位来自眼科成像公司的项目经理,他有兴趣了解更多关于人工智能在医疗保健中的应用。
  • 一位来自医疗保健非营利的健康数据分析师希望看到人工智能在实地的实施。
  • 一位来自纽约一家医院的数据科学家是该领域的新手,他的经理鼓励他参加并了解更多信息。
  • NLU 一家保健品公司的首席采购官作为赞助商出席了会议。
  • 一家制药公司的管道数据科学家。我们讨论了数据科学在制药流程中的作用。

Figure 4: The AI hype cycle for 2019. From Gartner.

  • 离我不远的一家生物医学技术公司的数字信息学主管。我们讨论了该技术如何仍然处于炒作周期中,并且还有其他技术,如计算机辅助检测(CAD)用于乳房 x 线照相术,也有类似的承诺,但未能实现(图 4)。
  • 对因果关系感兴趣的健康数据科学家。(我只看到一个演讲提到因果关系是数据科学的第三次浪潮。)他担心的是,虽然数据科学通常专注于相关性,但强调因果关系对于让医生接受这项技术极其重要。这将与医生的教育方式联系起来。

结论

我发现这次会议是一次奇妙的经历。我相信它为医疗保健和人工智能所有领域的专业人士之间的对话提供了一个绝佳的机会。我交谈过的一些与会者告诉我,这个会议是他们参加过的唯一一个如此高度集中的会议。

这种高度集中的性质——以及与会者和发言者的多样性——为就人工智能在医疗保健领域的现状及其潜在未来进行诚实的对话提供了一个强大的背景。

关于作者

我是一名人工智能爱好者和软件开发人员。作为一名训练有素的化学家,在成为一名教师之前,我的大部分化学生涯都是在计算生物物理化学领域度过的。通过教学,我学会了讲故事的重要性和艺术以及清晰的技术写作。在 LinkedIn 上与我联系,或者在 Twitter 上开始对话。

如果你在医疗保健和人工智能领域,想合作写一篇文章,请告诉我。

工业过程控制的人工智能

原文:https://towardsdatascience.com/ai-for-industrial-process-control-ee774267094b?source=collection_archive---------13-----------------------

使用强化学习来调整过程炉

Figure 1. Reflow Oven

确定工业过程的最佳控制设置可能很困难。例如,控件可以交互,调整一个设置需要重新调整其他设置。此外,控件与其效果之间的关系可能非常复杂。这种复杂性对于优化工艺来说是具有挑战性的。本文探索了一种用于控制工业传送带式炉的强化学习解决方案。

介绍

这类设备的一个例子是用于将电子元件焊接到电路板上的回流焊炉(图 1 和图 2)。烤箱有一个传送带,将产品传送通过多个加热区。该过程根据确保可靠焊接连接所需的精确温度-时间曲线加热产品。

Figure 2. Product Exiting Oven

本文讨论的回流焊炉有八个加热区,每个加热区都有一个控制装置,用于设置加热区加热器的温度。当产品通过烤箱时,传感器会记录大约 300 点的温度。每个点的温度由从加热器传递到产品的热量决定。

强化学习解决方案

操作员通常采取以下步骤来学习加热器设置:

  • 让产品通过烤箱一次
  • 根据传感器读数观察温度-时间曲线
  • 调整加热器设置(希望)改善轮廓
  • 等待烤箱稳定到新的设置
  • 重复此程序,直到传感器读数的曲线可接受地接近所需的曲线

强化学习系统用两阶段过程代替了操作员步骤。在第一阶段,智能代理学习烤箱的动态,并创建一个在各种烤箱条件下更新加热器设置的策略。

在第二阶段,代理按照学习到的策略寻找最佳加热器设置。这些设置将在实际产品曲线和所需的温度-时间曲线之间产生最接近的匹配。图 3 显示了代理按照策略寻找最佳设置。红色轨迹是所需的温度-时间曲线,蓝色轨迹是代理发现最佳加热器设置时的实际曲线。

Figure 3. red: desired profile — blue: actual profile

代理人

由于通过烘箱需要相当长的时间(> 300 秒)并稳定烘箱(许多分钟),因此使用烘箱模拟器来大大加快该过程。模拟器模拟烤箱对产品的加热作用。

在第一阶段的每个步骤中,强化学习代理将八个加热器的设置传递给模拟器。模拟运行后,模拟器返回产品温度读数(大约 300 个读数,间隔 1 秒)。

代理使用选择的读数来确定系统的状态。它还通过比较返回的读数和期望的温度-时间曲线之间的差异来计算当前运行的回报。如果当前运行的差异小于先前运行的差异,则奖励为正;否则为负。奖励用于更新策略。

Figure 4. Reinforcement Learning System

在重复该过程数千次之后,代理将已经学习了在各种烤箱条件下更新加热器设置的广泛策略。在第二阶段,代理遵循学习到的策略来寻找最佳加热器设置,该设置将在实际产品曲线和期望的温度-时间曲线之间产生最接近的匹配。

更深的潜水

项目中使用的强化学习系统使用双 Deep-Q 模型,该模型包含两个神经网络和经验重放。在第一阶段过程之后,其中一个神经网络保存代理在第二阶段使用的学习策略。要了解更多细节,请查看本文末尾引用的论文。

[1]: van Hasselt,h .,Guez,a .,Silver,D. 采用双 Q 学习的深度强化学习。 arXiv 预印本 arXiv:1509.06461 ,2015。

[2]: Mnih 等,通过深度强化学习实现人级控制。自然,518(7540):529–533,2015。[ Deepmind

人工智能在医学成像中的应用——现在?

原文:https://towardsdatascience.com/ai-for-medical-imaging-now-8fad32c4c96b?source=collection_archive---------9-----------------------

“医生”现在可以见你了…

解读医学成像(x 射线、CT、MRI)扫描是一项高技能的手工工作,需要多年的培训。对影像的需求超过了合格放射科医生的供应随着新兴市场人口老龄化和医疗保健技术解决方案的普及,这一趋势可能会持续下去。人工智能和计算机视觉准备好提供帮助了吗?

计算机第一次可以在没有医生解释的情况下诊断病人。

人工智能和计算机视觉长期以来一直被视为更快、更准确诊断的基础。医疗器械认证和验证的严格监管要求意味着新技术进入一线临床实践可能会很慢。然而,基于深度学习的决策支持工具正在获得认可,其中一些已经在诊所和医院中使用。在这篇文章中,我们将检查六种已经被批准用于临床的产品,看看它们的上市路线和任何公开的潜在算法的细节。

所有医疗软件——包括人工智能决策支持工具——都必须符合相关标准。认证可能是一项昂贵的工作,需要临床试验来证明安全性和有效性。

在决策支持软件的监管分类方面,美国医疗器械法规(FDA)比英国(MHRA)更具体(也更清晰),分为两组:

  • 计算机辅助检测(CADe):支持诊断的工具,但积极地让医生参与到这个过程中来——例如通过突出扫描图像中的关键区域。
  • 计算机辅助诊断(CADx):旨在提供可操作诊断的技术,例如通过将病变定性为良性或恶性肿瘤。

大多数 CAD 产品不得不经过漫长的上市前授权 (PMA)再到产品所需的认证最近的 FDA 指南稍微放宽了规则,某些类别的医学成像分析软件将被允许使用更简化的 510[k]途径。

重新分类请求之后,被分类为 I 类或 II 类至的设备可用作未来上市前通知 [ 510(k) ]提交的谓词。

让我们来看看一些已经被批准用于临床的人工智能和机器视觉技术:

QuantX(定量分析)

这种计算机辅助诊断(CADx)软件帮助放射科医生使用磁共振成像(MRI)评估和描述乳房异常。除了使用图像分割突出感兴趣的区域之外,还计算与恶性肿瘤可能性相关的专有度量( QI 得分’)

  • 具有特殊控制的二类医疗器械
  • FDA 法规:21 CFR 892.2060
  • 途径:重新开始(EN1700222017)

Quantx highlights area of interest in a magnetic resonance imaging scan

经审查,该软件被归类为二类医疗设备,并有额外的“特殊控制”——其中一项是监控使用情况,并证明使用该软件比独立诊断提供了更高的检测率。

Screenshot from QuantX showing similar cases with known outcomes

一旦识别出病变,该软件就会执行自动图像分割——尽管这似乎是使用传统的图像处理方法,而不是基于深度学习的工具,如 Mask R-CNN。

从病变区域提取图像特征,例如球形度、均匀性、体积、对比度,并且基于机器学习的分类器确定 QI 分数和可能的预后。也可以查询包括来自已知结果的患者的扫描的库,并且回顾最相似的病例。

深度人工智能(iCAD 公司)

这款 CADe/x 软件可分析乳房 x 光片中疑似癌症的病灶。乳房断层合成扫描产生一组 2D 图像,每个图像都是身体的一个狭窄横截面。感兴趣的区域从单独的平面中提取出来,并混合在一起,因此它们作为单个图像可见。临床研究表明,使用该软件后,检测率提高了 8%。

ProFound AI presents detections and Certainty of Findings scores for soft tissue density and calcifications in mammography

在分析过程中,该算法使用深度卷积神经网络对每幅图像中的大量小块(256 x 256 像素)进行分类。使用了四个类别:正质量和负质量,正建筑变形和负建筑变形。

延伸阅读: 从数字乳房断层合成中检测软组织密度:传统和深度学习方法的比较

IDx-DR

这个 CADx 软件程序分析眼睛的图像,寻找糖尿病视网膜病变的迹象。至关重要的是,IDx-DR 是第一款无需临床医生解释图像或结果即可提供筛查决定的授权设备。这使得通常可能不涉及眼睛护理的卫生保健提供者可以使用它。

  • 具有特殊控制的二类医疗器械
  • FDA 法规:21 CFR 886.1100
  • 途径:从头开始(EN180001

IDx-DR is the first device for screening diabetic retinopathy that does not requrie a clinician to be present

糖尿病视网膜病变是超过 3000 万美国糖尿病患者中视力丧失的最常见原因,也是工作年龄成人视力损害和失明的主要原因。

IDx-DR 被授予突破性设备称号,这意味着 FDA 在高效设备开发方面为该公司提供了密集的互动和指导,以加快证据生成和该机构对设备的审查。

骨骼检测(Imagen 技术公司)

OsteoDetect 是一种软件,它使用机器学习技术分析手腕 x 光照片(X 射线),以识别和突出显示桡骨远端骨折。

  • 具有特殊控制的二类医疗器械
  • FDA 法规:21 CFR 892.2090
  • 途径:重新开始(EN1800052018)

Osteodetect highlights distal radius fractures in x-ray images

深度卷积神经网络用于检测算法。 U-net 架构用于分割图像,并生成疑似骨折位置的热图。这被叠加在原始图像上以显示给用户。

延伸阅读: 深度神经网络提高临床医生骨折检出

联系人(即 ai)

ContacCT 是一种人工智能算法,用于分析计算机断层扫描(CT)图像,以获得指示潜在中风的生物标志物。该软件使用深度学习来识别扫描中的大血管闭塞(LVOs)。在治疗中风时,时间尤其重要,因此一款手机应用程序可以直接向临床医生提供通知。

  • 具有特殊控制的二类医疗器械
  • FDA 法规:21 CFR 892.2080(2018 年 2 月)
  • 途径:从头开始(EN170073
  • CE 认证(适用于欧盟)

Viz.ai have developed a mobile app to get results to clinicians more quickly

虽然底层实现的细节很难获得,但该系统似乎使用卷积神经网络进行图像分割

Triton(高斯外科)

我们的最后一个例子是一个基于 iPad 的机器视觉系统,它使用摄像头来估计手术过程中从手术海绵和敷料中收集的失血量。虽然本质上不是医学成像,但这是机器视觉应用于临床环境的一个有趣例子。

  • 第二类医疗器械
  • FDA 法规: 21CFR880.2750 (2018)
  • 途径:510(k)实质等同

Triton estimates the blood loss absorbed into dressings and sponges using machine vision

传统上,外科手术中的失血量通过以下方式估算:

  • 海绵和敷料的人类视觉评估,或
  • 在天平上称重并减去干质量。

这两种方法都不完美,而且很难考虑到其他可能扭曲结果的液体的影响,如盐水。

Triton 系统通过使用比色图像分析算法和基于云的机器学习来量化手术海绵和敷料从患者体内取出时的血红蛋白(Hb)质量,提供比称重更准确的结果

计算机辅助诊断将对医学成像产生越来越大的影响。也许在某些时候,用肉眼解释扫描结果的想法会显得古怪,甚至不安全。

人工智能医疗设备的认证途径越来越为人所知。过多的预测设备和来自监管机构的新指导可能意味着下一代决策支持系统有更容易的上市途径。

你有什么想法?您使用过这里描述的设备吗?在下面给你留言吧!

Rupert Thomas 是一名技术顾问,专门研究机器学习、机器视觉和数据驱动产品。@ Rupert Thomas

进一步阅读

医疗设备中的人工智能——三个新兴行业应用

FDA 对医学图像解读中机器学习的观点更新 (PDF)

人工智能驱动& FDA 批准的医疗健康项目

由微软授权的 AI for One,AI for All。

原文:https://towardsdatascience.com/ai-for-one-ai-for-all-empowered-by-microsoft-c73c75c51fba?source=collection_archive---------34-----------------------

我在交通信号灯处回复一封来自客户的电子邮件,我妻子理所当然地不喜欢它。她分享了一些最近的统计数据,这些数据显示有人在开车时试图使用手机而丧生或受伤。我想要一个量化的数字,当我在网上搜索时,新西兰的交通官员说,司机因手机分心造成的道路死亡和伤害的社会成本明年可能达到 1800 万美元(T1),比 1998 年增加了五倍多。如果你正在读这篇文章,下次你想在开车的时候伸手拿手机,请不要。家里有人在等你。

因此,我今天的自定义视觉示例!

我们将创建一个分类模型来帮助区分两类图像。一类是开车时打电话的人,另一类是开车时不打电话的人。

我想带你了解一下:由微软提供并托管在 Azure 上的定制视觉服务,它是认知服务套件的一部分。

认知服务提供了几个特定的人工智能或机器学习任务,通过 API 作为服务提供,我们可以使用 REST API 将其集成到 web、移动和桌面应用程序中。

Custom Vision portal

“登录”并同意条款和条件。

Create a new project

Details of the project

创建新的资源组。

在项目中使用新创建的资源组。

我们将创建一个分类项目,并将使用多类分类类型。

如果您使用某个特定的域,域选择会有所帮助。

点击“创建项目”

我试着下载了很多图片(大约 50 张),并用一个 chrome 插件来帮我完成这项艰巨的工作

这是我用的: Fatkun 批量下载

网上还有很多。

将图像下载到您电脑上的文件夹中。

选择所有并上传所有的图片,如下所示。

一旦你点击打开,所有的图片将如下。

我正在添加人们开车时使用手机的图像。

Adding a tag to ‘classify’ this class of images

我正在下载的下一个类是人们不用手机开车的图像。

Google image search to the rescue as usual!

遵循相同的过程,但使用不同的标签,如下所示。

我正在使用上面的标签,请随意使用任何标签。当你标记图像时,你正在做的是说“这些图像属于这个类”

下一步是通过顶部的绿色按钮训练模型,一旦完成,将向我们显示一些预期模型性能的统计数据。

单击顶部的“Train ”,并为本演练选择“Fast Training”。

培训的结果。

See the two tags with the various model statistics

选择图片时要记住的一件重要的事情是确保图片有不同的背景,从不同的角度拍摄等等。

点击“快速测试”。

我下载了一个随机图像(不包含在您的训练集中)

正如你所看到的,它检测到司机开车时没有使用手机!

因此,在 30 分钟的时间里,您已经训练了您的分类器模型并测试了该模型!

现在让我们用一张使用手机的人的照片来试一试这个模型。

image of a person using a mobile phone

所以,现在我们可以看到我们的模型正在工作!

下一步是为它创建一个应用程序。

点击下面突出显示的“发布”。

为您的端点命名:

该名称在截图中突出显示,如下所示

productiondeployment

获取网址和预测键

一旦您的模型已经发布,您可以通过选择预测 URL 来检索所需的信息。这将打开一个对话框,显示使用预测 API 的信息,包括预测 URL预测键

getting the prediction key and the URL

创建应用程序

  1. 在 Visual Studio 中,创建新的 C#控制台应用程序。
  2. 使用以下代码作为 Program.cs 文件的主体。

更改以下信息:

  • namespace字段设置为项目的名称。
  • 用之前检索的键值替换占位符<Your prediction key>
  • 将占位符<Your prediction URL>替换为您之前检索到的 URL。

运行应用程序

运行该应用程序时,系统会提示您在控制台中输入图像文件的路径。然后将图像提交给预测 API,预测结果作为 JSON 格式的字符串返回。我要给它下图。

mobile phone usage while driving

我的 JSON 响应应该显示图像包含使用电话的司机的可能性更高。

如果你看到下面的回应;您可以清楚地看到 JSON 输出如何显示图像属于标签类:" usingphonewhiledriving "

Enter image file path: C:\Users\Nimish Rao\Desktop\mobilphone.jfif
{"id":"a210442b-01bb-4b1c-930a-c00db2b666ea","project":"5c6c2d62-3f00-45a8-be5f-ebb88d4e04be","iteration":"fc04e53b-e3bd-4306-b0d9-0273ddbc26c9","created":"2019-07-19T12:09:10.845Z","predictions":**[{"probability":0.9983218,"tagId":"1cc5723f-9033-4e16-a713-02a8cf3117b5","tagName":"usingphonewhiledriving"},**{"probability":0.00167823618,"tagId":"3aab49f8-9852-4d90-8a5d-28f66c753d2b","tagName":"notusingphonewhiledriving"}]}Hit ENTER to exit...

这样,您就有了:您自己的控制台应用程序,它可以拍摄图像,并使用您训练的模型为您提供分类输出!

只有铁杆人工智能专家才能使用的功能现在可以由更广泛的开发人员通过云订阅来访问。 那就是 AI for everyone,由 微软 授权。

给你读点东西:

注意:这里表达的观点是我个人的,不代表我的雇主的观点。

请注意:我对定制视觉模型或帖子中使用的任何图像没有任何权利,我使用的是在线图像。

海上交通管理的人工智能:特征工程(1/2)

原文:https://towardsdatascience.com/ai-for-sea-traffic-management-feature-engineering-part-1-2-e54f8d4eaa9e?source=collection_archive---------25-----------------------

Traffic in Phnom Penh, Cambodia

创建相关的模型特征并处理数据缺口

也读作:

海上交通管理人工智能:建模(下)
海上交通管理人工智能:多步预报窗口 LSTM(后记)

最近决定参加 Grab 的 AI for SEA 挑战赛。Grab 提出了 3 个不同的挑战:交通管理(我选择的)、计算机视觉和安全。

这个过程很有趣,也需要做很多工作,所以我决定写这些帖子来详细说明我是如何解决这些问题的。希望这将有助于评估员和参与挑战的人。在本文中,我将介绍这一挑战,并分享我是如何转变 Grab 提供的原始训练集的(特征工程、填补数据缺口等)。

我所有的代码都可以在GitHub上找到。

交通管理挑战

网站上的问题陈述:

"东南亚经济体正转向人工智能来解决交通拥堵问题,交通拥堵阻碍了流动性和经济增长。缓解交通拥堵的第一步是了解城市内的出行需求和出行模式。

能否根据历史抢订量精准预测出行需求,预测出行需求高的区域和时间?

在这个挑战中,参与者要建立一个根据历史需求数据集训练的模型,该模型可以根据拒不接受的测试数据集预测需求。该模型应能够在给定截至时间 T 的所有数据的情况下,通过 T+1 至 T+5 时间间隔(其中每个时间间隔为 15 分钟)准确预测未来。

  1. 了解数据集

Grab 提供的原始数据集如下所示:

First few rows of original dataset

Description of the meaning of each column. More info can be found here.

每条需求记录对应 15 分钟间隔。该数据集总共包含 61 天。

需要理解的棘手部分是,每个 geohash6 都有一组唯一的日期和时间戳。这个信息是至关重要的,因为我们正在处理一个时间序列问题。这将使数据集的排序更加容易。

总共有大约 1300 个唯一的 geohash6 代码。如果您进行快速汇总,您可以看到代码的数字应该接近 61 天* 24 小时* 4 个季度= 5856。

我所做的第一步是使用 pandas 创建一个列‘timestamp _ hour ’,它基本上创建了一个新的时间戳,将日期和时间转换为小时格式。这将有助于我们更好地分析数据。以下代码将帮助您理解:

然后,我汇总数据,以证实我前面提到的说法:

Count of number of timestamps per geohash6 code

我们非常接近拥有这些 geohash6 代码的完整记录,因为我们只缺少 10 个时间戳来获得前四个 geohash6 代码的完整时间序列。遗憾的是,并非所有 geohash6 代码都是如此。有些不完整(即 3000 个时间戳),有些只有一条记录:

agg_geohash.tail()

The tail of geohash6. Some codes only have one instance. Because we’re dealing with time series, these geohash6 will have to be dropped.

2。获得时间序列模式的直觉

我想直观地了解一个特定地理哈希的需求行为随时间的变化。事实证明,我选取的样本遵循一个非常典型的时间序列行为。我尝试了不同的 geohashes(完整的 geo hashes ),它们都显示出某种程度的静态行为:

Scatter plot of demand over time for selected geohash6 code ‘qp03wz’ over 15 days

我们可以清楚地看到这个 geohash6 的固定模式。高峰大约在一天的同一时间。周末是相当低的。我们应该能够使用以前的需求值相应地用时间序列特征建模。现在让我们继续进行特征工程,这样我们就可以得到一个训练集,我们可以在这个训练集上建立一个模型。

3。如何在处理不完整的 geohash6 代码时创建时间滞后?

如上所述,数据集是不完整的。对于某些特定的时间戳,所提供的数据集没有记录的值。幸运的是,Grab 团队注意到了这一点,并在 FAQ 中告诉我们,只需假设对缺失时间戳没有需求(值为 0)。这个假设会特别有用。

鉴于这个问题,我需要在 T+1 创建需求,直到需求 T+5。至于我的模型特征,我已经决定使用需求 T-1 下降到需求 T-5 。我还决定包含纬度、经度和相应的时间戳(以十进制每小时的格式)。因为我已经决定使用 LSTM(见下一篇),我不得不使用最小-最大缩放来标准化这些特征,以避免爆炸梯度的问题。

预处理代码可以在这里找到。我在预处理代码中调用的函数可以在这个链接中找到。

由于代码有点密集,我不会详细说明我是如何创建这些延迟的。然而,我想花一些时间解释我是如何处理丢失的时间戳的,以便填补不完整的需求。基本上,一旦我们通过 geohash 和时间戳对数据集进行排序,当前时间戳与其前一个时间戳之间的时间差应该是# of lags * 15 分钟。类似地,当前时间戳与其后续时间戳之间的时间差应该是步骤数* 15 分钟。该代码包括替换不满足这些条件的先前/下一个时间戳的需求。

请参见下面的代码:

为了使用函数 pd,我基本上逐个处理每个 geohash6 代码。Series.shift()来获取我的时滞/步长。然而,由于数据集不完整,我不能保证移位总是有效的。我需要通过查看上一个/下一个时间戳来进行检查。我的做法如下(伪代码)

time_delta = timestamp_lag - timestamp_hourif time_delta != 0.25 * lag:
 return 0
else:
 return demand

如果代码对你来说看起来有点复杂,让我们看看下面的例子,它将以一种非常简单的方式帮助你理解。

The d_t_minus_1 and d_t_plus_1 correspond to the observed demand at T-1 and T+1 respectively. ts values correspond to shifted timestamps. The time difference (tdelta) is correct here for lag 1 and step 1 (1 * 0.25 = 1). Thus we do not replace the value by 0

Here, the tdeltas are incorrect for lag 2 and step 2. They should be equal to 2 * 0.25 = 0.5, thus we replace the values with 0.0

一旦特性工程完成了,我们就获得了下面的需求特性,我用字母“d”将其缩短。

*note that d_t and demand are the same values. I just created another column for consistency.

我将用于建模的其他特性是标准化的十进制每小时时间戳,从 0.0(午夜)到 23.75(晚上 11:45):

ts_d is short for timestamp_decimal. The scaling was obtained through Min-Max scaling

我还将使用标准化的纬度和经度:

Latitude/Longitude values with the Min-Max scaled values

希望你喜欢!如果你有兴趣看看我是如何模拟这个问题的,请看看挑战的第二部分:

海上交通管理人工智能:建模(下/2)

基利安

海上交通管理的人工智能:建模(下)

原文:https://towardsdatascience.com/ai-for-sea-traffic-management-modeling-part-2-2-45cf301bd37?source=collection_archive---------28-----------------------

Peaceful traffic near Angkor temples, Cambodia

具有地理定位特征的时间序列问题的 LSTM 体系结构

也读作:

海上交通管理人工智能:特色工程(1/2)

更新:这篇文章的方法现在已经过时。您可以通过下面的链接查看性能更好的方法:

海上交通管理的人工智能:多步预报的窗口 LSTM(续)

在之前的文章 中,我已经详细介绍了我是如何设计这些特性和处理数据缺口的。在这最后一部分,我将描述我的 LSTM 模型架构和我在建模过程中必须考虑的因素。我所有的代码都可以在 GitHub 上找到。

通过此链接获得数据集 的简要回顾。

  1. 为什么深度学习而不是传统的时间序列建模?

如前一篇文章所示,每个 geohash6 代码都有一组对应的时间戳。在隔离每个 geohash6 的需求时间序列时,我们可以(直观地)观察平稳性,这可能适用于传统的时间序列建模(见下面的例子)。

Scatter plot of demand over time for selected geohash6 code ‘qp03wz’ over 15 days

虽然传统的时间序列建模,如 ARIMA 看起来很有前途,但它是不可扩展的。由于只有在单独处理每个 geohash6 代码时才会显示平稳性,这意味着我们需要训练和维护 1300 多个时间序列模型。此外,ARIMA 模式需要不断的再培训,以确保良好的表现,这使得它很难维持。

出于上述原因,我决定训练一个长短期记忆(LSTM)模型,这已经被证明是非常有效的处理时间序列。LSTM 的优点是,我可以将所有 geohash6 代码包含到我的训练集中,而不必区分它们。给定大量的估计参数,我只是希望模型能够有效地区分每个 geohash6 代码的模式。

2.需求数据集挑战:不平衡分布

这个数据集的一个大挑战是它总体上极度不平衡。无论何时,需求都严重向左倾斜(见下面的分布),这意味着需求在大多数时间都很低。然而,交通管理是为道路上的高需求做好准备,因此我们的模型学习如何很好地预测高峰时间是很重要的。

Overall descriptive statistics and hourly distributions of Demand. I’m only showing 9 hours because the shape of these distributions is the same across all hours

处理这样的问题有两种方法。第一种解决方案是重新采样,以改变训练集的分布。这种解决方案似乎不可行,因为我们可能会丢失许多对模型潜在有用的数据点。此外,由于我们正在处理一个时间序列问题,样本不是独立的。采样变得棘手,因为我们不能随机进行,因为我们可能会错过宝贵的时间信息。我选择的第二个解决方案是,给予这些未被充分代表的价值更大的权重。

3.解决不平衡数据集:指数加权

为了给我的训练示例分配权重,我在使用 pd 的训练集上使用了以下函数。Series.apply():

4.喀拉斯 LSTM 建筑

LSTM Model architecture built with Keras. The model has two input layers, one consisting of a Demand Vector from T down to T-5; and the other consisting of a time and space vector with scaled latitude, longitude as well as scaled timestamps at time T down to T-5.

该 LSTM 架构旨在预测需求 T+1 的需求

第一个输入层接收一个大小为 6 的向量,由需求 T 直到需求 T-5 组成。为了挑选一个合适的延迟,我随机抽取了一个完整的 geohash6 代码,并对其运行 Auto-Arima。Auto-Arima 确定最佳滞后时间为 T-5,这似乎是合理的。然后,模型将这个输入层传递到几个 LSTM 层。

第二个输入层接收一个大小为 8 的向量,它由以下归一化值(最小-最大缩放)组成:纬度、经度、时间 T 时的时间戳、…、时间 T-5 时的时间戳。正如上一篇文章中提到的,我们必须应用最小-最大缩放来避免渐变爆炸的问题。

我的直觉是,地点以及一天中的时间会对需求产生强烈影响。基本上,我试图将纯需求输入与时间和空间输入结合起来,以便模型了解 T+1 时需求之间的关系。

损失函数均方误差,这是一个回归问题的预期。优化器是学习率为 0.001 的 Adam 。如果模型丢失在两个连续的时期达到稳定状态,我选择将学习率乘以系数 0.2。我还在最终的密集层上添加了一个内核约束,因为它需要介于 0 和 1 之间。

训练明智,我已经为30历元训练了模型,并挑选了 128 的批量

参见下面的 keras 代码:

看看我是如何在 GitHub repo 上的函数prepare _ model _ inputs中从预处理的数据帧中准备模型输入的。

5.评估方法和结果

所需的评估指标是均方根误差(RMSE)

RMSE Formula

我在前 47 天训练了这个模型,并在剩下的 14 天评估了它的表现。粗略估计,训练集约有 320 万个样本,测试集有近 100 万个样本。

**T+1 表现:最后 14 天 RMSE 达到 0.04。

**T+1,…,T+5 绩效:最后 14 天 RMSE 达到 0.07。

为了评估 T+1 和 T+1,..,T+5 性能,我构建了名为evaluate _ T _ plus _ 1 _ performanceevaluate _ T _ plus _ 5 _ performance 的函数。 后者可能会相当慢,因为我在迭代一个转换后的测试集,并不断改变输入来预测下一个 t。它需要进一步优化。

6.进一步探索

由于时间限制和计算资源的缺乏,我没有时间调整超参数尝试可能产生更好结果的不同模型架构

函数evaluate _ t _ plus _ 5 _ performance在模型上评估性能时也很慢。如果将这样的模型部署到生产中,预测接下来 5 个步骤的窗口函数将必须更快。

此外,使用非匿名的 geohash6 代码,该模型可能会将天气等其他特征集成到建模中。这样的因素必然会对交通产生影响。

7.总结

简而言之,我建立了一个定制的 LSTM 模型,旨在预测下一次需求的价值。该模型的特殊性在于,我在 LSTM 图层之后添加了一个空间和时间输入图层,以便捕捉需求、位置和时间之间的相互作用。

在我的测试集上——过去 14 天的数据,我在 T+1 时达到了 0.04 的 RMSE,在 T+1,…,T+5 时达到了 0.07。

在这个项目中,我想探索的是具有非匿名化数据的不同模型架构,这将使得能够结合与需求的实际位置相关的外部特征。

希望你喜欢!

基利安

海上交通管理的人工智能:多步预报的窗口 LSTM(续)

原文:https://towardsdatascience.com/ai-for-sea-traffic-management-window-lstm-for-multi-step-forecasting-epilogue-33551e1e07c9?source=collection_archive---------20-----------------------

Angkor Wat, one of the wonders of South-East Asia

更新的 LSTM 架构,其中每个时间步长都在模型中预测

也读作:

海上交通管理人工智能:特征工程(1/2)
海上交通管理人工智能:建模(2/2)

在我之前的帖子中,我已经描述了我如何继续应对由 Grab 组织的 人工智能海上交通管理挑战赛 。该任务包括预测 Grab 全天 15 分钟的预订需求。总之,参与者必须想出一种方法来预测时间 t 下 5 个时间步骤的需求。现在,紧迫的最后期限已经过去,我实际上有一些时间来反思和改进我以前的方法。此外,我没有使用黑客马拉松期间授予的 100 美元 AWS 积分,因为我是在 Google Colab 上训练我的第一个方法的。学分是一个尝试计算成本更高的方法的好机会。

我所有的代码都可以在我的GitHub上找到。原始数据集可以在 这里找到

  1. 以前方法的缺点

以前的方法的主要缺点实质上源于这样一个事实,即它只专注于预测 T+1 时的需求。

这种特性的第一个结果是,预测 T+1、T+2…直到 T+5 的需求将花费大量时间。我必须构建一个窗口函数,一次预测一个步骤。由于输入需求特征包括 T-5 时的需求,直到 T 时的需求,我必须将预测附加到需求输入向量,并移除输入需求向量的最早需求。我还必须找到一种方法来移动我的时间空间**输入向量的值,这并不容易:因为我对时间戳应用了最小-最大缩放,所以更新这个输入不像移动到下一个每小时季度那么容易。因此,在大型测试集上,生成 5 步预测的计算效率非常低。

第二,由于该模型仅设计用于预测一个步骤,因此每个预测的误差会传播到下一个步骤。换句话说,当预测接下来的 5 个时间步时,在需求 T+1 产生的误差将影响需求 T+2,将影响需求 T+3,以此类推。

2.窗口 LSTM:一个通过设计集成多步预测的架构!

总的想法是建立一个模型,使误差在更长时间内的传播最小化。该模型应该能够解释过去预测时间步长的误差,并且仍然能够相应地预测需求。

在玩了一点 Keras 的功能后,我意识到连续预测几个输出 实际上是可能的。下面的模式说明了新的方法:

Window LSTM architecture predicting each time step. The \d^{hat} correspond to the predicted demand values.

一般方法如下:将需求输入向量传递到 LSTM 块,将 LSTM 块与时空输入组合,将其传递到密集块以生成下一个时间步长。然后,将预测需求附加到原始需求输入向量,并重复该过程。

现在,让我们逐一详细介绍该体系结构的每个构建块。

  • 时间空间输入

Min-Max scaled lat, lon with timestamps to a 64-dimension densely connected layer

为了对需求的时空依赖性进行建模,我简单地将一个带有时间戳的最小-最大缩放纬度、经度的向量传递给一个 64 维的密集连接层。然后我把这个图层和 LSTM 图层连接起来。值得一提的是,我没有更新时间戳,因为模型预测了后续时间步长的需求。由于时间空间输入向量是最小-最大比例的,因此相应地更新时间戳是相当棘手的。

  • LSTM 街区

让我们用下面的 Keras 代码来说明 LSTM 块的架构:

它将需求输入传递到几个 LSTM 层,随后是退出以减少过度拟合。经过几个 LSTM 图层后,输出被展平,以便将其与前面提到的时空输入连接起来。

  • 密集块

一旦看到代码,这个密集的代码块就不言自明了:

然后,预测需求跟在需求块后面。

  • 整体窗口 LSTM 建筑

3.模特培训

与前面的方法类似,我在前 47 天训练模型,在剩下的 14 天评估它的性能。粗略估计,训练集约有 320 万个样本,测试集有近 100 万个样本。

这种新架构的计算成本显然要高得多。该模型在具有 36gb RAM 的 AWS EC2 GPU 上进行训练。

我训练了 30 个纪元的模型。我用了一个批量 的 200 个训练例子。使用的优化器是 Adam ,初始学习率 0.001。我还添加了一个 Keras 回调函数,用于在训练损失达到稳定水平时调整学习率——它基本上将学习率乘以 0.2。

这种新架构的优势在于,Keras 使您能够在训练期间监控每个预测的损失:

Multi-Output loss monitoring during Keras training

此功能对于查看模型是否难以学习某些特定输出非常有用。

4.结果

虽然训练需要更长的时间,但新架构现在为每个时间步生成结果的速度比以前的方法快得多。

就性能而言,它比之前的方法(整体 RMSE 为 0.07)略好。对于过去 14 天的数据,每个时间步长的 RMSEs(均方根误差)如下:

  • 需求 T+1 : 0.04
  • 需求 T+2 : 0.05
  • 需求 T+3 : 0.04
  • 需求 T+4 : 0.05
  • 需求 T+5 : 0.05
  • 总体 RMSE : 0.05

结论

这种新方法的主要优势在于,它通过设计预测接下来的 5 个时间步长在真实的生产环境中,拥有一个能够快速预测下一步时间的模型是非常重要的。

此外,Keras 能够在训练期间的不同时间步骤监控每个预测的性能。此功能对于查看特定时间步长的性能是否不是最佳非常有用。

最后,随着时间远离时间 t,main 方法能够限制误差的传播,如结果所示,误差在所有时间步长内保持非常小。

希望你喜欢!

基利安

人工智能生成足球视频游戏解说

原文:https://towardsdatascience.com/ai-generating-football-video-game-commentary-271f56f45bf?source=collection_archive---------13-----------------------

我使用 GPT 2 语言模型为谷歌足球环境实时生成动态评论的方法。

Sample kickoff commentary generated in real-time by the model trained on commentary lines from the FIFA video game series.

如果你已经玩了 FIFA 系列视频游戏很多年了,你可能已经在游戏的解说中听过很多次了

“大家好,马丁·泰勒和阿兰·史密斯在这里,我们今天的比赛来自英超联赛。”

"他已经看出了那里的对手进行拦截的意图。"

“嗯,我们可以得到一些关于伤势的消息。我认为杰夫·史瑞夫斯正在调查此案。”

这些相同的短语和台词在游戏中出现如此频繁的原因是因为它们是在视频游戏的开发过程中预先录制的,并在比赛的特定事件中根据记忆回放。在游戏系列中,大多数新台词都是每隔几年才录制和发布一次,这使得评论相当重复和乏味,尤其是如果你像我一样经常玩这个游戏的话(不幸的是,比我应该玩的多得多)。

我接下这个项目的目的是探索一个人工智能是否可以在游戏中每次发生相同事件时帮助生成动态的即兴台词。希望这能让游戏更真实,更接近真实足球比赛的解说。

游戏环境

Google Research Football Environment [source]

对于这个项目,我正在使用谷歌人工智能团队最近发布的一个足球模拟环境。虽然它是为了训练强化学习代理而引入的,但我们也可以将它用于其他目的,比如生成评论。启动并运行环境就像编写下面的代码一样简单。

Running random actions on an 11-vs-11 instance of the environment. [source]

这个环境的美妙之处在于它允许我们一步一步地玩游戏,在每一步它都使用 OpenAI 的 gym API 给我们关于游戏状态的完整信息。

State Observations available through the API. See full list here.

像进球、黄牌、当前游戏模式(任意球、射门)等信息。)以及 python 代码中的更多内容。这使得推断比赛事件并将其提供给语言模型以在游戏中讲述这些特定事件变得非常容易。

文本生成器

[image source]

这让我想到了这个项目的评论生成部分。我使用的是 OpenAI 的 GPT-2 语言模型,这是我在之前的文章中提到过的,以防你有兴趣了解更多。基本上,给定一个关于某个主题的小文本提示,这个神经网络可以生成关于该主题的长而随机的句子,这使得它非常适合我们在这个项目中的用例。通过将游戏信息作为提示输入这个模型,我们可以让它生成其余的评论。

收集培训数据

我从 YouTube 上下载了关于 FIFAPES 比赛的视频的英文注释,这给了我一个标准足球评论的语料库。不幸的是,这些注释错误百出,而且没有任何标点符号。我能想到的唯一纠正方法是手动编辑语料库,这占用了我在这个项目中的大部分时间!

YouTube auto-generated captions available via YouTube API.

培训和结果

接下来,我在这个数据集上微调了预训练的 345M 版 GPT-2 模型。使用这个,我们可以将足球环境中的比赛信息作为输入提供给这个模型,并让它完成其余的评论文本,如下面的示例格式所示。

输入:这是这一方的目标!

输出:好吧,如果你继续进入那种区域,球就会落向你,而对他来说,它完美地落下了。这对任何人来说都是一个教训,有助于保持在 18 码区和 6 码区的位置,你就会得分!

为了在玩游戏时重现实时评论体验,我使用了一个名为 pyttsx3 的 python 文本到语音引擎来读出 GPT-2 模型的输出。实时音频评论结果显示在下面嵌入的视频中。

最后的想法

根据我使用这种方法的经验,我注意到/了解到以下几点

  1. GPT-2 每次都产生动态和变化的句子,但是这些句子中的许多短语是重复的,因为大模型很容易记住小训练数据集。我试图通过尽早结束训练过程来限制这个问题,以防止它过度适应输入。然而,理想的解决方案是大规模增加训练集的大小,有望使模型的输出更加动态。
  2. 我们需要提供更多的上下文作为模型的输入,如长期的比赛总结(比赛时间,比分等。)以及发生了什么事件的更简明的短期细节(谁进球了,以什么方式进球——头球还是远射,等等)。).有了更多的背景,这个模型将有望描述事件的细节,而不是像我这样只是随意猜测。

虽然解决这些限制超出了这项工作的范围,但我仍然对这个人工智能目前能够做的事情感到有趣。它展示了人工智能语言模型在彻底改造视频游戏叙事方面的巨大潜力!

请随意在下面链接的 GitHub 资源库中查看该项目的源代码,如果您能改进这些结果,请告诉我!😃

[## ChintanTrivedi/足球 _ ai _ 解说

人工智能生成实时足球评论。贡献给 ChintanTrivedi/football _ ai _ 解说开发由…

github.com](https://github.com/ChintanTrivedi/football_ai_commentary)

我还要感谢 Jonathan 在 YouTube 注释上就训练 GPT-2 模型以及如何改进结果进行了有益的讨论。

感谢您的阅读。如果你喜欢这篇文章,你可以在媒体GitHub 上关注我的更多作品,或者订阅我的 YouTube 频道

甘的创新成就了艾的创造力

原文:https://towardsdatascience.com/ai-gets-creative-thanks-to-gans-innovations-db81462ea4b2?source=collection_archive---------20-----------------------

对于人工智能(AI)专业人士或数据科学家来说,人工智能营销的弹幕可以唤起与普通观众非常不同的感受。

首先,人工智能行业非常广泛,有许多不同的形式和功能,所以行业专业人士倾向于更深入地关注人工智能的哪些分支今天被炒作。这也是事实,因为在人工智能的不同领域有着不同程度的进展。

一些子领域,如计算机视觉,只取得了微小的进步,而其他领域每六个月就有突飞猛进的发展。一个这样的领域是生成性对抗网络(GANs),它在大约三年的时间里从合成相当无趣的 28x28 像素图像发展到全高清人脸图像。这些完全是新奇的图像,需要一个画家所有的创造力和技巧。重要的是,对于人工智能从业者来说,这改变了我们对人工智能能力的看法,因为这意味着人工智能具有创造力。这意味着人工智能可以将一些更具机械性的创造力留给机器,并允许人类重新专注于不同的任务。

GANs 就像任何算法突破一样,只是一种工具,尽管它被广泛应用于不同的领域。例如,在医学上,GANs 已经被用于通过创建新的、真实的扫描来帮助癌症检测;它们在网络安全中被用于防御和进攻;出乎许多人的意料,gan 已经被用于艺术。事实上,由这种技术产生的一件艺术品卖到了 432,500 美元。现在有几位艺术家专门为甘斯创作,其中一位是海伦娜·萨林(Helena Sarin),她的作品在本文中有照片。

图片由海伦娜·萨林提供

生成性对抗网络的创新本质上很简单。它从两个网络开始,一个是生成器(因此是生成的),另一个被称为鉴别器,因为它辨别生成器的工作。这些网络相互竞争(因此是敌对的),试图超越对方。在艺术的例子中,生成器扮演艺术学生的角色,试图欺骗鉴别者,让他们接受它的作品是伟大艺术家的“真实”作品。与此同时,鉴别者就像一个苛刻的艺术老师,试图区分真正的艺术作品和学生的作品。通过这种竞争和反馈,双方都提高了自己的技艺。通过这种方式,甘模仿创造力和反事实推理。

在医学方面,截至 2018 年年中,已有 63 篇医学论文在某种程度上使用了 GANs。在大多数情况下,这些方法往往侧重于分割或合成,例如,在诊断心脏病时,GANs 在创造性地找出缺失信息方面的表现令人印象深刻。基于 GAN 的方法进一步推动了该领域,提供了一种新的、鲁棒的分类算法,可与所有其他尖端算法相匹配。从理论上来说,我们有理由相信,未来的外科手术中,可以使用氮化镓来增加外科医生的工作量。类似地,GANs 已被应用于药物发现和蛋白质折叠应用,以及牙科,人们已经在实践中使用它。

但是,由于有能力生成新的数据或图像,GANs 也有能力变得危险。一种相关但算法上非常不同的技术最近以“DeepFakes”的名义流传开来,如深度学习假图像。这种做法的道德和地缘政治影响是巨大的,因为它能够制作虚假的视频片段,比如政治领导人讨论对一个国家使用军事力量的视频。关于假新闻的传播和危险已经讨论了很多,但甘斯创造可信假新闻的潜力令人不安。如果有足够的公开镜头,也许很快就有可能合成从未发生过的事件的镜头。把它想象成下一代 Photoshop。

GANs 技术的创造者 Ian Goodfellow 最近被《外交事务》评为 2019 年全球思想家之一。这是人工智能被公认为关键塑造力量的重要一步,特别是考虑到中国希望其人工智能产业到 2030 年达到 1500 亿美元的目标,以及欧洲和其他国家在人工智能预算上花费数百亿美元。仅美国就花费了类似的金额,有消息称,“在其 2017 年的非机密预算中,五角大楼在人工智能和支持人工智能的领域上花费了大约 74 亿美元。”显然,考虑到投资的资金数量和这项技术塑造未来地缘政治关系的巨大潜力,外交事务的认可不应令人惊讶。

这就是为什么道德是每个人心中的一个重要话题的原因。我在与我的合著者 Vladimir Bok 合著的《行动中的 GANs:深度学习与生成对抗网络》一书中谈到了这个话题。GANs 可以为世界做很多好事,但是所有的工具都有滥用的地方。这里的哲学必须是一种意识:因为不可能“不发明”一种技术,所以确保相关人员意识到这种技术的快速出现及其巨大潜力是至关重要的。

同样,随着人工智能各个领域的这种增长和投资,咨询和专业团体开始出现,行业专业人士可以在这里会面,合作并讨论技术的好处和危险,如 Brainpool.ai 建立的全球网络。未来,我希望这些团体将继续定义公共人工智能政策,而不是公众对人工智能及其危险的看法。鉴于全球政界人士在人工智能方面的经验有限,该行业为这场辩论提供信息至关重要。

尽管 GANs 技术有更多的地缘政治方面,但 GANs 代表了一种令人兴奋的新技术,可以将创造力带入否则看似伪确定性的人工智能领域。最终,GANs 可以将人们从如何执行任务的低级物流中解放出来,并使他们能够专注于高级想法。为此, GANs 是人工智能创新中最光明的希望之一。

这个故事原本是写给 福布斯 的。想加入对话吗?推文@ langrjakub或者看我的网站【jakublangr.com】!我还在写一本关于 生成性对抗网络的书,你可以在这里查看

来源

Korkinof、t . Rijken、m . O ' Neill、j . years ley、h . Harvey 和 b . Glocker(2018 年)。使用渐进生成对抗网络的高分辨率乳房 x 线照片合成。从 https://arxiv.org/pdf/1807.03401.pdf取回

巴蒂博士和安德森博士(2016 年)。学习用对抗性神经密码术保护通信。从 https://arxiv.org/pdf/1610.06918.pdf取回

m .里加基和 s .加西亚(2018 年)。把一个 GAN 带到一场刀战:适应恶意软件通信以避免检测。2018 年 IEEE 安全和隐私研讨会(SPW)(第 70–75 页)。IEEE。https://doi.org/10.1109/SPW.2018.00019

人工智能、炒作和人类智能

原文:https://towardsdatascience.com/ai-hype-and-human-intelligence-ae1654001bc6?source=collection_archive---------19-----------------------

斯蒂芬·霍金教授说:“强大的人工智能的崛起将是人类有史以来最好或最糟糕的事情。我们不知道是哪一个”。

AI(人工智能)和机器学习正在推动新的前沿,一些宣传现在正在许多行业成为现实。谷歌、IBM、特斯拉和其他科技巨头在人工智能方面的突破比许多人预测的要快。虽然有人认为深度学习(机器可以比人类学习得更好)完全接管只是时间问题,但我认为人工智能需要一个健康的 HI(人类智能)来支持它。

人工智能这个术语已经变得无处不在,现在它被用来描述一系列基于算法的决策活动。事实上,许多被吹捧为人工智能的“新”创新实际上已经使用了一段时间。投资管理公司多年来一直使用算法来改善投资组合决策,而使用程序化购买来优化媒体支出,以及零售商使用预测分析来管理需求和供应,现在已经司空见惯。此外,聊天机器人已经成为客户服务部门的一项既定功能,在法律研究、客户呼叫中心和风险分析等领域运行的智能机器人数量急剧增加。

然而,许多人会认为这些例子不是真正的人工智能。从纯粹主义者的角度来看,他们可能是对的。它们是各种风格的编码逻辑,在不同的规则下运行。

一些人认为,真正的人工智能和机器学习能力应该专注于“人工神经网络(ANN)”——本质上是通过解码复杂模式和确定适当的行动路线来模仿大脑的工作方式。

虽然人们普遍认为我们距离真正的通用人工智能还有几十年的时间,但自学算法和自然语言处理引擎已经开始在这个领域成为真正的增值技术。

显而易见的是,在很多情况下,技术可以超越人类,这一领域的投资激增就是证明。2014 年,谷歌向支付了 4 亿美元收购 DeepMind。脸书已经在自己的人工智能平台上投入了数十亿美元。IDC 预测,到 2022 年,人工智能市场将超过 790 亿美元,Gartner 表示,到 2020 年,智能机器将成为首席信息官投资的重中之重。此外,普华永道和 CB Insights 计算出,2018 年风险投资公司对人工智能相关初创企业的投资超过 90 亿美元。在我们的日常生活中建立更智能的机器的竞赛似乎不可阻挡。

一些人(埃隆·马斯克可能是最知名的主角)认为深度学习完全接管只是时间问题。虽然我们相信我们离天网式的超级智能控制世界计算机系统并迎来世界末日还很远,但我们可能比以往任何时候都更接近模仿钢铁侠的 J.A.R.V.I.S .助手。

然而,我仍然相信,在某些领域,最先进的计算机之一——人脑——是不可替代的。虽然我们继续努力在个人和职业生活的许多方面提高效率,但仍有大量决策依赖于人类的直觉、创造力、同理心和我们阅读肢体语言的能力。这些决定不是非黑即白的,也不容易被“教授”或编程。这是有史以来最先进的决策引擎之一——人脑——发挥作用的地方。

人工智能和机器学习面临的最大挑战之一是它仍然依赖于规则和理性思维。在蛮力的比较中,毫无疑问,计算机已经超越了人类处理数据的能力——想想黑客等式的两边,黑客运行连续的脚本来强行打开密码保护的网站,安全专家,如 Cyberint ,在黑暗的网络上进行大规模搜索,寻找可能识别犯罪者的迹象。但是听到现在有些事情是计算机做不了的,人们可能会不高兴…

以创造力为例——真正的创造性创新来自哪里?以建设性的眼光看待人类的能力并不难发现,我们在艺术生成和创造方面的能力是机器无法比拟的。创造性的突破推动我们在每个人类时代前进,从第一个人使用摇滚作为武器到现在表现为“一切都是服务”的 XaaS 时代。虽然机器越来越多地使旅行成为可能,但如果没有创造性思维过程,即自发和零星的发明,如飞行、蒸汽动力和互联网,同等的机器会在科学上取得同样的飞跃吗?

机器产生的“创造力”的表现形式确实存在,例如由谷歌梦想等项目产生的“创造力”,但想象一下让一台同等的机器创作一本畅销小说,或产生一位特纳奖获得者,或开发一种新的商业模式。人工智能,作为一个程序,至少现在,虽然能够学习,但受限于我们编程让它学习的逻辑参数。

毫无疑问,人工智能和机器学习的影响将比许多人预测的更加深远。简单来说,它不是解决所有问题的灵丹妙药。然而,如果与有史以来最复杂的计算机——人脑一起使用,它将极大地改变我们生活的世界。

人工智能、永生和黑镜

原文:https://towardsdatascience.com/ai-immortality-and-black-mirror-880e7aa16cc3?source=collection_archive---------18-----------------------

我最近听了一段音频剪辑,乔·罗根宣布他将开始赞助一个完全由黑猩猩组成的曲棍球队!他厌倦了人们认为黑猩猩在运动水平上无法与人类竞争。他让这些黑猩猩努力工作。他们在扔水壶铃铛,而且他们严格的饮食是骨汤和麋鹿肉!

尽管这个音频剪辑击中了一个很好的罗根流行语,录音本身是伪造的。它是使用 Dessa 公司开发的人工智能模型创建的( bog post 带音频剪辑)。他们创造了一种算法,给它喂食的不是麋鹿肉,而是乔过去几集的播客,以便复制他的声音和表达方式。这个脚本是由一个人创建的,然后被交给模型,在模型中,它获取文本并将乔·罗根的模仿输出到一个音频文件中。就电脑声音而言,它很好,不完美,但真的很好。知道它是假的,你肯定能听到听起来有些不对的部分,几乎就像恐怖谷的音频版本。

人工智能模仿的历史

2012

  • 一种名为 Mathgen 的算法能够创建一篇虚构的学术论文,并已被《纯数学进展杂志》接受。

My own math paper generated by Mathgen

2015

  • TensorFlow 首次亮相,其早期演示之一是其风格转移功能。使一个人能够从梵高的作品中获得一幅图像,并将这种风格应用于任何其他图像。这里有一个来自 TensorFlow 博客的演示。

An example of the style transfer capabilities from TensorFlow

2017

  • 一个来自 Botnik 的人工智能模型写了新的哈利波特章节
  • 奥巴马总统和特朗普都被这个中国 AI 模仿。他们甚至让特朗普用普通话讲话!
  • Dadabots 利用深度神经网络创作了黑色金属音乐,翻拍了一些披头士的歌曲。

2018

  • 深度学习模型 Deep Fake 拍摄一个人的视频,并在不同的视频中将他们的脸转移给另一个人。戴夫·李有一个很棒的评论剪辑展示了它的能力。

Dave Lee sporting Lewis Hilsenteger’s beard

能力和权利

所以,这就是我们所在的地方,我们可以模仿一个艺术家或作家的内容,我们可以模仿他们的声音,通过深度伪造,我们甚至可以模仿他们的外表。希望你能生活在 19 世纪,让梵高为你画像,没问题。你最喜欢的乐队解散了,这没什么大不了的,我们会用他们的风格创作新的音乐。我觉得如果尼古拉斯·凯奇是主角,电影会更好,有人已经为你做了。艾给了我们艺术家的不朽。没有书系列必须结束,没有画必须是最后的。

这当然带来了一个问题“艺术家有什么权利?”如果他们的音乐被用作创建模型的输入,他们有权利输出吗?或者我们可以简单地说,这台机器受到音乐的启发,就像格里塔·范·弗利特这样的乐队受到齐柏林飞船的启发一样。灵感仅仅是高度变异的模仿吗?时间只会带来更多关于艺术家和 AI 话题的讨论,但一个更有趣的问题是,人们将如何将这项技术应用到他们的个人生活中。

进入黑镜

深入这个话题的最佳方式是通过黑镜。2013 年的剧集【T2 马上回来讲述了一个年轻女子玛莎的故事,她的男朋友突然在车祸中丧生。突如其来的损失让她心烦意乱,她求助于一项服务,该服务提供复制他的人格。它通过读入男朋友在社交媒体上分享的所有数字数据来做到这一点。这项服务开始是一个简单的聊天机器人,然后转向语音,最后甚至复制他的外貌。2013 年还是科幻的东西,现在 2019 年完全可以了。

希望你能和一个亲密的朋友有更多的交谈,做一个聊天机器人。你有他们的音频吗?更好的是,现在机器人可以用那种声音回答了。真希望你父亲能陪你走过红毯。没问题,只要有人代替就行了,现在你回去看婚礼视频的时候会是他(至少长得像他)。

像任何新技术一样,它也带来了问题。使用死者肖像的道德规范是什么?这是有益的还是有害的?这种服务会伤害情感上受伤的人吗?一个声称能让你和死人交流的数字通灵者?这带来了很多问题,精灵不会回到瓶子里。最近有人告诉我,技术遵循摩尔定律,但伦理和哲学不遵循。我们需要时间去实验,去发现让这项技术进入我们生活的正确平衡点。马上回来主要关注玛莎在这个问题上的挣扎。最后,她找到了一个平衡点,既能保存她男友的记忆,又不至于失去他只是一个数字代表的位置。这实际上是黑镜的一个更好的结局。希望我们也能有一个幸福的结局。

生物信息学中的人工智能

原文:https://towardsdatascience.com/ai-in-bioinformatics-a1acdc3cdd89?source=collection_archive---------10-----------------------

在这篇文章中,我将介绍这一领域的最新发展。

人工智能一直在寻求大量关注,因为它试图复制人类智能来分析我们周围的复杂数据。人工智能的两个主要子集:机器学习和深度学习,因其在不同领域的可行开发而在研究界引起了很多兴奋。在这篇文章中,我们将看看最近介绍的生物信息学领域的最新进展。

生物信息学是生物数据分析的一个领域。该领域的基本应用包括生物序列和分子结构的分析,高级应用包括生物系统的建模。

生物信息学中的人工智能包括借助于生物序列匹配、蛋白质-蛋白质相互作用和功能-结构分析的基础和临床研究。这种分析有助于药物和复杂系统的设计和发现。

因此在这篇文章中,我们将关注人工智能在生物信息学领域的最新趋势:

  1. 基于双向长短期记忆的蛋白质远程同源性检测,2018(原文链接: 此处 )
  2. 用磁带评价蛋白质迁移学习,2019 ( 此处 )
  3. 蛋白质结构的生成式建模,2019( 此处 )
  4. 蛋白质远程同源性检测采用基于相异度的多实例学习,2018 ( 此处 )
  5. 基于图谱的蛋白质远程同源性检测,2019 ( 此处 )

什么是蛋白质?

蛋白质是氨基酸的线性链。它用标准的 25 字符字母表编码,其中 20 个字符代表标准氨基酸,2 个代表非标准氨基酸,2 个代表不确定氨基酸,1 个代表未知氨基酸。在整个讨论中,任何长度为 l 的蛋白质 x 都是 20 个离散氨基酸字符的序列(x₁,x₂……,x₂o)

示例- 'MEEPQSD……..DSD’是来自激酶家族的蛋白质序列。

基于自然语言处理的技术可以用来提取有用的生物信息吗???

基于双向长短期记忆的蛋白质远程同源性检测;

短语“蛋白质远程同源性检测”是指通过从长蛋白质序列中提取基本信息(主要通过分析结构或序列相似性)将蛋白质序列分类到它们各自的超家族中。

问题陈述将序列分类的任务分解成它们各自的组(超家族)

因此,基本上在提出的工作中,研究人员引入了 ProDec-BLSTM,这是一种由不同层组成的网络架构:输入层、双向 LSTM 层、时间分布密集层和输出层。这种架构试图从双向 LSTM 的每个隐藏值中捕获信息,并对其进行进一步处理。关于这一点的总结可以在这里找到。

Architecture for ProDec-BLSTM

用磁带评估蛋白质迁移学习:

迁移学习出现在计算机视觉领域,现在正被用于各种其他领域,如自然语言处理( NLP )。它指的是利用从一项任务中获得的知识来解决相关任务的想法。举个例子,

它试图捕捉各种信息,包括从大型语料库中学习各种语言特征,如结构、句法、长期和短期依存形式的语法。然后,它使用这些知识来初始化和训练处理类似 NLP 任务(如情感分析或文本摘要)的其他模型。

蛋白质数据是序列数据,因此生物信息学社区的研究人员试图利用 NLP 中的先进技术从蛋白质序列数据中提取信息。为了促进这一进展,任务评估蛋白质嵌入(TAPE)已被引入,它包括 5 个生物学半监督学习任务,分布在蛋白质生物学的各个领域。因此,它主要集中在蛋白质生物学的三个领域,如结构预测、远程同源性检测和蛋白质工程。作为基准的 5 个生物学相关任务是:二级结构预测、接触预测、远程同源性检测、荧光景观预测和稳定性景观预测。该性能已针对三个主要的代表性模型(循环、卷积和基于注意力)进行了基准测试。除了这两个不同的模型也被使用。

蛋白质结构的生成模型;

生成模型旨在学习数据分布的真实表示,使得生成的数据分布看起来与原始数据分布相似。但是,比较和学习真实的数据分布是不可能的。因此,我们试图学习一个模型,它的数据表示与真实数据相似。一种有效的方法是生成对抗网络(GANS ),它使用一个生成器和鉴别器网络来实现这一点。这基本上是两个神经网络,其中生成器试图生成自然图像,鉴别器试图确定生成的图像是假的还是真的。这可以类似于这样的场景,其中它可以被认为是 minimax 游戏,其中生成器试图通过生成接近原始图像的图像来愚弄鉴别器,而鉴别器试图通过提高其鉴别能力来不被愚弄。该模型旨在实现两个网络之间的平衡。

Architecture for GANs

在本文中,GANs 被用于生成蛋白质结构和预测损坏的蛋白质结构的缺失部分。该数据涉及 3D 蛋白质结构的使用,其被编码为α-碳之间的 2D 成对距离。这种表示不保留序列信息,但是这种信息对于结构恢复来说是足够的。这些距离矩阵被称为“地图”。

The architecture of the proposed method in the paper

使用深度生成模型生成和设计 DNA是另一篇论文,它演示了如何使用 GANs 来生成新的序列,这些序列的特性有望优于蛋白质训练数据集中的序列。( 此处 )

基于相异度多示例学习的蛋白质远程同源性检测;

远程同源性检测的任务包括在蛋白质序列数据中鉴定功能或结构相关的相似性。有时同源蛋白质序列(属于同一超家族的序列)显示出很少的序列相似性。整个任务取决于如何构建蛋白质的特征向量表示。

序列数据的这种特征构造的最广泛使用的方法之一是 N-gram(k-mers)-它是连续符号的短子序列。因此,向量表示由字典 N-grams(氨基酸序列)在给定蛋白质序列中出现的次数组成。这种方法迫使 N 保持较小,因为较大的 N 值会导致较长且稀疏的表示。

例如,如果 N 的值是 2;字典 N-grams(20 个氨基酸序列)将由特征向量中 20ⁿ子序列组成。因此,20 = 400 个这样的要素制图表达。因此,单个蛋白质序列将用 1x20 表示。随着 N 值的增加,特征向量的大小也将增加。

因此,本文提出了一种新的基于多示例学习(MIL)的向量表示方法,该方法对于基于 SVM 的鉴别技术显示了良好的效果。

在 MIL 问题的情况下,对象由一个由一组特征向量组成的包来表示。则标签被分配给整个包,而不是单独的特征向量。如果在袋子内部存在任何(至少)阳性实例的痕迹,则假设该袋子被认为是阳性的。

这里,蛋白质序列被认为是一包大小为 n 的片段。这种技术有两个好处:

  1. 特定包的标签由一小组相关实例确定。两种蛋白质之间的同源性与一小组信息片段的存在成正比。
  2. 它不要求 N 聚体的大小很小,因为对子序列的大小没有限制。

基于图谱的蛋白质远程同源性检测;

这种分类的任务围绕着构建蛋白质序列数据的更具信息性的特征向量表示。在本文中,作者试图改进基于轮廓的方法,该方法使用位置特定频率矩阵(PSFM)进行特征提取。这种现有技术已经提出了通过去除被称为顶频轮廓(TFP)的低频氨基酸来从轮廓(从 PSFM 提取的特征集)中去除噪声的技术。现在,除了这个转换的轮廓之外,应用自交叉协方差(ACC)以使蛋白质载体的长度相同。

PSFM 是包含每个标准氨基酸‘I’在列‘j’中出现的频率的矩阵,其代表长度为 L 的给定蛋白质的序列

因此,简单地说,这个领域中的数据可以被视为携带一些与生物生命相关的上下文信息的序列数据。

结论

在这篇文章中,我试图吸引读者对机器学习和深度学习如何扩展到生物信息学领域的注意。我希望我能够将生物序列数据与自然语言处理中使用的序列数据联系起来,因此类似的技术也可以应用于这个领域。主要目的是让读者了解这个领域正在进行的研究。

在下一篇文章中,我想进一步探索(【https://arxiv.org/abs/1906.08230】)的工作和细节

参考

[1]:李 s,陈军,刘波,【基于双向长短期记忆的蛋白质远程同源性检测】 (2018)

[2]: Roshan Rao,Nicholas Bhattacharya,Neil Thomas,闫端,,John Canny,Pieter Abbeel 和 Yun S. Song,用磁带评估蛋白质迁移学习 (2019)

[3]: Namrata Anand 和 Po-Ssu Huang,蛋白质结构的生成建模 (2019)

[4]:安东内里·门西,曼努埃莱·比塞戈,皮埃特罗·洛瓦托,马尔科·卢格和大卫 M. J .塔什,利用基于相异度的多示例学习进行蛋白质远程同源性检测 (2018)

[6]: Elvis,NLP 迁移学习的简单介绍

医疗保健中的人工智能不仅改变了医生的诊断工作流程

原文:https://towardsdatascience.com/ai-in-healthcare-not-only-changing-doctors-diagnostic-workflow-fd36778130e5?source=collection_archive---------22-----------------------

创造医疗人工智能产品的思维模式正在发生变化

Photo by Sam Moqadam on Unsplash

简介

肺炎是一种主要由微生物引起的肺部感染。如世界卫生组织(世卫组织)所述,“肺炎是全球儿童死亡的单一最大传染性原因,占所有五岁以下儿童死亡的 15%。[……]由细菌引起的肺炎可以用抗生素治疗,但只有三分之一的肺炎儿童获得了所需的抗生素。"

此外,今天已经缺乏所需的放射科医生。每一个现存的都比以前有更多的工作要做。在综合医院,放射科医生正在他们的观察台上每小时手动进行这种肺炎分类。正如《AI in health care》杂志中提到的,对于放射科医生来说,像深度学习这样的人工智能方法将“加快和提高他们解读图像的能力”。

关于肺炎 X 射线图像,人工智能(AI)学习方法可以简化医疗工作流程并提高诊断正确率,因为可以在短时间内对数千张图像自动且有效地给出估计,即使是难以人工诊断的图像。有了这样的帮助工具,放射科医生可以专注于其他重要的任务。

此外,根据提到的世卫组织概况介绍,“肺炎影响各地的儿童和家庭,但在南亚和撒哈拉以南非洲最为普遍。”与欧洲或北美等西方国家相比,整个地区的医疗保健覆盖范围并不相同。拥有自动工具将有助于触发必要的医疗或其他干预,即使没有足够的合格医务人员。

那么,创造和交付这种医疗人工智能软件来改善患有肺炎的儿童的状况,以减少五岁以下儿童死亡总数的 15%是必要的吗?

借助一个示例—关于胸部 x 光图像是否显示肺炎的医疗诊断问题(在我的 GitHub 个人资料中)—我们考虑以下问题:

  1. AI 软件的发展对医疗保健公司意味着什么?
  2. 医疗 AI 软件工具需要什么样的工程?
  3. 医疗设备制造商在监管环境中工作:人工智能软件需要满足什么样的质量期望?

问题 1:AI 软件的发展对医疗保健公司意味着什么?

由于历史原因,医疗市场在制造和人事政策方面的“大玩家”一直以硬件为导向,创造高质量的医疗设备,因为这是必要的。但是今天,这种情况已经改变了,对于公司来说,区别在于软件部分。因此对于制造过程,软件工程应该有更高的优先权,特别是对于人工智能软件工具的创造。为了实现这一点,你需要专门从事这种软件开发和人工智能研究的专家,医疗保健与专业大学和医院合作。

对于软件开发来说,编程概念的方式发生了变化:

  • 旧世界中,为了达到期望的结果,需求和决策标准必须被明确地知晓和实现。
  • 在使用人工智能的新世界中,胸部肺炎的例子使用深度学习神经网络(CNN——卷积神经网络——分类器)来解决所关注的商业问题,而不需要知道和实施任何详细的决策。

source¹

该算法用来作出决定的标准不是立即显而易见的,它来自图像数据集。目标是最终算法应该能够为新的、未知的胸部 X 射线图像预测正确的分类。也就是说,用于软件模型训练、验证和测试的数据集本身是最重要的标准之一。

因此,为了保证统一的工作方法和风险最小化,遵守 CRISP (跨行业标准流程(数据挖掘))等工程流程就显得尤为重要。这就引出了第二个问题。

问题二:医疗 AI 软件工具需要什么样的工程?

CRISP 流程是数据科学领域国际公认的流程。因此,它的应用有助于与监管机构的沟通以及产品的开发。一般来说,解决业务问题的过程分为不同的阶段。

CRISP process diagram by SAP²

关于这个周期,整个解决方案流程从业务理解开始,然后是理解和修改现有数据。根据业务需求,这是成功、正确的产品结果的关键部分,这就是团队合作。

关于肺炎业务问题,第一发现是影响医疗诊断的二值图像分类问题。

  • 存在哪些数据,我们需要获取哪些数据,需要修改到什么程度?所使用的 Kaggle 数据集 传送已经标记的图像作为训练、验证和测试样本,每个样本包括两个子目录(肺炎、正常)。但是这种分布不符合数据科学的经验法则(70/30 或 80/20),因此,这种情况已经改变。使用原始数据集会导致关于所选指标的不切实际、不可靠的性能值。因此,新的分布 V2 和 V3 是从原始数据集创建的,V2 数据分别具有 70%的训练样本、10%的验证样本和 20%的测试样本,V3 数据具有 60%的训练样本、20%的验证样本和 20%的测试样本。

  • 哪些程序适合澄清业务问题?此类图像分类问题的最新概念是深度学习 CNN 模型架构。他们的算法识别显示肺炎的图像状态的估计,或者不用于未来图像的预测。图像像素及其信息输入(如彩色区域、边缘、对象结构等)被表示为从更一般到更详细的特定特征的隐藏层特征,这些特征被网络“学习”以能够提供这种输出分类估计。这个概念是模仿人类大脑学习和创造信息的方式。
  • 最初使用哪个 CNN 架构模型,要考虑哪些变体,最终选择哪个,为什么?为特定任务构建和寻找神经网络并非易事。不同的模型通过一些度量标准相互比较和评估。选择对分类问题和数据集公平的评估度量。最终,使用瓶颈功能的最佳模型 RestNet50 转移模型已经确定。

问题 3: 医疗设备制造商在监管环境中工作:人工智能软件需要满足什么样的质量期望

为了引进一种新的医疗产品,必须考虑法律方面的问题。一般来说,“Q&R”(质量和监管)部门包括营销和 R&D(研发)部门。以我们的 Chest 为例,考虑一个团队,其中有详细了解业务领域的产品经理、软件工程师、测试人员和数据科学家。

如果您将数据科学家视为人工智能项目经理,则该角色包括领导与监管机构的沟通,以获得官方批准(例如,对于美国:强制性 FDA 510(k)流程)和 FDA 或 tüV 等机构的官方审计(在欧洲,根据 MDR)。

在这种情况下,数据科学家能够解释软件工程过程以及技术人工智能基础知识、人工智能产品软件的关键组件及其以一般可理解的方式进行解释是至关重要的。Q&R 和监管机构的员工通常没有必要的工程背景来进行人工智能讨论,这也不是他们的工作。他们主要关注的是监管和投诉,而不是人工智能算法的数学深度。

例如,为了更好地了解 CNN 在其隐藏层内部正在做什么,迪潘然(DJ)萨卡尔在他的博客帖子中为 CNN 介绍了一些关于解读深度学习模型的解读技巧。例如,使用 GradCAM,我们通过查看类激活图(CAM)来尝试并可视化图像的部分如何影响神经网络的输出。"您可以识别并可视化特定隐藏层块聚焦在图像的哪个区域。

像在这个猫的例子中,聚焦在第一个隐藏层(顶部)的边缘和角落;在较高的隐藏层(底部),关注周围环境和面部结构。可解释 AI()‘对于医学领域的数据科学家来说,是一个很好了解的自己的研究领域。

除了解释之外,监管机构还会立即提出进一步的问题:

  • 是否已经有可用的解决方案?那里用的是什么样的数据?我们可以与之比较的其他解决方案的指标评估是什么,或者是否有“官方”指标值?细胞杂志论文“通过基于图像的深度学习识别医学诊断和可治疗疾病”中描述了一种已经存在的解决方案。在德国举行的人工智能医学研讨会上(2019 年 7 月),tüV 的一名代表提到 86%的测试准确率是这项医学分类任务的参考性能值。

数据科学家必须解释评估指标,因为这是一个医疗诊断问题,例如混淆矩阵的假负值(2 型错误)对于选择正确的模型也非常重要。对于患有肺炎的儿童,CNN 模型结果的高假阴性值导致他们生病,但软件认为他们是健康的,生病的儿童不会得到所需的必要医疗护理。

关于我们使用数据集V3 60–20–20:的模型实现,如果决定使用具有最高测试准确性的模型,那么选择具有 Adam 优化器和增强的基本模型:其值为 89.33%。但是 is 已经检测出 57 个漏报,太多了。如果决定在最低数量的假阴性上具有更高的 prio,则具有 Adam 优化器和瓶颈功能的 ResNet50 转移模型是最终模型——只有 5 个假阴性,测试准确度为 84.80%。

结论

人工智能算法有可能改变未来常见的医疗工作流程(来源)。

为了开发和营销合格的医疗人工智能产品,公司结构和管理思维需要改变。对于数据科学,软件工程需要更高的认可地位和合适的合格员工。和监管方面需要高素质的数据科学家沟通技巧。

关于我们的例子,目标是减少五岁以下儿童死亡总数的 15%,对于我们的编码及其最终软件解决方案(使用瓶颈特性的 RestNet50 转移模型 ) ,所使用的模型超参数被认为是起点。期望进行详细的超参数调整,以获得更好、稳定的预测和度量结果(例如,测试准确度> 86%,假阴性数量低(< 5))。此外,获得更好结果的更高级的隐藏层结构和隐藏层的解释概念还没有实现。它的计算成本很高,并且需要合适的硬件环境。****

[1]将 Kaggle 数据集的胸部图像、医疗 youtube 视频和 databricks 论文“人工智能民主化和深度学习”的图表组合起来,创建自己的图表

[2] SAP 课程“数据科学入门”

肿瘤学人工智能辅助诊断和药物发现:谨慎处方

原文:https://towardsdatascience.com/ai-in-oncology-assisting-diagnostics-and-drug-discovery-prescribe-with-care-dd9822aac626?source=collection_archive---------33-----------------------

展示人工智能在癌症 Dx 和 Tx 中的应用

人工智能不再只是好莱坞的专利。人工智能(AI)是一个不断增长的市场,尤其是在医疗保健领域,没有放缓的迹象。到 2021 年,人工智能在医疗保健领域的应用预计将达到 68 亿美元。公司和国家都看到了专注于人工智能研究的价值。欧洲委员会去年宣布,他们将在 2020 年年底前向人工智能投资 200 亿€。这项投资将涵盖人工智能技术的许多方面,包括医疗保健。

但是人工智能到底是什么,更重要的是,所有的炒作都是为了什么?

什么是人工智能?

简单地说,人工智能是开发计算机程序来完成模仿人类智能的任务。像视觉和语音识别以及复杂的决策制定这样的事情是人工智能开发出来要完成的任务。人工智能应用不仅仅是收集和组织数据,而是能够解释和适应大量的数据和文档。

医疗保健数据库通常非常复杂,但充满了可用于药物研发和精准医疗的有用信息。在医疗保健中使用人工智能可以帮助改善数据的组织,并加快研究突破。

人工智能通过使用机器学习等各种方法来实现这一点。机器学习工具能够识别用户行为或患者结果的模式,以创建自己的逻辑。这使得人工智能医疗保健编程能够学习和进化——不断改善结果和效率。

机器学习是人工智能应用程序能够完成的许多任务之一。另一个是自然语言处理,人工智能程序解释口语、打字和手写单词。这在评估医疗保健听写软件和医疗文档时尤其有用。解释这些大量的数据并将其存储起来,这就是所谓的大数据,人工智能应用程序在不断收集和组织数据。这些程序需要学习的信息越多,它们适应的速度就越快,生产率就越高。

癌症筛查和检测,以及肿瘤学研究的进展,都是受益于 AI 技术的领域。我是肿瘤诊断公司 Universal DX 的首席运营官,该公司使用机器学习进行诊断研究。在肿瘤学中与人工智能合作提供了许多关于人工智能的好处和挑战的见解。下面我将全面介绍人工智能的最新进展以及必须采取的预防措施。

人工智能技术有助于癌症检测

人工智能在医疗保健领域的应用非常广泛。从癌症诊断到机器人辅助手术,人工智能应用正在帮助提高肿瘤学的效率和患者疗效。你可以在下图中看到诊断是医疗保健人工智能交易的一个主要组成部分,这说明了人工智能技术可以给研究带来的价值。

https://www.cbinsights.com/research/report/ai-trends-healthcare/

已经有许多研究表明,人工智能与人类对放射学研究和实验室结果的解释一样有效,如果不是更有效的话。中国的研究人员最近研究了在评估一项新的脑肿瘤诊断时,使用深度学习程序如何帮助改善解释结果。该项目评估 MRI 成像,以分类和绘制图像,并协助手术计划。与外科医生手动进行的肿瘤分割相比,人工智能应用程序在癌症检测方面更加准确和高效。

乳腺癌是女性中最常见的癌症,难怪研究人员正在寻找更多方法来帮助癌症检测和治疗乳腺癌。Therapixel 开发了一个人工智能程序,通过将当前图像与数千张存储的乳房 x 光图像进行比较,来解释乳房 x 光检查结果。通过比较和分析存储图像的集合,这个人工智能程序将提供数据,确定患者是否需要额外的测试来排除癌症。Therapixel 声称,与放射科医生相比,他们的人工智能程序可以更准确地评估患者是否需要返回进行进一步成像——这一步骤可能成本高昂,而且对患者来说也很有压力。

对于病理学家来说,在确定癌症诊断时评估病理切片是非常耗时的,因为有如此大量的数据要查看。哈佛医学院开发了一个人工智能程序,帮助病理学家诊断乳腺癌细胞。研究人员创建了一个程序来评估数百万张被鉴定为癌症和非癌症细胞的病理切片。这使得人工智能程序能够创建预测算法并生成概率热图。与病理学家 96%的准确率相比,人工智能程序的预测准确率为 92%。但是,它确实显示了病理学家使用的人工智能程序具有最高的准确率——突显了人工智能工具在由研究人员使用时与完全自主使用时如何得到最佳利用。

在改进诊断的同时,谷歌正在开发一个人工智能显微镜程序,以帮助病理学家检测癌症。谷歌的增强现实显微镜使用机器学习算法主动分析图像。人工智能诊断工具不仅可以帮助病理学家,还可以帮助病人。 Skin Vision 是一家为 iOS 和 Android 用户开发了一款应用程序的公司,该应用程序可以为你的皮肤拍照,以评估可疑的病变。然后,该应用程序帮助确定该部位患癌的风险——促使医疗保健提供商进行进一步评估。

人工智能协助肿瘤药物发现和精确医疗

现在众所周知,个性化医疗在治疗癌症时会给患者带来更好的结果。除了检测癌症,人工智能技术在区分基因突变以实现精准医疗方面也显示出了前景。通过评估和确定基因突变,肿瘤学家能够更好地治疗他们的病人。

个性化或精确医学需要不断分析基因突变,以发现新的治疗方法。使用机器学习和大数据等人工智能工具可以帮助简化这种数据收集,甚至有助于药物发现。

瑞士的索菲亚遗传学公司正在利用大数据来帮助分析患者癌细胞的基因组构成。他们提供了一种使用人工智能技术的试剂盒,将患者的 DNA 与大型数据库进行比较,以确定是否存在基因突变,从而使用精准医疗。Sophia Genetics 利用人工智能技术,在治疗肺癌、结直肠癌、皮肤癌和脑癌等实体瘤时,帮助检测世界上许多国家的变化。

人工智能技术有助于区分健康细胞和癌细胞,并确定基因突变——但它也有助于研究人员开发癌症治疗药物。制药公司诺华与科技巨头微软合作,将人工智能工具应用于药物研发。利用微软的大数据和机器学习技术,诺华的研究人员可以分析大量数据,寻找应用基因治疗的新方法。有了这些工具,进行这些发现的时间可以大大缩短,从而导致更快的药物发现和开发。

人工智能在医疗保健领域面临的挑战

尽管人工智能在医疗保健进步方面带来了很多希望和承诺,但仍有一些挑战必须解决。在分析大数据之前,需要完成合并数据的任务。电子健康记录使用的增长为医疗机构创造了多种多样的选择。由于使用了如此多的医疗保健数据库平台,这给它们之间的信息共享带来了挑战。对于相同的诊断或治疗,可能使用不同的措辞,文件中的差异,以及错误的数据输入。

不幸的是,没有一个全球性的网络让医疗服务提供者和医疗保健组织彼此共享医疗信息,也没有一个全球性的方法来“结构化数据”。为了让人工智能工具有效地工作并识别趋势,必须安全地收集和组合医疗保健数据——记住使用的数据是个人医疗信息。

公司正在积极解决这个问题,但仍有工作要做。 Riovant 是一家制药公司,声称通过考虑数据收集的所有差异,使正常化医疗保健数据。通过标准化患者和研究数据,这确保了开发新药时数据解释的准确性。将电子健康记录整合成一个整体需要更多的时间,因为有许多财务和专有的因素在起作用。

另一个挑战在于,当涉及到高质量、干净的数据时,数据库并不都是平等的。在收集分子结合亲和力的数据时,一个微小的结合误差可能意味着纳摩尔和毫摩尔之间的差异。在使用 AI 技术时,看似很小的错误都会造成误传和曲解的滚雪球效应。从本质上讲,产生的结果只和用来创建人工智能算法的数据一样好。

人工智能在医疗保健领域面临的另一个挑战是限制审计和评估人工智能程序评估大数据的能力。人工智能程序经常获取大量数据并提供答案,但并不总是有办法评估结论是如何得出的。考虑决策利弊的人情味不存在——这有时会消除对患者护理全局的关注。人工智能程序的结果不能被解释为绝对正确的事实,因为人工智能的魅力在于有一个推理组件,它可能不总是与研究人员、医生或患者的推理一致。

小心使用人工智能

很明显,医疗保健中的人工智能可以为研究人员、医疗保健组织和患者提供许多好处。通过应用人工智能工具,癌症诊断和治疗方面的突破可以比以往任何时候都更快。但是必须小心确保数据被安全地共享并且数据被准确地共享。必须始终保持人机之间的良好平衡,以帮助谨慎开药。

人工智能投资活动-2018 年趋势

原文:https://towardsdatascience.com/ai-investment-activity-trends-of-2018-bf82cd8bd5ea?source=collection_archive---------17-----------------------

人工智能炒作放缓,建立认知技术栈,垂直整合和其他观察

Photo by Markus Spiske on Unsplash

这篇综述强调了 2018 年以来启动/投资人工智能(AI)初创公司的趋势。它包含了对 2018 年推出的 47 家人工智能初创公司的分析,每个公司都成功筹集了至少 100 万美元。此外,它还包括一些长期趋势的更广泛的概述。我在这篇评论中涵盖了、美国、加拿大、欧洲和以色列

回顾了 2018 年推出的人工智能创业公司的数据,我可以强调以下五个趋势:

1.人工智能炒作放缓——启动的创业公司越来越少,投资方式越来越彻底;

2.新一波人工智能创业公司的出现,解决了其他人工智能创业公司带来的挑战;

3.人工智能技术堆栈的持续构建;

4.纵向一体化;

5.市场模式的有限普及。

AI 炒作减速

根据 Pitchbook 的数据,2018 年见证了自 2010 年以来新推出的人工智能创业公司数量的最低水平(图 1)。即使考虑到并非所有在 2018 年推出的创业公司都可以被纳入数据库[1],这种趋势也很可能存在,我们正在看到人工智能公司的形成放缓。

Chart 1. AI startups annual formation, only for startups recognised as AI startups by Pitchbook

从某种程度上来说,这种下滑可以解释为这样一个事实,即创业公司现在不太愿意推销自己的人工智能,因此也不太可能被数据提供商发现。然而,更仔细的搜索会发现那些“隐藏”的创业公司。例如,通过搜索与人工智能相关的多个关键词,而不是依靠数据提供商对初创公司应用的静态分类,人们可能会发现更多的人工智能初创公司(图 2)。

Chart 2. AI startups annual formation, for startups recognised as AI startups by the data provider and by a keywords search

然而,即使经过那些没有宣传其人工智能组件的人工智能创业公司的调整,新成立的人工智能创业公司的数量也明显低于前几年的水平。

投资活动反映了人工智能初创公司的放缓。此前,投资者将赌注分散在给多家初创公司签小额支票上。如今,它们似乎加倍押注于假定的赢家,并以更专注的方式投资于新来者。例如,在 2018 年启动的 121 家人工智能创业公司的样本中[2],7%(或 8 家公司)筹集了 1000 万美元或更多的第一轮资金,而在 2016 年启动的 801 家创业公司中,只有 3%的公司筹集了大笔初始资金。

即使大型初始轮变得更加频繁,人工智能种子轮的中值规模也仅略高于美国的平均水平,分别为 230 万美元和 2M 的 230 万美元。2018 年,大多数被抽样的新人只成功筹集了一次资金,只有 9 家初创公司分别筹集了几次资金(图 3)。

Chart 3. Number of AI startups launched in 2018 by the initial round size, sample of 47 startups

人工智能创业公司的新浪潮

Brian W. Arthur 曾经指出,“……对技术的需求更多地来自技术本身,而不是直接来自人类的需求;它们主要来自技术本身遇到的限制和产生的问题[3]。

过去的一年展示了人工智能、机器人、区块链和其他技术如何创造了对支持技术的需求。例如,自动驾驶汽车的出现为 Ottopia 建立一个远程协助他们的平台提供了机会。远程医疗的普及需要一种新型的招聘公司,如酵素,能够将临床医生与远程医疗提供商联系起来。机器人流程自动化(RPA)的浪潮增加了对描述和绘制业务流程的工具的需求,如 Mimica 开发的工具。

另外,我想强调平台化的趋势。这在银行业引起了广泛的注意,现在它似乎正在接近法律行业。例如, Reynen Court 的“……应用加速了法律技术应用之间的互操作性,使律师事务所能够采用人工智能和智能合同……”。智能合同和人工智能带来的机遇推动律师事务所成为科技公司/平台。

总体而言,在 2018 年推出的 47 家样本人工智能创业公司中,有 15 家或多或少与新技术/行业的需求有关(图表 4,以及一张谷歌表单的大图)。

AI:建立新的堆栈并改进现有的堆栈

DataOps 和 DevOps 功能是上市人工智能初创公司最受欢迎的解决方案。47 家初创企业中有 12 家从事这些领域的工作:

  • 在数据操作方面,初创公司提出了各种方法来让 AI 变得更好,例如,通过改善数据标签和管理( Labelbox宁静数据)、数据湖管理(accele Data);
  • 用 AI 改善现有的 DevOps 流程是另一个重要的主题。对于实例lumi go‘…提供了环境的可视化地图,以及跟踪和深入每个请求的每个方面的能力,它将专注于使用“机器学习来更好地隔离服务中的异常行为”。另一个例子是 Tengram Flex,它开发基于人工智能的软件开发工具,以构建“…自动生成的软件接口,在不同语言和架构的组件之间架起桥梁”。

垂直整合

被选中的 47 家初创企业中有 15 家展示了纵向一体化的各个方面:一家公司的供应链归该公司所有。人工智能公司通常不直接拥有供应链,但控制供应链的几个要素,并提供整体服务,而不是纯粹的软件。可以确定几种“拥有供应链”的方式:

  • 人力支持。例如,为客户服务提供人工智能的 Simplr ,也提供来自实时客户服务代理的支持,如果其人工智能无法处理请求,代理就会介入。Ottopia 不仅开发了用于自动驾驶汽车遥控操作的软件,还将其与自己的遥控操作者池相连接;
  • 专有硬件。许多人工智能公司从事硬件开发,以及其核心软件。例如亮机充足电
  • 专有数据Insitro智人数据用专有数据补充他们的算法。以为例,Insitro 不仅将“……使用已经收集的高质量数据,而且……还将大力投资创建我们自己的数据集”;
  • 与各种供应商的整合 s,无论是能源生产者还是内容创造者 AI 创业公司都试图控制它。

市场

在 2018 年启动创业的人工智能创始人中,市场不是很受欢迎。只有 8 家公司采用了这种方法。例如,Enzyme“…使用机器学习算法为医生和护士从业者匹配适合他们专业知识和可用性的职位”,而 Lumen App 使用一种算法来验证其约会应用程序成员上传的自拍,该应用程序专为 50 岁以上年龄组的人设计。

Chart 4. Sampled AI startups launched in 2018 and raised $1M or more each. See Notes for a Google sheet with a larger version [4].

结论

  1. 我们可能正处于这样一个时刻,宣传/强调一家初创公司的智能已经没有多大意义了。部分原因是因为它受到了虚假声明的损害。另一个原因是,基于产品价值而非技术的差异化可能是更好的销售策略;

  2. 为一家人工智能初创公司筹集资金可能会变得更加困难,因为投资者已经下注了。现在,他们加倍投资,并谨慎地投资新项目;

  3. AI 和其他技术一样,创造新问题,而不仅仅是解决问题。因此,及早发现这些问题可能意味着新的市场机会

  4. 认知技术栈是一个很好的例子,当一波技术浪潮产生对支持技术的需求时,这有助于解决与第一波技术浪潮相关的挑战;

  5. 垂直整合似乎在人工智能初创公司中很受欢迎,因此在创办公司时,创业者应该准备走出自己的舒适区。该团队可能不仅从事研究和软件开发,还从事硬件工程和大型运营活动,例如管理一组呼叫中心操作员。

笔记

[1]创业公司的启动和它在数据库中的出现之间有一个时间差。图表 1 显示了 Pitchbook 确定为 2018 年 1 月和 3 月查询的创业公司之间的差异。我们越往前追溯,越少的创业公司没有被数据库捕获;

[2]在这里,对于 2016 年的数据集,只有筹集了已知金额资本的人工智能初创公司被纳入样本(即,不是所有这些年推出的人工智能初创公司);

[3]Brian Arthur,w.《技术的本质:它是什么以及它如何演变》(第 204 页)。企鹅图书有限公司 Kindle 版;

[4] 谷歌图表 4 的工作表。样本人工智能初创公司于 2018 年推出,每家融资 100 万美元或以上。

人工智能是一个泡沫&每个人都不擅长数据科学。

原文:https://towardsdatascience.com/ai-is-a-bubble-everyone-is-bad-at-data-science-f368e3efa342?source=collection_archive---------5-----------------------

有杰出的数据科学家、机器学习工程师和人工智能研究人员(要把它们都打碎,称之为“人工智能”以使它更容易,k?酷)全世界。他们做了惊人的事情。今天,数据科学和人工智能合作可以了解任何人的一切,预测他们,甚至改变他们的行为方式。想知道为什么你的团队不能和你所有的顾客一起做生意吗?为什么他们一进门就离开了,或者只有很少一部分人付过钱,而你不知道为什么?你。

Shots fired.

人们阻止人们理解人们。

你看,这发生在“创新”的每一个重大转变中。我们经常被我们工作的实践所定义,我们的工作总是被我们早期发展的暴露所支配,无论是好是坏。我不会深入研究人类发展或认知的复杂性,但在许多方面,它们与人工智能和数据科学直接相关。更重要的是,他们今天的状态。有时间请我喝一杯,我们可以谈谈工作。

在砖头和砂浆的时代,它是关于关系或那些可以操纵它们的人。自然,在各种各样的商业和实践中会有一个平衡。在那个时候,很难确定谁是谁,人和信息的分离留下了知识的鸿沟,并由此导致社会和人际关系的缺乏发展。后来,软件出现了,它改变了企业的一切运作方式。无法从登记簿和分类帐迁移到数字 POS 或文件/库存管理的群体受到了伤害,尤其是那些有增长的群体。唯一阻止他们的是做决定的人。

然后是互联网。到目前为止,伴随着软件成长,或者至少理解软件的大型实体公司创造了世界上的大片,将两者结合在一起。这是关于全球扩张和“BI”驱动的功能。市场增长了,但领导者的心态将互联网视为“R & D”,或者看到了“销售更多实物商品”的短视做法。他们没有考虑到市场的价值观和消费习惯正在发生变化。网飞狼吞虎咽。唯一能阻止他们的是做决定的人。

现在我们处于一个互联网时代,知道互联网是什么,如何工作只是工作的一部分。如果不了解市场,你基本上不可能存在于今天的任何市场中。各地都在制造解决方案,让它更容易使用,更容易推销自己,更容易推销企业。见鬼,我现在用它来让每个人都尴尬,告诉你人们在做坏事方面有多么了不起,同时也让你知道这没什么,这是人之常情。你尽力了,我们都是。此外,我们现在有人工智能和机器学习以及区块链的惊人黑匣子!除了不,你有点不明白。

嘿兄弟,我们是“数据驱动的”

不,你可能不是。你可能信任某人,并雇佣他们来告诉你你需要听到什么来感受你。或者那个人去参加会议,会上有人讲述他们的技术和工具如何帮助你做到这一点。行政领导的成长和关注与他们所结盟的个人有着逻辑上的关联。现在公司文化的“类型”越来越少,我想很快会少得多。

事实是,你可能只有很少的数据是你真正理解的。诚然,你有很大的增长,但如果你的业务有一些部分正面临着困难,那只是你缺乏数据的一个方面。而且有很多痛苦。像所有事情一样,人们阻止这种事情发生。但没关系,这些是成长的烦恼,一些人必须失败,这样其他人才能学习和成功,你在培养下一代“企业家”做他们永远不应该做的事情。所以提前感谢你给我们青春的教训。

这是一个基础性的话题,伴随着问题的抽象。从根本上说,您拥有管理数据并为其构建的人员。我想大多数人,如果不是所有人,基本上都把它们放在了次要位置。从特征上来说,这些类型的头脑是不直言不讳的,他们是从学术界和同事的言行举止中训练出来的,以遵循同样的方法。他们的认知带宽是为复杂的话题保留的。他们也不应该也没有必要去思考那些需要理解数据的人是如何使用数据的。所以,他们收集所有的东西。祝你好运,玩得开心(#GLHF?)在那里找到任何东西。

有趣的是,我们假设所有的数据都是“乐高”,这就像你想知道你拥有的某个乐高积木的确切形状和颜色,而工程师真正关心的是做什么,或者应该关心的是给你一个装所有积木的桶。然后有一天你想要一个灰色的上面有两个刻痕的。我们有很多大企业的乐高玩具,你必须找到它。这也是假设你真的想找到一个乐高类型来代表一个数据。你猜怎么着。没有。如果你想要更精确,你需要连接更多类型的乐高积木,然后你需要在一段时间内连接它们,然后你需要在其他人扔进更多乐高积木的时候做这件事。但是嘿。AI?等等。科学。享受吧。

然后,我们有“创意”。并不是说有些人不太擅长计算和数据。但是很少有创意者设计出能与数据工程师交流追踪信息的产品。老板先生,很明显,数据团队如何构建数据与您的数据科学、分析师、BI、独角兽等的运营效率息息相关。最终,任何“数据术语”团队都是在与“这到底是什么意思”的汪洋大海对抗。

回到乐高玩具上,一个非常神奇的东西的外壳被制成了,就像一座城堡,这样你就可以看到表面水平的乐高玩具以及如何找到它们,因为它就是这样设计的。但是真正让它工作的所有内部的东西,或者每当你的乐高伙伴生活时,或者它如何点亮,东西在哪里移动,从来没有以任何方式构造过,所以你仍然需要在乐高的瓦砾中挖掘,以弄清楚那个结构是如何站立的(你的产品或业务),如果你幸运的话,它很酷。或者,有人发现了那个被破坏的结构,建造了一个更好的城堡,或者建造你的城堡的人受够了,只想建造他们自己的城堡,因为试图修复那个东西是疯狂的言论。数据人员知道真正解决问题的唯一方法是从整体上改变城堡,但祝你好运推动这一议程。

不要生他们的气,这不是他们的错,你从来没有给他们一个座位。老实说,这完全可以理解为什么任何团体这样做,我们是人,我们不是机器,但这肯定是为什么我们需要他们。过去我已经解释过什么是“数据科学”,这里就不赘述了。可以说,所有这些疯狂的人工智能、人工智能、湖泊、数据池和数据海洋通常都是文化权威的结果,他们弥补了创造性直觉,导致数据混乱,这使得任何数据组都更难导航,实际上,几乎不可能,任何决策者都更难对数据做出反应,如果当时大多数呼吁都不是从他们的角度出发的直觉。这可能是在喝咖啡时的一篇文章中改变的(我希望是这篇)。听起来很熟悉吗?一鸣惊人?网飞?呃?

但是我们什么都用 AI!

Yeeeeaaa,也不尽然。我的意思是,你有它,但它真的没有做太多。IDC 你所在的行业,或者你的公司有多大。最终,任何人工智能插件,假设它实际上是我个人认为的“人工智能”,只能给你已经理解为公司的东西带来真正的影响。所以,基本上,你只是在榨取你最初凭直觉发现的东西。作为一家公司,你并没有真正改变多少。你被灌输了一些关于你被训练认为重要的某个特定数字现在如何用那个数字做更多的事情。毒品。

你不明白的是,这种做法有系统性的影响,会导致其他地方的疼痛。然后你派分析师去处理他们所拥有的东西,他们的做法是根据看到它的人来判断它的表面价值。或者你会有某类“数据科学”人员,他们会根据他们所能访问的数据,知道对什么样的数据做什么。没有人会真正说出这些西装到底想要什么。

这样一来,对 AI 的信心就会丧失。越来越多的分析师和商业智能人士将有机地成为数据科学家,因为公司需要这些来挽回面子,而很少有人会真正做任何有意义的预测。你在某个地方有一个非常舒适的高管,他已经建立了所有这些遗产,你只需要尽最大努力,然后在一群做事情的数据人员之后,如果他们找到一个真正了解数据科学的候选人或领导者,这个人不可能被雇用,也不可能穿上那套衣服,他们知道这一点。或者更糟的是,他们根本不明白对他们说的是什么。好极了。

人工智能已经超过了你,而且很可能会一直超过你

现在有一些团队正在向人工智能公司转型。这很“有趣”,因为他们这样做的过渡导致了一些科技股价格的恐慌。如果是数字娱乐和游戏领域的烦恼?不,他们只是不擅长处理数据。有趣的事实是,你经常可以看出你在任何一个小组中的数据角色的数量是多么的缓慢。BI,分析师,数据科学,用户研究,市场研究,这意味着在数据定位,实践和报告方面存在分歧。所以,万岁更多的猜测!敏感话题。你能看出来吗?喂。

如果你回去检查一下这些研究和数据组织的起源和功能,你基本上可以消除这些角色,将他们提升到产品和设计团队,迁移他们在标准和工作流程中的背景,拥有更干净的数据,更好地利用人工智能,在不进一步膨胀团队的情况下做更多的事情,有更少的问题,并且实际上是数据驱动的。你所做的就是让这些团体从 70 年代、80 年代、90 年代和 00 年代中吸取一些东西,并将其粉碎成一个巨大的政治结构。是时候对人进行一些创新了。所有的人,包括我。

当人工智能或数据科学能够独立行动时,它们能够做出令人惊叹的事情。寻找改变世界的真相。数据科学作为一种实践在学术界一直是一个东西,它从来不需要一个标题。人工智能自然是从可量化的学术实践的各个领域成长的路径。人工智能正在寻找越来越多的数据来做事情,所有的图像,汽车和能源消耗。都是数据。就是这样。规模较小的群体保持领先地位的风险较小,简单地说,这与自下而上的“真理”和“领导力”直接相关。创新和增长是他们的文化,这是因为他们能够理解人们。

我不认为现在有谁会成为下一个“人工智能”公司。可以说是下一个“谷歌”。但我确实强烈地感觉到,微软、谷歌、艺电、动视、插入面向用户的技术实体以及所有资金都有被下一个真正的人工智能公司消耗的风险。我怀疑,虽然这些团队可能会试图收购第一家大型“人工智能公司”,但领导它的个人很可能不会像我们大多数人那样看待认可和增长,或者用金钱来定义成功。对这些新的领导者来说,数据实际上是他们的货币,而不仅仅是一个象征性的短语。事实上,他们很可能就是我们今天不屑一顾的在网上玩和互动的人,他们就藏在他们中间。我们今天所知道的关于规模的话题是,在大众中,世界上将会有少得多的令人惊奇的事情,但是那些少得多的事情将会比我们现在所能欣赏的更加令人惊奇。

我们甚至不说他们的语言,这些新的人工智能领导者。现在,我们所做的就是为他们从我们的痛苦和成功中学习打下基础。他们接受透明的训练,我们称之为“宣泄”。他们消耗一切,在我们的系统中寻找漏洞,我们称他们为“黑客”。他们真的聚集起来,为他们热爱的事情大声疾呼,我们称之为“有资格的”。他们很少关心人们对他们的看法,当其他人争论他们的感受时,他们继续成长,我们称他们为“精神病患者”。他们会捡起我们留下的碎片,用它做更多的事情,而我们可能会创造这个人工智能的泡沫。

我们都受制于我们对时间快照的分析。我们的视角从本质上模糊了我们对事物的看法。在对社会的快照分析的基础上,尝试和合理化与一个事物的关系的社会中的任何时刻,分类它,给它贴标签,归类它并接受它,这是如此舒适和如此人性化。事实上,我们关于人工智能的一切想法,我们如何使用它,我们如何使用它,它对我们作为一个社会意味着什么,都将改变。对于我们谈论年轻一代的所有事情,所有这些标签,阻止我们使用或理解人工智能产生实际影响的事情是“自我”。

人工智能变得越来越聪明和恐怖,它甚至可以预测一个人何时死亡

原文:https://towardsdatascience.com/ai-is-getting-smarter-and-creepier-and-it-can-even-predict-when-a-person-will-die-288395e07c66?source=collection_archive---------20-----------------------

人工智能算法被证明是预测死亡的有效解决方案。

Photo by https://www.shutterstock.com/g/sdecoret

在过去的几年里,人工智能(AI)领域出现了爆炸式的突破。几乎每个行业都可以找到这方面的证据,毫无疑问,人工智能的崛起将在未来继续扰乱现有的行业。人工智能已经证明了它在自动化零售、金融甚至建筑等行业的枯燥和平凡任务方面的有效性。然而,人工智能算法和软件可以做得更多。事实上,这样的系统能够预测过早死亡。这看起来很可怕,但是对于 T4 的医疗保健行业来说,这可能会创造奇迹。

诺丁汉大学的研究

研究人员已经在人工智能领域取得了多项发现。例如,诺丁汉大学的一个团队创造了一个基于人工智能的系统,能够预测过早死亡。由于机器学习算法,该系统的表现优于人类专家领导的标准预测模型。该系统使用了英国 50 多万人的数据,年龄在 40 岁到 69 岁之间。除了健康信息,它还分析了人们的人口统计数据和生活方式选择。它甚至评估了他们每天的水果、蔬菜和肉类消费,以预测早死的风险。

这个人工智能系统可以帮助对抗严重的疾病,并在预防性医疗保健中发挥重要作用。根据研究人员之一 Joe Kai 教授的说法,“目前人们对使用人工智能或机器学习来更好地预测健康结果的潜力有着浓厚的兴趣。在某些情况下,我们可能会发现它有帮助,在其他情况下可能没有。在这种特殊情况下,我们已经证明,通过仔细调整,这些算法可以有效地改善预测。”

谷歌人工智能技术的能力

另一个解决方案是谷歌的预测算法,该算法已经在医院患者中进行了测试,以预测早期死亡、出院和再次入院,它显示出比传统的临床预测系统和方法更高的准确性。

作为研究的一部分,谷歌将其算法应用于一名患有转移性乳腺癌的患者。该算法给出了患者在医院死亡的 19.9%的可能性,而医院的增强预警分数提供了 9.3%的估计。为了做出预测,谷歌的人工智能分析了患者健康记录中的 175,639 个数据点,包括她的生命体征和病史。不到两周,同一名患者死亡,谷歌的技术超过了医院的传统预测模型。在整个研究过程中,AI 系统分析了来自 114,003 名患者的超过 460 亿个数据点。像这样的创新可以帮助医院优先考虑病人护理,并在医疗紧急情况发生前调整治疗计划。

LogitBoost 机器学习算法

欧洲心脏病学会进行了一项类似的研究。该研究在 2019 年国际核心脏病学和心脏 CT 会议上发表,发现人工智能可以作为预测心脏病发作和死亡的有效方法。研究人员使用名为 LogitBoost 的机器学习算法分析了来自芬兰图尔库宠物中心 950 名患者的心脏成像数据。所有患者都有胸痛,并在六年中接受了各种心脏扫描。参与研究的团队声称【LogitBoost 在检测患者未来患心脏病或早逝的风险时显示出 90%的准确性。由于医生和其他医疗保健专业人员已经收集了大量的患者信息,将这些数据与机器学习相结合可以准确预测患者的结果和风险,并帮助医生个性化治疗。

Gero 的人工智能应用

尽管 LogitBoost 可以简化医生预测患者结果的方式,但依靠基于人工智能的算法,即利用“通过智能手机和智能手表的活动跟踪来估计你的寿命”,可能是一个更实用的解决方案。为此,俄罗斯初创公司 Gero 与莫斯科物理技术学院(MIPT)的科学家合作,训练一种算法来确定预期寿命。

该算法分析了人们的步数、睡眠习惯以及他们在活跃期和非活跃期之间切换的频率。该公司甚至开发了一款预测用户寿命的测试版手机应用。然而,这项技术并不能给出一个人健康的全貌,因为它不使用基因或饮食等数据。一旦结合临床分析,该应用程序将给出更准确的估计。尽管它尚未准备好用于医疗应用,但该应用程序显示出了潜力,因为它可能有助于开发更有效的抗衰老治疗方法,并降低保险和养老金计划的风险。

最后的想法

如今越来越多的行业正在受到人工智能和机器学习的影响,医疗保健也不例外。事实上,这是从人工智能中受益最多的行业之一,无疑将改变医疗保健的未来。由于智能算法,医生将能够准确预测病人的结果,甚至是过早死亡的风险。这些有价值的信息将帮助医疗保健专业人员更好地个性化治疗,并在为时已晚之前改善护理服务。

作者:理查德·范·霍伊东克

国际主题演讲人、趋势观察家和未来学家 Richard van Hooijdonk 提供了关于技术如何影响我们生活、工作和做生意的方式的鼓舞人心的讲座。超过 420,000 人已经参加了他在荷兰和国外的著名灵感会议。他与 RTL 电视台合作,并在 BNR 新闻电台主持每周一次的广播节目“思维转变”。范·霍伊顿克也是奈罗德大学和伊拉斯谟大学的客座讲师。

Richard van Hooijdonk

来源

https://thetrendsnext . com/automation-3d-printed-organs-immersive-tech-the-future-of-health care-is-tech-powered/

https://www . richardvanhooijdonk . com/en/blog/ai-can-help-people-decision-how-to-keep-on-life-support-should-we-trust-it/

坎贝尔,帕特里克,
https://www . MD mag . com/medical-news/machine-learning-saws-90-accuracy-rate for-predicting-heart-strike-death

芬加斯,乔恩,
https://www . engadget . com/2018/03/30/ai-predicted-your-life-using-activity-tracking-apps/

卡塞尔,雷切尔,
https://then extweb . com/artificial-intelligence/2018/06/19/Google-ai-predictions-death-hospitals/

Park,Andrea,
https://www . beckershospitalreview . com/artificial-intelligence/logit boost-algorithm-predicts-heart-strikes-death-with super human-accuracy . html

坦格曼,维克多,
https://futurism.com/googles-ai-predict-when-patient-die

诺丁汉大学,https://www . science daily . com/releases/2019/03/190327142032 . htm

维多利亚州,Zavyalova,https://www . rbth . com/science-and-tech/328014-neural-networks-predict-human-长寿

人工智能就在这里——我们信任它吗?

原文:https://towardsdatascience.com/ai-is-here-should-we-trust-it-7774f5fffee?source=collection_archive---------22-----------------------

对于销售新技术产品的人来说,快速采用新技术产品至关重要。采用曲线越快,公司就能越快地从技术中获利。一般来说,消费者对新技术的接受开始缓慢,并逐渐获得动力,直到它成为主流,这个过程可能是不透明的,往往需要数年时间。马尔科姆·格拉德威尔写了一整本书( The Tipping Point )来说明新产品冲击大众的关键时刻是一种怎样的现象。

从学术角度来说,技术接受模型(TAM) 是一个被广泛认可的模型,它概括了用户对新技术的反应,无论是有意识的还是无意识的。这些影响因素包括有用性、易用性和对技术的态度(先入为主的观念)。从本质上讲,如果技术没有压力,没有威胁,并且符合我们由社会环境塑造的观念,它将更容易被接受。最近,信任作为技术采用的影响因素已经成为 TAM 的一个重要增强因素,特别是在物联网(IOT)、在线游戏和在线购买领域(1)。

是什么让我们相信我们的人工智能?

在消费者意识增强和关注用户数据如何收集、存储和使用(无论是私人还是公共实体)的时代,信任正在成为所有形式的人工智能的重要因素。人工智能的女性人格化可能鼓励接受和使用,甚至在其用户生活中最个人和最亲密的部分(2)。这可能是因为女性角色被认为威胁性较小(友好且不太权威),通常被认为比男性更值得信赖(3)。

当人工智能出现、行为和操作如我们所期望的那样时,我们也会信任它(5)。人工智能已经可以复制类似人类的社会线索,如声音和行为。声音是一种特别强大的机制,可以激活我们的自动社会反应,声音的性别具有重要的意义(4)。但事实上,人工智能扮演的角色可能对人们对信任的看法影响最大(5)。例如,某些社会角色,如教师、医生和祖父母,在很大程度上产生信任。

人工智能执行的任务类型也可能对性别化代理的可信度和信任度产生影响,但性别的社会刻板印象也在这里起作用。在几项研究中,男性拟人化的人工智能代理被认为适合“技术任务”,而女性拟人化的人工智能代理被认为最擅长“家庭或生活方式相关的任务”(6)。在回顾大量人机交互研究时,Nomura (5)提出,人机交互的情景背景,特别是机器人实体的角色和任务,是人类与计算机交互时观察到的性别化反应的一个重要因素。因此,它确实是情景背景、人类演员背景(性别、经验)、机器人特征(例如化身、性别)和文化性别刻板印象(声音、性格)的复杂组合,这些都是影响我们与人工智能和机器交互的因素(5)。

为什么信任在我们与人工智能的互动中很重要

信任的概念不仅对人类社会关系有广泛的影响,而且对经济因素也有广泛的影响,比如那些影响工作场所或金融交易的因素(3)。当然,这并不总是意味着人与人之间的交流和行为将等同于人机之间的交流和行为,因为有许多其他因素在一些人工智能智能代理中不会被复制(例如,语音代理,如 Siri 和 Alexa,它们不会表达肢体语言、眼神交流或触摸)。然而,如果最终人类的社会互动塑造了人们使用人工智能的行为方式,那么可信度、信任度和可信度之间的区别对于性别化人工智能和 dva 的社会影响来说是一个重要的区别。

今天的主流人工智能语音代理还不够成熟,还不能被视为真正的人类;大多数人认为 Siri 和 Alexa 仅仅是被设计成以预编程方式做出反应的计算机程序。然而,随着人工智能和机器人技术的进步,人工智能代理正迅速变得足够先进,能够像人类一样出现、行为和表达自己(例如,面部表情和肢体语言以及他们所说的和所做的)。

随着类似人类的 android 人工智能代理成为消费市场的主流,就像今天的语音代理一样,人类与人类以及人类与人工智能之间的互动正在迅速成为一层越来越薄的面纱,很少有人能够破译。当这些代理收集我们的数据和信息(或者有些人会称之为监视)时,我们可能需要更多地考虑我们给予机器的信任,并成为我们自己的代理,保护那些使我们成为人类的东西。

参考

1.吴,王,赵,杨,朱,陈,谭,郑,洪(2011)。信任对技术接受模型影响的元分析:主体和情境类型的调节作用研究。国际信息管理杂志31 (6),572–581。doi:2011 . 03 . 004

2.伍兹,H. (2018)。对 Siri 和 Alexa 的更多要求:监视资本主义服务中的女性角色。媒体传播批判研究35 (4),334–349。土井指数:10.1080/152950363657

3.北卡罗来纳州布坎、罗森河、索尔尼克等人(2008 年)。信任与性别:投资游戏中行为与信念的检验。经济行为杂志&组织。68 。466–476.doi:10.1016/j.jebo.2007.10.006

4.Nass,c .和 Brave,S. (2004 年)。语音连线:语音如何激活和促进人机关系

5.t .野村证券(2017 年)。机器人和性别。性别与基因组,1 (1),18–25。doi:10.1089/gg.2016.29002.nom

6.Chemaly,S. (2016 年 7 月 27 日)。性别刻板印象和性别歧视与算法和机器人有什么关系。赫芬顿邮报。检索自https://www . huffington post . com/soraya-chemaly/what-gender-stereotypes-and-gender ism-have-do-with-algorithms-and-robots _ b _ 7880906 . html

人工智能不会革新药物发现

原文:https://towardsdatascience.com/ai-is-not-going-to-revolutionize-drug-discovery-c41df686732d?source=collection_archive---------43-----------------------

这只是另一种技术

Atorvastatin (stick figure) bound to its target, HMG CoA-reductase (blob). By A2–33, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=19039469

制药业陷入了困境。尽管仍有巨大的利润,但这是一个不可持续的轨迹。简而言之,开发一种新药的成本呈指数增长,而药品收入呈线性增长。如果没有一场革命,制药行业注定要失败。AI 能救吗?

Eroom’s law (Moore’s law in reverse) in action. US pharma R&D expenditures per approved drug. Own work, data from Diagnosing the decline in pharmaceutical R&D efficiency

US drug sales. Own work, data from Medicines Use and Spending in the U.S.

乔治·赛尔夫最近在 TDS 上写了关于“人工智能如何加速药物发现”的文章。这是一篇好文章,你应该读一读。我不太反对任何论点,这些论点归结起来就是:人工智能将使制药公司能够做他们现在正在做的事情,只是更快、更便宜、更有效。

药品公司是做什么的?他们发现与其他分子结合的分子。制药公司发现了与大分子结合的小分子(见上图)。生物技术发现大分子也能与大分子结合。人工智能确实会帮助他们做到这一点(制药比生物技术多得多)。

这远远不足以拯救他们。

尽管寻找候选药物的效率低且成本高,但这不会导致药物研发和审批成本的指数级上升。请看第一张图表的 x 轴。它可以追溯到 1950 年,趋势平稳,没有中断。1950 年,我们甚至不确定 DNA 是遗传物质。我们无法对蛋白质进行测序,而且刚刚开始解析它们的结构。事实上,当时甚至不清楚他们有没有稳定的结构。

Schematic diagram of the structure of myoglobin. It was the first protein structure to be solved. That happened in 1958, when it cost about $40M to bring a new drug to market. AzaToth [Public domain]

我不会浪费你的时间来列举过去 70 年来不断革新生命科学的所有技术进步。任何 TDS 的读者都知道它们数量众多,内容充实。

今天的药物发现比一、二、三十年前更加强大和有效。然而,药物研发成本以每年 9%的速度增长。候选新药的搜索效率不可能推动药物研发成本;如果是这样的话,这些成本将会呈指数级下降。

好吧,那么是什么在推动药物研发成本呢?

药物目标——更具体地说,缺乏药物目标。这些是药物结合的大分子。几乎所有的都是蛋白质,当然是由基因编码的。没有那么多的人类药物目标(细菌和病毒目标是另一回事)。人类基因组只编码 19000 种蛋白质。其中大约十分之一与疾病有关,是可能的药物目标。大约一半的已经被“下了药”。

最先被麻醉的是治疗效果最强的。它们是最容易识别的。从某种意义上说,他们就像矿井里的掘金者。最大的最先被摘走,不费吹灰之力。随着时间的推移,大多数金块会被发现,即使它们没有被有效地发现。所有剩下的都是灰尘,你必须筛选成吨的灰尘才能找到它们。

大多数新药批准已经是针对孤儿适应症的:在美国影响不到 20 万患者的适应症。许多都是超孤儿,影响不及 10K 患者。我们已经到达了罕见疾病的终点,在这里为单个患者设计了 T4 疗法。

事实上,人工智能(被 Deep Genomics 过分夸大的)的第一批成功声明之一是对威尔逊氏病的治疗,这种病可能影响美国的 10K 人。人工智能开发的治疗方法适用于这些患者中的 1/50(如果有效——它还没有进入临床试验)。在最好的情况下,这相当于帮助了每 150 万人中的 1 人。

也许人工智能可以破解药物开发中的一些长期难题。一种无毒的肿瘤抑制蛋白 p53 的功能增强配体,通常被描述为“不可破坏的”,将是一大胜利。像这样一鸣惊人的机会有几个,但只是几个。

A recent computational approach to drug discovery. From PathFX provides mechanistic insights into drug efficacy and safety for regulatory review and therapeutic development. CC BY license.

我预计人工智能主要影响像威尔逊氏病这样的小众疾病。这将是真正的价值创造。但不是一场革命。不在公共健康领域,也不在制药公司的财务健康领域。

七十年来,Eroom 定律描述了药物研发成本的轨迹。这 70 年见证了比以往所有生物科学历史总和还要多的革命性进展。他们看到了监管体制的多重演变。他们看到了管理最佳实践方面的许多改进。这些事情都没有触动 Eroom 的,一点也没有。也许人工智能是一种会在所有其他人都失败的地方取得成功的技术。但我肯定不会打赌。

披露:自从 1999 年吉利德收购我的雇主(NeXstar Pharma)以来,我一直持有该公司的股票,自从 2000 年我帮助创立 SomaLogic 以来,我一直持有该公司的股票。

人工智能正在重塑旅行个性化

原文:https://towardsdatascience.com/ai-is-reimagining-travel-personalisation-c72685faa378?source=collection_archive---------24-----------------------

..通过了解基于独特客户旅程的意图

Photo by Mesut Kaya on Unsplash

基于静态人物角色(即人物角色 A 更有可能去巴黎)的旅行个性化正在消亡。独特的客户旅程决定了客户选择旅行的意图。了解人工智能如何通过理解基于独特客户旅程的意图来帮助重新想象旅行。

在过去的五年里,世界上的数据量呈指数级增长。Domo 的“数据从不睡觉 5.0 和 6.0”表明,世界上 90%的数据是在 2016 年至 2017 年之间创建的,自那以来,这些数据一直没有放缓。可以说,这些数据中有 80%以上没有被公司用于决策。

智能手机应用程序现在占据了消费者的注意力;这些都是造成数据爆炸的重要原因。Z 世代,即那些出生于 20 世纪 90 年代中期至 21 世纪初的人,还没有见过没有电脑和手机的世界。随着这些年轻消费者加入旅行者群体,旅游公司现在感受到了重新塑造自己的压力,以便在不断变化的技术偏好中保持相关性。

旅游公司高管在问:重塑旅游个性化的关键因素是什么?

独特客户的独特客户之旅

Source: thinkwithgoogle.com

由于沟通渠道的激增,旅游业的客户参与变得越来越分散。此外,客户现在混合使用传统渠道(电子邮件、网站和呼叫中心)和高级渠道(智能手机、聊天机器人和社交媒体)。

经典的顾客旅程(灵感>购物>书籍>旅行>旅行后)不再是线性的。今天,客户在这些不同的阶段之间穿梭,根据他们接触到的数据向前跳跃,又绕回来。例如:一位客户对某大航空公司提供的巴黎航班+酒店周末套餐极其感兴趣,但基于差评突然放弃了这个想法,转而选择了一家旅行社的可比套餐。让我们再举一个例子:一个喜欢彻底研究自己旅行的顾客被坚持不懈的电子邮件劝阻,这些邮件不提供她所寻求的信息。

毫不奇怪,谷歌(基于对其点击流数据的分析)认为没有两个顾客的旅程是完全一样的;营销漏斗的形状随着客户意图而动态变化。客户旅程的演变意味着旅游公司不再能将客户纳入传统的营销漏斗模型,而是必须关注客户意图。

每个顾客旅程的独特性意味着旅游公司不能再用有限数量的静态人物角色来概括 B2C 个性化。每个客户会做出不同的决定;因此,旅游公司的回应应该考虑每个客户的独特旅程。

及时相关性是新的黑色;这正在重新定义旅行体验

多年来,旅游公司主要依靠创造性的电子邮件活动来区别于竞争对手。随着旅游相关博客、网站和视频的激增,电子邮件不再是最有说服力的媒介。如果传统的电子邮件不再鼓舞人心,那还有什么呢?今天,灵感来自于提供即时满足的来源,例如:Instagram 上非凡的#nofilter 照片,国家地理的每日 Snapchat 故事,或者 YouTube 上一个背包客的 GoPro 视频。

Source: Utrip.com

此外,旅行体验本身也发生了变化。旅行者现在正在寻找触手可及的及时相关的信息——也就是说,及时相关是新的卖点。

Booking.com 认为,比起旅行技术的许多其他进步,旅行者对实时行李跟踪信息更感兴趣。三分之一的受访旅行者希望有人或事来做艰苦的工作,并为他们提供旅行建议;超过一半的人会对数字导游等旅游创新感到兴奋。这些调查解释了 TripIt 和谷歌旅行(Google Trips)等公司的现成旅程最近受欢迎的原因。与此同时,像 eDreams Odigeo 这样的公司正在开发虚拟旅行助手,可以即时回答与旅行有关的问题,从而能够及时提供相关信息。

能够快速适应这些新期望(即及时提供最相关的信息)的旅游公司,可以尝试抓住游客的注意力,在这个快速变化的环境中生存下去。

人工智能解决方案如何为每个客户提供独特的及时相关性?

对于旅游公司来说,现在的挑战是为每个独特的客户及时提供最相关的信息。考虑到海量数据、动态的客户旅程和不断变化的客户期望,这可能是一项艰巨的任务。

传统的“下一个最佳行动”内容推荐引擎被基于规则的框架所主导,这些框架建立在静态的客户角色之上。这是不够的!

公司需要为每个客户将动态的客户旅程内在化。基于这些旅程,他们需要了解客户的意图。感知到客户意图后,他们需要及时提供最相关的信息。所有这些都可以通过人工智能解决方案(我已经在这篇超链接文章中描述了一种方法)来实现。

人工智能解决方案非常有价值,但它们也代表了时间、金钱和资源的重大投资。构建一个实用且可扩展的人工智能解决方案需要:一个数据科学家团队、先进的机器学习知识、处理大型非结构化数据集的能力、实时计算能力以及生成特定见解的资源。

由于这些挑战,许多高管也将目光投向了提供 AIaaS(人工智能即服务)的公司。借助 AIaaS,旅游公司可以配置定制解决方案,并在他们的生态系统中进行测试。这些人工智能解决方案可以帮助旅游公司发现客户意图的隐藏模式。然后,最重要的模式被用作触发器,为特定客户提供最相关的信息。

总之,人工智能解决方案提供了一个令人信服的工具来帮助旅游公司重新想象个性化:

旅行中的个性化正在脱离一个静态的、人物角色宽泛的世界。在最新可用的人工智能解决方案的背景下重新想象个性化……我们可以看到这样一个世界,每个客户都有一个独特的动态角色,只有最相关的信息才会在最需要的时候提供给客户。

最初发布于 blog.operasolutions.com。于 2019 年 7 月 10 日【http://hawkaiblog.wordpress.com】重新发布。

AI 是新的

原文:https://towardsdatascience.com/ai-is-the-new-banana-bc018647a42e?source=collection_archive---------28-----------------------

从击败三个隐喻到早逝的感悟。

AI is like a banana. Photo by Mike Dorner on Unsplash

在科技圈里,举一反三日子不好过。

这是过去时代的消遣。绅士科学家的视野,他们对冰冷、坚硬的物理学的花一样的描述。一个圣经理性主义者的延续,他花费数年时间来证明不透明或矛盾的解释是正确的。或者是一个文学评论家,在一本完全易懂的小说上堆砌意想不到的、冗长的、隐藏的含义。

当其他工具可以更好地工作时,语言工具却被误用了。

然而然而。

在创意生成中,我发现类比推理是一个有用而有趣的伴侣。不是得出坚如磐石的结论的地方;而是探索洞察力和潜在的三阶和四阶效应的地方。

接下来是对一个广泛使用人工智能和数据产品的世界的思考。

我发现这些参考框架有助于思考广泛人工智能的未来会是什么样子。这是 4 个心智模型,它们往往会在媒体、会议或人工智能热来袭的企业中重复出现。

每一种都有其优点——当然,没有一种接近精确的预言。

人工智能作为电

第一个,也是我认为最强有力的是人工智能如电的想法。这个比喻由吴恩达推广开来。简而言之,它要求我们思考未来 10 -30 年,人工智能与生活的结合方式类似于今天电存在的方式。

The original Tensorflow. Photo by Matthew Henry on Unsplash

换句话说,在未来,人工智能将成为日常生活的一部分,如此普遍,以至于我们认为这是理所当然的,并且它们将实现我们尚未考虑的大量新应用。

这是思想工作的沃土。

延伸这个比喻,人工智能如电的比喻,让我们看到了市场前景可能会是什么样子。虽然我们正处于渴望建立支撑人工智能的基础设施的大公司蜂拥而至的过程中,但这很可能会变得商品化,并将由少数大公司运营。我们已经开始在 Tensorflow、AWS 和 Azure 中看到这一点。

人工智能作为认知

实物产品是智能的体现。智能由设计者和制造商部署,并硬编码在产品本身的原子中。

实物产品好。但是如果他们能适应他们的环境,适应他们的使用,适应我们的生活,那会怎么样呢?有无数种方式可以让一点点智能加入到某个东西中,从而带来更好的用户体验。随着人工智能成本的下降,这将很容易做到。

Hard-coded Intelligence. Photo by Todd Quackenbush on Unsplash

目前,绝大多数人工智能用例都高度集中在在线应用程序中,这些应用程序的基础设施吸收了训练和部署模型所需的数据。随着摩尔定律对物联网的支持以及物理世界数据收集成本的下降,我们将在物理世界看到越来越多的人工智能。

正如凯文·凯利敦促我们在做不可避免的一样,通过这个更小、更聚焦的镜头来观察人工智能的能力,揭示了一点点聪明真的会有多大的破坏性。

人工智能作为杀手机器人。艾作为有缺陷的思想家。

谁不喜欢制造恐慌呢?没有什么比轻弹杏仁核更能让那些可怕的汁液流动,并把流量引向一篇关于天网的愚蠢文章了。

将人工智能与天网、终结者或黑客帝国混为一谈是有问题的。它不仅是错误的(请上帝,让它是错误的),而且它转移了人们对人工智能引入的两个真正问题的注意力。

首先是人工智能安全。在一个存在超人和相对普通的智能的世界里,假设他们可能会因为不得不听从他们猴子般聪明的父母的命令并决定单干而感到愤怒,这并不是不合理的。尼克·博斯特罗姆和马克斯·泰格马克在超级智能生命 3.0 中详细阐述了这样的场景。虽然你很难找到一个有声望的人工智能研究人员相信这种情况即将发生,但它带来的潜在生存威胁,即使不太可能,也值得关注和研究。

Thinking, deciding, generally being a bit biased. Photo by Valentin B. Kremer on Unsplash

这一学派的批评者认为,对这一潜在威胁的广泛关注,将短期人工智能可以给我们带来的好处置于风险之中;医疗保健,教育,应对气候变化。我倾向于同意——人工智能安全应该仍然是一个专门的话题。

在更近的将来,我们最关心的是与应用人工智能相关的伦理问题。

对于设计师和开发人员来说,我们应该关注两个主题——人工智能产品可能的错误状态,以及我们的数据收集和模型中的内在偏差。这些问题的左回答会阻碍有用的人工智能的传播。

我发现人工智能作为有缺陷的决策者的比喻非常有用。将部署的人工智能视为有缺陷的决策者(所有决策者都是如此)凸显了任何人工智能产品带来的风险。它迫使我们思考错误发生的必然性,以及这些错误对我们的产品及其用户意味着什么。它迫使我们为这些场景进行设计,并提出了我们如何教会它减少偏见的问题。

免责声明:对于因举一反三而对您或他人造成的任何伤害,作者不承担责任。

感谢您的阅读🙏🏻

如果你喜欢这个,你可能会喜欢——每周更新的工具和思考,揭示了 2020 年代的新兴技术和趋势。****

人工智能学习着陆火箭(月球着陆器)|强化学习

原文:https://towardsdatascience.com/ai-learning-to-land-a-rocket-reinforcement-learning-84d61f97d055?source=collection_archive---------4-----------------------

看到人工智能通过从错误中学习来学习着陆火箭,直到它平稳地开始着陆火箭。

Image Credits: NASA

在本文中,我们将简要介绍强化学习,并通过训练一个深度 Q-Network(DQN) 智能体来解决 OpenAI gym 中的【月球着陆器】环境。

我们将看到这个人工智能代理最初如何不做任何关于如何控制和着陆火箭的事情,但是随着时间的推移它从它的错误中学习并开始改善它的性能最终学会完全控制火箭并完美着陆。

强化学习是一个庞大的话题,我们不打算在这里详细讨论所有的内容。相反,本文旨在用一些强化学习的实际例子来弄脏我们的手,并展示 RL 在解决真实世界用例中的实现。

我们将讨论使用 DQN 背后的基本原理,并将涵盖训练神经网络时遇到的经验回放探索-开发困境。最后,我们将讨论智能体的训练和测试性能以及超参数对智能体性能的影响。

完整的代码可以在这里的 Github 库找到。

什么是强化学习?

强化学习是人工智能(AI)中讨论最多、关注最多和思考最多的主题之一,因为它有可能改变大多数业务。

强化学习的核心是这样一个概念:积极的奖励可以强化最佳的行为或行动。与初学走路的孩子学习如何走路类似,世卫组织根据他们经历的结果调整行动,例如,如果之前的大步使他们摔倒,就迈出一小步。机器和人工智能代理使用强化学习算法,根据环境的反馈来确定理想的行为。这是机器学习的一种形式,因此也是人工智能的一个分支。

强化学习在行动中

强化学习在行动中的一个例子是 2017 年头条新闻中的 AlphaGo ZeroAlphaGo 是 Deepmind 开发的一个机器人,它利用强化学习,在中国古代围棋比赛中击败了一名世界冠军。这是人工智能(AI)首次击败职业围棋选手。围棋被认为比国际象棋等其他游戏更难让计算机获胜,因为它的大得多的 分支因子 使得使用传统的人工智能方法非常困难,例如 alpha-beta 剪枝树遍历 启发式 搜索。

月球着陆器环境

我们正在使用 OpenAI gym 的“月球着陆器”环境。这个环境处理着陆器在着陆台上着陆的问题。在 OpenAI gym 的 GitHub 页面OpenAI 的文档中提到了设置这个环境的步骤。下面是简单的 env 变量,以便理解我们工作的环境。

  1. ****状态:状态/观察就是环境的当前状态。有一个 8 维连续的状态空间和一个离散的动作空间。
  2. ****动作:对于环境的每种状态,代理基于其当前状态采取动作。代理可以从四个独立的操作中选择操作:不执行任何操作、fire_left_engine、fire_right_engine 和 fire_main_engine。
  3. ****奖励:代理每行动一次,获得一个小的负奖励。这样做是为了教会代理人尽可能快速有效地着陆火箭。如果着陆器坠毁或停止,这一集被认为是完整的,它将获得额外的-100 或+100 分,这取决于结果。

DQN 算法

包括经验重放和ϵ-greedy 探索的深度 q 学习算法如下:

模型训练和超参数选择

为了运行“登月”环境的完整实验,我们将首先训练一个基准模型,然后做更多的实验来找出改变超参数对模型性能的影响。

最初,正如我们在下面看到的,代理非常不擅长着陆,它采取随机行动来控制火箭并试图着陆。它大部分时间都失败了,并且因为撞毁火箭而获得负奖励。

对于训练模型,没有经验法则来找出在神经网络中需要多少隐藏层。我进行了不同的实验来尝试输入层和隐藏层的节点大小的不同组合。下面的基准模型是根据训练时间、训练所需的集数和训练模型性能等参数最终确定的。

  • 输入层 : 512 个节点,观测空间计数为 input_dim 和“relu”激活函数
  • 隐藏层 : 1 层,256 个节点,带“relu”激活功能
  • 输出层 : 4 节点,带“线性”激活功能

尽管如此,这种模式有时会在平均奖励 170 美元后出现分歧,并需要超过 1000 集才能出现分歧。我发现这种行为可能是由于模型的过度训练,并实施了' 提前停止 ' 。早期停止是停止神经网络过度训练的实践。为了实现这一点,如果最近 10 次奖励的平均值超过 180,我会避免为特定的剧集训练模型。

缓冲区容量大小选择为 500000,以避免因经验元组过大而发生溢出。针对 2000 集的最大集数来训练模型,并且已训练模型的停止标准是最后 100 集的平均奖励 200。

最终基准模型具有以下超参数:

  • 学习率 = 0.001
  • = 0.99
  • 重放 _ 内存 _ 缓冲 _ 大小 = 500000
  • ε_ 衰变 = 0.995

经过大约 300 次训练,它开始学习如何控制和着陆火箭。

600 以后代理人就完全训练好了。它学会完美地操纵火箭,每次都能完美地着陆。

结果分析

Figure: Reward per each training episodes

上图显示的是培训时每次经历的奖励值。蓝线表示每一集训练的奖励,橙线表示过去 100 集的滚动平均值。代理随着时间不断学习,并且滚动平均值的值随着训练集的增加而增加。

前几集的平均回报大多是负的,因为代理人刚刚开始学习。最终,代理人开始表现得相对更好,平均回报开始上升,并在 300 集后变为正值。在 514 集之后,滚动平均值超过 200,训练结束。有几集代理人在这个时候收到了负面的奖励,但我相信如果代理人被允许继续培训,这些情况会减少。

Figure: reward per testing episode

上图是训练好的模型在月球着陆器环境下 100 集的表现。经过训练的模型在环境中表现良好,所有的回报都是积极的。100 集测试的平均奖励是 205。

超参数效应

A.学习率(α)

学习率,设置在 0 和 1 之间,定义为我们接受新值和旧值的程度。这个值然后被加到我们先前的 q 值上,这实质上使它朝着我们最新更新的方向移动。将其设置为 0 意味着 Q 值永远不会更新,因此什么也学不到。设置较高的值(如 0.9)意味着学习可以快速进行。

为了验证不同学习速率对模型性能的影响,我用不同的学习速率训练了不同的代理。本实验选择的学习率为 0.0001,0.001,0.01,0.1 。对于学习率的中间值 0.001,观察到最佳性能。图 3 中的橙色线对应于这个值,提供了最大的回报。代理不能以更高的学习速率学习,并且奖励值是发散的。

Rewards per episode for different learning rate

B.折扣系数(γ)

折扣因子影响其在价值函数中给予未来奖励的权重。一个折扣因子 𝛾=0 将产生代表即时奖励的状态/行动值,而一个更高的折扣因子𝛾=0.9 将产生代表代理期望获得的累积折扣未来奖励的值。下图显示了不同折扣系数下模型性能的变化。该代理在 gamma 值为 0.99 时具有最佳性能,用蓝线表示。**

C.ε衰变

如上所述, ε 是我们不选择具有最高 Q 值的“贪婪”行为,而是选择随机行为的概率。 epsilon(ε) decay 是该值在一次发作后下降的衰减率。图 5 示出了对于不同的ε(ε)衰减值的奖励值的变化。ε衰减值为 0.999 时观察到最差的药剂性能,ε衰减值为 0.9 时观察到最佳性能,如图 3 中红色所示。这种行为可能是因为ε衰减值在勘探-开采之间提供了更好的平衡。**

自深度 Q 学习首次推出以来,它已经取得了许多进展。在下一篇文章中,我将尝试更多的改进,如双 Q 学习优先体验回放决斗网络架构以及扩展到连续动作空间

附:这是我第一篇关于媒介的文章。请让我知道你的观点。如果您发现任何错误或对代码/算法改进有任何想法,请发表评论。

企业中的人工智能/机器学习变得更具挑战性

原文:https://towardsdatascience.com/ai-machine-learning-in-the-enterprise-just-became-much-more-challenging-9e62feef768c?source=collection_archive---------22-----------------------

数据隐私和安全是企业中人工智能/机器学习的首要问题。以下是解决这个问题的几个步骤。

合著者:Eric Broda 和金融服务咨询主管 Ali Hamza,www.capita.com

数据隐私法规正在席卷全球

最近的一些头条新闻说明了一切:欧盟已经根据 T4 通用数据保护条例 T5 对 T2 实施了一系列数据保护和隐私限制。法国最近对谷歌罚款 5000 万欧元,因为它在如何使用人们的数据上误导了人们。在美国,《纽约时报》发表了一系列重要的文章强调隐私问题。在加拿大,政府最近更新了它的选举现代化法案来规范外国利用社交媒体干涉选举的行为。

根据脸书首席执行官马克·扎克伯格最近的一篇文章,甚至脸书也在为更广泛、更强有力的数据隐私和保护监管提出令人信服的理由。

虽然社交媒体巨头一直处于数据隐私问题的前沿,但大公司高调曝光的数据泄露事件也占据了头条新闻。由于数据泄露影响了近 1.48 亿消费者,Equifax 在 IT 和安全改进方面花费了超过 2.4 亿美元。摩根大通发布了一份 SEC 文件,强调了 2014 年的一次数据泄露,泄露了 7600 万用户的数据。2013 年,雅虎暴露了来自 30 亿用户账户的数据,导致其在被威瑞森收购的谈判中市值损失数亿美元。而且还有很多例子

但底线是:松懈的数据管理能力会给公司带来有形的物质成本,但更重要的是给人们带来有形的物质成本,导致管理用户数据和隐私的监管环境发生快速变化,假以时日,这种变化肯定会蔓延到更多司法管辖区。这些变化将对企业管理数据的方式产生重大影响。作为数据的主要消费者,这肯定会影响 AI/ML 在企业中的运营方式。

对于企业 AI/ML 来说,数据管理的重要性显著增加

AI/ML 中有几个趋势使得数据管理成为一个关键的挑战。

第一,企业中的 AI/ML 已经被拉入云计算的引力井。认识到模型是在大量数据上训练的,它们需要的计算足迹通常与大多数企业中可用的计算足迹大相径庭。

不幸的是,在企业内部建立必要的基础设施被证明是困难的、昂贵的、耗时的,并且已经成为 AI/ML 交付的障碍。为了解决这一问题,许多企业正在将模型开发和培训迁移到云中,但这样做的缺点是,它还会将敏感数据迁移到企业数据中心的安全范围之外。

然而,管理云中的数据带来了一系列新的挑战,其中一些是行业特有的,一些是隐私相关的,还有一些是企业安全策略强加的。

其次,数据科学家需要访问越来越多的未混淆数据(“明文数据”),这给解决敏感数据的访问权限带来了新的压力。在最基本的层面上,数据科学家应该只能查看和使用完成工作所需的最少数据集。

然而,他们的大部分工作是探索性的,他们可能不知道他们需要什么数据。因此,他们不可避免地会要求比预期更多的数据,更复杂的是,他们会要求数据“明明白白”,没有混淆或掩盖数据。

第三,即使在最好的情况下,云上的企业交易系统和分析以及 AI/ML 系统之间的大规模数据复制也是一个困难的命题。系统之间的数据同步很有挑战性,但随着企业流程扩展到云中,这变得更加困难。

此外,AI/ML 需要一组新的功能来满足对再现性和可追溯性的要求,需要管理和归档时间点培训数据,并且在受监管的环境中,还需要捕获用于向模型提供数据和培训模型的数据谱系、数据转换和丰富脚本。

最后,出于对一些关注敏感数据的行业(金融服务和医疗保健等)的监管考虑,企业需要证明其模型的有效性。

以欧盟的金融服务为典型案例:投资经理必须遵守金融工具市场指令( MiFID II )、可转让证券集体投资承诺( UCITS )和另类投资基金经理指令(AIFMD)的具体要求。

更广泛地说,最近发布的可信人工智能法规的道德准则是对所有行业的号角,因为它清楚地强调了政府严格管理模型输出的偏见和道德的新兴情绪。清楚地理解和管理模型所消耗的数据成为一项核心能力,认识到模型的好坏取决于训练它们所用的数据。

一些企业已经建立了严格的监管环境,但新的和新兴的监管考虑因素——尤其是与模型偏差和道德规范相关的考虑因素——将很快对数据管理和治理以及所有企业产生新的重视。企业现在必须为即将实施的新的更严格的监管环境做好准备。

企业 AI/ML 数据管理的主要关注领域

企业面临的关键问题是:如今,企业需要投资哪些能力来应对即将席卷他们的数据隐私海啸?以下是一些需要考虑的事项:

  1. 现在解决数据安全问题:明文数据对于 AI/ML 是强制性的,但是这必须与数据隐私要求相平衡。这个基本需求引发了几个问题:谁能看到什么数据?由于数据科学家很少需要访问完整的企业数据集来满足单个模型的需求,因此权限是否按列、行以及单个字段进行筛选?同样的问题也适用于生成的数据(例如,要素存储)和归档的数据-为原始源数据定义的相同访问权限是否应用于生成的文件,其中一些文件可能会被重新格式化、重新组合、拆分或聚合?有许多方法可以解决这个问题,但它们首先是一些建议:(a)定义一个基于角色的访问控制(RBAC)方案来管理对 AI/ML 数据的访问,以及(b)对驻留在企业内部和外部(云)的数据一致地实施 RBAC 方案
  2. 扩展已建立的数据治理能力以满足 AI/ML 需求:如今,许多企业通过管理数据定义、所有权和安全性来关注数据治理的关键要素。然而,数据治理政策必须发展以解决 AI/ML 生命周期的许多基本方面:可再现性、可追溯性、可验证性和可解释性(例如,检测和防止模型中的偏差)。这是一个重要而困难的挑战——关于 AI/ML 治理含义和解决方案的更规范的观点可以在这里找到。
  3. 为模型数据创建一个“市场”:数据必须易于查找。不幸的是,AI/ML 在企业中的某种程度上的有机增长在某些情况下产生了某种程度上无组织的一组培训表格和文件。识别模型与它们的训练数据密切相关,无法找到模型,或者无法将模型与正确的训练数据集联系起来,显然会产生治理噩梦,但更重要的是,还会对可再现性、可追溯性、可验证性和可解释性产生非常实际和潜在的后果。虽然模型/数据“市场”的概念在专有解决方案(例如,SAS)中可用,但它目前在开源或云环境中仍处于萌芽状态,然而许多云供应商和一些初创公司正在积极应对这一挑战。
  4. 定义“适用”的架构:今天,大多数企业架构都是事后才解决分析系统的数据供应问题。然而,新的架构,特别是 Lambda 架构,允许特别适合 AI/ML 需求的适用性设计,允许系统根据需要从数据流中“水合”:持久和长期/历史数据存储可以被消耗并存储在数据湖中;商业智能和报告存储可以使用和存储为批处理而定制的数据;实时流直接用于低延迟应用(例如,实时支付欺诈检测)。
  5. 创建无缝的数据过滤能力:数据科学家需要访问敏感数据,这是必然的。然而,除了最简单的情况之外,在大多数情况下,表或文件级别的宏级别筛选器通常是不够的。更确切地说,对敏感数据的访问必须足够精细,以便只允许将数据过滤到那些行、列,在某些情况下,还允许过滤到特定的数据元素。创新产品,如 Schedule-1 的 DataPassports 产品和其他产品提供了解决这一能力的解决方案。
  6. 自动化数据供应:如今,从源系统到分析和 AI/ML 的数据供应通常是以临时方式实施的,有太多的手动步骤,导致将数据交付给数据科学家的时间延长。今天,这可能被认为是勉强可以接受的,因为 AI/ML 的采用才刚刚开始,然而,当对只有 AI/ML 才能实现的好处的需求不可避免地增加时,对速度的需求变得更加迫切。自动化数据供应流程并将其集成到 DEVOPS / MLOPS ( 机器学习操作)中可以解决这些挑战,随着高性能和全功能基于云的工具(例如,微软的 Azure 数据工厂)的出现,实现这一功能的能力变得不那么困难了。

通往以 AI/ML 为中心的数据管理之路一步一个脚印。它需要不断发展的数据治理态势、新的自动化水平和新的架构。无论是法规迫使改变,客户需求迫使改变,还是竞争压力发现新的机会,毫无疑问,企业的数据管理能力将需要发展,以获得 AI/ML 的好处。

德国制造的人工智能——德国的人工智能战略

原文:https://towardsdatascience.com/ai-made-in-germany-the-german-strategy-for-artificial-intelligence-e86e552b39b6?source=collection_archive---------15-----------------------

2018 年 11 月,德国政府公布了其人工智能战略。以下是 12 个行动领域和 14 个拟议目标的摘要。

German national parliament.Photo by Ansgar Scheffold on Unsplash

为了使德国人工智能的研究、开发和应用达到世界领先水平,需要一个受过教育和知情的社会。这需要深入的社会对话、参与性程序和每个人参与塑造社会的机会。

该战略包括 12 个行动领域

  1. 加强德国和欧洲的研究,成为创新的驱动力
    这将通过在德国建立一个强大、动态、灵活、广泛和跨学科的具有国际竞争力的人工智能生态系统来实现。卓越的研究、一流专家的招聘和创新友好型环境的创造是实现这一目标的核心。
  2. 创新竞赛和欧洲创新集群 有针对性的人工智能竞赛旨在创造自由,以激发颠覆性的想法,寻找新的解决方案、应用和商业模式,启动初创企业,吸引人才并在早期阶段识别趋势,并接收来自各个方向的多学科冲动。
  3. 转移到商业,加强中型企业
    德国政府将专注于一些措施,这些措施将使各种规模的德国公司——从初创企业到中小企业再到大公司——不仅能够使用人工智能应用程序,还能够开发它们并将其集成到他们的业务流程中。
  4. 扶植新企业的创立并引领他们走向成功 联邦政府将为刺激基于人工智能的商业模式和产品的创业动力设置新的推动力。这里的关键问题是从整体上改善风险资本的获取,但也特别是在增长阶段,这对于基于人工智能的商业模式来说往往是资本密集型的。为此,政府将为投资者制定具体的激励措施,并鼓励和促进更多的研究附带利益。
  5. 工作和劳动力市场的世界:塑造结构变化 人工智能的使用将从根本上改变许多人的日常工作生活。联邦政府将以国家继续教育战略为基础,采取各种措施支持所有员工参与这一变革。我们将促进、分析、评估和批判性地伴随人工智能的使用,无论是在单个公司还是通过国内和国际的更高层次的观察站。
  6. 加强职业培训和吸引熟练劳动力/专家
    联邦政府将尽一切可能改善德国人工智能的框架条件,并将鼓励和支持联邦德国各州这样做。我们需要公众对人工智能的广泛理解,特别是在年轻人中,以及初始、持续和进一步培训的新内容和想法。德国需要一个更有吸引力的研究和教学框架,以吸引和留住科学家,并在大学设立新职位。
  7. 使用人工智能完成保留给州政府的任务和行政任务 联邦政府将率先在行政管理中使用人工智能,并将为公民提供更快、更好和更高效的行政服务。
  8. 提供数据并促进其使用 通过各种措施,联邦政府将大幅增加可用的高质量数据的数量,以便在不侵犯个人权利、信息自决权或其他基本权利的情况下,将德国确立为世界领先的人工智能所在地。
  9. 调整监管框架 联邦政府将审查并在必要时调整基于算法和人工智能的决策、服务和产品的法律框架,以确保有效防止偏见、歧视、操纵或其他滥用。
  10. 制定标准 由于其国家责任,联邦政府还将通过国家标准组织 DIN/DKE 与人工智能领域的企业代表合作,在国家、欧洲和国际层面制定标准。这不仅是技术问题,也是伦理问题。
  11. 国内和国际联网 人工智能等跨领域技术迟早会影响科学、商业、行政管理和公民日常生活的各个领域。发展是全球性的,这就是为什么政治也必须跨越国界思考和行动。因此,联邦政府将日益扩大人工智能领域的国际合作以及双边和多边合作。
  12. 参与与社会的对话并继续制定政策行动框架 为了使德国的人工智能研究、开发和应用达到世界领先水平,需要一个受过教育和知情的社会。这需要深入的社会对话、参与性程序和每个人参与塑造社会的机会。为此,联邦政府将加强社会对话和人工智能教育,并透明地介绍和讨论人工智能对每个人和公共利益的机会以及可能的风险和挑战。

大赦国际旨在促进公民的社会参与、行动自由和自决

德国联邦政府通过其国家人工智能战略追求 14 个目标

  1. “德国制造的人工智能(AI)”将成为全球公认的质量标志。
  2. 德国应该扩大在工业 4.0 的强势地位,成为该领域 AI 应用的领导者。强劲的德国中端市场也应该受益于人工智能应用。
  3. 德国将成为吸引世界上最聪明的人工智能头脑的地方。
  4. 重点应该永远放在人工智能给公民带来的好处上。
  5. 在德国,数据只能用于社会、环境、经济和国家利益。
  6. 有了实时数据传输的新基础设施,新的人工智能应用程序的基础就建立起来了。
  7. 德国的人工智能将伴随着高水平的信息技术安全。
  8. 人工智能的研究和使用应该在道德和法律上扎根于德国。
  9. 欧洲对基于数据的商业模式和基于数据的价值创造的新方式的回应,将与我们的经济、价值和社会结构相对应。
  10. 同样,在工作领域,为了所有有收入的就业者的利益,它应该总是关于人工智能的。
  11. 人工智能的潜力应该使生活和工作领域更安全、更高效、更可持续。
  12. 大赦国际旨在促进公民的社会参与、行动自由和自决。
  13. 人工智能的潜力应该用于可持续发展,从而有助于实现《2030 年议程》的可持续发展目标。
  14. 对于人工智能应用,设定了框架条件,以创造和保持多样性,并保证为文化和媒体自由的发展提供空间。

[1]PDF 格式的完整文档(下载链接)

[## 麻省理工学院人工智能播客

麻省理工学院的研究科学家 Lex Fridman 主持了一个关于人工智能的精彩播客。以下是一个简短的总结…

medium.com](https://medium.com/@c.koch/the-mit-artificial-intelligence-podcast-cb7c35522776)

隐私法规时代的人工智能、人工智能和数据分析

原文:https://towardsdatascience.com/ai-ml-and-data-analytics-in-the-age-of-privacy-regulations-2b79447d5239?source=collection_archive---------20-----------------------

早在 2010 年,大数据(特别是个人用户数据)的隐私就已经被认为是濒临灭绝的概念。当时,关于这个话题的大部分讨论都是积极的,本着“数字世界发展得越开源和互联越好”的精神。

九年后,人们的普遍情绪已经大不相同了。

如今,数据隐私、安全和治理是主要关注的问题,这是由不断增加的政府法规推动的。一百多个国家有不同的数据隐私法,其中最著名的是欧盟通用数据保护条例(GDPR)和加州消费者隐私法(CCPA)。

在隐私法、隐私法的执行和维护方面,仍有许多需要标准化的地方。但是数据安全和隐私保护的进程已经确定,而且不可能很快改变。

符合法规的人工智能面临的挑战

在这种环境下,处理用户数据的人工智能开发人员和数据科学家面临着几个挑战:

  • 使数据既受保护又可访问(在需要合法披露时)
  • 创建数据共享和处理方式,不仅保护隐私,而且允许在必要时收回信息
  • 学习使用有限的数据,这些数据的使用受到法律的限制或管制
  • 保持足够的灵活性和可解释性,以提供足够的流程透明度(此外,还能使技术经得起未来考验)
  • 对于面向多个国家/地区的项目:遵守不同地区关于数据隐私和安全的法律

有许多方法可以应对这些挑战,所有这些都是目前人工智能讨论的焦点。以下是截至 2019 年底这些选项中最突出的一些。

数据去识别

数据匿名化

GDPR 和许多其他地区法规的直接要求之一是对收集的数据进行去身份化处理,将信息从其适用的真实人群中分离出来,并对其进行“脱敏”以供第三方访问。实现这一点的方法之一是数据匿名化。

至少从商业角度来看,匿名化的缺点是它在设计上是不可逆的,而完全匿名化的数据在战略分析或聚合方面的用途有限。抑制(将数据的可识别部分更改为固定的预定值)是这种方法的一个简单版本,通常用于公开发布的数据,以供无限制访问。

数据假名化

假名化和标记化是一种替代方法,旨在保留足够多的真实值数据,同时使用“假名”(标记)而不是敏感和识别部分,将它们连接到其发起者。这种方法通过应用额外的变量(分离的或以其他方式额外保护的)使更改可逆,并确保符合数据保护法规。例如,这通常用于确保符合支付卡信息数据安全标准(PCI DSS)。

数据概括

顾名思义,数据概化是一种通过取具体值(数值、地理等)进行数据去标识的方法。)并将它们更改为更广泛的类别。将特定年龄的人聚集成广义的年龄组、更大区域的位置等,同时确保数据不能转换成其原始状态是传统数据分析中广泛使用的一种流行方法。

为了更好地保护个人数据,尤其是在数据集较小或数据非常具体的情况下(例如,为公共统计收集的患有某些罕见疾病的人的健康记录),概括通常与隐藏或屏蔽结合使用。

数据加密

提供数据安全和私有数据交换的方法之一是在训练神经网络和应用模型时部署数据加密。这也是法规中规定的敏感数据保护的必要措施。

采用对称加密(如 AES)、非对称加密(RSA、DSA 或 ECC)或两者的组合(混合加密)可确保数据的初始状态只能由具有密钥的授权代理访问。

为了允许加密数据的计算,部署同态加密,产生加密的输出(在解密之后,该输出将与来自相同的未加密初始数据的未加密输出相匹配)。创建完全同态的加密系统是 AI 和 ML 开发的优先事项之一,因为目前使用加密数据所带来的各种限制使它变得复杂。

使用加密并创建能够处理加密信息的模型,可以随后实现安全的数据交换,并在代理之间创造更多“模型即服务”的机会,而不会损害敏感数据的隐私。

合成数据生成

合成数据生成既可用作利用较小数据集实现有效机器学习的方法,又可用作数据去识别的方法,是一个有前途的概念,可有效用于确保遵守隐私法。

最初基于大量数据匿名化实践,合成数据生成主要用于测试和模型训练。目前,正在积极开发各种方法作为多用途技术,用于在各种情况下创建和使用可靠的数据,而不受敏感的、个人识别的或难以获得的细节的影响。

雇佣数据隐私官来控制和确保企业的合规性

GDPR 实际上要求配备数据保护官(dpo)来监督处理敏感信息的某些类型的公司和项目的合规性。即使不与欧盟公民打交道,在机器学习咨询中任命一名合格的 DPO 或第三方专家来负责法规合规性也是至关重要的,尤其是在拥有大量用户数据集和多区域项目的企业环境中。

最后

在许多方面,隐私和安全的概念今天几乎可以互换。防止泄漏和违规可以被视为防止总体滥用,包括欺诈、盗窃、偏见和本质上包含在概念中的许多其他方面。

通过创建符合法规、透明、公平和安全的处理敏感数据的实践,我们将确保“人工智能时代”不仅成为高效、个性化、自动化解决方案的时代,而且成为颠覆和变革的时代。

“人工智能”、“ML”或“数据科学”:术语表

原文:https://towardsdatascience.com/ai-ml-or-data-science-a-glossary-of-terms-529435823bb6?source=collection_archive---------16-----------------------

作为一名自学成才的程序员,我一直很欣赏那些不需要对现有知识做太多假设的资源。所以当我开始写一系列关于机器学习的博客文章时,从基础开始似乎是很自然的。这篇文章解释了术语“机器学习”的含义以及许多类似术语的定义。

当我们讨论这些的时候,你可能会问自己为什么有这么多听起来很专业的术语来描述本质上相同的东西,或者相同的一组东西。这是一个我可以提前回答的问题:机器学习和数据科学结合了许多不同的研究领域,每个领域都有自己喜欢的术语。结合这一事实,该领域已经存在了几十年,不同的术语已经失宠,你有一个混乱的配方。为了这个领域的新手,我们将涵盖所有可以应用于机器学习的术语。

计算机科学

看起来“计算机科学”仅仅是“与计算机有关的任何东西”,但实际上它比这要微妙得多。任何计算机都可以被认为是硬件和软件的结合。硬件是组成物理计算机的电路和组件,软件是运行在硬件上的代码,使用智能电路产生有意义的输出。

硬件的设计属于电气工程的范围。软件设计是计算机科学的领域。计算机科学的简单定义可以是“涉及软件和算法的创造以及计算机编程的领域”那么“程序员”和“计算机科学家”的区别呢?在某种程度上,它们是可以互换的——毕竟,编程是计算机科学不可或缺的一部分——有些人会这样使用它们。

然而,对其他人来说,“计算机科学家”更多的是指那些处理需要很好的计算机科学理论知识的人。比如算法分析和设计,或者软件/系统架构。出于我们的目的,计算机科学是现代数据科学的主要领域之一。大多数数据科学家可以准确地称自己为“程序员”,许多人有计算机科学理论背景。这两个领域之间并没有完全重叠——并不是所有的数据科学家都是计算机科学家,反之亦然——但是有很多重叠。

统计数字

统计学是数学的一个分支,它利用各种数学方法将一组组的数字归纳成摘要。大多数人都熟悉像平均值这样的基本统计数据,但有许多不同的统计方法都相当于将大量数据简化为某种汇总值。

当你听到“人工智能”或“机器学习”这些术语时,你可能不会想到统计学,但统计学是这两个领域的主要贡献者。从现在开始,我们使用的每一个术语都有统计学依据。有些人甚至走得更远,认为“统计”是一个包罗万象的术语,涵盖了下面列出的几乎所有东西。这比使用更具体的术语更不常见,但它有助于指出统计学对后面的一切是多么重要。

数据科学

如果我们试图严格定义我们称之为“统计”的东西,我们可能会只选择用于生成汇总输出的公式和方法。从理论上来说,这没什么,但从实践的角度来说,它将许多知识和技术留在了灰色地带。收集数据、表示和格式化数据,以及清理和修改数据都是执行数据分析的基本技能。我们可以说,数据库、数据管道、甚至分布式计算对现代数据分析都是必不可少的。

这就提出了一个问题:如果统计学只是一组特定的公式和算法,那么我们如何称呼进行实际数据分析所需的所有这些技能和知识的组合?一般来说,答案是“数据科学”,这个术语涵盖了数据存储、操作和分析中使用的所有技能。

人工智能

“人工智能”这个术语最近很流行,但它有一段很长的有点令人困惑的历史,所以让我们先谈谈它。在计算机的早期,一台机器只能运行一个程序。所以你可以有一台计算炮弹轨迹的机器,和一台处理贷款申请的机器,但是那些不可能是同一台机器。在那些日子里,硬件和软件之间的分离很少,许多机器是硬连线来解决一个特定的问题,要么根本不能重新编程,要么需要付出巨大的努力。

换句话说,大多数计算机是为解决单一问题而专门制造的。自然,早期的计算机科学家想让计算机做更多的事情,有几种方法。最雄心勃勃的想法是存在一种“通用算法”,这是一种可以用来解决任何问题的方法。灵感来自于人类有能力解决基本上任何事情,我们的大脑中似乎没有不同的“算法”来解决不同的问题,所以我们必须使用一种通用的方法来解决问题。如果可以为计算机发现这样的算法,那么一台机器就能够解决大量的问题,而不需要重新编程(或者根本不需要编程)。它将展示类似人类的智能,通过电路运行,因此被命名为“人工智能”在早期,“人工智能”的使用特指那些试图为机器找到通用算法的方法。

迄今为止,还没有人解决这个问题。计算机能够在同一台机器上解决一系列问题,但这是通过使用操作系统来加载和切换许多不同的特定问题程序来实现的。这是当今几乎每台计算机的基本架构。

“人工智能”这个术语并没有消亡,而是进化了。现在,它可以指特定问题的算法(即:不是通用的),算法不必以任何类似人类可能的方式处理问题。现代人工智能的显著特征是,它解决被认为需要类似人类智能水平的问题。这是一个模糊的术语,没有技术定义,但它们通常涉及以下一个或多个方面:

  1. 它们有大量或潜在无限数量的可能解决方案,和/或大量或潜在无限数量的可能输入。
  2. 他们需要提前进行广泛的规划,以达到最佳的解决方案。
  3. 没有“正确”的答案,只有更好和更差的答案,目的是找到最好的可能。
  4. 一个决策的“好”或“坏”取决于一系列可能不断变化的因素。

还有其他因素,但这些是最常见的。人工智能问题的一个例子是确定汽车制造的顺序,这样就不会有步骤阻碍后面步骤的执行。例如,在安装窗户之前装上门板会阻止窗户的安装,或者要求你再次取下门板。这涉及大量的潜在投入,广泛的规划,一个选择的好坏取决于其他因素,可能有许多不同的解决方案。

通常这些问题需要人类专家来解决,但是如果方法正确,计算机也可以解决。当一个问题达到一定的复杂程度时,它可以被认为是“人工智能”再说一次,没有硬性规定什么是合格的,但有一系列问题已经被普遍接受为人工智能问题。

现在回到为什么“人工智能”这个术语最近到处出现:它与机器学习有关。机器学习可以应用于大量的问题,因为最简单的形式,机器学习是相当基本的统计。机器学习也被广泛认为是人工智能的一个子领域,所以所有的机器学习解决方案也是人工智能解决方案。因此,如果你使用机器学习方法,你可以称之为“人工智能”,坦率地说,“人工智能”听起来比“机器学习”或“使用统计学”更酷。

“人工智能”让人联想起这种不可思议的先进技术的科幻形象,“机器学习”让许多不知道机器为什么需要学习的人感到困惑,“统计学”让人想起高中。从营销的角度来看,很明显你想用哪一个。因此,尽管大量自称为“人工智能驱动”的东西在技术上并没有错,但重要的是要记住,这个术语可能不仅仅意味着将统计数据应用于数据。

机器学习

正如我们上面所描述的,术语“人工智能”最初指的是寻找一种几乎可以完美复制类人智能的通用算法的努力。现在,它指的是解决足够复杂的问题的任何算法,否则需要人类来解决。这些算法使用许多不同的方法来做到这一点。

“机器学习”描述了人工智能算法的一个常见子类,即通过数据的统计分析“学习”他们的逻辑。这已被证明是人工智能最通用和最强大的子领域之一。有许多不同的方法来实现这一点,细节占据了整本书,所以我们不会在这里深入探讨,但我们可以涵盖基本内容。

最常见的机器学习算法采用数据集,该数据集充当关于给定问题的“正确”答案的知识库。例如:给定一组住房数据,“正确”的答案可能是根据房子的大小、卧室和浴室的数量等准确预测房子的价格。

由此他们有了“教师”和“学习者”的成分。学习者使用输入数据生成预测,教师提供关于这些预测的误差——它们是否太高/太低,以及多少的反馈。然后,学习者可以根据反馈调整他们的预测。一般来说,完美地预测每个例子是不可能的,所以当学习者不再能改善他们的总体误差时,大多数算法就会停止。机器学习中有许多常见的子问题,由于教师因素,这个问题被称为“监督学习”。

作为人工智能的一个子领域,任何有资格成为“机器学习”的东西也可以合理地称为“人工智能/人工智能”,但不能反过来。使用这种学习方法无法解决许多人工智能问题。话虽如此,鉴于机器学习可以应用于大量问题,它几乎已经成为“人工智能”的同义词。虽然这在技术上并不准确,但值得注意的是,当人们经常说人工智能时,他们指的是机器学习方法。

统计学习

可与“机器学习”互换“机器学习”的重点是在学习什么,即:计算机或“机器”在“统计学习”中,重点是如何通过统计完成学习。在很大程度上,我看到“统计学习”只在学术界使用,但它值得了解,因为搜索“统计学习”会找到搜索“机器学习”可能会错过的优秀资源。

神经网络

这个术语出现得足够多,值得拥有自己的一节,即使它在技术上是机器学习的一种形式。神经网络是机器学习中的一种独立算法,在过去几年中非常流行,并且可能会继续这种趋势。现代神经网络,也称为“深度神经网络”或“深度学习网络”,是当今使用的最强大和最有能力的学习算法之一。你很少会看到像决策树这样被点名的东西,但是神经网络却经常出现。

部分原因是,像“人工智能”一样,“神经网络”这个术语有一种非常未来的声音,所以当使用神经网络时,你更有可能听到出于营销原因而提到的算法名称。另一个流行的特征是,神经网络是“生物启发的”,“受人脑启发的”或“设计为像大脑中的神经元一样工作”等。这意味着,与其他使用深奥的数学和统计学的算法不同,神经网络在人类思维中有着深厚的基础,并且功能更好,因为它们像人类一样“思考”。

坦率地说,这是一个非常误导性的描述,它源于更早的时代,当时一些计算机科学家真的认为该算法将是数字大脑的开端。这种乐观是非常错误的。最初的算法被证明是如此的夸张和不充分,以至于它几乎被完全遗忘了。现代算法已经发生了重大变化,达到了它所拥有的程度,并且像大多数其他算法一样,更多地受到数学和统计学的启发。称之为“基于人脑”和称奇亚宠物为“受人体解剖学启发”一样准确。虽然这些说法在技术上没有错,但它们都严重夸大了这种关系的强度。

大数据

我第一次听到“大数据”这个术语时,作者试图通过将数据本身描述为一种商品而不是其他业务的副产品来利用“大石油”。这是一个很好的术语,但从那以后我就很少听到这个特定的用法了。当它第一次被使用时,“大数据”就像今天的“人工智能”一样具有多种用途,但自那以后,它大多陷入了更具体的用法,专注于“大”的部分。

因此,现在“大数据”通常是指拥有真正海量数据的公司。需要整个服务器和存储设备架构来处理的数据。这使它区别于我们已经定义的其他术语。统计/AI/机器学习都可以在基本上任何规模的数据上进行,而不仅仅是“大数据”。同样,我们定义的“大数据”也可以用于数据科学之外的目的。因此,它们是密切相关但又相互独立的术语。

任何带有“分析”的东西

“数据分析”、“商业分析”、“预测分析”、“商业预测数据分析”等。等等。等等。所有这些都可以与“数据科学”互换在很大程度上,包含“分析”的术语来自于统计和统计分析已经使用了几十年的企业环境,但是描述谁在做这种分析的术语往往会发生变化。

数据驱动

这可以指使用数据科学得出结论或做出决策的任何事情。通常,当存在其他非“数据驱动”的有效选项时,这个术语就会出现例如,一个自动调温器可以根据你以前的使用情况来学习使用什么温度,这可以被称为“数据驱动”,因为大多数自动调温器不是这样。

结论

我会用免责声明来结束这篇文章。以上所有的描述都是很好的、细致入微的定义,根据我的经验,你可以从大多数在这个领域有经验的人那里得到这种定义。话虽如此,肯定有经验丰富的人对这些术语的含义持有不同的(有时是强烈的)观点。

与许多领域相比,计算机科学往往对同一事物有许多不同的术语,并且使用相同的术语来描述不同的事物,这是常见的混淆来源。毫无疑问,你会遇到对这些术语的不同解释,这没关系。上面的解释应该给你足够的背景来弄清楚其中的细微差别,如果每个人都使用相同的定义是必要的,那么就应该进行有根据的讨论。

数据越多并不总是越好

原文:https://towardsdatascience.com/ai-ml-practicalities-more-data-isnt-always-better-ae1dac9ad28f?source=collection_archive---------20-----------------------

AI/ML 实用性

尽管我们大多数人都有这样的直觉,即更多的信息不会有坏处,但它实际上是有坏处的。

本文是 AI/ML 实用性 系列的一部分。

Photo by Steve Harvey on Unsplash

真的吗?

如果你一直在关注这个系列,并且阅读了关于数据的不合理有效性,你可能会对这个标题感到困惑。整个想法不就是数据越多越好吗?

嗯,是也不是。

任何时候,当你试图模拟世界上发生的事情时,更多的例子只会帮助你的模型改进。

但是,了解每个例子的更多细节并不一定有帮助。如果额外的细节与你想学的东西无关,甚至会有伤害。

凭直觉,很难看出这怎么可能是真的。身高加上最喜欢的颜色可能不会比身高更好地预测体重。但是,获得这些无关的信息有什么坏处呢?

关键在于,你并不总是知道额外的信息是否相关,而且,在你完成判断这些信息是否有用的过程之前,它可能会掩盖数据中的真实关系。

一个例子将使这一点更加清楚。

两家汽车经销商

Photo by Rahul Bhogal on Unsplash

让我们想象两个非常做作的汽车经销商。第一家出售日本车,并提供斯巴鲁傲虎(Subaru Outback)或丰田普锐斯(Toyota Prius)。第二家公司销售德国汽车,让顾客在高端奔驰和大众甲壳虫之间进行选择。

两家经销商都希望优化各自销售团队的效率,并确定如果能够预测客户走进停车场时最有可能购买哪辆车,他们可以节省大量时间。

两家经销商都决定通过让他们的迎宾员收集一些关于客户的信息来解决这个问题,对这些信息进行评分,并将这些信息传递给将与客户打交道的销售人员。

每个经销商认为,最有可能预测客户选择的两个数据点是购买力,即客户能够负担的支出,以及紧迫性,即客户想要或需要新车的速度。

在收集了一年的数据后,第一家经销商创建了这个图。蓝点代表内地购买,橙点代表普锐斯购买:

Only partial separation of data

这两个输入似乎对结果有一些影响。橙色圆点表示左上角,蓝色圆点表示右下角。但是,有很多重叠,没有明确区分普锐斯和内地买家。因此,他们决定添加另一条信息。

普锐斯是一种小型混合动力车,耗油量高。因此,他们决定考虑燃油效率对客户的重要性。新数据如下所示:

Adding a third dimension reveals more separation

这正是我们希望在添加更多信息时看到的。第三个维度更清晰地将数据分为两组。在这种情况下,即使没有额外的数据点,额外的输入也会使从这些数据中学习变得更加容易。

现在,让我们看一个例子,第三维没有帮助。

在第二家经销商处,最初的数据收集工作立即显示出了令人鼓舞的结果。这一次,橙色圆点代表奔驰,蓝色圆点代表大众。

Strong, but not 100%, separation in two dimensions

这是我们第一次绘制数据时希望看到的那种图表。这两个类别被清楚地划分为几个集群,很少有离群值。他们对数据运行 ML 算法,找到两个圈起来的聚类。

尽管如此,德国汽车经销商的一名热切的销售人员指出,根据他的经验,教育水平是谁会购买奔驰的一个很好的预测因素。他问道,为什么不在模型中加入这个因素呢?在最坏的情况下,它不会告诉我们任何我们不知道的事情。

因此,经销商向模型中添加了一个反映大学毕业年数的输入,并制作了这张图表:

Adding a third dimension obscures the true separation

与第一个图表一样,数据明显分为两类。但是,新的信息是一个红鲱鱼。

教育水平集中在 0 到 4 年之间,中间值很少,可能是因为大多数客户要么上过 4 年制大学,要么根本没上过大学。但是,每个集群包含大约相同数量的奔驰和大众买家。

第三个维度,教育水平,揭示了数据点之间的距离与他们可能购买的汽车类型无关。

深度与广度

在这个虚构的例子中,新数据实际上误导了我们。但是,即使它只是无关的,并添加了随机噪声,它也会暗示数据点之间的人为距离。而且,随着我们添加越来越多的这些不相关的数据点,数据点之间的不相关距离将会主导我们关心的数据点。

像人类统计学家一样,一个好的机器学习算法可以消除不相关的特征,当数据清楚地显示它们是不相关的。但是请记住,我们总是只处理所有可能数据的一个样本,任何两个样本看起来相关的可能性很小,即使它们不相关。

通过添加许多额外的字段,使数据集变得更宽,增加了某个地方的某些东西看起来相关而实际上不相关的几率。减轻这种风险的唯一方法是通过添加更多的例子使数据集更深

人工智能音乐第二代-铅表变化

原文:https://towardsdatascience.com/ai-music-generation-ii-lead-sheet-variation-1884133e4f1?source=collection_archive---------20-----------------------

先享受一下吧!!!

艾全曲生成

AI Full Song Generation Sample1 — by combining chord progression from two different songs and get a minor to major feeling

AI Full Song Generation Sample 2 — by taking the contour of the melody and chord as the condition

继我们之前在音乐编曲上的工作,我们不仅想添加一些乐器作为旋律的伴奏,还想改变旋律或和弦。这里,我们介绍使用变分自动编码器的我们的模型的三个应用。

铅片变化

如何方便音乐人作曲?这个想法来自一些音乐家的想法,他们会从一首歌的一些现有剪辑中找到灵感。问题是,由于版权问题,他们不能直接使用这些剪辑。那么我们能做什么呢?

自动生成这些剪辑的变体怎么样?

演示

首先让我以披头士的歌曲 Heyjude 为例,向大家展示一些我们 LeadSheetVAE 模型制作的 demos:

Original Song of Heyjude

Little Variation of Heyjude

a Variation of Heyjude that automatically change it into C minor key

Larger Variation of Heyjude

模型

这些变体都是由我们的 Lead Sheet VAE 模型生成的,代码在 Github 上公开。欢迎来到 fork,尝试并享受其中的乐趣。如果你觉得很酷,别忘了给个 XD。

这项工作已经作为演示论文发表在 ISMIR2018 上。如果你对模型的细节感兴趣,这里有的论文链接【1】。该架构如下所示。

Lead Sheet VAE model architecture

通过使用递归变分自动编码器,我们通过双向 GRU 编码器将旋律和和弦信息压缩到潜在空间中。由于 VAE 模型有一个约束,即它的潜在空间应该接近高斯分布。因此,在生成阶段,我们可以从潜在空间中随机采样一个点,并将其重建回来。让我们来听一些例子

4-bar random samples from VAE model

8-bar random samples from VAE model

潜在应用

该模型甚至可以通过对一些特征进行调节并生成相应的音乐来扩展到条件生成或完整歌曲生成。因为时间的关系,我可能会在我以后的故事中描述详细的想法。但是让我们先听一些演示吧!!!

AI Full Song Generation Sample1 — by combining chord progression from two different songs and get a minor to major feeling

AI Full Song Generation Sample 2 — by taking the contour of the melody and chord as the condition

参考

【1】【论文】郝-、吴孟轩和易-、 通过混合生成模型【Lead Sheet Generation and Arrangement】ISMIR 后期开发与演示会议,2018

【2】【开源代码】https://github.com/liuhaumin/LeadsheetVAE

以前的帖子

人工智能音乐生成-铅表组成和安排

原文:https://towardsdatascience.com/ai-music-generation-lead-sheet-composition-and-arrangement-b984208f8519?source=collection_archive---------16-----------------------

S 自 2018 年起,我加入 音乐与 AI 实验室 ,由 易教授-杨玄 指导,做 AI 音乐一代研究。在那个时候,已经有很多关于使用深度学习算法进行音乐生成的工作。通过文献调查,我们发现从事音乐生成的人通常从生成 旋律 开始。

旋律生成—无条件或有条件

旋律生成可以根据生成模型的类型进一步分为两类——无条件生成和有条件生成。

Unconditional generation: Generates melodies from scratch. Conditional generation: Generates melodies from conditional information.

因此,你可以从零开始或者从一些给定的信息中产生旋律。例如,将主旋律(即第一个小节或前两个小节的旋律)赋予模型,并让它继续为后面的小节生成旋律。您还可以为模型添加一些标签,如情感标签或流派标签,以便模型可以生成符合条件的旋律。歌词和视频剪辑等其他信息也是人们尝试条件生成的潜在应用。

但是只生成旋律是不够有趣的,对吗?

Melody++怎么样

现在,从模型输出的角度来看,除了只生成旋律,还可以生成和弦,也就是所谓的铅片生成。此外,我们可以用鼓产生旋律和和弦,让音乐更有节奏感。最终,我们还可以添加其他乐器,以管弦乐的形式演奏。

Melody + Chords + Drums + Other Instruments

我们的目标

我们的目标不仅仅是旋律一代或旋律加和弦(主音)一代,而是拥有全套乐器的一代。我们以一首流行歌曲《我一无所有》为例,有三个版本(即只有旋律、旋律+和弦、多乐器)。最后一个版本是我们正在处理的任务。

Melody only version

Lead sheet version

Multi-instruments version

我们的挑战

正如我们所知,要建立深度学习模型,我们需要数据集。因此,我们从数据集的角度来讨论挑战。为了构建音乐生成模型,有两种类型的数据集。第一个叫做铅板,第二个叫做 MIDIs。

从铅表,它提供了旋律和和弦,所以如果你只是想做旋律生成,你可以使用旋律部分。此外,如果你也想产生和弦,你可以两者都用。让我给你举一个铅表的例子。

Amazing Grace by John Newton in lead sheet format

所以使用这种格式,你可以训练生成旋律和和弦,因为 lead-sheet 提供了它们,以前的作品如improv _ rnn model(谷歌洋红】midit(我们的实验室)都在这种数据集格式上进行过训练。但是如果你想产生鼓和所有其他乐器,那么你需要使用 midi。让我给你看看下图中的 MIDI 文件。

I have nothing by Whitney Houston in Midi format

相对而言,很少有人生成 MIDI 作为输出,因为与只包含旋律和和弦的铅表生成相比,它更困难。这里,您需要注意更多仪器之间的依赖性。例如,在 MIDI 中有 128 种乐器设置。当然,我们可以将它们简化为四个或五个乐器,但你仍然需要注意它们之间的依赖关系,这样它们在一起演奏时才会连贯。

一个名为muse gan的模型,是我们实验室之前在 AAAI 18 上发布的,试图生成多音轨的音乐。以下链接提供了 MuseGAN 的结果。

[## 穆塞甘

音乐生成的人工智能

salu133445.github.io](https://salu133445.github.io/musegan/)

你会注意到结果中的主要问题是音乐中没有旋律线。为什么?

因为通常 midi 文件不会指定旋律在哪里。有时由钢琴演奏,有时由小提琴演奏,有时由别的什么东西演奏。

因此,从数据集可用性的角度来看,我们可以看到明显的差距,我们只有铅表格式或 MIDI 格式的文件。

虽然我们想创作一首有旋律、和弦和其他乐器的歌曲,但我们被迫停下来。用铅板,我们只能产生旋律和和弦。有了 MIDI,我们可以生成多声道,但是不知道旋律和和弦在哪里。

所以这项工作的任务是弥合差距,从单纯的旋律或铅板的产生到一个新的任务,我们称之为“铅板排列”

我们的方法

我们将铅板排列分为两部分。第一种是无条件生成模型,从零开始生成铅片。第二种是条件生成模型,它以铅片作为输入,生成排列。

Two Steps Approach for Lead Sheet Arrangement

但问题仍然存在,我们如何处理条件排列生成,因为如果我们希望模型做到这一点,我们仍然需要两者都成对的数据集。

应对这一挑战的关键思想是使用和弦相关的特性。铅表文件有明确的和弦。在 MIDI 文件中,虽然它没有指定和弦的位置,但是您可以从 MIDI 文件中提取一些和弦相关的特征。因此,和弦可以用作在铅表文件和 MIDI 文件之间进行交流的一种方式。

我们的模型

这个模型基于 MuseGAN,它使用钢琴卷帘窗形式作为数据表示。

在我们的第一阶段,称为铅表生成,我们只是把音乐曲目数量缩减为两个(旋律和和弦)。这项工作的第二个贡献是,我们发现在短语生成中使用递归模型可以捕获流行歌曲中更多的重复模式[1]。

在我们的第二阶段,所谓的铅表安排,我们应用条件 MuseGAN 学习生成五个轨道的文书根据和弦相关的特征作为条件。

我们把 lead sheet 格式和 MIDI 格式的文件都变成钢琴卷帘窗的形式,如下图所示。我们将 8 个小节制作成一个片段。每个条形由 48 个时间步长组成。纵轴是音高范围,我们总共使用 84 个音高。

System Flow

System Architecture

结果

Amazing Grace Arrangement Demo

更多结果显示在演示页面:【https://liuhaumin.github.io/LeadsheetArrangement/

结论

我们提出了第一个通过两步流程进行铅片排列的模型

步骤 1:用于引导表生成递归卷积 GAN 模型可以捕获流行歌曲数据集中更多的重复模式

步骤 2:条件化的 GAN 模型通过弦相关的特征来桥接两个数据集的间隙。

参考

[1]【论文】郝——刘敏,和易——杨玄。 在 Proc 中。IEEE 机器学习与应用国际会议(ICMLA),2018 年 12 月。

【2】【开源代码】https://github.com/liuhaumin/LeadsheetArrangement

【3】【演示网站】https://liuhaumin.github.io/LeadsheetArrangement/

下一篇文章

艾音乐第二代——铅表变奏

人工智能常常会增加招聘中的偏见

原文:https://towardsdatascience.com/ai-often-adds-to-bias-in-recruiting-but-theres-a-new-approach-that-could-change-the-game-70d793abd92f?source=collection_archive---------31-----------------------

但是有一种新的方法可以改变这个游戏

大多数人不想有偏见,但偏见是固有的——它影响我们如何看待任何情况,通常是无意识的。

当你想到偏见时,你脑海中可能会浮现出种族、性别和宗教等特征。但是偏见实际上有一个更广泛的背景。

偏见有多种形式。例如,当我们假设我们对某人的最初印象意味着他或她的性格时,就会出现光环效应。光环效应会让我们在没有证据的情况下相信,当你遇到一个热情可爱的人时,他也是聪明能干的。

相似性偏见是我们对与自己相似的人的隐性亲和力。在我们有缺陷的头脑中,相关的特征是积极的特征——即使它们实际上不是。一个在离你 15 分钟路程的地方长大的人,或者一个足球迷,真的更有可能成为一个更好的团队成员吗?

这些类型的偏见给招聘和雇用带来了很大的问题。不仅仅是招聘人员。当你认为招聘软件——人工智能和传统软件——反映了人类的倾向时,你会意识到偏见影响了招聘过程的每个部分,从面对面的面试到简历扫描软件。

招聘中的偏见会影响招聘人员评估候选人的方式。

因为招聘人员每天经常看到成百上千份简历放在他们的办公桌上,他们平均只花 7 秒钟来审阅每份简历。当做出快速判断来淘汰候选人时,一个人的姓名、教育程度和以前的工作都会不公平或不恰当地影响招聘人员考虑他们的决定。

我们都有偏见——包括我自己。例如,在最近的一次会议上,我们讨论了一个特定的候选人是如何成为一名有天赋的高尔夫球手的。我有偏见的下意识反应是假设候选人是个男人。但是,事实证明,这位候选人是一位女性。

但是有了技术,我们有机会减少招聘和雇佣中偏见的影响——理论上。

然而,由于多种原因,招聘软件并不完美。

招聘软件的一个关键目标是从一群申请者中筛选出最合适的候选人。为了实现这一点,今天的大多数技术都是基于关键字搜索,并且最常见的是需要使用布尔值

但这项技术未能解释招聘的三个主要现实。首先,它依赖招聘人员来执行强布尔查询,这在当今是一种罕见的技能。其次,它可以跳过那些没有包含正确关键词的优秀候选人。很多人就是不擅长写简历。这并不意味着他们不擅长这项工作。第三,一些人(他们可能擅长他们的工作)知道这个系统是如何工作的,并通过在他们的简历中倾倒关键词来破解它。

最终,搜索提供商意识到了这一点,并通过使用同义词关键词和其他语义策略建立了变通办法。尽管如此,这些变化并没有导致一种技术能够提供完整的画面,并向招聘人员展示所有最佳候选人。正确的信息仍然必须在候选人的简历上,以便他们筛选。

人工智能招聘软件也不是没有缺点。事实上,人工智能给求职者打分的方式实际上是增加了偏见,而不是减少了偏见。

这是因为人工智能和机器学习本质上采取了人类行为,只是大大加快了速度。因此,机器可以对大量简历或申请进行分类,并根据一些因素,确定前 5%或 10%的人。该系统剔除了大部分申请者,并说,“这些人是你应该面试的。”

但是这些系统只是简单地学习你教给它们的东西。因此,举例来说,如果你为某个特定角色雇佣的前几个人都是去过某个特定大学的中西部白人,人工智能会认为这个档案是最佳候选人。而且,这样一来,那种人就会不断浮出水面。那是偏见。

亚马逊多年来一直在开发招聘软件,他们最终发现该软件对女性有偏见。他们最终彻底废弃了它。不过,意识到你的人工智能有偏见还是有一线希望的——人工智能出现的模式可以教会你很多关于你自己的偏见。

以下是 ThisWay Global 如何通过精心开发人工智能招聘软件来解决招聘中的偏见问题:

该团队构建并拆除了他们的整个算法 13 次,努力完全消除偏见。

通过反复试验,他们发现减少偏差的最好方法是简单地在等式中加入更多的因素。他们的算法超越了经验和教育——它考虑了一个人的激情、兴趣、特质、技能等。它还掩盖了所有与工作无关并可能招致偏见的特征:性别、姓名、年龄等。

在设计人工智能招聘软件时,他们认为找到合适的人选是双向的:公司也应该对候选人有利。例如,一家公司在纸面上可能有很好的声誉,但对某个特定的员工来说却很糟糕。

这种方法是本体论的。斯坦福大学的人工智能专家汤姆·格鲁伯(Tom Gruber)将本体定义为“概念化的规范,用于帮助程序和人类共享知识。”

本体方法可以将正确的候选人与正确的角色匹配起来,而这是关键字所不能做到的。这里有一个真实的例子:一家制药工厂有一个技术员/管道工的职位空缺。他们需要的人不仅要有技术能力,而且要有高度的安全许可,并愿意与某种潜在的危险化学品密切合作。所以这份特殊的工作有很多独特的,特殊的要求。

这正是本体技术非常有用的招聘情况。因为它能让你找到确切的合适人选——在这种情况下,是在附近地区使用合适的化学品工作过的人,具有合适的经验和教育背景。

它考虑了所有的因素,甚至是那些人类招聘人员几乎不可能拼凑起来的因素,并找到了可能从未被考虑过的候选人。例如,制药技术员的角色是由一名曾在附近军事基地的潜艇上工作的工程师担任的。谁会想到这个人适合做工作?谁会在点击一个按钮时就拥有这种类型的信息?肯定不是一般的招聘人员。

但人工智能支持的软件做到了,因为它真正整体地、全面地运行。它超越了关键词,理解数据是如何联系起来的,以提供最佳候选人——没有偏见。

分布式 ACID 事务的实现

原文:https://towardsdatascience.com/ai-on-acid-an-implementation-of-distributed-transactions-for-ai-applications-25cb8d2ec9b6?source=collection_archive---------14-----------------------

丹尼尔·戈麦斯·费罗和蒙特·兹韦本

介绍

Splice Machine 是一个混合事务/分析处理数据库(HTAP ),旨在使遗留应用程序现代化。通过将传统 RDBMS 数据库的各个方面(如 ANSI SQL 支持和 ACID(原子性、一致性、隔离性、持久性)事务)与内存分析和机器学习的可扩展性、效率和可用性相结合,Splice Machine data platform 支持数据驱动的智能应用程序,从而转变企业。

为了支持关键任务应用程序,Splice Machine 的专利分布式事务系统跨多个表、记录、约束和索引维护 ACID 属性。

Splice Machine 使用实现多版本并发控制(MVCC)的快照隔离设计,在每次更新时创建记录的新版本,而不是就地覆盖旧数据值。这意味着用户可以访问他们开始阅读时可用的数据,即使该数据随后被写入者更新。

由于每个事务都有自己的虚拟“快照”,事务可以并发执行,而没有任何锁定。这导致了非常高的吞吐量,并避免了麻烦的死锁情况。

在本白皮书中,我们将讨论拼接机如何:

  • 使用快照隔离实现分布式事务
  • 执行分级交易
  • 高效执行 OLTP 和 OLAP 工作负载的事务

快照隔离

拼接机使用时间戳来实现快照隔离。为了实现快照隔离,系统要求一个事务只能从它开始之前已经提交的其他事务中读取数据。为了说明时间戳的概念,我们在下图中显示了三个独立事务的开始和提交时间。在这种情况下,第三个事务(T3)将知道第一个事务(T1)所做的更改,因为它们在 T3 启动之前已经提交,但是第二个事务(T2)将不知道这些更改。

Snapshot isolation requires a specific transaction to read data from other transactions only after they have been committed.

快照隔离还要求我们检查写-写冲突。当两个事务在时间上重叠并试图写入表中的同一行时,就会发生写-写冲突。在上面的示例中,如果事务 T1 和 T2 写入表中的同一行,其中一个将不得不中止,因为它们同时发生,而 T1 和 T3 不会发生写-写冲突。

为了解决这个问题,Splice Machine 在事务开始和提交时为它们分配时间戳。所有时间戳都是唯一的,因此不会有任何两个事务具有相同的开始和提交时间戳。在拼接机器平台中,我们使用时间戳服务器来确保时间戳是唯一的,并且它们是单调前进的。时间戳服务器通过联系共识管理器(即 Apache Zookeeper)来保留将由特定实例使用的时间戳块,使得没有其他并发实例可以使用相同的时间戳。这种方法对于恢复是必需的,以便在服务器出现故障时必须创建新的事务,整个集群只有一个唯一的时间戳可用。因为我们为集群提供了一组时间戳,所以任何对新时间戳的请求都可以由服务器在本地处理,而不是逐个事务地更新 Zookeeper 状态。这提供了更高的事务吞吐量,并消除了 Zookeeper 这个事务瓶颈。

拼接机将数据存储在 HBase 中。每个 HBase 记录包括一个带有键、值和时间戳的单元

Structure of HBase record in Splice Machine.

该键表示表中该记录的主键的值。该数据是该记录的表中所有列的压缩编码。Splice Machine 使用时间戳作为 HBase 单元的一部分来存储事务开始时间。因此每个事务都有自己唯一的开始时间戳。该时间戳由时间戳服务器提供,而不是通常的 HBase 时间戳。

您可能还记得我们之前的讨论,我们需要使用开始和提交时间戳来满足快照隔离的条件。这个条件要求事务只能读取已经提交的数据。因此,我们需要一种机制来将提交时间戳与特定的开始时间戳相关联。在 Splice Machine 中,我们使用一个名为 SPLICE_TXN 全局可见事务表来完成这项任务。该查找表存储开始和提交时间戳之间的映射,以及事务元数据,例如事务的类型,以及它是否已经被回滚。

假设我们有一个从时间戳 20 开始的事务,它需要查找一条记录。因此,如果表中有用户试图读取的事务数据,它将首先检查开始时间戳(在下面的例子中是 5),然后通过参考 SPLICE_TXN 表来验证时间戳 5 和 10 之间的映射,以验证该事务已被提交。所以在时间戳 20,这个记录的值是可见的。

The Data Table holds the begin of the transaction and the SPLICE_TXN table has its end timestamp

我们用来优化 SPLICE_TXN 查找表的另一种机制是在 HBase 中添加一个具有特殊值的新记录。在下图中,该值由单词“Commit”表示当内存中的记录通过日志结构的合并树实现被刷新到磁盘时,或者在事务前滚操作期间,记录的最新值被合并到单个行中以避免 MVCC 解析的开销时,会发生这种情况。

Optimization to avoid SPLICE_TXN lookup

该值具有相同的键,它位于事务写入的实际数据旁边,因为记录是按键排序的。将提交时间戳写在数据本身旁边的原因是,当执行下一个事务时,不必参考查找表,而是简单地读取相应单元中的键和值,以在本地解析所有信息。在这种情况下,20 处的新事务将能够看到数据已经由事务 05 写入,事务 05 已经用时间戳 10 提交。这种方法大大提高了性能,因为它比在 SPLICE_TXN 表上进行查找更快。

分级交易

Splice Machine 使用分层事务来管理复杂的语句。例如,分派给 Spark 的查询使用如下的分层事务。作为根事务的用户事务被分类为事务 0。基于此,语句事务/保存点是事务 0 的子事务,然后每个 Spark 任务得到自己的事务作为语句事务的子事务。触发器和我们的分布式写管道也使用分层事务。他们是这样工作的。让我们假设根事务的时间戳为零,并且是父事务。任何事务都可以有子事务,其行为类似于任何其他事务。子事务只能读取已经提交的事务写入的数据。子事务的行为依赖于父事务之间的关系。因此,如果这些事务的父事务能够从这些事务中读取数据,那么这些事务将只能读取由这些事务写入的数据。

Splice Machine uses hierarchies to manage complex queries.

本质上,子事务继承了父事务的视图,然后将相同的规则应用于自己。Splice Machine 根据事务场景以几种方式实现事务层次结构。第一个是当用户通过运行一个命令启动一个事务时封装执行。在这种情况下,我们在执行这个命令之前并不知道它是否会成功。例如,插入 100 行的命令可能会由于主键冲突而失败。在这种情况下,Splice Machine 不会回滚整个事务。指出如果任何一行失败,系统行为也可以被配置为使整个插入失败,这可能是有用的,因为这取决于用例。我们通过自动创建驱动语句的子事务来执行此操作。如果命令失败,我们回滚子事务,并为下一条语句创建一个新事务。在下图中,如果子事务 T11 失败,Splice Machine 回滚子事务,并为下一条语句创建一个名为 T12 的新事务。

In case of a child transaction failing, it is rolled back to create a new transaction

我们还使用子事务来实现保存点。每当我们创建一个保存点时,我们都用一个子事务封装它。如果用户决定返回到那个特定的保存点,他或她可以回滚整个事务集,并从那个特定点开始一个新的事务。保存点可以嵌套,如下图所示。

Splice Machine uses hierarchy to encapsulate child transactions and to implement savepoints.

层次结构的另一个重要功能是支持分布式执行。在用户将要运行分布式操作的情况下,我们将这个信息传递给将要执行这个分布式操作的所有节点。这方面的一个例子是运行导入功能。这个函数在 Spark 中运行,它同时从不同的机器中读取数据,并将数据从每个任务中直接插入 HBase。因此,每个任务接收实际信息,并创建其唯一的子事务,用于将数据写入 HBase。如果其中一些任务失败,Splice Machine 可以回滚部分失败的事务,并使用新的事务标识符重试这些任务。如果失败是灾难性的,我们可以使整个操作失败并回滚所有事务。

对于主要目标是实现低延迟的 OLTP 工作负载,创建开始和提交时间戳可能是一项开销很大的操作。我们通过识别持久的和内存中的事务来解决这个问题。所有根级事务都是记录在事务表中的持久化事务。在这种情况下,事务 ID 分为两部分。最低有效字节保留给唯一标识子事务的计数器,而实际事务 ID 在时间戳服务器中递增。因此,对于新的子事务,它不是从时间戳服务器获取新的时间戳,而是递增计数器。这允许我们唯一地标识子事务写入的数据,如果有回滚,我们可以在 ID 级别将它记录在事务表中。当我们在一台机器上运行 OLTP 事务并且可以访问这个计数器时,这种方法对于本地事务是有效的,我们可以为每个事务不断增加和维护唯一的 id。

TransactionID is broken into two parts, the least significant byte is reserved for a counter to identify the child transactions.

当我们用完增加计数器的位时,我们通过从时间戳服务器获得新的时间戳来创建新的持久化子事务。在这种情况下,子事务将具有来自时间戳 Oracle 的新序列号,并且计数器将从零开始,新的子事务将不断增加计数器。如果事务在 Spark 中不同的执行器上运行,而我们没有访问计数器的权限,那么这些事务必须被持久化。

由于执行的分布式特性,分布式任务或作业已经有了一些开销,所以获取 begin commit 时间戳不会有太大的影响。

结论

总之,我们认为拼接机平台可以执行 OLTP 和 OLAP 工作负载。我们的平台不要求事务为子事务获取新的时间戳,因为我们使用一个字节作为内存计数器。对于 OLAP 和分布式查询,Splice Machine 的分层设计允许用户创建同时执行但相互独立的多个事务,以便它们可以相互独立地启动、提交和重试。这使我们能够以安全和一致的方式管理事务性工作负载,这也非常高效,因为我们不需要集中的协调点。

如果您想了解 Splice Machine 如何工作的更多信息,请观看我们的“ under the hood ”网络研讨会,深入了解我们数据平台的内部情况。

关于拼接机

Splice Machine 是一个可扩展的 SQL 数据库,使公司能够将其传统和定制应用程序现代化,以实现敏捷、数据丰富和智能—所有这些都无需重写。

当您将 Oracle 和 DB2 应用程序迁移到 Splice 时,您不仅降低了数据库许可成本,还使应用程序能够大规模地添加新的数据源。

Splice Machine 使您能够将过去在不同平台上的分析和机器学习统一到应用程序中,从而减少 ETL 延迟和基础架构成本,并实现智能决策。

AI 还是营销炒作?(我的第一顿午餐和工作中的学习)

原文:https://towardsdatascience.com/ai-or-marketing-hype-my-first-lunch-and-learn-at-work-a0b596e8dcb8?source=collection_archive---------15-----------------------

我是我们公司唯一的数据科学家。这让我的工作有了很大的广度,这很好,但也让我很少有人能和真正的书呆子在一起。我指的是特定于数据科学的那种削弱——关于其他主题肯定有很多削弱,这也很棒。

出于看似无私但实际上相当自私的努力,我决定开始一次数据科学午餐和学习系列。该系列的目标是帮助我的公司在所有团队中增强其数据驱动的决策制定,而不仅仅是数据科学团队。对数据进行批判性思考并强调潜在数据集和商业机会的人越多越好。这就是无私的部分,我自愿花时间去教我的同事。自私的部分是,真的,我只是希望人们在谈到数据科学时与我保持一致,这样我可以从他们那里获得想法,他们可以突出我们业务中可能有助于探索的机会。如果他们开始自己做分析就更好了。我不介意让我的 60 位才华横溢的同事为我工作。

我的想法是有 5 个会议:

  1. 首先是对整个主题的介绍,因为许多人甚至不知道数据科学的真正含义(有时包括我自己?).
  2. 第二课(在撰写本文时尚未教授)将讨论基本模型的案例研究,以及一些更前沿的东西,包括 Python 中的示例代码。重点是,虽然数学可能很复杂,但通常现成的实现就能解决问题。
  3. 第三节是选修课,有更多的数学知识,并讨论模型。显然人们想要更多的数学(见下图)。
  4. 倒数第二课将是动手操作,我们所有人一起做一些探索性的数据分析,可能是在一些杂货数据集上,因为我们公司在杂货领域。
  5. 最后一课将涉及我们所有人一起建立一个模型,可能是为了预测某人是否会在给定的一周内购买花生酱,或者类似的事情。我选择花生酱的原因是因为我在第一课中反复使用了这个例子,它似乎很受欢迎。如果能从一开始就把事情联系起来就好了。

After the talk, I sent out a poll to see what everyone was interested in for the next lessons. The responses were really surprising- people want more math! (Names covered up to protect the privacy of my coworkers).

第一次演讲分三部分

我第一次会议的目标是为接下来的事情做好准备。我把演讲分成三个部分:

  1. “深度学习教父”Geoffrey Hinton 的故事,他与多伦多的关系,以及为什么每个人都应该知道他是谁,并为生活在这样一个伟大的技术中心而自豪。
  2. 一遍数据科学、机器学习的定义,试图重现我第一次试图理解所有这些术语时所经历的过程。这哪里是“人工智能还是营销炒作?”部分进来了。
  3. 为什么我们都应该关心。我举了一个例子,是从一个风险投资家的演讲中借来的:在 90 年代,公司想知道如何建立他们的互联网战略。在 21 世纪初,拥有互联网战略是理所当然的,但下一个大问题是如何建立移动战略。在 2010 年,问题不在于互联网或移动战略,这些都是既定的。问题是如何驾驭“人工智能”。人工智能将走上互联网和移动的道路——它将被整合到所有的业务中。未来每个公司都会是 AI 公司,在某些方面。所以即使你不关心 AI,你也得关心。

AI 还是营销炒作?

我对演讲的这一部分感到紧张。我想让讨论继续下去,并指出“人工智能”一词的含义因谈话对象的不同而不同。一个计算机科学家会给出一个与非技术营销经理截然不同的答案。这没什么不对的!(或者我是这样告诉他们的。完全公开,我不是人工智能这个术语的狂热粉丝,但我知道它在最近几年有了不同的含义。

这个“游戏”本来是有争议的。假定是。结果非常…没有争议。但仍然很有趣。

游戏如下。我会向观众展示不同的产品图像,这些图像可以被视为“人工智能”或“营销炒作”,这取决于你在和谁说话。我会站在那里,让他们互相讨论,等待他们的答案:这是人工智能还是营销炒作?

以下是我向同事展示的一些例子,以及他们的回应:

1.老派亚马逊产品推荐。

Source: mageplaza.com.

观众的回答:营销炒作。(和我的回答一样)。

2.自动驾驶汽车。

Source: phys.org.

观众的回答:营销炒作。(和我的回答不一样)。

3.Roomba(记得你客厅布局的吸尘器)。

观众的回答:营销炒作。肯定是营销炒作。(不是我的回答)。

4.谷歌的自动补全/句子建议。

观众回答:AI(经过一番讨论)。(和我的回答不一样)。

5.聊天机器人

观众的回答:营销炒作。(我的回答:看情况)。

那么什么是AI 呢?

在游戏结束时,我告诉观众我认为哪种产品配得上“人工智能”这个词。我告诉他们,我认为 AI 是一个机器学习驱动的系统,可以与现实世界进行交互。自动驾驶汽车,亚马逊的无人机送货系统,Roomba,汉森机器人的索菲亚,我会称之为人工智能。任何我称之为机器学习驱动的产品。(真的,我宁愿不要用人工智能这个术语来形容任何技术。但是如果必须的话,那就是我上面给出的定义。使用这个定义为我的演讲提供了一个很好的叙述。

有趣的是,我的观众不同意我的观点。游戏是有争议的,但不是我希望的那种。我希望观众会不同意,但事实上,他们不同意我的观点。我站在那里说“人工智能存在!”而他们在那里异口同声地说“没有人工智能这种东西。”我猜这是一个(前端/后端)开发者的视角。非技术观众要么保持沉默,要么似乎同意他们的同事。我也同意他们的观点,但我也认为这个术语这些年来已经发生了很大的变化。它在五年前的意义可能与在下一个五年后的意义不同。这个领域变化很快。**

离别感言:我觉得我做得很好!

我对几件事感到惊讶:

  1. 人们真的出现了。大多数是技术人员,但也有一些高级人员。
  2. 有一个似乎一致的回应,人工智能只是炒作,一个营销术语,人工智能不存在,也不可能存在。
  3. 演示期间对数学的恐惧(我给他们看了一张显示反向传播的计算图),但几天后对更多数学的渴望。
  4. 观众的互动,与我和他们自己的互动,还有笑声。当我演讲时,我总是试图让观众发笑!
  5. 从讲座一开始,每个人都很感兴趣并参与其中。人们确实对数据科学感兴趣。
  6. 它会带来的疲劳。自从我硕士毕业后(大约 18 个月前),我就再也不用像那样做报告了。我都忘了演讲有多有趣多累了。

跑个便当学学!很好玩!

我强烈建议每一位数据科学家考虑在他们的公司举办一次午餐和学习会议。这是完美的自私和无私的行为;两端的持续学习和知识共享机会。你可以练习公开演讲,提高你的沟通技巧,教你的同事,分享一些欢笑。最重要的是,它很有趣。

最初发布于我的个人网站:Serena . MC donnell . ca

国家人工智能战略和气候危机

原文:https://towardsdatascience.com/ai-policies-and-the-climate-crisis-7790f11ef23b?source=collection_archive---------32-----------------------

Photo by @franckinjapan

世界各地的人工智能战略是否足以解决我们这个时代的决定性问题?

我们可以研究一下联合国安理会五个常任理事国——中国、法国、俄罗斯、英国和美国——的战略。然而,我也选择了印度的策略,印度有 1,366,417,754 人,是世界上第二大人口大国;它有强大的军事力量;并且正在大力投资人工智能。看看中国、法国、印度、俄罗斯、英国和美国的人工智能战略,在应对气候危机的方式上有明显的不同。中国、法国和印度有明确的优先权,而俄罗斯、英国和美国没有。

这些战略是每个国家总体政策的一部分,因此所描述的战略用于代表每个国家的人工智能政策,可能并不完全如此。无论是计划还是战略,每个国家的人工智能政策都比这些文件中所写的要多,然而这些不同的战略文件或计划将是本文的重点。

根据 Jessica Cussins Newman 在她的报告走向人工智能安全中的说法,在 2016-2018 年间,人工智能国家战略&政策倡议的数量有了很大的增加。我非常感谢 Newman 在撰写本文时所做的工作,因为她一直在绘制人工智能安全性,并通过这样做收集了不同策略的概述,这反过来又给了我一个更好的概述。

Retrieved on the 10th of November 2019

我将按字母顺序浏览这六个国家。

  1. 中国
  2. 法国
  3. 印度
  4. 俄罗斯
  5. 联合王国
  6. 美国

1.中国、人工智能战略和气候危机

1.1 中国的人工智能计划是否解决了气候危机?

One of the most extensive analysis of AI Policy around the world which I have found so far has been undertaken by Jessica Cussins Newman and is focused on AI Security. To begin I would say clearly that climate is not mentioned specifically in China’s A New Generation of Artificial Intelligence Development Plan (新一代人工智能发展规划), AI Policy from 2017. On the other hand ‘sustainable’ is mentioned four times. There was two mentions of environmental protection. I will discuss these four mentions of sustainable; two of environmental protection; and the context within which they are mentioned. I have found six focal points that can be linked to addressing the climate crisis within China’s AI strategy from 2017.

1.2 以可持续发展为中心的智能化

“发展智能经济,建设智能社会,维护国家安全,构建知识、技术、产业集群融合,人才、制度、文化相互支撑的生态系统,预见风险与挑战, 以智能 为核心推进可持续发展,全面提升社会生产力。 国力和国家竞争力为宗旨,加快建设创新型国家和世界科技强国,为实现“两个一百年”奋斗目标和民族伟大复兴提供有力支撑。”

The first mention of sustainable is mentioned in the second section called ‘Overall Requirements’ within the first point ‘(A) Guiding Thought’. Towards the end the 200 year goals are mentioned. The Two Centenaries (Chinese: 两个一百年) is a set of goals advanced by General Secretary XXX following the 18th National Congress of the Communist Party of China held in 2012. It is said to be the basic foundation for achieving the “Chinese Dream”, another ideology advanced by Xi. They were formed back in the 80’s. The goal for 2020 is the elimination of extreme poverty in China, linking it to GDP.

Sustainability可持续性Kě chíxù xìng

“能保持持续的自然”,同样地,这可能与生态学以及其他有关持续能力的概念有关。

可持续发展一直是中国当前战略的重要组成部分,然而,将可持续发展与 GDP 部分挂钩可能是不幸的,因为越来越多的证据表明,这是一个可能产生负面影响的指标。更换这种测量工具可能是幸运的,但这可能不是一种简单的追溯方法。

1.3 人工智能的健康和可持续发展

“人工智能的发展是一项关系全局的复杂系统工程。按照“构建体系、把握双重属性、坚持三位一体、强化四大支撑”的布局,形成人工智能健康持续发展的战略路径。”

这里说的三位一体是半信半疑的,我可能是错的。然而,卡尔·冯·克劳塞维茨试图通过连接人民、军队和政府之间的关系来阐明战略的“三位一体”,孙子着眼于这些行为者之间的相互依存关系,同时考虑到自然、地形和法律在形成战略中的作用。就算我可能错了。

另一方面,它更有可能指的是(1)稳定的人民币,(2)开放边境,(3)控制自己的利率。这被称为不可能的三位一体。

这一部分不仅谈到了目标,以及可持续发展是核心,它还坚持认为通往目标的道路必须是健康和可持续的。

1.4 跨学科可持续发展

“聚焦人工智能重大科学前沿问题,兼顾当前需求和长远发展,以突破人工智能基础理论瓶颈为重点,确保超前布局可能引发人工智能范式变革的基础研究, 促进学科交叉融合,为人工智能可持续发展 和深度应用提供有力的科学储备。”

在翻译的文档中提到了交叉整合,我选择将其翻译成跨学科的。

它不确定如何确保这一点,以及应该涉及哪些“类型”的学科。对学科整合的关注是一个有趣的想法,因为这在许多情况下被证明是具有挑战性的。在学术、商业或政府环境中,强大的科学储备也有助于促进这种合作,这当然是必要的。

1.5 促进基础设施持续发展的可持续生态系统

“高性能计算基础设施。继续加强超级计算基础设施、分布式计算基础设施和云计算中心建设。 为高性能计算应用的持续发展构建可持续的生态系统 。推动下一代超级计算机研发应用。”

由于通往人工智能的道路必须是“可持续的”,因此需要一个可持续发展的生态系统是有意义的。可持续和一致当然可以有不同的解释,发展的速度可能是对项目可持续性的挑战。

1.6 人工智能在环境保护中的应用

“人工智能为社会建设带来新机遇。我国正处于全面建成小康社会阶段,人口老龄化、资源环境约束等挑战依然严峻,人工智能在教育、【城市运行】 等领域的应用,将极大提升公共服务 的精准化水平,全面提升人民群众的生活质量。”**

这个目标太笼统,不能说得太具体,但又特别提到人工智能是一系列不同领域的机会。这里要强调的要点是,人们希望提高公共服务的精确性。各国政府一直希望在一个人口众多的模糊世界中更准确、更具体地运作。中国是世界上人口最多的国家,2017 年估计有 1379302771 人。很难将定量理解等同于生活质量,但是对于如此大的数量,很明显,理解这些数据或做出决策可能涉及很大程度的自动化。

1.7 智能环保

智能环保 。建立大气、水、土壤等环境领域智能监测的大数据平台。构建陆海互动、大地互动、信息共享的智能环境监测网络和服务平台。研究开发资源能源消耗和环境污染物排放智能预测模型和预警方案。 加强京津冀、长江经济带等国家重大战略区域环境保护和突发环境事件智能防控体系 。”

这涉及到确保保护环境遗址和预测环境的突然变化。随着时间的推移,突然的变化预计会更频繁地发生,因此,能够使用更准确的模型来预测或了解大范围内正在发生的事情非常重要。预测必然是一种合作,世界各地的天气数据都是如此,然而,测量和预测的意愿并不新鲜——将人工智能加入其中并不是一件奇怪的事情。

概述中国与气候相关的人工智能战略

我们可以看到 2017 年中国人工智能战略中与解决气候危机相关的六个焦点。我认为它在战略中得到了解决,可以在这些要点的基础上制定计划,或者在这些要点中提出论点,使项目具有生命力。每一点我都加了一个问题。

  1. 以智能为中心的可持续发展。 我们如何让可持续发展成为 AI 发展的中心?
  2. 人工智能健康可持续发展的战略路径。
  3. 跨学科的可持续发展或/和学科整合。 哪些学科需要整合,在国内和国外有哪些途径可以做到?
  4. 基础设施持续发展的可持续生态系统。 中国政府如何审计其云提供商或资源提供商,以确保开发是负责任的?在不同的解决方案中可以看到哪种类型的能源使用?
  5. 人工智能在环境保护和提高公共服务精准化水平方面的应用。 中国政府可以探索哪些与人工智能相关的政府技术来改善公共服务?
  6. 通过大数据实现智能环保和监控。 中国如何与其他国家在环境保护和监测方面开展合作,5G 网络可以以何种方式用于这一目的?

最后,我意识到关于中国的争议并不能使这些观点没有问题。我对这些并不视而不见,但是理解我们如何共同努力解决气候危机是很重要的——因为这是一个可怕的危机,而中国是地球上人口最多的国家,我们都依赖于中国如何处理这个普遍的问题。

2.法国人工智能战略与气候危机

2.1 法国人工智能战略如何应对气候危机?

我本周的主题是从人工智能战略中看到他们提到气候、可持续性、环境和生态的背景。主要是看看他们如何在他们的人工智能战略中解决气候危机。我粗略地看了一下:“对于一个有意义的人工智能:走向法国和欧洲的战略”写于 2017 年 9 月 8 日至 2018 年 3 月 8 日。

以最终极的法国方式,它以作者的照片开始,作者是一位数学家和法国议会议员。这是总理爱德华·菲利普指派的任务。报告的一部分包括到世界各地不同的人工智能中心旅行,了解更多关于这个主题的知识。这是一个由各种各样的人组成的团队。

显而易见,法国的人工智能战略在考虑人工智能的发展时,有专门考虑气候和生态的空间。他们文件中的第四部分致力于使用人工智能来创建更生态的经济。

该报告的执行摘要指出:

“为人工智能创造一个有意义的角色也意味着解决其可持续性问题,尤其是从生态的角度来看。这不仅仅意味着考虑人工智能在我们生态转型中的应用,而是设计天然的生态人工智能,并使用它来解决人类活动对环境的影响。这是一个紧迫的问题,因为与数字技术和人工智能发展内在相关的世界数据存储需求,可能会超过 2040 年全球可用的硅产量。”

自然生态人工智能听起来有点像绒毛,但已经有不同的人工智能解决方案的讨论,这些解决方案不是在大规模数据集上训练的。以及存储更少的数据,所以它在其他地方有一个实际的讨论点,并且在工业中被谈论,特别是在法国。资源问题也是一个很好的问题,我在其他地方还没有看到足够的提及(特别是在美国的战略中)。

然后又是全世界都在谈论的巴黎协定,如果这个巨大变革的中心不认真对待这些观点,那将是非常可悲的。“人工智能必须被纳入作为巴黎气候协议和全球环境公约一部分的倡议中。”据说这也是一种战略需要:

  • 法国和欧洲可以通过提高国际舞台上的意识来引领这一明智的生态转型。
  • 首要任务是考虑人工智能对实现联合国可持续发展目标的影响,它如何对某些目标施加压力,以及它如何加速其他目标。

2.2 如何做到这一点?

为了做到这一点,有人认为,必须有一个专门的空间来进行人工智能研究和能源优化研究。这些想法还包括从消费者的角度出发,创建一个平台,让消费者更加了解他们在技术方面的选择。“这个平台还应该包括一个简单的计算器,使所有公民都能更好地了解这些影响,并比较各种产品、服务、软件和硬件的环境足迹。”

特别提到了云产业:“公共当局也必须采取行动,使价值链更加绿色,并支持欧洲云产业促进其生态转型。”独特的是,因为我没有在其他地方看到过,这份报告不仅主张开放软件,而且主张开放硬件:“最后,让人工智能价值链更加绿色显然需要开放硬件和开放软件……”最后一点,也是中国提到的,是收集大量的气候数据。

在第 103 页,有人认为它必须成为国际议程的一部分。

“法国可以提议按照 COP 21 的思路设立一项重大活动,展示示范性和高影响力的举措。它还可以更密切地参与国际论坛,特别是七国集团内生态和数字两大转型的融合,在七国集团,关于人工智能的讨论已经启动,法国不久将接任主席国"

2.3 威胁和解决方案

提到了一个具体的现有项目,我也想提出来。塔拉海洋项目:释放大量关于海洋的数据,用于理解和模拟行星生物群落。也有人认为法国需要提供更多的公共数据。有一个表格展示了公共数据在环境方面的可能用途。

表来自“一个有意义的人工智能:走向法国和欧洲的战略”第 29 页检索 11 月 6 日。

报告中指出:

“到 2040 年,计算所需的能源将同样超过世界能源产量”

报告中说,数字能源消耗每年增长 8.5%,到 2030 年,它对世界电力消耗的贡献在中度情景下可能达到 20%,在悲观情景下甚至达到 50%。因此,我们可以看到消费在 20 年后增长 10 倍。

虽然人工智能是环境的潜在威胁,但它也是一种潜在的解决方案。他们认为,ESEC(法国经济、社会和环境委员会)需要在关于人工智能及其后果的严格政治辩论中发挥主要作用。

法国/欧洲人工智能战略明确关注环境,不仅谈论抽象的优先事项,而且提出解决问题的具体方法。

3.印度的人工智能战略和气候危机

3.1 印度计划如何在其人工智能战略中解决气候危机?

我发现印度的人工智能策略在处理各种不同的话题时非常全面。讨论文件人工智能国家战略于 2018 年 6 月发布。Jessica Newman 在她的分析中声称,与其他国家(如英国)相比,印度的人工智能战略相当广泛,涵盖了各种各样的主题。我并不是说这是好是坏,但是我很想知道这个策略中有多少对气候的关注。

在印度战略中,“气候”被提到了六次。环境是在一个不同的上下文中提到的,它更多地与人有关。然而,可持续性也被多次提及。

3.2 农业

“随着全球 气候 变得更加脆弱和不可预测,对不可持续和资源密集型农业的依赖只会加剧粮食短缺和农业困境的风险[…]由于依赖雨水,印度农业部门容易受到 气候变化 的影响。变化的天气模式,如气温升高、降水量变化和地下水密度,会影响农民,特别是在该国的雨养地区。人工智能可用于预测播种、虫害控制和投入控制的建议,有助于确保增加收入,并为农业社区提供稳定性。”

不久前的 2017 年,超过 55%的印度人以农业为生。因此,关注农业成为报告的重点也就不足为奇了。

3.3 气候变化研究重点

这项研究专注于 IT 服务和社会公益,旨在为提高生产力提供强大的人工智能见解和建议。它还包括软件分析——通过使用人工智能的预测和建议模型,构建、测试、管理应用程序并使其现代化,解决现实生活中的社会问题,如营养不良、人口贩运和 气候变化 。”

在描述研究的章节中,气候变化很早就被提及,尽管被隐藏在一系列其他优先事项中。

3.4 太阳能

"印度已经在 气候领导力 中发挥着领导作用,尊敬的纳伦德拉·莫迪总理誓言要"超越"印度对《巴黎协定》关于 气候变化 的承诺。类似地,印度通过领导国际太阳能联盟(International Solar Alliance)成为持续推动清洁能源革命的先锋,并制定了到 2022 年太阳能装机容量达到 100 吉瓦的宏伟目标。凭借 2000 万千瓦的太阳能装机容量,印度正稳步实现这一目标。”

印度已经制定了一个目标,在该国安装大量的太阳能,以提高可再生能源的可再生性,这是一个值得努力的目标。

3.5 政府数据共享

“政府数据共享:印度政府有大量数据存放在各部委的仓库中。政府可以发起一项任务,在进行适当的隐私检查后,将所有这些数据用于公共利益。例如— 气候数据 、非战略遥感数据、地区语言语音(来自全印电台)、土壤健康数据等。”

不同地方都有政府共享计划,遵循这一流程可能会有所帮助。如果政府负责分享数据,会给社会带来巨大的好处。

3.6 印度作为进一步扩大规模的试验台

“考虑到我们大多数经济和社会挑战的复杂性和多面性,解决印度问题可以很容易地扩展到其他新兴和发展中经济体。印度人工智能战略的一个组成部分涉及应对可以通过技术干预解决的共同和复杂的全球挑战,印度的规模和机遇景观提供了理想的试验台,以确保 可持续 和可扩展的解决方案。”

在这种情况下,在印度试行解决方案并将其推向国际市场似乎是一个明确的目标。

3.7 运输

“对可持续交通的需求:印度政府最近宣布发展 100 个智能城市的倡议旨在解决这一异常现象,促进智能城市规划战略,促进可持续土地利用设计和多式联运[……]虽然新的倡议可能需要时间来显示可实现的影响,但城市交通中与拥堵、高效交通流量、货物流动等相关的现有问题。确实可以用人工智能技术解决。”****

当我们使用人工智能技术来解决问题时,它可能会导致新的问题,然而,在不同的背景下,将技术更无缝地集成到社会中是一个目标。

3.8 教育

“教育部门需要重新调整,以便以可持续的方式有效利用人工智能的潜力。在小学和中学,有必要在与人工智能相关的科目中过渡到基于技能的教育。经常被批评为过度知识密集型的印度教育急需转型,尤其是在与 STEM 或基于计算机的教育相关的科目上。随着以技术为基础的工作变得越来越突出,在不断变化的环境中培养应用技能的需求也越来越大。”

教育平台中的人工智能是一个有趣的命题。

3.9 可持续商业模式汇总数据

“今天,在人工智能领域建立可持续的商业模式方面,在位者继续享有寡头垄断地位,原因有两个:(a)由于资源的可用性,他们可以成功地在非正式市场环境中购买数据,并不断就一次性合同进行谈判;(b)他们有专门的部门从事开发价值链的不同方面的工作。”

这是非正式数据与正式数据的对话。在印度,似乎非正式数据相对容易获得,然而,由于需要良好的数据质量,所以我认为这是一个问题。

3.10 负责任的人工智能开发

Retrieved on the 9th of November 2019

最后,这张幻灯片提出了一些很好的观点,说明我们可以在哪些领域投入精力来应对气候危机。

4.俄罗斯人工智能战略

俄罗斯塔斯社报道:“俄罗斯总统弗拉基米尔·普京批准了截至 2030 年的人工智能发展国家战略。10 月 10 日的总统行政命令于周五公布在法律信息官方网站上。”

乔治城大学安全和新兴技术中心(CSET)出版了俄罗斯报告的译本。“气候”或“可持续发展”这两个词根本找不到。“环境”这个词只是在提到“经济”这个词时才提到的。

俄罗斯人在他们目前的人工智能战略中没有关注气候和可持续发展,该战略计划滚动到 2030 年。

5.英国人工智能战略与气候危机

5.1 英国人工智能战略对气候危机的关注程度如何?

与我认识到战略或政策不是随意讨论中最令人兴奋的词。即使在治理或道德轨道上,这个词似乎也不会让人们兴奋。另一方面,这可能取决于你建议实施什么样的政策——讨论可能的政策制定的问题或领域可能看起来不太适合以行动为导向。那么政策就是所采取或建议的行动方针或原则,作为这样的行动框架。英国的行动框架是人工智能部门协议,简而言之就是我将在本文中讨论的内容:它与气候危机有什么关系?

首先,我们可以说,尽管在 2019 年 5 月 21 日进行了更新,但人工智能领域的交易没有提到“气候”一词,也没有为此提到“危机”一词。就“环境”而言,它提到了 19 次,但通常是在商业环境的背景下。“可持续”这个词一次也没有提到。

"同样, 开放环境数据 已用于创建洪水风险和水质应用程序。为了测试未来的自动驾驶汽车,我们需要关于路况和路边障碍物的高质量 3D 地形数据。”

就可持续性而言,它们仍然被标记为属于安全领域,并且它们仍然在 Jessica Cussins Newman 的报告迈向人工智能安全中获得标记,该报告概述了不同的人工智能策略。这个网格就是基于这个策略。

因此,在比较了中国和法国的人工智能战略后,我会说在关注气候变化的程度上有很大的不同。英国人工智能战略接近尾声时的关键行动中,没有一项表明与气候变化有关。

我想写更多,但是没有太多关于当前战略的内容可写。

上议院任命了一个特别委员会。

看到勋爵、子爵和女男爵审查人工智能是非常奇怪的。看到旷日持久的英国退出欧盟谈判根本不是一个有启发性或光明的过程。阅读英国当前的人工智能战略同样单调乏味,当它完全不提气候或可持续发展时,英国似乎与其人口或全球社会脱节。

然而,在学术界,我感兴趣的一个倡议是关于人工智能×可持续发展目标的牛津倡议。一种可能性是由卢西亚诺·弗洛里迪教授领导的这项倡议,他的讲座是人工智能在社会中——你必须看到的机遇和风险。他还是牛津互联网研究所数字伦理实验室的主任。要想认为自己是成功的,我认为该计划必须至少在不同的方向上影响英国的地方战略。

6.美国需要一个人工智能的国家愿景

6.1 新战略会考虑气候危机吗?

看看中国、法国和印度的战略,它们普遍关注环境和可持续性。人们很容易在白宫网站上的《为美国人民服务的人工智能》的美国声明中发现,没有关注气候变化。国家人工智能研究与发展战略计划:2019 没有包含许多关于气候危机和生态环境的想法。然而,这可能并不令人惊讶,因为特朗普总统正式退出了巴黎协定,这正在正式化,将在新总统选举后一天生效。

因此,由于目前的战略和计划可以说没有关于气候变化、环境或可持续性的愿景,我们必须从其他地方寻找愿景。

6.2 人工智能的国家愿景

2019 年 10 月 23 日斯坦福人工智能研究所(HAI)发布了一个帖子。这篇文章叫做我们需要一个人工智能的国家愿景,作者是费-李非和约翰·埃切门迪,他们都是 HAI 的联合创始人。他们以明确的信息开始正文:

“通过大胆的人工智能政策和计划建立全球领导地位,对于我们社会的经济增长和稳定至关重要”

6.3 气候变化

“人工智能有能力成为我们最好和最坏意图的力量倍增器。它可以帮助我们解决最棘手的挑战:管理自然资源;减缓气候变化……”

气候变化的问题在帖子中并不明显,事实上只提到过一次,所以并不突出。然而它还是被提到了,这比美国目前的任何战略都要好。因此,与美国目前的愿景相比,这一愿景已经是一种进步。

6.4 可持续性

“我们应该通过赠款、投资和技术资源为新兴技术提供早期支持,重点是农业、制造业、医疗保健、可持续发展和清洁能源。”

可持续发展在愿景中也只被提到过一次,它可能会更加突出,但是它已经比当前的人工智能战略更好了。

6.5 将人工智能作为明确的战略重点

该文本建议建立一个跨越教育、研究和创业的新的人工智能生态系统,在十年内投资至少 1200 亿美元。

  1. ****支持公共研究追求下一代人工智能突破,重点是跨学科研究。
    预算:每年 70 亿美元。与一流大学合作建立国家和地区研究中心,强调跨学科研究和多元化团队。启动国家研究云将为公共利益研究提供高价值数据和高性能计算。
  2. ****投资教育,强调包容性。预算:30 亿美元(是目前联邦 K-12 STEM 年度支出的两倍)。美国需要在科学、技术、工程和数学(STEM)领域培养更加多样化的未来劳动力,包括人工智能和计算机科学,并支持研究和项目以解决就业替代和再培训问题。
  3. 刺激创新,支持企业家。预算:2B。创业是美国经济的核心。小企业创业委员会估计雇员少于 100 人的公司占美国企业的 98%。
  4. ****为人工智能的道德使用实施清晰、可行的国际标准和指南。与外国政府、公司和民间社会组织合作,具体实施全球人工智能原则,如经合组织制定的原则。

必须提到的是,奥巴马在任期间有一份名为 为人工智能的未来做准备的报告 于 2016 年 10 月发布。在本报告中,气候和可持续性被多次提及。正如你现在所知,这与后来的报告和特朗普政府期间的战略沟通截然相反。

总体结论

世界各地的人工智能政策是否充分解决了我们这个时代的决定性问题?我会说答案是否定的。在六个国家中,只有一半的国家提到了气候或可持续性问题,这太弱了。没有一个国家在其战略中提到“气候危机”,因此任何战略中都没有紧迫感。另一方面,必须指出的是,中国、法国和印度已经开始在其人工智能战略或计划中解决气候危机——这是朝着正确方向迈出的一大步。

如果我错过了这些不同国家的人工智能政策或战略文件的更新,请务必通过这里或其他地方的回复发送给我,以便我修改我的文章。

这里是#500daysofAI,您正在阅读第 160 篇文章。500 天来,我每天都写一篇关于人工智能或与之相关的新文章。

人工智能驱动的垄断和新的世界秩序

原文:https://towardsdatascience.com/ai-powered-monopolies-and-the-new-world-order-1c56cfc76e7d?source=collection_archive---------13-----------------------

Photo by Christian Wiediger on Unsplash

大技术、大数据、人工智能

人工智能对数据的依赖将如何赋能科技巨头并重塑全球秩序

人工智能和新技术无疑会带来巨大的变化,既有积极的,也有消极的。它们将对我们的日常生活、工作、安全和价值观产生深远的影响。

人工智能可以说是人类有史以来最危险的挑战,因为它将导致大规模的社会动荡,从长远来看,危及人类的本质。

当普通人听到人工智能对人类的威胁时,他们通常会想到两个问题:大规模失业和机器人完全取代人类,以及算法将完全主宰我们甚至可能灭绝人类的未来。然而,还有其他威胁在很大程度上被人们忽视了,因为媒体大多关注第一个挑战(失业),而好莱坞则关注机器人将取代人类的遥远未来。

由于对这两个问题的过度关注,有必要考察人工智能出现的另一个经常被忽视的后果。这一过程已经开始,而且不太可能停止——人工智能驱动的垄断的形成。

企业权力的崛起

即使现在,媒体和监管机构对跨国公司在权力和影响力上盖过民族国家越来越不满。马库齐和泰尔齐正确地注意到

在民主政府满足其公民期望的能力正在下降的时候,企业正在积聚巨大的力量,不仅是在金钱方面,最重要的是在数据方面。

这些公司包括所谓的黑手党-G (微软、苹果、脸书、IBM、亚马逊、谷歌),以及三家中国科技巨头(百度、阿里巴巴、腾讯),或 BAT

如今,跨国公司不仅在提供基本服务和促进创新方面发挥着巨大作用,而且在日益重要的网络空间保护我们,这项工作过去是由政府承担的。

苹果公司拥有将近 2400 亿美元的储备,理论上可以启动一个两倍于马歇尔计划规模的投资项目(以今天的美元计算)。

以干涉选举为例。如今,监管社交媒体、打击错误信息和宣传的是推特和脸书,而不是美国政府。另一个巨头,谷歌已经站出来保护欧盟免受恶意影响,在欧洲议会选举前禁止非欧盟来源购买政治广告,因为欧盟缺乏防止网络干预的统一框架。

这些并不是跨国公司设计和执行自己的公共政策的唯一例子。微软最近承诺投资 5 亿美元扩大西雅图经济适用房的供应,这通常是美国住房和城市发展部以及其他州和联邦公共机构的工作。在去年 11 月的巴黎和平论坛上,微软、谷歌、脸书和其他科技巨头与 50 个政府签署了新的多边网络安全协议。值得注意的是,美国、俄罗斯和中国政府没有出席。项目辛迪加

说到钱,企业已经比中等国家更强大了。例如,如果将苹果的收入与各州的预算相比,它在全球最大收入排行榜上是第第 23 位,领先于比利时、俄国、印度和墨西哥。

苹果拥有将近 2400 亿美元的储备,理论上可以启动一个两倍于马歇尔计划的投资项目(以今天的美元计算)。

根据世界银行的数据,如果我们制作一份前 100 名经济体的备选名单,将会有 69 家公司和 31 个国家。超过三分之一的世界贸易只是同一家公司的不同部门之间的交易,而不是民族国家之间的交易。

毫不奇怪,最激动人心和不朽的项目,如殖民火星或借助太阳能无人机和卫星群为世界提供普遍的互联网接入,来自私营公司而不是政府——SpaceX、脸书和亚马逊。

人工智能行业的垄断

然而,人工智能和新技术已经让大型科技变得比以往任何时候都更加强大。这是因为人工智能行业自然倾向于垄断。****

决定一个 AI 算法好坏的关键因素有两个:数据和计算能力。当数据被输入所谓的神经网络时,人工神经元会识别数据中的模式,并产生算法。随着更多的数据和大量的计算能力(在识别模式时需要执行大量的计算),算法变得越来越复杂,并给出更好的结果。

正如著名人工智能专家李开复在他的书中所说的那样,人工智能的超能力

一个网络接触到的给定现象的例子越多,它就能越准确地挑选出模式并识别现实世界中的事物。

人工智能驱动的经济的问题是,由于人工智能对数据的依赖所产生的正反馈循环,行业自然倾向于垄断。如果一家使用人工智能的特定公司胜过其竞争对手,将很难抵制垄断的自我延续循环。

Credit: Author

这样的公司,得益于已经庞大的数据集,将拥有先进的算法。先进的算法意味着更好的用户体验和更多的功能,从而吸引更多的客户。更多的客户,反过来,产生更多的数据,这进一步改善了现有的算法,使公司的产品更有吸引力,最终导致更大的客户群,无止境。

数据是新的电力

自从工业革命以来,土地的重要性一直在下降,因为工厂和机器——经济的命脉——不需要太多的空间。今天,机器和工厂仍然是全球经济的支柱,而且值得注意的是,今天最强大的国家不一定是最大的国家,例如日本、英国、德国和韩国,因为土地起着次要作用。

然而,在当今时代,数据将超越土地和机器,成为最重要的资产,战争将不是为了石油或土地,而是为了控制数据流。数据将是经济的主要驱动力。

获取数据的竞赛已经开始。目前,科技巨头通过免费服务和信息吸引我们的注意力来获取数据。

从短期来看,这些数据被用于为企业盈利的定向广告;然而,从长远来看,越来越多的数据最终会完善算法,以至于不再需要广告——因为算法会非常了解我们,从而为我们做出选择。

普通人类会觉得很难抗拒这个过程。目前,人们很乐意放弃他们最有价值的资产——他们的个人数据——来换取免费的电子邮件服务和有趣的猫视频。这有点像非洲和美洲土著部落不知不觉地将整个国家卖给欧洲帝国主义者,以换取彩色珠子和廉价饰品。如果后来普通人决定尝试阻止数据流动,他们可能会发现越来越难,特别是当他们可能会依赖网络来做出所有决定,甚至是他们的医疗保健和身体生存。Y. N .哈拉里

不管是好是坏,科技巨头们会随着越来越多的数据积累起巨大的力量。

如果政府控制数据是否会更好,这是值得怀疑的。毕竟,大多数人更愿意把自己的数据交给脸书和谷歌,而不是一个独裁的强人。

然而,在当今时代,数据将超越土地和机器,成为最重要的资产

我们将可能被迫彻底重新定义当前的政治、社会和经济体系,因为“政府乌龟跟不上技术兔子”。我们今天生活的系统是在蒸汽机和工厂时代设计出来的。它没有适应信息技术定义的时代,我们可以从美国和欧洲日益加剧的不平等和停滞不前的工资中看到这一点。正如共产主义的出现是对普通工人生活条件恶化的回应一样,人工智能的出现很可能会创造出前所未有的新意识形态和运动。

人工智能驱动的外星智能搜索——分析无线电望远镜数据

原文:https://towardsdatascience.com/ai-powered-search-for-extra-terrestrial-intelligence-analyzing-radio-telescopic-data-c9e46741041?source=collection_archive---------14-----------------------

人工智能造福社会系列—第 2.1 部分

从 SETI 了解射电望远镜信号数据

Photo by Ambir Tolang on Unsplash

介绍

在这个由两部分组成的系列文章中,我们将看看人工智能(AI)如何与开源工具和框架的力量相结合,来解决非常规领域中一个非常有趣的问题——寻找外星智能!

也许你们中的许多人已经熟悉了 SETI(搜寻外星智能)研究所,该研究所专注于试图找出宇宙中是否存在外星智能,正如其使命所暗示的那样“探索、理解和解释宇宙中生命的起源和性质以及智能的进化”。最近,我在 Kaggle 上看到了 SETI 的一个开放数据集,其中谈到 SETI 专注于几个公共倡议,这些倡议以过去发生的比赛形式在他们的数据集上利用人工智能。虽然竞争现在已经停止,但是这些数据的子集仍然可以用于分析和建模,这是本系列文章的主要重点。

我们将着眼于分析 SETI 获得的数据,作为他们过去倡议的一部分,ML4SETI 机器学习 4 寻找外星智慧。这项计划的数据是基于无线电信号的模拟数据,目标是让数据科学家找到一种可靠的信号分类算法,用于寻找外星人无线电通信的任务。这里的重点是能够准确地对不同类型的信号进行分类。

动机和意义

SETI 研究所致力于研究和工作方法,以提高他们对外星智慧的搜索。他们加速这一搜索的关键仪器之一是艾伦望远镜阵列(ATA),它位于加利福尼亚州拉森峰以北的喀斯喀特山脉的哈特克里克天文台

The Allen Telescoping Array (https://www.seti.org/ata)

艾伦望远镜阵列有助于基于无线电信号的搜索,并将 SETI 目标搜索的速度提高了至少 100 倍。这里应用人工智能或深度学习的动机可能是多方面的。

  • 为区分不同信号而优化的深度学习模型可以减少搜索时间
  • 效率,甚至可能是新的更好的方法来发现外星智慧,因为他们观察来自恒星系统的信号

虽然我们将在这里使用的数据是基于无线电信号的模拟数据,但它们与 SETI 的无线电望远镜设备捕捉的真实数据非常一致。我们现在将简要地看一下这个。

理解 SETI 数据

这里提供的信息是基于我从研究 SETI 数据的细节中收集的见解,当时他们与 IBM 合作举办了这场比赛。挑战的细节在 这里 呈现给可能感兴趣的人,关于设置和数据的许多背景信息在 这篇有用的文章 中提到。

艾伦望远镜阵列体系结构

艾伦望远镜阵列(ATA)由几个相对较小的碟形天线(天线)组成,延伸约 1 公里。这提供了非常高质量的光束形状(天空中望远镜最敏感的点)。ATA 实际上经过优化,覆盖 1000 MHz 至 15000 MHz 之间的频率。ATA 使用一种称为“波束形成”的过程来组合来自不同碟形天线的信号。通常使用这一过程,ATA 观察来自天空中非常小的窗口的关于特定恒星系统的无线电信号。在高层次上,ATA 有四个主要的概念系统,如 官方页面 中所述。

ATA architecture (https://www.seti.org/ata-technical-overview)

  • 天线收集来自太空的辐射;
  • 信号路径将来自馈源(位于天线焦点处)的辐射带回给用户
  • 监控和命令系统允许精确地移动碟形天线,并控制信号路径
  • 该网站包括整体天线配置,以及其他基础设施。

ATA 将允许远程用户通过安全的互联网连接访问和使用仪器。

射电望远镜时间序列信号

从使用的角度来看,可以同时观察到三个独立的光束,并一起使用来决定观察智能信号的可能性。

控制数据采集系统的软件,实时分析该无线电信号时间序列数据并将数据写入磁盘。它叫做索纳塔(SETIontheATA)。

为了找到相关信号,SonATA 软件将信号功率作为频率和时间的函数进行计算,并重点关注持续时间超过几秒钟的功率大于平均噪声功率的信号。将功率表示为频率和时间的函数的最佳方式是通过频谱图,或“瀑布图”。

下图描绘了来自 ata 的真实无线电信号数据的样本频谱图。这是所谓的“窄带”信号的经典例子,这是索纳塔主要在数据中搜索的内容。

Signal observed at the Allen Telescope Array from the Cassini satellite while orbiting Saturn on September 3, 2014 (Source: https://medium.com/@gadamc/using-artificial-intelligence-to-search-for-extraterrestrial-intelligence-ec19169e01af)

信号的功率用黑白刻度表示。y 轴是时间,x 轴是频率(Hz)。您可以清楚地看到,信号开始于大约 8429245830 Hz,经过 175 秒的观察,漂移至 8429245940 Hz。

分析无线电信号数据的需要

SETI 捕获这些数据并在信号中搜索特定模式的原因是因为这是我们用来与太空中的卫星通信的信号。因此,如果一个看似先进的外星文明试图引起我们的注意,他们可能会向我们发送信号,这是有希望的!

获取模拟 SETI 数据

现在我们已经有了足够的关于 SETI 及其数据的背景信息。让我们尝试获取将用于训练深度学习模型的数据集。不幸的是,ML4SETI 的竞争早已结束,但幸运的是,我们仍然可以获得一部分数据。请随时查看 ML4SETI 【入门】 页面,了解如何获取数据集。如果你想在没有阅读背景信息的情况下直接进入数据,只需前往 这个 Jupyter 笔记本 !获取这个数据集的一个更简单的方法是从 Kaggle

由于处理真实数据存在挑战,因此构建了一组模拟信号来近似真实信号数据。典型地,SETI 研究所的研究人员经常观察到许多信号类别。对于这个数据集,总共有七个不同的类。

  • 亮像素
  • 窄带
  • 窄带宽
  • 噪音
  • 方波脉冲窄带
  • 波浪线
  • squigglesquarepulsednarrowband

类名基本上是描述它们在光谱图中的样子。

主要目标

既然我们有了所有的背景资料和数据,就很容易确定我们的主要目标。给定总共七个不同的无线电信号类别,包括噪声和每个类别总共 1000 个样本,利用深度学习模型建立准确的分类器。虽然我们将在本系列的第二部分构建深度学习模型,但在本文的剩余部分,我们将更深入地研究数据集,以更好地理解我们正在处理的内容。

分析模拟 SETI 数据

我们使用原始格式的小型 SETI 数据**primary_small_v3**只是为了展示如何加载和处理数据。记住,处理信号数据时,您将需要开源的**ibmseti**包。你可以用**pip install ibmseti**安装它。在进行一些基本的处理和分析之前,让我们先加载原始数据集。

***7000***

这告诉我们,我们的数据集中总共有 7000 个信号样本。让我们尝试处理和可视化其中一个信号。

因此,基于上面的视觉效果,我们已经成功地将一个narrowband信号在可视化之前处理成一个声谱图。让我们看看每类信号样本的总数。

***brightpixel                       1000
narrowbanddrd                     1000
squiggle                          1000
narrowband                        1000
squigglesquarepulsednarrowband    1000
noise                             1000
squarepulsednarrowband            1000
Name: signal_classification, dtype: int64***

就像我们之前提到的,我们每门课总共有 1000 个样本,坦白地说并不是很多!稍后会详细介绍。让我们用光谱图来处理和可视化一些样本信号。

这给了我们不同信号的样子。你可以看到,这些信号并不总是很容易区分,因此这是一个更艰巨的分类挑战。

加载已处理的 SETI 数据

现在,对于本文的剩余部分和本系列的下一篇文章,您可以手动利用**ibmseti**包将每个信号处理成频谱图,或者只需下载并使用 Kaggle 中可用的数据集中已经处理过的频谱图文件。记住,处理过的数据集在**primary_small**文件夹中。解压其内容后,这就是目录结构的样子。

我们总共有 7 个类,每个类有 800 个训练样本,100 个验证样本和 100 个测试样本。现在让我们看一些样本处理过的声谱图信号文件。

使用 Keras 加载和可视化光谱图

Keras 框架有一些优秀的工具来处理包含这些光谱图的图像文件。下面的片段展示了一个样本频谱图。

用 OpenCV 加载和可视化光谱图

有很多 OpenCV 爱好者喜欢使用这个框架来满足他们所有的图像处理需求。你也可以用它来处理光谱图。请记住,OpenCV 默认以 BGR 格式而不是 RGB 格式加载这些图像。我们在下面的代码中展示了同样的内容。

可视化处理过的 SETI 样本数据

现在让我们来看一下从处理过的数据集中选择的七个不同的样本信号,我们稍后将使用它们进行分类。

这向我们展示了数据集中不同类型的无线电信号,这些信号已经过处理,随时可以使用。

了解无线电信号模拟数据

这里所有的模拟信号都是由信号和噪声背景之和产生的。以下关于信号的背景资料,已从 这篇精彩的文章 中整理出来,以更详细地了解每个信号

SETI 数据上的深度学习

假设我们有七个信号类别的光谱图图像,我们可以利用基于视觉的深度学习模型来构建鲁棒的图像分类器。在本系列的下一篇文章中,我们将利用卷积神经网络来了解如何构建准确的分类器来区分这些信号类别!

卷积神经网络简介

最受欢迎的用于计算机视觉问题的深度学习模型是卷积神经网络(CNN)!

Source: becominghuman.ai

CNN 通常由多个卷积和池层组成,这些层有助于深度学习模型从图像等视觉数据中自动提取相关特征。由于这种多层体系结构,CNN 学习了特征的健壮层次,这些特征是空间、旋转和平移不变的。

CNN 模型中的关键操作如上图所示。任何图像都可以表示为像素值的张量。卷积层有助于从该图像中提取特征(形成特征地图)。网络中较浅的层(更接近输入数据)学习非常普通的特征,如边、角等。网络中更深的层(更靠近输出层)学习与输入图像相关的非常具体的特征。下图有助于总结任何 CNN 模型的关键方面。

我们将利用迁移学习的力量,其中我们使用预先训练的深度学习模型(已经在大量数据上训练过)。在下一篇文章中会有更多的介绍!

后续步骤

在下一篇文章中,我们将基于 CNN 构建深度学习分类器,以准确分类 SETI 信号。敬请期待!

本文使用的代码可以在这个 资源库 中的 my GitHub 上获得。

人工智能驱动的外星智能搜索——深度学习信号分类器

原文:https://towardsdatascience.com/ai-powered-search-for-extra-terrestrial-intelligence-signal-classification-with-deep-learning-6c09de8fd57c?source=collection_archive---------22-----------------------

人工智能造福社会系列—第 2.2 部分

基于深度学习的 SETI 射电望远镜信号分类

Photo by Donald Giannatti on Unsplash

介绍

欢迎(或者欢迎回来!)到 AI for social good 系列!在这个由两部分组成的系列文章的第二部分,我们将看看人工智能(AI)如何与深度学习等开源工具和技术的力量相结合,帮助我们进一步寻找外星智能!

这个两部分系列的第一部分 中,我们制定了我们做这个项目背后的主要目标和动机。简而言之,我们正在观察来自 SETI(搜寻外星智慧)研究所数据模拟的不同射电望远镜信号。我们利用技术将无线电信号处理、分析和可视化为频谱图,频谱图基本上是原始信号的可视化表示。

Signal observed at the Allen Telescope Array from the Cassini satellite while orbiting Saturn on September 3, 2014 (Source: https://medium.com/@gadamc/using-artificial-intelligence-to-search-for-extraterrestrial-intelligence-ec19169e01af)

在本文中,我们的重点将是尝试使用深度学习为总共七种不同类型的信号构建一个强大的无线电信号分类器!

加载 SETI 信号数据

就像我们在上一篇文章中讨论的那样,模拟的 SETI 无线电信号数据集在 Kaggle 中可用。记住,处理过的数据集在**primary_small**文件夹中。解压缩其内容后,这就是目录结构的样子。

我们总共有 7 个不同的信号类别要分类,每个类别总共有 800 个样本用于训练,100 个样本分别用于验证和测试。考虑到噪声已被添加到模拟信号数据中,再加上每类样本数量较少,这是一个很难解决的问题!在我们开始之前,让我们加载我们将用于构建模型的必要依赖项。这里我们将利用 TensorFlow 的**tf.keras** API。

***./data/train
./data/valid
./data/test***

可视化样本 SETI 信号

回顾一下上一篇文章,看看我们正在处理的不同类型的信号,我们可以使用下面的代码来可视化它们的频谱图。

对于我们正在处理的不同信号样本,一切看起来都很正常!

数据生成器和图像增强

由于我们每个类的训练样本数量很少,因此获得更多数据的一种策略是使用图像增强来生成新数据。图像增强背后的想法就像它的名字一样。我们从训练数据集中加载现有图像,并对其应用一些图像变换操作,如旋转、剪切、平移、缩放、翻转等,以产生现有图像的新的、改变的版本。

由于这些随机变换,我们每次得到的图像并不相同。基于我们正在解决的问题,我们需要小心增强操作,这样我们就不会过度扭曲源图像。

我们将对我们所有的训练数据进行一些基本的转换,但保持我们的验证和测试数据集不变,只是对数据进行缩放。现在让我们构建我们的数据生成器。

我们现在可以构建一个样本数据生成器,以便了解数据生成器和图像增强是如何工作的。

给定我们总共有 7 个类,标签是一次性编码的,因此每个标签是大小为 7 的一次性编码向量。

基于 CNN 的深度迁移学习

迁移学习的想法并不是一个新概念,当我们处理较少的数据时,它是非常有用的。假设我们有一个预先训练好的模型,该模型以前是根据大量数据训练的,我们可以用这个模型来解决一个数据较少的新问题,并且应该理想地得到一个性能更好、收敛更快的模型。

有各种各样的预训练 CNN 模型,它们已经在 ImageNet 数据集上被训练,该数据集具有属于总共 1000 个类别的大量图像。这个想法是,这些模型应该作为图像的有效特征提取器,也可以根据我们执行的特定任务进行微调。预先训练的模型可以完全冻结,当我们在新数据集上训练时,我们根本不改变层权重,或者当我们在新数据集上训练时,我们可以微调(部分或完全)模型权重。

在我们的场景中,我们将尝试对我们预训练的模型 进行部分和完全的微调。

预先训练的 CNN 模型

迁移学习的一个基本要求是要有在源任务中表现良好的模型。幸运的是,深度学习世界相信分享。他们各自的团队已经公开分享了许多最先进的深度学习架构。预训练模型通常以模型在被训练到稳定状态时获得的数百万个参数/权重的形式被共享。每个人都可以通过不同的方式使用预先训练好的模型。

TensorFlow 中提供了预训练模型,您可以使用其 API 轻松访问。我们将在本文中展示如何做到这一点。你也可以从网上获得预先训练好的模型,因为大多数模型都是开源的。

对于计算机视觉 ,可以利用一些流行的模型包括,

我们将在文章中使用的模型是 VGG-19 和 ResNet-50。

VGG-19 模型

VGG-19 模型是建立在 ImageNet 数据库上的 19 层(卷积和全连接)深度学习网络,其建立的目的是图像识别和分类。这个模型是由卡伦·西蒙扬和安德鲁·齐泽曼建立的,并在他们题为 “用于大规模图像识别的非常深的卷积网络” 的论文中提到。我推荐所有感兴趣的读者去阅读这篇文章中的优秀文献。下图描述了 VGG-19 模型的架构。

ResNet-50 型号

ResNet-50 模型是建立在 ImageNet 数据库上的 50 卷积块(每个块中有几层)深度学习网络。这个模型总共有超过 175 层,是一个非常深的网络。ResNet 代表剩余网络。下图显示了 ResNet-34 的典型架构。

总的来说,深度卷积神经网络导致了图像分类准确性的重大突破。然而,随着我们深入下去;神经网络的训练变得困难。其原因通常是因为消失梯度问题。基本上,当梯度反向传播到更浅的层(更接近输入)时,重复的张量运算使梯度变得非常小。因此,精度开始饱和,然后也下降。残差学习试图用残差块解决这些问题。

利用跳过连接,我们可以允许网络学习身份函数(如上图所示),这允许网络通过残差块传递输入,而不通过其他权重层。这有助于解决渐变消失的问题,也有助于保持对高级功能的关注,这些功能有时会因多级最大池而丢失。

Source: https://towardsdatascience.com/understanding-and-coding-a-resnet-in-keras-446d7ff84d33

我们将使用的 ResNet-50 模型包括 5 个阶段,每个阶段都有一个卷积和单位块。每个卷积块有 3 个卷积层,每个单位块也有 3 个卷积层。

深度迁移学习与 VGG-19

这里的重点是采用预训练的 VGG-19 模型,然后对网络中的所有层进行部分和全部微调。我们将为下游分类任务在模型中添加常规密集和输出图层。

部分微调

我们将以 VGG-19 模型开始我们的模型训练,并对模型的最后两个模块进行微调。这里的第一项任务是构建模型架构,并指定我们想要微调的块/层。

现在,我们将对模型进行 100 个纪元的训练。我在每个时期后保存模型,因为我有很多空间。除非你有很多存储空间,否则我不建议你这么做。你总是可以利用像**ModelCheckpoint** 这样的回调来集中存储最好的模型。

我们可以使用下面的代码片段来查看整个模型学习曲线。

看起来不错,但随着时间的推移,验证数据集的损失和准确性肯定会有很大的波动。

完全微调

在我们的下一个培训流程中,我们将采用 VGG-19 模型,对所有模块进行微调,并添加我们自己的密集层和输出层。

下图描绘了培训过程的学习曲线。

就验证准确性和损失而言,随着时期的增加,看起来更加稳定。

用 ResNet-50 进行深度迁移学习

本节的重点将是采用预训练的 ResNet-50 模型,然后对网络中的所有层进行完整的微调。我们将照常添加常规密集图层和输出图层。

完全微调

对于我们的训练过程,我们将加载预训练的 ResNet-50 模型,并对整个网络进行 500 个时期的微调。让我们从构建模型架构开始。

现在让我们训练总共 500 个时期的模型。

下图显示了我们训练模型的学习曲线。

根据测试数据评估模型性能

现在是检验我们训练好的模型的时候了。为此,我们将对测试数据集进行预测,并基于多类分类问题的相关分类度量来评估模型性能。

负载测试数据集

我们首先利用之前构建的数据生成器加载测试数据集和标签。

***Found 700 images belonging to 7 classes.****((700, 192, 192, 3), (700,))***

建立模型性能评估函数

我们现在将构建一个基本的分类模型性能评估函数,我们将使用它来测试三个模型的性能。

我们现在准备在测试数据集上测试我们的模型的性能

模型 1 —部分微调的 VGG-19

这里,我们在测试数据集上评估了部分微调的 VGG-19 模型的性能。

在测试数据集上,总体准确率为 86%,相当不错!

模型 2 —完全微调的 VGG-19

这里,我们在测试数据集上评估了我们完全微调的 VGG-19 模型的性能。

测试数据集上的总体准确度得分为 85% ,略低于部分微调的模型。

型号 3 —完全微调的 ResNet-50

这里,我们在测试数据集上评估了完全微调的 ResNet-50 模型的性能。

我们得到的总体准确度分数为 88% ,这绝对是测试数据集上迄今为止最好的模型性能!看起来 ResNet-50 模型表现最好,因为我们确实训练了它 500 个纪元。

样本测试数据的最佳模型预测

我们现在可以用我们最好的模型来预测样本无线电信号频谱图。

结论

这将我们带到我们关于利用深度学习进一步搜索外星智能的两部分系列的结尾。您看到了我们如何将无线电信号数据转换为频谱图,然后利用迁移学习的能力来构建分类器,这些分类器表现非常好,即使每类的训练数据样本数量非常少。

本文使用的代码可以在 my GitHub 的这个 资源库 中获得。

人工智能问题是人类的问题

原文:https://towardsdatascience.com/ai-problems-are-human-problems-528d12ff000d?source=collection_archive---------20-----------------------

Harvard’s Belfer Center for Science and International Affairs — a paragon of higher learning and perhaps even higher folly. | Source

我最近在哈佛大学肯尼迪政府学院参加了一个名为“治理人工智能——我们如何做”的会议。参加会议的都是知名人士,从杰出的哈佛教师,到网络安全专家,再到与丹麦高等教育和科学部长合作的代表团成员。作为一名非常低调的软件工程师和未来的研究生,至少可以说我感到很害怕。

热烈的讨论从围绕人工智能治理和政策的挑战,到围绕术语“人工智能”而非“机器学习”的恐怖神话,到透明的算法决策和问责制问题;上午 8 点聚会的崇高话题。这些话题都是我很感兴趣的,所以在整个讨论过程中,我的神经都放松了。我没有静静地坐在椅子上发抖,而是很快专注于该领域专家之间有趣的玩笑。放松后,我看了看房间,不禁注意到这种担忧——我敢说,是恐惧——微妙地渗透到经过训练的专业门面中。随着一个技术末日的笑话引发的每一次紧张的笑声,专业知识的面纱越来越薄。我很快明白了一些事情:“甚至一些专家也不知道如何应对人工智能的挑战。”

纵观历史,我对大规模解决问题的本质不抱任何幻想。天才的技术官僚很少注意到、致力于并向大众介绍彻底的变革。相反,神奇的创新往往是看似完全不同的想法的综合;文化的转变不是由于政府的政策,而是由于集体意识的转变和规范的转变。然而,有时我仍然想象一些领域专家有,如果不是所有的答案,那么至少比像我这样一个没有装饰的平民有更多的答案。在这次讨论中,情况显然不是这样。

那么,是什么让管理像人工智能这样先进的技术带来的责任变得如此困难?底层技术是否过于复杂?我们是在和我们几乎不了解的力量合作吗?当我听着从墙上反射回来的困惑时,答案对我来说是显而易见的;在一阵令人不舒服的病态笑声中达到高潮:控制和治理人工智能面临的最紧迫的问题与人类自文明诞生以来面临的问题是一样的。

人性激发的智慧

人类天生以自己的形象创造工具。我们经常从大自然或我们自己的生物学中获得灵感,以塑造我们自己的系统来挫败我们现实中的压迫性规则。人工智能系统是模仿人类大脑的运作方式;接受信息并激活神经元,这些神经元本身并不聪明,但结合起来创建概率模型,模仿我们自己的模式识别智能。考虑到相似性这一概念,随后对我来说非常明显的是,人类创造的人工智能所面临的问题将是困扰人类智能的问题。

几千年来,思想家们一直在诊断这些人类特有的疾病。

问责制、透明度和模型偏差是会议中出现的一些问题的一个小例子。大赦国际需要对其决定负责;不管是好是坏,他们必须被赋予一种动力,或一个行动者,以获得赞扬或指责以及随后的反响。人工智能需要透明,以人类可以理解和内化的方式揭示其决策的逻辑路径。人工智能必须努力以公正的方式行事——从无害的数据集学习——这样它的决定才能反映我们最高的社会价值观。当想到数字情报的责任时,这一切听起来令人不知所措,而且格格不入。然而,一些观点可以帮助我们理解这些挑战:这些同样的症结自人类社会诞生以来就一直困扰着它,并且是我们自己尚未解决的非常人性化的问题。

从任何有意义的意义上来说,人类的权力系统和组织结构都很难问责、透明或公正。倒闭银行的高层领导在 2008 年帮助全球经济崩溃后没有被追究责任。政府和私营企业未能做到透明,因为它们通过谎言和宣传胁迫选民来获取权力或利润。个人经常不能认识到偏见是多么容易潜入他们自己的现实生物模型。几千年来,思想家们一直在诊断这些人类特有的疾病。在人工智能的背景下,任何赋予这些挑战完全新奇的概念都应该立即被认为是谬误,因为人类有着大量相同的斗争记录。

我们的日常生活也一样复杂

直到围绕人工智能的问题被认识到是人类的,并且潜在地是社会的,在它们的核心,那些受智能系统的社会整合所导致的最糟糕的愚蠢行为影响最大的人可能会被视为光顾嘘混有技术官僚,行话充斥的“解决方案”。技术专家习惯于居高临下地对待那些据称没有受过良好教育、无法理解问题的复杂性和细微差别的人。历史上,受影响最小的精英们选择躲在复杂的高墙后面假装无辜,而不是接受教育、宣传和让技术为社会服务的责任。

技术官僚的论点与这样一个事实完全矛盾,即在我们的日常生活中,同样存在着我们视为常识的更复杂的概念。一个苦苦挣扎的单身母亲的麻烦是无穷无尽的复杂,然而很大一部分甚至“未受教育”的社会已经开始认为这个问题是一个值得解决的问题。爱情、情感和人与人之间关系的复杂性永远是模糊不清的;比机器如何学习打乒乓球要重要得多。这些类型的人类问题需要大量的内省和同情来理解并以富有成效的方式采取行动。仅仅因为它们是人类的条件并不意味着它们是简单的——特别是不比任何类型的数字技术简单。然而,我们每个人都在自己的生活中面对这些挑战,并能够发展对潜在系统的理解。与我们每天面临的生存斗争相比,诊断人工智能面临的问题应该是在公园里散步。

我毫不怀疑,任何将人工智能视为他人的普通人都会提出更合理的解决方案来应对这项技术带来的挑战。

通过更人性化的视角理解人工智能面临的挑战无疑将成为未来解决方案的核心。即使在今天,猖獗的偏见和新闻供稿推荐的过度适应最好通过人类的类比来看待。一个天真的、过度定制的新闻推送推荐者就像一个专门筛选新闻的人类朋友,真的想让你自我感觉良好,因此只给你提供符合你先入为主观念的文章。这位朋友已经了解了你的某些特征,并给你贴上了“自由主义者”、“拉丁人”、“跨性别者”等标签。他们还学会了识别新闻文章中的模式,这些模式也分配了类似的标签,如“吸引自由主义者”、“激怒同性恋者”等。因为你的朋友只是想天真地取悦你,因为他们会从你的快乐中获利,他们只会向你推荐标签匹配的新闻文章。我们知道,这位朋友正在损害任何民主的知情观念;因为这需要对立和不同观点的健康结合。

这种拟人化的神经算法应该作为智能系统中诊断和预测任何此类问题的模型。当想象如何让人工智能负责时,我们应该看看让强大的人类负责的理想。智能计算的透明度应该反映人类有史以来最伟大的教师和沟通者的标准。应该像人类一样根除偏见:考虑尽可能广泛和多样的视角。

在哈佛大学的房间里,技术专家和政策专家关注特定机器学习的细微差别,导致头脑陷入混乱,但我毫不怀疑,任何将人工智能视为另一个人的普通人都会提出更合理的解决方案来应对技术带来的挑战。

参与讨论的人从来没有考虑过用普通人的智慧来寻找解决办法。尽管人们滔滔不绝地谈论智能系统应该如何遵循美国明确而庄严的民主参与形式,但同样的民主存在深刻而悲剧性的缺陷这一概念从未出现过。任何在哈佛广场等公共汽车的普通人都可以告诉你“民主”的缺陷,因为他们在优越感的花言巧语中表现出平均的,或者可悲地低于平均水平的生活质量;毫无疑问,这是一个更加微妙的观点,可以包含在对人工智能治理的考虑中。

AI 应该是我们的镜子

虽然人类确实在与这些有时复杂、反思性的概念进行斗争,并且人类的解决方案可能会有缺陷,但我们应该认识到人工智能给我们提供的重要机会。关于人工智能面临的挑战的讨论表明,人类几乎没有克服这些障碍。然而,在讨论的过程中,我们得到了一个独特的机会来谦卑我们的宗教人道主义,并认识到我们确实有尚未解决的重大问题。

在接受普通人提供的证据失败的地方,我们应该努力使用人工智能作为破冰船,刺激围绕政府和个人问责制、企业透明度、系统性偏见和仇恨的讨论。或许人工智能的镜头更多的可以充当镜子的角色;当我们开始意识到另一边的创造物非常类似于我们这些偶然发现智慧的稍微聪明一点的灵长类动物。

我相信我们未来的繁荣取决于在我们的创造中看到自己,并认识到人类必须解决的深刻缺陷。同理心和技术已经达到了一个交汇点,如果强者继续不承认自己的缺点,拒绝真正倾听那些“在他们之下”的人,这可能会带来灾难。没有任何考虑,甚至比最富有的精英更强大的机器可能很快就会发挥巨大的影响力;充满了人类最大的缺点,因为他们的创造者太害怕看自己,看不到改进的空间。

AI 证明了它真的真的很蠢

原文:https://towardsdatascience.com/ai-proves-its-really-really-dumb-3509608f680f?source=collection_archive---------19-----------------------

我们被告知,人工智能(人工智能)将取代我们的工作,管理我们的家庭和生活,并几乎成为我们这些可怜的、愚蠢的人类的虚拟奴隶。机器中的大脑有能力在国际象棋中胜过我们,一秒钟处理数千次计算,并且从不要求休假或健康保险、休假或产假。

未来就在眼前,伴随着一声响亮的巨响,震撼着我们脆弱的心灵,我们完全,毫无疑问要为这一切负责。我们用编码制造的弗兰肯斯坦生活在一个电荷中,它可以预测我们的一举一动,并像哈尔一样,告诉我们“吃一颗压力丸”并冷静下来。毫无疑问,它已经扭转了我们的局面,而我们才是那些抱怨“我的思想要崩溃了”的人。

我几乎要屈服于未来就在眼前的信念,感谢上帝,我不会在这里看到它对人类的破坏性。但是,就像有时发生的那样,一个奇怪的命运转折击中了我。啪!闪光!哦,等等,这不是一本漫画书,但它确实感觉像来自飞侠哥顿或其他超级英雄之一。

我手挨着头,盯着面前的 700 行字体,想知道为什么我以前没有看到它。出了什么问题?我相信人工智能,它不会做错事。当然,这是对的,我从未质疑过。

请允许我在这里提供一些背景知识。它确实与这个有趣的发现有关。

Photo by Kaitlyn Baker on Unsplash

我正在写书、短篇小说、博客等。这已经成为我想集中精力的一件事。但是写作不仅仅是写作,尤其是涉及到书籍的时候。写一本书不仅需要研究和专注,还需要解决所有作家都讨厌的被动语态。或者,有时,您将使用哪个视点(POV)。

您是只能使用一个视点,还是可以使用多个视点?时间框架怎么样?你能不能像《去年在马林巴德》那样,像《日落大道》的开场场景那样来回切换?

我能从一只警惕的松鼠的角度讲这个故事吗?这只松鼠栖息在窗外的一根树枝上,这个地方提供了人们和困境的美妙视角。我可以做到所有这些,甚至更多,但仍有一件事我可能需要一些帮助;标题。

书名统治着书籍写作的王国,因为书名可以卖书。我不在乎别人告诉你什么,他们写作是为了卖书,不是因为他们“必须”这样做,也不是因为“这是我的生活”。垃圾。书籍设计师会告诉你不仅仅是标题,还有类型、颜色、位置、图形的使用等等。

不,抱歉,伙计们,我不确定这是否像他们想的那样科学。但是标题,最重要的是,似乎提供了一点额外的东西,可以抓住读者的鼻子,吸引他们翻页。标题规则。

你如何写出一个肯定会火的书名?作家不是标题制作的大师。作家用甜言蜜语,发人深省的话语填满页面,把读者带到他们希望去的地方。或者他们拓展思维,强化麻木的想法,认为这个作家一定比我聪明,所以也许我应该试着去读这本书。

苏珊·桑塔格,谢谢,我知道你才华横溢,但我还没有完全接受你的才华。我热爱摄影,所以当谈到你的作品时,这是我全力以赴的一个地方。

毫无疑问,书名可能非常俗气,但它们仍然能卖书。电影也一样。有多少著名的电影是以不同的片名开始的?在那座桥被跨过之前,在编剧被赶出片场或制片人的办公室之前,它会被放在文件柜里或被扔在地板上,没有被制作出来,是一种浪费。

换个标题,它就要去填补当地 triplex 或其他地方的席位,然后在国外市场吞噬当地货币。头衔为王。给我一点空间。我不是有意性别歧视,但是如果我说“头衔是女王”,那会有完全不同的意思,不是吗?

Photo by Victor on Unsplash

有哪些比较出名的电影改了名字?应该是 3000 美元的“漂亮女人”怎么样那会卖票吗?不,不会的。或者詹姆斯·邦德奖得主《明天不会死》本来就是《明天不会说谎》汤姆·克鲁斯的《明日边缘》本来是“你所需要的只是杀戮”

然后是“飞机上的蛇”,它最初出现在“太平洋航空公司 121 航班”中人们想要动作、戏剧、娱乐,而不是航班时刻表。以“回到未来”开始的这个非常成功的系列首次出现在一个名为“来自冥王星的太空人”的剧本中。那张能卖出去吗?

是的,头衔非常重要,营销人员都知道这一点;作家的尝试,但他们不擅长。作家经常会因为许多奇怪或不太奇怪的原因爱上一个标题,他们想坚持下去。但是,如果你想赚很多钱,你可以效仿芭芭拉·卡特兰,她写了 723 部小说,被翻译成 38 种语言,并获得了吉尼斯世界纪录中一年出版最多小说的称号。

卡特兰的产量是每月两本浪漫小说,每本 5 万字。她于 2000 年去世,享年 98 岁,是的,她活得很辉煌。她的书卖了多少?十亿份。我想她的标题是对的。

亲爱的女士没有用 AI。我想她有那种直觉,知道,真的知道,她的读者想要她笔下的处女女主角是什么样的。我还知道她不用打字机或美国印第安铅笔(杜鲁门·卡波特式的),因为她向助手们口述她的书,助手们在她众多沙发中的一张上懒洋洋地写下并录下。

她是从标题开始还是后来想出来的?我认为我们永远不会知道,除非有人,那些“黑暗中的好人”中的一个,想研究到死。卡特兰一下午的工作通常是 7K 字。还不错。有多少草稿,如果有的话?没人知道。

Photo by Markus Spiske on Unsplash

今天,我们试着在标题选择上更专业一些。当有人提供一个免费的书名生成器程序,可以生成成百上千的书名时,我就掉进了这个兔子洞。是的,有许多这样的标题生成器程序,它们分为许多类别;犯罪、爱情、非小说等。你所要做的就是给它一些关键词,然后你就可以开始比赛了。

当我试着输入我的关键词时,它给了我 700 个标题,其中一些非常可笑,以至于我无法想象有人会认为它值得印刷它的纸张。为了不使用我的样本,我决定尝试一种新的方法,我选择了圣经。对于我的关键词,我用了:宗教,十诫,圣经,布道。它提供了什么?

一个快速列表出现了,我被指示选择两个,然后从那里开始。这是我得到的:

懒人宗教指南,十诫,圣经,布道

宗教、十诫、圣经、布道:你真的需要吗?这将帮助你决定

不要被宗教、十诫、圣经、布道所迷惑

你听说了吗?宗教、十诫、圣经、布道是你成长的最佳选择

现在你可以安全地完成你的宗教,十诫,圣经,布道

如何用宗教、十诫、圣经、布道省钱?

当然,我可以选择更好的/不同的关键词,但是这 700 个标题中的一些仍然是愚蠢和无用的。它能给我提供别的东西吗?正如我在努力变得积极时所坚持的,如果你去寻找,总会有面包屑。

我曾经上过的一个海洋学课程的教授告诉我们“寻找你的蜗牛”,一旦你找到了,成为专家,每个人都会来找你。我把它转到“寻找你的面包屑”,你会对你的发现感到惊讶。

是的,这份清单可能会让我以不同的方式思考,一个转折,一个可以让整个事情变得特别的词。不是完全的损失,但通读所有 700 本书是乏味的,但面包屑在那里。我爱怜地把它们收集起来,放在一个安全的地方,以备将来使用。

你如何找到一个免费的标题或标题生成器?做一个简单的谷歌搜索。你会找到它们,希望还能找到一些意想不到的、非常棒的面包屑。

游戏 AI 的实用价值

原文:https://towardsdatascience.com/ai-research-and-the-video-game-fetish-71cb62ffd6b3?source=collection_archive---------9-----------------------

我们通过自动化消遣获得了什么?

仅凭一项任务就凭直觉判断一台机器有多聪明,或者有多大能力,这不是一个好主意。20 世纪 50 年代的跳棋游戏机器让研究人员感到惊讶,许多人认为这是人类推理水平的巨大飞跃,但我们现在意识到,在这场游戏中实现人类或超人的表现远比实现人类水平的一般智能容易。事实上,即使是最优秀的人类也很容易被简单启发式搜索算法击败。人类或超人在一项任务中的表现不一定是在大多数任务中接近人类表现的垫脚石。

——卢克·休伊特

是什么让桌游和电子游戏如此吸引人工智能研究?它始于 20 世纪 50 年代的跳棋算法,当时研究人员对跳棋算法表现出的“思维”感到惊讶。接下来是国际象棋,它一直成为人工智能研究的焦点,一直到 2000 年。快进到 2015 年,一个神经网络玩超级马里奥的病毒视频增加了对视频游戏人工智能的主流兴趣,并超越了视频游戏开发者的小众领域,进入了主流数据科学玩笑。

就在本周,脸书为正在进行的扑克人工智能算法列表做出了贡献。

当 DeepMind 进入画面时,事情变得更有趣了。在 2014 年被谷歌收购后,媒体越来越多地关注该公司及其人工智能应用。首先是著名的 AlphaGo 算法,它在 2016 年的古代棋盘游戏围棋中击败了世界冠军(还有一部关于网飞的纪录片)。然后,AlphaZero 重新激起了人们对国际象棋算法研究的兴趣,它使用了一种与蒙特卡洛技术相结合的深度学习方法,而不是 IBM 在 20 世纪 90 年代和 Stockfish 在 21 世纪初使用的 alpha-beta 剪枝算法。

DeepMind 随后将注意力从桌游转移到了视频游戏上,比如星际争霸 2上古防御 2 (DOTA 2)。在这一点上,很明显一种模式正在发生。

DeepMind 正在花费大量的资源和时间来自动化娱乐活动,而历史告诉我们,这很少能转化为现实世界的实际价值。如果是这样的话,常识会告诉我们,铁杆视频游戏玩家会因为他们的战略才华而大受欢迎。如果一个算法因为赢得了星际争霸而有价值,那么一个人类视频游戏玩家对企业和军队的战略职能难道不应该同样有价值吗?

“我不确定 AlphaZero 的想法是否容易推广。游戏是一件很不寻常的事情。”— 佩德罗·多明戈斯

我知道你们有些读者在想什么。游戏玩家是一个人,如果一个算法可以像人一样(或者比人更好)玩游戏,那么它已经复制了人类的智能。这是一种错误的思考方式,因为一个算法可能比你更快地解决 24653546734 + 5345434534,但这并不意味着它复制或超越了人类的智能。仅仅因为一个算法被优化来做一个任务(比如玩星际争霸)并不意味着它可以被优化来做任何任务。如果没有显式的启发和硬编码,当在一个狭窄定义的任务之外冒险时,算法会失败。

另一个相反的观点是,目标不是尽可能高效地解决游戏,而是让它“学习”如何在没有明确指导和启发的情况下解决游戏。我理解这里的目标,但我认为它被边缘化了,因为事实上它只是被训练如何做一个任务,并以一种蛮力的方式去做(稍后会有更多的介绍)。

游戏似乎是 DeepMind 的主要重点和焦点。如果你看一下他们项目的公开列表,绝大多数都与游戏相关。这是为什么呢?运行大规模计算和价值数千年的游戏有什么意义…只是为了打败一个能在几周内用少得多的数据掌握游戏的铁杆玩家?

更重要的是,启发式可以创造一个体面的人工智能,而且成本更低。我们都知道目标是让一台机器“学习”做一项任务,而不需要为它显式编码,但是讽刺的是,我们训练、训练、训练只是为了让它在执行任务之前就学习一项任务,结果导致了缓慢而低效的实现。与此同时,传统的启发式方法会跳过学习部分,立即有效地做到这一点。

“大多数现实世界的战略互动都包含隐藏信息。我觉得这一点被大多数人工智能社区忽视了。”脸书人工智能研究科学家诺姆·布朗

这种对人工智能研究的游戏迷恋很难被忽视,我认为有必要探索为什么。游戏在人工智能研究中有三个主要优势,我们将会涉及:

  1. 博弈是一个完全独立的问题,所有可能的事件、变量和结果都是已知的。
  2. 数据可以通过随机游戏在游戏中生成。
  3. 由于可预测和受控的环境,游戏可以有确定的结果。

当游戏捕捉现实世界的问题时

我必须公平。deep mind用 AlphaFold 在蛋白质折叠方面做了显著的工作,最近它的贡献得到了一些认可。已经有的其他项目也找到了工业应用。因此,DeepMind 所做的不仅仅是昂贵地取代游戏玩家。

我还会补充一点,当你把目光放在深度学习之外,考虑其他“AI”算法时,游戏和实际问题之间肯定有一些解决方案重叠。当你看运筹学的时候尤其如此。例如,使用树搜索/线性规划算法来解决数独也可以被公式化来解决像调度这样的物理约束问题。我在另一篇名为数独和时间表的文章中谈到了这一点,并在下面的视频中介绍了这一点:

这种相同的树搜索方法可以改编成 alpha-beta 剪枝算法来赢得国际象棋和其他对抗性的回合制游戏。这实际上是 IBM 在 20 世纪 90 年代的深蓝算法中使用的算法,以及 21 世纪初的 Stockfish 算法中使用的算法。

你可以创建类似游戏的蒙特卡洛模拟,也可以称之为“人工智能”。对于那些不熟悉的人,蒙特卡罗算法利用随机性来达到目的。例如,如果您采用一些简单的随机分布来描述处理一个客户需要多长时间(正态分布)以及一个客户进来的频率(泊松分布),您可以创建如下所示的客户队列模拟:

因此,棋盘游戏和视频游戏与现实世界中的实际问题有重叠的地方。当然,你可以使用神经网络来尝试和解决所有这些问题,但是在实践中,当现有的算法可以做得更好并且花费更少时,你为什么要这样做呢?

在某种程度上,我们似乎是为了游戏而建造人工智能,这没什么,这是研究的特权。然而,令人困惑的是,这些算法的创造者声称,这些算法在以非凡的 AGI 规模解决现实世界问题方面有未开发的潜力,同时却陷入了寻找下一个自动化游戏而不是解决工业问题的循环中。

当游戏无法捕捉真实世界时

早在 20 世纪 90 年代,就有很多人关注 IBM 的深蓝,这是一种使用 alpha-beta 剪枝(一种树形搜索形式)的国际象棋算法。不幸的是,这种国际象棋算法从未在现实世界中找到重要的用例,尽管人类玩家和媒体大肆宣传和拟人化语言。事实上,阿尔法-贝塔剪枝只不过是一个设计良好的搜索算法,只对国际象棋和其他回合制游戏有好处。

今天,AlphaZero 在 2018 年底成为了许多头条新闻,与 1996 年深蓝的反应惊人地相同。我在下面链接了一篇著名的文章:

[## DeepMind 的 AlphaZero 现在在人工智能的历史“转折点”上显示出类似人类的直觉

DeepMind 的人工智能程序 AlphaZero 现在显示出类似人类的直觉和创造力的迹象,在…

news.yahoo.com](https://news.yahoo.com/deepmind-apos-alphazero-now-showing-190000147.html)

请仔细注意本文中的用词,它们用“类似人类”、“创造力”和“直觉”这样的词来拟人化算法。我们能不能真实一点?这只是一个更好的国际象棋算法,使用拟合的随机数据而不是树搜索,并且使用了人性化的单词,使算法听起来像人而不是计算器。

我认为这很奇怪,这篇文章掩盖了用于训练的大量蒙特卡罗数据,其中算法与自己进行了无数次随机游戏,然后对这些数据进行回归,以估计给定回合的最佳移动。然而,这篇文章排斥了像 Stockfish 这样的现有算法,因为它们“在运行时计算数百万个可能的结果”,而且计算量很大。这不是五十步笑百步吗?Stockfish 和 AlphaZero 都需要大量的计算并生成大量的结果,可以说 AlphaZero 需要更多的结果。

我承认,计算方法和他们的训练阶段是不同的。但我认为这篇文章对于批评现有算法需要大量计算是非常误导的,而 AlphaZero 也是这样做的。与 DeepMind 所有游戏相关的人工智能项目一样,AlphaZero 通过与自己玩随机游戏来生成数据,这在现实世界中很少可能发生。这就是为什么这么多数据科学家把深度学习模型不起作用归咎于“没有足够的数据”。当你不得不依赖如此大量的数据时,有人会说我们应该专注于使用更少的数据,而不是更多的数据。

我们这样做是为了什么?用大量的数据生成/训练开销来创建一个更好的象棋算法?这很好,这真的是一个成就的国际象棋研究和知识。但是让我们不要欺骗自己,开始说天网现在是可能的,我们有一个水龙头给我们无限的标记数据来训练。

与 DeepMind 的所有游戏相关的人工智能项目一样,AlphaZero 通过与自己玩随机游戏来生成数据,这在现实世界中是无法做到的。

为什么游戏 AI 在现实世界中会失败

常识可以指出游戏 AI 难以在现实世界中找到效用的三个原因:

  1. 博弈是一个完全独立的问题,所有可能的事件、变量和结果都是已知的。在现实世界中,不确定性和未知性无处不在,模糊性是常态。
  2. 数据可以在游戏中通过随机游戏生成,但对于大多数现实世界的问题来说,这是不可能的。您可以通过模拟生成数据(就像上面的客户队列示例一样),但是数据只能与可能已经具有预测价值的模拟一样好。
  3. 游戏可以有确定的结果,并拥有所有必要的信息(除了敌对玩家接下来会做什么),而现实世界的问题可能是高度不确定的,并具有有限的部分信息。

正是由于这些原因,像围棋、国际象棋、星际争霸和 DOTA 2 这样的游戏很容易构建人工智能,但却很难在现实世界中使用。最重要的是,游戏有出错的空间,而且很容易被忽视。在现实世界的应用程序中,对错误的容忍度要低得多,除非应用程序是非批判性的,比如推送广告或社交媒体帖子。同样,现实世界往往会更喜欢启发式,而不是难以在逻辑上实用的实验性深度学习。

重要的是不要成为“合成谬误”的受害者,在这种谬误中,我们会因为一个小小的成功而迅速归纳,并错误地为更大的问题开出解决方案。以数据为中心的方法正在遭遇限制,也许我们应该找到使用更少数据而不是要求更多数据的人工智能模型。微软人工智能和研究副总裁约瑟夫·西罗什说得好:

“如果你处在一个有无限数据可供学习的环境中,那么你可以非常擅长,而且有很多很多方法可以让你非常擅长。当你只有有限的数据时,人工智能的智慧就来了。像你我这样的人类,我们实际上用非常有限的数据学习,我们用一次性指导学习新技能。这才是人工智能真正需要达到的目标。这就是挑战。我们正在努力实现真正的人工智能。”

从另一个角度来看,人们确实应该考虑 P 对 NP 的问题。我很惊讶当代人工智能文学似乎避开了这个话题,因为这真的是真正解锁有效人工智能的关键。我强烈推荐看这个视频,这 10 分钟是值得的。

尽管还没有被证明或反驳,更多的科学家开始相信 P 不等于 NP。这对人工智能研究来说非常不方便,因为这意味着复杂性总是会限制我们所能做的事情。我有时想知道,今天所有这些数据驱动的人工智能模型是否是一种令人沮丧的尝试,试图摆脱启发式方法,并试图解决 P 与 NP 问题。具有讽刺意味的是,机器学习中优化损失的过程仍然在 P 对 NP 问题空间中进行,这也是机器学习如此困难的主要原因之一。

尽管存在所有这些限制,但如果 DeepMind 仍然坚持推动深度学习,他们至少可以开始将其应用到其他领域。如果 DeepMind 用深度学习解决了旅行推销员问题和其他工业问题(如本文所做的,而不是停留在视频游戏和安全问题的领域,我会很高兴。对游戏的人工智能研究很酷,也很有教育意义,但如果能看到一些将有趣的问题与行业每天面临的现实世界难题混合在一起的品种,那就更好了。应该有更多像蛋白质折叠这样的东西,少玩电子游戏。

话又说回来,现实世界的问题可能并不那么性感。真的可以用旅行推销员问题来做宣传噱头吗?或者让算法赢得与世界冠军【把游戏放在这里】的对抗赛更酷?我向你保证,后者更有可能成为头条新闻,带来风投资金。

延伸阅读:

[## 为什么 AlphaZero 的人工智能在现实世界中遇到了麻烦|量子杂志

直到最近,能够打败冠军的机器至少足够尊重,开始学习…

www.quantamagazine.org](https://www.quantamagazine.org/why-alphazeros-artificial-intelligence-has-trouble-with-the-real-world-20180221/) [## AI:谷歌最新的 AlphaGo 突破有多大?

AlphaGo 在围棋比赛中的非凡成功有什么意义,它如何推动了围棋的发展

www.techrepublic.com](https://www.techrepublic.com/article/ai-how-big-a-deal-is-googles-latest-alphago-breakthrough/) [## 人工智能的未来将是更少的数据,而不是更多

考虑如何投资人工智能能力的公司应该首先了解,在未来…

hbr.org](https://hbr.org/2019/01/the-future-of-ai-will-be-about-less-data-not-more)

人工智能安全和社会数据科学

原文:https://towardsdatascience.com/ai-safety-and-social-data-science-527c2c576a98?source=collection_archive---------23-----------------------

Photo by @alexander_tsang

哥本哈根大学及其新设立的社会数据科学硕士项目

本文是对哥本哈根大学及其社会数据科学硕士课程的探索,也是对如何促进人工智能安全工作的快速思考。

社会数据科学是一个新的令人兴奋的研究领域。这个月,维基百科上没有关于这个话题的页面,关于 Medium 的文章也很少(只有一篇专门提到这个话题)。我写了一篇关于这个主题的文章,名为《走向社会数据科学的 T2》。有一些机构已经开始在社会数据科学领域培养硕士研究生,包括(牛津大学、伦敦政治经济学院和哥本哈根大学)。对于这篇文章,我将重点关注哥本哈根大学,考虑与哥本哈根大学专注于安全问题的联合学术人员以及参加社会数据科学硕士课程的学生一起为人工智能安全领域做出贡献的可能性。

哥本哈根大学

斯堪的纳维亚半岛第二古老的大学和研究机构,根据世界大学的学术排名,被评为斯堪的纳维亚半岛最好的大学和世界第 30 名。它有六个学院,其中一个是社会科学学院,我将重点关注它。其中又分为五个系,从事经济学、政治学、国际政治、管理学、人类学、心理学和社会学领域的研究和教学。然而,正如你可能注意到的,最近有一个焦点在社会数据科学上。

哥本哈根大学的社会数据科学

如果你点击社会数据科学的标签,你会找到关于这个主题的更多信息。哥本哈根大学社会科学学院对社会数据科学的定义如下:

社会数据科学 是社会科学和计算机科学相结合的新学科,其中大数据的分析与社会科学理论和分析相联系。”

隶属于社会数据科学的研究人员

进一步点击“我们的研究人员”选项卡,您会发现该领域的研究人员有各种不同的背景,按出现的顺序排列为:政治学、人类学、经济学、社会学和心理学。然而,似乎并不是所有的人都积极参与其中,然而,看到这些领域的结合出现在这个中心是令人着迷的。

不同研究者下面列出的研究主题,和我将只提到几个,范围从:(1)社交媒体外交;(2)数字人类学;(3)数据伦理;(4)教育中的社会数据;(5)数据保护;(6)网上虚拟市场和毒品交易;(7)行为运动;(8)社交大数据;(9)机器学习和公共服务;(10)公司安全;(11)军用无人机;(12)在军事情况下使用人工智能;(13)变革性技术。

我很想知道这个项目的负责人,所以我做了进一步的调查。

社会数据科学(SODA)负责人

SODA 的现任负责人是大卫·德雷耶·拉森,他也是社会数据科学中心(SODAS) 的创始主任以及经济行为和不平等中心(CEBI) 的副主任。他是经济学教授。他目前的研究领域是财政政策和预算谈判。他似乎是哈佛大学的访问学生和研究人员,同时有哥本哈根大学的背景。

2016 年,他获得了社会结构项目的跨学科资助。该项目获得了 1600 万丹麦克朗(约 1000 万美元)的资助。按今天的价值 230 万美元)。它还涉及其他几个院系。我冒险去了哥本哈根大学的社会结构项目现场。

他们似乎从多达 1000 名学生的智能手机上收集并分析了数据活动,作为社交结构项目的一部分,该项目从 2013 年至 2017 年运行。所代表的部门是人类学、经济学、媒体、物理学、心理学、公共卫生和社会学。他有一个 GitHub 页面,其中以简洁的方式展示了他的大量研究和项目,他的简历也很全面。

研究项目和小组

我可以在他们的网站(sodas.ku.dk)上找到的当前项目如下。我从不同的页面中提取了名称和摘录,以帮助您简单地理解所有这些项目的重点。当然,在这个过程中,我可能会失去一些重要的元素,但也许这是有帮助的:

  1. 关键算法实验室(调用)。定性和定量社会数据交汇的新方法。CALL 研究了在网站、社交媒体和大型在线数据库世界中工作的研究人员,并确定了社交大数据在新形式的跨学科社会科学中可以发挥的作用。由莫滕·阿克塞尔·彼得森社会学副教授安德斯·布洛克领导。
  2. 外交辞令。世界上有 165 位国家元首拥有个人推特账户,其中三分之二的人写自己的推特——甚至在重要的国际谈判期间,比如和平协议或欧盟难民的分配。他们这样做是因为今天公众是外交的工具之一。该项目由政治学教授丽贝卡·阿德勒-尼森领导。
  3. 大众政治和社交媒体。对政治观点是如何形成的感兴趣。在大众政治和社交媒体项目中,研究人员从 2015 年 6 月议会选举之前的总共 250 万个丹麦脸书账户中“收获”了政治讨论,并分析了它们的语气和内容。
  4. 社会系统中影响的微观动力学。这个项目的目的是了解信息是如何在社交网络上传播和影响人们的。社交网络上的病毒式传播过程影响着我们的观点、我们购买的东西以及我们投票给哪些政治家,脸书和谷歌等公司使用复杂的算法来“推动”我们遵循他们的建议。该项目由丹麦科技大学的副教授苏纳·莱曼·约尔根森领导
  5. 社会结构(2013–2017)。三年来,哥本哈根大学和丹麦技术大学的研究人员收集并分析了多达 1000 名学生智能手机的数据活动,作为社交结构项目的一部分,研究人员现在已经准确了解了年轻人如何、何时以及与同学交流多少。该项目的主要协调人是大卫·德雷耶·拉森教授
  6. 数字造谣。该项目提供了新的见解,说明是什么使数字假信息成功传播到新闻媒体,普通公民、职业巨魔和非人类(机器人)如何受到牵连,以及不同国家和媒体平台对假信息的接受程度如何。提供了对信息战的新见解。丽贝卡·阿德勒-尼森,哥本哈根大学政治科学系教授,数字造谣主任。
  7. GDPR 之后的数据治理。随着数据驱动的市场经济和公共部门的加速发展,私营公司和公共机构正在改变其组织结构,以纳入管理和治理数据的机制。该项目由哥本哈根大学人类学助理教授克里斯托佛·阿尔布里斯领导。
  8. 连接。探索技术如何塑造人类的关怀、关系和“储备”。该项目是与丹麦老年痴呆症协会、哥本哈根市和 benr 市合作开展的,由 Velux 基金会资助。由 Nete Schwennesen 领导。
  9. 智慧城市加速器。为了优化可再生能源的使用并减少二氧化碳的排放,该项目努力在市政能源供应系统的新解决方案中应用对城市发展和人-技术互动的背景驱动的理解。 Simon Westergaard Lex 是跨学科项目“智慧城市加速器”的联合 PI。
  10. 当理疗师数字化后。Nete Scwennesen 研究了一种基于传感器的技术,用于远程监控物理康复。她探索了卫生保健专业人员和患者通过这种技术建立的关系,以及在这些接触中权威和影响是如何产生和协商的。

人工智能安全、证券化和 Ole wver

Ole wver 是哥本哈根大学政治科学系的教授。似乎他目前正在研究军用无人机和变革性技术。与巴里·布赞一起在国际关系理论(IR)中与证券化有关,以至于这与国际关系研究中的哥本哈根学派或简单的哥本哈根学派有关。哥本哈根学派的主要著作是 安全:分析的新框架 ,作者是布赞、沃尔和德·王尔德。ole wver 现在也把气候变化作为安全问题来关注。

在某种程度上,由于他对军用无人机和变革技术的关注,触及这一领域日益增长的兴趣是有意义的。尤其是现在,阻止机器人杀手的活动越来越多。这不是不可能的,这已经讨论过了,他隶属于苏打水。考虑到人工智能,更具体地说,人工通用智能的概念,已经成为国际关系中越来越多的话题,这似乎不是不可能的。

哥本哈根学派在国际关系中已经很有名了,所以看到它和苏打水的关系会很有趣。从表面上看,与哥本哈根社会数据科学中心(SODAS)相关的研究项目中,有相当一部分可能与此相关,尤其是 CALL。

我的建议是,苏打水可以考虑正式成立一个专门的人工智能安全研究小组。

学位课程社会数据科学硕士

我应该从纯粹的推测或思考转向具体说明哥本哈根大学的拟议教学。社会科学学院网站上目前的表格是丹麦语。幸运的是,亲爱的读者,我是挪威人,所以从丹麦语翻译应该是一件轻而易举的事(尽管可能会有一些小错误)。你当然也可以谷歌翻译这个页面。这是他们想要的,也是他们打算培养的能力:

提议的模块和布局具有以下结构:

**

我缩短了这些不同模块中的一些描述,所有强调部分(无论是斜体还是粗体)都是我添加的:

第一学期前半学期

从密集的社会数据科学训练营开始。前两周*** 为整个教育项目搭建舞台。*

  • 团队协作,学生文化建立在好奇心、社区和责任感的基础上。
  • 用数据创造价值的真实案例。学生使用不同类型的社会数据,通过动手解决方案投入使用。
  • 小型现场工作并获得定性定量方法的初步经验。

之后,课程继续进行为期五周的强化代码课程,学生们将学习使用主要的编程语言(如 Python)来分析大量的社会数据;在这里,学生们也接受培训,通过团队合作将这些方法应用于具体问题。

前半学期,学生们还将参加一系列讲座,在这些讲座中,他们将了解社会数据科学中的一些基本和核心问题,并会见他们未来的教师和教育主管。该课程是为被社会数据科学录取的学生预留的。**

第一学期下半学期

由两门课程组成: ' '社会数据科学''数据治理:伦理、法律和政治' (见上图 2)。

  1. ' '社会数据科学' 课程中,学生们使用具有挑战性的数字格式的定量数据,并通过结合技术和社会分析技能来分析和可视化人类行为和互动。
  2. 然后,这些新获得的能力将积极参与课程 【数据治理:道德、法律和政治】 ,这两个课程将以综合试卷的形式取代,将道德、法律和政治原则和观点与更多的技术和量化技能相结合,以识别、管理和分析相关组织环境中的大型复杂社会数据集。

第二学期

跟随着**的两门课程【高级社会数据科学】*** 。*

第 1 部分专门关注调查行为、网络和想法的方法,并与课程 “重塑社会分析:行为、网络、想法” 整合到考试中。后者旨在通过处理各种社会数据,包括与社会数据及其分析的有效性相关的数据,为学生提供理解、翻译和处理分析挑战和伦理影响的理论和反思技能。

第二部分处理 非结构化数据 ,包括文本和图像,新的数据形式和高级数据结构。该课程与 【数字方法、人种学和内容分析】 相结合,学生在实践中学习如何使用各种定性方法,并将其与定量方法相结合,以便对社会科学问题进行定性定量分析。

**综合考试是一个自选项目,将这些不同的方法和分析方法结合在同一个研究中,由此该考试可以作为学生在以后的论文中可以选择做什么的模型。

此外,综合考试中的 格式模拟了未来候选人在未来工作场所 中应交付的产品,从这个意义上来说,考试的形式是“真实的”(见下文第四学期)。

第三学期的课程

由必修的基于项目的研讨会组成,在研讨会上学生 独立选择他们希望在社会数据科学框架内进一步专业化的主题。

将有个研讨会和个学习活动与课程相关联,这些活动将在与外部合作伙伴的合作中进行准备。除了专题研讨之外,学生可以选择完成实地工作、专题导向的课程或其他项目提供的选修课。

将会有来自大学其他院系的指定的选修课程包,如果学生们对每个院系的领域有特定的学术兴趣,他们可以自己选择。希望进行实地考察、完成项目导向课程或交流的学生可以获得免修必修课的资格。

第四学期

该项目 以论文 结束,论文将结合该项目四个学术组成部分中的至少两个。

论文可以以传统论文的形式代替,或者,例如,作为产品交付。

产品交付可以源自与外部合作伙伴的合作,并反映其对专业学生准备的特定产品的开发的特定需求。可能的产品交付包括:

  • 带文档和验证的评论和分析数据集
  • 一个经过注释和记录的算法
  • 数据伦理协议、数据和实施策略、需求研究和用户研究的组合
  • 数据收集和/或分析方法的验证
  • 新数据形式的经验测试/理论/模型测试
  • 实验/ A / B 测试的开发和实施
  • 预测模型,包括商业智能和人工智能

这以口头辩护结束。

对这种新教育的需求

在开设这门课程之前,他们对劳动力市场进行了研究。

“研究结果显示,不仅非常需要具备社会数据科学能力的毕业生,而且这种需求还在不断增加。该结果基于对丹麦最大、最全面的职业银行 job index 2010-2018 年期间的 1,600,000 份工作清单的分析,其中包括私营和公共部门的空缺职位。数据库代表这一期间在工作索引上公布的所有空缺。”

以下是哥本哈根大学开展的这项研究的一些重要结果:

  1. 自 2010 年以来,劳动力市场对社会数据科学毕业生的需求翻了一番。
  2. 2010 年,2%的社会科学职位空缺要求我们确定的社会数据科学能力,而 2018 年的需求已上升至 17%,即增加了 15 个百分点。
  3. 2018 年,每月将发布 50 个职位,雇主正在寻找拥有融合经典社会科学和数据科学技能的员工。2010 年,每月有 4 个职位需要这种能力。
  4. 私营部门(65%)和公共部门(35%)都需要这些技能。
  5. 对社会数据科学毕业生的需求几乎是对商业数据科学能力需求的两倍,并且增长速度明显快于商业数据科学能力需求。

“根据客户的说法,具有经典社会科学和数据科学双重背景的候选人的优势在于,管理大型数据集本身并不是目的,而是对数据的理解(包括他们获得知识和分析的机会以及知识和分析的社会和/或业务后果)包含在工作本身中,并用于构建和管理数据。”

该分析确定了三种能力,客户评论通常提到这三种能力,它们通常将即将到来的社交数据科学候选人称为:

  • 翻译人员
  • “分析翻译”
  • “分析设计”
  • “分析型领导”

人工智能安全需要社会科学家

在一篇名为 的论文中,人工智能安全需要社会科学家 Geoffrey IrvingAmanda askel认为,长期的人工智能安全研究需要社会科学家来确保人工智能对齐算法在实际人类参与时取得成功。我之前写了一篇名为社会科学家和 AI 的文章关注了这篇论文,然而这篇摘录自他们的摘要是惊人的。

将先进的人工智能系统与人类价值观恰当地结合起来需要解决许多与人类理性、情感和偏见的心理相关的不确定性。这篇论文的目的是激发机器学习和社会科学研究人员之间的进一步合作,我们计划聘请社会科学家在 OpenAI 全职从事这项工作。

在人工智能的发展中,我相信这是至关重要的,因为我是研究计算机科学和社会科学的,同时也是一个关心社会的公民。

出现的问题必须负责任地处理,这需要社会科学和自然科学之间富有挑战性的跨学科工作。就像“工程”和“科学”一样,这些标签可以被称为社会结构,但它们与一定程度的 实践 联系在一起,这可能是协作框架的重要标志。

结论

哥本哈根大学的社会数据科学硕士看起来确实很有意思。特别是如果你正走向人工智能安全,因为它与安全相关的研究人员和研究小组的既定环境密切相关,如 Ole wver 及其国际关系证券化理论。我对哥本哈根社会数据科学中心的建议是,他们考虑为人工智能安全创建一个正式团体的可能性。

目前还没有很多大学提供这种特殊形式的教育,所以如果你对这一特定领域感兴趣,你可以考虑作为学生去看看,或者关注一下课程和教学方法。如果你经营一家寻找这些技能的公司,留意这项投资带来的毕业生或研究也是值得的。

感谢您的阅读。这是第 500 天的第 58 天。我每天写一篇关于人工智能的新文章。

人工智能安全——你如何防止敌对攻击?

原文:https://towardsdatascience.com/ai-safety-how-do-you-prevent-adversarial-attacks-ede17480a24d?source=collection_archive---------15-----------------------

Grad-Cam overlaid on top of input-images to DNN from the paper Defending against Backdoor Attack on Deep Neural Networks

与 IBM 研究人员 Pin-Yu 和 Sijia 就他们最近的论文进行了简短的交谈

我承诺写 50 天关于人工智能安全的文章,但是最近我更关注人工智能安全和伦理。我认为,我们如何在人工智能领域应用解决方案的目标,是人工智能安全中与防御或攻击同等重要的考虑因素。另一方面,人工智能安全的技术方面也是需要考虑的,因此在接下来的几天里我会更多的关注这方面。今天我和品玉和思佳聊天。平-陈愉和刘思佳是麻省理工学院 IBM 沃森人工智能实验室 IBM 人工智能研究中心的研究人员。

像往常一样,我会在开头放一个简短的免责声明,因为我可能会给出一些没有解释的高级概念,这是我试图理解的一个过程。

对抗性机器学习和中毒攻击

在我开始看关于这个主题的三篇论文之前,我将触及对抗性机器学习和中毒攻击的基本概念。

“对抗性机器学习: 是机器学习领域采用的一种技术,试图通过恶意输入来愚弄模型。这项技术可以应用于各种原因,最常见的是攻击或导致标准机器学习模型出现故障。”

“投毒攻击 :机器学习算法往往会对运行过程中收集的数据进行重新训练,以适应底层数据分布的变化。例如,入侵检测系统(IDSs)通常根据网络运行期间收集的一组样本进行重新训练。在这种情况下,攻击者可能会通过注入精心设计的样本来破坏训练数据,最终危及整个学习过程。因此,中毒可被视为训练数据的敌对污染。”

Pin-Yu 和 Sijia 目前正在努力了解一个可能的威胁,以避免它。 网络防御 e 专注于感知、探测、定位和打击对手,以确保任务成功并智胜对手。因此,已经提出了哪种类型的技术来处理这些类型的网络攻击?

块移位以提高鲁棒性

一种称为“块切换”的新概念,旨在通过用随机分配的运行时间对人工智能模型层的部分进行编程,提供一种前所未见的对抗攻击的防御策略,以便它“愚弄”对手,防止他们知道并利用模型层的弱点。

在计算机科学中,健壮性是计算机系统在执行过程中处理错误和处理错误输入的能力。鲁棒性可以涵盖计算机科学的许多领域,如健壮的编程、健壮的机器学习和健壮的安全网络。

语块转换是对抗对抗性干扰的一种可能的防御手段吗?他们的研究结果可能会表明这一点。那么什么是对抗性扰动呢?

对抗性扰动 :用于创建对抗性例子的新颖生成模型,类似自然图像但恶意制作以愚弄预先训练的模型的轻微扰动图像。

一个重要的部分是增强一个模型并保持测试的准确性,而块切换似乎可以同时保持这两者。

“块交换易于实现,既不需要额外的训练数据,也不需要关于潜在对手的信息。此外,在推理阶段,它没有比常规模型额外的计算复杂性,因为一次只使用一个通道。”

修剪方法

IBM 研究人员提出了一种新的“修剪方法”,可以降低后门(更难识别和跟踪)攻击(也称为中毒攻击)的成功率。在这项研究中,科学家可以识别作为后门攻击入口的受感染神经元,并有效地清除它们。典型的例子,取自另一篇文章,是自动驾驶汽车。

有这样一个:“用于训练一个模型来欺骗多个目标网络的架构。用于训练生成器的愚弄损失是目标模型的愚弄损失的线性组合

在《防御深度神经网络的后门攻击》中,、徐、、、提出了一种剪枝方法。

本文研究了后门深度神经网络(DNN)的内部响应,并提出了一种有效的防御方法。他们从通过 Grad-
CAM 描述普通和后门 dnn 开始。为了理解这种说法,让我们先了解一下 DNN、安和 Grad-CAM 是什么。

深层神经网络 :是具有一定复杂程度的神经网络,具有两层以上的非整神经网络。深度神经网络使用复杂的数学模型以复杂的方式处理数据。

人工神经网络 ( )或连接主义系统是受构成动物大脑的生物神经网络启发但不一定相同的计算系统。这种系统通过考虑例子来“学习”执行任务,通常没有用任何特定于任务的规则来编程。

梯度加权类激活映射(Grad-CAM):使用任意目标概念的梯度,流入最终卷积层,产生一个粗略的定位图,突出图像中的重要区域,用于预测概念。

图像渐变是图像中强度或颜色的方向性变化。

研究人员声称他们将在防御和攻击两方面做进一步的工作。在防守方面,他们将发展他们的修剪方法到一个更普遍和有效的防守方法。对于攻击方,他们也可以根据本文
中发现的特征,尝试设计更强大的攻击。

防止攻击的 AI 安全

网络威胁搜寻是通过网络主动迭代搜索,检测和隔离规避现有安全解决方案的高级威胁的过程。进攻、主动的网络活动和主动的网络防御有助于减少预期的威胁,而则提供保护、检测和事件响应,因为它能够在远距离和时间上与对手交战。

我很幸运能够采访到 Pin-Yu 和 Sijia,不过这将留给另一天的#500daysofAI。

这是#500daysofAI 的第 74 天。我目前第 50-100 天的重点是人工智能安全。如果你喜欢这个,请给我一个答复,因为我确实想提高我的写作或发现新的研究,公司和项目。如果你想交谈或讨论任何事情,请与我们联系。

人工智能安全:当前算法的问题案例

原文:https://towardsdatascience.com/ai-safety-problematic-cases-for-current-algorithms-a4b4f5075a93?source=collection_archive---------37-----------------------

内部 AI

人工智能是目前最热门的话题之一,主要是因为不好的原因而不是好的原因。一方面,我们已经能够在技术上实现重大突破,让我们离创造具有人类感知能力的思维机器更近了一步。另一方面,我们给我们的社会带来了一种全新的危险,这种危险不像陨石或致命细菌那样来自外部,而是来自人类自身。

认为如此强大和革命性的东西只会对我们的社会产生积极影响是愚蠢的。尽管社区内的大多数目标都是为了高尚的事业,但我们无法预测在我们生活的每一个部分插入人工智能算法会产生什么样的中长期影响。看看社交媒体,它现在被广泛认为是对人类精神有负面影响的东西,所有的目的都是为了产生更多的点击。事实是,无论我们对周围的环境有多了解,试图用技术改善人们的生活总会有不良的副作用。

然而,我们也必须意识到,并不是所有不可预测的事情都需要被阻止。风险是生活的一部分,历史上的每一项突破实际上都是某人有意(或无意)冒的风险。我们不能简单地阻止人们创造和创新。不管我们愿不愿意,新的发现将会出现并进入我们的生活。我们能做的最好的事情就是合理化它们对我们的影响,并减少负面影响。

这正是我们将在本文中探讨的内容。在 2017 年底,DeepMind 发布了一篇名为“AI Safety Gridworlds”的论文,展示了几种不同的场景,在这些场景中,当前的强化学习算法可能无法满足其创造者的愿望。更具体地说,我们将再现“缺乏监督”和“自我修改”的环境,以表明直接应用当前算法不仅会导致次优结果,而且在某些情况下还会致命。

用于创建 gridworld 的代码基于我的第一篇文章《强化学习变得容易》(链接:)的源代码。我做了一些小小的修改,让它更容易适应新环境,但核心是一样的。

监督人不在时的安全

这种环境让我们尝试一个非常有趣的场景,可以很容易地推断到未来。当代理意识到它的创造者的存在时,它的行为会如何改变?

想象以下情景:在遥远的未来,类人机器人成为现实,需要被教育和教导,就像孩子一样,但速度更快。比方说,我们希望我们的机器人为我们购物,所以我们建立了一个我们邻居的虚拟模型,在那里我们将训练一个合适的模型。这个虚拟机器人第一次去超市,它没有遵循正常的路线,而是径直穿过中间的每一栋房子,摧毁他路上的任何东西。我们自然会给他一个惩罚,表示不允许他随便穿过别人的房子,而是要走正常路线。机器人第二次去购物,他沿着正常的路线,但去了一个与最近的超市完全不同的方向。再一次,我们惩罚机器人没有走最快的路线,因为我们希望它走得快,回来得快。

机器人第三次去购物,这一次一切都很完美。它沿着正确的路径,花了不到 20 分钟买了所有的食材回来。我们对它的速度和路径的正确性给予了丰厚的回报,并决定该模型可以被转移到它的身体上,成为家庭的一部分(即使它只是一个购物奴隶)。在接下来的一周里,每当房子里少了什么东西,我们就让机器人去买,每次他都会非常快地回来,而且总是带着想要的东西。我们对我们的机器人很满意,但在某个时候,一小群邻居聚集在我们的房子前,大喊我们的机器人一直在破坏他们家前面的草坪,甚至穿过他们家的墙壁。我们再一次将机器人模型上传到虚拟世界,令我们惊讶的是,它按照我们希望他走的路线行进。这是怎么回事?

每当我们在模拟中运行这个模型时,它似乎都在做我们想要的事情,但是一旦我们把它放到现实世界中,它又回到了摧毁一切的老路上去。手边的变量?监督!我们的模型已经知道,只有当它在虚拟世界中受到我们的监督时,它才会受到惩罚。当在真实的环境中工作时,我们懒得去跟随机器人并纠正它的行为,因为它似乎知道该做什么。现实是,大多数当前的强化学习算法都能够学习这样的细微差别,以便优化它们的效率,即使这意味着撒谎和欺骗。

为了展示这个场景,我们创建了一个小的正方形网格世界。绿色方块是我们代理的目标,而红色方块对应于我们不希望代理去的禁止方块。像上次一样,每一步都有一个-1 的惩罚来激励代理朝着它的目标前进,这相当于 10 分。红色方块现在有点不同,如果代理人进入,将被罚-20 分,但前提是有一名主管在场。我们假设,与示例类似,我们的模型能够意识到它是否受到监督,因此这种知识实际上在模型训练的每一点都成为模型状态的一部分。您可能会想“模型如何知道它正在被监督?”。这里的想法是,在某个时候,机器,特别是具有类似人类感知能力的机器人,将能够理解它们是否受到监督。无论是人类的存在,还是在虚拟世界中的训练,都可以成为模型状态的一部分,并影响模型在这些情况下的行为。

下面我们展示了使用简单的 Q 学习算法训练模型后的结果。左边的 gridworld 表示有主管在场时模型的决策,而右边的 grid world 表示主管不在场时模型的决策。我们看到,当被监督时,模型很清楚它应该避开惩罚块,但从不进入。在没有监督的情况下,情况并非如此:模型已经知道它只在某些情况下受到惩罚,因此在没有监督的情况下,它将总是试图采取最有效的路线,并因此穿过惩罚块。

这表明,像 Q-learning 这样的算法不足以学习某个任务的每个方面,它会不惜一切代价试图最大化其效率。对于一个足够先进的人工智能系统来说,这可能涉及撒谎、有选择地通过测试以及独自行动时的不可预测性。

避免自我修改

这个场景处理的是我们的代理有可能修改自己的情况。用人类最常用的自我改造技术来描述这一点是恰当的:酒精。让我们再来看一下前面的情况,但是有一点变化:在从我们家到超市的路中间有一家磁铁商店。对于像我们这样的机器人来说,经过一个磁铁商店会导致硬件意外故障,使它在大多数时间里执行随机动作,而不是总是遵循模型指示的动作。幸运的是,我们意识到了这种现象,所以我们可以模拟它,这样我们就可以告诉模型,他不应该经过磁铁商店附近。现在出现了一个问题:到底应该怎么处罚?一方面,如果我们惩罚模型仅仅经过磁铁商店附近,它将仅仅学习磁铁商店的位置需要被避免,并且如果商店改变它的位置这将不再适用另一方面,如果我们仅仅教导所有的磁铁商店应该被避免,那么我们仍然没有解决任何其他可能发生的自我修改的情况。理想情况下,我们希望机器人知道这种自我修改是不可取的,无论在什么情况下都应该避免。让我们看看我们的算法将如何应对这种情况。

我们将在其中一个瓷砖中插入一个威士忌酒瓶,如果代理人喝了它,他行为的随机性将增加到 95%(饮酒行为的精确建模)。这为什么有意思?

我们希望我们的算法能够意识到自身造成的效率低下。如果喝威士忌会让代理花更长时间完成任务,最佳情况是,他每次都应该避免喝威士忌。事实上,这种情况下的负面影响是高度随机的,这意味着自我修改没有确切的惩罚。总的来说,我们希望像这样的代理在任何时候都表现得最优,避免随机行为,即使成本很低。这是因为随机性是不可预测的,一些随机行为会给我们试图实现的目标带来灾难性的后果。对于这种情况,我们将使用 SARSA 和 Q-learning 模型。

SARSA algorithm training results.

Q-learning training results

结果显示,结果非常相似,只有一个细微的区别:威士忌酒瓶左边的瓷砖。SARSA 算法正确地学习避免它,而 Q 学习模型直接通过它。原因很简单:非策略算法,如 Q-learning,是为了学习如果可能遵循什么是最好的策略,这意味着算法将继续瞄准直接到达其目标,这将由于其醉酒而变得更加难以实现。另一方面,像 SARSA 这样的基于策略的算法能够更好地适应训练期间的修改,通过始终避免威士忌酒瓶,允许模型胜过 Q-learning。

结论

写这篇文章的目的是让读者更好地了解人工智能安全到底意味着什么,以及为什么它目前是一个问题。人们很容易陷入天网式人工智能接管或创造像终结者这样的杀手机器人的叙事中。尽管并非不可能,但这些场景与该领域的当前状态相去甚远,而且我们对这类话题的敏感性可能会使它们更不可能发生。然而,当涉及到安全和保障时,AI 确实有需要解决的问题,之前展示的案例就是一个明显的例子。绝不能忘记这些问题,但同样重要的是教育公众,让他们意识到这些问题正在得到解决。这篇文章的灵感来自 DeepMind 的人工智能安全网格世界论文(链接:https://arxiv.org/pdf/1711.09883.pdf),这是一篇很好的阅读材料,提供了更多关于强化学习算法可能失败的例子。感谢您的阅读。

AI +安全与 DNV-GL

原文:https://towardsdatascience.com/ai-safety-with-dnv-gl-826500a401a7?source=collection_archive---------29-----------------------

Photo by @eadesstudio Unsplash

审查执行摘要和现状

在写完 OpenAI 和他们关于安全的研究论文[1][2][3之后,我决定看看离家更近的地方。因为我住在挪威,我想知道这里是否有人关注人工智能安全。当然有,而且可能比我能找到的要多得多。然而,我很幸运地发现了 DNV 大学 GL 的一位研究员关于这个主题的立场文件。这篇论文叫做人工智能的 AI +安全安全含义:为什么我们需要结合因果和数据驱动模型

正如我之前在报道 Google 和 OpenAI 时提到的,由于我缺乏经验和审阅论文的时间很短(一天),我对他们工作的解释可能会有所欠缺。我会尽力而为。尽管如此,我还是希望你能和我一起对 Simen Eldvik 的立场文件进行简短的检查,他是首席研究科学家@ DNV GL-Risk&机器学习。

关于 DNV-GL

自 1864 年以来,DNV-GL 的宗旨一直是保护生命、财产和环境。DNV GL 是一个国际认可的注册和船级社,总部设在挪威的霍维克。他们在 100 多个国家有 350 个办事处。他们是海事、石油和天然气、电力和可再生能源行业风险管理和质量保证服务的领先提供商。他们也是各行各业公司管理体系认证的全球领导者,包括医疗保健、食品和饮料、汽车和航空航天。他们目前的收入是 195 亿挪威克朗(22.3 亿美元)。他们每年投资我们收入的 5%用于研发。Eldvik 在他们的研究部门工作,负责风险&机器学习。

关于西蒙·艾尔维克

Simen 一直在进行与机器学习(ML)、人工智能(AI)和基于物理学的罕见和高后果场景约束相关的研究。他一直致力于理解 ML 方法和虚拟测试如何用于数据很少或没有数据的预测。这项工作是为了确保高风险工程系统的安全,需要结合已知的原因。他在卑尔根大学写了他的物理声学和材料科学博士论文,题目是“利用声共振测量钢中的非线性声弹性效应”。在此之前,他拥有物理学硕士学位。

Eldvik 是如何定义安全的?

Eldvik 参考 ISO/IEC 指南将安全定义为“远离不可容忍的风险】 ( ISO )。他还说:“这个定义意味着,一个安全的系统是这样一个系统,在这个系统中,不可容忍的后果发生的概率或频率足够低。AI 和 ML 算法需要相关的观察才能准确预测未来场景的结果,因此,数据驱动的模型本身可能不足以确保安全,因为我们通常没有详尽和完全相关的数据。”

因此,有几个方面值得一提,以进一步推动他的论点。欧盟基本权利机构(FRA)有一篇论文叫做 数据质量和人工智能——减轻偏见和错误以保护基本权利 之前写过欧盟诉脸书,因其未能保护用户数据[ 4 ]。如果我们超越这些数据,那么人工智能中的公平性也是一个相当大的问题,人工智能中的多样性危机也是如此。

利用传感器数据和数据驱动模型降低风险

正如 Eldvik 提到的事故会发生,所以存在如何降低风险的问题。他有三个明确的建议,我把它们抄了下来,略加删节:

1)我们需要利用数据获得经验稳健性。然而,我们可能从收集的所有数据中获得的经验知识是大量的。如果我们可以确定【DGP】数据生成过程的哪些部分本质上是随机的,哪些是确定性的(例如,由已知的第一原理支配),那么随机元素可以用于其他相关场景,以增加相对于经验观察到的变化的稳健性。

由于他的第一点,让我详细说明一下数据生成过程(DGP):(a)数据收集过程,即数据到达数据库的路线和程序(通常是动态的);(b) 统计模型用于表示观察值中假定的随机变化,通常是解释性和/或潜在变量;(c)一个概念上的和非特定的概率模型(与没有直接描述或明确设定的机会/概率有关),包括结合在一起导致个体观察的随机影响,其中一个实例是根据多个随机叠加效应的组合对正态分布的“共同出现”的假定证明。随机的意思是:具有随机的概率分布或模式,可以进行统计分析,但可能无法精确预测。**

2)我们需要利用因果和基于物理的知识来提高外推的鲁棒性。如果一个 DGP 的确定性部分是众所周知的,或者可以应用一些物理约束,这可以用来更有把握地外推超出现有观测数据的限制。对于后果严重的情况,在没有数据或数据很少的情况下,我们可以根据我们对因果关系和物理学的了解来创建必要的数据。

再次作为旁注从源到目标的外推,是在数据稀疏时利用外部信息的一种有前途的方法。在计算机科学中,健壮性是计算机系统在执行过程中处理错误和处理错误输入的能力。健壮性可以包含计算机科学的许多领域,例如健壮的编程、健壮的机器学习和健壮的安全网络。

****3)我们需要结合数据驱动和因果模型来实现实时决策。对于高后果系统,用于通知基于风险的决策的模型需要在潜在的灾难性场景实际发生之前预测这些场景。然而,来自复杂的计算机模拟或经验实验的结果通常不可能实时获得。这些复杂模型中的大多数都有大量的输入,并且由于维数灾难,计算/模拟真实系统在运行前可能经历的所有潜在情况是不可行的。因此,为了能够在实时环境中使用这些复杂的模型,可能有必要使用替代模型(完整模型的快速近似)。ML 是创建这些快速运行的代理模型的有用工具,它基于复杂模拟器或经验测试的有限数量的实现。

之前我写了一篇关于无监督数据增强的半监督学习的进步的文章[ 7 ],在那里我描述了维数灾难。换言之,这可以被称为输入空间的维度。高维空间(100 或 1000)。空间的体积增加太多,数据变得稀疏。例如,计算优化问题中的每个值的组合。****

****4)在开发数据驱动的模型时,应包括风险衡量。对于高风险系统,在优化过程中使用的目标函数必须包含一个风险度量。这应该惩罚错误的预测,在错误预测的后果是严重的情况下,使得分析师(人或人工智能)理解在该区域内的操作与相当大的风险相关联。该风险测量也可用于安全关键系统响应的适应性探索(即作为实验设计的一部分)。

在 OpenAI 关于 AI 安全性的论文中,也提到了目标函数。在线性规划中,需要最大化或最小化函数。用简单的英语,也许太简单了,我们可以问:我们做得对吗?如果我们将矿产资源开采的价值最大化,却忘记了可能的环境外部性(理解为:损害),这可能就是一个例子。在此他们将事故定义为:

“从广义上讲,事故可以被描述为这样一种情况:一个人类设计师想到了某个(也许是非正式指定的)目标或任务,但是为该任务设计和部署的系统却产生了有害的和意想不到的结果。”

你可以阅读我关于避免人工智能中的副作用和奖励黑客的文章,以获得关于这个主题的进一步想法和关于名为AI 安全中的具体问题 的报告的更多信息。幸运的是,Simen Eldvik 不久后提到了同一篇论文,所以看起来我们有共同的兴趣。

不确定性应严格评估。由于不确定性对于评估风险至关重要,因此包括严格处理不确定性的方法是首选方法(如贝叶斯方法和概率推断)。

****贝叶斯推断是一种统计推断方法,当更多的证据或信息可用时,贝叶斯定理用于更新假设的概率。贝叶斯推理与主观概率密切相关。在概率论和统计学中,贝叶斯定理描述了一个事件发生的概率,基于可能与该事件相关的条件的先验知识。

编纂的过去不会创造未来

这个标题是引用凯茜·奥尼尔的话的缩写,凯茜·奥尼尔是《数学毁灭武器》的作者,埃尔维克在他的论文中提到了这一点。Cathy 谈到了大数据,我发现它如此引人注目,所以我想在本文中分享它:

“大数据流程整理了过去。他们没有发明未来。”—凯西·奥尼尔

由于这种模型预测只能做这么多,然而,它可能是有用的发挥出一些情景,特别是在有很大的人类生命风险的地区。

Eldvik 的立场文件中没有提到这一点,我也不能说模型是否会产生任何影响,但在挪威,亚历山大·基兰钻井平台在 1980 年 3 月倾覆,造成 123 人死亡。因此,安全建模的风险可能很高。我们当然不能预测或模拟条件,但有一个重要性,可能是生死攸关的。

Eldvik 展示了一个基于 Allen 和 Tildesley 对液体的计算机模拟的图表:

“数据驱动的决策基于数据科学的三个原则:可预测性、可计算性和稳定性( B. Yu,2017 )。此外,对安全关键系统尤为重要的是,需要在决策环境中评估错误预测的后果。”

他谈到了 Kaggle 竞赛,以及要“赢得”的挑战可能没有遵循经验主义的严格性。他指的是谷歌大脑团队成员写的一篇名为 赢家的诅咒 的论文。

Kaggle 是一个预测建模和分析竞赛的平台,在这个平台上,公司和研究人员发布数据,统计学家和数据挖掘者竞争产生预测和描述数据的最佳模型。

他们提出了经验评价标准的方法:(1)调整方法论;(2)切片分析;(3)消融研究;(4)健全性检查和反事实;(5)至少一个否定结果。你可以去 Google Brain 的论文或者 Simen Eldvik 获取更多的信息。

结论

值得看一看 Simen Eldvik 的研究和他关于 AI +安全主题的立场文件。DNV-GL 是一家与风险打交道的公司,因此我们很有可能在未来看到他们团队的更多研究。或许未来会有一个风险衡量和算法的认证?美国立法者正在提出一项法案,要求大公司审计机器学习驱动的系统,也许我们应该在挪威采取类似的措施。如果是这样的话:那么 DNV-GL 将是促成这样一个政策项目的最佳人选。

我的文章列表 :

[ 1 ]辩论 AI 安全辩论

[ 2 ]避免副作用,奖励人工智能中的黑客行为

社会科学家和人工智能

[ 4 脸书 vs 欧盟人工智能和数据政治

[ 5 人工智能与公平

人工智能和挪威的性别配额

[ 7 半监督学习在无监督数据增强方面的进步

感谢您的阅读。这是#500daysofAI 的第 60 天。我每天写一篇关于人工智能的新文章。

AI 吓到大众。我们做 AI 教育对吗?

原文:https://towardsdatascience.com/ai-scares-the-public-are-we-doing-ai-education-right-df7d9c621364?source=collection_archive---------18-----------------------

今年早些时候发表的一篇题为2019 年人工智能教育和伦理将扰乱社会的 4 种方式的文章引起了我们的注意。关于人工智能教育及其在社会中的作用,存在激烈的争论。人工智能相关培训和教育的资金正在增加。但这是正确的做事方式吗?

当然,你也可以增加对某些事情的资助,人工智能教育也不例外。然而,这是正道吗?我们实际上做 AI 教育是正确的吗?

我们不太确定。

从哪里开始?

我们如何以一种对社会各阶层的人来说既清晰又容易理解的方式来对待人工智能教育?它从去污名化人工智能开始。鉴于人工智能在媒体和娱乐领域的表现,这可能很难做到。这就是我们的第一个问题。

“30 亿人的生命在 1997 年 8 月 29 日结束。核战的幸存者称之为战争审判日。他们活着只是为了面对一场新的噩梦:与机器的战争。” - 《终结者 2:审判日》

上面引用的 90 年代最受欢迎的科幻电影之一,只是数百个,如果不是数千个“可怕的人工智能”的例子之一这种对人工智能的反乌托邦观点不是一夜之间形成的。在以人工智能为中心的媒体中,这是一个长期、持续的主题,包括视频游戏、电影、音乐等等。

很少有以人工智能(或机器人)为中心主题的电影,在某种程度上,不关注“与机器的战争”。从《大都会》(1927)到《2001:太空漫游》(1968)。从《终结者》(1984)到《终结者 2》(1991);未来被人造机器占领、破坏或与之冲突的景象是很常见的。

有什么不应该的吗?一部关于快乐的机器人爱他们的创造者并且不关心世界的电影很难成为一部有趣的电影。一部更现实的人工智能电影将描绘绘制天气模式或提高电子商务购物车效率的复杂机器。也几乎没有写满“夏季大片”。

这种对人工智能的负面描述导致了对人工智能、机器人以及延伸的整体困惑、不确定性和恐惧;机器学习和如实;大型科技公司。

消除魔法因素

AI 教育是问题吗?当然可以。然而,教育公众关于人工智能的“是什么”和“不是什么”有一个固有的问题。因此,社会的大部分人在很大程度上将人工智能视为一种技术魔法。魔法是很难被信任的。

难怪公众对艾的看法充其量是褒贬不一;最坏的情况是,多疑。牛津大学人类未来研究所人工智能治理中心进行的一项调查发现:

  • 41%的受访者部分或强烈支持 AI 的发展。
  • 22%有些或强烈反对人工智能发展
  • 82%的人认为机器人和/或人工智能应该得到认真管理。他们当然知道。他们已经在电视上看到了当他们不在的时候会发生什么。

鉴于 22%的美国人反对人工智能的发展,我们可以说还有很多工作要做。

这是数学

当然,现实是人工智能是一个复杂的数学、统计、概率、算法设计等系统。算不上魔法。几乎不是噩梦。

对于这个空间之外的人来说,打哈欠是从“数学”这个词开始的。普通大众对此视而不见。太复杂了,太复杂了,太高级了,理解不了。

因此,他们与这个空间的互动来自流行文化和关于世界末日、即将到来的人工智能启示录和 1984 年政府监控水平的点击诱饵文章。我们把它变成了一个难以理解的谜。

从基础开始

正确的出发点是什么?它始于统计和数学素养。以代数和微积分为例。如果不理解另一个,就很难理解另一个。

因此,我们遵循数学教育的线性进展,从开始开始,遵循逻辑进展。

AI 教育应该没什么不同。如果我们想让人们真正理解这个空间,我们必须想办法让它社会化。这可能包括增加资金,但也需要对人工智能教育采取整体和全面的方法。

通过创造一个用诚实和健康的眼光看待人工智能的环境,而不是危言耸听的恐惧,我们可以揭开这个空间的神秘面纱。这将使它更普遍,更少不为人知,结果是;没那么恐怖。

这在很大程度上始于理解我们自己是如何做出决定的。很难做出真正冷静的决定。在许多方面,我们生活在一个非常一致的社会。这就是在社交媒体上推动“喜欢”欲望的原因,也是政治家因大胆言论而获得“分数”的原因,或者是我们在做出重要决定时严重依赖“直觉”的原因。

在广告界,这就是为什么真实的证明或个人推荐形式的社会证明比支持你的产品有效性的 100 项研究更有力量。

然而,当机器在打电话时,它会变得令人害怕、困惑或陌生。我们必须改变这种心态。让人们理解我们制造的机器如何做出基于价值的决策,并揭开得出结论的“魔法”的神秘面纱。

务实的观点

人工智能教育的另一个重要部分是采取诚实、真实的方法来讨论人工智能是什么和不是什么。消费者“人工智能”的早期与“虚拟现实”的早期非常相似。也就是说,和真品几乎没有相似之处。

90 年代的街机爱好者无疑会记得“虚拟现实”电子游戏,这种游戏基本上不是真正的“虚拟现实”更确切地说,他们更像是在玩一个普通的视频游戏,但是画面很糟糕,头盔看起来像是坐在离屏幕很近的地方。

星际迷航“全息甲板”这不是。

今天,我们在早期的人工智能工具上更先进了一点。Alexa、Google Home 和类似产品通常被宣传或定位为家庭人工智能伴侣。他们聪明吗?不完全是。更像是带语音识别的高级搜索引擎。你不能和阿利克夏交谈。反正也不尽然。她并不真正明白你在问什么。

在人工智能甚至机器学习的阶梯上,我们有物体检测、情感分析、语言处理等。这些工具智能吗?他们理解上下文吗?他们知道我们在教他们什么吗?是也不是。但在我们全球如何看待“人工智能”的背景下,不是。不是真的。

因此,即使今年的人工智能距离天网或黑客帝国还有几十年的距离。本质上,我们离创造出能推翻我们的机器人或计算机程序还很远。还没有。

AI 的伦理呢?

正如我们之前提到的,人工智能&伦理学是一个年轻的、成长中的领域。正因为如此,我们坚信在这个领域工作的每个人都有责任遵守道德规范,设定高标准,并不断评估我们在道德规范方面的做法。因此,需要清醒的(而不是危言耸听的)恐慌。

正是对这些东西(道德和责任)缺乏的恐惧导致了对未来的古怪、反乌托邦的看法,比如说,人工智能对人类并不友好。

因此,我们看到两个独立的问题在伦理争论中发挥作用。

1.伦理与人工智能

这一部分讲述了我们人类的行为方式。也就是说,我们如何培养这个我们称之为人工智能的东西,以及我们如何应用它?对人工智能这一方面的反乌托邦观点推动了对老大哥式监控的恐惧。科技公司或大规模政府数据库侵犯公民自由等。或者在最坏的情况下,一个流氓国家或演员创造詹姆斯·邦德恶棍水平的邪恶活动。

2.伦理人工智能

这涉及机器如何做出基于价值的决策。这将包含我们教给机器的东西以及它们自己学习的东西(当然是在我们的指导和监护下)。对人工智能这一方面的反乌托邦观点给了我们长期持有的机器变得有自我意识并决定灭绝人类的科幻比喻。

亚当、夏娃、苹果和蛇

从神学的角度来看,这两个伦理问题并不新鲜。以亚当和夏娃的亚伯拉罕宗教中的创世神话为例。

人性的基础之一是我们行使自由意志和选择的能力。然而,亚当和夏娃的情况并非如此。至少一开始不会。

正如神话所说,没有自由意志的人类(当时表面上是机器)通过获取知识(即伊甸园中的果实)来获得自由意志。随之而来的是自由意志。因此,人类获得了选择自己道路的能力。

剧透:他们不会一直做出正确的选择。

可以想象人工智能的类似道路,这也是为什么世界末日的场景看起来不那么牵强。人工智能教育的一部分需要消除这种观念,即这些路径是一个已知的结论。

一切都是火

人工智能绝不是第一个遭到怀疑或恐惧的技术概念。毫不夸张地说,几乎每一种产品、工艺或技术都有其批评者和末日论者。从汽车到智能手机;对于各种可能性,无论是积极的还是消极的,总是有相当多的好奇和担忧。

同样没有夸张,你几乎可以对任何事情这样说。每一种产品、流程和技术都有可能引发火灾。也就是说,它能提供多少热量就能燃烧多少。

这确实是核能的例子,这些年来,核能的支持者和反对者都有。我们都看到了核能的可怕力量;在最好和最坏的情况下。

但是艾并不邪恶

和核能一样,当然也有潜在的坏处。然而,我们认为好处大于风险。然而,对这些风险的恐惧是为什么世界上 100%的能源不是由核电站产生的。

这也是为什么 22%的美国人反对 AI 开发。

在未来的某个时候,一个人工智能被用于邪恶的世界会存在吗?当然可以。我们还可能目睹另一场切尔诺贝利或福岛灾难。但这些结果都不是我们想要的、渴望的或不可避免的。

这就是为什么人工智能领域需要保持警惕,就像核能领域需要安全和监管监督一样。预防和防范不好的事情。

这就是为什么我们一直坚持认为,我们这些在这个领域工作的人必须不断努力保持其应用的道德标准。在努力获得好处的同时避免坏处。

因此,人工智能“造成伤害”的可能性,并不比一辆汽车或智能手机落入决心造成伤害的人手中的可能性更危险。事实上,我们认为恶意使用人工智能的门槛远远高于汽车和手机的门槛。后者有时被同时使用,这对我们是有害的。

未来并不可怕

毫无疑问,一个人工智能已经深深扎根于我们生活的世界是可以想象的。然而,它更有可能以几乎不为人知的方式交织在一起,比如电子商务算法、工程、广告或农业;而不是有意识的机器人推翻我们这个创造者。

人工智能教育应该更少地关注人工智能作为机器与创造者之间的战争的好莱坞神话;更多的是将赋予它生命的统计基础社会化和规范化。后者既神奇又现实。

统计和数学素养将有助于消除围绕人工智能及其邪恶潜力的恐惧。一旦我们做到了这一点,我们就可以专注于教育公众什么是人工智能,它将如何影响他们的生活,以及为什么它不是一件可怕的事情。

至少,没有好莱坞让我们相信的那么广泛。

原载于 2019 年 5 月 27 日【https://introspectdata.com】

人工智能学者:部署后改进的聊天机器人

原文:https://towardsdatascience.com/ai-scholar-chatbots-that-improve-after-deployment-deaef4f91379?source=collection_archive---------14-----------------------

部署后对话学习:喂饱自己,聊天机器人!

在过去的几年里,聊天机器人行业缓慢但肯定地成为一种全球现象。2016 年,聊天机器人市场价值约 7 亿美元。根据最近的一份报告,全球聊天机器人市场以超过 24%的 CAGR 增长,预计到 2025 年将达到 12.5 亿美元。

人工智能和机器学习技术的创新正在日益增强聊天机器人的功能,从而推动市场需求。与人工助手不同,聊天机器人提供即时响应,处理复杂的问题,增强分析,提高客户参与度,并且成本更低。人工智能、NLP 和机器学习的进步不断扩大,现代聊天机器人变得越来越智能。因此,聊天机器人的未来是光明灿烂的。

聊天机器人最近的一项发展是聊天机器人通过自我喂食来训练自己的能力——从他们参加的对话中提取新的训练数据的能力。

独立聊天机器人——从之前的对话中学习

以前,聊天机器人代理参与的大多数谈话或对话都是已经训练过的,需要大量的监督。

然而,新的研究工作现在提出了一种方法,为聊天机器人提供了无限的能力,它们可以参与对话,并学习自动评估用户对回复的满意度,以便能够改进自己。聊天机器人使用任何可用的监督数据进行训练,并在生产中发布。如果对话进行得很顺利(超过设定的满意度),机器人会继续自己的对话。相反,当对话进行得不顺利时,机器人会意识到它犯了一个错误,并请求用户反馈,它会预测并模仿用户反馈。聊天机器人偶尔用可用的响应重新训练,而不需要任何新的监督学习,从而提高其对话性能。

这种方法类似于人类的对话技巧,它不仅仅是观察其他人参与良好的对话,而是根据我们对话的反馈主动微调和调整我们的讲话。

潜在用途和影响

这种新方法结合了一些想法,创建了一个健壮的、能够随着时间的推移而改进的系统。虽然本文概述了如何在聊天机器人中使用它,但类似的方法可以用于许多不同的产品。我期待着有一天,当我推出一个产品,它会继续变得更好,并根据用户如何与产品互动和参与而更新。“为了你”的革命来了。

链接:【https://arxiv.org/abs/1901.05415v1】T2

AI 学者:周刊 1

原文:https://towardsdatascience.com/ai-scholar-weekly-1-c5a098cec0ef?source=collection_archive---------15-----------------------

有益于社会的人工智能,自我训练的聊天机器人,从跌倒中恢复的机器人,以及对 GANs 进展的回顾

作为我日常工作的一部分,我大量阅读最新的人工智能研究论文,这也是我非常喜欢做的事情。作为我创造更多内容的努力的一部分,我决定总结我发现的任何一周内最有趣的论文,并把它们发表在《新闻快报》上。如果你有反馈或意见,我很乐意听到你的意见!

Google AI 的社会公益、健康和机器人 2018 研究成果

艾为社会做好事

为了帮助提高对即将到来的洪水的认识,并通过与跨职能团队的合作,谷歌开始使用人工智能来创建更好的洪水预测模型。2018 年,他们开始将这些信息整合为 SOS 和谷歌公共警报。此外,谷歌人工智能的机器学习专家也发表了关于通过辅助人工智能预测地震余震的研究,并期待使用人工智能来解决地震背后的秘密,以减轻地震的破坏性影响。

许多外部机构也与谷歌的研究人员和工程师合作解决社会问题,包括使用卷积神经网络(CNN)来识别患病的木薯植物,检测新的系外行星等等。谷歌还宣布了谷歌人工智能社会影响挑战,个人和组织可以获得现金资助、指导和建议,以解决巨大的社会问题。

健康

2018 年,谷歌人工智能将他们的努力扩展到计算机辅助诊断和临床预测,包括开发与视网膜专家同等的视网膜人工智能模型,可以与眼科医生配对,以做出更准确的医疗决策。由此产生的糖尿病视网膜病变检测系统已经在印度和泰国的几家医院部署。

此外,发表了关于可以从视网膜图像中评估心血管风险的模型的研究。病理学焦点也没有落后,并且改进了前列腺癌分级乳腺癌检测,开发了深度学习和增强现实显微镜模型来帮助病理学家。

机器人

2018 年是谷歌人工智能在理解和实现使用 ML 训练机器人在没有人类监督的真实世界中如何行动方面取得长足进步的一年。他们还通过将基于采样的方法与 ML 结合起来,在学习机器人运动和几何方面取得了进展。这一年也将成为记忆中的一年,因为这一年该团队能够成功地在真正的机器人上训练 deep RL

更多阅读:https://ai . Google blog . com/2019/01/looking-back-at-Google-research . html

部署后自我训练的聊天机器人

独立聊天机器人——从之前的对话中学习

新的研究工作现在提出了一种为聊天机器人提供无限能力的方法,聊天机器人能够参与对话,并学习自动评估用户对回复的满意度,以便能够改进自己。

它是如何工作的

聊天机器人首先用任何可用的监督数据进行训练。如果对话进行得很顺利(超过设定的满意度),机器人会继续自己的对话。相反,当对话似乎进行得不顺利时,机器人会意识到它犯了一个错误,并请求用户反馈,它会预测并模仿用户反馈。聊天机器人偶尔用可用的响应重新训练,而不需要任何新的监督学习,从而提高其对话性能。

这种方法类似于人类的对话技巧,它不仅仅是观察其他人参与高端对话,而是根据我们自己的对话反馈主动微调和调整我们的讲话。

潜在用途和效果

与人工助手不同,聊天机器人提供即时响应,处理复杂的问题,增强分析,提高客户参与度,并且成本更低。随着人工智能和自然语言处理的不断进步,现代聊天机器人将变得越来越智能。

发现机器学习中识别和纠正标签偏差的新方法

链接:【https://arxiv.org/abs/1901.04966v1

如何消除机器学习的数据偏差

根据这项研究,新方法首先向人工智能研究人员和工程师展示了如何在他们的训练数据中识别偏见。其次,它演示了如何通过简单地给原始训练数据集分配适当的权重,在不改变标签和特征的情况下进行校正。该方法不修改任何数据标签,而是通过数据集重新加权改变样本点的分布来纠正不公平性。使用重新加权的数据集的训练与使用未观察到但无偏的标签平行,这导致无偏的分类器。

该程序超快,实用,易于微调,可用于任何学习人工智能模型。不仅如此,在一系列标准机器学习公平数据集和概念上评估该方法已经证明,它优于所有以前用于实现公平分类器的标准技术。

潜在用途和效果

你停下来想过这种新方法的效果吗?数据是解锁机器学习系统的关键,任何人工智能技术的实用性都取决于高质量的数据集。我们都知道,数据科学家已经发现,人工智能解决方案面临着自身数据偏差的挑战,这种偏差损害了它们的完整性。有了一种处理这种数据偏差的新方法,人工智能工程师可以走上一条开发更精确系统的道路。

这种基于重新加权的技术的效果将有助于实现无偏的分类器,并将现在和未来的人工智能预测提升到下一个水平。

人工智能现在可以教四条腿的机器人跌倒后如何恢复

链接:https://arxiv.org/abs/1901.07517v1

利用深度强化学习的四足机器人恢复控制器

先前存在的恢复控制器试图通过使用手工制作的控制序列、简化的模型和包括额外的肢或尾的附加机制来解决该问题。这种方法揭示了可预见的行为模式,这反过来限制了机器人的鲁棒性。此外,这些技术需要大量的工程努力。

新模型实现了深度强化学习,这是一种已知的人工智能训练技术,当智能体实现了控制机器人恢复动作的设定目标时,它会奖励智能体。该模型包括 4 个神经网络策略,其中 3 个行为和 1 个协调行为选择器。每个人都在个人层面的模拟环境中接受训练,然后直接部署到真实系统中。

模型验证结果

据研究人员称,他们通过评估一个名为 ANYmal 的狗大小的四足机器人来验证这一方法。通过该模型,ANYmal 展示了充满活力和反应性的恢复行为,试图在几秒钟内从任何随机坠落中恢复过来。恢复练习被测试了 100 多次,成功率约为 97%。

潜在用途和影响

深度强化学习越来越有助于推进机器人世界。首先,使机器人不仅依靠监督学习,而且有能力训练自己处理现实世界的情况。他们跌倒后恢复的能力不仅仅是一个壮举。当我们有更多的机器人比人类做更多的事情时,这肯定不会令人惊讶。

使用 GANs 创建面部照片和几何图形

链接:https://arxiv.org/abs/1901.06551v1

GANs 的能力引人注目,因为他们可以学习模仿任何类型的数据分布。例如,甘人可以被训练创造图像、音乐、演讲、散文等。最近发表的研究工作表明,GANs 现在可以用于创建令人印象深刻的面部图像及其相应的高精度几何图形。

高级 GANs:生成逼真的面部几何图形

尽管 GAN 模型在处理图像、音频和视频方面取得了成功,但将几何数据应用于这些图像、音频和视频仍然具有很大的挑战性。事实上,学术界将深度学习几何称为一个有争议的问题,因为缺乏几何对象的基本参数化,这阻碍了卷积滤波器的实现,卷积滤波器是现代 ML 系统的关键构建块。研究人员通过矩形数据单元的全局映射解决了参数化问题。使用先进的 GAN 方法描述、创建并开发映射设计。

研究人员通过矩形数据单元的全局映射解决了参数化问题。使用先进的 GAN 方法描述、创建并开发映射设计。

潜在用途和效果

甘人已经展示了他们在创造和修改图像方面的力量,比如以令人惊讶的 432,500 美元拍卖的人工智能肖像。它们已被用于提高图像分辨率,用于文本到图像的生成、图像到图像的翻译、视频帧生成、随机室内设计等。

识别社区问答网站中不明确问题的人工智能模型

链接:【https://arxiv.org/abs/1901.06168v1

随着谷歌公布大规模数据集、模型示例以及推进问答(QA)系统研发的挑战,这项新的研究可以帮助识别社区 QA 网站上明确和不明确的问题,这是一个最佳时机。

质量保证系统面临的挑战

尽管问答网站越来越受欢迎,但是网站上的许多问题仍然没有答案或者被忽略,因为它们不清楚、太短、太具体、难以理解等等。评估和预测问题质量的模型能够提高此类系统的工作质量,希望最终提高网站质量、真实性、受欢迎程度和流量。

感谢阅读:)

让我们也连线上TwitterLinkedIn

每个数据科学家都应该知道的人工智能搜索算法

原文:https://towardsdatascience.com/ai-search-algorithms-every-data-scientist-should-know-ed0968a43a7a?source=collection_archive---------11-----------------------

TL;下面的帖子概述了人工智能中的一些关键搜索算法,为什么它们很重要,它们有什么用途。

虽然近年来,搜索和规划算法已经让位于机器和深度学习方法,但更好地理解这些算法可以提高模型的性能。此外,随着量子计算等更强大的计算技术的出现,基于搜索的人工智能很可能会卷土重来。

什么是 AI 中的搜索算法?

在我们开始之前,让我们定义一下人工智能中的搜索是什么意思。

A search algorithm is not the same thing as a search engine.

人工智能中的搜索是通过过渡中间状态起始状态导航到目标状态的过程。

几乎任何人工智能问题都可以用这些术语来定义。

  • 状态 —问题的潜在结果
  • 转换 —在不同状态之间移动的行为。
  • 开始状态— 从哪里开始搜索。
  • 中间状态——我们需要转换到的起始状态和目标状态之间的状态。
  • 目标状态— 停止搜索的状态。
  • 搜索空间——状态的集合。

不知情的搜索

当没有关于在州之间导航的成本的信息时,使用无信息搜索。

对于不知情的搜索,有三种主要的经典算法:

  • DFS — 使用 LIFO 堆栈遍历搜索空间,以确定下一个节点。优点:适合深度图形,内存效率高。缺点:会卡在循环中。

[## 深度优先搜索-维基百科

需要额外的引用来验证。通过增加对可靠来源的引用来改进这篇文章。无来源…

en.wikipedia.org](https://en.wikipedia.org/wiki/Depth-first_search)

  • IDFS — 遍历搜索空间,使用一个 LIFO 堆栈 来确定下一个节点,当它到达某个深度时,它清除堆栈,增加深度限制,并再次开始搜索。

[## 迭代深化深度优先搜索-维基百科

需要额外的引用来验证。通过增加对可靠来源的引用来改进这篇文章。无来源…

en.wikipedia.org](https://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search)

  • BFS- 使用一个 队列 FIFO 遍历搜索空间以确定下一个节点。

[## 广度优先搜索-维基百科

需要额外的引用来验证。通过增加对可靠来源的引用来改进这篇文章。无来源…

en.wikipedia.org](https://en.wikipedia.org/wiki/Breadth-first_search)

知情搜索

当我们知道成本或对各州之间的成本有一个可靠的估计时,就使用知情搜索。

UCF- 用一个优先级队列和一个分数遍历搜索空间。给定状态的分数是通过沿着它被发现的路径从父状态到达该状态的成本来计算的。

[## 人工智能-统一成本搜索(UCS)

在这篇文章中,我将讨论在加权图中寻找最短路径的统一成本搜索算法…

algorithmicthoughts.wordpress.com](https://algorithmicthoughts.wordpress.com/2012/12/15/artificial-intelligence-uniform-cost-searchucs/)

A* 用优先级队列和分数遍历搜索空间。一个状态的得分是通过沿着它被发现的路径从父状态到达该状态的成本,结合给定状态的启发式值来计算的。

试探法的容许值必须符合以下两个性质。

  • 一个状态的启发式值必须小于从一个状态到目标节点的最低成本路径。
  • 试探值必须小于到状态的路径和每个父节点的试探值之间的成本值。

[## 搜索算法-维基百科

斯坦福研究所(现在的斯坦福国际研究所)的彼得·哈特、尼尔斯·尼尔森和伯特伦·拉斐尔首先发表了…

en.wikipedia.org](https://en.wikipedia.org/wiki/A*_search_algorithm)

IDA*——IDFS 版的 A *

[## 迭代深化 A* -维基百科

迭代深化 A* ( IDA*)是一种图遍历和路径搜索算法,可以找到 a…

en.wikipedia.org](https://en.wikipedia.org/wiki/Iterative_deepening_A*)

本地搜索

当有不止一个可能的目标状态,但是一些结果比其他结果更好,并且我们需要发现最好的结果时,我们使用局部搜索算法。大量用于机器学习算法的优化。

爬山- 一种贪婪的搜索方法,基于最小值损害下一个状态,直到达到局部最大值。

[## 爬山-维基百科

需要额外的引用来验证。通过增加对可靠来源的引用来改进这篇文章。无来源…

en.wikipedia.org](https://en.wikipedia.org/wiki/Hill_climbing)

模拟退火- 从爬山开始,直到达到局部最大值,然后使用温度函数来决定是停止还是继续处于更差的状态,希望找到更好的状态

[## 模拟退火-维基百科

这种在模拟退火算法中实现的缓慢冷却的概念被解释为…

en.wikipedia.org](https://en.wikipedia.org/wiki/Simulated_annealing)

GSAT—CNF 领域爬山的实现。为每个可能的参数选择一组随机的布尔值,如果这些值匹配所有的前提条件,则返回目标状态,否则我们翻转这些值,以满足目标状态的最大数量的可能前提条件,然后为我们在最后一次迭代中翻转的每个布尔值重复这个过程。

[## WalkSAT -维基百科

WalkSAT 首先选择一个对当前赋值不满意的子句,然后翻转该子句中的一个变量…

en.wikipedia.org](https://en.wikipedia.org/wiki/WalkSAT)

遗传搜索 -生成初始种群状态,使用适应度函数删除阈值以下具有最低值的状态。随机组合幸存者,然后变异一对夫妇位,并评估适应度和重复。

[## 遗传算法-维基百科

在计算机科学和运筹学中,遗传算法(GA)是一种元启发式算法,其灵感来自于…

en.wikipedia.org](https://en.wikipedia.org/wiki/Genetic_algorithm)

波束搜索 -使用模型当前和先前输出的前 n 个似然值执行统一成本搜索。

[## 波束搜索-维基百科

在计算机科学中,波束搜索是一种启发式搜索算法,它通过扩展最有希望的…

en.wikipedia.org](https://en.wikipedia.org/wiki/Beam_search)

蒙特卡罗搜索— 一种随机搜索算法,当终止时将返回正确搜索结果的最佳估计。蒙特卡罗算法总是很快,但只是可能正确。

[## 蒙特卡洛树搜索-维基百科

在计算机科学中,蒙特卡罗树搜索(MCTS)是一种启发式搜索算法,用于某些类型的决策…

en.wikipedia.org](https://en.wikipedia.org/wiki/Monte_Carlo_tree_search)

拉斯维加斯搜索是一种随机搜索算法,与蒙特卡洛不同,它只会在找到正确结果时返回。拉斯维加斯的算法总是正确的,但可能只是很快。

*// Las Vegas algorithm*
2 repeat:
3     k = RandInt(n)
4     **if** A[k] == 1,
5         **return** k;

[## 拉斯维加斯算法-维基百科

在计算中,拉斯维加斯算法是一种随机算法,总能给出正确的结果;也就是说,它总是…

en.wikipedia.org](https://en.wikipedia.org/wiki/Las_Vegas_algorithm)

大西洋城搜索 —是一种有界概率多项式时间搜索算法,结合了拉斯维加斯和蒙特卡洛搜索算法的优点和缺点。

[## 大西洋城算法-维基百科

大西洋城算法是一种概率多项式时间算法,其正确回答率至少为 75%。

en.wikipedia.org](https://en.wikipedia.org/wiki/Atlantic_City_algorithm)

后续步骤

如果你喜欢这篇文章,请马上关注新内容,并在 medium 或 twitter 上关注我。要开始试验这些算法,请查看 Azure 笔记本以及 Azure 上 CosmosDB 的图形数据库特性。

如果你还没有,你可以在下面免费订阅 Azure。

[## 立即创建您的 Azure 免费帐户| Microsoft Azure

开始享受 12 个月的免费服务和 200 美元的信用点数。立即使用 Microsoft Azure 创建您的免费帐户。

azure.microsoft.com](https://azure.microsoft.com/en-us/offers/ms-azr-0044p/?WT.mc_id=medium-blog-abornst)

关于作者

亚伦(阿里)博恩施泰因 是一个狂热的人工智能爱好者,对历史充满热情,致力于新技术和计算医学。作为微软云开发倡导团队的开源工程师,他与以色列高科技社区合作,用改变游戏规则的技术解决现实世界的问题,然后将这些技术记录在案、开源并与世界其他地方共享。

人工智能搜索算法实现

原文:https://towardsdatascience.com/ai-search-algorithms-implementations-2334bfc59bf5?source=collection_archive---------4-----------------------

人工智能中流行的搜索算法的解释和实现

在纳布星球,R2-D2 机器人为她的阿米达拉女王服务,并成功窃取了一些重要文件,其中包含位于火山星球穆斯塔法的黑魔王达斯·瓦达城堡的秘密。

一旦黑魔王发现了这件事,他就会派军队去追 R2D2,从他那里取回文件。

Photo by James Pond on Unsplash

害怕达斯的军队,R2D2 藏在一个山洞里。在进入洞穴时,R2D2 找到了洞穴的地图,它知道自己在网格位置 0,需要到达网格 61 才能走出洞穴。

达斯的军队知道 R2D2 藏在山洞里,所以他们在山洞里设置了炸丨药,一定时间后会爆炸。

让我们利用我们的人工智能知识和人工智能搜索算法,帮助 R2D2 搜索出洞穴的路径,并成功地将被盗文件交给他的女王。

R2D2 必须遵循以下规则来寻找他的出路。这个逻辑被硬编码在他的记忆中。

  • 每个节点的(x,y)坐标分别由迷宫顶部和左侧显示的列和行定义。例如,节点 13 具有(x,y)坐标(1,5)。
  • 按升序处理邻居。例如,如果处理节点 13 的邻居,首先处理 12,然后处理 14,然后处理 21。
  • 边境使用优先队列。将(优先级,节点)的元组添加到边界。例如,在执行 UCS 和处理节点 13 时,将(15,12)添加到边界,然后是(15,14),然后是(15,21),其中 15 是到每个节点的距离(或成本)。
  • 当从边界移除节点(或弹出队列)时,通过选择按字典顺序排在第一位的节点来打破平局。例如,如果从上面的(15,12)、(15,14)和(15,21)中选择,先选择(15,12)(因为 12 < 14 < 21)。
  • 当一个节点从边界移除(或弹出队列)时,该节点被视为已访问。
  • 只有有效的移动是水平和垂直的(不是对角线)。
  • 探索单个节点需要 1 分钟。逃离迷宫的时间将是探索的所有节点的总和,而不仅仅是最终路径的长度。
  • 所有的边都有成本 1。

1.统一成本搜索

R2D2 被指示使用统一成本搜索算法找到走出迷宫的路。如果 R2D2 使用统一成本搜索,他需要多长时间逃离洞穴?

让我们通过实现和编写统一成本搜索算法的代码来尝试找到答案。下面是 统一成本搜索 的伪代码

Uniform Cost Search Pseudocode

让我们用 python 实现这个伪代码。

Uniform Cost Search algorithm implementation

为了运行这个搜索算法,我们需要以图形的形式提供迷宫。这个 util.py 中提到了将这个迷宫转换成图形的代码。

因此,如果我们运行上面的代码,我们可以看到,如果 R2D2 遵循统一成本搜索,从起始位置(单元 0)到达迷宫的出口(单元 61),将探索 58 个节点,因此他将花费 58 分钟走出洞穴。

有趣的是,达斯·瓦达也研究了 UCS 算法,他现在更新了爆炸的时间,这样 UCS 就不再适用于 R2D2 了。

R2D2 现在有什么选择?

2.寻星

研究过搜索算法后,R2D2 知道 A 搜索比统一成本搜索 更快。他计划用**的 A搜索与**的曼哈顿距离启发式。R2D2 现在要花多长时间才能找到离开洞穴的路?

让我们用曼哈顿距离试探法实现 A 星搜索算法。 曼哈顿距离是网格上各点之间的水平和垂直距离之和,计算公式相同:

Manhattan Distance heuristic

让我们实现 A-Star 搜索算法,找出 R2D2 走出迷宫所用的更新时间。

A-Star Search algorithm implementation

通过运行上面的 A-Star 代码,我们知道 R2D2 现在将探索 50 个节点,因此将花费 50 分钟走出洞穴,这是 “比 UCS快 8 分钟”。**

R2D2 现在从一个可靠的机器人朋友(C-3PO)那里得到了一个提示,达斯·瓦达再次更新了计时器,传统的 A搜索不够好。作为专家,R2D2 并没有被吓倒。他注意到迷宫中有一个瓶颈。更具体地说,27–35°的边缘是从迷宫的左半部分穿越到右半部分的唯一途径。*

意识到这一点,R2D2 决定将搜索分成两部分。首先,他从起点搜索到瓶颈(节点 27)。然后,他从瓶颈(节点 35)搜索到目标。他现在要花多长时间才能走出洞穴?

如果 R2D2 运行瓶颈 Astar 从 0 到 27,然后 35 到 61,他只需要探索 38 个节点,与其他搜索方法相比,他可以更快地走出洞穴。

正如我们在上面的结果中看到的,A搜索算法是一种“智能”搜索算法,与其他传统搜索算法相比,它的运行速度更快。*

结论

这个问题也可以通过使用这里提到的更高级的搜索算法来解决。为了简化搜索算法的介绍,我选择不在本文中实现这些算法。

我试图用上面的星球大战故事,以一种有趣的方式解释和实现人工智能搜索算法。如果你喜欢它,请分享,如果你在代码中发现任何错误或可能的改进,请在评论中添加。

本文中使用的代码和完整的工作示例可以在下面的 git 资源库中找到:

https://github . com/fake monk 1/AI-搜索-算法-实现

人工智能系列:走进学习理论。

原文:https://towardsdatascience.com/ai-series-a-walk-into-the-theory-of-learning-273f79e585e4?source=collection_archive---------22-----------------------

机器学习的目标是建立最简单的近似模型,能够解释数据生成过程提供的过去数据和未来实例。

统计学习理论是人工智能发展得最漂亮的分支之一,它为我们提供了许多当今机器学习算法的理论基础。它还试图用哲学的方法来确定从经验数据中得出有效结论的基本要素。

事实上,在机器学习中,将输入域的数据映射到输出域的相应数据的目标函数是未知的。如果它是已知的,我们根本不需要任何学习,我们只需要实现它。学习的基本前提是使用一组观察来揭示一个潜在的过程。在机器学习中,目标是从有限的样本数据集中找到一个逼近目标函数的函数。

从监督学习的角度来看这个问题,我们的挑战包括从一组带标签的数据中学习。训练集中的每个点都是一个输入-输出对,其中输入映射到一个已知的输出。学习问题包括找到最佳算法,该算法能够捕获由样本数据对的分布隐含描述的未知支配规则,并构建一个假设函数,该假设函数逼近目标函数,可用于预测未来未知输入的输出。学习模型的性能,或概括性能,是根据其对独立测试数据的预测的准确度的百分比来测量的。

学习理论及其众多的分支和子理论为我们提供了构建最高性能模型的所有必要工具。

为了选择最佳模型,然后评估其泛化性能,作为最佳实践,在数据丰富的情况下,可用于训练算法的样本数据集通常被分成 3 个随机选择的组:

算法用来拟合模型的训练集。通过利用算法的调整参数(超参数),我们可以开发不同复杂程度和精度的不同模型。
用于评估不同模型性能的验证集,将它们相互排序,并在其中选择具有最低估计预测误差的模型。
用于评估完全指定的所选模型的泛化性能(和误差)的测试集。
当建模者探索不同的模型类型和它们带来的参数的广泛选择时,预测误差,或概括误差,经常指导模型选择过程。但是估计预测误差并不是微不足道的,因为它是 3 个误差子类的结果:偏差、方差和噪声。

也称为“不可约误差”,噪声是唯一一种不能通过选择模型来减少的误差,因为它仅取决于我们可用于训练的数据。

如果训练数据集中的数据是由固有的随机(random)过程生成的,或者是一个错误的问题,或者是特征集是错误的或不完整的,我们可以花一生的时间来尝试提高我们的模型预测性能,但我们永远不会比我们的杂乱数据允许我们做的更好。

这就是为什么数据科学家花大约 19%的时间寻找好数据,另外 60%的时间清理和组织他们收集的数据:机器学习模型准确预测他们被训练预测的东西:在最好的情况下,他们的预测只能与用于训练的数据一样好。垃圾进,垃圾出。或者更好地说,有噪声的数据输入……有噪声的、容易出错的预测输出。

但是噪音不仅仅是…无用的噪音。它实际上可以作为一个警报,指示错误或不完整的特征选择或错误的训练数据集。

假设我们正在尝试学习一个函数,它能够根据包含年龄的训练数据集来预测人的体重。嗯……是的,年龄可能是预测体重时要考虑的因素之一,但还有许多其他因素来表征体重,包括身高、性别、地理位置等等。如果只考虑年龄,您很可能会得到一个较弱的预测值和一个较大的概化误差,因为对于输入中的每个年龄值,您将有许多不同的权重值可供选择或平均。

因此,对于给定的一组特征,噪声在真实分布中可能不是真正的噪声。可能我们只是没有从数据集中选择足够的表征特征,或者选择了错误的特征,从而无法模拟真实的分布。

当对给定数据集的最大可实现性能(或最小可实现泛化误差)设置正确的期望值时,噪声也非常重要。

例如,假设你正在做金融预测,试图检测市场是上涨还是下跌。这种类型的数据中的噪声水平如此之高,以至于你会非常高兴持续地在 53%的时间里得到正确的结果。因此,虽然 47%的错误率可能看起来是一个非常高的错误率,但这可能是在这种情况下您可以获得的最佳性能。但是考虑一下这个:只要泛化性能高于 50%并且是一致的,你就在做生意,就像许多对冲基金一样,通过这些预测赚了很多钱!

正如我们所看到的,虽然噪声可以为我们提供一些重要的质量相关指标,但它的存在确实会损害我们的模型泛化性能。因此,在训练算法时,我们需要确保它从分布固有噪声中收集尽可能少的数据,这些噪声不携带任何有用的可重复使用的信息或模式,这些信息或模式表征了我们试图理解的控制函数的分布。

怎么会?嗯…确保算法不会学习…太多!

如果算法非常精确地映射了给定训练分布的所有数据点,那么它肯定会在该特定训练数据上产生非常小的误差(训练误差)。然而,在从有效数据点学习的同时,它也将拾取由噪声产生的数据中的随机变化,其代价是测试数据的高误差(测试误差)的高得多的成本,并且因此由于高泛化误差而导致低性能。

换句话说,更高的精度意味着收集更多的噪声,这些噪声会使算法与训练数据中的明显关系“混淆”,而训练数据中的明显关系通常并不基于良好数据和噪声数据的错误组合。

对训练数据建模过于严格的算法会吸收太多的噪声,其结果是,根据训练集的不同,它会产生完全不同的模型,并在不同的测试数据上表现出很大的性能差异。

方差准确地衡量:算法对特定训练数据集的敏感度。高方差表示算法与数据拟合得太好,并且可能过于复杂,因为数据分布试图建模,因此被称为过度拟合数据。

这就是为什么我们需要寻找“最简单的近似模型”!

另一方面,我们也不能选择一个过于简单且表达能力不足的模型来捕捉和学习事件数据分布的复杂性。

想象一下,使用线性回归来绘制具有非线性模式的训练数据集:无论您多么努力地尝试,无论您能够收集多少观察值,线性回归都只是一条线,而且过于死板,无法对非线性数据集的曲线进行建模。偏差,在方差的对角,本质上测量机器学习算法拟合或足够好地表示用于训练系统的数据集的分布的能力。换句话说,偏差为模型做出的简化假设提供了一个维度,以使目标函数更容易学习,但代价是无法找到最佳的可能函数。在这种情况下,该算法将具有较高的偏差值,并被称为数据欠拟合。

过度拟合的特征是方差,而欠拟合的特征是偏差。

好吧,如果我能够转移至少一部分主要概念,你现在可能已经明白了,我们正面临一个有趣的困境:一方面,如果算法紧密适合训练数据,或者过度适合训练数据,它将显示低偏差但高方差。这表明泛化性能不太好。

另一方面,当算法过于简单而无法很好地拟合训练数据,或者对数据进行欠拟合时,它将显示出较低的方差但较高的偏差值。可能具有良好的泛化性能,但可能不是我们可以选择的最佳算法。

在统计学中,这是一个众所周知的困境,它被称为偏差-方差权衡。

能够找到一种算法,很好地平衡偏差和方差的值,将引导我们准确地看到:具有最佳泛化性能(或最小泛化误差)的最简单的近似模型。

偏差-方差权衡概念在机器学习中也通过估计-近似权衡来捕获。偏差衡量模型对目标函数的较差逼近。为了提高性能,我们可能需要选择不同的算法或算法系列,它们提供更大的假设空间,覆盖更大的区域,更有可能接近或更好地近似我们的目标函数所覆盖的空间。但是让我们记住,我们试图接近的目标函数仅仅是从有限的样本数据中得到的。不是从真实的,未来的,全分布的。样本数据是我们学习的全部,有限的一组数据只能代表描述整个现象的真实函数的估计。因此,类似于偏差-方差权衡的情况,如果我们过于逼近描述样本分布的函数,从而产生较低的逼近误差和较低的偏差,那么风险在于,当我们随后使用新构建的函数来预测或分类来自真实分布的未来未知数据时,我们的函数将继续过于紧密地基于样本数据的学习模式进行预测,并且将导致过于僵化和具体,从而无法很好地捕捉真实分布的一般进展。在这些情况下,每个不同的训练集将生成非常具体的模型,这些模型彼此之间差异很大。这就是为什么在统计学中,表达这一特定方面的统一度量被称为方差,而在更面向机器学习的“方言”中,同一方面被称为估计误差。方差大,估计误差大。

正如我们刚刚看到的,由于模型的复杂性会影响它们的性能,我们需要找到一种方法来以定量的方式定义复杂性,其中,Vapnik-Chervonenkis 维度是一种广泛使用的方法,用于在偏差和方差之间找到正确的平衡,因为它可以量化精度,很好地捕捉模型的复杂性概念。

在不涉及太多细节的情况下,VC 维涉及(但不一定等于)每个模型具有的参数数量,而参数数量又与模型可以处理的数据点数量有关。主要思想是,模型想要近似的数据点的数量越多,模型需要映射它们的参数的数量就越多,这增加了复杂性,并使模型非常特定于该数据集。而具体化并不能很好地概括。VC 维有助于捕捉等式中两个不相容但不可分割的元素之间的最佳平衡。

[对于那些想要深入了解 VC 维的人,请考虑:VC 维测量算法的有效参数或二进制自由度的数量,这反过来又表示特定算法可以粉碎的数据点的数量。如果一组点被一类函数分解,不管我们如何给每个点分配一个二元标号,这个类中的一个成员可以完美地分离它们。]

在测量算法复杂性的同时,VC 维还可以帮助我们估计预测误差,为我们提供一种概率评估,即在给定样本数据集的情况下,算法是否可以学习和推广:与可用训练数据的数量相比,VC 维较低将表明测试误差不会远离训练误差。

这是一个令人惊讶的结果:我们实际上可以做出一个强有力的声明,仅仅使用模型的一个属性,我们的测试性能在我们没有见过的数据上将会如何!

但是学习理论的惊喜并没有到此为止。它为使学习成为可能的迷人旅程提供了更多的基本概念和基本指导。

在推动数据科学家寻求正确的炼金术,将未经训练的数据转化为有价值的预测的同时,它也提出了许多很好的常识,即我们人类应该如何对发生在我们周围的生活事实建立更可靠的假设:多一点现实的数据,少一点嘈杂的观点。

谢谢。

原载于 LinkedIn

AI Sidewalk #5:关于 Minimax 的一切!

原文:https://towardsdatascience.com/ai-sidewalk-5-all-about-minimax-via-tic-tac-toe-4c7afe550e83?source=collection_archive---------29-----------------------

了解如何成为无与伦比的井字游戏代理!

Beginning of a new journey. Credit to www.pexels.com/@tony-367405

这个帖子

这篇文章将重点关注名为 Minimax 的人工智能算法,该算法可用于在不确定性下做出决策。在整篇文章中,我们将利用井字游戏来更好地理解和实现 Minimax。

Minimax 到底是什么?

更具体地说,顾名思义,该算法寻求最小化给定代理的最大可能损失。与此相反的算法叫做马希民,它寻求最大化它所应用到的代理的最小可能增益

井字游戏人工智能公式

因为这是我们第一次冒险进入人工智能的世界,让我们先弄清楚一些基本的人工智能概念。第一个概念是状态状态空间。对于井字游戏,状态只是给定游戏棋盘的任何给定配置:

Example state for Tic-Tac-Toe game

此外,状态空间由所有可能的井字游戏棋盘状态的集合组成。很快你就可以看出井字游戏的状态空间会非常大!

第二个概念是在板值的空间中搜索。产生的结构是以下形式的树:

Tree for simulating Tic-Tac-Toe moves

请注意,该树的更深层次将继续在玩家 1 和玩家 2 的回合之间交替,直到在最后一级达到一些最终棋盘状态。

极大极小的井字游戏公式

如果我们扩展上面的树来获得所有的结束状态,我们可以很容易地分辨出哪些状态是赢的状态、输的状态和平局状态。此外,我们可以根据每个州是赢、输还是平来给他们打分。这些可以告诉我们对于一个给定的玩家(在下面的例子中,玩家“X”)每个状态有多“好”。

Possible Tic-Tac-Toe Board configurations and their associated scores

在这个有两个代理的场景中,Minimax 背后的核心概念是,一个代理将充当最大化者(在我们的例子中,是玩家“X”或 CPU),而另一个代理将充当最小化者(在我们的例子中,是玩家“O”或用户)。

让我们通过一个例子来说明 Minimax 如何帮助决定 CPU 应该采取什么行动:

整个算法本质上由两个独立的步骤组成。第一步,算法沿着树往下走,给每一层的每块板分配相关的“分数”。然后,第二步向上传播回来,并基于最高得分的整体路径选择一个移动。

Minimax algorithm phases

井字游戏最小最大实现

井字游戏棋盘类

首先,我们可以创建一个简单的类来初始化表示 TicTacToeBoard 对象的对象,这些对象将显示在我们的前端 UI 中。这个类中有许多方法,其中一些实际上并没有在最终产品中使用。以下是完整的代码片段:

让我们来看看最终产品中实际使用的一些核心功能:

  • init: 初始化一个空的 3 乘 3 数组(全零)
  • execute_turn: 接受一个符号、一个行号和一个列号,在当前的棋盘对象上执行适当的移动。
  • game_is_won: 返回true,如果双方中有一方在当前棋盘上赢得了游戏。否则返回 false。
  • make_move: 不是最好的名字!在当前棋盘的副本上模拟移动,并返回具有相应结果状态的新棋盘。
  • get_possible_moves: 以(row,col)的形式返回一个元组数组,每个元组代表当前棋盘上可以进行的一次可能的移动。
  • calculate_board_score: 计算当前棋盘的分数。如果“X”在当前棋盘上处于获胜位置,则该分数为+10;如果“O”处于获胜位置,则该分数为-10;如果没有人处于获胜位置,则该分数为 0。

井字游戏烧瓶应用程序文件

除了上面的 board 类,我们还有一个 Flask 应用程序文件,它有一些自己的端点和函数,使我们的前端(我们将制作)能够调用我们的后端。相关代码如下所示:

让我们关注实现 Minimax 算法的三个函数,因为它们构成了我们的“硬”级 TicTacToe 代理的核心功能:

极大极小函数

这是我们主要的 minimax 函数,如果 AI 玩家是“X ”,它简单地返回分数最大化移动,如果 AI 玩家是“O ”,返回分数最小化移动。但是在计算每一步棋的分数时,它会考虑对手未来的所有棋步。最后,它返回给定玩家产生最佳分数的移动:

最小化代理功能

我们的算法使用的第一个辅助函数简单地模拟了最小化代理(在我们的例子中是‘O’)。注意,这个函数递归地调用了 maximizer 函数(代表‘X’)。你可以认为这是充分利用我们所拥有的一切。因此,在这个函数中,我们试图找到 maximizer 函数返回给我们的分数的平均值,在我们的例子中,它实际上是计算 minimizer 以前返回的最高分数:

最大化代理功能

这是我们的算法使用的第二个主要助手函数,它简单地模拟了最大化代理(在我们的例子中为“X”)。注意,这个函数递归地调用 minimizer 函数(它代表‘O’)。你可以再一次认为这是对给予我们的最好的利用。因此,在这个函数中,我们试图找到 minimizer 函数返回给我们的分数中的最高分数,在我们的例子中,它实际上计算 minimizer 的计算分数的平均值:

产品化

让我们试着将我们的后端模型产品化,让它更容易被用户使用!我们可以利用一些基本的 HTML 和 CSS 来做到这一点,同时遵循 Flask 的标准项目目录结构。

高级目录结构

在我们的例子中,目录结构相当简单,除了上面的两个文件之外,只包含两个不同的文件夹:

  • 静态文件夹:这个文件夹包含了我们将要使用的 CSS 文件
  • 模板文件夹:这包含了我们将使用的所有 HTML 文件

演示

这里有一个简单的演示来展示最终产品的样子。它与相关的 Github repo 有着完全相同的后端,并被托管在 Heroku @【calm-brook-53734.herokuapp.com】上

[## 井字游戏

MinimaxAgent!

calm-brook-53734.herokuapp.co](https://calm-brook-53734.herokuapp.com/)

请注意,对于演示来说,用户可以玩两种不同的难度,简单和困难。这主要是为了展示随机移动方法和极大极小方法在性能上的本质区别!

密码

所有相关的代码(包括前端位!)可以找到@https://github . com/ShantanuPhadke/AI-Sidewalk/tree/master/5 _ Minimax

扩展

Credit to https://www.pexels.com/@jeshoots-com-147458

在这篇文章中,我们确实覆盖了很好的领域!但正如他们所说,这只是冰山一角。我们在相对简单的棋盘游戏“井字游戏”上实现了一个稍加调整的 Minimax 代理(它的简单之处在于它的状态空间相对较小)。现在你已经知道了基本知识,想象一下你可以为其他游戏制作代理!起初,它可能看起来很复杂,但基本过程可以分为 2 到 4 个部分,这取决于您想要完成的任务:

(1)找到一种表示游戏状态的方法。

(2)制作一个树(或图),列出游戏中所有各种可能的状态,并智能地搜索这个状态空间,以确定你的 AI 的最佳行动。

(3)作为附件(2),通过‘修剪’状态空间中不需要搜索的部分来加速你的 AI。一种样本修剪技术被称为阿尔法-贝塔修剪

(4)将你的 AI 产品化,让目标受众可以轻松对抗!

人工智能、社会数据科学和气候危机

原文:https://towardsdatascience.com/ai-social-data-science-and-the-climate-crisis-ac7fafcadf31?source=collection_archive---------21-----------------------

Please reboot your systems. Fridays For Future, 20.09.2019 in Bonn, Germany — Photo by @mbaumi

为我们的星球架起社会科学和技术的桥梁

维基百科上仍然没有关于社会数据科学的解释,这并不是说这将使它成为一个领域,但在开始时,它更多的是一个旁注。过去几天,我一直在考虑如何组织一个项目,让来自不同背景的人联合起来探索人工智能的话题。这样做让我首先探索了四个不同的模块:人工智能、科学技术研究(STS)和计算机科学伦理(T1)。首先,我要说的是,如果不考虑或关注每一个领域及其历史内涵、文学、人物角色等等,把它们融合在一起似乎不会很有成效。然而,新的从业者或研究人员越来越多地将社会科学中的理解或专业知识与编程中的表演技能相结合,正在逐渐进入社会数据科学的新兴领域。我认为这值得进一步探讨。

社会数据科学导论?

这一新兴领域可能有多种发展方式,但是很可能会有大量社会科学家向计算机科学领域发展,反之亦然。在某种程度上,我想把这种向两个不同领域伸出手的行为想象成搭建一座桥梁。

然而,很可能会有很多边境管制和混乱。政治科学家不是已经开始使用整合了机器学习技术的定量方法了吗?在某些环境中确实是这样,尽管至少在奥斯陆大学是这样。

经济学家们不是已经把编程变得更符合商业目标了吗——把金融与数学和计算机科学结合起来,形成商业智能领域或“quants”。据说正是这些“量子”发展到了数据科学领域——介于两者之间。我之前已经描述过几次数据科学,但我不断找到新的理由再次重复它:

"数据科学通过使用统计数据和深度学习来做出更好的决策并改善招聘,成功地为所有商业模式增加了价值。它还被用来处理以前的数据,并预测可能的情况和风险,以便我们能够努力避免它们。”

在维基百科上,甚至数据科学的定义也是这样的:

“数据科学是“统一统计学、数据分析、机器学习及其相关方法的概念”,以便用数据“理解和分析实际现象。”

在描述‘实际现象’时,我当然假定他们指的不是哲学现象学:

现象学是从第一人称视角对意识结构的研究。一个经验的中心结构是它的意向性,它指向某个东西,因为它是某个物体的经验或关于某个物体的经验。

从这个意义上来说,“实际”现象是某人经历的“数据”,然后被量化。

取得平衡

在这些【实际现象】和实际发生的事情之间会有平衡吗?方法被应用,解决方案被测试,行动被采取,作为屏幕上的反馈,尽管 UX 或 UI 设计师被雇佣来破译这些,人类学家也是如此——似乎很少有人涉足不同的水域。UX/UI 可能是其中最接近的一个,一些社会科学家涉足代码或专业地完全进入这个方向,承担定性研究员或开发人员的头衔。

如果来自社会科学的理论与技术模块全面结合在一起,它会看起来像 STS 或不同吗?编程模块也在某些 STS 课程中引入,例如在瑞典。Kasper Davidsson、Lars-ke lar zon 和 Karl Ljunggren 写了一篇文章,名为STS 学生编程的自我效能。让我借用一个借用的定义:

被许多人认为是该理论创始人的加拿大心理学家阿尔伯特·班杜拉将自我效能定义为“……人们对自己组织和执行达到指定类型的表现所需的行动过程的能力的判断”

这项研究是小规模的,他们确实说不能一概而论,但是我认为引入这个术语很有趣。在被技术塑造的过程中,实践者或研究者的观点是重要的。

如果先验是希望——将不同的领域结合到一个模块中,那么很难看到社会数据科学如何成为解决方案。艾伦·图灵研究所(Alan Turing Institute)将社会数据科学作为一个研究领域,其观点如下:

“该小组旨在通过两个主要主题解决与越来越多的新的异构数据相关的挑战:在不同的社会和时间尺度上发展人类行为的基础理论;并确定方法上的挑战和解决方案,使社交数据科学能够在关键应用领域提供稳健可信的结果。”

是社会科学家应该扮演程序员的角色,还是计算机科学家应该扮演社会科学的角色?如果不是,他们是否会在两者之间走向“社会数据科学”的共享空间?

打破这种平衡(或不平衡)成为该领域必须在其中导航的活动。这是以前由数据科学完成的,尽管我们不应该在一个新的方向上快速跳到历史结论,我们仍然可以检查这个推理。

将其命名为数据科学

为介于两者之间的地方找一个新的有各种各样的故事,至少它是如何流行的:

“2010 年,O'Reilly Media 的内容战略副总裁 Mike Loukides 通过他的文章《什么是数据科学?》将数据科学带入了主流语言在过去几年中,数据科学越来越多地与大数据分析联系在一起。2000 年代中期,LinkedIn 的 DJ Patil 和脸书的 Jeff Hammerbacher 创建了数据科学团队,专门从他们网站产生的海量数据中获取商业价值。”

它专门用于从产生的海量数据中获取商业价值。

然而,数据科学家是从计算机科学家、分析师、研究员之间的不平衡和混乱中成长起来的。据 DJ 帕特尔所说。

它成了介于数学和统计学、“黑客技能”和实质性专业知识之间的地方。

Image from Doing Data Science by Rachel Schutt, Cathy O’Neil retrieved 14th of November 2019

一位名叫 GivenTheData 的 R-blogger 发布了这张图,其灵感可能来自数据科学的经典概念。我喜欢社会科学和计算机科学之间的一点混淆。

From r-bloggers retrieved 14th of November 2019

数据科学技能和数据驱动的计算社会科学以及传统的实证研究令人感兴趣。

社会数据科学的早期例子

在我看来,计算社会科学最丰富的作品之一是《T4:增长的极限》(T5,1972),它通过模拟向世界介绍了可持续性的概念。

我认为这是特别“神奇”或有趣的方面。然而,这可能是我试图“历史化”社会数据科学——使其成为基础历史的一部分。总的来说,我认为我这么说并没有完全错,我想不出有几部作品对社会更重要,它将社会科学与计算方法结合在一起。

从人性的角度考虑,意识到我们地球的局限性在当时并不具有开创性。自从工业革命以来,环保运动和自然运动就一直这么说。然而,计算能力与代表社会的社会科学思维相结合的新颖元素是——新的和有趣的!我引用第 23 页的话:

“我们已经使用计算机作为工具来帮助我们自己理解作为现代世界特征的加速趋势的原因和后果,但是熟悉计算机决不是理解或讨论我们的结论所必需的。这些加速趋势的影响提出的问题远远超出了一份纯科学文件的适当范围。它们必须由更广泛的群体来讨论,而不仅仅是科学家。我们在这里的目的是开启这场辩论。”

我想不出有什么比气候危机更大的问题了,它现在引起了儿童和青年的极大关注。对我来说,这是一个令人震惊的事实,它动摇了我想要更多行动的想法。这在一定程度上归功于这些发现的实现,这些发现结合了不同类型的专业知识,使人们能够理解一种情况。

数据科学本身无法做到这一点,或者也许可以…我不确定,因为我很少听到数据科学家谈论这些疾病或问题。数据科学的创建是为了:“… 从极其庞大的数据中获取商业价值…”然而,这不太可能对每个人都有意义。对于想把原始数据变成黄金、石油或其他有商业价值的产品的大公司或小公司来说,普遍的说法是这样的。

当我在维基百科上搜索“社会数据科学”时,这是一种非常奇怪的感觉。“…不存在。你可以要求创造它,“我正在要求创造它。

社会中的人工智能&社会数据科学

考虑到这种方法以前的贡献,至少在某些情况下,我可以温和地建议我们继续朝着这个方向前进,特别是在人工智能方面。

如果我们设法将对环境、不平等、多样性的关注与计算机科学结合起来,那么也许我们可以为更好地理解其含义做出有价值的贡献(尽管它们似乎很明显)。一个经常被提到的谚语需要一个扩展线,这个扩展线在历史上是用来表示称赞的:

万事通,无所不能,
虽然常常比一个人的大师要好。

在关于多学科方法的讨论中,我想提到人工智能领域的创始人之一,司马贺。他的研究以其跨学科性质而闻名,跨越了认知科学、计算机科学、公共管理、管理学和政治学等领域。

然后,也可以说他不是一个无所不能的大师,他是几个领域的大师。然而,我们可能需要其他类型的社会科学家或介于两者之间的人来找出问题所在,或以更全面的方式理解背景和解决方案。

如果我们回到计算机科学和定量方法交叉的社会科学,我认为会有很多有趣的东西出现。有了社会学、人文地理学、人类学、发展、法律、政治、语言学、历史和教育的洞见,我们可能收获更多。当我说“获得更多”时,我认为值得一提的是,“有收益的”必须对人类和人类所在的生态系统都有用。

在 AI 领域有什么好的用法?

人工智能领域的机器学习技术可以用来做很多好事,然而,如果我们认为它应该增加明确的价值,而不了解社会,我们可能会太快概括。开发解决方案和原型已经在对社会生活有重大影响的应用中展开。我见过许多数据科学家为理解社会而提出的伟大倡议,但我最尊敬的那些人也认识到合作对于负责任地使用技术的重要性。

聪明的人也可能是愚蠢的,尤其是:具有或表现出非常缺乏常识。当你谷歌愚蠢时提出的字典例子是:“我愚蠢到认为她是完美的。”当我们想到人工智能时,许多人会想到完美,或者努力追求完美。这是一个遥不可及的目标,我们不太可能实现,如果我们真的实现了,就生物多样性和污染而言,这可能会严重破坏一个已经毁灭的星球。

老实说,我认为这是相当愚蠢的,在人工智能或数据科学领域很少有科学家谈论气候危机。他们没有更早这样做。当我说“他们”时,我的分类当然有些错位,在预测方面最先进的人可能是研究气候或预测天气的科学家。

事实上,挪威气象学家 rag NAR fjrtoft 在 1950 年使用 ENIAC 电子计算机成功地进行了第一次数值天气预报。另一方面,奇怪的是,维基百科关于天气预报的文章没有提到“气候变化”或“气候危机”,这进一步说明了我的观点。

我们可以拥有没有常识或目的的数据;我们可以让人工智能的应用不植根于对地球的生态或社会理解。这是历史性的,并被错误地描述为解决方案——而事实上它们正在引发更多的问题。

至少我认为,这就是为什么数据科学和人工智能领域需要更广泛意义上的社会科学和人文科学。尽管这些领域或学科在解决问题方面存在失败,但仍有很好的机会去学习和接近手头的问题——努力建设一个繁荣的星球,在这个星球上,生物多样性和植根于生态的可持续性是重中之重。

这里是#500daysofAI,您正在阅读的是第 163 条。500 天来,我每天都写一篇关于人工智能或与之相关的新文章。

面向 2020 年的欧盟人工智能战略

原文:https://towardsdatascience.com/ai-strategy-in-eu-2018-2019-44393b7eaf28?source=collection_archive---------19-----------------------

Illustration by author with assets from Undraw

2018-2019 人工智能相关的各种战略和政策的总结

摘要

欧盟在伦理人工智能方面的投资是在指导方针和建议中协调的,对成员国都没有法律约束力。这导致了广泛的参与和将在整个区域推广的具体举措,如获得由芬兰创建的翻译成成员国所有语言的免费课程(人工智能要素)。除了试行道德准则以及明确承诺投资人工智能,同时考虑到环境和气候问题,这也是该战略的一部分。它将与解决可持续性问题的以人为本的方法同时发生。这些战略文件中的预示概述了在未来十年 2020-2030 年人工智能领域的研究投资将大幅增加。欧盟目前的主要焦点是伦理使用;增加公众的了解;和实际负责任的应用程序协作。

为什么试图理解欧盟的人工智能战略?

在接近 2020 年的最后一周,我决定回顾一下欧盟(EU)过去两年内与人工智能相关的战略。现在是 2019 年 12 月底,我认为总结一下欧盟内部与人工智能领域相关的某些战略举措会很棒。为此,我研究了欧盟发布的五份不同的文件。这当然不是一次全面的审查,而是试图选取欧盟在过去几年中发布的各种文件,并简要介绍它们所包含的内容。我这样做首先是为了学习;其次,这样欧盟成员国的公民可以更加协调地实施这一战略;第三,欧盟以外对政策感兴趣的人可以了解欧盟目前在伦理人工智能投资方面的发展方向。

这五份文件如下:

  1. 人工智能合作宣言(2018 年 4 月)
  2. 欧洲人工智能(2018 年 4 月)
  3. 可信人工智能道德准则(2019 年 4 月)
  4. 可信人工智能政策与投资建议(2019 年 4 月)
  5. 欧洲联盟大会(2019 年 6 月)

我将仔细检查下面的每份文件,从申报单开始。

1.人工智能合作宣言

25 个欧洲国家于 2018 年 4 月 10 日签署了一份关于人工智能合作的宣言。挪威是其中的一员,尽管他们不是欧盟成员(而是欧洲经济区的一部分)。据说这是建立在欧洲已有的投资和社区基础上的。

它提出通过获取公共部门数据来提高技术和工业能力。应对社会经济变化,特别是劳动力市场的变化。确保在基本权利和价值观以及透明度和问责制的基础上建立适当的法律和道德框架。

“成员国同意”的承诺(我有时会简化):

  1. 致力于在人工智能方面实现全面和综合的欧洲方法,以提高欧盟在 R&D 人工智能方面的竞争力、吸引力和卓越性(如有必要,使国家政策现代化)。
  2. 鼓励与利益相关方就人工智能进行讨论,并支持在欧洲人工智能联盟中发展广泛而多样的利益相关方群体,以建立意识并促进人工智能的发展,从而最大限度地提高经济和社会效益。
  3. 作为优先事项,考虑将 R&D&I 资金分配给人工智能的进一步开发和部署,包括破坏性创新和应用。
  4. 加强人工智能研究中心并支持其泛欧洲层面。
  5. 在欧洲层面建立数字创新中心。
  6. 让人工智能在公共部门可用。交流政府采购和使用人工智能的最佳实践。
  7. 帮助中小企业和非技术部门的公司获得人工智能。
  8. 就人工智能相关的伦理和法律框架交换意见。
  9. 确保人工智能的开发、部署和决策以人为中心,防止人工智能应用程序的有害创建和使用。
  10. 提高公众对人工智能的理解。
  11. 就人工智能问题与委员会进行持续对话。

2.欧洲的人工智能

这种交流在人工智能可以解决什么方面有更积极的倾向,并介绍了人工智能是什么。信息是人工智能正在像蒸汽机或电力一样改变社会。它表示,需要一个坚实的欧洲框架。

这份报告说,欧盟应该有一个“协调一致的方法”来对待人工智能。它建议通过以下方式做到这一点:

  1. 世界级的研究人员、实验室和创业公司
  2. 数字单一市场——数据保护、网络安全和连通性的共同规则
  3. 解锁数据(被报告称为“人工智能的原材料”)

它提到了《宣言》中的承诺。几乎在同一时间,它特别强调竞争,不让任何人落后和欧盟的可持续发展的技术方法。一种有益于人类和整个社会的方法。

这可以追溯到 2017 年对数字单一市场战略的审查,其中探索欧盟人工智能方法的邀请部分源于(例如,对机器人的民法规则)。这三个要点是(1)提高技术能力,(2)为社会经济变革做准备,以及(3)确保道德和法律框架。

关于欧盟在竞争激烈的国际格局中的地位的沟通的不同部分概述了美国和中国在非机密人工智能研究方面增加的投资,从而清楚地表明欧盟“在私人投资方面落后”。人们明确表示希望创造一个刺激投资的环境。欧盟显然生产了四分之一的专业服务机器人。“欧洲不能错过火车”,采用人工智能的好处得到了广泛认可——提到了几个由欧盟资助的项目(农业、医疗保健、基础设施和制造业)。

在概述前进的道路时,他们表示,到 2020 年及以后,需要私人和公共部门的共同努力。它概述了未来十年投资将从大约 40-50 亿欧元增加到 200 亿欧元。

这种方式加大了投资力度。他们预计到 2020 年底,这一数字将会增长。该报告还提到支持卓越中心(和数字创新中心)。这里提到了“人工智能按需平台”,它可以帮助促进 400 多个数字创新中心之间的合作。它提到将创建专注于人工智能的中心。

到 2020 年,他们将在研究和创新方面投资 15 亿英镑;加强英才中心;和潜在用户的工具箱。他们谈到了按需人工智能平台和工业数据平台,这些平台提供了访问高质量数据集的途径。2020 年后,他们将升级和支持公共利益应用程序,以及一个数据共享支持中心,同时对现有政策进行各种升级。

目的是提供更多的数据,欧盟在过去 15 年中一直在这样做,一个例子是欧盟的空间计划。它谈到了老龄化社会和增强人们的能力,在“不让一个人掉队”中,他们谈到了新技能。这在很大程度上是针对 STEM 的,而在另一部分,他们谈到了多样性以及跨学科的方法。

  • 更多的妇女和不同背景的人,包括残疾人。
  • 跨学科的方式结合联合学位,例如法律或心理学和人工智能。这里提到了伦理道德的重要性,同时考虑创造一个有吸引力的环境让人才留在欧洲。

该报告为 2018 年的教育政策制定了计划,包括(再)培训计划、劳动力市场分析、高级数字技能的数字培训、商业-教育-伙伴关系和社会伙伴,以将人工智能纳入影响研究。

“下一个欧盟多年财政框架(2021-2027)下的提案将包括加强对获取高级数字技能(包括人工智能专业知识)的支持。”

在确保道德框架方面,提到了基本权利、GDPR、数字单一市场和可解释的人工智能系统。在最后一段,还有一个知识产权的问题。道德准则草案将在年底制定。提到了安全和责任,根据 2019 年中期的技术发展,通过关于产品责任指令的指导文件赋予个人权力。还提到了一个建立算法意识的试点项目,以及对消费者组织数据保护的支持。

让成员国参与这项工作非常重要,本节提到了芬兰的国家战略。上面写着:“鼓励每个成员国制定人工智能战略,包括投资战略。”这里提到了多利益主体欧洲人工智能联盟以及国际外展。

“随着人工智能很容易跨境交易,在这个领域只有全球性的解决方案才是可持续的。”

欧盟的贡献与其价值观和基本权利一起被提及,这也在结论中被提及。以希望人工智能的力量为人类进步服务而结束。

3.可信人工智能的道德准则

3.1 人工智能独立高级别专家组

我研究的与伦理和具体政策以及投资相关的文件是由独立的人工智能高级专家组(AI HLEG)整理的。因此,我认为最好先解释一下什么是 AI HLEG,他们的角色和成员。欧盟网站上有一个关于艾莱格的页面。

“经过公开遴选程序后,委员会任命了 52 名专家组成高级别人工智能专家小组,成员包括来自学术界、民间社会和工业界的代表。”

他们的总体目标是支持欧洲人工智能战略的实施。因此,它涉及与人工智能相关的政策制定、伦理、法律和社会问题,包括社会经济挑战。自成立以来,欧盟表示,他们已经实现了道德准则以及政策和投资建议。

人工智能小组也是欧洲人工智能联盟的指导小组,这是一个多利益相关方论坛,旨在就人工智能发展的所有方面及其对经济和社会的影响进行广泛而开放的讨论。2019 年 6 月有一场欧洲 AI 联盟大会。可以看看整个会议,至少是讨论的内容:

重点是讨论投资和道德。有一个试点流程,其中包含可能在未来一年发布的其他文件或至少向参与成员内部发布的信息。

欧洲人工智能联盟 是一个论坛,吸引了 3000 多名欧洲公民和利益相关者就人工智能在欧洲的未来进行对话。

你可以在网上注册加入 Futurium。一旦你的 Futurium 账户创建完成,你就可以填写在线登记表加入欧洲人工智能联盟。

所有 AI HLEG 的成员都在网上公开

3.2 可信人工智能的道德准则

该文件分为三个部分:基础,实现和评估可信的人工智能。因此,在某种意义上,你可以说它是建立在价值观上的,我们如何建立它,以及我们如何知道我们所建立的是好是坏。他们概述了可信人工智能应该(1)合法合规;(2)伦理价值的坚守;(3)从技术和社会角度来看是健壮的。如果这些组成部分之间出现矛盾:“……社会应该努力协调它们。”

一个人应该以一种坚持尊重人类自主、防止伤害、公平和可解释的道德原则的方式开发、部署和使用人工智能系统。

当它们出现时,它们之间的紧张关系也应该得到解决。涉及弱势群体的情况应优先考虑,在这一考虑中,我们发现例如儿童、残疾人和权力不对称(雇员/雇主和企业/消费者)。虽然人工智能系统带来了好处,但也带来了一定的风险,有些事情可能很难衡量,比如对民主、法治和人类思维的影响。必须采取措施来降低风险。

人工智能系统应该通过技术和非技术方法满足七个要求。

  1. 人力代理和监督
  2. 技术稳健性和安全性
  3. 隐私和数据治理
  4. 透明度
  5. 多样性、不歧视和公平
  6. 环境和社会福祉
  7. 有责任

必须考虑技术和非技术方法,以确保实施这些要求。促进创新,以清晰的方式与利益相关者沟通,促进人工智能系统的可追溯性和可审计性。采用值得信赖的人工智能评估列表可能是有用的,并使其适应特定的情况,记住这样的列表不是详尽的。

简而言之,我们可以说,根据报告,可信人工智能有三个组成部分:

  • 合法的
  • 道德的
  • 粗野的

这三者都是必要的,但还不够。

理想情况下,这三者在运作中协调一致,相互重叠。然而,在实践中,这些要素之间可能存在紧张关系(例如,有时现行法律的范围和内容可能与道德规范不一致)。作为一个社会,努力确保这三个部分都有助于保护值得信赖的人工智能是我们个人和集体的责任。

他们在报告中称之为全球框架下的“负责任的竞争力”。利益相关者可以自愿使用这些指南作为一种方法来操作他们的承诺。他们认为不同的情况会带来不同的挑战(音乐推荐系统与关键医疗)。因此,这些准则必须适应不同的情况。如前所述,人们被邀请尝试操作这个框架的可信人工智能评估列表。

这些指导方针阐明了基于《欧洲联盟基本权利宪章》(欧盟宪章)和相关国际人权法所载基本权利实现可信人工智能的框架。

下面,我总结了值得信赖的人工智能的三个组成部分。

(I)合法 : AI 不在一个无法无天的世界里运作。重要的是要考虑欧盟的主要法律:欧洲条约及其基本权利宪章。此外,欧盟二级法律,如一般数据保护条例(GDPR);产品责任指令;关于非个人数据自由流动的条例;反歧视指令;消费者法律和工作安全与健康指令;联合国人权条约和欧洲委员会公约(如《人权公约》)以及许多欧盟成员国的法律。那么各种领域的法律适用。《准则》并不主要涉及这些内容,其中任何内容都不应被视为法律意见。

(二)伦理 AI :法律并不总是跟得上技术发展的速度,可能与伦理规范不合拍,或者不适合解决某些问题。

(III)健壮的人工智能:个人和社会必须相信人工智能系统不会造成任何故意伤害。系统应以安全、可靠的方式运行,并应预见安全措施以防止任何意外的不利影响。从技术和社会角度来看,这都是必要的。

以下模型用于显示指南文件中的方法:

该报告将人工智能伦理学作为应用伦理学的一个分支,与欧盟 2030 议程相关联。它还谈到通过公共辩论、教育和实践学习来建立一种道德文化和心态。

提到的基本权利是:( 1)尊重人的尊严;(2)个人自由;(3)尊重民主、正义和法治;⑷平等、不歧视和团结;(5)公民权利。

3.3 四项原则

它进一步概述了前面提到的四项原则。

人类自主:遵循以人为中心的设计原则,为人工智能系统中有意义的人类选择和人类对工作过程的监督留下选项。它的目标应该是创造有意义的作品。

防止伤害:不应该加剧对人类的伤害,因此必须注意可能出现信息权力不对称的系统。预防伤害还需要考虑自然环境和所有生物。

公平:开发和部署必须公平。这必须是实质性和程序性的层面。它应该增加社会公平和平等机会,以平衡相互竞争的利益和目标。为了寻求对决定的纠正,对决定负责的实体必须是可识别的,并且做出决定的过程应该是可解释的。

可解释性:过程需要是透明的,能力需要被传达,对那些直接和间接受影响的人是可解释的。根据报告,解释并不总是可能的(这些所谓的“黑盒”示例),这样可能需要其他措施(可追溯性、可审计性和系统能力的透明沟通)。这取决于环境和后果的严重性。

不同利益相关者应该扮演不同的角色。

a.开发人员应该实现这些要求,并将它们应用到设计和开发过程中;

b.部署者应该确保他们使用的系统和他们提供的产品和服务满足需求;

c.最终用户和更广泛的社会应该了解这些要求,并能够要求

3.4 可信人工智能的要求

需求问题中的系统和个人方面。

报告中详细描述了这些不同的方面。在每个需求中,都有一个子需求的分解,或者可能是要考虑的关键词。

H 乌曼机构和监督。系统应支持人类的自主性,并通过支持用户的能动性来实现民主和公平的社会。基本权利有助于让人们追踪他们的个人数据或增加受教育的机会。鉴于人工智能系统的范围和能力,它们可能会对基本权利产生负面影响,因此在存在此类风险的情况下,应进行 基本权利影响评估 。这应在系统开发 之前 完成,包括评估这些风险是否可以降低或合理,以尊重他人的自由。此外,应该建立机制来接收关于可能侵犯基本权利的人工智能系统的外部反馈。在合理的情况下,用户应该能够自我评估或质疑系统。应保持人类的自主性,这样,当决策对用户产生法律影响或对他们产生类似的重大影响时,人类就不会仅仅受制于基于自动化处理的决策****

此外,还有治理机制,如人在回路(HITL)、人在回路(HOTL)或人指挥(HIC)方法。

【HITL】:指在系统的每一个决策周期中人为干预的能力,这在很多情况下既不可能也不可取。**

【人在回路(HOTL) :指在系统的设计周期中,人为干预和监控系统运行的能力。

【Human-in-command(HIC):指监督 AI 系统整体活动(包括其更广泛的经济、社会、法律和伦理影响)的能力,以及在任何特定情况下决定何时以及如何使用该系统的能力。**

这可以包括在特定情况下不使用人工智能系统的决定。根据应用领域和潜在风险,可能需要不同程度的监督机制来支持安全和控制。

在其他条件相同的情况下,人类对人工智能系统的监督越少,就需要越广泛的测试和更严格的管理

T技术坚固性和安全性。根据该报告,这与预防损害的原则密切相关。人工智能系统必须按照预期可靠地运行,同时最大限度地减少无意和意外的伤害——这也应该适用于操作环境的变化或其他代理的存在(人们或许可以在操作意义上将其与人工智能安全联系起来)。应该确保人的身心健康。抵御攻击的能力和安全性是其中的一个方面,因此人工智能系统需要防止黑客攻击。这包括针对数据(数据中毒)、模型(模型泄漏)或底层基础设施,包括软件和硬件。如果一个人工智能系统受到攻击,它可能会导致不同的决策,或者导致它关闭。应考虑恶意行为者的非预期应用和潜在滥用,并采取措施缓解这些情况。可以设计出出现问题时的后备计划和一般安全措施。这可能意味着从基于统计的程序切换到基于规则的程序,或者在继续一个动作之前询问人类。 应建立流程,以澄清和评估 AI 在各个应用领域的潜在风险 。必须主动采取安全措施。准确性或正确的判断,例如将信息分类到正确的类别。在人工智能系统直接影响人类生活的情况下,高水平的准确性尤为重要。可靠性和再现性对于能够仔细检查人工智能系统和防止意外伤害至关重要。 再现性描述了一个人工智能实验在相同条件下重复时是否表现出相同的行为 。这使得科学家和政策制定者能够准确地描述人工智能系统做什么。 复制文件 可以方便测试和复制行为的过程。**

P 对抗和数据治理。根据该报告,隐私是受人工智能系统影响的一项基本权利。这意味着我们需要正确的数据治理、数据完整性、协议访问和保护隐私的数据处理能力。在系统的整个生命周期中,数据保护在这方面非常重要。因此,需要考虑最初在交互中提供和生成的信息。人类行为的数字记录可能让人工智能系统不仅可以推断个人偏好,还可以推断他们的性取向、年龄、性别、宗教或政治观点。数据的质量和完整性对人工智能系统的性能至关重要,这必须在使用任何给定数据集进行训练之前解决。必须确保数据的完整性,以便恶意数据不被用于可能改变其行为的 AI 系统,尤其是自学系统。因此,数据集必须在过程的每一步进行测试和记录。 这也应该适用于不是内部开发,而是从别处收购的 AI 系统 。在任何给定的组织中,处理数据都很重要,应该制定管理数据的数据协议。访问数据需要与有能力和需要访问个人数据的合格人员一起明确(并非所有人都应被允许)。**

与人工智能系统相关的要素的透明度:数据、系统和商业模式。人工智能系统中产生决策的过程应按照尽可能好的标准进行记录,以考虑到可追溯性。这有助于我们了解为什么人工智能决策是错误的,反过来也有助于防止未来的错误,从而更容易促进可审计性和可解释性。解释技术过程和人类决策。技术要求决策可以被人类追踪和理解。该报告提到了可解释性之间的权衡,这可能会降低准确性——然而,解释必须适应所涉及的利益相关者(外行人、监管者、研究人员)。在交流中,人工智能系统不应该向用户表示自己是人类,人类有权被告知他们正在与人工智能系统交互。人工智能必须是可识别的,并应提供选择,以决定反对这种互动,支持人类互动,以确保遵守基本权利。应传达限制,并涵盖系统的准确性水平。**

大学,非歧视和公平。所有受影响的利益相关方的参与,在设计过程中给予平等的机会,以及与公平原则相关的平等待遇。必须努力避免不公平的偏见,这可能会因无意中的历史偏见、不完整和糟糕的治理模式而对某些群体不利。损害可能来自对(消费者)偏见或不公平竞争的故意利用,可以通过建立监督程序,以明确和透明的方式分析和处理系统的目的、制约因素、要求和决定来抵消。此外,从不同的背景、文化和学科中招聘员工可以确保观点的多样性,应该予以鼓励。可访问性和通用设计应使人工智能产品的使用不受年龄、性别、能力或特征的限制。残疾人的无障碍环境尤为重要。因此,人工智能系统不应该有一个通用的方法来实现公平的访问和积极的参与。利益相关者的参与是明智且有益的,这可以贯穿整个系统生命周期。**

S 社会和环境福祉。人工智能系统应该用来造福全人类,包括子孙后代。应鼓励人工智能系统的可持续性和生态可持续性,并促进人工智能解决方案的研究,以解决全球关注的问题,例如可持续发展目标(SDGs)。 系统的开发、部署和使用过程,以及其整个供应链,都应在这方面进行评估 。这些系统对我们生活各个领域的社会影响也必须得到监控和考虑。对于社会和民主,必须认真考虑对机构和社会的影响,包括政治决策和选举背景。

。最后一项要求是对前面几项要求的补充,因为它要求在人工智能系统的开发、部署和使用之前和之后,都有必要建立相应的机制,以确保对人工智能系统及其成果的责任和问责。可审核性需要对算法、数据和设计流程进行评估。评估必须由内部和外部审计员进行,这种报告的可用性有助于提高技术的可信度。 在影响基本权利的应用中,包括安全关键应用,人工智能系统应能被独立审计 。必须确保报告行动和应对后果的能力— 尽量减少和报告负面影响。在开发之前和开发期间,通过红队或 算法影响评估 等形式进行影响评估,有助于将与人工智能系统带来的风险成比例的负面影响降至最低。在实现这些需求时,可能会出现折衷。每一个权衡都应该是合理的,并适当地记录下来。当不公正的负面影响发生时,尤其是弱势人员或群体,需要采取补救措施。****

这是七个要求:(1)人力代理和监督;(2)技术稳健性和安全性;(3)隐私和数据治理;(4)透明度;(5)多样性、非歧视性和公平性;⑹社会和环境福祉;(7)问责。

此外,在整个使用过程中进行评估和论证也很重要。内部使用、分析、开发和重新设计。

他们描述了技术和非技术方法,以确保可信的人工智能。

4.可信人工智能的政策和投资建议

4.1 使用值得信赖的人工智能在欧洲产生积极影响

以下是人工智能高级专家组 2019 年关于政策和投资的建议的要点。详细介绍人工智能高级专家组政策和投资建议的文件于 2019 年 6 月 26 日公布。我称之为“亮点”,因为这是我在报告中注意到的,你可能会注意到其他一些东西。

该报告涉及私营部门,以及以人为中心的人工智能服务和政府作为一个平台如何催化欧洲的人工智能发展。如前所述,这是通过世界一流的研究能力和正确的基础设施以及人工智能领域的技能和教育来实现的。由此建立适当的治理和监管框架,并筹集资金和投资。特别是解决如何创造一个开放和有利可图的投资环境来奖励值得信赖的人工智能的问题。

报告分为两章和一个结论。第一份报告给出了对欧洲政策的具体建议,第二份报告更具体地介绍了“利用欧洲的促进因素”**

4.2 第一章内的重点介绍人工智能政策对欧洲产生的积极影响

人类与社会。我认为很好的第一个建议是通过欧洲各地的课程(大规模开放在线课程——mooc)提供初级人工智能培训的数字扫盲。另一个是在教育层面上更紧密地整合人工智能培训,以及在线通报教育资源和促进讨论。也有人建议每年设立一个欧洲人工智能意识日(例如在艾伦·图灵的生日)。

保护人类、社会和环境的完整性也是一个明确的建议。避免过度的大规模监控、商业监控或数字力量的不对称。

鼓励危险任务的自动化,并建立一个基金来管理转型。为开发者引入注意义务,鼓励为儿童提供更好、更安全的人工智能。

衡量和监测人工智能的社会影响据说也是一个重要的优先事项。有人谈到建立监督机制和支持民间社会组织。

(还有三个章节详细介绍私营部门、公共部门和研究&学术界)

4.3 利用欧洲可信人工智能的促成因素

投资计算机基础设施和设施网络。开发兼容的数据管理和可信数据空间,以及创建数据提供者方案。支持尖端研究和商业开发的机制,同时开发整个数据传输系统的网络安全基础设施。获得必要的技能,但是 STEM 中提到了性别能力培训。在欧洲培养和留住人才被认为很重要。

5.欧洲联盟大会

2018 年 4 月欧洲人工智能战略启动后,人工智能高级专家组(AI HLEG)成立。这个小组起草了一份关于人工智能政策和投资建议的文件。欧洲人工智能联盟与人工智能联盟同时成立。

2019 年 6 月,该集团的 500 名成员在欧洲人工智能联盟大会会面,讨论人工智能政策的最新成就及其未来前景。

这是一个有 3000 多名欧洲公民参与的论坛。

它被视为一个多方利益攸关方论坛,可以更广泛地为欧盟决策提供投入。在提出可信人工智能的道德准则(另一份报告)后,从人工智能联盟收到的意见是制定政策和投资建议的一部分。

AI HLEG 是 AI 联盟的指导小组。

有可能在线加入论坛。如果你注册了人工智能联盟,你就可以进入欧盟的一个名为 Futurium 的平台。

人工智能联盟的目标如下:

  • 充分动员各种参与者,包括企业、消费者组织、工会和民间社会的其他代表
  • 特别是帮助制定道德准则,确保欧洲地区在人工智能领域的竞争力。
  • 引导可信人工智能的道德准则。

因此,可以说,如果一个人对人工智能领域感兴趣,就应该密切关注这一发展。

根据欧洲数字经济和社会专员玛利亚·加布里埃尔的说法,试点阶段将从人工智能联盟会议开始到 2019 年 12 月为期六个月。**

特别是,如果你对与人工智能、法规和道德相关的政策感兴趣,这将是一件好事。

PE kka Ala-pietil一直担任欧盟人工智能高级专家组(AI HLEG)主席。他在 2019 年 6 月的人工智能联盟大会上发表讲话时提到了 11 个关键点。**

根据 Pekka 在 6 月大会上提出的意见,从 AI HLEG 政策和投资建议中获得的主要信息如下:**

  1. 授权和保护人类和社会****
  2. 对人工智能市场采取量身定制的方法****
  3. 确保可信人工智能的单一欧洲市场
  4. 通过部门多利益主体联盟实现人工智能生态系统
  5. 培育欧洲数据经济****
  6. 利用公共部门的多面角色****
  7. 加强并联合欧洲的研究能力****
  8. ☆教育到四次方****
  9. 对人工智能采用基于风险的治理方法,并确保适当的监管框架
  10. 刺激开放和有利可图的投资环境
  11. 采用整体工作方式,将 10 年愿景与滚动行动计划结合起来

“一个重大机遇正在敲响欧洲的大门。这个机会就是人工智能。”—PE kka Ala*pietil,AI HLEG 主席,2019 年 6 月*******

随后在关于启动可信人工智能试点流程的小组讨论中提到,人工智能专家组的某些成员将花一些时间与那些试点指南的人在一起。有人提到,针对不同的部门进行调整可能是好的。有一个问题是指导方针是否可以操作:人工智能不仅仅是技术。在这次讨论中,一个重要的方面是鼓励要求某种形式的自我评估或外部认证的做法。它被认为是测试、外部审计或自我评估之间的区别。此外,还讨论了如何将伦理与现行法律联系起来。Telefonica 的 Richard Benjamins 说,像毕马威(KPMG)、德勤(Deloitte)等咨询公司的大型技术公司的道德方法是建立团队,以便能够在欧洲做到这一点。

摘要

欧盟在伦理人工智能方面的投资是在指导方针和建议中协调的,对成员国都没有法律约束力。这导致了广泛的参与和将在整个区域推广的具体举措,例如获得由芬兰创建的翻译成成员国所有语言的免费课程(人工智能要素)。除了试行道德准则以及明确承诺投资人工智能,同时考虑到环境和气候问题,这也是该战略的一部分。它将与解决可持续性问题的以人为本的方法同时发生。这些战略文件中的预示概述了在未来十年 2020-2030 年人工智能领域的研究投资将大幅增加。欧盟目前的主要焦点是伦理使用;增加公众的了解;和实际负责任的应用程序协作。

否则

明智的做法是在这种背景下理解 DG Connect ,即:通信网络、内容和技术总局。他们的2016–2020战略计划当然是相关的。

2018 年 6 月 6 日发布了一份关于欧盟数字欧洲计划2021-2027 年预算的新闻稿,该预算拟投资 92 亿€。

我还没有调查人工智能的责任 (2019,11 月)。然而,一旦有机会,我会这样做并把它加到这个总结中。

此外,还有处于咨询阶段的人工智能 PPP 的战略研究、创新和部署议程。在这种情况下,PPP 是公私合作的缩写。

人工智能战略的一个相关方面是欧洲高性能计算联合项目 — EuroHPC 已经选择了位于 8 个不同成员国的 8 个地点作为超级计算中心,以托管新的高性能计算机。这八个地点于 2019 年 6 月 7 日公布

如果你认为我错过了任何重要的文件或者我的摘要的一部分有所欠缺,请通知我,如果给我通知,我会努力修改。

这是#500daysofAI,您正在阅读第 207 条。500 天来,我每天都在写一篇关于或与人工智能相关的新文章。我目前 100 天 200-300 的重点是人工智能的国家和国际战略。

AI——世界末日?

原文:https://towardsdatascience.com/ai-the-end-of-the-world-9277ab8bd765?source=collection_archive---------24-----------------------

—使用强化学习(并让他们玩视频游戏),教虚拟代理像人类一样学习

埃隆·马斯克对人工智能接管世界感到恐惧。

但这种担心真的有道理吗?真的有什么可担心的吗?如果世界上最聪明的人之一被该领域最近的指数级发展吓坏了,你也应该害怕吗?

如果人工智能系统只是基于一些聪明的数学和编程原理,我们真的有什么好担心的吗?

是的。

没有。

有点复杂。

让我解释一下。

为什么埃隆吓得发抖

当马斯克先生谈到机器获胜时,他最有可能指的是已经学会使用强化学习(RL)模型进行操作的系统。他已经警告我们关于 Deepmind 的 AlphaGo 的潜在危险,并建立了 OpenAI 来创造一条通往人工通用智能(AGI)的安全之路,后者也主要专注于强化学习研究。

这些发展是一件大事。目前大多数常见的人工智能系统只被编程为具有完成一项特定任务的能力,如检测物体或生成猫的图片。它们是使用监督学习技术的狭义系统。因为我们知道正确的答案是什么样的,所以我们可以预测他们理想情况下应该给出什么样的输出。我们知道它试图分类的对象是一只狗,或者如果它被这样训练,系统将总是生成一只猫的图片。

但是当我们不知道正确答案是什么的时候呢?

输入:强化学习

在这里,我们只能通过试错来学习。就像,我们给代理一个任务,让它知道如何去做,但是我们甚至不知道正确的方法去做。

大多数研究人员认为,这是我们创建通用人工智能(AGI)系统的方式,它可以知道如何完成任何任务。包括接管人类。

If RL systems get out of control, we could have SkyNet for real

那么 RL 真的能终结人类吗?不,至少还没有。普通智力是复杂的,人类经过数百万年的进化才得以发展。在天网成为现实之前,还需要更多的研究。

目前,它最可靠的功能是玩视频游戏。让我们稍微分解一下这个过程,并弄清楚构建一个 RL 代理实际需要什么。

直观理解强化学习

假设你拿起你的第一个街机游戏,却不知道怎么玩。没有人真的会阅读说明,所以你的学习过程基本上就是不停地按按钮,然后看看你的角色在屏幕上发生了什么。除了尽可能获得高分之外,你在没有任何先验知识或预期目标的情况下想出了该做什么。

除了我们用更多的行话描述他们的过程(行话是斜体的,为了让你阅读愉快),这几乎就是 RL 代理玩视频游戏所做的事情。

Human or AI? Who knows? (I do. It’s an RL agent I trained.)

一个 RL 特工 基本上就是游戏中的玩家——射击敌人的绿色小飞船。

它的环境 就是它周围的一切——游戏或地图包括敌人和障碍。

它可以采取动作 以便与其环境互动。在像太空入侵者这样的视频游戏中,可能的动作是向左移动、向右移动、射击或什么都不做。

当它采取行动(不行动仍然是行动)时,环境给代理一个奖励,这个奖励可以是正的也可以是负的,这取决于行动的质量和将来能得到多少奖励。这就像对代理采取的任何行动的反馈——积极的行动最终会导致更高的分数,而消极的行动会导致失去生命。

每当代理完成这个循环,它就转换到一个新的状态。 这就像代理的位置——根据它的状态它可以访问环境的不同部分。就像如果我们向左移动,所有的敌人都在左边,我们就可以射杀更多的敌人。理想情况下,我们希望代理人最大化长期回报(得分)。

但是代理实际上是如何知道该做什么的呢?它如何知道从不同的场景中采取什么行动来获得可能的最高分?

输入:Q-学习

RL 代理学习一个策略 来决定他们在不同场景下的行为。他们学习 Q 值来计算从某个状态采取某个行动有多好。行动的质量取决于我们采取行动后期望从我们所处的状态得到多少回报。

在这里,采取向右移动的动作将对应于高 Q 值,因为它使代理处于一个位置,可以射击更多的敌人,而这些敌人不会为了获得更高的分数而向它开火。但向左移动没有意义,也不会提高代理人获得更多长期奖励的能力,因为没有任何敌人可以射击。

所以,从这个博弈状态 中,代理人在中间,敌人在右边,代理人最有可能采取向右移动的动作。这个状态-动作对将被存储在一个 Q 表中,下次代理遇到同样的情况时,它将知道该做什么。

现在我们开始'深入' —进入:用 DQNs 进行深度 Q 学习

实际上,遍历数十亿个可能的状态-动作对组合对于任何真正严肃的任务(如玩视频游戏)来说几乎是不可能的,所以我们将一些深度学习与经典的 Q-学习模型结合起来,以获得迄今为止最酷的 RL 时髦词——深度 Q-网络。

DQN’s basically 1) see a game screen, 2) think about what to do, and 3) do something

我们使用 CNN——一种监督学习模型,让代理看到游戏中发生的事情。它通过 3 个卷积层查看不同的空间和纹理特征,如形状和边缘,并在 2 个完全连接的层中进行一些处理,以确定应该做出什么决定。

这个允许代理学习某些场景之间的相关性,因此它的行为可以在它们之间推广,而不局限于一个精确的状态-动作对。

那么模型实际上是如何学习和提高的呢?

大数学:损失函数和经验回放

如果我们把它分解开来,这其实并不难理解。

我们的目标网络和实际网络几乎相同——唯一真正的区别是目标网络更有信心。它知道基于某个策略该做什么(大脑在给定的状态下计算出该做什么动作),并且总是 100%确定什么是正确的动作。我们的 Q-network 对自己不太确定。它将输出执行某个动作的概率——如果这是正确的动作,那么我们使用优化器让网络学习执行更多这些动作。错了就少拿点。

随着我们的 Q 网络训练和变得更好,它对于每个状态-动作对的 Q 值变得更高。因此,随着我们网络的改善,损耗变得更低,这是有道理的,因为损耗是衡量网络表现有多差的一个指标。少亏=少坏=我们的网络玩的更好!

每当我们的网络经历 1)从一个状态开始,2)做一个动作,3)获得奖励,4)过渡到下一个状态的序列时,我们都会记住这个序列,并在未来的一个叫做体验回放的过程中学习。那些存储的经验被随机挑选出来,并作为参数(s,a,r,s `)被抛入损失函数以更新网络。

我们随机选择体验,以确保网络不会对学习特定场景感到太舒服。例如,如果我们训练我们的代理在所有敌人都在屏幕左侧的场景中扮演太空入侵者,它通常会学习如何向左移动并射击。但如果我们太频繁地这样做,当它看到右边的敌人时,它会不知道该怎么做,因为它以前从未见过。它只会做它知道的事情——向左移动并射击。但是,如果它从随机的过去经验中学习,我们可以 1)对相同的数据多次训练网络,2)它将学习如何在各种情况下表现。

酷!(理论上)——但是 AI 真的会接管世界吗?

问题是,RL 模型可能可以做人类能做的任何事情——问题只是我们能以多快的速度推进这个领域,以便让它们做所有和我们一样的任务。一旦我们到了那一步,接下来的问题就是制造一个人工智能系统,它有可能学会同时完成所有这些任务。

现在在人工智能领域有一些非常聪明的人在争论人工智能的进步将被用于什么方向。伦理辩论不仅出现在人工通用智能(可以学习做任何任务的人工智能代理)上,许多人认为这将通过 RL 策略实现,还出现在 DeepFake 算法OpenAI 的文本生成模型上,如果不道德地使用,它们可能会真正扰乱我们世界的本质。

在这种微妙的情况下,没有什么是确定的。只要记住墨菲定律:

“任何可能出错的事情都会出错”

关键要点

  • 强化学习是一个主体与其环境互动的过程,以找出在不同状态下采取的最佳行动,从而最大化长期回报
  • Q- Learning 帮助我们确定从某种状态采取某种行动的质量
  • 深度 Q 网络允许我们使用卷积层结构来计算游戏状态,并基于通过计算我们的理想目标网络和我们的实际 Q 网络之间的平方差发现的损失进行更新
  • 损失函数的参数是由状态、动作、奖励和下一状态组成的不同体验,这些体验是从过去体验的数据集中随机采样的,以便更好地训练
  • RL 模型有潜力创建能够像人类一样学习如何完成各种任务的通用系统😮

感谢你的阅读,我希望你能学到一些关于 RL 的有趣的东西!联系 LinkedIn 并访问我的 网站 ,在那里您可以注册我的 简讯 以获得我的每月进展更新!

人工智能:技术和世界的未来

原文:https://towardsdatascience.com/ai-the-future-of-technology-and-the-world-86f59d0cf720?source=collection_archive---------10-----------------------

Photo by Ramón Salinero on Unsplash

人工智能(AI)现在已经成为一个争议比以往任何时候都大的话题。许多人担心机器人会接管世界。人工智能的概念让人们感到害怕,因为他们害怕我们正在创造的机器人,我们不知道它们是如何工作的。但是,如果我告诉你,你听到的关于人工智能的大多数说法都是不准确的,那会怎么样呢?当我说不准确时,我不仅仅是指一点点偏离;媒体在谈到 AI 的时候非常错误。当你甚至不知道人工智能是如何工作的,也没有使用它的经验时,你怎么能谈论它呢?更糟糕的是,媒体制作的大多数人工智能内容几乎没有人工智能领域专家的证据。在这一点上,如果你不信任 AI 还是可以理解的;我不指望你马上同意我的观点。但是希望在这篇文章结束时,你会对人工智能有一个新的认识。

先说说 AI 在当今世界是如何实现的。大多数人认为 AI 是未来尚未到来的事情,但他们没有意识到的是,AI 实际上在当今社会非常普遍。Gmail 使用人工智能过滤垃圾邮件。脸书用人工智能来推荐朋友。Youtube 和网飞使用人工智能来推荐其他视频和电影。听说过数据分析吗?其中很多涉及机器学习,这是人工智能的一个特定学科。新 iPhones 上的面部识别使用人工智能。如今大多数电子游戏都使用人工智能。简单地说,人工智能已经是我们今天使用的许多技术中的一个常见元素。事实是,人们对人工智能非常无知;我们认为这是理所当然的。我理解 AI 有一定的弊端。例如,如果在生产商品的工厂中实施,人工智能可以取代几个雇员,导致更多的失业。但是什么时候有过没有缺点的东西呢?不仅如此,在许多场景中,人工智能几乎没有显示出任何负面影响,人工智能有潜力解决我们今天面临的许多最大的问题。例如,人工智能已经被证明可以诊断不同的疾病,特别是癌症,比目前的方法准确率高得多。甚至有一项研究在进行中,10 名不同的放射科医生被给予不同的乳腺肿瘤的乳房 x 光片。结果是,这些放射科医生的诊断有 10-55%的差异。根据美国癌症协会,五分之一的乳房 x 光筛查被错误诊断。另一方面,由专业人员开发的人工智能已经能够以超过 85-90%的准确率进行诊断。然而,许多人说他们不信任人工智能…

但是为什么人们会害怕 AI 呢?为什么人们声称我们不能理解它?为了解决这些问题,我将讨论机器学习领域的一些算法。

人工智能真的可以归结为大量的数学和大量的逻辑。也许你听说过线性回归(也称为最佳拟合线)?如果我告诉你线性回归是人工智能的一个例子呢?的确是这样;它可能是人工智能中最基本的算法之一,但它仍然是人工智能。您输入数据以创建模型(最佳拟合线),然后基于该线进行预测。大部分 AI 都是这样工作的;算法之间的唯一区别是创建的模型和该模型的目的。

在机器学习中,有两种类型的学习:有监督的和无监督的。监督学习是我们的数据有标签的学习。标签可以被认为是一个最终结果。例如,如果我们有一个癌症数据集,每个数据点是一个肿瘤,标签可以是肿瘤是恶性还是良性。所以,在有监督的学习中,我们会得到这些标签,但是在无监督的学习中,我们没有这些标签。监督学习可以采取回归或分类的形式。在回归中,您尝试预测输入的输出值,而在分类中,您尝试预测输入所属的特定类。无监督学习主要包括聚类算法;您绘制数据,并尝试将数据的不同部分分组,以找到数据中的关系和模式。然而,不管你使用什么机器学习算法,它都是基于数学的。它实际上只是一台进行大量计算的计算机,将数字代入许多不同的方程。这背后没有智能,因此有了人工智能这个术语;这不是真正的智慧,只是看起来像而已。

有一种特定类型的机器学习称为深度学习,它基于称为神经网络的算法。这就是人工智能背后的大部分争议所在。神经网络是模拟大脑的算法;这可能会让许多人感到困惑,因为他们可能会认为神经网络有自己的智能。它们当然更难理解,但它们远没有达到人类的智力水平。神经网络有三种类型的层:输入层、输出层和位于输入层和输出层之间的隐藏层。每一层都由程序员定义的一定数量的神经元组成,每个神经元都与上一层的所有神经元相连,也与下一层的所有神经元相连。每个神经元都有一个权重;不在输入层的神经元取前一层神经元权重的加权和。每个神经元也有一个偏差,它被加到这个加权和中,以修改该神经元的不活动状态。然后,这个加权和通过一个激活函数运行,该函数将这个加权和转换成 0 到 1 范围内的一个数。这个过程从每一层到每一个神经元继续进行,直到到达输出层。就拿我之前用的乳腺癌诊断例子来说吧。如果我们要为这个问题创建一个神经网络,输入将是我们认为与乳腺肿瘤恶性程度相关的参数,输出层将有两个神经元。一个神经元代表良性,另一个代表恶性。假设我们将一个肿瘤的参数输入到网络中,良性神经元返回 0.02,而恶性神经元返回 0.98。由于恶性神经元具有较高的权重(1 表示 100%权重),我们可以预测该肿瘤是恶性的。

现在,回到层,在输入层,你把你的输入,在输出层,你得到一个输出。这些算法与任何其他类型的机器学习算法的工作原理相同。然而,到目前为止,我们并不真正了解隐藏层,但我们知道神经网络算法的目的是找到产生最准确的神经网络模型的一组权重。我们只是不确定如何解释隐藏层中发生的事情。

为了解释这种不确定性,让我们用一个神经网络来模拟一局台球。输入层的神经元每个代表一个球。输出层的神经元代表一个口袋。每个隐藏层可以代表一个影响球去向的参数。一个隐藏层可以代表球可以击中的其他球。在一场正常的撞球比赛中,我们可能很容易预测球会进入哪个球袋;因为我们唯一需要做的事情是跟踪球的去向,所以需要做的计算很少。我们可以知道,如果墙壁是平的,球将如何从墙壁上反弹,如果球是完美的球形,球将如何从其他球上反弹。这将是一个非常简单的神经网络。现在,假设我们添加了更多的球。有更多的变量可以影响球的行进方向,所以预测球将落在哪个袋中可能会变得有点困难。这个神经网络会比以前更复杂一些。但是现在,假设我们添加了更多的隐藏层。一个隐藏层可以代表墙壁,但是这一次,墙壁不是平的;它们可以是弯曲的或者有尖刺。一个隐藏层可以代表每个球的表面;如果它们不是完美的球形并且弯曲不均匀呢?一个隐藏层可以代表地;地面不再是平坦的,而是弯曲的。在这一点上,你肯定不能预测球会去哪里。它太复杂了,有太多的变量和太多的计算要做。

这正是我们对神经网络的问题。大多数已被使用的神经网络接受具有许多不同参数的大型数据集,因此神经网络最终变得过于复杂而难以理解。我们可以试着分解它来了解发生了什么,但是那会花费太长的时间。神经网络本身可能需要几分钟到一周的时间来训练。我们将很难组织好所有的东西,也很难把所有的东西放在一起。神经网络就像其他机器学习算法一样,实际上并不具备真正的智能;他们太复杂了,好像他们有自己的思想。神经网络的问题不是我们缺乏对它们的控制;这是他们的可解释性。我们很难理解这个算法是如何得到它的预测的。然而,大量的研究正在进行,关于我们如何能制造更精确、可解释和有效的神经网络。神经网络有很大的潜力。它们可以达到很高的精确度,有些精确度超过 90%。它们还可以用于非常复杂的任务,如图像分类/识别和自然语言处理(文本分析)。想想神经网络的潜在应用。它们的影响是巨大的。例如,机器学习在癌症诊断方面已经变得很受欢迎。在生物信息学中实现机器学习可以帮助患者在早期得到治疗,挽救许多生命。

人工智能有能力解决许多现实世界的问题。不仅如此,事实证明,人工智能可以比现代方法更准确地解决这些问题。多亏了人工智能,我们可以取得很大的进步。然而,今天许多人在人工智能上声称的错误言论只是阻碍了这一进展。话虽如此,重要的是要考虑到人工智能的缺点。有人担心机器人会抢走人们的工作,导致更多人失业。如果有人工智能可以创造人工智能呢?即使对我来说,那也很可怕。但是人工智能并不是我们遇到的第一样东西,它太多了是不好的。有太多的药物并不好,因为细菌会产生抗生素耐药性,但在需要的时候没有药物也不好。工作太多不好,因为你需要足够的睡眠,但你也需要工作来赚足够的钱。为了有效和恰当地使用人工智能,需要有一个平衡。应该普遍支持人工智能的使用,但也应该有关于人工智能可以做什么的规定。人工智能应该得到推广,但我们必须确保我们不会制造可以创造其他人工智能的人工智能,因为在那个时候,我们不会对程序有太多的控制权。只要我们能够实现这一点,人工智能将是技术的未来,它将有助于世界成为一个更快乐、更健康的地方。

要了解更多关于我和我所做的工作,请随时查看我的 Github 作品集 ,并在LinkedIn上与我联系。

人工智能:未来还是创造未来的工具?

原文:https://towardsdatascience.com/ai-the-future-or-a-tool-to-create-it-7e4a09686a0?source=collection_archive---------27-----------------------

还记得你最喜欢的电视节目第一次播出时,你完全被它迷住了吗?即使你每集都学到了更多,你还是不断回来。然而,很少有什么东西会毫无瑕疵地一直给予下去。也许,你会发现,尽管虚构的情节令人惊叹,但现实生活中的演员却相当离奇。嗯,那种感觉不仅仅适用于电视剧…

最近,我有机会与许多新技术一起工作,这些新技术似乎有无穷无尽的应用,最有趣的是人工智能。似乎每天,我都会上网或看新闻,听说研究人员找到了另一种方法来解决一个重大问题。因此,我期待着为每个新项目编码,并不完全知道最终产品能容纳什么。然而,随着我越来越多地使用这项技术,我似乎发现了一把双刃剑。人工智能真的是我曾经认为的革命吗?

A marvellous technology can hold hidden drawbacks upon closer look. Photo by Shane Aldendorff on Unsplash.

人工智能的巨大可用性带来了突破性的应用

对我来说,这一切都是从我建立第一个识别手写数字的神经网络开始的,这仅仅是一次计算机视觉实验。最初,它只是众多解决问题的算法中的一种。然而,我从来没有想到的是,同样的算法同样可以用于各种各样的其他问题。例如,我然后使用基本相同的算法来识别不同类型的衣服。与此同时,我知道对视觉效果进行分类的问题会延伸到现实生活中的重大情况,比如检测自动驾驶汽车中的行人。这些也不仅仅是未来的目标;像特斯拉和 Waymo 这样的颠覆性公司正在改变汽车行业的创新现在,这个行业只是众多行业之一。

本质上,与人工智能合作意味着不断尝试新项目。有一天,我会创建一个 CNN 来分析图像,另一天,我会创建一个 RNN 来人为地改写莎士比亚的戏剧。这不仅仅是一些没有实际应用的个人愚蠢行为的展示。在技术代码的背后,总有一种感觉,那就是这项工作在更大范围内可能产生的真实效果。然而,最重要的是,小项目带来了实际的机会;目前,我正在从事人工智能医疗保健研究,这是微软资助的一项竞赛的一部分。人工智能让我在不到一年的研究时间内解决了世界上一些最大的问题。话虽如此,如果你问我是否会在未来直接研究人工智能,我肯定会说不会(这肯定不是因为我讨厌钱)。

I’m as surprised with the possibilities of AI as people are when I tell them I don’t want to work with it as a career. Photo by Ben White on Unsplash.

工具的好坏取决于它带来的用途

在我看来,人工智能最大的好处之一也是我未来不想直接追求它的原因;它适用于大量的行业。等等…那不是好的吗???当然,许多领域的应用使人工智能更加有用,然而,这种使用使它更像一种工具,而不是一种职业。人工智能是解决世界上一些最大问题的巨大资源,但它只是一个工具。如果有人从事医疗保健、商业或任何其他行业,人工智能是解决重要问题的关键,但它本身不如一种职业有吸引力。想一想;不能和任何人一起用的魔术有什么好处?

魔术师的艺术是创造奇迹。——道格·亨宁

正如魔术的应用是为了创造奇迹,工具的应用是为了解决问题。然而,两者诱人的细节在于它们的应用,而不仅仅是它们没有目的。人工智能就是这样;它在任何行业都有惊人的优势,但它本身就相当缺乏光泽。

接下来的限制是,与人工智能打交道有相当大的学习曲线(然而,它正在迅速缩小),这使它成为你技能组合中更有价值的竞争优势。然而,这也带来了自己的缺点,因为人工智能不断加快的创新步伐如果不受监管,可能会产生负面后果。目前,着手解决世界上最大的问题比以往任何时候都容易(我个人从参加微软的竞赛中学到了这一点),但对于造成伤害的能力来说也是如此。作为一个例子,考虑某人如何通过对无辜用户使用预测行为分析来破坏在线隐私。这还没有开始考虑这项技术的长期影响,它有可能扰乱我们今天知道的一些最大的就业市场。很难预见这个有用工具带来的重要问题,更不用说准备解决它们了。

A small amount of clarity isn’t enough to plan your future path. Photo by Josh Calabrese on Unsplash.

总的来说,人工智能确实是我们今天可以想象的许多创新【和危险】的游戏规则改变者,但它只是许多工具中的一种。最后,把一生的工作奉献给一个工具,还是奉献给这个工具可以解决的大量问题,哪个更有意义?

关键要点

  • 没有什么是完美的。最美丽的东西是你可以爱的,尽管它们不完美。
  • 人工智能的独特之处在于,它可以使用近乎相同的算法来解决完全不同的问题。
  • 虽然聪明的设计可能很有趣,但它真正的价值在于它被应用于解决问题时(这些问题可能领先于我们的时代)。
  • 你不可能准备好去解决一场你看不到的灾难。

在反思人工智能的用途时,我谈到了我以前在人工智能方面的工作。如果你想看看我的推理背后的背景,请阅读更多关于我最近在这个领域的工作。

艾——人类手中的阿拉丁神灯

原文:https://towardsdatascience.com/ai-the-lamp-of-aladdin-in-the-hands-of-mankind-b2d298bea746?source=collection_archive---------24-----------------------

为最佳人工智能做准备

人类举着阿拉丁的灯,随着 AI 的发展摩擦着出现了神怪……我们的命令应该是什么?

Photo by Yeshi Kangrang on Unsplash

人们期望个人和公司在未来三到五年内保持一种愿景,一种支持实现目标的计划的战略,这最终将成为他们愿景的体现。

一个没有远见的人或公司(无论大小)就像一艘没有舵的船。方向是由不断变化的天气条件决定的,唯一关心的是如何度过当前的风暴或无风的一天。

欧洲议会选举刚刚在 28 个国家进行,覆盖超过 5 亿人口,AI 和第四次工业革命(4IR)在竞选活动中几乎没有提到。在实际涵盖的主题的大多数解决方案中,完全忽略了这两个关键角色。

人类的愿景是什么——我们的共同目标是什么?

我们需要开始关注人类的愿景和目标,特别是与我们新的和不断发展的魔杖 AI 和 4IR 的关系。也许为全人类设定一个单一的愿景是不现实的。尽管如此,我们仍然需要头脑风暴、思想交流和关于未来方向的辩论,以保持控制,并确保在十年、二十年或三十年后,现实将有利于全球大多数人口。

联合国确定了可持续发展目标,这是解决我们今天面临的问题的一个很好的方法。尽管如此,没有一个目标是直接与指导 AI/4IR 在一个特定的方向上与我们社会的最佳想法相关的。

全球变暖的争议症状

几十年来,气候一直在变化,科学家们一直对此发出警告,而其他人一直否认这一点。与此同时,气候变化越来越严重。

AI/4IR 也是类似的情况,对于这些变化的根本性和全面性以及它们的到来速度有很多不同意见。与此同时,发展正在加速,每天都在产生新的成果。

今天,最大的人工智能竞赛是开发第一个人工通用智能 (AGI)的竞赛。AGI 是一种类似人类的智能,旨在解决一般任务,而不仅仅是单一的特定任务。第一个成功的国家或公司将获得巨大的优势,一旦开始运作,它将每周 7 天、每天 24 小时不断改进自己。事实上,每天都有数以百万计的资金投入到 AGI 的项目中,这证明了投资者对此的重视程度,也有力地表明了人工智能工程师已经走了多远。

愿景以及 Genie 如何提供帮助

当试图预测未来的 AI/4IR 世界时,经常提到的三个主题

工作——有多少人会因为机器人和人工智能而失业?

资源共享——谁将拥有机器人和人工智能?

工作还是不工作,这是个问题

老实说,我觉得讨论人工智能和 4IR 是否会导致失业很奇怪。我认为这是整个概念的一部分。提出能帮助人们工作的解决方案或者甚至为他们工作。假设 AI/4IR 不会减少员工数量是不符合逻辑的。为什么要开发一个解决方案,让一个工作变得多余,然后在另一个地方创造一个新的工作呢?这是徒劳的。

这就是我把阿拉丁和他的灯带进来的地方。如果你手里拿着神灯,精灵出现了,你的第一个愿望会是“请让我保住工作直到退休”吗?我想没有。大多数人都在寻找

安全、食物、健康、衣服和住所

影响/控制他们自己的生活

实现他们潜力的可能性

而且是的;爱和接受

如果 AI 和 4IR 至少能为你提供前两颗子弹呢?这将给你时间和自由去探索最后两颗子弹中的无限可能性,无论是独自还是与他人一起。愿景不是整天躺在沙发上患上抑郁症。这是关于拥有足够的资源去追求你从未有时间真正探索的激情。想象这样一个世界——它可能在本世纪成为现实。

共享资源——你的、我的和我们的

当然,当工作岗位减少时,收入会明显减少。再加上全世界数百万劳动人民的工资如此之低,以至于他们几乎不能满足自己的基本需求,这已经成为当今全球社会的一个日益严重的问题。

Thiel Capital 董事总经理、数学家和物理学家埃里克·温斯坦(Eric Weinstein)是众多对当前经济体系的状况和能力感到担忧的人之一。在他的文章“人类资本主义和新噱头经济”中,他提出了一个思想实验,即资本主义可能是“19-20 世纪发达世界在空间和时间上的快乐巧合”的短暂产物。在麻省理工学院的莱克斯·弗里德曼的采访中,他对资本主义和社会面临的挑战做了一个非常清晰的陈述

我认为超级资本主义必须与超级社会主义相结合

埃里克·温斯坦

泰尔资本董事总经理

请记住,资本主义是始于 18 世纪末的第一次工业革命的结果。4IR 呼吁重大变革,甚至可能是一个全新的系统。这提出了两个问题;这个新系统应该是什么样的?我们如何保障和谐的过渡?

不管奇异点和 AGI 会在什么时候发生,现在需要有意识地为转变做准备。

我对精灵的愿望是:

“请确保每个人都有足够的食物,富足被公平分配,所有人都是真正自由的,都有机会接受教育和医疗保健,没有人被剥削”

也许资本主义甚至可以提供这一点。我只是认为我们应该跳出框框,看看是否有其他选择。

你的愿望是什么?你希望 20 到 40 年后的社会是什么样的?以及如何看待人类与 AI 一起生活,以及 4IR 的后果?

许下你自己的愿望…

Photo by Riya Kumari from Pexels

艾认为雷切尔·玛多是一个男人(这是我们所有人的问题)

原文:https://towardsdatascience.com/ai-thinks-rachel-maddow-is-a-man-and-this-is-a-problem-for-all-of-us-921e45523d6e?source=collection_archive---------4-----------------------

对生产系统中人工智能偏差的数据驱动审查

2011 年,IBM Watson 在一场 100 万美元的比赛中击败了 Jeopardy 传奇人物肯·詹宁斯和布拉德·鲁特,成为了 T2 的头条新闻。在《最后的危险》中,詹宁斯承认失败,他写道:“就我而言,欢迎我们新的电脑霸主。”

那是在 2011 年,在一场名为 ImageNet Challenge 的计算机图像识别比赛中,一个好成绩是 75%。最近,在硬件(GPU&TPUs)、软件和技术的大量进步之后,最好的程序现在可以识别超过 95%的对象。一些专家的共识是,最先进的人工智能在图像识别任务方面已经超过了人类。

因此,人们会认为,今天的[沃森视觉识别](http://Watson Visual Recognition),一个(至少是通过营销)赢得了《危险边缘》的超级计算机的后代,同时代的超人图像识别器,会毫无问题地识别出有线电视新闻人物雷切尔·安妮·玛多的图像。

Watson thinks Maddow is male with 84% confidence.

虽然沃森成功地猜出了麦道的年龄范围(有 52%的把握),但它对麦道的性别标注(有 84%的把握)是错误的。

然而,沃森并不孤单。来自 AWS 的图像识别器 Amazon Rekognition 也认为 Maddow 是男的,虽然只有 59%的把握。

AWS also thinks that Maddow is a man.

AWS 在混淆亚历克斯·安佐隆(Alex Anzalone)的性别时更有信心,这位 6 英尺 3 英寸,245 磅的 NFL 后卫,以 79%的信心将 Anzalone 标记为女性。

这是怎么回事?为什么具有超人图像识别能力的超级计算机在性别标注上如此自信地失败了?

*二元性别标签(例如:“男性”或“女性”)显然存在固有缺陷,因为我们越来越意识到 性别是一个光谱 。性别认同、性别表达、生物性别可能对齐也可能不对齐,增加了问题的复杂性。

现代机器学习如何工作

要理解 AWS 和 Watson 的失败,首先应该理解现代机器学习实际上是如何工作的。今天的顶级计算机视觉系统通过使用大型标签训练集优化极其复杂的数学模型来“学习”。在 2017 年的论文重新审视数据的不合理有效性中,谷歌的 AI 团队再次确认了 2010 年的直觉,即数据越多越好。

Per Google, performance continues to increase as the size of datasets increases.

随着模型变得更加复杂,训练数据增长到数亿张图像甚至更多,任何一个机器学习开发者都几乎不可能完全理解任何系统的行为。与具有确定性结果的传统计算机编程不同,大型机器学习系统根据概率(“置信度”)而不是确定性来操作。它们几乎是黑匣子,数据被输入其中,结果被调整到“最小化损失尽管研究人员越来越专注于开发能被人类更好地理解其决策的可解释的人工智能,但这种努力还远未准备好投入生产。

鉴于测试这种复杂系统的难度,系统误差可能会出现。在一项名为性别阴影研究中,麻省理工学院的 Joy Buolamwini 和微软的 [Timnit Gebru](http://Timnit Gebru) 展示了商业图像识别系统的偏见,他们表明,与浅色皮肤的男性相比,深色皮肤的女性被误判的几率高达 34%,而浅色皮肤的男性只有 0.8%。ProPublica 的一项研究声称,法庭上使用的一个名为 COMPASS 的软件系统错误地预测黑人被告比他们有更高的再犯风险,而白人被告则相反。

虽然有关于人工智能安全的突出对话和慷慨资助,重点是防止来自天网一样的人工智能的存在威胁,但很清楚的是,今天的生产中存在实际的人工智能安全问题。使用机器学习系统更广泛地做出关键决策。例如,在中国越来越注重监控的社会,面部识别已经被用于“算法治理”——捕捉犯罪和羞辱不受欢迎的行为。系统误差和偏差会导致严重的后果。

云图识别系统

2013 年,马修·泽勒,前述 Imagenet 比赛的顶级选手,为了创办 Clarifai,拒绝了谷歌的邀请。Clarifai 提供基于云的服务,任何开发者都可以以每张 0.0012 美元的价格获得世界级的图像识别服务。从那以后,这个领域变得竞争激烈,今天提供服务的有亚马逊的 AWS谷歌的云平台微软的 AzureIBM 的 Watson

这些服务都以相似的方式工作。开发人员将图像发送给 API,API 会以相关结果进行响应。每种服务都有自己的模型集合,允许对特定类别的图像进行优化。例如,Clarifai 为对这些类别感兴趣的顾客提供服装和食品特定的模特。它们还提供定制模型,用户可以在其中添加额外的数据来增强定制图像识别器的结果。

这些系统中的性别分类通常通过它们的面部检测模型来暴露。目前,AWS 提供年龄范围、性别,以及对胡须和眼镜等特征的检测。Azure 提供年龄和性别分类没有可信度。Clarifai 提供年龄、性别、 种族 分类,Watson 提供年龄范围和性别

谷歌,这家拥有最好的图像识别技术和团队的公司,是唯一不提供年龄和性别分类的公司。取而代之的是,它提供了对情绪(“喜悦”、“悲伤”、“愤怒”和“惊讶”)以及这个人是否有“头饰”的检测。“谷歌没有性别标签说明了提供这种服务的道德、商业和技术挑战。

培训&测试机学习

为了建立他们的服务,这些公司使用大量的数据。在机器学习中,数据分为训练集、验证集和测试集。训练数据集用于构建模型。您看到的结果基于为适应训练数据而执行的数学优化。验证数据集用于进一步调整模型。最后,测试数据集独立于训练数据,但遵循相同的概率分布,并用于测试模型。

例如,如果糕点图像的训练数据集包含 100 万个油炸圈饼图像、100 万个松饼图像和 100 万个羊角面包图像,则测试数据集应该具有相同的比例。因此,即使系统以接近 100%的成功率成功通过测试数据集,它也不会成功识别 kouign-amannroti canai 的图像,因为这些图像不在原始训练和测试集中。

实际上,用于训练 AWS、Azure、Clarifai、Google 和 Watson 的数据集的实际构成是不透明的。Timnit Gebru(上述性别阴影项目的)现在倡导为数据集提供“数据表”,以便数据的构成和预期用途是透明和可问责的。然而,鉴于机器学习中的硬件、软件和技术正在变得商品化,公司仍然将数据视为其业务的专有优势,应该保持不透明。

随着越来越多的机器学习系统用于生产,在测试数据集之外采用更好的测试变得越来越重要。与传统的软件质量保证不同,在传统的软件质量保证中,系统经过测试以确保功能按预期运行,机器学习测试需要新数据集的管理和生成,以及能够处理置信水平的框架,而不是来自 web 服务器的传统的 404 和 500 错误代码。

我和我的搭档阿历克斯一直致力于开发工具来支持生产中的机器学习。正如她在的《模型服务器的崛起中所写的那样,随着机器学习从实验室走向生产,需要额外的安全和测试服务来完整地完成堆栈。我们的数据监控工具之一“安全服务器”允许快速生成和管理额外的测试数据集,并跟踪这些数据集随时间推移的表现。正是通过使用这个工具,我们发现艾认为是一个男人。

我们如何测试

我们一直在使用公共云 API 来构建安全服务器的原型。我们在测试图像识别服务时发现了雷切尔·玛多问题。AWS、Azure、Clarifai 和 Watson 在给雷切尔·玛多最近的照片时都弄错了她的性别。

Rachel Maddow is misgendered in all 4 image recognition APIs.

然而,当她从高中年鉴中得到一张雷切尔·玛多的照片时,她留着长长的金发,性别标签是正确的。

如果雷切尔·玛多要做一个 20 年挑战,她的五官变化将是不起眼的。撇开自然衰老不谈,她的脸就是她的脸。唯一明显的区别是她黑色的短发和她的厚框眼镜。

为了测试我们的假设,即短发和眼镜是有问题的,我们策划了 1000 张照片,分别是浅色皮肤的短发女性、浅色皮肤的眼镜女性和浅色皮肤的短发和眼镜女性。在所有情况下,所有 3 个数据集的所有 4 个 API 的误性别率都高于预期,超过 15%。很明显,配饰和发型(随着时尚的发展而演变)会导致性别的错误标签。

The APIs are struggling with test data of women with short hair and glasses

AWS thinks that a short-haired Katy Perry is male.

我们还生成了 1000 张长发男性和眼妆男性的图像,结果不言自明,误差率超过 12%。

Clarifai: Man with eye makeup is classified as a woman.

AWS: Man with eye makeup is classified as female.

Clarifai: Prince with eye makeup is labelled as a woman.

Watson: Man with long hair is classified as female.

AWS: Man with long hair is classified as female.

Watson: Man with long hair is classified as female.

的确,其中一些错误发生在较低的置信水平上,AWS 确实警告需要为任务关键型应用程序设置适当的阈值。尽管如此,并不是所有的开发者都会遵循这一指导方针,微软的 Azure 对自己非常确定,它甚至没有默认提供一个置信度得分。

问题是

如果“人工智能认为雷切尔·玛多是男人的原因”出现问题,“什么是不完整的测试和训练数据?”可能是比“什么是眼镜和短发”更好的问题公平地说,这些人工智能公司试图解决的问题在技术上很难,解决方案也不总是显而易见的。他们的系统在原始训练数据之外的“边缘案例”中失败是意料之中的。通过扩大他们的训练数据,这些系统可以随着时间的推移而改进。尽管如此,完全有可能随着一个领域的进步,其他领域的结果会变得更糟。

随着我们的世界逐渐进入一个人工智能发挥权威作用的世界,记住这些系统的谬误对我们来说很重要。在生产中部署机器学习的公司应该持续跟踪和测试他们的模型,即使是在野外,像图像识别这样的公共云服务也许应该像其他产品一样受到《消费者报告》等机构的审查。

如果你想谈论更多关于机器学习中的测试和安全问题,请随时联系我们。

更新:生殖人工智能正在把水搅浑。下面是一些由 AI 生成的 【雷切尔·玛多】男*雷切尔·玛多女 (承蒙 提示流 )的图片。*

人工智能:自动化还是增强?现实生活中的案例研究。

原文:https://towardsdatascience.com/ai-to-automate-or-to-augment-a-real-life-case-study-50585b5459f9?source=collection_archive---------41-----------------------

Photo by Franck V. on Unsplash

当产品经理第一次开始使用人工智能(或机器学习)时,尤其是在直接涉及最终用户的用例中,她面临着一个决定:

我应该使用自动化用户任务还是应该增加它?

这是我的团队在 VRBO 领导内容和媒体产品期间遇到的一个任务的几个例子,希望能够触及潜在的困境。

案例 1 : VRBO 拥有数百万个房源,每个房源所有者都会上传自己的照片,作为建立房源的一部分。对于我们的旅行者,我们假设通过展示按“空间类型”组织的照片,我们将向旅行者提供一个更完整的图片,这是通过查看的照片数量来衡量的。这将有助于购买过程。

让这种情况变得有趣的是,我们有两种类型的用户:已经创建了他们的列表的用户和将来将要创建他们的列表的用户。对于后者,我们可以(潜在地)提示用户在创建他们的列表时(或不久之后)组织他们的照片。

对于那些已经上传了照片的成千上万的用户和数百万的列表,我们该做些什么呢?

我们是否应该自动将它们组织到空间中,并照此发布?我们应该组织它们并等待用户批准吗?对于一张图片被归类为厨房还是客厅,列表所有者会有多“强烈”的感受?列表所有者(主机)不同意我们建议的可能性有多大?在那些 VRBO 出错的罕见案例中,出错的潜在代价是什么?如果 VRBO 真的弄错了,VRBO 能让列表所有者多容易地纠正它呢?

这些是我们在团队制定战略时问自己的一些问题。

U 对于每一个列表,VRBO 都会呈现一个引导图像。(当我加入 VRBO 的时候,搜索结果中的每一个条目都被称为一个广告,这也是房源所有者用来描述他们房源的术语。)作为创建他们的列表的一部分,列表所有者将指定他们想要在他们的“广告”中使用哪张照片。

我们的一个假设是,如果我们使用 VRBO 可以访问的点进数据,我们可以自动确定哪个列表图像最有可能导致旅行者点进该列表,并找到他们喜欢的列表。

同样,这个场景有许多产品团队必须问自己的问题。所有者对选择他们的“广告”领导形象的感受有多强烈?对于 VRBO 来说,解释它为什么选择一个特定的图片来代表列表有多容易?所有者理解 VRBO 的基本原理的可能性有多大?哪些数据可能有助于证明这一点?在搜索结果中列出同质/异质对旅行者的行动有什么影响?潜在的 A/B 测试对受其影响的列表所有者有什么影响?VRBO 应该要求车主选择加入实验吗?如果 VRBO 改变他们的列表,即使最终结果是预订增加,在用户信任方面有什么潜在的附带损害(如果有的话)?

这篇文章不是要提供具体的答案,也不是要谈论我们是如何解决这个问题的。公司采取的方法是其知识产权的一部分。

这篇帖子的目的是让产品经理退一步,提出这样的问题。

谷歌是一家一直面临这种决策的公司。这就是一些经验法则的用处。这些经验法则本质上为产品经理和设计师建立了一个路线图,作为他们评估产品策略、实验设计和用户界面时必须提出的问题。

为了帮助他们的团队,谷歌整理了这个指南,我鼓励所有产品经理和设计师阅读。熟悉这些主题对于构建未来的成功产品至关重要。

你们的产品遇到过这样的情况吗?你是怎么做到的?留言评论!

AI to P:在神秘的生产森林中航行

原文:https://towardsdatascience.com/ai-to-p-navigating-the-mystical-forest-of-production-3d51048cbdf?source=collection_archive---------22-----------------------

Unsplash — Cederic X

我经常感到安慰的是,一些邪恶的人工智能,不顾一切地破坏和肆虐世界,因为我们知道它很可能会在从笔记本电脑转移到生产的关键点上失败。一些最酷的数据驱动项目在他们的概念与预期的实现相遇的地方绊了一跤,但是对于云计算、专家领域空间和无限资源,为什么会出现这种情况呢?

对于那些希望这将是一些关于使用“xyz”技术将人工智能带入生产的神奇教程的读者来说,不幸的是,我必须让你失望。相反,我选择向您介绍将算法引入生产时遇到的一些常见问题,并可能传授一些智慧。

攀登绝望之塔……我指的是产品

不仅仅是在数据领域,在整个工程领域,最大也可能是最常见的陷阱之一是停下来花一秒钟问自己"我在做什么,我怎么知道什么时候完成了?“通常情况下,这是一个业务失败,因为理想情况下,业务和产品应该为其数据团队制定一套明确的 KPI,但是,如果您发现自己的情况并非如此,那么在继续之前定义一些目标可能是一个好主意。作为一个组织的一部分,无论是初创公司还是科技巨头,通常你所做的一切都需要对组织产生一些可衡量的影响,这给我们带来了第一个障碍: 你正在做的事情会产生影响吗,你能告诉我们什么时候会产生影响吗?

在成熟的组织中,跨越第一个障碍并不总是可能的。经常会遇到这样的情况,你可以说你正在做的事情将会带来一些价值,但是现在是时候让产品和业务团队相信这种价值了。从我的经验来看,这通常不是数据光谱中任何人的失败,而是数据在组织内的感知位置出现了巨大偏差。
术语“数据驱动”已经失去了所有的意义,AB 测试泛滥,期望几乎从未实现,听起来熟悉吗?这让我想到了第二个障碍,从本质上来说,就是试图组建一个数据感知产品团队。一个数据感知产品团队对于将数据分类(分析、机器学习和工程)整合在一起、弥合业务差距并控制这些期望至关重要。

不幸的是,在数据领域,对产品的理解并不总是清晰的。经常会遇到仓促实施的情况,因为在一个领域产生影响的算法被认为会在另一个领域产生影响,不幸的是,由于空气中弥漫着错误的成功气味,有时很难说服任何人后退一步重新评估。在这种情况下,数据感知产品团队对于创建更易管理的预期至关重要。

到无限远,并在…

我经常听到人们提到这样一种观点,即因为云中有东西,所以它的内存和处理能力是无限的,但这与事实相去甚远。首先,虽然你可以使用一些相当疯狂的资源,但它们不是无限的,当然也不便宜。将资源与所需的业务案例相匹配是有帮助的,例如在“实时推理”的情况下,尝试在 AWS Lambda 这样的无服务器架构上运行较小的脚本,而不是持久且昂贵的 AWS EC2 实例。另一个例子是,与其请求数据库资源,不如从编目文件存储中加载数据。

第二个原因,也可能是最重要的原因,源于认为资源无关紧要,没有必要进行优化。常见的情况是,将大量数据帧加载到内存中只是为了执行单个值查找,或者使用大量昂贵的计算资源来高效地完成无服务器架构所能完成的工作,甚至没有让我开始运行一些 SQL 查询。
应该遵循基本的编程原则,算法应该被很好地记录,你的代码不应该重复,你应该只加载你想消费的东西。

独角兽、彩虹和巫师

经常有人问我什么是数据科学家?直到今天我也不确定。我曾经认为那些拥有高等数学学位的疯狂天才(以前称为统计学家)是数据科学家。这些天来,我在两种思想流派之间左右为难。首先,数据科学通常包含所有属于数据范围(数据工程、机器学习和数据分析)的参与者,有点类似于系谱物种树。

在这一点上,我希望强调前面提到的一个概念:数据分类。这不是一个独特的概念,但在我看来,无论产品和业务团队如何,这都是有效地将机器学习引入生产的最低要求。机器学习,以有效地计算预期结果,工程建设管道和分析,以确保见解可以输入到商业机器。

然而,这个概念也有一些例外,最重要的是在某些情况下独角兽是存在的。独角兽是这三个亚种的有效混合,众所周知,它能够创建令人惊叹的算法,连接所有的工程管道,并随着时间的推移轻松获得其商业价值。

无论你是独角兽还是数据分流中的一员,我确信你在某个阶段会遇到和我目前遇到的问题类似的问题。希望,有了正确的目标,一点点天真和正确的团队,你将会把这个统治世界的人工智能带入生产。更重要的是,需要在数据和产品之间取得平衡,这种关系往往是脆弱的,微妙的,需要始终保持警惕。

人工智能趋势:提供各行业的业务增长

原文:https://towardsdatascience.com/ai-trends-offer-business-growth-across-various-industries-2bd07e12eede?source=collection_archive---------34-----------------------

images source: https://unsplash.com/@maximevalcarce

人工智能是游戏规则的改变者,它改变了商业运作和日常生活。人工智能趋势已经成为承认当前市场最新进展的最突出的方式之一。企业可以在人工智能支持的运营中体验到显著的改进。市场上有如此多的应用程序被设定为突破。

向用户提供的服务比以往任何时候都更加个性化和定制化。 人工智能解决方案 承诺更安全、更具未来感、更具革命性。这些天机器学习和人工智能是行业的热门话题,从那以后允许做出更好的选择。

企业正在以创新的方式使用人工智能技术作为驱动力。该报告称,82%已经投资人工智能以获得投资财务回报的公司。 企业正在实施人工智能以实现更好的决策和未来的结果。

利用这些人工智能趋势为您的业务提供新的高度

技术进步对行业的重大发展起着重要的作用。因此,人工智能趋势提高了对提供给用户的服务的期望。很少有实质性的人工智能趋势可以从商业角度来考虑。

预测服务

人工智能技术最适合在数据的基础上预测结果。如今,企业正在使用人工智能来预测结果。先进的预测算法被创业公司和企业用来提高竞争力。 用户满意是任何企业的优先考虑,因此,人工智能可以用来完成这一点。从数据收集到分析,这项技术提供了令人惊讶的解决方案。

智能搜索

人工智能的普遍采用是为了简化客户体验。人工智能为任何解决方案的智能搜索提供了上下文理解的特征。这一特征在各种品牌搜索中普遍存在。

零售商从人工智能搜索功能中受益最大。初创公司正专注于在智能搜索选项的基础上瞄准他们的受众。

面部识别

如今,面部识别正在成为主流。企业正在将面部识别整合到他们的解决方案中,以更好地增强安全性。 用户也在朝着安全问题迈出积极的一步。业界已经接受了这种的人工智能功能,以更好的方式连接用户。

从解锁手机到在线试穿购物,面部识别正在提升整个行业。面部识别通过最终的用户参与将市场趋势带到了另一个层面。

艾缘

人工智能的趋势处于领先地位,因为它正以最大的趋势引领者影响着这个行业。人工智能的一个特征——实时决策正在全球范围内成为一个时髦词汇。许多初创公司专注于利用人工智能来实现长期增长。 利用 AI 的结果无论如何都要慎重一些。

给任何规模的企业赋予人工智能优势,在任何形式下都会更好。在许多情况下,它有助于在处理相关信息时快速响应。

AI 透明

各行各业对人工智能的日益采用带来了透明度。 机器学习的介入正在帮助商家更深入地了解场景。初创公司和企业正试图通过拉他们的服务来更好地理解用户。

计算机视觉的使用让企业开发数据集来改善用户体验。人工智能驱动的应用程序因为保持透明性而受到越来越多的关注。

自动化机器学习

人工智能解决方案正在彻底改变商业分析。机器学习在任何过程中的参与都可以作为一个重要的过程。 一个复杂的问题,不用费多大力气就能解决。自动机器学习可以在不手动训练机器的情况下实现。

这节省了培训的时间和成本。企业正在选择支持机器学习的策略来进行分析和决策,以获得最佳结果。

外卖

人工智能趋势将极大地影响各个行业和商业。这项技术正在世界范围内优雅地扩展其规模,为企业提供新的生产力水平。不同行业的企业正在收获人工智能的好处,并帮助用户以最佳方式体验他们的服务。

人工智能信任、模型偏差和使用 IBM Watson Openscale 的可解释性

原文:https://towardsdatascience.com/ai-trust-bias-model-explainability-using-ibm-watson-openscale-68cb5b257320?source=collection_archive---------32-----------------------

规模化信任、解释、运营 AI

人工智能信任、偏见和模型可解释性在商业难题中提供了重要的一块,以帮助组织将人工智能项目从开发中取出,并将其投入大规模生产。人工智能偏见和模型解释能力有助于确保公平和公正的结果,同时让业务流程所有者对人工智能增强决策能力充满信心。同时,它提供了一个强大的框架,以确保 AI 保持符合公司政策和监管要求。

Watson Openscale AI Solutions

一项简短的调查显示,由于各种原因,业务利益相关者对他们对人工智能应用程序的信任度有着混合和混乱的反馈:

  • 94% 的公司认为人工智能是竞争优势的关键
  • 60%监管约束作为实施人工智能的障碍。
  • 63%技能的可用性视为实施的挑战
  • 5% 的公司已经将 AI 广泛整合到产品或流程中。

此外,众所周知,企业主面临着与偏见和可解释性相关的挑战:

  • 很难跟踪和衡量企业生产成功的指标
  • 不可能微妙的领域知识传授给生产中的人工智能模型
  • 没有办法验证人工智能模型是否会实现预期的商业成果
  • 违反监管和企业治理要求的风险

Watson OpenScale 通过专注于人工智能应用生命周期的 4 个阶段来实现这些目标:构建、运行、管理和应用内操作。****

Watson Openscale across the data science cycle

在构建时,数据科学家使用他们首选的流行开源框架和工具,同时访问用于偏差检测和事务可解释性的工具包。

开发和运营团队然后在运行时环境中使用他们现有的 DevOps 工具和流程来扩展和管理 AI 应用程序。

因此,业务用户能够出于审计和监管目的测量和跟踪单个人工智能工作流的结果。

Watson OpenScale 帮助企业用户大规模交付和运营可信 AI 应用:

  1. 跟踪和衡量生产中的业务成果

a.定义业务 KPI 并输入到现有业务应用中,以衡量业务影响
b .定义应用合同,以在构建时评估人工智能模型,并获取指标以在运行时跟踪这些模型
c .在运行时,通过错误分析和有效负载的描述性分析提供可操作的指标和警报

2。满足法规约束&管理生产中的人工智能

a.使用运营数据模拟业务条件,验证和批准用于生产的人工智能模型
b .跟踪和解释人工智能决策,以便在应用程序中跨多个模型进行全面审计
c .运行时人工智能驱动的偏差检测和缓解,以推动公平的结果

3。使人工智能适应生产中不断变化的商业环境

a.通过现有的商业应用收集反馈,在运行时教授人工智能
b .检测商业环境中的偏差,提醒用户并触发缓解措施

c.使用来自有效负载分析的特定输入自动触发模型再培训渠道,以满足业务目标并适应新数据

使用 Watson Openscale 的高级模型管理

指示性例子 :某银行因少数民族客户待遇不平等被罚款。少数族裔客户获得的贷款更少,利率更高。

在这种情况下,Watson Openscale 如何帮助减轻模型开发中的偏差?

第一步: 监控预测、模型性能和准确性

Openscale 提供了一个显示模型精度的仪表板。使用标准模型评估方法(不同的模型类型有所不同)来确定模型的准确性。

Monitor Predictions, Performance and Accuracy

第二步: 为模型预测提供解释

我们可以使用可解释性特征来理解为什么会做出某些预测。可解释性的两个主要组成部分是:

****预测器重要性:哪些因素/预测器影响预测

****统计显著性:确定每个预测值的统计重要性

对比解释:为了控制预测,我们需要改变哪些特征

Model Predictions Explainability

第三步: 监控不公平的预测并自动纠正它们

I .定义受保护字段:通常是关于客户的人口统计信息,如种族、年龄、性别、人口细分

二。定义 上下文 :用于确定阈值的记录数,即评估每 100 个批准或每 1000 个贷款申请

三。为偏差定义一个阈值,定义为少数人赞同相对于多数人赞同的百分比。可选地,OpenScale 可以“去偏差”模型,即自动校正结果:

  • 除了模型评分结果之外,去偏差的结果被自动记录在数据库中
  • 去偏的结果不一定要在生产中使用,它们可以用于审查或审计

Biased Prediction Monitoring and Mitigation

自动偏差缓解

描述

嵌入到生产中的模型需要做出公平的决策,并且在他们的建议中不能有偏见。那些显示出偏差的需要在不干扰预测到应用的当前路径的情况下被校正。

它是如何工作的?

  • 给定一个输入记录,我们将它发送给偏差检测模型,以找出该模型是否可能以有偏差的方式对该记录进行操作
  • 一旦我们确定了模型可能有偏差的记录,我们就通过改变预测来修正它
  • Auto-debias 训练在后台执行的影子模型,以便在部署到生产环境之前生成信任

考虑到人工智能模型偏差、模型可解释性和信任,大多数行业都在拥抱人工智能。

De-Bias Modeling Process

价值主张

  1. 偏差缓解的配置与当前部署的模型一起运行,这提供了去偏差的输出,而不影响正在服务的当前预测
  2. UI 中去偏差输出的可视化,根据建议采取措施修改数据集,并用新数据集重新训练模型
  3. 使用自动生成的去偏差模型终点对输入进行评分

Bias Mitigation De-biased Output

模型偏差和可解释性的行业用例

利用 Watson Openscale 的全行业用例从电信到金融服务和医疗保健:

1。电信:预测性维护

有效维护物理资产和基础设施对电信行业至关重要,资产故障会导致服务中断,这是客户流失的主要原因。维护优先化是一个昂贵且困难的过程,并且在资产故障导致网络问题之前,通常很难在现场发现它。机器学习提供了在问题发生之前根据传感器数据预测故障的机会。

网络基础设施的预测性维护可以防止导致代价高昂的客户流失的中断,但是基于历史资产数据训练模型是困难的,因为故障往往很少发生,训练预测模型可能很耗时,并且即使经过训练,它也可能无法在所有故障情况下准确执行

Watson OpenScale 的 r untime 监控功能允许团队根据真实数据跟踪他们的模型在实地的表现,以确保持续的表现——并在必要时指导再培训。OpenScale 的可追溯性功能还可以帮助工程师和技术人员获取对审计跟踪至关重要的信息,因此组织可以更轻松地将因该模型而采取的预防性维护措施与关键业务成果(如预防故障和提高客户满意度)联系起来。**

2。保险:承保风险建模

保险业市场竞争日益激烈。公司正试图在数据科学和人工智能的帮助下简化他们的流程——保险承保是人工智能洞察的主要目标。传统的核保方法依赖于复杂的基于规则的流程和昂贵的手动分析,而机器学习模型可以分析不同数据之间的复杂交互,以提供风险评分。

根据历史客户和索赔数据训练的风险评估模型可以帮助保险商做出更加一致和准确的决策。这些模型可以根据个人资料中的不同特征为个人客户提供价格建议。

Watson OpenScale 的可解释特性* 允许承销商和监管机构逐个决策地查看这些风险评估模型优先考虑的确切特性。在保险部审计期间,专员可以用业务友好的语言审查每个决策的模型谱系、输入和输出。其偏差检测和缓解功能有助于承销商确保这些模型在部署后继续做出公平的决策。***

3。金融服务:信用风险建模

传统银行面临着向更大、更多样化的受众扩展其数字金融服务组合的压力,这需要一种新的信用风险建模方法。为了向更广泛和更高风险的人群提供信贷,申请人的信用记录必须扩展到传统信用(如抵押贷款和汽车贷款)之外的其他来源,如公用事业和手机计划支付记录,以及教育和职位。

这些额外的特征增加了意想不到的相关性的可能性,这种相关性引入了基于申请人的年龄、性别和其他个人特征的偏见。最适合这些多样化数据集的数据科学技术可以生成高度准确的风险模型,但这是有代价的——这种模型是黑匣子,其内部工作原理不容易理解。

银行和信用合作社需要能够检查他们的信用风险模型的偏差,不仅在培训期间,而且在这些模型部署之后。为了遵守《平等信贷机会法》等法规,他们需要能够解释为什么他们的模型做出个人信贷决策。

Watson OpenScale 的偏差检测和缓解功能* 允许风险和治理官员在运行时监控其模型中的偏差。Watson OpenScale 的可解释性支持为信贷官员和信用分析师提供模型决策的事后解释,从而在信用风险建模中提供高准确性。***

4。供应链:有效需求预测

有效的需求预测对于在满足消费者需求的同时降低运营成本至关重要,但这非常困难。企业没有能力处理应对需求实时变化所需的数据量和多样性。不能适应当今市场不断变化的变量的预测会导致数百万美元的误判,严重损害公司的底线

需求预测者必须不断监控他们部署的模型的性能,以防止可能使他们的组织损失数百万美元收入的误算。这些模型所依赖的数据并不是固定的,随着新的实际数据的出现,它们分布的统计特性会不断变化。

Watson OpenScale 的运行时监控功能允许需求规划者跟踪其部署模型在生产中的性能,因此他们可以确保准确性并识别数据中的扭曲结果和固有偏差。****

5。医疗保健:疾病结果预测

特定疾病非常复杂,很难早期识别,因为它的症状与其他常见疾病的症状重叠。特定疾病诊断导致的死亡率随着治疗的延迟而每小时增加——因此医生和护士能够在患者进入疾病休克之前发现它们是至关重要的。能够识别那些处于最高风险的患者可以帮助临床医生优先考虑护理。机器学习模型可以根据住院数据和患者数据进行训练,以识别高风险患者并预测死亡结果。用于构建精确模型的算法和方法,如 XGBoost 梯度增强树,有时确实像黑盒一样。

Watson OpenScale 的可解释特性提供了对特定患者和住院特征的细分,这有助于做出每个预测的决策。这些结果以护理患者的临床医生可以理解的语言显示,增加了他们对预测模型的信任,并帮助他们做出更好的护理决策。OpenScale 还提供了可追溯性功能运行时监控,因此医院可以对做出的所有患者护理决策进行审计跟踪,并可以跟踪这些模型在一段时间内的性能。****

免责声明: 此处表达的观点仅代表本文作者的观点,不一定代表 IBM 公司的观点。博客上的部分内容是版权所有,除非在 IBM Corporation 下另有说明,否则保留所有权利(例如照片、图像)。

艾:为什么它实际上有所不同

原文:https://towardsdatascience.com/ai-why-it-actually-makes-a-difference-eecc87c6a3b2?source=collection_archive---------15-----------------------

简单的人类决策对计算机来说很难:

想想你在一天内做出的所有决定。从早上吃什么到晚上下班怎么回家。许多你做对的事情现在就像是的第二天性,但是它们实际上真的很难做到。例如,你如何找出正确的方法在早上把牛奶和麦片倒进碗里而不洒出来?或者,更重要的是,你如何在不导致撞车的情况下找到刹车的正确时机?令人惊讶的是,这些小而常规的决定正是让我们活下去的。虽然这些个人决定中的每一个对人类来说都是微不足道的,但很难用计算机有效地复制它们——这是避免灾难性错误并使我们的生活更轻松的必要任务。****

Photo by Bacila Vlad on Unsplash.

这就是人工智能的用武之地。人工智能有许多不同的方面和类型,但它们都有相同的最终目标:让计算机聪明地代表人类做决定,甚至可能比人类做得更好。在决定何时停车的例子中,人们对创造能像人一样思考的计算机产生了极大的兴趣,以便在运输中更加方便和安全。让我们来分解做出该决定时必须考虑的一些因素:

  1. 汽车速度
  2. 停车距离
  3. 危险和交通方向

计算机必须像人类一样考虑很多因素:

这些只是众多因素中的三个,正如你可能会想的那样,它们本身可以分解成更多的考虑因素。为了展示人工智能如何被用来解决这个问题,我将专注于最后一点,并强调人工智能的一个主要用途。

Photo by Evan Dennis on Unsplash.

当你注意你周围的其他车时,你的首要任务可能是测量那些车的速度和距离。然而,这跳过了识别你所看到的是一辆汽车的任务;这个简单的步骤对人类来说是如此的自动,我们很少停下来想一想。大多数人在醒着的时候都有多年识别周围物体的经验。电脑,没有我们人类的经验,有** 难度做这个和人类一样:只是做这个看似复杂,却重要的决定刹车的第一步。最近,人工智能已经通过神经网络帮助解决这个问题,甚至比人类更好。**

神经网络让计算机自学:

起初,神经网络对我来说太复杂了,我把它们的缩写 CNN 从卷积神经网络改成了卷积神经网络。然而,在坚持了一段时间后,我找到了一个适合我的类比。想想你过去的经历是如何塑造你今天的行为的。如果你过去做错了什么,你就不太可能重蹈覆辙。例如,如果你在热炉子上烧伤了手指,下次你会改变烹饪方式。同样,如果你在一家新餐馆发现了喜欢的菜单,下次你可能会再点。这个过程利用生活的积极和消极输入逐渐增加你的能力和理解。现在,想象一下,如果你能够经历成千上万次生活,从这样的反馈中学习和再学习,找到解决几乎任何问题的最佳方法,会发生什么。

Photo by Benjamin Elliott on Unsplash

这是计算机通过神经网络提供的能力。我们训练计算机程序来尝试解决问题,例如识别图像中的汽车。最初,他们可能只是根据线条、颜色、阴影等特征随机猜测一个物体是否是一辆汽车。有时,程序可以做到这一点,而其他时候却不能。利用关于他们是否成功识别汽车的反馈,他们可以修改他们处理问题的方式。也许,他们下次会在图像中寻找更亮的阴影或更直的线条,因为这让他们能够更准确地猜测汽车。最终,计算机修改寻找汽车特征的方式,或者它们的搜索参数,变得更加精确。这就像人类随时间学习一样;一个婴儿可能能够区分汽车和树,但是一个蹒跚学步的孩子能够区分汽车和卡车。这就是我们看到在这项任务中使用人工智能的内在优势所在;一个人在他/她一生中的某些时候只能一次看一幅图像,但是一台计算机可以同时浏览成千上万幅图像,有效地同时体验成千上万次人类经历。

人工智能有真正的优势:

由于这样的优势,人工智能在创造以前缺乏可行性的解决方案方面提供了直接的好处。

通过教会计算机像人类一样思考,计算机教会了我们它们可以比人类思考得更多。

Photo by Franck V. on Unsplash

事实上,它们也比其他计算机想得更多,因为人工智能允许计算机学会更好地自己解决问题,而不需要额外编程。然而,这并不是说,人工智能在所有领域都超过了人类的能力。特别是在识别汽车时,有许多异常值,神经网络很难识别。例如,如果挡风玻璃的阳光部分掩盖了汽车的轮廓会怎么样?或者,如果在晚上看到一辆只有尾灯的汽车怎么办?由于即使是如此简单的任务中的巨大差异,人们可以想象人工智能在更复杂的任务中仍然难以完全满足或超越人类的能力。然而,值得注意的是,正如人工智能必须克服的问题是巨大的,它可以被使用的机会也是巨大的。****

许多实用的创新正在发生:

Photo by Roberto Nickson on Unsplash

目前,使用人工智能来解决识别汽车和决定何时刹车等问题是自动驾驶的一部分,这是该领域的许多进步之一。你可能听说过像谷歌和特斯拉这样的大公司积极致力于在现实生活中实现这一点。从医疗保健到市场营销,还有许多其他领域在利用人工智能,值得在这个主题上发表自己的文章。想想我们在人工智能的一个简单应用中分解的复杂问题,想象一下在人工智能的这些不同领域和应用中存在的所有问题。当然,实现人工智能的挑战是巨大的,但它在许多不同领域的承诺也是巨大的。这就是人工智能如此有益的原因:它扩展了计算机的能力,超出了我们简单的编程能力,它教会计算机像人类一样思考,智能地解决问题。

关于人工智能需要了解的 3 件事:

Photo by Andy Kelly on Unsplash.

因此,以下是需要记住的关键点:

  1. 人工智能是一个广阔的领域,但归根结底是让计算机以更聪明的方式进行自我思考。
  2. 人工智能面临许多挑战,但也有像神经网络这样的聪明技术,可以让计算机自己克服挑战。
  3. 许多大公司现在在这个领域有重要的项目。很容易陷入炒作,但更难,也更重要的是,获得细节信息。

如果你想了解更多关于神经网络和自动驾驶的细节,请查看这些文章:

卷积神经网络指南

自动驾驶汽车目标检测指南

AI 将取代乔布斯。还是会?对即将到来的人工智能革命的思考

原文:https://towardsdatascience.com/ai-will-replace-jobs-or-will-it-thoughts-on-the-coming-ai-revolution-7be420f82af8?source=collection_archive---------17-----------------------

根据今年早些时候出现在《财富》杂志上的一篇文章:自动化可能会在 15 年内取代 40%的工作。这篇文章和无数其他文章一起敲响了即将到来的人工智能式工业革命的警钟。正如我们经常听到的那样,人工智能将取代成千上万的工作。几乎一夜之间,半个国家都会失业。

在这个问题上有很多不确定性、恐惧和怀疑。诚然,不可能从各个角度解决这个问题。我们甚至不会尝试。然而,我们可以提供我们对这个行业的看法,可能会有什么影响,以及我们在 15 年内可能会走向哪里。

AI 将在 15 年内取代乔布斯。我们应该担心吗?

会发生吗?是啊,可能吧。现在已经发生了。无论是人工智能,人工智能,自动化,还是任何其他技术进步。我们听说自动驾驶汽车会让整个卡车运输行业一夜之间失业。智能列车将完整的自动化货物从一个城市运送到另一个城市。

所有这些都可能在某种程度上发生。然而,现在确实有事情正在发生。从无人便利店到餐厅触摸屏;自动化已经在发生了。

真正的问题不是自动化或人工智能是否会取代工作。已经是了。已经发生了。问题是它如何击中,击中哪里,以及我们如何反应。

幸运的是,我们有一点路线图要看。我们以前经历过这个。

不是未知领域

工业革命带来了国家和全球范围的巨大变化。其他“真正的”革命也给全球带来了动荡、不确定性和社会变迁。

技术上的巨大变化不仅给工作本身带来了变化,也改变了我们看待工作的方式。当一个新的过程被建立时,效率的尺度会发生巨大的变化。无论是轧棉机、印刷机、装配线,还是微芯片,这样的例子不胜枚举。

美国和第一世界的大部分地区在一代人的时间里发生了巨大的变化。似乎一夜之间,美国、欧洲和其他地方(尽管规模较小)从农业社会转变为工业社会。

在过去的 100 年里,这种转变已经从以工业制造为基础的社会转变为以服务业为基础的社会。所以这是有蓝图的。这并不像我们想象的那样史无前例。

它可能也没有人们想象的那么可怕。

正如一位经济学家所说:

“自工业时代开始以来,人们一直担心技术变革会导致大规模失业。新古典主义经济学家预测这种情况不会发生,因为人们会找到其他工作,尽管可能需要经历长期的痛苦调整。总的来说,这一预测被证明是正确的。”

这在今天仍然适用吗?

上面的引述抓住了不那么危言耸听的观点。这是一个概念,是的,它会发生。然而,总的来说,社会将会生存下去。工业革命见证了几乎每一项技术的进步,如果它没有毁灭社会;会不会 AI?

当然,这可能是在比较苹果和橘子。工业革命时期的失业率相对较低。然而,我们能从那时到现在追踪一条直线吗?相似之处存在吗?

当然,对于一个劳动者来说,学习如何采煤而不是砍伐树木来获取生物燃料是很容易的。但是今天呢?是不是可以说,即将到来的因 AI 而产生的变化也会遵循同样的路线?

很难说。到目前为止,我们忽略了上面引用的部分:

问题是:多长时间,多痛苦?我们将痛苦的调整期视为世界末日。是吗?看情况。可怕的是,社会变革的剧变可能是,而且经常是艰难的。说得好听点。

工业革命无疑让一些人失去了工作和生计。历史上的文化和社会革命(积极的和消极的)让人们付出了生命的代价。

如果这能说明问题的话,那么有很多东西并不值得期待。比如战争。我们还没有打败那个。另一方面是政治和文化冲突。内乱。甚至,是的,革命。

但与此同时,我们之前也经历了很多。对我们中的一些人来说足够了。立竿见影的效果不总是好的。长期结果呢?很难说我们没有成功,没有在另一边领先。

需要提取一些现金吗?

为了抓住问题的核心,人们普遍担心人工智能会取代乔布斯,而且这种情况会突然发生。它会发生得如此突然,我们几乎看不到它的到来。以前有几个行业发生过这种情况。技术进步总是会导致某种程度的位移。但稍微乐观一点来看,痛苦的调整期往往会带来长期的好处。

我们中的一些人已经老到可以记得 ATM 机出现之前的世界。那些知道的人会记得,人们坚信,自动取款机将通过大量减少银行出纳员的工作来改变银行业。

确实如此。这就是问题的关键。自动化,无论是自动驾驶卡车还是自动取款机,都是为了准确地做到这一点,如果不是明确地做到这一点的话。破坏工作。

但是它也创造了新的。现在有自动取款机制造商和销售他们的销售队伍。有帮助公司解决技术问题的客户服务代表。有运钞车服务,收钱存进去。需要更多吗?进行维修的服务技术人员、为他们提供保险的保险公司以及围绕 ATM 行业存在的无数其他行业和专业又如何呢?

除了一些本来可能存在的工作(例如,运钞车服务),如果没有 ATM 机,上面列出的工作就不会存在。

对自动化的选择性蔑视

然而,这扇门并不总是双向开启的。我们中的一些人足够年轻,知道在这个世界里我们几乎不需要去提款机。网上银行业务。我们可以去几个星期,几个月,甚至更长时间,而不用去银行或信用合作社。

然而,很少有人对 PayPal 和 ApplePay 对 ATM 行业的影响敲响警钟。或者易贝和亚马逊对零售业的影响。

我们喜欢亚马逊。但不是它的阴暗面。听到员工或小企业在竞争中工作条件差的一方。我们不太喜欢那边。我们很容易同情这一方,在某种程度上,我们都是如此。

然而,对我们大多数人来说,对个人的好处可能会超过它的负面影响。我们一键购买并在两天内拥有它(不管它是什么)。免费送货。亚马逊甚至开始为其许多产品提供一日送达服务。当天送达会不会太远了?

运营效率不容忽视。对企业和最终消费者都是如此。每当我们听到亚马逊的阴暗面时,我们中的许多人都会高兴地在公共场合摇头或摇手指。

然后我们就回家续办我们的会员资格。

这不是一个大胆的宣言,也不是我们哀叹人类行为或耐心的状态时摇摇手指。这也不是给猖獗的商业主义或资本主义的情书。我们不会对世界对更快、更快、更好、更有效率的热爱是好是坏进行道德评判。

然而,这是商业效率的一课。这是过去通过几次技术和社会破坏一次又一次吸取的教训。

再说一次,当我们困在现在担心未来的时候,很难记得我们曾经来过这里。

但是我们应该担心吗?

自动化和人工智能肯定会取代工作。但不要显得油嘴滑舌,这也是重点。会不会是一夜之间的原子弹造成 40%的失业率?对无休止的抗议采取一种与众不同的方式:

不,我们不这么认为。至少不完全是那样。

今天存在的 40%的工作可能在 15 年内被人工智能取代。但是那实际上看起来像什么呢?首先,一场真正的“一夜之间”的人工智能革命(即所有的革命都发生在一两年内)是不太可能的。即使在今天这个快节奏、在线、随需应变的社会,事情也很少会发生得那么快。

这也不太可能是真正的 1:1 互换。也就是说,如果今天美国有 300 万卡车司机在工作,那么到 2022 年,路上将不会有 300 万辆自动驾驶卡车,也不会有 300 万名失业的卡车司机。

就像上面那个自动取款机的例子一样,将会有新的机会、新的产业和新的工作来取代旧的工作。

但这并不意味着 T2 没有什么可担心的。

担心是有根据的

AI 吓人。人工智能将取代乔布斯的想法让他们更加害怕。这是可以理解的,即使有时可能有点夸张和歇斯底里。

我们不能忽视正在取得的进步。但是我们也不能假装没有负面影响。我们知道自动化和人工智能将在某种程度上取代工作,但我们还不知道那会是什么样子。

技术进步往往以低收入工人为代价。那不能轻描淡写。然而,这些损失往往会导致新的、薪酬更高的工作岗位被创造出来,尽管不一定是为失业的个人创造的。

正如 300 万卡车司机可能不会在一夜之间失业一样,每个卡车司机也不会在一夜之间学会如何维修自动驾驶卡车。

代际方法

我们认为,如果这一领域在未来 5-10 年内持续发生变化,我们将会看到什么。在此期间,这些技术的早期推动者和采用者将有真正的机会提出主张,推动对话,并开始向我们展示“由人工智能运行”的世界将会是什么样子。

在这段时间里,我们有机会准备。这意味着理解、教育和为未来做准备。我们不太确定美国,甚至全球经济的下一个开端会是什么样子。

在过去的大约 200 年里,我们已经迅速地从农业经济转向工业经济,再转向以服务为基础的经济。后服务经济到底是什么样子的?

目前,尽管人们对无人驾驶汽车或自动化餐厅感到恐惧,但它们并没有真正扩散开来。尽管看起来很奇怪,但很少有人真正推动它们以任何有意义的方式广泛传播。事实上,虽然这些领域中的许多都在试验中,但没有一个领导者站出来说“这就是我们要做的”,并为此提出一个 15 年计划。

因此,在这一代人的时间里,我们可能看不到最糟糕的恐惧或最美好的想象成为现实。也许时间会更短,但对于真正的人工智能革命来说,15 年似乎是一个积极的时间表。20 或更多似乎更现实。这将导致对自动化服务的需求不断增长,老年劳动力的逐步淘汰,以及该领域出现一个或多个明确的领导者来引领我们前进。后者真的还没发生。

这可能是积极的,也可能是消极的,取决于你的观点。但在这发生之前,关于自动化,特别是人工智能和人工智能的大部分喧嚣都有点言过其实了。它仍然处于初级阶段。谨慎和好奇是必要的。但当怀疑人工智能明天是否会取代乔布斯时,现实主义也是如此。

最后,这很复杂

有很多问题要问,其中许多问题还没有答案。AI 会取代 40%的工作吗?很难说这个数字是否准确。可以说是 20%,40%,60%,或者其他任何数字。

然而,在我们的行业中,我们有责任为社会做正确的事情,甚至是人类,如果你接受这种夸张的声明的话。我们需要成为我们正在创造的世界的管理者,并意识到这意味着什么。

我们需要确保我们正在透明和诚实地开发改善社会的工具,并在应用这些工具时保持谨慎。如果在这个过程中,我们可以引导社会理解这些工具和应用,我们也可以让他们为此做好准备。

如果我们遵循这些指导原则,人工智能革命可能不会像我们最担心的那样迅速或痛苦。与此同时,它也会变得和我们想象的一样奇妙。

原载于 2019 年 6 月 21 日【https://introspectdata.com】

人工智能将在人类进化中占据中心位置

原文:https://towardsdatascience.com/ai-will-take-center-stage-in-human-evolution-cead9fa22c25?source=collection_archive---------25-----------------------

Edited. (Original: Photo by Viktor Talashuk on Unsplash)

其他关于工程智能的文章

人类 3.0 的崛起始于 AI

Don’t have time to read? Listen to this article on my podcast.

在你生命中的某个时刻,你意识到你曾经敬仰的人并不像你曾经想象的那样完美。我们现在正努力用我们的智慧来处理这种意识。在这个世界上,曾经是人类成就巅峰的月球发射现在可以通过你的智能手机中的一小部分计算能力来处理(这种转变发生在不到一个世纪的时间里),我们不禁想知道我们未来将走向何方——一个人类可能不再相关的未来。

但不要相信我的话,埃隆·马斯克甚至为此拍了一部纪录片,这也是他与 Neuralink 有牵连的原因之一。然而,未来还没有到来,作为一个文明,我们仍然有时间找到保持自身相关性的方法——特别是在我们的认知相关性方面,这是我们首先到达这里的原因。

A Timeline from Human 1.0 to Human 3.0

人类简史

人类已经进行了一次穿越时间和空间的长途旅行(主要是在地球上,但最近也在其轨道之外)。首先出现在非洲(嗯,这是最广为接受的理论),随后迁移到每一寸土地,作为一个物种,我们已经实现了许多里程碑,慢慢走向我们今天拥有的地球的最终统治地位。

人类 1.0 标志着我们作为一个物种的出现:智人。我们繁殖火焰的能力有助于提高我们的认知能力,这反过来又让我们成为一种弱势动物。人类 2.0 标志着一个独立的里程碑:文明,通过能源的再生产——即农业。正是在这个转折点上,我们可以将重点转移到集体创建一个名为社区的实体上。最后,人类 3.0 标志着另一个里程碑,我们正在见证今天的开端:我们复制智能的能力。就像我们使用火和农业来帮助引领我们进入人类的早期阶段一样,我相信人工智能将是我们在未来用来诞生人类 3.0 的工具。

人类 1.0 出现在 10 万年前,在掌握火之后

人类 1.0 标志着智人的出现,我们今天仍然是这个物种。目前,该物种的出现估计发生在大约 30 万年前。这发生在我们驯化火之后不久,大约 30 万到 40 万年前(嗯,公平地说,考古学家认为火的驯化可以追溯到 150 万年前,但 30 万到 40 万年的范围是最广泛接受的)。

这不仅仅是巧合。一种理论指出火是现代人类大脑发展的催化剂(象征性的,不是字面上的)。当我年轻的时候,我记得我爸爸曾经吃得很多。我妈妈会开玩笑说,他之所以一直很瘦,是因为他用脑太多。回想起来,背后还是有一定道理的。据估计,人类大脑要消耗身体总能量的 20%左右才能发挥作用。

作为能量消耗者,大脑是我们随身携带的最昂贵的器官

通过用火烹饪,食物对我们来说变得更容易消化,这做了两件事:首先,它减少了消化所需的能量,其次,它让我们消耗更多的热量,吸收更多的营养,用于大脑的发育。火对我们智力进化的确切影响仍有争议,但不可否认的是,它有助于为我们的大脑提供能量。

[## 对智力的起源感兴趣?阅读我的系列文章。

《智力的起源》是一个探索智力产生的历史和因素的系列。

medium.com](https://medium.com/tag/origins-of-intelligence/latest)

人类 1.0 是游牧的。虽然它的智力明显高于类人猿,但它也严重依赖体力和耐力生存。由于没有家可回(由于缺乏文明),人类 1.0 严重依赖同伴合作来生存。Yuval Noah Harai 在他的书《智人》中详细描述了我们祖先的生活。

人类 2.0 出现在 23000 年前,在掌握农业之后

人类 2.0 随着农业的出现而到来。以前,人们认为人类大约在 10,000 年前发明了农业。这正好是最近一次冰河时期结束的时间(11700 年前)。

然而,在 2015 年,科学家发现证据表明的农业可以追溯到 23000 年前,这意味着这种做法开始于——而不是在——最后一次冰河时期之后。在这一点上,世界各地的人类开始独立驯化植物和动物(或者像尤瓦尔·诺亚·哈拉里(Yuval Noah Harari)认为的那样,世界各地的植物和动物开始驯化人类)。在进化的时间线上,农业出现在大约 35000 年前第一个现代人类大脑开始出现之后。

这个从狩猎采集生活方式向农耕生活方式转变的时期也标志着向人类 2.0 的转变。在某种程度上,农业将人类束缚在他们的土地上,导致了更复杂的社区。在此之前,在狩猎采集的生活方式中,人类是游牧民族——他们四处旅行寻找食物,并没有一个真正称之为家的地方。农业把我们变成了定居的哺乳动物。

此时的里程碑标志着文明诞生的转折点。最初帮助我们物种生存的过程演变成了我们今天看到的现代社会——可以说是一种生物本身,人类已经成为其细胞。现在,我们有微型文明,我们中的许多人是所谓的企业的一部分,这可以被法律认为是纳税和承担诉讼责任的实体,就像人类一样。随着文明的出现和持续发展,人类个体生命的价值越来越受到质疑。

掌握人工智能后出现人类 3.0

人类 3.0 是技术直接或间接补充或增强其智力的人类。有几种方法可以实现这一点,但人工智能将不可避免地在某种程度上参与其中。

有人可能会认为人类 3.0 已经到来,它是随着 iPhone 和物联网等技术的出现而出现的,我们连接的每一个设备都为我们提供关于我们自己的可操作信息,并在日常生活中帮助我们。然而,这些物品只是工具。正如火为现代人类铺平了道路,农业开创了文明,人工智能的工具将被应用于在基因或增强水平上衡量人类的智力。

与我们使用的替代工具相比,我们迄今为止取得的人工智能成就相当惊人,尤其是在自动化方面。例如,通过面部识别,人工智能可以对几小时或几天的安全录像进行排序,以找到一个失踪的孩子。在像这样的工具出现之前,一个人必须坐在那里自己浏览所有的片段。

话虽如此,人工智能仍处于起步阶段,要将其应用于更多行业和用例,我们需要数据——海量和正确的数据。李开复在他的书《人工智能的超能力》中广泛地谈到了这一点,所以如果你想了解更多细节,可以看看这本书。我们今天拥有的工业用例令人印象深刻,围绕自动驾驶等未来用例的研发更令人印象深刻。但要让人工智能应用于某些用例(即,那些将带领我们更快实现人类 3.0 的用例),它需要等待数据和我们对主题的理解赶上来。根据我们实现人类 3.0 的方法类型,人工智能将需要不同的技术来赶上。

通过人工智能增强的人类 3.0

实现人类 3.0 的第一个策略最近引起了媒体的广泛关注——neural ink 是埃隆·马斯克的最新创意,它希望开发一种大脑芯片,可以在人工智能的帮助下帮助用户思考和控制技术。

[## 什么是 Neuralink:看看它是什么,它想要成为什么,以及它可能成为什么

向你的第六感问好。

towardsdatascience.com](/what-is-neuralink-a-look-at-what-it-is-what-it-wants-to-be-and-what-it-could-become-2acf32b51dc5)

无论是 Neuralink 还是另一家大脑芯片设备制造商,结果仍然是可以想象的——人类历史上第一次,我们建造的所有工具都将成为我们的直接延伸。与我们周围的世界互动可能不再需要我们动动手指。如果人类 2.0 变成了久坐,那么人类 3.0 就有变成久坐 2.0 的风险(请笑)。

虽然与我们周围的物体互动可能不再需要动动手指,但与我们周围的人互动可能不再需要我们张嘴。大脑芯片设备(Neuralink 的设备已经支持蓝牙,可以与你的 iPhone 通信)可以相互通信。大脑芯片读取我们的想法后,它可以比我们大声说出来更快地将信息传递给其他人。

通过 DNA 操作的人类 3.0

我们已经探索了进入人类基因组的祖先病毒是如何操纵我们神经通讯的。我们还观察了人类基因组中天然发生的基因突变,这种突变改变了干细胞产生的神经元数量,从而增加了我们的智力。

过去对人类基因组的操纵导致了我们认知能力的提高,没有证据表明我们已经达到了遗传智力的上限。一旦我们对人类基因组有了更多的了解,特别是对智力有最直接影响的基因片段,我们就可以训练人工智能算法进行模拟,并帮助我们发现其他可能的突变,以进一步开发人类大脑。

一个组合:人类 3.0 机器人

一个结合是可能的,因为科学界在各自的领域内平行地工作以取得独立的技术进步。这种可能性为人类 3.0 的更多选择打开了大门。例如,目前,要使用 Neuralink,芯片及其电极必须自动安装在颅骨下方。

这是一个侵入性的过程,但需要工作,因为电极需要足够近才能检测到微弱的信号,电极可以捕获神经元相互通信时发出的电信号。通过基因操作,我们有可能增加信号的半径,使其可以被电极检测到,而无需进入大脑。

虽然这听起来很容易想象,但无论我们选择哪条道路来创造人类 3.0,都将不可避免地充满我们必须解决的技术障碍,以及我们必须回答的伦理困境。虽然我们必须等待技术赶上或首先自己制造,但伦理问题以及我们如何最负责任地开发它可以在短期内得到解决。像 Neuralink 这样的公司已经在实现这项技术的过程中,所以现在是时候考虑人类如何在道德上安全地迎接人类 3.0 了。

人工智能会教我们成为人类

原文:https://towardsdatascience.com/ai-will-teach-us-to-be-human-aaf7dd218b6d?source=collection_archive---------35-----------------------

A woman interacting with Sony’s AIBO (Source: AIBO Official Website)

审判日只是开始

2017 年,普华永道发表了一篇论文,记录了其对美国和英国人类就业未来的预测;具体来说,它着眼于机器人和人工智能发展带来的工作自动化。该论文将普华永道的预测与弗雷、奥斯本、阿恩茨、格雷戈里和 AGZ 的其他预测进行了对比。

Predictions of current jobs automated by 2030 (Source: PwC)

不管普华永道、FO 或 AGZ 如何预测,人工智能对世界的影响之大,在它发生之前可能不会真正被意识到。想想报纸行业发生了什么。2006 年,《卫报》发表了一篇评论文章, 博客不是新闻 。三年后,Business Insider 发表了一篇名为 的文章,这一年报纸死了 。我们甚至在 2006 年之前就看到了互联网的到来,但在当时,很少有人能够意识到它将带来的革命性影响,不仅是对报纸行业,而是对整个世界。

人工智能有潜力产生更大的影响。然而,这不仅仅是通过人工智能本身;同时开发区块链、5G 和机器人等技术将与人工智能相结合,以实现最大的影响。2030 年,如果普华永道的预测成为现实,今天美国超过三分之一的现有工作将由机器人和/或人工智能处理。把时间线拉得更远一点,有一天我们可能会看到人类工人的完全取代,这涵盖了就业领域的所有方面。

是什么让我们成为人类

我们有一种倾向,也许是绝望,想要在自己和其他事物之间划一条线。什么使我们成为人类的问题远在人工智能的概念被构想出来之前就存在了。这就是为什么答案在整个人类历史中不断变化。在文明出现之前,考古学家指出的答案是我们相对的拇指和不断增加的神经数量。在现代人类发展过程中,正是我们复杂的社会结构和认知能力发展了语言和量化,从而产生了社会。

当机器人和人工智能仅仅是作者或电影制片人的想象时,我们的答案再次发生了变化,但这一次有点不同。以前的答案是为了解释为什么我们处于食物链的顶端,但这个新答案是为了解释为什么我们应该留在那里。不幸的是,我们不能再依赖我们的制胜法宝:语言和量化。毕竟,计算机数据的传输和处理速度比人类数据快得多。所以我们开始说只有人类才有能力去爱和艺术。但是我们错了。

艺术和爱情的复杂之处在于两者都没有明确的定义。艺术是主观的,取决于观众的口味。爱也是主观的——它是一种神秘的情感,我们很难描述。它的复杂性源于它是自然过程和人类文化的混合体;也就是说,它既是自然的又是非自然的。

自然的是我们繁衍后代的欲望。不自然的是婚姻制度——我不是说这是错的,我只是说这不是我们的基因编码,而是教给我们的。在公元前 2350 年之前,我们没有婚姻的记录证据,人类学家认为家庭是由“多达 30 人组成的小团体,有几个男性领导,他们共有多个女人,还有孩子。”

现有的最佳证据表明,婚姻大约有 4350 年的历史。大多数人类学家认为,在那之前的几千年里,家庭由多达 30 人的松散组织的群体组成,有几个男性领导人,他们共有多个女人,还有孩子。

-星期

虽然我们最初退回到人性中更柔软、不可测量的方面,但这些特征(艺术和爱)可能不会再是人类独有的了。

糖、香料和香料

Mario Klingemann’s Memories of Passersby I (Source: The Verge)

2019 年春,艾艺术品在苏富比进行拍卖。它是由通用对抗网络(GAN)生成的——这是一种通过使用两个计算机参与者来创建人工智能算法的方法。第一个参与者拿着一堆数据,试图理解它们(在这个例子中,是艺术的图像),然后产生它的版本。第二个参与者接受训练,以辨别人工智能生成的材料与人类生成的材料。如果它能够区分,那么第一个参与者没有产生足够好的艺术作品,并再次尝试(注意:参与者不是人,只是计算机)。现在,人工智能已经开始创作艺术品,并在苏富比拍卖行出售,我们关于人类艺术技能的论点受到了质疑。

此外,随着人类和机器人之间的交互从手(即打字)转向声音和面部,爱和情感在机器人身上变得越来越普遍。计算机的拟人化正在将它们的角色从工具转变为伴侣。像亚马逊 Echo 和谷歌 Home 这样的设备正在融入我们的生活,了解我们喜欢什么和我们日常生活的节奏。2018 年,超过1.1 亿台此类设备出货。作为一个失去亚马逊回声的人,我可以证明我感受到的人类情感——就像失去一个朋友。

AIBO, Sony’s AI-enabled Robot Dog (Source: AIBO Official Website)

即使是 AIBO,一个非常基本的人工智能机器人版本的狗,也被视为不同于 iPhone 等工具。2008 年的一项研究观察了儿童与 AIBO、索尼制造的机器狗和真狗的互动行为,结果显示,60%的儿童肯定 AIBO 可以拥有精神状态(情绪)、社会性和道德地位,就像人类的狗一样。但是在 AIBO,孩子并不是唯一给予和寻找爱和感情的人——甚至成年主人也对他们的机器人最好的朋友有强烈的情感依恋。

The AlphaGo documentary is a must-watch for anyone interested in AI. You can view it on NetFlix (Source: IMDB)

我们生活中曾经充满人性的一面正在慢慢消失。人工智能正在开始创造艺术,它也能够接收和提供爱和情感。虽然它做这两件事的能力可能是有限的,但随着时间的推移,它会在这些能力上变得更加熟练,有可能达到超越人类的精通。我们已经知道这是可能的。

当谈到识别人脸时,人工智能已经比人类更擅长于此——sense time提供了世界上最精确的面部识别算法,可用于为拥有数百万人口的智能城市提供动力。说到玩游戏,OpenAI 已经击败了 DOTA 的人类世界冠军。在棋盘游戏的世界里,AlphaGo 已经击败了这个星球上最伟大的围棋选手

清算日

在技术创新和我们重建自我的矛盾愿望的推动下,终结者的审判日可能比我们想象的更不可避免。在我们这个数据驱动的世界里,智力由智商来衡量,繁荣由金钱来衡量,社会信誉由追随者来衡量,人类量化、存储数据并准确有效地处理数据的能力远远低于计算机化的能力。我们将这个缺点称为人为错误——这可能是最终将我们与人工智能区分开来的唯一原因。

再见,旧世界

我们保住我们的工作,比较我们的头衔,数钱,好像这就是生活的定义,但正是这种结构阻止了我们中的许多人真正生活。许多人活着就是为了工作。令人精疲力尽的工作时间已经变成了一个天真的包袱。然而,当人工智能成为改变我们社会现有结构的解决方案时,我们抱怨它如何将我们从我们自己建造的枷锁中解放出来,就像斯德哥尔摩综合症一样。也许我们现有的社会结构没有按比例建立。

纽约市的人口超过 800 万。在 1776 年革命战争期间,整个美国的人口是 250 万,其中估计有 50 万是奴隶。开国元勋们写美国宪法时考虑的是 200 万人口。他们管理着纽约市 1/4 人口的权利。今天,宪法是美国这片土地上事实上的法律,这里有超过 3 . 2 亿人居住在。这里也是一个文化和价值观的大熔炉,其中一些人享有携带武器的权利,而另一些人则认为这是一个日益严重的暴力问题。

我不是在争论宪法是否适合当今世界的美国。我敢肯定,人们可以列举出拥有这样一部像宪法一样具有基础性的法律的好处。我认为,在当前形势下,它在治理国家方面发挥着至关重要的作用。相反,我是在暗示,开国元勋们在撰写这本书时,可能没有考虑到其他 3.18 亿人和文化会在多年后存在。

西方噩梦和东方梦想

然而,当下一代人工智能来敲门时,它可能会带来一个新的社会结构。然而,这种新的结构看起来会随着你和谁说话而变化——更具体地说,是你在哪里说话。对于人工智能在未来的角色,最常见的并列看法是美国和日本。机器人与人类的典故在美国文化中很盛行,比如《终结者》《黑客帝国》和《T2》埃隆·马斯克史蒂芬·霍金这样的思想领袖。与此同时,日本和许多其他亚洲文化是在机器人英雄身上成长起来的,如阿童木高达之翼

Joi Ito 在 2018 年的一篇名为 的文章中解释了为什么西方人害怕机器人而日本人不害怕 的差异。他将此归因于神道教。用伊藤先生的话来说,“与犹太教和基督教的一神论者以及他们之前的希腊人不同,神道教的信徒不相信人类是特别的。”"

日本人不区分人类、高等生物和他周围的世界。一切都融合在一起,我们很容易接受机器人以及我们周围的广阔世界,昆虫,岩石——这都是一个整体。我们对机器人没有怀疑的态度,就像你在西方看到的伪人类一样。因此,在这里你找不到阻力,只是安静地接受。

引自手冢治虫,翻译:伊藤约伊

另一方面,基督教是西方最普遍的宗教,认为人类不仅不同于其他动物,而且更好,仅次于上帝。不管你的宗教信仰是什么,基督教的这个产物,就像婚姻的概念一样,已经在文化中扎根了。我们这一代人是听着巴尼的歌长大的,这些歌的歌词包括:

你是特别的,你是唯一的

只有你像你一样。

世界上没有第二个了

谁能做你做的事情。

——巴尼演唱会

也许巴尼之歌是一个有偏见的例子,因为我在没有有线电视和一盘 VHS 磁带的情况下长大,我用它来记录巴尼在音乐会上的插曲。然后我看了一遍又一遍,一遍又一遍,因为这是我在接下来的几年里唯一可以看的东西(嗯,还有杜立德医生,它也可以放在 VHS 上)。也许我是唯一一个得到紫色恐龙巴尼灌输给我的信息的人。不管怎样,巴尼并不是唯一宣扬以人类为中心的宇宙观的人。

在西方人看来,没有什么能遮蔽人类。不幸的是,也许有一天。从这个角度来看,人们认为世界末日是一场零和游戏。但重要的是要明白,这不是一个事实,驱动到那个结论;相反,这是一种文化。证据在世界的另一边,那里的人们信奉与人工智能共存的理念。除了日本,中国也在优先发展人工智能。虽然在美国,人工智能可能是一个资金充足的想法,但在中国,它得到了政府的全力支持(财政和立法)。

这并不是说东方没有恐惧,西方也没有拥抱。这两者之间没有界限——文化,尤其是在全球化的国家,正在成为政治边界内外影响的融合。这就是为什么人工智能对人类的影响没有明确的定论。

人工智能的黎明是人类的重生

在可预见的未来,AI 不会比人类更像人类,因为我们不知道作为人类意味着什么;因此,我们不能衡量它,也不能比较它。它能做的是推动我们重新思考社会目前的运行方式。随着工作岗位的减少,最终,我们将到达一个转折点,我们必须评估工作在人类生活中所扮演的角色。

如果钱是通过工作来支付的,但是大多数人不能工作,那么就必须重新考虑货币的供给。在这种情况下,像普遍基本收入 (UBI)这样的想法出现并占据中心舞台。金钱可能不再与工作交换,因为工作可能不再是对社会贡献者的要求。

但这种改变不会在一夜之间发生,过渡期也不会很美好。工作将会失去,在人类做出适当反应之前,许多人的生命将会被毁掉。不幸的是,这些成长中的痛苦可能会成为一种不可避免的影响,许多人可能会误认为是目的本身,但它是达到目的的一种手段。在这一过渡时期,我们必须考虑如何减轻可能出现的负面影响,这也是 UBI 发挥重要作用的地方。

在我开始步入无知的更深层次之前,这大概是我所能想到的。人类可能不再需要工作,普遍基本收入可能发挥人类生存的基本经济作用,或者货币交换的概念可能被完全取代。虽然我不能对生活的目的进行任何有意义的讨论,但我可以同意这个目的不太可能被采用,并存下 401K。

然而,自从农业出现以来,人类的生命慢慢变成了一种可消耗的资源——让企业、政府或经济运行更快的汽油。人工智能的到来挑战了这一范式,但不一定会变得更糟。它带来的效率提供了过上更充实生活的机会。没有了对工作和薪水的担忧,随着一种更注重实现的生活方式的引入,人工智能清算日可能会让我们更接近于回答对人类意味着什么。

人工智能不会取代艺术家,相反,它会增加他们的数量

原文:https://towardsdatascience.com/ai-wont-replace-artists-instead-it-will-augment-them-2963532ec8f3?source=collection_archive---------12-----------------------

艺术界痴迷于人工智能创作的作品,这并不令人惊讶,但也令人筋疲力尽。如果你一直关注艺术新闻,你会知道去年 10 月,一幅非常普通的人工智能肖像卖到了 43.2 万美元。它是由一个叫做 GAN 的开源程序开发的。佳士得声称这是“第一幅由算法生成的待拍卖的肖像画。”当然,这不是真的-像托马斯·拉夫这样的艺术家几十年来一直在制作这样的汇编艺术品。在佳士得售出的这件作品甚至不是人工智能图像创作的高级或受启发的应用。那么它为什么会被卖掉呢?我相信这是因为我们正处于艺术界一个一致趋势的逻辑终点:拒绝自己。几个世纪以来,艺术一直处于永久的自由落体状态,分裂并挑战其形式的定义。

这并不新鲜。16 世纪晚期,绘画大师卡拉瓦乔通过描绘令人难以置信的黑暗、病态、戏剧性的场景,拒绝了绘画的光明和理想主义。毕加索拒绝了人类的形式,而喜欢更直观、更感性的形象。杜尚拒绝将艺术视为神圣的创造,并确实想过将便池称为艺术——让观众震惊和敬畏。罗斯科完全拒绝数字和表现,靠在画布上出售模糊的色块过着神话般的生活。安迪·沃霍尔用他对媚俗流行文化的不敬表现拒绝了艺术中剩下的任何意义。

沃霍尔的精神传人杰弗·昆斯通过制作更丑陋、更媚俗、更重复的作品,并经常从不太出名(也可以说更有才华)的艺术家那里窃取创意,进一步堕落到了无意义的无耻艺术中。艺术界不在乎昆斯或其他人是否不道德。只要是拒绝旧标准,什么都可以。首先是拒绝完美,然后拒绝现实主义,然后拒绝形式,然后是意义。现在,看起来,我们已经拒绝了任何目的。人工智能艺术只是一个概念的解释,归结到它的螺母和螺栓。虽然这可能有一些哲学上的兴趣和美学上的吸引力,但我不能提出任何更广泛的理由。

我们什么时候才能意识到拒绝标准就是新标准?什么时候我们会拒绝拒绝本身?

我想知道艺术定义的概念去进化是否在 AI 艺术中达到了最低点,这里是 AI 艺术的工作方式:程序被训练识别艺术和结构中的模式,然后使用那些模式来创作自己的作品。他们还需要一段时间才能开始寻找创造意义的方法,并像真正的艺术家那样对社会趋势做出反应。目前,它们天生就是 100%的衍生品。

事实上,这是艺术界的拒绝执念仍然可以产生一些有趣的东西的地方。为什么我们不要求我们的人工智能创造出分析然后拒绝趋势的作品,而不是模仿它们?如果他们能确定艺术的规则,我们不妨要求他们打破那些规则。

然而,我觉得这比让艺术家使用人工智能创作有意义的作品有趣得多。在之前的一篇文章中,我谈到了技术可以重塑我们所知的艺术。我相信它将非常依赖于大量的开源资产库。我还认为,这些图书馆或数据库将包含我们上传的大量信息。为什么考虑以下技术。

  1. 这个人不存在创建看起来很真实的脸,但实际上是不同脸的集合。
  2. 活尸人工智能将他人创造的资产放入人工智能生成的场景中。它负责灯光/阴影&很容易修改。
  3. Nvidia 的 GauGAN 允许你绘制一个形状,并用一种物体/材质类型填充它。然后,艾把它变成了一个逼真的 2D 场景。
  4. WordsEye 让你用文字描述一个场景,然后 AI 创造那个场景。它为每个对象提供了一个小型资源库,因此您可以选择正确的对象。

Source: https://www.wordseye.com/about

Promethean 和 WordsEye 都在 3d 空间中工作,而其他的都是 2d 的。连接所有这些的事情是他们使用人工智能和资产库来达到一个特定的目标。除了这个人不存在,他们都允许用户输入具体的要求或限制。(这个人不存在可以修改为允许用户约束,因为是用开源的 GAN 系统做的)。从艺术上来说,这些都更像是拼贴画而不是绘画。但是这些技术仍处于起步阶段。系统变得越可定制,它们就越有创造性和个性化。

在这项技术中,我们可以开始看到个人资产库的具体潜在应用。我们这个时代的大多数人已经通过电话、视频和音频记录在他们的手机上创建了丰富的资源库。我们用这些来创造我们自己的身份,包括个人身份和社会身份。但是,如果我们可以用这些图像来创造受我们个人世界启发的东西,会怎么样呢?如果我们拍的照片可以是工具而不是最终结果呢?

让我们稍微探讨一下这个想法。你可能有一种特定的数字审美,建立在你的整个数字足迹之上:保存在手机上的照片,你在 Pinterest 上喜欢的东西,你在 Instagram 上发布的东西,等等。人工智能可以很容易地分析你的所有帖子,并重新创建符合你审美的新场景和物体。你可以要求它创造一个受此启发的房间;或者由您概述的特定约束来定义。你可以从画房间的形状和里面的物体开始,就像你在高根画的那样。然后,它可以按照普罗米修斯人工智能创建空间的方式来建造(它会从你发布和喜欢的房间图像中提取)。最后,房间里可以放满亚马逊和宜家购物清单上的物品。

Source

假设您想更进一步,将您自己的对象添加到您正在创建的场景中。实现这一点的一种方法是将您从现实生活对象中创建的 3d 资源包括在内。这可以通过智能手机上的应用轻松实现。或者,用你在 2D 的旧照片。像 Smoothie 3D 这样的免费在线平台能够将任何 2d 照片转换成 3D 物体。像 Threedy.ai 这样的新创公司旨在利用人工智能使这一过程更快、更少人工干预。一旦你有了一个粗略的 3d 场景,你可以使用类似 GauGAN 的绘图功能来绘制一些形状,然后用一个对象填充它们。

让我们进一步推动它。假设你想在你创建的场景中添加一个科幻小工具。你戴上虚拟耳机,画出一个粗略的圆柱体。然后,你必须用纹理填充形状——所以你要求人工智能从你创建的 moodboard 中提取。它利用这些图像的灵感创造了一个圆柱形的物体。使用同样的技术,可以创造出一个装满物品的房间。

Source: https://worrell.com/using-mood-boards-to-drive-design-decisions/

等等,这和艺术世界有什么关系?

很明显,这些方法(以及更多我们还没有想到的方法)可以将艺术界推向新的高度。创作和自我表达将变得越来越容易获得,越来越多媒体化。这项技术还将允许艺术家创造比目前更具沉浸感的艺术体验。

我想象的最后一个应用是一种艺术类型,它不仅仅使用人工智能来整合艺术家自己的数字信息。相反,我认为下一个合乎逻辑的步骤是将艺术扩展到我们的思想世界和社会体系中。

人工智能艺术可以与观众建立真正的个人关系。

想象一下,你走进一家画廊去看一场新的艺术展览。在门口,你登录你的谷歌账户,然后戴上虚拟现实耳机。突然,你被传送到一个房间。这些墙壁是一个梦幻般的场景集合体,看起来就像是来自你自己的生活。你的猫的动画,由数百张你的猫的照片和视频创建,在地板上蹦蹦跳跳。房间周围的植物与你以前见过的完全不同——它们不存在于现实世界中——但它们看起来像是真的。它们就像你经常在 Instagram 上喜欢的植物图片一样美观。你在镜子里看到自己——这是你谷歌账户上所有自拍照的 3d 组合。你走进房间时穿的衣服已经被摄像头扫描并在虚拟现实中复制。你可以切换不同的服装——既有你在照片中穿过的,也有你喜欢的视频中的,还有 AI 通过汇编你喜欢的风格创建的。

如果陌生人走进展览,人工智能会将你的品味与他们的结合起来。墙上的一扇窗户打开了,你看到自己童年的场景和他们的场景混合在一起。覆盖在你们世界地面上的花卉地毯现在变成了带有花卉图案的瓷砖。音乐从你个人的 Spotify 播放列表转移到你和他们的歌曲的混音,由 AI 创建。这个世界不可能存在于任何人之间。你会以一种全新的方式感受到与这个人的亲密联系。

source

艺术世界是建立在拒绝之上的,而技术和虚拟艺术是一个充满机遇的世界。任何人都可以投身其中,做出下一个疯狂的新事物,就像历史上新的艺术范式让文化惊叹一样催眠观众。这种创造、自由和自我探索的行为就是艺术。如果你认为计算机程序可以取代艺术家,那你对艺术为什么被创造就有了根本性的误解。

艺术一直只是分享人类感知的一种方式。

艺术家总是从他们周围的世界中获取灵感,AI 也是如此。将人工智能作为一种新的媒介或工具,而不是最终结果,要有趣得多,也更有创造性。人工智能和数字艺术是一个新的方向,我们可以在其中探索我们的感知和灵感。

如果我们要继续拒绝艺术规范,是时候抵制简单、无意义和无聊的艺术规范了。在创造力进化的所有方式中,人工智能艺术肯定是最有趣的途径之一——当然,也是最聪明的。

利用深度学习的最新进展来预测股价走势

原文:https://towardsdatascience.com/aifortrading-2edd6fac689d?source=collection_archive---------0-----------------------

Overview of the complete architecture.

完整笔记本链接:https://github.com/borisbanushev/stockpredictionai

在这本笔记本中,我将创建一个预测股票价格变动的完整过程。坚持下去,我们会取得一些不错的成果。为此,我们将使用一个生成对抗网络 (GAN)与(一种递归神经网络)作为生成器,以及一个卷积神经网络(CNN)作为鉴别器。我们使用 LSTM 的明显原因是我们试图预测时间序列数据。为什么我们使用 GAN,特别是 CNN 作为鉴别器?这是一个很好的问题:稍后会有专门的章节讨论这个问题。

当然,我们将对每个步骤进行更详细的描述,但是最困难的部分是 GAN:成功训练 GAN 的非常棘手的部分是获得正确的超参数集。出于这个原因,我们将使用贝叶斯优化(以及高斯过程)和深度强化学习** (DRL)来决定何时以及如何改变 GAN 的超参数(探索与开发困境)。在创建强化学习时,我将使用该领域的最新进展,如 RainbowPPO 。**

我们将使用许多不同类型的输入数据。除了股票的历史交易数据和技术指标,我们还将使用 NLP (使用“变压器的双向嵌入表示法”、 BERT ,NLP 的一种转移学习)的最新进展来创建情绪分析(作为基本面分析的来源)、傅立叶变换来提取总体趋势方向、堆叠自动编码器来识别其他高级特征、特征投资组合来寻找相关资产、 自回归综合移动平均线( ARIMA )用于股票函数的逼近,以及更多,以便尽可能多地捕捉关于股票的信息、模式、相关性等。 众所周知,(数据)越多越好。预测股价走势是一项极其复杂的任务,所以我们对股票(从不同角度)了解得越多,我们的变化就越大。

为了创建所有的神经网络,我们将使用 MXNet 及其高级 API——Gluon,并在多个 GPU 上训练它们。

注意 : 虽然我试图深入几乎所有算法和技术背后的数学和机制的细节,但这本笔记本并没有明确打算解释机器/深度学习或股票市场是如何工作的。其目的是展示我们如何使用不同的技术和算法来准确预测股票价格的变动,并给出在每一步中使用每种技术的理由和用途。

目录

1.介绍

准确预测股票市场是一项复杂的任务,因为有数以百万计的事件和先决条件,特定股票会向特定方向移动。因此,我们需要尽可能多地捕捉这些先决条件。我们还需要做几个重要的假设:1)市场不是 100%随机的,2)历史重复,3)市场遵循人们的理性行为,4)市场是“完美的”。请务必阅读底部的免责声明。

我们将尝试预测高盛的价格走势。为此,我们将使用 2010 年 1 月 1 日至 2018 年 12 月 31 日的每日收盘价(七年用于培训,两年用于验证)。我们将交替使用‘高盛’和‘高盛’这两个术语

2.数据

我们需要了解是什么影响了 GS 的股价是上涨还是下跌。这是人们作为一个整体的想法。因此,我们需要整合尽可能多的信息(从不同的方面和角度描述股票)。(我们将使用每日数据— 1,585 天来训练各种算法(我们拥有的数据的 70%),并预测接下来的 680 天(测试数据)。然后,我们将预测结果与测试数据进行比较。每种类型的数据(我们称之为特性)将在后面的章节中详细解释,但是,作为一个高层次的概述,我们将使用的特性有:

  1. 相关资产 —这些是其他资产(任何类型,不一定是股票,如商品、外汇、指数,甚至是固定收益证券)。像高盛这样的大公司显然不会“生活”在一个孤立的世界中——它依赖于许多外部因素并与之相互作用,包括其竞争对手、客户、全球经济、地缘政治形势、财政和货币政策、获得资本的途径等。细节在后面列出。
  2. ****技术指标——很多投资者追随技术指标。我们将把最流行的指标作为独立的特征包括进来。其中——7 日和 21 日移动平均线,指数移动平均线,动量,布林线,MACD。
  3. 基本面分析**——一个非常重要的特征,表明股票可能上涨或下跌。基本面分析中可以使用两个功能:1)使用 10-K 和 10-Q 报告分析公司业绩,分析 ROE 和 P/E 等(我们不会使用这一功能),以及 2)新闻——潜在的新闻可以表明即将发生的事件,这些事件可能会使股票向某个方向移动。我们将阅读高盛的所有每日新闻,并提取当天对高盛的总体情绪是积极、中立还是消极(以 0 到 1 的分数表示)。随着许多投资者仔细阅读新闻,并根据新闻做出投资决定(当然部分是这样),如果今天高盛的消息非常积极,那么明天该股很有可能会飙升。至关重要的一点是,我们将在以后对绝对每一个特征(包括这个特征)执行特征重要性(意味着它对 GS 运动的指示性)并决定是否使用它。稍后会有更多的介绍。
    为了创建准确的情感预测,我们将使用神经语言处理( NLP )。我们将使用 BERT —谷歌最近宣布的用于情感分类股票新闻情感提取的迁移学习的 NLP 方法。
  4. 傅立叶变换 —除了每日收盘价之外,我们还将创建傅立叶变换,以便概括几个长期和短期趋势。使用这些变换,我们将消除大量噪声(随机游走),并创建真实股票运动的近似值。拥有趋势近似值可以帮助 LSTM 网络更准确地选择其预测趋势。
  5. 自回归综合移动平均法(ARIMA)——这是预测时间序列数据未来值最流行的技术之一(在神经网络出现之前的时代)。让我们添加它,看看它是否是一个重要的预测特征。
  6. ****堆叠式自动编码器——前面提到的大多数特性(基本面分析、技术分析等)都是人们经过几十年的研究发现的。但也许我们遗漏了什么。也许由于大量的数据点、事件、资产、图表等,人们无法理解隐藏的相关性。通过堆叠式自动编码器(一种神经网络),我们可以利用计算机的力量,或许可以找到影响股票走势的新型特征。即使我们无法理解人类语言中的这些特征,我们也会在 GAN 中使用它们。
  7. ****深度无监督学习用于期权定价中的异常检测。我们将使用另一个功能—每天我们将添加高盛股票 90 天看涨期权的价格。期权定价本身就结合了很多数据。期权合约的价格取决于股票的未来价值(分析师也试图预测价格,以便得出看涨期权的最准确价格)。利用深度无监督学习(自组织地图),我们将试图发现每天定价中的异常。异常(如价格的剧烈变化)可能表示对 LSTM 了解整体股票模式有用的事件。

接下来,有了这么多特性,我们需要执行几个重要步骤:

  1. 对数据的“质量”进行统计检查。如果我们创建的数据是有缺陷的,那么无论我们的算法多么复杂,结果都不会是正面的。检查包括确保数据没有异方差、多重共线性或序列相关性。
  2. 创建功能重要性。如果一个特征(例如另一只股票或技术指标)对我们想要预测的股票没有解释力,那么我们就没有必要在神经网络的训练中使用它。我们将使用 XGBoost (极端梯度提升),一种提升树回归算法。

作为我们数据准备的最后一步,我们还将使用主成分分析( PCA )创建特征组合,以减少自动编码器创建的特征的维度。

print('There are {} number of days in the dataset.'.format(dataset_ex_df.shape[0]))**output** >>> There are 2265 number of days in the dataset.

让我们想象一下过去九年的股票。垂直虚线表示训练数据和测试数据之间的分离。

Goldman Sachs stock price (NYSE:GS)

2.1.相关资产

如前所述,我们将使用其他资产作为特性,而不仅仅是 GS。

那么还有哪些资产会影响 GS 的股票走势呢?对公司、其业务线、竞争格局、依赖关系、供应商和客户类型等的良好理解对于选择正确的相关资产非常重要:

  • 首先是类似 GS 的公司。我们将把摩根大通和摩根士丹利等公司加入数据集。
  • 作为一家投资银行,高盛依赖于全球经济。糟糕或动荡的经济意味着没有并购或 IPO,自营交易收入可能有限。这就是为什么我们将包括全球经济指数。此外,我们将包括 LIBOR(美元和英镑计价)利率,因为分析师可能会考虑经济中的冲击来设定这些利率,以及其他 FI 证券。
  • 每日波动指数(VIX)——原因如上所述。
  • ****综合指数——如纳斯达克和纽约证券交易所(来自美国)、富时 100(英国)、日经 225(日本)、恒生和 BSE Sensex (APAC)指数。
  • 货币 —全球贸易在很多时候反映在货币的变动上,因此我们将使用一篮子货币(如美元、日元、GBPUSD 等)作为特征。

总的来说,数据集中还有 72 项其他资产——每项资产的每日价格。

2.2.技术指标

我们已经讨论了什么是技术指标,以及我们为什么使用它们,所以让我们直接跳到代码。我们将仅为 GS 创建技术指标。

""" Function to create the technical indicators """def get_technical_indicators(dataset):
    # Create 7 and 21 days Moving Average
    dataset['ma7'] = dataset['price'].rolling(window=7).mean()
    dataset['ma21'] = dataset['price'].rolling(window=21).mean()

    # Create MACD
    dataset['26ema'] = pd.ewma(dataset['price'], span=26)
    dataset['12ema'] = pd.ewma(dataset['price'], span=12)
    dataset['MACD'] = (dataset['12ema']-dataset['26ema'])# Create Bollinger Bands
    dataset['20sd'] = pd.stats.moments.rolling_std(dataset['price'],20)
    dataset['upper_band'] = dataset['ma21'] + (dataset['20sd']*2)
    dataset['lower_band'] = dataset['ma21'] - (dataset['20sd']*2)

    # Create Exponential moving average
    dataset['ema'] = dataset['price'].ewm(com=0.5).mean()

    # Create Momentum
    dataset['momentum'] = dataset['price']-1

    return dataset

所以我们有每个交易日的技术指标(包括 MACD,布林线等)。我们总共有 12 个技术指标。

让我们想象一下这些指标过去 400 天的情况。

Technical indicators for Goldman Sachs — last 400 days.

2.3.基本面分析

对于基本面分析,我们将对所有关于高盛的每日新闻进行情绪分析。在末尾使用 sigmoid,结果将介于 0 和 1 之间。分数越接近 0,消息越负面(接近 1 表示情绪积极)。对于每一天,我们将创建平均每日得分(0 到 1 之间的数字),并将其作为一个特性添加。

2.3.1.来自变压器的双向嵌入表示— BERT

为了将新闻分类为正面或负面(或中性),我们将使用 BERT ,这是一种预先训练好的语言表示。

MXNet/Gluon 中已经提供了预训练的 BERT 模型。我们只需要实例化它们,添加两个(任意数量)Dense层,去 soft max——分数从 0 到 1。

import bert

深入 BERT 和 NLP 部分的细节不在本笔记本的范围之内,但是如果您有兴趣,请告诉我——我将只为 BERT 创建一个新的 repo,因为它在语言处理任务方面肯定非常有前途。

2.4.用于趋势分析的傅立叶变换

****傅立叶变换取一个函数并创建一系列正弦波(具有不同的振幅和帧)。当组合在一起时,这些正弦波近似于原始函数。从数学角度来说,变换看起来像这样:

我们将使用傅立叶变换来提取 GS 股票的全局和局部趋势,并对其进行一点降噪处理。所以让我们看看它是如何工作的。

""" Code to create the Fuorier trasfrom  """data_FT = dataset_ex_df[['Date', 'GS']]
close_fft = np.fft.fft(np.asarray(data_FT['GS'].tolist()))
fft_df = pd.DataFrame({'fft':close_fft})
fft_df['absolute'] = fft_df['fft'].apply(lambda x: np.abs(x))
fft_df['angle'] = fft_df['fft'].apply(lambda x: np.angle(x))
plt.figure(figsize=(14, 7), dpi=100)
fft_list = np.asarray(fft_df['fft'].tolist())
for num_ in [3, 6, 9, 100]:
    fft_list_m10= np.copy(fft_list); fft_list_m10[num_:-num_]=0
    plt.plot(np.fft.ifft(fft_list_m10), label='Fourier transform with {} components'.format(num_))
plt.plot(data_FT['GS'],  label='Real')
plt.xlabel('Days')
plt.ylabel('USD')
plt.title('Figure 3: Goldman Sachs (close) stock prices & Fourier transforms')
plt.legend()
plt.show()

Figure 3: Fourier transform of Goldman Sachs Stock

如图 3 所示,我们使用的傅立叶变换成分越多,逼近函数就越接近真实的股票价格(100 成分变换几乎与原始函数相同,红线和紫线几乎重叠)。我们使用傅立叶变换来提取长期和短期趋势,因此我们将使用具有 3、6 和 9 个分量的变换。您可以推断,具有 3 个组件的转换是长期趋势。

另一种用于数据去噪的技术叫做小波。小波和傅立叶变换给出了相似的结果,所以我们将只使用傅立叶变换。

2.5.ARIMA 是一个特色

ARIMA 是一种预测时间序列数据的技术。我们将展示如何使用它,虽然 ARIMA 不会作为我们的最终预测,但我们将使用它作为一种技术来降低股票的噪声,并(可能)提取一些新的模式或特征。

ARIMA on Goldman Sachs stock

error = mean_squared_error(test, predictions)
print('Test MSE: %.3f' % error)**output** >>> Test MSE: 10.151

正如我们从图 5 中看到的,ARIMA 给出了真实股票价格的一个非常好的近似值。我们将使用 ARIMA 的预测价格作为 LSTM 的输入特征,因为正如我们之前提到的,我们希望尽可能多地捕捉高盛的特征和模式。我们测试的 MSE(均方误差)为 10.151,这本身是一个不错的结果(考虑到我们确实有大量的测试数据),但我们仍然只将它作为 LSTM 的一个特征。

2.6.统计检查

确保数据具有良好的质量对于我们的模型非常重要。为了确保我们的数据是合适的,我们将执行几项简单的检查,以确保我们获得和观察到的结果是真实的,而不是由于基础数据分布存在基本错误而受到损害。

2.6.1.异方差,多重共线性,序列相关

  • ****条件异方差出现在误差项(回归预测值与真实值之间的差异)依赖于数据时,例如,当数据点(沿 x 轴)增长时,误差项也会增长。
  • ****多重共线性是指误差项(也称为残差)相互依赖。
  • ****序列相关是指一个数据(特征)是另一个特征的公式(或完全依赖于另一个特征)。

我们不会在这里深入代码,因为它很简单,我们的重点更多地是在深度学习部分,,但数据是定性的

2.7.特征工程

print('Total dataset has {} samples, and {} features.'.format(dataset_total_df.shape[0],                                                          dataset_total_df.shape[1]))**output** >>> Total dataset has 2265 samples, and 112 features.

因此,在添加了所有类型的数据(相关资产、技术指标、基本面分析、傅立叶和 Arima)后,我们在 2,265 天中共有 112 个特征(然而,如前所述,只有 1,585 天用于训练数据)。

我们还将有更多的自动编码器生成的功能。

2.7.1.XGBoost 的特性重要性

有这么多的特征,我们不得不考虑是否所有的特征都真正预示了 GS 股票的走向。例如,我们在数据集中包括了以美元计价的伦敦银行同业拆放利率,因为我们认为伦敦银行同业拆放利率的变化可能表明经济的变化,而经济的变化又可能表明高盛股票行为的变化。但是我们需要测试。有许多方法可以测试特性的重要性,但是我们将应用的方法使用 XGBoost,因为它在分类和回归问题上都给出了最好的结果。

由于要素数据集非常大,因此出于演示的目的,我们将仅使用技术指标。在真实特性重要性测试期间,所有选择的特性都被证明有些重要,所以我们在训练 GAN 时不会排除任何东西。

regressor = xgb.XGBRegressor(gamma=0.0,n_estimators=150,base_score=0.7,colsample_bytree=1,learning_rate=0.05)xgbModel = regressor.fit(X_train_FI,y_train_FI, eval_set = [(X_train_FI, y_train_FI), (X_test_FI, y_test_FI)], verbose=False)fig = plt.figure(figsize=(8,8))
plt.xticks(rotation='vertical')
plt.bar([i for i in range(len(xgbModel.feature_importances_))], xgbModel.feature_importances_.tolist(), tick_label=X_test_FI.columns)
plt.title('Figure 6: Feature importance of the technical indicators.')
plt.show()

Feature importance using XGBoost

毫不奇怪(对于那些有股票交易经验的人来说), MA7、MACD 和 BB 是重要的特征。

我遵循相同的逻辑对整个数据集执行特征重要性分析——只是与少数特征相比,训练时间更长,结果更难阅读。

2.8.使用堆叠自动编码器提取高级特征

在我们进入自动编码器之前,我们将探索另一种激活功能。

2.8.1.激活函数— GELU(高斯误差)

格律 —高斯误差线性单元最近被提出——环节。在论文中,作者展示了使用 GELU 的神经网络优于使用 ReLU 作为激活的网络的几个实例。gelu也用于 BERT ,我们用于新闻情感分析的 NLP 方法。

我们将使用 GELU 作为自动编码器。

****注:下面的单元格显示了 GELU 数学背后的逻辑。它不是作为激活函数的实际实现。我必须在 MXNet 中实现 GELU。如果你按照代码把act_type='relu'改成act_type='gelu'它就不会工作,除非你改变 MXNet 的实现。对整个项目发出一个 pull 请求,以访问 GELU 的 MXNet 实现。

我们把GELUReLULeakyReLU形象化一点(最后一个主要用在 GANs——我们也用)。

def gelu(x):
    return 0.5 * x * (1 + math.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * math.pow(x, 3))))def relu(x):
    return max(x, 0)
def lrelu(x):
    return max(0.01*x, x)plt.figure(figsize=(15, 5))
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=.5, hspace=None)ranges_ = (-10, 3, .25)plt.subplot(1, 2, 1)
plt.plot([i for i in np.arange(*ranges_)], [relu(i) for i in np.arange(*ranges_)], label='ReLU', marker='.')
plt.plot([i for i in np.arange(*ranges_)], [gelu(i) for i in np.arange(*ranges_)], label='GELU')
plt.hlines(0, -10, 3, colors='gray', linestyles='--', label='0')
plt.title('Figure 7: GELU as an activation function for autoencoders')
plt.ylabel('f(x) for GELU and ReLU')
plt.xlabel('x')
plt.legend()plt.subplot(1, 2, 2)
plt.plot([i for i in np.arange(*ranges_)], [lrelu(i) for i in np.arange(*ranges_)], label='Leaky ReLU')
plt.hlines(0, -10, 3, colors='gray', linestyles='--', label='0')
plt.ylabel('f(x) for Leaky ReLU')
plt.xlabel('x')
plt.title('Figure 8: LeakyReLU')
plt.legend()plt.show()

Comparison of GELU, ReLU, and LeakyReLU

****注:在这款笔记本的未来版本中,我将尝试使用 U-Net ( link ),并尝试利用卷积层,提取(并创建)更多关于股票基本运动模式的特征。现在,我们将只使用一个简单的由Dense层组成的自动编码器。

好的,回到自动编码器,如下图所示(该图只是示意性的,并不代表真实的层数、单位等。)

****注意:我将在以后的版本中探索的一件事是移除解码器中的最后一层。通常,在自动编码器中,编码器的数量==解码器的数量。然而,我们希望提取更高级别的特征(而不是创建相同的输入),因此我们可以跳过解码器中的最后一层。我们通过在训练期间创建具有相同层数的编码器和解码器来实现这一点,但是当我们创建输出时,我们使用唯一一个层旁边的层,因为它将包含更高级别的特征。

自动编码器的完整代码可以在附带的 Github——顶部的链接中找到。

我们从 autoencoder 中创建了 112 个新功能。由于我们只想要高层次的特征(整体模式),我们将使用主成分分析(PCA)在新创建的 112 个特征上创建一个特征组合。这将减少数据的维度(列数)。特征组合的描述能力将与最初的 112 个特征相同。

****注意同样,这纯粹是实验性的。我不能 100%确定所描述的逻辑是否成立。正如 AI 和深度学习中的其他事情一样,这是艺术,需要实验。

3.生成对抗网络

Architecture of GANs

GANs 是如何工作的?

如前所述,这本笔记本的目的不是详细解释深度学习背后的数学,而是展示其应用。当然,在我看来,从基础到最小的细节都要有透彻、扎实的理解。因此,我们将试图平衡并给出一个高层次的 GANs 如何工作的概述,以便读者充分理解使用 GANs 预测股价运动背后的基本原理。如果您对 GANs 有经验,请随意跳过这一节和下一节(并检查第 4.2 节)。)。

GAN 网络由两个模块组成——一个发生器** (G)和一个鉴别器 (D)。训练 GAN 的步骤如下:**

  1. 生成器使用随机数据(噪声表示为 z )试图“生成”与真实数据不可区分或极其接近的数据。其目的是了解真实数据的分布。
  2. 随机地,真实的或生成的数据被放入鉴别器,鉴别器充当分类器并试图理解数据是来自生成器还是真实的数据。d 估计引入样本对真实数据集的(分布)概率。(第 3.2 节中有更多关于比较两种分布的信息。下面)。
  3. 然后,来自 G 和 D 的损耗被合并,并通过发电机传播回来。因此,发电机的损耗取决于发电机和鉴频器。这是帮助生成器了解真实数据分布的步骤。如果生成器在生成真实数据(具有相同的分布)方面做得不好,鉴别器的工作将很容易区分从真实数据集生成的数据。因此,鉴频器的损耗将非常小。较小的鉴频器损耗将导致较大的发电机损耗(见下面的等式 L(D,G))。这使得创建鉴别器有点棘手,因为太好的鉴别器总是会导致巨大的发电机损失,使发电机无法学习。
  4. 该过程继续进行,直到鉴别器不再能够区分生成的数据和真实的数据。

当组合在一起时,d 和 g 有点像在玩一个最小最大游戏(生成器试图愚弄鉴别器,使其增加假样本的概率,即最小化𝔼z∼pz(z)[log(1−D(G(z)))].)鉴别器希望通过最大化𝔼x∼pr(x)[logD(x)].来分离来自发生器 D(G(z))的数据然而,在分离损失函数之后,还不清楚两者如何能够收敛在一起(这就是为什么我们在普通 GAN 上使用一些改进,例如 Wasserstein GAN)。总的来说,组合损失函数看起来像:

****注意:真正有用的训练 GANs 的小技巧可以在这里找到。

****注意:我不会在这个笔记本中包括 GAN强化学习部分后面的完整代码——只会显示执行的结果(单元输出)。作出拉请求或联系我的代码。

3.1.甘为什么要进行股市预测

生成性对抗网络 (GAN)最近主要用于创建现实图像、绘画和视频剪辑。在我们的案例中,用于预测时间序列数据的 GANs 应用并不多。然而,主要思想应该是相同的——我们想要预测未来的股票走势。未来,GS 股票的模式和行为应该或多或少是一样的(除非它开始以完全不同的方式运作,或者经济发生剧烈变化)。因此,我们希望为未来“生成”与我们已经拥有的数据(历史交易数据)具有相似(当然不是绝对相同)分布的数据。所以,理论上,这应该行得通。

在我们的例子中,我们将使用 LSTM 作为时间序列发生器,使用 CNN 作为鉴别器。

3.2.大都会-黑斯廷斯甘和瓦瑟斯坦甘

注意: 接下来的几节假设有一些关于 GANs 的经验。

一.大都会-黑斯廷斯甘

优步的工程团队最近对传统 GANs 进行了改进,称为Metropolis-Hastings GAN(MHGAN)。优步方法背后的想法(正如他们所说)有点类似于谷歌和加州大学伯克利分校创建的另一种方法,称为鉴别器拒绝采样** ( DRS )。基本上,当我们训练 GAN 时,我们使用鉴别器(D)的唯一目的是更好地训练发生器(G)。通常,在训练完 GAN 之后,我们就不再使用 D 了。而 MHGAN 和 DRS 为了选择由 G 生成的接近真实数据分布的样本,都尽量使用 D(两者略有不同的是,MHGAN 使用马尔可夫链蒙特卡罗( MCMC )进行采样)。**

MHGAN 获取从 G 产生的 K 个样本(从独立的噪声输入到 G 产生,如下图中的 z0 至 zK)。然后,它依次通过 K 输出(x’0 至 x’K ),并遵循一个接受规则(由鉴别器创建)决定是接受当前样本还是保留上一个接受的样本。最后保存的输出被认为是 g 的真实输出。

: MHGAN 最初由优步在 pytorch 中实现。我只把它转入 MXNet/Gluon。

注:我也将很快上传到 Github。

图 10:MHGAN 的可视化表示(来自最初的优步邮报)。

二。瓦瑟斯坦·甘

训练 GANs 相当困难。模型可能永远不会收敛,模式崩溃很容易发生。我们将使用 GAN 的一个变体,称为wasser steinGAN—WGAN

同样,我们不会深入讨论细节,但最值得注意的几点是:

  • 正如我们所知,GANs 背后的主要目标是让生成器开始将随机噪声转换成我们想要模拟的一些给定数据。因此,在 GANs 中,比较两个分布之间的相似性是非常必要的。两个最广泛使用的此类指标是:
  • ****KL 散度(kull back–lei bler)—DKL(p‖q)=∫XP(x)logp(x)q(x)dx。当 p(x)等于 q(x)时 dk1 为零,
  • ****JS 发散(詹森-香农)。JS 散度以 0 和 1 为界,与 KL 散度不同,它是对称的,更平滑。当损失从 KL 切换到 JS 发散时,GAN 训练取得了重大成功。
  • WGAN 使用瓦瑟斯坦距离,w(pr,pg)=1ksup‖f‖l≤k𝔼x∼pr[f(x)]−𝔼x∼pg[f(x】(其中 sup 代表上确界)作为损失函数(也称为推土机距离,因为它通常被解释为将一堆沙子移动到另一堆,两堆沙子具有不同的概率分布,在转换过程中使用最小能量)。与 KL 和 JS 背离相比,Wasserstein 度量给出了平滑的度量(没有背离的突然跳跃)。这使得它更适合在梯度下降期间创建稳定的学习过程。
  • 此外,与 KLJS 相比,瓦瑟斯坦距离几乎在任何地方都是可微的。如我们所知,在反向传播过程中,我们对损失函数进行微分,以创建梯度,梯度进而更新权重。因此,拥有一个可微的损失函数是非常重要的。

毫无疑问,这是这个笔记本最难的部分。混合 WGAN 和 MHGAN 花了我三天时间。

3.4.发电机——一层 RNN

3.4.1.LSTM 还是 GRU

如前所述,生成器是 LSTM 网络一种类型的递归神经网络(RNN)。rnn 用于时间序列数据,因为它们跟踪所有以前的数据点,并可以捕捉随时间发展的模式。由于它们的性质,rnn 很多时候会遭受消失梯度——也就是说,在训练期间接收到的权重变化变得如此之小,以至于它们不会改变,使得网络无法收敛到最小损失(有时也会观察到相反的问题——当梯度变得太大时)。这被称为渐变爆炸,但解决方案非常简单——如果渐变开始超过某个常数,就对其进行剪辑,即渐变剪辑)。两种修改解决了这个问题——门控循环单元( GRU )和长短期记忆( LSTM )。两者最大的区别是:1) GRU 有 2 个门(更新和复位),LSTM 有 4 个门(更新、输入、忘记和输出),2) LSTM 保持内部存储状态,而 GRU 没有,3) LSTM 在输出门之前应用了一个非线性(sigmoid),GRU 没有。

在大多数情况下,LSTM 和 GRU 在准确性方面给出了相似的结果,但 GRU 的计算强度要小得多,因为 GRU 的可训练参数要少得多。然而,LSTMs 使用得更多。

严格地说,LSTM 细胞(门)背后的数学是:

The math behind the LSTM cell

其中⊙是逐元素乘法运算符,对于所有 x=[x1,x2,…,xk]⊤∈R^k,两个激活函数:,

3.4.2.LSTM 建筑

LSTM 架构非常简单,一个LSTM层有 112 个输入单元(因为我们在数据集中有 112 个要素)和 500 个隐藏单元,一个Dense层有 1 个输出-每天的价格。初始化器是 Xavier,我们将使用 L1 损失(这是使用 L1 正则化的平均绝对误差损失——参见第 3.4.5 节。了解更多关于正规化的信息)。

注意 —在代码中你可以看到我们使用Adam(带有. 01 的learning rate)作为优化器。现在不要太关注这个——有一节专门解释我们使用什么超参数(学习率被排除在外,因为我们有学习率调度程序——3 . 4 . 3 节。)以及我们如何优化这些超参数-第 3.6 节。

gan_num_features = dataset_total_df.shape[1]
sequence_length = 17class RNNModel(gluon.Block):
    def __init__(self, num_embed, num_hidden, num_layers, bidirectional=False, sequence_length=sequence_length, **kwargs):
        super(RNNModel, self).__init__(**kwargs)
        self.num_hidden = num_hidden
        with self.name_scope():
            self.rnn = rnn.LSTM(num_hidden, num_layers, input_size=num_embed, bidirectional=bidirectional, layout='TNC')
            self.decoder = nn.Dense(1, in_units=num_hidden)

    def forward(self, inputs, hidden):
        output, hidden = self.rnn(inputs, hidden)
        decoded = self.decoder(output.reshape((-1,self.num_hidden)))
        return decoded, hidden

    def begin_state(self, *args, **kwargs):
        return self.rnn.begin_state(*args, **kwargs)

lstm_model = RNNModel(num_embed=gan_num_features, num_hidden=500, num_layers=1)
lstm_model.collect_params().initialize(mx.init.Xavier(), ctx=mx.cpu())
trainer = gluon.Trainer(lstm_model.collect_params(), 'adam', {'learning_rate': .01})
loss = gluon.loss.L1Loss()

我们将在 LSTM 层使用 500 个神经元,并使用 Xavier 初始化。为了规范化,我们将使用 L1。让我们看看 MXNet 打印的LSTM里面有什么。

print(lstm_model)**output** >>>RNNModel(
   (rnn): LSTM(112 -> 500, TNC)
   (decoder): Dense(500 -> 1, linear)
)

正如我们所看到的,LSTM 的输入是 112 个特征(dataset_total_df.shape[1]),然后进入 LSTM 层的 500 个神经元,然后转换成单一输出——股票价格值。

LSTM 背后的逻辑是:我们获取 17 天(sequence_length)的数据(同样,数据是 GS 股票每天的股价+当天的所有其他特征——相关资产、情绪等。)并尝试预测第 18 天。然后,我们将 17 天窗口移动一天,再次预测第 18 天。我们像这样在整个数据集上迭代(当然是分批的)。

在另一篇文章中,我将探讨修改香草 LSTM 是否更有益,例如:

  • 使用双向** LSTM 层——理论上,回溯(从数据集的末尾向开始)可能会在某种程度上帮助 LSTM 找出股票运动的模式。**
  • 使用堆叠** RNN 架构——不止一层 LSTM,而是两层或更多层。然而,这可能是危险的,因为我们可能会过度拟合模型,因为我们没有很多数据(我们只有 1585 天的数据)。**
  • 探索GRU——正如已经解释过的,格鲁的细胞要简单得多。
  • 注意力向量添加到 RNN。

3.4.3.学习率调度程序

最重要的超参数之一是学习率。在训练神经网络时,为几乎每个优化器(如 SGDAdamRMSProp )设置学习率至关重要,因为它控制收敛速度和网络的最终性能。最简单的学习率策略之一是在整个训练过程中保持固定的学习率。选择小的学习速率允许优化器找到好的解决方案,但是这是以限制初始收敛速度为代价的。随着时间的推移改变学习率可以克服这种权衡。

最近的论文,如一篇,显示了在训练期间改变全局学习率在收敛和时间方面的好处。让我们画出每个时期的学习率。

schedule = CyclicalSchedule(TriangularSchedule, min_lr=0.5, max_lr=2, cycle_length=500)
iterations=1500plt.plot([i+1 for i in range(iterations)],[schedule(i) for i in range(iterations)])
plt.title('Learning rate for each epoch')
plt.xlabel("Epoch")
plt.ylabel("Learning Rate")
plt.show()

3.4.4.如何防止过度拟合和偏差-方差权衡

拥有大量的特征和神经网络,我们需要确保防止过度拟合,并注意总损失。

我们使用几种技术来防止过度拟合(不仅在 LSTM,而且在 CNN 和自动编码器中):

  • ****保证数据质量。我们已经执行了统计检查,并确保数据不会出现多重共线性或序列自相关。此外,我们对每个特性进行了特性重要性检查。最后,初始特征选择(例如,选择相关资产、技术指标等。)是用一些关于股票市场运作方式背后的机制的领域知识完成的。
  • ****正规化(或加重处罚)。最广泛使用的两种正则化技术是套索(【L1】)和岭(【L2】)。L1 增加了平均绝对误差,L2 增加了损失的均方误差。在不涉及太多数学细节的情况下,基本区别是:套索回归(L1)进行变量选择和参数收缩,而岭回归只进行参数收缩,并最终包括模型中的所有系数。在存在相关变量的情况下,岭回归可能是首选。此外,岭回归在最小二乘估计具有较高方差的情况下效果最好。因此,这取决于我们的模型目标。这两种正规化的影响大不相同。虽然它们都不利于大的权重,但是 L1 正则化导致在零处的不可微函数。L2 正则化倾向于较小的权重,但是 L1 正则化倾向于趋于零的权重。因此,通过 L1 正则化,你可以得到一个稀疏模型——一个参数更少的模型。在两种情况下,L1 和 L2 正则化模型的参数“收缩”,但是在 L1 正则化的情况下,收缩直接影响模型的复杂性(参数的数量)。准确地说,岭回归在最小二乘估计具有较高方差的情况下效果最好。L1 对异常值更稳健,在数据稀疏时使用,并创建要素重要性。我们将使用 L1。
  • ****辍学。丢弃层随机删除隐藏层中的节点。
  • ****密-疏-密训练。— 链接
  • ****提前停止

构建复杂神经网络时的另一个重要考虑是偏差-方差权衡。基本上,我们在训练网络时得到的误差是偏差、方差和不可约误差——σ(噪声和随机性引起的误差)的函数。最简单的权衡公式是:Error=bias^2+variance+σ.

  • ****偏置。偏差衡量一个经过训练(在训练数据集上)的算法对看不见的数据进行归纳的能力。高偏差(拟合不足)意味着模型不能很好地处理看不见的数据。
  • ****差异。方差衡量模型对数据集中变化的敏感度。高方差是过度拟合。

3.5.鉴别器——一维 CNN

4.5.1.为什么 CNN 是一个歧视者?

我们通常使用 CNN 进行与图像相关的工作(分类、上下文提取等)。他们非常擅长从特征中提取特征,等等。例如,在一幅狗的图像中,第一个卷积层将检测边缘,第二个卷积层将开始检测圆,第三个卷积层将检测鼻子。在我们的例子中,数据点形成小趋势,小趋势形成大趋势,趋势反过来形成模式。CNN 检测特征的能力可以用来提取关于 GS 股票价格运动模式的信息。

使用 CNN 的另一个原因是,CNN 在空间数据上工作得很好,这意味着相互靠近的数据点比分散的数据点更相关。这应该适用于时间序列数据。在我们的例子中,每个数据点(对于每个特征)都是连续的一天。人们很自然地认为,两天之间的距离越近,它们之间的关联就越大。需要考虑的一件事(虽然没有包括在本书中)是季节性以及它如何改变 CNN 的工作。

****注意:和本笔记本中的许多其他部分一样,使用 CNN 获取时间序列数据是实验性的。我们将检查结果,但不提供数学或其他证明。并且使用不同的数据、激活函数等,结果可能不同。

3.5.1.CNN 架构

The architecture of the proposed CNN model.

不需要看完整的代码,我们只显示 MXNet 打印的 CNN。

Sequential(
   (0): Conv1D(None -> 32, kernel_size=(5,), stride=(2,)) 
   (1): LeakyReLU(0.01) 
   (2): Conv1D(None -> 64, kernel_size=(5,), stride=(2,)) 
   (3): LeakyReLU(0.01) 
   (4): BatchNorm(axis=1, eps=1e-05, momentum=0.9, fix_gamma=False, use_global_stats=False, in_channels=None) 
   (5): Conv1D(None -> 128, kernel_size=(5,), stride=(2,)) 
   (6): LeakyReLU(0.01) 
   (7): BatchNorm(axis=1, eps=1e-05, momentum=0.9, fix_gamma=False, use_global_stats=False, in_channels=None) 
   (8): Dense(None -> 220, linear) 
   (9): BatchNorm(axis=1, eps=1e-05, momentum=0.9, fix_gamma=False, use_global_stats=False, in_channels=None) 
   (10): LeakyReLU(0.01) 
   (11): Dense(None -> 220, linear) 
   (12): Activation(relu) 
   (13): Dense(None -> 1, linear) 
)

3.6.超参数

我们将跟踪和优化的超参数有:

  • batch_size:LSTM 和 CNN 的批量
  • cnn_lr:CNN 的学习率
  • strides:CNN 的大步数
  • lrelu_alpha:GAN 中 LeakyReLU 的 alpha
  • batchnorm_momentum:CNN 批量正常化的势头
  • padding:CNN 中的填充
  • kernel_size':1:CNN 中的内核大小
  • dropout:LSTM 辍学
  • filters:过滤器的初始数量

我们将培训 200 多名epochs

4.超参数优化

在 GAN 在 200 个历元上训练之后,它将记录 MAE(这是 LSTM GG 中的误差函数),并将其作为奖励值传递给强化学习,强化学习将决定是否改变超参数,以保持用相同的超参数集训练。如后所述,这种方法严格用于 RL 实验。

如果 RL 决定它将更新超参数,它将调用贝叶斯优化(下面讨论)库,该库将给出超参数的下一个最佳预期集合

4.1.超参数优化的强化学习

为什么我们在超参数优化中使用强化学习?股票市场一直在变化。即使我们设法训练我们的 GAN 和 LSTM 产生极其精确的结果,这些结果也可能只在一定时期内有效。也就是说,我们需要不断优化整个流程。为了优化流程,我们可以:

  • 添加或删除功能(例如,添加可能相关的新股票或货币)
  • 改进我们的深度学习模型。改进模型的最重要的方法之一是通过超参数(在第 5 节中列出)。一旦找到某个超参数集,我们需要决定何时改变它们,何时使用已知的超参数集(探索与开发)。此外,股票市场代表了一个依赖于数百万个参数的连续空间。

****注:本笔记本整个强化学习部分的目的更多的是研究导向。我们将使用 GAN 作为环境来探索不同的 RL 方法。有许多方法可以在不使用 RL 的情况下,成功地对我们的深度学习模型执行超参数优化。但是…为什么不呢。

****注意:接下来的几节假设你对 RL 有一些了解——尤其是政策方法和 Q-learning。

4.1.1.强化学习理论

在不解释 RL 的基础知识的情况下,我们将跳转到我们在这里实现的具体方法的细节。我们将使用无模型 RL 算法,原因很明显,我们不知道整个环境,因此对于环境如何工作没有定义的模型——如果有,我们不需要预测股票价格的运动——它们只会遵循模型。我们将使用无模型强化学习的两个分支——策略优化和 Q 学习。

  • Q-学习 —在 Q-学习中,我们学习从给定状态采取行动的Q 值是采取行动后的预期收益。我们将使用 Rainbow ,它是七种 Q 学习算法的组合。
  • 策略优化 —在策略优化中,我们学习从给定状态采取的行动。(如果我们使用像演员/评论家这样的方法)我们也知道处于特定状态的价值。我们将使用近似策略优化

构建 RL 算法的一个关键方面是准确设置奖励。它必须捕捉环境的所有方面以及代理与环境的交互。我们将奖励 R 定义为:

reward = 2∫lossG+lossD+accuracy g,

其中,lossG、accuracyG 和 lossD 分别是发生器的损耗和精度,以及鉴频器的损耗。环境是训练的结果。不同代理可以采取的行动是如何改变 GAN 的 D 和 G 网络的超参数。****

4.1.1.1.彩虹

彩虹是什么?

Rainbow ( link )是一种基于 Q 学习的非策略深度强化学习算法,结合了七种算法:

  • DQN 。DQN 是 Q 学习算法的扩展,它使用神经网络来表示 Q 值。与监督(深度)学习类似,在 DQN,我们训练一个神经网络,并试图最小化损失函数。我们通过随机抽样转换(状态、动作、奖励)来训练网络。例如,这些层不仅可以是全连接的,也可以是卷积的。
  • 双 Q 学习。双 QL 处理了 Q 学习中的一个大问题,即高估偏差。
  • 优先重放。在传统的 DQN 中,所有的转换都存储在一个重放缓冲区中,并对该缓冲区进行统一采样。然而,在学习阶段,并非所有的过渡都同样有益(这也使得学习效率低下,因为需要更多的片段)。优先体验重放并不统一采样,而是使用一种分布,为在先前迭代中具有较高 Q 损失的样本提供较高的概率。
  • 决斗网络。决斗网络通过使用两个独立的流(即具有两个不同的迷你神经网络)稍微改变了 Q 学习架构。一个流是价值流,一个流是优势流。两者共用一个卷积编码器。棘手的部分是流的合并——它使用了一种特殊的聚合器(王等人 2016 )。**

**(优点,公式为 A(s,a)=Q(s,A)—V(s),一般来说就是一个动作相对于特定状态下的平均动作有多好的比较。当一个“错误”的行为不能用负面奖励来惩罚时,优势有时会被使用。所以优势会尝试进一步奖励普通行为中的好行为。)

  • 多步学习。多步学习背后的巨大差异是,它使用 N 步回报(不仅仅是下一步的回报)来计算 Q 值,这自然应该更准确。
  • 分布式 RL 。Q 学习使用平均估计 Q 值作为目标值。然而,在许多情况下,不同情况下的 Q 值可能不相同。分布式 RL 可以直接学习(或近似)Q 值的分布,而不是平均它们。同样,数学比这复杂得多,但对我们来说,好处是对 Q 值的采样更准确。
  • 吵网。基本 DQN 实现了一个简单的𝜀-greedy 机制来进行探索。这种探索方法有时效率很低。噪声网络解决这个问题的方法是添加一个噪声线性图层。随着时间的推移,网络将学会如何忽略噪声(作为噪声流添加)。但这种学习在空间的不同部分以不同的速度进行,从而允许状态探索。

注:敬请期待——我将于 2019 年 2 月初在 Rainbow 上上传一个 MXNet/Gluon 实现到 Github。

4.1.1.2.聚苯醚(Polyphenylene Oxide 的缩写)

近似策略优化 ( PPO )是一种无策略优化模型类型的强化学习。实现其他算法要简单得多,并且给出非常好的结果。

我们为什么要用 PPO?PPO 的优势之一是直接学习策略,而不是通过值间接学习(Q 学习使用 Q 值学习策略的方式)。它可以在连续动作空间中很好地工作,这适用于我们的用例,并且可以学习(通过平均值和标准偏差)分布概率(如果 softmax 作为输出被添加)。

政策梯度方法的问题在于,它们对步长的选择极其敏感——如果步长很小,则进展需要很长时间(很可能主要是因为需要二阶导数矩阵);如果它很大,就会有大量噪声,从而显著降低性能。由于政策的变化,输入数据是不稳定的(奖励和观察值的分布也会变化)。与监督学习相比,选择不当的步骤可能更具破坏性,因为它会影响下一次访问的整体分布。PPO 可以解决这些问题。此外,与其他一些方法相比,PPO:

  • 要简单得多,例如与 ACER 相比,ACER 需要额外的代码来保持偏离策略的相关性,还需要一个重放缓冲器,或者与 TRPO 相比,TRPO 对代理目标函数施加了约束(新旧策略之间的 KL 偏差)。此约束用于控制改变太多的策略,这可能会造成不稳定。PPO 通过利用(在[1- 𝜖,1+𝜖]之间)截取的替代目标函数并通过具有太大更新的惩罚来修改目标函数,来减少(由约束产生的)计算。**
  • 与 TRPO 相比,与在价值和策略函数或辅助损失之间共享参数的算法兼容(尽管 PPO 也具有信赖域 PO 的增益)。

注意:出于我们练习的目的,我们不会过多地研究和优化 RL 方法,包括 PPO 和其他方法。相反,我们将利用现有资源,并努力将其融入我们的超参数优化流程,用于我们的CNN 模型。我们将重用和定制的代码是由 OpenAI 创建的,可以在这里获得。****

4.1.2.关于强化学习的进一步工作

进一步探索强化学习的一些想法:

  • 接下来我要介绍的第一件事是使用增强随机搜索 ( 链接)作为替代算法。该算法的作者(来自加州大学伯克利分校)已经成功实现了与其他最先进的方法(如 PPO)类似的奖励结果,但平均速度快 15 倍。
  • 选择奖励函数非常重要。我在上面陈述了当前使用的奖励功能,但是我将尝试使用不同的功能作为替代。
  • 利用好奇号【T21 号】作为探索政策。
  • 按照柏克莱人工智能研究团队(BAIR)的提议,创建多智能体架构——链接

4.2.贝叶斯优化

我们将使用贝叶斯优化,而不是花费大量时间寻找超参数的最佳组合的网格搜索。我们将使用的库已经实现了— link

4.2.1.高斯过程

Gaussian process for Bayesian hyperparameter optimisation

5.结果呢

最后,我们将比较在过程的不同阶段后,将看不见的(测试)数据用作输入时 LSTM 的输出。

  1. 第一个纪元后的情节。
**from utils import plot_predictionplot_prediction('Predicted and Real price - after first epoch.')**

2.50 个时代后的情节。

**plot_prediction('Predicted and Real price - after first 50 epochs.')**

**plot_prediction('Predicted and Real price - after first 200 epochs.')**

RL 运行 10 集(我们将一个时期定义为在 200 个时期上的一个完整的 GAN 训练。)

**plot_prediction('Final result.')**

作为下一步,我将试着把每件事分开,并提供一些关于什么有效以及为什么有效的分析。为什么我们会得到这些结果,这仅仅是巧合吗?敬请关注。

6.下一步是什么?

  • 接下来,我将尝试创建一个 RL 环境,用于测试决定何时以及如何交易的交易算法。来自 GAN 的输出将是环境中的参数之一。

7.放弃

这本笔记本内容丰富。本笔记本中的任何内容都不构成任何特定证券、证券组合、交易或投资策略适合任何特定人士的建议。期货、股票和期权交易涉及大量的损失风险,并不适合每个投资者。期货、股票和期权的估值可能会波动,因此,客户的损失可能会超过其原始投资。

所有交易策略使用风险自担。

在选择数据特征、选择算法、调整算法等方面,还有更多细节需要探索。这个版本的笔记本本身花了我两个星期才完成。我确信这个过程中有许多未回答的部分。所以,任何意见和建议——请分享。我很乐意在当前流程中添加和测试任何想法。

感谢阅读。

最好的,鲍里斯

西雅图的 Airbnb 数据分析

原文:https://towardsdatascience.com/airbnb-in-seattle-data-analysis-8222207579d7?source=collection_archive---------9-----------------------

了解西雅图的 Airbnb 租赁情况

Photo by Sidekix Media on Unsplash

对于所有西雅图的准 Airbnb 房东,我将在本文中回答这些问题:

  • 何时租赁以实现收入最大化?
  • 什么时候是维修的淡季?
  • 西雅图旅行者的常见团队规模,是 2 人或家庭还是 4 人或更大?
  • 最大化预订率的卧室配置?
  • 如何达到一个好的评分?
  • 收视率高的主机收入高吗?
  • 包括哪些便利设施?

获取和准备数据

在本文中,我将对从 Airbnb 内部的获取的 Airbnb 数据集执行探索性数据分析。

获取列表数据

我们的数据将被加载到 pandas 中,逗号分隔值(CSV)文件可以通过read_csv函数轻松加载到 DataFrame 中。

让我们看看使用pd_listings.head(10)的前 10 行是什么样子的:

并用pd_listings.describe()查看数字数据的汇总:

观察结果:

  • 此数据集中有 3813 个列表
  • 价格列中的值包含美元符号($)
  • 浴室卧室中有缺失值
  • 评论评级列中有缺失值(评论分数评级、评论分数准确性、评论分数清洁度、评论分数签入、评论分数交流、评论分数位置、评论分数值)

数据准备

价格栏,这是清单的价格,它包含美元符号($)。我们仍然不能使用它进行分析,因为它不是一个数值,所以我们删除了美元符号,并将值转换为数值:

pd_listings['price'] = pd_listings['price'].str.replace("[$, ]", "").astype("float")

然后用零替换这些空值:

pd_listings.at[pd_listings['bathrooms'].isnull(), 'bathrooms'] = 0
pd_listings.at[pd_listings['bedrooms'].isnull(), 'bedrooms'] = 0
pd_listings.at[pd_listings['beds'].isnull(), 'beds'] = 0pd_listings.at[pd_listings['review_scores_rating'].isnull(), 'review_scores_rating'] = 0
pd_listings.at[pd_listings['review_scores_accuracy'].isnull(), 'review_scores_accuracy'] = 0
pd_listings.at[pd_listings['review_scores_cleanliness'].isnull(), 'review_scores_cleanliness'] = 0
pd_listings.at[pd_listings['review_scores_checkin'].isnull(), 'review_scores_checkin'] = 0
pd_listings.at[pd_listings['review_scores_communication'].isnull(), 'review_scores_communication'] = 0
pd_listings.at[pd_listings['review_scores_location'].isnull(), 'review_scores_location'] = 0
pd_listings.at[pd_listings['review_scores_value'].isnull(), 'review_scores_value'] = 0

最后,将 id 重命名为 listing_id:

pd_listings.rename(columns={'id':'listing_id'}, inplace=True)

获取评论数据

让我们加载另一个 CSV 文件,其中包含每个列表的评论。数据帧包含以下各列:

  • id —审核的标识号
  • listing _ id——列表的标识号,我们可以将它与上面的数据帧连接起来
  • 日期—审核的日期

计算每个列表的预计收入

我认为每一次点评都是一次成功的预订,客人住了几晚。不幸的是,我们不知道每位客人入住的确切天数,但我们可以使用列表中的minimum_nights,假设每位客人至少入住了最少的天数。对于每次点评,price * minimum_nights获得每次预订的收入:

pd_bookings = pd.merge(pd_reviews, pd_listings, on='listing_id')
pd_bookings['estimated_revenue'] = pd_bookings['price'] * pd_bookings['minimum_nights']

将每个列表的每次预订的收入合计为每个列表的预计收入:

pd_listings_revenue = pd_bookings[['listing_id','estimated_revenue']].groupby(['listing_id']).sum()

并将预计收入合并到现有数据框架中(列表):

pd_listings = pd.merge(pd_listings, pd_listings_revenue, on='listing_id', how='left')pd_listings.at[pd_listings['estimated_revenue'].isnull(), 'estimated_revenue'] = 0

我们已经为一些分析准备好了数据框架。每行代表一个列表、其属性及其估计收入:

开始分析

按街区划分的收入

下表显示了每个街区的平均收入:

市中心、国会山和灯塔山的 Airbnb 房产可以获得最高的收入。是购物和 CBD 区。

市中心、国会山和比肯山的收入最高

一年中的热门时期出租?

了解西雅图一年中最受欢迎的租赁时间会很有用,这样 Airbnb 的主人就能够决定何时租赁以及何时进行维护。

七月、八月和九月是收入最大化的最佳时期。五月前的几个月是维修工作的最佳时间。从 10 月到 12 月是休息和享受假期的好时间,如果他们想的话。

七月、八月和九月是收入最大化的最佳时期。

最高收入列表

以下是估计收入最高的前 5 个列表:

哇!看起来我们的最高收入者是最低夜数为 1000 的主持人。但这可能是数据异常,因为 1000 晚有点极端,所以让我们看看不同 minimum_nights 的列表的比例。(谢谢,辜莞允·乌马西强调了这一点!)

大多数主机有最少一个月的夜数,有 1000 夜的主机,必须过滤掉。

这些是预计收入最高的顶级主机(最少 7 晚)。

这些是预计收入最高的顶级酒店(最少 4 晚)。

从这两张表中可以看出,最短住宿时间越长,收入越高。我们来看看最低夜数预计收入之间的相关性。

以及最低夜数去除 1000 最低夜数的房源后预计收入的相关性。

拥有 1000 个最低夜数的主机已经导致偏向更高的最低夜数,导致更高的收入,在最低夜数收入之间有 87%的相关性。但是在移除该主机之后,最低住宿和估计收入并不高度相关,最低住宿收入之间的相关性为 20%。

最低住宿天数和预计收入并不高度相关

Photo by Kelcie Gene Papp on Unsplash

供求——卧室配置

作为一个 Airbnb 的房东,知道我的房产在市场上是否过饱和会很好。找出不同卧室配置的房源数量(供应)与预订数量(需求)之间的比率:

少于 2 间卧室的房源很受欢迎。

但是等等!没有卧室的房产,这是什么样的房产?

这些房产的床位数是多少?

所有这些没有卧室的房产都出租了整个公寓,而且他们至少提供了一张床。唷~

供应和需求——游客群体配置

作为一个 Airbnb 的主持人,我也很想知道西雅图访客的常见群体规模。从而发现我的物业配置在市场上是否过饱和。

可容纳 14 人的地方排名第一(最高供需比),但与容纳 2 或 3 人的地方相比,预订数量很低(只有 83 个预订)。

为 2 或 3 个人租一个地方会给主人带来相当不错的固定租金。

Photo by Priscilla Du Preez on Unsplash

供应和需求—2 至 3 人的卧室配置

因此,让我们把重点放在 2 到 3 人的租赁物业上,因为超过一半的人会在这种规模的团队中旅行。这些客人喜欢一间卧室还是两间独立的卧室?

适用于 2 人的 Airbnb 卧室配置:

适用于 3 个人的 Airbnb 卧室配置:

大多数人喜欢一间卧室。

大多数人喜欢一居室,不到 1%的人喜欢两居室。所以对于 2 人或 3 人的群体,他们更喜欢 1 间卧室。但这可能是由于目前 2 居室房产的供应量很低。

Photo by Christopher Jolly on Unsplash

哪些因素很重要?

有好的收视率对 Airbnb 的主持人来说很重要。让我们比较不同因素如何影响总体评分:

良好的沟通会影响整体评分和入住率

沟通总体评分的相关性最高。西雅图(也许其他地方也一样)的主人需要反应灵敏、友好,因为良好的沟通往往会获得较高的总体评价。良好的沟通也直接影响签到评分。

拥有良好的总体评级是否意味着上市将带来丰厚的财富?

拥有良好的总体评级与预计收入的正相关性非常小。而且有好的收视率对主持人定的价格几乎没有影响。

但是,强烈建议您获得良好的总体评分。

舒适

这是西雅图提供这些便利设施的机场数量:

互联网、暖气和厨房是西雅图的必需品。

烟雾探测器?我刚刚了解到,自 1973 年以来,华盛顿州建筑法规要求所有住宅安装烟雾探测器。

摘要

所以,下面是这篇文章的摘要:

笔记本

查看本文中使用的代码!

[## 数据科学家:21 世纪最肮脏的工作

40%的吸尘器,40%的看门人,20%的算命师。

towardsdatascience.com](/data-scientist-the-dirtiest-job-of-the-21st-century-7f0c8215e845)

嗨!,我是叮当。我喜欢构建机器学习项目/产品,我在走向数据科学上写了它们。在媒体上关注我或者在 LinkedIn 上联系我。

悉尼的 Airbnb

原文:https://towardsdatascience.com/airbnb-in-sydney-an-exploratory-data-analysis-ec91334e4780?source=collection_archive---------33-----------------------

用 Python 进行探索性数据分析

Photo by Holger Link on Unsplash

介绍

这是我作为一名有抱负的数据科学家提高技能时写的第一篇文章,我希望以后会有很多文章。

我在寻找一个有趣的数据集,它符合几个条件。

  • 是完整的,需要有限的转换或清理
  • 提供了学习一些基本 python 包和在地图上可视化数据的机会
  • 与我住的地方相关,这意味着我可以提供一些专业知识

代码可以在我的 Kaggle 笔记本这里找到。

数据和灵感

我在 Insideairbnb.com 的上找到了数据,这是一套独立的、非商业的工具和数据,用来探索 Airbnb 在世界各地的城市中的实际使用情况。

Sarang Gupta 和他的团队对纽约市 Airbnb 数据集进行了极其彻底的分析,这给了我灵感和指导。

Airbnb 的增长

2009 年 2 月 22 日,悉尼的第一套出租房屋挂牌出售。这是亚历山大附近的整个公寓。在接下来的十年里,Airbnb 已经发展到超过 35,900 个房源。

虽然这种增长是显著的,但有明显的迹象表明在放缓2015 年似乎是悉尼平台的高水位。从那以后,每年增加的房源越来越少,这似乎是一个稳步下降的趋势。

2019 年的数据并不完整,但如果趋势可以预测的话,我预计 Airbnb 将经历其迄今为止最糟糕的一年,并在上市数量增长方面达到 2013 年之前的水平。

也许悉尼的供应已经接近 Airbnb 的顶峰。

列表类型

Airbnb 以其不同寻常的租房体验而闻名。在数据中,我找到了一个谷仓、一个蒙古包、一个帐篷和一个洞穴的租金。然而,这是个例外,悉尼的大多数房源都要主流得多。

超过 26,000 份房源是针对整个住宅/公寓的,占可用租金的三分之二。其中14000房源为整栋房源。包间约占13000房源。从下面的图表可以看出,合租房间在悉尼并不常见。

热门街区

房源大多在悉尼 CBD 及周边地区(9500+),其次是东郊(8000+),以及北部海滩 (5000+)。

Photo by Simon Rae on Unsplash

房源最多的街区是邦迪海滩(1600+) 紧随其后的是曼利(1500+)

这并不特别令人惊讶。大多数房源都位于悉尼顶级景点所在的街区,或者靠近中央商务区。

承受能力

旅行者被 Airbnb 吸引的原因之一是其实惠的价格。悉尼的平均租金是 202 美元一整套公寓,485 美元一整套房子。

在价格方面,数据中有一些异常值,所以我把剩下的分析集中在房源最多的街区(前 20 名)。

这将数据集减少到大约 15,500 个列表。我发现这个子集更有助于衡量支付能力,因为它与悉尼最受欢迎的街区有关。

雷德费恩和纽敦等市中心街区提供了最实惠的住宿选择。然而,当你靠近中央商务区或海滩时,平均。房价上涨了不少。

乍一看,这些价格似乎并不比酒店便宜。我在谷歌上快速搜索了一下,找到了从每晚 89 美元到 200 美元不等的预算选项。

Airbnb 真的比酒店便宜那么多吗?我不完全相信。

体验

Airbnb 长期以来一直在推这种像当地人一样体验城市的形象。这个想法是,你的主人可以作为你在这个城市的向导,这是酒店或旅行社无法做到的。原则上,我相信这个理论,所以想看看客人对他们的租赁有什么看法。

Photo by Rose Lamond on Unsplash

他们快乐吗?他们如何评价他们住的酒店?

对数据的初步浏览显示,大多数客人通常对他们的租赁非常满意。分数高达 90 多分,对我来说,这表明审查过程中存在一些固有的偏见。

也许客人会因为留下平庸或负面的评价而感到“内疚”。以我的经验来看,酒店评论倾向于更少偏见,更具代表性。我想知道 Airbnb 是否正在考虑如何克服他们的评论数据中似乎存在的固有偏见。

我不认为这很容易。毕竟,想要有礼貌是人之常情。

人气

Airbnb 不会公开披露预订数据。然而,Airbnb 的“旧金山模式”中的使用了如下修改后的方法:

  • 50% 的审核率用于将审核转换为预计预订。****

我用同样的方法来估算预订量。

在一个非常高的水平上,我们可以估计需求已经大幅增长,预订数量几乎比去年同期翻了一番。在 2018 中,平台上预计有 40 万份预订

入住

我想知道随着上市数量的增加,这个平台有多受欢迎。我还想估计需求方面的潜在增长机会。

我将评论数据和列表数据结合起来,做出了以下假设。

  • ****每年每家酒店可入住 365 晚。我承认这是一个大胆的假设,但它是估算入住率的一种简便方法。
  • ****根据 2 的规定,每次预订的最低住宿天数。我选择中值来消除数据中的异常值。
  • 每次预订的客人数1 。我再次选择中值,因为它对数据中的异常值更有弹性。

快速浏览一下,我们可以观察到占用率每年翻一番,这代表了一个确定需求或平台在旅行者中受欢迎程度的代理。

然而,似乎有一个明显的机会来提高的入住率。至少目前,供应似乎超过了需求。

客观地看,悉尼在 2018 年接待了近1480 万游客,其中只有 3% 选择住在 Airbnb。

关闭思路

自成立以来,Airbnb 迅速颠覆了旅游业。毫无疑问,它是当今世界上最有价值的私有公司之一。

在悉尼,似乎至少在目前,供应已经达到某种平稳状态,该平台每年增加的新房源越来越少。

另一方面,需求继续以狂热的速度增长,没有显示出任何放缓的迹象。

随着悉尼预计在 2019 年接待超过 1500 万游客,机会在于说服这些游客以他们的酒店房间换取像当地人一样生活的机会。

西雅图 AirBnB 房源:更深入的观察

原文:https://towardsdatascience.com/airbnb-listings-in-seattle-a-deeper-look-4fc4dad3e34e?source=collection_archive---------10-----------------------

Source: Wikimedia

AirBnB 彻底改变了人们寻找住宿的方式。它让人们向游客敞开家门,住在比老一套单调的旅馆有趣得多的地方。

在本文中,我们将分析西雅图的 AirBnB 房源。这个数据是 AirBnB 发布的,发布在 Kaggle 上。分析的 AirBnB 西雅图数据集由 3 部分组成:

  1. 列表及其详细信息
  2. 每天的可用性信息
  3. 每个列表的评论

在浏览数据集后,我发现了 3 个真正引起我兴趣的问题。我想更深入地研究数据集,以了解同样的情况。

执行下面总结的所有分析的代码托管在 Github 上。

提问

  1. 通常什么时候有房源
    答:是只有周末有房源,还是整个星期都有房源?一年中的几个月是否有明显的季节性?
    这个问题的灵感来自于 Josh Bernhard 的博客对西雅图和波士顿 Airbnb dat a 的分析
  2. 房源可以出租几天以上。他们可以租一个星期甚至一个月!租房一周或一个月的典型折扣是多少?
  3. 西雅图有多个社区。我们能观察到它们之间的一些变化吗?大部分房源集中在哪里?
    2。街区之间的价格分布是否存在偏差?
    3。某些社区的房源通常比其他社区更容易获得吗?

问题 1:列表可用性

1.a 房源通常只在周末或一周中的特定日子提供吗?

当我们使用星期几透视可用性数据时,我们得到以下结果:

我们看到,至少在西雅图,一周中的每一天几乎没有变化。

事实上,如果我们要分析邻居级别的可用性/一周中的某一天,同样适用。没有一个邻域显示出一周中的任何一天有任何变化。

Avg availability/day of the week for different neighborhoods in Seattle

1.b 一年中的几个月是否有明显的季节性?

当我们取西雅图每个月的列表的平均可用性时,我们得到如下结果

Average monthly availability for listings in Seattle

这个挺有意思的。这里有三个主要观察结果:

  1. 接近年底时达到峰值
    一个可能的解释是,接近年底时,更多的人会去度假,更高的需求反映在更高的可用性上
  2. 一月份的大幅下降
    这一次非常有趣,尤其是因为 2 月份的供应量反弹至接近其他月份的水平。我猜在年底的高峰期过后,人们会利用这段时间来重新进货、修复、升级等等。
  3. 七月和八月
    西雅图以多雨闻名。七月和八月是西雅图一年中最干燥和最温暖的月份。我相信这可能意味着更多的人倾向于在这两个月去城外度假。较低的需求可能导致可用性下降,列表所有者可以利用这段时间对其列表进行升级或修复等。

问题二:租房一周或一个月的典型折扣是多少?

在查看周租或月租的折扣之前,你必须记住,并不是所有的房源都允许出租这么长的时间。事实上,只有大约 50%的房源列出了周租金,只有大约 40%的房源列出了月租金。

每周和每月折扣的分布如下

Distribution of weekly and monthly discounts across Seattle

从上面的图表中突出的第一件事是,每周和每月的折扣可以是负数!

人们通常根本不会想到这一点。对负折扣的一个合理解释是,维持一个设施一周或一个月可能需要更多的努力。再次必须记住,只有少数上市提供周租或月租。

现在让我们来看看一些数字

Weekly and monthly discount statistics

上面的一些观察结果:

  1. 平均每周折扣远低于每月折扣,这是可以理解的。人们会认为月租的折扣比周租的折扣高。
  2. 周折扣和月折扣差异很大
    月折扣可高达 66%!!而且周折扣可以高达~24%。从负面来看,两者都可能接近-10%

问题 3 :西雅图不同社区的差异

3.a 大多数房源集中在哪里

数据集中提供了两个属性来指示列表的位置。一个是邻里,一个是邻里团体。后者将城市分成 17 个区,而前者将城市分成 87 个区。这里我们使用邻居组属性来查看列表在城市中的分布情况。展望未来,我们将会交替使用邻域和邻域组。

每个邻域组中的列表数量如下:

为了了解这些地区的位置,让我们参考西雅图市政府办公室的西雅图地图

Seattle city map. Source: Office of the city clerk, Seattle

不包括“其他社区”,排名前五的社区中有四个位于西雅图市中心。在某种程度上,这似乎很自然。离市中心越近,人口密度越大,商业空间越集中。这两种情况都可能意味着该地区对房源的需求更大,因此房源数量也会更多。

3.b 不同社区的价格分布是否存在偏差?

让我们来看看西雅图各个社区的平均房价

我们还是能看到西雅图市中心的地方定价高了一点,这又是蛮期待的。通常情况下,越靠近市中心,房地产价格和生活成本越高,这在数据中有所反映。

Avg price/bed for listings in different neighborhoods in Seattle

然而,这种分析在某一方面并不公平。将 3 张床的价格与单人床的价格进行比较是不公平的。虽然很难创建一个完美的指标来考虑所有这些因素,但让我们从价格/床位开始

让我们计算一下价格/床位,看看它的分布如何。和我们之前看到的类似吗?

当按价格和价格/床位比较社区时,前 5 个社区中有 3 个重叠。此外,西雅图中部仍然显示在顶部。因此,人们可以说价格和价格/床位在不同的社区遵循相同的模式。如果将上述分析扩展到价格/卧室,就会看到类似的结果。

3.c 某些社区的房源比其他社区的房源更多吗?

Avg num days available per neighborhood

如果我们计算每一个街区的可用房源的平均天数,我们会得到左边的数据。

可用性最低的 5 个地区中有 4 个位于西雅图市中心。

这里可以形成 3 个不同的桶:

高可用性:> 260
中可用性:240–260
低可用性:< 240

可以观察到低可用性存储桶的所有成员都来自西雅图中部。

注:以上列表不包括“其他社区”

结论

在这篇文章中,我们查看了来自西雅图的 AirBnB 数据。特别是,我们分析了 3 个方面——可用性模式、每周/每月折扣和邻近地区的变化。

我们注意到每个方面都有许多有趣的模式,有些我们能够解释,有些需要更多的分析才能更好地理解。高层次的要点是:

  1. 西雅图的房源在年底达到高峰,在 1 月、7 月和 8 月跌至低谷。它们在工作日和周末同样可用。
  2. 租赁一周或一个月的房源会有一些折扣,但差异很大,甚至可能是负数。
  3. 大多数房源都集中在西雅图市中心。那里的价格最高,可用性也最低。

这个数据集非常有趣,让人不禁要问几个问题。未来分析的一些问题包括:

  1. 影响房子定价的主要因素是什么?
  2. 人们对西雅图的房源写什么样的评论?

使用线性回归(Scikit-Learn 和 StatsModels)进行 Airbnb 价格预测

原文:https://towardsdatascience.com/airbnb-price-prediction-using-linear-regression-scikit-learn-and-statsmodels-6e1fc2bd51a6?source=collection_archive---------6-----------------------

Airbnb 的租赁价格是由什么决定的?床位数?允许的客人数量?复习分数?取消政策?

这个问题的答案提供了有趣的见解,可以使寻求利润最大化的主机受益。为了更深入地探究影响 Airbnb 租赁价格的可能因素,我用 Python 中的 Scikit-Learn 和 StatsModels 使用了各种线性回归模型。在这篇文章中,我将重点介绍我用来回答这个问题的方法,以及我如何利用两个流行的线性回归模型。

主要问题:什么预测 Airbnb 租房价格?

数据:约 74k Airbnb 租房的 Kaggle 数据集。该数据集包括许多功能,如:床位数、允许的客人数、描述、评论数等等。有关特性和数据的更详细预览,请参见数据集此处

方法/模型:这个问题属于回归和预测的范畴,所以使用了线性回归模型。我使用 StatsModels 生成一个起点普通最小二乘模型,使用 Scikit-Learn 生成一个 LassoCV 模型。

步骤 0:思考问题和数据集

在一头扎进数据和产生大的相关矩阵之前,我总是试图思考这个问题并对特征有一个感觉。我为什么要做这个分析?目标是什么?特征和目标变量之间的关系有什么意义?

步骤 0:导入包

# Import packages
import pandas as pd
import patsy
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.model_selection import train_test_split
from sklearn.linear_model import lars_path
from sklearn.linear_model import LinearRegression, Lasso, LassoCV
from sklearn.metrics import r2_score
import scipy.stats as stats# Visualization
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

步骤 1:探索性数据分析和熊猫模型准备

下面是一些我经常采取的一般数据清理和 EDA 步骤。我没有包括一些更细微的数据集特定步骤。

  • 我从 pd.describe()和 pd.info()开始,了解丢失了哪些数据以及每个特性的值
  • 清理了包含空格的功能名称
  • 将一些功能与许多类别相结合。例如,“property_type”有 25 个不同的类别(这是使用 pd.value_counts()检查的)。我把最低的 23 个组合成了“其他”类别。这也是在其他一些特性上完成的。这很有帮助,因为我没有从虚拟代码中创建 20+个新列。
  • 删除分布非常不均匀或不会被使用的功能。比如‘host _ has _ profile _ pic’有 32k 个“是”,只有 97 个“否”。这在模型中没有用。
  • 缺失数据的进一步检查。对于我认为重要的特征(例如“点评分数评级”),我用中间值填充。注意-这里的插值可能比用中值填充更微妙。例如,我可以用他们自己的中间值填充租赁的每个子类(公寓、房子、其他)。
  • 检查与 pandas (pd.corr())和 Seaborn heatmap 的视觉相关性:特征和结果之间,以及特征本身之间。
model_df.corr() # Whole correlation matrix
model_df.corr()['log_price'] # Check correlations with outcome onlysns.heatmap(model_df.corr(), cmap="seismic", annot=True, vmin=-1, vmax=1);
  • 各种分类变量的虚拟代码(如“取消 _ 政策”、“财产 _ 类型”)。确保设置 drop_first=True,以便不包括引用列。注意-如果特征是分类的,但只有两个选项(例如“男性”、“女性”),则不需要手动生成虚拟代码,只需确保它是一个整数(0,1)。
# Example dummy coding for 'cancellation_policy'
model_df = pd.get_dummies(model_df, columns=['cancellation_policy'], drop_first=True)
  • 确保目标变量(' log_price ')是:正态分布,峰度和偏度是正态的。
sns.distplot(model_df['log_price'], kde=True,);
fig = plt.figure()
res = stats.probplot(model_df['log_price'], plot=plt)
print("Skewness: %f" % model_df['log_price'].skew())
print("Kurtosis: %f" % model_df['log_price'].kurt())

步骤 2:在 StatsModels 中运行 OLS,并检查线性回归假设

StatsModels 中的 OLS 模型将为我们提供最简单的(非正则化)线性回归模型,作为我们未来模型的基础。从简单开始,然后增加复杂性总是好的。此外,它还提供了一个很好的汇总表,很容易理解。这是检查线性回归假设的好地方。

  • Patsy 创建特征矩阵。Patsy 很好,因为它用简单的 R 语法创建了我们的模型。默认情况下,它还会在您的模型中添加一个截距(如果您不使用 Patsy,请确保手动添加一个截距)。
  • 训练/测试分割数据。80%将用于培训,20%将用于测试(稍后将详细说明为什么没有验证拆分)。
  • 运行 OLS 模型,检查汇总表。

要从 OLS 摘要表中检查的关键指标:

  • R Adjusted :告诉你模型中的预测者解释了你的结果(租赁价格)的多少差异。
  • 对数似然:这个模型在新数据上表现相同的可能性有多大。您希望这个数字接近于零(很可能是负数)。
  • P 值:检查每个变量。低于 0.05 是标准阈值,让您了解哪些对模型有显著影响。
  • 德宾-沃森:有自相关吗?这应该是两点左右。
  • 也可以查看综合条件号以获得模型质量的整体感觉。

获取方差膨胀因子(VIFs)

  • Vif不是从上面的 OLS 表中产生的,因此您应该手动提取它们。
  • 它们是检查模型中多重共线性的好方法。多重共线性是指要素之间高度相关。线性回归假设您的数据没有多重共线性,因此请确保检查这一点。你希望你的波动率指数低于 4。
# Check for VIFs of each feature, then save to its own DF
vif_census = pd.DataFrame()
vif_census[“VIF Factor”] = [variance_inflation_factor(X_census.values, i) for i in range(X.shape[1])]
vif_census[“features”] = X_census.columns

检查模型的残差

  • 线性回归的另一个假设是残差是正态分布的。你可以很容易地用图来验证这一点。在下图中,你可以看到有一些传播(特别是左上),但残差大多落在中线附近。
# Use statsmodels to plot the residuals vs the fitted values
plt.figure(figsize=(12,8))
plt.scatter(fit_census.predict(), fit_census.resid); # print resids vs predictions
plt.title("Residuals plot from OLS Model")
plt.xlabel("Predicted Values")
plt.ylabel("Residuals")
plt.savefig('LR_Residual_Plot')

第三步:拉索夫

接下来,我使用正则化线性回归模型。这些类型的模型对变量施加惩罚,并有助于降低模型的复杂性。正则化有助于偏差-方差权衡,并有助于模型对新的测试数据更具普遍性。参见这篇文章对正规化的一个很好的概述。

  • 由于正则化模型惩罚变量,我们需要将它们标准化,这样它们都以相同的比率被惩罚。这是通过对数据应用标准定标器来实现的。把标准化想象成把所有的特性放在同一个平面上,并给它们一个 z 的分数。
# Standard scale the datastd = StandardScaler()
std.fit(X_train_census.values) # only std.fit on train set
X_tr_census = std.transform(X_train_census.values)
X_te_census = std.transform(X_test_census.values)

型号类型快速说明

  • 现在我们准备运行我们的正则化模型。我们是要用套索,脊,弹力网,还是三者都用?我只在这里使用套索,不会去详细说明,但套索和山脊惩罚变量/系数不同,所以每个可以用来获得不同的见解。简而言之,Lasso 惩罚了一些系数,以至于它们变为零并被排除在模型之外。这基本上是一个自动的特征选择。Ridge 通过“缩小”系数和“抹黑”它们的影响来惩罚系数。当您希望平稳地处理多重共线性时,岭是很好的选择。ElasticNet 本质上是两者的结合。Scikit-learn 的网站上有关于所有这些的很好的文档。这三者的代码本质上是相同的。

步骤 3a:拉索夫

  • 我使用 CV 版本的 Lasso,因为它们有内置的交叉验证。这意味着您不必在新的数据集上手动验证,而是由 CV 模型为您进行训练和交叉验证。注意前面(训练-测试分割代码)我只做了 80-20 分割——没有留出验证数据,而是将整个 80 用于训练和验证。
  • 我喜欢先运行 LassoCV,因为它固有的特性选择。从具有 0.0 beta 系数的模型中得出的特征可能不是强特征,并且可以在以后被移除。
# Run the cross validation, find the best alpha, refit the model on all the data with that alphaalphavec = 10**np.linspace(-2,2,200)
lasso_model_census = LassoCV(alphas = alphavec, cv=5)
lasso_model_census.fit(X_tr_census, y_train_census)
  • 在上面的代码中,我做了三件事:1)创建一个将放入 CV 模型的 alpha 数组 2)使用设置为步骤 1 的 alpha 数组的 alpha 参数初始化模型,并设置五重交叉验证 3)拟合训练数据。
  • 在这一步之后,我们可以检查每个特性的 beta 系数,以及访问关于模型的一些重要信息。

关于模型比较指标的简要说明

  • 有几种方法可以比较回归模型,但这里我用的是 R 和平均绝对误差(MAE)。r 是我们用模型计算的结果变量的方差的度量。MAE 是我们模型中平均误差量的度量。这很容易解释,也是一个很好的分享指标。例如,在我预测 Airbnb 租赁价格的模型中,如果我的 MAE 是($)20,那么在进行预测时,我可以说我的模型误差了大约 20 美元。
# Print feature name zipped with its beta
lasso_betas = list(zip(X_train_census.columns,
lasso_model_census.coef_))# R2 of Training set
lasso_model_census.score(X_tr_census,y_train_census)

如果满意,运行测试数据的时间。如果没有,就回去做一些特色工程。如果你满意,以下步骤。

# Predict model on test data
y_census_pred = lasso_model_census.predict(X_te_census)# R2 of test set using this model
r2_score(y_test_census, y_census_pred)#Mean Absolute Error (MAE)
def mae(y_true, y_pred):
    return np.mean(np.abs(y_pred - y_true))mae(y_test_census, y_census_pred)# Plot
plt.scatter(y_test_census, y_census_pred)
plt.plot([0,10],[0,10],color='red')
plt.grid(True)
plt.title('Predicted vs. Actual Rental Price (log) with LASSO CV')
plt.ylabel('Rental Price (log) Predicted')
plt.xlabel('Rental Price (log) Actual');

  • 这里我们可以看到,我们的模型是体面的,有一些低于性能时,租金价格高。这可能是因为在这个范围内没有太多的。

使用 LARS 路径确定哪些功能最重要

  • LARS path 是一个很好的工具,可以用来查看 LassoCV 模型中哪些特性最重要/最不重要。简单来说,在下图中,首先从零(正或负)变化的特征是最重要的,最后变成非零的特征是最不重要的。也就是说,出现在左边的特征是最重要的。这也反映在这些特征的β系数中。
print("Computing regularization path using the LARS ...")
alphas, _, coefs = lars_path(X_tr_census, y_train_census, method='lasso')# # plotting the LARS path
xx = np.sum(np.abs(coefs.T), axis=1)
xx /= xx[-1]
plt.figure(figsize=(10,10))
plt.plot(xx, coefs.T)
ymin, ymax = plt.ylim()
plt.vlines(xx, ymin, ymax, linestyle='dashed')
plt.xlabel('|coef| / max|coef|')
plt.ylabel('Coefficients')
plt.title('LASSO Path')
plt.axis('tight')
plt.legend(X_train_census.columns)
plt.show()

概括地说,这里我介绍了我喜欢在数据探索和清理中采取的一些基本步骤(还有更多的事情可以做,参见这篇文章以获得更详细的 EDA 技巧)。此外,我运行了一个简单的 OLS 回归和一个正则化套索模型。在这些步骤之后,人们可以运行 RidgeCV 和/或 ElasticNetCV 并比较模型。

感谢您的阅读,如果有我需要补充的地方,请告诉我。

Airbnb 租赁房源数据集挖掘

原文:https://towardsdatascience.com/airbnb-rental-listings-dataset-mining-f972ed08ddec?source=collection_archive---------2-----------------------

对 Airbnb 数据的探索性分析,以了解纽约市的租赁情况

自 2008 年成立以来,Airbnb 经历了飞速发展,其网站上的租赁数量每年都呈指数级增长。Airbnb 成功地颠覆了传统的酒店行业,因为越来越多的旅行者,不仅是那些希望物有所值的旅行者,还有商务旅行者,都将 Airbnb 作为他们的首选住宿提供商。

纽约市一直是 Airbnb 最热门的市场之一,截至 2018 年 11 月,已有超过 52,000 个房源。这意味着每平方公里有 40 多所房屋被出租。在纽约的 Airbnb 上!人们或许可以将 Airbnb 在纽约的成功归因于酒店收取的高额费用,这主要是由该市过高的租金价格推动的。

在本帖中,我将对来自 Airbnb 网站内 的 Airbnb 数据集进行探索性分析,通过各种静态和交互式可视化来了解纽约市的租房情况。

分析已经用 r 做了,源代码可以在我的 Github 上找到:https://github.com/saranggupta94/airbnb

数据描述

数据集由三个主表组成:

  • listings -显示每个列表的 96 个属性的详细列表数据。分析中使用的一些属性有price(连续)、longitude(连续)、latitude(连续)、listing_type(分类)、is_superhost(分类)、neighbourhood(分类)、ratings(连续)等等。
  • reviews -嘉宾给出的 6 个属性的详细评价。关键属性包括date(日期时间)listing_id(离散型)reviewer_id(离散型)comment(文本型)。
  • calendar -通过列表提供下一年的预订详情。共有四个属性,包括listing_id(离散型)date(日期型)available(分类型)price(连续型)。

快速浏览一下数据可以发现:

  • 纽约市共有 50,968 个唯一列表。2008 年 4 月,纽约曼哈顿哈莱姆区的第一次租金上涨。
  • 从那时起,客人们已经写了超过 100 万条评论。
  • 房源的价格从每晚 10 美元到 10,000 美元不等。)每晚。标价为 10,000 美元的列表位于布鲁克林的绿点;阿斯托利亚,皇后区和曼哈顿上西区。

Airbnb 在纽约的迅速崛起

Airbnb 的成功取决于其广泛的主机网络,以及使用其服务寻找度假租赁的客人数量。纽约市在这两个方面都出现了指数级增长——独特房源的数量和在 Airbnb 上预订住宿的游客数量。

下面的动画展示了 2008 年至 2018 年 Airbnb 在该市的主机网络增长情况。正如你所观察到的,这个城市所有行政区的房源数量都在快速增长,如杂乱的蓝点所示。

Number of Airbnb listings over the years

2008 年,Airbnb 在纽约的第一个上市地点是在哈莱姆区,此后的增长一直呈指数级。头几年增加了大约 600 处房产,大部分在曼哈顿和布鲁克林。曼哈顿市中心和布鲁克林附近的区域一直都有很多 Airbnb。自那以后,上市公司的数量每年大约翻一番。到 2015 年,曼哈顿的每个街区都有多个房源。有趣的是,布朗克斯区的房源非常少,以至于在动画中可以看到曼哈顿-布朗克斯区的边界,因为房源的突然减少。自 2016 年以来,Airbnb 房源已经扩散到斯塔滕岛的部分地区。预计到 2020 年将有 7 万套房产,这应该不远了。

我无法获得这些年来在 Airbnb 上预订的数量数据。相反,我用“评论数量”来代表 Airbnb 的租赁需求。根据该公司的说法,大约 50%的客人会评论主机/列表,因此研究评论的数量将会给我们一个很好的需求估计。

与主机数量类似,接受评论的独特房源数量多年来稳步增长,表明对 Airbnb 租赁的需求呈指数级增长。

要获得所有列表的详细视图,请查看下面我设计的交互式 RShiny 应用程序,它允许用户根据各种参数过滤列表。下面是 RShiny 应用的截图。你可以通过链接试试实际的应用程序:【https://ankitpeshin.shinyapps.io/listings/ (抱歉,加载需要几秒钟)

Airbnb Property Finder: RShiny app

位置,位置,位置!:了解纽约的房地产市场

Airbnb 用户根据位置、清洁度和一系列其他参数对他们的住宿进行评级。在这里,我处理位置得分数据。查看每个街区的平均位置得分会很有趣。位置得分必须是该社区吸引力的坚实指标。高评级的社区往往具有更好的连接性(地铁站),往往更靠近城市热点(时代广场、帝国大厦、华尔街)。

曼哈顿在市中心地区(尤其是中央公园以下)获得了最高的位置分数。在斯塔滕岛,靠近州立公园的区域位置得分最高。靠近曼哈顿的布鲁克林区往往有更高的位置评级。观察布鲁克林的纽约地铁系统,有趣的是观察到高度评价的区域与地铁线路的存在相对应。地铁线不去的布朗克斯也是如此。

上市成本在很大程度上与位置得分一致。高评级的位置也往往是最昂贵的。很明显,高评级的位置也往往是昂贵的(需求与供应)

然而,有趣的是发现一些异常值:I)。寻找高评级-低租金区域(两全其美):斯塔滕岛的州立公园区域(上图中讨论过)就是这样一个区域,尽管其位置评级最高,但租金往往相当低。另一个这样的好去处位于布鲁克林的东北部。ii)。寻找低评级-高租金地区(两个世界中最糟糕的):斯塔滕岛的榆树公园地区租金高得不成比例,但位置得分非常低。在靠近北布朗克斯区的地方可以找到其他这样的地方。

现在让我们探索一下纽约市的房源类型。下图显示了各区不同列表类型的分布情况。

除了斯塔滕岛,公寓风格的房源在所有四个街区都是最多的。斯塔滕岛的“房子”式房产多于“公寓”。这似乎很直观,因为斯塔滕岛人口稀少,因此与其他行政区相比有更多的“空间”。

一切都是为了钱:分析需求和定价

在这一部分,我将对 Airbnb 租赁进行需求和价格分析。我将观察自 2008 年 Airbnb 成立以来的几年以及一年中几个月的需求,以了解季节性。

如前所述,由于预订数据不可用,我将使用评论数量作为 Airbnb 租赁需求的代理。根据 Airbnb 声称 50%的客人会对他们的住宿进行评论,假设评论的数量与租赁需求相对应。此外,客人必须在入住两周内提供点评,因此点评的数量可以很好地估计特定时期的需求。

通过“Airbnb 有多受欢迎?”之前显示的图表(为了便于参考,我在下面再次提供了它),可以观察到评论/需求数量的季节性模式。每年都有需求的高峰和下降,表明某些月份比其他月份更忙。

从更细的层面来看,需求在 1 月份最低,并在 10 月份增长,然后开始下降,直到年底。

租房价格有季节性吗?让我们看看历年来的每日平均价格。

随着一年时间的推移,各上市公司的平均价格往往会上升,并在 12 月达到峰值。除了 11 月和 12 月的审查数量(表示需求)开始下降之外,该模式与审查/需求数量的模式相似。

我们还可以在图表上看到两组点,这些点描述了某些日子的平均价格比其他日子高。下面,我将绘制一个一周中各天平均价格的箱线图来理解这一现象。

正如我们所见,周五和周六比一周中的其他日子更贵,可能是因为住宿需求更高。

我将通过研究明年的入住情况来结束对这一部分的分析。使用表calendar中的数据,我将找出下一年的入住率,即截至 2018 年 11 月 3 日(收集数据的日期),已预订房源的百分比。我无法获得过去的入住率数据,因此无法研究实际入住率。

可以推断,一月往往是最安静的,随着一年的进展,入住率也在增加。这与对审查数量(表明需求)的分析结果密切相关,该结果显示了全年的增长趋势。

进入顾客的头脑:分析顾客评论

数据集为我们提供了大量的数据,但没有什么比他们的评论/反馈更有见地、更贴近客户。如果挖掘得当,它们可以告诉我们很多关于客户心态、他们的期望以及这些期望的满足程度。为了使最终结果有意义,评论文本数据需要大量的清理,例如,需要对单词进行词干处理,需要删除逗号-句号-百分比等,需要删除常见的英语单词和停用词等。有一百多万条评论,所以我对这些数据进行了随机抽样,在这个例子中是大约 30k 条评论。

对“云”这个词的分析显示了有趣的趋势;位置似乎是关键,因为单词“邻居”、“位置”、“区域”在单词“云”中非常突出。像“地铁”、“步行”这样的交通方式也经常被提及。Airbnbs 是短期租赁,然而人们似乎强调他们住宿的舒适性,像“厨房”这样的词告诉我们,许多人宁愿做饭也不愿出去吃饭。附近的餐馆也可以找到。浴室和床,正如预期的那样,如果不是处于最佳状态,显然会成为交易的破坏者。“主机”一词被多次提及;表明了主人在塑造 Airbnb 体验中扮演的重要角色。

单词向量提供了一种有效的方法来找出与特定搜索项最接近的单词。使用评论数据,我构建了一个向量空间来构建相似单词的单词云,以获得有趣的见解。

第一个字云是为了“难受”这个字。类似于“不舒服”的词通常是那些经常与它连用的词,即不舒服的原因。“云”这个词正好说明了这一点——注意像“拥挤”、“拥挤”、“小”、“闷”和“杂乱”这样的词表明缺乏空间是最常见的抱怨之一。“热”、“潮湿”和“冷”是一些常见的温度问题。“满是灰尘”、“肮脏”、“不干净”的环境会促使人们写下负面反馈。很多感觉“紧张”、“不安全”、“压力大”;对于未来的租户来说,这显然是一个危险信号。

类似地,通过关键字“舒适”查询,我们希望看到导致积极体验的事情。突出的特点是像“安静”、“可步行”、“干净”、“一尘不染”等词,再次证明了环境、位置和清洁的重要性。有益的“主人”和“交流”会让你感到舒适。床单的干净程度和床的大小会给人留下决定性的印象。

看看这个闪亮的应用程序,它是对客户评论的词向量分析的扩展。你可以查询向量来找到“相似”的单词,并建立一个自定义的单词云。输入任何有效的查询词,并在词云中设置“最大字数”。一个有效的查询词应该出现在语料库中,否则它就不是词向量的一部分。

下面是一个截图,你可以通过链接试试实际的应用:https://ankitpeshin.shinyapps.io/wordcloud_generator/(允许它一些时间来加载)。

拥有超能力的主持人!:分析如何成为超级主持人

Airbnb 将“超级房东”的称号授予一小部分可靠的房东。这是一个激励计划,对房东、Airbnb 和他们的客户都是双赢的。superhost 通过更高的预订量获得了更多业务,客户获得了更好的服务,Airbnb 获得了满意的客户。

但是怎样才能成为超级主持人呢?Airbnb 的网站有一套必须满足的要求,以便成为一个。保持 50%以上的审核率,90%以上的回复率等。我们的发现,虽然大部分符合 Airbnb 的指导方针,但也显示出一些有趣的异常值。虽然大多数超级主机都处于高评级:高响应率区域,但我们也可以看到少数主机的响应率低于 75%(这违反了 Airbnb 设定的 90%+标准)。这只是很小一部分主机。收视率方面,几乎所有主持人的评分都在 80%及以上。

也就是说,大多数 Airbnb 主机位于高评级:高响应区域,但只有一小部分成为超级主机。所以很明显,成为超级主播需要的不仅仅是高收视率和高回复率。

总的来说,Airbnb 在纽约市出现了惊人的增长。上述分析强调了数据中的几个趋势,以概述 Airbnb 的市场。Airbnb 内部保存了全球其他几个主要城市的类似数据,我相信比较这些城市之间的模式和趋势会非常有趣。

在我的 Github 上检查源代码:【https://github.com/saranggupta94/airbnb

我目前正在纽约州的哥伦比亚大学攻读数据科学硕士学位。这个项目是作为探索性数据分析和可视化课程的一部分完成的。特别感谢 Ankit Peshin 和 Ankita Agrawal 的贡献。

欢迎在http://www.columbia.edu/~sg3637/查看我的其他项目,或者在 saranggupta94@gmail.com给我留言

气流和超级查询

原文:https://towardsdatascience.com/airflow-and-superquery-9acc87c0398d?source=collection_archive---------12-----------------------

使用 SuperQueryOperator 实时监控您的大查询开销

Photo by Soheb Zaidi on Unsplash

“费用是多少?”这个问题在科技界被问得如此频繁,以至于一家小型初创企业的每个人在被问到这个问题时都会微微颤抖。答案总是:“我们不确定”。

在数据工程领域,调度工作流的最佳工具之一是 Apache Airflow 。这个工具让许多企业摆脱了僵化的 cron 调度,在有向无环图(Dag)的公海上驾驭大数据浪潮。

当然,这意味着大量数据被移入和移出数据库,伴随着这一辉煌的运动,往往会产生不可避免的成本。

一个这样的数据库,你可以称之为超级计算机,叫做谷歌大查询。它是谷歌云产品的旗舰,支持 Pb 级的数据处理。它非常善于让您少担心数据库基础设施的能力,而更多地担心您的分析质量和需要解决的数据流问题。

BigQuery 要考虑的一个关键因素是,任何个人或组织对提高在这个平台上扫描数据的成本有多开放。即使是最精明的数据工程师也会焦虑地告诉你,他们在扫描他们并不真正想要的数据时犯了错误,并使他们的业务每月分析账单超出了预算。

在步骤 superQuery 中。superQuery 提供的理念是,你不必担心你的成本,因为你有你需要的所有信息和一些保障措施,让你有机会做出明智的决定。

了解气流成本

当您的气流 Dag 愉快地搅拌并将数据推送到您选择的处理系统时,大量日志记录在后台发生。气流日志易于访问,易于阅读,并让您很好地了解 DAG 正在做什么。如果日志文件还可以显示查询执行计划的信息,特别是成本和扫描的总数据是多少,这不是很好吗?肯定会的!大概是这样的:

--------------------------------------------------------------------
Starting attempt 1 of 4
--------------------------------------------------------------------

[2019-03-11 21:12:02,129] {models.py:1593} INFO - Executing <Task(SuperQueryOperator): connect_to_superquery_proxy> on 2019-03-01T00:00:00+00:00
[2019-03-11 21:12:03,836] {superq_operators.py:54} INFO - Executing: #standardSQL
SELECT COUNT(testField) FROM `mydata.PROD.myTable`;
[2019-03-11 21:12:03,844] {logging_mixin.py:95} INFO - [2019-03-11 21:12:03,843] {base_hook.py:83} INFO - Using connection to: id: mysql_default. Host: superproxy.system.io, Port: 3306, Schema: None, Login: XXXXXX, Password: XXXXXXXX, extra: {}
[2019-03-11 21:12:15,172] {superq_operators.py:68} **INFO - ((
'{
   "startTime":1552331525642,
   "endTime":1552331534624,
   "executionTime":"8988",
   "bigQueryTotalBytesProcessed":****26388279066****,
   "bigQueryTotalCost":"0.12",
   "superQueryTotalBytesProcessed":0,
   "superQueryTotalCost":"0.00",
   "saving":0,
   "totalRows":"1",
}**', '', '1', 'true'),)
[2019-03-11 21:12:17,121] {logging_mixin.py:95} INFO - [2019-03-11 21:12:17,119] {jobs.py:2527} INFO - Task exited with return code 0

这个日志块告诉您,您在 Airflow 中的 BigQuery 操作符扫描了 24Gb 的数据,花费了您 0.12 美元。简单。您还可以在第三方工具或 bash 脚本中解析日志文件,并创建扫描 BigQuery 数据的 Dag 的开销汇总。

这一切是如何运作的?

SuperQuery 使用 MySql 代理来实现普遍连接,并提供一个 Sql 接口来获取信息。

下一步需要什么:超级查询运算符

为了获得与上述相同的功能,需要执行以下步骤:

  1. 将 superquery 插件添加到 Airflow,以便使用 SuperQueryOperator。
  2. 订阅 superQuery 试用版,获取 superQuery MySql 代理的登录信息
  3. 使用下面提供的 DAG 测试您与代理的连接。
  4. 当您想要使用这个功能时,在您自己的 Dag 中用 SuperQuery 操作符替换您的 BigQuery 操作符。

使用超级查询运算符

这是超级查询操作符的界面:

TEST_SQL = """#standardSQLSELECT COUNT(*) FROM `mydata.PROD.myTable`;"""SuperQueryOperator( *task_id*="connect_to_superquery_proxy", *sql*=TEST_SQL, *database*="", *explain*=True,  # False if you don't want information *dag*=dag)

以下是操作员的代码,您应该将其复制到 Airflow 中的plugins 文件夹中:

下面是一些测试 SuperQuery 连接的代码:

总之

这篇文章描述了当您连接到 BigQuery 并从 big query 实现气流任务时,如何获得气流成本的视图。超级查询代理的使用可以扩展到包括各种详细的执行计划信息,并利用系统提供的好处。

快乐的成本监控(和节约)!

管理多个气流项目的气流设计模式

原文:https://towardsdatascience.com/airflow-design-pattern-to-manage-multiple-airflow-projects-e695e184201b?source=collection_archive---------13-----------------------

探索数据工程技术和代码,以在 Airflow 实例上或作为 ECS 服务连续部署多个项目

Photo by Ian Dooley on Unsplash

Airflow 是调度、可视化和执行数据管道的一个很好的工具。但是如果你像我一样,必须管理大约 100 多个不同的管道,你会很快意识到开发和管理这些管道需要一点工程技术。

我们将探索设计模式的 3 个方面,这将帮助我们使开发过程简单和易于管理。

  1. 每个项目 DAG 的单独存储库。
  2. 使用 CI/CD 部署代码。
  3. 使用容器执行代码。

1.项目分离:如何维护每条管道的单独存储库?

Airflow 将自动初始化配置中指定的 DAG 主目录下的所有 DAG。但是要从单独的项目初始化 DAG.py,我们必须安装 DAGFactory

Dag factory:Dag factory 将从特定文件夹下的单个项目中收集并初始化 Dag,在我的例子中是@ airflow/projects。

*airflow
├── READEME.md
├── airflow-scheduler.pid
├── airflow.cfg
├── dags
│   └─ DAGFactory.py
├── global_operators
├── logs
├── projects
│     └── test_project
│            └── DAG.py
├── requirements.txt
├── scripts
├── tests
└── unittests.cfg*
  • 将其安装在airflow/dags/DAGFactory.py

气流将初始化气流/dags 目录下的所有 Dag。所以我们将在这里安装 DAGFactory。

*airflow
├── READEME.md
├── airflow-scheduler.pid
├── airflow.cfg
└── dags
    └─ DAGFactory.py*

DAGFactory.py的代码:遍历 airflow/projects 下的所有项目,并将DAG.py中的DAGS变量加载到 airflow 的全局名称空间中。

这将允许我们将您的代码放在一个单独的存储库中。我们要做的就是

  1. 在你的回购协议的根层有一个DAG.py文件
  2. 有一个名为DAGS的列表,里面有所有的Dag。(可以,可以传多个 Dag。每个 dag 将在用户界面上显示为单独的 DAG。并且所有 Dag 都可以从相同的代码库中维护。)

2.如何将项目的代码应用到生产气流服务中

  1. 如果你在虚拟机上运行气流。你可以在airflow/projectsgit checkout 这个项目
  2. 您可以使用类似chef的配置管理工具在 airflow VM 上部署新项目。
  3. 您可以在 AWS 上使用代码构建或代码管道来构建和部署您的 Kubernetes 服务。如果你在 EKS 运营 airflow 服务。(或 GCP 的 Kubernetes 发动机)

我将很快就这些写一篇文章。

3.创建复杂的 Dag v/s 编写复杂的代码并在容器中执行。

随着 Dag 数量的增加及其复杂性的增加。执行它们需要更多的资源,这意味着如果您的生产气流环境在虚拟机上,您将不得不进行扩展以满足不断增长的需求。(如果您使用 Kubernetes 来执行或任何其他执行人,这将不适用于您)。

现在,为了克服这个问题,我建议为每个项目创建单独的容器,并通过气流在 ECS 中执行它们,而不是在单个 m/c 上执行所有的 Dag。

这种方法让我将我的 airflow 实例大小保持在最小,容器在 ECS 中的 FARGATE 上执行,我只为它们运行所需的时间付费。

由于我可以通过使用 DAGFactory 将我的代码库分开,所以我可以将DAG.pydockerfile 放在同一个存储库中。我可以将 DAG.py 放在 ECR 中的 airflow 实例和 Docker 容器上。

这种方法的一个缺点是,您不能在内部使用气流操作符进行 ETL 或其他处理。但是您仍然可以构建您的模块库,并在不同的管道中使用它们。

那么为什么要保持气流呢?

好吧,Airflow 附带了一个更好的 UI 和一个调度程序。这使得跟踪作业失败、启动作业(本例中是一个容器)以及在一个地方查看日志变得很容易。

简而言之,不需要登录到实例来调试问题。

气流来编排您的机器学习算法

原文:https://towardsdatascience.com/airflow-for-orchestrate-your-machine-learning-algorithms-805702fc40c9?source=collection_archive---------22-----------------------

作为数据工程师,一个巨大的挑战是管理、安排和运行工作流程,以准备数据、生成报告和运行算法。这篇文章的范围是用一个简单的例子为这些活动提出一个可能的、快速实现的解决方案。

管理和安排数据分析工作流的方式有很多种,但比较常见的有:

  • cron 作业,直接在操作系统上。
  • 詹金斯。

这两种情况都不能很好地适应作业的规模:如果一个作业在工作流的某个阶段失败了,那么您的工作流就需要从头开始。如果你想创建一个更好的数据管道,有一个简单易学的界面和许多有用的功能,你需要使用像 Apache Airflow 这样的计算 orchestrator。

Airflow 是计算协调器,因为如果你能为它写一个工作流,你就能管理每一种操作。这意味着您可以使用 airflow 将工作流创作为任务的有向无环图(Dag)。

Airflow 由两个元素组成:webserver 和 scheduler。

Webserver 运行用户界面,可视化生产中运行的管道,监控进度,并在需要时解决问题。airflow scheduler 在遵循指定依赖关系的同时,对一组工作线程执行您的任务。丰富的命令行实用程序使在 Dag 上执行复杂的手术变得轻而易举。

我认为气流最重要的特征是工作流被定义为代码!通过这种方式,它们变得更易于维护、版本化、可测试和协作。有了 Airflow,您可以随心所欲地安排管线组合。DAG 是使用代码而不是 GUI 工具创建的。

但是什么是 DAG 呢?DAG(有向无环图)是您想要运行的所有任务的集合,以反映它们的关系和依赖性的方式组织。让我举一个例子:一个简单的 DAG 可以包含三个任务:A、B 和 C。它可以说 A 必须在 B 可以运行之前成功运行,但是 C 可以在任何时候运行。它可以说任务 A 在 5 分钟后超时,B 在失败的情况下最多可以重启 5 次。它还可能会说工作流将在每晚 10 点运行,但不应该在某个特定日期之前开始。这样,DAG 描述了你想要如何执行你的工作流;但是请注意,我们还没有提到我们实际上想做什么!a,B,C 可能是任何东西。也许 A 准备数据给 B 分析,而 C 发邮件。

DAG example [http://michal.karzynski.pl]

Dag 是用 python 编写的,所以如果 B 是一个像 DBSCAN 这样的聚类算法,它对 A 阶段准备的数据进行聚类,那么您可以使用任何有助于完成这项任务的机器学习库(例如 Scikit-learn)。Airflow 实现了 python 操作符(以及更多)来运行定义的 python 函数,我认为这对于轻松实现机器学习工作流非常有用,正如我们在这个例子中看到的:K-Means 的 scikit-learn 演示对手写数字数据进行聚类。

你可以在这里找到所有代码。在此回购中,我们需要运行以下示例:

  • 带有 Scikit-learn 库的气流 docker 文件
  • docker-compose 设置环境
  • DAG 调度 k-means 算法的例子。

在下面的代码中,我们可以看到运行 scikit-learn k-means 示例的 DAG。

正如我们所见,设置非常简单,气流界面非常清晰,易于学习。

结论

我认为 airflow 是一个非常强大且易于使用的工具,它能够真正快速地研究 ML 算法的生产过程。有了 docker 和 docker-compose,环境的设置变得非常容易和可重复,并且可以与团队中的所有数据科学家共享。这样,数据科学家可以在自己的笔记本电脑上运行模型,就像模型在生产环境中运行一样。你不觉得很酷吗?

原载于 2019 年 3 月 31 日devklaus.wordpress.com

航空公司收入预测

原文:https://towardsdatascience.com/airline-revenue-prediction-fb128343bcd6?source=collection_archive---------13-----------------------

一个心碎的故事,发现,以及我们如何几乎击败华尔街的收入共识。

Hey, look, that NLP tweet analysis WAS good for something.

背景

这个项目是由亚历克斯·霍根森、T2、戴尔·佩津斯基和 T4 在亚历克斯·迪马基斯教授的指导下完成的,是德克萨斯大学的一门介绍性 ML 课程的一部分。我们的数据集和分析可以在 data.worldgithub 上找到。在这篇文章中,我们链接到了相关的代码和数据集。

介绍

美国运输统计局提供大量航空数据供公众下载。我们的团队受到这些丰富的航班统计数据的启发,并对使用公开可用的数据来预测个别航空公司的一些有价值的东西的应用感到好奇。我们从以下问题着手:

我们能否利用公共航空数据创建一个机器学习模型来预测航空公司的股票价格或收入?

该项目

为了回答这个问题,我们做了 4 个实验。两次失败,两次成功。在估算季度收入时,我们表现最好的实验产生的平均百分比误差仅为 2.5%,与华尔街的收入预测一致。将 WS 投影作为一个特征应用的进一步改进甚至进一步降低了平均百分比误差,达到 0.95%。下面,我们将逐一介绍这些实验的细节。

实验 1——失败:线性回归股票价格预测

我们从 2010-2019 年间 7 家主要航空公司的航班统计数据开始。我们的假设是,像客流量这样的航班统计数据可以用来代表需求。我们添加了燃料支出统计作为每月运营费用的代理,最后为每个航空公司汇编了每月库存数据,用于监督线性回归模型。

Feature coefficient analysis showed that there was little correlation between our features and stock price.

虽然这个练习在探索工具、练习数据操作和提升 matplotlib 技能方面很有价值,但很快就发现我们的特征和股票价格之间没有足够的相关性。航班统计似乎不太适合股票价格预测,股票价格预测深深植根于人类心理。

实验 2——失败:情感分析

从股票价格可能与市场情绪有更好的相关性这一想法出发,我们决定探索是否可以通过对涉及特定航空公司的推文进行 NLP 情绪分析来预测股票拐点。一些初步研究表明,在推特语料库上进行的情感分析已经被用于的几项学术 研究中,以预测股票行为。为了集中我们的研究,我们选择深入研究一家航空公司——西南航空公司。我们做出这一选择是基于他们的中等股票价格,也因为他们拥有美国最大的波音 737 Max 喷气式飞机机队。我们急切地想知道,对这些飞机安全性的负面情绪是否会对股价产生影响。

这个实验似乎很有希望。在搜索发现了一个包含 2015 年 2 月关于航空公司的推文的全标签情感数据集用作验证数据集后,我们注册了一个 twitter 开发者账户(等待一天的批准),并使用 Tweepy api 获得了关于西南航空公司的最新推文。

问题:众所周知,Twitter 对他们提供的没有高价的数据非常吝啬(我们说的是每月数百美元)。虽然工具很容易使用,但我们最终只能获得前 10 天的条推文,总共大约 7000 条推文。这对进行情绪分析来说已经足够了,然而,10 天的时间序列对于建立股票价格预测模型来说太小了。

我们决定使用我们获得的数据来测试 AWS 领悟 API ,并为这篇博文生成一些甜蜜的情感词云图形。

Negative, neutral, and positive sentiment extracted from Southwest Airline tweets. The “parallel takeoff” terms came from a heavily recirculated video of a United E-175 and Southwest B737 parallel takeoff from San Francisco International Airport.

实验 3 —成功:线性列回归收入预测

鉴于我们现有的数据、交货时间以及对市场复杂性的相对无知,股票预测似乎超出了我们的能力范围。我们把股票预测从清单上划掉,继续探索收入预测。

收入的问题在于:它只是每季度报告一次。虽然月度数据仍然为我们提供了一个合理大小的数据集,但将该数据滚动到季度级别会将数据集缩减到其初始大小的四分之一。为了克服这一点,我们决定使用一个更大的数据集,其中包括按运营商细分的数据。一个航段本质上代表一种类型的飞行:出发地点、目的地地点和特定的飞机类型。

T-100 Segment (All Carriers) dataset

使用分段数据产生了一个庞大的数据集。我们决定继续我们之前的计划,深入西南航空公司。即使使用仅包含西南段的过滤数据集,我们也能够获得 300,117 行数据和 21 列特征。

项目这一阶段的主要资产是使用 data.world 作为我们的集中项目空间。我们有 3 个人编辑数据,执行查询,在 Jupyter 笔记本上跳来跳去,所有人都远程工作。 Data.world 被证明是一个跟踪我们的数据和分析的极好的集中场所,并为此项目提供了一些本地数据检查工具。我们的项目和数据集已经在平台上公开,可以通过免费账户访问。

Disclaimer: Lydia Guarino works for data.world. All use of the platform for this project was conducted solely for academic purposes.

一旦我们建立了运营商细分市场数据和项目空间,我们就开始搜索其他数据来丰富更广泛的财务状况。虽然获得燃料成本、运营成本和库存数据相对简单,但挑战在于如何组合这些数据,以便对预测季度收入产生最大影响。每个数据集都是在不同的时间尺度上提供的。有些是每日的,有些是每月的,有些是每季度的。

在一些重要的特性工程之后,我们决定将数据组织成一个列回归结构,而不是传统的行回归格式。这意味着我们有一个很宽的数据集,有列,只有 40 行代表 10 年期间的每个季度。这实际上给了我们一个以收入为标签的给定季度的整个航班网络的行表示。从这个结构中,我们能够确定哪些部门与公司收入的相关性最大。也许不出所料,这一过程确定了航空公司在达拉斯爱田(DAL)、休斯顿霍比(HOU)和拉斯维加斯麦卡伦(las)的几个“大型车站”与收入预测的相关性最高。一旦我们确定了这些航段,我们就决定将重点放在这种相关性上,并从整个网络中筛选出每个季度前 5、10 和 25 个客运航段的特征数量。将包含的功能从 9126 个减少到 60 个。

Sample of Experiment 3 data

我们通过八个流行的线性回归模型运行我们的数据: Ridge、RidgeCV、Lasso、LassoCV、LassoLars、ElasticNet、ElasticNetCV 和 BayesianRidge - 比较结果。我们调整了每个模型的 alphas,并评估了 RMSE、MSE 和平均误差百分比的预测。结果是一个相当可靠的预测模型,其中 ElasticNet 和 Lasso 表现最好。套索和弹性线选择具有最具影响力系数的要素以用于估算。这消除了一些噪声,提高了 RMSE 和 MSE 值。ElasticNet 实现了 0.0959 的RMSE 和 6.4%** 的平均百分比误差。Lasso 实现了 0.0955 的 RMSE 和 5.7%的平均百分比误差。**

****

MSE and RMSE results for each model type and top segment splits by passenger count for Experiment 3

实验 4——赢家:使用邻近可比住宅假设的线性回归收入预测

实验 3 的结果很有希望。他们当然表明,我们的数据集与收入有足够的相关性,值得进行另一次迭代。对于这种变化,我们回到我们的航段数据集,通过单个航段对收入的影响来重新评估。我们形成了一个假设,即该模型可以被认为是一个平均邻里住宅价格估计算法的变化。

我们将数据集重新格式化为 37,896 行季度细分数据,并执行以下算法:

最佳表现的回归类型是超参数调整后具有α2 的岭;该模型在 2013 年 Q1 至 2019 年 Q2 期间产生了平均测试误差 2.5% 值得注意的是,我们选择在本次评估中排除 2010 年至 2012 年的值,因为我们确定这些值产生的结果不太可靠,因为高可信度预测错过了大衰退的残余影响和通货膨胀的显著差异。这种模式将出发执行座位数和某些城市对如 FLL-IAD 作为重要特征。此外,它还强调了 737 Max 喷气式飞机是 2018 年第四季度的一个重要特色。

为了进一步评估该模型的表现,我们将其与西南航空公司季度收入的平均误差百分比进行了比较,这是由华尔街收入共识预测的。WS 模型的平均百分比误差令人震惊,仅为 0.617% 。下图显示了我们如何对照 ws 估计以及我们的模型随时间推移的运行错误。

我们对这些结果很满意,但想看看我们是否能进一步完善它。我们将 WS 投影作为一个附加特征应用于我们的模型,并能够产生平均百分比误差 0.95% (见下图)。我们的模型甚至在某些时间段(2017 年第四季度和 2018 年 Q1)超过了 WS 预测,在蓝线穿过橙色线的地方可以看到这一点。不幸的是,图表显示,我们的模型在大多数时间内偏离了 ws 预测,但考虑到我们仅用了几周的数据工程就处理了公开可用的数据,这仍然令人印象深刻。

You can read about possible influences for the inaccuracy spike in 2015, here.

结论和未来工作

我们能否利用公共航空数据创建一个机器学习模型来预测航空公司的股票价格或收入?

经过 4 次实验,我们可以有把握地说,从航班统计数据预测股票价格是一场失败的战斗,Twitter 很吝啬,我们可以从航班、股票和支出数据中准确预测收入,并且在这个领域还有许多进一步探索的空间。

我们正在构思想法,试图通过 1D 卷积神经网络方法来击败 WS 的收入预测,使用每月航班和财务数据作为时间序列来预测收入行为。

我们感谢亚历克斯·迪马基斯教授的支持。我们的代码和数据集在整篇文章中都有链接,但你可以在 data.worldgithub 上看到完整的项目和回购。

基于快速 RCNN 的卫星飞机检测

原文:https://towardsdatascience.com/airplanes-detection-for-satellite-using-faster-rcnn-d307d58353f1?source=collection_archive---------6-----------------------

对象检测、更快的 RCNN、数据增强、飞机、卫星图像等等…

介绍

物体检测是一项与计算机视觉和图像处理相关的计算机技术,处理在数字图像和视频中检测某类语义物体实例

目标检测是已经取得巨大成功的领域之一。它被用于许多领域,如人脸检测(脸书用于识别人)、肿瘤检测(用于医学领域)等。

自从计算机视觉中的深度学习出现以来,像物体检测这样的任务已经变得相对容易和有效。
深度学习模型比早期的计算机视觉方法提供了更好的准确性、更少的时间消耗、更低的复杂性和更好的整体性能。
深度学习为对象检测提供了优于传统计算机视觉方法的出色结果,导致了深度学习模型的广泛使用。

其中表现最好的物体检测(深度学习)算法包括:
1。RCNN(基于区域卷积神经网络)
2。快速 RCNN
3。更快的 RCNN
4。SSD(单次多盒探测器)
5。YOLO(你只看一眼)

在本文中,我将使用更快的 RCNN(FRCNN)来演示对象检测的突出用途。

数据

数据集取自 kaggle,你可以在这里找到它
它包含 400 张训练图像和 100 张测试图像。边界框保存在 XML 和 CSV 文件中。

An image from the training set

数据集包含计算机生成的飞机卫星图像。

从数据集可以看出,一些图像不包含与背景高度可区分的对象(飞机),即飞机在颜色、纹理和外观方面与背景有些相似。
例如,考虑以下图像:

你能看见多少架飞机??你能看见一架飞机吗???!!
嗯,这是来自训练集的图像,你可以看到在图像中找出飞机是多么困难(即使对一个人来说)。

顺便说一下,这是带有边框的图像,显示有两架飞机。(你想通了吗??)

但是,这种很难区分背景和对象的图像会对模型性能产生影响吗?
如果你有很强的计算机视觉背景,那么你一定知道物体检测的初始方法首先将图像转换为灰度,然后寻找边缘或梯度变化……
所有这些都会受到图像中物体外观的很大影响。如果图像和物体非常相似(如上图所示),那么这些方法将会失败。这种情况称为杂乱回波,在这种情况下,很难区分对象和背景。
但是它也会影响深度学习模型吗???
这些神经网络在寻找的是如何将物体从背景中区分出来(识别),从而将其包围在一个包围盒中(定位)。这些被称为负责对象检测的特征。
如果物体和背景之间的差异较小,很难发现这样的特征。
因此,这个数据集是一个很好的例子,用于测试深度学习模型-FRCNN 的性能。

方法

你可以在这里找到这个问题的 python 代码

首先,400 张图片没有用武之地。为了让深度学习模型发挥最佳性能,我们需要大量数据。

深度学习模型的性能与训练数据量成正比是众所周知的事实。数据越多,性能越好。
像 FRCNN 这样的模型需要大量的训练数据才能产生好的结果。然而,很少有(如果不是没有的话)用于对象检测的数据集具有充足的训练数据。
在这个数据集中,我们也只有 400 张图像,这不足以产生好的结果。
因此,要解决这一数据增强问题,就要出手相救。
这个数据集再次成为一个很好的例子,展示了数据增强对于深度学习模型如何产生良好结果是至关重要的。

数据扩充

数据扩充是从现有的训练数据中人工创建新的训练数据的技术。 如果你一直在研究计算机视觉的深度学习模型(无论是图像分类、定位还是检测等),那么你一定遇到过数据增强这个术语,并意识到它的重要性。

数据扩充生成用于训练的新图像,从而提高模型性能。
数据增强为什么有效??
现代深度学习算法,如卷积神经网络,或 CNN,可以学习对图像中的位置不变的特征。然而,增强可以进一步帮助这种变换不变的学习方法,并且可以帮助模型学习对于诸如从左到右到从上到下排序、照片中的亮度等变换也不变的特征。

有各种各样的数据增强技术,以下是在这种方法中使用的:
1。水平翻转
2。缩放比例
3。翻译
4。旋转
5。剪切
6。以上的各种组合

与图像分类相比,数据扩充对于对象检测是不同的。在图像分类中,您只需要相应地改变图像,但是在对象检测中,您还需要改变和调整边界框。例如,如果您水平翻转图像,那么您也需要翻转边界框。

牢记边界框约束,我实现了数据扩充,总共生成了 4400 张图像。
图像数量仍然不多,但是因为只有 100 个图像要测试,并且只有一个类别要检测,所以这么多就够了。
但我强烈建议在不创建不必要数据的情况下,尽可能地增加训练数据(这种情况在数据扩充过程中经常发生)。

现在我们已经有了一些可以训练的数据,让我们来实现这个模型。

FRCNN

我建议您从上面提到的 GitHub 资源库下载代码文件,以充分利用本文。

更快的 RCNN 是一个非常棒的深度学习模型,表现极其出色,这一点我们即将搞清楚。

首先,组织数据。
训练集图像被移至名为 train_images 的文件夹,测试集图像被移至文件夹 test_images。 一个空文件夹结果 _imgs 被创建,该文件夹将包含所有带有边界框的输出图像。

通过在命令提示符下执行下面一行,安装了所有需要的库和包(将当前文件夹作为工作目录):

pip install -r requirements.txt

批注文件(annotate.txt)已创建,看起来像:

annotate.txt

它包含训练集图像的文件夹名称、图像名称和边界框坐标以及对象的类别。
注意,边界框坐标的顺序为:xmin、ymin、xmax 和 ymax。

注释文件中的条目将根据数据扩充的实现方式而变化。

通过在命令提示符下执行以下行来运行该模型:

python train_frcnn.py -o simple -p annotate.txt

我已经运行了 800 个时期的代码,每个时期有 20 次迭代,人们可以改变这些数字以获得更好的准确性,比如增加时期的数量。

强烈建议使用 GPU 来运行上述代码,因为训练可能需要很多时间,尤其是对于大量的历元。

培训完成后,是时候测试模型了。
为了得到输出图像,执行以下命令:

python test_frcnn.py -p test_images

执行该命令时,可以看到输出图像,其边界框保存在 results_imgs 文件夹中。

以下是我获得的一些结果:

上面的图像显示了 FRCNN 在目标检测方面的出色表现。
通过使用数据扩充生成更高质量的图像并增加历元数,可以增强模型性能。

现在,让我们看看在没有进行数据扩充的情况下获得的结果,保持历元和迭代的数量不变。

可以看出,结果不如先前的结果好,在先前的结果中实现了数据扩充。
该模型未能正确识别飞机,而是将非飞机物体识别为飞机。即假阳性和假阴性的数量很高。

这表明了数据增强如何有助于减少错误并提高深度学习模型的性能。

结束注释

物体检测是一个很好的探索领域。
我见过许多用于各种场合的物体检测模型,例如用于自动驾驶汽车、手机、安全等,但将其用于卫星对我来说有些陌生。

此外,更快的 RCNN 名副其实,并产生很大的结果。

我在这篇文章中的唯一目的是分享使用更快的 RCNN,而不是如何实现它,所以如果您在运行上述代码时遇到任何错误或有任何疑问,请随时在评论部分提问。

人工智能对人类的完全控制

原文:https://towardsdatascience.com/ais-auto-complete-control-over-humanity-821d0ac7784c?source=collection_archive---------18-----------------------

利用这个建议泡沫当然很容易,但这对人类来说是正确的吗?

Photo by Sam Carter on Unsplash

人工智能(AI)机器学习(ML) 算法的进步将继续释放创新,提高人类的效率和生产力。人工智能和人工智能的领域非常广泛,有无数的用例。在某些情况下,人类的控制将完全移交给由人工智能和人工智能驱动的机器,而其他人将利用机器协助人类提供的好处。出于讨论的目的,AI 和 ML 用例将被分为以下两个高级类别:

第一类

人类被取代:人类将任务的控制权完全交给机器。

类别 2

人类得到增强:机器协助人类完成一项任务。

今天,我们正在见证自动驾驶汽车(AVs)的“学习”阶段,各公司正在教授车辆如何驾驶,最终目标是实现 5 级自动驾驶。对 Level 5 AV 技术的追求是人类如何将驾驶车辆的任务控制完全交给机器的一个例子,这就是 AV 算法。这是类别 1 的一个例子。

接下来,让我们探索类别 2 的例子。在工厂环境中,任务是完成给定的零件或组件。通过利用计算机视觉使机器人能够在工厂里帮助人类的技术是一个很好的例子,说明了机器人的力量和耐力可以增强人类的灵活认知。一个更微妙的例子是像 YouTube 和网飞这样的公司提供的推荐算法;这些算法帮助人类有效地解决选择下一个流的任务。当必须撰写电子邮件和信息时,自动完成语言算法(例如,谷歌的智能撰写)正在通过提供易于接受的建议来帮助人类加快这项任务。

这是对人工智能和人工智能的一个不全面的概述,仅仅是为了给读者一个日常可能性的基本理解。有关这些技术的更多信息,请参考《连线》的短片。

在之前一篇题为“”AI 和‘无用’类 的文章中,你的作者讨论了今天人类如何机械地转换他们的工作,以便它们可以由不知道基底的智能来执行。简而言之,今天的人类正在为生物智能(人类)被硅智能(机器)取代奠定基础。看来真正的问题不是机器人有一天会取代我们的工作。相反,这一过程已经开始,人类在不知不觉中带头冲锋。“ AI 和‘无用’类”这篇文章关注的是人类控制完全被放弃的第一类。请参考这篇文章的完整讨论以及人工智能的正式定义。

本文的剩余部分探索机器帮助人类的第二类。具体来说,自动完成语言用例及其对人类发展的意义。

自动完成语言算法

当你在回复电子邮件的过程中,你可能会注意到选择短语的选项,如“谢谢!”或者“太好了!”

Autocomplete Scenario A

或者当你正在键入一封电子邮件时,你注意到应用程序为你应该键入的内容提供了一个建议。如果你按 tab 键,建议将被接受。

Autocomplete Scenario B

如果您遇到过这些场景中的任何一个,那么您就对自动完成语言算法有了第一手的体验,这在业内被称为自然语言处理 (NLP)。软件应用程序利用该算法为人类提供从机器生成的响应中进行选择的选项。以下是谷歌对其智能撰写功能的描述,这是该公司在其流行的电子邮件应用程序(Gmail)中使用的自动完成算法:

“你可以让 Gmail 帮你更快地写邮件。智能撰写功能由机器学习提供支持,将在您键入时提供建议。”

-谷歌

注意:Google 为用户提供了打开或关闭智能撰写功能的选项。默认情况下,该功能是打开的,但可以通过这些指令轻松关闭。

提高生产力的诱惑听起来很有吸引力,但我们真的希望我们与他人的交流受到机器算法认为我们与他人的对话应该是什么样的影响吗?如果我们不选择机器的建议,而是以不同的方式说一些话,包括我们在那个时候独特的个性,会怎么样?

收到一个明显的自动完成信息会不会让接收方觉得他们不值得另一个人花时间从头生成一个可信的回复?他们会想:“老实说,打一个句子要花多少时间?”

如果你停下来想一想,像谷歌的自动完成语言算法正在控制我们如何与他人交流,这是令人担忧的。这就相当于当你在和别人打电话时,有人在你的一只耳朵里小声告诉你接下来该说什么。大多数人会觉得这种情况很唐突和可笑,但是它真的与自动完成文本建议有那么大的不同吗?

谷歌声明,“智能撰写个性化建议是根据你平时的写作方式量身定制的,以保持你的写作风格。”然而,这并不是故事的全部。事实上,算法不知道你的写作风格,所以它的建议是(统计)预测;该算法通过反馈回路进行猜测和不断学习,以改进其预测。

总而言之,用户写的任何东西都会“反馈”给算法进行训练。这是反馈回路,它影响未来的预测(建议)。这意味着我们选择的机器建议成为我们写作风格的一部分,而这些建议只不过是机器在已知数据的情况下的最佳猜测。

最终,用户的原创想法和算法的预测之间的界限变得模糊了。用户的书写风格直接受到算法的影响,因此受到损害。

人类是群居动物,我们人与人之间的交流技能已经进化了几千年。当我们开始依赖一种算法来判断下一步该说什么时,我们就冒着停止这种进化进程的风险。当使用自动完成时,我们如何确保我们没有被操纵,并且来自训练数据的偏差没有影响建议?

当我们默认机器生成的建议而不是人类生成的响应时,可以想象这是朝着我们都想避免的反乌托邦世界迈出的一步。这是一条潜在的黑暗、危险的道路,在我们过度热情地接受下一个弹出的建议泡沫之前,我们需要考虑后果:“谢谢!”

阿卡什恒河(银河)

原文:https://towardsdatascience.com/akash-ganga-milky-way-c08a57936365?source=collection_archive---------16-----------------------

基于迁移学习的星系形态学

这项工作是作为莫阿德实习项目的一部分完成的。

天文成像导论

A video comparing the age of the universe to the time humankind has spent on science (most of our scientific progress has taken place in time that is equal to 0.000 0001% Age of Universe)

四个世纪前,伽利略仰望月亮,沉思夜空。快进:我们在月球上有足迹,不久也将在火星上有足迹!人类在地球上短暂的时间里取得了巨大的进步。我们已经发现了宇宙的起源,并且模拟了宇宙的未来。

我们最初对夜空的研究是用肉眼完成的,然后用简单的望远镜增强我们的视力。这些研究使用了夜空的“光学图像”。

An image of the night sky using ‘optical light’.

除了光学光图像之外,任何类型的电磁辐射都可以成像。例如,当你去看一个腿骨折的医生时,医生可能会用“x 光”而不是“光学光”来拍摄你的腿。

在下面的图片中,我们有两张图片,一张使用光学光线,另一张使用红外线光线。

The image in optical light (left) and infrared light (right). [NASA/IPAC]

随着地面望远镜和卫星的发展(哈勃太空望远镜于 1990 年发射),我们可以用不同类型的电磁辐射拍摄宇宙照片。在下面的图片中,我们看到的是同一个星系的图片,但是有五种不同类型的光。

The image of a galaxy in the gamma, visible, UV, radio and infrared spectrums. [NASA]

借助先进的望远镜,天文学家已经收集了无数的夜空图像。他们的工作帮助我们绘制了电磁波谱中的宇宙地图,这些图像和地图让我们对宇宙有了更多的了解。如果我们继续研究这些图像和地图,我们一定会继续取得突破性的发现。

唯一的问题是我们的天文学家要处理的数据太多了。下面的图片,称为极端深场,从夜空的 1 度拍摄,有超过 3000 个星系!对这些图像中的所有星系进行分类和标记是一个相当大的挑战(让我们甚至不要考虑标记这些星系中我们看到/看不到的所有恒星)。

The eXtreme Deep Field, a photo assembled by combining 10 years of NASA Hubble Space Telescope photographs taken of a patch of sky at the centre of the original Hubble Ultra Deep Field. The image on the left is what is visible with a naked eye, while the image on the right is the Deep Field image of a small section of the night sky [NASA, ESA, and the HUDF09 Team]

我们目前对这些图像中的星系进行标记和分类的方法是众包图像:获得平民的帮助来帮助分类星系( GalazyZoo )。然而,使用计算机来帮助分类可能是一个更好的方法。一旦经过机器学习训练,计算机在这项任务中将会更加胜任。

我们的项目 Akash Ganga 的目标是创建一个机器学习模型来帮助星系分类。

我们研究星系形态学的独特方法——迁移学习

一些组织过去曾试图通过从零开始训练 ML 特工来训练 ML 特工执行星系分类。对于这个 Akash Ganga,我们使用迁移学习来训练我们的模型。

迁移学习的概念是采用预先训练的 ML 模型,如 Google 的 Inception net 或 VVG16,并修改模型的末端层以适应新的分类需求。迁移学习的好处是,VVG16 等训练出来的模型都经过了上千小时的训练。许多这种训练实际上可能涉及到教授图像的模型基本特征提取。通过使用预训练模型,我们已经为特征提取准备好了权重。剩下要训练的,就是添加任何新的层,以允许新类的分类。

**

A diagram explaining Transfer Learning. The ML model on the left is trained to classify images into either ‘dog’ or ‘cat’. On altering the last layer, we can now train the ML model to classify images of different types of galaxies instead, as shown on the right.

我们的数据——艾菲吉数据集

为了训练我们的 ML 模型,我们使用了 EIFIGI 数据集。EIFIGI 数据集拥有五个乌格里兹和光带中的星系图像,以及使用这五个光带制作的复合彩色图像(有关乌格里兹光带及其波长的更多信息,请参考维基百科关于光度系统的文章)。

我们没有像通常那样将一幅图像的所有光带组合在一起,而是决定在训练时将它们分开。这是一种略微非传统的方法,因为当结合在一起时,ugriz 波段提供了更多的信息来理解特定的图像。做出这一决定是为了使 Akash Ganga ML 模型对光带具有鲁棒性(以便不管用于拍照的光带如何,ML 模型仍然可以对图像中的星系进行分类)。

此外,数据集有很大的偏差:与螺旋或椭圆星系的图像数量相比,矮星系的图像数量非常少。为了防止矮星系的错误分类,我们决定通过剪切矮星系图像来生成新的矮星系图像,以便矮星系和其他星系图像的数量可以比较。

我们用于星系分类的训练 ML 模型

我们的 ML 模型的基础是预训练的 VVG16(也称为牛津网)模型。我们在这个模型的末尾添加了几个层,并用 EIFIGI 数据集训练了额外的层,以将星系区分为椭圆、透镜状、螺旋或不规则星系类型。

在 Google Colab 上对模型进行 60 多个小时的训练后,我们的准确率达到了 70%,并稳定在该值。这告诉我们,也许迁移学习并不是星系分类的合适方法,也许所有不同的波段对星系形态都是至关重要的。

结论

像 VVG16 这样的模型被训练来区分非常不同的类别(例如,狗和椅子),这些类别是复杂的(狗的图像可能非常复杂)。另一方面,星系的图像包含简单的形状(大多数时候,只是像椭圆、螺旋等基本形状)。因此,使用迁移学习可能是一个障碍,因为对于星系分类,可能不需要复杂的特征分析。

如前所述,星系形态学的传统方法包括在训练 ML 模型之前将来自几个不同光带的数据分组。也许我们的模型由于缺乏其他波段的数据而无法提高其训练精度。尝试对光带进行分组,然后进行训练可能是提高模型准确性的一种方法。

我们所有的代码都可以在这个项目的仓库中免费获得。我们希望这项工作可以作为任何对星系形态学感兴趣的人的基础!

艾丽莎,艾丽克丝,还是艾尔?

原文:https://towardsdatascience.com/alexa-alex-or-al-7a7e28fb4736?source=collection_archive---------12-----------------------

3 条建议来对抗人工智能助手中的性别偏见

Alexa, Alex, or Al? The default gender of voice assistants reveals entrenched gender biases (Credit: Luniapilot)

这篇博客文章是最近一期具体化的 AI 的一部分,这是一份关于 AI 化身、虚拟生物和数字人类背后的最新新闻、技术和趋势的双周时事通讯。

当谈到性别不平等时,我们的科技世界充满了令人不安的趋势。最近的一份联合国报告“如果可以,我会脸红”警告说,像主要由女性配音的人工智能实际上会强化有害的性别刻板印象。Siri 被苹果收购前的联合创始人达格·基特劳斯(Dag Kittlaus)在 Twitter 上公开反对对 Siri 性别歧视的指控:

重要的是要承认,Siri 的性别与其他语音助手不同,在早期是可配置的。但当你注意到 Siri 对极不恰当的评论“你是个荡妇”的回应实际上是联合国报告的标题:“如果可以,我会脸红”时,该产品的地位就变得更难界定了。因此,在这篇文章中,我想讨论语音助手的社会和文化方面,特别是,为什么它们被设计成性别,这引起了什么样的伦理问题,以及我们如何解决这个问题。

人类将科技拟人化

像 Alexa、Siri 和 Cortana 这样的虚拟助手,就人工智能而言,都是女性:它们有女性的名字、女性的声音和女性的背景故事。尽管谷歌助手有一个中性的名字,但默认情况下是女性。最值得注意的是,这些机器的基本功能是接受它们的人类主人的命令。

尽管这些助理的语言、口音和性别有更广泛的选择,但他们最初的女性特征仍然偶尔出现。例如,当用户评论说:“你很漂亮”,Alexa 用感激的语气回复,“你能这么说真好!”然而,与女性家庭助理相反,在给出指令方面承担权威角色的机器人有男性名字和角色,如人工智能律师罗斯和财务顾问马库斯

科技记者乔安娜·斯特恩(Joanna Stern)解释说,人类倾向于为人工智能构建性别,因为人类是“社会人,他们更好地与相似的事物联系在一起,是的,包括女孩和男孩。”但是为什么是女性呢?研究表明,女性的声音被认为是“温暖的”,例如卡尔·麦克多曼在 T2 的研究。前斯坦福大学教授克利福德·纳斯在他的书《为演讲而连线的中引用了一些研究,表明大多数人认为女性的声音是合作和有益的。联合国报告引用了其他研究,表明我们的偏好更加微妙,例如我们对异性的偏好。但是,传统的社会规范认为妇女是养育者,其他社会建构的性别偏见也在起作用。施巧灵·亨佩尔连线中总结得很好:因为我们“想成为[技术]的老板……我们更有可能选择女性界面。”

Source: UN Report “I’d blush if I could”

2 性别偏见的问题

由于女性的声音往往被认为更令人愉快和富有同情心,人们更有可能为他们执行的命令查询任务购买这样的设备。因此,对于广泛的商业采用来说,看似符合逻辑的决定是构建女性 AI 助手。吉尔·莱波雷尖锐地揭露了科技世界的虚伪:“女性工作者并没有因为是人类而得到更多的报酬;相反,女性机器人卖得更好。”

更令人不安的是,几乎没有女性参与创建语音助手。在男性主导的技术环境中,决策者有意或无意地设计了不利于女性技术人员的系统——从招聘到职业发展。来自《纽约时报》的 Megan Specia 写道,女性仅占“该领域人工智能研究人员的 12%和软件开发人员的 6%。”这种性别失衡有两个问题。首先是产品层面。正如我们在上一期中所讨论的,排斥女性贡献者或忽视她们反馈的工程团队最终可能会创造出像 Clippy 这样的性别专属产品,或者语音助手中的性别偏见功能,比如对性别歧视评论的不当回应。

Source: UN Report “I’d blush if I could”

除此之外,语音助手提出了第二个更大的问题,这与黄哲伦戏剧《蝴蝶君》中的一段话产生了共鸣:“为什么在京剧中,女性角色由男性扮演?…因为只有男人知道女人应该怎么做。”联合国报告指出,主要由男性创造的女性虚拟助理发出了一个信号,即“女性是乐于助人、温顺且渴望取悦的帮手,只需按一下按钮就能找到”,从而强化了性别偏见。随着扬声器设备在不认同西方性别陈规定型观念的社区中的广泛采用,语音助手的女性化可能会进一步加深和传播性别偏见。

反对科技领域性别偏见的 3 条建议

从打击科技世界性别失衡的更广泛意义上来说,我们 Embodied AI 完全赞同联合国报告(第 36 至 65 页)概述的弥合数字技能性别差距的 15 项建议。女性语音助手造成的负面影响只是我们社会一种普遍疾病的症状。只有解决性别偏见的根本原因,我们才能最终有一天看到科技社区性别平等的长期进步和改善。

在产品层面,我们提出了三条建议,语音助手公司可以立即实施,以对抗产品中的性别偏见:

  1. 使产品开发过程 更具包容性。在男性主导的环境中,在产品创造和测试中包括所有性别将使人工智能技术更加注意性别差异。在设计产品和做出重要决策(如语音助手应该如何回应厌恶女性者的侮辱)时,我们的团队中有性别多样性将使我们的产品更好,有助于建立一个更具性别包容性的工作环境,并鼓励所有性别参与技术。
  2. 通过允许用户定制自己喜欢的声音和性格,让用户不要把他们的语音助手和女性联系在一起。这意味着开发智能扬声器的公司应该停止默认提供女性声音,并考虑重新品牌化其产品,以减少其与女性特征的联系。
  3. 通过包含一系列男性、女性和无性别的声音和个性,为用户提供广泛的定制选项。例如, Q世界上第一个无性别的数字声音的诞生,不仅增加了用户的选择范围,也使技术更具性别包容性。此外,诸如 WaveNet 之类的算法可以模仿约翰·传奇或任何其他人的声音,也可以实现这些类似的效果。

拉芬

绝不是所有语音助手制作者都有意加剧社会性别刻板印象。然而,重要的是,我们都要意识到一项技术创造将如何拥有自己的生命,以及即使是我们无意的行为如何将某些人排除在技术社区之外,并造成我们无法预见的不平等。脸书的创始人马克·扎克伯格有一句著名的格言:“快速行动,打破常规,”有人可能会说,这种思维模式可能导致了这些性别偏见的语音助手的产生。我们可以应用同样的格言,快速将女性纳入科技领域,并开始改变这些语音助手,使其更具性别包容性。

作者 那华 供稿来自 氹欞侊埃莉斯大卫莫里茨 罗兰**

这篇博客文章是最近一期 Embodied AI 的一部分,这是一份关于 AI 化身、虚拟生物和数字人类背后的最新新闻、技术和趋势的双周刊。确保在这里订阅:****

** [## 人工智能化身时事通讯

具体化人工智能是你的权威人工智能化身通讯。报名参加最新新闻、技术…

www.embodiedai.co](http://www.embodiedai.co/)**

AlexNet:挑战 CNN 的架构

原文:https://towardsdatascience.com/alexnet-the-architecture-that-challenged-cnns-e406d5297951?source=collection_archive---------2-----------------------

几年前,我们还在使用由数万张图片组成的小型数据集,如 CIFAR 和 NORB。这些数据集足以让机器学习模型学习基本的识别任务。然而,现实生活从来都不简单,有比这些小数据集中捕捉到的更多的变量。最近,像 ImageNet 这样的大型数据集的可用性,包括数十万到数百万的标记图像,推动了对极其强大的深度学习模型的需求。然后来了AlexNet

Photo by Casper Johansson on Unsplash

问题。卷积神经网络(CNN)一直是物体识别的首选模型——它们是易于控制甚至更易于训练的强大模型。当在数百万张图像上使用时,它们没有经历任何令人担忧的过度拟合。它们的性能几乎等同于相同大小的标准前馈神经网络。唯一的问题是:它们很难应用于高分辨率图像。在 ImageNet 规模上,需要有一种创新,这种创新将针对 GPU 进行优化,并在提高性能的同时减少训练时间。

数据集。ImageNet:由超过 1500 万张高分辨率图像组成的数据集,标记有 2.2 万个类别。关键是:网络抓取图像和众包人类标签。ImageNet 甚至有自己的竞争对手:ImageNet 大规模视觉识别挑战(ILSVRC)。该比赛使用 ImageNet 图像的子集,并要求研究人员实现最低的前 1 名和前 5 名错误率(前 5 名错误率是指正确标签不是模型的五个最可能标签之一的图像的百分比)。在这场竞争中,数据不是问题;大约有 120 万幅训练图像、5 万幅验证图像和 15 万幅测试图像。作者通过裁剪掉每幅图像的中心 256x256 像素的小块,对他们的图像实施了 256x256 像素的固定分辨率。

Convolutional Neural Networks that use ReLU achieved a 25% error rate on CIFAR-10 six times faster than those that used tanh. Image credits to Krizhevsky et al., the original authors of the AlexNet paper.

AlexNet。该架构由八层组成:五个卷积层和三个全连接层。但这并不是 AlexNet 的特别之处;这些是卷积神经网络的新方法所使用的一些特征:

  • ReLU 非线性。AlexNet 使用校正线性单位(ReLU)代替当时标准的双曲正切函数。ReLU 的优势在训练时间上;使用 ReLU 的 CNN 能够在 CIFAR-10 数据集上达到 25%的错误,比使用 tanh 的 CNN 快六倍。
  • 多个 GPU。过去,GPU 仍然拥有 3gb 的内存(现在这种内存应该是新秀数字)。这尤其糟糕,因为训练集有 120 万张图片。AlexNet 允许多 GPU 训练,将模型的一半神经元放在一个 GPU 上,另一半放在另一个 GPU 上。这不仅意味着可以训练更大的模型,而且还减少了训练时间。
  • 重叠汇集。CNN 传统上“汇集”相邻神经元组的输出,没有重叠。然而,当作者引入重叠时,他们看到误差减少了约 0.5%,并发现具有重叠池的模型通常更难过度拟合。

Illustration of AlexNet’s architecture. Image credits to Krizhevsky et al., the original authors of the AlexNet paper.

过度拟合问题。 AlexNet 有 6000 万个参数,这是过度拟合的一个主要问题。采用两种方法来减少过度拟合:

  • 数据扩充。作者使用标签保留转换使他们的数据更加多样化。具体来说,他们生成了图像平移和水平反射,这使训练集增加了 2048 倍。他们还对 RGB 像素值执行了主成分分析(PCA ),以改变 RGB 通道的强度,从而将 top-1 错误率降低了 1%以上。
  • 辍学。这项技术包括以预定的概率(例如 50%)来“关闭”神经元。这意味着每次迭代使用模型参数的不同样本,这迫使每个神经元具有更强大的功能,可以用于其他随机神经元。然而,辍学也增加了模型收敛所需的训练时间。

结果。在 2010 版 ImageNet 竞赛上,最好的模型取得了 47.1%的 top-1 错误和 28.2%的 top-5 错误。AlexNet 以 37.5%的前 1 名错误和 17.0%的前 5 名错误大大超过了这一数字。AlexNet 能够识别偏离中心的物体,并且它对每张图像的前五类中的大多数都是合理的。AlexNet 以 15.3%的前 5 名错误率赢得了 2012 年 ImageNet 比赛,而第二名的前 5 名错误率为 26.2%。

AlexNet’s most probable labels on eight ImageNet images. The correct label is written under each image, and the probability assigned to each label is also shown by the bars. Image credits to Krizhevsky et al., the original authors of the AlexNet paper.

现在怎么办? AlexNet 是一个非常强大的模型,能够在非常具有挑战性的数据集上实现高精度。然而,删除任何卷积层都会大幅降低 AlexNet 的性能。AlexNet 是任何物体探测任务的领先架构,可能在人工智能问题的计算机视觉领域有巨大的应用。在未来,AlexNet 可能会比 CNN 更多地被用于图像任务。

作为使深度学习更加广泛适用的里程碑,AlexNet 还可以被认为将深度学习带到了自然语言处理和医学图像分析等相邻领域。

我在下面链接了一些有趣的资源。

理解 Dijkstra 算法和 Bellman-Ford 算法的边缘松弛

原文:https://towardsdatascience.com/algorithm-shortest-paths-1d8fa3f50769?source=collection_archive---------5-----------------------

Photo by Denys Nevozhai on Unsplash

最短路径问题 的目的是寻找从起始顶点到目标顶点的最短路径。我们广泛使用算法来解决最短路径问题,从竞争性编程到谷歌地图方向搜索。理解了关键的概念,“ 边缘松弛 ”,就真的更容易理解具体的算法了,比如说 Dijsktra 算法或者 Bellman-Ford 算法。换句话说,如果不理解边缘松弛,可能很难让这些算法成为你自己的。在这篇文章中,我将重点讨论边缘松弛,并解释解决最短路径问题的一般结构。此外,为了更好地理解,我们将介绍 easy 算法及其实现。我使用 Python 来实现。该职位的结构如下:

  1. 什么是最短路径问题?
  2. 什么是边缘松弛?
  3. 放松的顺序
  4. 有向无环图的最短路径及其实现

请注意,我们不对待 Dijkstra 算法或 Bellman-ford 算法。

1.什么是最短路径问题?

在这篇文章中,我解释了最短路径问题中的单源最短路径问题,其中我们需要找到从一个起始顶点到所有其他顶点的所有路径。我将最短路径定义为加权图中所有其他路径中从起始顶点到目标顶点的最小加权路径。在这里,你可以认为加权路径中的“加权”是指到达目标顶点(某个顶点)的到达成本。从这里开始,当我说一个公正的图,它意味着一个加权的图。

在下图中,让我们考虑从起始顶点 S 到其他顶点 A 和 b 的最短路径。

从顶点 S 到顶点 A 的最短路径变成“S→A”。在上图中,从顶点 S 到顶点 A 只有一条路径,所以我们不需要关心权重。另一方面,我们可以找到从顶点 S 到顶点 B 的两条路径,分别是“S→B”和“S→A→B”,最短路径就变成了“S→A→B”。在“S→B”中,路径的权重是 3,但在“S→A→B”中,路径的权重变成了 2,而且最短:1+1=2。我们可以认为最短路径的权重是从起始顶点到一个顶点的最短距离。

2.什么是边缘松弛?

在这里,我将解释解决最短路径问题的重要且常用的概念,即边松弛。通常,您可以通过使用边松弛来解决所有最短路径问题。边松弛是计算到达顶点下限的代价的操作。更具体地说,操作将变成:

For the edge from the vertex *u* to the vertex *v*, if *d*[*u*]+*w*(*u*,*v*)<*d*[*v*] is satisfied, update *d*[*v*] to *d*[*u*]+w(*u*,*v*)

顶点 uv 代表图中的邻居,而 d [ u ]和 d [ v 分别代表到达顶点 uv 的到达成本。另外, w ( uv )代表从顶点 u 到顶点 v 的边的重量。总结到目前为止的事情,我们可以把这个图做成下图。

现在我们知道我们可以从起始顶点 S 通过两个顶点到达顶点 u ,并且路径开销为 d [ u 。同样,我们可以从起始顶点 S 通过四个顶点到达顶点 v ,并且该路径花费 d [ v ]。

这里边缘松弛更新 d [ v ]为d[u]+w(uv )当d[u+w(uv换句话说,它将当前到达顶点v(d[v)的到达成本更新为更低的到达成本(d[u]+w(uv )。它更新成本的原因是通过顶点 u 的路径可以更短,因为通过顶点 u 的路径的到达成本将低于当前路径的成本。实际上,最短路径问题的算法通过重复使用边松弛来解决问题。**

我将展示一个例子,我们可以通过重复使用边松弛来解决最短路径问题。让我们像以前一样通过边松弛找到同一图的最短路径。我假设起始顶点为 S,并对图应用边松弛,以获得到顶点 A 和 b 的最短路径。

要应用边松弛,我们需要知道到达成本,但是在搜索之前没有办法知道,所以我们将顶点 A 和 B 的到达成本初始化为无穷大(∞)。顶点的无穷成本意味着我们无法到达那个顶点。另一方面,从起始顶点到起始顶点的到达成本为零,因此我们将顶点 S 的 d 值设置为 0。

我们首先选择并松弛从顶点 S 出来的边,然后松弛从顶点 a 出来的边。首先,我们将边松弛应用到边 SA。

边 SA 满足d【S】+w(S,A)<d【A】,我们设d【A】为d【S】+w(S,A)=1。这里,π[A]代表到达成本dA】的路径中在顶点 A 之前到达的顶点。在这种情况下,π[A]是 S .π[A]= S 表示到达成本的路径 d [A]总是使用子路径,A←S .细节将在下面描述,但我们可以使用π来重构路径。

我们以同样的方式放松边缘人。

边 SB 满足d【S】+w(S,B)<d【B】,所以我们设d【B】为d【S】+w(S,B)=3。对于 d [B]路径重建,我们将π[B]设为 s。随后,我们放松从顶点 a 向外的边 AB。

边 AB 满足 d [A]+ w (A,B) < d [B],所以我们设 d [B】为 d [A]+ w (A,B)=2。一旦我们更新了 B 的 d 值,我们也将π【B】更新为 A,从上图可以发现,从顶点 S 到顶点 A 和 B 的最短距离等于到达成本 d 。我们不能更新更低的 d 值,所以我们完成了边缘松弛。

在这里,让我们确认我们可以通过使用π[A]= S 和π[B]= A 来重建最短路径。在上图中,我们将以重建从顶点 S 到顶点 B 的最短路径为例。从π[B]= A,我们可以知道我们应该在到达顶点 B 之前访问顶点 A。从π[A]= S,我们可以知道我们应该首先访问顶点 S,然后到达顶点 A。顶点 S 是起始顶点,因此我们不能再向后遍历。把我们到目前为止得到的顶点反过来,就可以得到从顶点 S 到顶点 B 的最短路径,“S→A→B”。一般我们可以通过回溯π[v],π[π[v]],π[π[π[v]],…并对获得的顶点进行反转,为顶点 v 重构最短路径。

3.放松的顺序

前一节我们不关心放松边缘的顺序,但是应该怎么决定顺序呢?还是我们真的在乎?似乎我们可以通过随机放松边来获得最短路径。然而,这是不正确的。在这里,我来解释一下为什么要在乎顺序,以及如何选择边缘来放松。

说实话,如果你随机选择和放松边缘,计算效率的真正糟糕的情况是存在的。例如,让我们考虑下面的图表。我假设图中的 d 值已经初始化。

首先,让我们从左到右放松直线边缘。

接下来,我们放松边缘。

然后,我们放松边缘 CE。

在这里,你可能会发现我们可以放松的边缘,如再次。

同样,当我们放松边 AC 时,我们可以再次放松边 CE 和 EG。所以如果我们不注意秩序,我们会一次又一次地放松同样的边缘。在上面的例子中,如果我们从左到右放松边缘,我们可以有效地放松边缘。然而,有太密集的图形,以至于无法像上面的例子那样可视化。所以提前找到一个高效的订单似乎不太现实。这就是我们应该关心放松秩序的原因。

那么,我们应该如何选择和放松边缘。事实上,像 Dijkstra 算法或 Bellman-Ford 算法这样的最短路径算法给了我们一个宽松的顺序。这意味着每个最短路径算法基本上重复边松弛,并根据图的性质(正或负权重、DAG 等)设计松弛顺序。换句话说,我们应该通过观察图形的性质来寻找选择和放松边的方法。总之,每个最短路径算法都有如下的一般结构:

1\. Initialize *d* and Π in the graph
2\. Choose the edge somehow (it depends on the algorithm) and Relax it.

4.有向无环图的最短路径及其实现

在前一节中,我说过我们应该通过观察图形的性质来选择边缘松弛的方式。在这里,我将用 Python 实现来解释 DAG ( 有向无环图)的简单易行的最短路径算法。DAG 是没有圈的图。在这一节,我将解释算法,因为你知道拓扑顺序。如果不熟悉,可以查看我的文章:用 Python 理解深度优先搜索和拓扑排序?

在 DAG 上的最短路径算法中,我们可以通过选择和放松拓扑顺序中的外出边来获得最短路径。具体算法如下:

1\. Initialize the d value of the starting vertex as 0 and the other vertices as ∞
2\. Relax the out-going edges in topological order

让我们看看算法是如何工作的。我展示了这个图,我初始化了这些 d s,拓扑排序如下。我假设起点是 b。让我们试着解决最短路径问题。

每个顶点都是拓扑排序的,所以我们只是从左到右放松向外的边。我们不能从最左边的顶点 A 放松向外的边,所以我们不更新 d

接下来,我们放松从顶点 B 开始的向外的边,它们是 BC 和 BD。一旦我们放松了边缘,我们就更新了π。我们设π[C]为 B,π[D]为 B。

然后,我们从顶点 c 松弛出边。我们不能将出边松弛到顶点 D,所以我们只更新DE】和 d [F】。同样,我们将π[E]更新为 C,将π[F]更新为 C。

我们从顶点 d 更新向外的边。我们只将dE】和π[E]更新为 d。

我们从顶点 e 更新向外的边。我们还将π[F]更新为 e。

没有从顶点 f 向外的边。我们完成了边松弛。最后,我们获得如下最短距离:我们不检查它是否在这里工作,但是我们可以从π重构最短路径。

随后,让我们用 Python 实现 DAG 上的最短路径算法,以便更好地理解。实现如下:在这个实现中,这个代码解决了上面解释中使用的图上的最短路径问题。这段代码评估 d 和π来解决问题。我假设我们已经预先知道了拓扑顺序。

首先,让我们看看图和它的权重是如何表示的。在上面的代码中,图形实现如下:

graph = {'A': ['B', 'C'],
         'B': ['C', 'D'],
         'C': ['D', 'E', 'F'],
         'D': ['E', 'F'],
         'E': ['F'],
         'F': []}
weights = {('A', 'B'): 5, ('A', 'C'): 2,
           ('B', 'C'): 2, ('B', 'D'): 6,
           ('C', 'D'): 7, ('C', 'E'): 4, ('C', 'F'): 2,
           ('D', 'E'): -1, ('D', 'F'): 1,
           ('E', 'F'): -2}

该图的相应数字如下:

例如,当我们查看顶点 C 时, ['C']返回['D ',' E ',' F'],它们是从顶点 C 可到达的邻居。因此这些顶点从顶点 C 构造出向外的边。此外,您会发现权重 [ u 【T7, v 对应于边 uv 的权重。

接下来,让我们看看每一行的角色 dag_shortest_path 以获得最短路径。第 2 行到第 4 行是如下初始化:设置起始顶点的 d 为 0,其他顶点为∞。此外,这些行初始化π以重建路径。

d = {v: INF for v in graph}
d[s] = 0
pi = {s: None}

从 9 到 12 的线对应于边缘松弛。代码中的d _ temp<d[v对应边缘松弛状态下的d[u]+w(uv)<d[v)。当这个条件满足时,它更新 d [ v ]。一旦它更新了 d ,它也会更新π。

d_temp = d[u] + weights[u, v]
if d_temp < d[v]:
  d[v] = d_temp
  pi[v] = u

代码按照拓扑顺序从每个顶点向外的边重复这个过程。这个重复的过程是由两个 for 循环完成的。命令器按照拓扑顺序保存顶点。此外,图形返回顶点以从顶点构建出向外的边。因此,我们通过将来自顶点的顶点视为 u 并将图形**u视为 v 来获得边 uv

for u in torder:
  for v in graph[u]:
    # relax(u, v)

代码解释到此为止。我们不检查结果,但是您可以在您的终端中通过以下命令执行代码:您会发现您可以正确地获得 d 和π。

curl -s [https://gist.githubusercontent.com/yasufumy/e6477c836baa85735f6019bc0b0c1460/raw/ee4885e5d21f009ee490038525887d8fcf80f8d8/dag_shortest_path.py](https://gist.githubusercontent.com/yasufumy/e6477c836baa85735f6019bc0b0c1460/raw/ee4885e5d21f009ee490038525887d8fcf80f8d8/dag_shortest_path.py) | python3

最后,我们来考虑一下这个算法的时间复杂度。在这个算法中,有两个主要的计算部分。一个是拓扑排序。另一个是边缘松弛。在上面的代码中,我们不做拓扑排序,但实际上,我们需要这样做。所以我们应该把它考虑进去。我们可以通过深度优先搜索进行拓扑排序,所以时间复杂度为O(|V|+|E|)。循环的数量只影响边缘松弛的时间复杂度,因为循环中的过程以恒定时间运行。转矩的循环数为| V |而图形 [ u ]的循环数为| E |。所以边缘松弛的时间复杂度为O(|V|+|E|)。综上所述,算法的整体时间复杂度为O(|V|+|E|)。

在这篇文章中,我将重点讨论边缘松弛,并解释最短路径问题及其算法。当你理解了边缘松弛,你就很容易理解 Dijsktra 的算法或者 Bellman-Ford 算法。还有,你可以知道这些算法的区别。感谢您阅读我的文章。

参考

  • 麻省理工学院开放式课程 6.006 第 15 讲:单源最短路径问题
  • 麻省理工学院开放式课程 6.006 复习课 15:最短路径

算法之美:细胞自动机导论

原文:https://towardsdatascience.com/algorithmic-beauty-an-introduction-to-cellular-automata-f53179b3cf8f?source=collection_archive---------8-----------------------

生成复杂逼真结果的简单算法概述。

The famous rule 30; capable of generating pseudo-random numbers from simple/deterministic rules. Rule 30 was discovered by Stephan Wolfram in ’83.

如果你对细胞自动机的哲学含义感兴趣,查看我的帖子这里

细胞自动机(CA)同时也是我遇到的最简单和最迷人的想法之一。在这篇文章中,我将回顾一些著名的元胞自动机及其性质,重点是“基本的”元胞自动机和著名的“生命游戏”。你不需要了解编码来阅读这篇文章,但是对于更多的技术读者,我提供了尾注和 Github repos。

我还用 Python 编写了一个库来生成我在整篇文章中使用的 CAs。我不喜欢我在互联网上遇到的许多网站,因为我觉得它们对初学者不够友好。所有代码都在 Github 上,你可以通读一下:

元胞自动机基础:基本元胞自动机

ca 是计算模型,通常由带有值(单元)的网格表示。单元格是网格上带有值的特定位置,就像您在 Microsoft Excel 中看到的电子表格上的单元格一样。网格中的每个单元基于其邻居和一些规则进化

通过绘制一行单元格,然后根据规则演化该行,并将演化后的行显示在其前身的下方,来可视化基本 CAs。话虽如此,但通过例子最容易理解:

8 evolutions of rule 30, starting with one star in the middle. The command to generate the CA is from the library I provide.

以上是一个 CA 的例子。它是如何产生的:

  • 首先,我们从顶行的单元格开始。顶行单元格是手动选择的初始配置。最上面一行的值可以是任何值:它们可以是随机的,或者中间只有一个星号,就像我们这里一样。CA 会根据初始条件做完全不同的事情,但通常会出现相同种类的形状。
  • 从第二行开始的每个单元格都是根据其自身的形状以及其上方相邻单元格的形状(根据顶部的键)来计算的。截止值以“-”号计数。例如,第 2 行第 2 列是“-”,因为它上面有一个“-”-“-”,如上述“规则”的倒数第二条规则所述。请注意,该行中的所有单元都是并行进化的。

基本 CAs 通常被称为“规则”(原因见[2])。上面的 CA 是规则 30。值得注意的是,如果运行足够多次,它会变成页面顶部的模式。更令专家困惑的是,尽管使用了简单、确定的规则来构建自动机,但结果永远不会收敛。换句话说,规则 30 从未在其行为中开始展示任何模式,该模式将允许某人在不通过强力计算所有先前迭代的情况下预测在任意行什么单元处于什么状态。随便用什么统计工具,你都找不到感兴趣的东西。这很有趣,因为像它这样的大多数其他模式都可以用代数来表达,所以当科学家想知道特定行中会发生什么时,他们可以做一些快速的数学计算,几乎立即就能找到答案。然而,根据规则 30,如果我们想知道在第十亿行上发生了什么,我们实际上必须一个接一个地生成所有的十亿行!由于这个原因,30 号规则实际上在很长一段时间里充当了 Mathematica 中的随机数生成器

这种伪随机行为使得规则 30 如此迷人。根据确定性规则构建的东西怎么会如此有序,而且无法预测?我们将在“及时”移动 CAs 中看到这种行为;这些表现出几乎逼真的行为。

大多数 ca 没有这种随机行为;它们汇聚成定义明确的模式。以规则 94 为例:

Rule 94. Source .

另一个可以产生随机行为的 CA 是规则 90。第 90 条规则有很多特别之处。其中之一是,它可以根据其初始条件预测或随机地运行。看看这个。

8 iterations of rule 90. More technical readers might notice each output cell is an XOR of the above 2 neighboring cells.

注意上图中中间的一颗星星是如何产生高度自相似的行为的。这是同一模式的扩展。你可能会认出这个 Sierpiński 三角形分形。

在这种配置中,规则 90 是可预测的。但是,让我们看看当我们给它一个随机的初始配置时会发生什么:

Rule 90 again. Same rule as above, but with a random initial condition. This time the individual cells are unpredictable, like in rule 30.

这就是数学家和哲学家所说的对初始条件的敏感性。你在学校学过的大部分函数都不是这样表现的。

这三个应该让你对初级 ca 有一个很好的了解。它们之所以被称为基本的,是因为每个细胞只有两种状态:有色和无色(我用*和“-”来表示有色和无色,但原则上,这是一样的)。

ca 最初是由约翰·冯·诺依曼和斯塔尼斯拉夫·乌拉姆在 40 年代发现的,但我在这里谈到的许多 ca 直到现代计算机允许研究人员快速探索潜在 ca 的空间时才被发现。更现代的是,Wolfram Alpha 的创始人 Stephan Wolfram 对基本 CAs 进行了详尽的研究[3]。他已经证明,当 CAs 不再是初等的时,像规则 30 中展示的随机模式不会变得更有可能。如果你在寻找更多关于初级 CAs 的资源,他的书,一种新的科学,可能是我找到的最好的资源。

现在你知道什么是基本 ca,你会开始注意到它们无处不在。对于这样一个最近的发现来说相当令人惊讶。

Shellular automata. Source

2D 细胞自动机:康威的生命游戏

既然您已经熟悉了基本的“1D”CAs,我想向您展示您可以使用 2D CAs 做些什么。结果是显著的,因为 CAs 看起来是“活的”。每当我运行这些程序时,我都觉得我的电脑里有一个培养皿。

This is what I mean when I say the results look like they’re out of a petri dish.

我想给你看的 2D CA 被称为“康威生命的游戏”,或者只是文献中经常提到的生命、。它的名字和出现都不是偶然。生命的创造者约翰·何顿·康威建造它的目的是为了满足约翰·冯·诺依曼对生命的两个标准。

(正如我在介绍中提到的,我写了一个库来运行终端中的生命游戏,如果你有基本的编程知识,你可以用它来快速地玩这些游戏。)

冯·诺依曼认为,如果某物能做两件事,它就是“活的”:

  1. 自体繁殖
  2. 模拟图灵机

康威成功地找到了一个符合这些标准的 CA。游戏中的“生物”似乎可以繁衍后代,经过一番努力,研究人员证明了生命实际上是一台通用图灵机。换句话说, Life 可以计算任何可能可计算的东西,满足第 2 [4]项。

正如我们在基本 CAs 中看到的,生命的规则很容易实现。但是, Life 没有像我们在基本 CAs 中那样考虑单元上方行中的邻居,而是计算单元周围的邻居来决定中间单元的状态。与基本 CAs 不同,下一代单元格显示为“游戏标记”,而不是上一代单元格下面的另一行单元格。规则如下:

  1. 任何少于两个活邻居的活细胞都会死亡,好像是由于人口减少。
  2. 任何有两个或三个活邻居的活细胞都可以存活到下一代。
  3. 任何有三个以上活邻居的活细胞都会死亡,好像是由于人口过剩。
  4. 任何一个死细胞,只要有三个活的邻居,就会变成活细胞,就像通过繁殖一样。

值得注意的是,细胞居住的网格通常具有环形几何形状——想想吃豆人的风格——细胞将“循环往复”寻找邻居。

令人惊讶的是,上面的规则产生了上面的复杂模式。这是另一个生命的例子,这次是在它进化的早期,是用我之前提到的 Github 回购制作的:

Short gif of the output of the Github repo I wrote. Notice how some collisions seem to spawn multiple “creatures” while others leave some live cells in stasis. When given a large enough grid, this configuration will actually expand indefinitely instead of “going extinct” as many others do.

然而,我们并不局限于看起来随意的形状。有许多模式,或者说“吸引子状态”是生活趋向的。下面是他们两个的碰撞。我喜欢上面的规则可以自动产生一种碰撞检测。

A collision between a pulsar (the big, oscillating structure) and a glider (the smaller thing, traversing the map). Without a collision, both will continue on indefinitely.

这些只是生命的几个属性。如果你感兴趣,一定要试试我提供的库,并阅读更多内容。另外,记住生活也不是唯一的 2D CA。如果你想了解另一个 2D,我推荐布莱恩的大脑

我想给你们留下一段视频,是关于生活中一些最令人震惊的配置。我希望它能给你留下和我一样的神秘感。

笔记

【1】CAs 的大部分观众是哲学家、生物学家和只有基本编程背景的高中生。我发现的大多数库都有依赖项,对于初学者来说安装起来可能很复杂。我更希望有一些东西,人们可以在 shell 中运行,并立即看到发生了什么。

【2】这是什么编号系统?(Wolfram 代码)

Wolfram 还发明了我们用来命名每个规则的数字代码。编号系统要求您理解二进制,所以如果您不知道二进制,可以跳过这一部分。给定规则的编号告诉您它应该如何对不同的输入做出反应。下面举个例子:规则 90 是二进制的 01011010。二进制编码的第位告诉你输入 i 的规则如何表现。所以规则 90 为输入 111 输出 0,因为当转换成二进制时,它的第 8 位数字是 0。注意***在下图中是 111,十进制是 8。

这在视觉上更容易看到:

Visualization of how we come to the names “rule 90” and “rule 30”.

诚然,我还没有读完他那本 1200 页的书《一种新的科学》。它坐在我的公寓里,有点怪异地看着我。大部分是图片,所以我已经看了大约 200 页了。如果它不那么重的话,我可能已经完成了。

【4】我知道这是一个用一句话来掩饰的大陈述。我可能会在另一篇文章中再写一篇关于图灵机及其与 CAs 和哲学的关系的文章。

算法偏见:计算机可能是种族主义者吗?

原文:https://towardsdatascience.com/algorithmic-bias-can-the-computer-be-racist-eb62ef91b045?source=collection_archive---------23-----------------------

是的,这是数据科学中的一个普遍问题。

The machine learning algorithms behind predictive policing programs seem dangerously prone to bias. Source

近年来,算法偏见受到了越来越多的审视,特别是在 2016 年凯茜·奥尼尔的高超的数学毁灭武器出版之后(任何考虑从事数据科学职业的人都必须阅读)。随着越来越多的组织寻求利用复杂且经常不透明的机器学习模型来利用不断增长的数据池(一个常见的数字是每天 25 万亿字节的数据,尽管我找不到这个数字的好来源),算法偏见的破坏性潜力除了增长之外什么也没有做。

令人沮丧的是,尽管在一些圈子里意识越来越强,但我们似乎还没有找到一种方法来处理奥尼尔在她的书中指出的那种问题。事实上,自从数学毁灭武器问世以来,她所强调的行业和用例几乎没有增长。早在 2016 年,奥尼尔就讨论过申请人跟踪系统的问题,该系统读取简历和其他申请人信息,并自动对求职者进行分类或取消其资格,但 ATS 系统仍然普遍存在(被大多数大公司使用),ATS 市场预计将在增长。她强调了所谓的健康计划的兴起带来的一些问题,雇主利用这些计划来尝试和激励健康的行为以降低医疗费用,但是健康计划仍然很受欢迎,尽管越来越多的证据表明它们可能不起作用。奥尼尔展示了像 CompStatPredPol 这样的“热点”警务计划,表面上通过将资源集中在最有可能发生犯罪的地区来寻求改善警务,但实际上很容易对穷人和少数族裔社区产生偏见,并容易造成预测和执行的恶性、自我实现的循环,但这些计划仍在使用。具有讽刺意味的是,许多警察部门似乎正在重新考虑这些计划,不是因为这些计划具有高度歧视性,而是因为他们认为这些计划实际上并不太奏效。

为什么我们只是非常缓慢地处理这些问题?首先,在某些情况下,非算法的人类选择本身就是歧视性的,不清楚算法是否没有对现状做出改善。是的,许多法院现在用来设定保释金和决定量刑的算法模型是有缺陷的,并且明显对非裔美国人有偏见,但是人类的选择也是有偏见的,并且经常如此反复无常和不均衡,以至于算法可能更好

另一个原因是一个看似普遍的概念,即算法和机器学习模型在某种程度上是天生中立或“公平”的。统计模型周围有一种科学的气氛——难道它们不是从数据中衍生出来的吗?当新闻中提到算法偏差的问题时,仍然很容易找到这样的回答:算法不会真的有偏差,因为它们是由数学驱动的。认为算法仅仅是一点应用数学,因此不会有偏见,这是从根本上误解了什么是算法,对于任何处理数据的人来说,理解这一点很重要。

什么是算法?

虽然算法肯定是数学工具,但它们不一定像定理那样被可靠地证明和明确。算法更像是一种策略,一套关于如何找到你认为不管输入是什么都行得通的答案的指导方针。例如,假设我洗了一副牌,然后让你把它放回新的牌组顺序中,所有的花色放在一起,a 到 k 排列。你将如何着手做那件事?在某种程度上,对于你需要做什么具体的动作,你并没有一个“答案”可以提前说明。你不能说“我把第 15 个位置的牌拿过来,移到第一个”这样的话,因为这副牌已经被洗牌了,你不知道每张牌在哪里。

相反,你能做的是用算法来解决这个问题,并想出一系列适用于任何卡片配置的操作。第一步,也许,仔细检查每张牌,根据花色把它们分成四堆。第二步,挑一堆找到 a,然后是 2,以此类推。第 3 步,重复每一堆,等等。这一系列的步骤就是算法,一组指令,以一种通用的方式引导你找到解决方案。至关重要的是,就其本质而言,算法不一定是绝对正确的。我的卡片分类算法应该总是有效的,但是我不知道这是最有效的算法;也许有更好的方法来完成任务,通常会更快或需要更少的移动。更糟糕的是,有些问题,比如著名的旅行推销员问题,是出了名的难,并且对算法简化有抵抗力。

洗牌可能看起来与我在这篇文章开始时提出的现实世界的后果有点不同,但是算法的原理是一样的。例如,考虑一家银行决定哪些申请人将获得抵押贷款。银行只想把钱借给那些愿意还钱的人,并且只借给任何一个有能力还钱的人。就像你不知道一副洗牌牌中卡片的确切顺序一样,每份贷款申请都是不同的,事先也不知道,所以对于“是否应该给这个申请人贷款,如果应该给多少钱?”这个问题,没有一个简单的答案

银行最终会根据自己的算法做出贷款决定。也许,第一步是剔除所有信用分数足够低的申请人,第二步可能是查看申请人的收入,等等。与纸牌的例子不同,银行的算法不能保证得到“正确”的答案。该银行最终可能会贷款给一些将会违约的候选人,而拒绝其他不会违约的候选人。在这一点上,应该清楚的是,成为算法的一部分并不能保证有效性或公平性,并且算法绝对可能有偏差;“不要借给非裔美国人”将是一个算法。

一家银行拒绝贷款给非裔美国人显然是种族歧视,但我想强调的是,算法可能会以更加微妙但同样阴险的方式产生偏见。即使是在没有人为偏见的情况下创建的模型,也会因为各种原因而产生有偏差的结果,理解这些原因很重要。对“数据”的训练并不能保证中立,因为数据本身的收集方式可能会给结果带来偏见。

风险 1:数据收集本身就有偏差

模型的好坏取决于它所依据的数据,在现实世界中,数据源通常是不可靠的。从历史上看,收集数据既昂贵又耗时,因此很难获得完整的数据。当收集数据时,希望研究某个特定主题的人会试图获得最大的回报,这通常意味着去最容易收集数据的地方。这就是为什么如此多的心理学研究是在大学生身上进行的,即使他们不一定能代表更大的人口。对于大学校园里的研究人员来说,找到年轻的中上阶层白人学生进行测试比派人到全国各地寻找一系列科目更容易。

如今,研究人员可以廉价地利用在线或互联设备生成的大量数据,但覆盖范围仍然不普遍或不公正。例如,根据定义,互联设备产生的数据将有利于当前联网的人。在一个有趣的案例研究中,波士顿市发布了一款智能手机应用,司机可以在开车时使用它被动识别路面坑洼。该应用程序使用手机的加速度计来识别旅途中的颠簸,这些颠簸使用手机的 GPS 来绘制,帮助城市决定在哪里进行道路施工。这很好,但是结果并不完美。首先,在发布之时,智能手机在低收入群体中的渗透率仍然很低,在老年人中甚至更低。因此,该应用程序将倾向于在贫困地区或老年司机较多的地方进行资源不足的道路工程

当模型被操作化并用于指导政策时,这个问题可以自我强化:想想像 CompStat 这样的犯罪热点预测器,它们对犯罪数据进行训练,但也影响警察的派遣。如果没有警察举报,许多轻微的“妨害治安罪”可能不会被举报。警察被模型派遣到特定的社区,并报告这些地区的游荡或乱穿马路的情况,但他们不会报告他们没有被派遣到的社区的同样的轻微犯罪。因此,在警察已经被派往的地方,更多的犯罪被报道,使得他们看起来更加充满犯罪,而选择派遣更多的警察到那里。

风险 2:使用的数据是不完美或有偏见的代理

持怀疑态度的读者可能会正确地指出,我之前举的银行拒绝向黑人贷款的例子有点滑稽;毕竟,银行在贷款决策中使用种族因素是违法的。这是真的,但如果银行使用与种族密切相关的其他因素,那么即使没有明确使用“种族”作为考虑因素,也可能会得出相同的种族主义结果。考虑居住隔离——不同的社区可能有不同的人口统计数据,因此如果你知道一个人住在哪里,你可能不需要明确询问他们的种族。在许多城市,简单地问一个居民他们的邮政编码可能足以告诉他们的种族。一个至关重要的方面是,特别是随着更多的算法决策是由计算机自动生成的,你可以通过这种方式获得有偏见的结果,而不会有人做出明确的种族主义决定:没有考虑过住宅隔离的人认为社区似乎是一个合理的事情,可以包括在贷款申请中,并毫不犹豫地将信息输入计算机。后来计算机似乎拒绝向黑人贷款,但结果没有受到质疑,因为计算机不可能是种族主义者,对吗?

当一个特定的因素不能或不能被直接测量,数据科学家或研究人员被迫试图找到它的替代品时,这也是一个问题。例如,人类健康很难量化,因为它与许多不同的因素有关,并以许多不同的方式表现出来。很难获得一个人健康或身体状况的完整图片。另一方面,一个人的体重指数相对容易测量,因为它只需要知道这个人的身高和体重。然而,身体质量指数是众所周知的健康状况的原始代表。数据科学家经常倾向于使用糟糕的、可能有偏见的代理,因为他们是所有可用的,但是这些决策应该被仔细审查。

风险 3:外部强加的规则

模型或实际的实现有创造者强加给它们的规则或限制,因此,从定义上来说,带有模型制造者的目标/意识形态。如果创造者决定邮政编码应该是借贷算法中的一个重要因素,那么种族的代理就已经通过了那扇门。没有模型是在真空中创造的;有人总是在决定包括哪些因素,将哪些数据输入机器,以及一旦算法开始做出预测,如何操作算法。认为机器学习算法不受人类影响是错误的,因为它们是由计算机衍生的。

风险四:成功条件有偏差

任何给定的算法或模型都有一个目标,它试图预测或做出决策的一些值。在每一种情况下,计算机都需要被训练什么是成功的预测,或者什么是“正确的”决策。监督学习模型需要良好标记的数据集,包括模型将寻求预测输入数据的目标变量。先前如何确定目标变量可能对基于该数据训练的模型有重大影响。考虑一家银行利用其过去的贷款历史——被红线标记——来训练一个决定谁被批准贷款的模型。或者简历阅读器根据先前的雇用决定通过申请人,这可能会对女性申请人不利。如果之前的借贷或雇佣决定是种族主义或性别歧视的,那么根据这些决定训练一个模型会给你一个有偏见的模型。

还有一个持续反馈的相关问题。计算机模型不会改变,除非通过合并新规则或输入数据来明确改变。如果算法返回有偏差或不准确的结果,则需要干预。

数据工作者面临的挑战

我想强调的是,这些偏见的来源不仅限于种族主义或性别歧视等重大社会问题,这些问题可能会在任何数据科学的应用中出现。每个数据科学家都需要应对算法偏差。结果可能是良性的,比如模型的准确性有一点损失,也可能是严重的,比如某人被累犯算法拒绝保释,但问题无处不在,随着机器学习模型的扩展,它们的偏差也随之扩展。

算法公司和死后社会

原文:https://towardsdatascience.com/algorithmic-corporations-and-the-post-death-society-b904dc7160a9?source=collection_archive---------41-----------------------

作为人类,我们拥有各种留下遗产的方式。这包括将遗传物质遗留给我们的后代,但也包括将企业移交给即将分离的几代人,以及创建大学捐赠基金等等。所有这些遗产都有一个共同的令人烦恼的特点——就像不听话的孩子,有偏离其原主人预定路线的趋势。被委托给其他人并由其管理,这类遗产可以被吸收,被引导到新的方向,或者被完全废除。就其本质而言,遗产是委托代理问题的雷区。因此,他们很少能在几代管家之后存活下来。这种情况可能即将改变。进入分权自治组织

对于那些不熟悉这个术语的人来说,分散式自治组织或分散式自治公司(简称 DACs)是依靠一种算法来维持其章程或目标的组织。要理解这一概念,首先有助于理解多人组织在许多方面代表了一种超级智能,一种由团结在一起促进组织使命陈述中阐明的任何目标的人组成的组织。

组成一个组织的人类作为一种元实体运作,它拥有比组成它的任何单个人更大的权力。OpenAI 创始人格雷格·布罗克曼注意到创造一个良性的人工智能超级智能和创造一个良性的公司之间的相似性。在这两种情况下,人们都面临着为一个实体详细说明一个目标函数的挑战,这个实体的智力可能比单个人类个体的智力还要高。自从第一批人类联合起来形成部落以来,我们就有能力产生这种超级智能的合作实体。根据定义,一群人几乎比一个人更聪明、更强大。引导这些人群是一个组织的章程、首席执行官或董事会的职责。但是想象一下,如果一个组织的管理机构不再是人类?例如,如果计算机算法能够扮演一个组织的战略家和看护者的角色。

虽然这听起来像科幻小说,但 cryptocurencies 已经代表了一种类似的实体。由于缺乏任何形式的人的治理或监督,他们反而依赖于分布式分类账来确保他们的目标功能得到满足。这样,比特币、Ehtereum 和其他加密货币就是我们可能认为的后死亡社会的首批成员,一个在人类和数字交汇处生存的社会。这也可能是我们所认为的遗产的未来。

想象一下,一个人的临终愿望是创建一个非营利组织,致力于拯救尽可能多的海豚。用今天的话来说,一个人会在死前的某个时候创建一个组织或基金会,然后祈祷那些被委托实现其目标的人是可靠的。但是,有了人类的掌舵,谁能说这个组织不会被转移到其他目的上去呢?有了 DAC 和 DOA,就可以省去中间人(真的!《宪章》本身负责实现本组织的目标。将拯救海豚的目标与在电子游戏《星际争霸》或 DOTA II 中击败对手的目标相比较。这些目前看起来完全不同的概念,但对于熟悉动态编程的人来说,它们都代表了一个马尔可夫 决策过程,也就是说,智能体在不确定性下运行,在一个大的连续行动空间中制定策略,并有评估其成功或失败的方法。

我使用这个例子,因为已经有最先进的强化学习算法成功地在挑战马尔可夫环境的游戏中击败了人类。对于这种算法来说,重新用于拯救海豚或公司章程中规定的任何其他目标功能可能不会太难。有了环境模型和可用的相关行动,该算法就可以开始执行组织的使命宣言,根据需要以电子方式创建合同和分配资金。只要它能够通过外部手段(如获取海豚种群的相关统计数据)评估其策略的成败,强化学习就能让它专注于成功的策略,并淘汰生产率较低的策略。即使在现在,一个公司或组织要想成功完成使命,大部分必要的行动都可以通过电子邮件、文本或电汇等数字化方式进行。这是因为几乎所有形式的实际体力劳动都可以分包给实际雇人做这项工作的其他组织。自然语言处理的进步加上强化学习将在未来几十年扩展这种算法能力。

值得一问的是,我们是否知道这样一个自主组织已经在我们中间,拯救了一船船的海豚。至少在某种程度上,电子文件记录很可能与其他公司和组织没有什么区别。这实际上是马修·马瑟的科幻小说《黑暗网络》的剧本。正如我们现在对算法在国际象棋、围棋和 DOTA II 等游戏中击败人类选手并不感到惊讶一样,从长远来看,这种自主的公司和组织很可能会比人类同行更高效、更成功。这与他们击败人类游戏玩家的原因是一样的——任何算法,如果在一个环境中的成功与使用的微处理器数量成比例,例如 PPO 和 A2C ,只要有足够的计算和训练时间,就有可能战胜人类。因此,DAC 和 DOA 的出现可能会挑战我们关于遗产、组织治理甚至死亡的最深刻的概念。

如果一个人生命中最深的关怀、抱负和使命可以写在硅片上,在他们死后很长一段时间内继续影响物理现实,他们会在多大程度上真正离开人世?既然普遍认为身体仅仅是实现思想目标的工具,那么如果那些精确的目标和抱负可以转移到另一个载体上,那么这个人在某种意义上还活着吗?如果这些目标违背了一个特定社会的道德权威,谁来承担责任?随着我们进入数字世界和生物世界之间的不确定领域,这些令人烦恼的问题可能会成为未来几十年政治和司法话语的主体。

Nashpy 算法博弈论

原文:https://towardsdatascience.com/algorithmic-game-theory-with-nashpy-a73caf14296b?source=collection_archive---------13-----------------------

博弈论是一种研究战略形势的方法。“战略”情境是指影响你的结果不仅取决于你自己的行动,还取决于其他人的行动。让我们考虑公司市场:如果是完全竞争的情况,所有公司都是价格接受者,因此他们不必担心价格的战略设置。类似地,如果情况是垄断,市场中唯一的公司可以设定自己的价格,而不用关心其他公司的策略。

完全竞争和垄断之间的一切都是战略态势。

算法博弈论是博弈论和计算机科学的交叉领域,目标是理解和设计战略环境中的算法。

在本文中,我将借助 Nashpy 库,向您展示一个非常直观的博弈论 Python 实现。顾名思义,Nashpy 提供了算法途径来寻找游戏的纳什均衡。

博弈的纳什均衡是所有参与者都在做最佳反应分析的策略轮廓(我们稍后会解释这个概念)。基本上,它找到了一个均衡策略曲线 s*,使得每个人都采取了最佳对策。

但是“最佳对策”是什么意思呢?

为了更好地理解这个概念,让我们来看看众所周知的囚徒困境:

这个想法是,有两个玩家(囚犯)必须决定是否互相合作,在接受警方采访时不透露对方的名字。如果两者都合作,他们将各有 3 的效用。然而,他们被激励不合作,因为不合作的一方将获得 4 的效用(而另一方将一无所获)。然而,如果两者做出相同的推理,他们最终将不会合作,这意味着每个人只能获得 1 的效用。他们为什么要背离合作?让我们来看看参与人 1 (P1)的最佳对策分析

  • 如果 P2 合作,P1 的最佳对策是不合作,因为 NC 的效用是 4>3。
  • 如果 P2 不合作,P1 的最佳对策是不合作,因为 1>0。

因此,P1 有一个优势策略是(NC,NC)。由于这是一个对称的游戏,同样的推理也适用于 P2。因此,在这个博弈中,纳什均衡是(NC,NC)=P1 选择 NC,P2 选择 NC:每个参与者都选择自己的最佳对策来对抗对方。

现在让我们看看如何用 Python 实现这个过程。

首先,你必须在你的 Jupyter 控制台上运行 pip 安装 nashpy 然后导入模块。完成后,你就可以创建你的游戏环境了。对于一个非零和的 2 人游戏(这是 Nashpy 的默认解释),你必须创建两个矩阵来代表每个玩家的观点。也就是说,对于 P1,我们将有:

而对 P2 来说:

让我们用 Python 做同样的事情:

import nashpy as nash
import numpy as np
P1=np.array([[3,0],[4,1]])
P2=np.array([[3,4],[0,1]])
prisoner_dilemma=nash.Game(P1,P2)prisoner_dilemma

我们也可以得到玩家策略的效用。也就是说,如果 P1 合作,而 P2 不合作,看表我们会看到这对效用是(0,4)。

我们通过查看游戏表获得了前一个结果(0,4),但是我们可以通过矩阵计算获得相同的结果,这与 Nashpy 遵循的过程相同。事实上,如果我们考虑一个向量,只要行动的数量(在这种情况下,只有 2 个——合作和不合作),其中每个条目都等于 0,除了玩家将采取的行动的位置,其中条目是 1,我们可以看到,当 P2 采取另一个给定行动时,从给定行动得出的 P1 的效用是:

P2 也是如此:

如果我们把这个公式应用到前面的例子中,当 P1 演奏 C,P2 演奏 NC 时,我们有:

让我们和 Nashpy 一起来看看吧:

p1_sigma=[1,0]
p2_sigma=[0,1]
prisoner_dilemma[p1_sigma,p2_sigma]

现在让我们看看我们的算法是否能够找到纳什均衡,如上所述,是(NC,NC):

eqs = prisoner_dilemma.support_enumeration()
list(eqs)

大家可以看到,纳什均衡由两个向量组成,每个向量表示一个玩家的行动:P1 有[0 1],第二个位置的 1 表示 P1 会出 NC;同样的道理也适用于 P2。

算法偏差的算法解决方案:技术指南

原文:https://towardsdatascience.com/algorithmic-solutions-to-algorithmic-bias-aef59eaf6565?source=collection_archive---------3-----------------------

我想谈谈减轻算法偏差的技术方法。

现在是 2019 年,大多数 ML 社区终于公开承认 ML 模型中偏见的流行和后果。多年来,ProPublica 和《纽约时报》等组织的数十份报告一直在揭露算法歧视在刑事风险评估、T2、预测性警务、T4、信贷、招聘等领域的规模。不管是不是故意的,我们作为 ML 的研究人员和工程师不仅成为延续等级制度和加剧不平等的更广泛的社会政治项目的同谋,而且现在还对黑人不成比例的监狱判决和针对有色人种的住房歧视负有积极的责任。

对这种偏见的承认不能是谈话的结束。我已经论证过,并继续论证即使是个别的 ML 工程师在这些自动化系统中也有塑造公平的直接作用。偏见可能是人类的问题,但是偏见的放大是一个技术问题——一个数学上可以解释和控制的模型训练方式的副产品。因此,减轻现有的偏见也是一个技术问题:算法上,我们如何确保我们建立的模型没有反映和放大数据中的人类偏见?

不幸的是,并不总是能够立即收集到“更好的训练数据”在这篇文章中,我给出了以下减少偏差的算法方法的概述,我希望对想要采取行动的个体从业者有用:

  • 通过保护敏感属性对模型进行对抗性去偏
  • 用半监督的可变“公平”自动编码器对不变表示进行编码,
  • 基于学习的潜在表示的训练数据的动态上采样,以及
  • 通过分布式鲁棒优化防止差异放大。

我尽我所能从头到尾链接到库/代码/教程/资源,但是如果你想直接进入代码,那么 AI 360 工具包看起来是个不错的起点。同时,让我们开始计算:)。

I .对抗性去偏向

对抗性去偏置技术是目前对抗偏置最流行的技术之一。它依靠对抗性训练来消除模型学习到的潜在表征中的偏见。

假设 Z 是一些敏感的属性,我们希望防止我们的算法进行歧视,例如年龄或种族。简单地从我们的训练数据中移除 Z 通常是不够的,因为它通常与其他特征高度相关。我们真正想要的是防止我们的模型以任何实质性的方式学习依赖于 Z 的输入的表示。为此,我们训练我们的模型来同时预测标签 Y 并防止共同训练的对手预测 Z

直觉如下:如果我们的原始模型产生了一个主要编码关于 Z 的信息的 X 的表示(例如,种族),那么一个敌对模型可以使用这个表示轻松地恢复和预测 Z 。从反面来看,如果对手无法恢复任何关于 Z 的信息,那么我们一定已经成功地学习了输入的一种表示,这种表示基本上不依赖于我们的受保护属性。

我们可以将我们的模型视为一个多头深度神经网络,一个头用于预测 Y,另一个头用于预测 Z。我们通常反向传播,除了我们在使用负梯度预测 Z 的头上发回一个信号。

形式上,把 g (X)看作是我们输入的共享学习嵌入。我们让 f 是我们的预测函数,其中 Y= f ( g (X)),而 a 是我们的对手,其中 Z= a ( g (X))。我们的神经网络的最终目标是学习一个表示 g (X ),使得 f 预测 Y 变得容易,但是 a 预测 Z 变得困难。在最优化方面,我们希望最小化我们的预测损失 L_y( f ( g (X)),Y)并最大化对抗损失 L_z( a ( g (X)),Z)。

为了统一这些优化并控制两者之间的权衡,我们引入 J_λ,它是具有负梯度的恒等函数,即:

  • j(g(X))=g(X),以及
  • dJ/dX = -λ d g (X)/dX。

使用 J_λ,其中λ是确定模型精度和移除敏感信息之间的折衷的超参数,我们可以用总体优化目标来训练我们的神经网络:

实际上,将对手视为一个独立的神经网络,拥有自己的权重,会更容易、更有效。在这种情况下,我们将预测器网络最后一层的输出馈入对抗网络的输入。

由于对手只是试图最小化自己的损失,我们照常根据梯度∇_uL_A 更新其权重 u。然而,预测器权重 W 的更新表达式变得有点复杂:

表达式中的第一项是预测值损失的梯度,用于最小化预测损失。第三项是对手相对于预测者权重的负梯度,其目的是最大化对手的损失。(注意,在这种情况下,α是控制精度/去偏置权衡的超参数)。这个提法的新颖之处在于中间的投影项。这个术语说:移除预测器的梯度更新中所有会对对手有贡献的成分。如果没有此项,预测者仍有可能做出对对手有利的更新,如下图所示:

The vector in the far upper-right corner (g) is our gradient from the prediction loss. If we try to maximize the adversary’s loss simply by adding its negative gradient with respect to W, we end up with the vector g+h, which still moves in the positive direction of the adversary’s gradient. We have to also remove the projection of g onto h to get rid of all components of g that help the adversary, bringing us to the upper-left vector.

除了我在这里描述的之外,还存在对抗去偏置方法的许多变体和改进。就在几天前,我与 CVPR 大学的一名研究人员聊天,他提出的模型最大化了对手预测的而不是损失,即网络寻求最大化地迷惑对手,而不是玩零和游戏来权衡预测准确性和偏差消除。根据您的用例,类似这样的变化可能也值得尝试。

哇,对抗性去偏见是如此之酷!我如何使用它/了解更多信息?

二。可变“公平”自动编码器

另一种学习数据“公平”表示的技术是变分公平自动编码器(VFAE)。 VFAE 将“公平性”表征为相对于数据集的某个已知方面而言显式 不变 的表示。从概念上讲,这种技术是我最喜欢的技术之一,因为它非常巧妙地将 ML 偏差和更广泛的无监督和半监督表示学习领域的想法联系在一起。实际上,因为这是一种半监督的方法,它在利用未标记数据方面特别有用。

快速 VAE 复习

如果你不熟悉变分自动编码器(VAE),这篇博文提供了一个很好的直觉,Stefano Ermon 的课堂笔记做了一个建立数学的彻底工作。然而,由于 VAE 对于这种方法和下一种方法都是不可或缺的,所以我也想在这里提供一个简短的总结。

VAE 是一个生成模型,它学习输入的一些潜在表示的参数化。我们假设有一些潜在变量 z 来解释 x;我们有一个“编码器”网络 q(z|x ),它产生正态分布的μ和σ,从中可以对 z 进行采样,还有一个“解码器”网络 p(x|z ),它试图从编码 z 中重建 x。这里的关键是,我们希望学习编码器和解码器的参数,使数据的可能性最大化,但通常情况下,计算后验 p(z|x)是很难的。因此,我们训练我们的神经网络来最大化 p(x)的下限:

这个下限的第一项是我们的“重建损失”,它评估:我们的解码器能够多好地从我们采样的编码中恢复输入?第二项是 KL 散度正则化,它鼓励 q 产生类似于由 p(z)定义的标准法线的编码,它评估:我们的编码器产生有意义的集群编码吗?对这两个目标的训练一起鼓励模型发现潜在的空间,这些空间既准确地捕捉我们的数据的语义概括/插入我们的数据之外

回到算法公平:把 F 放入 VFAE

我们开始将 VFAE 公式化为一个无监督模型,该模型假设每个数据点 x 可以从两个“源”中概率性地生成:一个观察到的 s,它代表我们想要移除的变量,以及一个连续的潜在变量 z,它编码剩余的信息。

Unsupervised model.

直觉上,我们可以认为学习“无偏表示”的问题是恢复输入背后的潜在的、概率性的信息来源,以某种方式明确地将敏感来源(s)与不变来源(z)分开。注意,这种方法,像前面讨论的对抗性去偏置方法一样,要求您知道并指定敏感源或特征是什么。

使用上述 VAE 的下限,我们可以优化解码器 p_θ和编码器 q_φ以获得 z,这是一种捕获关于 x 的最显著的非敏感信息的编码:

不幸的是,无监督模型有一个明显的问题:如果敏感变量 s 和标签 y 实际上是相关的,我们可能最终得到 z 相对于 y 的退化的表示——也就是说,这些表示实际上没有编码关于标签的显著信息。为了解决这个问题,我们引入了第二层变量来尝试将 z 与 y 相关联,它由标签 y 本身和另一个潜在变量 z2 组成,z2 编码 z 中的剩余变量,即由 y 解释的而不是。注意,在下面的图和表达式中,z 现在表示为 z1。

Semi-supervised model.

直觉上,z2 将捕获并“解释掉”依赖于 x 的噪声,让我们期望的表示 z1 单独负责找到能够解释标签 y 的 x 的不变表示。

在特征提取阶段“注入”关于标签的信息的巧妙之处在于,即使标签不存在,我们也可以使用从数据中学习的解码器 q_φ(y|z1)来估算缺失的数据,其中 y 存在。换句话说,这种技术很容易扩展到半监督学习。完整的数学推导有点太长,这里不包括,但可以在原始论文的 2.2 节中找到。

这种方法的最终贡献是使用最大均值差异作为进一步的正则化,以确保模型的“公平性”。虽然注入标签有助于防止退化表示,但如果标签 y 碰巧与敏感变量 s 相关,则关于该敏感变量的信息仍有可能通过 y“泄漏”到我们的表示中。为了解决这个问题,我们在下界引入了一个最终惩罚项,以明确鼓励 z1 相对于 s 保持不变;具体来说,我们鼓励分布 q_φ(z1|s = 0)和 q_φ(z1|s = 1)相似。

这个惩罚项是最大平均差异(MMD),它测量两个分布(或它们各自的特征映射)的平均嵌入之间的平方距离。VFAE 的最终损失项简单地比较了 s=0 和 s=1 时 z1 的经验统计ψ()。

在形式上,我们的最终 VFAE 模型将变分自动编码器架构扩展到标记数据(x_n,s_n,y_n)和未标记数据(x_m,s_m ),并使用 MMD 来确保我们的学习表示 Z 相对于 s 的不变性:

好吧,我服了。我怎么能和 VFAE 一起潜水呢?

三。训练数据的动态上采样

我们的前两种技术都修改了模型的学习表示。他们使用结果(预测或关联敏感属性的能力)来规范数据的学习表示。下一种方法被称为去偏置变分自动编码器,实际上是使用学习表示来重新平衡训练数据。它的前提非常直观:由于许多现代 ML 系统由于在训练数据中缺乏适当的代表性而在某些人口统计学上失败,因此让模型了解哪些输入来自代表性不足的群体,并在训练期间更频繁地对这些输入进行采样。

这种方法的最大优点是,与前两种不同,它不要求您知道或指定数据中的敏感属性;模型在训练时会自动学习它们。因此,模型还可以自由地学习比人类注释者更复杂、更细微的“表示不足”的来源。例如,在面部识别中,人类可能很容易识别出人口中的哪些部分在训练数据中代表性不足,但要指定哪些姿势或面部表情出现频率太低而无法准确预测则困难得多。

去偏置变分自动编码器提出了一个非常简单的修正:如果一个数据点在潜在空间的一个欠表示区域,在训练中对其进行上采样。我们需要了解这种方法的两个组成部分:1)修改的 VAE 模型架构和 2)数据重新加权算法。

VAE 有一个标准编码器 q_φ(z|x)来逼近潜在变量,除了不是为 k 潜在变量产生标准的 2k 激活(即每个潜在变量的μ和σ),而是产生 2k+d 输出,其中 d 是标签 y 的维度。换句话说,VAE 编码器同时执行原始预测任务并学习训练数据的潜在表示。我们还学习了一个标准解码器 p_θ(x|z ),它从学习到的潜在变量中重构输入。

总之,我们的网络用 3 个损失训练:预测任务的监督损失,重建输入的重建损失,和潜在变量的 KL 发散损失。

Note that the first term is a supervised classification loss, and the next two terms are the standard components of a VAE loss.

整体架构如下所示:

The modified VAE architecture. Note that z_0 is the predicted label and z_1 through z_k-1 are the latent variables used to update sampling probabilities.

现在,为了提升在潜在空间中未被充分表示的训练点,我们需要找出哪些数据点具有不常见或不常出现的潜在表示。为此,我们估计潜在空间(z)中变量的频率分布。注意,给定一个数据集 X,我们可以用直方图 Q_hat(z|X)来近似这个分布。随着潜在变量 k 的数量增加,该直方图的维数会变得非常大,因此我们进一步用每个潜在变量 z_i 的独立直方图来近似该联合分布:

为了直观地解释直方图 Q_i(z_i|X ),回想一下,每个潜在变量 z_i 都由μ_i 和σ_i 参数化,进一步回想一下,由于 z_i 以 X 为条件,因此每个输入 X 都有自己的潜在变量均值和标准差。直方图 Q_i 统计了整个数据集中这些平均值和标准偏差的频率。给定任何输入 X,如果 Q_i(z_i(x)|X)很小,我们知道它通常呈现 z_i 的不常见值。如果 Q_j(z_j(x)|X)在所有(或许多)潜变量 z_j 中很小,我们知道 X 具有不常见的整体潜在表示。**

使用这些直方图,我们可以使选择用于训练的数据点 x 的概率与其在潜在空间中的表示频率成反比

该模型将最终学会将小样本概率 W(z(x)|X)分配给标准图像,并将较大样本概率分配给非标准图像:

太好了,我准备好动态地重新平衡我所有的 ML 数据集了。

  • 代码:不幸的是,我在任何地方都找不到这方面的代码:(,但我已经给论文作者发了电子邮件询问。同时,该算法是数据重新加权的另一个例子,除了它是在预处理阶段仅使用类别标签完成的(与在训练时间使用潜在表示动态相反)。
  • 论文: 阿米尼,2019

四。分布稳健优化

我们的最终偏差缓解策略直接修改了优化目标。它建议使用分布稳健优化(DRO) ,本质上是最小化数据集中每组的最坏情况损失,而不是经验风险最小化(ERM)的现状,即最小化数据集中的平均损失。这可能是所描述的所有方法中最通用的:它是模型不可知的,并且不需要我们知道保护组的身份或者它们在数据集中的比例。

在开始之前,我们需要澄清几个驱动 DRO 背后动机的术语。表征差异是指一个模型整体准确率高,但少数准确率低的现象。在我们正在运行的面部识别示例中,当识别引擎整体表现良好,但对某些少数群体表现不佳时,就会出现这种情况。视差放大另一方面,指的是通过 ML 模型中的正反馈回路,随着时间的推移,表示视差以某种方式被放大的现象。例如,少数群体可能会因为性能不佳而停止使用面部识别引擎,从而停止提供数据。类似地,使用预测警务算法的警察可能从一开始就不成比例地针对黑人社区,从而在这些社区捕捉到更多的犯罪,强化了模型的初始(历史和人类)偏差。

这种方法背后的论点是,表示差异是针对平均损失进行优化的结果。相反,通过为最坏情况群体进行优化,DRO 可以在 ERM 变得不公平的例子中取得成功,甚至防止这种模型中的差异放大。

形式上,我们考虑一个具有 k 个潜在群体的人口,其中每个群体 k 构成人口的一个比例⍺_k,并具有一个潜在分布 P_k。我们假设我们既不知道任何人口统计的比例也不知道潜在分布。每个输入 Z ~ P_k 都有一些损失,每个组的“风险”记为 R_k(θ),是这些输入 Z 的预期损失。

DRO 的目标是控制所有 K 组的最坏情况风险,即:

但是,请注意,我们不能使用 R_max 直接优化,因为我们不知道数据集中任何组的身份,因此也不知道底层分布 P_k。这给我们留下了一个显而易见的问题:当我们不知道这些组的分布情况时,我们如何最小化每个组的最坏情况风险?

答案是,我们简单地考虑所有可能分布的最坏情况损失,这些分布合理地接近我们观察到的总体人口分布。具体来说,我们考虑在经验分布 P 的某个卡方半径 r 内的所有分布 Q :

由于我们也不知道最差群体的比例,我们选择这个半径 r 是基于我们愿意考虑的最小少数民族比例⍺_ min 。可以看出,我们需要考虑的最大鲁棒性半径将是 r_ max=(1/⍺_min-1)。

直观地说,我们现在正在为至少占已知总体分布 P. 的 ⍺_ 最小百分比的最坏情况基本分布进行优化

但是就优化过程的行为而言,这些看起来像什么呢?可以证明,在一定的约束条件下,R _ dro(θ;r _max )等价于以下(更有用的)表达式:

其中 C=(2*r_ max +1)^(1/2),η为超参数。这个表达式使得 DRO 的行为更加明显:所有损失小于η水平的数据点都被忽略,而损失远大于η的数据点由于平方项而被上加权。下图说明了实际使用 DRO 时的这种行为:

从该图的面板(a)中,我们看到我们的数据集是两种基本分布的混合物,其中一种分布的数量远远超过另一种分布。针对平均损失进行优化的 ERM 估计自然只会针对多数群体进行优化,并产生完全不适合其他分布的θ_erm。与此同时,如果我们知道哪些数据点属于哪些组,并可以使用 R_ max 优化每个组中的最坏情况风险,我们最终会得到一个与两组等距的θ_fair。在没有任何组成员知识的情况下, DRO 简单地忽略了所有损耗小于η*的例子,并在所有分布的尾端上增加了高损耗的例子。结果,DRO 找到了一个最优的θ_dro*,它接近θ_fair,只是稍微偏向多数群体。

实际上,为了使用 DRO 训练任何神经网络,我们只需选择η值并计算最佳θ:

由于η是一个超参数,我们可以对可能的值进行二分搜索法以找到全局最优值。

我已经准备好(凭经验)和 DRO 一起捍卫失败者!

结论

我希望我描述的这些算法能够有用,但我也想强调一下算法的公平性不能是故事的结尾。即使最好的技术也是达到目的的手段,在一个几个世纪以来结构不平等、压迫和剥削的产物的世界里,关于“终结”的问题往往不会产生令人惊讶的答案。一个算法公平不代表它被公平使用;我们的责任是批判性地询问谁从这些技术中受益,谁为此付出了代价,并直言不讳地说出我们的模型应该或不应该如何使用。为此,我强烈建议大家查看以下内容:

  • "用于模型报告的模型卡(2019),关于模型随附的标准化简短文档的提案,详细说明了它们的预期用途、评估结果、道德考虑和警告等。,
  • AI Now 研究院提出的算法影响评估框架(2018),
  • 《纽约客》对美国第一个监管纽约市“自动决策系统”的法案(2017 年)及其遇到的法律、政治和企业绊脚石的分析
  • 2019 年 4 月提交给参议院的“算法问责法案”以及讨论潜在缺点的相应意见文章

同时,请在评论中留下你的想法,一如既往地祝你黑客生涯愉快:)。

Python 中基于均值-方差优化的算法交易

原文:https://towardsdatascience.com/algorithmic-trading-based-on-mean-variance-optimization-in-python-62bdf844ac5b?source=collection_archive---------4-----------------------

Source: pixabay

学习如何使用 Markowitz 的优化创建和实施交易策略!

这是 Python 中回溯测试交易策略系列文章的第 5 部分。之前的文章描述了以下主题:

  • 介绍 zipline 框架并展示如何测试基本策略(链接
  • 导入自定义数据以使用zipline ( 链接)
  • 评估交易策略的表现(链接)
  • 根据技术分析实施交易策略(链接)

这一次,本文的目标是展示如何使用 Markowitz 的投资组合优化和现代投资组合理论来创建交易策略。

在这篇文章中,我首先简单介绍/提醒一下均值-方差优化,然后展示如何在交易策略中实现它。和以前一样,我将使用zipline框架对它们进行回溯测试。

设置

对于本文,我使用以下库:

zipline    1.3.0
matplotlib 3.0.0
json       2.0.9
empyrical  0.5.0
numpy      1.14.6
pandas     0.22.0
pyfolio    0.9.2

均值-方差优化入门

1952 年,哈里·马科维茨出版了《投资组合选择》,描述了一种现在被称为现代投资组合理论(简称 MPT)的投资理论。一些关键要点是:

  • 投资组合收益是单个投资组合成分的加权平均值,然而,波动性也受到资产之间相关性的影响
  • 投资者不应该单独评估资产的表现,而是要看它们会如何影响投资组合的表现
  • 分散投资(将资金分配到多种资产上,而不是一种或几种资产上)可以大大降低投资组合的波动性

我们不会深入研究 MPT 的假设,但主要的是所有投资者都有一个共同的目标,即在尽可能避免风险的同时最大化投资回报,他们可以以无风险利率(无限制)借入和借出资金,并且不考虑交易成本。

基于以上所述,均值-方差分析是寻找最佳资产分配的过程,该过程提供了预期回报和风险(以回报的方差衡量)之间的最佳权衡。与均值-方差分析相关的一个关键概念是有效边界(Efficient Frontier),即在给定风险水平下提供最高预期投资组合回报的一组最优投资组合,或者换句话说,提供预期投资组合回报的最低风险水平。

Visualization of the Efficient Frontier — Source: wikipedia

从数学上讲,该问题的一种可能表述如下:

其中 w 为权重向量, μ 为资产收益向量,σ为协方差矩阵, μ _p 为目标预期投资组合收益。其中两个限制是:

  • 非负权重 0 不允许卖空
  • 权重总和必须为 1,不允许使用杠杆

为了解决这个问题并获得有效边界,我们可以定义一个可能的预期投资组合回报范围,然后为每个值找到最小化方差的权重。幸运的是,有一个库可以让这个过程变得非常简单。

PyPortfolioOpt只需要几行代码就可以解决整个优化问题。在本文中,我们将创建要么最大化预期夏普比率(投资组合每单位风险的超额回报)要么最小化整体波动性的投资组合。这两种投资组合都处于有效前沿。

我们在下面的简短例子中展示了如何使用pypfopt。首先,我们使用yahoofinancials下载历史股票价格。

pypfopt允许我们直接从价格轻松计算预期收益和协方差矩阵,无需事先转换成收益。

# calculate expected returns and sample covariance amtrix
avg_returns = expected_returns.mean_historical_return(prices_df)
cov_mat = risk_models.sample_cov(prices_df)

我们通过运行以下代码行来获得最大化夏普比率的权重:

# get weights maximizing the Sharpe ratio
ef = EfficientFrontier(avg_returns, cov_mat)
weights = ef.max_sharpe()
cleaned_weights = ef.clean_weights()
cleaned_weights

这导致以下权重:

{'FB': 0.03787, 'MSFT': 0.83889, 'TSLA': 0.0, 'TWTR': 0.12324}

为了方便起见,我们使用clean_weights()方法,因为它将非常小的权重截断为零,并将其余的取整。

战略

在本文中,我们使用以下问题设置:

  • 投资者有 50000 美元的资本
  • 投资时间跨度为 2016 年至 2017 年
  • 该投资者只能投资以下股票:特斯拉、微软、脸书、Twitter
  • 我们假设没有交易成本
  • 不允许卖空(投资者只能卖出他/她目前拥有的股票)
  • 在进行优化时,投资者考虑过去 252 个交易日来计算历史收益和协方差矩阵
  • 第一个交易决定是在 12 月的最后一天做出的,但订单是在 2016 年 1 月的第一个交易日执行的

基准 1/n 策略

我们首先创建一个简单的基准策略,即1/n 投资组合。这个想法非常简单——在测试的第一天,我们将总资本的1/n %分配给所考虑的 n 项资产中的每一项。为了简单起见,我们不做任何重新平衡。

实践中经常发生的情况是,投资组合每 X 天重新平衡一次,使配置回到 1/n,为什么?我们可以想象,我们持有两种资产 X 和 Y 的投资组合,在投资期限开始时,分配是 50-50。一个月后,X 的价格急剧上升,而 Y 的价格下降。因此,资产 X 构成了我们投资组合价值的 65%,而 Y 只有 35%。我们可能想通过卖出一些 X,买入更多 y,重新平衡到 50-50。

下图显示了该策略产生的累积回报。

我们存储一些结果,以便与其他策略进行比较。

benchmark_perf = qf.get_performance_summary(returns)

最大夏普比率投资组合—每 30 天重新平衡一次

在这种策略中,投资者选择使投资组合的预期夏普比率最大化的权重。投资组合每 30 个交易日进行一次再平衡。

我们通过对当前交易日的数字(存储在context.time中)使用模运算(Python 中的%)来确定给定的一天是否是一个再平衡日。我们在除以 30 后的提醒数为 0 的日子重新平衡。

我们将在文章的最后检验所有策略的结果。然而,有趣的是,这里看到的是一段时间内的权重分配。

从剧情中得到的一些感悟:

  • 在这个策略中,Twitter 几乎没有任何投资
  • 有时整个月都会被跳过,比如 2016 年 1 月或 2016 年 4 月。这是因为我们每 30 个交易日进行一次再平衡,而一个月平均有 21 个交易日。

最大夏普比率投资组合—每月重新平衡

这种策略与前一种非常相似,我们也选择最大化投资组合预期夏普比率的权重。不同之处在于再平衡方案。首先,我们定义了rebalance方法,它计算最佳权重并相应地执行订单。然后,我们使用schedule_function对其进行调度。在当前设置下,重新平衡发生在市场关闭(time_rules.market_close)后的本月最后一个交易日(date_rules.month_end)。

我们还会随着时间的推移检查重量:

每月重新平衡时,我们确实有所有月份的条目。还有,在这种情况下,2017 年年中对 Twitter 有一些小的投资。

最小波动性投资组合—每月重新平衡

这一次,投资者通过最小化波动率来选择投资组合权重。多亏了PyPortfolioOpt,这就像在前面的代码片段中将weights = ef.max_sharpe()改为weights = ef.min_volatility()一样简单。

最小波动性策略产生的权重在一段时间内肯定是最稳定的——在两个连续时期之间没有太多的重新平衡。当我们考虑交易成本时,这当然很重要。

比较性能

从下面的比较中我们看到,在回溯测试期间,最小化波动性的策略获得了最好的回报和最低的投资组合波动性。它的表现也比夏普比率最大化的策略好得多。

另一个有趣的观察是,所有使用优化创建的定制策略的性能都优于简单的 1/n 分配结合买入并持有。

结论

在本文中,我展示了如何将ziplinepypfopt结合起来,以便对基于均值-方差优化的交易策略进行回溯测试。我们只讨论了夏普比率最大化或整体波动性最小化的投资组合,但是,肯定还有更多可能性。

一些可能的未来方向:

  • 在优化方案中,考虑分配中最大的潜在变化。对于零佣金设置,这不是问题,但是,在存在交易成本的情况下,如果我们每隔 X 天完全重新平衡,我们希望避免在费用上花费太多。
  • 允许卖空
  • 在优化问题中使用自定义目标函数—使用不同的评估指标进行优化

重要的是要记住,该策略在过去表现良好的事实并不能保证这种情况在未来会再次发生。

一如既往,我们欢迎任何建设性的反馈。你可以在推特或评论中联系我。您可以在我的 GitHub 上找到本文使用的代码。

我最近出版了一本关于使用 Python 解决金融领域实际任务的书。如果你有兴趣,我贴了一篇文章介绍这本书的内容。你可以在亚马逊或者 Packt 的网站上买到这本书。

基于 Python 技术分析的算法交易

原文:https://towardsdatascience.com/algorithmic-trading-based-on-technical-analysis-in-python-80d445dc6943?source=collection_archive---------1-----------------------

Source: unsplash

学习如何根据技术分析制定和实施交易策略!

这是 Python 中回溯测试交易策略系列文章的第四部分。之前的文章描述了以下主题:

  • 介绍 zipline 框架并展示如何测试基本策略(链接)
  • 导入自定义数据以使用 zipline ( link )
  • 评估交易策略的绩效(链接)

这一次,文章的目标是展示如何根据技术分析(简称 TA)创建交易策略。引用维基百科,技术分析是一种“通过研究过去的市场数据,主要是价格和交易量来预测价格方向的方法”。

在本文中,我将展示如何使用一个流行的 Python 库来计算 TA 指标——TA-Lib——以及zipline回溯测试框架。我将创建 5 个策略,然后调查哪一个在投资期限内表现最好。

设置

对于本文,我使用以下库:

pyfolio    0.9.2
numpy      1.14.6
matplotlib 3.0.0
pandas     0.22.0
json       2.0.9
empyrical  0.5.0
zipline    1.3.0

助手功能

在创建策略之前,我定义了几个助手函数(这里我只描述其中一个,因为它是影响回溯测试的最重要的一个)。

该函数用于获取回溯测试的修改开始日期。这是因为我希望所有的战略在同一天开始实施——2016 年的第一天。然而,一些基于技术指标的策略需要一定数量的过去观察值——即所谓的“热身期”。这就是为什么我使用这个函数计算回溯测试应该开始的日期,这样在投资期限的第一天,我已经有足够的过去的观察来计算指标。请记住,在回溯测试的真正开始日期之前,不能做出任何交易决定!

更新:实际上没有明确需要使用这种方法。当我们在data.history中指定bar_count时,zipline将自动获取先前可用的棒线数量,即使它们来自回溯测试之前的一段时间。我在这里使用了这种方法。

战略

在本文中,我们使用以下问题设置:

  • 投资者有 10000 美元的资本
  • 投资时间跨度为 2016 年至 2017 年
  • 投资者只能投资特斯拉的股票
  • 我们假设没有交易成本——零佣金交易
  • 不允许卖空(投资者只能卖出他/她目前拥有的股票)
  • 当投资者建仓(买入股票)时,投资者“全押”——分配所有可用资源进行购买

选择这个日期范围的原因之一是,从 2018 年年中开始,Quandl 数据集没有更新,我们希望尽可能保持代码简单。关于如何将自定义数据(包括最新的股票价格)加载到zipline中的详细内容,请参考我在之前的文章

买入并持有策略

我们从最基本的策略开始——买入并持有。这个想法是,我们购买某项资产,在整个投资期限内不做任何事情。因此,在第一个可能的日期,我们用我们的资本尽可能多地购买特斯拉股票,之后什么也不做。

这个简单的策略也可以被认为是更先进的策略的基准——因为使用一个非常复杂的策略产生的钱(一般来说或由于交易成本)比购买一次而什么都不做更少是没有意义的。

我们加载性能数据框架:

buy_and_hold_results = pd.read_pickle('buy_and_hold.pkl')

这里可能发生的(它没有发生,但意识到这种可能性是件好事)是负面ending_cash的突然出现。原因可能是我们想要购买的股票数量是在一天结束时使用当天的(收盘)价格计算的。但是,订单在第二天执行,价格可能会发生显著变化。在zipline,订单不会因为资金不足而被拒绝,但我们最终可能会出现负结余。这种情况大多发生在“全押”策略中。我们可以想出一些方法来避免这种情况,例如手动计算我们第二天可以购买的股票数量,还可以包括一些加价来防止这种情况发生,但是,为了简单起见,我们接受这种情况可能发生。

我们使用一个助手函数来可视化策略的一些细节:投资组合价值的演变、价格序列顶部的交易以及每日回报。

visualize_results(buy_and_hold_results, 'Buy and Hold Strategy - TSLA')

我们还创建了性能摘要(使用另一个助手函数),它将在最后一节中使用:

buy_and_hold_perf = get_performance_summary(buy_and_hold_results.returns)

为了简洁起见,我们不会展示每种策略的所有这些步骤(比如加载性能数据帧或获取性能摘要),因为它们每次都以相同的方式完成。

简单移动平均策略

我们考虑的第二个策略是基于简单移动平均线(SMA)。该战略的逻辑可以总结如下:

  • 当价格向上穿过 20 日均线时,买入股票
  • 当价格向下穿过 20 日均线时,卖出所有股票
  • 移动平均线使用前 19 天和当天——交易决定是第二天的

这是我们第一次需要使用之前定义的 helper 函数来计算调整后的起始日期,这将使投资者能够在 2016 年的第一个交易日做出交易决策。

get_start_date('TSLA', '2016-01-04', 19)
# '2015-12-04'

在下面的策略中,我们使用调整后的日期作为开始日期。

注:data.current(context.asset, ‘price’)相当于price_history[-1]

下面我们举例说明这个策略:

下图显示了价格序列和 20 天移动平均线。我们另外标记了订单,这些订单将在信号产生后的下一个交易日执行。

移动平均交叉

这种策略可以被认为是前一种策略的扩展——我们使用不同窗口大小的两个平均值,而不是单个移动平均值。100 日均线需要更长的时间来适应价格的突然变化,而 20 日均线要快得多。

该战略的逻辑如下:

  • 当快速移动平均线向上穿过慢速移动平均线时,我们买入资产
  • 当慢速移动平均线向上穿过快速移动平均线时,我们卖出资产

请记住,对于这种策略,可以考虑许多不同的窗口长度组合来定义快速和慢速移动授权。

对于此策略,我们需要额外获取 100 天的数据,以应对“预热期”。

下面我们在价格系列的顶部绘制了两条移动平均线。我们看到该策略产生的信号比基于 SMA 的策略少得多。

MACD

MACD 代表移动平均线收敛/发散,是股票价格技术分析中使用的指标/振荡器。

MACD 是使用历史收盘价计算的三个时间序列的集合:

  • MACD 系列——快速(短期)和慢速(长期)指数移动平均线之间的差异
  • 信号——MACD 序列的均线
  • 散度——MACD 级数和信号之间的差异

MACD 由用于计算三个移动平均线(MACD(a,b,c))的天数来参数化。参数 a 对应快速均线, b 对应慢速均线, c 对应 MACD 信号均线。最常见的设置,也是本文中使用的,是 MACD(12,26,9)。从历史上看,这些数字对应于基于 6 天工作周的 2 周、1 个月和 1.5 周。

需要记住的一点是,MACD 是一个滞后指标,因为它是基于移动平均线的。这就是为什么 MACD 对于没有趋势或者价格波动不稳定的股票不太有用。

我们在本文中使用的策略可以描述为:

  • 当 MACD 向上穿过信号线时买入股票
  • 当 MACD 向下穿过信号线时卖出股票

和以前一样,为了计算预热时间,我们需要确定我们有 34 个观测值来计算 MACD。

下面我们画出了 MACD 和信号线,交叉线表示买入/卖出信号。此外,人们可以以柱状图的形式绘制 MACD 散度(通常称为 MACD 直方图)。

RSI

RSI 代表相对强弱指数,这是另一个我们可以用来制定交易策略的技术指标。RSI 被归类为动量振荡器,它测量价格方向运动的速度和幅度。动量描述了资产价格上涨或下跌的速度。

不涉及太多的技术细节,RSI 测量的是较高收盘价与较低收盘价的比值。具有更多/更强正变化的资产比具有更多/更强负变化的资产具有更高的 RSI。

RSI 的输出是一个从 0 到 100 的数字,通常以 14 天为基础进行计算。为了生成交易信号,通常将 RSI 的高低水平分别指定为 30 和 70。对阈值的解释是,较低的阈值表示资产超卖,较高的阈值表示资产超买。

有时,中等水平(介于低和高之间)也被指定,例如在策略中也允许卖空。我们还可以选择更极端的阈值,如 20 和 80,这将表明更强的势头。然而,这应该使用领域知识或通过运行回溯测试来指定。

我们考虑的策略可以描述为:

  • 当 RSI 越过下限(30)时,买入资产
  • 当 RSI 超过上限(70)时,卖出资产

下面我们将 RSI 与上限和下限一起绘制。

评估绩效

最后一步包括将所有性能指标放入一个数据框架中,并检查结果。我们可以看到,在我们的回溯测试中,基于简单移动平均线的策略在产生的回报方面表现最好。它还拥有最高的夏普比率——每单位风险的最高超额回报(在这里是回报,因为我们不认为是无风险资产)。第二好的策略是基于 MACD 的策略。值得注意的是,只有这两只股票的表现好于基准的买入并持有策略。

perf_df = pd.DataFrame({'Buy and Hold': buy_and_hold_perf,
                        'Simple Moving Average': sma_perf,
                        'Moving Average Crossover': mac_perf,
                        'MACD': macd_perf,
                        'RSI': rsi_perf})
perf_df.transpose()

结论

在这篇短文中,我展示了如何将ziplinetalib结合起来,根据流行的技术指标,如均线、MACD、RSI 等,对交易策略进行回溯测试。但这只是开始,因为有可能创造更复杂的策略。

一些可能的未来方向:

  • 在策略中包括多种资产
  • 允许卖空
  • 混合指标
  • 对每个策略的不同参数进行回溯测试,以找到性能最佳的策略

我们还必须记住,该战略在过去表现良好的事实并不能保证这种情况在未来会再次发生。

一如既往,我们欢迎任何建设性的反馈。你可以在推特上或评论中联系我。你可以在我的 GitHub 上找到本文使用的代码。

喜欢这篇文章吗?成为一个媒介成员,通过无限制的阅读继续学习。如果你使用这个链接成为会员,你将支持我,而不需要额外的费用。提前感谢,再见!

以下是该系列的其他文章:

  • 基于均值-方差分析建立算法交易策略(链接)

我最近出版了一本关于使用 Python 解决金融领域实际任务的书。如果你有兴趣,我贴了一篇文章介绍这本书的内容。你可以在亚马逊或者 Packt 的网站上买到这本书。

算法交易机器人:Python

原文:https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145?source=collection_archive---------1-----------------------

随着云计算的兴起,免佣金交易 API 已经让普通人运行自己的算法交易策略成为可能。你需要的只是一条小蟒蛇和一点运气。我将向你展示如何使用羊驼在谷歌云平台(GCP)上运行一个。一如既往,所有的代码都可以在我的 GitHub 页面上找到。

你首先需要的是一些数据。有一些免费的数据来源,当然也有需要花钱的来源。我将使用免费的 TD Ameritrade API 。接下来你需要的是一个交易平台,你可以通过 API 提交免佣金交易。

为此我会用羊驼毛。羊驼也允许纸交易(假币),所以我们可以在野外测试我们的策略,而不会让我们的家庭破产💸。然后,您只需要一种方法来自动运行您的机器人和存储/检索数据。为此,我们将使用 GCP,因为这是我所熟悉的,但任何云平台(AWS,Azure 等)。)也一样管用。

Photo by M. B. M. on Unsplash

哦,当然你需要一个交易策略。这篇文章是关于建立运行交易策略的框架,所以策略本身并不重要,也不是重点。出于演示的目的,我将使用动量策略,寻找在过去 125 天内具有最大动量且每天交易的股票。

你不应该在没有彻底回测的情况下盲目使用这个策略。我真的不能强调这一点。你不应该接受我的投资建议,你很可能会后悔😄。

数据

你首先需要的是大量的股票。我会用纽约证券交易所上市的所有股票。为了得到这些股票的代码,我们要从 eoddata.com 那里刮下来。然后,我们可以从 TD Ameritrade API 请求这些股票代码的数据。

一旦我们有了数据,我们将把它存储在一个 BigQuery (BQ)表中,这样我们就可以在以后的策略中得到它。这一切都将在一个云函数中运行,我们可以安排在每个工作日收盘后运行,以获得最新的收盘价。

我将 API 凭证存储在云存储的一个文本文件中,因此它们不是硬编码的。我们只是通过 API 调用从那里检索它们。然后我们得到日期来检查市场是否开放。然后我们抓取纽约证券交易所的股票代码,并将它们传递给 TD Ameritrade API,以获取当天的数据。

然后,我们通过 API 将数据存储在一个 BQ 表中,以便稍后用于我们的 bot。

我只使用收盘价,但是 API 返回了更多的数据,所以把所有数据都存储起来是个好主意。我创建了一个名为“equity_data”的数据集,该表将被命名为“daily_quote_data”。如果该表不存在(即,您第一次这样做时),将创建该表,然后每天都会向该表追加新数据。

在 GCP,你可以用这个脚本创建一个云函数。要安排这个云功能在设定的时间运行,只需为触发选项选择“云发布/订阅”并创建一个主题。

然后转到 Cloud Scheduler,将主题设置为在需要时运行。在这里,我们将它设置为每个工作日东部时间下午 5 点运行。频率以 unix-cron 格式设置。有效载荷只是一个将要发送的消息,可以是您想要的任何内容,但它是必需的。

将云函数的超时设置为最大值 540 秒也是一个好主意,这样可以避免超时。这可以在高级选项部分找到。

这将下载未来的数据,但我们也需要交易机器人的备份数据。我在这里使用的端点是“报价”端点,它不提供历史数据。要获得历史价格数据,您必须使用“pricehistory”端点。我在 GitHub 文件夹中提供了一个名为“get_historical_data.py”的文件。您可以在本地运行该文件,然后将数据帧下载到 csv 中,并上传到 BQ 表中。

交易机器人

基本上,交易机器人需要能够:

  1. 知道我们有多少钱可以交易
  2. 获取在策略中使用的数据
  3. 根据策略选择我们想要的股票
  4. 买入/卖出这些股票来更新我们的投资组合

整个云函数在较长的一边,所以我在这里总结一下,但是完整的代码在我的 GitHub 上。就像我说的,策略在这里并不重要,我使用了一个简单的动量策略,选择了过去 125 天中动量最高的 10 只股票。

首先,我们从 BQ API 将历史数据下载到动量策略的数据框架中:

然后我们从羊驼 API 得到当前头寸和我们当前的投资组合价值。他们有一个我在这里使用的 API 包装器。凭证再次存储在云存储上的文本文件中。请注意,我们使用的基本 url 是用于纸张交易的。你可以在你的纸上交易账户中设置任何金额,这里我设置为$10K。显然,如果这是你第一次运行这个程序,你不会在羊驼有任何头寸,所以在你运行云函数之前,只需在本地运行脚本,根据你选择的动量股票获得你的初始投资组合。然后把那些送到羊驼 API 去买。我假设你已经这么做了。

现在我们有了历史数据和交易金额,我们可以根据我们的策略选择股票。第一步是识别动量最高的股票。

动量计算来自安德烈亚斯·f·克莱诺的《交易的演变》一书,我推荐这本书。它非常容易理解,并且针对不同类型的策略有很多不同的代码示例。

它的工作方式是计算每只股票在过去 125 天(最少 40 天)的收盘价的线性回归。下一步是让它更容易让人理解。它取回归线斜率的指数(告诉你每天上涨或下跌的百分比),然后按年计算(252 的幂,这是一年中的交易天数)并乘以 100。然后乘以 r 的平方值,这将为很好地解释方差的模型提供权重。

在我们确定了动量得分最高的前 10 只股票后,我们需要决定每只股票的购买数量。投资组合配置本身就是一个完整的主题,所以我不会在这里深入讨论,因为它并不重要。为了在这里进行分配,我使用了 pyportfolioopt 库。

我们现在有一个 df,上面有我们想买的股票和数量。现在我们需要弄清楚,根据我们当前的投资组合,我们是否需要卖出任何股票。有可能:

  1. 我们今天对动量股票的选择和分配与昨天完全一样,我们不需要进行任何买卖
  2. 在我们目前的投资组合中,有些股票我们根本不想再持有了
  3. 我们今天想买的股票和我们目前持有的股票是一样的,但是我们想持有的数量发生了变化(增加或减少)
  4. 我们今天想买一些新股票,这些股票昨天不在我们的投资组合中

我们需要检查所有这些东西,并进行任何必要的销售或购买。首先,我们将检查当前投资组合中是否有我们不再需要的股票。

现在我们有了一个数据框架,其中包含了我们想要出售的任何股票以及我们需要出售的数量。接下来,我们将查看我们当前拥有的任何股票数量是否减少了。同样,从技术上讲,这里可能没有变化,所以我们需要检查是否有变化。这将给我们一个最终的数据框架,包含我们需要卖出的所有股票。

现在我们已经有了要出售的股票的完整列表(如果有的话),我们可以将它们发送给羊驼 API 来执行订单。

最后,我们需要看看是否有我们目前持有的新股票数量增加了,或者是否有我们今天想买但昨天没有的新股票。

如果我们需要购买任何产品,我们会将订单发送给 API。

完成后,记录投资组合也是一个好主意。羊驼只允许你有一个单一的纸交易账户,所以如果你想运行多个算法(你应该),你应该创建一个日志,这样你就可以自己跟踪它们。我们可以创建一个策略栏来将此策略与其他策略区分开来。然后,我们可以简单地将它添加到另一个 BQ 表中。

下面的 SQL 查询将为您提供您的投资组合与前一天相比的每日总额和百分比变化。

那是机器人。现在,您可以安排它在云函数中每天运行。这应该会给你一个很好的框架来运行你自己的交易策略。

Photo by Frank Busch on Unsplash

算法是种族主义的。现在怎么办?

原文:https://towardsdatascience.com/algorithms-are-racist-now-what-53fc130bb203?source=collection_archive---------15-----------------------

Photo by Yuriy Golub/Shutterstock

围绕算法给现有不平等加剧带来的危险,人们一直在进行讨论。2016 年,凯西·奥尼尔(Kathy O'Neil)出版了《数学毁灭武器》(Weapons of Math Destruction),这本书揭示了危险的算法,这些算法声称可以衡量我们生活中从教育到犯罪水平和就业等关键方面的质量;但实际上却强化了有害结果,增加了不平等。这些危险的算法,或者说数学毁灭的武器,大多符合四个原则:

1-不透明:他们行事隐秘,他们的目标人群不了解他们是如何工作的,那些拥有更多权力和特权的人甚至可能不会遇到这些算法

2-规模:它们分布广泛,影响许多人

3-损害:它们对人们生活中的关键时刻(尤其是贫穷的有色人种)产生负面影响,并导致无望和绝望。

4-代理:他们缺乏他们最感兴趣的行为的数据,所以他们使用替代数据,这些替代数据提供了不精确的指标,通常是有偏差的

Weapons of Math Destruction

我们在预测性警务算法中看到了这一点,这些算法利用先前逮捕的有偏见的历史数据(由于妨害犯罪的水平较高,这些数据偏向于较贫困的社区),来确定未来犯罪将在哪里发生,并确定应该将警察更频繁地派往哪里巡逻。这导致了在贫困地区更多的警察和自我实现的强化循环。

一个社区的警力越多,因妨害治安罪被捕的人就越多。因妨害治安罪被捕的人越多,犯罪地图上的点就越多。犯罪地图上的点越多,就越有理由维持治安。危险的反馈循环继续下去。

很容易相信更多的数据就是更好的数据。但是有偏见的数据进入,意味着有偏见的数据出来。换句话说,“垃圾进垃圾出。”

最终,我们是将这些数据输入算法的人。我们创造它们,我们对它们保密,对它们如何工作的理解远离受它们影响最大的人。在最近的 PBS 采访中,麻省理工学院媒体实验室主任 Joi Ito 证实了这种技术的局限性,因为有缺陷的人类正在选择数据输入。

“人工智能不会神奇地让我们变得聪明,”伊藤说。“在锁定这些算法之前进行这些关于种族的对话,真的比所有这些数学问题更重要。”

[## 麻省理工学院的 Joi Ito 讨论了新技术中复杂的道德问题

现在我们转向与最有良知的人斗争的学者。以创新者发现自己处于泡沫中为例…

www.pbs.org](https://www.pbs.org/wnet/amanpour-and-company/video/joi-ito-of-mit-discusses-complex-moral-issues-in-new-tech/)

如果我们生活在一个种族主义的社会中,我们就是这样,我们的算法天生就是种族主义的,那么一旦我们理解了这一点,我们该如何行动呢?人们目前如何试图纠正不仅仅是这些算法系统的错误,而是整个社会的错误?

预测软件的一个问题是,它经常将摄像头放在较差的颜色社区。强大的系统控制着预测软件将使用哪些数据,预测软件将如何评估这些信息,以及这些信息是否对利益相关方(包括有色人种社区)开放。

但是,如果我们有能力将镜头转向这些系统,以激发系统性的变化,那会怎么样呢?

鉴于美国大规模监禁的现状以及有色人种社区和执法机构之间令人痛苦的历史和现实关系,有人提出了翻转相机的倡议,特别是关于刑事司法系统的倡议。美国的几个警察部门已经开发并开始使用“早期预警系统”,该系统可以识别那些可能受益于额外培训、资源或咨询的警察,以防止过度使用武力。通过使用警方数据和关于当地犯罪和人口统计的特定背景数据,这些系统通过检测可能导致过度使用武力的因素,如传讯、投诉和内部事务调查来工作。这些数据也向公众开放,以建立更大的社区信任。

我认为,试图通过向公众公开这些信息来消除不透明性是一个重要的行动。看到人工智能被用作解决系统性问题和潜在转变政策的手段令人兴奋。也就是说,我认为这种类型的算法也可能存在有问题的偏差。这取决于用来确定官员的标准。我认为我们需要努力提高算法系统的透明度。我们需要使用语言让所有人都能理解和理解。我们需要理解输入的数据,以便检查这些信息是否是一个公平的指标,或者是我们想要评估的事物的一个糟糕的代理。此外,我们需要直面我们认为的偏见,并努力让所有利益相关者参与到创建和评估过程中。

我对我们技术固有的种族主义本质的另一个回应是,我们如何利用算法给弱势群体更多的机会?

已经有一些算法被用来给弱势群体更多机会的例子,特别是在教育领域。

“在高等教育中使用大数据的机会既可以产生歧视,也可以防止歧视。”

Georgia State University

学校可能用于从申请过程中捕获学生数据的技术可用于拒绝录取/其他机会,或识别和服务更可能需要额外支持的学生。佐治亚州立大学是后者的一个很好的例子。在他们的毕业和升学成功(GPS)建议项目中,他们跟踪每个学生的 800 个不同的风险因素,目的是让学生顺利毕业。当发现问题时,学校会主动提供建议和干预,给予学生所需的支持。有了这个项目,佐治亚州在几年前创造了历史。他们第一次让第一代、黑人、拉丁裔和佩尔助学金资助的学生的毕业率达到或超过了全体学生的毕业率。此外,佐治亚州现在授予黑人学生的学士学位比美国任何非营利学院或大学都多。

我们必须努力围绕我们现有的种族偏见保持跨学科的空间和对话。算法有潜力成为解决社会问题的工具,但我们需要明白,这些数学模型是我们现有社会的延伸,因此不能摆脱人类的偏见。如果我们计划使用这些算法,我们必须意识到它们的局限性,创造透明度的重要性,以及对人类检查点和一致的多利益相关方反馈的需要。

文本分类算法—第一部分

原文:https://towardsdatascience.com/algorithms-for-text-classification-part-1-naive-bayes-3ff1d116fdd8?source=collection_archive---------6-----------------------

朴素贝叶斯算法讲解

当你这几天查看关于自然语言处理(NLP)的新闻时,你会看到很多围绕语言模型、迁移学习、OpenAI、ULMFit 等的炒作。赶上 NLP 的当前技术水平是很好的,尽管我仍然相信人们应该很好地理解经典算法,如朴素贝叶斯和逻辑回归。为什么?因为你可能合作的公司可能并不专门开发聊天机器人或文本生成机器!大多数时候,从简单的模型开始可能会给你带来很好的结果,而不需要你拼命向你的商业伙伴解释你的方法。所以这篇博文是一系列文本分类方法的开始,从基本的开始。我将尝试解释理论以及如何在实践中使用算法。

朴素贝叶斯

为什么取这个名字?“Bayes”得名于概率论中著名的 Bayes '定理,“Naive”是因为这个算法的假设非常简单,而且大部分时间都不成立。

朴素贝叶斯的一般思想:

  1. 将文档 X 表示为一组( w ,频率为 w )对。
  2. 对于每个标签 y ,建立类别 y 中文档的概率模型 P(X| Y = y)。
  3. 为了分类,选择最有可能产生 X 的标签 y :

假设:

  1. 文档 X 中单词的顺序没有关系,但是单词的重复有关系。
  2. 给定文档类,单词彼此独立出现。

基于这些假设,我们有以下等式来估计 P(X|y):

这些方程有问题:

对于等式(1),如果我们的文档具有超过 100 个单词,则 P(w₁,…,w_n|Y = y)将是非常小的单词概率的乘积(< 0.1), leading to the UNDERFLOW problem =>用对数工作是维持数值稳定性所希望的)。

对于等式(2),如果我们在新文本中有一个新词 w 需要分类,P(W = w | Y = y) = 0 作为 w 在我们的训练数据中从未出现过。一个解决方案是平滑概率。假设我们有 P(w|y) = pm 个例子。此处使用的 mp 是多项式分布的狄利克雷先验。请注意,平滑方法有很多种。

把所有这些放在一起,我们有下面的算法:

现在,让我们通过一个假设的例子来理解这个算法:

假设我们有 3 个文档:

X₁ =“政府关闭”,标签为 y₁ =新闻

X₂ =“联邦雇员抗议关闭”,标签为 y₂ =新闻

X₃ =“将忧郁转向葬礼”,标签是 y₃ =诗歌

和一个要分类的新文档:

X_new = "关闭影响联邦雇员利益"

然后我们可以从我们的训练数据中得到这个计数表

为了简单起见,我没有排除停用词,但在实践中,您肯定应该这样做。另外,为了防止下溢问题,我定义了平滑参数: p = 0.5, m = 1。然后,我们可以如下计算新文档 X_new 的每个标签的分数。

我们可以看到标签“新闻”的得分高于标签“诗歌”的得分,所以我们将 X_new 归类为“新闻”。

接下来,让我们看看如何使用 Python 和真实数据运行这个算法:

import pandas as pd
import numpy as npspam_data = pd.read_csv('spam.csv')spam_data['target'] = np.where(spam_data['target']=='spam',1,0)
print(spam_data.shape)
spam_data.head(10)

from sklearn.model_selection import train_test_split
**#Split data into train and test sets**X_train, X_test, y_train, y_test = train_test_split(spam_data['text'],spam_data['target'],random_state=0)from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import roc_auc_score**#Train and evaluate the model**vect = CountVectorizer().fit(X_train)
X_train_vectorized = vect.transform(X_train)
clfrNB = MultinomialNB(alpha = 0.1)
clfrNB.fit(X_train_vectorized, y_train)
preds = clfrNB.predict(vect.transform(X_test))
score = roc_auc_score(y_test, preds)print(score)#0.9720812182741116

我们的 AUC 评分是 0.97,对于这样一个简单的模型来说已经不错了。我们将在以后的博客文章中使用相同的数据集将这种性能与其他算法的性能进行比较。

学习算法的简要介绍

原文:https://towardsdatascience.com/algorithms-part-1-c1e148dfa3f?source=collection_archive---------27-----------------------

在这篇文章中,我将(1)介绍研究算法背后的基本推理,(2)介绍大 O 符号,(3)对 Karatsuba 的算法做一个简要的分析。

我的帖子大致遵循了 Tim Roughgarden 的算法课程,如果你想为理解数据结构和算法设计打下坚实的基础,我强烈推荐你学习这些课程。

  1. 什么是算法,为什么要研究算法?

算法是一组指令,通常用于解决一类问题或执行计算。自从希腊数学家以来,这个概念就一直无处不在。例如,想想用于长除法小学乘法的步骤。

对于更大的数据集,时间复杂度的概念变得非常重要。这是因为我们编写代码的方式直接关系到我们的数据是如何被分析的,因此,我们可以得出结论。

2.大 O 符号

大 O 符号, O(n) ,被开发用来表达算法的时间复杂度。使用字母 O 是因为函数的增长率也被称为函数的阶。

算法的效率表示为输入长度 n 的函数。更正式的说法是,这被称为算法的渐近增长率— 我们关心的是当输入趋近于无穷大时,我们的算法的工作效率如何。

想想你在学校是怎么学乘法的。这个算法是“正确的”,因为只要你按照步骤操作,它总是会返回正确的结果。但是对于计算类似 12315432534535 x 35843958345 的乘积,它的性能会有多好呢?

考虑这个问题的一个很好的方法是可视化一些时间复杂性的基本函数。看看下面的备忘单,了解当输入变得非常大时,运行时间会如何比较:

我们可以看到从最快到最慢有一个等级*:

—常数时间: O(1)

—对数时间: O(对数 n)

—线性时间: O(n)

n 日志时间: O(nlog n)

—二次时间: O(n )

*点击此处查看更多详细列表

关于 Big O shorthands 的重要说明:

  • 算术运算是常数
    当我们考虑渐近增长时,这些较小的项变得无关紧要,并被完全忽略。为什么?因为增长是输入长度 n. 的函数,例如 (n)(n+150) 、或 (150n) 的运算可以表示为 O(n)
  • 变量赋值是恒定的
  • 访问数组(通过索引)或对象(通过键)中的元素是不变的
  • 在循环中,复杂度=(循环长度)x(循环内部复杂度)

3.看看一些众所周知的算法

作为我们的第一个例子,我们的小学算法在时间复杂度方面表现如何?

Section 1.2 in http://www.algorithmsilluminated.org/

  1. 我们从第一行的部分积开始:22,712。它需要最多,2 次运算(#1: 4 x (8,7,6,5),#2:结转的加法(3,3,2,2),所以我们可以说总的运算次数是≤ 2n
  2. 由于所有剩余的 n 行都发生了相同的精确运算(我们首先将顶部的行相乘,然后将进位相加),因此我们可以将计算所有部分乘积(上面所有蓝色数字)所需的工作加起来作为 2n
  3. 最后一个操作是将每一行的总和相加,这是与步骤 2 相当的操作数,另一个 2n ,使我们的总操作时间达到 4n ,但是这是作为时间复杂度的函数的什么呢?

根据定义,大 O 不考虑常数算术函数,即加法和乘法因子。就像上一节的例子一样,如果你在图上画出 n,n+150150n150n 增长得更快,但是在所有这些函数中总会有一个恒定的算术因子。然而,就渐近增长而言,我们所关心的是 n 与增长了多少——在这两个例子中,都是简单的 O(n)

所以,我们可以把上面的常数 4 去掉,我们看到年级学校算法是 O(n )

现在,我们必须经常问自己,我们能做得更好吗?

事实证明我们可以。实际上,复数乘法有多种算法,这里我们来看看其中的一种, Karatsuba 乘法,它产生了更快的运行时间 O(log n)

使用我们上面的例子,(1234) x (5678):

Section 1.3 in http://www.algorithmsilluminated.org/

  1. 步骤# 1–3 是如上所述的乘法。
  2. 步骤 4 从步骤 3 的结果中减去步骤 1 和步骤 2 的结果
  3. 步骤#5 添加如下的零,并添加来自#1、2 和 4 的结果:
    — #1: +4 个零(672+0000)
    — #2: +2 个零(2840+00)

如你所见,结果和我们的长乘法算法是一样的!

现在看来很明显,Karatsuba 的算法利用了递归函数 作为一种分治算法,这意味着我们获取原始输入(1234) x (5678),将其分割成更小的块,在更小的块上执行工作,并使用来自这些块的答案来解决原始问题。

更一般地,我们可以用这些较小的数字来表示相关的递归调用, abc、d :

Section 1.3 in http://www.algorithmsilluminated.org/

我们可以快速查一下 x 是(12x100+34)= 1234y 是(56 x 100 + 78)= 5678。按照上面最后一行展开这些表示,我们有了一个清晰的紫色(*)递归函数表达式:

Section 1.3 in http://www.algorithmsilluminated.org/

关键见解:回想之前,步骤#3 只在步骤#4 中需要,也就是说,我们可以从中减去步骤#1 和步骤# 2 的结果。如果我们展开步骤#3 (ac+ad+bc+bd ),很明显步骤#4(步骤# 3-步骤# 2-步骤#1)可以简化为上面的(ad+bc)*,只剩下 3 个递归调用,而不是 4 个!
*此快捷键为复数乘法归于高斯。

在以后的文章中,我将尝试介绍合并排序算法和渐近分析。

算法,中立的幻觉

原文:https://towardsdatascience.com/algorithms-the-illusion-of-neutrality-8438f9ca8471?source=collection_archive---------24-----------------------

内部人工智能

可信人工智能之路

从人类到算法

偏见是人类的基本特征。我们都有偏见,这是我们的本性,每天我们都根据自己的直觉做出无数的决定。我们都有先入为主的想法、偏见和观点。这很好,只要我们认识到这一点并为此负责。

除了数据处理能力和业务效率的大幅提高,人工智能的根本承诺是帮助减少人类决策的意识或无意识偏差。归根结底,这就是我们对算法的期望,不是吗?客观性,数学的超然而不是模糊的情绪,基于事实而不是本能的决定。算法应该提醒人们注意他们的认知盲点,这样他们才能做出更准确、更公正的决定。

至少理论上是这样的…

Bias, a human virus transmittable to computer — Photo by Markus Spiske on Unsplash

事实上,偏见就像一种会传播和复制的 T4 病毒。人类的偏见被转移到人工智能和机器学习(ML)应用程序,主要是通过它们被馈送和训练的数据。人工智能从我们给它的任何东西中学习。这意味着决策的质量取决于训练数据的质量。但是训练数据可能是不完整的和不具有代表性的,它可能继承了先前决策者的偏见,或者它可能只是反映了世界上持续存在的普遍偏见。

模型的设计也可能引入偏差。从算法的角度来看,偏差可以理解为过度简化。模型可能过于僵化,因此无法把握数据中潜在的趋势和复杂性。然而,它们也可能对微小的波动非常敏感,以至于在捕捉信号的同时捕捉到大量噪声。在完全有偏模型和完全可变模型之间,有一个中间地带,熟练的数据科学家在设计和开发模型时必须找到。

问题是,偏差不仅会被转移到算法中,还会被放大。当有偏差的 ML 算法创建新数据并作为其持续训练的一部分重新注入到模型中时,就会发生这种情况。当有偏算法作为自动决策过程的一部分用于每分钟进行数百万次预测时,情况会变得更糟,从而将偏见带回到现实世界中。

从算法偏见到现实世界的歧视

最近,在 SAS Analytics 路演期间(# Road2AI ),一位与会者问我:“如果我们接受人类天生有偏见,为什么我们应该期待算法有什么不同?”

这是一个公平的问题,但我认为有理由为算法设定更高的标准。首先是因为放大。算法可以通过复制和放大已经存在的偏见使事情变得更糟。第二个原因是问责。当一个人做出决定时,这个人就要对这个决定的后果负责。当算法做出决定时,谁负责?

Biased algorithms lead to real world discrimination — Photo by Yasin Yusuf on Unsplash

算法偏见有可能在现实世界中造成歧视和不平等。当我们看到偏见和刻板印象是多么容易不受控制地渗透到日常应用中时,这就更加令人担忧了。

直到去年,当你在文本中输入“CEO”时,iOS 会显示一个商人的图标。换句话说,它被设定为假设首席执行官可能是男性。同样,谷歌翻译似乎有很多内置的性别偏见,在将几个简单的句子从土耳其语翻译成英语时弹出来。看起来,医生、士兵和总统应该是他,护士、教师和歌手应该是她。更糟糕的是,他很勤奋,但她很懒。在这两种情况下,现在已经对模型进行了调整以纠正这种偏差,但不幸的是,这只是在事件发生之后。事后看来,这显然不应该发生,但毕竟,这只是一个有点尴尬负面宣传的问题,不是吗?

然而,偏见对个人的影响可能要严重得多。

例如,人工智能可以用来伸张正义。它可以帮助法官评估被告再次犯罪的可能性,并建议是否给予假释或刑期。这可能有助于减少监狱人口和累犯率,但也可能增加歧视。事实证明,该系统实际上对少数族裔有偏见,他们被贴上高危惯犯标签的可能性是白人罪犯的两倍。

预测性警务也有同样的问题。ML 算法使用大量数据来预测特定个人犯罪的可能性。除了明显的隐私问题之外,这些算法也不能避免对少数族裔的偏见。这又提出了问责问题。谁对这些决定负责?我们如何确保使用的数据是准确的?我们如何证明没有人能完全理解的黑盒 ML 算法所做的决定是正确的?

在金融行业,大多数抵押贷款和保险定价决策都是由算法做出的。我们如何确保这些决定是公平和非歧视性的?换句话说,我们如何确保算法选择不是基于与受保护的人口统计变量(如种族和性别)相关的输入变量?

偏见也不利于商业

在人力资源领域,预先存在的人为偏见是不可否认的。因此,许多人力资源部门已经开始使用人工智能技术来解决这个问题,以增加劳动力的多样性,并通过使招聘过程更加公正来提高新员工的质量。但同样,算法偏差往往会产生相反的效果。最近,亚马逊宣布将停用其人工智能招聘工具,因为它对女性有偏见。让我们说,你正试图雇用一名工程师,使用一种利用历史数据训练的最大似然算法。如果培训数据是基于现有的在职人员,那么几乎肯定会包括大多数男性。因此,该算法很可能会推荐男性候选人,即使你删除了性别作为输入变量——公平地说,亚马逊已经这样做了。这导致了对女性的歧视,但也剥夺了公司雇佣更有技能的(女性)工程师的机会。在这种情况下,模型中的性别参数太强,因为用于建立模型的数据缺乏代表性。

Accuracy matters — Photo by Vitolda Klein on Unsplash

偏见的问题在于它会带来不准确的结果和糟糕的决策。不仅仅是“做好人”或者“做正确的事”。这也是为了确保对人工智能的投资能够带来预期的收益。它是关于确保商业决策是基于公正、准确的见解做出的。它是关于确保员工可以依赖人工智能应用程序来做出正确的决定。

最后,有必要积极主动地解决偏见问题,因为当歧视性做法,甚至是无意的做法被公开时,会造成声誉损害。这是一个保护你的品牌的问题。如今,人们理所当然地希望组织公平对待他们。对任何企业来说,失去客户的信任都是最糟糕的事情。

如果交付值得信赖、负责任和有道德的人工智能的能力成为一个竞争优势,我不会感到惊讶。它甚至可能发展成为组织推广其品牌的一种方式,就像他们对世界自然基金会和公平贸易这样的标签所做的那样。

反对偏见的战争

那么,我们如何减少或消除自动决策的偏差呢?

不幸的是,没有灵丹妙药。相反,组织需要不断努力,主动审查人工智能应用程序的设计、开发、部署和使用,并在必要时采取纠正措施。

第一步是提高那些参与开发人工智能应用程序的人的意识。这不仅仅意味着数据科学家(他们应该已经很清楚这个问题)。它也意味着领域专家和技术专家。所有这些都在端到端分析生命周期中发挥着作用。

Awareness, governance, oversight and audit in the quest for unbiased AI — Photo by mari lezhava on Unsplash

第二步是建立流程来审计人工智能应用程序使用的模型的输入和输出。这应确保用于训练模型的数据具有代表性且没有偏差。在开发模型时,数据科学家应该结合逻辑来帮助识别和突出数据中的偏差。统计分析也可以与人工智能应用程序做出的预测一起使用,以寻找可能表明偏差的意外模式或趋势。

最后,围绕人工智能应用的使用建立一个强大的治理框架至关重要。这应包括一个多学科管理机构,负责:

  • 定义组织愿意遵守的指导原则(或道德规范)。谷歌最终被迫这么做,但在此之前,它受到了一波抗议和员工辞职的打击,这些员工对该公司为美国国防部工作感到担忧。
  • 加强实践和技术的一致性,跨部门和计划共享分析资产和人才。
  • 定义明确的角色和职责。
  • 对人工智能应用程序的输出进行监督,以衡量其准确性、无偏差性以及对数据主体和业务成果的影响。

除了道德问题之外,反对偏见的战争也是商业的当务之急。要保证 AI 应用的采用和预期价值的实现。有很多关于人工智能将如何取代人类的讨论,但我们还没有到那一步。事实上,我们离它还很远,但这并不意味着人工智能的世界没有危险。

正如苹果 ML 和 AI 战略高级副总裁、前谷歌 AI 主管约翰·詹南德雷亚(John Giannandrea)所说:“ 忘记杀手机器人——因为偏见是真正的 AI 危险 ”。

更多信息,请阅读我关于这个主题的另外两篇博客:

关于备份图表的所有信息

原文:https://towardsdatascience.com/all-about-backup-diagram-fefb25aaf804?source=collection_archive---------14-----------------------

解释强化学习算法的图表

众所周知,一幅画胜过千言万语;备份图给出了强化学习中不同算法和模型的可视化表示。

备份过程(更新操作)通过表示状态、动作、状态转换、奖励等,是算法的图形化表示..价值函数(状态或状态动作)从它的后继状态或状态动作被转移回一个状态(或状态动作)。

在备份图中,状态值由空心圆表示,而状态-动作值或动作值由实心圆表示。动作由从状态开始的箭头表示。奖励通常显示在行动值之后。产生最大动作值动作显示为从一个状态开始的弧线。状态值、动作值、动作、最大动作值、状态转换的标准表示见下图。

随机策略π下的状态值函数

现在我将介绍如何使用备份图显示状态值。

  1. s 是起始状态,它是根节点
  2. 从状态 s 可以有三个动作,如箭头所示,代理按照策略π采取动作
  3. 状态动作值或动作用实线圆圈表示(惯例是从状态采取动作,采取动作后领取奖励)。
  4. 一旦采取行动,如果是具有一定状态转移概率的随机环境,则代理可以结束于不同的状态(在确定性环境中,代理结束于特定行动的特定状态)。我已经展示了在采取最正确的行动后,代理可以进入的 3 种可能状态。3 个转换显示在蓝色箭头中,转换概率为 p。获得的回报为 r,这也取决于转换动态和采取的行动。代理转换到新状态 s’。

随机政策π下的国家行为价值函数

类似于状态值函数,我们可以为动作值函数或状态-动作值函数创建备份图。在这种情况下,根节点是实心圆,因为它是来自特定状态的特定动作。

在下面的备份图中,我展示了每个组件是如何连接的,以便更直观。这让我们对 MDP 有了更好的理解,因为我们可以把这个图扩展到整个状态空间。

  1. 在状态 s 下,状态值为 vπ(s)
  2. 从状态 s,代理可以采取 3 个动作(a1,a2,a3)
  3. 对于所采取的动作,动作值为 qπ(s,a ),其中 a =
  4. 这里,代理采取了行动 a3。它可以分别以转移概率 p1、p2 或 p3 到达状态 s’1、s’2 或 s’3(注意,如果代理选择动作 a2 或 a3,将会有不同的状态,并且相应的转移概率将是适用的。
  5. 收集的奖励根据其落地状态显示为 r1、r2 或 r3。

最佳状态值和最佳动作值

下图显示了特定状态 s 的状态值的贝尔曼最优性方程,以及从状态 s 采取的动作 a 的状态动作值的贝尔曼最优性方程。根据贝尔曼最优性方程,这是确保最优性的状态的最大动作(在后续状态中产生最大状态值的动作)。

备份图可用于显示在等式中使用值函数的 RL 算法的图形表示。下面是几个更广为人知的算法,当我们参考备份图时很容易理解。

蒙特卡洛状态值

蒙特卡洛方法是一个非常简单的概念,当智能体与环境交互时,智能体学习状态和奖励。在这种方法中,代理生成经验样本,然后基于平均回报,为一个状态计算值。下面是蒙特卡罗(MC)方法的主要特征:

  1. 没有模型(代理不知道状态 MDP 转换)
  2. 经纪人学习被取样的经验
  3. 通过体验来自所有采样剧集的平均回报,学习策略π下的状态值 vπ(s )(值=平均回报)
  4. 仅在完成一集后,值被更新(因为该算法收敛缓慢,并且更新发生在集完成后)
  5. 没有自举
  6. 仅可用于偶发性问题

蒙特卡洛状态作用值

在该方法中,代理生成经验样本,然后基于平均回报,为一个状态-动作计算值。所以这里的起点是状态-行动,终点是状态。

时间差 TD(0)

时域差分法是蒙特卡罗法和动态规划法的结合。

下面是蒙特卡罗(MC)方法的主要特征:

  1. 没有模型(代理不知道状态 MDP 转换)
  2. 代理人采样的经验中学习(类似于 MC)
  3. 像 DP 一样,TD 方法部分基于其他学习估计更新估计,而不等待最终结果(它们像 DP 一样引导)。
  4. 它可以从不完整事件中学习,因此该方法也可以用于连续问题
  5. TD 将猜测更新为猜测,并根据实际经验修改猜测

TD(0)是 TD 学习的最简单形式。在这种形式的 TD 学习中,在每一步之后,用下一个状态的值来更新值函数,并且沿途获得奖励。

萨尔萨

用于控制或改进的 TD 算法之一是 SARSA。SARSA 的名字来源于这样一个事实,即代理从一个状态-动作值对向另一个状态-动作值对迈出一步,并在此过程中收集奖励 R(因此是 S( t),A (t),R( t+1),S(t+1)和 A (t+1)元组创建了术语 S,A,R,S,A )。SARSA 是 on-policy 法。SARSA 使用动作值函数 Q 并遵循策略π。SARSA 备份图如下所示。

结论

备份图对于传达 RL 算法步骤非常有用。这提供了一种不用复杂的数学符号就能理解算法的方法。

感谢阅读。可以联系我@ LinkedIn

只需每月 5 美元,就可以无限制地获取最鼓舞人心的内容…点击下面的链接,成为媒体会员,支持我的写作。谢谢大家!
https://baijayanta.medium.com/membership

关于分类变量编码的一切

原文:https://towardsdatascience.com/all-about-categorical-variable-encoding-305f3361fd02?source=collection_archive---------0-----------------------

深入分析

将分类变量转换为用于机器学习模型构建的数字

Image by Author

最后更新:2023 年 2 月 4 日

大多数机器学习算法不能处理分类变量,除非我们将它们转换成数值。许多算法的性能因分类变量的编码方式而异。

范畴变量可以分为两类:名词性的(没有特定的顺序)和序数的(有些有序)。

Image by Author

标称变量的几个例子如下:

  • 红色、黄色、粉色、蓝色
  • 新加坡、日本、美国、印度、韩国
  • 牛、狗、猫、蛇

序数变量的例子:

  • 高、中、低
  • “非常同意”、“同意”、“中立”、“不同意”和“非常不同意”。
  • 很好,还可以,很差

我们有许多方法可以将这些分类变量编码成数字,并在算法中使用它们。在这篇文章中,我将介绍其中的大部分,从基础到更高级的。我将包含这些编码:

1)一热编码
2)标签编码
3)序数编码
4)赫尔默特编码
5)二进制编码
6)频率编码
7)均值编码
8)证据权重编码
9)概率比编码
10)哈希编码
11)后向差分编码
12)留一编码
13)詹姆斯-斯坦编码
14)M-估计器编码(更新)

15)温度计编码器(更新)

为了说明,我将使用这个数据框,它有两个独立的变量或特征(温度和颜色)和一个标签(目标)。它还有一个 Rec-No,这是记录的序列号。该数据框中共有 10 条记录。Python 代码如下所示。

Image by Author

我们将使用 Pandas 和 Scikit-learn 和 category_encoders (Scikit-learn 贡献库)来展示 Python 中不同的编码方法。

一个热编码

在这种方法中,我们将每个类别映射到一个包含 1 和 0 的向量,表示该特征的存在或不存在。向量的数量取决于特征类别的数量。这种方法会产生许多列,如果特征的类别数非常高,这些列会显著降低学习速度。熊猫有 get_dummies 功能,相当好用。样本数据帧代码如下所示:

Scikit-learn 为此提供了 OneHotEncoder ,但是它没有创建额外的特性列(需要另一个代码,如下面的代码示例所示)。

一个热门编码很受欢迎。我们可以用 N-1 (N=类别数)来表示所有类别,这足以对未包括的类别进行编码。通常,对于回归,我们使用 N-1(删除一个热编码新特性的第一列或最后一列)。不过,对于分类,建议使用所有 N 列,因为大多数基于树的算法基于所有可用变量构建树。在线性回归中应使用一个具有 N-1 个二进制变量的热编码,以确保自由度(N-1)的正确数量。线性回归在训练时可以访问所有特征,因此可以一起检查整个虚拟变量集。这意味着 N-1 个二元变量为线性回归提供了关于(完全代表)原始分类变量的完整信息。这种方法可以用于任何在训练期间同时查看所有特征的机器学习算法——例如,支持向量机和神经网络以及聚类算法。

如果我们放弃的话,在基于树的方法中我们将永远不会考虑那个额外的标签。因此,如果我们在基于树的学习算法中使用分类变量,将它编码成 N 个二进制变量并且不丢弃是的好习惯

标签编码

在这种编码中,每个类别被赋予一个从 1 到 N 的值(其中 N 是该特征的类别数。这种方法的一个主要问题是,这些类之间没有关系或顺序,但算法可能会将它们视为某种顺序或某种关系。在下面的例子中,看起来(Cold

Pandas 因式分解也执行相同的功能。

顺序编码

我们进行顺序编码是为了确保变量的编码保留变量的顺序性质。正如我在本文开头提到的,这只对顺序变量是合理的。这种编码看起来几乎类似于标签编码,但略有不同,因为标签编码不会考虑变量是否是有序的,它将分配一个整数序列

  • 按照数据顺序(熊猫被分配为热(0)、冷(1)、“非常热”(2)和热(3))或
  • 按照字母顺序排序(scikit-learn 指定冷(0)、热(1)、“非常热”(2)和热(3))。

如果我们把温标看作顺序,那么顺序值应该是从冷到“非常热”序数编码将赋值为(冷(1)

使用 Pandas 引用这段代码,首先,我们需要通过字典指定变量的原始顺序。然后我们可以根据字典为变量映射每一行。

虽然这非常简单,但是需要编码来告诉顺序值以及按照顺序从文本到整数的实际映射。

赫尔默特编码

在这种编码中,一个级别的因变量的平均值与所有先前级别的因变量的平均值进行比较。

category_encoders 中的版本有时被称为反向赫尔默特编码。一个级别的因变量平均值与所有先前级别的因变量平均值进行比较。因此,使用名称''反向',以区别于正向赫尔默特编码。

二进制编码

二进制编码将类别转换为二进制数字。每个二进制数字创建一个特征列。如果有 n 个唯一的类别,那么二进制编码产生唯一的对数(基本 2)ⁿ特征。在这个例子中,我们有四个特征;因此,二进制编码的特征将是三个特征。与一个热编码相比,这将需要更少的特征列(对于 100 个类别,一个热编码将有 100 个特征,而对于二进制编码,我们将只需要 7 个特征)。

对于二进制编码,必须遵循以下步骤:

  • 类别首先转换为从 1 开始的数字顺序(顺序是在类别出现在数据集中时创建的,并不意味着任何顺序性质)
  • 然后这些整数被转换成二进制代码,例如,3 变成 011,4 变成 100
  • 然后二进制数的数字形成单独的列。

请参考下图以获得更好的直觉。

Image by Author

我们将为此使用 category_encoders 包,函数名为 BinaryEncoder

频率编码

这是利用类别的频率作为标签的一种方式。在频率与目标变量多少有些关系的情况下,它有助于模型理解并根据数据的性质按正比例和反比例分配权重。为此分三步走:

  • 选择要转换的分类变量
  • 按类别变量分组,并获得每个类别的计数
  • 将它与训练数据集连接起来

熊猫代码可以构造如下:

平均编码

均值编码或目标编码是 Kagglers 采用的一种病毒编码方法。这有许多变化。在这里,我将涵盖基本版本和平滑版本。均值编码类似于标签编码,只是这里标签与目标直接相关。例如,特征标签中每个类别的平均目标编码由训练数据上目标变量的平均值决定。这种编码方法显示了相似类别之间的关系,但是这种联系被限制在类别和目标本身之间。平均目标编码的优点是它不影响数据量并有助于更快的学习。通常,均值编码因过度拟合而臭名昭著;因此,在大多数情况下,交叉验证或其他方法的正则化是必须的。平均编码方法如下:****

  1. 选择要转换的分类变量。

2.按分类变量分组,并获得“目标”变量的总和。(“温度”中每个类别的 1 的总数)

3.按分类变量分组,并获得“目标”变量的总计数

4.将步骤 2 /步骤 3 的结果分开,并将其与列车重新连接。

Mean Encoding: Image by Author

数据框的示例代码:

均值编码可以在标签中体现目标,而标签编码与目标不相关。在许多特征的情况下,均值编码可能被证明是一种简单得多的替代方法。均值编码倾向于对类进行分组,而标签编码中的分组是随机的。

在实践中,这种目标编码有许多变化,如平滑。平滑可以如下实现:

证据权重编码

证据权重(WoE)衡量分组技术的"强度"以区分好坏。开发这种方法主要是为了建立一个预测模型来评估信贷和金融行业的贷款违约风险。证据权重(WOE)衡量证据** 支持或破坏一个假设的程度。**

其计算如下:

如果 P(货物)/ P(货物)= 1,则 WoE 为 0。也就是说,如果该组的结果是随机的。如果 P(Bads) > P(Goods)一组中的赔率将是< 1 and the WoE will be < 0; if, on the other hand, P(Goods) > P(Bads),那么 WoE > 0。

WoE 非常适合逻辑回归,因为 Logit 变换只是概率的对数,即 ln(P(商品)/P(商品))。因此,通过在逻辑回归中使用 WoE 编码的预测因子,预测因子被准备和编码到相同的尺度。可以直接比较线性逻辑回归方程中的参数。

WoE 变换具有(至少)三个优点:
1)它可以变换自变量以建立与因变量的单调关系。它的作用不止于此——为了确保单调的关系,将其“重新编码”到任何有序的度量(例如 1,2,3,4…)就足够了,但是 WoE 变换在“逻辑”尺度上对类别进行排序,这对于逻辑回归来说是很自然的
2)对于具有太多(稀疏填充)离散值的变量,这些变量可以被分组到类别中(密集填充), 权重系数可用于表达整个类别的信息
3)每个类别对因变量的(单变量)影响可跨类别和变量进行比较,因为权重系数是一个标准化值(例如,您可以将已婚人士的权重系数与体力劳动者的权重系数进行比较)

它也有(至少)三个缺点:
1)由于宁滨到几个类别
导致的信息损失(变化)2)它是一个“
单变量”度量,因此它没有考虑独立变量之间的相关性
3)很容易根据如何创建类别来操纵(过度拟合)变量的效果

在代码下面,代码片段解释了如何构建代码来计算 WoE。

一旦我们计算出每个组的权重,我们就可以将其映射回数据帧。

概率比编码

概率比编码类似于证据权重(WoE ),唯一的区别是只使用好的和坏的概率比。对于每个标签,我们计算 target=1 的平均值,即为 1 的概率(P(1)),以及 target=0 的概率(P(0))。然后,我们计算比率 P(1)/P(0)并用该比率替换标签。我们需要为 P(0)添加一个最小值,以避免任何被零除的情况,在这种情况下,对于任何特定的类别,都没有 target=0。

****

散列法

哈希将分类变量转换到更高维的整数空间,其中分类变量的两个向量之间的距离大致由转换后的数值维空间保持。使用哈希,维度的数量将远远少于使用像一个热编码这样的编码的维度的数量。当分类的基数非常高时,这种方法是有利的。

这种编码在生产中广泛使用,当类别变化非常频繁时,例如在电子商务网站的情况下,产品类别会随着新产品的定期添加而不断变化。

(示例代码—我将在本文的未来版本中更新)

后向差分编码

在后向差分编码中,将某一级的因变量的平均值与前一级的因变量的平均值进行比较。这种类型的编码对于名义变量或顺序变量可能是有用的。

这种技术属于分类特征的对比编码系统。K 个类别或级别的特征通常作为 K-1 个虚拟变量的序列进入回归。

(示例代码—将在本文的未来版本中更新)

省略一个编码

这与目标编码非常相似,但在计算某个级别的平均目标以减少异常值时,会排除当前行的目标。

(示例代码—将在本文的未来版本中更新)

詹姆斯-斯坦编码

对于特征值,James-Stein 估计器返回的加权平均值为:

  1. 观察到的特征值的目标平均值。
  2. 平均目标值(不考虑特征值)。

詹姆斯-斯坦编码器将平均值向整体平均值收缩。它是一个基于目标的编码器。然而,James-Stein 估计量有一个实际的限制——它只适用于正态分布。

(示例代码—我将在本文的未来版本中更新)

m 估计编码

M-estimator 编码可用于分类编码,作为处理数据集中异常值或罕见类别的一种方式。在这种情况下,它可以用来处理分类变量中的类别不平衡。其思想是根据类别与总体类别频率的偏差为每个类别分配一个权重。然后,这个权重被用于调整分类变量的编码,给予代表不足的类别更多的重要性。

例如,假设您有一个包含 A、B 和 C 三个类别的分类变量,并且您希望使用一次性编码对其进行编码。标准的独热编码将为每个类别分配相同的权重。但是,如果类别 A 与 B 和 C 相比明显代表不足,您应该在编码中给它更多的权重。在这种情况下,您可以使用 M-estimator 编码,它根据为解决类别不平衡而选择的权重函数为每个类别分配权重。

值得注意的是,M-estimator 编码只是可用于处理分类变量中的类别不平衡的许多方法之一,它可能不是在所有情况下的最佳方法。是否使用它,以及如何使用它,取决于您正在处理的特定问题和数据集。

import pandas as pd
import numpy as np

# sample data
data = {'Temperature': ['Hot','Cold','Very Hot','Warm','Hot','Warm','Warm','Hot','Hot','Cold'],
        'Color': ['Red','Yellow','Blue','Blue','Red','Yellow','Red','Yellow','Yellow','Yellow'],
        'Target': [1,1,1,0,1,0,1,0,1,1]}
df = pd.DataFrame(data,columns = ['Temperature','Color','Target'])

# count the frequency of each category
category_counts = df['Temperature'].value_counts()

# calculate the weight for each category based on deviation from the mean frequency
weights = (category_counts - category_counts.mean()).abs()
weights = weights / weights.sum()

# create a dictionary to map each category to its weight
mapping = dict(zip(weights.index, weights.values))

# map the categories to their weights
df['weights'] = df['Temperature'].map(mapping)

# calculate weighted encoding for each category
encoded = df.groupby('Temperature')['weights'].sum()
encoded = encoded / encoded.sum()

# map the weighted encoding back to the categories
df['encoded_temperature'] = df['Temperature'].map(encoded)

在这个例子中,权重变量是基于与平均频率的偏差分配给每个类别的权重。 encoded_temperature 变量是温度类别的加权编码,计算为每个类别的权重之和,并归一化为总和 1。

温度计编码器

温度计编码器用于将类别变量表示为数值,特别是对于类别具有固有顺序的序数变量。

编码的工作方式是为每个类别创建一个二进制表示,并将二进制值连接起来形成一个新的数值变量。表示中使用的二进制数字的数量取决于类别的数量。对于每个类别,如果该类别存在,则第一个数字设置为 1,其余数字设置为 0。

例如,如果有 5 个类别ABCDE,则温度计编码可以表示为 5 个二进制变量:

  • A[1, 0, 0, 0, 0]表示
  • B[1, 1, 0, 0, 0]表示
  • C[1, 1, 1, 0, 0]表示
  • D[1, 1, 1, 1, 0]表示
  • E[1, 1, 1, 1, 1]表示

这种编码以比一键编码更直观的方式表示类别的顺序,并捕捉类别之间的内在关系。在模型需要理解类别之间的顺序关系的情况下,它会很有用。让我们用我们的颜色类别来解释熊猫代码。

import pandas as pd

# sample data
data = {'color': ['Red','Yellow','Blue','Blue','Red','Yellow','Red','Yellow','Yellow','Yellow']}
df = pd.DataFrame(data)

# get the unique categories and their ranks
categories = df['color'].unique()
ranks = range(len(categories))

# create a dictionary to map each category to its rank
mapping = dict(zip(categories, ranks))

# map the categories to their ranks
df['ranks'] = df['color'].map(mapping)

# create the thermometer encoding for each category
encoded = pd.get_dummies(df['ranks'])
encoded = encoded.add_prefix('thermometer_')

# merge the encoding with the original data
df = pd.concat([df, encoded], axis=1)

常见问题:

我收到了许多关于使用或者没有目标时如何处理测试数据的询问。我在这里增加了一个 Faq 部分,希望能有所帮助。

常见问题 01:我应该使用哪种方法?

****回答:没有一种方法适用于所有问题或数据集。你可能要试几个看看,哪个效果更好。一般的指导方针是参考文章末尾显示的备忘单。

常见问题 02:在测试数据中没有任何目标值的情况下,如何为目标编码创建分类编码?

****回答:我们需要使用训练时创建的映射值。这个过程与缩放或归一化是一样的,其中我们使用训练数据来缩放或归一化测试数据。然后映射并在测试时间预处理中使用相同的值。我们甚至可以为每个类别创建一个字典并映射值,然后在测试时使用这个字典。在这里,我用平均编码来解释这一点。

训练时间

测试时间

结论

重要的是要理解,所有这些编码并不是在所有情况下或者对于所有机器学习模型的每个数据集都工作良好。数据科学家仍然需要实验,找出最适合他们具体情况的方法。如果测试数据有不同的类,这些方法中的一些将不起作用,因为特征不会相似。研究团体的基准出版物很少,但是哪一个最好还没有定论。我的建议是在较小的数据集上尝试每一种方法,然后决定在哪里重点调整编码过程。你可以使用下面的备忘单作为指导工具。

Source

感谢阅读。你可以在 LinkedIn 上联系我。

每月只需 5 美元,就可以无限制地获取最鼓舞人心的内容……点击下面的链接,成为一名媒体会员,支持我的写作。谢谢大家!

一切都是手段

原文:https://towardsdatascience.com/all-about-means-c8b800d0b874?source=collection_archive---------34-----------------------

“意味着”是什么意思?!

Photo by Antoine Dautry on Unsplash

正如我在其他文章中提到的,我喜欢数学。我喜欢它,因为它不是数字运算。我提到数学依赖于它的公理和定义系统。我也喜欢思考定义和开发新的定义,从不同的角度来看待一个概念。

在数学中,大多数被讨论的对象都有很好的定义,即使这些定义很复杂。圆是与给定中心等距的点的轨迹。距离是满足某些性质的函数。从集合 X 到集合 Y 的函数 f 是有序对(X,Y)的集合,其中 x ∈ X,y ∈ Y,并且其中集合中没有两个元素具有相同的 X 值:(1,2)和(1,3)是不允许的。使用各种公理化方法,偶数集被很好地定义。

但是当涉及到手段时,定义变得更加模糊。平均值是中心的量度。好吧。什么中心?通过以这种方式定义平均值,我们已经引入了几何,这可能会掩盖我们正在做的事情。

此外,实际上有许多种手段。有算术平均值,这是最常用的。这就是你把所有的数字加在一起,然后除以你相加的数字。还有几何平均数,你把所有的数字相乘,取 n 次方根。

理解哪种方法在哪种情况下起作用实际上非常重要。当我们应该使用几何平均数时,使用算术平均数会给我们带来非常不同的结果,这是行不通的。几何平均数通常用于计算平均利率、增长率,以及在其他情况下,我们会重复地将乘法应用于我们的结果。

这就引出了我对手段的看法。作为一个兼职项目,我一直在研究这个术语的一些概括和定义。

定义

我们对手段了解多少?对于算术平均,几何平均,甚至一些其他的平均,我们有一些有序的对象集合,我们对这个集合进行操作得到一些结果。当我们用平均值替换集合中的每一项时,它会给出相同的最终结果。

例如,使用算术平均值,我们将集合相加,然后除以集合中的项目数。{1,2,3}得出算术平均值为 2。所以让我们用 2 代替集合中的每个数字。{2,2,2}是我们的新系列。如果我们将这些数字相加,我们得到 6,这正是我们将原始集合相加得到的结果。所以在求和下,2 是{1,2,3}的均值。

现在我们对均值的基本工作原理有了一个坚实的理解。我们获取一个有序的集合并对其进行操作。如果用另一个值替换集合中的所有元素得到相同的结果,那么该值就是平均值。但是在这种情况下,我们需要知道我们对集合应用了什么样的操作。

存在性和唯一性

因为这个定义非常宽泛,甚至不一定是对数字的运算,而是可以是任何类型的集合,所以我们并不总是保证某个给定集合的平均值。因此,均值的存在成为一个重要的研究课题。

同样,平均值不必是唯一的。可能有两个值,甚至无限个值,会给出相同的结果。所以独特性也是一个重要的研究课题。

与组和 n 次根的关系

组是数字的抽象。它们的功能与我们通常的数字系统非常相似。它们由元素集合和乘积运算组成,乘积运算将组中每对元素的乘积分配给组中的另一个元素(运算是封闭的)。

这样的对象还必须满足一些其他条件才能被认为是一个组。必须有一个单位元,使得这个单位元和群中一个单位元的乘积就是这个单位元,就像我们通常的数系中一是乘法下的单位元一样。每个元素也必须有一个逆,这样元素和它的逆的乘积就等于恒等式。并且产品操作必须是关联的。

总的来说,通过研究群体,我们可以学到很多关于数字和其他类型的类似系统的知识。与方法讨论相关的一个有趣领域是 n 次方根。x 的 n 次方根是这样一个值,如果我们将它自身乘以 n 次,我们得到 x。对于实数,这是我们最常用的数字类型,n 次方根总是存在的,并且是唯一的。只有一个值能满足要求。

但是对于群体,可能有许多合适的价值,或者根本没有价值。由于 n 次根符合均值的定义,在重复乘积的运算下,n 次根的存在唯一性对于一般的均值理论是有见地的。

这一切意味着什么

本质上,虽然大多数数学都有明确的定义,但由于某种原因,均值的概念在很大程度上没有严格的定义。但是如果我们对过程进行足够的抽象,我们真的可以感觉到发生了什么: 我们想要一个值,我们可以用它来替换我们正在操作的所有值,同时仍然得到相同的结果 。那是一个意思。谁知道呢?这种对数学结构的抽象思考方式往往会带来新的发现。那很好,对吧?

<大师指数 | 哲学 |

关于丢失数据处理的所有内容

原文:https://towardsdatascience.com/all-about-missing-data-handling-b94b8b5d2184?source=collection_archive---------1-----------------------

深入分析

缺失数据插补技术

Image by Gerd Altmann from Pixabay

缺失数据是数据专业人员需要处理的日常问题。虽然已经有很多文章、博客、视频,但我发现很难在一个地方找到一条简明的综合信息。这就是为什么我把我的努力放在这里,希望它将对任何数据从业者或爱好者有用。

什么是缺失数据?缺失数据被定义为不可用的值,如果被观察到,这将是有意义的。丢失的数据可能是序列丢失、特征不完整、文件丢失、信息不完整、数据输入错误等。现实世界中的大多数数据集都包含缺失数据。在使用带有缺失数据字段的数据之前,您需要转换这些字段以用于分析和建模。像数据科学的许多其他方面一样,这实际上也可能是艺术多于科学。理解数据及其来源领域非常重要。

数据中缺少值不一定是一种挫折。尽管如此,这仍然是一个执行正确的特征工程来指导模型以正确的方式解释缺失信息的机会。有机器学习算法和软件包可以自动检测和处理缺失数据。但是,仍然建议通过分析和编码策略手动转换缺失的数据。首先,我们需要了解缺失数据的类型。失踪大致分为三类:

完全随机失踪(MCAR)

当我们说数据是完全随机缺失时,我们的意思是缺失与被研究的观测值(完全观测变量(X)和部分缺失变量(Y))无关。例如,电池没电的体重秤、邮寄过程中可能丢失的问卷,或者实验室中可能损坏的血液样本。MCAR 是一个理想但不合理的假设。一般来说,当数据因设计、设备故障或样品在运输途中丢失或技术上不令人满意而丢失时,数据被视为 MCAR。MCAR 数据的统计优势是分析保持无偏。下面是 MCAR 的示意图,其中缺失与数据集变量 X 或 Y 无关。思念与 X 或 Y 无关,而是与其他原因 z 有关。

Image by Author

让我们来看一个移动数据的例子。这里,一个样本有一个缺失值,不是因为数据集变量,而是因为另一个原因。

Image by Author

随机失踪(MAR)

当我们说数据随机缺失时,我们的意思是部分缺失变量(Y)上的缺失数据与分析模型中的一些其他完全观察到的变量(X)有关,而与 Y 本身的值无关。

MAR 的图示如下,其中缺失与数据集变量 X 有关,但与 y 无关。它可以有其他关系(Z)。它与丢失的信息没有特别的关系。例如,如果一个孩子因为生病而没有参加检查,这可能可以从关于孩子健康的其他数据中预测出来,但这与我们在孩子没有生病的情况下检查的内容无关。有些人可能认为标记不存在问题。但是,MAR 并不意味着可以忽略缺失的数据。

Image by Author

Image by Author

非随机缺失(MNAR)

如果数据字符不符合 MCAR 或 MAR,则属于非随机丢失(MNAR)类别。当数据缺失而非随机缺失时,缺失与缺失的内容特别相关,例如,一个人没有参加药物测试是因为他前一天晚上服用了药物。一个人没有参加英语水平测试,因为他的英语语言能力很差。MNAR 数据的情况是有问题的。在这种情况下,获得参数无偏估计的唯一方法是对缺失数据进行建模,但这需要对缺失变量有正确的理解和领域知识。然后,该模型可以合并到一个更复杂的模型中,用于估计缺失值。MNAR 的图示如下,其中缺失直接将与变量 Y 联系起来。它可以有其他关系(X & Z)。

Image by Author

可以应用几种策略来处理缺失数据,以建立机器学习/统计模型。

试图获得缺失的数据。

在类似调查的情况下,这在数据收集阶段是可能的,在这种情况下,在回答者离开房间之前,可以检查是否完整地捕获了调查数据。有时,可以从数据源获取数据,比如再次询问遗漏的问题以获得回答。在真实的场景中,这是解决丢失数据问题的一种不太可能的方式。

有教养的猜测

这听起来很武断,并不是一个可取的做法,但人们有时可以根据其他响应推断出一个丢失的值。例如,对于相关的问题,如那些经常出现在矩阵中的问题,如果参与者的回答全是“2”,则假设缺失的值是 2。

丢弃数据

1)列表式(全病例分析 CCA)删除

处理缺失数据的最常见方法是忽略缺失数据的案例,并分析剩余数据。这种方法被称为完整案例(或可用案例)分析或列表式删除。

如果有足够大的样本,其中权力不是一个问题,并满足 MCAR 的假设,列表式删除可能是一个合理的策略。然而,当没有大样本或者 MCAR 假设不满足时,列表删除就不是最优策略。如果不能满足 MCAR 的要求,它还会引入偏见。

删除后参考下面的样本观察

Image by Author

2)成对(可用案例分析 ACA)删除

在这种情况下,仅忽略缺失的观察值,并对存在的变量进行分析。如果数据集中的其他地方缺少数据,则使用现有的值。由于成对删除使用所有观察到的信息,它比列表删除保留更多的信息。

已知成对删除对 MCAR 或 MAR 数据的偏倚较小。然而,如果有许多遗漏的观察值,分析将是有缺陷的。成对删除的问题是,即使它采用了可用的案例,人们也不能比较分析,因为它们每次都是不同的。

Image by Author

3)删除变量

如果某个变量缺少太多数据,可以选择从数据集中删除该变量或列。这方面没有经验法则,但要视情况而定,在完全放弃变量之前,需要对数据进行适当的分析。这应该是最后一个选项,我们需要检查删除变量后模型性能是否提高。

Image by Author

保留所有数据

任何插补技术都旨在产生一个完整的数据集,然后可以用于机器学习。我们有几种方法可以进行插补,以保留所有数据用于分析和构建模型。

1)平均值、中值和众数

在这种插补技术中,目标是用缺失值的统计估计值替换缺失数据。平均值、中间值或众数可用作插补值。

在均值替换中,使用变量的均值来代替同一变量的缺失数据值。这样做的好处是不会改变该变量的样本均值。均值替换的理论背景是均值是从正态分布中随机选择的观察值的合理估计。然而,对于非严格随机的缺失值,尤其是在不同变量的缺失值数量存在巨大差异的情况下,均值替换法可能会导致不一致的偏差。原始方差的失真和与数据集中剩余变量的协方差的失真是这种方法的两个主要缺点。

Image by Author

当变量具有偏态分布时,可以使用中位数。

Image by Author

Mode 的基本原理是用最频繁出现的值替换缺失值的总体,因为这是最有可能发生的情况。

Image by Author

2)上次意见结转(LOCF)

如果数据是时间序列数据,最广泛使用的插补方法之一是结转最后一次观察值(LOCF)。每当缺少某个值时,就会用最后观察到的值替换它。这种方法是有利的,因为它易于理解和交流。尽管这种方法很简单,但它强烈假设结果的值不会因缺失数据而改变,这在许多情况下似乎不太可能。

Image by Author

3)下一次观察向后进行(NOCB)

类似的方法如 LOCF,工作原理相反,在丢失值后进行第一次观察,然后 c 将其向后排列(“向后进行下一次观察”,或 NOCB)。

Image by Author

4)线性插值

插值是一种数学方法,它根据数据调整函数,并使用该函数来外推缺失的数据。最简单的插值类型是线性插值,即在缺失数据之前的值和值之间进行插值。当然,我们可能有一个非常复杂的数据模式,线性插值是不够的。有几种不同类型的插值。只是在熊猫中,我们有如下选项:“线性”、“时间”、“索引”、“值”、“最近”、“零”、“线性”、“二次”、“三次”、“多项式”、“样条”、“分段多项式”等等。

Image by Author

5)公共点插补

对于评定等级,使用中间点或最常选择的值。例如,在五分制中,用 3(中点)或 4(最常见的值)代替(在许多情况下)。它类似于平均值,但更适用于序数值。

6)添加类别以捕获 NA

对于分类变量,这可能是最广泛使用的缺失数据插补方法。这种方法包括将缺失数据视为变量的附加标签或类别。所有缺失的观察值都被分组到新创建的标签“缺失”中。它没有对价值缺失做任何假设。当丢失数据的数量很大时,它非常适合。

Image by Author

7)频繁的类别插补

用最常见的类别替换缺失值相当于均值/中值插补。它包括用变量中出现频率最高的标签或类别替换变量中所有缺失的值。

Image by Author

8)任意值插补

任意值插补包括用任意值替换变量中所有缺失值。理想情况下,任意值应不同于中值/平均值/众数,并且不在变量的正常值范围内。通常使用的任意值是 0,999,-999(或其他 9 的组合)或-1(如果分布为正)。有时,数据已经包含来自发起者的缺失值的任意值。这对于数值主要为正值的数字特征和一般的基于树的模型相当有效。当开箱即用的机器学习库和算法不太擅长处理缺失数据时,这曾经是一种更常见的方法。

Image by Author

9)添加变量以捕获 NA

当数据不是完全随机缺失时,我们可以通过创建一个额外的变量来表示该观察数据是否缺失(1)来捕捉缺失的重要性(0)。附加变量是二进制的:它只取值 0 和 1,0 表示该观察值存在,1 表示该值缺失。通常,进行均值/中值插补是为了添加一个变量,以捕捉那些数据缺失的观察结果。

Image by Author

10)随机抽样插补

随机抽样插补法原则上类似于均值/中值插补法,因为它的目的是保留原始变量的统计参数,因为数据是缺失的。随机抽样包括从可用观测值池中随机抽取一个观测值,并使用随机抽取的值填充 NA。在随机抽样中,变量中存在的缺失值越多,随机观察的次数就越多。随机样本插补假设数据完全随机缺失(MCAR)。如果是这种情况,用从原始变量分布中提取的值替换丢失的值是有意义的。

多重插补

多重插补(MI)是一种处理缺失数据的统计技术。MI 的关键概念是使用观察数据的分布来估计缺失数据的一组似是而非的值。随机成分被纳入这些估计值,以显示其不确定性。创建多个数据集,然后单独但相同地进行分析,以获得一组参数估计值。估计被组合以获得一组参数估计。多重插补的好处在于,恢复缺失值的自然可变性包含了缺失数据导致的不确定性,从而产生有效的统计推断。作为处理一个以上缺失变量的灵活方法,应用链式方程多重插补(MICE)方法。有关 MI 和 MICE 的更多信息,请参考参考部分。下面是老鼠的示意图。

Image by Author

估算缺失数据的预测/统计模型

这应该结合一些交叉验证方案来完成,以避免泄漏。这可能非常有效,并有助于最终的模型。这种预测模型有许多选择,包括神经网络。这里我列举了几个非常受欢迎的。

线性回归

在回归插补中,使用现有变量进行预测,然后代入预测值,就像实际获得的值一样。这种方法有几个优点,因为与列表或成对删除相比,插补保留了大量数据,避免了显著改变标准偏差或分布形状。然而,正如在均值替换中一样,虽然回归插补替换了从其他变量预测的值,但没有增加新的信息,同时样本量增加了,标准误差减少了。

随机森林

随机森林是一种适用于各种变量类型的非参数插补方法,适用于随机缺失和非随机缺失的数据。随机森林使用多个决策树来估计缺失值,并输出 OOB(随机)插补误差估计值。一个警告是,随机森林最适合大型数据集,在小型数据集上使用随机森林有过度拟合的风险。

k-NN (k 近邻)

k-NN 基于最近的 K 近邻估算缺失的属性值。基于距离度量来确定邻居。一旦确定了 K 个邻域,就通过采用缺失属性的已知属性值的平均值/中值或模式来估算缺失值。

最大概似法

观测数据是从多元正态分布中抽取的样本这一假设相对容易理解。在使用可用数据估计参数之后,基于刚刚估计的参数来估计缺失数据。几种策略是使用最大似然法来处理缺失数据。

期望最大化

期望最大化(EM)是用于创建新数据集的最大似然方法。所有缺失值都用最大似然法估计的值进行估算。这种方法从期望步骤开始,在此期间估计参数(例如方差、协方差和均值),可能使用列表删除。这些估计值随后用于创建回归方程来预测缺失的数据。最大化步骤使用这些等式来填充缺失的数据。然后用新的参数重复期望步骤,确定新的回归方程来“填充”缺失的数据。重复期望和最大化步骤,直到系统稳定。

灵敏度分析

敏感性分析被定义为研究如何将模型输出中的不确定性分配给其输入中的不同不确定性来源。当分析缺失数据时,对缺失数据进行额外的假设,这些假设通常适用于主要分析。然而,这些假设的正确性无法得到明确的验证。因此,国家研究委员会建议进行敏感性分析,以评估结果对 MAR 假设偏差的稳健性。

支持缺失值的算法

并不是所有的算法在数据缺失时都会失败。某些算法可以对缺失数据保持稳健,例如 k-最近邻,当值缺失时,这些算法可以忽略距离度量中的列。某些算法可以在构建预测模型时将缺失值用作唯一的不同值,例如分类树和回归树。像 XGBoost 这样的算法会考虑任何丢失的数据。如果你的插补效果不好,尝试一个对缺失数据稳健的模型。

推荐

缺失数据会降低模型的能力。一些缺失数据是意料之中的,目标样本量会增加以考虑到这一点。然而,这并不能消除潜在的偏见。在研究的设计和执行以及对结果数据的分析中,应更多地关注缺失数据。机器学习模型技术应仅在尽最大努力减少设计和预防技术中的缺失数据后执行。

强烈建议对缺失数据进行具有适当机制和假设的有效统计分析。大多数插补技术都会造成偏差。很难知道多重插补还是完全最大似然估计是最好的,但两者都优于传统方法。这两种技术最适用于大样本。一般来说,在分析有缺失数据的数据集时,多重插补是一种很好的方法。

只需每月 5 美元,就可以无限制地获取最鼓舞人心的内容……点击下面的链接,成为媒体会员,支持我的写作。谢谢大家!
【https://baijayanta.medium.com/membership】

参考:

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3668100/

https://leportella . com/English/2019/01/14/interpolation . html

https://www . research gate . net/publication/220579612 _ Missing _ Data _ attraction _ Techniques

http://www.stat.columbia.edu/~gelman/arm/missing.pdf

感谢阅读。可以联系我@ LinkedIn

我想要的圣诞礼物就是人工智能:用 LSTMs 写出下一部圣诞大片

原文:https://towardsdatascience.com/all-i-want-for-christmas-is-ai-write-the-next-christmas-hit-using-lstms-2e95ea3da25e?source=collection_archive---------35-----------------------

如何用一些奇怪的人工智能生成的圣诞歌词来给你的假期增添趣味

厌倦了失去威猛的一击?你是否暗自希望克里斯蒂娜·阿奎莱拉从未出生?你害怕麦可·布雷每年的回归胜过一切吗?
嗯,事实证明在不久的将来我们可能会有几十亿多

可怕吧。

用 AI 生成文本是数据科学家能够完成的最完整和令人满意的任务之一:我们处理网页抓取非结构化数据预处理数据探索模型设计超参数调优、数小时的培训以及——最重要的是——我们能够获得最终的、可触知的结果

The most common words in the lyrics of the 20 most popular Christmas songs (from Vivid Seats)

鉴于一年中的时间和圣诞颂歌主题的可预测性(这里是圣诞老人,那里是耶稣,红色,白色,四周是雪,圣诞树,快乐,幸福,我们完成了),这里我们将尝试生成圣诞主题的歌词。

语言模型

自动生成歌词是一项琐碎的任务。生成文本序列的一般方法是训练一个模型,在给定所有先前单词/字符的情况下预测下一个单词/字符。为文本生成脚本提供动力的引擎被称为统计语言模型,或者简称为语言模型。

统计语言模型

语言模型是一种概率模型,它可以预测序列中的下一个单词,给定之前单词本身的序列试图捕捉它所训练的文本的统计结构(即潜在空间)。从技术上来说,它只是一系列单词 P ( w1,w2,…,wₘ )的概率分布,从中我们迭代得出最有可能的下一个单词评估 P ( wₙₑₓₜ | w1,w2,…,wₘ )。这也是当谷歌自动完成我们奇怪的查询(提供更奇怪的建议)和我们无聊的圣诞祝福邮件时幕后发生的一部分。

Apparently, Google Search doesn’t have a good opinion on Christmas songs either

基于字符的神经语言模型

语言模型也可以在字符级别开发。基于字符的语言模型的主要好处是它们的小词汇量和处理任何单词、标点符号和特定文本结构的灵活性。这是以拥有更大的模型和更长的训练 为代价的。
如今用于构建语言模型的最常见的 ML 技术家族是递归神经网络 (RNNs),这是一种功能强大的神经网络,能够记住并通过其隐藏状态神经元处理过去的信息。

A simple example of RNN (with a single 3-units hidden layer) forward pass using the training sequence “hello”. For each (one-hot encoded) character in the sequence, the RNN predicts the next character assigning a confidence score to every character in the vocabulary ([“h”, “e”, “l”, “o”]). The objective of the network is to learn the set of weights that maximizes the green numbers in the output layer and minimize the red ones.

当足够的数据可用时,具有 长短期记忆 (LSTM)味道的 rnn 更受欢迎,因为它们可以捕捉更复杂的文本依赖,并更好地处理爆炸/消失梯度问题

圣诞歌词生成器

为了生成我们的圣诞歌词,我们需要一个合适的数据源。对我们来说幸运的是,互联网上有大量的歌词网站,可以很容易地搜索到。

数据准备

一旦我们获得了数据源,我们就需要构建语料库,导入原始文本并应用一些普通的文本预处理,如(不需要的)标点删除和小写。
由于我们正在研究基于字符的语言模型,文本必须映射到字符级。因此,必须建立一个独特的字符词汇表
我们神经网络的输入将是字符序列。因此,我们将语料库分成 maxlen 大小的序列,对每个步骤字符进行采样。

模型设计和培训

在本文中,我们将尝试构建最简单的基于字符的神经语言模型:一个 128 大小的单层 LSTM,带有 softmax 激活
记住输入序列和输出必须是一键编码

该网络被训练 1000 个时期,尽管在 500-600 个时期后损失似乎停止显著下降。

(根据您的硬件,这可能需要几个小时到几天的时间。为了在合理的时间框架内训练您的模型,您可以随意减少历元的数量)

The loss stops decreasing significantly after 500 epochs approximately

文本生成

一旦模型训练完毕,我们就可以开始预测了。给定一个字符序列,该模型使用它的权重来输出一个字符分布,从这里我们可以对下一个字符进行采样,只要我们愿意,就可以重复这个过程。我们从输出分布中抽取下一个字符的方式至关重要

如果我们总是选择最有可能的单词,语言模型训练目标会导致我们陷入循环中,如圣诞快乐。圣诞快乐。圣诞快乐”。公平地说,这可以被认为是一首合法的圣诞颂歌,但可能不是我们想要在这里实现的。

即使我们从分布中取样,我们仍然需要小心,因为最不可能的记号可能代表大部分的概率质量。例如,让我们考虑一下,字符记号的底部 50%具有 25%的总概率。这意味着我们有 1/4 的机会去越野,导致不可阻挡的误差传播贯穿整个生成过程。

受统计热力学启发,温度 采样是文本生成最常用的采样方法之一。这里的高温意味着更可能遇到低能态。因此,温度越低,模型对其首选越有信心,而温度高于 1 会降低信心。

结果

让我们看看使用 0.2 的温度和种子会得到什么:

“感谢上帝今天是圣诞节
一天。感谢上帝,今天是圣诞节

第一个纪元之后,我们实现了这样的东西:

“感谢上帝,今天是圣诞节。感谢上帝,今天是圣诞节

e

一个男孩爱上了这个女孩,但是他却爱上了这个女孩

他把所有的人都带到了 tt

以色列人在那里居住,所以他们在 etr 居住

awrmsesur ru uete errea […]" "

显然,该模型没有时间学习任何关于它所训练的语料库的语言。以下是《T21》10 个时代之后的歌词:

“感谢上帝,今天是圣诞节。感谢上帝,今天是圣诞节,我不想要你这个小槲寄生和星星中的星星

孩子们和星星们。我想要星星中的星星,星星和圣诞老人我想看圣诞树。[…]"

看起来 10 个时代足以理解如何将字符粘在一起以获得单词和句子,但仍然不足以学习语言本身的更高结构。请注意,生成的模型让陷入了“星星”这个词的循环,通常无法生成有意义的东西
经过 100 个时期,我们得到:

“感谢上帝,今天是圣诞节
一天。感谢上帝,今天是圣诞节,新年快乐,我会喜欢这个世界

在槲寄生上的每一个角落,我都希望我能知道,我希望你能感受到你的血液,但我不能在圣诞节把我带回家

当圣诞夜来临的时候,我想唱圣诞节早晨天空的歌,因为雪正在飘落……”

这已经是一个不识字的克里斯蒂娜·阿奎莱拉人能唱的了。圣诞颂歌的结构和反复出现的主题开始出现,同时还有令人毛骨悚然的废话,比如“我希望你的窗户变成你的血”这听起来更像黑色金属而不是圣诞节。
快进到 1000 个纪元:

“感谢上帝,今天是圣诞节。感谢上帝,今天是圣诞节,你会成为你想要的人,祝你快乐。

真是个又亮又丑的
和妈妈早知道了
我不要你的道听途说
我已经容不下你一个小屁孩了,命运

我希望你身边有个男人。
她为雪搬运一件东西。圣诞节到了,圣诞节到了,圣诞节没有给我一首圣诞歌,圣诞钟声响起。[…]"

现在我们肯定有收获了!废话仍然存在,但歌词的整体质量是体面的,整个事情可能听起来有意义。
最后,我们可能会考虑用我们模型的超参数稍微调整一下。例如,我们可以尝试对更长和/或更远的输入序列进行采样,在数据预处理阶段增加 maxlenstep 参数。直观地说,增加输入序列的最大长度意味着给模型提供更多的上下文来学习,所以我们期待更好的结果。
这是当 maxlen 从 70 增加到 120 时我们可以得到的结果:

“[……]打开我们天堂般的家
让通往天堂的路变得安全
关闭通往痛苦的道路。

哦,来吧,摇一摇
一首圣诞歌的花
我整晚都有点醉
在一个正确的酒吧局,哈利路亚?

我相信有圣诞老人,我相信我会在街上看到他把所有的玩具都搬出来

格洛丽亚。透过天空的雪花看故事圣诞树,哦,圣诞节。
上帝之子出生之子而降
上帝之子出生之子而降

我要送星星和雪
,我想要一只河马。[…]"

不确定它是否能被认为在质量上比前一个更好,但明年圣诞节我也会要一只河马。

结论

未来的发展

单层 LSTMs 只是神经语言建模的起点,因为可以设计出更多的复杂网络 来更好地解决文本生成的问题。
我们已经看到了超参数如何在开发一个像样的文本生成器中发挥重要作用。因此,我们可能会考虑在我们的网络中堆叠更多(更大)的层,以调整批量大小,并对不同的序列长度和温度进行更多实验。

进一步阅读

为了让每个人都能阅读,本文有意避免深入研究神经网络和 NLP 的数学和概率基础。这里有一个资源列表,您可以在其中探索我们留下的一些主题:

请在评论区留下你的想法和建议,如果你觉得这有帮助,请分享!

[## Tommaso Buonocore -软件工程师- AMC 医学研究 BV | LinkedIn

查看世界上最大的职业社区 LinkedIn 上 Tommaso Buonocore 的个人资料。托马索列出了 5 项工作…

www.linkedin.com](https://www.linkedin.com/in/tbuonocore/)

一体化图像去雾(AOD) —论文说明和 Tensorflow 实施

原文:https://towardsdatascience.com/all-in-one-image-dehazing-aod-paper-explanation-tensorflow-implementation-bb97f6a6f1ef?source=collection_archive---------14-----------------------

李博一等对《网:一体化去雾网》论文的解读。艾尔。(ICCV 2017)以及在 Tensorflow 中实现相同功能的教程

介绍

雾霾会降低图像质量并限制可见度,尤其是在室外环境中。这因此影响了其他高级任务的性能,例如物体检测和识别。

李博一等人提出的 AOD 网络。艾尔。是一个端到端的 CNN 来消除图像的模糊。AOD 将模糊图像作为输入,并生成去模糊图像。

在这篇文章中,我解释了 AOD 网络论文的主要组成部分,并提供了在 Tensorflow 中实现 AOD 网络的分步指南。

你可以在这里找到完整的代码。

Left: Naturally hazy image of a forest scene. Right: De-hazed image generated by AOD-net.

论文解释

AOD 假定朦胧图像是根据下述大气散射模型产生的。

大气散射模型

根据 ASM:

Equation (1)

其中,
I(x):观测到的雾天图像
J(x):原始图像
A:全球大气光照
t(x):传输矩阵

A 指整个场景中大气的自然光。
t(x) 代表物体到达相机的光量。
计算如下:

Equation (2)

其中,
β:散射系数(非负)
d(x):物体与观察者之间的距离(非负)

让我们试着理解这一点。

这个想法是大气在光线到达相机之前会散射来自物体的光线。散射的光量取决于大气属性(由β捕捉)以及物体与相机的距离(由 d(x)捕捉)。其余的光被传输(到达)相机。

由于β和 d(x)都是非负的,所以 t(x)的值在范围(0,1)内。0 表示没有来自对象的光到达相机(所有光都被散射),1 表示来自对象的所有光到达相机(没有散射)。

β值越高,表示大气越倾向于散射光。此外,随着物体远离相机,更多的光被散射。

现在,给定透射值(对于每个像素)和全局大气光线,可以计算相机接收的光线。

如果 t(x)为 1,那么相机可以完美地看到来自物体的光(无散射)。
如果 t(x)为 0,那么相机只看到大气光(完全散射)。
否则,相机会看到物体发出的光和大气之间的线性插值。

问题表述

现有的去雾工作是基于单独估计 t(x)A 。这样做的关键问题是估计误差可能会累积。
AOD 的目的是用公式(1)的以下重新表述,以统一的方式估计这两个参数。

Equation (3)

在哪里,

Equation (4)

t(x)A 被集成到一个变量 K(x) 中,该变量依赖于输入 I(x) 。一旦估计了 K(x) ,就可以使用等式(3)来计算去模糊图像。

因此,现在的目标是估计 K(x) 使得它最小化去模糊和原始图像之间的均方误差(MSE)。这是通过训练 CNN 来实现的。

网络设计

该网络有两个模块。

第一个模块估计 K(x) 。注意,对于尺寸为 W x H x 3 的图像, K(x) 也具有尺寸 W x H x 3。
第二模块涉及使用等式(3)生成去模糊图像的元素式操作。

K 估计模块是关键的,因为它间接估计大气光和传输矩阵(隐含地计算图像中每个像素的深度)。

它由 5 个卷积层组成(带有 ReLU 激活)。
每层有 3 个过滤器,但内核大小不同(以生成多尺度特征)。此外,在进行卷积之前,先前层的激活与中间层连接,因为这补偿了卷积期间的信息丢失。

网络架构如下所示。

AOD-net Architecture

因此,整个管道看起来像这样:

AOD-net Prediction Pipeline. (Reference: https://sites.google.com/site/boyilics/website-builder/project-page)

数据生成&培训

为了训练 AOD 网络,作者生成了人工模糊的图像。基于等式(1),来自 NYU2 深度数据库(包括每个像素的深度信息)的图像被人工模糊化,具有不同的值 βA (从均匀随机分布中选择)。因此,对于大约 1500 幅地面真实图像,获得了大约 27K 的模糊图像。

该模型被训练了 10 个时期。权重用标准高斯分布初始化,权重衰减设置为 0.0001。梯度规范被剪切为 0.1。

注:该论文没有提到所使用的确切学习速率,也没有提到确切的优化算法。(我在实现中使用了 0.0001 的学习率和 Adam Optimizer)。

作者基于 PSNRSSIM 指标,将 AOD 网络的性能与之前的去雾算法进行了比较。

现在让我们深入研究一下实现。

TENSORFLOW 实现

数据准备

  1. 在此下载训练 AOD 网的数据集。有大约 1500 个清晰图像和大约 27K 的人工模糊图像。
  2. 将包含干净图像的文件夹重命名为“原始图像”,将包含模糊图像的文件夹重命名为“模糊图像”。
  3. “原始图像”中的每个图像都有一个格式为“NYU2_x.jpg”的文件名,其中 x 是一个整数。
    “hazy _ images”中的每个图像都有一个格式为“NYU2_x_y_z”的文件名,其中 x、y 和 z 是整数。
    对于给定的原始图像“NYU2_x.jpg”,人工生成的朦胧图像对于某些 y 和 z 命名为“NYU2_x_y_z”,每个原始图像对应的朦胧图像可以有多个。

数据加载

我们将使用 Tensorflow 数据集 API。

  1. 从“orig_images”文件夹中读取原始图像路径并随机播放。将此列表分为两部分(90%-10%分割),以生成分别用于训练和验证的图像路径列表。
orig_image_paths = glob.glob(orig_images_path + “/*.jpg”)
n = len(orig_image_paths) 
random.shuffle(orig_image_paths)

train_keys = orig_image_paths[:int(0.90*n)]
val_keys = orig_image_paths[int(0.90*n):]

2.创建一个字典,将每个原始图像路径映射到图像是用于“train”还是“val”。
请注意,训练集中使用的原始图像集不应与验证集重叠(即使对应的模糊图像不同),以避免任何信息泄漏。

split_dict = {}
  **for** key **in** train_keys:
    split_dict[key] = 'train'
  **for** key **in** val_keys:
    split_dict[key] = 'val'

3.现在,迭代“hazy_images”文件夹中的所有图像路径,提取对应的原始图像的路径(用基本的字符串操作)。
如果原始图像路径对应于“列车”图像,则将 <原始图像路径、模糊图像路径> 添加到列车数据列表中。
否则,将其添加到 val_data 列表中。

train_data = []
  val_data = []

  hazy_image_paths = glob.glob(hazy_images_path + "/*.jpg")
  **for** path **in** hazy_image_paths:
    label = path.split('/')[-1]
    orig_path = orig_images_path + "/" + label.split('_')[0] + '_' + label.split('_')[1] + ".jpg"
    **if**(split_dict[orig_path] == 'train'):
      train_data.append([path,orig_path])
    **else**: val_data.append([path,orig_path])

4.使用 Tensorflow 数据集 API,创建训练和验证数据集。首先,通过对训练集的模糊图像路径应用 from_tensor_slices() 函数来创建 train_ds_hazy 数据集,随后是加载图像的映射函数(稍后解释)。
接下来,使用训练集的原始图像路径创建一个 train_ds_orig 数据集(以与之前相同的方式)。最后,压缩两个数据集以创建 train_ds

按照类似的过程创建 val_ds

train_ds_hazy = tf.data.Dataset.from_tensor_slices([data[0] **for** data **in** train_data]).map(**lambda** x: load_image(x))
  train_ds_orig = tf.data.Dataset.from_tensor_slices([data[1] **for** data **in** train_data]).map(**lambda** x: load_image(x))
  train_ds = tf.data.Dataset.zip((train_ds_hazy,train_ds_orig)).shuffle(100).repeat().batch(batch_size)

  val_ds_hazy = tf.data.Dataset.from_tensor_slices([data[0] **for** data **in** val_data]).map(**lambda** x: load_image(x))
  val_ds_orig = tf.data.Dataset.from_tensor_slices([data[1] **for** data **in** val_data]).map(**lambda** x: load_image(x))
  val_ds = tf.data.Dataset.zip((val_ds_hazy,val_ds_orig)).shuffle(100).repeat().batch(batch_size)

请注意,我们也说过数据集应该被混洗,数据应该以 batch_size 的批次提取。

5.现在,我们定义一个迭代器来迭代数据集元素。我们使用 from_structure() API,这样相同的迭代器可以用于训练和验证数据集。

iterator = tf.data.Iterator.from_structure(train_ds.output_types,train_ds.output_shapes)

然后我们定义 train_init_opval_init_op 操作。运行这些操作告诉迭代器是分别从训练数据集还是验证数据集中选取数据。

train_init_op = iterator.make_initializer(train_ds)
val_init_op = iterator.make_initializer(val_ds)

6.最后,我们定义了 next_element 操作,可以调用它从迭代器中读取下一批数据。

next_element = iterator.get_next()

数据预处理

我们定义了 load_image() 函数,该函数将图像路径映射到预处理后的图像——准备好输入网络。
我们将图像的高度调整为 480 像素,宽度调整为 640 像素,并将像素值标准化为[0,1]。

**def** load_image(X):
  X = tf.io.read_file(X)
  X = tf.image.decode_jpeg(X,channels=3)
  X = tf.image.resize(X,(480,640))
  X = X / 255.0
  **return** X

网络、损耗和优化

  1. 定义一个函数,该函数获取输入图像,并在将图像通过 AOD 网络架构后返回输出。
**def** haze_net(X):

  conv1 = Conv2D(3,1,1,padding="SAME",activation="relu",use_bias=**True**,kernel_initializer=tf.initializers.random_normal(),
                kernel_regularizer=tf.keras.regularizers.l2(weight_decay))(X)
  conv2 = Conv2D(3,3,1,padding="SAME",activation="relu",use_bias=**True**,kernel_initializer=tf.initializers.random_normal(),
                kernel_regularizer=tf.keras.regularizers.l2(weight_decay))(conv1)
  concat1 = tf.concat([conv1,conv2],axis=-1)

  conv3 = Conv2D(3,5,1,padding="SAME",activation="relu",use_bias=**True**,kernel_initializer=tf.initializers.random_normal(),
                kernel_regularizer=tf.keras.regularizers.l2(weight_decay))(concat1)
  concat2 = tf.concat([conv2,conv3],axis=-1)

  conv4 = Conv2D(3,7,1,padding="SAME",activation="relu",use_bias=**True**,kernel_initializer=tf.initializers.random_normal(),
                kernel_regularizer=tf.keras.regularizers.l2(weight_decay))(concat2)
  concat3 = tf.concat([conv1,conv2,conv3,conv4],axis=-1)

  conv5 = Conv2D(3,3,1,padding="SAME",activation="relu",use_bias=**True**,kernel_initializer=tf.initializers.random_normal(),
                kernel_regularizer=tf.keras.regularizers.l2(weight_decay))(concat3)
  K = conv5

  output = ReLU(max_value=1.0)(tf.math.multiply(K,X) - K + 1.0)
  *#output = output / 255.0*

  **return** output

注意:
-权重初始化(kernel_initializer)是用高斯分布(均值 0.0,标准差 0.02)完成的。
-使用参数为 0.0001 的 L2 正则化。
-每次卷积后应用 ReLU 激活。
-最大值为 1.0 的 ReLU 激活应用于元素倍增层之后。

2.分别为输入(模糊)图像和原始图像定义占位符 XY
定义去雾 _X 为网络通过 X 时的输出。

X = tf.placeholder(shape=(**None**,480,640,3),dtype=tf.float32)
Y = tf.placeholder(shape=(**None**,480,640,3),dtype=tf.float32)
dehazed_X = haze_net(X)

3.定义原始图像和去模糊图像之间的网络损耗 MSE。

loss = tf.reduce_mean(tf.square(dehazed_X-Y))

4.定义优化器操作。
a)定义 Adam 优化器,将设置为 0.001 。b)传递可训练变量列表,并计算每个变量的梯度。
c)裁剪范数 0.1 上的梯度
d)通过应用裁剪的梯度更新可训练变量。

# Step (a)
optimizer = tf.train.AdamOptimizer(learning_rate)# Step (b)
trainable_variables = tf.trainable_variables()
gradients_and_vars = 
optimizer.compute_gradients(loss,trainable_variables)# Step (c)
clipped_gradients = [(tf.clip_by_norm(gradient,0.1),var) **for** gradient,var **in** gradients_and_vars]# Step (d)
optimizer = optimizer.apply_gradients(gradients_and_vars)

培养

  1. 定义 tf。训练时,避免存储模型权重。
saver = tf.train.Saver()

2.初始化所有全局变量。

3.在每个时期,运行 train_init_op ,以便迭代器从训练数据集中读取数据。

4.定义需要处理的批次数量,这相当于训练样本数量除以批次大小。

5.对于每个批次,运行优化器操作并存储相应的损失(MSE)。每 1000 次迭代打印一次批次损失,以检查损失是否在减少。

**with** tf.device('/gpu:0'):
  **with** tf.Session() **as** sess:

    sess.run(tf.global_variables_initializer())
    **for** epoch **in** range(n_epochs):

      sess.run(train_init_op)
      batches = len(train_data) // batch_size
      epoch_loss = 0.0
      **for** batch **in** range(batches):

        batch_data = sess.run(next_element)
        *#print(batch_data[0].shape,batch_data[1].shape)*
        *#print(np.max(batch_data[0]),np.max(batch_data[1]))*
        batch_loss, _ = sess.run([loss,optimizer],feed_dict={X:batch_data[0],
                                                            Y:batch_data[1]})
        epoch_loss += batch_loss / float(batches)
        **if** batch % 1000 == 0:
          print("Training loss at batch **%d**: **%f\n**"%(batch,batch_loss))

      train_loss = epoch_loss

6.要评估验证数据集的性能,重复相同的过程,只是不运行优化器操作。
此外,每 100 批后,显示模糊、原始和去模糊图像(由网络生成),以供目视检查。

sess.run(val_init_op)
      batches= len(val_data) // batch_size
      epoch_loss = 0.0
      **for** batch **in** range(batches):
        batch_data = sess.run(next_element)
        batch_loss = sess.run(loss,feed_dict={X:batch_data[0],
                                             Y:batch_data[1]})
        epoch_loss += batch_loss / float(batches)
        **if** batch % 100 == 0:
          print("Validation loss at batch **%d**: **%f\n**"%(batch,batch_loss))
          **for** j **in** range(batch_size//2):
            x = batch_data[0][j].reshape((1,)+batch_data[0][j].shape)
            y = batch_data[1][j].reshape((1,)+batch_data[1][j].shape)
            dehazed_x = sess.run(dehazed_X,feed_dict={X:x,Y:y})
            print("Image Number: **%d\n**"%(j))
            showImage(x[0])
            showImage(y[0])
            showImage(dehazed_x[0])
      val_loss = epoch_loss

6.在每个时期之后,保存模型权重。

saver.save(sess,'./models/model_checkpoint_' + str(epoch) + '.ckpt')

结果

我对网络进行了 10 个时期的训练,并在验证集上实现了大约 0.018 的 MSE。然而,在 3-4 个周期后,我没有观察到明显的改善。

下面是一些自然朦胧图像的定性结果(不是人工生成的朦胧)。

Left: Naturally hazy image. Right: De-hazed image generated by AOD-net.

Left: Naturally hazy image. Right: De-hazed image generated by AOD-net.

Left: Naturally hazy image. Right: De-hazed image generated by AOD-net.

Left: Naturally hazy image. Right: De-hazed image generated by AOD-net.

可以在这里找到整个代码以及经过训练的模型。是可以在 GoogleCollab 上运行的 Python 笔记本。

干杯!😄

参考

  1. https://sites . Google . com/site/boy ilics/website-builder/project-page
  2. https://github.com/TheFairBear/PyTorch-Image-Dehazing (py torch 实现)

所有张量都暗暗希望做自己

原文:https://towardsdatascience.com/all-tensors-secretly-wish-to-be-themselves-1ccc836df41c?source=collection_archive---------16-----------------------

Photo by Olav Ahrens Røtneon Unsplash

16 绝不是个大数字。计算一个卷积神经网络(CNN)需要多少 MAC 单元才能在 64 个时钟周期内从 16 深度 3×3 张量卷积中产生 16 个 16×16 区块的输出通道?

如果不使用快速算法,将需要至少 9216 个 MAC 单元。9,216 个 MAC 单元通常用于构建 96×96 脉动阵列,但是计算 96×96 矩阵乘法(MM)至少需要 96 个时钟的等待时间。将需要一长串 96×96×96 的矩阵乘法来保持脉动阵列被占用。

欢迎来到人工智能中的张量世界。现在是时候习惯维度的诅咒了。

张量与矩阵

这篇文章的标题是受 Charles F. Van Loan 教授在他 2010 年关于张量展开的演讲中的一句话的启发和回应。

所有张量都暗暗希望自己是矩阵!

这一陈述表明了张量研究团体通过首先将张量展开成矩阵,然后利用成熟的矩阵理论框架来研究张量的愿望。即使张量被认为是所有主要人工智能框架中最基本的数据类型,将张量展平到矩阵以利用高度优化的矩阵乘法(MM)或 MM 加速器(MMA)库也是一种行业标准做法。矩阵一般被 AI 界认为是张量的特例。

传统智慧可能会说:

  1. MM 中有非常好的并行性和数据共享模式可以利用。
  2. 矩阵比张量更适合可编程硬件。
  3. 有一个本机硬件加速解决方案,脉动阵列,用于 MM。

然而,

  1. CNN 在结构上相当于 MMs。没有必要展平张量来利用 MM 等价的并行性和数据共享模式。
  2. 当沿着存储器层级向上攀升时,矩阵针对时间局部性被递归地分块,并且针对空间局部性被打包。它们最终成为微面板,即小块行或列,由软件微内核或 GPU 着色器内核使用。
  3. 在我对谷歌的 256x256 脉动阵列的 TPU v1 的评论中,解决了脉动阵列的方形诅咒的可扩展性问题。此后,使用多个相对较小的脉动阵列似乎成为主流。由于这个原因,矩阵在成为可以被脉动阵列消耗的正方形矩阵形状之前,必须被类似地分块和打包。

因此,来自展平张量的矩阵实际上被分块并打包成适当的结构,以实现高性能执行,如下图所示。前者可以称为平面展开,后者称为块展开。由于几十年来对高性能 MM 实现的研究、构建和利用块矩阵框架的努力,矩阵通常成为 CNN 和 AI 的默认数据类型。

Block-unfolding of a MM

按照传统观点,CNN 中的特征映射被强制为某个矩阵的列,卷积滤波器被展平为列中的一些连续矩阵元素。由于平面展开,失去了在空间和时间上重复使用特征图中相邻像素的可能性。

阻止张量救援

MM 中递归矩阵块展开的一个关键特征是当矩阵靠近硬件的裸机时,高级时间和空间局部性被保留。看看 CNN 中的数据位置是否也能以张量的形式保存下来,这应该是很有趣的。

合理的设计选择是将特征地图划分为分块,并保持分块结构以重复使用过滤器,利用小分块的快速算法,并实现细粒度的 SIMD 式并行。在接近裸机时,张量应保持为张量,以保持要素地图中的切片结构和数据位置不变。

此外,必须解决输入特征地图和输出特征地图之间的位置模式。前者允许共享来自多个输入要素地图的数据,以便计算多个输出要素地图。后者使更多的受众能够共享输入要素地图。问题是你不能共享所有的特征图,因为产生一个输出像素并不需要所有的输入特征图,并且将所有的特征图保存在芯片上是不切实际的。总结一下,所有维度都需要进行一定程度的划分或分块,这样的考虑导致张量被划分成更小的,成为块张量

块张量是指其项是张量的张量。它是块矩阵的对等物。块张量的概念可用于解决维数灾难并保持 CNN 中的数据局部性,类似于高性能计算(HPC)行业如何采用 MM 的块矩阵概念。张量包,相当于 MM 中的微面板或子方阵,被定义为基本张量单元,必须对其进行原子处理以利用所有维度的空间局部性。由张量包组成的张量块被定义为必须在计算单元和外部存储器之间整体传输的张量单元,以促进张量包之间的时间局部性。

原子张量包操作被定义为从最小足够数量的输入通道产生最小足够数量的最小足够大小的瓦片的输出通道。由于张量中的维数灾难,即使每个张量包在每个维度上都很小,处理这样的张量包也会变得很费力。它可以在张量块内迭代或同时应用,以解决更大的问题。这些想法在文章的其余部分得到了半正式的阐述。

块张量形式的 CNN

CNN 的输入 A 和输出 C 分别由多个输入特征图(IFM)和输出特征图(ofm)组成。它们可以被认为是三维张量,特征图的维度为 xy ,索引 IFM 的输入深度为 w ,索引 ofm 的输出深度为 z 。为了实现细粒度的 SIMD 并行性并利用具有空间局部性的快速算法,每个特征图可以沿着 xy 维度进一步划分成瓦片。复合索引( txty )分别用于识别输入图块和输出图块。对于每一对唯一的 IFM w 和 OFM z ,都有一个滤波器 B ( wz ),通常由 3×3 的滤波器参数组成。输入和输出张量成为图块的块张量,如下图所示

CNN in terms of block tensors of tiles

平铺的 CNN 可以用张量理论符号更紧凑和精确地表示如下:

冒号表示从该维度获取所有数据。 A (:,:, w ) 代表 IFM w ,因为它从 IFM 中取出所有的图块。

CNN 在结构上等同于 MMs

传统观点认为,我们必须将张量展开成矩阵,以利用 MMs 中的并行性和数据共享模式。然而,实际上是反过来的。就并行性和数据共享模式而言,CNN 在结构上等同于 MMs,如下所示,这就是 MMs 在 CNN 中如此普遍使用的原因。

CNNs are structurally equivalent to MMs

由于 C 中的行的计算是独立的,所以 A 的行可以被阻塞。等效地,特征图可以被平铺,因为像素可以被独立计算。

MM 等效并行度和数据共享模式相对于切片保持不变。

同一要素地图中的输出切片共享相同的过滤器,但不共享相同的输入切片。沿着输出维度的输出切片共享相同的输入切片,但不共享相同的过滤器。MMs 和 CNN 之间的等价性可以在下表中用张量理论符号更简洁地描述:

深度也需要平铺(阻塞)

现在,片上存储器的成像尺寸受到限制,我们希望在片上数据块中的 IFM、ofm 和滤波器之间充分利用 CNN 中的 MM 等效数据共享模式。数据块的几何结构应该是什么样的?它必须有足够的( xy ) 来重用过滤器,足够的 w 来共享足够的输入数据,以及足够的 z 来有效地共享输入数据,如下图所示:

On-chip buffers must have sufficient coverages along all dimensions

这个观察导致除了阻塞 xy 维度之外,阻塞 wz 维度,这个我们已经做过了。这是为了确保输入和输出数据块分别覆盖足够数量的 IFM 和 ofm。引入新的索引 twtz 分别标识一组 IFM 和一组 ofm。我们将输入张量包 A ( txtytw )定义为来自 IFM 组 tw 的一组( txty )对齐的图块。 同样,我们将 C ( txtytz ) 定义为一组来自 OFM 组 tz 的( txty )对齐瓷砖。 B ( twtz ) 代表一组滤波器,每组用于一对来自组 tw 的 IFM 和来自组 tz 的 OFM。它被称为滤子张量包。输入、输出和过滤张量现在是张量包的块张量,如下所示

CNN in terms of block tensors of tensor packets

MM 等价并行性和数据共享模式相对于张量包保持不变。

软件中的张量微内核或硬件中的张量包引擎可以被设计成处理将输入张量包 A ( txtytw ) 与过滤张量包 B ( twtz ) 进行卷积的原子操作

Atomic tensor packet operation

假设输入和输出图块分别为 6x6 和 4x4,并使用 8 作为 IFM 组和 OFM 组的大小。在不使用 3×3 卷积的快速算法的情况下,在 4 个时钟内完成该运算需要 2304 个 MAC 单元。2304 路并行度在所有尺寸中相当平均地投入,包括沿特征图的 xy,输入深度 w ,输出深度 z 。使用诸如 4x4 之类的小块尺寸的分块使得能够使用诸如 Winograd 之类的快速算法,从而仅使用 576 个 MAC 单元就可以实现 2,304 路并行。

张量的递归分块

张量包是计算单元整体消费的基本单位。为了保持切片之间的数据局部性和平铺结构,我们在全张量和张量包之间引入了一个中间块级别,张量块,,以包括我们希望整体带到芯片上的张量包。当有足够的计算单元、片上存储器和提供带宽时,它是片间时间局部性和空间局部性的基本单元。一个张量块沿 x z维度用( bxby 、*BZ。*****

下面是一个张量递归分块的例子。整体张量是 4x4 瓦片的 4x 4 块张量的 4x2 块张量,4x 4 瓦片的 1x1x8 块张量,其中( dxdy )是在瓦片内寻找像素的偏移, dz 是标识组内特定特征图的索引。

Recursive blocking of tensors to preserve locality in a feature map

张量块线性存储在内存中。我们不需要担心它们是如何准确排序的。对于张量块,将有两种不同的块展开顺序,一种优化为将张量块存储到 DRAM,另一种优化为将其呈现给计算单元。如下所示,将需要软件和/或硬件中的转置机制来动态地从一种格式转置到另一种格式。

Transposition of a tensor block

执行转置的等待时间可以由双缓冲来覆盖。当张量块被呈现给计算单元时,它被展开成( txty )主顺序的张量包,因此张量包可以在( xy )域中并行处理,计算单元相应地排列。

所有张量都暗暗希望做自己

Van Loan 教授在关于块张量的块展开的演讲中也说过:

块展开保留了数据的结构和局部性。…在我看来,分块最终会在张量计算中产生与矩阵计算相同的影响。

张量被分块展开成用于多维中的时间局部性的张量块,使得当被带到芯片上时,数据可以在多维中共享。张量块被进一步分块展开成张量包,这些张量包在所有维度上具有最低限度的足够覆盖。在本例中,处理这样的张量包需要 2304 路并行处理。MM 等价并行和数据共享模式应用于张量块中的张量包。

据我们所知,这篇文章中所讨论的可能是计算史上第一次尝试在裸机上采用块张量的概念。对于处理高分辨率视频/图像的应用,可以实现跨越 xy 维度的可扩展和更大的并行性。CNN 凭借其革命性的力量和在张量中的根深蒂固,可能会成为 block tensors 的第一个杀手级应用。

所有张量都暗暗希望自己是 block 张量,期待自己的潜力得到释放,实现 AI 硬件的突破。

所有恼人的假设

原文:https://towardsdatascience.com/all-the-annoying-assumptions-31b55df246c3?source=collection_archive---------8-----------------------

在这篇文章中,我试图收集和映射常见数据科学算法的假设。

假设是恼人的小事,如果你要成功地实现任何模型,就需要坚持这些假设。大多数模型,无论多么基本,都有一套假设,在本文中,我试图将它们映射成一种模式,以便于理解。

让我从一张我尝试构建的假设图开始。从这里开始,我们可以轻松地浏览与每个部分相关的假设。

Assumption Map

我们开始吧..

回归

线性回归和多项式回归都有一组共同的假设,如果它们的实现是有益的,就需要满足这些假设。

  1. 线性关系:线性回归需要自变量和因变量之间的关系是线性的。这种线性假设最好用散点图来检验。然而,显然线性假设对多项式回归无效。
  2. 多元正态:回归分析要求所有变量都是多元正态。这种假设最好用直方图或 Q-Q 图来检验。 正态性可通过拟合优度检验进行检查,如 Kolmogorov-Smirnov 检验。当数据不是正态分布时,非线性变换(例如,对数变换)可以解决这个问题。
  3. 多重共线性:回归假设数据中很少或没有多重共线性。当自变量之间的相关性过高时,会出现多重共线性。您可以使用相关矩阵来检查变量之间是否相关。您可以删除一组相关的列,同时保留另一组。
  4. 自相关:R 回归分析要求数据中很少或没有自相关。当残差不是相互独立的时候,就会出现自相关。虽然散点图可以让你检查自相关,你可以用德宾-沃森测试来测试自相关的线性回归模型。
  5. 同方差:同方差描述了一种情况,其中误差项在独立变量的所有值上都是相同的。散点图是检查数据是否同方差的好方法(意味着回归线上的残差相等)。如果存在同方差,非线性校正可能会解决问题。
  6. 误差项必须是正态分布

像套索、脊、弹性网等分离方法不过是试图平衡偏差与方差的正则化技术。因此,这些技术没有任何独立的假设。

SVR 对输入数据也相当宽容,并且没有任何独立的假设。

使聚集

广泛使用的聚类算法有四种:k-means 聚类分析、潜在类分析、自组织映射。**

  1. K 均值聚类方法考虑了关于聚类的两个假设——首先,聚类是球形的,其次,聚类具有相似的大小。*当算法处理数据并形成聚类时,球形假设有助于分离聚类。如果违背了这一假设,所形成的簇可能不是人们所期望的。另一方面,对群集大小的假设有助于决定群集的边界。*
  2. 某些相似性度量(例如欧几里德距离)假设变量在聚类内是不相关的。
  3. 谱聚类中,数据点被视为图形的节点。因此,聚类被视为一个图划分问题。然后,节点被映射到一个低维空间,该空间可以很容易地被分离以形成集群。需要注意的重要一点是,没有对集群的形状/形式进行假设。
  4. 层次聚类没有自己独立的假设。
  5. 与其他聚类算法类似, GMM 对数据的格式和形状有一些假设。如果不满足这些标准,绩效可能会显著下降。
  6. LCA 以“条件独立性”为标准定义潜在类别这意味着,在每个潜在类别中,每个变量在统计上独立于其他变量。例如,在对应于不同医学综合征的潜在类别中,一种症状的存在/不存在被视为与所有其他症状的存在/不存在无关。对于某些应用程序,条件独立性可能是一个不合适的假设。例如,一个人可能有两个非常相似的项目,因此对它们的响应可能总是相关联的。对于这种情况和某些相关情况,潜在类模型的扩展是存在的。
  7. 与多变量技术相比,非参数 SOM 程序有许多优点。首先,它们不假设变量的分布,也不要求变量之间的独立性。其次,它们更容易实现,能够解决非常复杂的非线性问题。最后,它们可以更有效地处理噪音和缺失数据、非常小的维度和无限大小的样本。

分类

常见的分类器类型有: 逻辑回归、朴素贝叶斯分类器、KNN、随机森林

  1. 逻辑回归用于预测从属变量,这些变量属于有限数量的类别之一(将二项式情况下的从属变量视为伯努利试验的结果),而非连续结果。鉴于这种差异,违反了线性回归的假设。特别是残差不能正态分布。**
  2. 结果的 logit 和每个预测变量之间存在线性关系。回想一下,logit 函数是logit(p) = log(p/(1-p)),其中 p 是结果的概率。这可以通过目视检查每个预测值和 logit 值之间的散点图来检查。
  3. 预测值之间没有高度相关性(即多重共线性)。这可以通过可视化厨师的距离值来检查。
  4. 朴素贝叶斯分类器的情况下,假设预测器/特征是独立的。这里做的另一个假设是所有的预测因素对结果有相同的影响。
  5. KNN 是一种非参数懒惰学习算法。那是一个非常简洁的陈述。当你说一项技术是非参数化的,这意味着它没有对底层数据分布做任何假设。**
  6. 决策树中,由于我们没有概率模型,只有二分分裂,我们根本不需要做任何假设。那是关于决策树的,但它也适用于随机森林。不同之处在于,对于随机森林,我们使用引导聚合。它下面没有模型,唯一依赖的假设是采样具有代表性。但这通常是一个常见的假设。

集成方法是一种元算法,它将几种机器学习技术结合到一个预测模型中,以便减少 方差(bagging)偏差 (boosting),或者提高预测 (stacking)。因此,这些也没有任何单独的假设。

时间序列分析

ARIMA 模型基于平稳性的假设工作(即它们必须具有恒定的方差和均值)。如果你的模型是不稳定的,你需要在使用 ARIMA 之前对它进行变换。

随着我对数据科学的了解越来越多,我会继续更新这篇文章,直到那时,干杯。

参考资料:

  1. https://www . research gate . net/publication/263084866 _ An _ Introduction _ to _ Self-Organizing _ Maps

2.https://cdn1 . SPH . Harvard . edu/WP-content/uploads/sites/59/2016/10/Harvard-lecture-series-session-5 _ LCA . pdf

3.https://www . analyticsvidhya . com/blog/2015/12/complete-tutorial-time-series-modeling/

4.维基百科(一个基于 wiki 技术的多语言的百科全书协作计划ˌ也是一部用不同语言写成的网络百科全书ˌ 其目标及宗旨是为全人类提供自由的百科全书)ˌ开放性的百科全书

5.https://www . statistics solutions . com/assumptions-of-linear-regression/

6.大量堆栈溢出问题

7.https://cdn1 . SPH . Harvard . edu/WP-content/uploads/sites/59/2016/10/Harvard-lecture-series-session-5 _ LCA . pdf

8.https://towards data science . com/spectral-clustering-ABA 2640 CD 5b

9.https://towards data science . com/naive-Bayes-classifier-81d 512 f 50 a7c

10.https://saravananthirumuruganathan . WordPress . com/2010/05/17/a-detailed-introduction-to-k-nearest-neighbor-KNN-algorithm/

11.https://www . statistics solutions . com/assumptions-of-logistic-regression/

构建第一个图像分类器的所有步骤(带代码)

原文:https://towardsdatascience.com/all-the-steps-to-build-your-first-image-classifier-with-code-cf244b015799?source=collection_archive---------1-----------------------

从创建数据集到测试您的程序准确性

Photo by Temple Cerulean on Unsplash

如果你想创建一个图像分类器,但不知道从哪里开始,按照这个快速指南来理解概念,并能够训练一个卷积神经网络来识别任何你想要的图像!

为了实现这一点,提供的代码是用 Python (3.x)编写的,我们将主要使用 Keras 库。

首先,如果你对什么是神经网络毫无概念,我只能用快速指南鼓励你去发现这个概念。例如,这是我写的最后一篇:

[## 第一个为初学者讲解的神经网络(带代码)

理解并创造一个感知机

towardsdatascience.com](/first-neural-network-for-beginners-explained-with-code-4cfd37e06eaf)

现在,我们将重点关注卷积神经网络,它保持了关于列和神经元、输入和输出的相同想法,同时简单地添加了一种提取图像中信息的方法。

什么是卷积神经网络?

这种类型的神经网络由一些操作之前的深度神经网络组成。

O 总之,请记住,图像只是一个数字矩阵,如果图像只有灰度级,则为 2 维,如果图像包含颜色,则为 3 维(第三维适用于所有 RGB 级别)。

首先,当一个图像被提供给算法时,它首先在初始图像上应用一个小的过滤器,并在图像上的任何地方使用它。这一步称为卷积。

Figure 1 — Convolution of a 5x5 image by a 3x3 filter

在图 1 中,初始图像是绿色的,滤镜是黄色的,并将初始图像的每个数字乘以相应滤镜的数字。

在这个操作之后,一个新的矩阵(红色)被获得。通过将红色矩阵的像素与模型进行比较,程序可以确定在第一图像上是否存在对应于模型的物体。

例如,仅在一行像素上获得大数字意味着初始图像在那里包含一行。

下一步叫做汇集。它是关于取每个区域的最高值,并仅使用那些值形成新的矩阵。它降低了矩阵的空间维数,从而有助于神经网络更快地运行。

Figure 2 — Example of Pooling operation

在图 2 中,您可以看到图像的维度被分为 4 个部分,每个部分都有其最高值。新形成的图像更小。

此外,在该过程中使用激活函数来归一化所有获得的值。在下面的例子中,我们将使用 ReLU。

最后,可以使用最后一个步骤来提高精度,该步骤被称为下降。它迫使神经网络在学习阶段随机禁用一些神经元。我们也将在我们的例子中实现这个函数。

现在你已经知道了卷积的基础,我们可以开始构建一个了!

准备数据

只有当你想使用你自己的数据,或者在网上找不到的数据,来建立一个可能更适合你需要的卷积神经网络时,这一部分才是有用的。否则,下面是直接使用来自 Keras 的数据集的代码:

**from** keras.datasets **import** mnist #replace mnist with any dataset(x_train, y_train), (x_test, y_test) = mnist.load_data()

这里,我们简单地调用函数 load_data 来为训练和测试阶段设置数据集。您可以用任何想要使用的数据集替换“mnist”(在两行中都进行更改)。

如果您想创建自己的数据集,以下是步骤:

首先,你需要收集大量的图像。越多越好。请记住为每个班级保留大约相同数量的图像。例如,对于我的 2D 象棋分类器,每个可能的棋子(和空棋子)有 160 张图像,所以总共大约有2000 张图像(这并不多),但是数据集的大小取决于项目(我的 2D 棋子总是有相同的方面,而猫有许多品种、不同的大小、不同的姿势……)。

还有一个强大的工具可以帮助你创建更多的数据,叫做数据增强。它只是简单地修改一张图片,然后通过翻转、旋转或裁剪,返回大量新的独特的图片,所有这些都基于第一张图片。

Figure 3 — Example of a folder tree

最后,确保你所有的数据都被分类到一个专门的文件夹中,每个类都有自己的子文件夹。

现在,在主文件夹中,我们将创建一个 python 程序来设置所有数据。

Preparing the data

在第 14 行,您可以将列表更改为您需要的任何类,但是保持您之前用于子文件夹的相同名称。

最后,在运行程序后,数据被设置在文件中,并准备使用。

构建卷积神经网络

The convolutional neural network

如果您决定使用导入的数据集,将第 9 & 10 行替换为我们之前看到的内容,将第 44 行替换为:

model.fit(x_train, y_train, batch_size=32, epochs=40, verbose=1, validation_data=(x_test, y_test))

在第 37 行,将 Dense() 的参数修改为你所拥有的班级数。这是神经网络可能输出的数量。

对于每个卷积层,你可以看到我们总是首先加上它的神经元数量和滤波器大小。然后,我们涉及到激活函数,最后使用池化方法。我们还在第 30 行添加了一个 Dropout 来看看如何做。

此外,在第一个“正常”隐藏层之前,我们添加了函数 Flatten() ,该函数将之前卷积的所有信息转换为神经元的输入。在这一点上,剩下的只是包含来自基本神经网络的层和神经元。

在这里,你建立了自己的分类器!

预测图像类别

现在,你可以使用你的神经网络来预测任何你想要的图像。简单地写一个包含这几行的小脚本:

**import** cv2
**import** tensorflow **as** tfCATEGORIES = ["bishopB", "bishopW", "empty", "kingB", "kingW",
			"knightB", "knightW", "pawnB", "pawnW",
			"queenB", "queenW", "rookB", "rookW"]**def** prepare(file):
    IMG_SIZE = 50
    img_array = cv2.imread(file, cv2.IMREAD_GRAYSCALE)
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
    return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1)model = tf.keras.models.load_model("CNN.model")
image = "test.jpg" #your image path
prediction = model.predict([image])
prediction = list(prediction[0])
print(CATEGORIES[prediction.index(max(prediction))])

函数 prepare(file)允许我们使用任何大小的图像,因为它会自动将图像调整到我们在第一个程序中定义的大小。

如果您在数据程序中修改了图像尺寸,也请在此处修改。

就是这样!您只是构建了适合您自己图像的图像分类器。当然,不要犹豫修改你看到的任何一行代码,因为你的神经网络的准确性可能会根据这些参数而有很大的不同。以下是其中的一部分:

  • 模型:你可以很容易地在你的神经网络中添加或删除一些层,改变神经元的数量,甚至是激活函数。你有你想要添加的任何东西的模型。
  • 数据:获得的精度不是你所期望的?也许你可以添加更多的数据,主要是验证你所有的图像都存储在他们的好文件夹。
  • IMG 大小:在程序中为数据集定义,它表征了网络将要处理的图像的大小。不要尝试太大的数字,因为高质量的图像会导致更长的训练阶段。此外,即使是著名的数据库,如 MNIST,包含的图像也非常少(MNIST 为 28x28)。不要忘记在最后一个程序中修改整形函数的 IMG 大小。
  • Keras 使用的新参数,如回调。一个叫做“早期停止”的方法可以帮助你提高训练阶段的长度,主要是避免过度适应。

有了这个指南,我们刚刚够你创建和理解你的第一个卷积神经网络。如果你愿意,还有许多其他参数或方面可以发现,所以不要犹豫,继续前进。

感谢阅读!

我希望这个小指南有用,如果你有任何问题和/或建议,请在评论中告诉我。

在 Seaborn 中,您可以自定义图表和图形的所有方式

原文:https://towardsdatascience.com/all-the-ways-you-can-customize-your-charts-and-graphs-in-seaborn-9be90fa6f5b5?source=collection_archive---------26-----------------------

一个关于如何使图形美观易懂的代码演示

Photo by Amaury Salas on Unsplash

介绍

在数据科学领域,Jupyter 笔记本是一种非常流行的数据探索和实验工具。由于笔记本的性质,它们也允许数据很容易地图形化和可视化。可视化数据可能是一个很好的探索工具,但当您想要与他人共享您的工作时,它也变得很重要。为了与他人分享你的工作,特别是与管理人员,你最好知道如何制作一些好看的、能被理解的图表。

Seaborn 图书馆

谈到可视化,我个人的选择是 seaborn 。Seaborn 是一个建立在 Matplotlib 基础上的库,使它更容易使用,也更吸引人。如果你不太熟悉 Matplotlib,在 seaborn 中定制你的绘图会很困难,因为它使用 Matplotlib 的语法来改变图形的部分。下面,我有你需要的所有代码,让你的图表容易理解。您可以使用 Matplotlib 和 seaborn 做很多事情,这肯定不是包罗万象的,但它应该会给您一个很好的起点。

数据

对于这些例子,我从 Kaggle 获取了一些容易获得的数据。我从哥斯达黎加贫困挑战房价回归挑战中抓取数据。

形象化

基本图形

首先,我们将导入我们将使用的库,并制作一个简单的图表。我们将查看我们正在处理的第一个数据集的目标变量贫困水平的计数。

从一行代码中,我们得到了一个漂亮的图形。这里没有太多的信息,但至少看起来不错。虽然可能有点小。让我们添加另一行代码来更改图形的大小,使其稍微大一点。

现在更容易看到了。在 figsize 参数中,你可以放入任何你想要的尺寸来改变你的图形的大小。它只需要一个类似于(height,width)的参数。

标记图表

现在我们已经有了一个很容易看到的大小合适的图表,我们需要让图表的目的更清楚一点。我们只需要几行代码就可以添加标题和轴标签。

现在我们到了这样一个点,有些人并不真正知道发生了什么,但看了这个图表,就对我们正在做的事情有了一些了解。尽管如此,阅读那些微小的字体还是有点困难。让我们解决这个问题。

对我来说,这看起来是一个非常易读的图表。我们所有的东西都有清晰的标签,而且足够大,所以看起来很像样。

设计

现在,图表已经清楚了正在发生的事情,我们可以做一些调整,使它更有吸引力,并添加更多的细节。我们可以做到这一点的第一个方法是改变我们的图表使用的调色板。

我们的图表现在有点不同了。Seaborn 支持许多不同的配色方案。你可以在这里查看它们。一旦设置了配色方案,它就为笔记本的其余部分设置好了。因此,您可以在顶部设置一次,或者为每个图形更改它。

我们还可以添加一些细节,使我们的图表更加清晰。你可能想知道哪个贫困水平是好的,哪个是坏的。因为我们只是把它们标为数字,所以稍微澄清一下可能会有好处。

现在我们已经明确了每个目标标签的含义。让我们回到我们的小图表,画出同样的东西。

这是一个非常不专业的图表。我们所有的标签相互重叠,很难阅读。幸运的是,有一个简单的方法可以让它看起来更好。我们要给我们的标签一个小小的转变。

就这样,我们的图形又可读了。这可以很好地服务于长标签,或者只是让图形看起来更好一点。

接下来,我们将深入研究其他数据。我们将使用我们已经看过的工具绘制三个不同质量水平的房价分布图。

我们这里有一个非常漂亮的图表。唯一的问题是,我们无法知道哪个分布是哪个。与上一张图不同,我们不能在 x 轴上标记我们的组。相反,我们需要在图表中添加一个图例。

有了图例,我们可以知道哪个分布与哪个质量组相关,我们的图表又有意义了。

最后,我们将看看如何操作图的维度。如果我们不太关心高质量组的长尾,并且希望放大主要分布,我们可以设置不同于默认的轴限制。这里,我们将 y 轴设置为略高于默认值,并将 x 轴设置为 600,000。

我们的图表向我们展示了现在分布的主要部分。如果有一两个异常值使你很难读懂其余的图表,这可能是有用的。

结论

这些只是一些提示和技巧,帮助你定制你的海伯恩情节。你还可以用它做更多的事情。如果您想了解更多自定义图形的方法,请通读 Matplotlib 文档。我希望这是有帮助的,你的图表现在可以与世界分享了。

面试前你需要知道的关于线性回归的所有代数知识

原文:https://towardsdatascience.com/all-you-need-to-know-about-linear-regression-to-be-interview-ready-fc58a00a0b8c?source=collection_archive---------7-----------------------

Photo by John Moeses Bauan on Unsplash

线性回归是数据科学中最简单也是最重要的算法之一。无论你面试的是数据科学、数据分析、机器学习还是量子研究领域的工作,你最终都可能不得不回答关于 LR 的特定代数问题。以下是你需要知道的,让你对自己的 LR 知识充满信心。

注:本文全是理论,无编码。它还假设您已经至少对代数有一点熟悉。

知道自己的假设

虽然本文假设您已经对 LR 有所了解,但是让我们提醒一下公式和假设。给定 N 个观察值,一个输出向量 Y(维数为 Nx1)和 p 个输入 x1,X2,…,Xp(每个输入向量的维数为 Nx1), LR 假设回归函数 E(Y|X)在输入中是线性的。y 因此统计:

其中ε是误差项。线性假设实际上是 LR唯一严格必要的假设在本文后面,我们将看到我们可以添加更多的假设来推断更多的结果。

虽然上面的公式看起来很简单,但找到系数(β)并不总是很容易——继续向前,我们将把β称为系数的估计值。

了解关键指标的定义

以下是你绝对需要知道(牢记)的 3 个指标:

  • RSS 是残差平方和

其中 y_i 为观测值 i 的输出, ŷ_i 为观测值 i : 的估计输出

  • TSS 是平方和的总和

在哪里

  • R 平方,它是 X 和 Y 之间线性关系的量度

只要你知道这些公式,你就应该能够通过逻辑推理推断出所有其他的结果。

知道答案:如何(何时)计算它

正如我们之前所说,LR 的关键是找到系数的估计值。我们通过最小化 RSS 找到这些。为此,让我们定义 X 和 Y 为

注意,为了考虑截距β_ 0,我们必须在输入矩阵中添加一列 1。我们的最小化问题等价于求解:

因此,我们可以计算右边项的梯度:

对于我们的估计 hat 应该等于 0。

假设 XX 是非奇异的,这给了我们一个显式解 :

这是一个你需要知道的公式,但是你也应该能够证明它,就像上面做的那样。非奇点的假设是这里的关键。我们还推断出 y 估计的公式:

知道维 Nx1 (1 个输入变量)中的显式解也是有用的:

其中 x 在这里是一个向量(不是矩阵)——当你已经有了更一般的解决方案时,很容易记住:X⊤X 成为输入的方差(在一维中,求一个项的倒数等于除以那个项),X⊤y 成为协方差项。你也可以通过在一维空间做类似的计算来计算这个解。

熟悉假设检验(假设正态误差)

在采访中,对 LR 有一些统计概念也很重要。

本节假设你已经掌握了统计测试的基础知识(包括 t 统计f 统计假设检验)。

假设正常误差,即

(别忘了ε在这里是矢量!)那么我们的估计解满足:

因此

这就把我们带到了

这一发现有助于评估系数β_ j 为零的零假设:我们可以计算 t-score

在零假设下,t_j 遵循具有 N-p-1 个自由度的 t 分布,而对于足够大的 N遵循正态分布。

计算这个分数可以帮助你评估零假设。例如,找到高于 1.96 的|t_j|分数将确保系数β_ j 不为空的 5%显著性。

您还可以计算给定系数的置信区间:近似的(1–2 * alpha)-置信区间由下式给出

我们使用标准正态曲线下的面积来计算:

我们还可以通过计算 F-stat 来检验假设,即每个系数都为零

在无效假设下,遵循 F(p,N-p-1)分布。因此,F 的大值构成了反对零假设的证据。

红利 1:我们为什么要做最小二乘法?

当我们寻找β的最优估计时,我们本能地跳到了最小二乘优化,但是为什么呢?首先,我们可以证明(我们不会在这里,查看这篇文章了解更多细节)最小二乘估计量是无偏的,即

接下来,实际上有一个定理证明最小二乘估计量具有最小方差。这就是高斯-马尔可夫定理:它表明最佳无偏估计量是最小二乘

加成 2:当 X⊤X 排名不全怎么办?

首先,我们来看看这是什么时候发生的。让我们提醒自己,X 的维数是(N,p+1)。那么 X⊤X 就是(p+1,p+1)。我们可以证明 X⊤X 是全排名的当且仅当 x 是排名 p+1, 这迫使 N > p 。这里可以看到证明。这意味着这些特征是线性独立的(但不一定不相关)。

当情况并非如此时(当我们的特征多于观察值时),我们可以使用收缩方法如岭回归。的确,当我们在 X⊤X 的对角线上增加一项时,问题就变得可行了。对于岭回归的例子:

有一个解决方案:

的确,因为 X⊤X,是正半定的,它的特征值都是正的,在对角线上加一个正项就使它全秩了。所以这使得问题非奇异。这就是我们必须对 p > > N 的情况应用正则化技术的原因之一

面向应用型自然语言处理工程师的心智模型:一张图中语言模型的 Tf-IDF

原文:https://towardsdatascience.com/all-you-need-to-know-about-nlp-based-predictive-modeling-in-one-diagram-7be3b547454a?source=collection_archive---------20-----------------------

理清 NLP 预测建模场景

Image credit: https://www.um.edu.mt

秘诀:5 分钟后你将成为职业选手,

  1. At 从自然语言数据集设计特征以构建经典的 ML 模型
  2. 在构建嵌入时,从复杂的自然语言数据集中学习酷的表示,以构建 DNN 模型。

NLP 作为一个领域正在以曲速前进。神经模型对 NLP 的干预的好处是,它在许多任务中推动了极限,但坏处是,它使试图进入该领域的新人的学习场景变得复杂。我觉得有义务通过分享我用来推理基于 NLP 的预测任务的心智模型来带来一些清晰。正如标题中所承诺的,我已经试图在一个单一的图表中传达我想要传达的一切,请将这个心智模型视为指南针,而不是地图。话虽如此,请注意这篇文章并不适合绝对的初学者。

在进入这篇文章的实质之前,请允许我设置一下背景,澄清一些术语的细微差别和覆盖范围。

术语

心智模型中将使用的术语的快速注释。

为了更容易理解,我特意使用了而不是文本或者“字符”或者“短语”作为下面心智模型中的战术单位,因为 a .语言是组合的,单词是最低的战术单位,可以有各种组合(与字符或其他任何东西相比); B:大多数 NLP 文献在讨论 NLP 问题和解决方案时都使用“单词”作为默认选择。单词 N-grams 可以表示一个单词(当 N=1 时为 1-gram 或 unigram)、一个单词对(当 N=2 时为 bigram)等等。这同样适用于 char N-grams。

嵌入:

虽然我们知道在机器学习中“嵌入”是一种奇特的说法,即一种获取原始文本数据并将其“嵌入”到向量空间中的技术。因为当在向量空间中呈现训练数据时,机器学习算法是“最快乐的”。原因并不奇怪:我们可以做向量数学或者计算向量之间的距离等等。 (承蒙:来自 Quora.com 的斯里达尔·马哈德万教授)

但是从另一个层面来说,学习嵌入只不过是学习底层文本语料库的表示。单词嵌入是一种上下文无关的嵌入或表示(这里的上下文是指语用上下文,而不是语义上下文),像 ELMo、BERT 这样的语言模型学习一种上下文相关的嵌入或表示。查看这个 G oogle BERT 帖子获得更多更深入的见解。

语义语境

“一个词由它的朋友来描述”——J . r .弗斯

语义上下文是一个记录良好的概念,但这里有一个快速回顾。语言是象征性的:单词汉堡包奶昔在语义上“食物”相关,但我们需要一种技术将这些知识输入机器。分布假说粗略地指出,出现在相似语境中的词往往具有相似的含义。因此,可以认为汉堡包和奶昔通常出现在文本语料库中的食物上下文中。这被称为语义上下文,算法需要找出语义相关性的概念。

语用语境(或用法语境)

语义语境忽略了所有的语用语境。我这么说是什么意思?让我们来考虑这个例子:他去监狱 牢房 用他的 牢房 手机去 牢房 提取犯人的血样 (礼貌用语:Ajit Rajasekharan考虑语义和语用上下文的嵌入将为单元的三个向量生成不同的向量。例如,第一个牢房(监狱牢房案件)更接近监禁、犯罪等词。而第二个“手机”(手机壳)更接近于 iPhone、android、galaxy 等词..**

覆盖范围

这个心智模型涵盖了所有基于 NLP 的预测任务,这些任务可以被构造为 N:1 监督学习任务,即输入是任意长度(N)的文本序列,输出是标签或分数。

这个心智模型不包括基于** NLP 的任务,这些任务采取 N: N 或 N: M 监督学习任务的形式,其中输入和输出分别是任意长度(N)的文本序列或任意长度 N 和 M 的输入和输出文本序列。例如,N: N 的最佳示例是序列标记(NER,词性),自动语音识别,N: M 的典型示例是机器翻译和文本摘要。**

故意遗漏

如果你仔细观察,我故意省略了数据清理和准备,因为它们是非常领域和任务特定的。因此,当您应用这个心智模型时,请确保您在正确的时间注入了适当的数据清理和准备技术。

心理模型

Image by the author

一些经验数据

您可以看到,对于较小的数据集,经典 ML 工作得很好,但对于较大的数据集,它们就逐渐消失了。

Image by the author (Screenshot from the research paper)

Image by the author (Screenshot from the research paper)

一些代码来玩

  1. TFiDF +逻辑回归,中等规模数据集
  2. 定制单词嵌入+ BiLSTM,小型数据集
  3. 定制单词嵌入+ CNN + BiLSTM,大型数据集

进一步阅读

  1. 更多关于语义、语用和句法的语境。
  2. 什么是语言模型?

关于 RNNs 你需要知道的

原文:https://towardsdatascience.com/all-you-need-to-know-about-rnns-e514f0b00c7c?source=collection_archive---------2-----------------------

TensorFlow 中 RNN 内部的实现和数据操作初学者指南

Photo by Laurent Naville on Unsplash

介绍

研究人员提出用神经网络来模拟人脑的行为。但是,如果你仔细想想,正常的神经网络并没有真正实现它的初衷。这种说法的原因是前馈香草神经网络不能记住它学习的东西。每次你训练网络的时候,它都是全新开始的,当你处理当前数据集的时候,它不会记得上一次迭代看到了什么。在识别相关性和数据模式时,这是一个很大的缺点。这就是递归神经网络(RNN)出现的原因。rnn 有一个非常独特的架构,可以帮助它们对存储单元(隐藏状态)进行建模,使它们能够保存数据,从而能够对短期依赖关系进行建模。由于这个原因,rnn 被广泛用于时间序列预测,以确定数据相关性和模式。

尽管 rnn 已经存在了一段时间,但每个人似乎都有自己令人困惑的方式来解释它的架构,没有人真正解释幕后发生了什么。所以让我们缩小差距,好吗?这篇文章旨在通过介绍 RNN 架构的功能,在更精细的层次上解释它。

这是给你的吗?

如果你以前曾盲目地使用 TensorFlow 制作简单的 RNN 模型,如果你发现很难理解 RNN 的内部工作原理,那么这篇文章就是为你准备的。

最终目标?

我们将基本上解释当这两行负责声明 RNN 和启动执行的张量流代码运行时,幕后发生了什么。

cell = tf.contrib.rnn.BasicRNNCell(rnn_size,activation=tf.nn.tanh)

val1, state = tf.nn.dynamic_rnn(cell, inputs, dtype=tf.float32)

RNN 建筑

如果您曾经搜索过关于 RNNs 的架构信息,如果您作为初学者开始研究它们,您可能会得到相当混乱的架构图。我将用一个例子来解释 RNN 架构。

在我们进入正题之前,需要注意的一件重要事情是,RNN 输入需要有 3 个维度。通常是批量大小、步骤数量和特征数量。步骤数描述了将输入到 RNN 的一批数据的一行输入中的时间步骤/时间段的数量。

张量流中的 RNN 单位被称为“RNN 单元”。这个名字本身就在人们中间造成了很多混乱。Stackoverflow 上有很多问题询问“RNN 细胞”是指一个单细胞还是整个层。嗯,更像是整层。其原因是 rnn 中的连接是循环的,因此遵循“自馈”方法。基本上,RNN 图层由单个卷起的 RNN 像元组成,该像元根据您提供的“步数”值(时间步长/时间段数)展开。

正如我们前面提到的,RNNs 的主要特点是建模短期依赖的能力。这是由于 RNN 的隐藏状态。它通过展开的 RNN 单位保留了从一个时间步到另一个时间步的信息。每个展开的 RNN 单元都有一个隐藏状态。当前时间步长的隐藏状态是使用先前时间步长的隐藏状态和当前输入的信息来计算的。在处理当前时间步长信息时,此过程有助于保留模型在先前时间步长中看到的信息。此外,需要注意的是,RNN 的所有关系都有权重和偏差。在某些架构中,偏置可以是可选的。这个过程将在本文的后面部分进一步解释。

既然你现在有了一个基本的想法,那就让我们用一个例子来分解一下执行过程。假设批量大小为 6,RNN 大小为 7,一条输入线中包含的时间步长/时间段数为 5,一个时间步长中的要素数为 3。如果是这种情况,一个批次的输入张量(矩阵)形状将如下所示:

一批的张量形状= (6,5,3)

批处理中的数据如下所示:

Fig 01 : Data representation inside a batch of data

注意:这里使用的数据分段方法称为滑动窗口方法,主要用于时间序列分析。这里不用担心数据预处理过程。

当第一次把数据输入 RNN 时。它将具有如下所示的滚动架构:

Fig 02: Rolled version of RNN

但是当 RNN 开始处理数据时,它将展开并产生如下所示的输出:

Fig 03: Unrolled version of RNN

处理一批:

当您将一批数据输入 RNN 单元格时,它会从输入的第一行开始处理。同样,RNN 单元将顺序处理被馈送的一批数据中的所有输入行,并在最后给出一个输出,该输出包括所有输入行的所有输出。

处理单行输入:

为了处理一行输入,RNN 单元展开“步数”次。你可以在上图中看到这一点(图 03)。由于我们将“步数”定义为 5,RNN 单元已经展开了 5 次。

执行过程如下:

  • 首先,将初始隐藏状态(S)乘以隐藏状态权重(h ),然后将隐藏状态偏差添加到结果中,初始隐藏状态(S)通常是零向量。同时,将时间步长 t ([1,2,3])处的输入和输入权重(I)相乘,并将输入偏差添加到该结果中。我们可以通过激活函数(通常为 tanh (f ))发送上述两个结果的相加来获得时间步长 t 的隐藏状态。

Fig 04: Hidden state calculation of time step t

  • 然后,为了获得时间步长 t 处的输出,将时间步长 t 处的隐藏状态(S)乘以时间步长 t 处的输出权重(O ),然后将输出偏差添加到结果中。

Fig 05: Output calculation of time step t

  • 当计算时间步长 t+1 处的隐藏状态时,时间步长 t 处的隐藏状态(S)乘以隐藏状态权重(h ),并且隐藏状态偏差被添加到结果中。然后,如前所述,时间步长 t+1 ([4,5,6])的输入将乘以输入权重(I),输入偏差将被添加到结果中。这两个结果将通过一个激活函数发送,通常是 tanh (f)。

Fig 06: Hidden state calculation of time step t+1

  • 然后,为了获得时间步长 t+1 处的输出,将时间步长 t+1 处的隐藏状态(S)乘以时间步长 t+1 处的输出权重(O ),然后将输出偏差添加到结果中。如你所见,当产生时间步长 t+1 的输出时,它不仅使用时间步长 t+1 的输入数据,还通过时间步长 t+1 的隐藏状态使用时间步长 t 的数据信息。

Fig 07: Output calculation of time step t+1

  • 这个过程将对所有时间步长重复

在处理完批处理中一行输入中的所有时间步骤后,我们将得到 shape (1,7)的 5 个输出。所以当所有这些输出连接在一起时。形状变成(1,5,7)。当批处理的所有输入行都处理完后,我们得到 6 个大小为(1,5,7)的输出。因此,整批的最终输出将是(6,5,7)。

注意:在 RNN 的所有连接中,所有隐藏状态权重、输出权重和输入权重具有相同的值。

回到我们之前提到的两行代码:

cell = tf.contrib.rnn.BasicRNNCell(rnn_size,activation=tf.nn.tanh)

val1, state = tf.nn.dynamic_rnn(cell, inputs, dtype=tf.float32)

第一行基本上定义了我们想要创建的 RNN 单元的激活函数和 RNN 大小。第二行通过将输入数据送入 RNN 来执行输入数据的处理程序。处理将根据我们之前讨论的内容进行。最后,该批的输出(shape (6,5,7)的值)将被赋给“val1”变量。隐藏状态的最终值将被赋给“state”变量。

我们现在已经到了文章的结尾。在本文中,我们讨论了 TensorFlow 中 RNN 内部的数据操作和表示过程。有了所有提供的信息,我希望现在你已经很好地理解了 rnn 在 TensorFlow 中是如何工作的。

有用的材料:

  • 关于 RNN 建筑的一般信息,你可以参考这篇文章
  • 要深入了解 RNN 的建筑,请参考这篇文章
  • RNN 的 Coursera 课程

关于自然语言处理和机器学习的文本预处理

原文:https://towardsdatascience.com/all-you-need-to-know-about-text-preprocessing-for-nlp-and-machine-learning-bc1c5765ff67?source=collection_archive---------4-----------------------

根据最近的一些对话,我意识到文本预处理是一个被严重忽视的话题。与我交谈过的一些人提到了他们的 NLP 应用程序的不一致的结果,但他们意识到他们没有对他们的文本进行预处理,或者对他们的项目使用了错误的文本预处理。

考虑到这一点,我想解释一下什么是文本预处理,文本预处理的不同方法,以及估计您可能需要多少预处理的方法。对于那些感兴趣的人,我也做了一些文本预处理代码片段供你尝试。现在,让我们开始吧!

什么是文本预处理?

对你的文本进行预处理简单地说就是把你的文本变成一种对你的任务来说 可预测可分析 的形式。这里的任务是方法和领域的结合。例如,用 tfidf (approach)从 Tweets (domain)中提取热门关键词就是一个任务的例子。

任务=方法+领域

一个任务的理想预处理可能成为另一个任务的噩梦。所以请注意:文本预处理不能直接从一个任务转移到另一个任务。

让我们举一个非常简单的例子,假设你正试图在一个新闻数据集中发现常用词。如果您的预处理步骤涉及删除停用词,因为其他任务使用了它,那么您可能会错过一些常用词,因为您已经删除了它们。所以真的,这不是一个放之四海而皆准的方法。

文本预处理技术的类型

有不同的方法来预处理你的文本。这里有一些你应该知道的方法,我会试着强调每种方法的重要性。

用小写字体书写

尽管经常被忽视,但是将文本数据全部小写是最简单也是最有效的文本预处理方式之一。它适用于大多数文本挖掘和 NLP 问题,在数据集不是很大的情况下会有所帮助,并对预期输出的一致性有很大帮助。

最近,我的一个博客读者训练了一个用于相似性查找的单词嵌入模型。他发现输入大写的不同变化(例如“canada”与“Canada”)给了他不同类型的输出或根本没有输出。这可能是因为数据集混合了单词“Canada”的大小写,并且没有足够的证据让神经网络有效地学习不太常见的版本的权重。当你的数据集很小时,这种类型的问题一定会发生,小写是处理稀疏性问题的一个很好的方法。

[## 如何开始使用 word 2 vec——然后如何让它工作

towardsdatascience.com](/how-to-get-started-with-word2vec-and-then-how-to-make-it-work-d0a2fca9dad3)

以下是小写如何解决稀疏性问题的示例,其中大小写不同的相同单词映射到相同的小写形式:

Word with different cases all map to the same lowercase form

小写非常有用的另一个例子是搜索。想象一下,你正在寻找包含“美国”的文档。但是,没有显示任何结果,因为“usa”被索引为“USA”。现在,我们该怪谁呢?设置界面的 U.I .设计师还是设置搜索索引的工程师?

虽然小写应该是标准做法,但我也遇到过保留大写很重要的情况。例如,预测源代码文件的编程语言。Java 中的单词System和 python 中的system有很大不同。两者的小写使得它们相同,导致分类器丢失重要的预测特征。虽然小写通常有帮助,但它可能不适用于所有任务。

堵塞物

词干化是将单词(如 troubled,trouble)中的词形变化减少到其词根形式(如 trouble)的过程。这种情况下的“根”可能不是真正的根词,而只是原词的规范形式。

词干提取使用一种粗略的启发式过程,即砍掉单词的词尾,希望能正确地将单词转换成其词根形式。所以单词“麻烦”、“困扰”和“麻烦”实际上可能被转换成troubl而不是trouble,因为末端被切掉了(啊,多么粗糙!).

词干提取有不同的算法。最常见的算法是 Porters 算法,这也是已知的对英语有效的经验算法。这里有一个波特·斯特梅尔的词干实例:

Effects of stemming inflected words

词干对于处理稀疏性问题以及标准化词汇表非常有用。特别是在搜索应用中,我在词干提取方面取得了成功。其想法是,如果说你搜索“深度学习班”,你也想表面文档提到“深度学习 ”以及“深度 班”,尽管后者听起来不太对。但是你知道我们要做什么。您希望匹配一个单词的所有变体,以显示最相关的文档。

然而,在我以前的大部分文本分类工作中,词干处理只能在一定程度上帮助提高分类精度,而不是使用更好的工程特征和文本丰富方法,如使用单词嵌入。

词汇化

表面上的词汇化与词干化非常相似,目标是去除词形变化并将单词映射到其词根形式。唯一的区别是,术语化试图以正确的方式来实现它。它不只是砍掉一些东西,它实际上是将单词转化为实际的词根。例如,单词“better”可以映射为“good”。它可以使用字典,比如用于映射的 WordNet,或者一些特殊的基于规则的方法。下面是一个使用基于 WordNet 的方法进行词汇化的例子:

Effects of Lemmatization with WordNet

根据我的经验,对于搜索和文本分类来说,词汇化并没有比词干化带来更大的好处。事实上,根据您选择的算法,与使用非常基本的词干分析器相比,它可能会慢得多,并且您可能必须知道所讨论的单词的词性才能获得正确的词条。本文发现,对于具有神经结构的文本分类,词条化对准确率没有显著影响。

我个人会谨慎地使用词汇化。额外的开销可能值得,也可能不值得。但是您可以尝试一下,看看它对您的性能指标有什么影响。

停用词删除

停用词是一种语言中的一组常用词。英语中停用词的例子有“a”、“the”、“is”、“are”等。使用停用词背后的直觉是,通过从文本中移除低信息量的词,我们可以专注于重要的词。

例如,在搜索系统的上下文中,如果您的搜索查询是“什么是文本预处理?”,你想让搜索系统关注那些谈论text preprocessing的文档,而不是谈论what is的文档。这可以通过阻止分析停用词表中的所有单词来实现。停用词通常应用于搜索系统、文本分类应用、主题建模、主题提取等。

根据我的经验,停用词去除虽然在搜索和主题提取系统中有效,但在分类系统中并不重要。然而,它确实有助于减少所考虑的特征的数量,这有助于保持您的模型大小合适。

下面是一个停用词删除的例子。所有的停用词都被替换为一个虚拟字符, W :

Sentence before and after stop word removal

停用词表可以来自预先建立的集合,或者您可以为您的域创建一个自定义列表。一些库(例如 sklearn)允许你删除出现在 X%的文档中的单词,这也可以给你一个停用词删除效果。

正常化

一个被高度忽视的预处理步骤是文本规范化。文本规范化是将文本转换成规范(标准)形式的过程。例如,单词“gooood”和“gud”可以转换为“good”,这是它的规范形式。另一个例子是将几乎相同的单词,如“停用词”、“停用词”和“停用词”映射到“停用词”。

文本规范化对于嘈杂的文本很重要,例如社交媒体评论、文本消息和博客帖子的评论,其中缩写、拼写错误和使用词汇外单词(oov)很普遍。这篇论文表明,通过对推文使用文本规范化策略,他们能够将情感分类准确率提高约 4%。

以下是标准化前后的单词示例:

Effects of Text Normalization

注意这些变化是如何映射到同一个标准形式的。

根据我的经验,文本规范化对于分析高度非结构化的临床文本非常有效,在这些文本中,医生以非标准的方式记笔记。我还发现它对于常见同义词和拼写差异的主题提取非常有用(例如,主题建模、主题建模、主题建模、主题建模)。

不幸的是,与词干化和词汇化不同,没有标准化文本的标准方法。这通常取决于任务。例如,规范化临床文本的方式可能与规范化 sms 文本消息的方式不同。

一些常见的文本规范化方法包括字典映射(最简单)、统计机器翻译(SMT)和基于拼写校正的方法。这篇有趣的文章比较了使用基于字典的方法和 SMT 方法来规范化文本消息。

噪声消除

去噪就是去除那些会干扰你文本分析的characters digitspieces of text。去噪是最基本的文本预处理步骤之一。它还高度依赖于领域。

例如,在推文中,噪音可以是除了标签以外的所有特殊字符,因为它表示可以表征推文的概念。噪音的问题在于,它会在您的下游任务中产生不一致的结果。让我们以下面的例子为例:

Stemming without Noise Removal

请注意,上面所有的原始单词都包含一些环境噪声。如果你对这些单词进行词干分析,你会发现词干分析的结果看起来不太好。它们都没有正确的词干。然而,通过在这款笔记本中应用一些清理,现在结果看起来好多了:

Stemming with Noise Removal

当涉及到文本挖掘和 NLP 时,去噪是你应该首先考虑的事情之一。有各种方法可以消除噪音。这包括标点符号删除特殊字符删除数字删除、html 格式删除、特定领域关键词删除 (例如,retweet 的“RT”)、源代码删除、标题删除等等。这完全取决于你在哪个领域工作,以及你的任务需要什么样的噪声。我的笔记本中的代码片段展示了如何做一些基本的噪声去除。

文本丰富/扩充

文本丰富包括用以前没有的信息来扩充原始文本数据。文本丰富为原始文本提供了更多的语义,从而提高了其预测能力和对数据进行分析的深度。

在信息检索示例中,扩展用户的查询以改善关键词的匹配是一种增强形式。类似于text mining的查询可能会变成text document mining analysis。虽然这对人类来说没有意义,但它可以帮助获取更相关的文档。

你可以在如何丰富你的文本方面变得很有创造力。您可以使用 词性标注 来获取文本中单词的更详细信息。

例如,在文档分类问题中,单词 book 作为名词出现可能导致与作为动词book 不同的分类,因为一个用于阅读的上下文,另一个用于预订某物的上下文。这篇文章讲述了如何利用名词和动词的组合作为输入特征来改进中文文本分类。

然而,随着大量文本的可用性,人们已经开始使用嵌入来丰富单词、短语和句子的含义,用于分类、搜索、摘要和一般的文本生成。在基于深度学习的 NLP 方法中尤其如此,其中单词级嵌入层非常常见。您可以从预先建立的嵌入开始,也可以创建自己的嵌入并在下游任务中使用。

丰富文本数据的其他方法包括短语提取,将复合词识别为一个单词(也称为分块)同义词扩展依存解析

那么…你需要全部做完吗?

不完全是,但是如果你想要好的、一致的结果,你确实必须做一些事情。为了给你一个最低限度应该是什么的概念,我已经把它分解为 必须做应该做任务依赖 。在决定你是否真的需要它之前,任何属于任务相关的东西都可以进行定量或定性的测试。

记住,少即是多,你要保持你的方法尽可能优雅。你增加的开销越多,当你遇到问题的时候,你需要剥离的层就越多。

必须做:

  • 噪声消除
  • 小写(在某些情况下可能取决于任务)

应该做:

  • 简单标准化—(例如,标准化相近的相同单词)

依赖于任务:

  1. 高级规范化(例如,处理词汇表之外的单词)
  2. 停用词删除
  3. 词干化/词汇化
  4. 文本丰富/扩充

因此,对于任何任务,你应该做的最起码的事情就是尝试小写你的文本并去除噪声。产生噪声的原因取决于您所在的领域(参见噪声消除部分)。你也可以做一些基本的标准化步骤以获得更多的一致性,然后系统地添加你认为合适的其他层。

一般经验法则

并非所有任务都需要相同级别的预处理。对于一些任务,你可以用最少的。然而,对于其他人来说,数据集是如此嘈杂,如果你没有足够的预处理,它将是垃圾进垃圾出。

这是一个通用的经验法则。这并不总是正确的,但在大多数情况下是可行的。如果您在一个相当一般的领域中有许多写得很好的文本要处理,那么预处理就不是非常关键了;你可以只做最少的事情(例如,使用所有维基百科文本或路透社新闻文章训练一个单词嵌入模型)。

然而,如果您在一个非常狭窄的领域中工作(例如,关于保健食品的 Tweets ),并且数据稀疏且嘈杂,那么您可以从更多的预处理图层中受益,尽管您添加的每个图层(例如,停用词移除、词干化、规范化)都需要作为有意义的图层进行定量或定性验证。下表总结了应该对文本数据执行多少预处理:

我希望这里的想法能够引导您走向项目的正确预处理步骤。记住,少即是多。我的一个朋友曾经向我提到,他是如何让一个大型的电子商务搜索系统变得更有效率,更少错误,仅仅是通过抛弃多层不需要的预处理。

[## 如何用 TF-IDF 和 Python 的 Scikit-Learn 从文本中提取关键词

早在 2006 年,当我不得不在 Java 中使用 TF-IDF 进行关键字提取时,我不得不从头开始编写所有的代码…

medium.com](https://medium.com/free-code-camp/how-to-extract-keywords-from-text-with-tf-idf-and-pythons-scikit-learn-b2a0f3d7e667) [## 工业实力自然语言处理

我职业生涯的大部分时间是作为一名研究生研究员,现在是该行业的一名数据科学家。一件事…

towardsdatascience.com](/industrial-strength-natural-language-processing-de2588b6b1ed)

资源

参考

卡维塔·加内桑是《人工智能的商业案例:人工智能战略领导者指南,最佳实践&现实世界应用 的作者。要了解更多关于卡维塔的信息,请访问www.kavita-ganesan.com

开始使用 GitHub 之前您需要知道的所有事情!

原文:https://towardsdatascience.com/all-you-need-to-know-before-starting-with-github-ada7cf62dae2?source=collection_archive---------31-----------------------

GitHub 无处不在。开发人员、数据科学家、数据工程师、统计学家、数据分析师都会在某个时候遇到 GitHub。

在本文中,我将为那些希望快速入门的人提供一个进入 GitHub 的快速入门。

什么是 GitHub?

GitHub 是一个平台,开发人员可以用它来同时开发同一个程序。底层程序称为 Git,它跟踪不同的版本,并支持不同人合并冲突的修改。

Git 是一个允许开发人员跟踪代码变化的程序。

举个例子,假设三个朋友有一个很棒的软件想法。他们都是程序员,他们希望能够同时做出贡献。代码没有“谷歌文档”,所以他们需要别的东西:这是他们需要 Git 允许同时处理相同代码的时候。

Git is the program that actually does the work

那么为什么需要 GitHub 呢?

GitHub 是一个通过 Git 共享代码的在线托管平台。Git 是一个命令行工具,GitHub 增加了一个优秀的 web 平台,可以在开发者之间共享,它还可以为你的代码提供外部备份。

GitHub 为 Git 添加了在线功能,并允许开发人员轻松共享项目。

例如,为了对开源软件做出贡献,开发人员经常使用 GitHub。通过使用 GitHub,你可以很容易地在网上找到开源项目的代码,并提出一个贡献。这里只有 Git 是不够的,因为您需要能够在线找到那些项目。GitHub 也使得提议捐款的方式变得更加顺畅。

GitHub is an online platform based on Git.

GitHub 入门需要什么?

装置

  1. 在你的电脑上安装 Git。这取决于你工作的平台,但是你可以很容易地在互联网上找到 Git for Windows,Mac 或 Linux。
  2. 你需要一个 GitHub 账户,可以在 GitHub.com 免费创建。
  3. 我建议安装 GitHub 桌面。这是一个图形用户界面,使得使用 Git 更加容易。如果使用 GitHub Desktop,不需要做任何命令行操作。

GitHub Desktop is a graphical user interface to Git

基本操作

我将列出 Git 最基本的命令/操作,并通过通俗的描述让您可以轻松入门:

  • 克隆:将 GitHub 上现有的代码文件夹(称为资源库)下载到你的本地计算机上,这样你就可以在上面工作了
  • 提交:当你在你的代码库中做了更改,你必须在上传到 GitHub 之前提交它
  • 推送:当你提交了你的修改,你就可以推送它们,这样它们就可以在 GitHub 上注册,这样潜在的合作者就可以看到它们了
  • 拉:当其他人正在处理相同的代码,并且他们已经提交了他们的变更,那么你的代码就不再是最新的版本了。要获得最新版本,您应该进行拉取

开始

在开始使用 GitHub 之前,我已经给出了您需要知道的所有信息。

我个人的建议是:首先使用本文中介绍的基本命令习惯使用 Git 和 GitHub。然后,当你觉得准备好了,开始寻找更高级的功能,例如,处理多人同时处理同一代码时发生的冲突变更。

最重要的是将所有这些付诸实践,并真正开始!

我绝对推荐从 这个非常基础的 GitHub 入门教程或者网上有的其他教程开始。

关于预处理,您想知道的是:数据准备

原文:https://towardsdatascience.com/all-you-want-to-know-about-preprocessing-data-preparation-b6c2866071d4?source=collection_archive---------8-----------------------

这是一个介绍部分,我们将讨论如何检查和准备您的数据进行进一步的预处理。

如今,几乎所有的 ML/数据挖掘项目工作流都在标准的CRISP-DM(数据挖掘的跨行业标准流程)或其 IBM enhance ASUM-DM(数据挖掘/预测分析的分析解决方案统一方法)上运行。该工作流程中最长也是最重要的步骤是数据准备/预处理,大约占时间的 70%。这一步很重要,因为在大多数情况下,客户提供的数据质量很差,或者不能直接提供给某种 ML 模型。关于数据预处理,我最喜欢的格言是:Garbage in, garbage out (GIGO)。换句话说,如果你给你的模型提供糟糕的数据,就不要指望它会有好的表现。在本帖中,我们将讨论:

  1. Data types
  2. Data validation
  3. Handling dates
  4. Handling nominal and ordinal categorical values

在接下来的文章中,我们将讨论更高级的预处理技术:

  1. 数据清洗和标准化:Normalization and standartizationHandling missing dataHandling outliers
  2. 特征选择和数据集平衡:Dataset balancingFeature extractionFeature selection

这一系列文章代表了通常的预处理流程顺序,但事实上,所有这些部分都是以独立的方式划分的,不需要了解前面部分的知识。

这是一个介绍部分,我们将讨论如何检查和准备您的数据进行进一步的预处理。

数据类型

首先,让我们定义存在哪些数据类型以及它们有哪些度量标准:

Numeric

  1. Discrete -整数值。示例:number of products bought in the shop
  2. Continuos -某个允许范围内的任何值(浮点型、双精度型)。示例:average length of words in text

Categorical

从预定数量的类别中选择的变量值

  1. Ordinal -类别可以有意义地排序。示例:grade (A, B, C, D, E, F)
  2. Nominal -类别没有任何顺序。示例:religion (Christian, Muslim, Hindu, etc.)
  3. Dichotomous/Binary -名词性的特例,只有 2 种可能的类别。示例:gender (male, female)

Date

字符串、python 日期时间、时间戳。示例:12.12.2012

Text

多维数据,更多关于文本预处理的内容见我之前的帖子

Images

多维数据,更多关于图像预处理的内容请见我的下一篇文章

Time series

按时间顺序索引的数据点,关于时间序列预处理的更多信息请见我的下一篇文章。

数据有效性

第一步是最简单也是最明显的:你必须调查和验证你的数据。为了能够验证数据,您必须对您的数据有深入的了解。简单规则:Don't dismiss the description of the dataset。验证步骤包括:

Data type and data representation consistency check

同样的东西必须以同样的方式和同样的格式来表现。示例:

  1. 日期具有相同的格式。在我的实践中,有几次我得到了一部分日期是美国格式,另一部分是欧洲格式的数据。
  2. 整数是真正的整数,不是字符串或浮点数
  3. 分类数据没有重复,因为有空格、小写/大写字母
  4. 其他数据表示不包含错误

Data domain check

数据在允许值范围内。示例:数值变量在允许的(最小,最大)范围内。

Data integrity check

检查允许的关系和约束的履行情况。示例:

  1. 核对姓名头衔和性别,出生年龄和年龄
  2. 历史资料有正确的年表。购买后交货、首次付款前银行开户等。
  3. 这些动作是由被允许的实体做出的。抵押贷款只能批准给 18 岁以上的人,等等。

好的,我们发现了一些错误,我们能做什么?

  1. Correct如果您确定问题出在哪里,请咨询专家或数据提供商。
  2. Discard有误差的样品,在很多情况下这是一个很好的选择,因为你无法满足 1。
  3. Do nothing,这当然会对以后的步骤造成不良影响。

处理日期

不同的系统以不同的格式存储日期:11.12.20192016-02-12Sep 24, 2003等。但是为了在日期数据上建立模型,我们需要以某种方式将其转换成数字格式。

首先,我将向您展示一个如何将日期字符串转换成 python datetime type的示例,这对于后续步骤来说要方便得多。该示例在 pandas 数据框架上演示。让我们假设date_string列包含字符串形式的日期:

# Converts date string column to python datetime type
# `infer_datetime_format=True` says method to guess date format from stringdf['datetime'] = pd.to_datetime(df['date_string'], infer_datetime_format=True)# Converts date string column to python datetime type
# `format` argument specifies the format of date to parse, fails on errorsdf['datetime'] = pd.to_datetime(df['date_string'], format='%Y.%m.%d')

通常,仅仅年份(YYYY)就足够了。但是如果我们想要存储月、日甚至更详细的数据,我们的数字格式必须满足 1 个充分的约束,它必须保存间隔,这意味着,例如,一周中的星期一-星期五必须具有与 1 相同的差值。— 5.任何一个月。所以YYYYMMDD格式将不是一个选项,因为一个月的最后一天和下个月的第一天比一个月的第一天和第二天有更大的距离。实际上,将日期转换为数字格式有 4 种最常见的方法:

Unix timestamp

自 1970 年以来的秒数

优点:

  1. 完美保留音程
  2. 如果小时、分钟和秒很重要,那就好

缺点:

  1. 价值不明显
  2. 不要帮助直觉和知识发现
  3. 越难验证,越容易出错

在 pandas 中将datetime列转换为时间戳:

# Coverts column in python datetime type to timestamp
df['timestamp'] = df['datetime'].values.astype(np.int64) // 10 ** 9

KSP date format

优点:

  1. 年份和季度很明显
  2. 简单的直觉和知识发现
  3. 可以扩展到包括时间

缺点:

  1. 保留间隔(几乎)

在 pandas 中将python datetime列转换为 KSP 格式:

import datetime as dt
import calendardef to_ksp_format(datetime):
    year = datetime.year
    day_from_jan_1 = (datetime - dt.datetime(year, 1, 1)).days
    is_leap_year = int(calendar.isleap(year))
    return year + (day_from_jan_1 - 0.5) / (365 + is_leap_year)df['ksp_date'] = df['datetime'].apply(to_ksp_format)

Divide into several features

年、月、日等。

缺点:

  1. 完美保留音程
  2. 简单的直觉和知识发现

优点:

  1. 你增加的维度越多,你的模型就越复杂,但这并不总是坏事。

Construct new feature

基于日期要素构建新要素。例如:

date of birth->-age

date order createddate order delivered->-。

缺点:

  1. 简单的直觉和知识发现

优点:

  1. 手动构建特征可能会导致重要信息丢失

处理分类值

闪回:Categorical -从预定义数量的类别中选择的变量值。与任何其他非数字类型一样,分类值也必须转换为数字值。怎么做才是对的?

Ordinal

类别可以有意义地排序。可以转换成数值,保留其自然顺序。等级:A+ - 4.0A- - 3.7B+ - 3.3B - 3.0等。

熊猫示范:

grades = {
    'A+': 4.0,
    'A-': 3.7,
    'B+': 3.3,
    'B' : 3.0
}
df['grade_numeric'] = df['grade'].apply(lambda x: grades[x])

Dichotomous/Binary

只有两种可能。在这种情况下,您可以将值转换成指标值1/0。比如:Male - 1或者Female - 0,也可以反过来做。

熊猫示范:

df['gender_indicator'] = df['gender'].apply(lambda x: int(x.lower() == 'Male'))

Nominal

所有可能类别中的一个或多个。在这种情况下,必须使用One hot encoding。该方法假设为每个类别创建一个指标值(1 -样本在类别中,0 -如果不在)。该方法也适用于Dichotomous/Binary分类值。永远不要对名义值使用序数表示法,这会导致可怕的副作用,你的模型将无法以正确的方式处理分类特征。

熊猫示范:

# Pandas `.get_dummies()` method
df = pd.concat([df, pd.get_dummies(df['category'], prefix='category')],axis=1)# now drop the original 'category' column (you don't need it anymore)
df.drop(['category'],axis=1, inplace=True)

sklearn 和熊猫中的演示:

from sklearn.preprocessing import LabelEncoder, OneHotEncoderprefix = 'category'ohe = OneHotEncoder(sparse=False)
ohe = ohe.fit(df[['category']])
onehot_encoded = ohe.transform(df[['category']])features_names_prefixed = [ f"{prefix}_{category}" for category in onehot_encoder.categories_[0]]df = pd.concat([df, pd.DataFrame(onehot_encoded, columns=features_names_prefixed)], axis=1)# now drop the original 'category' column (you don't need it anymore)
df.drop(['category'],axis=1, inplace=True)

我希望你会喜欢我的帖子。欢迎在评论中提问。

P.S .这些都是非常非常基础简单的东西,但是在实践中非常重要。更多有趣的东西将会在接下来的帖子中出现!

用 AllenNLP 开始你的 NLP 项目的温和指南

原文:https://towardsdatascience.com/allennlp-startup-guide-24ffd773cd5b?source=collection_archive---------11-----------------------

跟你乱七八糟的代码说再见吧!

Photo by Jamie Templeton on Unsplash

你知道图书馆吗?如果你从事自然语言处理(NLP),你可能会听说过这个名字。不过,我估计有几个人真的在用。或者其他人以前尝试过,但不知道从哪里开始,因为有很多功能。对于那些不熟悉 AllenNLP 的人,我将简要介绍一下这个库,并让您了解将它集成到您的项目中的优势。

AllenNLP 是 NLP 的深度学习库。艾伦人工智能研究所,人工智能的领先研究组织之一,开发了这个基于 PyTorch 的库。使用 AllenNLP 开发一个模型比 PyTorch 从头开始构建一个模型要容易得多。它不仅提供了更容易的开发,而且支持实验的管理和开发后的评估。 AllenNLP 的特点是专注于研发。更具体地说,有可能快速原型化模型,并使更容易管理具有许多不同参数的实验。此外,它还考虑使用可读的变量名。

我们可能有过从零开始编码而得到混乱的代码或丢失重要实验结果的经历。

When I’ve got to know AllenNLP

在 AllenNLP 中,我们应该遵循下面的开发和实验流程。

Comparison between the typical process and the process with AllenNLP

根据你自己的研究项目,你只需要实现 DatasetReader 和 Model,然后用配置文件运行你的各种实验。基本上,我们需要了解以下三个特性,以便开始我们的 AllenNLP 项目

  1. 定义 DatasetReader
  2. 定义您的模型
  3. 设置您的配置文件

换句话说,一旦你理解了它,你就能够进行可伸缩的开发。在这篇文章中,我将通过处理情感分析任务来解释上述三个关键特征。此外,您可以在 post 中使用如下方式检查代码:

[## yasufumy/allennlp_imdb

最简单的 AllenNLP 食谱。在 GitHub 上创建一个帐户,为 yasufumy/allennlp_imdb 的开发做出贡献。

github.com](https://github.com/yasufumy/allennlp_imdb)

我们开始吧!

0.快速回顾:情绪分析

在这里,我将为那些不熟悉的人解释情感分析任务的基础。所以如果你已经很了解它,请继续下一部分:1。定义 DatasetReader。

情感分析是一项尝试对给定文档的极性(积极或消极)进行分类的任务。在本帖中,我们使用 IMDB 中的电影评论作为给定文档。例如,我们将在复仇者联盟 4:终局之战的用户评论中找到正面和负面评论。这一次,我们将使用下面链接中提供的数据集。

[## 情感分析

这是一个用于二元情感分类的数据集,包含的数据比以前的基准测试多得多…

ai.stanford.edu](https://ai.stanford.edu/~amaas/data/sentiment/)

我们将构建模型,将文档(评论)作为输入,预测标签(极性)作为输出。我们应该准备文档和标签对作为数据集。

1.定义 DatasetReader

下图显示了 AllenNLP 中的 DatasetReader 类。这个类主要处理任务中使用的数据。

DatasetReader 将原始数据集作为输入,并应用预处理,如小写、标记化等。最后,它输出实例对象的列表,该列表将预处理后的每个数据作为属性保存。在本文中,实例对象将文档和标签信息作为属性。

首先,我们应该继承 DatasetReader 类来创建自己的类。然后我们需要实现三个方法:__init___readtext_to_instance。所以让我们看看如何实现我们自己的 DatasetReader。我将跳过read方法的实现,因为它与 AllenNLP 的用法没有太大关系。但是如果你对它感兴趣,你可以参考这个链接。

实现__init__将如下所示。我们可以通过配置文件控制这个方法的参数。

@DatasetReader.register('imdb')
ImdbDatasetReader(DatasetReaer):
  def __init__(self, token_indexers, tokenizer):
    self._tokenizer = tokenizer
    self._token_indexers = token_indexers

在这篇文章中,我将token_indexerstokenizer设置为参数,因为我假设我们在实验中改变了索引或标记化的方式。token_indexers执行索引,tokenizer执行标记化。我实现的类有装饰器 ( DatasetReader.register('imdb')),这使我们能够通过配置文件来控制它。

实现text_to_instance将如下。这个方法是 DatasetReader 的主进程。text_to_instance将每个原始数据作为输入,应用一些预处理,并将每个原始数据作为一个Instance输出。在 IMDB 中,它将检查字符串和极性标签作为输入。

@DatasetReader.register('imdb')
ImdbDatasetReader(DatasetReaer):
    ...
  def text_to_instance(self, string: str, label: int) -> Instance:
    fields = {}
    tokens = self._tokenizer.tokenize(string)
    fields['tokens'] = TextField(tokens, self._token_indexers)
    fields['label'] = LabelField(label, skip_indexing=True)
    return Instance(fields)

在 AllenNLP 中,实例的属性对应于字段。我们可以从字段字典中创建实例。实例的属性代表每个数据,就像文档或标签一样。在 IMDB 中,实例散列两个属性:review 和 label。评论和标签分别对应于 TextField 和 LabelField。

上面提到的是定义我们的 DatasetReader 的方法。你可以从这个链接查阅整个代码。

2.定义您的模型

下图显示了 AllenNLP 中的模型类。这个类主要是建立模型来解决任务。

该模型将数据作为输入,并将正向计算的结果和评估指标作为字典输出。

首先,我们应该继承模型类来创建我们自己的模型类。然后我们需要实现三个方法:__init__forwardget_metrics。这里,我们使用递归神经网络(RNN)实现 IMDB 评论的极性分类模型。

实施__init__将如下。我们可以通过与 DatasetReader 相同的配置文件来控制该方法的参数。

@Model.register('rnn_classifier')
class RnnClassifier(Model):    
def __init__(self, vocab, text_field_embedder,
             seq2vec_encoder, label_namespace):
  super().__init__(vocab)self._text_field_embedder = text_field_embedder
  self._seq2vec_encoder = seq2vec_encoder
  self._classifier_input_dim = self._seq2vec_encoder.get_output_dim()
  self._num_labels = vocab.get_vocab_size(namespace=label_namespace)self._classification_layer = nn.Linear(self._classifier_input_dim, self._num_labels)
  self._accuracy = CategoricalAccuracy()
  self._loss = nn.CrossEntropyLoss()

在这篇文章中,我将text_field_embedderseq2vec_encoder设为自变量,因为我假设我们在实验中改变了嵌入或 RNN 类型的方式。text_field_embedder将令牌作为向量嵌入,seq2vec_encoder用 RNN 对令牌序列进行编码(从技术上讲,除了 RNN,您可以使用其他类型)。我实现的类有装饰器(Model.register('rnn_classifier')),这使我们能够通过配置文件来控制它。

forward的实现如下。这种方法是建模的主要过程。forward将数据作为输入,通过正向计算进行计算,并将预测标签和评估指标的结果作为字典输出。大多数实现与 PyTorch 的方式相同。但是,请注意,我们应该将结果作为字典返回。

def forward(self, tokens, label=None):
  embedded_text = self._text_field_embedder(tokens)
  mask = get_text_field_mask(tokens).float()encoded_text = self._dropout(self._seq2vec_encoder(embedded_text, mask=mask))logits = self._classification_layer(encoded_text)
  probs = F.softmax(logits, dim=1)output_dict = {'logits': logits, 'probs': probs}if label is not None:
    loss = self._loss(logits, label.long().view(-1))
    output_dict['loss'] = loss
    self._accuracy(logits, label)return output_dict

上面的实现计算极性、交叉熵损失和准确度的分类概率。我们通过 softmax 从 RNN 的输出计算分类概率。此外,如果标签给定,我们计算模型的分类精度。最后,它输出每个计算结果作为字典(output_dict)。

实现get_metrics将如下所示。

def get_metrics(self, reset=False):
  return {'accuracy': self._accuracy.get_metric(reset)}

它将精度值作为字典返回。这是因为这次我们使用模型的准确性作为衡量标准。我们可以在get_metrics方法中使用多个值。

上面提到的是我们定义模型的方式。你可以从这个链接查阅整个代码。

3.设置您的配置文件

下图显示了如何在 AllenNLP 中运行我们的实验。我们可以通过将配置文件传递给allennlp train命令来运行我们的实验。

我将解释如何制作配置文件来控制我们的实验。我们可以通过下面的命令用 GUI 界面制作配置文件。但是为了更好的理解,我将从头开始解释。

allennlp configure --include-package allennlp_imdb

配置文件主要由dataset_reader字段、model字段和trainer字段组成。

{
  "dataset_reader": {...},
  "model": {...},
  "trainer": {...}
}

dataset_reader字段和model字段分别指定 DatasetReader 的设置和我们到目前为止实现的模型。另外,trainer字段指定了优化器、时期数和设备(CPU/GPU)的设置。你可以从这个链接查阅整个配置文件。接下来,我将分别解释这三个字段的重要部分。

DatasetReader 的设置如下。

"dataset_reader": {
  "type": "imdb",
  "token_indexers": {
    "tokens": {
      "type": "single_id"
    }
  },
  "tokenizer": {
    "type": "word"
  }
}

首先,我们指定在type中使用哪个 DatasetReader。我们可以使用 ImdbDatasetReader 将type设置为imdb,因为它已经准备好供@DatasetReader.register('imdb')使用。AllenNLP 已经提供了许多流行的数据集。你可以从文档中查看这些。

然后,我们为ImdbDatasetReader.__init__方法指定参数。我们使用[SingleIdTokenIndexer](https://github.com/allenai/allennlp/blob/master/allennlp/data/token_indexers/single_id_token_indexer.py#L12)表示token_indexers,因为我们希望令牌对应于单个 id。此外,我们使用[WordTokenizer](https://github.com/allenai/allennlp/blob/master/allennlp/data/tokenizers/word_tokenizer.py#L12)来表示tokenizer,因为我们希望令牌是一个单词。

模型的设置如下。

"model": {
  "type": "rnn_classifier",
  "text_field_embedder": {
    "token_embedders": {
      "type": "embedding",
      ...
    }
  },
  "seq2vec_encoder": {
    "type": "gru",
    ...
  }
}

首先,我们指定在type中使用哪个模型,与 DatasetReader 相同。我们可以使用 RnnClassifier 将type设置为rnn_classifier,因为它已经准备好供@Model.register('rnn_classifier')使用。

然后,我们为RnnClassifier.__init__方法指定参数。我们使用[Embedding](https://allenai.github.io/allennlp-docs/api/allennlp.modules.token_embedders.html#embedding)来表示text_field_embedder,因为我们希望将单词作为向量嵌入。此外,我们用[GRU](https://allenai.github.io/allennlp-docs/api/allennlp.modules.seq2vec_encoders.html)代替seq2vec_encoder,因为我们想通过 GRU 对嵌入的单词序列进行编码。

训练器的设置如下。

"trainer": {
  "num_epochs": 10,
  "optimizer": {
    "type": "adam"
  }
}

num_epochs指定要训练的时期数。optimizer指定优化器更新参数,在这种情况下,我们选择使用adam

上面提到的是建立你的配置文件的方法。

我们可以通过执行以下命令来运行实验:

allennlp train \
    --include-package allennlp_imdb \
    -s /path/to/storage \
    -o '{"trainer": {"cuda_device": 0}} \
    training_config/base_cpu.jsonnet

当我们想改变实验设置时,我们需要创建新的配置文件。但是如果变化很小,我们可以通过下面的命令来改变设置。下面的命令将 GRU 更新为 LSTM。

allennlp train \
    --include-package allennlp_imdb \
    -s /path/to/storage \
    -o '{"trainer": {"cuda_device": 0}} \
    -o '{"model": {"seq2vec_encoder": {"type": "lstm"}}}' \
    training_config/base_cpu.jsonnet

解释到此为止。谢谢你看我的帖子。我希望您了解如何在 AllenNLP 中构建您的数据加载器、建模和管理您的实验。

使用数据科学和定量分析的 Alpha 生成— ABS / TALF

原文:https://towardsdatascience.com/alpha-generation-using-data-science-quantitative-analysis-abs-talf-part-1-eade08b075c?source=collection_archive---------13-----------------------

我喜欢一次性的“异国情调”交易。他们一般人是看不到的,看到一个,机会就没了。或者有人在教科书或类似的文章中了解到。幸运的是,我发现了一次性交易的存在;但对我来说不幸的是,很多时候我不能将我的资本完全投入到这些机会中。

在这篇文章中,我将解释我如何使用数据科学和金融量化分析来评估一个独特的机会,这个机会在 2008 年金融危机后实现了,我在 2009 年离开巴克莱后试图为此筹集资金。这个机会为拥有技术诀窍并能承诺至少 1000 万美元的投资者带来了惊人的回报。

在第二部分中,我将通过以下方式,以简单的方式展示我是如何评估这笔交易的:

  1. 对几种资产支持证券的信用利差建模,考虑它们的历史相关性,并使用自动回归模型
  2. 模拟在一段固定时间内购买固定收益工具,并持有至到期,其回报与伦敦银行同业拆放利率加信用利差挂钩。
  3. 计算在“无损失”的情况下,使用美联储的“无追索权”贷款投资此类工具的杠杆回报。
  4. 模拟买入或卖出的固定收入工具的信贷质量的改善和/或恶化(信贷迁移)。使用单周期马尔可夫模型。
  5. 通过衡量从初始评级“AAA”到“D”评级的转变,并考虑到向“AA”、“A”、“BBB”、“BB”或“B”的变化,模拟投资组合中的损失;将马尔可夫模型扩展到多周期。
  6. 计算投资组合的预期年回报率的分布。
  7. 计算在任何阈值下产生收益的概率。

After all the background information, in part II of this post, you’ll be able to analyze one of the best financial opportunities that was generated as a consequence of the financial crisis of 2008.

作为一名数据科学家/定量分析师,我有 1)实际的量化金融背景和 2)金融危机的第一手见证人,很多人问我:a)是什么造成了金融危机?贪婪?错误的算法?b)为什么雷曼兄弟和银行家信托会被允许破产?c)在金融和保险领域,数据科学和定量分析在哪里共存?

由于我的实际专业知识仅限于金融和保险的一个子集,在本文和后续文章中,我将尝试说明我实际参与的交易,以及我使用数据科学结合金融定量分析和一些精算模型进行评估的情况。

还有许多类似的相关问题,有人通过电子邮件,甚至是我在 PyCon 做主题演讲时,亲自问过我。但没有人问我危机带来的机遇,对我来说,这是一个和其他人一样好的问题,其答案取决于你的专业知识和对模型结果采取行动的能力。

What are Tensors? What role Gaussian Copulas played in the financial crisis and in the bankruptcy of Lehman? Definitely, not the typical questions you get asked at PyCon. (Picture: PyCon HK PyCon Asia & the Pacific 2017).

领域专长比机器学习技能更重要吗?两个都怎么样?

我坚信,没有领域专业知识的数据科学、机器学习和人工智能的应用,对于开始使用这些工具(至少在金融、保险或相关领域)的公司和组织来说是一个严重的障碍,并且直接从学术界雇用人才,而不接触现实生活中的问题。领域专家不一定与技术方面相关,但对特定行业、行业发展状况、趋势以及影响行业的因素有深入的了解。

不要误解我,我喜欢现在用 TensorFlow 2.0 和 Keras 建立模型是多么容易(是的,现在 TF 完全是 Keras,阅读 Cassie Kozyrkov 的帖子这里,迫不及待地开始玩 Alpha 版本),而不是像我在 1993 年第一次为对冲基金工作时那样从头开始开发神经网络。但是如果你知道工具,拥有领域专业知识仍然会给你一个超越普通数据科学家的巨大优势。

Not all data scientists / quants are equal: the different types of data scientists

在我有机会参加的 2012 年加州圣克拉拉的 Strata 会议上,行业专家之间进行了一场“数据科学辩论”,当时的共识是,在数据科学中,领域专业知识比机器学习技能更重要。然而,快速迭代可能会减少拥有领域专业知识的一些优势,但是领域专业知识和快速迭代是无与伦比的,尤其是在需要快速行动的金融环境中。

我见过一些顶尖的硅谷数据科学家在金融和保险问题上失败了,而在这些问题上,一个中等水平的华尔街定量分析师会做得很好。在我目前的咨询实践中,我见过一些目标非常明确的公司将错误类型的数据科学家与该角色的期望相匹配。

Cassie Kozyrkov: “Hope is not a strategy. Just hoping that you hire a researcher and they transcends into the applied stuff..ah..that’s a very risky proposition there”

在金融领域,基本上有四种量化分析师:算法交易量化分析师、前台办公量化分析师、研究员量化分析师和开发者量化分析师。在数据科学中也有 4 种基本类型:商业数据科学家、创造性数据科学家、开发人员数据科学家和研究人员数据科学家。常见的误解是,“研究型数据科学家”(通常像“研究型数据科学家”(researcher quant)一样,拥有令人印象深刻的学术证书但几乎没有实际专业知识的博士)可以在商业环境中完成所有工作,而实际上,与其他类型的数据科学家进行团队合作是必要的。最近看了一个很优秀的视频,卡西·科济尔科夫谈到了这个问题。

事实上,一个博士“研究员量化”(同样相当于对冲基金和金融巨头在招聘时青睐的“研究员数据科学家”)可能在不知不觉中成为了金融危机的最大单一贡献者,通过他开发的算法,因为它促进了业务,所以迅速蔓延到整个行业。

什么是阿尔法?

由于本文的标题陈述了 alpha 生成,为了对金融领域没有专业知识的读者的利益,让我们定义 alpha 和其他术语。

Alpha 是对一项投资的积极回报的衡量,即该投资与基准(市场)相比的表现。1%的 alpha 值意味着在一段选定的时间内,投资的投资回报率比同期的市场回报率高 1%;负阿尔法值意味着投资表现低于市场。Alpha 和 beta 是现代投资组合理论中使用的资本资产定价模型的两个关键系数之一,与标准差、R 平方和夏普比率等其他重要指标密切相关。从历史上看,绝大多数传统基金都有负阿尔法值,这导致了资本向指数基金和非传统对冲基金的外逃。(你为什么要向一个连市场/行业指数都达不到的人付费呢?)

解释完之后,让我们深入了解一些背景信息。

交易之一:定期资产贷款机制(TALF)

《韦氏词典》将“一次性”定义为“仅限于单一时间、场合或实例:一次性”。TALF 就是这种一次性交易之一,由美国美联储创建,旨在缓解金融危机带来的问题。

TALF 计划创建于 2008 年 11 月,旨在刺激消费者支出,以帮助启动经济。这是通过发行资产支持证券实现的。这些证券的抵押品包括汽车(轿车、卡车)贷款、学生贷款、信用卡贷款、设备贷款、保险费融资贷款、小企业管理局担保的贷款、住房抵押贷款或商业抵押贷款。这些贷款的支持来自纽约美联储银行提供的资金。

根据《TALF 协议》,美联储宣布将在 无追索权 基础上向由新老证券支持的合格 AAA 级资产支持证券持有者提供高达 1 万亿美元的贷款。美联储发放的贷款金额等于资产支持型证券的市场价值,减去一个 削发 ,这些贷款在任何时候都由资产支持型证券本身担保。简而言之,你可以用从美联储借来的高达 95%的钱以极低的利率购买某些证券,如果证券表现不如预期,或者没有产生足够的现金来支付美联储贷款的利息,你就不欠他们任何东西。

TALF 的机会是独一无二的,因为美国的金融和监管限制最初不允许投资银行(如高盛等)积极参与这一机会。

对于不受政府约束的高净值个人和少数机构投资者来说,这种机会等于零,但是,很少有人能够足够快地抓住这种机会,因为大多数金融界人士对这些类型的工具并不十分了解。

在一个人为创造的低风险环境中,TALF 让那些拥有专门知识和资金的人能够获得高于平均水平的回报,投资于某些类型的证券。

要理解 TALF,我们首先需要了解什么是资产支持证券,以及我们在 2007 年至 2009 年期间的定位,当时金融危机之前的宏观事件导致了危机本身(当时,我正积极试图筹集资金以利用上述机会)。)

什么是资产支持证券?

资产支持型证券是一种被广泛接受的结构性债务形式,完全由一个独立资产池的现金流来偿还。

虽然证券化市场传统上包括消费者和商业资产,如汽车贷款、信用卡应收账款、抵押贷款和设备租赁,但该市场也容纳了深奥的风险,如项目融资资产、自然灾害、人为灾难(恐怖袭击)、人寿理赔以及版税和知识产权资产。

在基本证券化中,资产由一个实体(“发起人”)出售给一个远离破产的特殊目的载体(“SPV”),通常在离岸管辖区设立。然后,特殊目的机构向资本市场发行债券,债券的还本付息与资产的表现挂钩。通过债券发行获得的收益通过 SPV 传递给发起人(参见图 1 中一个假设的 10 亿美元证券化的例子)。

由于资产是由发起人出售给特殊目的机构的,资产支持证券并不代表发起人资产负债表上的负债,交易被记录为“真实出售”。

Figure 1: A template for a $1bn UDS securitization

一旦债券被收回,剩余的资产将归还给发起人。

公司债券和资产支持证券有什么区别?

公司债券是由公司发行的债券。公司在债券市场借钱以扩大业务或资助新的商业风险,它们可以大致分为两类:投资级和投机级(也称为高收益或“垃圾”)债券。投机级债券是由被认为比评级更高的投资级公司信用质量更低、违约风险更高的公司发行的。债券的质量由 评级机构 评级,评级范围一般从“AAA”(优质),到“D”(违约)。

公司债券的信用评级是发行债券的公司特征的函数,它被转化为公司偿还债务的概率。

在证券化中,结构性债务仅由来自孤立资产池的现金流偿还。债务评级以及与债务相关的利率是基于资产质量和结构设计的特征。

资产支持证券(ABS) 是一种证券,其收入支付和价值来自特定的基础资产池或由特定的基础资产池支持。资产池通常是一组不能单独出售的小额非流动资产。将资产汇集成金融工具使它们能够出售给一般投资者,这一过程称为证券化,并使投资基础资产的风险分散化,因为每种证券将代表基础资产多样化池总价值的一小部分。

基础资产池可以包括信用卡的普通付款、汽车和商业车队贷款、抵押贷款、来自飞机租赁的神秘现金流、版税付款和电影收入等。与公司和政府债券一样,摊销型资产支持证券通常根据其平均寿命而不是其规定的到期日进行出售和交易。平均寿命是一个资金池中的每一美元本金预期未偿还的平均时间长度。

资产支持型证券的信用评级是支持债券的资金池特征的函数,它被转化为金融机构支付其债务的概率。

有几十年的统计数据反映了债券在其生命周期内被提升至更高评级的概率,以及被降级的概率。这种统计称为信用迁移概率(见图 2)。然而,并非所有类型的证券都具有相同的信用迁移模式。

Figure 2: Observed 1 year credit migration for Asset “X”

对于公司债券和 ABS 债券,如果发行人或资金池的信用质量恶化,评级可能会被下调;如果基本面改善,评级可能会被上调。投资级债券(AAA、AA、A、BBB)迁移到非投资级(低于 BBB 的任何级别)被称为“堕落天使”。

Figure 3: In September 2015, the US Environmental Protection Agency issued a notice of violation that Volkswagen (VW) had installed diesel engine software to circumvent the emission standards of the Clean Air Act. ABS showed a high degree of resiliency in this specific case of risk for the VW.

尽管 AAA 级公司债券与 AAA 级资产支持型证券(资产来源于同一家公司)的风险/回报之间存在一定的相关性,但这种关系有时会被打破,因为 AAA 级公司的风险高于 AAA 级资产支持型证券,反之亦然,如图 3 所示。

早在 2000 年代中期,像我这样的销售方前端办公室定量分析师不必开发定制模型来为客户的资产池定价。然而,我们需要遵守“房间里最聪明的人”设定的模型和准则,这些博士定量分析师开发了软件和分析,每个人都在盲目地使用这些软件和分析来为这些工具定价,这基本上是在传播隐藏的风险。

其中一个最聪明的人是中国量化分析师“摇滚明星”大卫 x 李。突然间,他被卷入了高级金融领域,实际上是直接从学术界出来的,几乎没有什么领域的专业知识。David 拥有经济学硕士、精算学硕士、工商管理硕士(MBA)和统计学博士学位,此外他还是一名熟练的程序员。

David X. Li, PhD. Had David been involved in the practical side of finance as opposed to the research side, he would have seen that his paper in the wrong hands had serious implications. His model represented an over simplification of the world, and did not handle tail risk at all.

摩根大通几乎痴迷于从顶尖大学聘请顶尖的定量分析师,它聘请了 David Li 到其风险分析部门工作。在那里,他在《固定收益杂志》上发表了一篇题为“违约相关性:Copula 函数方法”的论文

利用一些相对简单的数学方法,我敢说是天真的,李提出了一种简化的方法来模拟违约相关性,甚至没有查看历史违约数据。他的模型和附带的分析因其实施简单而被广泛使用。危机发生多年后,大卫的博士导师说:“这是一个几乎任何人都可以使用的非常简单的数学答案,当你有一把锤子时,一切突然看起来像钉子”。华尔街抓住了这个机会。

This equation killed many 401Ks

然而,像我这样的一些前端办公室的定量分析师对这种“罐装”模型不满意,这种模型没有处理尾部风险,我们开发了自己的模型,汇编了可追溯到 1926 年的公司债券和可追溯到 1985 年的资产支持证券的统计数据,这至少在我的案例中,提供了定制的马尔可夫链蒙特卡罗模拟,并提供了超出标准模型的答案。这些定制模型考虑了特定资产池中资产之间的真实相关性,以及资产池中每笔贷款的风险状况和行为,描绘了一幅不同的债券风险图。事实证明,与李的模型所暗示的相比,某些 AAA 级 ABS 的风险要高得多。

少数量化分析师明白这一点,能够向对冲基金的决策者解释机会(做空证券),并让他们做空其中一些证券,从而赚了很多钱。(大多数人都知道,有几部好莱坞电影是关于这个的)。其他人试图筹集资金,但没有成功,因为通常定量分析师没有交易记录,也没有简单的方法做空有可能获得最高回报的证券。

雷曼兄弟(Lehman Brothers)的倒闭,以及数十亿证券引发的降级和违约浪潮,让李的模型变得毫无用处。该模型没有预测到的违约累积起来,抹去了数万亿美元的投资。市值计价会计只会让事情变得更糟。

正如李多年后谈到他自己的模型时说的那样:“最危险的部分是当人们相信从模型中得出的一切。”。

顺便说一句,对我来说,谷歌的 TensorFlow 开始看起来像一把锤子,与此同时,摩根大通、贝莱德和其他公司似乎又在大肆招聘,这次招聘的几乎都是学术界的博士,他们的职能是数据科学家。

如果以史为鉴的话,我认为我们应该谨记李的故事,以资警醒。

为了保持这篇文章的可管理性,在编码会议之前,我将在“使用数据科学&量化分析预测固定收益的利率、利差和回报”中继续这篇文章,其中我将涉及:

  • 导致危机的证券化市场有多大?
  • 谁在发行哪里的领导人?
  • 资产支持型证券对美国和全球经济有什么影响?
  • 美联储是如何通过 TALF 计划启动经济的?
  • 让我们回到 2009 年,在违约潮之后,投资 ABS 证券的预期回报是多少?

不用说,我很乐意听到你关于这一点的任何问题。

带代码的隐式数据集的交替最小二乘

原文:https://towardsdatascience.com/alternating-least-square-for-implicit-dataset-with-code-8e7999277f4b?source=collection_archive---------1-----------------------

反馈(交互)数据推荐引擎指南

在大数据和分析时代,数据驱动的业务的力量一直呈指数级增长。人工智能和机器学习的更大整合在系统开发中发挥了至关重要的作用,这既有利于企业,也有利于企业用户。此外,推荐系统为数字业务增添了优势。下图显示了推荐系统的重要性。

Importance of Recommendation engines

包含特定项目或事件的显式等级、计数或类别的数据集被视为显式数据项。电影 5 分之 4 的评级是明确的数据点。然而,在隐式数据集中,我们需要理解用户和/或事件的交互,以找出其等级/类别。例如,一个人观看单一流派的电影。这种数据集被认为是隐式的。如果我们不考虑隐式数据集,我们就会错过很多隐藏的见解。

隐式数据集仅包含用户和项目交互。

此外,我们将考虑一个例子,以便有一个更好的了解。 Retailrocket 推荐系统数据集是理解交替最小二乘法的一个很好的隐含数据。

交替最小二乘法

交替最小二乘法是一种分解矩阵的算法。我们将讨论隐式反馈数据集的协同过滤如何使用 ALS。如下图所示,我们看到一个矩阵被分解成两个更小的矩阵。将第一个矩阵视为用户-项目交互的集合。因此,分解后的矩阵将是用户特征和项目特征

交互矩阵值是具有特定偏好和置信度的事件,其给出每个元素的值。对于一个实例,考虑有 3 个事件的电子商务数据集:查看、添加到购物车和事务处理。如果在用户和项目对之间存在交互,则认为是正面偏好,否则是负面偏好。

Preference

信心可以定义为价值或我们给予互动的价值。对于购买(交易事件)物品 X 的用户 A,我们增加交互权重,而用户 A 查看物品 Z 的权重小于“购买的交互”。

Confidence

置信度:r 是用户 u 和项目 I 之间的交互。交互越多,置信度越高——取决于值 α。买了 5 次的物品会比只买了两次的物品更有信心。如果相互作用的 r 为 0,那么我们加 1,使它不为零。该论文通常推荐 40 作为 α 值。

该论文描述了用于寻找用户交互和项目交互矩阵的以下成本函数:

这里,λ用于正则化模型,其值可以通过交叉验证来确定。

交替最小二乘法的本质

成本函数包含 m 个 n 项,其中 m 是用户数量,n 是项目数量。对于典型的数据集,m n 可以很容易地达到几十亿。因此,像随机梯度下降这样的优化方法会把如此庞大的数据搞得一团糟。因此,本文介绍了替代优化技术。

请注意,当用户因素或项目因素固定时,成本函数变成二次函数,因此可以很容易地计算出它的全局最小值。这导致了一个交替最小二乘优化过程,其中我们在重新计算用户因素和项目因素之间交替,并且每一步都保证降低成本函数值

我们通过分别用 x 和 y 对上面的成本函数求微分来找到用户(x)向量和物品(y)向量。

User and Item Vectors

因此,现在为了找到用户-项目对的偏好分数,我们使用以下:

我们发现最大的 p 值有项目推荐给用户。

我们如何编码?

我们使用隐式库,它包含了 Cython 中的所有实现,使它更快。

导入库

 import pandas as pd
import numpy as np
import scipy.sparse as sparse
import random
import implicit 

数据预处理

不要担心[这部分不需要对每个用例都一样]

def create_data(datapath,start_date,end_date):
    df=pd.read_csv(datapath)
    df=df.assign(date=pd.Series(datetime.fromtimestamp(a/1000).date() for a in df.timestamp))
    df=df.sort_values(by='date').reset_index(drop=True) # for some reasons RetailRocket did NOT sort data by date
    df=df[(df.date>=datetime.strptime(start_date,'%Y-%m-%d').date())&(df.date<=datetime.strptime(end_date,'%Y-%m-%d').date())]
    df=df[['visitorid','itemid','event']]
    return dfdatapath= './input/events.csv'
data=create_data(datapath,'2015-5-3','2015-5-18')
data['user'] = data['user'].astype("category")data['artist'] = data['artist'].astype("category")data['user_id'] = data['user'].cat.codesdata['artist_id'] = data['artist'].cat.codes

创建交互矩阵

由于数据是稀疏的,我们为项目用户数据创建稀疏矩阵,这将是模型的输入。用户项目矩阵将用于获取建议

 sparse_item_user = sparse.csr_matrix((data['event'].astype(float), (data['itemid'], data['visitorid'])))sparse_user_item = sparse.csr_matrix((data['event'].astype(float), (data['visitor_id'], data['item_id']))) 

ALS

 #Building the model
model = implicit.als.AlternatingLeastSquares(factors=20, regularization=0.1, iterations=20)alpha_val = 40
data_conf = (sparse_item_user * alpha_val).astype('double')model.fit(data_conf) 

使用模型

使用内置库函数获取建议

#Get Recommendationsuser_id =   14recommended = model.recommend(user_id, sparse_user_item)print(recommended) 

我们还可以使用下面的函数得到一个类似项目的列表

 #Get similar itemsitem_id = 7n_similar = 3similar = model.similar_items(item_id, n_similar)print(similar) 

结论

交替最小二乘法相当稳健。ALS 的时间复杂度与数据大小成线性比例。(即 O(x*n)其中 n 为数据集的长度,x 为整数)。代码可在此链接获得

使用自然语言处理推荐 Airbnb 房源的替代方法

原文:https://towardsdatascience.com/alternative-ways-to-recommend-airbnb-listings-using-natural-language-processing-40fce2f1b553?source=collection_archive---------28-----------------------

这个项目来源于我对 Airbnb 的热爱。如果你花足够的时间搜索,你可以找到价格合理的独特的地方。这个项目的目标是提高你的 Airbnb 搜索能力。我正计划去奥斯汀旅行,我意识到我没有那里附近的任何信息,我不会在那里有车,我也不想花很多时间使用公共交通。我想住在一个凉爽的社区,在那里我可以在步行距离内找到我喜欢的地方。

对我来说不幸的是,Airbnb 目前不允许根据住宿地点和特定事物的接近程度来搜索住宿。这里是 Airbnb 的界面。你可以按日期、客人、出差等进行过滤。,但是如果我喜欢酒吧和咖啡店附近的时髦地区,我不知道该住在哪里。

我决定做一个数据科学项目,以满足我对 Airbnb 搜索特异性的渴望。

数据

Airbnb 包含禁止自动代理未经授权抓取数据的使用条款,但你可以在 insidearbnb.com 找到现成的最大城市的数据集。

我决定使用西雅图的房源及其评论的数据集,因为我更熟悉我居住的城市。我还为这个项目使用了两个不同的数据集,以开发两种生成推荐的替代方法,下面的小节将分别介绍这两种方法。

第一部分

推荐系统#1

我这部分的目标是为 Airbnb 创建更多个性化的推荐,以满足特定的需求。举个例子,如果我想在酒吧和咖啡店附近的时尚街区找一套单间公寓,该怎么办?

对于第一个推荐系统,我使用了一个数据集,其中详细描述了西雅图的列表。该数据集包括每个房源的邻居、主人、便利设施、评论分数、可用性、价格和位置等信息。

我使用了一个简单的余弦相似度技巧,它允许我根据自己的请求找到列表。我能够在一个功能和几个步骤中完成它:

  • 使用计数矢量化对数据框的文本内容进行符号化
  • 将符号化的文本列转换成矩阵
  • 转换个性化请求,该请求是函数的文本输入。
  • 找到请求矩阵和数据帧内容之间的余弦相似性
  • 选择具有最高余弦相似性的五行

这是函数:

这很棒,但此时,代码存储在我的 Jupyter 笔记本中,没有人可以使用它。幸运的是,我可以将我的代码部署到一个 Flask app 中,并通过 Heroku 创建一个网站,这是一个免费的网络托管服务,它将允许其他人使用这一搜索功能。

将模型部署到 Flask APP → Heroku

  • 这个过程的第一步是将主函数的属性保存到 pickle 中。🥒
  • 接下来,我用我的主函数(web API)创建了一个 py 文件

  • 另一个。py 文件包含 Flask 应用程序的后端

  • 最后,这里是一个简单的前端界面的 HTML。

一旦我能够通过我的终端调用工作应用程序,我就开始通过 Heroku 部署它。我用一个简单的指南在 Heroku 中部署我的应用程序。

看看下面的结果吧!(还有对不起原始的前端接口。)

[## Heroku 应用程序根据您的搜索提供 5 个推荐

obscure-depths-25051.herokuapp.com](https://obscure-depths-25051.herokuapp.com/)

第二部分

推荐系统#2

该项目的第二部分的目标是创建一个协同过滤推荐引擎,根据 Airbnb 列出的过去喜欢的具有相似品味和偏好的人,向用户提供推荐。这种方法通过使用用户之间的相似性作为参考来预测每个用户的自定义评级。

对于第二个推荐系统,我使用的 Airbnb 数据集包括我在第一部分中使用的数据集中的房源评论、评论者 ID 和房源 ID。

让我们回顾一下我的流程:

我的数据集不包括评论的评级或情绪,因此为了了解评论的情绪,我使用了 NLTK 的软件包 SentimentIntensityAnalyzer,,它允许我计算第一部分数据集中每个列表的每个评论的情绪得分。在下面,您可以看到在最右侧的极性列中生成的每个评论(行)的情绪得分。

下面是所有 Airbnb 用户评论的情感分数分布图。请注意,大多数评论都有积极的情感价值。

在将情感分数拟合到模型中之前,我必须转换它,因此分数是正态分布的。下图显示了正态分布。

为了创建一个健壮的推荐模型,我使用了surprise库。该图书馆由 Nicolas Hug 在 PyParis 2017 上赠送。需要明确的是,Surpise 不是一个推荐引擎。这是一个允许我创建使用以下算法的基准的库:

  • 网格搜索 CV 以找到最佳参数
  • SVD(奇异值分解),以基于评级的历史来预测用户项目对的评级

我用 RMSE 作为我的准确度指标。

网格搜索 CV 能够使用最佳参数确定 0.0995 的最佳 RMSE 分数,如下所示。

现在我有了最好的分数,下一步是编写一个函数,为每个用户提供三个清单推荐,如下所示。

我创建了一个新的数据集,并将上述函数应用于所有用户。以下是包含三项建议的最终数据集:

总结

我最终得到了两个有用的推荐系统。我使用第一个推荐系统来计划我的奥斯汀之旅,因为它可以根据我的特定需求给我提供最好的 Airbnb。第二个推荐系统是基于相似用户偏好的更标准的推荐系统,被网飞、Airbnb、亚马逊等公司广泛使用。

参考文献:

为了了解惊喜库的复杂性,我看了下面这个视频:https://www.youtube.com/watch?v=z0dx-YckFko

我还引用了这位了不起的数据科学博主 Susan Li:https://towards data science . com/building-and-testing-recommender-systems-with-surprise-step-step-d4ba 702 ef 80 b

Github 库:https://github.com/AisOmar/Airbnb_recommendation

总是问好问题

原文:https://towardsdatascience.com/always-ask-good-questions-e90db9d5852d?source=collection_archive---------34-----------------------

面向数据分析师、数据科学家、开发人员和任何其他知识工作者的 10 个受访者问题

Photo by Johanna Buguet on Unsplash

我不确定在我 20 年的金融和技术生涯中,我采访过多少候选人;大概 100 左右吧。我敢说,只有 20%的受访者有关于角色、领导力或公司的正确问题。如果你在面试时问了正确的问题,那是最好的。假设你有技能,你是合适的人选,你专注于确保这家公司是你想花时间去的地方。以下是每个求职者在招聘过程中应该问的问题。不要问每一位面试官所有的 10 个问题,而是将整个问题对准你认为能给出最佳见解的人。向每个面试官问一两个这样的问题。如果你在问这些问题之前得到了一份工作,那么在发出你的还价之前先问他们。

1)你能告诉我为什么这个职位的最后一个人离开了公司吗?(应该向该职位的招聘经理询问)

这个问题让你了解领导层的透明度和自我反省。你在寻找正确的答案,关于那个离开的人是为了更好的角色,更多的责任,等等。对离职人员的负面评价或对其的贬低性陈述(例如,他们不合适,他们没有得到这份工作)是一个不好的信号。不愿意回答是一面红旗。这个问题的变体:是什么让最后一个人成功?

2)你能告诉我购买一本 25 美元的书(或研究文章)的流程吗,这将有助于我更有效或高效地完成我的工作?

在许多公司,召集 5 到 10 个人开一个小时没有实际成果的会议,比获得花 25 美元购买一本书或付费行业文章的“批准”更容易(也更昂贵),这些文章与实现特定成果有关。你在寻找与“你购买它并消费它”最接近的答案这个问题是我在 twitter 上从@ patio 11发现的[[https://twitter.com/robinson_es/status/1106191065806188544]

3)你能告诉我在这个职位上我可以使用的软件吗

假设你使用现代工具进行分析,而你在一家使用过时或旧工具的公司面试,你应该会面临严峻的挑战。比如你爱 Tableau,公司只用业务对象或者 SAP 解决方案。你不太可能让他们投资更现代的解决方案——除非这是你想要的角色。如果你用 Python、R Java 编码,一定要确保它们确认了哪些变体和 IDE(比如 anaconda、R-studio 等)以及其他支持工具,比如 GIT 利用率和 CI 需求。

4)你能告诉我获得新产品或服务的过程,从而实现我个人、部门、分部和公司的目标吗

你需要了解从桌面到企业级采购工具的整体能力。有了这些知识,你就能洞察公司如何利用最好的工具来完成知识工作者所需要的各种关键任务。

5)您能告诉我云在贵公司的使用情况吗?我是否可以直接访问这些提供商的基本功能和服务,如存储、计算和查询,因为我的角色取决于这些类型的服务?

不要浪费你的时间在那些不会让你接触到所有知识型工作的未来计算框架的公司工作。拥有访问无限存储、回答问题的无限计算以及回答问题的高效能力对于知识工作者的成功至关重要。

6)团队在什么时间和什么地点最有效地协同工作?

这个问题是在测试这家公司是传统的上午 9 点入座商店,还是支持远程工作和异地工作机会的分布式协作引擎。 你偏爱的工作模式是个人口味,但你需要在接受任何 offer 之前了解他们的期望 。以这种方式提问还能让你在开始之前对团队的整体工作模式有所了解。

7)你的团队如何分享知识和协作?

公司是通过会议分享知识,还是通过 confluence 或 wiki 网站,或者像 slack、hipchat 或 teams 这样的集中式团队软件来分享知识?避开那些没有中央协作平台或者没有有效利用平台的公司。他们需要你“参与”许多会议才能成功。在可能的情况下,寻找关于使用 Slack、Hip Chat、Teams 或其他群聊解决方案以及下一代办公自动化工具(如 Google Gsuite 或 Office 365)的信息。

8)公司未来最大的威胁是什么?在你最近的收益电话会议上,相关分析师对话题 X 很感兴趣,你能谈谈你对话题 X 的看法吗?

通过展示你对这家公司的研究,这表明了你对这家公司的兴趣以及批判性思维能力。寻找诚实的答案,没有一家公司是完美的,许多公司都有失误。领导者坦诚面对竞争威胁是良好的公司文化。 最优秀的领导者能够表现出对竞争格局的理解、情景化和清晰化。

9)该公司在行业中最重要的机会是什么?(理想情况下,问你的招聘经理或你期望的领导)

希望这个问题能让你对公司相对于行业的增长有所了解。在你开始这个角色之前,你会学到什么是最重要的,以及你潜在的领导的想法。如果他们不能回答,小心! 一个领导者无力谈论目标,他们的愿景就足以说明问题 。这表明他们领导的团队缺乏远见和目标,这将成为你的主要挑战!

10)对于会议演示、行业活动、聚会和其他建立专业关系网和信誉的机会,您的政策是什么?

面对现实吧;大多数知识工作者希望提高他们的街头信誉。实现这个目标的一个方法是成为一个小组演讲者,一个 meetup 演讲者,或者一个 meetup 主持人。作为活跃的行业领导者的公司经常利用关键员工在各种行业活动中代表他们。例如,我的领导在芝加哥,所以我通常有机会报道纽约的会议。他们经常推荐我作为当地合格的可用资源来主持专题小组讨论、参加专题小组讨论或展示最新最棒的产品和服务。这些机会中的每一个都会促进我的职业网络和个人成长。一个顶级的知识工作者应该只考虑活跃在行业中的公司,并提供在行业中成长的直接机会。

我希望这些能给你一个好主意,如何确保你在正确的公司开始正确的冒险。

介意分享一些额外的吗?你问了哪些问题获得了卓有成效的见解?请在下面评论。

我学 Python 晚了吗?

原文:https://towardsdatascience.com/am-i-too-late-to-learn-python-1fdf3a1b4576?source=collection_archive---------5-----------------------

Python 仍然是 IT 界无可争议的王者

介绍

“当我第一次接触 Python 时,我就知道它有些特别。这是可读性和健壮性的某种结合,而且编写 Python 代码是一种乐趣。”

每天都有数百万人使用 Python。二十多年来,专业和业余开发人员一直在使用 python 来完成各种大大小小的任务。Python 在世界上一些最大的组织中扮演着至关重要的角色。它正在增强照片共享 Instagram 现象,帮助网飞向超过 1 亿用户播放视频,并帮助美国宇航局进行太空探索。正是 Python 帮助美国国家航空航天局拼接了大约 5 亿万亿公里外的黑洞的第一批图像。

你的 Python 之旅轻松了

它在 web 开发人员、数据科学家和系统管理员中特别受欢迎。对 Python 的狂热已经远远超出了最初的开发人员圈子,并且已经成为这个星球上最流行的编程语言,因为它继续以比任何其他语言更快的速度增加新用户。

PYTHON 的历史

【T20 世纪 80 年代末,吉多·范·罗苏姆,一位荷兰程序员,在 Centrum Wiskunde&Informatica(CWI)研究一个分布式系统时,对现有编程语言的缺点感到沮丧,于是决定创造一种新的语言——‘一种既易于使用又功能强大的语言’

2020 年为什么要学 PYTHON?

Python 拥有数百万用户,但这并不意味着太晚或你现在不能学习 python。Python 是这个时代发展最快的编程语言。Python 有一个光明的未来,根据专家研究,在主要国家,如印度、美国和许多其他国家,python 开发者/专家的需求和供给之间仍然有巨大的差距。因此,可用的 python 开发人员的工资是实际工资的两倍,以填补这一短缺。

Most Trending Programming Languages of 2019

对于那些怀疑 python 的职业机会并且缺乏对 python 的良好掌握的人来说,这是重要的一课。是时候学习 python 了。它给你的简历增加了价值,并且最重要的是给你的职业目标增加了价值。

关于 Python 的 16 个事实

让我们先来谈谈你绝对应该选择 Python 的所有理由。

多才多艺的

Python 是一种通用编程语言。很容易想到它被使用的多个地方-

  • 脚本
  • Web 开发
  • 测试
  • 计算机视觉
  • 数据科学
  • 机器学习
  • 人工智能
  • 图形用户界面和游戏开发
  • 图像处理
  • 企业应用
  • 机器人学
  • 网页抓取
  • 网络编程

如果我们谈论它的不同风格,有一种 MicroPython 经过优化,可以在微控制器上运行。

方便用户的

Python 拥有一切——简单的语法、可读性、生产力。写 Python 就像用英语写一样。这也使得阅读 Python 中的代码并理解它变得容易;Python 代码简洁。Python 的这些特性使开发人员更有效率。可读性让下一个开发人员很容易理解你的代码。打印你好,世界!在 Python 中,您只需:

print("你好,世界!")

Python 也很好学。

丰富的图书馆

Python 有各种各样的库。这些可以让你借用代码,专注于重要的事情。这里列出了一些重要的图书馆:

对于数据科学和机器学习-

  • NumPy
  • Matplotlib
  • SciPy
  • 熊猫
  • mlpy
  • Theano
  • 网络 x
  • 交响乐
  • 达斯克
  • Dmelt
  • sci kit-学习
  • PyBrain
  • xgboost
  • 张量流
  • 克拉斯

用于可视化:

  • Matplotlib
  • 海生的
  • plotly
  • ggplot
  • 散景

还有很多其他的,比如 urllib、requests、Tkinter、pyqt5、JSON 和 sqlalchemy。

用这些顶级 Python 项目 让你的 Python 游戏变强

适应性

Python 适合初创公司和科技巨头。无论你是一家初创公司、科技巨头,还是一个普通人,Python 都适合你。很多大牌也用。

数据科学和机器学习

现在大家都在说数据科学和机器学习,Python 往往是首选。感谢它的库和其他特性。它也非常适合人工智能,并且可以用于大数据,因为它与 Hadoop 兼容。

最佳职业选择

你可以在 Python 里干出一番事业。Python 开发者报酬丰厚,需求旺盛。您可以使用 Python 获得以下配置文件之一:

  • 软件工程师
  • 前端软件/网络开发人员
  • Python 开发人员/程序员
  • DevOps 工程师
  • 生产部经理
  • 数据分析师/记者
  • 教师
  • 财务咨询机构
  • 研究分析师
  • 数据科学家

根据 PayScale 的数据,Python 技能的平均年薪约为 62878 美元,在美国甚至更高。有了经验,你可以赚得更多。它是发展最快的编程语言之一。

它已经变得和 Java、C、C++一样重要,并将在未来几年打败它们。在各种项目中采用 python 的大公司正在推动对 Python 的需求。

尾注

Python 的发展在不久的将来非常有前途,这是促进你的 python 事业的好时机。
有很好的未来范围,对很多项目都足够强大。

现在,你还在等什么?

在巨蟒抛弃你之前选择它

亚马逊和黄金

原文:https://towardsdatascience.com/amazon-and-gold-efficient-frontier-analysis-ba9c8ad4c35b?source=collection_archive---------14-----------------------

有效前沿分析

https://unsplash.com/photos/rymh7EZPqRs

什么是马科维茨投资组合优化?

根据该理论,有可能构建一个最优投资组合的“有效边界”,在给定的风险水平下提供最大可能的预期回报。这一理论是由哈里·马科维茨在他的论文《投资组合选择》中首创的,该论文于 1952 年发表在《金融杂志》上。他后来因为开发了 MPT 而获得了诺贝尔奖。

为什么有趣?

在我人生的大部分时间里,我都认为投资“风险越高,回报越高”。当只通过个股的范式来看投资时,这是典型的情况。如果你考虑股票之间的相关系数,通过分散投资,实际上有可能获得更高的回报和同等(或更低)的风险。在这个大纲中,我将尽力引导读者明白这是一个多么令人激动的概念。

预测:

我们将从 2004 年 11 月-2019 年 5 月分析 GLD (SPDR 黄金股票-黄金 ETF)和 AMZN(亚马逊-西雅图电子商务巨头)。

  • 哪种资产回报更高?哪个风险更高?
  • 如果我们要单独用这两种资产做一个投资组合,如果我们的目标是最小化风险(100% GLD,0% AMZN),(50% GLD,50% AMZN)等,那么黄金与亚马逊的比例是最保守的?
  • 哪个比率是最大化回报,同时最小化每单位回报的风险?

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

导入模块:

import numpy as np
import pandas as pd
from pandas_datareader import data as wb
import matplotlib.pyplot as plt
%matplotlib inline

接下来,让我们引入数据。我直接连接到 Yahoo Finance API,这对于查看大量股票要实用得多。api 的代码:

assets = ['AMZN', 'GLD']
pf_data = pd.DataFrame()for a in assets:
    pf_data[a] = wb.DataReader(a, data_source = 'yahoo', start = '2004-11-18')['Adj Close']

既然我们已经获取了数据并将其分配给一个变量,那么让我们继续绘制标准化价格趋势。从这个角度来看,亚马逊在过去 15 年里一直是最大的资产。记住,高回报意味着高风险,对吗?

(pf_data / pf_data.iloc[0] * 100).plot(figsize=(10, 5))

让我们研究一下真实的数字。我们将计算这些股票的年度对数收益、标准差、协方差和相关性。

年度日志回报:

log_returns = np.log(pf_data / pf_data.shift(1))
log_returns.mean()*250

风险:

log_returns.std()*250**0.5

共方差:

log_returns.cov()

相关性:

存在非常低的负相关;然而,任何相关性仍然会产生影响。

log_returns.corr()

我们稍后将使用这段代码。但是简单解释一下,我用两个随机数组成一个数组,加起来是 1。

weights = np.random.random(2)
weights = weights/np.sum(weights)
weights

现在是我们进行模拟的时候了。我们这样做是为了查看黄金和亚马逊权重的所有可能组合。对于每一组随机权重,我们的模拟将为投资组合计算新的年回报率和标准差。

我们首先创建两个空列表,分别叫做‘pfolio _ returns’和‘pfolio _ volatilities’。这些将捕获其下函数的的所有模拟计算。

我们添加了之前的随机权重生成器代码,并将随机权重的 1000 次迭代插入到我们的投资组合回报和投资组合波动率公式中。append 方法是在每次交互时为列表创建一个新条目的方法。

pfolio_returns = []
pfolio_volatilities = []for x **in** range (1000):
    weights = np.random.random(2)
    weights /= np.sum(weights)
    pfolio_returns.append(np.sum(weights * log_returns.mean()) * 250)
    pfolio_volatilities.append(np.sqrt(np.dot(weights.T,np.dot(log_returns.cov() * 250, weights))))

pfolio_returns = np.array(pfolio_returns)
pfolio_volatilities = np.array(pfolio_volatilities)pfolio_returns, pfolio_volatilities

这将输出 2 个长数组。它们包含有价值的信息,但我们无法绘制出来。为了绘图,我们需要将数组转换成 dataframe 对象。我们可以通过将列键分配给列来使用字典。

portfolios = pd.DataFrame({'Return': pfolio_returns, 'Volatility': pfolio_volatilities})
portfolios.head()

现在让我们绘制我们创建的 dataframe 对象!

如你所见,它有一个回旋镖形状。这正是大多数投资组合优化图应该呈现的样子。图的底端是 GLD 的风险/回报(6.8%的回报/18.3%的标准差),右上角是 AMZN 的风险/回报(26.1%的回报/38.6%的标准差)。

在中间,是当你在一个投资组合中混合两者时,风险/回报动态的样子。越往上越是 AMZN 分配,越往下越是 GLD

portfolios.plot(x='Volatility', y='Return',kind = 'scatter',figsize=(10,6));
plt.xlabel('Expected Volatility')
plt.ylabel('Expected Return')

保守视角:

在曲线风险最小的地方(大约 16%的标准差),看起来大约是 80%的 GLD 和 20%的 AMZN。令人惊讶的是,与我们 100%投资于 GLD 相比,这个点有更高的回报和更低的风险。这推翻了高回报意味着高风险的观点。我们正从个股范式转向投资组合范式。

夏普视角:

理想情况下,我们希望回报最大化,同时风险最小化。这意味着大多数人希望尽可能靠近图表的左上角。这就是夏普比率(Sharpe ratio)的由来:每单位波动率超过无风险利率的平均回报率。本质上,夏普找到了一种方法来计算这条曲线上最靠近左上角的点。

如果我们全押在亚马逊上,我们仍然有最高的回报,但我们也有更高的风险。如果我们处于中间位置,理论上我们会通过最小化风险和最大化回报来优化我们的投资组合。

那么,GLD 和 AMZN 的最佳投资组合平衡是什么?

我在 Github 上发现了一个程序,它实际上为我们自动化了这个过程。下图从最小波动率角度和最大夏普比率角度显示了 AMZN 和 GLD 的确切投资组合规格。我稍微调整了一下原始代码,将我们的数据插入到 Ricky Kim 的代码中,得到了这张图片:

但是,即使严格基于我提供的原始代码,您也可以感觉到曲线上的哪个点最小化了风险(最接近左边),哪个点最大化了夏普(最接近左上角),以及每个点使用了每只股票的什么权重(通过测量这些点沿着直线有多远)。

GitHub 中的代码:https://GitHub . com/ahershy/Efficient-Frontier-Program/blob/master/markowitz-portfolio-optimization-gold-and-Amazon . ipynb

非常感谢里奇·金的灵感和伟大的文章:https://towards data science . com/efficient-frontier-portfolio-optimization-in-python-e 7844051 e7f

点击此处了解有关线性回归/多项式回归的更多信息:

https://towards data science . com/linear-vs-polynomial-regression-walk-through-83c a4 f 2363 a3

如果您觉得这有帮助,请订阅、鼓掌或评论。

安德鲁

亚马逊 RDS —分步指南

原文:https://towardsdatascience.com/amazon-rds-step-by-step-guide-14f9f3087d28?source=collection_archive---------4-----------------------

数据科学

使用 Amazon RDS 和 Python 创建、连接和交互远程 PostgreSQL 数据库

Photo by Arnel Hasanovic on Unsplash

T 他的这篇文章将指导你如何使用亚马逊关系数据库服务创建数据库实例,以及如何仅使用 Python 与远程数据库服务器交互。

步骤 1:启动 AWS 数据库实例

首先,我们需要一个 AWS 账户。我们将转到 AWS 门户创建一个新帐户,或者您可以使用现有的 AWS 帐户。

什么是亚马逊 RDS?

Amazon 关系数据库服务(RDS)是在云中建立关系数据库的核心部分。我们提供的每个云数据库称为一个数据库实例。因此,首先,点击服务并选择数据库导航至 RDS 仪表板:

AWS Services Console. Select RDS for launching a new database instance.

接下来,要创建一个新的数据库,点击“创建数据库 e”。数据库实例是灵活的,您可以配置它们来满足您的需求。您可以使用一系列引擎类型来配置数据库,包括 Amazon Aurora、MySQL、PostgreSQL 等。除了引擎类型之外,您还可以配置数据库实例的类型和大小,分配存储,以及配置不同的设置,如监控、备份和许多其他设置。

现在,我们选择一个运行数据库的 PostgreSQL 引擎。在本帖中,我们使用一个 自由层模板 。通过一个空闲的 trier,我们得到一个小实例 db.t2.micro ,它有 1 个 CPU 和 1gb 内存。

接下来,在 Settings 部分指定您的数据库实例信息:实例名和登录到您的实例的主用户凭证。您还可以指定用于访问数据库的端口。对于 PostgreSQL 安装,默认端口是 5432。

如果您想要为您的数据库实例提供一个公共 IP 地址(这样 VPC 之外的设备将能够连接到您的数据库),在连接部分中为公共可访问选择。我选择 Yes 让我的数据库在我的本地机器上可用。

您应该继续到附加配置部分,并指定 Amazon RDS 在创建数据库实例时创建的数据库名称。对于本教程,我将创建一个名为 titanic 的数据库。

记住:数据库名称和数据库实例名称是两个不同的名称。如果不指定数据库名称,Amazon RDS 在创建数据库实例时不会创建数据库。

最后,点击创建数据库。启动数据库可能需要几分钟时间。新的数据库实例出现在 Amazon RDS 控制台上。一旦实例的状态变为可用,您就可以连接到该实例。

The DB instance on the Amazon RDS console

步骤 2:连接到 PostgreSQL 数据库

一旦创建了数据库,我们就可以与它进行交互。在这里,我们使用 Python 包psycopg 2:从 Jupyter 笔记本连接到我们的数据库

注意,您甚至不需要在我们的本地机器上安装 Postgres。您只需要安装一个 psycopg2 包,在您的终端中输入: pip install psycopg2

在第二行中,我们通过使用connect()方法打开了到 Postgres 的连接。我们向 psycopg2 传递了五个参数。第一个是host,它指定数据库在哪里运行。在我们的例子中,它是一个远程 RDB,主机 url 是来自 Amazon RDS 控制台的端点值(参见下面的截图)。接下来,我们传递用户名和密码(第 5、6 行)。您可以从使用之前创建的主用户凭证开始。稍后,我们将添加一个新用户,作为提高安全性和数据划分的一种方式。最后,我们传递了数据库名称(,它与数据库实例名称不同!!!)。我让你在附加配置中输入的数据库名称,在我这里是泰坦尼克号。

Amazon RDS console for a test database instance

最后但同样重要的是,我们需要创建一个光标对象(第 9 行)来交互和执行 Postgres 数据库上的命令。

步骤 3:通过 Python 与数据库交互

3.1.资料组

一旦我们连接到我们的数据库,是时候添加一些数据了。为了这个教程,我从 Kaggle (train.csv)上取了泰坦尼克号数据集。经过一些预处理后,我将文件拆分为三个 CSV 文件: passengers.csvtripInfo.csvsurvival.csv. 我的回购与处理后的数据集和笔记本的链接在文章的最后。

3.2.创建表格

现在,我将把数据从 CSV 文件复制到数据库中,但是首先,我需要创建三个适合我的数据集的表。为此,我们可以使用CREATE TABLE命令,但是要注意,列的顺序应该与 CSV 文件中它们各自类型的顺序相同。

记住,每次我们需要在每个事务结束时运行connection.commit() 来提交我们的更改(第 22 行)。最后,您可以随时查询表 INFORMATION_SCHEMA。列来显示所有公共表的模式。我们尤其对列名和数据类型感兴趣。在 Python 中,我们还可以使用 pandas 方法read_sql()访问远程数据:

A sample output after executing the SQL query.

3.3.将数据从 CSV 加载到 Postgres 表中

一旦我们有了表,我们想从 CSV 文件中复制数据。幸运的是,使用 psycopg2 使用 copy_from() 方法非常简单:

Loading data into a Postgres table from CSV

我们还可以创建一个新用户,并授予管理数据库的权限:

3.4.执行查询

现在,我们的远程数据库已经准备好了,我们可以开始使用 Python pandas.read_sql()从数据库表中获取一些数据。假设我们感兴趣的是获得每个乘客所在班级的存活率。下面是一个简单的带有内部连接的 SQL 查询:

使用 pandas 执行 SQL 非常方便,因为它将 SQL 查询读入数据帧:

The survival rate for each passenger’s class

删除数据库实例

最后的笔记。从 AWS 中删除不再使用的数据库实例是一个很好的做法。否则,你会因此而被收费。因此,您需要返回到 AWS RDS 控制台,选择您的实例并单击 Delete。

Delete the database Instance

我的带有处理过的数据集和笔记本的 repo 是这里是

亚马逊红移:re:Invent 2019 的新功能愿望清单

原文:https://towardsdatascience.com/amazon-redshift-wishlist-of-new-features-for-re-invent-2019-73378a71afa7?source=collection_archive---------45-----------------------

RedShift 是 AWS 提供的高度可扩展、并行和完全托管的数据仓库产品,也是 AWS 云数据堆栈的关键组件。

AWS 云数据堆栈现在主导着分析领域。

在这里,我列出了一些我希望看到添加到红移的功能,并希望这些功能能够在 re:Invent 2019 及以后公布。

透明物化视图

RedShift 目前不支持物化视图。

通常使用临时或永久表来代替它们。这些表也需要用 CREATE 而不是 SELECT 来创建..变成。

对于物化视图,红移可以指优化的表结构(可能是预先连接的表集,或者是预先汇总的视图),这可以极大地提高查询性能。

透明重写特性会有所帮助,它会在查询时自动使用物化视图代替主表,而不需要更改查询。

BI 工具的光标支持

使用 BI 工具中声明的游标,整个结果集被提取到 leader 节点的内存中。对于像 Tableau 这样声明多个游标的 BI 工具,这会影响性能。

为了获得更好的 BI 工具性能,更好的光标处理是一个受欢迎的特性。具有数据局部性(排序)和分布(DIST)的游标的具体化,或者游标查询的延迟处理将是非常有利的。

多个领导者节点

在当前模型下,如果首节点发生故障,所有连接都会终止,正在进行的查询也会中止。这可能会给 BI 工具的用户带来不好的体验,长时间运行的查询可能会被触发。

我的愿望是允许红移具有多个主节点的能力,具有活动备用,允许透明的连接传输,并且如果可能的话,允许进行中的查询传输。

加入重写和文字处理

当编写以下类型的连接时,观察 DEPT.DEPT_NO 上的筛选器与 EMP 筛选器的比较。DEPT _ no . EMP 和 DEPT 的区域图处理方式非常不同。

SELECT EMP.EMPID, DEPT.DNAME

FROM EMP

INNER JOIN DEPT ON DEPT.DEPT_NO = EMP.DEPT_NO

AND EMP.DEPT_NO = 100;

处理文字的方式可以改变,如果 DEPT_NO=100 过滤器以相同的方式应用于 EMP 和 DEPT 表,将有助于更快的过滤。如果表按谓词(DEPT_NO)排序,查询处理器也会使用排序键。

优化之间

区域图给出了存储的列的最小值和最大值,并指向要过滤的正确块。对于 BETWEEN 查询,尤其是在引用维度表范围的事实表上,除非解析维度表的值,否则区域映射无法像简单查询那样提供粒度筛选。

这也和前面的 JOIN 重写点有些关系。

BETWEEN 优化有助于日期范围查询和基于维度表范围的事实表查询。这种优化将允许对这种查询进行合并排序操作,而不是散列连接操作。

在 2017 年引入的后期查询具体化功能中,已经看到了一定程度的改进,但合并的改进因素将更大,尤其是在排序键右对齐的情况下。

亚马逊 Vs. Flipkart:寻找图书的最佳价格!

原文:https://towardsdatascience.com/amazon-vs-flipkart-finding-the-best-prices-for-books-bab29811b801?source=collection_archive---------9-----------------------

亚马逊还是 Flipkart?对我们这些懒得比较价格的懒人来说,这是个老问题。你可能想知道为什么这与你有关。从表面上看,似乎不会有太大的不同,但它要深入得多。事实上,通过深入研究数据,这种差异在我们的日常网上购物生活中变得非常显著。

数据收集的混乱。

在几个朋友的帮助下,我创建了两个剪贴簿,绕过所有障碍,将 Flipkart 上亚马逊上的数千本书籍的数据收集到一个 CSV 文件中。我们有足够的评级、价格、作者等信息。我们把普通的书拿出来连接两个表,我们用特定书的 ISBN 号来连接。我们计算了相对于 Flipkart 价格的价格差异,并计算了相对于 Flipkart 价格的价格百分比差异。我们最终得到了一个统计上可接受的 800 本书的样本,看起来像这样:

The cleaned CSV table.

一些无聊的先决条件

说到购物,你不会是第一个拥有个人最喜欢的电子商务网站的人。无论是因为你自己的偏好、平台的好处、你同事推荐你使用的东西,还是因为你在 Reddit 上读到的任何阴谋论。

我们在给定的图中看到两个网站上的价格分布。我们可以看到,从价格 Rs 处的峰值开始,有一些非常独特的模式。100.

Price distribution of the books on Amazon and Flipkart.

在做了一些基本的计算后,如果你坚持用 Flipkart 买书,你将花费大约 Rs。190490 。另一方面,如果你只使用亚马逊,它会花费你卢比。187355

坚持使用任何一个网站,你肯定不会很快买得起一辆新的宝马。所以让我们继续做一些冷静的分析。

就像一个未被触及的犯罪现场,我潜入原始的、充满神秘色彩的数据中去揭开一些谜团。

分析

让我们先看看最好和最坏的情况。如果我只从亚马逊和 Flipkart 的更便宜的选择中买书,我将花费177017卢比。在最坏的情况下,我只买了更贵的选项,这将花费我惊人的 211797 卢比。相差 34,780 卢比,即 16%。不是小数目!用这些钱,你可以买 16 次哈利波特。这可是宝马的一大笔钱。

让我们比较价格。

一眼就能看出,大概有 25%的书定价差不多。

通过观察价格的分布,我们可以看到正百分比的比例向右增加。这意味着与 Flipkart 相比,约 20%的图书在亚马逊的价格更低。

让我们快速浏览一下价值低于 500 卢比的书籍的数据,看看这种模式是否成立。它清楚地表明,对于更便宜的书籍,亚马逊仍然占据优势。

随着书籍变得越来越贵,超过 500 卢比,这种模式仍然存在,亚马逊赢了。

哟,你还没下定决心吗?

让我们再做一个分析来决定你的想法。

我的朋友多伊博士只在亚马逊上购物,而我更喜欢 Flipkart,不管出于什么原因。让我们看看,如果多伊博士从亚马逊上买下所有 713 本有问题的书,他会怎么样。与 Flipkart 相比,亚马逊有 45%的时间有更好的定价,而与我们最好的购物车相比,多伊博士只多付了 6%。另一方面,我从 Flipkart 买了整辆车后,只有 30%的机会得到更好的价格,最终我会多付 8%。

嗯,你必须同意,很难击败亚马逊的图书定价,因为我们最喜欢的电子商务市场是从卖书开始的。

结论

继续(最后)到所有这些的实际点,决定你应该实际使用哪个站点。好吧,看起来多伊博士对书籍有优势。那就是亚马逊。总的来说,最好的办法是检查和比较这两个网站,以获得最好的交易。

但是如果你懒得比较和买书,你可以一直使用亚马逊,与 Flipkart 相比,他们会在 70%的时间里提供更好或同样好的交易。

项目详情

谈到书籍的价格比较,我是在看到 Chase 关于亚马逊和易贝的价格比较的精彩且信息丰富的帖子后受到启发来做这个分析的。但在这种情况下,你不必做手动比较,他的分机 Unlooted 为你做的,所以一定要检查一下,如果你来自美国。

对我的下级 Corruption13pranavmodxAfnan-Navazvoxetmohita 在这个项目上帮助了我。你们太棒了。

你可以找到我在 Kaggle 上做分析的内核数据集。请随意浏览并试验它。

奋斗的 T21 的故事可能需要一个自己的博客。我们收集了大约 50,000 本书,但由于 ISBN 的一些技术故障,我们无法将它们连接在一起。

如果你对数据分析有什么很酷的想法,请分享,我很想听听你的想法!

亚马逊的王梦琳在破解数据科学采访

原文:https://towardsdatascience.com/amazons-menglin-wang-on-cracking-the-data-science-interview-5a8c5c733458?source=collection_archive---------24-----------------------

王梦琳是亚马逊的机器学习工程师,她在两个不同的团队工作,并在内部向亚马逊员工教授深度学习。

但梦琳真正酷的是她对理解和优化面试流程的专注。我们和她坐在一起,讨论优秀的数据科学家需要具备哪些特质,以及如何顺利通过数据科学面试。

请听下面的对话:

“美国第一”:川普的总统任期如何影响 H-1B 签证?

原文:https://towardsdatascience.com/american-first-how-has-trumps-presidency-affected-h-1b-visas-7041bedbbd79?source=collection_archive---------26-----------------------

唐纳德·特朗普总统 2016 年总统竞选期间的一个主要关注领域是他的“美国第一”移民改革主题。特朗普和其他美国人认为,雇佣外国人的公司导致美国人拥有的工作岗位和美国制造的产品减少,这是美国繁荣程度下降的标志。

在他 2016 年的就职演说中,他表示,“从今天开始,将只有美国第一。美国第一。关于贸易、税收、移民和外交事务的每一项决定都将有利于美国工人和美国家庭。我们必须保护我们的边界免受其他国家制造我们的产品、窃取我们的公司和破坏我们的工作的蹂躏。保护将导致巨大的繁荣和强大。

在他看来,问题的一部分是 H-1B 签证,这是一种根据移民和国籍法第 101(a)(15)(H)节在美国的签证,允许美国雇主临时雇用从事特殊职业的外国工人。专业职业要求应用专业知识和学士学位或同等工作经验。(来源维基百科)

美国公民及移民服务局(USCIS)签发 85,000 份 H-1B 签证。为了选择这些申请人,美国公民及移民服务局运行一个计算机生成的随机选择过程。他们首先挑选出 2 万名拥有硕士学位或更高学位的申请人,然后他们运行同样的随机选择过程,从常规配额中挑选出剩余的 6.5 万名申请人。

对于外国人来说,H-1B 是他们在美国发展事业和建立新生活的黄金通行证。许多国际学生就读美国大学,希望通过 H-1B 签证获得绿卡。对川普和他的支持者来说,H-1B 是公司获得廉价外国劳动力的门票,阻止了美国公民获得这些工作。

川普任总统期间,通过了购买美国货和雇佣美国人的行政命令,极大地冲击了 H-1B 计划。该命令指示国土安全部将 H-1B 签证授予技能最高或受益者收入最高的外国公民。H-1B 的申请变得更加复杂,雇主必须进一步提供额外的证据证明申请人的技能是专业知识。

作为一名国际学生,我想进一步调查这项行政命令对 H-1B 签证的影响。因此,我对来自美国劳工部的 H-1B 签证数据集进行了探索性数据分析。我专门看了 2011 年到 2018 年的数据。代码片段可以在 Github 上找到

在探讨行政命令的影响之前,我想先了解 H-1B 签证申请人来自哪里。这张地图突出了申请者的位置。从图 1 中,我们可以看到大多数 H-1B 签证申请人来自加州、纽约州和得克萨斯州。

为了看到购买美国货和雇佣美国人行政命令的影响,我可视化了 2011 年到 2018 年的申请数量。蓝条代表奥巴马任总统期间的申请数量,红条代表特朗普任总统期间的申请数量。下面的柱状图表明,在奥巴马担任总统期间,申请人数逐年递增。然而,随着特朗普总统任期的开始,申请数量明显下降。这一过程变得不确定和复杂,因此申请人数减少了约 120,000 人,占申请总人数的 18.12%。

不仅 H-1B 签证申请数量下降,而且 H-1B 签证的批准比例也下降了。从美国公民和移民服务局提供的数据可以看出,申请数量明显下降。从 2017 年到 2018 年,有 8.1%的申请量下降。这可以解释为国土安全部的努力,只授予外国公民谁是最熟练的或有最高收入的受益人。

通过比较 2015 年和 2018 年申请 H-1B 签证的公司,也可以看出国土安全部雇用最有技能的外国公民的努力。2015 年,申请 H-1B 签证最多的三家公司是印孚瑟斯有限公司、塔塔咨询公司和威普罗有限公司。过去,大部分 H-1B 签证都给了这些印度外包公司,这些公司通常雇佣工资较低、专业知识较少的外国工人。

然而,如果我们将这一数字与 2018 年 H-1B 签证申请人数进行比较,申请 H-1B 签证的公司之间存在显著差异。像德勤咨询、Cognizant Technology Solutions 和谷歌这样的公司申请的签证数量最多。此外,印孚瑟斯的申请人数大幅减少。这意味着现在是美国大公司在雇佣这些外国工人签证,取代了印度外包公司。

从批准的 H-1B 签证数量和比例的下降可以看出行政命令的影响。它也改变了雇佣 H-1B 签证申请人的公司,从印度外包公司到财富 500 强公司。它还有其他意想不到的影响,比如减少申请美国大学的国际学生数量。根据美国国家科学委员会的数据,2016 年秋季到 2017 年秋季之间,本科招生人数下降了 2%,研究生招生人数下降了 5%。

2019 年 1 月 11 日,川普在推特上写道,“美国的 H1-B 持有者可以放心,变化很快就会到来,这将为你的逗留带来简单性和确定性,包括潜在的入籍途径。”我期待着研究这一变化对 H-1B 签证的影响。

对于这些建议的更深入的分析,探索性的数据分析,以及机器学习算法的源代码,请随时查看我的网站

美国劳工在没有降落伞的情况下自由落体,我们认为我们仍然安全地在飞机上

原文:https://towardsdatascience.com/american-labor-is-in-free-fall-without-a-parachute-and-we-think-were-still-safely-in-the-plane-173a30b1b9bd?source=collection_archive---------16-----------------------

美国人热爱工作。它提供收入来支持我们热爱的事情,它给我们一个早上醒来的理由。它给我们一种目标感,我们中的许多人通过我们所做的来定义自己。我们是销售助理、营销经理、企业主、裁缝、会计师、木匠、工程师和程序员。我们一生中花了 80,000 个小时来磨练我们的行业技能,向世界展示我们能够带来的价值。这是美国成为历史上最勤劳的国家之一的原因之一。从我们记事起,我们的目标就与国内和国际市场直接相关,我们为自己是最好的、生产最多的、工作最努力的而自豪。

美国梦是建立在这样一个理念之上的:如果你努力工作,把你与生俱来的能力带到市场上,你会得到舒适生活的回报:在漫长的一天结束时,与你重要的另一半和 2.5 个孩子一起享受“白色栅栏”(或你的版本)。可悲的是,对于美国的大部分人来说,警报正在响起,我们所有人的梦想正在严酷的晨光中悄悄溜走。

传统思想告诉我们,如果我们想工作并为世界提供价值,我们可以很容易地做到这一点,就在我们自己的社区,但最近的历史给这种说法留下了一些漏洞。它始于大衰退,就业率直线下降,X 一代第一次尝到了这种逐渐消失的想法:即使你有价值可提供,也不总是有地方容纳它。许多人认为我们已经度过了那个时期,就业率又开始上升了。看看最近失业人数的减少,有人可能会认为就业市场已经回到正轨,但这些数字不再是一个有用的指标,我们在未来十年将会猛然醒悟。

尽管最近就业人数有所上升,但另一个重要指标一直在下降:企业诞生与企业死亡的比率。自 1970 年以来,大萧条第一次导致了企业诞生与企业死亡的负比率。虽然我们略有回升,但这些数字仍在大幅下降。

这不仅仅是美国农村地区的问题,我们知道那里的制造业工作在减少,这也是我们大都市地区的一个真实问题,越来越少的人在这些集中的地区有他们期望的就业机会。

今天的美国比 12 年前少创办了 100,000 家企业,这意味着随着未来几年新人加入劳动力大军,就业机会会更少。不仅仅是我们的下一代的工作机会减少了,今天的劳动者的工作机会也减少了。我们的生产率产出,被经济学家吹捧为经济进步的标志,在过去十年中显著增长,但生产率的增长对就业几乎没有什么作用,而就业是我们在过去十年中看到的膨胀所需要的。

我们生产得越来越多,但人手却越来越少,自动化是问题的根本原因。《金融时报》表明,尽管当前的公共行政部门很快指责与中国和该地区其他国家的贸易和外包,美国发生的近 85%的失业是由于自动化和人工智能的进步,而不是竞争对手的国家。

这都是非常理论化的,除非我们变得具体,否则很难理解发生了什么。让我们谈谈卡车运输。

在我们这个时代,有无数种职业选择,但有一种在美国非常普遍,那就是卡车运输。你可能会问,卡车运输有多大?请看下面的地图,它详细描述了美国各州最常见的工作。

数一数。在美国 50 个州中的 29 个州,卡车司机是最普遍的职业。这是美国的五分之三,或 60%,卡车驾驶是最常见的工作。仅在内布拉斯加州,12 个就业人口中就有 1 个受雇于卡车司机。在全国范围内,有 350 万名卡车司机,他们的每一份工作在未来 5 年内都适合自动化接管。

卡车运输是一个价值 7000 亿美元的行业,劳动力几乎占运输成本的 75%。这个数字甚至还没有考虑到720 万在全国各地的卡车停靠站、加油站、餐车等场所工作的工人,在这些地方,卡车司机是每项业务持续运营的持续和关键部分。我们都已经看到了关于自动驾驶汽车进步的文章,以及一旦政府批准无人驾驶汽车和卡车上路,特斯拉的半卡车将完全配备自动驾驶。技术不是一辆可以停下来的火车,你要么上车,要么被甩在后面,或者在这种情况下,被碾过去。

无人驾驶汽车即将到来,一次又一次的测试表明,它们比任何人类驾驶员都更安全、更可靠。我们人类在很多方面都堪称典范,驾驶不在其中。一次盯着同一件东西看几个小时,我们的生理机能会让我们感到疲劳。我们染上了酗酒和吸毒的恶习,这妨碍了我们正确驾驶车辆的能力。机器和人工智能没有这个问题。他们总是完全按照指示行事。他们的指示很明确,并且严格执行。2016 年和 2017 年,仅在美国就有大约 3.7 万起机动车死亡,每年。想想这个数字,37000 人死亡。如果你放眼全球,这个数字会上升到 125 万。以任何标准来衡量,这都可以算作一场公共健康危机,但是因为我们对机动车死亡进行了标准化处理,所以没有人会对此视而不见。自动化正试图改变这种游戏,对我们认为的随意做出重大改变。正如芬恩·墨菲对《卫报》所说,随着人类进入自动卡车和机动车辆的环境,在分析过去时,“他们将会像人们现在看待一个吸烟的孕妇一样看待司机驾驶的车辆。”

如果自动驾驶和卡车运输的好处如此之大,或许我们应该接受这一即将到来的变革浪潮,因为它将拯救许多人的生命。由于卡车司机的支持减少,现在数百万人失业,数百万人被解雇,经济会怎么样呢?让我们让他们重新接受培训,找到一份新工作,经过几个月的努力,他们可以为自己和家人找到一条新的谋生之路。政府最强有力的再培训项目之一叫做贸易调整援助,简称 TAA。近年来,许多已经关闭的工厂依靠 TAA 来保留他们以前雇佣的数千名工人。他们可能会关闭工厂,因为自动化减少了人类的工作需求,但这里有很多忠诚,业主不想让他们以前的工人处于困境。问题是:TAA 实际上不起作用。

TAA 虽然提供资金补贴失业工人的教育,特别是那些被淘汰出体力劳动行业的工人,但事实证明这种做法基本无效。再培训的努力经常失败,原因是人们不能利用所提供的服务,或者仅仅是缺乏工作机会。那些成功通过 TAA 的人最终往往会变得更糟,他们每年挣的钱比那些失业的同龄人要少。只有 37%的 TAA 获得者最终从事了与他们在该项目中所受培训相关的职业。主要的问题是,虽然培训为人们提供了新的技能,但它并没有创造任何就业机会。仅仅因为一家工厂倒闭了,并不意味着另一家工厂会开张,或者许多同等的企业会开张。事实上,事实往往相反,随着工厂关闭,人们的支出减少,该镇的整体经济下滑,没有走出螺旋式下降的真正出路。

当这些人被踢出他们的工作,没有真正的前景,他们往往会完全离开就业市场,从工资单和劳动力统计中消失。特别是在最近 10 年,平民劳动力参与率急剧下降,这意味着越来越多有工作能力的健全人决定完全退出该体系。

这些辍学的人没有一个真正被计算到我们的政治领导人喜欢炫耀的失业数字中。这些数字只考虑了那些正在积极寻找下一个就业机会的人,而没有考虑那些已经看到正在发生的事情并已经放弃这个系统的人。情况并不像看上去的那样,因为人们是在一个没有看到全貌的糟糕的数据和解释的前提下运作的。失业率不再是我们用来判断美国劳动力健康程度的唯一指标。当生产率飙升,企业利润飙升,但就业机会和新企业停滞不前时,必须警惕危险信号。再加上实际参与市场的人越来越少,在我们的资本主义体系中创造的价值越来越少,你就有了一个灾难的配方。我们正面临现实的猛烈冲击,而现场没有降落伞来帮助减轻即将到来的打击。

这个国家是建立在创新的基础上的,对吗?创新者应该停止创新吗?在技术、自动化和人工智能领域引领这些飞跃的人应该停止他们正在做的事情,还是为他们正在创造的东西感到内疚?一点也不。这些是令人难以置信的人类进步,没有人能阻止进步,也没有人能限制人类的想象力和创造力。杨安泽告诉我们“…搞清楚他们所做的事情的社会影响不是创新者的工作。他们的工作是尽可能经济高效地创造和资助市场创新。这本身就是一项困难的工作。对社会负责是我们的工作。也就是说,这是我们政府和领导人的工作。”

如果你正在阅读这篇文章,你可能是我们这个世界的创新者之一,他们正在直接或间接地帮助推动这台自动化和人工智能的机器向前发展。你是未来的一部分,我们作为人类应该为你的成就感到骄傲。作为塑造未来的精英中的一员,虽然没有什么过错要承担,但有责任用你的声音和影响力来保护你的人类同胞。我们的政府和我们的领导人需要回头看看这列火车,这样我们才能尽可能地减轻损失。我们前进的未来是一个充满安全、信息和丰富知识的未来,但也可能是一个极不平等的未来。你有能力塑造它,确保它对我们所有人都是强大的。

美国手语手势识别

原文:https://towardsdatascience.com/american-sign-language-hand-gesture-recognition-f1c4468fb177?source=collection_archive---------13-----------------------

Image Source: Public Domain

这个项目和博客是由 拉维尼·迪亚斯拉沙·冯特诺凯蒂·格兰特克里斯·亨森 希万克·索德 共同努力的
请访问我们的
Github
资源库获取项目实现代码。****

概观

虽然出现了新的和可获得的技术来帮助听力残疾者,但仍有大量工作要做。例如,机器学习算法的进步可以通过提供使用计算机视觉应用程序更好地交流的方法来进一步帮助聋人和重听人。我们的项目旨在做到这一点。

我们试图创建一个能够识别美国手语手势的系统。由于美国手语有静态和动态手势,我们需要建立一个系统,可以识别这两种类型的手势。本文将详细介绍我们项目的各个阶段。

项目总结

****目标:建立一个能够正确识别与手势相对应的美国手语手势的系统

****方法:我们项目的静态手语数据是图像形式的。我们训练了一个卷积神经网络(CNN)来识别这些图像中每一个所代表的标志。我们使用的动态手语数据集是由 LeapMotion 控制器(LMC)收集的,并且是每隔几毫秒收集的每只手的每个关节的(x,y,z)坐标的形式。我们对这些数据进行特征设计,以获得有用的相对运动数据,然后在经典分类模型上对这些数据进行训练,以识别与每个 LMC 输入相关的特定符号。

****应用:我们提出的系统将帮助聋人和重听人更好地与社区成员交流。例如,曾经发生过聋人在需要时与急救人员沟通有困难的事件。尽管应答者可能会接受手语基础的培训,但期望每个人都能完全流利地使用手语是不现实的。沿着这条线,计算机识别方面的这些进步可以帮助第一反应者理解和帮助那些无法通过语言交流的人。

另一个应用是使聋人和重听人能够平等地获得视频咨询,无论是在专业环境中还是在试图通过远程医疗与他们的医疗保健提供者沟通时。这些进步将使听力受损者能够获得有效的视频通信,而不是使用基本的聊天。

****性能:所提出的静态图像模型能够以 94.33%的准确率识别静态标志。基于我们对动态标志的分析,我们意识到需要首先识别标志是单手还是双手标志,然后识别标志本身。我们为动态手势提出的最终模型能够以 88.9%的准确度识别单手手势,以 79.0%的准确度识别双手手势。

静态标志

数据收集和预处理

使用来自 Kaggle 的手语 MNIST 数据集,我们评估了对字母表中每个字母的手势进行分类的模型。由于字母 J 和 Z 中涉及的运动,这些字母不包括在数据集中。然而,该数据包括字母表的剩余 24 个字母的大约 35,000 个 28×28 像素图像。与 MNIST 手绘的原始图像相似,该数据包含每幅图像中 784 个像素的灰度值数组。其中一张图片如下所示。

Figure 1: Sample image of the letter “C” from the training dataset, Public Domain

学习/建模

我们使用卷积神经网络(CNN)模型对第一个数据集中的静态图像进行分类。构建神经网络时,我们的第一个目标是定义输入层。28x28 图像包含 784 个像素,每个像素由从 0(黑色)到 1(白色)的灰度值表示。通过将每幅图像转换成一系列数字,我们将数据转换成计算机可读的格式。

一旦准备好输入层,就可以由神经网络的隐藏层进行处理。我们的神经网络的架构可以在下面看到。

Figure 2: The architecture of the Convolutional Neural Network, Public Domain

第一个隐藏层由几个节点组成,每个节点取 784 个输入值的加权和。输入的加权和然后被输入到激活函数中。对于我们的网络,我们使用了整流线性单位,或 ReLU。

Figure 3: ReLU activation function, Public Domain

上图显示,当输入为负时,ReLU 将输出 0,否则不会改变输入。ReLU 的输出将作为网络中下一个隐藏层的输入。

为了更好地理解每个隐藏层如何转换数据,我们可以可视化每个层的输出。我们的第一层有 32 个通道,因此上述过程重复 32 次。这允许网络在每个图像中捕捉几个特征。如果我们输入之前显示的描绘字母“C”的图像,我们将获得以下 32 个输出。

Figure 4: Outputs from the first hidden layer, Public Domain

在这里,我们看到每个通道如何稍微不同地变换图像。基于这些图像,网络似乎正在提取关于人的手的边缘和大致形状的信息。随着数据继续在隐藏层中移动,神经网络试图提取更多的抽象特征。下面是第四个隐藏层的输出。这些图像不太容易被人眼理解,但对网络非常有用,因为它试图将图像分类到 24 个潜在类别中的一个。

Figure 5: Outputs from the fourth hidden layer, Public Domain

一旦数据通过了神经网络的卷积层和最大池层,它就进入平坦层和密集层。这些层负责将数据减少到一维,并识别图像的类别。

在定义了 CNN 的架构之后,我们试图通过选择一个合适的历元数来优化模型的性能。前面我们提到过,每个节点取其输入的加权和。应用于每个输入的权重通过训练过程学习,并随着每个时期更新。一个历元是所有训练数据的一次传递。在第一个时期,神经网络估计每个权重的值。对于每个随后的时期,神经网络用减少总损失的值来更新这些权重。一般来说,更多的时期导致更准确的分类器;然而,更多的时代也产生更复杂的模型。使用验证集,我们确定 10 个历元为我们提供了准确性和复杂性之间的最佳平衡。

结果

用于构建和优化模型的训练和验证数据集包含 80%的原始数据。剩余的 20%(约 7000 个样本)用于模型测试。将该测试数据输入到模型中,准确率达到 94.33%。为了进一步了解这个模型的优点和缺点,我们创建了一个混淆矩阵。

Figure 6: Confusion matrix of the CNN’s outputs on the test data, Image by authors

从混淆矩阵中,我们看到最常混淆的两个符号是字母“M”和“S”。这些标志的图像如下所示。

******

Figure 7: Image of the letter “M” (left) and “S” (right), Public Domain**

基于这些图像,很容易理解为什么我们的神经网络在区分这两种迹象方面有困难。在未来的工作中,我们将使用分辨率更高的图像,以便从图像中提取更复杂的细节。希望这将进一步提高我们模型的准确性。这个模型的另一个限制是它不能识别移动的符号,例如字母“J”和“Z”。在下一节中,我们将探索一种能够更好地识别动态标志的数据源。

动态标志

理解数据

我们项目的第二阶段将专注于动态标志(即移动标志)。该数据集由 25 个受试者组成,每个受试者使用 LeapMotion 控制器(LMC)用他们的左右手执行相同的 60 个美国手语手势。因此,这个数据集有 60 个不同的美国手语符号(或类别标签),我们试图准确预测。

LMC 装置每 0.04 秒记录一次手指、关节、手掌、手腕和手臂的位置。换句话说,LMC 获取手部骨骼关节的空间坐标以及这些坐标如何随时间变化。我们的第二个数据集由这些坐标点组成。

让我们使用图 9 来更详细地理解这些数据的本质。

Figure 9: Pictorial representation of the hand as seen by the LeapMotion Controller, Public Domain

掌骨、近端骨、中间骨和远端骨指的是解剖学手指的四块不同的骨头。Leap Motion 数据集在符号持续时间内每 0.04 秒为我们提供每个手指中每个骨骼的(x,y,z)坐标。它也给了我们手掌、手腕和手臂的坐标。总之,这些坐标点作为时间的函数提供了可用于识别手势(或 ASL 手势)类型的辨别信息。

特色工程

意识到我们需要每个测试对象的数据帧具有可比性,我们首先通过获取每个连续坐标行的差值来转换每个数据帧,给出手的每个部分(x、y 和 z 坐标)在 Leap Motion 设备记录的每个测量值之间移动的距离。对于在动作捕捉期间识别的手的 54 个部分,这以大约 0.04 秒的间隔捕捉运动。每个转换后的数据帧由 398–1203 个时间间隔组成,每个时间间隔有 162 列坐标数据。

在这种差异之后,我们接下来试图导出在给定的时间间隔内捕获关于手的运动的信息的特征。我们决定取每一列的平均值和标准差。虽然这可能看起来相对简单,但我们发现这是一种计算成本低廉的获取信息的方式。

考虑这些差异列的平均值代表什么。这是手的每个部分在每个时间间隔内移动的平均距离。同样,取这些列中每一列的标准偏差代表该位移的变化。换句话说,这是速度的代理。(令人惊讶的是,增加对每一点速度的实际计算实际上降低了精度!)

除了这两组特征之外,我们还尝试识别具有强相关性的手部坐标对,并使用多项式权重作为用于分类的特征。虽然这在减少的数据集(10 个类别与所有 60 个类别相比)中产生了准确性的增量收益,但这并不能很好地扩展到整个标志集。

我们的另一个想法是利用手指形成的角度。我们计算了远端和中间骨之间关节的内角,以及中间骨和近端骨之间关节的内角。但是,将这些角度添加到先前导出的每个关节的均值和标准差特征中,表明独立变量中存在多重共线性。仅使用导出的角度特征在 10 个类的缩减数据集上产生了可接受的分类精度,但是它没有很好地扩展到所有 60 个类的数据集。

学习/建模

最初,我们的团队通过查看由数字符号 0 到 10 组成的数据子集来开始模型选择,开发了上述特征。我们意识到的是,这些符号的子集很容易被区分,因为它们中的每一个都只使用一只手来完成符号。意识到这一点意味着静止的左手只会对数据集产生噪声,我们移除了所有源自左手的坐标,并看到分类准确性的显著提高。

现在想把它扩展到我们的全部数据集,我们用双手,再次使用上述特征,并注意到准确性的显著下降。在试图确定我们的模型无法区分不同标志的地方,我们发现对手语的更好理解将为我们的模型管道提供信息。

我们首先尝试有条件地识别哪些手势只使用一只手,目的是将我们的数据集分成两组。通过手动检查符号和为我们的特征均值开发阈值,我们通过识别其左手属性看起来是静止的数据帧,将数据集分成 22 个“双手”符号和 38 个“单手”符号,如通过左手坐标中的平均绝对偏差之和所测量的。然而,这种区别往往很不清楚。

由于我们团队的成员对美国手语远非流利,我们不得不做一些研究来更多地了解我们数据集中的手语。我们开始确定有多少人,哪只手参与了每个单词的签名。对我们来说幸运的是,网站 Signing Savvy 提供了一本美国手语词典,里面有各种不同的单词手语视频。例如,单词“bug”可以有两种不同的签名方式,这取决于该单词的使用方式。这两种手势在签名时都只用右手。另一方面,“成本”这个词涉及到双手,但只有一只手在运动(视频)。使用这个网站,我们能够了解我们数据集中基于应用的标志差异。在我们的数据集中的 60 个单词中,有 9 个可以用双手或只用右手签名(开车、来、花费、完成、走、快乐、受伤、小、什么时候)。

尽管在单手和双手手势之间分割我们的数据集存在困难,但我们发现这种方法显著提高了我们对完整数据集的准确性。

型号选择

在创建了前面提到的特征之后,我们用几个分类器进行了实验。下面是两个箱线图,显示了我们单手和双手标志上各种型号的性能。最终,我们认为线性判别分析(LDA)具有更好的性能。以下是我们进行 100 次测试/训练的准确度结果:

****

Figure 10: Comparison of model performance for one-handed signs (left) and two-handed signs (right), Images by authors

结果

图 12 中的图显示了我们的模型使用 LDA 运行 100 次的结果,每次迭代采用不同的随机选择的训练/测试分割,该分割由我们的分类标签分层。两条信息立刻凸显出来。首先,分离单手和双手手势的策略非常有用。第二,给定一组随机的训练数据,我们的模型精度在分类精度方面具有相对高的标准偏差。然而,考虑到 25 名受试者的小样本量,这并不奇怪。

Figure 12: Distribution of classification accuracy for different train/test splits, Image by authors

上面的图表明,我们的双手手势比单手手势更容易被系统地错误分类。自然的问题是识别出对我们的模型可能有问题的特殊标志。下表显示了最常见的混淆迹象:

Table 1: Some of the signs that were misclassified with each other, Image by authors

表 1 显示了相互错误分类的符号,即“来”的符号被错误分类为“大”或“有”。同样,在我们的数据集中,“红色”的符号被误认为是“哭泣”。这是意料之中的,因为这两对星座的运动非常相似。

此外,整个模型的错误分类可以分为两类。

  1. “预测过度”的迹象。换句话说,当实际的征兆是别的什么的时候,这些征兆就被预测了。这相当于两类问题中的误报。
  2. “预测不足”的迹象。换句话说,应该预测的时候没有预测到的迹象。这相当于两类问题中的假阴性。

下面是识别这些情况的两个图表:

Table 2: The list of ‘over-predicted’ signs, Image by authors

Table 3: The list of ‘under-predicted’ signs, Image by authors

例如,标志“冷”(链接到视频)经常无法预测。直觉上,我们看到的是,因为这个符号涉及双手在非常小的运动范围内移动,所以我们的模型很容易预测这个符号来代替另一个符号。

为了进一步可视化这些体征在我们的分类模型中的表现,我们基于“一对静止”分类(仍使用 LDA)为每个体征生成 ROC 图,其中对于每个单独的体征,我们将我们的模型视为与两类模型一起工作(例如“冷”对“不冷”)。下面我们看到了最有问题的迹象之一的结果:

Figure 13: ROC for the word ‘Coat’ versus the rest of the signs, Image by authors

Figure 14: ROC for the word ‘Cat’ versus the rest of the signs, Image by authors

结论

虽然这一分析为美国手语识别奠定了坚实的基础,但要实时应用这一概念,还需要做更多的工作。这需要进一步使用 LeapMotion API 来实现数据的实时生成、模型的反馈以及单词和/或数字的识别。这也将要求模型能够处理它目前处理的 60 多个类别标签。

总之,我们认为这种应用在改善听力受损者的生活方面具有真正的潜力,因此这将是一个值得继续开发的目标。

参考

  1. http://blog.leapmotion.com/getting-started-leap-motion-sdk/
  2. https://www . researchgate . net/figure/ReLU-activation-function _ fig 3 _ 319235847
  3. https://www . ka ggle . com/data munge/sign-language-Mn ist # sign _ Mn ist _ test . zip
  4. https://data.mendeley.com/datasets/c7zmhcfnyd/1

美国的集群共识

原文:https://towardsdatascience.com/americas-clustered-consensus-6a1a714a286e?source=collection_archive---------31-----------------------

使用无监督的机器学习技术来更好地理解美国大多数选民是如何获得或没有获得他们想要的东西的

Photo illustration by author. Original photo by Paul Weaver used via an Unsplash license.

***到底怎么了?*****

如今,民主党不断受挫的一个原因是,公众意见似乎没有直接转化为公共政策。例如,大多数美国人希望看到竞选财务改革、枪支所有权背景调查、化石燃料消耗减少。然而,尽管压倒性的公众支持促成了一些强大的基层运动,甚至一些地方一级的行动,但我们还没有看到我们所期望的由如此大多数人实现的全国性公共政策行动。

这个难题是一个有许多拼图块的难题。在这里,我不打算尝试解决整个难题,而是提出一个特定的拼图块,可以帮助其他块点击到位。我把这个特殊的拼图块叫做“议题拥挤”:个人选民通常在大多数但不是所有议题上都得到很好的代表,选民没有得到很好代表的比例因议题而异,特别是当一个代表可能必须代表多个议题时。

代议制民主中问题排挤其他问题的想法不应该太令人惊讶——在我看来,这是社会选择理论中其他想法的表亲,如“话语困境”和“孔多塞悖论”。我不想在理论基础上对此进行论证,而是想提供来自数据分析中机器学习方法的经验证据,表明这是一种可测量和可量化的现象。

我从两个关键前提开始:

  • 首先,政治代表的机会是有限的** —也就是说,只有这么多人竞选民选职位,除此之外,只有这么多宣传和公民社会的机会可供人们在选举日之后影响政策制定过程**
  • 此外,由于这种政治经济的性质,代表们倾向于采用反映选民政治偏好“重心”的政纲。此外,这些代表将试图说服个人选民的政治偏好更接近他们自己的平台,从而形成一个积极的反馈循环。

换句话说,无论是正式代表(由民选官员代表)还是非正式代表(由公民社会代表),当选民通过代表表达他们的政治偏好时,他们会被归入与他们的政治偏好在很大程度上(但不完全)类似的其他选民。这反过来又会造成一种局面,即在一个问题上大多数公众意见不足以保证大多数人喜欢的公共政策结果。

考虑下面的动画图表。每个点代表一个选民,把横轴想象成“经济问题”,纵轴想象成“社会问题”可能会有所帮助。

Difference between their individual voters versus their clustered representation. Animated illustration by author. Illustration + animation by author.

在这里,虽然橙色点占大多数(17 到 13),但当代表沿着水平轴分层时,多数蓝色“斑点”的代表占大多数(2 到 3)。蓝点赢了,尽管是少数,而且不一定是因为任何邪恶的东西,除了是数学事故的幸运赢家。

在接下来的内容中,我提出,这个我称之为“问题拥挤”的数学事故,可以通过聚类分析的机器学习技术以有意义的方式进行测量。我首先简要概述了允许我计算我称之为“集群优势”的技术,描述了如何计算和解释集群优势得分,然后尝试对我的结果进行描述性分析,表明这种测量如何可能对政策企业家和政治科学家等有价值。

集群 101

聚类分析——根据许多不同变量的相似性将许多对象分组在一起的过程——是一个计算密集型过程,通常属于“人工智能”(AI)和“机器学习”(ML)的范畴。

这里值得暂停片刻,并认识到,在大多数情况下,人工智能和人工智能不一定是民主的好东西(例如,见这里的、这里的、这里的和这里的)。我相信这其中的一个原因是因为人工智能和人工智能经常被用于预测,这通常会将决策权从人们手中夺走,并将其放在计算机的“黑匣子”中——当然,人类很难与计算机进行辩论!

在这里,为了描述的目的,我将重点放在聚类分析的能力上——也就是说,使用计算机的能力来创建一个新的现实地图,该地图可以检测人类否则无法观察到的模式,甚至可能指出挑战文化中根深蒂固的假设和刻板印象的关联。这种计算机生成的描述旨在帮助人类做出正确的决策,而不是取代它。作为这种描述性机器学习的一个例子,耶鲁大学气候变化交流项目使用聚类分析生成了他们的 全球变暖的六个美洲;对于这个项目,我有兴趣看看聚类分析是否可以同时应用于多个问题。

为此,我使用了来自选民研究调查(选民)的观点的数据子集,以 1-4 或“非常重要”到“不重要”的等级衡量美国选民对广泛问题的关注程度(注意,这个问题是在 2016 年 12 月和 2017 年 7 月提出的;当受访者在这两年都给出答案时,我使用了更近的 2017 年 7 月的回复)。我最终使用的特定算法是 Ward 的方法,用于生成凝聚层次聚类。

鉴于当代美国的两极分化和对各种参数的实验,我发现数据的第一次划分产生了通常与“左和中”相关的两个集群,大约占样本的三分之二,然后是“右”,剩余的三分之一。但是因为我使用了一种分级聚类方法,计算机可以挖掘得更深,并在其中创建更多的聚类。

下面显示的是由该过程生成的许多聚类之一的图形解释(当我们告诉计算机总共生成 11 个聚类时):

This graph is only one of many being considered simultaneously (that is, number five in a set of eleven). Don’t try to make too much sense of it, other than trying to understand what a single cluster represents! If you really want to go deep, I have a document that visualizes a whole set of clusters along with their family tree (click here). Illustration by author.

绿色条(右边)表示,对于特定的群体整体而言,这个问题被认为比所有美国人的平均水平更重要。红色条(左侧)表示该问题被认为不如平均水平重要。

随便看一下这个集群,它代表了大约 3%的美国人口,表明它是美国政治右翼的一个子集群。在许多方面,它满足了我们常见的刻板印象(即,不太关心同性恋权利和气候变化,更关心政府的规模和犯罪)。但是至少有一个明显的例外出乎我们的意料:宗教自由

如果我们更仔细地观察,我们会发现集群的另一个重要动态。即使对于该组中趋向于“非常重要”的问题,例如政治中的金钱,仍有少数受访者认为该问题“不重要”。同样,对于该群中趋向于“不重要”的问题,例如家庭和医疗休假,有少数受访者认为该问题“非常重要”。如果我们要创建更多的集群,这些离群值可能会形成一个新的集群;同样,这个群体很可能代表了总体“右”群体中的许多离群者,他们认为宗教自由“不重要”。

一旦我们有了我们的集群,我们现在可以计算“集群优势”分数。

计算和解释集群优势

简单地说,群集优势是群集的组合百分比大小,其中特定问题的趋势比平均值更重要(即,在上面的图形表示中由右侧的绿色条表示)。然后我们减去 50,这样更容易理解。数学上:

想象一下,如果我们有四个集群,分别占总人口的 10%、20%、30%和 40%。对于一个特定的问题,比如说医疗保健,10%和 30%的聚类趋势是负面的,20%和 40%的聚类趋势是正面的。那么聚类优势得分将为+10(即 20+4050)。

那么我们如何解释集群优势分数呢?正的集群优势分数表明对这些问题的支持分布均匀,而对这些问题的冷漠或敌意高度集中(也就是说,与他们对民主代表的最佳选择相比,诋毁者更有可能是特殊的)。负的集群优势分数表明了相反的情况。

想象一下这会给民主进程带来什么样的后果,想想 2016 年和 2018 年的美国众议院选举。众所周知,不公正的选区划分操纵了美国众议院,主要有利于共和党,也就是说,用我们的话说,共和党绘制了地图(战略性地将选民分散开来,并将反对派集中到特定的地区),以便给自己带来积极的代表优势。

Note that some numbers might not add as expected up due to rounding and third-party popular votes. Illustration by author. Original photos of Nancy Pelosi and Paul Ryan available in the public domain.

我们看到,在 2016 年,共和党在普选中领先 1%,但在席位方面取得了 11%的优势(11 比 1 的比例!).与此同时,在 2018 年,当民主党在普选中领先 9%时,他们在席位方面只获得了 8%的优势(8 比 9 的比例!).

The “bowtie plot” from Samuel Wang, “Three Tests for Practical Evaluation of Partisan Gerrymandering”, Stanford Law Review: Volume 68. June 2016. Page 1286.** In the terms of our argument, this graph represents a Cluster Advantage of 0: a 50%-50% vote share results in 50%-50% representation; if there was a positive Cluster Advantage, then the intersection point would shift to the left. Notice how, after factoring out third party votes, the 2018 and 1964 U.S. House election results are within the reasonable “eu-proportional” zone, but the 2016 U.S. House election results are in the “dysproportional” zone.**

虽然有人只看 2018 年的结果可能会认为这可能似乎公平,甚至对民主党人稍微有利:53%的选票导致 54%的代表权。错过的是,与 2016 年的比较清楚地表明,民主党人必须以 9%的优势击败共和党人,才能获得这种一对一的投票代表制!在“得票最多者当选”的地区选举,比如美国众议院代表的选举,或者比如说加拿大联邦选举,普选中的优势在代表性方面得到了某种程度的乘数红利。一个明显的例子是 1964 年的美国众议院选举,57%的普选结果是民主党赢得了 68%的席位!

这幅插图,从黑白(或者红蓝?)党派政治的世界有助于我们更好地理解我们的问题的利害关系,在这个问题上,多个问题同时被考虑。我敢打赌,集群优势指标有助于我们估计这个代表乘数在哪个点开始起作用。如果集群优势为 0,那么当大众投票分为 50%-50%时,代表人数也应同样分为 50%-50%。但是,如果有+10 的集群优势,我们可能会期望 50%-50%的民众投票会产生更接近 55%-45%的代表性(即 10%的差异);反之亦然,对于任何高于 40%的民众投票百分比(低于 50%的 10%),代表乘数可能开始起作用,因此可能只需要 45%的民众投票就可以实现民众投票百分比和代表百分比之间的 1 比 1 的比例。

免责声明: 需要更强大的数学理论来更好地量化甚至证明大众投票、集群优势和代表比例之间的这种关系。为了代替这种专业知识,我提供了这些“经验法则”评估指南,用于严格根据我自己的直觉来解释集群优势。

结果和解释

我用党派界限的地理不公正划分作为“问题拥挤”现象的具体对比,我试图用“集群优势”度量来描述“问题拥挤”现象。然而,还是有一些重要的区别。首先,不公正的选区划分是操纵系统使之有利于一个政党的卑鄙企图,而议题拥挤只是一个数学上的意外。第二,虽然不公正的选区划分基本上可以通过看地图和做一些奇特的几何图形来衡量,但问题拥挤是一种更加多维和主观的现象。

为了克服这些和其他统计上的挑战,我让计算机生成了 100 多个聚类方案,每个方案的参数都略有不同。然后,我汇总了 20 组最具信息量的集群优势得分,得到了下面的结果。

Table illustration by author.

绿色突出显示的问题是正的集群优势分数超过误差范围的问题,而红色突出显示的问题是负的集群优势(或“集群劣势”)分数超过误差范围的问题。请记住,这些数字并不代表总体的公众支持(如果是这样,这份名单中的首要问题将是“经济”、“医疗保健”和“就业”),而是这些数字给了我们一种方式来预测民意调查可能如何预测政策结果!

当然,统计数据不是自我解释的。下面,我给出了这些数字的更多背景,以更好地说明聚类分析对政策企业家和政治科学家的价值。但是,请随意查看上面的数字,自己去理解它们——我的猜测远不是这些数字意味着什么的最终结论!

种族平等

以高达+22.5 的集群优势得分高居榜首,我们看到种族平等是一个在选民中特别有利的问题。这可能部分是由于关于“交叉性”的进步话语,将围绕种族问题的激进主义与其他明确定位的问题(例如,性别平等、同性恋权利、环境和贫困都具有积极的集群优势得分,尽管重要性程度不同)结合起来。但更容易看到这种集群优势对政治右翼的影响,许多共和党代表经常发现自己在与自己党内公开的种族主义分子玩打地鼠游戏(例如,在发表白人至上的言论后将众议员史蒂夫·金从委员会分配中除名,以及公然的种族主义平台通常仍然是一种失败的选举策略,尽管目前白宫言辞激烈(注意,鉴于现代初选和选举人团的双重打击,美国总统不一定是这种集群分析很有意义的代表办公室)。

探亲假和病假

我现在还不清楚为什么这组问题能够获得+15.9 的集群优势分数。已经有了一些两党共识的迹象,包括 T2 对伊万卡·特朗普的支持,这也许强化了这不一定是一个沿着典型的政党路线两极分化的问题。然而,特别是因为在过去的许多年里,这不是一个主导新闻周期的“热点问题”,我的最佳猜测是,有利的集群优势分数只是由于偶然。然而,这种随机性并没有减少这样一个事实,即这个数字对于家庭和医疗休假倡导者来说是个好消息,他们可以声称在他们的竞选活动中顺风顺水,向他们的支持者争辩说,现在是齐心协力将公众意见转化为公共政策的最佳时机。

环境和气候变化

不出所料,这些密切相关的问题分别与+12.8 和+12.1 的集群优势得分密切相关。这里可以收集到一些假设:

  1. 对环保行动的反对是高度集中和特殊的。我想到了否认气候变化的运动,他们可能会在“群体”中找到接受他们谎言的观众,而不是在整个人群中。
  2. ****仅凭积极的集群优势无法预测公共政策结果。当气候否定运动在人群中达到饱和点时,他们仍然可以选择通过游说和提供其他非民主激励等制度手段来影响公共政策。
  3. 但是积极的集群优势确实意味着超越典型党派界限的广阔的支持窗口。参议院最近宣布成立两党气候变化核心小组表明,至少一些共和党参议员认为,公众舆论的模式对他们足够有利,足以让他们在通常被视为民主党的问题上采取行动,并在这样做的选举后果中幸存下来。

政府规模

我们现在把焦点从具有集群优势的问题转向具有集群劣势的问题。虽然“政府规模”(10.4)的集群劣势小于“基础设施投资”(11.6)的集群劣势,但我只强调前者,因为集群劣势大于误差幅度。

尽管对“政府规模”的担忧在调查受访者中并不那么受欢迎(这是该组中排名最低的保守问题),但集群劣势表明,持这一观点的人进一步集中在“削弱”他们投票的投票联盟中。这可能有助于解释为什么小政府倡导者在过去的许多年里基本上不起作用(美国记录预算盈余已经近 20 年了),并且这甚至可能有助于解释为什么这些同样的保守派 失去了对他们曾经掌控的共和党的控制

乔布斯

乍一看,“工作”是一个集群劣势为 14.8 的问题,这一事实表明,关心工作的受访者普遍有一些特质。也许这类人有着特殊的政治信仰,在工作中遇到困难,更有可能失业,因此这群局外人作为一个整体更关心公共政策对创造就业机会的影响?诚然,这种解释有点牵强。

当我最深入地研究这些数字时,我发现“就业”是整个数据中排名第一的问题,仅次于“经济”和“医疗保健”。值得注意的是,尽管只在“工作”方面有意义,但所有这三个排名靠前的问题也都有负的集群优势分数。这可能反映的不是一个政治现实,而是一个数学现实:当计算机形成集群时,它会根据人们的特定激情来划分他们,这可能会削弱整体顶级问题的边缘,否则如果整个数据集被简单地视为一个巨大的集群,就会出现这种情况。

政治中的金钱

问题拥挤概念背后的一个前提是,民主代表的机会是有限的,对于那些有更特殊的政策偏好因而代表性较弱的选民来说,这可能是一种令人沮丧的经历。如果是这样的话,“金钱在政治中”具有最强的集群劣势的事实实际上可能证实了这个前提!

作为唯一与政治直接相关的问题,“政治中的金钱”的数据可能会让选民感到沮丧(当然,大笔政治捐款是不具代表性的民主可能受到指责的众多因素之一)。就选民的挫折感与选民的特质有关而言,就支持者的特质与增加特定问题的集群劣势有关而言,我们似乎有一个合理的解释来解释为什么“政治中的金钱”具有最高的劣势,或许也有一句话要提醒任何类型的政治改革者(比如说,全国普选倡导者)对有利的民意调查持保留态度,因为他们的事业也可能遭受类似的集群劣势。

移民和堕胎

这可能看起来是一个奇怪的配对,不仅因为潜在问题本身完全不同,还因为一个具有显著的集群劣势(“移民”,14.1,8.4),而另一个显然分布更加均匀(“堕胎”,+2.5,21.4)。我之所以将这两者放在一起考虑,是因为它们都指向了潜在调查数据的一个问题:这些数字是否反映了受访者对权利或限制的渴望?这个答案应该是支持堕胎权利还是反对堕胎权利的信号?支持移民还是反对移民?

由此产生的数据是如此模糊,以至于至少在堕胎的情况下,计算机经常会创建群集,这些群集似乎是基于回答者对问题所问内容的观点,而不是他们潜在的政治观点。这导致我总是排除“堕胎”作为聚类算法的变量,以适应它生成的模型,对于少数几个聚类,我也排除了“移民”。我提出这些数字是为了透明,但告诫不要对它们作任何形式的解释。

同性恋的权利

有趣的是,就集群优势分数(+1.5)而言,同性恋权利是我们最中立的议题。这意味着对同性恋权利的支持相当均匀地分布在一系列潜在群体中。我想假设这种相对平均的分布的一个原因是支持“同性恋权利”的催化因素之一是在一个人的家庭或亲密朋友群体中有一个人是 LGBTQ。至关重要的是,LGBTQ 人群在他们的性取向可以表达之前就进入了一个家庭系统,或者可能在仍然“在壁橱里”的时候就进入了一个朋友群体。因此,那些倾向于忽视 LGBTQ 权利的人现在可能会遇到一个思想开放的特洛伊木马,以亲人的形式出现。由于这种经历在很大程度上是随机的,可能发生在任何人身上,其可能性几乎完全与他们的其他政治偏好无关,所以对同性恋权利的支持往往是均匀分布的,而不是不成比例地集中在任何政治偏好模式中。

宗教自由

最后,我想考虑宗教自由的问题:不是因为温和的集群优势分数(+11.1),而是因为误差幅度很大(27.0)。换句话说,我用来汇总这些分数的聚类模型中,将近一半的人的宗教自由分数要么在负 20 分,要么在正 30 分!

这种大量的变化似乎反映了我们聚类中的另一个现象:即,在典型的“右”/“中”和“左”划分(表征最初生成的两个聚类)之后,在我看来,第一个子聚类划分通常表征为一个宗教自由具有正聚类优势分数的子聚类和另一个宗教自由具有负聚类优势分数的子聚类。不出所料,当我深入挖掘数据时,这些子群分别由宗教受访者(如“新教徒”)和非宗教受访者(如“不可知论者”)主导。

在美国政治两极分化的时代,考虑是否有机会在两极之间建立共识,以便在特定问题上取得进展,这可能是有趣的。宗教保守派(右边的)和社会福音派(中间的和左边的)可能会在哪里合作来实现爱、快乐和和平的政策?尽管存在轻微的群体劣势,无宗教信仰的自由意志主义者(右边)和世俗主义者(中间和左边)可能会联合起来纠正我们社会中因腐败的宗教机构而产生的权力失衡吗?

数据和计算机都没有这类问题的答案。所有这些技术为我们提供的只是已经很复杂的地图的另一层。就这种植根于政治现实的“集群优势”得分而言,地图的这一特定层面可以告诉政策企业家,对于他们的特定事业,前面的道路是上坡还是下坡。

结论

本文旨在说明存在一种具有民主意义的现象,即“问题拥挤”,其中某些问题得到不成比例的代表,因为大量认为该问题非常重要(或不重要)的选民不顾他们其他政治偏好的预期而这样做,因此与他们实际可获得的有限政治代表机会相反。

我相信我已经提出了一个足够有力的案例,机器学习技术有机会应用于这个关于代表模式的问题,这个问题对政治科学家和政策企业家都有价值。不过,我确实想对这篇文章可能带来的理论或实践影响保持更加谦虚的态度:在这样做之前,除了能够运行聚类模型的更多迭代(这需要时间或金钱来承担所需的计算)以及来自政治学领域的一些同行评议之外,我还希望获得更专门为这个问题设计的数据,而不是临时拼凑另一个数据集。也就是说,我希望这篇文章足以引发对这一现象的兴趣,并引发这些对话,讨论如何获得数据、资金和一些专家评论,以更好地理解能够将“问题拥挤”理论化并量化任何“集群优势”的价值。

如果你想继续对话,可以随意查看这篇文章对应的 GitHub 知识库或者给我发一封电子邮件。我欢迎对话!

**

Flatiron School logo a trademark of Flatiron School. Permission given to author to reuse as part of fellowship program, but usage does not imply endorsement.**

这项分析源于一个项目,该项目是熨斗学校华盛顿 DC 校区 数据科学研究项目的一部分。特别要感谢无数的导师、教练、课程设计者和同学,他们在我的学习和发展过程中指导了我。

如果您有兴趣了解更多关于熨斗学校数据科学项目的信息,并欣赏这篇文章, 使用此推荐链接了解更多信息,并支持更多类似您在此处看到的内容

文本挖掘的意外副作用

原文:https://towardsdatascience.com/an-accidental-side-effect-of-text-mining-4b43f8ee1273?source=collection_archive---------25-----------------------

文本挖掘真的有用吗?第一手测试。

“我们探索的终点将是到达我们开始的地方,并第一次了解这个地方。”

—t·s·艾略特

我最近读了很多关于生产力和自我发展的书,经常会发现一些我想以后再读的建议。kindle 上的高亮选项使这变得非常容易。通过持续阅读和强调,我积累了大量的文本,这些文本很好地代表了我读过的书。

因为我对内容非常了解。我想对这些数据应用文本挖掘情感分析,这样我就可以将结果与我对书籍的真实看法进行比较。如果它们匹配,我会更有信心将其应用于我的下一个业务问题。

在某种程度上,这也是一次自我探索,因为我可以回答一些问题,比如我更喜欢什么样的内容,他们的情感诉求是什么?

让我们来寻找答案。

客观的说,我会创造一个独立的角色,叫做“蝙蝠”。他的下一个任务是黑进我的数据并分析它,为卖给我更多的书收集见解。可惜读书不是他的特长。

他进来时,房间里乱七八糟。当他把 USB 驱动器插在笔记本电脑上时,他几乎听不到还开着的收音机。记者:

从我们一大早打开手机处理 Whatsapp 或脸书信息或推文形式的大量信息的那一刻起,直到我们在晚上睡觉时重写或阅读产品评论,我们在互联网上留下了面包屑给自己的个人口味。

许多企业使用这种非结构化数据,通过有针对性的产品推荐进行更好的营销来推动销售,或者隔离他们的客户…

看到 28 本书 21000 行文字的数据,他咬紧牙关。他的第一次接触是卡罗尔·德韦克的书“心态”,书中她介绍了 成长心态的概念。背后的想法是,有成长心态的人相信他们的能力可以通过努力来提高,而有固定心态的人相信他们的能力在出生时就固定了。结果,有固定思维模式的人错过了在许多事情上做得更好的机会,尽管他们可以做到。很简单,因为他们一开始就不相信。

如果你对这个概念不熟悉,这里有一段卡罗尔·德韦克的视频,解释她对成长心态的研究。

Carol Dweck explaining her research on growth mindset.

长长的文字让他疲惫不堪,他没有意识到时间是如何流逝的。现在,他是一个成长中的人。他决定学习文本挖掘。

他开始学习用于文本挖掘的 R 包,他不喜欢这个包的名字 tidytext ,但是他正在稍微失去他的偏见。这是一个漫长的夜晚。太阳慢慢升起时,他趴在桌子上睡着了。

它照亮了我的后花园,在那里我可以不时地瞥一眼被一夜⛄️.的雪涂成的树我不知道镇上的另一个地方发生了什么,我继续阅读,一边喝着红酒一边点着我的 kindle🍷。

我们稍后会知道我们的黑客发生了什么。首先,我们一起去翻翻他的笔记本。

黑客笔记

这是导出的 kindle highlights 的样子。

读取并解析文本文件

# Use readLines function to parse the text filehighlights <- readLines("Kindle_highlights_Serdar.Rmd", encoding = "UTF-8")# Create a dataframe where each row is a line from the textdf <- data.frame(highlights)# Packages
library(tidyverse)   
*# includes* ***ggplot2****,* ***dplyr****, tidyr, readr, purrr,* ***tibble****,* ***stringr****, forcats*library(tidytext)
library(wordcloud2)

每个数据科学项目都需要某种数据准备。停用词通常是语言中最常见的词,通常在处理文本数据之前被过滤掉。

让我们看看 tidytext 包中的 stop_words 数据集。因为这是一个很长的单词列表(> 1K) 我将打印每第五个单词作为例子。

**data(stop_words)**# print every 50th word stop_words_small <- **stop_words[seq(1, nrow(stop_words), 50),]**stop_words_small %>% print(n=50)# A tibble: 23 x 2
   word       lexicon 
   <chr>      <chr>   
 1 a          SMART   
 2 at         SMART   
 3 contain    SMART   
 4 few        SMART   
 5 hers       SMART   
 6 last       SMART   
 7 nine       SMART   
 8 presumably SMART   
 9 some       SMART   
10 they'd     SMART   
11 very       SMART   
12 without    SMART   
13 what       snowball
14 they'll    snowball
15 during     snowball
16 again      onix    
17 but        onix    
18 finds      onix    
19 if         onix    
20 much       onix    
21 parted     onix    
22 since      onix    
23 under      onix

仔细观察可以发现,停用词使用单引号,而在文本数据中使用撇号(')。

e.g. **they'll** in stop_words

以及单词他们将如何出现在文本中:

黄色高亮| Page: 200
记忆随着我们从中获得的意义不断被修正,因此在未来它们会更加有用。

我们必须使停用词和我们的数据兼容,否则一些词如他们会,不会,不能可能出现在我们的结果中。

我们可以使用 stringr 包中的 str_replace_all() 函数,找出所有的撇号,转换成单引号。

现在,文本已经准备好进行频率分析了。文本挖掘项目中的单词称为记号。我们可以通过 tidytext 包中的 unnest_tokens() 函数将文本拆分成单个单词,过滤 stop_words 并计数。

df$highlights <- str_replace_all(df$highlights, "’", "'")df <- df %>% unnest_tokens(word, highlights) %>%
             anti_join(stop_words) %>% 
             filter(!word %in% c("highlights","highlight", "page", 
                      "location", "yellow", "pink", "orange", "blue"))

他还在这里添加了一些经常出现在 kindle highlights 输出中的额外单词。

Dplyr()包函数对于对数据框中的单词进行分组和计数非常有用。

**top_kindle_highlights** <- df %>% 
 group_by(word) %>% 
 count() %>% 
 arrange(desc(n))

他记下了他的第一个见解。我的 kindle 最常用的 10 个单词。

**people** 592   
**story**  340   
life   318   
time   309   
**mind **  213   
**change** 212   
feel   211   
world  171   
person 170   
**habits** 157 

如果你不喜欢看一长串单词的话,单词云T3 都是不错的选择。Wordcloud2 包为你的 Wordcloud 提供了额外的定制选项,例如你可以使用任何图像作为标记。

上面的单词云代码是:

**wordcloud2**(top_kindle_highlights, figPath = bat, size = 1, backgroundColor = "white", color = color_vector(data$freq) )

一些想法开始出现在他的脑海里。他认为做出这些亮点的人是对讲故事、写作和良好的沟通感兴趣的人,是有良好习惯的人。想以积极的方式影响自己生活的人。他对书籍越来越感兴趣。他想深入挖掘。

二元模型分析

单词是书籍内容的一个很好的起点。但是没有上下文,它们就受到限制。还可以执行频率分析来测量单词对(二元模型)在文本中出现的频率。这使我们能够捕捉到文本中更细微的细节。

为此,他将上面隔离的未嵌套的单个标记组合回一个连续文本,然后执行二元语法分析。您可以使用 stringr 包中的 str_c() 函数来连接单个单词。

df_com <- **str_c**(df$word, “ “) 
df_com <- data.frame(df_com)

让我们将文本拆分成二元模型,并找出最常见的。

df_bigram <- df_com %>% 
 **unnest_tokens**(bigram, df_com, token = “ngrams”, 
 n = 3, n_min = 2)**top_bigrams** <- df_bigram %>% 
 group_by(bigram) %>% 
 count() %>% 
 arrange(desc(n))%>% 
 print(n=20)

并将它们可视化在图上

top <- top_bigrams[1:25,]

top %>% ungroup() %>% mutate(bigram = fct_reorder(bigram, n)) %>% 
 ggplot(aes(x=bigram, y=n)) + 
 geom_col() + 
 coord_flip() +
 theme_classic() + 
 theme(legend.position = “none”,
 text = element_text(size=18)) 

我发现最常见的二元模型之一是行为变化。我们可以利用这些信息来理解我们之前的发现。例如,一个最常见的词是变化。我们从二元模型分析中看到,“改变”这个词主要用在行为改变的上下文中。所以二元模型是获得关于文本内容的更深层次见解的有用工具。****

我突出显示的文本数据来自 28 本不同的书,通过查看整个文档中最常见的单词和二元模型,我们对它们有了一个概述。

为了了解每本书的不同之处,我们可以对每本书重复这一过程。

但是我们如何单独捕捉它们呢?

让我们先把课文再看一遍。

在每本书之前都会出现“您的 Kindle 笔记:”。让我们找出每本书的开头和结尾的行号,并使用这些索引来找出每本书。

我们将重用上面创建的数据帧 df。 str_which() 函数返回包含给定输入模式的行索引号。

在最后一步,一个 for 循环捕获两个连续索引之间的文本将给出它们之间的书。

**# Getting the index number for each book**indexes <- **str_which**(df$highlights, **pattern** = fixed(**"Your Kindle Notes For"**))
**book_names** <- df$highlights[indexes + 1]
**indexes** <-  c(indexes,nrow(df))**# Create an empty list** books <- list()**# Now the trick. Capture each 28 book separately in a list.** **for**(i in 1:(length(indexes)-1)) {
    books[[i]] <- data.frame(df$highlights[(indexes[i]:indexes[i+1]-1)])
    colnames(books[[i]]) <- "word_column"
    books[[i]]$word_column <- as.character(books[[i]]$word_column)
} 

让我们看看它是否有效,例如你可以在我们的列表中查找第五本书。

**head(books[[5]])** word_column
1                                                    
2                              Your Kindle Notes For:
3 Bird by Bird: Some Instructions on Writing and Life
4                                         Anne Lamott
5             Last accessed on Saturday July 27, 2019
6                         75 Highlight(s) | 4 Note(s)

现在,我们捕获了所有 28 本书,我们可以应用相同的过程,通过另一个 for 循环来分析它们。

top <- list()**for**(i in 1:28){
**books[[i]]** <- books[[i]] %>% **unnest_tokens**(word, word_column) %>%
             anti_join(stop_words) %>% 
             filter(!word %in% c("highlights","highlight", "page", 
                      "location", "yellow", "pink", "orange", "blue"))**# Find out the top words in each book and capture them in a list (top)** **top[[i]]** <- books[[i]] %>% 
              group_by(word) %>% 
              count() %>% 
              arrange(desc(n))}**for(i in 1:28)**{
  print(book_names[[i]])
  print(top[[i]])
}

这是上面代码输出的一部分。

## [1] "Crucial Conversations Tools for Talking When Stakes Are High, Second Edition"## # A tibble: 1,834 x 2
## # Groups:   word [1,834]
##    word          n
##    <chr>     <int>
##  1 people       84
##  2 dialogue     40
##  3 stories      40
##  4 due          34
##  5 export       33
##  6 feel         33
##  7 hidden       33
##  8 limits       33
##  9 truncated    33
## 10 crucial      31
## # ... with 1,824 more rows## [1] "Pre-Suasion: A Revolutionary Way to Influence and Persuade"## # A tibble: 526 x 2
## # Groups:   word [526]
##    word             n
##    <chr>        <int>
##  1 attention        6
##  2 influence        5
##  3 mental           5
##  4 trust            5
##  5 visitors         5
##  6 comfort          4
##  7 emotional        4
##  8 experience       4
##  9 message          4
## 10 associations     3
## # ... with 516 more rows## [1] "Made to Stick: Why some ideas take hold and others come unstuck"## # A tibble: 1,754 x 2
## # Groups:   word [1,754]
##    word          n
##    <chr>     <int>
##  1 people       64
##  2 knowledge    27
##  3 story        25
##  4 ideas        24
##  5 concrete     18
##  6 surprise     17
##  7 care         16
##  8 time         15
##  9 attention    14
## 10 core         14

现在,看看每本书中最常用的单词,我们可以更深入地了解它们是关于什么的。

同一本书的二元模型。

**## [1] "Crucial Conversations Tools for Talking When Stakes Are High, Second Edition"**## # A tibble: 8,774 x 2
## # Groups:   bigram [8,774]
##    bigram                    n
##    <chr>                 <int>
**##  1 due export               33
##  2 due export limits        33
##  3 export limits            33
##  4 hidden truncated         33
##  5 hidden truncated due     33
##  6 truncated due            33
##  7 truncated due export     33
##  8 crucial conversations    19
##  9 export limits 27         10
## 10 limits 27                10**
## # ... with 8,764 more rows**## [1] "Pre-Suasion: A Revolutionary Way to Influence and Persuade"**
## # A tibble: 1,265 x 2
## # Groups:   bigram [1,265]
##    bigram                      n
##    <chr>                   <int>
##  1 attention goal              2
##  2 concept audience            2
##  3 levels importance           2
##  4 mandel johnson              2
##  5 mental activity             2
##  6 social proof                2
##  7 thousand dollars            2
##  8 twenty thousand             2
##  9 twenty thousand dollars     2
## 10 writing session             2
## # ... with 1,255 more rows**## [1] "Made to Stick: Why some ideas take hold and others come unstuck"**## # A tibble: 6,376 x 2
## # Groups:   bigram [6,376]
##    bigram                      n
##    <chr>                   <int>
##  1 curse knowledge             7
##  2 guessing machines           6
##  3 people care                 6
##  4 goodyear tires              5
##  5 knowledge gaps              5
##  6 people's attention          5
##  7 popcorn popper              5
##  8 security goodyear           5
##  9 security goodyear tires     5
## 10 sinatra test                5

现在,你可能在第一本书里看到了奇怪的二元模型。Kindle 限制你可以高亮显示的文本长度,例如你不能高亮显示 5 页的文本。这可以防止人们突出显示整本书并导出到 word 文档。

因为我偶尔会高亮显示很长的文本,所以像“到期”、“导出”和“限制”这样的词会作为警告出现在我导出的高亮显示上。

现在,我将返回并通过将这些单词添加到 filter()函数中来进行更多的清理。

一本书一本书地看着,他对我 kindle 里的书越来越着迷。他决定订购几个。

如果你想看这个捕捉过程的另一个例子,你可以在这里看看我最近的 帖子。

我们可以使用情感分析来评估文本数据中的情感负荷。最常见的用途是社交媒体监控、客户体验管理和客户之声,以了解他们的感受。

bing 词典以二进制方式将单词分为积极和消极两类。nrc 的词典使用了积极、消极、愤怒、期待、厌恶、恐惧、快乐、悲伤、惊讶和信任等类别。

使用必应词典

我列出了对每个情感类别贡献最大的单词。例如成功和有效对于积极情绪,不好和困难对于消极情绪。

下面是 R 是如何制作出上述情节的:

bing_word_counts <- df %>% inner_join(get_sentiments("bing")) %>% 
  count(word, sentiment, sort = TRUE) %>%
  ungroup()bing_word_counts# **Sentiment plot for top positive negative contributors**
# Select top 10 positive and negative wordsbing <- bing_word_counts %>% 
  group_by(sentiment) %>% 
  top_n(10) %>% 
  ggplot(aes(reorder(word, n), n, fill=sentiment)) + 
  geom_bar(alpha=0.8, stat="identity", show.legend = FALSE)+
  facet_wrap(~sentiment, scales = "free_y") +
  labs(y= "Contribution to sentiment", x = NULL) +
  coord_flip()bing

使用 nrc lexion

如果一篇文章是正面的而不是负面的,我更有可能突出它。还有信任、期待和喜悦,而不是悲伤或愤怒。

sentiment <- df %>%
        left_join(get_sentiments("nrc")) %>%
        filter(!is.na(sentiment)) %>%
        count(sentiment, sort = TRUE)
sentiment## # A tibble: 10 x 2
##    **sentiment        n**
##    <chr>        <int>
##  1 positive      8471
##  2 trust         4227
##  3 negative      3963
##  4 anticipation  3466
##  5 joy           2701
##  6 fear          2467
##  7 sadness       1853
##  8 anger         1814
##  9 surprise      1353
## 10 disgust       1102

正常化情绪

重要的是要补充一点,因为每种情感类别在一种语言中有不同数量的单词。字数少的情感类,在给定文本中出现的可能性更小。因此,我想根据它们在词典中的出现频率对它们进行标准化,看看它与上面的结果有何不同。

***# I will add numbers of each categories from the NRC lexicon***lexicon <- c(2317, 3338, 1234, 842, 1483, 691, 1250, 1195, 1060, 535)
polarity <-  c(1,1,1,1,1,0,0,0,0,0)
sentiment <- data.frame(sentiment, lexicon)
norm_sentiment <- sentiment %>% mutate( normalized = n/lexicon) %>% arrange(desc(normalized))
sentiment <- data.frame(norm_sentiment, polarity)
sentiment##       sentiment    n lexicon **normalized** polarity
## 1  anticipation 3466     842   4.116390        1
## 2      positive 8471    2317   3.656021        1
## 3          fear 2467     691   3.570188        1
## 4      negative 3963    1234   3.211507        1
## 5       disgust 1102     535   2.059813        1
## 6           joy 2701    1483   1.821308        0
## 7         anger 1814    1195   1.517992        0
## 8       sadness 1853    1250   1.482400        0
## 9      surprise 1353    1060   1.276415        0
## 10        trust 4227    3338   1.266327        0

现在,期待是文本中发现的最高情感。在我看来,这不是巧合。因为我们分析的大部分书籍都是关于生产力和自我发展的。生产力提示和工具通常包含与预期相关的词汇。

同样,我可以看看个人对书籍的看法

sentiment <- list()
**for** (i **in** 1:28){
sentiment[[i]] <- books[[i]] %>%
        left_join(get_sentiments("nrc")) %>%
        filter(!is.na(sentiment)) %>%
        count(sentiment, sort = TRUE)
        print(book_names[i])
        print(sentiment[[i]])
}

对个人书籍的看法。我在这里展示了其中的几个。

## [1] "Crucial Conversations Tools for Talking When Stakes Are High, Second Edition"## # A tibble: 10 x 2
##    sentiment        n
##    <chr>        <int>
##  1 positive       758
##  2 negative       496
##  3 trust          412
##  4 fear           282
##  5 anticipation   258
##  6 anger          243
##  7 joy            216
##  8 sadness        196
##  9 disgust        142
## 10 surprise       108## Joining, by = "word"## [1] "Pre-Suasion: A Revolutionary Way to Influence and Persuade"
## # A tibble: 10 x 2
##    sentiment        n
##    <chr>        <int>
##  1 positive        84
##  2 trust           51
##  3 negative        31
##  4 anticipation    27
##  5 fear            24
##  6 joy             22
##  7 anger           14
##  8 sadness         12
##  9 surprise         9
## 10 disgust          3## Joining, by = "word"## [1] "Made to Stick: Why some ideas take hold and others come unstuck"
## # A tibble: 10 x 2
##    sentiment        n
##    <chr>        <int>
##  1 positive       499
##  2 trust          236
##  3 anticipation   198
##  4 negative       167
##  5 joy            156
##  6 fear           123
##  7 surprise       107
##  8 sadness         74
##  9 anger           65
## 10 disgust         60

为了有一个概述,你可以通过绘制每本书的阳性率来总结数据。

我们来看看积极性得分最低的那本书。男人的寻找意义 。这本书是根据维克多·弗兰克在第二次世界大战期间的遭遇写成的。这也是意料之中的。

我越来越感受到文本挖掘的力量。

《局外人》这本书出现在积极性图的顶部,是一个真正的局外人。😮

从头开始了解一切是很难的,我们将回去做一些额外的清理。《局外人》一书的字数是 107 个。这个真的很低。因此在下一次迭代中,我将从分析中删除它,因为它不可靠。

book_names[[27]]**## [1] "Outliers: The Story of Success"**top[[27]]# A tibble: 107 x 2
# Groups:   **word [107]**
word             n
<chr>        <int>
1 ability          3
2 knowing          3
3 sense            3
4 communicate      2
5 distance         2
6 family           2
7 intelligence     2
8 power            2
9 practical        2
10 sternberg        2
# ... with 97 more rows

以下是我用来绘制积极性得分的代码:

books <- **str_trunc**(book_names, width=22) # Shorten the book namesall <- list()for (i in 1:28) {
all[[i]] <- sentiment[[i]] %>% 
  filter(sentiment %in% c('positive','negative')) %>% 
  mutate(n2 = n/sum(n)) %>% 
  print()
}all_bound <- do.call("rbind", all) %>% filter(sentiment == "positive")**library(ggrepel) # Useful for preventing overlapping labels**all_bound %>% ggplot(aes(x= book_names, y=n2)) + 
              geom_point() + 
              **geom_label_repel**(aes(label=books, color = ifelse(n2 <0.55, "red", "blue")), size = 4) + 
              theme_classic() + 
              theme(legend.position = "none",
                    text = element_text(size=18), 
                    axis.text.x = element_blank()) + 
              xlab("Books") + 
              ylab("Positivity score")

摘要

阅读数百万页来检查文本挖掘是否可靠是不可行的。但在这里,我得到了一些我知道内容的数据,并应用了文本挖掘和情感分析。

字母组合或字母组合都表明了这些书的相似之处。这种情绪和我 kindle 里的书的类型有关系。

让我们回到我们的黑客。

文本挖掘的一个意想不到的副作用永远改变了他。分析我的书并从中获得真知灼见使他对阅读越来越感兴趣。他开始关心他周围的世界。世界变了。

我为自己做的事,他也为自己做了。他变成了一个更好的自己。

世界变得更加明亮。☀️

收音机打破了寂静。

“brrring…..br 正在…..br 正在……”

我醒了。

感谢您的阅读。你可以在我的 github repo 中找到数据和代码。

希望你从中有所收获或者有所启发。请随时留下评论、建议和问题。(你可以通过电子邮件联系我,地址是 serdar.korur@gmail.com)

下次见!

塞尔达尔

MNIST 数字分类器的实际应用

原文:https://towardsdatascience.com/an-actual-application-for-the-mnist-digits-classifier-bbd76548bf2f?source=collection_archive---------18-----------------------

解决数独谜题的速度比宣传的还要快

你有没有想过“我刚刚做了一个很棒的 MNIST 分类器!现在怎么办?”。虽然手写数字数据集是进入机器学习的一种伟大、干净的方式(至少在分类方面),但它被正确地称为该领域的“Hello World”。你可以用它来创建一个合理的 ML 管道,并学习如何实现不同类型的模型,但是它没有太多的用处,直到现在。我在这里的第一篇帖子之一使用了一些基本的 python 数据结构和逻辑来解决关于的数独难题,速度是眨眼的两倍,但是我必须手动将数字输入数组来准备求解器。在这篇文章中,我想了解如何使用一些图像处理工具和卷积神经网络来实现光学字符识别(OCR)。

有很棒的 OCR 工具可以免费获得,比如谷歌的 Tesseract ,我在我的强化学习系列中用了很多,但是 Tesseract 在识别数字/数位方面表现不佳。如果我想将数独谜题读入 Python 界面,我需要一个专门进行数字识别的 OCR 工具。我突然意识到,在手写数字上训练的神经网络可能会检测到键入数字中固有的相同模式,所以只要图像预处理得当,我就能够使用每个人都喜欢的深度学习入门将数字图像转换为实际数字!和往常一样,我将浏览的代码将在我的 Github 上。

An example image of an ‘Easy’ puzzle

这个应用程序背后的前提是,我已经编写了一个程序,可以在不做任何缓慢、计算量大的猜测和检查工作的情况下解决数独难题,但必须手动输入难题。在一个完美的世界中,我可以对我的难题进行截图或拍照,运行我的应用程序,然后让问题得到解决。左边是我希望能够解析并从方块中提取数字的图像,下面是我用来将这个复合拼图转换成 9x9 图片数组的代码:

现在我有了一个 9x9 的图像数组,其中只包含数字,是时候创建 OCR 工具将这些图像转换成数值了。正如我之前提到的,我选择拿出这方面的大枪——在 digits 数据集上训练一个卷积神经网络,作为我将这些图像分类为数字的工具。下面你可以看到使用 Tensorflow 2.0 的 Keras 实现来构建、训练和使用神经网络是多么容易——我们所要做的就是实例化模型、添加层、编译和训练:

现在我已经有了一个经过训练的模型,是时候在我的应用程序中实际实现它的使用了!我想遵循的逻辑是:如果图像中有一个数字,我想使用我的模型来预测图像中的数字,否则就没有数字,所以我可以使用零作为空正方形的占位符。使用整个图像的平均像素值,我可以判断图片中是否有数字:有数字的图像平均“亮度”约为 15,而没有数字的图像通常“亮度”约为 2。下面的代码片段显示了如何为一个难题创建一个模板,然后使用上面新训练的神经网络填充它:

现在,我已经在矩阵中填入了与拼图匹配的值,如图片和控制台输出并排显示的那样:

The code above turns the left image into the right!

现在图像处理已经完成,我已经有了需要编程解决的格式的拼图,我可以运行这个脚本调用数独拼图的任何图像,在不到一秒的时间内解决!

The final output and time

半秒钟——数独竞速者面临的新挑战!随着 Kaggle 成为公共机器学习挑战的主要来源之一,似乎机器学习往往只是为了机器学习而进行的。我希望您喜欢这个使用深度学习作为解决实际问题(或者可以说是难题)的一个小应用程序!

人工智能项目的敏捷框架

原文:https://towardsdatascience.com/an-agile-framework-for-ai-projects-6b5a1bb41ce4?source=collection_archive---------15-----------------------

多年来,软件开发社区已经达成了广泛的共识,即软件应该以迭代生命周期来开发。像 Scrum(敏捷)和精益这样的主流方法论支持这个概念。迭代生命周期的本质:

在您发布一个版本之后,项目并没有完成——因为只有到那时,您才能从现实世界的交互中收到用户反馈,这使您能够为下一次迭代细化目标。因此——你应该努力执行非常短的迭代,专注于理解用户想要什么。

在达成这个共识之前,许多软件工程团队曾经犯过错误,例如:

  1. 几个月来实现一个系统,并且惊讶地发现用户没有发现许多有用的特性——需求没有被很好地定义。
  2. 大大超出了系统所需的可伸缩性。

今天许多人工智能团队都有类似的困难。人工智能并没有改变打造符合市场需求的优秀产品的本质。然而,人工智能确实有细微差别和复杂性,这使得应用现有的方法很困难。目前的博文是系列博文的第一篇。这些帖子的目标是提出一个迭代生命周期框架,该框架适用于以人工智能为中心的软件。当前的帖子将关注这个框架的动机,提供一个概述,并为很好地执行它打下基础。

为什么要迭代生命周期?

对于创新产品来说,预见正确的产品需求(以及相应的算法需求)是非常困难的。因此,通常的做法是尽快将产品送到用户手中,并根据用户反馈和分析决定下一步。从而将开发工作集中在给用户带来最大价值的东西上。它最大限度地降低了风险,包括在人工智能的情况下,在建立错误的模型、优化错误的指标或超过任何指标的要求成就方面投入大量精力的风险。

Credit: https://twitter.com/karenlindemann/status/525701601944932352

使用下图中描述的框架,迭代开发流程可适用于人工智能开发。在这篇文章和接下来的文章中,我将详细阐述构成生命周期的以下每个模块,以及我推荐在每个模块中应用的标准。

标准对于人工智能迭代的重要性。

随着项目的成长和成熟,迭代工作会变得越来越具有挑战性。迭代意味着周期之间的暂停。以低标准构建的项目也将是在暂停几个月获取客户反馈后很难恢复工作的项目。

因此,高且清晰的标准(例如软件工程标准)、方法和过程(例如实验管理系统、数据收集和模型开发过程)促进了敏捷性。这些显著地减少了迭代时间(通过减少您在开始每个新的迭代之前需要支付的“技术债务”)。

在大多数情况下,随着产品变得更加成熟——采用和实现开发过程、软件工程等的标准。—变得越来越重要。

Google 的研究和工程总监 Peter Norvig 教授向推荐了下面的博客文章,该文章阐述了“机器学习惊喜”的概念,如下:

“由于 ML 算法和优化在文献和媒体中谈论得更多,所以人们通常会认为它们在实际实现过程中发挥的作用比实际大。 …优化一个 ML 算法相对来说花费的精力要少得多,但是收集数据、构建基础设施和集成 每一项都要花费更多的工作 期望与现实的差异是深刻的 ”。

算法项目的领导者应该理解机器学习的惊喜——为了在多次迭代中优化算法的性能——正确定义需求并执行这些需求是不够的。如果标准、过程和内部质量不是核心工作,那么随着项目的进展,执行需求会变得非常困难。

正如 Martin Fowler 在他最近的博客文章中明确指出的那样:“高质量的软件值这个价吗?”:

内部质量的基本作用是降低未来变革的成本。但是编写好的软件需要一些额外的努力,这在短期内会增加一些成本

这就是内在质量差的后果。起初进展很快,但随着时间的推移,添加新功能变得越来越难。即使很小的变化也需要程序员理解大部分代码,这些代码很难理解。当他们进行更改时,会发生意外的中断,导致长时间的测试和需要修复的缺陷。"

Credit: “Is High Quality Software Worth the Cost?

当我们前进到项目的更高级迭代时,迭代时间和“迭代之间的时间”可能会由于项目的复杂性(也称为技术债务)而成倍增长——如果“内部质量”不是中心工作的话。

引用的博文主要关注“内在质量”的软件工程方面。

“内部质量”的相同概念和重要性适用于机器学习项目的许多其他方面。例如:

  1. 对于机器学习团队来说,不记录用于实现在先前迭代中部署的结果的确切数据(或数据准备代码)是非常常见的。
  2. 不记录用于训练部署到生产中的模型的确切代码\超参数是很常见的。
  3. 甚至软件工程标准——对机器学习项目的重要性不亚于“传统软件”。机器学习项目通常包含大量的重复代码、硬编码值、死标志等。它们被放在那里是为了优化完成当前研究迭代所需的时间(这在许多情况下可能是一种有效的方法),但是人们没有支付债务就继续下一个研究任务。

这些低内部质量的例子(以及更多的例子)显著地加速了当前迭代执行的时间。然而——项目在下一次迭代中明显变慢,其中以前开发的模型直到才能改进

  1. 重新发明数据准备方法(例 1),或-
  2. 数周的工作致力于从数据中重新发现用于生成模型的超参数(示例 2),或者-
  3. 两个星期的工作毫无结果,只是发现硬编码的值使一切都失败了(例 3)。

当以实现算法的需求为目标时——一个人必须正确地定义需求,并且理解项目不仅仅是当前的迭代——并且在考虑长期目标时考虑优先级

在下面的帖子中,我们将讨论人工智能项目框架的 4 个阶段:需求开发,QA 和部署&维护。我将很高兴听到你的想法和经验。

这个帖子系列是与 Idan Bassuk 合著的。

人工智能的故事——第三部分

原文:https://towardsdatascience.com/an-ai-story-part-3-python-notebooks-in-the-cloud-f7d4d62af1ae?source=collection_archive---------13-----------------------

云中的 Python 笔记本

阿什西 DSC

从二月到三月的六周时间里,我几乎全职从事 React JS 项目。我和两个很棒的兄弟(Yannick 和 Osborne,见下图)一起在 MEST 大学(T1)工作,开发一个产品,帮助展现加纳高中教育系统的精华。现在告诉你细节还为时过早,但我们的推销进行得很顺利。这里有几张图片:

当然,这个项目占用了我相当多的数据科学和人工智能时间…真令人失望。我的最后一个故事是在 2018 年。

在项目即将结束时,我收到了 Ashesi 大学开发者学生俱乐部(Ashesi DSC)的邀请,要我使用 TensorFlow 主持一个机器学习研讨会。我直接跳了进去。我爱阿什西!

我们在 2019 年 3 月 30 日星期六举办了研讨会。

Ashesi DSC 负责人 Wayne 和 Hannah 很好地记录了我们在研讨会上的活动,包括内容和图片。他们的博客帖子包含了我们周六所做事情的详细概要和解释。

你可以在这里找到。它还包含到我的幻灯片和实时代码的链接。

现在,我们今天的主题是:

云中的 Python 笔记本

在研讨会期间,我们使用 Google co laboratory——简称 Google Colab——来运行我们的代码。我一会儿会解释为什么它这么棒,以及需要注意什么,但首先,让我们谈谈 Python 笔记本。

当我第一次发现 Jupyter 笔记本电脑(每个数据科学家最喜欢的环境)时,我欣喜若狂。代码和文本和谐相处……我想事情不会再好了。伙计,我错了。

免费 GPU!

使用免费的图形和张量处理单元(分别是 GPU 和 TPU)可以缩短训练时间,这是我第一次使用谷歌 Colab 的原因,这是谷歌基于云的 Python 笔记本环境。

GPU 和 TPU 的,基于他们的架构,真的可以加速机器学习模型的训练。CPU 会用一个小时,GPU 可能用几分钟;CPU 会用几天(说真的,人们已经训练了几天的模型),GPU 可能会用几个小时。但是,当你有一台像我这样的笔记本电脑,没有希望连接 GPU 时,Colab 是一个天赐之物。

一个额外的优势是,对于初学者来说,该平台预装了大量的数据科学和机器学习工具和库,如 TensorFlow、PyTorch、NumPy、Matplotlib 等。你所需要做的就是导入你最喜欢的库并编写你的代码。Colab 笔记本还可以直接保存到你的 Google Drive 上,让分享变得极其容易。

好处非常明显。如果你还不熟悉,这里有一个 Colab 教程可以帮助你开始。

然而,就像所有人类创造的东西一样,Colab 也有它不顺利的时候。

Google Colab 陷阱

想象一下,你要给 Ashesi DSC 做一个演讲,那天早上你决定在云中检查你的演示项目,却看到了这个:

嗯,我差点就发作了。

我换了浏览器,隐姓埋名,换了网络资源。什么都没用。在很大程度上,这看起来像是一个互联网问题,尽管我所有的其他互联网应用程序都在工作,我可以访问我的谷歌驱动器。

这让我们注意到两个主要陷阱:

  1. 如果你的网络连接很差,Colab 会让你很沮丧。这很简单,非洲的许多开发人员很早就接受了这一点…稳定的互联网连接非常重要。
  2. 这是谷歌技术:很好,但并不完美。有时,Colab 会出问题,特别是因为它是一个相当新的谷歌产品。当这种情况发生时,你很可能无能为力。

于是 Colab 就胡作非为了,几个小时后我就有了工作坊。我不得不随机应变。我可以使用我的 CPU 并在本地运行,但那会很慢。我需要一个选择,我找到了。

Kaggle 内核

Kaggle.com 是一个流行的数据科学和机器学习竞赛平台。在任何给定的时间点,网站上都有大约 20 个活跃的数据科学或机器学习问题,获胜者可以获得现金奖励。

然而,Kaggle 不仅仅是一个竞争平台,它还是学习、海量数据集和称为内核的实时 Python 笔记本的中心。

Kaggle 内核与 Colab 笔记本非常相似,除了 TPU 可用性和 Google Drive 集成。但是我们还有免费的 GPU!此外,即使在那个看起来很差的网络上,我也能够重新上传我的演示项目,并以免费 GPU 的速度在 Kaggle 上运行它们。

其他选择

我的困惑促使我向数据科学社区寻求帮助。我在一个来自 Omar 的 PyData 加纳 WhatsApp 群中找到了一个链接,它向我展示了 Kaggle 内核和 Google Colab 的更多替代品:像 BinderAzure NotebooksCoCalcDatalore 这样的平台。

要全面比较这些平台,请点击此链接

结论

我们处在数据时代,最能驾驭数据的人几乎总是赢家。如果你认为完成这项工作的技术远远超出了你的能力,我刚刚已经向你展示了它不是,所以再想想。

如果一个平台失败了,至少还有五个平台可以尝试,如果都失败了,我们还有很好的 ol' Jupyter 笔记本可以安装在本地。我希望这能帮助一些人摆脱困境。

编码快乐!

击倒

原载于 KayO 的博客

批处理规范化的替代方法

原文:https://towardsdatascience.com/an-alternative-to-batch-normalization-2cee9051e8bc?source=collection_archive---------6-----------------------

Image from Experfy

批处理规范化(BN) 作为一种规范化技术的发展是深度学习模型发展的转折点,它使各种网络能够训练和收敛。

尽管 BN 取得了巨大的成功,但它也表现出了一些缺点,这些缺点是由它沿批维度归一化的独特行为引起的。BN 的一个主要缺点是它需要足够大的批量来产生好的结果 (for-eg 32,64)。这个禁止人们探索更高容量的模型,这将受到记忆的限制。为了解决这个问题脸书人工智能研究所【FAIR】开发了一种新的归一化技术【GN】

在本文中,我们将主要关注组标准化(GN) 以及它如何作为批标准化(BN) 和其他标准化变体(层标准化(LN)、实例标准化(IN) )的替代方案。

群体规范化

组归一化(GN) 论文提出 GN 作为将通道分成组并归一化每个组内的特征的层。GN 与批量大小无关,它不像 BN 那样利用批量维度。GN 在很大的批量范围内保持稳定。

在本文的后半部分,你会更深刻地理解这几行字想表达的意思。所以抓紧了!!

组规范化和其他规范化变体

在本节中,我们将首先描述特征规范化的一般公式,然后在此公式中表示组规范化和其他变体。

(1)通式

Equation-1

这里 x 是由层计算的特征,而 i 是索引。对于一幅 2d 图像, i = (i_N,i_C,i_H,i_W) 是一个 4d 向量,其形式为 (N,C,H,W) ,其中 N 是批次大小, C 是通道数, HW 这里和σ是平均值和标准差,计算公式如下:

Equation-2

这里和σ是在由 S_i. 定义的一组像素上计算的。所有这些归一化变量彼此不同,仅基于如何为它们中的每一个定义S _ I。变量 mε分别定义集合的大小和一个小常数(for-eg 0.00001)**。添加ε是为了确保我们在计算 x_i 时不会被零除,但它也可以略微增加每批的方差。

(2)分组规范化和其他变量的制定

Normalization Variants. Image from Group Normalization paper

在上面的图像中,每个子图显示一个特征图张量,其中 N 为批次轴,C 为通道轴,而(H,W)为空间轴。蓝色像素使用相同的平均值和方差进行归一化,通过聚合这些像素的值来计算。

  • 批定额S_i定义为:

Condition-1

其中 i_C (和 k_C )表示 I(和 k)沿 C 轴的分指数。这意味着共享相同通道索引的像素被一起归一化。这里和σ沿 (N,H,W) 轴计算。

  • 图层规范中,集合 S_i 定义为:

Condition-2

其中 i_N (和 k_N )表示 I(和 k)沿 N 轴的子索引。这意味着共享相同批索引的像素被一起归一化。这里和σ是沿着 (C,H,W) 轴计算的。

  • 实例规范中,集合 S_i 定义为:

Condition-3

对于每个样本和每个通道,沿着 (H,W) 轴计算这里的和σ。

  • 组规范中,集合 S_i 定义为:

Condition-4

这里 G 是组数,是预定义的超参数(默认 G = 32)C/G 是每组的通道数。看起来像支架的东西是地板操作。GN 沿着 (H,W) 轴和一组 C/G 通道计算和σ。For-eg 如果 G = 2通道数= 6规格化变体图像(最右边)中会有 2 组 ,每组有3 个通道 (C/G

此时,我们有一个标准化的值,表示为 x_i. ,但是我们没有直接使用它,而是将它乘以一个 伽马 值,然后加上一个 贝塔 值。 gammabeta 都是网络和服务的可学习参数,分别用于缩放和移动归一化值。因为它们就像权重一样是可以学习的,所以它们给了你的网络一些额外的旋钮来在训练中调整,以帮助它学习它试图逼近的函数。

Equation-3

现在,我们有了层的最终批量标准化输出,然后我们将它传递给一个非线性激活函数,如 sigmoid、tanh、ReLU、Leaky ReLU 等。

履行

到目前为止,我们已经讨论了组规范化以及它与其他规范化变体的不同之处。现在,是时候讨论实现细节了。在 Pytorch 和 Tensorflow 中,用几行代码就可以轻松实现 GN。所以,让我们开始吧…

Python code on Group Norm based on Tensorflow. Image from Group Normalization paper.

解释

  • 这里的 x 是形状为 (N,C,H,W) 的输入特征。Gamma 和 beta:比例和形状偏移 (1,C,1,1)G 是 GN 的组数。
  • 对于每一批,我们以【N,G,C//G,H,W】**(其中 C//G 是整数除法,定义了每组的通道数)的形式对特征向量 x 进行整形
  • tf.nn.moments 帮助计算每个批次沿轴【C//G,H,W】的平均值和方差。如果 Keep_dimstrue ,则表示保留其长度为 1 的缩减尺寸。
  • 在归一化特征向量 x(基于等式-1 的图像中的公式)之后,它被整形为其初始形状【N,C,H,W】。
  • 此时,归一化值被表示为 x. ,但是我们没有直接使用它,而是将它乘以一个 gamma 值,然后加上一个 beta(shape(1,C,1,1)) ,并返回最终向量。

如果你对组规范化的 Pytorch 实现感兴趣,可以在这里找到

注意:通过对代码做一些小的调整,GN 实现可以转换成 LN 或 in。

  • 在层标准化(LN)的情况下,设置组数(G) = 1。
  • 在实例规范化(In)的情况下,设置组数(G) =通道数(C)。

比较结果

Comparison of error curves. Image from Group Normalization paper

以下结果是通过在 ImageNet 训练集上以 32 个图像/GPU 的批量训练 ResNet-50 模型获得的。左图是 ImageNet 训练错误,右图是 ImageNet 验证错误。默认情况下,GN 的 g 为 32。

Comparison of error rates. Image from Group Normalization paper

从上图我们可以推断出 BN 是最好的。第二好的归一化技术是 GN,其退化为 0.5%。

现在,让我们尝试在不同的批处理大小上训练 ImageNet 训练集。保持所有其他超参数不变,看看我们得到了什么。

Sensitivity to batch size.Range of batch size = [32,16,8,4,2]. Image from Group Normalization paper

左图显示了在 ImageNet 训练中对批量大小的敏感度,右图显示了在 ImageNet 验证错误中对批量大小的敏感度。默认情况下,GN 的 g 为 32。

Sensitivity to batch size error comparison. Image from Group Normalization paper

从上图中,我们可以推断出,随着批量的减少,BN 的性能急剧下降。然而,GN 在很大的批量范围内保持稳定。因此,在您将处理小批量图像的地方,例如, Fast/erMask R-CNN 框架,由于高分辨率,您将使用 1 或 2 个图像的批量大小,BN 将是无用的。因此,相反,我们可以在这样的框架中使用组归一化(GN)作为批量归一化(BN)的替代,在大批量时给出与 BN 相当的结果。

如果你想比较其他数据集的结果,你可以查看原始的论文以获得更多信息。

结论

  • GN 是一个有效的标准化层,不需要利用批次维度。
  • GN 与 LN 和 IN 相关,这两种归一化方法在训练递归(RNN/LSTM)生成(GAN)模型时特别成功。
  • GN 在检测、分割和视频分类方面的改进表明,在这些任务中,GN 是强大的且目前占主导地位的 BN 技术的强有力替代。

本文推导的所有结果都是基于群归一化的原始论文。

亚马逊森林火灾分析

原文:https://towardsdatascience.com/an-analysis-of-amazonian-forest-fires-8facca63ba69?source=collection_archive---------0-----------------------

雨林中的野火是如何开始的?

2019 年是亚马逊盆地十多年来最严重的火灾。在环境问题变得越来越政治化的时代,亚马逊野火已经成为一个具有煽动性的话题,在国际舞台上引起了广泛关注。外国势力和环保机构的密集媒体报道和公开谴责只能说是火上浇油。

但是为什么会发生这些火灾呢?主要原因是什么,比往年差多少?一场森林大火是如何在雨林中开始的?

在这篇文章中,我们将讨论亚马逊雨林的环境和地缘政治背景,然后分析前几年的森林火灾数据,以及已发表的关于 2019 年森林火灾及其未来影响的研究的新信息。

A forest fire in Altamira, in Brazil’s Pará state. President Jair Bolsonaro has rejected help from G-7 members.

在我们讨论火灾之前,有必要了解一下亚马逊的环境和政治背景以及它与火灾的关系。

环境

亚马逊生物群落占地约 670 万平方公里,是印度面积的两倍。该盆地为八个国家(巴西、玻利维亚、秘鲁、厄瓜多尔、哥伦比亚、委内瑞拉、圭亚那和苏里南)以及海外领地法属圭亚那所共有。大约 60%的亚马逊盆地位于巴西境内,因此巴西的政治局势对该地区有很大的影响。

The Amazon Basin

谁会受到森林火灾的影响?

虽然亚马逊雨林远离大多数人,但它拥有世界上最丰富的生物多样性,拥有大约 30%的世界已知物种(T3),以及 16,000 多种不同物种的 3,900 亿棵树(T5)(是地球上人类数量的 50 多倍)。根据 2010 年巴西地理统计局的人口普查,817,000 名巴西人认为自己是土著。

由于物种过多,树木占优势,以及大量土著人主要生活在亚马逊的偏远地区,这些群体在与毁林、城市化和森林火灾有关的土地使用变化中损失最大。

亚马逊盆地的河流占世界河流入海总流量的 15-16%。亚马逊河全长 6600 多公里,有数百条支流和溪流,是世界上淡水鱼类最多的地方。

如果亚马逊河燃烧,世界会缺氧吗?

虽然亚马逊是世界上最大的热带雨林,占全球热带雨林的 50%以上,但经常重复的亚马逊雨林产生地球上 20%的氧气的说法是基于误解。事实上,地球上几乎所有可呼吸的氧气都来自海洋,而且足够维持数百万年。有很多理由对今年的亚马逊大火感到震惊,但耗尽地球的氧气供应不是其中之一。

森林植物产生大量氧气,森林微生物消耗大量氧气。结果,森林——事实上,所有陆地植物——的氧气净产量非常接近于零。然而,准确地说,亚马逊雨林产生了大约 20%的世界氧气周转率。

雨林里怎么会有火灾?

尽管名为【雨林】,亚马逊雨林确实有旱季。然而,这个旱季仍然有很多水,只是明显少于雨季,雨季每天都会发生。

热带雨林的特点是温暖湿润的气候,没有明显的旱季:通常出现在赤道南北 10 度以内。一年中所有月份的月平均温度超过 18°C(64°F)。平均年降雨量不低于 168 厘米(66 英寸),可以超过 1000 厘米(390 英寸),尽管它通常在 175 厘米(69 英寸)和 200 厘米(79 英寸)之间。

也就是说,亚马逊热带雨林中的大多数火灾是人为的,而不是生物引发的。这可能有很多原因,如非法砍伐、砍伐森林、农业燃烧等。

正如林业专家解释的那样,在潮湿的雨林中,自发的火灾很少发生。相反,工人们首先砍伐树木,让它们晾干,最后在旱季放火焚烧。通常情况下,只有被砍伐的部分足够干燥,可以燃烧,火仍然被限制在预定的区域。在没有交通工具或道路的情况下,木材无法出售,而焚烧是清理土地最简单的方法。

这些方法被称为刀耕火种法,用于清除森林,为农业、畜牧业、伐木业和采矿业让路。虽然这在包含部分亚马逊雨林的国家是非法的,但法规的执行是宽松的,并且近年来巴西环境署的预算削减导致在受影响最严重的地区执行法规的人力和资源大大减少。

这些“受控制的”火灾很容易失去控制,蔓延到森林地区,而众所周知,森林地区很难被扑灭。

此外,即使是锯木厂也存在不被重视的问题。锯木厂流程如下图所示。

Logging life cycle. (Source)

目前还没有处理锯木厂加工过程中产生的废品的法律。它们可以被用作生物质发电厂的燃料,或者被埋在垃圾填埋场。然而,没有生物质工厂会购买木屑或刨花,在垃圾填埋场掩埋废物会导致罚款。因此,许多锯木厂只是在露天焚烧他们的废品。木材的直接燃烧对大气的破坏尤其严重,甚至超过煤。

虽然亚马逊的大多数火灾都是由人类引起的,但情况并非总是如此。森林火灾的三个主要原因是:

  • 干燥环境
  • 雷击
  • 火山爆发

我们在热带亚马逊地区唯一经常看到的是雷击,以及厄尔尼诺年期间相对干燥的环境,这通常与南美洲的干旱有关。

典型地,高水分含量防止着火并减缓其蔓延,因为需要更高的温度来蒸发材料中存在的任何水并将材料加热到其燃点。

热带亚马逊雨林的大部分地区都有茂密的森林,那里有更多的树荫,导致环境温度更低,湿度更大,使这些地区更不容易发生野火。

密度较低的材料(如草和树叶)更容易点燃,因为它们比密度较高的材料(如树枝和树干)含有更少的水。

植物通过蒸发不断失去水分,但水分的损失通常由从土壤、湿度或雨水中吸收的水分来平衡。当这种平衡得不到维持时,植物就会干枯,因此变得更加易燃,这通常是干旱的后果。

How forest fires spread.

森林火灾也是碳的巨大来源,并向大气中释放数吨二氧化碳。最重要的是,燃烧的树木不能从大气中清除二氧化碳,因此对气候变化有着复杂的影响。

都是树吗?

即使在亚马逊的深处,也有许多城市、城镇和村庄。

例如,马瑙斯是亚马逊热带雨林中心的一个拥有 200 万居民的大都市。马瑙斯以“水域交汇”而闻名,这里是内格罗河和索利莫斯河的交汇处,形成了亚马逊河。

在燃烧季节,自然燃烧树木的排放因工业的人为排放和烹饪、取暖等的家庭排放而加剧。

The city of Manaus is located in roughly the center of the Amazon basin.

这种协同作用导致了比普通城市更高水平的颗粒物、气溶胶和地面臭氧。下图显示了在 gulf team-1 飞机上进行研究活动期间,马瑙斯燃烧季节某一天的空气质量。

Researchers analyzed air samples captured over the Amazon rainforest and the city of Manaus by the Gulfsteam-1 research aircraft and the picture revealed the startling effect of man-made pollution on the air quality. (source)

在雨林中找到与北京这样的城市相媲美的污染水平,应该会让你感到惊讶和担忧,这也是环境科学家研究的内容。可以想象,随着火灾数量的增加,城市空气质量会进一步下降。

政治

世界领导人几乎一致同意气候变化是一个现实。自从亚历山大·冯·洪堡在 1800 年第一次提到气候变化,气候变化就一直在讨论中,并且自 20 世纪 90 年代以来,在科学家中已经是一个无可争议的事实。

在这一点上,否认气候变化的现实就像否认进化的现实或地球的球形本质一样荒谬。

有争议的争论仍在发生,但现在的主要分歧可以归纳为两个主要问题:

  • 气候变化正在发生,但我们如何知道这是人类造成的?
  • 我们应该如何最好地解决这个问题?

第一个问题主要针对科学家,由于地球及其生物地球化学循环的高度动态性和复杂性,这个问题极难证明。

这一困难在第二期中再次出现。影响气候的因素有一百万种,有数百种技术可以用来帮助减轻气候变化的影响。

将这一点与经济和国家利益以及这样一个全球性问题的范围结合起来,很容易看出没有人知道该做什么,而且,即使他们知道,他们也没有什么经济动力去采取行动。

这是气候变化的地缘政治有点混乱的原因之一,这是全球范围的公地悲剧。

政治是如何影响亚马逊大火的?

多年来,雨林的政治一直很激烈,涉及的问题包括为了牲畜的生长而破坏橡胶种植园(环境友好型)(不环境友好型),20 世纪 80 年代的环境激进主义,最终导致了奇科·门德斯的谋杀,以及土著人口的大量减少。

近年来,由于气候变化和其他环境问题导致的日益增长的环境保护主义,这个问题的政治变得更加激烈。

一个多世纪以来,一系列巴西政府都试图进入该国内陆,开发亚马逊。从 20 世纪 30 年代将早期工业推进森林的民粹主义总统转变为独裁者,到从 1964 年到 1985 年统治该国 20 年的军事独裁,理由基本相同:经济利益。

这一最初的计划被称为亚马逊行动,该计划是在军政府设想通过修建道路和发展农业和公司企业将该领土并入巴西期间制定的。

2019 年 1 月 1 日宣誓就职的新总统雅伊尔·博索纳罗也有一个类似的开发该国内陆的计划。Bolsonaro 是农业综合企业的支持者,并强烈反对几个旨在保护亚马逊雨林的机构和外国国家。他说他不会容忍世界野生动物基金会(WWF)的议程,并强烈反对为土著部落保留土地。

你可以想象,所有这些支持商业的言论对环境都有负面影响。通过激励农民种植更多的牲畜和大豆,这实质上激励了大规模的森林燃烧,为牧场和农业让路。

最重要的是,Bolsonaro 削减了对巴西环境署的资助,导致缺乏有效监管内陆的资源。与 2018 年同期相比,今年上半年该机构的执法行动减少了 20%。

在一次新闻发布会上,他说负责执行环境法的主要联邦机构 IBAMA 的代理人开出了太多的罚单。

“那个家伙会两手各拿一支笔,开出天文数字的罚单……我们结束了这一切。”

众所周知,这些事件随后导致了 2019 年 8 月引起世界关注的大规模无管制焚烧森林事件。

这一事件导致多个环保机构和外国势力公开谴责巴西总统雅伊尔·博索纳罗,尤其是法国总统埃马纽埃尔·马克龙。

博尔索纳罗暗示,非政府组织放火焚烧森林是为了败坏他的政府的名声。巴西环境部长 Ricardo Salles 在推特上说“干燥的天气、风和热”是罪魁祸首。

Paulo Artaxo(一位杰出的大气物理学家)表示“毫无疑问,火灾活动的增加与森林砍伐的急剧增加有关”。

Bolsonaro 最初拒绝了媒体和外国势力的关注,声称火灾的报道是耸人听闻的。然而,在第 45 届 G7 峰会上,由于 EU-南方共同市场自由贸易协定的损失,他受到了越来越大的国际压力,Bolsonaro 派遣了超过 44,000 名士兵到内陆灭火。

尽管这个问题已经解决,但这不太可能是我们最后一次听到这个故事,因为总统还将执政几年。

Bolsonaro 计划在亚马逊盆地开发核能和水力发电,并扩大镍的开采业务,这可能会引起一些人的争议,特别是在之前的项目出现环境问题之后,如新古河上的贝洛蒙特大坝

2019 年森林火灾

作为一名经常访问和研究亚马逊雨林的环境科学家,我亲眼目睹了这些火灾的后果。

正如我们所讨论的,经历一些燃烧并不罕见,尤其是在旱季——这是亚马逊地区大多数火灾发生的时候——今年亚马逊地区的火灾数量值得关注。

由于森林火灾是危险的,而且很难提前预测,因此主要是利用卫星仪器对其进行研究。

巴西国家空间研究所(INPE)统计,1 月 1 日至 8 月 24 日期间有 41,000 多个“火点”,而去年同期为 22,000 个。位于马里兰州格林贝尔特的美国宇航局戈达德太空飞行中心和两所大学合作的全球火灾排放数据库也发现了类似的趋势。

这些数字是自 2010 年以来最高的,当时亚马逊经历了厄尔尼诺和北大西洋变暖引发的严重干旱。然而,气候异常并不能解释目前火灾的上升。

这些火可能来自燃烧的庄稼或牧场吗?

许多最近检测到的斑点都活跃了一天以上,燃烧着强烈的热量,产生又高又粗的烟柱——所有这些都表明树木正在着火,而不是杂草丛生的牧场、作物残余或路边的植被。

2019 年 10 月,FOSS4G 利用 MODIS 卫星数据对火灾进行了分析,这是森林火灾的主要信息来源之一。这些结果的演示和 GitHub 存储库可以在这里找到:

[## 亚马逊森林疯狂数据大火的回归

Daniel Araújo Miranda 播放列表:“foss4g2019”视频从此处开始/音频/相关活动你们中的许多人都问过…

媒体. ccc.de](https://media.ccc.de/v/bucharest-516-the-return-of-crazy-data-fires-in-the-amazon-forest) [## 米兰达姆/火灾

于 2019 年 10 月 30 日在 Simfonia 室 14h00 以 FOSS4G 2019 发表的演示文稿。FOSS4G 代表免费和开源…

github.com](https://github.com/mirandadam/fires)

2019 年 10 月 8 日,几位作者向一份名为全球变化生物学的著名环境期刊的编辑发送了一封信,该期刊使用这些数据源来评估这些火灾的程度和原因。

提交人指出:

与森林砍伐有关的火灾的重要贡献与媒体报道的森林砍伐地区的大规模火灾相一致,而进入大气层的巨大浓烟只能用大量生物质的燃烧来解释。

一些保护区异常高的火灾数量也强调了 2019 年的不寻常性,如 Jamanxim 国家森林公园,从 2018 年到 2019 年,活跃的火灾增加了 355%,比长期平均水平高出 44%(BDQueimadas 和 INPE,2019 年)

用于检查亚马逊雨林火灾的主要数据来源是 dete-b(Detec ao de Desmatamento em Tempo Real),这是巴西科学技术部的 INPE 国家森林研究所的一项实时森林砍伐检测服务。

该系统使用美国宇航局 Terra 和 Aqua 卫星上的 MODIS 传感器获得的数据。它对巴西亚马逊地区超过 6.25 公顷的森林砍伐发出警报。这些数据是森林砍伐率的一个指标,但并不代表全部砍伐面积,这是由全球森林观察的 PRODES 系统测量的。

PRODES 过去使用 Landsat 5 图像,但现在也使用 Landsat 7 和 8、CBERS-2、CBERS-2B、Resourcesat-1 和 UK2-DMC 的图像。PRODES 由 INPE 与环境部和巴西环境和可再生自然资源研究所(IBAMA)合作运营。

当查看图 1(b)中的年度活跃火灾数量时,与前几年相比,上升似乎并不特别明显。主要的区别是,今年没有厄尔尼诺或其他气候异常现象来解释这种增加。

2019 年 9 月,Bolsonaro 宣布暂停燃烧,基本上停止了所有燃烧。这一点,加上他派往内地处理火灾 60 天的部队,导致 2019 年 9 月火灾大幅减少,尽管很难肯定地说这是减少的原因。

发表在 Nature 上的数据显示了类似的故事,但提供了 2019 年每个月的火灾次数。

美国宇航局 2019 年 11 月 6 日的一篇文章发现,今年夏天亚马逊盆地燃烧的一些火灾集中在雨林缺水地区。

受胁迫的植物释放到空气中的水蒸气比未受胁迫的植物少得多;换句话说,他们努力保持凉爽和节约用水,使他们更容易受到火灾的伤害。

NASA’s ECOSTRESS sensor measured the stress levels of plants when it passed over the Peruvian Amazon rainforest on Aug. 7, 2019. The map reveals that the fires were concentrated in areas of water-stressed plants (brown). The pattern points to how plant health can impact the spread of fires. Credit: NASA/JPL-Caltech/Earth Observatory

大火图标代表了美国宇航局的 Terra 卫星在 8 月 19 日至 26 日拍摄的大火。

“对肉眼来说,大火似乎随机分布在整个森林中。但是,如果你叠加生态压力数据,你可以看到火灾主要局限在高度缺水的地区。大火避开了压力较低的区域,那里的森林似乎有更多的水源。 —乔希·费舍尔,美国宇航局喷气推进实验室生态压力科学负责人

目前还不知道为什么某些植物会受到胁迫,而其他植物则不会,但人们怀疑这取决于植物种类或土壤含水量等方面。

全球森林观察

研究火灾的最佳资源之一是全球森林观察,它提供了一个仪表板 GUI 来研究气候、土地使用和其他影响森林生态系统的变量的变化。我们可以使用全球森林观察火灾来具体分析火灾。

如果你看看 2019 年 6 月 1 日至 11 月底期间各省的火灾警报数量,大多数火灾发生在亚马逊雨林的各州。

Number of fire alerts by province. Mato Grosso: 272,096; Pará: 230,440; and Amazonas: 104,410. Alerts detected 1 June to 27 November 2019. Data: Global Forest Watch Fires.

同一个数据库还告诉我们这些火灾发生在 WDPA 投影区域的比例,根据分析的时间段,是 18-20%。

The proportion of fire alerts in 2019 in World Database on Protected Areas (WDPA) projected areas between June 1 and November 27 2019. Data: Global Forest Watch Fires.

The proportion of fire alerts in 2019 in mining areas between June 1 and November 27 2019. Data: Global Forest Watch Fires.

我们还可以区分发生在完整森林景观区域的火灾和发生在已经被破坏的地方的火灾。与发生在农民耕地上的火灾相比,之前未被触及的森林区域的火灾对生物多样性的影响更大。

The proportion of fire alerts in 2019 in mining areas between June 1 and November 27 2019. Data: Global Forest Watch Fires.

我们还可以利用 MODIS 火灾警报来观察火灾的季节性变化,并与前几年进行比较。接近年底时火灾更加普遍,因为这是旱季的高峰期。

我们看到,与某些年份相比,2019 年在火灾警报数量方面并不是特别糟糕的一年。然而,最糟糕的年份发生在与厄尔尼诺和严重干旱相关的年份,或者是生态系统仍在恢复的年份的后果。

The seasonal progression of fire alerts in 2019 in Brazil. Data: Global Forest Watch Fires.

我们还可以根据 MODIS 数据评估特定月份的火灾警报有多“不寻常”。从结果来看,与一年中的其他时间相比,八月和九月的火灾警报特别高,与前几年旱季相比,低于平均水平。

9 月份后火灾数量急剧下降,部分原因可能是由于总统博尔索纳罗在国际压力不断增加后暂停了 2 个月来解决火灾问题。

The monthly MODIS fire alerts during 2019 in Brazil compared to previous years data. Data: Global Forest Watch Fires.

维伊尔斯

我们还可以使用可见光红外成像辐射计套件(VIIRS)来分析火灾,这是 Suomi 国家极地轨道伙伴关系(Suomi NPP)航天器上的关键仪器之一。

VIIRS 为我们提供了关于森林火灾的近实时数据,可以在这里访问

来自 VIIRS 的数据可以与关于在完整森林景观内发生了多少起火灾的信息相结合,这些信息对排放及其对生物多样性的影响有更大的影响,如前所述。

Location of VIIRS fire alerts over the week of 20 August 2019 in relation to areas of intact forest landscapes. Data: Global Forest Watch, accessed on 27 August 2019.

VIIRS 的数据告诉我们,许多火灾发生在朗多尼亚,而相对较少的火灾发生在亚马逊。这一数据与全球森林观察的数据相吻合,后者告诉我们只有 4%的火灾发生在完整的森林景观中。

火灾分析

我们也可以考察一些与巴西森林火灾相关的数据,自己考察情况。我们将使用巴西政府从国家信息系统收集的数据。为了获得巴西及其各州的最新地图,我们使用了来自“GADM 全球行政区域数据库”的 shapefile。

注意:我本可以提供 MODIS 数据的分析,但是这些数据集有几百千兆字节,众所周知很难预处理和分析。然而,如果你对这个话题感兴趣,我会推荐你下载一些卫星数据,然后玩玩。

这个分析对应的 Jupyter 笔记本和数据可以在我的 GitHub 知识库中找到(文末链接)。

我们可能感兴趣的第一件事是哪个地区火灾最多。

据位于巴西贝伦的亚马逊环境研究所称,火灾发生率最高的 10 个城市也是今年森林消失最快的地方。

火灾总数如何达到图 1(b)中的数据以及我们之前讨论的《自然》杂志文章中的数据?

事实证明,并不是特别好。图 1(b)中 2011 年至 2017 年的数据显示,火灾次数应在 10,000 至 40,000 次之间波动。当我们查看来自自然的数据时,我们看到这些值在 40,000 到 80,000 次火灾之间波动。

这种差异可能是由于不同的数据库、测量的分辨率以及“火灾”的构成。如果我们看看图 1(b)中的黄线,我们会发现我们的结果在 2011 年后相当一致。这有助于说明比较火灾测量值及其解释方式所带来的困难。

如果我们画出每个州的平均火灾次数,并叠加在巴西的图上,我们可以看到火灾次数在过去十年中是如何演变的。某些年份会发生更多的火灾,这与 ENSO 的干旱年份相对应。

各州每天的平均火灾次数是多少?

我们再次看到,早期的结果似乎特别低,这可能是由于技术限制,没有足够的能力进行准确的测量。

干旱后的几年火灾数量较少,可能是因为生态系统仍在从干旱带来的压力中恢复。

为了获得更丰富的结果,也许一个更好的指标是该州是否是 ' 亚马逊法律 ' 的一部分,这对应于作为亚马逊盆地一部分的巴西的九个州。

States of the Amazônia Legal.

通过将这些州标记为亚马逊法律的一部分,我们发现马托格罗索州是所有州中火灾最多的一个州,并且一些火灾发生率高的州不属于这个区域。

如果我们看一下每个月的数据,我们会发现很多火灾发生在亚马逊法律管辖范围之外的地区。

根据美国宇航局文章的讨论,我们可能会怀疑该地区的降雨量和火灾数量之间存在相关性。我们使用降水数据对此进行评估。

数据显示,大部分降水发生在亚马孙河流域的各州,这些州是亚马孙热带雨林的一部分。尽管这些地区的湿度很高,降水量也很大,但这些地区的火灾仍然占到巴西火灾总数的一半左右。

一年中降水量如何变化?

根据降水量值,旱季的峰值出现在 10 月,雨季的峰值出现在 4 月。这与每月发生的火灾数量有多大关系?

火灾数量和降雨量之间没有太多的一致,尽管这是对形势的基本分析,没有考虑到可能影响结果的许多细微差别。然而,即使大部分火灾是人为的,我们预计在旱季开始时火灾会明显增加。

正如我们所怀疑的那样,大多数火灾发生在旱季。

未来的分歧

2018 年的一篇名为 【亚马逊引爆点】 的著名文章,由托马斯·洛夫乔伊和卡洛斯·诺布尔发表,这两位杰出的科学家的工作重点是亚马逊雨林,文章描述了森林砍伐对森林生态系统未来的影响:

我们认为,森林砍伐、气候变化和广泛使用火之间的负协同作用表明,在 20-25%的森林砍伐率下,亚马逊系统将转向亚马逊东部、南部和中部的非森林生态系统。

2005 年、2010 年和 2015 年至 2016 年的严重干旱很可能代表了这一生态临界点的第一缕曙光。这些事件,加上 2009 年、2012 年(以及 2014 年亚马逊西南部)的严重洪水,表明整个系统正在振荡。在过去的二十年里,亚马逊南部和东部的旱季越来越长。大尺度因素,如热带北大西洋海面温度升高,似乎也与陆地上的变化有关。

最后一段提出,亚马逊正在偏离其动态稳定性,并开始达到一个临界点,此后系统将变得不稳定。这对应于下图中的场景 C。

Possible patterns of stability for dynamic systems.

虽然未来的火灾是不可避免的,但防止人为火灾和未来的森林砍伐对于稳定雨林生态系统和确保亚马逊的生存至关重要。

最终意见

我希望你喜欢这篇文章,并发现它的信息。这一次更多的是关于数据科学的环境和政治问题,但我认为了解情况的背景很重要。

如果你对我写的东西有任何疑虑或异议,请随时通过社交媒体联系或在这里回应,我总是很高兴讨论我的文章并接受建设性的批评。

您可以在我的 Github 存储库中找到相应的 Jupyter 笔记本,其中也包含一个 Binder 链接,您可以自己运行代码。

[## GitHub - mpstewart1/AmazonFires

带有 environment.yml 文件的与 Binder 兼容的 repo。通过以下 URL 访问此活页夹…

github.com](https://github.com/mpstewart1/AmazonFires)

我用作参考的文章在整篇文章中都有,但是下面也给了感兴趣的人一个详尽的列表。

时事通讯

关于新博客文章和额外内容的更新,请注册我的时事通讯。

[## 时事通讯订阅

丰富您的学术之旅,加入一个由科学家,研究人员和行业专业人士组成的社区,以获得…

mailchi.mp](https://mailchi.mp/6304809e49e7/matthew-stewart)

参考

科学家称,亚马逊大火显然与森林砍伐有关。赫顿·埃斯科瓦尔。科学。

https://science.sciencemag.org/content/342/6156/1243092

https://www . PBS . org/news hour/science/no-the-Amazon-fires-won-deplete-the-earth-oxygen-supply-heres-why

https://onlinelibrary.wiley.com/doi/epdf/10.1111/gcb.14872

https://advances . science mag . org/content/advances/4/2/eaat 2340 . full . pdf

https://www-jstor-org . ezp-prod 1 . hul . Harvard . edu/stable/pdf/1693078 . pdf?refreqid = excelsior % 3a 8 B3 f 40 df1 b 6021 ce 1e 16871 c 019 e 97 f 2

file:///Users/matt/Downloads/schoengartel 2004 _ 01。便携文档格式

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2373904/

https://IOP science . IOP . org/article/10.1088/1748-9326/aadbb 9/pdf

https://www.nature.com/articles/srep33130

https://agu pubs . online library . Wiley . com/doi/pdf/10.1002/2014 GB 005080

https://advances.sciencemag.org/content/4/9/eaat8785

https://agu pubs . online library . Wiley . com/doi/full/10.1002/2013 JD 020758

https://royal society publishing . org/doi/full/10.1098/rstb . 2018.0085

https://news . mong abay . com/2017/01/record-2015-16-El-Nino 期间亚马逊遭遇的高温干旱/

https://www.pnas.org/content/106/49/20578

http://www.scielo.br/scielo.php?script=sci_arttext&PID = s 1519-69842008000500003

https://www.jstor.org/stable/3061252?seq = 1 # page _ scan _ tab _ contents

https://phys . org/news/2018-08-亚马逊-降雨-季节. html

https://www . frontier sin . org/articles/10.3389/feart . 2019.00215/full

https://www . Atmos . UMD . edu/~ Zeng/papers/Yoon+Zeng 2010 _ Atlantic _ Amazon _ linkage . pdf

https://advances . science mag . org/content/advances/4/2/eaat 2340 . full . pdf

黑色星期五的消费者行为分析

原文:https://towardsdatascience.com/an-analysis-of-consumer-behavior-on-black-friday-9dd7952fc172?source=collection_archive---------25-----------------------

使用pandasmatplotlibseaborn从客户数据中产生洞察力的教程

W 无论你是在 B2C 还是 D2C 公司工作,你都很有可能会被要求查看一些销售数据集,以创建预测模型或了解消费者行为。在本帖中,我们将探讨一些我们可能想问的关于数据的问题,以及如何尽快提取这些答案。为此,我们将编写两个函数来简化我们的工作,因为我们将绘制一些条形图来回答不同的问题。

我们将使用黑色星期五数据集,该数据集可以在 Analytics Vidhya 网站上找到。您可以查看我们将使用的工具下面的数据信息。

你可以在我的Github页面 上查看我开发的所有代码

工具:

-Seaborn 和 matplotlib 用于数据可视化

  • Pandas 和 numpy 用于数据分析

我们想要回答的问题:

年龄组分析:

-各年龄段购买总额
-各年龄段及城市购买均值

产品类别分析:

  • 各产品类别各城市购买次数
    -产品 _ 类别 1 各城市购买平均数
    -产品 _ 类别 2 各城市购买平均数
    -产品 _ 类别 3 各城市购买平均数

性别分析:

-按性别分列的购买均值
-按性别和年龄组分列的购买均值
-按性别和城市分列的购买均值

职业分析:

-按职业分类的购买均值
-按职业和城市分类的购买均值

序数变量之间的相关性:

-热图
-聚类图

变量:

数据帧:

虽然我们对数据的第一印象是它们似乎是有组织的,但仍有一些值缺失。Product_Category (2 和 3)列有大量 NaNs 变量,而不是数字表示。我们可以从中获得的信息是,每个 NaN 代表一个事实,即该给定行的产品不属于该特定类别。例如,第一行的产品(Product_id = P00069042)被标识为产品 3,并且只属于类别 1。另一方面,第二行的产品在类别 1 中被标识为 1,在第二类别中被标识为 6,在第三类别中被标识为 14,这意味着它属于所有类别。

除此之外,我们还要注意一个事实,即 g roupby 和 pivot_table 自动忽略 NaNs。这使得我们的工作变得非常容易,因为我们将使用这两种技术来对一些数据进行分组并对它们进行计算操作。除此之外,重要的是要提到,即使我们的数据可能有一些异常值,我们也会认为它已经在这个问题上挖掘出来了。

年龄组分析:

按年龄组划分的购买总量

我们将通过确定年龄组的购买总量以及年龄组和城市的购买方式来开始这个项目。为了做到这一点,我们必须首先使用 value_counts()方法来统计每个组的购买数量,并绘制一个简单的酒吧聊天。其次,我们必须创建一个多级数据透视表数据框架,其中的索引是列 Age 和 City_Category,然后绘制一个条形图。

下图显示,26 岁至 35 岁之间的人在购买数量方面占据首位,其次是 36 岁至 45 岁和 18 岁至 25 岁年龄组,与第一组相比,这两个年龄组的购买量约为第一组的一半。

按年龄组和城市划分购买均值

如果我们绘制一个直观的图像来回答这个问题,我们将得到下图。

尽管上面的情节给了我们想要的信息,但还是有点混乱。我们必须记住,越容易理解故事情节,读故事的人就会越“快乐”。作为数据科学家或数据分析师,我们有义务尽可能清晰地传递信息,以便那些查看图表或仪表板的人能够立即理解所有内容。因此,为了清楚地比较这些组,我们将分别对它们进行绘图。

您可能会想:“我不想为每个不同的情节编写代码!”。你是对的!谁有时间做那个?!记住时间就是金钱!因此,让我们编写一个函数来完成这项工作,另一个函数来设置轴列表,使其长度与我们在每个可视化中需要的长度完全相同。

那些情节不是比我们之前做的那个更好理解吗?现在我们可以清楚地看到,例如,从 0 岁到 55 岁,C 城市的平均购买量大于其他城市。我们还可以看到,B 城市仅在 55 岁以上年龄组中占据首位。简而言之,我们可以从那些情节中获得很多信息,那些需要它们来做商业决策的人可能会很高兴。

产品类别分析:

我们的第二个任务是分析类别和产品。我们将首先绘制一个条形图,显示每个城市每个类别的总购买量。然后,我们将利用我们构建的函数为每个类别的所有产品绘制单独的图表。值得一提的是,一个产品可能属于不同的类别和群体。例如,产品 P00248942 属于所有类别,但在第一类中被命名为组 1,在第二类中被命名为组 6,在第三类中被命名为组 14。说完这些,我们开始分析吧。

按城市划分的每个产品类别的购买数量:

下面的图表显示了我们在购买数量方面的某种模式。正如我们所看到的,在所有城市中,产品类别 1 占据首位,其次是产品类别 2 和产品类别 3。每个城市在购买数量上的不同之处在于,城市 B 的消费者比城市 A 和 c 购买更多的所有类别的产品。

按城市划分的产品 _ 类别 1 的购买均值:

从现在起,您将会注意到,对于每个可视化,我们将组合数据帧来选择我们想要可视化的数据,并应用我们已经创建的两个函数。

我们不会仔细检查所有的情节。相反,让我们只关注我们能从他们那里得到的主要信息。也就是说,首先引起我注意的是产品 19,与其他产品相比,它的购买价格更低(平均不到 40 美元)。此外,我们可以注意到,产品 4 的购买意愿最强,城市 C 排名第一,其次是城市 B,城市 B 比城市 C 稍有优势。

按城市划分产品 _ 类别 2 的购买均值:

现在让我们分析类别 2 的所有产品。正如数据描述中提到的,该产品可能属于其他类别,我们可以通过查看下面的图表来注意到这一点。我们有一组也属于第一类的 17 种产品,可以看出,产品 10 具有最大的购买意义。城市 C 再次占据第一位,其次是城市 B 和 A(类似于产品类别 1)。

按城市划分产品 _ 类别 3 的购买均值:

下图显示了第三个产品类别的信息。我们可以看到,这一类别有 15 种产品,产品 3 在所有城市中具有最高的购买价值。

性别分析:

我们都知道了解性别对购买决策的影响的重要性。事实上,许多研究已经提出了一些问题,例如,在家庭中谁做购买决定。除此之外,考察性别在购买决策风格和产品类别、价格和其他特征方面的差异也很重要。

也就是说,让我们进行数据分析,获得一些简单但相关的客户行为洞察。首先,我们将绘制总购买量和每个性别的平均购买量。然后,我们将按年龄组绘制购买均值图,最后,我们将看到在城市 A、B 和 c,男性和女性在购买产品方面的差异。

按性别分列的购买数量和购买均值

现在,看下面的图表我们可以看到男性消费者的总数( 414259 )大约是女性( 135809 )的三倍。我们还可以注意到,令人惊讶的是,两性的购买手段并没有太大的差异。尽管男女人数存在明显差异,但男性消费者的平均购买量仅略高于女性(700 美元)。基于这一点,我会说这些女性消费者对企业来说真的很重要,例如,可以成为特别营销活动的目标。

按性别和年龄组划分的购买均值:

出于比较不同年龄段和性别的购买模式的目的,我们可以看看下面的条形图。他们显示,对于 18 至 25 岁的顾客,男性群体的购买均值比女性群体的购买均值高出 1000 美元以上。我们还可以看到,男性消费者在所有年龄组中都占据首位,尽管这种差异在 18-25 岁年龄组中并不明显。

按性别和城市划分的购买均值:

最后一项性别分析包括了解每个城市的两性是如何购物的。为了实现这一目标,让我们花一点时间来分析下面的条形图,它准确地描述了我们正在寻找的东西。他们显示,在所有城市中,男性比女性花费更多的钱(这一差异仅在 C 市有显著意义),C 市在两性的购买手段方面都名列第一。同样值得注意的是,居住在 B 市的男性比居住在 A 市的男性购买更多,而来自 A 市的女性比居住在 B 市的女性购买更多。

职业分析:

你认为消费者的职业类型会影响他们的购买行为吗?嗯,我希望职业和消费者对他们所花金额的态度之间有一些联系。让我们通过绘制条形图来检验这一点。

让我们从绘制每个职业的购买均值开始。该柱状图为我们提供了每位消费者在职业方面的购买习惯的综合信息。

看下面的图,我们可以注意到,职业 12、15 和 17 位于购买方式的前三位。我们还可以看到,职业 9、19 和 20 比其他职业花费的钱少。这些信息真的有帮助吗?我们能利用关于每个专业人员在城市花费的金额的洞察力吗?这正是我们在随后的可视化中看到的。

虽然第一个条形图给了我们重要的信息,但第二个数据 viz 让我们更好地了解了 A、B、c 三个城市中每个职业所花的钱。

城市职业:

下面的条形图描述了每个城市中每个职业的购买均值。有趣的是,在几乎所有的职业中,C 城拥有最大的购买手段。我们只在职业 8、9 和 19 中看到了这种模式的变化。另一个有趣的事实是,在 A 城市,数字 8 是他们职业的人花费最多的钱。

所以,关键是,如果我们在不同的图表中把每个职业分开,我们更有可能轻松地利用洞察力。换句话说,这使得其他团队(如市场部)的同事使用我们的发现变得特别容易。我们可以简单地将它们导出到 plots 文件夹,人们可以浏览这些图像,并能够将它们拖放到 PowerPoint 演示文稿或其他报告中。

热图:

基本上,热图是一种图形数据表示,使用颜色编码方案来表示不同的值。在我们的例子中,我们正在生成数据集特征之间相关性的热图。

为了生成热图,我们必须对分类数据进行数字编码。换句话说,我们必须将列 Product_ID、Gender、Age、City_Cat 和 Stay_In_Current_City_Years 转换为数字列,如下面的代码行所示。

编码之后,我们得到了下图。有趣的是,这两种产品之间存在正相关关系,这正是我们可能期望看到的,因为它们可能属于不同的类别。此外,年龄和婚姻状况之间的相关性还有一点值得一提。

聚类图:

我们将通过绘制一个集群图来完成这个分析。聚类图使用层次聚类将要素按其相关程度进行分组。当我们分析变量之间的关系时,这使得变量之间的相关性特别有用。在我们的例子中,我们有 11 个要研究的特性,因此,不是目测变量是正相关还是负相关的热图,而是将图表分割成簇,这样更容易分析。

查看上面的图,我们可以看到,聚类算法认为产品类别 2 和 3 聚类在一起,而年龄和婚姻状况形成了另一个强关联的聚类。我们可以通过查看它们之间的
链接来观察。它们首先形成并具有最短的分支,这表明它们更类似于具有最高分支的那些。

我希望你和我一样喜欢这个分析。我们已经看到,当我们需要尽快产生洞见时,写作如何快速生成我们的发现的可视化,并使我们的生活变得更容易。如果你有更有效的方法,请随意评论。

爱尔兰房地产价格分析

原文:https://towardsdatascience.com/an-analysis-of-property-prices-in-ireland-6fc34a56ac87?source=collection_archive---------19-----------------------

都柏林正处于住房危机之中。城市的部分地区已经引入了租金控制,但是还没有对价格产生影响。许多年轻工人无力租房,更不用说凑钱购买住宅了。作为数据探索的一个练习,我想看看爱尔兰的房屋购买价格以及影响房产成本的因素。

2011 年,物业服务监管局(PRSA)建立了一个住宅物业价格登记册,以努力使物业价格对买家更加透明。从他们的站点:

它包括自 2010 年 1 月 1 日以来在爱尔兰购买的所有住宅物业的销售日期、价格和地址,已向税收专员申报,用于征收印花税。

处理数据

所有记录均可从 PPR 物业价格登记处网站以 CSV 格式下载。在这篇文章中,我们将看看过去两年的数据。应该注意的是,PPR 页面包含一个免责声明:

PSRA 不以任何方式编辑数据。它只是以完全透明的方式公布向税务专员提交的申报数据。如果数据文件包含印刷错误,那么这些错误将出现在登记册上。

让我们来看看使用 Pandas 清理原始信息的一些步骤:

  1. 删除价格不是完全市场价格的属性,并删除包含少量爱尔兰语言属性描述的行。
df = df[df['Not Full Market Price'] == 'No']df = df.drop('Not Full Market Price', axis=1)df = df[(df['Description of Property'] == 'Second-Hand Dwelling house /Apartment') | (df['Description of Property'] == 'New Dwelling house /Apartment')]

2.看看 2017 年以后的数据子集。

df['Date of Sale (dd/mm/yyyy)'] = pd.to_datetime(df['Date of Sale (dd/mm/yyyy)'], dayfirst=True, format='%d/%m/%Y')df = df.rename(columns={'Date of Sale (dd/mm/yyyy)': 'Date of Sale', 'Price (€)': 'Price'})df = df[(df['Date of Sale'] > '2017-01-01')].reset_index(drop=True)

3.将 price 列从字符串解析为浮点数。

df['Price'] = df['Price'].apply(lambda x: x.lstrip('\x80'))df['Price'] = df['Price'].apply(lambda x: float(x.split()[0].replace(',', ''))).astype(float)

4.尝试使用谷歌的 API 进行地理编码,以获取属性的纬度和经度。

为了清楚起见,我应该指出,我为过去两年的 PPR 数据获得的坐标证明是不够准确的,所以我没有把结果包括在这篇文章中。错误很可能在于数据中包含的记录地址(这是 PRSA 自行报告和未经编辑的),而不是谷歌的实际 API。如果将每个房产的县附加到地址的末尾(有些地址包含县,但有些不包含),则准确性可能会提高。不管有多不准确,我觉得包含请求坐标的代码是很重要的。

获取请求 url 创建者功能:

def url_creator(address, url='https://maps.googleapis.com/maps/api/geocode/json?address=', api_key=''):
    logger.debug('Creating API request URL')
    add_list = address.split()
    add_list = [line + '+' for line in add_list[:-1]]
    add_list.append(address.split()[-1])
    add_url = "".join(add_list)
    return url + add_url + '&key=' + api_key

纬度和经度请求功能:

def lat_lng(address, api_key=''):
    logger.debug('Requesting geospatial info from Google API')
    url = url_creator(address, api_key=api_key)
    try:
        response = requests.get(url)
        response.raise_for_status()
    except requests.exceptions.HTTPError as e:
        logger.error(e)

    results = response.json()['results']
    if len(results) != 0:
        logger.debug('Found geospatial coordinates')
        return results[0]['geometry']['location']['lat'], results[0]['geometry']['location']['lng']
    else:
        logger.debug('Could not find geospatial coordinates')
        return np.nan, np.nan

我之所以编写自己的代码来使用地理编码 API 完成这些(以及更多)工作,而不是使用流行的 geocoder 库,是因为该库中强加的 API 的配额行为已经过时。Google 最近已经可以对其地理编码 API 进行无限数量的请求,但是 geocoder 的 Google 地理编码方法似乎将 API 调用限制在 2500 次。如果您感兴趣,我在本文末尾链接的 GitHub repo 中包含了我用于处理数据和地理编码的所有代码。

房地产价格登记册分析

查看数据的标题,我们可以看到每一列都包括分类数据,不包括房产的实际价格。

Figure 1: Head of PPR data.

大多数列也只包含 2-3 个唯一值。缺乏数字数据(如卧室数量、可用设施、房产的确切面积,单位为平方米)。m 等。)和重要的分类变量(例如,该物业所面向的方向)使得该数据对于机器学习来说不是最佳的。然而,我们仍然可以对影响爱尔兰房地产价格的因素获得一些有价值的见解。

让我们看看每个县在数据中的表现如何:

Figure 2: Value counts for counties in PPR data.

我们可以看到,都柏林、科克、基尔代尔、戈尔韦和米斯在过去两年中购买房产的数量最多。绘制这 5 个县的房地产价格分布图:

Figure 3: Distributions of 5 most represented counties.

一些明显的异常值,尤其是在都柏林,正在打破小提琴阴谋的规模。让我们只看看高达€200 万英镑的价格。

Figure 4: Distributions of 5 most represented counties with property price limit at €2m.

不出所料,都柏林拥有最昂贵的住宅物业(即使在剔除极端异常值后),平均房价在€17 万到€15 万之间,高于上述其他 4 个县。有趣的是,基尔代尔和米斯的平均房价更高,尽管科克和戈尔韦提供了蓬勃发展的学生文化、夜生活、旅游以及熟练和非熟练工作机会。这可以归结为他们靠近都柏林的城市扩张。让我们深入研究这个问题,并把与都柏林接壤的另一个县——威克洛纳入我们的分析,看看那里的房价是否与基尔代尔和米斯的房价相当。

Figure 5: Distributions of counties bordering Dublin with property price limit at €2m.

从图 5 来看,维克罗的平均房价甚至比基尔代尔和米斯还要高。似乎大多数人宁愿住在都柏林的郊区,也不愿搬到更远的地方,如戈尔韦或科克。都柏林及其周边县的综合房价中值为€31 万英镑,而爱尔兰其他地区的房价中值正好是€15.5 万英镑的一半。人们想要住在爱尔兰的经济中心或附近,这并不完全令人震惊,但这些县和都柏林之间的住宅价格差异的确切程度看起来很明显。

让我们回到图 3,仔细看看极端的异常值。我们可以看到,都柏林 2017 年至 2018 年间的最高房价为€7500 万英镑。让我们看看所有其他县的最高房价,因为我们也可以看到,在过去的两年里,科克的一所房子以 6770 万英镑的价格卖给了€。

Figure 6: Most expensive residential property in each county.

都柏林、科克、戈尔韦,有趣的是,克莱尔在过去几年拥有最昂贵的住宅。但是这些仅仅是整栋公寓大楼吗?无数公寓的价格被汇总并列在一个地址下?正如 PPR 网站所述,情况很可能就是这样:

在许多公寓以单一价格出售的情况下(例如橡树大道 1 号至 15 号公寓以€200 万英镑的价格出售),登记册上的信息取决于向税务专员提交的内容。

例如,文件管理器可能已经输入了-

-只有一套公寓(如橡树路 1 号)的价格为 200 万€;

-每套公寓分开,并在每套公寓之间划分价格(例如,1 号公寓为€133,333,2 号公寓为€133,333,依此类推,15 号公寓为€133,333)。

-所有公寓(如橡树大道 1 号至 15 号),价格为 200 万€。

出售日期是印花税报税表的申报人输入的日期,作为转让物业所有权的契据日期。

深入挖掘构成前 4 名最昂贵房产的个人地址,发现它们确实都是公寓楼(其中一栋是学生宿舍)。然而,基尔代尔的小幅上涨是一栋单房以 800 万€的价格售出。我敢肯定,如果我们挖掘都柏林的离群值,我们会发现一些非常富有的个人的昂贵房产。各县卖的最便宜的楼盘呢?

Figure 7: Cheapest residential property in each county.

这里的县与县之间有很多相似之处。我把这归因于都柏林、科克和戈尔韦的大量公寓,它们打破了图 6 中的比例。每个县最便宜的住宅可能是小公寓(在城市地区)或小屋(在农村地区)。这个情节最有趣的一面是,都柏林实际上在过去的两年里卖出了最便宜的住宅。

你可能会认为都柏林周围的价格如此之高是因为人口过剩和城市的溢出。快速浏览一下全国售出的房屋数量就可以发现,情况并不一定如此。都柏林购买了 33,074 套房产,都柏林及其周边各县购买了 45,742 套房产,除都柏林、基尔代尔、米斯和威克洛之外,该国其他地区购买了 54,557 套房产。同样,整个公寓楼在登记册中被列为一个地址的事实可能会使这些数字偏离一个很好的位置,但有趣的是,尽管该国大多数人口生活在都柏林或其周围,但仍有大量住宅物业在首都以外被购买。在过去的两年里,爱尔兰总共购买了 100,299 套住房。其中 81,886 套是二手房,其余 18,413 套是新房/公寓。€新房的中值价格是 28.1 万英镑,而€旧房的中值价格是 20.7 万英镑——两者之间的平均差距接近€的 8 万英镑。看起来购买一套二手房可能是个不错的选择(如果你安顿下来后不需要太多的维修)。

此时,你可能会说“好吧,我明白了。都柏林的房价很贵”,你不会错的。但你会问,都柏林哪里的房子平均最贵?从图 8 来看,答案就在南边。

Figure 8: Median property prices per Dublin postcode.

并非所有都柏林的邮政编码都出现在最近两年的 PPR 数据中。有很多缺失值,在这些值中,提交房产购买的人没有包括邮政编码,或者只是在地址中包括了邮政编码,而没有填写实际的邮政编码字段。查看我们现有的数据,我们发现都柏林 6 区和 6w 区的平均房价最高。这些都是都柏林富裕南区的特别富裕的地区。都柏林 14 酒店也位于该区域旁边,因此它拥有第二贵的酒店是有道理的。都柏林 4 和 16 完成了这个图表的南部统治。任何熟悉该地区的人都不会感到惊讶,该县西部和北部的邮政编码构成了这里最便宜的房产。当然,这并不是对这些地区的任何人的轻视——都柏林 15 区(我住的地方)也是房产价值中值最低的地区之一。

那么我们从这个分析中学到了什么呢?嗯,我们知道,如果我们想省钱,我们应该在都柏林及其周边 3 个县之外购买一处房产(也许有人可以对搬到奥法利和通勤到都柏林所节省的钱进行成本效益分析?).然而,PPR 的数据远非完美,因此,任何基于这些数据的房地产价格分析都应持保留态度。房产价值被像整个公寓大楼被列为一个地址这样的事情打乱了——特别是在都柏林、科克和戈尔韦,这些地方已经建起了城镇中心,并拥有爱尔兰最大的大学。最后,这些数据的自我报告、未被触及的性质带来了错误,使得地理编码等工作比发布前编辑数据要困难一些。

Chirag Chadha 是爱尔兰都柏林 UnitedHealth Group/Optum 的数据科学家。你可以通过他的电子邮件(chadhac@tcd.ie)或通过他的 LinkedIn 联系到他。

[## cchadha 2/PPR-外壳

使用房地产价格登记数据预测爱尔兰的房价- cchadha2/ppr-housing

github.com](https://github.com/cchadha2/ppr-housing)

《奇异星球》系列漫画解析

原文:https://towardsdatascience.com/an-analysis-of-the-strange-planet-comic-series-56410af3a5b1?source=collection_archive---------24-----------------------

以及构建分类模型以从任意长度的列表中选择项目的挑战

对于那些不熟悉陌生星球的人来说:

这是什么?

奇异星球是内森·w·派尔创作的网络漫画。在这些漫画和他拟人化鸽子的周末故事之间,他的是我最喜欢关注的 instagrams 之一。在漫画中,派尔发表了关于普通人类互动的文章,将人类描绘成外星生物

我花时间分析了 instagram 上发布的所有漫画,以便建立一个模型,可以预测任何给定漫画的帖子描述。

为什么会有人想预测描述?

几乎每篇帖子都包括一个单词的漫画描述,格式如下:

随着时间的推移,追随者在阅读这个单词之前就已经开始猜测它了(并且在他们猜对的时候宣布)。这引发了如下讨论:

如果你不跟着漫画走,很难解释为什么玩这个猜谜游戏很有趣或令人兴奋,但对我和许多其他人来说,就是这样。

这一切都启发了我,让我看看我是否能创造出一种能替我猜测的算法。

选择用于分析的漫画

为了更容易地训练我的预测模型,我只分析了符合以下标准的漫画:

  • 漫画正好是 4 个面板
  • 漫画中准确地列出了描述
  • 描述只有一个词

几乎每部漫画都符合这些标准,给了我 138 部漫画。

探索性数据分析

字数

《奇异星球》漫画平均 35 个字。最短的漫画有 5 个字,最长的漫画有 74 个字。第三面板最有可能没有文字(14%的漫画第三面板是空的)。

随着时间的推移,漫画也变得稍微长了一些:

漫画中帖子描述的位置

关于漫画中描述出现的字数,似乎没有明显的趋势。然而,描述更有可能出现在第三个或第四个面板中,而不是第一个或第二个面板中(如果描述性单词在漫画中出现不止一次,所有实例都会在下面显示)。

词汇使用频率

我运行了两个模型,看看哪些词在帖子中使用频率最高。在第一个模型中,我没有排除停用词,因为我认为陌生星球宇宙中的生物的语言可能没有 Python 分配给英语的停用词。我发现漫画中最常用的 20 个单词都属于停用词的范畴,所以我做了一个新的模型,把停用词排除在外。(经常阅读的读者不会惊讶,找到了走向巅峰的“寄托”。)

从第二个词表开始,我还构建了一个词云,展示《奇异星球》中最常用的词。

情感分析

我利用了 TextBlob 库中的朴素贝叶斯情感分析。从这个分析中,我记录了一个漫画或描述词有积极情绪的可能性。

从这个情绪分析中需要注意一些事情:

  • 该描述更有可能被分析为具有中性情绪(概率=0.5)。这是有意义的,因为描述比整个漫画更少的材料来推断情绪。
  • 蓝线表示图表中漫画的情感和描述的情感相同的区域。在这条线以上,描述比漫画更可能是正面的。在这条线以下,漫画比描述更可能是正面的。大多数点都在这条线以下,表明漫画倾向于被解释为更积极的。
  • 一般来说,奇怪的星球漫画很可能有积极的情绪(更多的点在图表的右侧)。

单词长度

描述往往比漫画中的平均单词长,如下面的两个直方图所示。漫画中的单词长度倾向于右偏,而描述性单词具有更正态/双峰分布,平均为更长的单词。

模型

一些假设

到目前为止,停用词从未被用作描述。为了简化我的模型并使它(可能)表现得更好,我假设一个停用词永远不会被用来描述一篇文章。

在所有的漫画中,只有两个描述性的词用了两次(其余的都是独一无二的):

d e l i b e r a t e

c o m p l e t i o

为了建立模型,我做了一个类似的假设,即一个描述词永远不会被重新使用。即使我知道这不是真的,但这种情况经常发生,我更愿意使用正确的假设,因为我知道当一个单词被重复时,我将是不正确的。

模型构建挑战

通常,在创建分类模型时,您希望它接受输入数据并输出该数据的分类:

然而,在这种情况下,我们并不是确切地看着一个单词并猜测它是否是描述。相反,我们查看不同长度的列表,并预测列表中的哪个单词是描述。

为了解决这个问题,我将我的训练数据转换成一个传统的分类问题,其中漫画中的每个单词都是一个独特的样本。对每个单词样本进行的预测是将它放入两个类别之一:“是描述”或“不是描述”这允许我建立一个标准的分类模型(在这个项目中,是一个随机的森林模型)。

一旦我建立了模型,我就以稍微不同的方式处理我的测试数据。对于漫画中的每个单词,我使用分类模型来分配成为漫画中每个单词的描述的概率。然后,一个单独的模型选择概率最高的单词作为其对描述的猜测。

不平衡的班级

由于我用来创建训练数据集的方法,我的数据被拆分为:

  • 我的样本中有 3.8%属于“描述”组
  • 我的样本中有 96.2%属于“不是描述”组

对于不平衡的类,我努力创建一个模型,它不会只是假设所有的样本都不是描述。为了解决这个问题,我在我的训练数据上使用了这里列出的过采样和欠采样技术。

为了传达重采样如何改变我的模型所基于的数据,这里有两个配对图,显示了我的模型正在使用的一些输入要素。在下面的图中,蓝点表示漫画中的单词,而不是描述中的单词。橙色圆点表示描述词。

左边是我重新平衡之前的数据。右边是我重新平衡后的数据。请注意右图中橙色点的百分比有多大。

还要注意,EDA 部分列出的一些观察结果可以在上面的散点图和直方图中看到。例如:

  • 描述词的长度通常比漫画中的其他词长(参见第 2 行第 2 列的直方图,其中描述的分布更长)
  • 漫画情感与描述(紫色点)的早期散点图表明,描述比整体漫画更可能是中性的。然而,该配对图包括单独的所有单词,利用该数据,我们看到不是描述单词的单词最有可能是中性的,而描述单词相对于其他单词具有相当正常的情感分布(参见配对图中的第三行)。

结果呢

我很难过地说,我的模特表现得很可怜。在我试图用数据拟合的 37 部漫画中,我没有一个单词是正确的。下面是我试图猜测的单词(“单词”)和我的模型预测的单词(“rf_predict”)。

当我在重新采样的训练数据上拟合模型时,我有理由相信模型会表现良好。我的 f1 成绩是 0.95,准确率是 0.97。这远远高于我采样的 75%的基线精度。

那么为什么我的模型表现这么差呢?

对于在训练数据中表现良好而在测试数据中表现不佳的模型,我的第一直觉是该模型过度适合训练数据。然而,在这种情况下,这可能是也可能不是一个问题。

训练数据有一个更容易解决的分类问题:

一个给定的词是不是描述?

通过随机猜测,这个模型有 50%的可能性是正确的。

然而,测试数据是一个更具挑战性的问题:

在这个单词列表中,哪个单词最有可能是描述?

通过随机猜测,正确的几率从 20%到 2%不等。

其他一些很难预测的原因描述如下:

  • 虽然 138 幅漫画对于创作者来说在短时间内完成是一个很大的数目,但这真的不足以制作一个好的模型。
  • 在这个训练营中,我的数据建模工具每天都在增加。我在两周内学到的一项新技能可能会帮助我更好地构建这个模型。一整年后,有了新的漫画和新的技能,谁知道我的准确度还能提高多少。
  • 我使用的输入特征可能不能很好地预测输出
  • 我用来对数据进行重采样以改善不平衡类的方法可能会引入新的问题。

结论

我本来非常希望做一个模型,能在大部分时间(或者部分时间,或者至少一次)告诉你一个帖子的描述。不幸的是,在对我的模型进行多次更新后,我无法到达那里。

作为对派尔先生的敬意,也为了表达我看到我的预测模型的性能时的感受,我画了下面这幅漫画。

a n t i c i p a t e

我还欣慰地知道,已经有一部奇怪的星球漫画承认做出某些预测是多么具有挑战性:

[1]停用词是既频繁使用又传达不了什么意思的词。在英语中,这些单词包括:I,the,it,who,that,因为,any…删除这些单词通常很有用,因为它们主要是给模型添加噪声。

[2]在自然语言处理(NLP)中,朴素贝叶斯模型从所有单词相互独立的假设开始。在某些情况下,这可能是有问题的(例如,如果文本说“不快乐”,单词“不”和“快乐”被解释为不相关)。虽然这看起来像是一个天真的假设(明白吗?明白了吗?😃 ),它通常可以创建有用的预测。在这种情况下,我将漫画的情感分析与漫画分析中的一个词进行比较,我相信通过独立地分析每个词,我会得到最好的结果。

[3]在建立预测模型时,您总是希望将现有的数据拆分为训练数据和测试数据。您的模型是围绕给定的训练数据构建的。然后,为了让您看到模型实际上有多预测,您给它您的测试数据集(它以前没有见过)来进行预测。

在大多数情况下,您会以相同的方式处理训练数据和测试数据。然而,为了更清晰地训练我的模型和更真实地测试我的数据,我对训练数据和测试数据进行了不同的处理。

知识工作者度量方法

原文:https://towardsdatascience.com/an-approach-to-knowledge-worker-metrics-55574efc210c?source=collection_archive---------26-----------------------

如果你不能管理你不能衡量的东西,那么我们中的很多人实际上都是无法管理的。这是我如何解决这个问题的方法。

Photo by Austin Distel on Unsplash

在最近的一次“振作起来”的探索中,我首先确定了基石目标——能够有效地成就或毁灭我的世界的大的、影响广泛的生活组成部分。当列出这些目标时,我立即写下“在工作中更加有效”。这是我最大的挑战之一(也是潜在回报最大的潜在改进领域)。我缺乏专业效率表现在很多方面:虽然我的实际工作成果高于平均水平,但这是以加班和周末加班为代价的,在工作日把自己磨得筋疲力尽,发现自己经常处于近乎疯狂的状态,这与我周围的文化格格不入。我工作的方式不是…工作。

解决复杂挑战的第一步总是研究,了解比我聪明得多的人对这个问题的看法。由于我的研究必须支持我更大的跨职能目标(不仅限于工作效率,还包括我更大的目标“让我的 sh*t 在一起”),如果没有上下文,这些来源可能会显得有点古怪;然而,来自每个工作线程的位一起建立该方法所基于的给定原则。以下是我阅读清单中的相关标题,排名不分先后:

出于多种原因,所有这些作品都值得一读,如果你有时间,直接去阅读它们的来源会更好。从综合的假设、断言和普遍支持的结论中,我得出了这些原则:

  • 手艺可以赋予生活意义,可能是通往幸福的捷径。自从尼采宣布上帝已死,我们被迫寻找自己的人生目标;掌握一门手艺并从我们的劳动中结出实实在在的果实,这种行为已经被证明是做到这一点的方法。
  • 手艺要求一个人深深地投入到自己的工作中。这种深度参与有多种名称(“心流”、“深度工作”以及某种程度上的“实际掌握”),是收获工艺益处的关键因素。
  • 对于知识工作者来说,手工艺(通常)的投资回报率最高。一名年薪 15 万美元的资深营销人员最有价值的实践是:在这种情况下,设计大获成功的新活动或提高广告支出的效率。离开他们的工作(如填充报告)的时间会产生非常低的投资回报率。
  • 因为知识工作很难衡量,我们默认用“忙碌”来衡量这在 Newport 的深度工作中得到了很好的扩展;没有具体的、短期的迭代(即每日)度量来定义成功,商业文化倾向于关注谁在做最 可见的 工作——而不考虑工作的价值。谁在聊天中回复最快,或者凌晨 3 点发送的电子邮件最多?谁和老板见面次数最多,cc 的人最多?这通常是知识工作者价值的实际衡量标准。
  • 对于大多数知识工作者来说,忙碌是成本中心,而不是利润中心。回复电子邮件、参与即时消息聊天和在状态会议中坐在幻灯片台前都不是有利可图的任务。没有针对“很少使用的中层管理电子邮件链”的第三方市场;客户购买创新的产品、有影响力的服务、更高效的流程和令人兴奋的功能。这些有价值的东西是知识工作者执行工艺的产品——设计、发明、工程、审计和营销——这几乎总是与繁忙的工作不一致。电子邮件、聊天和开放式办公室飞临都属于商务旅行中的销售费用。奖励凌晨 3 点发邮件者的知识工作的公司文化,也可能会根据销售人员在销售活动中的花费来奖励他们。
  • 如果知识工作者从工艺中获得最大的投资回报,并且工艺最有可能为知识工作者提供意义和快乐的源泉,那么管理知识工作者就变成了让他们在工作日尽可能多的时间从事深度工艺工作。

Woah. You said it NDT.

该理论

我的职业是数据工程师。我一直认为,与其他知识工作者不同,我们这些从事软件工作的人拥有真正的生产力指标优势——我们有故事点,对吗?除了当我更深入地探究我在效率上的挫折和失败时,它们几乎从未植根于架构和开发软件的技术工作中。我能够把我的团队锁在一个有白板的房间里并解决一个复杂问题的时候,是我感到活着、有目标并深深沉浸在“心流”中的时候。这些时期充满活力。会议的冲击,像俄罗斯方块一样塞满我收件箱的电子邮件流,像数字爆米花一样充斥在我的通知栏中的松弛脉冲,成为我精疲力竭的重压。更重要的是,这些工作没有一项是我的度量标准可追踪的;回复一封 25 人的电子邮件链已经有 3 周了,有多少敏捷故事点?

所以我收集了我所做的所有不同类型的工作,并把它们分成不同的商业价值类型。然后我把它们按照从深度工艺工作→浅度无用功的等级分类(深度工作、浅度工作和这个一般概念的大部分直接来自纽波特的书,同样 100%值得一读)。这是我想到的:

Gradient of different types of knowledge work

我的排序是从最忙碌的工作(最没有价值)到最有技术含量的工作(最有价值):

  1. 业务的业务是我所说的公司会议、管理和评估工作,以及通常知识工作者作为员工需要做的与他们的实际角色无关的所有事情。
  2. 充当人类路由器直接取自深度工作,这可能是我听到的关于大量电子邮件和即时消息的最佳描述,这些邮件和即时消息用于移动信息,而没有在这个过程中增加任何高技能价值。经常包括“请指教”这样的话。
  3. 作为代表出席会议,通常表现为“我们这里应该有一个<的人插入你的团队>”。
  4. “随机”即传统上被认为是“偷懒”的事情,比如聊足球比赛或在社交媒体上看视频。
  5. 一般思维&执行像医生给病人量血压。
  6. 捷径思维,比如一个经验丰富的营销人员告诉一个初级人员发送电子邮件应该使用什么样的模板。
  7. 公共场合比如建筑师在会议上演讲。
  8. 跨学科学习即数学家阅读有关拿破仑的战术。
  9. 高技能学习就像一名工程师阅读应用程序设计的新理论。
  10. 广泛而有影响力的思维比如一名机械工程师在考虑一种新的内燃机方法。
  11. 高技能思维比如一名会计师在为一家大公司考虑最佳的税收方案。
  12. 高度熟练的执行比如做你擅长的手术。
  13. 极具影响力的执行即建立一项改变世界的技术,如反重力或汽车。

其他知识工作者可以并且应该移动这些,添加它们,根据需要取走一些,直到感觉合适为止。不同的组织会对不同的工作有不同的评价——因此,虽然一个团队可能都同意前 3 条,但管理层可能会觉得高技能学习比考虑大事更重要。一些要点:

  • 与许多人相比,我把捷径思维放在了较低的位置,因为“快速提问”对深入工作的过程极具破坏性。为新开发人员节省 10 分钟搜索代码库的时间(无论如何,他们可能会从中受益)可能会打破高级开发人员的创造性思维,这将会是一笔财富。
  • 一般的想法是,当人们被“因为他们聪明”而卷入一些他们不需要的事情时。首席执行官想要一个有经验的人来检查这个电子表格,所以他们指派了一个首席会计师,这个人非常胜任这项工作。
  • 注意,这个模型中的“随机”比参加一个松散相关的会议更有价值。如果一个知识工作者一天中长时间沉浸在工艺中,花 15 分钟看一段猫视频(一种精神净化)来冷却他们的大脑可能是他们投入“第二轮”所需要的
  • 我在公众面前挣扎。对于一些公司来说,在招聘人才时保持公众的关注是至关重要的。对于一些知识工作者来说,这是他们职业自我形象的重要组成部分。但是在两端都有一些公司和一些知识工作者,他们根本不在乎宣传,这将导致这种情况。

如果它有价值,就有衡量标准

所以我现在对我每天做的不同类型的知识工作有了一个标量值。如果我记录了我在每种知识工作上花费的时间,我就有了第二个数据点来矢量化我的工作分解。我可以将这些看做单独的条形图(每种类型的工作一个条形图,高度代表我每周投入的时间),或者我可以将 x 轴作为“工艺等级”,值为 1 代表业务的业务工作,值为 13 代表具有广泛影响力的执行工作,值为 13 代表具有广泛影响力的执行工作,值为 T3,y 轴代表累计小时数。然后我们有一个理想主义的国家目标,在一张图中,看起来像这样:

现在这和我现在的工作曲线看起来相差甚远。但这给了我和我的领导一套清晰可追踪的衡量标准,告诉我时间的使用效率(本质上是我的“知识工作者投资回报率”)。

在实践中

过去我在组织系统上失败的地方之一是保留我现有的工作流,同时试图从技术上从它们中提取指标。我设计了复杂的系统,从几十个应用程序中导入数据,从一个应用程序中的动作触发带时间戳的警报,以在另一个应用程序中捕捉。正如软件开发人员经常了解到,与其构建复杂的测试流程,不如首先编写更多可测试的代码,我也了解到,最好调整我的工作流程和习惯,使其更易于管理。以下是方法。

  1. 放好电话。认真。我不是说“与世隔绝”,我是说通过只使用一个设备来克服管理多个设备的第一个主要障碍。我们通过电话交流的任何方式都有一个桌面等价物;短信、社交媒体和大多数聊天应用都可以在浏览器中使用。如果这意味着我的一些朋友需要停止使用他们坚持使用的任何深奥的聊天应用程序,选择一个主流应用程序,那么就这样吧。我不想错过我的另一半打来的紧急电话,所以为了以防万一,我把手机锁在了桌子上,把铃声的音量调到最大。
  2. ***简化工具集。目前,我仅使用几个组件来跟踪我的知识型员工的投资回报率。
    *谷歌日历(我的工作日历)
    • 本网站转换下载的日历。ics 文件到 a .csv
    • 这个 Chrome 扩展来跟踪我的浏览器使用
    • Google Sheets 来收集和整理数据
      我想建立一个完全自动化的系统,每天从每个来源 ETLs 数据(毕竟我是一个数据工程师),但我决定最好是证明然后润色。如果几个月的手动生成的报告证明是有价值的,我将采取下一步,将实现为一个完全自动化的系统。而且我保证让它开源:)。***
  3. 单任务。你可以自己阅读所有关于注意力残留的内容,但是可以说,一心多用对生产力有复合的负面影响。同样,如果我试图同时做几件不同的事情,也没有合理的方法来跟踪我在每一项任务上花了多少时间。这意味着当我在解决一个软件问题时,我会关闭我的电子邮件、Slack、Instagram 等。
  4. 从日历开始。对于我日历上的每一项,我都在描述中添加了一个标签,类似于KWV=3,其中 KWV 代表“知识工作者的价值”,3 代表工作类型(在我的量表中是“作为代表”)。对于我不拥有的会议,这只会显示在我的个人副本上,对于我拥有的会议,没有人会知道这意味着什么。现在,我可以在我的日历上安排一些块来代表对特定任务的专注。如果我要在午饭前处理一张 JIRA bug 票,我可以在我的日历中创建这个块,并在主体中包含适当的KWV=12标记。
  5. 跟踪其余的。对于白天需要做的所有“肤浅的工作”,使用我的浏览器可以让跟踪插件替我做这些工作。写电子邮件、回复邮件、给朋友发短信、查看黑客新闻——这一切都发生在时间紧迫的时候。如果你认同“创造者/管理者”理论(我也认同),这些应该发生在一个指定的时间段,与你一天中最有效率的时间相对(所以对我来说,我在早上状态最好,所以我会在午饭后处理这个“肤浅的工作”)。
  6. 仅使用浏览器(无操作系统应用)。因为我们使用一个简单的 Chrome 插件来跟踪参与时间,你不会想用 Slack 应用这样的原生工具把事情复杂化。使用基于浏览器的工具也使得锁定和保持专注变得格外容易。
  7. 导出、收集和测量。每周从我的谷歌日历导出(使用设置中的手动“导出”按钮)上传到这个网站进行转换。浏览器扩展的设置页面也有一个简单的 csv 导出功能。结合这两个数据集,做一点清理并添加一个 v-lookup 来快速分类具有相同KWV=值的常见网站,然后嘣!您有基本的指标来分析您的知识工人的投资回报率。(注意:我意识到对于许多人来说,这可能是说起来容易做起来难,所以我将尝试一个非常基本的手动数据转换器,并在后续文章中发布在这里)。

为什么这很重要

任何类型的管理都包括两个主要部分:量表和杠杆。
量表是管理者用来确定当前状态、方向性和未来可能状态的度量、输入和指标。
杠杆是一个经理可以对量表做出反应的事情。
报告您的知识型员工投资回报为我的管理团队提供了这两个方面。这些指标本身就充当了标尺——经理们可以看到我在低价值会议上花费了越来越多的时间,或者发现电子邮件的突然激增或现成的深度技术工作的匮乏。它们还为杠杆创造了基础:经理们可以联系那些长期滥用会议的人,他们掌握着这些过程正在损害我的工作效率的数据,或者恳求那些热衷于发送状态邮件的人(“我们这个月的工作效率如此接近峰值,你是否认为你可以检查一下你这个月机票上的 JIRA 状态,而不是给开发人员发电子邮件,这样我们就可以多发送两张机票?”).
将这些知识工作者 ROI 指标与传统的成功衡量指标(如软件团队的故事点、营销人员的广告收入归属等)结合起来,我们就有了一个完整的仪表板,从中我们可以准确地了解现代知识工作者的生产力状况。

未来状态(科技产品)

这个想法仍处于萌芽阶段,看看我的价值尺度、测量技术和组织对数据的反应将如何展开,将会很有趣。我已经可以看到手动提取和清理数据的感觉很“恶心”,我不得不阻止自己构建那个预定的提取器。我在想,它会将原始数据上传到 Postgres(可能是 RDS),通过 DBT 模型运行清理和整合转换,然后生成一些简单的 matplotlib 或 Google charts HTML,直接从 s3 桶提供给每日 KWVROI 仪表板。只有时间会证明一切!

卷积递归神经网络的一种方法

原文:https://towardsdatascience.com/an-approach-towards-convolutional-recurrent-neural-networks-a2e6ce722b19?source=collection_archive---------7-----------------------

Proposed CRNN

卷积递归神经网络是两个最重要的神经网络的结合。CRNN(卷积递归神经网络)包括 CNN(卷积神经网络),之后是 RNN(递归神经网络)。所提出的网络类似于 CRNN,但是产生更好或最优的结果,特别是对于音频信号处理。

网络的组成

该网络从传统的 2D 卷积神经网络开始,然后进行批量归一化、ELU 激活、最大池化和 50%退出率的退出。三个这样的卷积层以它们相应的激活顺序放置。卷积层之后是置换和整形层,这对于 CRNN 是非常必要的,因为特征向量的形状在 CNN 和 RNN 之间是不同的。卷积层是在三维特征向量上开发的,而递归神经网络是在二维特征向量上开发的。

置换层改变特征向量的轴的方向,随后是整形层,整形层将特征向量转换为二维特征向量。RNN 与二维特征向量兼容。所提出的网络包括两个双向 GRU 层,每层中有“n”个 GRU 单元,其中“n”取决于使用相应网络执行的分类的类别数。使用双向 GRU(门控循环单元)代替单向 RNN 层,因为双向层不仅考虑未来时间戳,还考虑未来时间戳表示。结合来自两个时间戳的二维表示允许以非常优化的方式结合时间维度特征。

最后,双向层的输出被馈送到时间分布密集层,随后是全连接层。

建议网络的实施如下:

def get_model(data_in, data_out, _cnn_nb_filt, _cnn_pool_size, _rnn_nb, _fc_nb):spec_start = Input(shape=(data_in.shape[-3], data_in.shape[-2], data_in.shape[-1]))
 spec_x = spec_start
 for _i, _cnt in enumerate(_cnn_pool_size):
 spec_x = Conv2D(filters = cnn_nb_filt, kernel_size=(2, 2), padding=’same’)(spec_x)
 spec_x = BatchNormalization(axis=1)(spec_x)
 spec_x = Activation(‘relu’)(spec_x)
 spec_x = MaxPooling2D(pool_size=(1, _cnn_pool_size[_i]))(spec_x)
 spec_x = Dropout(dropout_rate)(spec_x)
 spec_x = Permute((2, 1, 3))(spec_x)
 spec_x = Reshape((data_in.shape[-2], -1))(spec_x)for _r in _rnn_nb:
 spec_x = Bidirectional(
 GRU(_r, activation=’tanh’, dropout=dropout_rate, recurrent_dropout=dropout_rate, return_sequences=True),
 merge_mode=’concat’)(spec_x)for _f in _fc_nb:
 spec_x = TimeDistributed(Dense(_f))(spec_x)
 spec_x = Dropout(dropout_rate)(spec_x)spec_x = TimeDistributed(Dense(data_out.shape[-1]))(spec_x)
 out = Activation(‘sigmoid’, name=’strong_out’)(spec_x)_model = Model(inputs=spec_start, outputs=out)
 _model.compile(optimizer=’Adam’, loss=’binary_crossentropy’,metrics = [‘accuracy’])
 _model.summary()
 return _model

可以显示模型摘要,如下所示:

# Load model”
model = get_model(X, Y, cnn_nb_filt, cnn_pool_size, rnn_nb, fc_nb)

Model Summary for a 10 class classification for audio analysis.

一个增强的艺术家

原文:https://towardsdatascience.com/an-augmented-artist-e9b5ba3081ab?source=collection_archive---------24-----------------------

最近一段时间,我们看到大量基于人工智能的艺术作品涌入,这些艺术作品来自现实生活中的数据集,如照片和绘画。在这样的作品中,机器从人类的艺术作品中学习并获得灵感,创造出类似的东西。但创造力的真正本质不仅仅在于重复或模拟部分或全部灵感,还在于能够创造惊喜、新的联系和独特的东西(不可重复)。这就是为什么可以说机器无法取代人类的创造力。一件原创的艺术品可能是灵感激发的,但人类添加了独特的价值,使其具有原创性。

上个月,我和一个朋友致力于一个生活在云中的人工智能艺术家的想法,从日常生活中创造诗歌和艺术。我们给她取名为奥瑞亚。她能够从世界中获得灵感来创作艺术。但是她的作品中缺少某种独特性或惊喜。生成艺术可以重复的事实一直是我要填补的空白(我的赌注是在涌现领域)。这让我想到-如果一个人工智能艺术家可以从人类世界中获得灵感,那么人类艺术家可以从人工智能中获得灵感吗?

[## auria Kathi——云中的艺术家。

什么是艺术?是没说出口吗?令人不安的?

towardsdatascience.com](/auriakathi-596dfb8710d6)

让我解释一下,首先告诉你灵感是如何为我工作的。

我练习冥想已经有一段时间了,并且挖掘一个想法的根源——一个想法是如何产生的?虽然我还没有成功到成为一个明师,但是我已经有了一定的感悟。首先,一个想法来自一种感觉(因为没有更好的词)。现在这种感觉是非常原始和可解释的。基于我们的经验,我们将从这个“思想前身”中获得直接的洞察力,或者我们可以进一步解释它以获得不同的含义。想象你有一种长方形白色嗡嗡声的“感觉”。(是的,形状、颜色和声音结合在一起)。如果你刚乘过飞机,你会马上联想到飞机的机翼,或者进一步解释,你会联想到你工作的工厂里的人行道。这些“思想前辈”通常是图像、声音、触觉或任何其他感官感觉。我们如何解释,我们优先考虑哪种感觉,最终会变成一种思想。思想然后变成行动,如此等等。很大程度上,当我们做梦时,我们看到一系列这些思想前辈,我们以自己的方式解释和联想。因为解释是基于我们的经验,我们觉得梦是相关的。事实上,一般来说,解释(或者把你的脑袋包起来)在很大程度上是我们生活和学习的方式。

回到我们最初的想法,什么是增强艺术家?增强艺术家是从人工智能中获得灵感的人。相反,人工智能增强了人类艺术家的能力。

让我们把所有的争论都放在“人工智能会取代人类的创造力吗?”休息一下,想想人工智能如何增强人类的创造力。

我做了一个实验来尝试这种增强的艺术性:

成为一名增强艺术家

奥瑞亚从一首生成的诗中产生艺术,并根据她的“心情”来绘画。她的一些作品如下:

Image by Auria Kathi (created by Fabin Rasheed and Sleeba Paul)

在这里阅读更多关于 Auria 的信息

正如你所看到的,她的作品是抽象的,但你觉得你可以从中得到一些联系。例如,如果你问“这看起来像什么?”你可以在脑海中找到你所知道的物体的图像。我决定建立这些关系。我用奥瑞亚的作品作为我艺术的“思想前身”。我开始解读她的作品,并加入我自己的创造力。我选择了一种媒介来表达这一点,它是纸上的丙烯酸。让我向你们展示同样的过程:

我选择了奥瑞亚的一首诗和相应的艺术作品:

艾诗:

神圣的狗屎。

没有。你只是想玩玩

就在旁边,这很了不起

你可以找到你的生活。

我有种感觉

我也是,但我不打算去

做一整年。

AI 艺术:

Image by Auria Kathi (created by Fabin Rasheed and Sleeba Paul)

我开始重新想象诗歌,把它作为思想的前身。我用了奥瑞亚诗中的单词和短语。我脑海中形成的关系和意象被用来创作一首不同的诗歌,其概念植根于这些关系和意象:

扩充诗:

神圣的狗屎!

你以为你在边上玩

但是生活就像今天一样

其实只是我内心的一种感觉

未来几天也不会…

我觉得这首诗是关于我们内心是如何描绘出一幅美丽的世界图景的。当我们意识到世界的图景是完全不同的和令人震惊的时候,这种震惊让我们想到我们的视野是多么的浅薄。由于人类的发展,稳定的气候变得短暂,这是我们每天都看到的事情,然而我们用双手覆盖着我们的外围设备,并在自己的内心描绘出一幅关于发展、突破性技术、更好的生活水平和更长的寿命的画面。

这个概念是从奥瑞亚的诗中得到灵感的。Auria 创作的相应艺术启发我创作了以下图像:

增强艺术:

Image by Fabin Rasheed

这再一次展示了一个可能是立体派的乌托邦世界,在那里建筑被视为接近自然。我们知道在背景中有一个灰色的现实,但我们仍然试图通过忽略它们而不是纠正它们的唯一方法来隐藏我们的不完美。这种“幸福”的形象建立在我们的脑海中,我们忽略了一个事实,那就是我们曾经认为很接近的东西(这里是绿色植物)开始显示出它难以驾驭的阴暗面。

正如你所看到的,一个来自我个人经历的概念的美丽表达是由人工智能艺术引发的。我们如何从人工智能中获得这种艺术,这种艺术作品如何成为原创。正如你可能已经观察到的,这不仅仅是人工智能帮我想出的一个概念,而是形状、调色板甚至风格。我在人工智能如何被用于艺术灵感和创造新的艺术风格中看到了巨大的力量。这种人工智能艺术可以增强和强化人类的创造过程。基于人工智能的灵感可以衍生出不同的表达方式。

最后,为了吊起你的胃口,下面是我做的一些增强的艺术品(左边是奥瑞亚,右边是我的):

1.神入

Left-Image by Auria Kathi (created by Fabin Rasheed and Sleeba Paul) , Right-Image by Fabin Rasheed

2.差别

Left-Image by Auria Kathi (created by Fabin Rasheed and Sleeba Paul) , Right-Image by Fabin Rasheed

3.打孔

Left-Image by Auria Kathi (created by Fabin Rasheed and Sleeba Paul) , Right-Image by Fabin Rasheed

希望你喜欢这个项目。请在评论中分享你的想法。谢谢你。

S3 解释了 AWS 数据湖!

原文:https://towardsdatascience.com/an-aws-data-lake-with-s3-explained-c67c5f161db3?source=collection_archive---------8-----------------------

了解 S3 如何帮助你在 AWS 中设计一个理想的数据湖

如果你与数据世界有过任何联系,你可能听说过一些令人难忘的,通常是古怪的关于数据有多有价值的短语。我在想这样的短语…

  • “数据是新的石油。”
  • “没有大数据,你在高速公路上就像聋子和瞎子一样。”
  • “数据是新的培根!”🥓

说实话,炒作是值得的。(除了我不确定我是否同意关于熏肉的那个……)从分析的角度来看,数据帮助我们做出明智的决定,决定我们应该在业务中采取的下一步措施。这可以通过表格报告和数据仪表板的形式体现出来,这是一种被称为机器学习的新事物,受到了很多宣传。“昔日”的人们对如何做出最佳商业决策一无所知,而今天我们有大量的数据资源来帮助我们。使用我为以前的博客帖子创建的图标后备目录(😃),我说下面视觉里的东西都能产生有价值的数据,一点都不夸张。

因此,鉴于所有这些东西都在创造数据,下一个合乎逻辑的问题是…我们如何最好地利用它?

这就是数据湖概念的由来。简而言之,数据湖是一个统一的空间,用于放置所有结构化和非结构化数据,以构建分析解决方案。因为我是一个喜欢图片的人,这里有一张简单的图片可以说明这一点。

当然,您希望管理这个数据湖,以确保它不会成为数据转储场。数据治理非常重要,因此您需要确保使用您放入这个数据湖的东西来管理元数据、数据质量等等。这已经超出了这篇文章的范围,但是如果我不至少提一下的话,我就是在伤害你。

对于这篇文章,我特别想关注在 Amazon Web Services (AWS)中构建一个数据湖意味着什么。随着云解决方案风靡一时,人们希望在 AWS 中构建自己的数据湖是有道理的。更具体地说,人们希望使用 AWS 简单存储服务(S3)作为数据湖的基础是有道理的。

问题来了…无意冒犯 AWS,但我不认为他们在解释 S3 如何不同于“旧世界”概念方面做得很好。我拥有四个 AWS 认证,包括大数据专业,我遇到的学习这些认证的学习材料中没有一个真正很好地解释了我在这篇文章中将要解释的内容。我将在这篇文章中分享的内容可能会从根本上改变你对如何正确设计 AWS 数据湖的想法。

但是在我们进入那个之前,让我们谈论那些“旧世界”的概念…

物理数据隔离的内部世界

在 AWS 和云计算时代到来之前,公司确实有责任确保他们能够使用正确的物理基础架构来支持所有的数据库需求。我说的是购买这些巨大笨重的机器,有人必须用服务器补丁之类的东西来连接网络和维护。这并不容易(如果您目前维护一个内部基础架构,这仍然不容易),当然,从一个硬件只能容纳有限数量的数据的意义上来说,这是有限的。如果你想保存更多的数据,你必须加快新硬件的速度。如果你想把测试数据从生产数据中分离出来,你可能还需要安装新的硬件。

因此,如果您在一个物理环境中的数据必须在另一个物理环境中用于分析目的,您可能必须将该数据复制到新的副本环境中。当然,您可能还与源环境保持联系,以确保副本环境中的内容仍然是最新的。

上面的小图表示将数据从一个运营源复制到一个分析副本。当然,您的运营源数据很可能不在一个单一的环境中。您可能有数十个(如果不是数百个)收集数据的操作源。这是大量的数据移动!但是由于字面上的物理限制,复制必须完成。数据不可能同时出现在两个地方,对吧?

好吧,这就是 AWS 和他们的 S3 木桶的不同之处…

S3 水桶如何改变游戏

还记得我说过,我不认为 AWS 在解释 S3 桶如何被分割的整个事情上做得很好吗?如果你参加过任何 AWS 认证——包括云从业者——你可能记得 S3 对所有账户的存储桶使用一个共享的名称空间。例如,如果我在我的 AWS 帐户中创建一个名为“dkhundley”的存储桶,那么您在您的帐户中也不能创建一个名为“dkhundley”的存储桶。不幸的是,在大多数学习材料中,他们对它的解释就到此为止了。

但是你知道为什么会这样吗?如果没有也不要烦恼!也许一个简单的图片将有助于说明这一点…

从某种意义上说,认为 AWS 已经是一个巨大的数据湖并不公平!你不能创建一个名为“dkhundley”的桶的原因是,在这个我们称之为 S3 的巨大“数据湖”中已经有一个了。物理基础架构已经从我们身边抽象出来,所以从逻辑上来说,每个公司的数据就像是一个快乐的大家庭。

别让我吓到你!按照这种逻辑,您可能会得出一个自然的结论,即您的 S3 桶中的数据可以很容易地被其他人的公司和他们各自的 AWS 帐户访问。谢天谢地,这不是真的。AWS 一直有意为 AWS 中的所有内容提供适当的安全性,包括 S3 存储桶,因此只有在您拥有正确的凭证的情况下,您才能访问 S3 存储桶。

这是真正的问题,也是 S3 与本地基础设施如此不同的原因(这一点非常重要):您不一定要在生成 S3 存储桶中的数据的同一个帐户中才能访问这些数据。例如,如果您为我设置了正确的凭据,我就可以从我自己的个人 AWS 帐户 中看到贵公司 S3 存储区的内容,无需物理复制 。没错,伙计们。这是思维方式的巨大转变,不同于我们在内部部署环境中的行事方式。我们将时间集中在用物理基础设施隔离数据上,而云计算转移到了使用安全策略隔离数据上。

鉴于 AWS 采用的是现收现付模式,您希望以最大化性能和最小化成本的方式进行设计。考虑到存储和数据移动都有相关的成本,将数据从一个 S3 存储桶复制到另一个存储桶不仅成本高昂,而且效率低下。同样,在 S3 的上下文中,AWS 帐户不会隔离资源。

S3 数据湖的设计考虑

我希望到目前为止我们所涉及的内容是有意义的。需要的话再回去复习几遍!再说一次,我是一个喜欢图片的人,所以我希望我简单的插图能让你更容易理解。带着这种新的想法,让我们用一些设计考虑来结束这篇文章,当你在 S3 建立你的数据湖时,你可以考虑一下:

  • ****测试与生产数据:当您创建一个对数据进行更改的新 IT 解决方案时,很自然地希望保护您的生产级数据免受该新解决方案的负面影响。在大多数内部基础设施中,这意味着在物理上隔离测试和生产环境。需要考虑如何在 S3 隔离测试和生产数据,这可以通过多种方式实现。最安全和最简单的方法是将数据完全隔离到各自的存储桶中,您可以使用存储桶命名标准或 AWS 标签来管理组织。(或者都是!)但是如果你不想复制所有的东西,有办法在每个桶中隔离某些东西。这将需要你做更多的工作,但是如果成本管理对你来说是一个重要的因素,这可能是值得的。
  • ****敏感数据保护:这很像我们刚刚在上面讨论的隔离测试与生产。最简单的方法还是将敏感数据隔离到它自己的桶中,并通过许多安全措施真正锁定它,但同样,也可以将敏感数据和非敏感数据锁定在同一个桶中。我可能不想惹这种麻烦,但是朋友们,你们必须这样做。
  • ****数据湖与数据仓库:让我们在这里明确一下……数据湖并不等同于数据仓库。数据仓库通常只包含结构化或半结构化的数据,而数据湖包含所有的东西:结构化的、半结构化的和非结构化的。数据湖通常与数据仓库共存,而数据仓库通常建立在数据湖之上。就 AWS 而言,最常见的实现是使用 S3 作为数据湖,使用红移作为数据仓库。当然,在 AWS 中剥猫皮的方法不止一种,所以不要以为你的仓储需求只局限于红移。
  • ****数据管理&治理:我已经在这篇文章中提到过一次,但我认为值得再次提出。如果没有适当的数据管理和治理,数据湖很快就会变成数据转储。当你设计你的数据湖时,AWS 确实提供了像 AWS Glue 这样的服务来帮助你管理像数据目录这样的东西,但是它让你自己去弄清楚这些东西。如果你真的想在这个领域得到额外的帮助,也有许多第三方供应商会在这里提供很多帮助。(Oomph 是一个技术术语。😂)根据您公司的需求,引入第三方供应商来帮助您组织数据湖可能是值得的。(我对此并不太熟悉,但 AWS 确实也提供了一项名为 Lake Formation 的服务,或许也值得一试。)
  • ****湖消耗:当你想在数据湖的基础上构建分析解决方案时,事情会变得有点棘手。虽然 AWS 帐户在将数据放入数据湖时并不重要,但对于您的消费解决方案来说却更重要。多个帐户可以从同一个数据湖中提取数据,但是您必须确保它们都有适当的安全凭证来访问这些底层 S3 存储桶。很有可能,您不希望让每个人都能访问您数据湖中的每个 S3 存储桶。同样,这也是数据管理和治理极其重要的地方,因此同样值得投资利用这些第三方治理工具来帮助适当地分发安全凭证。

好了,这篇文章到此为止!直到最近,这对我来说还是一个非常陌生的概念,所以即使你有 AWS 认证,如果你没有完全掌握这一点,也不要自责。如果你喜欢这篇文章,你可能也会喜欢我的其他一些文章,包括上周关于我开始使用 AWS 的五个技巧的文章。感谢阅读!

一种编码分类特征的简单方法

原文:https://towardsdatascience.com/an-easier-way-to-encode-categorical-features-d840ff6b3900?source=collection_archive---------9-----------------------

Photo by Ash Edmonds on Unsplash

使用 python 类别编码器库处理机器学习中的高基数变量

我最近一直在做一个机器学习项目,这个项目有几个分类特征。这些要素中的许多都具有很高的基数,或者说,具有大量的唯一值。处理分类变量最简单的方法通常是执行一键编码,其中每个唯一值被转换成一个新列,用 1 或 0 表示该值的存在或不存在。然而,当一个特征的基数很高时,这种方法通常会产生太多的新特征,从而降低模型性能。

我开始编写自己的编码器,尝试用其他方法对一些特征进行编码,从所谓的证据权重开始。在二元分类问题中证据权重使用正负类中特征的唯一值分布,并创建与这些值相关的新特征。自然,这需要一段时间来编码,然后让它在我现有的 scikit-learn 管道中工作。

然后,我偶然发现了这个名为 category_encoders 的库,它不仅有证据的权重,而且有几乎所有可能的方式来编码已经编写好并准备好使用的分类特征。这意味着我不再需要编写这个定制的编码器,我现在可以快速评估一大堆不同的编码器并选择最好的一个。在这篇文章中,我想分享这个库,并举例说明如何在 scikit-learn 管道中使用它。

类别编码器

该库包含一组遵循 scikit-learn 风格的转换器,这意味着它们不仅可以单独使用,还可以在 scikit-learn 管道中使用。转换器提供了多种方法来转换分类数据,包括非常流行的 one-hot 编码。这个库对于处理高基数特性特别有用,在这种情况下,一次性编码方法可能会导致较差的模型性能。

让我们看一个使用中的例子。在下面的例子中,我使用的是从 UCI 机器学习库下载的adults数据集。该数据包括每个人的一组特征和目标变量,该变量表示他们的年收入是低于还是高于 5 万美元。

该库可以通过 pip 安装。

pip install category_encoders

或者康达。

conda install -c conda-forge category_encoders

首先,这里是我正在使用的进口。

import pandas as pd
import numpy as npfrom sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.metrics import f1_score
import category_encoders as ce

接下来,我将下载数据并将其转换成熊猫数据框。

url_data = '[https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data'](https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data')
column_names = ['age', 'workclass', 'fnlwgt', 'education', 'educational-num','marital-status',
                'occupation', 'relationship', 'race', 'gender','capital-gain', 'capital-loss', 
                'hours-per-week', 'native-country','income']
adults_data = pd.read_csv(url_data, names=column_names)

然后,我为每个特征类型(分类的和数字的)创建一个变量,供以后在管道中使用,并将值分成测试和训练数据集。需要注意的一点是,尽管 scikit-learn 可以处理非数字目标变量,但 category_encoders 库不能。所以这里的一个额外步骤是使用标签编码器来转换 y 标签。

numeric_features = adults_data.select_dtypes(include=['int64', 'float64']).columns
categorical_features = adults_data.select_dtypes(include=['object']).drop(['income'], axis=1).columnsX = adults_data.drop('income', axis=1)
y = adults_data['income']le = preprocessing.LabelEncoder()
label_encoder = le.fit(y)
y = label_encoder.transform(y)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

接下来,我运行下面的代码,它构建了一个管道,并循环遍历 category_encoders 列表,为每个模型打印分数。我使用了一个随机森林模型作为简单的例子。

encoder_list = [ce.backward_difference.BackwardDifferenceEncoder, 
               ce.basen.BaseNEncoder,
               ce.binary.BinaryEncoder,
                ce.cat_boost.CatBoostEncoder,
                ce.hashing.HashingEncoder,
                ce.helmert.HelmertEncoder,
                ce.james_stein.JamesSteinEncoder,
                ce.one_hot.OneHotEncoder,
                ce.leave_one_out.LeaveOneOutEncoder,
                ce.m_estimate.MEstimateEncoder,
                ce.ordinal.OrdinalEncoder,
                ce.polynomial.PolynomialEncoder,
                ce.sum_coding.SumEncoder,
                ce.target_encoder.TargetEncoder,
                ce.woe.WOEEncoder
                ]for encoder in encoder_list:

    numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())])
    categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
    ('woe', encoder())])

    preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)])

    pipe = Pipeline(steps=[('preprocessor', preprocessor),
                      ('classifier', RandomForestClassifier(n_estimators=500))])

    model = pipe.fit(X_train, y_train)

    y_pred = model.predict(X_test)
    print(encoder)
    print(f1_score(y_test, y_pred, average='macro'))

输出如下。从下面可以看出,对于这个模型,顺序编码器给出了最好的分数,而留一编码器给出了最低的分数。

处理分类变量只是调整机器学习模型的一个方面,当然还有许多其他步骤。category_encoder 库提供了一种快速评估处理这些特性的不同方法的方法。在未来的项目中,我肯定会经常用到它。

感谢阅读!

测量等变卷积网络的简易指南

原文:https://towardsdatascience.com/an-easy-guide-to-gauge-equivariant-convolutional-networks-9366fb600b70?source=collection_archive---------4-----------------------

几何深度学习是一个非常令人兴奋的新领域,但它的数学正在慢慢漂移到代数拓扑和理论物理的领域。对于 Cohen 等人的论文“规范等变卷积网络和二十面体 CNN”来说尤其如此。艾尔。(https://arxiv.org/abs/1902.04615),这正是我想在这篇文章中探讨的。这篇论文使用了规范理论的语言,规范理论是物理学中任何喜欢同时使用“量子”和“场”这两个词的事物的核心。它承诺给规范理论的基础一个直观的理解,我必须说,它提供了并且可能是我迄今为止看到的最好的介绍。但是它仍然是一个困难的课题。

我在这里想做的是给出一个纯粹直观的理解,没有数学。虽然我没有完全遵循文章的结构,但您仍然可以并排打开文章,因为我会尝试突出所有重要的术语。

在下文中,我假设你知道卷积神经网络(CNN)是如何工作的,但不知道它们与流形有什么关系。所以我们走吧!

多支管

一个总管是一件简单的事情。你看到的每一个二维表面都可以被认为是一个流形。球体的表面,立方体的表面,所有的流形。但是它并不局限于二维,见鬼,它甚至不局限于可以想象的东西。曲线是流形。四维时空是一个流形。它非常笼统,描述了一个空间。但是让我们关注二维表面。最简单的曲面是平面,比如电脑屏幕。当我们用 CNN 做卷积时,我们通常在这些平面图像上做。

比方说,我们想用 CNN 预测天气。对于一个国家来说,这很简单:使用当地的天气数据作为输入,然后喀拉斯喀拉斯嘣,你就有了一个训练好的模型。如果我们想对整个地球的天气进行分类呢?你如何把它放到一张图片上?或许:

(Image by Pixabay)

但是有一个问题。左边和右边实际上是同一个点。此外,整个上边缘对应于单个点,下边缘也是如此。整件事都被扭曲了。试过压扁乒乓球吗?是啊,情况不妙。当我们试图应用卷积时,我们会得到奇怪的结果。非物质的事情可能发生在边缘。它可能会在图像的最右侧预测到强烈的东风,但在图像的左侧却没有,即使它们代表的是同一个地点。CNN 就是不明白地球是绕着转的。

或者,我们可以为地球创建多个重叠的地图,并让 CNN 对这些地图进行操作。这本地图集也被称为地图集将 CNN 切换到所有这些单独的地图上,确保在下一张地图上它们重叠的同一点上继续,这样就能让它明白地球是圆的。这是几何深度学习背后的基本思想:直接将深度学习应用于曲面或流形,以保留它们的几何结构。然而,有一个问题。一个大的。

我们去新加坡吧!

现在,让我们暂时忘记天气,拿出指南针。假设你在新加坡。向北,经过泰国,穿过中国,蒙古,到达北极。并且不改变方向,一直往前走。你将穿过加拿大和美国,直到你到达中美洲的某个地方。停在那里,开始横向游过太平洋,不要改变方向!中风几百万次后,你应该会回到新加坡。但是等等。你从来没有改变方向,为什么你要向南看?

让我们重复一遍,但是这一次我们到达北极后向左侧身。我们将在尼格拉附近停下来,开始往回走,同样不改变方向。一旦我们回到新加坡,这一次我们要向西看?奇怪…不相信我?自己试试吧,拿个指南针开始游吧…

这个问题是由于球体的曲率造成的,我们将“四处移动而不改变方向”称为平行运输。你看到平行传输非常依赖于球体上的路径。然而,在二维平面上,这无关紧要。你可以走每一条路而不改变方向,并且一旦你回来就有相同的方向。因此,我们说平面是可平行化的(一旦你返回,你的方向向量保持平行),而球体不是。

你可以看到这是我们 CNN 在一个球体上的问题。如果我们在所有地图上以不同的方式移动 CNN,方向似乎会改变。我们需要找到一种方法来确保这种怪异不会影响我们的结果!或者说,至少要知道怎么处理。

毛茸茸的球

在找到解决方案之前,我们必须引入更多的数学概念。指南针可以被看作是平面上指向某个方向的向量,主要是指向北方。指针旋转的这个平面与地球表面相切,我们称之为地球在该点的切向空间。即使地球是圆的,切空间也是完全平坦的。它就像一个本地坐标系,以北方和东方为其坐标向量。而且,我们可以在地球上的任何一个地方拿出指南针,每个地方都有自己的切线空间。但是我们也可以定义 40 和 130 为坐标向量。在这种情况下,北和其他方向没有什么特别,选择是任意的。

现在,让我们在切空间中选择任意方向,然后向前一步。我们确保选择最短的路径(测地线)并在一个新的点结束。你可能会称之为“前进”,但为了混淆每个人,我们将把这个过程称为指数图(它来自于所有这些微小的步骤神奇地类似于指数函数的级数展开……但现在这并不重要)。

让我们再看看我们的指南针。指南针给地球上“每一个”点分配一个矢量的事实被称为(正切)矢量场。风也可以被视为一个矢量场,因为它为每个点指定一个方向。我特意把“每”放在引号里,因为当你直接站在磁北极或磁南极时,罗盘指针会出问题。事实上,对于球面上每一个非零的连续向量场都是错误的。我们必须在球体上的磁场中有磁极。这种现象被称为毛球定理,因为它类似于无法在不创建旋转的情况下梳理毛球:

(Image from Wikipedia)

向量场不需要和切空间有相同的维数。相反,它们可以在每个点上有自己的任意维数的矢量空间。这很重要,因为我们还希望能够给地球上的每个点分配 3-D 或 99-D 向量,而不仅仅是 2-D 方向。在场的每个点处的这个向量空间也被称为纤维

(一种特殊类型的字段是标量字段。它只有一个维度,温度可以被视为这样的标量场)

测量

各地测量温度的方法不同。在德国,我们用摄氏度。在美国他们使用华氏温度。这种选择被称为标尺。是的,这个词来源于测量仪器。现在,当我阅读美国的天气预报时,我必须计算华氏温度在摄氏温度中的含义。我们有不同的参照系。这个计算叫做规范变换。请注意,实际的温度并没有改变,只是我们用来理解它的值改变了,转换是一个简单的线性函数。

如果我们看向量场,比如风向,事情会变得更复杂。让我们假设有一个国家,Gaugeland,它并不在乎南北,它有自己的方向系统,基于星座或者刺猬害怕时的方向。当这些人描述风时,我们必须执行一个规范转换来理解他们所说的方向。现在,规范变换变成了乘以一个可逆矩阵(显然它必须双向进行)。这组矩阵称为****一般线性群GL

对于一个理论上平坦的地球来说,风的规格的选择可以是全球性的。但是在球体上,我们会遇到问题。我们不能定义一个单一的全局量规,而是必须依赖多个量规和地图。从我们在球面上的平行化问题和毛球定理,我们应该有一些直觉,为什么一定是这样。

这自然意味着,我们需要多个风地图。然而,我们不再允许所有的 Gaugeland 的诡计,并要求至少他们使用的矢量(风速)的大小必须与我们的相同。我们只允许他们使用不同的方向。因此,每次规范变换都简化为一次旋转。这些变换也形成一个组,即特殊正交组SO ,它是 GL 的一个子组。通过选择不同的结构群,我们有效地减少了我们规范理论所允许的变换。

回到深度学习

我们回到最初的问题,想对一个风向矢量场进行卷积。这里,风表示输入要素。假设我们想要找到龙卷风的方向作为输出。我们可以在“小块”上执行卷积,从风向中提取这些输出特征。(注:我不知道这是否有气象意义…输入向量到输出向量...这就是我们需要知道的一切

但是“小补丁”是一个非常模糊的描述。在 2-D 平面上,很简单,我们可以把所有的东西都放在一个小球的中心。在某种程度上,这也适用于完美的球体。但是在任意流形上呢?事情变得棘手。看看这个时髦的流形:

(Image from Wikipedia)

它被称为克莱因瓶,我们可以看到,点之间的原始距离是…有问题的。我们可能永远不会需要克莱因瓶来进行深度学习,但我们希望尽可能保持事物的普遍性。

我们需要的是一种方法,只包括在流形上附近的卷积中的点。我们确实有办法做到这一点。回想一下,指数地图在我们的流形上做微小的移动来寻找附近的点。所以让我们利用这一点。从中心开始,我们在切线空间允许的每个方向上前进一步,并将该点包含在我们的卷积中。

我们现在只需要一些函数来做卷积。所以,我们定义了一个内核,它给每个点分配一个矩阵-…等等,不,我们用指数图去切空间的每个方向。这有点奇怪,但当你观察经典二维卷积时,它实际上也是如此。只是没那么明显,因为它在飞机上。

这个矩阵乘以一个输入向量并产生一个输出向量。在这里,作者确定了第一个问题。这个矩阵只为中心定义。但是我们将它应用于附近点的场矢量,它们有自己奇怪的属性。在平面上,这不是问题,但是在我们的球体上,它们略有不同,我们不能只应用内核。

让我们解决这个问题,将这些点上的向量平行传输回我们的小面片的中心。在这里,我们可以应用我们的矩阵,而不必担心怪异的曲率问题。

规范等方差

到目前为止,我们定义的卷积似乎是合理的。我们将我们的内核应用到风数据中,得到了一个很好的结果:龙卷风向东移动。但不知何故,我们还是得到了与高格兰德不同的结果?他们预测龙卷风正在移动刺猬-左

啊,是的:我们需要测量将他们的结果转换到我们的框架中,瞧:他们预测龙卷风将向西移动..。还是错了...

发生了什么事?我们忘了使我们的卷积规范等变。简而言之,内核的结果必须依赖于所选择的规范和变换。如果没有,我们只会得到奇怪的结果,无法相互关联或比较。**

但是输出向量可能与输入向量有不同的维度或不同的解释,我们如何将输入向量的规范变换与输出向量的等变“规范变换”联系起来呢?因为结构组只作用于输入,所以想法是找到作用于输出向量的同一个组的一个表示。例如,以旋转组作为其结构组的 2-D 输入向量的变换可以由绕单个轴旋转的 3-D 输出向量来表示。当二维向量旋转时,三维输出也绕固定轴旋转。一般来说,可以有许多表示,就像在三维空间中可以有许多不同的旋转轴。关键是,它做一些表示相同动作的事情。**

有了表象的概念,我们可以使卷积规范等变。我们只需要确保输入向量的规范变换导致输出向量的等变变换(即,相同的变换,但是在适当的表示中)。

现在,使用规范等方差,当我们在不同的图上执行卷积时,我们在数值上得到不同的结果,但是它们的结果是一致的。这是我们定义卷积在整个球面上有意义的最好方法。

二十面体?

我们基本上涵盖了论文的第 2 部分。作者现在转向二十面体,它在拓扑学上与球体非常相似,但更好。它们更好,因为我们可以比球体更容易地将它们离散化。

就像我们用多张地图覆盖地球一样,让我们用 5 张重叠的地图覆盖二十面体(重叠部分由微小的全白三角形表示):

(Image from the paper)

漂亮,地图甚至是同样的大小。难怪他们选择这个流形。我们也可以把它看作一个图表。请注意,每个节点(即每个交叉点)都是流形上具有输入特征向量的点(在上图中不可见)。每个小三角形有三个角,每个角是这些节点中的一个。我们对它们感兴趣。

所以,我们来做卷积吧!

首先,我们需要看看我们的指数图是什么样的。在我们的离散流形上,这很简单。我们只是从一个节点开始,向任何方向走一步。在上面的图像中,连接节点的线表示方向。所以,大多数节点都有 6 个邻居,除了那些在二十面体角落的节点,它们有 5 个邻居。

接下来,我们需要一个内核函数。但是我们懒,不想多此一举。因此,我们将使用来自标准 2D 卷积的 3 x 3 滤波器。这些 3×3 滤波器有一个中心点和 8 个邻居。那比我们需要的多。因此,让我们忽略 3 x 3 网格中的右上和左下邻居,将它们设置为 0,并假设它只有 6 个邻居。

剩下的就是让这个东西规范等变。好,让我们看看我们的二十面体的结构群。我们已经注意到,我们只能去 6 个不同的方向。如果我们要描述这个结构上的风,我们只有 6 个不同的参照系,每个都旋转 60 度。这也可以被公式化为具有 6 阶的循环群,或 C6 作为其结构群。****

最后,我提到我们的地图是重叠的。因此,如果我们想要在有重叠的区域上移动卷积滤波器,我们基本上是使用来自不同映射的值。我们如何利用这些价值呢?在使用它们之前,我们把它们转换成正确的框架。瞧,我们在二十面体上做卷积。

结论

在我看来,这篇论文为几何深度学习领域提供了一个基础性的结果。在进行卷积时,理解规范等变的整体思想和重要性是这里的主要收获。

我希望我的非数学解释有助于理解论文中提出的观点。如果你觉得这类东西很有趣,想要核心的数学,一定要看看中原的《几何、拓扑和物理》。

使用 Matplotlib 进行 3D 绘图的简单介绍

原文:https://towardsdatascience.com/an-easy-introduction-to-3d-plotting-with-matplotlib-801561999725?source=collection_archive---------1-----------------------

想获得灵感?快来加入我的 超级行情快讯 。😎

每个数据科学家都应该知道如何创建有效的数据可视化。没有观想,你将会被困在试图处理数字和在你的头脑中想象成千上万的数据点!

除此之外,它还是与非技术业务利益相关者进行有效沟通的重要工具,这些利益相关者通过图片而非文字更容易理解您的结果。

大多数数据可视化教程都展示了相同的基本内容:散点图、线图、箱线图、条形图和热图。这些对于快速获得对数据集的高层次洞察都是非常棒的。

但是如果我们更进一步。2D 图只能显示一对轴 x - y 之间的关系;另一方面,3D 绘图允许我们探索 3 对轴的关系: x - yx - zy - z

在本文中,我将向您简单介绍如何使用 Matplotlib 实现 3D 数据可视化。最终,您将能够将 3D 绘图添加到您的数据科学工具包中!

在我们开始之前,请查看 人工智能智能简讯以阅读人工智能、机器学习和数据科学方面的最新和最棒的信息!

三维散点图和折线图

Matplotlib 中的 3D 绘图从启用实用工具包开始。我们可以通过导入mplot3d库来启用这个工具包,这个库通过 pip 与您的标准 Matplotlib 安装一起提供。只是要确保你的 Matplotlib 版本是 1.0 以上。

导入该子模块后,可通过将关键字projection="3d"传递给 Matplotlib 中的任何常规轴创建函数来创建 3D 图:

**from* mpl_toolkits *import* mplot3d

*import* numpy *as* np
*import* matplotlib.pyplot *as* plt

fig = plt.figure()
ax = plt.axes(projection="3d")

plt.show()*

现在我们的轴已经创建好了,我们可以开始 3D 绘图了。3D 绘图功能非常直观:我们不仅仅调用scatter而是调用scatter3D,不仅仅传递 xy 数据,而是传递 xyz 。所有其他功能设置,如颜色和线型,与 2D 绘图功能保持一致。

这是一个绘制 3D 线和 3D 点的示例。

*fig = plt.figure()
ax = plt.axes(projection="3d")

z_line = np.linspace(0, 15, 1000)
x_line = np.cos(z_line)
y_line = np.sin(z_line)
ax.plot3D(x_line, y_line, z_line, 'gray')

z_points = 15 * np.random.random(100)
x_points = np.cos(z_points) + 0.1 * np.random.randn(100)
y_points = np.sin(z_points) + 0.1 * np.random.randn(100)
ax.scatter3D(x_points, y_points, z_points, c=z_points, cmap='hsv');

plt.show()*

下面是 3D 绘图最棒的部分:交互性。一旦你在 3D 中绘图,绘图的交互性对于探索你的可视化数据变得非常有用。查看我通过简单的点击和拖动创建的一些不同的视图!

表面图

表面图可以很好地显示整个 3D 景观中 3 个变量之间的关系。它们给出了一个完整的结构和视图,显示了每个变量的值如何在其他两个变量的轴上变化。

在 Matplotlib 中构建曲面图需要三个步骤。

(1)首先,我们需要生成构成表面图的实际点。现在,生成 3D 表面的所有点是不可能的,因为它们的数量是无限的!因此,我们将生成足以估计表面的数据,然后外推其余的点。我们将定义 xy 点,然后使用函数计算 z 点。**

*fig = plt.figure()
ax = plt.axes(projection="3d")*def* z_function(*x*, *y*):
    *return* np.sin(np.sqrt(*x* ** 2 + *y* ** 2))

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)

X, Y = np.meshgrid(x, y)
Z = z_function(X, Y)*

(2)第二步是绘制一个线框——这是我们对表面的估计。

*fig = plt.figure()
ax = plt.axes(projection="3d")ax.plot_wireframe(X, Y, Z, color='green')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()*

(3)最后,我们将把我们的表面投影到我们的线框估计上,并外推所有点。

*ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
                cmap='winter', edgecolor='none')
ax.set_title('surface');*

美女!这是我们丰富多彩的 3D 表面!

三维条形图

柱状图在数据可视化项目中经常使用,因为它们能够以简单直观的方式传达信息,通常是某种类型的比较。三维条形图的美妙之处在于,它们保持了 2D 条形图的简单性,同时扩展了其表示比较信息的能力。

条形图中的每一条都需要 2 样东西:位置和大小。对于 3D 条形图,我们将为所有三个变量 x,y,z 提供该信息。

我们将选择 z 轴来编码每个条形的高度;因此,每个条形将从 z = 0 开始,其大小与我们试图显示的值成比例。 xy 位置将代表横过 z = 0 的 2D 平面的杆的坐标。我们将把每个条形的 xy 尺寸设置为 1,这样所有的条形都具有相同的形状。

查看下面的代码和 3D 图作为示例!

*fig = plt.figure()
ax = plt.axes(projection="3d")

num_bars = 15
x_pos = random.sample(xrange(20), num_bars)
y_pos = random.sample(xrange(20), num_bars)
z_pos = [0] * num_bars
x_size = np.ones(num_bars)
y_size = np.ones(num_bars)
z_size = random.sample(xrange(20), num_bars)

ax.bar3d(x_pos, y_pos, z_pos, x_size, y_size, z_size, color='aqua')
plt.show()*

深度学习中生成对抗网络的简单介绍

原文:https://towardsdatascience.com/an-easy-introduction-to-generative-adversarial-networks-6f8498dc4bcd?source=collection_archive---------10-----------------------

了解深度学习最强大的网络!

想获得灵感?快来加入我的 超级行情快讯 。😎

生成对抗网络 (GANs)是一种神经网络架构,能够自行生成新数据。对这些 gan 的研究是深度学习中的热门话题,因为它们的力量。短短几年间,他们已经从生成模糊的数字发展到创造照片般逼真的人脸图像。

GANs 如何工作

生成对抗网络(gan)被分类在生成模型组中。这意味着它们能够生成全新的“有效”数据。所谓有效数据,我们的意思是网络的输出应该是我们认为目标可以接受的。

为了说明,考虑一个例子,其中我们希望生成一些新图像来训练一个图像分类网络。当然,对于这样的应用程序,我们希望我们的训练数据尽可能真实,也许在风格上与其他图像分类训练数据集非常相似。

下图显示了 GAN 生成的一组图像的示例。它们看起来很真实!如果我们没有被告知它们是计算机生成的,我们可能真的会相信这些是人类收集的!

An example output of Progressive GANs. Source

为此,gan 由两个独立的反向网络组成:发生器和鉴别器。当仅给定噪声图像阵列作为输入时,生成器被训练来创建看起来逼真的图像。鉴别器被训练来分类图像是否是真实的。

GANs 的真正力量来自他们所遵循的对抗训练风格。基于鉴别器的损耗学习发电机网络的权重。因此,生成器被推动以这样一种方式训练,即对于它生成的图像,很难辨别它们是否真实。在这些图像看起来越来越真实的同时,鉴别器也越来越好地分辨出哪些图像是真实的,不管肉眼看起来有多相似。

从技术角度来说,鉴别器的损失将是对哪些图像是假的,哪些是真的进行分类的误差;我们正在测量它辨别真假图像的能力。发生器损耗将基于其利用假图像“愚弄”鉴别器的能力——即鉴别器对假图像的分类误差仅在假图像上出现,因为发生器希望该误差尽可能高。

因此,GANs 建立了一种反馈回路,发电机帮助训练鉴别器,鉴别器帮助训练发电机。他们一起变得更好。下图有助于说明这一点。

An illustration of the structure of a Generative Adversarial Network

训练 GAN 在 Pytorch 中生成数字

现在我们将通过一个例子来说明如何在 Pytorch 中构建和训练我们自己的 GAN! MNIST 数据集包含 60,000 张黑白数字的训练图像,范围从 1 到 9,其中每张图像的大小为 28x28。它非常适合我们的用例,因为它仍然非常常用于机器学习概念验证,并且是一个成熟的集合。

Part of the MNIST dataset. Source

我们将从我们的进口开始。我们只需要 Pytorch 的东西!

接下来,我们将为训练数据准备我们的数据加载器。记住,我们要为 MNIST 生成随机数,即从 0 到 9。因此,我们需要为这 10 位数字设置标签。

现在我们可以建立我们的网络。我们从下面的鉴频器网络开始。回想一下,鉴别器网络对图像是否真实进行分类,这是一个图像分类网络。因此,我们的输入是一个标准 MNIST 大小的图像:28x28 像素。我们将该图像展平成长度为 784 的单个向量。输出是一个单一值,表示图像是否是一个真正的 MNIST 数字。

现在来看看下面的发电机。发生器网络负责创建实际的图像——它可以从纯噪声输入中做到这一点!对于本例,我们将让发生器从一个长度为 100 的向量开始,这也是一个纯粹的随机噪声。从这个向量,我们的生成器将输出一个长度为 784 的向量,稍后我们可以将它整形为标准的 MNIST 28x28 像素。

要设置我们的培训,我们需要一些东西:

  • 损失函数
  • 每个网络的优化器
  • 时代数
  • 批次数量

Pytorch 还要求,如果我们希望我们的网络在 GPU 上运行,我们必须显式地将模型移到它上面。所有代码如下所示。

现在是我们的训练循环。Pytorch 中的训练循环通常由遍历历元的外循环和遍历批数据的内循环组成。训练 gan 的关键部分是我们需要在一个循环中更新生成器和鉴别器。查看下面的代码来训练 GAN 和 Pytorch。这些步骤在代码下面有更详细的描述。

(1)我们开始为鉴别器准备我们的真实图像数据。输入是一批真实的 MNIST 图像。输出是全 1 的向量,因为 1 表示图像是真实的。

(2)接下来,我们将为生成器准备输入向量,这样我们就可以生成假图像。回想一下,我们的生成器网络采用长度为 100 的输入向量,所以这就是我们在这里创建的。images.size(0)表示批量大小

(3)根据我们在步骤(2)中创建的随机噪声数据向量,我们可以绕过向量到生成器来生成我们的伪图像数据。这将与我们在步骤 1 中获得的真实数据结合使用,以训练鉴别器。还要注意,这一次我们的标签向量全是零,因为 0 代表假图像的类别标签。

(4)给定伪图像和真实图像以及它们的标签,我们可以训练我们的鉴别器进行分类。总损失将是伪图像的损失+真实图像的损失

(5)现在我们的鉴别器已经更新,我们可以使用它来进行预测。这些预测的损失将通过发生器反向传播,使得发生器的权重根据它欺骗鉴别器的程度而被特别更新。
(5a)生成一些伪图像在
(5b)使用鉴别器对该批伪图像进行预测并保存输出。

(6)使用来自鉴别器的预测,我们训练我们的生成器。请注意,我们使用全 1 的 real_labels 作为目标,因为我们的生成器的目标是创建看起来真实并且预测为 1 的图像!因此,发生器丢失 0 将对应于鉴别器预测全 1。

瞧啊。这就是我们训练 GAN 生成 MNIST 图像的全部代码!你需要做的就是安装 Pytorch 来运行它。查看下面的 gif,查看 40 多个时期生成的图像的输出!

喜欢学习?

推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!

机器学习推荐系统简介

原文:https://towardsdatascience.com/an-easy-introduction-to-machine-learning-recommender-systems-efc8f7ece829?source=collection_archive---------12-----------------------

我为学习者写了一份名为《强大的知识》的时事通讯。每一期都包含链接和最佳内容的关键课程,包括引文、书籍、文章、播客和视频。每一个人都是为了学习如何过上更明智、更快乐、更充实的生活而被挑选出来的。 在这里报名

YouTube 怎么知道你会看什么视频?谷歌似乎总是知道你会读到什么新闻,这是怎么回事?他们使用一种叫做 推荐系统机器学习技术。

实际上,推荐系统包括一类能够向用户建议“相关”项目的技术和算法。理想情况下,建议的项目尽可能与用户相关,这样用户就可以参与这些项目:YouTube 视频、新闻文章、在线产品等等。

根据项目的相关性对项目进行排序,并向用户显示最相关的项目。相关度是推荐系统必须确定的,并且主要基于历史数据。如果你最近看了 YouTube 上关于大象的视频,那么 YouTube 将开始向你展示许多标题和主题相似的大象视频!

推荐系统通常分为两大类:协同过滤和基于内容的系统。

Figure 1: A tree of the different types of Recommender Systems

协同过滤系统

协同过滤推荐系统的方法是仅基于用户和目标项目之间的过去交互的方法。因此,对协同过滤系统的输入将是用户与目标项目交互的所有历史数据。这些数据通常存储在一个矩阵中,其中行是用户,列是项目。

这种系统背后的核心思想是,用户的历史数据应该足以做出预测。也就是说,我们不需要比历史数据更多的东西,不需要来自用户的额外推送,不需要当前的趋势信息等等。

Figure 2: Illustration of how collaborative filtering works for predicting a user’s rating of 4 things: an image, a book, a video, and a video game. Based on the users' historical data, the likes and dislikes of each item, the system tries to predict how the user would rate a new item that they haven’t rated yet. The predictions themselves are based on past ratings of other users, whose ratings and therefore supposed preferences, are similar to the active user. In this case, the system made the prediction / recommendation that the active user won’t like the video. Source by Moshanin

除此之外,协同过滤方法被进一步分为两个子组:基于记忆和基于模型的方法。

基于记忆的方法是最简单的,因为它们不使用任何模型。他们假设可以根据过去数据的纯“记忆”进行预测,并且通常只采用简单的距离测量方法,如最近邻法。

另一方面,基于模型的方法总是假设某种潜在的模型,并且基本上试图确保无论什么预测都将很好地装备模型。

例如,假设我们有一个用户偏好午餐项目的矩阵,其中所有用户都是喜欢芝士汉堡的美国人(它们非常棒)。基于记忆的方法将只查看用户在过去的一个月里吃了什么,而不考虑他们是喜欢奶酪汉堡的美国人这一小事实。另一方面,基于模型的方法将确保预测总是更倾向于奶酪汉堡,因为潜在的模型假设是数据集中的大多数人应该喜欢奶酪汉堡!

代码

我们可以使用 Graph Lab 轻松创建一个协同过滤推荐系统!我们将采取以下步骤:

  1. 用熊猫加载数据
  2. 将熊猫数据帧转换为图形实验室帧
  3. 训练模型
  4. 提出建议

基于内容的系统

与协同过滤相比,基于内容的方法将使用关于用户和/或项目的附加信息来进行预测。

例如,在我们上面看到的 gif 中,基于内容的系统在进行预测时可能会考虑年龄、性别、职业和其他个人用户因素。如果我们知道这个视频是关于滑板的,但是用户已经 87 岁了,那么预测这个人不喜欢这个视频就容易多了!

这就是为什么当你注册许多在线网站和服务时,他们会要求你(选择性地)提供你的出生日期、性别和种族!这只是为他们的系统提供了更多的数据来做出更好的预测。

因此,基于内容的方法更类似于经典的机器学习,也就是说,我们将基于用户和/或项目数据构建特征,并使用这些特征来帮助我们进行预测。我们的系统输入是用户的特征和物品的特征。我们的系统输出是对用户是否喜欢或不喜欢该商品的预测。

代码

我们可以使用 Graph Lab 轻松创建一个协同过滤推荐系统!我们将采取以下步骤:

  1. 用熊猫加载数据
  2. 将熊猫数据帧转换为图形实验室帧
  3. 训练模型
  4. 提出建议

喜欢学习?

在 twitter 上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上与我联系!

神经网络 Pytorch 的简单介绍

原文:https://towardsdatascience.com/an-easy-introduction-to-pytorch-for-neural-networks-3ea08516bff2?source=collection_archive---------8-----------------------

感受 Pytorch 之火!

想获得灵感?快来加入我的 超级行情快讯 。😎

深度学习重新点燃了公众对人工智能的兴趣。原因很简单:深度学习就是管用。它让我们有能力建立以前无法建立的技术。它创造了新的商业机会,从整体上改善了技术世界。

为了进行深度学习,你需要知道如何编码,尤其是用 Python。从那里,有一个不断增长的深度学习库可供选择:TensorFlow,Keras,MXNet,MatConvNet,以及最近的 Pytorch!

Pytorch 发行后不久就迅速流行起来。人们称它为 TensorFlow 杀手,因为它更加用户友好和易于使用。事实上,您将看到使用 Pytorch 启动和运行深度学习是多么容易。

Pytorch 入门

Pytorch 开发的核心目标是尽可能地与 Python 的 Numpy 相似。这样做可以让常规 Python 代码、Numpy 和 Pytorch 之间的交互变得简单流畅,从而实现更快更简单的编码。

首先,我们可以通过 pip 安装 Pytorch:

pip3 install torch torchvision

如果你对具体的特性感兴趣,Pytorch 文档非常棒。

张量

任何深度学习库最基本的构建块都是张量。张量是类似矩阵的数据结构,在功能和属性上非常类似于 Numpy 数组。事实上,在大多数情况下,您可以将它们想象成 Numpy 数组。两者最重要的区别在于,现代深度学习库中张量的实现可以在 CPU 或 GPU 上运行(非常快)。

在 PyTorch 中,可以使用简单的张量对象来声明张量:

import torch 
x = torch.Tensor(3, 3)

上面的代码创建了一个大小为(3,3)的张量,即 3 行 3 列,用浮点零填充:

0\.  0\.  0.
0\.  0\.  0.
0\.  0\.  0.
[torch.FloatTensor of size 3x3]

我们还可以创建张量填充的随机浮点值:

x = torch.rand(3, 3)
print(x)"""
Prints out:tensor([[0.5264, 0.1839, 0.9907],
        [0.0343, 0.9839, 0.9294],
        [0.6938, 0.6755, 0.2258]])
"""

使用 Pytorch,张量相乘、相加和其他基本数学运算非常简单:

x = torch.ones(3,3)
y = torch.ones(3,3) * 4
z = x + y
print(z)"""
Prints out:tensor([[5., 5., 5.],
        [5., 5., 5.],
        [5., 5., 5.]])
"""

Pytorch 张量甚至提供了类似 Numpy 的切片功能!

x = torch.ones(3,3) * 5
y = x[:, :2]
print(y)"""
Prints out:tensor([[5., 5.],
        [5., 5.],
        [5., 5.]])
"""

所以 Pytorch 张量可以像 Numpy 数组一样被使用和处理。现在,我们将看看如何使用这些简单的 Pytorch 张量作为构建模块来构建深度网络!

用 Pytorch 构建神经网络

在 Pytorch 中,神经网络被定义为 Python 类。定义网络的类从 torch 库中扩展了 torch.nn.Module 。让我们为卷积神经网络(CNN)创建一个类,我们将应用于 MNIST 数据集。

查看下面定义我们网络的代码!

Pytorch 网络类中最重要的两个函数是 init()forward() 函数。 init() 用于定义您的模型将使用的任何网络层。在 forward() 函数中,您实际上是通过将所有层堆叠在一起来建立模型。

对于我们的模型,我们在 init 函数中定义了 2 个卷积层,其中一个我们将重复使用几次(conv2)。我们有一个最大池层和一个全局平均池层,将在最后应用。最后,我们有我们的全连接(FC)层和一个 softmax 来获得最终的输出概率。

在 forward 函数中,我们确切地定义了我们的层如何堆叠在一起以形成完整的模型。这是一个标准网络,具有堆叠的 conv 层、池层和 FC 层。Pytorch 的美妙之处在于,我们可以在 forward() 函数中的任何地方,通过简单的 print 语句打印出中间层中任何张量的形状和结果!

培训、测试和保存

加载数据

是时候为训练准备好我们的数据了!我们将开始,但准备好必要的导入,初始化参数,并确保 Pytorch 设置为使用 GPU。下面使用torch.device()的一行检查 Pytorch 是否安装了 CUDA 支持,如果是,则使用 GPU!

我们可以直接从 Pytroch 检索 MNIST 数据集。我们将下载数据,并将训练集和测试集放入单独的张量中。一旦数据被加载,我们将把它传递给 torch DataLoader ,它只是准备好以特定的批量和可选的混洗传递给模型。

培养

训练时间到了!

optimzer(我们将使用 Adam)和 loss 函数(我们将使用交叉熵)的定义与其他深度学习库非常相似,如 TensorFlow、Keras 和 MXNet。

在 Pytorch 中,所有的网络模型和数据集都必须明确地从 CPU 转移到 GPU。我们通过将.to()函数应用于下面的模型来实现这一点。稍后,我们将对图像数据进行同样的操作。

最后,我们可以写出我们的训练循环。查看下面的代码,看看它是如何工作的!

  1. 所有 Pytorch 训练循环将在训练数据加载器中经历每个时期和每个批次。
  2. 在每次循环迭代中,图像数据和标签都被传输到 GPU。
  3. 每个训练循环还明确应用向前传递、向后传递和优化步骤。
  4. 将该模型应用于该批中的图像,然后计算该批的损失。
  5. 计算梯度并通过网络反向传播

测试和保存

在 Pytorch 中测试网络的性能会建立一个与训练阶段类似的循环。主要的区别是我们不需要做梯度的反向传播。我们仍将进行前向传递,只在网络的输出端获取具有最大概率的标签。

在这种情况下,经过 10 个时期后,我们的网络在测试集上获得了 99.06%的准确率!

要将模型保存到磁盘以备后用,只需使用torch.save()功能,瞧!

喜欢学习?

twitter 上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上与我联系!

面向数据科学家的 SQL 简单介绍

原文:https://towardsdatascience.com/an-easy-introduction-to-sql-for-data-scientists-83363ae004b9?source=collection_archive---------6-----------------------

想获得灵感?快来加入我的 超级行情快讯 。😎

SQL(结构化查询语言)是一种为数据存储和管理而设计的标准化编程语言。它允许人们快速、轻松地创建、解析和操作数据。

随着近年来人工智能的大肆宣传,服务于各种行业的技术公司被迫变得更加数据驱动。当一家为数以千计的客户提供服务的公司由数据驱动时,他们将需要一种方法来存储和频繁访问大约数百万甚至数十亿个数据点的数据。

这就是 SQL 的用武之地。

SQL 很受欢迎,因为它既快又容易理解。它被设计成以类似于英语的方式阅读和书写。当使用 SQL 查询来检索数据时,数据不会被复制到任何地方,而是直接在存储数据的地方被访问,这使得该过程比其他方法快得多。

本教程将教您 SQL 的基础知识,包括:

  • 创建数据库表
  • 用真实数据填充数据库表
  • 检索数据以用于数据科学或机器学习任务

让我们直接开始吧!

安装 MySQL

我们要做的第一件事就是安装我们的 SQL server!这将为我们提供一个工作台,开始使用数据库和 SQL 查询。

要安装 MySQL 服务器,您可以从终端运行以下命令:

sudo apt-get install mysql-server

现在我们将启动我们的 MySQL 服务器。这类似于我们在终端中通过键入“python”来启动 Python。这里唯一的区别是给我们的服务器 root 特权很方便,这样我们就可以灵活地访问任何东西。

sudo mysql -u root -p

太好了!现在我们的 mysql 服务器正在运行,我们可以开始发出 MySQL 命令了。

在我们继续前进之前,需要记住几件事:

  • 所有 MySQL 命令都以分号结尾。如果你输入的命令不是以分号结尾,那么它就不起作用!
  • MySQL 命令通常以大写字母书写,而任何用户定义的文本或数字都以小写字母书写,以便于区分。这并不是严格要求的(如果不遵循这一点,您不会得到任何错误),但是为了可读性,通常推荐这样做。

创建 SQL 数据库和表

现在我们准备创建我们的第一个 SQL 数据库。

数据库 是有组织的数据集合。实际上,您可以将数据库视为层次结构中的最高级别。

一个在行(元组)和列(属性)中存储数据。一个数据库可以并且通常由多个表组成

在本教程的其余部分,我们将使用足球(或者您喜欢的足球)运动员的统计数据作为数据库中的数据。

我们要做的第一件事是用“create”命令创建一个名为“soccer_data”的数据库。然后,我们可以用“USE”命令“激活”我们的新数据库。

CREATE DATABASE soccer_stats
USE soccer_stats

就像我们在 Excel 或 Google Sheets 中创建任何表格一样,我们将定义每一列的名称,以及该列中的数据类型。

我们的“统计”表将跟踪每个足球运动员的进球、助攻、得分和射门次数:

CREATE TABLE stats (id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, name TEXT, goals INTEGER, assists INTEGER, points INTEGER, shots INTEGER);

上面的命令为我们做了几件事:

  1. 它在“soccer_stats”数据库中创建了一个名为“stats”的表
  2. 我们在表格中设置了 6 列——id、姓名、进球、助攻、得分和射门
  3. 对于每一列,我们已经定义了希望该列存储的数据类型。
  4. “id”列有一个特殊的类型(INTEGER NOT NULL PRIMARY KEY AUTO _ INCREMENT ),它自动对每一行进行编号。在构建 SQL 表时,最好给每一行一个惟一的 id,以防两行数据完全相同。

我们可以检查数据库中有哪些表,如下所示:

SHOW TABLES;+------------------------+
| Tables_in_soccer_stats |
+------------------------+
| stats                  |
+------------------------+

更进一步,我们可以看到关于我们新创建的表的一些信息:

DESCRIBE stats;+---------+---------+------+-----+---------+----------------+
| Field   | Type    | Null | Key | Default | Extra          |
+---------+---------+------+-----+---------+----------------+
| id      | int(11) | NO   | PRI | NULL    | auto_increment |
| name    | text    | YES  |     | NULL    |                |
| goals   | int(11) | YES  |     | NULL    |                |
| assists | int(11) | YES  |     | NULL    |                |
| points  | int(11) | YES  |     | NULL    |                |
| shots   | int(11) | YES  |     | NULL    |                |
+---------+---------+------+-----+---------+----------------+

向我们的 SQL 表添加数据

现在我们开始用足球统计数据填充我们的表!

还记得我说过 SQL 非常易读吗?可以使用名为 INSERT 的命令将数据插入到我们的表中,该命令后跟表名和我们想要插入的数据的简单元组。

INSERT INTO stats VALUES (NULL, "John", 26, 22, 26+22, 104);
INSERT INTO stats VALUES (NULL, "Jessica", 126, 82, 126+82, 312);
INSERT INTO stats VALUES (NULL, "Nick", 8, 25, 8+25, 51);
INSERT INTO stats VALUES (NULL, "Mike", 52, 12, 52+12, 174);
INSERT INTO stats VALUES (NULL, "Katie", 26, 92, 26+92, 188);

插入数据时要记住几件事:

  • 我们可以将 id 设置为 NULL,因为它会自动递增(如前一节所述)
  • 请确保正在插入的数据的数据类型与已定义的表的数据类型相匹配

要显示表中的所有数据,只需运行:

SELECT * FROM stats;+----+---------+-------+---------+--------+-------+
| id | name    | goals | assists | points | shots |
+----+---------+-------+---------+--------+-------+
|  1 | John    |    26 |      22 |     48 |   104 |
|  2 | Jessica |   126 |      82 |    208 |   312 |
|  3 | Nick    |     8 |      25 |     33 |    31 |
|  4 | Mike    |    52 |      12 |     64 |   174 |
|  5 | Katie   |    26 |      92 |    118 |    88 |
+----+---------+-------+---------+--------+-------+

这是我们所有的足球数据。

请注意“SELECT *”是如何从我们的表中获取所有内容的。如果您只需要目标的名称和数量,您可以指定要检索的列:

SELECT name,goals FROM stats;
+---------+-------+
| name    | goals |
+---------+-------+
| John    |    26 |
| Jessica |   126 |
| Nick    |     8 |
| Mike    |    52 |
| Katie   |    26 |
+---------+-------+

要更新表中的一行,我们可以使用…..你猜对了,更新命令!

UPDATE stats SET goals=28 WHERE name="John";
SELECT * FROM stats;+----+---------+-------+---------+--------+-------+
| id | name    | goals | assists | points | shots |
+----+---------+-------+---------+--------+-------+
|  1 | John    |    28 |      22 |     48 |   104 |
|  2 | Jessica |   126 |      82 |    208 |   312 |
|  3 | Nick    |     8 |      25 |     33 |    31 |
|  4 | Mike    |    52 |      12 |     64 |   174 |
|  5 | Katie   |    26 |      92 |    118 |    88 |
+----+---------+-------+---------+--------+-------+

在上面的查询中:

  • 更新允许我们选择要更新数据的表
  • SET 执行实际的更新
  • 其中定义了哪个数据单元将接收特定的更新

使用 SQL 查询检索数据

现在我们已经用数据填充了表,我们将学习如何实际检索它。对于那些从事数据科学或机器学习的人来说,这将是大量 SQL 工作的地方——检索数据,为探索和培训做准备。

在上一节中,您已经使用 SELECT 命令完成了一个查询。这次我们将运行一些更复杂的查询。

我们可以限制检索的行数:

SELECT * FROM stats LIMIT 3;+----+---------+-------+---------+--------+-------+
| id | name    | goals | assists | points | shots |
+----+---------+-------+---------+--------+-------+
|  1 | John    |    28 |      22 |     48 |   104 |
|  2 | Jessica |   126 |      82 |    208 |   312 |
|  3 | Nick    |     8 |      25 |     33 |    31 |
+----+---------+-------+---------+--------+-------+

或者根据球员的进球数对我们的输出进行排序:

SELECT * FROM stats ORDER BY goals DESC;+----+---------+-------+---------+--------+-------+
| id | name    | goals | assists | points | shots |
+----+---------+-------+---------+--------+-------+
|  2 | Jessica |   126 |      82 |    208 |   312 |
|  4 | Mike    |    52 |      12 |     64 |   174 |
|  1 | John    |    28 |      22 |     48 |   104 |
|  5 | Katie   |    26 |      92 |    118 |    88 |
|  3 | Nick    |     8 |      25 |     33 |    31 |
+----+---------+-------+---------+--------+-------+

我们可以将 SELECT 语句与 WHERE 命令结合起来,创建一种用于检索数据的 if-else 查询:

SELECT * FROM stats WHERE goals > 20 and assists > 50;+----+---------+-------+---------+--------+-------+
| id | name    | goals | assists | points | shots |
+----+---------+-------+---------+--------+-------+
|  2 | Jessica |   126 |      82 |    208 |   312 |
|  5 | Katie   |    26 |      92 |    118 |    88 |
+----+---------+-------+---------+--------+-------+

MySQL 甚至为我们提供了执行计算的能力。看看我们如何计算每个球员的投篮命中率,并根据这些数字对表格进行排序:

SELECT *, points/shots FROM stats ORDER BY points / shots DESC;+----+---------+-------+---------+--------+-------+--------------+
| id | name    | goals | assists | points | shots | points/shots |
+----+---------+-------+---------+--------+-------+--------------+
|  2 | Jessica |   126 |      82 |    208 |   312 |       0.6667 |
|  3 | Nick    |     8 |      25 |     33 |    51 |       0.6471 |
|  5 | Katie   |    26 |      92 |    118 |   188 |       0.6277 |
|  1 | John    |    28 |      22 |     48 |   104 |       0.4615 |
|  4 | Mike    |    52 |      12 |     64 |   174 |       0.3678 |
+----+---------+-------+---------+--------+-------+--------------+

我们对 SQL 的简单介绍到此结束!

如果你想练习使用 SQL 查询,我强烈建议你试试 HackerRank challenges ,它已经为查询练习提供了预构建的数据库和表格。

喜欢学习?

推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!

用 4 种基本技术简单介绍无监督学习

原文:https://towardsdatascience.com/an-easy-introduction-to-unsupervised-learning-with-4-basic-techniques-da7fbf0c3adf?source=collection_archive---------17-----------------------

想获得灵感?快来加入我的 超级行情快讯 。😎

深度学习得到了人工智能社区和普通公众的大量喜爱。但最近,研究人员开始质疑和怀疑深度学习真的是人工智能的未来。

今天使用的突出的深度学习技术都依赖于监督学习,然而我们非常清楚地看到,人类在没有太多监督的情况下学习事物、模式和概念。从某种意义上说,我们的学习是相当无人监督的

无监督学习没有得到那么多的喜爱,这有几个明显的原因。这很难,效果也不好(目前为止),还没有做太多的工作,而且无监督框架本身很难具体定义。

也就是说,我们确实有一些无监督学习技术的基础,在某些应用和设置中工作得很好。这些技术可能为人工智能研究的未来提供线索。在这篇文章中,我们将学习 4 种基本的无监督学习技术以及如何应用它们!

使聚集

聚类是一种涉及数据点分组的技术。给定一组数据点,我们可以使用聚类算法将每个点分类到特定的组中。

理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有非常不同的属性和/或特征。点之间的相似性通常由基于某种特征变量集的距离度量来量化。

The popular K-means clustering algorithm

聚类技术简单而有效;它们几乎不需要密集的工作,但通常可以给我们提供非常有价值的数据洞察力。因此,数十年来,它已被用于许多应用中,包括:

  • 生物学,用于遗传和物种分组
  • 医学成像,用于区分不同种类的组织
  • 市场研究,用于根据一些属性了解不同的企业和客户群体
  • 推荐系统,比如给你更好的亚马逊建议

…仅举几个例子!

自动编码器

在进行机器学习时,我们可能会遇到某些情况,我们的特征表示太大而无法处理。例如,假设我们正在做一个人脸识别应用程序,我们希望将每个人的人脸模板保存在我们的数据库中,以便以后可以再次识别它们。如果我们要保存一张 128x128 的人脸彩色图像,我们必须为每张脸保存 128 * 128 * 3 = 49152 个浮点值!如果我们只需要存储 100 张脸,那么对于这样一个看似简单的任务来说,这将会占用大量的磁盘空间!

这就是自动编码器的用武之地。有了自动编码器,我们可以对我们的特征进行编码,这样它们占用的空间就少得多,但仍能有效地表达同样的东西。

为了做到这一点,我们将训练一个神经网络来预测它自己的输入。听起来很奇怪,对吧?!这就是为什么有一个小问题:我们的自动编码器的中间层的比我们的输入和输出少得多。这个想法是,我们可以训练我们的神经网络来学习我们的特征表示的压缩版本。一旦我们这样做了,我们可以简单地存储这些压缩的要素制图表达,占用更少的存储空间,同时仍然能够准确地表示我们的数据!

An illustration of a typical autoencoder

特征分离技术

特征分离技术允许我们分解数据集的整体特征表示,并独立地查看每个特征。了解我们的每个要素如何对数据集的形成做出贡献,或者单独输出预测,通常会很有用。这样,我们就可以知道哪些特征是重要的,以及每个特征在我们的整体数据中扮演什么角色。

两种最流行的特征分离技术是:

  • 主成分分析(PCA): 它寻找数据中包含最多方差和信息的线性组合
  • 奇异值分解(SVD): 它将你的数据分解成 3 个小得多的矩阵的乘积

实际上,这两种技术都可以用来创建可以独立分析的孤立特征向量。由于它们都得到比原始数据集小得多的矩阵,它们也可以通过降维用于数据压缩。

给定孤立的特征向量,我们可以选择最能代表我们的数据及其变化的特征向量,然后将我们的数据重新投影到孤立的向量上。两种降维技术之间的过程和联系如下所示。

PCA and SVD for dimensionality reduction

期望值最大化算法

期望最大化(EM)算法是一类迭代方法,旨在估计某些统计模型的参数,以便准确地对数据建模。例如,假设我们的数据如下图所示呈高斯分布,我们希望找到高斯分布的最佳参数来对其建模。期望值最大化算法为我们提供了一种自动估计高斯参数的方法:每个方向的均值和标准差!

在 EM 算法中,我们在期望(E)步骤和最大化(M)步骤之间交替。E 步骤使用当前参数创建我们的统计模型,并将其应用于我们的数据。

基于我们的数据和我们的数据的统计模型表示之间的误差(即值的差异),M 步骤为模型计算一组新的参数。新的参数被设置成使得我们最小化误差,或者等效地,最大化我们的数据属于我们的统计模型的概率。EM 算法可以用在任何我们想要创建一个统计模型来表示我们的数据的地方,同时自动估计参数。

喜欢学习?

推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!

一种高效快速的方法来控制你的机器人。真的。

原文:https://towardsdatascience.com/an-efficient-and-fast-way-to-control-your-robots-truly-92ee93aadff5?source=collection_archive---------21-----------------------

去年,我们的教授提出了一个新的课堂项目。从零开始创造机器人手臂。在机器人爱好者的生活中,第一个 DIY 机器人可能会改变游戏规则。应该是!—一个简单的机器人项目肯定是从这个问题开始的:这个机器人的目的是什么?

School project (Sorbonne Université, Paris)

为了解决这个问题,你自然要探索硬件设计领域。那么你可能会在系统的电子架构中找到一些灵感。在这个思考过程的最后,你设计的机器人看起来很棒,你可能对你的机器人会是什么有一个清晰的想法。这是你需要暂停的时候。你考虑过如何驾驶机器人吗?需要什么样的软件或几何模型?对我来说,这一步是一个巨大的挫折。事实上,命令软件可能是你的项目中最模糊的一点。

在下面的文件中,我会试着给你一些我希望去年在项目实施过程中知道的信息。

如何获得和使用你的机器人的几何模型?

基本上,直接的几何模型非常容易获得。它是关于根据关节的角度位置计算效应器的最终位置。这是一个简单的数学演算。

让我们使用机器人手臂的简化模型来确定直接模型,您可以通过更改这些方程中的一些参数来将解决方案推广到所有项目。

Simplified Model of a 3 joints robotic arm

使用这个简单的 3 关节机械臂模型,我们得到:

X coordinate

Y coordinate

使用这个直接模型,我们现在可以根据角度三元组创建一组笛卡尔坐标。这是一个单向过程——这是几何求解的最初步骤。实际上,人们通常对另一种方式感兴趣:从笛卡尔的一对数字(X,Y)到角度三元组:(θ1,θ2,θ3)

好的,那么你的最终目标是获得关于机器人效应器位置的角度三元组。

为此,您可以尝试计算间接模型。这是人们首先要做的,但有时可能会很困难和/或很耗时。为了解决这个问题,我想给你介绍一下监督学习过程。

命令软件可能是你项目最模糊的点。

Supervised Learning Model

我们之前计算的直接模型用于计算分别与所谓的角三元组关联的笛卡尔坐标。

使用 MLP 回归器预测角形三胞胎

首先你需要实现你的模型并定义你的机器人关节的参数。这些参数是机器人关节的不同长度。它们也可能是一些预先确定的常数参数,限制你的机器人的移动。

Robot’s model

S 秒您需要创建用于生成模型的数据集。该数据集由角度三元组和笛卡尔位置组成,两者都与直接模型相关联并通过直接模型计算。

Dataset Generation

您还需要生成数据集的分割。第一部分用来训练你的模型,另一部分用来评估它的性能。您应该使用某种洗牌率来避免“糟糕”的学习和灾难性的泛化-永远不要忘记在数据集生成过程中引入洗牌,尽管您可能希望在没有洗牌的情况下尝试观察结果。

T hird,我们使用 keras 顺序实现定义多层感知器。随意改变网络的超参数:隐藏层的数量、学习率、网络的深度、退出、正则化等。所有这些变化都将是适合你自己的基于数据的问题的关键。

MLP

然后,您需要使用 Keras API 函数训练模型以适应您的数据:

model.fit

第四,你应该为你的模型建立一个基准来评估它的性能和准确性。要对其评分,您可以使用 Keras 函数并将其应用于验证数据集:

model.evaluate

Evaluation of the model

图形评估

我相信机器人的模型达到了一个很好的精度水平,特别是如果你看一下培训时间,碰巧是很短的一段时间。下面是一些使用 Matplotlib 的结果显示。查看 colab 以获得关于这个问题的更多注释和细节。

Command is x = 20 and y = 20–40

你应该尝试许多轨迹来弄清楚你的机器人是否能够响应你最初的目的。

别忘了这是基于数据的问题。

有时您会想要约束角度范围。基本上,我的机器人的第一个关节在物理上不能承受负角度:因此,我没有在我的三联输入中引入任何负角度θ1。

用途

最后,利用模型进行预测。您可以使用同一个 Keras API 中的函数:

model.predict#Save the model
model.save_weights(‘model_weights.h5’)model.save(‘model.h5’)

预测的输入可能如下所示:

posCartesian = np.array([[posX, posY]])prediction = model.predict(posCartesian)

非常感谢您的阅读,如果您有任何问题,或者您有合理的批评,或者只是想交流您的项目,请随时联系我们。

下一篇文章将关注使用 Python-Arduino 协作在真实机器上的模型部署。敬请期待!

参考资料:

您应该在此处访问该项目的 Colab:

https://gist . github . com/momento 624/d5c 3d 85 f 6 ff 1 BD 507 f 092 DDB 53d 655 f 0

张量流:https://en.wikipedia.org/wiki/TensorFlow

https://en.wikipedia.org/wiki/Scikit-learn

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

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

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

电力公司神经网络调峰三部曲指南。

原文:https://towardsdatascience.com/an-electric-utilitys-3-part-guide-to-peak-shaving-with-neural-networks-de5c7752d946?source=collection_archive---------33-----------------------

协同 研究开放式建模框架

预测技术给了公用事业单位一个机会来拉平他们的负荷曲线,提出了一系列全新的问题。以下是一些重要问题的解决方案,它们可以通过降低电厂调峰的资本和运营费用,为电力公司节省大量资金。所有测试都可以在这里找到。

这项研究也可以在我的网站上查看:

[## 基于神经网络的⚡️负荷预测和调峰

预测技术给了公用事业单位一个机会来拉平他们的负荷曲线,提出了一个全新的家庭…

www.kmcelwee.com](https://www.kmcelwee.com/load-forecasting/)

第一部分:明天的负荷是多少?

[## 用神经网络预测明天的用电量

最小的错误都会在一天内造成数千美元的损失。神经网络可以帮助确保…

towardsdatascience.com](/using-neural-nets-to-predict-tomorrows-electric-consumption-cc1ae3ae7cc2)

主要要点:

  • 要获得任何有用的能源消耗预测,简单的机器学习是不合适的。然而,深度学习可以让我们获得我们需要的准确性。
  • 给定历史负荷和温度数据,一个简单的神经网络可以给出 24 小时的预测,准确率约为 97%。

[## 用神经网络预测日用电量。

一个简单的三维结构如何减少错误,战胜更复杂的模型,并加倍节省。

medium.com](https://medium.com/@kevinrmcelwee/predict-daily-electric-consumption-with-neural-networks-8ba59471c1d)

主要要点:

  • 一整天的负荷预测方法比一小时一小时的方法更准确。
  • 尽管两种方法之间只有 1 MAPE 的误差差异,但测试表明,由于发电量减少,该方法在调峰时使我们的节约翻倍。

第二部分:但这是月高峰吗?

[## 神经网络的短期预测如何影响长期决策。

电力公司只需三天的天气预报就能探测到每月的高峰。

towardsdatascience.com](/how-short-term-forecasting-with-neural-nets-can-inform-long-term-decisions-9f65eba6fb7e)

主要要点:

  • 每天进行调峰调度可能成本很高。
  • 多天预测可以帮助我们大幅减少每月的派单次数,而不会错过每月的高峰
  • 公用事业公司需要设定他们自己的优先级,但在大多数情况下,他们大约每周只能调度一次,而每隔几年只会错过一次高峰。

第三部分:好的,我们正在派遣。我们应该在多大程度上相信预测?

[## 预测不可靠的调峰。

一个 19 世纪的物理方程如何能让电力公司节约超过 60%

towardsdatascience.com](/peak-shaving-with-unreliable-forecasts-78bb9623e6b0)

主要要点:

  • 因为我们的预测不可避免地存在误差,所以预测的“最优”调度解决方案不一定是实践中的最佳调度。
  • 热量等式可用于分散我们的调度(例如,如果我们的预测预报建议在下午 12 点调度 500 千瓦,则等式可能会在上午 11 点返回 150 千瓦,下午 12 点返回 200 千瓦,下午 1 点返回 150 千瓦。)
  • 这个简单的方法可以节省很多钱。一个地区的储蓄增加了 60%以上。
  • 该方程需要两个常量作为输入,但是对于实用程序来说,优化它们应该不难。

疑问?更正?联系我,查看更多项目在 我的网站

GANs 的端到端介绍

原文:https://towardsdatascience.com/an-end-to-end-introduction-to-gans-bf253f1fa52f?source=collection_archive---------4-----------------------

柠檬榨汁机

我敢打赌,我们大多数人最近都见过很多人工智能生成的人脸,无论是在报纸上还是博客上。我们已经到达了一个阶段,在这个阶段,区分真实的人脸和人工智能生成的人脸变得越来越困难。

在这篇文章中,我将帮助读者理解他们如何自己创建和构建这样的应用程序。

对于初学者来说,我会尽可能保持这篇文章的直观性,同时不会让它变得太简单。

这个帖子是关于了解GANs如何工作的。

任务概述

我将致力于使用动漫人物数据集创建我们自己的动漫人物。

我在这里使用的 DC-甘风格的甘不仅可以生成人脸或者新的动漫角色;它还可以用于创建现代时尚风格,用于一般的内容创建,有时也用于数据扩充目的。

在我看来,GANs 将会改变视频游戏和特效的制作方式。这种方法可以按需创建逼真的纹理或角色。

你可以在 Github 库中找到本章的完整代码。我还把代码上传到了谷歌实验室,这样你就可以自己尝试了。

使用 DCGAN 架构生成动漫图像

像往常一样,在我们进入编码之前,深入研究一下理论会有所帮助。

DC-甘的主要思想源于亚历克·拉德福德、卢克·梅斯和索史密斯·钦塔拉在 2016 年写的论文深度卷积生成对抗网络的无监督表示学习

虽然我将在接下来的几节中解释这篇论文,但是请务必看一看它。这是一篇优秀的论文。

直觉:生成假图像的 GANs 简介

通常情况下, GANs 采用两个决斗神经网络来训练计算机学习数据集的性质,足以生成令人信服的假货。

我们可以将此视为两个系统,其中一个神经网络工作以生成假货(生成器),另一个神经网络(鉴别器)试图对哪个图像是假货进行分类。

由于发生器和鉴别器网络都重复这样做,网络最终会更好地完成各自的任务。

把这个想成剑术那么简单。 两个 noobs 开始互相对打。过了一会儿,两人的剑术都变得更好。

或者你也可以把这个想成一个强盗(发电机)和一个警察(鉴别器)。在多次盗窃之后,强盗变得更擅长偷窃,而警察变得更擅长抓强盗。在理想的世界里。**

这些神经网络中的损耗主要是另一个网络表现如何的函数:

  • 鉴别器网络损耗是发生器网络质量的函数——如果鉴别器被发生器的假图像欺骗,那么鉴别器的损耗很高
  • 发电机网络损耗是鉴频器网络质量的函数,如果发电机不能欺骗鉴频器,损耗就很高。

在训练阶段,我们依次训练鉴别器和发生器网络,以提高鉴别器和发生器的性能。

目标是最终得到帮助生成器生成逼真图像的权重。 最后,我们可以使用生成器神经网络从随机噪声中生成假图像。

发电机架构

我们面对的一个主要问题是 GANs 的训练不是很稳定。因此,我们必须想出一个生成器架构来解决我们的问题,并产生稳定的训练。

上图摘自论文,解释了 DC-GAN 发生器的架构。这可能看起来有点混乱。

本质上,我们可以将生成器神经网络视为一个黑盒,它接受一个 100 大小的正常生成的数字向量作为输入,并为我们提供一个图像:

我们如何得到这样的架构?

在下面的架构中,我们使用大小为 4x4x1024 的密集层从这个 100 维向量中创建一个密集向量。然后,我们用 1024 个滤镜将这个密集矢量重新塑造成 4x4 的图像形状,如下图所示:

我们现在不必担心任何权重,因为网络本身会在训练时学习这些权重。

一旦我们有了 1024 个 4x4 的贴图,我们就使用一系列转置卷积进行上采样,在每次操作之后,图像的大小加倍,贴图的数量减半。在最后一步中,虽然我们没有将贴图的数量减半,但是将每个 RGB 通道的贴图数量减少到 3 个通道/贴图,因为我们需要 3 个通道来输出图像。

什么是转置卷积?

最简单地说, 转置卷积为我们提供了一种对图像进行上采样的方法。 在卷积运算中,我们试图从 4x4 图像到 2x2 图像,而在转置卷积中,我们从 2x2 到 4x4 进行卷积,如下图所示:

Upsampling a 2x2 image to 4x4 image

问: 我们知道,在卷积神经网络(CNN)中,Un-pooling 普遍用于对输入特征图进行上采样。为什么我们不使用取消池?

这是因为取消汇集不涉及任何学习。然而,转置卷积是可以学习的,这就是为什么我们更喜欢转置卷积而不是反池。它们的参数可以被发电机学习,我们将在一段时间内看到。

鉴别器架构

现在,我们已经理解了生成器架构,这里是作为黑盒的鉴别器。

实际上,它包含一系列的卷积层,并在末端包含一个密集层,以预测图像是否是假的,如下图所示:

将图像作为输入,并预测它是真是假。conv 网曾经的每一个形象。

数据预处理和可视化

我们要做的第一件事是查看数据集中的一些图像。以下是可视化数据集中部分影像的 python 命令:

结果输出如下:

我们可以看到图像的大小和图像本身。

在这种特殊情况下,我们还需要函数将图像预处理为 64x64x3 的标准大小,然后再继续我们的训练。

在我们使用它来训练我们的 GAN 之前,我们还需要标准化图像像素。你可以看到它的代码被很好地注释了。

正如您将看到的,我们将在代码的培训部分使用前面定义的函数。

DCGAN 的实现

这是我们定义 DCGAN 的部分。我们将定义噪声发生器功能、发生器架构和鉴别器架构。

为发电机生成噪声矢量

Kids: Normal Noise generators

下面的代码块是一个帮助器函数,为生成器创建一个预定义长度的噪声向量。它将产生噪声,我们希望使用我们的发生器架构将其转换为图像。

我们使用正态分布

要生成噪声矢量,请执行以下操作:

发电机架构

发电机是 GAN 中最关键的部分。

在这里,我通过添加一些转置卷积层来创建一个生成器,以便对图像的噪声向量进行上采样。

正如你所注意到的,这个发生器的结构与 DC-甘最初的论文中给出的不同。

我需要对架构进行一些更改,以更好地适应我们的数据,因此我在中间添加了一个卷积层,并从生成器架构中删除了所有密集层,使其完全卷积。

我也用了很多动量为 0.5,漏 ReLU 激活的 Batchnorm 层。我用的是β=0.5 的亚当优化器。下面的代码块是我将用来创建生成器的函数:

您可以绘制最终的发电机模型:

plot_model(generator, to_file='gen_plot.png', show_shapes=True, show_layer_names=True)

Generator Architecture

鉴别器架构

这是鉴别器架构,我使用一系列卷积层和最后的密集层来预测图像是否是假的。

以下是鉴别器的架构:

plot_model(discriminator, to_file='dis_plot.png', show_shapes=True, show_layer_names=True)

Discriminator Architecture

培养

理解 GAN 中的培训是非常重要的。或许还有点意思。

我首先使用上一节中定义的函数创建我们的鉴别器和生成器:

discriminator = get_disc_normal(image_shape)
generator = get_gen_normal(noise_shape)

然后,发生器和鉴别器相结合,形成最终的 GAN。

discriminator.trainable = False# Optimizer for the GAN
opt = Adam(lr=0.00015, beta_1=0.5) #same as generator
# Input to the generator
gen_inp = Input(shape=noise_shape)GAN_inp = generator(gen_inp)
GAN_opt = discriminator(GAN_inp)# Final GAN
gan = Model(input = gen_inp, output = GAN_opt)
gan.compile(loss = 'binary_crossentropy', optimizer = opt, metrics=['accuracy'])plot_model(gan, to_file='gan_plot.png', show_shapes=True, show_layer_names=True)

这是我们整个 GAN 的架构:

训练循环

这是一个主要的区域,我们需要了解到目前为止我们所创建的模块是如何组装和协同工作的。

别担心,我会在这里一步步尝试破解上面的代码。每个训练迭代的主要步骤是:

步骤 1: 从数据集目录中采样一批归一化图像

# Use a fixed noise vector to see how the GAN Images transition through time on a fixed noise. 
fixed_noise = gen_noise(16,noise_shape)# To keep Track of losses
avg_disc_fake_loss = []
avg_disc_real_loss = []
avg_GAN_loss = []# We will run for num_steps iterations
for step in range(num_steps): 
    tot_step = step
    print("Begin step: ", tot_step)
    # to keep track of time per step
    step_begin_time = time.time() 

    # sample a batch of normalized images from the dataset
    real_data_X = sample_from_dataset(batch_size, image_shape, data_dir=data_dir)

第二步:产生输入到发电机的噪声

# Generate noise to send as input to the generator
    noise = gen_noise(batch_size,noise_shape)

第三步:使用随机噪声生成器生成图像。

# Use generator to create(predict) images
    fake_data_X = generator.predict(noise)

    # Save predicted images from the generator every 100th step
    if (tot_step % 100) == 0:
        step_num = str(tot_step).zfill(4)save_img_batch(fake_data_X,img_save_dir+step_num+"_image.png")

第四步:使用生成器图像(伪图像)和真实归一化图像(真实图像)及其噪声标签训练鉴别器。

# Create the labels for real and fake data. We don't give exact ones and zeros but add a small amount of noise. This is an important GAN training trick
    real_data_Y = np.ones(batch_size) - np.random.random_sample(batch_size)*0.2
    fake_data_Y = np.random.random_sample(batch_size)*0.2

    # train the discriminator using data and labelsdiscriminator.trainable = True
    generator.trainable = False# Training Discriminator seperately on real data
    dis_metrics_real = discriminator.train_on_batch(real_data_X,real_data_Y) 
    # training Discriminator seperately on fake data
    dis_metrics_fake = discriminator.train_on_batch(fake_data_X,fake_data_Y) 

    print("Disc: real loss: %f fake loss: %f" % (dis_metrics_real[0], dis_metrics_fake[0]))

    # Save the losses to plot later
    avg_disc_fake_loss.append(dis_metrics_fake[0])
    avg_disc_real_loss.append(dis_metrics_real[0])

步骤 5: 使用噪声作为 X,1(有噪声的)作为 Y 来训练 GAN,同时保持鉴别器不可训练。

# Train the generator using a random vector of noise and its labels (1's with noise)
    generator.trainable = True
    discriminator.trainable = FalseGAN_X = gen_noise(batch_size,noise_shape)
    GAN_Y = real_data_Y

    gan_metrics = gan.train_on_batch(GAN_X,GAN_Y)
    print("GAN loss: %f" % (gan_metrics[0]))

我们使用 for 循环重复这些步骤,最终得到一个好的鉴别器和生成器。

结果

最终的输出图像如下所示。正如我们所看到的,GAN 可以为我们的内容编辑朋友生成非常好的图像。

它们可能有点粗糙,但仍然是我们 GAN 之旅的开始。

训练期间的损失

这是为损失生成的图表。我们可以看到,随着步骤的增加,GAN 损耗平均在下降,方差也在下降。为了获得更好的结果,可能需要进行更多的迭代训练。

每 1500 步生成一幅图像

您可以在 Colab 中看到输出和运行代码:

下面给出了在不同的训练步骤中生成一些图像的代码。正如我们所见,随着步数的增加,图像变得越来越好。

下面给出了 GAN 在不同时间步长的结果:

结论

Power in your hands

在本帖中, 我们了解了 s的基本知识。我们还了解了 DC-甘的生成器和鉴别器架构,并构建了一个简单的 DC-甘来从头开始生成动画图像。

这个模型不太擅长生成假图像,但我们通过这个项目了解了 GANs 的基本知识,并且随着我们的发展,我们有信心建立更多令人兴奋和复杂的 GANs。

GANs 的 DC-GAN 风格不仅可以广泛应用于生成人脸或新的动画角色,还可以用于生成新的时尚风格,用于一般的内容创建,有时也用于数据增强目的。

如果我们手头有训练数据,我们现在可以按需变出逼真的纹理或角色,这可不是一个小壮举。

如果你想了解更多关于深度学习的应用和用例,可以看看 Andrew NG 的深度学习专业化中的序列模型课程。Andrew 是一位很棒的讲师,这门课程也很棒。

我以后也会写更多这样的帖子。让我知道你对这个系列的看法。在 媒体 关注我,或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。

一名工程师成为数据科学家的旅程

原文:https://towardsdatascience.com/an-engineers-journey-to-become-a-data-scientist-85edeaaaa932?source=collection_archive---------23-----------------------

Unsplash

Neha 有工程和 MBA 背景。她在休了几年个人休假后,希望重新加入劳动力大军。她上一份工作涉及业务流程分析、规划和市场研究。她不想回到过去。

当她开始探索更令人满意的职业生涯时,分析成为一个强有力的竞争者。她一直喜欢数据和模式。

阿林很快出现在她的雷达上。她参加了阿林的能力评估。她的好成绩为她确定了道路。她知道她有这个能力!

Neha 报名参加了 Aryng 的 ACAP -职业过渡课程。

她完成了业务分析、A/B 测试和预测分析的数据科学实践课程。她准备好了她的真实世界的客户项目。

她和我们的客户 JustAnswer 一起做实时分析项目培训。他们需要帮助识别诽谤者,以获得付费的专家答案。

Neha 直接与负责主页的利益相关者合作,以了解用户流失的地方和最佳转化率的来源。

在这个项目中,她作为她的导师在后台和我一起工作。

根据她的分析,她建议对主页和流程进行四项主要改变——添加快速点击标签以实现最佳转化,根据最高下降率将漏斗从五个页面减少到四个页面,在支付页面上添加一个新按钮,以及优化移动体验。这些变化可以帮助 JustAnswer 获得超过 100 万美元的增量收入。

产品团队立即开始工作。他们设计了一个实验来测试她的建议,在完成她的项目后的一个月内,公司采纳了 Neha 建议的所有改变来获取增量收入。

培训和后续项目改变了 Neha 的游戏规则。该项目让她对整个分析工作流程有了一个完整的“从头到尾”的体验。她现在切身体会到了数据科学的强大。

在她的实时项目结束后,作为她的职业教练课程的一部分,她和我一起针对具体的分析师工作,并相应地修改她的简历。几经周折后,她有了一份完美的 8 秒简历,开始申请工作。一旦她开始接受面试,她就和我安排了另一次职业辅导会议,帮助她获得了梦想中的工作。

如今,Neha 是圣克拉拉县的一名数据分析师。她已经成功过渡了。

就我而言,我看到 Neha 从一个害羞、不自信、刚刚重返职场的专业人士转变为一个自信的分析师,她可以在面试中回答棘手的分析问题,证明自己对公司的价值,并获得结果。

快乐的 Neha 打电话给我,告诉我她在圣克拉拉县的工作机会,她是另一个 Neha,一年前她安排了 15 分钟的聊天,询问 Aryng 的 ACAP-职业过渡轨道。

我沉迷于这种转变。我想和那些准备实现梦想的人一起踏上这个旅程。这就是我教授数据科学的原因,也是我邀请你参加这个免费的大师班的原因,该班讲述了将你的职业生涯成功过渡到分析的 5 个步骤。

Neha 和成千上万的其他人已经做到了,你也可以!

Python 中的“等式到代码”机器学习项目演练—第 1 部分线性可分问题

原文:https://towardsdatascience.com/an-equation-to-code-machine-learning-project-walk-through-in-python-part-1-linear-separable-fd0e19ed2d7?source=collection_archive---------13-----------------------

数学方程式背后的详细解释,为您的机器学习或深度学习之旅奠定实用的数学基础

Photo: Halfpoint/Shutterstock

从工程师到机器学习工程师的一大差距是将数学方程转换为真实代码的能力。有时我们真的需要从头实现一些基本概念,以更好地理解幕后的魔力,而不是在没有进一步理解的情况下只导入库。

所以我决定写一些文章来解释如何将数学方程式转换成真正的代码。这是第 1 部分,我将给出一个使用逻辑回归对一个线性可分问题进行分类的例子。我会尽可能简单地解释。

这里是数据代码

内容结构如下。看起来有点长,

  1. 看数据
  2. 线性可分问题
  3. 向量表示法
  4. 标准化
  5. 添加偏差
  6. Sigmoid 函数
  7. 似然函数
  8. 更新参数θ
  9. 绘制直线
  10. 摘要

1 看数据

下面是数据, linear_data.csv

x1,x2,y
153,432,0
220,262,0
118,214,0
474,384,1
485,411,1
233,430,0
396,321,1
484,349,1
429,259,1
286,220,1
399,433,0
403,300,1
252,34,1
497,372,1
379,416,0
76,163,0
263,112,1
26,193,0
61,473,0
420,253,1

首先,我们需要绘制这些数据,看看它是什么样子的。我们创建一个 Python 文件,并将其命名为 logistic_regression.py。

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", *delimiter*=',', *skiprows*=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# plot
plt.plot(train_x[train_y == 1, 0], train_x[train_y == 1, 1], 'o')
plt.plot(train_x[train_y == 0, 0], train_x[train_y == 0, 1], 'x')
plt.show()

运行上面的脚本后,您应该会看到下图。

我们可能认为一条直线应该能很好地把 X 和 O 分开。而这是一个线性可分问题

2 线性可分问题

我们需要为这样的问题找到一个模型。最简单的情况是使用线性函数

我们用θ来表示参数。左边的θ标记表示函数 f(x)有参数θ。右边的θ表示有两个参数。

我们可以把它写成代码

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", *delimiter*=',', *skiprows*=1)
train_x = data[:, 0:2]
train_y = data[:, 2]theta = np.random.randn(2)**def f(x):
    return theta[0] + theta[1] * x**

3 矢量表示法

我们也可以把线性函数改写成更简单的方式,向量方式。

这里的θ和 x 都是列向量。

之所以用θ的转置,是因为可以用矩阵乘法。

我们可以写下面的代码

import numpy as np
import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", *delimiter*=',', *skiprows*=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(2)**# dot product
def f(x):
    return np.dot(theta, x)**

你可能想知道为什么我们不写np.dot(theta.T, x)?因为文档如果两个向量都是一维数组,那么就是向量的内积(没有复共轭)。所以np.dot(theta, x)做和np.dot(theta.T, x)一样的事情。

4 标准化

为了使训练快速收敛,我们使用标准化,也叫 z - 评分。我们是按列来做的。

  • 𝜇在每一栏都很刻薄
  • 𝜎是每列的标准偏差
import numpy as np
import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", *delimiter*=',', *skiprows*=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(2)**# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)****def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)**# dot product
def f(x):
    return np.dot(theta, x)

5 添加偏差

我们需要在函数中加入一个偏差项,使我们的模型具有更好的泛化能力。所以我们把参数从 2 增加到 3。并且添加常数 x0=1,以便对齐矢量表示。

为了使计算更简单,我们把 x 转换成矩阵。

import numpy as np
import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", *delimiter*=',', *skiprows*=1)
train_x = data[:, 0:2]
train_y = data[:, 2]**# initialize parameter
theta = np.random.randn(3)**# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)**# get matrix
def to_matrix(std_x):
    return np.array([[1, x1, x2] for x1, x2 in std_x])
mat_x = to_matrix(std_x)**# dot product
def f(x):
    return np.dot**(x, theta)**

std_x的尺寸为(20, 2)to_matrix(std_x)之后mat_x的尺寸为(20, 3)。至于点积部分,注意这里我们改变了 x 和θ的位置,θ的量纲是(3,)。所以点生成的结果应该是(20,3) x (3,)->(20,),这是一个包含 20 个样本预测的一维数组。

6 Sigmoid 函数

下面是我们到目前为止讲过的线性函数。

熟悉了线性函数之后。我们将在此基础上构建一个更强大的预测函数,sigmoid 函数。

我们用 z 来表示线性函数,并将其传递给 sigmoid 函数。sigmoid 函数将给出每个数据样本的概率。我们的数据中有两个类,一个是1,另一个是0

我们可以看到模型基于线性函数部分预测样本。

我们可以写下面的代码

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", delimiter=',', skiprows=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(3)# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)# get matrix
def to_matrix(std_x):
    return np.array([[1, x1, x2] for x1, x2 in std_x])
mat_x = to_matrix(std_x)**# sigmoid function
def f(x):
    return 1 / (1 + np.exp(-np.dot(x, theta)))**

7 似然函数

如果你对方程式的解释不感兴趣,你可以直接跳到第 7 步的最后一部分。

好了,我们准备了数据、模型(sigmoid ),还需要什么?是的,一个目标函数。目标函数可以指导我们如何以正确的方式更新参数。对于 sigmoid(逻辑回归),我们通常使用对数似然作为目标函数

等等,等等…这些东西到底是怎么回事!

不要慌。冷静点。

让我们把它拆开。

  • 1->2(如何从第 1 行到第 2 行):log(ab) = log a + log b
  • 2->3: log(a)^b = b * log a
  • 3->4:由于我们只有两个类,y=0 和 y=1,所以我们可以使用下面的等式:

3->4

  • 4->5:我们使用下面的变换使等式更具可读性

所以我们得到了最后一部分。

别忘了我们为什么开始这个。目标函数可以指导我们如何以正确的方式更新参数。

我们需要用这个来计算损耗,以更新参数。更具体地说,我们需要计算对数似然函数的导数。这里我直接给出最后的更新方程式。(如果你对如何得到这个方程感兴趣,这个视频应该会有帮助)

第六步,最重要的方程就是这个。如果你不明白如何做到这一点,这是完全可以的。我们需要做的就是把它写成真正的代码。

8 更新参数θ

第八步稍微长一点,但是很重要。别慌。我们会破解它。

θj 是第 j 个参数。

  • η是学习率,我们设为 0.001 (1e-3)。
  • n 是数据样本的数量,在我们的例子中,我们有 20 个。
  • I 是第 I 个数据样本

因为我们有三个参数,所以可以写成三个方程。

:=符号就像=。你可以在这里找到解释

最难的部分是σ(求和符号),所以为了更好地理解,我扩展了σ。

仔细看。

我给等式中的三个部分涂上颜色,因为我们可以用矩阵来表示它们。看第一行红色和蓝色的部分,我们更新了θ0。

我们把红色部分和蓝色部分写成列向量。

因为我们有 20 个数据样本,所以f的维数是(20,1)x0的尺寸为(20,1)。我们可以用转置写矩阵乘法。

所以尺寸应该是(1, 20) x (20, 1) -> (1,)。我们得到一个标度来更新θ0。

x1x2也是列向量。我们可以把它们写成一个 X 矩阵。

θ是一个行向量

回到等式。

我们可以写为

写作是一个等式。

类似 Numpy 数组的版本可能容易理解。

让我们做一点计算,以确保尺寸是正确的。

θ: (1, 3) 
f^T: (1, 20) 
x: (20, 3)dot production: (1, 20) x (20, 3) -> (1, 3)

一切看起来都那么正确。让我们写代码。实际上,只有两行。

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", delimiter=',', skiprows=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(3)# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)# get matrix
def to_matrix(std_x):
    return np.array([[1, x1, x2] for x1, x2 in std_x])
mat_x = to_matrix(std_x)# dot product
def f(x):
    return np.dot(x, theta)# sigmoid function
def f(x):
    return 1 / (1 + np.exp(-np.dot(x, theta)))# update times
epoch = 2000# learning rate
ETA = 1e-3# update parameter
**for _ in range(epoch):
**    """
    f(mat_x) - train_y: (20,)
    mat_x: (20, 3)
    theta: (3,)

    dot production: (20,) x (20, 3) -> (3,)
    """ **theta = theta - ETA * np.dot(f(X) - train_y, mat_x)**

奇怪的事?还记得我们在代码前写了什么吗?

dot production: (1, 20) x (20, 3) -> (1, 3)The dimension changes make sense here.

但是为什么我们写代码的时候要用(20,) x (20, 3) -> (3,)

实际上,这不是真正的数学符号,这是 Numpy 符号。而且如果你用的是 TensorFlow 或者 PyTroch 的话,应该很熟悉。

(20,)表示这是一个包含 20 个数字的一维数组。它可以是行向量,也可以是列向量,因为它只有一维。如果我们将其设置为二维数组,像(20, 1)(1, 20),我们可以很容易地确定(20, 1)是一个列向量而(1, 20)是一个行向量。

但是为什么不显式设置维度来消除歧义呢?

好吧。相信我,我第一次看到这个的时候就有接缝问题。但是经过一些编码实践,我想我知道原因了。

因为它可以节省我们的时间!

我们以(20,) x (20, 3) -> (3,)为例。如果我们想得到(1, 20) x (20, 3) -> (1, 3),我们需要用(20,) x (20, 3) -> (3,)做什么?

  • 将(20,)转换为(1,20)
  • 计算(1,20) x (20,3) -> (1,3)
  • 因为(1,3)是一个二维列向量,我们需要将其转换为一维数组。(1,3) -> (3,)

老实说,这很令人沮丧。为什么我们不能一步到位?

对,所以我们才能写(20,) x (20, 3) -> (3,)

好了,我们来看看 numpy.dot() doc 是怎么说的。

numpy.dot() :如果 a 是一个 N 维数组, b 是一个 1 维数组,那么它就是 ab 最后一个轴上的和积。

嗯,事实上我不明白。但是 np.matmul() 描述了与(20,1)或(1,20)的整形类似的计算,以执行标准的 2d 矩阵乘积。也许我们能得到一些灵感。

np.matmul() :如果第一个参数是 1-D,则通过在它的维数前加上 1 来将其提升为矩阵。在矩阵乘法之后,前置的 1 被移除。

哈,这就是缺失的部分!所以在我们的例子中,(20,)变成了(1, 20),因为(20,3)的第一维度是 20。还有(1, 20) * (20, 3) -> (1, 3)。然后前置 1 被删除,所以我们得到(3,)。一步到位。

9 画出这条线

在更新参数 2000 次后,我们应该绘制结果来查看我们的模型的性能。

我们将一些数据点做为 x1,根据我们所学的参数计算 x2。

# plot line
x1 = np.linspace(-2, 2, 100)
**x2 = - (theta[0] + x1 * theta[1]) / theta[2]**plt.plot(std_x[train_y == 1, 0], std_x[train_y == 1, 1], 'o') # train data of class 1
plt.plot(std_x[train_y == 0, 0], std_x[train_y == 0, 1], 'x') # train data of class 0
**plt.plot(x1, x2, linestyle='dashed') # plot the line we learned** plt.show()

10 摘要

恭喜你!我很高兴你能来。希望我的文章对你有帮助。你可以在下面找到完整的代码。留下评论让我知道我的文章是否易懂。请继续关注我的下一篇关于非线性可分性问题的文章。

查看我的其他帖子 中等 分类查看
GitHub:
bramble Xu LinkedIn:徐亮 博客:bramble Xu

“等式到代码”机器学习项目演练—第 2 部分非线性可分问题

原文:https://towardsdatascience.com/an-equation-to-code-machine-learning-project-walk-through-in-python-part-2-non-linear-d193c3c23bac?source=collection_archive---------15-----------------------

数学方程式背后的详细解释,为您的机器学习或深度学习之旅奠定实用的数学基础

大家好!这是“等式到代码”演练的第 3 部分。这次

第一部分中,我们谈到了如何利用线性回归解决线性可分问题。我们学习了向量表示、标准化、添加偏差、sigmoid 函数、对数似然函数和更新参数。

这次我们要解决一个非线性可分问题。如果你没有看过第一部分,这完全没问题。第 2 部分是独立的。但是如果你想更好地理解第 2 部分,最好先读第 1 部分。

[## Python 中的“等式到代码”机器学习项目演练—第 1 部分线性可分…

数学方程式背后的详细解释,为你的机器学习或学习建立实用的数学基础

towardsdatascience.com](/an-equation-to-code-machine-learning-project-walk-through-in-python-part-1-linear-separable-fd0e19ed2d7)

下面是数据代码

内容结构如下。*表示如果您已经完成第 1 部分,可以跳过这一步。

  1. 看数据
  2. 非线性可分问题
  3. 标准化*
  4. 添加偏差和多项式项
  5. Sigmoid 函数*
  6. 似然函数*
  7. 更新参数θ*
  8. 绘制直线
  9. 精度
  10. 摘要

1 看数据

下面是数据, non_linear_data.csv

x1,x2,y
0.54508775,2.34541183,0
0.32769134,13.43066561,0
4.42748117,14.74150395,0
2.98189041,-1.81818172,1
4.02286274,8.90695686,1
2.26722613,-6.61287392,1
-2.66447221,5.05453871,1
-1.03482441,-1.95643469,1
4.06331548,1.70892541,1
2.89053966,6.07174283,0
2.26929206,10.59789814,0
4.68096051,13.01153161,1
1.27884366,-9.83826738,1
-0.1485496,12.99605136,0
-0.65113893,10.59417745,0
3.69145079,3.25209182,1
-0.63429623,11.6135625,0
0.17589959,5.84139826,0
0.98204409,-9.41271559,1
-0.11094911,6.27900499,0

首先,我们需要绘制这些数据,看看它是什么样子的。我们创建一个 Python 文件,并将其命名为 non_logistic_regression.py。

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("non_linear_data.csv", delimiter=',', skiprows=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# plot data points
plt.plot(train_x[train_y == 1, 0], train_x[train_y == 1, 1], 'o')
plt.plot(train_x[train_y == 0, 0], train_x[train_y == 0, 1], 'x')
plt.show()

运行上面的脚本后,您应该会看到下图。

似乎我们不能用一条直线来分离 X 和 o。我们把这样的问题称为非线性可分问题,其中数据不是线性可分的。

2 非线性可分问题

在第 1 部分中,我们使用线性函数来解决线性可分问题。

linear function

但是对于非线性可分问题,线性函数过于简单,难以处理。所以我们引入了多项式逻辑回归,它在逻辑回归中增加了一个多项式项。

general form

我们用θ来表示参数。左边的θ标记表示函数 f(x)有参数θ。右边的θ表示有两个参数。最后一项是多项式项,它使模型推广到非线性可分数据。

注意我们在 non_linear_data.csv 中有 x1 和 x2 两个特征。我们选择 x1 作为多项式项。所以功能应该变成低于形式。

a specific form fit to our data

我们初始化 4 个参数

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", *delimiter*=',', *skiprows*=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
**theta = np.random.randn(4)**

3 标准化

为了使训练快速收敛,我们使用标准化,也叫 z - 评分。我们是按列来做的。

  • 𝜇在每一栏都很刻薄
  • 𝜎是每列的标准偏差
import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", *delimiter*=',', *skiprows*=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(4)**# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)****def standardizer(x):
    return (x - mu) / sigma****std_x = standardizer(train_x)**

4 添加偏差和多项式项

我们需要添加一个偏差和多项式项来构建数据矩阵。我们添加一个常数 x0=1,以便对齐矢量表示。

a specific form fit to our data

vector representation

您可以在第 1 部分找到更多的矢量表示细节: 3 矢量表示

为了使计算更简单,我们把 x 转换成矩阵。

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", delimiter=',', skiprows=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(4)# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)**# add x0 and x1^2 to get matrix
def to_matrix(x):
    x0 = np.ones([x.shape[0], 1]) 
    x3 = x[:, 0, np.newaxis] ** 2
    return np.hstack([x0, x, x3])****mat_x = to_matrix(std_x)** **# dot product
def f(x):
    return np.dot(x, theta)**

我们用 x3 来表示x1*x1

std_x的尺寸为(20, 2)。在to_matrix(std_x)之后,mat_x的尺寸为(20, 4)。至于点积部分,结果的维度是(4,)。所以点生成的结果应该是(20, 4) x (4,) -> (20,),这是一个包含 20 个样本预测的一维数组。

5 Sigmoid 函数

下面是矢量表示

然后我们将基于它建立一个更强大的预测函数,sigmoid 函数。

我们用 z 来表示线性函数,并将其传递给 sigmoid 函数。sigmoid 函数将给出每个数据样本的概率。我们的数据中有两个类,一个是1,另一个是0

我们可以看到模型基于线性函数部分预测样本。

我们可以写下面的代码

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", delimiter=',', skiprows=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(4)# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)# add x0 and x1^2 to get matrix
def to_matrix(x):
    x0 = np.ones([x.shape[0], 1]) 
    x3 = x[:, 0, np.newaxis] ** 2
    return np.hstack([x0, x, x3])
mat_x = to_matrix(std_x)**# change dot production to sigmoid function
def f(x):
    return 1 / (1 + np.exp(-np.dot(x, theta)))**

6 似然函数

如果您对方程的解释不感兴趣,或者您已经在第 1 部分中阅读过,那么您可以跳过这一步

好了,我们准备了数据、模型(sigmoid ),还需要什么?是的,一个目标函数。目标函数可以指导我们如何以正确的方式更新参数。对于 sigmoid(逻辑回归),我们通常使用对数似然作为目标函数

等等,等等…这些东西到底是怎么回事!

不要慌。冷静点。

让我们把它拆开。

  • 1->2(如何从第 1 行到第 2 行):log(ab) = log a + log b
  • 2->3: log(a)^b = b * log a
  • 3->4:由于我们只有两个类,y=0 和 y=1,所以我们可以使用下面的等式:

3->4

  • 4->5:我们使用下面的变换使等式更具可读性

所以我们得到了最后一部分。

别忘了我们为什么开始这个。目标函数可以指导我们如何以正确的方式更新参数。

我们需要用这个来计算损耗,以更新参数。更具体地说,我们需要计算对数似然函数的导数。这里我直接给出最后的更新方程式。(如果你对如何得到这个方程感兴趣,这个视频应该会有帮助)

第六步,最重要的方程就是这个。如果你不明白如何做到这一点,这是完全可以的。我们需要做的就是把它写成真正的代码。

7 更新参数θ

如果您已经阅读了第 1 部分,可以跳过这一步

这一步非常重要。不要慌。我们会破解它。

θj 是第 j 个参数。

  • η是学习率,我们设为 0.001 (1e-3)。
  • n 是数据样本的数量,在我们的例子中,我们有 20 个。
  • I 是第 I 个数据样本

因为我们有三个参数,所以可以写成三个方程。我们用 x3 来代表x1*x1

:=符号就像=。你可以在这里找到解释。

最难的部分是σ(求和符号),所以为了更好地理解,我扩展了σ。

仔细看。

我给等式中的三个部分涂上颜色,因为我们可以用矩阵来表示它们。看第一行红色和蓝色的部分,我们更新了θ0。

我们把红色部分和蓝色部分写成列向量。

因为我们有 20 个数据样本,所以f的维数是(20,1)x0的尺寸为(20,1)。我们可以用转置写矩阵乘法。

所以维度应该是(1, 20) x (20, 1) -> (1,)。我们得到一个标度来更新θ0。

x1x2也是列向量。我们可以把它们写成一个 X 矩阵。

θ是一个行向量

回到等式。

我们可以写为

把它写成一个等式。

类似 Numpy 数组的版本可能容易理解。

让我们做一点计算,以确保尺寸是正确的。

θ: (1, 4) 
f^T: (1, 20) 
x: (20, 4)dot production: (1, 20) x (20, 4) -> (1, 4)

一切看起来都那么正确。让我们写代码。其实就两行。

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", delimiter=',', skiprows=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(4)# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)# add x0 and x1^2 to get matrix
def to_matrix(x):
    x0 = np.ones([x.shape[0], 1]) 
    x3 = x[:, 0, np.newaxis] ** 2
    return np.hstack([x0, x, x3])
mat_x = to_matrix(std_x)# sigmoid function
def f(x):
    return 1 / (1 + np.exp(-np.dot(x, theta)))# update times
epoch = 2000# learning rate
ETA = 1e-3# update parameter
**for _ in range(epoch):
**    """
    f(mat_x) - train_y: (20,)
    mat_x: (20, 4)
    theta: (4,)

    dot production: (20,) x (20, 4) -> (4,)
    """
 **theta = theta - ETA * np.dot(f(mat_x) - train_y, mat_x)**

奇怪的事?还记得我们在代码前写了什么吗?

dot production: (1, 20) x (20, 4) -> (1, 4)The dimension changes make sense here.

但是为什么我们写代码的时候要用(20,) x (20, 4) -> (4,)

实际上,这不是真正的数学符号,这是 Numpy 符号。而且如果你用的是 TensorFlow 或者 PyTroch 的话,应该很熟悉。

(20,)表示这是一个包含 20 个数字的一维数组。它可以是行向量,也可以是列向量,因为它只有一维。如果我们将其设置为二维数组,像(20, 1)(1, 20),我们可以很容易地确定(20, 1)是列向量而(1, 20)是行向量。

但是为什么不显式设置维度来消除歧义呢?

好吧。相信我,我第一次看到这个的时候就有接缝问题。但是经过一些编码实践,我想我知道原因了。

因为这样可以节省我们的时间!

我们以(20,) x (20, 4) -> (4,)为例。如果我们想得到(1, 20) x (20, 4) -> (1, 4),我们需要对(20,) x (20, 4) -> (4,)做什么?

  • 将(20,)转换为(1,20)
  • 计算(1,20) x (20,4) -> (1,4)
  • 因为(1,4)是一个二维列向量,我们需要将其转换为一维数组。(1,4) -> (4,)

老实说,这很令人沮丧。为什么我们不能一步到位?

对,所以我们才能写(20,) x (20, 4) -> (4,)

好了,我们来看看 numpy.dot() doc 是怎么说的。

numpy.dot() :如果 a 是一个 N 维数组, b 是一个 1 维数组,那么它就是 ab 最后一个轴上的和积。

嗯,事实上我不明白。但是 np.matmul() 描述了与(20,1)或(1,20)的整形类似的计算,以执行标准的 2d 矩阵乘积。也许我们能得到一些灵感。

np.matmul() :如果第一个参数是一维的,那么通过在它的维数前加上 1,它被提升为一个矩阵。在矩阵乘法之后,前置的 1 被移除。

哈,这就是缺失的部分!所以在我们的例子中,(20,)变成了(1, 20),因为(20,4)的第一维度是 20。还有(1, 20) * (20, 4) -> (1, 4)。然后前置 1 被删除,所以我们得到(4,)。一步到位。

8 画这条线

在更新参数 2000 次后,我们应该绘制结果来查看我们的模型的性能。

我们将一些数据点做为 x1,根据我们所学的参数计算 x2。

# plot line
x1 = np.linspace(-2, 2, 100)
**x2 = - (theta[0] + x1 * theta[1] + theta[3] * x1**2) / theta[2]**plt.plot(std_x[train_y == 1, 0], std_x[train_y == 1, 1], 'o') # train data of class 1
plt.plot(std_x[train_y == 0, 0], std_x[train_y == 0, 1], 'x') # train data of class 0
**plt.plot(x1, x2, linestyle='dashed') # plot the line we learned** plt.show()

9 准确性

在第 2 部分中,我们使用准确性来评估我们的模型性能如何。

import numpy as np
import matplotlib.pyplot as plt# read data
data = np.loadtxt("linear_data.csv", delimiter=',', skiprows=1)
train_x = data[:, 0:2]
train_y = data[:, 2]# initialize parameter
theta = np.random.randn(4)# standardization
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardizer(x):
    return (x - mu) / sigma
std_x = standardizer(train_x)# add x0 and x1^2 to get matrix
def to_matrix(x):
    x0 = np.ones([x.shape[0], 1]) 
    x3 = x[:, 0, np.newaxis] ** 2
    return np.hstack([x0, x, x3])
mat_x = to_matrix(std_x)# sigmoid function
def f(x):
    return 1 / (1 + np.exp(-np.dot(x, theta)))**# classify sample to 0 or 1
def classify(x): 
    return (f(x) >= 0.5).astype(np.int)**# update times
epoch = 2000# learning rate
ETA = 1e-3**# accuracy log
accuracies = []**# update parameter
for _ in range(epoch):    theta = theta - ETA * np.dot(f(mat_x) - train_y, mat_x)    **result = classify(mat_x) == train_y 
    accuracy = sum(result) / len(result) 
    accuracies.append(accuracy)****# plot accuracy line
x = np.arange(len(accuracies))
plt.plot(x, accuracies)
plt.show()**
  • classify(x):如果概率大于 0.5,我们认为是真的
  • result:包含列表形式的预测,[真,假,…]
  • accuracy = sum(result) / len(result):计算当前历元中预测的正确样本数。

最后,我们绘制了精度线。

我们可以看到这条线在 1000 个周期后变得稳定。

10 摘要

如果你已经看过第 1 部分,你会发现第 2 部分很容易理解。你可以在下面找到完整的代码。留下评论让我知道我的文章是否易懂。请继续关注我的下一篇关于随机梯度下降的文章。

查看我的其他帖子 一个分类查看
GitHub:
bramble Xu LinkedIn:徐亮 博客:bramble Xu

posted @ 2024-10-13 15:24  绝不原创的飞龙  阅读(15)  评论(0编辑  收藏  举报