TowardsDataScience 博客中文翻译 2021(三百七十七)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何快速学习一门新的编程语言

原文:https://towardsdatascience.com/how-to-learn-a-new-programming-language-on-the-fly-7b6df0ea0c90?source=collection_archive---------9-----------------------

帮助您快速学习新编程语言的独特技巧。

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

Unsplash 上由zdenk macha ek拍摄的照片

过去,我总是惊讶于程序员可以毫不费力地学会新语言。

类似于看着一个通晓多种语言的人从俄语到德语到葡萄牙语,以及其间的一切都令人惊叹不已,看着一个程序员不费吹灰之力地从一种语言转换到另一种语言也同样令人惊叹。

那些程序员在我看来总是在另一个阶层。我一直认为那些程序员是天生的天才,是那些学生时代不学习就能在数学和科学课上飞来飞去的人。我一直以为我配不上他们。

直到我开始学习编码。

我终于明白,没有人生来就知道如何编码,我终于意识到,在学习一门新的编程语言时,没有人是真正“有天赋”的。最后,这一切都归结于你如何学习,以及你的学习方式是否有效。

熟练掌握编码基础知识。

一旦你学会了如何用一种语言编码,你就基本上知道如何用所有的语言编码。唯一的区别是语法、结构和约定。换句话说,不要忘记基础。就像标点符号、句子结构以及名词、代词和动词的用法在每种自然语言中的用法一样,列表、if/else 语句、for 循环和数据类型也在(几乎)每种编程语言中使用。

记住: 计算思维和编码基础适用于所有编程语言。

因此,一旦您理解了列表、if/else 语句、for 循环和数据类型(以及其他)是如何在一种语言中使用的,您就会熟悉它们在任何编程语言中是如何工作的。唯一的区别是语法、结构和围绕它们的约定。

如果你从这篇文章中吸取了什么,那就是:不要在学习编程基础知识上吝啬。

编写一些比“Hello World”更有意义的代码。

很久以前,在一个遥远的地方,你的第一个新语言节目是“你好,世界”,这成了惯例,不,是传统。

虽然这一切都很好,但是什么时候“Hello World”成为一种新编程语言最有意义的首次应用呢?为什么不做一些大胆的、意想不到的事情呢?为什么不做一些能真正教会你一门新语言如何工作的东西呢?

相反,让你的第一个新语言程序变得有意义。现在是时候真正测试一下引擎盖下是什么,看看它是如何工作的。

诀窍是设计一个程序,让你对语言如何处理基本概念有一个基本的了解,比如打印出字符串,接受用户的输入,存储这些输入以备后用,处理简单的算法,实现数据结构,以及处理错误。

这可以采取的形式,一个随着用户输入越来越多而变得越来越聪明的游戏,一个试图诊断你的症状并随着你给出的症状越来越准确的程序,或者一个简单的博客,当它收到用户喜欢阅读的更多输入时,为用户提供更准确的阅读建议。

先学语言,再学框架。

程序员就像狗一样,很容易被下一个新的闪亮物体(或松鼠)分散注意力。

当学习一门新语言的全部原因是为了能够使用随之而来的框架时,这种情况尤其常见。相信我,我也掉进过同样的陷阱。

框架是建立在它们所属语言的编程概念之上的。如果不了解这门语言,你就不会非常熟悉如何使用这个框架。

例如,假设你在一个你不会说这种语言的国家得到了一把锤子。你以前从未用过锤子,也不知道它能用来做什么。那个国家的当地人试图告诉你如何使用锤子,但他们是在用他们的母语做这件事。你一点也不懂这种语言,所以你不知道该怎么用锤子。除了让那个人在你身上使用锤子让你明白它是如何工作的,下一个合乎逻辑的步骤可能是学习一点语言,让你明白如何使用锤子。

换句话说,在使用工具(框架)之前,你需要学习语言。

力求理解,而非完美。

我不明白为什么这个世界痴迷于编写完美的代码。

当然,编写最干净、最有效的代码绝对是一件值得努力的事情。但是,我觉得这就是人掉进陷阱的地方。

从很多方面来说,编码就像写作。人们写作的问题是他们太过于追求完美,以至于他们实际上没有在纸上记下很多单词或想法。同样的问题也会出现在人们的编码中。许多人不会容忍犯错误和编写糟糕的代码,而是将大部分时间集中在尽可能编写最干净、最短和最有效的代码上。

虽然编写最干净、最短和最有效的代码是每个人都应该渴望的一个美好的长期目标,但在学习一门新的编程语言时,这并不值得关注。例如,当一个方法可以很好地工作时,直接跳到 lambda 函数是没有意义的。lambda 函数有其存在的时间和地点,但现在的重点应该是理解这种新语言的基础。

在你第一次学习一门新的编程语言时,努力追求完美的代码就像在去一个新的国家之前,感觉需要学习所有的动词变化,阴性和阳性名词,以及自然语言的句子结构。事实上,你所需要知道的就是如何说一些简单的短语,一些脏话,并且对如何阅读这种语言有一个大致的了解,这样你就不会到达你不应该到达的地方。每个人都会明白你的意思,即使你用迂回的方式说这种语言,并不总是完美的。

换句话说,在学习一门新的编程语言时,第一次就要减轻自己编写完美代码的压力。总会有更快、更短的方法来做某事,但这不应该是重点。相反,专注于编写运行并完成工作的无 bug 代码——特别是如果你正在匆忙学习这门语言。它可能不漂亮,但它仍然会工作。

最后的想法。

本文仅涵盖了我在学习新编程语言的过程中使用的一些技巧。然而,我觉得我应该补充几个其他更传统的提示,给你快速学习一门新语言的最好机会:

  • 阅读文档。虽然不是所有的语言文档都是一样的,但是你可以很好地了解一下让你正在学习的语言独一无二的具体细节。
  • **确保你是出于正确的理由学习语言。**如果你学习这门语言是为了加薪,你的老板需要你用这门语言完成一个项目,或者你会经常使用这门语言,那么恭喜你,你正出于正确的原因学习一门新的编程语言!
  • 参加黑客马拉松、Kaggle 竞赛和编码挑战。没有什么能像竞赛一样迫使你巩固你对新编程语言的知识。
  • 将程序与精通该语言的人配对。我经常发现,当你和精通一门新语言的人一起工作时,学习这门语言的效果最好。当他们编码的时候,坐下来听听他们的思维过程,可以让我们深入了解这种语言是如何工作的,以及为什么他们会以一种特定的方式使用它。
  • 使用适合你的学习方式。如果你是视觉学习者,使用流程图、代码片段、思维导图和视频来更好地理解一门新语言。如果你是听觉学习者,使用 Youtube 视频、在线课程或 MOOC 讲座。如果你是一个阅读/写作学习者,阅读语言文档、博客文章、网站文章、代码片段和 GitHub 代码库。如果你是一个动觉型学习者,跟随视频并在你自己的 IDE 中写下代码,或者基于源代码创建项目。不要忘记你的学习方式可能会随着时间而改变。对通过各种方法学习持开放态度,直到你找到最适合你的方法。

除了坚持和一致,没有什么能保证快速学会一门新的编程语言。不幸的是,当一门新语言对你的工作来说是必要的时候,你会有很大的压力去快速掌握这门语言。为了避免这种压力,在技术世界里,当学习像一门新的编程语言这样棘手的东西时,你必须知道如何学习最好,并发挥你的优势。

学习一门新的编程语言是一项有益的活动,不仅会在你的职业生涯中有所帮助,而且从长远来看,还会使你成为一名更加全面、可靠和足智多谋的程序员。

如何学习机器学习中的任何算法

原文:https://towardsdatascience.com/how-to-learn-any-algorithm-in-machine-learning-1836f093d093?source=collection_archive---------42-----------------------

这个简单的方法也可以让你很好地学习它

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

Jorge Fernández Salas 在 Unsplash 上拍摄的照片

我们都知道机器学习是一个快速扩展的领域,似乎每分钟都在创造新的技术。虽然在进入这些新的、通常是先进的论文之前,最好从该领域的基础开始,但对于该领域的新手来说,经常会出现一个问题:

我如何学习这个领域中的各种算法,以及如何学好它们?

如果你是这个领域的新手,最好的方法是对基本面有一个坚定的理解,这很简单。简单地说,当你学习算法时,尝试用你最喜欢的编程语言从头开始构建它。请允许我解释…

当在这个高度技术性的领域学习一个新概念时,我相信从零开始构建东西不仅可以加强你的编程技能,还可以让你对算法实际上是如何工作的有一个自下而上的基本理解。需要记住的一点是,在机器学习中,我们所做的一切本质上都是数学化的。如果你不理解算法背后的数学,你就不能有效地将结果的关键见解传递给那些非技术人员——我可以补充一句,你和那些技术人员打交道一样多。

虽然这应该是常识,但让我从现在开始提出一个小小的免责声明:你从零开始构建算法不应该代替高度优化的库来完成特定的任务。相反,你构建的算法应该作为学习数学的补充,并看到它一步一步地实时求解。如果您以前从未构建过神经网络,您可能无法理解 PyTorch 或 TensorFlow 库中 API 调用的底层机制。

我真的相信,如果你正在学习一个新的算法,了解它是如何工作的是一个很好的开始,但是学习如何自己构建它真的会让你迷失在 为什么 它会工作的美丽中,在我看来,这是这个领域中最有趣的地方。

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

在(随机)森林中迷路比想当然地使用 API 调用更有趣。||照片由塞巴斯蒂安·恩劳Unsplash 上拍摄

不要成为一个阅读公式,使用 API 调用来解决问题,并说你熟悉这个概念的人。这不会长期强化你的学习。你可能会假装自己知道什么是 SVD 分解,因为你可以在 Python 中键入SVD(X),但是如果你在面试中被要求解释它,你应该解释它是什么——并且解释得很好。

即使你是该领域经验丰富的工程师,花一个下午的时间从零开始构建一个分类器或聚类算法也是重建基础和进一步巩固基础的好方法。仅仅因为你有经验并不意味着你的技能不会随着时间的推移而生疏。花时间回到基础会让你更擅长你的手艺,这是必然的。

“学习吧,就像你永远无法掌握它一样;拿着它,好像你会害怕失去它。”——孔子

你有什么想法?我很乐意讨论你是否有自己学习新算法或巩固基础的方法。

请继续关注,因为我也计划在闲暇时重建一些算法。我非常喜欢许多机器学习算法背后的数学,从零开始构建它们的能力在我看来非常有趣。

感谢您的阅读。

我的一些文章:

https://medium.com/swlh/why-you-must-use-linux-dddf7cabb266

如何用简单的话学习 CircleCI

原文:https://towardsdatascience.com/how-to-learn-circleci-in-simple-words-2275e4299628?source=collection_archive---------22-----------------------

行业笔记

作为数据科学家创建 CI/CD 管道的行动手册

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

照片由 Alexas_FotosUnsplash 上拍摄

在过去的几年里,我开发了几个软件产品。其中常见的一个关键步骤是构建一个管道来测试构建,以及部署。无论你是建立一个人工智能产品还是 Web 应用程序,你都需要一个持续集成和部署(CI/CD)管道。拥有这条管道有助于您构建高质量的软件,并加快开发过程。有许多 CI/CD 工具,如 CircleCI、TeamCity 和 Jenkins。在本文中,我用简单的语言描述了如何用 CircleCI 建立一个简单的 CI/CD 管道,并为您提供了您必须使用它的场景。首先,让我从我如何熟悉软件开发中的这个重要概念开始。

**当时的 MLOps 方案并不多。**因此,我们开始使用现有的通用工具创建自己的 MLOps 解决方案。

我在 2013 年开发了一个基于 ML 的手势识别引擎。我们需要一个自动化的管道来构建、测试和归档 ML 模型,以确保质量并加快开发过程。当时的 MLOps 解决方案并不多。因此,我们开始使用现有的通用工具创建自己的 MLOps 解决方案。我们开始与团队合作。那时候, Jenkins 是在 DevOps 团队中建立 CI/CD 渠道最流行的选择。然而,我们是一个小型的机器学习团队,没有太多关于 DevOps 和 Jenkins 的经验,这不是最简单的解决方案!我们发现,与 Jenkins 相比,TeamCity 提供了一个用户友好且易于设置的环境。因此,我们使用 TeamCity 创建了一个自动化的管道来构建、测试和归档 ML 模型。

几年后,我发现了 CircleCI 并爱上了它。你可能会问为什么?因为它非常强大,而且简单直观。**在这里,我想帮助您建立 CircleCI 的 CI/CD 渠道。**您可能希望使用 CircleCI 构建自己的 MLOps 解决方案,或者构建一个自动化管道来构建和部署 Web 应用。希望这能帮助你更好地适应这项神奇的技术。

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

照片由德米特里·拉图什尼Unsplash 上拍摄

CircleCI 的“工作”是什么?

“作业”是在单个单元中执行的步骤的集合。您可以出于各种目的创建工作。例如,您可以为集成测试创建一个作业,并为性能测试创建另一个作业。您还可以创建一个用于构建解决方案的作业和另一个用于部署该解决方案的作业。一个作业有三个主要部分:(a) 执行者 , (b) 环境变量 , © **步骤。**这里有更多关于创建工作的细节,你可以在这里找到

执行者

必须确定作业执行者(即运行作业的机器)。您可以使用 Docker 容器或虚拟机(Linux 或 Windows)。我通常为作业执行者使用 Docker 容器,因为我对它们有更多的控制权。使用 Docker 技术有助于我减少对服务的依赖,并能够在需要时迁移到其他服务。

环境变量

您必须确定该作业所需的所有环境变量。这里定义的环境变量可用于所有步骤。您还可以在某个步骤中定义环境变量,该步骤专用于该步骤。如果你想成为软件开发专家,你应该彻底学习如何定义和使用环境变量。

步伐

最后,在前面的步骤中设置了环境变量之后,您必须确定需要运行的步骤。例如,如果 CircleCI 和 Github 连接正确,可以使用checkout命令将代码库复制到执行器中。您可能还需要运行 CircleCI 团队预先构建的特殊步骤。例如,如果没有特殊的配置,就不能在 docker 容器中构建 docker 映像。CircleCI 让您的生活变得轻松!您只需要在checkout之后添加一个名为setup_remote_docker的新步骤。要了解更多关于如何在 docker 容器中运行 docker 命令的信息,你可以在这里阅读。

version: 2.1 jobs:
  build:
    **docker**:
      - image: circleci/<language>:<version TAG>
        auth:
          username: $USERNAME
          password: $PASSWORD
    **environment**:      
      - USERNAME: my-dockerhub-user
      - PASSWORD: my-dockerhub-password
    **steps**:
      - checkout
      - run: echo "this is the build job"

CircleCI 中的“工作流”是什么?

“工作流”是一组规则,用于根据需要按特定顺序运行一组作业。例如,您可以定义一个简单的工作流来为开发过程中的每个提交运行一个作业(通常是单元测试)。您还可以定义一个更复杂的工作流来构建一个在“构建”作业之前需要“测试”作业的解决方案。工作流中使用了几个重要的操作来设置所需的规则,例如(a) 过滤器、( b) 要求和© **触发器。**这里有关于创建工作流的更多细节,你可以在这里找到

下面,您可以找到一些需要设计特殊工作流来满足需求的场景。

  • 场景 1 ( 当您需要一个特定分支的作业) —您希望只在名称以“feature”开头的分支上运行构建作业。您应该过滤分支,只找到那些名称以目标名称开头的分支。在这种情况下,可以使用filters命令。
  • 场景 2 ( 当你需要一个有序的作业系列) —你想按顺序设置一系列作业。例如,当一个新的拉请求被合并到主分支中时,您想要在 web 上自动部署一个解决方案。在部署作业开始之前,必须彻底运行构建作业。在这种情况下,可以使用requires命令。
Workflow:
  jobs:
    - build:
        **filters**:
          branches:
            only:
              - /feature\/.*/
    - deploy:
        **requires**:
          - build
  • 场景 3 (当您需要一个事件在午夜被触发)——您想要使用最新的开发在每天午夜创建一个 ML 模型。您还想在那个时候自动创建一个测试报告,并在第二天的清晨提供给团队。因此,您希望“train_test”作业在夜间运行。在这种情况下,可以使用triggers命令。阅读更多
workflow:
  version: 2
  nightly:
    **triggers**:
      - schedule:
          cron: "0 0 * * *"
          filters:
            branches:
              only:
                - master
                - beta
  jobs:
    - train_test
  • 场景 4 (当您需要一个事件由一个拉请求触发时)——您希望确保没有错误注入到主分支中。因此,您不仅希望在每次提交时运行测试作业,还希望在拉请求时运行构建作业。很抱歉。在代码上做不到。您应该在 CircleCI 高级设置面板上更改配置。阅读更多。

—遗言

我强烈建议从项目一开始就使用 CircleCI,尤其是在开发基于云的服务时。他们提供令人敬畏的免费服务,可以长期满足个人项目的要求。如今,您可以将 MLflow 等专门的 MLOps 解决方案用于数据科学项目。但这并不意味着他们可以取代 CircleCI。2013 年,我们使用类似于 CircleCI 的服务创建了自己的 MLOps 解决方案。但这并不意味着你应该这样做!

感谢阅读!

如果你喜欢这个帖子,想支持我…

https://pedram-ataee.medium.com/membership

如何用 Python 交互学习数据科学?

原文:https://towardsdatascience.com/how-to-learn-data-science-interactively-with-python-b2528e403aee?source=collection_archive---------5-----------------------

当您进行分析时,JupyterLab 扩展会动态生成代码。

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

杰米·芬恩在 Unsplash 上的照片

随着人们对数据素养需求的增长,Python 也越来越受欢迎。不管你是博士数据科学家还是刚刚开始学习,Python 的一个缺点是语法需要很长时间才能正确。人们经常花费大量的分析时间去堆栈溢出或谷歌查找正确的代码。

有没有更好的办法?

如果你错过了我以前写的关于米托的文章,看看这里的https://romanorac.medium.com/list/mito-a-spreadsheet-that-generates-python-1df29fc67dff

当您进行分析时,米托会动态生成代码

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

照片由亚历山大·奈特Unsplash 上拍摄

米托是一个 JupyterLab 扩展,可以轻松地使用 Excel 来探索和转换数据集。

米托通过自动代码生成大大减少了“搜索正确代码片段”的时间。

使用米托,您可以将电子表格接口调用到您的 Python 环境中,并且您所做的每次编辑都会在下面的代码单元格中生成等效的 Python。

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

每个点击操作都会动态生成一个代码片段(作者可视化)

大多数 Python 用户知道他们想要如何操作他们的数据,无论是:

  • 将数据集合并在一起
  • 填充缺失值
  • 创建图表
  • 添加列等。

米托允许用户不需要知道完美的代码就能完成这样的任务。用户在米托完成操作,米托会为你吐出代码。

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

米托在运行中自动生成代码(图片由作者提供)

安装米托

可以用这两个命令安装米托:

python -m pip install mitoinstaller
python -m mitoinstaller install

打开 Jupyter 笔记本后,渲染一个有丝分裂表:

import mitosheet
mitosheet.sheet()

以下是完整的安装说明。

米托支持熊猫数据框架

要将数据输入米托,您可以将数据帧作为参数传入,

mitosheet.sheet(df)

或者,您可以使用导入选项从本地文件中选择数据集。

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

将数据集导入米托(图片由作者提供)

米托功能

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

Unsplash 上由 Patrick 拍摄的照片

米托的功能侧重于数据清理、数据处理/探索和数据可视化。米托的数据清理功能包括:

  • 填充缺失值
  • 删除行
  • 更改列数据类型
  • 编辑特定值
  • 删除列
  • 重命名列
  • 更多

米托利用 Excel 的易用性,将这些特性应用于 Python 和 pandas 数据框架。

例如,如果您需要更改数据帧中的特定值,只需直接在 Mitosheet 中编辑该值。

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

米托电子表格中数据帧值的交互式编辑(图片由作者提供)

此操作生成的代码如下所示:

ramen_ratings_csv.at[10, 'type'] = "Nissin"

探索性数据分析

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

弗兰基·查马基Unsplash 上拍摄的照片

数据探索和操作是米托的一些最突出的特点。其中包括:

  • 连接/合并数据集
  • 创建数据透视表
  • 过滤数据集
  • 排序列
  • 查看汇总统计数据
  • 更多

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

用米托创建数据透视表(图片由作者提供)

形象化

米托还集成了 Plotly ,这是一个允许交互式图表的开源图形库。Plotly 图表允许放大可视化部分、导出为 PNG 等功能。

米托允许用户不用写代码就能生成这些图表。可视化配置完成后,用户可以通过单击“复制图形代码”按钮导出等效代码。

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

生成的代码如下所示:

# Import plotly and create a figure
import plotly.graph_objects as go
fig = go.Figure()# Add the bar chart traces to the graph
for column_header in ['country']:
    fig.add_trace(
        go.Bar( 
            x=df2[column_header],
            y=df2['type count Movie'],
            name=column_header
        )
    )# Update the title and stacking mode of the graph
# See Plotly documentation for customizations: [https://plotly.com/python/reference/bar/](https://plotly.com/python/reference/bar/)
fig.update_layout(
    xaxis_title='country',
    yaxis_title='type count Movie',
    title='country, type count Movie bar chart',
    barmode='group',
)
fig.show(renderer="iframe")

结论

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

Jason Blackeye 在 Unsplash 上拍摄的照片

米托是一个强大的 Jupyter 实验室扩展,用于探索性数据分析和快速生成 Python 代码。它的局限性在于它还没有涵盖所有的数据科学功能。米托仍然需要添加更全面的可视化选项,以及更多的统计和建模功能,除非他们想保持探索性的数据工具。但这是一个值得尝试的扩展。

在你走之前

如果你喜欢看这些故事,为什么不成为 中等付费会员 *?每月 5 美元,你可以无限制地阅读 10000 个故事和作家。如果你用我的链接注册,我会赚一小笔佣金。***

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

凯利·西克玛Unsplash 上拍摄的照片

如何通过看论文学习深度学习

原文:https://towardsdatascience.com/how-to-learn-deep-learning-by-reading-papers-c51b6025f226?source=collection_archive---------19-----------------------

创建一个系统,以便与深度学习研究保持同步

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

卡斯帕·卡米尔·鲁宾在 Unsplash 上的照片

⚠️读了我在⚠️博客中的原帖

深度学习发展如此之快,以至于跟上的唯一方法是直接从发布这些新发现的人那里阅读。如果你是一个技术人员,想在 2021 年了解深度学习,你需要阅读论文。

正规教育只能让你到此为止。不幸的是,一般来说,大学在将新材料纳入课程方面进展缓慢,直到几年前,它们才开始教授深度学习。这是欧洲的情况,我承认在美国可能会有所不同。

大学深度学习

在 AI 和深度学习的花哨名字下,大多数课程在短短一个学期的时间内挤压了经典的机器学习网络、神经网络、CNN、RNNs、LSTMs 和汽车线路检测等应用。

如果这是你第一次接触机器学习,在课程结束时,你只会知道网络的一般概念,以及一些作业的代码片段。一个学期学不了 ML。

而且因为教材太新,知道的人又太少,大部分课程设计很差,用花哨的名字吸引人,却只教基本的东西。除非你上了一个有完整的、专门的 ML 课程的大学,否则你不能指望光靠大学来学习深度学习。

书本上的深度学习

下一个选择是书籍,由人工智能研究人员编写。Goodfellow 和其他知名人工智能研究人员的深度学习书籍是一本非常全面的基础知识书籍。你可以免费在线阅读个别章节,也可以付费阅读整本书。

书籍的问题在于,由于它们需要花费大量的时间来制作,而且这个领域发展如此之快,到它出版的时候,有些东西可能已经过时了。你可以用书来获得基础知识,但是如果你不想让你的知识过时,你需要跟上当前的研究。

在线课程中的深度学习

在 Coursera、EdX 和许多其他平台上有无数的机器学习和深度学习在线课程。与书籍一样,在线课程需要大量时间来录制、编辑和发布视频和内容。你可以用它们来夯实你的知识基础,也许还可以用来练习编码,但我 2018 年在 Coursera 上做的深度学习认证已经 3 年没变了,这个领域肯定变了。

利用大学视频进行深度学习

这当然是一个富有成效的方法。许多美国大学喜欢在网上发布他们的讲座,其中一些还提供他们的作业。这些大学是唯一提供深度学习方面的最新教育的大学,以结构化的形式提供,并且拥有知道自己在说什么的人。例如,密歇根州的计算机视觉深度学习就非常受欢迎。斯坦福也在学期结束后发表了他们的一些讲座,所以请留意他们,因为他们是最新的。

它们并不完全是最新的,因为课程也需要准备时间。等到讲师开始准备材料,直到学期开始和结束,一整年可能已经过去了。在那一年,许多新的东西将会出版。尽管如此,在观看视频前一年了解深度学习的具体领域是一个非常好的方法,如计算机视觉、自然语言处理、翻译、演讲或任何你感兴趣的东西。最后一年,你必须阅读论文。

用论文进行深度学习

我建议你使用结构化的方法,比如我之前提到的方法,来构建你的深度学习知识的坚实基础。一旦你学会了深度学习的一般概念,我猜你已经做到了 2016 年左右。如果你看过美国大学的视频,可能要到 2018 年。我假设你已经了解了 CNN,RNNs/lstm,一些计算机视觉和 NLP。

如果你想了解新的术语,如变形金刚、BERT、预训练模型、迁移学习、偏见、人工智能中的伦理、零短期学习、神经翻译、GANs、强化学习、多模态模型和许多其他术语,你必须求助于论文,因为这些术语还没有出现在在线课程、书籍和大学讲座中。

阅读报纸

arXiv 是一个论文档案库,深度学习研究人员在这里上传他们的论文。arXiv 中的论文数量逐年稳步增长。一般来说,这些领域停滞不前或略有增长,但数学和计算机科学(cs)却出现了爆炸式增长。这些是机器学习或深度学习的典型领域。

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

基于类别的 arXiv 累积论文

在训练深度神经网络成为可能之前,机器学习是数学的一个分支,在那之后,它被称为深度学习。2013 年左右,计算机视觉在 ImageNet 上度过了黄金时代,2015 年,NLP 在 LSTMs 上开始了自己的时代,并且随着近年来的进步,变形金刚,预训练模型和其他关于数据集和偏见的更隐藏的研究,它仍然保持强劲。

截至 2018 年,每天约有 100 篇新的 ML 论文,远高于摩尔定律,该定律表明该数量每两年翻一倍。变压器模型是在 2018 年推出的,这是一个大繁荣,所以我估计新 Arxiv 论文的数量要么增加了,要么至少保持不变。

值得注意的是,Arxiv 论文只是预先发表的论文,其中一些会在会议和期刊上发表,但大多数不会。但很多未发表的论文价值很高,值得考虑。

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

每年 ML arXiv 论文的累计数量(arXiv)

具体看机器学习,发表数量在加速增长。我很想写下研究正在加速,但不幸的是,发表的数量与该领域的进展并不相关。

如果你在过去的几年里关注了关于 ML 的出版物,你会注意到越来越多的论文被发表。对于如何从更具体的事情中分离出相关的事情,你可能会感到不知所措。如果你不在学术界,跟踪研究不是你的工作,这将会更加困难。

深度学习的领导者之一 Andrej Karpathy 最近谈到跟上深度学习研究有多困难,因为有太多的论文。

我没有完美的方法,但在这篇文章中,我想分享我如何跟上深度学习和我感兴趣的子领域的相关论文:NLP,特别是讽刺检测和一些计算机视觉。

1.过滤相关文件

任何试图跟上当前研究的人肯定会问自己:

有这么多论文。

我读哪些?

我如何找到重要的文件?

在如此高的新论文率下,我们可以忘记手动检查和过滤。可惜的是 arXiv 没有任何排名系统,所以直接去页面很难找到感兴趣的论文。我将详细说明我获得潜在论文列表的来源。

1.1.推特

我有一个深度学习人员的名单,他们定期发布他们发现相关的新论文的链接。通过跟踪不同的研究领域,你将在每个领域获得大量有趣的论文。我关注的一些人是:

这些人中的许多人会从其他人那里转发,所以你可以通过他们找到其他来源。我想特别提到 hardmaru 和 omarsar0,他们会定期发布一篇有趣论文和一个简短摘要的链接,以及许多学习 deepl 收入概念的资源。还有一点要提一下 Rachael Tatman,她定期举行论文阅读会,在阅读论文的同时,她还解释了许多概念。

如果有你感兴趣的深度学习的特定领域,你可以在 Twitter 上搜索研究人员或从业者,你会有规律的新内容为你涌入。

1.2. ArXiv 理智保护者网页

ArXiv sanity preserver 是 Karpathy 建立的一个网站,目的是通过过滤相关论文来保持理智。你可以根据不同的标准进行排名:最近,最近热门,热门宣传(转发次数),如果你建立一个帐户来保存你的偏好,还有其他可用的功能。

我个人喜欢热门炒作部分,在那里你可以看到过去一天、一周或一个月在 Twitter 上被提及最多的论文。想法是相关的或有影响力的论文将被传阅和讨论。

例如,在撰写本文时,BERT(2018 年出版)在 Twitter 上的参与度很高,位居炒作榜榜首。我们可以看到那是一篇重要的论文。如果你在列表中看到你感兴趣领域的 2-3 年前的论文,我当然会看一看。

尽管这个网站很有用,Karpathy 自己也说这个网站过滤的相关论文数量太多,跟不上,所以更多的过滤可能是必要的。

1.3.论文与代码网页

这是你可以找到趋势研究的另一种方式,在这种情况下,本网站上的所有论文都提供了论文的代码,如果你想复制它或进行更深入的研究,这真的很有用。

你可以找到一般的趋势论文,或者按章节组织:计算机视觉、NLP、医学、演讲等。还可以通过深度学习模型中使用的方法进行浏览。

1.4.棒极了 Github 仓库

在 Github 中,牛逼的资源库是资源的精选列表,你可以找到几乎每个主题的信息。数据科学、机器学习和深度学习都有自己的牛逼的仓库,里面有代码、教程、书籍和论文。在这里你可以找到深度学习论文的精选列表,尽管它已经几年没有更新了。

对于深度学习子领域的更具体列表,您可以搜索“github awesome computer vision medical ”,例如针对您的特定用例。

1.5.本人论文列表😃

这有点自我推销的意思,但我也有自己的相关论文列表,按主题分开,按时间顺序排列,用标签标注。例如,您可以找到一个用于讽刺检测的 NLP 数据集,您可以通过查看标签#datasets 和#讥讽检测来找到它。我主要收集 NLP 的论文,但不是全部,我包括许多旧的,基本的论文,它们是当前研究的基础。

如果你觉得有趣,一定要启动资源库:)

1.6.但是,如果我刚刚开始,这些论文太难了怎么办?

这是一个现实问题。如果你从未读过一篇研究论文,试着去读任何一篇当前的论文,你很可能几乎什么都不懂。这是因为**研究是累积的,**每篇论文都引用了许多更早的论文,而这些论文又是基于以前的论文。

我的 NLP 研究之旅

当我开始阅读 NLP 论文时,在介绍中作者提到他们正在使用一些人介绍的一些架构。我对它不熟悉,所以我找到了报纸并开始阅读。这个架构引用了一些我也不知道的东西,所以我查了一下,并开始阅读另一篇论文。

我想读一篇论文,结果我有一叠 15 篇论文,这些论文反复引用了其他论文。

所以我的建议是,不要因为不理解论文中提到的大部分概念而感到难过。它可能会被引用,所以先找到那篇论文并试着理解它。

你将不得不递归地回到基础论文之前,但是一旦你这样做并开始理解基础知识,你将构建你的知识模块,并对你阅读的论文有很强的理解。

根据您之前的知识,这可能需要一些时间。但是如果你想阅读和理解论文,你需要理解参考文献。

此外,这个令人惊叹的深度学习论文路线图存储库包含按时间顺序排列的论文,从更基础、更通用到更具体。你也可以用这个来指导你的学习。

2.组织纸质阅读

如果你遵循了第一部分的步骤,你的列表中会有很多论文。阅读论文是一项需要集中注意力至少一个小时的活动,所以除非你是一名学者,可以每天阅读论文,否则你必须在你的时间表中找出时间来阅读它们。

你可以尝试不同的策略,对我来说最有效的一个是在工作日下班后每周阅读 3 篇论文。在前一个星期天,我会选择接下来要读哪三本书,并在日历上分配时间。有时候会有其他事情发生,但是这个系统对我来说非常好。

3.看报纸

你有你想要阅读的论文列表,从基础论文到最新的,或者从我提到的前几个资源。我建议你一次只关注一个话题。如果你对演讲感兴趣,在转向另一个子领域之前,把你的时间集中在演讲上,直到你对自己的知识有信心为止。

但是一旦你选择了你想读的报纸,实际上该怎么做呢?

2.1.模拟与数字

这是个人偏好,有些人喜欢在他们的电脑上阅读 pdf,而其他人喜欢打印出来并在纸上做笔记。

2.2.先弄清楚论文的大意

在你开始阅读细节之前,先了解一下这篇文章的大意。是一个数据集,一个模型,一个系统?它基于什么,一般来说是如何工作的?

如果你明白这一点,那么你就可以深入研究方法论。否则我建议先看参考文献。

2.3.记笔记

除非你有惊人的记忆力,否则你会忘记很多你读过的东西,花这么多时间在上面是浪费时间。所以我建议你像我在我的论文库那样保存你的学习成果。

如果你喜欢把笔记保存在笔记本里,那很好,只要确保它们易于搜索,并且当一篇论文引用另一篇时,你可以快速地从一篇跳到另一篇。

无论你选择哪种媒介,我认为把你理解的东西记下来并保存在某个地方是一个非常好的主意。随意复制我的存储库的模板,制作你自己的列表。

4.跟上新的报纸

看论文是一项永无止境的任务,那么如何跟上新论文呢?

我在 Twitter 上关注许多研究人员,所以如果他们谈论一篇论文,我感兴趣,我就会把它添加到我的列表中。然后,我每周日都会提醒自己查看 arXiv sanity preserver 和带代码的论文,如果有我想看的论文的话。如果是这样,我会将它们添加到列表中。最后,我分配了三篇论文在下周阅读。

结论

深度学习的发展速度越来越快,尽管不可避免地会错过一些东西,但我希望在我的工作领域的研究方面保持一定的更新,我知道很多人也是如此。

我希望这篇文章帮助你创建了一个系统来跟上这种混乱的新论文速度,随时在 Github 上启动我的回购来查看我阅读的新论文的更新,在 Twitter 上关注我或者给我发消息,如果你有任何问题:)

感谢阅读!

如何用简单的话学习 Git

原文:https://towardsdatascience.com/how-to-learn-git-in-simple-words-263618071dd8?source=collection_archive---------1-----------------------

行业笔记

保护你数据科学家职位的行动手册

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

扬西·敏Unsplash 上的照片

在过去的几年里,我和许多数据科学家一起工作过。我发现他们中的一个共同点是缺乏软件开发技能。软件开发中一个简单但重要的实践是版本控制,在其他技术存在的情况下,它在业内被称为 Git 。我发现许多数据科学家对 Git 不太适应,主要是因为他们不明白为什么、在哪里以及如何使用它。在本文中,我用简单的语言描述了 Git 技术,并为您提供了必须使用它的场景**。我还描述了你日常开发需要的最重要的功能:(a) 保存变更 , (b) 检查代码库 , © **撤销变更,和(d) 重写历史。希望这能帮助你更好地适应这项神奇的技术。

在数据科学面试中,你可能不会被问到,例如,“必须如何有效地使用 Git?”。然而,您必须从第一天开始就知道如何使用 Git。

在数据科学面试中,你可能不会被问到,例如,“必须如何有效地使用 Git?”。然而,您必须从第一天开始就知道如何使用 Git。如果你不愿意和 Git 一起工作,你会给你的经理留下不好的第一印象;尤其是更高级的 Git 操作,比如 Rebase 。如果使用不当,高级 Git 操作可能会产生降低开发速度的问题。

当我采访数据科学家时,我也会评估他们的软件开发技能。许多面试官不进行这样的评估,但这并不意味着他们不希望你知道 Git。由于不了解 Git 技术,你最终会与同事进行非常低效的协作,这很容易危及你的职位。所以,要做好准备。

Git 是什么?

Git 是一个被广泛接受的软件,用于跟踪团队内部用于协调开发的代码库(也称为版本控制)的变化。在版本控制中,主要的目标是保持你的本地代码库与远程代码库同步,同时你拉取其他开发者所做的所有最新变更,并推送你所做的所有最新变更。远程代码库是主要的代码库,开发人员必须经常查看它以了解最新的变化。

Git 是一种技术,它使你能够在所有代码都频繁改变的时候,保持每个代码库与远程代码库同步。 Git 让您保存和检索开发中每个步骤的快照,也称为“状态”。我们有许多软件行业中状态管理技术的例子,如 Docker(平台即服务)或 Terraform ( 基础设施即服务)。Git 是广泛接受的代码变更状态管理技术。

Git 让您保存和检索开发中每个步骤的快照也称为“状态”。我们有许多软件行业中状态管理技术的例子,如 Docker 或 Terraform。Git 是广泛接受的代码变更状态管理技术。

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

Roman SynkevychUnsplash 上拍摄的照片

—如何使用 Git?

保存更改

开发中一个常见的噩梦是由于任何原因丢失了一天来所做的代码更改。Git 让您有机会在本地代码库和远程存储库中保存您的更改。您可以使用commit命令将您的更改保存在本地代码库中,使用push 命令将您的更改保存在远程代码库中。如果你想暂时保存最新的修改,你可以使用stash命令。你通常在你想要的时候使用stash,例如,在两个分支之间切换而不提交。

检查代码库

有时,您需要检查代码库,以收集关于代码库中变更状态的更多信息。我在上面描述了 Git 是一种状态管理技术,所以你必须能够随时跟踪代码库的状态。您可以使用status命令来显示和跟踪代码库的状态。您还可以使用log命令来显示提交的快照。log命令让你列出项目历史,并搜索特定的变更。

撤消更改

出于多种原因,您可能需要撤消一些已提交的更改。您可以使用reset命令撤销更改。该命令有两种主要类型:hardsoft。当soft参数被传递时,所有的代码更改都保留在代码库中,但是所有相应的提交都将被删除。当hard参数被传递时,代码库的状态被完全重置为您所指向的代码库的确切状态或快照。代码库的每个快照都用唯一的提交 id 注册。我来分享两个你需要用reset搭配softhard实参的场景。

  • 场景 1 (当你需要使用**reset --soft****)——**你在一家对开发范式有严格规定的公司工作。你正在开发特性 A 的一个分支,同时,你开始开发特性 B,你忘记创建一个新的分支,并在特性 A 所在的分支上提交与特性 B 相关的代码变更!在几次提交之后,您注意到了这一点,并决定清理您的分支。您必须撤消您的更改。
  • 场景二 ( 当你需要使用**reset --hard****)——**你正在进行 Git 操作,突然,你犯了一个错误。你最近所有的改变都被删除了,你变得非常沮丧。您希望将代码库恢复到您可以确定其质量的快照。这时,你需要的是回到干净的代码库的快照。

请注意,hard参数必须由谨慎使用,因为它会删除所有内容。

重写历史

一群开发者可能反对重写历史;然而,许多其他人使用这个强大的特性来更快地开发,同时减少冲突。如果使用正确,您可以使用此功能在状态管理系统中建立干净的历史记录,并快速解决冲突。重写历史必须使用的主要操作符是rebase。您可以使用 rebase 将几个提交压缩成一个提交。

在两种主要场景下,你需要使用rebase

  • 场景 1 —几天前你拿走了主分支的一个分支。你做了一系列的发展,但你的工作还没有完成。在此期间,您的同事完成他们的任务,并将他们的更改合并到主分支中。现在,您的分支与主分支中的最新变更不同步。您必须将您的分支(取自main分支的旧快照)重新建立在main分支的最新变更之上。你可能会问为什么?因为否则,您不能将您的变更合并到主分支,因为您的分支已经过时了(即,可能与main分支有一些差异)
  • 情景二 —你在一家分公司工作了一段时间。您在大量提交中提交了您最近的更改。出于两个原因,您决定在提交中压缩您的提交(即重写历史)。首先,你要有一个清晰的开发路径(也称为干净的历史)来确保开发的坏习惯不会被推到远程代码库。第二个,你想在main分支的最近变化的基础上重新调整。如果您的分支中有许多提交,冲突解决(即,您的分支和新的主分支之间的差异)会变得更加困难,因为您必须解决每个提交中的冲突。

注意,如果你不是 Git 专家,千万不要试图自己或在关键代码库上重写历史。我强烈建议在一个关键项目中应用这些命令之前,使用一个实验性的代码库来掌握 Git,尤其是复杂的命令。你可以在下面的文章中了解更多。

—遗言

如果你想了解更多,你应该了解一下git-flow。然而,什么是 git-flow 呢?基于 git 的开发工作流,也称为 git-flow,是构建和发布软件的一系列开发步骤的**。为了进行有效的协作,你还必须知道最基本的 git 流的具体细节。你可以在这篇文章中读到两个最重要的 git 流: Git 流是生产力的源泉,而不是混乱。**

我强烈推荐你去看看 Atlassian 创作的超赞的教程。另外,如果你不习惯 Git CLI,你可以使用伟大的 Atlassian 的 Git 客户端,名为 Sourcetree 。虽然它并没有消除您使用 Git CLI 的需要,但它为您提供了一个用户友好的环境来使用 Git 满足许多常见需求。

感谢阅读!

如果你喜欢这个帖子,想支持我…

https://pedram-ataee.medium.com/membership

如何学习 LSTM 的长期趋势

原文:https://towardsdatascience.com/how-to-learn-long-term-trends-with-lstm-c992d32d73be?source=collection_archive---------10-----------------------

Intel 和 Johns Hopkins 开发的一种提高 LSTM 性能的方法

长短期记忆(LSTM)网络广泛用于语音识别、语言翻译和时间序列预测。然而,LSTMs 很难了解长期趋势。

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

图 1:普通递归神经网络(RNN)的示意图。图片作者。

2021 年,英特尔和约翰霍普金斯大学的研究人员合作开发了一种 LSTM 细胞,提高了准确性和速度。这个方法非常新,所以不幸的是没有任何库/包。但是,它可以使用任何基本的深度学习包手动构建。

让我们开始吧…

技术 TLDR

  • 信息以幂律速度衰减。换句话说,随着我们沿着 LSTM 细胞链越走越远,我们会以幂律速率丢失先验信息。然而,LSTM 忘记盖茨以指数速度删除信息,这阻止了学习长期趋势。
  • **考虑到信息的幂律衰变,我们创造了一个新奇的遗忘门。**该遗忘门使用 sigmoid 复位功能,如有必要,清除先前信息,仅清除当前时间步长的参考信息。然而,当复位未被激活时,与传统的遗忘门相比,先前的信息被保留更长时间,从而允许信息的幂律衰减。

但是,到底是怎么回事呢?

这将是一篇非常技术性的文章,但是你不需要太多的先验知识来理解核心概念。这东西很酷,所以让我们慢下来,了解到底发生了什么…

什么是 rnn 和 LSTMs

从头开始,让我们定义我们的神经网络框架。处理顺序数据(NLP、时间序列等)时。),通常的做法是使用递归神经网络(RNN)。rnn 只是一系列神经网络,其中一个的输出是下一个的输入。

然而,rnn 并不完美。训练时,存在不稳定梯度的可能性。这就是长短期记忆(LSTM)细胞的来源。

lstm 是 RNNs 中的一个专门单元,使用 gates 来管理输入和输出信息。

门是激活功能,取值在 01 之间。如果一个门取一个小值,比如说 0.001 ,我们将其乘以输入信息,然后大幅缩小。相反,如果门取一个大值,比如说 0.998 ,我们将它乘以输入的信息,并让它基本保持不变。

但是这个不稳定梯度问题是什么,LSTMs 是怎么解决的?

我们为什么需要 LSTMs

嗯,和任何神经网络一样,rnn 是通过按照所有先前节点导数的乘积成比例地更新节点权重来训练的。所以,如果网络中其他节点的导数接近于零,我们的权重更新将会非常非常小。这种现象被称为消失梯度问题,并阻止我们的模型学习。

同样,如果我们网络中的梯度非常大,我们的权重更新也会非常大。这被称为爆炸梯度问题。

现在,基本的神经网络通常不会遇到这个问题——如果你只有两三层,就没有多少小/大导数的复合。但是,如果 RNN 有许多神经网络依次堆叠在一起,会发生什么呢?

正如你可能已经猜到的,rnn 有更多的层,因此细胞衍生物有更多的机会复合。

这就是 LSTM 细胞的用武之地——它们有调节信息流的闸门,因此不稳定的梯度不太常见。

LSTM 细胞结构

现在我们有了背景,让我们来理解 LSTM 细胞的解剖结构…

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

图 2:LSTM 电池的组件— src 。图片作者。

乍一看,发生了很多事情。但是真的没那么差。

在图 2 中,带有 σ (sigma)的青色方框是门。它们是神经网络,决定有多少信息应该来自先前的细胞和我们的预测者。请注意,它们的编号为 1-3。

在决定保留多少信息后,gates 将这些信息传递给我们的 tanh 。tanh 函数负责更新节点的权重。

最后,我们输出两组信息:单元格状态和隐藏状态。单元状态充当长期记忆,隐藏状态是短期记忆。

快速回顾一下这些门,让我们参考下面的数字并定义它们…

  1. **遗忘门:**确定我们应该遗忘多少长期信息。被保存的信息被输入到我们的细胞状态中。
  2. **输入门:**决定我们应该忘记多少短期信息。保存的信息被输入到我们的 tanh 函数中进行培训。
  3. **输出门:**利用长期和短期信息,确定在我们的隐藏状态下应该输出多少信息。

通过使用这些门来调节信息流,我们能够避免计算有问题的梯度。

很好,所以我们不再有消失梯度的问题了。但是,遗憾的是,LSTMs 也不是一个完美的解决方案。让我们进入英特尔和约翰霍普金斯大学的研究人员讨论的概念。

问题是:信息衰减

在很多情况下,我们希望从数据中了解长期趋势。例如,如果我们在看我们最喜欢的股票价格的每日时间序列,去年的价格可以代表今天的价格。但是,“遗忘之门”倾向于删除之前许多步骤中的信息——如果它在过去的 100 天里没有用,我们为什么要保留它呢?

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

图 3:细胞状态的指数(红色)与幂律(蓝色)信息衰减。y 轴是保留信息的比率。x 轴是时间步长— src 。图片作者。

事实证明,LSTM 细胞中的信息以指数速度衰减,如图 3 中的红线所示。因此,在这个模拟中,传统的 LSTM 单元将会删除之前 150 个时间步长的几乎所有信息。这无疑给了解年度趋势带来了问题。

那么,我们如何保存信息以便长期学习呢?

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

先前的研究表明 NLP 信息以幂律速率衰减,而不是指数衰减。通过判断图 3 中的曲线,我们可以看到幂律曲线在保留的信息方面有一个不太陡峭的下降。

很好,那么让我们弄清楚如何让 LSTM 细胞以幂律速度而不是指数速度忘记信息。

解决方案:新的遗忘之门

研究人员的贡献是一种符合幂律标准的新型遗忘门。

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

图 4:新的遗忘之门在 LSTM 细胞信息流中的位置— src 。图片作者。

如图 4 所示,我们用一个新的遗忘门取代了 sigmoid 遗忘门,它可以更好地调节长期记忆中存储的信息。

免责声明,这可能会有点复杂,但我们会尽可能保持高水平。

细胞状态

让我们从定义我们的细胞状态开始,也就是我们的长期记忆。

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

图 5:时间步长 t 的单元状态的定义。

在图 5 中,组件 1(我们的遗忘门)和组件 2(我们的先前细胞状态)决定了保留多少长期信息**。组件 3(我们的输入门)和组件 4(我们的中间细胞状态)决定了保留多少短期信息。**

如果你好奇的话,中间带点的奇怪圆圈是哈达玛积。它仅仅意味着我们将两个矩阵中每个索引的值相乘。

新的遗忘之门

现在,我们来定义一下研究者提出的小说《遗忘之门》。

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

图 6:幂律遗忘门的定义。图片作者。

在图 6 中,我们有一个新的遗忘门,它控制着我们在长期记忆中回顾多远。 t 对应于当前时间步长的索引, k_t 对应于感兴趣的第一个时间戳的索引, p 是控制我们的信息衰减速率的可学习参数。

请记住,我们的遗忘之门的目的是调节长期信息的流入量。它通过将该信息乘以 0 到 1 之间的值来实现。所以,如果 f_t 接近 1,我们保留大部分信息。反之,如果 f_t 接近于 0,我们就丢失了大部分信息。

更具体地说,当回溯到很远的时候,我们的遗忘门取值接近 1。这意味着我们保留了大量的长期信息。然而,如果我们着眼于短期,我们的遗忘之门会更近,我们只保留部分信息。

重置门

最后,您可以将 k_t 视为一个黑盒,它输出第一个包含有用信息的索引,然后就此打住。但是,为了完整起见,让我们看一看。

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

图 7:幂律遗忘门复位元件的定义。图片作者。

在图 7 中,我们看到一个新变量: r_t (重置门)。复位门是一个 sigmoid 激活函数,意味着它取 0 和 1 之间的值。如果其值为 1,则 k_t-1 被取消并删除所有先前信息。如果其值为 0, t 取消,我们保留所有历史信息。

摘要

哇哦。我们刚刚涵盖了大量的信息。

如果一切都不清楚,在这些方程中输入数字和/或阅读论文(链接在评论中)可能会有帮助。话虽如此,要想深入理解,这里有三个要点:

  • 传统的 LSTM 细胞会很快丢弃有用的信息。
  • 在这篇文章中,我们概述了一个对长期信息更明智的遗忘门——它在长期学习任务中胜过传统的 LSTM 细胞。
  • 概述的遗忘门引用找到有用信息的最早索引。利用这个指数,它可以定制应该将多少长期记忆传递到我们的模型中。

感谢阅读!我将再写 40 篇文章,将“学术”研究引入 DS 行业。查看我的链接/教程的意见,建立 LSTM 的权力法。

如何学习 Matlab

原文:https://towardsdatascience.com/how-to-learn-matlab-f96160fc46b2?source=collection_archive---------11-----------------------

开始您的 Matlab 之旅所需要知道的一切

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

Unsplash 上由 Rich Tervet 拍摄的照片

与其他开源编程语言相比,Matlab 无疑拥有最全面的文档。正因为如此,我总是认为学习和进入 Matlab 世界应该是一个非常简单的过程,不管你已经是一个经验丰富的其他语言的程序员,或者这是你想开始的第一个语言。

然而,当我最近开始这段旅程时。我惊讶地发现,阅读官方文档有时并不是体验这种语言的最有效方式。正是因为它非常全面,它应该被更好地描述为参考而不是教程。有鉴于此,我决定总结一下我所学到的东西,我相信这将涵盖你需要知道的最基本的东西。

博客中使用的代码可以在我的 Github 库中找到。

前言:我推荐的学习一门新语言的步骤

虽然这只是我自己的观点,但我坚信学习语言的第一步应该是熟悉它的数据类型。最不重要的步骤是记住各种功能。我们没有人能够知道每一个功能,但是多亏了这些文档和我们的“最好的朋友”——谷歌,现在找到正确的功能已经变得容易多了。然而,如果你不了解每个变量的属性是什么,那将是一个很难前进的道路,并在此基础上发展新的知识。

在这篇博客中,我将严格遵循这个程序,向你展示我通常是如何学习一门新语言的:

第一步:学习 Matlab 数据类型

我发现理解 Matlab 很有用的一点是,

每个对象都是一个矩阵(数组)

让我们用下面的代码片段来说明这一点:

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

数据类型训练营(图片由作者提供)

我倾向于使用最愚蠢的例子来解释基本的想法,没有任何功能或逻辑语法。所以在 Matlab 控制台中,我输入了 10 多个不同的变量,它们的数据类型显示在右边的工作区窗口中。正如你所看到的,Matlab 中的一切看起来都像一个矩阵/数组(工作区窗口中的 size 列),当你键入a=1a时,实际上变成了一个1*1数组,而classdouble,这是因为double是所有数值变量的默认类。你可以随意的将它转换成另一个类,使用相应的转换函数。如果你想知道如何做到这一点,只需谷歌那个,这就是为什么我建议函数应该是最后一步学习,而不是首先要担心的事情。现在,你只需要知道你有可能选择不同的职业,然后你就可以知道了。

继续,我们初始化了另一个变量b='hello',你可能认为它是一个字符串,但实际上,b恰好是一个大小为1*5的数组,类为char。如果你真的想有一个string变量,你需要用双引号,所以我们有c="hello"。现在c变成了一个1*1数组,现在类为stringchar array将每个字符视为一个单元,而string将整个字符串/句子视为一个整体。你可以像变量g=["hello","yes"]一样拥有string array

然后,我们有一个数值向量和矩阵。在 Matlab 中,使用whitespace进行水平扩展,使用;进行垂直扩展。所以,对于一个2*3矩阵f,应该使用[1 2 3; 4 5 6]来创建。同样,行向量d应该是[1 2 3],列向量e应该是[1;2;3]

如果我们在一个数组中有混合的类呢?我们需要使用cell array来存储混合类型。变量h是一个形状为2*3的单元格数组,它的类是cell,表示数组中每个元素的类型都是不同的,正如你所看到的,我们既有chardouble,甚至还有嵌套的双数组。

下一个类类型是struct,它类似于 Python 中的dictionary,代表一个key-value关系,我们用变量i来说明struct的创建。同样,i也是一个数组,其类类型为struct

到目前为止,我希望这个思路更清晰一点,你可以把 Matlab 中常见的对象都看成数组, 一个数组也可以包含其他数组 。但是,类的类型是不同的。为了加强理解,让我们构建一个变量j,我把它做成一个三维数组,但是类的类型是struct。我们可以简单地将这个数组的形状指定为(1,2,2),并将一个struct元素分配到一个槽中。

Matlab 共有哪些内置类类型? 和大多数其他语言一样,常用的类型包括int,它可以进一步由int8int16 …和uint8等无符号语言组成。然后,double用于浮点数,charstring用于文本,logical包含值truefalse,以及我们上面解释过的struct类类型。

最后但同样重要的是,您是否注意到在每个命令的末尾总是有一个;?这是为了禁止在控制台中打印这一行。默认情况下,每一行都将在控制台中执行和打印。此外,每个没有赋值变量的命令(见第 13 行a+1)将被赋值给一个内部变量ans,这就是为什么我们在工作区窗口中有一个值为 2 的ans对象(ans = a + 1,a = 1)。

基本数据类型的介绍到此结束。因为一切都是数组,所以知道如何访问数组中的每个元素也很有帮助:

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

如何访问数组中的元素?(图片由作者提供)

需要记住的三件事是:

  1. 普通数组使用圆括号,单元数组使用花括号
  2. Matlab 是 1 基索引 (Python 是 0 基索引)
  3. 理解**end** 关键字和切片操作(向前和向后)

除了上面的类类型,另一个有趣的类类型叫做“表”,让我们说下面的例子:

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

Matlab 中的表格类类型(图片由作者提供)

我们创建了一个表格,如右上角所示,在左下角,我们可以看到它的类类型是table,形状为 3*3。如果我们对每一列(姓名、gpa、年级)使用行向量,那么形状将变成 1 * 3。要访问每一列,我们需要使用点.符号。“table”类类型在常见任务中非常有用,因为它类似于其他解释语言中的dataframe对象。

第二步:循环、If、自定义函数等

我发现很多教程都着重于解释如何用每种语言编写for loopif statement。虽然它们很重要,但是如果你已经有了至少一门语言的经验,一个简单的备忘单就足够了。因为这个教程真正的目的是说明 如何自己学习 一门新的语言,而不仅仅是灌输一些知识。我强烈建议你只要谷歌一下,一秒钟就能得到你需要的东西,但为了完整起见,让我在下面的截图中为你总结一下:

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

备忘单:Matlab 中的基本逻辑语句(图片由作者提供)

唯一值得注意的是,当构造一个函数时,Matlab 倾向于用一种独特的方式定义它,公式看起来像function return_value = function_name(arg1,arg2,...),然后你只需通过它的function_name.调用函数

第三步:更多高级功能和各种内置功能

现在是时候探索更高级的主题了,例如,如何在 Matlab 中构建自定义类(面向对象编程,OOP)?或者,什么是 Matlab 中的匿名函数?你可以通过谷歌搜索它们得到你需要的东西(如果你点击链接,我已经为你做了),我希望这可以帮助你习惯于如何深入真正的编程世界,因为这就是我们日常工作的方式。

正如我最初说的,我甚至没有在我的教程中教你一个内置函数,例如,如何连接两个字符串并进行点积或叉积。尽管如此,对基本数据类型的良好掌握将使您未来的学习更加容易。这就是我今天想与你分享的内容,我希望这篇小文章可以帮助你掌握你的特定任务所需的其他更高级的操作。

差不多就是这样!我希望你觉得这篇文章有趣和有用,感谢阅读!如果你喜欢这篇文章,请在 medium 上关注我,非常感谢你的支持。在我的 TwitterLinkedIn 上联系我,也请让我知道你是否有任何问题或你希望在未来看到什么样的教程!

如何用单个神经网络学习多项任务

原文:https://towardsdatascience.com/how-to-learn-multiple-tasks-with-a-single-neural-network-50a99e01e6f9?source=collection_archive---------16-----------------------

灾难性遗忘曾经是一个棘手的问题。最近取得了进展,请继续阅读以了解更多信息。

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

艾莉娜·格鲁布尼亚克在 Unsplash 上的照片

现代神经网络非常擅长学习一件特定的事情。无论是下棋还是折叠蛋白质,只要有足够的数据和时间,神经网络就能取得惊人的结果。不幸的是,网络目前只能胜任一项任务。你可以训练一个网络擅长某件事,但一旦你试图教网络别的东西,它就会忘记在第一项任务中学到了什么。这被称为灾难性遗忘。由于智能的标志之一是学习和存储多项任务,因此如何在多项任务上训练神经网络(并解决灾难性遗忘)的问题极其重要。

一个想法是改变训练数据,使得每个任务的训练示例相互交错。例如,假设我们有 3 个任务 A、B 和 C,示例分别标记为 a_i、b_i 和 c_i。这种思想将训练集排序为 a1,B1,C1,a2,B2,C2,a3 等。重点是以同等的重视程度同时训练所有三个任务,希望通过这种方式学习的网络权重将包含关于所有三个任务的信息。在实践中,这个想法是可行的——网络将同时在所有三项任务上慢慢变好,避免灾难性的遗忘。

但是,在我看来这种方法是作弊。真正的智能学习(例如人类)不需要以这种方式交错任务。事实上,通常情况下,任务是在大时间块内连续学习的(我们称之为“块调度”)。典型的学校是这样安排的:首先你学 1 小时数学,然后 1 小时英语,然后再学 1 小时历史,以此类推。你不做一道数学题,写一句作文,然后看一句历史书。那么问题来了:有没有一种方法可以让神经网络用块调度来学习多个任务?

2016 年,Deepmind 的研究人员出了一篇论文解决了这个问题。我特别喜欢他们的方法,因为它没有那么复杂。他们真正做的只是对网络应用一种特殊类型的正则化。让我们仔细看看。

假设我们有两个任务,A 和 b,block schedule 是先用很多例子训练 A,然后我们切换到训练 b,Deepmind 的研究人员提出先正常训练 A(即正则梯度下降/反向传播)。然后,在 B 块期间,我们保持从 A 学习的权重,并继续梯度下降。唯一的区别是我们现在包括了一个二次正则化项,它对于每个权重都是唯一的。这个想法是使用这个每权重正则化来惩罚远离从 A 学习的权重。被认为对 A 更重要的权重将被惩罚得更重。在数学上,我们在 B 训练块期间的成本函数是 L(θ)= L _ B(θ)+σ(k _ I *(θ_Ai-θ_ I)),其中 I 是所有网络权重的指数,θ_ Ai 是 A 训练块完成后的权重。L_B(θ)是 B 的正态成本函数,可能是平方误差或对数损失。最后,k_i 是权重 I 对于预测 a 的重要性。

还有一种更直观的方式来思考每权重正则化。想象一个物理弹簧。当你拉弹簧时,你拉得越远,弹簧拉回来的力就越大。此外,有些弹簧比其他弹簧更坚固。这和我们的算法有什么关系?你可以想象一个弹簧连接到神经网络中的每个重量。所有弹簧的相对强度是正则化的。某些弹簧(对 A 来说很重要)会特别强,所以在 B 的训练过程中,算法会不鼓励去拉那些强弹簧,对应的权重不会有太大的变化。因此,该算法将改为拉动较弱的弹簧,并且对应于这些弹簧的权重将改变更多。

考虑这个算法的另一种方式是,它是对 L2 正则化的改进。利用 L2 正则化,权重不被鼓励改变太多,其惩罚对应于权重大小的平方和。然而,在 L2 正则化中,所有的权重被同等地惩罚。在我们的算法中,只有重要的权重被阻止改变。

好的——我们现在直观地理解了这个算法是如何工作的。通过保持 A 的重要权重相对恒定,我们可以在 b 上成功训练的同时保持 A 的性能。但是,我们仍然没有解释如何确定 A 的“重要”权重。所以让我们问一个问题:什么使权重变得重要?一个合理的答案可能是:如果一个权重比其他权重对最终预测的影响更大,那么它就是重要的。更具体地说,如果一个权重相对于最终预测的导数具有比其他权重导数更高的幅度,我们可以说该权重是重要的。但是我们忽略了一件事——因为神经网络中的权重会影响其他权重,它们的导数是相互关联的。换句话说,我们不能只考虑给定权重的导数本身;我们需要查看所有权重导数的协方差矩阵。一个更正式的版本被称为费希尔信息矩阵,这是研究人员最终使用的。

因此,总结一下:首先我们正常地训练 A,然后我们用每权重二次正则化训练 B。这些每个权重的正则化依赖于权重对 A 的相对重要性,这可以通过 Fisher 信息矩阵找到。结果是一个对 A 和 b 都很有效的神经网络。研究人员给这种方法起的名字是“弹性权重合并”(EWC)。

所有这些理论上的讨论都很棒,但实际上有用吗?研究人员在监督学习和强化学习环境中测试了这种新方法,以找出答案。首先,为了测试监督学习,研究人员使用了流行的 MNIST 任务。为了从 MNIST 创建多个任务,他们获取输入的 MNIST 图像,并用几个固定的常数对它们进行排列。这个想法是,在一个排列(MNIST 图像+常数 1)上训练的分类器不会在另一个排列(MNIST 图像+常数 2)上工作,所以实际上,我们有不同的任务。然后,研究人员比较了 EWC、规则梯度下降和 L2 正则化的结果。在第一项任务中(MNIST 图像的第一次排列),所有三种方法都是可比较的。随着越来越多的任务被引入(其他排列),EWC 远远比其他人表现得更好。

强化学习也有类似的结果。在这里,实验是学习十种不同的雅达利游戏。游戏的顺序是随机的。同样,在第一场比赛中,代理使用 EWC 和使用基线( DQN )获得了相似的性能。随着更多游戏的引入,EWC 在监督学习案例中逐渐退出。

在这篇文章中,我们介绍了灾难性遗忘的问题,并通过 EWC 算法背后的直觉。我个人认为 EWC 是朝着真正智能的正确方向迈出的一步,我很高兴看到接下来会发生什么。请留下任何问题/评论,感谢阅读!

4 门现代互动课程,学习和提高您的 Python 编码技能。

原文:https://towardsdatascience.com/how-to-learn-python-coding-9f096d70c22d?source=collection_archive---------12-----------------------

这里有一个免费资源的精选列表来指导你的学习过程。

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

如何免费学习 Python 编码——图片来自 PexelsChristina Morillo

互联网上充斥着大量的学习资源。虽然我钦佩他们所有人,但我不禁认为初学者很容易迷路,再也回不来了。

我是自学的 Python 程序员。我见过很多成功人士也这样做。Python 理解起来非常直观,应用程序也非常强大。

我很高兴我选择了 Python。

我第一次学习 Python 是通过 codeacademy.com 的。通过他们的互动系统学习真是太棒了。但不幸的是,它不再免费了。

虽然我仍然向我指导的大多数人推荐它,但我有一个其他免费资源的列表。

这里有一个精选的列表,以及为什么它们看起来很棒。我希望这将有助于初学者找到正确的。

我保证会告诉你我会从哪里开始并进步,如果我要重新开始的话。但在此之前,让我们看看我们拥有的现代选择。

Scrimba:免费的交互式 Python 教程。

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

如何免费学习 Python 编码?截图来自作者

为什么? Scrimba 在互动性上更上一层楼!

和其他平台一样,导师会指导你学习课程材料。但是你可以暂停视频,开始编辑上面的代码。

这就是你在 Scrimba 教程上看到的魔力。

当我第一次看到这个的时候,我被迷住了。它几乎把你带到了一个真实的课堂环境。

给自己试试 Scrimba

光有交互性并不能成为一个很好的学习平台。Scrimba 每周举办编码挑战,每月增加新的课程。

这就是你在编程之旅中需要帮助成长的那种社区。

Datacamp:内置代码编辑器的高质量 Python 教程。

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

如何免费学习 Python 编码— Datacamp?截图来自作者

为什么? 专攻数据科学的 Python。

Python 对于许多应用程序来说都很棒。数据科学家喜欢它的简单性和对各种问题的适用性。正因为如此,几乎每个渴望成为数据科学家的人都会考虑学习 Python。

如果你对数据科学感兴趣,Datacamp 是你应该去的地方。

你可以在许多课程中选择适合你的课程。你将按照演示者的视频教程做一个互动练习。

除了 Python,还可以选择 R、SQL 等方面的课程。

自己试试 Datacamp

Hackinscience:通过解决问题来学习 Python。

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

如何免费学习 Python 编码— HackInScience?截图来自作者

为什么? 引导问题解决,逐步提高你的 Python 编码技能。

如果你不喜欢系列讲座,你应该去看看《黑客科学》。

Hackinscience 与这份名单上的其他网站不同。这是一个由五组互动练习组成的集合;基础、训练、算法、命令行和 NumPy。

Hackinscience 是巩固你的知识的一个方便的工具,值得一试。

亲自尝试黑客科学

Sololearn:学习 Python 的社区。

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

如何免费学习 Python 编码— Sololearn?截图来自作者

为什么?解决挑战,通过纠正彼此的错误来学习。

与其名字相反,Sololearn 是一个面向初级 Python 程序员的优秀社区。

除了 Python 之外,您还指导过许多其他语言的交互式课程。您可以选择一个并完成挑战以解锁下一关。

是的,听起来像电子游戏。

此外,你还可以找到数据科学、机器学习和 web 开发的课程。

亲自尝试一下。

如果它们不适合你,试试 YouTube 上最好的 Python 教程。

我们也有一些非常棒的 Youtube 视频,非常适合开始 Python 编程。我很想提到其中的几个,这是我最近回顾和推荐的。

Mosh Hamedani 的 Youtube Python 教程。

我强烈推荐 Mosh Hamedani 的视频给大家。他制作了很多技术的优秀视频教程,包括 Python。

免费代码营的 Youtube Python 教程。

Freecodecamp 的 youtube 视频是那些想学习 Python 的人的另一个高质量资源。在我看来,他们组织得很好,复习得也很好。

最后的想法,

这是来自互联网上数千篇文章、视频和指导教程的一小部分资源列表。最棒的是,如今知识可以自由获取。

Python 对每个人都非常有帮助,不管他们的职业是什么。如果你正准备开始学习 Python,我希望这里的列表能对你有所帮助。

就像我之前承诺的,如果我必须重新开始,我会这么做。

如果我是一个完全的新手,我会从 Scrimba 开始。这是一个顺畅的互动学习过程。同时,我会做黑客科学的练习。这会让你对基本原理有一个坚实的理解。

然后,我会学习 Datacamp 上的课程,以提高我的数据科学相关的 Python 编码技能。

不管我选择了什么,我都会在 Sololearn 上学习课程,并加入他们的社区。

Youtube 视频呢?在 Python 中工作多年后,我仍然会观看这些视频。

问好👋对我来说LinkedInTwitterMedium 。看来你和我有许多共同的兴趣。

还不是中等会员?请使用此链接 成为会员 因为我为你免费推荐赚取佣金。

如何像专家一样学习解决数据科学问题,并变得可就业

原文:https://towardsdatascience.com/how-to-learn-to-solve-data-science-problems-like-a-pro-and-become-employable-b3fd2f4bec71?source=collection_archive---------15-----------------------

学习数据科学的最实用方法(包括同类最佳参考资料)

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

斯科特·格雷厄姆Unsplash 上拍照

学习数据科学的方法有很多。有很多课程,新兵训练营,在线教程等等。我见过很多有数据科学认证的人找不到工作。问题是,大多数课程或训练营都不会教你找到工作所需的技能。获得就业机会的最佳途径是获得实践经验。获得能让你被雇佣的技能的最有效的方法是参与项目。

数据科学团队致力于解决许多业务问题。他们中的每一个人的方法都会非常不同。然而,解决问题所需的核心技能并没有太大变化。大多数现实生活中的数据科学问题属于以下类别之一。

  • 回归
  • 分类
  • 使聚集
  • 建议
  • 自然语言处理
  • 计算机视觉

在本文中,我将分享一些问题、解决这些问题的方法以及参考脚本。帮助您学习解决几乎所有数据科学问题。此外,这将有助于你获得能让你找到工作的技能。

回归

回归问题常常被低估,没有得到应有的重视。有些人甚至在不学习基础知识的情况下试图学习花哨的算法。如果你不能解释深度学习中的一个话题,你就可以被录用。但是,如果你不能解释一个回归算法,那就足以不雇佣你。

在回归问题中,目标变量是一个连续的数字。目标变量的值取决于自变量。这是最常见的数据科学问题之一。回归问题可以进一步分为线性和非线性。

线性回归算法的一个简单例子是预测房价。影响房价的因素有很多。所有这些影响房价的因素都是独立变量。房价属性是因变量/目标变量。求解线性回归算法的一般方法是,

1。数据探索

数据探索是任何数据科学项目的关键。项目的成功取决于对数据的理解程度。一些有助于更好的数据分析的技术是,

  • 单变量分析——最能理解个体属性。我们一次选择一个变量来研究模式。这将是任何数据探索活动的第一步。它有助于建立对数据集的良好理解。
  • 多元分析 —建立数据集中不同属性之间的关系。探究自变量和因变量之间的关系。
  • 可视化分析 —用于捕捉数据集中的模式。在视觉数据中很容易找到模式。可视化是与利益相关者交流的有效工具。

2。数据准备

完成全面的数据分析后,我们继续进行数据准备。通常,数据准备和探索可以齐头并进。下面是一些需要修改的典型数据问题,

  • 噪声数据 —数据集可能有噪声。数据集中的噪音无助于解决问题。丢失的数据是噪音。它们通常无助于做出正确的预测。我们需要处理噪声数据以获得更好的结果。
  • 缩放比例 —不同比例的属性可能是个问题。尤其是如果我们使用基于距离的算法。将数据归一化到相似的比例始终是一个好的做法。
  • 相关属性 —当我们有许多相关属性时,这被称为多重共线性。这通常不会影响模型预测。但是,它们确实对自变量的解释有影响。
  • 异常值 —数据中的异常值影响方差和标准差。

最后针对以上问题进行数据分析。我们需要使用相关技术将它们转换成首选格式。转换技术将取决于算法和数据本身。

3。模型建立和评估

团队尝试多种模型是很常见的。那些表现更好的最终会被利用。在回归问题中用于模型评估的一些常见度量是,

  • 绝对平均误差
  • 均方根误差
  • 均方误差
  • R 平方和调整后的 R 平方

4。模型调整

超参数调整和功能选择有助于模型调整。超参数调整是指为模型参数尝试不同的值范围。要素选择是关于包括和排除数据集的不同属性。

参考脚本

下面是一个文档非常完整的脚本,它将向您展示一个回归问题的实现。它涵盖了回归问题及其实现的各个阶段。它还包括不同的算法及其对性能的影响。

https://www.kaggle.com/faressayah/linear-regression-house-price-prediction

分类

分类问题是机器学习算法的另一个流行类别。这是监督学习的一部分。这里的输出变量是分类的。当输出变量取两个可能值中的一个时,它就是一个二元分类。比如客户流失与否,垃圾邮件与否等等。当输出变量有两个以上的可能结果时,则它是一个多类分类。

解决分类问题的方法与解决回归问题的方法非常相似。主要的区别在于模型评估。分类问题中常用的评估技术和方法有:

  • 准确(性)
  • 受试者工作特征曲线
  • 混淆矩阵
  • 精确度和召回率

参考脚本

以下参考脚本可以作为解决任何分类问题的模板。它涵盖了解决分类问题的各个阶段。它从问题定义、数据分析、数据清理、模型构建、评估和改进性能的技术开始。

https://www.kaggle.com/ldfreeman3/a-data-science-framework-to-achieve-99-accuracy

使聚集

聚类算法是一种无监督学习算法。模特培训没有标签。我们寻找数据集中存在的模式,将它们分组到不同的簇中。

解决聚类问题不同于解决监督学习问题。所涉及的步骤是,

1。数据探索

像任何监督学习问题一样,我们从数据探索开始。不同的是,我们更注重视觉分析。这里的目标是了解是否有任何清晰的集群。

2。选择正确的算法

下一步是确定正确的算法集。算法的选择取决于问题本身。在大多数情况下,我们会创建这样的群,其中一个项目只属于一个群。有时我们需要允许项目属于多个集群。在第一种情况下,我们使用 K-Mean 和层次聚类等算法。对于后者,我们使用模糊聚类。客户特征分析是模糊聚类的一个典型例子。客户表现出许多特征是正常的。在这里,允许它们以一定概率成为多个集群的一部分是公平的。

3。理想的集群数量

确定理想的集群数量至关重要。有一些技术和方法可以确定最佳的聚类数。技术取决于算法。

4。集群的特征

在识别聚类之后,聚类问题不被认为已经解决。仅仅向企业展示不同的集群是不够的。需要进一步的分析来证明聚类是正确的。视觉分析在这里起着关键作用。从视觉数据中获取洞察力是很容易的。

了解更多信息

要了解更多关于不同的聚类算法、其中涉及的步骤、每种算法的优点和缺点,以及理解关键概念,请查看下面的文章。

[## 数据科学家需要知道的 5 种聚类算法

towardsdatascience.com](/the-5-clustering-algorithms-data-scientists-need-to-know-a36d136ef68)

参考脚本

要了解聚类算法的实际实现,请查看下面的内容。这个 Kaggle 笔记本清楚地解释了 K-means 聚类算法的各个步骤。

https://www.kaggle.com/kushal1996/customer-segmentation-k-means-analysis

推荐

有很多关于推荐问题的案例研究。从推荐系统中获得了巨大的资本价值。它们越来越多地被各行各业采用。推荐系统通常使用协同过滤和基于内容的过滤方法来构建。

在协作过滤的情况下,我们有基于用户或基于项目的相似性。例如,为用户“A”产生一个推荐。首先,我们需要找到与用户“A”相似的用户。然后,在基于用户的推荐的情况下,使用在相似用户中受欢迎的项目。在基于项目的方法中,所有相似的项目被分组在一起。例如,它们被一起出售的可能性。当用户购买一个项目时,来自该组的其他类似项目被推荐。

在基于内容过滤的情况下,关于产品和用户的描述用于推荐。例如,产品的细节和用户的兴趣相匹配,以产生对用户的最佳推荐。约会平台是基于内容推荐的完美场所。

使用案例

推荐系统通常用于

  • 通过交叉销售和追加销售增加销售额
  • 提高用户参与度

以下是一些关于推荐系统如何为企业创造价值的事实,

  • 根据 Google facts ,Google Play 上 40%的应用安装和 YouTube 上 60%的观看时间来自推荐
  • 根据麦肯锡的报告,在网飞上观看的 75%的内容和在亚马逊上购买的 35%来自推荐

参考脚本

了解更多关于推荐系统及其实现的信息。检查下面,

https://www.kaggle.com/ibtesama/getting-started-with-a-movie-recommendation-system

自然语言处理

到目前为止,我们讨论了使用结构化数据集的问题。现在,我们将了解如何使用 NLP 从非结构化数据集中提取值。组织一直在从结构化数据中提取价值。非结构化数据的潜力在很大程度上仍未被发掘。每秒钟都会产生大量的非结构化数据。社交媒体平台和其他公共领域有如此多的数据。这些非结构化数据有很大的价值。

在接下来的几年里,很多焦点将集中在从非结构化数据中提取价值上。流行的 NLP 用例可以分为:

  • 情感提取——这些用例有助于理解公众情感。
  • 主题建模——主题建模的一个例子是文档注释。
  • 摘要——使用抽象或抽取方法对大型文档进行摘要。

了解更多信息

下面的文章将提供一个简单的逐步解决大多数 NLP 问题的方法。

https://blog.insightdatascience.com/how-to-solve-90-of-nlp-problems-a-step-by-step-guide-fda605278e4e

参考脚本

下面的笔记本将向您展示 NLP 用例的实现。首先,了解更多关于数据集结构的信息,生成元特征,并分析有影响的信息。最重要的是,这是有据可查的,很容易学习。

https://www.kaggle.com/tanulsingh077/twitter-sentiment-extaction-analysis-eda-and-model#EDA

计算机视觉

计算机视觉问题是我们从图像和视频数据中提取信息的问题。我们只是试图模仿人类的视觉和大脑。我们的大脑是根据多年来获得的知识来训练的。同样,在计算机视觉出现问题的情况下,我们需要训练机器。有不同种类的计算机视觉问题。他们是,

  • 图像识别
  • 目标检测
  • 事件检测
  • 图像分类

所有上述问题的基本原则是识别数据中的模式。处理能力的进步使得许多人都可以使用计算机视觉应用。AutoML 解决方案使计算机视觉用例的实现变得容易。下面是一篇关于使用 Datature 不用写一行代码就能实现物体检测的文章。

https://medium.com/geekculture/building-computer-vision-application-fast-without-any-coding-b09c3eb75912

参考脚本

下面的笔记本是一个很好的记录清晰的笔记本。它将向您介绍使用卷积神经网络的计算机视觉应用。

https://www.kaggle.com/yassineghouzam/introduction-to-cnn-keras-0-997-top-6

最终注释

学习数据科学的最佳方式是实践。到目前为止,所涵盖的算法将涵盖数据科学家在其工作中处理的大多数问题。包括的笔记本大多来自经验丰富的数据科学家。他们将帮助你学习最好的方法和标准。

为了更好地理解,尝试解决几个类似的问题。数据科学是一个通过实践可以学到更多东西的领域。

如果你在寻找学习数据科学的完整路径。这里有一个来自我的 YouTube 频道的视频,它将向你展示在 6 个月内学习数据科学的最佳方法。

保持联系

如何在 90 天内提升您的数据科学技能

原文:https://towardsdatascience.com/how-to-level-up-your-data-science-skills-in-90-days-917c523e8dc9?source=collection_archive---------32-----------------------

学习数据科学技能的敏捷路线图

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

图片来源: Alex Kotliarskyi @ Unsplash

在过去几年中,数据科学一直是应届毕业生或转行者最受欢迎的领域之一。就业市场不断增长的需求是候选人数量不断增加的重要驱动力。简单看一下“数据科学工作”一词的谷歌搜索查询量就可以看出,对数据科学的需求越来越大,人才也在不断寻求加入这个蓬勃发展的行业。

随着数据科学在人才中越来越受欢迎,以及雇主推动的所需技术技能的膨胀,在过去几年中,数据科学就业市场对候选人的竞争越来越激烈,尤其是对应届毕业生。

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

谷歌搜索趋势搜索“数据科学工作”(谷歌趋势快照)

这些事实表明了持续学习和提升技能对于候选人和已经在该行业工作的数据科学家的重要性。虽然目前在该行业就业的数据科学家受益于在工作中学习许多新技能,但应届毕业生正在努力寻找合适的背景和路线图来学习就业市场上最受欢迎的技能。

根据我们的研究,活跃在就业市场上的超过 80%的数据科学家是有抱负的数据科学家或实习生,他们很难得到雇主的注意,即使是在全职工作的初步筛选电话中。此外,大约 30%的候选人表示对他们的机器学习技能没有完全的信心,40%的人对数据库技术没有信心,70%的人对云计算没有信心!这些统计数据表明,有抱负的数据科学家需要做大量工作来获得必要的技能,以引起雇主的注意。

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

Pouyan R. Fard,2021

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

Pouyan R. Fard,2021

提升数据科学技能的路线图

因为数据科学是一个非常新的领域,而且对于数据科学家的角色没有普遍的共识,所以对于有抱负的数据科学家来说,很难知道从哪里开始以及他们需要在每个主题上专注到什么程度。在这篇文章中,我展示了一个路线图,展示了有抱负的数据科学家如何在 90 天内提升他们的技术技能。在这里,我只关注候选人的技术技能,这些技能最初能引起雇主的注意。

以下是关于如何学习必要的数据科学技能以提升你在就业市场中的地位的路线图:

  • 第一周:概率&统计
  • 第二周:Python 编程
  • 第三周:数据争论
  • 第 4 周:探索性数据分析
  • 第 5 周:机器学习——监督学习
  • 第 6 周:机器学习——无监督学习
  • 第八周:机器学习——时间序列分析
  • 第九周:机器学习——深度学习
  • 第 7 周:自然语言处理
  • 第 10 周:数据库技术
  • 第 11 周:视觉分析
  • 第 12 周:云计算

如何在 90 天内学会数据科学

要克服在一个新领域开始学习如此多主题的最初困难和不知所措的感觉,你需要在学习上述技术技能的同时采取敏捷的心态。在职业生涯的这个阶段,你不能成为学习数据科学技能的完美主义者。请记住,对于许多雇主来说,你是监督分类等特定方法的绝对专家并不重要。相反,许多雇主需要拥有广泛技能的人来解决不同的问题,如在云上建立数据管道,设置分析仪表板,训练机器学习模型,以及与业务利益相关者交流见解。

在遵循这个路线图时,您需要记住,您需要关注您正在学习的概念和技术的实践方面。这意味着您需要专注于与路线图每周相关主题的实践学习。只要坐下来开始编码或者用编码甚至纸笔解决技术问题。像在线课程或书籍这样的资源可以非常有效地帮助你的学习之旅,但它们不能取代你亲自动手的需要。我相信通过跟随教程(尤其是在 Medium 上)或 Github 库中分享的实际例子,学习大多数技能是可能的。所以,强迫自己只在一周内学习一个新的话题,将有助于你成为最实际的,发现最重要的话题,而不是不必要的和理论上的细节,这些可以在以后学习。

数据科学是一个实用的工程领域;它不是关于理论机器学习和统计学,而是应用这些方法来解决现实世界的商业问题。因此,在您学习这些技术的同时,请始终考虑如何在现实世界中使用这些方法,尤其是解决业务问题。如果你能培养这种心态,你将成为一名成功的数据科学家,你很快就会在这个领域看到自己的成长。

TL;DR Summary:
在这篇文章中,我分享了如何在 90 天内提升你的数据科学职业生涯的必要技能的路线图。我相信大多数有抱负的数据科学家都在努力学习进入该领域所需的技能,或者吸引雇主的注意力以获得面试机会。对于有抱负的数据科学家来说,数据科学技能的学习需要快速、敏捷、实用、动手,并专注于数据科学的现实问题,而不是在每个主题的理论方面走得太深。

请注意,有许多因素决定着候选人求职的成功,包括但不限于技术技能、软技能、工作申请、社交策略、面试技巧等。因此,获得顶级数据科学职位的建议是超越技术技能,致力于软技能、行业知识和网络战略。

更多文章来自作者:

关于作者:

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

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

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

如何利用神经风格转移来创建令人惊叹的图像

原文:https://towardsdatascience.com/how-to-leverage-neural-style-transfer-to-create-stunning-images-c30eb4a9007a?source=collection_archive---------43-----------------------

人工智能艺术

会画图像的人工智能

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

神经风格转移应用于阿尔及利亚足球运动员马赫雷斯的图像——由作者制作

图像风格转移

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

图片来自纸张[3]

图像样式转移是一种可以应用于图像绘画的方法,其目标是从一个图像中提取样式,并将其应用于第二个图像,同时保留第二个图像的内容,就像上面的图像所示。

为了实现这一点,需要定义图像的风格。

事实上,图像的风格与其纹理有很大关系。因此,通过使用纹理提取方法,我们本质上是在提取图像的风格。

这些方法被称为视觉纹理建模方法。这些方法有两种类型:

  • 具有汇总统计的参数纹理建模
  • 基于马尔可夫随机场的非参数纹理建模

为了在图像上应用这种风格,我们可以使用图像重建技术。这些技术也有两种类型:

  • 基于图像优化的在线图像重建。
  • 基于模型优化的离线图像重建。

卷积神经网络可用于视觉纹理建模和图像重建。

神经类型转移

在图像中进行风格转换的一种相当简单的方法是使用论文“ 艺术风格的神经算法 中描述的方法。

你需要什么:

  • 一个 CNN (VGG,盗梦空间等等),它是在一个大的数据集(ImageNet)上预先训练的。
  • 一个你想样式化但保留其内容的图片,姑且称之为“内容图片”。
  • 一个你想提取其风格的图像,姑且称之为“风格图像”。

怎么办:

  • 把这两张照片都传给 CNN。
  • 从内容图像和样式图像中提取特征映射。
  • 要从样式图像中获取样式,您需要使用所谓的“Gram matrix”。这是一种奇特的说法:计算不同特征地图的平均值和相关性。
  • 因此,特征图将代表图像的内容,而 Gram 矩阵将代表图像的风格。
  • 接下来,你需要优化一个损失函数。这个损失函数的目标是使内容图像的样式尽可能接近样式图像的样式。
  • 最后,你基本上将一幅图像的风格转移到了另一幅图像上,同时保留了后一幅图像的内容。​

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

作者使用 NST 方法创作的狮子图像

上图是我用 Tensorflow 提供的教程中的 开源代码 创建的。

顺便说一句,如果你想学习如何使用 Tensorflow,那么请查看我的 免费 Tensorflow 课程 ,它专注于计算机视觉的深度学习。

实时神经类型转移

从艺术的角度来看,前面的方法给出了一些很好的结果,但是缺点是它太长了。

每幅图像都必须经过一系列的迭代,提取两幅图像的内容和风格,然后进行优化,使一幅图像的风格接近另一幅图像的风格。

由于这个障碍,文献中提出了另一种方法[2]。通过这种方法,有两个神经网络一起工作。

一个网络从风格图像中提取风格。另一个网络有两个输入:内容图像和前一个网络的输出。

使用这种方法,整个系统在训练阶段从大数据集学习绘画风格的表示。

在测试时,网络直接从样式图像中提取样式,并将其应用于内容图像。不需要优化!

结论

AI 可以用于艺术造型。有一些深度学习方法可以将一幅图像的风格转移到另一幅图像,同时保留后者的内容。

有不同的方法来实现这一点,其中一些需要在线优化。这意味着无论何时你想要设计一个图像,都必须有一个优化例程,这需要一些时间。

其他方法使用离线优化,这使得神经风格转移系统能够学习如何提取图像的风格,并在训练过程中将其应用于新图像。在测试时,样式的转换很快。

参考

[1] Leon A. Gatys,Alexander S. Ecker,Matthias Bethge,“一种艺术风格的神经算法”。

[2] Golnaz Ghiasi,Honglak Lee,Manjunath Kudlur,Vincent Dumoulin,黄邦贤 Shlens,“探索实时、任意神经艺术风格化网络的结构”。

[3]永成静等,神经风格迁移:综述

关于作者

我是一名机器学习工程师,致力于解决具有挑战性的计算机视觉问题。在 LinkedInTwitter 上关注我的每日内容。此外,通过加入我的 时事通讯 ,让这样的文章直接进入你的收件箱。

如何在数据块上加载和存储 R 中的 MLFlow 模型

原文:https://towardsdatascience.com/how-to-load-and-store-mlflow-models-in-r-on-databricks-hacking-the-constraints-93ce458af7ff?source=collection_archive---------17-----------------------

破解约束

Databricks 已经成为云计算的重要组成部分,尤其是现在,在谷歌宣布在谷歌云上推出 Databricks 之后。然而,必须指出的是,它仍然是一项试验性的技术,在效率和覆盖面方面还有很长的路要走。

对于数据科学来说,r 是最强大和使用最多的语言和环境之一,年复一年,统计人员努力开发不同的库。由于这一点,你可以找到几乎所有用 R 实现的数学模型,这对于你能想象的大多数 DS 项目的成功是非常有用的。但是,R 有一个重要的缺点:大数据。在处理海量数据时,SparkR 和其他公式还远远不能提供一个庞大的 ML 库目录。大部分 BigData SaaS 和 PaaS 都专注于 Python 和 Spark,比如 Databricks,努力开发一个完整的框架,并试图定义一个 ML 工件的端到端周期,而不是关注在 r 中完全支持他们的产品

例如,当在数据块中对 R 模型使用 MLFlow 时,就会发生这种情况。诚然,Databricks 支持 R、Python 和 Scala 代码,但在使用 MLFlow 和 R 时,尤其是在尝试注册 ML 模型时,会发现不同的弱点。

什么是 MLFlow

MLFlow 是一个围绕 REST APIs 构建的 ML 平台,它允许记录 ML 模型的实例作为存储库。这些实例被打包,以便发送到部署工具,但是在运行您的实验时,它还注册不同的度量、模型数据、配置或代码版本。稍后,您可以将它们可视化,并比较多次运行的输出。

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

如果您不熟悉 MLFlow,请查看他们的文档,并尝试使用 Databticks 进行免费试用。

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

来自 DataBricks 网站的一个例子

MLFlow 目前处于 alpha 阶段,这是它仍然存在弱点的原因,但在部署我们的 ML 模型时,这是一个强大的想法。

MLFlow 如何在 Python/Spark 上工作

让我们看一个 Python 上 MLFlow 的快速例子。首先,我们必须安装并加载库:

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

在此之后,我们必须使用以下命令创建或设置实验:*ml flow . set _ experiment(path _ to _ experiment)。*在注册任何实验之前,我们可以转到给定的路径,我们会看到实验已经创建,但它是空的:

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

然后,我们可以运行我们的模型,并在我们的实验中注册执行:

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

使用 autolog() 我们可以自动记录所有参数、分数和模型本身,但是如果我们不想跟踪整个上下文,我们可以使用 log_metric()、log_param()、log_artifact()log_model() 函数*选择保存什么。*实际上,我发现 log_model 函数非常有趣,因为它允许我们跟踪带有标签的模型,这可以帮助我们稍后从存储库中加载模型。点击此处查看文档。

在此之后,如果您现在转到实验路径,您将看到您已经记录的所有实验的记录。大概是这样的:

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

来自 DataBricks 网站的示例

一旦模型被训练和记录,它可以在模型库中从无传播到试运行和生产阶段(寻找*transition _ model _ version _ stage()*函数)。在 Databricks 中,存储库可以在“模型”选项卡中可视化:

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

来自 DataBricks 网站的一个例子

然后,可以很容易地从存储库中加载它,用于我们的预测。用户只需调用*ml flow . load _ model(path _ to _ model)*指令,即可在笔记本中使用所需的模型。

尝试在数据块中使用 MLFlow 的 R API

遵循与 Python 流相同的结构,我们首先加载库并安装 mlflow:

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

第一个区别出现在设置实验的时候。在 R 中,我们不能设定一个不存在的实验;因此,为了以防万一,必须使用 try-catch 来捕获错误,并在需要时创建实验。之后,让我们尝试运行执行并记录模型:

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

现在,如果我们检查实验路径,我们将看到实验和运行已经创建;然而,在存储库中没有跟踪到任何模型。这令人惊讶,因为没有返回任何错误。大多数人都被困在这里,MLFlow 必须解决这个问题,但原因是:

registered _ model _ name(‘predictor LDA’)是在 *mlflow.log_model,*中使用的一个有用的参数,不幸的是目前在 R 库中不可用。

如果我们想在 R 笔记本中加载 MLFlow 模型,这是一个令人头疼的问题,但有一个解决方案。在任何 Databrick 笔记本中,您可以通过在单元格的开头指定语言魔术命令%<language>来覆盖默认语言。支持的魔法命令有:%python%r%scala%sql。该解决方案通过从 R notebook 调用 python(或使用 REST API)来实现:

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

我们首先设置在前面的 R 命令中创建的实验,然后寻找该实验的最后一次运行。请记住,实验和运行都在 R 中注册,我们唯一无法跟踪的是模型。一旦我们找到了运行,我们就可以获得创建的工件的 URI,我们将使用这个 URI 来获得 python 中的模型并注册它。我们只是创建一个 mlflow 客户端,用 create_model_version 指令进行注册。这个操作可能需要 300 秒来完成创建,所以请记住这一点(在下一个命令中使用 time.sleep(300)可能会很有趣)。现在,在这个“技巧”之后,模型已经被正确地注册到模型库中,并且可以使用了。

Databricks 和 MLFlow 都是正在开发的强大而有前途的技术。尤其是 MLFlow 还是太绿了,一定要有耐心。同时,我希望这个技巧可以帮助您进行云部署。

Adrian Perez 是一名数据科学家,拥有超级计算并行算法博士学位。你可以在他的 中简介 中查看更多关于他的西班牙语和英语内容。

如何将带有隐藏行和列的 Excel 文件加载到 Pandas

原文:https://towardsdatascience.com/how-to-load-excel-files-with-hidden-rows-and-columns-into-pandas-19d445fa5c47?source=collection_archive---------4-----------------------

使用 openpyxl 包在将 Excel 文件作为 Pandas DataFrames 读取时忽略隐藏的行和列

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

照片由米卡·鲍梅斯特Unsplash 上拍摄

我最近学到了一些新东西——在将 Excel 文件作为 Pandas DataFrames 读取时,可以排除隐藏的行和/或列,这都要归功于openpyxl包,我想与你分享一下。

隐藏 Excel 文件的行或列并不罕见。不太相关的列可以被隐藏以保持电子表格的整洁;或者隐藏行以故意忽略重复数据。

无论原因是什么,当加载一个文件作为 Pandas DataFrame 时,隐藏它们可能是有价值的,因为它可能会影响后续的数据争论和探索。

不幸的是,将 Excel 文件作为 Pandas 数据帧读取的传统方式——使用pandas.read_excel()方法——并不方便。

在这篇文章中,我们将探索如何使用openpyxl包来识别 Excel 文件中隐藏的行和列,从而在将其作为 Pandas DataFrame 加载时排除它们。

数据集

我们将使用在 Kaggle 上公开的 titanic 训练数据集的一小部分。为了简单起见,我将数据行数限制为 20。我还故意隐藏了 F(“年龄”)、I(“机票”)和 K(“客舱”)列,以及第 6、11、16 和 21 行。

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

在 Excel 中预览数据集(图片由作者提供)

为什么 pandas.read_excel()不工作?

通常,我们使用 Pandas 的read_excel()方法在 Excel 中加载数据集作为 Pandas DataFrame。让我们看看当我们对包含隐藏行和列的 titanic 数据集这样做时会发生什么。

>>> import pandas as pd>>> df = pd.read_excel("data/titanic.xlsx")>>> df

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

数据集为熊猫数据框,包含所有行和列(图片由作者提供)

默认情况下,read_excel()方法从指定的 Excel 文件的所有行和列中读入数据。换句话说,它不排除隐藏的行和列。

openpyxl 的安装

要加载 Pandas DataFrames 而不隐藏行和列,我们可以使用 openpyxl 包,一个 Python 库来“读/写 Excel 2010 xlsx/xlsm/xltx/xltm 文件”。

由于 openpyxl 不是一个标准的 Python 内置库,您首先需要安装它。打开命令行窗口,键入以下命令:

>>> pip install openpyxl

使用 openpyxl 加载 Excel 文件和工作表

要使用openpyxl包打开现有的 Excel 文件,我们使用openpyxl.load_workbook()方法,指定存储 Excel 文件的路径名。

>>> import openpyxl# Open an Excel workbook
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")

这创建了一个Workbook对象,根据文档,它是“所有文档信息的顶级容器”。该对象包含许多与输入文件相关的属性,包括返回工作簿中所有工作表名称列表的.sheetnames属性。

# Create a list of names of all worksheets in `workbook`
>>> sheet_names = workbook.sheetnames# Create a `Worksheet` object 
>>> worksheet = workbook[sheet_names[0]]

在我们的titanic.xlsx文件中,我们只有一个名为“train”的工作表,所以我们通过获取sheet_names列表的第一个元素来获得工作表名称。接下来,我们从Workbook对象创建一个Worksheet对象。

查找隐藏行的索引

类似地,Worksheet对象包含属于指定工作表的属性。为了找到所有隐藏行的索引,我们使用了Worksheet对象的.row_dimensions属性,如下所示:

# List of indices corresponding to all hidden rows
>>> hidden_rows_idx = [
        row - 2 
        for row, dimension in worksheet.row_dimensions.items() 
        if dimension.hidden
    ]>>> print(hidden_rows_idx)[4, 9, 14, 19]

注意,我们需要使用row — 2而不仅仅是row,因为我们想要找到对应于熊猫数据帧的索引,而不是 Excel 文件。

查找隐藏列的名称

为了找到所有隐藏列的名称,我们首先使用Worksheet对象的.column_dimension属性:

# List of indices corresponding to all hidden columns
>>> hidden_cols = [
        col 
        for col, dimension in worksheet.column_dimensions.items() 
        if dimension.hidden
    ]>>> print(hidden_cols)['F', 'I', 'K']

这将生成一个包含大写字母的列表,这些字母对应于 Excel 工作表的隐藏列。因此,我们需要以某种方式将hidden_cols列表转换成隐藏列的名称列表。为此,我们使用 Python 的内置库string及其.ascii_uppercase属性:

# List of indices corresponding to all hidden columns
>>> hidden_cols_idx = [
        string.ascii_uppercase.index(col_name) 
        for col_name in hidden_cols
    ]# Find names of columns corresponding to hidden column indices
>>> hidden_cols_name = df.columns[hidden_cols_idx].tolist()>>> print(hidden_cols_name)['Age', 'Ticket', 'Cabin']

免责声明:请注意,使用 **string.ascii_uppercase** 假设最多有 26 列。如果超过 26 列,就需要修改代码。

最后,一旦我们有了隐藏行的索引和隐藏列的名称,剩下的就简单了。为了排除那些隐藏的行和列,我们简单地使用 Pandas 的.drop()方法。

# Drop the hidden columns
>>> df.drop(hidden_cols_name, axis=1, inplace=True)# Drop the hidden rows
>>> df.drop(hidden_rows_idx, axis=0, inplace=True)# Reset the index 
>>> df.reset_index(drop=True, inplace=True)>>> df

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

没有隐藏行和列的数据集作为熊猫数据框架(图片由作者提供)

把所有的放在一起

下面是一个代码片段,它通过一些简单的重构将上述代码组合在一起:

包装它

现在,你有了它——一个 Python 代码,它允许你读取一个包含隐藏行和/或列的 Excel 文件,就像熊猫数据帧一样。

这个特殊的用例仅仅触及了openpyxl包所提供的皮毛。关于openpyxl包的更多信息,查看它的文档这里

这篇文章中显示的代码也可以在这个 GitHub repo 的笔记本中找到。

你好!我是泽雅。感谢你阅读这篇文章。如果你觉得它有用,请在评论中告诉我。我也欢迎讨论、问题和建设性的反馈。请随时通过媒体关注我,或者通过 LinkedInTwitter 联系我。祝您愉快!

如何在亚马逊红移中加载地理空间数据

原文:https://towardsdatascience.com/how-to-load-geospatial-data-in-amazon-redshift-e2f5528c8ae4?source=collection_archive---------25-----------------------

使用开源地理空间库和 Amazon 红移数据 API 的 pythonic 方法

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

Pawel Czerwinski 在 Unsplash 上的照片

亚马逊红移于 2019 年 11 月宣布支持空间数据。这种支持包括新的几何数据类型和 40 多种空间函数。它在 2020 年 9 月得到了增强,增加了新的空间函数,并在使用 JDBC/ODBC 驱动程序时支持几何类型。

如果您有地理空间数据,那么在 Amazon Redshift 中加载数据有两个选项,都涉及到 COPY 命令:

如果您已经有了这种格式的数据,使用 shapefiles 是一个很好的选择,但它是专有的,需要多个文件,属性名称限制为 10 个字符,大小限制为 2 GB。

如今,使用更新、更高级的格式(如 GeoJSON 或 GeoPackage)来查找地理空间数据是很常见的。如果您想要加载以这些格式存储的数据,您需要使用带有 EWKB 几何图形的 CSV 文件选项。

在本文中,我将向您展示如何使用利用开源地理空间包和 AWS SDK 的 Python 脚本,以更常见的格式将地理空间数据加载到 Redshift。

该脚本有三个主要步骤:

  1. 从输入文件创建带有 EKWB 几何图形的 CSV 文件
  2. 将创建的文件上传到 S3 存储桶
  3. 从 S3 文件导入红移表中的数据

创建包含 EWKB 几何图形的 CSV 文件

第一步是读取输入地理空间文件,然后用 EWKB 格式的几何创建一个新的 CSV 文件。

我们将使用最初由 Sean Gillies 开发的两个众所周知的地理空间包:

  • 菲奥娜。基于 GDAL/OGR ,提供了用于读写地理空间文件的 Python API。我们将使用 Fiona 来读取输入文件。
  • 身材匀称的。基于几何 / JTS ,提供操作和分析平面几何对象的功能。我们将使用 Shapely 创建 EWKB 几何图形。

首先我们用 Fiona 打开输入文件,然后使用 Python csv 模块创建一个新文件。我们添加带有一个 geom 列的标题和来自输入文件的属性名( f[“properties”])。keys() )作为第一行。然后,我们使用 ShapelyWKB . dumps函数在输入文件中写入特征行,该函数允许我们使用十六进制参数以 EWKB 格式写入几何图形。

如果输入文件使用 EPSG 代码定义空间参考,本文末尾链接的完整源代码支持将 EPSG 代码(空间参考 ID-SRID)添加到输出 EWKB 几何。

把文件上传到 S3

Redshift 中的 COPY 命令要求我们将想要加载的文件存储在 S3 桶中。我们将使用 Python 的AWS SDK(boto 3)来上传我们在上一步中创建的 CSV 文件。

将文件上传到 S3 的代码非常简单,正如您在下面看到的,但是我们需要有适当的权限来写入 S3 存储桶。

您需要登录到 AWS IAM 控制台,创建您的凭证,并确保您在权限部分附加了“ AmazonS3FullAccess ”策略。

Boto3 将在环境变量(AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY)或您的主文件夹( ~/中的凭证文件中查找访问密钥。用于 macOS/Linux 的 aws/credentialsC:\Users\USER_NAME\。Windows 版的 aws\credentials )。您可以自己创建这个文件,也可以安装 AWS CLI 并运行 aws configure 命令。

配置好凭据后,您应该能够运行以下代码将包含 EWKB 几何图形的 CSV 文件上传到 S3。重要的是,你上传文件到 S3 桶在同一个 AWS 地区,你有你的红移集群。

将数据导入红移

现在我们在 S3 有了 CSV 文件,我们将使用 COPY 命令将数据加载到 Redshift 中。在 Redshift 中,我们有不同的选项来执行 SQL 命令;其中一些如下:

  • 我们可以使用 PostgreSQL 的 psycopg 驱动程序。虽然 Redshift 不完全兼容 PostgreSQL,但是我们可以用这个驱动连接 Redshift,执行 SQL 语句。这个选项只允许我们使用传统的数据库认证。
  • 另一种选择是使用红移 ODBC 驱动程序和 pyodbc 模块。这是一个类似于 psycopg 的解决方案,具有红移特有的特性,也只提供传统的数据库认证。
  • 更好的选择是使用 Python 红移连接器。它是特定于红移的,由 AWS 开发,并支持红移特定的功能,如 IAM 身份验证。
  • 我们最终选择的选项是红移数据 API 。它使用 boto3 包进行异步 HTTP 调用。代码稍微复杂一点(您需要执行语句,等待它结束,然后检索结果),但是它提供了 IAM 和 Secrets Manager 认证,并且避免了管理连接的需要。

要使用红移数据 API,我们需要我们的凭证来附加AmazonRedshiftDataFullAccess策略。如上所述,使用 AWS IAM 控制台附加策略。

在加载数据之前,我们需要创建一个表,数据将被导入到这个表中。我们需要准备带有输入文件中的列名和数据类型的 SQL 语句。Fiona 提供了一个模式属性,我们可以使用它将从 Fiona 读取的 Python 数据类型映射到红移数据类型。请看一下get _ create _ table _ statementget_field_mappings 函数来理解这个过程。

为了在 Redshift 上执行 SQL 语句,我们需要提供数据库凭证来访问数据库。该脚本使用存储在 AWS Secrets Manager 中的凭证。这是连接到 Redshift 的推荐选项之一,它为循环、管理和检索数据库凭证提供了非常有用的功能。我们还需要提供这个秘密的 ARN。

一旦我们创建了表,我们就可以使用 COPY 命令导入数据。除了数据库凭证之外,我们还需要为我们的红移集群附加一个角色,以允许对 S3 进行读访问。一旦我们附加了这个角色,我们将在 COPY 命令中使用该角色的 Amazon 资源名称(ARN)。

您可以在下面看到 execute_statement 函数的语法。除了集群标识符和数据库之外,我们还用数据库凭证和 SQL 语句指定了秘密的 ARN。在 SQL 语句中,我们需要指明 S3 中 CSV 文件的路径以及附加到 Redshift 集群的 IAM 角色,该角色对 S3 具有读取权限。

请查看完整的源代码,看看我们如何检查 SQL 语句执行是否成功,以及我们需要使用的其他选项,如 COPY 命令中的 TIMEFORMAT 参数,以正确解释日期/时间字段。

现在呢?

所以你有我们的红移地理空间数据,现在你想工作的空间信息。您可以从红移空间函数开始,这些空间函数提供空间分析的基本功能,如要素相交或计算给定区域内的要素。

但是您可能希望使用这些数据集创建地图来理解信息并执行高级空间分析,如计算零售选址解决方案的双区域或计算包裹递送的最佳路径。

这就是像 CARTO 这样的云原生地理空间平台有用的地方(免责声明:我目前是 CARTO 的产品经理)。CARTO 允许您导入红移表,使用生成器创建令人惊叹的可视化效果,并通过使用来自数据观测站的公共和优质数据集丰富您的信息来执行高级分析。您还可以使用 React 的 CARTO 和 awesome deck.gl 可视化库的 CARTO 模块创建自己的自定义空间应用程序。

除了这些功能之外,CARTO 即将推出的针对 Redshift 的空间分析扩展将允许您执行高级空间分析,而无需将数据从数据库中删除,这一新的云原生功能将允许您直接从 Redshift 集群创建 2D 和 3D 地图。

源代码

您可以在这个 GitHub 资源库中找到 Python 脚本的源代码。脚本( geo2rs.py )可以独立运行,也可以作为模块使用。如果独立运行,它使用 argparse 库来解析命令参数。你可以在 README.md 文件中找到关于命令行参数的更多信息。您还可以使用 AWS Lambda 修改代码,使其无服务器运行。

如何在 Python Pandas 中加载巨大的 CSV 数据集

原文:https://towardsdatascience.com/how-to-load-huge-csv-datasets-in-python-pandas-d306e75ff276?source=collection_archive---------21-----------------------

理解大数据

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

图片来自 Pixabayxresch

您可能有一个巨大的 CSV 数据集,它占据了您硬盘上 4 或 5 GB(甚至更多)的空间,您想用 Python pandas来处理它。也许你不需要数据集中包含的所有数据,只需要满足某些条件的一些记录。在这个简短的教程中,我将向你展示如何用 Python Pandas处理巨大的数据集。

我们可以采用四种策略:

  • 垂直过滤器
  • 水平过滤器
  • 爆发
  • 记忆。

你可以从我的 Github 库下载完整的 jupyter 笔记本。

垂直过滤器

在这种情况下,我们只加载整个数据集的一些列。我们可以使用read_csv()函数的参数usecols来只选择一些列。

**import** pandas **as** pd
df **=** pd.read_csv('hepatitis.csv', usecols**=**['age','sex'])

水平过滤器

在这种情况下,我们只加载数据集的一些行。我们可以选择起始行以及必须加载多少行。请记住,如果我们跳过第一行,我们必须将列名作为进一步的参数传递。

srow = 5
nrows = 50
columns = ['age','sex','steroid','antivirals','fatigue','malaise','anorexia','liver_big','liver_firm','spleen_palpable','spiders','ascites','varices','bilirubin','alk_phosphate','sgot','albumin','protime','histology','class']
df = pd.read_csv('hepatitis.csv', skiprows=srow, nrows=nrows, names=columns)
df.head()

爆发

可能会发生这样的情况,我们需要加载完整的数据集,但我们没有足够的内存来加载它。因此,我们可以批量加载它,然后应用一些过滤器,并将结果存储到另一个(更小的)数据集中。过滤器可以包括丢弃操作和从较大类型到较小类型的转换。

首先,我们定义一个名为read_burst()的函数,它读取第 I 个突发,执行一些过滤,然后将结果存储到另一个输出 csv 文件中。在我们的例子中,我们可以在malaise = False处删除行。我们传递起始行srow、突发大小burst和列名columns作为read_burst()函数的参数。当起始行等于 1 时,我们还必须将标题写入输出 csv 文件。这样我们定义了一个名为header的变量,如果srow = 1被设置为True

def read_burst(srow,burst,columns):
    header = False
    if srow == 1:
        header = True
    df = pd.read_csv('hepatitis.csv', skiprows=srow, nrows=burst, names=columns)
    df = df.drop(df[df['malaise'] == False].index)
    df.to_csv('hepatitis_small.csv', mode='a',header=header)

现在我们可以遍历整个数据集。注意,我们必须预先知道 csv 文件的行数。这可以通过使用命令行勾选来完成。我们可以使用wc unix shell 命令。为了在 jupyther 笔记本中运行这个命令,我们必须使用!操作符。

**!** wc **-**l hepatitis.csv

它给出了以下输出:

156 hepatitis.csv

我们的文件包含 156 行,因此我们可以将要读取的最大行数设置为 156,因为第一行对应于标题。我们设置burst = 10。因此,我们有时读 100 本书。最后,我们再次运行read_burst()函数来加载最后剩下的行。

burst =10
srow = 1
nrows = 156
columns = ['age','sex','steroid','antivirals','fatigue','malaise','anorexia','liver_big','liver_firm','spleen_palpable','spiders','ascites','varices','bilirubin','alk_phosphate','sgot','albumin','protime','histology','class']
while srow < nrows:
    print('srow: ' + str(srow))
    read_burst(srow,burst,columns)
    srow = srow + burstread_burst(srow,nrows,columns)

现在我们可以加载较小的数据集。

df **=** pd.read_csv('hepatitis_small.csv')
df.head()

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

作者图片

我们可以删除Unnamed: 0列。

df.drop(columns**=**['Unnamed: 0'],axis**=**1,inplace**=True**)

存储格局

在 Python pandas中读取巨大数据集的另一个选择是增加与读取操作相关的内存。这可以通过low_memory参数来完成。

df **=** pd.read_csv('hepatitis.csv', low_memory**=False**)

摘要

在这篇简短的教程中,我展示了如何用 Python 处理巨大的数据集。我们了解到可以采用四种策略:

  • 垂直过滤器
  • 水平过滤器
  • 爆发
  • 内存配置。

如果你想了解我的研究和其他活动的最新情况,你可以在 TwitterYoutubeGithub 上关注我。

如何用 Python 加载 Google 文档的内容

原文:https://towardsdatascience.com/how-to-load-the-content-of-a-google-document-in-python-1d23fd8d8e52?source=collection_archive---------14-----------------------

数据预处理

关于在 Python 中使用 Google Doc APIs 的快速教程

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

图片由照片合成来自 Pixabay

您可能在 Google Drive 中以 Google Doc 的形式存储了一个文档,并希望将其内容动态加载到 Python pandas DataFrame 中进行进一步处理。

首先,你需要访问谷歌云平台并创建一个新项目,比如说 MyProject 。然后,您必须在主仪表板中选择创建的项目,并选择explore and enable API。你可以搜索谷歌文档 API,然后点击启用 API。启用后,您应该创建新的凭据。

可以选择 Google Doc API,查看用户数据,如下图所示。

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

作者图片

您可以按照向导完成凭据的创建。在第 4 部分 OAuth 客户端 ID 中,您可以选择桌面应用程序作为应用程序类型。

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

作者图片

现在您可以下载创建的秘密并将其重命名为credentials.json。将该文件放在将编写 Python 代码的同一个目录中。

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

作者图片

现在你可以下载并复制官方 Google Doc API 文档的代码,它允许你下载 Google Doc 文档的内容。确保你有权利阅读谷歌文档!!!

提取文本后,可以将其保存到本地文件中,然后转换成数据帧以供进一步分析。您将把文本的每一行作为一个新行存储在数据帧中。让我们假设您已经将 Google 文档的文本存储到一个名为text的变量中。

doc_content = body.get('content')
text = read_strucutural_elements(doc_content)

现在,您可以将它保存到本地文件中:

with open("my_doc.txt", "w") as text_file:
    text_file.write(text)

然后您可以重新加载该文件并将其转换为数据帧:

import pandas as pdwith open('my_doc.txt', 'r') as f:
    text = [line for line in f.readlines()]
df = pd.DataFrame(text,columns=['text'])

最终,您已经准备好处理您的数据了!好好享受吧!

摘要

在本教程中,我演示了如何通过官方的 Google Doc API 从 Google Doc 文档中加载文本,并将其转换为 Python pandas DataFrame。

这个过程很简单,但是需要一些重要的步骤,包括配置用来访问 Google Doc API 的凭证。

如果你想了解我的研究和其他活动的最新情况,你可以在 TwitterYoutubeGithub 上关注我。

相关文章

https://medium.datadriveninvestor.com/how-to-restore-the-original-layout-of-a-text-document-after-a-manipulation-in-python-8f3de41e8e95

如何:机器学习管道(初学者)

原文:https://towardsdatascience.com/how-to-machine-leaning-pipeline-beginner-2a736595cbfd?source=collection_archive---------9-----------------------

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

照片由 JJ 英Unsplash

当我第一次开始我的机器学习之旅时,我只知道如何在 Jupyter 笔记本/google colab 中编码并运行它们。然而,当我试图在谷歌云和 AWS 中部署模型时,我发现越来越难以仅仅为了调整某些参数而检查代码行。如果有人只想用一个命令行运行全部代码,这就特别麻烦了。虽然网上有大量的资源,但我认为最好还是列出一个最佳实践的列表,并详细解释每个最佳实践的作用。

在本文中,我将介绍一个简单的回归和分类问题所需的各种组件和模块。整行代码将被分成多个模块,用一行代码编译。

所有文件都可以在这个 github 资源库中找到。

请注意,在这个练习中,我将使用 Windows 操作系统。

先决条件:

  1. 安装 Ubuntu LTS。记得安装长期支持版本。
  2. Spyder(蟒蛇 3)。我发现 spyder 界面更好运行。py 文件,也就是说。这完全是我自己的喜好,请随意使用你自己的编辑器。
  3. Python 3。确保 python3 安装在您的计算机或指定的文件夹/驱动器中。
  4. 熟悉书写功能。在这篇文章中,我们会用到很多。

文件和文件夹概述

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

机器学习管道的树形图

数据文件夹

这是您存储数据的地方,以便您的机器学习管道从中提取数据。在本例中,我拥有的数据库位于。db 格式。

Requirements.txt

该文本文件夹包含所有必要的软件包,你应该安装,以使您的回购工作。一种快速提取所有相应库的方法

pip3 freeze > requirements.txt  # Python3
pip freeze > requirements.txt  # Python2

Bash 文件(Run.sh)

run.sh 文件初始化 run.py 文件,后者依次运行所有其他模块,如数据提取、数据处理和 ML 模型。

#!/usr/bin/env bash
python ./src/run.py

第一行也称为 shebang。想了解更多可以参考链接。Run.sh 运行位于 src 文件夹中的 python 文件。

SRC(源)

如前所述,run.py 模块提取在其他 python 文件中创建的函数。所创建的函数将在本文的第 3 步和第 4 步中解释,但现在只需知道它激活了在其他。py 文件。

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

运行. py 文件

第一步。将 ubuntu LTS 挂载到虚拟环境中

在开始任何项目之前,你会想把 ubuntu 挂载到一个驱动器上,这样它就可以访问你的文件。当你第一次打开你的 ubuntu 时,输入 ls /mnt/看看你能挂载到哪个驱动器上,假设你希望挂载到 c 盘上,命令是 cd /mnt/C/ 。之后,您可以导航到存储数据的驱动器。更多信息,请点击这个 YouTube 视频。

现在你的 Ubuntu 已经挂载到了某个驱动器或文件夹中,你可以继续安装你的虚拟环境了。如果你没有使用 python3,你可以 pip 安装它。

mkdir test-venv ## this creates a drive called test-venv
virutalenv test-venv ## install new virtual environment inside the directory
source ./test-venv/bin/activate ## activate your new environment.

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

Ubuntu 平台

如果您看到类似这样的内容,请不要关闭它,我们将在第 7 步中讨论它。

第二步。规划你的机器学习管道。

想想你希望你的数据如何在你的项目中流动,并最终形成见解。一个简单的、典型的机器学习管道将如下图所示。

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

典型的基本机器学习管道

在这个例子中,我将坚持流水线化机器学习模型的标准过程。

第三步。数据提取/数据准备/

数据提取

大多数数据库都是关系数据库,存储在。db 文件格式,因此您可以使用 SQL 提取它。我包含了一个链接来展示我们如何提取不同类型的数据集。该函数输出提取的数据帧,该数据帧将被输入到数据准备 python 文件中。

数据准备

这个 python 文件包含了各种可以对测试分割进行特征工程、编码和训练的方法。

本文件定义的函数输出 4 个数据帧 x_trainx_testy_trainy_test 。这 4 个数据帧将被输入到模型训练中。

在这个例子中,我对顺序特征使用了目标编码器,并通过 get_dummies 将分类特征转换为数字特征。然而,我建议你尝试不同的编码器,看看哪种帮助最大。

第四步。模特培训

这是建模发生的地方。我在这一部分添加了一个超级参数调整。但是,您可以选择将 hyper parameter tuning 分成不同的部分。

该函数输出 XGBoost、普通线性回归和 LGBM 的平均绝对误差。

第五步。模型评估和验证

建模的结果输出到主 run.py 脚本中。然后,run.py 脚本将结果连接起来,并输出到一个 CSV 文件中,以便于比较。此后,由您决定使用哪种模型。

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

虽然 LGBM 能产生最好的结果,但考虑利益相关者的其他重要要求也很重要。一些例子是模型的可解释性或模型所需的训练时间,这些因素会影响最终的决策。

第六步。Run.py

现在我们已经编写了 ML 管道的所有构件。现在是时候创建一个主 python 文件了,它结合了所有模块的所有输入和输出。

我之前解释过模型如何从各种函数中获取数据并输出它们。检查您是否将各种文件以正确的名称放在了正确的文件夹中,这一点很重要。如果需要帮助,请参考文件夹概述。

第七步。Run.sh

您所要做的就是创建一个 bash 脚本来运行。py 文件。回到 ubuntu IDE。

#!/usr/bin/env bash 
python ./src/run.py

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

chmod +x run.sh
./run.sh

现在,当您尝试运行 bash 脚本时,您可能会看到 numpy 或其他一些包没有安装。出现这种情况的原因是因为你在虚拟环境中。因此,你能做的就是 pip 安装你需要的各种包。

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

现在你所要做的,就是一个接一个地慢慢安装你需要的软件包。安装完所有必需的软件包后:

pip3 freeze > requirements.txt

从这里,您将获得保存在您的文件夹中的 requirements.txt。当您想要共享代码时,需求列表尤其重要。然后,用户可以看到需要哪些软件包,并可以快速安装它们。

结论

在这个练习中,我们学习了所需的各种 ML 模块,以及如何通过 ubuntu 使用 bash 运行它们。您还可以做其他一些改进,比如创建一个配置文件来存储您希望优化的所有变量。此后,您只需要更改配置文件来测试模型的不同变量。我希望你从这里学到一些东西,并一如既往地快乐编码!

如果有任何错误请联系我,我会做出必要的修改。

如何:机器学习驱动的需求预测

原文:https://towardsdatascience.com/how-to-machine-learning-driven-demand-forecasting-5d2fba237c19?source=collection_archive---------6-----------------------

在这篇非技术文章中,我将解释什么是机器学习,它是如何工作的,以及在预测需求时使用它可以得到什么。我们还将讨论启动 ML 计划时的陷阱和最佳实践。

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

信用

什么是机器学习

通常的统计模型将一组已知的关系应用于数据集。例如,指数平滑法将有其估算潜在需求水平和趋势的方法。

另一方面,机器学习是让算法自己理解数据集及其底层关系。

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

统计模型与机器学习模型。来源:我的需求预测培训

机器是如何学习的?

机器学习算法将在数据集上运行,查看数据特征,并(试图)找出任何潜在的关系。

在处理机器学习模型时,您需要注意两个主要方面:

  • 赋予模型的数据(特征)。
  • 你的机器学习模型的超参数。

选择正确的数据输入模型非常重要。数据科学家不应该独自考虑使用什么数据;每个人都应该帮忙。创建预测算法时,您应该问自己以下问题:

如果我必须对下个月我们将销售多少产品进行需求预测,我会问自己什么问题?

当您问自己和您的团队这个问题时,您将会看到对您的模型最有意义的信息。

以下是几个典型的回答:

  • 我的产品目前的价格是多少,在过去的几个月里有变化吗?
  • 我的产品的月平均销售额是多少?
  • 该产品最近缺货吗?
  • 我们目前正在进行一些促销活动吗?

通过向您的 ML 模型提供相关数据,它将能够更准确地预测未来需求。

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

机器学习模型的典型输入。来源:我的需求预测培训

ML 驱动的需求预测能带来什么?

许多公司对使用机器学习模型来预测他们的销售期望过高或过低。如果你期望和承诺太多,高层管理人员会感到沮丧,需求计划者会变得谨慎,不愿意使用一个承诺过多的工具。另一方面,如果你对 ML 的期望太低,你将永远不会启动一个数据科学计划,它将被证明具有非常高的投资回报率。

通过使用机器学习,你能期望多高的预测准确度?

最近的预测竞赛(如 M5corporacio n Favorita)显示,与预测基准相比,误差减少了 20%至 60%。intermarché比赛略有减少,但这是由于使用了对数标度(见下面我的网上研讨会)。

自 2018 年以来,所有需求预测比赛都是机器学习获胜。你还在等什么?

欲了解更多信息,请参见卡斯帕·索尔海姆·博伊尔&延斯·彼得·梅尔德加德 撰写的《从卡格尔的预测竞赛中学习》。

在此注册,了解未来的网络研讨会。

根据我自己的咨询经验,与移动平均相比,通常的机器学习项目会导致预测误差降低 5%至 20%。

通常,随着数据越来越多,这种精确度的提高会越来越高。例如,通过提供更多的需求驱动因素(历史库存水平、促销、营销、定价)或通过每日或每周级别的预测。

机器学习和需求计划者

请注意,通过提高预测基准的准确性,您也将提高整体预测流程的准确性,因为您的需求计划团队将能够在需要时编辑预测(他们几乎总是能够增加一些额外的准确性)。例如,假设您当前的预测引擎达到了 50%的准确率,而您的团队由于他们的工作通常可以将准确率提高到 55%。通过更新模型和使用机器学习,可以达到 55%的基线准确率。那么你的团队可能会进一步提高到 57%或 58%。

需求计划员总是可以通过使用模型不知道的信息(例如,通过与客户交流)来改进模型的预测。

机器学习模型不会让你的需求规划团队过时——但它们可能会减少他们的工作量。

使用机器学习的陷阱

启动机器学习计划需要关注几个关键方面。如果你错过了它们,你很可能无法交付成果。

数据质量

不要用销售数据!你应该预测需求,而不是销售。

糟糕的数据会打败优秀的预测者。每次都是。

预期

如上所述,承诺太多,你会失望(并面临最终用户的抵制)。但是,从另一方面来说,承诺太少,项目就不会有吸引力。

不良流程

需求预测的目的不是要准确。而是帮助你的供应链做出正确的决定。

简而言之,如果你预测的不是正确的事情,那么提高预测的准确性是没有意义的。因此,首先,您应该确保在正确的汇总级别预测您的需求。然后努力改进我们的模型。

例如,许多公司按市场逐月预测需求。而他们需要每周将库存从他们的工厂部署到世界上的几个仓库。关注仓库的每周需求预测比关注市场的每月需求预测更有意义。

首先,修复流程。然后,完善模型。

错误的指标

我仍然看到许多供应链使用 MAPE 作为预测指标。除非你确定你跟踪的是正确的指标,否则运行任何预测改进都是没有意义的。

许多供应链也在很大的价格范围内销售不同的产品。价值 1 美分的产品的预测误差不如价值数百欧元/美元的产品的类似预测误差重要。

我提倡供应链跟踪 wMAE(价格加权 MAE)和 wBias(价格加权偏差)。将这两个指标结合起来,将使您能够关注最重要的产品,并确保不会有一个有偏见的模型。

使用机器学习预测需求的最佳实践

项目管理

召集一个有动力、思想开放、好奇、敬业的团队(你需要不同的个人资料)。根据我的经验,机器学习之旅的开始是最困难的:你需要收集和清理数据,而不促进任何短期的成功。这就是为什么你需要一个积极的团队,花必要的时间收集相关数据。

您还必须评估您的模型应该使用什么需求驱动因素。

📊外部数据。请注意,外部数据可能既昂贵又不一致。例如,许多外部提供商将在几个月后共享市场信息,并且基于不符合您要求的粒度。避开就好。

🌦️的天气。天气会影响许多供应链:你会根据天气卖出或多或少的东西。不幸的是,你无法提前几天准确预测天气。我通常以冰淇淋为例:销售受阳光的影响很大,但你无法提前四周预测天气来计划你的生产。

数据科学

在做需求预测项目时,我喜欢遵循下面强调的步骤。

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

版权所有:Nicolas Vandeput(来自我的需求预测培训

正如您所看到的,在开始收集数据和创建模型之前,有一个明确的目标(在粒度、范围和度量方面)是至关重要的。

您应该对照未用于训练模型的测试集来验证结果。例如,除了用于训练模型的数据集之外,保留几个月的需求。然后,您可以在这些看不见的时间段内测试它,以评估它的准确性。

项目时间表

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

版权所有:Nicolas Vandeput(来自我的需求预测培训)

1️⃣数据收集和清理

👩‍💻电力用户

在第一阶段,您将收集和清理历史需求和需求驱动因素。请注意,获取一些需求驱动因素的数据可能需要几个月的时间(并且需要时间密集型工作)。相反,您可能希望直接进入第 2 步,稍后使用更多数据尝试另一个模型。

✔️Skip:如果你已经在当前的预测软件中使用了相关数据,请执行这一步

2️⃣模型创建

👩‍🔬数据科学家

数据科学家将使用不同的数据特征尝试不同的模型,直到他们获得想要的结果。

生产中的 3️⃣模型

👩‍💻数据工程师

一旦你有了一个工作模型,你就可以把它从“手动/本地计算机”设置转移到“自动/云”设置。

请注意,将工作模型从本地机器转移到云中(并使之自动化)所花费的时间可能不值得。我见过一些项目花费三个月的时间将一个工作模型转移到云上,希望每周节省 10-30 分钟的手工工作。

✔️:如果您同意每周/每月手动运行一次模型,请跳过这一步

4️⃣ 用户接受度

👨‍💼项目经理

模型准确性应根据**未来未知数据进行测试。**这是评估预测质量的唯一方法。请记住,将您的模型所实现的准确性与简单基准(见下文)、您当前的预测引擎以及您的一致预测所实现的准确性进行比较。

https://nicolas-vandeput.medium.com/assessing-products-forecastability-forecasting-benchmarks-vs-cov-2bdac1e7fd5f

不要犹豫,做一些平行运行,以确认新的模型工作正常。

本文基于我之前的一次网络研讨会。在此注册以获得未来的通知。

问与答(Question and Answer)

使用机器学习来预测需求,我们还能期望多高的准确度?

通常,机器学习模型比最先进的预测软件高出 5%至 15%。随着更多数据的可用,可以实现更高的准确性(需求驱动因素)。

如何启动概念验证(POC)

  1. 收集初始数据(您可以使用当前的统计工具数据)
  2. 优化模型
  3. 试运行几次
  4. 成功?实施您的解决方案!

如何在 Tableau 中制作彗星图

原文:https://towardsdatascience.com/how-to-make-a-comet-chart-in-tableau-b5c23e3dc58b?source=collection_archive---------22-----------------------

我喜欢用数据讲故事。因此,我一直在寻找创造性的方法来表示数据。

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

Justin W 在 Unsplash 上的照片

彗星图,顾名思义,基本上类似于条形图,但有一个方向。所以,当你想展示比较时,它们很有用。例如,彗星图可以用来漂亮地描绘 2019 年和 2020 年的销售情况。尽管这个概念有意义,但由于应用方面的原因,它并没有被广泛使用。

我最近决定使用它,我喜欢我所看到的。因此,我今天写信来尽可能简单地说明如何建立一个。

我们开始吧。

1.获取数据集

当您想要比较两个维度之间的一些度量时,彗星图最有效。所以,我决定使用新冠肺炎疫苗意愿数据集。你可以从这里得到。

2.连接到数据集

下载的数据集是 xls 格式文件。当我试图将它作为数据源连接时,它抛出了错误。因此,您可能希望在 excel 中打开并另存为。然后尝试重新连接。

3.数据操作

数据集是宽格式的,如下所示。我们需要把它转换成长格式。

因此,一旦您将文件连接为数据源,单击除 DateTime 之外的所有列的顶部,右键单击并选择 Pivot。

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

作者图片

您的数据现在应该是这样的。将透视字段名重命名为 Country,将值重命名为 Willingness。

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

作者图片

接下来,我们需要创建几个字段-

2020 年意愿

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

作者图片

2021 年意愿

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

作者图片

两者的区别

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

作者图片

符号函数给出计算的符号。正数用 1 表示,负数用-1 表示,零用 0 表示。这将用于突出衡量标准的积极和消极变化。

4.拖放!

现在,只需将 Country 拖到 Rows shelf,将 measure 值拖到 column shelf,就像处理水平条形图一样。

  • 将平均意愿 2021 和平均意愿 2020 添加到测量值卡。
  • 将度量名称拖至路径和大小。
  • 将符号字段(在我的例子中是 diff)拖到 colour。

瞧啊。彗星图准备好了。您的输出将如下所示。

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

作者图片

你可以进一步定制它,比如添加标签,改变表单格式,在工具提示中添加更多信息等等。

这是我的最终版本。我在工具提示中添加了每个国家的详细趋势以及变化百分比。

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

作者图片

你可以在这里找到完整的 viz。

我希望这些信息对你有用!请在评论中留下任何问题。

快乐学习!

如何创建人们想要阅读的数据分析项目

原文:https://towardsdatascience.com/how-to-make-a-data-analytics-project-that-people-want-to-read-47caea306570?source=collection_archive---------17-----------------------

让你的工作引人注目的 8 个可行建议

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

(来源)

在一个领域建立自己的事业,最重要的部分是通过自己的工作为人所知。谈到数据分析,拥有令人印象深刻的项目来展示你的知识和专长胜过所有其他方法,包括认证和课程

那么,如何建立一个令人印象深刻的项目呢?更重要的是,是什么让一个分析项目令人印象深刻?

在这篇文章中,我向你展示了 8 个帮助我成为 Kaggle 笔记本专家的技巧,它们帮助我在不同的数据集上建立叙述。那么,事不宜迟,让我们开始吧。

提示 1:选择你的分析目标,而不是你想要使用的工具

“永远记住,你的关注点决定了你的现实”——乔治·卢卡斯

人们很容易迷失在不断进入我们思维的一套奇特的数据可视化软件包中。虽然学习新工具没有错,但是在从事一个项目时,必须有某种节制。

分析项目的最终目标不是炫耀新工具的知识,而是在提供的数据中发现有用的模式。因此,集中精力询问数据问题比担心必须使用哪种工具更有成效。

当然,有些情况下,由于项目的需求,你可能更喜欢一个库而不是另一个。在这些情况下,在决定要使用的库方面做一些工作是有意义的。但是请注意,不要让您选择的库或语言来指导您的分析!

技巧 2:准备好一套方法

“如果你不能把你在做的事情描述成一个过程,你就不知道你在做什么。”——w·爱德华兹·戴明

方法论本质上是指导研究的上下文框架。简单地说,在分析项目的环境中,它可以帮助你在进行项目时坚持一个过程。

拥有一个方法是很重要的,因为拥有一个方法可以确保你有一个清晰定义的途径来实现你的目标。此外,当你必须向他人解释你的项目时,一种方法会变得非常有效。

这是因为从数据采集阶段开始到结果沟通阶段,你完全控制你所采取的每一个步骤;以及其他所有中间步骤!

拥有方法论的一个鲜为人知的好处是它加深了你对项目的思考。例如,我在我的项目中加入了一个步骤“理解我的偏见”,在那里我分析了美国警察的种族暴力。这种包含帮助我确保我的发现不受我内在偏见的影响。

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

这一方法中的第二步和第三步是确保我的结果没有偏差的关键(鸣谢:作者,来源)

技巧 3:头脑风暴,就像你的生活依赖于它一样

“获得好想法的最好方法是获得大量的想法,把不好的扔掉。”——莱纳斯·鲍林

第一次尝试分析一个数据集总是会非常混乱。特别是如果它有很多实例和功能,如 Kaggle Survey Challenge 2020 数据集

这就是头脑风暴变得重要的地方。简单地说,头脑风暴是通过让这些想法从头脑中自由流动到物理(纸张)或数字(计算机)位置来产生新想法。

虽然头脑风暴的大多数定义称之为团队过程,但有研究支持个人头脑风暴比团队会议产生更高质量想法的论点

在为您的数据分析项目单独进行头脑风暴的背景下,有 3 个有用的步骤可以帮助您开始。

  1. 阅读数据集描述 —你认为收集数据的人最优先考虑的是什么?
  2. 阅读功能描述 —根据您的意见,哪些功能最符合步骤 1 中的主要优先级?
  3. 阅读以前的工作——如果有人在过去使用过相同或相似的数据,请查阅它们

在这之后,你将能够把你产生的所有想法写在一张纸上(或者一个数字记录,如果你不是像我一样的守旧派)。是的,头脑风暴就像你的生活取决于它。坚持写下你可以用来分析你的数据的想法,直到你头脑枯竭。

头脑风暴是你分析的支柱,因此必须彻底考虑。

提示 4:进行初步分析,以确定最有希望的叙述

“因为我们不认为我们知道一件事,直到我们熟悉它的主要条件或首要原则,并进行我们的分析,直到它的最简单的元素”——亚里士多德

在你的头脑风暴会议之后,你可能有多个想法想要作为你的分析的叙述。然而,如果你希望你的作品清晰有力,你应该只选择一个主要观点。

为了做出这个选择,快速启动您的系统并编写一些代码来执行初步分析会有所帮助。这可能是你的探索性数据分析的一部分,因此需要在聚焦于最有希望讲述的故事之前,将手头的数据可视化。

例如,在今年的 2020 年 Kaggle ML 和 DS 调查挑战中,我通过初步分析发现与调查中的其他任何一组受访者相比,21 岁以下的印度受访者增长最快。这帮助我为接下来的分析建立了我的案例。

技巧 5:使用故事板来构建你的叙述

“对我来说,故事板是预先想象整部电影的方式”——马丁·斯科塞斯

说到用数据讲故事,我个人认为 Cole Nussbaumer Knaflic 是该领域最有头脑的人之一。虽然她通过她的书籍多次演讲传播了大量的想法,但我发现其中一个想法非常足智多谋,那就是故事板制作过程

正如专业作家所说,一个好的故事有 5 个部分——阐述、上升动作、高潮、下降动作和结局。在您的数据分析项目的上下文中,您可以遵循类似的结构来制作您的故事板。

介绍你拥有的数据,进入你的分析或主要目标的“为什么”,分析你选择的子目标,报告洞察力,同时将它们与你的主要目标联系起来,最后结合你的所有发现,选择最重要的,并报告它们作为相关利益方可以采取的决定。

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

5 部分故事结构(鸣谢:作者,灵感来自来源)

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

我用于 Kaggle 2020 调查分析挑战的故事板(致谢:作者)

秘诀 6:这不是关于你,而是关于他们

“这不是关于你,这是关于他们”——克林特·伊斯特伍德

转到一个更哲学的观点,我敦促读者理解,我们进行的任何分析从来都不是只为我们的眼睛。分析工作的影响只与它对所涉及的利益相关者的有用程度相关。

因此,如果没有必要,就不要在报告中添加图表。仅仅因为你努力工作,并不意味着你需要炫耀它。如果它与你的整个分析不一致,它必须看到回收站的内部。

同样重要的是,确保您能够将您的结果与利益相关者可以实现的可操作目标联系起来。

此外,确保你永远不会用没有意义的视觉效果误导你的观众。

技巧 7:获得一些初步反馈

“反馈是冠军的早餐”——肯·布兰查德

你的分析的第一份完整草稿必须总是与那些对你正在讲述的故事的主题毫无概念的人分享。

这是有效的,原因很简单——如果一个没有主题 X 背景的人能够理解并欣赏你讲述的关于主题 X 的数据驱动的故事,那么这意味着你的叙述是连贯的、清晰的和引人入胜的。

如果这种情况没有发生,那么是时候回到绘图板,重新开始你的叙述了。重复,直到你达到目标!

请记住,反馈不是为了让你开心,而是为了改进。所以,如果你听到你不喜欢的东西,不要怀有敌意!

技巧 8:注意细节

“好东西和伟大东西的区别在于对细节的关注。”——查尔斯·r·斯温多尔

即使是很小的事情,比如你的情节主题,你在报告中使用的字体和颜色,都会对读者如何看待你的作品产生深刻的影响。

作者非常关注细节的最好的分析例子之一是安德拉达·奥尔特亚努的鸟鸣识别 EDA。甚至视觉效果也与鸟儿的配色方案相匹配!

一致性是分析报告的另一个非常重要的方面。你不需要华丽的报告。你需要一份极简的报告,讲述已经分析过的数据的故事。

对我有帮助的其他提示

以下链接包含了一些最好的数据分析师和故事讲述者的建议,他们对我的旅程产生了巨大的积极影响

  1. John Miller 的“分析报告的一些最佳实践”
  2. Rachael Tatman 的《通向更专业的数据科学代码的六个步骤》
  3. 本·威灵顿的《通过讲故事让数据更有意义》
  4. David McCandless 的《数据可视化之美》

希望这是一个有用的阅读!干杯:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值