TowardsDataScience 博客中文翻译 2020(六百八十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

我们的专栏

原文:https://towardsdatascience.com/our-columns-53501f74c86d?source=collection_archive---------20-----------------------

TDS 上的专栏是我们的团队围绕特定主题、想法或格式精心策划的帖子集合。

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

Unsplash 上由 Alex Geerts 拍照

我们每天发表几十篇一流的文章。为了帮助你找到一些最好的文章,我们已经创建了几个围绕特定主题和文章类型的集合。

例如,你可能正在寻找关于获得机器学习工作的见解;你可以去我们的办公时间专栏找到我们推荐的相关文章。如果你有心情进行一次长时间的深思熟虑的阅读,你可以浏览我们的深度阅读页面,在那里我们收集了一些更有实质性的贡献。诸如此类。

如果你是一个新的或者有抱负的 TDS 投稿人,浏览我们的专栏会让你对我们团队认为特别有吸引力的文章类型有一个坚实的概念。快乐阅读!

入门

如果您是数据科学的新手,请从这里开始!我们的入门专栏包括一系列文章,将帮助您在许多数据科学和机器学习领域入门。

编辑推荐

我们作为编辑精选的帖子代表了最好的 TDS:见解深刻,在新鲜和发人深省的主题上引人入胜的写作。有些非常技术性,有些可能更投机,甚至固执己见。它们都是必读书目。

深潜

从让复杂概念变得容易理解的耐心解释者,到带有大量代码示例的逐步指南,这个集合汇集了真正值得您花费时间和全部注意力的文章(它们通常至少需要 12 分钟的阅读)。

办公时间

你有兴趣在数据科学领域找份工作吗?你想知道如何为工作面试做准备,或者了解数据科学家的典型一天是什么样的吗?这些只是我们办公时间专栏中的一些话题。

月刊

每个月,我们的团队都会就某个特定主题发布一些精选的最佳文章。你可以在这里找到我们所有的月刊!

我们的播客

探索我们所有的播客剧集,聆听关于数据科学和机器学习的精彩对话。🎧

意见

在我们的观点专栏中,您可以找到不同的观点、有争议的观点、对现有问题的新观点等等。我们鼓励我们的作者参与智慧的讨论,我们也很高兴在这里看到你的想法。

实践教程

你在为你的下一个机器学习项目寻找灵感吗?您是否正在尝试寻找一个能够教给您编程和数据科学最佳实践的教程?你想看看顶尖组合项目的例子来帮助你在求职中脱颖而出吗?您可以在我们的实践教程专栏中找到所有这些以及更多内容。

理解大数据

如果您对分析和处理大数据感兴趣,可以看看这篇专栏文章。它包括数据工程的高级教程、模型部署的最佳实践、公司案例研究等等。

数据变更

我们相信数据科学有助于让世界变得更美好。我们认为正确使用和解释数据可以改善我们的生活。要找到更多讨论数据的力量和重要性的文章,请访问我们的数据促进变革专栏。

小窍门

Python 101 之后是什么?面向对象的设计是如何工作的?如果你想在基础知识之外提高你的编程技能,你可以收藏这个专栏。它的特色是教授高级编码语法的文章,干净代码的技巧,以及介绍提高编码性能的工具。

数据新闻

你是新闻迷吗?请查看本专栏中结合了强烈视觉效果和分析严谨性的文章。数据记者解读数据,并在引人入胜的叙述中展示他们的发现,揭示报道不足的问题。

思想与理论

数据科学和机器学习是发展最快的两个研究领域。在这里,我们策划来自学者、积极的学生和行业专家的研究突破。

业内笔记

数据科学在实践中是什么样子的?我们有兴趣向从业者学习他们认为在行业用例中最有用的工具。本专栏将重点介绍从机器学习技术到管理云基础设施的应用案例研究。

数据科学和机器学习中的新问题

我们还创建了几个专栏,在这些专栏中,我们收集了一些有助于确保数据科学和机器学习技术以造福人类的方式发展的故事(你可以在这里了解更多关于这一点的信息):

我的数据分析原则

原文:https://towardsdatascience.com/our-data-analytics-principles-4be44d262245?source=collection_archive---------55-----------------------

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

Unsplash,演职员表:艾萨克·史密斯

我如何帮助我的客户

当我开始 Enka Analytics 的时候,我非常确定我要坚持的原则。当你在经营一家企业或过普通生活时,我怎么强调有原则的重要性都不为过。原则帮助我们在危机时刻坚持选择的道路。它有助于做出艰难的决定。想一想,当我们在做一个无法区分黑白的决定时,想想你的原则,哪个决定违反了你的哪条不可协商的原则。最终结果,决策变得容易。因此,我也为自己设定了一些不容商量的原则。下面列出了它们(没有特定的顺序)。

永远不要报告不准确的见解

如果你问我对数据分析领域的看法,这将与我开始时的看法大相径庭。即使是在最结构化和最干净的数据中,得出有意义的发现也绝非易事。当你试图挖掘一个洞察力时,往往会有灰色地带,有时需要很长时间才能得到结果。然后,当结果不符合预期时,我们走一条简单的数据挖掘之路。千万不要那样做!

想象一下你提供的错误见解的后果。假设,你正在分析一个销售团队的生产力,为了留下好印象,你沉迷于数据钓鱼。结果,如果没有被组织交叉检查,可能会导致一个多产的推销员不必要的解雇。另一方面,如果组织意识到调查结果不准确,他们会发现很难再相信你的结果,这对你来说是一个损失。

因此,我保证无论在分析中投入多少努力,报告虚假信息都是不允许的,即使这意味着重新做整个项目。

隐私不容商量

可能是最重要的一点。 数据隐私不容商量。当你处理客户信息时,他们信任你。当然,当信息被共享时,是有法律规定的。尽管如此,永远不要在数据隐私上妥协。最好投资于保证保护的基础设施,例如使用安全云和软件。

请记住,一旦你失去了客户的信任,以后就很难挽回了。

我们所做的一切都是我们自身的延伸

这个原理不仅限于数据分析,事实上,它可以用于任何领域。我们的行为决定了我们是谁。史蒂夫·乔布斯曾经说过一句名言:

我们创造产品,并自豪地出售,可以推荐给我们的家人和朋友。

从那以后,我一直使用这个原则,只是稍加修改。我们提交的每份报告、仪表板或调查结果,都确保以最佳方式呈现。我们把我们的灵魂倾注其中,确保它代表了 100%的我们。报告中的一个小拼写错误会破坏印象,因为它清楚地表明了不专业的行为。图表中使用的颜色定义了你的个性,选择的字体,标点符号的使用等等,决定了我们是谁。报告的安排和结构显示了你的思维方式。这是对小事情的关注,积累起来会给人留下深刻的印象。这种印象的好处远远超出人们的理解。把你提交的任何报告都当成你自己的一部分。你会展示你不引以为豪的东西吗?

从心中的目标开始

想象一下,当某人口述结构时,他让你在一张普通的纸上画点什么。类似于:

向下画一条 3 厘米长的水平线,然后从端点向左画一条 45 度角的对角线,使对角线的端点与线的起点平行。将对角线的终点连接到初始线的起点,并画一个半圆将其连接回对角线。向下 3 厘米画一条水平线。你得到了多少数字?

想象一下,有人向你背诵这个,你应该完全按照说明来画。这将是很难做到的,你可能会成功,但你必须更加专注,导致能量的损失。

现在,考虑第二个场景,你已经在开始时看到了这个图形,你完全清楚它看起来是什么样子。现在你画画会容易些。这是我的下一个数据分析原则。

从心中的目标开始。除非你清楚你要解决的问题,否则你的结果永远不会是最好的。当我说清晰的时候,我指的是绝对意义上的清晰,目标的清晰,小细节的清晰,你想要的结果的清晰。一旦这样做了,你将会用更少的努力和时间完成任务。你会提供客户想要的东西,让你的客户满意。

简单就是极致世故

客户问的事情从来都不简单。商业运作的方式从来都不简单。机器学习算法从来都不简单。然而,客户的期望是以团队可以轻松实现的简化方式交付东西,这就是数据分析的艺术方面。让复杂的事情看起来简单是一门艺术。

假设您是一家大型组织的首席执行官,从数据分析团队那里收到了一份 10 页的报告。在某些情况下,首席执行官没有时间看完一份 10 页的报告。现在问题来了,我们怎样才能吸引首席执行官的注意力,而不占用她太多的时间,让她了解每一个重要的发现。对于一个给定的洞察,选择哪一个图表,使得信息很容易理解?我们要不要去掉坐标轴,在图上标注一下标签?我们如何简单地描述一个模型,说明它的优点和缺点?所有这些都需要额外的时间和努力。无论分析中涉及到什么样的复杂性,都应该简单到容易理解,但是,不要简单到错过重要信息。

正如阿尔伯特·爱因斯坦曾经说过的:

天才是把复杂的想法变得简单,而不是把简单的想法变得复杂。

这些是我的一些数据分析原则。这绝对不是一个详尽的列表,因为我每天都在学习新的东西。随后,随着经验的积累,更多的原则得到发展。然而,这些是我每天生活的原则,每当我在日常活动中面临任何困境时,我都会求助于这些原则来提醒我们是谁,我们做得最好。

感谢您的阅读。我们真诚地希望你觉得这篇文章很有见地,我们一如既往地欢迎讨论和建设性的反馈。

文章作者:伊桑·乔德里,Enka Analytics 创始人。

联系一山:【icy.algorithms@gmail.com

LinkedIn 上和他联系。

我们在 2049 年的生活

原文:https://towardsdatascience.com/our-life-in-2049-8396a0e2a123?source=collection_archive---------37-----------------------

迫切需要改变硅谷“快速移动和打破常规”的思维模式,因为我们今天正在建立的技术,如人工智能、区块链和基因组学,将对人类社会产生更广泛和更深刻的影响。

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

UnsplashLucrezia Carnelos 拍摄的照片

上周末,我参加了旧金山的“第二个创意之夜”,这是一个 6 年前在巴黎发起的活动,后来已经传播到全世界。这是在旧金山公共图书馆举行的长达七小时的马拉松式辩论、小组讨论、表演和互动体验。

从一个会议走到另一个会议,你可以听到来自大楼其他角落的音乐和声音。你可以看到人们四处走动,寻找他们感兴趣的话题。感觉就像我们在蜂窝里。所有这些辩论、讨论和经历会激发更多的思考和创造力,而不是蜂蜜和蜡。

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

创意之夜 SF 2020 项目时间表

今年的主题是“生活在边缘”,每一层都有一个主题,包括混乱+创造,奇迹+担忧,排斥+归属,真实+怀疑,流通+边界,以及景象+声音。

听到如此不同的声音和观点是很有趣的,尤其是对我们这些生活在旧金山泡沫中的人来说。特别是,我发现欧洲和美国的思想流派之间的对比非常有趣。

增强 vs 增强

在一个医疗保健小组中,法国初创公司 Ganymed Robotics 的联合创始人兼首席执行官索菲·卡亨(Sophie Cahen)描述了美国和欧洲之间的巨大差异。

从她的角度来看,美国公司,尤其是硅谷的公司,一直在寻找增强人类能力的方法,就好像我们只是复杂的机器一样。另一方面,欧洲人更保守。他们乐于修复或增强,而不是增强人类。

她补充说,如果你考虑咖啡和鞋子的强化,强化人类可以追溯到几千年前。最古老的外科手术大约在 7000 年前实施。这是几年前在法国发现的一种截肢术。乳腺癌最古老的证据是在一具 4200 年前的埃及骨骼中发现的。

增强和治疗对我们来说都不再陌生。它们存在了几千年。然而,这次不同的是,我们不满足于仅仅增强或修复人体,我们想通过生物黑客和基因工程重写代码。

AI 的所有权

关于人工智能(AI)和大数据的另一个有趣的观点是在题为“2049 年我们的生活”的主题演讲中提出的在美国,人工智能大多是由私人组织开发的,以获取利润。人们似乎并不过度关注这一点。

人们普遍认为,资本主义、竞争和对利润的追求创造或加速了创新。如果人工智能是在公共部门开发的,那么这项技术真正起飞需要更长的时间。

然而,如果人工智能真的像吴恩达所说的那样是新的电力,难道不应该像其他公共产品一样受到更严格的监管,以确保每个人都可以使用它吗?难道我们不应该开发更多易于使用的工具,以便 AI 不仅仅掌握在少数公司手中吗?

我们知道ML 模型的性能随着用更多的数据进行训练而提高。越来越多的初创公司开始出售训练数据集或标签服务,如 Scale AI 和 Lionbridge。

为什么我们要免费赠送我们的个人数据?

为什么我们要让科技巨头利用我们的大量个人数据积累巨额利润?另一方面,欧洲人似乎更关心大公司拥有大部分数据的事实。这反映在 GDPR,欧盟法律中关于数据保护和隐私的规定。

谷歌已经阅读了你所有的电子邮件,知道你去了哪里。现在它甚至可以追踪你的心跳,并且可以访问数百万份医疗记录。卡亨说:“入侵我们每一个人,而不仅仅是我们的笔记本电脑,越来越容易了。”。

她警告说,生物学、算法和大数据的这种融合使得人体越来越容易被黑客攻击。如果有一天算法确定你有很高的患癌风险,而你却感觉完全健康,怎么办?如果这些数据被泄露或分享给你的雇主怎么办?

[## 设计 ML 产品的用户体验

三个原则:期望、错误和信任!

towardsdatascience.com](/designing-the-user-experience-of-ml-products-8aef5afb510b) [## 为什么我们明明应该信任机器,却不信任它?

为什么人类必须留在自动化循环中?如何才能创造人机关系的美好未来?

towardsdatascience.com](/why-dont-we-trust-machines-when-we-obviously-should-dede847dde73)

结论

这不是全新的信息,但我们并没有太关注它。我们中的大多数人,包括我自己,仍然享受着科技巨头提供的方便和免费的服务,而没有过多地考虑其潜在的影响或潜在的副作用。

知道至少另一个大陆上的一些人对技术和未来生活有不同的看法,多少让人感到欣慰。因此,希望我们能够避免在任何一个方向走得太远。

各国如何在全球范围内就这些重大问题达成一致?幸运的是,我们已经看到美国人近年来稍微倾向于更多的政府监管,并将人工智能或数据视为公共产品。欧洲人也变得更有企业家精神。

迫切需要改变硅谷“快速行动,打破常规”的思维模式因为我们今天正在构建的技术,如人工智能、区块链和基因组学,将比移动应用程序对人类社会产生更广泛和更深刻的影响。

我们连线吧!如果你喜欢读这篇文章,请在这里订阅我的个人博客!

Bastiane Huang 是 OSARO 的产品经理,OSARO 是一家总部位于旧金山的初创公司,致力于开发软件定义的机器人。她曾在亚马逊的 Alexa 小组和哈佛商业评论以及该大学的未来工作倡议中工作。 她写的是关于 ML、机器人和产品管理的文章。跟着她到这里

我们的机器学习算法正在放大偏见,并使社会差距永久化

原文:https://towardsdatascience.com/our-machine-learning-algorithms-are-magnifying-bias-and-perpetuating-social-disparities-6beb6a03c939?source=collection_archive---------46-----------------------

人工智能伦理和考虑

对于机器学习工程师,雇用他们的公司,以及受他们调整的算法影响的用户:

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

凯文·Ku 在 Unsplash 上拍摄的照片

在我开始学习机器学习课程后不久,我意识到媒体对人工智能的状况有一种荒谬的夸大。许多人的印象是,人工智能是研究开发有意识的机器人实体,很快就会接管地球。每当有人质疑我的研究时,我通常会打起精神,因为我的回答经常过早地遭遇惊恐的喘息或愤怒的对抗。可以理解。

有意识的机器人实体即将接管?

然而,现实是,机器学习不是危险的魔法精灵,也不是任何形式的有意识实体。为了简单起见,我通常说人工智能的本质是数学。有人说这只是“美化的统计数据”。或者正如凯尔·加拉丁(Kyle Gallatin)所言,“机器学习只是 y=mx+b 的破解。’

当然,这是一种简化,因为机器学习来自许多学科,如计算机科学、神经科学、数学、科学方法等。但问题是,媒体充斥着各种措辞,让人感觉我们正处于被人工智能生物接管的直接危险之中。

事实是,我们不是。但是,在机器学习的产生过程中,还有许多其他经常被忽视的潜在问题。fast.ai 的联合创始人雷切尔·托马斯(Rachel Thomas)提到,她和其他机器学习专家都认为,“关于人工智能意识的炒作被夸大了”,但“其他(社会)危害没有得到足够的重视”。今天,我想详细阐述雷切尔提出的这些社会危害之一:“人工智能编码并放大了偏见”。

机器学习的真正危害:垃圾进垃圾出

这其中最令人不安的方面——人工智能放大偏见的想法——是机器学习在社会过程自动化中的承诺是保持最高程度的中立。众所周知,医生在医疗诊断中可能持有偏见,陪审团在刑事司法判决中可能持有偏见。机器学习应该理想地综合记录中的大量变量,并提供中立的评估。

“但事实是,机器学习程序在很大程度上延续了我们的偏见。所以不是法官对非裔美国人有偏见,而是一个机器人。”——布莱恩·雷斯尼克

我们期望模型是客观公正的;正是这种幻灭的客观立场,使得整个磨难感觉阴险,尤其令人失望。

那么这是怎么发生的呢?

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

图一.(来源)

“垃圾输入垃圾输出”是一个众所周知的计算机科学公理,这意味着低质量的输入产生低质量的输出。通常,“非垃圾”输入是指干净、准确、标记良好的训练输入。然而,我们现在可以看到,我们的垃圾输入很可能是我们社会过去行为的完美、准确的表现。机器学习的真正危险与机器人意识实体关系不大,而与另一种类型的意识实体——人类——关系更大。当有社会偏见的数据被用来训练机器学习模型时,潜在的结果是一个歧视性的机器学习模型,它预测了我们旨在消除的社会偏见。

精度更高!=更好的社会成果

这个问题从预测进一步延伸到永久化;我们创造了一种强化循环。

例如,假设一个企业主想要预测他们的哪些客户可能会购买某些产品,这样他们就可以提供一个特殊的捆绑包。他们继续要求数据科学家建立一个预测算法,并使用它向特定群体做广告。在这一点上,该模型不仅仅是预测哪些客户会购买,而是在强化它。

虽然在这个例子中是无害的,但这可能导致对社会进程有害的结果。这正是导致这些意想不到的标题:

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

图二。作者照片。文末引文。

同样,如果我们的应用是针对医疗保健的,目的是基于先前的数据来预测哪一组应该得到更多的关注,我们不仅仅是为了优化而预测,我们现在正在积极地放大和延续先前的差异。

那么,我们废除机器学习是因为我们知道它会导致世界毁灭吗?

简而言之,没有。但也许我们应该重新想象我们练习机器学习的方式。如前所述,当我刚开始练习机器学习时,对人工智能发展意识的过度夸张的司空见惯的恐惧开始有点迁就我。我认为可能发生的最糟糕的事情是像我们拥有的任何工具一样被滥用,尽管滥用可能在物理工具上比在数字工具上更明显。

然而,YouTube 上 Alter 的短片“屠宰场机器人”引发了许多关于伦理和自主人工智能可能存在的危险的思考。“生命未来研究所”创作这部电影的主要原因是为了传达以下思想: “因为自主武器不需要人类的单独监督,它们是潜在的可扩展大规模杀伤性武器——少数人可以发射无限数量的武器。”

在这部短片的背景下,无人机被用于伤害。然而,使用人工智能系统会产生灾难性的意外后果吗?如果我们在没有任何监督预防措施的情况下创建 AI 来优化一个松散定义的目标和松散定义的约束,并意识到它超出了我们的预期,会发生什么?如果我们创建了一个系统,其初衷是用于社会公益,但结果却是灾难性的、不可逆转的损害,那该怎么办?意识的缺失变得无关紧要,但并没有最小化潜在的伤害。

然后,我开始偶然发现挑战当前人工智能标准模型的相关资源,并解决这些问题,这最终导致了这篇博文的合成。

逆向强化学习

第一个是斯图尔特·罗素的“人类兼容”,这表明人工智能的标准模型是有问题的,因为缺乏干预。在当前的标准模型中,我们专注于优化我们最初设置的指标,而没有任何人在回路中的监督。Russell 用一种假设的情况来挑战这一点,即我们在一段时间后意识到我们最初目标的结果并不完全是我们想要的。

相反,斯图尔特提出,与其使用我们的人工智能系统来优化一个固定的目标,不如我们灵活地创建它们,以适应我们潜在的摇摆不定的目标。这意味着在算法的不确定性水平上编程,它不能完全确定它知道我们的目标,所以它会故意问它是否需要重定向或关闭。这被称为“逆向强化学习”

下面你可以看到普通强化学习目标和逆向强化学习目标之间的区别:

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

图三。强化学习 vs 逆向强化学习(来源

传统的强化学习的目标是在给定的情况下找到最佳的行为或行动来最大化回报。例如,在自动驾驶汽车领域,模型保持在道路中心的每一个时刻都会收到一个小奖励,如果它闯红灯,则会收到一个负奖励。该模型在环境中移动,试图找到最佳的行动路线,以获得最大的回报。因此,强化学习模型被输入奖励函数,并试图找到最佳行为。

但是,有时候奖励作用并不明显。为了说明这一点,反向强化学习被输入一组行为,并试图找到最佳的奖励函数。鉴于这些行为,*人类真正想要的是什么?*IRL 的最初目标是在给定行为是最有利行为的假设下揭示奖励函数。然而,我们知道情况并非总是如此。按照这一逻辑,这一过程可能有助于我们揭示人类存在偏见的方式,这反过来将允许我们通过意识来纠正未来的错误。

有偏比较算法

另一个相关和及时的资源是线性离题的插曲“种族主义,刑事司法系统和数据科学”。在这一集中,凯蒂和本机智地讨论了 COMPAS,这是一种代表替代制裁的矫正罪犯管理概况的算法。在美国一些州,法官在量刑时使用这种算法来预测被告再次犯罪的可能性是合法的。

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

图四。J. Dressel 等人,科学进展,EAAO55850,2018 ( 来源)

然而,各种研究挑战了算法的准确性,发现种族歧视的结果尽管缺乏种族作为输入。线性离题探讨了种族偏见结果出现的潜在原因,并以一系列挥之不去的强大的,发人深省的伦理问题结束:

一个算法的合理输入是什么?当你考虑整体背景时,如果一个算法引入了不公平,那么它是否公平?投入来自哪里?输出将在什么环境中部署?当将算法插入到已经复杂且具有挑战性的流程中时,我们是否花费了足够的时间来检查上下文?我们试图自动化什么,我们真的想自动化它吗?

凯蒂在这一集的结尾巧妙地提出的最后一串问题是非常紧迫的问题,给人留下了持久的印象,因为我是机器学习对社会有益的巨大支持者。我确信,这些考虑将成为我打算用算法解决的每个复杂的、数据驱动的社会问题的一个组成部分。

最后的想法和反思

这些模型在很大程度上伤害了许多人,同时提供了一种虚假的安全感和中立感,但也许我们可以从中获得的是承认我们的数据中不可否认的代表性不足。当算法显然不适用于某些少数群体时,这些群体的数据缺乏是很明显的。

偏见是我们的责任,至少要认识到,这样我们才能推动减少偏见的举措。

此外,在“我们该如何应对人工智能中的偏见”中,James Manyika、Jake Silberg 和 Brittany Presten 提出了管理团队最大限度提高人工智能公平性的六种方式:

  1. 保持对人工智能和伦理的最新研究。
  2. 建立一个在部署人工智能时可以减少偏差的流程
  3. 围绕潜在的人类偏见进行基于事实的对话
  4. 探索人类和机器可以整合起来对抗偏见的方法
  5. 在偏见研究方面投入更多努力,以推动该领域的发展
  6. 通过教育和指导投资于人工智能领域的多样化

总的来说,我对机器学习帮助人类决策的能力感到非常鼓舞。既然我们意识到了数据中的偏差,我们就有责任采取措施来减轻这些偏差,这样我们的算法才能真正提供一个中立的评估。

鉴于这些不幸的事件,我希望在未来几年,会有更多关于人工智能监管的对话。已经有一些很棒的组织,如 AI Now、等,致力于围绕理解人工智能的社会影响进行研究。现在,我们有责任继续这一对话,走向一个更加透明和公正的社会。

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

图五、AI Now 首页(来源)

用于图二的物品:

  1. 人工智能把人送进监狱——而且做错了
  2. 运行我们生活的算法是种族主义和性别歧视的。见见试图修理她们的女人
  3. 谷歌在其视觉人工智能产生种族主义结果后道歉
  4. 医疗保健算法存在偏差,结果可能是致命的
  5. 自动驾驶汽车更容易撞上黑人
  6. 为什么亚马逊的招聘人工智能对女性有偏见一点也不奇怪

我们的问答机器人& Python 语言的 WordCloud

原文:https://towardsdatascience.com/our-q-a-bot-wordcloud-in-python-c8e7593a3256?source=collection_archive---------66-----------------------

创建首个个性化单词云的 whistlestop 指南

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

Candide 是一个植物爱好者社区。我们的用户经常会来到我们的 feed,询问关于他们的植物的问题。

上个月,我们推出了问答机器人(Q&A Bot ):这是一个试图回答用户提出的任何问题的系统,利用我们文章中的智慧和应用程序中更广泛的内容。

我对我们收到的问题的内容进行了分析,并使用 Python 的 WordCloud 包创建了一个可视化的单词云。我不会详细说明代码是如何工作的,但是如果你想看这个,请在下面评论,我很乐意写一个关于这个主题的教程。

因此,准备好大约 2500 个问题,由 1000 多名 Candide 用户通过问答机器人提交给我们,让我们开始吧!

首先,我们导入将要使用的库:numpypandaswordcloudmatplotlib.pyplot

import numpy as np
import pandas as pd
from wordcloud import WordCloud, STOPWORDS

import matplotlib.pyplot as plt

然后,我们将数据加载到熊猫数据框架中。

# Dataframe
df = pd.read_csv("questions.csv", index_col=0)

接下来,我们将所有提交的问题合并到一个文本中,并确保全部是小写字母,如下所示:

# Combine all questions into one text
text = " ".join(question for question in df.text)
# Make sure all words are lower case
text = text.lower()

我们现在准备使用cloudwordmatplotlib来生成和绘制我们的单词云,如下所示:

# Generate a wordcloud
stopwords = STOPWORDS
wordcloud = WordCloud(background_color="white", max_words=1000, stopwords=stopwords)
wordcloud.generate(text)

# Plot
plt.figure(figsize=[20, 10])
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

瞧啊!结果看起来像这样:

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

Word Cloud,使用提交给我们问答机器人的问题

热门词汇是:植物、花和叶子🌱。没什么好惊讶的🙂!

现在,如果我们想要个性化输出,我们可能想要让这个单词云有一个特定的形状。为此,我们将使用以下机器人植物的剪影,由我的设计师同事好心提供, Kat (这毕竟是一个关于植物问题的 Q & A Bot!)

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

使用上面的图像和下面的代码:

# Personalised cloud of words
path = "/Users/amine/code/HackDayMay2020/robot-plant.png"
mask = np.array(Image.open(path))
wordcloud = WordCloud(background_color="white", max_words=1000, mask=mask, stopwords=stopwords)
wordcloud.generate(text)

# Plot
plt.figure(figsize=[20, 10])
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

我们得到了一个最终的结果,一堆单词组成了我们的机器人工厂的形状!

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

机器人工厂!

最后,我们不应该忘记将我们的图像保存到文件中,代码如下:

# Save to file
wordcloud.to_file("robot-plant-word-cloud.png")

在下一篇教程中,我将分析用户的问题是如何随着时间和季节变化的。如果你想让我制作一个更深入的教程来解释 wordcloud 是如何工作的,请在评论中告诉我!

参考资料和资源

  1. WordCloud for Python 文档https://github.com/amueller/word_cloud
  2. word cloud 项目的 Github 代码https://github.com/amueller/word_cloud
  3. 用 Python 生成 word cloud作者 Duong Vuhttps://www . data camp . com/community/tutorials/word cloud-Python
  4. 用 Python 生成单词云由 SumedhKadamhttps://www.geeksforgeeks.org/generating-word-cloud-python/

我们的标签

原文:https://towardsdatascience.com/our-tags-1d4f6b370db3?source=collection_archive---------18-----------------------

如果您正在寻找某个特定主题的最新内容,探索我们的标签将会很有帮助。

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

照片由阿尔方斯·莫拉莱斯Unsplash 拍摄

下面列出了我们最常用的标签。如果你想搜索一个特定的标签,你可以去http://towards data science . com/tagged/[tag]然后用你要找的术语替换[tag]。

您还可以通过 RSS feed 访问标签,如这里的所述。例如,您可以通过这里获得我们的“数据科学”标签的 RSS 提要:https://medium . com/feed/forward-data-science/tagged/data-science

请注意,Medium 的应用程序目前不支持标签。

数据科学

机器学习

软件工程

编程

为什么“目的证明手段是正当的?”是个错误的问题

原文:https://towardsdatascience.com/outcome-bias-versus-moral-philosophy-cb82f42c4437?source=collection_archive---------22-----------------------

结果偏差与道德哲学

在最近的一篇文章中,我写了关于结果偏差和决策分析的核心原则:

决策的质量应该仅使用决策者在做出决策时可用的信息来评估。

如果你是这个话题的新手,我推荐你看看我的温柔介绍。这篇文章是我的书呆子同伴的脚注。

道德哲学的三个主要视角

  • 结果主义:考虑后果!
  • 义务论:尽你的责任!
  • 德性伦理:要有德性!

道德宣传还是决策情报?

不要把 结果偏差 误解为反对结果主义者 道德观的宣传。

如果你一直被结果偏差的平淡解释所困扰,这种解释反复无常地使用*“意图”“结果”,那么你会认为这是有道理的*

事实上,结果偏差的心理学现象并不偏爱现代道德哲学的主题,也没有对美德伦理学或功利主义等领域做出陈述。

那么,为什么会有误解呢?

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

图片:来源

混乱的根源

  1. 认为道德哲学的核心问题是“结果证明了手段的正当性吗?”这是错误的
  2. 认为*“决定和结果”“意图和结果”的同义词是错误的。*

如果你同时犯了这两个错误,你可能会形成这样的印象:一个毫无争议的决策建议(避免结果偏差)侵犯了哲学中的公开问题。**

“目的证明手段是正当的吗?”

啊,语言;好困惑!尤其是对于老式的精粹短语。原来“目的”有多重含义,包括“结果”和“目标”如果你习惯于将“结果”理解为“结果”,那么你可能会发现在那里添加一个额外的单词是有帮助的…

现代结果主义与结果无关

结果主义的哲学观点不是通过一个行为的实际后果(结果)来判断其道德性,而是通过做出决定时的可能的/可预见的/预期的(取决于你最喜欢的口味)结果来判断,比如在中,“预期的结果证明了手段的正当性。”

结果偏差理论不是对结果主义的批评。

**技术细节:哲学为了完整保留了一个动物园,里面有各种各样的-主义,包括多种结果主义(其中最著名的是古典功利主义)。哲学家们普遍批评为荒谬的是一种叫做“实际结果主义”的东西科学家们会对这一特殊品种提出异议,但幸运的是我们不必这样做:哲学家们代表我们认为这是荒谬的。如果我们把这个亚种从我们的可行主义列表中移除,那么现代结果主义者可以从中选择的口味还有很多。我这里指的就是这个系列。

现代意向性也不是关于结果的

一个意向性的哲学观点(例如各种各样的美德伦理学义务论中的一种)从与美德或责任等概念的一致性来判断一个决定的道德性,例如,“手段比预期的结果更重要。”

结果偏差理论不是对意向性的批判。

转移注意力的例子:偷窃是错的吗?

“如果你在试图偷一个溺水的人的手表时不小心救了他,这是道德行为吗?”

我看到这个例子流传开来,博客上说结果主义者会说,而意向主义者会说。就我的理解,那是一种误解。

结果主义者不会宽恕那种快乐的意外作为一种道德行为。(也没有什么迫使他们一起分析这两个问题来判断道德。营救溺水者可以被视为与盗窃完全不同的道德问题。)大多数结果主义的信徒会谴责这种行为,如果小偷想通过偷窃使世界其他地方变得更糟的话。

但是,如果小偷想救一个饥饿的孩子,而这个孩子除了典当手表之外,没有别的办法养活,那该怎么办呢?那些有意向主义倾向的人可能会回答说“偷窃行为在道德上总是错误的,无论如何”而那些有结果主义倾向的人可能不同意。当你遇到由谁来设定预期的问题时,事情就变得棘手了:如果小偷找不到任何其他方式来实现更好的预期结果,但社会可能会不敢苟同呢?社会是根据 T4 当时知道的来判断,还是根据小偷知道的来判断?被告知是一种责任吗?抓住一个朋友,开始辩论吧!开放式问题的开放是有原因的。**

掌握好时态

如果你总结了可行的现代 -isms-ologies ,一定要掌握好时态。所有这些都是关于现在时态的道德评价——只使用决策/行动时已知的东西——这正是决策科学喜欢的方式。

  • 结果主义:我行动的结果会是什么?
  • 义务论:我的行为符合我的职责吗?
  • 美德伦理:我的行为是由美德驱动的吗?

一旦你用适当的时态思考,如何正确对待道德决策在哲学上是一个未解决的问题,我不会去解决它。(不过,你所在国家的法律通常会代表你做出选择。)

道德哲学:“预期的结果证明了手段的正当性吗?”

决策科学说什么

只要你不谴责决策者没有使用水晶球,决策科学就不会从技术上反对你的道德观点。

无论你选择哪种思想流派(或它们的混合),决策科学家都会鼓励你根据当时已知的情况来分析情况。例如,如果你最喜欢道义论,那么如果你根据一个人目前的职责而不是他们在行动时的职责进行评估,我们会感到惊讶。

决策科学:“不要谴责决策者没有使用水晶球。”

当我们告诉你避免结果偏差时,我们指的是判断决策者的能力并形成有效的决策策略。我们不争论道德,因为那是不同学科的范围。

现在是完全不同的东西…

感谢阅读!如果你在这里玩得开心,并且对人工智能感兴趣,这里有一个初学者友好的介绍供你娱乐:

在这里欣赏整个课程播放列表:bit.ly/machinefriend

与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?用这个表格联系。

异常值检测——理论、可视化和代码

原文:https://towardsdatascience.com/outlier-detection-theory-visualizations-and-code-a4fd39de540c?source=collection_archive---------18-----------------------

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

什么是离群点检测?

离群点检测也称为异常检测、噪声检测、偏差检测或异常挖掘。没有普遍接受的定义。(Grubbs,1969)的早期定义是:异常值,是指明显偏离样本中其他成员的值。(Barnett 和 Lewis,1994)最近的定义是:

似乎与该组数据的其余部分不一致的观察结果。

原因

直接从这篇优秀的文章来看,离群值最常见的原因有:

  • 人为错误 —数据录入错误
  • 仪器误差 —测量误差
  • 实验错误 —数据提取或实验计划/执行错误
  • 故意的 —为测试检测方法而制造的虚拟异常值
  • 数据处理错误 —数据操作或数据集意外突变
  • 采样错误 —从错误的或各种来源提取或混合数据
  • 自然 —不是错误,数据中的新奇

应用程序

根据(Hodge,V.J .和 Austin,j .,2014)利用异常值检测的应用程序列表如下:

  • 欺诈检测 —检测信用卡欺诈申请,
    陈述利益或检测信用卡或手机的欺诈使用。
  • 贷款申请处理 —检测欺诈申请或
    潜在的问题客户。
  • 入侵检测 —检测计算机
    网络中的未授权访问。
  • 活动监控 —通过监控
    电话活动或股票市场中的可疑交易来检测手机欺诈。
  • 网络性能 —监控计算机
    网络的性能,例如,检测网络瓶颈。
  • 故障诊断 —监测过程,以检测
    航天飞机上的电机、
    发电机、管道或航天仪器的故障。
  • 结构缺陷检测 —监控生产线以
    检测有缺陷的生产运行,例如有裂缝的横梁。
  • 卫星图像分析——识别新颖特征或误分类特征
  • 检测图像中的新奇事物 —用于机器人或监视
    系统。
  • 运动分割 —检测独立于背景运动的图像特征。
  • 时序监控 —监控安全关键应用
    ,如钻孔或高速铣削。
  • 医疗状况监测 —如心率监测器。
  • 药物研究 —识别新的分子结构。
  • 检测文本中的新颖性 —检测新闻故事的开始,用于
    话题检测和跟踪,或用于交易者确定股票、商品、外汇交易故事,表现优于或劣于
    商品。
  • 检测数据库中的意外条目—用于数据挖掘,以
    检测错误、欺诈或有效但意外的条目。
  • 在训练数据集中检测标签错误的数据

方法

有 3 种异常值检测方法:

1.在没有数据先验知识的情况下确定异常值。这类似于无监督聚类。
2。模拟正常和异常。这类似于监督分类,需要标记数据。
3。只模拟常态。这被称为新颖性检测,类似于半监督识别。它需要属于正常类的标记数据。

我会先处理接近。这是最常见的情况。大多数数据集没有关于异常值的标记数据。

分类学

根据 Ben-Gal I .(2005)离群点检测方法可分为单变量方法和多变量方法。离群点检测方法的另一个基本分类是在参数(统计)方法和非参数方法之间,参数(统计)方法假设观察值的已知基本分布,非参数方法是无模型的,如基于距离的方法和聚类技术。

资料组

我将使用 Pokemon 数据集,并对 2 列 [‘HP ‘,’ Speed’] 执行异常值检测。这是一个有趣的数据集,它的观察值很少,计算速度很快,很多人都很熟悉它。仅选择两列仅用于可视化目的(二维)。观察散点图中的结果。这些方法可以在多维中缩放。

离群点检测算法

将遵循的算法是:

  • 隔离林
  • 扩展隔离林
  • 局部异常因素
  • 数据库扫描
  • 一班 SVM
  • 以上的合奏

代码和可视化

这篇文章的代码在我的 GitHub 上。为了保持简洁,我不会在文章中包含代码。

读取数据后,前五行是这样的:

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

隔离森林

  • 隔离森林和任何树集合方法一样,是建立在决策树的基础上的。在这些树中,通过首先随机选择一个特征,然后在所选特征的最小值和最大值之间选择一个随机分割值来创建分区。
  • 为了在树中创建分支,首先选择一个随机特征。然后,为该特征选择一个随机分割值(在最小值和最大值之间)。如果给定的观察值具有该特征的较低值,则所选的观察值遵循左分支,否则遵循右分支。这个过程一直持续到孤立一个点或达到指定的最大深度。
  • 原则上,异常值比常规观测值更少出现,并且在值方面与常规观测值不同(在特征空间中,它们离常规观测值更远)。这就是为什么通过使用这种随机划分,它们应该被识别为更靠近树的根(更短的平均路径长度,即,观察在树中从根到终端节点必须经过的边的数量),需要更少的分裂。

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

关于隔离林的更多信息:

我将使用 sklearn 库中的 IsolationForest 。在定义算法时,有一个称为污染的重要参数。它是算法认为是异常值的观察值的百分比。我设为等于 2% 。我们将 X (2 个特征 HP 和速度)拟合到算法中,并使用 fit_predict 在 X 上也使用它。这产生了简单的异常值(-1 是异常值,1 是内部值)。我们还可以使用函数 decision_function 来获得 Isolation Forest 给每个样本的分数。

运行该算法后,发现了 785 个内点和 15 个外点。

让我们画出结果。

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

或者,我们可以绘制纯分数,而不仅仅是离群值/内部值。

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

从视觉上看,这 15 个异常值似乎是合法的,并且在数据点的主要斑点之外。

我们可以做一个更高级的可视化,除了内部和外部显示隔离森林的决策边界。

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

颜色越深,该区域的异常值越大。

最后,我们可以看到分数的分布。

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

这种分布很重要,有助于我们更好地确定我们案例中正确的污染值。如果我们改变污染值,isoletionForest_scores 将改变,但分布将保持不变。该算法将调整分布图中异常值的临界值。

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

扩展隔离林

隔离林有一个缺点:它的决策边界要么是垂直的,要么是水平的。因为线只能平行于轴,所以存在包含许多分支切割和仅一些或单个观察值的区域,这导致一些观察值的不正确异常分数。

扩展隔离林选择 1)分支切割的随机斜率和 2)从训练数据的可用值范围中选择的随机截距。这些项实际上是线性回归线。

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

有关扩展隔离林的更多信息:

sklearn 中没有实现扩展隔离林,但是在 Github 上有

我们必须将它的分数乘以-1,以便与其他算法的分数具有相同的形式。

扩展隔离林不提供普通的离群值和内联值(as -1 和 1)。我们只是通过将分数中最低的 2%作为异常值来创建它们。这个算法的分数和基本的隔离林是不一样的。这里所有的分数都是负数。

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

如果你检查代码,你可能会注意到我在这个图中使用了 cmap=plt.cm.Blues ,而不是前面的 cmap=plt.cm.Blues_r (反向)。我们可以看到不同异常区域之间的过渡更加平滑。

该算法发现了 16 个异常值。

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

局部异常因素

  • LOF 是一种计算方法,通过查看某一点的相邻点来找出其密度,并在稍后将其与其他点的密度进行比较。
  • 点的 LOF 表示该点相对于其相邻点的密度。如果一个点的密度远小于其相邻点(≫1 附近)的密度,则该点远离密集区域,因此是异常值。
  • 这是有用的,因为如果整个区域不是数据点的全局空间中的外围区域,则并非所有方法都不会识别相对于附近的点簇为异常值的点(局部异常值)。

点 P 的 LOF 会有一个:

  • 高值 if → P 远离其邻居且其邻居具有高密度(靠近其邻居)(LOF =(高距离和)x(高密度和)=高值)
  • 如果-> P 远离其邻居,但其邻居的密度较低,则值较低(LOF =(高总和)x(低总和)=中间值)
  • 如果-> P 靠近其邻居且其邻居的密度较低,则值较低(LOF =(低总和)x(低总和)=低值)

关于局部异常因素的更多信息:

运行 sklearn 库中的代码后,它确定了 21 个局部异常值。

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

我们可以创建另一个有趣的图,其中局部异常值越大,其周围的圆圈就越大。

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

这个算法和之前的有很大不同。它也能发现异常值,但方式不同。它发现局部异常值。你是否注意到在图的主体内有异常值?

基于密度的噪声应用空间聚类

一种经典的聚类算法,其工作原理如下:

  • 随机选择一个尚未分配给聚类或指定为异常值的点。通过查看在ε距离内其周围是否至少有 min_samples 个点来确定其是否为核心点。
  • 创建该核心点及其ε距离内所有点(所有可直接到达的点)的聚类。
  • 找到聚类中每个点的ε距离内的所有点,并将它们添加到聚类中。找到所有新添加的点的ε距离内的所有点,并将这些点添加到聚类中。冲洗并重复。(即执行“邻域跳跃”以找到所有密度可达的点并将它们添加到聚类中)。

对于我们的示例,在调整了ε参数后,它发现了 13 个异常值。

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

该算法不提供异常值强度的分数。

一级 SVM

  • 单类分类器适用于仅包含正常类样本的训练数据集,但也可用于所有数据。一旦准备好,该模型被用于将新的例子分类为正常或不正常。
  • 与标准 SVM 的主要区别在于,它是以无监督的方式拟合的,并且不像 c 那样提供用于调整余量的正常超参数。相反,它提供了一个超参数“nu ”,该参数控制支持向量的灵敏度,并且应该调整到数据中异常值的近似比率。

更多关于一级 SVM

运行算法后,我得到以下散点图

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

在这个数据里好像行不通。找不到更好的。对于其他 nu 值,离群值比内值多。如果有人有任何想法,请分享,我会更新!

全体

最后,让我们将这 5 种算法结合起来,形成一个健壮的算法。我将简单地添加离群列,离群列为-1,内联列为 1。

我不会用一等的 SVM。

将结果相加后,我们得到:

data['outliers_sum'].value_counts()value  count 
    4    770
    2     15
   -4      7
   -2      7
    0      1

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

outliers_sum=4 的观察值意味着所有 4 个算法都同意它是一个内点,而对于完全的外点一致性,和是-4。

我们先来看看对于哪 7 个口袋妖怪所有算法都同意离群值。我们也可以将 sum=4 的观察值作为内值,其余的作为界外值。这取决于我们。

data.loc[data[‘outliers_sum’]==-4][‘Name’]121              Chansey
155              Snorlax
217            Wobbuffet
261              Blissey
313              Slaking
431    DeoxysSpeed Forme
495             Munchlax

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

个别图片取自 pokemondb

这些是我们在惠普和速度上的异常值!

感谢阅读!

用 RNN 自动编码器检测异常值

原文:https://towardsdatascience.com/outlier-detection-with-rnn-autoencoders-b82e2c230ed9?source=collection_archive---------27-----------------------

利用重构自动编码器模型检测时间序列数据中的异常。

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

由作者生成的图像。

注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

TL DR:Historic-Crypto PackageCode。**

什么是异常?

异常值,通常被称为离群值,是指不符合数据序列总体行为的数据点、数据序列或数据模式。因此,异常检测的任务是检测与更广泛的数据中存在的模式不一致的数据点或序列。

异常数据的有效检测和删除可以为许多业务功能提供非常有用的洞察力,例如检测网站中嵌入的断开链接、互联网流量峰值或股票价格的剧烈变化。将这些现象标记为异常值,或制定预先计划的响应可以节省企业的时间和金钱。

异常的类型?

异常数据通常可以分为三个不同的类别,时间变化电平移动

加性异常值 表现为数值的突然大幅增加或减少,可由外源或内源因素驱动。附加异常值的例子可能是由于在电视上出现而导致的网站流量的大幅增加(外生),或者由于强劲的季度表现而导致的股票交易量的短期增加(内生)。

时间变化 的特点是序列较短,不符合数据中更广泛的趋势。例如,如果网站服务器崩溃,对于一系列数据点,网站流量将降至零,直到服务器重启,此时正常流量将恢复。

电平转换 是大宗商品市场的常见现象,因为对电力的高需求与恶劣的天气条件有着内在联系。因此,由于天气驱动的需求曲线和可再生能源发电曲线的变化,可以观察到夏季和冬季电价之间的“水平变化”。

什么是自动编码器?

自动编码器是设计用来学习给定输入的低维表示的神经网络。自动编码器通常由两个组件组成:一个 编码器 ,它学习将输入数据映射到更低维度的表示;一个 解码器 ,它学习将表示映射回输入数据。

由于这种架构,编码器网络迭代地学习有效的数据压缩函数,该函数将数据映射到较低维度的表示。在训练之后,解码器能够成功地重建原始输入数据,因为重建误差(输入和由解码器产生的重建输出之间的差)是整个训练过程的目标函数。

实施

现在我们已经理解了自动编码器模型的底层架构,我们可以开始实现这个模型了。

第一步是安装我们将使用的库、包和模块:

其次,我们需要获得一些数据进行分析。本文使用 Historic-Crypto 包获取从‘2013–06–06’到现在的历史比特币(‘BTC’)数据。下面的代码还生成每日比特币回报和当天价格波动,然后删除任何丢失的数据行并返回数据帧的前 5 行。

现在我们已经获得了一些数据,我们应该直观地扫描每个序列,寻找潜在的异常值。下面的plot_dates_values函数支持数据框中包含的每个系列的迭代绘图。

我们现在可以迭代调用上述函数,为比特币的交易量、收盘价、开盘价、波动率和回报率生成 Plotly 图表。

由作者生成的图像。

值得注意的是,2020 年交易量出现了大量峰值,调查这些峰值是异常的还是更广泛系列的指示可能是有用的。

由作者生成的图像。

2018 年收盘价存在明显的飙升,随后暴跌至技术支持水平。然而,积极的趋势广泛存在于所有数据中。

由作者生成的图像。

每日开盘价遵循与上述收盘价相似的模式。

由作者生成的图像。

价格波动在 2018 年和 2020 年都出现了一些明显的峰值。因此,我们可以调查这些波动峰值是否被自动编码器模型视为异常。

由作者生成的图像。

由于回报序列的随机性质,我们选择测试比特币每日交易量中的异常值,如Volume所示。

因此,我们可以开始自动编码器模型的数据预处理。数据预处理的第一步是确定训练数据和测试数据之间的适当拆分。下面概述的generate_train_test_split功能支持按日期拆分培训和测试数据。在调用下面的函数时,生成两个数据帧,即training_datatesting_data作为全局变量。

为了提高模型的准确性,我们可以“标准化”或缩放数据。该函数缩放上面生成的training_data数据帧,保存training_meantraining_std用于以后标准化测试数据。

注: 使用相同的尺度对训练和测试数据进行尺度转换是很重要的,否则尺度的差异会产生可解释性问题和模型不一致。

正如我们在上面调用的normalise_training_values函数,我们现在有一个包含标准化训练数据的 numpy 数组,称为training_values,我们已经将training_meantraining_std存储为用于标准化测试集的全局变量。

我们现在可以开始生成一系列可用于训练自动编码器模型的序列。我们定义该模型将被提供 30 个先前的观察值,提供形状的 3D 训练数据(2004,30,1):

现在我们已经完成了训练数据处理,我们可以定义自动编码器模型,然后根据训练数据拟合该模型。define_model函数利用训练数据形状来定义适当的模型,返回自动编码器模型和自动编码器模型的摘要。

随后,model_fit函数在内部调用define_model函数,然后向模型提供epochsbatch_sizevalidation_loss参数。然后调用这个函数,开始模型训练过程。

一旦对模型进行了训练,绘制训练和验证损失曲线以了解模型是否存在偏差(欠拟合)或方差(过拟合)是很重要的。这可以通过调用下面的plot_training_validation_loss函数来观察。

由作者生成的图像。

值得注意的是,训练和验证损失曲线在整个图表中趋于一致,验证损失仍然略大于训练损失。给定形状和相对误差,我们可以确定自动编码器模型没有欠拟合或过拟合。

现在,我们可以定义重建误差,这是自动编码器模型的核心原则之一。重建误差表示为train_mae_loss,重建误差阈值确定为train_mae_loss的最大值。因此,当计算测试误差时,任何大于最大值train_mae_loss的值都可以被认为是异常值。

由作者生成的图像。

上面,我们将training_meantraining_std保存为全局变量,以便使用它们来缩放测试数据。我们现在定义normalise_testing_values函数来缩放测试数据。

随后,在testing_dataVolume列调用该函数。因此,test_value被具体化为一个 numpy 数组。

接下来,定义generate_testing_loss函数,计算重建数据和测试数据之间的差异。如果任何值大于train_mae_loss的最大值,它们被存储在全局异常列表中。

此外,还介绍了试验 MAE 损失的分布,以便与训练 MAE 损失进行直接比较。

由作者生成的图像。

最后,异常值如下图所示。

由自动编码器模型表征的异常数据用橙色表示,而符合的数据用蓝色表示。

由作者生成的图像。

我们可以看到,2020 年很大一部分比特币交易量数据被认为是异常的——可能是由于新冠肺炎推动的零售交易活动增加?

尝试 Autoencoder 参数和数据集——看看你能否在比特币收盘价中找到任何异常——或者使用historical-Crypto库下载不同的加密货币!

编码快乐!

离群值——为什么它很重要?

原文:https://towardsdatascience.com/outlier-why-is-it-important-af58adbefecc?source=collection_archive---------16-----------------------

极端数据的故事

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

威尔·梅尔斯在 Unsplash 上拍照

什么是离群值?根据维基百科的说法,离群值是数据集中与其他数据或观察结果显著不同的数据点。就看上图,有一系列的瓶子,但是有一个颜色不一样。这个瓶子就是我们所说的异常值。

异常值本质上不同于噪声。异常值是与其他数据相比明显不同的数据,而噪声是随机误差或方差。离群值是数据的一部分,但噪声只是一个随机误差(可能被错误标记或出错,甚至丢失数据)。

许多参数统计,如均值、相关性,以及基于这些的每个统计对异常值都很敏感。由于标准统计程序或模型的假设,如线性回归和方差分析也是基于参数统计的,因此异常值会打乱您的分析。

那么,数据集中的离群值呢?我们是如何分类的?我们如何检测它?为什么是必不可少的?如何处理异常值?让我们开始吧。

离群分类

通常,离群值可以分为两类:

  • 单变量异常值。这是一个出现在单个变量中的异常值,或者换句话说,是单个列中的异常值。下面一个例子来看看。

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

在上面的薪金列中,存在一个异常值(5000)。这个异常值只出现在薪金列中,这就是为什么这个异常值被归类为单变量异常值。

  • 多元异常值。这是发生在两个(双变量)或多个(多变量)变量的联合组合中的异常值,与单变量异常值相反。

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

作者创建的图像

例如,上图是工资和年龄变量之间的散点图。在该图中,两个变量的关联存在两个二元异常值。在单个变量中,数据可能不是异常值,但当它与另一个变量相关联时,可能会出现异常值。这就是我们所说的多元异常值。

多元异常值只存在于 n 维空间中(n 个特征),其中 n 大于 1。当 n 数大于 3 时,我们可能很难想象或想象它。这就是为什么我们需要训练一个模型来为我们做这件事。

根据环境的不同,异常值也可以分为三种不同的类型:

  • **全局离群值(点离群值)。**这是一个单独的数据点,相对于其他数据而言,被视为异常值。以上多元异常值图中的异常值可视为全局异常值。
  • **语境离群值。**这个异常值不同于另一个异常值,因为我们需要领域知识或上下文理解。我们可以将上下文异常值定义为基于所选上下文显著不同的数据点。例如,你认为加拿大多伦多 12 度的气温会被认为是异常值吗?这取决于季节(冬天或夏天)。可能不会在夏天,但会在冬天。
  • 集体离群。尽管单个数据可能不是异常值,但相对于整个数据集的数据集合(子集)明显不同,这就是异常值。下面我们来看一个例子。

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

作者创建的图像

单独的数据可能不是离群值,但作为一个整体,它会成为离群值。这就是我们所说的集体离群

检测异常值

一般来说,没有一种方法可以说这种技术是检测异常值的最佳方法。重要的是我们理解**为什么我们想要找到异常值。**因此,检测异常值的上下文比技术本身更重要。此外,你必须有一个清晰的背景来区分噪音和异常值,因为有时人们会把事情搞混。

另一个我们必须要问的问题,是单变量/多变量离群值吗?变量分布是否满足参数/非参数条件?

在这篇文章中,我将只展示一些经常使用的方法,而没有更深入的理解,因为我在这篇文章中的目的是说明为什么离群值是重要的。

一些重要的技术包括:

还有很多技术,但就像我之前说的。没有一种技术是检测异常值的最佳技术。我们必须分析结果,而不是依赖技术本身。

异常值重要性

我们已经知道异常值是一个极端的数据或与其他数据有显著差异的数据,但为什么它很重要呢?

一个原因正如我上面解释的;许多统计过程都会受到异常值的影响。由于异常值的存在,这些方法的统计功效会降低;因此,结果不可靠。那么,删除异常值是否会更好?如果你只关心统计结果,那么移除异常值可能是一个选择,但是在我们放弃它之前,我们仍然需要问几个问题。

  • 异常值是因为测量错误还是输入错误?—那么它就是一个噪声,应该被丢弃(或者改变,如果你知道数据的真正价值)
  • 异常值不会改变结果,但会影响假设吗?在这种情况下,你可以丢弃离群值,也可以不丢弃。看看下面的例子,不管有没有异常值,回归线仍然保持不变。

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

作者创建的图像

  • 异常值会影响统计结果和假设吗?在这种情况下,我们不能仅仅放弃离群值。尝试在有或没有异常值的情况下运行分析,看看结果如何。让我们看看下面的例子;如果我们去掉异常值,回归线就会移动。这个异常值肯定是数据的一部分,需要一个合理的结果来丢弃它。

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

作者创建的图像

  • 离群值是否产生了显著的关联?如果是这样,明智的做法是丢弃异常值。下面我们来看一个例子;数据点之间肯定没有关系。有了离群值,就创建了关联。这意味着回归系数不能真实地描述两个变量之间的关系。

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

作者创建的图像

很明显,从统计学的角度来看,有一些排除异常值的建议。如果没有,可以选择转换数据以获取高数值或使用不同的模型。

这些“异常值解决方案”的问题是,它们也会导致问题——有偏差的参数估计和权重不足或有效值剔除。

我们需要记住什么;并非所有的离群值都一样。有些影响很大,有些则完全没有。有些是有效且重要的数据值。有些仅仅是错误或噪音。

因此,我不会给出任何建议,而是花些时间搞清楚几件事:

  1. 为什么要找出离群值?您可能想要查看异常值,因为您对异常感兴趣。想想你的问题是什么。
  2. 异常值是否“实际上”导致了结果、影响或假设的任何问题?
  3. 离群值从何而来?这可能需要深入的分析和领域专业知识。此外,你不能总是告诉它从哪里来,但尝试考虑不同的可能性,因为它可以帮助告知最佳的前进方式。

结论

无论你采取哪种方法,你都需要了解你的数据并做好你的研究。你也可以尝试不同的方法,看看哪种方法更有理论意义,更适合回答你的问题。我的建议是花点时间做离群点研究。

如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。

如果您没有订阅为中型会员,请考虑通过我的推荐订阅。

R 中的异常值检测

原文:https://towardsdatascience.com/outliers-detection-in-r-6c835f14e554?source=collection_archive---------17-----------------------

了解如何通过描述性统计、Hampel 过滤器、Grubbs、Dixon 和 Rosner 异常值测试来检测 R 中的异常值

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

威尔·迈尔斯的照片

介绍

一个 离群值是一个值或一个观察值,它远离其他观察值,也就是说,一个与其他数据点显著不同的数据点。Enderlein (1987)走得更远,因为作者认为异常值是偏离其他观察值如此之多的值,人们可能会假设不同的基本采样机制。

在称之为异常值之前,必须将一个观察值与对同一现象的其他观察值进行比较。事实上,与普通人群相比,身高 200 厘米(美国身高 6 英尺 7 英寸)的人最有可能被视为异常值,但如果我们测量篮球运动员的身高,这个人可能不会被视为异常值。

异常值可能是由于观察到的现象中固有的可变性造成的。例如,在收集工资数据时,经常会出现异常值,因为有些人比其他人赚得更多。离群值也可能是由于实验、测量或编码误差引起的。例如,当对受试者的体重进行编码时,人的体重 786 kg (1733 磅)显然是错误的。她或他的体重很可能是 78.6 公斤(173 磅)或 7.86 公斤(17 磅),这取决于测量的是成人还是婴儿的体重。

因此,有时正式区分两类异常值是有意义的:(一)极端值和(二)错误。极值在统计学和哲学上更有趣,因为它们是可能的,但不太可能的答案。(感谢 Felix Kluxen 的宝贵建议。)

在本文中,我介绍了几种检测 R 中异常值的方法,从简单的技术如描述性统计(包括最小值、最大值、直方图、箱线图和百分位数)到更正式的技术如 Hampel 过滤器、Grubbs、Dixon 和 Rosner 异常值测试。

虽然在进行统计分析之前,对于是否应该从数据集中移除异常值没有严格或唯一的规则,但至少移除或估算由于实验或测量误差(如人的体重为 786 kg (1733 磅))引起的异常值是很常见的。一些统计测试要求没有异常值,以便得出合理的结论,但是并不建议在所有情况下都删除异常值,必须谨慎操作。

本文不会告诉您是否应该删除异常值(也不会告诉您是否应该用中值、平均值、众数或任何其他值对它们进行估算),但它会帮助您检测它们,以便作为第一步验证它们。在他们被验证之后,你可以选择在你的分析中排除或包括他们(这通常需要研究者方面深思熟虑的思考)。移除或保留异常值主要取决于三个因素:

  1. 你的分析和研究问题的领域/背景。在某些领域中,移除异常值是很常见的,因为它们通常是由于过程故障而出现的。在其他领域,离群值被保留是因为它们包含有价值的信息。还会发生两次分析,一次有异常值,一次没有异常值,以评估它们对结论的影响。如果结果由于一些有影响的值而发生剧烈变化,这应该提醒研究者做出过于雄心勃勃的声明。
  2. 您将要应用的测试对于异常值的存在是否稳健。例如,一个简单线性回归的斜率可能随一个异常值而显著变化,而非参数检验,如 Wilcoxon 检验通常对异常值稳健。
  3. 异常值离其他观测值有多远?一些被认为是异常值的观测值(根据下面介绍的技术)与所有其他观测值相比实际上并不极端,而其他潜在的异常值可能与其余观测值相距甚远。

来自{ggplot2}包的数据集mpg将用于说明 R 中异常值检测的不同方法,特别是我们将关注变量hwy(每加仑公路英里数)。

描述统计学

最小值和最大值

检测 R 中异常值的第一步是从一些描述性统计开始,特别是从最小值和最大值开始。

在 R 中,这可以通过summary()函数轻松完成:

dat <- ggplot2::mpg
summary(dat$hwy)##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   12.00   18.00   24.00   23.44   27.00   44.00

其中最小值和最大值分别是上面输出中的第一个和最后一个值。或者,它们也可以用min()max()函数计算:

min(dat$hwy)## [1] 12max(dat$hwy)## [1] 44

一些明显的编码错误,比如一个人 786 公斤(1733 磅)的体重,已经可以通过这种非常简单的技术很容易地检测出来。

柱状图

检测异常值的另一个基本方法是绘制数据的直方图

使用 R 基(箱的数量对应于观察数量的平方根,以便比默认选项有更多的箱):

hist(dat$hwy,
  xlab = "hwy",
  main = "Histogram of hwy",
  breaks = sqrt(nrow(dat))
) # set number of bins

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

或者使用ggplot2(通过[esquisse](https://www.statsandr.com/blog/rstudio-addins-or-how-to-make-your-coding-life-easier/#esquisse) 插件或通过本教程学习如何用这个包创建绘图):

library(ggplot2)ggplot(dat) +
  aes(x = hwy) +
  geom_histogram(bins = 30L, fill = "#0c4c8a") +
  theme_minimal()

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

从直方图来看,似乎有几个观察值高于所有其他观察值(见图右侧的条形)。

箱线图

除了直方图,箱线图也有助于检测潜在的异常值。

使用 R 碱基:

boxplot(dat$hwy,
  ylab = "hwy"
)

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

或者使用ggplot2:

ggplot(dat) +
  aes(x = "", y = hwy) +
  geom_boxplot(fill = "#0c4c8a") +
  theme_minimal()

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

箱线图通过显示五个常见位置汇总(最小值、中值、第一和第三四分位数以及最大值)以及使用四分位数间距(IQR) 标准分类为可疑异常值的任何观察值,帮助可视化定量变量。IQR 标准意味着所有高于 q0.75 + 1.5 ⋅ IQR 或低于 q0.25-1.5⋅IQR 的观测值(其中 q 0.25 和 q0.75 分别对应于第一和第三四分位数,iqr 是第三和第一四分位数之间的差值)都被 r 视为潜在异常值。换句话说,以下区间之外的所有观测值都将被视为潜在异常值:

I =[q 0.25-1.5⋅iqr;q0.75 + 1.5 ⋅ IQR]

被 IQR 标准视为潜在异常值的观察值在箱线图中显示为点。基于这一标准,有 2 个潜在的异常值(参见箱线图顶部垂直线上方的 2 个点)。

请记住,并不是因为某个观察值被 IQR 标准认为是潜在的异常值,您就应该删除它。移除或保留异常值取决于(I)您的分析环境,(ii)您将对数据集执行的测试是否对异常值具有鲁棒性,以及(iii)异常值与其他观测值的距离。

借助boxplot.stats()$out函数,还可以根据 IQR 标准提取潜在异常值:

boxplot.stats(dat$hwy)$out## [1] 44 44 41

如您所见,实际上有 3 个点被认为是潜在的异常值:2 个值为 44 的观察值和 1 个值为 41 的观察值。

得益于which()功能,可以提取与这些异常值相对应的行号:

out <- boxplot.stats(dat$hwy)$out
out_ind <- which(dat$hwy %in% c(out))
out_ind## [1] 213 222 223

有了这些信息,您现在可以轻松地返回到数据集中的特定行来验证它们,或者打印这些异常值的所有变量:

dat[out_ind, ]## # A tibble: 3 x 11
##   manufacturer model   displ  year   cyl trans   drv     cty   hwy fl    class  
##   <chr>        <chr>   <dbl> <int> <int> <chr>   <chr> <int> <int> <chr> <chr>  
## 1 volkswagen   jetta     1.9  1999     4 manual… f        33    44 d     compact
## 2 volkswagen   new be…   1.9  1999     4 manual… f        35    44 d     subcom…
## 3 volkswagen   new be…   1.9  1999     4 auto(l… f        29    41 d     subcom…

也可以使用mtext()功能将异常值直接打印在箱线图上:

boxplot(dat$hwy,
  ylab = "hwy",
  main = "Boxplot of highway miles per gallon"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

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

百分位数

这种异常值检测方法基于百分位数。使用百分位数方法,位于由 2.5 和 97.5 百分位数形成的区间之外的所有观察值将被视为潜在的异常值。也可以考虑其他百分位数,如 1 和 99,或 5 和 95 百分位数来构建区间。

可以使用quantile()函数计算下限和上限百分点值(以及区间的下限和上限):

lower_bound <- quantile(dat$hwy, 0.025)
lower_bound## 2.5% 
##   14upper_bound <- quantile(dat$hwy, 0.975)
upper_bound##  97.5% 
## 35.175

根据这种方法,所有低于 14 和高于 35.175 的观察值都将被视为潜在的异常值。然后可以用which()函数提取间隔之外的观察值的行号:

outlier_ind <- which(dat$hwy < lower_bound | dat$hwy > upper_bound)
outlier_ind##  [1]  55  60  66  70 106 107 127 197 213 222 223

然后可以打印出他们每加仑的公路里程值:

dat[outlier_ind, "hwy"]## # A tibble: 11 x 1
##      hwy
##    <int>
##  1    12
##  2    12
##  3    12
##  4    12
##  5    36
##  6    36
##  7    12
##  8    37
##  9    44
## 10    44
## 11    41

或者,可以打印这些异常值的所有变量:

dat[outlier_ind, ]## # A tibble: 11 x 11
##    manufacturer model    displ  year   cyl trans  drv     cty   hwy fl    class 
##    <chr>        <chr>    <dbl> <int> <int> <chr>  <chr> <int> <int> <chr> <chr> 
##  1 dodge        dakota …   4.7  2008     8 auto(… 4         9    12 e     pickup
##  2 dodge        durango…   4.7  2008     8 auto(… 4         9    12 e     suv   
##  3 dodge        ram 150…   4.7  2008     8 auto(… 4         9    12 e     pickup
##  4 dodge        ram 150…   4.7  2008     8 manua… 4         9    12 e     pickup
##  5 honda        civic      1.8  2008     4 auto(… f        25    36 r     subco…
##  6 honda        civic      1.8  2008     4 auto(… f        24    36 c     subco…
##  7 jeep         grand c…   4.7  2008     8 auto(… 4         9    12 e     suv   
##  8 toyota       corolla    1.8  2008     4 manua… f        28    37 r     compa…
##  9 volkswagen   jetta      1.9  1999     4 manua… f        33    44 d     compa…
## 10 volkswagen   new bee…   1.9  1999     4 manua… f        35    44 d     subco…
## 11 volkswagen   new bee…   1.9  1999     4 auto(… f        29    41 d     subco…

根据百分位数法,有 11 个潜在的异常值。要减少这个数字,您可以将百分比设置为 1 和 99:

lower_bound <- quantile(dat$hwy, 0.01)
upper_bound <- quantile(dat$hwy, 0.99)outlier_ind <- which(dat$hwy < lower_bound | dat$hwy > upper_bound)dat[outlier_ind, ]## # A tibble: 3 x 11
##   manufacturer model   displ  year   cyl trans   drv     cty   hwy fl    class  
##   <chr>        <chr>   <dbl> <int> <int> <chr>   <chr> <int> <int> <chr> <chr>  
## 1 volkswagen   jetta     1.9  1999     4 manual… f        33    44 d     compact
## 2 volkswagen   new be…   1.9  1999     4 manual… f        35    44 d     subcom…
## 3 volkswagen   new be…   1.9  1999     4 auto(l… f        29    41 d     subcom…

将百分位数设置为 1 和 99 会产生与 IQR 标准相同的潜在异常值。

汉佩尔过滤器

另一种方法称为 Hampel 滤波器,包括将由中值加上或减去 3 个中值绝对偏差(MAD)形成的区间(I)之外的值视为异常值

I =[中值 3 ⋅疯了;中位数+ 3 ⋅疯狂]

其中 MAD 是绝对偏差的中值,定义为绝对偏差相对于数据中值的中值~X=median(X):

MAD =中位数(| Xi ~ X |)

对于该方法,我们首先通过median()mad()功能设置区间限制: 2

lower_bound <- median(dat$hwy) - 3 * mad(dat$hwy, constant = 1)
lower_bound## [1] 9upper_bound <- median(dat$hwy) + 3 * mad(dat$hwy, constant = 1)
upper_bound## [1] 39

根据这种方法,所有低于 9 和高于 39 的观察值都将被视为潜在的异常值。然后可以用which()函数提取间隔之外的观察值的行号:

outlier_ind <- which(dat$hwy < lower_bound | dat$hwy > upper_bound)
outlier_ind## [1] 213 222 223

根据 Hampel 过滤器,hwy变量有 3 个异常值。

统计测试

在本节中,我们将介绍 3 种更正式的技术来检测异常值:

  1. 格拉布斯试验
  2. 狄克逊试验
  3. 罗斯纳试验

这 3 个统计测试是异常值检测的更正式技术的一部分,因为它们都涉及与表列临界值(基于样本大小和期望的置信水平)相比较的测试统计的计算。

请注意,只有当数据(没有任何异常值)为近似正态分布时,3 个测试才是合适的。因此,在对异常值进行这些测试之前,必须验证正态假设(参见如何在 R 中测试正态假设)。

格拉布斯试验

Grubbs 检验允许检测数据集中的最高值或最低值是否为异常值。

格拉布斯检验一次检测一个异常值(最高值或最低值),因此无效假设和替代假设如下:

  • H0:最高值是而不是异常值
  • H1:最高的值是一个异常值

如果我们想测试最高值,或者:

  • H0:最低的而不是异常值
  • H1:最低的值是一个异常值

如果我们想测试最低值。

对于任何统计检验,如果p-值 小于所选的显著性阈值**(通常α = 0.05),则零假设被拒绝,我们将得出结论最低/最高值是异常值。相反,如果***-p*-值大于或等于显著性水平,则不拒绝零假设,并且我们将得出结论,基于数据,我们不拒绝最低/最高值不是异常值的假设。

请注意,格拉布斯检验不适用于样本量为 6 或更少(n≤6)的情况。

为了在 R 中执行 Grubbs 测试,我们使用了{outliers}包中的grubbs.test()函数:

# install.packages("outliers")
library(outliers)
test <- grubbs.test(dat$hwy)
test## 
##  Grubbs test for one outlier
## 
## data:  dat$hwy
## G = 3.45274, U = 0.94862, p-value = 0.05555
## alternative hypothesis: highest value 44 is an outlier

p-值为 0.056。在 5%的显著性水平,我们不拒绝假设最高值 44 是而不是异常值。

默认情况下,测试在最高值上执行(如 R 输出所示:alternative hypothesis: highest value 44 is an outlier)。如果您想测试最小值,只需在grubbs.test()函数中添加参数opposite = TRUE:

test <- grubbs.test(dat$hwy, opposite = TRUE)
test## 
##  Grubbs test for one outlier
## 
## data:  dat$hwy
## G = 1.92122, U = 0.98409, p-value = 1
## alternative hypothesis: lowest value 12 is an outlier

R 输出表示测试正在最低值上进行(参见alternative hypothesis: lowest value 12 is an outlier)。

p-值为 1。在 5%的显著性水平上,我们不拒绝假设最低的值 12 是而不是异常值。

为了便于说明,我们现在将用一个更极端的值替换一个观察值,并对这个新数据集执行 Grubbs 测试。让我们用值 212 替换第 34 行:

dat[34, "hwy"] <- 212

我们现在应用格拉布斯检验来检验最高值是否是异常值:

test <- grubbs.test(dat$hwy)
test## 
##  Grubbs test for one outlier
## 
## data:  dat$hwy
## G = 13.72240, U = 0.18836, p-value < 2.2e-16
## alternative hypothesis: highest value 212 is an outlier

p-值为< 0.001。在 5%的显著性水平,我们断定最高值 212 是异常值。

狄克逊试验

与 Grubbs 检验类似,Dixon 检验用于检验单个低值或高值是否为异常值。因此,如果怀疑有一个以上的异常值,必须对这些可疑异常值分别进行测试。

注意,Dixon 检验对小样本(通常 n ≤ 25)最有用。

为了在 R 中执行 Dixon 测试,我们使用了{outliers}包中的dixon.test()函数。然而,我们将我们的数据集限制为 20 个第一次观察值,因为 Dixon 测试只能在小样本量上进行(R 将抛出一个错误,只接受 3 到 30 个观察值的数据集):

subdat <- dat[1:20, ]
test <- dixon.test(subdat$hwy)
test## 
##  Dixon test for outliers
## 
## data:  subdat$hwy
## Q = 0.57143, p-value = 0.006508
## alternative hypothesis: lowest value 15 is an outlier

结果显示最低值 15 是一个异常值( p -value = 0.007)。

要测试最大值,只需将opposite = TRUE参数添加到dixon.test()函数中:

test <- dixon.test(subdat$hwy,
  opposite = TRUE
)
test## 
##  Dixon test for outliers
## 
## data:  subdat$hwy
## Q = 0.25, p-value = 0.8582
## alternative hypothesis: highest value 31 is an outlier

结果显示最高值 31 是而不是一个异常值( p -value = 0.858)。

一个好的做法是始终对照箱线图检查异常值的统计测试结果,以确保我们测试了所有的潜在异常值:

out <- boxplot.stats(subdat$hwy)$out
boxplot(subdat$hwy,
  ylab = "hwy"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

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

从箱线图中,我们可以看到,除了之前对值 15 进行的测试之外,我们还可以对值 20 进行 Dixon 测试。这可以通过找到最小值的行号来完成,从数据集中排除该行号,然后最后对这个新数据集应用 Dixon 测试:

# find and exclude lowest value
remove_ind <- which.min(subdat$hwy)
subsubdat <- subdat[-remove_ind, ]# Dixon test on dataset without the minimum
test <- dixon.test(subsubdat$hwy)
test## 
##  Dixon test for outliers
## 
## data:  subsubdat$hwy
## Q = 0.44444, p-value = 0.1297
## alternative hypothesis: lowest value 20 is an outlier

结果显示第二个最低值 20 是而不是异常值(p-值= 0.13)。

罗斯纳试验

罗斯纳的异常值检验具有以下优点:

  1. 它用于一次检测几个异常值(与 Grubbs 和 Dixon 测试不同,后者必须反复执行以筛选多个异常值),以及
  2. 它旨在避免屏蔽问题,即一个离群值与另一个离群值接近的离群值可能无法被检测到。

与 Dixon 检验不同,注意 Rosner 检验在样本量较大(n ≥ 20)时最为合适。因此,我们再次使用初始数据集dat,它包括 234 个观察值。

为了执行罗斯纳测试,我们使用了{EnvStats}包中的rosnerTest()函数。这个函数至少需要两个参数:数据和可疑异常值的数量k(默认的可疑异常值数量为k = 3)。

对于本例,我们将可疑异常值的数量设置为 3,正如本文开头的方框图中列出的潜在异常值的数量所示。 2

library(EnvStats)
test <- rosnerTest(dat$hwy,
  k = 3
)
test## $distribution
## [1] "Normal"
## 
## $statistic
##       R.1       R.2       R.3 
## 13.722399  3.459098  3.559936 
## 
## $sample.size
## [1] 234
## 
## $parameters
## k 
## 3 
## 
## $alpha
## [1] 0.05
## 
## $crit.value
## lambda.1 lambda.2 lambda.3 
## 3.652091 3.650836 3.649575 
## 
## $n.outliers
## [1] 1
## 
## $alternative
## [1] "Up to 3 observations are not\n                                 from the same Distribution."
## 
## $method
## [1] "Rosner's Test for Outliers"
## 
## $data
##   [1]  29  29  31  30  26  26  27  26  25  28  27  25  25  25  25  24  25  23
##  [19]  20  15  20  17  17  26  23  26  25  24  19  14  15  17  27 212  26  29
##  [37]  26  24  24  22  22  24  24  17  22  21  23  23  19  18  17  17  19  19
##  [55]  12  17  15  17  17  12  17  16  18  15  16  12  17  17  16  12  15  16
##  [73]  17  15  17  17  18  17  19  17  19  19  17  17  17  16  16  17  15  17
##  [91]  26  25  26  24  21  22  23  22  20  33  32  32  29  32  34  36  36  29
## [109]  26  27  30  31  26  26  28  26  29  28  27  24  24  24  22  19  20  17
## [127]  12  19  18  14  15  18  18  15  17  16  18  17  19  19  17  29  27  31
## [145]  32  27  26  26  25  25  17  17  20  18  26  26  27  28  25  25  24  27
## [163]  25  26  23  26  26  26  26  25  27  25  27  20  20  19  17  20  17  29
## [181]  27  31  31  26  26  28  27  29  31  31  26  26  27  30  33  35  37  35
## [199]  15  18  20  20  22  17  19  18  20  29  26  29  29  24  44  29  26  29
## [217]  29  29  29  23  24  44  41  29  26  28  29  29  29  28  29  26  26  26
## 
## $data.name
## [1] "dat$hwy"
## 
## $bad.obs
## [1] 0
## 
## $all.stats
##   i   Mean.i      SD.i Value Obs.Num     R.i+1 lambda.i+1 Outlier
## 1 0 24.21795 13.684345   212      34 13.722399   3.652091    TRUE
## 2 1 23.41202  5.951835    44     213  3.459098   3.650836   FALSE
## 3 2 23.32328  5.808172    44     222  3.559936   3.649575   FALSE
## 
## attr(,"class")
## [1] "gofOutlier"

有趣的结果在$all.stats表中提供:

test$all.stats##   i   Mean.i      SD.i Value Obs.Num     R.i+1 lambda.i+1 Outlier
## 1 0 24.21795 13.684345   212      34 13.722399   3.652091    TRUE
## 2 1 23.41202  5.951835    44     213  3.459098   3.650836   FALSE
## 3 2 23.32328  5.808172    44     222  3.559936   3.649575   FALSE

基于罗斯纳测试,我们看到只有一个异常值(见Outlier列),它是值为 212(见Value的观测值 34(见Obs.Num)。

附加备注

您会发现许多其他检测异常值的方法:

  1. {outliers}包中,
  2. 通过{DMwR}包中的lofactor()函数:局部异常值因子(LOF)是一种算法,用于通过比较一个点与其邻居的局部密度来识别异常值。
  3. {car}包中的outlierTest()给出了基于给定模型的最极端观察值,并允许测试其是否为异常值,以及
  4. {OutlierDetection}包装中,以及
  5. 使用{mvoutlier}包中的aq.plot()功能(感谢 KTR 的建议。):
library(mvoutlier)Y <- as.matrix(ggplot2::mpg[, c("cyl", "hwy")])
res <- aq.plot(Y)

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

还要注意,一些转换可能会“自然地”消除异常值。值的自然对数或平方根减少了由极值引起的变化,因此在某些情况下,应用这些变换将消除异常值。

感谢阅读。我希望这篇文章能帮助你通过几个描述性统计(包括最小值、最大值、直方图、箱线图和百分位数)或者借助于更正式的离群点检测技术(包括 Hampel 过滤器、Grubbs、Dixon 和 Rosner 检验)来检测 R 中的离群点。现在轮到您验证它们了,如果它们是正确的,在进行分析之前,决定如何处理它们(即保留、删除或删除它们)。

和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。

参考

恩德莱因,G. 1987。霍金斯,Dm:离群值的识别。查普曼和霍尔,伦敦-纽约 1980 年,188 年代,14,50 年生物统计学杂志29(2):198–98。

  1. 默认值为 3(根据皮尔逊法则),但也可能是另一个值。 ↩︎
  2. 默认情况下,mad()函数中的常数是 1.4826,因此必须将其设置为 1,以找到中位数绝对偏差。更多详情见help(mad)。感谢艾丽塞给我指出了这一点。 ↩︎
  3. 为了避免得出有缺陷的结论,在进行罗斯纳测试之前,预先筛选数据(例如用箱线图)以尽可能准确地选择潜在异常值的数量是很重要的。 ↩︎

相关文章

原载于 2020 年 8 月 11 日 https://statsandr.com

通过 Tensorflow 超越 Google Cloud AutoML Vision

原文:https://towardsdatascience.com/outperforming-google-cloud-automl-vision-with-tensorflow-and-google-deep-learning-vm-34a45e3860ae?source=collection_archive---------20-----------------------

利用深度学习检测卫星图像中的云

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

iStock 上的sharp _ done拍摄

动机

有数百篇关于机器学习和深度学习项目的博客文章,我从我读过的那些文章中学到了很多。我想通过讨论我最近从事的一个深度学习项目来增加这些知识。这个项目/博客帖子有一些方面我认为值得一读:

  • 它在数据集上训练了一个 Google AutoML Vision 模型作为基线,然后打败它:)。
  • 它描述了一个基本但现实的数据管道和模型开发工作流,一个小团队可以在野外使用它从原始数据到产品模型服务实例。例如,它解释了如何使用 Docker 容器来部署模型训练实例,而大多数博客文章只描述了如何手动提供模型训练实例。
  • 它包括截至 2020 年 2 月的有关 CNN 架构和超参数调谐的最佳实践。例如,有一个默认的 Keras 参数,如果不改变,可能会很危险,还有一种方式,我看到许多人错误地配置了 hyperopt hyperparameter 调谐库。
  • 它面向已经了解深度学习基础知识的读者,因此对卷积如何工作等基本概念的回顾较少,而更多地关注应用。

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

项目中使用的关键技术

该项目有以下步骤,这篇博文的结构反映了这些步骤:

  • 识别分类问题并找到数据集
  • ETL 数据,为数据分析和模型训练做准备
  • 执行探索性数据分析
  • 使用 Google AutoML Vision 获取基线
  • 设置模型开发工作流
  • 原型深度学习模型
  • 谷歌深度学习虚拟机上的训练模型
  • 分析模型性能和商业价值
  • 在 Google Cloud 虚拟机上部署获胜模型
  • 最后的想法和谷歌自动视觉的回顾

我在一个 Github repo 中分享了项目代码。

识别分类问题并找到数据集

卫星图像中的云检测是一个重要的分类问题。它在遥感领域被大量使用,因为云掩盖了下面的土地,并且数据集中太多的云图像使得模型更难学习有意义的模式。一个强大的云分类器将使研究人员更容易自动筛选云图像,并构建更大和更准确标记的数据集。

BigEarth 数据集是世界上最大的公共卫星图像数据集,由柏林工业大学的一个德国研究小组于 2019 年创建。数据集由近 600,000 个 120x120 像素的卫星影像切片组成,每个切片有 13 个波段,这些切片已根据土地利用(河流、城市等)、影像是否被云遮挡以及其他元数据(如影像坐标)进行了标注。我构建了一个 CNN 二进制分类器,它使用云标签和每个图像块的红色、绿色和蓝色条带来将图像块分类为多云(cloud图像)或非多云(no_cloud图像)。

这里有一些cloud图像,出于数据探索的目的,我从 tiff 转换成 jpg,下面打印出了类别标签和图像网格位置。

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

还有一些no_cloud图片:

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

为了检查这些标签是否有意义,以及这个项目是否可行,我随机查看了 100 张 jpg 图片,并将它们归类为cloudno_cloud。我看到了一些难以分类的图像,比如位于图形位置(2,0)和(2,1)的图像。如果我正在为一个生产应用程序做这个深度学习项目,我会对这些困难的标签进行更多的调查,以确保它们没有被错误分类。尽管如此,我还是能够正确地对 100 幅图像中的 77%进行分类,这给了我继续推进深度学习模型的信心。

ETL 数据,为数据分析和模型训练做准备

大约有 600,000 幅卫星图像,数据集是 60GB 的压缩文件。ETL 过程包括获取目标文件,提取它,生成一些汇总像素统计数据,并将图像转换为可用的格式,以便在 Google AutoML Vision、Google Cloud VM 和本地笔记本电脑上进行深度学习。

ETL 管道由以下步骤组成:

  • 下载。tarfile 从 BigEarth.net 到一个连接了持久磁盘的 Google Cloud 虚拟机,并提取. tarfile。
  • 使用 dask 来聚合。将每个图像的 json 元数据文件平铺到一个. csv 文件中。
  • 对于每个图像拼贴,将 RGB 波段 tiff 文件聚合到一个单独的文件中。npy 和。png 文件。

我在同一个。npy 文件,以提高训练时的读取性能。我选择了。npy 文件格式,因为它与 keras 和 pytorch 都兼容(以防我在某个时候想用 pytorch 重写我的代码)。我将文件存储在磁盘上,而不是谷歌云存储中,因为这样更容易实现高读取吞吐量,还因为 RGB 数据集相当小,只有 50GB。如果你有兴趣深入探讨这个话题,我强烈推荐这篇关于机器学习文件格式的文章

我在一个. png 文件中存储了另一个图像切片的波段副本,因为该文件格式与 Google AutoML Vision 兼容。该产品目前不接受。npy 或者。tiff 文件

进行探索性数据分析

我创建了一个包括所有 9000 张cloud图像和 9000 张随机no_cloud图像的数据集,并通过从大数据集中随机抽取 1200 张cloud图像和 1200 张no_cloud图像创建了一个小的训练数据集。我使用较大的数据集来训练来自小数据集训练回合的获胜模型。

我创建了一个平衡的数据集,因为我想确定问题的范围,为自己的成功做准备。如果我有更多的时间,我会创建一个不平衡的数据集,更准确地反映数据集中cloudno_cloud图像的比例。有一个信息丰富的 tensorflow 教程和一个 kaggle 内核概述了处理不平衡数据的不同策略。

我想了解像素值在整个数据集和样本中的分布,包括cloud图像和no_cloud图像。我还想确认像素值分布在cloudno_cloud图像之间是不同的,并且在样本和整个数据集之间的每个类内是一致的。如果不使用高内存(> 60GB)实例,内存中容纳不下太多的像素值,所以我使用 dask 来计算所有 600K 图像的统计数据(在下图中标为all),以及大数据集和小数据集的每类统计数据。

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

所有波段的平均值和标准差cloud像素值都高于no_cloud像素值,这提供了分类任务是可学习的证据。

样本和整个数据集之间的每个类中的均值和标准差像素值是相似的,这使我有相当高的信心认为样本代表了数据集。

使用 Google AutoML Vision 获取基线

现在我对数据有了基本的了解和更多的信心,我可以用 Google AutoML Vision 模型得到一个基线。我通过上传样本创建了一个数据集。png 文件到谷歌云存储。注意,目标 GCS 桶必须在us-central-1区域中。AutoML 文档建议您在训练时提供尽可能多的图像,因此为了帮助验证和测试准确性,我使用了albuminations库为样本中的每个图像创建翻转、旋转和翻转+旋转图像。我把这些增强的图像添加到数据集中。

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

我上传了一个包含数据集分割和 GCS 图像斑点路径的. csv 文件。AutoML 可以为您进行拆分,但是我需要自己进行拆分,以便在相同的数据上训练我自己的模型。

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

然后,我在小型和大型数据集上训练该模型。82%的准确率和召回率是一个良好的开端。在这篇博文的后面,你会看到我的模型如何与谷歌的相抗衡。

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

谷歌云自动视觉控制台

我通过使用基于逻辑回归的 SGDClassifier 实现增量学习获得了另一个简单的基线,该分类器将展平的图像数组作为输入。训练准确率为 63%,验证准确率为 65%。

建立模型开发工作流程

我需要一个模型开发工作流,让我能够在本地笔记本电脑上的原型工作和云实例上的繁重培训工作之间轻松转换。我必须能够在 jupyterhub 上以 CPU 和 GPU 模式运行 tensorflow,使用我自己的代码模块,配置依赖关系,在运行之间保存笔记本,并连接到云实例上的 GPU。Docker with conda 是显而易见的解决方案,但我必须弄清楚细节。

深度学习环境有很多移动部分:NVIDIA 驱动程序、CUDA 工具包和安装 jupyter、python、tensorflow 和其他库的 conda 环境。我做了一些关于最佳实践的研究,发现了大量不同的选项,以及大量未回答的 StackOverflow 问题、Github 问题和人们遇到安装问题的博客帖子讨论。很难过。我想避免这种事发生在我身上。

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

GCP 提供深度学习 VM 镜像,将 NVIDIA 驱动库和 tensorflow 库安装到 VM 上。但是 VM 并没有提供我所需要的一切,因为我在 VM 上运行一个容器,我需要能够在容器内运行 CUDA 工具包和 Tensorflow。我还想了解安装过程是如何工作的,GCP 没有公开其深度学习 VM 镜像源代码。最后,我想要一个解决方案,如果我需要的话,它可以为我将来的 Kubernetes 部署做好准备。所以我决定使用 GCP 深度学习虚拟机来安装 CUDA 驱动程序和 nvidia-docker 工具包来运行 GPU 加速的 docker 容器,然后将其他所有东西安装到我在虚拟机上运行的 Docker 容器中。

我在 GCP VM 主机上安装了 CUDA 驱动程序,因为由于 NVIDIA 的驱动程序代码是专有的,所以在 Docker 容器中安装驱动程序的解决方案没有得到广泛支持。X11docker 提供了支持,但是我没有找到很多人使用它的例子,并且厌倦了添加另一个工具。我使用了 GCP common-cu100 基本虚拟机映像,它在实例上安装了 NVIDIA 驱动程序和 CUDA 10.0 工具包。注意,尽管 CUDA 工具包安装在主机上,我还是在容器中使用了这个工具包。

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

支持 NVIDIA 的应用程序的组成部分(来源)

至于配置 Docker 映像在 VM 上运行,我考虑过使用一个 GCP 深度学习容器作为基本 Docker 映像,但该产品截至 2019 年 6 月处于测试阶段,并且源 Docker 文件不是公开的。缺乏透明度将使调试任何问题变得困难。我对谷歌云人工智能平台笔记本(在谷歌云上管理的 Jupyterhub)有类似的担忧,因为它们运行的是测试版深度学习容器。

Google 的 Kubernetes 引擎文档cloudml-samples repo 都有使用nvidia/cuda作为基础映像来处理 CUDA 工具包安装和路径配置的例子。所以我使用了nvidia/cuda:10.0-devel-ubuntu18.04图像,并在上面安装了miniconda来建立一个python3.6jupyterhubtensorflow-2.0.0-gpu环境。

下面是创建 GCP 虚拟机实例的 gcloud 命令、GCP 虚拟机实例启动脚本和构建虚拟机实例上运行的映像的 Dockerfile

概括地说,我的工作流程是:

  • 在本地运行 Docker 容器进行模型原型制作
  • 在 GCP 虚拟机实例上运行 Docker 容器进行模型训练
  • 在这两种环境中,使用装载在主机上的 Docker 卷来保存 jupyter 笔记本
  • 使用 scp 使 GCP 上的模型笔记本与本地模型笔记本保持同步(一个更健壮但速度较慢的解决方案可以使用 github repo 进行笔记本同步)

原型深度学习模型

现在我有了一个工作流,我在本地运行 docker 容器,并原型化了一个 Keras CNN 二元分类器,它将把cloud图像分类为1,把no_cloud图像分类为0

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

我遵循了安德烈·卡帕西和吴恩达推荐的模型开发流程组合。首先,我用遵循当前最佳实践的最简单的模型建立了培训和评估。

神经网络用的是 ReLU 激活,所以我用的是明凯/he_uniform 初始化而不是 Xavier 初始化进行权重初始化。詹姆斯·德林杰对这些差异做了很好的概述。以下是关键要点:

当使用 ReLU 激活时,单个层的平均标准偏差非常接近输入连接数量的平方根除以两个的平方根,或者我们示例中的√512/√2。

将层激活的标准偏差保持在 1 左右将允许我们在深度神经网络中堆叠多个层,而不会出现梯度爆炸或消失。

因此,明凯初始化将每个初始激活乘以*√*2/*√n*,其中*n*是从前一层的输出进入给定层的传入连接数(也称为“扇入”)。

这种更智能的初始化意味着网络更有可能收敛,尤其是在深度网络中:

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

泽维尔对明凯的 30 层小模式的收敛(我们的)。何等人。艾尔。(2015)

我了解到 Keras 默认使用 Xavier/glorot_uniform,但是有一个开放的 Tensorflow 票证可以将该默认更改为 he_uniform。

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

权重初始化参数是一个很好的例子,说明在不理解默认参数的情况下在机器学习方法中使用默认参数是多么危险,因为它们可能是任务的不正确参数。

我使用了 Adam 优化器,因为 Adam 优化器收敛速度很快,并且被普遍认为可以很好地处理各种任务。我选择了 3e-4 的学习率,因为我见过很多人使用这个学习率(包括 Andrej Karpathy)。这也比 Tensorflow 中 Adam 的默认学习速率低一个数量级,因为数据集很小,所以我没意见。

我通过一个优化的 tf.data API 管道向模型提供数据,该管道利用预取和并行图像增强来准备向神经网络模型提供的批处理。这大大加快了训练速度。

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

顺序处理与并行处理(Tensorflow 文档)

我对输入神经网络的批次数据、未经训练的神经网络的预测以及未经训练的神经网络的性能进行了全面检查。由于这是一个二元分类问题,二元交叉熵被用于损失函数。

我检查了神经网络预测的二进制交叉熵损失与随机预测01之间的类别概率的模型的近似损失不太远。我还检查了预测的分布是否以.5为中心。

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

将偏差减少(拟合)步骤与正则化步骤分开很有用,因为如果模型不能过度拟合数据,则表明数据集中存在缺陷或限制。为此,我只在训练集上过度使用网络。我用云类的正面和负面例子在 10 次观察中反复训练模型,直到准确率达到 100%。

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

我确认预测值和实际值完全匹配。

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

在谷歌深度学习虚拟机上训练模型

现在我对我的训练过程有了信心,我将我的 docker 训练映像部署到一个 Google 深度学习 VM 并启动它。我添加了一个定制的 Keras 回调函数,它子类化了 ModelCheckpoint,并在每次达到新的最佳精度时将最佳模型和实验元数据写入 GCS。这允许我为部署持久化模型,并在训练结束后在一台不太昂贵的本地机器上分析实验结果。

我使用验证数据和批量标准化(BN)从原型阶段开始调整模型,以最小化过度拟合并提高验证集的准确性,同时尽可能保持训练集的准确性。我添加了一个验证集,并将成本函数改为使用验证损失而不是训练损失。关于具体的 BN 层放置有很多争论,但我也在激活层之后向神经网络添加了 BN 层。

这些变化导致初始验证精度为. 862,训练精度为. 999。

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

训练和验证性能之间仍有差距,所以接下来我添加了一个图像增强步骤,使用albuminations库来随机翻转和/或旋转一批图像。这将验证准确度从 0.862 提高到 0.929,同时将训练准确度从 0.999 降低到 0.928。

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

我将神经网络输出可视化,以确保它是合理的。预测的类别概率的分布显示了我的预期,因为分类器已经清楚地将类别分开。

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

我研究了添加 Dropout 层来提高验证性能。李、项等。艾尔。表明在模型架构中,在批量标准化层之前插入漏失层可能会对后面的 BN 层的性能产生负面影响。这些 BN 层在训练期间学习归一化数据中的某个协变量偏移,但是在测试时,当关闭压差时,该协变量偏移不再准确。所以我在最后一个 BN 层之后用一个 Dropout 层训练了一个模型。与 BN +增强模型相比,它没有带来任何改进,而且需要更长的训练时间。于是我对 BN +增强模型进行了超参数调优,没有掉线。

我对优化器和学习率执行了超参数调整,以便改进初始神经网络架构搜索的最佳模型。我选择这些参数是因为我已经有了一个运行良好的神经网络架构。如果我没有一个好的神经网络基础性能,我会使用神经结构搜索作为超参数调整步骤的一部分。

贝叶斯优化搜索(BO)是目前推荐的超参数优化方法,优于随机搜索,因为它可以在更少的迭代次数内达到最佳结果。我发现没有公开发表的论文对这两种搜索方法做了明确的比较,但是 Google 的 hyperparameter tuning 产品的默认优化方法,大多数 automl 库支持的优化方法,以及像 T2 这样的几个 ML talks 都推荐 BO 而不是随机搜索。我使用了hyperpt库来执行优化。值得一提的是,我看到许多教程在数值超参数上使用 hp.choice,这是不正确的,因为它删除了这些参数的数值排序所传达的信息,从而降低了搜索的效率和有效性。参见这篇关于 hyperpt的高度评价评论,以获得进一步的讨论。

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

超参数调整结果

最佳模型具有 Adam 优化器和 2e-4 的学习率,这与未优化的优化器相同,并且几乎与未优化的 3e-4 的学习率相同。我最初的学习速度和优化器表现良好,这在一定程度上是幸运的,因此通过超参数调优来确认我已经在该搜索空间中找到了最好的模型之一是很好的。超参数调整带来了改进,因为最佳模型将验证精度从. 929 提高到. 945,同时将训练精度保持在. 928。获胜模型的训练时间略多于 8 分钟。

我还用 Resnet50V2 作为特征提取器进行了迁移学习。它在 25 分钟的训练时间内达到了 0.921 的验证精度。

我在包含所有 9000 张云图像和 9000 张 no_cloud 图像的大数据集上训练了来自小数据集的最佳模型。验证精度从 0.945 下降到 0.935,但训练精度保持不变,为 0.928,这表明模型的过度拟合程度低于它在小数据集上的情况。虽然大数据集的大小是小数据集的 9 倍,但训练时间仅增加了 3 倍,达到 27 分钟。正如在以前的模型运行中,预测的类概率是我所期望的,有明确的类分离。

在大型数据集上训练 Resnet50V2 分类器似乎也是值得的。它在小数据集上有很好的验证准确性,模型越复杂,它就越能从额外的数据中受益。训练时间太慢,无法尝试超参数调优,所以我坚持使用 Adam 优化器和 3e-4 的学习率,并在 82 分钟的训练时间内找到了验证精度为. 905 的模型。我很失望验证的准确性没有提高,但这仍然是一个相当好的结果。

分析模型性能和商业价值

我评估了最强模型(姑且称之为hp_tuned_keras_cnn)和resnet50_v2模型在小型和大型数据集上的测试性能,并将这些结果与 Google AutoML 模型(google_automl)在小型和大型数据集上的性能进行了比较。在两个数据集上,在 0.5 类预测阈值的情况下,hp_tuned_keras_cnnresnet50_v2在精度和召回率上胜过google_automl。以下是大型数据集性能的结果:

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

hp_tuned_keras_cnn 精度/召回率与阈值

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

google_automl 精度/召回率与阈值

每个模型的混淆矩阵显示,两个模型在将no_cloud图像分类为no_cloud时表现最佳,但在cloud图像上与第二类错误(假阴性)斗争最激烈。鉴于我对cloud图像中令人困惑和扭曲的形状的视觉观察,这是有道理的。

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

hp_tuned_keras_cnn混淆矩阵

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

google_automl混淆矩阵

我考虑了这个分类器的实际应用。一个应用程序将使用这个模型来筛选出有云的图像,为其他一些图像分类任务做准备。如果我有大量的图像,我会优先考虑云分类任务的召回而不是精度,因为假阳性会导致图像不在数据集中使用,而假阴性会导致有噪声的云图像被添加到数据集中。当然,精度仍然需要很高,因为否则太多的图像(可能还有太多同一土地类型的图像)会被筛选掉。

考虑到这种商业环境,我比较了以更高召回率为目标的模型。在 0.26 的云预测阈值下,hp_tuned_keras_cnn的召回率为 95.8%,准确率为 91.2%。在 0.25 的云预测阈值下,google_automl具有相同的召回率,但准确率为 75.3%。hp_tuned_keras_cnn拥有我一直在寻找的云探测能力。下一步将是在不平衡数据集上测试该模型,然后看看该模型在新数据集上的表现如何。

在谷歌云虚拟机上部署获胜模型

对于部署,我使用了一个 Docker 容器,它在 conda 环境中运行 Flask 和 tensorflow,并在运行时从 Google 云存储中加载模型。客户端通过展平图像张量并向服务器发送 JSON 序列化的张量来发出推断请求。服务器重塑张量,进行类预测,将类预测作为 JSON 发回。

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

模型部署的重要技术

我将容器部署在一个没有 GPU 的 Google VM 实例上,获得了 100 毫秒的模型服务器响应速度(50 毫秒的推理+50 毫秒的数据处理和其他请求开销)。

在一个成熟的生产系统中,我会对这个部署做一些改进。100 毫秒的延迟高于人类可以察觉的 70 毫秒阈值,因此为了减少延迟,我将使用 TensorFlow 服务于的容器,使用请求批处理而不是 Flask,并在 GPU 而不是 CPU 上运行。在 Kubernetes 上部署该模型还会增加水平可伸缩性。

我还会在部署中添加更多的 MLOps 功能。d .斯卡利等人。艾尔。⁴讨论 ML 系统中隐藏技术债务的来源。一个强有力的建议是监控模型预测分布。如果分布发生了显著变化,这可能表明输入数据的性质发生了变化,模型的最新部署发生了回归,或者两者都有。

谷歌汽车视觉回顾

AutoML Vision 是一款很有潜力的有趣产品。我可以看到 AutoML Vision 在非技术人员或工程师想要深度学习功能但没有人实现它的情况下有其一席之地。然而,我对 AutoML 的性能没有什么印象,因为我能够用一个简单的模型和一个迁移学习模型击败它。我希望 AutoML 至少能超过这些基准。这可能是这个数据集没有发挥 AutoML 的优势,但我也发现是一个性能基准,AutoML 在时尚 MNIST 数据集上的表现比最先进的模型差 93.9%到 96.7%。

AutoML 也不便宜。培训费用 $3.15 每节点小时,最少 16 小时。如果您遵循针对您的数据集大小的建议训练时间,这将快速增加,而且这还不包括推理请求的定价,或者许多生产级模型所需的重复训练运行。培训 16 个节点小时的小型 AutoML 模型花费 38 美元,培训 65 个节点小时的大型 AutoML 模型花费 195 美元。作为对比,小的hp_tuned_keras_cnn模型训练 8 分钟,花费 0.40 美元,大的hp_tuned_keras_cnn模型训练 27 分钟,花费 1.35 美元。鉴于运行一个 Tesla V100 可抢占实例的成本为每节点小时 0.82 美元,如果 Google 能够提供一个更宽松的 sla 价格点就好了。同样,也许这个产品的成本对于一个没有足够的 ML 专业知识的组织来说是可以接受的。

最终想法

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

成功小子迷因生成器(来源)

咻!如果你已经读到这里,恭喜你,谢谢你。我希望你能从我的经历中学到一些有用的东西。这个项目非常有趣,让我有机会玩更多最新的 ML 技术。

我期待着在未来建立更多的机器学习驱动的系统,无论是在我的工作中还是在我的兼职项目中。我对机器学习领域工具的增长感到兴奋,包括堆栈的所有部分。随着这些工具的成熟,它们将使机器学习更容易为每个人所用。我也对神经网络最佳实践的发展速度感到惊讶。看看这种创新会走向何方将是一件有趣的事情。

有兴趣联系或一起工作吗?在下面分享你的回答,或者在 linkedin 上给我留言。

本文使用的代码可以在这个 资源库 中的 my GitHub 上获得。

[1] G. Sumbul,M. Charfuelan,b .德米尔,V. Markl, BigEarthNet:遥感影像理解的大规模基准档案库 (2019),IEEE 国际地球科学与遥感研讨会

[2] K. ,X. ,S. J .孙深入研究整流器:在 ImageNet 分类上超越人类水平的性能 (2015),IEEE 计算机视觉国际会议(ICCVV)

[3] X 李S 陈X 胡J 杨用方差移位理解丢失与批量归一化的不协调 (2019),IEEE 计算机视觉与模式识别会议()

[4] D .斯卡利,g .霍尔特,d .戈洛文,e .达维多夫,t .菲利普,机器学习系统中隐藏的技术债务 (2015),神经信息处理系统进展 28 (NIPS)

超过 100 个数据科学家面试问题和答案!

原文:https://towardsdatascience.com/over-100-data-scientist-interview-questions-and-answers-c5a66186769a?source=collection_archive---------0-----------------------

来自亚马逊、谷歌、脸书、微软等公司的面试问题!

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

图片由阿曼达·福西特提供

我知道这很漫长…

真的很长。但是不要被它的长度吓倒——我已经把它分成了四个部分(机器学习、统计、SQL、杂项),这样你就可以一点一点地看完它。

请将此视为一本工作簿或一门速成课程,其中包含数百个数据科学面试问题,您可以用这些问题来磨练自己的知识,并找出差距,以便随后填补。

我希望这对您有所帮助,并祝您在数据科学事业中好运!

如果你喜欢这篇文章并想支持我,请考虑订阅我下面的链接!😃

[## 通过我的推荐链接加入 Medium-Terence Shin

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

terenceshin.medium.com](https://terenceshin.medium.com/membership)

目录

机器学习基础

问:在应用机器学习算法之前,数据争论和数据清洗的一些步骤是什么?

当数据争论和数据清理时,可以采取许多步骤。下面列出了一些最常见的步骤:

  • **数据剖析:**几乎每个人都是从了解他们的数据集开始的。更具体地说,您可以使用。形状和对数值变量的描述。描述()。
  • **数据可视化:**有时,用直方图、箱线图和散点图来可视化数据很有用,这样可以更好地理解变量之间的关系,也可以识别潜在的异常值。
  • 语法错误:这包括确保没有空格,确保字母大小写一致,检查错别字。您可以使用。unique()或使用条形图。
  • 标准化或规范化:根据您正在处理的数据集和您决定使用的机器学习方法,标准化或规范化您的数据可能会很有用,这样不同变量的不同尺度就不会对模型的性能产生负面影响。
  • **处理空值:**有多种方法来处理空值,包括完全删除具有空值的行,用均值/中值/众数替换空值,用新的类别(例如未知)替换空值,预测值,或者使用可以处理空值的机器学习模型。阅读更多此处
  • **其他还有:**去除无关数据,去除重复,类型转换。

请务必 订阅此处 或至我的 独家快讯 千万不要错过另一篇关于数据科学的指南、技巧和提示、生活经验等!

问:如何处理不平衡的二元分类?

有许多方法可以处理不平衡的二进制分类(假设您想要识别少数类):

  • 首先,你要重新考虑你用来评估模型的指标。你的模型的准确性可能不是最好的衡量标准,因为我将用一个例子来解释为什么。假设 99 次银行取款不是欺诈,1 次取款是欺诈。如果你的模型只是简单地将每个实例归类为“非欺诈”,那么它的准确率将达到 99%!因此,您可能需要考虑使用精度和召回率等指标。
  • 另一种改善不平衡二进制分类的方法是通过增加错误分类少数类的成本。通过增加这样的惩罚,该模型应该更准确地对少数民族进行分类。
  • 最后,你可以通过过采样少数阶级或者欠采样多数阶级来改善阶级的平衡。你可以在这里阅读更多关于它的

问:箱形图和直方图有什么区别?

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

箱线图与直方图

虽然箱线图和直方图是用于显示数据分布的可视化工具,但它们传达信息的方式不同。

直方图是显示数值变量值的频率的条形图,用于估计给定变量的概率分布。它允许您快速了解分布的形状、变化和潜在的异常值。

箱线图表达了数据分布的不同方面。虽然您无法通过箱线图看到分布的形状,但您可以收集其他信息,如四分位数、范围和异常值。当您想要同时比较多个图表时,箱线图尤其有用,因为它们比直方图占用更少的空间。

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

如何阅读箱线图

问:描述不同的正则化方法,如 L1 和 L2 正则化?

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

L1 和 L2 正则化都是用于减少训练数据过拟合的方法。最小二乘法使残差平方和最小,这可能导致低偏差但高方差。

L2 正则化,也称为岭回归,最小化残差平方和加上λ乘以斜率平方。这个附加项被称为岭回归惩罚。这增加了模型的偏差,使得对训练数据的拟合更差,但是也减少了方差。

如果采用岭回归罚分并用斜率的绝对值替换它,则得到套索回归或 L1 正则化。

L2 不太稳健,但有一个稳定的解决方案,而且总是一个解决方案。L1 更稳健,但是具有不稳定的解,并且可能具有多个解。

StatQuest 有一个关于套索和山脊回归的惊人视频这里

问:神经网络基础

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

一个神经网络是一个受人脑启发的多层模型。就像我们大脑中的神经元一样,上面的圆圈代表一个节点。蓝色圆圈代表输入层,黑色圆圈代表隐藏层,绿色圆圈代表输出层。隐藏层中的每个节点代表输入经过的功能,最终导致绿色圆圈中的输出。这些功能的正式术语称为s 形激活功能

如果你想要一步一步的创建神经网络的例子,请点击这里查看 Victor Zhou 的文章。

如果你是一名视觉/音频学习者,3Blue1Brown 在 YouTube 上有一个关于神经网络和深度学习的惊人系列这里

务必 订阅此处 或至我的 独家快讯 千万不要错过另一篇关于数据科学的指南、窍门和技巧、生活经验等!

问:什么是交叉验证?

交叉验证本质上是一种用于评估模型在新的独立数据集上表现如何的技术。交叉验证最简单的例子是将数据分成两组:定型数据和测试数据,其中定型数据用于构建模型,测试数据用于测试模型。

问:如何定义/选择指标?

没有放之四海而皆准的标准。选择用于评估机器学习模型的度量取决于各种因素:

  • 是回归还是分类任务?
  • 商业目标是什么?精确度与召回率
  • 目标变量的分布是什么?

可以使用的指标有很多,包括调整后的 r 平方、MAE、MSE、准确度、召回率、精确度、f1 分数等等。

问:解释什么是精确和召回

回忆一下试图回答“正确识别实际阳性的比例是多少?”

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

Precision 试图回答“多大比例的肯定识别实际上是正确的?”

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

摘自维基百科

问:解释什么是假阳性和假阴性。为什么这些对彼此很重要?举例说明假阳性比假阴性更重要,假阴性比假阳性更重要,以及这两种错误同等重要

一个假阳性是当一个条件不存在时对其存在的不正确识别。

假阴性是对实际存在的条件不存在的错误识别。

假阴性比假阳性更重要的一个例子是癌症筛查。与其说有人得了癌症,后来才发现没有,不如说有人没得癌症。

这是一个主观的论点,但从心理学的角度来看,假阳性可能比假阴性更糟糕。例如,赢得彩票的假阳性可能比假阴性更糟糕,因为人们通常不会期望赢得彩票。

问:监督学习和无监督学习有什么区别?给出具体的例子

监督学习包括学习一个函数,该函数基于示例输入-输出对将输入映射到输出[1]。

例如,如果我有一个包含两个变量的数据集,年龄(输入)和身高(输出),我可以实现一个监督学习模型,根据年龄预测一个人的身高。

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

由作者创建

与监督学习不同,非监督学习用于从输入数据中进行推断和发现模式,而不参考标记的结果。无监督学习的一个常见用途是根据购买行为对客户进行分组,以找到目标市场。

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

查看我的文章’ 六分钟解释所有机器学习模型 '如果你想了解更多这方面的信息!

问:假设您需要使用多元回归生成一个预测模型。解释你打算如何验证这个模型

有两种主要方法可以做到这一点:

A)调整后的 R 平方

r 平方是一种度量,它告诉你因变量的方差在多大程度上是由自变量的方差来解释的。更简单地说,当系数估计趋势时,R 平方表示最佳拟合线周围的散布。

然而,添加到模型中的每一个额外的独立变量总是增加 R 平方值——因此,具有几个独立变量的模型可能看起来更适合,即使它不是。这就是调整后的 R 的用武之地。调整后的 R 补偿每个额外的独立变量,并且仅在每个给定变量将模型改进到超出概率可能的程度时才增加。这很重要,因为我们正在创建一个多元回归模型。

B)交叉验证

大多数人常用的一种方法是交叉验证,将数据分成两组:训练数据和测试数据。有关这方面的更多信息,请参见第一个问题的答案。

问:NLP 代表什么?

NLP 代表自然语言处理。它是人工智能的一个分支,赋予机器阅读和理解人类语言的能力。

问:什么时候你会使用随机森林来对抗 SVM,为什么?

为什么随机森林是比支持向量机更好的模型选择,有几个原因:

  • 随机森林允许您确定要素的重要性。SVM 不能这么做。
  • 随机森林比 SVM 建造起来更快更简单。
  • 对于多类分类问题,支持向量机需要一种 one-vs-rest 方法,这种方法扩展性差,占用内存多。

问:为什么降维很重要?

降维是减少数据集中要素数量的过程。这主要在您想要减少模型中的方差(过度拟合)的情况下很重要。

维基百科陈述了降维的四个优点(见此处):

  1. 它减少了所需的时间和存储空间
  2. 多重共线性的消除改善了机器学习模型参数的解释
  3. 当数据降低到非常低的维度时,如 2D 或 3D ,将变得更容易可视化
  4. 它避免了维数灾难

问:什么是主成分分析?解释你会用主成分分析来解决哪类问题。

从最简单的意义上来说,PCA 涉及将高维数据(例如 3 维)投影到更小的空间(例如 2 维)。这导致数据的维度降低(2 维而不是 3 维),同时保持模型中的所有原始变量。

PCA 通常用于压缩目的,以减少所需的内存并加速算法,以及用于可视化目的,使汇总数据更容易。

问:为什么朴素贝叶斯这么差?如何改进使用朴素贝叶斯的垃圾邮件检测算法?

朴素贝叶斯的一个主要缺点是,它有一个很强的假设,即假设这些特征彼此不相关,但事实通常并非如此。

改进这种使用朴素贝叶斯的算法的一种方法是对特征去相关,使得假设成立。

问:线性模型的缺点是什么?

线性模型有几个缺点:

  • 线性模型有一些强有力的假设,在应用中可能不成立。它假设线性关系、多元正态性、没有或很少多重共线性、没有自相关和同方差
  • 线性模型不能用于离散或二元结果。
  • 您不能改变线性模型的模型灵活性。

问:你认为 50 个小决策树比一个大决策树好吗?为什么?

问这个问题的另一种方式是“随机森林是比决策树更好的模型吗?”答案是肯定的,因为随机森林是一种集成方法,需要许多弱决策树来形成强学习器。随机森林更准确、更健壮,并且不容易过度拟合。

问:为什么均方差不是衡量模型性能的好方法?你有什么建议?

均方误差(MSE)对大误差给予相对较高的权重,因此,MSE 往往过于强调大偏差。更可靠的替代方法是 MAE(平均绝对偏差)。

问:线性回归需要哪些假设?如果这些假设中的一些被违反了呢?

这些假设如下:

  1. 用于拟合模型的样本数据是代表人口的
  2. X 和 Y 的均值之间的关系是线性****
  3. 残差的方差对于 X 的任何值都是相同的(同方差)****
  4. 观察是相互独立的
  5. 对于 X 的任意值,Y 都是正态分布**。**

极端违反这些假设将使结果变得多余。对这些假设的小的违反将导致估计的更大的偏差或方差。

问:什么是共线性,如何处理共线性?如何去除多重共线性?

当多元回归方程中的一个自变量与另一个自变量高度相关时,就存在多重共线性。这可能是有问题的,因为它破坏了一个独立变量的统计意义。

您可以使用方差膨胀因子(VIF)来确定自变量之间是否存在多重共线性-标准基准是,如果 VIF 大于 5,则存在多重共线性。

问:如何检查回归模型是否很好地拟合了数据?

有几个指标可供您使用:

****R 平方/调整后的 R 平方:相对拟合度。这在之前的回答中已经解释过了

F1 得分:评估所有回归系数都等于零的原假设与至少一个不等于零的替代假设

RMSE: 绝对契合度。

什么是决策树?

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

图片来自 Kaggle

决策树是一种流行的模型,用于运筹学、战略规划和机器学习。上面的每个方块被称为一个节点,节点越多,你的决策树就越精确(一般来说)。决策树的最后一个节点,也就是做出决策的地方,被称为树的。决策树直观且易于构建,但在准确性方面有所欠缺。

问:什么是随机森林?为什么好?

随机森林是一种基于决策树的集成学习技术。随机森林包括使用原始数据的自举数据集创建多个决策树,并在决策树的每一步随机选择一个变量子集。然后,该模型选择每个决策树的所有预测的模式。依靠“多数获胜”模型,它降低了单个树出错的风险。

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

例如,如果我们创建一个决策树,第三个,它会预测 0。但是如果我们依赖所有 4 个决策树的模式,预测值将是 1。这就是随机森林的力量。

随机森林提供了其他几个好处,包括强大的性能,可以模拟非线性边界,不需要交叉验证,并赋予功能重要性。

务必 订阅此处 或至我的 独家快讯 千万不要错过另一篇关于数据科学的指南、窍门和技巧、生活经验等!

问:什么是内核?解释内核技巧

核是一种计算两个向量 𝐱 x 和 𝐲 y 在某个(可能是非常高维的)特征空间内点积的方法,这就是为什么核函数有时被称为“广义点积”[2]

核心技巧是一种使用线性分类器来解决非线性问题的方法,方法是将线性不可分的数据转换为高维线性可分的数据。

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

摘自分析 Vidhya

问:在拟合 SVM 之前进行降维是否有益?为什么或为什么不?

当特征的数量大于观察的数量时,那么执行维数减少通常会改善 SVM。

问:什么是过度拟合?

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

摘自维基百科

过度拟合是一种错误,即模型“拟合”数据太好,导致模型具有高方差和低偏差。因此,过度拟合模型将会不准确地预测新的数据点,即使它对训练数据具有高的准确性。

问:什么是助推?

Boosting 是一种集成方法,通过减少模型的偏差和方差来改进模型,最终将弱学习者转换为强学习者。总体思路是训练一个弱学习器,通过对前一个学习器的学习,依次迭代改进模型。你可以在这里 了解更多

一定要 订阅 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!

统计、概率和数学

问:商品在位置 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

点击查看亚马逊数据科学家采访指南

问:你从 100 枚硬币中随机抽取一枚——1 枚不公平硬币(正面朝上),99 枚公平硬币(正面朝下),然后掷 10 次。如果结果是 10 头,硬币不公平的概率是多少?

这可以用贝叶斯定理来回答。贝叶斯定理的扩展方程如下:

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

假设选到不公平硬币的概率表示为 P(A),连续翻转 10 个头像的概率表示为 P(B)。那么 P(B|A)等于 1,P(B∣ A)等于 0。⁵ ⁰,P( A)等于 0.99。

如果填入等式,那么 P(A|B) = 0.9118 或者 91.18%。

问:凸与非凸代价函数的区别;当一个代价函数是非凸的时候意味着什么?

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

摘自加州大学洛杉矶分校谢卓瑞

****凸函数是指在图上任意两点之间画出的一条线位于图上或图上。它有一个最小值。

****非凸函数是在图上任意两点之间画的线可能与图上其他点相交的函数。它的特征是“波浪形”。

当成本函数是非凸的时,这意味着该函数有可能找到局部最小值而不是全局最小值,从优化的角度来看,这在机器学习模型中通常是不期望的。

问:浏览概率基础知识

为此,我要在这里和四种不同的计数方法(详见 这里 )。

概率的八大法则

  • 规则#1:对于任何事件 A,0≤P(A)≤1换句话说,一个事件的概率范围可以从 0 到 1。
  • 规则 2:所有可能结果的概率总和总是等于 1。
  • 规则#3: P(不是 A)= 1—P(A)这个规则解释了一个事件的概率和它的补事件之间的关系。补充事件是指包含 a 中没有的所有可能结果的事件
  • 规则#4:如果 A 和 B 是不相交事件(互斥),那么 P(A 或 B)= P(A)+P(B)这被称为不相交事件的添加规则
  • 规则#5: P(A 或 B) = P(A) + P(B) — P(A 和 B)这就是所谓的一般加法法则。
  • 规则#6:如果 A 和 B 是两个独立事件,那么 P(A 和 B)= P(A) P(B)这叫做独立事件的乘法法则。*
  • 规则#7:给定事件 A,事件 B 的条件概率是 P(B|A) = P(A 和 B) / P(A)
  • 规则#8:对于任意两个事件 A 和 B, P(A 和 B)= P(A) P(B | A)这就是所谓的一般乘法法则*

计数方法

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

阶乘公式:n!= n x (n -1) x (n — 2) x … x 2 x 1 当项目数等于可用位置数时使用。例:找出 5 个人可以坐在 5 个空座位上的总方式数。
= 5×4×3×2×1 = 120

基本计数原理(乘法) 当允许重复且填充空位的方式数不受之前填充的影响时,应使用此方法。早餐有 3 种,午餐有 4 种,甜点有 5 种。组合总数= 5 x 4 x 3 = 60

排列:P(n,r)= n!/(n r)!
例如,一个代码有 4 个数字,按特定顺序排列,数字范围从 0 到 9。如果一个数字只能用一次,有多少种排列?
P(n,r) = 10!/(10–4)!=(10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x2 x 1)/(6x 5 x 4 x 3 x2 x 1)= 5040

组合公式:C(n,r)=(n!)/[(n r)!r!] 当不允许替换并且项目的排列顺序不重要时使用。要赢得彩票,你必须从 1 到 52 中以任意顺序选出 5 个正确的数字。有多少种可能的组合?
C(n,r) = 52!/ (52–5)!5!= 2598960

问:描述马尔可夫链?

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

Brilliant 提供了马尔可夫链的一个很好的定义(此处):

“马尔可夫链是一个数学系统,它按照一定的 概率 规则经历从一个状态到另一个状态的转变。马尔可夫链的定义特征是,无论 过程 如何到达其当前状态,可能的未来状态都是固定的。换句话说,转换到任何特定状态的概率只取决于当前状态和经过的时间。”

马尔可夫链背后的实际数学需要线性代数和矩阵的知识,所以我会在下面留下一些链接,以防你想自己进一步探索这个主题。

查看更多 此处 此处

问:一个盒子里有 12 张红卡和 12 张黑卡。另一个盒子里有 24 张红牌和 24 张黑牌。你想从两个盒子中的一个里随机抽取两张卡片,一次抽取一张。哪个盒子得到同色卡片的概率更大,为什么?

有 24 张红卡和 24 张黑卡的盒子获得两张同色卡片的概率更大。让我们走过每一步。

假设你从每副牌中抽出的第一张牌是红色的 a。

这意味着在有 12 个红和 12 个黑的牌组中,现在有 11 个红和 12 个黑。因此,你再抽一张红色的几率等于 11/(11+12)或 11/23。

一副牌中有 24 个红和 24 个黑,那么就有 23 个红和 24 个黑。因此,你再抽一张红色的几率等于 23/(23+24)或 23/47。

由于 23/47 > 11/23,所以卡数较多的第二副牌有较大概率得到相同的两张牌。

问:你在赌场,有两个骰子可以玩。你每掷一次 5 就赢 10 美元。如果你一直玩到你赢了然后停止,预期的回报是多少?

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

  • 我们假设每次你想玩的时候要花 5 美元。
  • 两个骰子有 36 种可能的组合。
  • 在 36 种组合中,有 4 种组合会掷出 5(见蓝色)。这意味着有 4/36 或 1/9 的机会掷出 5。
  • 1/9 的胜算意味着你会输八次,赢一次(理论上)。
  • 因此,您的预期支出等于$ 10.00 * 1-$ 5.00 * 9 =-35.00。

编辑:谢谢各位的评论和指出,应该是-$35!

问:如何判断给定的硬币是否有偏差?

这不是一个难题。答案很简单,就是进行假设检验:

  1. 零假设是硬币没有偏向,翻转头的概率应该等于 50% (p=0.5)。另一个假设是硬币有偏差,p!= 0.5.
  2. 抛硬币 500 次。
  3. 计算 Z 得分(如果样本小于 30,则需要计算 t 统计量)。
  4. 对比 alpha(双尾检验所以 0.05/2 = 0.025)。
  5. 如果 p 值>α,则不拒绝 null,硬币不偏。
    如果 p 值<α,则 null 被拒绝,硬币有偏差。

了解更多假设检验 这里

让不公平的硬币变得公平

由于抛硬币是二进制的结果,你可以通过抛两次硬币来使不公平的硬币变得公平。如果你掷两次,有两种结果可以赌:正面跟着反面或者反面跟着正面。

P(正面) P(反面)= P(反面) P(正面)**

这是有意义的,因为每一次抛硬币都是一个独立的事件。这意味着如果你得到正面→正面或反面→反面,你需要重新抛硬币。

问:你即将登上去伦敦的飞机,你想知道你是否需要带雨伞。你随便打电话给三个朋友,问他们是否在下雨。你的朋友说实话的概率是 2/3,他们通过撒谎对你恶作剧的概率是 1/3。如果他们三个都说在下雨,那么伦敦下雨的概率是多少。

你可以看出这个问题与贝叶斯理论有关,因为最后一个陈述本质上遵循这样的结构,“假设 B 为真,A 为真的概率是多少?”因此,我们需要知道某一天伦敦下雨的概率。假设是 25%。

P(A) =下雨的概率= 25%
P(B) =三个朋友都说在下雨的概率
P(A|B)假定他们说在下雨的概率
P(B|A)假定在下雨的情况下三个朋友都说在下雨的概率= (2/3) = 8/27

第一步:求解 P(B)
P(A | B)= P(B | A) * P(A)/P(B),可以改写为
P(B)= P(B | A)
P(A)+P(B |非 A)
P(非 A)
P(B)=(2/3)
0.25+(1/3)* 0.75 = 0.25 * 8/27+0.75 * 1/1***

*第二步:求解 P(A | B)
P(A | B)= 0.25 (8/27)/(0.25 * 8/27+0.75 * 1/27)
P(A | B)= 8/(8+3)= 8/11

因此,如果三个朋友都说在下雨,那么有 8/11 的几率是真的在下雨。

问:给你 40 张四种不同颜色的卡片——10 张绿卡、10 张红牌、10 张蓝卡和 10 张黄牌。每种颜色的卡片都从一到十编号。随机抽取两张牌。找出所选卡片不是相同号码和相同颜色的概率。

由于这些事件不是独立的,我们可以使用规则:
P(A 和 B) = P(A) * P(B|A),也等于
P(非 A 非 B) = P(非 A) * P(非 B |非 A)

例如:

P(非 4 非黄)= P(非 4) * P(非黄|非 4)
P(非 4 非黄)= (36/39) * (27/36)
P(非 4 非黄)= 0.692

所以,挑出来的牌不是同号同色的概率是 69.2%。

问:如何评估洞察力的统计显著性?

您将执行假设检验来确定统计显著性。首先,你要陈述零假设和替代假设。其次,您将计算 p 值,即假设零假设为真,获得测试观察结果的概率。最后,您将设置显著性水平(alpha ),如果 p 值小于 alpha,您将拒绝 null 换句话说,结果具有统计显著性。

问:解释什么是长尾分布,并提供三个具有长尾的相关现象的例子。为什么它们在分类和回归问题中很重要?

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

长尾分布的例子

长尾分布是一种重尾分布,它有一条(或多条)逐渐渐近消失的尾巴。

3 实际例子包括幂定律、帕累托原则(通常称为 80-20 法则)和产品销售(即最畅销的产品与其他产品相比)。

在分类和回归问题中注意长尾分布是很重要的,因为出现频率最低的值构成了总体的大多数。这最终会改变您处理异常值的方式,并且它也与一些假设数据正态分布的机器学习技术相冲突。

问:什么是中心极限定理?解释一下。为什么重要?

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

来自维基百科

统计学如何为 CLT 提供了最好的定义,这就是:

“中心极限定理表明,无论总体分布的形状如何,随着样本量的增加,样本均值的抽样分布都接近正态分布。”[1]

中心极限定理很重要,因为它用于假设检验和计算置信区间。

问:什么是统计能力?

“统计功效”是指二元假设的功效,即假设替代假设为真,测试拒绝零假设的概率。[2]

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

问:解释选择偏差(关于数据集,而不是变量选择)。为什么重要?丢失数据处理等数据管理程序如何使情况变得更糟?

选择偏倚是指在选择个人、群体或数据进行分析时,没有实现适当的随机化,最终导致样本不能代表总体的现象。

理解和识别选择偏差是很重要的,因为它会严重扭曲结果,并提供关于特定人群的错误见解。

选择偏差的类型包括:

  • 抽样偏倚:由非随机抽样引起的有偏倚的样本
  • 时间间隔:选择支持预期结论的特定时间框架。例如,在临近圣诞节时进行销售分析。
  • 暴露:包括临床易感性偏倚、原发性偏倚、适应症偏倚。此处阅读更多****
  • 数据:包括摘樱桃、压制证据、证据不全的谬误。
  • 流失:流失偏倚类似于生存偏倚,即只有那些在长期过程中“存活”下来的人才会被纳入分析,或者类似于失败偏倚,即只有那些“失败”的人才会被纳入分析
  • 观察者选择:与人择原理有关,这是一种哲学上的考虑,我们收集的关于宇宙的任何数据都要经过过滤,为了让它可以被观察到,它必须与观察它的有意识和有智慧的生命兼容。[3]

处理缺失数据会使选择偏差变得更糟,因为不同的方法会以不同的方式影响数据。例如,如果您用数据的平均值替换空值,您就增加了偏差,因为您假设数据并不像实际可能的那样分散。

问:提供一个简单的例子,说明实验设计如何帮助回答一个关于行为的问题。实验数据和观测数据如何对比?

观察数据来自观察研究,即观察某些变量并试图确定它们之间是否存在关联。

实验数据来自实验研究,即当你控制某些变量并保持它们不变,以确定是否存在因果关系。

实验设计的一个例子如下:将一组分成两个。对照组正常生活。测试组被告知在 30 天内每天晚上喝一杯酒。然后可以进行研究,看看酒是如何影响睡眠的。

问:缺失数据的均值插补是可接受的做法吗?为什么或为什么不?

均值插补是用数据的均值替换数据集中的空值的做法。

均值插补通常是不好的做法,因为它没有考虑特征相关性。例如,假设我们有一个显示年龄和健康分数的表格,并假设一个 80 岁的老人缺少健康分数。如果我们从 15 岁到 80 岁的年龄范围内取平均健康分数,那么 80 岁的人看起来会有一个比他实际应该有的高得多的健康分数。

第二,均值插补减少了数据的方差,增加了数据的偏倚。由于方差较小,这导致模型不太精确,置信区间较窄。

问:什么是异常值?解释如何筛选异常值,如果在数据集中发现异常值,您会怎么做。此外,解释什么是内联体,如何筛选内联体,如果在数据集中发现了内联体,你会怎么做。

一个异常值是一个明显不同于其他观察值的数据点。

根据异常值的原因,从机器学习的角度来看,它们可能是坏的,因为它们会降低模型的准确性。如果异常值是由测量误差引起的,那么将它们从数据集中移除是非常重要的。有几种方法可以识别异常值:

****Z 值/标准偏差:如果我们知道一个数据集中 99.7%的数据位于三个标准偏差之内,那么我们可以计算一个标准偏差的大小,将其乘以 3,并确定超出该范围的数据点。同样,我们可以计算给定点的 z 分数,如果它等于+/- 3,那么它就是异常值。
注意:使用该方法时,需要考虑一些意外情况;数据必须呈正态分布,这一点不适用于小数据集,过多异常值的存在会影响 z 值。

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

四分位距(IQR): IQR,用于构建箱线图的概念,也可用于识别异常值。IQR 等于第三个四分位数和第一个四分位数之差。然后,如果一个点小于 Q1-1.5 * IRQ 或大于 Q3 + 1.5IQR,则可以确定该点是否为异常值。这达到大约 2.698 个标准偏差。*

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

照片来自迈克尔·加拉尼克

其他方法包括 DBScan 聚类、隔离森林和稳健随机采伐森林。

一个内联者是一个数据观察,它位于数据集的其余部分内,是不寻常的或者是一个错误。由于它位于数据集中,通常比异常值更难识别,需要外部数据来识别它们。如果您发现了任何内联者,您可以简单地将它们从数据集中删除以解决它们。

问:你如何处理丢失的数据?有什么插补技巧推荐?

有几种方法可以处理丢失的数据:

  • 删除缺少数据的行
  • 均值/中值/众数插补
  • 分配唯一的值
  • 预测缺失值
  • 使用支持缺失值的算法,如随机森林

最好的方法是删除缺少数据的行,因为这样可以确保没有偏差或差异被添加或删除,并最终产生一个稳健而准确的模型。但是,只有在开始时有大量数据并且缺失值的百分比很低的情况下,才建议这样做。

问:你有呼叫中心通话时长的数据。为如何编码和分析这些数据制定一个计划。解释一下这些持续时间的分布情况。你如何测试,甚至是图形化地测试,你的期望是否实现了?

首先,我会进行 EDA——探索性数据分析,以清理、探索和理解我的数据。见我关于 EDA 的文章 这里 。作为我的 EDA 的一部分,我可以构建一个通话持续时间的直方图来查看潜在的分布。

我的猜测是,呼叫的持续时间将遵循对数正态分布(见下文)。我认为它是正偏的原因是因为下限被限制为 0,因为调用不能是负秒。然而,在高端,很可能有一小部分通话时间相对较长。

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

对数正态分布示例

您可以使用 QQ 图来确认通话时长是否符合对数正态分布。参见 此处 了解更多 QQ 剧情。

问:解释行政数据集和从实验研究中收集的数据集之间可能的差异。管理数据可能会遇到什么问题?实验方法如何帮助缓解这些问题?它们带来了什么问题?

行政数据集通常是政府或其他组织出于非统计原因使用的数据集。

管理数据集通常比实验研究更大,更具成本效益。假设与管理数据集相关联的组织是活动的并且正在运行,那么它们也会被定期更新。与此同时,管理数据集可能无法捕获用户可能需要的所有数据,也可能不是所需的格式。它还容易出现质量问题和遗漏条目。

问:你正在为每个月上传的用户内容编写一份报告,并注意到 10 月份的上传量有一个峰值。特别是图片上传的高峰。您可能认为这是什么原因造成的,您将如何测试它?

照片上传数量激增的潜在原因有很多:

  1. 一项新功能可能已经在 10 月份实施,它涉及上传照片,并获得了用户的大量关注。例如,提供创建相册能力的功能。
  2. 同样,有可能之前上传照片的过程不直观,在 10 月份得到了改善。
  3. 可能有一场病毒式的社交媒体运动,包括持续了整个 10 月的上传照片。八月天,但更具扩展性的东西。
  4. 这有可能是因为人们上传了自己穿着万圣节服装的照片。

测试的方法取决于尖峰的原因,但是您可以进行假设测试来确定推断的原因是否是实际原因。

问:给出既不是高斯分布也不是对数正态分布的数据的例子。

  • 任何类型的分类数据都不会有高斯分布或对数正态分布。
  • 指数分布——例如,汽车电池的持续时间或地震发生前的时间。

一定要 订阅 千万不要错过另一篇关于数据科学的文章,包括指南、诀窍和技巧、生活经验等!

问:什么是根本原因分析?如何识别原因和相关性?举例说明

****根本原因分析:用于确定问题根本原因的解决问题的方法[5]

相关性衡量两个变量之间的关系,范围从-1 到 1。因果关系是指第一个事件似乎引发了第二个事件。因果关系主要看直接关系,而相关性可以看直接和间接关系。

例句:在加拿大,较高的犯罪率与较高的冰淇淋销售额有关,也就是说,它们是正相关的。然而,这并不意味着一个导致另一个。相反,这是因为当室外温度较高时,这两种情况发生得更多。

您可以使用假设检验或 A/B 检验来检验因果关系。

问:举一个例子,中间值比平均值更好衡量

当有许多异常值正或负地扭曲了数据时。

问:给定两个公平的骰子,得分总和为 4 的概率是多少?到 8?

滚动 a 4 有 4 种组合(1+3,3+1,2+2):
P(滚动 a 4) = 3/36 = 1/12

有滚安 8 的组合(2+6,6+2,3+5,5+3,4+4):
P(滚安 8) = 5/36

问:什么是大数定律?

大数定律是一种理论,它指出随着试验次数的增加,结果的平均值将越来越接近期望值。

正面硬币 100,000 次的翻转次数应该接近 0.5 次而不是 100 次。

问:如何计算所需的样本量?

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

误差幅度公式

您可以使用误差幅度(ME)公式来确定所需的样本量。

  • t/z =用于计算置信区间的 t/z 分数
  • ME =期望的误差幅度
  • S =样本标准偏差

问:当你取样时,你会造成什么样的偏见?

潜在的偏见包括:

  • ****抽样偏倚:由非随机抽样引起的有偏倚的样本
  • ****覆盖偏差:采样太少的观测值
  • ****生存偏差:忽略没有通过选择过程的观察的错误。

问:你如何控制偏见?

你可以做很多事情来控制和减少偏见。两种常见的方式包括随机化,参与者被随机分配,以及随机抽样,每个成员被选中的概率相等。

问:什么是混杂变量?

混杂变量或混杂因素是一种既影响因变量又影响自变量的变量,导致虚假关联,即两个或更多变量相关但无因果关系的数学关系。

问:什么是 A/B 测试?

A/B 检验是假设检验和双样本假设检验的一种形式,用于比较单个变量的两个版本,即控制变量和变量。它通常用于改善和优化用户体验和营销。

查看我的文章,数据科学 A/B 测试的简单指南。

问:只知道性别身高,你如何证明男性平均比女性高?

你可以用假设检验来证明男性平均比女性高。

零假设是男性和女性平均身高相同,而另一个假设是男性的平均身高高于女性的平均身高。

然后,您将收集男性和女性身高的随机样本,并使用 t 检验来确定您是否拒绝空值。

问:医院的感染率高于每 100 人-日感染 1 例被认为是高的。某医院在过去的 1787 人/天中有 10 例感染风险。给出医院是否低于标准的正确片面检验的 p 值。

由于我们查看的是给定时间段内发生的事件数量(感染数量),因此这是一个泊松分布问题。

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

在一个区间内观察到 k 个事件的概率

零(H0):每人每天 1 例感染
备选方案(H1): >每人每天 1 例感染

*k(实际)= 10 次感染
λ(理论)= (1/100)1787
p = 0.032372 或 3.2372% 计算使用。excel 中的 poisson()或 R 中的 ppois

由于 p 值< alpha (assuming 5% level of significance), we reject the null and conclude that the hospital is below the standard.

Q: You roll a biased coin (p(head)=0.8) five times. What’s the probability of getting three or more heads?

Use the General Binomial Probability formula to answer this question:

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

General Binomial Probability Formula

p = 0.8
n = 5
k = 3,4,5

P(3 头以上)= P(3 头)+ P(4 头)+ P(5 头)= 0.94 或 94%

问:一个随机变量 X 是正态的,均值为 1020,标准差为 50。计算 P(X>1200)

使用 Excel…
p =1-norm.dist(1200,1020,50,true)
p= 0.000159

问:假设出现在公交车站的人数为泊松分布,平均值为 2.5 人/小时。四小时内最多出现三人的概率是多少?

x = 3
平均值= 2.5
4 = 10
*

使用 Excel…

p = poisson.dist(3,10,true)
p = 0.010336

问:艾滋病毒检测的敏感性为 99.7%,特异性为 98.5%。患病率为 0.1%的人群中的受试者获得阳性测试结果。测试的精确度是多少(即他是 HIV 阳性的概率)?

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

精度方程(PV)

精度=阳性预测值= PV
PV =(0.001 * 0.997)/[(0.001 * 0.997)+((1–0.001)
(1–0.985))]
PV = 0.0624 或 6.24%
*

查看更多关于这个方程的 这里

问:你正在竞选公职,你的民意调查机构调查了数百人。他们中的 60 个人声称他们会投你的票。你能放松吗?

  • 假设只有你和另一个对手。
  • 另外,假设我们想要 95%的置信区间。这使我们的 z 值为 1.96。

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

置信区间公式

p-hat = 60/100 = 0.6
z * = 1.96
n = 100
这就给了我们一个[50.4,69.6]的置信区间。因此,给定 95%的置信区间,如果你可以接受最糟糕的捆绑情形,那么你可以放松了。否则,你不能放松,直到 100 分中有 61 分说是。

问:盖革计数器在 5 分钟内记录 100 次放射性衰变。找到每小时衰变数的大约 95%的区间。

  • 因为这是一个泊松分布问题,均值=λ=方差,这也意味着标准差=均值的平方根
  • 95%的置信区间意味着 z 值为 1.96
  • 一个标准偏差= 10

因此置信区间= 100 +/- 19.6 = [964.8,1435.2]

问:苏格兰的谋杀率从前年的 115 下降到了去年的 99。这种报道的变化真的值得注意吗?

  • 因为这是一个泊松分布问题,均值=λ=方差,这也意味着标准差=均值的平方根
  • 95%的置信区间意味着 z 值为 1.96
  • 一个标准偏差= sqrt(115) = 10.724

因此置信区间= 115+/- 21.45 = [93.55,136.45]。由于 99 在这个置信区间内,我们可以假设这个变化不是很值得注意。

问:考虑双亲异性恋家庭的流感流行。假设父母中至少有一方患病的概率是 17%。父亲感染流感的概率为 12%,而母亲和父亲都感染该疾病的概率为 6%。母亲感染流感的概率有多大?

利用概率中的一般加法法则:
P(母亲或父亲)= P(母亲)+ P(父亲)— P(母亲和父亲)
P(母亲)= P(母亲或父亲)+ P(母亲和父亲)— P(父亲)
P(母亲)= 0.17+0.06–0.12
P(母亲)= 0.11

问:假设 35-44 岁男性的舒张压(DBPs)呈正态分布,均值为 80(毫米汞柱),标准差为 10。随机选择一个 35-44 岁的人,其 DBP 低于 70 的概率是多少?

因为 70 比平均值低一个标准差,所以取一个标准差左边的高斯分布的面积。

= 2.3 + 13.6 = 15.9%

问:在感兴趣的人群中,9 名男性的样本产生了 1,100cc 的样本平均脑容量和 30cc 的标准偏差。这个新群体的平均脑容量的 95%学生 T 置信区间是多少?

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

样本的置信区间

假设置信度为 95%,自由度等于 8,t 值= 2.306

*置信区间= 1100±2.306 (30/3)
置信区间= [1076.94,1123.06]

问:在六周的时间里,9 名受试者服用了减肥药。体重的平均差异(随访-基线)为-2 磅。要使 95% T 置信区间的上端点达到 0,体重差异的标准偏差必须是多少?

上限=平均值+ t 得分(标准偏差/sqrt(样本大小))
0 =-2+2.306 (s/3)
2 = 2.306 * s/3
s = 2.601903
因此,标准偏差必须至少约为 2.60,95% T 置信区间的上限才能达到 0。

问:在一项关于急诊室等待时间的研究中,调查人员考虑了一种新的标准的分流系统。为了测试系统,管理员选择了 20 个晚上,并随机分配新的分流系统在 10 个晚上使用,标准系统在其余 10 个晚上使用。他们计算了每晚看医生的平均等待时间(MWT)。新系统的平均 MWT 为 3 小时,方差为 0.60,而旧系统的平均 MWT 为 5 小时,方差为 0.68。考虑与新系统相关的平均 MWT 差异的 95%置信区间估计。假设方差不变。间隔是多少?按此顺序减去(新系统—旧系统)。

查看这里寻找两个独立样本的置信区间的完整教程。

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

置信区间=平均值+/- t 分数标准误差(见上文)***

均值=新均值-旧均值= 3–5 =-2

给定 df = 18(20–2)和 95%的置信区间,t 得分= 2.101

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

标准误差= sqrt((0。⁶ 9+0.⁶⁸ 9)/(10+10–2)) sqrt(1/10+1/10)
标准误差= 0.352
*

置信区间= [-2.75,-1.25]

问:为了进一步测试医院的分诊系统,管理员选择了 200 个晚上,并随机分配了一个新的分诊系统用于 100 个晚上,一个标准系统用于其余的 100 个晚上。他们计算了每晚看医生的平均等待时间(MWT)。新系统的平均 MWT 为 4 小时,标准偏差为 0.5 小时,而旧系统的平均 MWT 为 6 小时,标准偏差为 2 小时。考虑与新治疗相关的平均 MWT 降低的假设。相对于这一假设,方差不等的 95%独立组置信区间说明了什么?(因为每组有如此多的观察值,所以用 Z 分位数代替 t 分位数。)

假设我们按照这个顺序减去(新系统—旧系统):

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

两个独立样本的置信区间公式

均值=新均值-旧均值= 4–6 =-2

z 得分= 1.96 95%的置信区间

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

st. error = sqrt((0。⁵ 99+ 99)/(100+100–2)) sqrt(1/100+1/100)
标准差= 0.205061
下界=-2–1.96 * 0.205061 =-2.40192
上界= -2+1.96
0.205061 = -1.59808****

置信区间= [-2.40192,-1.59808]

如果您想测试自己的代码,请查看Saturn cloud,一个可扩展、灵活的数据科学平台。******

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

SQL 练习题

问题 1:第二高的薪水

编写一个 SQL 查询,从 *Employee* 表中获取第二高的薪水。例如,给定下面的雇员表,查询应该返回 *200* 作为第二高的薪金。如果没有第二高的薪水,那么查询应该返回 *null*

**+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+**

解决方案 A:使用 IFNULL,OFFSET

  • IFNULL( 表达式,alt ) : ifNULL()如果为 null 则返回指定值,否则返回预期值。如果没有第二高的薪水,我们将用它返回 null。
  • OFFSET : offset 与 ORDER BY 子句一起使用,忽略您指定的前 n 行。这将是有用的,因为你想得到第二排(第二高的薪水)
**SELECT
    IFNULL(
        (SELECT DISTINCT Salary
        FROM Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1
        ), null) as SecondHighestSalary
FROM Employee
LIMIT 1**

解决方案 B:使用 MAX()

这个查询说选择不等于最高工资的最高工资,相当于说选择第二高的工资!

**SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary != (SELECT MAX(salary) FROM Employee)**

在你下一次面试之前,这里有三个 SQL 概念需要回顾!

问题 2:重复的邮件

编写一个 SQL 查询,在一个名为 *Person* 的表中查找所有重复的电子邮件。

**+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+**

解决方案 A:子查询中的 COUNT()

首先,创建一个子查询来显示每封电子邮件的频率计数。然后在计数大于 1 时过滤子查询。

**SELECT Email
FROM (
    SELECT Email, count(Email) AS count
    FROM Person
    GROUP BY Email
) as email_count
WHERE count > 1**

解决方案 B: HAVING 子句

  • HAVING 是一个子句,本质上允许您将 WHERE 语句与 aggregates (GROUP BY)结合使用。
**SELECT Email
FROM Person
GROUP BY Email
HAVING count(Email) > 1**

问题#3:温度上升

给定一个 *Weather* 表,编写一个 SQL 查询来查找与前一个(昨天的)日期相比温度更高的所有日期的 id。

**+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
|       1 |       2015-01-01 |               10 |
|       2 |       2015-01-02 |               25 |
|       3 |       2015-01-03 |               20 |
|       4 |       2015-01-04 |               30 |
+---------+------------------+------------------+**

解决方案:DATEDIFF()

  • DATEDIFF 计算两个日期之间的差异,用于确保我们将今天的温度与昨天的温度进行比较。

简单地说,该查询是说,选择某一天的温度高于昨天温度的 id。

**SELECT DISTINCT [a.Id](http://a.id/)
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1**

问题 4:部门最高工资

*Employee*表包含所有员工。每个雇员都有一个 Id,一份薪水,还有一个部门 Id 列。

**+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+**

*Department*表包含公司的所有部门。

**+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+**

编写一个 SQL 查询来查找每个部门中工资最高的雇员。对于上面的表,您的 SQL 查询应该返回下面的行(行的顺序无关紧要)。

**+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
+------------+----------+--------+**

解决方案:IN 子句

  • 子句中的允许您在 WHERE 语句中使用多个 OR 子句。例如,country = 'Canada '或 country = 'USA '与 WHERE country IN ('Canada ‘,’ USA ')相同。
  • 在这种情况下,我们希望筛选 Department 表,只显示每个部门的最高工资(即 DepartmentId)。然后我们可以连接两个表,其中 DepartmentId 和 Salary 位于筛选的 Department 表中。
**SELECT
    Department.name AS 'Department',
    Employee.name AS 'Employee',
    Salary
FROM Employee
INNER JOIN Department ON Employee.DepartmentId = Department.Id
WHERE (DepartmentId , Salary) 
    IN
    (   SELECT
            DepartmentId, MAX(Salary)
        FROM
            Employee
        GROUP BY DepartmentId
 )**

问题 5:交换座位

玛丽是一所中学的老师,她有一个表 *seat* 存储着学生的名字和他们对应的座位号。列 id 是一个连续的增量。玛丽想给相邻的学生换座位。

您能编写一个 SQL 查询来为 Mary 输出结果吗?

**+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+**

对于样本输入,输出为:

**+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+**

注: 如果学生人数为奇数,则无需换最后一个座位。

解决方案:CASE WHEN

  • 想一个例子,当 THEN 语句类似于代码中的 IF 语句时。
  • 第一个 WHEN 语句检查是否有奇数行,如果有,确保 id 号不变。
  • 第二个 WHEN 语句为每个 id 加 1(例如 1,3,5 变成 2,4,6)
  • 类似地,第三个 WHEN 语句将每个 id 减 1(2,4,6 变成 1,3,5)
**SELECT 
    CASE 
        WHEN((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
        WHEN id%2 = 1 THEN id + 1
        ELSE id - 1
    END AS id, student
FROM seat
ORDER BY id**

多方面的

问:如果有 8 个重量相等的弹珠和 1 个稍重的弹珠(总共 9 个弹珠),需要称重多少次才能确定哪个弹珠最重?

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

作者创建的图像

需要称重两次(见上文 A 和 B 部分):

  1. 你将九个弹珠分成三组,每组三个,称其中两组的重量。如果天平平衡(选择 1),你知道重的弹球在第三组弹球中。否则,您将选择权重更大的组(选项 2)。
  2. 然后你将练习同样的步骤,但是你将有三组一个弹球,而不是三组三个。

问:改变基本会员费会对市场产生什么影响?

我对这个问题的答案没有 100%的把握,但我会尽力而为!

让我们举一个主要会员费上涨的例子——有两方参与,买方和卖方。

对于买家来说,提高会员费的影响最终取决于买家需求的价格弹性。如果价格弹性很高,那么给定的价格上涨将导致需求大幅下降,反之亦然。继续购买会员费的买家可能是亚马逊最忠诚和最活跃的客户——他们也可能更加重视 prime 产品。

卖家将受到打击,因为现在购买亚马逊一篮子产品的成本更高了。也就是说,一些产品将受到更严重的打击,而其他产品可能不会受到影响。亚马逊最忠实的顾客购买的高端产品可能不会受到太大影响,比如电子产品。

问:如果 iOS 上 70%的脸书用户使用 Instagram,但 Android 上只有 35%的脸书用户使用 Instagram,你会如何调查这种差异?

有许多可能的变量会导致这种差异,我将检查一下:

  • iOS 和 Android 用户的人口统计数据可能会有很大差异。例如,根据 Hootsuite 的调查,43%的女性使用 Instagram,而男性只有 31%。如果 iOS 的女性用户比例明显高于 Android,那么这可以解释这种差异(或者至少是部分差异)。这也适用于年龄、种族、民族、地点等
  • 行为因素也会对差异产生影响。如果 iOS 用户比 Android 用户更频繁地使用手机,他们更有可能沉迷于 Instagram 和其他应用程序,而不是那些在手机上花费时间少得多的人。
  • 另一个需要考虑的因素是 Google Play 和 App Store 有什么不同。例如,如果 Android 用户有明显更多的应用程序(和社交媒体应用程序)可供选择,这可能会导致用户的更大稀释。
  • 最后,与 iOS 用户相比,用户体验的任何差异都会阻止 Android 用户使用 Instagram。如果这款应用对安卓用户来说比 iOS 用户更容易出错,他们就不太可能在这款应用上活跃。

查看更多脸书数据科学面试问题点击这里

问:每个用户的点赞数和在一个平台上花费的时间在增加,但用户总数在减少。它的根本原因是什么?

一般来说,你会想从面试官那里获得更多的信息,但是让我们假设这是他/她唯一愿意提供的信息。

关注每个用户的点赞数,有两个原因可以解释为什么这个数字会上升。第一个原因是,随着时间的推移,用户的平均参与度普遍提高了——这是有道理的,因为随着使用该平台成为一种习惯性做法,久而久之的活跃用户更有可能成为忠实用户。每个用户点赞数会增加的另一个原因是分母,即用户总数,在减少。假设停止使用该平台的用户是不活跃的用户,也就是参与度和点赞数低于平均水平的用户,这将增加每个用户的平均点赞数。

上面的解释也适用于在平台上花费的时间。随着时间的推移,活跃用户变得越来越活跃,而很少使用的用户变得不活跃。总体而言,参与度的增加超过了参与度很低的用户。

更进一步说,有可能“参与度低的用户”是脸书能够检测到的机器人。但随着时间的推移,脸书已经能够开发出识别和删除机器人的算法。如果以前有大量的机器人,这可能是这种现象的根本原因。

问:脸书发现赞数每年增长 10%,为什么会这样?

给定年份的总赞数是用户总数和每个用户的平均赞数的函数(我称之为参与度)。

用户总数增加的一些潜在原因如下:由于国际扩张而获得的用户以及随着年龄增长而注册脸书的年轻群体。

参与度增加的一些潜在原因是用户对应用程序的使用增加,用户变得越来越忠诚,新的特性和功能以及用户体验的改善。

问:如果我们测试产品 X,你会看什么标准来确定它是否成功?

决定产品成功的标准取决于商业模式和企业试图通过产品实现的目标。《精益分析》一书展示了一个很好的框架,人们可以用它来确定在给定场景中使用什么指标:

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

精益分析框架

问:如果一个项目经理说他们想把新闻订阅的广告数量增加一倍,你如何判断这是不是一个好主意?

您可以通过将用户分成两组来执行 A/B 测试:一组是广告数量正常的对照组,一组是广告数量翻倍的测试组。然后,您将选择指标来定义什么是“好主意”。例如,我们可以说零假设是广告数量翻倍会减少花在脸书上的时间,另一个假设是广告数量翻倍不会对花在脸书上的时间有任何影响。但是,您可以选择不同的指标,如活跃用户数或流失率。然后,您将进行测试,并确定拒绝或不拒绝 null 的测试的统计显著性。

问:什么是:提升、KPI、稳健性、模型拟合、实验设计、80/20 法则?

****提升:提升是针对随机选择目标模型测量的目标模型的性能的度量;换句话说,lift 告诉你你的模型在预测事物方面比没有模型时好多少。

KPI: 代表关键绩效指标,这是一个可衡量的指标,用于确定公司实现其业务目标的情况。错误率。

健壮性:健壮性通常是指系统处理可变性并保持有效的能力。

****模型拟合:指模型拟合一组观察值的程度。

****实验设计:也称为 DOE,是在假设反映变量的条件下,旨在描述和解释信息变化的任何任务的设计。[4]本质上,实验的目的是根据一个或多个输入(独立变量)的变化来预测结果。

****80/20 法则:又称帕累托原理;80%的结果来自 20%的原因。80%的销售额来自 20%的顾客。

问:定义质量保证,六西格玛。

****质量保证:一项或一组活动,旨在通过减少错误和缺陷来维持期望的质量水平。

****六西格玛:一种特定类型的质量保证方法,由一套用于过程改进的技术和工具组成。六西格玛流程是指所有结果的 99.99966%没有缺陷。

参考

【1】中心极限定理,定义及例题步骤简单如何统计

[2] 权力,统计,百科

[3] 人择原理,百科

[4] 实验设计,百科

[5] 根本原因分析,百科

感谢阅读!

如果您喜欢这篇文章,请务必点击 订阅此处 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!

不确定接下来要读什么?我为你挑选了另一篇文章:

**** [## 超过 100 个数据科学家面试问题和答案!

来自亚马逊、谷歌、脸书、微软等公司的面试问题!

towardsdatascience.com](/over-100-data-scientist-interview-questions-and-answers-c5a66186769a)

或者你可以查看我的介质页面:

[## 特伦斯·申—中号

阅读特伦斯·申在媒体上的文章。数据科学@ KOHO,SaturnCloud |理学硕士,MBA |…

terenceshin.medium.com](https://terenceshin.medium.com/)

特伦斯·申

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值