TowardsDataScience 博客中文翻译 2020(四百四十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

我如何在两个月内零经验通过 AWS 认证解决方案架构师(SAA-C02)

原文:https://towardsdatascience.com/how-i-passed-the-aws-certified-solutions-architect-saa-c02-with-zero-experience-within-two-months-ecc3fa5c1d28?source=collection_archive---------4-----------------------

我用过的课程和学习材料

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

伊恩·斯托弗在 Unsplash 上拍摄的照片

在开始准备这次考试之前,我对 AWS 毫无经验。但是两个月后,我就认证了!我说这是一个简单的考试吗?**没有!**绝对错误。这次考试的范围非常大,几乎涉及到大多数的 AWS 服务。在这篇文章中,我将分享我是如何学习并通过 AWS 认证解决方案架构师(SAA-C02)的。

[## AWS 认证解决方案架构师助理认证

AWS 认证解决方案建筑师助理考试是为执行解决方案的个人设计的…

aws.amazon.com](https://aws.amazon.com/certification/certified-solutions-architect-associate/)

课程

我参加了各种课程,既有面对面的也有在线的。

讲师指导的

我的公司在办公室组织了一个讲师指导的课程,我已经免费参加了(很好的福利!).当你在听导师用母语教学时(我的母语不是英语),就更好理解了。

参加教师授课的课程的另一个好处是,当你对授课内容有疑问时,可以在课堂上立即提问。它帮助你更深入地学习和定制。而且,当你的同学也问的时候,这是一个很好的学习过程。有时你只是认为我们知道这些东西,但当你的同学问你从未想到的问题时,你会发现你实际上根本不懂这些材料!在我的课程中,这种情况发生了很多次,我们在这个问答过程中学到了很多。

在课程中,我们需要在 Qwiklabs 中做六个动手实验。学习完相关概念后,立即动手练习是非常好的做法。它通过弄脏你的手来帮助你巩固你刚刚学到的东西。但是如果你没有 Qwiklabs 帐户,你可以随时使用 AWS 免费层来做你的实验。互联网上有许多实践练习指南,可以指导您使用 AWS 中的服务。我在一个 CloudGuru 课程中进行了许多实践。

缺点是如果你需要支付这门课程的费用,那是相当昂贵的。另一个缺点是,与在线课程不同,你不能重播课程。我在备考的时候,不断的回过头去复习忘记的内容。如果你在网上学习,而不是在课堂上,这是可能的。你需要在课堂上放下你自己的笔记。

ACloudGuru

我在 Udemy 上以大约 13 美元的价格购买了这门课程,当时有折扣。如果你愿意,你可以查看下面的链接。您也可以订阅一个 CloudGuru 学习门户网站。

[## AWS 认证解决方案架构师:助理认证考试

注意:我们的课程材料,如 AWS 认证考试,是不断发展的。本课程涵盖了您需要的所有内容…

click.linksynergy.com](https://click.linksynergy.com/deeplink?id=0wsuN4lypZM&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Faws-certified-solutions-architect-associate%2F)

本课程从 AWS 平台的概述开始,然后深入探讨 AWS 平台的各个元素。您将探索 Route53、EC2、S3、CloudFront、自动扩展、负载平衡、RDS、RedShift、DynamoDB、EMR、VPC 等。

阿克劳德古鲁是一个完美的起点。他们会进行讲座和动手实验,这些内容丰富,会让你保持兴趣。

他们在 2020 年 6 月至 7 月期间更新了该课程的新内容。由于自动气象站的格局在不断变化,寻找当前的资源可能是一个挑战。在 SAA-C02 中有一些章节关注新内容,他们用括号[SAA-C02]标记了这些章节。请特别注意这些章节,因为它们将出现在 SAA-C02 考试中。

有章节摘要可以帮助你关注每堂课最关键的部分。我建议你在考试前复习一下这些总结。

ExamPro 的 Andrew Brown 的 Freecodecamp(免费!)

freeCodeCamp.org YouTube 频道的上有一个完全免费的课程。大约 10 个小时,涵盖了通过考试所需的所有服务。如果你不想在课程上花钱,我推荐你看这个课程。

[## 通过这个 10 小时的免费课程,通过 AWS 认证解决方案架构师考试

AWS 认证解决方案架构师是最受欢迎的云计算认证之一。在本完整课程中…

www.freecodecamp.org](https://www.freecodecamp.org/news/pass-the-aws-certified-solutions-architect-exam-with-this-free-10-hour-course/)

学习资料

教程 Dojo 练习考试

[## AWS 认证解决方案架构师助理实践考试

完全更新到新的 SAA-C02 - AWS 认证解决方案架构师助理考试版本!有很多课程…

click.linksynergy.com](https://click.linksynergy.com/deeplink?id=0wsuN4lypZM&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Faws-certified-solutions-architect-associate-amazon-practice-exams-saa-c02%2F)

我建议大家在参加真正的考试之前通过这些模拟考试。它提供了与实际考试非常相似的模拟问题。

本次模拟考试的卖点之一是每个问题都包含详细解释,这将帮助您更深入地了解 AWS 服务。它不仅解释了什么是正确的答案,还解释了为什么其他答案是错误的。让你认识到类似服务的区别,是极有帮助的。

还有一点就是考试模式真的很贴近实际考试。它模拟得非常好。题目和实际考试真的很像。我想说,做完这 6 次模拟考试后,我就准备好了。如果你愿意,你可以查看上面的链接。

教程 Dojo 备忘单

[## AWS 备忘单

AWS 备忘单我们的 AWS 备忘单旨在让您鸟瞰重要的 AWS 服务,您…

tutorialsdojo.com](https://tutorialsdojo.com/aws-cheat-sheets/)

这些备忘单非常有用,它们让您快速了解重要的 AWS 服务,您需要非常了解这些服务才能通过 AWS 认证考试。它们简明扼要,易于阅读和理解。其中最有帮助的部分就是同类服务的对比。通常在考试中,有两个相似的答案似乎可以解决给定场景中的问题。但是服务之间的微小差异导致一个答案,而不是另一个。通过比较表格/图表熟悉所有服务有助于您通过考试。

AWS 白皮书

虽然建议阅读所有相关的白皮书,并从中学习所有的概念和策略,但我没有阅读白皮书。AWS 刚刚更新了架构良好的框架和五大支柱的白皮书。如果你有足够的时间,阅读这些白皮书将是对你考试准备的一个很好的补充,并将帮助你更好地了解不同的 AWS 服务。

针对非英语母语者的考试提示:

如果你的母语不是英语,你可以要求额外的 30 分钟。

遵循本参考中的步骤,并请求安排额外的 30 分钟来完成它。

[## AWS 认证考试延长 30 分钟

逐步申请 30 分钟参加 AWS 认证考试。2018 年 5 月 31 日以下考试为…

www.linkedin.com](https://www.linkedin.com/pulse/30-minute-extension-your-aws-certification-exam-garcia-lozano)

结论

完成认证并不是故事的结束,其实这只是我云之旅的开始。如果你有兴趣,请和我一起踏上这段旅程。我没有考高分,只是勉强及格。关于 AWS 我还有很多东西要学。考试激励我学习所有这些最新的云技术,考试结果让我不断学习。这是一个终身学习的过程!

祝你好运!如果您有任何问题、意见或顾虑,请随时留下您的回复,我会尽快回复您。

[## 通过我的推荐链接加入灵媒-杨祖华

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

medium.com](https://medium.com/@joshua.chyeung/membership)

我如何通过 TensorFlow 开发人员认证考试

原文:https://towardsdatascience.com/how-i-passed-the-tensorflow-developer-certification-exam-f5672a1eb641?source=collection_archive---------1-----------------------

你也可以

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

一个高技能开发人员的所有迹象:胡子拉碴的胡子,正在开发的鲻鱼,到处都是电缆,帽衫(必须的)。Sam Bourke 的照片,谢谢兄弟。

**更新(2021 年 2 月 26 日)😗*在收到一堆关于学习 TensorFlow 和如何通过认证考试的问题后,我制作了一个教授下面提到的技能的课程。 报名学习 TensorFlow 的基础知识,以及如何通过 TensorFlow 开发者认证考试。

2020 年 5 月初,我决定获得 TensorFlow 开发者认证。所以我给自己设置了一个课程来提高我的技能,并在几天前(6 月 3 日)参加了认证考试。结果,我通过了。

让我告诉你我是怎么做到的,你也可以。

坚持住。张量流到底是什么?

TensorFlow 是一个开源的数值计算框架,它允许您预处理数据,对数据建模(在其中找到模式,通常通过深度学习)并将您的解决方案部署到世界各地。

这是谷歌用来支持其所有机器学习服务的。很有可能,你阅读这篇文章的设备之前已经运行过某种张量流。

通常,你会用非常容易理解的 Python(考试内容)或 JavaScript (tensorflow.js)编写 TensorFlow 代码,它会触发一系列用 C 编写的底层函数,执行你告诉它做的事情(大量的数值计算)。

好了,现在我们知道了什么是 TensorFlow,什么是 TensorFlow 开发者认证?你为什么会对它感兴趣?

什么是 TensorFlow 开发者认证?

正如你可能已经猜到的,TensorFlow 开发者认证是展示你使用 TensorFlow 能力的一种方式。

更具体地说,你使用 tensor flow(Python 版本)为一系列任务建立深度学习模型的能力,如回归、计算机视觉(在图像中寻找模式)、自然语言处理(在文本中寻找模式)和时间序列预测(在给定一系列过去事件的情况下预测未来趋势)。

为什么您可能希望获得 TensorFlow 开发者认证?

我的第一个理由是好玩。我想给自己一个小小的挑战去努力,给自己一个理由去读一本我买的新书(后面会有更多)。

但是另外两个有效的理由是:

  1. 获得构建机器学习驱动的应用程序所需的基本技能。
  2. 向未来的雇主展示你的技能。

说到未来的雇主,根据 Hacker News 的 Who’s Hiring page (一个列出软件开发人员职位月度集合的页面)的数据,与其他深度学习框架相比,TensorFlow 似乎遥遥领先。

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

比较不同的深度学习框架在 Hacker News 的招聘页面上的各种招聘帖子中的提及率。**注:**截至 TensorFlow 2.x,Keras 基本上是 TensorFlow 的一部分。注 2: 由于当前的全球环境,所有软件开发人员职位的整体招聘都在下降。图片来源

我想明确一点,有偿证书并不能保证找到工作。但是在在线学习的世界里,技能正在商品化,这是展示你能力的另一种方式。

我认为这是一个很好的补充,可以添加到你已经完成的个人项目列表中——课程建立基础知识,项目建立具体知识。

那么你是怎么做到的呢?

如何准备考试

当我决定要这么做时,我浏览了认证网站并阅读了 TensorFlow 开发者认证手册。

从这两个资源,我建立了以下课程。

课程——我学习了什么来建立通过考试所必需的技能

需要说明的是,在开始备考之前,我已经有了一些用 TensorFlow 构建几个项目的实践经验。

经验丰富的 TensorFlow 和深度学习实践者可能会发现,他们可以以与我相同的速度(总共 3 周)完成以下课程,甚至更快。

初学者需要多少时间就花多少时间。记住:培养任何有价值的技能都需要时间。

我列出了每种资源的时间表、成本(美元)和有用程度(通过考试)。时间线是基于我的经验。

如果你想为自己创建一个课程,我会推荐如下内容。

**注意:**对于付费资源,已经使用了附属链接。这不会改变资源的价格,但是如果你碰巧买了一个,我会收到一部分报酬:我用来创造这样的资源的钱。

1.tensor flow 开发者认证手册

时间: 1 小时。

**费用:**免费。

**乐于助人等级:**必选。

这应该是你的第一站。它概述了考试将涉及的主题。看完了再看一遍。

如果你是 TensorFlow 和机器学习的新手,你可能会读到这篇文章,并对所有不同的主题感到害怕。别担心。下面的资源将帮助您熟悉它们。

2.Coursera 上的 TensorFlow 练习专精

时间: 3 周(高级用户)到 3 个月(初学者)。

**费用:**7 天免费试用后每月 59 美元,可通过申请获得经济援助。如果不能访问 Coursera,可以在 YouTube 上看到等效的免费版本。

助人水平: 10/10。

这是与考试(以及 TensorFlow 入门)最相关的资源。细心的学生会注意到 TensorFlow 认证手册和这个专业的大纲几乎完全相同。

它是由两位张量流和机器学习的巨头劳伦斯·莫罗尼和吴恩达教授的,如果我只能选择一种资源来准备考试,这将是它。

我欣赏短视频格式,并尽快关注实际操作的例子。每一部分末尾的多个代码笔记本是任何实际学习者的必备。

编程练习的一个技巧是:不要只是填补代码空白,要自己写出全部内容。

3.使用 Scikit-Learn、Keras 和 TensorFlow 第二版进行机器实践学习

时间: 3 周(从头到尾看完,不做练习)— 3 个月(从头到尾看完,做练习)。

成本:亚马逊上的价格各不相同,但我花了 55 美元买到了一份纸质版。你可以在 GitHub 上免费看到所有的代码。

有用程度: 7/10(只因为有些章节与考试无关)。

这本书有 700 多页,基本上涵盖了所有的机器学习,因此也包括了一些与考试无关的话题。但对于任何有兴趣为未来的机器学习打下坚实基础的人来说,这是一本必读的书,而不仅仅是为了通过考试。

如果你是机器学习的新手,你可能会发现这本书很难读(首先)。同样,不要担心,你不着急,学习有用的技能需要时间。

这么说吧,如果你想了解这本书的质量,我会在早晨上班的路上阅读第一版。我可以告诉你,通常情况下,我会完全按照白天在书上读到的去做。

第二版没有什么不同,只是更新了最新的工具和技术,即 tensor flow 2 . x——考试的基础。

如果你只是在考试的相关章节之后,你会想要阅读:

  • 第十章:用 Keras 介绍人工神经网络
  • 第十一章:训练深度神经网络
  • 第 12 章:使用 TensorFlow 定制模型和训练
  • 第 13 章:用 TensorFlow 加载和预处理数据
  • 第十四章:使用卷积神经网络的深度计算机视觉
  • 第 15 章:使用 RNNs 和 CNN 处理序列
  • 第十六章:使用 RNNs 和注意力的自然语言处理

但对于认真的学生,我建议看整本书和练习(也许不是全部,但挑选最适合激发你兴趣的)。

4.麻省理工深度学习简介

时间: 3 小时(我只看了 3 节课)— 24 小时(每节课 1 小时,另加 1 小时复习)。

**费用:**免费。

乐于助人程度: 8/10。

来自世界一流大学的世界一流深度学习信息,哦,我提到了吗?它是免费的。

前 3 讲,深度学习(一般来说)、卷积神经网络(通常用于计算机视觉)和递归神经网络(通常用于文本处理)与考试最相关。

但是,对于渴望学习的人来说,完成整个课程并不是一个坏主意。

一定要查看他们在 GitHub 上提供的实验室和代码,尤其是 TensorFlow one 的介绍。同样,我不能强调自己编写代码的重要性。

5.【PyCharm 入门

时间: 3 小时(取决于你的电脑有多快)。

**费用:**免费。

乐于助人等级: 10/10(必须使用 PyCharm)。

考试在 py charm(Python 开发工具)中进行。考试前,我从未用过 PyCharm。建议你在开始之前至少对它有所了解。

为了熟悉 PyCharm,我在 YouTube 上浏览了他们的入门系列,非常简单,“这是这个按钮的功能。”

但主要测试是确保 TensorFlow 2.x 运行没有任何问题,我的电脑可以在相当长的时间内运行深度神经网络(我的 MacBook Pro 没有 Nvidia GPU)。

为了测试这一点,我在本地机器上复制了以下两个 TensorFlow 教程:

  1. 用张量流进行图像分类
  2. 用 TensorFlow 进行文本分类

这两种方法在本地都运行良好,但是,正如我们将在下面看到的,当我开始测试时,我遇到了一个问题。

临时演员

  • Coursera/YouTube上的 deeplearning.ai 视频——考试纯粹是基于代码的(Python 代码),但如果你想知道你正在编写的代码(线性代数、微积分)背后发生了什么,我会在你认为合适的时候在这里加入和退出视频。比如你不确定什么是小批量梯度下降,搜索“deeplearning.ai 小批量梯度下降”。
  • TensorFlow 文档——如果你想成为一名 TensorFlow 实践者,你需要能够阅读这些文档。有不懂的地方,自己写代码,自己注释。
  • 用 TensorFlow 在 YouTube 上编码(播放列表)——大部分 TensorFlow 在实践 Coursera Specialization 在 YouTube 上的视频系列,也是同一个导师教的。

我是怎么备考的?

有了上面的资源,我在概念中拼凑了一个大纲。

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

我的 TensorFlow 开发者认证课程 in idea。我使用看板技术来跟踪需要做的事情,以及各种资源和笔记。如果您访问该链接,您可以通过点击右上角的“复制”按钮制作自己的副本。

整个五月的每个早上,我都会起床、写作、散步、阅读 1 小时的机器学习实践书籍、练习 2-3 小时的 TensorFlow(首先观看讲座,然后完成 Google Colab 中的所有编码练习),然后在每个模块结束时,我会观看相应的麻省理工学院深度学习简介讲座。

例如,有一次我完成了 TensorFlow 实践专业化的计算机视觉部分,我看了麻省理工学院的卷积神经网络(一种计算机视觉算法)讲座。

这种三结合的方法被证明特别有效。

我在书中读到的一个概念会被 Coursera specialization 中的代码示例巩固,并最终被麻省理工学院的视频总结。

为了一个时间线的概念,5 月 11 日开始备考,6 月 3 日参加。

通过我的跟踪(在观念上)和我手写的书签,我平均每小时 20 页,每 2-3 小时的学习单元大约 1 周的课程内容(没有分心)。

最后,在考试前几天,我下载了 PyCharm,并确保我所经历的一些代码示例能够在我的本地机器上运行。

考试细节——实际考试过程中会发生什么?

你已经完成了你的研究?现在怎么办?

好吧,先说两个重要因素。

考试费用: $100 美元(每次考试,如果你失败了,你要等 2 周再试一次,以后每次失败要等更长时间)。

时限: 5 小时。如果没有考试开始时的错误,我会说我会在 3 小时内轻松完成考试。然而,延长的时间限制是为了给你足够的时间在你的计算机上训练深度学习模型(所以在开始之前确保这是可行的)。

考试是如何组织的?

我不会在这里透露太多,因为那会是欺骗。我要说的是阅读 TensorFlow 开发人员手册,你会对考试的主要部分有一个公平的想法。

练习手册中提到的每一种技术(使用上面提到的资源),你会做得很好。

考试花絮

训练模型 —如果你的计算机不能足够快地训练深度学习模型(评分标准的一部分是提交训练好的模型),你可以使用免费的 GPU 在 Google Colab 中训练它们,然后下载,放在考试的相关目录中,通过 PyCharm 提交。

我的破 Python 解释器 —备考资料强调考试需要 Python 3.7。我开始的时候有 Python 3.7.3。由于某种原因,即使 TensorFlow 前一天在我使用 PyCharm 的本地机器上工作,但在开始考试(它会自动为您创建 TensorFlow 环境)后,它就坏了。

也就是说,每次我运行一行 TensorFlow 代码,都会得到错误:

RuntimeError: dictionary changed size during iteration

现在不确定是考试安装的 TensorFlow 的版本(2.0.0)还是我曾经的 Python 的具体版本(3.7.3)。

尽管如此,在经过一番咒骂和对旧 GitHub 问题线程的深度搜索之后,我发现了一个奇怪的修复,这意味着必须修改我正在使用的 Python 版本的源代码(具体来说,就是 lincache.py 的第 48 行)。

# Previous line 48 of lincache.py
for mod in sys.modules.values():# Updated line 48 of linecache.py
for mod in list(sys.modules.values()): # added list()

**注意:**这只是权宜之计,因为是在考试期间做的,所以我不确定它是否有任何长期的好处或影响。

在我疯狂搜索的过程中,我还读到了一个替代方法,就是更新/重新安装你在 PyCharm 中使用的 TensorFlow 版本(例如 2.0.0 -> 2.2.x)。我试过了,但是没有用,作为 PyCharm 的新手,我怀疑是用户的错误。

实施修复后,我能够顺利完成考试。

考完试之后呢?

如果你通过了考试,你会收到电子邮件通知。除了“恭喜你通过了”或者“很遗憾你这次没通过”之外,不会有任何反馈。

在不破坏太多的情况下,当你参加考试时,你会得到一个非常清楚的指示,如果你有可能通过或不通过(每次你提交一个模型,它会被标记)。

但是如果你通过了,恭喜你!

请务必填写电子邮件中的表格,以确保您被添加到 TensorFlow 认证开发者网络

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

一旦你通过了考试,并填写了确认邮件中的表格,几周后你就可以进入谷歌的全球认证网络了。**注:**截至发稿,我还没到。需要 1-2 周才能出现。

在此注册意味着任何寻找熟练 TensorFlow 开发人员的人都可以根据您的认证类型、经验和地区找到您。

最后,在几周内(我还没有收到我的),你会收到一封官方 TensorFlow 开发者证书和徽章的电子邮件。除了你做过的项目,你还可以增加两件事。

问题

我可以只上课程、看书、自己练习吗,我真的需要证书吗?

当然了。归根结底,你应该追求的是技能,而不是证书。证书是最好拥有的而不是需要拥有的

如果你说不需要证书,那你为什么还需要呢?

我喜欢有挑战性的工作。为自己设定一个日期,比如“我将在 6 月 3 日参加考试”,这让我别无选择,只能学习。

我可以用免费资源来做这件事吗?

是的,你当然可以。您可以通过浏览 TensorFlow 文档来学习您需要的所有技能。事实上,当我需要练习一些东西时,我会逐字复制文档示例(每一行代码),逐行练习理解,然后看看我自己能否做到。

为什么不是 PyTorch?

我爱 PyTorch。但他们不提供认证,如果他们提供,我可能也会这样做(为了好玩)。另外,两个框架(PyTorch 和 TensorFlow)的有经验的用户将开始看到最近的更新意味着这两个框架变得非常相似。如果说有什么不同的话,TensorFlow 在企业领域拥有优势(见上图)。

我不知道任何机器学习,我能从哪里开始?

阅读文章学习机器学习的 5 个初学者友好步骤

我已经通过了考试,并注册了谷歌开发者认证网,接下来我该做什么?

是时候建造了!运用你所学的技能,做出你想在这个世界上看到的东西。别忘了分享你的作品,你永远不知道谁会看到。

一些没有提到的事?欢迎在下面发表评论或通过电子邮件提问。我会回答的。

PS 如果你比较喜欢看东西,我做了一个视频版的这篇文章

我如何用简单的线性回归预测选举结果

原文:https://towardsdatascience.com/how-i-predicted-the-election-result-with-simple-linear-regression-e54c6c196239?source=collection_archive---------25-----------------------

这个简单的回归模型轻而易举地击败了所有主要的民调机构和博彩公司。

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

一切都应该尽可能简单,而不是更简单~阿尔伯特·爱因斯坦

长话短说——在我上周发表的 文章 中,我预测了波兰总统选举中两位候选人的选举结果。

预测
杜达:50.97%
Trzaskowski:49.03%

官方结果
杜达:51.03%
Trzaskowski:48.97%

对我来说,预测的准确性令人瞠目结舌。

在这篇文章中,我提供了一个总结,什么去计划,什么没有,什么见解可以从这些结果中得出。

我对 2005 年以来的历史数据进行了分析。在绘制了无数的图表,调查了不同类型的相关性之后,我决定了最终的模型。

如果你是一个喜欢盯着图表看的数据狂,或者是一个对功能选择持怀疑态度的数据科学家,看看我以前的工作。

基本模型

我决定将分析分解成一个个县的数据,以说明当地的差异和偏好。这给了我两个数据集,包括每个县的选举结果。一份包括第一轮投票数据,另一份包括决胜投票数据。

在决胜选举中,一切都归结于说服那些在第一轮选举中没有投票给你的人。选民基础的增加对确保你的竞争优势至关重要。

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

**注:**需要注意的是,选民基数是按该县合格选民总数的百分比来衡量的,而不是按投票数的百分比来衡量的。

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

自 2005 年以来,只有两个主要政党的候选人进入了决胜选举——法律与正义党和公民纲领党。我通过对过去三次选举运行上述回归来研究该模型。结果如下:

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

根据 2020 年的趋势进行调整后,预测系数为:

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

与 PiS 的情况类似:

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

最后,我假设这些系数是均匀分布的,并对选举进行了模拟,其中系数被画出,选举结果的实现被记录下来。

在这些模拟中,杜达总统的平均得分为 50.97%,平均投票率接近 65%。

官方结果

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

资料来源:POLITICO 民意调查

如上所述,杜达总统获得了 51.03%的选票,确保了他的第二个任期。看到这个结果与我的预测非常接近,我进一步查看了实际的回归系数。

比较每个县的选民基数增长,我得到了以下结果:

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

我们可以立即看到,在这两种情况下,β0截距都变大了。这意味着两位候选人能够在全国范围内保持一致的支持率。真实截距和预测截距之间的差异主要出现在投票率中,投票率为 68.18%,而预测投票率为 65.49%。

β1系数落在预测范围内,反映了政党动员未使用选民能力的能力。Trzaskowski (PO)的高 beta 1 来自第一轮结果与 Szymon hoownia 的高相关性,实际上将 hoownia 的选民计为 PO。

下面我包括实际增长以及模型的预测范围。

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

相对于第一轮投票中的候选人结果,针对 b0 和 b2 调整候选人增加

有趣的是, beta 2 最终远低于两位候选人的预期。对杜达总统来说,这是因为 Krzysztof Bosak 的选民基础在 PiS 和 PO 之间几乎平分秋色。在 rafatrzaskowski 一案中,原因是 Robert Biedro 和 wad ysaw Kosiniak-kamy SZ 的选民投票率低。然而,这与动员第三方选民的能力下降是一致的,因为两党的β2 系数一直在不断下降。

结论

这是一种实验性的方法,与科学界发表的任何具体方法都没有联系。然而,考虑到波兰社会的两极分化,历史趋势似乎在预测选举结果时发挥了重要作用。

请注意,在逐届选举的基础上,对 PiS 和 PO 候选人的支持相对增加。鉴于我在上一篇文章中谈到的政治环境,偏好会适度变化。因此,利用以前的选举可以给我们很多的洞察力。

此外,传统调查容易导致受访者的行为偏差!在决胜选举之前,拉法茨扎斯科斯基倾向于在包括未决定选民的投票中领先,而杜达则在没有他们的投票中领先。

因此,我深信传统的调查应该根据政治形势和历史趋势进行调整。目前,他们似乎只是复制粘贴受访者的回答,而没有任何更深入的分析。

你怎么想呢?

你认为这个分析遗漏了什么吗?

你认为我的假设是否正确?

也许你想更详细地谈谈这个模型?

随时联系!

[## Cezary Klimczuk —数据科学家|伦敦大学学院毕业生

www.linkedin.com](https://www.linkedin.com/in/cezary-klimczuk-423522129/)

我在 Jupyter Notebook 中使用 Python 进行了所有分析。

我下载并清理了 pkw.gov.pl 的选举数据。请访问我的 GitHub 页面 ,深入探索我的项目!

我如何准备人工智能认证工程师助理认证

原文:https://towardsdatascience.com/how-i-prepared-for-the-ai-certified-engineer-associate-certification-29780464f472?source=collection_archive---------24-----------------------

以下是我给有抱负的人工智能认证工程师助理的建议

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

Unsplash 上由 Hitesh Choudhary 拍摄的照片

截至 2022 年 1 月更新:该职业资格现被重构为特许人工智能工程师(CAIE) ,由人工智能专业人员协会(点击访问 LinkedIn 上的 AIP)管理。之前这是 AI 认证工程师,由 AI Singapore(新加坡国立大学)管理。

我直接跳到了 AI 新加坡公司的首届 AI 认证工程师助理认证

似乎有越来越多的人加入了人工智能/数据科学/机器学习的行列。我们都开始在业余时间看关于机器学习的视频,在 Jupyter 笔记本上绘制一些可视化图形,在媒体上阅读一些关于数据科学的文章,等等。我们今天需要的是一种客观的方法来衡量我们当前的熟练程度来衡量我们已经知道的东西,以及行业当前需要的东西。那么有什么比认证考试更好的方法呢?

如果你不能衡量它,你就不能改善它。—彼得·德鲁克

什么是 AI 认证工程师助理认证?

人工智能认证是一个国家认证和评估框架,以承认在人工智能相关的工程角色的工作专业人员的证书。

评估框架验证申请人的技术能力和经验,并向通过同行和公认的人工智能从业者评估面试的人授予认证证书。

—来源:艾新加坡网站

有 4 个不同的级别来衡量人工智能工程中的 4 个能力级别:

  • AI 认证工程师助理
  • AI 一级注册工程师
  • AI 认证工程师二级
  • AI 三级注册工程师

对于这篇文章,我将只谈论人工智能认证工程师助理。要了解更多关于其他认证的信息,请随意浏览 AI 新加坡网站。

人工智能认证工程师助理是指理解主要人工智能框架和云基础设施并构建解决业务问题的人工智能模型的个人。

这个级别的认证是针对那些还没有人工智能相关工作经验的人。

个人应具备的技术知识和技能包括:

  • Python 背景

-了解数据库并运行基本的 SQL 查询

-了解并熟悉软件工程、人工智能云服务、数据工程、数据管理和数据科学

—来源:艾新加坡网站

这听起来像是你可能感兴趣的事情吗?然后继续读下去,找出我认为这个证书值得考的理由,以及我要准备的一些小技巧。

免责声明:

文中表达的观点、想法和意见仅属于作者,不一定属于作者的雇主、组织、委员会或其他团体或个人。

我为什么要参加这个考试?

有许多职业倾向于甚至要求某种证书来执业。根据我的观察,这些人包括会计师、医生、律师等等。但是在这个时代,我相信开发和工程生产就绪的人工智能/人工智能系统正迅速成为下一个也更喜欢甚至可能需要有人拥有这种证书的职业之一。

证书是客观上给予雇主对雇员能力的信心和信任的方法之一。对我来说,现在就开始总是比不开始好,在数据科学这样一个快速发展的领域,我很欣赏证书提供的保证,即我的技能(当然在一定程度上)仍然是最新的。此外,主动这样做表明你对提升自己感兴趣,表明你是一个积极主动的人,当然这将使你脱颖而出,并在雇主(现有或潜在的)眼中增加价值。

100%的受访者同意在招聘过程中优先考虑行业认证— 来源:HR . com 的调查—

你们中有多少人能对下面的自我对话产生共鸣:我真的知道我在做什么吗?我做事情的方式正确吗?我到底做对了什么??当我忙于数据科学产品开发工作和计算机科学硕士学位承诺时,我经常问自己这些问题,我来自商业管理背景。所以当我看到有一个通过认证来证明自己的机会时,我决定抓住它,我确信确保你步入正轨的一个方法是开始通过这样的认证考试来衡量你自己的熟练程度。

最后,当然同样重要的是,当你自豪地展示认证时,你会有一些成就感和吹嘘的权利。这也让你在 LinkedIn 上有更多的曝光率,这可以让你进入你想去的理想公司面试。

所以我给这里的观众的第一个建议是花些时间思考一下你为什么要做这个证书。如果你清楚自己的目标,知道这是成功的一半。我希望我已经使你相信接受这样一个证书的价值。

那么在这个认证考试中我能期待什么呢?

你将有一个技术测试,大约 5 天的时间来完成它。这个测试挑战你在这些广泛领域的实践知识:

  1. **数据提取。**您能够使用 SQL 和 SQLalchemy 从数据库中提取数据吗?用 python 熊猫从 csv 平面文件读取?
  2. **探索性数据分析。**能在 jupyter 笔记本上做一个全面的 EDA 吗?做 EDA 有没有很强的框架和思维过程?最重要的是,你能构建和组织你的 EDA,使之易于理解吗?
  3. 机器学习/数据科学。你能处理原始数据吗?为所需的数据处理步骤辩护?为数据选择合适的机器学习模型?集成几个机器学习模型(如果合适的话)?用适当的指标定义每个模型并对其评分,以判断最佳模型?选择需要什么输出(例如:度量/图表)来维护你的模型?
  4. **软件工程。**你能建立一个从原始数据到“部署的”机器学习模型的端到端管道吗?在 Linux 中从命令行调用你的模型 API?您的程序是否易于配置,以便最终用户决定使用哪些参数或算法?

免责声明 :我没有正式的评测标准,以上列表也绝非详尽。

测试结束后会有一个简短的面试,给你 10 到 15 分钟的时间来演示和运行你提交的整个工作流程。接下来的 10 到 15 分钟是问答时间,你必须为你的模型辩护,并准备好描述算法、统计、数学和数据科学的概念。因此,不要忘记另一个重要的方面:

  1. **沟通。**你能够清晰简洁地交流你的 EDA 发现和见解吗?解释一下你为什么用那个模型而不用另一个模型?解释你选择的模型的局限性?

似乎很刺激(或者说势不可挡)!我该如何为此做更好的准备?

  1. 找到一个有趣的数据集。你可以选择从这个链接进行练习。
  2. 使用数据集制定您自己的清晰的问题定义/陈述来解决。
  3. 把手弄脏!在 EDA、数据清理和预处理、绘制图像和解释这些方面有很多乐趣。
  4. 尝试不同的机器学习模型。尝试 scikit learn 上所有不同的回归变量。确保你知道你在做什么,如何解释你的步骤!另一个建议是:在你有一个自信的基线模型之前,不要从神经网络或任何非常花哨的东西开始,基线模型可以像线性回归一样简单。
  5. 将所有这些放在一个 python 脚本中,并使用 Linux bash 脚本运行它。更改您的配置文件(或命令行参数),您的程序应该仍然像预期的那样工作。试用您的程序!额外收获:如果你能展示出测试驱动开发(pytest)和版本控制(git)的知识,这肯定会让你脱颖而出!
  6. 练习交流你的想法。单靠技术技能和硬技能是不足以成功的。你需要能够吸引观众,用你的数据讲述故事。用你的发现给利益相关者留下深刻印象,并说服他们在从数据中提炼出所有见解后采取适当的行动。毕竟,一旦你重新进入这个行业,这是意料之中的。
  7. 额外收获:准备一份关于你的方法、设计、发现、见解和行动的高级演示文稿,就好像你正在向客户做一份重要的演示文稿,让他们相信你的产品的有用性,以及你如何向他们提供商业价值。
  8. 只有当以上所有步骤都完成了,你才能认为一个项目完成了,你才会更有信心为技术测试处理类似的东西。

最后的建议:

通过在线视频学习数据科学/机器学习/人工智能,甚至单独通过视觉阅读文章,不幸的是,这不是最高效的学习和实践方式。我甚至敢说:不要再学新东西了!(目前),并开始应用和整合所有你已经知道的知识,然后在需要的时候填补空白。

动觉学习者在这里有一个观点。多做副业,把自己的技能用到实际中去。自豪地在像 Github 这样的公共知识库上展示你的作品。永远记住你给最终用户带来了什么价值,并尽你所能与他们交流。祝你好运!

附注:在撰写本文时,下一轮申请是在 2020 年第四季度。有充足的时间练习。现在走吧!

关于作者

Albert Bingei 是人工智能认证工程师助理,新加坡一家初创公司的全职顾问,佐治亚理工学院的兼职硕士 CS(机器学习)学生。

Albert 拥有设计和构建基于 python 的优化引擎的经验,该引擎将机器学习模型应用于实时流数据,以影响工程控制系统来提供商业价值。

请通过 LinkedinMediumGithub 联系艾伯特

我如何准备 AWS 认证机器学习专业

原文:https://towardsdatascience.com/how-i-prepared-for-the-aws-machine-learning-speciality-certification-10834924d192?source=collection_archive---------2-----------------------

我如何准备 AWS 认证机器学习-专业,我使用了什么资源,我如何规划我的时间,以及通过考试的技巧

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

作者图片

介绍

我最近刚刚以超过 95%的成绩通过了 AWS 认证机器学习专业考试,进行了大约 4 周的明确准备。

通过这篇文章,我想分享:

  • 在开始准备这个考试之前,我对 AWS 和机器学习了解多少?
  • 我采取了什么方法来准备这次考试?
  • 我用了哪些资源来准备?
  • 我用什么工具来帮助我?
  • 备考小贴士

我的背景

首先,让我给你介绍一下我的背景,包括机器学习和 AWS 方面的知识。我原本是一名流体力学工程师,在英国一家工程咨询公司的石油和天然气团队工作。我选择参加这个考试的原因是为了验证我对端到端机器学习的理解,并发展我在为云上的机器学习系统构建可靠有效的架构方面的知识。虽然我通过在线课程(训练营)、研讨会和黑客马拉松学习数据科学已经有一段时间了(不到两年),但我在数据科学领域还是一个相当新的人,作为数据科学家的专业经验还不到 1 年。就 AWS 而言,我也是新手,更不用说,我在预订 AWS ML 专业考试之前通过了 AWS 认证云从业者考试。我在这方面没有太多的专业经验,我在一些学习项目中使用过它,作为课程/研讨会和小型自由职业项目的一部分;但是和 AWS 官方推荐的不太接近。

首先成为 AWS 认证的云从业者

既然我们正在讨论云从业者考试,我想提一下,在您预订 ML 考试之前准备并通过云从业者考试当然是强烈推荐的,原因有二:

  • 云从业者考试,让您很好地理解云概念和各种 AWS 服务,包括 S3、EC2、IAM 用户、角色和策略、云安全性、可扩展性、弹性、容错、共同责任模型、架构良好的框架和其他基础知识,这在准备 AWS ML 专业认证时非常有帮助。
  • 云从业者考试费用为 100 美元,ML 专业考试费用为 300 美元,但如果您参加过云从业者考试,则下次 AWS 考试可享受 50%的折扣,总共只需 250 美元(两次考试加在一起),节省了 50 美元,并且您还可以获得一次免费的实践考试。模拟考试要短得多,只有 20 个问题,而真正的考试有 65 个问题。

理解考试内容

考试分为 4 个领域:数据工程(20%),探索性数据分析(24%),建模(36%)和 ML 实施与操作(20%)。根据我在准备和考试期间的经验,EDA 和建模方面的内容可以很好地平衡您对主题本身以及 AWS 特定服务的理解,而数据工程和 MLOps 领域则稍微偏重于 AWS。因此,你应该做好两者兼而有之的准备,一个好的 ML 工程师,以及一个好的 AWS 工程师在考试中竭尽全力。

提示 1:做好两者兼而有之的准备,一个好的 ML 工程师,以及一个好的 AWS 工程师都要在考试中尽最大努力。

准备、资源和规划

我提前一个月开始准备,并在考试前 10 天预定了考试。在我预约考试的时候,我觉得我已经准备好了一半。在文章的这一部分,我将简要讨论我是如何准备考试的,以及我利用了哪些资源来最大化我通过考试的机会。完整的参考资料列表也可以在文章末尾找到。

当我开始准备时,我准备考试的方法并不完全清楚。但事实证明这是一个好主意,帮助我通过考试。最初,我从 AWS 和外部供应商的课程开始准备,后来用大量时间阅读其各种服务(主要是 Sagemaker)的 AWS 开发者文档来支持它,最后用大量的实践测试来支持,更不用说我已经从《用 Scikit-Learn、Keras 和 Tensorflow 实践机器学习》一书中阅读了机器学习和深度学习的基础知识。这些并不是按顺序进行的,但视频课程肯定是第一步。就我用于准备考试的时间而言,我会说大约每天 4 到 6 个小时,持续大约 4 周。这包括课程(以 1.25 倍或 1.5 倍的速度跑)和上面提到的所有其他课程。如果你每天花更少的时间或者更详细地浏览它,你可能想把它延长一段时间。

入门:机器学习之路

首先开始的地方是 AWS 建议备考的这条机器学习路径。在这条道路上,我主要关注两门课程,数据科学的要素和考试准备课程。《数据科学的元素》涵盖了数据科学的基础知识,如果你想参加这个考试,你应该知道很多,但这仍然是一个很好的复习。下一步是考试准备课程,该课程简要介绍了每个领域和子领域中您需要了解的所有内容。它只是概述了主题,你可以用它作为参考来检查你的准备情况。当我浏览课程内容时,我将整个课程内容作为笔记&截图,我后来不时地参考这些内容,以保持自己的进度。两者加起来最多需要 3-4 天。到目前为止,除了课程中的小测验之外,我没有阅读任何文档或练习题。

提示 2:多次快进你的学习,而不是一次一次地慢慢复习

进入 SageMaker

下一站,我开始从头开始浏览 sagemaker 文档,一个接一个,包括:什么是亚马逊 SageMaker?入门SageMaker 工作室笔记本实例。这些是最入门和初学者友好的部分,我在 SageMaker 控制台上跟随。作为补充,我还开始观看亚马逊 SageMaker 技术深潜系列,在我准备期间,我发现它非常有用。这是一系列 16 个视频,平均每个 15 到 20 分钟,我在接下来的日子里泡茶或吃早餐时不连续地观看。此时,我已经准备了大约一周半。

深入潜水:课程 1

在我完成 SageMaker 的最初部分后,我偶然发现了视频课程, AWS 认证机器学习专业 2020-动手!夏羽·马瑞克和弗兰克·凯恩。为了节省时间,我没有亲自动手做所有的事情,但我确实完成了整个课程,观看了每一个视频,以便对考试内容有一个更全面的了解。这门课程当然会涉及大部分内容,包括一些你应该知道的机器学习的概念,但是这还不足以通过考试。你必须对机器学习和深度学习的基础有更好、更透彻的理解。这让我度过了第二周的周末。

中途:课程 2 和 SageMaker 文档

接下来我上了 WhizLab 的 AWS 认证机器学习——专业视频课程。这与之前的课程类似。当我经历这些的时候,我已经开始挑选一些主题每天阅读 AWS 的开发者文档;例如深度的特定算法,或者各种人工智能服务之一。对于我选择阅读的每一个算法,我会从头到尾阅读 sagemaker docs 必须传达的所有内容,通常每篇 3 到 5 页。这将包括诸如底层概念、预期的输入/输出格式、要调优的超参数等细节。对于每一个人工智能服务(例如 AWS 的理解),我会通读它的功能,常见问题,并简要看看它的开发者指南,只是为了更好地了解它提供了什么。还有 8 天就要考试了。

技巧 3:阅读大量 SageMaker 文档,以至于您确切地知道在哪里可以找到什么信息。如果可能的话,多看几遍。

最重要的一点:练习测试

到那时,我已经完成了课程并对内容有了很好的理解,我从各种来源收集了大量的练习题和论文,包括 Udemy、EXAMTOPICS、testprep 和 AWS 网站上的样题。即使考试中的问题并不完全相同,但至少模拟测试促使我学习了考试可能需要的各种主题。我开始进行模拟测试,每天至少一次,当测试结束时,我会重新开始。完成每篇论文后,我会查看答案及其描述,并通读所有提供的参考资料。

抓住主题并掌握它们

当有如此多的东西需要学习时,很容易被内容淹没,忘记自己已经掌握了什么,还需要在哪些方面更加努力。对于我遇到的每一个难题或我回答错误的问题,我都用一个易于理解的标题、参考资料和链接来捕获这些问题或主题,并按考试领域和复习状态标记到一个概念数据库中,这使我能够建立一个看板来掌握我的学习情况。这是它的快照。

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

修订主题的概念数据库,按作者分类的图像

对于每一个主题,我还会捕捉到我读到的最重要的细节,这样我就不需要重新查阅参考资料了。

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

修订主题的子页面,按作者排序的图像

对于我捕捉到的每个主题,我都反复查看,直到我有信心为止,每次访问它时都会更新查看状态。这种策略几乎类似于那些助推算法中的一种,其中你递归地训练弱学习者以形成强学习者。我发现这套有条理的笔记非常有用,尤其是在临近考试的时候。

技巧 4:练习大量的测试,捕捉要学习的主题和问题,组织它们,并反复复习。

规划时间

为了跟上课程、文档阅读和练习测试,我计划了每天的时间,以确保我涵盖了所有三个方面,并跟踪我的时间,例如,2 小时用于论文,1 小时用于阅读,1 小时用于观看课程视频,更不用说,阅读和视频几乎总是针对我决定掌握的专门主题。甚至在我完成了一次课程视频后,当我临近考试时,我又看了一遍建模和数据工程部分。在过去的两天里,我只是反复检查我在概念数据库和练习试卷中标记的考试题目。

技巧 5:计划你的时间,记录时间,在阅读、视频和练习题之间合理分配时间,更具体地说,分配到不同考试领域的主题

就在考试前和考试后

就在考试前,我必须承认,经过几周的训练和练习,我仍然感到紧张。老实说,我不确定我能不能通过。但是我已经承诺不会改变考试日期,所以别无选择。然而,通过考试是数周强化学习后最愉快的经历。因此,我强烈推荐这个考试给任何对使用 AWS 感兴趣的数据科学家/ML 工程师。AWS 是领先的云服务提供商之一,通过自己在云中的一套强大的算法和人工智能服务,无疑主导了 ML 领域。

提示 6:你可能会感到有点紧张,但如果你付出了努力,你肯定会得到回报。

资源列表

课程和视频讲座

需要阅读的文件和书籍

我如何使用 CNN 为我的文本分类任务使用正则表达式预处理文本数据

原文:https://towardsdatascience.com/how-i-preprocessed-text-data-using-regular-expressions-for-my-text-classification-task-cnn-cb206e7274ed?source=collection_archive---------17-----------------------

使用正则表达式进行预处理的步骤

  1. 从文件名中提取标签和文件编号
  2. 提取电子邮件
  3. 提取主题
  4. 去收缩
  5. 正在从以下位置删除写入:
  6. 删除括号<>、()中的数据
  7. 删除换行符、制表符
  8. 分块预处理人名和城市名
  9. 移除数字
  10. 使用匹配将“word”、“word”、“word”替换为 word 会捕获
  11. 多方面的

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

介绍

自然语言处理是人工智能中处理语言数据的一个分支。它基本上是一个研究人和机器之间互动的分支。机器翻译、文本到语音、文本分类——这些是自然语言处理的一些应用。

在本文中,我将使用 1D 卷积神经网络对文本数据进行分类,广泛使用正则表达式进行字符串预处理和过滤。

本文的重点是如何使用正则表达式进行文本数据预处理

问题陈述

数据是新闻组 20 数据集。我们的数据中总共有 20 种类型的文档。文档的名称包含标签和标签中的编号。格式为**’ class label _ DocumentNumberInThatLabel '。**数据可以从这里下载。

我们的任务是对文本数据进行预处理,并将其分类到正确的标签中。

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

类别标签的计数图

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

示例数据(我们将在整篇文章中跟踪这些数据)

使用正则表达式预处理

我们已经创建了一个函数,它将原始数据作为输入,并将经过预处理的过滤数据作为输出。

I .从文件名中提取标签和文件编号

我们将使用适用于字符串的拆分方法。

1   for filename in os.listdir(path):
2       i,j = filename.split('_')
3       j = int(j.split('.')[0])
4       label.append(i) 
5       doc_num.append(j)

对于路径中的所有文件名,我们获取文件名并将其拆分为“_”。该功能。split()使用 paranthesis 中的元素来拆分字符串。同样,我们再次使用它来过滤。文件名中的 txt

**Ex.- we get i = talk.religion.misc and j = 82778**

二。提取电子邮件

我们的任务是找到一个文档中的所有电子邮件,提取“@”后的文本,并用“.”分割,去掉所有小于 3 的字,去掉”。com”。将所有内容组合成一个字符串。最后,我们将电子邮件从我们的文本中删除。

Ex.-
**[bskendig@netcom.com , joslin@pogo.isp.pitt.edu] →** **[netcom, pogo.isp.pitt.edu] → [netcom, pogo, isp, pitt, edu] →****“netcom pogo isp pitt edu”**

以下代码执行任务

em = [] # for each doc
st = ""  # for each doc#extracting email
for i in re.findall(r'[\w\-\.]+@[\w\.-]+\b', f):  #extracting email 
    temp=[]
    temp = i.split('@')[1]      #taking text after @
    temp = temp.split('.')     #a list containing words split by "." if 'com' in temp:
        temp.remove('com')

   for i in temp:            #removing words less than 3
        if len(i)>2:
            em.append(i)for i in em:            #joining all the words in a string
    st+=i
    st+=' 're.sub(r'[\w\-\.]+@[\w\.-]+\b',' ')    #removing the email

正则表达式解释

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

\w → 匹配任何字母数字字符

-\。→ 匹配“-”和。”(“\ "用于转义特殊字符)

[]+ → 匹配括号内的一个或多个字符

……………………………………………………。@ → 匹配[\w-\后的“@”。]

三提取主体

在这项任务中,我们将只保留来自主题部分的有用信息。**主题:**将被删除,所有非字母数字字符将被删除。以下代码执行任务-

#extracting subject
temp1 = re.findall(r'^Subject.*$',f, re.MULTILINE)sub = temp1[0]
sub = sub[7:]   #Truncate Subjectfor i in string.punctuation:   #remove all the non-alphanumeric
    sub = sub.replace(i," ") sub = re.sub(r"re","",sub, flags=re.IGNORECASE) #removing Re sub = sub.lower()  #lower-casingre.sub(r'Subject.*$'," ", flags=re.MULTILINE)  #removing subject

正则表达式解释

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

^ → 占了字符串的开头。

Subject → 匹配字符串的开头是单词 Subject。

* →匹配主题后的 0 个或多个单词。

$ →检测字符串的结尾。

注意:^”对于确保 Regex 只检测标题的“主题”很重要。它不应该在我们文本的任何其他部分检测到单词“subject”。

四。去收缩

用我会代替我会,用不能代替 T21 等等…

# specific
f = re.sub(r"won't", "will not", f)
f = re.sub(r"can\'t", "can not", f)# general
f = re.sub(r"n\'t", " not", f)
f = re.sub(r"\'re", " are", f)
f = re.sub(r"\'s", " is", f)
f = re.sub(r"\'d", " would", f)
f = re.sub(r"\'ll", " will", f)
f = re.sub(r"\'t", " not", f)
f = re.sub(r"\'ve", " have", f)
f = re.sub(r"\'m", " am", f)

动词 (verb 的缩写)正在从以下位置删除写入:

删除写在“写给:”和“发件人:”下的地址等内容。

f = re.sub(r"Write to:.*$","",f, flags=re.MULTILINE) f = re.sub(r"From:.*$","",f, flags=re.MULTILINE) f = re.sub(r"or:","",f,flags=re.MULTILINE)

注意- “$” 匹配字符串的结尾只是为了安全

六。删除括号内的数据< >,()

删除括号内的所有数据。

我的名字是拉梅什(钦图)→我的名字是拉梅什

f = re.sub(r"<.*>","",f, flags=re.MULTILINE) f = re.sub(r"\(.*\)","",f,flags=re.MULTILINE) 

VII。移除换行符、制表符

#delete /,-,/n,f = re.sub(r"[\n\t\-\\\/]"," ",f, flags=re.MULTILINE)

八。组块

组块是基于词性标注从句子中提取有价值的短语的过程。它给句子增加了更多的结构,帮助机器更准确地理解句子的意思。你可以阅读尼基塔·巴查尼的这篇文章,她详细解释了分块。

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

组块的例子

我们的任务是在组块的帮助下删除城市名并给城市名添加下划线。Ex- Ramesh 将被删除,新德里→新德里

chunks=[]
chunks=(list(ne_chunk(pos_tag(word_tokenize(f)))))for i in chunks:
    if type(i)==Tree:
        if i.label() == "GPE":
            j = i.leaves()
                if len(j)>1:   #if new_delhi or bigger name
                    gpe = "_".join([term for term,pos in j]) f = re.sub(rf'{j[1][0]}',gpe,f, flags=re.MULTILINE)              #replacing delhi with new_delhi f = re.sub(rf'\b{j[0][0]}\b',"",f, flags=re.MULTILINE)       #deleting new, \b is important if i.label()=="PERSON":           # deleting Ramesh         
            for term,pog in i.leaves():
                f = re.sub(re.escape(term),"",f, flags=re.MULTILINE)

正如我们上面看到的,组块有三个部分- 标签,术语,词性。如果类型是树,标签是 GPE,那么它是一个地方。如果这个地方有不止一个单词,我们用“_”将它们连接起来。

f = re.sub(rf'{j[1][0]}',gpe,f, flags=re.MULTILINE)
f = re.sub(rf'\b{j[0][0]}\b',"",f, flags=re.MULTILINE)

我们一起使用了格式字符串和正则表达式。“j”包含叶,因此 j[1][0]包含第二项,即德里,j[0][0]包含第一项,即新。所以,我们把德里换成了新德里,删掉了 new。\b 是检测单词的结尾。

f = re.sub(re.escape(term),"",f, flags=re.MULTILINE)

为了删除 Person,我们使用了 re.escape ,因为这个术语可以包含一个字符,这个字符对于 regex 来说是一个特殊的字符,但是我们想把它仅仅当作一个字符串。

九。移除数字

f = re.sub(r'\d',"",f, flags=re.MULTILINE) 

X.将“word”、“word”、“word”替换为 word

f = re.sub(r"\b_([a-zA-z]+)_\b",r"\1",f) #replace _word_ to word

f = re.sub(r"\b_([a-zA-z]+)\b",r"\1",f) #replace_word to wordf = re.sub(r"\b([a-zA-z]+)_\b",r"\1",f) #replace word_ to word

这里,我们使用一种叫做的匹配捕获。

在我们使用“ **\b_([a-zA-z]+)_\b”获得字符串之后,**匹配捕获使我们能够只使用匹配字符串的特定部分。这里我们在下划线之间有一组并列句。因此这里有一组。我们使用 r ‘\1’ 来提取特定的组。简单的例子来解释这个概念。

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

有两个参数,所以有两个匹配捕获

XI 杂项

{m,n} →这用于匹配 m 和 n 之间的字符数。m 可以是零,n 可以是无穷大。

f = re.sub(r"\b[a-zA-Z]{1}_([a-zA-Z]+)",r"\1",f) #d_berlin to berlinf = re.sub(r"\b[a-zA-Z]{2}_([a-zA-Z]+)",r"\1",f) #mr_cat to catf = f.lower()      #lower casef = re.sub(r'\b\w{1,2}\b'," ",f) #remove words <2f = re.sub(r"\b\w{15,}\b"," ",f) #remove words >15f = re.sub(r"[^a-zA-Z_]"," ",f)  #keep only alphabets and _

f = re.sub(r" {2,}", " ", f, flags=re.MULTILINE) # REMOVE THE EXTRA SPACES

最终数据准备

如前所述,整个预处理被放在一个返回五个值的函数中。将我们的数据传递给这个函数-

doc_num, label, email, subject, text = preprocessing(prefix)

创建包含预处理的电子邮件、主题和文本的数据帧。类别标签已被整数取代。

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

预处理文本是这三者的串联

…向量化…

在将数据分成训练和测试(0.25)之后,我们将数据矢量化成算法可以理解的正确形式。我们已经使用了来自 keras 的 tokenizer 函数,它将用于嵌入向量。

最后对文本进行编码并填充,创建统一的数据集。

模型

我们训练该数据集的模型由三个’**一维卷积’**层组成,这些层连接在一起,并通过下面给出的其他各层。

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

最后一块是我们的最终输出(softmax,categorical _ crossentropy)

结论

在训练模型之后,我们得到大约 75% 的准确率,这可以通过在模型中做一些调整来容易地进一步提高。本文的主要焦点是预处理部分,这是比较棘手的部分。

我是如何在 Julia 中编写第一个 Hone 扩展的

原文:https://towardsdatascience.com/how-i-programmed-the-first-hone-extension-in-julia-edf7813d0e1b?source=collection_archive---------85-----------------------

Hone.jl

在 Julia 中创建和使用我的绘图库的扩展。

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

Github 回购

介绍

当我最初为 Julia 创建矢量绘图库 Hone.jl 时,我希望有一个模块化的绘图库,可以由任何人扩展。使用这种方法,用户将能够创建包扩展来增加功能,并使它成为一个更好的通用库。

创建一个能够做这样事情的包说起来容易做起来难。然而,这个想法对我很有吸引力,因为据我所知,真的没有其他图形库做这样的事情。对朱莉娅来说尤其如此。不幸的是,在我们开始创建一个 Hone 扩展之前,我们必须增加一些代码。

为 Hone 添加扩展

从相对早期的版本开始,Hone 就有了可扩展的能力。然而,这个系统并不是最好的。它使用一个名为 custom 的参数,用户可以在其中输入要作为元表达式计算的串联标记。像这样处理扩展有几个基本问题,会降低 Hone 扩展的可行性。

  • 需要有一个自定义条件
  • 输入标记需要连接,或者是连接在函数中的数组。
  • 对于没有使用扩展的人来说,这将会降低功能的速度,使得 Hone 运行更慢,但没有任何好处。

这里是代码,所以你可以理解我指的是什么。所有提及“自定义”的内容均以粗体显示。

function _arrayscatter(x,y,shape=Circle(.5,.5,25),axiscolor=:lightblue,
        debug=false, grid=Grid(3), **custom=""**, frame=Frame(1280,720,0mm,0mm,0mm,0mm))
   topx = maximum(x)
    topy = maximum(y)
    axisx = Line([(0,frame.height), (frame.width,frame.height)],axiscolor)
   axisx_tag = axisx.update([(-1,-1), (-1,1), (1,1)])
    axisy = Line([(0,0), (0,frame.height)],axiscolor)
    axisy_tag = axisy.update([(0,0), (0,1), (0,1)])
    grid_tag = grid.update()
    ######
    ######
 **fullcustom = ""
    if custom != ""
        [custom = string(fullcustom, i) for i in custom]
    end**
    expression = string("")
    # Coordinate parsing -------
    for (i, w) in zip(x, y)
        inputx = (i / topx) * frame.width
        inputy = (w / topy) * frame.height
        exp = shape.update(inputx,inputy)
        expression = string(expression,string(exp))
    end
    expression = string(expression, "(context(),", axisx_tag,grid_tag,**custom**, axisy_tag,"),")
    tt = transfertype(expression)
    frame.add([tt])
    if debug == true println(expression) end
    composition = eval(expression)
    show() = frame.show()
    tree() = introspect(composition)
    save(name) = draw(SVG(name), composition);
    get_frame() = frame
    (var)->(show;composition;tree;save;get_frame)
end

量化一下,这段代码总共有 34 行。与 custom 相关的行数总共是 6,这意味着 17%的代码行属于 custom,而大多数时候它根本不会被使用。也许我疯了,但是

我不能忍受这个。

此外,每当我创建框架函数时,我都会创建一个名为 add()的方法,您可以在其中向框架添加一个对象。我想到,使用这种方法来添加任何扩展对象都比使用定制标签优越得多,也比让用户获取标签并将它们连接起来以使用旧系统容易得多。因此,在从 _arrayscatter()和 _dfscatter()函数中清除了所有出现的 custom 之后,我决定改进框架,以便能够接受这些对象。

add(object) = composition,objects,tag = _frameup(base,objects,object)

add 方法只是调用 _frameup 方法,并将为它提供框架的基本标记“base”、对象的迭代列表“objects”和 object。以前,旧的 add()方法是这样的:

add(objects) = composition,objects,tag = _frameup(base,objects)

这意味着几件事。首先,对象不会被添加到对象列表中,而是替换对象。更糟糕的是,提供的对象需要在一个数组中,函数才能工作(因为不能迭代单一类型。)这只是意味着当调用函数时,您需要使用数组语法:

# This is how you would expect it to work:
frame.add(object)
# This is the change you needed to make:
frame.add([object])

我不喜欢这样,因为它假设一个数组存在于一个对象中,而这个对象很可能永远是单独的。当然,这个函数只是 _frameup()方法的一个路由器,所以让我们来看看:

function _frameup(tag,objects)
    for object in objects
       tag = string(tag,"(context(),",object.tag, ")")
    end
    tag = string(tag,")")
    println(tag)
    exp = Meta.parse(tag)
    composition = eval(exp)
    return(composition,objects,tag)
end

对象只是连接到字符串,然后在解析和计算之前添加到表达式中。相反,应该做的是将对象添加到由类型提供的对象数组中。之后,可以将一个字符串与每个对象的标签连接起来。我是这样做的:

function _frameup(tag,objects,object)
    push!(objects, object.tag)
    objecttags = ""
    for o in objects
       objecttags = string(objecttags,"(context(),",o, "),")
    end
    println("objects: ",objecttags)
    tag = string(tag,objecttags,")")
    exp = Meta.parse(tag)
    println(exp)
    composition = eval(exp)
    return(composition,objects,tag)
ends

最后,我将向 _arrayscatter()和 _dfscatter()函数添加一个方法,该方法将调用框架来添加特性:

add(obj) = frame.add(obj)

现在我们来测试一下!

首先,我们将创建一个圆。这是我们将要添加到散点图顶部框架中的对象。我还创建了两个相同长度的数组来解析并绘制成散点图。

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

现在我们将创建我们的散点图。幸运的是,如果我们不记得我们的参数,Hone 有很好的文档可以参考。

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

plt = Scatter(x,y,Circle(.5,.5,25,:orange),:purple)

现在我们可以使用 show()方法:

plt.show()

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

我们可以把之前做的例子加进去,再展示一次。

plt.add(exampshape)
plt.show()

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

哎呀,

我们忘记将我们的方法添加到我们的类型中:

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

您可能已经注意到,幸运的是,我们确实有一个 get_frame()函数,我们可以调用它来返回我们的帧,并且我们可以从那里添加它。

fr = plt.get_frame()
fr.show()

这时我意识到我们把形状的 x 和 y 分别设置为 0.5 和 0.5,所以让我们改变一下…这次我们把它放在图的中心。这次我决定用文字:

realshape = Hone.Text("Greetings",(1280 / 2), (720 / 2), :blue, 30)
fr.add(realshape)
fr.show()

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

厉害!

创建扩展

众所周知,数据可视化和机器学习可以很好地结合在一起。考虑到这一点,我决定基于车床机器学习库对 Hone 进行第一次扩展。这也将是 Hone 的统计图的家,因为他们将使用车床模块。女士们先生们,我向你们介绍

LatheHE.jl

我决定给这个扩展添加的第一件事是绘制最佳拟合线的能力。这将相对容易,所以不要期望我一开始就做什么疯狂的事情。然而,要做到这一点,我们必须导出散点图方法中使用的所有数据,以便任何人在扩展图时都可以访问这些数据。所以回到 Hone,我只是将数据添加到类型中:

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

现在回到我们的最佳拟合线示例,我们可以使用 plt.x 和 plt.y 从我们的图中获取数据。为了制作最佳拟合线,我们可以采用几种方法:

  • 拟合线性回归模型。
  • 分离数据,得到所述数据每一部分的平均值,然后用这些点画一条线。
  • 线性绘制四分位数。

我决定选择第二种方法,因为我认为这种方法可以获得最好的结果,同时对性能的要求也最低。车床.预处理有一个名为 SortSplit 的函数。要查看它的文档,我们需要首先将其导入到我们当前的环境中。

using Lathe.preprocess

然后我们可以在文档窗格中搜索它。

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

朱诺太方便了…

当然,第一步是从参数中获取数据,这是我设置函数的方式:

function BestFit(plt, divisions = 5, color = :lightblue, weight = 2)
        frame = plt.get_frame()
        x = plt.x
        y = plt.y

我认为像在网格中一样使用分割可能会很酷,这样用户可以确定他们想要分割最佳拟合线的次数,并且它会自动确定这样做的数据百分比。用 1 除以划分的数目将得到一个百分比,我们可以用它来确定我们离创建每个划分还有多远。

divisionamount = 1 / divisions

接下来,我们使用一个 while 循环,该循环不断地将除法量添加到一个变量中,该变量将处理每个除法的逻辑。

lower = 75
        totaldivisions = 0
        arrays = []
        while totaldivisions < 1
            top, lower = SortSplit(y,divisionamount)
            append!(arrays,top)
            totaldivisions += divisionamount
        end

我们在这里所做的只是将数组的小分割版本附加到一个数组中。接下来,我们需要对这个数组做一些实际的操作。

xmeans = [a = mean(a) for a in arrays]

我们将从数组中获取平均值,并将其赋给一个名为 xmeans 的变量。接下来,我们将对 y 值做同样的事情。

lower = 75
        totaldivisions = 0
        arrays = []
        while totaldivisions < 1
            top, lower = SortSplit(y,divisionamount)
            append!(arrays,top)
            totaldivisions += divisionamount
        end
        ymeans = [a = mean(a) for a in arrays]

接下来,为了执行缩放算法,我们需要 y 的顶部和 x 的顶部。

topy = maximum(y)
topx = maximum(x)

现在我们基本上要从 Hone 的 Linear()函数中复制从两个数组生成数组对的循环。如果您想了解关于这个函数的更多信息,我在这里写了一篇关于它的文章:

[## 向我的图形库添加线图

继续构建 Hone.jl 中实现的特性,并调试出现的问题。

towardsdatascience.com](/adding-line-graphs-to-my-graphing-library-eb6447a0c726)

pairs = []
        first = true
        for (i,w) in zip(xmeans,ymeans)
            if first == true
                x = 0
                first = false
            else
                x = (i / topx * frame.width)
            end
            y = (w / topy * frame.height)
            pair = Tuple([x,y])
            push!(pairs,pair)
        end

在这个循环中唯一不同的是有一个新的变量和条件名为 first,它将决定我们是否在第一个循环中。我这样做的原因是为了让这条线总是从左边来。另一种我们可以在这里做 X 的方法是,将框架高度除以划分的数量,然后将原始数量加到自身,直到我们达到划分的数量。这样做将确保该行始终是一个从零开始并在帧的末尾结束的函数。

最后,我们将把帧作为元组数组进行类型断言,创建一个 line 对象,把它放入一个 transfer 类型,而不是返回一个类型,我们只是把它添加到帧中。

pairs = Array{Tuple{Float64,Real},1}(pairs)
        lin = Line(pairs,color,weight)
        expression = string("(context(),",lin.update(:foo),")")
        tt = Hone.transfertype(expression)
        frame.add(tt)
end

现在让我们来试试吧!

plt = Scatter(x,y,Circle(.5,.5,25,:orange),:purple)
include("src/LatheHE.jl")
using Main.LatheHE
LatheHE.BestFit(plt,2)
plt.show()

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

在未来,我可能会考虑像我之前谈到的那样填充 X,而不是像这样,因为我们确实有很多重叠,因为 X 是我们除法的手段。

结论

我对 Hone extensions 的潜力感到非常兴奋!您可以执行任何操作,从创建用于绘制数据的自定义图形,到向绘图添加新要素。最重要的是,一切都变得完全自定义,因为我们使用标签来呈现一切。任何可以适当组合的东西都可以添加到任何框架中。

我看到未来有很多延伸。也许有些很简单,只是添加了一些你可以使用的不同的看起来很酷的图例。也许一些或更复杂,实际上动画你的情节或添加 Javascript 的交互性——可能性是无限的!如果你想开始制作自己的 Hone 扩展,你可以添加#Unstable 分支以获得最新版本(0.0.4)并开始试用它!

[## emmettgb/Hone.jl

模块化的形状,网格和线条容易预制快速绘图简单和轻型车床集成(即将推出)…

github.com](http://github.com/emmettgb/Hone.jl)

我如何发布了一个应用程序和模型来对 85 种蛇进行分类(你也可以这样做)

原文:https://towardsdatascience.com/how-i-published-an-app-and-model-to-classify-85-snake-species-and-how-you-can-too-c13ac8fdb6c?source=collection_archive---------40-----------------------

从 MOOC 到现实,你如何成为一名实践者,如何克服项目过程中的任何挑战!

为什么?

我刚刚完成了最后一门 MOOC 课程,不禁想知道自己是否准备好开始一个项目。我吓坏了,害怕了,缺乏自信。然而,经过数周的沉思,我咬紧牙关,宣布我将创建一个简单的图像分类模型。

现在我有一个在 Play Store 上正式可用的应用程序和一个带有开源代码的 GitHub repo 。我想解释一下我所面临的障碍以及我在克服这些障碍时所学到的经验(希望这也能帮助你)!

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

封面图片来源于此处

我的旅程

简而言之,我犯了很多错误,这也正是我学习的方式。谷歌图片报废让我体会到创建一个包含 120,000 张图片的数据集所付出的努力。从线性回归开始是一个重大的、愚蠢的和可笑的错误,但它教会了我 CNN 的预先训练好的模型的第一手价值。在这样的任务中尝试线性回归也迫使我去发现神经网络是如何工作的以及为什么会工作!一个普通的预训练模型的长训练时间和平庸的结果使我发现了超级收敛!

我的错误就像一个个阶段,如果没有每一个阶段,我就不会学到我所学的全部内容

好处

一个显而易见的问题是,既然免费的 MOOC 可以教授相同的内容(甚至可能花费更少的时间和精力),为什么还要克服一个又一个障碍呢?我已经回答了问题,但简而言之,归结为:

你记得你反复使用的信息,并逐渐忘记所有其他的信息

现在,这并不意味着你不去参加任何 MOOC 教程,只是确保你不会陷入“教程地狱”!相反,如果你知道基础知识,那么就把你现在学到的东西应用到创建一个你可以炫耀的又酷又有趣的项目中去!

我克服的挑战

我应该现在开始吗?

你质疑自己目前的技能、知识和理论基础水平的事实表明,你意识到了自己理解的局限性!这并不意味着你很笨,或者没有准备好,相反,你学到了足够多的东西,知道前方还有很多路等着你。

要明白总会有更多的东西要学,所以不妨开始使用你已经知道的东西

我的想法够好吗?

你可以做两件事来判断:

  • 我的想法是不是太简单/复杂了?
  • 问别人

如果你不确定这个项目会有多复杂,考虑一下其他人在类似任务中的表现。找到答案的一个方法是搜索在线文章或研究论文。如果你找到了数百个,那么问题可能太简单了,但是如果你只找到了几个,那可能就不现实了(或者你有一个天才的想法)。手头的主题知识是必须的,所以只要研究这个主题,看看你会发现什么!

如果你还没有任何与数据科学家的联系,那么你就必须伸出援手(像我一样)!无论如何,我都会尽快这样做,因为在任何情况下,拥有不同的观点总是非常有用的。我个人的方法是联系我附近的数据科学家,说我正在研究机器学习,寻求一些建议。大多数人拒绝,但如果你付出足够多,它仍然有效!

万一失败了呢?

找出为什么你的项目不能工作!

如果找出为什么一个想法行不通不能解开另一个解决方案,那么你已经发现了一些新的东西……这就是一种成就!

我不知道该怎么办!

找出与你试图解决的问题相似的问题。对我来说,我从如何使用 PyTorch 分类数字(MNIST)和更复杂的对象(CIFAR100)的教程开始。我跟着教程走,弄清楚他们是如何完成任务的。然后我使用迁移学习,复制每个教程所做的,但是这次是为了我自己的问题。

当然,我还远远没有准备好应对全部挑战,但是随着时间的推移,我越来越明白了。

如果你仍然停滞不前,你可能真的需要回到书本(或课程)中去。

什么都没用!

只要坚持下去,过一会儿,就会有所收获!在创建我的第一个模型的开始,我的代码都没有运行,但最终(几天后),我设法找到了 bug 并修复了它。我知道如何用 PyTorch 运行培训和评估循环!请注意,通常是一个小小的微小变化最终会使代码复活(所以,四处试验,大量调试,你就会弄明白)。

我不明白一切是如何运作的?

理论可能很难。你可以有一个工作模型,但是不知道迁移学习模型、优化器、损失函数…或者你用过的其他东西是如何工作的。但是训练模型需要多长时间…几小时,几天,几周?如果你能写代码,就这么做,运行它,在它工作的时候学习理论。你们俩的训练然后(双关语)!

这是可行的,但是我如何改进它?

我有一篇关于如何改进你的模型的博文。一旦你有了一个工作模型,看看吧!

创建一个像样的模型后,我做什么?

这是一个循环:

学习,创造,提高,炫耀,冲洗,重复!

只是创建博客,创建项目,然后继续这个循环。

感谢阅读!

既然你已经听了我的漫谈,我想感谢你花时间通读我的博客(或者跳到最后)。

如果这对你有所帮助,请考虑查看如何选择型号

我是如何剔除和分析巴黎人口统计数据的

原文:https://towardsdatascience.com/how-i-scraped-and-analized-paris-demographical-data-7025acf01a09?source=collection_archive---------36-----------------------

使用 Python 和 Tableau 处理和分析数据

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

https://www.pinterest.fr/pin/614108099163543096/

在过去的 20 年里,作为法国首都的巴黎一直面临着人口的重大转变。因此,分析它会很有趣。

在本文中,我们将从不同的来源收集数据,然后使用基本工具进行分析。

数据报废

巴黎人口演变

“启动我的项目最方便的是什么?”

开始一个项目时的经典问题。
我开始在巴黎数据网站上搜索:https://opendata.paris.fr/pages/home/。在这里,我只找到当前的人口统计数据,没有关于它的演变。所以这项工作从一些数据废弃开始。

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

你可能知道,巴黎分为几个区,称为“区”。所以我需要每个地区的人口数量。

我们可以用这种表格为每个地区找到一页。这些维基百科页面有着相同的模式:

https://fr . Wikipedia . org/wiki/" district number " arressment _ de _ Paris # D % C3 % a9 mographie

经过半个小时的报废,我很快获得了这样的东西:

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

我只收集了 1999 年以后的数据来做分析。

我们可以看到,我们必须在分析之前处理这些数据

我们需要有一个数据框架,其中有区县,年份和人口为特征

我们可以使用融化功能来做到这一点。

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

然后,我们将该数据帧保存为 csv 格式,以备将来使用

区域价格演变

分析这些地区一年来的价格变化可能很有意思,但我找不到合适的 csv 来分析。

我在巴黎公证处网站上找到了一个 pdf 格式的表格,里面有我想要的所有信息。

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

我用一个在线工具把这个 pdf 文件转换成 csv 格式。https://www.zamzar.com/fr/convert/pdf-to-csv/

数据帧如下图所示。

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

这里我们有很多预处理要做

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

  1. 我们要删除“未命名的 0”列
  2. 我们在 pdf 版本中有一些只有文本的行,我们必须删除。
  3. 我们需要“地区名称”具有邮政编码格式。
  4. 最后,我们需要使用 melt 函数,以便我们的数据帧具有与人口数据帧相同的格式。

区的面积

为了得到人口密度,你必须将人口除以面积,所以我必须得到每个区的面积
为了得到这些数据,我查阅了这个网站:https://fr.vikidia.org/wiki/Arrondissements_de_Paris

形象化

可视化价格演变

数据准备好了吗?我们可以想象!
我打开 Tableau 上的价格数据集,并按地区显示历年的价格

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

1999 年至 2019 年巴黎各区房价的演变

我们可以很容易地看到,在过去的几年里,价格飞涨。我们可以用熊猫来发现这种进化。

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

我们获得了 1999 年的 2863.75 英镑和 2019 年的 10618.6 英镑。
价格因此在 20 年间上涨了 4 倍。对投资者来说真是太划算了!

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

1999 年(左)和 2019 年(右)的价格分布

我们可以看到,第 7 区和第 6 区一直是最贵的,而第 19 区和第 20 区是最便宜的。然而,我们可以在 2019 年看到中心区和其他区之间更严格的划界。

可视化密度演变

为了分析密度,我们需要两个不同的数据集,一个是面积数据集,一个是人口数据集。我们将在“行政区”进行左连接以合并这些

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

我们还需要删除 2009 年和 2011 年的行,因为我们没有这两年每个地区的数据。然后,我们可以创建我们的密度特征和导出我们的 csv 显示在 Tableau

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

巴黎各区人口密度的演变

嗯,看来巴黎的人口密度在那些年间并没有太大的变化。无论如何,那样是看不到的。

然后,我们将尝试检查各区的价格是否会影响其密度。为了做到这一点,我们将编写一个简单的函数,比较每个地区密度最大的年份与价格最小的年份是否相同。

但首先我们需要合并价格和密度数据集。

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

作为输出获得的数据帧

数据已经准备好了,我们可以把它们显示在桌面上

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

我们取得了什么结果?
一般来说,低价格并不意味着特别高的密度,除了中心的四个区(姑且称之为“四大”)。我们可以问自己:为什么会有如此尖锐的分界?

2006 年,四大的密度处于最佳状态,但在 2017 年,由于某种原因,这些地区的密度有所下降。

总之,我们将通过将四大中的地区与不在四大中的地区分开来比较价格和密度的演变。

我们需要两个数据集,一个包含四大,另一个包含其他

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

然后用简单的微积分我们可以得到我们的进化

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

从 2006 年到 2017 年的价格和密度演变

尽管“四大”的房价涨幅与其他地区几乎相同,但我们看到“四大”的人口密度下降了近 5%。

因此,我们可以假设这些地区的价格继续上涨,而 11 452 €的价格上限正在阻止这些地区稳定其人口

总之,我们看到,只要有一点耐心和时间,我们不一定需要现成的数据集来产生强大的分析,我们可以纯粹使用整个互联网作为我们的数据集。

我如何与数据科学保持同步

原文:https://towardsdatascience.com/how-i-stay-up-to-date-with-data-science-41e2e6bbbe72?source=collection_archive---------14-----------------------

分享我所知道的最好的数据科学资源

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

Szabo ViktorUnsplash 上拍摄

跟上数据科学的发展,同时从杂质中过滤黄金,对于任何认真掌握自己技术的数据科学家来说都是必不可少的。

自从我对自己承诺每周发布 3 篇博客文章后,拥有可靠的、鼓舞人心的、有效的资源对确保我实现我对自己的承诺至关重要。

话虽如此,以下是我如何保持最新的…

走向数据科学

[## 走向数据科学

共享概念、想法和代码的媒体出版物。

towardsdatascience.com](https://towardsdatascience.com)

一般来说,我用得最多的是数据科学。一份受欢迎的媒体出版物,涵盖了一系列技术领域,如编程、数据可视化、机器学习、深度学习,当然还有数据科学。

最近,我也在钻研 Spotify 上的“走向数据科学”播客——我个人更喜欢较短的播客(1 小时或更短),因为我倾向于在早上健身时听它们,这就是为什么这个播客符合要求。

走向人工智能

[## 走向人工智能——最好的技术、科学和工程

欢迎来到人工智能最好的技术,科学和工程。走向人工智能最新故事更新[rev_slider…

towardsai.net](https://towardsai.net/)

《走向人工智能》是世界领先的多学科出版物,关注科学、技术和工程,强调多样性、公平和包容性。我们出版最好的技术、科学、工程和未来。”——(来源:走向 AI 关于页面)

《走向人工智能》越来越受欢迎。我第一次看到他们的作品是因为 Benjamin Obi Tayo 博士的伟大著作。

我发现关于《走向人工智能》的文章比《走向数据科学》要广泛得多,而且有许多有趣的读物。

KDnuggets

[## KDnuggets

机器学习、数据科学、大数据、分析、人工智能

www.kdnuggets.com](https://www.kdnuggets.com/)

当我第一次学习机器学习时,我遇到的第一个网站可能是 KDnuggets,幸运的是,我已经在 KDnuggets 上分享了许多我在 Medium 上分享的文章(绝对荣幸!).

我强烈推荐给 KDnuggets 添加书签。

除了博客和新闻,网站上还有在线研讨会、教程、课程和数据集。

注意:我必须指出,我没有使用过他们的任何课程,但是考虑到网站上精选文章的质量,我毫不怀疑其余的内容将会非常有用。

数据营

[## 在线学习 R、Python 和数据科学

使用 DataCamp 的视频教程&编码,按照您自己的节奏,在您的浏览器中舒适地学习数据科学…

www.datacamp.com](https://www.datacamp.com/)

我可能是错的,但我相信 Datacamp 可能因其密集的课程而闻名,这些课程涵盖了从一名有抱负的数据科学家到全职专业人员的整个旅程。

我最近看到了社区博客,这些博客对我写的一些文章很有启发。

注意:我在 Datacamp 上看到的许多文章都更具技术性,尽管也有一些非常好的建议,比如 如何通过 8 个步骤 成为一名数据科学家。

分析 Vidhya

[## 分析 Vidhya

了解机器学习、人工智能、商业分析、数据科学、大数据、数据可视化…

www.analyticsvidhya.com](https://www.analyticsvidhya.com/)

Analytics Vidhya 是另一个提供完整数据科学生态系统的流行平台,我也有幸为 Analytics Vidhya 撰写文章。

在 Analytics Vidhyam 上,你可能会决定了解行业的顶级趋势,参加在线课程,参加黑客马拉松,等等,尽管我主要是在 Analytics Vidhya 上寻找“深入”教程(特别是关于新技术——或者我应该说是新技术)。

Chai-Time 数据科学(播客)

[## 柴时代数据科学

您已成功订阅柴时代数据科学太好了!接下来,请完成结帐,以便完全访问 Chai Time…

chaitimedatascience.com](https://chaitimedatascience.com/)

如果我不包括 Chai-Time 数据科学播客,那将是难以置信的刻薄,因为它对我来说太棒了。

我从第一次采访阿布舍克·塔库尔开始就一直是一名听众。当时,我从未听说过 Abhishek(当时是 3x 特级大师)或 Kaggle,但我忍不住返回播客,观看最新的获胜解决方案(关于 Kaggle 竞赛)采访。

包裹

在不久的将来,我计划阅读更多的研究论文,参加更多的活动——如果参加是安全的(如果不在网上也可以)。无论如何,这些并不是掌握数据科学最新动态的唯一渠道,所以如果你有一些想要分享的来源,请在下面的评论中留下回应或在 LinkedIn 上给我发消息。

[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn

在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…

www.linkedin.com](https://www.linkedin.com/in/kurtispykes/)

我如何了解最新的人工智能研究

原文:https://towardsdatascience.com/how-i-stay-updated-on-the-latest-ai-research-b81203155551?source=collection_archive---------25-----------------------

这一切都是为了订阅正确的提要

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

克里斯托夫·杰施克在 Unsplash 上的照片

艾是新电 **,**为溟故。每天都有另一个应用被前沿的机器学习研究打乱。试图跟上层出不穷的新技术令人心碎。如果你想试着应付它,在这里我给你介绍我的 5 大人工智能相关新闻和知识资源。

第一批

deeplearning.ai 每周简讯。每周,它都包含最近的突破和值得注意的新闻,以及吴恩达本人的简短介绍。批处理最大的优点是它快速、独立,并且总是包含一些关于新闻的观点,比如“为什么它很重要”

这是开始的最佳地方,因为它不是压倒性的,是独立的,并且不专注于任何特定的子主题。

#2 中等

是啊,这地方太棒了。确保你将人工智能和数据科学作为感兴趣的话题,并开始关注与你有相似兴趣的人和出版物。我在批次中看到的大部分内容也在这里看到,但更详细。有时候我在还没到批次之前就在这里找到了。

媒介的显著特征是声音。你经常会看到在大公司工作的人、初创公司的首席执行官或者顶尖大学的博士生。技术内容通常是由真正的技术人员编写的。它们不是由训练有素的记者写的,而是由真正该死的书呆子写的。樱桃去评论区。你不仅仅是在阅读这些人的来信,你也有机会直接和他们交谈,问他们任何问题。

推特排名第三

找到你喜欢其作品的人,并在 Twitter 上关注他们。这足以让平台将他们最重要的推文通过电子邮件发送给你。在我开始这样做之后,我惊讶于我收到的有用链接的数量。如果你不知道从哪里开始,从跟随#5 的客人开始。

Twitter 是新闻诞生的地方。在我创建了我的账户并开始关注人工智能的人之后,我开始看到一些故事,这些故事只会在几周后在更大的频道上弹出。在任何人可以就某件事写一篇文章之前,它的作者已经在推特上谈论它了。除此之外,我不使用 twitter。

排名第四的 YouTube

与 Medium 类似,YouTube 有许多技术人员在撰写关于人工智能的论文。YouTube 的缺点是它没有那么多的监管,也没有有用的电子邮件摘要。积极的一面是对你的要求比较低。看视频比读文章更能放松眼睛。

我的推荐是 两分钟斯帕茨扬尼克·基尔彻。前者专注于展示令人赏心悦目的人工智能和图形研究,后者则更深入地分析人工智能论文,直至数学。我承认我不太喜欢扬尼克的视频,因为它们太长了,但我喜欢他的选择。每当他上传东西,我就搜索报纸看。

#5 人工智能播客/莱克斯·弗里德曼播客

Lex Fridman 是前麻省理工学院教授,经营一个关于人工智能和计算机科学的播客。客人的选择是杰出的。其中包括图灵奖得主、诺贝尔奖得主,以及许多才华横溢的个人,比如 3Blue1Brown 的主持人格兰特·桑德森埃隆·马斯克。对我来说,这个播客的美妙之处在于莱克斯总是要求他的客人解释基本概念,但谈话从不回避技术问题。

**这是获得视角的地方。**你还能在哪里找到诺姆·乔姆斯基丹尼尔·卡内曼在讨论艾的未来?或者是 TensorFlow 背后的首席工程师深入讨论它的历史,并不羞于谈论技术?阅读论文固然很好,但倾听一些迄今为止最具突破性的研究背后的人所说的话,对于理解现在正在发生的事情和接下来可能会发生的事情有很大帮助。

免责声明:该播客最近更名为 Led Fridman 播客,因为 Lex 采访了越来越多来自其他领域的嘉宾,如哲学、神经科学等。

#6 奖励:社区建议

在这里,我在评论区展示了其他用户提到的额外资源。请让我知道你是否想加入这个列表。

大卫·佐丹奴建议 AI 趋势麻省理工科技评论论文代码。这最后一个有一个时事通讯,我不知道。我自己刚签到。

Marc von Wyl 推荐了 TWiML 播客和 Twitter 简介@ Omar saro@seb_ruder ,NLP 新闻的金矿。

Gaurav Ragtah 增加了catalyst ex,这是一个针对 AI 模型和 ML 知识库的管理员/搜索引擎。浏览器插件可用于 ChromeFirefox

Unmesh Kurup 强调了数据科学周刊和数据灵丹妙药时事通讯,这是另外两个为从业者策划的新闻来源。

非常感谢每个人的建议和允许将它们添加到这个奖励区。

he Batch 有一般新闻,Medium 有各种声音,Twitter 有最新的东西,YouTube 给你展示最闪亮的结果。最重要的是,听播客有助于你从该领域的重要人物那里获得一些观点。

当你开始有规律地消耗这些资源时,真正的魔力就出现了。随着时间的推移,你会意识到你在一个地方看到的一些新闻会突然出现在另一个地方,但细节数量不同。这极大地有助于获得更深层次的理解,因为你在不同的深度上一遍又一遍地接触同样的想法。你开始建立联系。

欢迎评论或联系我。如果你刚接触媒体,我强烈推荐订阅。对于数据和 IT 专业人士来说,中型文章是 StackOverflow 的完美搭档,对于新手来说更是如此。注册时请考虑使用我的会员链接。

快乐阅读/聆听/观看:)

我是如何熬过两年没有 Excel 的日子的

原文:https://towardsdatascience.com/how-i-survived-two-years-without-excel-53cb20aca5b7?source=collection_archive---------49-----------------------

2018 年,我停止使用 Excel 冷火鸡,Python 使我成为一名更好的专业人士。这个故事讲述了我从 Excel 走向 Python 世界的个人历程。

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

Unsplash 上由 Hitesh Choudhary 拍摄的照片

两年前,我做了一个重大的改变,我不再使用 Excel,转而使用 Python。自从 1996 年我开始学习机械工程以来,Excel 已经成为我生活的一部分。不知不觉中,Excel 成了我日常工作的一部分,我用它来处理工作和家庭中的大部分事情。它只是偷偷溜进来,从未离开,直到我意识到它在限制我。我注意到世界的其他地方都在前进,我必须改变自己,为一个编码成为规范的新世界做准备。

最初的 100 个小时是最艰难的,但也是最有收获的。

我突然停止,一气呵成,没有回头。我觉得这是我做出改变的唯一途径。最初的 100 个小时是最艰难的,但也是最有收获的。当第一个 Excel 需求出现时,我感到不舒服,我感到紧张,几乎开始发抖,因为我知道我必须用 Python 来做。晚上我会做一些最基本的事情,比如从文件中读取数据(比如别人发来的 Excel 表格),对列排序,重命名列,改变格式(datetime…arghh),对数据分组,计算新列等等。我多次感到沮丧,因为我知道如何在 Excel 中通过几次点击来完成这些事情,但我坚持下来了,因为我决心不故态复萌,不给面子。然而,每次我设法把事情做完,我都感到非常满意,并且有更多的精力去迎接下一个挑战。

一天晚上,我突然意识到,当我感到沮丧时,我在学习,换句话说,沮丧是整个经历的一部分。挫折就像戒断症状,也就是一件好事。

在我停止之前,我确实通过学习 Python 的一些基础知识为自己做了准备。我知道,如果没有准备,我会很快回到我的老套路。这些是我所做的事情,目的是为了让我能够轻松地放弃 excel。如果这个列表对你来说太长了,专注于学习熊猫,因为这个库最接近 Python 中的 excel 和你的生命线。

我读这些书给我一个坚实的基础:

阅读像你这样的普通人写的关于 Python 和编码的文章也会有所帮助(也就是说,你并不孤单)。我开始阅读各种关于 Medium.com 的出版物,比如:

我通过 MITs 开放课件(免费)学习了一门课程:“计算机科学和 Python 编程导论”本课程向您介绍基本概念和 Spider IDE。它迫使你通过实践刚刚学到的东西来建立新的习惯。我不认为你需要学习整个纳米学位来学习 Python,一门课程就足够了,然后迅速应用到现实生活的项目中。

[## 计算机科学和 Python 编程导论

6.0001 计算机科学和 Python 编程的介绍是为很少或没有…

ocw.mit.edu](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/)

我认为学习 Python 不需要读一个纳米学位。最重要的是做真正的项目。

一旦做好准备,我就觉得可以轻松地跨过去,就像处理任何其他成瘾问题一样(我的情况很好),你需要迅速养成新习惯。在这种情况下,新习惯意味着你需要在现实生活项目中工作;最好是你工作中的项目。对于所有这些项目,我使用了 Jupyter Lab

我参与的一些项目:

  • 分析维护记录以计算设备的平均修复时间(MTTR)
  • 分析维护活动,并确定这些活动的类型和成本的长期趋势
  • 分析实时工厂信息(数百万行传感器数据,如压力、温度和流量),以了解导致跳闸和故障的事件
  • 应用 pyautogui 来自动批准休假——以及 IT 请求(并且通过每 5 分钟移动鼠标来看起来很忙…)
  • 使用镶嵌方在技术图纸上进行光学字符识别
  • 安全和维护记录的 NLP 主题建模
  • 关于设备故障(阀门、压缩机、冷却器、仪器仪表)的机器学习

正如你从这些项目中看到的,我很快进入了 Python 的更高级的使用。这些项目无法在 excel 中完成,这只是展示了离开 excel 是多么的自由,并最终使我成为一名更好的专业人士。

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

照片由布鲁斯·马尔斯Unsplash 上拍摄

这是不是意味着我完全不用 Excel 了?不完全是不幸的。只有当有人给我发来一份 excel 表格,其中包含了大量的数据争论,并且重做每一件事会花费太多的时间时,我才会使用 excel。然而,我停止了创建新的 excel 表格,现在开始默认使用 Python,因为我知道我需要保持我新获得的技能。

对我来说,两年前离开 Excel 给了我启发,并开启了许多新的机会。我已经生存了 2 年,我知道我会继续下去。再见 Excel,不会想你的…

人工智能学习飞行(上)|飞机模拟和强化学习

原文:https://towardsdatascience.com/how-i-taught-a-plane-to-fly-using-rl-c170a152b771?source=collection_archive---------19-----------------------

了解飞行力学以及如何用 Python 模拟飞机

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

来源。皮沙贝

从伊卡洛斯燃烧他的翅膀到莱特兄弟翱翔天际,人类花了几千年才学会飞行,但人工智能要多久才能做到呢?

介绍

大家好!

在这一系列文章中,我将讲述我使用人工智能驾驶飞机的旅程。如今,人工智能被用于从双足机器人到自动驾驶汽车的各种应用中,但迄今为止还没有看到人工智能飞机,让我们改变这一点!

强化学习机器学习 (让算法学习如何做事情,而不是告诉它们如何做) 的分支,它通过一个行动和奖励过程来处理对人工智能的训练。代理将与环境交互,选择动作、并观察其结果(新状态奖励),同时试图优化其回报(其奖励的总和)。

在这篇第一篇文章中,我们将定义转换函数**,允许环境根据先前的状态和代理动作计算下一个状态:在我们的例子中,根据飞机的当前位置、速度和加速度以及飞行员的动作(推力值和俯仰角)计算飞机的下一个位置、速度和加速度。我们将基本上创建一个基本的飞机模拟。**

第二篇文章中(** 这里 ),我们将讨论环境的其余部分(状态、动作奖励)强化学习 代理(模型选择、超参数优化、代理训练和测试)。**

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

飞机是怎么飞的?

为了创建一个飞行模型,让我们首先快速回顾一下飞机是如何飞行的。有四个力影响一个平面

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

影响飞机的四个力

这两个水平力是:

推力:推进器或反应堆产生的推动飞机前进的力

阻力:空气阻力产生的力,与飞机的运动方向相反

两个垂直力是:

重量:飞机的重量

升力:让飞机飞行的力量

为了让飞机在水平方向获得速度,我们必须有推力>阻力,为了让飞机在垂直方向获得速度,我们必须有升力>重量。

在这篇文章中,我不会对飞行力学和升力的起源进行过多的技术分析,但是如果你想了解更多关于这个主题的知识(伯努利原理、牛顿定律和纳维尔-斯托克斯方程),我强烈推荐你观看大卫·卢阿普雷的这个视频(我为此添加了英文字幕,目前正在等待批准) :

一.飞行模型

让我们创建我们的飞机模拟,根据飞机的上一个位置、速度和加速度计算飞机的下一个位置、速度和加速度。

我选择模拟空客 A320 是因为它在世界范围内的广泛应用以及该飞机可用的数据数量(插图仍将使用我的木制玩具飞机制作,但数字将基于实际飞机,这些数字可以在[1]中找到)。

I.1)模拟范围

我们将建模:

推力(因海拔和空气稀薄而变化)

升力

阻力(由于空气密度随高度变化以及由于迎角变化)

升力(襟翼用于增加升力)

燃油消耗(燃油消耗率估算和因燃油消耗引起的飞机质量变化

平面模型的目的是根据前一时间步的条件,计算任意给定时间步的平面的加速度、速度和位置(在本文的其余部分,我将称之为动力学)。在整个研究中,我们将使用地面参照系。

I.2)空气动力学建模

所以,让我们深入建模。为了计算地面参照系中给定时间步长的飞机动态,我们将使用以下关系式:

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

我们现在有了一种基于加速度计算速度和位置的方法。现在我们来计算加速度。为此,我们将使用牛顿第二定律:

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

换句话说,作用在物体上的力的总和等于它的质量乘以它的加速度。所以,为了计算我们飞机的加速度,我们必须计算施加在它上面的力的总和。如前所述,我们有重量、推力、阻力和升力。让我们一个一个来看看。

1.3)重量

这是最简单的!这是地球引力对飞机质量的作用力。

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

I.4)推力

这个有点复杂。这是飞机涡轮喷气发动机产生的力。涡轮喷气发动机基本上吸入飞机前方的空气,并以更大的速度排出,从而推动飞机前进。

随着高度的增加,涡轮喷气发动机的效率由于空气稀薄而降低(导致吸入和加速的空气减少)。我们将使用以下关系来解释这种减少(我从网上找到的图表[2]中近似得到)。

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

我们将忽略温度变化对涡轮风扇效率的影响,因为我们假设空气密度的变化已经说明了这一点。

I.5)拖拉和提升

阻力基本上是阻碍飞机运动的空气。升力是由机翼上方和下方的速度差产生的力,用来补偿重量,从而获得高度。尽管它们对飞行的影响完全不同,但它们都是气动力,并通过类似的公式获得:

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

正如我们在研究推力时所看到的,空气密度随着高度的增加而减小。因此,我们有:

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

在进一步讨论之前,我们需要确定阻力和升力之间的区别。为此,我们必须引入平面的参考,并定义几个角度:

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

作用在平面上的所有力

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

我们将在以后计算速度,但现在我们已经解决了空气密度,让我们更仔细地看看升力和阻力系数,参考面,以及它们与迎角的关系。

I.6)升力/阻力系数

升力系数和阻力系数,用来描述气流绕过形状的难易程度,与迎角成正比。我们将使用下列近似值(考虑 20°以上的失速)来计算它们:

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

相对于α()的近似 Cz 和 Cx

I.7)马赫数影响

另一个重要现象是接近音速的速度对阻力和升力系数的影响。随着飞机接近音速,机翼上开始出现湍流,并影响阻力和升力。m,马赫数代表速度与音速之比。我们将再次近似这个关系:

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

相对于马赫数的 Cx 和 Cz 近似值

I.8)参考表面

计算阻力和升力所需的参考面**,是与我们感兴趣的力的方向正交的**面。对于阻力,参考面是与相对风相反的一面,而对于升力,参考面是与相对风平行的一面。我们感兴趣的表面是相对于相对风的表面。因此,我们将使用相对风的参照系(x’z ')。它是通过旋转我们的初始参考系的斜率值得到的。****

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

绝对(地面)框架和相对风框架

我们必须计算前表面和机翼表面相对于相对风参考系的投影。

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

表面投影

因此,我们得到了沿相对风轴 x’和 z’投影表面的方程:

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

I.9)襟翼

(如果您想了解更多关于襟翼的信息,请随意观看此视频)

在起飞和着陆期间,飞机使用襟翼以增加阻力为代价来增加升力从而缩短起飞和着陆距离。起飞距离定义为跑道起点与飞机到达跑道上方 25m 高度点之间的距离。我们将起飞角定义为飞机达到起飞速度后所使用的俯仰角(地面与飞机之间的角度)。这是我们的飞机在没有襟翼的情况下的起飞距离(我们将只绘制低于 5 公里的起飞距离值,即最长民用跑道的长度)。

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

起飞距离(m)与不带襟翼的起飞角( )

A320 的起飞距离应该在 2 公里左右。在这一点上,飞机没有产生足够的升力,所以我们需要使用襟翼。我们假设襟翼使升力增加 70%。(价值基于文档,并经过调整以实现实际结果)。襟翼将在飞机启动时伸出,并在 400 英尺高度自动返回。去掉襟翼后,我们的起飞距离更接近真正的 A320:

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

襟翼展开时起飞距离(m)与起飞角度的对比( )

I.10)角度冲击

现在我们已经有了重量、推力、升力和阻力的基本公式,我们需要讨论它们的方向的影响。让我们再看看我们的角度图。

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

所有影响飞机的力量

现在让我们把这些力投射到 x 和 z 轴上:

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

x 轴上的投影

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

z 轴上的投影

因此,我们得到要求解的方程,以便得到 x 轴和 z 轴上的力之和。

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

I.11)碰撞

为了完成我们的模型,我们需要使它能够阻止飞机穿过地面并检测碰撞。对于这些情况,通过将任何负垂直位置设置回 0 以及将速度设置回 0 来防止这些碰撞。考虑到未来的碰撞检测,如果飞机的垂直位置为负,同时垂直速度为负(设置回 0 之前),我们将计算飞机的动能,用于检查与地面的碰撞是否导致碰撞。

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

如果地面接触的动能低于给定值 E_crash,那么飞机就会坠毁。否则,它将被视为安全着陆。该功能将在以后用于强化学习部分。

I.12)油耗

对于燃料消耗,我们将使用基于推力燃料消耗** (SFC) 的简单模型,该模型将推力和时间与燃料消耗联系起来。为了简化问题,我们将总是假设巡航水平 SFC,而忽略海平面 SFC(因为我们将在巡航水平花费大部分时间)。**

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

为了估算 SFC,我们将假设海平面推力(反应堆的最大可用推力)和巡航 SFC 之间的关系是线性的。根据这一假设,我们可以根据 A320 发动机的数据估算推力和 SFC 之间关系的参数,我们得到 SFC 为 17.5。由于燃料消耗,飞机的质量将会变化,我们将把这种变化考虑到动力学中。此外,如果燃料的变化超过总容量,飞机的反应堆将停止工作。

二。结果分析和验证

为了检验我们的模拟,我们将对 A320 的模拟结果与现实进行分析和比较。

系好安全带,准备起飞!

二. 1)起飞

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

起飞时加速度、速度和位置与时间的关系

在这三张图中,我们可以看到起飞阶段的加速度、速度和位置随时间的变化。加速度一开始只是水平的,到了 Vr(旋转速度)(~25s)且平面旋转的时候水平和垂直都有。这种现象在速度上也可以看到,垂直速度在 25s 时开始上升,水平速度(水平加速度)的增长率下降。最后,最后一张图允许我们估计大约 1800 米的起飞距离,这接近于我们预期的距离(大约 1900 米)。此外,25s 的起飞时间(离地前的时间)也与现实相符(约 30s)。此外,我们还可以注意到,加速度值保持在令人不愉快的值以下(水平方向达到最大值 0.33g,垂直方向达到最大值 0.06g)。

II.2)最大速度

我们希望评估我们的飞机没有超过对其结构完整性危险的速度(过于接近 1 马赫会在飞机结构上产生严重的湍流和应力)。为了测量我们的飞机可以达到的最大速度,我们将推力设置到最大值,并观察飞机稳定的速度。

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

全速时速度与时间的关系

飞机稳定在 300 米/秒(0.87 马赫)的最大速度,这远远低于音速,对我们的飞机来说是安全的。然而,它高于真正的 A320 的最大速度(0.75 马赫),但我们假设忽略这一差异是合理的,因为大多数航班根本达不到这一速度。

II.3)巡航速度和高度

为了估计我们的巡航速度,我们将不得不把我们的反应堆调到巡航状态,这通常意味着把功率降低到 60%到 70%之间。我们将把我们的涡轮风扇切换到 60%的输出,设置一个给定的θ角(通过试探法获得 2.5°),观察我们达到的巡航速度和巡航高度。

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

速度和位置与时间

我们观察到巡航速度为 231 米/秒,平均巡航高度为 10500 米。这两个值与 A320 0.72 马赫(233 米/秒)的经济巡航速度和 37000 英尺的巡航高度相匹配。这种匹配是通过调整模型的一些参数(巡航阶段的推力百分比和θ角)实现的。

II.4)范围

一架飞机的航程是在给定燃油量和起飞质量的情况下,它可以行驶的最大距离。我们将研究我们的飞机在油箱加满和最大起飞质量(总共 73.5 吨)的情况下的航程。航程将通过在给定的巡航推力和巡航角(通过反复试验直到达到接近现实的结果)下飞行飞机直到耗尽燃料来测量。

我使用的策略如下:

直到 Vr 使用全推力在 0°俯仰角,襟翼放出。

在 Vr 旋转到 10。

在 400 英尺(122 米)的高度放下襟翼。

在 3 千米的高度,推力 65%,俯仰 2.5。

继续下去,直到燃料耗尽

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

全飞行剩余燃油和位置与时间的关系

我们观察到航程为 4580 公里(经过 5 小时 30 分的飞行),这比预期的要小一点(大约 6000 公里)。然而,这主要是由于我们的模型不准确,以及(缺席的)飞行员缺乏飞行优化。我们将接受这个值(我们将在下一部分中尝试改进它)。

结论

我们现在已经验证了我们的飞机模拟是功能性的并且有点真实。它允许我们根据当前状态**(当前飞机位置、速度和加速度)计算代理(飞行员)动作对我们环境(飞机)的影响,并返回一个新状态(飞机的新位置、速度和加速度)。我们现在可以使用这个模型作为我们的强化学习环境的转换函数**。****

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

在下一篇文章中,我们将定义和编码强化学习的其余部分:动作状态奖励、,当然还有代理本身。有了完整的框架,我们将训练代理人飞行!****

希望教会一个人工智能飞行将允许我们优化飞行策略(到目前为止我们已经非常基本地近似了)并提高燃料消耗和航程(或者至少我们会很高兴看到一个人工智能努力学习如何飞行)。

敬请期待下一部分机长(我们的强化学习 特工)将指挥我们的飞机!

扬恩·贝特洛

这里是这个模型的代码(转换函数和图形工具)。

我在这个项目中使用的完整代码(Python)可以在我的 Github 上找到:

**** [## YannBerthelot/飞机模型

RL 的 PlaneModel 环境。在 GitHub 上创建一个帐户,为 YannBerthelot/PlaneModel 开发做贡献。

github.com](https://github.com/YannBerthelot/PlaneModel)****

参考文献

[1]“空中客车公司的虚拟技术”【在线】。可用:http://passion-aviation.html.pagesperso-orange.fr/Fiches技术空客. htm # A320–200。[访问日期:2020 年 4 月 11 日]。

[2]“标准大气计算器中气压、密度和温度与海拔的关系热力学-热量在线单位转换器。”【在线】。可用:https://www . translators cafe . com/unit-converter/en-US/calculator/altitude/。【访问时间:2020 年 4 月 12 日】。

[3]“我爱上了一个陌生人。”【在线】。可用:https://www . lavionnaire . fr/aerodynfluxtra . PHP # profilesupercrit。【访问时间:2020 年 4 月 12 日】。

我是如何自学链表的

原文:https://towardsdatascience.com/how-i-taught-myself-linked-lists-72c4837ea721?source=collection_archive---------12-----------------------

数据结构和算法,但更简单

一部分一部分地分解链表的定义。

什么是链表?

链表是最简单和最常见的数据结构之一。如果您曾经试图学习更多关于基本数据结构的知识,很可能您已经遇到过链表,并且读过类似下面的定义:

链表是一种数据结构,其中对象以线性顺序排列。然而,与数组不同,在数组中,线性顺序由数组索引决定,而链表中的顺序由每个对象中的指针决定。

根据学习数据结构时的个人经验,以上内容对于初学者来说可能毫无意义。因此,这篇文章旨在向你展示链表在概念上是简单的,以一种直观和外行的方式分解它的定义,就像你是一个完全的初学者一样。

我们将离开“那又怎样?”我相信,当我们对链表有了更好的理解后,我们将能够问更有意义的“那又怎样”。请注意,我们将在整篇文章中引用上述定义。

所以让我们开始吧。

什么是数据结构?

链表是一种数据结构…

因为链表是一种数据结构,所以简单地理解什么是数据结构是有好处的。

简单地说,数据结构就是数据存储和组织的方式。

然后,根据数据的存储和组织方式,可以对数据应用不同的操作。

数据结构之间的区别可能在于数据是如何存储和组织的,可以对数据做什么,或者两者都有。计算机科学中的大量问题都需要某种数据,我们需要根据问题类型从数据中有效地检索信息,这是我们今天创建不同数据结构的动机。

例如,一个链表在指针的帮助下以线性顺序存储和组织数据(这就是“数据的组织方式”),这些指针允许我们轻松地插入和删除元素,而无需重新组织整个数据结构(这就是“能做的”)。这使得一个链表成为一个线性数据结构(与非线性相对)。

什么是线性顺序?

…其中对象以线性顺序排列。

以线性顺序存储元素意味着以连续的顺序组织它们,使得:

  • 只有一个第一个元素,并且只有一个下一个元素
  • 只有最后一个元素,并且只有前一个元素
  • 所有其他元素都有上一个和下一个元素

例如,除了链表,数组也是线性数据结构,以线性顺序存储数据。

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

作者绘制的图像。

同样,线性还是非线性数据结构更好取决于您的用例。像往常一样,这两种类型各有利弊。

好吧,但是数组有什么问题?

…但是,与数组不同的是…

到目前为止,你应该已经注意到链表最常被比作数组。数组的错误(或正确)取决于您的用例。和其他数据结构一样,数组也有自己的优点和缺点。

虽然数组提供非常快速的索引访问和元素赋值,但是它们有固定的、不可变的长度。这意味着它们不能增长或收缩,也不可能追加或插入项目。因此,在创建数组时,我们必须知道我们想要存储多少元素,这可能会导致某些问题,具体取决于手头的问题。

动态数组(例如 Python 的列表)具有可变长度,这是通过保留额外的内存空间来实现的。然而,在动态数组的开头插入一个元素比在末尾插入要昂贵得多。这可能会成为一个巨大的障碍,这也取决于你试图解决的问题。

使用 Python 的 list 对象,我们可以运行以下代码来说明这一点:

n = 500000
example_list1 = []
example_list2 = []# Slow insertion of at the front of Python lists
for i in range(0, n):
    example_list1.insert(0, i)# Fast insertion of at the end of Python lists
for i in range(0, n):
    example_list2.insert(i, i)

记录并打印完全插入 500,000 个元素所需的时间,我们得到:

Insertion at start took: 110.1042 seconds
Insertion at end took: 0.1853 seconds

对于动态数组,为了在第一个位置(或第一个索引)插入一个元素,您需要将所有其他元素“向右”移动,以便为这个新元素腾出空间。很自然,你可以想象如果你有一个包含大量元素的数组,这将是非常低效的。此外,在移动元素之前,您可能需要为数组分配更多的内存空间。

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

作者绘制的图像。

这就是链表可以做得更好的地方。

好的,那么链表和数组有什么不同呢?

…链表中的顺序由每个对象中的指针决定。

指针指针指针。

尽管链表和数组都是线性数据结构,但链表使用指针保持其元素的线性顺序(与数组中的索引相比)。与使用数组相比,使用指针可以更有效地在任意位置插入或删除节点。

在其最基本的形式中(即只包含必需的属性),链表由以下部分组成:

  1. 被称为节点的对象,其属性为:(a) ,它被分配了它存储的数据*(必需),(b) 下一个指针,它指向线性顺序中的下一个节点(必需)和© 上一个指针,它指向线性顺序中的上一个节点(非必需)*。
  2. 指向列表头部的指针(必需)
  3. 指向列表尾部的指针(不是必需的)

为了了解链表如何允许我们有效地在头部和尾部插入对象,我们将实现一个有 3 个节点的链表,以线性顺序保存整数 14、5 和 22 作为数据。每个节点都有一个指向下一个节点的指针,而链表既有一个指向列表头部的指针,又有一个指向列表尾部的指针。

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

作者绘制的图像。

由于链表中节点的位置存储在前一个节点的指针中,所以链表中的节点不必在内存中连续组织。事实上,它可以存储在内存中的任何地方。因此,它看起来更像这样:

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

作者绘制的图像。

在尾部插入

为了在链表的尾部插入一个整数为 50 的节点,我们执行以下操作:

  1. 创建一个新节点,其 = 50
  2. 让它的下一个指针指向
  3. 让当前尾节点指向这个新节点,而不是 None
  4. 重置链表的尾指针指向这个新创建的节点

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

作者绘制的图像。

在头部插入

类似地,为了在链表的头部添加一个条目,我们执行以下操作:

  1. 创建新节点
  2. 让它的下一个指针指向链表的当前头
  3. 重置链表的头指针指向这个新创建的节点

这本质上是一个最简单形式的链表。

那又怎样?

答应了,那又怎样?

我们可以看到,与(动态)数组相比,链表的主要优点是它允许快速插入(和移除)条目。与数组不同,不需要重新构建整个数据结构,也不需要为重新构建而重新分配内存。这源于使用指针来保持数据的线性顺序,这消除了数据项以连续方式存储在存储器中的需要。换句话说,链表允许使用固定数量的操作(如上面步骤中所列)来插入和移除项目,而不管列表的长度。

使用节点的这些基本概念,它如何存储数据并指向它的邻居,我们可以根据我们的需要建立其他(更复杂)类型的链表,例如双向链表循环链表

更令人兴奋的是,理解链表及其节点可以引导我们探索和理解其他数据结构甚至算法。链表是实现其他抽象数据类型的多种方式之一,例如队列散列表图形,我们将在以后的某一天再深入讨论。

这是上面的单链表在传统教科书中的样子,当然没有颜色:

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

作者绘制的图像。

我如何教 R

原文:https://towardsdatascience.com/how-i-teach-r-360e19502a0b?source=collection_archive---------38-----------------------

因此学生可以面对现实世界的数据问题

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

迈克尔·克里斯滕森在 Unsplash 上的照片

去年,我开始在一所大学教授为期六周的 R 编程课程,我在 Udemy 上还有另外一个在线课程,名为 ,所以你需要学习 R 。关于如何教 r,我想了很久,以下是我的想法。

初学者

我想要一门初学者也能上的课程。大多数通过课程学习 R 的人不是计算机科学家或经验丰富的黑客,而是科学领域的博士生、目前在工作中使用 Excel 的分析师或刚刚开始从事数据科学职业的人。他们可能有基本的编码经验,但可能基础不牢。

(我也希望一个有经验的 Python 程序员能够参与进来,专注于 R 语法以及它的不同之处。)

编程与实用性

我知道我需要涵盖基本的编程概念,如循环、数据结构和函数。但是人们学习 R 是为了用数据做实际工作,而不是为了一般地学习计算机科学。因此,我真的没有提到任何理论,或谈论算法设计,或任何类似的东西。我们所有的例子和问题都是关于数据的(而不是如何编写一个排序函数,例如,就像你在 C 或 Java 类中所做的那样)。

不过,我也决心融入实际的编程,而不仅仅是写脚本。这种区别主要在于让学生自己编写函数。这教会了他们如何抽象问题和思考极限情况,重用代码和构建自己的工具,以及调试。

我不想让任何学生在结束我的课程时,不能写一个简单的函数并将其应用于他们的数据。我这么说是因为我遇到过很多人,他们认为自己学了 R 但是不会写函数,不会索引数组,不会使用循环。这些对我来说是最基本的:如果你不能完成这些任务,为什么还要用编程语言呢?所以我的课程侧重于编程技巧,而不仅仅是脚本编写。

做困难的事情——一次

如果学生从高级工具开始,他们永远也不会理解底层发生了什么;他们也永远无法为更棘手的问题(高级工具无法处理的问题)编写定制的解决方案。所以我从基础开始,积累他们的知识。我们从向量开始,在向量上花了很多时间。在我们对数据框进行聚合之前,我们手动拆分一个列表(数据框实际上就是这个列表),计算统计数据,然后重新组合它。这不是你每天都想做的手术;但是做过一次还是有用的。

保持简单

由于对基本技能的关注,我决定尽量少用软件包。

我们使用 reshape2 进行一些数据转换。这有“融化”和“铸造”工作流程(分别用于长转换和宽转换),这在概念上非常简单,并且与更高级的数据共享。

我尽可能使用基本图形,并为更复杂的情节引入 ggformula 。这是一个 ggplot2 的包装器,但是使用了公式符号,学生们已经在聚合中看到了,并将在模型规范中看到。我确实提到了其他的绘图方法,比如决策树。

不太整洁

特别是,我不教任何来自 tidyverse 的东西。我不是一般的粉丝。但更糟糕的是,tidyverse 与我的大部分目标背道而驰。它引入了无数要学习的函数,试图省略 r 中更基本的操作。它积极地不鼓励使用下标和公式——相反鼓励管道和不寻常的 ggplot2 语法。

学习 tidy 的学生似乎擅长快速编写高级脚本来处理某些常见的数据任务。但他们的核心编程能力往往显得非常薄弱。我班上的许多学生已经尝试过用 tidyverse 学习 R,但是不能做像索引一个向量这样的事情!这不仅仅是他们技能上的一个漏洞:当他们试图解决问题时,这是他们心理过程中的一个漏洞。

为什么采用这种方法?

我们学习编程不只是为了告诉计算机做什么:我们学习编程是为了以不同的方式理解和处理问题;成为更好的思考者。如果我们不专注于编程的真正任务,从最基本的开始,然后在此基础上进行构建,我们就无法学习这种方法。

当然,这是有限制的:R 用户不应该像在 c 语言中那样担心内存地址,但是他们应该担心计算机在执行 apply 时如何遍历数据帧的行。对于大多数问题来说,这似乎不是必要的:但是当一个更难的问题出现时,你需要更多的基本理解,这样你就可以制定你自己的、定制的解决方案。

我还发现,在入门课程中,你想要达到的程度是有限度的。我教的第一个学期,我以一个单元结束数据表。真是个错误!交替的语法和使用它的小技巧太聪明了——学生们只是被弄糊涂了。相反,他们需要巩固更多的基础。

最后,我教 R 是因为我记得我在研究生院的同事们学习它是多么大的挑战。他们不是程序员。他们不是电脑迷。所以即使他们(非常)聪明,这也是一场斗争,因为编程是一种新的思维方式。我很幸运,因为我爱好编程已经有一段时间了,学习 R 相对容易。但对于其他人来说,很少有好的资源,是为需要学习 R 的人(早期职业科学家、研究人员和分析师)准备的。

我想我可以用我的课程来填补这个空白。不是因为我是世界上最好的 R 程序员,也不是因为我对 R 的内部工作有最先进的理解。而是因为我像很多人一样自学了 R,并且已经用它解决了十多年的实际问题。即使经历了这一切,我还是喜欢 R!这是一种奇怪的混合语言,学习起来并不容易——但我们可以让它变得更容易。

Jasper McChesney 是一名高级数据分析师,拥有自然科学和数据可视化方面的背景。他曾在非营利组织、人力资源和高等教育部门工作过。目前在麻省大学教授 R 课程,Udemy

我如何过渡到数据科学

原文:https://towardsdatascience.com/how-i-transitioned-into-data-science-e6854534e306?source=collection_archive---------27-----------------------

我如何从 CFD 工程师转变为数据科学家的旅程,旅程的不同阶段,挑战和提示。

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

伊恩·施耐德在 Unsplash 上拍摄的照片

介绍

我获得了航空航天工程硕士学位,开始了我的职业生涯,成为一名空气动力学/ CFD(计算流体动力学)工程师。在工程领域工作了 4 年后,我现在已经永久性地过渡到了数据科学领域。上个月,我开始担任 Kainos 的数据科学家。我花了两年的时间明确而专注地完成了这个转变。通过这篇文章,我想分享我的故事,以激励和引导其他人走上类似的道路。

为什么我选择转向数据科学

我决定转向数据科学主要有两个原因。

促使我进行这一转变的主要原因是,我希望能够使用数据科学来解决世界上许多更广泛的挑战,并能够使用我的技能来造福社会。

向数据科学转型的第二个动机是每个行业都有广泛的就业机会。

数据科学与我已经在做的事情没有太大区别:数学、编程、数据分析和可视化,以及解决问题。所以,没有什么能阻止我转变。

向数据科学过渡:我的旅程

阶段 1——获取知识

大约两年前,我开始了我的数据科学之旅,当时我在一家工程咨询公司担任 CFD 工程师。那时,我已经完成了 Python 的基础速成课程,知道了 pandas 和 matplotlib 的最基本知识。但我决心使用 Python(数据科学堆栈)对我在工作中遇到的任何项目和任何数据进行自动化、分析、可视化或处理。很快我就开始擅长这个了。在接下来的一年里,我通过各种来源的各种数据科学和机器学习课程继续学习。我不是一个非常守纪律的学生,但我知道我永远不会放弃。就这样缓慢而稳定地,我在业余时间、工作中、上下班途中和周末继续学习。经过一年的学习,我已经能够自如地使用 pandas 处理数据,使用 matplotlib 创建整洁的图,并使用 sklearn 训练和评估最基本的 ML 模型,包括回归和分类。

提示 1:度过学习阶段的唯一方法,就是要有耐心,并假设没有回头路。

第二阶段——付诸实践:黑客马拉松、竞赛和社区项目

在学习数据科学的第一年,我一直在使用 Python 为我的团队开发工具,以处理和可视化数据。我养成的关键习惯是尽可能多地将我学到的东西运用到工作中。同时,我也开始参加大量关于数据科学的研讨会(现在都是虚拟的)和黑客马拉松。参加黑客马拉松让我有机会解决各种数据科学问题,获得实际操作的真实数据集,以及使用机器学习解决各种行业中的实际挑战。最棒的是,在 2-3 天的黑客马拉松中,我学到的东西比我几个月学到的还要多。除了黑客马拉松,我还作为志愿者参加了 kaggle 比赛和社区项目。这些努力结合在一起导致了我转变旅程的第三阶段;发现机会和网络。

提示 2:仅仅有课程是不够的,你需要在真实世界的数据集和实际的问题上工作。

第 3 阶段——发现机会和建立关系网

黑客马拉松和社区项目将我与许多其他志同道合、充满热情的数据科学家、企业家、行业领袖或与我有类似经历的人联系在一起。这些都是无价的联系,这反过来会导致伟大的友谊,学习伙伴,或者获得经验的机会,甚至是从事有偿项目。在我真正成为数据科学家之前,这是我进入这个领域并开始从数据科学家的角度了解数据科学行业的地方。从这里开始,我开始抓住每一个参与的机会,从事真正的数据科学项目,并与其他数据科学家建立联系。事实上,我参与的第一个商业项目是从赢得黑客马拉松挑战开始的,这导致了一个成熟的、有资金支持的项目。在我找到一份数据科学家的工作之前,这个项目给了我最多的数据科学经验。此外,我为新冠肺炎承担的一个解决食品安全问题的特定社区项目是我在进入我的第一个永久性数据科学职位之前收集的另一个主要数据科学经验。更不用说,有几个人工智能和技术博览会,我参加的会议(免费)专门给网络。在我的旅程中,阶段 2 和阶段 3 是不可分割的。与此同时,

我也继续学习,参加 udemy 课程和阅读书籍。这包括丰富我在 sklearn 堆栈之外的更复杂算法、深度学习、超参数调整方面的知识,以及了解如何解决数据科学中的典型挑战,如数据质量问题、正则化、不平衡数据集等。

提示 3:抓住每一个机会,加入数据科学社区,拓展你的人脉

第 4 阶段——验证你的知识并感到自信

在我的投资组合中有两个主要的数据科学项目的一年半的旅程中,我觉得我几乎为一份工作做好了准备,直到我开始在公司面试。我意识到,主要的缺失实际上不是数据科学知识,而是端到端的体验,包括数据工程、部署模型和数据科学的云架构(MLOps)。为了验证这一点,我准备并通过了 AWS 认证的机器学习专业,并在获得 offer 后,还获得了 Azure 数据科学家助理。如果你感兴趣的话,还有一个 GCP 版本。这些认证验证了四件事:我对数据科学原理的更广泛理解,我对 MLOps、云特定服务(AWS 或 Azure)的理解,以及我学习新技能的热情。在大约 4 个月的时间里,我获得了 4 个云认证来验证这些,可以在这里找到。我特别推荐 AWS 认证机器学习专业,因为在我看来它是所有专业中最全面的。在此了解如何准备和通过该认证

提示 4:获得云 ML/DS 认证,以验证您的端到端知识

第 5 阶段—工作、面试和技术测试

在准备和通过这些认证的同时,是我申请的工作的实际面试和技术测试,主要是作为数据科学家或机器学习工程师。我面试的几乎所有职位都包括 3-4 个阶段:电话面试、技术测试、视频面试(技术)和最终面试(文化契合度)。对于我的投资组合中的项目,在云认证之前的初始面试中,我能够通过技术测试并参加技术视频面试,但是缺乏生产/云经验。有了证书,我的信心有了巨大的提升,我终于能够做到这一点。在我的旅程中,第 4 和第 5 阶段也是不可分割的。根据我的经验,除了文化和性格的契合,成功的数据科学面试的关键要素总结如下:

  • 展示持续学习和发展的态度
  • 展示对数据科学原理的深刻和广泛理解,以及端到端意识,尤其是在部署/生产模型方面
  • 展示对领域的理解,特别是对角色和公司的理解
  • 对你胜任这个角色的信心

提示 5:每一次面试都是向面试官学习、完善自我和在需要的地方成长的机会。

找工作

在所有的努力工作、经历和认证之后,我最终得到了多份有吸引力的工作机会,比我想象的要多得多。选择一个比做技术测试和面试更难。看到艰苦的工作终于有了成果,那也是在疫情的中期,这是压倒性的。

最后一点:这需要时间、努力、自律和坚持。如果你播下了种子,你就会收获回报,不会早于或晚于你应得的。

挑战

在闯入人工智能的过程中有几个未知的挑战,我将试图从我的角度提炼和简化这些挑战。

第一个也是最大的挑战是选择合适的学习资源。有数百门课程可供选择,包括 udemy、coursera、edx、datacamp、dataquest 等平台。从什么开始,接着做什么?没有设计好的途径来学习和获得必要的技能和知识,以保证职业生涯过渡到数据科学。更麻烦的是,在开始和完成课程后,可能仍然会有一种感觉,“也许我应该选择另一门课程,以不同的方式开始”。没有对错,也没有完美的路径。我的看法是:设计你自己的数据科学学位,当你觉得你已经成功时,给你自己颁发学士学位。

第二个挑战是,我如何知道我已经掌握了足够的技能?我如何知道我已经掌握了数据科学技能谱中的所有必要技能,从而获得一份工作?事实是,我永远不会学到足够多的技能。我的方法是为了解决项目中的问题而发展技能,而不是为了找到一份工作。

第三个最艰巨的挑战是要有信念和毅力坚持下去,直到我能做到。最大的问题是:我做得对吗?我会到那里吗?我做得够吗?关闭后门是我解决这些问题的方法。我只是决心要转型。

结论

在所有这些工作和闯入 AI 领域的成就之后,我觉得真正的旅程才刚刚开始。真正的努力从现在开始,因为总是有更多的东西要学;就像有人说的,“让你到这里的东西,不会让你到那里”。我希望这能激励那些踏上类似数据科学之旅的人。

我是如何试图建立一个名为 Thulani 的聊天机器人来管理我的投资组合的

原文:https://towardsdatascience.com/how-i-tried-to-build-a-chatbot-named-thulani-to-manage-my-investment-portfolio-359f46b439d4?source=collection_archive---------51-----------------------

Thulani 项目:ChatOps 会见 LazyOps。

这是 Thulani 的故事,我设计这个聊天机器人是为了让我的生活变得更简单,也让我更了解聊天机器人。我希望能有更多的东西,我真的希望,但这篇文章是一个指南,介绍了我用来更好地理解聊天操作的工具和资源,以及如何使用聊天机器人解决(希望更好)问题。

什么是聊天操作?

ChatOps 是使用聊天客户端、聊天机器人和实时通讯工具,方便软件开发和运营任务如何沟通和执行。

我为什么需要聊天机器人?

我最近开始使用由自由贸易团队开发的自由贸易平台。我不是一个认真的投资者,最初是出于兴趣,想拥有一些我喜欢的公司的股票,但随着时间的推移,随着越来越多的朋友注册,我们开始讨论和研究股票。但在这次研究中,我发现很难跟上每只股票,尤其是那些我只想密切关注的股票。这意味着有时我可能会错过买入或潜在的退出机会。所以我坐下来思考,我该如何为自己做些什么来确保这种事情不会发生?

免责声明:其他应用程序具有可以消除这个问题的功能,但这并没有教会我关于聊天机器人的知识,不是吗🙃

Thulani 计划诞生了!

第一步是命名我的聊天机器人,并正式开始这个项目。我选择的名字是祖鲁族血统的 Thulani。它的意思是“安静/得到安慰。”我喜欢这个名字,觉得它会让我的聊天机器人更有个性,我们多久会看到有祖鲁语名字的机器人?

确定了我的问题和建议的解决方案后,现在是时候想象成功会是什么样子了:

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

这是我希望我的机器人看起来的样机。这就是成功的样子。使用僵尸网络设计

A user finds a share → User informs Thulani → Thulani checks API with stock information → User confirms → End. 

这是我试图构建的用户故事草案,每次我决定监控一家公司的股票,Thulani 都会记住 时间和日期 ,因为这将是我想要监控的价格点,然后我可以设置 Thulani 在价格低于或高于 X 时向我发送消息。由于我实际上并不想为这个功能创建一个完整的应用程序,聊天机器人是最好的解决方案。

Thulani 遇到了 Watson!

沃森助手是 IBM 的人工智能产品,可以让你在任何应用程序、设备或渠道中构建、训练和部署对话交互。我选择探索 Watson 作为 Thulani 对话技巧的后端,因为与大多数聊天机器人不同,Watson Assistant 并不试图模仿人类互动。它实际上会要求清晰,知道何时从知识数据库(我们将查询的 API)中搜索,并且可以部署在 Slack 上。

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

我有没有提到它是免费的?—由 IBM 提供

我能够部署一个 Watson Assistance 的实例,我实际上可以预加载一些客户服务对话技巧,但没有任何东西真正涵盖我正在寻找的问题,所以我必须从头开始教 Thulani 如何响应。

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

不同的反应,因为你知道,Thulani 有范围 IBM 沃森助手

“你好”节点是我最初的对话开始。当用户打开聊天机器人时,Thulani 会如何问候他们?当然,他可以和他们打招呼,挥挥手👋🏾同时等待输入,但更有意义的是充分利用交互*(因为这意味着你编写更少的对话节点)*。所以 Thulani 会问候用户,并立即询问他们想要什么股票。但这不是写对话的好方法。因为它限制了我的聊天机器人的功能。如果有增长的空间,我希望第一次交互实际上像一个菜单,所以 Thulani 会让用户直接,“嘿,这是你的选择!”

然后头痛来了🤯

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

使用 IBM Watson Assistant 绘制逻辑图。

写完逻辑之后,我意识到现在需要为股票信息集成一个 API。但是一个月只有10000 个 API 调用,我内心的基础设施工程师就踢了进来。我如何优雅地保留 API 调用?Thulani 应该能够在没有我的干预下检查特斯拉的股价,然后向我反馈埃隆是否已经崩溃了市场。但是在周末或者股市关闭的时候会发生什么呢?这意味着我必须想办法为 Thulani 增加逻辑和运营时间。

  • 仅在工作日上午 8 点到晚上 9 点期间运行。(这是英国和美国股票市场开放的时间)
  • 不要在周末进行 API 调用——除非用户要求。

但是即使有这些问题要回答,我从哪里得到数据呢?

  • 数据需要是 live ish
  • 如果不是 live ish ,Thulani 需要让我知道上次检查的时间。
  • Thulani 需要保存我上次询问的日志,并更新我自那时以来股票是涨还是跌。

API 🕸

感谢黄慎发布了2020 年 5 个最好的免费股票市场 API我能够找到一个满足我需要的 API。我选择使用 yfinance ,因为它保存的历史数据实际上在未来可能有用,问问 Thulani 石油在 2008 年衰退期间的表现不是很好吗?

但它与 Watson 不兼容,因为目前没有可用的 webhook。当我试图让它成为一个免费资源时,投资运行一个可以与沃森通信的虚拟机是不可行的。我确实在寻找 webhook 版本来获取这些信息,但是它们都是有成本的。

Thulani 的末日到了吗?🥺

我经常宣扬的一件事是熟能生巧,尝试新事物是跟上计算机科学技术的最好部分。我绝不是软件工程师,甚至不是与聊天机器人打交道的人,但这个周末我能够尝试科技的一个新方面,使用低代码解决方案来尝试和构建一个聊天机器人。我的朋友斯蒂芬·万(Stephen Wond)是一名专注于人工智能的软件工程师,他也接受了这个挑战,并采取了一种完全不同的方法,走微软的路线,使用微软的路易斯(LUIS)。对我们俩来说,这是一个重新思考我们领域中可以用聊天机器人解决的问题的机会。关于网络安全和数据科学,实际上有很多不同的用例,我现在可以期待用聊天机器人来尝试。例如,我目前运行多个蜜罐,如果能建立一个电报机器人就太好了,用户可以在那里询问一个 IP 是否出现在我的蜜罐数据中,或者关于攻击情况的每日统计和数字。沃森可能不是我项目的最佳选择,但这并不意味着这是 Thulani 的终结,因为斯蒂芬·万路易斯取得了更大的成功,我将期待重温我的 Azure 技能(,并希望获得一些 Azure 学分🤣,嗨 微软英国开发者 )。这是一种有趣的边做边学的方式,但是尽管这一次,我没有完成我想要的原型,我期待着重新学习和重建 Thulani 2.0🤖

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

为此,我使用了 Canva 团队。

资源

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

作者:斯蒂芬·查彭达玛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值