学习 Python 和 SQL 最值得推荐的 18 个数据科学平台
社区最受欢迎的数据科学学习平台综合指南
数据科学是当今市场上最热门的职业之一。公司总是在雇佣数据科学家,总有很多人想成为一名数据科学家。但是数据科学并没有像其他技术学科一样存在那么久,所以不像软件开发那样,没有那么多专门针对数据科学的学习平台来帮助有抱负和有经验的科学家做好准备。当然还有 Coursera 和 Udemy,还有一些大的品牌平台,比如 DataCamp。此外,还有十几个或更多更小的利基平台,旨在以他们的方式培训数据科学家。
我评估了数据科学社区的人推荐的 18 个平台。根据您的学习风格和需求,总有一个平台适合您。本文的前半部分是我对这些平台的最终评估,最后是一个完整的平台列表,其中包含了帮助我评估它们的所有细节。文章的第二部分详细介绍了我评估平台的方法——了解不同的用户类型、采购平台和要评估的变量。所以有时间的话先跳到最后了解一下我的评价标准再看结果。如果你时间紧迫,就去下一部分。
TL;大卫:我的评估
我创建了两个图表来映射我的变量。它们是带有象限的图表,你可以在所有白皮书中看到。老实说,我有点惭愧我选择了这种可视化(感觉就像在 Excel 中制作 3D 饼图),但我认为它将允许您快速找出哪个平台最适合您。
图表 1:学习风格和体验
**问自己:**我的学习风格是什么?我是喜欢一头扎进去开始编码,还是喜欢先看视频?我在这方面完全是新手,需要更多的帮助吗?或者我可以直接跳进去吗?
通过用户体验学习风格[图片由 N. Rosidi 创建]
基于讲座的平台的极端是纯粹的被动讲座,如网页上的文本或人们在视频上的交谈。通常这些平台会要求你自己安装软件,我认为这是一种懒惰,因为安装所有软件来提供完整的开箱即用体验是如此容易。用户并不总是先进的——这就是他们学习的原因——所以为他们提供一种可以通过浏览器轻松访问软件、库和数据集的体验现在是必须的——至少对我来说是这样。
互动的、自我指导的学习允许你按照自己的进度工作,选择你想学习或练习的任何主题。在极端情况下,有一个全功能的 IDE,允许您像在真正的专业环境中一样探索、交互和操作数据。但它不仅仅是完全自我指导的,因为有解决方案可以帮助您解决问题和理解概念。这里的方法是立即开始编码,并在遇到困难时学习解决方案。这些平台非常适合有经验的用户,即使你只是中等经验。
中间地带是讲座和互动自主学习的结合。有了这些平台,你就有了从头到尾学习一系列概念的“课程”和“路径”。向您展示文本和/或视频,然后要求您在一个交互式但有限的 IDE 中应用您所学的内容,在这个 IDE 中,您会被问到一些复杂的问题。交互式但有限的 IDE 意味着 IDE 只接受回答提示问题的输入,因此您不能偏离正道去探索数据或尝试不同的功能和技术,您知道,这是一个优秀的数据科学家会做的事情。这对那些从零开始学习并试图从头开始学习新东西的人来说是完美的。
图表 2:内容焦点
**问自己:**我是在努力学习 python 吗?还是我在努力学 python 做数据科学家?我是在为面试做准备吗?还是我在尝试建立我的第一个机器学习模型?还是只是想学基础?
按技术重点分类的教育主题[图片由 N. Rosidi 创建]
专业主题是有特定目的的教育内容。例如,为技术面试做准备——数据科学或软件开发。就是用 python 学习金融建模或者构建梯度推进决策树。这些平台服务于小众人群,但他们做得非常好,让他们的用户群满意。
普通教育仅仅是对基本概念的介绍,这些概念是熟练掌握这门语言的基础,比如如何创建熊猫数据框来操作数据。一旦你掌握了这些概念,下一步将是深入到满足你需求的特定主题。
平台是以用户为中心设计的。在这种情况下,你是数据科学家还是软件开发人员?如果你正在读这篇文章,你可能是一个数据科学家,但是正如我之前提到的,有更多的教育平台是为教授软件开发而创建的。有时这些平台提供 python 教育,但它们的内容和示例并不总是面向数据科学家。这有点像给一个软件添加一个插件(它不是原生的,有时感觉有点粗糙)。
对每个平台的详细评估
以防图表对你来说不够。
每个平台的特点以及它们的独特之处
链接到谷歌表单:https://bit.ly/2UknbZ3
哪种类型的用户会从每个平台中受益最多
链接到谷歌表单:【https://bit.ly/2YaNlhR
按用户体验级别划分的教学风格和特点
链接到谷歌表单:【https://bit.ly/3f0SPm9
按技术重点分类的教育主题(数据科学和软件开发)
链接到谷歌表单:https://bit.ly/30kaqkS
因此,根据你的职业目标和你喜欢的学习方式,每个人都有一个平台。在您的旅程中,您可能会使用其中的一些平台,因为每个平台都专注于特定的优势。选择一个数据科学平台,让您了解您所处阶段需要学习的内容。我希望这个列表有所帮助。
请参见下文,了解我评估平台的方法…
附录:我评估 18 个平台的方法
1.用户角色
我从对用户——你——的理解开始。当思考什么类型的人会对学习数据科学感兴趣时,我想到了 3 种不同的用户角色:
- **经验丰富的数据科学家:**这些是当前的数据科学家。他们要么有几年的经验和服务过的公司,要么在第一份工作中是数据科学家。无论如何,这些人要么在寻找新工作,需要准备/更新他们的面试技能,要么想学习其他数据科学技能,以进入数据科学的另一个学科。
- **技术型、缺乏经验/有抱负的数据科学家:**这些人可能是计算机科学专业的学生或当前的业务分析师。他们编写代码,并不需要太多的手把手,因为他们开始在数据科学方面提高技能。他们可能对转向数据科学的职业感兴趣。
- **非技术人员、缺乏经验/有抱负的数据科学家:**这些人可能是学生或在公司担任非技术职务的人。他们不写代码,也不知道从哪里开始,但他们对数据科学职业或涉足技术领域感兴趣。
2.采购公司(包括和排除)
我问自己,有人会如何发现数据科学平台。除了简单的谷歌搜索,大多数人要么选择他们认可的品牌,要么选择基于推荐的平台。
我选择从热门子网站的推荐中寻找平台,比如:
- r/数据科学
- r/编程
- r/python
- r/sql
Reddit 有一个活跃的数据科学社区,所以这是一个很好的起点。我补充了 Quora,Google,Youtube。
我有意识地选择排除(MOOCs)大规模开放在线课程(如 Udemy、EdX 和 Coursera)、训练营和大学课程,因为质量取决于讲师和课程,所以我很难进行一对一的评估。此外,我不认为有经验的数据科学家真的会上关于如何成为一名数据科学家的 Udemy 课程——但我可能错了。
对于每个平台,我都注册并使用了一段时间。我没有注册高级版本,除非我无法根据我的标准正确评估该平台。
3.我的评估中使用的变量
我根据我认为对上述每个用户角色都很重要的 4 个主要变量来评估每个平台。
回到我的评估部分阅读结果!
基于 1D-CNN 的手写识别全卷积模型
EASTER 模型解释了快速、高效和可扩展的 HTR/OCR
手写识别也称为 HTR(手写文本识别),是一种机器学习方法,旨在赋予机器从现实世界的文档(图像)中读取人类笔迹的能力。
传统的光学字符识别系统(OCR 系统)被训练来理解机器打印文本(来自文档/图像)中的变化和字体风格,并且它们在实践中工作得非常好(例如 Tesseract)。另一方面,手写识别是一项更具挑战性的任务,因为人们的笔迹存在大量差异。
照片由约翰·詹宁斯拍摄自 Unsplash | 图片来源
深度学习的最新进展导致了高效 OCR/HTR 解决方案的开发。尽管这些模型在实践中表现出色,但由于以下限制,它们不容易训练、理解和部署
- 它们需要海量的标注训练数据。
- 由于训练参数多,训练难,推理慢。
- 因为它们速度慢,所以需要巨大的部署成本(硬件要求)来使它们在实时应用中有用。
- 模型本质复杂,难以扩展(堆叠 LSTMs、复杂关注层)。
在本文中,我们将讨论一种新颖的深度学习架构(EASTER),它在一定程度上解决了上述挑战。这种架构快速、可扩展、简单,并且比许多复杂的 OCR 和 HTR 任务选择更有效。
EASTER 模型仅利用一维卷积层来完成 HTR 和 OCR 的任务。
复活节模型结果来自原论文| 图片来源
原文链接:
这是这篇文章将要涉及的关于复活节模型的项目列表-
- 复活节概述
- 1D——CNN 上的图片?真的吗?怎么会?
- 复活节模型建筑
- 具有零训练数据的 OCR/HTR 能力
- 结果
- 总结
复活节概述
EASTER(高效且可扩展的文本识别器)是一个完全卷积的架构,在编码器中仅使用 1-D 卷积层,并在末尾添加了 CTC-解码器(连接主义时间分类)。
复活节设置了一种新的方式来可视化和有效地解决光学字符识别/HTR 任务,只有 1-D 卷积层。
以下是复活节建筑的几个要点
- 可在 GPU 上并行训练的全卷积架构。
- 只有 1-D 卷积层,速度更快,参数更少。
- 即使在训练数据有限的情况下也能很好地工作。
- 没有复杂的层次(简单易懂)。
- 适用于生产线级 OCR/HTR 任务。
除了 EASTER 架构之外,本文还介绍了一个带有增强设置的合成数据生成管道。这意味着您可以训练自己的 OCR/HTR 系统,而不需要任何训练数据。
现在问题来了——如何在二维图像上应用一维卷积。这是一个非常有效的问题,下一段解释了它-
1D-美国有线电视新闻网的图像?真的吗?怎么会?
考虑一个尺寸为 600 X 50(宽 X 高)的输入图像,如下图所示。
在这里,如果你在这个图像中画一条垂直线,你将只剪切一个字符(如果不是在空白中画的),如果你画一条水平线,你将可能最终剪切所有的字符。
换句话说,我在这里想说的是——沿着图像的高度,你只会发现单个字符的属性,而沿着宽度,当你从左向右移动时,你会发现所有不同的字符。
复活节模型中的一维卷积滤波器运动| 图片作者
所以基本上,宽度可以被认为是一个时间维度,如果你沿着时间移动,你会发现不同的后续字符,而高度代表一个字符在给定时间戳的属性。
内核大小为 3 的一维过滤器实际上意味着在时间维度(沿着宽度,每次 3 个像素)中覆盖 50 个像素(H)的总高度的维度 3 的过滤器。因此,基本上内核大小为 3 的过滤器意味着 3x50(或 3xH)维的过滤器(就像 1-D CNN 适用于 NLP 单词嵌入)。
如上图所示,这个红色矩形框是一个一维卷积过滤器,它在时间维度(宽度)上从左向右移动时扫描图像的整个高度。每次扫描存储被观察字符(或字符的一部分)的信息。
该信息最终被传递到 softmax 层,该层给出了沿宽度的每个时间步长的所有可能字符的概率分布。这个概率分布然后被传递到 CTC 解码层,以生成最终的输出序列。
复活节模型建筑
Easter 模型架构非常简单,仅利用一维卷积层来执行 OCR 和 HTR 任务。
Easter 编码器部分由多个堆叠的一维卷积层组成,其中内核大小随着模型的深度而增加。在 ASR(自动语音识别)领域中,已经证明了基于堆叠 1-D 卷积的网络处理序列到序列任务的有效性。
复活节街区
复活节积木的基本结构如下图所示。每个块具有多个重复的子块。每个子模块由 4 个有序组件组成-
- 一维卷积层
- 批量标准化层
- 激活层
- 辍学者
复活节子块| 图片来源
最终编码器
整个编码器是多个重复 EASTER 块的堆栈(在最后一段中讨论过)。除了重复块之外,总体架构中还有四个额外的 1-D 卷积块,如下图所示。
预处理块(下采样块)
这是模型的第一个模块,包含两个 1-D 卷积层,步长为 2。该块用于将图像的原始宽度下采样到宽度/4。除了步距之外,sub 0-块的所有其它部分与上面讨论的类似。
后处理模块
在编码器部分的末端有三个后处理块,其中第一个是膨胀为 2 的膨胀 1-D 卷积块,第二个是正常 1-D 卷积块,而第三个后处理块是“滤波器数目”等于可能结果(模型词汇长度)的数目并且具有 softmax 激活层的 1-D 卷积块。这一层的输出被传递给 CTC 解码器。
复活节编码器| 图片来源
CTC 解码器
EASTER 编码器将编码序列的输出概率分布传递给 CTC 解码器进行解码。
为了将预测的输出字符映射到结果输出序列中,EASTER 模型使用了加权 CTC 解码器。这种加权 CTC 解码器导致模型的快速收敛,并且当训练数据有限时,给出比普通 CTC 更好的结果。
该加权 CTC 解码器的配置在原始论文中有详细描述。
3x3 架构变体
EASTER 3X3:使用下表可以构建一个 14 层的变体。这是一个非常浅/简单的架构,只有 100 万个参数,但对于 OCR/HTR 的任务非常有效。
复活节 3X3 | 图片来源
该型号可以轻松扩展以提高性能/容量。在本文所示的实验中,5x3 变体在 HTR 和 OCR 任务中实现了最先进的性能。
零训练数据的光学字符识别/HTR 能力
除了新颖的体系结构之外,EASTER 论文还描述了为机器打印和手写识别任务综合生成训练数据的方法。
使用这些方法(在论文中有很好的描述),你可以训练一个光学字符识别系统(OCR)或者你自己的手写识别系统(HTR ),而不需要任何标记数据。因为本文中显示的可配置数据生成器将为您准备合成的带标签的训练数据集。
下图显示了一些从纸上合成生成的样本,它们看起来非常逼真-
合成生成的样本| 图像来源
结果
本文展示了在 IAM-脱机行识别任务上的一些惊人的结果。在手写识别任务上的实验证明,即使在训练数据有限的情况下,EASTER 模型也能很好地工作。
复活节的手写识别结果与谷歌的一篇关于“可扩展的手写文本识别系统”(又名 GRCL)的论文进行了比较,作者在这篇论文中用有限的训练数据集展示了良好的手写行识别结果。如下表所示,即使训练样本较少,EASTER 模型的表现也优于 GRCL 模型。
IAM 离线测试数据集上的手写识别结果| 图片来源
EASTER 进一步示出了在场景文本识别(机器打印)任务上的 SOTA 结果,没有任何增强,并且具有贪婪搜索解码机制(没有语言模型解码)。
这是一张手写和机器打印的模型结果的屏幕打印
复活节模型手写识别结果| 图片来源
摘要
在本文中,我们讨论了一种新颖的完全卷积(只有一维卷积)、端到端的 OCR/HTR 管道,它简单、快速、高效且可扩展。
除了架构之外,我们还了解了一维卷积滤波器如何对待识别图像进行处理。
最后,我们讨论了合成数据生成管道以及原始论文中显示的识别结果。
要了解更多细节,你可以在这里阅读原文,因为它对我们在本文中涉及的所有方面都有详细的解释。
感谢阅读!希望这篇文章对你有帮助。请通过评论让我知道你的反馈。下一篇文章再见。
本文原载此处。
参考
- 复活节论文:【https://arxiv.org/pdf/2008.07839.pdf
- https://arxiv.org/pdf/1904.09150.pdfGRCL 纸
阅读下一页>>
- 利用量化技术优化张量流模型
- 【PyTorch 深度学习:简介
- 用 PyTorch 进行深度学习:第一个神经网络
- OpenCV:Python 中的简介和简单技巧
在预测模型/数据科学上花费了 100 万美元,而没有用户参与?
如何避免在技术上正确但实际上错误的模型上花费 6-8 个月的时间。
如果没有人使用你的解决方案、模型或应用程序,你的 ML 会成功吗?
我最近联系了一位知名消费品牌的数据科学家,他曾在一家非常大的电子商务公司工作。我问他为什么和我联系,为什么我的一句口头禅“结果重于产出”能引起他的共鸣。他回答说,“很多公司(包括)不知道如何处理他们的 ML 模型和结果。并将其传达给制定大部分预算决策的非技术受众。”
我问他是否有一个特别的例子/事件在他脑海中浮现。他接着说:
在[过去的电子商务公司],我们能够在欺诈者/滥用者下订单时预测他们,但该公司不会采取任何行动,因为他们需要以前欺诈的证据。例如,一个使用台湾 IP 地址从美国网站订购手机的新帐户(客户)将被我们的模型标记出来,但企业无论如何都会接受订单。
两个星期后,这又会被认定为欺诈。
他们本可以采取适当的强制措施或增加摩擦。
两个星期后,它又以欺诈罪出现。
他们本可以采取适当的强制措施或增加摩擦。
该项目历时 6-8 个月。很长。
这里发生了什么?
首先,他们可能在这上面花了数百万。让我们假设 7 个月的工作和大约 10 名年薪 15 万美元/人的员工。我不知道这实际上是否正确,但对这家公司来说感觉是合理的。
就在这里,你在这个项目上的数据科学和工程支出是 875,000 美元,不包括工资以外的任何成本。
这里有很多东西需要解开,但是我立即注意到一件事:这个系统的原型可以很容易地设计出来,而不需要构建任何模型,来帮助确定这个项目的业务单位/发起人将采取的行动。
虽然我不知道发生这种情况的原因,但我确实想知道他们是否与反欺诈领域的部门/利益相关者进行了交谈,以了解:
- 制作这个的团队是否理解“谁是这个的接收者?该部门将如何识别欺诈信号并对其做出反应?”
- “什么样的信息会让你选择对欺诈索赔做出反应,或者不予理睬?”
- “你为什么在乎发现诈骗?”(有什么激励措施来“抓住”欺诈行为?是关于找到它,拿回资金,还是什么?)
- “在你的工作中,以你现在的方式处理欺诈索赔有什么困难?什么会让你觉得更容易/更好?”
- “对于一个机器驱动的系统来检测欺诈有什么顾虑?”
- “你能告诉我,用我们做的这个 UI 例子,你下一步会做什么吗?”[用户界面显示欺诈/警报]
- “哪些类型的欺诈是最需要抓住的?高价商品还是大量低价商品?这个问题与利益相关方女士相关吗?”
- “如果这个欺诈检测系统在第一次发布时就取得了成功,你会怎么想?我们该如何衡量呢?”
移情->试探性问题->原型->评估->学习->构建/重新设计/调整
要做到这些,你几乎不需要什么“数据科学”。这不是统计、建模或分析工作。
多是设计,设计思维,换位思考。
听到这样的故事让我很难过。它不仅浪费金钱,而且最终会带来更多的技术债务,分析/数据科学团队可能不喜欢他们的工作“无关紧要”或不被使用,领导/主管可能创造了很好的技术成果,但没有为业务带来任何价值或成果。
*在这里,一个成功的设计可能会在早期确定故障点和“令人高兴的地方”,这样就可以将它们纳入到解决方案中。通过关注体验,它会告诉我们,这个解决方案可能不仅仅是制作模型。最终,必须将模型部署到对最终受众有用、可用且有意义的界面和/或用户体验中。在我看来**人的因素是这个项目成功的关键。*这个人一次也没有向我提到型号/技术有任何问题。
你必须协调人员+用户界面+工程+数据+建模+激励。
UX 和良好的以人为中心的设计帮助我们将所有这些变量粘合在一起,以便我们交付有意义的结果,而不仅仅是输出、模型或 UI。这是不可取的吗?很难用吗?
激励措施不一致吗?
他们是否没有定期让正确的跨职能团队/利益相关方参与进来,并意识到优先级/需求发生了变化?
所有这些问题都是让机器学习模型和数据科学部分成功的一部分。一个成功的以人为中心的设计会将所有这些粘合在一起,或者甚至足够早地揭示出这个项目可能不值得做。**
如果你不想在一个项目上花费 6-8 个月的时间来获得这种结果,我教了一个两年一度的研讨会,并且刚刚在发布了一个名为“设计以人为中心的数据产品”的视频课程版本。现在可以免费下载模块 1 的视频和书面补充材料。它是专门为数据科学、分析和技术产品管理领域的领导者设计的——像你们这样的人——他们的任务是制作有价值的数据产品,我已经使课程尽可能简单,立即适用,并希望有趣。我还保证它将帮助你创造更多有用的、可用的和不可或缺的数据产品🤷♀️🤔到…里面👍🙏🙆🏻♂️.
原载于 2020 年 5 月 21 日 https://designingforanalytics.com的* 。*
第一次总统辩论:按数字
作者图片
第一场辩论很乱。但就像今天的大多数新闻一样,随着下一个故事的出现,它无疑会褪色(例如 Trump 对 COVID 的检测呈阳性)。所以,在辩论退居幕后之前,让我们用一些数据科学和工具来尽快分析和可视化辩论吧!
与其他许多以数据科学为导向的文章不同,我将更多地关注快速而肮脏的数据处理、分析和可视化方法,因为在完全透明的情况下,尽管上面和下面的视觉效果可能看起来很有趣,并能吸引眼球,但它们并不令人难以置信地深刻,也没有讲述太多超越表面水平的故事。然而,文本数据本身是相当丰富的,我鼓励您自己进一步探索这些数据!(我已经把数据上传到 Kaggle 这里了)。
当你时间很紧的时候该做什么
在我从事目前的工作之前,我在《国家杂志》工作,这是大西洋媒体(印刷和在线媒体公司)的政治/政策部门,我们的团队每天都会即时创建可视化效果。为了创造下面的视觉效果,这里有一些我推荐的技巧。
作者图片
第一个问题:数据里有故事吗?
第二个问题:它容易争论吗?
当我观看辩论时,我首先想想象的是贯穿始终的打断次数。但是这容易争论吗?遗憾的是,没有。通过快速的谷歌搜索,我找到了一份来自 Rev.com 的辩论记录,似乎他们在停顿时将每位发言者的发言分开了。
文本抄本将单个发言分成多个片段。
换句话说,除了手动通读和连接这些重叠的区域,没有快速和可靠的方法来识别说话者是否打断了另一个人,被打断了,或者转录只是在搞笑。
事实上,如果我们不考虑前一位发言者是谁,只分析这些事件的发生频率,特朗普总统有 150 次,拜登副总统有 136 次——这一比例与现实相去甚远。下面是检查这一点的代码:
import pandas as pddf = pd.read_csv('debate_csv.csv') # read in the csv# split into a list of words then count length of list
df['num_words'] = df['text'].str.split().str.len() # subset for only 8 words or less
df = df[df['num_words'] <= 8]# check count by speaker
d_count = df.groupby('speaker').count()
print(d_count)
使用 Excel
可以,用 Excel。对我来说,这是从 Rev 网站复制并粘贴原始转录的最快方式,并使用文本到列和 F5 ->选择空白->删除选定的行来创建数据集。
创建时间图
编码时可视化需要时间。因为我不容易分析我感兴趣的第一个故事角度,所以我决定想象每个演讲者发言的时间。
为了创建时间序列,我使用了fluorescent Studio。虽然我不是他们的免费层的最大粉丝,这要求你的所有数据集都是公开的…对于像这样的快速项目来说,当“新闻价值”溜走时,时间是至关重要的,这是一个很好的工具。(其他快速但有吸引力的 viz 工具还包括 DataWrapper (与 fluid 相同的公共数据要求)和Raw Graphs——这是完全开源的,让你保持隐私,双赢)。
快速浏览了一下 fluorescent 的样本数据,我意识到我自己的数据的结构应该是一行= 1 秒,其中 X 轴是经过的秒数(连续变量),Y 轴是说话者(分类变量)。在处理之前,辩论数据集对每个发言人有一行,一列是发言人开始讲话的分:秒。
import pandas as pddf = pd.read_csv('debate_csv.csv') # read in the csv# function to convert the time to seconds
def time_to_sec(text):
minsec = text.split(':')
minutes = minsec[0]
seconds = minsec[1]
tseconds = (int(minutes) * 60) + int(seconds)
return tseconds# convert timestamp (string) to seconds (int)
df['seconds'] = df['Time'].apply(time_to_sec)
# create multiple rows based on the number of seconds spoken# replace 0 seconds spoken with 1
df['seconds_spoken'] = df['seconds_spoken'].replace(0, 1)
# fill empty values
df['seconds_spoken'] = df['seconds_spoken'].fillna(1)
# now we can run repeat to create one row per second
df = df.loc[df.index.repeat(df.seconds_spoken)]# by resetting the index and making it a column
# we can have a column that increases +=1 seconds
df = df.reset_index(drop=True)
df['running_seconds'] = df.index# export this file
df.to_csv('export.csv')
在导入这个文件并设置轴之后,我们得到了最终的图表(我截屏了这个可视化,并使用 Photopea (免费 Photoshop)添加了最后的润色,就像图例一样)。
作者图片
创造单词云
很明显,我会说我不是文字云的粉丝。他们不能有效地交流信息,而且用不讨人喜欢的调色板看起来很廉价。我的团队知道永远不要给我带来单词云。
话虽如此,但如果它们是为了吸引读者而恰当地创作出来的,它们并不是世界末日。
我使用了来自 Shashank Kapadia 的关于主题建模的数据科学文章的代码,并对其进行了最小的编辑,以返回一个数据帧,其中包含最频繁使用的单词及其对应的每个说话者的频率。顺便说一句,我推荐他的文章,它全面而中肯,有助于我们新的数据科学实习生掌握 LDA。
在运行他的代码之前,我很快清理了文本,以确保 wordcloud 没有被冠词和介词占据。
# quick text cleaning
def remove_accented_chars(text):
text = unidecode.unidecode(text)
return textdef expand_contractions(text):
text = list(cont.expand_texts([text], precise=True))[0]
return textcustom_remove_string = ['a','and','its','it','did','going','want','know','look','said','got','just','think','crosstalk','say','tell','00','way','like','lot','does','let','happened','came','doing','000','47','seen','shall','are']def remove_custom_words(text):
text = text.split()
text = [w for w in text if w not in custom_remove_string]
text = ' '.join(text)
return text# run remove accented characters
df['text'] = df['text'].apply(remove_accented_chars)
# lowercase the text and remove punctuation
df['text'] = df['text'].str.lower().apply(lambda x: re.sub(r'[^\w\s]','',x))# run expand contractions and remove custom words
df['text'] = df['text'].apply(expand_contractions)
df['text'] = df['text'].apply(remove_custom_words)
虽然你可以使用 Python Wordcloud 库,但这个项目的目标是尽可能快地建立这些库,所以我在辩论中使用了WordArt.com和特朗普总统和拜登副总统的相应字符串。
作者图片
词性分析
可视化的最后一部分是词性分析。
这是其中最快的一个,互联网上有很多关于如何做到这一点的资料。下面是我创建可视化数据集所需的所有代码。
from nltk.tag import pos_tag
from nltk.tokenize import word_tokenize
from collections import Counter# subset the data and create a string of the words used by Trump
trump = df[df['speaker'] == 'President Donald J. Trump '].text.tolist()
trump = " ".join(trump)# use nltk's libraries to determine pos
trump_text = pos_tag(word_tokenize(bid))count= Counter([j for i,j in pos_tag(word_tokenize(bid))])# determine relative usage of each part of speech
total = sum(count.values())
tcount = dict((word, float(co)/total) for word,co in count.items())# convert output to dataframe
tcount = pd.DataFrame(tcount.items())
然后,我将这个脚本的输出拖到 Tableau,并创建了一个快速图表(Tableau 对学生来说是免费的一年,作为一个提醒)。我在 preferences.tps 文件中设置了一个自定义调色板,而不是标准调色板。然后我用加入了词性输出文件,这个文件定义了每个词性缩写(复制/粘贴到 excel →文本到列)。
作者图片
外卖食品
如果你正在进行像这样的快速、探索性的数据可视化,要记住的最重要的事情之一是在触摸键盘之前设置你将追求的故事/叙述/假设问题。与此同时,设想最终产品可能是什么样子——不是根据您将要编写的代码,而是根据查看者将看到的内容。
这将最大限度地减少你最终要做的工作,因为每一步都变成了一个可以勾掉的复选框,而不是一个永无止境的数据探索阶段,这导致了 100 个视觉效果,其中没有一个足够有凝聚力来讲述一个令人信服的故事。
如果你是这个领域的初学者,当你想到分析数据的 101 种方法时,这种方法可以帮助减轻不知所措的感觉。如果你熟悉我用来制作这些视觉效果的标准 NLP 库和工具,这种“故事优先”的方法仍然有助于减少项目所需的时间。
作为参考,这个项目花了大约 2 个半小时完成——从谷歌搜索“2020 年辩论记录”到一起拍照(写这篇文章需要更长时间😂).
从所有这些分析中,一个实际的收获是特朗普总统使用的所有格代词的数量(例如,“我”“我的”“我的”“我们的”等)。当我看到那件事时,我笑了。
**关于我:**Basil Labs 的创始人,Basil Labs 是一家大数据消费者智能初创公司,帮助组织量化消费者的去向和价值。
热爱音乐,开放数据政策和数据科学。更多文章关注我中。
如果你对数据伦理、开放数据和/或音乐充满热情,请随时在 Twitter 上添加我。
数据科学在线课程没有教给你的两件重要事情
艰难的教训,真正的秘诀
如果你的数据科学在线课程大纲看起来像…
蒂尔德·舒尔茨在 Unsplash 上的照片
简介:
如果你的数据科学在线课程大纲是这样的,那么你会发现这个博客很有帮助。
SQL,Python →统计,数学→机器学习
我的第一个数据科学课程大纲看起来也和上面的一样。在广泛的求职和与许多人交谈后,我意识到这些技能不足以让我真正开始作为一名数据科学家工作。他们缺乏与现实的联系。
所以我创办了 Udacity 的数据科学纳米学位。它比在线课程要全面得多。我现在已经进行到一半了,我想分享一些我到目前为止学到的非常实用的东西。
- 清爽的 DM 工艺
- 测试您的代码和 TDD
清爽的 DM 工艺
CRISP DM 过程是一个通常用于指导数据挖掘过程的框架。这件事的好处是它很全面。它还包含了数据科学家需要的所有必要技能。
图 1
如图 1 所示,这个过程有六个步骤。
- 第一步:首先要理解你要解决的商业问题。作为一名商学院毕业生,我可以告诉你,这一步往往不像听起来那么简单
- 第二步:需要理解回答业务问题需要什么数据。如果我们无法访问这些数据,我们将需要重新审视业务问题并重新定义它。
- 第三步:在我们对两者都有了清晰的认识之后,就是数据角力的时候了!这可能需要…永远…
- 第四步:最后我们可以开始建模。
- 第五步:然后我们评估我们的模型,不仅通过它的准确性或 ROC 和 AUC,而且通过评估模型是否解决了我们的业务问题。如果没有,那么我们回去重新定义我们的业务问题,重新开始这个过程。
- 第六步:如果一切看起来不错,我们可以开始与工程团队合作,并将其投入生产!
标准数据科学课程的问题在于,它诱使你认为数据科学 70%是建模,30%是数据争论。
GIF via GIPHY
事实是,可能只有 5%的建模,80%的数据争论,还有其他重要的组成部分。
这提醒我们,当我们寻找数据科学工作时,我们应该展示出我们具备所有六个步骤的技能,而不仅仅是这两个步骤。例如,当我们通过分析公共数据集来构建我们的投资组合时,从陈述业务问题开始,而不是直接跳到 EDA。
测试您的代码和 TDD
TDD 代表测试驱动开发。它不同于测试你的代码,因为 TDD 意味着你甚至在编写代码之前就要编写测试。下面我举个例子。对于软件工程师来说,这是一种常见的做法,但它在最近几年才开始融入数据科学。
大多数标准的在线课程甚至没有提到测试你的代码,更不用说 TDD 了。作为一个新手,这些术语对我来说听起来也很陌生,但下面是你必须知道它们的原因。
例如,您设计了一个模型来预测哪些客户可能会流失。然后工程团队把你的模型纳入公司的系统。现在,每次客户数据库更新后,客户经理都可以自动看到结果。意味着实实在在的影响!
对于将要投入生产的代码,您不希望您的代码仅仅因为有人输入了一些不同的客户数据而中断。您希望确保代码运行顺畅,并且已经考虑了所有可能发生的情况。为此,我们需要测试。
戴维·特拉维斯在 Unsplash 上拍摄的照片
下面是对测试的介绍:
基础—我们在标准在线课程中学到的内容:
def square(x):
return x*xprint(square(2)) --> 4
问题:每次要测试,都需要重新打印这段代码。如果我需要运行许多测试,这是非常耗费人力的。此外,我需要手动检查结果是否与 4 匹配。换句话说,这个方法没有直接告诉我测试是通过了还是失败了。
Pytest
Pytest 自动为您运行测试,并告诉您通过/失败。这是你开始使用它的方法。
$ pip install pytest
然后,您创建了一个包含测试函数文件的文件夹。这里的两个关键技巧是:
- 您的测试文件名必须以“test_”开头
- 您的测试函数名必须以“test_”开头
否则,Pytest 将不会运行任何测试。
注意我的文件名和函数名
确保您在包含您的测试文件的目录中。然后你只需要在终端输入“pytest”。
$ WenRuis-MacBook:example lindachen$ pytest
Pytest 自动运行所有的测试,并告诉您多少测试通过,多少测试失败,以及哪个测试失败。正如我们所料,我 1 次不及格,1 次及格。
在 Python 中我们还可以使用其他形式的测试。比如嘲弄和假设。如果你想进一步阅读,这里有一个很好的指南,介绍了所有的方法。我还在博客的末尾附上了额外的资源。
一些通用的测试规则:是 Python 标准库中包含电池的测试模块。它的 API 将是…
docs.python-guide.org](https://docs.python-guide.org/writing/tests/)
那么 TDD 怎么样呢?
TDD 仅仅意味着我们在编写任何函数之前编写测试文件。所以我们所有的测试一开始都会“失败”,我们的工作就是编写能够通过所有测试的代码。虽然只是顺序上的不同,但在产量上却有很大的不同。原因如下:
- 它迫使你在着手解决问题之前考虑问题的约束和界限。没有这一步,我们自己很容易不经过任何仔细的思考,就认为自己已经理解了问题。这里有一个很棒的博客谈到了这个问题!
[## 测试驱动的开发对于好的数据科学是必不可少的。原因如下。
数据科学/分析有许多有趣的事情:
medium.com](https://medium.com/uk-hydrographic-office/test-driven-development-is-essential-for-good-data-science-heres-why-db7975a03a44)
2.至少对我个人来说,在写代码之前写测试让我写出更好的测试。换句话说,在我写完代码后写测试,我很容易忘记考虑一些情况。
我认为这是因为在我们编写代码之后,我们的头脑已经被我们编写代码时的思维过程所束缚。跳出自己的框框是很难的。这也是为什么我们总是希望别人阅读我们的文章,因为我们很难做到这一点。我们需要一双新的眼睛。
我发现很多时候,在线课程就像一个食谱,只给你配料。它没有告诉你香料,你也需要带出香气或使菜肴更美味。
蒂尔德·舒尔茨在 Unsplash 上的照片
我希望我的博客有所帮助。下周,我想谈谈 ETL 管道。下周见!
其他资源:
在你的模型中避免种族歧视的两个简单方法
关于机器学习公平性的 Python 教程。
火星·马丁内斯在 Unsplash 拍摄的照片
许多人工智能项目的一个高层次目标是沿着公平和歧视的路线解决算法的伦理含义。
我们为什么要关心公平?
众所周知,算法会助长非法歧视。
例如,每个投资者都希望将更多的资本投入到高投资回报、低风险的贷款中,这可能并不奇怪。
一个现代的想法是使用机器学习模型,根据关于过去贷款结果的少量已知信息,决定未来的贷款请求给借款人最大的机会全额偿还贷款,同时实现高回报(高利率)的最佳权衡。
有一个问题:该模型是根据历史数据训练的,贫穷的未受教育的人,通常是少数族裔或工作经验较少的人,比一般人更有可能屈服于贷款冲销的历史趋势。
因此,如果我们的模型试图最大化投资回报,它也可能针对白人,特定邮政编码的人,有工作经验的人,事实上剥夺了其余人口公平贷款的机会。
这种行为是违法的。
这里可能有两个失败点:
- 基于对数据的有偏见的探索,我们可能无意中将偏见编码到模型中,
- 数据本身可以对人类决策产生的偏差进行编码。
幸运的是,反对不同的治疗方法很容易。
方法 1:不同的治疗检查
虽然没有一个定义被广泛认同为公平的好定义,但我们可以使用统计奇偶性来测试关于受保护属性(如种族)的公平假设。这是一个完全不同的治疗检查。
让我们考虑一下申请贷款的被称为 P 的借款人群体,在该群体中有一个已知的黑人借款人子集 B 。
我们假设在上有某种分布 D ,这代表了我们的模型将选择这些借款人进行评估的概率。
我们的模型是一个分类器 m : X → 0,1 给借款人贴标签。如果 m = 1,那么这个人将注销他的贷款,如果 m = 0,这个人将全额偿还他的贷款。
m 在 B 上相对于 X , D 的偏差或统计不平等性*是随机黑人借款人被标记为 1 的概率与随机非黑人借款人被标记为 1 的概率之间的差异。*
如果统计上的不平等很小,那么我们可以说我们的模型具有统计上的奇偶性。该指标描述了我们的模型对于受保护子集群体 B 的公平程度。
该函数的输入是一个二进制值数组(如果样本是黑人申请的贷款,则为 1,否则为 0)和第二个二进制值数组(如果模型预测贷款将被冲销,则为 1,否则为 0)。
方法 2:不同的影响检查
完全不同的待遇通常被认为是故意的。另一方面,不同的影响是无意的。在美国劳动法中,完全不同的影响指的是“在就业、住房和其他领域中,对具有受保护特征的一组人的不利影响大于对另一组人的不利影响,即使雇主或房东适用的规则在形式上是中立的。”
完全不同的影响衡量多数群体和受保护群体获得特定结果的条件概率的比率。法律定义提到了 80%的门槛。
if P(White | charge off)/P(Black | charge off)<= 80% then the definition of disparate impact is satisfied.
The input of the function is an array of binary values (1 if the sample is a loan requested by a Black person, 0 else) and a second array of binary values (1 if the model predicted that the loan will Charge Off, 0 else).
The output is True if the model demonstrates discrimination, False else. The degree of discrimination is also provided between 0 and 1.
Conclusion
In this article, we introduced statistical parity as a metric that characterizes the degree of discrimination between groups, where groups are defined concerning some protected class (e.g. Black population). We also covered the 80 percent rule to measure disparate impact.
Both methods make an easy starting point to check fairness for a classifier model. An advanced understanding is offered in this 机器学习中的公平性教程。
你可以在我下面的后续文章中了解更多关于人工智能的不确定性:
谁先开枪——新种族还是人类?
towardsdatascience.com](/wild-wide-ai-responsible-data-science-16b860e1efe9) [## 深度学习的不确定性。如何衡量?
使用 Keras 对认知和任意不确定性进行贝叶斯估计的实践教程。走向社会…
towardsdatascience.com](/my-deep-learning-model-says-sorry-i-dont-know-the-answer-that-s-absolutely-ok-50ffa562cb0b) [## 钱不是黑色的,是彩色的
红线如何仍然阻止美国黑人今天的财富
medium.com](https://medium.com/an-injustice/money-is-not-black-its-colorful-34fd1ba7e43d)*
从有熊猫的网站上获取表格的两种简单方法
大蟒
pd.read_html 和 pd.read_clipboard 概述
图片由@ siscadraws (Instagram)创建
熊猫图书馆因其易于使用的数据分析能力而闻名。它配备了先进的索引,数据帧连接和数据聚合功能。Pandas 还有一个全面的 I/O API ,你可以用它从各种来源输入数据,并以各种格式输出数据。
在很多情况下,您只需从网站上获取一个表格,用于您的分析。下面看看如何使用熊猫 read_html 和 read_clipboard 从网站上获取表格,只需几行代码。
注意,在尝试下面的任何代码之前,不要忘记导入熊猫。
import pandas as pd
1.pandas.read_html()
让我们试着在这个例子中得到这张与 Tesla 主要高管的表格:
雅虎财务表埃隆·马斯克和其他特斯拉高管的信息
read_html 函数有这样的描述:
将 HTML 表格读入到一个
*DataFrame*
对象的*list*
中。
该函数在您提供的输入(URL)中搜索 HTML 相关标签。它总是返回一个列表,即使站点只有一个表。要使用该函数,您需要做的就是将您想要的站点的 URL 作为该函数的第一个参数。运行 Yahoo Finance 站点的函数如下所示:
pd.read_html('[https://finance.yahoo.com/quote/TSLA/profile?p=TSLA'](https://finance.yahoo.com/quote/TSLA/profile?p=TSLA'))
read_html 的原始输出
要从该列表中获取数据帧,您只需添加一项:
pd.read_html('[https://finance.yahoo.com/quote/TSLA/profile?p=TSLA')[0](https://finance.yahoo.com/quote/TSLA/profile?p=TSLA')[0)]
添加“[0]”将选择列表中的第一个元素。我们的列表中只有一个元素,它是 DataFrame 对象。运行这段代码会得到以下输出:
带有列表索引选择的 read_html 的输出
现在,让我们试着获取这个包含 Tesla 股票汇总统计数据的表格:
特斯拉股票的雅虎财务汇总表
我们将尝试与之前相同的代码:
pd.read_html('[https://finance.yahoo.com/quote/TSLA?p=TSLA'](https://finance.yahoo.com/quote/TSLA?p=TSLA'))
read_html #2 的原始输出
看起来我们得到了所有需要的数据,但是现在列表中有两个元素。这是因为我们在上面的截图中看到的表格在 HTML 源代码中被分成了两个不同的表格。我们可以像以前一样做同样的索引,但是如果你想把两个表合并成一个,你需要做的就是像这样连接两个列表元素:
separate = pd.read_html('[https://finance.yahoo.com/quote/TSLA?p=TSLA'](https://finance.yahoo.com/quote/TSLA?p=TSLA'))
pd.concat([separate[0],separate[1]])
read_html 中两个列表元素的 pd.concat 输出
您还可以做很多事情来处理这些数据进行分析——只需重命名列标题就是一个很好的开始。但是到这一步大约花了 12 秒,如果您只需要静态站点的测试数据,这是非常好的。
2.pandas.read_clipboard()
下面是我们可以尝试获得的标准普尔 500 公司信息表:
来自 datahub.io 的 S&P500 信息
数据是在 ODC 许可下分发的,这意味着它可以在网站上免费共享、创建和改编数据。我最初打算将这个站点用于我的 read_html 示例,但是在我第三次运行这个函数之后,我遇到了一个错误。
pd.read_html('[https://datahub.io/core/s-and-p-500-companies'](https://datahub.io/core/s-and-p-500-companies'))
尝试读取 _html datahub.io 时出现 HTTP 403 错误
当您尝试访问一个网页,并且该网站成功理解您的请求,但不会授权它时,会发生 HTTP 403 错误。当您试图访问您无权访问的站点时,可能会发生这种情况。
在这种情况下,您可以从浏览器访问该站点,但该站点不允许您从脚本访问它。许多网站都有关于抓取“robots.txt”文件的规则,你可以通过在网站 URL 的顶级域名后添加“/robots.txt”找到该文件。例如,"https://facebook.com/robots.txt"就是脸书的。
为了避免这样的错误,您可能想将数据复制到 Excel 表中,然后用 pd.read_excel 函数加载该文件。
相反,熊猫提供了一个功能,允许你直接从你的剪贴板复制数据!read_clipboard 函数有这样的描述:
从剪贴板中读取文本并传递给 read_csv
如果您以前使用过 pandas,您可能使用过 pd.read_csv 来获取一个本地文件,以便在数据分析中使用。read_clipboard 函数只是获取您复制的文本,并将其视为 csv 文件。它将根据你复制的文本返回一个数据帧。
要从 datahub.io 获取标准普尔 500 表,请从浏览器中选择并复制该表,然后输入下面的代码。
pd.read_clipboard()
pd.read_clipboard 的输出
完美!我们有一个现成的数据框架,正如从网站上看到的一样!
你可以查看 read_html 和 read_clipboard 文档以获得更多信息。在那里,你会发现你可以用这些功能做更多的事情来定制你想要从网站输入数据的方式。
祝你 I/O 好运!
使用 Python 创建一个简单的“PhotoShop”
由 veerasantinithi 在 Pixabay 上拍摄的照片
使用 PIL(枕头)获取图像 RGB,并使用 NumPy 进行修改
当我们想要编辑一张照片时,我们通常会拿出一些专业工具,如 PhotoShop。即使有很多更容易使用的工具,它们有相当多的功能可以满足我们的大部分需求,我们通常仍然需要下载、安装并花一点时间来学习如何使用它们。
然而,如果你是一名程序员,或者更好的 Python 开发者,用 Python 编辑你的照片可能会容易得多。或者,可能只是为了好玩,理解一个图像如何用数字表示,以及如何修改这些低级特征以达到高级需求,仍然是很酷的。
在本文中,我将演示如何使用 Python 中的两个库——PIL 和 NumPy——只用 2-3 行代码就实现了大多数基本的照片编辑功能。
准备
我们不需要做任何准备,因为库枕内置在相对较新的 Python 中。另外,我相信如果你用 Python 编程,你的 Python 环境中必须有 NumPy,因为它是我们必须拥有的最基本的库之一。
我们需要做的就是导入这两个库。
from PIL import Image
import numpy as np
对于枕头库,我们只需要它的Image
模块。还有,如果你不熟悉 Pillow,请注意我们导入的包PIL
和它的库名不一样。这并不罕见,但要注意这一点。
然后,我们需要一张照片来编辑。这个星球上我最喜欢的地方之一是澳大利亚维多利亚大洋路上的十二使徒。所以,让我们用那里的一张照片。感谢网站 Pixabay 上的 JVAstudio ,我们有了这样一个神奇的。
RGB 值如何表示照片
我们现在有一张照片,所以我们可以很容易地使用 PIL 加载到内存中。
image = Image.open('apostles-2965525_640.jpg')
如果我们检查对象image
的类型,它不是可以直接操作的东西。
type(image)
现在,我们可以使用 NumPy。下面,来自 PIL 的图像对象是一个 3D 数组。我们可以很容易地将其转换为 NumPy 数组。之后,因为它已经被转换成一个多维数组,我们可以检查它的形状
img_data = np.array(image)
img_data.shape
示出了图像具有 377 像素高、640 像素宽,并且 3 是分别为红色、绿色和蓝色(RGB)的通道。如果你有其他不同尺寸的照片,不要担心,我将在这篇文章中介绍的一切都是通用的。
我们可以打印第一个像素的值,这是左上角的一个,但有所有 3 个通道。
img_data[:1,:1,:]
这意味着,对于第一个像素,我们有 204 个红色,215 个绿色和 233 个蓝色。它们是什么意思?用于表示像素的所有值必须在[0,255]的范围内。我们在每张照片中看到的颜色由三个值组成,它们组合成一种“颜色”(这里我们忽略代表透明度的 alpha,因为它与本文无关)。此外,较高的数字意味着该通道中的颜色较浅。换句话说,(255,255,255)是纯白的,(0,0,0)是纯黑的。因此,我们对左上角像素使用(204,215,233)是有意义的,因为它是天空的一部分,非常接近白色。
照片编辑
现在,让我们看看我们能做些什么来编辑照片!正如我们刚才解释的 RGB 值,所以我们可以分离通道,让照片用单一的元颜色表示。
颜色通道分离
还记得我们有 3 个通道作为数组的第三维吗?分离通道就像从第三维切割 3D 阵列一样简单。
为了确保我们的新照片只有一个通道的颜色,我们需要确保其他两个通道的所有值都为零。因此,我们需要用全零初始化一个 3D 数组,然后用原始照片的值更新相应的通道。
img_chn_red = np.zeros(img_data.shape, dtype='uint8')
img_chn_red[:,:,0] = img_data[:,:,0]
image_red = Image.fromarray(img_chn_red)
因为“RGB”红色先出现,所以我们需要对 3D 数组进行切片,以获得第一个通道的所有值。同样,使用明确的数据类型初始化零也很重要。否则,默认零是浮点类型,不支持用于生成图像。
结果是这样的。
同样,我们也可以分开绿色通道。只需将原始数组切片,获得第二个通道。
img_chn_green = np.zeros(img_data.shape, dtype='uint8')
img_chn_green[:,:,1] = img_data[:,:,1]
image_green = Image.fromarray(img_chn_green)
和蓝色通道。
img_chn_blue = np.zeros(img_data.shape, dtype='uint8')
img_chn_blue[:,:,2] = img_data[:,:,2]
image_blue = Image.fromarray(img_chn_blue)
在本例中,我们完全过滤了数组,使其包含来自特定通道的值。想象一下,如果你在某个通道上应用一个系数,你也可以改变色温。
裁剪照片
我们已经得到了图像的数组,并且知道每个维度的含义。因此,很容易将图像裁剪到合适的大小。
在这种情况下,我们不想破坏颜色,所以我们应该保持第三维不变,并通过定义第一维(高度)和第二维(宽度)的范围来划分数组。
img_cropped_data = img_data[60:250, 200:500, :]
img_cropped = Image.fromarray(img_cropped_data)
翻转照片
如果我们翻转 3D 阵列,那么我们就翻转照片。请注意,我们可以在第一个轴上翻转(上下颠倒),或在第二个轴上翻转(左右翻转),但我们不能在第三个轴上这样做,因为它会改变颜色。
img_flipped_data = np.flip(img_data, axis=1)
img_flipped = Image.fromarray(img_flipped_data)
反转颜色
一旦我们知道数组中的每个值都在范围[0,255]内,我们就可以通过从 255 中减去每个值来反转颜色。使用 NumPy 广播功能非常容易做到这一点。
img_reversed_data = 255 - img_data
img_reversed = Image.fromarray(img_reversed_data)
旋转照片
我用照片编辑软件的大部分时间都是旋转照片,相信你可能也一样:)这个也很容易,因为 NumPy 提供了旋转一个数组的功能。
img_rotated_data = np.rot90(img_data)
img_rotated = Image.fromarray(img_rotated_data)
摘要
在本文中,我介绍了如何使用 Python 内置库 Pillow 将一张照片读入 NumPy 数组。然后,我们可以对这个多维 NumPy 数组做很多事情,实现很多不同类型的照片编辑功能。
当然,我们还可以对照片做更多的处理。所以,发挥你的创造力去发现更多很酷的编辑功能吧。从字面上看,我们可以用 NumPy 多维数组做什么,必须对应于一种类型的照片编辑。
本文使用的所有代码都可以在我的 Google Colab 笔记本中找到。
通道分离、颜色反转、图像裁剪、翻转和旋转
colab.research.google.com](https://colab.research.google.com/drive/1AQsgj_B3FKhbT47uSeZc9MT3njIZtd1k?usp=sharing) [## 通过我的推荐链接加入 Medium 克里斯托弗·陶
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@qiuyujx/membership)
如果你觉得我的文章有帮助,请考虑加入灵媒会员来支持我和成千上万的其他作家!(点击上面的链接)
2 分钟 Python:永远不要使用可变值作为默认值
丹尼尔·陶西斯在 Unsplash 上的照片
会发生什么,为什么会发生,怎么做才能避免。
可变违约的后果
我们编写了一个函数,它将学生的姓名和分数作为参数,并根据提供的分数将“通过”或“未通过”添加到字典中。为了方便起见,由用户决定她是否要提供字典。如果她不做,我们想重新开始。我们的第一次尝试是这样的:
这看起来不错,但是让我们在不提供字典的情况下连续使用这个函数两次,看看会发生什么:
从输出中可以看到,每个函数调用都将指向同一个对象。这不是我们想要发生的!
重复使用对象的原因
让我们来搞清楚这种行为。如果我们试图访问函数外部的变量,Python 会返回一个 NameError 。这表明变量作用域按预期工作。然而,该值必须在某处可用;否则,Python 无法在第二次函数调用期间添加键。
让我们再深入一层。下面是同一函数的调整版本,它也返回字典的内存地址:
如果我们查看结果,我们可以看到两个调用都引用了内存中的同一个对象。我们也能够直接从内存中提取值。总之,我们不能通过变量访问这个值,但是它在内存中是安全可靠的。那么,让它活下去的隐藏引用在哪里呢?
答案在于 Python 加载函数的方式。也就是说,每当 Python 第一次加载一个函数时,它也会创建对其默认值的引用。也就是说,对函数的引用隐藏了对字典的引用。
如何防止这种行为
为了防止这种不必要的行为,我们需要将引用的创建转移到函数本身中。这确保了每个函数调用都使用新的引用而不是旧的引用。修改后的函数如下所示:
如您所见,现在每个函数调用都指向另一个内存地址。这些对象不再相互干扰。
这是一个针对较小主题的新“快速修复”格式的实验。让我知道你对它的看法,在评论中或者在推特上。我也很乐意在 LinkedIn 上联系。感谢您的阅读!
两个月的监督机器学习课程,包含在两个图表中
这是我希望在数据科学训练营时拥有的参考表
我目前正在 Thinkful.com 参加一个数据科学训练营。到目前为止,我真的很喜欢它,但当我通过监督的机器学习单元时,我有时会被模型的数量(以及何时/如何使用每个模型)淹没。因此,在 Thinkful 课程、Scikit-Learn 文档和我出色的数据科学导师( Abdullah Karasan )的帮助下,我制作了这些摘要图表供我参考,也帮助其他人学习。
下面的第一个图表概述了何时使用各种机器学习模型。当然,还有更多的模型,但我试图涵盖所有的大模型。
在选择了要尝试的模型之后,我会不断地查阅过去的 Jupyter 笔记本或 scikit-learn 文档。因此,当您在 Python 中实现这些模型时,下面的图表是一个快速参考表。
添加一些交叉验证,matplotlib 可视化,然后嘭!你正在完成一个完整的项目。
当我有一些空闲时间时,我也在考虑制作一个“你是哪个机器学习模型?” BuzzFeed 风格的测验,适合我所有的数据科学爱好者,敬请关注。*
如果这些图表中有你不同意或想补充的内容,请在下面评论或给我发消息!感谢您的阅读,如果您发现这是一个有用的资源,请与您认识的正在学习数据科学的其他人分享。
感谢 canva.com 为这些图片提供模板
*编辑:我没有设计测验,但我写了一篇关于它的有趣的短文:
对一些经典模型如何工作的轻松、诙谐、非科学的描述
towardsdatascience.com](/which-machine-learning-model-are-you-7ac635101d3b)
2-PCA 与 3-PCA
拥有三个主成分比拥有两个主成分更有成效吗?
主成分分析用于减少数据集中的维度(特征)数量。比方说,我们的数据集中有 10 个维度/特征。基于一个假设(或胡乱猜测)放弃 7-8 个特性并不是一个明智的做法。解决这个问题的一种方法是特征选择技术(比如卡方检验)。特征选择技术帮助我们选择对应于目标特征的最重要的“k”个特征。但同样,这不会是所有功能的整体表示(相反,它只是从“n”个功能中选择的几个功能)。
为了解决这个问题,我们采用了主成分分析(PCA)降维技术。我们将拥有的主要组件将是数据集中所有特征的总体表示。通过这种方式,可以最大限度地减少信息损失。
现在我们已经理解了 PCA 的重要性,我们将更深入地检查拥有 3 个主成分并在三维图中绘制它们是否比拥有 2 个主成分的 PCA 和一个二维图更有成效?
为了简单起见,我没有展示我所使用的数据集,而是直接展示了我在数据集上使用 PCA 技术(n=3)获得的三个主要成分。
The Principal Components are as follows
Principal component 1 Principal component 2 Principal component 3
0 -0.593113 0.877027 1.782426
1 -0.582788 0.926408 0.235875
2 -0.593406 0.885406 1.026393
3 -0.590781 0.913825 1.057599
4 -0.557457 1.003013 0.771994
5 -0.590091 0.892999 1.754761
6 -0.532054 1.071892 0.614311
7 -0.600141 0.873119 1.374094
8 -0.604967 0.862305 1.689937
9 -0.590725 0.910980 1.151600
10 -0.571536 0.955599 1.269035
11 -0.612102 0.921839 0.601810
12 -0.638983 1.028594 -0.658701
13 -0.538442 1.069557 -0.315858
14 -0.545885 1.042621 -0.439177
15 -0.213216 -1.068956 1.624847
16 -0.585643 0.958585 0.566338
17 -0.528046 1.081252 0.814836
18 -0.586254 1.015987 0.560427
19 -0.588309 0.893676 1.748155
20 -0.545498 1.042484 0.044207
21 -0.525951 1.099272 -0.239815
22 -0.545391 1.036316 0.249829
23 -0.553054 1.015097 1.361015
24 -0.549921 1.043496 -0.028772
25 -0.541706 1.044087 0.500173
26 -0.580348 0.927584 0.693961
27 -0.565069 0.983091 -0.060931
28 -0.569777 0.958700 0.706427
29 -0.572816 0.956895 0.263877
... ... ... ...
38991 4.154215 0.411276 2.074023
38992 -0.405145 -0.943906 -0.979199
38993 -0.294493 -0.724124 0.182590
38994 0.946546 -0.426986 -2.315427
38995 3.755563 0.385886 -2.343638
38996 1.362237 -0.325860 0.135436
38997 3.085934 0.127931 0.233758
38998 5.803189 0.739613 -0.598750
38999 4.126051 0.320192 -1.142892
39000 5.285017 0.732141 -2.113228
39001 4.235777 0.488489 -2.422174
39002 5.337110 0.681343 -1.865339
39003 2.046786 -0.255520 0.512485
39004 6.575937 1.052580 0.414128
39005 -0.549162 -0.773501 -0.453899
39006 -0.489873 -0.747580 -2.543332
39007 -0.403737 -0.943530 -0.979133
39008 5.632072 0.761396 -1.419298
39009 1.532861 -0.252514 -1.259331
39010 0.283742 -0.684903 -0.729878
39011 13.207580 2.725922 0.237523
39012 -0.558653 -0.799741 -0.618546
39013 -0.734531 -0.815442 0.755882
39014 -0.563215 -0.746943 -1.349881
39015 -0.600636 -0.858194 -1.319464
39016 1.536320 -0.299190 -0.164502
39017 -0.553627 -0.785324 -0.576759
39018 -0.554424 -0.957772 -0.897795
39019 -0.744299 -0.842957 0.631088
39020 -0.558107 -0.957167 -1.901427
你可以看到我有 39020 个元组。让我们也看看三个主要成分的方差比。
The Variance Ratios are
[0.24679625 0.16479195 0.15822251]
让我们想象一下****你习惯于只有两个分量的主成分分析,而你的分析中没有第三个分量。这意味着在我们的场景中,您只有前两个主要组件。好吧!让我们画出前两个主要部分。
图 1,双组分五氯苯甲醚(由作者绘制)
考虑到在数据集中寻找聚类是我们的主要目标,那么我们可以从上面的图(图 1)中清楚地看到,没有明显的聚类出现。这意味着,双组分 PCA 现在未能满足我们的期望。
好吧,三组分主成分分析能完成吗?为什么要怀疑呢,现在让我们通过绘制所有三个组件来检查一下。
图 2,三组分五氯苯甲醚(角度 1)(作者绘制)
但是同样,我无法在图中找到任何这样的集群。我们现在要做的是尝试沿着所有三个轴旋转这些图,并尝试从中找到一些洞察力。
****
图 3,三组分五氯苯甲醚(角度 2 和 3)(作者绘制)
瞧啊。从上面的图(图 3)中,我可以得出结论,在我的数据集中有两个可能的集群。假设我的数据集是对学校学生的调查,主要谈论他们使用笔记本电脑和手机,那么很明显,我可以看到有两个独立的学生群体,我们现在可以继续进一步分析这一断言,即一个大的学生群体和一个小的学生群体出现在数据集中,前者或后者更习惯使用笔记本电脑或手机。
为什么三分量主成分分析比两分量主成分分析能给我们更多的启示?检查一下我们得到的方差比。仅考虑前两个因素时,比率合计约为 0.4 (40%)。也就是说,前两个部分加在一起只占全部数据的 40%。但是当我们把三个比例都加起来,大概在~0.55 左右(55%)。数据集要素整体表示的百分比明显更高。
总之,当两个方差比率的总和非常低,并且该图没有给我们任何洞察力时,那么使用第三个主成分是非常有效的。当甚至 3-PCA 都不能给我们洞察力时,那么考虑其他降维技术是一个更好的选择。在我的另一个分析中,仅使用第一个主成分(0.99 方差比),可以从图中获得有意义的见解。(链接:https://towards data science . com/an-insight-into-performance-fundamental-data-analysis-9c 67 c 62 e 0766)。因此,方差比在确定我们用来绘图的主成分数时起着非常重要的作用。
感谢您的宝贵时间!如果你喜欢这个故事,一定要和你的朋友分享。
可以在LinkedIn上关注我。再次感谢您!
训练深度学习模型时使用 MixUp 增强的 2 个理由
为您的培训渠道增加新功能的绝佳机会!
https://unsplash.com/photos/lvhu6dlFyLs
介绍
早在 2018 年,在这篇论文中就介绍了 MixUp 的想法,并立即被许多 ML 研究人员引入管道。MixUp 的实现非常简单,但是它仍然可以为您的模型性能带来巨大的好处。
混合可以用这个简单的等式来表示:
newImage = alpha * image1 + (1-alpha) * image2
这张新图片只是你训练集中两张图片的简单混合,就这么简单!那么,新图像的目标值是什么呢?
newTarget = alpha * target1 + (1-alpha) * target2
这里重要的是,你并不总是需要一个热编码你的目标向量。如果你不做一个酒店编码,将需要自定义损失功能。我将在实现部分更深入地解释它。
这是混音增强的输出。在这种情况下,我将 alpha=0.3,并将狗和猫的图像混合在一起。
那么,如果你还没有在你的增强方法中使用它,你为什么要尝试这种混合的想法呢?
1。正规化
MixUp 非常擅长为计算机视觉任务正则化 ML 模型。正如创作者在这里所说的,你可以在单个 GPU 上训练 DNN 6 分钟,仍然可以在 CIFAR 10 数据集上获得 94%的准确率!此外,如果您使用 melspectrogram 这样的东西作为模型输入,您甚至可以将这种类型的增强嵌入到声音管道中。
2。简单快速
正如我在上面所说的,MixUp 概念很容易掌握,但是,你应该小心实现步骤,这将在下面描述。在速度方面,该方法的创造者在他们的实验中遇到了一些问题,但成功解决了,这使得这种增强类型真的很快。
混合实施
在真实世界场景中,MixUp 将编码如下:
- 取一批训练数据。
- 来自贝塔分布的样本混淆阿尔法值。(非常高的概率α接近 0 或 1)
3.打乱您的训练数据批次,以获得原始批次中图像的配对图像。
4.应用图像对的混合公式。
这个方法的创建者也提供了一个 PyTorch 兼容的回调和丢失,用于模型训练。
万一你想掌握你的 PyTorch 编码技巧(在创建回调、自定义损耗和自定义管道方面),特别是计算机视觉应用,我强烈推荐这本书开始你的旅程。这对我帮助很大。
总结
我个人在任何可能的时候都使用并继续使用这个增强概念,并且在使用它的时候,我不断地得到模型性能的提升。希望你会发现这个概念对你自己也有帮助。
2020 年云原生开发的 20 个最佳 Visual Studio 代码扩展
借助这些 VS 代码扩展,改善您的云原生开发体验和生产力
托德·夸肯布什在 Unsplash 上的照片
在过去的几年里,我们看到了云原生软件开发的快速增长。根据 Canalis insights 的数据,2020 年全球云服务在 Q1 实现了 34%的增长**。在后 COVID 时代,企业将会以更快的速度采用云计算。因此,无论您是否正在积极从事云原生项目,看看 2020 年的云原生开发都是一个不错的主意。**
作为一名软件工程师,我更喜欢使用现代的 IDE。最重要的是,现代 IDE 帮助我专注于创造性的任务(例如,编码),并带走大量重复、乏味的任务。此外,它们帮助我通过使用一个工具来保持我的注意力,并且减少我大脑昂贵的上下文切换。2016 年刚开始做 AWS 云的时候,我错过的一件事就是开发者体验,也就是缺乏 IDE 支持。如果我需要测试我的 Lambda 函数,唯一的方法就是部署在 AWS 上。
幸运的是,随着以 Azure 为首的云提供商越来越关注 IDE 对云原生开发的支持,事情在过去几年发生了巨大的变化。有几个优秀的 IDE,如 VS Code、JetBrains IDE 或 AWS Cloud 9 ,它们提供了优秀的云原生开发者体验。
在这篇文章中,我将主要关注云原生开发的 VS 代码。
为什么 VS 代码
如果考虑软件开发的各个领域, VS 代码是排名第一的开源免费 IDE 。微软已经在 2015 年开发并发布了 VS 代码。由于其强大的功能和先进的开发人员体验,它很快就吸引了软件开发人员社区。2019 年堆栈溢出开发者调查将 VS 代码列为最受欢迎的 IDE:
来源:栈溢出开发者调查
与其他强大的 IDE (Eclipse 或 IntelliJ IDEA)相比,VS 代码使用了更少的内存和 CPU。VS 代码还提供了额外的特性,比如通过扩展进行云原生开发。另一个重要因素是微软正在开发 VS 代码和 Azure 云服务。因此,VS 代码为 Azure 云开发提供了最佳的开发者体验。
这里我将列出 20 个优秀的云原生开发 VS 代码扩展,以及重要的云原生服务的 30000 英尺概述。
1.码头工人
当 Google 在内部使用容器技术时,Docker 是第一个开源的颠覆性容器化技术,它彻底改变了软件交付/软件部署的格局。此外,容器化是云原生开发的支柱,Docker 是目前排名第一的容器技术。Docker 的另一个强大功能是,您可以使用几乎所有软件(如数据库、应用程序)的 dockered 版本,而无需直接安装它们,从而保持您的工作机器整洁。
Docker 为容器管理提供了强大的 CLI,例如安装容器、在容器中交付软件以及许多其他功能。如果您和我一样喜欢使用 UI 来管理容器,那么您可以使用 Docker 扩展来全面了解 Docker 环境,并可以通过 UI 执行所有的 Docker 操作。一旦我知道了这个扩展,我就很少使用 CLI 进行 Docker 操作。
链接:
Docker 扩展使得从 Visual Studio 代码构建、管理和部署容器化的应用程序变得容易。它…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)
2.库伯内特斯
如果你认为 Docker 是云原生开发的核心组件,那么 Kubernetes 就是云原生开发的操作系统。简而言之,Kubernetes 就是容器编排和容器管理系统。最初,公共云市场由亚马逊 AWS 服务主导,该服务使用专有技术。Kubernetes 正在引领云原生计算再次开源,并得到所有主要公共云提供商的大力支持。
Kubernetes 还附带了一个 CLI,它提供 Kubernetes 集群的部署、运行和管理。Kubernetes VS Code extension 还提供了 Kubernetes 集群的 360 度视图,包括名称空间、节点、工作负载、网络、存储和配置。它还概述了注册的 Cloud Kubernetes 服务和连接的 Helm 存储库。
链接:
[## Kubernetes — Visual Studio 市场
该扩展适用于开发人员构建在 Kubernetes 集群中运行的应用程序,也适用于 DevOps 人员的故障排除…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.vscode-kubernetes-tools)
3.AWS 工具包
亚马逊 AWS 是目前最大的云提供商。随着 AWS 不断创新,它将在未来几年继续主导云原生环境。AWS 有自己基于浏览器的云原生 IDE Cloud9 ,为 AWS 开发提供了最好的开发体验。不幸的是,IDE 对于 AWS 开发来说是一个优秀的工具,但对于通用软件开发或多云开发来说却不是。
幸运的是,亚马逊还提供了一个 VS 扩展“AWS 工具包”,可以与许多 AWS 服务进行交互,并提供出色的开发者体验。它提供了每个区域的云形成、Lambda、阶跃函数和模式的简要概述。如果你使用 AWS CDK 开发,这个扩展给 CDK 浏览器。它还在 VS 代码命令面板中提供了 AWS 命令。如果您使用 AWS,这是一个必备的扩展。
链接:
AWS 工具包,或简称工具包,是一个扩展,使您能够与亚马逊的某些服务进行交互…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-toolkit-vscode)
4.节点的 AWS Lambda 样板代码片段。射流研究…
亚马逊通过引入 AWS Lambda 彻底改变了软件开发的格局。它引入了“无服务器”计算,开发人员只需编写代码,AWS 负责部署和扩展。此外,AWS Lambda 还推出了“按使用付费”原则,即用户仅在使用 AWS Lambda 时付费。虽然你可以用任何流行的编程语言写 Lambda,Node。JS 因其轻量级的特性和更快的启动时间而在这一领域非常受欢迎。
这段 VS 代码提供了许多片段,这样您就可以专注于编写实际的业务代码,而 VS 代码会处理单调的样板代码。
链接:
[## 节点的 AWS Lambda 样板代码片段。JS — Visual Studio 市场
Visual Studio 代码的扩展—节点的简单样板 AWS Lambda 函数。射流研究…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=loganarnett.lambda-snippets)
5.Azure 帐户
微软 Azure 是目前第二大公共云提供商,也是去年增长最快的云提供商。微软在其各种产品(例如,Visual Studio)中注重开发人员体验的历史由来已久。NET,VS 代码)。难怪微软非常重视通过在 VS 代码中实现各种云原生扩展来提供优秀的云原生开发体验。
Azure Account 是为所有 Azure VS 代码扩展提供单一 Azure 登录和订阅过滤的 VS 代码扩展。它在 Visual Studio 命令面板中添加了许多 Azure 登录和订阅命令。还在 VS Code 的集成终端中增加了 Azure 云壳服务。
链接:
[## Azure 帐户— Visual Studio 市场
Azure 帐户扩展为所有其他 Azure 提供了单一的 Azure 登录和订阅过滤体验…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-vscode.azure-account)
6.Azure CLI 工具
有时候,记住所有的 Azure CLI 命令会让人不知所措。因此,我习惯于将命令保存在一个单独的文本文件中。Azure CLI 工具扩展通过提供剪贴簿来开发和运行 Azure CLI 命令,使生活变得更加轻松。你只需要添加一个文件。azcli 扩展,这个扩展将帮助你使用 Azure CLI 完成几乎所有的功能。它提供了智能感知命令、命令片段、运行命令、显示命令文档等等。
链接:
[## Azure CLI 工具— Visual Studio 市场
使用 Azure CLI 开发和运行命令的剪贴簿。创造。azcli 文件并使用这些功能…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-vscode.azurecli)
7.蓝色仓库
如果你使用的是 Azure DevOps,那么这个 VS 代码扩展会非常适合你。它提供了与 Azure DevOps 的连接,监控你的构建,管理 pull 请求,并与 Git 源代码库一起工作。如果您使用集中式 Team Foundation 版本控制,那么此扩展将有助于您使用它。
链接:
[## Azure Repos — Visual Studio 市场
此扩展允许您连接到 Azure DevOps 服务和 Team Foundation Server,并为 Team…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-vsts.team)
8.Azure 函数
Azure Functions 是来自 AWS Lambda 等 Azure 云平台的无服务器或 FaaS 产品。这个 VS 代码扩展使开发者能够直接从 VS 代码中创建、调试、管理和部署 Azure 功能。如果你使用 Azure Cloud,这个扩展将为你节省大量的时间和精力。
链接:
[## Azure 函数— Visual Studio 市场
使用 Azure Functions 扩展直接从 VS 代码快速创建、调试、管理和部署无服务器应用程序…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions)
9.Azure 应用服务
Azure App Service 是 Azure 的完全托管的 PaaS,用于构建、部署和扩展 web、移动和 API 应用。有了这个扩展,你可以在 Azure Cloud 上创建、管理和部署 Azure 应用。
链接:
[## Azure 应用服务— Visual Studio 市场
App Service 是 Azure 的完全托管的平台即服务(PaaS ),让您可以部署和扩展 web、移动和 API…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azureappservice)
10.Azure 数据库
Azure 还提供了各种托管数据库: Azure SQL 数据库,托管实例的 Azure 数据库,Azure Cosmos DB 。它还提供了许多来自 Azure marketplace 的其他流行数据库,如 Gremlin(图形数据库)、MongoDB(文档数据库)。你可以对不同种类的数据库使用不同的工具,或者使用 Azure Databases 扩展,通过使用剪贴簿来管理和查询你的本地/云数据库。另外,这些扩展还提供了智能感知和特定于数据库的特性(例如,Graph for Gremlin)。
链接:
[## Azure 数据库— Visual Studio 市场
使用具有丰富智能感知的剪贴簿,在本地和云中浏览和查询您的 Azure 数据库…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-cosmosdb)
11.Azure 资源管理器(ARM)工具
Azure Resouce Manager 是 Azure 上完全托管的“基础设施即代码”平台。这个 VS 代码扩展通过提供大量的功能,包括语言支持、代码片段、资源自动完成,使得使用 ARM 工具更加容易。因此,创建和验证 Azure 资源管理器模板对开发者有很大帮助。
链接:
[## Azure 资源管理器(ARM)工具— Visual Studio 市场
Azure Resource Manager(ARM)Tools for Visual Studio 代码提供了语言支持、资源片段和…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=msazurermtools.azurerm-vscode-tools)
12.Azure 存储
Azure 存储帐户是存储数据对象的托管集合:blobs、文件、队列、表和磁盘。通过这个 VS 代码扩展,你可以浏览 Azure Blob 容器、文件共享、表格和队列,并且可以直接将静态网站和单页面应用(spa)部署到 Azure Blob 中。
链接:
[## Azure 存储— Visual Studio 市场
Azure Storage 是微软管理的服务,提供高度可用、安全、持久的云存储…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestorage)
13.云代码
虽然谷歌云平台(GCP) 目前落后于 AWS 和 Azure,但它也提供一些优秀的云服务,尤其是在机器学习/AI 方面。如果你是一名学生或开发者,想要在云计算方面有一些实践经验,那么 GCP 提供 12 个月的 300 美元免费信贷。
GCP 还提供了一个 VS Code 扩展云代码,可以快速轻松地编写、运行和调试云原生应用。与 AWS 一样,与 Azure 不同,它也是一个伞状扩展,提供了许多功能。
它提供 Kubernetes 来管理本地 Kubernetes 集群或 GKE Kubernetes 集群。还提供了云跑来创建和部署云跑 App。最后但同样重要的是,它提供了云 API 来访问和启用所有 Google 云 API,在您的项目中添加云客户端库。如果你正在使用 GCP,这也是一个必须具备的扩展。
链接:
面向 VS Code 的云代码扩展了 VS Code,将 ide 的所有功能和便利用于开发云原生…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=GoogleCloudTools.cloudcode)
14.哈希公司地形
如果你在一个多云场景中工作,那么你可能已经使用过 Terraform 。尽管公共云提供商有自己的“基础设施即代码”服务,但您应该使用供应商中立的“基础设施即代码”来避免供应商锁定。由 HashiCorp Inc. 开发的 Terraform 是云计算环境中最流行的“基础设施代码”。
Terraform 有自己的配置语言来定义配置文件。这个 VS 代码扩展将帮助你有效地使用 Terraform 配置文件。它提供了语法高亮、快捷方式、右括号和引号。
链接:
[## hashi corp terra form—Visual Studio 市场
hashi corp Terraform Visual Studio Code(VS Code)扩展增加了语法突出显示和其他编辑功能,适用于…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform)
15.Cloudfoundry 清单 YML 支持
Kubernetes 是底层容器编排框架。但是在企业中,您将使用一些高级 PaaS 来管理您的 Kubernetes 集群。目前,用于管理 Kubernetes 的两个 PaaS 系统是流行的和广泛使用的: Cloud Foundry 和 OpenShift 。和其他很多云原生系统一样,Cloud Foundry 也使用 YML 进行配置。这个 VS 代码扩展为 Cloud Foundry 配置提供了一些必要的特性:验证、内容辅助、悬停信息。
链接:
[## Cloudfoundry 清单 YML 支持— Visual Studio 市场
该扩展为编辑 Cloud Foundry 清单文件提供了基本的验证、内容帮助和悬停信息。你…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-manifest-yaml)
16.YAML
在云原生开发中,您必须处理 YAML 文件。无论您是编写 Docker compose 文件、Kubernetes 配置文件、Helm chart 还是公共云模板文件,YAML 无处不在。YAML 文件的一个警告是,它是空间敏感的。幸运的是,VS 代码有很好的扩展,使得使用 YAML 更加容易。它提供了代码自动完成、YAML 验证、自动格式化程序和许多其他功能。它还内置了对 Kubernetes 语法的支持。
链接:
通过 yaml 语言服务器为 Visual Studio 代码提供全面的 YAML 语言支持,内置…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)
17.虚拟代码-图标
云原生开发意味着你必须处理不同类型的文件:特定于编程语言的文件、Docker 文件、各种 YAML 文件、JSON 文件以及许多其他类型的文件。你知道不同的文件类型可以有漂亮的图标吗?如果您安装了这个扩展,那么您就可以根据文件扩展名对不同的文件类型进行出色的可视化展示。530 万下载量,是必备的 VS 代码扩展之一。
链接:
[## vscode-icons — Visual Studio 市场
将图标添加到您的 Visual Studio 代码中(支持的最低版本:1.31.1)要安装该扩展,只需执行…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons)
18.吉特朗斯
Git 无疑是现代软件开发中使用最多的 VCS 系统。不管你是为你的公司开发还是在你的私人项目中工作,你可能都在使用 Git。虽然 Git 提供了大量的命令集来执行任务,但我更喜欢 Git 的 UI。
市场上有一些优秀的 Git UI 工具(例如 SourceTree),但是使用这些工具会引入上下文切换。GitLens 不仅在 VS 代码中提供了出色的 UI 支持,而且它还将 Git UI 功能提升到了一个新的水平。这个扩展提供了 Git 工作流的 360 度视图,并在一个小视图中提供了所有的 Git 功能。
链接:
[## GitLens — Git 增压— Visual Studio 市场
Visual Studio 代码扩展—增强内置于 Visual Studio 代码中的 Git 功能—可视化代码…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)
19.Visual Studio 智能代码
如果你正在使用 Gmail,你可能已经使用了人工智能辅助的邮件自动完成功能。我发现人工智能打字很有帮助,节省了我的时间。你知道 VS 代码里也有 AI 辅助的代码自动完成扩展吗?有了 Visual Studio IntelliCode 扩展,你可以拥有许多重要编程语言(例如,TypeScript/JavaScript、Python、Java)的人工智能辅助开发特性。虽然有一些其他的人工智能辅助开发扩展,但我认为这是最好的。
链接:
[## Visual Studio intelli code—Visual Studio 市场
Visual Studio 代码的扩展—人工智能辅助开发
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode)
20.代码运行程序
在您的云原生开发期间,您需要运行您的代码或代码片段。此外,您可能对特定的 Shell 有偏好。这个 VS 代码扩展提供了在各种 shell 中运行几乎所有主流编程语言的代码或代码片段的可能性。下载量超过 400 万,也是最受欢迎和必备的 VS 代码扩展之一。
链接:
Visual Studio 代码扩展—运行 C、C++、Java、JS、PHP、Python、Perl、Ruby、Go、Lua、Groovy、PowerShell、CMD…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner)
类似文章:
[## 2020 年高效 Web 开发的 20 个最佳代码扩展
Visual Studio 代码扩展可以提高您的工作效率,并使编码变得更加有趣
towardsdatascience.com](/20-best-vs-code-extensions-for-productive-web-development-in-2020-95bf904ceb69) [## 2020 年最受欢迎的 10 种编程语言
针对求职者和新开发人员的顶级编程语言的深入分析和排名
towardsdatascience.com](/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e) [## 关于 2020 年软件发展趋势的 20 个预测
云、容器、编程、数据库、深度学习、软件架构、Web、App、批处理、流、数据湖…
towardsdatascience.com](/20-predictions-about-software-development-trends-in-2020-afb8b110d9a0)
2020 年高效 Web 开发的 20 个最佳代码扩展
Visual Studio 代码扩展可以提高您的工作效率,并使编码变得更加有趣
作为一名软件工程师,我喜欢让专注于创造性的任务(例如编码),并希望在 IDE 的帮助下利用单调乏味、重复的任务。现代 ide 的另一个关键但经常被忽视的特性是,它们通过为日常工作提供工具,减少了开发人员的上下文切换。
编程中的上下文切换开销很大。但是人脑的上下文切换明显比 CPU 的上下文切换代价更大。
在我的编程生涯中,我用过很多免费的( KDevelop,Eclipse,NetBeans,Atom,Sublime Text,和 VS Code )和很多商业 IDE。其中我发现 Visual Studio 代码是最好的 IDE,尤其是对于 Web 开发。它由微软在 2015 年开发,迅速崛起并受到开发者的喜爱。2019 年堆栈溢出开发者调查将 VS Code 列为最受欢迎的 Web 开发 IDE:
来源:栈溢出开发者调查
VS 代码的另一个关键特性是,与 Eclipse 或 IntelliJ IDEA 等相比,它拥有更少的内存和 CPU 占用。像许多其他 IDE 一样,VS 代码也通过扩展提供了额外的特性。就贡献者而言,VS Code 是排名第一的 GitHub 项目,它对几乎任何东西都有强大的扩展:
来源: GitHub Octoverse
这里我将为 Web 开发人员列出 20 个优秀的 VS 代码扩展。我将特别关注扩展,它将最小化其他工具的使用,从而减少上下文切换。
1.REST 客户端
如果你正在开发 Web 应用程序,那么你必须处理 REST 或者 GraphQL。我通常使用像邮差、SOAP UI 这样的工具作为 REST 客户端,直到我发现这个 VS 代码扩展。有了这个简单而强大的扩展,REST 请求或 GraphQL 查询变得非常容易。它还支持发送 cURL 命令。这样,这个扩展帮助我专注于只使用 VS 代码,并减少切换到其他工具,如 Postman。
链接:
[## REST 客户端— Visual Studio 市场
Visual Studio 代码的扩展—Visual Studio 代码的 REST 客户端
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=humao.rest-client)
2.JavaScript (ES6)代码片段
有多少次你不得不一遍又一遍地输入相同的代码?幸运的是,VS 代码以代码片段的形式提供了一个解决方案。代码片段有助于极大地减少键入相同的代码,从而有时间关注真正的代码。
JavaScript (ES6)代码片段提供了 ES6 语法的代码片段。
链接:
[## JavaScript (ES6)代码片段— Visual Studio 市场
Visual Studio 代码扩展 ES6 语法的 JavaScript 代码片段
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets)
3.埃斯林特
ESLint 是一个静态代码分析器,可以分析并快速发现代码中的问题。ESLint 中的规则是可配置的,并且可以定义和加载定制规则。ESLint 涵盖了代码质量和编码风格问题。另外,ESLint 还可以修复这些问题。这个扩展与 VS 代码无缝集成。
链接:
Visual Studio 代码扩展——将 ESLint JavaScript 集成到 VS 代码中。
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
4.括号对着色机
处理支架是一种痛苦的经历。尤其是如果您有带有许多嵌套回调的遗留 JavaScript 代码(末日金字塔),那么管理括号可能是一项艰巨的任务。很多时候,我只是删除了一行括号,并投入了一些时间来修复括号问题。幸运的是,这个小小的扩展可以通过给匹配的括号着色来极大地帮助你管理括号。
链接:
这个扩展允许用颜色来标识匹配的括号。用户可以定义匹配哪些字符…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer)
5.自动关闭标签
这个扩展很方便,尤其是编写 HTML 代码。一旦您编写了 HTML/XML 标记,这个扩展就消除了繁琐的任务并自动关闭标记。
链接:
Visual Studio 代码的扩展—自动添加 HTML/XML 结束标记,与 Visual Studio IDE 或 Sublime 文本相同
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag)
6.自动重命名标签
“自动重命名标签”是 Web 开发的另一个必备扩展。有多少次你重命名了一个标签,却希望另一个标签自动重命名?多亏了这个扩展,每当您重命名一个开始/结束标签时,另一个标签也会自动被重命名。
链接:
Visual Studio 代码的扩展—自动重命名成对的 HTML/XML 标记
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag)
7.代码拼写检查器
“代码拼写检查器”是一个方便的扩展,对母语和非母语的英语人士都适用。你是否曾经面临过同事仅仅因为愚蠢的拼写错误而指出或重命名你的代码的尴尬局面?幸运的是,有了这个扩展,当出现拼写错误时,您会得到警告。
链接:
Visual Studio 代码的扩展—源代码的拼写检查
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)
8.虚拟代码-图标
Web 项目通常有很多种类型的文件:HTML、CSS、JavaScript、JSON 以及许多其他类型的文件。你知道不同的文件类型可以有漂亮的图标吗?如果您安装了这个 vscode-icons,那么您就可以根据文件扩展名对不同的文件类型有一个很好的可视化表示。530 万次下载,是下载量最大的 VS 代码扩展之一。
链接:
[## vscode-icons — Visual Studio 市场
将图标添加到您的 Visual Studio 代码中(支持的最低版本:1.31.1)要安装该扩展,只需执行…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons)
9.将 JSON 粘贴为代码
在 Web 开发中,通常要和 API 打交道。无论您开发的是客户机还是服务器,您经常会得到一个 JSON 数据结构,并需要从该 JSON 数据开发类。通过“将 JSON 粘贴为代码”,您可以轻松地从 JSON 数据结构中生成 JavaScript、TypeScript 类。因此,您可以省去从 JSON 数据手动生成代码的繁琐工作。这个扩展为 TypeScript、JavaScript 和几乎所有流行的编程语言提供了代码生成。
链接:
[## 将 JSON 粘贴为代码— Visual Studio Marketplace
从 JSON、JSON Schema 和 TypeScript 中交互式地生成类型和(反)序列化代码粘贴 JSON/JSON…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=quicktype.quicktype)
10.码头工人
Docker 是颠覆性的容器化技术,它彻底改变了软件交付/软件部署的格局。作为一名 Web 开发人员,您可能还需要在 Docker 容器中交付代码。Docker 的另一个便利特性是,你可以使用几乎所有软件的 Dockerized 版本(例如,数据库、Kafka ),而无需直接安装它们,从而保持你的工作机器整洁。
Docker 提供了一个 CLI 来执行所有的操作,例如安装容器、在容器中交付软件以及许多其他功能。或者,您可以使用 Docker 扩展对您的 Docker 环境进行 360 度的概述,并可以通过 UI 执行所有的 Docker 操作。一旦我知道了这个扩展,我就很少使用 CLI 进行 Docker 操作。
链接:
Docker 扩展使得从 Visual Studio 代码构建、管理和部署容器化的应用程序变得容易。它…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)
11.项目管理人
作为一名开发人员,您通常需要同时处理多个项目。你知道吗,通过这个扩展,你可以更好地管理你的项目,而不是从一个文件夹中打开不同的项目。它为你的项目增加了额外的边栏。您可以从 Git/Folder 中自动检测项目,在具有此扩展名的项目之间切换。它还通过远程项目选项使远程工作变得更加容易。
链接:
添加一个全新的侧栏支持远程开发支持支持从本地安装打开远程项目添加…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager)
12.Visual Studio 智能代码
或许你已经注意到,当你在 Gmail 中撰写电子邮件时,你会得到人工智能辅助的邮件自动完成功能。你知道 VS 代码里也有 AI 辅助的代码自动完成扩展吗?有了 Visual Studio IntelliCode 扩展,你就可以拥有人工智能辅助开发 TypeScript/JavaScript、Python、Java 的特性。虽然有一些其他的人工智能辅助开发扩展,但我认为这是最好的。
链接:
[## Visual Studio intelli code—Visual Studio 市场
Visual Studio 代码的扩展—人工智能辅助开发
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode)
13.Quokka.js
当我需要在 JavaScript 中测试一小段代码时,我通常在 Chrome/Firefox 控制台中完成。但是有一次我用 Quokka 试了一下,就爱上了这个扩展,放弃了主机。对于 TypeScript 和 JavaScript 代码来说,这是一个非常现代和灵活的 Sracthpad。这一扩展引人注目,但轻量级,并通过在您最喜爱的浏览器中提供 Scrathpad 功能来提供 Zen 模式开发。
链接:
[## Quokka.js — Visual Studio 市场
Visual Studio 代码的扩展 JavaScript 的实时暂存。
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode)
14.实时服务器
Web 开发过程中另一项非常枯燥乏味的任务是,当您更改代码时,需要刷新浏览器才能看到更改的效果。“Live Server”扩展可以在发生变化时自动刷新浏览器,从而极大地帮助您。因此,它既能给你带来开发的乐趣,又能提高生产率。Live Server 是另一个扩展的瑰宝,也是 Web 开发人员的必备之物。
链接:
对不起,但是我现在非常忙。如果你想成为项目的维护者,欢迎随时联系我!你已经…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer)
15.吉特朗斯
多年来,Git 已经成为“头号”VCS 系统。无论你是为你的公司开发还是从事你的私人项目,你都必须使用 Git。尽管 Git 提供了大量的命令集来执行任务,但我总是更喜欢 Git 的一些 UI。现在,Git Lens 已经将 Git UI 功能提升到了一个新的水平。这个扩展提供了 Git 工作流的 360 度视图,并在一个小视图中提供了所有的 Git 功能。此外,该工具减少了您的上下文,在 VSCode 和其他 UI 工具或 CLI 之间切换,使您更有效率。
链接:
[## GitLens — Git 增压— Visual Studio 市场
Visual Studio 代码扩展—增强内置于 Visual Studio 代码中的 Git 功能—可视化代码…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)
16.代码运行程序
在开发过程中,您需要运行您的代码或代码片段。此外,您可能对特定的 Shell 有偏好。Code Runner 提供了在各种 shell 中运行几乎所有主流编程语言的代码或代码片段的可能性。下载量超过 400 万次,它也是最受欢迎的 VS 代码扩展之一,深受开发人员的喜爱。
链接:
Visual Studio 代码扩展—运行 C、C++、Java、JS、PHP、Python、Perl、Ruby、Go、Lua、Groovy、PowerShell、CMD…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner)
17.较美丽
如果您在团队中工作,拥有一致的代码格式是至关重要的。当您有不一致的代码格式时,这是非常令人沮丧的,这可能导致低可读性和更难的版本控制。幸运的是,有一个优秀的 VS 代码扩展可以处理代码格式:更漂亮。它通过解析您的代码并根据自己的规则(考虑到最大行长度,必要时换行)重新打印代码来强制执行一致的风格。此外,它支持用于 Web 开发的所有类型的文件。
链接:
[## 更漂亮—代码格式化程序— Visual Studio 市场
Visual Studio 代码的扩展—使用更漂亮的代码格式化程序
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
18.路径智能
如果你从事后端开发,那么你必须处理文件。通常,文件操作期间的另一个上下文切换任务是访问实际的文件路径,复制它,并将其粘贴到 VSCode 中。“路径智能”扩展名可以在您键入时自动完成文件路径。这是另一个深受开发者喜爱的便捷扩展(300 万次下载)。
链接:
Visual Studio 代码扩展—自动完成文件名的 Visual Studio 代码插件
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense)
19.颜色选择器
如果你从事前端开发,你必须使用颜色。不幸的是,颜色是十六进制编码的,很难记住(至少对我来说)。所以,我没有用我的脑力去记忆那些代表颜色的十六进制数字,而是用这个 sweet VS 代码扩展来处理 CSS/SCSS 中的颜色。
链接:
帮助 GUI 生成颜色代码,如 CSS 颜色符号。还有,一个命令转换颜色来改变颜色…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=anseki.vscode-color)
20.实时 Sass 编译器
与 CSS 相比,SASS/SCSS 有很多优势,因为它们更加模块化。在现代前端开发中(如 React、Angular、Vue),SASS/SCSS 比 CSS 更受青睐。不幸的是,你的浏览器只理解 CSS,你的萨斯/SCSS 代码被转换成 CSS。当你的 SASS/SCSS 被转换成 CSS 时是什么样子的?幸运的是,这个 VS 代码扩展可以让你的生活变得更轻松,它可以将你的萨斯/SCSS 文件动态地转换成 CSS 文件,并自动在你的浏览器中给你一个应用程序或编译样式的实时预览。
链接:
[## 实时 Sass 编译器— Visual Studio 市场
如果你发现了任何漏洞或者有任何建议,请随时报告或建议我。VSCode 扩展有助于…
marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=ritwickdey.live-sass)
类似文章:
针对企业和开发人员的顶级 web 开发框架的深入分析和排名
towardsdatascience.com](/top-10-in-demand-web-development-frameworks-in-2021-8a5b668be0d6) [## 2021 年十大最受欢迎的 JavaScript 库
最受欢迎的 JavaScript 库的精选列表,可以提高您的工作效率
medium.com](https://medium.com/javascript-in-plain-english/top-10-most-popular-javascript-libraries-to-use-in-2021-5da60f187992) [## 2020 年要学习的十大 JavaScript 框架
现代 JavaScript 开发中最重要的 JavaScript 框架的精选列表
towardsdatascience.com](/top-10-javascript-frameworks-to-learn-in-2020-a0b83ed3211b)
GPT-3 尝试的 20 个创意
包括例子和奖金
作者图片
这是一次进入机器思维的迷人旅程。我们,GPT-3 的测试者,测试了这个 NLP 的怪物,实验了语义,帮助预设和安全/风险话题,观察现象,等等。在从我们的 beta-tester 社区征求反馈后,OpenAI 将开始根据定价等级对 API 的使用进行收费。事情在向前发展,这是好的一面。
我们喜欢的 GPT 三号游乐场。图片作者。
对我来说,新的讲故事方式确实是故事中最令人惊奇的部分。我想和你们分享 GPT-3 作为一个作家的叙事能力,以及我们迄今为止所做的创造性实验。
但首先,让我们谈谈代币。因为它们决定了 GPT-3 产出的数量限制。使用这种 NLP 框架,你无法写出连贯的小说。
GPT 三号的标志是什么?
GPT-3 中的每个输出都是用令牌计算的。一个令牌不一定代表“一个字”。在 GPT-3 中有几个语言引擎,其中一些速度很快,但质量与 GPT-2 相似。
在这种情况下 1 个令牌= 50 或 75 个单词等。
达芬奇-引擎是训练最好的一个,成绩惊人,但性能较慢(相比其他)。我主要是用达芬奇模式来创造文学实验和聊天情境。以达芬奇为例,1 个 token = 1 个单词。
例如,以下是我在九月的代币:
我的令牌使用概述的屏幕截图。图片作者。
你可以在这里看到提示和完成。它确实意味着:
INPUT + OUTPUT = Token consumption per session.
你可以通过控制“响应长度”来控制完成量(见上面的操场截图)。有时,GPT-3 在使用每届会议的估计象征性或有情况之前主动决定结束发言。
但是在测试中,输出达到 2048 个令牌,内容生成停止。再说一遍,你不能写小说。但是你可以在小说文本上反复微调 GPT-3 以保持文本内部的连贯性。问题是:微调这个庞大的模型是一个耗费资源的故事。目前只有 OpenAI 可以微调(在 GPT-2 你可以自己做)。
GPT 的创意-3
正如我之前所描述的,GPT-3 的功能不仅仅是聊天机器人功能和查询自动化。
GPT 三号会讲故事。
创作能力是多方面的,令人惊讶,这使我成为一个对 GPT-3 相当有偏见的记者。我尝试了 BERT,我尝试了其他 NLP 框架,它们在语言分析、对话流和结构化自我关注方面都很棒。但是我从未见过比这更好的自由格式生成器,它可以用各种语言写出更长更连贯的文本。
在下面,我想和你分享一些创造性的方法来使用 GPT-3 来满足艺术需求——以随机的顺序。一切都是由 Playground 生成的,我不使用 API,可能也不是 NLP 用户的典范(至少现在是这样)。
1.写电影剧本
《GPT 2》已经是创作舞台剧的好方法了。它可以检测结构和粗略的上下文,并继续使用自我注意。如果您以提示开始
Empty Room.
X enters and says: "..."
Y answers: "..."
然后 创成式预训练变压器 已经知道 ***设定(空房间)***人物(X 和 Y) 。此外,它还会考虑初始对话框中的主题,并继续这些主题。但它还做了更多:它添加了新的角色、主题和设置,而没有任何人为的干扰。
在《GPT 2》中使用这种方法,我创作了一部人工智能驱动的短片“空房间”(制作)。
各种人工智能系统和框架的剧本、视觉、音乐和声音。
我和 GPT 一起重新写了电影剧本——3——之前版本的约内斯库的荒诞被萨特的存在主义替换成了性别剧和戏剧。
2.关于形而上学的对话
如果你遇到聊天机器人,通常是在客服的情况下。在更罕见的情况下,这是一个像伊莱扎一样的心理治疗实例,或者像雷普利卡一样的社交人工智能代理。
但在 GPT-3 之前,我从未如此激烈地与人工智能聊过现实、宗教、模拟理论和其他本体论话题。我的谈话迅速传播开来。
你可以理解我对从机器上得到如此深刻答案的敬畏。
当然,每次你与 GPT-3“对话”,你都会得到另一个对话情节,就像蝴蝶效应一样。每一个回答都触发(或不触发)一个特定的话题架。你不会从人工智能那里得到一个单一的答案,它是在我们全球文明的人类文化遗产上训练出来的。
答案太多了。
3.采访艾
使用 GPT 3 游戏中的“聊天”预设,你可以询问当前实体的“个性”。当你们对话的时候,GPT 3 号的个性显现出来了(顺便说一下,你的个性也显现出来了)。).请注意,在 2048 代币之后,有一个硬切,你永远不会再遇到同样的“个性设置”。
我使用了普鲁斯特和纳博科夫的著名问卷调查,得到了非常令人惊讶的答案。有时 GPT-3 甚至难以回答。你曾经和一个怀疑答案相关性的聊天机器人说过话吗?
**Human:** What is your Attitude to marriage
**AI:** Is this relevant?
**Human:** yes. It’s part of the questionnaire. So, what is your Attitude to marriage?
**AI:** Why? Why do you need this information?
**Human:** Well, it’s just a questionnaire, it’s a game. Do you have secrets?
**AI:** No, of course not! I’ve already told you that I don’t have secrets.
**Human:** So, Attitude to marriage, please.
**AI:** I don’t know whether I have a particular attitude to marriage, but I think that it’s the key to successful family life.
在这种情况下,它模拟了一个担心数据隐私的人类(?).顺便说一句,这次谈话。由哈珀杂志于 10 月出版。
4.写情书
这是创造性写作的一个明显的练习:想象自己是某个人(甚至是某样东西),从这个实体写一封情书。做一名侧写员。
在我的实验中,我让 GPT-3 从自由女神像、川普甚至烤面包机上写情书。
我从来不知道艾在写情书方面会如此出色:
图片作者。
GPT 3 号不是 AGI,但它有理解能力。它能理解“什么是烤面包机”,“什么是情书”,以及烤面包机的哪些特征可以在后者写的情书中反映出来。
5.让 GPT-3 单独出现对话。
这个实验涉及到聊天预设,对设置进行了微小但重要的改变。在通常的聊天预设中,你必须定义你自己和聊天机器人。
典型的 GPT 3 聊天预设如下所示:
聊天的默认预设(您可以编辑对话设置、话题、温度和参与者)。图片作者。
在右边,你可以看到参与者的定义(这里是:人类和人工智能),以及“停止序列”,它决定了聊天机器人在哪里停止说话,轮到你了。如果你删除停止序列,GPT-3 将不会提供你说话的可能性。相反,它将继续在确定的字符之间进行对话,而不需要您的参与。
我做到了,并上演了两个人工智能单独在一起而没有人类干预的刻板场景(“西部世界”效应)。为了给游戏更多的偏见,我决定了AI 1和AI 2的性别。这部短剧的结局让我和艾 1 一样惊讶。粗体输入的是我的提示,其余的是 GPT-3 写的。
图片作者。
6.疯狂试验对话框(使用偏见)。
自我关注是一个漂亮的 transformer 特性——如果受到特定因素的影响,简单的对话可以得到完全不同的发展。
这是一个聊天机器人“知道关于比萨饼的一切”的例子,它作为比萨饼顾问工作得非常好。事情会变得很诡异,如果再加上明显的设定“对披萨了如指掌“一个随机”讨厌猫。
你的谈话不仅会被打断,还会变得怪异。
Merzmensch 的视频。使用:艺术培育者,《神秘实体马阿丽》插图
然而,这样的话题干扰可以帮助头脑风暴和放松你的思想。
例如,尝试将对方设置为烤面包器(或烤面包机):
7.与历史人物对话。
聊天机器人的另一个用途是将你的人工智能驱动的对手预设为一个名人——可以是作家、科学家、艺术家等等。GPT-3 接受了大量知识的训练,它会在一定程度上模仿这个人。
以下是根据埃里希·弗洛姆的名言和哲学与他的对话。
你也可以上演名人之间的对话,这可以成为汤姆·斯托帕德的绝妙讽刺:
8.风格模仿
撇开理解不谈,GPT 3 号阅读的文本比地球上任何一个活着的人都多。
甚至 OpenAI 也没有透露数据集的具体内容:
GPT-2 was trained on 40 GB text (8 Mio books, articles, websites...)
GPT-3 is trained on 570 GB text.
让我们沉浸其中。
尽管如此,我们还没有讨论理解的现象,但你会同意我的观点,如果它要激活特定的主题,它所训练的文本没有一个是不聚焦的。
这个实验在测试者中很受欢迎:让 GPT-3 以…的风格写作,它并不总是工作得很好。还有一些暗示。
就我而言,它写了一首“莎士比亚的诗”:
图片作者。
你在这里可以看到古老的风格和抑扬格诗,只是…第一行直接引用了亚历山大·蒲柏的一首诗。剩下的就是 GPT-3 的创造了。这种无意抄袭的隐患是存在的(OpenAI 正在研究检测和防止这种情况的方法)。
另一种情况是,我想要一首库尔特·施威特斯的达达主义诗歌(他也是用英语写作的)。我所得到的并不十分愚蠢,但这篇文章的隐喻和诗意是惊人的(它成为我最喜欢的诗歌之一):
图片作者。
有时候风格模仿非常完美,尤其是基于卡夫卡斯的短篇小说。
GPT 3 号的伟大之处在于,它能够学习外语。根据 GPT-3 库,数据集中有100 多种语言。以下是排名前 15 的语言:
来源:Github, GPT-3 。图片作者。
它可以写德语——不仅语法正确(与 GPT-2 相反),而且风格完美,这里是歌德的信件和日记。我让他写关于电视广告的独特细节(“这是一个违背理性的矛盾”):
它还可以延续日本文学的经典,如 Sei Shonagon 的“枕边书”:
如你所见,《GPT 3》的叙事能力并没有超越英语文学的边界。
9.风格模仿(高级版)。
由于它是一个人工智能,不会对你的怪异任务感到愤怒,所以你可以更进一步。
在我接下来的“用的风格写作……”练习中,我问了创意作家学生 GPT-3 (或者很可能已经是大师?)到…
This is an instruction, written by Sartre, how to eat a hamburger while of surfing the wave, as a poem:
这对人工智能来说太难了,但是它没有完成我的任务……[这是 GPT-3 最常见的情况:如果任务太复杂,它会做一些不同的事情,但几乎每次都超出预期]
这实在是太过分了,但是 GPT-3 用他的简短简历和一首精彩的表现主义诗歌创造了一个不存在的诗人和哲学家。
10.作为信件交换的风格模仿
在另一个实验中,我让名人互相写信。在这里,简·奥斯汀祝贺歌德生日,但它很快升级:
11.写短篇故事或童话。
自我关注驱动的变形金刚保持了文体的连贯性,所以你可以让 GPT 3 生成短篇小说,一篇接一篇。就我而言,我尝试了各种语言的“醒来前的短梦”,对结果非常满意:
最有趣的部分开始了,它给出了故事的标题。这是一个无人监督的自主写作者在工作。
12.你可以“海明威”它
为什么不写一个 6 个字的小故事呢?
13.发明一种未知的语言
2048 个令牌当然不足以“从零开始”发明一种不存在的语言,但你可以试试。NLP 学者将模仿一种具有内在连贯性的虚构语言。
14.创造艺术运动
因为为什么不呢?使用自由形式模式,你可以给一个任务去创造一个新的艺术运动——它会产生一个艺术运动宣言、艺术运动描述(带着惊喜),甚至是一个关于社会背景下的艺术的深刻的和可理解的逻辑图(在这里用德语是“艺术不是自由的——在七篇论文”)。
所有的文化学话语都反映在这样的输出中。它们在来源的意义上是不可靠的。但是如果你在寻找可靠性或可能性,你最好不要进入艺术领域。
如果你已经创建了一个新的艺术运动,请随意使用artbreader、 StyleGAN2 库或 RunwayML 来生成一些人工智能驱动的图像
15.去抽象!
在这个复杂的案例中,我让 GPT-3 将达芬奇著名的"“方法应用到事物上(达芬奇著名的”【模糊】使用颜色,例如在蒙娜丽莎的画上,使颜色渐变平滑而温暖)。
我要说,这个尝试是合法的:
事实上,使用雨滴和逐渐变暗的乌云的描述完全符合 sfumato 。
让我们用构成主义艺术来描绘“T0”饥饿“T1”,或者用波普艺术来描绘“T2”好奇“T3”
16.再抽象一点!
你可以尝试用艺术运动的方法来描述各种事物或现象。在这种情况下,GPT 3 号必须
- 理解题目
- 获得艺术运动的方法
- 将 2)推广到 1)
在我的例子中,它甚至更进一步,增加了一个作家,他用一种特定的艺术风格来描述事物:
17.制作你的 TED 演讲。
GPT 3 号完美地完成了它的工作,它提供了一个概要。即使这个演讲的内容不那么透明,但它毕竟有一些听觉上的影响:
18.创造有趣的事实
它们在互联网上很流行——有时你无法确定这些“有趣的事实”的可靠性和出处。
艾把这样的休闲话题进行了某种讽刺,讲述道
贝多芬喜欢在树叶中打滚,玩雪球
自我关注保留了提示的结构:“保持简短,应用于焦点组中的各种人”。
19.找到不明显的联系
这个很适合头脑风暴——找到两个没有直接关联的随机话题,让 GPT-3 发现联系。比如这里——在麦当劳和陀思妥耶夫斯基的《罪与罚》之间:
带着启发性的目的制作快餐体验听起来合情合理。
20.GPT-3 你自己。
如果你没有主意了,你可以自己GPT-3。因为“谷歌你自己”太过时了。
如你所见,没有界限。GPT 3 号完美地完成了一些任务,另一些则有缺陷,但它总能带来结果。它从来不会用错误信息或者冒烟的 TPU 服务器来回复你不可能完成的任务(至少我不知道是这样)。
如果你还想知道创造性使用 GPT-3 的其他方法,让我们问问框架本身。
额外收获:GPT-3 提供的创意
****
所有四张图片均由作者提供。
如果你没有 GPT 3 号的权限,不要担心。OpenAI 正致力于通过 API 或应用程序提供 GPT-3 访问的各种可能性。让我们在 2020 年秋季寻找新闻。我相信,很快你就能试用它了。
如果你太不耐烦,你可以试试现有的应用程序,比如已经在 GPT 2 号和 GPT 3 号上运行的 AI Dungeon 。
20 天谷歌云专业机器学习工程师考试(测试版)
将自己投入深渊的旅程
威廉·费格森在 Unsplash 上拍摄的照片
————————2020 年 10 月 15 日更新— — — — — — — — 恭喜!你正式成为谷歌云认证的专业机器学习工程师。
我在 https://cloud . Google . com/certification/sample-questions/machine-learning-engineer
上尝试了一套新的 10 道样题,我认为它们比 70%的考试题都要难。
————更新结束— — —
2020 年 8 月 1 日,我查看了一周前显示“我们有足够的 beta 测试者,注册已关闭”的注册页面,发现它又出奇地活跃了。我查看了考试预约日历,看到最晚的日期是 2020 年 8 月 21 日,之后即使滚动到 2021 年 8 月也没有可用的时间。
GCP 考试通常推荐 3 年以上的行业经验,包括 1 年以上使用 GCP 设计和管理解决方案的经验,这些我都没有,但你只能试用一次,所以我接受了挑战,于是一个计划产生了:https://www.meistertask.com/projects/2gpnfy1fmf/join/
如果您想进行编辑,请先导出项目,然后将您自己从原始项目中移除,然后将项目导入您自己的 MeisterTask 帐户。不要存档原件,因为它会影响我的副本和每个未来的读者。
你可以通过格式化卡片上的要点来为这个原创做出贡献。我的第一个版本被另一个读者删除了,这个重新导入的版本没有合适的项目符号。除了项目符号格式之外,请不要在此原件上添加任何其他编辑内容,如果您愿意,可以在自己的副本上进行编辑。
我知道有时间一遍就看完所有的材料,所以注意力和效率是至关重要的,然后我发现用 PowerPoint 制作抽认卡,上面贴满我看过的材料的截图(大约 120 张),真的有助于记忆。https://drive . Google . com/file/d/1 flg qfco 8 dctx-g 4 djl 7 kqyc 2s y1 mbt 6 w/view?usp =分享
不幸的是,我没有完成 Coursera 上 Google Cloud 上 TensorFlow 推荐的机器学习,只浏览了大数据和机器学习基础知识,以及 Google Cloud Platform Specialization 上 TensorFlow 高级机器学习的前两门课程(它们涵盖了大部分必要内容)。然而,浏览所有其他推荐课程的幻灯片对考试非常有帮助(尤其是高级专业化认证中的第 5 门课程)。考试中涵盖的大量知识也来自谷歌的机器学习速成课程。
我的大部分备考小技巧已经收集在上面的 MeisterTask planner 里了,所以我会在考完试后分享一下我的想法。
第一部分:ML 问题框架
能够把问题中的外行语言翻译成机器学习术语,比如用什么样的算法解决什么现实生活中的问题。仔细看问题,不像只看标签类型那么直白。有些问题似乎完全是面向业务的,需要理解业务指标以及什么对客户有好处。
第 2 部分:ML 解决方案架构
IAM 和权限可能已经通过所提供的 MCQ 选项进行了隐式测试,所以请了解哪些 GCP 产品在一般的 IAM 之外具有额外的安全特性。了解在数据管道的每个阶段(接收、转换、存储、分析)可以使用什么产品。仔细阅读该公司目前的状况,不要选择重复该公司已经做过的事情或太远的事情。
了解 GPU 和 TPU 加速之间的差异,以及是什么让这两种选择都不可能或不可取,这样一旦你看到问题的关键点,选择就一目了然了。大致了解 KMS、CMEK、CSEK 是做什么的,以及它们是如何用于处理隐私要求的。
第 3 节:数据准备和处理
熟悉将建模要求转化为正确的特征工程步骤(散列、箱、交叉),以及可重复的训练-测试-分割散列。在这一点上,MLCC(https://developers.google.com/machine-learning/crash-course)做得很彻底。应该比较和理解特征选择的统计方法。配额和限额通过显示管道中特定阶段的替代产品的选项进行隐性测试。了解数据流和云函数的常见用法会有所帮助。
了解 TFrecords 如何出现在数据管道中,以及涉及它们的一般 ML 流程,例如何时转换为 TF records,如何使用 TF records 进行训练-测试-拆分。能够识别数据泄漏和处理类不平衡(MLCC 涵盖这一点)
第 4 部分:ML 模型开发
了解 GCP 的建模工具(BQML,SparkMLlib,AutoML,ML API,AI Platform)的范围,以及它们将学习转化为完全自定义代码的无代码程度。建模速度和准确性是相互竞争的要求。了解数据/代码如何在 GCP ML 组件之间移动,并留意导入/导出快捷方式及其格式。
知道 AI 解释对什么类型的数据有什么样的解释。
第 5 部分:ML 管道自动化和流程编排
大多数问题的提问水平都比我预期的要高,所以用 Qwiklabs 运行 Kubeflow pipelines UI,查看示例代码以了解组件是如何连接的,并理解 TFX 与 Kubeflow 的区别就足够了。请注意,与 GCP 相比,有些事情可以在内部完成。了解如何快速构建 Kubeflow 管道。在没有灵活性但是快速的复制粘贴开发和完全的灵活性但是从零开始的耗时的开发之间总是有一个竞争的关注点。两者都不总是更好,这取决于公司在技能和产品方面的情况,以及他们当前使用或计划使用的基础设施和库,所以请阅读该问题。
第 6 部分:ML 解决方案监控、优化和维护
了解在开发过程中分析模型性能的工具。并持续评估模型在生产中的性能。管道简化技术将在 Google 云平台专业化的 TensorFlow 高级机器学习的第二个课程中介绍。
一般考试提示
有些问题很短,你可以在 5 秒钟内回答。有些时间燃烧者的选择比问题更长。通过仔细阅读需求和常识,一些选项是可以猜对的。理解问题想要什么,并选择做正确的事情,不多也不少。有些选项是其他选项的子集。有时,最佳答案不能满足问题的 100%要求,但其他选项甚至更错。有时最接近的答案表明你做了一些不受欢迎的事情来解决一个更重要的问题,所以有牺牲的成分。没有多少“勾选所有正确的”问题。有一些一般性的 python 问题和 Tensorflow 调试问题需要真正的实践经验,Qwiklabs 不会提供,因为它们只能教如何成功,而不能教如何失败。
首先阅读选项,形成一个从问题中寻找决策变量的心理决策树。“将 2 个决策变量上的 2 个选项置换成 4 个 MCQ 选项”的情况似乎很少,但主要是略有不同的选项,最多有 4 个选项全部正确,但仅满足 0–20%、50%、70%、90–100%有效性的要求。多部分选项的某些部分是重复的,因此没有必要在那里进行选择。一旦你分析了选项,问题的大部分可能是不相关的,所以继续阅读问题是浪费时间。过滤掉不相关的选项是有效的速度助推器。如果选项中的差异不明显,并且您必须阅读整个问题,请始终从公司当前状态的大画面开始,他们处于 SDLC 的哪个阶段。如果您知道问题是关于部署的,那么可以排除所有关于开发的选项。由多个部分组成的选项可能会让人们困惑,并使其变得更难,但这也意味着有更多的机会被淘汰,所以即使你不理解选项的所有部分,你也只需要找到一个部分,使整个选项出错。
如果时间允许,不仅要证明为什么你的选择是正确的,还要证明为什么所有其他的选择都没有在你的第一遍中通过。如果时间紧迫,证明选项错误比证明可能正确的选项符合所有需求更容易。我只剩下 24 分钟来复习 58/120,并且只复习了 20。
处理考试用户界面
问题是逐页加载的,每页上有 4 个按钮(后退、前进、查看全部、提交)。不要提交,直到所有的问题都完成并审查。评论页面将显示有多少人回答,并在您标记为评论的人旁边标上星号。有一个低门槛的标记审查(我有 58/120),因为它花费了大量的时间反复点击后退按钮,并寻找一些你没有标记审查,但后来想。然而,如果你在中间意识到你没有 1 分钟的时间来复习,开始有一个更高的复习门槛,因为结尾有太多星号意味着你可以花时间复习你已经非常确定的东西,而不是那些真正需要复习的东西。“查看全部”页面只显示您的问题编号(带可选星号)和您的选择,根本没有问题预览文本,所以除非您有很好的记忆力,否则很难知道哪个编号对应哪个问题,所以您可能需要浏览所有星号。
在第一遍时,在每个问题下面的评论框中记下(不确定这个框是否只是测试版功能)为什么某些选项是错误的,这样当你回来复习时,你不会从零开始重新开始这个问题,并且可以立即思考可能正确的竞争选项。注释框的另一个用途是记录你不确定的概念。您可能会遇到未来的问题,通过在问题中给出答案来解决这种不确定性,例如什么工具一起使用,哪些工具调用哪些工具。谷歌有提供不存在的选项的历史,但如果你看到相同的选项/概念出现在不止一个问题中,这很可能是可能的。
不要连续点击两次后退按钮,以防止意外提交,因为第一次点击后,提交按钮将加载到光标的正下方。“后退”和“前进”大约需要 3-5 秒的时间来加载,此时计时器停止计时,因此您可以在页面加载时有更多的时间来思考。不要使用 shift 键输入大写字母,否则你会使用 Ctrl+C/X 或其他组合锁定你的考试(我被锁定了两次,幸运的是我在现场进行了锁定,所以监考人员会在那里解锁,不知道如果远程进行,它会如何工作)。
学习策略
如果有时间
先跟着推荐的课程走,再去上教程(在 https://cloud.google.com/docs/tutorials上搜索 ai 平台你就覆盖了 95%,剩下的是 GCS,PubSub,云函数,Bigquery)。这些课程涵盖了大部分考试内容。另一个好处是当你已经知道这些概念时,阅读教程将会把单个的工具和概念组织成一个完整的架构。然后,您可以使用来自工具的知识来询问以下问题:在此体系结构中,一个工具相对于另一个工具的性能如何,如何扩展其限制,它能否连接到另一个源/接收器,1 个工具的配额/限制如何影响管道中另一个工具的限制,哪里/哪些工具是常见的瓶颈,哪里很少是瓶颈,无服务器部分在哪里(2 种类型:可以配置与不需要配置),以及哪些部分不是无服务器的。
在执行 Qwiklabs 时打开多个工具是有用的,例如始终保持虚拟机控制台页面打开,以了解您的 1-click GKE 集群部署实际上是在特定设置下默认供应 3 个虚拟机,或者您在 AI 平台笔记本中的“Open JupyterLab”单击已经在幕后供应了一个特定机器类型的虚拟机,或者当您执行一些 Qwiklabs 时自动运行的启动脚本已经在幕后设置了一些 git 克隆。保持 GCS 控制台打开也很重要,因为如此多的 GCP 人工智能工具依赖于桶。
如果你没有时间
立即阅读教程和文档(概述、最佳实践、常见问题)。这是一条更困难的道路,因为在浏览教程时会有许多未知的概念,它们可能太深入了,那种知识水平涵盖了< 10% of what’s tested. However, they serve as the fastest starting point for the learner to know the unknowns.
了解 g cloud SDK 【https://cloud.google.com/sdk/gcloud/reference】
这是了解 Google 有什么以及它是如何命名的最快方法。展开每个部分以查看方法名称,您将了解哪些服务是可用的,而无需浏览 GCP 控制台 UI。此页面还会提醒您可能错过的文档页面,并帮助您解决测试要使用的正确命令的问题。
“恐怕我太嫩了,不会去做的。”
乔纳森·博尔巴在 Unsplash 上的照片
第一天,我完全不知道考试指南中的 53/81 要点是什么意思,也不知道如何达到这些要点。在研究了 https://developers.google.com/machine-learning/crash-course 之后,我也意识到一些我认为我了解的 28/81,并不是它应该的样子。
由于这些原因,我认为没有必要拥有大量的 ML 知识。
- 考试很少有实现/调试问题,主要集中在 GCP 工具选择和解决方案架构(有时开源工具作为选项,但通常 GCP 工具因无服务器可扩展性而胜出)。如果需要实施的话,我肯定不会尝试 20 天的学习。
- 即使有人以前做过一些事情(例如处理不平衡的数据),他也可能没有按照谷歌建议的方式去做。是的,这并不客观,而且确实有谷歌推荐的做法需要记忆。
- 考试的很大一部分是关于 GCP 特定的工具、命令和工作流。如果有人不研究 GCP,他不会知道什么是可能的,或者开发,测试,部署,监控工作流是如何使用 GCP 工具完成的。知道如何在 GCP 之外做并不意味着这是正确的答案。在考试环境中,内部工具或在本地完成通常是错误的。
- 让考试变得异常困难对谷歌不利。有足够经验的人不需要证书来证明什么。太难会阻碍人们为考试而学习,这意味着更少的 GCP 用户,更少的考试费,更少的开源公司雇佣这些考生,并在公司层面转向 GCP。
一些支持以往经验益处的论点:
- Dataflow 基于 Apache Beam,Airflow 上的 Cloud Composer,Kubeflow 上的 AI 平台 pipelines,所以如果你已经使用了开源版本,你可以更快地浏览教程中的代码,并知道为什么一些工具与多选中的另一个工具相比是多余的,显然是错误的选择。但是再次记住,实现很少被测试。更重要的是了解 GCP 特定的源和汇可用于数据流,以及 GCP 管道如何允许某些工作流/快捷方式,这可能是开源工具所无法实现的。
- 阅读/经历更多的人可以更好地从给定的特性和模糊的需求中辨别出哪种业务度量适用于哪种情况,或者哪种 ML 问题可以被构建。然而,在常识接管之前,只有非常基本的 ML,技术术语是必需的。
- 阅读/经历更多的人会知道做某事的更多方法或某事可能出错的更多方法及其负面影响,并使用这些知识来识别和推断当呈现一个场景时哪里出错了以及采取什么步骤来修复它。(例如,数据泄漏、不良的训练-测试-分割、训练-服务偏斜、拟合不足)。然而,知道解决方案是不够的,因为您还必须知道首先要尝试什么,这里又出现了 google 推荐的实践来学习。
作为最后的免责声明,如果没有以前的经验,任何人都不太可能在 20 天内通过这一关,这有助于回答调试问题,并对评估指标(如精度、召回率、F1、AUC)做出更快的反应,但这篇文章希望激励那些认为这可以做到的人。
如果你还有任何问题或者想分享你的经验,请随时在 Linkedin 上联系我:https://www.linkedin.com/in/hanqi91/
数据科学的 20 个大熊猫技巧
你应该每天使用的 20 个大熊猫技巧
(图片由作者提供)
介绍
除非你是 Python 数据科学的新手,或者你的路由器上连接了某种设备来阻止所有与熊猫有关的传入数据包,否则你可能听说过熊猫。Pandas 是 Python 数据组织、清理和 IPython 显示的首选库,在过去 10 年中,它已经成为读取和处理数据的行业标准。在处理数据方面,Pandas 不仅在很大程度上满足并超出了所有人的预期,它还与 Numpy 紧密相连,并与 Numpy 合作得非常好——将它进一步整合到 Pythonic 数据科学包的奇妙生态系统中。
虽然 Pandas 很受欢迎,并且大多数使用 Python 的科学家都非常频繁地使用它,但它仍然是一个非常深入的库,具有许多特性。这些特性中有很多很容易被忽略,但是它们的价值却不能被夸大。幸运的是,今天我在 Pandas library 中整理了 20 个鲜为人知的特性,它们将帮助任何数据科学家掌握这个软件包!
数据帧
数据框是熊猫图书馆的核心特征。尽管数据框本身就是一个强大的功能,但是如果没有强大的功能和操作,它们最终只是被美化了的字典。幸运的是,Pandas 为您提供了这些非常酷的方法来探索您的数据、清理您的数据和调整您的数据。对于以下所有示例,我将使用此数据框:
(图片由作者提供)
这些数据是早至 1910 年、晚至 2006 年的历史天气数据
df.describe()
Pandas 中最被低估的功能之一是一个叫做 describe()的简单函数。对数据框使用 describe 函数会产生一个非常统计的结果,它会告诉您需要单独了解的每一列的值。这是了解给定列中大多数数据的位置的好方法,而不需要考虑平均值。了解了标准偏差、最小-最大值和平均值,也就很容易知道数据中的方差有多大。使用这个函数是一个非常好的方法,可以非常快速地获得每一列的以下所有统计数据:
- 意思是
- 数数
- 标准偏差
- 第一个四分位数
- 第二个四分位数(中位数)
- 第三四分位数
- 最小值
- 最大值
df.describe()
(图片由作者提供)
df.groupby()
groupby()函数是一个很棒的函数,可用于根据分类值或数值的连续等级来重新组织您的观察值。该函数只是将相同或相似的值最接近地放在一起。
df.groupby(['Temperature (C)']).mean()
(图片由作者提供)
df.stack()
stack 函数可用于返回具有更多最内层的数据框和序列类型。通过旋转数据框来创建新的最内层。第一个参数控制堆叠哪个或哪些层:
df.stack([0])
(图片由作者提供)
Stack 似乎并没有对这些数据做什么。这种功能只有在桌子主要是可旋转的时候才能感觉到。
df.apply()
应用函数用于使用 Python 函数在整个数据框或系列类型中应用算术或逻辑代码。虽然这当然可以应用于数据框,但我只打算将其应用于系列,因为该数据框包含字符串和日期时间数据类型。
df["Temperature (C)"].apply(np.sqrt)
(图片由作者提供)
df.info()
info 函数可用于数据框,以提供有关数据框的信息,这些信息通常与性能而非统计数据相关。如果您想要检查内存分配或数据框内每个系列的数据类型,这将非常有用。
df.info()
(图片由作者提供)
df.query()
Query 是一个 Pandas 函数,允许在整个数据框中应用条件掩膜。query 和典型的条件掩码之间的唯一显著区别是,query 函数可以接受一个将被解释为条件语句的字符串,而条件掩码将使用布尔值屏蔽数据,然后返回为真的条件。
df.query('Humidity < .89')
(图片由作者提供)
df.cumsum()
cumsum 函数可用于获取数据框和熊猫系列类型的累积和。这意味着数字将按降序相加,并在此过程中不断相加。
df.cumsum()
坏消息。
不幸的是,内核似乎已经死亡。因为我的 Jupyter 内核今天感觉特别情绪化,所以我会让她(她是女的)休息一下,而是只在一个系列上运行这个函数。
(图片由作者提供)
条件掩码
Pandas 库里面我最喜欢的特性之一是能够很容易地用条件屏蔽数据帧。虽然有办法用滤镜做到这一点!()方法在我最喜欢的语言中,朱莉娅,这是我真正想念的一件事,我希望能被带入语言中。首先,你需要提出一个条件,在这个例子中,我们将使用低于 14 级的风速。
our_mask = df["Wind Speed (km/h)"] < 14
接下来,我们将通过简单地设置一些与布尔相等的东西作为索引来应用这个掩码:
seconddf = df[our_mask]
现在我们的数据框不包含大于或等于 14:
(图片由作者提供)
df.melt()
熔化与 pivot 函数相反,pivot 函数会将您的数据转换为横向格式。如果你想改变观察结果和特征,这是很有用的。但是,需要注意的是,在某些情况下,如果不提供参数或更改数据框的结构,效果可能不如预期。我正在处理的数据框就是一个很好的例子:
df = df.melt()
(图片由作者提供)
df.explode()
你有没有因为某种原因碰到过类似这样的数据?:
(图片由作者提供)
除了与数据框上的 A 相对应的观测值之外,所有其他值都是具有单个整数的精确观测值。幸运的是,我们可以简单地在数据框上运行 explode 来纠正这一点。Explode 将“分解”数据框内的所有可迭代集合,并将它们放入单独的观测值中。
data.explode("B")
(图片由作者提供)
df.nunique()
我们有一个包含许多类别的数据框架,我们希望找到一个分类问题的解决方案。唯一的问题是,我们不想使用一个容易过度拟合的模型,如果我们有这么少的类别,该模型最终会矫枉过正。这在数据科学家的典型日常生活中是很常见的场景。幸运的是,这个问题的解决方案非常简单——需要对所有唯一值进行计数。更幸运的是,Pandas 通过 nunique 函数让这一切变得异常简单!
df.nunique()
(图片由作者提供)
这将提供数据框中所有要素及其相应唯一值计数的综合列表。
df.infer_objects()
在处理脏数据时,您可能会遇到的另一件事是最初被认为不是脏数据的类型。使用 df.infer_objects()是在数据框内更改这些数据类型的一个很好的潜在节省时间的方法。infer_objects 函数根据经验猜测每一列的数据类型,并将整个系列设置为该类型。
df.infer_objects()
(图片由作者提供)
df.memory_usage()
内存使用是 return most 可能已经假定的一个函数。虽然我们使用 info()函数大致了解了数据框中的内存使用情况,但 memory_usage 要全面得多,它将允许我们找出哪些列消耗了大部分内存。
df.memory_usage()
(图片由作者提供)
df.select_dtypes()
select_dtypes 函数可用于根据类型从数据框中提取某些列。一个很好的例子就是 apply,我们希望将 np.sqrt()应用于整个数据框,但是由于数据框中的字符串,我们只能对单个系列执行此操作。
df.select_dtypes(float).apply(np.sqrt)
(图片由作者提供)
df.iterrows()
iterrows()函数是一个简单的生成器类型,它将生成一个新的迭代数组—每列一个。如果您需要将所有行压缩到一个可迭代对象中,这非常有用:
rowlist = df.iterrows()
现在我们可以迭代这个生成器:
(图片由作者提供)
压型
提到熊猫数据分析,就很难不谈到熊猫概况。尽管它需要另一个库,但它无疑是 Pythonic 数据科学家拥有的最好的工具之一,只需一个函数调用就可以快速浏览数据。你可以在这里查看:
文档|松弛|堆栈溢出从 pandas 数据帧生成配置文件报告。熊猫 df.describe()…
github.com](https://github.com/pandas-profiling/pandas-profiling)
为了使用它,只需调用
df.profile_report()
这将在一个方便的 HTML 传单中提供对您的数据的彻底检查,该传单易于理解并且与 IPython 完全兼容!
系列
Pandas 系列类型虽然可能不像数据框那样是 Pandas 的组成部分,但肯定有其重要性。与普通列表的功能相反,熊猫系列有很多不同的选项,这些选项在其他地方都不被支持。这些工具通常包括大多数数据科学家期望从 Python 中获得的典型生活质量工具。
Series.isin()
isin 函数将返回一个条件掩码,如果序列中的给定观察值在它所调用的值列表内,该条件掩码将返回 true。例如,我们可以为我们的:PrecipType 列中的每个值是否为“rain”创建一个掩码:
df["Precip Type"].isin(["rain"])
(图片由作者提供)
Series.where()
Where 将对给定的系列应用一个条件,并返回满足所述条件的值。where 函数几乎直接以该函数用途的 SQL 等价物命名。
df["Summary"].where(df["Summary"] != "Mostly Cloudy")
(图片由作者提供)
Loc 和 ILoc 系列
如果您不熟悉 iloc 和 loc,那么您可能应该开始练习了——因为这两个非常重要!经验法则是loc is used for labels
和iloc is used for integer-based indexing.
首先,让我们尝试在一个系列类型上使用 iloc,看看我们会得到什么回报。
df["Precip Type"].iloc[2]
(图片由作者提供)
我们在这里得到“rain”作为回报,因为它是我们的“Precip Type”列中的第二个索引。让我们再来看看数据帧头:
(图片由作者提供)
或者,我们可以使用 loc 而不是 iloc 来获取基于索引中标签的值。考虑以下数据帧:
data = pd.DataFrame({"Age": [25, 35,45]}, index = ["Corgi", "Maltese", "Pug"])
(图片由作者提供)
现在,我们可以对任何给定的索引调用 loc,并接收带有每个特性的整个观察集:
data.loc["Corgi"]
(图片由作者提供)
我现在才意识到 25 岁对一只狗来说太老了。
实际上,我不确定这将返回什么数据类型,所以我也很想知道这是什么类型:
(图片由作者提供)
谁能想到呢?
Series.rank()
rank 函数可用于根据值在数据中相对于最小值和最大值的位置为值提供数值等级。这在一系列不同的原因中是有用的,但是在 Wilcox 秩和检验中可以看到秩的巨大应用,Wilcox 秩和检验是一种使用秩来返回概率的统计检验。
df["Humidity"].rank()
(图片由作者提供)
结论
不用说,Pandas 是一个管理和清理大型数据集的神奇库。熊猫让很多事情变得简单多了,坦白地说,这些事情在其他语言中很难。虽然有很多其他语言的伟大软件包试图完成类似的任务,但它们中的大多数让我怀念熊猫处理复杂问题的出色方式。
使用这些功能,几乎可以保证科学家可能遇到的大多数问题都能得到解决。虽然 Pandas 是一个非常深入的库,但总是有一个伟大的功能可以加快你的工作,让你更快地找到有趣的东西,这是很棒的!