TowardsDataScience 博客中文翻译 2020(九百八十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

什么是研究?

原文:https://towardsdatascience.com/what-is-research-e119da986a96?source=collection_archive---------55-----------------------

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

作者拍摄

通过我们的思想发现自然

下面分享的所有观点都是基于我的经验和我的信念。这不是绝对的事实,而是我所想的一种天真的看法。

什么是研究?

一些有趣的定义:

研究是“为增加知识储备而进行的创造性和系统性工作,包括人类、文化和社会的知识,以及利用这些知识储备来设计新的应用。”它包括信息的收集、组织和分析,以增加我们对一个主题或问题的理解。(来源:维基百科)

科学研究是一种收集数据和利用好奇心的系统方法。这项研究为解释世界的本质和属性提供了科学信息和理论。它使实际应用成为可能。(来源:维基百科)

对我来说,研究是想要对未知做出反应的生物之间的一种普遍想法。如果我们看看过去,学者们掌握着知识,想要了解世界。每个人都有自己的愿景,这些愿景可以转化为基本问题,他们通过假设进行测试。
研究不是,找到答案,还是找不到答案。使假设无效的结果本身就是一个结果,因为它允许其他人不走这条路,并允许他们测试其他假设。研究是对未知事物提出科学问题的艺术。创造一个有问题的问题,并且能够用一系列的假设来测试它,并且能够向其他人解释路径,以便他们跟随你并且帮助你。

如果我们看看量子物理学的创建,来自所有国家的一群研究人员只花了几年时间,他们每年只聚会一次,交流他们的进展,以创建一个解释无限小的有限理论。今天所有的微电子工作都要归功于这个理论。尼尔斯·玻尔说:“如果量子力学还没有深刻地震撼你你还没有理解。”

我觉得对于研究来说也是一样的,“如果你觉得不是为了遇见未知,那就是你还没想通”。

目前,研究并不性感。大多数研究人员花费超过一半的时间寻找资金。研究人员正在为发表论文而疯狂地竞争**,如果你想有一个好名声,一个好的 H 指数你必须每年发表 2 到 3 篇论文。大多数实验室都在战争中,无论是为了资金,为了招聘还是为了诋毁其他实验室的论文。**

Yoshua Bengio 最近在他的博客中发表了一篇文章,指出会议论文的选择过程完全需要重新审核,因为提交的论文中有太多没有材料或基本回复 [1]。

疯狂的出版竞赛破坏了研究的本质,即回答未回答的问题,探索未知环境的系统空间。做好研究需要时间,通过证明和测试假设来充分回应。

今天,如果你在主要期刊或会议上发表了 X 篇论文,你就是一名研究员。但是做研究员不就是一种生活方式吗?一种观察和预测世界的方式?在别人会经过的地方提问?用天真的眼光去看未知的地方?

做研究意味着大部分时间生活在失败中,也就是承认当我们找到一个答案时,其他研究人员可用的时间使它变得无用和无用。但美丽的是发现快乐瞬间的火花,为科学做出哪怕是最小的贡献。就像一个刚找到一盒巧克力的孩子。发现的喜悦。不幸的是,这很快就会被一个繁琐的过程所玷污,让你证明自己是你所声称的那样。

很久以前,我的一位论文导师对我说“我们做研究不是为了赚钱”我笑了很久,对自己说这太荒谬了,在爬上所有的文凭之后,薪水必须与之相称。但是最后,我明白了,这几句话包含了我可能永远不会拥有的金玉良言。研究不是一份工作,而是一种生活方式,一种激情,它让你每天早上起来的唯一目的就是发现这个世界。成为未知领域的探险家。

出版物的数量每年都在激增,这使得一个人不可能面面俱到。另一个问题是,目前大多数发表的研究结果是错误的[2],这很正常,我们是人,但我希望大多数错误不是故意犯下的,以在出版物中显示结果。此外,复制危机是研究中的一大重要偏见(科学研究很难或不可能复制或再现[3])。

大概是天真率真的眼光。然而,我愿意相信这是科学的目标。我没有研究员的身份,因为我没有发表的可能性。我攻读了天体物理学博士学位,现在在“人工智能公司工作。我将我的知识和科学方法应用于它,但没有发表,我不断地在文献、出版平台或研究人员的博客中寻找答案,以找到问题的解决方案,或者通过我的研究找到答案,感谢这种方法让我们探索未知。也许真正的研究人员会向我扔石头,但有多少人在做研究呢?我的意思是,有多少人足够幸运,能够不用浪费时间去找工作就能做研究?

现在在哪里做研究?

几年前,研究只在学院和大学里进行,现在这种趋势正在改变。公司越来越多地通过专门的研究和开发团队获得他们的位置(R&D),非常大的公司有巨大的部门专门从事各种研究。GAFAMs 和其他跨国公司每年投资数十亿美元进行研究,以揭示秘密和创新。

大多数公司已经意识到,如果他们想保持对竞争对手的竞争优势,他们必须超越他们所拥有的知识。获取新知识需要研究来产生智力资本。

如何成为一名研究员?

大多数人会回答你需要博士学位,拿了博士学位才能成为研究员。这是真的,但不是全部,博士学位培养你成为一名研究员,但对于招聘医生来说,有几个级别的“博士”。第一类是研究人员,他们开始了他们的论文主题,发展了解决问题的直觉。他们尝试假设,比较方法,获得本领域和相关领域的知识。他们已经解决了他们的课题,甚至更多。他们是充满热情的人,渴望无穷无尽的知识。

第二种情况是读博士学位的人,因为这是他们学业的延续或其他人的影响。他们发现自己在一个主题中,他们在等待一个程序,被告知该做什么。我记得数据科学家职位的两个候选人,其中一个曾告诉我“为什么要做文学和技术调查?我有博士学位,我什么都知道”另一个人向我介绍了他的课题,这个人使用了算法,然后我问他为什么只选择神经网络和决策树,他的回答是“我被要求测试它们,并且它有效,所以我们没有看任何其他东西”。

所以不,有博士学位不一定就能成为研究员。我遇到过本科生或硕士生,他们研究对他们来说很重要的课题,一些他们在科学文献、书籍或博客中没有找到满意答案的基本问题。他们已经确立了他们的研究课题。最糟糕的是,大多数人从来不想读博士,因为他们认为这会影响他们的创造力。

我和工程师们一起工作,他们更多的是研究人员而不是工程师,他们想通过自觉地应用科学方法来推进他们的领域。
做研究员不是文凭,也不是发表名单;这是一种存在的方式,一种想要解决问题的方式。一种知道如何将一个问题分成子部分来建立假设、数据、模型、测试的方法。

一个博士教我们什么?

很多事情。上班时间和工作时间?不,因为当你累的时候,你会犯更多的错误,而且要花很多时间来纠正它们。在我读博士期间,我记得我花了三天时间在我的代码中寻找一个 bug,直到我找到它才能睡觉。筋疲力尽的我上床睡觉,第二天,睡了个好觉后,重读一遍代码,错误就完美地出现在我面前。疲劳什么也教不了。

所以,博士教给我们很多东西:

  • 多角度思考一个问题
  • 不要被卡住
  • 阅读、理解并对他人的工作做出直觉判断
  • 专注和集中
  • 当你没有问题时,回到根本上来
  • 制定一个有问题的
  • 提问
  • 创建假设
  • 创造和测试事物
  • 自由
  • 可选:专业知识

我想我不能阐述一个博士能带给你的所有东西,但这是值得的。但是,这取决于你,取决于你的主管,取决于你的实验室,取决于你手头的资源,取决于你周围的人。

对我来说,攻读博士学位是最好也是最糟糕的事情。最好是因为它教会了我日常使用的东西,而且我从来没有被卡住过,我总是在寻找解决方案。更糟糕的是,因为它需要大量的工作,你会失败,无论你的水平或你的天才,你将不得不失败。没有失败就没有成功。你会精疲力尽的。

很多时候,当你开始读博士学位的时候,你不知道它是什么,你不能教论文是什么或者你要做什么。我们从未为此做好准备。这么多学生第一年就止步不前或者转科,大概就是这个原因吧。我向那些想深入了解这一点的人推荐这篇文章。

应用 vs 研究 vs 数据,科学家

随着时间的推移,随着数据科学家职业的减少,这三种工作名称越来越多。那么它们之间的区别是什么呢?差别可能在于这些职位所需的知识深度。

  • 数据科学家:总体来说,寻找、清理和结构化、分析、建模、可视化、呈现数据(这个职位可以远离研究,更多的是了解业务)
  • 研究科学家:顾名思义,他们是做研究的。他们不关注业务、渠道或产品。他们专注于寻找不存在的答案。阐明假设,证明它们是否正确。研究人员研究的问题通常更深入,投入的时间比需要立即回报的商业项目更重要(研究需要几年,数据科学需要几周或几个月)。
  • 那么,什么是应用科学家?这种情况越来越普遍。这是研究科学家角色的延伸,但是,它需要更多的软件知识来大规模应用解决方案(分布式或并行计算等,需要具有研究背景的 SDE 知识)。研究科学家更专注于科学发现,而应用科学家似乎对现实生活中的问题更感兴趣。

如何开始一个研究项目?

这是一个很好的问题,老实说,我没有完美的答案,因为我总是试图找出它。学术界或企业你最需要的东西“对某事的兴趣”,**你最感兴趣的是什么?**你热爱什么?这里有感兴趣的领域或应用。

从哪里开始?

不同的方式:

1-阅读文学

这是最常用的开始研究的方式,因为每个博士生都会以“文献综述开始他的论文,一般由“调查论文结束。这是一个缓慢的过程,非常缓慢,阅读科学论文并不容易,但随着时间的推移会变得容易。有利有弊,尽管 99.9%的研究人员对此深信不疑。

这种方法的优点是:

  • 你在你的领域获得了专业知识
  • 你知道有什么突破吗
  • 你可以找到直觉,并发现在哪里搜索,在哪里你可以产生影响,有哪些问题没有答案(潜在的研究项目)
  • 你有写论文的相关材料,因为你知道年表
  • 你知道所有论文中使用的所有方法

缺点是:

  • 到头来,你被过程带偏了。你只看到别人做什么,只看到他们想让你看到的
  • 你知道人们如何做研究,你会复制同样的模式,同样的思考方式
  • 文献有错误,可能难以复制
  • 重新创建算法或数据的困难
  • 不会帮助你发展自己的思维方式
  • 文章的数量每年都在爆炸

2 —开始你的想法

与第一点相反。你有了一个想法,你就为之努力,直到你解决了它,而不需要做文献综述。从好的方面来看,你不会被文献中呈现的思维方式所偏见,你会阐明假设,找到验证或反驳它们的方法。你是这个过程的主人。不利的一面是,这个问题可能已经解决了不止一次,而且比你的解决方案更优雅。当文献已经给了你线索或解决方案时,缺乏专业知识会让你绕几个月的圈子。

3——学习导师给的科目

很可能是混合方法。你的导师是经验丰富的研究人员,他们对该领域有着完善的知识。他们知道什么可行,什么不可行。他们发现即将出现的潜在主题或问题。他们知道什么是有希望的,什么将产生很少。担心的通常不是你的想法。你信任那些对你感兴趣并让你解决他们问题的人。廉价劳动力。

4 -费曼方法

  • 找到你感兴趣的主题
  • 了解一下
  • 教它,收集评论
  • 努力克服你推理中的弱点
  • 如果你还没有找到答案,回到第二步
  • 对于新项目,回到步骤 1

我想,找了很久又找了一遍,没有完美的答案。这完全取决于地区,你能投入到项目中的时间。你可以建立的关系(联系可以帮助你的研究人员)。兴趣或领域的出现。

人工智能的领域非常广阔,似乎不可能掌握一切。但是,领域越广,寻找感兴趣的研究课题的空间就越大。无论如何要小心,大公司都在赌它,因此它是一个发展非常迅速的领域。

结论

不要害怕事情的消极面。得到警告并做好准备比发现自己被关在你不想去的地方要好?我坚信,作为一名研究人员是一种职业,一种思维方式和好奇心。发表不发表不重要,研究的本质在于你如何看待这个世界。
激情,疯狂,渴求答案,去冒险。

参考

什么是基于搜索的分析?

原文:https://towardsdatascience.com/what-is-search-based-analytics-a1097704ba91?source=collection_archive---------40-----------------------

那些不知道的人将被遗忘在尘埃中

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

Unsplash 上由 Balázs Kétyi 拍摄的照片

什么是基于搜索的分析?

什么是基于搜索的分析?

您可以将基于搜索的分析视为公司数据的搜索引擎。基于搜索的分析能够提出诸如“我们上个季度的净收入是多少”或“告诉我过去 30 天有多少人下载了我们的应用程序,按周排序”等问题,并获得可操作的数据和图表。

为什么需要基于搜索的分析?

在过去的十年中,商业智能工具赋予了业务用户创建自己的仪表板和可视化的能力。这有助于高管和部门主管做出数据驱动的决策,以支持公司目标。但是,利用这些控制面板和可视化的能力受到数据治理、数据孤岛和数据蔓延以及单个用户能力等问题的限制。

您可以将基于搜索的分析视为公司数据的搜索引擎

不仅如此,为了使用数据分析仪表板,必须首先创建仪表板。必须引入数据,必须选择和应用可视化,必须以能够回答特定业务问题的方式设计仪表板。这个过程可能需要几个小时甚至几天。

另一方面,基于搜索的分析允许企业用户用简单的英语提问,并立即得到可操作的数据和可视化结果。

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

使用基于搜索的分析来分析新冠肺炎数据(视频由作者使用知识制作)

但是建立一个有效的基于搜索的分析平台是有挑战的。例如,为了使其有效工作,基于搜索的分析平台需要理解诸如“比较”、“多少”、“平均”和“总数”等术语。他们还需要理解特定于业务的术语,如“增长”、“保持”、“流失”和“成本”。同样至关重要的是,他们能够解释许多表示日期或时间跨度的不同方式,例如“从九月到十二月”、“上个季度”、“按月显示”和“去年”。这是通过自然语言处理完成的。

自然语言处理

自然语言处理(NLP)最早出现在 20 世纪 50 年代,但直到最近才达到该技术广泛应用的程度。你可以想象,让一台计算机理解人类语言是一个主要障碍——想想英语的复杂性和细微差别。

NLP 工作是将人类语言的问题转换成分析引擎可以理解的查询

在过去十年中,这种情况发生了显著变化。谷歌搜索、Wolfram Alpha、亚马逊 Alexa 和苹果的 Siri 都在使用 NLP 为人们提供真正的服务方面取得了长足的进步。

在基于搜索的分析中,这可能会更加复杂。有许多方法可以要求特定类型的数据或可视化。NLP 的工作是将人类语言的问题转换成分析引擎可以理解的查询。

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

对物联网地理空间数据使用基于搜索的分析(作者使用知识制作的视频)

为特定用例定制基于搜索的分析

除了将 NLP 应用于数据以创建基于搜索的分析所带来的一般挑战之外,还有特定于用例的挑战。

如果你调查 100 家公司如何使用商业智能工具,你可能会得到 100 个不同的答案。这是因为所有行业都使用不同的数据。甚至同一个行业中的单个公司也可能跟踪不同的度量和 KPI(关键性能指标)。许多行业也有不同的术语和特定领域的知识,当包含在自然语言查询中时,必须理解这些术语和知识,至少粗略地理解一下。

这就是为什么在这种情况下,提供商针对客户的特定使用情形定制基于搜索的分析部署至关重要。这个过程通常包括向 NLP 库中添加自定义术语和同义词、映射关系、调整变量名以及自定义可视化选择逻辑。

示例:这在实践中是什么样子的?

想象一下,一家冷藏卡车运输公司使用 GPS 和 IoT(物联网)温度传感器将监控数据输入其商业智能平台。他们会想知道他们的卡车在哪里,速度有多快,冷藏室的温度是多少。

这意味着基于搜索的分析平台需要理解诸如“告诉我亚利桑那州所有卡车的位置和温度”、“5 号钻井平台有多冷”和“有没有高于冰点的单位?”。第一个查询可能现成可用,但第二个和第三个示例可能需要一些定制才能正确解释。

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

在 Slack 中使用基于搜索的分析(作者使用知识制作的视频)

真的像谷歌搜索一样简单吗?

简短的回答:没有。但是更好的回答可能是“还没有”如果你还记得网络爬虫、Alta Vista 和 Excite 的时代,你就会知道早期的搜索引擎并不擅长准确地找到人们想要的东西。

为数据建立搜索引擎是一个更加困难的挑战,特别是因为——如上所述——不同的公司有很大的不同。

然而,还是有希望的。当基于搜索的分析解决方案为特定的业务或用例定制时,可以实现类似 Google 的简单性能和准确性。这需要一点前期工作,但结果可能会改变游戏规则。

什么是情感分析,如何使用?

原文:https://towardsdatascience.com/what-is-sentiment-analysis-and-how-is-it-used-217074887277?source=collection_archive---------35-----------------------

我们将了解什么是情感分析,它来自哪里,以及它能为我们做什么。让我们开始吧!

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

图片来自 Pixabay科琳·奥戴尔

你最后一次坐飞机是什么时候?你还记得吗?

也许你坐在一个哭闹的婴儿旁边…或者你得到了免费的升级,享受了更多的腿部空间。

可能是空乘把咖啡洒到你身上了……也可能是他们很讨人喜欢,让你觉得很自在。

或者你甚至不记得你的最后一次飞行,因为没有什么值得纪念的事情发生——这可能是一件好事!

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

照片由 Unsplash 上的 NeONBRAND 拍摄

作为“客户之声”的调查

不管你的经历如何,你都可能会收到航空公司发出的调查问卷。他们想知道从你的角度来看这次飞行怎么样。

一些调查问题可能会要求您从 1 到 10 对服务进行评分,如空乘人员的帮助程度,或浴室的清洁程度。

他们可能还会问一些开放式的问题— “告诉我们你的经历以及我们可以改进的地方。”

再来看美联航的例子。根据他们最近的情况介绍,联合航空公司去年有 1 . 62 亿乘客。

如果我们可以假设他们的营销部门随机向每 30 个人发出一份调查,得到的回复率为 5%,那么:

1.62 亿乘客/30 = 540 万被调查乘客 x 5% = 每年 27 万份调查反馈

数据真多啊!这是一个电子表格中的 270,000 个单元格,用自由文本回答了联合航空公司可以做些什么来改善他们的服务。

这些数据中包含的观点对管理层来说非常有价值,有助于他们找出让乘客更快乐的方法。

不幸的是,对许多公司来说,下一步就是让一屋子实习生分头搜索电子表格。或者更糟的是,电子表格被推到一个黑暗的角落里,再也看不到了。

然而,为了拯救实习生的理智和等待被揭示的洞察力,我们可以利用情绪分析的迷人方法。

简短的定义

情绪简单地描述了对某事的观点——无论是你在新闻中读到的事件,你从亚马逊上买的书,还是当你的狗在地毯上弄得一塌糊涂后你对它的感觉。

我们或许可以把这种做法叫做意见分析,但这听起来并不容易记住,不是吗?

观点的反复无常

观点可能转瞬即逝,千变万化。你的宠物前一分钟还是一只毁坏地毯的野兽,下一分钟就变成了一个可爱的能量球。

在我们的航空公司的例子中,在任何给定的航班上,可能有数百种意见分散在乘客中。

为了解决大众分散的观点,自然语言从业者已经改进了情感分析来从无组织的和难以置信的多样化的观点数据中获取意义。

情感分析对我们有什么用?

情感分析可以用各种方式标记我们的数据,使我们更容易从杂乱的非结构化数据中获得洞察力。

极性

第一个也是最常用的度量是极性

极性简单来说就是指语言是阳性、阴性还是中性。很多情感分析都是将文本浓缩成一个数字——比方说,在-10 到+10 之间,表示一个陈述的极性。

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

图片来自 Pixabay约翰·海恩

当*“这些花生是咸的”可能记录为 0(中性),我们可能期望“这些奇妙的花生拯救了我的婚姻”*可能记录为+10(正极)。

同时,“*这些馊花生真恶心”*引出 a -8(负极性)。

主观性/客观性

情感分析也可以将文本标注为主观客观。

主观文本意味着有观点的文本——不一定是可证明的或基于事实的。关于胡萝卜蛋糕好坏的观点就属于这一类。

另一方面,客观性涵盖了不受个人观点影响的基于事实的语言,比如“胡萝卜蛋糕里有胡萝卜”。

在分析客户反馈或评论时,过滤主观性尤其有用。我们不关心飞机起飞,我们想知道起飞是怎么起飞的

基于特征的分析

最后是基于特征的情感分析。考虑以下产品评论:

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

注意这篇文章中有一些矛盾的观点。如果我们试图把极性作为一个整体来总结,我们可能会得出一个相当中性的结论。

然而,当我们将文本分解成它的特征,我们可以更清楚、更有用地了解这个客户喜欢什么、不喜欢什么。

基于特征的(或基于方面的)情感分析关注于发现谁是意见持有人,被评估的对象是什么,以及实际的意见是什么。

在上面的例子中,这个方法或许可以挑出这个顾客喜爱耐克 品牌,并且认为这些鞋子可爱舒适。然而,系统也看到可怕的水泡浪费金钱是与鞋子相关的负面因素。

通过打破这些特征,我们可能更有可能预测一星评论。我们甚至可以推荐其他可爱舒适的耐克鞋,其中“水泡”是我们从评论中提取的特征。

情感分析从何而来?

鉴于意见的分散性,以及书面语言的普遍混乱,我们应该向那些最先开始试图理解混乱的勇敢者致敬。

一项关于情感分析历史应用的研究表明,99%的情感分析论文都是在 2004 年之后发表的。这在很大程度上是由于计算能力的提高。

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

上图来自谷歌趋势,显示了自 2004 年以来的搜索量。红色是客户反馈,蓝色是情绪分析

客户反馈作为一个重要话题一直享有突出地位的时候,情绪分析已经迅速赶上甚至超过了它。

这项研究的一些有趣的历史发现揭示了使用情感分析的一些最初尝试:

  • 第一篇论文是 1940 年的,作者试图用手工*“划掉技术”*——计算极性关键词的数量来衡量不同主题的公众意见。
  • 1945 年和 1947 年,两位作者试图衡量二战期间遭受苦难的国家的公众舆论。

情感分析的现代方法

概括地说,现代情感分析在 21 世纪初占据了主导地位。第一个跨领域应用于许多问题的通用工具之一被称为“ General Inquirer ”。该工具最初是在 20 世纪 90 年代由美国资助开发的,并在 2002 年左右广泛应用于学术研究。

《普通问询者》是一套手工编码技术,包括将单词映射到各种类别。最大的一类是负面(有类似可怕可怕骇人等词汇。).

进一步进入 2010 年,上面引用的研究显示了从情感分析论文形成的词云。下半部分代表 2013 年之前的关键词,上半部分代表 2013 年以来的关键词:

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

情感分析的一个重大变化

从“网络”到“社交”有一个明显的转变,并转向像神经网络这样的深度学习技术。这些最先进的模型把我们带到了今天。

基于知识与统计的情感分析

一些早期的尝试,包括普通问询者,使用了“基于知识”的技术,如创建一个自定义的硬编码单词字典,具有“明确的影响”。

换句话说,这些技术关注的是很少具有双重含义的单词。这些词几乎总是表示好的坏的,像“开心”、“伤心”、“害怕”、“无聊”。你也可以看到这些被称为基于词汇的方法

基于知识的技术的一个缺点是,根据数据集的上下文,一般的基于知识的字典可能会遗漏重要的单词。

例如,一篇关于癌症的文章可能会谈到“不可阻挡的增长”。在这种背景下,这是不好。

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

图片来自 Pixabayerikawittleb

但是在一篇关于创业的文章中,“不可阻挡的增长”被认为是好的。

为了使用基于知识的方法获得每种类型数据的高度准确的结果,您可能需要定制硬编码的字典。这可能是时间密集型的。

有一些基于知识的技术方法尝试自动查找特定于上下文的关键字。一个例子依赖于像“或者“*但是”*这样的连词。

假设我们看到一句关于*“病人恶化* 不可阻挡的增长”的话。因为恶化在负面字典中找到,我们可以推断不可阻挡的增长也是负面的。

单词的这种接近性(这也暗示了它们是如何相关的)也被称为共现

统计法

基于知识的技术与后来更复杂的“统计”技术和机器学习方法形成对比。这些方法更依赖于通过大量文本获得的推理。

如果可以手动从文本中找出共现,或者可以使用基于规则的自动方法进行推断,那么可以以更加自动化的方式利用统计方法,该方法可以扩展到数十亿个数据点。

通过这种统计方法,我们使用大量数据相对快速地对共现做出推断。

如果一个单词经常出现在极性为正的单词中,我们也给这个单词分配一个正极性。否定词也一样。

我们不断迭代和训练大量的文本——比如维基百科中的所有文章。最终,结果是英语中大多数单词的权重,然后我们可以用它来预测新文本的情感。

请注意,这也适用于特定于上下文的自然语言。在我们早期的医学文本示例中,我们将仅在医学文献的语料库上训练我们的模型,以捕捉特定于主题的关键词的极性。

用于情感分析的深度学习

大部分统计方法仍然依赖于单个单词的意思——为给定文本的情感保留一种记分牌。

但是我们也必须考虑单词之间的相互作用。当考虑较长短语或句子中许多单词的含义时,语义分析模型更加准确。当然,这意味着我们必须训练更复杂的模型,这些模型使用更多的计算资源,运行时间更长。

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

图片来自 Pixabay

“一个 的朋友 告诉我我会喜欢这种三明治。

即使 我平时爱吃好的花生酱,这里用的那种不够奶油。

果冻是好的 但是 就是不够。”

这篇 PB&J 评论传递了许多含混不清的信号。如果我们只关注单词本身,而不关注使用它们的短语,我们会给它分配一个相对积极的极性。例如,有很多“爱”和“好”。

虽然对神经网络的深入探讨超出了本讨论的范围,但重要的是要知道,这些模型可以保存和权衡关于文本的数百万个特征,以便最终提供对极性的预测。

例如,经过训练的神经网络可以逐句逐句地分析文本。

如果在句子的前面使用了“即使”,该模型可能会对句子的其余部分不考虑积极情绪。同样,“不错,但是”可能会打折扣,“喜欢这个三明治”可能会正确地归因于顾客的朋友,而不是顾客自己。

继续练习

做得好!如果你已经做到了这一步,你已经很好地理解了什么是情绪分析以及它如何在幕后工作以提取极其有价值的见解。

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

图片来自 WikimediaImages 来自 Pixabay

不用说,NLP 正在迅速发展和变化——情感分析也是如此。在我发表这篇文章的时候,可能会有另一个方法论上的突破,允许更高的准确性。

同时,如果你有兴趣学习更多关于情感分析的知识,你可以做的最好的事情之一就是开始探索和实践。想出一个你认为可以用我们上面描述的方法解决的问题,然后开始编码!

感谢您阅读

你知道什么是香农熵吗?

原文:https://towardsdatascience.com/what-is-shannons-entropy-5ad1b5a83ce1?source=collection_archive---------12-----------------------

完整全面的指南

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

来自 Pexels摄影记者拍摄的

熵构成了宇宙和宇宙中一切事物的基础*。为什么深度学习应该有所不同?它在信息论中被高度使用(这里使用的熵的变体是香农熵),并且也已经进入深度学习(交叉熵损失KL 散度)。让我们来理解一下香农熵的概念。*

熵是什么?

通俗地说,你把熵描述为:

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

你得到的最基本的例子是一枚公平的硬币:当你扔它的时候,你会得到什么?正面 (1)或反面 (0)。

因为两个事件的概率是一样的(1/2)。没办法讲。所以,如果你在电话上玩抛硬币游戏。然后,你必须告诉对方一个结果,或者你需要一个比特(0 或 1)来传达这个信息。

让我们考虑一个完全偏向硬币的情况(总是正面朝上):

你需要告诉其他人结果吗?简单的答案是。因为你们两个都知道答案(如果你没有作弊的话😄).因此,你什么也不用说。你一点也没用。

直观地消化熵

为了直观地理解熵,让我们再次重温它的定义:

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

它的数学定义是:

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

来源:作者

有一件中肯的事要注意,这个词**‘系统’**在外行人的定义和概率术语中出现两次虽然不同。

让我们重温一下概率的定义。概率是什么?事件发生的可能性。概率的定义讲的是单个事件,不是整个系统。因此,概率能给我们的是局部的图景,是整个系统的有限图景。

概率给出了整个系统的局部图像

为了让我们对整个系统有所了解,我们需要想出一种方法来告诉我们整个系统的全局情况。我们需要评估系统的各个部分,看看它们的总体效果。

你如何评价系统的一部分对系统的随机性的贡献?

熵公式中的 pᵢ部分告诉我们关于事件在整个系统中的重要性。怎么会?概率值的分子告诉事件发生的次数,就是这样。

对于下一部分,让我们从一个新的角度来看熵的公式:

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

来源:作者

**我们可以将熵公式的第二部分转化为概率的倒数。**这会给我们带来什么?如果概率告诉你确定性,它的反义词意味着什么?不确定性。

因此,熵的公式可以解释为:

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

这就是,熵可以被解释为一个事件的重要性和这个事件的不确定性的乘积。系统中的事件越重要,它可以引入系统的不确定性(即随机性)就越多。因此,如果我们推导出每个事件的随机性并将其相加,我们就可以理解整个系统的随机性。

数学上消化熵

香农熵的数学公式是:

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

来源:作者

这里,c 是你拥有的不同类的数量。以硬币为例,我们有正面(1)或反面(0)。因此,c = 2。

所以,一枚公平硬币的熵是:

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

来源:作者

因此,公平硬币情况下的熵为 1 。完全不确定性(记住,熵的外行定义)。我们对结果完全没有把握。

现在,让我们考虑一下完全偏向硬币的情况。对它来说,熵就是:

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

来源:作者

首先,所有关于熵的计算中的 0log(0)都假设为 0 。现在,我们已经平息了,在这种情况下可以观察到,熵是 0。无论如何,我们对结果完全有把握。

硬币没有完全偏向的时候呢?

让我们画出得到人头的概率在 0 和 1 之间时的合成熵。

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

来源:作者

我们看到熵在概率 1/2 时变得最大。

一般情况下,任何系统的熵的最大值都是 log₂c 。这发生在概率为 1/2 的时候。为什么?

对此有两种解释。让我们看看。

直观解释:

因此,在硬币的情况下,最大熵将是 log₂2 = 1 比特。

当一切都是同等可能性(概率为 1/2)时,熵最高,因为你不知道会发生什么。

为了表达硬币可以采取的所有状态,即 0 或 1,你需要 1 位。

数学解释:

如果不感兴趣,可以跳过这个。

记住如何找到给定函数值最大的值。

如果没有,我们修改一下:

第一步:对函数进行求导,并使其等于零,得到的值将是该函数的最小值或最大值。如何知道找到的值是最小值还是最大值?

第二步:你对函数取的双导数,然后代入上一步得到的值。如果二阶导数的值小于 0,那么,该值将是函数的最大值,如果它大于 0,那么,该值将是函数的最小值。

现在,让我们把这个过程应用于香农熵的公式。

香农熵的导数是:

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

来源:作者

将导数等于 0,

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

来源:作者

最后一步,我们把两边都提高到 2 的幂,2 的幂 log₂x 就是 x

现在,让我们验证该值是最大值还是最小值。首先,我们找到熵的二阶导数:

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

来源:作者

现在,我们把导数等于 0 的值代入这个二重导数,

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

来源:作者

最后,我们得到的双导数的值是负的,因此,证实了熵的最大值是在概率 1/2 处。

因此,我们证明熵的最大值出现在概率 1/2 处。

摘要

在这篇文章中,我们从数学和直觉上理解了香农熵。我们知道香农熵的数学界限是什么。我们还导出了香农熵最大的概率。然后我们直观地理解了熵的概念。

什么是辛普森悖论?

原文:https://towardsdatascience.com/what-is-simpsons-paradox-4a53cd4e9ee2?source=collection_archive---------18-----------------------

和第二波冠状病毒病例有什么关系?

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

从未经汇总的数据中得出结论的危险

最近几周,人们越来越怀疑病例数上升和新冠肺炎死亡人数稳定或下降之间的差异。有几个解释流传着。首先,由于显而易见的原因,死亡是一个滞后指标。死亡高峰通常在病例高峰后约一个月出现。

然而,我们可能要考虑到我们一开始就看错了这些数字。美国是一个大国,怀俄明州发生的事情与德克萨斯州奥斯汀发生的事情没有什么联系。我们看的是整个国家的数字,为了获得准确的画面,我们需要深入到各个州、地区或城市,以更好地了解不同社区的情况。不幸的是,这些数据讲述了一个不同的故事。

输入:辛普森悖论

辛普森悖论(Simpson’s Paradox)是指一种趋势出现在几组不同的数据中,但当这些组组合在一起时就消失或逆转的现象。

为了说明这一点,我创建了一些模拟数据,其中有两组数据,它们都显示出 X 和 Y 之间的正相关性(引入了随机性,但在这两种情况下,X 每增加一个单位,Y 就增加 4 个单位)。

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

用模拟数据说明辛普森悖论【来源:原创】

单独考虑每一组时,两组的最佳拟合线都明显向上倾斜。但是,当您将这些组放在一起时,参数估计值会变为负值。

一个著名的现实世界的例子是伯克利性别偏见研究。在 1975 年《T4 科学》杂志的一篇文章中,研究人员观察到了柏克莱大学研究生院男女录取率的巨大差异。

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

男性和女性的总体入学率[来源:维基百科

从表面上看,这可能意味着学校可能存在性别歧视。然而,当研究人员深入挖掘 85 个不同部门的数据时,他们发现了一个不同的故事。

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

6 个最大部门的部门准入率[来源:维基百科

在特定的院系中,研究人员只发现了少数几个男生比女生更有可能被录取的院系(反之亦然)。然而,更重要的趋势是,妇女更有可能申请最具选择性的部门。由于选择部门的申请人中女性所占的比例比男性大,所以他们在接受率上似乎有很大的差异,即使个别部门没有发现男性比女性更受青睐。

国家新冠肺炎数据

如果你看看美国的全国趋势,死亡人数的下降趋势是显而易见的,即使在过去一个月里病例有所增加。

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

美国新冠肺炎确诊病例和死亡病例

然而,肯定有一些州的数据不符合这一趋势。例如,在亚利桑那州,从 6 月初开始病例激增,6 月底和 7 月死亡人数明显增加。

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

亚利桑那州新冠肺炎确诊病例和死亡病例

在佛罗里达州,死亡人数从 4 月到 6 月保持稳定(而全国范围内,死亡人数正在下降),最近 7 月 9 日和 10 日是疫情最糟糕的两天。

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

佛罗里达州新冠肺炎确诊病例和死亡病例

同样,德克萨斯州在 6 月份开始经历病例增加,现在可能也开始看到死亡人数增加。

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

得克萨斯州新冠肺炎确诊病例和死亡病例

为什么这没有在国家数据中显示出来?

如果在多个州有稳定或上升的趋势,为什么我们仍然看到全国范围内的死亡率稳步下降?

还记得伯克利性别偏见的例子吗?大多数项目都同样或更频繁地接纳妇女。然而,更多的女性申请人申请了最具选择性的项目,导致她们的人数在汇总时看起来更糟。

以纽约为例。虽然它是第一波死亡人数中受灾最严重的城市之一,但它也恰好是该国人口最多的城市之一。

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

纽约州新冠肺炎确诊病例和死亡病例

在 4 月份的几个星期里,纽约州(主要在纽约市)每天的死亡人数稳定在 800 人左右,但现在平均每天超过 10 人。

纽约在控制疫情方面所做的努力当然应该受到称赞。然而,当查看我们的国家数据时,我们应该记住,这个国家人口最多的城市每天减少约 800 例死亡。不幸的是,虽然最近几周 COVID 死亡人数肯定会激增,但提到的 3 个州中没有一个在一天内死亡人数超过 150 人。纽约和其他在 4 月份遭受重创的州下降了 800 点,足以让我们在较小的州开始看到的任何飙升相形见绌。

当分析 COVID 数据或任何组间存在较大差异的数据时,要小心不适当的合并。虽然我很愿意相信全国范围内死亡人数下降所隐含的故事,但再看一下各个州就会发现,这可能过于乐观了。

参考

[1]辛普森悖论。https://en.wikipedia.org/wiki/Simpson%27s_paradox

[2]研究生入学中的性别偏见:来自伯克利的数据。https://home page . stat . ui OWA . edu/~ MBO gnar/1030/比克尔-柏克莱. pdf

[3]新冠肺炎·疫情数据/美国各州医疗案例。https://en . Wikipedia . org/wiki/Template:新冠肺炎 _ 疫情 _ 数据/美国 _ 医疗 _ 病例 _ 按州

扫雪机简介

原文:https://towardsdatascience.com/what-is-snowplow-and-do-i-need-it-cbe30fcb302b?source=collection_archive---------6-----------------------

Snowplow 自称是“同类最佳数据收集平台”。我们探索这意味着什么,讨论扫雪机做什么和不做什么。了解 Snowplow 的架构,以及它是否是您需要的工具。

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

图片来自 Pixabayskeeze

这里有一个常见的场景:你运行一个网站,想知道你的用户如何使用它。你调查谷歌分析 360。您想为您的企业提供更好地了解客户所需的工具吗?你当然知道!对原始事件数据的访问,基于所有信息而非一小部分信息的见解?听起来不错!当您准备注册时,您注意到了 Analytic 的价格标签—起价为 15 万美元/年。大口喝。现在怎么办?当然,并不是所有的企业都能证明如此惊人的高价是合理的。

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

经常出现的谷歌分析的替代品是 Snowplow。Snowplow 是由 Snowplow Analytics 积极开发的一个数据收集平台。Snowplow 可以“收集”多种遥测数据,但它在点击流数据方面有着特殊的地位,提供了许多与开箱即用的网络跟踪相关的功能。

Snowplow Analytics 以各种形式提供其平台,包括一项名为 Snowplow Insights 的托管服务。它的所有核心组件都是开源的,可以以一种自己构建、自我管理的方式免费使用。您可以在公共云中运行自己的生产就绪、可扩展的实时数据接收管道,每月花费大约 200 美元。较小的部署或开发部署也是可能的(使用 Snowplow Mini ),每月大约 40 美元。

Snowplow 可以“收集”各种各样的遥测数据,但它在点击流事件中有一个特殊的位置

当然,Snowplow 和 Google Analytics 这么简单的基于价格的比较是没有用的。这些产品之间的重叠部分实际上非常小。作为一个刚刚将 Snowplow 部署到 Google Cloud 的人,我知道我花了一段时间才弄清楚 Snowplow 是否满足了我们的需求。这个故事向你介绍了什么是扫雪机,以及它是否对你有用。

与其他帖子相比,如媒体系列的 Snowplow,这个故事通过深入研究其架构和部署,而不是专注于其追踪器生成的数据的价值,来强调 Snowplow 实际上做了什么。对这个架构有了很好的理解,你就可以自己拿主意,决定扫雪机是否也应该成为你的数据分析工作的一部分!

数据收集平台

一个数据采集平台到底是什么?在其核心,Snowplow 由一个处理管道组成,该管道通过对 HTTP 端点的调用来捕获、清理、丰富和保存所有呈现给它的信息。GET 和 POST 请求进入管道,然后输出 blob 存储或可查询数据库中的结构化数据。Snowplow 还附带了许多实用程序,如 JavaScript web tracker和 tracking SDK将生成这些 HTTP 调用,以响应用户在您的网站或应用程序中采取的操作,例如响应页面浏览或页面点击。

HTTP 请求进入管道,输出可查询的结构化数据

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

记住:平台≠平台,管道≠管道

扫雪机做什么

Snowplow 最初是一个网络分析平台,仅支持使用他们的网络追踪器和自己的追踪器协议进行追踪。现在,它的目标是成为您所有活动数据收集工作的一站式商店。想要将订阅事件捕获到 MailChimp 支持的邮件列表中吗?扫雪机覆盖了吗!捕获您自己的应用程序生成的自定义事件?那也没问题!当你想到所有你可能得到的物联网(IoT)数据时,网站跟踪似乎很无聊。Snowplow 允许你定义和使用自定义事件模式。它接受来自任何地方的数据,同时提供对它收集的每一位原始数据的直接访问。Snowplow 每秒钟可以轻松收集数千个事件。

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

收集邮票是,收集数据是来源

扫雪机不做的事

然而,从这些原始的结构化数据中获得“洞察力”需要你付出一些努力。Snowplow 很少处理它为您接收的数据,如果您希望它为您提供易于理解的图表或有启发性的统计数据,您可能会失望。开源 Snowplow 的一个基本安装收集数据非常好,但是除了以结构化格式收集、清理和保存数据之外,几乎没有做什么。

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

外出时,不要忘记储备大灯液体。来源

扫雪机没有 GUI 。在收集点击流数据时,它只是为你提供原子事件,如页面点击、页面查看或页面 ping 事件;没有“用户流量”或类似滚动深度的衍生统计数据。知道 Snowplow 不仅限于获取点击流数据是有意义的。因此,Snowplow 也不是 Google Analytics 的真正替代品。事实上,并行运行 Snowplow 和 Google Analytics 完全有意义!

Snowplow 不是 Google Analytics 的真正替代品

你也不会完全放任自流。Snowplow 确实有一些分析软件开发工具包,可以帮助你分析它生成的数据。还有一个 Snowplow web 数据模型项目,通过将原子跟踪事件分组到浏览会话中,专门帮助分析点击流数据。

扫雪机的加工流水线

因此,Snowplow 收集所有类型的事件数据,对它们进行处理,然后通过让数据流经“管道”来保存它们。让我们把这个过程变得更具体一些。Snowplow 处理管道如下所示:

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

扫雪机加工流水线。

本节讨论数据如何在管道中流动,以及什么接口连接管道的不同组件。

收集器组件

由 Snowplow tracker(例如snow plow JavaScript tracker)、web hook 或来自 Snowplow tracker SDKs 之一的调用产生的数据命中收集器组件。收集器是一个对 HTTP 请求开放的基本 web 服务器,它编码并在消息总线上发布所有传入的数据。如果请求不包含标识用户的 cookie,它还会将随机生成的 cookie 嵌入到Set-Cookie HTTP 响应头中。

浓缩成分

富集组件是实现 Snowplow 富集过程的该消息总线的订户。在这个过程中,Snowplow 验证输入的数据,验证它是在它理解的协议中指定的。然后,它提取事件属性并丰富事件。在丰富过程结束时,事件遵循 Snowplow 规范事件模型。丰富的事件发布在另一条消息总线上。

浓缩组件无疑是 Snowplow 最复杂和有趣的部分。如果你想了解更多,可以看看我的后续报道:

[## 扫雪机中的富集和批处理

细看 Snowplow 的浓缩组件及其批处理管道的弃用

medium.com](https://medium.com/datamindedbe/enrichment-and-batch-processing-in-snowplow-6b5258096c9b)

存储组件

存储组件订阅浓缩组件发布的消息总线。它将消息保存在 blob 存储或可查询的数据存储中,如 BigQuery 或 Redshift。如果目标存储是一个(结构化)数据库,事件属性将映射到列上。

组件实现

组件有多个兼容的实现,允许你使用那些最适合你需求的。一些实现使用特定于特定公共云的云原生技术,例如存储组件 Snowplow BigQuery Loader 与 GCP 上的 BigQuery 接口,并在云数据流上运行。其他的构建在开源技术上,可以很容易地部署在你自己的硬件上,比如运行在 JVM 上的 Scala 流收集器,它不仅可以向 AWS KinesisCloud Pub/Sub 推送消息,还可以向 Apache Kafka 推送消息。

组件接口

用于组件间通信的消息看起来像什么?

  • 收集器接口可以说是最重要的一个,因为它是面向外的。收集器接受所有的 HTTP 请求,但是只有实现了已知协议的请求才能通过浓缩完成。这些是由 Snowplow tracker 协议描述的格式,Snowplow 提供的收集器适配器或 任何格式本机支持的格式之一,您为其实现了自己的远程 HTTP 适配器。其中,Snowplow 为 Google Analytics 使用的自描述 JSON 和 Google 的测量协议提供了适配器。
  • 收集器和浓缩组件之间的接口由 Apache Thrift 使用嵌入在这个自描述 JSON 模式中的有效载荷方案编码的 HTTP 头和有效载荷组成。
  • 丰富组件和存储组件之间的接口由以 TSV (制表符分隔值)格式编码的规范事件组成(没有节俭!);有些值包含 JSON。这个接口大多没有文档记录。要了解 Beam Enrich 如何对消息进行编码,请查看[EnrichedEvent](https://github.com/snowplow/snowplow/blob/3b8d9cc839e4af0b97c68477fb1c9f484de233e2/3-enrich/scala-common-enrich/src/main/scala/com.snowplowanalytics.snowplow.enrich/common/outputs/EnrichedEvent.scala)的代码,Beam Enrich 中的实用程序方法将这些事件转换为 TSV 。您还可以查看解析 TSV 记录的分析项目内部(例如 Python Analytics SDK 中的这个测试)。

流还是不流

一些 Snowplow 组件没有实现上述的(流)接口。这些组件成批处理数据。它的缺点是,你应该忽略批处理实现,只需费心了解上面介绍的流式处理管道,因为 Snowplow 的 批处理管道已被弃用 。如果您出于某种原因仍然想了解更多关于批处理的知识,请查看我的故事

Snowplow 批处理已被否决

扫雪机产量

Snowplow 丰富的规范事件可以存储到 blob 存储器或结构化数据库中。管道中数据的精确格式取决于您使用的存储组件。组件实现针对目标数据存储的属性进行了优化。

Snowplow 在 BigQuery 中的输出

将数据转储到 BigQuery 时,所有事件都被转储到一个大的events表中。在初始化之后,甚至在添加单个事件之前,这个events表已经有大约 128 个属性了!

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

事件表模式的一部分

如你所见,所有的房产都标有NULLABLE。(事实上,有些是我所有记录中的遗产和等价物NULL。在 Snowplow 开始使用可扩展的事件类型方案之前,他们只是在一个胖表中添加与 web 分析相关的列。这个胖表的列定义了现在的“原子事件”。)因为 BigQuery 是一个列式数据存储,所以总是NULL的列实际上不需要任何成本:添加列不会增加表的大小或降低查询速度。添加新类型的事件会向events表中添加更多的列。

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

在接收新类型的数据(链接点击和焦点表单事件)后,事件表中添加了其他列/字段类型

对于所有较旧的数据,新列将是NULL,对于所有插入的但属于另一种类型的新记录,新列将是NULL

Snowplow 在其他数据存储中的输出

并非所有数据存储都具有与 BigQuery 相同的属性。因此,并非所有数据存储都使用与 BigQuery 存储组件相同的“胖表”方法。

例如,在 AWS 上将数据存储在 Redshift 中时,每个事件都会在 a 表 [atomic.events](https://raw.githubusercontent.com/snowplow/snowplow/7738c6de42674ced61141481f1300c7b43eee09e/4-storage/redshift-storage/sql/atomic-def.sql)中产生一条记录。插入新类型的数据会导致创建新表;该表中的条目可以连接到atomic.events。Snowplow 将这种事件分裂过程称为粉碎

为什么要铲雪

Snowplow 接收 HTTP 请求,并近乎实时地将它们保存到数据存储中。这听起来并不特别令人兴奋;许多云数据存储也有 HTTP 前端,难道不能自动将发布/订阅事件转储到云存储吗?为什么要用扫雪机?

将 Snowplow 与其他产品进行比较

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

验证很重要。来源: Lukas像素

与一般的遥测数据收集产品 相比,如亚马逊 Kinesis(数据分析)Azure Application Insights,Snowplow 为您提供了验证和丰富输入数据的优势。只有干净的数据才能进入您的数据库!当跟踪网络应用程序时,Snowplow 还会在你自己的域上设置来自服务器端的 cookies,允许在浏览会话之间进行可靠的跟踪。然而,Snowplow 的安装和运行更复杂,如果您处理的事件很少,它的成本也相对较高。

通过验证输入的数据,Snowplow 确保只有干净的数据进入您的数据库

与提供高级数据处理类型 的应用相比,Snowplow 为你提供定制的扩展性,访问原始数据,摄取多种不同类型数据的能力,以及低价。专门服务的例子有用于网络分析的 Google Analtyics 或 Matomo ,以及用于应用监控的 New RelicDatadoghoneycomb.io 等应用。然而,与这些专门的程序不同,Snowplow 并不真正进一步处理或分析你的数据;它甚至没有为你提供一个图形用户界面。将这些程序与 Snowplow 进行比较并不总是有用的。

使用扫雪机的一些理由

  • 你想收集遥测数据,但也要让保持对你的处理流水线的控制。您喜欢 Snowplow 是开源的,并且不想将自己与特定于云的产品捆绑在一起。
  • 没有一个特定于数据类型的产品能完全满足您的需求。你要全定制。你想要原始数据。扫雪机为您提供了一个良好的基础。
  • 您希望使用 Snowplow 出色的 JavaScript 跟踪器执行 web 跟踪,并利用 Snowplow 的事件模型,该模型非常适合 web 跟踪事件。
  • Snowplow 在**(近)实时**中接收、丰富和存储数据。如果您将收集的数据用于欺诈检测或类似的应用,这将特别有用。
  • 您希望执行自定义丰富,但不需要成熟的流处理平台(如 Apache Flink 或 Apache Beam)的全部功能和复杂性。Snowplow 通过实现一个 JavaScript 函数或者通过实现一个 HTTP(微)服务使得构建你自己的 enrichment变得相对容易。
  • 你想继续使用 Google Analytics ,但又想访问所有原始数据而无需每年支付 15 万美元。你可以通过使用 Snowplow 的谷歌分析跟踪器插件将你发送给谷歌的所有数据抽取到你的 Snowplow 收集器来非常容易地做到这一点,因为谷歌的测量协议是由snow plow 适配器支持的协议之一。
  • 你喜欢使用许多编程语言中都有的 分析 SDK来分析你的数据。

不使用扫雪机的一些理由

  • 您不愿意部署自己的基础设施,要么是因为您没有专业知识,要么是因为您不想维护它。您仍然可以使用 Snowplow,但应该考虑使用托管 Snowplow 平台 Snowplow Insights
  • 你没有专业知识、时间或兴趣去分析你的数据。就其本身而言,Snowplow 生成的原始数据并不十分有用。你可以研究更专业的应用程序,比如 Matomo 或谷歌网络追踪分析。在 Looker 中也有分析扫雪机数据的支持。
  • 扫雪机只收集事件数据,不收集其他类型的遥测数据。New Relic 将遥测数据分为四类:度量、事件、日志和痕迹,简称为 M.E.L.T 。要使用 Snowplow 收集指标,您需要自己负责聚合。要进行(分布式)跟踪,您需要自己向事件添加跟踪上下文。不建议向 Snowplow 发送原始日志。

展开扫雪机

那么,扫雪机的部署实际上是什么样子的呢?

我们对谷歌云平台的部署

我们当前的部署如下所示:

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

我们目前在 GCP 部署的扫雪机

让我们看一下这张图:

  • 我们唯一的数据源(目前)是 Snowplow JavaScript tracker,嵌入在我们的一个网站上。该组件根据 Snowplow Tracker 协议向收集器发出 HTTP 请求。

使用 JavaScript tracker 就像在你的网站上嵌入一个跟踪标签一样简单

  • 我们部署了 Scala 流收集器 云运行 ,这是一个完全托管的无服务器计算平台,让我们不必担心可扩展性或可用性。请注意,当接收大量事件时(平均每天数百万),在 App Engine 或 Compute 上运行收集器会便宜很多。
  • 当 HTTP 请求到达收集器时,它将消息发布到发布/订阅主题collector_good
  • 我们用 光束充实实现 **,它运行在数据流上。**数据流也是一种托管服务,提供开箱即用的自动扩展。
  • 在 Beam Enrich 中通过验证的消息被丰富,然后发布到enriched_good。从collector_good读取的没有通过验证的消息被发布到enriched_bad。我们目前从来没有读过坏的话题。
  • 我们使用存储组件实现big query Loader,它也运行在数据流上。Loader 订阅了enriched_good,并将事件插入到 BigQuery 的一个大表中,events。它还将事件类型(~事件中属性的名称和类型)发布到 PubSub 主题types上。当 BigQuery 中的插入失败时,事件发布在发布/订阅主题bq_bad_rows
  • 插入通常会失败,因为事件的属性在events表中不存在。运行在计算实例上的 Scala 应用程序 BigQuery Mutator 监视types主题,并在必要时向events表添加列。我们可以,但目前不会重新处理bq_bad_rows中的事件;因此,新类型的前几个事件总是会丢失。

你自己的部署

如果你想自己在 GCP 部署 Snowplow,官方安装说明Simo Avaha的这篇博客文章是极好的资源。您可能还想查看一下这个这个部署脚本集合。我决定放弃这些脚本,转而支持与我自己的一些自定义脚本相结合的 Terraform。

还有在 AWS 上安装扫雪机的指南。目前,Azure 没有官方支持,也没有特定于 Azure 的组件实现。

如果我们的部署对您来说看起来复杂或昂贵,或者如果您只是想探索 Snowplow 的功能,您应该看看 Snowplow Mini 。Mini 在单个映像中实现了所有必需的组件(以及更多组件),该映像可以部署到单个虚拟机上。它可以让你在 GCP 运行一个完整的雪犁栈,大约每月 40 美元。不建议将 Snowplow Mini 用于生产,因为它既不可扩展也不具备高可用性。

你觉得我错过了什么错误或事情吗?请在评论中告诉我!

我在 Data Minded 工作,这是一家独立的比利时数据分析咨询公司,在这里我记录并分享了我在 Publiq 部署 Snowplow 的心得。

Publiq 是一个非营利组织,管理着比利时佛兰德的活动数据库。作为一个令人兴奋的项目的一部分,该项目将使 Publiq 更加数据驱动,我们研究使用点击流数据来提高推荐的质量。

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

什么是 Sparsemax?

原文:https://towardsdatascience.com/what-is-sparsemax-f84c136624e4?source=collection_archive---------17-----------------------

softmax 的一个有用变体

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

格雷格·罗森克在 Unsplash 上的照片

在机器学习中,有几个非常有用的函数,比如 sigmoid,relu,softmax。后者作为神经网络的输出层广泛用于多类分类问题:

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

这个函数有一个有用的特性:它的元素之和是 1,这使得它对概率建模非常有用。它也是处处可微的,并且导数决不为零,这使得它在反向传播算法中很有用。相比之下,调用 softmax 替换的 argmax 函数的导数始终为零。另一个有用的特性是,该函数保留了后验概率分布的支持,因为输出概率决不为零,无论它们可能是多么小的值。

但是有时候你想有一个稀疏的输出,只保留几个非零概率的值。对于这种情况,André F. T. Martins 和 Ramón F. Astudillo 在他们的论文从 Softmax 到 sparsemax:注意力和多标签分类的稀疏模型中提出了一个名为 sparsemax 的新函数。

其思想是将 z 的最小值的概率设置为零,并且仅保持 z 的最高值的概率,但是仍然保持函数可微,以确保反向传播算法的成功应用。该功能定义为:

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

这里 τ(z) 称为阈值函数,它定义了包含 p 的所有非零索引的支持函数 S(z) 。sparsemax 函数的 python 实现如下:

在相同的值上运行它和 softmax,我们确实可以看到它将一些概率设置为零,而 softmax 将它们保持为非零:

np.around(sparsemax([0.1,  1.1, 0.2, 0.3]), decimals=3)array([0\. , 0.9, 0\. , 0.1])np.around(softmax([0.1,  1.1, 0.2, 0.3]), decimals=3)array([0.165, 0.45 , 0.183, 0.202])

有趣的是,在二维情况下,这两个函数有什么不同。在这种情况下,softmax 变成了一个 sigmoid 函数,sparsemax 可以用以下形式表示:

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

下图说明了它们的不同之处:

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

注意,sparsemax 函数并不是处处可微的(但 relu 也不是),但它在哪里是一个简单的计算:

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

这里 |S(z)| 是支撑 S(z)中元素的个数。

讨论

sparsemax 的明显问题是渐变消失。你可以看到,一旦 z 变大,导数变为零。作者承认这个问题,甚至提出了一个新的损失函数来代替交叉熵损失。然而,我认为 sparsemax 的主要优势不在输出层,而是在神经网络的中间,例如在注意力机制中。

你可以在我的 github 库中找到这篇文章的代码。

时间序列中的平稳性是什么,为什么要关注它

原文:https://towardsdatascience.com/what-is-stationarity-in-time-series-and-why-should-you-care-f3b45082356b?source=collection_archive---------8-----------------------

距离我上一篇关于时间序列分析的文章已经有一段时间了。到目前为止,我已经讲述了关于熊猫的基础知识,比如日期处理、时间转换和重采样:

  1. 用 Python 从头开始进行时间序列分析:第 1 部分
  2. Python 中从头开始的时间序列分析:第二部分

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

M. B. M.Unsplash 上拍摄的照片

在阅读这篇文章之前,阅读那些文章不是必须的,但是如果你是时间序列分析的新手或者你有点生疏,我会推荐你。然而,今天我想换个方式,深入到statsmodels库,更准确地说,处理时间序列数据中的平稳性。

但是什么是平稳性呢?

让我们来看看我不久前找到的一些定义:

平稳性意味着,无论起点如何,取相同大小的连续数据样本应具有相同的协方差。

我知道没那么容易处理,但是我们来分析一下。上面的定义是所谓的弱形式平稳性或“协方差平稳性”的定义,如一些参考资料中所述。存在另一种类型的平稳性,称为严格平稳性,它意味着相同大小的样本具有相同的分布。这种形式限制性很强,我们很少观察到,所以为了做 TSA,用“平稳性”这个术语来描述协方差平稳性。

好的,我明白了,但是时间序列是平稳的意味着什么呢? 这个容易。对于一些被归类为平稳的时间序列(协方差平稳性),必须满足 3 个条件:

  1. 常数平均值
  2. 恒定方差
  3. 相同距离周期之间的常数协方差

最后一个可能一开始有点难以理解,所以让我们更深入地探讨一下。它只说明了相同长度的时间段之间的协方差(假设 10 天/小时/分钟)应该与相同长度的其他时间段的协方差相同:

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

现在这就清楚了,但是为什么我们还需要平稳性呢? 2 个理由(最重要的),我的朋友:

  1. 平稳过程更容易分析
  2. 大多数算法都假设平稳性

你能给我举一个平稳和非平稳时间序列的例子吗? 确定,在这里:

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

来自维基共享资源

好了,我希望这已经很清楚了,我可以继续了(只剩下一点理论了)。

平稳性测试

不久前,两个名叫大卫·迪基和韦恩·富勒的好家伙开发了一个平稳性测试。你可能会猜到,它被称为迪基-富勒测试,简称 DF 测试。一段时间后,考虑到时间依赖性,该测试的改进版本被开发出来,它被称为增强的 Dicky Fuller 测试 (ADF-test)。

整个测试可以归结为一个简单的假设测试,其中:

  • H0: 时间序列不是平稳的
  • **哈:**时间序列是平稳的

这意味着我们可以很容易地计算测试统计量,并将其与临界值进行比较。如果检验统计量低于临界值,我们可以拒绝零假设,宣布时间序列是平稳的。

Python 的statsmodels库中的 ADF-test 将返回以下内容:

  • 检验统计
  • p 值
  • 使用的滞后数
  • {1%、5%和 10%的临界值}
  • 对最大化信息标准的估计(基本上越低,就越容易做出未来预测)

为了简单起见,我将比较测试统计值和 p 值,但是如果你愿意,你可以稍后将它和 1%临界值进行比较。事不宜迟,我们开始吧!

导入和数据集

关于您需要的库,其中两个是常见的——NumpyPandas——但是您还需要从statsmodels库导入statools:

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

现在,您可以从提供的 URL 中读入数据集,并进行一些设置,使一切都符合需要:

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

如果你以前做过时间序列分析,我相信你对这个数据集很熟悉。对于那些不是的人来说,这是前几行的样子:

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

让我们也做一个快速的可视化,只是为了吸引眼球,如果时间序列在默认情况下是稳定的:

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

只要快速看一下,就很容易确定这个时间序列是而不是平稳的。平均值会随着时间的推移而变化,并且季节性周期中的峰值似乎只会变得更大。

然而,通过分析来确定平稳性是很好的。这是下一节将要讨论的内容。

执行 ADF 测试

还记得您从statsmodels库中导入的内容吗?我们现在要用它来测试平稳性。statools包含adfuller方法,您可以将时间序列数据传递给它:

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

嗯,情况不是很好。正如预期的那样,时间序列不是平稳的,这一点 p 值(0.99)也证实了。让我们探索一种将区分序列的方法——因此用前一个值减去当前值。这个方法叫做diff(),在这个方法中,您可以传递订单—默认为 1:

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

在对微分时间序列执行相同的测试后,您可以看到 p 值仅略高于通常的显著性水平—还不太令人满意。

如果您想知道为什么我们要删除丢失的值,原因如下:

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

正如您所看到的,您不能从第一个值中减去,因此会导致缺少值。如果提供了缺失数据的时间序列,ADF-Test 将会失败,请记住这一点。

我们可以很容易地使用不同的微分顺序来查看 p 值是否会下降。让我们用 order = 2 来试试:

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

p 值现在低于显著性水平,因此时间序列可以被声明为平稳的。

手动完成整个过程可能会很乏味,如果必须处理大量时间序列数据,甚至会难以管理。假设您想要自动化时间序列模型训练的某个部分,如果您要使用需要平稳序列的算法,这将是一个很好的起点。

这就是为什么我决定做一个函数来为你处理这个过程。这里就不多解释了,恰如其分的评论:

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

现在可以轻松使用声明的函数了:

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

为了快速验证结果,我们将测试假定平稳的时间序列的平稳性:

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

看起来一切都很好,微分阶是 2(手动计算的*),时间序列是稳定的——通过 p 值。*

下一步是什么

这只是时间序列分析的第一步。对于大多数算法,序列必须是稳定的,以便进行分析和预测。

这也是我认为这一步需要自动化的主要原因——手工测试很多差异化订单很繁琐。

现在您有了继续进行的工具。感谢阅读。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

* [## 通过我的推荐链接加入 Medium-Dario rade ci

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

medium.com](https://medium.com/@radecicdario/membership)*

数据科学顾问面对客户的技能:奢侈品还是必需品?

原文:https://towardsdatascience.com/what-is-takes-to-be-a-top-data-science-consultant-part-1-client-facing-skills-7803f5c8974c?source=collection_archive---------34-----------------------

成为成功的数据科学顾问需要什么

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

照片信用。faux els @ Pexels.com

曾经有一段时间,我认为你可以通过拥有优秀的核心技术技能,如机器学习、数据分析和软件工程,成为一名顶级的数据科学顾问。当我开始从事数据科学咨询工作时,我很高兴能成为一家知名全球品牌的顾问。我非常积极地将我在学术和创业生涯中学到的解决方案(通过研究论文、阅读代码库和参加在线课程)应用于大型企业。

我花了几年时间才成为一名经验丰富的数据科学顾问,能够在面向客户的环境中独立工作。

但是很快,现实出现了,我明白我并不具备成为一名成功的数据科学顾问所需的技能。我花了几年时间才成为一名经验丰富的数据科学顾问,能够在面向客户的环境中独立工作。在这些过渡时期,大部分的学习都是在我的项目面临困难,从同事和上级那里得到建设性的或批评性的反馈时进行的。经过这些学习,我开始明白如何作为数据科学顾问成功地为您的客户服务。

除了技术技能之外,成为一名成功的数据科学顾问所需的最关键的技能是你面对客户的技能。简而言之,有许多面向客户的技能,如积极倾听、沟通、换位思考、目标导向的解决问题和奉献精神。在这里,我们重点关注数据科学咨询职业生涯中最关键的一点,即以目标为导向的问题解决。

咨询公司大多是面向客户的专业服务公司,而不是不做产品的公司。这些公司中的大多数人都在从事开发外包解决方案的项目,并最终将它们交付给最终客户。虽然一些团队正在开发产品,但是在面向客户的环境中工作在那些公司中是优先的。

作为一名新入职的数据科学顾问,您可能对您在教育和早期职业生涯中学到的解决方案和技术非常感兴趣。你可能会为自己从事这么多很酷的技术而感到非常自豪,你应该感到自豪。你可能会非常兴奋地向其他人展示你在一些学术论文或教程中读到的见解。你想将你在实践中从新的在线课程中学到的知识应用于你的一个大客户。

你很快就会明白,你项目中的其他人与客户有了更多的接触。也许,他们比你或销售人员高级得多。他们可能会开始告诉你,你提出的解决方案不是客户想要的。或者你把解决方案搞得太复杂了。毕竟,他们比你更了解客户的实际需求。这时候你会开始觉得自己真的不被重视,甚至不受欢迎。

你意识到以客户为中心是咨询公司游戏的重要组成部分

相信我,我理解。你可能会觉得咨询行业不适合你,你不得不离开,重新开始。但是你需要意识到,以客户为中心,也就是说,把客户的需求,以及项目利益相关者放在第一位,是咨询公司游戏中的一个重要部分。大多数时候,你需要关注企业为解决问题而努力实现的最终目标;最终,你解决了客户的问题,而他们并不了解数据科学或人工智能。他们只想解决他们的业务问题。

通常在你早期的咨询生涯中,你提供的解决方案过于复杂,客户难以理解,甚至你的上司也难以解释。这些可能是你最近在一篇论文中读到的一些复杂的深度学习解决方案,并发现它很有趣。你很快就会意识到,在大多数情况下,最好的解决方案是最直接的解决方案,你可以很快向客户展示它们的价值。一旦您的解决方案的总体方向得到批准,您就可以在此基础上构建更复杂的级别,直到达到所需的级别。

除了您提供的解决方案之外,作为管理顾问,您将拥有的一般职业礼仪是您作为数据科学顾问角色的重要组成部分。记住,如果你在一家大型咨询公司工作,你的客户雇佣你的公司为他们提供世界一流的服务。客户最有可能希望得到高质量、高专业水平的工作。

在咨询中,客户永远是对的。

你如何对待你的咨询客户必须是以客户为中心和坚持“客户永远是对的”这一信念的最好例子在为客户提供咨询服务时,你需要高度的同理心、奉献精神和积极的倾听,这是这个行业的精髓。

总之,在咨询公司工作时,你需要非常实际地对待项目要求和解决问题。此外,请记住,作为一名面向客户的数据科学顾问,意味着您始终需要将客户和项目利益相关方的需求和要求置于您希望如何解决业务问题的偏好之上。

关于作者:

Pouyan R. Fard 是 Fard 咨询公司首席执行官&的首席数据科学家。Pouyan 在数据科学、人工智能和营销分析方面拥有多年的公司咨询经验,从初创公司到全球公司。他曾与医药、汽车、航空、运输、金融、保险、人力资源和销售&营销行业的财富 500 强公司合作。

Pouyan 也在指导活跃在大数据行业的初创公司和人才。他的热情是通过职业培训培养下一代数据科学家,并帮助他们找到数据科学领域的顶级工作机会。

Pouyan 已经完成了消费者决策预测建模的博士研究工作,并对开发机器学习和人工智能领域的最先进解决方案保持兴趣。

什么是贝叶斯定理?

原文:https://towardsdatascience.com/what-is-the-bayesian-theorem-a9319526110c?source=collection_archive---------47-----------------------

数据科学、贝叶斯统计、机器学习

贝叶斯有助于对不确定感进行决策。

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

凯蒂·穆姆Unsplash 上拍摄的照片

贝叶斯是多个变量之间概率交互的交互表示。

“现在,记住贝叶斯定理的作用:它帮助我们根据新的证据更新假设。”― 丹·莫里斯

贝叶斯定理在第二次世界大战期间被著名地用于解决纳粹恩尼格玛密码,今天它通过研究、技术、医学和许多其他手段来管理模糊性。

那么它是如何工作的呢?

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

照片由Tj·霍洛韦丘克Unsplash 上拍摄

第一个例子

假设我需要看看上帝是否存在。

最初,我不得不同意一些技术来量化它。比如“如果上帝存在,那么和谐的可能性应该是战争的数倍”。这就是众所周知的似然函数。

有了这个可能性函数,我可以逐个国家地检查是否有战争或和谐。我需要世界状况的绝对可能性,这是每个国家可能性的结果。模型中,C 中有三个国家 A、B,它们处于战争、战争与和谐之中:

如果上帝存在,可能性是 0.20.20.8

如果上帝不存在,可能性是 080.80.2

在数学中,证明上帝存在的几率是 2 比 8

第二,你制造了一个潜在的猜想或推测。就像,我赌二比一上帝不存在。这就是所谓的先验概率。就像我的信仰一样,我以 10 比 1 的赔率打赌上帝存在。所以:

上帝存在:0.9

上帝不存在:0.1

第三,你利用 B ayes 定理把两者联系起来。你看过数据后的信念是:

p(上帝|数据)= k×似然×先验 p(上帝|数据)= k×似然×先验

这就给出了两种潜在客户的贝叶斯概率:

p(上帝=是|数据)= K*(0.20.20.8)*0.9 = 0.0288

p(God = No | Data)= K (0.8 * 0.8 * 0.2) 0.1 = 0.0128

k 只是一些归一化常数,以使总和为 1,同时保持幅度。最后的结局明白无误地是:

p(上帝=是|数据)= 0.5

p(God = No | Data) = 0.5

沿着这些思路,你开始时是一个有信仰的人,认为(9 比 1)上帝确实存在,你结束时是一个自由思想者!

贝叶斯概率类似于概率的基本原理,我们从最终定罪之前的初始假设出发,通过作为可能性的前提和作为信息的观察。

另一个例子,与在地面上相比,你在高楼顶部被闪电击中的可能性很高。随后,关于该区域的数据改变了可能性。

贝叶斯试图破译这些关于概率的额外数据。鉴于你所在的地区,我们可以比任何地区更准确地预测某个事件发生的可能性。

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

伊丁·易卜拉希米Unsplash 上拍摄的照片

另一个例子

假设你在一个没有窗户的房间里。你意识不到外面是倾盆大雨还是阳光明媚。因此,今天有暴风雨的几率相当于晴天的几率。

你需要一些推理要么是暴风雨,要么今天是晴天。今天没有理由讨论它发光的可能性。这种可能性就是当某件事即将发生时,你做出一个估计。

因此,相对于陈述它有多大机会发光,我们谈论今天你接受多少是明亮的,这经常被称为贝叶斯理解。我们只是用一种意想不到的方式来表达。

现在你的同伴去了你的房间。假设他带了一把伞。在你的同伴到来之前,你认为狂风大作的程度等同于你认为阳光灿烂的程度。

然而,在看到一把伞之后,你会想它可能是因为其他什么原因而落下来的,我的同伴会带着一把伞吗?

你还不确定气候,但现在你的信念更倾向于暴风雨。

话又说回来,如果你的同伴戴着一顶帽子,可能它在外面会发光。目前,你更相信它光明的外表,而不是狂风大作。

你简单地做了一个贝叶斯更新。你提到了一个客观事实,看到你的同伴带着一把伞或一顶帽子,并利用这个数据来更新你对当前气候的看法。这被称为贝叶斯更新

你可以继续观察。如果你多次做同样的观察,你的信念倾向于偏向一边。

在看到你的同伴拿着一把伞之后,假设你对外面正在下雨的信念有 75%来自于潜在的一半。此时,假设你的姐妹在你的同伴离开后进来。

她也有一把伞。目前,当外面真的很亮的时候,你的同伴和你的姐妹都带着伞出现的几率非常低。

所以现在你更确定外面在下大雨。可能现在你的信念状态是 85%倾倒对 15%辐射。

这实际上是一个在隐马尔可夫模型中观测更新的例子,在这种情况下,你不能合理地看到气候,但你可以提到依赖于气候的客观事实。

同样,你可以把你对之前气候的更新放在一起,而不是放在一个同伴身上。假设在你的城市连续两天下雨真的很少见。

你还在你的房间里,然而有人来告诉你,它昨天就下来了。所以也许今天天气很好。

在意识到昨天是狂风大作的一天之前,你确信外面正下着倾盆大雨,就相当于你确信天气晴朗。

然而,在意识到它昨天已经下降之后,你相信它是明亮的,而不是它正在下降。

这通常被称为进度更新。你从一天前进到第二天,你利用前一天的数据来推测今天的情况。

具体来说,贝叶斯推理将概率解释为一个人是否可能或有可能因为特定原因而出现的比例。

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

凯利·西克玛Unsplash 上拍摄

结论

我们可能对某个场合有更早的信念;然而,随着新证据的公布,我们的信念可能会改变。

贝叶斯观点为我们提供了一个清晰的实证工具来强化我们先前的信念,并提供证据来创造新的后来的信念。

现在,把你对TwitterLinkedin,以及Github!!**

同意 还是 不同意 与 Saurav Singla 的观点和例子?想告诉我们你的故事吗?

他乐于接受建设性的反馈——如果您对此分析有后续想法,请在下面评论或联系**

推文@ SauravSingla _ 08,评论Saurav _ Singla,还有明星SauravSingla马上!**

到底什么是偏差-方差权衡,为什么它很重要?

原文:https://towardsdatascience.com/what-is-the-bias-variance-tradeoff-c3fda9897fff?source=collection_archive---------36-----------------------

数据科学概念

它们彼此有多么不同

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

亚历克斯Unsplash 上的照片

W 当谈到数据科学时,人们必须确保他们的机器学习模型“恰到好处”。每一个机器学习模型都有不同的两面: 偏差方差 。作为数据科学家,我们必须寻找一种在两者之间达到完美平衡或至少接近完美平衡的模型。就像《金发姑娘和三只熊》中的金发姑娘一样,我们必须寻找一个既不“太热”也不“太冷”的模型。

这就是“偏差-方差权衡”的总体概念。偏差方差是机器学习模型中的误差。当我们构建和训练我们的机器学习模型时,我们的目标是尽可能减少错误。在理想情况下,我们能够将模型中的偏差和方差都降低到零。然而,如果偏差减少到零,那么方差将增加,反之亦然。因此,为了优化我们的模型,我们必须能够在两者之间找到一个平衡点,这样我们就可以同时减少偏差和方差。

在这里注册一个中级会员,可以无限制地访问和支持像我这样的内容!在你的支持下,我赚了一小部分会费。谢谢!

什么是偏见?

偏差是机器学习模型中的一个错误。该误差是模型预测值和实际值之间的差异。

在统计学中,偏差是低估或高估一个参数的趋势。偏差可以以多种不同的形式出现,如 采样偏差选择偏差

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

照片由罗姆森·普里查维特Unsplash 上拍摄

什么是方差?

方差也是机器学习模型中的一个误差。这次的错误是模型对数据的敏感性。如果它太敏感,那么模型可能会看到实际上并不存在的信号和模式。

在统计学上,方差是数据集中每个变量与所有变量的平均值或均值之间的距离。它测量数据集的分布以及每个变量之间的距离。

偏差与方差

在偏倚和方差之间,哪个误差应该减少得最多?如果你选择减少一个错误而不是另一个,会发生什么呢?错误就是错误,所以总的来说,有一个或另一个并不更好。

欠拟合和过拟合

如果我们优先考虑减少一个误差,那么我们将得到一个模型,要么 过度拟合,要么 数据不足。这意味着模型不会为任何新数据提供可用的结果。在拟合不足的情况下,模型无法拟合训练数据,因此将无法概括新数据。过度拟合将导致模型对训练数据建模得太好;检测数据中实际不存在的模式和噪声。这可能会对任何新数据的建模结果产生负面影响。

减少两者

由于优先减少一个错误的影响,我们必须同时减少两个错误。这将引导我们达到我们希望的最好结果。

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

偏差-方差权衡的准确性

看一下四个目标的图像以及偏差和方差对精确度的影响。随着偏差的增加,结果完全偏离目标,尽管是一致的。随着方差的增加,结果有时会接近标准,但过于分散。如果偏差和方差都很高,那么结果是分散的,完全偏离目标,如右上方的目标所示。最好的选择是偏差和方差最小的目标,其结果始终如一地准确。

为了获得最佳模型,偏差和方差都必须尽可能地降低。

最佳模型

降低偏差和方差意味着减少模型中的总误差。这也意味着创建一个不太简单也不太复杂的模型。当考虑偏差和方差时,我们也要考虑模型的复杂性。太复杂的模型是过度拟合的模型,太简单的模型是拟合不足的模型。这也与偏差和方差的方向相关。

观察误差和模型复杂性的图像,我们可以看到实现最佳模型的点。

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

绘制偏差-方差权衡图

想象上面的图像是一个大山谷。即使到达山顶可能更令人钦佩,但在偏差-方差权衡的情况下,我们希望到达谷底。谷底或最低点是我们在创建机器学习模型时希望偏差、方差和总误差保持不变的地方。

一旦我们能够实现最低可能的偏差和方差,那么我们就实现了最佳的机器学习模型。

结束语

正如您已经看到的,当涉及到偏差和方差时,减少一个比另一个更好的方法并不可取。偏差是实际值和模型预测值之间的误差。方差也是一个误差,但是来自模型对训练数据的敏感性。

如果我们的目标只是减少两者中的一个,那么另一个就会增加。偏差优先于方差将导致模型过度拟合数据。区分差异的优先级将使模型不符合数据。这两种结果都不被看好。然而,有一个点,我们可以在不影响另一个的情况下减少偏差和方差,这就是我们正在寻找的点。

为了实现最佳的机器学习模型,我们必须平衡两者的缩减。这将给我们一个既不太简单(数据欠拟合)也不太复杂(数据过拟合)的模型。这两种误差减少的平衡将使我们达到最佳的模型复杂度。这是偏差-方差权衡的总体概念。

在 Twitter 上关注我:@Marco_Santos

我们需要的数据架构是什么?

原文:https://towardsdatascience.com/what-is-the-data-architecture-we-need-72606e71ba0c?source=collection_archive---------7-----------------------

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

照片通过 Pixabay

在大数据和数据科学的新时代,对于企业来说,拥有一个与业务流程一致的集中式数据架构至关重要,这种架构可以随着业务增长而扩展,并随着技术进步而发展。一个成功的数据架构提供了数据各个方面的清晰性,这使得数据科学家能够高效地使用可信的数据,并解决复杂的业务问题。它还通过利用新兴技术帮助组织快速利用新的业务机会,并通过管理整个企业中复杂的数据和信息交付来提高运营效率。

与信息体系结构、系统体系结构和软件体系结构相比,数据体系结构相对较新。数据架构师的角色也很模糊,落在了高级业务分析师、ETL 开发人员和数据科学家的肩上。尽管如此,我将使用数据架构师来指代那些为组织设计数据架构的数据管理专业人员。

当谈到建筑时,我们经常会想到与建筑的类比。传统的建筑建筑师规划、设计和审查建筑的建造。设计流程包括与客户合作,充分收集需求,了解当地的法律和环境限制,并与工程师、测量员和其他专家合作,以确保设计切实可行且在预算范围内。这项工作的复杂性确实非常类似于数据架构师的角色。然而,这两种架构师角色之间有一些基本的区别:

  • 建筑架构是自顶向下设计的,而数据架构通常是可能已经存在的组件或系统的集成过程。
  • 建筑设计师在建造建筑之前,必须了解所有的要求并定义整个范围。数据架构的范围很广,很容易改变。因此,一个成功的数据架构应该设计得灵活,并能预见未来的变化。
  • 建筑建筑师有严格的教育和专业要求,应该拥有商业、艺术、结构物理和建筑材料方面的深入知识。另一方面,大多数数据架构师都有 IT 背景,在一些公司或行业有专业经验,对业务的了解有限。因此,他们应该意识到他们的设计可能会有偏差,他们需要根据组织中业务和技术专家的反馈进行调整。
  • 建筑设计几乎总是为新建筑从头开始。因此,建筑建筑师可以完全根据新要求和新材料进行规划和设计。数据架构师没有这种奢侈。他们很少能从零开始,但在设计未来时需要了解现有的平台和数据库。

考虑到所有这些差异,数据架构师仍然可以向建筑架构师学习,特别是采用他们自顶向下的方法来改进数据架构设计。在许多组织中,缺乏系统的、集中的、端到端的数据架构设计。下面列出了一些主要原因:

  • 一家公司有多个 IT 部门,他们各自使用自己的数据标准和架构。
  • 应用程序和流程是基于单个业务需求构建的,没有数据架构标准可循。
  • 数据架构师的角色只关注有限数量的技术领域,并且拥有有限的数据业务知识。
  • IT 项目的管理没有将数据架构作为设计阶段的一部分来考虑;数据科学家和工程师在没有一致的数据管理流程的情况下编写代码。

由于这些不足,我们经常看到公司的数据系统脱节,团队和部门之间存在差距。这种差异导致系统性能不佳,移交次数多,出现生产数据问题时需要很长时间进行故障排除,缺乏跨系统达成正确解决方案的责任感,以及缺乏评估变更影响的能力。最后,当迁移或重新设计到下一代平台时,脱节的系统可能会导致大量的分析和研究工作。

鉴于所有这些,一个成功的企业需要有一个基于业务流程和操作设计的自顶向下的一致的数据架构。特别是,就像建筑架构师所做的那样,在将技术应用到详细的应用程序设计和实现之前,企业数据架构师需要首先在概念和逻辑级别构建蓝图。

1。基于业务流程和操作的概念级数据架构设计

在现代 IT 中,业务流程由数据实体、数据流和应用于数据的业务规则支持和驱动。因此,数据架构师需要有深入的业务知识,包括财务、营销、产品和业务流程的特定行业专业知识,例如健康、保险、制造商和零售商。然后,他或她可以通过设计代表每个业务领域的数据实体和分类法,以及业务流程下的数据流,在企业级正确地构建数据蓝图。特别是,在此概念阶段需要考虑和规划以下方面:

  • 核心数据实体和数据元素,如关于客户、产品、销售的数据实体和数据元素。
  • 客户和顾客需要的输出数据。
  • 要收集、转换或引用的源数据,以生成输出数据。
  • 每个数据实体的所有权,以及基于业务用例应该如何消费和分配它。
  • 应用于每个数据实体的安全策略。
  • 数据实体之间的关系,例如引用完整性、业务规则、执行顺序。
  • 标准数据分类和分类学。
  • 数据质量、运营和服务水平协议(SLA)的标准。

这个概念级的设计由支持每个业务功能的底层数据实体组成。蓝图对于企业和系统架构的成功设计和实现及其未来的扩展或升级至关重要。在许多组织中,这种概念设计通常嵌入到由单个项目驱动的业务分析中,而没有从企业端到端解决方案和标准的角度进行指导。

2。逻辑级数据架构设计

通过考虑使用哪种类型的数据库或数据格式,这种级别的设计有时被称为数据建模。它将业务需求与底层技术平台和系统联系起来。然而,考虑到数据建模者的孤立角色,大多数组织只在特定的数据库或系统中设计数据建模。通过考虑适用于每个数据库或系统的标准,以及这些数据系统之间的数据流,一个成功的数据架构应该用一种集成的方法来开发。特别是,需要以协同方式设计以下 5 个领域:

命名约定和数据完整性

数据实体和元素的命名约定应该一致地应用于每个数据库。此外,如果相同的数据必须驻留在多个数据库中,应该加强数据源及其引用之间的完整性。最终,这些数据元素应该属于数据架构中的概念设计中的数据实体,然后可以基于业务需求对其进行协同和准确的更新或修改。

数据归档/保留政策

数据归档和保留策略通常直到生产的后期才被考虑或建立,这导致了资源浪费、不同数据库之间的数据状态不一致,以及数据查询和更新的低性能。为了加强数据完整性,数据架构师应该根据操作标准在数据架构中定义数据归档和保留策略。

隐私和安全信息

隐私和安全成为逻辑数据库设计的一个重要方面。虽然概念设计已经定义了哪个数据组件是敏感信息,但是逻辑设计应该将机密信息保存在一个数据库中,该数据库具有受限的访问权限、受限的数据复制、特定的数据类型和安全的数据流来保护信息。

数据复制

数据复制是考虑三个目标的关键方面:1)高可用性;2)避免通过网络传输数据的性能;3)解耦以最小化下游影响。然而,过多的数据复制会导致混乱、数据质量差和性能差。任何数据复制都应该由数据架构师检查,并按照原则和规则进行应用。

数据流和流水线

不同数据库系统和应用程序之间的数据流应该在这个层次上明确定义。同样,这个流程与业务流程和数据架构师概念层次中的流程是一致的。此外,数据接收的频率、管道中的数据转换以及针对输出数据的数据访问模式应该在逻辑设计的集成视图中加以考虑。例如,如果上游数据源是实时的,而下游系统主要用于具有大量索引的聚集信息的数据访问(例如,频繁更新和插入的开销很大),则需要在两者之间设计数据管道来优化性能。

3。数据治理是数据架构持续成功的关键。

由于数据架构反映并支持业务流程和流,因此每当业务流程发生变化时,数据架构也会随之变化。随着底层数据库系统的改变,数据架构也需要调整。因此,数据架构不是静态的,而是需要不断地管理、增强和审计。因此,应该采用数据治理,以确保在每个新项目启动时,企业数据架构的设计和实现都是正确的。

结论

在一个成功的数据架构中,基于业务流程的概念设计是最重要的组成部分,其次是强调所有数据库和数据管道的一致性、完整性和效率的逻辑设计。一旦建立了数据架构,组织就可以看到哪些数据驻留在哪里,并确保数据得到保护、高效存储和准确处理。此外,当一个数据库或一个组件发生更改时,数据架构可以让组织快速评估影响,并指导所有相关团队进行设计和实现。最后,数据架构是企业系统的活文档,它保证是最新的,并给出清晰的端到端的描述。总之,反映端到端业务流程和运营的整体数据架构对于公司在经历重大变革(如收购、数字化转型或向下一代平台迁移)的同时快速高效地发展至关重要。

SQL 中的 having 子句和 where 子句有什么区别?

原文:https://towardsdatascience.com/what-is-the-difference-between-a-having-clause-and-a-where-clause-in-sql-ed74e0a8ad6d?source=collection_archive---------2-----------------------

一个常见的面试问题解释

在 SQL 中,其中子句和 having 子句用于过滤数据。这里的子句相当简单,但是子句就有点复杂了。 Where 子句按表中的形式过滤数据。相比之下,具有子句的分组聚合之后过滤数据。另一种说法是, where 作用于单个记录,而have作用于分组记录。

在这个故事中,我将描述 where 子句和 having 子句。然后,我将使用《吸血鬼猎人巴菲》中的角色,通过一个使用了 where 子句的示例和一个 having 子句的示例。

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

https://imgs.xkcd.com/comics/query_2x.png

场景

剧透警报

这个场景提到了《吸血鬼猎人巴菲》中的故事情节,所以如果你还没有看过,也不想知道会发生什么…停止在这里阅读。然而,鉴于它开始于 1997 年,结束于 2003 年,我认为我们可能是相当安全的😜

巴菲和她的朋友住在地狱口的阳光谷。巴菲是吸血鬼猎人,但其他角色也有助于猎杀吸血鬼和恶魔。

假设我们有一个包含在地狱之口收集的数据的表。这张表叫做吸血鬼 _ 被杀,显示了生活在阳光谷的所有角色杀死的吸血鬼数量。它也给每个人一个他们所属的类别标签,包括杀戮者,吸血鬼,平民和守望者。

在整个系列中,巴菲死了两次。第一季有一次主人淹死了她。她复活了,之后继续杀吸血鬼。她第二次死是在第五季的最后一集,她从一座塔上跳下,进入一个传送门,代替她的姐姐道恩死去。在第六季开始时,她的朋友们用巫术把她从死亡中带了回来,她也回去猎杀吸血鬼。

由于她死了两次,巴菲实际上在吸血鬼 _ 被杀表中有三个条目。

这些数字不是真实的。我编造了这些故事来猜测每个角色一生中会杀死多少吸血鬼。没错,我现在正在狂看《魔法奇兵》的整个 7 季,但我不会坐在那里统计所有死去的吸血鬼。

如果你想知道每个角色在屏幕上被杀死的实际次数,你可以在这里找到。我没有在我的例子中使用这些数字,因为这些数字偏向于那些有更多屏幕时间的主要角色。

问题是

费思和巴菲在吵架。他们一直有竞争,但这场争论是关于谁杀了最多的吸血鬼。费思认为只有她杀了 1000 多个吸血鬼,而巴菲还没有达到这个数字。巴菲不同意,并认为她已经杀死了 1000 多个吸血鬼。

为了解决他们的争吵,贾尔斯使用了吸血鬼 _ 被杀的记录。

CREATE TABLE vampires_slain (
    name varchar(255),
    hellmouth_category varchar(255),
    slay_count int
);
INSERT INTO vampires_slain (name, hellmouth_category, slay_count)
VALUES
    ('Buffy', 'slayer', 104),
    ('Willow', 'civilian', 65),
    ('Xander', 'civilian', 89),
    ('Buffy', 'slayer', 886),
    ('Angel', 'vampire', 1397),
    ('Giles', 'watcher', 673),
    ('Kendra', 'slayer', 1260),
    ('Spike', 'vampire', 1108),
    ('Faith', 'slayer', 1421),
    ('Buffy', 'slayer', 957)
;

吸血鬼 _ 被杀

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

环境

为了运行这个例子中的代码,我在 SQL Fiddle 中使用了 MySQL 5.6。如果您想尝试运行代码,请随意使用它。

解决方案

为了解决巴菲和菲斯之间的争论,贾尔斯想要过滤掉**吸血鬼 _ 被杀的表格。**他想只显示那些 slay_count 大于 1000 的个体。他试图使用一个 where 子句来实现。

Where 子句

其中在 SQL 中是一个简单的过滤器。如果满足查询的 where 条件,则在结果中返回该行数据。就这么简单。

在查询中, where 子句最常用在 from 之后。您可以在 where 子句中使用许多不同的运算符,包括 =、>、<、> =、< =、!=,之间,像中的和**。注意,在 MySQL 中要么**!=** 或 < > 可以用来表示‘不等于’。**

select *
from
vampires_slain
where
slay_count > 1000
order by 
slay_count desc;

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

费思很惊讶,她不是唯一一个杀死了 1000 多个吸血鬼的人。安吉尔、肯德拉和斯派克也在 slay_count 大于 1000 的名单中。

巴菲惊讶地发现她不在名单上。就连年纪轻轻就被杀的肯德拉也有 1000 以上的 slay_count

当巴菲买下肯德拉时,贾尔斯意识到当巴菲死了,肯德拉被召唤成为一名杀手时,巴菲的记录可能会一分为二。然后他想起她为了救 Dawn 第二次死了,并得出结论,Buffy 在表中有 3 个条目。

为了合并这三个记录,Giles 决定使用一个具有子句的**。这样他就能看到巴菲三个条目的是否大于 1000,以及她杀死的吸血鬼数量是否大于费思。**

Having 子句

where 关键字不能与聚合函数一起使用。这就是有了的的用武之地。 Having 只能通过子句与组结合使用。SQL 中一些最常见的聚合函数有 minmaxavecountsum

当在查询中使用具有的时,只返回满足具有条件的组**。**

贾尔斯用一个 having 子句解决了巴菲两次进入吸血鬼 _ 被杀表的问题。他按名称对条目进行分组,这样 Buffy 的两个条目将合并为一个。她名下的两个条目将使用 having 子句中的 sum 聚合函数进行求和

然后,他可以再次使用 > 符号来过滤数据集,以仅包含总和 slay_count 大于 1000 的分组条目。

select name, hellmouth_category, sum(slay_count)
from
vampires_slain
group by 
name
having
sum(slay_count)>1000
order by sum(slay_count) desc;

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

因此,一旦 Giles 使用了 having 子句,就会对每个个体的 slay_counts 进行求和,然后过滤生成一个表,该表只包含 sum(slay_count) 大于 1000 的个体。结果表像以前一样包含了费思、安吉尔、肯德拉和斯派克,但它也包含了具有 1947 年 sum(slay_count) 的巴菲。

因此,贾尔斯解决了争论。巴菲和费思的总死亡数都超过了 1000。信仰是错误的。巴菲不仅杀死了 1000 多只吸血鬼,而且她在 1947 年杀死的吸血鬼总数比费思的 1421 只还多。

我如何使用 where 和 having 子句

我不得不承认,在我的日常数据库查询中,我倾向于不太使用 having 子句。相反,我通常会创建中间表,其中的项目被分组。然后,如果需要的话,我会使用一个 where 子句来过滤中间表。我想我经常分组字段或者过滤它们,但很少同时两者。

我之所以会创建中间表而不是使用带有子句的来创建中间表,主要是因为我所处理的数据都在非常大的表中。当使用具有子句的时,会在内存中创建一个临时表。这意味着,对于大型数据集,使用具有子句的的查询会花费很长时间。

然而, having 从句在科技面试中经常被用作问题。这是因为它们是需要正确使用的比较棘手的 SQL 子句之一。因此,即使你很少在实践中使用它们,了解它们的工作原理并对它们感到舒适也是值得的。

我希望这个例子有助于澄清 SQL 中的 wherehaving 之间的区别。

除了数据,我的另一个爱好是绘画。你可以在 www.katemarielewis.com找到我的野生动物艺术

我写过的关于 SQL 的其他文章:

[## SQL 中的内部连接和外部连接有什么区别?

SQL 中的内部连接、完全外部连接、左外部连接和右外部连接使用来自以下领域的示例进行解释…

towardsdatascience.com](/what-is-the-difference-between-an-inner-and-an-outer-join-in-sql-5b5ec8277377)

我写的关于数据科学的文章:

[## 我如何在 6 个月内从零编码技能成为数据科学家

我用来自学数据科学的 4 个工具没有花一美元

towardsdatascience.com](/how-i-went-from-zero-coding-skills-to-data-scientist-in-6-months-c2207b65f2f3)

SQL 中的内部连接和外部连接有什么区别?

原文:https://towardsdatascience.com/what-is-the-difference-between-an-inner-and-an-outer-join-in-sql-5b5ec8277377?source=collection_archive---------1-----------------------

SQL 中的内连接、全外连接、左外连接和右外连接用哈利波特世界中的例子来解释

SQL 中的连接用于组合不同表的内容。您可以通过多种方式指定希望如何联接表中的数据,其中一种方式是联接类型。有四种主要的联接类型:内部联接、完全外部联接、左外部联接和右外部联接。

内部联接和外部联接的主要区别在于,内部联接导致两个表的交集,而外部联接导致两个表的并集。

在这个故事中,我将描述内部连接、完全外部连接、左外部连接和右外部连接之间的区别。然后,我将通过一个使用《哈利·波特》中人物的例子来展示这些不同之处。

可视化连接

一个维恩图是一个可视化内部连接和外部连接之间差异的有用方法。

内部联接和完全外部联接

内部连接导致两个数据集的维恩图的重叠部分,而对于完全外部连接,维恩图的外部部分也将被返回。

对于内部联接,只返回两个表共有的行。但是,对于完全外部连接,将返回两个表中的所有行。

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

数据库中名为 Table_1 和 Table_2 的两个表

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

**内部连接:**内部连接的结果将只包含 Table_1 和 Table_2 重叠的黄色部分

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

**完全外部连接:**外部连接的结果将包含所有黄色部分,包括整个 Table_1 和 Table_2,而不仅仅是两个圆重叠的地方

左右外部联接

如果您希望从一个表中获取所有值,但从另一个表中只获取与该表匹配的行,则左右外部联接非常有用。

因此,在左外连接中,将返回左表中的所有行以及右表中共有的行。相比之下,对于右外连接,将返回右表中的所有行以及左表中共有的行。

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

**左外连接:**左外连接的结果将包含 Table_1 和 Table_2 重叠的黄色部分,以及包含 Table_1 其余部分的黄色部分

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

**右外连接:**右外连接的结果将包含 Table_1 和 Table_2 重叠的黄色部分,以及包含 Table_2 其余部分的黄色部分

例子

环境

为了运行这个例子中的代码,我在 SQL Fiddle 中使用了 PostgreSQL 9.6。如果您想尝试在不设置复杂环境的情况下运行代码,请随意使用。我已经简化了示例中表格的输出,删除了重复的列,只是为了让它更清晰、更容易理解,所以如果您尝试了一下,看起来有点不同,不要惊慌。对于这个故事,我使用 PostgreSQL 而不是 MySQL,因为 MySQL 不使用完全外连接。

哈利·波特场景

让我们假设您正试图连接霍格沃茨魔法学校的两个学生成绩表。这些桌子被称为魔药 _ 类魔咒 _ 类。每个表格都有两列,包含学生姓名和成绩。

CREATE TABLE charms_class(
student_namevarchar(255),
charms_gradevarchar(255)
);INSERT INTO charms_class (student_name, charms_grade)
VALUES
    ('Harry', 'C'),
    ('Ron', 'D'),
    ('Hermione', 'A'),
    ('Luna', 'B'),
    ('Neville', 'B')
;CREATE TABLE potions_class(
student_namevarchar(255),
potions_gradevarchar(255)
);INSERT INTO potions_class (student_name, potions_grade)
VALUES 
    ('Harry', 'A'),
    ('Ron', 'C'),
    ('Hermione', 'B'),
    ('Ginny', 'A'),
    ('Draco', 'D')
;

charms_class

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

魔药课 _ 课堂

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

内部联接示例

想象一条龙威胁着霍格沃茨城堡。只有同时参加魔药课和魔法课的学生才能和老师一起出去保卫学校。

要找出哪些学生同时上了 charms 课和魔药课,以及他们在每门课中的成绩,可以使用 charms_class 和魔药课表中的内部联接。

select * 
from 
charms_class INNER JOIN potions_class 
on 
charms_class.student_name=potions_class.student_name;

生成的表如下所示:

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

在这个内部连接的例子中,只有哈利、罗恩和赫敏同时参加了魔咒和魔药课,所以他们两个班级的成绩都在结果中返回。请注意,只注册了一个班而没有注册另一个班的学生不会出现在结果中。

因此只有哈利、罗恩和赫敏被允许面对龙。

完全外部连接示例

魔法部只雇佣完成了魔咒课和魔药课的毕业生。然而,没有足够的学生具备担任所有角色所需的先决条件,所以魔法部想要一份已经注册了一个班级的学生名单。

要找出哪些学生在魔法班或魔药班,可以使用一个完整的外部连接。请注意,如果学生没有注册魔药课,魔药等级值将为空,同样地,如果学生没有注册魔药课,魔药等级值也将为空。

所以任何一个成绩栏中有空值的学生都是魔法部想要联系的人。

select * 
from 
charms_class FULL OUTER JOIN potions_class 
on 
charms_class.student_name=potions_class.student_name;

生成的表如下所示:

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

在这个完全外部连接的示例中,所有学生都包含在结果表中。只有哈利、罗恩和赫敏同时参加了魔法和魔药课,所以他们这两门课的成绩都在结果中返回,并且在他们的行中没有空值。

金妮和德拉科只有魔药课的成绩,因为他们没有使用符咒,所以他们的符咒成绩被指定为空值。卢娜和纳威只有魔法等级,因为他们没有学过魔药,所以他们的魔药等级被赋值为空值。

因此金妮、德拉科、卢娜和纳威都是可以选修额外课程的学生,以便毕业后能够在魔法部工作。

左外部联接示例

校长办公室搞了一场恶作剧,邓布利多教授的所有家具都漂浮在天花板上。参加魅力课程并获得 C 级或更高成绩的学生受到怀疑。然而,上魔药课的学生不可能是罪犯,因为恶作剧发生时他们的班级正在进行实地考察。

为了找出哪些学生在 charms 班的成绩为 C 或更高,而没有在魔药班注册,我们将使用左外连接来连接 charms_class 表和魔药 _class 表。请注意,如果学生没有注册魔药课,魔药课成绩值将为空。

select * 
from 
charms_class LEFT OUTER JOIN potions_class 
on 
charms_class.student_name=potions_class.student_name;

生成的表如下所示:

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

只有哈利、罗恩和赫敏同时参加了魔法和魔药课,所以他们这两门课的成绩都在结果中返回,并且在他们的行中没有空值。

卢娜和纳威只有魔法等级,因为他们没有学过魔药,所以他们的魔药等级被赋值为空值。

金妮和德拉科没有服用魔咒,所以他们没有包括在这个结果表中。

因此,校长办公室恶作剧的嫌疑人是卢娜和纳威。他们在魔法课上都得了 B,而且事发时都不在魔药课上。

右外部联接示例

斯内普教授经营着一个魔药俱乐部,在魔法课上同时开会。只有注册了魔药课但没有注册魔药课的学生才可以参加俱乐部。

要找出哪些学生上了魔药课,哪些没上魔药课,你可以使用一个右外连接。请注意,如果学生没有注册 charms 类,charms_grade 值将为空。

select * 
from 
charms_class RIGHT OUTER JOIN potions_class 
on 
charms_class.student_name=potions_class.student_name;

生成的表如下所示:

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

在这个右外连接的例子中,只有哈利、罗恩和赫敏同时参加了魔咒和魔药课,所以他们两个班的成绩都在结果中返回,并且他们的行中没有空值。

金妮和德拉科只有魔药课的成绩,因为他们没有使用符咒,所以他们的符咒成绩被指定为空值。

卢娜和纳威没有服用魔药,所以他们没有被包括在这个结果表中。

因此只有金妮和德拉科可以加入魔药俱乐部,因为他们不上魔法课。

我如何使用联接

作为一名数据科学家,我使用最多的连接是左外连接。例如,我曾经处理过健康数据,并且经常会按位置汇总程序编号。在这种情况下,我会将位置表放在左边,然后进行左连接。这是因为可能有一些位置我没有任何过程,如果我做了一个内部连接,我会丢失这些位置。当您只需要完整的数据集,而不需要添加外部联接带来的空值时,内部联接会更有用。我很少使用完全外连接,除非需要保留被连接的两个表中的所有数据。完全外连接最终可能会产生非常大的结果表,尤其是在要连接的表之间没有太多重叠的情况下。

如果你想解释不同的 SQL 方法,请在下面留下评论。

[## 通过我的推荐链接加入 Medium-Kate Marie Lewis

想了解更多关于数据科学的知识吗?今天就成为会员吧&不要错过凯特的帖子,直接交会员费…

medium.com](https://medium.com/@katemarielewis/membership)

如果您想了解更多关于我如何成为数据科学家的信息,请访问:

[## 我如何在 6 个月内从零编码技能成为数据科学家

我用来自学数据科学的 4 个工具没有花一美元

towardsdatascience.com](/how-i-went-from-zero-coding-skills-to-data-scientist-in-6-months-c2207b65f2f3) [## 让我获得第一份数据科学工作的面试策略

我是如何展示自己得到这份工作的

towardsdatascience.com](/interview-strategy-that-landed-me-my-first-data-science-job-bdd5e77bfb49) [## 愤怒退出癌症研究

为什么我从神经科学家变成了数据科学家

towardsdatascience.com](/rage-quitting-cancer-research-5e79cb04801)

CNN 和 RNN 的区别是什么?

原文:https://towardsdatascience.com/what-is-the-difference-between-cnn-and-rnn-719dba4fd5a5?source=collection_archive---------43-----------------------

卷积神经网络和递归神经网络是当今 ML 中常用的方法。然而,它们通常用于完全不同的用例。

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

作者图片

在机器学习中,每种类型的人工神经网络都是为某些任务量身定制的。本文将介绍两种类型的神经网络:卷积神经网络(CNN)和递归神经网络(RNN)。使用流行的 Youtube 视频和视觉辅助工具,我们将解释 CNN 和 RNN 之间的区别,以及它们如何用于计算机视觉和自然语言处理。

CNN 和 RNN 的区别是什么?

CNN 和 RNN 的主要区别在于处理时序信息或数据的能力,比如一个句子。此外,卷积神经网络和递归神经网络用于完全不同的目的,并且神经网络本身的结构存在差异以适应那些不同的使用情况。

CNN 在卷积层中使用滤波器来转换数据。然而,rnn 重用序列中其他数据点的激活函数来生成序列中的下一个输出。

虽然这是一个经常被问到的问题,但是一旦你看了这两个神经网络的结构并理解了它们的用途,CNN 和 RNN 之间的区别就变得很明显了。

首先,让我们看看 CNN 以及它们是如何被用来解读图像的。

什么是卷积神经网络?

卷积神经网络是在计算机视觉中用于识别图像中的对象和模式的最常见的神经网络类型之一。它们的定义特征之一是在卷积层中使用滤波器。

卷积层
CNN 有独特的层,称为卷积层,将它们与 rnn 和其他神经网络分开。

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

作者图片

在卷积层中,输入在被传递到下一层之前被转换。CNN 通过使用过滤器来转换数据。

卷积神经网络中的滤波器是什么?

CNN 中的过滤器只是一个随机数值矩阵,如下图所示。

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

作者图片

过滤器中的行数和列数可以变化,这取决于用例以及正在处理的数据。在一个卷积层中,有许多过滤器在图像中移动。这个过程被称为卷积。过滤器卷积图像的像素,在将数据传递到 CNN 的下一层之前改变它们的值。

过滤器是如何工作的?

为了理解过滤器如何转换数据,让我们看看如何训练 CNN 识别手写数字。下面是来自 MNIST 数据集的数字 7 的 28 x 28 像素图像的放大版本。

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

图像取自 MNIST 数据集

下面是相同的图像转换成它的像素值。

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

当滤波器在图像中卷积时,滤波器中的值矩阵与图像的像素值对齐,并获得这些值的点积

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

作者图片

过滤器移动或“卷积”通过每个 3×3 像素矩阵,直到所有像素都被覆盖。然后,每个计算的点积用作下一层的输入。

最初,过滤器中的值是随机的。因此,第一次通过或卷积作为一个训练阶段,最初的输出不是很有用。每次迭代后,CNN 使用损失函数自动调整这些值。随着训练的进行,CNN 不断调整过滤器。通过调整这些过滤器,它能够区分边缘,曲线,纹理,以及图像的更多模式和特征。

虽然这是一个惊人的壮举,但为了实现损失函数,CNN 需要以标记训练数据的形式给出正确输出的例子。

当迁移学习无法应用时,许多卷积神经网络需要过量的标记数据。

你还不明白 CNN 吗?下面是杰瑞米·霍华德在 fast.ai 上的一个精彩但冗长的视频讲座。视频详细说明了 CNN 的工作原理:

CNN 的不足之处

CNN 擅长解释视觉数据和没有顺序的数据。然而,它们不太擅长解释时间信息,如视频(本质上是一系列单独的图像)和文本块。

文本中的实体提取是序列中不同部分的数据如何相互影响的一个很好的例子。对于实体,句子中实体前后的单词对它们的分类有直接影响。为了处理时间或序列数据,如句子,我们必须使用算法,这些算法被设计为从序列中的过去数据和“未来数据”中学习。幸运的是,循环神经网络正是这样做的。

什么是递归神经网络?

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

递归神经网络结构—图片 via colah.github.io

递归神经网络是设计用于解释时间或顺序信息的网络。rnn 使用序列中的其他数据点进行更好的预测。它们通过接收输入并重用序列中前面或后面节点的激活来影响输出。如前所述,这在实体提取等任务中非常重要。以下面这段文字为例:

罗斯福总统是美国历史上最有影响力的总统之一。然而,曼哈顿的罗斯福街并不是以他的名字命名的。

在第一句话中,罗斯福应该被称为一个人实体。而在第二句中,它应该被标记为街道名称或位置。如果不考虑前面的单词“总统”和后面的单词“街道”,就不可能知道这些区别。

自动更正的 RNNs

为了更深入地了解 rnn 是如何工作的,让我们看看它们是如何用于自动更正的。基本上,自动更正系统将您键入的单词作为输入。使用该输入,系统预测拼写是正确的还是不正确的。如果这个单词与数据库中的任何单词都不匹配,或者不符合句子的上下文,系统就会预测正确的单词可能是什么。让我们想象一下这个过程如何与 RNN 一起工作:

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

作者图片

RNN 将接受两个输入源。第一个输入是您键入的字母。第二个输入将是与您之前键入的字母相对应的激活功能。假设您想输入“网络”,但却错误地输入了“networc”。系统接收前面字母“网络”和您输入的当前字母“c”的激活功能。然后它吐出“k”作为最后一个字母的正确输出。

这只是一个简单的例子,说明了 RNN 的拼写纠正系统是如何工作的。今天,数据科学家使用 rnn 做更多不可思议的事情。从生成文本和图像字幕到创作音乐和预测股票市场波动,rnn 有无穷无尽的潜在用例。

希望这篇关于 CNN 和 RNNs 的简介能帮助你理解这两种神经网络的区别。虽然处理时间或顺序数据的能力是主要区别之一,但网络本身的结构及其用例也有很大不同。

要获得更多机器学习指南、新闻和采访,请查看下面的相关文章,别忘了在 Medium 上关注我。

原创文章经许可转贴。

物体检测和图像分割有什么区别?

原文:https://towardsdatascience.com/what-is-the-difference-between-object-detection-and-image-segmentation-ee746a935cc1?source=collection_archive---------17-----------------------

以及何时使用哪个?

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

目标检测和图像分割是计算机视觉的两种方法。阿曼达·达尔比约恩在 Unsplash 上拍摄的照片

人工智能中的图像处理

人工智能对图像处理有不同的任务。在本文中,我将介绍对象检测和图像分割之间的区别。

在这两个任务中,我们都希望找到图像上感兴趣的某些项目的位置。例如,我们可以有一组安全摄像机图片,在每张图片上,我们想要识别图片中所有人的位置。

通常有两种方法可以用于此:对象检测和图像分割。

对象检测—预测边界框

当我们谈论物体检测时,我们通常谈论包围盒。这意味着我们的图像处理将识别照片中每个人周围的矩形。

边界框通常由左上角的位置(2 个坐标)以及宽度和高度(以像素为单位)来定义。

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

来自开放图像数据集的带注释的图像。一家人堆雪人 by mwvchamber 。由 2.0 许可在 CC 下使用的图像。

如何理解物体检测方法?

如果我们回到任务:识别图片上的所有人,就可以理解通过边界框进行对象检测的逻辑。

解决方案的第一直觉可以是将图像切割成小部分,并在每个子图像上应用图像分类,以表明该图像是否是人。对单幅图像和目标检测进行分类是一项更容易的任务,因此,他们采取了这种循序渐进的方法。

目前来说,YOLO 模型(你只看一次)是一个解决这个问题的伟大发明。YOLO 模型的开发人员已经建立了一个神经网络,它能够一次完成整个包围盒方法!

对象检测的当前最佳模型

  • YOLO
  • 更快的 RCNN

图像分割—预测遮罩

一步一步扫描图像的合理选择是远离绘制框,而是逐个像素地注释图像。

如果你这样做,你会有一个更详细的模型,这基本上是一个输入图像的转换。

如何理解图像分割方法?

这个想法很基本:即使在扫描产品上的条形码时,也有可能应用一种算法来转换输入(通过应用各种过滤器),以便除了条形码序列之外的所有信息在最终的图片中变得不可见。

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

左:https://commons . wikimedia . org/wiki/File:Image-segmentation-example . jpg。右:https://commons . wikimedia . org/wiki/File:Image-segmentation-example-segmented . png。这两个文件都可以在知识共享 CC0 1.0 通用公共领域专用下获得

这是在图像上定位条形码的基本方法,但类似于图像分割中发生的情况。

图像分割的返回格式称为遮罩:与原始图像大小相同的图像,但对于每个像素,它只具有一个布尔值,指示对象是否存在。

如果我们允许多个类别,它可以变得更复杂:例如,它可以将海滩景观分成三个类别:空气、海洋和沙滩。

当前图像分割的最佳模型

  • 屏蔽 RCNN
  • Unet
  • Segnet

简言之,这种比较

目标检测

  • 输入是一个矩阵(输入图像),每个像素有 3 个值(红色、绿色和蓝色),如果是黑色和白色,每个像素有 1 个值
  • 输出是由左上角和大小定义的边界框列表

图象分割法

  • 输入是一个矩阵(输入图像),每个像素有 3 个值(红色、绿色和蓝色),如果是黑色和白色,每个像素有 1 个值
  • 输出是一个矩阵(遮罩图像),每个像素有一个值,包含指定的类别

我希望这篇短文对你有用。感谢阅读!

总体和样本有什么区别?

原文:https://towardsdatascience.com/what-is-the-difference-between-population-and-sample-e13d17746b16?source=collection_archive---------14-----------------------

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

罗兰·德内斯拍摄的照片

介绍

人们经常无法正确区分总体和样本。然而,它在任何统计分析中都是必不可少的,从描述性统计开始,根据我们面对的是样本还是总体,它有不同的方差和标准差公式。

此外,统计学的一个分支叫做推断统计学通常被定义为从对人口的代表性样本的观察中得出关于人口的结论的科学。因此,正确区分这两个概念至关重要。那么,总体和样本的区别到底是什么?

样本与总体

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

总体与样本。资料来源:towardsdatascience.com

群体包括来自特定群体的所有成员,所有感兴趣的可能结果或测量。确切的人数将取决于研究的范围。例如,假设您想知道在比利时数据科学家的具体案例中,工作表现和每周在家工作的时间是否有关联。在这种情况下,人口可能是比利时的数据科学家。但是,如果研究的范围更窄(例如,研究的重点是居住在离工作地点至少 30 公里以外的讲法语的比利时数据科学家),那么人群将更具体,只包括符合标准的员工。关键是人口应该只包括那些结果适用的人。

样本由从总体中抽取的一些观察值组成,因此是总体的一部分或子集。样本是实际参与研究的一组元素。

成员和元素是在广义上定义的。可能是人类。例如,人口可能是"所有居住在比利时的人",样本可能是"一些居住在比利时的人"。也可以是其他任何东西。假设你正在测试一种新肥料对农作物产量的影响。所有的庄稼地代表您的人口,而您测试的 10 块庄稼地对应于您的样本。因为样本是总体的子集,所以样本总是小于总体。 1 注意,人口不一定要多。可能的情况是,你研究的人群如此狭窄(例如,你大学的一年级男学士学生,他们在 6 月份通过了统计学考试,他们的父母已经离婚超过 5 年),人群的规模实际上相当小。

为什么是样本?

正如本文开头所提到的,统计学的一个主要关注点是能够从代表性样本中得出关于总体的结论。为什么使用人口样本而不是直接使用人口样本?一般来说,对整个研究人群进行测量几乎总是不可能的,因为:

  • 人口太多了。例如:孕妇人口。如果我们想对世界上所有的孕妇进行测量,很可能要么需要太长时间,要么花费太多
  • 人口是虚拟的。在这种情况下,“虚拟”人口被理解为“假设的”人口:它的规模是无限的。在一项实验研究中,我们关注的是接受新疗法治疗的前列腺癌患者。我们不知道有多少人将接受治疗,所以人口是变化的,在目前是无限的和不可计数的,因此是虚拟的
  • 这些人不容易接触到。例如:比利时无家可归者的人口

由于这些原因,测量是在群体的一个观察子群上进行的,即在我们的群体样本上进行的。然后,使用这些度量得出关于感兴趣人群的结论。使用适当的方法和足够大的样本量,从样本中获得的结果通常几乎与从总体中获得的结果一样准确。

代表性样品

当然,样本的选择必须能够代表被研究的人群。如果参与者在自愿的基础上被纳入研究,那么结果样本可能无法代表总体,这是一个严重的问题。可能的情况是,志愿者在感兴趣的参数 2 方面不同,导致选择偏差。例如,当研究人员通过互联网收集公民的工资时,会出现另一种选择偏差。可能的情况是,可以上网的人和不能上网的人的工资不同。

选择研究人群代表性样本的金标准是选择一个随机样本。随机样本是从总体中随机选择的样本,以便总体中的每个成员都有均等的机会被选中。随机样本通常是无偏样本,即其随机性不存在疑问的样本。

在某些情况下(例如,在医学中),获取群体的随机样本是复杂的,甚至是不可能的。在这种情况下,重要的是要考虑所得样品的代表性。

成对样品

最后但并非最不重要的是,成对样本是这样的样本,其中各组(通常是成对的)实验单元通过相同的实验条件联系在一起。例如,可以在服用安眠药之前测量 20 个人的睡眠时间(形成样本 A),然后在这些人服用安眠药之后对他们重复测量(形成样本 B)。

每个人的两个测量值(服用安眠药前后的睡眠时间)和两个样本当然是相关的。存在说明样本之间关系的统计工具,在这种情况下应该优先使用。

结论

总的来说,样本是参与研究的个人群体,而总体是研究结果将适用的更广泛的群体。对整个人口的测量过于复杂或不可能,因此使用代表性样本来得出关于人口的结论。基于随机选择的样本通常是最具代表性的样本。

感谢阅读。我希望这篇文章能帮助你理解总体和样本之间的区别。

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

相关文章:

原载于 2020 年 1 月 18 日 https://statsandr.com**的

信息论中的“信息”是什么?

原文:https://towardsdatascience.com/what-is-the-information-in-information-theory-d916250e4899?source=collection_archive---------15-----------------------

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

马库斯·斯皮斯克在 Unsplash 上的照片

打破信息的基本概念。

你可能听说过或读过一个例子,信息论与机器学习算法结合使用,要么解释它们,要么证明算法优化了正确的事情等等。

在这篇文章中,我想尝试用简单的语言来解释这一点:从基本概率出发的信息是什么?

信息论中的一个基本术语是。这可能是一个误导性的术语,因为熵是和混乱联系在一起的:主要是无序。在信息论中,熵告诉我们一个观察到的事件 x 中包含的信息量。一个事件当然有它的概率 p(x)

那么,我们所说的信息是什么意思呢?我发现直观地理解这个术语不是很简单。“信息”的数量实际上与存储有关。信息以位的形式存储。在信息论中,我们考虑用于将一些事件从一端传递到另一端的有噪声的通信信道。噪音现在并不重要。这些事件需要以某种方式编码,更具体地说,它们需要编码成比特(正如计算机科学理论家所看到的)。理想情况下,我们不希望使用太多的比特来通过通信信道传递这些事件,因为比特耗费能量。我们希望将大部分比特花在罕见事件上,因为它们通过信道发送的频率较低,因此成本较低。

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

阿德里安·达斯卡尔Unsplash 上拍摄的照片

什么是罕见事件?嗯,当然是小概率的一个 p(x) 。这已经暗示了一些东西,我们希望一个事件的信息对于概率较低的事件来说更大。所以这个函数,我们姑且称之为 h(x),应该会返回事件 x 所包含的信息量,低概率事件高,高概率事件低。现在,让我们来看看下面的h(x)

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

这似乎是正确的做法:概率越低,信息越高。它还有另一个很好的特性:如果我们获取同时发生的两个独立事件的信息,我们会得到以下结果:

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

这源于对数的简单操作,因为在 xy 是独立的情况下(可能为了练习而检查它),以下成立:

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

这是 h 函数的一个很好的特性,它意味着我们可以把独立事件的信息加起来,但也意味着我们不能把相关事件的信息加起来。对数本身是机器学习、数学、物理中经常出现的函数。简而言之,它在计算上如此之好是因为它允许我们将乘积写成和,导出函数的良好界限等等。

现在,如果我们想要测量随机变量的信息,我们需要查看其所有实现(事件)的预期信息。是的,我们对 h(x) 取期望值,如果我们假设处理的是一个离散的随机变量,它看起来像下面这样:

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

而这正是熵的定义!让我们假设 p(x) 是一个伯努利分布,这意味着有两个事件( xy )可能发生,它们有各自的概率,那么我们可以写为 p(x) =1-p(y) ,因为事件空间上的概率需要总和为 1。在这种情况下,我们可以画出熵作为**p(x)**的函数,然后我们会注意到一些东西:

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

我们注意到,当 p(x) 取值为 0.5 时,它最大。这意味着所有事件的概率相等,因此在伯努利分布的情况下携带相同数量的信息。反过来,让我们说,我们有一些其他的系统,其中我们看到两个随机变量 XY 以及它们各自的分布 pq 。我们可以看看他们的**互信息。**这是机器学习中经常使用的一个量,尤其是在大肆宣传的解纠缠领域,我们希望学习包含独立因素的潜在表示(即最小化独立因素之间的互信息)。无论如何,它归结为下面的等式:

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

让我们思考一下这个问题。我们知道,在随机变量 xy 相互独立的情况下,我们可以写出联合分布 **p(x,y)=p(x)p(y)。**在它们不独立的情况下,我们必须服从贝叶斯法则, p(x,y)=p(x)p(y|x) 。如果独立性成立,对数中的比率变为 1,因此表达式等于 0,0 互信息。这是有意义的,因为通过独立性,我们知道一个事件的发生不会影响另一个事件的发生。在另一种情况下,我们会得到非零的互信息。

信息论对于机器学习实践者来说是一个非常有用的概念,因为它允许他们从信息论的角度来看待学习算法。信息论的更多乐趣即将到来!敬请关注。

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

马库斯·斯皮斯克在 Unsplash 上拍摄的照片

K 近邻是什么?

原文:https://towardsdatascience.com/what-is-the-k-nearest-neighbor-862a6a30e5dc?source=collection_archive---------38-----------------------

Python 示例简介

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

乔恩·泰森在 Unsplash 上的照片

k-最近邻算法

k-最近邻(KNN)是一种容易理解,但基本的和广泛适用的监督机器学习技术。要理解 KNN 背后的直觉,看看下面的散点图。该图显示了两个任意维度 x 和 y 之间的关系。蓝色点代表 A 组的成员,橙色点代表 b 组的成员。这将代表 KNN 的培训数据。

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

现在假设一个新的、未分类的数据点出现并绘制到图表上。KNN 将基于 K 个最近点(或最近邻居)对其进行分类,采取多数投票,并据此进行分类。注意 K 是事先设定好的,代表投票要拿多少分。

例如,如果 K= 1,KNN 将查看最近的数据点,并将新的数据点归类为相同的类别。在下面的例子中,“X”代表分类的新数据点。因为 X 最接近组 B 中的已知数据点,所以“X”也将被分类为组 B。

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

现在假设 K = 3。KNN 将查看 3 个最近的数据点,并投票进行分类。如果两个或两个以上的最近邻属于一个组,则新的数据点按多数分类。

在下面的例子中,新的数据点“X”移动。在最近的 3 个点中,2 个属于 A 组,1 个属于 b 组。因为大多数点属于 A 组,所以新的数据点“X”被分类为 A 组。

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

如果出现平局(这可能发生在 K=2 的情况下),则从 K-1 个最近的邻居中取得多数。

KNN 的优点

  • 非参数: KNN 对基础数据不做任何假设。因此,它可以应用于广泛的问题,而不需要担心数据的属性。
  • **懒惰学习:**算法没有训练阶段。相反,它会在分类时进行计算。这使得 KNN 成为一种非常动态的机器学习技术,允许添加额外的数据,而无需重新训练它。
  • **高度非线性数据:**因为没有对数据进行假设,也没有计算正式模型,KNN 可以很好地预测高度非线性数据。
  • **多类问题:**不像其他一些算法需要对涉及 2 个以上类的分类进行调整,KNN 可以推广到任意多的类。
  • **直观:**即使对于非技术观众来说,该算法也相对容易理解和解释。

KNN 的缺点

  • **内存密集型:**由于一个新的数据点必须与训练数据中的每隔一个数据点进行比较,KNN 经常使用大量的处理能力来进行分类,尤其是在较大的数据集上。
  • **维度的诅咒:**像其他使用距离作为度量的算法一样,KNN 很难预测具有大量输入变量的数据。
  • 对异常值敏感:异常值给 KNN 带来了一个根本性的问题。通过简单地选择最近的邻居,不管它们有多远,离群值都可能扭曲它的预测。
  • 缺失数据: KNN 没有处理缺失数据的方法。如果缺少任何东西,就不能准确预测整个数据点。

选择最佳 K

因为 K 是唯一要调整的参数,所以应该非常小心地选择一个好的值。一般来说,有两个基本的建议:一个估计和肘方法。

作为一个很好的参考点,有时建议将观察次数的平方根作为 K。例如,如果将 100 个观测值输入 KNN,K = 10 将作为快速估计。请注意,这更多的是一个经验法则,而不是一个严格的方法。

然而,更经验性的方法是肘法。基于边际收益递减的原则,这个想法是在测试数据上运行 KNN,逐步增加 K 值,并查看它如何影响模型性能。

如果直观地完成,那么在图的“肘”处(用更专业的术语来说是拐点),K 的优化值表示在成本超过收益之前返回最佳性能的点处。下图中的红圈展示了这一原理。

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

然而,真实世界的数据并不总是那么清晰。如果数据变得更嘈杂,在局部最小值处选择最小的可能 K 是可行的选择。

Python 中的演示

与许多其他机器学习算法一样,Scikit-Learn 模块提供了一个很好的 KNN 实现。

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np

除了 KNN 模块之外,还导入了 StandardScaler 来标准化数据,并导入了 pandas 和 numpy 来处理数据。

# Store the data in a dictionary
data = {
    "X1": [1,1,3,4,5,2,0,4,0.5,3.3,1.1,4.7,0.2,2,4.5,3.3,2.5],
    "X2": [1,2,4,4,6,1,1,5,0.5,4.2,1.4,5.2,2,0.03,5.1,4.8,2.5],
    "Member": [A,A,B,B,B,A,A,B,A,B,A,B,A,A,B,B,A]
}# Convert the data into a dataframe
df = pd.DataFrame.from_dict(data)

接下来,数据集被生成并放入字典中。这组数字实际上是用来生成本文开头的例子的。为了方便起见,字典然后被转换成数据帧。

# Separate the the independent and dependent variables
features = df_sample.filter(["X1", "X2"])
category = df_sample["Member"]scaler = StandardScaler()
scaler.fit(features)
scaled_features = scaler.transform(features)

因为 KNN 使用距离作为度量单位,并且因为输入不一定使用相同的比例,所以调用标准缩放器来归一化数值数据。这是防止数据中单位偏差的重要步骤。

k = 5knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(scaled_features, category)

实际拟合 KNN 的最后一步只是调用函数,并将缩放后的要素和类别用作参数。请注意参数 n_neighbors,它表示要使用多少个 K 近邻。

然而,如果应该使用弯头方法,则需要稍微不同的方法。

# Separate the data into training and test data sets
X_train, X_test, Y_train, Y_test = train_test_split(scaled_features, color_category, test_size=0.30)# Import Matplotlib for visualization
import matplotlib.pyplot as plt# Create an empty list to catch the error rate
error_rate = []# Iterate through K = 1-20
for i in range(1,20):

    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(X_train,Y_train)
    pred_i = knn.predict(X_test)
    error_rate.append(np.mean(pred_i != Y_test))# plot the error rate 
plt.figure(figsize=(10,6))
plt.plot(range(1,20),error_rate,color='blue', linestyle='dashed', marker='o', markerfacecolor='red', markersize=10)
plt.title('Error Rate vs. K Value')
plt.xlabel('K')
plt.ylabel('Error Rate')

首先,数据被分成训练和测试子集(这应该是标准的过程)。接下来,针对 K = 1、K = 2 等等的测试数据对模型进行训练和评估,直到 K = 20。最后,结果会以图表的形式返回。

结论

KNN 是一种简单但强大的监督机器学习技术。其稳健的方法允许其应用于各种各样的问题。此外,单个参数 K 使得参数调整相对容易。Python 中一个简单易用的实现使得使用 KNN 只需几行代码。

机器是如何处理你的数据的?你怎么能相信它?

原文:https://towardsdatascience.com/what-is-the-machine-doing-with-your-data-how-can-you-trust-it-32a92fc79108?source=collection_archive---------67-----------------------

你每天都要和很多机器智能打交道。你知道他们实际上在用你的数据做什么吗?他们是如何做出预测的?你如何信任他们?

作为消费者,我们已经习惯于接受服务,而不是质疑这些服务的工作方式,并信任这些服务,即使它们是巨大的黑匣子。然而,黑盒是棘手的,因为根据定义,它们是秘密的,而不仅仅是私人的。在 ML 和开源的十字路口建立的东西可以增加你对机器学习数据使用的信任。

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

图片由本·怀特

我们每天都在生成和消耗越来越多的数据。我们的处理能力也在同步发展,新的机器学习技术可以以新的方式取悦用户,无论是更好的推荐引擎,更优化的购物体验,还是更智能(更便宜!)定价。

随着性能的进一步发展,我们也必须要求机器学习模型的内部工作有更多的发展。

机器学习的民主化有两个有趣的方面。一个是通过开源增加代码库的可见性,另一个是通过透明性和可解释性。可以说,这两者都是必要的和重要的,但是让我们看看实践中的那些以及它们有什么含义。

ML 中的透明性和可解释性

机器学习并不新鲜,但即使作为软件开发人员或数据分析师,它也是一个高门槛领域。当用大量原始数据训练模型时,这种数据的使用也可能引发许多围绕固有偏见和成见的不信任问题,即使这种意图从未存在过(只要看看我们如何与系统性种族主义作斗争)。

可解释性是理解哪些数据点是机器做出预测的因素,以及如何发现数据集中任何过度或不足表示的关键。一个领域越复杂,理解基础知识就越重要,并且能够追溯到前面的结果。

例如, EazyML 就是这样通过让机器“解释给你听”来解决这个方程的。

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

EazyML 解释了工作满意度的机器学习预测模型中的局部预测。

开源是基础资源

除了作为一个蓬勃发展的市场和未来软件的基础构件,开源机器学习库也已经成为值得信赖的机器学习和人工智能软件的基石。

商业开源中有很多结构,比如 MorphL 已经公开发布了其“社区版“电商 AI 引擎”。然而,基本原则是,通过将代码发布到公共领域,您可以在看到软件的内部工作时获得额外的安慰,并且还可以解决供应商锁定的问题,任何人都可以派生软件并在其上进行构建。

当然,除了透明性之外,还有无数其他的好处,比如开放的协作仅仅是为了生产更好的软件和更多经得起未来考验的技术模型。

在我们在 Prifina 围绕用户持有和用户控制的数据所做的事情中,以及用于生成合成数据的开源工具的出现中,有许多与 ML/AI 相关的有趣切线。他们都有能力尊重用户的数据,并在构建最复杂的模型和结果来为个人创造价值时将数据放在一边。

在未来,我们将能够只使用合成数据来构建模型,这些数据是在用户端创建的,允许直接的一对一交互。

我们将会使用越来越多的数据丰富的应用。我们需要能够信任他们。我们需要以值得的方式建设它们。

大多数 ML 项目失败的主要原因是什么?

原文:https://towardsdatascience.com/what-is-the-main-reason-most-ml-projects-fail-515d409a161f?source=collection_archive---------13-----------------------

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

来源:https://www.4freephotos.com/Castle-of-cards-perspective-1517.html

你可能把曼梯·里当成了替罪羊…

是的,ML 可能很难。是的,大多数公司仍然不知道应用 ML 和 ML 研究是两个完全不同的学科。是的,从实验到生产仍然存在技术摩擦。是的,管理大规模数据可能会很痛苦。是的……许多 ML 项目失败是因为上述一个或多个原因。

但是当你开始从根本上解决真正的问题时,我发现在大多数情况下,这都归结于决策的分形本质:

业务目标定义不明确。

…最终映射到易变的产品策略、技术问题定义、技术选择和实现。

好吧……但是机器学习有什么特别的?非 ML 软件项目不都是这样吗?

每一天!

但是,我在双方都工作过,并为试图从非 ML 转向 ML 的公司提供过建议,我逐渐意识到,在业务层面为糟糕的定义付出的代价在 ML 方面要高得多。根据我的经验,两个因素是最大的贡献者:

1)迭代成本

因为传统的的透明的、可解释的、基于规则的本质,非 ML 软件,变化的需求和移动的目标不一定会阻止你构建、发布和维护一些功能性的东西。您可以相对快速地修复、添加和删除,而且非常精细。变更的生命周期可以是几小时/几天。在 Applied ML-land 中,即使模型的预期输出行为、准确性或性能发生很小的变化,也会迫使您从头开始重新设计数据表示、模型架构、重建训练集、重新训练、重新部署,同时无法保证新目标能够实现。一个*(显然)小的、增量的规范的生命周期可能会变得复杂、耗时且有风险,很容易让你处于一两个月的试验模式。那些由于模糊的目标而在不断变化的需求下“侥幸”构建和发布软件的公司(很少被认为是失败……),将最终陷入慢性 实验模式(但这是…)在尝试构建基于 ML 的解决方案时。*

2)准备就绪的定义

对于非 ML 软件,这通常归结为一组明确的确定性行为和相关的性能需求。在应用 ML 中,就绪度由一个问题决定: “多好才算够好?” 因为从‘这不行’‘这行得通’的旅程是一个连续的函数(而且是非线性的,受收益递减规律支配!)如此苛求确定性的行为对于‘这行得通’来说是一场败仗这个被高度忽视的问题不仅决定了你应该在一个给定的设计上投资多少,也影响了设计选择本身,只有在你的 ML 魔法之上的产品层上有了“这行得通”的明确定义,才能得出这个问题的答案。“这行得通”应该与一个具体的、切实的价值点联系起来,基于一个预期的业务成果,你要努力发掘、实现和衡量这个价值点。当这些映射模糊或不明确时,很可能甚至没有人问过这个问题,而且我大多数时候看到的是,ML 项目将最终陷入某种 准确性鼠轮 中,没有人做出“好了,这足够好了”调用,同时产生严重的所有权问题。

这是不是意味着你应该避免迭代你的 ML 模型,或者为“这行得通”设置一个低门槛?绝对不行!这只是意味着在应用 ML-land 中:

1。枢轴可能非常昂贵。太多,太频繁,你就出局了。

2.游戏名字叫 “多好才算够好?”,为了能够发挥它,你需要不断了解你的业务环境。 只有这样你才能找到答案。

数据科学从业者、业务和产品决策者以及他们之间的所有人:在构建 ML 解决方案时,定期缩小范围并提出问题是你们联合的责任:

“我们在这里试图解决的业务问题是什么?”

你会惊讶地发现,有多少公司,无论是初创公司还是老牌公司,在进入 Tensorflow 之前,都没有深入研究这个基本问题…

如果你是一名数据科学从业者,请暂时离开这个新的 Python 库,开始熟悉一些概念,如产品市场适合度、价值主张、MVP、客户发现、KPI和其他相关业务指标。相信我,它会给你的日常工作带来巨大的变化。如果你是一个商业决策者或者是一个从事 ML 工作的中间人,提醒你自己和其他人保持你的业务 映射 的一致和更新,当你决定要构建什么、如何构建以及是否应该首先构建它的时候…**

你可能会发现自己一直在不知不觉中把曼梯·里当作替罪羊…

您可能会发现有一种更简单、数据更少、风险更低的方法来解决您的 ML 解决方案…

你可能会发现你根本不需要 ML:|

如果您已经做到了这一步,请随意分享您自己构建基于 ML 的产品的经验。

使用机器学习分析增加研究生院录取机会

原文:https://towardsdatascience.com/what-is-the-most-important-factor-to-graduate-admission-e75de7a538d6?source=collection_archive---------28-----------------------

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

查尔斯·德洛耶在 Unsplash 上的照片

在本文中,我们将使用各种机器学习方法对最近的研究生入学数据进行分析,以分析 GRE 分数和 CGPA 等因素的最佳组合,从而提高研究生院的录取机会。

主要见解

  • CGPA 是目前研究生招生中最重要的因素
  • GRE 多加一分,研究生录取几率增加 0.14%左右。
  • 托福多一分,研究生录取几率增加 0.28%左右。
  • 只有在大学评级较低的情况下,进行研究才有一定的益处。
  • 高托福成绩无法抵消中/低 GRE 成绩;只有当 GRE 分数足够高时,托福考试才开始对录取机会产生显著的统计影响。

本文将深入探讨这些结果是如何使用以下机器学习技术实现的:

  • 创建一个逻辑回归模型来预测录取的机会,分析和可视化的系数。
  • 使用排列重要性和决策树回归模型来寻找特征重要性。
  • 单变量和轮廓部分相关图(PDP ),以了解单个或多个变量如何影响录取机会。

数据

数据可以在 Kaggle 这里找到。

数据头:

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

GRE 成绩、托福成绩、大学评级、SOP、LOR、CGPA、研究是预测录取机会的特征。

我们可以用熊猫的内置。描述():

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

逻辑回归模型和系数分析

首先,使用 sklearn 方便的 train_test_split 函数,我们将数据分成训练集和测试集。

import sklearn
from sklearn.model_selection import train_test_split
X = data.drop('Chance of Admit ',axis=1)
y = data['Chance of Admit ']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)

在 sklearn 中训练逻辑回归模型就像两行代码一样简单:

from sklearn.linear_model import LinearRegression
lin = LinearRegression().fit(X_train,y_train)
print((y_test - lin.predict(X_test)).apply(abs).mean())

输出:

0.04337302752734804

逻辑回归的平均误差(MAE)约为 0.045,或预测研究生入学机会的 4.5%(满分为 100%)。

现在,让我们从模型中获取系数:

coef = pd.DataFrame({'column':X_test.columns,'coefficient':lin.coef_*100}).sort_values('coefficient').reset_index()
coef.drop('index',axis=1)

输出:

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

最重要的是,我们可以得出以下结论:

  • GRE 多加一分,研究生录取几率增加 0.14%左右。
  • 托福考试增加一分,研究生入学的机会就会增加大约 0.28%
  • 大学 GPA 多一分,研究生录取几率增加 12.34%左右。
  • 进行研究增加了大约 2.97%的研究生入学机会。

请记住,这些都在 4%的误差范围内。

import seaborn as sns
import matplotlib.pyplot as plt
plt.style.use('ggplot')
fig = plt.figure(figsize = (15,5))
plt.xticks(rotation=45)
colors = ['#adebad','#adebad','#adebad','#adebad','#99e699','#85e085','#70db70']
sns.barplot(coef['column'],coef['coefficient'],palette = colors)
plt.ylabel("Additional % Admission")
plt.xlabel('Factor')
plt.show()

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

重要的是要认识到 GRE 和 TOEFL 有许多可能的分数,所以它们的系数低是有道理的。

一大要点是:大学的平均绩点对于研究生入学是必不可少的。每增加一分,就多了 12.84%的几率。

排列重要性

置换重要性是一种评估特征重要性的方法,通过随机洗牌并观察准确性的相应降低。准确度下降最大的列应该比那些重排没有降低准确度的列更重要。

import eli5
from eli5.sklearn import PermutationImportance
perm = PermutationImportance(lin, random_state=1).fit(X_test, y_test)
eli5.show_weights(perm, feature_names = X_test.columns.tolist())

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

和以前一样,CGPA 很重要,其次是 GRE 和托福成绩。

SHAP 价值观

决策树回归器和 SHAP 值

SHAP 值不支持逻辑回归,因此我们将选择决策树回归器,并收集 SHAP 值。

import shap
from sklearn.tree import DecisionTreeRegressor
dtr = DecisionTreeRegressor().fit(X_train,y_train)
explainer = shap.TreeExplainer(dtr)
shap_values = explainer.shap_values(X_test)

SHAP 特征重要性

SHAP 是评估特征重要性的另一种方法。SHAP 不像逻辑回归系数那样考虑规模。

shap.summary_plot(shap_values, X_test, plot_type="bar")

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

我们可以得出一些结论:

  • 和往常一样,CGPA 是目前最重要的特色
  • GRE 和托福成绩很重要
  • 大学的评级没有 GRE 分数,尤其是 CGPA 的影响大。这意味着无论大学排名如何,你的 CGPA 和 GRE 分数低,都不会走得很远。
  • 研究好像不是很重要。

SHAP 力图

SHAP 力图让我们看到为什么一个特定的例子取得了他们所做的成绩。举个例子,

i = 0 # or any other index for a different force plot
shap_values = explainer.shap_values(X_train.iloc[i])
shap.force_plot(explainer.expected_value, shap_values, X_test.iloc[i])

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

在这个例子中,最终的录取机会是 0.62。红色的因素解释了是什么推动了机会的增加,蓝色的因素解释了是什么推动了机会的减少。长度代表了它的力量有多大。

在这种特殊情况下,相当高的托福分数和 SOP 推动了分数的上升,但低 CGPA 是推动分数下降的一个巨大因素。

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

在这个例子中,最后的录取机会是 94%。高 CGPA 显著提高了它。

再画几个 SHAP 力图,就可以知道哪些因素一起使用时可以决定最终的机会:

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

PDP 图

PDP 图或部分相关性图显示了单个特征如何影响目标变量。

以下代码生成每列的 PDP 图:

from pdpbox import pdp, info_plots
import matplotlib.pyplot as plt
base_features = data.columns.values.tolist()
base_features.remove('Chance of Admit ')
for feat_name in base_features:
    pdp_dist = pdp.pdp_isolate(model=dtr, dataset=X_test, model_features=base_features, feature=feat_name)
    pdp.pdp_plot(pdp_dist, feat_name)
    plt.show()

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

这个部分相关图表明,最佳 GRE 分数将在 320 分的峰值附近。然而,没有太多关于 GRE 高端的数据,但是这些数据表明 GRE 高实际上可能会降低机会。对此的一个可能的解释是,花在 GRE 学习上的时间可能会花在其他更重要的事情上(比如 CGPA)。此外,请注意较大的误差范围。

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

托福成绩的 PDP 似乎建议最好的分数在 109 到 114 之间。再次注意大的误差线。粗线只是平均值,在这种情况下,误差太大,数据太少,无法做出可信的判断。

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

这个 PDP 很有意思——似乎越是名校,录取几率越高。这可能与数据偏差有关,但一个可能的解释是,申请高评级大学的研究生本身就有更强的资质。

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

CGPA 的 PDP 最为突出,因为它的误差线非常小。有一个明显的趋势是,较高的 CGPA 与较高的录取机会相关。

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

如前所述,一般来说,进行研究比不进行研究似乎没有什么增加。我们将通过多维 PDP 图对此主题进行更深入的研究。

PDP 轮廓/多维 PDP 图

PDP 等高线/多维 PDP 图是一种特殊的宝石——它们显示了两个变量之间的相互作用(因此,它们也被称为 PDP 相互作用图)如何导致一定的准入机会。

以下代码生成大学分数与所有要素的等值线图。

for column in X_test.columns.drop('University Rating'):
    features = ['University Rating',column]
    inter1  =  pdp.pdp_interact(model=dtr, dataset=X_test, model_features=base_features,features=features)
    pdp.pdp_interact_plot(pdp_interact_out=inter1, feature_names=features, plot_type='contour')
    plt.show()

大学分数对比所有特征

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

在等高线图中,黄色区域越多,被录取的几率越高。低 GRE 分数对几乎所有的大学评级都不利。正如之前在单变量 PDP 中看到的,GRE 分数 320 分左右的范围似乎是“黄金区域”,被评为 5 分的大学接受分数在该分数左右的人最多。

我们应该怀疑缺乏数据——这个数据集的数据并不丰富,因为我们发现,随着 GRE 分数的增加(在某一点之后),录取的机会会减少,这是没有意义的。

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

有了 SOP,很明显,拥有最高 SOP 分数的最高大学评级会产生最高的录取率。

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

另一个重复的结果是——无论大学排名如何,CGPA 都非常重要。

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

唉,我们关于开展研究的问题的答案是:等高线的倾斜性质表明,对于排名较低的大学,开展研究是有帮助的——它将 68%的百分比提高到 71%左右。然而,对于更高等级的大学,在执行研究方面真的没有太大的区别。

GRE 成绩对比托福成绩

这里有个有趣的问题 GRE 和托福成绩是如何相互影响的?GRE 成绩好是弥补托福成绩差,还是相反?

features = ['GRE Score','TOEFL Score']
inter1  =  pdp.pdp_interact(model=dtr, dataset=X_test, model_features=base_features, 
                            features=features)pdp.pdp_interact_plot(pdp_interact_out=inter1, feature_names=features, plot_type='contour')
plt.show()

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

看起来,低 GRE 分数的托福非常依赖 GRE,但随着 GRE 分数的提高,托福分数在录取机会中的作用越来越大。

GRE 分数与 CGPA

features = ['GRE Score','CGPA']
inter1  =  pdp.pdp_interact(model=dtr, dataset=X_test, model_features=base_features, 
                            features=features)pdp.pdp_interact_plot(pdp_interact_out=inter1, feature_names=features, plot_type='contour')
plt.show()

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

正如我们已经多次看到的那样,GRE 分数对低 CGPA 没有什么帮助。

使用代码和更多的实验来发现其他特性之间的关系;只需用所需的功能替换“功能”列表。

感谢阅读!

如果你喜欢,请随时查看我的其他帖子。

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

瓦西里·科洛达在 Unsplash 上的照片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值