人工智能能改变我们回收垃圾的方式吗?
大多数 TDS 帖子汇集了理论专业知识和现实世界的影响——无论是简短的教程还是对前沿研究的透彻解释。本周,你应该看看我们在最近的记忆中看到的一个最好的例子,一个弥合理论/应用差距的项目。
你有没有站在回收箱前不确定某样东西是否属于它? Duncan Wang 、 Arnaud Guzman-Annès 、Sophie Courtemanche-Martel和 Jake Hogan 向我们介绍他们关于人工智能简化和优化回收项目潜力的项目。他们出色地奠定了技术基础(在这种情况下,CNN 或卷积神经网络),然后展示了如何利用 CNN 来推动真正的变化,并在影响我们所有人的领域产生积极的结果。我们希望你在阅读他们的作品时会有所启发——我们当然有!
灵感可以——也确实——有多种味道和色调。通常,与我们的读者产生共鸣的不是一个特定的主题或方法,而是一种有用的洞察力:你离开文章时感觉自己处于一个更好的位置来思考问题或执行解决方案。Seth billiou 的对排列特征重要性的探索是前者的一个坚实的例子。看着黑盒模型和解释它们如何产生结果的困难,Seth 展示了放大特定特征如何帮助我们看到哪些特征具有最大的预测价值。后退几步(还是前进?),TDS 播客主持人 Jeremie Harris 和他最近的嘉宾 Evan Hubinger 聊了聊内部校准问题以及我们如何解决目前潜伏在该领域不远的将来的安全问题。另一方面,Prukalpa 分享了她和她的团队在与时尚零售商 TechStyle 的合作中获得的经验。她重点讲述了他们如何实施符合公司需求的全新数据仓库,详细介绍了他们在此过程中面临的挑战。
想要找到一篇平衡实践知识和奇思妙想的文章,只需看看马特·索斯纳关于算法和大型鱼群行为惊人相似之处的文章。以他的博士研究为出发点,Matt 在他观察到的鱼的集体决策和集成学习算法之间画出了迷人的联系,并想知道“鱼群是否充当了一个巨大的神经网络。”
发现不同领域和概念之间意想不到的联系是有效学习的标志之一;如果你正在寻找一些关于如何扩展你的数据科学技能组合的实用建议, Julia Nikulski 根据她的个人经历为整理了几个极好的建议——从创建你自己的数据集到深入学术研究。想要更多的想法(和更多的灵感),一旦你阅读了 Julia 的帖子,继续阅读 TDS 编辑 Elliot Gunn 最近与谷歌定量用户体验研究员 Randy Au 的对话。Randy 强调让利益相关者了解数据洞察的价值的重要性,以及在与你加入的组织相关的特定领域进行自我教育的重要性。
如果您正在寻找其他方法来改进您的工作流并提高日常数据科学流程的效率,我们还没有完成!诺亚·伯班克基于他在 Salesforce 的工作,发表了一篇全面的深入探讨选择正确的文本分类模型的艺术,在 sales force,选择通常取决于“我们的训练数据在多大程度上捕捉了它将在生产中得分的数据的多样性。”同时, Parul Pandey 提供了一个解决常见难题的方法——当你意识到破译自己的代码库有多困难的时候。作为一个解决方案,Parul 建议自动化你的项目结构,从创建一个可重用的模板到将你的代码推送到 GitHub。
无论你处于数据科学之旅的哪个阶段,我们都希望你在本周发现了新的东西,无论是工具、流程还是崇高理念的实际应用。感谢您的阅读、讨论和对我们工作的支持。
直到下一个变量,
TDS 编辑
我们策划主题的最新内容:
入门指南
- Node2vec 图文解说作者刘雷米
- Mathias Gruber从初级数据科学家到首席数据科学家的 20 个经验教训
- LinkedIn 对 Eryk Lewinson 的《预言家——银风筝和灰风筝
实践教程
- 你认为你的社交媒体评论有多恶毒?由 Navjot Bians
- 如何调整机器学习模型的超参数作者 Chanin Nantasenamat
- 如何用 Python 解决一个人员调度问题作者 Khuyen Tran
深潜
- 知识之座:具有深度结构化知识的人工智能系统作者加迪·辛格
- 我们能用卫星研究积雪吗?由威尔·诺里斯
- 树莓派园艺:用树莓派监测菜园——第 1 部分作者克里斯蒂安·霍林格
思想和理论
- 机器学习和量子物理之间的对称性改善了模拟Therese Paoletta
- 困扰艾的伪哲学作者本楚格
- 数据匿名化:来自一位前怀疑论者的观点作者 Patricia Thaine
算法可以种族歧视吗?
语言模型中法律和社会困境的简要探讨
随着人工智能(A.I .)继续快速融入日常生活,一些伦理困境也同步出现,它们对用例的影响成为了许多辩论的主题(Kilbertus 等人,2017;哈特等人,2016;Pazzanese,2020)。本文关注的一个困境与包容性和边缘化有关(Bender 等人,2021)。在算法模型的形成中,强化霸权力量的训练数据如何影响参与的概念?因此,本文将通过对文献进行定性调查以讨论偏见放大而获得的基础解释主义观点,来寻求强调人工智能中的伦理挑战。正如 Bender 等人(2021)所概述的,关于语言模型的发展和利用,存在几个法律和社会困境。这包括强化对边缘化人口的霸权力量,这是具体化力量不平衡的训练数据特征的结果。
富裕国家从语言模型中受益更多,而贫穷国家则受到训练数据的负面环境影响,而这些数据对它们几乎没有好处(Pratik et al .,2020);他们也在很大程度上被排除在技术进步之外或代表性不足。在解决这些问题时,Bender 等人(2021)建议仔细规划和管理数据集,以期采用价值敏感的设计方法,从而减少语言模型不准确以及进一步征服某些群体的定型观念的永久化所造成的负面影响。
此外,建议在构建模型时建立基准,通过预记录严格审查数据收集和使用情况,以提高包容性,确保公平性并鼓励准确性。参与的概念也受到训练数据的负面影响,这些数据的背景和制度基础是深度学习中的偏见。例如,美国惩教罪犯管理概况分析替代制裁(COMPAS)中使用的算法对非裔美国人有固有的偏见,因为它给予这一群体比高加索人更高的风险评级,即使两者都有确切的罪犯概况(Mehrabi 等人,2019 年)。Obermeyer 等人(2019)引用了一种在美国医院中广泛使用的流行算法,该算法减少了黑人在与其他群体相同的复杂健康情况下访问医疗计划的可能性。
这种在深度学习算法模型的形成中霸权力量的加强突出了人工智能中的偏见放大,以及对识别、根除和丢弃歧视性训练数据的严格检查的需要,无论是在数据收集、预处理、处理中还是后处理阶段(Mehrabi 等人,2019)。计算机视觉是人工智能中另一个存在霸权结构的领域。Buolamwini 等人(2018 年)强调了分析人脸的算法中的性别和种族问题:肤色较浅的男性比肤色较深的女性更少出现任务错误。同样,算法模型如何以一种形成标准自然智能的方式安排视觉世界,取决于它接收的数据集,这些数据集通常不具有包容性。
例如,在谷歌上快速搜索冠状病毒图片,会显示大量彩色分子的图片,而搜索埃博拉病毒,会显示各种非洲人处于虚弱状态的图片。尽管冠状病毒在全球范围内产生了更大的负面影响,但网上的图片并没有反映出一个群体比另一个群体更糟糕。人们可以提出这样一个问题:谁来决定应该看什么和如何看?谁来决定现实世界和虚拟世界是如何协商的?因此,如果计算机视觉有能力塑造感知,从而塑造行为和思想,那么,正如 Pereira (2021)所建议的,有必要从根本上摆脱这些歧视性的概念。但是如何做到这一点呢?在上述人工智能领域,研究人员对伦理挑战保持警惕的动机是什么?
首先,财政补贴应该给予那些在训练数据或部署模型中积极展示权力动态平衡的研究人员,也就是说,建议消除一个人口统计学对另一个人口统计学的显性或隐性优势。其次,事实上反过来说,经济支持或公共资金应该被取消,所创建的算法模型对那些在研究中不注意伦理困境的人工智能研究人员来说是一种令人厌恶的刺激。第三,应该从高质量的研究中建立一个经过同行评审的标准化和最佳实践指标分类框架,该框架应在整个研究过程中积极、一致地纳入道德规范的使用。
人工智能在主要行业中得到成功应用,因此,该领域面临的各种挑战是全方位的。考虑到这一点,如果训练算法的数据集错综复杂地局限于某些霸权原则,那么数据化过程最终将扩大这一点,进一步挑战参与的概念。因此,伦理在人工智能中至关重要,研究人员有责任确保系统地捍卫和推进是非、公平和平衡的概念。
文献学
Bender,e .,Gebru,t .,McMillan-Major,A & Shmitchell,S. (2021)论随机鹦鹉的危险:语言模型会不会太大?。关于公平性、问责制和透明度的会议。纽约,3 月 3 日至 10 日,1 日至 14 日。
J .布朗利(2019 年)。具有深度学习的多标签分类。可在网上获得:https://machine learning mastery . com/impact-of-dataset-size-on-deep-learning-model-skill-and-performance-estimates/【访问于 2021 年 12 月 12 日】。
J .布朗利(2021 年)。如何选择深度学习的激活函数
网上有:https://machine Learning mastery . com/impact-of-dataset-size-on-Deep-Learning-model-skill-and-performance-estimates/【2021 年 12 月 12 日访问】。
Buolamwini,j .和 Gebru,T. (2018 年)《机器学习研究会议录》81:1–15。
*2018 公平、问责和透明性别阴影会议:商业性别分类的交叉准确性差异。*纽约,2 月 23 日至 24 日,1 日至 15 日。
Doshi,S. (2019)训练神经网络的各种优化算法。正确的优化算法可以成倍地减少训练时间。可在线获得:https://towards data science . com/optimizer-for-training-neural-network-59450d 71 caf 6【访问日期:2021 年 12 月 12 日】。
Dabbura,I. (2017)梯度下降算法及其变体。可在线查阅:https://towards data science . com/gradient-descent-algorithm-and-its-variants-10f 65280 6a 3[访问时间:2021 年 12 月 14 日]。
《监督学习中的机会均等》。*第 30 届神经信息处理系统会议,*巴塞罗纳,12 月 5 日至 11 日,3315 年至 3323 年。
图片(无日期)。可在:【https://pixabay.com/ (2021 年 12 月 13 日进入)。
kilbertus,m . Rojas-carulla,g . parascandolo,Hardt,m . janzing,D & Sch ̈olkopf,B. (2017 年)通过因果推理避免歧视。第 31 届神经信息处理系统会议,加利福尼亚州,2017 年 8 月 6 日,656–666。
Nguyen,H & Evangelos,T. (2021)数据挖掘中过拟合和过泛化对分类准确性的影响。路易斯安那州立大学博士论文。
Obermeyer,z .,Powers,b .,Vogeli,C & Mullainathan,S. (2019)剖析用于管理人口健康的算法中的种族偏见。理科,366 (6464),447–453。
Pazzanese,C. (2020)随着人工智能在更多行业中发挥更大的决策作用,伦理问题越来越多。网上有:https://news . Harvard . edu/gazette/story/2020/10/ethical-concerns-mount-as-ai-take-bigger-decision-making-role/【2021 年 11 月 24 日访问】。
佩雷拉,G. (2021)走向拒绝作为一个关键的技术实践:与霸权计算机视觉作斗争。安普哈 10(1),2245–7755。
Pratik,j .,Sebastin,s .,Amar,b .,Kalika,B& mono JIT c .(2020)NLP 世界中语言多样性和包容性的状况和命运。计算语言学协会第 58 届年会。在线,6282–6293。
Rohith,G. (2018)提高神经网络的性能。网上有:https://www . kdnugges . com/2018/05/improving-performance-neural-network . html【2021 年 13 月 12 日访问】。
人工智能能帮助我们对抗假新闻吗?
加剧假新闻影响的算法是否也可以用来对抗假新闻,并大规模培养批判性思维?
科林·伯伦斯来自的图片
假新闻和虚假信息现在被广泛认为是煽动对世界各国政府、个人和社区不信任的武器。我们每天都被新闻报道、图片、视频、迷因、WhatsApp 转发、电子邮件等虚假信息淹没。为推进议程而歪曲事实本身并不是一个新问题;政客和广告商对此相当熟悉。社交媒体的爆炸式增长与人工智能的新兴力量相结合,给这个问题增加了新的维度,并极大地放大了它。
人工智能在生成惊人的类似人类的内容方面逐年进步。像 GPT-3 这样的语言模型只需要输入一行提示就可以独立完成整篇文章。深度神经网络经常被用来创建被称为 deepfakes 的虚假图像或视频。篡改视频曾经是一个繁琐而昂贵的过程,需要大量的专业技术。开源软件如 FaceSwap 和 DeepFaceLab 使这项技术变得更容易使用。今天,任何专业知识有限的人都可以使用电脑或手机轻松制作 deepfakes。
互联网已经成为数十亿人消费信息的最重要渠道。我们在网上的所见所闻塑造了我们的观点和世界观。获取信息对民主至关重要。通过不断地篡改真相,假新闻正在千刀万剐地伤害民主。
虽然假新闻的传播得到了几个既得利益者的资助、帮助和教唆,并受到人类行为的进一步推动,但帮助制造假新闻的技术也可以用来打击假新闻。加剧假新闻影响的算法是否也可以用来对抗假新闻,并大规模培养批判性思维?
本文探讨了各种技术解决方案,以首先识别并阻止假新闻的传播。
检测假新闻
可以用 AI 识别假新闻吗?为此,我们必须首先回答一个非常微妙的问题:什么是真理?研究人员和公司没有正面解决这个问题,而是试图回答更简单的问题。
例如,AI 可以确定一段内容是由计算机还是人类创建的吗?是的,它可以——达到一定的精确度。分析语言线索的技术,如单词模式、句法结构、可读性特征等。可以区分人类和计算机生成的文本。类似的基于特征的方法也可以用于从真实照片中分离合成图像。
然而,最近生成对抗网络的成功表明,算法将很快能够很好地模仿人类,以至于它们产生的内容将与我们创造的内容难以区分。
生成对抗网络是由两个互补部分组成的深度神经网络。一个生成器算法将一组真实样本——文本或图像——作为输入,并试图复制这些模式来创建合成样本。另一方面,鉴别器算法学习区分真实样本和合成样本。生成器和鉴别器竞相智取,在这个过程中,两者都在不断改进。这个过程以一个生成器结束,该生成器可以生成无法与真实样品区分开来的合成样品。
OpenAI 最近推出的 GPT-3 可以写文章、故事、电子邮件、诗歌、商业备忘录、技术手册等。它可以回答哲学问题,简化法律文件,并在语言之间进行翻译。对于短小的文本,几乎不可能将 GPT-3 的输出与人类书写的文本分开。
检测假新闻的第二种方法包括确定文章中提到的事实的真实性,不管是人还是计算机写的。Snopes、Politifact、FactCheck 等服务。雇佣人类编辑进行研究并联系第一手资料来核实一个声明或一张图片。这些服务也越来越依赖人工智能来帮助他们翻找大量数据。
我们写事实的方式不同于我们写谎言的方式。研究人员正利用这一点,通过使用 14 年来撰写的愚人节恶作剧新闻文章的语料库训练人工智能模型,来教机器区分真实和虚构。
另一种验证方法是给每个新闻网站分配一个信誉分数。只有当具有高信誉分数的网站认可一个陈述时,该陈述才被认为是经过验证的。例如,信托项目使用诸如道德标准、来源和方法、矫正政策等参数。评估新闻渠道的可信度。
除了标记潜在的虚假故事,社交网络也开始对屡犯者采取惩罚措施。这些行动包括压制甚至封杀散布假新闻或仇恨言论的账户。这方面的一个例子是脸书推出的“群体质量”功能。如果社交网络也显示新闻来源的信任指数和被识别为虚假的危险信号故事,这将有所帮助。
遏制假新闻的传播
除了有助于假新闻的产生,技术在假新闻的传播中也起着至关重要的作用。由于其耸人听闻的性质,假新闻在社交媒体上的传播速度远远快于真实新闻。麻省理工学院的研究人员在《科学》杂志上发表的一项详细研究显示,真实消息到达 Twitter 上 1500 人的平均时间是虚假消息的六倍。当他们查看转发链时,他们发现真实新闻的链长从未超过 10,但虚假新闻的链长达到了 19——这比真实新闻达到 10 次转发的时间快了近 10 倍。
为什么虚假故事比真实故事在社交网络中传播得更快更深入?许多人本能地指责机器人,在我们的脑海中浮现出恶意黑客雇佣大量机器人来传播虚假故事的画面。
机器人是由程序自动运行的社交网络上的用户帐户。在过去的几年里,技术公司已经开发了复杂的机制来检测 bot 帐户。他们监控网络,以发现并阻止沉迷于恶意行为的账户,如利用自动化来中断或扩大对话;产生虚假的赞、分享或其他形式的参与;参与群发、垃圾邮件或攻击性帖子;瞄准,玷污或垃圾邮件其他用户等。像 Twitter 这样的网站每天都会删除大量的恶意机器人账户,这是由技术辅助的。此外,像僵尸工具这样的机器学习应用程序使用成千上万的特征,如用户的个人资料细节、联系、活动模式、语言和情感,来预测一个账户是机器人的可能性。
但是机器人是传播假新闻的唯一责任吗?似乎不是这样。机器人确实放大了新闻的传播,但它们同样放大了真假新闻。在上面提到的同一项研究中,研究人员通过从他们的数据中包含和排除机器人账户来重复他们的实验。在这两种情况下,他们得出了相同的结论,表明虚假新闻传播得更快,因为人类——而不是机器人——更有可能分享它。
私人信息平台
与社交媒体网络不同,消息平台有更严格的隐私政策。比如 Whatsapp 支持端到端加密。这些信息只能被预期的接收者解密和阅读,甚至 Whatsapp 的开发者也不能。即使政府当局意识到 Whatsapp 上流传着一个虚假的故事,他们也无法阻止它。
Whatsapp 过去曾试图通过推出限制转发数量、限制群组规模等措施来缓解这一问题。这非但没有帮助,反而鼓励用户转向 Telegram 和 Signal 等没有实施这些限制的其他消息平台。
由于这些平台的性质,监控这种通信以打击假新闻变得几乎不可能。
需要齐心协力
虽然与假新闻有关的高调事件占据了人们的注意力,但更大的问题是虚假信息的普遍存在。印度正在见证高情感低事实的新闻故事的迅速崛起。这模糊了耸人听闻的报道和彻头彻尾的假新闻之间的界限。
支持假新闻的机制是复杂的,涉及利益不同的多个行为者。
个人出于恶作剧,为了推进政治议程或经济利益而制造假新闻。耸人听闻的内容充当点击诱饵,可以在 YouTube 等平台上货币化。
当故事像病毒一样传播时,科技公司就能获得广告收入。因为他们要对股东和广告商负责,他们不愿意压制任何内容——不管是假的还是真的。
像大多数其他国家一样,印度缺乏专门处理网络虚假信息的监管框架。我们需要法律来惩罚恶意传播虚假言论,同时不影响公民言论自由的宪法权利——这是一个具有挑战性的法律问题。
应该让公民意识到未经证实的消息对他们自己的未来是有害的。印度的一些学校开始向中学生灌输核实事实的习惯。学生们被教授批判性思维和验证他们所见所闻的方法。
人性和科技对假新闻问题负有同等责任。要解决这个问题,我们需要改变人类行为,以适应我们作为大信息消费者的新角色。我们需要认识到可信度和真实性的重要性,并学会珍惜它们。这不会在一夜之间发生——这是一个逐渐的觉醒,我们希望有一天会到来。在此之前,技术可以减轻这种影响,并成为这种变化的催化剂。
Viraj Kulkarni 拥有加州大学伯克利分校的计算机科学硕士学位,目前正在攻读量子计算和人工智能的博士学位。Sahil Deo 是 CPC Analytics 的联合创始人,CPC Analytics 是一家数据驱动的政策咨询公司,在浦那和柏林设有办事处。Sanjana Krishnan 是 CPC Analytics 的合伙人。
贝叶斯统计能给出和 ML 一样质量的预测吗?
在某些情况下是的。这就是方法。
巴勃罗·加西亚·萨尔达尼亚在 Unsplash 上拍摄的照片
最大似然算法是当今解决预测问题的主要方法。这种算法可能易于使用,并且通常提供更准确的预测。另一方面,统计方法提供了关于过程的更多信息,另外,由于算法更加透明,结果对最终用户来说似乎更加可靠。但是精度上的差距是不是太大了?
介绍
任务如下:给我们一个数据集,代表 400 家商店。对于每个商店,都有其 3 年的收入,以及一组反映内部因素的特征,如商店的外观、可达性等。以及外部因素,如行人流量、该地区的房地产价格等。目标是根据商店的特征预测商店的日收入。
在一次头脑风暴会议期间,我们的团队决定开发两种方法:基于 ML 树的方法和使用贝叶斯统计并比较结果的方法。
统计方法包括 3 个步骤:
- 线性回归并通过将收入除以相关特征来构成新的目标。
- 从与新目标不相关的特征中,我们根据它们提供的信息增益挑选出最有用的特征。
- 基于所选特征的值,用贝叶斯分析对新目标进行预测。以及使用先前计算的线性回归系数来计算收入预测。
现在,让我们更深入。
1.线性回归
首先,我们需要找出哪些特征与目标相关,从而适合线性回归。不出所料,他们人数很少。基本上,我最后只得到一个——商店的工作时间,但它的相关系数为 0.7。
我认为这里可能会出现一个正反馈循环:不仅商店营业时间越长,产生的收入越多,而且管理层也倾向于减少不太成功的商店的工作时间,以削减开支。所以工作时间短可能说明店铺业绩不好。
无论如何,在计算线性回归系数后,我可以通过将收入除以工作时间来生成一个新的目标。实际上,我最终得到的是商店的每小时收入,这反映了它的核心业绩。这个目标似乎与任何特征都没有很强的相关性,
在进入下一步之前,我们要做的一切就是从数据集中删除所有相关的要素,只留下独立的要素。
2.复杂依赖关系,差分熵
现在是最有趣的部分。我们有一组独立的特征,它们既不与目标相关也不彼此相关。
如果特征与目标不相关,并不一定意味着它没有给出关于它的信息。让我用下面的例子来说明:
让我们生成一个数据集:
这是它看起来的样子
这个特征告诉我们很多关于目标的信息,但并不与目标相关(图片由作者提供)
这里的相关指数是-0.18,这意味着基本上没有依赖性,但很明显,该特征具有很高的信息量。
有一种度量随机变量不确定性的方法叫做熵。对于连续变量,它可以计算为:
其中ρ(x) —概率密度函数
为了挑选最有信息的特征,我们可以简单地根据它们提供的信息增益对它们进行分类
其中
y-要素
nᵢ-数据集中具有要素 Y = yᵢ值的条目数
基本上,信息增益是数据集的初始熵和由特征值选取的子集的熵的加权平均值之间的差。
在这一点上,可能不清楚为什么不使用标准差?事实上,在上面的图片中,每个子集的标准偏差比整个数据集的标准偏差小 5 倍,这也同样有效。
但是让我们考虑下面的例子:
信息越丰富的要素标准偏差越大(图片由作者提供)
在上图中你可以看到两个分布,一个是宽高斯分布,另一个是两个窄峰。第一个分布的标准差是 0.5,而另一个分布的标准差是 3。但是让我们计算熵,我们得到 1.04 和-0.27(是的,熵可以是负的)。第二个分布提供了更多关于变量的信息,尽管有更大的标准差。
3.贝叶斯分析介绍,部分分布→可能性
现在让我们试着做一些预测。首先,快速提醒一下贝叶斯推理是如何工作的。主要的想法是你用基于你的观察的可能性因子来更新你先前的信念。
可能性是假设你先前的信念,观察给定证据的概率。现在,用概率分布来改写它:
α—归一化常数
为了获得观察到具有特定收入的商店的特定特征的概率,我们需要计算在显示该收入的所有商店中拥有该特征的商店的分数。
为了让这个技巧发挥作用,我们需要把一个连续的特征变成一个分类的特征。我用 pd.qcut()把所有的连续特征分类成 8 个八分位数。常规线性宁滨似乎不适用于此目的,因为大多数要素的分布并不均匀。这意味着,虽然 2-3 个箱将包含几乎所有的商店,但其他箱将包含很少的商店,并且很难评估此类箱的部分收入分布。
作为先验分布,使用数据集中收入的总体分布是合理的。
现在,我们要做的就是用所有特征的似然因子更新先验分布,并计算结果的平均值。当然,在计算部分分布之前,有必要将商店本身从数据集中排除。
贝叶斯推理后得到的收益分布(图片由作者提供)
为了获得对初始目标的预测,我们需要将从步骤 1 中获得的预测乘以车间的工作时间。
预测和结果分析
在下图中,你可以看到预测与事实的散点图。为保密起见,预测和实际收入均以常规单位表示。
作者图片
实现了以下性能指标:
MAPE — 23.1
MdAPE — 20.0
出现错误的店铺数量:
错误< 10% — 14
错误< 20% — 29
错误< 30% — 43
错误> 50% — 5
同时,基于树的 ML 模型已经在具有以下性能指标的相同数据集上被训练:
MAPE — 22.5
MdAPE — 19.2
误差店铺数:
误差< 10% — 17
误差< 20% — 30
误差< 30% — 43
误差> 50% — 5
从误差分布可以看出,ML 在小误差领域表现更好。ML 模型预测了 17 家商店的收入,误差小于 10%,而 Bayesian 只对 14 家商店达到了这一分数。不管怎么说,ML 只比 MAPE 好 0.6,比 MdAPE 好 0.8。
总的来说,ML 模型提供了更好的准确性。但是该实验表明,对于 0.6 MAPE 的价格,人们可以获得概率分布以及获得该结果的更透明的算法,这在某些情况下对于最终用户是至关重要的。
感谢阅读!
https://vityazevdanil.medium.com/
大数据可以讲述人类的故事吗?
在数据科学的背景下,美丽似乎是一个奇怪的概念——图表可能清晰且易于理解,数据库可能干净且维护良好,但它们能变得美丽— 甚至动人吗?
Kie Ichikawa 最近的帖子让我们好奇用大数据讲述强大人类故事的各种新可能性。Kie 利用了日本几个世纪的樱花数据,表明围绕我们塑造和呈现数据的方式,以及我们如何利用它的力量将客观事实与个人和社会经历联系起来,还有很多值得探索的地方。看完你不会后悔。
马库斯·斯皮斯克在 Unsplash 上拍摄的照片
如果不美观,一个健壮的、性能良好的机器学习模型至少有某种优雅。在过去的一周里,两个帖子在他们创建和维护长期交付的模型的方法上引起了我们的注意。 Aparna Dhinakaran 写了一篇被广泛阅读的关于数据质量控制的帖子,以及即使(如果不是特别)一旦模型投入生产,维护模型的重要性。与此同时,韦丹特·贝迪探索了经济计量模型和模型稳定性的概念——衡量其即使面对不断变化的输入也能做出正确预测的能力。
从数据集和模型维护的本质上退一步,崇高的概念和它们在我们自己的日常现实中的表现方式之间的紧张关系一直是几次生动对话的焦点。在人工智能方面,技术进步产生了对隐私、偏见和歧视的担忧(仅举几个例子)。博士研究员 Matthew Stewart 同意这些担心在很大程度上是合理的,但他希望我们能通过新兴的人工智能研究领域超越这些担心,为社会造福。花时间和他一起深入了解当前利用人工智能解决生物多样性、气候变化和物质滥用等问题的工作。
最后,从出色完成的工作中可以获得大量的快乐——职业上的、智力上的——当我们知道自己已经尽了最大努力,并且做出的工作给别人留下了积极的印象时,我们会有一种成就感。在求职的背景下,赵明杰解释了你应该如何谈论你过去的项目,这样不管你的听众是什么技术背景,你的贡献都是清晰而有意义的。即使您已经开始了您的数据科学之旅,也总会有改进的方法(并使您的生活变得更加轻松)——要获得灵感,请查看我们对最近关注简化和加速您的工作流的热门帖子的综述。
为又一周的良好学习和生动对话干杯——感谢你加入我们的行列,感谢你对我们工作的支持。
直到下一个变量,
TDS 编辑器
我们策划主题的最新内容:
入门
- 在 Plotly Dash 上构建自己的谷歌翻译应用作者 Vanessa Wong
- 由拉胡拉·辛格撰写的关于自然语言处理(NLP)的详细新手介绍
- 这些错误很容易毁掉你的数据科学面试
实践教程
深潜
思想与理论
- 偏差-方差误差的简单数学推导
- 野外潜泳:谷歌、英特尔、苹果和 IBM 的监管不力欧内斯特·陈著
- Idil Ismiguzel的集成学习实用指南
写关于数据科学的博客真的能让你被聘为数据科学家吗?
剧透警告——是的,但是有一个问题。下面是我 2.5 年后的经历。
卢卡·奥尼博尼在 Unsplash 上的照片
数据科学职位从未有过如此多的职位空缺,但是,成为一名数据科学家却从未如此困难。
为什么?答案很简单——较小的公司通常不需要整个数据科学部门,所以他们最终会雇佣几个资深员工。这对你来说太糟了。另一方面,在地狱结冰之前,没有经验的你可能不会被大公司雇用。
你可以做一些事情来增加你的机会,甚至完全停止寻找数据科学的工作。见鬼,在过去的 2.5 年里,那个叫的东西给我带来了几十份工作。最棒的是——同样的事情也会发生在你身上。那个东西正在开一个数据科学博客。
不想看书?改看我的视频?
作为一名数据科学家,你为什么应该开一个博客
我可以就此谈论几个小时,但推理归结为三点。我相信你知道所有这些,所以把这部分当作一个可选的回顾。
这是最快的学习方法
那么,你已经了解了 PCA 是如何工作的。你能向一个 10 岁的孩子解释吗?你能抛弃花哨的特征值和矩阵术语而不丢失核心思想吗?如果是这样,你就真正理解了这个主题。如果没有,回到绘图板。
一开始,写复杂的主题,因此,不用大词来教授它们是一项具有挑战性的任务。毕竟,他们中的许多人在这里只是为了让写这本书的人听起来更聪明。事实上,不必要的过度复杂化会让你听起来像个傻瓜。使用小的,容易消化的单词。你的读者会喜欢它的,因为他们中的大多数人没有持有定量领域的高级学位。
用简单易懂的语言写复杂的话题也会让你的理解水平飙升。
这是一种建立声誉的神奇方式
我永远也不想成为一名负责筛选数百名求职者的 IT 招聘人员。这是一个可怕的地方。更糟糕的是,从背景噪音中分离出好的匹配的时间窗口有限。
这是一条经验法则——如果你不突出,你就会被过滤掉。
在你的简历中链接到你的数据科学博客可以让世界变得不同。大多数申请者都没有个人数据科学博客,所以这可能是你的黄金入场券。
它显示了你的思维过程
将复杂的话题浓缩成 5 分钟的文章是一项巨大的成就。好处不止于此。你的文章还展示了你的思维过程,这向潜在雇主表明了你如何思考和应对现代数据科学家的挑战。
这表明你已经花了时间去完全理解这个话题,而且你没有匆忙地从一件事跳到另一件事。这听起来不多,但在当今这个注意力持续时间很短的世界里,能够专注于一件事是很难得的。
我写了大约 2.5 年关于数据科学的博客后的结果
当我开始写数据科学博客时,我是全职工作。我仍然在做同样的工作,直到年底。最终,我决定辞职,因为写关于数据科学的博客比做数据科学家多赚 2 到 3 倍的钱。这也大大减少了我的工作时间。
关于数据科学的博客带来了两大类数十份工作机会——数据科学和技术写作。两者都不错,但不同类别的报价差别很大。接下来我会尽力解释这两个问题。
数据科学博客➡️数据科学招聘
仅仅根据我的数据科学博客,我就获得了 4-5 份全职数据科学职位的工作机会。但是残酷的现实是——这些都是在我把最初的努力投入到博客中之后才发生的。开一个数据科学博客是一回事,但保持一致是另一回事。我花了大约 1.5 年才得到第一份工作。
我认为这很公平——如果你不认真对待你和你的小博客,没人会认真对待。没有比坚持下去却看不到任何结果更好的方式来表明你是认真的了。
我收到的一些工作邀请完全遥不可及,但我决定放弃所有的邀请。毕竟,这只是用一份全职工作换来另一份,如果你对现在的工作感到满意,这就没有意义了。此外,他们中的大多数都是在我不太关心的工作领域,比如公司财务。我宁愿自焚。
数据科学博客➡️技术作家工作机会
我收到了几十份技术写作职位的邀请,有的是自由职业者,有的是兼职,有的是全职。我比第一份数据科学工作更早得到了第一份技术写作工作。我不认为我的写作是壮观的,但公司需要有人写关于他们的产品或服务的内容。如果他们有自己的博客,如果这个产品给我留下了一些惊喜,我通常会同意。
出于多种原因,我更喜欢这些优惠。这份工作简单多了,没有什么繁文缛节(如果有的话),完全是远程的,而且我可以自己设定工作时间。这是一个双赢的局面,因为一家公司获得了他们想要的曝光率,而我可以在山里骑自行车写作。
因为我已经在网上建立了一定的声誉,我可以为我的写作服务收取额外费用。通常,我在 2-3 个工作日内就能拿到我国家的平均工资。你也可以这样做。
请记住——找到高质量的客户很难,而找到持续为你工作的客户更具挑战性。我有一对夫妇每周需要一篇文章,但这些占收到的要约的 5%左右。大多数客户都是有毒的,他们希望通过收取额外费用的劣质服务在谷歌上排名第一。好好照顾前 5%的人,他们也会为你做同样的事情。
带回家的点数
所以,你决定尝试一下数据科学博客。这是个好消息!这里有几件事你应该记住:
- 你必须先建立一个声誉,不要指望在博客上呆上一个月就能得到任何邀请。至少需要一年时间。数据科学是如此广泛,你不可能没有主题思想。
- 根据你的博客,你可以被聘为数据科学家——但实际上,你会收到更多的技术写作邀请,至少根据我的经验。
- 你应该为你的服务收取额外费用 —作为副业提供数据科学服务意味着你直接与客户合作。没有像你朝九晚五的工作那样的中间人,这通常需要你价值的 80-90%。学会利用它。
- 你可以全职工作——总有一天你必须做出选择——继续做全职工作并享受福利,或者自己当老板,挣比你想象中更多的钱,同时减少工作时间。这取决于你。
- 你必须考虑全职 it 面临的挑战 —从数据科学家转型为数据科学内容创作者比看起来更具挑战性。我们大多数科技专业人士都不太擅长用词,尤其是如果我们的母语不是英语的话。
*这里有人在经营一个有点成功的技术博客吗?*请在下面的评论区分享你的经历。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
https://medium.com/@radecicdario/membership
保持联系
消费者的评分可以认为是等距的吗?
行业笔记
从亚马逊数据的对应分析中寻找答案
图片由图米苏在 Pixabay 上提供
量化一个观点意味着将一个无限连续的心理概念投射到一个测量尺度上。尽管潜在的观点在心理测量术语中可能具有连续性,测量要求限制了它的显式表达。这些要求因收集数据所采用的方法而异,每种方法都有机器学习模型应该面对的陷阱。
通常,像电子商店这样的在线平台通过使用评级量表来调查意见。分析评级数据的一个常见问题是将每个定性判断与一个数值联系起来。由于不清楚评级是否等距,数字分配可能会导致复杂的任务。在本文中,我尝试将心理测量学中的一些概念引入到评分数据的分析中,测试对应分析的有效性,以探索反应量表各步骤之间的距离。
通过评级衡量意见
在心理测量学中,李克特方法是一种广泛收集观点、态度和行为的方法。李克特方法强迫把一个“连续的”观点投射到一个由有限的有序选项集合构成的离散尺度上。这种预测将潜在的连续体分解为区间,而这些区间的大小可以根据回答者对反应量表的步骤的理解而变化。
李克特的方法只是用来量化观点和态度的众多方法之一,它是一个很好的提示来探索我们可以控制来调整观点投射过程的评级尺度的特征。
- **长度。**我们可能认为,与少数选项相比,许多响应选项允许捕捉更精细的措施。这可以是真的,但不一定。太多的选项会产生混乱,不同的响应者可能会有不同的解释。因此,该指标应该足够宽泛,允许消费者表达自己的意见,但仅限于绝对必要的情况。
- **居中。**奇数步或偶数步会有所不同。中间类别可以用作“避难所”来提供不极化的响应。然而,中心类别可能会被一个极性同化,使天平失衡。
- **贴标。**评定等级的每一步可能有也可能没有标记。标签向应答者暗示每个评估代表什么,有助于在不同的人之间统一量表的使用。有时,心理测量量表只对极端类别(“锚”)使用标签。
李克特方法中固有的一个古老问题是将定性意见转换成定量值,因为标度的原点是任意的,并且因为标度的步长并不总是被认为是等距的。我们在分析星级时发现了同样的问题。
星级
我们非常熟悉使用星级来评估产品。通常,星级由五个选项组成,因此它们有一个中心类别。星星没有标签;然而,每个人都不清楚每一步应该代表什么。明星把答案集中在几个选项上,避免混淆;此外,它们的数量足以区分不同层次的意见。
星级评定在全球范围内被广泛用于收集消费者对产品和体验的意见。然而,有一些限制要考虑。
- 一个相关的担忧是关于在线评论的自我选择偏差。只有受限制的一部分消费者来表达一种观点,而这种对样本的自我选择并不是随机的,而可能恰恰取决于判断。因此,在反常的角色互换中,意见既可以是措施的目标,也可以是措施的原因。一个有趣的结果是 漏报偏差 :极端的经历(无论是正面的还是负面的)比一般的经历更有可能被报道;因此,她们的人数过多。
- 另一个有趣的现象是由于审查制度的 顺序性 导致的意见扭曲。由于在线考核是按顺序报告的,而不是并行报告的,因此每位评核人都会看到以前的考核。这种阐述可能会创建一个依赖于数据的结构。
- 作为一名具有心理测量学背景的数据科学家,另一个问题让我着迷:评级之间的等距假设的失败。我们说过,在评级尺度上投射一个连续的观点会将潜在的连续体分解成多个区间。这些间隔可能不相等,这取决于反应等级的特征。因此,台阶之间的距离(“星”)可能不一致。
在下文中,我集中讨论等距问题,这代表了机器学习和心理测量评估之间共有的技术问题。
评定等级的步骤可以被认为是等距的吗?
我不认为这个问题有一个明确的答案。然而,在分析数据集之前至少获得一个想法可能有助于设置有效的算法。老实说,这个问题超出了机器学习,因为评级之间的等距是许多汇总指标的基本假设。
一些作者(见参考书目)试图用一种有趣的方法提供一个答案:对应分析。尽管这种方法并不新鲜,但似乎并不广为人知。接下来,我得到了一个网店评论的数据集,并测试了这个方法。
亚马逊乐器评论
与许多其他电子商店一样,亚马逊要求顾客使用五星评级来评价产品。我分析了这个由 Kaggle 提供的数据集,它包含了 900 种乐器的 2440 条评论(数据是在 CC0 许可下公开发布的)。
https://www.kaggle.com/eswarchandt/amazon-music-reviews
我用来导入数据和获得初步计数的 R 代码如下所示。
下面的柱状图恢复了意见,绘制了评定等级中每一级的观察频率。总体而言,数据严重偏向于正面判断。
我重新整理了数据,将产品按行排列,将评分按列排列,在每个单元格中报告评论的数量。换句话说,我建立了一个应急矩阵。
然后,我应用了对应分析。
对应分析
对应分析(CA)是一种数据压缩技术,用于处理列联表。CA 可以应用于通过两个标称或顺序变量获得的频率数据。该分析的工作方式类似于主成分分析(PCA),并且,从某种角度来看,CA 就像非度量数据的 PCA。
远不是在这里提出一个关于 CA 的手册,你需要知道 CA 在几个维度上减少数据,解释观察到的方差的更大可能比例。CA 提取的分量和 min ( r-1 , c-1 )一样多,其中 r 是列联表的行数, c 是列数。像 PCA 一样,当只有两个组件可以用来表示数据时,多亏了二维图,我们可以可视化行和列类别。
将 CA 应用于像亚马逊乐器那样的权变矩阵,我们应该找到两个组件:
- 第一个代表判断的极性(从负到正);
- 第二个代表判断的强度(从低到高)。
我们可以构建一个二维映射,将第一个组件的主列坐标放在横轴上,将第二个组件的主列坐标放在纵轴上。如果步骤是等距离的,那么我们应该找到一个对称的 U 形。下图显示了这种理论模式。
图片由作者提供—在 CC0 许可下发布
结果
不幸的是,前两个因素解释了相对较低的方差百分比(不到 60%,见下表)。最后的组件仍然解释了太多的差异,没有任何断点(著名的肘形)。因此,CA 提供的数据压缩并不像希望的那样有效。
dim | eigenvalue | % explain | cumulated %
1 | 0.149205 | 33.5 | 33.5
2 | 0.110787 | 24.9 | 58.4
3 | 0.095135 | 21.4 | 79.8
4 | 0.090116 | 20.2 | 100
无论如何,下面的图显示了使用前两个组件的坐标创建的地图。正如预期的那样,数据画出了一个近似 U 形的曲线,但这个曲线远非对称。
关于极性(x 轴),与评级之间的其他步骤相比,该图显示一颗星和两颗星之间的差异非常小。标度的两个最低点在极性上看起来非常相似,但它们在兴趣强度(y 轴)上有所不同。
三颗和四颗星在极性上被正确分类,但在强度上完全重叠;其实它们好像是一个四分音阶的两个中枢!
考虑到上面提到的前两个维度,计算了评级之间的欧几里德距离。应用了重新缩放程序,将每个距离 d 乘以(k-1)/sum(d),其中 k 是步数(因此, k -1 是可用距离数)。
1->2 2->3 3->4 4->5
1.44 1.18 0.64 0.74
如果最高等级(3、4 和 5)之间的距离大致相似,则 1、2 和 3 之间的距离显示出一些重要的差异,尤其是在等级的最低部分。
我们能得出什么结论?
结果表明,消费者对回应量表的态度可能与我们的预期不同。CA 显示了低评级和高评级之间的不对称性。特别是,一星评级代表了一种非常极端的判断,五星的对立面似乎是二星而不是一星。显然,结果可能依赖于产品,不能被认为是决定性的。
CA 远不能提供通用的答案,它可以代表一种探索评级的有趣方法。该技术有助于研究标度步骤之间的距离,例如,选择回归或分类方法。
最后,我们可以做些什么来提高数据质量?
一般来说,非线性评级不是一种测量工具的“缺陷”,而是一种“特征”。前一句话可能看起来像是机会主义,但却是事实:尽管这个体系可能不完美,但它可能是好的。
为了改进评定等级,我们可以研究前面描述的三个主要属性,即长度、中心和标签。当然,长度是一个非常关键的属性,可以很容易地操作。一个有趣的方法是引入部分星星。
图片由作者提供—在 CC0 许可下发布
部分星级的优势在于没有扩大范围,因为每个评级都固定在一个参考支点上。此外,他们让回答者明白,每个部分的评价只是一个“父亲”判断的色调。通过这种方式,你可以提供更多的选择,而不会让回答者感到困惑,限制了评分者之间获得不同量表用法的风险。
基本书目
- d bkowska k .(2014 年)。应用对应分析确定波德拉斯基地区电子服务部门企业经济状况的决定因素。经济与管理 I zarządzanie, 6 (1),38–56。[ 链接
- 达比希尔 p .麦克唐纳 H. (2004 年)。选择反应量表标签和长度:研究人员和客户指南。澳大拉西亚市场研究杂志 I , 12 (2),17–26。[ 链接
- 肯尼迪、里基耶、夏普(1996 年)。对应分析在市场研究中对分类数据的实际应用。营销目标测量与分析杂志, 5 (1),56–70。[ 链接
- 绿色体育,塔尔 D.S .,阿尔巴姆 G. (1988 年)。营销决策研究(第 5 版)。普伦蒂斯-霍尔国际版:新泽西。
数据湖能加速构建 ML 数据管道吗?
通过数据湖和数据仓库研究数据科学的洞察时间
照片由 Emil Jarfelt 在 Unsplash | 品牌内容披露上拍摄
数据工程中的一个常见挑战是将传统的数据仓库和 BI 报告与实验驱动的机器学习项目相结合。许多数据科学家倾向于更多地使用 Python 和 ML 框架,而不是 SQL。因此,他们的数据需求往往与数据分析师不同。在本文中,我们将探索为什么拥有一个数据湖通常会为数据科学用例提供巨大的帮助。我们将以一个有趣的计算机视觉演示结束,从存储在 S3 数据湖中的图像中提取文本。
1.数据湖是数据不可知的
仅拥有纯关系型数据仓库限制了该数据平台能够支持的多种数据格式。许多数据仓库解决方案允许您分析嵌套的类似 JSON 的结构,但是它仍然是数据湖可以支持的数据格式的一小部分。
虽然对于分析来说,没有什么比关系表结构更好的了,但拥有一个允许您做更多事情的额外平台仍然是有益的。数据湖是数据不可知的。它们支持对数据科学至关重要的大量数据:
- 不同的文件类型 ( csv、tsv、json、txt、parquet、orc )、数据加密、压缩格式 ( snappy、gzip、zlib、lzo ),
- 图像、音频、视频文件通过计算机视觉算法实现深度学习用例,
- 模型检查点由 ML 训练岗位创建,
- 跨越关系型和非关系型数据的连接,两者都是服务器端的( ex。Presto 或 Athena )和客户端( ex。你的 Python 脚本),
- 来自 web 的数据:点击流、购物车数据、社交媒体( ex。tweets、Reddit、博客帖子和新闻文章抓取自然语言处理分析),
- 时序数据:物联网和传感器数据、天气数据、金融数据。
2.提高开发效率
将原始数据手动摄取到数据仓库是一个相当繁琐且缓慢的过程。您需要预先定义一个模式并指定所有数据类型,创建一个表,在您的脚本或 ETL 工具中打开一个 JDBC 连接,然后最终您可以开始加载您的数据。相比之下,数据湖中的加载步骤通常就像单个命令*一样简单。例如,用一行 Python 代码就可以将一个 Pandas 数据帧接收到一个基于 S3 的数据湖中(Pyspark 和 Dask 中的语法非常类似)😗
摄入 S3 数据湖——图片由作者提供
如果您主要使用 Python 进行分析和数据工程,您可能会发现使用数据湖比使用数据仓库更容易读写数据。
3.支持更广泛的数据处理工具
我们讨论了数据湖支持的各种数据,但是它们也支持各种处理框架。虽然数据仓库鼓励主要使用 SQL 和 UDF 在内存中处理数据,但数据湖使用编程语言或您选择的平台检索数据变得容易。因为没有强制实施专有格式,所以您有更多的自由。通过这种方式,你可以利用一个 Spark 或 Dask 集群的能力,以及在它们之上构建的大量非常有用的库,只需使用 Python 。参见下面的示例,演示如何在 Dask 和 Spark 中读取拼花文件:
注意这不是一个非此即彼的决定,一个好的数据工程师可以同时处理两者( DWH 和数据湖),但是数据湖使那些分布式处理框架更容易使用数据。
4.数据管道中的故障变得更容易修复
修复传统的 ETL 数据管道既困难又耗时,其中只有“加载”部分失败,因为您必须从头开始整个管道。数据湖鼓励并支持 ELT 方法。您可以将提取的数据以原始格式直接加载到数据湖中,然后在同一个或完全独立的数据管道中进行转换。有许多工具可以让您将原始数据同步到数据仓库或数据湖中,并在以后需要时进行转换。从转换中分离原始数据摄取可带来更具弹性的数据工作负载。
演示:使用数据湖提供 ML 即服务
为了说明数据湖对数据科学项目的好处,我们将做一个简单的 AWS Rekognition 服务演示,从图像中提取文本。
我们的用例是什么?我们将图像上传到存储原始数据的 S3 桶中。这触发了从这些图像中提取文本的 Lambda 函数。最后,我们将提取的文本存储到一个 DynamoDB 表中,并使用 SQL 检查结果。
如何在你的架构中使用它?除了 DynamoDB,您还可以使用一个数据仓库表或另一个可以使用 Athena 查询的 S3 存储桶位置。此外,除了使用 AWS Rekognition 的detect_text
方法(在下面的代码片段中的第 18 行),您可以将代码修改为:**
detect_faces
detect_custom_labels
recognize_celebrities
- …以及更多。
如何实现这一点?首先,我们创建了一个 S3 桶和一个 DynamoDB 表。该表配置有img_filename
,即上传图像的文件名,作为分区键,这样重新运行我们的函数就不会导致任何重复(等幂)。
为我们的演示创建 DynamoDB 表—图片由作者提供
我们已经有一个名为images
的文件夹的 S3 桶:s3://data-lake-bronze/images。
我们还需要创建一个带有 IAM 角色的 Lambda 函数,我们将 IAM 策略附加到这个函数上,用于 S3、Rekognition 和 DynamoDB。下面显示的函数有一个名为lambda_function.lambda_handler
的 lambda 处理程序和运行时Python 3.8
。它还附带了一个 S3 触发器,该触发器在任何 PUT 对象操作时调用该函数,即在任何文件上传到文件夹images/
时。
Lambda 函数用于检测上传到数据湖的图像中的文本—按作者分类的图像
函数的代码:
- 为 Rekognition 创建一个客户端以及相应的 S3 和 DynamoDB 资源对象,
- 从事件触发器中提取S3 桶名称和关键字* ( 文件名)。*
- 读取图像对象并将其传递给 Rekognition 客户端,
- 最后,它检索检测到的文本,并将其上传到我们的 DynamoDB 表。
让我们用一些图片来测试一下:
左:来自佩克斯的纳迪林赛的照片,中:来自佩克斯的阿列克萨斯福托斯的照片,右:来自佩克斯的穆达西尔阿里的照片
在将这些图像上传到我们在 Lambda 触发器中定义的 S3 桶之后,Lambda 应该为每个图像上传调用一次。一旦完成,我们可以在 DynamoDB 中检查结果。
DynamoDB (1)中的 PartiQL 查询编辑器—作者图片
DynamoDB (2)中的 PartiQL 查询编辑器—作者图片
看起来前两个图像被很好地识别了,但是右边的困难图像(“这仅仅是幻想吗”)没有被识别。
我们怎样才能做到规模化?
如果你想大规模实现一个类似的用例,那么监控那些资源并实现适当的错误警告可能会变得很有挑战性。在这种情况下,你可能要考虑一个无服务器的可观测性平台,比如 Dashbird 。您可以将所有的 Lambda 函数和相应的 DynamoDB、ECS、Kinesis、Step 函数、SNS、或 SQS 资源分组到一个项目仪表板中,让您可以一目了然地看到您的微服务和 ML 管道的当前状态。
Dashbird 中所有无服务器资源的项目视图—图片由作者提供
每种颜色代表不同的资源,例如特定的 Lambda 函数。将鼠标悬停在它们上面,可以看到更多细节。然后,您可以深入了解更多信息。
***边注:*上图中的零成本可以通过 AWS Lambda 和 DynamoDB 的始终免费层来证明。在过去的两年里,我一直在我的个人项目中使用 Lambda,到目前为止还没有收到过 Lambda 的账单。
AWS 始终免费层。来源 —作者截图
结论
从题目来回答问题:是的,一个数据湖肯定可以加快数据管道的发展,尤其是那些与数据科学用例相关的。处理各种数据格式的能力以及将这些数据与分布式处理和 ML 框架轻松集成的能力使得数据湖对于大规模进行数据科学研究的团队特别有用。尽管如此,如果使用来自数据湖的原始数据需要太多的清理,数据科学家和数据工程师可能仍然更喜欢使用来自 DWH 的已经预处理和历史化的数据。像往常一样,仔细考虑什么最适合您的用例。
感谢您的阅读!如果这篇文章有用, 关注我 看我下一篇帖子。
参考资料&其他资源:
[2]AWS ML 工具列表(2021 年)——dash bird
[3] 使用 AWS Lambda 的机器学习 — Dashbird
深度强化学习能解决象棋吗?
实践教程
经典和深度强化学习速成班,用 Python 实现
照片由来自 Pexels 的 Tara Winstead 拍摄
目录:
- DRL 简介
- 实现 DRL
- 分析结果
- 结论
注意:所有代码都是片段形式,单独执行时无法工作。完整代码可以在我的Github repo上找到。
深度强化学习简介:
作者提供的图片:显示环境的高级定义的流程图
强化学习是对一个 智能体 在一个 环境 中进行决策的训练。代理部署在环境中。在任何给定的帧,代理必须使用来自环境的数据来行动。这个动作会产生一个 奖励 值,它代表了 动作 的质量。然后,代理将相应地更新其流程,以最大化此奖励。
作者图片:Q 表示例
一个基本的强化学习算法是 Q 学习。在 Q 学习中,会创建一个 Q 表。Q 表的行将代表环境的可能状态,而列将是环境中的行动所产生的回报。代理将与环境交互,并在 Q 表中记录奖励值。最终,代理会填写表格。然后,当面对环境时,代理可以选择具有最高奖励值的行动。
尽管该算法在某些情况下确保了完美的策略,但是这些算法的实际应用很少。复杂的环境通常不会对每一步都产生直接的回报,因此在填写 Q 表时会产生问题。
环境中有天文数字般多的状态是很常见的。国际象棋估计有大约 10 个⁰可能的位置。由于一个位置的平均移动次数是 30 次,国际象棋的 Q 表将会太大而无法存储,更不用说完成了。
作者图片
深度强化学习是深度学习在强化学习中的应用。虽然深度学习可以以许多不同的方式应用,但它通常涉及训练深度神经网络,以逼近它尚未看到的状态的 q 值。
然而,需要做出许多假设以允许深度强化算法工作。以反向传播奖励为例。我们知道,导致获胜位置的移动一定有利于最终位置,但我们如何评估它对将死的重要性?我们只能假设越接近胜利位置的移动对胜利有越大的利害关系,所以我们对较早移动的奖励打折扣。
实施深度强化学习:
这个 链接 将把你传送到包含我的实现的完整代码的仓库的子部分。
作者图片
这个图是程序的主要部分之间的可视化表示,主要是环境、模型和目标模型。
环境给模型一个状态向量,模型输出一个动作。模型向模型返回一个动作。更新的 Q 模型然后将更新的 Q 值返回给训练函数,训练函数改变模型的权重。每隔一段时间,来自目标模型的权重被设置为模型权重。
环境:
这是描述模型与之交互的象棋环境的代码的设置。我们已经知道它必须执行的主要功能:
1.返回状态
这个函数简单地返回一个向量,该向量完全表达了代理环境可访问的信息,可以插入到神经网络中。
2.接受行动
这个函数接受一个动作,并通过这个动作改变环境的状态。
3.回报奖励
应该有一个适当的系统,允许代理直接从每个行动中获取奖励。
返回状态:
这个要点展示了将 python-chess board 对象转换成矩阵的函数。它将棋盘转换为行和列,并找到棋盘上的每个方块。
然后,它对所有变量进行一次性编码,使其成为形状为 8,8,12 的数组。该函数与国际象棋环境相关,因此当调用该函数时,类中国际象棋棋盘的变化将会反映出来。
接受行动+回报奖励:
这个要点描述了阶跃函数,它在接受一个动作时推进环境。
虽然播放动作只需要一行代码,但该函数还必须记录所有关于状态的数据和动作的回报,以便对 Deep-Q 算法进行训练。
值得注意的是,我们记录奖励、状态、未来状态以及环境事件是否结束。
更新 Q 值:
事实上,我还编写了函数来更新环境中的 q_values,因为从函数内部访问这些值要容易得多。
作者图片
这是用于评估更新后的-q 值的公式。更新的 q 值等于在状态 s 下执行动作 a 获得的奖励加上未来奖励的最大值,乘以超参数γ。超参数γ可以被认为是未来回报对实施环境的重要性的度量。
型号:
左边的要点描述了 Q_model 类。它包含三个功能,允许它与环境互动。
为 DQN 创建的模型是一个简单的卷积网络,具有 3 个带有 relu 激活功能的卷积层。最后一层包含 4096 个神经元,代表可以在任何给定位置进行的 4096 种可能的移动(64 个用于开始方块,64 个用于结束方块,得到 4096)。
预测函数将棋盘转换为张量,并调用模型来预测输入的输出。它输出总和为 1 的概率分布。我们假设每个值映射到一个移动,较大的概率表示模型的置信度。然后,它应用一个掩码,从分布中删除所有非法移动。然后,通过预定义的字典,该移动被转换为国际象棋移动。
在强化学习中,模型需要探索环境以收集更多的洞察力。探索功能选择随机的合法移动来玩。这允许打破局部最小值的可能性,但是会在开始时减慢训练进度。
执行剧集:
这个 github gist 完全执行算法。它建立在我前面解释过的 q-network 和 chess_env 模块之上。
它还需要一个 variable_settings 文件,其中包含算法的所有超参数,如ε和ε衰减率。它还包括损失函数(Huber 损失)和项目的优化器设置。将文件分开会使配置变得更加容易。
ε用于在勘探和开发之间进行选择。它以变量设置文件中定义的速率衰减。
我没有仅仅使用 model.fit(),而是使用 tensorflow 渐变带特性来更新模型的渐变。
经过一定数量的时期后,目标模型将配置主模型的权重。
结果:
作者图片
从这张截图可以看出,深度强化学习无法正常进行。我最初对结果非常失望和沮丧,并尝试了许多不同的方法来改进算法。
但是,在网上看了别人的证词后,我终于找到了我问题的根源:稳定。
强化学习中的自我游戏是出了名的不稳定,因为模型的回报不是游戏质量的决定性衡量标准。
由于两个模型是相同的,这将导致非常弱的播放,并可能导致模型的播放质量停滞在一个非常低的水平。
深度强化学习能解决象棋吗?
这篇文章提出的问题的答案不是一个明确的否定,而是一个可以用来解决稳定问题的解决方案列表。
1.稳定的对手:
如果我们实现一个稳定的对手,比如 stockfish,我们可能会用我们的算法得到很好的结果!
2.稳定算法:
我们可以使用不同的算法来获得更好的结果,只要我们在新算法中有一些稳定方法。因为我对这个项目的结果非常不满意,所以我从头开始实现了 Google DeepMind 的算法。我将很快发布一篇关于结果的文章。
食物能帮助我们对抗新冠肺炎吗?
答案可能是肯定的:基于机器学习的技术可以识别具有抗病毒特性的食物中的生物活性分子
这篇文章基于今年早些时候发表的论文。
新冠肺炎的持续爆发对全球经济、医疗保健、教育、精神健康和整个社会都有破坏性影响。在开发疫苗方面已经付出了巨大的努力。2020 年下半年几个疫苗的批准代表了疫情终结的开始。然而,在疫苗接种工作完成之前,卫生保健系统和个人健康的压力仍然存在。
对于那些受到严重影响的人,有一个明确的治疗过程,包括住院和开出最近批准的或改变用途的抗新冠肺炎药物。然而,由于住院率仅为 3.5% [1],成千上万感染新冠肺炎的人并没有严重到需要住院,但他们发现自己正在努力控制自己的症状,因为除了休息和服用非处方药以缓解流感样症状外,没有明确的行动方案。
然而,在食物中,或者更准确地说,在超级食物中,可能会找到那些独自与新冠肺炎抗争的人的线索。在今年早些时候发表的一篇论文中,我们应用图形机器学习来预测食物中具有抗新冠肺炎特性的分子,基于它们靶向新型冠状病毒-宿主基因-基因(蛋白质-蛋白质)相互作用组的能力。为此,我们首先校准了一种机器学习算法,以预测实验和临床批准药物中的抗新冠肺炎候选药物。
对于那些独自与新冠肺炎抗争的人来说,线索可能在食物中找到,或者更准确地说,在超级食物中。
为了校准机器学习模型,药物-蛋白质和新型冠状病毒-宿主蛋白质相互作用被表示为人类蛋白质-蛋白质相互作用(PPI)网络上的二进制信号,并且应用网络扩散算法来模拟对药物和疾病干预的系统基因组范围的反应。药物化合物和新冠肺炎病的扩散分布图之间的皮尔逊相关系数用于排列靶向新型冠状病毒-宿主相互作用组网络的化合物。
PPI 上的药物-蛋白质和新型冠状病毒-宿主蛋白质相互作用(左)使用扩散算法传播,以模拟对药物和疾病干预的全基因组反应(右)
机器学习算法的参数经过校准,用于预测针对新冠肺炎的实验验证药物,在交叉验证设置中,该模型的准确率达到 80–84.9%。模型校准后,食品中的近 8000 种生物活性分子通过校准的机器学习算法运行,该算法确定了 52 种预测以新型冠状病毒-宿主相互作用网络为目标的生物活性分子。
预测 52 种生物活性分子靶向新型冠状病毒-宿主相互作用网络。
具有抗新冠肺炎特性的食品生物化学“暗物质”的预测
营养机构认识到植物性食物的价值,但是,他们通常专注于跟踪矿物质、维生素和宏量营养素,而忽略了食物中可能具有保护或抗病作用的非营养分子。因此,这些化合物常被视为营养科学的“暗物质”。然而,它们是最重要的分子。
已确定的抗新冠肺炎分子属于多种化学类别,属于这种“暗物质”,包括(异)黄酮类、萜类、酚类和吲哚类。有趣的是,由于它们的苦味,食品工业通常会通过选择性育种或改善味道的过程来去除其中的一些化合物。
图片来源:Laponogov 等人— 链接
超级森林对抗新冠肺炎
当前食物推荐的一个关键限制是专注于食物中的单个植物化学物质,其中某些食物因其特定植物化学物质的高含量而被作为“超级食物”进行营销(例如,葡萄中发现的有效抗氧化剂白藜芦醇)。在这里,我们假设食品的潜在治疗效果取决于战胜疾病的生物活性分子的多样性和可用性。
因此,使用公开可用的食物和食物中生物活性分子的数据库,我们建立了一个食物图,其中每种成分的理论抗新冠肺炎能力根据反映生物利用度和具有抗病毒特性的预测生物活性分子多样性的富集分数进行排名。我们称这些食物为抗病毒超级食物。
图片来源:Laponogov 等人— 链接
排名最靠前的抗病毒超食物包括不同的浆果(黑加仑、蔓越莓和蓝莓)、十字花科蔬菜(卷心菜、西兰花)、苹果、柑橘类水果(甜橙和柠檬)、洋葱、大蒜和豆类。
有趣的是,黑醋栗不仅具有潜在的抗病毒作用,而且对流感具有潜在的消毒和杀菌作用[2]——尽管它对新冠肺炎的具体保护能力还有待评估。同样,最近的一项研究强调了新冠肺炎食用卷心菜和发酵蔬菜在减少不良后果方面的潜力[3]。
带回家的信息
使用基于机器学习的技术,我们根据其在基因组水平上与实验性抗新冠肺炎药物的共性,确定了食品中具有抗新冠肺炎特性的生物活性分子。然后,我们建立了一个食物地图根据预测的抗病毒分子的生物利用度和多样性对食物进行排序。
尽管我们离设计既美味又健康的食谱还有一段距离,但我们的研究结果表明,我们有望为管理非重症新冠肺炎病例开发出一条更清晰的道路,在这条道路上,抗病毒超剂量将被“开出”以帮助患者更快更好地康复。
感谢 Ivan Laponogov 校对本帖。此处提供的结果是理论工作的一部分,正在进行临床验证,并不打算取代认证的医疗建议。这项工作是帝国理工学院 Hyperfoods 项目的一部分,由 Kirill Veselkov 与沃达丰基金会和厨房理论合作领导。
如果你想了解更多关于我的研究,请关注我,查看我的个人页面,或者在 twitter 上关注我!
参考
[0]拉波诺戈夫一世 *** ,冈萨雷斯 G *** ,谢泼德 m .等人(2021)。网络机器学习绘制“超级森林”对抗新冠肺炎。人类基因组学 15(1): 1。 *等额出资。
[1] ES Knock,LK Whittles,JA Lees 等。2020 年英国的新型冠状病毒疫情:关键的流行病学驱动因素和干预措施的影响。伦敦帝国理工学院(2020 年 12 月 22 日),doi:【https://doi.org/10.25561/85146
[2] Ikuta K,Mizuta K,Suzutani T .来自新西兰和波兰的黑加仑(Ribes nigrum L .)的两种提取物的抗流感病毒活性。福岛医学科学杂志。2013;59(1):35–8.doi: 10.5387/fms.59.35
[3] Bousquet J .等,《卷心菜和发酵蔬菜:从国家死亡率的异质性到严重新冠肺炎缓解策略的候选人》。过敏。2020;00:1–16.【https://doi.org/10.1111/all.14549】T4。
Github Copilot 能让你成为更好的数据科学家吗?
人类对抗人工智能
让我们用 Github Copilot 完成一个数据科学项目吧!
来自 Pexels 的 ThisIsEngineering 摄影
Github Copilot 是最近编程界的炒作,许多文章和 youtube 视频都显示了 Copilot 的惊人能力。我最近获得了 Github Copilot 技术预览版的访问权限,我很好奇Copilot 如何在数据科学项目中帮助数据科学家。
什么是 GitHub Copilot?
GitHub Copilot 是一个 AI pair 程序员,可以帮助你以更少的工作量更快地编写代码。GitHub Copilot 从注释和代码中提取上下文,并立即建议单独的行和整个功能。[3]
Copilot 接受了来自 GitHub 知识库和其他网站的大量公开编码数据的培训。所以基本上是比你我更好的程序员。
如何使用 Copilot?
目前,Copilot 技术预览版作为 VS 代码扩展提供,并且只限于一小部分测试人员预览该扩展。可以试试在这里报名。成功批准后,您将看到如下屏幕:
Copilot 预览版注册成功。作者图片
Copilot 的工作就像你的谷歌自动完成。代码建议将显示为暗淡的颜色短语,当指向建议的代码时,您将获得一个鼠标悬停标签。
副驾驶显示。作者图片
Copilot 将为您提供大量代码建议,只需按下 Alt + ] 和 Alt + [ 更改建议的代码,然后按下“ Tab 接受它。您可以预览多个建议代码,只需按下 Ctrl+Enter 即可得到如下视图:
多个代码建议。作者图片
Copilot 能够识别您的评论并根据您的评论生成功能,您可以向 copilot 发出指令以生成功能,如下例所示:
副驾驶看了你的评论。作者图片
P.s:对于 Q & A 车型,还可以通过键入 ME: 和 AI: 与副驾驶聊天。
与副驾驶聊天。作者图片
我们对 Copilot 的简短介绍到此结束,让我们继续讨论我们的主要问题:
Copilot 能帮助数据科学家做出更好的数据科学项目吗?
我们试试吧!
准备好和你的副驾驶一起飞行了吗?照片由 Rafael Cosquiere 从 Pexels 拍摄
实验:
在这个实验中,我们将使用著名的虹膜数据集;我们的目标是 使用 Copilot 执行探索性数据分析,并使用纯粹的建议代码 训练 k-NN 模型。我们将制定如下规则:
- 仅使用建议的代码,仅修复打字错误和特定于数据的问题。
- 每一个动作都应该伴随着一个明确的
comment/command
给副驾驶。 - 只有 3 个顶级代码建议将被采纳。
截止到写的时候,VS 代码的 Python 笔记本用 Copilot 相对不稳定,所以我会用 Streamlit 作为我的平台。Streamlit 提供了一个类似 Jupyter 笔记本的实时代码更新 web 应用程序,可以帮助我们探索数据科学项目。想了解更多关于 Streamlit 的信息,你可以在这里阅读我的文章。
导入库包:
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
💡数据加载
# load iris.csv into dataframe
副驾驶的代码建议。作者图片
💡带副驾驶的 EDA
# print the dataframe column names and shape
给我留下深刻印象的是,Copilot 自动理解了 streamlit 中的打印机制,它使用了 st.write() 而不是 print() ,因为 Streamlit 是 python 中相对较新的包。
接下来,我尝试用:
# create a scatter plot of the petal length and petal width using plotly express
这是我得到的,看起来 Copilot 不够聪明,无法理解数据帧中的上下文😂:
接下来,我尝试精确命名,得到了一个很好的精确图形:
# create a scatter plot of the petalLengthCm with SepalLengthCm using plotly express
Copilot 创建的 Plotly 图形。作者图片
💡使用 scikit 建模-了解:
接下来,为了创建一个测试和训练数据集,我编写了以下代码:
# splitting the data into training and testing sets (80:20)
这些是我得到的建议:
印象深刻!Copilot 甚至知道哪一个是我的目标类,并为我编写了完整的代码,我需要做的只是选择建议!
完整的代码建议返回如下:
接下来,我用这个命令试试运气:
# check for optimal K value using testing set
出乎我的意料,副驾驶可以返回给我这个代码:
这在编码方面节省了大量时间;Copilot 甚至会在最后帮你绘制图表。嗯,图表没有成功,所以我必须使用创建的列表对我这边的代码做一点修改。但是它仍然节省了我很多时间去检查代码的堆栈溢出。
出于好奇,我问副驾驶,“最佳 K 值是多少?”
副驾驶无需绘制图表就将答案返回给我😲😲
这启发了我的下一个命令,我想:
# create a classifier using the optimal K value
然后,我只需按 enter 并接受建议的注释和代码就可以继续了。下面是我得到的代码:
注意,我只键入 1 条命令,其余的由副驾驶建议。
建议代码的结果
在 5 个建议的代码中,3 个工作正常,2 个建议: metrics.f1_score 和 metrics.precision_score 不工作。
我用 Copilot 进行的简单代码测试到此结束。我已经在 Github 上发表了这个建议,可以随意看看。
最终想法:
在本文中,我演示了 copilot 如何在数据科学过程中提供帮助,Copilot 犯了一些错误,但使用它的好处更多。另一个问题是,我使用的数据集是 Iris 数据集,因此它在更大的数据集中可能不太有效。
编程的新范式来了,不用在 StackOverflow 等问答网站里搜索,Copilot 会节省你大部分 googling 的时间,直接给你多个解决方案。我猜它将来会减少编程相关问题对 StackOverflow 和 Google 的依赖。
嗯,在目前阶段,我们的工作仍然是安全的,因为 Copilot 仍然需要一些基本的知识来执行,如指导项目的方向,告诉 Copilot 该做什么。
在我看来,Copilot 肯定会让你成为更好的数据科学家。*但它会在未来取代你作为数据科学家的工作吗?*随着反馈和大量数据输入 Copilot,它肯定会在未来成为更好的 AI,谁知道它会不会接管程序员和数据科学家的工作?🤔🤔
最后,我仍然在#TeamHumanity:凭借我们的创造力,我们将接管对人工智能的控制,并利用人工智能改善我们的生活。非常感谢你看我的文章。
旁注:
以下是我的一些文章,希望你也喜欢:
[## 5 分钟内自动完成谷歌表单报告
towardsdatascience.com](/automate-google-sheet-reporting-in-5-minutes-8bbdc1f8e293)
参考资料:
- 来自 Kaggle 的虹膜数据集
- https://towards data science . com/github-copilot-a-new-generation-of-ai-programmers-327 E3 C7 ef 3 AE
- https://copilot.github.com/
Github Copilot 能代替开发者吗?
自从发布以来,copilot 已经成为开发者们谈论的话题。使用它有许多优点和缺点。
作者图片
自从我接触到 Github Copilot 的技术预览版,我就被问了很多次这个问题。我会尽我所能回答这个问题。最后,我会诚实地评价我们是否应该使用它。
**简短回答:**需要时间。当然,每个人都必须成为无用阶层的一部分,开发者也是如此——但最终。为了获得更清晰的想法,请继续阅读。
让我们首先了解什么是 Github Copilot 以及它是如何工作的——它将帮助我们评估代码自动完成的未来。
Github 的副驾驶是什么?
据 Github 报道, Copilot 由 Codex 提供动力,Codex 是 OpenAI 创造的新 AI 系统。GitHub Copilot 比大多数代码助手理解更多的上下文。GitHub Copilot 经过数十亿行公共代码的训练,让您所需的知识触手可及,节省您的时间并帮助您保持专注。
作者 Gif
简单来说,Copilot 真的理解你下一行要编码什么。在我的情况下,它甚至可以完美地理解不好的评论。有时,它会犯一些愚蠢的错误,比如重复声明同一个变量;这种类型的错误是预料之中的,这就是为什么 Github 最初允许开发者给出反馈。我对它的理解能力感到非常惊讶。你只需要给它一些例子,剩下的就会完美地自动生成。
到目前为止,我想提及 3 个主要特性:
- 将注释转换为代码。
Github Copilot 可以理解不好的注释和函数名。
2.没有辛劳的测试。
这是我推荐大家在 Github Copilot 中使用的唯一功能。
3.重复代码的自动填充。
Github Copilot 是现有自动建议插件的更高级形式。这对于有经验的开发人员来说显然是好事,但对于新手来说却不是。
但是 Github Copilot 并不是每次都能写出完美的代码。正如 Github 所说,它的副驾驶总是尽力理解你的意图,但它建议的代码可能并不总是有效,甚至没有意义。随着时间的推移会有所改善。
它是如何工作的?
根据 Github Copilot 的说法,它已经在互联网上接受了一系列英语和源代码的培训,包括所有 Github 库(私人库除外)。
图片作者|设计于 Figma
上图不言自明。Codex 检索与编码相关的文本和互联网上可用的公共代码(Github ),并使用其算法将其传递给 Github Copilot 服务。这个服务然后为我们的私有代码提供建议,实际上这不是私有的,因为它将改进建议发送回服务 Github Copilot。😃
抄本理论但很有趣。
根据一周前发布的一篇 35 页长的论文Codex paper,Codex 是一个 GPT 语言模型,对来自 Github 的公开可用代码进行了微调,并研究其 Python 代码编写能力。“Codex 比 GPT-3 更有效率和改进,因为它已经在 Github 上的许多公共存储库上进行了训练。
论文 还声称已经解决了 10000+的竞技编程问题。
关于数据收集,文中说:
我们的训练数据集是在 2020 年 5 月从 GitHub 上托管的 5400 万个公共软件存储库中收集的,包含 179 GB 的 1 MB 以下的唯一 Python 文件。我们过滤掉了可能是自动生成的、平均行长度大于 100、最大行长度大于 1000 或包含少量字母数字字符的文件。过滤后,我们的最终数据集总计 159 GB”
最后,https://arxiv.org/pdf/2107.03374.pdf本文得出结论:
通过在 GitHub 的代码上对 GPT 进行微调,我们发现我们的模型在一组难度与简单的面试问题相当的人工编写的问题上表现出了很好的性能
这都是关于 Codex 的数据和事实,它是 Github Copilot 的支柱。论文明确说未来会产生更准确有效的结果,这意味着 Github Copilot 会越来越强。
人工智能工具将如何影响开发者
关键时刻到了。Github Copilot 将大大提高开发人员的工作效率。这也将有助于降低软件生产的成本。我认为 Github Copilot 可以取代编写代码的人(程序员),但首先要取代开发人员需要的时间太多了。我使用两个不同的头衔——程序员和开发人员——因为美国劳工统计局(Bureau of Labor Statistics,BLS)将计算机程序员和软件开发人员分开分类,开发人员的薪酬高于程序员,因为他们有更多与编写代码和与代码交互间接相关的任务。
正如我在介绍部分提到的,每个人都要成为无用阶层的一部分,但与计算机交互的人会最后加入。在无用阶级时代,如果你生活在一个发达国家,或者你的政府足够好,那么你什么都不做也会得到报酬。
这篇论文还声称,食品法典委员会将为补充改变的工作流程的工作创造新的市场。在 GPT-3 发布后,一些公司开始在工作列表中加入与 GPT-3 的合作和编写提示。也有可能像 Codex 这样的模型会为那些熟练使用这些工具的工程师带来新的工作类型。
应该用 Github Copilot 吗?
我用 Github Copilot 的体验没那么好。当报纸声称 Codex 已经解决了超过 10,000 个竞争性编程问题时,我正在解决一个螺旋数问题。Github Copilot 提出了一些与 if 逻辑无关的非常尴尬的陈述,这意味着 Copilot 必须学习很多东西。我用 Copilot 只是为了测试,但是在竞技编程中使用 AI 工具就是欺骗自己**。**
千万不要用这样的工具来解题,会对你的解题技巧产生高度负面的影响。如果你是一个有经验的开发者,那么你应该利用 Github Copilot 来处理重复的代码。如果你是一个新手,你必须避免这样的人工智能工具,即使是 IDE 的自动建议,它们会破坏你的概念。
但是不管你是什么,甚至不要想到在竞争性编程中使用人工智能工具,它们可以帮助你获胜,但你不会获得内心的平静。
这篇文章是根据我与副驾驶的经验,研究,和 抄本论文 。是否使用 Github Copilot 这样的工具是你的选择。但是你肯定会用到它们,如果不是今天,那么就是明天。
请让我知道你对 AI 自动完成工具的想法,比如 Gitub Copilot,以及你对开发者未来的看法。
我能吃那个蘑菇吗?
神经网络可以有所帮助
这些蘑菇有些可以食用,有些不可以。你能分辨出哪个是哪个吗?图片由安德鲁·雷德利在 Unsplash 上拍摄
想象一下,你在森林里呆了一个晚上,你只能吃你在周围找到的东西。你偶然发现了一片蘑菇。问题解决了!不完全是。**用肉眼来看,几乎不可能判断一家餐馆是否安全。然而,通过机器学习,我们可以创建一个人工智能来预测给定的蘑菇是否可以食用。**最近我分别用 Tensorflow 和 Keras,一个 Python 神经网络(NN)库和它的 API,开发了这样一个算法。让我们来看看它到底是如何工作的,以及它最终执行任务的效果如何。
该方法
数据
为了开始这项任务,我们需要找到一个大型数据集,其中包含数以千计的蘑菇,它们的一些特征,以及它们是否可以食用。我在这里发现了这样一个数据集。文件蘑菇 _weka_dataset.csv (csv 是列表commasseparatedvalues),我在我的 Python 编辑器中将其重命名为 data.csv,包含关于 8417 蘑菇的信息利用这些知识,我们可以教会我们即将诞生的神经网络蘑菇的哪些特性表明它们是安全的。
data.csv 中的第 5015 行;它描述了一种不可食用的(有毒的)蘑菇。作者图片
在很高的层面上,我们的网络通过浏览数据,首先随机猜测每个特征如何决定可食用性 (是的,就是 一个词 ,对于那些想知道的人) **,然后根据它的表现逐渐调整猜测。最终,所有这些调整都是为了使损失函数最小化,损失函数是衡量网络性能好坏的指标。**在这种情况下,损失函数将输出网络与食用蘑菇有毒的接近程度,反之亦然。(关于 NN 如何工作的深入解释,请阅读本文
翻译数据
仅仅找到一个我们想要的 CSV 文件是不够的。数据科学很大一部分是处理数据,这个项目也不例外。我们必须将文件翻译成我们的网络能够理解的语言。也就是说,语言是数学,单词必须变成数字。现在,data.csv 只是一个单词集合。它告诉我们瓶盖的表面是“光滑的”,但是我们的代码不知道如何解释这一点,除非它采用一些数值。
为了执行这种转换,我首先**将文件转录成一个名为蘑菇的 Python 列表**。这也使得最终将数据输入我们的网络变得更加容易。
*from csv import reader #Module to read CSV files
#Read data from file into a list
mushrooms = []
with open("/Users/yamanhabip/PycharmProjects/Mushrooms network/data.csv", mode = "r") as file: #open *data.csv* in read mode
to_read = reader(file) #create a CSV reader
next(to_read) #skip the first line
for line in to_read: #loop through the file
mushrooms.append(line) #add each line to *mushrooms**
这段代码跳过了文件的第一行,因为它包含了属性的描述。然后,简单地获取 CSV 文件的每一行,自动将其转换为一个列表,并将该列表添加到更大的主列表中,即蘑菇列表。
之后,实际的翻译就可以开始了。为了完成这个任务,我创建了一个名为替换* 的 Python 字典,并给文件中出现的每个单词分配了一个相应的编号。下面是实际的代码:*
*#Turn strings in list into numerical values
replacements = {} #create a running dictionary
num = 0 #create a counter to generate numbers for the word-number switches
for i in range(len(mushrooms)): #loop through *mushrooms*
for j in range(len(mushrooms[i])): #loop through the sub-list that represents each individual mushroom #if the word in the sub-list has been encountered before, replace it with the corresponding value in *replacements* if mushrooms[i][j] in replacements:
mushrooms[i][j] = replacements[mushrooms[i][j]]#otherwise, create a new entry in replacements where the word corresponds to the value of the variable *num* and then replace the word.Then increase *num* by one to avoid one number representing two words. else:
replacements[mushrooms[i][j]] = num
mushrooms[i][j] = replacements[mushrooms[i][j]]
num += 1*
正如代码中的注释所解释的,**上面的软件在 replacements 中为它遇到的每个唯一的单词创建一个新条目,同时遍历 data.csv 中的每个条目,将单词映射到一个数字。然后,它利用这种映射将每个单词转换成由替换给它的数字。举例来说,这个过程的结果是“可食用”变成了 16 个,“有毒”变成了 44 个。因此,每当单词“可食用”出现时,网络将“看到”16,并且它可以利用这一点来训练自己基于这些数字表示做出准确的预测。下面是一个完整的、经过翻译的行:编号 5015,与上图相同,来自我们数据的新的和改进的版本。****
第 5015 行是数字。作者图片
拆分数据
*既然我们已经把数据从机器乱码变成了机器可读的,我们必须把它分成两个部分:**输入/输出和训练/测试。**这里的第一步是将它分成输入和输出数据,因为一旦我们完成了,Python 就有了一个很好的模块来为我们进行训练测试分割。**分离输入和输出数据只是意味着将我们正在使用的预测器放入一组,而将我们试图预测的东西放入另一组。*对于蘑菇,这意味着我们需要创建一个列表,列出它们的特征(回想一下,这些特征是颜色、形状等。)和另一个说明它们是否有毒。这是 Python 中的样子:
*#Split data into inputs and outputs
input_data = [] #a list for inputs
output_data = []#a list for outputs
for i in mushrooms: #loop through each individual mushroom in *mushrooms* input_data.append(i[:-1]) #add everything except the last item to inputs #add the last item to outputs as a one or a zero
if i[-1:][0] == 16:#edible mushrooms have the last item as 16, we turn this into a one
output_data.append(1)
else: #otherwise the mushroom is not safe, and we represent this with a zero
output_data.append(0)*
该代码为蘑菇的特性及其可食用性创建了空列表(也作 一词 )。由于数据文件中除了最后一列之外的所有内容都是为了帮助我们确定最后一列是“可食用”还是“有毒”(或者对于我们的网络 44 或 16) ,**除了最后一行之外,每个蘑菇的所有数据都放入输入列表,最后一个数字放入输出列表。**代码通过循环遍历蘑菇并根据条件将数据分发到输入 _ 数据和输出 _ 数据中来实现这一点。至关重要的是, input_data 的第一行与output _ data的第一行匹配,以此类推,因此我们的网络能够使用这两个列表来查看它在预测蘑菇的安全性方面做得如何,并逐渐调整自己。
您会注意到,对于输出列表,我分别使用 1 和 0,而不是 16 和 44;这是为了利用 Tensorflow 的能力来模拟输出为 1 或 0 的二元函数。
在我们能够建立我们的网络之前,我们必须做的最后一块蛋糕切割是训练测试分割。这仅仅意味着,在我们用另一部分数据来训练我们的网络之后,我们留出一部分数据来测试我们的网络。 **这种分割有助于捕捉和避免过度拟合,**这是一个陷阱,我们的网络太擅长对一组数据进行评估,以至于它不再能很好地预测一般情况。好消息是:这种拆分并不简单,使用 sklearn 的 train_test_split 函数,两行代码变得简单了。它是这样工作的:**
*#import train_test_split
from sklearn.model_selection import train_test_split#split the data
input_training, input_testing, output_training, output_testing = train_test_split(input_data, output_data, test_size = 0.2)*
*该函数返回四个列表,我将它们命名为 *input_training、input_testing、output_training、*和 *output_testing。我选择将参数 test_size 设置为 0.2,这意味着返回的涉及培训的部分包含 80%的数据,涉及测试的部分包含 20%。现在我们终于完成了所有无聊的数据操作,我们可以开始创建一个网络。
构建网络
我决定为我们的网络使用一个非常简单的模型,叫做顺序模型*。它可以容纳我们想要的任意多的层,在这个模型中每一层都从上一层获取数据,并输入到下一层。此外,我使用了密集层,这意味着每个节点都连接到 (通过一个权重) 到它之前和之后的层中的每个节点,如果像那样的层存在*(第一层和最后一层分别没有它们之前和之后的节点)。**
回想一下,神经网络有各种带有输入、输出和隐藏层的节点。注意:这张图片并不代表我在蘑菇数据中使用的网络,它只是一个网络一般结构的图解。在 Wikimedia Commons 上公开的图片
也就是说,数据已经为我们的层做出了一些决定,还有一些决定需要我们自己做出。我们知道输入层必须有 22 个节点,因为我们有 22 个不同的可食用性潜在预测值。我们还知道,我们的输出层只需要有一个节点 (我将称之为输出节点),因为我们唯一可能的输出是 1,表示可食用,零,表示有毒。当然,输出节点的值不会总是 1 或 0;更确切地说,它将是一个可以解释为 1 或 0 的值。例如,我们的网络可能会计算出,如果输出节点的值大于 0.5,蘑菇就可以食用,否则就是有毒的。稍后,我们将通过输出节点的 sigmoid 激活函数来帮助我们的网络做到这一点。
我们能决定的是我们有多少个隐藏层,以及这些层中有多少个节点。这里有一个内在的权衡:我们拥有的隐藏层和节点越多,我们的网络可以模拟的函数就越复杂,但它也将越慢,因为它必须计算出更多的权重,从而进行更多繁重的数学运算。每个数据集的正确平衡会有所不同。对于我们的蘑菇例子,我发现两个隐藏层,每个有四个节点,足够有效和准确。
所以,总结一下:我们需要一个四层的网络。第一层是输入层,有 22 个节点,第二层和第三层都是隐藏层,各有 4 个节点,最后一层是输出层,只有一个节点。这里最后的决定点是每一层使用什么激活函数。激活函数只是告诉我们的网络如何评估输入层之外的每个节点(输入层中的节点只是我们给网络的值,因此我们可以告诉它如何读取没有激活函数的节点)。
用蓝色标出。图片由 Ringdongdang 在 Wikimedia Commons
*对于这个网络,我使用 ReLu ,或者整流线性单元,来激活隐藏层。ReLu 只是获取隐藏层中每个节点的值,如果它是负数,就将其设置为零。否则,它返回值本身。ReLu 很有用,因为它允许我们**处理更少的数据,**提高效率,**并为我们的神经网络创建一个线性度更低的模型,以更好地模拟曲线。*此外,为 ReLu,f(x) = max (0,x)建模的函数对于 Python 来说非常容易计算,并且占用很少的处理能力,因此非常高效。
我为输出层使用了 Sigmoid 激活函数,它获取它的值,然后**将其归一化到 0 到 1 之间。这允许我们的网络设置一个阈值,它可以合理地确定所有的输出将符合蘑菇是否安全。如果这有点抽象,请这样想:如果没有 Sigmoid,我们可能到处都是输出,并且不可能做出类似“所有低于 0.5 的输出(或任何其他数字)*构成毒蘑菇”的声明,因为当输出范围可以从-789 到 1234 时 *0.5 将是这样一个任意的阈值。然而,当输出只能在 0 和 1 之间时,to 数字会使我们的网络大吃一惊,因此很容易创建阈值。请注意,Sigmoid 使用分数指数函数来建模,因此计算量相当大。幸运的是,我们只需要将它用于网络中的一个节点。
让我们看看所有这些是如何用 Tensorflow 和 Keras 实现为代码的。为了简单起见,我在这里将它们导入并重命名为 tf_k 。
*#Import keras, an API for tensorflow
from tensorflow import keras as tf_k#Create a network with a sequential model
network = tf_k.Sequential()
#Add 2 hidden, dense layers to the network, each with four nodes and relu activation
network.add(tf_k.layers.Dense(4, activation = "relu", name = "hidden1"))network.add(tf_k.layers.Dense(4, activation = "relu", name = "hidden2"))
#Add an output node with sigmoid activation
network.add(tf_k.layers.Dense(1, activation = "sigmoid", name = "output"))*
有了它,我们就能构建上述网络。**使用 network.add 我们将所有需要的密集层添加到我们的顺序模型中,**并且我们能够使用第一个参数设置节点的数量(或者* 超参数 ,因为这是编码器设置的值,而不是网络学习的值)。我还将激活函数描述为每一层的参数,并为每一层命名以供将来参考,也许是为了可视化或调试*
你可能已经注意到了我们没有添加输入层。我们不需要一个,因为我们简单地把列表 input_training 给 tensorflow,它直接把它输入到我们的第一个隐藏层。
训练网络
在我们的网络开始运作之前的最后一步是培训它。要做到这一点,我们必须将它放在一起,并用下面的两行代码使其符合我们的数据:
*#put the network together
network.compile(optimizer = "adam", metrics = ["accuracy"], loss = tf_k.losses.binary_crossentropy)
#Train the network with out training data and 20 epochs through the data
network.fit(input_training, output_training, epochs = 20, verbose = 2)*
这些线中的第一条将我们所有的层集合到一个统一的模型中,该模型将使用 Tensorflow 的内置优化器 adam ,该优化器使用梯度下降*,一个更新我们网络权重的函数。它还告诉我们的网络,我们正在努力实现高精度,以此作为我们评估的标准。最后,网络知道它应该使用binary _ cross entropyloss 函数,它通过告诉我们它离输出错误的二进制变量有多近,简单地计算出我们的网络做得有多好。顾名思义, binary_crossentropy 专门用于二元预测,如毒蘑菇和食用蘑菇的区别,完全符合我们的目的。像我之前解释的,网络通过尝试最小化这个损失函数来“学习”。*
当查看数据集 input_training 和 output_training 时,第二行实际上通过拟合其权重来训练网络,以最小化损失函数。参数 epochs 允许我们指定网络遍历数据的次数,并优化其权重。这里,我们必须在效率和准确性之间做出选择。我发现 20 次以上为这个特殊的网络创造了一个很好的平衡。Verbose 简单地给出了一些不同的选项,关于网络如何向你显示它的学习。我喜欢 verbose = 2 的可视化方法,尽管其他方法可能适用于不同的个人。**
添加测试步骤
我需要的最后一行代码是使用测试数据来确保网络能在一般情况下工作。
*#Test the network with the testing data
network.evaluate(input_testing, output_testing, verbose = 2)*
与其他一切相比,这是一件轻而易举的事情。**我们所要做的就是告诉网络使用哪些数据来评估自己,**因此参数输入 _ 测试和输出 _ 测试,以及我们希望看到的结果。这里,我再次使用 verbose = 2 作为我首选的可视化方法。
结果呢
好吧。我们努力工作,建立了我们的神经网络。是时候带它出去兜兜风了。经过 20 个时期的训练和查看测试数据,我们从我们的程序中得到以下结果。为了避免本文中大量繁琐的编程输出,我只显示了第 1、10 和 20 个时期以及测试阶段的结果。
***Epoch 1/20** loss: 2.6525 - accuracy: 0.6885
**Epoch 10/20** loss: 0.0562 - accuracy: 0.9813
**Epoch 20/20**
loss: 0.0188 - accuracy: 0.9949
**Testing** loss: 0.0152 - accuracy: 0.9923*
随着时代的推移,网络变得越来越好。起初,网络只比随机猜测好一点点,当然比熟练的人类差,得出关于蘑菇的正确结论的概率只有 69%。然而,我们必须相信这个过程,因为随着的消逝,损失函数返回越来越小的值,网络的准确度接近 100%。
*现在,我们还不能太兴奋,因为如此高的精度**可能表明过度拟合。如果网络从未在训练数据上出错,那么它可能只是简单地掌握了这些数据。我们不知道这种优势是否会转化到其他蘑菇上。但幸运的是,*该网络似乎也非常擅长一般情况,因为它在测试数据上也获得了超过 99%的准确性。有趣的是,似乎有一点点过度拟合,因为网络测试比它在最终训练时期测试的要差一点点。虽然,它实际上在测试集上损失较少,所以这可能只是一个巧合,而不是常见陷阱的结果。
更多应用
*现在,如果你认为机器学习真的很酷,但认为你永远不会遇到野生蘑菇,不要害怕!**本文概述的技术几乎可以应用于任何存在因果关系的领域。*例如,用户可以输入一部电影的评论以及卖出了多少张票,以尝试并计算出它是否会收支平衡。需要做的只是改变输入的数据集,也许还需要调整超参数。更发人深省的前景包括预测信用卡欺诈、医疗疾病诊断、新的破解蛋白质折叠之谜就在上个月,关于神经网络的陈词滥调“可能性是无限的”听起来很真实。
关键要点
- 神经网络使用输入、输出和隐藏层对现实世界进行预测。
- 他们几乎可以解决任何有因果关系的问题。
- 其中一个应用是根据蘑菇的一些特性来预测它是否可以食用。
- 要构建神经网络,必须:
- 收集并翻译数据以便网络能够理解。
- 将数据分成输入和输出以及测试和训练*数据。*
- 建立一个网络并决定隐藏层数、* 这些层中有多少节点,以及使用什么激活函数。*
- 用训练数据训练网络。
- 用测试数据测试网络,确保它没有过拟合*。*
进一步阅读
本文源代码在 本 Github repo 中。
如果你想了解更多,网上有很多资源。我特别推荐 edx 的 CS50:AI 入门课程。如果你想跟我跟进、交谈或有进一步的问题,这是我的联系方式:
并请 订阅 我的月报!
“我能在没有经验的情况下找到数据科学的工作吗?”
求职时克服先有鸡还是先有蛋的问题
丹尼尔·塔特尔在 Unsplash 上拍摄的照片
找一份入门级的数据科学工作很难。我喜欢称之为鸡和蛋的问题,因为没有人会给你一份没有经验的工作,而没有工作你也无法获得经验。
我在 LinkedIn 上收到的大多数消息都是来自于人们问我他们如何才能克服这个问题。这些信息的要点如下:
"我知道 Python 和 SQL,还上过数据科学的在线课程。我仍然很难在这个行业找到工作。我申请的公司要么根本没有回应,要么告诉我,我没有他们想要的那种经验。”
在本文中,我将尝试分两部分回答这个问题:
- 首先,我将解释如何在没有工作经验的情况下展示你的经验。
- 然后,我会走一遍求职程序。求职门户网站通常是一个死胡同,大多数人很少或根本没有成功。
证明你有做这项工作所必需的技能
训练营和在线课程不足以证明你拥有成为数据科学家所必需的技能。
任何人都可以参加在线课程并获得证书。事实上,吴恩达在 Coursera 上的机器学习课程已经有超过 100 万名学生注册。
在成为数据科学家之前,你需要学习更多的技能(即使是入门级的)。
要展示这些技能,您可以执行以下一项(或两项)操作:
1.项目
您有兴趣成为 a 公司的数据科学家。他们的工作列表中有一项要求,即:
寻找在自然语言处理和建立情感分析模型方面有经验的人。
你没有工作经验,过去也没有为一家公司搭建过情绪分析模型。但是,你确实有一些机器学习知识,知道如何处理文本数据。
你现在应该做的是:
在 Twitter 和其他社交媒体上找到该公司。收集提及该公司的帖子的数据。
然后,用这些数据建立一个情感分析模型,并在你的作品集上展示。
申请工作时在工作经验下突出这个项目。你在得到这份工作之前就试图解决公司的问题,这会让你在所有应聘者中脱颖而出。
你也可以阅读我的文章“ 数据科学项目将让你得到工作 ”,这篇文章准确地概述了你应该在投资组合中展示的项目类型。我正是通过做我在文章中解释的事情获得了我的第一份数据科学实习。
2.获得认证
由 Liam Truong 在 Unsplash 上拍摄的照片
获得认证并不意味着参加 Coursera 上的课程并努力获得认证证书。
你可以获得许多被普遍认可的专业认证。这些认证证明您拥有完成工作所必需的技能,并且对用于现场工作的工具有足够深刻的理解。
一些最受欢迎的认证包括:
谷歌云数据工程师认证
大多数处理大量数据的公司使用亚马逊 AWS、微软 Azure 或谷歌云。
获得谷歌云数据工程师认证意味着你能够利用谷歌云构建数据驱动的解决方案和部署可扩展的机器学习模型。
这是一个两小时的监考考试,建议具有 3 年以上行业经验的人获得认证。
然而,你可以自己学习如何使用这个平台,并在几个月内通过考试。观看 Daniel Bourke 的视频,了解他如何在没有 GCP 工作经验的情况下成为谷歌云的认证数据工程师。
微软认证:Azure 数据科学家助理
该认证将测试您的预测分析、人工智能、机器学习和 NLP。你需要熟悉部署预测模型和使用微软 Azure 平台。
Tensorflow 开发者证书
这是谷歌提供的另一个认证项目。考试将测试你用 Python 中的 Tensorflow 构建机器学习(尤其是深度学习)模型的能力。
你需要知道如何建立图像识别算法、NLP 模型和时间序列预测模型。
请看一下这篇全面的指南,让几乎没有经验的人获得 Tensorflow 开发人员认证。
申请工作
马库斯·温克勒在 Unsplash 上的照片
我建议在申请全职数据科学职位之前,先从实习开始。
公司更有可能给没有工作经验的人提供实习机会。实习结束后,你在公司获得初级职位会容易得多。
甚至申请实习也很困难。
过去有很多人给我发信息,谈论他们失败的实习申请。
他们中的大多数人甚至从未得到回复。当你通过招聘网站申请职位时,这种情况经常发生。
求职门户是个死胡同。
大多数雇主会在门户网站上发布空缺职位,即使找到了足够多的人,也不会关闭申请。
我建议不要通过求职网站向一家公司申请,而是更进一步,去接触在那里工作的人。
找一个在公司工作的招聘人员,或者他们数据科学团队的负责人。给他们发一封个性化的电子邮件,解释你是谁,为什么你想和他们一起工作。
我得到了德勤的面试机会,因为我联系了一名招聘人员,并解释说我正在寻找一份数据科学实习。
就在第二天,我收到了回复,被叫去面试,最终得到了实习机会。我甚至不知道公司有一个数据科学实习生的空缺职位。
我刚刚联系了他们,询问我是否可以以实习生的身份加入他们的数据科学团队,并惊讶地听到了回复。
我亲自联系招聘人员的成功率比直接投简历要高得多,我建议你也这样做。
结论
在数据科学领域找到一份初级工作很难。事实上,这是你在数据科学职业生涯中面临的最大障碍之一。
一旦你获得了第一份实习或工作,如果你真的离开了公司,获得下一份工作通常会变得更容易。
整个“如果没有人愿意给我经验,我如何获得经验”的事情可能会令人沮丧,但这不是永久的。
有很多不同的方法可以证明你有必要的专业知识来做这项工作,即使你以前没有工作经验。
我希望你喜欢这篇文章。如果你做到了这一步,感谢你的阅读!
一条河流穿过一块岩石不是因为它的力量,而是它的坚持。
不用那么多数学可以学习量子计算吗?
你不需要成为数学家来理解量子计算,但当事情变得棘手时,数学是你的盟友。
量子机器学习要不要入门?看看 动手量子机器学习用 Python 。
在经典计算中,我们习惯于在布尔状态下思考。一个术语是真还是假。某个位是关(0)还是开(1)。就是这样。这是我们所有算法的基础。
有了布尔逻辑,只需要很少的运算符,比如而不是、和以及或,我们就可以开发出相当复杂的程序。如果某项为真,就这样做,否则就那样做。因为这个术语是真的,重复做某件事。
作为一名程序员,你可能整天都在脑子里想着真值表。
作者图片
在量子计算中,我们的比特是量子比特(量子比特的缩写)。它不是 0 或 1,而是 0 和 1 的复合(如在复数中)线性组合。
假设我们有一枚硬币。当你把硬币放在桌子上,你有一个古典位。要么正面朝上,要么反面朝上。你可以用布尔术语来定义你的逻辑。你可以指定硬币正面朝上时会发生什么,或者硬币反面朝上时你该做什么。当然,你可以用硬币工作。你可以把它放在桌子上任何你喜欢的方向。你的指示是这样的:“如果硬币是正面朝上,那么拿着它,反面朝上地放在桌子上。”
在量子计算中,我们抛硬币。它在空中旋转。它是头和尾的组合。当且仅当你抓住它,看着它,它决定一个值。一旦落地,就是一枚正面朝上或者反面朝上的普通硬币。
硬币放在桌子上时有两种状态,正面或反面。在空气中,我们的量子硬币处于两种状态的叠加状态。让我们仔细看看这枚硬币。它不断地在正面和反面之间翻转。一旦硬币落地,这个旋转决定了我们看到的是正面还是反面。再仔细看看。这枚硬币也沿着它的边缘旋转。
作者图片
问题是,我们不能再用一个简单的布尔值来描述这种状态了。我们需要描述它的旋转,以及它如何影响正面朝上或反面朝上着陆的概率。
因此,在量子计算中,我们用向量来代表量子位元的状态。当量子位处于叠加态(硬币在空中)时,我们还不知道我们是将它分别测量为 0 还是 1(它是正面着地还是反面着地)。但是我们知道,某些自旋会影响我们是否用其中一个值来测量它的概率。我们知道所有概率的总和是 1。
因此,我们用一个归一化的矢量来表示量子位的自旋。我们称之为|𝜓⟩(“psi”)。这是狄拉克符号,它简单地表示一个列向量。
这个公式意味着量子比特的叠加态是一个归一化的矢量。所有可能的状态都起源于同一点,并且长度相同。因此,它们形成一个圆,如下图所示。
作者图片
矢量头到极点的距离表示将该特定量子位测量为 0(到南极的距离或接近北极)或 1(到北极的距离或接近南极)的概率。
量子位状态向量可以直接指向北极。这是|0⟩.那么,有 1 (=100%)的概率测得为 0。如果量子位状态向量指向南极,那么有 1 的概率测得为 1。量子位状态向量可以指向圆心周围的圆上的任何一点,|𝛼|测量它的概率为 0,|𝛽|测量它的概率为 1。我们通过𝜃,北极|0⟩和状态向量之间的角度来区分状态向量。
𝜃角代表硬币两面的旋转。它不断地从正面翻转到反面。
就像硬币可以沿着边缘旋转一样,量子位也可以沿着不同的方向旋转。我们使用希腊字母“phi”(𝜙)来围绕中心跨越另一个与第一个圆正交的圆。
作者图片
这两个圆围绕中心形成一个球体。这个球面被称为布洛赫球面。布洛赫球提供了单个量子位的视觉参考。布洛赫球是一个很好的工具,可以让量子比特算符变得有意义。
布洛赫球有三个轴。Z 轴是垂直的,包含极点。记住,|0⟩州描绘的是北极。我们在这种状态下测量一个量子位为 0——总是这样。在南极的|1⟩状态下,我们测量一个量子位总是为 1。我们水平绘制 Y 轴。最后,X 轴是图中的对角线。
表示球体的一种方式是三维坐标系。然而,在量子计算中,我们只使用二维向量。但是向量里面的数字是复数。
复数是一个可以用𝑎+𝑏⋅𝑖形式表示的数,其中 a 是实部,𝑏⋅𝑖是虚部。𝑖表示满足等式𝑖= 1的虚数单位。因为没有实数满足这个方程,所以𝑎和𝑏⋅𝑖是相互独立的。因此,复数是二维的。
作者图片
因为𝛼和𝛽是复数,它们跨越一个平面。而一个二维数的二维向量可以组成一个三维球体。
当然,我们也可以使用量子位。但是,我们不能直接控制量子位是 0 还是 1。相反,我们控制量子位元在不同方向的旋转。我们在空中控制它。这里事情变得有点复杂。我们可以增加或减少旋转。我们可以完全逆转它们。我们可以从不同的角度来做这件事。有无数种方法可以改变量子位的自旋。因此,量子位元的运算子比传统位元的运算子多得多。
假设我们在|𝜓⟩.态有一个任意的量子位怎么才能改变呢?
首先,我们可以在其中一个轴上镜像它。这些操作符通常具有我们用作镜像的轴的名称。例如,X 操作符在 X 轴上镜像量子位状态向量。下图以图形方式描述了该运算符的效果。
作者图片
X 运算符的一个重要作用是,它将测量量子位的概率翻转为 0 和 1。因此,我们也知道 X 算子是非算子。
改变量子位状态的另一种方法是旋转。我们可以围绕任意轴旋转量子位状态向量任意角度。当然,我们通常使用三个主轴(X、Y 或 Z)中的一个。但是,我们并不局限于此。
作为一个例子,让我们围绕一个标准轴,Z 轴旋转我们的量子位。我们可以逆时针旋转四分之一圈,就像这样:
作者图片
我们称这个算符为 S 算符。我们也可以把它转回来(顺时针)。这是 S^T 的接线员。上标的 T 代表“转置”转置是我们用来变换矩阵的一个操作符。它翻转矩阵的对角线。简单地说,它切换矩阵的行和列索引。我们用矩阵符号来命名量子比特算符的原因很简单。它们是矩阵。
正如我们上面提到的,量子位状态是一个矢量。还有,有很多处理向量的方法。但是我们在量子计算中有一种特殊的方法。这就是矩阵乘法。如果我们用一个输入向量乘一个矩阵,输出就是另一个向量。矩阵乘法使我们能够改变量子位的叠加态,而不会使它崩溃。
结论
基本上,这就是为什么量子计算中有这么多数学的原因。量子态是矢量,算符是矩阵,我们用复数。
任何状态及其任何变化都涉及线性代数和矩阵计算。这与经典计算形成对比,在经典计算中,状态是二进制的(0 或 1),运算符(不是、和、或等)。)非常直观,也很容易在头脑中推理。
好消息是我们有电脑。没有人需要手动乘矩阵。甚至我们的经典电脑也很擅长这个。正如这两个例子所示,我们可以不用解公式或乘矩阵就能推理量子算符。
作者图片
所以,理解量子计算不需要成为数学家。但是你将不得不应付线性代数,因为它是量子计算的基础。通过一点点练习,你将能够在不咨询数学的情况下说出许多变换的效果。然而,当事情变得棘手时,数学是你的盟友。
量子机器学习要不要入门?看看 动手量子机器学习用 Python 。
免费获取前三章这里。
LightGBM 能跑赢 XGBoost 吗?
助推技术
机器学习中的助推算法——第五部分
道格·达菲在 Unsplash 上拍摄的照片
到目前为止,我们已经讨论了 3 种增强技术: AdaBoost 、梯度增强和 XGBoost 。我们已经知道 XGBoost 比我们到目前为止讨论过的其他 boosting 算法更强大。
LightGBM(光梯度增强机)是 XGBoost 的一个很好的替代品。它是由微软开发的,在几年前的 2016 年发布。
由于 LightGBM 在集合中创建新树时采用了不同的方法,因此 LightGBM 具有以下独特的功能:
- 运行速度比 XGBoost 快
- 使用较少的内存
- 可以处理大型数据集
- 可以处理数据集中缺失的值
- 可以处理尚未编码的分类特征
今天,我们将学习 LightGBM 库的安装,并探索它的 Python API。关键部分是我们将使用 XGBoost 和 LightGBM 算法在同一个数据集上创建两个模型,并比较每个算法的性能和执行时间。
我们开始吧!
照明设备的安装
我们可以通过在 Anaconda 提示符或 Google Colab 编辑器中运行以下命令来安装 LightGBM。
**pip install lightgbm**
然后运行以下命令并验证安装。
**import lightgbm**
如果您没有收到任何错误消息,那么您已经成功安装了 LightGBM!
LightGBM 的 Python API
LightGBM 的 Python API 由几个子 API 组成。我们将讨论其中的两个:
sci kit-学习 API
该 API 用于通过 Scikit-learn **实现 LightGBM 算法。fit()/。预测()**范式。这个 API 中最重要的类是:
- LGBMClassifier()—light GBM 用于分类
- LGBMRegressor()—light GBM 用于回归****
绘图 API
LightGBM 包在这个 API 下提供了一些绘图方法:
- plot_importance() —绘制 LightGBM 模型的特征重要性
- plot_metric() —在训练期间绘制一个度量
LightGBM 与 XGBoost
现在我们就来对比一下 LightGBM 和 XGBoost 的 性能 和 执行时间 。为此,我们使用加州房价数据集执行回归任务。
LightGBM
这里,我们使用 LGBMRegressor() 类及其相关的超参数。我们还使用五重交叉验证来评估模型的性能。
LightGBM —性能和执行时间
(图片由作者提供)
LightGBM 的执行时间是 0.608 秒。数据集有 20640 行和 8 个特征!所以,LightGBM 真的很快。
XGBoost
这里,我们使用 XGBRegressor() 类及其相关的超参数。我们还使用五重交叉验证来评估模型的性能。
XGBoost —性能和执行时间
(图片由作者提供)
XGBoost 给出的 RMSE 略好于 LightGBM 给出的 RMSE。但是,XGBoost 任务需要 4.660 秒才能执行。比 LightGBM 慢了 7.66 倍!
LightGBM 的绘图功能重要性
这里,我们使用 LightGBM 绘图 API 的 plot_importance() 类来绘制我们之前创建的 LightGBM 模型的特性重要性。
**lgbm.fit(X, y)
lightgbm.plot_importance(lgbm)**
(图片由作者提供)
特征人口和 AveBedrms 对模型来说似乎不太重要。因此,您可以删除这些要素并重新构建模型以降低 RMSE。
结论
light GBM 能跑赢 XGBoost 吗? 答案在这里。
就性能而言,LightGBM 并不总是优于 XGBoost,但它有时会优于 XGBoost。至于执行时间,LightGBM 比 XGBoost 快 7 倍左右!
除了更快的执行时间,LightGBM 还有另一个很好的特性:我们可以在 LightGBM 中直接使用分类特性(不需要编码)。但是,数据类型转换(对象数据类型→ 类别数据类型)需要手动完成。
在下列情况下,LightGBM 优于 XGBoost。
- 你想在比赛中快速训练模型。
- 数据集很大。
- 您没有时间对数据集中的分类要素(如果有)进行编码。
今天的帖子到此结束。在第 6 部分的中,我们将讨论 CatBoost(分类增强),XGBoost 的另一种替代方案。下一个故事再见。祝大家学习愉快!
我的读者可以通过下面的链接注册成为会员,以获得我写的每个故事的全部信息,我将收到你的一部分会员费。
****https://rukshanpramoditha.medium.com/membership
非常感谢你一直以来的支持!
特别要感谢 Unsplash 网站上的道格·达菲,为我提供了这篇文章的封面图片。
鲁克山普拉莫迪塔
2021–10–29****
机器学习可能“公平”吗——这到底意味着什么?
来源: Unsplash
对一个有争议问题的技术探讨
机器学习已经开始渗透到生活的方方面面——甚至是那些受反歧视法保护的领域。它被用于招聘、信贷、刑事司法、广告、教育等等。
然而,让这成为一个特别困难的问题的是,机器学习算法似乎更具流动性和无形性。复杂机器学习算法的部分设计在于它们难以解释和监管。机器学习公平性是一个新兴领域,旨在将抽象的“公平”原则融入机器学习算法中。
我们将从三个方面来看待“公平”的概念和观点。虽然还有很多要探索,这三个代表了公平研究中三个有趣的发展和观点:一个统计的单一模型解决方案;机器学习公平性的更多模型和更像人类的概念;质疑公平是否可能。
- “无知的公平”和人口均等的不足:一个统计解决方案
- 可解释的公平:超越一种模式扩展公平
- 机器学习公平是不可能的吗?可能
“无知的公平”和人口均等的不足:一个统计解决方案
假设有一群狗住在小狗城;一家公司的客户支持代表的新工作已经开放,该公司希望使用机器学习来做出招聘决定。该公司表示,通过使用机器学习,他们将能够减少招聘经理决策过程中的偏见。
但是有一个问题——小狗城市反歧视法禁止根据狗的品种进行雇佣。因此,该公司做出了一个简单的解决方案:他们只是不会将狗的品种作为机器学习模型的一个特征。因此,他们将狗的品种标记为受保护的 T2 属性 T3。这种策略被称为“无意识中的公平”。
然而,冗余编码的问题出现了——数据集中说明受保护属性的特征。例如,公司可能基于两个主要特征进行招聘:
- 狗狗大学 GPA(他们需要聪明,思维敏捷)
- 狗说话的音调和语调(它们将整天与顾客交谈)
然而,(举个例子)德国牧羊犬的声音更低沉,而吉娃娃的声音更高。在狗学院,德国牧羊犬通常比吉娃娃狗获得更好的 GPA,因为狗社会的不平等。因此,完全有可能根据现有的特征来预测狗的品种。
鉴于这些复杂的模型常常掩盖了它们复杂的内部思维过程,我们如何知道模型是否依赖于狗的品种来做决定呢?
人口统计均等是一种衡量受保护属性是否真正受到保护的方法。简单来说,目标属性 y 和被保护属性 p 之间应该没有关联。作为一个等式:
**probability** *y*=1 **given** *p*=0 **is equal to probability** *y*=1 **given** *p*=1
(注意——我们假设 y 和 p 在这里是二进制的。)
用人口均等来衡量公平有两个问题:
- 不能保证公平。我们可以在 p=0 和 p=1 中只接受不合格的候选人或拒绝合格的候选人,以使百分比匹配。如果一个组中缺少训练数据,这很容易发生。
- *它限制了性能。*尽管事实上我们需要机器学习模型才能公平,但它们需要表现良好。如果 p 真的提供了预测 y 的重要信息呢?—优化人口统计均等将显著降低绩效。
在《监督学习中的机会均等》一书中,莫里茨·哈特、埃里克·普莱斯和内森·斯雷布罗提出了另一种保护受保护属性的方法。它试图通过允许高性能同时防止受保护属性 p 方面的歧视来解决人口均等的两个限制。
他们引入了均等赔率的概念,即
**probability** *y = 1* **given** *p = 0* **and** *actual y = Y* (the real target)**is equal toprobability** *y = 1* **given** *p = 1* **and***actual y = Y* (the real target)
本质上,在 p=0 和 p=1 之间,模型应该具有相同的真阳性率和假阳性率。当它预测 y=1 (通常类似于“是的,雇用”或“是的,批准贷款”)时,它应该在每组中做出与错误预测一样多的正确预测。
与人口均等或“无意识公平”相比,均等机会是一种更微妙的公平观;它允许模型使用受保护属性 p 中的信息,同时防止模型以歧视的方式滥用 p 。
通过在均等赔率上优化模型,该模型将在能够达到良好性能的同时相对于 p 更加公平。
这是考虑到关于受保护属性的公平性的更统计的观点;然而,它有一种机器学习的味道,因为它还允许模型从受保护的属性中提取更多潜在的洞察力。虽然这肯定不是一个完美的解决方案,但肯定是一个有效的解决方案。
均衡赔率的一个变体,机会均等,现在是机器学习模型中衡量公平性的标准。
在这里阅读全文: 监督学习中的机会均等
可解释的公平:超越一种模式扩展公平
看待公平还有许多其他方式。“可解释的公平”是一种更少依赖于统计测量的方法——不像均等的优势——而是利用更多的机器学习。
如果一个代理模型——一个与原始模型相似的模型——不能产生一组解释来反对模型的公平性,那么这个模型就是可解释公平的*。*
首先需要理解什么是代理模型。就像代孕母亲怀上另一对夫妇的孩子一样,代孕模特 S 模拟另一个模特c的结果
代理模型可以通过几种方式导出,但通常是通过重复采样数据点,查看模型 C 预测什么,并尝试模仿 C 的预测行为来完成的。
由作者创建。
然而,仅仅因为代理模型 S 模仿模型 C 的输出并不意味着它们的“思维过程”是相似的。(最近对欠规范的研究证明情况往往如此。)
例如,一个阿拉斯加人和一个厄瓜多尔人可能都不想在温和的天气外出,但出于不同的原因:阿拉斯加人认为天气太热,而厄瓜多尔人认为天气太冷。
的确,这既可以是弱点,也可以是优势。通过使用代理模型,我们掩盖了特定模型背后的“思考过程”。与此同时,我们也允许不同类型的模型——具有不同“经验”和“思维方式”的模型——提供关于公平的输入。
事实上,这可以被认为是一个力量的来源:如果我们对原始模型有多个代理模型,我们可以为一个模型的行为找到许多解释,因为代理模型从来都不是完美的。每种类型的代理模型在算法和特征上应该是不同的,因此它们对原始模型的决策做出不同的假设和解释。
这种更“全球化”的看待公平的方式可能更符合人类对社会公平的观念。例如,人 B、C 和 D 可能认为人 A 说的话是冒犯性的,即使人 A 不是故意的。在这种情况下,社会团体可能会谴责个人 a。毕竟,我们是社会动物——我们的观点经常受到周围其他人和社会的影响。
(虽然,这个是否应该是这样是一个有趣的争论。)
在代理模型被导出之后,它的均衡优势——或者任何其他种类的公平性度量——被测量。如果代理模型发现代理模型是公平的,那么原始模型被认为相对于代理模型是可解释公平的。如果使用多个代理模型来确定可解释的公平性,这种方法是强有力的。
“可解释的公平”并不能保证统计上的公平——正如引入这一概念的论文作者所承认的那样。然而,它确实将公平的作用扩展到一个算法或模型之外,并使公平的愿景变得复杂,可以用一个单独的指标来表达。
在这里阅读全文: 通过可说明性和对抗性实现公平的 SHAP 学习
机器学习公平是不可能的吗?可能
当然,这些公平的观点和概念都是以机器学习可以公平为前提的。然而,有些人认为这可能不是一个有效的假设。
Soralle A. Friedler、Carlos Scheidegger 和 Suresh Venkatasubramanian 在他们的论文《论(不)公平的可能性》中提出了这一主张,并断言…
“…为了证明整个决策过程的理想属性,不同的公平机制需要对从构造空间到决策空间的映射性质做出不同的假设。”
论文依赖于空间的概念。
- 构建空间包含我们希望决策所基于的特征。例如,智力可能是我们希望招聘工作的一个特征。
- O 观察空间是我们可以观察到的关于构造空间的不完美特征。例如,平均绩点、智商或标准化测试分数可能是智力的近似特征。
- 决策空间包括可能的结果。例如,招聘的决策空间可以是雇佣/不雇佣。
决策算法的目标是将构造空间映射到决策空间。然而,由于构造空间只能由观察空间真正测量,第一步是通过将构造空间映射到观察空间来“提取”使用数据。简单来说:
Construct space → Observed space → Decision space
每个→
代表前一个空间到下一个空间的某种变换。
现在,考虑两个关于公平的基本世界观:
- 所见即所得(WYSIWYG) 。建构空间和观察空间本质上是相同的;失真(信息从一个空间移动到另一个空间被改变)是最小的。例如,SAT 分数和高中 GPA(观察到的空间特征)可能与申请人在大学取得成功的能力(构建空间特征)密切相关。
- 结构性偏差。建构空间和观察空间被严重扭曲。我们希望捕捉组之间的相对失真,而不是以同样影响所有组的方式缩放。
这里的假设是我们都是平等的(WAE)——所有的组在构造空间看起来都是一样的,即使组在观察空间看起来不是这样。
例如,持有结构偏见的世界观,我们会断言耷拉着耳朵的小狗和竖起耳朵的小狗都能够变得友好,即使在观察空间中耷拉着耳朵的小狗被报道为更加友好。
考虑到这两种世界观,在 WYSIWYG 下,模型总是公平的,因为我们假设构造空间可以以最小的失真映射到观察空间。(这一主张——以及所有其他主张——在论文中得到了更严格的证明,论文链接如下。)
与此同时,在 WAE 下,这种模式可以永远是非歧视性的。组公平机制可用于将构造空间映射到观察空间,使得即使给定结构偏差,也能校正组之间的距离*。在小狗的例子中,这意味着竖起耳朵的小狗群体会像观察空间中松软的小狗群体一样友好。*
请注意,不歧视不同于公平。在统计方面,不歧视更多地适用于群体,而公平更多地适用于个人。
作者得出结论公平只能发生在所见即所得的世界观下。
在 WAE 和结构偏差的情况下,必须应用一个组公平机制-而不是一个单独的机制,以使算法是非歧视性的。如果我们不应用群体公平机制,那么我们就违背了我们首先人人平等的主张,因为群体差异没有得到纠正。
在结构性偏见的世界观下,只有群体公平机制才能实现非歧视,而个体公平机制则具有歧视性。另一方面,在所见即所得的世界观下,只有个体的公平机制才是公平的。
因此,每一个试图将建构空间映射到观察空间的机制——以测量决策所需的真实特征——都明确地与两种矛盾的世界观之一联系在一起。因此,一个机制不可能既在个人意义上公平,又无歧视。
在这里阅读全文:https://arxiv.org/pdf/1609.07236.pdf【论公平的(im)可能性】
结论
公平的问题已经伴随人类很长一段时间了,因为我们仍然在努力理解它的含义,我们正试图将其形式化,供我们的机器学习对手使用。关于机器学习中的公平性,在机器学习社区中仍然存在长期的激烈争论和辩论。
本文介绍了三种实现公平的方法:
- 作为更传统的人口统计均等和“无知的公平”观点的一种替代,均等的机会。允许模型从受保护的属性中学习,同时不歧视它。
- 更加基于机器学习的公平概念依赖于试图模仿原始模型的其他代理模型的解释和审计的角色。
- 将算法理解为空间之间的映射的理论方法,表明所有不同的公平和不歧视概念依赖于矛盾的世界观。
我很想听听你们的回答:
- 这样的标准真的公平吗?如果一个受保护的属性包含在模型的训练数据中,那么它甚至有可能保护该属性吗?处理“不知不觉中的公平”的缺点是否比冒险将模型暴露给受保护的属性更好?
- 关于可解释的公平性 —使用代理模型假设全球解释的某些方面对公平性很重要。是这样吗?这是某种道德相对主义吗?代理模型带来的这种增加的噪声是否在某种程度上降低了公平性?
- 论公平的不可能性——依赖于矛盾假设的不同公平概念实际上否定了公平的可能性吗?这篇论文本身是否做了任何假设?再者,这篇论文非常理论化——这种形式化和僵化是否限制了它对公平和歧视的理解?
感谢阅读!
我最近推出了一个新的播客,ML & DS Papers On The Go。播客的目标是让您在旅途中也能听到最迷人和最新的进展——这是一个赶上最新研究趋势和发展的好时机!
点击 Spotify 查看。请随时联系LinkedIn——我仍在探索如何导航播客空间,所以我很乐意与你联系并听取你的反馈。请关注不久的将来的一集,作为对本文所讨论主题的进一步探索。
机器会做梦吗?
Jr Korpa 在 Unsplash 上拍摄的照片
围绕风格转移的理论和概念的描述和实现(以几个例子为特色)。
查看我的 GitHub 的工作风格转移代码库。
一个你肯定没想过要问的问题。当然,除非你和一个朋友在凌晨 4 点刚刚看完 iRobot。
然而,我们现在……在一个机器在做梦的世界里……有点。
好消息是你不需要担心。虽然这些算法的输出可能非常怪异(我鼓励你谷歌搜索“深度梦境”)。它们完全依赖于输入,这是机器学习的准则。
所以我们不会做任何邪恶的梦,除非我们一开始就给它灌输一些非常恶心的东西。
我们用来描述这种行为的术语是神经风格转移[1]。
它包括给神经网络一个内容图像和一个样式图像。然后要求它以样式图像的样式重建内容图像。
动机
我发现任何深度学习概念的一个迷人之处是它的生物学根源。
为了理解神经风格转移如何工作,我们需要理解卷积神经网络(CNN)如何工作。为了理解 CNN,我们需要了解我们自己的视觉皮层是如何工作的。
这听起来像是一项巨大的工作,但老实说,理解起来超级简单。还有很多听起来很聪明很酷的词,这样你就能给最好的人留下深刻印象!
眼睛和大脑
我们的眼睛不可思议,更不可思议的是我们的大脑。我们的大脑是我们意识和潜意识的中心。
你可能已经知道,眼睛通过我们的视觉皮层向大脑提供信息,然后大脑皮层形成我们的视觉。
但是真正有趣的是大脑如何建立我们的视觉。
Robina Weermeijer 在 Unsplash 上拍摄的照片
有无数的神经元连接着眼睛和我们的视觉皮层。一端是单个细胞(视杆细胞和视锥细胞),每个细胞负责我们视觉的一小部分。而在另一端,我们对世界有一个完全成形的、无缝的(在大多数情况下)视觉感知。
Hubel 和 Wiesel 在 20 世纪 60 年代和 70 年代发现了我们的视觉是如何形成的线索。他们用猫做实验,给猫看一条不同角度的光。当分析 V1 神经元(连接到初级视觉皮层的神经元)的放电率或激活时。他们发现这种神经元的放电频率和光条的旋转之间存在相关性。
这是一个如此惊人的发现,因为它表明不同的神经元负责从我们从眼睛接收的视觉输入中检测不同的模式。
图 1:大脑的视觉输入图。
图 1 显示了我试图解释的内容的一个粗略的手绘示意图。这里我们有 4 个不同的神经元连接到大脑,每个神经元对一条线的特定方向做出反应。
在我们继续之前,让我们把一些机器学习术语放入其中……神经元发现的这些非常简单的特征就是我们所说的,低级特征。与更复杂的高级功能相反。
所以我们有一些低级的特征,这些特征是我们所看到的一切的基本组成部分。你可以想象有数百万个这样的特征。
这有点像当你打开一个新的乐高玩具时,你有上百万种不同类型的砖块可以玩,并放在一起,以构建高水平的功能。
这正是我们的大脑所做的。这些神经元连接到更多的神经元,这些神经元已经学会识别从其输入建立的特征,如图 2 所示。
图 2:显示构建更高级特征的两层神经元的图。
图 2 向我们展示了一个非常简单的例子,展示了我们可以利用低级特征构建的一些结构。
就我们的乐高套装而言,我们正在组装第一对积木,并想象我们可以建造什么!
图 3:显示简单的房子或船如何被视觉通路中的高级神经元识别的图。
更进一步,我们可以看到每一层新的神经元是如何构建更复杂的(或更高级别的)结构的。
这里我们有几张相当不错的房子和船的画。这是我们的三级视觉通道现在能够识别的。
因此,当大脑通过这两个神经元接收到一个脉冲(或动作电位)时,这意味着在我们的视觉感知中,有一所房子和一艘船。或者如果这只是一个冲动,那么它要么是一栋房子或一艘船取决于哪一个,你明白了吗?
随着每一个新的层次,我们允许我们的大脑开始构建我们的完整视觉。或者完成我们的千年猎鹰乐高套装,如果我们回到乐高类比。
从眼睛到…CNN?
是的,这里还有更多好消息!
如果你看了最后一部分(希望你看了),那么你已经知道 CNN 是如何工作的了!
回过头来看一下图 3…我们需要做的就是给这个图添加一些数学符号,并将其重新构建为机器学习和 viola 中的神经网络!
CNN 的来龙去脉是一些广泛研究的主题,我们不会在这里深入探讨。但是有几篇优秀的媒体文章和发表的论文围绕这个主题,所以如果你感兴趣,我鼓励你四处搜索。
对于本文,您只需要知道 CNN 通常由几个卷积层组成,这些卷积层负责构建我们上面探讨的更高级的功能。然后通常是一些池层,用来缩小图像的尺寸,迫使 CNN 寻找更高层次的特征。
图像的风格和内容
再看图 3,你认为内容和风格存在于这个非常基本的神经网络中的什么地方?
这里要考虑的更明显的是内容,因为像房子和船这样的高级特征最有可能代表图像的内容。而不是一行或一些非常低级的细节。
另一方面,让我们想想图像的风格是什么…想象一下我刚刚画了一幅绝对的杰作,就像这里看到的一样…
这幅图像风格的一大贡献者是笔触。
笔画可以是图像的大特征,然而与图像的内容相比,它们是相对低级的特征。
因此我们可以想象图像的更多的样式表示将位于图 3 的左侧。或者 CNN 中每个卷积层的较低层。
现在让我们来看看一个实际的 CNN 架构。
图 4:来自[2]的 VGG-19 架构。
图 4 显示了在[3]中开发的著名的 VGG-19 模型的架构。输入从左边输入,输出在右边反馈给我们。在中间,我们所有的神经元结合在一起识别低级到高级的特征。
在每个卷积层(图 4 中的绿色阴影),我们重复前面描述的过程。在卷积层的第一维(低级)中搜索简单特征,直到卷积层的最后一维(高级)中的更复杂特征。然后,我们有一个最大池层,减少了图像的大小,我们再次重复这一过程。
这些最大池层是非常重要的,因为当他们减少了图像的大小,我们失去了图像的细节。因此,在每一步中,我们自然会看到更大的特征。
这些最大池层是非常重要的,因为当他们减少了图像的大小,我们失去了图像的细节。因此,在每一步中,我们自然会看到更大的特征。
我们还注意到,每个卷积层的深度从左向右增加。这是因为我们在更大的尺度上发现了更复杂的特征,这些特征对图像内容来说比在较低的级别上更重要。例如,一个真正复杂的笔触或铅笔标记没有画出的整体形状重要。
很明显,每个图像都是不同的,所以不容易定义一个特定的层,每个层都是不同的,也不容易在 CNN 中定义一个特定的点来最好地定义图像的内容。然而,作为一个经验法则,我们通常不期望内容在非常小的范围内,或者在非常大的范围内。介于两者之间通常是一个很好的起点。
关于风格,这可以在任何尺度上表现出来,因此在每个卷积层进行一些加权是一个好主意。然而,正如我们有希望证明的那样,在卷积层开始变得更加复杂和更加基于内容的表示之前,尽早在卷积层中选择样式层也是一个好主意。
生成图像
为了生成图像,我们必须首先选择包含我们的内容和风格的图层。我们将选择我们的:
content = "conv4_2"style = {
"conv1_1": 1.0,
"conv2_1": 0.75,
"conv3_1": 0.2,
"conv4_1": 0.2,
"conv5_1": 0.2
}
注意,这些对应于图 4 中的标记。
与样式层相关的数字是我们希望赋予每一层的权重。所以我们希望风格更多地由最底层的conv1_1
层决定,而不是其他层。但是同样,这是可以根据您的输入和偏好来玩的东西。
现在,我们将把我们的内容和风格图像分别传入我们的 CNN。当我们这样做时,我们可以找到内容层conv4_2
的基本表示,以及分别用于内容和样式图像的每个样式层。
现在我们有目标了!
基本上,我们希望有一个通过 CNN 的图像,并再现我们在通过样式图像时为我们选择的样式层找到的相同样式表示。然后,当通过内容图像时,我们为我们选择的内容层找到了相同的内容表示。
这就是乐趣的开始…
首先,我们需要一个形象的起点。由于我们最有可能尝试制作一个看起来更像我们的内容图像但风格不同的最终产品,我们将继续为我们的初始输入制作一个内容图像的副本。
在这一点上,我们稍微偏离了你可能习惯的通常的机器学习设置。我们实际上不是在训练模型,我们实际上是在训练图像。
因此,我们没有将反向传播图与 CNN 的权重联系起来,而是实际上将它与输入图像(单个像素)的权重联系起来。
这样,当我们发现从输入图像中找到的所选特征和我们之前准备的基本特征之间的内容和风格损失时。执行反向传播将导致输入图像略有变化,而不是 CNN。
这不是一件容易解释的事情,所以我鼓励你花几分钟时间浏览一下我的GitHub上的代码示例,特别是在 algorithms/style_transfer.py 文件中。
我们会失去什么?—更数学一点…
我们现在只需要一个损失函数。
我们将从内容损失开始,因为这稍微更容易解释,因为它只是来自具有基本内容图像©和新图像(X)的“conv4_2”的特征映射之间的均方误差。
图 5:内容损失方程
这仅仅是惩罚与内容图像的基本表示中发现的特征的任何偏离。
现在对于图像的风格,我们需要简单介绍一下 Gram 矩阵。这些听起来比它们实际上要复杂得多,所以为了本文的目的,我将简单地把它们描述为高维点积。
直觉告诉我们,对于风格,我们并不真的想要在我们图像的完全相同的地方重新创建完全相同的笔触。我们只是想在整个图像中有一个类似的风格。因此,最好根据样式表示的相似程度来计算损失,就像余弦相似度或点积一样。
当然,我们必须记住,我们使用的是特征地图,它的维度比通常的点积要高。所以我们实际上需要使用一个 Gram 矩阵来封装输入 X 的风格和基本风格图像 s 之间的相关性
图 6:风格损失方程。
图 6 显示了封装到一个公式中的内容。其中每个选择的样式层的 gram 矩阵的 MSE 损失乘以它们的权重(在上面的代码块中定义),然后求和。
最后我们得到一个总损失函数,
其特征在于α和β超参数乘以损耗。这些决定了风格在最终图像中的应用程度,留给我们自己去定义。
摘要
一旦我们具备了所有这些特征,我们就可以开始训练了,结果令人难以置信!
这里有几个空间主题的例子…
如果你想尝试一下, GitHub 上的代码应该很容易使用。只需将您自己的图像添加到 content and style 文件夹中,然后使用新文件名运行代码。
一如既往,让我知道任何问题或意见!
参考
[1] — L. A. Gatys,A. S. Ecker 和 M. Bethge,一种艺术风格的神经算法,(2015)
[2] — D. H. Hubel 和 T. N. Wiesel,猫视觉皮层的感受野、双眼互动和功能结构,(1962)
[3] — K. Simonyan,A. Zisserman,用于大规模图像识别的甚深卷积网络,(2015)
网络课程能让你成为数据科学家吗?
意见
成为数据科学家没有捷径
托拜厄斯·菲舍尔在 Unsplash 上的照片
作为一名科学家,我们可能都已经知道这一职业。哈佛商业评论报道称,这一职业曾被称为https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century“21 世纪最性感的工作”。尽管数据科学家的趋势比前几年有所下降,但是,数据科学家仍然是一个需求量很大的职业。
目前,大学、课程或其他地方有许多课程提供成为数据科学家的课程。广泛用于学习数据科学的工具之一是参加在线课程( Udemy 、 Coursera 、 Datacamp 等)。).原因是,与我们必须参加讲座相比,时间相对较短,我们可以随时随地访问它。
“网络课程能让你成为数据科学家吗?”
在回答这个问题之前,我们必须首先了解成为一名数据科学家需要具备哪些条件。基本上,成为一名数据科学家需要具备两个主要的东西,即硬技能和软技能。
一般来说,硬技能包括数学、统计学和编程技能。当然,这种能力是数据科学家必须具备的义务。然而,这还不够。除了掌握硬技能,我们还需要掌握软技能。其中一个原因是由于技术的快速发展在这个时代,数据科学家可以使用许多工具来处理数据、进行建模等。此外,这个职业还有一个重要位置决定一个公司的商业模式。
以下是成为数据科学家通常使用的软技能。
- 业务理解—数据科学家必须能够深入理解正在开展的业务。有些人可能会问,“为什么数据科学家应该了解业务,而他们的工作是处理数据?”。要处理数据,我们必须了解我们拥有的数据,并从这些数据中获得洞察力。数据科学家需要对正在执行的业务流程有深刻的理解。
- 对数据有直觉——数据科学家必须能够高效地完成工作。所以,数据科学家必须对数据有一种直觉。这里的直觉是指从数据中发现某些模式的能力。这是因为数据科学家将面临许多处理数据的方法。通过了解数据的模式,数据科学家可以节省时间来选择最合适的方法。
- 翻译技术语言—数据科学家可以说是技术团队和业务团队之间的中间人。因此,数据科学家必须能够将技术语言翻译成业务语言。因此,沟通能力对数据科学家来说也很重要。
正如我之前所说,要成为一名数据科学家,我们需要两项主要技能,即硬技能和软技能。总的来说,目前大部分在线课程更侧重于硬技能,如如何进行数据清洗、分类、聚类、可视化等。
然而,我们很少在网络课程中发现其他技能(软技能)。因为在网上课程中,我们倾向于只听从老师的解释。除此之外,这些技能也不是我们能瞬间获得的。也就是说,为了掌握这些技能,我们必须大量练习,并获得经验来磨练我们的能力。
要磨练这些技能,我们光靠网络课程是不够的。我们还需要通过做真实的项目来练习。为什么?通过参与一个真实的项目,我们将练习如何解决问题。你会意识到现实世界中的数据没有我们上网络课程时处理的数据漂亮。
如果你觉得不自信,或者在真正的项目中仍有困难,你可以请人做你的导师,或者参加训练营。这样,有人会给你关于你正在做的事情的反馈。
同样作为信息,如果有一天你申请一份数据科学家的工作,你很可能不会被问你学了多少门课程或者你有多少证书,而是你做过什么项目,你是如何处理项目的。
结论
在线课程不会让你马上成为数据科学家。然而,在线课程可以帮助你入门,特别是如果你没有数据方面的背景。通过参加在线课程,你可以了解数据科学家在做什么。
然而,如果你想成为一名专业的数据科学家,你还必须训练你的软技能,而这些不能仅仅通过参加在线课程来获得。你必须通过从事真正的数据科学项目来训练它。
QR 分解实际上能更快吗?Schwarz-Rutishauser 算法
Arthur V. Ratz 摄于 Shotstash
在这个故事中,我们将讨论如何通过使用 Schwarz-Rutishauser 算法(已解释)有效地优化大型矩阵 QR 分解的性能,介绍其在 Python 3.9.x 和最新的 NumPy 1.20.x 库中的实现…
介绍
QR 分解是最新的,也可能是最有趣的线性代数算子之一,在科学和工程的许多领域有一些已知的应用。QR 分解方法的相关研究始于 XX 世纪初。
今天,一整类 QR 分解方法在数学中被有效地用于解决线性最小二乘(LS)问题,解线性方程组,以及特征值和奇异值分解(SVD)计算方法的基本步骤**【1】**。
在过去的几十年中,不断发展的计算机科学和 IT 领域影响了研究人员对 QR 类算法的潜在兴趣,这有利于解决许多现有的现实世界问题。
在 AI 和数据挖掘的时代,QR 算法在数据科学的各个领域得到了应用,例如主成分分析(PCA) ,作为一种在经济科学**【1,3】中执行系统参数或总体估计的分析时,根据可能具有解释性的因素来表示参数幅度的方法。例如,因子分解可以有效地用于分析工业机器和机械装置的振动水平【7】**。
以因子的形式表示各种类型的参数提供了一种能力来确定什么对总体评级和估计值具有特定的关键影响。具体而言,因子分解技术提供了获取知识和见解的能力,这些知识和见解在数据挖掘中常用的统计数据集上展示。
在电子商务和在线交易中,统计数据分解方法被应用于各种基于人工智能的分析软件功能的开发,被商家用来有效地涵盖他们的业务,从而增加受欢迎程度并降低数字内容和服务的成本,向数十亿在线客户做广告**【8】**。
然而,现有的大多数 QR 算法都具有非常高的计算复杂度,对大规模矩阵和其他大数据分解过程产生负面影响。显然,这些算法是为了在数据分析中使用它而优化的。
在这个故事中,我们将深入讨论如何优化著名的 Gram-Schmidt 正交化过程**【1】,在即将推出的 Schwarz-Rutishauser 修正【5】**的基础上显著降低其复杂度。
此外,我们将调查 Schwarz-Rutishauser 算法的复杂性,将其与其他现有的 QR 分解方法进行比较,如经典的 Gram-Schmidt 过程和 Householder 反射**【1,4】**。
此外,这个故事在底部包含了工作示例和到一个开源项目的 GitHub 库的链接,这个开源项目包含了 Python 3.9.x 和最新的 NumPy 1.20.x 库,实现了所讨论的 Gram-Schmidt、Householder 和 Schwarz-Rutishauser 算法,提供了所有这些方法性能的总结。
QR 分解
QR 分解是将实数或复数矩阵 A (m x n) 分解成正交矩阵 Q 和上三角矩阵**R【1】**的乘积,例如:
通常,矩阵𝙌的计算产生矩阵𝘼**【1,4】**的因式分解,例如:
在下面的段落中,我们将彻底讨论矩阵𝙌和𝙍最常见的性质**【4】**。
正交矩阵 Q:
通常,正交矩阵𝙌的计算导致矩阵𝘼**【4】的分解,因此完全分解和部分分解都存在。QR 分解不仅可以应用于正方形矩阵,也可以应用于矩形矩阵,即使矩阵不具有满秩。大多数情况下,𝘼的完全因式分解给出了与𝘼矩阵形状相同的𝙌矩阵,或者至少𝙌和𝘼的列数相等【5】。矩阵𝘼的因式分解是 QR 分解的一个有用属性,只要𝘼的元素必须用因式【1,3】**表示,就可以应用该属性。
根据其定义**【1】,𝙌是一个对称矩阵,由于正交特性 (1.2) ,与其转置相乘是一个单位矩阵𝙄。𝙌中的每个列向量都与其他向量正交。所有这些列向量构成了𝘼的标准正交基,这非常类似于将欧几里得空间ℝₙ中的每个列向量映射到不同空间ℝ’ₙ.的坐标系中术语“标准正交”是指𝙌中的正交列向量通过除以其欧几里德范数【1,2,6】**而被归一化。
上三角矩阵 R:
反过来,上三角矩阵𝙍可以很容易地作为矩阵𝙌’s-transpose 和𝘼的乘积得到,所以𝙍是一个矩阵,它的所有子对角线都是0。具体来说,𝙍的计算导致𝘼的高斯消除,将其减少到行梯队形式**【1,4,5,6】。为了消除𝙍中对角线元素之后的元素,标量元素𝒓ᵢₖ、𝒓ₖₖ乘以希尔伯特环境空间ℋ【2】**中子空间ℏ的相应单位基向量𝒆ₖ。
上面提到的𝘼’s 上三角矩阵𝙍被有效地用于求解线性最小二乘(LS)问题,以及寻找𝑨𝒙=𝒃线性方程组**【1】**的单个非平凡解。
一个普通的 2 乘 2 r eal 矩阵𝘼的 QR 分解可以描述为:
2 乘 2 平方实矩阵 A 的 QR 分解
第列第一个和第列第二个列向量a₁(3;4) 和a₂(7;5) 、(红色)和(藏青色),如上图所示。
图 a) ,从左起,说明了列向量 q₁(-0.6,-0.8) 和 q₂(-0.8,0.6) 、(金色)和(蓝色),作为矩阵𝘼分解的结果而获得。这些向量的长度必须总是等于 | 、𝙦 |=1 ,因此是正交单位向量𝙦.
向量 q₁ 和 q₂ 彼此垂直,因此是正交的。在最简单的情况下,这些向量中的每一个都可以通过将𝘼中的每一个列向量旋转 90°角来获得。具体的旋转可以通过将平凡的雅可比旋转矩阵乘以多向量𝘼.中的每一列来完成
对应的向量r₁(-5;——8.2),r₂(0;-2.6) 在𝙍,(金色)和(蓝色),分别标绘在图 b) 中,从右侧开始。与多向量𝙌的列不同,这些向量不是正交的。如上所述,这些向量是作为𝙍中的每个列向量分别与希尔伯特环境空间ℋ中的每个子空间的相应单位基向量𝒆₁和𝒆₂(绿色)的标量乘法的结果而逐列获得的。
已知的 QR 分解方法
目前,至少有三种现有方法广泛用于计算实矩阵和复矩阵的 QR 分解:
- 格拉姆-施密特正交化
- 户主的感想
- 吉文斯旋转
上述每种方法都有自己的优点和缺点。例如,当用于复矩阵的 QR 分解时,Householder 反射通常非常复杂。反过来,Givens 旋转方法导致最终迭代次数的精度损失,并且在将其用于大型矩阵分解时效率低下。
在这个故事中,我们将讨论经典的 Gram-Schmidt 过程和 Rutishauser 算法。我们将以 Householder 反射法和 Givens 旋转法为例,仅用于评估目的,将这两种方法的复杂性与正在讨论的 Schwarz-Rutishauser 算法的复杂性进行比较。
在接下来的段落中,我们将讨论 Schwarz-Rutishauser 算法,它是 Gram-Schmidt 正交化过程中最成功的变体之一。
格拉姆-施密特正交化
Gram-Schmidt 过程于 50 年代中期提出,是用于实矩阵或复矩阵正交化的首批成功方法之一**【1,4,5,6】**。
这种方法广泛用于递归地寻找𝑨的正交矩阵𝑸,基于每个向量𝒂ₖ ∈ 𝑨,𝒌=𝟏的正交投影…𝒏到跨度矢量𝗾 ᵢ ∈ 𝙌(𝒌)、𝒊=𝟏…𝒌,这是众所周知的。每个新的正交向量𝙦 ₖ ∈ 𝙌被计算为投影的和,从相应的向量𝒂ₖ ∈ 𝑨.中减去它最后,通过使用上面的等式 (1) ,可以容易地获得作为𝑸’s-transpose 和矩阵𝑨的乘积的上三角矩阵𝑹。
通过使用下面的等式**(2)**获得𝒂到𝒒的正交投影:
通常,整个 Gram-Schmidt 过程产生一个正交矩阵𝙌,可以表示为:
,或者:
每个新的向量𝙦ₖ ∈ 𝙌最后通过除以它的欧几里德 norm|𝙦ₖ|.来归一化
下面的一段代码演示了经典的 Gram-Schmidt 过程的实现:
事实上,Gram-Schmidt 正交化过程比 Householder 反射或 Givens 旋转方法更直观简单。虽然,当应用于大规模矩阵的正交化时,它有许多缺点,例如数值不稳定,以及明显高于𝑶❨𝟐𝒎𝒏 ❩的高计算复杂度。此外,它需要基于确定矩阵的前导维数进行修改,以提供矩形 m 乘 n 矩阵正交化**【4】**的能力。
Schwarz-Rutishauser 算法
您可能已经注意到,经典的 Gram-Schmidt 正交化是一种非常复杂的算法,它是由每个向量𝒂ₖ ∈ 𝑨到向量𝗾 ᵢ ∈ 𝙌(𝒌).的正交向量投影的计算引起的在这种情况下,正交投影算子的复杂度大约为𝑶❨𝟑𝒎❩,并且通常对 Gram-Schmidt 过程本身的整体复杂度有负面影响**【4】**。
显然,我们需要一种稍微不同的方法来进行𝑨的正交化,而不是计算𝒂ₖ-vectors 投影到𝙌(𝒌).上的倍数和
Schwarz-Rutishauser 算法是经典的 Gram-Schmidt 正交化过程的修改,由 H. R. Schwarz、H. Rutishauser 和 E. Stiefel 在他们的研究论文*“Numerik symmetrischer Matrizen”(Stuttgart,1968)*【6】中提出。以下研究旨在降低现有基于 Gram-Schmidt 投影方法的复杂性,并提高其数值稳定性【5】。
Schwarz-Rutishauser 算法背后的主要思想是,与原始的 Gram-Schmidt 过程𝑶❨𝟐𝒎𝒏 ❩和 Householder 反射𝑶❨𝟐𝒎𝒏 -𝟬.相比,𝑨’s 正交基计算复杂度可以大大降低𝟔𝒏 ❩方法**【5】**。
为了更好地理解 Schwarz-Rutishauser 算法,让我们从右边更仔细地看一下等式 (2 )和 (3.1) ,如上图所示。
在计算𝒂’s 在跨度𝙌(𝒌上的投影和时,我们必须将向量的标量积除以范数|𝙦ₖ|的平方,实际上是将乘积**【2】**归一化。然而,这是不必要的,因为每个向量𝗾 ᵢ ∈ 𝙌(𝒌)已经在之前的𝒌-th 算法步骤之一中被立即归一化。
据此,等式 (3.1) 可以通过从右侧的投影**【5】**的和中去除除以平方范数来简化:
由于𝑹是𝑸’s-transpose 和𝑨的内积,那么我们可以很容易地计算每个列向量𝒓ₖ的𝒊-th 元素为:
这里𝗾 ᵢ - 和𝒂ₖ-vectors 的标量积乘以希尔伯特环境空间ℋ**【2】**中对应平面的单位基矢𝙚ₖ。
最后,让我们将等式 (4.2) 代入 (4.1) ,这样我们就有了:
由于我们承认𝑸最初等于𝑨 ( 𝑸 =𝑨),基于上述等式 (4.2) 和 (4.3) 的𝗾和𝒓的计算可以递归地进行**【5】**:
根据向量算术,为了得到每个新的𝒌-th 列𝙦ₖ ∈ 𝙌,我们从向量𝙦ₖ中减去向量𝗾 ᵢ ∈ 𝙌(𝒌)和𝒓ᵢₖ的乘积,这是向量的拒绝。让我们回忆一下,向量𝙦ₖ最初等于𝒂ₖ (𝙦ₖ=𝒂ₖ).这就是为什么求和算子最终可以从方程 (4.3) 中去掉。
除了𝙦ₖ,我们还需要计算𝑹的𝒓ₖₖ 𝒌-th 对角线元素,如范数|𝙦ₖ|:
,然后,归一化新𝒌-th 列向量𝙦ₖ ∈ 𝙌,除以其范数,等于对角元素𝒓ₖₖ**【5】**。
最后,我们可以用公式表示 Schwarz-Rutishauser 算法:
- 初始化矩阵𝙌,等于𝑨 (𝙌=𝑨),𝑹为 0s 的矩阵;
2.对于每个𝒌-th 列向量,𝙦ₖ ∈ 𝙌,𝒌=𝟏…𝒏,请执行以下操作:
2.1.对于向量的跨度𝗾 ᵢ ∈ 𝙌(𝒌)、𝒊=𝟏…𝒌,这是众所周知的:
- 得到𝒌-th 列向量𝒓ₖ ∈ 𝑹的𝒊-th 元𝒓ᵢₖ,方程**(5.1)**;
- 更新𝒌-th 列向量𝙦ₖ ∈ 𝙌,方程**(5.2)**;
2.2.继续前面的步骤 2.1,对向量𝙦ₖ进行正交化,得到𝒌-th 列向量𝒓ₖ;
3.计算对角元素𝒓ₖₖ作为𝙦ₖ-vector’s 范数𝒓ₖₖ=|𝙦ₖ|,方程**(5.3)**;
4.归一化𝒌-th 列向量𝙦ₖ ∈ 𝙌,除以其范数,等于上一步 3 的𝒓ₖₖ;
5.继续进行步骤 1-4 中执行的𝑨正交化,以计算𝑨’正交基𝙌和上三角矩阵𝑹;
6.一旦完成,从过程返回负的合成矩阵-𝙌和-𝑹;
与原始的 Gram-Schmidt 过程相比,Schwarz-Rutishauser 算法的实现非常简单。此外,它提供了就地计算𝑹和𝙌向量的能力,降低了算法的复杂性**【5】**。
下面列出了演示 Schwarz-Rutishauser 算法实现的一段代码:
数值的稳定性
在许多情况下,由于浮点算术溢出问题**【1】**导致的持续舍入误差,使用计算机获得的最高精度近似值在数值上是不稳定的。
本身,实矩阵或复矩阵分解的稳定性很大程度上取决于其元素的数值表示(实矩阵或复矩阵)以及它们的数量。
根据最佳实践,为了避免执行 QR 分解时显著的精度损失,建议使用 Python 和其他编程语言的各种现有多精度库(如 mpmath 或 GMPY )将实数或复数矩阵的元素表示为有理数。
复杂性
最后,让我们花点时间来看看 Schwarz-Rutishauser 算法的复杂性。在大多数情况下,与经典的 Gram-Schmidt 和 Householder 反射方法**s【4,5】**相比,它的复杂度评估为𝑶(𝙢𝙣)并且减少到至少两倍 (2x) 。此外,使用 Gram-Schmidt 和 Householder 方法的复矩阵的 QR 分解需要转置共轭的计算,这又大大增加了总体复杂度,至少增加了𝙣-times。
所有三种 QR 算法的复杂性如下表所示:
QR 算法计算复杂度
Schwarz-Rutishauser 算法的复杂度对于实矩阵或复矩阵 QR 分解的情况保持不变,因为以下算法不额外需要计算矩阵的复转置共轭,并且基于相同的正交化过程,应用于任何矩阵,而不管数据类型**【5】**。
Schwarz-Rutishauser 算法和其他现有 QR 算法的复杂性调查如下图所示:
QR 算法复杂性综述
如您所见,与 Householder 反射(红色)相比,Schwarz-Rutishauser 算法(navy)的整体复杂度降低了近 61%,与经典的 Gram-Schmidt 正交化过程(绿色)相比,复杂度降低了 50%。
总之…
最后,正在讨论的 Schwarz-Rutishauser 算法在用于任意形状的大规模实数和复数矩阵的因式分解时是非常有效的,这些矩阵在每个维度上具有超过𝟏𝟎元素的大小。此外,它被认为具有更好的数值稳定性,对于并行运行因式分解过程是有吸引力的,可以在多节点计算集群中的多个 CPU 之间进行扩展。
与经典的 Gram-Schmidt 过程相比,Schwarz-Rutishauser 算法的总体复杂度仅为𝑶(𝙢𝙣,𝑶(𝒏)-times 更小,并且非常接近矩阵内积复杂度。
Python 3.9 . x 和 NumPy 1.20.x 中的 QR 分解完整源代码项目可从我的 GitHub 资源库下载,网址为https://github.com/arthurratz/qr_decomposition
参考
- “QR 分解”——来自维基百科,免费百科
- 《投影(线性代数)》——来自维基百科,免费百科.-,Orthogonal%20projections,%2C%20for%20every%20and%20in%20%2C%20.)
- [“因式分解”——来自维基百科,免费百科](https://en.wikipedia.org/wiki/Factorization#:~:text=In%20mathematics%2C%20factorization%20(or%20factorisation,objects%20of%20the%20same%20kind.)
- “ECE 133 a—应用数值计算(6。QR-因子分解)”,美国加州大学洛杉矶分校 L. Vandenberghe 教授,2019 年秋季
- 【QR 分解算法】作者 Walter Gander,Fuer Angewandte Mathematik eidgeneessische Technische Hochschule CH-8092 ZUERIC,1980 年 4 月
- 《Numerik symmetrischer Matrizen》,H. R. Schwarz、H. Rutishauser 和 E. Stiefel 著,斯图加特,1968 年
- “利用 QR 分解和无约束优化减少多旋翼飞机的振动”,Bechhoefer,Eric Robert,西蒙兹精密产品公司,美国专利 USP2009037512463,2005 年 2 月 16 日
- 《Netflix 奖与奇异值分解》,NJIT,cs 301-2021 春
SHAP 能引发风险分析的范式转变吗?
意见
可解释的人工智能不再是一个理论了!!
由 Chandan Durgia 和 Prasun Biswas 撰写
如果按照应用的多样性来排列经济理论,“博弈论”肯定会排在前百分之一。和其他理论一样,博弈论在解释和应用方面也有所发展。从“代理人将如何在考虑竞争对手观点的不同选项之间进行选择”的基本假设开始,到像“纳什均衡”(约翰·纳西— 1994 年)和“市场设计的稳定分配和实践”(沙普利和阿尔维姆·罗斯— 2012 年)这样的诺贝尔奖得主。
来自政治、游戏、营销、哲学等领域。博弈论有助于定义人们如何在与其他合作/竞争参与者互动的情况下做出更好的决定。
在我们深入研究之前,让我们先了解一下 Shapley 等人提出的问题。(此后称为沙普利)试图用博弈论来解决。简而言之,Shapley 设计了一个独特的解决方案(以下称为“定理”或“Shapley 定理”)来回答“给定一项‘工作’,当相关人员有不同或相似的目标时,奖励/成本的份额是多少”的问题。换句话说,对于一个有特定目标的游戏的玩家来说,回报/成本的边际贡献是多少。
可以利用该定理的一些有趣的问题陈述是:
- 机场问题 :每个代理人要为共同跑道付多少钱?
2.**出租车费用问题:**在拼车的情况下,每个乘客到底应该分摊多少费用?
3.将总团队奖金分配给团队成员的最佳方式是什么?😃(如果一个免费午餐者吃了你的信用卡,你是如此渴望得到它。)
该定理的使用案例非常广泛。
然而,令人着迷的是,即使在人工智能/机器学习(AI/ML)领域,这也留下了不可磨灭的痕迹。从建模的角度来看,Shapley 值有助于确定每个特征的“贡献”以及影响因变量的特征的“方向性”。
对于一个给定的价值模型,Shapley values 按照下面的等式在代理人之间分配报酬/成本:
从概念上来说,沙普利是相当直观的。对于给定的模型,特性的边际贡献计算如下:
通过包含和排除特征来分析输出的差异
求所有 N 的平均值!可能的订单
具有剩余特征所有子集。
所有这三个组成部分都在上面的公式中突出显示。
此外,这些 Shapley 值必须具有几个关键属性:
1.**相加:**Shapley 值的总和应为 100%。即,以总边际贡献的总和为 100%的方式在所有参与者之间划分贡献。
2。 **单调性:**如果一个特定的特性有较高的贡献,那么它应该总是有较高的 Shapley 值/报酬。
从 Python 的角度来看,“shap”包用于计算 Shapley 值。此外,它还提供了 3 个关键图:
1.概要图:这个图有助于理解
a.每个特性的相对重要性:例如,在下面的摘要图中,特性 5 最重要,其他特性依次递减。
b.方向性:平均而言,特征的高/低值是否会增加/减少模型输出。例如,对于下图中的要素 1,蓝色/低值通常意味着模型输出的负 SHAP 值,反之亦然。
SHAP 摘要情节
2.依赖关系图:这提供了 SHAP 和变量值之间关系类型的视图,即关系是否单调、呈 U 形等。除此之外,它还提供与给定特征最相关的变量。在下图中,特征 15 具有单调关系,特征 1 与特征 15 强相关。
SHAP 依赖图
3.力图:这非常类似于常用的瀑布图,其中突出显示了每个特征的贡献,这导致了 SHAP 值从其基础值到输出值的变化。
原力图
已经相当详细地介绍了 SHAP,现在让我们来谈谈房间里的大象。
它会对垂直风险分析领域产生影响吗?
信用风险分析(监管)作为一个领域,在分析方法的使用方面受到了很大的限制。主要原因是金融风险法规要求的“模型的可解释性”。这些法规背后的想法是确保管理层清楚地理解模型和特征,并且模型特征不会遗漏任何风险驱动因素。可以理解,这对核心 AI/ML(黑盒)模型的使用是一个很大的障碍。如果我们要分解,这里的可解释性意味着:
1.了解模型中的特征/变量。
2.理解模型变量的“方向性”。
3.理解每个模型变量的“贡献”。
4.知道变量的参数(包括激活函数)。这基本上意味着知道这个等式。
在很长一段时间里,研究人员只能获得 AI/ML 模型中的功能名称(# 1-上面的列表),但这些黑盒模型中的功能发生了什么仍然是未知的。虽然 Shapley 定理已经存在了相当一段时间,但只是在最近几年,Shapley 定理才被用来理解每个特征的“方向性”(上面列出的第 2 条)和“贡献”(上面列出的第 3 条)。考虑到这一点,剩下的唯一问题就是不知道这个等式(上面的第 4 条)。
尽管可解释性问题仍未完全解决,但从信用风险分析的角度来看,利用这个 Shapley 定理和导出的 Shapley 值可以开辟新的途径:
1。 **可靠的挑战者模型(监管模型)😗*虽然部分银行一直使用 AI/ML 复杂模型作为挑战者模型。然而,建模者和管理层都不能充分依赖这些模型。这主要是因为在给定产品组合的情况下,无法保证在模型中,功能是否被赋予正确的权重,以及功能的标志/方向性是否直观。随着 Shapley 值的引入,现在建模人员和管理人员可以更加依赖模型,因为他们知道正确的特征被赋予了适当的重要性,并且这些特征的方向性也是正确的。
2。 **挖掘正确的特征(监管模型)😗*在许多信贷组合中,通过特征工程来获得可靠的模型既困难又耗时。在这种情况下,建模者现在可以利用 AI/ML 复杂模型和 Shapley 值来理解因变量的主要驱动因素。一旦建模者对主要特征、它们的贡献水平和它们的方向性有了更好的理解,相同的特征可以用于非 AI/ML 方法中,以获得更有意义、可靠和敏感的模型。
3.**对非监管模型的影响:**AI/ML 在信用风险分析的另一个领域找到了自己的空间,那就是应用/行为/收款记分卡。尽管金融行业在这些案例中使用人工智能/人工智能模型已经有一段时间了,但是,围绕可解释性的关键问题仍然存在。例如,围绕申请记分卡,如果贷款被拒绝—一方面,客户希望知道贷款被拒绝的依据,另一方面,管理层希望了解拒绝客户的财务风险。因为 Shapley 值有助于理解每个特征的贡献和方向性,所以建模者更容易合理化模型产生的决策。
尽管如此,要让这些黑箱模型完全符合监管者的预期,还需要做更多的工作;然而,Shapley 值无疑有助于在提高 AI/ML 模型在风险分析领域的可接受性方面取得重大进展。
约翰·纳西曾经说过“我可以观察到博弈论在经济学中的应用非常多。一般来说,尽可能合理地研究数学是明智的,因为使用更多数学的经济学家比那些较少使用数学的经济学家更受尊敬。这就是趋势。”作为风险分析从业者,我们很高兴也很感激该理论找到了数学的道路,并因此创造了 Shapley values 这样的属性,这有可能在风险分析领域产生范式转变。
虽然还有很长的路要走,但是充满希望也无妨!!
免责声明:本文所表达的观点是作者以个人身份发表的观点,而非其各自雇主的观点。