对话式代理如何回答问题?
自然语言处理、知识图表和智能的三大支柱
Jibo,Echo/Alexa,Google Home
智力的三大支柱
对亚马逊来说,其语音代理 Alexa 受到的欢迎是一个巨大的惊喜。苹果的 Siri 已经把语音输入放到了智能手机上。但是现在有了一种新的设备,你可以隔着厨房对着它大喊大叫来设置定时器,播放音乐,或者在网上查找事实。这种文化以雪崩般的笑话和迷因接纳了 Alexa。谷歌很快推出了自己的智能音箱 Google Home。初创公司 Jibo 通过自己的人工智能技术和第三方数据源的整合提供了类似的技能,但包装了一个有趣的角色,具有独特的旋转身体形式。
这些对话代理来自数百万美元的投资和数百名学术界和工业界最聪明的研究人员和开发人员的劳动。它们代表了人类在努力创造人造人以增强和扩大我们的智力方面的科学和工程成就的顶峰。这篇文章解释了这些设备如何解释问题和访问大量的知识来源。然而,知识只是智力的一个组成部分。因此,虽然对话式人工智能代理在某些方面非常聪明,但在其他方面它们仍然非常愚蠢。
我们可以问,“谁赢得了 1934 年的世界大赛?在 1934 年的世界职业棒球大赛中,圣路易红雀队以 4 比 3 击败了底特律老虎队。如果你足够幸运,住在图书馆附近,你会花半个小时去那里找一本包含这个事实的参考书。如果图书馆开放的话。无论从哪方面来看,这都是非凡的、明智的行为,而且非常有用。
然而,智力不是单一的东西。一方面,我们认识到人们有不同的智力,语言的,视觉空间的,音乐的,情感的,社会的。但在认知科学和人工智能领域,智能以不同的方式分解。
我们可以称之为智力的三大支柱。
智力的三大支柱
- 知识泛指事实、数据、技能、程序和信念,它们以这样的方式组织起来,在需要时可以被查找和访问。人工智能和认知科学的一个主要研究领域叫做知识表示。这是关于计算机数据结构中知识的组织和表达,以及对它们起作用的计算操作。虽然我们通俗地根据真假来区分知识和信念,但在计算智能领域,正确和不正确的断言都被视为同一标题下的“知识”支持和反对的证据、置信度以及与外部世界的基础事实的关系都被认为是附加到知识表示中的附加属性。
- 模式匹配是对特定线索和数据实例进行归纳。当我们考虑视觉场景或口语时,模式匹配的重要性是最明显的。在像素的详细信号级别,我们的眼睛永远不会两次看到完全相同的场景。总有一些东西是不一样的,也许是灯光,视角,我们眼睛的焦点。同样,在声音波形层面,我们永远不会听到完全相同的音频信号两次。即使我们一遍又一遍地播放一段录音,也会有一些东西发生变化,比如我们的头相对于扬声器的位置,远处微弱的汽车喇叭声,枕头的摆放都会稍微改变房间的音响效果。我们的大脑被设计成分离不相关的差异并提取共性,因此我们实际上可以在不同的时间识别相同的视觉场景或口语句子——就物体和单词而言。这个原则也延伸到更抽象的概念和想法。即使不同的音乐历史学家用不同的语言表达,我们也能识别出同样的列举出的关于为什么甲壳虫乐队是历史上最伟大的乐队的论点。
- 推理是获取一些明确陈述的断言和知识,并推导出新的断言的能力。逻辑推理和演绎的共同概念是推理的重要方面。但是概念更广。推理还延伸到通过应用不同的工作流程步骤来探索替代结果,例如,考虑最有效的运动序列来卸载洗碗机。人类推理的非凡之处在于,它会在需要的时候自动发挥作用。想想看:“一个装满牛奶的杯子被打翻了,洒在了地板上。”所以,玻璃里全是锯屑吗?不要!当然不是。我刚说是满满一杯牛奶。如果没有人提出,你甚至不会考虑那个无关紧要的锯屑提议,但是当它被提出时,答案立刻浮现在脑海中——不!锯屑一点也不像牛奶。
人工智能研究的思路往往专注于三大支柱中的一个或另一个,有时还会在它们之间架起桥梁。最近,最引人注目的突破发生在模式识别领域。深度学习是一种所谓的人工神经网络技术,它显著地变革了计算机视觉、语音识别和自然语言处理领域。此外,人工神经网络方法通过带来“软”或“模糊”表示来影响知识支柱,这是通过跨特征属性向量分布数值来实现的。
然而,人工智能还不能在一个总体的认知架构下统一三大智能支柱。根据需要,人类的大脑毫不费力地调用每一个智力支柱,并与其他支柱相协调。当我说,“满满一杯牛奶洒了”,你的大脑会自动将这个单词序列与知识联系起来——也许是一杯牛奶的视觉图像。推理步骤以心理模拟玻璃杯倾倒的形式触发,因此其中包含的液体流过边缘。在你自己的推理过程中,模式匹配的工具和知识都有所贡献。你知道牛奶和奶油是类似的东西,因此它们以同样的方式溢出。相比之下,锯屑和糖不是液体,而是颗粒性质相似;当倾倒时,它们以不同的方式流动和降落,彼此之间比任何液体都更相似。哪张纸巾合适,哪把扫帚合适?对你来说,液体和颗粒的区别是显而易见的。今天没有人工智能可以做到这一点。
对话代理的体系结构
缺乏这种深度,今天的对话代理仍然显示出非凡的能力来回答甚至是模糊的问题。这是由于智能、知识和模式匹配这两大支柱之间特别设计的伙伴关系。我们将重点关注称为知识图的知识表示,以及称为实体/意图识别的模式识别组件。
对话代理的架构如下所示。
对话代理的架构形成了一个感知/动作循环
对话代理的问答和其他类型的对话通过感知/动作循环架构进行。在其基本形式中,这是一系列的五个计算步骤。起点是当用户说出一个问题或命令时由麦克风拾取的声波。
- 一个叫做自动语音识别 (ASR)的计算模块将波形信号转换成单词的表示。
- 自然语言处理模块将单词翻译成内部计算机“语言”,称为逻辑形式。逻辑形式以统一的方式表示问题的含义,跨越人们可能用来问同一件事的不同可能的措辞。
- 对话管理器模块负责接收逻辑表单并决定如何响应。在对话管理器中搜索问题的可能答案,并形成响应。输出本身通常是一种逻辑形式。
- 自然语言生成将带有答案的逻辑形式转换回人类语言中的单词序列。
- 文本到语音模块使用一些定义声音质量和语调的训练参数来合成声音信号。这导致输出波形被发送到扬声器。
几十年来,对话代理的一个巨大障碍在于自动语音识别模块。如果用户所说的单词被错误地传输到 NLP 模块,那么就没有希望给出正确的答案。在过去的 15 年里,由于机器学习算法、计算能力和用于训练算法的可用数据集的进步,ASR 取得了爆炸性的进步。
知识图谱
如今,智能对话代理的尖端存在于自然语言处理和对话管理器模块中。首先让我们考虑如何用一个叫做知识图的知识表示来表示大量的事实。然后,我们将看到自然语言处理如何从用户的查询中构造逻辑形式,以在知识图中查找答案。
大知识图的一小部分。
图由节点和连接节点的链接组成。在知识图中,节点代表世界上的事物,或称实体,链接代表实体之间的关系。实体可以是具体的也可以是抽象的。上图显示了一个大得多的图表的一小部分。这部分代表了这样一个事实:伦纳德·尼莫伊是一个人,他扮演了斯波克这个角色,在星际迷航中斯波克是一个角色,而星际迷航是一部电视剧。
知识图在使用节点和链接的方式上可以有不同的规则和设计参数。在一些知识图中,实体有两种类型,类型的实体(绿色)是事物的类别,而标记的实体(蓝色)是特殊的实例。这个伦纳德·尼莫伊节点是一个令牌,一个 Person 类型的实例。在一些知识图中,实体是分层组织的,因此,例如,电视连续剧可以是类别的子类型,娱乐类型。一些知识图定义了一组固定的链接/关系类型,而其他的是开放式的。
这些规则和设计参数就是知识图的本体。本体论的意思是,“存在的本质”,这个词来自哲学的一个分支,认识论,它研究知识的本质。抽象的知识与现实世界有什么关系?agents 如何获取知识,面对变化保持知识,并对其正确性投入信任?人工智能研究的历史已经揭示出,很大程度上取决于关于知识本体的设计决策。例如,如果一个知识图允许链接取任意标签,那么如何发现两个链接是等价的,或者是矛盾的?在纯粹的实践基础上,当涉及到设计知识本体时,坚定的技术工程师已经非常欣赏和尊重哲学家带来的智慧。
多年来,根据一系列或多或少受到严格约束的知识本体,已经构建了许多知识图。它们中的许多都非常大,并在今天被大量使用,包括为应用程序开发人员提供访问的 API(应用程序编程接口)。知识内容(实际的节点和链接)是通过从维基百科、报纸文章和其他在线资源中找到的文本的手动管理和自动获取的各种组合来添加的。
知识图表可以直接回答诸如“T2,谁在《星际迷航》中扮演了斯波克?“要回答这个问题,首先必须将其转换为能够处理实体和关系的逻辑形式表示。这项工作由 NLP 模块执行,它与 ASR 一起充当对话代理的模式匹配支柱。
自然语言处理是计算语言学的一个实际应用。这个领域还旨在实现自然语言理解这一更雄心勃勃的目标,但这个术语有些过头了,因为我们传统意义上的“理解”将知识、模式匹配和推理结合在一起,达到了今天的人工智能根本无法达到的程度。
自然语言处理的最初步骤包括根据单词的语法词性和已知的实体类型对单词进行分类。单词“who”是一个疑问代词,而“in”是一个介词,表示包含或成员关系。“Spock”和“Star Trek”被标记为在预先编译的实体名称列表中找到的已知实体名称。
实体/意图提取将自然语言问题转换成逻辑形式的查询。
给定单词的这种分类,称为实体/意图提取的处理步骤试图根据其目的(问题、命令、陈述等)对话语进行分类。)然后分配与该目的相关联的已知和未知实体。实体/意图提取分析话语的句法结构,这取决于词序。如今,机器学习方法在如何实现这一点的详细步骤中占据主导地位。每个句法模式都映射到一个逻辑表单模板。这个例子展示了一种写出逻辑形式的方法。如果你能读懂 computerese 的嵌套括号,那么你就能自己弄明白原来的问题是如何转换的。最后,原始单词序列中的实际实体和关系填充到模板中,从而产生最终的逻辑形式,它表示用户所要求的内容,但现在是高度结构化的格式。
方便的是,逻辑形式本身相当于一个图。这被称为查询图。示例查询图看起来很像知识图中关于斯波克和星际旅行的部分,除了人物实例节点有一个问号。那就是用户想知道的未知值。
子图匹配找到与查询一致的知识图的一部分。
从这里开始,应用计算机科学中的一个众所周知的方法,子图匹配。这仅仅意味着,找到与查询图的指定节点和链接一致的庞大知识图的一部分。未知的 Person 实例节点是一个通配符变量,它将匹配知识图中的任何内容。当子图匹配完成后,再找到这个节点与知识图中的伦纳德·尼莫伊节点对应,转眼间,就可以填写并返回一个答案。
逆过程将填充的查询图转换回自然语言的句子,这一次是作为语句而不是问题。通过文本到语音转换模块,代理自豪而愉快地展示了它的才华。好吧,这是一台计算机所能获得的机械的骄傲和快乐。工程师和他们的赞助商收获了荣誉。
知识图只是可用于存储自然语言查询信息的几种结构化数据表示中的一种。当大量数据项具有相同的属性集时,关系数据库是首选。但是像知识图一样,所有的数据组织都提供了通过逻辑形式查询访问的接口。
有了对对话代理如何执行问题回答的这种理解,人们就可以通过与他们交谈来探索他们的知识来源和自然语言能力。例如,我们可以追踪 Alexa 关于《星际迷航》和其他电视剧的知识实际上来自哪里。这是另一篇文章的主题。
我如何成为一名数据分析师?
已回答的常见数据分析师问题
如果你想知道如何成为一名数据分析师,或者数据分析师是做什么的,那么很难从所有可用的信息中找到直接的答案。今天,我想回答我作为数据分析师遇到的最常见的问题,如果你对数据分析职业感兴趣,我会为你指出正确的方向。
我如何成为一名数据分析师?
没有一个确切的答案,因为有许多方法可以让你成为数据分析师。这些是典型的方式:
- 来自公司内部的转变 —我认识一些人,他们不得不学习 SQL,因为他们需要数据,而周围没有数据分析师。随着时间的推移,他们能够过渡到同一家公司的数据分析师角色。
- 数据相关学位 —这可以是数据分析或数据科学学位,但我也见过拥有经济学或商业学位的人成为数据分析师。这是最直接的途径。
- 数据分析训练营 —这对于那些不需要回到研究生院就想转行的人来说很常见。根据全职或兼职的选择,训练营通常持续 3 至 6 个月,主要关注旨在涵盖数据分析师所需基本技能的课程。
- 自学—DIY 版,你必须弄清楚要成为一名数据分析师需要学习什么。好处是你可以按照自己的速度学习,但坏处是如果你有问题,没有人指导你。
成为一名数据分析师需要具备哪些技术技能?
这些是数据分析师最常见的技能。
- SQL—这是必须具备的技能。不精通 SQL,就不可能成为一名数据分析师。
- Excel —不是必须的,但知道了也很好。我发现 Excel 对于快速绘制数据图表以发现异常值和趋势非常有用。Excel 数据透视表是我最好的朋友。
- 大多数工作清单都需要 Python 知识,但我很少在工作中用到它。其他数据分析师的工作可能就不是这样了。学习 Jupyter 笔记本基础知识来运行 Python 代码和像 Pandas 和 NumPy 这样的通用数据分析包是很好的。
- 数据可视化 — Tableau 是一个常用的可视化工具,如果你想学习的话。如果你不知道招聘公司的数据可视化工具,这就不是交易破坏者。我在工作中学会了 Tableau,我缺乏知识并不是雇佣我的一个因素。
- 数据管道 开发 —如果你加入一家没有数据基础设施或者缺乏数据工程师的公司,这一点很少被《非常重要》提及。数据分析师工作的一个关键部分是将不同来源的数据加载到一个中央数据库中,并对其进行转换,以便进行下游分析和报告。根据公司的不同,知道如何将来源联系在一起并使其成为可用于分析的数据可能是分析师工作的一大部分。
职位描述需要比招聘经理所能接受的更多的技能,因为他们想找到最好的候选人,即使不是所有的技能都是工作所需要的。如果你至少具备所列技能的一半,我建议你申请这份工作。
数据分析师能成为数据科学家吗?
如果我作为一名数据工程师仅仅通过了解数据而成为一名数据科学家,那么数据分析师绝对有可能成为一名数据科学家。数据科学家 80%的时间花在数据准备上。数据分析师工作的很大一部分也是数据准备,你需要学习剩下的 20%来成为数据科学家。
[## 我从数据工程师到数据科学家的不可思议的转变,之前没有任何经验
通过掌握一项基本技能
towardsdatascience.com](/my-unbelievable-move-from-data-engineer-to-data-scientist-without-any-prior-experience-6f76614fe340)
数据分析师是做什么的?
数据分析师的主要角色是使用数据回答业务问题,帮助利益相关者做出可行的决策。这些是数据分析师回答业务问题的典型方式。
- 提取数据分析趋势。数据会因您支持的部门而异,如营销、产品、财务等。
- 评估 A/B 测试是公司确定某样东西的最佳表现版本的常用方法。这可以是一个电子邮件主题行测试,以确定哪个主题会增加电子邮件的点击率,或者是一个新产品功能,以查看它是否会增加用户参与度。
- 开发仪表板以监控 KPI(关键绩效指标)
数据分析师的职责因公司而异。仔细阅读职位描述,并确保在面试时提问,以评估需要什么样的工作,因为数据分析师的职责不是普遍的。
我如何成为一名成功的数据分析师?
除了所有的技术技能之外,一个成功的数据分析师还将拥有出色的软技能。良好的沟通技巧是培养成功所需的软技能的基础。无论你做了多么好的分析,如果你没有能力将关键点传达给你的利益相关者来帮助他们做决定,那么你可能永远也做不了。公司聘请数据分析师来帮助他们做出更好的数据驱动决策,而不是依赖直觉。良好的沟通技巧可以帮助你理解利益相关者的需求,并以清晰的方式展示结果。
你可能也会喜欢…
我希望从一开始就知道的成功秘诀
towardsdatascience.com](/my-experience-as-a-data-scientist-vs-a-data-analyst-91a41d1b4ab1) [## 没有经验如何获得第一份数据分析师工作
回答——这不仅仅是拥有技术技能
madfordata.medium.com](https://madfordata.medium.com/how-to-get-your-first-data-analyst-job-without-experience-7a9afc663439)
我多么爱你的数据
让我来数一数,总结一下
亚历山大·辛恩在 Unsplash 上的照片
数据,你让我在你好。
我们在一起这么多年了。我有无数好的,坏的,失败的回忆。我们去过星星,在雪花中嬉戏,有一段令人惊讶的正常关系,这是大多数人都不知道的。许多其他数据仍然被困在各自的筒仓中,看不到阳光。我们应该认为自己是幸运的。
我一直在投资我们的关系。我似乎不能把我的手指放在回报上,但是我确实知道在我的生活中我如此需要你。你是我的电、油和水。
没有你就没有意义。没有你,我无法做出任何有意义的决定或采取任何行动。
我会尽最大努力保证你的安全,并采取措施防止任何恶意攻击。我付出了一切来确保你不会从我身边被偷走。
你最近变得很大——哦,最亲爱的,不要误解我——不管是大是小,我都爱你。大小并不重要。你要知道,随着你的成长,我不得不做出调整来跟上你。
你需要更多的空间,所以我们从一个地方搬到另一个地方。仍然没有足够的存储空间给你,所以我们搬到了一个大仓库。见鬼,我甚至给你买了自己的湖!
我深情地记得生活简单而有条理的时候。除了一些分隔符,没有什么可以分开我们。
有时候你的脑袋在云里,或者你在其他的空间里。当你想让我们的关系公开时,我很震惊。你可以说我守旧或专有性,我只是还没准备好做出这样的飞跃。我们的隐私对我来说很重要。
数据,你太值得了。
我听别人说起过你的正直,你的卫生,他们说你不可信,或者你不守时。规则不明确,他们一直在操纵你来迎合他们的喜好。他们甚至质疑你的血统。我知道这不完全是你的错,但你似乎承担了所有人问题的责任。
你必须经历很多转变,我知道这有时很困难,但却是必要的。你所做的牺牲得到了回报,你看起来美极了!看到你的色彩和你展现自我的多种方式真是太棒了。你的美丽无法用语言或数字来形容。简直超乎想象!
你已经成为一个不可思议的故事讲述者。我从未想过你能以这样一种方式表达自己,激励人们采取行动。你们分享的故事产生了如此大的影响。
数据,你激励了我。
你不可思议的进化超越了视觉美和讲故事。你努力成为所有决策的中心。我一直有一种直觉,你有能力做到这一点——现在我亲眼目睹了。你是科学、工程、文化、管理领域的开拓者,如此受欢迎,以至于你现在有了自己的文化。
哦,你的智慧太真实了,你的学习已经如此深入。看到你积累的知识的广度和你如此快速地识别模式和解决问题的能力,我感到惊讶。我喜欢你从未停止提升你的能力,并激励我与你并驾齐驱。
数据,你挑战我。
你终于得到了你应得的认可,这让我很骄傲。因为有你,因为有你,世界变得更加美好。
你帮助人类的梦想正在变成现实。我迫不及待地想知道未来会发生什么,我很荣幸我的生命中有你。
数据,你使我完整。
我的工资有多少?
将你的工资与你的同事的工资进行对比
概观
这篇文章讨论了一种工具背后的方法和动机,这种工具可以帮助人们了解他们的收入与同龄人(同一个城市,同年龄组,可选地,性别)的收入相比如何。
要直接进入计算器,点击此处。
自己试试——这里
动机
研究表明,人们很难估计自己有多富裕。比如,在其 2015 年的工作论文中,金珀森和特里斯曼指出,个人对本国收入分配的信念揭示了“广泛传播的无知和误解……不管数据来源、可操作性和测量方法如何。”他们这样总结这种误解:
富人经常认为他们比实际上更穷,而穷人认为他们比实际上更富。两人都认为自己比实际情况更接近中间值。
这种误解可能会产生广泛的影响,既影响个人福祉——例如主观幸福感和压力水平——也影响政治观点——例如对再分配的看法( Gimpelson 2015 , Hauser 2018 )。
我希望这个工具可以帮助个人更好地将他们的相对“小康”联系起来,这样做:
- 帮助告知一些关键的个人财务决策 —例如,与你所在城市的其他人相比,你的相对收入水平可以让你了解这个城市对你的负担能力。如果你是第 80 个百分之一的人,不知道你是否有能力在城市里抚养孩子,你可能有这个能力!79%的人在低收入的情况下工作!(我知道这 79%的人中并不是每个人都有孩子,但希望你明白我的意思)
- 让一个人更加意识到自己的经济特权(或缺乏经济特权)——如果个人普遍倾向于高估自己的中产阶级程度,纠正这种误解可能会促进对那些不太富裕的人的更多同情。同理心越强,政治和社会利益就越大(这是我未被引用的观点,所以要有所保留)。
- 或许甚至可以缓解一些经济焦虑——人们很容易将自己与社交圈中最成功、最富裕的人进行比较。这可能会对一个人对自己和自己的财务状况产生负面偏见。希望从更广阔的角度看问题,将有助于纠正这种负面偏见。
方法学
数据汇编
为了获得按年龄、地理位置和性别划分的全职员工的收入数据,我使用了 IPUMS CPS ,它“提供了跨越时间和空间的来自世界各地的人口普查和调查数据。”
提供此类信息的最新相关数据集是来自 2019 年 3 月的 ASEC (“当前人口调查的年度社会和经济补充”)数据,包含以下字段:
- INCTOT —“上一日历年所有来源的税前个人收入或损失总额”;
- wks work 1——“被调查人在上一个日历年中为盈利、有报酬或作为无报酬家庭工人工作的周数。”
- full part——“指出在上一个日历年被雇用的受访者是全职还是兼职。全职工作的定义是每周工作 35 小时或以上。”
- 年龄——“某人最后一次生日时的年龄”
- METAREA——“一个家庭所在的大都市地区。大都市区是以一个相当大的市区为中心的县或县群
- 性
- as ecwt——“在分析个人层面 CPS 补充数据时应使用的个人层面权重。”
定义对比群组
一旦收集了数据,用户定义要比较的人群,输入:
- 都会区—一个人居住的地理区域;目前,该工具仅支持该国 10 个最大的城市地区,但如果有兴趣,请在下面添加评论,它应该很容易扩展
- 总年收入—这应该包括用户在过去 12 个月的所有收入(包括兼职、投资收入等。)
- 年龄&相关年龄群组— 默认情况下,计算器会将比较群组的年龄范围设置为用户的年龄+/- 2 岁(例如,照片中的用户为 25 岁,她的年龄将与所有 23 至 27 岁的人进行比较)。此设置可以使用滑块进行调整。
- 性别—默认情况下,比较群组被设置为包括所有性别,但对于那些对女性和男性全职员工之间的收入分配差异感兴趣的人,请切换此设置。
清理数据
为了获得最终数据集,我们:
- 基于用户输入的子集
- 筛选到每周工作 40 小时以上(WKSWORK1 ≥ 40)的全职员工(FULLPART == ‘全职’)
- 将 INCTOT 变量调整为≥ 0(原始数据允许负值)
给 IPUMS 数据添加标签并使其可读有点麻烦——你必须下载一个单独的文件并解析它——但如果你需要帮助,请联系我们。以下是我所做的要点(抱歉没有突出语法):
import pandas as pd
import untangledef get_data_labels(url):
obj = untangle.parse(url)
data = obj.codeBook.dataDscr.var
labels = {
x['ID']: {
int(el.catValu.cdata): el.labl.cdata
for el in x.catgry
}
for x in data
if getattr(x, 'catgry', None)
}
return labelsdef get_working_population_data():
url = ".../data_labels.xml"
data_labels = get_data_labels(url)
ipums = pd.read_csv(".../asec_data.csv") for k, v in data_labels.items():
ipums[k.lower()] = ipums[k].replace(v)
return working_pop
可视化分布
一旦我们有了相关的比较群组,我们就可以绘制该群组的收入分布图,使用我们数据集中的 ASECWT 变量计算样本权重。
例如,让我们看看一个 27 岁的人,他在波士顿市区年收入为 70,000 美元:
我们看到,这个人的收入属于他们同代人中的第 67 个百分位数(那些生活在波士顿-剑桥-牛顿地区的人)。
在洛杉矶地区,一个年龄相仿、收入相同的人会被认为更有意义地“富裕”,在那里,他们会属于收入分布的上分位数,即第 82 个百分位数。
而一个 27 岁的人在费城挣 7 万美元,属于收入较高的阶层,在第 89 百分位。
正如地理位置会极大地影响一个人在同代人中的相对地位一样,一个人比较自己的年龄也会极大地影响他的相对“富裕程度”。
例如,我们 27 岁的费城人年收入 7 万美元,对于她的同龄人来说已经相当不错了,但如果考虑到所有 27 岁及以上的工人**,则更接近于费城的中等收入者(第 56 百分位)。**
自己试试吧!
**[## 收入分配计算器
一个可视化工具,用于显示你的同伴群体的收入分布以及你如何融入其中
gameplan-app-21.herokuapp.com](https://gameplan-app-21.herokuapp.com/apps/income-forecast)**
结论
希望这个工具能帮助人们更好地理解他们同龄人的收入分配,以及他们如何融入其中。
我的下一篇文章将涵盖该工具中的“收入轨迹”标签,它利用了来自 Fatih Guvenen 和 Derek Tharp 的研究,来估计人们的收入在其一生中会如何增长。
感谢阅读!如果您有任何想法或问题,请联系我们或留下您的评论!
机器学习和信号处理如何融合?
IBM 在 Coursera 上的“高级机器学习和信号处理”概述
克里斯里德在 Unsplash 上的照片
作为一名设计工程师,我越来越多地接触到更复杂的工程挑战,其中一些挑战需要多学科专业知识的融合。高级机器学习和信号处理课程为我提供了了解机器学习和信号处理如何集成和应用在一起的窗口。
虽然这门课程的名字一开始听起来令人生畏,但它并不难理解。然而,先前的统计和微积分知识将在课程的后面部分派上用场。这门课程由 IBM 首席数据科学家罗密欧·肯兹勒和尼古拉·曼切夫讲授,由 Coursera 提供,作为 4 门课程的 IBM 高级数据科学专业的一部分。
该课程分为 4 周,第 1 周到第 3 周涵盖机器学习概念和算法。在第 4 周,涵盖了信号处理部分,并向我们展示了如何集成信号处理和机器学习。
第一周
本周为接下来的几周做准备,我们开始探索机器学习中使用的线性代数。我们首先介绍不同的数据对象:标量、向量、矩阵和张量;以及可以应用于它们的数学运算(点积、向量矩阵乘法)。
数据对象 标量是一维的,可以是任意整数,即:
1, 5, -18
向量是一组标量,并且只能包含一种数据类型,即:
(0,11,135)
元组类似于向量,但它可以包含多种数据类型,即:
(0,1,7.8) #notice the integer and float datatypes
矩阵是大小相等的向量的列表,张量是 3 维或更高维的矩阵。张量对于图像处理很有用(例如,一维用于宽度,另一维用于颜色,另一维用于高度)。
然后我们学习了更高维的向量空间,以及描绘和分割它们的直觉。
- 为了在一维空间中分裂,我们使用一个点。
- 为了分割成二维,我们用一条线。
- 为了在三维空间中分割,我们使用一个平面。
- 为了分割高于 3 维的空间,我们使用一个超平面。
机器学习有两种类型:
- **监督学习:**在带有输出标签的数据集上训练,即给数据点分配一个标志。该算法旨在通过预测当我们改变 x 时 Y 将会是什么来求解 Y = f(x) 方程。监督学习分为:
- 分类 —预测离散值,即:“真/假”
- 回归 —预测一个连续值,即:“未来手机价格”
2.无监督学习:在没有输出标签的数据集上训练。该算法通过将相似的数据分组在一起,尝试从输入数据中发现模式。无监督学习的一个例子是聚类,其中数据被分成簇(在第 3 周会有更多相关内容)。
PySpark 允许我们模块化数据管道。通过使用 StringIndexer、、 VectorAssembler **、**和Normalizer 的 Spark 库,我们可以确保在 ML 模型发生之前,所有的预处理都完全对齐并得到处理。这个想法是将这些预处理部分浓缩到“管道”中,并利用这种灵活性在不同的训练参数之间快速切换,以优化最佳的机器学习模型。
ML 管道示例
from pyspark.ml import Pipeline
pipeline = Pipeline(stages = (string_indexer, encoder, vectorAssembler, normaliser))model = pipeline.fit(df)
prediction = model.transform(df)
所有的编码任务都在 IBM Watson Studio 中完成,本周的实践方法为建立和运行机器学习项目所需的步骤奠定了基础。
第二周
本周将介绍常见的机器学习模型和概念,这些讲座是解释理论和演示如何使用 Apache SparkML 算法的混合体。课程主持人做了大量工作来解释以下概念,这些概念对于坚实的机器学习基础至关重要。
线性回归和批量梯度下降
线性回归模型是一种基于监督学习的模型,可由以下函数描述:
y = w₀ + w₁x₁ + w₂x₂ +w₃x₃...+wₙxₙ ; whereby w is the feature weight
它的主要功能是根据提供的自变量(x)预测因变量(y)。其对应的逻辑回归用于预测离散值。使用梯度下降策略来确定特征权重,批量梯度下降恰好是这些优化策略之一。
批量梯度下降法寻找全局最小值
如果有足够的时间并且学习速率不太高,批量梯度下降保证找到成本函数的全局最小值。(想象一下试图到达一个山谷的底部)。对于大型数据集来说,这是很慢的,因为模型仅在评估了数据集中每个样本的误差之后才更新。
然后,我们简要了解了如何将数据集分为训练数据集和验证数据集,以及评估预测结果是欠拟合还是过拟合的方法。
朴素贝叶斯定理
尽管这个话题很有挑战性,但 Nickolay 设法将其总结成一种易于理解但又深入的方式。我们看到了朴素贝叶斯定理背后的直觉和数学,例如:
- 求和规则和乘积规则—允许我们解决大多数概率问题
- 高斯分布,或更普遍地称为正态分布,即平均值对称分布的数据。
- 中心极限定理——一个足够大的样本的所有平均值最终都是高斯分布
- 贝叶斯干扰——假设的概率随着新证据的出现而更新
到目前为止,已经有很多关于第 2 周的信息了,但是我们还没有完成!
支持向量机
支持向量机是线性分类器,为了将它们转换成非线性分类器,可以使用“内核”方法。这种方法,或者罗密欧称之为“技巧”,将训练数据转换到“特征”空间,并允许超平面清晰地分离数据点。这部分课程中的例子直观、对初学者友好,并且容易记忆。
SVM 的核心方法
本周很好地总结了决策树、随机森林和梯度提升树。我们看到了取样的方法和每个模型的优缺点。还有一个编码练习,结合了我们在第 1 周和第 2 周学到的内容,演示了使用 SparkML 的 gbt 分类器的应用和预测准确性。
第三周
随着更高级主题的介绍,如聚类和主成分分析,我感到最紧张。我们学习无监督的机器学习,我们试图理解点云之间的距离。有多种方法来测量距离,即两点间相减;毕达哥拉斯定理、欧几里德距离和曼哈顿距离。
我们学习了使用 K-means 算法和层次算法进行聚类。K-means 的工作方式是,我们指定预期聚类的数量,然后算法将在 3D 空间中绘制一个超球体,并尝试根据最近的中心将点云中的每个数据点分组为聚类*。*
k 均值聚类
维度的诅咒
我们经常不得不在更快的计算时间和更多维度(特征)之间做出权衡,同时保持一定的准确性。随着维度的增加,样本数量变得越来越少,数据点之间的距离也失去了意义。为了解决这个问题,PCA 被用来减少维数,同时尽可能地保持原始数据点之间的距离。这些距离在分类中至关重要,因为它们允许我们将数据点预测到不同的类别中。
本周有几次测验,但它们足以测试我对材料的理解。与前几周相似,有一个编码练习来巩固到目前为止所学的内容。
第四周
我最期待的是本周,因为我们终于谈到了信号处理部分,这是一个我非常渴望探索的话题。
信号
描述一个信号有 3 个变量:
1。频率—信号
2 出现的次数。振幅—信号的强度
3。相移—信号从其原始位置移动的水平偏移量。
描述连续时间信号的变量
大多数信号可以用以下公式产生或描述:
y(t) = **A**sin(2*pi**ft* + **φ**) whereby, **A** = amplitude, *f* = frequency, *t* = time, **φ** = phase shift
傅立叶变换 傅立叶变换允许我们将复杂的信号——无论是音乐、语音还是图像——通过一系列正弦曲线分解成它们的组成信号。
就图像而言,我们可以将图像的颜色分解成它的 RGB 成分。
安德烈科·波迪尔尼克在 Unsplash 上拍摄的照片
图像的 RGB 分解
Nickolay 以钢琴和弦为例,使用傅立叶变换来识别单个音符。振动穿过介质时会产生声波。当我们有不同程度的振动时,我们将获得不同的波形振幅。这些振幅可以相加或叠加,以获得每个单独振幅的净响应。
我们可以研究两个域的波形——T4 时域和频域。傅立叶变换和傅立叶逆变换在这些域之间转换。(前者从时域到频域,后者从频域到时域)。
本章通过小波主题将信号处理和机器学习联系起来而结束。傅立叶变换适用于平稳信号,但在现实生活中,我们经常处理非平稳信号。傅立叶变换不能提供特定频率何时出现在这些信号中的信息。因此,小波变换需要使用标度图来克服这种限制,标度图是小波变换的直观表示。为了充分理解小波和傅立叶变换,Nickolay 解释了它们背后的数学原理。
最后的编程作业是关于如何使用机器学习对信号进行分类的练习。对于正在研究传感器数据和机器学习如何工作的人来说,本周的主题和练习确实令人着迷和有趣。
结论
我发现我正在开发的产品变得越来越智能,安装了更多的传感器。通常,拥有多学科技能有利于交付项目。这门课程通过提供信号处理和机器学习的一些重要主题,对我来说“一举两得”。
交付速度很快,对于专业人员或好奇的业余学习者来说,解释也足够得体。对于教授的一些主题,尤其是贝叶斯定理、主成分分析和小波变换部分,进一步的学习和研究对于加深理解非常重要。
还有其他课程更深入地讲述了机器学习和信号处理,但我真正喜欢这门课程的是这两个相互关联的主题的联系和“融合”。
由于在本课程的作业中使用了 IBM Watson Studio,接触 IBM 的云工具和服务还有另外一个好处。这门课程似乎是让学习者自己选择作业的难度。通过作业并不具有挑战性,因为有很多指导和指导。但是对于初学者来说,总是有一个选项来真正理解显示的代码,这需要时间。
我期待着应用我从这个课程中学到的东西,我希望通过写这个总结,我巩固了我的学习,你也学到了一些东西。
机器是如何学习的?
一个简单的介绍和示例代码!
由 Kaboompics 拍摄的照片。com 来自 Pexels
人工智能
人工智能已经成为科技行业每个人都在谈论的时髦词汇,让外行人感到困惑和茫然。对于那些可能不熟悉人工智能和机器学习的人来说,这篇文章是对人工智能和机器学习的介绍。
让我们开始吧…
什么是数据科学,AI,机器学习?
人工智能的领域是广阔的,然而,也有某些细分领域缩小了它的应用范围。先来介绍一下当我们听到 AI、ML、数据科学这些词的时候是什么意思。每当这样的词出现时,一般来说,它们指的是过去或实时收集的数据被用来创建预测的过程。这些预测是 AI、ML 或一些其他统计模型在“看到”数据后的“最终结果”。为了更好地理解这一点,让我们看看机器学习的三种方式…
- 监督学习
- 无监督学习
- 强化学习
监督学习
当我们有一个大的数据集(简单地说是对某些属性的许多观察)时,比如说身高、体重、性别和鞋码,我们可以使用监督学习来预测某些属性给定其他属性。考虑上面的例子,如果我们有一个包含以下属性的数据集…
- 高度
- 重量
- 性
- 鞋码
…我们想要预测鞋号,我们可以使用数据集中每个人的身高、体重和性别来帮助预测鞋号(我们将在下面讨论这个过程是如何工作的)。
无监督学习
每当我们有一个数据集,我们试图识别未知的关系,我们使用无监督学习。这听起来几乎是一个矛盾的说法,不是吗?
了解未知关系
考虑在商店观察到的具有以下属性的数据…
- 性
- 年龄
- 花的钱
- 一天中的时间
…如果我们想更好地了解谁是花钱最多的人呢?更重要的是,如果我们可以了解顶级消费者的关键特征,然后有针对性地进行营销,让他们进门,会怎么样?这正是无监督学习的目标。
强化学习
只要我们有一个可以学习规则的环境,我们就可以实施强化学习。这就是人工智能真正有趣的地方——无人驾驶汽车、人工智能的游戏能力等……在某种意义上,这直接来自心理学(事实上,大多数人工智能算法都是受人类生物学的启发),巴甫洛夫训练狗在听到铃声时分泌唾液,人工智能也被训练成根据状态-行动-奖励系统成功完成任务。
机器是如何学习的?
让我们从使用线性回归来解释线性模型的基本步骤开始。首先,让我们考虑一个具有以下任意属性的数据集…
X1 X2 X3 X4 X5 X6 X7 X8 Y1 Y2
在任何情况下,X 是给定的,而 Y 是八个 X 变量的结果(您可以将此视为前面的鞋码示例)。如果我们想根据 X 预测 Y,第一步是将数据分为因变量(Y)和自变量(X)。使用 python,这将看起来像…
数据现在被有效地分成了两个不同的集合…
- X —一套 X1,X2,X3,…,X8
- Y —一组 Y1 和 Y2
接下来,我们可以使用线性回归模型来帮助预测基于 X 的集合 Y…
这里发生了什么?嗯,线性回归模型只是一条通过数据的最佳拟合线。这意味着它是从所有点到线的距离最小的线(在 2d 中)。看起来像这样…
这就是机器“学习”的方式,它们只是将预测与观察结果的误差最小化
现在,线性回归模型有什么问题?线性回归模型的主要假设是,因变量和自变量之间存在线性关系。如果我们绘制的数据看起来更像这样…
…显然,这不是线性关系,而是非线性关系。这就是多项式回归、神经网络和所有其他有趣的东西发挥作用的地方。与线性回归不同,神经网络可以发现数据中的非线性关系。这就是为什么理解您正在处理的数据类型及其与您试图预测的变量的关系是至关重要的。
结论
在本文中,我讨论了不同类型的学习过程,并举例说明了机器如何使用线性回归模型进行学习。如果你想了解更多关于神经网络的功能以及如何建立自己的神经网络,请点击以下链接…
网飞和亚马逊怎么知道我想要什么?
JESHOOTS.COM在 Unsplash 上拍照
或者说推荐系统是如何工作的?
每次谈到推荐系统,我们都把它称为“知道我们一切的算法”。我们每天都能看到他们的搜索结果,例如,当亚马逊向我们推荐有时非常适合我们的产品时,尽管我们以前从未搜索过它们。这通常会吓到一些人,尤其是因为没有多少人知道这些算法在实践中是如何工作的,所以我将在这里尝试总结一下基本知识。无论您是一名数据科学家,想要开始深入研究推荐系统,还是只是好奇想了解整个事情在现实生活中是如何发生的,这都是一个好的起点。
推荐系统如何工作——简短版
推荐算法可以分为两个不同的类别,这取决于它们的方法:协同过滤和基于内容的过滤。
协同过滤
协同过滤考虑到了口味的相似性,这意味着如果爱丽丝喜欢哈利波特,魔戒和纳尼亚传奇电影但讨厌变形金刚,鲍勃喜欢哈利波特和魔戒电影,我们假设他更有可能喜欢纳尼亚传奇而不是变形金刚。因此,它是基于用户之间的相似性,而不是产品。
基于内容的过滤
另一方面,基于内容的过滤通过查看特征本身来模拟喜欢某部电影的可能性。在上面的例子中,我们可以感觉到 Alice 和 Bob 都喜欢奇幻类型的电影,并向他们推荐《霍比特人》。在这个例子中,它是基于产品之间的相似性,而不是用户。
推荐系统如何工作——长篇版
为了做到以上任何一种方法,我们必须找到一种找到相似用户或相似产品的方法。更好的是,我们需要一种方法来衡量它们之间的相似性,这样我们就可以发现哪些产品/用户比其他产品/用户“更相似”。
类似
相似性可以通过测量距离来发现:两个元素越接近,它们就越相似。在数学中,测量距离的方法有很多种,但首先让我们了解一下在这个上下文中距离是什么意思。
在我们的日常生活中,两点之间的距离是使用这些点的空间坐标来测量的。例如,如果我知道我的确切空间坐标(经度和纬度)和我想去的地方,我可以使用我们称之为欧几里得距离来计算我到该点的距离:
当我们拥有年龄、性别或电影类型等特征而不是地理坐标时,我们该如何做到这一点呢?事实证明并没有什么不同,除了空间坐标有两个特征(X 和 Y),在我们的例子中,我们有更多的特征和一个高维空间,很难在图中显示出来。这篇文章的目的并不是深入许多可用的距离度量的细节,但是如果你想了解更多,这里有一篇很好的文章。一旦我们能够计算元素(用户或产品)之间的相似性,我们就可以尝试不同的方法来推荐产品。
实践中的协同过滤
让我们在之前的 Alice 和 Bob 的例子中增加一些人。在纯粹的协作过滤方法中,我们将首先获取用户对我们电影的评分(1-5 ):
然后,我们可以通过推断 Bob 对他还没有看过的两部电影的评价来向他推荐一部电影。这样做的一种方式可以是取最接近他的 2 个用户(在这种情况下是 Alice 和 Carol),并通过取他们对每部电影的平均评级来估计他的评级。对于纳尼亚传奇,我们估计是 4.5,而对于变形金刚,我们估计是 1(因为卡罗尔没有给它评分,所以我们不会考虑她的评分)。在实践中,我们可能会使用比 2 个用户多得多的用户,并且可能根据他们与 Bob 的距离来加权他们的评级,因此更多相似用户的评级被给予更大的权重。请注意,这种方法与他们的年龄或性别无关,也与实际的电影内容无关:它纯粹基于用户之间的评级和相似性。
基于内容的过滤
基于内容的过滤是基于产品之间的相似性。一种方法是使用产品特性。在我们的示例中,它可能是这样的:
给 Bob 推荐一部电影,我们可以根据上面展示的特征,看看哪些电影和他喜欢的电影更相似。他喜欢《哈利波特》和《指环王》,根据上表判断,这两部电影更接近《纳尼亚传奇》,而不是《变形金刚》。
现实生活中是怎么发生的?
大多数公司使用混合方法,这意味着他们结合了协作和基于内容的过滤,不仅考虑评级和类别,还考虑年龄和性别等人口统计数据,以及更高级的功能,例如书中的文本内容。特别是当你没有足够的特定用户的数据,如评分,来推断他们的偏好时,你可以使用人口统计学来估计。
如果你想了解更多关于推荐系统的知识,你可以查阅这篇非常有用的文章,或者,如果你对数学和操作细节感兴趣,你可以查阅这本书。
rcn 如何学习?
皇家护理学院
用匹配追踪代替梯度下降
科学进步一次一个葬礼。马克斯·普朗克的这些话是杰弗里·辛顿在被要求评论反向传播在未来的作用时使用的话,反向传播是他共同发明的算法[1]。为了发展人工智能,检查人类大脑的灵感是很自然的,Vicarious 在他们的递归皮层网络(RCNs)工作中就是这样做的[2]。本专栏文章探讨了 rcn 的不同方面,在本文中,我们探讨了它们的学习机制。
本文假设了解 ConvNets 和 RCNs 的结构,并倾向于了解 RCNs 的推理机制。可以从[2]或者我以前的文章( 结构 , 推论 )中了解 RCNs。
在 rcn 中有两件事情需要学习,功能节点的通道以及它们到其下一层的布线,以及池层中的横向连接。
特征学习
特征到底是什么?
在我们深入研究特征学习机制之前,让我们回顾一下 rcn 甚至 ConvNets 中特征的用途。分层视觉模型中给定层上的特征仅仅是考虑到它们在空间中的排列而对其下一层中的特征进行分组。在 ConvNets 中,特征映射中的一个单元指示在该特定元素周围的局部窗口中存在多少特定的较低级特征分组。在 rcn 中,通道(相当于 ConvNet 特征图中的单元)不是实数,而是二进制值,表示特定特征的存在与否。
但是,我们应该关注什么样的低层特性分组呢?假设我们位于某个中间层,其下的要素图层在多个方向上检测曲线段。如果我们想识别英语中的字符,我们是否应该有一个特征来表示一组形成花、星或圆的曲线段的存在?这个问题的答案是这个特征将在多大程度上帮助模型解释它通常会遇到的关于其他候选特征的图像。所以,在英语 OCR 的情况下,一个圆比一朵花或一颗星更有用,这基本上是 RCNs 的学习算法的本质。
在 rcn 中,我们只需要学习中间层和最顶层的特性,因为最底层具有硬编码的特性,即补丁描述符。对于中间层,算法逐层进行。在每一层,该算法在每次迭代中迭代添加单个特征,直到它找不到任何有用的特征来添加。让我们考虑在图 1 所示的特征层之上学习一个特征层。为简单起见,所示的层将被称为层 A,而它上面的层将被称为层 b。
图 1:对于给定的图像,运行前向传递和稀疏化步骤后的活动特征。所有显示的层已经经历了学习。为简明起见,较低层显示为长方体。其上的图层是具有 8 个颜色编码通道的要素图层(即黄色通道表示在其坐标处存在弯曲的左线段)。抱歉,看起来不专业,但它让事情更清楚。
中间层特征学习
在第一次迭代中,该算法从训练数据集中选取一幅随机图像,并向前传递到层 A。然后,我们应用一个稀疏化步骤,使我们获得层 A 的最有可能解释该层输入图像的特征。请记住,正向传递产生来自所有通道的信念传播消息,但不会告诉我们哪些功能应该激活,哪些不应该激活。如您在图 1 中所见,该图层中将有许多活动要素,其中一些组重复出现,如表示圆的组和表示长直线段的组。然而,在层 B,图像是完全无法解释的,因为在这一层还没有通道。该算法基于一些试探法来挑选一些候选分组,例如活动通道彼此靠近以及其中具有大量子特征的分组。对于每个候选分组,该算法计算其在训练数据集中的使用频率,并挑选最常使用的分组,该分组满足我们之前关于应该学习哪些特征的推理。
在图 1 中,可以看到对应于一个圆的层 A 的红、黄、绿和蓝通道的特定方向出现了两次。因此,我们假设它选择了这组子特征,并将其作为 b 层的特征添加。在下一次迭代中,该算法选择了另一个随机图像。现在,它的所有圆将在层 B 通过稀疏化步骤解释,就像我们在层 A 所做的那样,但是所有长线段不会,所以这次的算法可能会选择长线段的分组,因为它是英文字母中的常见特征,并继续下一次迭代,以此类推。
我想在这里提到,所有这些都依赖于稀疏编码的思想,其中我刚才提到的算法是字典学习算法匹配追踪,但作者添加了轻微的修改。
您可能已经注意到,所有中间层都不需要标签,这是 rcn 的一个很好的特性。在许多任务中,作者使用 SHREC 3D 数据集的 10,000 张图像训练中间层,然后在其他数据集上使用这些学习到的层,这有点像迁移学习。您可以在图 2 中看到实际 RCN 的中间层学会表示哪些通道。
图 2:中间层 RCN 的学习特征。图片摘自[2]的补充材料文档。
最顶层特征学习
最顶层是一个特例。它是使用一个带标签的图像集学习的,我们希望最终对它的图像进行分类。对于每个标记的图像,创建新的分类器特征。因此,对于同一个类,我们实际上可能在最顶层有多个通道。这看起来很昂贵,但是 rcn 是数据高效的,所以它首先不需要大量带标签的图像。我们在上一段中描述的学习算法将被修改,以便允许我们刚才提到的最顶层上的约束,这些约束很简单,不值得一提。
横向联系学习
不幸的是,这篇论文及其附带的补充文档没有提到关于如何学习池层的横向连接的很多细节,并且其算法也没有出现在他们发布的代码库中。他们提到的主要问题是,他们是从输入图像中对象的轮廓连通性中学习的。
本文到此为止。如果你想了解更多关于 RCNs 的知识,你可以查看它的论文[2]和补充材料文档,或者你可以阅读我的关于在不同数据集上应用 RCNs 的结果的文章。
参考资料:
[1] S. LeVine,人工智能先驱说我们需要重新开始(2017),Axios。
[2] D. George,W. Lehrach,K. Kansky 等,一种以高数据效率训练并打破基于文本的验证码的生成视觉模型(2017),科学杂志(第 358 卷—第 6368 期)。
机器人如何在不断变化的世界中“找到”自己?
机器人位置识别的 ELI5 介绍
由 Unsplash 上的 Tabea Damm 拍摄的照片
想象一下这样的场景:你和一个从印度旅行回来的朋友在一起。你游遍了印度,并推荐你的朋友去那里度假。当你们见面时,你的朋友告诉你曾在一座寺庙前看到一只戴着红帽子的猴子。你记得几年前见过那只猴子!你拿出手机寻找照片作为证据。接下来几分钟的对话听起来可能是这样的:“我知道它就在这里的某个地方!不,不。那是在我们参观瀑布之前。嗯。那是在海滩之后,我很确定……”令人沮丧,对吗?
假期通常持续一到两周,包括连续的假期快照。在你的手机上找到一段时间前拍摄的一张照片可能会很棘手。这可能令人沮丧,但并非不可能。我们直观地回放一系列的心理图像,这些图像提供了我们在任何一个时间点的位置信息。
地点识别
这种对先前看到的信息的识别和回忆构成了位置识别的问题。在你的手机上找到一张一只猴子戴着红帽子的假日照片也涉及同样的精神导航。当你翻阅图片时,你的大脑会回到过去,在脑海中回放假期的持续时间,定位你何时何地看到了这只猴子。
这是另一种解释。当你给某人指路时,通常会说这样的话:“一直往前走,直到你看到著名的汉堡店,向左转,然后你会看到一家药店就在你面前。”。在那里向右转…。如果他们无法将所见与你描述的相匹配,所有这些信息都是无用的。
在更大的范围内
现在,想象一下,如果你的手机日夜不停地捕捉图像。浏览所有内容,从几个月或几年前拍摄的一系列假日快照中找到一张戴着红帽子的猴子图片,几乎是不可能的。这恰恰是自动驾驶汽车要解决的问题。代替手机上的照片,这些机器人必须能够理解在其整个运行寿命中运动时捕获的连续视频序列流(相当于数百万张图像)。
对于机器人来说,大规模观测的成功定位是通过可扩展地点识别的过程实现的。
机器人像人类一样解决问题
作为人类,我们无时无刻不在脑海中带着世界的图像*。自动驾驶汽车也是类似的情况。为了在旅途中做出有效的决策,自动驾驶汽车必须尽快理解永无止境的图像序列*。**
人类和机器人也共享以 GPS 导航/定位工具的形式获得外部帮助的能力。然而,GPS 并不能在所有情况下对所有任务都足够精确——水下、地下、火星!当谈到自动驾驶汽车的可靠性及其做出准确、实时决策的能力时,这是一个问题。幸运的是,如果机器人,包括自动驾驶汽车,以前看到过一些东西,这些信息应该有助于自我定位。
回想一下你在一个新城市迷路的时候。随意走了一圈,突然看到一个你之前注意到的建筑,可能是因为颜色或者大小。多亏了你头脑中运行的地点识别算法,你可以计算出这座建筑相对于你的酒店的位置,让你安全返回。我们不考虑一个单一的图像或场景来识别我们在哪里。我们通过回放一系列相连的图像(和记忆)来理解事物,从而导航回您的酒店。
作为澳大利亚机器人视觉中心的一部分,我们已经将同样的“人类”策略应用于机器人。我们使用可扩展的地点识别来匹配机器人主动看到的与数百万先前观察到的图像。单个图像可能不足以提供定位信息。然而,从每幅图像中收集一点一滴的证据,并利用这些证据对序列进行推理,已经显示出定位的巨大前景,即使当图像的外观由于天气、一天中的时间等而改变时。
机器学习拯救世界?
虽然机器学习被用来解决机器人领域的大多数问题,但我们对顺序推理的关注采取了一种稍微过时的路线。正如我们在 2019 年 ICCV 上的工作所示,好消息是,顺序推理优于基于定制深度学习的方法来解决机器人的可扩展地点识别问题。这也让我们大吃一惊!
当前深度学习方法的一个很大的局限性是它们无法推广到看不见的场景。相比之下,我们已经证明了我们的方法在各种不同的测试环境中“开箱即用”。此外,因为在顺序推理中没有学习到的成分,我们的方法不受范围的限制,并且可以通过数百万个图像来了解它们。
前进的道路:接下来的步骤和挑战
自动驾驶汽车将很快在我们的道路上成为现实。为了安全导航,这些未来的机器人每次在道路上行驶时,都需要看到并理解无数的图像。
仍然有挑战需要克服。例如,作为人类,即使在变化的条件下,我们也很容易找到自己的位置。在黑暗或暴风雨的条件下,我们仍然可以在暴风雨的黑夜里看着我们的车窗外,仍然能够确定我们在哪里。然而,当一个位置的外观由于外部/环境因素(光线、天气、障碍物等)而改变时,机器人仍然很难解释图像。
一个更迫切需要克服的问题是的储存。自动驾驶车辆看到的所有图像都需要存储在内存中,以便能够对它们进行顺序推理。
我们目前面临的挑战是提出一种“终身地点识别方法,这种方法将在任何可以想象的情况下——无论天气或时间——大规模地持续运行。我们想结合我们目前对自己位置的了解来预测我们在下一个瞬间的位置。利用这些信息,我们可以限制我们需要推理的图像集。背后的推理是这样的。如果我知道我在阿德莱德中央商务区的某个地方,那么在下一个时刻,我很可能(实际上,在没有传送的情况下是不可能的)会发现自己在珀斯的某个地方。因此,让我们只查看靠近我当前位置的图像,并将其他所有内容标记为“不太可能”。
我们希望通过将顺序分析与内存管理结合起来,我们将能够实现一种方法,使自动驾驶汽车能够在任意大的图像集合中定位自己。
想象一下这个未来场景:自动驾驶汽车可以协同工作,捕捉世界在任何给定时刻的实时快照,以及世界每天是如何变化的。这种大规模的地点识别方法可以通过所有汽车的组合眼睛来观察世界,从而为每辆自动驾驶汽车实现精确定位。
激动人心的时刻,的确!
我们如何描述数据?
描述性来自单词“describe ”,所以它通常意味着描述某事。描述统计学本质上是通过图形表示、集中趋势测量和可变性测量等方法来描述数据。它以一种有意义的方式总结数据,使我们能够从中获得深刻的见解。
数据类型
数据可以是定量的,也可以是定性的。定量数据是数字形式的,可以是包括有限数值的离散数据,也可以是除有限数值之外还包括小数值的连续数据。例如,一个班的女生人数只能取有限的值,所以它是一个离散变量,而产品的成本是一个连续变量。
定性数据不是数字,而是基于面试、考试成绩等方法。它可以是名义数据和顺序数据,其中名义数据不包含任何顺序,如性别、婚姻状况,而顺序数据有特定的顺序,如电影的评级、衬衫的尺寸。
作者照片
我们如何描述数据?
为了描述和分析数据,我们需要了解数据的性质,因为数据的类型会影响可以对其执行的统计分析的类型。
频数分布
它测量观察在数据中出现的次数。例如,包含班级学生性别的定性数据,描述的合适方法是男性和女性的频率。或者,对于关于人的年龄的数据,我们可能想要知道各种年龄组的频率,我们可以将数据分类为连续数据,以构建如下所示的频率分布。
作者照片
相对频率分布
有时,频率并不能给我们一个清晰的数据图像。假设您想知道哪个州的大多数学生注册了数据科学的在线项目。绝对数字可能给出模糊的观点,但是如果你用绝对数字除以注册学生总数,你会得到我们所说的相对频率。所以如果你读到有 200 名学生从班加罗尔市入学,你不知道这个数字是否很高。但是如果你被告知相对频率是 0.8,这意味着 80%的学生来自班加罗尔,你可能会认为这个城市的学生比其他城市的学生更倾向于数据科学。
作者照片
条形图
我们可以将频率分布以条形图的形式可视化,该图以高度或条与它们所代表的值成比例的方式绘制分类数据。我们还可以构建一个分组频率条形图来比较不同年份的不同数据集。这可以帮助我们了解数据中是否存在模式。
作者照片
柱状图
有时,通过取一系列值而不是每个单独的值来表示数据更好。假设我们想看看汽车在城市中行驶的速度。绘制每个速度单位没有意义,比如 60.2 km/h 或 74.3 km/h。因此,我们使用 50-60km/h 等范围来绘制直方图,直方图也使用条形图来以图形方式表示数据,但这里每个条形组都是一个范围。较高的柱表示更多的观察值落入该范围。我们可以通过直方图了解连续数据的形状和分布。比方说,我们想了解某个特定国家(比如印度)多年来的 GDP 变化。下图显示了印度的国内生产总值在过去十年中持续增长。
印度历年 GDP(以十亿美元计),作者照片
请注意,每个条形是一个描述年份的范围,比如 2010 年将涵盖从 2010 年 1 月到 2010 年 12 月的数据。因为它表示范围,所以它隐藏了特定月份的 GDP 等细节。在构建直方图时,必须选择适当的容器大小(也称为类间隔)。就像这里的框大小是一年,我们也可以选择一个季度或一个月。容器越大,容器就越小,分析的粒度就越小,因为它代表的细节就越少。
因此,一个 5 年的范围可能无法提供关于 GDP 在 10 年内如何变化的更深刻的见解。而月度范围将包含更多细节,但分析起来可能会很麻烦。然而,如果我们有数据显示工程师的工资范围,我们想知道有多少工程师属于这个范围。在这种情况下,bin 代表薪金,这是一个很大的数字,因此在这种情况下,bin 的大小越大越有意义,比如$50,000 或$100,000。您可以通过调整参数来绘制一些图表,看看哪一个给出的分析最好。理想的箱尺寸既不隐藏太多细节也不暴露太多细节。
作者照片
现在让我们假设我们想知道哪个国家的失业率更高。X 轴将列出国家和失业人口的绝对数量;然而,绝对数字也取决于该国的人口。像中国和印度是人口最多的国家,因此它们的绝对数字要大得多。因此,我们可以取失业人口的百分比,这将给出一个国家的失业人口比例,这在与其他国家的失业情况进行比较时更有意义。作为一名分析师,尝试分析直方图,看看其中是否有趋势。检查哪个区域的数据更集中,或者哪个区域的值很少或没有值。检查数据的偏斜度,是左偏斜还是右偏斜,即更多的条形分别向左或向右,这可能是得出结论的基本要素。
线形图
连线图是一种图形表示,用于理解分布的形状或趋势。它是通过连接柱状图箱的中点并用线将它们连接起来而构建的。
作者照片
使用线形图优于直方图的一个优点是,很容易在同一个图上比较不同的分布,而使用直方图可能会非常拥挤。图形表示可以帮助分析师做出决定,如是否在机器学习算法中包含一个变量。如下图所示,是学生前测和后测成绩的对比曲线图。它表明,与没有参加测试的学生组相比,如果他们的测试是以前进行的,较少的学生取得了较低的分数,而较多的学生取得了较高的分数。这意味着预先进行测试是提高课堂表现的一个重要因素。
作者照片
我们还可以构建显示累积频率的线图。基本上,频率或相对频率从左到右相加得到累积频率。这在执行一些不能仅通过频率执行的分析时非常有用,例如,如果我们比较两个部分的分数,累积频率可以显示 173,即 16%的学生分数小于或等于 75。
作者照片
作者照片
散点图
到目前为止,我们看到了如何使用变量在数据中出现的次数来描述变量。但是,如果我们想描述两个变量,以便检查它们之间是否有关系呢?散点图是一种非常基本和必要的方法。它使用点绘制两个不同变量的值,其中每个点代表一个特定的数据点。散点图可以让我们了解数据中是否存在模式;积极的趋势表明,随着 x 变量的增加,y 变量也增加,反之亦然。如果数据分布不均匀,这可能意味着变量不相关,所以我们可以在 ML 算法中删除它们。
在某些图中,变量可以如此正相关,看起来几乎是线性关系。在某些情况下,它可以是指数的,这传达了 y 变量随着 x 的增加而快速增加。散点图对于获得能够帮助我们做出关键决策的洞察力非常重要。假设我们构建了一个特定地区的农业用地面积和粮食产量的散点图。这通常会给我们一个正的关系,如果有极端的数据点,即土地面积较大但产量较低,这可能意味着这些土地面积没有得到充分利用,因此可以在这方面采取必要的行动。
作者照片
这些是我们描述数据的一些方法。我希望这篇文章对你有所帮助。感谢阅读!
数据科学课程—【https://padhai.onefourthlabs.in/courses/data-science
你如何给新 GPT 协议产生的学期论文评分?
人工智能将颠覆学术界。这是件好事。
马克·拉贝在 Unsplash 上的照片
不管我们喜欢与否,人工智能将在咆哮的 21 世纪 20 年代彻底改变学术界的每个角落。
我们已经看到强大的语言模型 GPT-2 被用作、创意写作工具、视频游戏引擎、电影评论家。但是这种超级强大的语言模型将如何影响学术界呢?
我们来想象一个本科生,需要围绕这个主题写一篇十页纸的论文:“比较对比威廉莎士比亚的戏剧《暴风雨》中魔法的使用。
由于页面要求和紧迫的截止日期,本科生可以用现成的 GPT-2 版本(每个人都可以在网上看到)拼凑出一篇 B 级质量的学期论文。
在不到五分钟的时间里,我用对话变形金刚生成了两段还过得去的文字:
*The Tempest is an elaborate expression of the famous allegory of time and cyclical nature. With an interesting hybrid style, Shakespeare describes much of the setting of The Tempest in the form of a dream.Shakespeare uses magic in the story to enhance the sense of danger and enmity between the hero and the villain, who in turn use magic to empower themselves. After describing the magic of the island, the plot develops and reveals the native populace to be isolated, unequal, and politically and morally wrong. Both the creator and observer of the magic were major players in the plot, although in different ways.*
只要再多做一点工作,我们假设的学生可以很快用这种还过得去的散文写满 10 页。作为额外的奖励,他们可以搜集一个收集关于《暴风雨》的大学论文的数据集,并按照我的指示在 Google Colab 上对《GPT 2》进行微调。
可能性实际上是无穷无尽的。这些学生不会写 A+论文,也不会获奖,但 AI 生成的文本完全无法被抄袭检测器检测到。
事实上,早在 2005 年,一些麻省理工学院的学生成功地用一个不太复杂的语言模型骗过了一本学术期刊。麻省理工学院新闻报道了这个故事:
“麻省理工学院计算机科学和人工智能实验室 …的几个学生开发了【ed】’SCIgen,‘一个随机生成无意义的计算机科学论文的程序,配有逼真的图表、数字和引文……SCIgen 的工作就像学术上的各种‘疯狂图书馆’,任意插入诸如‘分布式哈希表’和‘拜占庭容错’等计算机科学术语。”"
这是一个机会,而不是灾难
“我不担心学生用 GPT-2 来填充他们的论文,因为他们已经用几乎不加掩饰的抄袭来填充他们的论文了,”Mike Espinos 说,他是诚实教师播客的主持人和第八层教育的教育家。
Espinos 建议我们不要因为学生使用像 GPT-2 这样的人工智能工具而惩罚他们,而是应该把它们作为可教的时刻。他这样向我解释:
“使用 GPT-2 需要你对材料有足够的了解,以确定输出是否合适和适用。如果我在 GPT-2 中放入一个开始语句,可能需要几次尝试才能找到对所写内容的其余部分有意义的东西。使用像 GPT-2 这样的东西的关键学习机会是,它触发了教师需要关注的技能:信息获取和评估。”
今年早些时候,Espinos 使用 GPT-2 撰写了一封电子邮件给他的学术同事。他以这一点结束了这封信:“顺便说一下,这封邮件的大约一半是由一个人工智能程序编写的。我之所以提到这一点,是因为它强调了当你作为读者,甚至不能识别哪些是我写的,哪些是 GPT-2 写的,让我为每件艺术品写一页是多么毫无意义。”
换句话说,我们的学术体系是有缺陷的,强迫学生满足过时的页数要求和记忆信息。我们花了这么多时间担心像 GPT-2 和维基百科这样的数字工具,却错过了一个大好机会:可以解放学生,开创学术创造力的新时代。
埃斯皮诺斯这样总结道:
“在学校,我们仍然要求学生记忆和背诵事实。这是一种过时的做法,需要消除。我们生活在一个不断获取信息的世界,更重要的是培养技能,学会如何解析这些信息以找到有用的部分,丢弃错误的信息,并将这些信息应用于手头的任务。”
我们不应该害怕一个假设的数据科学学生微调 GPT-2 来写令人眼花缭乱的莎士比亚论文的未来,而是应该为 21 世纪的学生使用人工智能和互联网超越死记硬背并创造新东西而鼓掌。
在 Unsplash 上由 Jaredd Craig 拍照
过时的型号
在一次电子邮件采访中,埃斯皮诺斯分享了更多关于人工智能和学术界的想法。
继续阅读,寻找学习未来的新视角!
问:你担心学生用 GPT-2 文本填充论文吗?如果一个学生试图这样做,你会如何回应?
我已经不再把写作的质量和数量联系在一起了。我们应该根据长度来判断学生的过时想法是对学生(以及教育)的侮辱。
我们需要学生表现出理解能力和熟练程度。如果一个学生足够熟练,能够以一种写得很好的简洁的方式达到目标,那么他们在主题和写作技巧上都达到了很高的水平。
如果不告诉他们作业应该有多长,大多数学生都会超过作业的预期长度。
他们会这样做,因为他们更注重展示理解,而不是填充一个人工的单词数。
我批改论文已经很多年了,我可以说一个确定的长度就是你将得到的,仅此而已。达到长度后,工作几乎会立即停止,通常没有完成一个要点或想法。
我不需要知道谁赢了第三届超级碗,因为我可以问 Siri/Alexa/Google。如果某个领域的知识对学习者的日常生活变得重要,那么当他们成为某个领域的专家时,他们就不需要那么频繁地寻找答案了。
学习信息获取和评估将允许个人专注于他们感兴趣的东西,同时仍然向他们提供在其专业知识之外寻找信息的技能。
Brandi Redd 在 Unsplash 上拍摄的照片
获取、综合和应用知识
问:你认为在后 GPT 2 时代,我们应该放弃长度限制吗?有哪些替代方案?
***答:*我们可以用总结性评估代替论文长度,总结性评估要求学生综合信息,并根据他们的理解创造出独特的产品。
此外,我们需要停止认为书面作业是唯一可信的学习成果。
学生可以用各种方式展示自己的知识和理解力,但很少有机会这样做。
如果一名学生想制作一个 YouTube 视频来展示对该主题的理解,或者写一首歌,或者画一幅漫画,会怎么样?想想有多少学生能在学习中获得成功。
关键是要把每一个学生当作一个个体来对待。这听起来显而易见,但教育往往采取一刀切的方法来解决问题,然而所有的教育者都被教导要因材施教。
我认为我们可以鼓励使用 GPT-2,但我担心它会像其他革命工具一样遭到诋毁。维基百科是一个令人惊叹的研究工具,但尽管它被反复证明比传统百科全书更准确,但它几乎普遍受到教育者的质疑。
教育的目标应该是教会学生如何通过获取、综合和应用知识来提高自己。此外,为作业或课程写作需要一系列技能,这些技能不一定与大多数专业环境下写作所需的技能相同。使用 GPT-2 来共同写作将会暴露出他们的作品被其他人解读时的声音。
“拥抱他们学习的方式”
问:你认为 GPT-2 和其他人工智能语言模型会对学者和学生有帮助吗?
***答:*我已经转到行政部门,不再直接参与教学,但我与数百名教师合作,支持他们在课堂上使用技术。当我在会议上发言时,我会推广使用像 GPT-2 这样的工具(这会产生令人惊讶的影响)。
我们正处于一个时间点,教师需要承认他们在使用技术时不如学生熟练。
他们需要停止要求学生在老师感到舒适的补救水平上工作,相反,他们需要努力提高他们的技能,并在他们所在的地方满足学生。
作为教师,我们不能再忽视学生的趋势,必须接受他们学习和表达兴趣的方式。
学生们正在寻找使用技术的新方法,我们必须观察他们的行为来构建我们的课程,以利用他们的技能。
一个例子是谷歌搜索;当我的学生在谷歌上搜索一个新话题时,他们会搜索图片结果,而不是通常的谷歌搜索结果。他们通过视觉获取信息,而不是通过更传统的方式。这意味着他们使用一套完全不同的标准来选择点击什么结果。
今天的学生将决定未来 20 年我们如何与科技互动。
你如何从数据中做出统计推断?
戴维·特拉维斯在 Unsplash 上拍摄的照片
运用推断统计学调查女性工资低于男性的说法
你知道美国人的平均年龄是多少吗?你不用去谷歌。我已经在下面为你做了,
截图来自谷歌搜索
快速的谷歌搜索显示,美国人的平均年龄是 38 岁。你有没有想过人口普查局的统计人员是如何得出这个数字的?你认为他们会亲自或通过邮件去问每个人吗?不是因为仅仅为了找到一些统计数据并把它们大胆地放在他们网站上,这纯粹是浪费时间、金钱和资源。
那么他们是怎么做到的呢?他们使用推断统计学的一些基本原理。
好的,那么在这篇文章中,我们将使用统计推断来寻找以下问题的答案。
女性的工资比男性低吗?
在深入案例研究之前,让我们先了解一下推论统计学的一些皮毛。
推断统计学的一些背景知识
总体: 包含我们实验空间中所有数据点的集合。人口数量用 N 表示。
样本: 它是从总体中随机选择的一个子集——样本量用 n 表示。
分布: It 描述了数据/总体/样本范围以及数据在该范围内是如何分布的。
意思是: 来自你所在人群或样本的所有数据的平均值。这对于群体用表示,对于样本用 x̄ 表示。
标准差 是一个衡量你的人口分布情况的指标——用 σ 表示(适马)。
正态分布: 当你的总体围绕均值以σ标准差完美对称分布时,得到如下钟形曲线。
中心极限定理
来自维基百科:
在概率论中,中心极限定理 ( CLT )确立了,在某些情况下,当添加独立的随机变量时,它们的适当归一化和趋向于正态分布(非正式地为钟形曲线),即使原始变量本身不是正态分布。
下面的视频对中心极限定理有一个非常直观的解释
换句话说,这个定理表明,无论初始总体的形状如何,抽样分布总是接近正态分布。
标准差 是样本均值偏离总体均值多少的度量。
标准误差公式,其中σ是标准偏差,n 是样本量。
【样本量(n) 是样本总体的大小。下图显示了样本大小和标准误差之间的关系。随着样本量的增加,标准误差减小。
虽然选择一个大的样本大小没有问题,但是,这在大多数现实世界的复杂问题中是不可行的。因此,需要一个最佳的样本量。
置信区间 代表我们相当确信我们的总体意味着谎言的值的范围。在下图中,下限和上限都代表置信区间。置信区间之间的区域称为接受区域,而置信区间之外的区域称为拒绝区域。
p 值 是检测结果偶然发生的概率。换句话说,就是我们的总体均值落在拒绝区域的概率。p 值越低,表明测试结果的可信度越高。
显著性水平(α) 是设定的阈值 p 值,用于决定测试结果是否具有统计显著性。显著性水平通常设置为 0.05、0.01 或 0.001。如果测试结果的 p 值小于显著性水平(α),那么我们可以得出结论,所获得的测试结果在统计上是显著的,并且它们不是由随机机会或噪声引起的。
案例研究的数据收集
为了我们的分析,我们将使用从综合社会调查(GSS) 收集的数据,该调查自 1972 年以来主要通过面对面的访谈对美国公众进行年度调查。下面是他们网站上的描述。
GSS 旨在收集当代美国社会的数据,以监测和解释态度、行为和属性的趋势和常数;审查整个社会的结构和功能,以及相关小组发挥的作用;将美国与其他社会进行比较,以便将美国社会置于比较的视角中,并发展人类社会的跨国模式;让学者、学生、政策制定者和其他人能够以最少的成本和等待轻松获取高质量的数据。
GSS 的样本是使用区域概率设计抽取的,该设计从全国城市、郊区和农村的混合地理区域中随机选择家庭受访者。因为使用了随机抽样,所以数据代表了美国人口的整体情况。
好了,现在我们已经准备好了数据,让我们深入案例研究并寻找答案。
案例研究:女性工资比男性低吗?
动机
这是我们社会中一个非常基本的问题。在这个案例研究中,我们将调查这种说法是否站得住脚,或者只是社会上的另一种看法。
数据
对于我们的分析,我们将使用最新的可用调查数据(2018 年)。
我们将使用以下变量进行分析:
- **性别:**这是参加调查的受访者自我报告的性别。
- conrinc :这是回答者经通胀调整后的年收入。
- 年龄:回答者的年龄。
- 种族:这是回答者自述的种族。
- uscitzn :此字段标识被调查人是否为 a)美国公民或 b)非美国公民或 c)出生在波多黎各、美属维尔京群岛或北马里亚纳群岛的美国公民或 d)在美国境外出生,父母当时是美国公民或 e)不知道。
我们执行以下数据清理来最终确定数据集:
- 年龄的最大值被设置为 89,因为我们有“89 及以上”这样的字段,这给我们的分析带来了困难。
- 我们创建了一个指标 uscitzn_ind ,如果回答者是美国公民(无论他们出生在美国境内还是境外),则取 1;如果回答者不是美国公民,则取 0;如果源字段中有无效值,则取-1。
- 我们注意到一些受访者报告他们的年收入为 0 美元。他们要么不工作,要么休息,要么呆在家里。因此,我们将从我们的分析中删除这些数据点。
探索性数据分析
让我们看看最终数据集的形状:
- 我们总共有 1363 个数据点。
- 我们有 646 名男性和 717 名女性。
让我们把数据分成两组;A 组有男性,B 组有女性。这是我们初始人口的分布。
男女人口分布
我们可以从初始人口分布中得出以下结论:
- 两组都是右偏分布,因此不是完美的正态分布。
- 男性人口平均数为 44K,女性人口平均数为 29K。
推理
我们首先定义我们的假设:
- H0(零假设): 男女的平均差异为零。
- H1(交替假设): 男女之间的平均差异大于零。
首先,我们需要为每组得出一个理想的样本量。使用下面的代码,我们计算两组的样本大小。
对于 95%的置信区间和 5%的误差,我们计算出 A 组(男性)的理想样本量为 242,B 组(女性)的理想样本量为 251。这是期望的置信度和误差规格所需的最小样本量。
使用下面的代码,我们将为两个组创建抽样分布:
这是两组的样本分布结构:
男性和女性的抽样分布
这些现在是完美的正态分布!由于中心极限定理,任何总体的抽样分布都呈正态分布。
不管总体分布的初始形状如何,抽样分布将接近正态分布。随着样本量的增加,抽样分布将变得更窄且更正态。
从抽样分布中,我们观察到男性的平均收入大于女性的平均收入。同样,它们的平均值之差为 14706.00。这是否意味着我们证明了这一说法?还没有,因为我们还不能确定从样本中获得的结果不是偶然的。
因此,为了确定我们的说法,我们对两个独立的样本比例进行了单侧 t 检验。t 检验需要以下检查条件:
- 独立性条件: GSS 数据基于随机抽样,因此我们确保两个样本组相互独立。
- 样本量条件: 每个样本量至少需要 30 个服从正态分布。我们确保我们两个组的样本量都远远超过 30。此外,我们确认我们的样本分布都是完全正态的。
使用下面的代码,我们计算 t 统计,自由度,临界值,p 值。
我们可以从 t 检验结果中做出以下解释:
- 较大的 t 值表明两组的均值差异较大。
- 每个 t 分数都有一个 p 值,p 值是样本数据结果偶然出现的概率。由于 p 值远小于我们期望的显著性水平α=0.05,因此测试结果具有统计学显著性,我们可以拒绝两组平均值相等的无效假设。因此,我们可以接受另一个假设。
有显著的统计证据表明,女性的收入低于男性。在显著性水平为 0.05 时,我们可以确定测试结果不是随机的。
置信区间
此外,我们可以使用以下公式计算均值差异的置信区间:
这里,s1 和 s2 是两个样本组的标准误差,n1 和 n2 是两个组的样本量。
使用下面的代码,我们计算 95%置信水平的置信区间。
我们观察到两组的均值差异很好地落在这个置信区间内。
更多有趣的见解
通过对不同的横截面组重复相同的分析,我们可以得出以下观察结果:
白人男女: 一般来说,白人女性的平均收入是白人男性的 65%左右。139 的 t 值也表明了巨大的差异。
黑人男女: 性别薪酬差距在黑人人口中并不十分显著。一般来说,黑人女性高达黑人男性的 95%。
移民男女: 对于移民人口来说,这种差别更大。一般来说,移民女性的收入只有移民男性的 48%。
千禧一代男女: 千禧一代女性的收入高达千禧一代男性的 69%。
中年男女: 区别对于中年人群来说还不算太差。中年女性的收入高达中年男性的 72%。
老年男女: 这种差别对于老年成年人、退休人口来说又变得更糟了。一个老年女性的收入只有老年男性的 58%。
结论
根据我们的研究结果,有显著的统计证据表明,女性的收入低于男性。
用于分析的所有代码和数据都可以从 GitHub 库下载。
您如何展示您的数据科学解决方案?
如何通过机器学习准备信用风险建模报告的示例
周末是尝试机器学习新事物的时间,让这段时间变得有价值。记录机器学习方法和解决方案并与利益相关者分享是很重要的,就像最初设计它一样重要。
在今天的帖子中,我们将创建一个关于“信用风险建模”的 ML 解决方案的报告(这里领域偏好是明显的)。
让我们试一试。
第一步也是最重要的一步是彻底理解业务目标。对 ML 解决方案的期望是什么?
初步问题集:
有多少数据可用,有什么模式吗,在预测目标变量时是否足够?在现实生活中,是否有其他变量在决策中起着重要作用,但却不是可用数据集的一部分?可以找到它的来源吗?或者有没有一种方法可以代理这些信息?ML 算法可用的数据是否类似于生成预测的生产数据?换句话说,训练和测试数据是否来自相似的分布,从而能够很好地学习依赖关系,以预测看不见的实例?还有更多…
当我们着手解决这个问题时,我们会试着涵盖所有这些问题,所以请关注:
目标:
了解历史上不同借款人的特征和属性与其还款状态之间的关联,即其是否会导致好的风险或坏的风险。
信用风险的定义:
这是目睹债务违约的风险,可能是由于借款人未能支付所需款项而产生的。
目标变量:
良好(1 级,信誉良好)与不良(0 级,信誉不佳)风险。
数据描述:
包含 10 个变量的 1000 条记录
数据描述
理解数据是关键,确保理解每个变量的描述,例如:
- “信用记录”有 5 个值(0 到 4),但是它的普通性与信用风险有什么关系。值为 0 是否意味着信用记录较差,而值为 4 是否意味着信用记录较好?这类问题应该尽早提出,因为它们在进行探索性数据分析时设定了前提。
- 另一个快速浏览的数据总结告诉我们,“储蓄账户”有一个类别是 Nan。调查 Nan 意味着什么-缺少值或真正的数据条目。此处,“南”条目对应于“无储蓄账户”。
检查训练和测试数据分布:
ML 数据建模中最关键的假设之一是训练和测试数据集属于相似分布,如下图所示。请注意,列车数据用作估计客户未来信用价值的参考,因此 ML 解决方案是概率性的,不能基于过去的数据得到保证。这强调了ML 解的推广性质
- K-S 统计量是一个数值度量,用于检查两个分布是否相同的零假设。小于 p 值的 K-S 统计值表明我们不能拒绝两个分布相同的零假设。
K-S 统计量
“年龄”变量
‘贷方金额’
蓝色直方图来自训练数据,绿色直方图来自测试数据,来自两个分布的直方图彼此有明显的重叠,意味着没有明显的漂移(或者换句话说,它们来自相似的分布)。
探索性数据分析:
让我们看看有多少缺失的记录:
空值
只有“储蓄账户”变量有 Nan 条目,我们最初的数据挖掘在这里很方便,我们能够通过用另一个类别“无账户”替换它们来处理这些 Nan。
此外,在撰写报告时,尝试创造性和创新性的方法来呈现分析,报告很有可能会被各种类型的受众(利益相关者)接受。
由于我们可能事先不知道报告的最终用户,因此在不丢失核心分析的情况下,尽可能简单地解释 ML 解决方案工作流程是很好的。
为此,我尝试如下:
- 在初始幻灯片中设置正确的上下文,这样就不会出现空白。
- 随着您在报告中的进展,逐渐增加复杂程度(也称为技术细节)。
- 它有双重好处——读者对最初幻灯片中相对较少的复杂细节感到自信,并能够根据初步理解从接下来的幻灯片中挑选相关信息。
- 此外,尽可能用可视化来帮助分析。
将分析放入报告的方法
重点应该是写一份简明的报告,同时不遗漏任何技术细节。
假设:
在你的分析中总会有一个点,在那里你需要打个电话来做出一些适合 ML 建模的假设。
总是强调这些假设背后的基本原理。如果它也呼应了业务同意,它会变得更令人满意。
例如,我们想检查年轻人是否更有信用。一种可能的方法是将变量“年龄”分为 3 类,如下所示。从 ML 建模的角度提供基本原理也让企业从技术的角度瞥一眼他们的数据。
在这里,我选择了 45 年来标记第二个 bin 的截止时间,很可能是 50 年(因为 50 年听起来更合理地假设人们厌恶贷款),但趋势分析没有足够的样本量来得出结论。因此,我倾向于采取中间立场,以 45 岁为年龄界限来对变量进行分类。
报告中的 EDA 快照
交叉验证:
通常,在验证数据上检查从训练数据学习的依赖性,以基于预先决定的评估度量来选择模型。然后,部署选定的模型,对测试数据进行预测。交叉验证将训练数据迭代地分成多个折叠,并保留一个折叠用于验证,我在分析中使用 5 折叠 CV。
决定评估指标:
它具有巨大的意义,需要一开始就与业务部门进行讨论。例如,在信用风险预测中,业务要求是如果客户被分类为好风险,则对预测给予更多惩罚,而实际上他们带来了坏风险。
业务案例的成本矩阵如下所示:
请介绍一下您的背景,所有指标都适用于这个问题:
在查全率和查准率没有偏好的情况下,一般采用 f 分值作为评价度量:2PR/(P+R),其中
- p:精度:专注于减少假阳性(FP)
- r:召回:专注于减少假阴性(FN)
在环境设置之后,解释您缩小范围的最终评估指标,并解释这种选择背后的原因。我使用Fβ分数作为评估指标,其中β表示回忆的权重。F1 分数与 Fβ分数相同,β= 1。
- 如上所述,当客户是坏风险时,将他们分类为好风险是有成本的,即预测好风险(第 1 类,正类)时,如果它是假的,即假阳性(FP)会根据我们的业务目标受到严厉处罚
- 精度= TP/(TP+FP),所以我们的目标是优先考虑精度,这转化为减少 FP。因此,我们需要更加重视从β< 1 获得的精度。
随意提供一些额外的知识(这没什么坏处),这些知识可能不是来自于商业,但却是值得讨论的。
- 如果目标是在预测不良风险是良好风险时给予惩罚,那么基于这样的 ML 建议,我们将能够避免因限制贷款而造成潜在的业务损失。
- 在这种情况下,重点将放在假阴性(FN)上,即当客户处于良好风险类别时,您预测的是不良风险(0 级,负级)。因此,我们预测了负的错误,这意味着更多的重点应该放在减少 FN 上,这反过来会导致更多的回忆权重(TP/TP+FN)
管道流量:
从原始输入数据通过数据处理管道到模型选择再到预测,直观地呈现您所采取的所有步骤的摘要被认为是很好的。这一步将所有组件连接在一起是我个人最喜欢的,因为它带来了一个抽象层次,并给出了完成最终预测所做的事情的清晰画面
ML 管道流量
解释预测:
最后,这一切都归结于你如何解释这些预测。在给出你选择的模型“可解释性框架”的背景后,给出解释“为什么”的描述:
模型可解释性
请注意,没有一种方法可以接近 ML 解决方案,因此,即使是制作报告,这也是我提出解决方案的方法。希望它对你有一些价值。
我愿意与读者交流,从他们的经历中学习,这是交流结果和方法的更好、更有效的方式。
报告和 Jupyter 笔记本放在这里。
到那时,快乐阅读,快乐学习!!!
哪些比较重?狗还是猫?
机器学习的应用统计学
图片由来自 Pixabay 的 Michal Jarmoluk 拍摄
狗比猫重吗?如果你认为答案是肯定的,你将如何从统计学上证明它?
如果你不熟悉科学过程,这个问题对你来说可能看起来很简单。你可能会想到称 20 只狗和 20 只猫的体重,计算狗和猫体重的平均值,然后简单地比较结果。如果猫的平均数是 9 磅,狗的平均数是 18 磅,你可以说:“狗比猫重。”当事情明朗时,这种方法可能会奏效。但是如果猫的平均值是 9,狗的平均值是 10,你能确定狗比猫重吗?如果你在比较 9.1 的平均值和 9.2 的平均值呢?
案例并不总是像比较狗和猫那样简单。科学过程有许多重要的应用。假设您正在研究一种针对癌症患者的新开发的治疗方法,并且结果彼此非常接近,您将确定一个阈值来决定这种治疗方法是否在统计学上显著减少了癌细胞。你不会期望发现治疗癌症的奇迹。你只是期望病人的情况有显著的改善。
让我们回到我们可爱的狗和猫身边。
来源吉菲作者 M OODMAN
统计分析
我们的问题是:狗比猫重吗?我们回答这个问题是在做哪种分析?
统计学中有两种分析。
描述性分析
描述性分析给出以某种方式描述数据的信息。我们以更有意义的方式呈现数据,并对数据进行更简单的解读。
我们使用两种主要的测量方法来描述数据:
- 集中趋势的测量:平均值、中间值和众数。
- 传播的测量:标准偏差,绝对偏差,方差,范围和四分位数。
推理分析
推理分析是从一个样本中了解一个群体的情况。它允许我们从数据中做出推论。我们从样本中获取数据,并对总体进行归纳。
在推断统计学中,我们无法证明某些东西,因为我们没有总体数据,但我们可以通过展示样本数据中的一个例外来反驳某些东西。
- 估计参数:我们从样本中提取一个统计量并预测一个总体参数。
- 假设检验:我们提出一个无效假设和一个替代假设,并使用样本数据来回答总体问题。
我们在回答猫狗问题的同时,也在做推理分析。因为我们试图通过对两个样本的描述性统计数据进行概化来对所有狗和所有猫的种群参数进行推断。
假设检验:
一个假设可以被认为是我们正在测试的一个想法。假设总是关于总体参数,而不是样本统计。
我们试图证明狗比猫重,我们以这种方式设定假设。
虚假设
零假设是我们正在测试的想法。
“狗没有猫重.”
“狗和猫的平均体重与相等”
"猫和狗的平均体重没有差异."
替代假设
另一个假设是我们正在测试的想法。
“狗比猫重。”
“狗的平均体重比猫多
“猫和狗的平均体重有显著的差异.”
抽样
确定样本量
说到样本量,我们说“样本越多,结果越好”。但是更多的样本意味着更复杂的研究、更多的钱和更多的时间来完成我们的研究。
因此,我们确定置信水平、误差幅度和人口规模,并计算最小样本量来完成我们的研究。
这里的是一个在线样本量计算器,用于计算统计推断的最小样本数。
有偏样本
当总体中的一个或多个部分比其他部分更有可能在样本中被选中时,就会出现有偏样本。无偏的样本必须能代表整个总体。
图片来自 Pixabay 的 Petr Ganaj
如果选择不同国家的宠物猫和流浪狗,决定猫比狗重也不是不可能。
图片来自 Pixabay 的 Andreas Almstedt
猫和狗的品种
品种呢?猫的体重没有很大的差异(5 磅到 15 磅),但是对于狗来说,体重可以从吉娃娃的 3 到 6 磅变化到爱尔兰猎狼犬的 180 磅。
男性和女性重量
男性的体重比女性重。我们需要对我们人口中的亚群体保持谨慎。
取样方法
简单随机抽样
简单随机抽样是一种方法,在这种方法中,人口中的每个成员都有平等的机会被选中。SRS 是理想的抽样方法,但是由于许多原因,我们有时不能从总体中进行随机抽样。
对于狗和猫的情况,我们可以使用随机抽样,但我们需要确保我们有足够的所有品种的样本。
分层抽样
我们把人口分成类似的阶层。在每一层中,我们取一个 SRS 并组合 SRS 以得到完整的样本。
在猫狗分析中,分层抽样是一种易于实现的解决方案。我们的阶层是猫狗品种。我们从每个品种中随机选择足够数量的狗和猫。
我们也需要划分女性和男性阶层。如果世界上有相同数量的雄性和雌性狗和猫,我们就取相同数量的雌性和雄性动物作为样本。世界上雌雄猫或狗的数量相等吗?这是另一个统计分析的主题。
巢式抽样法
集群是一组有共同之处的主题。在整群抽样中,我们将人口分成自然群体。我们假设这些群体代表了人口。我们可以根据它们的位置创建集群,并执行 SRS。整群抽样是高效且经济的,但是该群可能不代表总体,这可能导致较高的抽样误差。
在猫和狗的情况下,我们可以选择一个邮政编码,找到这个邮政编码中的兽医诊所,并找到来到这些兽医诊所的猫和狗的体重。这比在世界各地寻找随机的兽医诊所容易,但是不同的品种和体重会导致抽样偏差。有必要找到尽可能多的集群(邮政编码)。
系统抽样
我们不是完全随机选择,而是按顺序选择。
在我们的例子中,我们可以在以零结尾的邮政编码中选择宠物商店,并从那里获取样本。
方便性选样
方便抽样也称为随机抽样、机会抽样或偶然抽样。你选择最简单的方法来获取你的样本。
在我们的例子中,如果我们去最近的宠物店、兽医诊所或动物收容所,并获得猫和狗的重量,我们就做了方便取样。很容易获得样本,但获得有偏差样本的可能性很高。
抽样误差
抽样误差是样本和总体之间的差异。即使我们使用最好的抽样方法,也可能出现抽样误差。为了减少抽样误差,我们应该尽可能地增加样本量和随机化选择。
非抽样误差
非抽样误差是除抽样误差之外的所有形式误差的总和。
在计算动物的重量时,我们可以计算出测量误差*。我们甚至可以在数据输入期间制造处理错误。*
我们可以在数据清理过程中进行调整误差*。例如,来自美国以外国家的动物的重量单位将会是公斤。我们在把千克换算成磅时可能会出错。*
误差概率
在科学过程中,你可以得出一个结果,但你需要澄清偶然得出这个结论的概率。
显著性水平
显著性水平(Alpha 阈值)是当零假设为真(I 型错误)时,您认为它是错误的概率。alpha 值为 0.05 表示当您拒绝零假设时,您愿意接受 5%的出错几率。
汇总统计数据
集中趋势
我们通过计算平均值、中值和众数来总结数据的位置。在每种情况下,我们都应该决定哪些汇总值最能代表分布。
在猫狗问题中,计算平均值似乎是最合适的统计。
传播的度量(变化)
传播的度量告诉我们数据是如何在中间传播的。均值、中值和众数如何表示数据?
范围
该范围采用数据集中的最小数字,并从数据集中的最大数字中减去该数字。这个范围给了我们两个极端之间的距离。范围越大,数据越分散。
在我们的例子中,狗的体重范围大于猫的体重范围。
四分位数间距(IQR)
IQR 查看中间 50%数据的分布,并给出核心值的概念。IQR 是第一和第三个四分位数之间的差值。
我们可以使用在线计算器来计算我们的狗和猫体重的 IQR。
差异
方差衡量数据点围绕其平均值的离差。
样本方差等于观察值和样本平均值之间的平方距离之和除以观察总数减 1。
数据点越接近平均值,我们获得的方差就越低。正如我们上面提到的,狗的方差会比猫的方差大。
标准偏差
标准差是方差的平方根。这是数据集可变性中最常见的可变性。
在大多数统计中,标准差比方差更有意义。因为方差有平方单位,结果不如标准差有意义。
在猫和狗的例子中,我们的方差单位是磅平方,标准差单位是磅。因此,标准差告诉我们更多关于数据在可解释单元中的分布。
变异系数(相对标准偏差)
变异系数等于标准偏差除以平均值。我们需要相对标准差来比较两个不同数据集的方差。
在我们的案例中,我们使用相对标准偏差来比较猫和狗体重的变化。
选择正确的统计检验
有大量的统计测试,其中一些是学生的 t 检验,曼惠特尼 U 检验,卡方检验,相关性检验, K-S 检验,和方差分析。
我们通过问这些问题来选择正确的测试:
- 数据是名义的(分类的),顺序的还是数量的(区间比)?
- 我们有多少样品?
- 我们想证明什么?我们分析的目的是什么?
在我们的例子中,重量是定量数据。因此,如果我们有超过 30 个样本,我们使用学生的 t 检验,如果我们有少于 30 个样本,我们使用 Mann- Whitney-U 检验。(这个有争议!)
t 值用于测量平均值相对于样本数据变化的差异大小。
当因变量是连续的,但不是正态分布时,Mann-Whitney-U 检验比较两个独立组之间的差异。**
神奇的数字:
为什么我们要根据一个数字来选择考试?t 检验假设数据具有正态分布。但是,如果样本容量小于 30,我们就不能检验正态性。
解释结果
找到 t 统计量和 p 值后,我们将 p 值与我们在分析开始时确定的阈值进行比较。
p 值是犯第一类错误的概率。p 值告诉我们,如果零假设为真,得到这样一个结果的概率。例如,如果 p 值为 0.01,这意味着即使假设为真,也有 1%的几率拒绝零假设。
如果 p 值小于阈值,我们能够拒绝零假设。
如果 p 值大于阈值,我们不能拒绝零假设。
结论
你读了一篇关于数据分析的应用统计学评论。我们问了一个非常简单的问题,并概述了数据科学中使用的许多统计概念。
狗比猫重吗?我们还没拿到数据呢!我要去最近的动物收容所给猫狗称重。
你应该对我说:“住手!你犯了一个方便的错误!”
你是如何在 Kickstarter 上成功的?
项目成功的探索性数据分析
图片由 Immo Wgmann 提供
简介
你是否在计划一个特别的项目,比如一部电影、一张专辑、一部戏剧,甚至一家餐馆?如果是这样,那么在一个融资平台上展示你的想法可以增加你实现想法的机会。Kickstarter 就是这样一个平台,在这里,富有想象力、创新性和雄心勃勃的项目通过其他人的支持得以实现,这些人被称为支持者。
支持者承诺通过资助项目,不仅帮助他们实现,而且支持一个创造性的过程。项目创建者通过提供独特的奖励来感谢支持者的支持,奖励包括将项目的一部分分享给支持者社区,如限量版或折扣。
我第一次听说这个平台是在我点击一个名为 MagicLingua 的未来语言学习应用的广告时。这个链接把我带到了这个应用的 Kickstarter 页面,其中包括通过说而不是打字来学习外语。不管怎样,在它启动的时候,420 个支持者承诺€53051 来帮助实现这个项目。这款应用在应用商店有售,并且有一个网站。现在我正在通过这个应用程序学习德语,我有点希望我是一个支持者。
图像由 MagicLingua 提供
虽然许多项目看起来令人兴奋,但也有一些项目最终没有实现。总的来说,令人惊讶的是,Kickstarter 项目失败的比成功的多。为什么?一些原因包括:他们没有达到他们的目标,他们没有达到他们的目标,他们没有获得他们前进所需的资金。这并不一定意味着你的想法最终会失败。从好的一面来看,达到目标的项目筹集到了几百到几千甚至几百万美元的资金。此外,只要你从其他成功或失败的人那里学习,你就可以开展一项运动,为你带来成功。
图 1 —项目成果的相对频率(图片由作者提供)
为了了解 Kickstarter 项目的结果,我使用了该平台的项目数据来探索对支持者和项目目标的影响。本次分析使用的数据涵盖了 2009 年至 2018 年的 378661 个项目和 19 个变量。这些变量包括项目名称、主要类别、次要类别、国家、截止日期、启动日期、承诺金额、支持者数量、项目状态(结果)、目标和国家。本帖将重点讨论以下问题:
1—哪些项目类别更有可能成功?
2—项目结果和筹款目标之间有什么联系?
3-哪些类别在支持者中很受欢迎,其中哪些子类别远远落后于他们的目标?
第 1 部分:哪些项目类别更有可能成功?
数据有两个类别变量—主要类别和次要类别。对于这一部分,我将把重点放在主类别上,因为它的层次较少。最常见的类别是电影&视频、音乐、出版、游戏和技术。
图 2 —根据数据显示的主要类别频率(图片由作者提供)
鉴于项目成功的频率较低,有一些类别的成功频率较高。这些主要类别是漫画、戏剧和舞蹈项目。漫画的成功概率是 0.53,舞蹈项目是 0.61,戏剧项目是 0.6。如果你的项目想法属于这三类,你可能会有好运气。另一方面,其他类别失败的几率要高得多,尤其是新闻、技术和食品项目。
图 3 —按主要类别划分的成功/失败概率(按作者划分的图片)
回头看图 2,漫画、戏剧和舞蹈项目是 Kickstarter 数据中出现频率最低的项目,这很好地解释了为什么这些类别具有较高的成功概率。此外,更频繁的类别最终的成功概率明显更低还有其他原因。未来将探讨的因素包括项目筹资目标、支持者人数等。
第二部分:筹款目标如何促成项目成功?
Kickstarter 项目失败的一个最常见的原因是他们的融资目标太高。该平台的融资流程由一个要么全有要么全无的模式组成——如果一个项目没有达到目标,资金既不会被收取,也不会从支持者的银行账户转移。这便于支持者在确信项目会成功的情况下为项目认捐资金。
因此,如果承诺的金额超过了目标,那么它很可能成功了。否则,它很可能不会前进。根据 Kickstarter 的数据,从 2009 年到 2017 年,大约 36%的项目达到了筹款目标。
图 4——与项目状态相比,按目标划分的项目成果(图片由作者提供)
对于达到目标的项目,98%成功了,1.2%未定义,不到 1%被取消或暂停。另一方面,对于没有这样做的项目,16%被取消,82.7%失败,不到 1%被暂停或未定义。因此,我们可以看到,与承诺金额相比,目标金额也是项目成功的一个指标。这个变量可以被称为“目标结果”现在,让我们来看看这两种结果在目标金额方面是如何比较的。
根据图 5,左边的条形图表明成功的项目往往有稳定的年平均值,每个条形图顶部的置信区间较小,这表明估计值的可变性很小。这些估计还意味着,要想成功,创作者往往会设定目标,不仅给观众灵感,还能让他们相信目标是可以实现的。
另一方面,不成功的项目包含反映钟形曲线的年平均值。右边的图表包含了更宽的置信区间,不像左边的图表。按年度细分,年度目标往往显示出更高的可变性,这意味着这些目标的变化很大,从接近零到数千到数百万到数亿美元。考虑到这一点,当一个成功项目的最高目标仅仅是 200 万美元时,有多少人会承诺一个成本超过 1 亿美元的项目呢?
图 5 —按年份划分的平均筹款目标(2013–2017 年)(图片由作者提供)
根据上面的图表,项目成功的概率随着资金目标的增加而降低。因此,无论你的项目看起来多么令人兴奋,你都希望在规划阶段接触尽可能多的人,尤其是如果你必须筹集近 100 万美元的资金。如果你有良好的进展,支持者愿意承诺,这取决于你的最后期限。
第 3 部分:哪些类别在支持者中很受欢迎,其中哪些子类别远远落后于他们的目标?
项目成功的另一个主要因素是支持者的数量。支持者承诺为项目做贡献有几个原因,包括支持朋友的项目,支持他们钦佩的人的新努力,受项目想法的启发,以及项目奖励的激励。支持一个项目不像购买一个产品,而是承诺支持他们希望在现实世界中实现的创意。
当谈到目标结果时,项目类别显示不同的支持者分布,其中较成功的项目比不太成功的项目有更多的支持者。具体来说,我们可以在下面的热图中看到一些成功的类别中的黑点。
图 6 —热图:按项目类别和项目成果划分的平均支持者(图片由作者提供)
相对而言,游戏项目通常平均有 807 名支持者,此外还有 716 名技术支持者和 609 名设计支持者。更有趣的是,这种类别顺序在失败的项目中几乎相同,游戏项目除了设计方面的 33 个以外,平均有 47 个支持者,技术项目有 21 个。
承诺的金额与支持者的数量有很强的线性关系——支持者越多,承诺的金额越高。因此,一个有趣的后续问题是:在三个主要类别中,子类别在多大程度上偏离或超过了它们的目标?换句话说,相对于项目子类别,承诺金额和目标金额之间的资金差异如何?资金差额的计算方法是从承诺金额中减去项目目标金额(承诺金额-目标金额)。这种差异对于不成功的项目是负的,对于成功的项目是正的。此外,这些方法根据项目的结果来衡量项目错过或超过目标的程度。
看看游戏、技术和设计类别,下面的条形图按子类别和目标结果显示了平均资金差异。对于游戏项目,八个子类别中有四个非常突出。平均而言,直播游戏未能实现其目标约 208,969 美元,而游戏硬件和视频游戏分别未能实现约 90,062 美元和 83,939 美元。另一方面,游戏硬件超出目标 130,492 美元,因为桌面游戏和视频游戏分别超出目标 45854 美元和 38552 美元。
对于技术子类别,最有趣的是太空探索,它落后于其目标 895,744 美元,因为机器人仅落后 109,043 美元。从积极的方面来看,超出目标最多的子类别包括 3D 打印、相机设备、制造工具、可穿戴设备和声音项目。
对于设计项目来说,最落后于目标的两个子类别是建筑和市政设计项目。建筑项目平均落后 547,242 美元,而市政设计项目落后 229,955 美元。似乎超出他们目标的子类别是产品设计、一般设计和印刷项目。
图 7-游戏、技术和设计 Kickstarter 项目的子类别资金差异(图片由作者提供)
平均超出或下降的金额让我们了解子类别在财务上的表现以及这些项目的成本。此外,该分析将目标、支持者和承诺金额放在一起。所以,如果你的项目涉及太空探索,要小心达到你的目标会非常困难。然而,如果你的项目是建筑、市政设计或现场游戏,难度会小一些。由于游戏项目是最受欢迎的,游戏硬件和桌面游戏在 Kickstarter 上展示会非常酷。
结论
在这篇文章中,我们通过对 Kickstarter 历史项目的数据分析,从三个不同的方面考察了 Kickstarter 项目的成功。
- 成功概率最高的主要类别是舞蹈、戏剧和漫画项目,尽管它们属于最不常见的类别。
- 项目目标在项目成功中起着重要作用。每年,成功的项目与不成功的项目相比,目标金额的差异要小得多。这表明每个创造者必须设定一个目标,让支持者对他们的成功充满信心。
- 最后,我们发现在游戏、设计和技术项目中,哪些子类别落后于或超过了它们的目标。这向我们展示了哪些项目子类别的财务表现。
这些观察结果可以让你对 Kickstarter 如何工作有一个基本的了解,以及你脑海中的潜在想法是否能在这个平台上成功。
用于此分析的代码可以在这里找到。
神经网络是如何学习的?
在本系列的第二部分中,我们将讨论神经网络如何通过向前和向后传播来更新权重和偏差,以适应训练数据。这些可以用来预测未来的数据,这是以前没有过的。
在 第 1 部分——为你的神经网络 使用正确的维度中,我们讨论了如何为你的神经网络架构中的向量和矩阵形状选择一致的约定。虽然不同的软件实现可能使用不同的约定,但是有了坚实的理解,就很容易知道需要什么样的预处理来适应模块设计。
当建立你的人工神经网络时,一个令人沮丧的错误是得到向量的形状和…
towardsdatascience.com](/using-the-right-dimensions-for-your-neural-network-2d864824d0df)
在这一部分,我们将扩展我们的知识,以了解神经网络如何通过提供的训练集进行学习。我们将在本文中使用单隐层神经网络来说明下面的关键概念:
- 线性函数和非线性激活函数
- 使用权重和偏差的随机初始化开始滚球
- 使用正向传播来计算预测
- 使用损失函数来计算我们离地面真相有多远
- 使用反向传播使每个权重和偏差更接近事实
- 冲洗并重复——就这么简单!
在本文中,我们将构建一个简单的二进制分类器架构来预测图像显示的是猫还是非猫(出于某些原因,几年前开始 ML 的人一定喜欢猫——你看到的许多例子都涉及这些可爱的动物!)
整体单层架构
架构快速概述
训练集的原始形状是(209, 64, 64, 3)
,代表猫和非猫的 3 通道 64 乘 64 图像。探索数据的 Google Colab 脚本可以在下面找到,尽管本文不会深入研究构建前馈神经网络的完整代码。我们将在下一篇文章中讨论代码实现。
阅读并探索训练数据集
在最后两个代码块中,我们将维度减少到一个黑白通道,以保持简单。在未来的文章中,我们将探索卷积神经网络(CNN)如何更好地完成图像识别任务,因为它保留了图像二维中的像素关系。现在,我们将在训练集中展平图像,得到一个形状为(64*64, 209)
的输入矩阵。
可训练参数的数量
对于每个训练示例,输入包括 4096 个特征,每个特征表示原始图片中的一个像素。
隐藏层由 8 个神经元组成。回想一下我们在第 1 部分中的约定,权重矩阵的形状为(8, 4096)
,偏差向量的形状为(8, 1)
。总之,这个简单神经网络的隐藏层总共有(8 * 4096) + 8 = 32,776
个可训练参数。
输出层包括单个节点,因此输出节点的权重矩阵具有(1, 8)
的形状,产生 9 个可训练参数(8 个权重和 1 个偏差)。
因此,该模型总共有可以训练的32776 + 9 = 32,785
参数。
每个神经元都有一个形式为z = wᵢxᵢ + b
的线性函数,在上面的例子中 i 代表从 1 到 4096 的值。然后,将每个结果传递给非线性激活函数g(z)
。
在我们的例子中,这会产生一个形状为(8, 209)
的矢量,它将被输入到输出层。我们示例中的输出层是一个执行二元分类的单个节点。
现在,让我们浏览一下关键概念,以了解神经网络如何通过这种架构进行学习。
线性函数和非线性激活函数
如果我们观察每个神经元,我们会发现既有由z = wx + b
表示的线性函数,也有非线性激活函数。这种简单的设置允许非线性拟合,同时保持功能简单。
正如您将在稍后讨论反向传播时看到的,我们使用导数来最小化预测损失,并相应地调整权重和偏差。线性和非线性函数的这种简单使用允许我们实现期望的非线性,同时保留使用链式法则来容易地计算导数的能力。但我们稍后会谈到这一点。
我们在第 1 部分讨论了使用 sigmoid 函数作为激活函数。该功能定义为:
Sigmoid 函数
sigmoid 函数不常使用,因为使用 ReLU(整流线性单元)有更有效的实现方式,我们将在后面介绍。然而,由于其输出被限制在 0 和 1 之间的性质,它对于二进制分类任务仍然是有用的。
像这样的函数也会遇到通常所说的 消失渐变问题 。在输入值的极值处,函数的斜率接近 0。如果您还记得,我们将在反向传播过程中使用导数来最小化损耗参数。当输入值较大时,这些激活函数会带来挑战,导致导数(斜率)接近于零。这导致非常小的增量,意味着非常慢的学习!
这也是我们通常将输入标准化为通常在-1 和 1 之间的值的部分原因。当我第一次开始学习这个话题时,我不知道为什么需要这个…数字就是数字,对吗?大多数文献仅指出,当输入被缩放到-1 和 1 之间或 0 和 1 之间的一个数时,网络将表现得更好,这取决于场景。
理解消失梯度问题让我们对为什么建议标准化输入有了一些了解。
如今更常用的激活函数是整流线性单元(ReLU)。数学上,ReLU 可以定义为:
整流线性单元
有趣的事实:从技术上讲,当 x 正好等于零时,梯度是不存在的。但是这种情况发生的概率非常小,如果发生这种情况,你可以通过编程将梯度设置为 0。不是真正的实际问题。
通过编程,可以很容易地将它定义为 0 和输入值的最大值。
g(z) = max(0, input)
该激活函数在反向传播期间的另一个附带好处是,对于任何非零值,该函数的斜率简单地为1
。尽管对于正值可以避免消失梯度问题,但如果其中一个神经元上存在较大的负偏置(实际上,该神经元将停留在负侧,并始终输出值 0),它仍会导致所谓的“死亡 ReLU”。这个神经元实际上是“死亡”的,因为它不再在拟合过程中起作用。
一些实现使用称为泄漏 ReLU 的混合方法来解决这个问题,其中:
泄漏 ReLU
对于本系列,我们将只对隐藏层使用 ReLU,对输出节点使用 sigmoid 函数(同样,只是因为我们正在进行二进制分类)。如果你有兴趣阅读更多关于其他混合 ReLU 激活功能的信息,下面是刘丹青的一篇有趣的文章:
开始使用和理解 ReLU,没有 BS 或花哨的方程式
medium.com](https://medium.com/@danqing/a-practical-guide-to-relu-b83ca804f1f7)
网络的首次尝试
在第一次训练运行之前,权重矩阵被初始化为一个 非常小的随机数 。
重要的是权重从一个小的随机数开始。如果所有的权重都初始化为零,那么由于z = wx + b
,所有的输出都将为零。具有相等的权重不会像反向传播的误差都相等那样有效,从而导致所有权重被更新相同的量。
第一次运行时,偏置向量可以初始化为 0。
显然,网络的第一次尝试真的只不过是一个随机的猜测!
正向传播
前向传播是采用输入、权重、偏差和激活函数来计算每个阶段的值的过程。例如,在我们的单层架构中,计算将按以下顺序进行:
显示正向和反向传播的框图
- 计算 Z1
记住z = wx + b
,我们本质上会做以下矩阵乘法。下面的等式显示了一个训练示例的矩阵乘法,但是在应用整个训练集之后,Z
将是具有形状(8, 209)
的矩阵。
- 计算 A1(激活函数)
我们在隐藏层上使用 ReLU,因此 A1 将简单地计算为 0 的最大值和 Z1 的当前值(即任何负数都变成 0)。 - 将 A1 送入输出层
矩阵 A1(也具有(8, 209)
的形状)现在将作为输入送入输出层。 - 计算 Z[L]
在这个最终输出层中,权重矩阵具有(1, 8)
的形状。另一个矩阵乘法将产生一个形状为(1, 209)
的最终输出,然后将其传递给一个 sigmoid 函数。 - 计算 AL
我们将计算出的值传递给 sigmoid 函数,这将导致返回一个介于 0 和 1 之间的值。
计算损失函数
此次运行的预测基于模型的权重和偏差,对于此二元分类示例,输出为 1 或 0。这与我们作为训练集的一部分提取的标签中的基本事实进行比较(读入train_set_y
变量)。
对于二进制分类,损失函数用于每个训练的例子如下。
损失函数—二元分类
直观地,你可以看到这是如何实现我们所需要的,对于基本事实,y = 0 或 1 的情况。记住对数曲线在x = 1
处切割 x 轴是有帮助的。
对数函数
损失函数的直观解释
成本函数是训练集上所有损失的平均值,这是我们想要最小化的等式(即,对其他参数求导)。
成本函数—二元分类
使用反向传播来调整权重和偏差
网络将使用反向传播的概念来调整权重和偏差。为了直观地理解这一点,你需要考虑这一点。
- 我们希望最小化关于可训练参数的成本函数,即 W 和 b 应该调整到什么?此图显示了正向传播中使用的函数以及相应的导数。
显示正向和反向传播的框图
- 为了最小化一个参数,我们进行求导,在这种情况下,这意味着我们希望获得以下结果:
对成本函数 wrt a 求导
这个导数的证明超出了本文的范围,尽管其他一些作者已经就此写了一篇完整的文章。我很喜欢阅读 Patrick David 在本文中提供的推导细节:
你已经完成了吴恩达在 Coursera 上的深度学习课程…
medium.com](https://medium.com/@pdquant/all-the-backpropagation-derivatives-d5275f727f60)
- 我们使用衍生产品的链式法则来计算以下内容:
计算成本函数权重导数的链式规则
- 然后,我们更新这些权重和偏差:
其中,α是学习率的超参数。我们将单独讨论细节,但是它定义了微调的程度。太小,学习过程会很慢。太大,你可能会超过当地的最小值。调音是一门艺术和科学。
重复
然后,上面的过程会重复您定义的迭代次数。这个变量被称为模型的超参数,类似于你在上面遇到的学习率。这些是不可训练的参数,调整这些超参数是一门艺术也是一门科学。我们将在以后的文章中对此进行更多的讨论。
结论
这是一个非常沉重的话题,但我希望它在高层次上强调了神经网络如何通过前向传播进行学习,并随后通过对反向传播中的成本函数求方程的导数来推动权重和偏差。
主要是通过这种反向传播,权重和偏差被缓慢地推到一个使成本最小化的值,这有效地使精度最大化。这就是为什么你总是听到人们说训练神经网络是为了最小化成本,而不是为了最大化精度。
如果你第一次没有理解这些概念,不要绝望。我花了一段时间来理解反向传播,我必须承认,在写这篇文章的时候,我仍然在发现新的东西。
写这些文章帮助我巩固了我的理解,我希望你能从中有所收获。
我再次尽一切努力检查工作。如果我的理解有错误,请告诉我!
下一篇文章将介绍一些代码来实现我们已经讨论过的概念。
成为卓越数据分析师的追求
超越原始查询,深入洞察交付
我看到过很多文章谈论如何成为一名优秀的数据科学家。不过这并不奇怪,因为在这个蓬勃发展的 HBR 邮报之后,越来越多的人想成为数据科学家。但是我们亲爱的数据分析师呢?
如果你是一家科技公司的早期数据分析师,你可能看不到自己在未来 5-10 年内做这个角色。你打算只做这份工作 2-3 年,然后再考虑转到数据科学家的兄弟角色,或者转到产品管理、业务战略或人员管理角色。这可能只是因为你看不到这个角色的晋升途径,因为你的日常工作(和你周围的分析师)只围绕着 查询-报告-重复 。
我也去过。也差点辞职和转移。但后来我四处探索,遇到了已经做了 5-10 年分析工作的人,在网上发表文章、演讲和播客,最终发现:
是的,数据分析实际上是一个先进的领域,我还有很多方法可以在这里发展
不,不仅仅是通过承担更大的项目范围或成为初级数据科学家。
在这里,我总结了一系列我的发现,关于分析师如何提升自己的技能,成为一名 卓越的数据分析师!
首先最重要的是——基础
这些就是你的卫生因素。这些的存在并不会让你成为一名高级分析师,但是这些的不存在会降低你作为数据分析师专业人士的可信度。
- **商业语境。**了解组织的业务流程是必须的。了解业务目标以及组织如何实现这些目标。这些知识将帮助你对 框架和相关问题 进行分析,以得到利益相关者的启发。
- 解决问题和批判性思维。这是每个专业人士都需要的技能。但是在数据分析环境中,需要确定分析方法,这将导致支持数据的想法被探索。此外,这项技能将帮助你计算出什么时候调整和修改方法,如果在这个过程中发现新的发现。
- 查询。根据上下文并从上面的技能组合中找出要做的事情,这一个涵盖了如何实际工作。这是您进入数据库/数据仓库并将数据转换成可处理格式以供分析的地方。根据组织环境(MySQL、PostgreSQL、Google BigQuery)的不同,需要了解SQL 和相关函数,以实现向利益相关者展示相关数据的目标。
进入下一阶段
描述和推断统计
数据分析与统计学交织在一起。为了从您收集的数据点中获得一些有意义的东西,需要一些分析技术。
最常用的(也是最简单的)方法是描述性统计。描述性统计使我们能够获得概括的特征和数据点的数量分布,并了解我们在我们探索的那些特定指标上的位置。即使有其他可用的高级技术,高级浏览仍然需要理解描述性统计数据(均值、中值、众数、标准差、偏斜度等)的能力,甚至更需要验证收集的数据中是否有错误——异常值检测、测量误差等。
图片来源:新南威尔士州教与学的有效实践(教育部),2019。(链接)
有时候,描述性统计是不够的。高增长的初创企业通常会做大量的产品和市场实验,这些实验只够试水。在这些实验中,理想的分析师将与产品经理一起设计实验,到实验完成时,他们将进行统计推断,以量化实验结果在现实世界中发生的可能性。它们就像是对围绕企业运转的假设的科学验证。它们对于确保我们不会突然从数据点中得出结论非常重要。
数据通信
下一个非常重要但经常被忽视的是数据通信。它不仅包括可视化部分——创建图表,还包括区分要突出显示、显示或放入附录部分的信息。一个伟大的数据分析师会找到呈现数据的方法,并从中讲述一个故事,这个故事会让 记住并激励预期的接收者。
一个好的数据展示是简洁的——包含相关的图表和解释,在点上回答构建的目标或假设,容易被目标受众理解。
一个理想的图表会让观众一眼就抓住洞察力。不同的图表服务于不同的目的,并帮助理解不同的可能的可视化。常规的条形图、折线图、散点图甚至文本可能已经满足了您的需求。但是你有没有考虑过使用热图、树状图、小提琴图或桑基图?
不确定使用哪个图表?在这里探索。
不同的图表服务于不同的目的。了解每一个的使用案例!(作者图片)
此外,分析师需要像设计师一样思考。可以做的一些其他事情是消除混乱(即不相关的数据点和不需要的文本),在保持美观(整洁和简单)的同时吸引注意力(围绕大小、颜色、位置等)。
机器学习
接下来是一个百万美元的问题。我是数据分析师(又不是数据科学家),为什么要做数据建模,要了解机器学习?我的回答是:
嗯,作为一名分析师,你的工作是提取信息和见解。大多数时候它来自大规模数据,很多时候它以非结构化数据(文本、图像、语音)的形式出现。仅凭描述性统计数据,很难从中获得有意义的新见解。
分析角色所需的机器学习技能与数据科学家所需的机器学习完全不同。虽然数据科学家更关注产品集成的预测或规定方面,但数据分析师的机器学习纯粹是为了提取洞察力。不同数据处理算法的知识很重要,但是我们很少关注建模效率和工程架构。
数据分析师的机器学习的示例应用包括用于分类的聚类、用于加权重要变量的回归、用于情感总结的文本挖掘。简单说说,没有自然语言处理技术和建模,怎么分析客服投诉?要不要把几百万的投诉一条一条看完,分类?
N-gram 单词云,有助于收集见解
用一种态度来平衡它
我们已经涵盖了优秀数据分析师的大部分技能。然而,有时仅仅拥有这些技能是不够的,因为一个人还需要体现出必要的态度来使事情运转起来。这里有一些从一个伟大的分析师到一个卓越的分析师的态度和精神。
- 好奇心和速度的完美结合。人们期望数据分析师负责战术洞察,带来速度和灵感,作为分析师与其他数据团队的区别。分析师需要有足够的好奇心来探索数据点并根据发现采取行动,同时牢记交付的目标和时间敏感性。
- 坚持事实 (不是假设)来自数据。沿着这条路走下去,尤其是当你在同样的环境下工作了足够长的时间,你会倾向于确认偏差。鉴于你过去做过类似的分析,并且了解你的东西,你对你将要探索的数据进行假设,并找到一种方法来验证它们。这就是你需要小心的地方,在做解释时坚持事实,而不是从数据集中得出结论。
- 学习和适应技术和行业。和其他工作一样,如果你想成长,你必须不断学习。虽然数百年来统计理论一直是相同的,但处理和呈现数据的算法和底层技术一直在不断更新。保持渴望,热衷于探索与数据分析相关的新工具和技术。
- 思考下一步后分析。从分析中可能会做出什么决定,对组织的其他部分会有什么影响,将来有没有可能重做这个分析?即使对其他分析师来说,也要做好记录和重现。
最后的想法
卓越的数据分析师不仅仅是查询和提供原始数据。他们有能力探索不同的统计技术、工具和机器学习算法,以从数据集产生新的见解。他们了解业务目标和利益相关者的需求,因此能够以及时和简洁的方式呈现与他们相关的信息。
最终,有了这些品质,他们就能通过 传递真知灼见,激励利益相关者为业务做出决策 ,使 成为利益相关者的思想伙伴 。
机器人如何利用 RRT 规划路径?
最近,我和一名硕士生在我的研究实验室里研究我自己的移动机器人、南瓜。由于我们试图替换我的机器人从库 ROS 中使用的一些默认包,我们已经学习了在一个典型的机器人堆栈中使用的不同算法。作为一个从事规划和强化学习的人,但显然不是机器人学的人,对我来说有一个很大的学习曲线。一个机器人必须知道如何在它的环境中定位自己——或者计算出它在哪里,如果它还没有地图的话,在飞行中建立它的环境的地图,避开可能随机出现的障碍物,控制它的马达以改变它的速度或方向,想出解决任务的计划,等等。
我的机器人南瓜
正如你所猜想的,机器人的一个真正重要的部分是它能够根据给定的环境地图规划从一个地方到另一个地方的路径。它为什么要这么做?也许它需要穿过房间去送包裹,或者护送一个人去某栋大楼。在任何情况下,每当机器人必须从开始位置到目标位置去完成任务时,它必须想出一个路径计划来如何在它的环境中移动。在机器人论文中,你经常会看到一张类似下图的地图,上面有起点和终点。这是移动机器人学中的经典问题的一个很好的可视化,我们通常称之为路径规划。换句话说,机器人如何找到一条从起点到终点的路径?
来源:安德鲁·霍华德、高拉夫·苏哈特姆和林恩·帕克的机器人论文
**免责声明:**在过去,我写过几篇有彩色图表和冗长解释的帖子。不可否认的是,因为像这样的帖子需要大量的工作,所以我最终没有发布任何东西。展望未来,我打算写一些不加修饰的帖子,稍微粗糙和随意一些。为什么?嗯,这不仅让我更容易写文章来加强我对一个概念的理解,而且我也非常肯定它们可以像我的其他文章一样没有华而不实的内容。现在回到我们定期安排的节目…
然而,和往常一样,我们必须记住一些微妙之处:
- **路径规划实际上应该适用于机器人。**如果路径规划使机器人在锐角处转弯,但机器人不能在锐角处移动(如汽车),则该路径规划不应被允许。
- **路径规划应该尽可能接近最优。**尽管找到任何能让机器人从起点到达目的地的路径规划都很好,但不幸的是,这还不够。我们想要有点效率的东西。它不仅能帮助机器人尽快完成任务,还能节省宝贵的电池寿命。
- **路径规划应避免碰撞墙壁。**这显然不言而喻。机器人可能非常昂贵,而且崩溃从来都不是一件好事。光是我的小机器人就花了我一千多美元。
试图满足这些条件的最流行的路径规划算法之一叫做快速探索随机树(RRT) 。由于一张图片胜过千言万语,请查看下图。让我们假设机器人必须在没有任何障碍的简单地图中从起点位置(红色点点)到达目标位置(绿色点)。基本上,我们将从一棵树开始,它的根节点代表机器人的起始位置。之后,我们将逐步建立树。怎么会?我们将从地图中随机抽取一些样本,为每个随机样本创建一个新节点,然后以某种方式将每个新节点插入到树中。一旦树中有一个节点足够接近机器人的目标位置,我们就完成了。
因为我知道这看起来很模糊,让我们给这个粗略的想法添加一些细节。首先,让我们检查一下将发送给 RRT 的每个参数。
- **地图:**划分为障碍区和无障碍区的环境地图。它看起来就像我贴在上面的地图,障碍区域是灰色的,无障碍区域是白色的。
- **开始位置:**机器人在其环境中的开始位置。这只是地图上的红点。
- **目标区域:**机器人在其环境中的目标区域。这只是地图上的绿点。
- **迭代次数:**RRT 执行的迭代次数。
让我们看看 RRT 的每一步。首先,我们将初始化一个空树。接下来,我们将把代表开始位置的根节点插入到树中。在这一点上,我们将有一个树,它只有一个节点代表开始位置。最后,我们将重复这些步骤,直到达到迭代次数或达到目标,无论哪一个先出现。
- 从地图的无障碍区域中随机抽取一个位置。
- 创建一个与随机位置相关联的节点。
- 找到已经在树中最接近随机位置的节点。
- 计算从随机位置到节点位置的路径,该路径在机器人上实际可行。
- 如果路径与某物冲突,继续进行下一次迭代。
- 将与随机位置相关的节点插入到以该节点(离其最近的节点)为父节点的树中。
- 一旦随机位置在目标位置的一定距离内,返回树。
作为提醒,如果树在我们达到迭代次数时没有接近目标区域,我们将返回到目前为止已经构建的树。
但是一旦我们建立了树,我们如何得到从起点到终点的路径呢?我们所要做的就是从代表目标位置的节点开始,沿着树向上返回,直到到达代表开始位置的节点。这将为我们提供机器人从起点到终点的路径。简单。
在同一个地图中,新的目标位置可以重复使用这棵树吗?当然!如果树中已经有一个节点在新的目标位置附近,我们就可以开始了。然而,如果在新的目标位置附近还没有任何东西,我们可以继续采样,直到找到一个靠近它的节点。只要环境没有改变,你可以继续在同一棵树上建造任何新的目标位置。
来源:实时机器人
事不宜迟,这里是 RRT 算法的粗略版本!
**function** RRT(*map*, *startPosition*, *goalRegion*, *numIterations*):
*tree* = initializeEmptyTree()
insertRootNode(*tree*, *startPosition*) **for** *i* = 1 **to** *numIterations*:
*randomPosition* = sample(*map*) *randomNode* = createNode(*tree*, *randomPosition*)
*nearestNode* = findNearestNode(*tree,* *randomPosition*) *path* = calculatePath(*nearestNode*, *randomNode*) **if** (hasCollision(*map*, *path*)):
**continue** insertNewNode(*tree*, *nearestNode, randomNode*) **if** (*randomPosition* **is within** *goalRegion*):
**return** *tree***return** *tree*
还有一件重要的事情需要注意!早些时候,我提到我们正在寻找一条适用于真实机器人的最佳路径,并且要避开障碍物。虽然这条路径可以在真实的机器人上工作并避开障碍物,但它是最优的吗?不幸的是,事实证明 RRT 并不能保证产生最优路径。在以后的博客文章中,我将讨论 RRT* ,RRT 的一个更好的版本,它最终生成最优路径。但那是下次的事了。
AI 如何检测物体?(技术)
了解如何使用机器和深度学习技术应用和实现对象检测
介绍
计算机视觉是包含在更广泛的人工智能研究范围内的一个领域。计算机视觉涉及处理数字图像和视频,以推断出对这些图像和视频中的内容的一些理解。
图片来自 https://www.bulletproof.co.uk/blog/bot-or-not
对象检测与计算机视觉相关联,并且描述了一种可以识别图像中期望的对象或身体的存在和位置的系统。请注意,要检测的对象可能出现一次或多次。
对象检测过程的输出是一个图像,在感兴趣的对象周围有边界框,并指示单个对象的类实例,见上图。
本文将探索对象检测以及使用机器和深度学习技术实现对象检测的各种方法。
应用程序
物体检测最明显的用例之一是在自动驾驶汽车中。
自动驾驶汽车有一个嵌入式系统,可以实时进行多类物体检测,然后根据检测结果采取行动。
例如,自动驾驶汽车的系统可以检测到一个人形物体穿过道路,并继续执行一个程序,使汽车在接触到检测到的物体之前停下几英尺。
图片来自https://www.autonomousvehicleinternational.com/
物体检测的其他应用有:
- 人脸检测:这个术语指的是实现可以自动识别和定位图像和视频中人脸的系统的任务。面部检测存在于与面部识别、摄影和动作捕捉相关联的应用中。
- 姿势估计:从提供的数字资产,如图像、视频或图像序列中推断身体主要关节位置的过程。姿态估计的形式存在于诸如动作识别、人类交互、虚拟现实和 3D 图形游戏的资产创建、机器人等应用中
- **物体识别:**识别与 a 类目标物体相关的过程。对象识别和检测是具有相似最终结果和实现方法的技术。尽管在各种系统和算法中识别过程先于检测步骤。
- **跟踪:**一种在一段时间内在一系列图像中识别、检测和跟踪感兴趣的物体的方法。在许多监控摄像机和交通监控设备中可以找到系统内跟踪的应用。
来自 cv-tricks.com 的物体跟踪 GIF
机器学习方法
存在用于检测图像中的对象的机器学习技术,并且这些技术是手动实现的算法,因此它们不是学习系统。
诸如大约在 2005 年引入的方向梯度直方图(HOG) 的方法使用组合 HOG/SIFT(尺度不变特征变换)来基于图像梯度的归一化局部直方图识别图像内的兴趣点。
该方法基于这样的直觉,即感兴趣的对象具有一组独特的特征,这些特征可以在每个窗口的基础上通过梯度的局部强度和边缘方向来识别。其结果是生成一个 HOG 描述符,该描述符是仿射不变量,并在引入了 **SVM(支持向量机)**的检测链中使用,以基于 HOG 描述符检测感兴趣的对象。这种技术对于一般的检测场景,例如行人检测,工作得相对较好。
生成仿射不变的 HOG 特征意味着如果特征被移动、缩放或旋转,则描述符中使用的特征将总是呈现相同的描述符
以下是用于对象检测的更多机器学习技术的快速概述:
尺度不变特征变换
用于检测的目标对象需要具有独特的方法,以便能够跨图像进行识别;这种新方法类似于获取图像中物体的指纹。
SIFT 是一种计算机视觉算法,它识别并封装图像中局部兴趣点(特征)的信息,以基于提取的特征来描述图像中的对象。
对于 SIFT 算法来说,为了创建对图像内的对象的充分描述,当图像中存在诸如噪声、尺度变化和方向之类的不一致时,所收集的兴趣点需要能够进行检测。满足对适当描述符的要求的图像区域的一个例子是图像内的边缘信息。
圣尼古拉斯教堂(starém sto)图像
尺度不变特征变换(SIFT)是一种图像描述符,用于基于图像的匹配和识别
www.scholarpedia.org](http://www.scholarpedia.org/article/Scale_Invariant_Feature_Transform)
基于哈尔特征的目标检测
类哈尔特征是对象内的标识符,可用于对象识别和检测。
通过比较两个相邻矩形区域的像素强度并找出总和之间的差异,可以捕获图像部分的特征。差异的结果本质上是我们对于图像的特定部分的描述符。
在实际场景中,haar-like 特征可以用于人脸检测。人脸(例如眼睛)的像素强度存在差异。与邻近区域相比,眼睛区域具有较暗的阴影。
图片来自https://www.researchgate.net/
深度学习方法
当利用深度学习技术时,有两种主要的对象检测方法,第一种是从头开始设计和训练网络架构,包括层的结构和权重参数值的初始化。第二种方法是利用 迁移学习 的概念,并在开始对定制数据集进行专门训练之前,利用在大型数据集上训练的预训练网络。
迁移学习是一种重用从解决问题中获得的知识,并将获得的知识应用于相关但独立的问题的方法
第二种方法消除了第一种方法所伴随的时间过长的缺点,即与采用已经训练好的网络相比,从头训练网络所花费的时间要长得多,并且需要付出更多的努力。
下面是一些用于目标检测的卷积神经网络(CNN) 模型的快速概述
基于区域的卷积神经网络及其变体
RCNN 是一种用于解决对象检测和分割的深度学习方法。该技术于 2014 年推出,提出了基于区域的卷积神经网络(简称 RCNN)的概念。
RCNN 利用选择性搜索算法来建议图像中的感兴趣区域,然后使用卷积神经网络来检测建议区域中感兴趣对象的存在。
RCNN 利用 CNN 进行特征提取,利用 二进制 SVM 进行对象分类。尽管 RCNNs 确实包含了一种手动技术来提议感兴趣区域,因此它并不是真正的端到端可学习的解决方案。
图片来自https://cv-tricks . com/object-detection/faster-r-CNN-yolo-SSD/
RCNN 的计算开销很大,平均需要 40-50 秒来完成对每幅图像的预测。它的后继者, Fast-RCNN 和 Fast-RCNN**,**解决了 RCNN 中普遍存在的一些性能和效率问题。此外,由于对图像进行和完成预测需要时间,RCNN 不能用于实时应用。
你只看一次(YOLO)
YOLO 是替代对象检测技术使用的标准对象检测范例的重新定义。RCNN 等流行技术利用基于区域的分类器,并通过网络传递图像数千次来获得预测。此外,RCNN 是一个两阶段的过程,第一阶段生成建议的区域,第二阶段是对象检测发生的地方。
另一方面,YOLO 是用于对象检测的一步过程。它也是一种神经网络模型,只需要图像通过其网络一次就可以进行对象检测。一个明显的好处是,与 RCNNs 相比,YOLO 提出了更高的效率。
YOLO 的工作原理是在图像上叠加网格,网格中的每个细胞扮演两个角色:
- 每个单元预测边界框,并为每个边界框分配一个置信度值。置信度值是网格内容包含对象的概率的表示。因此,低置信度值被分配给没有任何对象的图像区域。
- 每个单元格还产生一个分类概率结果。分类概率表示如果网格包含对象,则该对象可能是具有最高概率的类的可能性。
使用 YOLO 进行物体检测有几个好处,主要是它可以用于实时应用,例如嵌入在自动车辆系统中的物体检测系统。
下面是一段视频,包含了更多关于 YOLO 的信息:
结论
最后,我们看看对象检测技术的进展和成功,包括机器学习和深度学习方法。
下图直观地描绘了在 Pascal VOC 数据集上进行评估时,从 2006 年到 2016 年的十年间,Jonathan Hui解释了对象检测技术的地图得分 ) 的增加。
Ross Girshick (2015),深度学习的影响:对象检测
2006 年至 2011 年期间显示了利用传统的机器学习技术进行物体检测;我们可以在 2010-2012 年间观察到一些停滞。这种停滞趋势随着 convnet(卷积神经网络)的出现而改变,我们看到 mAP 得分在 2015 年增加到略高于 75%。
下面的链接提供了一些信息,以获得当前技术状态的概述。
****[## PASCAL VOC 2007 上最先进的物体检测表
24 种方法的性能比较。
paperswithcode.com](https://paperswithcode.com/sota/object-detection-on-pascal-voc-2007)****
希望通过这篇文章,您对对象检测和技术有了更多的了解,这些技术可以用来在各种应用程序中实现对象检测。
如果你喜欢这篇文章,并想阅读更多,给我一个关注。
Airbnb 如何影响旧金山的住房?分析和数据。
使用数据探索短期租赁如何影响旧金山的住房市场。
一些研究声称,短期租赁推高了当地居民的价格,因为 Airbnb 等服务“吃掉”了本可以流向长期租户的住房供应[1]。事实上,这些平台已经激起了激烈的争论,比如旧金山颁布了相关法规。与此同时,如果有很多因素影响着住房市场,从当地的价格趋势到历史上的不平等,那么像 Airbnb 这样的公司又有多少责任呢?利用数据,本文考察了这些平台如何影响旧金山住房市场,并探讨了监管如何塑造这些趋势。
显示两种列表位置的地图。首先,那些来自“可能的本地”主机,很少有(1-2 个)绿色列表。第二,“潜在缺席”主机,许多列表(3 个或更多)以蓝色显示。下面将进一步讨论这些组。 Mapbox 和 OpenStreetMap 。有些位置是近似的。谢谢,酿酒师。
请注意,这是一个数据和政策交叉的主题,因此本文讨论一些法规的影响。请理解,此处提供的信息不构成也无意构成法律建议。所有内容仅供参考,不提供任何担保。在未首先寻求相关司法管辖区的专业法律意见之前,不要对该信息采取行动或不采取行动【5】。
**首先,我们需要定义旧金山的“短期租赁市场”。**该分析使用了 Airbnb 内部2019 年 12 月 4 日的数据,因此这些结果仅适用于当时 Airbnb 上列出的房产【6】。记住这个例子,这篇文章排除了酒店/旅馆(8%的列表)。此外,由于 SF Airbnb 市场有许多只允许长期租赁的物业,那些最短停留时间超过 30 天的(4%的房源)也被忽略,因为它们可能不受与短期租赁相同的监管[7]。
考虑到这些定义,谁在 Airbnb 上出租空间?普遍的担忧是,拥有多处房产网络的房东将大量住房从当地长期租赁市场转移到短期租赁市场,而不是当地人出租多余的房间[8]。然而,数据表明大多数主机不符合这个定义:75%的主机只有一个 SF 列表,极少数(3%)有五个或更多。此外,89%的旧金山寄宿者报告居住在加州,这一发现并不令人惊讶,因为旧金山法规要求寄宿者“每年至少在他们租用的单元中度过 275 个夜晚”[7]。因此,考虑到所有这些,数据表明,大多数主机可能居住在加州,只有一个或两个上市。*
大多数主机只有一个列表。
**尽管大多数房东都是本地人,只有少量房源,但这并不是说找不到潜在的“不在”房东。考虑到 11%的主机报告他们的位置不是加利福尼亚。此外,这一“偏远”群体比那些据报道居住在加利福尼亚的人更有可能拥有三个或更多的 SF 清单,而不是只有一个或两个(p < 0.05)。综合这些指标,拥有许多(≥3 个)房源的“远程”房东负责 10 个房源中的 1 个(11%),但他们仅占旧金山 50 个主机中的 1 个(2%)。事实上,这些主机的影响可能是广泛的:19 个这样的“潜在远程”主机每个都有 10 个或更多的列表。这表明,许多房东确实在他们居住的房产中租赁了多余的空间,但可能有少数不在的房东有不成比例的大量供应。
在继续之前,值得一提的是,这篇文章并不一定声称所有这些租赁都是非法的。网上的信息可能已经过时,一个人可能有很多房间,等等。同样值得强调的是,上述 2%之外的一些人也可能是非法的。
****不管怎样,要知道大多数 Airbnb 的房东可能都是本地人,只有一两个房源,但也有一些“潜在的偏远”房东有很多房源,Airbnb 需要什么样的房源呢?了解 Airbnb 使用的房屋类型,以确定长期租赁市场中流失的供应类型,这一点很重要。因此,使用来自城市的数据,每个列表的分区可以大致确定[9]。多数人(49%)居住在住宅区或“RH”分区(RH 1-3) * 中的一至三个家庭。这与公寓等高密度住宅形成对比,后者在相对湿度区内不太可能出现。事实上,由于一些非相对湿度地区包含房屋和其他建筑的混合物,49%可能是一个低估的数字。这意味着大约一半的房源是出租的,这使得它很容易成为最常见的房产类型。
许多主人从他们的 1 到 3 个家庭的房子中租用。
再说一次,你会想对此有所保留。旧金山的分区法律极其复杂,可用于租赁的公共位置数据并不总是精确的,因此这一发现应被视为近似的。
然而,所有类型的主人都有可能在他们一到三个家庭的房子里租用空间,这是真的吗?即使考虑到这种相对湿度的多元性,不同主机类型的分区使用也不一致,进一步挖掘发现,相对湿度分区中的房源不太可能来自拥有 3 个或更多房源的“远程”房东(p < 0.05)。事实上,与其他主机的 52%相比,来自那些潜在缺席主机的列表(具有≥ 3 个列表)中只有 24%在 RH 中。这一重要结果意味着,RH 区主机可能更有可能实际居住在他们的空间,而具有列表网络的“远程”主机更有可能活跃在其他类型的分区中,如更高密度的公寓。
与其他主机不同,具有≥ 3 个属性的潜在“远程”主机不太可能使用 RH 1–3。有关 RH 区外住宅的更多详细信息,请参见分区定义[10]。
****知道“本地”主机比“远程”主机更可能使用 RH 分区,Airbnb 对 SF 住房市场做了什么?之前的研究似乎是正确的,因为一些 Airbnb 主机可能会通过减少供应来推高价格,特别是少数拥有许多房源的“远程”主机,他们更有可能在 RH 分区之外(如高密度公寓)[1]。然而,当主人真的住在这个单元时,结果就不那么简单了,尤其是对于那些不清楚如果 Airbnb 消失了,那些多余的房间是否会成为长期住房供应的房产。考虑一下,在 RH 区列表中,39%是单家庭住宅(没有附属单元),并且仅用于一个“家庭”和一个“居住单元”[11]。虽然有可能将这些空间长期出租给非亲属,但他们不可能像普通公寓一样进入长期市场,这似乎是合理的。这是因为居住者仅限于那些符合“家庭”定义的人,并且由于 RH-1 不能有一个以上的厨房,所以空间通常无法与典型公寓的特征相匹配[10][11]。这意味着 Airbnb 可能具有减少某些类型住房(特别是高密度住房)供应的双重效应,但 Airbnb 等平台也可能释放市场其他地方未使用的空间(特别是 RH 独栋房屋)。
SF 应该如何看待这些结果?围绕短期租赁的争论需要细致入微,因为像 Airbnb 这样的服务可能会使一种类型的房屋更实惠、更具生产力,同时增加另一种类型的成本。如果没有 Airbnb 这样的服务,对于在自己居住的房子里出租多余房间的当地人来说,由于分区限制,许多房间可能根本就不会被使用。事实上,失去 Airbnb 可能不仅会导致这些空间的经济生产力损失,而且可能会使旧金山的房屋所有权变得更加昂贵和难以获得,因为考虑到分区限制,一些低收入业主可能更难以建立长期租赁来抵消他们的房屋成本。然而,这种越来越多的人拥有住房的影响被潜在的缺席者抵消了,他们有许多房源,可能会提高租房者的成本。当然,如果法律的精神在旧金山被严格遵循,这样的单元确实需要被他们的主人占用,这可能不是一个问题。或者,如果分区更加宽松,RH-1 供应可能对长期租赁更有用。不过,从整体来看,11%的房源来自拥有三套或三套以上房产的偏远房东,但 19%的房源是有这些限制的单户住宅(不包括那些有附属单元的)。因此,即使有少量的坏演员,短期租赁也有很多好处。最终,由读者来决定这种交换是否值得。
Github 上的代码、数据、注释和引用的作品。
想要更多数据、设计和系统交叉的实验吗? 关注我获取更多 !
构建基于记忆的协同过滤推荐器
基于记忆的协同过滤技术综述及电影推荐器的实现
弗洛伦西亚·维亚达纳在 Unsplash 上拍摄的照片
在上一篇文章使用 tf-idf 构建基于电影内容的推荐器中,我解释了如何基于流派构建一个简单的电影推荐器。
在本帖中,我们将实现一个基于内存的协同过滤模型,并讨论基于用户和基于项目的方法在概念和实现上的主要区别。
你可以在 jupyter 笔记本这里找到重现结果的所有代码。
介绍
协同过滤是推荐系统中最常见的技术。顾名思义,它是一种以协作方式帮助用户筛选出项目的技术,也就是说,基于相似用户的偏好。
说 Lizzy 刚刚看了《降临》和《银翼杀手 2049 》,现在想被推荐一些类似的电影,因为她很喜欢这些。
协同过滤(图片由作者提供)
协同过滤方法背后的主要思想是找到也喜欢这些电影的用户,并根据他们的偏好推荐未看过的电影。在这个例子中,模型可能会发现喜欢这些电影的其他用户也喜欢“星际”,这可能是对 Lizzy 的一个不错的推荐。
虽然这是主要思想,但有许多方法可以解决这个问题,选择更合适的方法将取决于多种因素,例如我们正在处理的数据集的大小及其稀疏度。
协作过滤方法的类型
如上所述,有许多协同过滤(简称 CF)方法,下面是我们可以找到的主要类型:
- 基于记忆的
基于记忆的方法使用用户评级历史数据来计算用户或项目之间的相似性。这些方法背后的思想是定义用户或项目之间的相似性度量,并找到最相似的来推荐未见过的项目。
- 基于模型的
基于模型的 CF 使用机器学习算法来预测用户对未评级项目的评级。基于模型的 CF 算法有很多,最常用的有矩阵分解模型,如应用 SVD 重构评级矩阵,潜在狄利克雷分配或基于马尔可夫决策过程的模型。
- 杂交
这些方法旨在结合基于记忆和基于模型的方法。上述方法的主要缺点之一是,你会发现自己必须在历史用户评级数据 和用户或物品属性 *之间做出选择。*混合方法使我们能够利用两者,因此在大多数情况下表现更好。现在最广泛使用的方法是因式分解机。
现在让我们更深入地研究一下基于内存的方法,因为这是我们将在这篇文章中实现的方法。
基于内存的 CF
基于内存的协同过滤算法主要有两种类型:基于用户的和**基于项目的。**虽然它们的区别很微妙,但在实践中它们会导致非常不同的方法,所以知道哪种方法对每种情况最方便是至关重要的。让我们快速浏览一下这些方法:
- 基于用户的
在这里,我们找到了看过/评价过类似内容的用户,并使用他们的偏好来推荐新项目:
基于用户的协同过滤(图片由作者提供)
一个缺点是,用户往往比项目多得多,这导致更大的用户相似性矩阵(这在下一节可能会很清楚),从而导致更大数据集上的性能和内存问题,这迫使依赖并行化技术或其他方法。
另一个常见的问题是,我们会遭遇****:可能没有或几乎没有关于新用户偏好的信息,因此没有什么可以比较的。
- 基于项目的
想法是相似的,但是相反,从一部给定的电影(或一组电影)开始,我们根据其他用户的偏好找到相似的电影。
基于项目的协同过滤(图片由作者提供)
与基于用户的方法相反,项目相似性矩阵往往更小,这将减少在我们的相似性矩阵中寻找邻居的成本。
此外,由于一个单个项目足以推荐其他类似的项目,这种方法将不会遭受冷启动问题。
基于项目的方法的缺点是,与基于用户的 CF 相比,它们在推荐中倾向于较低的多样性。
履行
数据
我们将使用与上一篇相同的数据集,即 MovieLens 数据集,它包含来自 MovieLens 网站的评分数据集。它包含 6000 名 MovieLens 用户制作的约 4000 部电影的 100 万匿名评级,这些电影于 2003 年 2 月上映。
我们将和三个人一起工作。csv 文件:收视率、用户、电影。 请查看 以前的帖子 了解更多关于数据集的详细信息。
用户-项目矩阵
我们需要做的第一件事是创建用户-项目矩阵。这实际上是一个来自评级数据的旋转表,其中行是用户,列是电影,数据框填充了用户给出的评级(如果存在,否则为0
):
user_item_m = ratings.pivot('user_id','movie_id','rating').fillna(0)
print(f'Shape: {user_item_m.shape}')
> Shape: (29909, 5840)
看起来像这样(我已经加入了电影表,所以标题也可以在这里看到):
相似矩阵
接下来,我们将定义一个相似度矩阵。**按照上一篇关于基于内容的推荐器的文章的思路,参见章节 向量之间的相似性 ,我们想要在用户-项目矩阵中找到所有用户(或项目)之间的邻近性度量。常用的度量是余弦相似度。
正如我们也看到的,这种相似性度量因其等于被比较的两个向量之间的角度的余弦而得名,在这种情况下,这两个向量是得分的用户(或项目)相似性向量。两个向量之间的角度越小,余弦值就越高,从而产生更高的相似性因子。有关这方面的更多详细信息,请参见前面提到的部分。
我们可以使用sklearn's
metrics.pairwise
子模块进行成对距离或相似性度量,在这种情况下,我们将使用cosine_similarity
。
请注意,该函数具有签名:
sklearn.metrics.pairwise.**cosine_similarity**(*X*, *Y=None*, *dense_output=True*)
Y
预计在哪里:
****Y:n array 或稀疏数组,形状:(n_samples_Y,n_features)。如果
None
,输出将是X
中所有样本之间的成对相似度。
因此,通过仅指定X
,这将从X
中的样本生成相似性矩阵:
from sklearn.metrics.pairwise import cosine_similarityX_user = cosine_similarity(user_item_m)
print(X_user.shape)
(6040, 6040)print(X_user)
array([[1\. , 0.063, 0.127, 0.116, 0.075, 0.15 , 0.035, 0.102],
[0.063, 1\. , 0.111, 0.145, 0.107, 0.105, 0.246, 0.161],
[0.127, 0.111, 1\. , 0.127, 0.066, 0.036, 0.185, 0.086],
[0.116, 0.145, 0.127, 1\. , 0.052, 0.016, 0.1 , 0.072],
[0.075, 0.107, 0.066, 0.052, 1\. , 0.052, 0.106, 0.18 ],
[0.15 , 0.105, 0.036, 0.016, 0.052, 1\. , 0.067, 0.085],
[0.035, 0.246, 0.185, 0.1 , 0.106, 0.067, 1\. , 0.202],
[0.102, 0.161, 0.086, 0.072, 0.18 , 0.085, 0.202, 1\. ],
[0.174, 0.156, 0.1 , 0.092, 0.242, 0.078, 0.125, 0.217],
[0.209, 0.162, 0.158, 0.096, 0.079, 0.124, 0.091, 0.109]])
这将生成形状为(n_users, n_users)
的用户相似度矩阵。
由于X
预计为:
X:n 数组或稀疏数组,形状:(n_samples_X,n_features)
通过转置用户项目矩阵,我们的样本现在将是用户项目矩阵的列,即电影。因此,如果我们的原始用户项矩阵的形状是(n,m)
,通过在转置矩阵上找到余弦相似性,我们将得到一个(m,m)
矩阵:
X_item = cosine_similarity(user_item_m.T)
X_item.shape
(3706, 3706)
这将表示项目相似性矩阵。
该算法
创建了相似性矩阵之后,我们现在可以定义一些逻辑来查找相似的用户。在基于用户的推荐的情况下,我们想要找到与我们想要推荐电影的新用户相似的用户,并且因为我们已经有了相似性分数,我们只需要搜索给定用户行中的最高值,并且从那里选择最高的 k 。一旦我们有了 k 最接近的用户,我们就可以找到该用户还没有看过的评分最高的电影。
当然,在这种情况下更简单,因为我们已经计算了所有用户之间的相似性矩阵。在实际场景中,我们必须用新用户更新相似度矩阵,然后和找到最相似的用户。**
基于使用的 CF** 的算法可以总结为:**
- 计算新用户与所有其他用户之间的相似性(如果还没有完成)
- 计算 k 最相似用户所有电影的平均评分
- 推荐其他用户未看过的排名前 n 的电影
下面是一个逐步解释的实现基于用户的 CF 推荐器的功能:
如前所述,基于用户和基于项目的 CF 系统之间的实现差异非常小。因此,将这两种方法包装在一个类中可能是一个好主意,一旦实例化,我们将使用该类向给定用户推荐电影或项目:
在用一些例子测试推荐器之前,定义一个函数来查看用户的偏好以了解推荐是否有意义可能是有用的。在这里,我对用户观看的电影进行分级,取前 10 名:
测试推荐器
*测试一个推荐者实际上比看起来更难。在 movielens 数据集中,许多用户将会看到*所有的东西,在某种意义上,他们可能会给多种类型的电影很高的评级,而不仅仅是他们最喜欢的。
测试该模型的一个有用的方法是找到一些具有特定品味的用户的具体例子,例如,对一两个流派有明确的偏好。我所做的是找到已经看过几部电影的用户,但这些电影的类型很少,这意味着他们显然对这些电影有偏好。因此,推荐器被期望推荐来自相同类型的电影。
- 让我们从一些基于用户的建议开始:
让我们试试一个似乎偏爱《T4》剧的用户:
rec = CfRec(user_item_m, X_user, movies)
because_user_liked(user_item_m, movies, ratings, 69)
我们可以看到该用户评价最高的电影是剧情电影。让我们看看推荐者的建议:
rec.recommend_user_based(69)
推荐看起来不错!很难说用户是否会完全同意特定的电影,但是用户的类型偏好清楚地反映在推荐中。
现在让我们和一个恐怖电影的粉丝一起试试:
because_user_liked(user_item_m, movies, ratings, 2155)
rec.recommend_user_based(2155)
《闪灵》,《异形》 …听起来这个用户错过了这些恐怖经典!**
- 现在让我们尝试一些基于项目的建议
我们要做的第一件事是创建该类的另一个实例,但是这次使用项目相似性矩阵作为相似性矩阵:
rec = CfRec(user_item_m, X_item, movies)
如前所述,这里的逻辑是根据其他电影推荐电影。来看看推荐者给喜欢科幻经典 沙丘 : 的用户什么建议
rec.recommend_item_based(2021)
>> Because you liked **Dune (1984)**, we'd recommend you to watch:
我们可以看到,所有推荐的电影都来自同一类型,看起来都是不错的建议。
如果我们喜欢 Se7en ,一部犯罪和惊悚电影,我们会被推荐去看 :
rec.recommend_item_based(47)
>> Because you liked **(Se7en) (1995)**, we'd recommend you to watch:
最后,对于一部经典的动画电影, 斑比 :
rec.recommend_item_based(2018)
>> Because you liked Bambi (1942), we'd recommend you to watch:
所以在这两种情况下,实现的协同过滤模型似乎提供了很好的推荐。
有许多可以改进的地方。例如,我们可以考虑这样一个事实,即在给电影分级时,用户可以表现得非常不同。一些用户可能对所有电影评价很高,而其他用户可能更挑剔。这可以通过减去每个用户的平均分来完成,然后我们就有了每个用户的标准化分数。
无论如何,我希望这个例子能够说明协同过滤方法是如何工作的。我鼓励你把它作为一个起点,也许可以稍微调整一下或者增加一些改进。
非常感谢你花时间阅读这篇文章,希望你喜欢:)