为数据科学家推荐的 5 篇文章(2 月 15 日)
每周数据科学、机器学习和 AI 推荐文章
作者图片
本周为数据科学家推荐的文章将让你大开眼界。像往常一样,在媒体平台上有来自人工智能作家的大量写得很好且内容丰富的文章。
在本周的书单中,有两篇文章是你必须阅读的。第一篇文章阐述了 ML 工程师和数据科学家角色之间的区别,这是目前求职者的重要信息。第二篇文章展示了数据科学技能的实际应用。
数据科学的好处:我是如何在都柏林找到我的新家的安德里亚·艾伦蒂
数据科学及其对房地产的适用性。
安德里亚巧妙地利用他的数据科学超能力来简化他寻找新家的过程。
文章中包含了用于从数据中推断洞察力的精确步骤和技术。Andrea 清晰的解释使这篇文章变得有趣且容易阅读。
阅读并跟随 Andrea 的探索性数据分析之旅,将介绍一个使用 Data Studio、Pandas、Python、API 等工具和库的数据可视化和分析世界。
这篇文章是一个很好的例子,描述了如何使用数据来做出更精确、更合理和更科学的决策。
中国的教育科技独角兽证明了远程学习是可行的
人工智能在教育中占有一席之地。
开复通过成长中的独角兽提供的人工智能驱动的教育平台,探索人工智能在教育领域的当前和潜在影响。
李开复简要谈到了如何利用人工智能来提供为孩子量身定制的个性化学习体验。本文介绍了计算机视觉、音频识别和语音合成等人工智能技术帮助儿童学习的方法。
这篇文章强调了教育中的人工智能不会取代传统教师的观点;相反,人工智能将作为一个支持实体,实施成本节约战略,使教育更容易获得。
https://kaifulee.medium.com/chinas-ed-tech-unicorns-prove-that-remote-learning-can-work-b62723c0b311
Hardiv Harshakumar 拍摄的自动驾驶汽车的幕后故事
自动驾驶汽车如何理解道路场景?它们如何在人造道路上行走?他们如何处理实时中断?
Hardiv 分解了为自动驾驶汽车提供自主能力的五个组成部分。通过简单的解释、详细的定义和插图,Hardiv 以一种易于理解的方式向读者展示了与自动驾驶汽车相关的复杂主题和想法。
探讨的主题包括计算机视觉、路径规划算法、自动化水平等。
https://medium.com/tech-student-uk/behind-the-scenes-of-autonomous-vehicles-41b625b549f8
Adobe Photoshop 实现了 5 个新的人工智能工具,并通过pytoslabs击败了竞争对手
AI 支持创意
人工智能在创意人员的工作中有一席之地。PythosLabs 的文章介绍了 Adobe Photoshop 中基于人工智能技术的新功能。
本文介绍了这些人工智能技术,使用图像样本描述了每个功能的运行。看到计算机视觉和深度学习技术的直接适用性非常有趣,如风格转移、GANs、语义分割等。
还参考了所展示的功能所基于的研究成果。
机器学习工程师:让你的梦想成真
如果你对机器学习工程师和数据科学家之间的区别感到困惑,请阅读本文。
自从人工智能跳出研究实验室进入日常生活以来,就一直需要有技能开发和维护模型和人工智能系统的个人。
Pratamamia 的文章解决了机器学习中两个突出角色之间的模糊性,即 ML 工程师和数据科学家。
通过轶事和第一手经验,Pratamamia 展示了人工智能团队中 ML 工程师的职责和角色。这篇文章解释了一个典型的 ML 工程师角色是什么样子的,包括与其他不同角色的交互。
在考虑是做数据科学家还是 ML 工程师?那么本文将清楚地呈现这两种角色之间的区别。
要联系我或找到更多类似本文的内容,请执行以下操作:
为数据科学家推荐的 5 篇文章(2 月 8 日)
每周数据科学、机器学习和 AI 推荐文章
作者图片
介绍
与数据科学领域以及更广泛的机器学习领域相关的大量主题和学科,允许媒体上的技术作者在文章中涵盖有趣的主题。
以下是五篇不应错过的专注于数据科学的文章。本文涵盖的主题从网络安全到数据科学项目管理。
注意:请随意使用评论区来分享你本周遇到的任何值得分享的 ML 和 DS 文章。
快乐阅读。
在数据科学中,要么专门化,要么死亡
这篇文章的中心观点是专业化对于数据科学领域的发展至关重要。
亚当更喜欢专业化的道路,而不是一般化;在本文中,Adam 的观点是,拥有广泛的数据科学知识而没有核心领域的专业知识可能不利于从业者在学习方面的进步。
在我看来,亚当是对的,机器学习或 DS 职业生涯的典型轨迹最终会缩小到某个领域的专业。也就是说,对于入门级的角色,一般的数据科学知识可能同样重要。
仔细阅读这篇文章,并在评论区分享你的想法和观点。答案没有对错之分。
人工智能如何从遗传学中学习
Adam Dhalla 的文章介绍了与遗传搜索算法相关的概念、思想和技术。
在进入本文的技术部分之前,Adam 先介绍了 DNA 组成、结构和形成的世界。亚当提出了遗传学和基于算法的问题解决方法之间的联系。
从这篇文章中可以获得丰富的知识。Adam 将生物学、算法和代码结合到一篇详细的文章中,简单易懂地介绍了一个有点复杂的主题。
https://adamdhalla.medium.com/how-ai-can-learn-from-genetics-b24f31adf494
我是如何通过识别尼舒·贾恩的一个愚蠢模式而意外入侵一个政府应用程序的
作为数据科学家,我们最终习惯于在系统中获取模式,无论是在计算、机械还是生物系统中。Nishu 的模式识别能力导致了对政府移动应用程序中实施的薄弱安全措施的利用。
Nishu 的文章详细介绍了检测到该模式的方法,以及利用的安全漏洞。像一个守法的好公民一样,Nishu 向相关部门报告了应用程序缺陷。
这篇文章非常值得一读,因为它传达了应用程序安全性中模式检测和匹配的应用。Nishu 甚至包括了他编写的代码,用来攻击文章中提到的政府创建的应用程序。
三个数据科学家原型雅各布·摩尔
Jacob 撰写的这篇观点鲜明的文章提出了数据科学家可以分为的三个类别,或者至少具有与这些类别相关的特征和特性。
无论您是否同意 Jacob 提出的类别,本文中对每个原型的介绍都提供了大量信息。这些信息包括每个类别的利弊,这反过来又可以为职业决策提供见解
阅读这篇文章,找到你属于哪种数据科学原型,谁知道呢,你可能会感到惊讶。
成功数据科学项目的 7 个步骤 Amit Bharadwa
Amit 介绍了数据科学项目中涉及的标准步骤和流程,以及决定 DS 项目成功结果的有用的通用技巧。
Amit 的文章包括每个步骤的描述、提示和数据科学家在开展项目时会听到的常用技术术语的简要定义。
</7-steps-to-a-successful-data-science-project-b452a9b57149>
希望你已经在上面的每篇文章中找到了有用的信息(或者至少是娱乐)。
下周见!
要联系我或找到更多类似本文的内容,请执行以下操作:
数据科学家面试中需要注意的 5 个危险信号
因为你在下一个角色中不想要的东西同样重要
肖恩·奥尔登多夫在 Unsplash 上拍摄的照片
当我们寻找下一个角色时,我们似乎忘记了一件事,那就是求职面试对求职者和雇主一样重要。我们倾向于全神贯注于面试,以至于没有意识到潜在的危险信号;然后,我们可能会以一个不是我们所期望的角色结束,促使我们很快与工作闹翻。虽然这通常适用于所有工作,但对于数据科学家来说尤其如此。
研究显示,数据科学家不会在他们的工作岗位上呆很长时间,在分析/数据科学工作中的平均停留时间为 1-2 年。期望和现实之间的差距似乎是如此高的离职率的主要驱动因素之一:我们被许诺 21 世纪最性感的工作,但更多的时候,我们最终在 Excel 中编写报告,或者从事永远不会看到(生产)日的模型。
如果我们对目前的角色感到沮丧,这是可以理解的,我们可能会继续前进,找到一个更好的角色。但是,我们如何确保我们的下一个角色是一个很好的匹配,我们不会走进更多的相同?
作为考生,在面试过程中要积极寻找信号。但是,尽管发现有利的一面相当容易,但识别应该发出警报并促使进一步调查的危险信号却不那么容易。因此,这里有 5 个科学家应该注意的常见危险信号。
1。工作描述含糊不清,过于笼统。
就像你是根据你的简历被选中的一样,你应该从职位描述开始选择过程。如果它太模糊,列出不切实际的需求(例如几乎每一种现有的或废弃的编程语言),使用诸如大数据或人工智能这样的流行语,没有真正的原因,就不要打扰了。可能有人决定他们需要一名数据科学家(因为这是当今酷公司所做的),但他们不知道他们需要数据科学家的哪些技能,也不知道他们为什么需要一名数据科学家。你可能想深入挖掘你将面临的挑战或你将从事的项目,并试图让它们具体化。如果他们做不到,那么你很有可能根本无法从事任何数据科学研究。
2。工作面试太容易了。**
如果面试官没有探究你对这个话题的了解有多深,并且让你轻易离开,要么你面试的职位低于你的级别,要么他们自己没有足够的经验。在这两种情况下,你可能都想走开。在第一种情况下,工作可能没有足够的挑战性,你很快就会发现自己很无聊。在第二种情况下,假设面试官比你年长,你可能希望他们更有经验,以便向他们学习,成长为一名科学家。让他们描述一下他们典型的工作日,或者让他们给你讲讲过去的项目和当前的挑战,以此来了解你在那里可以实际做些什么。
3。他们声称是数据驱动的。
大多数公司声称是数据驱动的,但很少公司是这样。当然,分析功能将是数据驱动的(希望如此),但你将与其他部门合作吗?幸运的是,这很容易在面试中发现。询问他们如何利用数据做出决策的具体例子。如果他们不能提供任何,你就知道这不是真的。所以,除非不断地向人们解释你工作的价值是你喜欢做的事情,否则你可能会想通过。
4。他们正在进行数据迁移。
现在,这并不坏本身(实际上完全相反),但这意味着,如果您在迁移过程中加入,您可能会在几个月到几年的时间内一直使用遗留系统,这取决于迁移的状态。数据问题将会令人沮丧地普遍存在,自动化您生成的任何东西将几乎是不可能的,因为大多数东西将被搁置,直到迁移结束。在面试中询问迁移的进展是一个好主意:询问迁移何时开始,预计还需要几个月时间(也要注意这些事情往往比预期的要长得多)。如果他们刚刚开始,而你又迫不及待地想上云,那么最好去别的地方看看。
5。他们想让你产生“洞察力”。
作为一名数据科学家,您应该希望从事具有明确业务目标、明确交付成果和可衡量影响的项目。这些是你的下一任雇主会在你的简历中寻找的东西。然而,洞察力却不具备这些品质。请求背后通常没有明确的目标,而是模糊的“很高兴知道”,如果范围划分不当,陷入“看 X 会很有趣”的永无止境循环的风险非常高。此外,更重要的是,很难量化洞察力的影响。它会存在于一些董事的头脑中,可能会也可能不会影响他们未来的决策。如果这就是你被要求做的全部工作,那么你很可能会成为一名薪酬过高的分析师,而不是一名数据科学家。
这些标志本身并不一定是坏的,但它们绝对应该敲响警钟。然而,仅仅因为你发现了危险信号,并不意味着这份工作不适合你:每个角色都有优点和缺点,积极的方面可能会超过消极的方面。所以,提出你的问题,收集你的数据,像一个优秀的数据科学家一样,得出你的结论,做出你的决定。世上没有完美的工作,只有适合你和你职业生涯中某个特定阶段的抱负的工作。
总之,记住工作面试是你发现潜在新工作的机会,所以要充分利用它。不要害怕问难以回答的问题;没有人会因此对你做出不好的评价,但是在面试期间(或者公平地说,在面试之前)做一点研究可以帮你省去很多痛苦。
关于如何让你的简历脱颖而出的建议,请查看我的另一篇文章。
帮助您学习和掌握 Git 和版本控制的 5 个资源
有了这些资源,版本控制就不那么麻烦了。
照片由来自 Pexels 的 Markus Winkler 拍摄
如果你是一名技术人员、程序员、数据科学家或者 web 或应用程序开发人员,那么你应该知道你需要掌握的基本技能之一是版本控制,或者特别是 Git。当然,有不同种类的版本控制系统,但是 Git 可能是最广为人知和使用最多的一个。
Git 是 DVCS(分布式版本控制系统)的一个例子。在分布式版本控制系统中,你的软件的历史并不是存储和保存在一个单独的设备上;相反,它是分布在不同机器和不同用户上的。例如,使用 Git,每个开发团队成员都处理代码的一个副本,该副本包含自代码最初创建以来发生的所有变更的历史。
从性能、安全性和灵活性的角度来看,Git 的设计优于其他版本控制系统。如果你像我一样,那么在你的技术之旅中,你试图学习 Git,并试图通过实践来掌握它。如果你像我一样,那么也许你一直在努力掌握 Git,有时会感到沮丧。
</5-ways-you-can-contribute-to-open-source-that-doesnt-involve-writing-code-18112748bf12>
当然,并不是每个人都纠结于理解和掌握 Git,但实际上很多人都是这样。这种斗争的原因往往是当我们学习使用相同的方法论。也就是“记住基础知识,随着时间的推移你会做得更好。”尽管这是学习任何东西的有效方法,但有时这不是学习的最佳方式。
因此,当我想要构建坚实的 Git 知识时,我查阅了许多资源来寻找那些使理解 Git 的内部机制变得简单明了的资源。在本文中,我将与您分享其中的一些资源。
№1:像饭桶一样思考
让我们从我最喜欢的一个学习 Git 的网站开始,像(a) Git 一样思考。关于这个网站,我最喜欢的部分是他们的标志,或者说座右铭,“Git 不应该这么难学。”作为每个程序员都需要知道的技能,我再同意不过了。
Git 是基于图论的不同概念构建的,图论是一个处理图形的数学领域。想想看(a) Git 用了整整一章来讨论图论以及节点和边是如何运作的,所以 Git 在后面更有意义。在讨论了图论之后,网站用例子解释了 Git 的基础知识和每个概念的一些用法。
№2: GitHub 文档
学习 Git 的一个很好的资源是 GitHub 文档。GitHub 团队经历了很多麻烦,让学习和掌握 GitHub 对每个人来说都是可管理的。他们的努力通常会有回报。如果你想从源头上学习 GitHub,没有比 GitHub docs 更好的了。
g itHub 文档解决了您关于 Git 和 GitHub 使用的所有问题,从本地安装 Git 和 GitHub 到创建存储库,再到创建分支、合并分支、拉请求,以及在本地和 GitHub 服务器上同步代码库。这些文档通过 GitHub 的快照,使用可视化的方法来提供这些主题。
</5-simple-steps-to-package-and-publish-your-python-code-to-pypi-d9f5c43f9d4>
№3: Git 塔
如果你是 Git 和编程的初学者,并且更喜欢用书作为学习方法,那么这个资源就是为你准备的。 Git Tower 是一本免费的在线可视化书籍,面向 Git 初学者,以简单、直接的方式教你不同的 Git 和版本控制基础知识。
Git Tower 是 Git 和版本控制相关的一切的可视化解释。从什么是版本控制的绝对开始,到我们为什么需要从它开始,然后深入到什么是 Git,它的基础,以及与其相关的更高级的主题。Git Tower 提供教程、视频和备忘单来帮助您成为一名专业的 Git 用户。
№4:可视化 Git 参考
到目前为止,我们浏览了详细讨论和解释 Git 和版本控制的资源,从什么是版本控制开始,到关于 GitHub 的更精确的主题。但是,假设你现在需要使用 GitHub,并且你想要一些简单的、切中要害的东西,并且可以在几分钟内完成,那么可视化 Git 参考就是为你准备的。
Visual git Reference 是一个单页网站,直观地解释了 git 的基本概念。它解决了 Git 最常见的用法,比如提交、签出、合并、获得版本之间的差异,以及以一种您可以立即使用的简单方式重新设置基础。
</6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61> [## 数据科学应用的 6 个最佳 Python IDEs 和文本编辑器
towardsdatascience.com](/6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61)
№5:学习 Git 分支
正如我们前面提到的,Git 和 GitHub 是基于图论构建的,图论是一种可视化的数学表示。GitHub 的基本工作机制之一是分支、创建、合并和处理它们。学习 Git 分支是学习和掌握 Git 分支的一个很好的可视化、交互式资源。
这个资源可能是我和我的学生受益最大的资源;这样,它教授了分支,并且可视化地处理它们使得概念本身易于掌握和使用。此外,网站级别以一种逻辑的方式前进,对于绝对的初学者和专业人士来说都很容易理解。
外卖食品
对于任何加入技术领域的人来说,版本控制是一个更具挑战性的概念。作为一名计算机科学教师,Git 是我的大多数学生努力奋斗并被这个领域淹没的地方。为了让我的学生和我自己更容易,我寻找不同的资源来用各种方法解释 Git,纯文本资源、可视化资源和交互式资源。
我们都是不同的;我们有不同的学习和吸收信息的方式;有些人更喜欢看书,认为这是学习的最好方式。其他人更喜欢看视频或动画,因为他们更好地理解视觉呈现的东西。有些人通过尝试学习,有些人通过倾听学习,等等。
</5-data-science-open-source-projects-you-to-contribute-to-boost-your-resume-d757697fb1e3>
我浏览了数百种材料和资源,无论是在我试图学习 Git 的时候,还是在我试图找到解释 Git 并将其传授给其他人的最佳方法的时候。在本文中,我与您分享了一些学习和掌握 Git 的材料和资源,Git 解决了广泛的交付方法。有的是纯文字教程,有的是直观讲解,有的是边做边教。
所以,如果你是技术领域的新手,或者对 Git 知识还不太了解的人,可以尝试一下本文中的一些资源;也许其中一个会帮助你强化知识,更好的理解 Git 和版本控制。
对熊猫的数据帧进行排序需要知道的 5 个秘密
编程;编排
通过一列、多列和类别轻松排序 Pandas 中的数据帧
安德烈·泰森在 Unsplash 上拍摄的照片
掌握如何在 5 分钟内对熊猫的数据帧进行排序!!
数据帧排序— 将数据帧按有意义的顺序排列的过程,以便您可以更有效地分析它💡
一个内置的方法sort_values()
对于以特定的顺序排序 Pandas 中的数据帧非常有用,例如升序或降序!
使用sort_values()
排序本身非常简单,但是,在实践中,您可能会遇到缺少值、自定义标签(例如 H、L、M 代表高、低和中)的问题。
以下是在 5 分钟内掌握熊猫数据帧排序的 5 种方法!💡
让我们跳进来吧!!
完整的笔记本📚带着所有这些招数在文末!
首先,让我们创建一个如下所示的数据帧,
熊猫数据框|作者图片
基于一列对 Pandas 中的数据帧进行排序
这是最简单的sort_values()
方法。你需要做的就是
熊猫。data frame . sort _ values(column _ name)
并且基于 column_name 中的值对整个数据帧进行排序。
让我们根据列龄对上面的数据帧进行排序。
如何根据一列|作者图片对熊猫数据帧进行排序
默认排序顺序是升序!🚩
为了将df
按年龄列中值的降序(从大到小)排列,您将在sort_values()
中提供附加参数。
举个例子,
如何按作者降序排列熊猫数据帧|图片
你需要做的就是将参数ascending
设为假!
基于多列对 Pandas 中的数据帧进行排序
将列列表传递给 sort_values()!!
让我们根据列重量和高度中的值对df
进行排序。
根据多列对熊猫数据框进行排序|按作者排序图片
数据帧首先按列重量排序,然后按高度排序。
秩序很重要!
看,当你使用不同的列顺序时,结果是多么的不同!
按多列排序熊猫数据框|按作者排序图片
此外,您还可以按不同的顺序对多列进行排序。
基于不同顺序的多个列对 Pandas 中的数据帧进行排序
通常,您需要按不同的顺序按多个列对数据帧进行排序。
记住 sort_values()参数“升序”
例如:按照栏重量的升序和栏高度的降序对df
进行排序。
如何在 Python 中按多列排序熊猫数据帧|按作者排序图片
DataFrame df
首先按照列权重的升序排序。保持不变,df
再次按照列高的降序排序。
在排序中处理缺失值
处理缺失值或NaN
无法与其他值进行比较,因此默认情况下,sort_values()
在排序后将NaN
放在数据帧的末尾。
例如,修改现有的 DataFrame 以包含NaN
及其在 age 列上的排序。
df.loc[5,'age'] = np.nan
按作者处理 sort_values() | Image 中的 NaN
不管排序的顺序如何,NaN
总是放在最后🚩数据帧的。
这可以使用sort_values()
中的参数na_position
进行更改。
将 NaN 值放在 Pandas data frame sort _ values()| Image by Author
在 geeksforgeeks.org的这本有趣的读物中,你可以找到上面提到的对熊猫的数据帧进行分类的技巧的所有使用案例
使用“Inplace ”,但是要小心!
到目前为止,您可能已经注意到,每次我们需要将排序后的数据帧分配给一个新的数据帧时,现有的数据帧都不会更新。
为了避免这种情况,您可以将inplace
参数设置为True
!
inplace = True
就地修改数据,这意味着它不返回任何内容&数据帧得到更新。🚩
但是,这是单行道!您无法撤消此更改!
自定义排序:使用分类值对 Pandas 中的数据帧进行排序
有时,您可能会遇到值 S,M,L ,如我们的数据帧的 shirt_size 列中所示。
处理 S < M < L 比较的最简单方法是给 S、M 和 L 中的每一个分配一个数字。🚩
看这里怎么做→
如何在熊猫数据框|作者图片中进行自定义排序
此衬衫 _ 尺寸 _ 代码列可用于根据衬衫 _ 尺寸列对数据帧进行排序。
sort_values()
中其他不常用的参数是kind
和axis
。关于它的更多信息可以在这里https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html。📌
结论,
在本文中,我解释了在 Python 中掌握sort_values()
到在 Pandas 中对数据帧进行排序的所有选项。你可以尝试这些,也让我知道你用哪些其他方法来加速你的 EDA!**
现在你可以通过 在这里报名 成为媒介会员,阅读我和其他作家发表的所有故事。当你这样做,我会得到你的费用的一小部分,没有任何额外的费用给你。欢迎加入我的电子邮件列表,了解我写作的最新进展。
我最近发现了这个非常有用的分类熊猫数据帧的指南。这可能也会让你感兴趣。
*
📚完整的 笔记本 就在这里。*
感谢您的阅读和投入您的时间!!
训练机器学习模型时要做的 5 件超级高效的事情
极其漫长的等待变成了生产力会议
#2.代码蠕虫
机器学习是一个迭代的过程。最痛苦的是,每一次迭代都非常漫长。无论你是在训练一个神经网络,调整超参数,还是进行无数次的实验,都需要时间。考虑到数据集不会变得更小,你的机器学习未来将涉及大量盯着笔记本电池的小角落。
那么,如何最好地度过这段时间而不是等待呢?在这篇文章中,我将回答这个问题。具体来说,我将向您展示 5 项活动,这些活动将提升您的技术技能,让您在专业上成长为一名数据科学家。这些活动简短而有趣,每一个都是为了适应一个普通模型运行的持续时间而选择的。
https://ibexorigin.medium.com/membership
获得由强大的 AI-Alpha 信号选择和总结的最佳和最新的 ML 和 AI 论文:
https://alphasignal.ai/?referrer=Bex
开始之前…
在开始任何模型训练、超参数调整或实验之前,做好准备非常重要。在您点击 run 之前,您应该确保您执行的每个单元格和代码块都将提供您期望的结果。否则,你会浪费时间。
在深入研究之前,有许多考虑因素,这篇关于机器学习掌握的博客告诉你如何最好地设计每个实验,以及如何明智地做出决定。
此外,如果您正在 Jupyter 笔记本中训练模型,启用单元格通知可能是个好主意。当你在做我们将在本文中讨论的活动时,它们会特别有用。您肯定不想因为在执行过程中被卡住而错过执行结束。这里有一篇由帕鲁尔·潘迪撰写的优秀文章,展示了如何在经典 Jupyter 和 Jupyter 实验室中启用这一功能。现在,让我们开始吧!
1️⃣.专业的
数据科学最容易被忽视的方面是建立关系网和发展强大的职业身份。在我看来,一个全面发展的数据科学家必须具备以下四点作为其职业形象的一部分:
- 职业 LinkedIn 页面
- 定期更新简历
- 脱颖而出的 GitHub 页面
- 强大的投资组合
这些对于让你在人群中脱颖而出并有效地向他人展示你的技能至关重要。成功地提升和磨练你的职业形象需要时间,老实说,这可能会很无聊。原因是撰写 LinkedIn 个人资料摘要或开发投资组合网站有点超出了许多数据科学家的舒适区,这是可以理解的。
每当你在 ML 实验中陷入等待时,你可以从小事做起,一步一步来。开始上传一个职业形象到你的 LinkedIn 个人资料中,并创建一个与你的个性相符的 LinkedIn 横幅。逐句写出你的 LinkedIn 总结,一周内把它变成对自己最好的描述。以展示可量化的成就和进步的方式更新你的经历部分。如果你对 LinkedIn 感到不舒服(像我一样),看看这个关于建立卓越的 LinkedIn 档案的视频。
下次你在培训 XGBoost 回归器时,花点时间更新你的简历。我确信你一直在做一些很酷的项目,是时候把它们作为一个很好的总结了。这对于没有太多经验的新手来说尤其重要。有很多制作简历的好方法,但我是用 Terence Kuo 的模板制作的,他用这个模板去面试 FAANG 公司。
在模型运行期间,访问你的 GitHub 帐户(是时候了,因为你已经…几个月没有访问它了……).可悲的是,这是许多数据科学家的情况,尤其是初学者。我们不写太多的产品代码,也不做软件工程,所以我们的 GitHub 档案就闲置在那里,我们的贡献图看起来不像死海那样无色。然而,由马丁·海因茨撰写的这篇很棒的文章展示了如何将你的 GitHub 主页转变成一份完整的作品集或简历。
马丁·海因茨的 GitHub 简介截图
你也可以更进一步,建立并托管你自己的作品集网站。拥有一个展示你的技能和项目的优秀作品集是任何写代码的人的普遍要求。你可以看看这个由 khu yen Tran撰写的教程,它教你如何建立一个简约的作品集网站。最棒的是,在代码运行时,您可以在短时间内处理它。
2️⃣.代码蠕虫
不读书就成不了大作家。这同样适用于编码——要熟练掌握它,你需要让自己接触别人写的代码。
到处都是简单易学的库,我们可能会产生一种错觉,以为自己擅长编码。但是如果不与他人比较,我们就无法真正了解自己到底有多糟糕。
在盯着笔记本标签的同时,开始阅读别人的作品。有很多平台和网站可以找到高质量的代码。我最喜欢的是阅读 Kaggle 内核,尤其是那些提交给每月表格操场竞赛的。由于比赛仅持续一个月,笔记本电脑往往会对当今数据科学中可行和不可行的内容进行最新概述。
作者截图
叉开笔记本,摆弄它们。你可能不会经常找到重大突破,但可以肯定的是,你会学到一些方便的技巧或新功能,让你的生活变得更轻松。
还有 Streamlit 的官方图库。那里贴的项目都是精挑细选的,和很多行业相关的 ML 和深度学习方面的高质量作品。您可以了解更多关于生产级 ML 和部署最佳实践的知识。
作者截图
就硬编码而言,我们都到了根本没有改进的地步。阅读他人的代码可以向我们展示与我们喜爱的包和框架的标准 API 进行交互的新颖方式。通过养成在项目工作时阅读代码的习惯,成为一名代码虫。
3️⃣.捐助者
不,这一节不是让你为开源包和框架做贡献而感到内疚。对于许多数据科学家和 ML 工程师,以及我自己来说,我知道在 GitHub 上提交 pull 请求和参与问题讨论是绝对可怕的。我不会向你鼓吹数据科学在多大程度上归功于开源社区,比如 Scikit-learn、Numpy、Pandas 等等。
这项活动是关于通过帮助他人来建立声誉和增长技能。你可以从小处着手,而不是像在 GitHub 上解决你最喜欢的包的问题那样高瞻远瞩。通过回答问答网站上的问题来刺激你的大脑,学习新的东西。
过滤 StackOverflow 上的问题,找出你最感兴趣的话题,开始写下你自己版本的答案。问题被回答了多少次并不重要,重要的是你把你的想法写了下来。写一些你知道的事情可以巩固你的知识,或者显示出你对那个话题有多不知道。回答一个问题只需要几分钟,你可以在训练 CNN 的时候随便涂鸦,一天做好几个问题。
还有,不要把自己仅仅局限于此。如果你有一堆 ML 理论和统计学知识,可以去查一下交叉验证。如果你是一名经验丰富的职业人士,并且能够在职业上帮助他人,那么就去主宰 Quora 空间吧。
无论你选择什么平台,都要让你的名字出现在那里。帮助并让别人了解你自己的品牌和想法。这能确保你在人群中脱颖而出,让你的简历更加精彩。
(顺便说一句,过去我告诉自己的最愚蠢的事情之一,我相信许多人仍然这样认为,就是没有什么好问题需要回答了。这简直太荒谬了,因为仅在 StackOverflow 上,每 14 秒就有一个新问题被提出来……)
4️⃣.准备
我们所有人都有很多东西要学。核心数学主题、监督学习算法、深度学习的深度世界——所有这些都让我们在试图获得该领域工作时非常忙碌。一旦我们开始找工作,我们意识到我们也需要为面试做准备。这意味着许多人熬夜学习算法,用 Python 和 SQL 解决实践问题,所有这些都是困难而有趣的事情。它们足以将大部分来之不易的数据科学知识赶出我们的大脑,因为我们太专注于找工作了。
但是,你不需要在找工作之前就开始这个过程。不要浪费时间,你可以登录 LeetCode 开始破解一个问题,就像你的机器在训练你的模型一样。这可以确保你在学习核心数据科学主题的同时,不会让你的大脑生锈,不会让你的解决问题的肌肉弯曲。
LeetCode 上的一些问题可能很难,所以你可能要花不止一节课来解决一个问题。一个有用的技巧是使用纸笔(老派)来勾画解决方案,而不是漫无目的地写代码。
每当你工作繁重时,养成这种习惯可以让你更早地为找工作做好准备。
5️⃣.从冰上拿东西
我确信我们都面临这个问题——你读到一篇文章或看到一条关于某个伟大的图书馆或主题的推文,然后对自己说:“我得看看这个!”。你把这个页面加入书签,然后惊奇地发现,在你最终访问它之前,它会在那里呆上几个月(或者永远不会)。
嗯,你可以马上改掉这个坏习惯。下次您进行超参数调优时,去看看您最近引入的新库。你在训练新模特吗?太好了,去看深度学习上保存的 YouTube 播放列表。
这是一种非常有效的方式来做你已经搁置了很长时间的事情。比如我就是这样了解到 Plotly 的,这几天我会认真看看,但是我知道我又会失望了(为什么?我将在以后的文章中谈到这一点)。我还计划看看 Kaggle 上现在非常流行的 3 个新库——CatBoost、LightGBM 和 Optuna。我还在 Twitter 上获得了一些关于深度学习的书签主题。
有一点是肯定的——我永远不会在我的常规时间表内做这些事情。我订阅了很棒的 MOOCs,并且要写这些文章。就我个人而言,我能赶上我的愿望清单的唯一方法是当我在等待事情完成的时候。
摘要
模型训练和超参数调优应该不会无聊。你可以通过简单的活动将漫长的等待变成高效的会议。我们今天讨论的这些可以帮助你提高你的技术技能和发展你的职业身份。数据科学世界竞争激烈,你应该利用一切机会投资自己。感谢您的阅读!
您可能也会感兴趣…
加速 MATLAB 代码的 5 个简单技巧
万一你“感觉需要速度”
“德国空军的台风 EF2000 欧洲战斗机起飞”。图像由猎鹰摄影和作者修改。来源 Flickr 。这张图片是在知识共享 署名-共享 2.0 通用许可下授权的。
我还记得当初加入航天行业,开始用 Matlab 编程时那种奇妙的感觉。在几秒钟内编写一个函数感觉太容易了,而用 FORTRAN 77 编写这个函数至少要花我两倍的时间。是的,你没看错,那种老派的编程语言。信不信由你,FORTRAN 现在仍然是许多 90 年代航空航天项目遗留工具的支柱。
随着时间的推移,这些遗留工具被抛弃,取而代之的是用现代编程语言编码的新工具集,这不是因为这些遗留工具毫无用处,而是因为对于新一代工程师来说,它们看起来像是僵硬的黑匣子。
在这些情况下,Matlab 可能是一个不错的选择,它有简单的语法、快速的学习曲线、上百个工具箱、令人难以置信的文档以及非常活跃的程序员社区。所以,这似乎是一个非常好的候选人,对不对?嗯,一如既往,这取决于对这些工具的具体要求,有时速度是必须的。
尽管 Matlab 对于原型和交互式分析非常有用,但在某些应用中,它似乎太慢了。
因此,如果你“觉得需要速度”,这里有五个建议来提高你的 MATLAB 代码的性能,让你感觉自己像一个“绝地程序员”。
1。用 jsystem 进行系统调用
如果你的 MATLAB 代码大量调用系统函数,那么性能下降可能会很明显,因为 Matlab 的 系统 函数会带来很大的开销。使用由基于 Java 的 avivrosenberg 创建的更快的 jsystem 函数可以绕过这一开销。
这对于 系统 功能来说是一个简单的插件,因为它具有相同的语法,并且还可以让您更加灵活地选择特定的 shell 来运行命令。
2。循环矩阵
计算机内存使用单维数组存储数据。默认情况下,Matlab 使用以列为主的数组布局存储这些元素。这意味着什么?简而言之,在列主顺序模式中,每一列的元素在内存中是连续的。相反,在以行为主的数组布局中(C、C++或 Python),内存中的连续元素对应于每一行的元素。
为了提高代码速度,以正确的顺序访问数组元素以最小化不连续元素之间的巨大跳跃是很重要的。
MATLAB 的黄金法则是总是将较快循环的索引分配给矩阵维数的最左边部分,将最慢的分配给最右边部分。这个规则也适用于张量。
例如,在下面的矩阵元素赋值中,当使用列优先顺序时,我们获得了接近 x6 的加速。这是一个很好的简单的技巧,可以添加到您的日常编程规则中。
3。1D 线性插补
无论您是为进行科学计算、股票市场分析还是统计而编写脚本,在某些时候您都需要利用插值函数来获取数据未涵盖的中间点的信息。
线性插值和双线性插值的比较一些 1 维和 2 维插值。黑色和红色/黄色/绿色/蓝色点分别对应于插值点和相邻样本。它们离地面的高度与它们的价值相对应”。图片来源:维基百科。
对于一维线性插补的具体情况,Matlab 有 interp1 函数。但是再一次的, interp1 在线性插值的很多应用中被证明是慢的。
使用 histc 函数定位 x 断点向量中最近个体的索引,可以提高interp 1的性能。这个巧妙的技巧已经应用在由何塞·m·米埃尔创建的interp1qr函数的核心中,实现了令人难以置信的 x11 性能提升,如以下脚本所示。
4。不要使用逻辑临时数组
很多时候,在处理大型稀疏数组时,我需要检查任何非零元素,如下例所示:
对于 Matlab 来说,计算这个操作似乎并不需要很多时间,但是如果你有一个大的数组,并且这个零测试在你的代码中重复多次,计算时间可能会开始增加。
当在一个数组中寻找任何非零元素时,你可能希望一旦找到第一个非零元素,Matlab 会立即停止搜索,对吗?但是当你使用像 a(:)~=0 这样的逻辑临时数组时,这并不是“立即”的。
当在这个表达式中使用逻辑临时数组时,Matlab 首先将数值转换为逻辑数组,这会产生很大的开销。
为了克服这种开销,我们可以利用数值可以作为逻辑值的事实。所以提示是在与零比较时不要使用临时逻辑数组。
在下一个例子中,您可以看到如何使用这个技巧来优化前面的简单代码,以获得令人难以置信的速度。
5。利用数学理论加速卷积
Matlab 在函数**【conv】**、 conv2、 和 convn 中卷积的实现依赖于移动窗口方法,使用自动多线程来提高性能(仅当 Matlab 尚未用标志“-singleCompThread”初始化时,有关如何使用此标志的更多信息请参见此处)。
尽管如此,如果我们应用原来的https://en.wikipedia.org/wiki/Convolution_theorem卷积定理,即【conv】*(a,b)=IFFT(FFT(a,N),我们可以加快卷积的计算速度。FFT(b,N)) ,最初由 Bruno Luong 提出的一个想法。
在以下示例中,我们需要记住对数据进行零填充,以获得可比较的结果:
在这个例子中,相对于【conv】函数,我们获得了令人难以置信的 x1100 加速。这真是一个很大的进步!
加速代码的附加参考
Rodney rodríguez Robles是一名航空航天工程师、自行车手、博客作者和尖端技术倡导者,在他小时候唯一梦想的航空航天行业中生活。他谈到了编码、航空史、火箭科学,以及所有让你一天比一天轻松的技术。
请在以下社交网络上查看我,我很乐意收到您的来信!——LinkedIn,Twitter。****
为机器学习项目寻找数据的 5 个简单问题
通过考虑哪些数据可用以及它满足哪些业务需求,找到启动机器学习项目所需的数据。
马库斯·温克勒在 Unsplash 上的照片
许多企业希望创新,机器学习经常作为一个建议出现;但是,如何找到试验机器学习项目所需的数据呢?以下是我发现在为新的机器学习项目寻找数据时有用的 5 个简单问题。
为 ML 项目寻找数据时要问的 5 个问题:
1)您工作的地方正在使用哪些企业系统?
企业系统的使用本身就意味着该工具提供了业务价值,并且数据可能存储在该系统中。即使是中小型公司通常也有一些他们使用的企业工具,这些系统通常在幕后用关系数据库构建。在许多情况下,原始数据可以通过相对简单的 SQL(结构查询语言)访问,或者通过能够提取所需数据的前端报告访问。
2)当高层领导查看数据以帮助决策时,这些数据首先来自哪里?
第一个问题的另一种表述方式是思考高层领导关心的信息,以及这些信息来自哪里。有可能它会把你带回到前面提到的企业系统,或者它会把你带到一个保存有用数据的电子表格。不管来源是什么(关系数据库、电子表格等),至少对于探索对业务重要的问题来说,你有了一个很好的起点。
3)围绕数据是否有某种质量保证流程?
如果答案是否定的,这可能不是放弃项目的直接原因——这仅仅意味着可能需要更多的前期数据清理。
4)哪些类型的流程是经常重复的?
业务通常是围绕一些经过迭代提炼的过程/产品建立的;这意味着可能有一些历史数据可以用于数据分析或机器学习项目。例如,我的大部分工作领域都是在维护行业,在那里预防性措施被例行执行以保持系统和设备运行良好。每个任务在一个工作指令中被捕获,该工作指令具有多条信息(或机器学习术语中的特征),例如数据、持续时间、成本、工时、工作类型等。即使只有几百个历史工单也可能是足够的数据来训练机器学习模型,以通过能够预测诸如哪些工单将过期之类的相关信息来优化维护程序。
5)能不能用财务数据?
金融数据是开始机器学习/数据分析项目的一个很好的地方,因为它通常满足上面提到的所有其他数据问题。首先,财务数据有许多内置的数据质量保证,因为其中的错误会对业务产生巨大的负面影响。此外,历史记录通常是准确的,带有时间戳,允许根据不同的用例对数据进行分组。利用财务数据也很可能满足高层领导投资的要求。
如果你正在寻找一个起点,这里有三个机器学习金融数据的潜在用例:
- 根据历史信息估计下一年的预算(回归)。
- 预测有用的类别,如延期付款或预算超支(分类)。
- 识别超出正常范围的支出模式(异常检测)。
回答这五个问题可以是确定机器学习项目从哪里开始的良好开端。作为一个额外的提示:无论你从事什么项目,都称之为机器学习“试点”项目,这样目标就仍然是创新和探索。当你开发这些早期阶段的机器学习计划时,这有助于为你自己、你的团队和你的上级设定现实的期望。即使你的团队中没有人在做机器学习,有了这 5 个问题来指导你,尝试新事物和创新的机会也不是那么遥不可及。
查看和组织熊猫数据框的 5 个简单技巧
实际上只有 5 件事我希望能早点知道
我喜欢在熊猫图书馆工作。随着我越来越多地使用它,我越来越欣赏它。
在这篇文章中,我将讲述 5 件多少有些随意的事情,当你查看和组织你的熊猫数据框时,它们会让你的生活变得更简单。没有什么真正突破性的东西,但有 5 件简单的事情,当我知道它们存在时,我很感激。
我最近在连接来自 3 个不同文件的数据时使用了所有这 5 种方法,所以我将提供这个一般过程的具体代码示例。
1.usecols
参数
有时,对于任何给定的任务,数据文件中的列数都比您感兴趣的要多。您可以读取整个文件:
作者提供的数据帧截图
或者您可以通过使用usecols
参数简单地读取您真正感兴趣的列:
作者提供的数据帧截图
如果你知道你想要什么,并且你不打算使用它的剩余部分,为什么要把东西加载到内存中?
2.快速重命名列
我不太喜欢我们在上面读到的数据帧中的最后两个列名。我不想键入这些,也不想记录大写和小写。我宁愿用小写字母写较短的列名。由于它们都是一个应用程序的标识符,我更希望它们有相似的格式。类似于应用商店 ID 的as_id
和 Google Play ID 的gp_id
。
我可以使用rename()
方法,输入一个字典,将原始列名映射到我想要的列名。
但是根据具体的上下文,我通常更喜欢做以下事情:
作者提供的数据帧截图
这两种方法都将产生上述具有所需列名的数据帧。但是将列名直接设置为一个列表,而不使用映射器,这还是令人满意的。
但是,当直接将列名设置为名称列表时,您需要记住两点:
- 您必须为每一列提供一个名称。
- 顺序问题。
如果你不小心,你很容易把这里的事情弄糟。使用rename()
方法,你不必担心那么多。
然而,df.columns =
方法在某些情况下特别有用。假设您将数据文件读入一个 Pandas 数据帧,您的列名如下所示:
作者提供的数据帧截图
在这些地方工作会很烦人。但是您可以使用下面的代码快速修复该问题,该代码将所有列名中的所有空格替换为下划线:
app_df.columns = [col.replace(' ', '_') for col in app_df.columns]
或者说你在你的文件中阅读,列名全部是大写字母(或者奇怪和不一致的大写字母)并且很难阅读。您可以使用以下命令将所有列名全部更改为小写:
app_df.columns = [col.lower() for col in app_df.columns]
有了这样的列表理解,您不必担心显式地为每一列提供名称,或者确保列名的顺序正确。当您使用columns
属性遍历原始列名时,这将自动发生。
3.更改要显示的最大列数
我是一个极度视觉化的思考者,我喜欢能够看到我正在处理的东西。我在工作时不断地检查数据帧,我经常希望能够一次看到所有可用的列。默认情况下,Pandas 只显示 20 列。
下面我们看到总共有 50 列的数据帧的前 10 列。中间的 30 列是隐藏的(用红色突出显示的省略号表示),如果我们向右滚动,就会看到最后 10 列。
作者提供的数据帧截图
如果我想知道所有列的名称,我可以简单地打印出df.columns
,但是那样我也不能看到每一列中的数据类型。因此,我将使用pd.options.display.max_columns = 50
一次性显示所有 50 列。
下面我们看到最初默认隐藏的 30 列中的第一部分:
作者提供的数据帧截图
您也可以通过调整pd.options.display.max_rows
来调整数据帧显示的最大行数。
4.用双括号对列进行切片和重新排序
你有没有遇到过这样的情况,当你处理一个数据帧时,你知道以后你只能处理列的子集?也许您更希望按照对您更有意义的特定顺序排列这些列的子集?
假设您有下面的数据帧,并且您只想要按顺序排列的app_id
、review
、rating
和date
列。
作者提供的数据帧截图
您可以使用双括号和所需列的列表从原始数据帧创建切片:
作者提供的数据帧截图
5.insert()方法
假设我们想要添加一个列来标识我们在上面制作的切片中的评论来自于 App Store。当我们将它与来自 Google Play 的评论连接起来时,这将非常有用,因为我们将知道每个评论来自哪里。为我们的应用商店切片这样做非常简单:
作者提供的数据帧截图
我们创建了一个充满 1 的列,以表明是的,这些评论来自 App Store,而不是 Google Play。以这种方式创建新列总是将它们附加到数据帧的末尾。对于我们刚刚创建的这个指标变量来说,这一切都很好,但我喜欢将相关的东西放在一起。接下来我想创建一个变量,让我知道每个评论字符串有多长。我真的希望这个新列位于review
和rating
列之间。
这可以通过insert()
方法来实现,该方法有三个参数:
- 新列的所需索引
- 新列的名称
- 用来填充新列的值
在我们的例子中,索引需要为 2,因为我希望新列紧接在第二列之后出现(和正常情况一样,索引从 0 开始)。我们将新列命名为rvw_len
。最后,我们将一个 lambda 函数映射到第三个参数。在这里,我们指定要用每行对应的review
字符串的长度来填充新列。
作者提供的数据帧截图
成功!我们的新专栏rvw_len
被插在其他所有内容的中间,放在一个对我来说有实际意义的地方。
概括一下
- 如果您只想从一个文件中读入一组特定的列,那么使用
usecols
参数和您实际需要的列名列表。 - 如果您想重命名所有列,请设置
df.columns = [list of desired column names]
。 - 想要看到比熊猫默认显示更多的列(或行)吗?用
pd.options.display.max_columns =
(或.max_rows
)调整显示选项。 - 想要一部分特定的列并以特定的顺序获取这些列吗?在数据框架上使用双括号,将所需列的列表放在里面。
- 如果您想在特定的索引处插入一个新列,而不是把它作为最后一列,请使用
insert()
方法。
我希望你能发现这些信息,并能把你学到的东西应用到你自己的工作中。感谢阅读!
增强机器学习实践的 5 个简单技巧
争取高质量的数据科学工作
自从我上高中后,我就有一种奇怪的执念,想把我所学的所有东西的关键概念都压缩在一页纸上。回过头来看,这可能是我懒惰的思维方式,以最少的工作量通过考试…但有趣的是,抽象努力也有助于更深层次地学习这些概念,并更长时间地记住它们。如今,当我教授机器学习时,我试图在两条平行的轨道上教授它:a)主要概念和 b)方法和理论细节,并确保我的学生可以通过相同概念的镜头来看待每一种新方法。最近我有机会读了吴恩达的《机器学习的渴望》,这似乎是他的版本,抽象了一些实用的 ML 概念,而没有进入任何公式或实现细节。虽然他们可以看到如此简单和明显,但作为一名 ML 工程师,我可以证明,忽视这些简单的技巧是 ML 研究在生产中失败的最常见原因之一,记住它们是区分优秀数据科学工作和平庸数据科学工作的关键。在这里,我想用一页纸总结一下我从安德鲁的书里学到的东西,分成 5 个重要的小贴士,所以不要再废话,让我们开始吧:
1- 你如何分割你的可用数据…非常重要!
图一。数据分割
E 即使你不是数据科学家,你也可能已经知道,为了衡量你的算法的泛化能力,你应该将你的可用数据分成训练集、开发(验证)集和测试集,你不应该将测试集用于任何模型优化/调整。听起来很明显,我见过很多从业者使用他们的测试集来手动优化超参数,然后报告与泛化性能相同的测试集上的最佳结果…你猜对了…这是作弊!当部署后模型性能下降时,他们仍然会感到惊讶。您应该确保不要将测试集用于任何类型的优化,包括手动超参数优化,这就是您的开发/验证集的用途。
还要注意从您的训练集到开发或测试集的任何数据泄漏。数据泄漏的一个愚蠢的原因可能是数据中存在重复的实例,这在训练集和测试集中都会出现。如果您通过连接来编译最终数据集,请特别小心。
在经典 ML 中,当数据集很小时,我们通常使用 60%-20%-20%进行训练-开发-测试分割,无论是在保留还是交叉验证设置中。吴恩达认为,如果数据集很大,你可以使用小得多的数据集进行开发和测试。然而,您的开发集应该足够大,以检测模型性能中有意义的变化,例如,在您的开发集中有 100 个示例,只允许您检测模型误差的 1%或更大的变化。
您的测试集应该具有与您的模型在部署时将遇到的实际群体相似的分布,并且应该足够大,以使您对您的模型性能估计有信心。
最后但同样重要的是,确保利用分层抽样,这可以通过使用 scikit-learn 或其他库中的内置函数轻松完成。假设您的可用数据是总体的无偏样本,分层抽样确保您在培训/开发/测试分割中分布无偏性。
因此,概括地说,为了拆分您的数据:a)确保您的数据拆分是完全隔离的,b)您的测试(和开发)集具有与您的目标人群相似的分布,c)使用训练集来优化模型参数,使用开发集来优化超参数,使用测试集来测量最终模型性能。
2 - 估计每个偏倚、方差和数据失配误差 分量,以便有效地调试你的模型
泛化误差=偏倚+方差+数据不匹配
Y 你可能已经听说过前两个组成部分:偏差误差是分类器缺乏学习生成数据的基础函数的能力,例如,当试图学习多项式函数生成的关系时,线性回归模型会有很高的偏差误差。方差误差类似于统计学中的采样误差,是由有限的样本大小引起的,当分类器对特定的训练样本学习得太好,结果失去了对看不见的数据的推广能力时,就会发生方差误差。这些误差中的每一个都有精确的统计定义,但粗略地说,偏差误差是在训练集上得到的误差,方差误差是从训练集到开发(验证)集的误差增量。
图二。三个误差源
第三个错误或数据不匹配错误来自于测试/推理数据的分布不同于训练和验证的事实。例如,您使用从互联网收集的数据来训练猫品种分类器,并使用它来部署猫分类器移动应用程序,您用于在部署之前验证您的模型的互联网猫图像和您在部署中看到的实际移动应用程序图像之间的分类性能差异是数据不匹配误差,即从开发集到您的推断/测试数据的误差增加。数据不匹配在不同的上下文中也有不同的名称,例如协变量偏移或模型漂移;虽然在定义这些术语时存在细微的差别,但总体思想是相同的,如果您的测试集和目标任务具有相似的分布,则您的测试集误差可以在实际的模型部署之前为您提供数据不匹配误差的准确估计。
3- 根据错误来源缩小调试选项的范围
图 3。按误差源划分的误差缓解策略
如果你的训练数据(偏差)误差很大,你可以尝试增加你的模型大小。对于神经网络,它可以转化为增加层或神经元的数量。如果开发集误差和训练集误差之间的差异很大(方差误差),可以尝试向训练集添加更多数据。为了有效地做到这一点,您可以使用错误分析来了解特征空间的哪些区域导致了最多的失败,并相应地确定数据收集的目标。虽然收集更多数据是减少方差误差的最佳策略,因为它不会影响偏差误差,但这并不总是可能的。减少方差误差的下一个最佳方法是正则化(例如,在神经网络中添加辍学或提前停止)。类似地,维度减少或特征选择可以导致更小的模型,这反过来减少了方差误差。请记住,正则化和降维也会导致偏差误差的增加。
基于从误差分析中获得的洞察力添加更多相关变量或特征可以改善偏差和方差误差。同样的事情也适用于改进模型的架构。
4- 决定是否将手工设计的功能/组件插入您的 ML 系统的关键因素是可用数据的数量
图 4。传统与端到端学习
拥有更多手工设计的特征或组件通常允许一个人工智能系统用更少的数据进行学习。领域知识补充了我们的算法从数据中获取的知识。当我们没有太多数据时,这种手工设计的知识就变得更加重要。另一方面,如果没有数据短缺,则可以应用端到端设计,从而绕过手动特征工程的需要。
5- 是否在培训中使用补充/扩充数据取决于您的模型容量
图 5。扩充/补充数据
补充数据是与你的目标任务一致但不完全来自同一分布的任何数据。假设对于卡特彼勒分类器移动应用程序,您有 10k 个用户上传的图像和 20k 个从互联网下载的图像。在这里,20k 互联网图像将是您的补充数据,如果您的模型很小,包括这些可能会占用您的模型的容量,并限制用户上传图像的可学性。然而,如果模型足够大,它可以学习两种分布,并利用两个集合之间的共性来巩固学习和更好地概括(这是元学习背后的主要思想)。虽然吴恩达的书中没有提到这一点,但我假设同样的推理适用于包括任何可以产生类似文本、图像或表格数据的数据增强技术(例如,对抗性数据增强)。如果你的分类器容量很小,那么包括那些增强的数据不能创造奇迹,但是当我们使用高容量深度学习时,它可以充当正则化器。
参考文献
机器学习向往由 http://www.mlyearning.org/()吴恩达著
用 Python 标记文本的 5 种简单方法
标记文本、大型语料库和不同语言的句子。
标记化是数据科学家在处理文本数据时遇到的常见任务。它包括将整个文本分割成小单元,也称为标记。大多数自然语言处理(NLP)项目都将标记化作为第一步,因为它是开发良好模型的基础,有助于更好地理解我们拥有的文本。
尽管 Python 中的标记化可以像编写.split()
一样简单,但这种方法在某些项目中可能不是最有效的。这就是为什么,在这篇文章中,我将展示 5 种方法来帮助你标记小文本、大语料库甚至用英语以外的语言写的文本。
**Table of Contents** 1\. [Simple tokenization with .split](#31ad)
2\. [Tokenization with NLTK](#33a2)
3\. [Convert a corpus to a vector of token counts with Count Vectorizer (sklearn)](#f5d2)
4\. [Tokenize text in different languages with spaCy](#d7d1)
5\. [Tokenization with Gensim](#dfd5)
注意:标记化是数据科学家在清理和准备数据时要做的许多工作之一。在下面的文章中,我写了一个指南来帮助你完成这些繁琐的任务。两篇文章的代码在我的Github上都有。
1.简单的标记化。使分离
正如我们之前提到的,这是在 Python 中执行标记化的最简单的方法。如果您键入.split()
,文本将在每个空格处分开。
在这个例子和接下来的例子中,我们将使用史蒂夫·乔布斯在苹果广告“思考不同”中讲述的一段文字。
text = “””Here’s to the crazy ones, the misfits, the rebels, the troublemakers, the round pegs in the square holes. The ones who see things differently — they’re not fond of rules. You can quote them, disagree with them, glorify or vilify them, but the only thing you can’t do is ignore them because they change things. They push the human race forward, and while some may see them as the crazy ones, we see genius, because the ones who are crazy enough to think
that they can change the world, are the ones who do.”””text.split()
如果我们编写上面的代码,我们将获得下面的输出。
['Here’s', 'to', 'the', 'crazy', 'ones,', 'the', 'misfits,', 'the', 'rebels,', 'the', 'troublemakers,', 'the', 'round', 'pegs', 'in', 'the', 'square', 'holes.', 'The', 'ones', 'who', 'see', 'things', 'differently', '—', 'they’re', 'not', 'fond', 'of', 'rules.', 'You', 'can', 'quote', 'them,', 'disagree', 'with', 'them,', 'glorify', 'or', 'vilify', 'them,', 'but', 'the', 'only', 'thing', 'you', 'can’t', 'do', 'is', 'ignore', 'them', 'because', 'they', 'change', 'things.', 'They', 'push', 'the', 'human', 'race', 'forward,', 'and', 'while', 'some', 'may', 'see', 'them', 'as', 'the', 'crazy', 'ones,', 'we', 'see', 'genius,', 'because', 'the', 'ones', 'who', 'are', 'crazy', 'enough', 'to', 'think', 'that', 'they', 'can', 'change', 'the', 'world,', 'are', 'the', 'ones', 'who', 'do.']
正如您在上面看到的,split()方法没有将标点符号视为单独的标记。这可能会改变您的项目结果。
2.用 NLTK 进行标记化
NLTK 代表自然语言工具包。这是一套用 Python 编写的英语统计自然语言处理的库和程序。
NLTK 包含一个名为tokenize
的模块,它带有一个word_tokenize()
方法,可以帮助我们将文本分割成标记。安装 NLTK 后,编写以下代码来标记文本。
from nltk.tokenize import word_tokenize
word_tokenize(text)
在这种情况下,默认输出与上面显示的.split
方法略有不同。
['Here', '’', 's', 'to', 'the', 'crazy', 'ones', ',', 'the', 'misfits', ',', 'the', 'rebels', ',', 'the', 'troublemakers', ',',
...]
在这种情况下,“*here ’ s”*中的撇号(')和“*ones”*中的逗号(,)被视为标记。
3.使用计数矢量器(sklearn)将语料库转换为令牌计数矢量
在处理大型语料库时,前面的方法变得不太有用,因为您需要以不同的方式表示标记。计数矢量器将帮助我们将一组文本文档转换成一个令牌计数矢量。最后,我们将得到文本数据的向量表示。
对于这个例子,我将在前面的文本中添加一段比尔·盖茨的语录来构建一个数据框架,作为语料库的一个例子。
import pandas as pd
texts = [
"""Here’s to the crazy ones, the misfits, the rebels, the troublemakers, the round pegs in the square holes. The ones who see things differently — they’re not fond of rules. You can quote them, disagree with them, glorify or vilify them, but the only thing you can’t do is ignore them because they change things. They push the human race forward, and while some may see them as the crazy ones, we see genius, because the ones who are crazy enough to think that they can change the world, are the ones who do.""" ,
'I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it.'
]df = pd.DataFrame({'author': ['jobs', 'gates'], 'text':texts})
现在,我们将使用Count Vectorizer
将df
数据帧中的这些文本转换成一个令牌计数向量。
如果您运行这段代码,您将得到一个框架,它计算一个单词在两个文本中被提及次数。
作者图片
当数据帧包含大型语料库时,这变得非常有用,因为它提供了具有被编码为整数值的单词的矩阵,这些整数值被用作机器学习算法中的输入。
计数矢量器可以有不同的参数,比如我们上面定义的stop_words
。但是,请记住,Count Vectorizer
使用的默认 regexp 选择包含 2 个或更多字母数字字符的标记(标点完全被忽略,总是被视为标记分隔符)
4.用 spaCy 标记不同语言的文本
当需要对用英语以外的语言编写的文本进行标记时,可以使用 spaCy。这是一个高级自然语言处理库,用 Python 和 Cython 编写,支持超过 65 种语言的标记化。
让我们将同样的史蒂夫·乔布斯文本标记出来,但现在翻译成西班牙语。
在这种情况下,我们从spacy.lang.es
导入了Spanish
,但是如果你使用的是英文文本,只需导入English from spacy.lang.en
在这里查看可用语言列表。
如果您运行这段代码,您将得到以下输出。
['Por', 'los', 'locos', '.', 'Los', 'marginados', '.', 'Los', 'rebeldes', '.', 'Los', 'problematicos', '.', '\n', 'Los', 'inadaptados', '.', 'Los', 'que', 'ven', 'las', 'cosas', 'de', 'una', 'manera', 'distinta', '.', 'A', 'los', 'que', 'no', 'les', 'gustan', '\n', 'las', 'reglas', '.', 'Y', 'a', 'los', 'que', 'no', 'respetan', 'el', '“', 'status', 'quo', '”', '.', 'Puedes', 'citarlos', ',', 'discrepar', 'de', 'ellos', ',', '\n', 'ensalzarlos', 'o', 'vilipendiarlos', '.', 'Pero', 'lo', 'que', 'no', 'puedes', 'hacer', 'es', 'ignorarlos', '…', 'Porque', 'ellos', '\n', 'cambian', 'las', 'cosas', ',', 'empujan', 'hacia', 'adelante', 'la', 'raza', 'humana', 'y', ',', 'aunque', 'algunos', 'puedan', '\n', 'considerarlos', 'locos', ',', 'nosotros', 'vemos', 'en', 'ellos', 'a', 'genios', '.', 'Porque', 'las', 'personas', 'que', 'están', '\n', 'lo', 'bastante', 'locas', 'como', 'para', 'creer', 'que', 'pueden', 'cambiar', 'el', 'mundo', ',', 'son', 'las', 'que', 'lo', 'logran', '.']
如您所见,spaCy 将标点符号视为单独的标记(甚至包括了新行\n
)。
如果你对西班牙语有所了解,你可能会注意到标记化与英语相似,所以你可能会想,“为什么每种语言都需要一个标记化器?
虽然对于像西班牙语和英语这样的语言,标记化就像用空格分隔一样简单,但是对于像汉语和日语这样的非浪漫语言,正字法可能没有空格来分隔“单词”或“标记”在这种情况下,像 spaCy 这样的库将会派上用场。 在这里你可以查看更多关于不同语言中标记化的重要性。
5.用 Gensim 进行标记化
Gensim 是一个用于无监督主题建模和自然语言处理的库,还包含一个标记器。一旦安装了 Gensim,标记文本就像编写下面的代码一样简单。
from gensim.utils import tokenize
list(tokenize(text))
这段代码的输出如下。
['Here', 's', 'to', 'the', 'crazy', 'ones', 'the', 'misfits', 'the', 'rebels', 'the', 'troublemakers', 'the', 'round', 'pegs', 'in', 'the', 'square', 'holes', 'The', 'ones', 'who', 'see', 'things', 'differently', 'they', 're', 'not', 'fond', 'of', 'rules', 'You', 'can', 'quote', 'them', 'disagree', 'with', 'them', 'glorify', 'or', 'vilify', 'them', 'but', 'the', 'only', 'thing', 'you', 'can', 't', 'do', 'is', 'ignore', 'them', 'because', 'they', 'change', 'things', 'They', 'push', 'the', 'human', 'race', 'forward', 'and', 'while', 'some', 'may', 'see', 'them', 'as', 'the', 'crazy', 'ones', 'we', 'see', 'genius', 'because', 'the', 'ones', 'who', 'are', 'crazy', 'enough', 'to', 'think', 'that', 'they', 'can', 'change', 'the', 'world', 'are', 'the', 'ones', 'who', 'do']
如您所见,Gensim 每次遇到标点符号时都会分裂,例如Here
、s
、can, t
摘要
令牌化带来了不同的挑战,但现在您知道了 5 种不同的应对方法。.split
方法是一个简单的标记器,它用空格分隔文本。NLTK 和 Gensim 做类似的工作,但是使用不同的标点规则。其他很好的选择是 spaCy,它提供了一个多语言标记器和 sklearn,帮助标记一个大型语料库。
与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)
如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑报名成为一名媒体成员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你使用我的链接注册,我会赚一小笔佣金,不需要你额外付费。
https://frank-andrade.medium.com/membership
5 个用 Python 解决的端到端数据科学项目
初级和高级 Python 数据科学项目,带源代码。
在 Unsplash 上由 Austin Distel 拍摄的照片
如果您已经研究数据科学有一段时间了,您可能知道为了学习数据科学,您需要学习数学、统计学和编程。这对任何对数据科学感兴趣的人来说都是一个好的开始,但是您知道如何更多地接触数据科学吗?
是有项目的!一个项目将帮助你把从数学、统计学和编程中学到的所有知识付诸实践。到目前为止,你可能已经单独看到了它们中的每一个,但是在你完成一个项目后,你在每个领域学到的概念将会更有意义。
在本文中,我列出了一些可以用 Python 完成的端到端数据科学项目。项目按难度排列,所以初学者项目在开头,高级项目在文章末尾。
注意:本文中列出的大多数项目都需要对 Python 有一定的了解。你至少应该知道诸如 Pandas、Numpy 和 Scikit-learn 等库的基础知识。我将留下每个项目的源代码以及每个项目中使用的库的指南。如果你还是 Python 初学者,我推荐你先从 基础 Python 项目开始 。
首先要做的事情——学习探索性数据分析
您将来要解决的大多数真实项目以及本文中列出的一些项目都需要您执行 EDA(探索性数据分析)。这一步在每个数据科学项目中都是必不可少的,因为它有助于您理解数据,并通过可视化技术获得有用的见解。
EDA 还有助于暴露数据中的意外结果和异常值。例如,直方图、箱线图和条形图等图表将帮助您识别异常值,以便您可以去除它们并执行更好的分析。
照片由 Myriam Jessier 在 Unsplash 上拍摄
我没有把 EDA 作为这个列表中的一个项目,因为它通常不是最终项目的目标,而是为了更好地执行分析而必须做的事情。要了解如何执行 EDA,请查看本指南,它将向您介绍 Python 中的数据可视化。在本指南中,您必须从包含足球运动员统计数据的数据集中获得洞察力。另外,查看另一本指南,学习 Python 中数据清理的最佳实践。第二个指南将向您展示如何使用您在第一个指南中学到的图来识别和处理异常值。
1.情感分析
这个列表的第一个项目是建立一个预测电影评论情绪的机器学习模型。情感分析是一种 NLP 技术,用于确定数据是积极的、消极的还是中性的。这对企业真的很有帮助,因为它有助于了解客户的总体意见。
对于这个项目,您将使用包含 50k 电影评论的 IMDB 数据集。有两个栏目(评论和感悟)。目标是建立最佳的机器学习模型,预测给定电影评论的情绪。为了使这个项目对初学者友好,你只需要预测一个电影评论是积极的还是消极的。这被称为二进制文本分类,因为只有两种可能的结果。
- 图书馆(包括指南):熊猫, Scikit-learn
- 源代码:Python 中的情感分析(文本分类)
第一个项目的特别之处在于,您将探索 scikit-learn 库,同时从头开始构建一个基本的机器学习模型。
检测项目
使用 Python 可以做许多“检测”项目。我将按照难度列出我用 Python 实现的那些,而不是仅仅列举一个。
2.假新闻检测
最适合初学者的检测项目大概就是假新闻检测了。网上到处都是假新闻。这在民众中造成了混乱和恐慌。这就是为什么识别信息的真实性很重要。幸运的是,我们可以使用 Python 来处理这个数据科学项目。
罗马卡夫在 Unsplash 上拍摄的照片
这个项目的目标是从假新闻中分离出真实的新闻。为此,我们将使用 sklearn 的工具,如 TfidfVectorizer 和 PassiveAggressiveClassifier。
3.信用卡欺诈检测
如果你想让这类项目更有挑战性,你可以试试信用卡欺诈检测。信用卡欺诈给消费者和公司都造成了数十亿美元的损失,同时欺诈者不断试图寻找新的方法来实施这些非法行为。这就是为什么欺诈检测系统对于银行最大限度地减少损失至关重要。
在此项目中,您应该从包含交易历史的数据集中分析客户的消费行为。位置等变量将帮助您识别欺诈交易。
照片由rupixen.com在 Unsplash 上拍摄
- 库(包含指南):熊猫、 Numpy 、 Matplolib 、 Scikit-learn 、机器学习算法 (XGBoost、随机森林、KNN、逻辑回归、SVM、决策树)
- 源代码:用 Python 进行机器学习的信用卡欺诈检测
4.聊天机器人
聊天机器人只是一个通过语音命令或文本聊天来模拟人类对话的程序。高级聊天机器人是使用人工智能构建的,用于手机上的大多数消息应用程序。
虽然创建像 Siri 和 Alexa 这样的语音助手过于复杂,但我们仍然可以使用 Python 和深度学习创建一个基本的聊天机器人。在这个项目中,你必须使用数据科学技术用数据集训练聊天机器人。随着这些聊天机器人处理更多的交互,它们的智能和准确性将会提高。
- 包:Keras,NLTK, Numpy
- 源代码:如何用 Python &深度学习在不到一个小时内创建一个聊天机器人
构建一个简单的聊天机器人会让你接触到各种有用的数据科学和编程技能
5.客户流失预测
客户流失率是客户停止与公司做生意的比率。这表示在给定时间段内停止订阅的订阅者的百分比。
这是一个测试您的数据科学技能的好项目。我甚至不得不在黑客马拉松中解决它!
这个项目的主要目标是对客户是否会流失进行分类。为此,您将使用包含银行客户财务数据的数据集。信用评分、任期、产品数量和估计工资等信息将用于构建此预测模型。
- 软件包:熊猫、 Matplolib 、 Scikit-learn 、机器学习算法 (XGBoost、随机森林、KNN、逻辑回归、SVM、决策树)
- 源代码:银行客户流失预测
这个项目和信用卡欺诈检测项目是本文列出的最完整的数据科学项目。它包括探索性数据分析、特征工程、数据准备、模型拟合和模型选择。
就是这样!希望在完成所有这些项目后,你能更好地理解到目前为止你所学到的关于数据科学的一切。
与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)
我希望 Julia 的 5 个引人入胜的特性是用 Python 编写的
意见
我非常喜欢 Julia 编程语言的一些特性,我希望它们是 Python 语言。
(src =https://pixabay.com/images/id-3461405/
介绍
每当程序员使用多种语言时,他们开始看到某些语言相对于其他语言的优势和权衡。我最喜欢用的编程语言之一是 Julia 编程语言。编程语言中有太多的事情做得非常好,以至于每当我对 Julia 使用不同的语言时,我都会错过。我有一篇关于我为什么如此爱朱莉娅的文章,以及我个人与这篇文章中所写语言的关系:
当然,鉴于我主要从事数据科学工作,这个应用程序的另一个流行选择是 Python 编程语言。我也喜欢这种语言,我也认为它有很多很棒的特性。这些特性中的一些肯定会激发出一些伟大的 Julia 代码,但是今天我想把重点放在相反的方面。今天我想展示一些我最喜欢的 Julia 语言的特性,我认为 Python 可以从中受益。鉴于 Python 语言,我认为其中的一些功能很有意义,然而其他功能只是我喜欢的功能,显然不是 Python 方向的一部分。本文还有一个笔记本,以防您希望看到使用的 Julia 代码(真的不多):
№1:健壮的类型系统
所有程序员都喜欢 Julia 的一点是它健壮的类型系统。就我个人的喜好而言,谈到打字的力量,朱莉娅非常适合。也就是说,就类型的强度而言,Python 处于相同的领域,尽管在类型改变方面可能更含蓄一些。也就是说,我认为 Julia 的类型层次和基本数据类型远远优于 Python。
这并不是说 Python 的类型系统不健壮,但是确实有改进的余地。当涉及到数值类型和可迭代对象的继承时,尤其如此。例如,字符串应该是数组的子类型,因为最终字符串本质上只是一个字符数组。当然,这只是一个具体的例子,但是我认为类型系统可以使用许多小的调整。在 Julia 中,我们有一个很棒的东西叫做抽象类型,它有助于创建类型层次,而抽象类型在 Python 中很少使用——这方面的部分问题也意味着每个子类都有一个支持的子初始化。
2 号:方法错误
我不喜欢 Python 的一点是缺少方法错误。为了传达为什么我认为 Python 需要方法错误,以及为什么在当前的迭代中没有方法错误是令人困惑的,我将给出一个 Julian 的例子。假设我们用 Python 和 Julia 编写了相同的函数:
function double(x::Int64) x * 2enddef double(x : int):
return(x * 2)
在 Julian 的例子中,我们不能通过这个方法传递除了整数以外的任何值。这意味着,例如,一个字符串将返回一个方法错误。
double("Hello")MethodError: no method matching double(::String)
Closest candidates are:
double(::Int64) at In[1]:1
Stacktrace:
[1] top-level scope
@ In[3]:1
[2] eval
@ ./boot.jl:360 [inlined]
[3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1116
现在让我们在我的 Python REPL 中尝试同样的事情:
>>> double("Hello")'HelloHello'
这是双函数的预期行为吗?当然,没有人会认为这是一个字符串——但是让我们考虑一下,我们使用了一个不能和*操作符一起使用的类型。
d = {"H" : [5, 10, 15]}>>> double(d)Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 2, in doubleTypeError: unsupported operand type(s) for *: 'dict' and 'int'>>>
让我们假设我没有编写这个函数——我导入了一些软件,现在我看到了这个错误。尽管我指定了这个函数只能将这种类型作为参数使用,但是现在我们遇到了一个问题,有些人需要参考文档,或者 google this TypeError,因为他们甚至不知道这是在哪里发生的。即使在编写了一行函数之后,我们也知道没有办法找出这个错误发生在函数的什么地方。将此与 Julia 方法的错误输出进行比较:
MethodError: no method matching double(::String)
Closest candidates are:
double(::Int64) at In[1]:1
Stacktrace:
[1] top-level scope
@ In[3]:1
[2] eval
@ ./boot.jl:360 [inlined]
[3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1116
我们得到的第一件事是 double 函数不接受字符串作为参数,然后这后面是一个修正—double 应该与我们指定的整数一起使用。我只是觉得指定参数的类型应该比文档元数据更有用。我认为诊断为方法提供错误类型的问题是很难理解的。即使在 Julia 中使用了错误的方法,输出也可以为您提供足够的提示,让您在许多情况下正确使用该方法。比如,插页!()方法:
insert!(5)MethodError: no method matching insert!(::Int64)
Closest candidates are:insert!(::Vector{T}, ::Integer, ::Any) where T at array.jl:1317
insert!(::BitVector, ::Integer, ::Any) at bitarray.jl:887
最接近的候选列表的第一行告诉我们所有我们需要知道的关于这个方法的信息。在函数式风格中,变异类型总是先出现,我们的抽象向量,然后是整数,然后是 any。既然我们可以假设向量中的值的时间基本上可以是任何值,那么很可能是::Any。考虑到数组索引总是整数,这可能是整数。
№3:可迭代运算符
在 Python 中,对可迭代对象进行基本的数学运算要困难得多。在大多数情况下,人们会希望为此导入 NumPy。然而,像 R 语言一样,Julia 支持元素操作符。这些操作符做两件事:
- 提供一种简单的方法来执行一维数组和多维数组的运算。
- 允许人们从运算符中快速区分出正在对两个可迭代对象执行运算。
这两件事都很重要,而且每次想做这个算术的时候就跳进一个循环肯定不是最酷的事情。虽然我完全理解元素级乘法有一些可用的特性,但我认为操作符是解决这个问题的更充分的方法。
№4:(当然)多重调度
我们都看到了这一天的到来…
我喜欢多重派遣。
需要澄清的是,我从来没有说过地球上的每一种编程语言都需要多重调度。然而,对于 Julia 编程来说,我更喜欢在给定的编程语言中使用多重分派。这只是一种不碍事的流畅的编程方式,这也是我真正喜欢它的地方。它用参数多态在类型和方法之间建立了更强的关系。
最终,使编程语言独一无二的是它各自的范例和方法与语言交互的方式。Pythonic 式的做事方式当然有好处。类很牛逼,它们的子函数也很牛逼。我认为面向对象编程是在类型和它们各自的功能之间建立关系的一个很好的方法。也就是说,Python 根本不是纯粹的面向对象编程语言。如果是这样的话,我认为这种语言不太可能在数据科学中如此流行。
也就是说,Python 更具声明性的“方法到类型”方面(方法是在类的范围之外定义的)与类型和它们的函数产生了更大的分离。这是因为正如我之前详细讨论的,没有方法错误。也就是说,将一个类型与一个函数联系起来的唯一东西是该函数中的算法,也许还有参数类型的转换。然而,如前所述,参数的强制转换除了作为代码的文档之外,实际上没有任何作用。多重分派实际上是一个过度强大的编程泛型,如果你想了解更多,我有一篇关于它的文章,你可以在这里阅读:
№5:扩展底座
我真正喜欢 Julia 的最后一个特性是从语言基础上扩展方法的能力。在 Julia 中,语言基础中的许多函数在整个生态系统中都有使用。当涉及到编写软件文档时,这确实会产生很多问题,因为有时人们必须编写一个基本函数调用的每个例子——通常有很多,我也认为这使得很多事情更容易假设。
例如,我想过滤一个数据框。朱利安基地附带一个过滤器!()函数,用于数组和其他基本数据结构,以删除某些值。为了在数据帧中实现这一点,我们进行了本质上完全相同的调用——这都是因为 Julia 具有扩展函数的能力。我认为这很棒,因为它在 Julia 包之间创造了很多一致性。
也就是说,这类事情肯定至少部分依赖于多重调度。然而,让我们考虑一下 Python 操作符的使用。我们可以把两个整数加在一起,当然没问题:
5 + 5
但是我们也可以添加其他数字,比如布尔和浮点数:
5.5 + False
不仅如此,我们还可以将这些运算符用于字符串。这意味着这种方法适用于所有这些类型——就像多重分派一样。假设这些操作与方法的行为方式相同可能有点像 Julian,但不管怎样,我们在这里看到了一个实现,它揭示了这种多态性在某种程度上已经存在于 Python 中。
结论
我真的很喜欢这两种语言,尽管我更喜欢 Julia 中的许多特性。也就是说,我认为两种语言都可以从对方那里学到一些东西,在某些方面都有所提高。这并不是说这些会发生或不会发生,但我认为大多数人不太可能会看到 Python 语言。这里我认为唯一相对紧迫的问题是方法错误,因为我真的认为这是 Python 中所缺少的。
也就是说,我认为这显示了不同的语言有不同的方面,一些人可能比其他人更喜欢。Julia 处理类型和多重分派的方式当然有很多缺点,Python 处理类型的方式也是如此。非常感谢您的阅读,它对我来说真的意味着整个世界,我希望这是一个有趣的视角,让我们看看 Python 可以从 Julia 身上学到的一些潜在的变化和教训。
吴恩达有效规划人工智能项目的五步框架
您将学习最基本的人工智能范围框架,它将节省您的时间、金钱和精力
由于曾在一家人工智能初创公司工作,我在职业生涯的早期就接触到了人工智能项目的范围界定和架构设计。我现在是一名高级数据科学家,在过去三年里参与了许多人工智能项目。
即使是现在,我觉得我参与的每个新项目都有它的学习曲线。过去,作为一个团队,我们犯了许多代价高昂的错误。耗费我们时间、金钱和精力的错误。我们吸取了教训。这些是你在任何学位课程或在线课程中找不到的课程。你需要进入这个行业去面对他们。
这就是为什么当我看到像吴恩达这样的人,他是在多个行业采用人工智能的先驱,根据他的经验分享他的知识,我会虔诚地倾听。我研究它们。我收养他们。你也应该。它们是无价的宝石。
这篇文章的灵感来自于吴恩达分享的一个关于如何有效规划人工智能项目的框架。让我们一步一步走进吴教授的脑海。
步骤 1:识别业务问题(不是人工智能问题)
这对我打击很大。
当一个新客户在我们早期接近我们时,我们经常被要求提出商业建议,以帮助他们采用人工智能并转变他们的业务运营。我们过去常常从技术的角度来看待这个问题:哪个人工智能问题适用于这个业务?大错特错。
你最好把生意放在第一位。你首先需要确定一个值得解决的问题。它是否能被解决可以稍后再处理,但是在这一点上,你的注意力需要完全集中在业务上,它是优先事项。
最好的方法是让领域专家参与进来。每个企业都有在各自行业拥有多年经验的专家。让他们参与进来,不管是调查、采访还是闲聊,但是要听取他们的意见。这是识别问题的最好方法。
一旦你手头有了业务问题,接下来你会做什么?
第二步:集体讨论人工智能解决方案
我们都有这样或那样的偏见。我们有自己喜欢的算法,熟悉的解决方案。有时我们相信最新的人工智能研究是正确的。这也可以很好地解决。
这种方法的问题是你可能会错过一个更好的解决方案。这是一个经典的探索-剥削问题。问题是,相对于利用我们已经知道的东西,我们探索了多少。
在我目前的工作中,我们找到了这个问题的答案,我们称之为“解决问题”的会议。我们坐在一起一周左右,集体讨论手头问题的多种解决方案。在这个阶段没有正确或错误的解决方案,欢迎每个人的意见。
经过几个小时的反复讨论,只有几个潜在的解决方案浮现出来,并传递到框架的下一步。
第三步:评估潜在解决方案的可行性和价值
就性能而言,最佳解决方案可能不是整体最佳解决方案。我从经验中学到了这一点,这一课将贯穿我的职业生涯。
人工智能解决方案在所需的专业知识、计算能力和实施成本方面都很昂贵。现阶段需要对少数可能的解决方案进行深入分析。
我们可以通过咨询领域专家、分析竞争对手的做法或实施概念验证来做到这一点。概念验证对我们很有效,我们测试了解决方案,同时获得了企业的信任。
基于可行性研究,您已经完成了手头问题的解决方案蓝图。下一步是什么?
第四步:确定里程碑
当你声称“但是它在测试集上运行良好”时,没有人会接受它
我们需要确定开发团队在整个项目中应该瞄准的度量标准。棘手的部分是,作为数据科学家和机器学习工程师,我们对机器学习指标如准确度、精确度、召回率等感到满意。虽然满足这些里程碑是必不可少的,但是定义一些业务指标也是至关重要的。
业务指标的一些例子是产生的收入;客户赢回来,用户参与度,市场渗透率等。我们可以将每个项目与一些对业务很重要的度量标准联系起来,实现这些将获得业务的信心。
企业将意识到通过人工智能项目产生的价值,当你预先设定这些里程碑时,没有怀疑的余地。我们做得很好。还有最后一步。
第五步:资源预算
每个人都很开心,直到他们看了一眼预算。但是当然,任何事情都是有代价的。
你可能会惊讶地听到,大多数人工智能项目失败的原因是无法负担的资源成本。成功开发、部署和维护人工智能项目所需的资源是值得思考的。
从将项目成功交付给企业所需的时间表、数据、开发团队、计算能力和支持系统开始。一旦你列出了它们,给每项资源分配一个成本,并为这些资源创建一个预算。
额外收获:让利益相关者致力于计划
请在已经决定的事情上签字。
这个简单的步骤引入了各方的承诺,并设定了项目的长期预期。这一承诺对于成功执行迄今为止的计划至关重要。
你总是可以在范围上迭代,以防某些事情需要改变和沟通。
最后的想法
VentureBeat 的 Transform 2019 预测 87%的 AI 项目失败,永远无法投入生产。没有人工智能项目的实际范围是造成这种情况的主要原因之一。
更糟糕的是,我们无法通过在线课程或硕士学位学习这样的框架。这些我们只能通过行业内的经验来了解。吴恩达是人工智能行业的先驱之一,他提出了有效规划人工智能项目的 5 步框架。我们详细讨论了这些关键步骤:
- 识别业务问题。
- 头脑风暴人工智能解决方案
- 评估潜在解决方案的可行性和价值
- 确定里程碑
- 资源预算
和你一样,我也在学习。我曾经是个初学者,也犯过不少错误。更重要的是把这些当作学习经历,在我们的职业生涯中继续前进。继续学习,我相信你也会成功的。
要获得更多关于进入数据科学、令人兴奋的合作和指导的有用见解,请考虑加入我的电子邮件好友私人名单。
为您的数据科学项目选择优秀数据可视化的 5 个步骤
帮助您开始的提示和资源
从医疗保健结果和商业销售分析到商业应用和体育联盟排名,数据的可视化呈现已经成为我们日常生活中的一个传统。
在整理、解释和分析之后,你的可视化模型必须是专业和独特的。此外,对于人类大脑来说,理解视觉和图案比理解大量的文本和图形更容易。
想象是我最喜欢的工作部分。数据可视化通过使用图表、信息图、图形、散点图等等来传达冗长而庞大的原始数据。并非所有的受众都是技术或数据导向型的,因此,以简单的视觉方式展示数据将在很大程度上提高沟通和分析效率。
现代数据科学技术使得可视化比以往任何时候都更容易实现。但是,您需要对某些概念、模型和数据可视化有全面的了解。
有了大量的可视化选项,人们很容易偏离可视化的主要目的——将数字转换成美丽的短篇故事。
这个过程可能是乏味和令人困惑的,它发生在每个人身上。本文将简化整个过程,并帮助您为项目选择完美的数据可视化。
1。理解你项目的目的。
一般来说,对于任何项目——无论是技术性的还是非技术性的——总有一个目的是为特定的问题提供解决方案。
你想解决哪些挑战?你的概念是通用的还是独特的?您展示的信息将如何为您的组织提供价值?你的目标是长期的还是短期的?
在我开始任何项目之前,我确保我对这些问题提供了清晰的答案,把它们打下来,当我觉得我偏离了轨道时做参考。
几个月前,我参加了一个数据会议,基本上是一个年轻数据科学家的聚会,他们愿意分享关于行业最新趋势和技术的知识。一位发言者介绍了云数据管理在大规模网络攻击世界中的作用。
这是一个必要的话题,他抓住了这一点,用统计数据和数字来支持,但不幸的是,他使用的图表和信息图与所代表的数据并不一致。
原因?对项目的不正确解释。
数据越多并不总是越好,您需要的是针对正确问题的正确数据。
数据可视化是将数据转化为每个人都能有效理解的有意义的故事。技术内外。在使用数据可视化时,提前了解数据将提高您的速度和准确性。
2。了解你的受众。
根据我的观察,演讲者在大会上展示的数据没有与会者预期的那么好。除了没有注意到某些目标,这些可视化看起来就像是人口统计的 8 级图表。
不要误解我的意思,图表很棒,但如果你要向一群熟练的数据科学家展示,你需要让你的数据看起来尽可能专业。
你选择的视觉化技术应该与你的潜在观众沟通。它们应该能够与你的数据完美关联。他们的熟练程度如何?他们是否以技术为导向,足以理解你的可视化?
人们以不同的方式看待信息,研究你的受众,并在你的项目中思考他们的反应。
如果你分析交易的目的是向华尔街的金融大亨们展示你的结果,你会希望使你的可视化技术比向一年级金融学生展示时更专业。
3。准备并理解您正在处理的数据的规范。
数据通常以各种形式呈现。虽然,数据的主要类型是顺序的、定性的、分类的和名义的。您必须了解项目中数据集的唯一性。大多数数据可视化项目完全由数据集的质量、标准和多样性支持。
理解您的数据类型将会简化和消除一些可视化类型。
例如,对于分类数据,使用折线图不是一个好主意。地理数据也是如此,地图和柱形图因其直接讲述故事的效率而广受青睐。
这一步从关键的数据收集、假设和数据检查开始,以发现关键信息的洞察力。我们可以使用各种工具来理解数据集——取决于规模和模型。
这一步非常微妙,因此请记住以下步骤:
- 定义数据的目标。
- 限制并将值转换为单位。
- 寻找错误并识别关键变量。
- 利用编程语言进行高级分析。
4。选择合适的图表类型。
数据可视化的关键概念是以尽可能简单的形式传达信息,以帮助轻松有效地理解。图表是用来解释和分解变量的,选择正确的图表将决定你在展示数据时的专业性。
有了大量的图表和可视化选项,需要精确地利用其中一个的全部潜力。
为了更好地理解,让我们回顾一下最常见的图表、它们的使用情形以及它们的缺点:
a .条形图
中学时大家都画过条形图。虽然简单,但它是最常用的数据可视化模式。通常用于区分两个或多个变量随时间的变化。
然而,条形图的主要缺点是过载。如果您正在处理多个数据点,条形图可能不合适。
避免用大量的变量填充你的图表——你的图表不应该超过 10 根棒线。从数据线查看这个例子。
b .饼状图
好吧,多年来,饼状图声名狼藉,专家进行的研究证明饼状图是错误的,并且经常提供误导性的分析。
但是,在某些项目中,饼图在数据可视化中可以派上用场,尤其是在处理小型数据集和特定变量时。
c .面积图
大多数数据科学家通常认为面积图和折线图是一样的。事实是,这两者之间存在一些差异。虽然它们都说明了时间序列中的连续数据集,但它们相似但不相同。
面积图在显示部分与整体的关系时最有效。例如,销售代表对公司月收入的贡献。
d .散点图
就我个人而言,在处理大型数据集时,我脑海中浮现的是散点图,尤其是当我的变量成对出现时——一个因变量(y 轴)和一个自变量(x 轴)。
为了最大限度地发挥散点图的潜力,您需要确保数据集中的变量和值是相关的。
5。选择功能强大的可视化软件。
有大量的数据可视化工具,您的选择很大程度上取决于您的目标、项目类型、规模和分析需求。
现代数据科学改变了分析师的工作方式,80%的数据可视化项目不再需要复杂的数学分析。
“十年前,我们肯定会看到专门从事商业智能或数据或分析的人,这是他们的工作,其他人都应该向这些人发出请求,并等待报告。”
— 埃莉·菲尔兹,Tableau 产品开发高级副总裁。
从那以后,事情发生了变化。大多数可视化软件都有一个友好的拖放界面,只要对工具的概念有一个基本的理解,你就可以开始了。
以下是一些顶级的数据可视化工具:
- 画面。(推荐)
- 旁观者。
- IBM Cognos Analytics 。
- 微软 Power Bi 。
适用外卖。
老实说,我以前也有过数据可视化的困扰。在我的整个学习过程中,我一直在自学,但我意识到,要获得对数据可视化的高质量理解,我需要寻求业内顶级专业人士的培训。永远不要停止学习。
在选择使用哪种图表或视觉类型之前,请了解项目的目的,了解您的受众,准备您的数据集,并选择具有高质量功能的可视化工具。你需要一个向导,写下你的目标,并确保你坚持这些目标。
避免弄乱你的图表,保持你的视觉效果简单易懂。在数据可视化中,保持简单总是最好的。
有效重构研究论文的 5 个步骤
如何重新构建你自己的研究论文变体并开发众多项目
安妮·斯普拉特在 Unsplash 上的照片
学习人工智能和数据科学有几种方法。大多数复杂的概念都包含在网站、博客、文章和其他资源中。然而,任何特定主题的大部分细节通常都包含在一篇研究论文中的方法论的结构良好的理论实现中。
当掌握与机器学习和深度学习相关的新概念时,理解任何概念的最突出方式是有效地阅读、理解、解释和实现特定概念主题的特定研究论文。大多数复杂的深度学习研究,如生成对抗网络(GANs)、变分自动编码器(VAEs)、神经网络和其他类似的有趣主题,都需要专注和专注,以根据需要进行适应和重新创建。
对于大多数初学者来说,从零开始实现研究论文的一个不幸的方面是,他们不能从零开始重建它,并以最简洁的方式开发模型或项目。有时没有足够的关于架构构建的细节,或者它们不可解释,或者许多其他原因。
在本文中,我们将客观地找出以最有效的方式重建和复制高水平、先进的研究论文所需的最佳方法。让我们开始寻找成功解决这一任务的最佳步骤,以实现可能的最佳结果。
1.了解背景:
破解任何复杂研究论文代码的第一步是理解概念解释。解码摘要和分解他们的创新研究的介绍的大部分元素为你提供了一条更窄的路径来关注具体的改进主题,因为大多数研究都是在以前的工作基础上改进的。
一旦你对摘要有了一个简要的概念,我建议浏览并快速阅读整篇研究论文。这样做将有助于你衡量对预期的理解,也有助于你决定对你的特定方法来说最好的深度学习框架可能是什么。选择你觉得最适合用来解决特定问题的深度学习库。
你可以在 TensorFlow 或 PyTorch 的两个推荐的深度学习库中选择一个来开始编码部分。下面是一些库的起始代码,以便为下面的内容导入。
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
或者
**import** torch
**import** torchvision
**import** torchvision.transforms **as** transforms
我们将在接下来的章节中使用一些张量流编码。
2.发现以前的作品:
马文·迈耶在 Unsplash 上的照片
任何新发表的研究论文最好的部分是它包含的大量参考资料和其他参考链接。大多数研究论文在某种程度上利用以前开发的概念来解释自己的新思想。大多数情况下,大多数研究论文都有一个完整的部分专门介绍他们从中汲取灵感的来源以及他们在当前工作中使用的不同类型的预先存在的概念。
从提供的外部参考来看,研究这些已经存在的方法是一个很棒的想法。你可能已经对现有的想法有了线索,或者对之前发现的话题有了更多的了解。因此,你不仅学习和适应当前的研究,而且你也习惯了许多以前的工作,这对你计划发现的未来项目会派上用场。
一个有用的例子是,当您试图完成一个复杂的神经网络架构时,可能会有几个先前的工作包含在新创建的模型中。当前的研究论文可能会使用以前建立的模型(如 VGG-16 或 RESNET-50)、现有损失(如均方损失)、独特的激活函数(如参数 ReLU)或优化器的迁移学习元素。利用这些要素,你可以对如何成功完成研究论文的重构有一个简要的想法。
3.适应模型架构:
下一步是开始熟悉研究报告中指定的架构构建。更有可能的是,大多数研究论文将有一个特定的架构构建,他们正在寻找解释任务,以实现最佳结果。该架构可能是从以前的代码中派生出来的,完全是从零开始构建的,或者是这两种方法的混合。下面是 TensorFlow 中构建的一个示例架构。
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
下面的体系结构代表了一个完全卷积神经网络类型的体系结构。最好习惯这样的构建,因为它们将在大多数研究工作中使用。学习一些最好的参数,如激活函数、损失函数、优化器和其他变量,插入到这些模型构建中,因为它们中的大多数都有某种相似性。
4.试着在所学知识的帮助下实施:
一旦你适应了模型架构,看看样本例子或者研究论文试图解决的特定项目。借助所获得的知识,尝试实现您自己的建筑构建变体,并有效地再现通过研究论文完成的结果。
尝试使用其他建模技术(如迁移学习模型)的构造来检查结果并相应地验证它们。通过这种方式,你可以了解当前研究论文的真实性,并获得完成特定任务的其他训练方法的知识。因此,最好实现三个模型,即一个版本的研究,你自己的第二个变体,以及其他现有的解决问题的方法。
5.参考论文的外部链接或其他重构:
即使在仔细阅读了几遍研究论文,并认为自己已经理解了解决特定问题所需的大部分基本概念之后,仍然很有可能无法按照预期再现结果。这种经历很常见,因为即使是该领域的专业专家有时也很难极其精确地获得特定研究论文的复杂细节。
在这种时候,最好获得一些外部帮助。如果有博客、文章或视频非常详细地介绍了特定的主题,强烈建议开发人员查看这些示例参考来完成特定的任务。像有代码的论文这样的网站是一个很好的选择,可以为研究论文的重建提供一些编程参考。对于类似的网站,我强烈建议查看我以前关于十大最佳免费资源的文章,通过下面提供的链接了解更多关于数据科学和机器学习的信息。
</10-best-free-websites-to-learn-more-about-data-science-and-machine-learning-f2c6d7387b8d>
结论:
分析研究论文是深度学习最关键的方面之一。研究论文包含大量有用的信息,对新兴数据科学家的成长具有重要意义。随着这些科学研究论文的有效重建,大多数理论和实践概念变得清晰和翔实,因为你能够有效地掌握与特定主题或领域相关的大多数知识。
本文中讨论的许多要点应该能够帮助大多数读者至少在大多数研究论文中获得一个基线解决方案。有了对抽象概念的正确的直觉理解,你就可以选择你想要的解决问题的最佳框架。阅读并理解特定主题的一些最佳作品,并相应地实现所需的架构。
如果你想在我的文章发表后第一时间得到通知,请点击下面的链接订阅邮件推荐。如果你希望支持其他作者和我,请订阅下面的链接。
https://bharath-k1297.medium.com/membership
看看我的其他一些文章,你可能会喜欢读!
</5-best-python-projects-with-codes-that-you-can-complete-within-an-hour-fb112e15ef44>
谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!
获得第一份数据科学工作的 5 个步骤
这可能很难,但并非不可能。
Clem Onojeghuo 在 Unsplash 拍摄的照片
在当今世界,无论你在哪个领域,找工作不仅是一件困难的事情,而且似乎是不可能的。当我们谈到在技术行业找工作时,这种感觉只会更加强烈。除了疫情给劳动力带来的复杂性之外,在科技行业找工作还面临着供需不匹配的额外挑战。
近年来,许多人将技术,或者更准确地说,数据科学作为未来的职业选择,因为他们可以从中获得许多好处。工资相当高,工作选择非常广泛,找到远程技术职位的机会比其他工作领域高。
但是,尽管如此,如果你明智地出牌,你仍然可以得到你梦想中的工作。我认为求职是每个人都需要发展和练习的技能,就像他们发展和练习技术技能一样。
在这篇文章中,我们将介绍一些你需要经历的步骤,以提高你获得梦想工作的机会。这些步骤中的大部分可能看起来显而易见且符合逻辑,但掌握它们需要练习,更重要的是耐心。
步骤 1:确保您有坚实的数据科学基础
不管它有多宽,每个领域都有它的基础,所有高级主题都是建立在基础之上的。所以,你需要确保的第一件事是你非常熟悉这些基础知识。因为在数据科学或任何其他技术领域,基础知识才是最重要的,因为你永远无法了解该领域的一切。
数据科学是一个正在发展的领域;每天都有新的进步和发展。因此,你永远不会真正掌握它。但是,只要你有坚实的数学、统计学、Python 或 R、SQL 和可视化基础,你应该可以应付任何新兴技术和你面前的任何新任务。
第二步:建立相关的投资组合
建立一个相关的投资组合可能是最具挑战性的步骤。首先,你需要证明你有经验,即使你是在申请你的第一份工作。那么,在没有实际经历的情况下,如何表现出你经历过呢?
</5-data-science-open-source-projects-you-to-contribute-to-boost-your-resume-d757697fb1e3>
在这里,建立一个相关的投资组合可以帮助你很多。公司找经验,基本都是找具体技能,具体项目。所以你只需要证明你解决过现实生活中的问题。一般来说,你的投资组合需要包括三类项目:
- 简单,相关,但个人项目。这些专题展示了你对不同主题和基本专题结构的理解。
- 对开源项目的贡献。这将证明你可以在一个大的代码库上工作,并且可以在一个团队中工作。
- 参与黑客马拉松。这类项目表明你可以在有限的时间内做好工作。此外,黑客马拉松通常致力于解决实际问题。
第三步:发展网上形象。
在当今的就业市场上,认可和人际关系网对于找到工作至关重要。为了获得认可,你可以做的一件事就是建立一个稳固的、有用的网络形象。建立一个形象会强化你的技术知识,帮助你提高沟通技巧,同时帮助你建立一个强大的专业网络。
有不同的方式来建立在线存在,许多人选择的一个选项是创建一个 YouTube 频道来谈论他们的经验或提供一些技术概念的教程。但是视频并不适合所有人;这就是为什么其他选择会给你同样的认可,而不用拍摄你自己。
您可以创建自己的播客,与您圈子中的人或经历相同旅程的人讨论数据科学主题。如果你对此感到不舒服,那么你可以创建自己的博客,并开始与其他数据科学家交流。
</5-reasons-why-every-data-scientist-should-blog-f1d81550a6c3>
第四步:利用求职工具。
现在你已经准备好开始找工作了,你需要利用各种可用的工具和资源来找工作。在你去求职网站之前,要学习的一件重要的事情是理解每个职位的含义。我写了一篇关于这个的文章来帮你开个头。
正如我刚才提到的,你可以使用许多工具和网站来找工作,但对于这篇文章,我将提到我个人使用过的其中两个网站:
- NextJobHunt 是一款求职工具,将求职者与可获得的工作机会和寻找职位的人才公司联系起来。该网站还提供职业咨询、撰写有力的简历以及如何通过面试等服务。
- LinkedIn 不仅仅是一个让你记录最近职业成就的网站。LinkedIn 求职门户可以帮你找到新工作。
</10-different-data-science-job-titles-and-what-they-mean-d385fc3c58ae>
第五步:根据你申请的工作量身定制你的简历
这可能是最重要的步骤——在你学会基础知识之后。当人们申请一家公司的特定职位时,计算机程序首先会在简历中寻找一些关键词,然后实际的招聘人员才能看到一些关键词。
也就是说,即使你拥有这份工作所需的所有技能,如果你的简历不是为这个特定的角色量身定做的,它甚至可能没有机会被真正的人阅读。因此,知道如何让你的简历与你申请的工作相匹配,甚至对于获得这份工作的面试机会都是至关重要的。我的下一篇文章将详细介绍如何建立这种关系。
外卖食品
求职不仅仅是一个过程,在你写完简历并学习了某个特定领域所需的所有知识和技能后,你就可以开始了。在我看来,这是每个人在任何领域的学习过程中都应该发展的另一项技能。
当我们开始找工作时,我们中的许多人都很挣扎,因为我们把找工作视为你在到达学习旅程的终点后所做的事情。事实是,求职是另一项技能,你需要在学习该领域技术方面的同时继续努力。
</4-types-of-projects-you-must-have-in-your-data-science-portfolio-4b67cc25ed3e>
获得这份工作更多地取决于学习过程和如何玩游戏,而不是你是一名了不起的数据科学家或一名白手起家的程序员。你需要知道如何赢得比赛,掌握技术知识只是迈向大胜的第一步。
在这篇文章中,我们讨论了接近你想要的工作需要采取的步骤,以及如何使用这些步骤来增加你获得工作的机会。我想告诉你的是,找工作在情感上非常具有挑战性,有时,拒绝会给你很大的打击,但是,记住,你值得,你需要的只是耐心和毅力。
解决数据科学问题的 5 种结构化思维技巧
以更快、更有效的方式解决你的问题。
无论您在数据科学方面的经验水平如何,当面临新的问题或挑战时,我们都需要后退一步,放眼全局,这样我们才能高效地解决问题,而不会浪费任何时间。
由于专业知识水平不同,每位数据科学家解决问题的方式也会略有不同。毕竟,你建立的项目越多,你解决未来问题的知识就越多。但是,无论您是否是初学者,并且正在寻找更有效的方法来解决问题,那么这篇文章就是为您准备的。
</10-skills-of-a-successful-data-scientist-be05a72d3aec> [## 成功数据科学家的 10 项技能
towardsdatascience.com](/10-skills-of-a-successful-data-scientist-be05a72d3aec)
本文将讨论不同的结构化思维技术,您可以使用这些技术来解决数据科学或现实生活中的问题。结构化思维是一套解决问题的步骤和技术,它通过将一个大问题分成更小的问题来更快更有效地解决大问题。
什么是结构化思维?
结构化思维是一个解决非结构化问题的框架——它涵盖了几乎所有的数据科学问题。使用结构化的方法解决问题不仅有助于更快地解决问题,还能识别出问题中可能需要额外关注的部分。把结构化思维想象成你正在参观的新城市的地图。
没有地图,你可能会发现很难到达目的地。即使你最终达到了你的目标,如果你有一张地图的话,你可能需要两倍的时间。
结构化思维是框架,不是固定的思维定势;它可以被修改以匹配你需要解决的任何问题。本文将介绍五种结构化思维技术,供您在下一个数据科学项目中使用。
№1: 六步解题模式
我们将从最简单和最容易使用的技术开始:6 步解决问题模型。这种技术使用分析方法来解决任何给定的问题。顾名思义,这种技术使用 6 个步骤来解决问题,它们是:
- 有一个清晰简洁的问题定义。
- 研究问题的根源。
- 集体讨论解决问题的可能方法。
- 检查可能的解决方案并选择最佳方案。
- 有效地实施解决方案。
- 评估结果。
这种模式遵循持续发展和改进的思维模式。因此,在第 6 步,如果你的结果不符合你的要求,你可以回到第 4 步,选择另一个解决方案,或者回到第 1 步,尝试用不同的方式定义问题。
我最喜欢这个简单技术的部分是,根据你试图解决的具体问题来改变它是多么容易。你可以在这里阅读更多关于这项技术的内容。
</6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61> [## 数据科学应用的 6 个最佳 Python IDEs 和文本编辑器
towardsdatascience.com](/6-best-python-ides-and-text-editors-for-data-science-applications-6986c4522e61)
№2:下钻技术
我们的下一项技术是下钻技术。这种技术更适合于复杂的、更大的、需要多人参与的问题。使用这种技术的全部目的是将一个问题分解到它的根源上,以便于找到解决问题的方法。
要使用下钻技术,首先需要创建一个表。表格的第一列将包含问题的概述定义,第二列包含导致此问题的因素。最后,第三列将包含第二列内容的原因,您将继续深入每一列,直到找到问题的根源。
一旦你找到了问题的根本原因,你就可以利用这些根本原因来开发更大问题的解决方案。你可以在这里阅读更多关于下钻技术的内容。
№3:解题八大纪律
接下来是解决问题的八个原则。这种技术提供了一个使用八步过程解决问题的实际计划。您可以将这种技术看作是本文前面讨论的 6 步解决问题模型的扩展和更详细的版本。
这一过程中的八个原则中的每一个都是为了让你离找到问题的完美解决方案更近一步。所以,在你得到了你的问题的先决条件之后,你就可以遵循这八大纪律 D1~D8。
</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>
- D1:组建你的团队。拥有一个拥有解决项目所需技能的团队可以让项目进展更容易。
- D2:定义问题。使用可量化的术语描述问题,如谁、什么、哪里、何时、为什么和如何。
- D3:制定工作计划。
- **D4:确定和识别根本原因。**使用因果图找出问题的根本原因,将原因与结果对应起来。
- D5:选择并验证永久性纠正措施。根据根本原因,评估您之前制定的工作计划,并根据需要进行编辑。
- D6:实施修正后的行动计划。
- D7:评估你的结果。
- D8:祝贺你的团队。一个项目结束后,在开始新项目之前,退一步欣赏已经完成的工作是很重要的。
№4:Cynefin 框架
Cynefin 框架技术和其他技术一样,通过将问题分解成其根本原因来实现高效的解决方案。Cynefin 框架通过从 5 个不同的角度来解决问题。
Cynefin 框架可以被认为是一种更高层次的方法,因为它要求你将你的问题放在 5 个环境之一中。
1。明显的上下文。在这种情况下,你的选择是明确的,因果关系是显而易见的,很容易指出。
2。 **复杂的语境。**在这种情况下,这个问题可能有几种正确的解决方案。在这种情况下,因果之间可能存在明确的关系,但并不是每个人都清楚。
3。复杂的背景。如果你的问题无法找到直接的答案,那么它就属于复杂的范畴。复杂的环境是有不可预知答案的问题。这里最好的方法是采用试错法来解决它。
**4。混乱的上下文。**在这个语境中,没有因果关系。所以,你的主要目标将是建立因果关系来解决问题。
**5。紊乱。**最后一个语境是无序,这是最难归类的语境。唯一的方法就是排除其他的环境,收集更多的信息。
你可以点击阅读关于 Cynefin 方法的更多深入知识。
</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>
№5:5 个为什么的技巧
本文的最后一个技巧是“5 个为什么”技巧,或者我喜欢称之为“好奇的孩子方法”。我认为这是解决问题最广为人知和最自然的方法。
这个技巧只是遵循一个简单的方法,问 5 次为什么。首先,你从主要问题开始,问它为什么会发生,然后继续问为什么,直到你找到问题的根源。现在,你可能需要问多于或少于 5 个为什么来得到你的答案。
不管怎样,你可以使用这种方法最终找到问题的根源——更多关于 5 个为什么的问题,以及如何在这篇文章中有效地使用它。
外卖食品
我们每个人都有自己处理新问题的方式。如果我们作为团队的一部分工作,这可能是最有可能的情况,你将需要把问题分成更小的问题,并把它们分配给不同的团队成员。
但是,为了能够分解一个问题,你需要完全理解它,并且知道它的预期最终结果。最好和最有效的方法之一是通过结构化思考。此外,结构化思维是一个灵活的框架,任何人都可以使用它来使解决非结构化问题的过程更加顺畅。
</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>
在本文中,我们介绍了 5 种不同的结构化思考技巧,您可以用它们来更高效地解决下一个数据科学问题。所以,如果你以前没有尝试过,试一试,看看哪种技巧最适合你解决问题的常规。
机器学习中处理不平衡数据的 5 种技巧
处理不平衡数据集的基本指南
对于分类任务,可能会遇到目标类标签在各个类之间分布不均匀的情况。这种情况被称为不平衡的目标类。对不平衡数据集进行建模是数据科学家面临的一个主要挑战,因为由于数据中存在不平衡,模型会偏向多数类预测。
因此,在模型训练之前,处理数据集中的不平衡是至关重要的。在处理不平衡数据时,需要记住各种事情。在本文中,我们将讨论各种处理类不平衡的技术,以训练一个健壮的和非常适合的机器学习模型。
***Checklist:***
**1) Upsampling Minority Class
2) Downsampling Majority Class
3) Generate Synthetic Data
4) Combine Upsampling & Downsampling Techniques
5) Balanced Class Weight**
在讨论上述 5 种技术之前,让我们集中精力为不平衡的数据集任务选择正确的指标。选择一个不正确的度量标准,如准确性,看起来表现不错,但实际上偏向于多数类标签。性能指标的替代选择可以是:
- AUC-ROC 评分
- 精确度、召回率和 F1 分数
- TP、FP、FN、TN 可视化的混淆矩阵
在为您的案例研究选择了正确的指标之后,您可以使用各种技术来处理数据集中的不平衡。
1.)上采样少数类:
上采样或过采样是指创建人工或复制数据点或少数类样本以平衡类标签的技术。有多种过采样技术可用于创建人工数据点。
(来源),过采样插图
阅读下面提到的文章,更好地理解 7 种过采样技术:
</7-over-sampling-techniques-to-handle-imbalanced-data-ec51c8db349f>
2.)下采样多数类:
下采样或欠采样指的是移除或减少大部分类别样本以平衡类别标签。imblearn 包中实现了各种欠采样技术,包括:
- 随机欠采样
- Tomek 链接
- 近似采样
- ENN(编辑最近的邻居)
还有很多。
(来源),欠采样插图
按照 imblearn 文档获取上述每种技术的实现:
https://imbalanced-learn.org/stable/references/under_sampling.html
3.)生成合成数据:
不推荐使用欠采样技术,因为它会移除大多数类数据点。生成少数样本的合成数据点是一种过采样技术。其思想是在少数类样本的邻近区域或邻域中生成少数类样本的合成数据点。
SMOTE(合成少数过采样技术)是一种流行的合成数据生成过采样技术,它利用k-最近邻算法来创建合成数据。
SMOTE 有多种变体,包括:
- SMOTENC:连续和分类特征的 SMOTE 变量。
- SMOTE:只有分类特征的数据的 SMOTE 变量。
- 边界 SMOTE:将使用边界样本生成新的合成样本。
- SVMSMOTE:使用 SVM 算法来检测样本,以用于生成新的合成样本。
- KMeansSMOTE:在使用 SMOTE 进行过采样之前,使用 k 均值聚类进行过采样。
- 自适应合成(ADASYN):类似于 SMOTE,但它根据要过采样的类的局部分布的估计生成不同数量的样本。
按照 Imblearn 文档执行上述 SMOTE 技术:
4.)结合过采样和欠采样技术:
不推荐使用欠采样技术,因为它会移除大多数类数据点。过采样技术通常被认为比欠采样技术更好。其思想是将欠采样和过采样技术结合起来,以创建适合模型训练的稳健平衡数据集。
其思想是首先使用过采样技术来创建重复和人工数据点,并使用欠采样技术来去除噪声或不必要的生成数据点。
Imblearn 库实现了组合过采样和欠采样技术,例如:
- Smote-Tomek : Smote(过采样器)结合 TomekLinks(欠采样器)。
- Smote-ENN : Smote(过采样器)结合 ENN(欠采样器)。
按照 Imblearn 文档执行 Smote-Tomek 和 Smote-ENN 技术。
5.)平衡级重量:
欠采样技术移除了导致数据丢失的多数类数据点,而上采样创建了少数类的人工数据点。在机器学习的训练过程中,可以使用**class_weight**
参数来处理数据集中的不平衡。
Scikit-learn 为所有机器学习算法提供了**class_weight**
参数。
- 类别权重—平衡:类别权重与输入数据中的类别频率成反比。
*Computation Formula:*
**n_samples / (n_classes * np.bincount(y))**
- {class_label: weight} :假设,目标类标签为 0 和 1。将输入作为 class_weight={0:2,1:1} 传递意味着类 0 的权重为 2,类 1 的权重为 1。
结论:
在训练稳健模型时,数据中类别不平衡的存在可能是一个主要挑战。上述技术可用于在训练机器学习模型之前处理类别不平衡。
还可以采用成本敏感学习或惩罚增加多数类分类成本的算法。此外,决策树和随机森林应该优先于其他机器学习算法,因为它们往往在不平衡的数据上表现良好。
参考资料:
[1.] Imblearn 文档:https://imbalanced-learn.org/stable/index.html
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一小部分会员费,不需要你额外付费。
https://satyam-kumar.medium.com/membership
感谢您的阅读
5 个终端命令,让您的生活变得更加轻松。
当我第一次在我的电脑上使用命令行时,它看起来令人困惑,而且技术含量低。这让我回到了少年时代,在老式的 POS 系统中输入代码,或者在过时的公司内部网中查看库存。虽然这些技术看起来过时了,但它们很实用。随着我对终端越来越熟悉,我很快意识到它不仅仅是功能性的,它暴露了许多小程序,你可以用它们来与计算机交互,解决问题,甚至以复杂的方式链接在一起。以下是我发现自己最常用的一些程序的分类。
htop
Unix 机器附带了内置的命令行程序top
,它允许您查看系统上当前运行的进程的实时分解。这是 1984 年发行的经典节目。2004 年, Hisham Muhammad 发布了htop
(h
指的是他的首字母缩写)与top
相似,但有更好的用户界面和一些附加功能。使用htop
,你可以水平和垂直滚动,以不同的格式查看进程(例如,一个树形视图),用户界面有一个彩色输出,这看起来微不足道,但对可读性有很大帮助。唯一的缺点是htop
没有预装在您的机器上,需要使用以下命令下载:
apt-get install -y htop
或者在 Mac 上使用 brew
brew install htop
htop 用户界面
树
tree
命令预装在 Linux 上,是我在为项目存储库编写文档时经常使用的一个方便的工具。它从运行命令的文件夹开始递归地遍历文件系统。因此,如果您在 base ~ filesystem 文件夹中键入tree
,那么该命令将遍历整个文件路径,显示文件夹和文件名。此命令需要安装在 Mac 上:
brew install tree
以下是在小文件夹中运行时的输出示例:
mac 上的树命令输出
wikit
我花在打开浏览器窗口、浏览维基百科和执行搜索上的时间是巨大的。但是有时候,我真的只想读一小段摘要介绍。Wikit
是一个用于 linux 的命令行工具,它返回维基百科文章的介绍性段落。每当我使用 linux 时,我都喜欢快速查阅资料。
定位
顾名思义,locate
在文件系统中搜索一个搜索项,并返回结果的完整路径。我发现自己经常使用它,因为它比点击文件夹寻找东西要快得多,如果它返回多个输出,你可以通过管道把它输入到grep
来改进搜索。
假设我想找到所有带有“medicare”字样的文件,并且我知道它们必须在特定的文件夹中(或者在我的情况下,在可移动卷上)。我可以使用下面的语法来过滤locate
返回的结果:
locate medicare | grep -i volumes------locate [file search term]| grep -i [folder]
咖啡因
列表中最有用的命令之一,caffeinate
让你的电脑保持清醒。市场上有许多 GUI 程序实现了同样的目标,但是有了 caffeinate,你可以做一些事情,比如在特定进程运行时让你的计算机保持清醒,然后停止阻止你的计算机睡眠。以下命令使我的计算机保持 100 秒的清醒状态。
这个命令在 Mac 和 Linux 计算机上都可用,并且对于模型训练或 web 抓取之类的事情特别有用,在这些事情中,您可能有一个通宵运行的过程。
希望您已经了解了一些新的命令,现在您可以在日常工作中部署这些命令。欢迎在下面用你最喜欢的命令行程序发表评论!
快乐编码:)
查看我的网站!
每个“NLP 爱好者”都必须知道的 5 种文本解码技术
可视化自然语言处理中流行的文本解码方法
来自源的修改图像
自动文本生成系统的最终目标是生成和人类书写文本一样好的文本。在 NLP 中,生成任务背后的核心思想是关于生成特定于特定上下文和约束的文本,其中一些是文本摘要、语言翻译、语音到文本等。一旦模型在这些任务中的任何一个上被训练,离散单元的质量以及最终模型生成的序列取决于人们采用的解码策略。这些技术各有利弊。
在这篇博客中,我们将介绍一些流行的文本采样技术,如随机采样、贪婪采样、波束搜索、top-k 采样和 top-p 采样。
随机抽样技术|作者图片
在随机抽样中,想法非常简单,在生成过程中的每个时间步 (t) ,我们根据在整个词汇表的每一步生成的条件概率分布抽样一个随机单词。这种技术可以被认为是我们将在这个博客中讨论的所有技术中最不稳定的一种。下图显示了同一— 的图示
序列到序列设置中的随机解码|作者图片
贪婪解码技术|作者图片
在贪婪解码中,在生成过程中的每一个时间步 (t) ,我们选择具有最高条件概率的字。因为采样不允许任何随机性,所以在模型权重冻结后,该方法默认为确定性的**。当目的是生成一个短序列时,它工作得相当好。然而,当生成更长的序列时,这种方法会陷入循环,最终生成冗余的序列。**
下图显示了同一产品的图示视图—
序列到序列设置中的贪婪解码|作者图片
波束搜索技术|作者图片
在波束搜索中,的想法是在生成文本的同时对一个高似然序列进行采样。为此,我们定义了所谓的波束大小(B ),它基于在生成阶段的上一步中选择的单元,在每个时间步长(t)对 Top-B 单元进行采样。这样,如果我们要生成一个 5 个单词的序列,那么我们将得到 3⁵序列,我们从中选择并返回一个具有最大可能性的序列作为我们的最终序列。同样根据的这项研究,作者发现当生成的序列很短并且不是开放式的时,波束搜索工作得很好。
下面的图像显示了同一— 的图示视图
光束搜索技术|来自源的修改图像
*图示为光束搜索的工作方式。*假设 ABD 和 CED 是模型生成的可能性值最高的两个序列。最后,返回具有较高值的值。
Top-k 采样技术|图片由作者提供
在 top-K 采样中,在生成过程中的每一个时间步长 (t) ,我们首先根据该时间步长生成的条件概率分布对 top-k 最可能的单词进行采样。我们只在那些前 k 个单词中重新分配概率质量,并最终基于条件概率从该集合中选择一个随机单词。这里,随机性是基于 k 的选择而引入的,它有助于在每一代中试验和输出不同但相关的序列。另外,对于 k=1,这种技术的表现类似于贪婪解码。
下图显示了同一产品的图示视图—
序列到序列设置中的 Top-k 解码|图片由作者提供
图示为 k=3 时 top-k 的工作情况。根据概率,“男孩”、“你好”和“男人”这三个词排在我们的前三名。随后我们在那个集合中重新分配那些概率,并最终做出我们的选择。
细胞核取样技术|作者图片
在 top-p sampling 中,又称核采样,在生成过程中的每个时间步 (t) 中的,我们生成一个累计概率超过概率质量 P 的小词子集。然后在这个集合中重新分配概率,最后,我们基于概率从那个集合中选择一个随机词。top-p 采样允许我们结合 top-p 字的动态大小窗口的概念,不像 top-k 为每一步固定 k 的大小。****
下图显示了同一— 的图示视图
序列到序列设置中的 Top-p 解码|图片由作者提供
**图示为 p=0.6 时 top-p 的工作情况。单词‘男孩’和‘男人’的概率和超过阈值概率质量 0.6。我们选择这两个词,用重新分配的概率创建一个后续集,并最终做出选择。
结论
在上面讨论的所有解码技术中,没有一个工作得最好的硬性规则。这完全取决于您的特定用例,您是希望有可能的和可预测的单词序列,还是希望模型在生成时勇敢而有创造性**。一般来说,对于像故事生成、诗歌生成等用例*(生成有趣句子的可能性是无穷无尽的)你可能想要尝试 Top-p 或 Top-k,对于像翻译这样的用例(对于如何将给定的句子翻译成目标语言没有太大的变化)你可能想要尝试 Beam search。你也可以摆弄 softmax 的**温度值,通过将温度值设置为接近 0,并在此之后应用上述技术,使分布更加偏斜,在某种意义上也更有把握。***
对 NLP 感兴趣?然后你可能会想看看我的YouTube 频道 在那里我解释了 NLP 论文和概念:
我希望你喜欢读这篇文章。如果你愿意支持我这个作家,可以考虑报名成为中的一员。每月只需 5 美元,你就可以无限制地使用 Medium。谢谢!
这里有一些你可能会感兴趣的帖子
**</8-types-of-sampling-techniques-b21adcdd2124> https://medium.com/mlearning-ai/10-popular-keyword-extraction-algorithms-in-natural-language-processing-8975ada5750c </5-outlier-detection-methods-that-every-data-enthusiast-must-know-f917bf439210> **
关于数据可观测性,每个数据工程师都需要知道的 5 件事
如何信任您的数据工作流,一次一个管道
图片由 Unsplash 上的 Paul Skorupskas 提供。
作为一名新的或者有抱负的数据工程师,有一些 必备的技术和框架 你应该知道。如何建立数据管道?检查。如何清理、转换和建模您的数据?检查。如何在接到首席执行官关于数据丢失的疯狂电话之前防止数据工作流中断?也许不是。
通过利用我们在软件工程和开发者运营(DevOps)领域的朋友的最佳实践,我们可以更具战略性地思考如何解决“好管道,坏数据”的问题。对许多人来说,这种方法也包含了可观察性。
杰西·安德森 ,大数据研究所董事总经理,《数据工程团队:创建成功的大数据团队和产品》一书的作者,以及蒙特卡洛联合创始人兼首席执行官 巴尔·摩西 ,分享你需要知道的一切,以开始使用这下一层的数据堆栈。
数据工程通常被称为“数据科学的管道”,通常指的是数据工程师确保所有管道和工作流正常运行的方式,正确的数据以正确的方向流向正确的利益相关者。但我交谈过的大多数数据工程师也以一种非常特殊的方式与管道工联系在一起:你只有在出问题的时候才会打电话给他们。
你的副总裁深夜发来的电子邮件— 我需要最新的数字来做明天早上的董事会报告,而我的 Looker 仪表盘坏了。
一位数据科学家的清晨电话——他们为一个模型消耗的数据集不再正常工作。
来自营销主管的会议中期懈怠— 我这个月的活动投资回报率不正常。我觉得归因数据有问题。
从来没有来过的消息:这份报告的数据很完美。继续努力吧!
好吧,希望你的公司确实认可并欣赏一贯出色的工作,但事实仍然是:太多的数据工程师花了太多的时间去救火、解决问题,并试图修补破裂的管道。
摆脱深夜邮件恶性循环的一种方法?数据可观察性。
#1.什么是数据可观察性,以及它为什么重要
数据可观察性是现代数据技术堆栈中的一个新层次,为数据团队提供了可见性、自动化,并针对损坏的数据(即,数据漂移、重复值、损坏的仪表板……你懂了吧)发出警报。通常,当问题发生时,可观察性会导致更快的解决,甚至有助于从一开始就防止停机时间影响数据消费者。
除了其明显的优势——更健康的数据!—数据可观察性还可以在您的整个组织中建立信任并培养数据驱动的文化。当可观察性工具和框架可供数据消费者以及工程师和数据科学家使用时,他们可以更全面地了解数据来自哪里以及如何使用数据,并实时了解已知问题的状态。这种增加的透明度带来了更好的沟通、更高效的协作和对数据的更多信任。
有了数据可观察性工具,工程师们就可以重新利用以前花在救火和应对数据紧急情况上的宝贵时间。例如, Blinkist 的数据工程团队发现,自动化监控为每个工程师每周节省了 20 个小时。这些宝贵的时间现在可以用于创新和解决问题,而不是争论出错的数据。
#2.DevOps 如何激发数据的可观察性
所有这些关于可观察性、停机时间、监控和警报的讨论,对于任何有软件工程经验的人来说,听起来都很熟悉。这是因为这种比较是有意的:数据可观察性的概念是由 DevOps 启发而来的,遵循了软件工程师在过去 20 年中开发的原则和最佳实践,以防止应用程序停机。
就像在 DevOps 中一样,数据可观察性利用了对数据的全面关注,将脚本从临时故障排除转变为监控、警报和分类的主动自动化。通过应用这些原则,数据工程师可以更好地识别和评估数据质量,与其他团队建立信任,并为数据驱动的组织奠定基础。
按照应用工程中的可观察性框架,数据可观察性分为五个支柱:新鲜度、分布、容量、模式和沿袭。
- 新鲜度捕捉你的数据表有多新。
- 分布告诉你你的数据是否落在预期范围内。
- Volume 提供了关于数据表完整性和数据源健康状况的见解。
- Schema 提供了对谁在何时对数据表进行修改的理解。
- Lineage 映射数据的上游来源和下游来源,帮助您确定哪里出现了错误或中断。
#3.数据损坏可能有一百万种不同的原因…但每种原因都有三个关键因素
数据停机时间将发生。如果出现这种情况,了解导致大多数停机的常见因素将有助于您快速解决问题。
首先是贵公司依赖的第三方数据源的数量——您拥有的数据源越多,数据丢失或不正确的可能性就越大。你不能控制第三方消息来源,但可观察性有助于你第一个知道什么时候出了问题(而不是你的 CEO 在她重要的董事会议的早上)。
其次,随着数据源数量的增加,数据管道的复杂性也在增加。一旦数据流入您的组织,它可能会被存储、保护、处理、转换、聚合和交付,同样,您的数据移动得越多,出错的机会就越多。
破碎数据的最后一个关键因素可能是你首先想到的:你不断增加的数据消费者数量。随着数据通过管道传输到更多的仪表板和 BI 工具中,仍然有更多的机会出现损坏,以及可能引发最后一分钟消防演习的无意误解或曲解,而实际上您的数据从一开始就没有任何问题。
#4.数据可观察性不仅仅是严格的测试和监控
就像在应用工程中一样,测试是识别数据中断或问题的有用方法。但是光有数据测试是不够的,尤其是在大规模测试中。数据变化很大,即使是中等规模的数据集也会带来很大的复杂性和可变性。它还来自第三方来源,其中数据结构的更改可能会在没有警告的情况下发生。对于一些数据团队来说,安全性和合规性问题可能会使他们难以找到可用于开发和测试目的的代表性数据集。
由于单元测试无法发现或预测每一个可能的问题,创新的数据团队将测试与整个管道的持续监控和可观察性相结合。自动化使这成为可能,最好的可观察性工具使用机器学习来观察、理解和预测停机时间,自动生成规则,并智能地路由警报以更快地解决问题。
数据的可观察性还提供了血统,我们之前将其定义为映射数据的上游来源和下游来源。Lineage 真正让您鸟瞰您的数据,了解它来自哪里,谁与它进行了交互,进行了哪些更改,以及它最终在哪里提供给最终消费者。
这种可见性支持数据发现,我们称之为下一代数据目录 —基于其谱系提供对数据的动态理解。自动化的、可扩展的和分布式的数据发现使您能够回答关于您的数据在每个域中的当前状态的问题:这个表最后一次更新是什么时候?谁能接触到它?该数据资产最后一次使用是什么时候?是生产质量吗?
有了所有这些信息和自动化操作,您可以准备和操作可靠的行动手册来进行事件补救。当停机真的发生时,您的团队将做好充分准备,找出根本原因并迅速做出响应,再次减少花在消防演习上的时间,有利于创新和解决问题。
#5.当涉及到您的数据时,拥有大部分坏数据比没有数据更糟糕。
坏数据是阴险的,而坏代码却不是。对于应用程序工程,测试通常会揭示任何错误——或者,如果没有,您的应用程序可能会由于错误代码而崩溃。然后你就能修好它。
有了数据,就不一样了。即使进行了测试,您可能也没有意识到坏数据已经通过许多 API 或端点之一悄悄进入了您的生态系统。如果没有可观察性,坏数据可能会在一段时间内未被发现,从而导致不正确的报告,甚至做出不明智的决策。
随着组织越来越依赖数据来推动业务发展,数据工程师早就应该像开发运维工程师那样关注数据质量了。通过采用更全面的数据质量和发现方法,您和您的团队可以回收宝贵的时间,建立信任,并打破深夜电子邮件和最后一分钟消防演习的循环。永远。
有兴趣了解更多?伸出手去 杰西【安德森】 或者 巴尔摩西 。
我在大学没学到的 5 件事
观点——大学在为我的 IT 和数据科学职业做准备方面让我非常失望
IT 和数据科学学士学位值多少钱?
在我目前的职业生涯中,我正在处理几个关于数字化的趋势主题,如通过云更新 IT、提高效率的敏捷性或客户和员工满意度。此外,我经常遇到数据科学环境中的话题。然而,我不得不说,在我的第一份工作中,我自学了大部分所需的技能,或者至少在后来的硕士学位中学习了相关的理论。我经常问自己,为什么我攻读学士学位的大学没有为我即将到来的职业生活做好准备。某些教授和学习内容的一些过时的说法今天仍在我的脑海中,并向我表明大学经常忽视最先进的趋势。
云只是一个连接到我的路由器的文件台
在第一学期,我必须努力完成许多基础课程,其中许多课程我再也不需要了,但让我难以忘怀的是一位教授的说法,他说云没有什么特别的,他只需将他的硬盘连接到他的路由器上,云就准备好了。回想起来,它告诉我,通常是理论上的技术书呆子,他们可能被困在一个不再是最新的世界。基础研究是学习的一部分,但我希望老师和教授们至少敢于探索这个美丽的新世界。这项技术对公司有什么附加价值,它是一个什么样的游戏规则改变者,然后我不得不从贸易杂志和实践中学习。尤其是当涉及到云时,对公司来说有巨大的成本和效率机会-不仅仅是路由器上的硬盘驱动器。
公司现在也使用像数据仓库这样的东西
在数据库和 SQL 课程中,我学到了至少一些基本的东西,为我以后作为数据分析师和程序员的工作做准备。然而,直到今天,教授所说的除了正常的数据库之外,像数据仓库这样的东西也在不断增加,这仍然引起了我的共鸣。这是在 2014 年,当时这种技术实际上已经是最先进的,行业已经依赖于数据湖。对我来说,这些东西实际上也属于课堂,如果有人至少听说过一些,并澄清了背景,我会很感激,但在这里,这样的前瞻性技术也完全被忽略了。
敏捷还是一个东西吗?
除了 IT 话题,我在我的专业中专注于项目管理,但是我真的没有听说过敏捷 这个词。在这里,我学到了经典的项目管理,但没有像 Scrum、看板、开发运营等时髦话题的痕迹。此外,你必须记住,这是一个 it 和项目管理之间的研究课题。直到上了硕士的学习课,我才第一次至少学到了理论。回想起来,敏捷项目管理的技术在我学士学位期间的第一个项目中非常有用。诸如我如何才能管理好第一个小项目、让团队参与进来、合理地设定截止日期并让客户满意之类的问题——当我了解这些问题时,我本可以更好更快地完成所有这些主题。
那对我来说是希腊语。
我不得不学了两个学期的西班牙语,除了“Vamos a la Playa”和 Hola 之外,其他的我都记不住。在我看来,像基础数学这样的课程或者像演示管理这样的软技能课程会更适合。在这里,最初的几年是痛苦的,但学习非常丰富。
GIF 的 GIF
t 检验,Z 检验,置信区间…
毫无疑问,统计学在数据分析领域是非常有趣和重要的。但我很快了解到,公司和老板更关心设计良好的仪表板和 KPI。当然,有足够多的用例需要统计和数据科学,但是一门“如何设计一个清晰的仪表板”的课程会有所帮助。
摘要
我不想诋毁我在学习中所学到的一切,但我不得不说,学士学位尤其令我失望。理论基础很重要,但是你也必须展示它的实际好处。学习内容也经常过时。我希望在这里看到更多关于当前经济发展的参考。对我来说,开头的基础知识和结尾的实用参考结合起来会很有用。回想起来,我对某些老师的态度感到非常失望,他们压制了热门话题。你有哪些经历?
“教育不是注满一桶水,而是点燃一把火.”——w·b·叶芝
成为数据科学家之前我希望知道的 5 件关键事情
在我的数据科学职业生涯中,我后悔没有早点做的事情。
科林·哈迪在 Unsplash 上的照片
介绍
在我的数据科学生涯中,有很多事情我后悔没有早点做。特别是,有些事情如果我早点开始做,会对我的工作产生重大影响。
因此,为了帮助其他人避免同样的错误,下面是我后悔在成为数据科学家之前不知道的 5 件事。
除了阅读这篇文章,你还可以看看我在 YouTube 上关于这个话题的视频。
早点学会编码
沙哈达特·拉赫曼摄
在今天的数字世界中,学习编码是最有价值的技能之一。如果你想从事科技行业,这一点尤为重要。
对于数据科学家来说,不会编码就很难创造价值。能够编码让你将理论和模型付诸实践。一个不能创造价值的数据科学家——至少从商业角度来看——不是一个非常好的数据科学家。
如果你像我一样,后来才更认真地对待编程,那么即使是学习基础知识也会感到力不从心。坏习惯会随着时间的推移而发展,主要是因为从一开始就不知道如何正确编码。
现在,我不是说数据科学家需要像软件开发人员一样编码。根据我的经验,数据科学在编码技能要求方面有相当大的余地。当然,学习足够的代码来完成数据科学基础知识是可能的,例如在笔记本上进行探索性的数据分析。尽管如此,我认为能够理解并实现更高级的编码实践是非常有价值的。
最近,我一直在读 Alfredo Deza 和 Noah Gift 的《实用手册》。MLOps 的兴起证明了我们需要将软件开发实践与机器学习结合起来。很明显,企业需要能够将数据科学家创建的模型自动化、测试和部署到生产中。
即使我永远也不会写出令人惊叹的代码投入生产,能够阅读和理解更复杂的代码仍然很棒。如果我早些时候正确地学会了编码,那么总的来说,它会给我一个更好的基础。
如果你感兴趣,你可以看看这个视频,我在视频中谈到我将如何为数据科学重新学习 Python。
学会喜欢统计学
克里斯·利维拉尼摄
我很肯定大多数人会同意统计学是一门有用的学科。然而,对统计学有真正兴趣和热情的人呢?从我的经验来看,肯定没有这么多。
从高层次来说,统计就是做出明智的决策。这是一个让我们远离偏见的工具,我们经常成为偏见的受害者。如果数据科学家要推动业务关键决策,这一点极其重要。
在学术界学习和“应用”统计学给了我一个负面的印象。直到我开始学习并使用它来理解机器学习算法,我才渐渐喜欢上它。
只要你详细描述了你的所有步骤,在课程作业中做出稍微错误的结论并没有那么糟糕,因为学术界的通常目标是最大化分数。然而,由于潜在的财务影响,与传统学术界相比(除非你是一名学术研究人员),在商业环境中进行的统计似乎更有“分量”。
例如,如果我把更多的精力放在学习像时间序列分析这样的常用方法上,我会更容易重新掌握。相反,我现在不得不在没有教授帮助的情况下从头开始努力学习。
在数据科学中,你要么喜欢统计学,要么学会喜欢统计学。没有真正的解决办法。
不要过度模仿机器学习
阿瑟尼·托古列夫摄
近年来,人们非常容易陷入过度宣传机器学习的陷阱。我以前没有意识到这一点,媒体和营销是主要原因。
最终,如果你把它分解,机器学习只是以智能算法的方式应用于机器的统计数据。
例如,我看到有人将线性回归称为“机器学习技术”——而实际上,线性回归是建模最基本、最常用的统计工具。人们需要在某个地方划清界限,将基本统计学重新贴上“机器学习”的标签变得越来越普遍。
在我看来,机器学习有两个方面:一是工程方面,它更专注于将模型部署到生产中,并使用更多的软件开发实践;然后是建模方面,数据科学家确保模型按预期工作,并回答业务问题。
除非你的目标是成为一名机器学习工程师,否则你很可能会从事建模方面的工作。因此,熟悉统计是必须的,过度使用机器学习可能会让你不小心跳过作为数据科学家所需的基础知识。
技术细节的价值
照片由 Dmitry Demidko 拍摄
作为一个喜欢讨论项目技术细节的人,我花了一段时间才意识到大多数人根本不在乎。
我有一种很好的感觉,这是由于多年在学术界度过的时光。为了在学校取得成功,你需要展示你的作品,这样你就可以得到分数以获得更高的分数。
不幸的是,现实世界中的大多数人,尤其是那些有影响力的人,更关心结果而不是技术细节。数据科学家的角色本质上是通过将数据翻译成通俗易懂的语言来帮助利益相关者做出最佳决策。
但这并不是说技术细节不重要。相反,优先考虑的应该总是价值第一,其次才是技术细节。
我喜欢把这比作销售产品。营销人员首先关注价值,展示购买和使用他们的产品后,你的生活会发生怎样的变化。一旦你迷上了,你可以以后再研究细节。没有人会在展示他们的产品所能提供的价值之前展示细节。
带文档的版本控制
Yancy Min 摄
我从未对我的项目进行版本控制,直到我意识到跟踪大型项目中的变更是多么令人困惑。
我认识的大多数人都没有对他们的项目进行版本控制。唯一这样做的人已经熟悉了软件开发实践。
和我的大多数朋友一样,当年我使用 GitHub 上传我完成的项目,向雇主“展示”它们。只有一个“初始提交”,没有正确的自述文件。
我当时不知道的是,大多数雇主并不关心一个没有用文档进行适当版本控制的项目。
雇主希望看到随着项目的发展,你知道如何正确使用 Git。这是因为当与其他团队成员一起处理一个项目时,经常会用到版本控制。此外,它通常用于项目的持续开发和集成
他们还希望看到你知道如何通过文档向公众传达你的项目。这确保了每个人——无论是否在你的团队中——都知道如何使用这个项目。
如果我从一开始就对我的早期项目进行了适当的版本控制,我将有更多的工作要展示,而不仅仅是已经完成的项目的“初始提交”上传。即使没有人注意到它们,知道如果你破坏了一些东西,你可以很容易地将一个更改回滚到一个旧的版本,这仍然是有好处的。
结论
希望我的经历能给你一些方向,让你知道应该关注什么。还有很多遗憾我没有在这里列出来,但就像生活一样,如果我们当时没有开始,我们唯一能做的就是现在开始。
如果你喜欢这篇文章,你可以在 Medium 上关注我(我正试图发布更多),或者你可以在 YouTube 上查看我的其他视频。如果你想通过电子邮件了解我在做什么,你可以考虑注册我的简讯!
原载于 2021 年 12 月 12 日【https://leonlok.co.uk】。
如果我必须重新学习机器学习,我会告诉自己的 5 件事
从我的经历中吸取的教训
我离我在机器学习领域的职业目标还很远,但我对自己的进步感到非常自豪。从足球到邮件室,现在是机器学习——太棒了!
昨天(周六),我有机会与一些刚刚开始数据科学和机器学习职业生涯的了不起的人分享我的旅程,这真的迫使我思考。以我现在仅有的一点知识,我会对自己说些什么呢?退一步说,这是一个重要的问题,也是一个对初学者非常有价值的问题。
没有进一步的 adoo…
#1 学习基础知识——不要害怕犯错
我永远不会忘记我分享一篇文章的那一天,这篇文章详细介绍了从零开始的线性回归。虽然我现在已经对文章做了必要的修改,但起初,我在文章中对线性回归做了一些非常错误的假设,LinkedIn 上的统计警察(其中一些人现在已经成为了我的好朋友)很快就盯上了我。
回应我关于线性回归的文章;作者图片
你可以想象,这对我是毁灭性的。不是因为我犯了错误,而是因为我在线性回归上犯了错误。在图片中的人发表评论后,他的订阅源中的一大群人开始评论、诋毁博客,并说一些可能被认为是令人沮丧的话。
尽管如此,我还是联系了那个留下修改意见的人,感谢他对我的帮助,但令我惊讶的是,他非常抱歉,并不断试图让我放心,他不是有意以任何方式或形式叫我出去。
这是我第一次因为我在机器学习方面所做的工作而受到批评,但那次遭遇改变了我对两个关键问题的看法,这两个问题改变了我学习和工作的方式;
- 是的,有一些混蛋想要打倒你,但是一般来说,当你犯错误时纠正你的人只是因为他们想让你变得更好。
- 总是使用可靠的来源做适当的研究。我记得我写文章的那一天,我只是想把它完成,我用我能找到的任何东西来帮助我的研究。它非常缓慢,这在我的写作中表现出来。
我在观念上的小小转变帮助我更大胆地做我正在做的事情。我不再害怕犯错,因为我知道,如果我做了,1)我不会死,2)会有人检查我,并把我引上正确的道路。然而,这并没有让我变得懒惰,因为我仍然高度重视分享可靠和有价值的内容。
#2 从零开始构建事物
直到 2020 年我被裁员,我才开始重新发明轮子——那是我第一次做实习生将近一年的时间。有了所有令人惊叹的机器学习框架,比如 Scikit-Learn,让所有的机器学习看起来像一个黑盒真的很容易,我已经这样做了很长时间——我所做的只是调用fit
和predict
。
由于我能够使用包来实现机器学习算法,我有一种错误的理解感——当我不得不写线性回归文章时,这一点明显暴露出来。另一个让我表现出无能的场景是,当我的非技术部门经理看着我正在做的一些工作,问我“决策树是如何决定价值分割的?”
我完全被难住了。
你知道这句话“如果你不能向一个 5 岁的孩子解释,你就不明白”。嗯,我无法向一个 30 岁的人解释,所以这里有一些大问题。
尽管如此,我开始使用必要的算法,但我发现当我从头开始编写算法时,我的理解成倍增长。
https://github.com/kurtispykes/ml-from-scratch
#3 让好奇心引领
最初,我习惯于让我对工作的绝望主导。我是如此渴望得到一份工作,以至于我会说“我应该做什么项目才能得到一份工作?”—听起来熟悉吗?想要在这个领域找到一份工作绝对没有问题,但是当它影响了你的判断时,就不是你的好奇心在引导你了。是绝望。
我相信我们内心深处都有一个指南针,它会告诉我们,如果我们追随自己的好奇心,应该走哪条路。只有当我们开始通过逻辑上试图确定最佳路线来干扰路径时,我们的判断才会变得模糊。
被好奇心所引导意味着你会跟随你内心的想法去做。对我来说,从前这意味着学习深度学习的基础知识,然后是学习一些关于自然语言处理的东西,现在是关于将机器学习模型投入生产——当然,你不会在一夜之间成为专家,这需要你付出大量的努力。
#4 亲自动手
当你第一次开始学习机器学习时,很容易成为概念上符合标准的人,这意味着你可以谈论正在发生的一切。当涉及到事情的实际方面时,问题就出现了,这是一种完全不同的情况。我是这种模式的罪魁祸首。
我非常专注于将事物概念化,并认为这足以让我有能力应用它们,但这与事实相去甚远。如果我能把我现在学到的东西作为一个初学者对自己说,我会告诉自己的第一件事就是应用,然后马上学习我已经应用了什么——杰瑞米·霍华德称之为自上而下的方法。
#5 有一个无关的爱好
我无关的爱好是健美操;公平地说,我一直有一个不相关的爱好,但我从未认真对待我的爱好,因为我认为它会干扰我成为数据专业人员的热情。例如,我不会尝试学习新的体重动作,因为我觉得我会牺牲太多的时间,或者我不会去健美操公园,因为我不想让人们认为我是健美操运动员——这听起来很愚蠢,但在当时是有意义的。
数据科学、机器学习、数据工程等。这些都是非常密集的任务,需要你发挥你的脑力。拥有一种分离的方式可以让你的大脑以同样的方式恢复,在一次高强度的锻炼后休息可以让你撕裂的肌肉在修复中生长。
当我开始通过自由地做健美操和学习我想学的任何东西来让自己放松时,我不仅更喜欢它,而且我发现花时间做一些与数据完全无关的事情让我增强了学习和成长的能力,结果我变得更快乐了。
包裹
总结一下,我会对自己说,重要的是不要把学习机器学习、数据科学等当成目的地(例如,“学习 X 需要多长时间?”).相反,把你的职业生涯想象成一次旅行,通过学习新事物、结识新朋友和体验新事物,你会不断提升自己。
感谢您的阅读!
如果你喜欢这篇文章,请通过订阅我的**每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。**
相关文章
**</5-laws-for-self-taught-data-professionals-4bf351ac5c24> **
作为开源机器学习框架创建者,我学到的 5 件事
行业笔记
如果你是一个有抱负的开源机器学习框架的创建者或维护者,你可能会发现这些提示很有帮助。
作者拍摄的照片(布莱斯峡谷 UT 在我的 2021 年公路之旅)
创建一个成功的开源项目非常困难,尤其是在数据科学/机器学习/深度学习领域。大量开源项目从来不用,很快就被放弃了。作为流量预测(Flow Forecast)的创建者,这是一个针对时间序列预测框架的开源深度学习,我分享了我的成功和陷阱。以下是我为有抱负的开源机器学习框架的创建者/维护者提供的技巧汇编。
- 文档,文档,文档
拥有好的文档、教程和入门指南可能是任何开源框架最重要的方面之一。虽然在工作环境中,代码库的知识通常在会议、辅导和结对编程会议上共享,但对于开源项目,主要的学习方法是通过文档、教程和示例。此外,数据科学家通常非常忙碌,如果您的文档/入门指南不清楚,他们通常会转向更易于使用的框架。不管模型的承诺性能如何,这通常是正确的。
为了帮助人们容易地开始使用你的框架,我推荐一个简单的入门教程。除了入门教程之外,你还需要一个地方来存放方法和类的更详细的文档。这对贡献者和高级用户都很有用。我发现 ReadTheDocs 很适合这个目的。对于数据科学项目(尤其是 ML 繁重的项目),您可能还需要一个包含概念信息和模型性能信息的站点。特别是对于 FF,我们决定使用 Atlassian 的 Confluence。这为更多的概念性信息和模型结果提供了完美的位置,而不会弄乱代码文档。
当然,文档的编写和维护是相当耗时的。所以你应该在这上面投入充足的时间。我发现的一个诀窍(如果你可以这样称呼它的话)是,在编写代码的同时编写文档是最容易的。时间越久,你对代码的记忆就越模糊。最终,您和您的其他维护人员甚至不会记得某个特性存在于代码库中。所以马上写你的文档吧!
我发现的另一件有用的事情是,在做任何设计改变之前,开始一个设计文档。然后,设计文档就成了对项目的变更和变更原因的生动记忆。另一个技巧是在 VSCode 中使用类似 Python DocString Generator 的扩展。这些将自动生成适当格式的文档字符串,用于呈现您的在线文档站点。
2.“如果你建造了它,他们就不会来了”
不幸的是,创建一个好的开源数据科学框架不会自动让人们使用它。此外,很多时候,成为最流行的框架不一定是最好的,而是营销、品牌和关键字优化最多的框架。虽然许多 ML 开发者更喜欢只关注事物的技术方面,但营销和推广是必要的。
这是我们在流量预测早期努力解决的问题。尽管是第一个支持变形金刚的时序框架,但我们并没有做什么推广。其他框架很快出现,并在社交媒体上获得了更多的关注。我们面临的另一个挑战是我们框架的名字。尽管 FF 向存储库的根源致敬,但它有时会让人们困惑,让人们认为我们只是一个预测河流流量的框架,而不是一个通用的时间序列预测框架。因此,我建议从一开始就选择一个相当通用的名字。
为了更好地营销你的知识库,我建议定期在媒体上写文章,并发布教程视频。这有助于提高你的框架的流量,并建立星级。你也可以(偶尔)在适当的 Reddit 子编辑上发布主要版本。在本地聚会上发言是在 DS 社区中传播您的框架意识的好方法。大多数聚会总是在寻找新的演讲者,并且非常支持开源项目。最后,在流行的 Kaggle 数据集和竞赛上使用你的框架的教程笔记本也能有所帮助。
虽然星星真的不应该意味着太多(我认为 watchers 和 forks 是一个更好的指标),但它们在 GitHub 的推荐算法和其他人如何看待你的回购中起着核心作用。因此,随着时间的推移,尝试在存储库上建立星星是很重要的。如果你能在短时间内获得足够多的明星,你的知识库也将开始形成趋势,这将导致更多的明星。记得在 GitHub 上给你的库添加合适的标签,这样会给你的库排名(根据标签上的星星)。
举办定期活动也可以让更多的人参与到你的知识库中来。2020 年,我们举办了 FF sprint,作为 PyData 全球活动的一部分。今年在 FF,我们计划举办一场黑客节冲刺赛(点击查看细节)。在这些活动中,迅速响应 PRs 并准备好回答开发人员可能提出的问题非常重要。像 t 恤这样的激励也可以激励参与者贡献更多相关的功能。
3。测试
测试是具有挑战性的,尤其是在机器学习领域,因为大多数 ML 模型显然是不确定的。最好从简单开始,利用标准类型的单元测试(例如,测试是否返回正确的形状,测试训练循环是否端到端运行)。确保包含单元测试和集成测试。测试应该用 CircleCI 或 Travis-CI 这样的工具来运行。您可以使用 CodeCov 或其他工具来自动跟踪您的代码覆盖率。一旦你有了基本的代码覆盖,并确保这些测试通过,你现在可以开始更棘手的测试了。
为了测试诸如测试的有效性和评估循环之类的东西,你可能需要创建一个虚拟的确定性模型。然后,您可以使用虚拟模型和小型数据集运行这些函数,并检查计算是否准确。对于模型,您可以编写相对便宜的收敛“测试”来确保模型在几个时期后收敛。有了这些测试,你就可以安心了,你的代码运行正常。
也许最棘手和最耗时的测试形式之一是确保你移植到你的框架中的模型与论文中提到的原始结果相匹配。这通常需要使用精确的超参数进行实验,并对论文进行预处理。这些测试不能作为 CI 的正常部分运行,因为它们会花费太长时间。相反,它们应该只是偶尔运行一次,以确保模型性能不会随着主要框架修订而改变。
4。良好的依赖性管理和向后兼容性是必不可少的
当维护一个开源项目时,依赖关系是一个经常要处理的问题。我的首要建议是在 requirements.txt 文件中设置依赖项的版本。否则,每当一个依赖项被更新时,它可能会破坏您的代码,您将会收到一串来自用户的消息,他们想知道为什么他们的代码突然不能工作了。Dependabot 擅长打开 PRs 来自动增加依赖项,然后您可以很容易地看到它们是否会通过 CI。查看我的另一篇文章了解更多信息。
另一件需要跟踪的事情是你的框架在 PyPi 上的版本和你的发布周期。有一个易于使用的 GH 工作流,可以在发布时自动推送至 PyPi。我通常尝试在每个月初发布(或者如果我每隔一个月就发布一次)。
5。选择系统以确定问题/新功能的优先级
这就引出了我们的下一点,创建一个系统来区分问题的优先级。对于许多开源维护者来说,时间是极其稀缺的。然而,bug 和所请求的特性的数量继续呈指数级增长。因此,跟踪进度和管理未决问题非常重要。在 FF,我们尝试了各种项目管理工具(如 JIRA),但最终发现简单的 GH 问题和项目委员会效果最好。
开源维护者面临的另一个困难是委派工作。开发人员经常会出于好意自愿实现某个特性,但是却陷入了其他工作的泥沼,无法完成指定的问题。你应该试着定期与开发人员联系,尤其是在重要问题上。如果有必要,你应该尽可能礼貌地将问题重新分配给其他人来完成,如果是关键问题。
我希望你觉得这个指南有用!请随意留下任何问题或评论。也请检查我的其他文章!
我从摩根大通和 Fivetran 构建分析堆栈中学到的 5 件事
大型企业和快速发展的初创企业数据管理最佳实践的简短指南
我的职业生涯始于摩根大通(J.P. Morgan)的一名期权交易员,然后开始构建他们的第一个现代数据堆栈。目前,我是 Fivetran 的首席分析主管,five tran 是数据集成领域的后起之秀。一路走来,我不得不艰难地学习如何构建复杂的信息系统。今天,我想分享一些我收集的最佳实践,它们将帮助你取得成功。
1.如何构建现代数据堆栈
现代数据堆栈是一组云原生数据工具,围绕自动化、降低成本以及在数据管理的整个生命周期中对最终用户的易用性展开。以下是我构建现代数据堆栈的框架:
- 数据仓库–首先,建立一个基于云的数据仓库。不同的数据仓库将提供不同的可伸缩性、定价模型、SQL 方言和其他特性。云原生数据仓库的显著例子包括 BigQuery、Snowflake 和 Redshift 。
- 商业智能–然后,将云原生 BI 工具与您的数据仓库连接起来。不同的 BI 工具提供不同级别的可视化能力、用户友好性、协作和其他特性。BI 工具的显著例子包括 Looker、Tableau、Qlik 和 Mode。
- 数据管道–您需要一个工具来从您的应用程序和操作系统中提取数据,并将其加载到中央数据仓库。不同的管道供应商对易用性、可配置性、安全性和客户服务有不同的方法。示例包括 Fivetran、Stitch、Xplenty 和 Matillion。
- 数据转换–最后,您将需要工具来将数据转换为用于报告和预测建模的模型。许多数据管道都包含转换工具,但 dbt 是一个很好的独立例子。
大多数供应商提供免费试用。你也可以参考像 Gartner 这样的行业出版物来获得更详细的比较。
2。如何招聘前几名数据员工
去年,我雇佣了十多名有才华的数据专业人员,现在我想分享一个经验证的框架,它将帮助您提升:
- 第一屏:测试高级技术技能,尤其是高级 SQL 技能。可以使用 HackerRank 等测试软件,提高筛选效率。
- **第二屏:执行技能测试。**如果这是第一次招聘,让候选人写一份 30-60-90 天的计划,并评估他们的业务战略。如果这不是第一次雇用,让他们通过现有的业务逻辑代码工作。这是一个模拟他们典型工作职责的实践测试。
- **接下来,筛选分析技能:**让你的候选人展示对复杂数据集的洞察力和可视化。或者,使用与相关用例相关的限时案例研究来评估他们的分析技能。这将测试你的候选人分析数据和表达想法的能力。
- **优秀的文化契合度是必须的:**我们通过追求文化契合度来与公司价值观保持一致,从而不断提高人才密度。优先考虑那些特质和能力与你的团队互补的新员工。
- 如有疑问,请拨打参考电话。提前投资一个小时可以防止你犯下代价高昂的招聘错误。
最后但并非最不重要的一点是,严重依赖人际网络和推荐来提高招聘速度和质量。召集你的员工进行推荐,并将其与推荐激励结合起来,这是一条很长的路。像 dbt 、本地乐观和外部连接这样的数据社区也是招聘的绝佳来源。
3。前 180 天做什么
你的前六个月对你公司的分析工作至关重要。这里有一个框架可以帮助你为早期的成功打下坚实的基础。
- **设计集中式数据团队:**对于大多数公司来说,具有“中心辐射”结构的集中式团队是一种更好的模式,因为它有助于协调战略和执行。分析团队(hub)应该直接向 CEO 或技术主管报告,而专注于特定业务领域的 pod(spoke)应该在功能上与各自的部门保持一致。这种模式在 J.P. Morgan 和 Fivetran 都运行得很好,前者的团队必须支持大规模的业务,后者的公司需要积极扩大规模。
- **与同行团队合作:**首先,确定已经在使用分析的其他团队,以及如何使用。通过帮助他们自动化数据集成和避免重复工作来建立联盟。第二,确定团队的范围,特别是确定超出范围的任务,以提高关注度和执行力。
- **将基础指标与领导力相结合:**首席执行官应确保 BI 层是业务战略不可或缺的一部分,因为“衡量什么,管理什么”以下是一家 SaaS 公司早期重要 KPI 的简单框架:
- **收入指标:**年度经常性收入(ARR)、净收入留存(NRR)和单位经济效益:如客户获取成本、销售效率
- **销售和营销:**客户增长和流失率、月环比收入增长以及营销合格线索和转化指标
- **产品:**日活跃用户、周活跃用户、月活跃用户、客户旅程、功能使用和净推广者分数
4。如何将您的数据团队作为研发团队&运营
传统上,数据团队被简单地视为支持团队、工程团队,或者越来越多地被视为产品团队。然而,我认为数据团队是三者的结合。
- **从产品角度构建:**New Relic 的分析总监埃里克·琼斯(Erik Jones)精辟地总结了这一点:“一个成功的分析团队还必须善于收集需求、定义范围、管理预期、营销和推广、培训最终用户,并最终推动所构建产品的采用。”数据团队应该以实现自助服务为中心。我推荐使用使用率和 NPS 作为团队的北极星度量。
- **按照工程原则运作:**一个成功的分析团队还应该投入至少 25%的资源来构建一个易于导航和扩展的数据基础设施。利用这些工程原则将提高操作效率:用户请求日志、双周 sprints、代码审查和质量保证(QA)过程的实现、持续自动化和大量文档。
- **以客户为中心的服务:分析团队应建立技术客户成功职能,提供入职和持续支持,响应用户上报的问题,与合作伙伴团队合作解决生产问题,并开发最终用户培训材料。**随着团队规模的扩大,这些职能可以分配给专门的技术客户成功角色。
5。如何用系统思维取得成功
带着好奇心和耐心完成您的数据现代化工作。为了做出有影响力的决策,关键是要理解组织的商业模式、约束和激励。
**企业数据复杂而混乱。**由于摩根大通在过去一个世纪经历了多次并购,它不得不整合许多不同的系统。这种复杂性在数据管理的整个生命周期中被放大了:分析和协调工作、系统和数据集成、数据监控和治理、跨业务的标准化、复杂的许可,以及涉及移动、转换和与数 Pb 数据交互的基本性能问题。
**运用系统思维来发现正确的问题并加以解决。**在摩根大通,我在管理融资业务的数据时偶然发现了成功,该业务处理价值超过 1 万亿美元的资本。销售人员、交易者等等不断地提出数据请求。然而,这些请求中的大部分执行起来很耗时,涉及小规模的局部优化,并且影响有限。我发现,战略性地在宏观层面进行交易,以匹配资产和负债,可能会释放价值数亿美元的资本,增加公司的竞争优势。这种行为超出了单个团队的权限,因为没有一个团队能够访问所有的数据。
我们的首要任务是打破孤岛,集中数据。然后,我们探索了机器学习算法,以分析如何将资本分配给客户,以实现投资回报率的最大化。由于在大型企业中自动生成任何系统级指标极其复杂,因此提供宏观指标的实时可见性并在全球范围内对其进行优化被证明具有无限的价值。
作为一名数据专业人员,我喜欢设计优雅的信息系统,并相信正确使用数据可以帮助人类实现更高水平的意识并影响变化。虽然许多人可能对迄今为止数据管理方面的重大技术进步感到欢欣鼓舞,但我认为这只是一场数据革命的开始。