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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

线性模型能预测一个足球运动员的价值吗?

原文:https://towardsdatascience.com/can-linear-models-predict-a-footballers-value-33d772211e5d?source=collection_archive---------2-----------------------

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

Photo by Emilio Garcia on Unsplash

本着 2018 年世界杯的精神,我决定展示我最近做的一个项目,它融合了我最强烈的两个兴趣——数据科学和足球!目的是看看在英超联赛中一名球员的受欢迎程度和他的市场价值之间是否有关系,因为仅仅通过他的统计数据很难恰当地评估一名球员的价值。一个简单的例子是防守型中场球员通常看起来做得更少*,*但对任何球队都是非常有价值的。我还扯进了一些关于球员和前 6 名球队的有趣观察!

这里使用的数据是从各种来源搜集来的,包括 transfermrkt.com 和梦幻英超。它包含了 FPL 网站上列出的每支球队的所有球员,他们都有相应的市场价值。例如,transfermrkt.com 的 FPL 队名单上有麦克托米内,但他没有市场价值,这意味着他被排除在数据之外。这是 2017/18 赛季英超联赛所有球员的综合数据集,于 7 月 20 日得到确认。因此,可能会有一些后来签署的遗漏。

抓取使用了一些很酷的 RVest 和 Selenium 技术——点击此处了解更多细节。

一些初步分析

谁是 EPL 最有价值的球员?

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

正如所料,游戏中的一些最大的名字正在英格兰超级联赛中比赛。

谁是最受欢迎的球员?

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

鲁尼显然是第一名,他效力于曼联,是英超传奇人物。

市场价值分布

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

显然不是正态分布,但这是意料之中的。球队往往很少有精英球员,而在他们的阵容中有大量低+中价值球员。对球队前 15 名球员的分析可能看起来更像是正态分布,因为我们排除了低价值的边缘/青年球员。

前 6 名看起来有什么不同吗?

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

1 indicates top 6, 0 indicates other

有意思。前 6 名似乎有分散的球员,而其他人的大部分球员价值都在 1000 万以下(transfermrkt 的估值,不是我的)。

流行度分布

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

类似的市场价值分布,除了最后的两个异常值——韦恩·鲁尼和保罗·博格巴。虽然鲁尼已经是目前最知名的英格兰足球运动员,但他也打破了博比·查尔顿爵士保持的曼联进球最多的纪录。这一点,加上对他曼联生涯的不断猜测,无疑导致了他的页面浏览量的增加。另一方面,保罗·博格巴是严格审查的结合体(是世界上最昂贵的转会)(更新:不再是了!),回到曼联(可以肯定地看到人们在寻找他),以及他是一个非常有市场的,可见的球员的事实。

前 6 名与其他人

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

Graph 1 indicates top 6 teams, 0 indicates other teams

同样,排名前 6 的俱乐部似乎有着广泛的球员受欢迎程度。此外,韦恩鲁尼现在在埃弗顿,为其他球队解释离群值。

详细分析

显然,我试图建立的案例是,似乎有证据表明一个球员的市场价值与他的受欢迎程度相关联。这很有趣,因为在足球界,能力和表现是出了名的难以量化。这取决于位置、教练的战术、对手、联赛、你自己队友的能力等等。因此,给一个球员估价是非常困难的,尽管这是必须要做的。
像 WhoScored 这样的网站有每个球员每场比赛的分数,而 Fantasy Premier League 会在每个球员的头上贴上一个数值。看看受欢迎程度能否被用作能力的基本代表将会很有趣,这也是我将通过回归模型尝试的。

FPL 估价

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

FPL 价值和 transfermrkt 价值之间似乎有很好的一致,尽管 FPL 的估值显然是短期的,所以年龄不是一个重要因素。我期待看到更多球员出现在右下方——老球员,市场价值低,但 FPL 价值高,理论上像彼得·切赫和亚亚·图雷。也许有更好的方式来强调这一点。

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

这似乎是对的。如果 FPL 的价值等同于转会市场的价值,我们会看到一个恒定的比率,跨越年龄组。但事实上,最低的 FPL 价值是 400 万,非常年轻和未经证明的球员比例很低。同样,在另一端,老球员的市场价值很低,但他们在下个赛季仍然有价值。有趣的是远期交易的比率如何在超过 32 时跌落悬崖,这可能意味着它们的市场估值非常低。

随着年龄增长的市场价值

一般来说,老玩家的市场价值会更低,这是相当直观的。粗略的说明-

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

高价值玩家集中在 24-32 岁之间,在 27 岁左右达到顶峰。重要的是要注意,这绝不是线性关系,这就是为什么我在下面的回归模型中使用年龄类别。另一种方法是做一个变点回归,这意味着建立两个模型,其中一个模型的年龄=阈值。

谁在哪个位置进货?

曼城拥有潜力巨大的前锋和攻击型中场,但他们的防守非常薄弱(自从门迪、沃克和达尼洛到来后就没有了——但他们不在这个数据集中)。就位置优势而言,前六名的排名如何?

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

曼城的进攻总市值遥遥领先于其他球队。不过,他们和利物浦的后防明显较弱,哪个城市已经整改。曼联的德基和罗梅罗显然是 6 强中的佼佼者。

受欢迎程度是能力的代表

正如下一节所解释的,我们测试了能力和受欢迎程度之间存在关系的假设。能力很难通过绩效指标来衡量和比较。出于本节的目的,我假设 FPL 估值是一个公平的能力衡量标准。尽管这可能并不完美,我们还是应该能够阿瑟能力和声望之间的关系。

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

FPL 的估值和受欢迎程度之间似乎有一种很好的线性关系,只有几个明显的例外(韦恩·鲁尼,唉)。精彩!这将有助于下面的模型。

回归模型

主要目的是看看市场价值是否可以用知名度作为能力的代表来确定。一个玩家的市场价值可以直观地表示为-

市值~能力+职位+年龄

这应该理解为市值能力、职位年龄的函数。

后两个很容易观察到,但是能力是一个很难衡量的属性。有各种各样的衡量标准,但我决定用一个简单的指标来衡量——流行度(或者更具体地说,去年维基百科的页面浏览量)。我选择维基百科观点的原因如下-

  • 比 Twitter/脸书要好,因为它不依赖于玩家是否有个人资料。
  • 比脸书/Instagram 的粉丝要好,因为这些人也受到球员帖子的参与度的影响。
  • 很容易得到所需的时间框架——我想排除 5 月至 7 月,因为这将夸大 2016/17 赛季转会球员的受欢迎程度。

使用页面浏览量有其自身的问题与其他因素的相关性-

  1. 来自英格兰本土的球员可能会得到更多的点击率,因为他们在自己的主场联赛中比赛,即球员的国籍可能很重要。
  2. 不同类别的球员得到不同程度的关注——前锋肯定比后卫受欢迎得多!
  3. 新的签约可能会得到更多的关注,甚至超过转会期。
  4. 顶级俱乐部拥有更多的国际观众。
  5. 玩家可能会获得大量的点击率,因为在此之前他们几乎不为人知。想想 2016/17 赛季的马库斯·拉什福德。
  6. 长期受伤的球员可能只有很少的安打,仅仅是因为他们没有上场比赛。

在模型中,我控制 1–4,但不控制 5 和 6。5 和 6 都需要大量的工作来确定突破和长期伤害,这可能是有用的未来模型的补充。

对于因素 1-4:

  1. 检索每个玩家的国籍,并将其放入 4 个桶中:
  • 1 代表英国
  • 2 代表欧盟(英国退出欧盟将此作为自然分类)
  • 3 适用于美洲
  • 4 适用于世界其他地区

创建了一个名为region的新列,作为具有 4 个级别的因子。

  1. 包括用于页面视图和位置类别的交互术语。
  2. 标记了 2016/17 赛季的新签约,并与页面浏览量进行了互动。
  3. 创建了一个由曼联、曼城、切尔西、阿森纳、利物浦和热刺组成的专栏。这也与页面浏览量有关。

除了这些相互作用,年龄也作为一个分类变量包括在内(由于它与市场价值的非线性关系)。

数据集修改

  1. 新晋级的俱乐部被排除在数据之外,只是因为英超联赛提供了更高水平的宣传,而这些俱乐部在前一年没有接触过。
  2. 出于同样的原因,17/18 赛季来自国外的新援也被排除在外。但是,英超内部转会的球员会被保留。这意味着林德洛夫被排除在外,但卢卡库没有。
  3. 采用market_value的 sqrt 值,因为market_value是右尾重的,这可能导致异方差。
  4. 但是,这就导致了sqrt(market_value)page_views的关系看起来是这样的——

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

我也在page_views上应用了一个 sqrt 转换,得到了下面的图表

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

这看起来大致是线性的,韦恩·鲁尼是个例外。

现在对该数据应用多元线性回归模型得到的 R 值超过 70%!此外,page_views的系数极其显著。显然,sqrt(market_value)sqrt(page_views)之间是线性关系。

残差图能告诉我们什么?

残差图应该能够告诉我们数据中是否存在异方差问题。

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

Error Distribution Plot

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

Q-Q Plot

残差图似乎有随机分布的误差,qq 图证实它们是正态分布的。

EPL 人气

一个有趣的副产品是,与其他联赛相比,英超联赛有多受欢迎。由于从国外联赛引进的球员数量很少,这仍然是一个粗略的方法。然而,差异大到足以大于噪声。

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

我们知道这种模式肯定有效,因为它有来自其他联盟的被低估的球员。理由是——EPL 2000 万球员的点击率比法甲 2000 万球员的点击率高。正因为如此,每次页面浏览量的远低于 EPL。但由于模型是用 EPL 的数据建立的,页面浏览量的系数是从 EPL 得出的。因此,来自不太受欢迎的联赛的外国球员被低估了。

我希望你和我一样觉得这很刺激。如果你觉得有趣,请投赞成票!

要访问该项目中使用的数据和代码库,请单击此处的。

机器能学习正弦的概念吗

原文:https://towardsdatascience.com/can-machine-learn-the-concept-of-sine-4047dced3f11?source=collection_archive---------2-----------------------

众所周知,人工神经网络擅长模拟任何函数。我想知道他们是否能更进一步,学习一个函数的广义模型。为简单起见,让我们尝试学习一个只有一个参数 A 的正弦函数,它控制频率:

y = sin(A*x)

对于我们人类来说,一旦我们理解了正弦函数,我们就知道它在任何参数 A 下的行为。如果我们看到一个部分正弦波,我们就可以知道 A 应该是什么,我们可以将该波外推至无穷大。

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

ML 能预测一个它没见过的参数 A 的正弦波吗?

实验设置

让我们做一个实验来找出答案。我们把这个问题描述为一个时间序列预测问题。给定一些与函数 sin(A*x)匹配的数据点,尝试预测未来值。当然,挑战在于我们想学习正弦的一般概念。我们希望能够预测未来值,甚至是我们的模型在训练期间从未见过的参数(A)。

我们将使用 Keras,并尝试几种不同的模型——常用于函数建模的全连接网络,常用于模式识别的 CNN,以及常用于序列建模(如 NLP)的 LSTM。

对于每个模型,我们将在(0.06,0.12)范围内的参数 A 下进行训练。对于测试,我们将尝试在 0.033、0.06、0.083 和 0.163 的值下进行预测。这样,我们可以看到在训练范围内有 2 个参数,在训练范围外有 2 个参数的性能。

在测试过程中,我们将从正确 A 下的真实 sin(Ax)值历史开始,这相当于给人一个部分正弦波。当我们进行预测时,值 y 的未来预测将使用 y 的早期预测值。举个例子,假设我们从 40 个真实数据样本开始,y[0] … y[39],y[i] = sin(Ai)。我们使用我们的模型来预测 y[40]。然后我们会用 y[1] … y[40],其中 y[40]是预测值,来预测 y[41]。

我们这样做,而不是使用 sin(A*i)来预测 y[i+1]的原因是,通过累积误差,使我们的模型中的误差更容易看到。

全连接网络

在 Keras 中,完全连接的层称为密集层。我们在 FC 网络中使用 3 个密集层。

model = models.Sequential()
model.add(Dense(100, input_shape=(INPUT_COUNT,)))
model.add(LeakyReLU(alpha=0.03))
model.add(Dense(100))
model.add(LeakyReLU(alpha=0.03))
model.add(Dense(1))

输入形状是 INPUT_COUNT(定义为 40)之前的数据点。最后一个密集层有一个单元,因为我们在给定前 40 个值的情况下预测下一个值。

下面是结果。绿色虚线是预测。同样,在训练期间,参数 A 在 0.06 至 0.12 的范围内。

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

正如我们所看到的,我们的模型很好地管理了 0.06 和 0.083 的值,但是对于 0.033 和 0.163 却表现不佳。基本上一旦参数 A 超出训练范围,我们的模型就处理不了。

请注意,在图表上,我们的函数不是从 0 开始,因为我们使用了 40 个数据点作为历史数据来输入模型。所有图表都偏移了这 40 个数据点。

美国有线新闻网;卷积神经网络

我们使用 Conv1D 层,因为我们的数据是一维的。

model = models.Sequential()
model.add(Conv1D(100, 3, strides=1, input_shape=(INPUT_COUNT, 1)))
model.add(LeakyReLU(alpha=0.03))
model.add(Conv1D(100, 3, strides=1))
model.add(LeakyReLU(alpha=0.03))
model.add(Flatten())
model.add(Dense(100))
model.add(LeakyReLU(alpha=0.03))
model.add(Dense(1))

对于卷积,我们使用大小为 3 的滤波器,步长为 1。我们没有做最大池,因为位置在回归问题中很重要。

与 FC 网络类似,输入是 40 个先前的数据点,输出是曲线上的下一个点。

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

结果类似于完全连接的网络。在给定任何参数 a 的情况下,它不能学习正弦的一般公式。

LSTM

LSTM 网络保留了它在过去看到的数据的记忆。因此,我们输入的数据是不同的形式。我们只需要一次输入一个数据点,而不是 FC 和 CNN 模型过去 40 个数据点的历史记录。如下图所示,input_batch_size 为(1,1,1)。

model = models.Sequential()
model.add(LSTM(100, batch_input_shape=(1, 1, 1), return_sequences=True, stateful=True))
model.add(LSTM(100, return_sequences=False, stateful=True))
model.add(Dense(1))

因为我们一次只能输入一个数据点,因为后面的数据点依赖于前面的数据点建立的 LSTM 内部状态,所以我们不能利用硬件中的并行性。结果训练真的很慢。因为这个原因,我没有对 LSTM 参数做太多的实验。这是结果。

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

结果比 FC 和 CNN 还惨。同样,这可能是因为我没有做足够的工作。另一方面,我也不指望它表现得更好,因为其他模型有足够的历史数据,而且数据是重复的。

结论

我发现这个问题很有趣,因为在生活中我们经常需要使用历史数据来预测时间序列中的未来。如果神经网络模型能够推广重复模式的概念,甚至在频率变化时也能预测模式,那么它们在我们的应用中将更加强大。

在我们的实验中,我们看到模型都学习了正弦函数的一般形状,但未能在训练范围之外的频率下生成未来的数据点。

这里的结论是 NN 模型很难概括正弦的概念,还是简单地说我很烂,没能建立一个能解决这个问题的模型?我的代码在 github 上:

[## 松散连接/ml-示例

机器学习的例子。

github.com](https://github.com/looselyconnected/ml-examples)

请使用它,将您的意见发送给我,并让我知道是否有更好的模型可以解决这个问题。谢谢你。

机器学习能回答“我们从哪里来”这个问题吗?

原文:https://towardsdatascience.com/can-machine-learning-answer-the-question-where-did-we-come-from-223894bfeea6?source=collection_archive---------6-----------------------

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

为了了解我们从哪里来,科学家们从探索星系为什么会诞生,如何成长,以及为什么会死亡开始。

我们生活在一个星系中,每个星系的生命周期都是一个故事,总是有这三个阶段。很容易看到每个阶段的星系,但是如果没有更好地了解恒星的形成以及气体是如何变成恒星的,我们将永远不会知道它们为什么会衰老,为什么会死亡。

50 多年来,天文学家一直在人工测量和模拟恒星的形成,但未来的理解取决于分析更大的新一代望远镜的更多数据。在无法利用测量恒星形成所需的大量数据的情况下,理论家们转而依赖于通常令人信服但未经证实的模型。

这一切都将改变。

上周,我向公众发布了一个机器学习代码库,从根本上提高了科学家分析下一代望远镜数据的能力。

我开发了算法,和对应的代码,当时我还是威斯康星大学的博士后研究员。该代码库允许在 2015 年发表的一篇论文中概述的算法的实际应用。这项工作由威斯康星大学麦迪逊分校天文系教授 Snezana Stanimirovic 获得的国家科学基金会资助。

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

Gausspy 允许科学家们首次使用来自更大望远镜的更多数据来测试理论,以找出恒星形成的原因,它们老化和死亡的原因,并更接近理解我们为什么在这里的最基本问题。

那么,为什么从坐在实验室手动分析光谱的科学家到机器学习用了 50 年?

科学需要有人从需要它的领域之外的角度来解决这个问题。

射电天文学需要它来了解它们的光谱。我的背景是机器学习应用于需要人类解决的棘手问题。我个人选择这个项目不仅仅是为了科学,而是因为我看到了他们面临的一个巨大的问题,并且知道我可以在这个问题上做出很大的努力。这个问题困扰了射电天文学家几十年。

早期的采用令人印象深刻,并证实了这项创新对天文学的未来有多么重要。

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

虽然代码库上周才刚刚发布,但我在 2015 年完成了 Gausspy,并开始寻找下一个机器学习挑战。就在我离开博士后岗位的时候,我遇到了我的合作伙伴,并成立了 VEDA Data Solutions

我总是最喜欢从一个领域跳到另一个领域,解决长期存在的数据问题,做出颠覆性的发现,然后转向下一个最“不稳定”的领域。所以我的知识面很广。我带来了解决问题的最佳技术和能力,因为我从我看到的每个领域中获取了最佳的数据分析风格,并将其应用于其他没有考虑这些方式的领域。

我在 VEDA 的风格只是这个链条中的下一步,不仅跨越领域,还跨越部门和垂直领域。我很高兴能与科学界分享 Gausspy,并期待通过我们在 VEDA 的工作解决更多的问题和分享新的发现。

机器学习能预测贫困吗?

原文:https://towardsdatascience.com/can-machine-learning-predict-poverty-5b4847a2f6b4?source=collection_archive---------3-----------------------

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

世界银行在竞赛主办网站 drivendata.org 主办了贫困预测竞赛。比赛的链接是这里。我们决定在这个数据集上测试我们的机器学习技能。在 ParallelDots 的大多数常规工作都围绕三个主题:图像和视频的视觉分析、医疗保健人工智能和自然语言处理,这三个主题都是使用深度学习技术解决的。这个比赛是一个尝试新事物的机会,并建立我们的内部代码库来处理表格数据集,就像我们在比赛中一样。

我们希望从竞赛中获得的最终结果是:

  1. 尝试多种可能解决问题的机器学习模型。
  2. 尝试现有的 AutoML 方法。(AutoML 方法只需要你自己进行特征工程并找出管道的其余部分)
  3. 创建一个最佳模型来解决问题,而不需要集合太多的模型来提高分数。由于 AIaaS 是我们的日常工作,优化一个好的模型对我们来说更重要,因为集成很难作为服务部署。
  4. 建立一个代码库来解决未来的数据科学和机器学习问题。

分析数据集(不费吹灰之力)

在任何机器学习项目中,第一项任务是分析数据集并查看其属性。通过查看数据集,我们可以获得一些正确的信息:

  1. 有三个不同国家的数据文件。
  2. 所有的字段都是匿名和编码的,所以你不知道这些字段是什么意思。这将特定领域特性工程的可能性降低到零。
  3. 这三个国家的数据完全不同,因此需要建立三个模型,每个国家一个。

(快速)深入数据的一个方法是使用新的软件包 Pandas-Profiling(可以从 GitHub 这里下载)。这个包做了大量的初步分析,并将它们保存为漂亮的 HTML 文件,人们可以在浏览器上查看。我们对所有三个国家的数据进行了 Pandas-Profiling 分析,以了解数据类型、频率、相关性等。

在下图中可以看到其中一个国家的示例输出:

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

Pandas Profiling shows overview for the country C data

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

Feature Level Statistics details created by Pandas Profiling

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

Correlations amongst different features

我们可以得出的更多结论是:

  1. 大多数分类字段似乎都有一个默认值,这是该字段最常见的值。(例如,在上图中,您可以看到字段 AOSWkWKB 有一个默认值,它需要 80%以上的时间)
  2. 数据集是高度不平衡的,我们需要在训练时注意这一事实。

建立数据模型的两种方法

如果查看对象的数据类型,可以看到数据是分类值(可以从常量可枚举值中取一的属性)和数值(浮点数和整数)的混合。事实上,这就是世界银行提供的随机森林基准的建模方式,可在此处获得。然而,当你看数字量时,它们并不多,可能代表出生日期等数量。(如果你上过的 Coursera 课程,Dmitry 在处理匿名化数据集一节中谈到了类似的领域)。因此,我们想尝试的另一种方法是将所有字段视为分类属性。我们最终都尝试了。

数据不平衡

数据集的另一个重要属性是+ve 和-ve 类之间的不平衡(非贫困人口远远超过贫困人口)。对于国家 A,数据仍然是平衡的,但是对于 B 和 C,数据具有非常偏斜的分布。为了在这种扭曲的数据上训练模型,我们使用 Python 中的不平衡学习库尝试了不同的方法:

  1. 在倾斜的数据集上进行训练(效果不错,不太好)
  2. 在负类欠采样的数据集上训练(表现非常差,即使最好的机器学习模型也可以与该数据集的基线一样好地工作)
  3. 对+ve 类进行过采样(工作得相当好)
  4. 使用 SMOTE 算法的过采样(不如正常的过采样有效,主要是因为 SMOTE 算法不是真正为分类属性定义的)
  5. 使用 ADASYN 进行过采样(不如正常过采样有效)

预处理

数据集预处理如下:

  1. 所有分类特征都被转换成二元特征。
  2. 数值被归一化。测试了最大-最小和平均-标准差归一化。
  3. 家庭一级和个人一级的数据被合并(个人一级的数据为所有家庭的每个成员提供单独的数据)。对于个人和家庭数据中常见的属性,只保留了家庭一级的数据。家庭中的所有数字特征都取平均值(这可能不是最好的方法),并且所有分类值都聚合为家庭中最奇怪的值(例如,如果特征 X 在家庭中的值为 1,1,1,0,我们会将家庭的组合值取为 0)。原因是许多分类变量都有默认值,而我们期望奇数值有更多的信息。

我们尝试过的方法

我们现在讨论我们尝试过的多种方法。

  • 首先,我们来谈谈那些不起作用的事情:
  1. 我们认为分类字段的默认属性可能对建模没有用处。为了检查这一点,我们训练了具有和不具有默认属性的机器学习模型。没有输入缺省属性的模型比输入缺省值的模型表现更差。
  2. SMOTE 和 ADASYN 过采样并没有给出比正常过采样更好的结果。
  3. 两个阶段的机器学习,第一个阶段创建决策树以获得特征的重要性,另一个阶段训练最重要的特征。我们尝试这种技术没有任何收获。
  4. 尝试不同的方法来标准化数值数据并没有改变准确性。然而,非规范化数值属性的准确性较差。
  • 帮助我们提高分数的窍门:
  1. 数字和分类特征组合比所有分类属性更适合于训练算法。至少对决策树来说是这样。
  2. 为缺失数据选择默认值有助于我们提高准确性。我们开始时将所有缺失的值设为 0,但后来使用了更好的-999。
  3. 跨机器学习超参数的网格搜索让我们不费吹灰之力就在验证集上获得了 2–4%的提升。
  4. 一个强大的 AutoML 基线可以帮助我们很好地开始。
  • 我们想尝试但不能/没有/懒得编码的招数:
  1. 通过获取非默认分类值的笛卡尔乘积,然后选择重要特征来训练模型的特征工程。
  2. 通过以不同方式组合数字特征并对生成的特征进行特征选择的特征工程。
  3. 尝试多个模型的集合。我们之前设定的目标是得到一个好的模型,但最终还是训练了很多方法。我们可以把它们组合成一个整体,就像堆叠一样。

机器学习算法

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

我们使用的库:SKLearn、XGBOOST 和 TPOT

我们现在将讨论我们尝试过的机器学习方法。按时间顺序谈论事情,如我们尝试方法的顺序。请注意,自从我们第一次尝试以来,所有对我们有用的技巧都不存在了,我们一个一个地把它们包括进来。请看每一次试验的要点,了解当时的管道是什么。除非另有说明,所有使用的机器学习模型均来自 Scikit 学习库

  • 带有默认参数的常见疑点
  1. 我们开始用默认参数尝试常见的可疑情况。逻辑回归、SVM 和随机森林。我们还尝试了一个名为 CATBOOST 的新库,但是我们找不到很多关于它的超参数的文档,也不能很好地适应数据,所以决定用更著名的 XGBOOST 替换它。我们还了解 XGBOOST 超参数调优(我们知道我们必须在后面的阶段进行)。
  2. 第一次尝试将所有列建模为分类数据和不平衡数据集。
  3. 所有的模型都符合要求,并且在验证数据上给了我们比扔硬币更好的准确性。这告诉我们,数据提取管道是好的(没有明显的错误,但需要更多的微调)。
  4. 像竞争提供商提供的基线一样,随机森林和带有默认超参数的 XGBOOST 显示了良好的结果。
  5. LR 和 SVM 可以很好地模拟数据(不如 RF 和 XGBOOST,因为默认超参数的方差较小)。SVM (SKLearn SVC)也有很好的准确性,但它返回的概率在 SKLearn 中并不真正可用(我发现这是默认超参数的常见问题),这使我们放弃了 SVM,因为竞争是根据平均对数损失进行判断的,这需要额外的努力来确保概率数字是正确的。只是 SVC 收益的概率不完全是概率,而是某种分数。
  • TPOT: AutoML 做了一个很好的基线
  1. 仍然继续所有的特征都被认为是分类的,我们试图用一种叫做 TPOT 的自动方法来拟合基线。
  2. TPOT 使用遗传算法为手头的问题找出一个好的机器学习管道,以及与之一起使用的超参数。
  3. 这使我们在提交时在竞赛公共排行榜上名列前 100。
  4. TPOT 需要时间来找出管道,并在几个小时内对整个数据集进行收敛。

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

  • 神经网络可以用吗?有人知道神经网络吗?

我们对深度学习的热爱让我们跃跃欲试,试图用神经网络来解决这个问题。我们开始训练一个好的神经网络算法来解决这个问题。请注意,此时我们正在做实验,将所有列都视为分类。有很多分类变量,需要预测一个标签的问题是什么?文本分类。这是神经网络大放异彩的一个地方。然而,与文本不同,这个数据集没有序列的概念,所以我们决定使用文本分类中常见的神经网络,但不考虑顺序。那个算法就是 FastText 。我们编写了一个(深度)版本的快速文本,就像 keras 中的算法一样,在数据集上进行训练。我们训练神经网络的另一件事是过采样少数类,因为它不能很好地训练不平衡的数据。

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

FFNN Used

我们尝试使用最近提出的自归一化神经网络进行训练。这给了我们在验证集上的自由碰撞的准确性。

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

Self Normalized FFNN (SELU) we used

虽然当我们使用深度神经网络,特别是神经网络时,我们在验证集上获得了准确性。在 B 国,我们获得了最高的准确率(甚至比我们表现最好的模型还要好),这是因为我们使用了自标准化深度神经网络,结果并没有转化到排行榜上,我们一直得到低分(高对数损失)。

  • 改进 AutoML 基线并调整 XGBOOST

我们创建的 AutoML 基线仍然盯着我们的脸,因为我们所有的手工方法仍然更差。因此,我们决定改用经过测试的 XGBOOST 模型来提高分数。我们编写了一个数据管道,用于尝试我们在该部分开始时提到的不同技巧(成功/不成功),以及一个管道,用于在不同的超参数上进行网格搜索,并尝试 5 重交叉验证。

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

Grid Search Example for the single validation set

上面的技巧与网格搜索相结合,极大地提高了我们的分数,我们可以击败 0.2 logloss,然后也可以击败 0.9 logloss。我们尝试了另一个 TPOT AutoML,使用我们成功的技巧生成的数据集,但它只能占用排行榜上接近 0.2 logloss 的管道。所以最终 XGBOOST 模型被证明是最好的。当我们尝试对随机森林算法的参数进行网格搜索时,我们无法获得相同数量级的精度。

与公开比赛排行榜相比,我们在私人排行榜上的得分/排名略有下降。我们在 90%左右结束了比赛。

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

我们希望你喜欢这篇文章。请注册一个免费的平行账号开始你的 AI 之旅。你也可以在这里查看 PrallelDots AI API的演示。

点击阅读原文

神经网络能解决任何问题吗?

原文:https://towardsdatascience.com/can-neural-networks-really-learn-any-function-65e106617fc6?source=collection_archive---------0-----------------------

可视化通用逼近定理

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

Let’s see you try modeling that, neural network!

在你深度学习之旅的某个时候,你可能会遇到通用近似定理

具有单一层的前馈网络足以表示任何函数,但是该层可能大得不可行,并且可能无法正确地学习和概括。

——伊恩·古德菲勒, DLB

这是一个令人难以置信的说法。如果你认为大多数问题都可以归结为函数,那么这种说法意味着神经网络在理论上可以解决任何问题。如果人类智能可以用函数来建模(也许是非常复杂的函数),那么我们今天就有了复制人类智能的工具。神经网络可能是人工智能版的巴贝奇分析引擎(1822),而终结者需要一台 Macbook Pro,但仍然如此。也许 UAT 解释了为什么深度学习如此成功地解决了人工智能中的“难题”——图像识别、机器翻译、语音转文本等。

**TLDR;**我用视觉和经验向自己证明,使用单个隐藏层和 6 个神经元,UAT 适用于非平凡函数( x +x -x -1) 。我假装自己是一个神经网络,试图自己“学习”正确的权重。我还在代码中验证了这一点。

神经网络怎么可能模拟任何功能?

这个问题难倒了我很久,我在网上找不到很好的解释。大多数句子与等式的比率高于 0.57 的解释应该是这样的:

通过激活函数引入非线性允许我们逼近任何函数。很简单,真的。—埃隆·马斯克

所以非线性激活函数是秘方?我们真的可以通过将一系列 Sigmoid 激活链接在一起来模拟任何功能吗? ReLU 功能怎么样?肯定不是——里面有单词 linear !校正线性单位!

我最终发现了迈克尔·尼尔森的教程,它是如此之好,以至于几乎使这篇文章过时(我强烈建议你阅读它!),但现在让我们回到过去,假装迈克尔那天带着他的家人去了迪斯尼乐园,而不是写有史以来世界上最伟大的神经网络教程。谢谢你,迈克尔;)

手动执行梯度下降

我很早就意识到我不会赢得这场钻研数学证明的战斗,所以我决定采取一种实验性的方法。我去了德斯莫斯,开始将 ReLU 激活函数链接在一起,看看我是否能构建一些看起来有趣的东西。每次尝试后,我都调整我的函数,使它们看起来更像目标——听起来熟悉吗?

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

Left: target function Right: raw materials

我选择 x +x -x -1 作为我的目标函数。仅使用 ReLU max(0,x) *,*我反复尝试不同的 ReLU 组合,直到我有一个大致类似目标的输出。这是我用 3 个 ReLUs 的加权和得出的结果。

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

Left: 3 ReLU functions Right*: Weighted sum of the 3 ReLU functions*

还不错?左图显示了 ReLU 函数。右图显示了我的模型与目标相比的输出。你可以把每个 ReLU 函数想象成一个神经元。因此,组合 3 个 ReLU 函数就像训练一个由 3 个隐藏神经元组成的网络。这是我用来生成这些图表的方程式。

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

每个神经元的输出等于 ReLU 环绕加权输入 wx + b

我发现我可以通过改变偏差来左右移动 ReLU 函数,并通过改变权重来调整斜率。我将这 3 个函数组合成加权输入的最终和( Z ),这是大多数神经网络的标准做法。

Z 中的负号代表最后一层的权重,我将其设置为-1,以便沿 x 轴“翻转”图形,以匹配我们的凹形目标。在又玩了一会儿之后,我终于得出了下面的 7 个等式,这 7 个等式加在一起大约是 x +x -x -1。

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

所以至少在视觉上,用一个隐藏层和一些神经元来模拟非平凡函数是可能的。相当酷。

将我的体重硬编码到一个真实的网络中

这是一个用我的假权重和偏见初始化的神经网络图。如果你给这个网络一个类似于 x +x -x-1 的数据集,它应该能够近似得到-2 和 2 之间的输入的正确输出。

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

最后一个语句,*是-2 和 2 之间任何输入的近似正确输出,*是关键。通用逼近定理指出,对于在 特定范围 内的输入,具有 1 个隐层的神经网络可以逼近任何 连续 函数。如果函数跳跃或者有很大的间隙,我们就无法逼近它。此外,如果我们在 10 和 20 之间的输入上训练一个网络,我们不能肯定地说它是否将在 40 和 50 之间的输入上工作。

我的重量真的有用吗?

我想以编程的方式证明,当插入一个有一个隐藏层和 6 个神经元的基本神经网络时,我得出的权重实际上是有效的。然而,我没有训练网络来学习权重,而是用自己挑选的值替换了它的默认权重和偏差。下面的方法feed_forward() 采用输入向量(例如[-2,-1,0,1…])并使用我的权重输出预测向量。事情是这样的:

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

Zh,Zo: weighted inputs . Wh,Wo: weights. Bh,Bo: biases. Ah,Ao: activations

看那个!我是个天才。这正是我们想要的。但是如果我们的老板要求我们将范围从-2 扩大到 2 呢?如果她想要-5 比 5 呢?

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

x = np.arange(-5, 5, .1)

啊,不太好。但这实际上支持了我们早先的结论:一个具有一个隐藏层的神经网络可以逼近任何连续函数,但仅适用于特定范围内的输入。如果像我们一样,在-2 和 2 之间的输入上训练一个网络,那么它将对类似范围的输入工作良好,但你不能指望它在不重新训练模型或添加更多隐藏神经元的情况下推广到其他输入。

我的体重可以学吗?

现在我们知道 Brendan Fortuner 可以自己学习这些权重,但是具有 1 个隐藏层和 6 个神经元的真实世界神经网络是否也可以学习这些参数或导致相同结果的其他参数?让我们用 scikit-neuralnetwork 来测试这个理论。我们将设计一个网络,使其适用于回归问题,并将其配置为使用 ReLU、随机梯度下降和均方误差——通常的组合。

成功了!

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

以下是 Scikit 学到的重量。它们显然与我自己的不同,但数量级是相同的。

*hiddenLayerWeights = [
 [-1.5272, -1.0567, -0.2828, 1.0399, 0.1243, 2.2446]
]
finalLayerWeights = [
  [-2.2466],
  [ 1.0707],
  [-1.0643],
  [ 1.8229],
  [-0.4581],
  [ 2.9386]
]*

也许如果我把这篇博文重写 10 万遍,我会自己得出这些参数,但是现在我们只能推测。也许有一天,我会对我的赞成票求导,并朝着观点最大化的方向更新我的句子。

如果你喜欢阅读,请点击下面的【♥】按钮!

python 可以用于脸书聊天备份吗?当然可以!

原文:https://towardsdatascience.com/can-python-be-used-for-facebook-chat-backup-of-course-it-can-877226b57ac8?source=collection_archive---------14-----------------------

Web 抓取和 Scrapy 框架的简单演练

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

Photo by Glen Carrie on Unsplash

你好世界!!我们中的大多数人都会有这样的情况,我们必须滚动浏览我们在脸书的对话,以回忆事情,重温时刻或开怀大笑我们的旧对话,你经常这样做,希望有一个备份,这是给你的。在文章的最后,你可以用 csv 或 json 格式的结构化方式备份你的对话。

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

放弃

这篇文章不是为像 【鲍勃】 这样的人写的。抱歉 鲍勃 ,如果这以任何方式冒犯了你!!

为什么??怎么会??

在继续之前,我想回答几个你在阅读这篇文章时可能会想到的问题。

  1. 为什么要这么做!因为我们可以。😎
  2. 为什么我们不点击加载更多/向上滚动几个小时到达我们希望阅读的对话!,每次都要滚动对话,超级无聊。
  3. 为什么我们不能使用脸书的默认数据备份功能!,我们不能得到全部的内容,有一个上限。
  4. 为什么是 python!,它是一种广泛用于网络抓取的语言,拥有许多有用的库,如 scrapy,request。#还是我熟悉的那个!!😃
  5. 为什么刺儿头!,这是一个相当全面和易于使用的数据抓取库,当遇到困难时,它有一个活跃的社区帮助!

安装/设置

Python 安装:Windows 安装文件 zip 可以在这里找到,Ubuntu 运行命令

sudo apt-get 安装 python3

零碎安装:在 Windows 和 Ubuntu 上,运行下面的命令

pip 安装废料

事情是怎么做的!

如果你还没有进入如何刮是如何完成的,你可以跳到" 如何使用" 部分。

在深入到编码部分之前,在技术方面存在挑战,比如访问脸书数据、处理 javascript 和 ajax 调用。通过请求库重新创建相同的 ajax 调用是一件非常令人头疼的事情,但却失败得很惨。

然后,我试着用工具**【硒】**刮数据。如果您对此不熟悉,Selenium 可以用于自动化您在浏览器上的活动,允许您像人类一样控制和使用您的浏览器(如单击搜索框、输入关键字和单击搜索按钮)。

我的 Selenium 所做的是:进入 Facebook.com->登录->进入聊天列表并选择一个对话->向上滚动时开始抓取。脸书拒绝在几页之内从他们的服务器访问更多的数据!!是的,他们擅长检测机器人。

花了几个小时在谷歌上搜索后,找到了尝试“移动优化网站”的建议,它实际上是一个不使用任何 AJAX 的老派网站mobile.facebook.com。终于!!能够使用 scrapy 不间断地获取数据。

入门指南

在你开始刮之前,你必须建立一个新的刮项目。输入您想要存储代码并运行的目录

scrapy startproject facebook

这将创建一个包含以下内容的facebook目录:

facebook/
    scrapy.cfg            *# deploy configuration file* facebook/             *# project's Python module, you'll import your code from here*
        __init__.py items.py          *# project items definition file* middlewares.py    *# project middlewares file* pipelines.py      *# project pipelines file* settings.py       *# project settings file* spiders/          *# a directory where you'll later put your spiders*
            __init__.py

如果你没有得到,不要担心发生了什么,我们不会担心他们中的大多数人,我们唯一的改变是写一个 蜘蛛 抓取内容,并改变ROBOTSTXT _ observe = False**在 settings.py 文件中脸书不允许僵尸程序登录。你可以在这里了解更多关于 robots.txt

让我们建造我们的蜘蛛

在 spiders 目录下创建一个 python 文件,然后导入 scrapy、pandas 和 FormRequest,我们将使用它们来提供登录凭证。

这里 fb_text 是我们的蜘蛛的名字,我们可以在我们的蜘蛛目录下写任意数量的蜘蛛,它们可能服务于不同的目的,在我们的例子中,我们可以写一个用于抓取帖子和评论等。每个蜘蛛都应该有自己独特的名字。

然后我们通过终端获取登录凭证,在那里我们将运行我们的蜘蛛

scrapy crawl fb_text -a email=“FB 用户电子邮件”-a password=“FB 用户密码”

在我们将凭证提供给 FormRequest 之后,它将在start _ URLs***’ https://mbasic . Facebook . com '***中填写表单( user_email and password) ,并返回主页。

让我们给我们的蜘蛛增加一些超能力吧

完成了结构的定义,是时候给我们的蜘蛛一些超能力了。一个是它应该能够通过网页抓取内容,另一个是抓取内容/数据。

请求函数将向回调函数发送响应,在我们的例子中,我们到达消息页面,然后获取我们对话的人及其链接。从那份名单中,我们会刮出一个。

以上是蜘蛛的核心部分,它获取实体之间的对话,并把它写在一个 csv 文件中。完整的蜘蛛文件可以在这里找到。

为了简单和容易理解,items.py 不用于存储数据。

如何使用

如果您跳过了前一部分,请确保克隆这个存储库。浏览项目的顶级目录,并使用以下内容启动 scrapy:

scrapy crawl fb -a email="EMAILTOLOGIN" -a password="PASSWORDTOLOGIN"

这将给出最近的 10 个对话,从中选择要废弃的对话,机器人/蜘蛛将抓取对话,直到该对话中的最后一个文本,并返回一个 csv 文件,其中包含列->名称,文本,日期。看看下面的例子。

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

路到此为止。

Github 回购

在准备中

数据是解决任何 ml/ai 问题的来源,而不是每次我们拥有一个结构良好的数据。这就是网络抓取派上用场的地方,用它我们可以从网站上抓取/获取数据。关于基础网页抓取的教程将会在未来发布,请务必关注和支持。

我们到此结束,希望我已经对 word2vec 嵌入做了一些介绍。在这里检查其他作品

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

哈哈,如果你这么认为,我们就在同一页上。下面我们来连线Linkedin脸书

我们能复制大脑吗?

原文:https://towardsdatascience.com/can-we-copy-the-brain-9ddbff5e0dde?source=collection_archive---------3-----------------------

IEEE Spectrum 特别报告综述:我们能复制大脑吗?

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

本月的 IEEE Spectrum 有一个关于合成大脑的故事。在这篇文章中,我将回顾这个故事,并对探索的现状进行评论:在合成系统中复制人脑。这篇文章是关于神经科学,神经形态学,人工神经网络,深度学习,生物和合成中的计算硬件,以及所有这些如何在创造人类水平或高于人类水平的合成大脑的人类大挑战中走到一起。

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

为什么我们要复制大脑 : 我们之所以要这样做,是因为我们想创造出能替我们工作的智能机器。为了做我们的工作,机器将不得不生活在我们的环境中,拥有与我们相似的感官,并能够完成同样的任务。它还不止于此:在大多数任务中,机器能比我们做得更多更好,就像我们比其他生命形式做得更好一样。我们希望他们做我们做不到的事情,把我们能做的事情做得更好。这叫做进步,我们需要这样做来绕过生物进化,加快生物进化的速度。这篇文章很好地总结了这将是什么,以及机器将为我们做什么。更多评论见下文 PS1 部分。关于工作,请参见 PS3。

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

未来,机器会借用我们大脑的最佳招数 : 人脑是我们所知的最高效的计算机器之一。从这个意义上说,它是已知宇宙(人类已知的)中最好的“大脑”。什么是大脑?它是一台允许我们在自己的环境中生活的电脑。人生是什么?哦,好吧,也许现在,让我们只说我们的生活致力于繁衍后代,确保我们的后代最好的,促进下一代和他们的成功,保护所有这一切发生的最佳环境(或者我们现在?).

今天,我们人类受自己大脑的启发,正试图建造人造大脑。而慢慢的,近几年(网上更多文章和评论!),人工神经网络和深度学习已经慢慢侵蚀了计算机和人类能力之间的很多差距。只是 不可避免 它们会变得越来越像一个人,因为我们实际上是带着那个目标在建造它们!我们希望他们为我们做事,比如驾驶我们的汽车,提供客户服务,做一个完美的数字助理,阅读你的思想、预测你的需求。也渗透到世界上的每一个仪器和传感器中,所以它们可以更好地帮助我们在正确的时间获得正确的信息,有时甚至不需要我们去要求。

但是建造一个合成大脑并不意味着我们需要复制我们自己的大脑。事实上,这根本不是我们的目标,我们的目标是做一个更好的!我们的大脑是由细胞和生物组织构成的,我们的合成大脑是由硅和电线构成的。这些媒体的物理性质并不相同,因此我们只能从大脑算法中获得灵感,一步一步地构建更好更大的合成硬件。我们已经在梦想能够自己创建计算架构的神经网络。与神经网络训练其权重的方式相同,它也可以训练消除所有这一切中的最后一次人工输入:学习创建神经网络模型定义

即使我们想限制自己创造一个我们大脑的克隆体,它仍然会迅速进化超出我们的能力,因为建造它的目标之一是不断学习新知识和改善行为。因此,不可避免的是,我们最终会拥有一个比我们更好的大脑,好得我们甚至无法想象。也许就像我们的大脑被比作昆虫的大脑一样——甚至更多。一个生物可以变得多么聪明和有知识是没有限制的。

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

作为计算机的大脑:数学不好,其他都好 :我们人类研究神经网络已经很久了。我们也已经研究我们的大脑很长时间了。但是我们仍然不知道如何通过观察一个场景来预测将要发生的事情,这是我们生活中每时每刻都在做的事情。我们仍然不知道我们如何学习新概念,我们如何将它们添加到我们已经知道的东西中,我们如何利用过去预测未来,以及我们如何识别复杂的时空数据,例如识别现实世界中的行为。见本摘要。我们也不知道如何最好地与真实或模拟的世界互动,或者我们如何学习与世界互动。

我们可能不知道这一切。但是我们正在取得进展。我们从学习识别物体(和脸,和道路场景)开始。然后我们学习了分类和创建序列(包括演讲、文本理解、语言翻译、图像到文本的翻译、图像到图像的翻译等等)。我们还在尝试学习如何在没有大量标记数据的情况下进行学习(无监督学习)。我们开始玩电子游戏,先是简单的,然后是难的,现在是非常复杂的。人工智能算法将了解我们世界的力学和物理学只是时间问题。

我们真的很擅长这个,在所有这些任务中比人类做得更好——或者一些!我们不打算停止,直到我们有机器人可以为我们做普通的任务:烹饪,清洁,洗碗,叠衣服,与我们说话(Alexa,Siri,Cortana 等),理解我们的感觉和情绪,以及更多与人类智力和能力相关的任务!但是我们如何到达那里呢?我们非常擅长让神经网络对事物进行分类,现在我们需要它们进行预测。学习长序列事件,对长序列事件进行分类。由于有无限多的可能事件,我们无法用例子训练一个人工智能,我们没有所有的例子,所以我们需要它自己学习。关于我们的大脑如何学习做到这一点的最佳理论是通过不断预测未来,因此它知道忽略所有不重要的和以前见过的事件,但同时知道一些事件是否是新的。无监督和自我监督学习将是重要的组成部分。更多在此。

还要注意的是,这种深度学习的进步大部分不是来自神经科学或心理学,就像制造好电池不是来自炼金术一样。

本文还提到了计算硬件,指出传统计算机可能不如某些神经形态计算机方法好。我们在这里评论这个话题。肯定会有更高效的硬件出现,这些硬件可能能够运行最新和最伟大的深度学习算法,例如我们在这里的工作。而且可能有神经形态的成分,比如尖峰网络,稀疏数据的异步通信,但不是这一天。如今,神经形态硬件尚未运行任何类似于深度学习算法的巨大成功,例如手机上的谷歌 / 百度、手机上的谷歌文本翻译,或者云端图像的标记。这些是我们今天取得的切实成果,他们使用深度学习,他们在标记数据集上使用反向传播,他们使用传统的数字硬件,很快将成为专用硬件

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

智能机器需要向新大脑皮层学习什么 : 这是一个的时刻。杰夫·霍金斯写了一本非常激动人心的书,就在十年前左右。它极大地鼓舞了我所有的学生、我们的电子实验室和我自己,去研究合成大脑,并从我们所知道的和可以测量的人脑中获取灵感。

但从那以后,人工神经网络和深度学习抢了他的风头。当然,我们需要学会重新布线。当然,我们正在学习一种*稀疏表示。*所有深度神经网络都是这样做的——参见 PS2。当然,我们需要学习在环境中表演(化身),我们已经通过学习玩视频游戏驾驶汽车做到了这一点。

但是当然,它没有说如何处理现实世界的任务,因为 Numenta 仍然停留在它独特的商业模式中,在这种模式中,它既不能帮助自己,也不能帮助社区。最好是倾听社区的声音,分享它的成功,资助聪明人和创业公司。也许杰夫确实认为他一个人就能解决这一切,而且比任何人都强。我们都是这种自我中心行为的受害者…

我必须补充一点,我同意杰夫对以分类为中心的深度学习算法无法处理更复杂任务的沮丧。我们已经在这里写了这个。但是正如你在这个链接中看到的,我们都在这个领域工作,很快就会有很大的进步,就像在分类任务中一样。请放心!杰夫说:“当我考虑未来时,我担心我们的目标不够高”。如果杰夫和努门塔加入,我们会更快更好,并重新定位我们的目标。

AI 设计师在老鼠大脑中寻找灵感 : 这里我们来了解一下大脑/认知/智力所有问题的罪魁祸首:研究大脑。我花了 10 多年时间试图建立更好的神经科学仪器,目标是帮助神经科学家了解人类如何感知视觉世界。参见第 16 页上的内容。这是在人们仍然用 1 根或几根导线刺激神经元的时候,并且在我最感兴趣的主题上只取得了有限的进展:理解神经网络是如何连接的,对信息进行编码,以及构建真实世界的更高级表示。我为什么关心这个?因为知道大脑是如何做到这些的,可以让我们更快地构建一个合成大脑,因为我们会首先应用生物学的原理,而不是试图通过试验和错误来弄清楚事情。请记住,无论如何,生物学是在数十亿年的进化中,通过反复试验才达到这一步的…

随着时间的推移,我对大脑研究和神经科学的进展越来越失望,因为:

  • 我们没有合适的仪器来研究小型或中型神经网络规模的大脑,这一领域的大多数科学建议都是在我们现有的基础上进行小规模的渐进改进,而不是系统地建立一套新的神经科学工具和仪器
  • 许多同事仍然认为,脉冲神经网络有一些特殊之处,没有模型能够捕捉到真正的生物大脑,或者生物神经元的细节是神奇的,永远无法在人工神经元中复制
  • 由于缺乏能够记录真实神经网络中所有可能的输入和输出的工具,研究内层神经元的表示仍然是不可能的。绘制连接图会有所帮助,但至少在某种程度上,必须知道每个神经元应该做什么
  • 为了帮助解决这个问题,我们提出了复杂的光基因记录仪器,可以研究现实生活条件下(行为动物)大脑的时空演变,但很少有研究人员想使用它们,摆脱电极神经记录的潮流

使用人工神经网络可以超越这些限制,同时保持对生物学原理的不同程度的忠诚。人工神经网络可以在计算机上模拟设计,可以运行得非常快,并且可以在今天用于实际任务。*这基本上是深度学习在过去 5-10 年里一直在做的事情。*这些系统也是完全可观察的:我们确切地知道神经元如何工作,它们给出什么样的反应,以及在所有条件下输入是什么。我们也完全知道他们是如何被训练以特定的方式表演的。

但问题是:遵循什么生物学原理是重要的?虽然我们没有这个问题的答案,但我们可以肯定地得出结论,如果人工神经网络能够解决实际任务,它将是重要的,不管它是否完美地模仿了生物对应部分。研究 1 毫米厚的大脑皮层,并希望我们能够了解大脑是如何工作和学习的,这是站不住脚的。我们可能会得到很多数据和细节,但所有这些都可以被丢弃,因为唯一潜在的工作原理是重要的。例如:我们不需要知道每一个分子或每一滴水在溪流中的位置,我们只需要知道它的平均流向和溪流的平均大小。为了测试这些潜在的模型,我们可以使用我们的想法或模拟,或者更好的是,设计一个可以为我们设计合成系统的系统。我们不需要对一块组织的每个方面进行逆向工程,因为它与其底层算法和操作原理几乎没有关联。同样,我们不需要知道我们的耳朵和声带是如何工作的,就可以用无线手机向全世界发送声音,超越这个星球上任何生物实体的能力。飞机机翼也是如此。

文章说:“AI 是而不是建立在类似大脑中的“神经网络”上?他们使用过度简化的神经元模型。差异很多,而且很重要”。这种说法已经被多次提出,声称生物学有一些我们不知道的特殊属性,不知道它我们就不能取得任何进展。这显然是没有意义的,因为我们在不知道所有细节的情况下已经取得了很多进展,事实上这可能证明细节不重要。没有任何证据表明,如果我们向深度学习的简单人工神经元添加一些“细节”,系统可以提高性能。没有证据表明,因为所有的神经形态系统都在玩具模型和数据上运行,并且不能够扩展到深度学习的成功。所以至今无法比较。也许有一天会是这样,但我向你保证,你的“细节”可以简单地编码为更多的神经元和更多的层,或者简单的重新布线。

阅读 Spectrum 上的这篇文章让我想起在过去的 5-10 年里情况并没有改变,我们仍然不知道大脑有多少功能,我们仍然没有工具来研究这个问题。有很多来自 T2 的信息来支持这种说法,在美国的 T4 和欧洲的 T7 都有两个关于研究大脑的大型项目,但都非常有限。我并不否定这个领域,我只是在这里陈述我的观察。我希望一些聪明的人来发明新的工具,就像我已经尝试过的,现在可能已经失败了。但请让我们停止用几根电线戳大脑,并继续声称脑电图有一天会解决我们所有的问题。如果我们能在神经科学领域取得一些进展,我会是一个非常高兴的人,但我认为目前的做事方式、基础研究、目标和工具必须重新设定和设计。

也许这就是为什么在这篇 IEEE Spectrum 文章中,所有神经科学家都说要达到人类水平的人工智能需要数百年,而所有人工智能研究人员都说需要 20-50 年。因为在神经科学中,到目前为止,在解释神经网络方面几乎没有进展,而在人工智能/深度学习中,进展每天都在发生。我称之为人工智能/神经科学鸿沟,它只会越来越大。

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

神经形态芯片注定要进行深度学习——或者默默无闻 我们现在就可以建造一个人工大脑 :这个我们已经在这篇文章中广泛讨论过了。

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

为什么鼠脑机器人如此擅长导航不熟悉的地形 : 注意我们在这里实现了一个类似的系统。它所要做的就是记住某个位置的景色。因为导航是任何在环境中移动的物体的基本需求,所以从某个角度来看,它可以被实现为空间的表示。知道自己在哪里,就意味着回忆起某个景色。

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

能否量化机器意识? 意识只是世界和自己的模型。喜欢从另一个人的角度看自己,但完全意识到自己的感觉和感官。任何具有足够计算能力的大脑都将能够做到这一点,无论是在硅中还是在生物学中。随着我们构建越来越复杂的人工神经网络,我们看到了同样的模式:最终,少数神经元对各种“体验”进行编码。现在他们可能会对对象和类进行编码,但他们也可以对奖励和惩罚进行编码,并且很快会对动作和延期奖励等长序列进行编码。这些与人类的经历没有什么不同,甚至就神经科学所能告诉我们的而言。

我不相信意识是人类的特权,任何足够大的人造大脑都能够创造一个自身和环境的模型。事实上,我们已经论证过这必须能够预测环境中发生的事情以及我们行动的结果。我对这篇文章评价不高,我更希望看到作者用他们的智慧来帮助我们创建有用的系统,而不是那些关于哲学和任何人都可以谈论的事情的猜想。

最让我困扰的固着是:*人类是特殊的,*人类的大脑是特殊的,没有什么会永远比较,没有什么能更好。这都是胡说八道。在进化史上,我们看到这种情况一直在发生。我们已经从单细胞生物进化成我们现在的样子,尽管我们更有能力适应其他生命形式,但这并不意味着我们将永远如此,或者我们有一种特殊的属性。我们的 DNA 基本上和这个星球上的许多其他生物是一样的!我们一直在进步,我们很幸运现在处于领先地位,但这并不意味着会持续下去。不管有没有你,进化都在继续。

而我们在这个星球上的进化就是使用的生物材料没有人说我们不能从岩石和金属中,或者从火和烟中创造智慧。事实上,它可能已经发生了,但我们有限的感官可能阻止我们看到它。认为人类在任何方面都是特殊的想法都不是很开明,事实上,如果你环顾四周,你会看到人类在未来的某个时候会像现在的蟑螂一样。

后手稿

PS1:为什么我们要复制大脑,第二部分:许多人认为人脑和人类是特殊的,但如果你看看进化树,我们可以看到我们唯一的优势是我们在金字塔的顶端。但没别的了。其他较低的生命形式与我们有很多共同之处:当我们面对更高的智慧时,我们会有同样的命运。我们可能被更高的智慧拜访,或者我们可能创造它,我认为这将在很短的时间内发生。正如 Jürgen Schmidhuber 在文章中所说,一旦我们创造出比我们更有智慧的东西,这种智慧很可能会想要探索和理解我们生活的宇宙,不受生物躯体和(相对)较短时间框架的限制。

但在真正的超人 AI 出现之前,我们将尝试在计算机程序中复制许多其他人类能力,如绘画、制作艺术、绘画、雕刻、制作音乐等。虽然开始时合成艺术可能只和人类一样好,但它最终会进化到更高的形式,也许是我们永远无法理解的形式。

关于这个话题的一部有趣的电影是超越。我喜欢这部电影中的人工智能为了更大的利益与人类融合的方式。

PS2: 如果一个神经元有 10000 个输入,但只有 100 个是活跃的,这是一个稀疏信号。如果你有一个 100 个输入都活跃的神经元,这并不稀疏,但交流的数据是相同的,因此系统的效率。

如果你担心机器会抢走我们的工作,不要担心!在一个机器做我们所有工作的世界里,我们将不再需要工作,我们可以只是玩耍和娱乐!我们也不想要那些机器将会做的工作,因为我们正试图摆脱危险和无聊的工作,花更多的时间像《T4》中的人类一样结束自己的一生

更多信息:

想了解更多你在这里读到的内容:请看这段视频。

关于作者

我在硬件和软件方面都有将近 20 年的神经网络经验(一个罕见的组合)。在这里看关于我:媒介网页学者LinkedIn 等等…

我们能不能不要再用单词云了

原文:https://towardsdatascience.com/can-we-please-stop-using-word-clouds-eca2bbda7b9d?source=collection_archive---------2-----------------------

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

自然语言处理中有很多有趣的、更科学的问题,但我今天在这里只是和大家分享一个观点。

字云是一流的丑陋。

有时候感觉就像人们把他们漂亮的大数据放进一个单词云生成器,把它粘在一个布里斯托尔板上,然后在科学展上迟到两个小时。

我刚刚关闭了本来会是一篇好文章的浏览器,因为他们巨大的文字云刚刚开始对我大喊大叫。“数据科学”、“机器学习”、“内容分析”!我已经读了标题,我看到了标签…那张图片真的有任何附加值吗?它向读者传达了什么重要的信息吗?

这就是为什么我对他们有如此强烈的感觉。语言的意义不仅仅存在于关键词中。

名词、形容词、动词重要。并不意味着停止单词限定词介词删除。

如果你必须重读最后两句话,你可能会意识到除了关键词之外,保留停用词(如“the”、“of”、“should”)也是必要的。比如的句子“生存还是毁灭”,虽然有些古旧,但是 完全是由停止词 组成的。

从文章 URL 的搜索引擎优化(SEO)角度来看,这可能是一个更好的停用词移除出错的例子:

  • https://www。 …。/伴着失聪长大→/伴着失聪长大
  • /听力受损的世界→/听力受损的世界
  • /什么是听力损失→/什么是听力损失

(来源: 网络媒体大师 )

或者,这里有一些昨天的热门推文,没有停用词:

  • “很遗憾听到马尔科姆·杨,优秀的球员.”
  • “马克·斯通男孩”
  • “亚历克斯·崔贝克应得人物乡村游戏节目主持人。”

如果人类有这些我们实际上经常使用却没有注意到的奇怪的习惯用语会怎么样呢?

  • “他打了…指甲…头”
  • “……果壳”
  • “她今天真的……很开心”

停用字词删除减少了处理时间。它使语言分析的效率大大提高(对计算机来说!).但是,如果你曾经生成过一个词云,提取了一个完全不相关的关键词(比如来自马克·斯通的词云,其中有“男孩”),你可能会同意关键词频率或词袋不能是一个独立的分析。

语言数据可视化需要有一些分类的成分(见:任何好的机器学习)。

我们都为此感到内疚。我做过一两个单词云。但是我们不再需要文字云了。我们比那更好!我想介绍 3 个我觉得更有趣(也更有知识性)的选择。)而不是这些美化的标签。

桑基图

UX 设计师罗宾·维斯用一年半的时间绘制了她的哭泣模式。她想更好地理解自己的情绪。通过创建桑基图,她能够显示她对每种叫声的分类,以观察趋势。

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

A Classification Diagram of Cries

以下是桑基图的工作原理。他们想象从一套价值观到另一套价值观的流动。它们非常适用于分级多元分类数据。连接被称为链接,就像一个树形结构,被连接的东西被称为节点(来源: Google Charts )。

韦斯发现,分手和恋爱是她 63%哭泣的根源。她根据原因对她的哭声进行了分类。在分手的情况下,她确定了不忠,损失,试图让它工作,并管理他人的反应。从那以后,她用形容词来提炼她为什么会哭背后的情感。在这里阅读全文

这是一种有机的、令人难以置信的独特方式来展示关键词分析,只需要一个小数据集,想必也不需要什么花哨的机器学习。接受吧,情感分析。

平行集

并行集也显示数据流。来自英国的自由软件开发者杰森·戴维斯创造了一个泰坦尼克号幸存者的可视化图像。去这里看互动版。 他的代码也在这里。

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

乍一看似乎很吓人(也很催眠),但下面是这张图所暗示的。

  1. 女性幸存者的相对比例远远大于男性幸存者。(第 1 行,蓝色)
  2. 船上大约一半的孩子活了下来。(第二排最左边)
  3. 一眼就可以看出,这些数据与疏散过程中“妇女和儿童优先”的方法相关。

戴维斯说如何阅读图表:

“对于每个维度(幸存者、性别、年龄和阶级),每个可能的类别都会显示一个水平条。条形的宽度表示该类别匹配的绝对数量。

“从第一维度(幸存)开始,它的每一个类别都与下一维度的若干个类别相连,显示出那个类别是如何被细分的。这种细分递归重复,产生一个“丝带”树。

因此,平行集提供了一种方法,可以同时可视化不同种类的数据,并快速从中得出结论。如果你有混合了人口统计信息和语言信息的数据,那么很容易回答“谁说了什么”。比“没人说一个字云什么的”有趣一点。

聚类图

我发现这个提交给联邦通信委员会的关于网络中立性的意见的惊人的可视化。旧金山一家名为 Quid 的数据分析公司对近 25 万份提交材料进行了主题建模。这不是一个小壮举。你可能需要一点深度学习。还有资金。和来自科幻的天才。

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

简而言之,每个集群都有一个不同的主题,响应的比例以灰色显示。更紧凑的集群争议更少。更接近其他聚类的聚类显示主题之间的相关性。如上所述,外围集群对整个对话来说不太重要,但它们被认为更独特。

话虽如此,但如果能更深入地了解这种方法,看看是如何偷工减料的,那就更好了。作为局外人,它看起来像是一种无监督的机器学习算法,可能是 K-means,这通常意味着将观察值划分为指定数量的簇。或者,如果这是某种贝叶斯分类,我也不会感到惊讶,这种分类对语言数据很有效。这里看起来它最大的优点也是它最大的缺点——这是一个非常固执己见的分析。

不是每个人都能做机器学习。请放心,我一点也不想忽视这样一个事实:从数据收集到一幅漂亮的图片,需要数周的数据清理、数据透视表和对一切事物的质疑。但是数据科学中的想法是一样的。将您的数据分类。画趋势线。如果有必要,可以手动操作。做一些假设,建议一些关联,或者根本不做分析。

不要让数据自己说话。聚集你的云。

我们能预测烂番茄收视率吗?

原文:https://towardsdatascience.com/can-we-predict-rotten-tomatoes-ratings-8b5f5b7d7eff?source=collection_archive---------13-----------------------

什么时候一部电影其实是烂的还是新鲜的?

像 IMDb 和烂番茄这样的电影评论网站已经成为许多影迷生活的一部分。

电影观众可以通过查看一个数字(电影评级在 0%到 100%之间)轻松确定观看什么电影并比较某些电影。

但是……你有没有想过这些评级是如何确定的?

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

Picture Source: http://you-deserve-this.blogspot.com/2012/08/imdb-top-250-vs-rotten-tomatoes.html

一些票房大片和“经典”在这些网站上的电影评级相当低,这并不罕见。这让我们想知道你在网上看到的电影评论实际上是否反映了大众的观点?

看看 IMDb 和烂番茄,我们发现这两个电影聚合网站都没有说明他们的电影评级百分比是如何计算的。

IMDb 的帮助页面:

我们采用 IMDb 注册用户的所有个人评分,并使用它们来计算单个评分。我们不使用算术平均值(即所有投票的总和除以投票数),尽管我们在投票细分页面上显示了平均值和平均投票数;相反,显示在标题页面上的评级是一个加权平均值。

烂番茄《关于页:

Tomatometer 评分代表专业评论家对给定电影或电视节目的正面评价的百分比。在电影或电视节目收到至少五条评论后,就可以计算出电影或电视节目的自动评分。

由爆米花桶表示的观众分数是对电影或电视节目给予正面评价的所有用户的百分比。

最初,我们感兴趣的是了解 IMDb 加权平均的特征,但是他们的使用条件禁止数据抓取。因此,为了我们的项目,我们与烂番茄合作。

构建电影评分模型

我们最感兴趣的是回答两个关键问题。

  1. 在计算收视率时,烂番茄是否更强调电影评论的某些方面?
  2. 烂番茄的收视率和它的观众评分有关系吗?

在我们探索是否可以创建我们自己的评分机制的过程中,我们采取了几个步骤。

阶段 1:定义数据集

我们手动选择了大约 150 部烂番茄观众评分在 0-100%之间的电影。我们的目标是让电影收视率在四分位数之间平均分布。下面展示了落入每个四分位数范围的电影的分布。为了保持一致性,我们将 0–25%的电影作为第一个四分位数,26–50%作为第二个四分位数,51–75%作为第三个四分位数,最后 76–100%作为第四个四分位数。

数据集中观众和观众评分的分布:观察值

我们在建立电影列表时注意到的一件事是,烂番茄电影的收视率很少低于 25%。因此,您可以看到,虽然收视率在前三个四分位数的电影数量相对一致,但在收视率前四分位数和前四分位数的电影数量之间存在明显差异。

我们认为,缺乏收视率很低的电影是因为收视率是由大量烂番茄用户产生的,他们没有权力或资格对电影进行评级。任何人都可以去烂番茄给任何电影打分。因此,分数可能会被那些仅仅因为喜欢这部电影而给出很高评级的人扭曲。或者,因为这些评级是由所有用户产生的,它们更准确地描绘了公众的意见,人们通常倾向于喜欢大多数电影,并给它们更高的评级。

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

Number of Movies for each Quartile for Tomatometer and Audience Scores

有趣的是,尽管我们的数据集是根据观众评分建立的,但我们注意到观众评分的四分位数之间的差异程度较低。

我们认为这是因为 Tomatometer 评级是由合法的、经认可的电影和电视评论家制作的。这些评论家的职业是比较和评价电影,因此,他们能够确定在电影业中什么被认为是“坏”或“好”的电影。因为他们在电影评级方面更有技巧,我们认为这些评论家可能对电影持有更强烈的观点,并倾向于根据他们的观点对电影进行很高或很低的评级。

接下来,我们对这部电影的哪些信息最感兴趣?

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

Screenshots from Titanic on Rotten Tomatoes

  • 观众评分。这个分数“是所有给电影…正面评价的用户的百分比,” 3.5/5 星及以上是正面的。任何烂番茄用户都可以给出观众评分,而不仅仅是电影或电视评论家。
  • 观众点评。书面评论
    附有任何烂番茄用户给出的星级评定。
  • 烂番茄电影页面网址。我们跟踪 URL 更多是为了日常管理,以防我们想要返回页面收集更多信息。

阶段 2:收集数据

因为访问烂番茄的 API 需要批准,所以我们转向使用 BeautifulSoup 来构建我们的数据集。

在收集数据的过程中有两个主要步骤。

  1. 网络抓取:我们迭代开发了几个 Python 类,帮助我们获得前面提到的正确的电影属性。我们类中最重要的部分之一是有一个分页参数,在这里我们可以指定我们想要多少页观众评论。
  2. 迭代地将数据写入输出文件:JSON 输出文件被迭代地写入,以防止脚本可能崩溃并清除先前擦除的数据。这在初始测试中特别有用,可以帮助我们调试和简化流程。
class TextReviews():def __init__(self, url, limit=1):
  self.page = AudienceReviews(url)
  self.limit = limit
  self.reviews = []# helper function to page for reviews, outputs as an array of reviews
 def getReviews(self):
  for i in range(self.limit):
   self.reviews += self.page.getReviews()
   next_page = self.page.nextPage()if next_page:
    self.page = AudienceReviews(next_page)
   else:
    break# return ''.join(self.reviews)
  return self.reviews

[*score.py*](https://github.com/estherelle/fresh-or-rotten/blob/master/score.py)节选,我们用来刮烂番茄的观众评论。

我们为我们的电影列表和每个相应的 URL 创建了一个. csv 文件。我们从每部电影中提取所需的数据,转换成 JSON 数据格式,如左图所示。我们还将每部电影添加到其相应的分级四分位数中。

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

Dataframe of Movies after Loading JSON

然后,我们将数据加载到 pandas 数据框架中,如上所示。我们将包含每部电影的观众评论的字符串列表转换为一个字符串。然后,我们通过执行基本的文本预处理(如小写、标点符号删除和停用词删除)来清理数据。除此之外,我们还做了词汇化,而不是词干化,因为它将单词转换成它的词根,而不是去掉后缀。

阶段 3:创建分类器

现在,我们需要创建分类器,将观众评论字符串转换为评级(为了提高准确性,我们选择按四分位数 1、2、3、4 对其进行评级,而不是分配精确的评级)。

我们的目标是建立一个分类器,预测给定电影的评级落在哪个点范围内——或者哪个四分位数。对于我们的初始数据集,我们试图从收视率似乎均匀分布的电影列表中抓取。我们还将观众评论的页数限制在 20 页,这样我们就可以最大限度地减少流行电影和不太流行电影的观众评论数量之间的差异。

为了使矢量器、转换器和分类器更容易使用,我们使用了一个 scikit-learn 管道类,其行为类似于一个复合分类器。使用普通的 TF IDF 和朴素贝叶斯分类器,我们得到了 28%的准确率——非常低。我们意识到这是因为我们的分类不是二元的,而是多类的,这意味着它使用了多个相互排斥的标签。因此,我们切换到 OneVsRest 分类器,仍然使用 TF IDF。我们的准确度结果要好得多。

分类器准确度

TOMATOMETER

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

正如我们的图表所示,我们的分类器在预测电影时最准确,这些电影将落入电影评分的第二和第三个四分位数。

收视率

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

正如我们的图表所示,我们的分类器最准确地预测了将落入观众评级第一四分位数的电影。

我们认为观众评论总能准确预测收视率,这让我们对这些结果感到非常惊讶。因此,我们已经证实了我们的假设,即这些电影评级并不反映一般公众的实际意见。这让我们相信,也许烂番茄在收视率中包含了其他他们没有透露的因素。

TOMATOMETER 与观众评分

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

对于第一个和第四个四分位数,我们的分类器对收视率产生了更准确的预测。然而,对于第二和第三个四分位数,我们的分类器更准确地预测了 Tomatometer 评级。我们的分类器向我们表明,使用烂番茄的观众评论,我们无法始终准确地预测这些电影的观众评级或自动评分。因此,很明显,在决定烂番茄网站上显示的评分时,还有其他因素需要考虑。

摘要

从我们的研究中,我们能够确定烂番茄上的电影评分,以及其他网站上的评分,并没有准确地显示公众对这部电影的看法。尽管我们预计观众评分与观众评论的制作评分不匹配,但我们惊讶地发现,观众评分也没有反映观众评论。

这是一个非常有趣的尝试,看看我们如何根据公众评论建立自己的电影评级机制。观众影评中的一些值得注意的词显示在下面的词云中:

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

Word Cloud Generated from Review Text Input

我们建议电影观众警惕他们在电影网站上看到的电影评级,如烂番茄和 IMDb。这些分数中包含的信息不能准确反映人们对这部电影的真实想法。由于各种原因,这些分数可能会有偏差,并且可能会受到烂番茄的影响,从而影响利润和收视率。我们希望继续这项研究,以发现这些分数中包含的元素是什么,以及它们是否准确反映了人口的意见。

如果有兴趣,可以在这里查看我们的代码。我们的存储库包含运行烂番茄刮刀和分析所需的所有源代码。

【2018 年秋季 DIS 大数据计算分析最终项目

在媒体上关注我们:罗宾·罗斯萨尼卡·巴帕特埃斯特·l .

我们能拯救 DataViz 吗?还是现在只是仪表盘?

原文:https://towardsdatascience.com/can-we-save-dataviz-or-is-it-just-dashboards-now-f55b6097172b?source=collection_archive---------9-----------------------

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

Not this.

2012 年是令人兴奋的一年。我离开了科学,试图将平面设计这一爱好转化为职业。我没有意识到的是我的时机是多么幸运。数据可视化在公众眼中获得了极大的吸引力:为了应对大数据,报纸、品牌代理和企业都想加入到第一波数据浪潮的顶峰信息图表中。

对信息图表的需求,以及更普遍的数据可视化,为怪人提供了一个独特的机会:一个科学和艺术相遇的地方;编程、分析和设计方面的技能可能都有用——并带来有报酬的、不无聊的工作。

我很幸运,也许是有天赋,现在能够在这个奇怪的十字路口生活一段时间了。但我担心它变小了。信息海报的时尚肯定已经结束(尽管有限的需求依然存在)。记者们仍在制作图表(有时非常有创意),但有多少媒体能真正资助这项工作呢?细读求职公告板,现在所有与可视化相关的东西都是业务分析——也就是仪表盘。

正如 Elijah Meeks 和其他人所指出的,这种工作是合法的,但也是极端保守的:主要是线条、栅栏,也许还有一个燃料表。这与“数据艺术”相去甚远(在学术界之外,原始的 ggplot2 图表仍然是完全可以接受的)。自然,被雇佣来做这项工作的是工程师;因为它主要是技术性的。就是前端开发,数据角力,管道,数据库。

就目前而言,这一切都很好。但是我想知道,设计在哪里呢?独特技能的交集在哪里?

当然,这对企业来说不是问题:他们没有义务雇佣我做我想做的工作。但对于数据 viz 领域来说,这可能是一个问题,如果它真的存在的话。如果我们只有工程和一些 D3 库,我们终究没有一个独特的领域。我们所拥有的,也许是工程和设计的短暂融合,这种融合再次分化。设计师,甚至是“信息设计师”大多会回到他们在“DataViz”出现之前的小口袋里。

与此非常相关的问题,也是以利亚提出的问题,是当前人们在数据世界中会发生什么。当他们 30 多岁的时候,他们会去哪里,他们厌倦了做繁重的工作(有点像代码猴子、分析师和初级设计师)。没有明显的晋升途径,除非在极少数情况下,报社或设计室在 DataViz 雇佣了很多人,并且需要一个部门主管。因此,你让工程类型的人跳过去称自己为数据科学家,或者最终成为管理人员。设计总是有一个狭窄的晋升通道,紧随其后的是设计师:艺术/创意总监。但是一个也懂数据的创意总监有什么作用呢?因此,当有经验的从业者试图走出战壕时,我们又有了分歧:他们必须在别处找到一个更传统的家。

我希望数据可视化,或者说数据设计,成为一个东西。我希望它成为一条可行的职业道路——即使是一个小领域。我想要这个有几个原因。

第一个:我很自私,想要选择更有趣的工作——尽管我从来没有很难找到工作。

两个:对于那些坐在艺术和科学以及技术性的分界线上的人来说,已经没有足够多的职业轨迹了(建筑是其中之一;也是一种艰难的谋生方式)。

三个:数据在我们的世界里真的很重要,交流数据也很重要;这不仅仅是一项工程任务。

:我担心大企业最终会意识到实时仪表盘没那么有用。也许它们都只是一时的流行。那么谁还需要 DataViz 呢?让人工智能告诉我们该做什么。

我错过了什么吗?DataViz 将何去何从?

我们能用数据来巩固民主吗?

原文:https://towardsdatascience.com/can-we-use-data-to-fortify-a-democracy-adb019d35ba9?source=collection_archive---------9-----------------------

作者安迪·克拉科夫

无论你的政治信仰是什么,我想我们都同意,现在很难——也许比十年或二十年前更难——与不同立场的人就政治进行坦诚、富有成效的辩论。

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

如今,政治对话似乎很容易演变成党派之争,很快变得具有煽动性,站在过道对面的其他人会引用人们可能会质疑其真实性的信息。然而,我想到,我可能提出来支持我的论点的看似客观的信息可能同样会被驳回,被贴上不可靠的标签,其来源的偏见是显而易见的。

这让我开始思考,当我们不都在参考同一个剧本时,民主是否真的能有效运作。

如果我们不能消化大致相同的信息来帮助我们做出公共决策,我们能像一个国家一样,一起走过同样的路吗?

这些天来,我们似乎越来越有可能从量身定制的来源获取信息,以反映我们的个人兴趣和观点,无论是从符合我们政治倾向的有线新闻频道、脸书、推特、博客圈还是其他地方。毕竟,现在获取定制信息是如此容易,而以前我们的媒体选择更加有限。结果,我们最终消化了不同的信息,并相互交谈,而不是相互交谈。

上个世纪我们赖以为决策提供基础的中间立场不再像过去那样稳固。例如,我们曾经为了提供一个共同的脚本并作为更有意义的对话和辩论的催化剂而求助的新闻媒体现在被贴上了假新闻的标签,败坏了整个新闻领域的名声。

在这个新的信息环境中,我一直想知道数据能发挥什么作用?也就是说,纯粹的事实——比如来自人口普查局(如贫困率)、州教育部(如阅读能力得分)或劳工统计局(如失业率)等政府来源的事实——能为我们集体提供一些共同的工作基础吗?

这个前提听起来很天真,好像我是某种不可救药的浪漫主义者。我当然认识到,有些人可能有理由怀疑是否存在纯粹的客观性,即使有数据也是如此。例如,我们中的一些人可能会质疑政府数据的来源,或者我们可能会质疑信使——倡导组织、学术研究等。—提供对政府调查结果的二次分析。不过,我不禁想到,公共数据可能是我们可以用来弥合信息桥梁的少数来源之一,而这座桥梁曾经是我们不同观点的交汇点。

如果我们能够找到与事实的共同点,例如关于我们社区状况的当地数据,我们可以利用这些信息来帮助讨论如何解决当今的紧迫问题,如阿片类药物滥用、犯罪、就业和工资增长等。

这给事实和数据带来了很大的压力,特别是因为我们这些在社会部门工作的人,我认为,在利用数字提升公共话语方面取得了可疑的成功。当然,有数据帮助左右公众舆论、授权社区动员行为改变或教育我们政策选择的例子,但这些成功的故事似乎都太罕见了。

然而,尽管在使用数据实现社会影响方面缺乏具体的成功,但更多的社区和组织显然正在使用数据参与作为推动变革的战略。因此,随着我们这些社会部门的人越来越依赖数据作为教育和说服的手段,我们可以共同做些什么来确保这些数据具有说服力?根据我在过去六个月里与公共部门的一系列人员的交谈——研究人员、流行病学家、倡导组织、政府机构的领导、公民技术专家——以下是我听到的关于数据如何产生更大影响的信息。

1.我们需要将数据与讲故事结合起来

我们的大脑对故事感兴趣,毫无疑问,当信息被呈现为关于受影响个人的个人的辛酸故事,而不是关于趋势和差异的匿名汇总数据时,我们大多数人会更加注意。我想这可以归结为进化生物学。如果你看看人类历史的轨迹,你会发现我们大部分时间都生活在不到 100 人的小部落和社会单位中,所以我们可能很难从认知上理解几十万人的城市或拥有几百万居民的多样化国家的概念。

俄勒冈大学的心理学教授保罗·斯洛维奇注意到了这一现象,他观察到,“如果我看着质量,我永远不会行动。”他解释道:“我们的认知和感知系统似乎旨在让我们对环境中的微小变化保持敏感,这可能会降低我们检测和应对大变化的能力。”他最后指出,“行为理论和数据证实了敏锐的人类行为观察者早已知道的东西。人类生命的数字表示不一定传达这些生命的重要性。很多时候,这些数字代表的是干巴巴的统计数据,“眼泪已经流干的人类”"

所以,毫无疑问,我们需要故事来帮助我们追求的目标公开化。但是我们也不应该离数据太远。毕竟,我们肯定需要关于问题的程度和性质的数据来帮助我们创造持久、可行的解决方案。

在数据和故事之间取得平衡绝非易事。我们中的一些人只是用数字来思考。例如,当我在加州卫生保健基金会(California Health Care Foundation)帮助卫生部门更好地与数据沟通时,一位流行病学家观察到,“对数据人员来说,最难的事情是说英语,第二难的事情是用英语写作。”当然,我们中的其他人通过故事的语言进行交流,并没有很好地掌握如何用数据进行论证。因此,我们在历史上将两者一分为二。我们所呈现的要么是数据,要么是故事,但不是两者都混合在一起。

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

幸运的是,如今人们越来越关注数据故事,这对我们试图用数据影响他人是个好兆头。但是意识到需要用数据来讲述故事是不够的。就我所见,我们大多缺乏用数据讲故事的集体技能和经验;这不是我们习惯使用的肌肉。在这方面,我们有太多的东西要学习,这是我的组织 Velir 想要帮助解决的问题,包括为我们的客户和其他专注于通过数据进行社会变革的人举办会议,并与客户合作,帮助他们培训数据故事。了解其他人在做什么也是很棒的,可以帮助我们社会部门更好地用数据讲述故事。

2.在发布数据可视化之前,我们需要站在终端用户的角度考虑问题。

当我们发布数据发现时,我们通常不会考虑最终用户希望如何消化我们提供的信息并与之互动。他们会在公开会议上查看这些数据吗?当他们第一次接触数据时,他们会在电脑或手机上吗?他们希望在线查看信息还是通过打印的情况说明书查看信息?

很多时候,我们根本没有这类问题的答案。我们花费了如此多的精力去寻找、分析和可视化数据,以至于我们几乎没有时间去思考如何最好地展示和包装这些发现。当我们了解到即使是少量的设计思维——也就是站在最终用户的立场上,根据他们的反馈对原型进行迭代——也能对创建有用的数据工具大有帮助时,我们的情况会好得多。

例如,我记得我在 LiveStories 时所做的工作,帮助加州各县交流阿片类药物流行的数据。我对如何最好地呈现这些信息做了一个假设——也就是说,作为长篇新闻,观众可以垂直滚动浏览一张由图表和地图组成的报告卡。然而,我遇到的一个在加州农村地区负责阿片类药物滥用工作的人向我指出,这种演示在她分享发现的场所——面对面的社区论坛或通过对县监事会的现场演示——根本不会有效。

她的需求要求以另一种方式包装信息——例如,以一系列幻灯片和打印的情况说明书的形式,人们可以在会议结束后随身携带。仅仅接触这个人并在喝咖啡时进行对话就有助于提供如此有价值的见解,我相信如果我们在构建之前留出一点时间来了解最终用户希望如何与数据交互,我们都会从我们的数据项目中受益。

3.我们需要将数据导向解决方案

我们从政府来源获得的大部分数据都暴露了不足之处,而且从经常被负面框定的发现中采取行动肯定不会令人鼓舞。要求政府机构收集和报告不太关注问题的数据可能有点过分。那是一项艰巨的任务。毕竟,我们以这种方式收集数据是有充分理由的,例如,衡量那些生活在贫困中的人,而不是那些生活在贫困中的人。这些行政数据通常是以这些负面的方式收集的,因为政府需要知道他们必须向谁提供服务。

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

尽管如此,过多地关注数据来框定问题,而不是解决方案,可能会削弱我们。一位在县政府工作的人曾对我说,数据来得很快,就像她说的那样——也就是说,她可以在短短 15 分钟的数据分析中提出几十个问题。然而,她指出,如果她将这些发现分享给那些在紧张的预算下努力满足现有需求的过度劳累的非营利组织,根据她的数据分析,解决更广泛需求的想法将会打击非营利组织的士气。

数据不应该打击我们的士气。

那么,如果我们不能轻易地重新构建收集和报告负面数据的方式,我们能做些什么呢?如今,人们越来越关注编目解决方案。例如,解决方案新闻网络维护着一个故事追踪器,它现在运行着大约 2900 个故事,在这些故事中,记者报道了社会问题的解决方案。这意味着,即使数据总是将问题框定为问题,我们也可以更容易地找到解决方案——甚至可能是来自与我们的概况相匹配的社区的解决方案,并且是积极的异常值(也就是说,在度量上比预期表现得更好)。

当我们采取将数据与解决方案相结合的方法时,我们将处于一个更好的位置来激励和指导行动,而不是主要关注通过数据来暴露缺陷。

4.我们都需要教练。

作为 Velir 在发展中国家开展的医疗保健项目的一部分,一位拥有多年医疗保健数据工作经验的著名学者向我观察到,当个人看到与他们相关的数据时,例如他们所服务的社区的健康结果,用他的话说,他们可能会有“矛盾的感觉”。客观地说,他们理解这些发现,但是很难从等式中去除他们的激情和偏好。因此需要教练。这个人设想的是公正的个人,可以为那些生活在这些数字中的人解开数据发现;帮助我们看到意义以及具体要关注什么;引导我们找到解决方案。

“事实是,当我们被与我们相关的数据所冲突时,我们可能不在最佳行动位置,但如果我们有教练可以陪我们一起走下去,我们可能会发现从问题走向解决方案会更容易。”

这种数据教练的想法肯定不容易广泛实施。已经有一些公正的教练帮助社区理解关于他们的数据的例子。我们应该试着从这些例子中积累经验,看看是否有经济有效的方法来实施数据训练计划。例如,一个县的卫生部门主任可以指导另一个县的卫生部门主任,而另一个卫生部门主任可以指导她吗?

5.如果你建造了它,他们就会来(但前提是你要传达你所建造的东西!)

当我们启动一个数据可视化/讲故事的项目时,我们通常会松一口气,因为它已经完成了。但是真的做到了吗?没有一种神奇的方式可以让一个形象简单地出现在某人的脑海中,这意味着我们必须做艰苦的(并且经常被最小化的)工作来传播我们发布的内容。

沟通计划可以包括社交媒体、新闻策略、电子邮件推广、面对面演示或其他组织和激励社区人员的方式,当然,这可能意味着与您所在组织中能够帮助传播信息的信息大使合作。然后,你可能需要在持续几个月而不是几天的活动中重复这些步骤。

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

把注意力放在这上面似乎很费时间,但是除非我们花时间,否则我们就冒着构建惊人的可视化效果而不被注意的风险。如果他们没有被注意到,我们如何根据这些明智的信息采取行动呢?只有当你主动推出信息并加以利用时,你才会开始看到天平的指针从仅供参考的一方倾斜到行动的一方,甚至是我们可以根据调查结果认真讨论政策方向的一方。

所有这些都不容易实现,但如果数据以枯燥的方式呈现,无法激励我们采取行动,那么这些数据又有什么用呢?如今,我们对数据寄予了很大的希望——这是正确的——但我们必须学会如何说服数据并与之沟通,而不仅仅是被动地展示发现。

我想了很多华盛顿这些天是如何制定政策的。在大多数情况下,我不知道我们的医疗保健系统或税法的这种重大变化是否对我们的集体有利。我有我的偏见,这通常是由我选择消化的信息决定的。问题是,当我们没有一个集体的机会来评估,使用我们都同意的度量标准时,政策就被匆忙实施了。

结果,我们只能靠自己的手段来帮助引导理解,而这通常意味着要听政客们的花言巧语,这些花言巧语表现为尖声辱骂和对政策的消极或积极后果的夸张讨论。这是形成能对我们和我们的孩子产生持久影响的有效政策的方法吗?

我们的民主还能承受多少没有事实根据的政治争论?

我们显然需要更好地将数据整合到我们的决策中。我想我们很多人都会同意这一点。但是我们也需要知道如何更好地利用这些数据来为公众辩论提供信息。

通过我在 Velir 的工作,我尽最大努力将我们从客户和亲密合作伙伴那里学到的这些智慧结晶铭记于心,确保它们是 Velir 与我们的客户一起工作的前沿和核心,我们的客户对实现数据的影响力非常感兴趣。

我肯定还有其他我没有在上面提到的步骤。你从数据参与前沿学到了什么吗?我很想听听你想到了什么。请在 andy.krackov@velir.com 给我发一封短信。另外,请在下面添加您的评论或发微博给我们, @Velir

你现在能听到我吗?远场声音

原文:https://towardsdatascience.com/can-you-hear-me-now-far-field-voice-475298ae1fd3?source=collection_archive---------1-----------------------

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

在我之前的帖子中,我提出了一个案例,即成功的人工智能公司将通过围绕数据创造网络效应或开发专有算法,在“计算语音”价值链中开发一条护城河。在这篇文章中,我将研究价值链的第一步,语音信号的最初拾取,并找出创业公司可以成功的机会。

放大声音

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

语音控制是一种与硬件和相关服务交互的直观方法。这比连接键盘和鼠标、敲击屏幕键盘或点击遥控器要自然得多。

随着我们看到越来越多的语音激活设备,了解设备如何能够监听和理解语音命令是非常重要的。这个过程中有许多组件,但我们将研究的两个组件是麦克风阵列(硬件)和深度学习架构(软件),它们使这样一个复杂的系统工作。

硬件|麦克风阵列

语音识别系统通常使用多个麦克风来降低混响和噪声的影响。每一代 iPhone 的麦克风数量都在增加,从第一代 iPhone 的一个增加到 iPhone 5 和 6S 的四个。

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

甚至像亚马逊 Echo 这样的智能扬声器设备也使用了多达 7 个麦克风。实际上,回声麦克风是以六边形布局排列的,每个顶点一个麦克风,中间一个麦克风。每个麦克风接收信号之间的延迟使设备能够识别声音的来源,并消除来自其他方向的噪声。这种现象被称为波束形成。

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

软件|深度学习

深度学习在语音拾取方面发挥了基础性作用。识别口语的能力是几年前建立的,但深度神经网络(DNNs)等基于学习的技术已经允许语言处理在许多测试案例中达到或超过人类的表现。

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

AI Progress Measurement | Electronic Frontier Foundation: https://www.eff.org/ai/metrics

只有硬件和语音识别算法的强大结合才能带来产品的成功。对于糟糕的麦克风,无论采用多智能的深度学习模型,识别精度都会下降。另一方面,拥有次优机器学习的优秀麦克风并不能产生必要的准确性。

远场拾音的问题

虽然最先进的语音识别系统在麦克风靠近说话的情况下表现相当好,但在麦克风远离用户的情况下性能会下降。

想象一个常见的场景,一个人在室内,对着亚马逊回声说话。

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

回声捕获的音频将受到以下因素的影响:1)扬声器对着房间墙壁的声音,2)来自外部的背景噪声,3)来自设备扬声器的声学回声,以及 4)对着房间墙壁的输出音频。

这些因素都会导致低信噪比(SNR)、房间混响以及语音和噪声的未知方向,所有这些都是需要解决的重要挑战。随着用户远离产品的麦克风,语音级别会降低,而背景噪音级别保持不变。除了噪音和混响,其他挑战包括缺乏大规模远场数据和未经探索的高效深度学习架构。底线是,在这些远场场景中,语音识别和人类表现之间仍然存在巨大的差距。

远场拾音是如何工作的?

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

语音识别系统通常使用单独的模块来执行语音识别。

  1. 音频输入被发送到声学传感器,
  2. 其将声音信号转换成电子信号,然后转换成数字信号。
  3. 然后,它进入一个数字信号处理芯片,在那里用固定的嵌入式算法进行语音增强。这些嵌入式算法执行传统的信号处理技术:声源定位(定位声音的方向)和波束形成(抑制背景噪声)。
  4. 得到的增强信号进入用于语音识别的传统声学模型。

麦克风技术旨在用基于深度学习的可训练算法取代固定的嵌入式算法。

固定算法和组件的缺点是,它们无法适应建立在它们之上的可训练机器学习系统的其余部分。当你把一个可训练的深度学习系统放在一组固定的芯片上时,深度学习模型必须学习嵌入式算法正在做什么,撤销它,并在它的基础上执行自己的计算。这使远场语音识别变得复杂,因为音频输入已经失真,并且在 1)将信号从声音转换为电信号再转换为数字信号,然后 2)预处理的每个步骤中,您都会丢失信息。

谷歌一直处于这项研究的前沿,展示了使用原始波形作为声学传感器的输出,从而避免了当今系统内置芯片所做的任何预处理(即定位、波束形成)。

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

Google’s neural network adaptive beamforming model architecture

实质上,谷歌希望将这一过程中的第 3 步和第 4 步结合起来。这个想法是给麦克风阵列更多的自由度来优化基于数据的算法。对于声学传感器,你只希望它能够正确检测,不会增加太多的噪声或失真,并且系统的其余部分可以使用可训练的深度学习架构来检索其信息。

创业的机会

通常,固定算法是基于试探法为一般情况开发的,而基于深度学习的算法是用实际数据本身为特定任务训练的。当你有一个基于深度学习的系统时,由嵌入算法的固定芯片组成的麦克风可能不是你想要的。

在这种情况下,任何语音识别应用的理想硬件设置都应该在这些固定的嵌入式芯片上进行最少的数字信号处理。它应该接受原始波形,并在其上建立复杂的深度学习算法,这些算法既可训练又灵活。

接下来的问题就变成了,你是否可以收集大量的训练数据,为那个特定的硬件训练一个深度学习算法,或者使用其他深度学习技术来补偿声学传感器的差异。如今的问题是,深度学习语音识别模型是在不同硬件上收集的数十万小时的数据上训练的。

为了与拥有完整设计能力的大型科技巨头竞争,初创公司需要寻找机会通过数据、软件或自动化来破坏价值链。

硬件领域有着巨大的潜力,因为复杂的深度学习技术必须部署在高度定制的廉价硬件上。

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

the battle of voice-enabled hardware, @ziwang ’s toys

所有现有的主要数据集都将得到利用,这些模型的使用范围很广。为尚不存在的数据集构建基础设施来收集、注释和训练新模型的公司将会成功。

就拿像 Vesper 这样的公司来说。他们正在通过利用压电材料的物理特性来改变麦克风的设计方式(我将在未来的帖子中解释底层技术)。因此,他们的麦克风技术不会像传统麦克风那样受到灰尘和环境退化的影响,因此他们的麦克风质量更高,从而提供更高的保真度结果,作为传输的信号进行进一步处理。

生产级识别的关键是数据的广泛使用、数据扩充的先进技术和模型架构。

固定算法和组件的弱点在于,它们无法适应建立在它们之上的可训练机器学习系统。但是,如果你的端到端模型像上面讨论的那样,深度学习模型实际上可以通过将它们与总体目标相关联来学习应该提取哪些信息特征,这就是语音识别中解码的字符或单词。

自动化将包括个性化设备和持续学习。

例如,利用从特定用户收集的数据,可以优化整个管道以更好地了解该用户。

但是个性化仍然带来许多问题。在部署了良好的初始系统之后,随着行为的改变,深度学习算法需要基于使用的持续训练。

无论是为用户提高性能(例如,使用他们的语言、语音等),都需要优秀的硬件和智能软件。)或提供用户特定的解决方案(例如,具有个性化语音、个性等的助理。).个性化的硬件和深度学习系统可以在这两个领域带来竞争优势。

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

百度最近发布了他们的深度语音 2 系统,走在了这项研究的前沿。该系统完全由深度神经网络构建而成,仅用半小时的音频就可以学习一个人声音的细微差别,并可以学习模仿数百种不同的说话者。该系统赋予机器新的语音多样性,并将极大地为语音识别带来个性化和亲切感。

对于初创公司来说,一个有趣的个性化机会是率先将他们的语音识别系统应用于其他语言并进行营销。虽然像百度这样的公司可能会在不久的将来将 Deep Voice 2 改编成中文这样的语言,但这样的公司今天忽略了这个问题。

个性化的另一个有趣的领域和垂直利基可能是可访问性。例如,艾娃正在使用语音识别软件为有听力障碍的人将对话翻译成文本。同样,土耳其一家名为 WeWalk 的有趣初创公司正在为视障人士制造智能拐杖,并利用细微差别通信来实现他们的语音技术。

个性化和持续学习将加速语音优先革命,允许机器复制类似人类的交互,平滑尴尬的对话,并实现定制。

流利。总部位于蒙特利尔的 AI 公司正在软件和个性化方面进行改进。这家公司的解决方案试图直接从音频输入到自然语言处理,中间没有语音到文本的步骤,直接从口头命令和上下文中提取意图。通过这样做,他们的意图识别系统变得真正个性化,从用户依赖的口音、变化的上下文和声学行为中学习,以识别不同环境影响下的常用短语。

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

通过与原始设备制造商和供应商的进一步合作,Fluent。人工智能解决方案能够对收集的数据进行更多的控制。通过这种合作关系,流利。与传统技术相比,人工智能可以为原始设备制造商提供更快、更具成本效益的市场之路,以及更广泛的覆盖范围。

综上所述,如果一家规模较小、反应敏捷的公司专注于数据、软件和自动化这三个关键领域中的一个或多个,那么它就有很大的发展空间。最终,能够拥有整个语音堆栈的创业公司——包括通过硬件收集的数据和软件中可训练的深度学习算法——将具有竞争优势,在语音识别和语言理解方面提供更好的性能。

顶尖人工智能研究者对“模拟假说”的坦诚思考

原文:https://towardsdatascience.com/candid-thoughts-on-the-simulation-hypothesis-from-top-ai-researchers-c3e2cdea3ffa?source=collection_archive---------3-----------------------

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

我在奶头的一个黑暗的房间里,在一个之前的派对上,探究人工智能科学家的一些最深层的意图和信念。

  1. 我们生活在模拟世界里吗?
  2. 如果单方面选择,他们会摧毁文明和我们已知的宇宙吗?
  3. 他们计划在多大程度上确保我们的未来是“完全令人敬畏的”?

关于我们是否在模拟中的极端分歧

在自我介绍为 Quasar(模拟他们宇宙的研究生)后,我问他们在这个很难测试的命题上给出的概率是多少:“你生活在一个模拟中。”

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

如你所见,它们到处都是。 **7 名研究人员有这样或那样的最大信心(0-1%或 99-100%),只有 9 人认为可能性在 10%到 90%之间。**如果这个命题更容易检验,将会有一些重大的下注机会。

一名人工智能研究人员似乎完全准备好扼杀我们的宇宙

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

When asked why they answered: “Stare into the abyss, and the cocaine stares back.”

如果没有苦难,如果外面有比我们更聪明的生命,我们文明的终结就不会那么悲惨,但我坚定地站在地球生命延续的阵营里。接受调查的 26 名研究人员中有 25 名似乎同意我的观点。

4 名研究人员最初对上述问题的回答是肯定的。2 pretty 立刻承认他们是在开玩笑。一名研究人员承认,他只是出于病态的好奇心想要毁灭我们的宇宙,我不认为这种好奇心会发展到真的去按一个红色的大按钮。但是剩下的研究员似乎很认真。当被问及原因时,他们回答道:“凝视深渊,可卡因也会凝视你。”

一个数据点是很少的证据。但是考虑到 1%的精神病患病率,这些结果与预期相符(从调查犯罪人口中推断)。我仍然非常担心在未来的世界里会有更多的人可以单方面毁灭文明。熬过古巴导弹危机和其他类似的危机已经够难的了。

肯尼迪总统说,他认为导弹危机导致核战争的可能性为 30%到 50%。

对声明的反应:如果 AGI 是在一个“强大的技术安全领域”发展起来的,那么完全令人敬畏的结果的几率会高出 20%。(期待 10^ 35 吸毒生活)

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

Note: there are many points they may disagree with.

我发现令人稍感欣慰的是,26 名参与者中有 6 名完全感受到了我,并且已经开始行动了。这比我预期的要高一点,但我使用了非常宽泛的安全工作定义:

强大的投资看起来像是超过 30%的顶级研究人员时间投入到诸如健壮性、人工监督、可解释性、安全性、安全探索、对齐等问题上。

之所以选择这个论点,是因为它避免了典型框架问题的两大陷阱。这是积极的,因为末日警告通常与宗教狂热者和阴谋论者的模式相匹配。它没有触及在没有干预的情况下“完全棒极了”的几率是多少,因为这是有争议的,与决策无关。我希望得到不止一个“嗯。没错。我有很多事情要考虑”。我很想看到对这个协议更有说服力的版本的研究。

最后

这些科学家因幽默而获得报酬,所以这是一个明显的混淆因素。这个反面角色的经历已经向你和你在 dystopiaroom.com的朋友们公开了。如果你想复制这些结果,你应该知道我用这个星形投影仪作为情绪照明。我在推特上承诺,如果有更多的人经历了 dystopiaroom.com 事件,我会更新这个分析。

感谢丽娃·泰兹、亚历克斯·马茨纳、汤姆·布朗、达拉戈·巴克利、 瑞安·马茨纳 、克里斯汀·桑福德、埃里克·马茨纳和伊桑·马茨纳审阅本协议草案。

用同音异义词和单词向量来扫“不能”的兴

原文:https://towardsdatascience.com/canning-the-cant-fun-with-homonyms-and-word-vectors-179ab58c76d2?source=collection_archive---------8-----------------------

XYZ 派高级 NLU 工程师亚历山大·维考特伦。

作为一家专门从事自然语言理解的公司,单词嵌入是我们技术的组成部分之一。我们的 NLU 模型需要能够正确“理解”所写或所说的内容。一种方法是使用意图分类模型:当用户输入一个句子时,该模型预测一个意图。因此,准确的意图分类对于交互的顺利进行至关重要。虽然我们的模型是我们所知道的最准确的,但有时分类会出错,偶尔这会导致有趣的对话。最近,一个基于我们的 NLU 模型的聊天机器人未能识别用户的诙谐讽刺,并以下面的被动-主动方式做出回应:

用户:谢谢你没有回答,天才。机器人:不客气!

这句话被误认为是“谢谢”的意思,对此机器人非常礼貌地给出了正确的回答。我们发现的许多错误分类都可以追溯到我们使用的单词嵌入和它们被创建的方式。

有几种训练单词嵌入的方法,但大多数方法的共同点是,单词嵌入的整个概念都是基于这样一种想法:词汇语义是分布式的:意思相似的单词出现在相似的上下文中,相似的上下文包含相似的单词。

“从一个人交的朋友就可以知道他说了什么!”,约翰·鲁珀特·弗斯— 语言学理论概要

但这真的足够了吗?只看上下文就能得到一个词的全部意思吗?语境是什么意思?哪里出了问题?通过在这里分享这些问题,我希望人类语言的奇妙复杂性能给你带来和给我一样的惊奇感。

将上下文放入单词中。

简单地说,经典的 word2vec 单词嵌入将单词表示为它们可能出现的上下文的平均值。一个词出现的“语境”可以在不同的层面上描述。你可以谈论一个单词的句法环境。例如,一些单词有不同的词性,因此也有不同的意思,这取决于它们出现的句法环境。

我非常努力地工作,因为我热爱我的工作。

第一次出现的 work 是动词,表示动作。另一方面,第二次出现是一个名词,表示一项活动。虽然我们可以同意这两个词在许多方面是相似的——它们是同音异义词,有着相同的词根作品——但它们在意思上是不同的。然而,它们将有一个单一的向量表示,总结了这些单词和它们可能出现的上下文。
让我们看另一个例子:

厨房地板上有咖啡*。请给我来一杯咖啡。*

在这里, coffee 的两个出现都是名词,但是它们的含义因出现的上下文而不同。在第一句话中, coffee 指代一种物质,它是一个物质名词,而在第二句话中, coffee 指代一杯黑金。我们怎么知道?句法环境。不定限定词“a”的出现表明咖啡的出现是可数的,因此我们自动推断应该有一个杯子。然而,你不能对所有单词都这样做。无论你把哪个限定词放在前面,沙子都是不可数的。所以,是的,语义是分布式的,从某种意义上说,单词的意义取决于它们出现的上下文,单词不能出现在特定的上下文中,因为它们的意义不允许它出现。

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

同样,语义语境也可以“改变”一个单词的意思。看看下面的例子。

低音低音演奏了低音*。*

bass 的两个实例都是名词,前面都有相同的限定词,但它们显然有不同的意思。我们面对的是一条渴望音乐的鱼。我们怎么知道?嗯,只有贝司能弹,贝司不能。注意,尽管句法语境(更具体地说是词序和主客体关系)有助于我们解释低音的每次出现,但主要是 played 的语义与低音的语义相互作用,这有助于我们消除含义的歧义。在下面的例子中,我们切换了主客体关系和词序,但由于 played 的存在,我们仍然得到了相同的两种低音解释:

贝斯演奏贝斯*。(等等…也许贝司终究是可以弹的…做鱼的戏码!)*

最后,我们有**语用语境。**语用学指的是语言的使用,很多人性在这里发挥作用。人类使用语言的目的多种多样,不仅是为了传递思想和信息,也是为了让别人做事情。人类使用一种语言的不同变体来显示他们在社会群体中的包容性或遵守某些社会规则。与我们这里的讨论最相关的是寄存器的作用。在不同的社会背景下,我们倾向于使用不同的语言。差异可能在发音上(我不知道我不知道),也可能在我们选择使用的词汇上。我们可以请朋友给我们拿杯咖啡(在杯子里),但我们很可能会请同事给我们拿杯咖啡。完全相同的语法,相同的语义,甚至相同的意图(我懒得去买咖啡,所以我希望你不要明确告诉你该做什么,因为我重视我们的关系和我们生活的社会规则,规定我们要有礼貌,因此使用问题而不是命令来保持良好的关系)。不过,背景不同。不是语言学,而是语用学。

你能像罐头工人一样装罐头吗?

原因之一(还有很多,单词嵌入很牛逼!)为什么单词嵌入如此受欢迎是因为它们允许我们计算单词相似度。如上所述,相似的单词可以出现在相似的上下文中,所以假设单词向量代表单词可以出现的平均上下文,我们期望相似的单词具有相似的单词向量。然而,就像上下文一样,单词相似性可以指代多个概念。
单词“相似”到底是什么意思?单词可以在很多方面相似:它们可以有相同的拼写 ( 地址地址)或者相同或相似的发音 ( 两个)。话可以相似的是有同一个 : 有同一个根,但是没有,它有另一个根。记得呼吸,别搞混了。

单词也可以有相同的词性 : work 和 sing 相似之处在于都是动词,work 和 song 相似之处在于都是名词(而 work 和 work 相似之处在于都有相同的词根 work)。

最后,单词可以有相同或相似的含义。不过还是那句话,意思差不多是什么意思?两个词的意思可以是相似的,因为它们指的是同一本体的实体,例如苹果牛排都指的是可食用对象类的实体。苹果甚至有更相似的意思,因为它们不仅都指可食用物类中的实体,而且还指水果类中的实体,甚至更严格地说,指梨子类。然而,当谈到相似的词时,大多数人会想到同义词或近义词:指同一实体、动作或概念的词。单词嵌入不会。他们想到几种相似性,并把它们混合在一起。

适者生存。

正如我上面提到的,单词向量代表它们出现的上下文的平均值。我们将一个巨大的语料库输入到一个智能算法中,我们得到了语料库中单词的一系列数字表示。相似的向量代表相似的单词,因为它们出现在相似的上下文中。

由于单词-上下文相互作用的复杂性,向量相似性不会总是代表我们所追求的相似性类型。例如,其中一个与的向量最相似的词可以,是不能(检查你最喜欢的词向量!).我想我们都同意,这两个词的意思并不完全相同,那么为什么它们的向量如此相似呢?实际上很简单:两个单词都可能出现的上下文的一个方面比其他方面有更大的权重,这将决定它们向量的形状。在这种情况下,句法环境胜出。可以不可以都只能出现在一组非常有限的语法上下文中。作为助动词,它们只能出现在其他助动词或词汇动词之前的位置,或者在句子是疑问句的情况下出现在句子的开头。此外,它们糟糕的语义内容使得 cancannot 都与大量的动词和名词兼容,所以它可以出现的语义上下文是非常不确定的。因此,这些词的向量将主要代表它们的句法分布,并且从词向量的角度来看,它们将非常类似于具有相同句法分布和较差语义内容的词,例如所有其他助动词。can 中否定的存在没有足够的权重来补偿 cancan之间的句法相似性。幸运的是,有一些方法可以确保考虑到非常相关的语义差异,例如通过使用硬编码的否定提取器,它可以识别否定元素,如 no ,以及 un-anti -。自从我们开始使用这样的否定提取器,我们的机器人变得不那么自大了。
句法语境决定了所有虚词的向量表示,如限定词、数词、介词代词。它们的语义内容只是不够强,不足以体现在它们的向量表示中,并且它们的句法分布是如此受限制,以至于单词向量将基本上表示它们经常出现的句法上下文。

另一种情况是当语用语境具有最大权重时。如果你在 fastText 预训练词向量中查找与 nope 最相似的词,你会注意到前十名包含了大量在非正式语域中频繁使用的短词,如反正fwiwyeahhmmm 。同样,这些词几乎没有语义内容。它们在句法上也是相当独立的(它们可以是独立的“句子”)。这就给语用学留下了空间来确定它们的分布,而这将在它们的词向量中表现出来。

语义语境到底有没有影响?当然有!尤其是那些具有强烈的、专门的、语义内容的、相当自由的句法分布的、与任何语域都没有语用联系的词。许多名词、动词和形容词都是如此。与最相似的词是 a.o. ,是同义词。然而,单词的语义内容越一般,因此它可以出现的语义上下文的种类越多,其单词向量中的语义表示就越“一般”。就拿 make 来说吧,它的前十名里有 create ,还有 givebringget ,这些和 make 一样,都是有多重含义的动词,取决于它们出现的语境(我造的!vs. 我做了个煎蛋。所以显然制造的平均意义(不管那是什么意思)和给予的平均意义相似。由词向量表示的语义相似性通常是类相似性。类似于李子因为它们出现在水果环境中,而流感类似于登革热麻疹因为它们出现在发烧环境中。

现实与可能性的差异。

那么为什么在寻找相似向量时很少会弹出同义词呢?并不是因为两个词可以出现在同一个语境中,它们才会出现。同义词之间往往有所不同,因为其中一个词经常与另一个词一起使用。想想我们亲爱的朋友贝斯。最相似的词是吉他,前十名中没有鱼,可能是因为我们不像谈论乐器那样经常谈论鱼。另一个原因是,单词很少在所有上下文中都是同义词:方言变体在谈论语言学时可以互换使用,但这是唯一可能的上下文。变体可以出现在如此多的其他语境中,这些语境会将词向量拉向某个方向,远离方言。在一种语言的所有变体中,同义词并不总是同义词。 Verlof (假日或休假)在佛兰德荷兰语中是 vakantie (假日)的同义词,但在来自荷兰的荷兰语中不是。最后,在某些语域中,同义词是首选的。 Brofriend 的同义词,但不是和老板说话的时候。很明显,使用单词向量来寻找同义词不是一个好主意。尽管有一些替代的方法来构建一个好的同义词提示器。这一次,您可以利用内置的同义词库,并使用单词预测技术来预测哪个候选同义词最有可能出现在给定的上下文中。无论如何,一个经验法则是,你需要考虑具体的上下文,因为两个词是否是同义词,往往取决于它们出现的上下文。

一般的结论。

单词向量代表单词的平均上下文。语境的所有方面:句法、语义和语用。如果一个方面比另一个方面具有更大的权重,这将在单词向量表示中可见。如果一个单词在一个上下文中比在另一个上下文中出现得更频繁,这将在单词向量表示中可见。如果一个单词以它的一种含义更频繁地出现,这将在单词向量表示中可见。所以如果你想用词向量来计算相似度,要当心相似度复杂度
尽管词向量在许多方面非常有用,并让我们在 NLU 取得了巨大的进步,但它们是基于一种相当简单的语言方法(我们必须从某个地方开始……)。语言中有如此多的微妙之处,人类凭直觉就能理解,甚至不用思考就能应付。我们能够推断出许多甚至没有用语言表达的意思,仅仅基于我们使用语言的语境,或者我们对与我们互动的人的了解和关系,以及许多其他因素。所以让我们继续努力,处理好单词向量的缺点,因为有一天**我想要一个宠物机器人。**有什么改进的办法吗?取得联系!

原载于 2018 年 3 月 20 日www . paintity . XYZ

CAP 定理和分布式数据库管理系统

原文:https://towardsdatascience.com/cap-theorem-and-distributed-database-management-systems-5c2be977950e?source=collection_archive---------0-----------------------

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

过去,当我们想要存储更多数据或提高处理能力时,常见的选择是纵向扩展(获得更强大的机器)或进一步优化现有的代码库。然而,随着并行处理和分布式系统的进步,更常见的是进行水平扩展,或者让更多的机器并行执行相同的任务。我们已经可以在 Apache 项目中看到一堆数据操作工具,比如 Spark、Hadoop、Kafka、Zookeeper 和 Storm。然而,为了有效地选择工具,CAP 定理的基本思想是必要的。CAP 定理是一个分布式数据库系统只能拥有 3 个中的 2 个的概念:一致性、可用性和分区容忍度。

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

CAP 定理在大数据世界中非常重要,尤其是当我们需要根据我们独特的用例在三者之间进行权衡时。在这篇博客上,我将试着解释每一个概念和权衡的原因。我将避免使用具体的例子,因为 DBMS 正在迅速发展。

分区容差

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

这种情况表明,尽管节点之间的网络延迟了大量消息,系统仍会继续运行。容许分区的系统可以承受任何数量的网络故障,而不会导致整个网络的故障。数据记录在节点和网络的组合中得到充分复制,以保证系统在间歇性故障中正常运行。在处理现代分布式系统时,分区容错不是一个选项。这是必须的。因此,我们必须在一致性和可用性之间进行权衡。

高一致性

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

这种情况表明所有节点同时看到相同的数据。简单地说,执行一个操作将返回最近的操作的值,导致所有节点返回相同的数据。如果事务以系统处于一致状态开始,以系统处于一致状态结束,则系统具有一致性。在这种模型中,系统可以(而且确实)在事务期间转换到不一致的状态,但是如果在流程的任何阶段出现错误,整个事务都会回滚。在图中,我们有两个不同的记录(“妙蛙种子”和“皮卡丘”),它们的时间戳不同。第三个分区上的输出是“皮卡丘”,最新的输入。然而,这些节点需要时间来更新,并且不会经常出现在网络上。

高可用性

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

这个条件声明每个请求在成功/失败时得到一个响应。在分布式系统中实现可用性要求系统 100%的时间保持运行。无论系统中任何单个节点的状态如何,每个客户端都会得到响应。这个度量是微不足道的:要么可以提交读/写命令,要么不能。因此,数据库与时间无关,因为节点需要随时在线。这意味着,与前面的例子不同,我们不知道是“皮卡丘”还是“妙蛙种子”先被添加。输出可能是其中之一。因此,当以高频率分析流数据时,高可用性是不可行的。

结论

分布式系统使我们能够获得一定水平的计算能力和可用性,这在过去是不可能的。在遍布全球的数据中心中,我们的系统具有更高的性能、更低的延迟和接近 100%的正常运行时间。最重要的是,今天的系统运行在商品硬件上,这些硬件很容易获得,并且可以以可承受的成本进行配置。然而,这是有代价的。分布式系统比单一网络系统更复杂。理解分布式系统中产生的复杂性,为手头的任务(CAP)做出适当的权衡,并为工作选择正确的工具对于水平扩展是必要的。

毕业率

原文:https://towardsdatascience.com/capstone-blog-62002ebacf6b?source=collection_archive---------11-----------------------

对于我完成的编码训练营的最后一个项目,我想看一些将我以前的兴趣与我当前的数据科学知识相结合的东西。因为我从头到尾都要选择这个项目的每个方面,所以我想看看现实世界的问题。低收入社区存在一个巨大的问题,学生在没有准备好的情况下被鼓励进入大学,并带着大量学生债务辍学,没有任何表现。

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

第一步是寻找数据!我从国家教育统计中心 (NCES )找到了一组数据,这是从 2002 年开始对 16000 名学生从高中开始到高中毕业后 8 年的纵向研究。这听起来像是完美的数据集,我唯一的问题是它有太多的数据,这从来不是一个真正的问题。有超过 10,000 个变量,所有这些变量都是分类调查数据。使用分类数据可能会有其自身的问题;主要的一点是排序,并确保数据的顺序对回归模型有意义。幸运的是,国家教育统计中心在整理数据方面做得很好,所以这并不像我担心的那样是个大问题。

得到数据后,下一步是缩小变量范围。由于这个数据集包含了学生的个人信息,许多数据在数据集的公共版本中是“受限的”。为了获得完整的数据集,您必须申请受限使用数据许可证。此后,我申请了其中一个,试图让我的发现更有用,但我发现公共使用数据集相当有限。公共使用数据集抑制了所有人口统计信息,这些信息可能是非常好的预测工具,使我的预测更具普遍性。

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

我的第一步是删除所有以 F3 开头的栏目,因为这意味着来自第三次跟进调查。当我第一次发现与我的目标变量(称为“F3 achievement ”)高度相关的列时,所有的变量都来自第三次跟踪调查。我发现这对于概括预测特别没用,因为知道一个学生大学毕业或没毕业后会发生什么不会帮助某人预测谁会大学毕业。所以我决定去掉这些变量。

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

下一步是确保调查中留下的学生曾经上过大学。因为我只是在寻找那些愿意或不愿意大学毕业的人,所以我决定只调查那些上过大学的人。

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

变量选择的最后一步是确定哪些变量与目标变量的相关性超过 0.25。这给我留下了大约 25 个变量,在去掉彼此高度相关或者有很多缺失值的变量后,我最后只剩下 11 个变量。我认为这个数字比我开始时的 4000 英镑要合理得多。

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

我发现一些变量仍然彼此高度相关,所以我创建了交互项来避免这个问题。

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

我建立了 5 个不同的模型,发现逻辑回归和线性判别分析表现最好。因为我想要一个更白盒的方法,因为我关心哪些变量是最重要的,所以我选择使用逻辑回归。我发现最重要的变量是学校的类型和他们上大学的时间。这是有道理的,因为正如我们在之前的图表中看到的,与就读于非盈利性大学的学生相比,就读盈利性大学的学生毕业的可能性要小得多。没有全日制上学的学生毕业的可能性也小得多。这些都是学生可以用来决定上哪所大学以确保毕业的可操作的小事情。

鉴于本次调查的基线为 69%,这些模型的性能仅比基线高出约 5%。在未来,我希望获得完整的数据集,并利用人口统计数据做出更好、更有趣的预测。如果这个模型可以获取一个大学生的一些基本信息,并告诉你他们是否有无法毕业的风险,那就更好了。虽然美国高中推动所有学生上大学,但可能有一些学生应该追求另一条道路,如实习或学徒。

[## Jupyter 笔记本浏览器

在我的顶点项目中,我想看看我在教学工作中遇到的一个现实世界的问题。很多低…

nbviewer.jupyter.org](http://nbviewer.jupyter.org/github/rowandl/portfolio/blob/master/How%20to%20Improve%20College%20Graduation%20Rates/How%20to%20improve%20college%20graduation%20rates.ipynb)

胶囊神经网络:下一代神经网络?第一部分:CNN 及其问题。

原文:https://towardsdatascience.com/capsule-neural-networks-are-here-to-finally-recognize-spatial-relationships-693b7c99b12?source=collection_archive---------3-----------------------

可选(“常规”)神经网络是机器学习领域的最新热点,但它们也有缺陷。胶囊神经网络是 Hinton 的最新发展,它帮助我们解决了其中的一些问题。

这是系列帖子的一部分,旨在教授胶囊神经网络。这第一篇文章将解释“正常”(卷积)神经网络及其问题。

神经网络可能是机器学习中最热门的领域。近年来,有许多新的发展,改善神经网络和建设,使他们更容易。然而,它们大多是渐进式的,例如增加更多的层或稍微改进激活功能,但没有引入一种新的类型的架构或主题。

Geoffery Hinton 是许多高度利用的深度学习算法的创始人之一,包括神经网络的许多发展——难怪,有神经科学和人工智能背景。

2017 年 10 月下旬,Geoffrey Hinton、Sara Sabour 和 Nicholas Frosst 在 Google Brain 下发表了一篇名为“胶囊间动态路由”的研究论文,介绍了神经网络的一项真正创新。这是令人兴奋的,因为这种发展已经被期待了很久,将可能刺激更多的研究和围绕它的进展,并被认为使神经网络比现在更好。

基线:卷积神经网络

卷积神经网络(CNN)是非常灵活的机器学习模型,它最初是受我们大脑工作原理的启发。

神经网络利用“神经元”层将原始数据处理成模式和对象。

神经网络的主要构件是“卷积”层(因此得名)。它是做什么的?它从上一层获取原始信息,理解其中的模式,并将其向前发送到下一层,以理解更大的画面。

如果你是神经网络新手,想了解它,我推荐:

  1. 观看由 3Blue1Brown 制作的动画视频。

  2. 想要更详细的文字/视觉指南,你可以看看这个初学者博客

  3. 如果你能处理更多的数学和细节,你可以阅读斯坦福大学 CS231 的指南。

    以防你没有做到以上任何一点,并打算继续,这里有一个手动波浪形的简要概述。

卷积神经网络背后的直觉

让我们从头开始。
神经网络接收原始输入数据。假设这是一只狗的涂鸦。当你看到一只狗,你的大脑会自动检测出它是一只狗。但是对于计算机来说,图像实际上只是代表颜色通道中颜色强度的一组数字。假设它只是一个黑色的白色涂鸦,那么我们可以用一个数组来表示它,其中每个单元格代表像素从黑到白的亮度。

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

Example dog face for a Neural Network to recognize. Source: The Sun, image: lovable dog rescue

我们的目标是什么?我们的目标是让网络从视觉上理解图片中的内容(对它来说,图片只是一个数字序列)。一种方法是自下而上的:首先查看小组像素,理解它们(如小线条和曲线:狗耳朵的曲线,瞳孔的小圆圈,腿的小线条),然后建立这些线条和曲线的更大组(如:耳朵,鼻子,鼻子,眼睛),理解这些形状的更大组(如:脸,腿,尾巴),最后理解狗的整个图片。

它是通过许多层将信息按顺序从一层传递到另一层来实现的。
如果这对你来说是新的,请看我对卷积网络结构的总结: 了解卷积神经网络

如果你没读过,但对你来说还是新的,下面是一个更短的摘要:

了解卷积神经网络

  1. 卷积层。第一个卷积层将图像空间映射到一个更低的空间,总结每组中发生的事情,比如说 5x5 像素,这是一条垂直线吗?水平线?什么形状的曲线?这发生在逐元素乘法中,然后将滤波器中的所有值与原始滤波器值相加,并求和为单个数字。
  2. 这就引出了 神经元,或者说 卷积 滤波器 *。每个过滤器/神经元被设计成对一种特定的形式(一条垂直线?一条水平线?等等……)。*来自第 1 层的像素组到达这些神经元,并根据该切片与神经元寻找的内容的相似程度来照亮与其结构匹配的神经元。
  3. 激活(通常是“ReLU”)层 —在每个卷积层之后,我们应用一个非线性层(或激活层),这将非线性引入系统,使其能够发现数据中的非线性关系。ReLU 非常简单:将任何负输入设为 0,或者如果是正的,保持不变。 ReLU(x) = max(0,x)。
  4. 汇集层。这允许减少“不必要的”信息,总结我们对一个地区的了解,并继续提炼信息。例如,这可能是“MaxPooling ”,其中计算机将只取传递的该补丁的最高值,以便计算机知道“在这些 5x5 像素周围,最主要的值是 255。我不知道具体在哪一个像素上,但确切的位置并不重要,因为它就在附近。→ 注意:这个不好。我们在这里丢失信息。胶囊网这里没有这个操作,这是一个进步。
  5. **辍学层。**该层通过将激活设置为零来“删除”该层中的一组随机激活。这使得网络更加健壮(有点像你吃泥土增强你的免疫系统,网络对小的变化更加免疫)并减少过度适应。这仅在训练网络时使用。
  6. **最后一个完全连接的层。**对于一个分类问题,我们希望每个最终神经元代表最终的类。它查看前一层的输出(我们记得它应该代表高级功能的激活图),并确定哪些功能与特定的类最相关。
  7. SoftMax — 有时添加这一层是为了以另一种方式表示每个类的输出,我们稍后可以在损失函数中传递这些输出。Softmax 表示各种类别的概率分布。

通常,有更多层提供非线性和维度保持(如在边缘周围填充 0 ),这有助于提高网络的鲁棒性和控制过拟合。但是这些是你需要理解接下来会发生什么的基础。

现在重要的是,这些层只是按顺序连接。这与胶囊网络的结构相反。

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

Neural Network Structure, From a Google article be Szegedy, Toshev & Erhan presenting Neural Networks

W 卷积神经网络的问题在哪里?

如果你对此感兴趣, 观看韩丁的讲座 解释到底他们有什么问题。下面你会看到胶囊网络改进的几个关键点。

Hinton 说,他们的子结构层次太少(网络是由神经元组成的层组成的,就是这样);我们需要将每一层中的神经元分组到“胶囊”中,就像迷你列一样,进行大量的内部计算,然后输出一个汇总结果。

问题#1:共享会丢失信息

CNN 使用“汇集”或等效的方法来“总结”在较小区域发生的事情,并理解图像中越来越大的块。这是一个让 CNN 运行良好的解决方案,但是它丢失了有价值的信息。

胶囊网络会计算出一个*(平移和旋转)较小特征之间的关系来组成一个较大的特征。
这种信息的丢失导致空间信息的丢失。*

问题# 2:CNN 没有考虑图像各部分之间的空间关系。因此,它们对方向也过于敏感。

二次采样(和合并)会丢失鼻子和嘴等高级部分之间的精确空间关系。身份识别需要精确的空间关系。

*(韩丁,2012 ,在他的讲座中)。

**CNN 不考虑底层对象之间的空间关系。通过这些平坦的神经元层根据它们看到的物体而发光,它们识别出这些物体的存在。但是随后它们被传递到其他激活和汇集层,并传递到下一层神经元(过滤器),而不识别我们在该单层中识别的这些对象之间的关系
他们只是说明自己的存在。

所以一个(简单化)神经网络会毫不犹豫地将这两只狗,巴勃罗和毕加索,归类为“柯基-比特-牛头梗混血儿”的同样好的代表。*

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

Normal (Convolutional) Neural Network will recognize both of these lovely dogs as the same type of dog face, because it does not care about WHERE the elements of the dog’s face are located relatively to each other in space. Picasso (the dog on the left) will luckily not be discriminated against by the model, but we really want a model to realize this is not a regular example of a corgi-pit-bull-terrier mix dog. Image source: The Sun. Image: Lovable Dog Rescue

网络会将这两只狗归类为“柯基-比特-牛头梗混合”狗的类似良好表示,因为它们在面部合成卷积层回答相同的条件,例如:

*if: (2 eyes & pitbullmix_snout 
     + pitbullmix_wet_nose & mouth)
then: pitbullmix_face*

错误地激活 pitbullmix_face 的神经元,而不是类似于:

*if: 2 eyes 
& BELOW: pitbullmix_snout 
     & pitbullmix_wet_nose 
& BELOW: mouth 
then: pitbullmix_face*

*相反,胶囊网络代表方向以及内容,并连接神经元胶囊之间,以推断空间关系并保留姿势信息。

缺少分组的胶囊表示、姿态计算,以及胶囊之间的重叠检查导致下一个问题。*

问题# 3:CNN 无法将对几何关系的理解转移到新的观点上。

*这使得它们对原始图像本身更敏感,以便将图像分类为同一类别。

CNN 在解决与他们接受过训练的数据相似的问题方面非常棒。它可以对图像或其中与它以前见过的东西非常接近的物体进行分类。但是如果物体稍微旋转,从稍微不同的角度拍摄,特别是在 3D 中,倾斜或在另一个方向上,而不是 CNN 所看到的-网络不会很好地识别它。

一种解决方案是人工创建图像或组的倾斜表示并将它们添加到“训练”集中。然而,这仍然缺乏一个更坚固的结构。*

编码视点不变的空间关系姿态

那么我们如何对 3D 对象之间的空间关系进行编码呢?辛顿从一个已经解决了这个问题的领域获得了灵感:3D 计算机图形学。
在三维图形中,一个
矩阵 是一种表示物体之间关系的特殊技术。姿态本质上是代表平移加上旋转的矩阵。现在我们明白了。我们可以使用子对象之间的姿势关系来保留空间关系信息;测量物体之间的相对旋转和平移作为 4D 姿态矩阵。
这将是理解胶囊间动态路由的关键。******

既然我们已经知道了神经网络及其空间识别问题的基础知识,我们可以继续了解最近开发的解决方案:胶囊神经网络。这将是我下一篇文章的主题。 敬请期待!

胶囊神经网络–第 2 部分:什么是胶囊?

原文:https://towardsdatascience.com/capsule-neural-networks-part-2-what-is-a-capsule-846d5418929f?source=collection_archive---------6-----------------------

胶囊神经网络中的这些“胶囊”是关于什么的?这篇文章将以简单的语言(和狗脸)给你完整的直觉和洞察力,以及后来深入理解它们的技术细节。

这是胶囊网络解释系列的第二部分。帖子#1 在这里,如果你还没看的话,看看吧。

胶囊:直觉

在经典的 CNN 中,第一层的每个神经元代表一个像素。然后,它将这些信息转发给下一层。接下来的卷积层将一群神经元组合在一起,这样单个神经元就可以代表一整帧(一群)神经元。因此,它可以学习表示一组看起来有点像鼻子、的像素,特别是如果我们的数据集中有许多这样的例子,当识别图像是否是狗时,神经网络将学习增加那个鼻子神经元特征的权重(重要性)。

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

Abstraction 1 of how a regular Convolutional Neural Network would recognize sub-structures present in the big picture, regardless of their location

然而,这种方法只关心特定位置周围的图片中对象的存在;但是它对物体的空间关系和方向不敏感。
但不惧!胶囊来拯救我们了!胶囊 s 是一个新概念,它可以包含更多关于每个【对象】的 信息。

胶囊是一个 向量 (一个具有大小和方向的元素)指定了对象的特征及其 可能性 。这些特征可以是任何实例化参数,如“姿态“”(位置、大小、方向)、变形、速度、反照率(光反射)、色调、纹理等。

因此,例如,神经网络可以学习拥有一个代表“眼睛”的胶囊,它将包含关于它所看到的所有眼睛变化的信息,而不是针对不同眼睛变化的不同神经元。例如,除了关于看起来像“眼睛”的像素组的信息之外,胶囊还可以指定它的属性,如角度和大小,因此,如果我们使用这些角度或大小参数,它可以用相同的一般眼睛信息来表示各种眼睛。

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

Abstraction of how a Capsule Neural Network would recognize sub-structures present in the big picture, along with information about the location and direction of these elements.

现在,就像神经网络有多层神经元一样,胶囊网络也可以有多层胶囊。所以可能有更高的胶囊代表它们下面的一组物体(胶囊)。例如,在第三层你可能有代表“眼睛”、“鼻子”、“嘴”的胶囊,在第四层你可能有代表“狗脸”的胶囊。因此,胶囊在识别一系列变化的特征时更加灵活和稳健。

但是等等……还有更多!

*我们的智能胶囊可以利用这些信息进行更好的识别。直观上,胶囊网络可以问:所有这些特征都是相似的旋转和大小吗? 如果不是,这个有问题的图像不太可能是狗脸(这个标签会得到较低的概率分数)。如果是的话,这增加了我们的信心,这具有重要的意义:我们刚刚创建了一个网络,它可以识别对象,即使它们是从原始输入转换而来的。下面再详细说说这两点。

**(1)capsnes 可以根据方向和大小的不一致性进行更好的分类以便识别。**如果子元素(鼻子、眼睛和嘴巴)在方向和大小上彼此不一致(比如我们的毕加索!) t *这时较高的胶囊会注意到并且会不太确定这是一张(常规的)狗脸。*对于中枢神经系统中的正常神经元,我们无法做到这一点;我们只有可能让一组像素看起来像没有方向信息的东西。通过比较胶囊每个特征的兼容性,我们可以发现它们是不一致的,并且(遗憾的是)排除了 Picasso 的可能性。

②观点不变性。经典的 CNN 只能基于以相似的方向和大小存储的相似的狗脸检测器来识别狗脸。这是因为狗脸的特征存储在像素帧内的位置。例如,它可能有一个狗脸的表示,其中鼻子在像素[50,50]左右,嘴在像素[50,20]左右,眼睛在像素[20,70]和[70,70]左右。然后,它将只识别在图片中相似位置具有相似特征的图像。因此,对于“旋转 30°的狗脸”或“小狗脸”,它必须有一个单独的表示。这些表示最终会映射到同一个类,但这仍然意味着 CNN 必须事先看到每种类型转换的足够多的例子,以创建它的内部表示,并在将来识别它。相比之下,胶囊网络可以具有“狗脸”的一般表示,并检查其每个特征(鼻子、嘴等)的变换(旋转、大小等)。它检查是否所有特征都以相同的量和方向旋转或变换,从而更加确信它确实是一张狗脸。神经网络可以直接检测到*这个子结构集合实际上等同于由相同数量转换的更高结构。*这意味着 capsnes将类一般化,而不是记住该类的每个视点变量*,因此它对视点是不变的。****

这是个好消息!为什么?因为视点不变意味着: (a)它对输入的方向和大小的变化更鲁棒(b)它将需要少得多的 数据(这通常很难得到)内部表示,从而更有效地正确分类。这意味着©caps net 可以识别新的、未见过的类变体,而无需对它们进行训练!

**从概念上讲,这是一个非常好的消息,因为更像是 更像是我们人类在视觉上所做的,因此是一个重要的改进 *。当鼻子在 1.70 米,嘴在 1.67 米时,我们不是记住一张脸,而是存储嘴和鼻子之间的关系,从而可以检测出它们的任何变化。

辛顿把这种称为胶囊的等方差
等变是对一类对象的检测,这些对象可以相互变换(即,通过旋转、移位或任何变换)。除了识别物体本身及其变形之外,CapsNetequ variance还意味着它们可以检测出 物体现在处于何种变形状态。 我们强制模型将特征变体学习到一个胶囊中,这样我们可以用更少的训练数据更有效地推断可能的变体。
所以当物体移动,倾斜,或者大小不同时,但是是同一个底层物体,胶囊还是会以很高的概率检测到这个物体。这是可能的,因为胶囊在以长度为概率的向量中包含关于对象的信息,所以如果对象被变换,长度将不会改变,但是它朝向它所表示的变换维度的方向将会改变。对象的这种更健壮的表示也可以使其对对抗性攻击更健壮。简而言之,对抗性攻击是一种“愚弄”神经网络的方法,通过以人眼几乎察觉不到的方式调整图像中的像素,来确定一个对象[dog]实际上是另一个东西[Trump],但在神经网络代表另一个对象的方向上刚好足够,直到网络认为它是另一个对象。具有该对象的更一般化、更健康和更健壮的表示,特别是具有对对象修改的视点不变性和弹性,可以帮助网络保持识别它是相同的对象,从而减轻这些攻击。*****

这对于当神经网络图像识别决定现实生活事件时很重要:像自动驾驶汽车检测 **[STOP]** 迹象。一个(受过良好教育的)罪犯可以在那个标志上贴一个几乎看不见的标签,然后“黑掉”汽车,将这个标志识别为一个[“Speed = 60”]标志并继续行驶。但是,一个基于 CapsNets 而不是 CNN 的系统将更能抵御这种敌对攻击。我针对一种常见的对抗性攻击“FGSM”测试了该模型,在噪声= 50 的水平下,它的准确率下降到了 73%。它没有抗药性,但比正常的中枢神经网络表现更好。

你大概知道了。

现在让我们开始讨论细节。

胶囊:定义

*****胶囊是一个抽象的概念,由一组神经元组成,其活动向量包含关于该对象的更多信息。有许多方法可以实现这一点。Hinton 等人选择了一种特殊的方法来实现这一点,这种方法允许使用“动态路由”。我们将在这里讨论这个实现。

Sabour,Frosst & Hinton (2017)用这个定义和概述打开了他们的论文:*****

胶囊是一组神经元,其活动向量表示诸如对象或对象部分的特定类型的实体的实例化参数。我们用活动向量的长度来表示实体存在的概率,用它的方向来表示实例化参数。处于一个级别的活动胶囊通过变换矩阵对更高级别的胶囊的实例化参数进行预测。当多个预测一致时,更高水平的胶囊变得活跃。”

胶囊代表什么?

在他们的论文和所有可用的实现中,胶囊网络被用于 MNIST 手写的 0-9 位数数据集——经典的 ML 分类任务。现在让我们来看这个例子。

  • 每个囊都是一组神经元。
  • 在 DigitCaps 层中,每个神经元代表一个维度,其中数字可以不同:比例和粗细、笔画粗细、倾斜、宽度、平移等。作者在每个胶囊中使用 16 个神经元来代表 16 个维度,其中一个数字可以不同。

*****我们最想从胶囊中得到的是它的输出。
胶囊的输出是一个矢量。
向量本身的长度表达了“实体的存在”——意思是这个物体被[ 5 ]的概率。向量的 方向 被强制表示属性本身(宽度、厚度、倾斜…).它的大小被强制小于 1(因为大小它总是正的,所以在 0-1 之间),并表示成为该类的概率。它指向一个点,这个点代表它有多大,它的角度是什么。

我们来勾画一个简单的例子。
之前,我们让一个神经元接收表示子对象的单个标量,并输出单个标量。假设我们有一些“5”数字神经元靠近 CNN 的末端,接收来自一种特殊的 5:*****

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

现在,我们可以对更多的信息进行编码,如果不是一个神经元,而是一个有两个神经元的囊,也可以指示手指的角度。向量本身的长度表示该输入有多可能是该胶囊所表示的;与单个神经元输出的概率信息相同。

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

*****长度计算为矢量的大小。如果第一个向量是 v=(0,0.9),那么它的长度就是= sqrt√(0^2 + 0.9^2) = 0.9。现在我们可以在胶囊中添加更多的神经元来捕捉更多的维度:尺度和厚度、宽度、笔画粗细、倾斜等。

Hinton 等人(2017)在其论文中展示了在 MNIST 数据集上训练的 DigitCaps 图层胶囊中各种维度的结果,其中包含这些维度:*****

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

From the original paper: Sabour, Frosst and Hinton (2017), Google Brain [https://arxiv.org/pdf/1710.09829.pdf]

胶囊是做什么的?

胶囊学习正确的转换并优化其输出。这是怎么回事?首先,让我们回忆一下传统神经元在 CNN 中的作用:

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

Traditional Neuron part — image from Naturomics

  1. 接收标量作为输入(X1,X2,X3),附加常数(1)表示偏置权重
  2. 对输入标量执行加权求和(通过标量权重 w1、w2、w3 和 b)
  3. 应用非线性激活函数f()
  4. 输出标量 h(取决于其学习的权重参数 w,b.

我们自己的太空舱也以类似的方式运作,但有很大的不同。

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

Capsule Networks Neuron structure. Image from Naturomics

****1。输入一个矢量( u_i )。传统神经元接收单个标量作为输入并输出单个标量,而胶囊接收输入向量并输出向量。这些输入向量 u1、u2、u3 来自前一层的胶囊。假设他们代表眼睛,鼻子/鼻子和狗嘴。它们的长度代表了它们正确识别所接收内容的概率。它们的方向表示胶囊的维度空间中底层对象的变化/状态。

请注意,第一层胶囊没有相同的输入,因为它不是由其他胶囊产生的。这个后面会讨论。

还要注意,没有偏置作为输入。该偏差可以包含在下一阶段“仿射变换”中,其中变换矩阵 Wij 可以包含该偏差和更复杂的运算。

2。仿射变换

这一步是胶囊独有的。它将一个变换矩阵 Wij 应用于前一层的矢量 u1/u2/u3 。例如,假设我们从一个大小为m××k的矩阵和一个大小为( k,d)的输入向量 ui 开始,我们将该向量转换为一个大小为 (m,D) 的新矩阵u【̂Ji*。((m×k)×(k×1)⟹m×1)。*********

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

这个转换矩阵很重要;它可以表示丢失的空间关系以及输入的子对象(狗的鼻子、狗的右眼)和输出的高级对象(狗的脸)之间的其他关系。例如,矩阵 W1j 之一可以表示右眼在狗脸的右上部分的信息,狗脸应该大大约 20 倍,并且脸的角度应该与眼睛的角度相同。这个矩阵的目的是将输入向量转换成代表下一级的预测输出向量的位置——人脸(更高级别的特征)。在这个矩阵乘法之后,我们得到了面部的预测位置。这发生在每个矢量上。所以 u1 代表根据眼睛预测的狗脸位置,u2 代表根据鼻子预测的狗脸位置,u1 代表根据嘴预测的狗脸位置。这样,我们可以叠加这些预测,看看它们是否相关或相互干扰。如果他们都预测在同一个地方应该有一只狗,我们对 dog_face 的预测就更有把握了。基于每个输入叠加 dog_face 预测的示例:

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

3.输入向量 U^j|i 的加权和( S ums C_ij

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

Weighted Sum of input vectors

  • C_ij 是“耦合系数”,我们使用动态路由算法(将在下面解释)找到它。它们的加权和∑ cij 被设计为和为 1。就目前而言,动态路由的一个简短直觉是,它是一种胶囊"决定"向何处发送其输出的方式。这是通过预测如果它和这个太空舱一起走,它的变形会落在太空的什么地方来实现的。我们从所有的胶囊到所有的胶囊,所以对于每一个下一个胶囊,我们有一个空间充满了前一层胶囊的假设点。这个胶囊将到达它的投影更靠近来自其他胶囊的其他点群的地方。
  • 因此口鼻囊可以投影哪个较高层次的囊会与其投影更一致—(在面部囊、躯干囊、腿囊之间;吻部的投影将更接近面部被膜上的投影)。因此,它将基于此拟合来优化其 C_ij 权重,最大化与 face_capsule 的拟合,最小化与 legs_capsule 的拟合。

4。“挤压函数”:一种新的矢量非线性激活函数

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

Squashing function breakdown

  1. 传统上,神经元层映射到一个非线性“激活”函数的不同层,这个函数最常见的是 ReLU (简单到 f(x)=max(0,x),只把所有的负值消去为 0)。
  2. 胶囊网络需要从向量转换到向量,Hinton 的设计要求输出向量的长度必须在 0-1 之间(或者更准确地说,0-单位长度),才能表示概率。然而,它必须保持其方向。它如何确保这一点?他们创造了一种新的激活功能,称为“挤压”功能。它将向量缩小到 1 或更小,同时保持它们的方向。具体来说,它将大约 3–4 以上的长向量缩小到大约 1(单位向量大小),小于 1 的向量大幅缩小(在等式的左侧,它们被平方并被自身+ 1 除)。注意,这个向量的大小表示对象属于这个胶囊的概率。
  3. (例如,对于||Sj||=1,这部分应该是 1/2=0.5,但是对于大小为||0.1||,0.1/1.1 = 0.09091 的向量
  4. 挤压函数可以计算为(从 gram-ai 的 PyTorch 实现开始,我们将在后面介绍):
*****# squashing function as we’ve seen before
def squash(self, tensor, dim=-1):
   squared_norm = (tensor ** 2).sum(dim=dim, keepdim=True)
   scale = squared_norm / (1 + squared_norm)
   return scale * tensor / torch.sqrt(squared_norm)*****
  1. ****输出:产生的矢量。成品。

摘要

总之,胶囊的内部工作是:

  1. 接收输入向量(代表眼睛)
  2. ****应用编码空间关系的“仿射变换”或变换矩阵(在眼睛和 dog_face 之间,投影脸部应该在的位置)
  3. 通过路由算法学习的 C 个权重应用加权和
  4. 使用非线性“挤压”激活功能将其“挤压”至 0–1
  5. 得到了我们的新矢量,准备发送。

自然组学的这张表很好地总结了正常“神经元”和胶囊之间的主要差异:

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

Key differences between a traditional neuron and a capsule. Source: Naturomics

恭喜你。如果你一路走到了这里(即使只是略读了一些技术部分),你就知道了关于“胶囊”你需要知道的一切!

但是我们仍然需要知道: 你用这些胶囊做什么?你如何将它们连接成一个神经网络?下一篇文章将解释胶囊之间动态路由信息的算法和架构

如果你想看到下一个帖子以及未来更多的帖子,请鼓掌!

直到下一次,

托梅尔

linkedin.com/in/tomere

车祸和天气:环境条件对交通事故率影响的探索性分析

原文:https://towardsdatascience.com/car-crashes-and-the-weather-an-exploratory-analysis-of-environmental-conditions-impact-on-traffic-12bcb7f9afed?source=collection_archive---------4-----------------------

在恶劣天气条件和光线不足的情况下驾驶会增加事故风险,这似乎是一个合理的假设,但我对英国交通事故数据的分析显示了一些令人惊讶的结果。

这篇文章改编自一篇更详细的报告,该报告可以在 GitHub 上找到,以及分析中使用的代码和数据。

在英国,每年有超过 130,000 起涉及伤害的交通碰撞报告给警方,导致 1,700 到 1,800 人死亡[1]。交通部每年发布这些事故的数据[2],自 1979 年以来,一直以类似的格式记录和发布,尽管在这项工作中,我只关注了 2016 年,这是可获得结果的最近一年。

与数据一起发布的还有一份报告[1],该报告对事故和死亡率的年度趋势给出了一些有趣的见解,并通过查看特定的道路使用者类型(如汽车驾驶员、骑自行车者、行人等)对数据进行了细分。).它还考虑了可能相关的因素,如天气、酒后驾车率,甚至国内生产总值对事故率的影响。然而,该报告几乎没有详细说明地区趋势、全年或全天的模式,或者物理环境和撞车率之间是否存在关系。

我想调查这些点,通过挖掘数据来探索全国事故状况的模式,并看看我是否能揭示环境条件和事故率之间的任何关系。

数据

数据由三个主表组成:

  1. 事故——32 个变量,详细说明位置、时间、日期、照明、天气和路面状况、伤亡人数、道路类型和其他变量。每个观察结果都代表了 2016 年向警方报告的 136,621 起涉及伤害的碰撞中的一次。
  2. 伤亡人数——通过“事故指数”链接到事故表,该表有 16 列,提供了有关伤亡人数的详细信息。共有 181,384 行,每行代表一个在碰撞中受伤的人。
  3. 车辆——此表给出了涉及碰撞的车辆的详细信息,但不用于本次调查

我还获得了政府对 2016 年英国不同类型道路上行驶距离的估计[3],2016 年每周每天每小时的道路交通相对密度[3],以及 2016 年地方当局(LA)层面的英国人口[4]。国家统计局提供的给出每个洛杉矶地理边界的 shapefile 用于制图目的[5]。

数据准备

数据中的分类变量存储为数字代码,单独的电子表格详细说明了每个变量的每个代码的含义。为了将数据转换为可读的格式,它与数据字典一起被加载到 Pandas 数据框中,代码被转换为值,然后被导出到一个新的 csv 中,用于所有剩余的工作。

初次查看时,数据似乎几乎完全完整,但仔细检查后发现,一些值相当于缺失数据(例如“未知”)。有 3999 项记录的关键变量数据缺失。这些只代表了不到 3%的数据,所以我认为它们对整体结果影响很小,并将其删除。

为了调查不同道路类型的事故率,我需要对不同道路类型的行驶距离进行综合评估[3]。这两个数据集对道路类型使用不同的分类,因此我将主数据集中更细粒度的道路类型转化为行驶距离估算中使用的类型。

国家一级

首先,我选择检查每起事故发生时的照明条件、路面条件和天气条件,以及它们发生的时间。

照明、道路和天气条件

所有这些变量显示了相似的分布(见图 1),一类占观察值的 70-85 %,二类占 10-25 %,其余为不常见情况。这并不奇怪,因为尽管没有关于天气状况的数据,我们知道在英国天气通常是干燥和晴朗的(与刻板印象相反!),但有时会下雨,更多的驾驶是在白天进行的。

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

Fig 1: Occurrence of Environmental Conditions

跨时间分布

接下来我想寻找的是一种季节性模式。按日期对事件进行分组产生了图 2 所示的曲线图。虽然方差在冬季月份略高,但全年的总比率变化很小(月平均值的标准偏差小于 5%),如虚线回归线所示。考虑到每月交通量的变化,标准偏差仍然只有 8%。

有趣的一点是 12 月下旬的三个异常值。这是一年中撞车次数最少的三天:圣诞节、节礼日和除夕。

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

Fig 2: Traffic accidents throughout the year. Outliers (>2sd from mean) are highlighted in red.

按一天中的时间对事故进行分组显示,早晚高峰时的事故率不足为奇,夜间的事故率比白天低得多。将原始数据除以每小时的相对交通流量显示出非常不同的模式,夜间的相对事故率远远高于白天,高峰时间的影响较小。

然而,这种变化似乎不太可能是光照条件的结果,因为 12 月和 6 月的模式没有显著差异,尽管这两个月的日照时间非常不同。

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

Fig 3: Distribution of accidents throughout the day

比较地方当局

为了在区域之间进行比较,我将分类变量“光照条件”、“天气条件”和“地表条件”转换为虚拟变量,并按 LA 分组,给出每个 LA 的每个值出现的频率。

在这一阶段还纳入了人口估计,从而能够计算每 1000 名居民的洛杉矶事故率。这显然是一个不完善的衡量标准,因为它假设了一个地区的常住人口和开车到那里的人之间的关系,这不一定有效,但它为分析提供了一个良好的起点。洛杉矶的道路交通量在这里非常有用,但它们仅在国家一级可用。

为了避免扭曲结果,一个极端的异常值洛杉矶,伦敦金融城,被确定并删除。由于其居民人口少,但非常繁忙,该市的事故率为每 1000 名居民 38.8 起,是第二高的洛杉矶事故率的六倍多(威斯敏斯特为 5.94 起,可能受到类似偏见的影响,但程度较低,不会明显影响结果)。

虚拟变量计数被转化为每个 LA 的总事故计数的比例。在没有详细天气数据的情况下,这为我提供了一个每个地方的天气状况的代理。

考虑到这些变量的偏斜性质(参见照明、道路和天气条件部分),并且为了便于变量之间以及 LAs 之间的比较,这些比例在 LAs 中的分布在 0 和 1 之间进行了重新调整。

这一过程产生了 18 个新列。将每一项与事故、伤亡、重伤和死亡率相对照,并计算 Pearson 和 Spearman 的等级分数,结果显示这些组合中的大多数并没有很强的相关性。在进行的 72 次比较中,表 1 列出了绝对相关系数大于 0.3 的 5 次比较。值得注意的是,没有一个选定的环境条件与照明有关。

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

Table 1:Correlation between environmental conditions and accident or casualty rate

确定了潜在的相关性后,下一步是建立一个回归模型,看看这个模型如何适用于全国。多元回归假设预测变量之间没有关系,但很明显在这种情况下会有一些关系。两个天气条件值和两个路面条件值是源自相同变量的成对值。此外,潮湿的路面显然与下雨有关,干燥的路面则与好天气有关。图 4 证实了所有四个变量都是密切相关的。

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

Fig 4: Confirming co-linearity of potential predictors

这允许使用简单的单变量回归模型。选择“没有大风的雨”是因为它与事故率的相关性最强。图 5 显示了它们的关系。然后从每个地方当局的真实事故率和图 6 中绘制的残差中减去得到的多项式回归模型(以红色显示)。

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

Fig 5: Raining, no high winds against Accident Rate

该模型没有显示出明显的区域模式,尽管在伦敦和伯明翰周围的郊区可以看到高于预期的事故率。

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

Fig 6: A map of the UK showing the difference between true accident rate and that predicted by a linear regression model based on rainy, low wind weather conditions. High values indicate a higher than expected accident rate.

随着天气和地表条件被确定为事故率的一个可能的促成因素,我想看看是否有可能确定这些条件具有相似频率的 LAs 组。k 表示在重新标度的路面条件下的聚类没有提供好的结果。还尝试了聚类,将变量重新调整为均匀分布,但这给了较罕见的条件太多的权重。回到原来的比例产生三个清晰的集群。图 7 显示了最接近每个集群质心的 LA 的轮廓和集群的地理分布

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

Fig 7: Clustering on Surface Conditions. Left: Geographical distribution of clusters. Right: Parallel coordinates plot showing the profile of the LAs closest to the cluster centroids.

讨论结果

这项调查的预期是,在黑暗中和恶劣天气下驾驶是危险的,这将通过冬季以及在通常更寒冷和更潮湿的地区(该国的北部和西部)较高的车祸率得到证明,但这并没有得到结果的支持。全年交通事故率无明显变化;每月的事故率变化很小,12 月和 6 月的每小时事故模式非常相似。分析还发现,在不同照明条件下发生的事故比例与这些事故的发生率或严重程度之间没有联系。

天气/路面状况与事故率之间存在关系,但与预期相反。涉及潮湿条件的事故比例较高的 LAs 的总体事故率往往较低。

一个可能的原因是,糟糕的天气不但没有导致更多的事故,反而减少了事故,因为它会阻碍驾驶,导致司机减少,道路不那么拥挤,车速降低。这种关系不是特别强,但这可以支持上述假设,因为无论天气如何,经常需要旅行。准确的洛杉矶每日天气记录和交通流量估计将允许在这一地区进行更大的调查。

按照城市区域的清晰地理模式,该国温暖、干燥的南部和东部,寒冷、潮湿的北部和西部,以及一些海拔较高的地区,如奔宁山脉,有可能识别出具有类似事故状况的 LAs 集群(图 7 ),这些集群与预期相符。

虽然结果有些令人惊讶,但调查的目标已经达到,但仍有许多数据领域可以进一步调查,例如在不同条件下,交叉口布局或车辆类型如何与碰撞率相关。

最后…

感谢阅读!如果你喜欢我的作品,请留下一些掌声。如果你想了解更多,我使用的代码可以在 GitHub 上找到,还有随同工作的原始报告,比这篇文章更深入一点。

工具

除了在 Excel 中为准备加载数据而做的一些微小的格式更改之外,所有其他工作都是使用 Python 完成的。Numpy 和 Pandas 用于大部分数据操作。Sci-kit Learn 用于归一化数据(quantile_transform 和 MinMaxScaler)、Kmeans 聚类(KMeans)和识别最接近每个聚类中心的 LA(pairwise _ distances _ arg min _ min)。Matplotlib 和 Seaborn 用于基于图形的可视化,Geopandas 用于地理可视化。

参考

[1] D. for T. UK 政府,“英国报告的道路伤亡人数,年度报告:2016—gov . UK”[在线]。可用:https://www . gov . uk/government/statistics/reported-road-residences-great-Britain annual-report-2016。【访问时间:2017 年 10 月 30 日】。

[2] D .代表英国政府,“道路安全数据—数据集”,2017 年。【在线】。可用:https://data.gov.uk/dataset/road-accidents-safety-data.【访问时间:2017 年 10 月 30 日】。

[3] D .对于 T. UK 政府,“GB 道路交通计数-数据集。”【在线】。可用:https://data.gov.uk/dataset/gb-road-traffic-counts.【访问时间:2017 年 11 月 5 日】。

[4] O 代表 N. S .联合王国政府,“联合王国、英格兰和威尔士、苏格兰和北爱尔兰的人口估计数——国家统计局。”【在线】。可用:https://www . ons . gov . uk/peoplepulationandcommunity/populationandmigration/populationestimates/datasets/populationestimates forukenglandwalesscotland northern Ireland。[访问日期:2017 年 11 月 30 日]。

[5] O .对于 N. S. UK 政府,“英国地方当局辖区(2016 年 12 月)完全剪切边界—数据集。”【在线】。可用:https://data . gov . uk/dataset/local-authority-district s December-2016-full-clipped-boundaries-in-great-Britain 2。【访问时间:2017 年 11 月 30 日】。

新加坡的汽车注销:可以预测吗?

原文:https://towardsdatascience.com/car-de-registrations-in-singapore-can-they-be-predicted-e531327ea1c7?source=collection_archive---------17-----------------------

R 中使用 ARIMA 和随机森林的时间序列建模

(编辑:我最近在 Python 上复制了整个项目,GitHub repo 的链接是这里!)

“你好世界!”

对于我的第一篇帖子,我想简单谈谈我在 2018 年夏天从事的一个预测项目。这是一个令人愉快的过程,而且非常有趣。鉴于我在维也纳的冬季交流项目中获得的一些教育启示(基本上我有很多空闲时间),我决定就我的结果写一篇短文。此外,这将是一个从更广泛的社区寻求反馈和评论的好时机,作为更广泛的学习体验的一部分。

免责声明:我涉足统计学/数据科学/ML 纯粹是出于兴趣(当然也是为了赶上 21 世纪的潮流),所以我尽最大努力让自己掌握所有必要的知识。如果在下面的帖子中有任何技术上的误解,请告诉我正确的方向!😃

我们走吧!:

语境

在新加坡,与世界上其他国家的居民相比,个人拥有汽车对新加坡人来说有着更不同的意义。为了成为一个“备受尊敬”的车主,你必须首先获得一个有效期为 10 年的权利证书。确切地说,在这里获得 COE 的过程对我来说有点混乱,但这涉及到某种形式的投标。只有当您成功地为您的车辆获得正确的 COE 类别时,您才能最终拥有您的汽车。

也就是说,当汽车的 COE 达到 10 年标志时,它的道路使用不再合法。因此,车主可以选择购买一辆拥有新 COE 的新车,更新他们的 COE,或者干脆报废汽车以获得某种形式的折扣。在任何情况下,如果您选择不更新当前汽车的 COE,您将需要注销它。

那么汽车注销数据到底有什么大不了的呢?:

  • 可以说,汽车注销的趋势对于那些产品围绕汽车 10 年生命周期的公司的商业决策具有重要意义。
  • 这些趋势也可能是消费者情绪的宏观经济指标。

在这篇文章中,我将只是(无聊地)试图无力地预测新加坡汽车注销的未来价值。我在这个项目上的 Github repo 可以在这里找到!

第 1 部分:数据准备和可视化

所有数据都可以在 Singstat 表格生成器上找到,这是一个非常棒的工具。我要看的车的类别是B 类是 1600cc 及以上的车,或者发动机功率输出超过 97 kW。该数据为月度序列,第一个时间点为 1990 年 2 月。对时间序列图的初步扫描显示了一些异常值,我决定使用 tsclean 函数清除这些异常值。

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

Figure 1: Time Series of Cat B car de-registrations

对我来说看起来很像时间序列图。我观察到某种形式的单周期行为(但在没有更多数据点的情况下,我们不能太确定),没有明显的季节性和总体上升趋势。

在通过任何预测模型运行数据之前,我会首先将它们分成训练/测试集。对于这篇文章,训练集将是截至 2018 年 3 月的所有数据点,我将在随后的 4 个月(2018 年 4 月:7 月)测试我的模型。为了便于说明,训练和测试数据分割显示为上面时间序列中紫色虚线左侧和右侧的点。

第 2 部分:拟合 ARIMA 模型

我想尝试的第一个模型是 ARIMA 模型。本质上,ARIMA 由三部分组成:自回归部分(AR§)、积分部分(I(d))和移动平均部分(MA(q))。我很想深入了解更多的细节,但我不认为我是合适的人选。对于 ARIMA 更多的技术解释,我发现在谷歌上搜索“什么是 ARIMA”的第一个链接是最有信息量的!

我在这里的任务是指定这三个参数 (p,d,q) 到底是什么,这可以手动完成——这是我接下来要做的,并且使用预测包中的 auto.arima 函数在 R 上自动完成。

为了让我能够拟合 ARIMA 模型,数据必须首先是稳定的。平稳本质上意味着时间序列的均值和方差不是时间的函数。根据这一假设,我认为从图 1 中可以很清楚地看出,这一时间序列不是平稳的。为了证实这一点,我绘制了时间序列的 ACF 和 PACF 图,以及一个增强的 Dickey Fuller (ADF)平稳性测试来证明我的说法:

Augmented Dickey-Fuller Test
Dickey-Fuller = -1.268, Lag order = 6, p-value = **0.8854**
alternative hypothesis: stationary

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

Figure 2: ACF and PACF plots of the Cat B vehicle de-registration

ADF 的高 p 值告诉我们,我们不拒绝零,表明序列确实是非平稳的。从 ACF/PACF 图中,我们可以推断出两件事:

  • 在 ACF 图中,稳定下降的模式表明了 B 类车辆注销与其滞后之间的相关性,本质上意味着该序列不是稳定的
  • ACF 的稳定下降模式和 PACF 的急剧下降(滞后 3 之后)表明 3 阶 MA 模式(q = 3)

为了将我的非平稳序列转换成平稳序列,我将对序列进行一次差分,并运行与上述相同的程序来测试差分后的序列现在是否平稳。

Augmented Dickey-Fuller Test
Dickey-Fuller = -6.3372, Lag order = 6, p-value = **0.01**
alternative hypothesis: stationary

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

Figure 3: ACF and PACF plots of the Cat B vehicle de-registration after 1st differencing

不错,在对序列进行一次差分后,ADF 测试现在显示序列是稳定的,但 ACF 图仍然显示一些与滞后相关的迹象,每 2 个滞后出现一次。类似地,PACF 图显示了每 5 或 6 个滞后的循环模式。也许可能的模型会有参数 (p = 5:6,d = 1,q = 2) ?为了便于练习,我确实循环了几个 (p,d,q) 的组合,并选择了 AIC 值最低的模型,这可以在我的脚本中看到。然而,在这篇文章中,我将展示来自 auto.arima 函数的结果。

Series: train_ts_arima$Catb_clean 
**ARIMA(3,1,2)** with driftCoefficients:
 ar1 ar2 ar3 ma1 ma2 drift
 -1.4925 -1.3896 -0.4577 0.9660 0.7325 8.7529
s.e. 0.0963 0.0992 0.0625 0.0965 0.0872 5.4097sigma² estimated as 25681: log likelihood=-2166.91
AIC=4347.81 AICc=4348.16 BIC=4374.49

嘿!至少我有两个参数是正确的! auto.arima 函数指定 (p = 3,d = 1,q = 2) 为现在的最佳模型,让我们看看模型残差是否有意义,以及我是否可以使用该模型进行未来预测。

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

Figure 4: ARIMA model residual,

嗯。模型残差似乎具有变化的方差,并且在 ACF 和 PACF 图中有显著的尖峰,特别是在滞后 12 左右重复出现。对此能做些什么?也许我可以试着将 p或 q设置为 12,然后看看结果如何,或者我也可以在拟合 ARIMA 模型之前对这个系列进行自然记录(事后看来,我应该早点这么做)。尽管如此,为了便于说明,请允许我仅使用这个当前模型来预测未来四个月的情况- 注意,这个模型可能不是最准确的。

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

Figure 5: Actual values in black, fitted ARIMA values in red, new forecasted values in blue

嗯,样品内拟合似乎很有希望。在我的拟合值中似乎有一个周期的超前,但这可能是因为在拟合函数中的 h 规范,它定义了它将预测多少步。样本外性能如何?

放大到图形的右上方(蓝色)会产生:

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

Figure 6: Forecasted values for (April : July 2018) using ARIMA model in blue, actual figures in black

2018 年 4 月至 7 月的预测值似乎有点偏离,但嘿,我想这是意料之中的。我可以想象大量的宏观经济和社会因素/指标可能会对汽车注销产生影响,因此期望该模型仅根据其历史价值来预测未来价值可能会有所推动。将来,引入其他解释变量的 ARIMAX 模型可能有助于改进模型预测。

第 3 部分:随机森林时间!

在维也纳的冬季交流中,我主要学习了机器学习应用模块,并正式接触了当今世界使用的各种预测模型。我的教授接着开玩笑说,“如果你不知道如何处理你所有的数据,就把它们扔进一个随机的森林模型,看看会有什么结果”。为什么我们不这样做呢?

从我的脚本中可以看出,在幕后,一些额外的数据准备是必要的。TLDR:

  • 增加了新加坡的 GDP 值、人口规模、失业数据和每个投标窗口收到的投标数量。凭直觉,我认为这些预测因素应该在影响汽车注销数量方面发挥作用。所有数据集都可以从 Singstat 获得。
  • 对于 GDP、人口和失业等数据,我需要从中获得月度数据。不幸的是,这些数据大约每季度公布一次。因此,我在 splinefun 函数下使用了一种叫做三次插值的方法来生成每月的数字。
  • 然后,我创建了所有预测值的滞后值。回想一下,到目前为止,我的四个主要预测指标是:B 类车辆注销、GDP、人口、失业和投标数据。对于 B 类车辆注销数据,我包括了多达 12 个标记,对于其余数据,我包括了多达 5 个标记。要包括的滞后数是任意确定的。
  • 训练和测试分割保持不变,但是必须对训练集进行小的调整,以减少 NA 值的数量。在这种情况下,我的训练集的起点从 1990 年 5 月移到了 2002 年 2 月。

完成后,是时候创造一个森林了!

为了实现随机森林,我将使用 caret 包, method = “rf” 。要调优的超参数只有一个,就是 mtry 。为此,我进行了网格搜索,以找出最佳值。对于交叉验证过程,我使用常见的 10 重交叉验证来减少过度拟合,并增加我的随机森林的健壮性。

结果呢?让我们来看看随机森林模型的样本内性能:

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

Figure 7: Actual values of Cat B vehicle de-registration in black, fitted RF model values in red, forecasted values in blue

还不错!这些预测在预测峰值方面有所欠缺,但总体趋势是存在的。样本外性能如何?

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

Figure 8: Actual values in black, forecasted RF values in red

在预测 2018 年 4 月至 7 月的价值方面,RF 模型似乎做得更好。如您所见,至少在四月和五月,预测值似乎非常接近实际值。然而,它没有预测到 6 月份的下降,7 月份的预测也略有偏差。

同时,让我们来看看变量的一些相对重要性:

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

Figure 9: Variable importance plot (note that if a variable is a lagged variable it is denoted “…_lag”.

这里的一个要点是,前 7 个“最重要”的变量是滞后值。现在我知道这是有意义的,因为我们经常查看当前时间段内发生的事情,以便为下一个时间段做出决定,但在真实世界的数据集中看到这种情况是非常令人着迷的。

结论

嗯,就是这样!这标志着我第一次尝试在真实世界数据集(而不是通常的 iris 或 titanic 数据集)上玩预测建模的结束。从商业角度来看,鉴于汽车市场在消费者家庭支出中所占的比重如此之大,我相信这些模型会有很多应用。写这篇文章是一个非常愉快的过程,我非常感谢反馈和评论!

参考

[## ARIMA 预测简介

具体话题经验:新手职业经验:一些行业经验以前的知识…

www.datascience.com](https://www.datascience.com/blog/introduction-to-forecasting-with-arima-in-r-learn-data-science-tutorials)

《转行》:等等,什么?

原文:https://towardsdatascience.com/career-change-wait-what-3c687f05fc49?source=collection_archive---------4-----------------------

作为一个刚刚转行 10 年的人,面试官通常会问这样一个问题:“你转行的灵感是什么?”

我讨厌“职业改变”这个词,它意味着我已经改变了定义我是谁和我人生道路的东西。Pivot 似乎更准确地描述了我在过去 12 个月里所完成的事情。

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

Taking another path around that braid in the stream. (Photo credit: Zoltan Sylvester)

我进入地球科学的原因和大多数同龄人一样:

  1. 我喜欢在外面
  2. 我喜欢科学
  3. 我是一个天生的故事讲述者

地球科学是野外工作和讲述地球故事的科学的完美结合。这要求我在科学工具领域全面发展,调用化学、物理和(有时)生物学来剖析岩石、褶皱或山脉带的故事。

临近研究生毕业时,我不得不面对下一步该做什么的艰难决定。学术界的职业?出版还是灭亡?或者……选择从事石油和天然气行业?在休斯顿…

我选择了石油和天然气行业,与一家(超级)大型石油公司签约。

我的头几年有点像蜜月期。一切都很好,我从运营部开始,那里的事情进展很快。我负责就我们定期在岸上钻探的油井做出价值约 100 万美元的决策,并且每天都在学习新东西。我在其他几个轮岗中取得了进展,担任了油田开发、评估准入机会、勘探和评估方面的角色。我最终专注于现场评估,这是一个金发女孩的情况,既不是太少的数据让一个人发疯,也不是太多的数据与之前根深蒂固的假设相矛盾(它发生了)。

随着时间的推移,我开始看到装甲扭结。从纸面上看,一切仍然令人惊叹和壮观。我是一名探险家、地图绘制者和高知名度项目的不确定性/风险评估员(甚至是 B 级!).

然而,我在事业上相当不开心。这项工作听起来很吸引人,我在新的前沿领域研究尖端的“大”数据。这太令人着迷了。然而,在更深的层面上,时间表(很多时候是 5-10 年的现场开发决策)太长了,让我无法保持参与。老实说,很多天我都没有发挥出自己的潜力,这最终令人不满意。

好吧,够了。在当前工业不景气的情况下,当有人给我一份诱人的遣散费时,我就上钩了。

我离开这个行业时,只有一个模糊的想法,想做一些事情,在那里我可以将我的建模、不确定性和风险评估技能运用到另一个行业。我知道里面一定有什么东西,我只是不太确定“它”是什么…

我开始探索各种途径。保险核保?金融?正式的风险评估?所有这些领域都激起了我的兴趣,但似乎并没有触及我真正想要的职业。

然后我开始在网上看到数据科学这个术语,但还没有正式接触过这个术语。我进一步研究了一下,找到了我想要的东西。

数据科学对不同的人和组织有不同的意义。然而,在其核心,数据科学归结为使用数据来帮助企业做出更好的决策。在一天结束的时候,尽我最大的努力帮助一家公司做出更明智的决定,这让我感到满意。

这对于我和公司来说都是一个绝佳的机会:

  1. 允许我增长和多样化我的行业曝光
  2. 根据我以前的行业经验,让组织从我的独特观点中受益

我的观点是,地球科学家是在四个主要方面填补数据科学角色的完美候选人。

  1. 我们习惯于杂乱的数据——这是我们的面包和黄油,几乎所有在大型或中型独立石油公司工作过的地球科学家都解释过不完整和杂乱的数据集。威尔科克斯/古近纪盐下带疯狂突出的解释?我们搞定了。这很好地解释了科技行业中杂乱数据的世界。关于如何估算或处理数据集中缺失值的想法?我们掩护你!
  2. 我们讲述令人信服的故事——在解释我们的数据后,我们最终必须自上而下和自下而上地讲述故事,以说服管理层投资钻探我们的前景或证明我们的评价井和开发井的位置。这填补了许多数据科学家的空白,能够讲述数据驱动的故事,迫使管理层做出高层业务决策。
  3. 我们每天都在使用概率/统计数据——从潜在客户的成功概率计算,到执行蒙特卡罗模拟来评估现有石油量的不确定性范围,我们拥有强大的概率和统计工作知识。
  4. 我们每天都在处理不确定性和风险评估。从执行油藏评价计划的信息价值计算,到详细的多学科全领域风险评估,我们从一开始就是决策过程中的合作伙伴。我们知道不确定性和风险之间的区别,可以帮助您理解这些模糊性对于制定大大小小的商业决策的底线意味着什么。地球不是同质的。磨练对各种各样的结果 进行建模的技能,并将它们适当地传达给管理层,这是一项在数据科学中经常被忽视的技能。

对我来说,斗争不在于我是否适合数据科学的职位,而是更符合如何让别人相信我适合这个角色和组织。石油和天然气行业以外的大多数人都没有接触过企业地球科学家的工作角色和职责,因此需要对双方进行教育。

在接下来的几周里,我将概述我是如何成功地从地球科学家转型为成熟的数据科学家的。

继续看第二集第三集第四集第五集第六集第七集第八集

CarND 项目 1:车道线检测—完整的管道

原文:https://towardsdatascience.com/carnd-project-1-lane-lines-detection-a-complete-pipeline-6b815037d02c?source=collection_archive---------0-----------------------

你们中的一些人可能知道我最近开始了 Udacity 的自动驾驶汽车工程师纳米学位。这是一个令人惊叹的独特计划,由许多关于自动驾驶主要方面的项目组成。这是我对第一个项目的解决方案:车道线检测。首先,看下面的视频——我非常相信先获得灵感,然后再深入细节。

现在你看到这个项目有多酷了,让我们深入了解一下实现的细节。

这个项目的目标是建立一个简单的图像管道(从视频中提取一帧作为输入,做一些事情,返回该帧的修改版本),它允许在简单的条件下检测车道线:阳光明媚的天气,良好的能见度,视野中没有汽车,只有直道。还有一点:我们的车道线检测器应该是线性的。还不允许多项式!

当然,这是一个玩具项目,它并不打算用于生产,但它确实有助于获得自动驾驶汽车工程师解决的问题的一些直觉。

我的成就:

—完全丢弃硬编码的感兴趣区域(除了必须初始化通道的第一帧)。
—无需任何调整,代码在任何项目 1 和项目 4(高级车道线)视频上都能很好地工作(除了最后一个更难的挑战)。无论如何,山路不在本项目范围内。

图像管道解释

让我从代码中复制并粘贴image_pipeline函数的签名和 docstring:

该管道获取一个 3 通道 RGB 图像,对其进行过滤和转换,更新LaneLine对象的内部状态,并在该图像上绘制所有需要的元素。我们可以这样想象整个管道:

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

我们可能会注意到阶段 1 和阶段 2 是相互独立的。我们可以(也应该)抽象出每个阶段的细节,以便能够以模块化的方式修改代码。

阶段 1:预处理和矢量化

第一个阶段是数据科学家和任何处理原始数据的人都熟知的:我们需要对它进行预处理,使用我们认为合适的任何矢量化程序将其转换为工作数据集。以下代码将原始图像转换为我们可以在阶段 2 中使用的矢量化数据集:

让我们简单讨论一下代码。我们的项目基于 OpenCV,这是一个非常棒的库,使用矩阵运算在像素级上进行图像操作。由于我们的管道质量依赖于正确的颜色选择,我们需要一种方法来有效地选择一系列相似的颜色(在我们的例子中是白色和黄色)。标准的 RGB 调色板不适合这个——我们必须先将我们的图像转换成 HSV 调色板

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

RGB (left) and HSV (right) palettes

接下来,我们跳过推荐的灰度和高斯模糊阶段。我发现我们可以直接进行二值化——将二值掩码与模糊图像相结合只会给我们的矢量器增加不必要的噪声。我们选择黄色和白色范围,并得到我们的帧的二进制掩码:

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

最后,我们准备矢量化这个图像。我们应用两种转换:

  1. Canny 边缘检测:一种算法,计算图像的强度梯度,并应用双阈值来确定边缘(我们在canny函数中使用(280, 360)作为阈值)。
  2. 霍夫线变换:当我们从 canny 检测中得到单个边缘时,我们可以用线将它们连接起来。我们不打算深入挖掘这个算法的细节(如果你好奇,请查看上面的链接,这里是和另一个),但主要的收获是我们确实得到了一组线(每一个都是一个Line实例,具有计算的斜率、截距等等)。

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

为了初始化视频第一帧的车道线,我们必须使用一个感兴趣的区域来屏蔽图像的其余部分。接下来,我们删除该区域,仅使用LaneLine类中的域逻辑来过滤噪声数据,并决定是否将霍夫变换的输出视为车道线的候选线段。

阶段 2:车道线更新

使用image_pipeline中的一个函数update_lane(segments)调用这样的更新。正如我们看到的,我们从最后一个阶段得到了segments对象(这只是来自霍夫变换的Line对象)。

为了方便整个内务处理,我决定使用 OOP 方法,将车道线表示为Lane类的属性:Lane.left_line, Lane.right_line。我本来可以使用global对象,但是我不喜欢这种方法:污染全局名称空间肯定是一种不好的做法,并且会给代码增加混乱和不确定性。

让我们看一下LineLane类和实例。

Line instance 表示一条直线:一段车道线或者我们从 Hough 变换中得到的任意一条直线。Lane对象的主要目的是计算它与车道线的关系:我们是否可以考虑将它作为车道线的一部分?为此,我们使用以下领域逻辑:

如此保守和挑剔的候选人选择过程让我放弃了投资回报率。我们可能仍会得到有噪声的数据,但该过程仅接受接近车道线且看起来也与当前车道线相似的线的一部分。

我们使用一个简单的逻辑来确定一个Line实例属于哪条车道线:这是由这条线的斜率决定的。这里有很大的改进空间。

Lane类是两条车道线的容器(是这个Lane类的实例——这个部分需要重构)。它还提供了许多与车道线相关的方法,其中最重要的是fit_lane_line。为了得到一条新的车道线,我将正的Line候选表示为点,并用numpy.polyfit例程拟合一个一级多项式(这只是一条线)。

**车道线稳定。**这是一个需要解决的重要问题。我使用了几种稳定技术:

  1. **缓冲液。**我的车道线对象记忆 N 个最近状态,并通过从当前帧插入一个线状态来更新缓冲器本身。
  2. **智能车道线状态更新。**如果我们在过滤后仍然得到有噪声的数据,线拟合很容易出错。如果我们看到当前帧的拟合线的估计斜率与缓冲区的平均值相差太多,我们需要更保守地处理这条线。为此,我创建了DECISION_MAT,这是一个关于如何组合当前行位置和缓冲区平均位置的简单决策矩阵。

例如,对于DECISION_MAT = [[0.1,0.9],[1,0]],我们只有两种情况:不稳定线(与平均值的斜率差太高)和稳定线。对于不稳定的线,我们使用车道当前位置和缓冲区平均值的0.10.9的加权平均值。对于稳定的线,我们简单地使用其当前位置,而不使用历史数据进行任何加权。当前帧的车道线稳定性指示器在Lane.right_lane.stableLane.left_lane.stable布尔属性中描述。如果它们中的任何一个变成了False,我会把它想象成两条车道线之间的红色多边形(稍后你会在这篇文章中看到)。

最后,我们得到了相当稳定的车道线:

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

Hough lines converted to points (left). Fitted regression line (right)

阶段 3:绘制和更新初始图像

为了很好地渲染车道线,我写了一个计算消失点(两条车道线相交的点)坐标的程序。目前为止,消失点在我的项目中有两个目的:

  1. 限制车道线外推至其坐标。
  2. 消失点以上的每条霍夫线都不能被认为是候选线。这是一种定义感兴趣区域的软方法(而不是硬编码)。

我喜欢很多漂亮的可视化效果,所以我决定实现更多的绘图例程,并为它们使用统一的签名:

绘制本身是作为对初始图像进行变换的一个步骤来实现的:

正如我们在这里看到的,我渲染了两个快照,并将它们添加到第三个图像的仪表板上,这是一个经过转换的初始图像,上面有车道线。这种结构使得重新组合要在图像上呈现的内容变得很简单,并有助于可视化多个组件——所有这些都没有任何麻烦或重大的代码更改。

This is the video for Project 4. Linear detector works pretty well on it

顺便说一下,车道线之间的绿色多边形偶尔会变成红色,这是我前面描述的车道线的稳定性指示器。

从这里去哪里?

这个项目远远没有结束。我接触它越多,我就越能发现新的工作内容:

  • 使得检测器是非线性的。据我所知,这是项目 4 的主要目标:高级车道线检测。
  • 代替图像二值化的简单方法(选择颜色范围),实现一个 CNN,它可以在不同条件下检测车道线的部分。
  • 道路检测。检测道路本身并将其用作 ROI 是一件很棒的事情。

这个项目的完整代码可以在 GitHub(Jupyter 笔记本的直接链接)上获得:https://GitHub . com/kidra 521/carnd/blob/master/P1 _ lane _ lines _ detection/P1 . ipynb

附:有趣的部分

当然,这个帖子里应该有好玩的部分!现在让我们看看,当遇到山路时,这种线性检测器是如何失败的。虽然对于这样一个快速变化的斜坡来说太慢了,但它的开始还是令人满意的:

但是在森林中,当光线变化很快时,它会被完全破坏:

这太棒了——我将有机会在项目 4 中应对这一挑战。

敬请期待未来更多无人驾驶汽车的精彩!

猫还是狗?朴素贝叶斯简介

原文:https://towardsdatascience.com/cat-or-dog-introduction-to-naive-bayes-c507f1a6d1a8?source=collection_archive---------14-----------------------

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

如果你读过任何关于机器学习的介绍性书籍或文章,你可能会偶然发现朴素贝叶斯。这是一种通俗易懂的分类算法。

让我们退一步,解开朴素贝叶斯。

简而言之,朴素贝叶斯就是

  • 分类算法
  • 监督学习算法
  • 概率分类器

朴素贝叶斯是一种分类算法。一个复杂的名字来说,给定一个例子,朴素贝叶斯能够给它分配一个类别,就像给它贴上一个标签说,如果它看到一只猫的图像或一只狗的图像。

它也是被称为**监督学习算法的算法家族的一部分。**这是通过查看正确分类的示例来学习的算法类型。按照机器学习的说法,每个例子都是一组特征,即描述特定例子的属性。该算法用来学习的一组例子被称为训练集,它用来检查其分类能力的新的和从未见过的例子被称为测试集。算法最终向其分配一个标签。

朴素贝叶斯也是一个概率分类器。算法学习来预测的类或标签是创建它所显示的所有类的概率分布的结果,然后决定将哪个分配给每个示例。概率分类器查看条件概率分布,即在给定一组特定特征的情况下分配一个类别的概率。

假设你有这个(微小的)数据集,将动物分为两类:猫和狗。

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

A minuscule, dummy dataset 😁

如果该算法要计算出将哪个类分配给与上述类似的示例,即预测其类,它将考虑两件事:

a)假设毛发颜色为黑色,体长为 18 英寸,身高为 9.2,体重为 8.1 磅,…

b)在给定相同特征的情况下,成为狗的概率。

一般来说,条件概率是 P(类别|特征集)。在我们的例子中,classes = {cat,dog}和 feature set = {hair color,body length,height,weight,ear length,爪子}。

朴素贝叶斯将计算所有类的条件概率,因为它是朴素的,它将假设每个特征都是相互独立的。它将假设任何特征之间没有相关性,因此,它们对预测类的贡献不受其他特征的影响。

名字说明了一切。它使用贝叶斯定理来计算条件概率

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

Bayes Theorem

概率 P( | 特征集)也被称为后验,即在考虑所有给定条件后,事实发生后的概率。它是给定一组可以在猫身上观察到的特征(属性),将一幅图像分类为一只猫的图像的概率。P( )被称为先验,因为它是你事先知道的所有信息,是猫还是狗的概率。P( 特征集)被称为证据,因为它是你所观察到的概率,特征集。而 P( 特征集 | )被称为可能性,意思是给定这个特定的特征集,这是一个猫的图像的可能性有多大。

计算完所有类别的概率后,就该做决定了。

我应该给这个例子分配什么类呢?

将一个类别分配给一个新的、从未见过的特征集的决策是一个 最大后验决策 。一种是估计哪个后验概率,例如 P(特征集|猫)或 P(特征集|狗),将最大化看到该特定类的实例的可能性。

一般来说,你有

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

左手边那个戴着帽子的就是你的预测。

该算法将挑选具有较高概率的类。

总之,朴素贝叶斯利用贝叶斯定理来学习最能描述训练集中提供的示例的特征。它依靠最大后验决策规则来预测测试集中提供的每个新的、以前从未见过的示例的类别。

主要优点是

  • 简单
  • 需要小的训练集
  • 计算速度快
  • 与特征和训练示例的数量成线性比例
  • 处理二进制(猫,不是猫)和多类分类(猫,狗,老鼠)

缺点

  • 在现实世界中很少成立的强特征独立性假设。记住,这是天真的
  • 基于其独立性假设,可能提供较差的估计

感谢阅读!

CatBoost 与轻型 GBM 和 XGBoost

原文:https://towardsdatascience.com/catboost-vs-light-gbm-vs-xgboost-5f93620723db?source=collection_archive---------0-----------------------

谁将赢得这场预言之战,代价是什么?我们来探索一下。

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

我最近参加了这个 Kaggle 竞赛(斯坦福大学的 WIDS·数据通),在那里我使用各种推进算法进入了前 10 名。从那以后,我一直对每个模型的精细工作非常好奇,包括参数调整、优点和缺点,因此决定写这篇博客。尽管最近神经网络重新出现并受到欢迎,但我还是专注于 boosting 算法,因为它们在有限的训练数据、很少的训练时间和很少的参数调整专业知识的情况下仍然更有用。

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

由于 XGBoost(通常称为 GBM 黑仔)在机器学习领域已经有很长一段时间了,现在有很多文章专门讨论它,这篇文章将更多地关注 CatBoost 和 LGBM。以下是我们将涉及的主题-

  • 结构差异
  • 每个算法对分类变量的处理
  • 了解参数
  • 数据集上的实现
  • 每种算法的性能

LightGBM 和 XGBoost 的结构差异

LightGBM 使用一种新颖的基于梯度的单侧采样(GOSS)技术来过滤数据实例,以找到拆分值,而 XGBoost 使用预先排序的算法&基于直方图的算法来计算最佳拆分。这里的实例指的是观察结果/样本。

首先,让我们了解预排序拆分是如何工作的

  • 对于每个节点,枚举所有功能
  • 对于每个特征,按特征值对实例进行排序
  • 使用线性扫描来决定沿着该特征基础的最佳分割信息增益
  • 根据所有功能选择最佳分割解决方案

简而言之,基于直方图的算法将一个特征的所有数据点分割成离散的仓,并使用这些仓来找到直方图的分割值。虽然它在训练速度上比列举预排序特征值上所有可能的分裂点的预排序算法更有效,但在速度上仍落后于 GOSS。

那么是什么让这种戈斯方法如此有效呢? 在 AdaBoost 中,样本权重作为样本重要性的一个很好的指标。然而,在梯度提升决策树(GBDT)中,没有本地样本权重,因此不能直接应用为 AdaBoost 提出的采样方法。接下来是基于梯度的采样。

梯度表示损失函数的正切的斜率,因此在逻辑上,如果数据点的梯度在某种意义上很大,这些点对于找到最佳分裂点是重要的,因为它们具有较高的误差

GOSS 保留所有具有大梯度的实例,并对具有小梯度的实例执行随机采样。例如,假设我有 500,000 行数据,其中 10,000 行具有更高的梯度。所以我的算法会选择(较高梯度的 10k 行+随机选择的剩余 490k 行的 x%)。假设 x 是 10%,根据找到的拆分值,所选的行总数是 500K 中的 59k。

这里采用的基本假设是,具有小梯度的训练实例的样本具有较小的训练误差,并且它已经被很好地训练。
为了保持相同的数据分布,在计算信息增益时,GOSS 对梯度较小的数据实例引入了常数乘数。因此,GOSS 在减少数据实例的数量和保持学习决策树的准确性之间取得了良好的平衡。

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

Leaf with higher gradient/error is used for growing further in LGBM

每个模型如何对待分类变量?

CatBoost

CatBoost 可以灵活地给出分类列的索引,以便可以使用 one_hot_max_size 将其编码为一键编码(对于不同值的数量小于或等于给定参数值的所有要素使用一键编码)。

如果您没有在 cat_features 参数中传递任何东西,CatBoost 会将所有列视为数字变量。

注意:如果 cat_features 中没有提供包含字符串值的列,CatBoost 会抛出一个错误。此外,默认情况下,具有默认 int 类型的列将被视为数字,必须在 cat_features 中指定它,以使算法将其视为分类。

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

对于具有大于 one_hot_max_size 的唯一类别数的剩余分类列,CatBoost 使用一种高效的编码方法,该方法类似于均值编码,但减少了过度拟合。过程是这样的—
1。以随机顺序排列该组输入观察值。产生多个随机排列
2。将标签值从浮点或类别转换为整数
3。使用以下公式将所有分类特征值转换为数值:

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

其中, CountInClass 是对象的标签值等于“1”的次数,当前分类特征值
之前是分子的初始值。它由起始参数决定。 TotalCount 是具有与当前值匹配的分类特征值的对象总数(直到当前值)。
在数学上,这可以用下面的等式来表示:

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

LightGBM

与 CatBoost 类似,LightGBM 也可以通过输入特性名称来处理分类特性。它不会转换为一键编码,并且比一键编码快得多。LGBM 使用一种特殊的算法来寻找分类特征的分割值[ 链接 ]。

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

注意:在为 LGBM 构建数据集之前,应该将分类特征转换为 int 类型。即使通过 categorical _ feature 参数传递,它也不接受字符串值。

XGBoost

与 CatBoost 或 LGBM 不同,XGBoost 本身不能处理分类特征,它只接受类似随机森林的数值。因此,在向 XGBoost 提供分类数据之前,必须执行各种编码,如标签编码、均值编码或一键编码。

超参数的相似性

所有这些模型都有许多参数需要调整,但我们将只讨论重要的参数。下面是这些参数的列表,根据它们的功能以及它们在不同型号中的对应关系。

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

数据集上的实现

我使用的是 2015 年航班延误的 Kaggle 数据集,因为它同时具有分类和数字特征。该数据集大约有 500 万行,对于每种类型的提升,该数据集有助于判断优化模型在速度和准确性方面的性能。我将使用这个数据的 10%的子集~ 50 万行。
以下是用于建模的特征:

  • 月、日、星期几:数据类型 int
  • 航空公司和航班号:数据类型 int
  • 出发地 _ 机场和**目的地 _ 机场:**数据类型字符串
  • **出发时间:**数据类型浮点型
  • ARRIVAL_DELAY :这将是目标,并被转换为布尔变量,指示超过 10 分钟的延迟
  • 距离和飞行时间:数据类型浮点

XGBoost

轻型 GBM

CatBoost

在优化 CatBoost 的参数时,很难传递分类特征的索引。因此,我在没有传递分类特征的情况下调整了参数,并评估了两个模型——一个有分类特征,另一个没有分类特征。我单独调整了 one_hot_max_size,因为它不会影响其他参数。

结果

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

结束注释

对于评估模型,我们应该从速度和准确性两个方面来考察模型的性能。

记住这一点,CatBoost 在测试集上具有最高的准确性(0.816),最小的过拟合(训练和测试准确性都很接近)以及最小的预测时间和调整时间。但这仅仅是因为我们考虑了分类变量并调优了 one_hot_max_size。如果我们不利用 CatBoost 的这些特性,它的表现最差,只有 0.752 的精度。因此,我们了解到,只有当我们在数据中有分类变量并且我们适当地调整它们时,CatBoost 才表现良好。

我们的下一个表演者是 XGBoost,它通常工作得很好。它的准确性非常接近 CatBoost,即使忽略了我们在数据中有分类变量的事实,我们已经将其转换为消费的数值。然而,XGBoost 唯一的问题是它太慢了。特别是调整它的参数真的令人沮丧(我花了 6 个小时来运行 GridSearchCV——非常糟糕的主意!).更好的方法是单独调优参数,而不是使用 GridSearchCV。查看这篇博客文章,了解如何智能地调整参数。

最后,最后一名是 Light GBM。这里需要注意的重要一点是,当使用 cat_features 时,它在速度和准确性方面的表现都很差。我认为它表现不佳的原因是因为它对分类数据使用了某种修改的均值编码,这导致了过度拟合(与测试精度相比,训练精度相当高,为 0.999)。然而,如果我们像 XGBoost 一样正常使用它,它可以实现类似的(如果不是更高的)精度,但速度比 XGBoost
(LGBM — 0.785,XGBoost — 0.789)快得多。

最后,我不得不说,这些观察对于这个特定的数据集是正确的,对于其他数据集可能有效,也可能无效。然而,有一点是肯定的,XGBoost 比其他两种算法要慢。

那么你最喜欢哪一个呢?请评论原因。
非常感谢您的任何反馈或改进建议!

查看我的其他博客这里

领英:www.linkedin.com/in/alvira-swalin

资源

  1. http://learningsys.org/nips17/assets/papers/paper_11.pdf
  2. https://papers . nips . cc/paper/6907-light GBM-a-highly-efficient-gradient-boosting-decision-tree . pdf
  3. https://arxiv.org/pdf/1603.02754.pdf
  4. https://github.com/Microsoft/LightGBM
  5. https://www . analyticsvidhya . com/blog/2017/06/which-algorithm-take-the-crown-light-GBM-vs-xgboost/
  6. https://stats . stack exchange . com/questions/307555/mathematical-differences-between-GBM-xgboost-light GBM-catboost

如果你能抓住我:GANs 或决斗神经网络的简单英语解释

原文:https://towardsdatascience.com/catch-me-if-you-can-a-simple-english-explanation-of-gans-or-dueling-neural-nets-319a273434db?source=collection_archive---------5-----------------------

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

Photo by CloudVisual on Unsplash

根据《麻省理工科技评论》的年度十大科技榜单,深度学习是 2018 年最大的突破性技术之一

【熟能生巧】

我不太确定人类,但任何从事机器学习的人都会同意,实践,或优质训练数据让机器变得完美。嗯,差不多了…但绝对比我们凡人多得多。

一个完美的 AI 实现在任何领域都和魔术没什么区别。但问题是,随着机器开始学习,它们对数据的渴望是无法满足的……就像希腊神话中的坦塔罗斯,他的渴望永远无法满足。

数据科学家的时间都花在获取(和清理)越来越多的数据以输入机器上。他们的夜晚都浪费在教授机器从所有这些数据中学习,一遍又一遍地训练模型。

“数据”和“训练”两方面的严重缺陷使得 A & I 从 m A g I c 中消失,变得毫无意义。这,就是今天 AI 进步的最大瓶颈。

但是等等…如果机器可以承担任何人类的任务,为什么这个不能呢?我们能让机器自学吗?不,这不是文字游戏。和…是的,这是可行的。

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

(Pic source: stavos on flickr)

决斗神经网络

输入 GANs …或其复杂的声音扩展,生成敌对网络。如果深度学习是下一个拿走蛋糕的大东西,那么甘就是蛋糕上的奶油。可能性从未如此令人兴奋!

但是,首先什么是 GAN?我们会试着用简单的英语来完成接下来的对话,不要使用令人讨厌的术语。所以,对诸如’概率’、感知器’、激活’、卷积等天书一样的东西,绝对说不。

我给你讲个故事吧。

上演完美的猫捉老鼠游戏

想象一部典型的电影,两个疏远的兄弟拥抱相反的人生哲学。一个人以 【操纵者】 的身份开始了印制假币的新黑社会行动,另一个人则加入了一个局,成立了一个新的部门,以 【执法者】 的身份检测假币。

首先,假设黑社会中的*‘操纵者’一开始就处于劣势,对原始货币的样子一无所知。该局的【执行者】*只知道真实货币看起来有多少的基本情况。

然后游戏开始了。

机械手开始印刷,但是最初的赝品很糟糕。它甚至不需要训练有素的眼睛来检测假货,并且每一个假货都被执法人员迅速检测出来。

操纵者很勤奋,不断制造假货,同时也学习以前的尝试中没有成功的地方。通过对假货的大量实验&一些反馈,假货的质量开始慢慢上升(当然,前提是运营没有停止!)

最终,操纵器开始获得一些随机的仿冒品,而这没有被执行者发现。因此,另一边是它的学习时间,而执行者学习如何检测这些更聪明的伪造品。

随着执法者变得更加聪明,假货再次被发现。操纵者别无选择,只能升级制假操作以制造更多看起来像真的假货。

这场持续的猫捉老鼠的游戏还在继续,并最终让操纵者执行者都成为专家。以至于赝品与真品难以区分,而且对如此精巧的赝品的检测变得几乎不可思议。

你明白了。这就是 GANs 的基本概念。

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

Photos ©Dreamworks

语境中的生成性对抗网络

现在让我们把我们的故事和演员翻译成 GANs。

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

GANs — a schematic flow with the key players

机械手执行器都是模型,是深度学习神经网络的变种。

操纵器被称为 生成器网络 ,它的任务是创建训练数据,随机启动并尽可能地逼真。执行者 鉴别器网络 ,其工作是检测并分类这些为‘真’或‘假’,并变得相当擅长。

通过将两个模型作为对手进行配对,我们为它们设置了一个健康的竞争。每个人都尝试在数千次迭代中掌握自己的工作,没有人工干预。瞧,我们最终得到了看起来像真的赝品,还有一个可以检测出大多数骗局的模型。

这就是为什么 GANs 是人工智能中的大师,因为它们既解决了现实世界中的问题当你没有足够的数据开始时生成“数据”,又解决了*“训练”模型*没有人工干预,这是一种无监督学习的形式。

至少这是他们要去的地方,而且他们已经开始行动了。在过去的几年里,GANs 稳步发展,产生了数百种变体,更多的创新正在进行中。

生成对抗网络是近十年来机器学习中最有趣的想法。— Yann LeCun,脸书人工智能公司董事

甘斯的效用是什么?

一台完美的货币印钞机或概念上类似的东西会给世界带来什么好处?显然很多,让我们看看 3 个广泛的领域。

1。创意追求

难以置信的是,机器终于打开了它们的右脑。毕竟,当一个书呆子程序员突然开始写获奖的诗歌时,谁不会感到惊讶呢?

用一种新发现的模仿真实图像的方法,GANs 开始创造想象中的名人,或带有艺术家独特签名的新杰作。这种能力的潜在用例跨越了创造性学科。

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

Imaginary Celebrities: Nvidia GANS model generated images using Celeb faces dataset as reference. (Paper)

2。翻译文本

假设你想知道一个人不戴眼镜或者换个新发型会是什么样子,你只需要创建这个。这与询问当天的天气或规划即将到来的通勤没有太大区别。

通过创造新的动植物来满足用户的需求,甘斯就像一个实现愿望的精灵。遗憾的是他们不能给作品注入生命…至少现在还没有。

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

Text to Image synthesis (Paper: https://arxiv.org/abs/1612.03242)

3。生成训练数据

GANs 承担着创建大量训练数据的重任,这些数据可以将人工智能带入进步的快车道。想象一下 GANs 产生了和我们相似的真实 3D 世界,有数百万英里的道路&所有可能的交通场景。

与其让无人驾驶汽车或无人驾驶飞机在现实世界中接受训练并引发可怕的事故,不如让它们在虚拟世界中接受训练并成为专业驾驶员。有了 GPU 计算,这可以瞬间完成。

Synthesising roads & real-life objects (GitHub: https://tcwang0509.github.io/pix2pixHD/)

虽然这些都是方向性的应用,但是 gan 已经被应用于高影响力的商业应用中,如药物研发,并且在实验的早期阶段有数百个用例。

虽然这听起来可能已经是革命性的,但甘斯最好的还在后头。本文的目的是分享一个简单、全面的教程来传播对这一重要技术的认识。现在,让我们等待魔法的展现吧!

对数据科学充满热情?随意在 LinkedIn 或者Twitter上加我。

[## Ganes Kesari | LinkedIn

在其他网站上包含此 LinkedIn 个人资料

www.linkedin.com](https://www.linkedin.com/in/ganes-kesari/)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值