服务的替代评级系统
数学之旅
抛弃历史平均水平,寻找新的方法来反映我们反馈的趋势
我们生活在评级和用户反馈发挥巨大作用的时代。本文主要关注五星评级系统及其替代方案,并提出了一种使大多数决策二元化的方法——在评级步骤之间不应该有中间地带。
你做的事情多久得到一次评价?
评级趋势
当它不仅与产品有关,而且与人、用户和提供商有关时,一切都多了一个维度:趋势。他/她最近表现如何?
所以,你可能还记得那所学校的情况,在那里你平等地获得了 5 分和 4 分(或者 A-s 和 B-s 或者任何一种评分系统)。这样,没有人能通过简单地看你的分数来从技术上衡量你的实际水平,因此你既不是 5 级也不是 4 级,而是介于两者之间!?一些学校通过给分数加正和减来避免混淆,所以你会得到 5-或 4+,这取决于老师的主观意见。呸!
亲身经历
上个学年,我接受了当一年数学老师的挑战。学校最近决定改变评分系统,每个学生将得到一个字母而不是一个数字。如果我没记错的话,比例如下:
+-------+------------+
| Grade | Percentage |
+-------+------------+
| A+ | 97-100% |
| A | 90-97% |
| B | 85-90% |
| C | 75-85% |
| D | 65-75% |
| E | 50-65% |
| F | 0-50% |
+-------+------------+
分级范围不均匀!?呸。2!为了计算平均值,人们应该找到某种加权平均值,是的——这几乎不可能向每个五年级学生解释。
我的解决方案被设计成每个学生都有机会通过测试和家庭作业获得 100 分。在三个月期间收集的分数可以很容易地转化为他/她的总成绩。
平均值示例
假设我们正在决定是乔还是苏珊的数学更好。他们的成绩如下:
Joe: 5, 5, 4, 4, 3, 3, 2, 2, 1, 1Susan: 1, 1, 2, 2, 3, 3, 4, 4, 5, 5
是的,在那段时间里,他们两个都一样好(有些主题更适合乔,有些更适合苏珊)。尽管两个学生的平均分都是 3 分,但让我们仔细看看它的发展:
乔在左边,苏珊在右边
红线代表各年级的平均值及其发展情况。请注意,乔的表现几乎总是比他的平均分差,而对苏珊来说,情况正好相反。因此,如果有另一个测试,他们的技能将得到评估,这可能是苏珊会得到更高的分数,你不同意吗?
关键在哪里?
通过简单地遵循算术平均值是通过将所有值加在一起并将结果除以分数的数量来计算的事实,则所有值具有相同的权重。第一个价值与最后一个价值同样重要,我认为这是我们应该寻求其他选择的唯一原因。我建议采用以下方法计算分数:
- 使用加权平均值,其中第一个分数的权重为 1;第二个 2 等等。
- 将算术平均值乘以某个系数。该系数应考虑最近的活动。
- 使用线性回归,推断下一个人应该得到的评分。这个预计评级应该是分数。
现在我列举了三种不同的方法。现在让我们仔细看看。
方法 1:加权平均
我按照以下方式计算加权平均值:
lst = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]def weightedavg(lst):
total = 0
weightsum = 0
for i in range(len(lst)):
total += lst[i]*(i+1)
weightsum += i+1
return total/weightsum
你能看出区别吗?
结果似乎相当令人满意:Susan 在获得第 8 分后,成绩有所提高。虽然从图中很难看出,但乔的最终得分是 2.27,苏珊的最终得分是 3.73。
有一个巨大的但是。当我们的数据集中有两个值时,第二个值是第一个值的两倍。当我们有大型数据集,并且某种服务提供商有超过 1,000 个评级时,加权平均值就开始变得非常像算术平均值,不会移动太多。每当你考虑使用这种方法时,千万不要考虑超过 50 的最新分数。
注:这个 50 只是基于我实验的一个例子。更大的数据集导致更少的波动,更少的波动意味着更少的趋势反映。如果愿意,可以调整考虑的值的数量。
方法二。将算术平均值乘以某个趋势系数
求算术平均值的概念很简单:你可以向任何理解加法和除法的人解释。如果你想稍微改变一下整体概念,只需在你的分数计算中加入一个趋势因子。
一种方法是找出三个最新分数的平均值,并将其归一化为 a[0;1]切片。一个例子:
0 represents an average of 1: the smallest possible score
1 represents an average of 5: the smallest possible scoreEverything in between should be calculated as follows:norm_score = (average - 1)/4
在前面的公式中,我们必须减去 1,因为最小的分数必须是 0(这样我们将 1 转换为 0)。而且我们必须把它除以 4,因为 1 和 5 之间的范围是 4。这样我们就可以得到一个可以使用的归一化系数。让我们使用它:
新结果:也许没什么太糟糕的
结果可以与我们上面检查的算术平均值进行比较。如果你尽了最大努力,你就没问题。如果你连续得到三个 5,那么从数学上来说,这个模型就相当于算术平均值。然而,如果你把事情搞砸了又得到了一个,你的分数会下降得很快。
“在学校不能拿低于 1 的分数。”
是的。如果你是老师,可以用 max(分数,1)来避免这种情况。该函数返回这两个值中的最大值:如果分数小于 1,则返回 1,否则返回分数。
让我们来看看另一个数据不那么平滑的例子。
Joe: 1, 5, 1, 5, 1, 5, 1, 5, 1, 5Susan: 1, 5, 5, 1, 1, 1, 1, 5, 5, 5
一个更极端的例子
分数似乎相当低!这是好事还是坏事,由你决定。我相信这会激励你更加努力,因为你必须连续三次得分才能回到榜首。
方法 3:推断以下分数
根据我们已知的值推断出以下值。来自https://www . socscistatistics . com/tests/regression/default . aspx的屏幕片段
是的,这种方法在不同的情况和例外中最脆弱,但无论如何让我们仔细看看。
线性回归帮助我们通过现有数据点确定最佳拟合线,由于 x 轴代表队列编号,我们可以根据当前趋势轻松推断下一个值。
与第一种方法一样,这种方法只能用于 10 个最新的分数。否则,趋势线会变得太水平,再次成为算术平均值。
假设我们有 10 个数据点。我们使用线性回归得到一个直线公式 y = ax + b 。预期分数将通过 x = 11(比我们拥有的数据点数大 1)来计算。
- 如果结果大于 5,则用 5 替换。
- 如果结果小于 1,则用 1 替换。
相应的代码可以在 这里找到:
瞧啊。由于数据是平滑的(1 和 5 之间没有跳跃),所以看起来相当漂亮。让我们来看看另一个数据不那么平滑的例子。
Joe: 1, 5, 1, 5, 1, 5, 1, 5, 1, 5Susan: 1, 5, 5, 1, 1, 1, 1, 5, 5, 5
一个更极端的例子
事实证明,即使在这种情况下,该评分模型也能获得反映最近趋势的值。尽管 Joe 在 1-s 和 5-s 之间交替变化,但随着他收到越来越多的分数,评分模型开始波动得更少。因此,拥有更大的数据集通常会导致分数变化更小。
另一个问题
虽然这篇文章主要是关于这个学校的例子,但让我们转到我真正想写的主题:获得服务评级,以及为什么当前的评分模型没有像数据工程师可能希望的那样工作。
我希望你们大多数人都用过叫出租车的 app。当一个司机给出他/她的确认时,你可以看到他的 5 星评分。通常这个分数是简单地通过寻找算术平均值来计算的。我还没有遇到过得分低于 4.8 的出租车司机,我从来不明白这背后的原因:
- 是因为出租车公司把分数低于 4.8 的都炒了吗?
- 是因为那些公司求所有分数的平均值吗?这样,如果一名出租车司机获得 94 个五星评级和 6 个一星评级,他/她的总得分为 4.8,它不能描述趋势。如果司机今天过得很糟糕,并且在乘坐#95 到#100 时一直是顺子,该怎么办?
注意:我并不完全熟悉不同的公司是如何计算这些分数的,我只是假设他们找到了平均值。如果你知道一些不同的平台,请给我提供一个参考。谢谢!😃
最近有人告诉我,博尔特通过使用最近的 40 个评分来计算分数,是的——他们使用的是平均值,正如预期的那样。下面是这条信息的 来源 。我将让您来决定这个评分模型是否足够动态地反映最近的活动。
二进制分数
我经常没有时间获得即时反馈,我的评分要么最高(如果我满意),要么最低(如果我不满意)。我认为很难区分不同的分数:
- 3 和 4 有什么区别,不看手册我怎么知道?
- 如果 Joe 给了 3 星的反馈,Susan 也给了 3 星的反馈,那么这在情感层面上是否意味着同样的事情呢?
因此,我想提出一个更好的办法:二进制分数。你要么对服务满意,要么不满意。此外,正反馈表示为“1”,负反馈表示为“0”。当将这些分数与上述方法结合起来时,您将总是得到一个介于 0 和 1 之间的值。之后你做什么,完全取决于你自己:
- 您可以将它乘以 100%,评级以 0-100%的范围表示。
- 您可以将它乘以 5/10(星级),评级以 0-5 或 0-10(星级)的等级表示。
结论
评分动态超赞!然而,在拥有一个简单的反馈系统(简单到足以向每个人解释)和一个反映最近活动的模型之间有一个很大的权衡。
如果你有一些观察或其他可能适用的方法,请随意分享。
我是数据科学家吗?
数据科学家的模糊定义
来源: Shutterstock
“它是否描述了一个拥有计算机科学、应用数学、统计学、经济学高等学位的真正聪明的人?从大数据中分析和提取商业价值的人?” (Asha Saxena,来自她的文章《数据科学家是 21 世纪最性感的工作吗?你如何得到一个你自己的?”、)
数据科学家。这可能是 21 世纪最性感的工作(至少《哈佛商业评论》是这么认为的)。在当今的劳动力大军中,很少有像数据科学家这样时髦的头衔。几乎每个行业都对它们有很高的需求——其中一些就在几年前你还无法理解。随着需求的持续增长,我们看到高校开始在本科和研究生阶段采用数据科学相关的课程。全国各地有一些高中开始混合和设计数据科学相关的课程和材料,以更好地为我们现在生活的这个以数据为中心的世界做好准备。但究竟什么才是真正的“数据科学家”?成为一个人需要什么?如果我有某种技能,我会自动成为其中一员吗?对我来说,类似于我们喜欢生活的数字和统计世界,没有完美的答案。
随着公司雇佣数据科学家从事“数据科学”的愿望和需求变得极其明确,定义数据科学家的界限变得前所未有的模糊。数据科学在当今世界已经变得无处不在,似乎每个人都对什么是数据科学家以及数据科学家应该做什么和不应该做什么有自己的想法和观点。正因为如此,市场上“数据科学家”的头衔越来越多。一些人拥有人工智能领域的技能,包括机器学习、深度学习和自然语言处理。有些人精通计算机编程语言,如 python、Java 和 C++。有些人有数据工程和软件开发的背景。有些侧重于市场营销和 A/B 测试。有些人拥有统计学、计算机科学、物理学、心理学、历史甚至天文学学位。一些。一些。更多一些。我想你开始明白了。定义数据科学家没有一个通用的标准。没有预先定义的清单。这些特质和技能可以跨越界限、清单和行业。学习的欲望。对挑战的渴望。解决问题的愿望。最重要的是,渴望倾听数据并从中提取有意义的价值。这些是任何数据科学家的核心,无论其教育背景、技术技能或多年经验如何。
图片由皮克斯拜的 Gerd Altmann 提供
正如我所说的,所有这些都不会让我误解,拥有一套包括以下任何经验的技能:python、R、SQL、Hadoop、云计算(AWS、GCP、Azure 等。)、随机森林、卷积神经网络、递归神经网络、主题建模等等绝对有帮助。这些是技术技能和知识,让数据科学家能够解决问题,并从数据中提取他们正在努力实现的价值。它们是获得我们都渴望的数据驱动型决策的渠道,但它们绝不意味着成为数据科学家必须勾选的方框列表。
最终,能够理解数据并知道要问的正确问题和正确的途径将一个人定义为数据科学家,而不仅仅是能够检查盒子。这些技能是在多年处理大量数据和经受不同挑战、环境和情况的过程中积累起来的。这些微妙的技能来自于你在职业生涯中的经历。数据科学家的构建模块继续堆叠在您之前打下的基础之上。
我没有提到向你的同事、合作伙伴、客户或老板解释你的技术、方法和最终解决方案的重要性。这是最后一个很少出现在工作描述中的特征,但对作为数据科学家的你来说却是至关重要的。这是你真正闪光的地方。在那里你可以炫耀你刚刚做的超棒的工作。在那里你可以推荐前进的最佳方式。令人惊讶的是,让你走到这一步的技术和算法是多么的专业和复杂——这些简直是轻而易举!—这一部分甚至会让最精明的数据科学家出错。这项技能是一个不断完善和改进的过程,但是如果没有正确翻译和解释的能力,许多令人惊叹的工作可能会落空。如果你对数据科学难题的最后一块感到满意,那么你就已经走在成为一名真正全面的数据科学家的路上了。
数据科学家这个术语是很多东西的同义词——机器学习、编码、统计——仅举几个例子,但对于它意味着什么并没有一个通用的定义。那是让你塑造自己。让您定义成为您想要成为的数据科学家和自封的数据极客的途径。如何到达那里取决于你自己。
我是确定还是不确定?—不确定性与神经网络对话
基于深度神经网络的后验概率分析
图片[1]
如果你的手机在提示你刚从后院摘的蘑菇是否有毒,最好确定一下!计算机视觉应用现在被神经网络的应用所主导。他们影响了我们每一个人的生活,因此,也增加了怀疑。关于这个黑匣子机器的可信任度,已经有很多辩论。一个模型让自己更值得信任的一个方法是告诉我们它对自己的决定有多确定,而不是仅仅说“这是我的决定”。
但是接下来的问题是,当前最先进的神经网络在确定他们对自己的决定有多确信方面有多好。
通过这篇文章,我们将了解—
- 预测确定性对模型意味着什么[置信度校准]
- 我们如何衡量它?[可靠性图和 ECE]
- 为什么我们首先应该期望模型被校准?[地图,KL 散度和交叉熵]
让我们开始我们的旅程——信心校准
*预测代表真实可能性的概率估计值的问题被称为置信度校准。*例如,给定 100 个预测,每个预测的置信度为 0.8,我们预计其中 80 个应该被正确分类。衡量这一点最简单的方法是绘制一张置信度与准确度的曲线图。这就是所谓的可靠性图。
这里的 x 轴是箱精度或正确样本的数量/该箱中的样本总数-
箱精度
y 轴是这个区间的置信度或平均概率
置信度校准
如果置信度始终等于准确度,即 x=y 线,则模型被完美校准。如果模型的校准图位于 x=y(完美校准)线之上,这意味着它对正确类别给出了更高的概率估计,这使其过于自信。正确类别的较低概率估计意味着模型是不确定的。
校准分数—预期校准误差(ECE)
我们能把可靠性图转换成一个数字来比较不同型号的校准吗?
置信度和准确性之间的期望值差异
直观上,它可以理解为模型的校准图和 x=y 线之间的差异,即完美的校准线。
真实交易——为什么我们一开始就应该期望对模型进行校准?
我们通过由下式给出的最大似然估计( MLE )来优化神经网络
即,在给定权重/模型参数的情况下,我们最大化数据的概率。如果我们添加一个正则项,我们可以看到 MLE 转化为最大后验概率( MAP )估计。如果我们有 W 上的高斯先验,P(w)就是 l2 正则化,如果我们有 W 上的拉普拉斯先验,就是 l1 正则化。
我们希望模型输出的概率与数据的真实后验相匹配!我们需要一个损失函数来最小化模型输出的标签上的分布与数据的精确后验分布之间的距离(我们通过 KL-divergence 来最小化两个分布之间的距离)。
KL 散度和损失函数
首先,我们来看看在单类分类 looks 的情况下,通常被‘取’为‘后验’的是什么。如果我们有两个类——一只猫和一只狗(请注意,这不代表数据的真实后验概率)。如果有一只狗,后半部分看起来像[0,1],如果有一只猫,后半部分看起来像[1,0]。(在这种情况下,我们的后验看起来像一个德尔塔函数
这个二元分类任务的 KL-散度可以由下式给出
其中 x 是输入图片,P 是实际分布,P_theta 是由我们的模型计算的。
平均 KL 散度可由下式给出—
我们已经可以看到这是优化神经网络最常用的损失函数的形式——交叉熵*。*
进一步简化—
因为第一项不依赖于θ项,因此不影响 argmin_theta。由此得出的等式是交叉熵损失——
因此,最小化交叉熵等同于最小化模型输出和来自数据的后验之间的 KL-散度。因此,从理论上讲,任何神经网络都应该被完美地校准(导致校准错误的原因有很多,让我们暂时把它留到另一篇文章中吧!)
[1]pymchttps://docs . pymc . io/notebooks/Bayesian _ neural _ network _ advi . html
[2]关于神经网络的标定https://arxiv.org/pdf/1706.04599.pdf
是我在训练我的机器学习模型,还是它们在训练我?
来源:http://scyfer . nl/2017/06/19/active-learning-human-in-the-loop-ai/
我从训练机器学习模型中学到的 3 个重要人生经验
声明:所有表达的观点都是我自己的。
作为一名数据科学家,我花了很多时间研究人工智能,不禁思考机器学习。随着我对构成这项神奇技术基础的核心理念的深入研究,我发现了以下三个我认为对人类进步和成功至关重要的人生经验。
1。通过错误“反向传播”达到人生目标
反向传播算法无疑是深度学习最基本的构建模块之一。算法背后根深蒂固的直觉是一个非常基本的人类想法——从错误中学习。
“通过探索和摸索,我们学习.”—歌德
在构建深度学习模型的训练阶段,当模型做出错误预测时,反向传播算法略微调整模型的参数,以便引导模型做出“更正确”的预测。人们可以把这些参数想象成调频收音机上的转盘,来回调整,直到可以清楚地听到想要的广播电台。
来源:https://s3-eu-west-1.amazonaws.com/
在追求目标时,我们常常对自己的错误、失误和失败采取弄巧成拙的消极态度。错误似乎经常让目标看起来更远,甚至无法实现,而事实上,人们可能只需要将错误视为反馈信号,并相应地调整自己的方法。著名的生活教练托尼·罗宾斯推广了一个类似的想法——2mm 规则,类似于从错误中学习,并对自己的方法进行细微调整,以朝着自己的目标前进。或许,我们可以学会用同样冷静和目标导向的视角来感知错误,深度学习模型正是用这种视角来改善其性能的。通过反向传播我们的错误,我们可以让我们的错误成为我们即将成功的基础。
2。复仇者联盟……合奏!团队合作让梦想成真
来源:复仇者联盟残局
集成是提高机器学习模型性能的一种基本方法。它是一种将多个模型结合起来以提高整体性能的技术,这通常不能由单个模型单独实现。就像让一个团队一起解决一个特定的问题一样,集合通常会提高预测能力。
“单独我们能做的很少;我们一起可以做很多事情。”——海伦·凯勒
虽然组装有多种风格,如装袋、提升和堆叠,但这些技术背后的核心理念是使用模型组合来支持彼此的优势,同时削弱单个模型的不足。同样,集思广益解决问题也是一个屡试不爽的成功公式。在商业和公司的世界里,团队合作被赋予如此重要的地位,以至于像谷歌这样的公司正在花费大量的资金来研究如何组建完美团队。团队合作最重要的是传统智慧,如果不是陈词滥调的话。然而,传统智慧和陈词滥调容易被忽视、遗忘或视为理所当然。尤其是在像我这样的技术人员中*、*有一种倾向,想要避免交流,在各自为战中解决某个特定的问题。如果一个高级工程师向一个初级工程师寻求建议,向一个开发伙伴寻求帮助会被认为是一种无能的表现。然而,我们必须记住,就像集成一样,多个机器学习模型可以弥补彼此的缺陷,团队合作是个人和团队成功的途径。
3.垃圾进,垃圾出
来源:https://I . pinimg . com/originals/B6/5f/04/b65f 044 e 766 a0f 2 Fe 8 ad 531 eee E8 e6a 0 . gif
机器学习模型的好坏取决于它接受训练的数据。如果数据被破坏,产生的机器学习模型将被破坏。如果数据有偏差,模型会产生有偏差的结果。用于训练机器学习模型的数据质量的重要性怎么强调和重复都不为过。
“每天,在你的思想之门站岗。”——吉米·罗恩
今天,海量的信息——好的、坏的、假的、有用的、无用的、无害的、有害的——每一秒钟都在贪婪地试图占据我们的精神带宽。现在,比以往任何时候都更重要的是,批判性地检查我们头脑所接触的数据的速度、数量、价值、多样性和准确性。这个话题已经在新闻、文章、书籍、博客和杂志中被大量讨论和撰写。畅销书作家卡尔·纽波特在他的书《数字极简主义》中警告我们,信息过载会产生深远的影响,不断接触“垃圾”在线内容会上瘾。正如机器学习模型受到它所接触到的数据质量的限制一样,人类的思维也受到它所接触到的信息的限制。为了做出最佳的决策,保持头脑的平静和丰富的人生经历,保持对信息质量的警惕无疑是至关重要的。
结论
在思考这三个至关重要的人生课程时,我被一种荒谬感所吸引,即从机器学习中可以发现如此重要的人类课程和原则——机器学习是一种与人工智能同义的技术,因此被认为完全不同于*人类。*尽管如此,我真诚地希望这篇文章能对所有读者起到积极的提醒作用,提醒他们从错误中学习、在团队中工作以及防范不必要的恶意信息的重要性。
借助 AWS Lambda 实现惊人的数据集成成本节约— (2022 年)
AWS 上基于服务器和无服务器数据集成中心的成本比较
介绍
数据集成是一项关键的 IT 功能,专注于向企业提供高质量的标准化数据,从而使分析、机器学习和人工智能计划能够增加商业价值。以下是一些推荐的读物(以防你需要):
云计算的主要价值主张之一是最大限度地降低资本成本,并代之以运营成本。虽然对于处于云之旅早期的组织来说,这是一个很好的起点,但从长远来看,控制运营成本的需求非常重要。这就是无服务器计算在适当的工作负载中发挥巨大作用的地方,尤其是在运行数据集成中心时。
影响云中计算系统成本的因素有多个方面。最突出的是 CPU、内存、存储、网络、数据传输(入口和出口)和 API 调用。在本文中,我将重点关注计算方面(CPU &内存)。对于给定的工作负载,这使得 AWS EC2 (基于服务器)和 AWS Lambda (无服务器)之间能够进行良好的比较。在两种模型中,其他成本成分被假定为相等。一个例外是 EC2 管理成本(运营成本)。这与 Lambda 无关,并为可以在无服务器模式上运行的工作负载创造了巨大的成本优化机会。
等效日成本(EDC)
在金融界,术语等价年成本(EAC) 用于确定在资产生命周期内拥有、运营和维护资产的年成本,同时比较具有不同成本特征的资产。我简化了这个概念,引入了术语 等价日成本*(*),来比较 EC2 和 Lambda 的日成本。这是我的定义
等效每日成本(EDC) 是给定 EC2 实例的派生每日成本,相当于 24 小时时间间隔内“n”次 Lambda 调用的成本。
作案手法
选择 EC2 实例族
AWS EC2 实例有多种形状和大小。对于我们的成本计算工作,我选择了’通用 M5 级’实例系列,并挑选了 4 个配置作为运行中心的潜在候选配置(图 1):
图 1: m-class 实例系列配置详细信息
选择 AWS 定价模式
为了确保 EC2 价格点的公平和多样化,选择了 3 种不同的定价模式。分别是— 3 年期全提前预留( 3YAUR )、1 年期全提前可转换( 1YAUC )和按需(按需)。每种定价模式的简介:
3YAUR 是最便宜的定价模式,但需要预付 3 年的费用。人们必须预订这些实例,并为服务“预先支付”,以换取最高的折扣。这种定价模式没有灵活性。
1YAUC 的折扣百分比比 3YAUR 小,但提供了更大的运营灵活性。它允许在一年的时间内改变机器的配置。预付一年的服务费用。修改配置时,会进行所需的价格调整。
按需是最昂贵也是最灵活的定价模式。它真正允许人们随意供应和取消供应 EC2 实例。尽管没有预先确定的时间段或前期成本,但与 3YAUR & 1YAUC 相比,此定价模式的总成本(在规定的时间段内)是最高的。这种定价模式的成本和灵活性选项与 Lambda 不相上下。
定义工作负载和 Lambda 概要文件
正在讨论的工作负载是一个双线程 CPU 密集型 Python 程序,它为中心处理入站数据。它的运行时间是 5 分钟(300 秒)。在无服务器模型部署中,λ配置有 3 GB 内存 ,因此导致为调用期间提供的微容器分配了 2 个 vcpu。
计算 EC2 的每日计算最大值
在我们计算 EC2 实例的 EDC 并将其与λ进行比较之前,我们首先需要计算 EC2 的最大每日计算能力。例如,一个m 5.4x largeLinuxEC2实例,配置有 16 个 vcpu和 64 个 GiB 内存,运行我们之前定义的工作负载,具有以下计算最大值:
- 并发执行=**8(16vcpu*/2)***
- 执行数/小时= 96 (( 60 分钟/5 分钟 ) x 8 )
- 执行数/天=2304(96 x 24)
表 1 计算并列出了所有 4 个实例的每日计算最大值(使用图 1 中的# vCPUs 列):
表 1:按 m 系列配置计算的每日计算最大值
表 1 中的每个计算的计算最大值*,允许我们比较 4 个不同定价模型(包括 Lambda 的)的日常成本,针对每个 EC2 配置。*
在接下来的章节中,我们将使用 m5.4xlarge 作为等价成本计算的示例。有了2304可能在 m5.4xlarge 上的每日计算最大值,我们现在计算对λ的计算等效性*。*
计算 Lambda 的成本(调用成本)
AWS 定价计算器,显示 $34.56 ,针对m 5.4x large 配置的2304Lambda调用。因此,每次调用的成本是 $0.015 。供您参考,我们工作负载的“空闲层”计算为每月 444 次调用,价值为 $6.66 。
在此成本计算练习中执行的所有计算都是“无自由层”。这是为了保持准确(精确)的等值计算。图 2 详细说明了我们如何得出 $34.56 :
图 2: AWS 价格计算器— Lambda 调用成本
使用 AWS 简单月度计算器完成 EC2 年度成本计算。 EC2 日成本 = EC 年成本/365 。对于一个 m5.4xlarge 实例,表 2 列出了所有 3 个 EC2 定价模型的每日成本及其在 2,304 次调用时的 Lambda 成本当量(LAMBDA-E )(来自图 2)。
表 2:定价模型的 Lambda 等效性—m5.4x 大型
EC2 与 Lambda 的比较——成本和调用(一)
等效日成本— EC2 与 Lambda (I)
通过计算出的 EDC ,我们可视化了所有 4 个选择的实例和 4 个不同定价模型的数据,在图 3 中等同于它们各自的每日最大值。 Lambda 在所有选择的配置和定价模式中是最贵的。坚持住,这个故事还有更多内容:)
图 3:按定价模型划分的等效每日成本— EC2 与 Lambda — m5 级实例系列(I)
LAMBDA 调用可能(LIP)
有了所有 3 种 EC2 定价模式的每日成本,我们使用所有 3 种价格来计算一辆 m5.4xlarge 的 Lambda 调用的可能性( LIP )。LIP 是一个重要的指标,因为它提供了在给定成本基础上可以进行多少计算的精确数字。这在表 3 中列出:
表 3:定价模型可能的 Lambda 调用— m5.4xlarge
表 3 显示了相应的 LIP 编号及其各自的成本。我们的 Python 工作负载和 Lambda 配置文件允许我们在 $7.07 调用 471 Lambda 。这是我们在计算成本时需要重点关注的一个重要概念。
等效的每日调用— EC2 与 Lambda (I)
表 3 中导出的 LIP 数允许我们开始使用调用来比较成本。图 4 显示了所有 4 个选择的 EC2 实例和 4 个不同的定价模型。图 4 中出现了一个有趣的现象。
图 4:定价模型可能的日常调用— m5 级实例系列(I)
考虑一下按需定价的 m5.4xlarge 的情况 Python 工作负载需要在一天内至少被调用1232次(成本—$ 18.48/天*)才具有成本效益。*
如果1232个程序没有在 24 小时内执行,我们可以有把握地得出结论——系统空闲时间。回想一下,数据集成中心的本质是处理活动的爆发,然后是“空闲/安静时间”。支付 1,232 个可能的调用而不利用所有的计算能力,会导致浪费开支。这为运营成本优化创造了机会。
有了 Lambda ,人们只需为准确的调用次数付费。空闲时间是没有成本的。这是 Lambda 的固有特性,并为我们下一个讨论主题运营成本提供了一个很好的切入点。
注意:示例 LIP 值 2,304 是 m5.4xlarge 计算能力的每日最大 Lambda 调用量(LIP)。这不是 Lambda 上的实际调用次数,而是用来衡量成本的标准。
EC2 的温柔呵护(TLC)
EC2 实例需要定期管理以进行护理和维护。这需要作为这些基于服务器的系统的运营成本考虑在内。这些成本与无服务器领域无关(纯粹从计算角度来看)。以下是数据集成中心环境下 EC2 的常规运营成本列表:
1)高可用性和灾难恢复配置所需的额外 EC2 实例(每个高可用性(HA) &灾难恢复(DR)配置至少需要 3 个 EC2 实例)
2) 弹性负载平衡器(ELB) 满足自动扩展和故障转移的需求
3)管理任务—安装、修补和升级操作系统、Route53、SSL/TLS 证书管理器、CloudWatch、备份、资源标签等
4)与 EC2 管理相关的人员成本(工资、税收、福利)
使用λ*,1–4 不会产生‘额外成本’。1–4 it 中的一些甚至与 Lambda 无关,因为其成本纯粹与计算相关。它本身支持 HA & DR,不需要自动扩展,也不需要任何操作系统安装/修补/升级。表 4 是三种定价模式下 m5.4xlarge 的日常 EC2 运营成本的示例汇总,其中人员成本为***【90.42 美元/小时*** 。*
表 4:定价模型的日常运营成本
注意:AWS 简单计算器用于 EC2 & ELB 定价。每小时 90.42 美元的人员成本是从 AWS 解决方案架构师的平均市场工资(140,000 美元)开始计算的,其中还添加了工资税(TX)和福利成本。工资税计算在**【tsheets.com】**进行,福利费用从 2018 劳动统计局 取得。
EC2 与 Lambda 的比较——成本和调用(二)
等效每日成本/每日调用— EC2 与 Lambda (II)
考虑到*$ 77.69/天的额外运营成本,每日成本和每日调用图表讲述了一个不同的故事。使用 Lambda 成本计算工具,我们得到了 $77.69 的5179**调用的额外 LIP。修改后的图表如下图 5 和图 6 所示:*
图 5:定价模型的等效日常成本— EC2 与 Lambda — m5 级实例系列(II)
图 6:定价模型可能的日常调用——m-class 实例系列(II)
通过 AWS Lambda(无服务器计算)节省成本
在增加运营成本后,关于 Lambda 的成本效益出现了以下见解:
- Lambda 与 m5.4xlarge 和 m5.8xlarge 配置相比,在所有选择的定价模式中均以显著优势胜出。表 5 列出了 Lambda 相对于 m5.4xlarge 的胜出幅度(便宜%):
表 m5.4xlarge 的每日成本利润
2.在图 6 中, m5.4xlarge 的计算当量(2,304,虚线)和实际值之间的唇差被标记为“成本优化机会”。这是不会改变计算能力的额外运营成本。其他配置也存在类似的差异。
3. Lambda 在所有 4 种 EC2 配置中胜出。从成本和灵活性的角度来看, EC2 的按需定价是与 Lambda 最接近的可比较选项。
4.与按需配置相比,Lambda 的在较小配置下赢得的利润要大得多。表 6 提供了中奖号码:
表 6:按需的每日成本胜利利润— m5 级实例系列
5.对于 m5.12xlarge 配置, Lambda 仅以5.77 美元/天的差距输给了 3YAUR。
6.对于 m5.16xlarge ( 我们最大的配置) Lambda 分别以32.25 美元和9.99 美元的差距输给了 3YAUR & 1YAUC。换句话说, EC2 只在最大配置上以 130% 的优势和以 108% 的优势稳操胜券。
结论
在我们的成本核算练习中,采用了一种 64-vCPU 机器配置,一种 3 年期全部预付保留(3YAUR) 或 1 年期全部预付可兑换(1YAUC) 定价选项,以令人信服地击败 Lambda 。鉴于 Lambda 的与 EC2 的最接近的对等物是按需定价模型,这确实令人惊讶。 Lambda 在所有采用按需定价的配置中明显胜出。因此,这种等效的日常成本计算练习提供了必要的上下文和数字细节,说明 AWS Lambda 如何使数据集成的运营成本最小化。 Go 无服务器宝贝!
令人惊讶的免费地理定位替代谷歌地图
对于年轻的初创公司和小企业来说, OpenStreetMap 为打造下一件大事提供了优势
OpenStreetMap(OSM) 是一个免费使用的地理定位解决方案,一个可编辑的全球地图,由贡献者开发,并以开放内容许可的方式发布。
今天,最成功的独角兽创业公司都建立在地理定位服务上,如地图、导航、路线、地点和街景。除此之外,这些服务已经被如下所述的不同业务领域大量使用-
- 顺风车 —优步、Lyft、滴滴出行、Ola。
- 汽车制造商 —丰田、大众、福特、特斯拉。
- 送餐 — FoodPanda,Zomato,Swiggy,Uber 吃。
- 旅游观光 — Expedia,美国运通。
- 在线 发货跟踪产品等诸多领域。
当我在网上搜索免费的谷歌地图替代品时,我了解了 OpenStreetMap。我真正喜欢 OSM 的是他们潜在的使命:
“我们开始这样做是因为大多数你认为免费的地图实际上都有使用上的法律或技术限制,阻止人们以创造性、生产性或意想不到的方式使用它们。”-开放街道地图基金会
够了!这可能是任何开发团队、小创意和年轻创业公司最初面临挑战和挫折的真正原因。所以,我想做一些关于 OSM 的研究,并与大家分享。
Giphey.com 的 Gif 地图
谷歌地图最受这些大企业和独角兽初创公司的青睐,因为它们每小时和每天都有数百万次地图、路线和地点请求。但是对于中小型企业来说,随着他们的增长,可能很难负担得起谷歌提供的 即付即用 订阅模式。然而,谷歌地图提供了几千次免费访问和每月 200 美元的积分。
特征
有很多简单的方法来创建自己的地图,使用 OSM 根据您的要求进行修改。它们是:
- 易于学习并立即可用
- 支持 GPS 跟踪
- 地理编码过程-将地址转换为地理坐标
- 反向地理编码-将地理坐标转换为人类可读的地址
- 能够离线加载地图数据
- 允许投稿(添加、编辑、上传数据)
- 能够对多媒体文件(笔记、照片、视频)进行地理标记。
突出
1.开发
它在众多流行的框架和语言中有不同的项目、库、插件和应用程序编程接口(API ),如 JavaScript、Java、Ruby、C++等。它运行在相对较小的服务器部署上。
2.地图
您可以将它用于常规浏览地点、导航、方向和共享位置。试试这里 OpenStreetMap 。
这是我在城市中的当前位置,如 OpenStreetMap 所示。
缺点
因为像 OpenStreetMap 这样的产品很大程度上依赖于贡献者和志愿者。它们也有几个缺点。以下是一些缺点:
- 少数情况下的数据不如 Google APIs 准确。
- 质量和可靠性很难达到高标准。
- 这些产品不定期更新和自愿。
- 根据用户反馈,OSM API 仅适用于原始地理数据。
但是当然,免费创业更好。
OpenLayers
OpenLayers 是另一个完全免费的解决方案,用于在应用程序和产品中显示动态地图。它从各种来源绘制图块,包括 OpenStreetMap 。除了基本的地图,OpenLayers 还允许我们渲染矢量图层,并在地图上放置标记。
OpenStreetMap 许可证允许免费访问世界地图图像和所有底层地图数据。他们的主要目的是促进这些数据的新的有趣的用途。最后,在使用 OpenStreetMap 数据和 API 之前,先看一遍版权页面,知道如何给 OpenStreetMap 及其贡献者鸣谢。
资源:
[## 寻求帮助
使用初学者指南和贡献地图数据了解如何开始向项目贡献地图数据。如果你是…
wiki.openstreetmap.org](https://wiki.openstreetmap.org/wiki/Get_help) [## 学习主义
回顾 2015-07-12 本指南一步一步展示如何开始使用 OpenStreetMap。您将学习如何设置…
learnosm.org](https://learnosm.org/en/beginner/)
我希望您通过尽可能的支持来欣赏开源技术!🤗OpenStreetMap 不仅仅是开放数据,而是真正的开源产品,我们可以贡献!
在下面的评论区写下你的建议和反馈。
阅读我下面的其他文章,在媒体上关注我:
使用世界上最简单的人脸识别 python 库来识别和操作人脸。
towardsdatascience.com](/face-detection-in-just-5-lines-of-code-5cc6087cb1a9) [## 一目了然地重温所有 10 款棱角分明的款式
谷歌最近发布了其广受欢迎的网络和移动框架的 v10。
medium.com](https://medium.com/swlh/revisit-all-10-angular-versions-in-a-glance-f7f778498160)
让我们在 LinkedIn(@ kapilraghuwanshI)和 Twitter ( @techygeeek y)上保持联系,获取更多这类引人入胜的技术文章和教程。🤝
惊人的数学视觉效果
Manim 帮助你创建时尚的数学视频
鲁本·特奥在 Unsplash 上拍摄的照片
一个很棒的 YouTube 数学频道是 3Brown1Blue 。这些视频的一个显著特点是视觉效果,你可以复制它——只要你有一些空闲时间让 Python 库 Manim (由该频道的作者 Grant Sanderson 编写)工作。
是的,你可以用 Manim 模拟疫情(截图来自 3Brown1Blue YoutTube 视频)。
让 Manim 工作不是我轻易说的事情,当一个更新 Manim 打破了以前工作良好的东西后,你可能会经历轻微的愤怒反应。话虽如此,我们只能感谢这个非凡的开源工具(您可以为它的开发做出贡献)。
我的建议是耐心并坚持这些建议:
- 从新的虚拟环境开始。我已经设法在 Windows 和 macOS 中使用 conda 设置了 Manim。
- 查看这些资源中的任何一个来安装它需要的系统级和 Python 依赖项(并获得如何获得大部分 Manim 的灵感): Repperium Science 、 Talking Physics 或 Manim GitHub 本身。
- 如果你打算用文本或公式展示视觉效果,LaTeX 是唯一需要的,MikTex 是我在 Windows 和 macOS 安装中的选择。
- 克隆或压缩下载 Manim GitHub 库(如果您需要旧版本,请查看如何从 GitHub 库这里下载特定提交)。
- 如果使用版本控制工具,如果您计划用 Manim GitHub 库保持 Manim 的本地版本是最新的,要格外小心。
你迟早会把它修好的,不要放弃!
要测试 Manim 是否正常工作,如果使用 Conda(强烈推荐),则在 Windows 或 macOS 的终端中打开 Anaconda 提示符,激活您安装依赖项的环境,导航到您克隆或解压缩 Manim 存储库的位置,并运行一个预定义的示例(例如,SquareToCircle 将生成一个转换为圆形的正方形短片)。如果成功,你将创建你的第一个 Manim 动画!
激活我的“manim”conda 环境,并在终端 MacOS 中导航到我的“manim”本地文件夹。
现在是享受一些数学乐趣的时候了。对于您的项目,我建议在 Manim 的文件夹结构中创建一个文件夹(我称我的为“myAnimations”)。下面的脚本将在一个图形中显示两个简单的函数。
请注意,这个(以及几乎每个)示例的基本结构可以概括为:
- 创建一个类(我称之为示例),它从一个拥挤的 Manim 父类(例如 GraphScene )继承方法。
- 用动画定义一个构造方法。
运行示例脚本,一个新的 mp4 文件将被添加到媒体文件夹中。成功!
在终端 MacOS 中使用 Manim 运行 AnimationExample.py。
运行 AnimationExample.py 的输出文件。
我希望这篇文章对你有用,并且下次你想出让数学变得生动的方法时,你会想到。
查看许多有用的资源开始学习: Repperium Science 、 Talking Physics 或 Manim GitHub 本身。
在 Manim GitHub 资源库中找到的通用动画代码受麻省理工学院许可。
学习计算机科学的惊人的 Udemy 课程
用这 3 门伟大的课程来治愈疫情的厌倦并开始学习吧。
如果你和我一样,被困在家里可能会让你变得有点疯狂。幸运的是,你可以在家里的电脑上做许多富有成效的事情,这些事情会占用你的时间,直到你可以安全地去电影院或公园打篮球。一个很好的例子是通过在线课程学习新技能,一个很好的例子是提供这种服务的网站 Udemy。
№1:通过制作雅达利游戏学习汇编
[## 通过为 Atari 2600 制作游戏来学习汇编语言
你是否对这个铺天盖地的/快节奏的/框架式的/丛林式的软件世界感到有点厌倦了…
www.udemy.com](https://www.udemy.com/course/programming-games-for-the-atari-2600/)
让我们面对现实吧,学习汇编可能是一个有抱负的计算机科学家一生中最难做的事情之一。大多数程序员都不会在编程中走到这一步,而且汇编也没有实际用途。虽然这是部分正确的,因为大多数现代应用程序都是基于 web 的,并且适合脚本语言的环境,但是学习汇编也意味着
了解装配。
我相信这是一种重要且相当有价值的能力。首先,您可以了解控制流、指针和标志。虽然这些都很棒,但与使用注册表内核、处理器命令和内存时获得的知识相比,它们还是有些逊色。这正是计算机的工作方式,因此,了解所有这些如何组合在一起并一起使用,将使你成为一名更好的程序员和科学家。
本课程将带您学习 Atari 2600 的大量硬件课程。如果你像我一样,即使你没有生活在雅达利 2600 的时代,你也可能玩过雅达利 2600 的一些游戏,这些游戏让你有点怀念 8 位时代(E.T .之前)。在熟悉雅达利之后,你会深入了解 6502 汇编。先学习 6502 组装,再学习 x64 组装的优势在于,与现代处理器组装相比,6502 组装既一致又简单。
在这个 14 小时的课程结束时,你将能够用汇编语言创建一个 Atari 游戏,在 6502 汇编程序中进行汇编,并在像 Stella 这样的定制卡带或仿真器上运行你的 Atari 游戏。大约一年前我上了这门课,我记得很清楚,我还有一台老款雅达利,是我爸年轻时的。作为一个恶作剧,我制作了一个带有双人游戏的定制弹夹,但更重要的是——我的名字签在了最后。不用说,任何和我一起玩这个游戏的人都对我的名字是如何被登录到这个游戏中感到震惊和困惑。直到今天,它还躺在我祖父母的阁楼上。
№2:从零开始的操作系统
你刚刚在网上偶然发现了最完整、最深入的操作系统系列课程。有超过 2700 名学生…
www.udemy.com](https://www.udemy.com/course/operating-systems-from-scratch-part1/)
这是另一门课程,它会教给你很多关于计算机内部工作的信息。从头开始学习操作系统的工作原理和学习汇编语言编程的区别在于,学习操作系统会让你与你的软件有更好的联系。这不仅对现代汇编很重要,例如,对于系统调用和各种其他内核交互,而且从底层学习软件如何与硬件交互对于计算机编程来说肯定很方便。
无论您是在编写脚本语言、编译语言,甚至汇编语言,能够理解您的代码如何与您的操作系统和外围设备交互都是非常重要的。这门课程的一个优点是,除了基本的计算知识之外,你可以完全不学任何知识,然后从头开始理解操作系统是如何工作的。
虽然这门课肯定比汇编课短一点,要上 8 个小时,但课程通常既深入又简洁。没有太多的时间被浪费,这对于那些试图在不打瞌睡的情况下学习的人来说是一件非常好的事情。
该课程包括对调度算法和内存分配的深入研究,同时也提供了对操作系统工作原理的了解。
№3: Shell 脚本:了解如何自动化命令行任务
加入其他 20,000 名成功学生的行列,世卫组织已经掌握了 SHELL 脚本和 LINUX 操作系统…
www.udemy.com](https://www.udemy.com/course/shell-scripting-linux/)
Shell 脚本/Bash 自动化是我非常熟悉和喜欢的一个概念,您应该也是。使用 Bash 实现代码自动化的好处是,您可以将它作为一个系统来使用,将所有东西联系在一起。这伴随着可以加载到 Bash 会话中的环境变量,以及能够使用 Bash 非常容易和快速地读取和写入文本。使用 Bash,您可以访问一系列应用程序来完成一系列任务,并按照您喜欢的方式利用它们来自动完成特定的任务。
不用说,熟悉 Unix 命令行和 bash 肯定会让您的程序员和科学家生涯受益匪浅。在我看来,熟悉 bash 可能是一个程序员能够拥有的最重要的技能之一。这是因为它为服务器管理、执行、系统脚本编写和开发操作打开了大门,并且使编程变得更加容易。
结论
Udemy 上有很多很酷的课程,可以帮助你学习任何与计算机相关的东西。在这三个中,我买了前两个,我的一个好朋友向任何想学习 Bash 的人推荐了第三个。我认为所有这些都是重要的技能,更重要的是,它们会教会你很多你可能从未了解过的计算机知识。
了解汇编、Bash 和操作系统内部工作原理的结合当然是需要掌握的大量知识。然而,有数百万的 Udemy 课程可以浏览和查看,其中一些课程是特价甚至免费的。因此,有了这个疫情,你肯定可以充分利用你的时间,在 Udemy 上查看有用的东西!
亚马逊广告分析—扩展
使用 Prophet 时间序列、随机森林和 SHAP 值进行需求和销售预测。
马库斯·温克勒在 Unsplash 上的照片
亚马逊的全球电子商务销售额预计将增长 20%,到 2020 年达到 4168 亿美元,亚马逊广告收入也保持同步增长。2020 年,亚马逊在美国的广告收入预计将达到127.5 亿美元(2019 年为 103.2 亿美元)。
随着活动的增加,人们可以预期销售工具会有一定的改进,如 ads analytics,所以我决定将这个主题用于我在 inspire boot camp 的数据科学顶点项目。
我从 Amazon.com 的几个大型消费品牌的广告活动中获取数据,目的是寻找提高广告投资回报率和预测未来销售的潜在方法。
数据存储在 13 个表中,这些表反映了亚马逊的统计数据。关于数据的更多细节,以及我写的代码,你可以在我的 GitHub 页面找到。
我使用的技术:
- 预测潜在销售额的 Prophet 时间序列。
- 来自 Sklearn 的随机森林回归器,用于预测影响销售的因素。
- 用于模型解释的沙普利附加解释(SHAP 值)算法。
关键词性能
我的目标是动态分析每个关键字的性能,并预测未来的需求。
首先,我使用 Plotly library 显示了所有活动中每个搜索词的性能。下面是一个“洗手液”的例子。
在所有活动中,关键字“洗手液”的日浏览量。图片作者。
所有活动中关键字“洗手液”的日点击量。图片作者。
所有活动中关键字“洗手液”的日销售额(以美元计)。图片作者。
关键字的未来销售预测
为了推断未来的销售,我使用了 Prophet 时间序列。这张图表预测了关键字“洗手液”的销售额。
每个黑色散点图点代表以美元计的实际日销售额,模型预测显示为蓝线,表示两个月的预测。
关键字“洗手液”的销售预测(每天以美元计)。图片作者。
我们可以从这个关键字看到销售的整体趋势,以及每周的波动成分。总体趋势预示着对洗手液的需求将会增长。每周波动成分显示,一周中的某一天在洗手液需求中起着重要作用——大多数销售发生在周日、周一和周二。
关键字“洗手液”的 Prophet 时间序列预测的整体趋势和每周部分。图片作者。
产品分析
我按 ASIN 对数据进行了分组,并研究了每种产品的性能。
对于这个例子,我选择了洗手液,因为它是今年 COVID 的热门产品。一家销售洗手液的公司可能会从广告分析中受益,广告分析提供了一些对动荡未来的洞察。
产品“洗手液”的销售漏斗。图片作者。
这张图表显示了洗手液的漏斗:
展示->点击->订单
我还为每个产品创建了一些高级数据分析,按活动分组(如下图),以查看哪些活动表现良好,哪些需要改进。
“洗手液”产品的广告活动表现。图片作者。
动态中的产品性能
类似于关键词,我做了时间序列分析,动态看产品表现,预测未来销量。
在所有活动中,产品“洗手液”的每日展示次数。图片作者。
所有营销活动中“洗手液”产品的日点击数。图片作者。
所有营销活动中产品“洗手液”的每日销售额和支出(以美元计)。图片作者。
使用 Prophet 时间序列,我为每种产品建立销售预测。下图显示了两周洗手液销售预测、总体趋势和每周波动部分。
产品“洗手液”的销售预测(每天以美元计)。图片作者。
产品“洗手液”的 Prophet 时间序列预测的总体趋势和每周部分。图片作者。
影响销售的因素
最后,我想调查影响产品销售的因素。为此,我构建了一个 ML 模型(来自 Sklearn 的随机森林回归器),并使用 SHAP 值来可视化特征的重要性。
我使用以下特征来预测销售额:
- 印象
- 点击
- CTR
- 中国共产党(the Communist Party of China)
- 花钱
- 文件夹
- 每日预算
产品“洗手液”销售的特征重要性图。图片作者。
每个特性对结果(销售)有不同的影响。通过绘制这些特征重要性参数,可以从模型本身得出高级视图。
这张图表显示了“点击次数”和“花费的钱”是最重要的特征(这是有意义的),但是它们到底是如何影响销售的呢?为了更好地理解模型行为,我研究了 SHAP 价值观。
SHAP 汇总图显示了每个因素的预测值与目标变量(销售额)的正相关和负相关关系。每个点代表训练数据的一次观察。
“洗手液”产品销售预测的 SHAP 值汇总图。图片作者。
如果你不熟悉 SHAP 价值观,这篇精彩的中间文章将帮助你更好地理解 SHAP 价值观是什么,这篇文章解释了每个图表的含义。
有了 SHAP,我们可以深入了解每个功能的行为。例如,我们可以看到“每次点击成本”如何影响我们的销售。
SHAP 重视“洗手液”产品的销售和点击费用的依赖图。图片作者。
对于每一次观察(在我们的例子中是每天),我们可以观察力图的所有特征。这张图片展示了我们的第 12 次观察。那一天,总销售额为 70.99 美元。该模型的基本价值(平均值)为 54.44 美元,推动销售增长的主要因素是点击量——我们有 7 次点击量。
产品“洗手液”的个人 SHAP 值图(用于第 12 天预测)。图片作者。
摘要
“洗手液”销售预测的 SHAP 值(简化版)。图片作者。
下图显示了对一种产品(洗手液)销售的所有特征重要性和效果的简单解释。
红色表示特征与目标变量正相关。在这种模式下,高点击率、CTR、CpC 和日预算会增加销售额。
高印象和某些投资组合类型会降低销售额;这一发现让我开始研究针对特定环境的活动。
事实证明,赞助产品广告类型产生高印象,但洗手液销量低,而赞助品牌则相反。调整广告设置应该会提高广告的投资回报率。
包扎
- 亚马逊广告数据的时间序列分析可用于预测未来的产品需求和销售,而 ML 建模也可用于更好地了解影响产品销售业绩的因素。
- 根据销售频率和销量,按天或按周对数据进行分组以获得更好的结果可能是有意义的——使用您自己的数据集进行实验。
- ML 分析和预测表明,有时销售和广告统计数据之间的相关性可能会引起争议。在这种情况下,深入研究活动和广告设置是一个好主意。
我的项目的原始代码和其他细节在这里: GitHub 。
如果您对我在您项目中的代码实现有任何疑问或需要帮助,请随时通过 LinkedIn 联系我。
亚马逊数据科学案例问题:重复产品
涉及业务、建模和产品直觉的案例问题
今天和我一起的还有 沙沙克 ,他是一名数据科学家,曾是亚马逊的商业智能工程师!Shashank 和我解决了一个商业案例研究问题,这个问题是由亚马逊商业智能工程师和分析师提出的。它包括将数据库中的一个模糊问题分解成一个可解决的解决方案,这个解决方案有意义并且可以根据亚马逊的目的进行扩展。最后,我们将回顾下一个问题的反馈、提示和技巧!
如果你宁愿看模拟面试的视频,这里有链接。
查看我们的亚马逊商业智能采访指南
目录
- 介绍
- 重复产品:案例研究访谈
- 模拟面试反馈
- 亚马逊面试标题
介绍
喋喋不休的人
欢迎参加模拟面试,在我们开始之前,我想问一下您的背景以及您是如何进入数据科学领域的。
沙尚克
当然,非常感谢你邀请我。简单介绍一下我的背景。我一直是一个数据和数字的家伙,在我获得硕士学位之前,我曾经是一名商业智能工程师。在成为一名数据科学家之前,我攻读了数据分析硕士学位,工作了将近两年。我的大部分经历都围绕着机器学习问题和实现,这也让我学到了一些 DevOps 技能。
我最终学会了如何将 Python 代码转换成 PySpark,然后去了亚马逊做商业智能工程师。我的大部分工作是围绕 Tableau 报告,构建 ETL 作业,计算出报告数据库中需要什么样的数据,以便您的最终报告能够很好地工作。只是更深入地挖掘企业想要了解的不同指标,并提供更多关于他们可以查看的信息,而不是他们已经在查看的信息。
重复产品案例研究访谈
图片来自 Unsplash
采访者:杰伊
太棒了,所以我想从第一个问题开始。
比方说,你在一个像亚马逊这样的大型电子商务网站工作,你想在一个非常大的数据库中删除可能列在不同卖家名下的重复产品。例如,我们有两款相同的产品,但命名不同,如 iPhone X 和苹果 iPhone 10。
假设我们有这两个名称不同的相同产品,我们希望消除重复。但是假设这个例子出现在很多不同的情况下。那么有什么方法可以解决这个问题呢?
候选人:沙尚克
明白了,所以实际上,如果这是一家成熟的电子商务公司,我会假设他们库存中的每件产品都有某种 ID。比如 SKU 或者身份证。如果是亚马逊,那么这是非常独特的,你知道,即使不同卖家的描述不同,我也会假设他们会有相同的 SKU。
因此,如果你只查看所有 SKU 和不同卖家的列表,然后对 SKU 所有卖家进行不同分组,你就会发现哪些 SKU 是重复的。一旦你有了这些,你就可以去找业务团队,问他们你想对他们做什么。
采访者:杰伊
好吧,让我们把它变得更复杂一点,比如说我们没有 SKU 字段,人们只是通过输入他们认为的产品名称来创建他们的列表,也可能是图片或描述,本质上是现在亚马逊上创建产品流的样子。
那么我们如何绘制 SKU 地图,或者你会想出一个不同的方法来解决这个问题吗?
候选人:沙尚克
是的,我想到了一些事情。
如果我们有这些产品的图像,我们认为可能是重复的,我们可以尝试使用算法来识别相似的图像。然后,一旦你有了相似图像的列表,你查看描述和建立一个字符串相似性算法,输出哪些描述听起来相似或彼此接近。现在你至少有两个数据点,你知道这两个产品是相似的。然后可能需要一点人工干预来识别它们是否真的相似。
我能想到的另一件事是关于不同产品的评论。想象一下,有两种不同的产品,只是名称不同,但都是苹果 iPhone 10。你可能会认为这些评论几乎都是在谈论一款手机,而且是苹果公司生产的。他们可能有相同类型的经历和评论,所以你可以看到评论是否非常相似,这将很好地表明产品可能是相同的。
采访者:杰伊
好吧,假设我们用了所有这些方法。我们正在查看图片、描述和评论的相似性,我们正在为每一个图片、描述和评论打分。现在,我们如何决定是否可以对它们进行重复数据消除?
我们会对每一个人都进行人工审查吗?我们做一些缩放的过程吗?因为假设我们必须为成千上万的产品这样做,对吗?下一步是什么?
候选人:沙尚克
明白了。从一开始,我们就不知道哪些产品是相同的,哪些是不同的,所以我们真的不能使用监督学习方法。它需要是一种无人监管的技术,首先尝试识别哪些产品彼此相似。我可能会根据描述和评论使用聚类技术。
我们肯定需要对文本数据进行清理和标记化,使其成为结构化的格式。然后我们可以对不同的描述和评论运行 tfi df来找出哪些文档彼此相似。我们将得到一些分数,根据有多少文档最终出现在一个特定的集群中,我们肯定要进行一个手动步骤来查看它们实际上是否相同。
我不知道对图像起作用的聚类技术,但我们可能必须从图像中构建特征,将其转化为结构化格式,然后在其上进行聚类。因此,如果有十个重复的项目,我们可能会确定十个不同的分类,然后查看分类描述性统计数据,以了解评论中的客户是否真的在谈论手机、平板电脑或电脑等…然后尝试从该点开始进行手动调查。
采访者:杰伊
好吧,假设我们这样做了,我们遍历这些聚类,我们发现算法只对其中几个进行了聚类,**只是将手机聚集在一起,而不是对同一产品进行足够具体的聚类。**或者,我们可能会得到数千个不同的集群,其中可能有也可能没有重复。
有没有什么方法可以优化我们的手动干预或解决这个问题以便我们使用最少的手动监督,同时找到一种高效的重复数据删除方法?
候选人:沙尚克
我想这取决于我们实际提取的特征,因为数据集中的特征越细,聚类就越好。如果我们只是在设备类型上创建集群,那么你是对的,我认为所有的手机和所有的电脑最终都会在一起。
但是,如果我们知道这些也是重复的列表,我们肯定希望查看列表本身的更多信息;比如产品的价格,可供选择的不同类型的颜色,以及 iPhones 和 androids 的哪些特性彼此相似。这些功能需要尽可能地贴近产品本身,这样我们的集群才能更容易相互识别,而不是像手机和电脑那样通用。
然后可能是顾客本身。我们也可以看看购买行为。iPhones 通常倾向于一上市就销售一空,因此我们可以尝试使用特定产品何时上市的信息,然后查看这段时间的购买模式,然后尝试将这些特征集成到数据集中。
模拟面试反馈
喋喋不休的人
我想就这个问题做一个简短的反馈会议。你对第一个问题怎么看?
沙尚克
我认为这个问题很好。开始的时候很模糊,但是我认为基于你的暗示,我感觉我们想要一个更算法化的解决方案,而不是 SQL 数据库解决方案。
因此,最初我认为这更像是一个简单的问题,我可以告诉哪种不同的 ID 或哪些列需要分组,但结果是我们希望在更高的级别上检查这一点。所以我认为这是一个很好的头脑风暴问题。有多种方式可以实现,但我认为我们最终有了几个好的起点。
喋喋不休的人
明白了,所以有两点反馈。我想我喜欢扩大这种方法,但是最好对这个案例有更广阔的视野。例如,不要局限于类似的手机,也可以考虑像亚马逊这样的大型电子商务。
然后我认为有更多的数据点也有助于解释这些概念。例如,如果亚马逊上有数千种不同类别的重复产品,就很难从一个例子中做出假设。
然后考虑一下我们可以自动化多少,以及每个产品的阈值错误率是多少也会有所帮助。对于 iPhones 来说,将错误率降至最低非常重要。但是,让我们说,我们正在出售复制的口袋妖怪卡。我们能从自动的单词匹配解决方案中得到多少,然后满足于足够高的匹配率阈值?
我认为,例如,如果我们在手动检查匹配后有 3%的误差,我们可以扩大范围,然后问我们是否可以接受这个误差。因此,一般来说,我得到的是一个免责声明,或者至少是一个关于什么在实现方面有意义的对话,而不仅仅是技术过程。
沙尚克
是的,基本上调整了我们商业案例的敏感度。假设很明显,如果复制不会对业务产生太大影响,我们就不会真的关心它。
喋喋不休的人
是的,我们确实关心是否有多个卖家出于任何原因试图销售像 iPhones 或 MAC 这样的高价值产品,我们不希望这些产品超过第一页的结果。
但总的来说,这个案例的思考过程很好,很有条理,并沿着我试图引导的那条狭窄的道路前进。
亚马逊面试标题
图片来自 Unsplash
喋喋不休的人
最后,对于如何在真实的面试中衡量这些类型的问题,有什么想法或想法吗?这与模拟面试有些不同,但我很想听听你对这些问题的看法,这些问题比较模糊,应该如何评分。
沙尚克
从主题的角度来看,从候选人的角度来看,对于案例面试,我认为重要的是弄清楚他们问了哪些澄清性的问题,以及除了问题陈述之外,他们还能从面试官那里获得多少信息。如果他们没有问问题,那么面试官可能会让他们失望,因为他们实际上想给他们一些信息,这样讨论就会沿着他们想要的方向进行。
从我在案例研究面试中了解到的情况来看,**是面试官决定了应聘者最终需要达到的目标。**即使应聘者有多个不同的想法,也要由面试官来引导。我认为第一步是检查他们在开始时能够提出多少问题,他们能够想到多少额外的数据点,然后可能进行五分钟的提问,然后根据他们得到的所有答案,他们如何能够深入研究这些数据点。
例如,他们是否有一种分割方法来估计问题陈述中的不同值?然后当然是在每一点上说出你所知道的假设。候选人是否会大声说出他们所做的假设,然后检查这些假设从商业角度来看是否有意义?
最后,我认为从来没有真正的正确答案,所以这只是关于候选人能够如何总结他们对问题的解决方案。
喋喋不休的人
我喜欢这一点,并认为这也是一种很好的定义方式,尤其是因为它在任何一方都是如此模糊。我认为能够记下优点是有帮助的。
感谢阅读
- 如果你想阅读更多关于亚马逊采访的内容,请查看我们的亚马逊商业分析师采访 指南。
- 查看 面试查询 Youtube 频道 获取更多模拟面试视频,我们将在其中讨论不同类型的数据科学问题。
- 如果您想了解更多独家面试解说,请报名参加 面试查询高级 。
原载于 2020 年 5 月 30 日 https://www.interviewquery.com*。*
亚马逊的数据科学家面试实践问题
一些亚马逊面试问题的演练!
克里斯蒂安·威迪格在 Unsplash 上拍摄的照片
鉴于我的文章、 Google 的数据科学面试脑筋急转弯、 40 个数据科学家的统计面试问题及答案、微软数据科学面试问题及答案、 5 个数据科学家常见的 SQL 面试问题的受欢迎程度,这次我在网上搜集了一批亚马逊的数据科学面试问题,尽我所能的进行了解答。尽情享受吧!
问:如果有 8 个相同重量的弹珠和 1 个稍重一点的弹珠(总共 9 个弹珠),需要称重多少次才能确定哪个弹珠最重?
作者创建的图像
需要称重两次(见上文 A 和 B 部分):
- 你将九个弹珠分成三组,每组三个,称其中两组的重量。如果天平平衡(选择 1),你知道重的弹球在第三组弹球中。否则,您将选择权重更大的组(选项 2)。
- 然后你将练习同样的步骤,但是你将有三组一个弹球,而不是三组三个。
问:凸与非凸代价函数的区别;当一个代价函数是非凸的时候意味着什么?
摘自加州大学洛杉矶分校谢卓瑞
凸函数是指在图形上任意两点之间画出的一条线位于图形上或图形上方。它有一个最小值。
非凸函数是在图上任意两点之间画的线可能与图上其他点相交的函数。它的特征是“波浪形”。
当成本函数是非凸的时,这意味着该函数有可能找到局部最小值而不是全局最小值,从优化的角度来看,这在机器学习模型中通常是不希望的。
问:什么是过度拟合?
摘自维基百科
过度拟合是一种错误,即模型“拟合”数据太好,导致模型具有高方差和低偏差。因此,过度拟合模型将会不准确地预测新的数据点,即使它对训练数据具有高的准确性。
问:改变基本会员费会对市场产生什么影响?
我对这个问题的答案没有 100%的把握,但我会尽力而为!
让我们举一个主要会员费上涨的例子——有两方参与,买方和卖方。
对于买家来说,提高会员费的影响最终取决于买家需求的价格弹性。如果价格弹性很高,那么给定的价格上涨将导致需求大幅下降,反之亦然。继续购买会员费的买家可能是亚马逊最忠诚和最活跃的客户——他们也可能更加重视 prime 产品。
卖家将受到打击,因为现在购买亚马逊一篮子产品的成本更高了。也就是说,一些产品将受到更严重的打击,而其他产品可能不会受到影响。亚马逊最忠实的顾客购买的高端产品可能不会受到太大影响,比如电子产品。
问:描述一下树、SVM 和随机森林。谈论他们的优点和缺点。
决策树:一种树状模型,用于根据一个或多个条件对决策进行建模。
- 优点:易于实现,直观,处理缺失值
- 缺点:高方差,不准确
支持向量机:一种分类技术,可以找到一个超平面或两类数据之间的边界,使两类数据之间的差距最大化。有许多平面可以分隔这两个类别,但只有一个平面可以最大化类别之间的边距或距离。
- 优点:高维精确
- 缺点:容易过度拟合,不能直接提供概率估计
随机森林:一种基于决策树的集成学习技术。随机森林包括使用原始数据的自举数据集创建多个决策树,并在决策树的每一步随机选择一个变量子集。然后,该模型选择每个决策树的所有预测的模式。
- 优点:可以实现更高的准确性,处理缺失值,不需要特征缩放,可以确定特征重要性。
- 缺点:黑盒,计算量大
问:为什么降维很重要?
降维是减少数据集中要素数量的过程。这主要在您想要减少模型中的方差(过度拟合)的情况下很重要。
维基百科陈述了降维的四个优点(见此处):
- 它减少了所需的时间和存储空间
- 多重共线性的消除改善了机器学习模型参数的解释
- 当数据降低到非常低的维度时,如 2D 或 3D ,将变得更容易可视化
- 它避免了维数灾难
问:商品在位置 A 的概率是 0.6,在位置 b 的概率是 0.8。在亚马逊网站上找到该商品的概率是多少?
我们需要对这个问题做一些假设才能回答。让我们假设在亚马逊上有两个可能的地方购买特定商品,在位置 A 找到它的概率是 0.6,在位置 B 找到它的概率是 0.8。在亚马逊上找到该商品的概率可以这样解释:
我们可以把上面的话重新措辞为 P(A) = 0.6,P(B) = 0.8。此外,让我们假设这些是独立的事件,这意味着一个事件的概率不受另一个事件的影响。然后我们可以使用公式…
P(A 或 B) = P(A) + P(B) — P(A 和 B)
P(A 或 B) = 0.6 + 0.8 - (0.6*0.8)
P(A 或 B) = 0.92
问:描述一下 SVM。
在之前的问题中已经提供了答案
问:什么是助推?
Boosting 是一种集成方法,通过减少模型的偏差和方差来改进模型,最终将弱学习者转换为强学习者。总体思路是训练一个弱学习器,通过对前一个学习器的学习,依次迭代改进模型。你可以在这里 了解更多 。
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式就是在媒体上这里关注我。
- 在 Twitter 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!
- 在 LinkedIn 这里关注我。
- 在我的邮箱列表 这里注册。
- 看看我的网站,terenceshin.com。
资源
62 个亚马逊数据科学家面试问题和 61 个面试评论。由…匿名发布的免费采访详情
www.glassdoor.ca](https://www.glassdoor.ca/Interview/Amazon-Data-Scientist-Interview-Questions-EI_IE6036.0,6_KO7,21.htm?countryRedirect=true) [## 亚马逊数据科学访谈
亚马逊为 Alexa 招聘的开发人员比谷歌招聘的都多。
medium.com](https://medium.com/acing-ai/amazon-ai-interview-questions-acing-the-ai-interview-3ed4e671920f) [## 过度拟合
在统计学中,过度拟合是“一个分析的结果过于接近或精确地对应于一个特定的…
en.wikipedia.org](https://en.wikipedia.org/wiki/Overfitting)
http://web . cs . UCLA . edu/~ chohsieh/teaching/cs 260 _ winter 2019/lecture 3 . pdf
亚马逊预报:预测月降雨模式
亚马逊预测使用机器学习工具来提供时间序列预测。如果使用得当,这个平台可以非常有效地做出明智的时间序列预测。
在这个例子中,我们来看看如何使用亚马逊预测来预测降雨数据。
正在讨论的数据集包括 722 个月的降雨数据。爱尔兰新港的降雨量数据来源于英国气象局网站。
数据处理
要用 Amazon Forecast 建立预测模型,首先需要对时间序列数据进行如下配置: metric_name,timestamp,metric_value 。
格式化
这是原始的时间序列:
如上格式化后,以下是新的时间序列:
创建 IAM 角色
要将这些数据从 S3 加载到 Amazon Forecast 中,请确保创建一个具有必要权限的 IAM 角色:
一旦 S3 系统中的数据格式正确,就可以上传数据集:
来源:亚马逊网络服务
上传后,仪表板会将目标时间序列数据显示为活动状态:
来源:亚马逊网络服务
创建预测器
既然数据已经上传,就可以创建预测器了。Amazon Forecast 提供了两个预测选项:
- 自动(AutoML): 在这个选项下,Amazon Forecast 分析数据,然后选择一个合适的模型进行预测。
- **手动:**用户手动选择他/她选择的算法进行预测。
在本例中,我们使用自动选项。
来源:亚马逊网络服务
预测范围设置为 24 (即预测两年的月降雨量数据),节假日的预测维度和国家保留默认设置。
现在,您应该会看到一个**“正在创建…”**培训状态:
来源:亚马逊网络服务
结果
获得了以下预测:
来源:亚马逊网络服务
报告了 10%、50%和 90%分位数的预测分位数。
据报告,预测值与实际值的偏差在 10%分位数处最低,偏差为 9.8% ,而在 50%分位数附近最高,偏差超过 24% 。这意味着预测是向下偏的,这在这种情况下似乎是有意义的。
例如,下面是 Excel 中一段时间内降雨量数据的简单图表:
我们可以看到,该系列的特点是临时峰值,降雨量特别高于正常水平。这些异常使序列的总体平均值向上倾斜,因此对较高分位数的预测不太准确也就不足为奇了。
在这个例子中,Amazon Forecast 已经完成了合理的预测工作,但是可以对时间序列模型进行进一步的调查,以更好地捕捉这个数据集中的波动性。在这方面,我们不能排除 LSTM 或 GARCH 等非预定义算法实际上可能更适合这类数据。
关于分位数测量的更多信息可以在亚马逊预测的文档中找到。
现在已经获得了预测,如果数据集组不在使用中,最好将其关闭。
删除数据集组
为此,必须先删除数据集和预测值,然后才能彻底删除数据集组。
来源:亚马逊网络服务
来源:亚马逊网络服务
删除上述内容后,可以删除数据集组本身:
来源:亚马逊网络服务
结论
这是对 Amazon Forecast 以及如何配置该平台来进行时间序列预测的介绍。文章探讨了:
- 如何修改时间序列数据集以用于 Amazon Forecast
- 时间序列预测的可用选项
- 如何解读预测结果
希望你觉得这篇文章有用,非常感谢你的时间。
免责声明:本文“按原样”呈现,仅作为亚马逊预测的介绍性教程——根据 AWS 客户协议,使用亚马逊预测是用户自己的责任。与其他 AWS 服务一样,Amazon Forecast 也有自己的定价结构,用户有责任熟悉这些结构。关于亚马逊预测定价结构的更多信息可以在 定价文档 下找到。本文中的发现和解释是作者的,不以任何方式得到 Metéire ann 的认可或隶属于 Metéire ann。
亚马逊红移架构
数据仓库|亚马逊红移
理解红移的基础
数据工程师甚至分析师,理解技术并充分有效地利用它是很重要的。在许多情况下,Redshift 被视为像 SQL Server 一样的传统数据库,管理工作留给了 DBA。我认为,如果遵循 Redshift 最佳实践,专职 DBA 的角色就会减少到偶尔的管理和维护。
在这篇文章中,我们将探索这个架构,并理解每个组件对查询的影响。
简单的观点
从 10,000 英尺的高空看,Redshift 看起来像任何其他关系数据库,具有相当标准的 SQL 和实体,如表、视图、存储过程和常见的数据类型。
我们将从表开始,因为这些表是持久数据存储的容器,并允许我们垂直深入到架构中。这是从 10,000 英尺高空看上去的红移:
简单的 10,000 英尺视角
Redshift 是一个集群仓库,每个集群可以容纳多个数据库。正如所料,每个数据库都包含多个对象,如表、视图、存储过程等。
节点和切片
众所周知,Redshift 是一个分布式的集群服务,因此期望数据表存储在多个节点上是合乎逻辑的。
节点是具有专用 CPU、内存和磁盘的计算单元。Redshift 有两种类型的节点:Leader 和 Compute。领导者节点管理跨计算节点的数据分发和查询执行。数据仅存储在计算节点上。
领导者和计算节点
为了理解红移是如何分布数据的,我们需要知道一些关于计算节点的细节。
片是磁盘存储的逻辑分区。每个节点都有多个存储片,允许在每个节点上跨存储片进行并行访问和处理。
每个节点的切片数量取决于节点实例类型。Redshift 目前提供 3 类实例:密集计算(dc2
)、密集存储(ds2)
)和托管存储(ra3
)。根据实例族和实例类型,切片的范围可以从每个节点 2 个到每个节点 16 个;详见本。这个概念的目标是在所有节点上平均分配查询工作负载,以利用并行计算并提高效率。因此,默认行为是在将数据加载到如下所示的表中时,将数据均匀分布在所有节点的所有存储片上。
具有表分布的节点和切片
每个片以 1MB 的块存储多个表。这种切片和节点系统实现了两个目标:
- 在所有计算节点上均匀分布数据和计算。
- 将数据和计算放在一起,最大限度地减少数据传输,提高节点间的连接效率。
柱状存储
影响计算的红移的一个关键特征是数据的列存储。除了查询效率的架构和设计之外,数据本身以列格式存储。对于任何聚合,大多数分析查询都将利用表中的少量列。不必深入细节,数据是按列而不是按行存储的。这为红移提供了多重优势。
磁盘 I/O 显著减少,因为只访问必要的数据。这意味着查询性能与被访问的数据量成反比,表中的列数不计入磁盘 I/O 成本。从 100 列表中选择 5 列的查询只需访问 5%的数据块空间。
**每个数据块包含来自单个列的值。**这意味着每个块中的数据类型总是相同的。Redshift 可以对每个数据块应用特定和适当的压缩,从而增加在相同磁盘和内存空间内处理的数据量。与每个块使用几 KB 的其他数据库相比,使用 1MB 的块大小可以提高效率。
总体而言,由于压缩、大块大小和列存储,Redshift 可以高效地处理数据,并随着数据使用量的增加而扩展。理解了这一点,数据库开发人员就可以编写最佳查询,避免 OLTP 数据库中的select *
。
工作量管理
到目前为止,数据存储和管理已经显示出显著的优势。现在是时候考虑在 Redshift 上管理查询和工作负载了。Redshift 是一个数据仓库,预计会被多个用户和自动化进程同时查询。工作负载管理(WLM)是一种控制向查询组或用户组分配计算资源的方法。通过 WLM,可以确定某些工作负载的优先级并确保流程的稳定性。
WLM 允许定义具有特定内存分配、并发限制和超时的“队列”。每个查询都通过一个队列执行。提交查询时,Redshift 会根据用户或查询组将其分配到特定的队列中。有些默认队列无法修改,例如超级用户、真空维护和短查询(< 20 秒)。WLM 队列是可配置的,但是,亚马逊提供了一个替代方案,这是一个完全管理的 WLM 模式,称为“自动 WLM”。在“自动 WLM”模式下,一切都由红移服务管理,包括并发和内存管理。
理解红移架构是获得其优势的关键。红移通常被误解为另一个数据库引擎,因为工程师/分析师缺乏这方面的知识。该架构可用于提供非常高吞吐量的查询和大量数据处理。
大数据/流:亚马逊 S3 数据湖|移动存储和分析流数据(接近实时)|无服务器方法
通过存储流数据创建亚马逊 S3 数据湖,并在旅途中以近乎实时的方式进行分析…
aws.amazon.com S3 数据湖无服务器架构
目录
- 什么是流数据及其主要挑战(3V)?
- 什么是无服务器方法,我们为什么要使用无服务器方法?
- 先决条件— AWS + AWS Kinesis 消防水带交付流+ AWS Kinesis 生产商/消费者+ AWS Lambda + AWS S3 存储+ AWS Athena —鸟瞰图
- AWS Kinesis 交付流设置—逐步进行
- 奖励-专业技巧!
1: 什么是流数据及其主要挑战(3V)?
流式数据仅仅意味着连续的数据流。今天,在互联网时代,智能手机、手表、GPS 传感器等设备是流行的数据流来源。
注 :所有这些设备通过互联网相互连接而创建的生态系统,就是我们所说的 物联网(IoT)。
流数据(3V)的 3 个主要挑战:
1:速度(吞吐量/分钟): 从千兆字节/分钟**(GB/分钟)到千兆字节/分钟(TB/分钟)**。以这种速度消费流数据而不丢失任何信息始终不是一件容易的任务,也不是微不足道的。
3:卷(DB 大小): 从 TB(TBs)到 Pb(PBs)到 EB(EBs),存储流数据需要大量的空间,并且再次扫描这些原始数据以对其进行查询也成为一项具有挑战性的任务。
提示 :这些 3V 是决定数据类别(小型、中型或大型数据)的关键参数,因此在决定我们存储数据所需的数据库存储解决方案类型时也起着关键作用。迷茫?见下图:
基于 3V 的小型、中型和大型数据之间的差异
什么是无服务器方法,我们为什么要使用无服务器方法?
在阅读了“无服务器”这个词之后,让我首先澄清常见的误解&困惑——无服务器并不意味着在没有服务器的情况下执行计算。简单地说就是将管理服务器的责任委托给云服务提供商(AWS/谷歌云平台(GCP)/微软 Azure)** ,这样我们就可以始终专注于业务逻辑!**
那么,我们为什么要使用无服务器的方法呢?
我已经提到了流数据的 3 个主要挑战。它不仅需要大量的团队努力,而且需要不断的维护。自动缩放/弹性也不是微不足道的。最终更多的成本!
但是,在无服务器中,情况正好相反,我们需要最少的维护。云服务提供商将为我们自动扩展,最终减少维护和成本!
注: 在奖金-亲提示:我也将分享,如何配置交付流,使其成本尽可能最低。
3:先决条件— AWS + AWS Kinesis 消防水带交付流+ AWS Kinesis 生产商/消费者+ AWS Lambda + AWS S3 存储+ AWS Athena —鸟瞰视图
AWS Kinesis 交付流—拉姆达— S3 —雅典娜(数据分析)|图片来源:SDS
AWS :亚马逊网络服务(AWS)是我们正在使用的云提供商。人们可以使用谷歌云平台(GCP)或微软 Azure 来获得各自的服务。
- AWS Kinesis Firehose 交付流: Kinesis 只不过是一个托管(无服务器)的 Apache Kafka。AWS 通常有 2 个使用 Kinesis 的选项。Kinesis 数据流(用于实时)& Kinesis 消防水带交付流,这是一种近实时(~60 秒延迟)服务。这个博客,将使用 AWS 消防软管 Kinesis 交付流前进。
- ****AWS Kinesis Producer:AWS kine sis Producer SDK(高性能首选)或 AWS Kinesis Agent 是向 AWS kine sis 传送数据的两种流行方式。
- *****AWS Kinesis Consumer:*如果你想在存储数据之外消费数据,你可以使用 AWS kine sis Consumer SDK/AWS kine sis 客户端库(KCL 使用 AWS DynamoDB,如果你是 JAVA 爱好者,甚至可以使用 AWS kine sis 连接器库。
Kinesis 使用与 Apache Kafka 相同的碎片进行数据分发|图片来源:SDS
- AWS Lambda: 我们将使用 AWS Lambda 将我们的数据流转换为动态记录。AWS 的一个虚拟功能,我们将使用它作为服务,也称为“功能即服务”。使用方便,性价比高。https://aws.amazon.com/lambda/
- AWS S3: 我们将为我们的数据湖使用 AWS S3 服务。这是最简单、最可靠、最经济的 AWS 服务之一。
- AWS Athena: 为了分析存储在 AWS S3 中的数据,它将使用通常用于 AWS S3 分析和特别查询的 AWS Athena。
4: AWS Kinesis 消防软管输送流设置—逐步
步骤 1: AWS Kinesis Producer:我在这里使用的是 AWS Kinesis 代理,因为在我的例子中,数据是直接消耗到文件上的。AWS Kinesis 代理将通过 AWS Kinesis 交付流直接将这些文件对象传输到 S3。
Kinesis 代理需要安装在您接收流数据或生成日志数据的地方。
$ sudo yum install -y aws-kinesis-agent
...
1081 packages excluded due to repository priority protections
Package aws-kinesis-agent-1.1.3-1.amzn1.noarch
installed and on latest version$ cd /etc/aws-kinesis
$ sudo vim agent.json
从上面的命令转到 agent.json,放置您的 IAM 凭据,以及您接收流或生成日志数据的服务器的位置。您可以在下面找到 agent.json 文件:
您也可以使用 AWS Kinesis SDK 库完成同样的工作,使用 Python 完成同样工作的代码可以在此处找到:
AWS Kinesis — Lambda 记录转换
注 :我已经用 JavaScript 为 Kinesis Producer 库例子使用了 npm
aws-kinesis-producer
第二步: 现在我们来设置 AWS S3。我们只需要创建一个 AWS S3 存储桶。虽然您可以使用 AWS S3 存储桶,但您也可以选择默认的 S3 服务器端加密(S3-SSE)来进行静态加密。
第三步: 现在我们正在设置 AWS Kinesis 交付流。您可以在下面找到选项。分区是必须的,以便 Athena 能够更快地扫描数据。我正在按小时划分以下的数据。
AWS Kinesis 交付—选项
如果您想使用 AWS Lambda 进行动态记录转换,也可以这样做。您可以在下面找到手动转换代码:
****注:标准记录也可以转换成 JSON。你可以在这里找到:https://github.com/aws/aws-lambda-java-libs
第四步: 终于,AWS 雅典娜查询到了我们 S3 AWS 的数据湖,兴奋!下面附上在雅典娜 S3 数据上制作一个数据库的查询和选择一个读取数据的查询。
AWS Athena 用于从 AWS S3 创建数据库
如果您的数据已经在 S3 内部分区,您也可以使用 Athena 内部现有的 S3 分区,方法是在 Athena 控制台中键入以下 ALTER 命令。
AWS Athena—S3 分区上的 ALTER 命令
AWS Athena 选择查询
最终结果:
分区数据—通过 AWS Kinesis 消防水带传输流进行 S3
$ aws s3 cp s3://<bucket-key-name>/<sub-bucket-key-name>/dt=2020–01–20–08/ . — recursive | xargs -rn 1 gzip -d *data-1–2020–01–20–08–10–00–04453c-3e98–47a3-b28d-521ae9ff9b3d.log
data-1–2020–01–20–08–10–15–04453c-3e98–47a3-b28d-521ae9ff9b3d.log
data-1–2020–01–20–08–10–30–04453c-3e98–47a3-b28d-521ae9ff9b3d.log
data-1–2020–01–20–08–10–45–04453c-3e98–47a3-b28d-521ae9ff9b3d.log
AWS Athena 查询 S3 数据后的结果
注: 你可能在想,AWS Athena 是如何抓取&扫描 S3 数据的?它使用 AWS Glue 数据爬虫(类似于提取转换加载(ETL)作业)。它负责引擎盖下的所有繁重工作。https://docs . AWS . Amazon . com/glue/latest/DG/populate-data-catalog . html
就是这样。太简单了…
提及:Athena 还允许使用 SQL 查询调用机器学习。RANDOM_CUT_FOREST(用于离群值),HOTSPOTS(用于寻找密集区域)在这方面很流行。那也很简单…
5:正如最初承诺的,奖金-专业提示!
-
性能: 总是喜欢使用 AWS Kinesis SDK 库来获得高性能&吞吐量。它也支持批处理。
-
代价: 使用 GZIP 压缩来缩小物体的大小。恢复时只需使用" gzip-d"命令即可再次获取 raw 格式的数据。GZIP 将帮助您压缩 75%的大小,因此您最终将节省高达 75%的 S3 成本。通常,AWS S3 的成本约为 0.03 美元/GB。
注:GZIP以大压缩比而闻名,但与 ZIP 格式相比,解压缩速度慢且 CPU 使用率高。 GZIP 通常首选!
- 成本: 使用 AWS S3 生命周期规则—默认情况下,AWS S3 将每个对象存储在标准区域(表示频繁访问区域)。随着时间的推移,AWS S3 生命周期规则会将对象移动到 Standard-IA(不频繁访问),这也比标准 S3 区便宜 30%。
- 安全: 始终启用 S3-服务器端加密(SSE)以确保安全。对于更敏感的数据,您还可以使用 S3 客户端(SSE-C ),其中,您可以通过 HTTPS 传递您的加密密钥。
感谢阅读。我希望这篇博客对你有所帮助。请继续关注更多关于前沿大数据、机器学习&深度学习的此类博客。敬请期待!最好的还在后头:)
差不多就是这样!
连接 🤝 :
- 邮箱:bbhopalw @ Gmail
- Linkedin:www.linkedin.com/in/bbhoaplw
用于进一步阅读✍️:******
大数据&云工程博客:
后端工程&软件工程博客:
亚马逊时间流终于发布了——值得你花时间吗?
AWS 无服务器时间序列数据库经过两年的预览后终于可以使用了——这是对主要特性的第一次审查
来自 Pexels 的 ThisIsEngineering 摄影
ime 系列数据在数量和受欢迎程度上呈指数级增长。它本质上是分配给特定时间戳的数值集合,用于描述事物如何随时间变化。来自物联网设备、传感器、天气预报、点击流、金融股票市场数据,甚至你的心率测量值的数据——这些都是时间序列的例子。
需要跟踪随时间变化的用例非常普遍,以至于市场上的许多产品都是专门为高效存储这种类型的数据而设计的。在 2018 年的 re:Invent 期间,AWS 宣布了一项新的云服务 Amazon Timestream,与关系数据库相比,它应该可以提供 1000 倍的查询性能,并将成本降低 10 倍[1]。最好的一点是,它是无服务器的,随着存储的时间序列数据量的不断增长,它很容易扩展。
尽管该产品已经在 2018 年宣布,但直到上周才普遍上市。
在这篇文章中,我们将看看 Amazon Timestream 的特性、优点、局限性和定价,然后是一个简短的演示和结论。
特征
AWS 已经多次证明,他们希望通过抽象出 it 操作和开始使用他们的产品所需的东西,让他们的客户更容易使用他们的服务。时间流也不例外——没有运营计划,即使你想这么做。您可以为您的数据库配置的只是数据库名称,以及您希望数据在该数据库中保留多长时间。从技术上来说,你可以选择短期内存存储层和长期磁性存储层的保持期。这种区别是至关重要的,因为它突出了使用 Timestream 优于典型数据库的一个主要优点。我们来解释一下原因。
热数据与冷数据
假设您正在管理一批服务器,您需要提供一个实时仪表板,显示所有与内存和 CPU 利用率等相关的指标。为此,您需要不断地向时间序列数据库输入新的测量值。由于您只想查看最近几个小时内收集的指标的“最新”更新数据,因此您不需要将上个月的数据保存在内存中——这将是对昂贵资源的浪费。同时,您可能不希望丢弃上周的数据,因为您可能希望使用它来分析一段时间内的趋势,并检测只有在查看更大的时间窗口时才能检测到的异常。
热数据与冷数据-作者提供的图片
我们通常将那些最近更新的、频繁访问的记录称为热数据。相比之下,很久以前发生的所有事情,以及您只为少数特定分析和数据科学用例访问的所有事情,都被称为冷数据 [2]。Amazon Timestream 允许您将两者存储在一个数据库中,这非常有用。在 Timestream 之前,为了提供低延迟的仪表板,您通常必须将热数据缓存在一些内存中的数据存储中,如 Redis,而冷数据必须存储在其他一些能够处理大量数据的数据库中,而无需倾家荡产。
指定热数据和冷数据的保留期
Amazon Timestream 自动管理内存和磁性存储器之间的数据移动。在我们的数据库中,我们可以有许多不同的表。然后,对于每个表,我们可以指定我们希望在每个存储层中存储该数据多长时间—在下图中,我们定义我们希望将热数据在内存中保留 24 小时,之后,将其移动到长期磁性存储。
创建新表时配置保留期—由作者创建图像
我们不需要事先猜测我们希望存储这些数据多少年,我们可以在以后轻松编辑此配置:
由作者编辑现有表格图像的保留期
对保留期的更改会立即生效。
更多好处
总的来说,主要优势在于它是一个无服务器的完全托管数据库,AWS 负责扩展、监控和维护底层存储和计算资源。除此之外,的高速和的低成本可能会在选择这项服务而非竞争产品时发挥重要作用。
AWS 强调安全性,因此存储在 Timestream 中的所有数据,无论是传输中的还是静态的,都是加密的。
该产品的另一个优势是SQL 接口,它允许用一种简单的众所周知的查询语言检索数据。除了 SQL 接口之外,还有一个 SDK 集成,以便您可以通过 Python boto3 等库与服务进行交互,还有一个 JDBC 连接器,它将让您像使用 Datagrip 等 SQL 客户端的传统关系数据库一样查询时间流。
在写入时,有一个突出的特性— Timestream 包含了“**第一个写入者获胜”语义,**当数据写入数据库时,它会自动检查重复项。这样,如果您第二次尝试写入相同的记录,Timestream 将保留第一条记录,并丢弃第二次写入。如果您想跟踪一段时间内的变化,这是非常有用的,如果没有发生变化,您就不会有数千个相同的行。
尽管到目前为止提到了所有的好处,但我最喜欢的功能是该服务是专门为轻松管理常见时间序列操作而设计的——有许多有用的功能:
- 按照您选择的时间范围(例如
bin(time_column, 7d)
→将数据分组到周箱中), - 通过使用一个可用的插值函数来填充缺失值。
interpolate_linear()
, - 用于将任何时间戳转换为特定格式,或者轻松过滤最近时间窗口的数据,例如最近 3 个小时(
WHERE my_time_column <= ago(3h)
)。
最重要的是,AWS 提供了一个 Grafana 插件(针对 Grafana 版本≥ 7.1)和 AWS Quicksight 集成来构建漂亮的时间序列仪表盘。
grafana with time stream-Source:https://grafana . com/grafana/plugins/grafana-time stream-data Source
亚马逊时间流中时间序列的结构
总的来说,我们可以在每个数据库中创建许多表。每个表可以存储几条记录。记录的集合可以构建一个时间序列,只要它有一个时间戳列和至少一个维度、测量名称和测量值列。下图显示了表、时间序列、维度和度量之间的关系。
如何在亚马逊时间流中构建时间序列—作者图片
在表格形式中,它可能如下所示(在上图中,您可以看到第三行):
时间序列的表格形式—作者提供的图像
上表是通过以下查询从 AWS 提供的样本数据集中检索的:
定价
在撰写本文时,定价基于[3]:
- 存储在内存中的数据量(短期存储),单位为 GB/小时
- 存储在磁性存储器或 SSD 存储器中的数据量(长期存储),以每月 GB 为单位
- 扫描的每 GB 查询数
- 以 1KB 数据区块的百万次写入来衡量写入
- 跨区域数据传输(如果适用)。
演示:在 2 分钟内建立第一个数据库并查询样本数据
在下面的动画中,我演示了如何创建一个时间流数据库,并使用示例物联网表来试验该服务。通过使用 AWS 提供的示例查询,您可以看到如何使用bin(time_column, time_interval)
语法执行动态聚合,该语法将数字数据下采样到指定的时间间隔—在下面的示例中,是一天(1d
)。
亚马逊时间流的第一步——作者创建
以下是演示中的示例查询,展示了如何使用时序函数:
在左侧栏中,您还可以转到Monitoring
来查看诸如查询请求延迟或成功查询结果数量之类的指标。
监控—由作者创建
限制
在将 Timestream 用于任何生产工作负载之前,您应该考虑三个要点。
- 目前,该服务仅在 4 个地区受支持:美国东部-1、美国东部-2、美国西部-2 和欧盟西部-1。
- Timestream 支持 ANSI-2003 SQL,但不允许跨表连接。您可以在基于同一个表的 cte 之间使用连接,但是这些表是相互隔离的,因此,您不能在它们之间执行连接。在我看来,这需要更仔细的设计,以便将需要一起查询的数据保存在同一个表中。
- 与关系数据库相比,Timestream 中的表是只追加的,这意味着不允许删除或更新。
最后两个限制强调对数据模型的全面规划。尽管您不需要用 DDL 指定表结构,因为 Timestream 在数据摄取期间会推断列,但是提前考虑一下还是值得的。
结论
在本文中,我们研究了最近发布的 Amazon Timestream 的主要特性,这是一个无服务器的时间序列数据库。我们调查了该服务的优势和局限性,讨论了定价,并展示了如何使用该数据库来有效地管理时间序列数据。
从题目来回答问题:是的,这个数据库似乎值得一试。从我的角度来看,最大的优势是能够在单个系统中存储热和冷数据,而不必在用于提供实时仪表板的内存数据库和用于分析工作负载的集中式数据库之间移动数据。最重要的是,由于时间序列功能,Timestream 可以加快开发速度,该功能允许按时间分组和即时聚合、缺失数据的插值,以及与 Grafana、SQL 客户端(通过 JDBC )和 Python boto3 SDK 的集成。
总的来说,我很高兴 AWS 最终发布了这项服务,因为我经常处理时间序列数据。我不知道为什么要花两年时间才能最终发布,但我知道 AWS,他们可能想进一步测试和改进服务,直到使用它感觉几乎“无聊”。
感谢您的阅读!我计划在使用我自己的数据处理该服务后,撰写一篇后续文章,深入探讨特定功能并进行更深入的回顾——请关注我,不要错过它。
参考文献
[2]热数据 vs 冷数据:https://data-management-experts . com/data-management/what-the-data-temperature/
[3]亚马逊 Timestream 定价:https://aws.amazon.com/timestream/pricing/
[4] AWS YouTube 频道:https://www.youtube.com/watch?v=8RHFPNReylI&t = 1434s
亚马逊能利用电子游戏实现统治世界吗?
字节/大小
这家市值万亿美元的企业集团即将推出被业界称为“史诗级游戏玩家之举”的游戏。
到 2020 年底,全球游戏产业的价值将超过全球唱片产业和全球票房的两倍。
随着视频游戏行业 2020 年的预期收入达到 1600 亿美元,亚马逊凭借原创内容进入该行业也就不足为奇了。
亚马逊为什么要做游戏?
亚马逊在这方面有着得天独厚的优势。
我已经进入了云端(基于游戏)
云游戏是当你在玩一款运行在新加坡(可能)某个地方的服务器上的游戏,而不是你的本地电脑或游戏机,但却以高速传输到你的屏幕上。
这项技术让你可以在任何有(出色的)互联网连接的设备上玩游戏——不需要昂贵的硬件。你可能听说过谷歌丰富多彩的产品 Stadia。
你需要大量的服务器基础设施来高速加载、渲染和传输高分辨率游戏——听起来像是亚马逊的工作。
AWS(亚马逊网络服务)在全球云基础设施服务市场占有 33%的市场份额;建立一个云游戏服务应该就像把你的丈夫浸在沙丁鱼油里,然后喂你的宠物老虎,让他消失一样——一点问题都没有。
资料来源:统计数据 CC BY-ND 3.0
云游戏与游戏订阅齐头并进。
游戏的未来将是基于订阅的。人们不再为一款新游戏的推出付费,而是每月付费访问一个持续更新的库——想想 T2 网飞的视频游戏。
Xbox Games Pass 和 PlayStation 现在已经允许你在云(外部服务器)上托管你的图书馆。我预计亚马逊也会效仿。
公司将把游戏订阅与云游戏捆绑在一起:想象一下,你可以通过云随时随地在任何设备上访问你的整个图书馆和高性能硬件。
原创内容=差异化和垂直整合
人们会倾向于购买一个订阅服务,而不是另一个,这是基于每个订阅服务提供的原创内容(虎王,有人吗?)
资料来源:马蒂亚斯·阿佩尔 CC0 1.0
更重要的是,原创内容意味着你可以垂直整合,或者控制供应链的每一部分——这意味着生产、分销等。
- **制作:**亚马逊游戏工作室,收购双螺旋工作室,世界级的人才——这家科技公司已经准备好开始生产原创内容。
- 分销: 83%的视频游戏 已经实现数字化销售,因此这家全球最大的在线零售商将利用其规模,通过订阅服务+云游戏平台击败 Steam 等巨头。我们可能会看到 Fire TV 在访问这些服务中发挥作用。
- **媒体:**亚马逊拥有视频游戏流媒体平台 Twitch,人们集体花费超过3550 亿分钟 观看。超过 675,000 年,也就是我还清学生贷款的时间长度。
垂直整合降低了成本,提高了效率,增加了利润——在未来 12-24 个月内,随着如此多的人呆在家里玩游戏,这将变得很方便。
照片由JESHOOTS.COM在 Unsplash 上拍摄
视频游戏将帮助亚马逊接管世界的主要原因是:
我一直预测这项游戏订阅服务可能会与亚马逊 Prime 捆绑在一起,亚马逊 Prime 是世界上第二有价值的经常性收入捆绑包(rundle)(第一是微软 Office )。
经常性收入来自订阅服务,这是目前世界上最流行的商业模式。
**捆绑包:**如果你把一堆产品/服务打包成“打折”的捆绑包,它可以让你卖出更多,扔掉价值较低的商品,增加每次购买的感知价值。
将一堆订阅捆绑在一起,你就获得了 rundle 的性感称号。微软 Office 365 和 Adobe Creative Cloud 就是很好的例子。苹果,一家掌握垂直整合的公司,可能会推出自己的 rundle,包括苹果新闻,电视+,街机和音乐。
Julian O’hayon 在 Unsplash 拍摄的照片
Prime 提供音乐、视频、电子阅读、照片存储和免费送货:添加一个云游戏库,你就拥有了市场上最性感的 rundles 之一。
飞轮效应
转轮很有价值,因为它们可以充当飞轮。根据斯科特·加洛威 (NYU 大学市场学教授)的说法,飞轮描述了“…公司在其他业务部门中利用内容/忠诚度赚钱的能力。”
Rundles 为业务的其他部分创造收入——顾客在 Prime Video 上爱上约翰·卡拉辛斯基在杰克·瑞恩的胡子,并在平台上停留足够长的时间,开始在 Amazon.com 上购买更多东西。
Rundles 建立忠诚,忠诚有利可图。
随着原创内容、云游戏和游戏订阅可能很快就会进入高峰期,预计亚马逊将统治更多的市场,并向统治世界迈进一步。
*A* ***byte-sized deep dive*** *into the world of* ***tech*** *and* ***business*** *for the casual enthusiast.*
大家好,我是 Murto,是一名 17 岁的企业家,也是加拿大多伦多的学生。如果你对这篇文章有任何反馈,或者你只是想聊天,请通过 LinkedIn 联系我!后续步骤:
- 征服你的敌人
- 施咒
- 祝你愉快
谢谢!
亚马逊想让你免费成为一名人工智能从业者
这家科技巨头计划通过公开其长期的内部材料来加快 ML 的熟练程度
ML 大学的 Youtube 页面上已经有一些课程了
什么和为什么
亚马逊长期以来一直在努力解决那些精通机器学习和软件工程领域的个人需求过剩(相对于供应)的问题。迄今为止,他们已经开发了一系列内部资源,让员工快速掌握基本知识。这通常被称为 OJT,意为“在职培训”
OJT 只能做到这一步——你的劳动力规模。除了雇佣工人之外,公司还依赖教育系统为劳动力提供有能力的人才。这个系统已经运行了几百年了。然而,潮流正在逆转。机器学习融入行业工作流程的速度已经大大超过了教育系统提供全套人才的能力。这部分是由于大型系统必然运行缓慢,但也是由于该领域主流算法和工具缺乏融合。教育系统基本上面临着一个选择,要么过度适应当前趋势,要么坚持传统技术,让 OJT 解决最后一英里的问题。
亚马逊的观点
亚马逊有一个很棒的主意——折中一下。
学术机构将在很大程度上倾向于成熟的经典教育技术,这是正确的举措。为了帮助解决“最后一英里 OJT”问题,甚至比就业后教育更有帮助,亚马逊现在正在提供他们内部“ML 大学”的课程材料。通过这样做,他们甚至可以在面试时间到来之前就能教育很多未来的员工。这对双方都有好处。未来的员工可以在申请工作之前了解更多相关的材料,并在工作选择和承诺方面感觉更有准备。另一方面,亚马逊和类似的公司可以在面试中比以前更直接地判断人才。由于这么多的学习资料都是公开的,当申请人没有某个子领域的经验时,“假定无罪”的空间就更小了。
仅仅是 AWS 众多可用服务中的一部分[ 来源
只有三门课程可以立即使用:自然语言、计算机视觉和表格数据。然而,随着 2021 年初所有材料公开,更多将在 2020 年底推出。
“通过公开这些课程,我们正在为机器学习主题的科学界做出贡献,并使机器学习更加民主,”Werness 补充道。“这个领域并不局限于拥有高级科学学位或技术背景的个人。将我们的课件带到网上的这一举措代表着为软件开发人员、学生和其他希望开始实用机器学习的构建者降低障碍的一步。”
查看下面的“加速计算机视觉”课程介绍。整个课程都可以在类似的 Youtube 页面上找到。
亚马逊 ML 大学计算机视觉课程介绍
意见和警告
这对机器学习在行业内的民主化是很大的。学术界长期以来一直非常开放,并与 ML 研究合作。开源软件运动也是如此。最近,在过去的十年左右,我们已经看到这些意识形态延伸到 ML 行业空间。它的延续将确保经济的总产出将会上升,同时还能促进良性竞争。
然而,我要加一句警告。被称为“供应商锁定”的现象发生在服务提供商产生如此多的激励来继续在其生态系统中购买自己的产品,以至于消费者实际上被迫购买该提供商的产品和服务,以免他/她遭受平淡的集成或与新提供商重新开始的转换成本。看看苹果、微软和谷歌产品的对比,就能找到厂商锁定的例子。
ML 大学的课程确实在一开始就提供了许多跨 ML 和软件领域的普遍适用性。很可能其所有材料的 80–90%都会这样,这太好了!
但是,在您学习课程的过程中,请保持对其他提供商如何完成类似产品和服务的关注。要在这个不断发展的劳动力中成为一个真正适销对路的 ML 从业者,一个人必须保持灵活,独立于算法、语言、框架和平台提供商来展示 ML 的熟练程度。
资源
- 用于 NLP 、计算机视觉和表格数据 ML 课程的 Github 页面
- ML 大学 Youtube 页面
- ML 大学公告文章
保持最新状态
除此之外,在 Medium 上,用 LifeWithData 博客、机器学习 UTD 时事通讯和我的 Twitter 让自己保持更新。通过这些平台,我分别提供了更多的长文和简文思想。
如果你不是电子邮件和社交媒体的粉丝,但仍然想留在圈子里,可以考虑将lifewithdata.org/blog和lifewithdata.org/newsletter加入 Feedly 聚合设置。
亚马逊网络服务(AWS)在 5 分钟内完成
照片来自 Unsplash
介绍
随着全球对云计算及其在商业领域的潜在利益的兴趣日益增加,亚马逊网络服务 (AWS)似乎是人们心目中的流行术语。这可能是因为 AWS 是世界上最快和最大的公共云提供商,在 190 多个国家拥有商业客户和超过 100 万的活跃用户。它连续九年在云基础架构即服务(IaaS) 的 Gartner 魔力象限中成为领导者**,最近还成为云平台即服务(PaaS)的领导者。**
在深入探讨 AWS 之前,我们先了解一下什么是云计算。
云计算 是存储、计算能力、数据库等 IT 资源的按需可用性/交付。通过互联网,通常使用一种现收现付的定价系统。云计算有三种主要的服务模式。它们是基础设施即服务(IAAS) 、平台即服务(PAAS) 和软件即服务(SAAS)。
- IAAS——这些服务提供对网络功能、计算能力和存储的访问。它通常是云计算的基本构建模块,例如 AWS EC2、S3、数字海洋。
- PAAS —这些服务提供运行应用程序的硬件和软件工具。除了基础设施服务之外,操作系统、运行时等都是外部管理的。例如 Heroku,AWS 弹力豆茎。
- SAAS —这些服务提供对由服务提供商运行和管理的完整产品的访问,例如 Gmail、dropbox、slack 等。
下图让我们更容易理解上面的每个模型
图片来自 SAP HANA Central
注意:上述传统 IT 类别也称为内部部署。
云计算可以是私有、社区、公共、或者混合。但我们将专注于公共云,它允许公众付费使用其资源。它也是云服务的主要类型,如 AWS、GCP、AZURE 等。
自动气象站简史
- 虽然 AWS 最初是在 2002 年推出的,它在 2006 年正式重新推出,最早提供服务的是 SQS(简单队列服务)、S3(简单存储服务)和 EC2(弹性计算云)。通过这 3 项服务,我们可以得出结论,AWS 最初是作为一个 IAAS 提供商出现的(并且主导了这个领域)。随着时间的推移,它进入了 PAAS 空间,并逐渐进入了 SAAS 空间,如亚马逊 WorkDocs。
- 截至 2006 年,已经有超过 150,000 名开发者使用 AWS。
- 2012 年,首届 Re: invent 大会在拉斯维加斯举行。
- 2013 年,AWS 宣布了其 AWS 全球认证计划,并首次推出“AWS 认证解决方案架构师—助理级”认证。目前,AWS 拥有 12 项特定认证,分为基础(1 项认证)、助理(3 项认证)、专业(2 项认证)和专业(6 项认证)。
- 2015 年,亚马逊报告称 AWS 实现了盈利,第一季度销售额为 15.7 亿美元,被描述为一项快速增长的 50 亿美元业务。
- 2017 年,AWS 发布了一系列人工智能服务和虚拟现实服务。
- 2020 年,AWS 成为云基础设施和平台服务魔力象限的领导者。
AWS 全球基础设施
AWS 全球基础设施可以分为 3 个主要部分:区域、可用性区域和边缘位置。
- 地区是世界上 AWS 存在的地方。在每个地区,AWS 都拥有服务客户所需的所有资源。这些区域遍布全球,以减少网络延迟,即确保按需资源尽可能靠近客户及其用户。这种传播的第二个原因是数据的潜在地理或政治限制,即根据地理法规,数据不能离开物理区域/地区。目前,共有 24 个地区(不久将增加三个地区)。
截图来自 AWS 网站
- 在每个区域中,至少有两个可用区。可用性区域就是一个数据中心。每个区域在地理上分散在一个区域内。这有助于确保在一个区域受到洪水影响或出现连接问题时,系统或服务仍然可用。目前,有 77 个可用区域(不久将增加 9 个)。
- 边缘位置有助于在云中缓存资源,如视频文件或静态图像。例如,当网站用户不在 AWS 区域附近时,这些位置最有用。在网站上缓存一些静态数据可以帮助网站加载更快。目前,大约有 205 个 AWS 边缘位置。
AWS 服务
AWS 会不时发布新的产品服务。目前,有超过 175 种产品服务可以分为 25 类服务,从人工智能到计算到存储等等。所有 25 个类别的服务都包含在下图中。
结论
我们看到了为什么 AWS 在产品服务、存在和收入方面被认为是最大的云提供商。我们还确定了可获得的认证,以及 AWS 在哪个服务模式领域占主导地位。随着世界对云服务的关注,现在可能是 AWS 技术化的好时机。
外部引用
- cloud guru 的 AWS 课程简介
- 维基百科(一个基于 wiki 技术的多语言的百科全书协作计划ˌ也是一部用不同语言写成的网络百科全书ˌ 其目标及宗旨是为全人类提供自由的百科全书)ˌ开放性的百科全书
- AWS 网站
亚马逊复杂的隐藏数据科学系统网络
来源: Pixabay
数据科学:亚马逊背后隐藏的驱动力
当大多数人听到“亚马逊”这个熟悉的名字时,他们会想到用户登录 Amazon.com 时迎接他们的熟悉的购物平台。然而,在我们许多人都熟悉的表面用户界面下,亚马逊创造了一个复杂的数据科学系统网络,以推动它成为今天的科技巨头。这些系统以各种方式协同工作——有些是你可能已经预料到的,有些是你可能从未想到的——以最大化你作为客户可以给亚马逊带来的价值。
该公司于 1994 年成立,最初是一家书店,现已成为一家“百货店”,确立了其全球市场的地位。平台上的用户体验相对清晰易懂,但在幕后,亚马逊运营着一个精心制作的物流噩梦。让我们了解数据科学如何在亚马逊的商业模式中发挥不可或缺的作用。
甚至在亚马逊让你购买产品之前,它就已经与作者、出版商、卖家网络和分支机构签订了协议,在他们的平台上进行优先排序。当亚马逊在采购过程的几乎每个部分都实施了强大的推荐算法时,该公司报告称,在其第二个财年,销售额增长了 29%,达到 128.3 亿美元。推荐算法是数据科学更明显的应用之一,它不仅出现在网站上,还出现在电子邮件中,亚马逊的测试已经证明,这比现场推荐有效得多。将该算法与支付大量优先级的第三方结合起来,亚马逊已经建立了两个非常稳固的收入助推器。
亚马逊的产品价格是基于一个预测模型精心优化的,该模型确定了最佳价格,这样用户就会增加他们的价值,不会因为价格而拒绝购买。这几乎不是一个简单的“寻找临界点”问题,在这个问题中,价格比客户拒绝的价格高一美分,因为通常较高的价格与通常较低的购买数量相关。一个决定产品价格的模型不仅要考虑顾客购买它的可能性,还要考虑它的价格和许多其他产品的价格会如何影响顾客未来的购买模式。
在确定产品价格时,平衡客户购买可能性及其未来对客户的影响。
在你决定每一个产品之前,你可以快速浏览一下产品的五星评级,但是要从用户评论中获取更多的信息。一般来说,任何产品的评论部分都受到偏见的困扰——人们通常只写非常好或非常负面的评论,而大多数人只是满足于快速的 5 星评级。由于极度两极分化的评论和 5 星等级与评论部分之间的差异,顾客可能会干脆决定根本不购买该产品。
向客户提供准确的信息始终符合亚马逊的最大利益。如果亚马逊试图操纵评论,使所有产品排名靠前,短期增长可能会繁荣,但公司的品牌形象和客户信任将被破坏。另一方面,亚马逊希望让用户更多地了解那些实际上很棒,但由于有偏见的评论而形象受损的产品。事实上,虚假评论是一个有利可图的行业,在这个行业中,虚假账户企业可以被雇佣来从数百个账户中撰写热情洋溢或悲观冷淡的评论,以提升你的产品形象并击败竞争对手。亚马逊已经部分解决了这个问题,通过显示验证过的购买者,并部署模型来确定帐户的可信度和评论的有用性,这决定了它的显示顺序。
当你购买你的产品时,你很可能是亚马逊的 Prime 会员。事实证明,这种基于订阅的产品对亚马逊很有价值,成为其主要收入来源之一。为了宣传有吸引力和高价值的服务,亚马逊使用数据分析来确定和锁定特定广告的客户群。亚马逊能够如此迅速崛起的一个关键原因是因为它迎合了数字时代的顾客 中心主义热潮——亚马逊没有使用传统的一刀切、“喷雾祈祷”的营销方法,而是根据他们认为对你的影响程度来定制他们的信息。
或许是亚马逊的模式决定了你爱看书(或许是用它收购的 Goodreads 的信息),并指出有了 Prime,你就可以在 Kindle 上阅读无限量的免费书籍。(亚马逊还会跟踪和存储用户在 Kindle 上制作的文本亮点,以进行图书推荐。)如果你还不是 Prime 会员,但经常付费让你的产品在一天或几个小时内发货,亚马逊的模式可能会提到,有了 Prime,许多运输速度都是免费的。该公司不断使用 A/B 测试来调整他们的广告方法,以获得新客户。
在您购物期间,亚马逊运行信用卡交易的欺诈检测算法,该算法可能会考虑到不规则的购买行为。这些预测模型可以检测系统入侵和黑客攻击企图,防止信用卡数据或员工 ID 等数据被盗。
在你购买了一件产品后,亚马逊必须找到一种方式来运输该产品,通过产品的四个阶段:仓库、货机、“最后一英里”送货卡车运输和你的房子。
假设的产品路线图。
利用亚马逊的 90 个仓库、50 架货机和数十万辆送货卡车,数据科学算法必须规划最佳的物流运作:
- 假设一架货运飞机满载 75%,其中所有物品都是一天交货,这意味着飞机必须在一小时内准时起飞。剩余货物晚点,八小时后到达。飞机到底走不走?数据科学算法必须给出一个数字,说明如果一天的保证被打破,客户将损失多少价值,并将其与旅行成本进行比较,以做出决定。
- 亚马逊的预期运输模型使用你的购买数据来预测你可能会购买哪些产品,你可能会在什么时候购买,以及你可能需要它们的地方。结合住在你附近的人的偏好,亚马逊将你肯定会购买的产品送到你附近的配送中心,这样当你需要时就可以准备好了。
- 考虑到天气、交通拥挤或不可预见的事件,以及最小化配送成本和优化汽油购买成本和位置,您如何规划整个城市的最佳送货卡车路线?在亚马逊庞大的规模上,它不能牺牲数百毫秒的时间来咨询谷歌地图 API 相反,它必须根据交通预测创建自己的路线优化系统。这是数据科学(图论)中最困难的任务之一。
- 许多亚马逊的客户接受了更长的 4-5 天的交付窗口(要么因为他们不是 Prime,要么因为他们得到了某种形式的等待补偿)。亚马逊部署了库存预测模型,以确定每种产品在任何时间任何仓库中应该保留多少份,这样当 4-5 天的交付窗口接近结束时,产品仍然可用,同时最大限度地减少运输成本和产品腐烂。
- 在仓库内,亚马逊正在用机器人取代工人(在产品检索方面),机器人可以不间断地工作,符合该公司的 24/7 商业模式,可以更快地工作,而且不需要支付工资。在每个仓库履行中心,亚马逊的仓库机器人会绘制最快的路线来到达分配给它的物品,并意识到其他机器人的路线。为了创造一个智能机器人大军,使其不会天真地遵循最小欧几里德距离路径,而是考虑到其他人的意图,仓库机器人使用强化学习程序进行训练。该机器学习领域寻求不断训练模型,使用外部环境反馈使其更好、更具适应性,即使在服务中也是如此。这些仓库机器人显著提高了亚马逊的产品效率。
自始至终,熟悉而简单的产品采购平台亚马逊挤满了数据科学应用程序——更不用说该公司的许多其他收入流,包括 AWS(亚马逊网络服务),这是一种面向各地企业的数据存储和机器学习行业标准;亚马逊 Go,西雅图的一家新的无收银员、无结账的商店,使用面部识别、计算机视觉和机器学习方法;以及亚马逊的诸多收购,包括杂货巨头全食超市(Whole Foods)、鞋类销售商 Zappos(以客户服务闻名)、热门游戏流媒体平台 Twitch,以及智能门铃和安全摄像头制造商 Ring。在数字时代,数据科学的智能利用,从字面上看,转化为数十亿美元。
“每个公司的未来都有大数据,每个公司最终都会从事数据业务。”托马斯·达文波特
如果你喜欢这篇文章,你可能也会喜欢关于数据科学如何解决 Instacart 的复杂挑战的分析:
[## Instacart 如何利用数据科学解决复杂的商业问题
买杂货从来没有这么复杂
medium.com](https://medium.com/dataseries/how-instacart-uses-data-science-to-tackle-complex-business-problems-774a826b6ed5)
AMBERT:多粒度的 BERT
字节跳动的一个 BERTology 贡献(是的,抖音人!)
就在我们以为伯特的所有名字变体都被取了(罗伯塔、艾伯特、福楼拜、科尔伯特、卡门伯特等。),随之而来的是 AMBERT ,另一个接管自然语言理解的变形金刚布偶的增量迭代。《安伯特》于 8 月 27 日由《抖音》和《头条》的开发商字节跳动出版。
AMBERT 建议对 BERT 做一个简单的修改:对输入进行两次标记,一次用细粒度标记器,一次用粗粒度标记器。
这篇文章主要是对 AMBERT 论文的总结,意在提炼主要观点,但不涉及实质细节,但我偶尔会加入个人观察。我会在我自己的评论/想法前面加上🤔表情符号。
AMBERT 碰巧也是一种法国奶酪,以法国公社命名。请原谅我蹩脚的双关语。爱丽丝·多诺万·劳斯在 Unsplash 上拍摄的照片。
核心思想:双向标记化
AMBERT 建议对 BERT 做一个简单的改动:对输入进行两次标记化,一次用细粒度标记器(英文为子词或词级,中文为字符级),一次用粗粒度标记器(英文为短语级,中文为词级)。希望能利用两个世界的优势。前者意味着更小的词汇量,更少的词汇外标记,每个标记更多的训练数据,从而更好的泛化。后者意在对抗基于注意力的模型通过细粒度标记化学习的强烈偏见。例如,标记“new”将强烈关注“york”,即使它们在一个句子中的共存与纽约无关(例如,“York Minster 的一个新教堂建于 1154 年”)。
“约克牧师的一座新教堂建于 1154 年”这句话中的自我关注。左图:细粒度标记化。右图:粗粒度标记化。随着细粒度的标记化,“新”错误地照顾到“约克”。通过粗粒度的标记化,“a_new”正确地照顾到了“chapel”。改编自论文中的图 1 和图 2。
上面的例子表明,当细粒度的“a”和“new”令牌被连接成单个粗粒度的“a_new”令牌时,模型正确地将其注意力指向“chapel”。
正如这篇论文的作者所指出的,粗粒度的标记化不可能总是完美的——更长的标记意味着在如何将字符分组为标记方面更加模糊。🤔例如,考虑一个输入,比如“我梦想着一个有着无尽夏天的纽约”。上面的记号赋予器可能会错误地产生两个记号“a_new”和“york”。希望在这种特殊的情况下,模型会更加信任细粒度的“a”/“new”/“York”标记化。
两个输入共用一个 BERT 编码器
向前遍历模型包括以下两个步骤:
- **文本记号→记号嵌入(通过单独的权重)😗*每个记号列表(一个细粒度的,一个粗粒度的)在它自己的嵌入矩阵中查找,并转换成实值向量列表。
- **令牌嵌入→上下文嵌入(通过共享权重)😗*两个实值向量被馈入同一个 BERT 编码器(一堆变换器层)——这可以通过单个编码器副本顺序完成,也可以通过两个带有绑定参数的编码器副本并行完成。这产生了两个每个标记的上下文嵌入列表。
因为 AMBERT 使用两个嵌入矩阵(每个标记化一个),所以它的参数计数明显高于 BERT 的(194m 对 110M 的英语基本模型)。然而,等待时间保持相对不变,因为 AMBERT 只是增加了一组新的字典查找。
安伯特变奏曲
AMBERT 的普通版本做出了两个强有力的设计决策:
- 两个输入共享编码器,如前一节所述。
- 两个输入相互独立。细粒度令牌不关心粗粒度令牌,反之亦然。他们最终的语境嵌入是相互独立的。
作者提出了两个替代版本来挑战这些决定:
- AMBERT-Combo 有两个独立的编码器,一个用于一种标记化;这使得英国模型的尺寸从 194 米增加到 280 米。
- AMBERT-Hybrid 回复到传统的 BERT 模型,并单独将其输入修改为两个标记化的连接。
在深入探讨 AMBERT 的训练程序和表现之前,让我们先来看看这两个问题。当考虑分类和机器阅读理解基准的聚合指标时, vanilla AMBERT 优于两种变体。AMBERT-Combo 偶尔在个别任务上得分更高。消融研究支持以下假设:
- AMBERT-Combo 在大多数情况下表现不如普通 AMBERT,因为两个独立的编码器阻碍了标记化之间的信息共享,并允许它们各自的输出上下文嵌入发散。
- AMBERT-Hybrid 允许一个微调的令牌处理一些接近的粗粒度的对应部分(或者是完全相同的令牌,或者是它的一些扩展),这削弱了重要的内部令牌化注意。
培训程序
对于预训练,作者使用标准屏蔽语言模型(MLM)目标,在两次标记化中屏蔽相同的文本跨度(例如,如果粗粒度标记“a_new”被屏蔽,那么微调的“a”和“new”标记也是如此)。最终损失将两次标记化的标准交叉熵损失相加。
当为分类进行微调时,上游分类器基于以下上下文嵌入做出三个预测:a)细粒度的,b)粗粒度的,以及 c)两者的串联。这些预测中的每一个对最终损失的贡献都是相同的,还有一个正则化项,它鼓励细粒度和粗粒度表示在矢量空间中接近。似乎,为了推论,作者使用了 c)中的预测,尽管措辞并不完全清楚。
NLU 基准测试结果
平均而言,AMBERT 有时表现优于其他 BERT 衍生模型,在中国基准上的利润率高于英国基准。
- 当与其他源自 BERT 的模型进行比较时,这些模型的准确性来自于它们各自的原始论文,AMBERT 在线索分类(中文)上增加了 0.9% ,而在胶水(英文)上损失了 0.4% 。正如 AMBERT 的作者所指出的,这种比较应该仔细解释,因为基线是在稍微不同的制度下训练的。
- 当与作者在与 AMBERT 相同的条件下重新训练的标准 BERT 模型(具有规则的词块标记化)相比时,后者在线索分类(中文)上获得 2.77% ,在 GLUE(英文)上获得 1.1% 。🤔这种比较应考虑到 BERT 基线的参数少得多(英语为 110M 比 194M)。
🤔关于粗粒度标记化的一个注记
我得从我对中文标记化知之甚少的免责声明说起;我的知识范围仅限于论文作者提供的内容。根据他们的描述,中文的粗粒度标记化听起来像是将字符自然分组为单词:
中文文本中的字符自然被视为细粒度的标记。我们对文本进行分词,并将单词视为粗粒度的表征。我们使用了字节跳动开发的分词工具来完成这项任务。
相反,我将关注英语中的粗粒度标记化:
我们以下面的方式对英语文本执行粗粒度的标记化。具体来说,我们首先使用 KenLM (Heafield,2011)和维基百科计算文本中的 n 元语法。接下来,我们构建一个短语级词典,它由出现频率足够高且其最后一个单词高度依赖于其先前单词的短语组成。然后,我们使用贪婪算法对文本进行短语级标记化。
这种描述有些矫揉造作,尤其是对于一篇标题中带有“符号化”一词的论文。虽然确切的过程应该更加清晰,但高级算法似乎是:1)从维基百科建立一个短语字典,2)基于频率和启发式规则对其进行删减,以识别改变开始标记会严重影响结束标记的含义的短语。
问题是——更长的令牌不可避免地变得更加特定于领域,尤其是当基于频率选择时。如果微调数据集(比如法律文档)的性质与维基百科不同,大多数粗粒度的标记都可能不在词汇表中,在这种情况下,模型将只依赖于细粒度的标记(即恢复到标准的 BERT)。事实上,即使没有领域转换,这个问题也是显而易见的:AMBERT 论文中的一项消融研究粗略标记了 10k 个英语句子(可能来自维基百科),并观察到其中 86%与细粒度标记重叠。
另一个问题是粗粒度的标记化是否能够支持多语言模型——联合词汇表的大小可能过于昂贵。
一般来说,对自然语言理解的研究一直在向相反的方向发展,从粗粒度到细粒度:BERT 用子词单元取代了标准的词标记。确实有研究[2]表明在 MLM 中屏蔽更长的跨度是有帮助的,但是这样的论文陈述的是输出粒度,而不是输入粒度。
结论
AMBERT 用两种粒度的记号化扩充了 BERT,在中文基准测试中显示了有希望的结果。在英语数据集上,增益较低,粗粒度的标记化更加模糊。尽管如此,多层次标记化的想法仍然很有吸引力。人们可以考虑更精细的英语粒度级别,或者由不同算法产生的相同粒度的记号化。
参考
- 张&李,AMBERT: 多粒度标记化的预训练语言模型(2020 年 8 月)
- Joshi 等人: SpanBERT:通过表示和预测跨度来改善预训练 (2019)
美国手语识别
一篇关于使用 CNN 识别美国手语并在数据集上比较 CNN 的各种架构的性能的详细文章。
国家耳聋和其他交流障碍研究所(NIDCD)指出,有 200 年历史的美国手语是一种完整、复杂的语言(字母手势只是其中的一部分),但却是许多失聪的北美人的主要语言。因此,建立一个可以识别手语的系统将有助于聋人和重听人利用现代技术更好地交流。在这篇文章中,我们将通过 CNN 的不同架构,看看它如何对手语进行分类。
美国手语手势(https://www . ka ggle . com/data munge/Sign-Language-mnist # Amer _ Sign 2 . png)
关于数据集:
数据集可以从 Kaggle 的网站 *访问。*训练数据集包含 27455 幅图像和 785 列,而测试数据集包含 7172 幅图像和 785 列。数据集的第一列包含图像的标签,而其余的 784 列表示展平的 28,28 图像。
数据中的随机样本。
让我们看看数据集的分布:
来自训练数据集的不同字母的计数。请注意,字母 J (9)和 Z(25)不在数据集中。可以看出,数据的分布是均匀的。
开发神经网络模型:
模型的输入层将获取大小为(28,28,1)的图像,其中 28,28 分别是图像的高度和宽度,而 1 表示图像的灰度颜色通道。
模型的输出层将具有用于 26 个不同字母的 26 个神经元,并且激活函数将是 softmax,因为它是多类分类问题。
美国手语识别的基本 CNN 结构。
编译和训练模型:
编译和训练模型
模型的训练精度为 100%,而模型的测试精度为 91%。这显然是一个过度拟合的情况。下一步,我们将使用数据扩充来解决过拟合问题。
数据扩充:
测试数据集中可能存在一些在训练数据集中不可用的图像特征/方向。因此,我们的模型无法识别这些模式。这可以通过增加数据来解决。数据扩充是训练神经网络的重要步骤。例如,在训练数据集中,我们有右手的手势,但在现实世界中,我们可以从右手和左手都获得图像。数据扩充允许我们通过旋转、翻转、缩放、裁剪、标准化等方式创建不可预见的数据。
Tensorflow 提供了 ImageDataGenerator 函数,该函数在流上增加内存中的数据,而无需修改本地数据。这也给了我们尝试不同增强参数的空间。我们将扩充数据,并将其分为 80%的训练和 20%的验证。
扩亚分裂。
扩充数据后,100 个周期后的训练准确率为 93.5%,测试准确率在 97.8 %左右。
这当然解决了过度拟合的问题,但是花费了更多的时间。有没有一种方法可以在更少的时期内训练我们的模型?是的,批量标准化是我们问题的答案。
批量标准化:
批量标准化允许标准化隐藏层的输入。从上面的模型中,我们可以看到,通过数据扩充,我们可以解决过度拟合训练数据的问题,但需要更多的时间进行训练。批量规格化通过规格化隐藏层的权重解决了这个问题。你可以在这里阅读更多关于它如何影响一个模型的性能。
批量标准化的准确性
包含批量归一化后的训练准确率为 99.27,测试准确率为 99.81。这仅需要 40 个历元,几乎一半的时间没有批量归一化。
批量标准化模型的损失图
如果我们仔细观察图表,在 15 个历元之后,损失没有显著减少。因此,我们可以在 15/20 周期后使用早期停止来停止训练。这几乎是不进行批量标准化时的 1/5。
**问题:**验证精度波动很大,根据停止训练的型号,测试精度可能会更高或更低。这是由于较大的学习率导致模型超过最优值。这可以使用在每个时期后下降某个值的衰减学习率来解决。
衰减学习率
我们可以在 Tensorflow 中实现衰减学习率,如下所示:
衰减学习率
使用学习率衰减的模型的准确性
准确性以及训练和验证准确性的损失在 20 个时期结束时已经收敛。这让我们对我们的结果更有信心,因为与之前的图相比,这些图更平滑。使用相同配置的训练准确率为 99.88,测试准确率也为 99.88。
使用学习率衰减的模型丢失
使用学习率衰减和不使用学习率衰减的模型之间的准确性没有太大差别,但是与不使用学习率衰减的模型相比,使用学习率衰减的模型有更高的机会达到最优。因此对结果更有信心。
CNN 的不同架构及其准确性:
可以找到关于本文的 Kaggle 内核:https://www . ka ggle . com/rushikesh 0203/mnist-sign-language-recognition-CNN-99-94-accuracy
你可以在 GitHub repo 中找到完整的项目以及不同型号的 Jupiter 笔记本:https://GitHub . com/Heisenberg 0203/AmericanSignLanguage-Recognizer
如果你喜欢这篇文章,请随时与他人分享。
美国各州、联邦政府和属地
如何添加更多的信息到地图,并停止使用等级,请。
这不是一篇关于最新尖端数据科学的文章。大多数人看到的与数字直接相关的东西很少不是前沿数据科学。事实上,它通常根本不是任何类型的数据科学或有价值的数据分析。这就是我所说的“数据吸入”。数据混杂是指你随意地将数据混杂在一起,就像几种颜色的玩具一样,并称之为“雕塑”。这个特殊的例子中有几个“可以做得更好”的元素。这种不分析是许多悲剧的根源。在我们的特殊案例中,它是基于一份清单,该清单旨在显示美国哪些州更依赖于联邦政府。
其中的数据是基于四个变量的列表:1)州政府收入的联邦份额;2)联邦对州的资助与从州征收的联邦所得税的比率;3)联邦政府雇用的州劳动力的百分比;以及 4)该州联邦雇员的工资中位数与私营部门雇员的工资中位数的比率。我将不再挑选变量的具体选择和定义,并假设它们是可以接受的。无论如何,本·盖尔先生,“一位经验丰富的金融作家,目前在 SmartAsset 担任退休和投资专家”选择了它们,所以他可能有一些理由支持定义。事实上,盖尔先生“已经出现在《财富》、《Mic.com》和 CNNMoney 上”。
他们做了什么
那么,对这些数字做了什么来提供一个结果。首先,每个变量都被分成等级(多么可爱)。然后,对每个州的排名进行平均(哦,平均排名,哦我的)。然后,然后,无畏的作者认为重新调整平均排名(50 个州)到 0 到 100 是合适的。当我把脸撞到墙上的时候,我得到了两只福里斯特·惠特克的眼睛。我们至少得到一个图表或图形来总结这个结果了吗?嗯,我们有没有拍到一张上面有数字的桌子的照片!对,一张表的一张图。我确信盖尔先生非常了解金融。但是他真的不应该放弃他的日常工作去做数据分析和演示。
他的流程有什么问题?毕竟,排名可以使数字变得平滑,因此更容易跟踪。平均可能是合并数字的有效方法。重新调整有它的用处。再说了,谁需要一张图片呢?表格不呈现“真实数据”吗?让我这样回答这些问题:我可以有一只可爱的小狗,一些好的表土,和一瓶绿色的 Meanie 清洁剂。每一种都有其用途,但这并不意味着你可以把它们都扔进搅拌机,然后得到更好的东西。
能做些什么?
从最后一点开始,表格是附录。除非你有很少(大概 5 个)点,否则表格是无法被人脑整体处理的。我们天生喜欢图片,一张桌子的图片不算。既然我们讨论的是州,那么用颜色编码或“choropleth”地图来展示最终的索引将是一种很好的方式,就像这样:
联邦属地的单一索引簇
我是怎么做的?我使用了谷歌地理地图 API。这个图表的具体代码在文章的最后。由于 Medium 对现代数据可视化的支持非常出色,因此我在自己的 scratch HTML 页面上截取了一张图表的图片,并将其作为图片加载,如上所示。颜色越深,国家的依赖性越强,在令人困惑的 0-100 范围内。
痛苦地滥用数字
为什么我说“莫名其妙”?这就引出了数据发布的下一个问题。在现实世界中,零通常意味着零,或者至少是正值和负值的中间值。给任何一个州打零分应该意味着这个州完全不依赖联邦政府。没有一个州完全不依赖联邦政府。尽管如此,规模从零开始。就好像说零度,华氏有什么实际意义。
不仅如此,规模在 100 结束。为什么是 100?我们通常将 0-100 的范围与“百分比”联系起来,0 表示没有,100 表示有总数。那么,我们有一个排名 100 的州(新墨西哥州)。这是否意味着它 100%依赖于联邦政府?不,这只是意味着这是最高的平均排名。我要去把我的头伸进泡菜汁的大桶里,直到我感觉好些。
我回来了。我闻起来像莳萝和醋,但我加强解决下一个问题。预先定标的指数是通过平均排名而创建的。求平均值。行列。取等级,然后平均。事情不是这样的,就是不是这样的。等级不是数量。军衔有目和有无数量。你不能把 5 级加到 4 级,得到 9 级。那是因为“5 级”的意思是“第 5”,而不是“5 级东西”。此外,由等级表示的变量的基本“大小”在每个等级步骤中可能不相同。等级 5 和等级 4 之间的距离可能是 3 个单位,但是等级 4 和等级 3 之间的距离可能是 14 个单位!不会加法就不会平均。
局部修复
然而,我确实暗示了正确的解决方案:如果你有几个变量,你想创建一个总排名,你相加或平均(算术平均只是一个除以常数的总和,所以它是加法的一个变种)的底层变量被排序*,然后*对结果进行排名!我们该如何处理这些数据呢?一分钟后。
最后,第一个问题,在对数据做任何其他事情之前,数据被立即归入等级。这是一个很好的方式来表达“我根本不理解这些数据。”等级很容易表示,但是它们丢弃了数据中几乎所有的信息,只留下顺序。这是提供一种幻觉分析的好方法。
我不会让你无所适从,如果(我说如果)你想在一个单一的索引中呈现这些关于各州的数据,有什么不那么糟糕的方法呢?首先,您需要为每个州创建一个单独的数字。一个简单的方法是对四个数据点进行平均。哦,等等,它们都有不同的音阶!这将意味着一个更大规模的数据点将主导所有其他数据点。我们可以通过将所有数据重新调整到相同的范围来解决这个问题。然后我们可以对重新调整后的数据进行平均。
然后,我将数据映射到相同的配色方案,但没有应用等级或重新缩放。我没有对平均值进行排名,因为它产生了一个微不足道的 1-50 范围。相反,由于 choropleth 可以根据数据进行调整,所以我将平均值应用于从 0(最小理论可能值)到 1(最大理论可能值)的色标。将它们放在一起比较,你会发现一些显著的差异。
它在两个方面更准确:它没有过分强调几个州表面上的“纯度”,这实际上只是平均排名的一个假象。它显示了一个“更模糊”的结果,可能会更准确地描绘一些潜在的现实。这是因为我没有诉诸排名。等级引入了虚假的清晰。这是一个不说谎的好方法。他们让你假装差异是均匀分布和明显的。现实几乎从来都不是均匀分布和赤裸裸的。结案了?
左边是旧地图,右边是新地图
不,不是案子结了,案子是跟我从来不结的。记住,我们从四个变量开始,将它们合并成一个指数。我们的指数比原来的好了一点,但仍然是不合理的。不理智?假设它有很多假设,其中之一是数据中没有结构。
寻找结构
数据中的结构是什么?每当你有多个变量时,就有可能它们并不都测量同一个“东西”。这些“东西”是什么?有时,有些事件或情况不会立即显现出来。然而,它们可以部分显现。如果你收集数据,你也许能够描述底层“事物”的点点滴滴,然后利用这些点点滴滴获得底层“事物”的概念。这些“事物”也被称为“潜在变量”。
有很多方法可以尝试发现潜在变量。一种常用的方法叫做探索性因素分析。这是基于在一对一的基础上观察不同的变量如何相互关联。让我举例说明:
正如你所看到的,一个简单的图表(谢谢,基数为 R)显示了四个变量之间的关系,显示了可能存在一些关系,但是很混乱。幸运的是,还有一件事我可以帮忙澄清。众所周知,当你有“散乱”的数据时,对数可以产生更多的清晰度。当我画对数时,我得到了这个:
远非完美,但更容易看出联邦对州收入的贡献和联邦资金与所得税的对数之间的线性关系。因此,将使用数据日志进行进一步的分析。但是这有什么用呢?我们如何找到那个“结构”?就像我说的,一种方法是使用探索性因素分析。这总是从所有数据的相关矩阵开始,就像这样:
Fed to Funding vs Percent Fed Fed vs
State Taxes Employment Private Wage
1.000 0.616 0.038 0.055
0.616 1.000 0.214 0.117
0.038 0.214 1.000 0.491
0.055 0.117 0.491 1.000
抱歉,桌子看起来像垃圾,但是灵媒不相信现代的东西,比如合适的桌子。有一些好的相关性,一些中等的相关性,和一些非常弱的相关性。基本上,前两个变量相互关联很好,后两个相互关联很好。这是一个非常简单和容易看到的结构(幸运的是)。我们可以绕过花里胡哨的方式来挑选我们想要提取多少因子。我告诉你一个秘密。花里胡哨的裤子方式(像平行分析)也说了两个因素。所以,如果我拿出 R psych 包,用两个因素做因素分析,我会得到一堆东西。
我得到的东西之一就是所谓的“因子分”。我可以为你复制它们,但它们毫无意义。这是因为因子得分是输入变量在不同程度上的线性组合,不再直接代表输入。相反,它们应该反映我很久以前谈到的那些“潜在”的东西。这种方法也使得单位难以理解。它们以零为中心,单位大致是标准差,有点像,组合,看书。
无论如何,我们也得到了“负荷”,它们可以帮助我们解释因素的含义。在我们的分析中,我们得到了一个因子,联邦对州收入的贡献为 1.00,联邦资金对所得税的贡献为 0.61。另一个因素是联邦就业率为 1.00,联邦相对于私人工资为 0.49。超过 0.40 的负载通常被认为是非常好的,所以我们可以将我们的因素命名为“政府依赖性”和“个人依赖性”。我们可以在 choropleth 上展示这些,但这非常棘手。我们有两个必须用颜色同时显示的变量。看配色,可以做到。我们得到的看起来像这样:
两个因素州对联邦政府的依赖
我们有什么?一个州越红,对该州联邦政府的个人依赖性(就业、更好的工资)就越大。一个州越蓝,该州政府就越依赖联邦政府的资助。较浅或较深的灰色代表较低或较高的综合依赖性。当我们根据原始的一维、基于排名的索引,将其与原始地图进行比较时,会发生什么呢?
如果你眯着眼睛看,你可以看到两张地图之间的一些对应关系,但也有一些有趣的差异。例如,弗吉尼亚和马里兰对联邦政府有很高的个人依赖性。这是有道理的,因为 DC 的华盛顿州正好位于两者之间。另一方面,看起来那些只有低度到中度“指数”依赖的州有明显的个人依赖因素。一大群个人和政府的依赖者从德克萨斯州开始,在缅因州结束。有趣的是,加州、俄勒冈州和伊利诺伊州的情况并不太糟,但威斯康星州和康涅狄格州在这两个类别中都保持了相当低的依赖度。换句话说,如果人们认为对联邦政府的“依赖”是不可取的,新地图有助于了解哪种依赖可能在一个州占主导地位,减少地方政府的依赖需要与减少个人依赖完全不同的手段。
还有什么?
那么,有没有一种方法可以同时分析所有四个变量并考虑数据结构呢?我们可以尝试查看许多方法,但是它们变得很难呈现和解释。在这种情况下,它需要一个四维表示。
当然,这一切都很好,但是如果单独呈现的话,除了隐式地比较状态之外,还需要额外的工作。你必须认识一个州的形状,比较不同的颜色,等等。这些地图很好,一目了然,但是如果您想知道哪些州与其他哪些州真正相似呢?一种方法是聚类分析。有 k-means,k-medoids,不可计数的层次聚类方法。这次我不打算谈这个了。我只是想展示你如何通过使用正式的数据分析技术来讲述一个更丰富的故事,而不仅仅是通过吸食数据。
python 的自适应套索
如何构建一个了解真相的 oracle 估算器(带代码!)
Pierre Bamin 在 Unsplash 上拍摄的照片
这是我关于惩罚回归系列的第二篇文章。在第一篇文章中,我们讨论了如何在 python 中实现稀疏组套索,这是当今回归模型可用的最佳变量选择替代方案之一,但今天我想更进一步,介绍一下自适应思想,它可以将您的回归估计器转换为 oracle ,了解数据集的真相。
今天我们将看到:
- 拉索(和其他非自适应估计器)面临的问题是什么
- 什么是 oracle 属性以及为什么您应该使用 oracle 估计器
- 如何获得自适应套索估计器
- 如何用 python 实现一个自适应估计器
套索惩罚的问题
先简单介绍一下套索回归。假设您正在处理一个数据集,其中您知道只有几个变量真正与响应变量相关,但您不知道是哪些变量。也许你正在处理一个高维数据集,它的变量比观测值**、**多,其中一个简单的线性回归模型无法求解。例如,一个由数千个基因组成的基因数据集,但其中只有少数基因与疾病相关。
作者制作的图像。
因此,您决定使用 lasso,这是一种向回归模型的β系数添加 L1 约束的惩罚方法。
线性回归中的套索公式。
这样,您将获得**稀疏的解决方案,**意味着许多β系数将被发送到 0,并且您的模型将基于少数不为 0 的系数进行预测。
通过降低模型复杂性(不等于 0 的变量数量),您已经潜在地降低了您的模型的预测误差。但是作为一个副作用,你已经增加了β估计的偏差(这被称为方差偏差权衡)。
Lasso 提供稀疏的解决方案,这些解决方案是有偏差的,因此 lasso 选择的有意义的变量可能与真正有意义的变量不同。
作者制作的图像。
其他惩罚如岭回归和稀疏群套索面临同样的问题:它们提供了有偏见的解决方案,因此无法识别我们模型中真正有意义的变量。
oracle 属性
我们的目标很明确:我们想要一个没有偏见的解决方案,这样我们就可以从数据集中选择变量,就好像我们事先知道哪些是真正重要的变量一样。就像我们的评估者是知道真相的先知一样。
我知道,将“oracle”称为回归估计量听起来像是我想出来的,但它实际上有一个数学形式的定义,由范和李(2001)提出。如果一个估计量能够以收敛到 1 的概率正确地选择模型中的非零系数,并且非零系数是渐近正态分布的,那么这个估计量就是预测的。
这意味着给定一组 p 变量{β1,…,βp},如果我们考虑两个子集,
oracle 估计器选择概率趋于 1 的真正重要的变量。渐近地,两个子集重合。
适应性套索
那么……我们如何获得我们的 oracle estimator 呢?例如,我们可以使用自适应套索估计器。这个估计量最初是由邹(2006)提出的,其背后的思想非常简单:增加一些权重 w 来校正 lasso 中的偏差。
如果一个变量很重要,它应该有一个小的权重。这样,它会受到轻微的惩罚,并保留在模型中。如果它不重要,通过使用一个大的权重,我们可以确保去掉它并把它发送到 0。
但这就引出了我们今天要讨论的最后一个问题:
如何计算这些重量
计算这些权重的方法有很多,但今天我将采用最简单的一种:
- 求解一个简单的套索模型
2.计算重量如下:
3.插入权重并求解自适应套索
仅此而已。现在,您的估计器是一个先知,您将获得比使用简单套索更好的预测(在预测误差和子集选择方面)。
但是不要相信我,让我们使用asgl
包在 Python 中测试一下。
转向 Python 代码
我们从安装asgl
包开始,这个包在pip
和 GitHub 库中都有。
pip install asgl
导入库并生成数据
首先,让我们导入将要使用的库。我们将在使用来自sklearn
的make_regression()
函数生成的合成数据集上测试使用自适应 lasso 估计器的好处。我们的数据集将有 100 个观察值和 200 个变量。但是在 200 个变量中,只有 10 个与响应相关,其余 190 个都是噪声。
x
是形状为(100,200)的回归量矩阵,y
是响应变量(长度为 100 的向量),而true_beta
是包含贝塔系数真实值的向量。这样,我们就能够将真实的 betass 与 lasso 和 adaptive lasso 提供的 beta 进行比较。
训练模型
我们将比较一个简单的套索模型和一个自适应套索模型,看看自适应套索是否真的减少了预测误差,并提供了一个更好的有意义变量的选择。
为此,我们考虑对数据集进行训练/验证/测试分割。我们使用训练集来训练不同参数值的模型。然后,我们使用验证集选择最佳模型,最后,我们使用测试集计算模型误差(这不包括在模型训练和选择中)。这可以在asgl
包中使用TVT
类和train_validate_test()
函数直接完成。
拉索模型
我们将用一个penalization=lasso
解一个线性模型model=lm
,并定义lambda1
的值,它是与套索惩罚相关的参数λ。我们将根据最小均方误差(MSE)找到最佳模型,并将使用 50 个观察值来训练模型,25 个用于验证,剩余的(25 个)用于测试。所有这些都由train_validate_test()
功能自动执行。
最佳套索模型的预测误差(根据 MSE)存储在lasso_prediction_error
中,与模型相关的系数存储在lasso_betas
中
自适应套索模型
现在我们解决自适应套索模型。为此,我们指定penalization=alasso
(代表自适应套索),并选择用于计算权重的技术作为weight_technique=lasso
。如上所述,这样我们将解决一个初始套索模型,计算权重,然后将这个权重插入第二个套索模型,这将是我们的最终模型。
决赛成绩
最后,我们来对比一下结果。我们将比较两个指标:
- 预测误差。每个模型实现的 MSE。越小越好。
- C 正确选择率:被正确选择的变量的百分比(被模型认为无意义的无意义变量的数量和被认为有意义的有意义变量的数量)。此指标代表模型执行的变量选择的质量。越大越好,最大值为 1,最小值为 0。
在下面的代码片段中,bool_something
变量用于计算正确的选择率。
自适应套索得到的结果比简单套索得到的结果好得多。我们看到自适应套索误差几乎比套索 误差小 8 倍(套索误差为 1.4,套索误差为 11.8)。在变量选择方面,lasso 只正确选择了 200 个变量中的 13%,而自适应 lasso 正确选择了 100%的变量。这意味着自适应套索能够正确识别所有有意义的变量为有意义的,所有有噪声的变量为有噪声的。
这就是这篇关于适应性套索的文章。请记住,尽量使用 oracle 评估工具,因为他们知道您的数据集的真实情况。我希望你喜欢这篇文章,并发现它很有用。如果您有任何问题/建议,请联系我。
要更深入地了解asgl
包提供了什么,我推荐阅读 Github 存储库中提供的 jupyter 笔记本,要了解 oracle 估计器,我推荐最近发表的一篇论文,作为我博士论文的一部分:分位数回归中的自适应稀疏组套索。
祝你今天开心!玩的开心!
参考
范军,李锐(2001)非凹惩罚似然变量选择及其预言性质。美国统计协会 96(456):1348–1360
邹宏(2006)自适应套索及其甲骨文性质。美国统计协会 101(476):1418–1429
门德斯-奇维埃塔,a .,阿吉莱拉-莫里洛,M. C .,利略,R. E. (2020)。分位数回归中的自适应稀疏群套索。数据分析和分类的进展。
AWS DeepRacer 高级指南
使用强化学习的自主 f1 赛车
由 Unsplash 上的 chuttersnap 拍摄
近年来,自动驾驶汽车已经成为一个热门领域,特斯拉等公司每天都在推进技术的边界。AWS 的 DeepRacer 正在利用这种炒作,变得越来越受欢迎,甚至组织了一个联赛来参赛。
2020 年 5 月,AWS 组织了一场特别活动,与一级方程式赛车合作。这项赛事的赛道是高度复杂的巴塞罗那-加泰罗尼亚赛道。在计时赛类别中,我们的团队在近 1300 名参与者中获得了第 12 名。
在这篇文章中,我们将看看我们的大学团队在 AWS DeepRacer F1 计时赛中获得前 1%排名的因素。因此,如果您有兴趣了解在 AWS DeepRacer 中培训强化学习模型的高级技术,这是适合您的文章。
我们将讨论以下几点:
- AWS DeepRacer 和我们的设置的简短介绍
- 计算最佳比赛路线和速度
- 优化行动空间
- 奖励函数
- 超参数
- 日志分析的持续改进
- 使用 Selenium 自动提交比赛
- 总结和后续步骤
要阅读本文,您不需要广泛的数据科学背景。事实上,我们的团队有商业背景,在西班牙巴塞罗那的 ESADE 商学院学习商业分析。但是,理解本文需要 Python 的基础知识。
AWS F1 推广视频
[## dgnzlz/Capstone_AWS_DeepRacer
“AWS DeepRacer 高级指南”一文中使用的代码
github.com](https://github.com/dgnzlz/Capstone_AWS_DeepRacer)
1.AWS DeepRacer 和我们的设置的简短介绍
AWS DeepRacer 是一款 1/18 比例的自主赛车,可以通过强化学习进行训练。可以使用虚拟汽车和轨道在 AWS 控制台中训练和管理该模型。当使用 AWS 控制台时,整个基础设施,包括模型的训练和赛道的虚拟化,都由 AWS 管理。
与经典的机器学习相反,当你没有数据,但有一个代理可以学习的环境时,使用强化学习。在我们的例子中,代理是汽车,环境是虚拟的赛车道。通过对代理人期望的行动给予奖励,代理人随着时间的推移学会在给定的环境中解决问题。要了解更多关于强化学习的知识,请阅读我的团队成员马克·塞尔韦拉的这篇文章:
[## 基于 AWS DeepRacer 为初学者讲解强化学习
强化学习如何在自主赛车中与神经网络一起工作的高级解释
towardsdatascience.com](/explaining-reinforcement-learning-for-beginners-based-on-aws-deepracer-efcefff65a9b)
DeepRacer 是专门为人们学习机器学习而打造的学习产品。3 个组成部分在使其任务成功中发挥了重要作用:虚拟训练环境、实体汽车和联盟。如果你想了解更多关于 DeepRacer 的信息,欢迎访问官网。
在本文中,我们将重点关注 AWS DeepRacer 控制台的使用,因此不涉及 AWS SageMaker 的定制。此外,只有虚拟比赛将被审查,因为物理比赛需要一个不同的方法。最后,我们将只考虑计时赛的形式。然而,所描述的大多数方法也可以用于其他比赛形式。
DeepRacer 的虚拟环境(图片由作者提供)
2.计算最佳比赛路线和速度
在虚拟比赛中,使模型过度适应特定的赛道是一种通过可接受的训练量获得良好模型的方法。因此,为了获得更好的时间,更快地向更高的速度收敛,更可靠,我们将使用一种规定的方法,在这种方法中,我们将使赛车沿着那条赛道的最佳赛道行驶。
为了计算赛车线,我们将使用在雷米库隆博士论文中描述的 K1999 路径优化算法。该算法已经在这个 GitHub Repo 中实现。它的工作原理是反复减小线路的曲率,引导汽车转弯,减少总的路径长度。所有 DeepRacer 的曲目都可以在 DeepRacer 社区的 GitHub Repo 下载。
对于 F1 赛道,结果是一个由 258 个非等间距坐标点组成的数组,这些坐标点代表赛车线。
与其他 DeepRacer 赛道相比,F1 赛道相当长。因此,要有一个能可靠完成 3 圈的模型,我们需要一个比短赛道模型更能规避风险的模型。实现这一点的一个方法是阻止赛车过于靠近赛道边缘。此外,F1 赛道的边界处有减速带,当驾驶过于靠近边缘时,会导致抓地力和控制力的丧失。因此,为了平衡这条赛道上的可靠性和速度,我们将比赛线限制在赛道宽度的 80%以内。
下图显示了在有和没有仅使用赛道内侧 80%的限制的情况下,结合不同的迭代次数的赛车线。
不同迭代次数和赛道宽度的计算赛车线(图片由作者提供)
接下来,我们要计算最佳速度。使用一种简化的方法,我们可以计算赛车线上每个点的最大速度
其中𝐹为横向抓地力, 𝑚 为汽车质量, 𝑟 为弯道半径。由于我们不知道𝐹或𝑚,我们可以通过给这些未知值分配一个常数来简化这个方程。
赛车线上每个点的半径可以通过在我们之前计算的赛车线上的 3 个点上画一个圆来计算:当前点和它前面和后面的点。求解半径,我们可以使用以下 python 函数计算半径:
虽然赛车线的点不是等间距的,但由于点的密度很高,计算出的半径仍然是准确的。因此,任何不准确之处都不应该大到足以造成差异。
一旦我们有了所有的半径,我们必须通过实验来计算𝑐。我们通过寻找模型可以完成最急转弯的最高可能速度来做到这一点。对于 F1 赛道,该最大速度约为 1.3 米/秒。我们稍后将使用该速度作为动作空间的最小速度。
𝑐的值是在不同的轨道上计算的,并且始终在 1.6 到 1.75 的范围内。
为了找到最终的最佳速度,我们将速度限制在赛车的最大速度,我们的团队在这条赛道上将其设置为 4 米/秒。此外,我们引入了一个前瞻因子,将其设置为 5。这意味着最佳速度是接下来 5 个点的最大速度中的最小值。前瞻值越大,汽车在转弯前越早刹车。
使用不同的前视值计算赛车线上的最佳速度(图片由作者提供)
与最佳比赛路线相比,最佳速度只是一个粗略的近似值,因为许多因素都没有考虑在内。为了获得精确的最佳速度,我们必须考虑精确的质量、质心、惯性矩、摩擦系数、转弯刚度以及最大加速和减速率。在设计奖励函数时,我们必须牢记这种不确定性。
3.优化行动空间
由于 DeepRacer 的动作空间是离散的,动作空间中的一些点将永远不会被使用,例如,4 米/秒的速度和 30 度的转向角。此外,所有轨道在曲线方向上都不对称。例如,F1 赛道是顺时针行驶的,导致右转比左转多。出于这两个原因,优化行动空间是有益的。我们可以通过删除不使用的动作来选择更快的收敛,或者如果我们保持相同数量的动作但更智能地分配它们,则可以选择更精确的驱动。我们选择后者。对于赛车设置,我们使用单个摄像机和一个 3 层卷积神经网络,因为任何更复杂的东西都不会提高计时赛的性能,只会增加收敛的时间。
我们遵循 5 个步骤的方法:
- 计算转向角度
- 添加高斯噪声
- 应用 K 均值聚类
- 手动添加操作
- 出口到 S3
3.1 计算转向角
到目前为止,我们只有赛车线上每个点的半径。该转弯半径必须转换为转向角,其值为
其中𝛼为转向角, 𝐿 =0.165 𝑚 为轴距, 𝑟 为曲线半径。
最佳比赛路线和最佳速度上的所有动作,针对不同的前瞻值(图片由作者提供)
3.2 添加高斯噪声
在一个完美的世界里,模型总是遵循最佳的比赛路线和速度。然而,这种情况从来没有发生过,尤其是在模型的训练刚刚开始的时候。因此,为了表示驾驶中的不确定性,并给汽车更多的灵活性来纠正以前的决定,我们给每个动作添加高斯噪声。我们只将高斯噪声应用于转向,而不是速度,因为修正先前的决定主要是通过转向来驱动的,而不是速度。
首先,我们必须确定高斯噪声的期望标准偏差。然后,我们生成一组高斯噪声,这些噪声稍后将被添加到现有的数据点中。
转向的高斯噪声分布+注入高斯噪声的动作的 KDE 图(图片由作者提供)
3.3 应用 K 均值聚类
使用 DeepRacer 控制台时,最大动作数量为 21。我们对注入高斯噪声的动作使用 K 均值聚类来计算 19 个动作。最后 2 个操作将在下一步中手动添加。我们使用 K-Means,因为这允许我们将欧几里德距离用于二维速度和转向——点彼此越接近,它们就越相似。群集的质心将代表一个动作。如果你不熟悉 K-Means,这篇文章很好地解释了它。
要查看我们对初始数据点应用了哪些额外的预处理步骤,请参考我们的 GitHub Repo 。
3.4 手动添加操作
在模型的每次更新之间,进行多个情节。例如,如果该值设置为 20,与前一集相比,汽车将在赛道上向前行驶 5%时开始每一集。因此,赛车很少会准确地在赛车线或其方向上起步。为了让汽车有可能在每集开始时转向想要的方向,我们想增加两个额外的动作:(分钟。速度,30)和(最小。速度,-30)。
最终行动空间大小 21(图片由作者提供)
总之,第 3 章中描述的方法是第一种方法,比预先定义的动作更好。然而,不对称的动作可能会迫使汽车在转弯和高速之间做出决定。例如,看上面的动作空间图,汽车不能以 4m/s 的速度行驶,同时转向 3。如果它想高速驾驶,就必须降低速度。因此,对动作空间的进一步实验可能会产生更好的结果。
3.5 向 S3 出口
找到我们想要的动作空间后,我们必须将它导出到 S3,其中保存了 DeepRacer 的模型元数据。我们遵循这些简单的步骤:
- 在控制台用 21 个动作创建一个模型,训练这个模型 5 分钟。请注意,我们不能改变动作的数量,只能改变每个动作的速度和方向
- 打开 S3 文件夹 AWS-deep racer-XXX/model-metadata/model name
- 下载 model_metadata.json 并用所需的操作替换现有的操作
- 在 S3,用新文件替换旧的 model_metadata.json
- 在 AWS DeepRacer 控制台中克隆先前创建的模型。这个克隆体将使用我们想要的动作空间进行训练
4.奖励函数
4.1 设计奖励功能的挑战
设计奖励函数可以被视为强化学习中最具挑战性的部分。这是由于奖励函数具有很大的复杂性。一方面,一个包含 5 行代码的奖励函数可以让我们最终绕过赛道,尽管速度很慢,而且有很多曲折。另一方面,有数百行代码的奖励函数,例如当具体告诉模型赛车线在哪里时。
为 DeepRacer 编写一个好的奖励函数的主要目的是这样的:对于给定的进度,时间越短,赛车应该获得的奖励就越多。例如,如果 2 集都取得了 50%的进展,但其中一集比另一集快,则快一集应该获得更多奖励。但是,我们也想奖励其他方面,比如接近最佳赛车线。因此,平衡不同的目标是设计奖励函数最具挑战性的部分。现在让我们来探索如何应对这些挑战,并设计一个有效的奖励函数。
4.2 我们奖励功能的各个方面
我们曾经排在第 12 位的奖励函数有 5 个主要方面:
- 默认奖励
- 靠近赛马场
- 最佳速度的速度差
- 用更少的步数跑完一圈
- 对明显错误决定的惩罚
首先,我们定义了一个默认奖励,也就是说,除了当汽车做出一个明显错误的决定时,它总是得到一个最低的奖励。由于偏离轨道导致零奖励,默认奖励越高,撞车对汽车的伤害越大,因此汽车将更加厌恶风险。然而,将默认奖励设置得太高违背了我们的目标,即更少的步数等于更多的奖励。所以默认奖励不要太高。
第二,我们增加了一个接近赛车线的奖励。计算这个奖励依赖于我们在第 2 章中计算的赛车线。增加这个奖励可以减少曲折,当一个新的模型刚刚开始训练时特别有用。然而,如果这个奖励太高,汽车只会乏味地沿着赛道行驶,而不会在乎速度。
第三,我们在最佳速度的基础上增加了一个奖励。我们没有使用“更快的速度等于更多的奖励”,因为如果我们有一个错误的奖励比例,赛车将主要关心快速行驶,永远无法通过训练中的第一个弯道。因此,更容易定义一个最佳速度,尽管我们知道它只是一个近似值。
第四,当赛车完成一圈时,我们会增加一个显著的奖励,所以当它达到 100%的进度时。它使用的步数越少,奖励越高。我们可以把奖励建立在步数的基础上,因为这个模型每秒走 15±0.5 步。一旦模型可以轻松完成,我们就开始给予奖励,同时我们会在与排行榜上最快时间相等的时间设置奖励上限。我们尝试不仅在完成一圈时给予奖励,而且间隔更频繁。然而,这导致了一个过于关注速度的模型。
最后,对于明显错误的决策,我们将总奖励设置为几乎为零,即:
- 偏离轨道,
- 航向偏离赛车线的方向超过 30 度,或
- 具有比最佳速度慢 0.7 米/秒的速度。
30 度和 0.7 米/秒的截止值对我们来说效果很好,但是进一步的实验可能会得到更好的结果。此外,这种几乎为零的惩罚使得我们的奖励函数变得离散。理论上,连续的奖励功能使模型学习得更快,因为即使汽车正在做一些可怕的事情,稍微不那么可怕的状态应该得分略高。至于截止值,进一步的实验也可能导致更好的结果。
我们的奖励函数的第 2、3 和 4 个方面(图片由作者提供)
要查看我们的整个奖励功能,请参考我们的 GitHub Repo 。
4.3 子奖励相加与相乘
我们将子奖励定义为奖励函数的一个方面,比如对接近赛车线的奖励。在奖励功能中,有两种主要的方法将子奖励合并到总奖励中:相加或相乘。
根据我们的经验,子奖励相加比子奖励相乘效果更好。我们认为情况是这样的,因为如果一个子奖励接近于零,当使用乘法方法时,该模型将不会关心改善其他子奖励。
例如,我们测试了两个子奖励的乘法方法:接近赛道和接近最佳速度。如果赛车远离比赛线,但在速度方面做出了正确的决定,赛车仍将获得零奖励,即使它做出了正确的决定。因此,在我们的实验中,采用乘法方法的模型永远无法完成一整圈,更不用说快速完成一圈了。由此,我们了解到,即使赛车不在最佳赛道上,我们也必须奖励赛车的好速度。
下面的图显示了这两种方法。在乘法方法中,我们可以看到,如果汽车远离赛道,提高速度就不再那么重要了。
可视化两种结合次级奖励的方法(图片由作者提供)
5.超参数
超参数有一个相当陡峭的学习曲线,所以掌握它们需要很多时间。因此,我们建议在试验超参数之前,先了解一下动作空间和奖励函数。
在我们的实验中,我们了解到,从默认的超参数开始,但由于轨道较长,批量较大,在最初几个小时的训练中效果很好。一旦模型开始收敛,我们就降低熵和学习速率。然而,超参数高度依赖于奖励函数、动作空间和轨迹,所以我们鼓励你多做实验。
关于熵的一个注意事项:有时,一个模型在克隆后表现更差。其原因是,随着模型对其决策变得更有信心,熵在训练期间随着时间的推移而降低。但是,当克隆模型时,熵被重置为超参数值,该值是在设置训练时定义的。
6.日志分析的持续改进
我们到目前为止所涉及的方面应该只是您的一个起点。每个轨迹、动作空间和模型的行为都不同。这就是每次训练后分析日志如此重要的原因。
幸运的是,DeepRacer 社区在 GitHub 上写了一个日志分析工具,用它可以分析训练课程、评估和行动空间。我们强烈建议使用它们。有多种资源,比如这篇博客文章,它解释了你需要知道的关于日志分析工具的一切。
日志分析的总体目标是尝试不同的回报函数、超参数和行动空间的变化,并查看哪些变化导致最佳时间、进度、改进或收敛。这种迭代方法需要时间。所以,你应该考虑你的时间和预算限制来计划你的实验。例如,我们的 3 人团队在 4 月和 5 月进行了 477 次不同的培训,累计培训时间达 2950 小时。
为了决定我们想要进一步追求的变化,我们看时间和进度。与类似的实验相比,在这两个方面表现良好的模型将被进一步研究。创建新模型时,我们遵循 3 步流程:
- 确保模型在赛道上取得进展。在早期,排除那些难以完成一整圈的车型
- 一旦至少完成了几圈,就把注意力放在更短的时间上。这一步的进度不必很高,只要至少完成了几圈
- 一旦圈速趋于一致,就要为更高的进度进行优化。虽然优化进度通常会增加单圈时间,因为模型变得更加规避风险,但这一部分对于获得可以连续完成 3 圈的可靠模型非常重要
关于训练成本的健康警告:我们作为学生只能训练这么多小时,因为 2020 年 5 月的 F1 赛事是免费的。因此,请密切关注账单仪表板,因为很容易产生大额账单。
7.使用 Selenium 自动提交比赛
在训练了一个我们满意的模型之后,我们将它提交给比赛。一个好的模型会在速度和可靠性之间取得平衡。因此,它不会完成 100%的圈数或有一致的圈数。因为只有所有提交中的最佳时间才是最终时间,所以我们可以多次提交我们的模型,以提高我们在比赛中的排名。这可以手动完成,也可以通过网页抓取工具自动完成。
python 有多个 web 抓取包可用。这篇文章描述了 3 种最受欢迎的食物:羊瘙痒、硒和美味的汤。
使用 Selenium,我们编写了一个函数,它在指定的时间内自动向比赛提交模型。这样做的好处是,我们只使用控制台,而不是 SageMaker 或 AWS CLI。另外,我们还编写了一个函数,它可以自动进行超参数实验。这可用于整夜进行多个实验,而不必每隔几个小时手动设置它们。
要查看我们 Selenium 函数的代码,请参考我们的 GitHub Repo 。
8.总结和后续步骤
仅使用 AWS DeepRacer 控制台训练模型,我们展示了如何计算最佳比赛路线和速度,使用 K-Means 聚类优化行动空间,设计良好的奖励函数,分析日志以不断改进模型,并自动将模型提交给比赛。使用所有这些工具,花一点时间让它们适应你的情况,你很快就能提高你的 DeepRacer 排名。总的来说,我们能够证明平衡不同的目标是应用强化学习的主要挑战。对于 DeepRacer,这些目标是速度、可靠性和快速学习。
下一步,一旦你对 DeepRacer 有了足够的了解,你可以尝试在 AWS SageMaker 甚至本地设置中训练模型。这两个选项将为您提供更高的灵活性,并可能比使用 DeepRacer 控制台成本更低。所有必要的资源都在 DeepRacer 社区的 GitHub 中。此外,请随时查看社区的网站或 YouTube 频道。如果你遇到困难,需要一些建议,或者只是想了解更多关于 DeepRacer 的知识,社区总是愿意提供帮助。
2020 年 5 月 F1 赛事计时赛的最终名次(图片由作者提供)
非常感谢我的团队成员娜塔莉亚·科尔查吉娜和马克·塞尔韦拉,没有他们,我们的团队永远不会取得今天的成绩。此外,感谢来自 DeepRacer 社区的 Lyndon Leggate 和 Tomasz Ptak,感谢他们令人惊叹的帮助。最后,感谢我们的 ESADE 教授,他们允许我们作为一个大学项目参与 DeepRacer 我们在这个过程中学到了很多关于强化学习的知识!