神经科学家如何分析来自透明鱼脑的数据:第 1 部分,预处理。
从鱼脑的视频到可利用的数据集。
大脑很酷。不仅仅是人脑。在神经科学中,许多动物模型被用来研究大脑回路:小鼠、大鼠、苍蝇、蠕虫和我最喜欢的一种——鱼。但不仅仅是任何鱼:T2 斑马鱼。
An adult zebrafish (wikipedia)
斑马鱼最初来自南亚,现在可以在任何普通的水族馆和商店里找到。它们很小,有漂亮的条纹,喜欢温暖的水。但是让科学家们感兴趣的是,一些斑马鱼发生了突变,阻止它们产生黑色色素,因此它们拥有完全透明的皮肤**。如果想研究大脑,这是一个很好的特性。不需要打开头骨,不需要切开任何东西,只需要把一条鱼放在显微镜下,你就可以研究它的大脑。或者……差不多。**
Below, a transparent zebrafish (wikipedia)
斑马鱼真的很棒,因为它们的基因组是已知的,科学家能够精确地产生一些突变,使鱼的神经元在活跃时发出荧光(所有这些都不会影响大脑的功能或斑马鱼的健康!).你可以想象这背后的大量工作和研究,但这是一个数据科学博客,所以我现在将专注于这种数据的分析。
这是原始数据的样子:这是一个斑马鱼大脑的视频,每一个圆形的白色斑块都是一个变得活跃的神经元。
Courtesy of Yaksi lab ©, NTNU in Trondheim, Norway
已经很酷了!然而,在能够使用一些机器学习算法(如 PCA 或聚类)之前,我们需要将该视频转换为可利用的数据集,即[神经元 x 时间]的 2D 矩阵,其中每个元素都是特定神经元在特定时间点的活动程度。“预处理”管道有 3 个主要步骤:
- 对齐
- 细胞检测
- 荧光提取
The preprocessing pipeline that extracts the activity of each neuron in time, from the raw images.
第一步是对准**。在实验过程中,鱼是活着的,可以自由移动尾巴(只有头部和腹部被一些琼脂糖凝胶保持不动)。这可能会导致录制过程中的一些运动,因此,图像可能会轻微平移或旋转。因此,图像必须重新对齐,以适合用户选择的一个“参考”图像的方向。这是图像配准的过程。**
An illustration of image registration with Matlab
这可以通过多种方式完成,例如(除其他方式外)使用 Matlab 或使用开源图像处理软件 ImageJ / Fiji 。为了保持这篇文章(相对)简短,我将不详细说明这一步,而是将重点放在细胞检测。
一旦运动伪影被校正,第二步检测神经元在图像中的位置。同样,神经科学家目前正在使用或开发许多不同的方法,但我想在这里介绍的方法使用模板匹配**。基本上,用户可以创建一个细胞应该是什么样子的模板,算法将在整个图像中寻找这个特定的形状。**
首先,在参考图像中对对应于期望时间段的所有记录图像进行平均。然后,通过高斯滤波器对该图像进行平滑,以统一背景并调整所有细胞的对比度。
这可以通过使用高斯滤波器(或 内核 )的 2D 卷积来完成。每个像素的值将被原始图像和高斯核之间的卷积所取代。这在下面的示意图中有很好的描述:
From developer.apple.com
其次,生成细胞的模板。用户可以选择模板的形状和大小(取决于你正在研究的大脑区域,神经元可以更小或更大)。然后,该模板将在参考图像上传递,并且——对于每个图像块——将使用该模板计算相关性。
A cell-like donut template
****相关性值表示模板与图像部分的匹配程度。结果将由一个 correlationMap 组成,其中颜色代表模板与以像素为中心的区域的匹配程度。基于相关值的直方图,用户可以选择一个阈值来仅选择具有高相关性的像素(在本例中为 0.5)。
由于选定的像素只是我们神经元的中心,所以需要一个膨胀步骤来在其周围添加更多的像素。此后,所有像素被认为属于一个神经元:它们可以被标记(例如用 Matlab 函数 bwlabel ),这意味着它们被赋予一个新的数字,代表它们所属的神经元的身份。该结果随后显示给用户,用户可以手动消除任何检测错误。
neuronLabels
对于不同尺寸和形状的不同模板,可以重复这个过程。最终的输出是原始图像大小的一个“遮罩”:如果每个像素不属于一个神经元,它就会被标记为 0,或者是一个介于 1、2、3 之间的数字。550,如果它属于一(550 是在这个特定例子中发现的神经元的数量)。这用于最后一步:提取每个神经元在一段时间内的荧光值。
为了及时提取每个神经元的荧光水平,将掩模应用于图像,并且对属于组成神经元的像素的所有值进行平均。这为每个神经元创建了一个向量,显示其在时间上的活动:
Activity profiles of 5 neurons during 20min
但是当你有 550 个神经元的时候,不可能一个个去看。同时查看几个神经元的更有效的方法是绘制活动图(x 轴:时间,y 轴:神经元标签,颜色:活动):
Activity map
这样,预处理就完成了。现在,有趣的事情可以开始了,这将是第二篇文章的目标,我们将看看一些聚类算法和 PCA:神经科学家如何分析来自透明鱼脑的数据:第二部分,聚类神经数据。
新毕业生如何从数据科学导师那里获益
年轻的大学毕业生——或者所有为此目的而开始职业生涯的人——通常会对大学毕业后的众多选择感到不知所措。特别是在数据科学中,有许多不同的领域需要开始或关注,这并不会使它变得更容易。这就是职业导师可以帮忙的地方。
在导师制,我们看到 200 多名年轻学生通过了导师制——其中许多人在数据科学工作。他们中的许多人已经开始了新的职业生涯,甚至在指导期间获得了晋升。
数据科学的特殊之处在于它是一个新的、不断发展的领域。大学并不总是知道他们如何才能最好地支持他们的新毕业生,而且有太多的方法可以进入这个行业。许多进入这个行业的新人都是自学成才的,甚至更多的人已经在学术界工作了很长时间,只是现在转向初创公司或大型科技公司,这带来了他们自己的一系列挑战。
万物变化时的常数
通过获得数据科学导师——从像mentor cruise这样的地方,也通过在社交媒体或社区上找到他们——学生可以在他们的生活中获得一个常数,并在学习时接触行业,毕业后开始第一次真正的求职。
这可能是一个麻烦的时期——搬家,找工作,在此期间面临很多拒绝。但是如果有一个导师可以帮这个忙,成功的几率就高很多。
业内的一个联系人
专业导师知道这个行业是如何运作的,你如何在面试中取得成功,以及你需要什么样的技能才能被录用。
除此之外,他们在业内人脉很广。和他们一起工作更长的时间——我们的指导通常持续几个月——会让他们对你的优点和缺点有一个很好的感觉。让他们更有可能向你推荐同事、经理和关系的东西。
获得业内公认的技能
学校、课程提供商和 MOOCs 并不总是告诉你事情的全部。当我在机器学习中学习在线课程时,我学习了强化学习和 GANs 等华而不实的东西,然后才知道如何准备和处理大型数据集——这是一项不那么华而不实的现代技能,但重要得多。
通过找一个专业的导师,你可以洞察到哪些技能是你被雇佣所需要的,哪些技能是你必须具备的。你会惊讶于数据科学和机器学习的世界还需要什么样的技能!
Nike Run Club 如何引导我编写第一个人工智能项目
很长时间以来,我一直想开始学习如何将人工智能作为我代码流的一部分。我应该从哪里开始?嗯,我没有理科学士学位,也没有数学基础来理解它背后的所有方程和计算。但是后来,我看到了杰森·布朗利的这篇惊人的文章,我又开始相信了!
在多次阅读这篇文章并理解它之后,我终于可以说我对 KNN 算法很流利了。让我们谈谈 KNN 吧。
KNN 算法
想象你在世界杯上。你看到三个不同球迷的酒吧:英格兰,瑞典和法国。你是威尔士人,你会和谁一起庆祝?当然是英国,因为你们都在大不列颠!
那是 KNN 的意思: K 最近邻。
我们的数据将被分类为同一维度中最接近的类型:
From Wikipedia
我们可以看到中间的绿色圆圈。它最接近三角形,所以它可能会被归类为三角形。我说“可能”是因为没有定义“K”。这个“K”表示应该考虑多少个项目。如果“K”是 3,则该圆应归类为三角形(两个三角形对一个正方形)。但是如果“K”是 5,那么该圆应该被归类为正方形(三个正方形对两个三角形)。
大多数时候“K”的默认值是 3(较大的“K”表示不敏感)。
一个美好的一天,我正在用 Nike Run Club 应用程序跑步。那天我觉得很累,我需要有人叫醒我,给我一些动力。你猜怎么着,它从没来过。我突然想到:把歌曲分为节奏型和非节奏型!
我不是一个音乐家,但一点点研究让我想到了术语“ Tempo ”和它的度量单位“BPM”。每分钟节拍值决定了歌曲是否有节奏。
正如维基百科中所写的,一首节奏歌曲的 BPM 值在 120 以上:
快板——快速,迅速,明亮(120–156 BPM)(非常快板比快板稍快,但总是在它的范围内)
Vivace —活泼而快速(156–176 BPM)
Vivacissimo —非常快且活泼(172–176 BPM)
快板或活泼的快板——非常快(172–176 BPM)
很快—非常非常快(168–200 BPM)
Prestissimo —甚至比 presto 更快(200 bpm 及以上)
所以理论上我们需要对一首歌的 BPM 是否在 120 以上进行分类。问题是我没有找到任何精确的算法来计算 BPM,所以我必须添加更多的值来确保歌曲是有节奏的。一首歌的 BPM 平均值。
2。高 BPM 点占总点数的百分比。
3。歌曲有多少 BPM 点序列(连续 5 个高 BPM 点以上)。
我还用 5 减去了每个点,因为我不相信 Aubio 库算法的结果。
让我们检索这些值并将它们添加到 DB:
首先用 aubio 提取歌曲的 BPM 值示例:
然后,获取我们需要的所有值:
把所有的值放入一个数据库,让我们开始分类!
创建数据集
我们需要给机器喂食。诀窍是数据集,数据集是我们希望为学习部分的算法提供的数据列表(很多)。
让我们来看看:
我们用数据库中的数据创建了一个列表列表。
然后,我们需要加载它并将其分成 2 组:
*训练集——算法实际学习的数据。
*测试集——用于测试我们算法的验证集。
每个列表包含 4 个属性:
- BPM 平均值。
- BPM 计数器百分比。
*高 BPM 点序列。
*歌曲是否有节奏
创建 KNN 模型
我们的 KNN 模型处理实数。这就是我们要使用"欧几里德距离"来计算即将到来的预测的最佳 K 点的方法。将每个训练集与一个测试用例进行比较:我们计算每个训练集值和测试集值之间的距离,并将其添加到一个变量中。我们对存储数据的变量进行排序,并检索 K 个最佳选项(最小距离)。
我们写点代码吧!
预测未来
我们创建了所有数据,检索了每个训练集的最佳点,现在我们可以预测结果了!
预测是投票。主要群体是选举出来的。就这么简单。
让我们看看它是怎么做的
把所有的放在一起
现在我们有了所有的碎片,让我们来完成这个拼图吧!
- 首先获取训练数据,或者从现有的 Pickle 对象中加载它。
- 找到周围最好的邻居。
- 预测。
我们会有两种模式:
1。训练模式——尽我们所能找到最准确的最佳数据集。预测。
2。对一首歌进行分类,不管它是否有节奏。
让我们测试分类器并检查结果:
Remix.mp3
Train set: 64
Test set: 1
[[158, 64, 125, <TEMPOS.RHYTHMIC: 'Rhythmic'>], [154, 63, 112, <TEMPOS.RHYTHMIC: 'Rhythmic'>], [167, 72, 145, <TEMPOS.RHYTHMIC: 'Rhythmic'>]]
Is Remix.mp3 rhythmic? True
Remix.mp3 is added successfully
我测试过的歌是有节奏的(是混音的!!!)
我们可以看到它找到的最好的邻居是:
【158,64,125,< TEMPOS。节奏:>)
【154,63,112】<节奏。节奏:>)
【167,72,145】<节奏。节奏:‘节奏’> ]
获胜者是……‘有节奏’!我们成功了!
结论
我们已经学习了 KNN 模型,以及如何实现它和用它预测数据。在你的代码中使用人工智能,即使你可能不具备所有必要的基础也是可能的。我确信,如果我们有更多类似上面提到的关于这些模型及其实现的简单文章,我们将会看到更多的开发者在他们的代码中使用这些概念。不要害怕使用它!
我希望这篇文章教会你一些新的东西,我期待着你的反馈。请告诉我——这对你有用吗?
完整的项目可以在 Github 这里 找到。
如何不雇佣数据科学家
一个数据科学家的日记
给数据科学招聘人员的一些建议
Photo by Gabrielle CC
我作为一名应用科学家工作了 5 年,主要是作为一名数据科学家。在这段时间里,我学到了很多关于这个职业的知识,包括在你的 LinkedIn 个人资料中有数据科学家这几个字会让你收到很多来自招聘人员的消息、电子邮件和电话。
不幸的是,由于这些信件的制作和发送方式,它们的效果往往远不如预期。我决定利用数百次这样的互动(好的、坏的和丑陋的)来写一篇警示文章,讲述如何不雇佣数据科学家。
我不打算这篇文章对数据科学招聘人员不屑一顾。我知道他们中的大多数都是专业人士,有着良好的意愿和真诚的热情去帮助人们找到他们喜欢的工作。我也意识到,他们面临着一个艰难的就业市场,有很多职位需要填补,但很少有候选人填补这些职位。
但是,对于那些希望从那些信息接收方那里获得视角的数据科学招聘人员来说,这里有一些浅显的建议。
1.不要假设所有的数据科学家都是一样的
招聘人员经常要求我们不具备的资格——不是所有的数据科学家都有运筹学背景——或者推销资历不匹配的角色——大多数数据科学领导者不会考虑入门级的机会。了解你的受众,并相应地调整你的信息。如果你有目的地制作通用的职位描述,向 LinkedIn 上的每一位数据科学家发送垃圾邮件,那么你不太可能吸引那些收到更多此类消息的更合格的数据科学家的注意。
2.不要对所涉及的技术含糊其辞
含糊不清的工作描述(例如,“使用统计软件来应用机器学习技术”)或陈腐的工作描述(例如,“你将执行前沿工作”)对数据科学家来说是没有信息的;我们无法判断这份工作是否相关,因此不太可能做出回应。对技术需求的具体描述有助于我们这些非常适合的人对机会感到兴奋,并更有可能伸出援手。例如,不是所有的数据科学家都乐于在 PC 上用 SAS 分析数据;但是如果这是你招聘的目的,那么让那些符合要求的人知道这一点!
3.不要隐瞒实际的工作描述
招聘人员很少分享描述性的工作总结,这些总结分享了工作的重要细节,如公司名称和职位位置。我们想研究有趣的问题,但是我们对同样的问题并不感兴趣。如果你不能告诉我们公司的名字,至少告诉我们它是做什么的,我们会做什么工作,我们会住在哪里或者必须搬到哪里。(不提及地点的职位描述尤其可能会让那些有家庭的高级数据科学家失去兴趣,他们不太愿意或不太有能力立即搬迁。)
4.不要找独角兽
一些职位描述列出了世界上所有的数据科学术语——CART、DAG、JSON、LOL、NLP、SVM、YARN 等等。这让我们认为你并不真的知道你想要雇佣哪种数据科学家(或者你将会花长的时间去寻找一个类似瑞士军刀的)。如果招聘经理负责职位描述,督促她或他改进。这些粗心的描述会给他们带来不好的影响,如果你不做点什么,他们也会给你带来不好的影响。
5.不要只关注薪水
比你想象的更多的招聘人员外联活动包括抛出一个工资范围和关于工作的基本俏皮话,假设数据科学家是一心一意的,计算机器主要优化这个指标。数据科学是一个量化的职业,但是数据科学家,他们中的大多数人前世是科学家,往往非常关心他们工作的智力挑战。高薪可能是必要的,但不足以吸引高质量的数据科学家。在最好的情况下,你可能会雇佣那些一旦找到报酬更高的机会就会离职的雇佣兵。
我知道数据科学招聘并不容易——工作需求超过了候选人的供应量,相关技术领域的广度很大,数据科学家对招聘人员的拓展可能会很挑剔:)—但我希望这些来自邮件接收端的人的观点可以让工作变得简单一点。
如何不按受欢迎程度排序
问题:你是一个 web 程序员。你有用户。你的用户会阅读你网站上的内容,但不会对他们进行评级。您想要制作一个用户可能想要点击的流行内容列表。你需要某种“分数”来排序。
错解#1 :分数=浏览量
为什么是错的:如果你的网站足够老,你可能有过去流行的内容,但那已经不再相关了。
错解#2 :分数=最近小时浏览量 x 小时。
为什么是错的:“趋势”是一个比绝对流行更好的解决方案,但它缺乏意外收获。没有必要显示用户可能会找到的内容。如果某样东西很流行,它可能已经在你的主页上了。
间歇 I:隐性反馈
如果用户在给你的内容评分,你应该去看看埃文·米勒 8 年前的建议,而不是按平均评分排序。但通常情况并非如此。更多的时候,我们有隐性的反馈,而不是显性的评级。那个是什么?
隐性反馈是用户活动,可用于间接推断用户偏好,例如点击、页面浏览量、购买行为。有时只知道正面的反馈,例如,客户已经购买的产品,但不知道他们已经决定不购买的产品。
通过隐式反馈来推断用户偏好听起来可能很难,但在实践中效果很好。主要原因是,收集点击量和页面浏览量比显式评级容易得多。如果你有足够的数据,输入中的噪声就不会有太大影响。
如果你有很多注册用户,你可以(也应该)用这些数据建立一个推荐系统。但即使你建立了一个,你如何推荐项目(博客帖子,文章,音乐,视频,产品等。)给新用户如果你对他们一无所知?
这就是所谓的冷启动问题。当你掌握了用户的一些信息,你可以推荐与她之前消费过的东西相似的商品,但对于新用户,你不能这么做。最简单的方法是显示“流行”的内容,但我们可以做得比天真的解决方案好得多。
主要的技巧是不要只跟踪人们在看什么,而是要跟踪呈现给他们的选项是什么(印象)以及他们决定点击什么。
错误解决方案#3: 得分=点击率=点击数/印象数
如果我们将点击数除以一个项目的印象数,我们就得到了 CTR(点击率)。这意味着一个项目每次被推荐时平均有多少点击量。好的物品会有很高的点击率。
为什么错了:这里的问题是,如果一件商品的点击率很少,就很难估计它的点击率。假设有一篇文章被推荐了一次,没有被点击。你会相信点击率为零,你永远不会再推荐它吗?或者说如果这个商品被展示一次并被点击,你会把它推荐给每个用户吗?
免责声明 : CTR 不是评估推荐质量的唯一指标,也可能不是最佳指标。我们不想显示用户实际上不喜欢的点击诱饵内容,但这超出了本文的范围。
让我们回到我们的问题上来。我们怎样才能得到一个可靠的估计项目的 CTR?
错误解决方案#4: 得分= LCB(CTR)
LCB 在这里代表较低的置信限。它表示在您可以指定的置信度下,该项目保证具有的最小 CTR。为了计算这一点,我们可以使用威尔逊评分,来自埃文·米勒的建议。我们只需要将每一次点击视为“竖起大拇指”,而将每一次未被点击的印象视为“竖起大拇指”。如果我们的例子很少,它会考虑到 CTR 的不确定性。
为什么是错的:这个解决方案在实践中很好,但它仍然是错的。它擅长发掘点击率高的文章,但不擅长发掘新文章。也许一篇新文章会有一个更好的点击率,但是我们会因为没有一个好的估计值而陷入展示一篇次优文章的困境。
如果你明白这一点,恭喜你!这是多股武装匪徒理论背后的基本概念。你已经知道了足够的术语来在拉斯维加斯的鸡尾酒会上讨论 MAB。但是什么是 MAB 呢?
幕间休息二:多武装匪徒
By Yamaguchi 先生 at the English language Wikipedia, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=57295504
维基百科定义解释了这个古怪名字的来源:
多臂土匪问题是一个在一排吃角子老虎机(有时被称为“独臂土匪”)上的赌徒必须决定玩哪些机器、每台机器玩多少次以及以什么顺序玩它们的问题。当游戏开始时,每台机器从特定于该机器的概率分布中提供随机奖励。游戏者的目标是通过一系列的杠杆操作获得最大的回报。
MAB 在业内最为人所知的是作为 A/B 测试的替代选择,作为挑选你的网站的最佳变体的一种方式。在我们的例子中,我们可以把每篇文章看作一个不同的手臂,每一次点击都是一种奖励。有些文章会给更好的奖励,因为他们有更好的平均点击率。
好的解决方案#1: 分数=对某些用户随机,对其余用户 LCB
如果我们选择一小部分(epsilon,ε)用户,并向他们展示随机的文章,我们将能够探索所有的项目,同时仍然显示大多数用户的最佳选择。这被称为ε-greedy,非常有效,但是很难为ε选择一个好的值。如果太小,我们将无法探索所有项目。如果太大,太多用户会收到差的推荐。
好方案#2: 得分= UCB(CTR)
如果我们使用 UCB (置信上限)而不是 LCB,我们将有一个非常好的 MAB 政策。LCB 给出了项目的最小 CTR 估计值,而 UCB 返回了项目在给定期望置信度的情况下可以具有的最大 CTR。
它能够尝试新的武器,直到它有一个合理的点击率估计,并会更经常地推荐最好的文章。我们说它有低遗憾。如果与总是推荐最好武器的最佳可能的政策相比,这基本上是多少点击将会失去。一个问题是,如果你不实时更新点击和印象,它可能不会很好地工作。我们可以做得更好。
最佳解决方案:分数= beta(点击次数+ 1,展示次数-点击次数+ 1)
也称为汤普森采样。
https://sk.pinterest.com/pin/537898749225885705
Thompson 抽样是解决多臂强盗问题的最古老的启发式方法之一。这是一种基于贝叶斯思想的随机算法,最近几项研究表明,与最先进的方法相比,它具有更好的经验性能,因此引起了人们的极大兴趣。
上面的引用来自文章Thompson Sampling for Contextual bottom with Linear payments。 Xavier Amatriain ,前机器学习研究员,后来领导网飞的推荐系统团队,以及后来的 Quora,在本期播客 TWiML 中说了同样的话:
有很多关于多臂强盗的文献,但只有一本在实践中有效。我不知道我是否想给出答案(……)在业内众所周知,汤姆逊抽样是最简单、最实用的 MAB 方法。
听起来不错,对吧?不过,如果你看看维基百科上关于汤普森取样的文章,数学可能会非常吓人。幸运的是,实现和理解它实际上非常简单。
那么,什么是汤普森抽样?它是以威廉·r·汤普森的名字命名的,他在 1933 年提出了这个想法。这叫做抽样,因为对于每一条手臂,我们从我们当前对其概率分布的信念中挑选(抽样)一个随机的 CTR 比率,然后我们根据抽样的 CTR 对文章进行分类。
但是 CTR 的概率分布是什么呢?当我们使用 LCB 和 UCB 时,我们承认我们不知道确切的 CTR 值是多少,所以我们对其值进行了有根据的猜测。概率分布只是一个函数,它返回 CTR 为任何特定值的几率。
它看起来怎么样?对于一篇新文章,我们不知道 CTR 是什么。它可以是 0 到 1 之间的任何数字。这叫做均匀分布。但每次我们展示一篇文章,就像是在抛一枚不公平的硬币。我们翻转它,看看结果。假设是正面,我们得到一个点击。每次我们抛硬币并看到结果,我们可以更新我们对正面概率或文章 CTR 的信念。
下面是一个例子,根据我们得到的人头数,在我们进行一些投掷后,这个分布(名为 Beta )看起来是什么样的:
这种承认我们不知道所有事情的想法和根据新信息修正我们的信念是所谓贝叶斯统计背后的主要思想。如果你想了解更多这方面的知识,我推荐《T4 概率编程》&黑客贝叶斯方法这本书。它不像深度学习那样新潮,但仍然很有趣,很有用。这是你在鸡尾酒会上可以讨论的另一个好话题!
那么,用 score = beta(点击+ 1,impressions - clicks + 1)是什么意思呢?我们只是得到一个随机的 CTR,从 beta 分布中取样。然后,我们根据这个随机分数对文章进行排序。点击率高的文章将会更频繁地展示( exploited ) ,但我们也会随着新项目的出现探索。太神奇了,这么简单,效果这么好。
确保你理解所有概念的最后一个测试:你会发现这部卡通很有趣。😃
拜 雨果·洛佩斯·塔瓦雷斯莱安德罗·莫雷拉丹尼尔·马丁斯菲拉维奥·里贝罗拉斐尔·卡里奥****
如何(不)使用机器学习进行时间序列预测:避免陷阱
在我的其他帖子中,我已经涉及了一些主题,如:如何将机器学习和物理,以及机器学习如何用于生产优化,供应链管理以及异常检测和条件监控。但在这篇文章中,我将讨论时间序列预测的机器学习的一些常见陷阱。
时间序列预测是机器学习的一个重要领域。这一点很重要,因为有太多的预测问题涉及到时间因素。然而,虽然时间组件增加了额外的信息,但与许多其他预测任务相比,它也使时间序列问题更难处理。
这篇文章将介绍使用机器学习的时间序列预测的任务,以及如何避免一些常见的陷阱。通过一个具体的例子,我将展示一个人如何表面上有一个好的模型,并决定将其投入生产,而在现实中,该模型可能没有任何预测能力,更具体地说,我将重点关注如何评估您的模型准确性,并展示如何简单地依靠常见的误差指标,如平均百分比误差、 R2 评分等。如果不谨慎应用,可能会产生误导。
时间序列预测的机器学习模型
有几种类型的模型可用于时间序列预测。在这个具体的例子中,我使用了一个长短期记忆网络,或简称为 LSTM 网络,这是一种特殊的神经网络,它根据以前时间的数据进行预测。它在语言识别、时间序列分析等方面非常流行。然而,根据我的经验,在许多情况下,更简单类型的模型实际上提供了同样准确的预测。使用诸如随机森林、梯度推进回归器和时间延迟神经网络的模型,可以通过添加到输入的一组延迟来包括时间信息,从而在不同的时间点表示数据。由于它们的顺序性质,TDNN 被实现为一个前馈神经网络,而不是一个递归神经网络。
如何使用开源软件库实现模型
我通常使用 Keras 来定义我的神经网络模型类型,这是一种高级神经网络 API,用 Python 编写,能够在 TensorFlow 、 CNTK 或 Theano 之上运行。对于其他类型的模型,我通常使用 Scikit-Learn ,这是一个免费的软件机器学习库,它具有各种分类、回归和聚类算法,包括支持向量机、随机森林、梯度推进、、 k -means 和 DBSCAN
然而,本文的主题不是如何实现时间序列预测模型,而是如何评估模型预测。由于这一点,我将不会进入模型建设等细节。,因为有大量其他博客帖子和文章涉及这些主题。
示例案例:时间序列数据的预测
这种情况下使用的示例数据如下图所示。稍后我会更详细地讨论这些数据,但现在,让我们假设这些数据代表了股票指数的年度演变。数据被分成训练集和测试集,其中前 250 天用作模型的训练数据,然后我们尝试在数据集的最后一部分预测股票指数。
由于我在本文中不关注模型实现,所以让我们直接进入评估模型准确性的过程。仅从视觉上观察上图,模型预测似乎与真实指数非常接近,显示了良好的准确性。然而,更准确地说,我们可以通过绘制真实值与预测值的散点图来评估模型的准确性,如下图所示,还可以计算常见误差指标 R2 得分。
从模型预测中,我们获得了 0.89 的 R2 分数,并且实际值和预测值之间似乎很好地匹配。然而,正如我现在将更详细讨论的,这个度量和模型评估可能会非常误导人。
这是完全错误的…
从上面的数字和计算的误差度量来看,该模型显然给出了准确的预测。然而,事实并非如此,它只是一个例子,说明了在评估模型性能时,选择错误的准确性度量标准是如何产生误导的。在本例中,为了便于说明,明确选择数据来表示实际上无法预测的数据。更具体地说,我称之为“股票指数”的数据实际上是用一个随机漫步过程建模的。顾名思义,随机漫步完全是一个随机过程。由于这个原因,使用历史数据作为训练集来学习行为和预测未来结果的想法是完全不可能的。有鉴于此,这个模型怎么可能给我们如此准确的预测呢?正如我将更详细地讨论的那样,这一切都归结于精度度量的(错误)选择。
延时预测和自相关
顾名思义,时间序列数据不同于其他类型的数据,因为时间方面很重要。从积极的方面来看,这为我们提供了在构建我们的机器学习模型时可以使用的附加信息,即不仅输入特征包含有用的信息,而且输入/输出随时间的变化也包含有用的信息。然而,虽然时间组件增加了额外的信息,但与许多其他预测任务相比,它也使时间序列问题更难处理。
在这个具体的例子中,我使用了一个 LSTM 网络,它根据以前的数据做出预测。然而,当放大一点模型预测时,如下图所示,我们开始看到模型实际上在做什么。
时间序列数据往往在时间上是相关的,并表现出显著的自相关。在这种情况下,这意味着时间“ t +1”处的索引很可能接近时间“ t 处的索引。如上图右侧所示,该模型实际上是在预测时间“ t +1”的值时,简单地使用时间“ t ”的值作为其预测值(通常称为持久性模型)。绘制预测值和实际值之间的 c 交叉相关(如下图),我们看到一个明显的峰值,滞后时间为 1 天,表明模型只是使用以前的值作为对未来的预测
如果使用不当,准确性指标可能会产生误导
这意味着,当评估模型直接预测值的能力时,常见的误差指标,如平均百分比误差和 R2 分数都表明预测准确度较高。然而,由于示例数据是通过随机行走过程生成的,因此该模型不可能预测未来的结果。这强调了一个重要的事实,即简单地通过直接计算常见的误差度量来评估模型的预测能力可能会非常误导,并且人们很容易被愚弄而对模型的准确性过于自信。
平稳性和差分时间序列数据
一个平稳时间序列是指其统计特性如均值、方差、自相关等。都是不变的。大多数统计预测方法都是基于这样一种假设,即通过使用数学变换,时间序列可以呈现为近似平稳的(即“平稳化”)。一个这样的基本转换是对数据进行时差处理,如下图所示。
这种变换的作用是,我们不是直接考虑指数,而是计算连续时间步长之间的差值。
定义模型来预测时间步长值之间的差异而不是值本身,是对模型预测能力的更强测试。在这种情况下,不能简单地使用数据具有很强的自相关性,并使用时间“ t 的值作为“ t+ 1”的预测。由于这一点,它提供了对模型的更好的测试,以及它是否从训练阶段学到了任何有用的东西,以及分析历史数据是否实际上可以帮助模型预测未来的变化。
时差数据预测模型
由于能够预测时间差数据,而不是直接预测数据,这是该模型预测能力的一个更强的指标,让我们用我们的模型来尝试一下。该测试的结果如下图所示,显示了真实值与预测值的散点图。
该图表明模型不能根据历史事件预测未来的变化,这是本例中的预期结果,因为数据是使用完全随机的随机游走过程生成的。根据定义,能够预测随机过程的未来结果是不可能的,如果有人声称这样做,人们应该有点怀疑…
你的时间序列是随机游走吗?
您的时间序列实际上可能是随机游走,检查这一点的一些方法如下:
- 时间序列显示出强烈的时间相关性(自相关),线性衰减或以类似的模式衰减。
- 时间序列是非平稳的,使其平稳表明数据中没有明显的可学习的结构。
- 持久性模型(使用前一时间步的观察值作为下一时间步将发生的情况)提供了可靠预测的最佳来源。
这最后一点对于时间序列预测非常关键。使用持久性模型的基线预测可以快速显示你是否可以做得更好。如果你不能,你可能正在处理一个随机游走(或者接近随机游走)。人类的大脑天生就到处寻找模式,我们必须保持警惕,不要通过开发随机行走过程的精细模型来愚弄自己和浪费时间。
摘要
我想通过这篇文章强调的要点是在评估你的模型在预测准确性方面的表现时要非常小心。正如上面的例子所示,即使对于一个完全随机的过程,预测未来的结果是不可能的,人们也很容易被愚弄。通过简单地定义一个模型,进行一些预测和计算常见的准确性度量,人们可能看起来有一个好的模型,并决定将其投入生产。然而,在现实中,该模型可能没有任何预测能力。
如果你从事时间序列预测工作,或许认为自己是一名数据科学家,我会敦促你也把重点放在 科学家 方面。永远要对数据告诉你的东西持怀疑态度,问关键问题,永远不要得出任何草率的结论。科学方法应该应用于数据科学,就像应用于任何其他种类的科学一样。
在未来,我相信机器学习将会被用在比我们今天所能想象的更多的地方。你认为它会对各个行业产生什么影响?我很想在下面的评论中听到你的想法。
编辑:根据兴趣和反馈的数量,我决定写一篇相同主题的后续文章: “如何(不)使用机器学习进行时间序列预测:续集”
如果你有兴趣了解更多与人工智能/机器学习和数据科学相关的主题,你也可以看看我写的其他一些文章。你会发现它们都列在我的中型作者简介中,你可以在这里找到。
而且,如果你想成为一个媒体会员,免费访问平台上的所有资料,你也可以使用下面我的推荐链接。(注意:如果您使用此链接注册,我也会收到一部分会员费)
[## 通过我的推荐链接加入媒体- Vegard Flovik
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@vflovik/membership)
更多来自 Vegard Flovik 媒体:
- 蒙特卡洛方法简介
- 从物理学到数据科学的转变
- 什么是图论,为什么要关心它?
- 用于图像分类的深度迁移学习
- 构建一个能读懂你思想的人工智能
- 机器学习:从炒作到现实应用
- 人工智能和大数据隐藏的风险
- 用于供应链管理的人工智能:预测分析和需求预测
- 如何利用机器学习进行生产优化:利用数据提高绩效
- 如何使用机器学习进行异常检测和状态监控
- 你是怎么把物理教给 AI 系统的?
- 我们能使用纳米级磁铁构建人工大脑网络吗?
人工智能研讨会——从宣传到现实应用
我多大了?
使用 3D 膝关节磁共振成像和卷积神经网络进行年龄评估
One of the 145 samples that was part of the data set
你能猜到这个膝盖核磁共振后面的人有多大年纪吗?我给你一个提示。这是一个 14 到 21 岁的德国男性的录音。不知道吗?我喜欢想象这是神经网络在被训练之前看待世界的方式。它完全没有线索。所以,让我来训练你。
在与缺乏合法证件的人打交道时,确定一个人的实际年龄是一个复杂的过程。在庇护申请或刑事诉讼中,情况往往如此。根据法律,儿童和成人的处理方式是不同的,但是我们没有一个准确的方法来确定一个人的年龄。我们今天使用的最佳方法是基于 X 射线,这是一种将患者暴露于电离辐射的侵入性成像技术。这就是为什么许多欧洲国家只允许这些录音作为司法命令的一部分。其他一些方法包括个人采访,以确定心理和生理特征,但它们很费时,也很主观。这就是为什么非常需要一种自动且无创的方法来精确地确定一个人的年龄。
作为德国研究基金会(DFG)的一项研究的一部分,我接触了一组 3D 核磁共振成像数据,显示了德国男性的右膝盖。图像上半部分的股骨是大腿骨,正下方的胫骨是胫骨。在录像的后面,你可以看到另一块骨头在左下角冒出来——腓骨。如果你看得更近,你可以在骨头上发现几乎像裂缝一样的黑色水平线。这些被称为生长板,因为这是你的骨骼实现纵向生长的地方。它们由软骨组成,这就是为什么它们可以在核磁共振成像记录中看到。一旦你停止生长,这些区域会慢慢地开始闭合,直到看不见为止。
Examples of a 14, 17 and 20 year old caucasian male (left to right)
我们在这项研究中使用了膝盖记录,因为我们知道可见的生长板在成年前会关闭。其他研究使用核磁共振成像或手部 x 光,已知手部生长板关闭较早。在上面的图片中,你可以看到黑色水平间隙的宽度是如何与一个人的年龄相关的。
我们记录的个体年龄在 14 到 21 岁之间。如果我们预测每个人的平均年龄是 17.5 岁,我们的误差不会超过 3.5 岁。事实上,我们平均只差 1.2 年,因为数据是正态分布的。这是我试图打破的原始基线。我喜欢把基线看作是你能做出的最聪明最愚蠢的估计。仅预测年龄为 17.5 岁的模型将显示 1.2 岁的平均差异。这也将是完全无用的。
Age distribution of individuals in the data set
在深度学习中,你通常首先尝试的事情之一是使用预先训练好的架构的即插即用方法。即使原始模型是在一个非常不同的数据集上训练的,这通常也能让你走得很远。我拿了我最喜欢的迁移学习架构 VGG16 和它在 ImageNet 上学习的权重。然而,我很快明白这不会让我有任何进展,因为这个模型没有收敛。我尝试了其他各种各样的附加功能,比如更简单的架构、特殊的训练过程或者将回归转化为分类问题。什么都没用。
所以,我退了一步。要么是数据显示没有与年龄相关的特征,要么是这个问题对于我的数据集来说太复杂了。由于数据只包含 145 张图片,第二种可能性似乎并不遥远。在这种情况下,你可以做两件事:
- 获取更多培训数据
- 降低问题的复杂性
在一个完美的世界里,第一种选择肯定是更可取的,但特别是在医疗领域,它有时不是一个选项。当涉及到医疗数据时,我们受到非常严格的隐私法的保护,这是一件好事,除非你正在处理这样的问题。所以我决定降低数据的复杂性。
幸运的是,一个勤奋的人在同一个项目中已经用骨骼分割图标记了一半的数据集。使用基于区域生长的半自动方法,他对每个样本花费了大约 2 个小时。有了这 76 个遮罩,我建立了一个工作流程,在人类膝盖的 3D 核磁共振成像中分割骨骼。我尝试了 2D 和 3D CNN 架构,但 2D 版本显示出更准确的结果,也更快地训练。
The architecture I used with visualizations for different slices
最后,我使用 U-Net 的一个小变体,每个卷积有 32 个恒定数量的输出通道,得到了 98.0% DSC 。腓骨是最小的骨头,事情变得有点问题,这就是为什么我决定训练三个独立的模型。我还尝试了一大堆其他的东西,你们可以在我的论文中读到,但是现在,我想就这样。
顺便说一句,你对这种方法如此有效不感到惊讶吗?一开始我的确是。想想吧。我无法在 145 个样本上训练回归器,但在 76 个样本上进行更复杂的分割可以完美地工作。事实证明,分割可以被看作是对每个像素的分类。这意味着对于每个样本,我有宽度高度*信息通过网络反向传播。这比简单回归得出的一个数值要多得多。
Input, predicted output and applied mask
通过对输入数据应用蒙版,我去掉了所有我不关心的非骨组织,能够更清晰地聚焦于生长板。我回到最初的问题,但很快发现它仍然不起作用。只有在采用了我的细分架构的收缩端并将其用作预训练模型之后,我才能够超越基线。这种想法不会使模型每次都收敛,但当它收敛时,它的预测是稳定的。
因为这个网络使用了每个体积图像的 2D 切片,所以我现在对每个 MRI 有了多个预测。平均来说,我错了 0.64 ( 0.48)年。显然,这已经是一个非常好的结果,超过了以前的腕骨核磁共振成像研究和使用 X 射线的 boneXpert 算法。
我分析了每张 2D 图像的不同预测,注意到内部切片导致了更高的准确性。我用加权平均值和丢弃外层切片进行了实验。这两个概念都改进了以前的结果,但另一种方法产生了更高的准确性。我设置了一个随机的森林回归器,它将获取多个年龄预测的向量,并为每个 3D MRI 输出一个估计值。这让我在测试集上得到 0.48 ( 0.32)年的平均差异。换句话说,这个工作流程让我评估 14 到 21 岁白人男性的年龄,平均误差为半年。
Slice predictions, combined prediction through random forest and ground truth of one example
这个项目成了我的学士论文。我计划开源代码和论文,这样任何人都可以在未来的工作中使用它。现在,在我发布任何消息之前,我必须等待委员会的意见。我觉得难以置信的是,像我这样没有医学背景的人可以利用人工智能算法为当前的研究做出贡献。这是这个计算机科学领域让我感到惊讶的地方,我希望将来能继续从事像这样令人着迷的项目。
更新:我的论文和整个代码现在已经上线。出于上述隐私原因,数据集不可用。
开放健康数据如何拯救 NHS
在医学人工智能开发者面临的诸多挑战中,获取干净、可验证、真实的医学数据被认为是最大的障碍。在最近的一次在线调查中,我的 Twitter 社区中有 42%的人同意这一观点,认为“数据访问和清理”比临床部署(将模型引入野外的过程)更难,比训练和验证模型(鉴于可用工具的巨大增加,这是一个相对简单的过程)更难。
数据访问和清理被认为是人工智能在临床实践中实现的最大障碍的原因可以归结为三个简单的事实:
- 监督模型需要大量的医疗数据
- 医疗数据很难获得
- 医学数据很难符合事实
目前,围绕医疗人工智能,NHS 内部出现了一种奇怪的先有鸡还是先有蛋的局面。一方面,患者和临床医生对人工智能的潜力感到兴奋,但另一方面,他们通常不希望放弃他们的数据,这些数据将使人工智能得以发展,通常是因为害怕引起公众对不适当的数据共享的愤怒,或者对恶意企业利益的不确定性。显然,有些事情需要改变。
充分利用数据
NHS 是世界上最大的国有医疗保健系统。它涵盖了所有年龄层、多民族、多样化的人群,最重要的是,它是基于证据的,并且在很大程度上实现了医疗保健方法的标准化。在它的墙内包含了地球上最丰富的医学数据来源之一。这些数据可以实现新的数据驱动技术,包括人工智能系统,并有可能改变医学。但这些丰富的数据往往被锁在一个庞大的官僚机构后面,无法访问和丢失,阻碍了创新和进步。是时候与英国公众讨论公开他们的数据了。是时候告诉大家数据可以救命了。
开放数据和内容可以被任何人出于任何目的自由使用、修改和共享**。**
我一直在提议,为了利用人工智能的力量,大规模医疗数据需要更加开放,鉴于英国从摇篮到坟墓的国有化医疗系统,英国可能是最适合这样做的国家之一。我绝不是唯一认为开放数据很重要的人。在英国,理解患者数据计划(由英国公共卫生部的 Dame Caldicott 和 Wellcome Trust 支持,由独一无二的Natalie Banner 博士领导)的使命是教育共享医疗数据的好处。对强大的开放数据共享平台的呼声越来越高,这一倡议在引导公众对话方面做得非常出色。他们不仅关注为什么数据可以拯救生命,还关注如何。
对于那些对开放健康数据感兴趣的人来说,甚至有一个学术期刊关注强调开放数据的可用性和再利用的出版物。然而,在大规模数据共享开始之前,人工智能领域中相对较少的实际案例研究可以作为这些论点的基础,并提供令人信服的数据故事。
以身作则
我想简要强调一下我自己在试图展示开放卫生数据的力量时的经历。我在皇家放射科医师学院工作时,我们经常讨论对我们的职业影响最大的人工智能技术是什么——就工作量和体积而言,简单的胸部 x 光检查往往是最大的问题之一。到目前为止,cxr 是 NHS 中最流行的成像研究,据估计,其中 50-80%完全正常。如果我们能开发一个系统,有效而准确地将“正常”的 cxr 与“异常”的 cxr 区分开来,会怎么样?我们能否节省超过 50%的放射科医师 CXR 报告时间?我们能否通过让一线员工获得初步的分诊读数来加快护理点的交付?
为了建立一个人工智能系统,可以从病理学中准确地对正常状态进行分类,你需要大量这样标记的 cxr。不幸的是,你不能走进一家医院,要求数以百万计的标记图像,而且目前没有来自 NHS 患者的标记和公开可用的 CXR 数据集。
值得庆幸的是,在大洋彼岸,美国国立卫生研究院(T0)明白了这一点,并发布了 10 万份完全匿名的 cxr 供公众使用。这个数据集被证明是当前人工智能研究中最有影响力的数据集之一。它已经被 T2 大学、斯坦福大学、麻省理工学院和 T4 大学、谷歌公司等用来创建可以发现病理的算法,并在推动医学图像分析兴趣的增长方面发挥了重要作用。
然而,这些由知名机构进行的大规模研究都集中在寻找特定的病理(肺炎、肋骨骨折等),而不是执行整体图像分类。这可能是因为构建多类分类器算法是一项远比构建简单的二进制分类器有趣的机器学习任务。这也可能是因为还没有人想到这样做,而是去玩更性感的“人工智能在诊断中击败人类的表现”?
两位对机器学习感兴趣的英国初级医生找到了我,他们想问一个问题:如果我们可以使用非常简单、公开可用的现成算法,并训练他们执行高影响力的放射工作,会怎么样?答案是我们合著的关于 CXR 分流的论文,在线发表在《临床放射学》上。
他们采用了一个非常受欢迎的开源图像感知模型,称为 Inception ,该模型已被广泛用于对来自 ImageNet(狗、猫等)的图像进行分类,并使用一种称为迁移学习的技术,他们在来自 NIH 数据集和印第安纳大学的较小公共数据集的 CXRs 上重新训练该模型。
Inception-V3 — developers need only train the last final layers — a technique known as transfer learning.
一旦 cxr 被分成正常和异常(丢弃任何不确定性),使用 10 的云计算时间,训练初始模型的最后层只需要 6 个小时。他们的结果如下:
Our model yielded sensitivity 94.6% (95% CI: 94.4–94.7%) and specificity 93.4% (95% CI: 87.2–96.9%) with a positive predictive value (PPV) of 99.8% (95% CI: 99.7–99.9%) and negative predictive value (NPV) 27.9% (95% CI: 26–28.9%), all based on a cut value of 0.5.
The ROC curve demonstrated an area under the curve (AUC) of 0.98 (95% CI: 0.97–0.99). Cut-offs were unadjusted from 0.5.
实际上,两个 NHS 的初级医生(没有接受过正式的数据科学培训)建立了一个极其廉价和高度准确的 CXR 分流模型,他们之所以成为可能,是因为他们能够获得大量的、有标签的开放健康数据。
现在,我并不是说我们的论文在任何方面都是开创性的——我们当然没有在深度学习领域取得进展,也没有创造出商业化的产品或影响任何现实生活。然而,我们所做的证明了开放的健康数据可以以非常低的成本被用来创造潜在有效的工具。这才是最重要的——通过使用开放数据来创建一个有可能为 NHS 节省大量成本和效率的工具,来展示开放数据的力量。
分享是关怀
曾有过几次统一 NHS 数据基础设施的尝试,最著名的是国家信息技术计划(NP fit——不是有史以来最好的缩写)和最近的 Care.data。这两个计划被认为失败的地方在于所涉及的既得企业利益和缺乏数据安全性的细节。NPfIT 崩溃的部分原因是,几家不同的公司被给予了英国的大块土地来设计基础设施,并且对数据安全性没有给予足够的重视。最终,数十亿英镑被浪费在创建不可互操作的非标准化服务上。 Care.data 再次失败,原因是公众对他们的数据共享缺乏信任。
我们需要的是一种“自下而上”的数据共享方法,由国家指导方针来管理。如果每个 NHS 信托机构都能够得到关于数据去识别和共享的最佳实践的指导方针,那么他们就可以在当地与患者合作,以确保大规模的数据共享能够适当地进行,并符合当地的需求。例如,如果一家医院需要 CXR 分流算法,他们可以在当地咨询,为当地委托的研究小组提供历史去识别图像和报告,以构建并随后部署这样的算法。通过将大规模数据共享纳入本地研究,NHS 可以为算法建立试验台,这对提供过程的最后一步——临床验证——至关重要。不是所有的算法都行得通,但没关系。快速失败是科技界常用的咒语,如果 NHS 要转向技术来拯救自己,它需要营造一个允许快速失败的环境。
随着时间的推移,医院可以共同努力,确保数据集得到合并,为数据科学家提供更好的培训场所,并为推广到人群提供更好的算法。更好的是,一个中央机构可以委托进行一系列的研究。回到 CXR 的例子——如果说 NHS Digital 和 RCR 想要建立一个全国通用的 CXR 分流算法,他们需要做的就是公开呼吁感兴趣的医院参与进来。参与的医院将分享他们的 CXR 数据的一部分,这些数据可以集中保存(当然是去身份化的),并开放给研究人员使用。像 Kaggle 这样的数据科学竞赛已经存在多年,并提供了一个优秀的沙盒,研究人员可以在其中开发、快速失败和迭代。(这实际上是我一直在谈论的一个英国放射学人工智能网络(大脑)的模型!)
现在是时候了
NHS 中有很多关于数据共享的喋喋不休,还有很多会议、辩论和文章(我当然有参与其中的罪恶感!).与此同时,其他国家只是简单地应付着。例如,法国已经宣布将开始整理超过 5 亿个放射学病例用于人工智能研究的唯一目的。许多美国机构已经在准备大规模的数据共享计划,通常是与大型科技公司合作。澳大利亚已经开始建设一个巨大的生物库,这是南半球最大的生物库。
如果英国国民医疗服务体系在采纳和适应方面太慢,那么它只会被甩在后面。我们现在需要努力,开始与患者对话,并为未来做好计划。毕竟,开放的健康数据可能是唯一能拯救我们的病人和国民医疗服务的东西。
免责声明:本文所代表的工作是个人的,与我所属的任何公司或组织无关。
如果你和我一样对人工智能在医疗保健中的未来感到兴奋,并想讨论这些想法,请联系我们。我在推特上 @drhughharvey
如果你喜欢这篇文章,点击推荐并分享它会很有帮助。
关于作者:
哈维博士是一名委员会认证的放射科医生和临床学者,在英国国民医疗服务体系和欧洲领先的癌症研究机构 ICR 接受过培训,并两次获得年度科学作家奖。他曾在 Babylon Health 工作,领导监管事务团队,在人工智能支持的分诊服务中获得了世界第一的 CE 标记,现在是顾问放射科医生,皇家放射学家学会信息学委员会成员,Kheiron Medical 的临床总监,以及人工智能初创公司的顾问,包括 Algomedica 和 Smart Reporting。
OpenMined 如何利用你闲置的游戏机来训练下一代人工智能
到现在为止,你应该已经听说过很多关于开源组织 OpenMined 的事情了。他们正在研究一种使用区块链和 Unity 游戏引擎来实现个人数据访问民主化的方法。
没听说过露天开采吗?没问题,有 有 很多****篇 出有 。随便选一个。****
OpenMined 为他们的加密深度学习库 PySyft 使用 Unity 游戏引擎。你现在可能会问自己,为什么深度学习库要用游戏引擎。让我解释一下。
面向所有人的 GPU 无处不在
如果你活跃在深度学习领域,你就知道训练一个 AI 需要大量的处理能力。在大多数情况下,一个好的兼容 CUDA 的 GPU 可以大大加快训练进度。如果你没有合适的硬件,即使训练一个简单的分类器也是一件痛苦的事情。
这是露天开采的问题。
OpenMined 的目标是日常用户,而不仅仅是数据科学家或深度学习工程师,他们可能无论如何都拥有一个高端 GPU。想想你的父母,你的兄弟姐妹,你的非技术朋友:他们拥有 CUDA 硬件吗?
如果你读过上面链接的一些文章,你就会知道 OpenMined 的目标是用户在自己的设备上用自己的数据训练共享网络——个人数据不应该离开设备。这就是为什么在大多数人使用的设备上进行培训很重要。
通过使用 Unity 游戏引擎,OpenMined 团队能够将他们的代码交叉编译到地球上几乎所有现有的 GPU 上。这意味着培训可以在更多的设备上运行,您可能拥有多台设备:
- 游戏机【The Xbox One X 的 GPU 堪比 GeForce GTX980 。此外,游戏机大部分时间都处于闲置状态——所以为什么不用它来训练一些人工智能呢?
- 智能手机/平板电脑:手机中的图形处理器越来越好——如果你不是一个手机游戏玩家,大部分时间都会闲置。如果你有一部 iPhone 8/8 Plus 或 iPhone X,你的手上也会有专用神经网络处理器 A11 仿生的力量。
- 电脑:即使你的电脑或笔记本电脑没有最新的 NVIDIA GPU,Unity 也可以在旧的 GPU 和 AMD、Intel 等硬件上训练 AI。—在每个操作系统上。
- ****更多:你的智能电视里面很可能有 GPU,也许你的智能手表也有,而且还会有更多的设备不断到来。
结论
**我在我的上一篇文章中说过,现在我再说一遍:open mined 项目的愿景和工具是彻底改变我们收集、保护和保护您的个人数据并将其用于人工智能的方式。显然,革新我们使用硬件进行训练的方式也是其中的一部分。
大部分内容摘自“为什么是 Unity?”open mined GitHub上的 Markdown 文件。如果你想投稿,请访问 OpenMined 的网站获取更多信息,并加入我们的 Slack。我去打个招呼。
组织如何从技术驱动的大数据战略中获益?
中小型企业如何从数据分析中受益?
小型企业缺乏资源来进行大数据投资。因此,中小企业需要更明智的策略来加入大数据趋势。这里有一些提示——
- 中小型企业应该从投资小规模分析开始,而不是担心使用大数据集或小数据集,并专注于通过最佳业务数据集将数据技术分析用于企业决策。
- 此外,中小型企业应该利用数据集来帮助他们解决眼前的问题,而不是收集各种业务数据来预测未来的用途。
- 由于大多数中小企业高管依赖个人经验和信念,而不是业务数据驱动的结果,因此组织变革成为在小型组织中引入大数据文化的先决条件。
- 使用云计算也是在中小企业中有效实施大数据解决方案的基础。云有双重好处——一;它有助于通过统一的平台连接所有服务。第二,中小型企业可以通过采用基于云的大数据处理解决方案获得显著的成本优势。
- 中小企业的经营规模要小得多,因此在运营分析、R&D 分析等方面投资过多。对他们来说没什么意义。相反,他们可以通过专注于客户分析而受益更多。凭借更好的产品营销、个性化服务和有针对性的产品,中小企业可以获得显著的成本收入比优势。
- 最后,中小企业应该毫不犹豫地利用其组织外部的数据,以获得对客户行为、运营和财务管理的更多洞察。
如果中小型企业明确定义自己的目标,并且不被市场炒作所左右,他们可以从大数据实施中获益更多。然而,企业(无论规模大小)在实施大数据解决方案方面的成功取决于两件事。第一,数据的可用性,第二,正确处理技术的实施。
从技术驱动的大数据战略中获得组织收益
大数据分析在组织效率中发挥着重要作用。大数据战略带来的好处使公司获得了超越竞争对手的竞争优势,这通常是由于组织及其员工通过使用分析作为决策基础而增强了意识。以下是组织如何通过部署大数据战略获益——
降低组织成本
大数据解决方案有助于建立高效的制造流程,实现需求驱动型生产和原材料的最佳利用。自动化和使用人工智能来减少人工工作是在生产和运营中实现成本效益的另一种方式。对销售和财务部门的深入了解有助于管理者制定战略,促进敏捷工作环境,降低整体组织成本。
提高员工效率和生产力
数据驱动的决策有助于增强员工的信心。当人们根据可量化的数据做出决策时,而不是被要求自己做出决策时,他们会变得更加积极主动和富有成效。这反过来又提高了整个组织的效率。
设置有竞争力的价格
正如本文前面所证明的,众所周知,创建差异化的定价策略有助于开发有竞争力的定价,并带来相关的收益。此外,组织可以通过使用大数据来获得价格优势,从而应对类似产品和服务的竞争。
基于人口统计的销售策略
人口统计学划分了大多数市场,但是在客户分类中存在更深的划分。大数据分析可以根据顾客购买的可能性,将顾客分为不同的等级。这为销售代表提供了更多可靠的线索,并帮助他们转化更多。此外,当销售和营销基于大数据洞察时,销售代表很可能知道潜在客户的倾向和订单历史,从而提升销售代表的优势。
提升品牌忠诚度
客户可能会对关系驱动的营销做出更大的反应。使用数据分析,组织可以利用他们对客户需求和期望的先验知识,并相应地提供服务。因此,大大增加了重复订单的机会,并建立长期关系。
雇用更聪明的人做更聪明的工作
使用大数据技术已经成为人力资源经理通过访问社交媒体、商业数据库和求职引擎的概况数据来识别候选人的有用工具。这使得公司能够比传统的招聘技术更快、更可靠地招聘员工,因为传统的招聘技术总是存在不确定性。此外,当组织在所有平台上使用分析时,他们必须雇用符合其政策的候选人。
重新调整商业策略
大数据战略不仅为组织提供了更好的决策权,还为他们提供了验证这些决策结果的工具。组织可以使用这些久经考验的商业策略,根据新的需求重新调整他们的策略或规模。
结论
毫无疑问,大数据技术将继续发展,并在未来几年涵盖更多领域。随着数据生成速度的提高,即使是较小的企业也会发现很难使用较旧的系统来维护数据集。最重要的是,分析将成为商业活动背后的指导原则。此外,公司将需要更加自动化和数据驱动,以竞争和生存。 拥有机器学习和智能个人助理等技术的人工智能的发展也严重依赖于大数据。他们将在未来的商业管理、制造流程、销售和营销以及整体组织中扮演何种角色,仍有待观察。
如果您喜欢阅读上述文章,您可能会喜欢阅读“大数据分析将如何在企业中发挥重要作用?”
你的城市有多强大/空中连接?
探索我的第一个“真正的”D3 可视化来找出答案
Click here to explore the live visualization!
首先,快速插入 D3.js
一直在学 d3.js,被它吹得神魂颠倒。不久前,我尝试用 R 闪亮的构建一个交互式可视化。我发现它很强大,但有点被服务器端的设置所阻碍——不太容易在任何旧服务器上部署。
D3.js 有一个令人困惑的更新周期(至少对我来说),但这是我唯一不喜欢它的地方。令人惊讶的是,您可以如此广泛地定制它的输出。如果你能想象,你就能做到。而且总会有一个bl . lock样本让你开始走上正确的道路。
如果你对学习 d3.js 感兴趣,我推荐这个简短的 Udemy 课程。这位教师很了解他的东西,他已经构建了一些真实世界的入门项目,在几周内带你从简单到复杂。
写完之后,我想试着围绕我对航空数据的兴趣做点东西。我在 R(仍然喜欢用它来做数据准备)处理了最新的 OpenFlights.org 数据,并给出了 100 个联系最紧密的城市的路线。
空中连接的城市是强大的城市
关于这些数据,有趣的第一件事是,一个城市的空中连接程度与城市权力的各种指数有多少重叠。全球化和世界城市研究网络(T9)(GaWC)和其他组织根据大都市的 GDP 估计值和其他数据编制了年度城市实力排行榜。
他们的选择标准听起来很复杂,有些是专有的。但是,仅仅通过对城市提供的出境航班数量进行排名,你就可以得到与 GaWC 100 强相当接近的结果。
这就是维恩图显示的。
这两份清单有 65 个重叠的项目。如果你想生活在一个强大的城市,你可以做得比简单地测量其出境航班时刻表的厚度更糟。
对于超级好奇的人来说,看看这张显示每个列表中前 50 名城市排名对应关系的二分图。
请注意,某些航空枢纽城市(例如亚特兰大和达拉斯)的空中连接排名比电力高得多。看起来,他们之间的联系更多的是由于主要航空公司的轴辐式航线,而不是他们的整体经济实力。
那么,你所在的城市与空中的联系有多紧密?
它在名单上吗?(我住在#18!)
探索我的 viz 找出答案。通过下拉菜单浏览整个 100 列表。将鼠标悬停在两侧的桑基条(是的,就是这些东西)上,查看绘制的路线(这部分花了一些时间!).
你会注意到前 20 个左右的城市是真正的全球连接,提供许多地区和直接的跨大陆航班。随着你在列表中越来越深入,提供的直飞洲际航班的数量逐渐减少,剩下的大部分都是区域航班。
放射学和人工智能将如何走到一起
Photo by Owen Beard on Unsplash
放射科医生的机器学习介绍— 10 部分系列
第二部
编辑: 迈克尔博士
万一你错过了第一篇帖子,在这里 查看一下 。
一个高效、准确的住院医生和一个经验丰富的主治医生是一股不可忽视的力量。该团队可以粉碎患者名单,从容应对列车事故。住院医生可以根据需要调出实验室和病史,他们可以在正确的时间通过电话找到正确的人,并处理除最复杂的临床情况之外的所有情况。这需要年的训练才能实现。
让我们来看看基思·德雷尔博士对临床诊断学的概述。
从左下方的患者开始,从左向右移动。
现在,这个临床工作流程大纲非常笼统,但我们可以跟踪患者进入医疗保健系统的步骤,到提供者订购成像,到放射科医师做他/她最擅长的事情。它很好地概述了患者诊断过程中采取的步骤。下一张图片将提供更多的放射学背景。
来自上面的临床路径被缩小以跟随具有急性神经症状的患者。从左至右:症状、影像学、影像解释和临床管理。
从上面的幻灯片中,我们可以对放射科医师每天都参与的大量功能进行分类,一天多次。过程中的具体点涉及放射科医师的知识,并在整个过程中注重团队合作。在一个复杂的工作环境中,管理一个病人的护理需要整个团队,相互关联的因素。
此外,众所周知,工作流中可能会有一些完成起来很繁琐的点,而这些点是可以自动化的。这可以改善放射科医师的工作流程,并且潜在地,提高的效率将转化为改善的患者结果和实际节省的资金。
这就是人工智能可以发挥作用的地方。在上面的幻灯片中,人工智能算法进入了检测 阶段。一般来说,这是大多数机器学习目前关注的地方。然而,在未来,我们可以想象这样一个世界,其中大多数步骤都可以通过智能算法来增强或辅助,以提高工作流效率。随着本系列文章的深入,这种人机交互的结合将会更加清晰。
放射学往往处于技术的最前沿*。“在过去的 30 年里,医学成像已经成为现代医学的一个标志,并彻底改变了医疗保健和医疗行业。”(MRI 和 PACS 系统彻底改变了成像的提供、使用和解释方式。这些为放射学应该处于领先地位的普遍观念铺平了道路。***
成像技术的创新不仅可以让放射科医生更好地了解潜在的疾病过程,还可以转化为改善患者的结果。
那么,人工智能在哪里呢?
第一个应用是心脏核磁共振成像。通常,放射科医师(研究员/住院医师)完成绘制心脏流出道轮廓的非常乏味的任务。这可能需要个小时。现在,理论上,这可以完全自动化。潜在的算法可以像脸书一样,自动检测主动脉根部并画出它的轮廓。对每个需要的大纲重复上述步骤。一旦轮廓完成,流量、狭窄和回流的计算也可以自动化。
从主治医师的角度来看,如果你的第四年住院医师一直低估主动脉根部周长,你应该鼓励他们使用你的教育方式和技巧来改进这项特殊的任务。如果你还记得住院医师的话,每个员工都不一样。
理想情况下,在这种情况下,算法将优于居民。当你操作图像来纠正任何错误时,算法将自动学习什么是可接受的,什么是错误的。现在把它想象成一个机构或者一群机构的缩小版。它对你来说应该是几乎透明的。它将有一个直观的系统,所以当你做出改变时,它会做一些小的修正,并持续改进。
随着智能嵌入到临床工作流程中,这只是将被研究的许多场景中的一个。
“医学成像将人类的视觉扩展到疾病的本质,使新一代更强大的诊断和干预成为可能”(1)。
放射科社区是一个独特的医生子集的一部分,我们往往是技术的早期采用者。因此,我们已经准备好站在正在开发的工具的最前沿,这些工具将遍布我们的工作空间。不——我们不需要知道如何对神经网络进行物理编程;我们可以把这个问题留给 Kaggle 开发人员和上一篇文章中提到的其他人。但理解机器学习的基础、潜在动机和含义将非常有帮助。
下周:
第 3 篇—机器学习和人工智能简介
参考文献
- W.高,谢(2011)。医学影像技术的艺术状态:从创建到存档,然后返回。开放医学信息学杂志, 5 (1),73–85。土井:10.2748386786867
小米是如何开始的
三年前,卡尔、沙拉德和我坐在帕拉马塔一家非中心的小咖啡馆里,当时我们决定尝试一下。
回过头来看,我们天真到了极点,不知道它到底是什么,但我们知道人工智能站在神经科学、数学、计算机科学、哲学和心理学的交叉点上,这将是一场地狱之旅。
在喝了许多咖啡和其他酒精含量更高的饮料后,我们讨论了这个想法,我们知道像 Remi 这样的东西必须存在。当然,有像 Deepmind 这样的纯人工智能研究公司,但没有一家人工智能公司带着绝对疯狂的长期使命,推动人工智能研究的边界,然后将他们的前沿突破转化为超棒的美丽解决方案和产品。
疯狂的长期任务?通用人工智能。
因此,在 2014 年春天,我们抛开谨慎,全力以赴。
我们选择 Remi.ai 的原因是,我们真诚地希望不要和那些充斥在科技创业领域的不友好公司混在一起。我们的长期目标是人类水平的人工智能,因此我们想要一个友好的人类名字。另一个因素是 Remi.ai 的报价为 130,000.00 美元,而 Remi.ai 在 onlydomains.com 的报价为 19.90 美元。
2014 年,人工智能领域没有很多公司,也没有大量关于深度神经网络的论文或培训材料。尽管如此,我们还是投入到学习和构建一切可用资源的任务中。我们从简单的神经网络和 RNNs 开始,在多种任务上进行测试,如预测销售收入和库存变动。我们为几个不同的项目探索了图像识别,甚至赢得了一场 kaggle 比赛。
但是几个月后,我们非常清楚强化学习是真正提高人工智能和开发像人类一样学习的智能体的关键。
对于任何在人工智能领域没有经验的读者来说,目前有三个不同的子领域。监督学习、非监督学习和强化学习。我不会对前两个给出太多的细节,因为这可以等待另一个帖子。但是强化学习可以被定义为建立人工智能来像哺乳动物一样学习。哺乳动物有一个简单但极其有效的学习机制,它们能够尝试一些事情,从结果中学习,最有趣的是,将他们的学习传递给他们的同伴和后代。这种学习机制在很大程度上受到了几千年来进化的内部奖励的影响,强化学习给了我们一个机会来开发可以模仿这一点的人工智能,显然是以一种初级的方式开始的。生活不完全是奖励和惩罚,有更高级的认知功能,可以说是关于哺乳动物大脑中的奖励机制。但它是我们智力的基石,是迈向人类水平人工智能的重要一步。
第二个基本点是,许多强化学习算法是通用算法,在某种意义上说,相同的算法可以应用于许多不同的任务,常常会产生令人难以置信的结果。如果你想一想,人类是这种能力的最好例子,通过试验、错误和实践来学习任何任务,只要在训练期间有回报和进步的感觉。你至少可以做下面的一些事情,如果不是全部的话:读书、写字、系鞋带、做长除法、骑自行车、下棋、玩滑雪板和无数其他的技能。这一切都来自于你大脑中的一种或者多种学习算法。
正如你拥有学习各种任务的能力一样,我们研究的算法可以应用于许多任务:从驾驶汽车,到玩电脑游戏,到学习如何理解语言和许多其他应用。
这成为我们小组研究的全部重点。我们开始在人工环境(电脑游戏)和真实世界的问题中测试强化学习代理。我们构建了代理来玩太空入侵者、Pong 和其他电脑游戏。我们构建了一个代理,它可以重新排列代码,以满足用户的请求,通过消除每次请求一个 API 的需要,简化了任何聊天界面。我们建立了一组智能体,它们在一个环境中发展自己的语言来交流环境,学习如何警告威胁智能体的到来,就像猫鼬一样。我们建立了一个代理,它可以在 Google Adwords 投标活动中踢屁股,并大大提高公司的投资回报率,我们还建立了一个非常酷的语言代理,它可以自己学习如何理解用户的请求来完成任务。
在这整个过程中,发生了太多的变化。我们学到的比目前任何大学学位所能提供的都要多。在这段时间里,人工智能已经从少数人感兴趣的一个小而随意的主题变成了目前谈论最多的技术之一,被预示为未来之路,不是对工业而是对整个社会。在 Remi,我们已经从在 tic tac toe 等小游戏上测试小算法,发展到为控制每月数百万美元支出的企业公司构建代理。
然而,许多事情都保持不变。我们仍然在阅读大量关于儿童神经发育的书籍,我们仍然喝太多咖啡,我们仍然 100%自举,我们仍然有同样疯狂的长期使命,这真的让我们兴奋。
接下来的几年对雷米来说将会非常有趣。我们将在未来一年推出两款产品,我们将继续致力于语义网络强化学习器,该学习器处于早期阶段,在推进人工智能语义理解方面表现出非常强劲的前景。我们正在与一家虚拟现实开发公司进行谈判,以在虚拟现实游戏中建立一个人工智能。也有一些更多的嘘嘘项目将有望在今年晚些时候见天日。
真的没有像开公司这样的体验。找到一群非常聪明、有动力的人,把你们所有的集体智慧和意志力投入到尝试建造一些没有人做过的东西中去。它有如此多的高潮和低谷。数小时盯着方程式和论文,试图让你的脑袋里有一个新的想法。多少个夜晚,你试图找到继续工作的能量。但是当一个智能体开始工作的时候,当你看到它在某些方面超越了人类,那种谨慎的兴奋可能真的在工作,最后和团队一起喝啤酒庆祝它在工作。
真的没有多少经验可以与之相比。
阿拉斯代尔·汉密尔顿
创始人
想在生活中浪费更多的时间?请继续关注 Remi AI 博客,因为我们正在构建完整的供应链产品,或者你可以在这里注册我们的 Remi 推荐阅读简讯。
或者,如果你准备好开始看到人工智能驱动的库存管理的好处,从这里开始旅程。
我们是谁?
Remi AI 是一家人工智能研究公司,在悉尼和旧金山设有办事处。我们已经交付了横跨快速消费品、汽车、工业和企业供应等领域的库存和供应链项目。
自动驾驶汽车如何从 A 地到达 B 地?
最近我偶然发现了一篇非常有趣的论文,这篇论文对城市地区无人驾驶汽车的运动规划和控制技术做了很好的概述。在这篇文章中,我将回顾这篇论文中与我在 Udacity 无人驾驶汽车纳米学位的最后一个学期 2 项目相关的几个部分。
The final output from last project in Term 2
构建自动驾驶汽车系统的常见方法之一是组织传感器感知(雷达、激光雷达、摄像头等)。)和决策过程分成一个等级结构。
分级结构
自动驾驶汽车的决策模块可以通过四个组件来表示:
- 路线规划——寻找 A 点和 b 点之间的最短路径。当你搜索附近的餐馆时,想想谷歌和 Here 地图在做什么。
- 行为决策 —一旦找到路线,该子模块负责选择驾驶行为(车道跟随、变道、右转等)。)基于其他交通参与者和既定的交通法规。这些行为是有限的一组动作,通常表示为有限状态机和一些启发法,用于反映车辆周围环境(其他车辆、道路工程等)的当前上下文。).这一领域的最新发展之一是麻省理工学院的人工智能方法,用于模拟决策过程中的这一步骤。
- 运动规划 —一旦行为被选择,它需要被转换成一个低级别反馈控制器可以遵循的轨迹。运动规划模块负责寻找轨迹/路径。
- 车辆控制 —反馈控制器通过使用适当的执行器(转向、油门、刹车)和纠正轨迹误差,完成沿着选定轨迹移动车辆的所有艰苦工作。
Decision making process in self-driving cars. Source.
关于运动规划和车辆控制的更多信息
在课程第二学期的最终项目中,我们被要求在模拟器中使用模型预测控制(简称 MPC)驾驶汽车,这基本上涵盖了自动驾驶汽车决策过程的最后两个部分(运动规划和车辆控制)。
MPC 能够预测车辆在有限时间范围内的未来状态(位置、方向和速度)。这是一个不断自我更新的迭代模型,并在 N 个时间段( dt )预测车辆状态。预测本身是基于数学车辆模型。
创建一个正确的车辆模型是一项相当复杂的任务,并且伴随着权衡(我们是应该选择精度较低的简单模型还是计算要求较高的复杂模型)。在我们的项目中,我们将使用运动学模型,与动力学模型(考虑了影响车辆动力学的其他力)相比,该模型更容易理解。
这是我们的车型:
Kinematic vehicle model
车辆坐标用 x 和 y 表示。 ψ 和 v 分别对应方位和速度和*。* 车辆执行器用转向角( δ )和加速度( a )建模。
Udacity simulator 为我们提供了车辆应该去哪里的方式(参考点)。这将来自路线规划步骤,来自现实世界中的层级流。通过这些点拟合高阶多项式,并且输出用于与 MPC 预测模型进行比较。这将是运动规划步骤。
MPC 的工作方式是,它预测车辆未来的位置,并试图通过正确调整执行器(转向、油门和刹车)来最小化错误率。这将代表车辆控制步骤。
你会注意到项目中缺少行为决策步骤,但这是由于 Udacity 模拟器中场景的简化(路上没有其他车辆,没有路障,等等。).
延迟启动
我们应该注意的一件事是反馈控制器中执行器的响应性。在现实世界中,改变转向角和/或油门的请求将由汽车上的致动器以一定的延迟来执行。在该项目中,为了模拟这种行为,引入了人工100 毫秒延迟。我通过设置运动学方程来处理这个问题,以使用前一时间步的驱动。在这种特殊情况下,时间步长( dt )与模拟延迟具有相同的值。
最后结局
该项目的源代码可以在我的 Github 个人资料中找到:
CarND-MPC-Project - CarND Term 2 模型预测控制(MPC)项目
github.com](https://github.com/bdjukic/CarND-MPC-Project)
自动驾驶汽车的转向控制
用数据做酷事
典型的自动驾驶汽车从感知系统开始,该系统估计周围环境的状态,包括地标、车辆和行人。
Perception of local environment
定位模块将其所学与地图进行比较,以确定车辆的位置。
Localizing a self driving car
一旦知道了车辆的位置,路径规划模块就绘制出到达目的地的轨迹。
Path planning trajectory
最后,控制回路在每个时间步决定转向和油门/制动,以在该轨迹上引导车辆。在这篇博客中,我将讨论控制回路如何决定转向和油门值
对于我在 Udacity 自动驾驶汽车 nano degree 中的项目 10,我实施了预测控制,以在模拟器中驾驶汽车。见下图。模拟器向用户提供汽车在每个时间点的位置和速度,反过来,用户向模拟器提供转向和加速度以应用于汽车。非常感谢 Udacity 创建了这个模拟器,并为我提供了实现模型预测控制的专业知识
Self Driving Car in Udacity Simulator
我已经用 C++分享了我的 GitHub 的链接和完整代码。
模型预测控制
状态:车辆在任一点的状态由四个向量描述——x 位置、y 位置、速度(v)和方向(psi)。
执行器或控制输入是转向角(δ)和节流阀(a)。刹车可以表示为负油门。因此 throttle 的值可以在-1 和+1 之间。转向角通常设置在-30 度到+30 度之间。
运动学运动模型可用于在应用转向和油门后从先前状态预测新状态。
x _[t+1]= x[t]+v[t]* cos(psi[t])* dt
y _[t+1]= y[t]+v[t]* sin(psi[t])* dt
psi _[t+1]= psi[t]+v[t]/Lf * delta[t]* dt
v _[t+1]= v[t]+a[t]* dt
这里 Lf 是车辆前部和重心之间的距离。车辆越大,转弯速度越慢
为了估计理想的转向角和油门,我们从理想状态估计新状态的误差——我们想要遵循的实际轨迹和我们想要保持的速度和方向,并使用 Ipopt 解算器来最小化该误差。这有助于选择最小化期望轨迹误差的转向和油门。
所以良好运动控制的关键是很好地定义这个误差。我将误差设置为基于以下内容
- 与参考点的距离——见下面的等式。我们将由于与参考 x,y 的差异而产生的误差(定义为跨磁道误差(CTE))、与期望取向的差异(定义为取向误差(epsi ))以及与参考速度的差异相加。n 是我们预测未来的时间步数。
double cost = 0;
for (int t=0; t < N; t++) {
cost += pow(epsi[t], 2); //Orientation error
cost += pow(cte[t], 2); //Cross track error
cost += pow(v[t]- ref_v, 2);//Delta from ref velocity
}
2.与执行器成比例的误差
cost += pow(delta[t], 2); //Steering angle
cost += pow(a[t], 2);//Throttle
3.与致动器变化成比例的误差——成本函数中的这一附加项反映了下一个致动器状态与当前状态之间的差异。这确保了致动器值的平稳变化
for (int t = 0; t < N-1; t++) {
cost += pow(delta[t+1] - delta[t], 2) //Change in steering
cost += pow(a[t+1] - a[t], 2) //Change in throttle
}
上述各项可以乘以权重,这些权重增加了该项在总成本等式中的重要性。例如,如果我们将pow(delta[t+1] - delta[t], 2)
乘以 500,这将确保非常平稳的转向变化,并防止模拟器中的颠簸运动
C++ Ipopt 解算器用于最小化误差,并计算转向和油门的最佳值。
另外两个相当重要的参数是我们要预测转向和油门的未来时间步数(N)。和时间步长(dt)。
- dt——不同时间步长之间的时间间隔。我发现 dt 是模拟器中整体性能的一个非常重要的参数。如果 dt 太低,就会导致赛车在赛道中心来回摆动。发生这种情况可能是因为致动器输入接收非常快,并且车辆不断响应。此外,如果 dt 小于延迟时间(0.1 秒),则在执行前一个信号之前接收到新的致动器信号。这导致汽车的颠簸运动。另一方面,如果 dt 太大,在致动器被接收之前,汽车行驶了太多的距离,虽然这导致沿着轨道的直线部分的平稳性能,但是它导致汽车在弯道上偏离道路。
- n-是模型预测的时间步数。随着 N 的增加,模型预测更远。模型预测的时间越长,预测就越不准确。此外,如果 N 很大,则需要进行更多的计算,这会导致求解器的结果不准确,或者求解器无法实时提供解。我发现大约 10-15 步是最好的
一旦设置了所有的模型并且定义了所有的参数,
- 我们将当前状态作为初始状态传递给模型预测控制器。
2.我们称之为优化求解器。给定初始状态,求解器将返回使成本函数最小化的致动器向量。
3.我们将转向和油门应用到车辆上。然后回到步骤 1。
通过预测每一步正确的转向和油门来驾驶汽车绕着模拟器行驶不是一件容易的事情,但却是一次令人敬畏的学习经历。非常感谢 Udacity 创建了这个课程!
其他著述:【https://medium.com/@priya.dwivedi/】T2
PS:我住在多伦多,我希望将职业生涯转向深度学习。如果你喜欢我的帖子,并能把我联系到任何人,我将不胜感激:)。我的电子邮件是 priya.toronto3@gmail.com
参考文献:
Udacity 无人驾驶汽车 Nano Degree——我感谢 Udacity 和巴斯蒂安·特龙给我机会成为他们新的无人驾驶汽车项目的一部分。这是一次非常有趣的旅程。我使用的大部分代码都是在课堂讲课中建议的。这里的图片和视频参考也在讲座中分享
图片:https://arxiv.org/pdf/1612.02649.pdf
模拟将如何发展数据科学
数据科学可以分为两类:监督学习和非监督学习。不同的是,监督学习有一个所谓的标签。标签或目标变量包含关于真相的信息。与世界各地的许多客户合作时,我经常建议:
如果你能被监督;去监督。
我更喜欢这样,因为有监督的问题更容易优化。你有了一个更清晰的业绩衡量标准,这让生活变得更轻松。
在这个领域,很难被监督。要克服的问题是:我从哪里得到一个标签?
在大多数教育例子中,关于这个基本事实的信息是简单给出的。事实上,你经常要付出很大的努力来获得这些信息。这项工作分为三类:
- 用一种可以被监督的方式来解释问题
- 从数据中提取信息(例如,获取时间序列中的预测值)
- 获取一般的标签信息
在这篇文章中,我们主要讨论获取标签的问题。更准确地说,我们关注一种未被充分利用的方式来获得它。
Elmer-pump-heatequation by A1, Wikipedia, CC BY-SA 3.0
获取标签信息的三种方式
目前最常用的获取标签的方法是使用历史数据。虽然这很直观,但也有其独特的问题。一方面,可能有些事情从来没有发生过,因此你没有相关的数据。另一方面,你可能会遇到概念漂移的问题。概念的漂移意味着潜在的模式随着时间而改变。一个常见的原因是机器的腐蚀。
获得标签数据的第二种方式是人类专家。人类非常擅长给日常物品贴标签,比如图片或文本。如果你问一位生物学家,他在显微镜图像上看到的是哪种细菌,他通常能说出名字。这些技术的缺点是:有限的数据量、主观性和用例的局限性。人类不太擅长标记 1000 个传感器的时间序列问题。
第三个很少被使用的选项是:模拟。作为一名工程师,你可以非常精确地模拟你的设备。汽车或飞机制造商正在模拟空气动力学。但是你可以在所有工程领域看到类似的模拟。
如果你不仅模拟了设备本身,还模拟了整个传感器电子设备来获取数据,你就可以用它来进行数据科学研究。您可以使用它来生成给定缺陷的传感器读数。这样,您可以生成许多积极的预测性维护案例。只有在使用模拟的情况下才有可能,因为搜索到的维护需求很少被记录下来。
物理学家正在开拓
事实上,这是粒子物理学家使用了几十年的技术。现代粒子探测器,如 ATLAS 或 Cern 的 CMS,是通过非常精确的模拟来描述的。为了找到你的希格斯粒子,你要模拟整个探测器,给自己创造模拟的希格斯粒子。之后,您可以将它用作监督学习算法的标记数据。
在实践中很少这样做的原因是获得好的模拟的挑战。模拟的质量限制了建模技术的复杂性。在欧洲粒子物理研究所,物理学家花了数年时间研究模拟本身。
随着物联网和工业 4.0 的兴起,我希望模拟工程师和数据科学家能够找到彼此。我对结果非常兴奋。有没有行业内的动手经验?如果是这样,我很想听听你们的经历!
统计数据如何误导你
“我的统计数据不会说谎”,隔壁的统计学家说;嗯,也许是的,但爱丽丝可以使用那些很酷的图表,曲线数字来编造谎言!,不是在仙境,而是在现实!
如果你是一名数据科学家、分析师、机器学习工程师,或者仅仅是喜欢数字的人,理解统计学是至关重要的。但是统计数据并不是绝对的真理!也许你看到的统计数据被操纵了,为什么?因为他们可以!媒体和广告公司经常玩弄消费者心理,只展示他们想让消费者感知的东西。为了做出正确的决定,经常需要知道你得到的数据是真实的,毕竟你不想失去那笔百万美元的交易,不是吗?让我们仔细看看如何识破谎言,这样下次你去开会或看报纸时,你就不会被花哨的图表误导了。
统计数据误导的方式
①。 统计意义并不意味着实际意义。简单地说,某件事在统计上有意义并不一定意味着它是可行的或有任何实际重要性。
在一个统计实验中,假设检验(H0 和 H1)的框架是评估关于总体的两个相互排斥的陈述,以确定哪一个陈述最受样本数据支持。零假设(H0)是一种假设,即两个或多个总体的参数(均值、方差)没有差异,而另一种假设表示存在差异,称为备择假设。
显著性水平,用希腊字母 alpha 'α’表示(当假设为真时拒绝零假设的概率),在实验开始前选择。例如,显著性水平为 0.05 表示当没有实际差异时,得出存在差异的结论的风险为 5%(通常选择 0.05 作为显著性水平,但它最终取决于用例,如果您的研究是关键的,您可以考虑 0.01)。另一个统计是“p 值”,即当研究中的零假设(H0)为真时,发现观察到的或更极端的结果的概率。
如果 p < α Null Hypothesis is rejected, which means the likelihood of the occurrence of the event if the Null Hypothesis is true is unlikely. A test result is said to be Statistically Significant when the sample statistic is unusual enough relative to the Null Hypothesis. Confused still?, 在这里阅读更多信息,但是现在要明白统计意义并不意味着实际意义。例如:你进行的一项研究(即使 alpha 为 0.01)可能完全具有统计学意义,但也许你收集的样本不足以代表总体,或者涉及的风险太高,你甚至不希望有 1%的概率出错。
**②。无关情节:**俗话说‘一图胜千言’,统计的图表/情节也是如此。
a.曲线图/图表类型:用于表示数据取决于您想要向观众讲述什么故事,例如:折线图更适合描述股价的涨跌,而条形图可能适合表示 x 地区每家公司的销售数据。使用饼图(条形图可以完成这项工作)可能会使整个演示文稿显得笨拙,并且您可能无法向观众传达一个观点。
b.操纵 Y 轴: Y 轴可以被截掉,告诉一个不相关的检查
其他时候, Y 轴需要截断,以必要的比例表示数据
省略基线或挑选数据是图表可能被歪曲的一些其他方式。同样解释你的情节也很重要,例如,不要混淆趋势的波动(如下图所示)。
**3)。相关性并不意味着因果关系:**想象你在一个周日的早晨醒来,当你走向沙发,手里可能拿着一杯咖啡,啜饮着,当你拿起那份报纸时,你震惊地看着一条可能是很好的误导性信息,它读起来像这样
不要担心,放松你的大脑肌肉,简单地抓住‘相关性并不意味着因果关系’这个事实;我的意思是,虽然缅因州的离婚率和人造黄油的消费是相关的,但没有证据表明一个导致了另一个。要了解更多信息,请参考。
相关性就像一种潜在的关系,虽然有潜在的关系并不意味着关系的存在。所以,下次你看到一个奇特的图表,有人说这是造成这种情况的原因,记得不要落入陷阱,除非你有确凿的证据。这并不意味着相关性是无用的,事实上它被用在许多地方,例如:评估机器学习中变量对之间线性关系的强度和方向。
4)。辛普森悖论: 辛普森悖论,或尤尔-辛普森效应,是概率统计中的一种现象,一个趋势出现在几组不同的数据中,但当这些组组合在一起时就消失或反转。
一个真实的悖论发生在 1973 年。在伯克利大学的研究生院调查了录取率。该大学因招生中的性别差距被女性起诉:
调查的结果是:当每个学校被分开看时(法律、医学、工程等。),女性的录取率比男性高!然而,平均值表明,男性的录取率比女性高得多。说到困惑。
当单个部门被关注时,录取实际上稍微偏向女性。这个误导性的平均值是悖论的经典例子。
**5)。抽样:**收集的数据需要数量合适,样本量小的统计数据通常不太准确。影响数据收集的一个因素是调查是如何进行的。抽样的目的是收集、计算和分析统计数据,以便我们可以从样本中为总体做出推断。最后,我们需要确信结果充分代表了我们关心的人群。
构建样本时,请记住->收集的过程和数据的一致性、多样性和透明度。有几种抽样技术(随机的、系统的、分层的等等),每一种都有其优点和缺点。你可以在这里进一步了解它们。
结论
统计数据只是数字,它们是你想要讲述的故事的一半,如果没有上下文,它们是没有意义的,所以在做出任何结论之前,你需要精通并知道他们正在解决的问题,他们正在处理的数据,即你需要领域知识来推断/解释所进行的研究背后的统计数据。此外,统计只是一种工具,就像所有工具一样,你需要知道何时何地使用它们,如果使用得当,它可以帮助你做出价值数百万美元的决策,如果使用不当,它会让你失去这些决策。所以下次你看到一张图表或一些统计数据时,不要忘记质疑权威!或许在得出结论之前收集更多的证据。
我希望我已经提供了在分析你的统计数据或进行实验时要考虑的基础知识的概述。尽管不用说,我还没有深入研究过任何主题,您可能希望进一步探索它,为此,我提供了我的一点知识来源的链接。
参考文献
计算思维与数据科学讲座-15。统计罪恶并总结:【https://www.youtube.com/watch?v=mCHwwW_Y5wE】T2&list = pl 2 goet 98 czrrq 0 nku 3c mpvr 0 v2 mjb 1 qku&index = 15
辛普森悖论:https://www . statisticshowto . datascience central . com/what-is-Simpsons-Paradox/
样本量问题:https://askpivot.com/blog/2013/11/05/sample-size-matters/
【误导图:】【https://venngage.com/blog/misleading-graphs/】
相关性与因果性:
2.https://idata STS . com/why-journalists-love-cause-and-how-statists-can-help/
出租车是如何算出车费的?—预测纽约市黄色出租车的价格
photo credit: Pixabay
如何从基线模型到机器学习
预测出租车价格绝对没有预测机票价格那么红火。然而,由于我们目前没有可用的机票价格公开数据,为什么不从预测出租车价格开始练习呢?
在此任务中,我们将在给定接送地点和接送日期时间的情况下,预测纽约市的出租车费用。我们将在一些基本的数据清理后从创建一个最简单的模型开始,这个简单的模型不是机器学习,然后我们将转移到更复杂的模型。让我们开始吧。
数据预处理
数据集可以从 Kaggle 下载,整个训练集包含 5500 万次打车,我们将使用 500 万次。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline
plt.style.use('seaborn-white')
pd.set_option('display.float_format', lambda x: '%.3f' % x)taxi = pd.read_csv('ny_taxi.csv', nrows = 5_000_000, parse_dates = ['pickup_datetime']).drop(columns = 'key')
print("The dataset is {} taxi rides".format(len(taxi)))
数据集为 5000000 次打车
我们先看几排。
Figure 1
和统计摘要。
Figure 2
当我们查看统计摘要时,我们有几个发现:
- 最低票价金额为负数。
- 最小和最大经度和纬度看起来不真实。
- 最小乘客数为 0。
我们将修复它们。
- 纽约市的经度约为-74 度,纬度约为 41 度。
- 移除 0 乘客计数。
- 出租车费的初始费用是 2.5 美元,所以我们取消了低于这个数额的车费。
taxi = taxi[((taxi['pickup_longitude'] > -78) & (taxi['pickup_longitude'] < -70)) & ((taxi['dropoff_longitude'] > -78) & (taxi['dropoff_longitude'] < -70)) & ((taxi['pickup_latitude'] > 37) & (taxi['pickup_latitude'] < 45)) & ((taxi['dropoff_latitude'] > 37) & (taxi['dropoff_latitude'] < 45)) & (taxi['passenger_count'] > 0) & (taxi['fare_amount'] >= 2.5)]
然后我们再检查统计汇总。
Figure 3
看起来好多了。
电子设计自动化(Electronic Design Automation)
让我们试着想象几次乘坐出租车的情景。
import seaborn as sns
def showrides(df, numlines):
lats = []
lons = []
goodrows = df[df['pickup_longitude'] < -70]
for iter, row in goodrows[:numlines].iterrows():
lons.append(row['pickup_longitude'])
lons.append(row['dropoff_longitude'])
lons.append(None)
lats.append(row['pickup_latitude'])
lats.append(row['dropoff_latitude'])
lats.append(None)plt.plot(lons, lats)showrides(taxi, 10)
Figure 4
有些骑行距离很短,有些在中间距离,其中一个相当长。
票价金额
plt.figure(figsize = (14, 4))
n, bins, patches = plt.hist(taxi.fare_amount, 1000, facecolor='blue', alpha=0.75)
plt.xlabel('Fare amount')
plt.title('Histogram of fare amount')
plt.xlim(0, 200)
plt.show();
Figure 5
车费金额直方图显示大多数车费金额非常小。
taxi.groupby('fare_amount').size().nlargest(10)
Figure 6
最常见票价金额非常小,仅为 6.5 英镑和 4.5 英镑,表明它们是曼哈顿内非常短的车程。
乘客数量
taxi['passenger_count'].value_counts().plot.bar(color = 'b', edgecolor = 'k');
plt.title('Histogram of passenger counts'); plt.xlabel('Passenger counts'); plt.ylabel('Count');
Figure 7
taxi.groupby('passenger_count').size()
Figure 8
基于以上发现,我们准备去除passenger_count
> 6 的打车。
taxi = taxi.loc[taxi['passenger_count'] <= 6]
基线模型
我们要创建的第一个模型是一个基于比率计算的简单模型,不涉及机器学习。
baseline_model
Figure 9
这个基线模型让我们的测试集 RMSE 为 9.91 美元。我们期望 ML 能取得比这更好的成绩。
特征工程
- 从日期时间中提取信息(星期、月、小时、日)。出租车费在一天中的不同时段以及工作日/周末/节假日有所不同。
taxi['year'] = taxi.pickup_datetime.dt.year
taxi['month'] = taxi.pickup_datetime.dt.month
taxi['day'] = taxi.pickup_datetime.dt.day
taxi['weekday'] = taxi.pickup_datetime.dt.weekday
taxi['hour'] = taxi.pickup_datetime.dt.hour
- 从上车到下车的距离。行程越长,价格越高。
haversine_np
- 增加一栏,标明从接送坐标到 JFK 的距离。往返 JFK 的统一票价为 52 美元。
JFK_coord = (40.6413, -73.7781)pickup_JFK = haversine_np(taxi['pickup_latitude'], taxi['pickup_longitude'], JFK_coord[0], JFK_coord[1])
dropoff_JFK = haversine_np(JFK_coord[0], JFK_coord[1], taxi['dropoff_latitude'], taxi['dropoff_longitude'])taxi['JFK_distance'] = pd.concat([pickup_JFK, dropoff_JFK], axis=1).min(axis=1)del taxi['pickup_datetime']
taxi.head()
添加新要素后,我们的新数据框看起来是这样的。
Figure 10
让我们想象一个新的特征,距离
plt.figure(figsize = (14, 4))
n, bins, patches = plt.hist(taxi.distance, 1000, facecolor='blue', alpha=0.75)
plt.xlabel('distance')
plt.title('Histogram of ride distance')
plt.show();
Figure 12
taxi['distance'].describe()
Figure 13
最小距离为 0,我们将删除所有 0 距离。
taxi = taxi.loc[taxi['distance'] > 0]
我们已经为更复杂的模型做好了准备,并击败了基线模型产生的 RMSE。
线性回归模型
linear_regression
Figure 14
随机森林回归
random_forest
Figure 15
LightGBM
Figure 16
Figure 16
Keras 回归模型
keras_regression
Figure 17
今天到此为止。 Jupyter 笔记本可以在 Github 上找到。周末愉快!
文本摘要如何改变我们的教育方式
这篇文章并没有提出新的研究或创新,而是描绘了一幅我们可以用适当的技术实现的画面。
历史上,人类发现计算机是有用的,因为他们将解决问题的更繁琐的方面卸载到这些机器上。人类于是能够将他们的努力重新分配到真正需要他们的地方;到他们能产生影响的地方。白领工人已经被减少到机器还不容易自动完成的任务。
Text summarization could reduce the amount of information that humans have to intake and understand daily
作为一个物种,我们现在在不同的领域严重依赖计算机。数学、制造、定价、送货/提货物流、搜索和股票交易是让我印象深刻的主要例子。这些计算能力的应用都(至少)有一个共同点:它们都接收问题作为输入,并提供答案作为输出。
计算机解决问题有两种主要方法:找到一个已有的答案或根据输入计算出一个新的答案。
谷歌是为充满问题的人类带来答案的典型代表。它梳理了数以万亿计的网页,并做了大量有趣的处理,给你带来似乎包含当前问题答案的页面。这对于那些只需要快速找到当前问题答案的人来说是非常有用的。对于程序员来说,这也是一个有用的抽象。谷歌不是试图自己回答所有的问题(就像 WolframAlpha 所做的那样),而是试图将互联网上已经存在的问题的答案带给用户,以引起用户的注意。
这种解决问题的方法与其他一些旨在为大量变量计算最佳状态的计算领域形成了直接对比。作为一个明显的例子,股票交易机器人不需要一个关于股票市场如何运作的文章的链接,它需要计算一个对许多股票在下一个时间间隔的表现的预测。
互联网很大
正如我们之前在探讨谷歌的有用性时提到的,互联网目前估计有超过 60 万亿的页面。这比任何人希望阅读或理解的信息都要多。这证明了我们人类在掌握信息方面的成就。我们现在拥有和创造的数据比人类历史上任何时候都多。最近一次统计(2017 年 3 月),每分钟有 300 小时的视频被上传到 YouTube。每分钟,有 35 万条推文被发送(2013 年 8 月)。在美国,每年有 60 万到 100 万本书出版。这些数字既是为了吓唬你,也是为了证明信息的创造速度超过了人类的消费速度。
面对大量涌入的新数据,我们怎么可能有望保持领先呢?我们怎么可能希望继续解析这些不断增长的数据呢?我认为,答案是,如果没有新形式的技术来推动我们消费信息的能力达到更高水平,我们就做不到。我觉得我目前正处于信息灵通和信息超载之间。我不认为自己会突破目前每天 45-60 封需要我关注的邮件的水平。
我们需要新的工具来筛选出无用的信息,并为我们提供我们试图学习和理解的信息的最小化版本。
最近有趣的工具
有一些工具开始出现,它们意味着扩展人类数据消费的限制。事实证明,这是一个特别困难的问题,正从几个不同的方向着手解决。
在这个问题领域中,更有趣的攻击手段之一实际上是改变消费数据的方法。这一类别的工具不是创建数据集的摘要,或者将相关数据冒泡到顶部,而是试图通过提供范式转变来增强人类的自然消费能力。Spritz 是这种工具的一个有趣的例子。对于门外汉来说,Spritz 是一个快速阅读工具,可以帮助你以高达 1000 wpm 的速度阅读(尽管人们通常不这样做)。它围绕一个中心点排列单词,然后以您指定的任何速度快速闪烁单词。
增加人类可以接受的数据量的最明显的方法是减少人类需要接受的数据量。现已倒闭的 Summly 就是一个有趣的例子,它扫描最大的新闻来源上发布的新闻故事,将其归结为要点,并自动生成合理的内容摘要。Summly 可以为你提供一个清晰简洁的新闻故事摘要,尽管是以一种更简洁的形式。
我们真正需要的是
但是这些方法不足以满足日益增长的解析、合成和管理数据流的压力。导致 2016 年大选个性化“真相”筒仓的信息算法排序是不够的。最近的注意力似乎集中在将“有趣的”文章、网站或图像引入用户的提要上。我们需要能够从不同的来源中综合和提取有意义的信息的工具。
通过解决理解新研究的困难,蒸馏正在做出巨大的努力。这是一份旨在向大众传播机器学习突破的杂志。研究人员和作家一起工作来创建交互式可视化,这将清楚地展示最近研究的有趣部分。这是朝着正确方向迈出的一大步。我们需要重新强调在信息山上建造一条铺好的道路,我们目前正在其上建造我们的最新产业。
未来普通人可能接触到现代研究的唯一途径是通过像 Distill 这样的出版物。然而,我认为更直接的途径是通过更先进的技术工具。这些工具旨在将文章、科学出版物、书籍中最重要的部分呈现出来,而不仅仅是你可能感兴趣的部分。
我知道在文本提取和自动文本摘要领域有很多的优秀研究,但是我们需要将这项研究商品化。目前只有 17 家公司在安吉尔的内容摘要名单上。为什么我们对破坏婚礼策划感兴趣的人比对消费信息创新感兴趣的人多?我们需要建立工具来总结、提取和提炼,而不使读者远离更详细的、潜在的源材料。
教育应用
对于任何一个最近上过大学的人来说,你都知道教科书价格真的失控了,自 20 世纪 70 年代以来上涨了 1000%以上。课本冗长,难懂,枯燥。艾伦·唐尼的教科书宣言是对这一趋势的精彩批判。唐尼告诫学生和教科书编写者要愿意接受这种情况。缺乏引人入胜和简明的教科书只会增加现代信息超载的负担。从大量当前不相关的数据中解析可操作数据的行为对各方来说都是浪费。
如果我们能平息这些惊涛骇浪,代之以现代工具来探索各种细节层次的信息,会怎么样?如果我们可以依靠算法生成的最新公关丑闻的年表会怎么样?仔细阅读国情咨文的要点摘要,并快速浏览一个生成的段落摘要,看看是什么让一篇研究论文在其领域的背景下变得新颖?具有这些功能的工具将有可能改变我们对教育的看法。教育可以真正成为一生的追求,而不仅仅是我们生命中前 25%的时间。
这些技术可以很容易地用于创建任何可以想象的主题的个性化课程。你可以快速生成你选择的任何主题的解释材料、教程、工作表、测验、总结、学习指南等等。你完全可以通过自学获得博士学位。鉴于大多数专业工作的极端社会性质和你自己所拥有的研究资金的严重缺乏,这样一个学位的价值是可疑的。
软件工程在专业教育计划中是一个特例,因为你需要跟上现代技术的发展。但我认为,如果这些类型的工具被创造出来并适当地商品化,这种职业再教育的状态应该而且将会成为标准。我们的教育系统本身需要从头开始重新设计,以应对这些变化。如何监控、验证和利用持续的、递增的研究来产生影响?
互联网为我们提供了几乎免费的获取信息的途径,但是要恰当地利用它仍然存在障碍。多分辨率自动文本摘要技术可以真正拆除沿着经济和政治轴形成的人为信息壁垒。
我说的是一个我们还没有找到通往它的道路的未来,但是我鼓励我的读者去思考有能力的、算法化的文本摘要对我们现代世界的深远的、积极的影响。
大女孩如何构建机器学习产品:由产品中的女性推动的演讲(上)
Amy, Sarah, Ronnie, Carla, Elsie, and Inga @ Squarespace Inc. NYC offices
当我在纽约有一个空闲的晚上时,我做了什么?我浏览了 Eventbritte,发现这个活动由 Squarespace Inc. 主办,由女性产品组织。我知道有关于机器学习的最佳实践的书籍和文章,但是当他们建立依赖于 ML 的产品时,看到不同公司的过程和思路真的很有趣。
你可以从图片中看到与会代表的公司,但以下是发言人:艾米·金(克拉里菲)、莎拉·卡坦扎罗( Canvas Ventures )、罗尼·法尔肯(谷歌)、卡拉·科瓦尔斯基( Capital One )、埃尔西·凯尼恩( naralogics )、因加·陈(Squarespace)。组织者提供了他们每个人的简介,你可以在这里找到他们。
Pretty large audience (many are at the food & drinks bar), tickets were sold out!
这个活动的议程很简单:产品中的女性的开场和欢迎,Inga 在 Squarespace 对机器学习和深度学习的介绍(她在她之前工作的公司叫做自动化实验室也谈到了 ML),以及最后的小组讨论。
我意识到这篇文章越来越长,所以这一部分将是关于 Squarespace 的,我将在另一篇文章中包括小组讨论的要点。
注意:我没有这些幻灯片,它们是对事件的记录,我决定截图来支持文字,使其更容易理解。
ML 和 DL 如何在 Squarespace 中使用
整个事件被记录下来,包括幻灯片,可以在页面底部找到。在这一部分,我想总结一下 Inga 演讲的要点。
对于那些不知道 Squarespace 的人来说:这是一个帮助你建立华丽网站的平台,包括内容管理系统、电子商务功能、博客等。就像 Wordpress 一样,但是更好的设计和 UX。看看一些用它建造的网站的实例。(☆▽☆)
什么是人工智能(AI)、机器学习(ML) &深度学习(DL)?
“我希望我的另一半像《发现周刊》一样理解我”——这是 Inga Chen 在解释概念时说过的一句话
- 人工智能:人工智能是任何能够执行脑力任务的计算机程序。即使现在人们会想到人形机器人(Westworld 和 stuff),但其中一个典型的例子是你在象棋比赛中与之对抗的机器人。
- 机器学习:使计算机能够自我学习的程序。在 Inga 的幻灯片上,ML 的表示显示了输入(数据)是如何输入到模型(ML 模型)中的,而这个模型将提供一个输出(F-1 分数,置信水平)。经典的例子是它的应用程序来分类垃圾邮件/非垃圾邮件。
- 深度学习:常见的误解说 DL > ML,其实 DL 是 ML 的子集。它是应用人工神经网络 (ANNs)来解决需要一层以上的问题。人工神经网络是模仿人脑学习方式的算法。一个经典的例子就是图像的分类:这个图像是狗吗?图像是复杂的数据结构,为了回答这个问题,我们需要将文件分解成例如像素的层,然后其他层计算出眼睛、耳朵、爪子等的形状。在每一层中,都有一个模型(有监督的、无监督的等等)。).这就是 DL 深的原因。
在 Inga 的幻灯片上,你可以将该图与 ML 的图进行比较,ML 的图中没有一个盒子,而是有多个盒子,代表模型的各个层,输入通过这些层直到产生结果。
Machine Learning Model — Inga’s Slides
Deep Learning Model — Inga’s Slides
我喜欢 Inga 在解释深度学习时提供的例子。她谈到了亚马逊 Echo 上安装的语音识别程序 Alexa 。它是用来做什么的?嗯,在家开灯/关灯。对于 Alexa 来说,要理解并执行一个看似简单的命令*“Alexa,开灯”*,至少有两个 DL 模型:一个用于将语音转换为文本,另一个用于将文本转换为任务。就像图像一样,声音也是复杂的数据结构。显然,Alexa Echo 至少安装了 6 个麦克风。ヽ( 〇 )ノ
为什么 ML & DL 对 Squarespace 很重要?
看了一些例子后,你可以想象他们的客户提供了多少内容:从文本到很多很多图片,甚至视频。Squarespace 之所以有一个(强大的)人工智能团队,是因为他们希望利用它为每个用户提供定制化的体验。面对如此庞大的数据量和复杂性,手动处理和得出结论是不可行的。
Squarespace 的 ML & DL 开发流程
如果你看着这个图表,并且是一个从业者,它可能看起来没什么特别的。尽管如此,我认为令人欣慰的是,我们在学校或学术界学到的东西并不都适用于这种情况,但现实世界中的公司实际上都在遵循类似的最佳实践。
Product Development Cycle Slide by Squarespace Inc.
Inga 确实强调了评估是否需要 ML 或解决问题/满足需求的最佳工具的必要性。这是学习阶段,问自己这样一个问题:你试图达到的目标是否符合 ML 问题。同样的问题可以用其他方法解决吗?如果是的话,这些方法在任何方面都比 ML 好吗?考虑到 ML,DL & AI 都是热门话题,到处都在用流行语,我觉得这些问题真的很重要。很高兴看到公司采用它们,但有时它被用在不该用的地方,想想这些项目的成本会有多高。
下一个关键点是数据收集和准备,这通常是最耗时的步骤,尤其是在开始阶段。其他公司也提到了拥有适当的数据管道以尽可能减少此阶段花费的时间是多么重要。
拥有一个好的数据管道不仅对你的产品的第一次迭代很重要,对实现一个有效的反馈循环也很重要。这就是最后一步收集更多的数据,重建和改善所指的。收集更多的数据并不意味着增加观察,也要给你的用户(可能是你最好的数据源)提供反馈的机会。
这是第一部分,一旦我有更多的时间,我会写第二部分。敬请关注❤
Slideshow with Voice of the Whole Event
大女孩如何构建机器学习产品(下)
你的公司或者你的团队是否在考虑利用机器学习来构建令人敬畏的产品?在第二部分*中,为了快速阅读,我在活动最后的小组讨论中总结了构建 ML 产品的最佳实践和技巧。
如果你不同意某些东西或者你想分享你的经验,请对这篇文章发表评论 o(>ω
*If you’re looking for part one, here’s the link: 大女孩如何构建机器学习产品:由产品中的女性驱动的演讲(第一部分)
你在应用 ML 时有什么问题、恐惧或挑战?
- 一位小组成员发现管理 ML 团队很有挑战性(如果您有类似的经历,请评论?).
- 数据管理和处理:如何更新你的模型,加班加点,建立一个管道移动得更快?(通常,数据管理和预处理需要数据科学家大约 80%的时间)。
- 应用程序方面,由于 ML 的存在,构建的应用程序为用户带来了真正的价值。
- 缺乏部署和维护 ML 模型和产品的基础设施。
所有这些炒作是怎么回事?如何将一个问题归类为适合机器学习?
简而言之,ML 并不是万能的银弹(闪亮的技术现象),有以下专家组提到的考虑因素。
首先从的关键问题开始:
- 你有数据吗?你获得它有多容易?它的容量、速度、多样性和准确性如何?如果没有数据,就不能用 ML。
- **能否成为你产品的竞争优势?**有市场需求吗?你是在用 AI 和 ML 解决一个用其他方法解决不了的问题吗?只有当它能提供很多时,才应该使用它。确保你处理的是正确的问题,要有背景。专注于你想要完成的事情
- 如果有,**你买得起吗?**由于服务器、GPU、维护、数据科学家、经验等原因,建立一个模型非常昂贵。
- **您的产品出错有多好?**你对假阳性和假阴性的接受程度或容忍度如何?考虑到 ML 模型不太稳定。因此,组织和清理数据是至关重要的任务。
如果以上都是肯定的,那么转到如何充分利用 ML 的技巧:你将需要反馈机制,这样你就可以随时纠正数据。有效地组织和清理数据将是关键,但在你的系统中整合反馈回路也同样重要。让你的模型不断发展变化是至关重要的。
分享构建 ML 产品的故事和经验
抱歉,只写了一个有趣的故事。一位小组成员分享了她的一个朋友制作的产品。这是一个会检查他的宝宝是否醒着的模型(宝宝醒着。・゚゚*(>д
Importance of users’ trust
When building ML products, it’s important to think of what’s the users’ perspective of the technology. You don’t want to create magic or creepy technology.
- 了解你的用户:小边缘情况,被冒犯的用户可能永远不会回来。您的系统必须准备好检测这种情况,并从中吸取教训。一个很好的例子是亚马逊,通过简单地改变措辞来解决这一风险:在他们建议的商品中使用“人们也购买… ”,而不是“我们也推荐… ”。降低用户对推荐系统失去信任的风险,因为当推荐系统出错时,用户会将其归咎于其他用户。
- 重新考虑你的设计:考虑那些可以把黑盒变成用户可以理解的有形概念的设计原则
- 创建界面,让人们觉得获得自己的定制体验是他们的责任。他们必须知道,他们需要参与进来,以获得定制的体验,他们对自己的体验负责。例如:“如果我有几周时间(Spotify weekly),而他们不在我的区域内……”该客户可能会失去对该功能的信任。
开发流程提示
- 获得管理层和高管的支持:当你正在构建的产品使用了 ML,并且它对它所创造的价值至关重要时,确保你获得了高管(层级组织)或领导的支持。这些项目是昂贵的,但是当上述问题得到回答时,在非 ML 专家之间传播理解是同样重要的。
- 数据策略&团队:经理或策略师可能会提供很好的输入来建立数据策略。
- 下面是 Clarifai 的 DS '部门的样子:数据策略团队处理处理,清理数据,抓取,清理数据;应用机器学习团队,全是数据科学家;和 ML 工程师一起工作,在技术栈中进行研究、扩展和计算新的算法。重要的是,applied ML 团队不仅提供训练模型所需的数据,还开发产品并将其交付给客户。该模型集成了来自客户的反馈系统。
未来:景观是如何变化的?你想怎么换?
- 罗尼:将会有更多的资金,更多现成的技术和强大的计算能力。在法律方面,政策和洗钱之间的动态关系,我们需要在监管和不降低进步能力之间找到良好的平衡。
- 埃尔希:我们将从这个过程中学习,ML 可能会失败很多次,但我们将在管理层中传播数据责任。
- 艾米 : " 机器人?"。进入的障碍变得越来越无摩擦,创建和构建、部署您的模型的摩擦越来越少。一切都将有一个 ML 组件。我们将了解如何解释数据,并为更多用户创造更多价值。
通过多样性减少偏见
讨论以一个关于偏见的关键观点结束,这是实习者的一个普遍问题/错误,几乎无法避免。然而,我们可以通过多样性来减少偏见:性别、种族、年龄等。偏见越少,你的产品越好。提到的有偏见模式的例子是“母乳喂养被贴上工作不安全的标签”。就像“潜意识偏见”存在于人的大脑中一样,当它发生在 ML 模型上时,具有可比性。
抱歉发了这么长的帖子。感谢你阅读❤
【当前】最佳问答模式是如何运作的?
最近对深度学习如何解决问答问题产生了兴趣。
给定一篇文章和一个问题,任务是根据文章中的信息预测问题的答案。这被证明是一项相当复杂的任务,尤其是在处理大量文本的情况下。经过相当广泛的研究,我发现几个月前(2017 年 5 月),微软亚洲研究院的科学家发布了最新和最准确的模型,旨在解决这个问题。迄今为止,他们的模型在斯坦福问答数据集上保持着最高的结果——用于评估任何问答系统。
在这篇文章中,我将尝试一步一步地解释他们的模型,称为 R-NET 。
首先,让我们从实现的概述开始。它由 4 个阶段组成,每个阶段解决一个特定的问题:
- 分别为文章和问题建立表征。
- 将问题信息整合到文章中。
- 通过直接将其与自身进行匹配来获得该段落的最终表示。
- 预测答案的起止位置。
边注:上述步骤使用具有 GRU 细胞(门控循环单元)的循环神经网络。如果你不熟悉,我推荐看 我的解释 。
#1.为问题和文章建立表征
为了做到这一点,作者使用了一些基本的技术,我将在下面的步骤中解释。为了清楚起见,m 表示问题中的字数,n 表示文章中的字数。
- 对问题和段落分别执行单词级嵌入产生矩阵:
其中第一个是 Q 问题矩阵,第二个是 P 访问矩阵。
- 对问题和段落分别执行字符级嵌入会产生矩阵:
其中第一个是 Q 问题矩阵,第二个是 P 访问矩阵。作者声称字符级嵌入有助于词汇外标记。这里有一个很好的定义:
该模型(使用字符级嵌入)逐个读取字符,以创建给定句子/文本的嵌入。因此,我们的神经网络将试图学习由空格或其他标点符号分隔的特定字母序列组成的单词。— 人物级深度学习。
- 将单词和每个单词的字符嵌入连接到一个新的向量中,我们得到:
其中第一个是 Q 问题连接,第二个是 P 消息连接。
- 最后,作者使用两个具有 GRU 细胞的双向递归神经网络来获得最终结果:
BiRNN — bidirectional recurrent neural network
#2.把这个问题添加到文章中
使用上面的问题和段落表示,该模型将来自问题的信息合并到段落中。这产生了一个新的矢量:
先解释一下 k_t 是什么*。基本上,这个向量保存问题和当前段落单词的数据。其计算方法如下:*
- 使用不同的权重(标记为 W )我们计算:
(s_j)^t 表示来自矩阵 s^t 的单个向量)。向量从单个疑问词— (u_j)^Q 、当前段落词— (u_t)^P 和前一状态— (v_(t-1))^P. 中提取信息
在应用了 tanh 激活函数和附加权重向量 V 后,(s_j)^t 变成:
边注:V^T 表示 v 的转置向量—如果 v =[1;2;3]的大小是 3x1,那么 V^T = [1,2,3]的大小是 1x3。
- 然后模型计算矩阵 s^t.的 softmax 函数考虑单行,我们有:
- 将上述等式组合成:
产生整个问题的注意力集中向量*lt*uq.
- 最后,作者又增加了两个计算。他们计算矢量 g^t:
它使用激活函数 sigmoid ,一组独特的权重 W_g 和 (u_t)^P 和 l_t 的串联。
最后一个等式使用对 g_t 的逐元素乘法和对 (u_t)^P 和 l_t: 的相同串联来获得 k_t
本质上,这些最后的步骤是基于当前的段落单词和问题的注意力集中向量。关注它们的关系旨在模拟这样一个事实,即只有部分段落与问题回答中的问题相关。
#3.将这篇文章和它自己配对
作者已经注意到了如上所述的问题意识段落表征的问题。基本上,这个模型对上下文的了解非常有限。一个答案候选人经常没有意识到其周围窗口之外的段落中的重要信息。
由于文章上下文对预测答案至关重要,模型需要使用与第二步类似的等式,将有问题意识的文章与其自身进行匹配。
- 自匹配后当前段落单词的结果向量是:
如你所见,它的获得方式与 (v_t)^P )完全相同,唯一的区别在于 k_t 的计算。
我们不使用当前的文章单词和问题,而是取问题意识文章 v^P 和它的当前单词 (v_t)^P:
所有其他的等式都遵循第二个等式的相同模式,使用问题意识段落表征 v^P:
#4.预测答案
为了预测答案,作者使用所谓的指针神经网络 —从文章中输出答案的开始和结束单词的索引的递归神经网络。数学插图看起来像这样:
其中 h^P 是步骤#3 中自匹配产生的问题感知段落, (h_(t-1))^a 是指针 RNN 的前一状态, p^t 是函数argmax应用于当前 a^t 向量的结果。因为我们只需要 2 个索引,所以网络只由 2 个 GRU 单元构成,只产生 p 和 p (开始和结束索引)。
让我们看一下整个流程:
- 首先我们有:
本质上,上面的等式计算了面对 r^Q 的 RNN 的初始隐藏状态。这里我们使用问题表示 u^Q 和一个参数 (V_r)^Q )。
最终结果 r^Q 可以看做是 RNN 中的 (h_0)^a (隐藏状态)。
- 使用 (h_0)^a (= r^Q )和问题意识段落,我们计算答案起始词的索引如下:
- 然后我们产生第一个隐藏状态,它需要传递给 RNN 中的下一个 GRU 单元:
- 使用对 p 重复上述步骤(h_1)^a 隐藏状态给我们提供了答案结尾词的索引:
最后的想法
我希望 R-NET 模型的演示足够全面,以便您能够掌握基本原理并更好地理解该模型。在撰写本文时,这款车型因在斯坦福问答数据集上的最佳表现而在排行榜中排名第一。
我很高兴在评论区听到你的问题和想法。
谢谢你的阅读。如果你喜欢这篇文章,给它一些掌声👏。希望你有一个伟大的一天!
第一次世界大战中的法国军队如何教会你管理一个更好的分析团队
100 年前的这个月,WW1 结束了。一场长达四年的血腥战争改变了我们的生活方式。正如历史上许多伟大的斗争一样,创新往往会发展得非常快,WW1 也不例外。结果,许多新的想法被付诸实践,因为每个竞争者都试图超越对方。坦克就是从第一次世界大战中发展起来的这样一种发明。我们最常想到的是英国人和他们的坦克,或者是庞大的德国陆地战舰。然而,我们今天仍然可以把一些创新归功于法国人。正是这些创新可以为当今的分析、大数据和数据科学团队提供借鉴。
1915 年,法国人着手建造他们自己的坦克,因为他们认为这将是打破西线僵局的一个好方法。他们第一次制造坦克非常昂贵,第一个模型预计 100 辆坦克要花费 700 万法郎,这在当时是一大笔钱。第一批坦克必须争夺资源。法国工业生产其他武器已经达到极限,为了制造坦克,必须进口钢板。最终,一辆 60 马力的坦克诞生了,它可以在平坦的地面上行驶 7 公里,在崎岖的地面上行驶一半的距离。这种装甲的厚度仅够阻挡小型武器的火力,但不能被大炮击中。这些坦克也是死亡陷阱,因为它们不是为机组人员的安全而设计的,发动机放在前面,这是大多数撞击发生的地方。换句话说,这些坦克并不完美。有点像第一批大数据和数据科学团队。
那些早期的团队很有趣,我享受我拥有的时间,然而我们所创造的还有很多需要改进的地方。我们有粗略的想法和理想主义,但让数据科学和大数据作为业务单位为组织服务的能力仍然是一条出路。许多人认为这些新学科会取代其他一切,有时当我访问一家公司时,他们仍然会有这些想法。但我们知道这是不正确的,我们在这些新的分析领域的初步尝试需要改进。公司对结果感到失望;团队领导对缺乏资源感到沮丧,团队成员经常与真正的期望脱节。需要一些新的不同的东西。
1916 年春天,法国人意识到他们的第一批坦克需要改进,有人想出了一个好主意,让我们把它做得更大!设想新坦克有 9 名乘员,更大的炮,更多的炮!见鬼,甚至连火焰喷射器都被设计出来放在坦克上。它最终被称为圣肖蒙德坦克,如果你玩过战地 1,你可能会很熟悉它。它更大更重,但是它的履带和一年前制造的第一辆坦克一样大。众所周知,这意味着履带上的重量更大,这意味着它更容易陷入泥中。
随着分析的发展,在过去几年中,我们看到数据科学团队和大数据团队也出现了这种情况。他们把失败视为成长的一种方式。我们需要更多的人、更快的系统、更大的系统!我们需要一个高管席位。首席数据官或首席分析官的重要性越来越大。但失败仍然是常态,主要是因为就像 1916 年法国的新坦克一样,如何使分析工作的基础没有随着时代而改变。从 2016 年到现在,公司看到了一些小的成功,但没有什么真正大的规模。当然,这里或那里有一些小的成功,但是能够横向扩展并以创建快速扩展的方式使用数据仍然是许多人的梦想。法国人在 1916 年的内维尔战役中引进了坦克,并且看到了整体上的巨大失败。然而,他们看到个别坦克表现出色,并利用这些知识来改变他们的坦克战略和使用方法。坦克被用作冲击武器,与步兵一起碾压,帮助清除敌军。这不起作用,太多的坦克被摧毁,士兵被杀。
法国人从头开始,意识到坦克的主要杀手是火炮。所以这意味着摧毁火炮是首要任务。因为摧毁炮兵是首要任务,这意味着你需要知道他们在哪里。这意味着你需要以航空摄影的形式进行空中侦察。为了使空中摄影成为可能,你需要拥有当地的空中优势。一旦他们拥有了空中优势,他们就需要高度集中自己的火炮来压制敌人的火炮。一旦炮击发生,坦克需要知道他们在最好的地面上的路线,在前进中,用烟幕弹来帮助他们尽可能接近敌人的阵地,以帮助最大限度地减少炮兵干掉太多坦克。他们需要与步兵更好的沟通,这意味着与军队其他部门的新的沟通方法。最后,坦克将用于有限的交战和有限的目标。
当法国人使用他们新的交战方式时,他们非常成功地达到了他们的目标。在他们的第一次交战中,许多坦克坏了,这在当时是很常见的。但是坦克在突破防线或者转移步兵的注意力方面起到了至关重要的作用,使得步兵能够到达他们的目标。
像法国人一样,许多公司需要思考他们如何使用数据,并真正摆脱他们团队的孤立方法。团队通常被创建为公司中的一个新的筒仓,与公司中的其他人没有什么关系。法国人意识到这是一场灾难,他们改变了他们的方法,采取了更加综合的方法。大多数数据团队也需要这样做,并花时间与他们组织的各个接触点进行沟通。因为就像法国人 100 年前学到的那样,你可以拥有新的技术和伟大的技术,但如果你不能与你组织的其他人交流,这些技术就是一种浪费。
但是法国人并没有就此止步。他们有重型坦克,他们决定需要轻型坦克。有两个乘员的坦克,一个旋转炮塔,这在当时是新的。这种坦克也轻得多,只有 4 吨重,行驶速度是当时任何一种坦克的两倍。此外,这种坦克很容易生产。金融时报是大多数人所说的这些坦克。从 1918 年 6 月开始,它们很容易部署,法国生产了 2000 多辆这种坦克,比其他坦克加起来还多。事实上,英国《金融时报》通常被称为赢得战争的坦克。法国的联合部队理论并没有随着英国《金融时报》而改变,事实上,他们能够用这些坦克更快地占领更多的土地,比敌人可能希望恢复的速度更快,因为坦克的速度使得重新集结以进行可能的反击变得困难。直到今天,FT 的设计也经常被称为所有坦克的模板。两条轨道的基本设计,一个带枪的移动炮塔,100 年后本质上是一样的。
数据团队需要找到他们的 FT。现在,我们真的没有一个,因为大多数公司还没有就他们的联合力量战略进行对话,以创建 FT 场景,这将使他们有能力与竞争对手竞争。因此,数据科学和大数据仍然是阵地战式的努力。第一次世界大战 100 年后,我们可以从当时人们的经历中吸取教训,并将其应用于当前的形势。法国坦克使用的演变可以教会我们团队融合的重要性,以及为解决实际问题而创新的重要性,而不仅仅是为了创新本身。如果数据团队希望生存下去,他们今天需要学习的东西。因为堑壕战对战壕里的士兵或他们各自的国家从来都不是好事。
我要感谢 youtube 频道《伟大的战争》,这是我获得关于法国军队研究信息的地方。我强烈建议去看看他们的频道。
古老的排序算法如何帮助伟大的机器学习技术
在本文中,我们展示了简单排序算法如何成为解决计算几何中一个重要问题的核心,以及它如何与广泛使用的机器学习技术相关联。
机器学习正迅速成为现代社会中最重要的计算技术之一。作为人工智能(AI)的一个分支,它正被应用于从自然语言翻译和处理(想想 Siri 或 Alexa)到医学、自动驾驶或商业战略发展的方方面面。一系列令人眼花缭乱的智能算法正在不断开发,以解决 ML 问题,从数据流中学习模式,并建立人工智能基础设施。
然而,有时后退一步,分析一些基本算法如何在这场革命中发挥作用,并欣赏它们的影响,感觉会很好。在本文中,我将举例说明这样一个重要的案例。
支持向量机
支持向量机或 SVM 简而言之,是过去几十年发展起来的最重要的机器学习技术之一。给定一组训练样本,每个样本被标记为属于两个类别中的一个或另一个,SVM 训练算法建立一个模型,将新样本分配给一个类别或另一个类别,使其成为非概率 二元 线性分类器。它广泛应用于工业系统、文本分类、模式识别、生物 ML 应用等。
下图说明了这个想法。主要目标是将二维平面中的点分为两类——红色或蓝色。这可以通过在两组点之间创建分类器边界(通过运行分类算法并从标记数据中学习)来完成。图中显示了一些可能的分类器。它们都将正确地对数据点进行分类,但是并非所有的数据点都与最接近边界的数据点集具有相同的“余量”(即距离)。可以看出,它们中只有一个最大化了蓝点和红点集合之间的这个“T4”裕度。该唯一分类器用实线表示,而其他分类器用虚线表示。这种间隔最大化的效用在于 两个类之间的距离越大,对于一个新点的分类的泛化误差就越低。
FIG 1: SVM and Maximum-margin classifier
SVM 算法的主要区别特征是 分类器不依赖于所有的数据点 (不像逻辑回归,其中每个数据点的特征将用于分类器边界函数的构建)。事实上, SVM 分类器依赖于数据点的一个非常小的子集,那些最靠近边界 的数据点以及它们在超平面中的位置会影响分类器边界线。由这些点形成的向量唯一地定义了分类器函数,并且它们’支持分类器,因此被命名为’支持向量机’。这个概念如下图所示。
阅读更多关于支持向量机的白痴指南。一个关于 SVM 的视频教程可以在这里找到。
SVM 工作原理的几何解释:凸包
SVM 算法背后的形式数学相当复杂,但通过考虑一种叫做凸包的特殊几何构造,可以直观地理解它。
什么是凸包 ?形式上,欧氏平面或欧氏空间中的点集 X 的凸包或凸包络或凸闭包是包含 X 的最小凸集。然而,使用橡皮筋类比最容易形象化。想象一根橡皮筋绕着一组钉子(我们的兴趣点)的圆周伸展。如果橡皮筋被释放,它会缠绕在挂钩上,形成一个紧密的边界来定义原来的设置。最终的形状是凸包,并且可以通过接触橡皮筋创建的边界的钉的子集来描述。这个想法如下所示。
现在,很容易想象 SVM 分类器只不过是一个线性分隔符,它将连接这些凸包的线正好在中点处一分为二。
因此,确定 SVM 分类器简化为寻找一组点的凸包的问题。
如何确定凸包?
图片(动画的)说一千个字!因此,让我展示用于确定一组点的凸包的算法。它叫做格雷厄姆扫描。该算法找到沿着其边界排序的凸包的所有顶点。它使用一个堆栈来有效地检测和移除边界中的凹陷。
FIG: Graham’s scan to find convex hull.
现在,问题是这种算法的效率如何,也就是说,格雷厄姆的扫描方法的时间复杂度是多少?
事实证明,Graham 的扫描 的时间复杂度取决于底层排序算法 ,它需要使用该算法来找到构成凸包的正确点集。但是排序是从什么开始的呢?
这种扫描技术的基本思想来自凸包的两个特性,
- 可以通过逆时针旋转穿过凸包
- 凸包的顶点相对于 y 坐标最低的点 p 以极角
递增的顺序出现在中。
首先,这些点存储在一个数组points
中。因此,算法从定位参考点开始。这是具有最低 y 坐标的点(如果出现平局,我们通过选择具有最低 y 坐标和最低 x 坐标的点来打破平局)。一旦我们定位了参考点,我们通过使它与数组中的第一个点交换位置,将该点移动到points
的开头。
FIG: A stack data structure
接下来, 我们根据剩余点相对于参考点 的极角对其进行排序。排序后,相对于参考点极角最小的点将位于数组的开头,极角最大的点将位于末尾。
正确排序这些点后,我们现在可以运行算法中的主循环。这个循环使用了第二个列表,当我们处理主数组中的点时,这个列表会增长和收缩。基本上,我们将逆时针旋转出现的点推到堆栈上,如果旋转变为顺时针则拒绝点(从堆栈中弹出)。第二个列表开始时是空的。在算法结束时,构成凸边界的点将出现在列表中。一个堆栈数据结构用于此目的。
伪代码
# *Three points are a counter-clockwise turn if ccw > 0, clockwise if*
# *ccw < 0, and colinear if ccw = 0 because ccw is a determinant that #gives twice the signed area of the triangle formed by p1, p2, and #p3.***function** ccw(p1, p2, p3):
**return** (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x)**let** N **be** number of points
**let** points[N] **be** the array of points
**swap** points[0] with the point with the lowest y-coordinate***# This is the most time-consuming step*
sort** points by polar angle with points[0]**let** stack = NULL
**push** points[0] **to** stack
**push** points[1] **to** stack
**push** points[2] **to** stack
**for** i = 3 **to** N:
**while** **ccw**(next_to_top(stack), top(stack), points[i]) <= 0:
**pop** stack
**push** points[i] **to** stack
**end**
所以,格雷厄姆扫描的时间复杂度取决于排序算法的效率。可以使用任何通用排序技术,但是使用***【o(n^2】***和 O(n.log(n)) 算法之间有很大的区别(如下图所示)。
FIG: Animations of various sort algorithms
摘要
在本文中,我们展示了简单排序算法如何成为解决计算几何中一个重要问题的核心,以及它如何与广泛使用的机器学习技术相关联。尽管有许多基于离散优化的算法来解决 SVM 问题,但这种方法展示了在核心处使用基本有效的算法来构建人工智能复杂学习模型的重要性**。**
如果您有任何问题或想法要分享,请联系作者在tirthajyoti【AT】Gmail . com。此外,您可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。如果你像我一样对机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
关键词:#机器学习,#支持向量机,#算法,#人工智能,#计算几何
如何使用 Python API 访问 Google 工作表数据并转换成 Pandas dataframe
对于我从事的许多数据科学/可视化项目来说,建立一个 SQL 数据库(或类似的东西)是多余的。另一方面,使用本地 Excel 文件会增加共享和复制的难度。Google Sheets 通常是一个很好的中间地带,它提供了一个易于使用的协作平台,有一个熟悉的类似 Excel 的界面。
使用 OAuth 和 Google Python API 访问 Google 工作表数据是一个简单的过程,这要感谢(通常)优秀的 Google 文档。首先,我们需要在 Google Drive 帐户上设置 OAuth 凭证,以便访问工作表。
接下来,我们需要为 Python 安装 Google API 客户端库。我们可以在(理想情况下,在激活的 Python 虚拟环境中)使用 pip 来实现这一点。
显然,在关于访问 Google 工作表数据的教程中,您将需要一个工作表来使用——我将使用我的“火山酒”工作表(基于史密森尼博物馆提供的令人惊叹的火山活动数据)。在接下来的步骤中,您将需要工作表 ID(可以从 URL 获得),然后是工作表的名称。
Get the spreadsheet ID from the Google Docs URL
Get the Google Sheet name of interest
现在,创建一个新的 Python 脚本来检索数据(确保‘client _ secret . JSON’文件保存在与脚本相同的工作目录中,或者提供一个显式路径)。用电子表格的相关值更新下面代码中的电子表格 ID 和工作表名称。
Final Python code for accessing Google sheet data and converting to Pandas dataframe
运行该脚本,您应该得到作为 dataframe 返回的工作表数据——请继续关注即将推出的一组教程,这些教程将使用这些火山酒数据来完成 Plotly Dash web 应用程序的创建和部署!
Final Pandas dataframe returned from Google Sheet
如何用机器学习赢得陌生来电
打还是不打?
陌生来电:“你好卢克,今天过得怎么样?我注意到您正在办理汽车保险续保,我想知道您是否有几分钟时间听听我为奖励您的忠诚而向您提供的这个令人惊叹的优惠?”
如果你是卢克,你会怎么做?
这实际上很难讲,这就是为什么冷电话的成功率极低,需要成千上万次电话才能带来任何价值。由于所涉及的随机性,它们对于所涉及的任何一方来说都不是真正令人愉快的。然而,有了机器学习和足够的数据,就有可能了解成功电话背后的因素,然后可以用来更好地确定潜在客户并定制电话内容。
在本文中,我们将使用自动化数据科学团队 AuDaS 建立一个机器学习模型,用于预测汽车保险电话推销的成功。数据由慕尼黑技术大学提供,由 Kaggle 托管。
数据探索
该数据集是从美国的一家银行收集的,该银行也提供汽车保险,并包含其客户的信息。因此,我们的目标是建立一个能够预测客户是否会购买汽车保险的模型。下表提供了此信息的快速概述:
为了理解推动转化的特征,我们可以试着想象一下陌生电话的持续时间如何影响结果。首先,我们需要通过添加 datediff 操作,通过 AuDaS 的数据准备页面来创建该特性。
Data Preparation in AuDaS
然后,我们可以访问直方图视图来了解可能的关系。
Histogram view in AuDaS
令人惊讶的是,虽然通话时长确实增加了转化的几率(CarInsurance = 1),但似乎并没有明确的关系。打电话的时间似乎也不会影响结果。
Distribution of successful conversions across all the features
总的来说,我们的数据集中似乎确实存在模式,这就是为什么我们可以希望 AuDaS 将找到一个性能良好的机器学习模型!
自动化建模
我们的目标是建立一个分类管道来预测客户是否会购买汽车保险。但是,我们需要能够在生产中使用这种模式,这就是为什么我们将排除通话持续时间和通话结束时间戳,因为这是我们在通话前无法预料的信息!
对于模型训练,AuDaS 将执行 10 重交叉验证,并将保留原始数据的 10%平衡样本用于最终验证。AuDaS 还将使用 OPTaaS 、 Mind Foundry 的专有贝叶斯优化器来有效地导航可能的数据科学管道空间。
AuDaS 提供了最佳数据科学管道(模型、参数值等)的完全透明性以及得分指标。
Score metrics of the best found model
一旦运行完成,我们就可以查看模型在 10%保持率上的性能,并且我们放心地看到分类准确性相当好(72.4%)并且模型健康状况良好!
AuDaS Model Health Diagnostic
解释模型
我们的模型的特征相关性表明,客户银行账户的年平均余额似乎对他们是否购买汽车保险有最大的影响,其次是他们的年龄和电话推销的时间。
AuDaS feature relevance
换句话说,如果卢克 40 岁,账户上有很高的余额,他很有可能接受陌生来电者的提议!
然后,这个模型可以由 AuDaS 通过 RESTful API 自动投入生产。
这意味着,陌生来电者可以使用 AuDaS 训练的机器学习模型来优先考虑他们应该致电的客户,这将帮助他们提高营销活动的成功。不幸的是,这个数据集没有提供足够的见解来定制这些电话的内容,但我们可以想象,分析抄本可能会让我们确定一些有趣的建议!
AuDaS 完成这项任务的完整视频可以在下面查看。如果你想尝试澳币,请不要犹豫,通过电子邮件或 LinkedIn 联系我们。
奥达斯
AuDaS 是由 Mind Foundry 开发的自动化数据科学平台,为构建端到端的机器学习解决方案(分类、回归、聚类和 soon 时间序列)提供了一个强大的框架。该框架有助于识别数据泄漏并采取行动,以免为时过晚。你可以在这里和这里阅读一些其他的实际用例。
注册尝试 AuDaS:
更新:我开了一家科技公司。你可以在这里找到更多
团队和资源
Mind Foundry 是牛津大学的一个分支机构,由斯蒂芬·罗伯茨(Stephen Roberts)和迈克尔·奥斯本(Michael Osborne)教授创建,他们在数据分析领域已经工作了 35 年。Mind Foundry 团队由 30 多名世界级的机器学习研究人员和精英软件工程师组成,其中许多人曾是牛津大学的博士后。此外,Mind Foundry 通过其分拆地位,拥有超过 30 名牛津大学机器学习博士的特权。Mind Foundry 是牛津大学的投资组合公司,其投资者包括牛津科学创新、牛津技术与创新基金、牛津大学创新基金和 Parkwalk Advisors 。
如何赢得数据科学面试:R & Python
这是正在进行的数据科学职位面试系列的一部分。你可以看看第一部分,这里涵盖了 SQL、和第二部分,这里涵盖了统计、*。***
数据科学家的日常工作很大一部分涉及在交互式编程环境中操纵、分析和可视化数据。在过去的几年中,两种语言已经成为这些任务的标准选择: R 和 Python 。每个人都有自己的优点和缺点,最终你可能会从了解这两者中受益,但对于面试来说,最好的策略是选择一个,并真正学好它。无论你选择哪种语言,我都会帮你搞定:在这篇文章中,我将介绍每种语言的基础知识,这样你就可以放心地参加面试,准备好白板演示了。
选择一种语言
正如我上面提到的,我能给你的最好的建议是不要因为试图学习所有的东西而分散你的精力。我参加的每一次数据科学面试,无论是作为面试官还是被面试者,都允许应聘者用两种语言中的任何一种来解决问题。所以最终学习任何一种都是完全没问题的。以下是如何做出选择的一些通用指南。
Python 是一种多用途、全功能的编程语言(从技术上来说,R 也是,不过我们一会儿就会谈到这一点)。它的设计目的是实现与 C 和 Java 等其他编程语言相同的功能。但是与 C 不同,Python 有很多现代的便利,比如自动内存管理和动态类型化 T21。在我看来,Python 在数据科学方面的优势在于它能够作为生产系统的真正后端语言,这意味着你作为数据科学家所做的任何建模都可以在一个真实的网站或软件产品上轻松实现。换句话说,如果你的主要兴趣是编写或原型化生产代码,我会选择 Python。
另一方面,r 感觉更像一种分析语言。虽然 R 支持所有标准的 CS 数据结构和技术,如数组和 for 循环,但当您处理矩形数据集时,就像您在典型的电子表格程序中看到的那样,它确实表现出色。与电子表格不同的是,你仍然可以利用计算机科学的概念,比如迭代和抽象(下面将详细介绍),这使得它比 Excel 等工具强大几个数量级。此外,R 是学术界定量研究人员的事实上的语言,这意味着最前沿的统计技术通常在它们进入任何其他地方(包括 Python)之前很久就以 R 包的形式提供了。因此,如果您的主要工作流涉及进行离线分析和数据可视化,尤其是如果您想要访问最先进的统计软件包,R 就是您想要的地方。
但是,同样,你不能真的出错——两者都非常有用,而且有可能你可以让任何一种语言完成你试图完成的任何数据科学任务。
选择一个环境
一旦你选择了一种语言,帮你自己一个忙,熟悉这种语言的最佳交互环境。在组织和保存代码、可视化数据以及管理包方面,这将使您的生活变得更加轻松。
在 R 你想去下载免费版本的 RStudio。与使用命令行或其他 IDE 相比,使用 RStudio 进行数据分析要容易得多,这一点我实在说不出什么好的。它管理软件包,提供对帮助文件的访问,显示可视化,并为您提供一个漂亮的、可定制的文本编辑器以及您的控制台。整个环境被组织成一个四窗格的格式,因此您可以一次查看所有内容。
对于 Python,请前往 Jupyter ,用他们的笔记本进行设置。这是一个与 RStudio 非常不同的环境,但同样有用。Jupyter 没有提供本地 IDE,而是提供了一个基于浏览器的笔记本,可以让你将代码分成可执行的块,这样你就可以一次运行一段代码并进行分析。输出内联显示在生成它的代码的正下方,因此很清楚哪个输出来自哪个分析。此外,由于 Jupyter 笔记本是基于浏览器的,因此很容易与他人分享,使您的所有工作更具可重复性。
编程基础
无论你选择哪种语言,你都需要了解编程的基础——数据类型和结构、迭代和抽象。有可能,但不太可能,你会直接得到关于这些概念的问题,因为通常这种类型的东西是留给软件工程面试的。但是,您肯定需要熟悉这些概念,以解决您在典型的数据科学面试中可能会遇到的任何白板或带回家的挑战。
数据类型 只是描述被存储信息类型的一种方式。在 Python 中,选项是数字,可以是整数、长整数或浮点数;一个布尔值,一个二进制的真或假;和一个字符串,它是字符的组合。在 R 中,所有这些相同的类型都存在于添加了因子的情况下:一个有序的变量,其级别由不同的字符串表示。
就不同的数据类型如何存储和编码而言,这个话题很有深度,但一般来说,面试时你不需要知道这些东西。请注意,任何给定的数据单元都需要属于这些类型之一,这些类型将决定您能够对数据执行什么操作。例如,你可以将两个数值变量相乘,但是当然你不能对两个字符串做同样的事情。
****数据结构是将每个原子数据块(如数字或字符串)组合成一个对象的方法。Python 有列表(在其他语言中通常称为数组)和元组,这两者都是数据的有序集合。它还有一个称为集合的东西,这是一个没有重复的无序变量集合。最后,Python 有字典,它代表了键值对的有序集合。r 有向量(类似于 Python 列表,除了所有元素需要共享一个类型)、列表、矩阵和数据框。
****迭代是计算机科学中的一个重要概念,它与数据结构紧密相连——本质上是对数据结构中的每一项执行操作的一种方式。这里的两大类别是向量化操作和循环。矢量化函数只是将单个函数应用于数据结构的每个元素并返回一个元素的一种方式。
例如,您可以获取一个包含五个不同数字的列表或向量,并返回一个包含每个数字的平方根的新向量。另一方面,循环允许您编写代码块,为给定结构中的每一项执行该代码块。这通常比较慢,但是稍微灵活一些,因为您可以执行任意代码,输出可以是任何内容。
在 R 和 Python 中,循环以几乎相同的形式存在。另一方面,矢量化函数在两种语言中都有多种形式,并且差别很大。在 R 中,有整个矢量化函数家族apply
,你可以在这里读到关于的内容。在 Python 中,Numpy 包中有列表理解和vectorize
以及其他选项。这可能看起来很多,但是一旦你学会了这个概念,你会发现所有这些不同的选项只是应用同一个基本概念的不同方式:取一个数据结构,用它的每个元素做一些事情。
抽象,大部分是以函数的形式,是一种编写代码块的方法,通过提供不同的输入可以重用。例如,您可以编写一个函数,它接受一个数字输入,并将其自身相乘以获得平方值。然后,您可以向您的函数传递任何数字以获得平方输出——理论上,这样做比每次需要手动平方数字更简洁。虽然这个示例可能不会节省太多时间或代码,但是函数可能会变得更加复杂,此时为重复任务编写函数可以使代码更加易读和简洁。Python 和 R 都允许用户定义函数,只是语法略有不同。
如果这一节感觉有很多新信息,我建议从基本的 R 或 Python 教程开始。 DataCamp 有一个很好的 R 用的,CodeAcademy 有一个很好的 Python 用的。
数据操作
数据操作代表了典型面试问题的一大类。和 SQL 一样,一个标准的面试官会给你提供一个样本数据集,要求你输出一个具体的结果。
对于这种类型的面试来说,重要的是你要有扎实的数据操作 R 或 Python 包的基础,因为试图解决这些问题是困难和低效的。
在 Python 中,这意味着了解 Pandas ,这是一个包,它提供了一个完整的框架来操作数据框,即具有行和列的矩形数据集。Pandas 拥有你操作和重构数据所需的所有操作符,以及过滤、聚集、连接等方法。
虽然 R 本身支持矩阵和数据框形式的矩形数据集,但是学习 dplyr 或 data.table 仍然会让您的生活更加轻松。这些包中的每一个都为操作数据框提供了一个比 base R 更好的界面:dplyr 更直观,可读性更好,而 data.table 更快,语法更简洁。
一旦你掌握了其中的一个软件包,用白板演示这类面试问题就非常类似于准备 SQL 面试,就像我在我之前的帖子中描述的那样。所有相同的概念都适用:组合、过滤、聚合和连接。和 SQL 一样,在你写的时候,通过讲述你的代码来帮助你的面试官,这样他们知道你在想什么,并且在你没有得到最终答案的情况下,他们可以给你部分的信任。
统计数字
统计学是另一类你可能会被要求在白板上讨论的问题。有点讽刺的是,这实际上是最容易的部分,因为这些语言中复杂的统计函数通常被抽象成一个易于使用的单行函数。
base R 中包含了许多基本的统计函数。例如,一个简单的线性回归,如果您从头开始编写,可能需要花费几个小时,但只需:
**model <- lm(y ~ x1 + x2, data = df)**
在 Python 中,你至少需要 Numpy 和 Scipy 包来确保你拥有基本的统计函数,但是像 R 一样,一旦安装了这些包,你就可以开始了。
当然,您仍然需要理解底层的统计数据,以便很好地利用这些强大的工具。如果您需要加快速度,我建议您在这里查看我的文章,并查看您最终使用的软件包的文档。通常,这些文档还会链接到深入研究特定技术的原始学术论文,如果你想要更深入的理解,这会很有帮助。
形象化
除了白板问题之外,许多数据科学面试都会有一个带回家的部分,要求你获取一个样本数据集,分析它并得出一些结论。通常你会发回你的代码,一些说明性的文本和可视化。为了成功地通过这一关,上面讨论的数据操作和统计是至关重要的,但是我们还没有谈到可视化。
对于每一个 R 和 Python 来说,可视化你的数据实际上只有一个选择:在 Python 中你想学习 matplotlib ,在 R 中你想学习 ggplot2 。这两个库都为创建好看的数据可视化提供了灵活的接口,远远优于这两种语言的基本功能。
不幸的是,我发现这两个可视化软件包的语法都有点麻烦和不直观,特别是对新程序员来说,但是一些实践应该会让你达到你需要的地方。我会避免从堆栈溢出或其他地方复制和粘贴语法的诱惑,因为这只会推迟学习语法如何工作的底层结构的必要性。当你掌握了其中的一个技巧后,你理解了其中的具体细节,这将使你更快地生成可视化效果,而不必求助于谷歌。
带回家作业中可视化的一些小技巧:给你的图表加标题,给你的坐标轴加零和标签,包括误差线(如果适用的话),选择一些颜色并坚持使用它们。例如,如果你在一个图表中把 iOS 数据点做成红色,把 Android 数据点做成蓝色,那么在所有后续的图表中做同样的事情。另外,保持可视化简单:通常你只需要条形图、折线图和散点图。
包扎
像统计学一样,你可以真正深入到编程概念,并开始感到不知所措。但是实际上,一旦你了解了你所喜欢的编程语言的基础,你就可以轻松地使用一些关键工具了:数据操作、统计和可视化。关注这三个方面,你就能为下一个面试官抛给你的任何问题做好准备。
我是一名数据科学家和研究人员,在科技行业工作,并在 Medium 上撰写相关文章。也可以关注我的 推特 。如果您喜欢这篇文章,请点击下面的关注按钮,了解我的数据科学文章。
如何赢得数据科学面试:SQL
这是正在进行的数据科学职位面试系列的一部分。你可以看看下一部分,涵盖统计, 这里 ,还有第三部分关于 R 和 Python 这里 …
数据科学面试可能很难驾驭。事实上,这是一个多学科的领域,这意味着你需要准备的大量材料会让你不知所措。
但我是来帮忙的。**我已经将您需要了解的内容分成了四个方面,并将在本系列的每一部分中涵盖一个方面:SQL、统计、脚本和产品。**每篇文章将涵盖学习基础知识的资源、重要技术领域的概述和示例,以及我在该领域面试的一般方法的一些笔记。
如果这是你第一次参加数据科学职位的面试,阅读这一系列文章会让你对该期待什么以及如何准备有一个明确的想法。但是,即使你以前做过这些,我希望这些文章将有助于你集中精力准备最有可能被测试的技能。
SQL 基础知识
我参加的每一次数据科学面试都以某种方式涉及到 SQL。我几乎可以保证,在你找工作的过程中,你将不得不写一些 SQL。尽管数据科学家喜欢假装我们已经从列式数据库发展到 Hadoop 等分布式系统,但事实是大多数现代数据存储仍然依赖(或至少允许)SQL 语法来检索数据。
SQL 的基础很简单,但是在数据科学面试中被问到的 SQL 问题会变得非常复杂。我猜大多数阅读这篇文章的人都有过使用这种语言的经验,但是如果你在阅读 Codecademy 的简介之前从未接触过 SQL。
本文的其余部分假设你对以下内容了如指掌:
SELECT
FROM
JOIN
WHERE
(AND)
GROUP BY
ORDER BY
LIMIT
一个SELECT...FROM
语句将从指定的表中返回一组行和列,这些行和列的细节由您在剩余的关键字后添加的内容决定。例如,要按用户名的字母顺序统计今天的网页浏览量,您可以编写如下代码:
SELECT username, count(1) as number_of_views
FROM pageviews
WHERE day = '2017-09-08'
GROUP BY username
ORDER BY username;
明白了吗?太好了,让我们开始有趣的东西。
子查询和公用表表达式
你现在知道如何检索一组行和列,这可能会让你通过面试官的第一个问题。但是更高级的问题将需要子查询或公共表表达式 (CTEs)。先说这些是什么,怎么用。
**cte 和子查询允许您获取数据的子集,并用一个名称存储该数据,然后您可以从中进行选择并对其执行更多操作。**这两种方法的功能几乎相同,所以这里我只关注 cte,我发现它的语法更可读。
假设某个用户要求您计算事务之间的平均时间。您有一个名为transactions
的表,其中包含用户名和交易时间。要解决这个问题,您需要一行中每个事务的时间以及该用户的下一个事务的时间。单个查询并不能让您一路到达目的地:您需要提取一个用户的事务,将其存储在一个 CTE 中,然后将后来的事务加入其中,这样您就可以计算两者之间的时间。这可能是这样的:
-- First, find all of user_a's transactions today with user_a_trans as (
SELECT username, time
FROM transactions
WHERE day = '2017-09-08'
AND username = 'user_a'),-- Join each transaction to all transactions occurring after itjoined_trans as (
SELECT username, time, future_times
FROM user_a_trans a
INNER JOIN user_a_trans b
ON b.time > a.time),-- Find the immediate next transaction using MIN()next_trans as (
SELECT username, time, MIN(future_times) as next_time
FROM joined_trans
GROUP BY username, time)-- Average difference of the time and the next transaction's timeSELECT AVG(next_time - time) as avg_time_to_next_transaction
from next_trans;
如果您不太了解这个查询如何工作的所有细节,这完全没关系——一些练习会使它变得容易。**重要的一点是,更复杂的问题需要分解成小块,用一系列 cte 来解决。**这导致…
筛选、聚合、连接
当你遇到一个像上面这样的难题时,花一分钟时间问问自己,让你用一句SELECT
话来回答你的问题,理想的表格应该是什么样的。在上面的例子中,理想的表是这样一个表,它包括每个事务的一条记录,以及给出下一个事务时间的一列。
一旦你知道你的最终表格应该是什么样的,你就可以逆向工作,一步一步地确定如何使用一系列 cte 将你的原始表格转换成你的面试官要求的最终输出。
通常,您希望对 cte 字符串执行以下步骤:过滤、聚集、连接。过滤使用WHERE
,聚合使用GROUP BY
,连接使用JOIN
。冲洗并重复。
通过在加入之前过滤和聚合数据,您可以编写最高效的 SQL。连接的处理成本很高,因此您希望在将两个表连接在一起之前尽可能减少行数。有时首先聚合是不可能的,但是通常您可以用至少一两个WHERE
子句来限制要连接的表的大小。
需要注意的是,如果在同一个 CTE 中有一个JOIN
和一个WHERE
子句,SQL 首先处理JOIN
。换句话说,以下是非常低效的,因为您的整个表将被连接在一起,然后才被过滤为 2017 年 9 月 1 日之后的数据:
SELECT *
FROM table_a a
INNER JOIN table_b b
ON a.username = b.username
WHERE a.day >= '2017-09-01'
正确的表达方式是在连接之前使用 cte 过滤*,就像这样:*
with a as (
SELECT *
FROM table_a
WHERE day >= '2017-09-01')b as (
SELECT *
FROM table_b
WHERE day >= '2017-09-01')SELECT *
FROM a
INNER JOIN b
ON a.username=b.username;
同样,这里效率的提高来自于这样一个事实,即只有在过滤到尽可能少的行数之后才执行连接。
窗口功能
您可能只需要上述的过滤、聚合、连接过程就能解决大多数问题。不过偶尔,您会在 SQL 中遇到一个需要窗口函数的棘手问题。像一个GROUP BY
子句一样,窗口函数将你的表分成几个块,并分别对每个块进行操作。但与GROUP BY
不同的是,行并没有合并。举个例子是理解这一点最简单的方法。
假设您有一个包含一些行项目的表,这些行项目报告收入及其来自的美国州。你的任务是确定每个行项目的收入占该州总收入的百分比。
这里的技巧是要认识到,您需要将单个值(特定行项目的收入)与聚合值(特定州的所有行项目收入的总和)进行比较。任何时候你需要做这样的事情,窗口函数是一个很好的选择。该查询可能是这样的:
with state_totals as (
SELECT state, revenue,
SUM(revenue) OVER (PARTITION BY state) as state_revenue
FROM state_line_items)SELECT state,
revenue/state_revenue as percent_of_state_revenue
FROM state_totals;
窗口功能由OVER
子句指定。通过对按州划分的收入求和,您可以获得与每个单独行项目相关联的每个州的合计值。这使得得到你关心的百分比贡献数字成为一个简单的除法问题。
窗口函数适用于大多数聚合,如SUM
、COUNT
或AVG
,但也有一些特殊的关键字仅用作窗口函数。一些很好的例子是RANK
、FIRST_VALUE
和LAG
。你可以在 Postgresql 文档中阅读更多的窗口函数以及它们是如何工作的。我上面提到的六个函数可能就是你成功完成一次典型的数据科学 SQL 面试所需要的全部。
Union 和 Case 语句
为了充实您的 SQL 库,您只需要一些工具。第一个很容易理解:工会。
联合只是联接的垂直版本:联接使用一个联接键水平地组合表或 cte,而联合只是将表堆叠起来,形成一个包含两个原始表中所有行的表。这样做的要求是被联合的两个表具有完全相同的列——否则就没有办法在逻辑上组合它们。
union 可能有用的一个例子是,当您有两种类型的事务的不同表,但希望用一个查询告诉您每种类型的事务有多少个时。
with sales as (
SELECT 'sale' as type
FROM sale_transactions
WHERE day >= '2017-09-01'),buys as (
SELECT 'buy' as type
FROM buy_transactions
WHERE day >= '2017-09-01'),unioned as (
SELECT type
FROM buys
UNION ALL
SELECT type
FROM sales) SELECT type, count(1) as num_transactions
FROM unioned
GROUP BY type;
通过从两个表中各选择一个常量type
字段(在本例中只是‘sale’或‘buy’),然后将它们合并,最终得到一个大表,可以在单个查询中对其进行分组和计数。
当您希望两个表被构造成一个组合表时,联合就是答案。
Case 语句是另一个相当简单的概念:它们与 R 和 Excel 等环境中的ifelse()
函数完全相同。它们对于从一组预定义值映射到另一组值很有用。
例如,您可能希望将一周中的某一天列转换为表示该天是否为周末的变量。
SELECT
CASE WHEN day_of_week in ('Sat', 'Sun')
then 'Weekend' else 'Weekday' end as day_type
FROM table_a;
类似地,您可以将一个字符串列(如星期几)转换为一个二进制变量,并对其求和以计算表中周末的天数。
SELECT
SUM(
CASE WHEN day_of_week in ('Sat', 'Sun')
THEN 1 ELSE 0 END) as num_weekend_days
FROM table_a;
Case 语句非常灵活——您可以将一串WHEN
串在一起,将任何值映射到任何其他值,然后使用一个ELSE
来捕捉其余的值。
包扎
现在,您已经具备了成功通过数据科学面试的 SQL 部分所需的所有要素。当然,实践是这里的关键。试着给自己设置几个问题,用我上面描述的工具解决它们。更好的办法是,找一块白板,在上面练习,这样你在面试中会更加自如。如果你陷入困境,谷歌是你的朋友。Stack Overflow 和类似的网站有如何解决任何特定 SQL 问题的详细指导,谷歌通常很擅长从他们那里找到你需要的东西。
我将留给你一些关于面试本身的建议。
**将每个问题分解成尽可能小的部分。**这是清楚地思考 SQL 问题的最佳方式,并且允许您将每个步骤映射到具体的 SQL 命令。
大声说出你的过程。就像在学校一样,你会因为展示自己的作品而获得荣誉。如果你只是开始在白板上写东西,而不让你的面试官知道你在做什么,他们将很难评估你的技能,尤其是如果你没有完成最后的回答。
寻求帮助。信不信由你,大多数面试官都希望你成功,并乐意提供一些帮助,只要你能准确说出你有困难的地方。换句话说,可以问一些问题,比如将整数转换成浮点数的正确语法是什么,但是要避免问一些模糊的问题,这些问题可能表明你不知道如何解决你试图解决的问题。
如果您对数据科学面试流程有任何疑问,可以在 Linkedin 或 Twitter 找到我。并在接下来的几周中寻找本系列的下一部分,包括统计数据。
如何在数据科学面试中胜出:统计学
这是正在进行的数据科学职位面试系列的一部分。可以查看一下第一部分,这里涵盖 SQL、*,第三部分关于 R 和 Python* 这里 。
对于从事或试图从事数据科学工作的人来说,统计学可能是你需要发展的最大和最令人生畏的知识领域。这篇文章的目标是把你需要知道的东西减少到有限数量的具体想法、技术和方程式。
当然,这是一个雄心勃勃的目标——如果你打算长期从事数据科学,我仍然希望在你的职业生涯中继续学习统计概念和技术。但我的目标是为你提供一个基线,让你通过面试,尽可能短而轻松地实践数据科学。我将用关键术语和资源来结束每一节,以便进一步阅读。让我们开始吧。
可能性
概率是统计学的基础,经常在面试中出现。学习基础知识是值得的,不仅仅是因为这样你就可以通过面试官喜欢问的典型概率脑筋急转弯,还因为它会增强和巩固你对所有统计学的理解。
概率是关于随机过程的。经典的例子是像掷硬币和掷骰子这样的事情——概率为你提供了一个框架来确定一些事情,比如你希望在一定次数的投掷中掷出多少个 6,或者在没有正面朝上的情况下掷出 10 个公平硬币的可能性。虽然这些例子可能看起来很抽象,但它们实际上是分析人类行为和处理非确定性过程的其他领域的重要思想,因此对数据科学家来说至关重要。
我喜欢的学习或重新学习概率的方法是从组合学开始,这将提供一些关于随机过程如何表现的直觉,然后继续我们如何从这些过程中推导出期望和方差的规则。熟悉这些话题会让你通过一次典型的数据科学面试。
为了专门准备你可能会被问到的概率问题,我会找一些示例问题(这是一个合理的列表,但还有许多其他问题)并在白板上完成它们。练习制作概率树来帮助形象化和思考问题。
阅读内容:的第 1-4 章和第 6-8 章这个概率介绍将涵盖你需要知道的几乎所有内容。
关键思想:随机变量、连续变量与离散变量、排列、组合、期望值、方差
概率分布
与上述主题密切相关的是概率分布。概率分布就是描述随机变量的单个观察值等于特定值或值范围的可能性的分布。换句话说,对于任何给定的随机过程,都有一系列可能的值,并且随机过程的单次抽取有可能采用这些值中的一个。概率分布为给定过程的所有可能值提供了可能性。
与概率一样,了解分布是理解推断和预测统计的先决条件,但你也可能会收到专门关于它们的面试问题。最典型的例子是:您有一个行为类似于 X 的流程——您将使用什么分布来建模该流程?回答这些类型的问题只是将随机过程映射到合理的分布,这篇博文很好地解释了如何做到这一点。
读什么:上面提到的概率介绍的第 5 章,还有这篇关于常见分布的博文
关键思想:概率密度函数、累积分布函数、偏斜度、峰度、均匀分布、正态(高斯)分布、博文中描述的其他分布
中心极限定理和假设检验
一旦你掌握了概率和分布,你就可以专注于科学家是如何进行推理的。关键在于,一旦你有了描述概率分布行为的工具,我们用来总结数据(通常只是平均值)的描述性统计就可以被建模为随机变量的集合。
方便的是,有一个定理告诉我们,给定一个足够大的样本,随机变量的均值会变成正态分布。这被称为中心极限定理(CLT),我已经在这里写了一些细节。如果您已经学习了这方面的内容,那么这篇文章是一个很好的入门或复习的地方。
使用 CLT,我们可以评估给定均值来自特定分布的可能性,这种想法允许我们测试假设。例如,我们可能有一组人的平均身高,并想测试其来自一个平均身高大于 6 英尺的随机过程的假设。知道均值是正态分布的,就可以评估这个命题,并拒绝或未能拒绝我们的假设。
假设检验的面试问题要么是将某些场景映射到适当的检验,要么是阐述假设检验的一些关键思想:p 值、标准误差等。下面的阅读材料将涵盖后一种类型的问题,但对于前一种练习是最好的方法。获取一些样本数据集并尝试提出实际问题,然后阐明假设并选择测试来评估它们。假设你必须向面试官解释这些决定,并相应地练习这些解释。
读什么:Coursera 课程的前三段视频和 dartmouth probability book 中关于假设检验的章节。
关键思想:中心极限定理、样本统计分布、标准误差、p 值、单尾和双尾检验、一型和二型误差、T 检验、其他假设检验
随机化和推断
继续上面的想法,测试人口平均身高等于 6 英尺的假设是合理的,但作为数据科学家,你更经常对因果问题感兴趣。也就是你想知道做 X 会不会导致 y。
例如,一个类似这样的问题:“住在加州会让你变高吗?”更像是科学家想要回答的问题。天真的方法是测量加州人的身高,并测试他们的平均身高大于非加州人的平均身高的假设。然而不幸的是,简单地测量和比较观察到的数据总是会对真正的因果关系产生有偏见和不正确的估计。在这个例子中,有许多与居住在加州相关的事情也会影响人们的身高,所以我们实际上并不知道居住在加州是否会让人变高,或者这些其他事情是否有责任。
解决这个问题的方法是随机化。我们可以随机分配人们住在加州或不住在加州,然后测量这些人的身高。这确保了待遇是两组之间唯一有系统差异的东西,所以身高的任何差异一定是住在加利福尼亚的结果。
这就是企业进行实验的原因,或者如他们在行业 A/B 测试中所称的那样。当您想要了解决策或产品对业务指标的真正因果影响时,随机实验是对结果有信心的唯一方法。
不像概率或分布,除了非常专业的角色,你面试的任何一部分都不太可能关注因果关系。也就是说,理解为什么相关性并不意味着因果关系,以及相对于使用观察数据,何时有必要进行真正的随机测试非常重要,并且肯定会成为数据科学面试过程中出现的话题。你在这方面的准备可能仅限于阅读,而不是白板或解决问题,但它仍然非常重要。
读什么:我有两篇相关的文章,应该会有帮助:一篇关于非实验数据的极限,另一篇关于如何分析 A/B 测试数据。这篇关于网络实验的文章应该很好地完善了基础知识。
如果你想更深入一点,哥伦比亚大学有一些关于因果统计推断的好材料。除此之外,它还介绍了潜在结果框架和 Rubin 因果模型,我强烈推荐给任何对实验感兴趣的人。
关键观点:随机化、因果关系、偏见、自我选择、概化、潜在结果、鲁宾因果模型
预测和机器学习
最后,我们来预测。这是很多人最感兴趣的东西——它包括图像识别、视频推荐、网络搜索和文本翻译等各种主题。显然,这是一个巨大的领域,但我假设你面试的是一个更通才的职位,在这种情况下,任何领域的专业知识都不会被假定。
相反,你希望能够解决面试官抛给你的任何特定的预测问题,并提供一个合理的方法来开始解决它。这通常意味着你需要准备好讨论如何选择一个模型,评估该模型的有效性,然后改进该模型。面试时,我会把问题分解成这三个步骤。
当选择一个模型时,你的决定主要基于以下几点:结果变量的类型和分布,因变量和自变量之间关系的性质,你拥有的数据量,期望的可解释性水平。同样,这里没有正确的答案(尽管经常有错误的答案),所以你只是希望能够对你要做的决定和它们所暗示的权衡进行明智的讨论。
您可能还会被问到您希望在模型中包含哪种特征作为独立变量(预测值)。这主要是一个领域知识的练习:它更多的是关于理解行业和哪些数据可能预测感兴趣的结果,而不是关于统计。讨论还可能涉及特征工程,这将涉及如何以及何时转换变量的一些直觉,以及选择预测器的数据驱动方式(即正则化、降维以及自动特征选择)。
评估模型是一门相对简单的艺术,它涉及到用来验证模型和减轻任何过度拟合问题的维持数据集。关于这个主题的 wiki 可能足以作为一个基线。此外,您希望熟悉不同的评估指标:准确性、ROC 曲线、混淆矩阵等。这种东西是很少开放的,我不期望进入它的微观细节。粗略地了解一下为什么需要维持集以及不同评估指标的优缺点就足够了。
第三步是改进,主要是对特征工程主题进行重新组合,并决定是否有必要收集更多的数据。面试时,确保你第一次尝试一个模型时,给你留下了改进的空间——否则你将很难回答接下来不可避免的关于如何改进的问题。
读什么:学习统计学习的所有元素足以通过面试。
关键思想:回归与分类、线性与非线性、监督与非监督、特征工程、交叉验证、ROC 曲线、精确召回、偏差-方差权衡、提升、打包
请不要死记模型
我概述了一种学习数据科学面试统计学的方法,从基础开始,逐步发展到更高级的技术。这不是武断的——这是因为理解数学构建模块将允许你有效地推理不同的模型,做出好的决定,并明智地谈论你以前从未想过的话题或技术。
相反的方法,不幸的是我和其他人尝试过的方法,是从金字塔的顶端开始,只是记住不同的技术。这是难以置信的无效,因为你最终很难理解一堆脱离上下文的孤立想法,因为你缺乏将所有东西粘在一起并允许你思考新想法的基础知识。所以请不要这样。从概率开始,转向分布,然后处理推理和预测。你会过得更轻松的,我保证。
一如既往,我很乐意回答问题,并在下面的评论中接受反馈。我肯定我在试图涵盖如此广泛的主题时错过了许多东西,所以请随意说出。祝你面试好运!
额外学分:时间序列,贝叶斯
这一部分只是为了突出我没有涉及的内容。我已经谈到了相当传统的推理和预测方法,但是还没有涉及到两个大的统计学领域,这两个领域以非常不同的方式处理这些问题。
一个是时间序列数据的分析,研究一段时间内的数据,以及当数据生成过程不是静态的时你需要应用的特殊技术。第二种是贝叶斯统计,它采用一种完全不同的统计方法,决定将某个领域的先验知识纳入概率评估。这两个领域都很重要,值得了解,但是对于一个典型的多面手面试来说,深入这两个领域中的任何一个都是不寻常的。
如果你现在对学习贝叶斯统计感兴趣,我推荐这篇 datascience.com 邮报作为初学者友好的介绍。时间序列在本帖中有所介绍。
如何赢得面对面的数据科学面试
我以前写过关于我最近找工作的文章,但是这篇文章只关注面对面的面试。那一整天,试着让他们眼花缭乱,交叉你的手指,希望你已经为扔给你的东西做好了准备。在参加了大量这样的面试后,我发现他们倾向于遵循一些非常标准的时间表。
你可能会遇到 3-7 个不同的人,在与这些不同的人见面的过程中,你可能会涉及到:
- 说说你自己吧
- 行为问题
- “白板”SQL
- “白板”代码
- 谈论你简历上的项目
- 简单的分析问题
- 问你自己的问题
说说你自己吧
我以前在谈论手机屏幕时提到过这一点。我处理这件事的方式永远不会改变。人们只想听到你能说出你是谁,你在做什么。我的是某种变体:
我是一名数据科学家,拥有 8 年使用统计方法和分析解决各行业业务问题的经验。我擅长 SQL,R 建模,目前正在学习 Python。
行为问题
几乎每一家与我交谈过的公司都提出了应该用星型模式回答的问题。我在数据科学访谈中看到的最常见的明星问题是:
- 告诉我你向非技术人员解释技术成果的一次经历
- 告诉我你改进流程的一次经历
- 告诉我一个与难相处的利益相关者相处的时间,它是如何解决的
这里的目标是简明清晰地解释的情况、任务、行动和结果。
我对“技术结果”问题的回答大概是这样的:
Vistaprint 是一家为小型企业在线销售营销材料的公司(请务必给出背景,面试官可能不熟悉该公司)。我有机会使用 k-means 进行客户行为细分。这包括创建 54 个变量,标准化数据,大量的分析等等。当需要与利益相关者分享我的成果时,我真的将这些信息提升了一个层次,构建了这个故事。我没有谈论方法,而是谈到了谁是客户群,以及他们的行为有何不同。我还强调了这种划分是可行的!我们可以在我们的数据库中识别这些客户,开发针对他们的活动,我给出了我们可能尝试的具体活动的例子。这是我向非技术利益相关者解释技术成果的一个例子。(之后一定要重述问题)。
对我来说,这些问题需要一些准备时间。我从自己的经历中思考了一些最好的例子,并练习说出答案。这次有回报了。在整个面试过程中,我一遍又一遍地被问到同样的问题。
白板
白板 SQL
面试官让你站在白板前回答一些 SQL 问题。如果一份工作描述要求 SQL,这是公平的游戏。在大多数情况下,他们会在白板上贴几张纸。一个是包含(例如)id 和姓名的表(我们称之为 NamesTable),另一个可能包含 id、日期和购买(我们称之为 PurchasesTable)。您明白了这个想法,您将编写 SQL 查询来回答他们的问题。
他们会问一系列问题,例如:
- 写一个查询来获得所有的名字—
*select names from NamesTable*
- 编写一个查询来获取姓名和购买情况—
select names, purchasesfrom NamesTable as njoin PurchasesTable as pon n.id = p.id
- 编写一个查询来获取在某个日期(他们随机选择的日期,这里是 2017 年 12 月)之后购买的商品的名称和购买次数
select names, purchasesfrom NamesTable as njoin PurchasesTable as pon n.id = p.id where p.dates > ‘2017–12–31’
- 编写一个查询来获取至少购买过两次的人的姓名和购买次数
select names, count(purchases) as cntfrom NamesTable as njoin PurchasesTable as pon n.id = p.idgroup by nameshaving count(purchases) ≥ 2
- 你明白了。一位面试官曾经问过我一个需要返回到同一个表的查询,但我还没有经历过比这更复杂的查询。
白色登机代码
正如我在之前的文章中提到的。两家不同的公司连续两天问我 FizzBuzz。用 Python 写解决方案的一种可能方式(只是拍了一张我电脑的截图)如下:
编码问题很可能涉及到一些循环、逻辑语句,并且可能需要你定义一个函数。如果在职位描述中提到了某种特定的语言,他们可能希望看到这种语言的答案。招聘经理希望确保当你说你会编程时,你至少已经掌握了一些基本的编程知识。
你简历上的项目
我曾经被问到过我在简历中提到的所有方法(回归、分类、时间序列分析、MVT 测试等)。我在简历中没有提到我硕士学位的论文,但当被问及我以前是否有贝叶斯方法的经验时,我会随意引用它。面试官接着问了一个关于我论文中用到的先验分布的问题。
我在 9 年前完成了论文,不记得以前的事,告诉他我需要跟进。我确实跟进了,并把他的问题的答案发给了他。他们确实给了我一份工作,但这不是你想看到的情景。如果你要引用某样东西,要能对着它说话。即使这意味着在面试前通过查看维基百科来刷新你的记忆。简历上的东西和你提到的项目应该是全垒打。
简单分析题
将会问一些基本问题,以确保你了解数字是如何工作的。这个问题可能需要你画一张图或用一些代数来得到答案,这将表明你有一些商业背景,可以解释正在发生的事情。关于转换率、平均销售价格变化的问题,为什么在这种情况下收入会下降?在这种情况下,您会选择什么型号?通常我会被问两三个这类问题。
在一次面试中,我被问到一个概率问题。他们问掷骰子的期望值是多少。然后有人问我,如果骰子以某种方式加权,那么骰子的期望值是多少。我不被允许使用计算器。
我提出的问题:
- 告诉我一个你认为是高绩效/高潜力员工的人的行为。
老实说,我用上面的问题来试着了解你是否需要一周工作 60 个小时并在周末工作来成为一个出类拔萃的人。我经常在周末工作,因为我喜欢我所做的事情,如果这是意料之中的,我就不会喜欢。
- 你正在使用什么软件?
真的,我喜欢在手机刷屏的时候把这个问题解决掉。我个人对为 SAS 商店工作不感兴趣,所以我想提前了解一下。对于这个问题,我最喜欢的回答是“你可以使用任何你喜欢的开源工具,只要它适合这个问题。”
- 关于我的技能和资格,还有什么我可以告诉你的,让你知道我非常适合这份工作吗?
这是你的机会,让他们告诉你是否有你还没有涉及的,或者他们可能关心的事情。你不想在离开面试时,觉得他们没有得到决定是否聘用你所需的一切。
- 我什么时候能得到你的消息?
我还询问了报告结构,当然,我还询问了在开始工作后不久我将从事什么类型的项目(如果这还不清楚的话)。
摘要
祝你在数据科学面试中取得巨大成功。希望你能遇到很多优秀的人,并有一个积极的经历。每次面试后,记得发送感谢信!如果你没有收到录用通知,或者没有接受某家公司的录用通知,仍然可以登录 LinkedIn,向他们发送联系请求。你永远不知道什么时候未来的时机会更好,你们的道路可能会交叉。
如果你喜欢这篇文章,请访问我的网站!这里