TowardsDataScience-博客中文翻译-2021-四-
TowardsDataScience 博客中文翻译 2021(四)
原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
嵌入数据文化的 4 个实际行动
原文:https://towardsdatascience.com/4-practical-actions-for-embedding-a-data-culture-ec469a53765d?source=collection_archive---------31-----------------------
如何帮助您的组织学会热爱数据
蒂姆·马歇尔在 Unsplash 上的照片
* 85%的数据科学项目失败。Gartner 的这一统计数据是我在参加过的所有行业活动中看到的。当然,这个数字因公司和行业而异。你可能会认为这个数字在网飞这样的地方会低一些,那里的数据文化广为人知,而在没有数据文化的传统行业会高一些。然而,这个数字太高了,组织可能意识不到他们拥有的数据的价值。这篇文章列举了四个实际例子,你可以用它们在你的组织中植入数据文化,并开始成功,或者至少更快地失败,并继续下一个项目。
行动 1 —寻找数据冠军
人多力量大。试图让一个组织自己接受一种数据文化将是困难的,如果不是不可能的话。如果你能找到愿意出去传播消息的人,事情就会变得容易。
数据冠军是传播数据的好方法。照片由 Jaime Lopes 在 Unsplash 上拍摄
通常,当人们想到冠军时,他们会想到高级管理层。然而,这不应该仅限于他们。我在数据文化方面取得的最大成功之一是成立了一个主要由官员组成的电子邮件影响工作组。通过根据硬数据判断电子邮件的性能,并通过测试加以改进,我们的小组自下而上地发展到覆盖整个组织,并在一年的时间内将打开率和点击率提高了 50%以上。如果人们对数据感兴趣并愿意提供帮助,那么就为他们找一个角色,不管职位高低。
显然,并不是每个人都立即热衷于改变到数据驱动的工作方法。否则这篇文章就多余了!有些人会理所当然地要求一些证据向他们证明这是一种更好的做事方式。有几种方法可以做到这一点。一种可能是利用数据和分析为那个人找到快速成功的方法(下面有更详细的部分)。另一种可能是与他们交谈,找出他们接受数据文化的阻碍因素,并努力解决这些最重要的阻碍因素。你能提供的证据越多,你就越有可能创造出福音传播者。
无论你找到了什么样的数据冠军,只要记得表达你的感激之情,并找到相互支持的方法。这些人正在帮助你获得更有趣的工作,并为你的组织带来价值,你至少可以帮助他们做同样的事情。
行动 2——调*
数据应该是给所有人的。人们越来越多地谈论数据民主,尽管这种谈论的主要内容是让工具更容易使用。虽然这很重要,但从另一端着手实现数据民主化也同样有价值,即让人们达到良好的数据素养水*。我一直对这种方法充满热情。总的来说,人们总是愿意学习和提高,数据技能是一个很大的简历助推器,这并没有阻止热情!
有许多方法可以提高组织中的数据素养。你如何接*它取决于人们和他们的时间以及他们目前的水*。你可能需要混合搭配下面的方法来根据这些需求定制学习。
培训课程
首先是巨兽训练课。这可能是针对数据素养水*较低的人,也可能是针对真正感兴趣的人。培训课程可以涵盖与工作和数据工具相关的任何内容,不限于构建仪表板、SQL、Python 或 R、Excel 的基础知识、统计和定量研究方法,甚至是机器学习,这取决于人们的热情程度。保持会议的趣味性和互动性,对完成任务的人进行奖励,尽量保持任务和例子与组织的数据和工作相关。在课程结束时,评估事情的进展并做出适当的调整。过去,我发现为任务编写详细的会议计划和模板非常有用,这样团队中的任何人都可以参加会议。
午餐和学习
午餐和学习会议是正式培训会议的一个很好的替代方案。这些是轻松的会议,人们可以一边吃午餐,一边了解你的工作并提出问题。这对于那些没有时间参加培训课程或者可能已经具备一定程度的数据素养的人来说非常有用。它们还有额外的好处,可以建立关系,在更轻松的环境中认识同事,人们下意识地把你的工作和一些好事联系起来——吃午餐!
午餐和学习也是了解你同事的好方法,除了把数据推给他们!桑德·达尔胡森在 Unsplash 上的照片
良好的文档
最后,对于没有时间的人,我们有书面说明。这绝对不是说没有人会阅读的 100 页的用户指南!在一次关于在 Spotify 上构建仪表盘的精彩演讲中,Jacob Olsufka 谈到了在提供指示时在人们所在的地方与他们见面,也就是在仪表盘上。在构建仪表板时,我强烈推荐这样做。大多数工具都具有创建小信息弹出窗口/工具提示的能力,这些信息可以发挥巨大作用。如果你使用的是 Excel 或 Google Sheets,那么在工作表的文本框中清楚地写下说明,如果你的工具是简单的代码,那么在注释或文档字符串中写下说明。关键是始终在人们所在的地方与他们见面,而不是浪费他们的时间去寻找指示。
行动 3——速赢
速赢对于在组织中建立关系和建立数据声誉非常有用。正如广告上所说,速赢是指可以快速完成的工作,最终为最终用户带来实实在在的好处。这些可以是任何事情,从令人惊叹的时刻到节省人们时间或让他们更好地完成工作的小事。它们不仅为你赢得了时间和余地来进行更长期的工作,例如检修数据基础设施,而且它们通常是同事们记得的工作片段,并与你和你的团队联系在一起。
你可以通过和你的同事谈论他们的工作,他们的挫折是什么,他们希望他们拥有什么,并将其与你的技能相匹配,来找到速赢。如果你能把你擅长的事情和愿望清单上的一件事情相匹配,并能快速完成,那么你就找到了快速取胜的方法。
对于数据科学家来说,这可能是一个令人沮丧的陈词滥调,但仪表板总是会给同事留下深刻印象。如果数据库已经存在,那么将仪表板工具链接到它并在短时间内创建一些视觉上令人惊叹的交互式仪表板是非常简单的。同事们通常会被它的外观和它如何帮助他们了解正在发生的事情并做出更好的决定而震惊。在那之后,你可以回去继续开发最先进的 NLP 工具或者多臂上下文强盗!
行动 4 —敏捷工作(MVPs)
敏捷已经成为老生常谈,成为每一位首席执行官的宾果卡。在许多地方,它被用来指许多不同的东西,以至于它已经失去了所有的意义。这是一个遗憾,因为从敏捷方法中可以获得一些原则来确保您的数据项目快速成功或失败。
不要被陈腔滥调吓跑。敏捷是帮助数据科学项目落地的好方法。由凯利·西克玛在 Unsplash 上拍摄的照片
敏捷的原则之一是构建满足团队/组织基本需求的最小可行产品(MVP ),并对其进行迭代改进。这些构建和迭代在固定的时间段(冲刺)内完成,通常是 2-3 周。在 sprint 开始的时候,你与你为之工作的人会面,并就 sprint 的一组最小可交付成果达成一致。在 sprint 结束时,你们再次聚在一起,决定交付的东西是否很好地满足了需求,是否需要改进,或者项目是否能够工作,是否应该被丢弃。
敏捷的一个很好的例子是为人们设计一种从家到办公室的交通方式。在经典的项目管理中,构建团队会与最终用户谈论他们认为他们的需求是什么,然后离开 3 个月并构建一辆汽车。在这段时间里,用户的基本需求(开始工作)没有得到满足。有了敏捷,团队可以在两周内造出最好的东西,满足上班的基本需求,也许是一辆踏板车。在冲刺结束时,这个人现在可以开始工作,并要求其他需求,如更快的速度。在第二次冲刺结束时,最终用户有了一辆自行车,并更新了他们的需求,希望花费更少的精力去工作。在下一个冲刺阶段,团队将制造一辆最终用户喜爱的摩托车。他们认为摩托车非常适合他们的需求,因为汽车的运行成本太高。
在上面的例子中,敏捷相对于传统项目管理的优势是显而易见的。满足所有用户需求的时间要快得多,并且它允许人们更新他们的偏好和改变路线。这不仅仅适用于交通方式。应该很容易看到如何将它应用于数据项目,也许是在构建仪表板或设计复杂的模型来预测客户流失时。通过构建 MVP,您可以将有用的东西快速部署到生产中,然后继续迭代改进,直到您找到在最佳时间内为组织提供最大价值的最佳点。
最后
有许多将数据文化嵌入组织的好方法。这是我发现的四个效果不错的例子。数据仍然是一个相对较新的领域,会有一些健康的怀疑态度。然而,伟大的数据和洞察力所能带来的巨大价值已经越来越不是秘密了,所以坚持下去,你很快就会看到结果!
4 个预提交插件,用于在 Python 中自动检查和格式化代码
原文:https://towardsdatascience.com/4-pre-commit-plugins-to-automate-code-reviewing-and-formatting-in-python-c80c6d2e9f5?source=collection_archive---------1-----------------------
使用 black、flake8、isort 和 interrogate 编写高质量的代码
动机
将 Python 代码提交给 Git 时,您需要确保您的代码:
- 看起来不错
- 是有组织的
- 符合 PEP 8 风格指南
- 包括文档字符串
然而,在提交代码之前检查所有这些标准可能会让人不知所措。如果你能像下面这样在每次提交新代码时自动检查并格式化你的代码,那不是很好吗?
作者图片
这就是预提交派上用场的时候。在本文中,您将了解什么是预提交,以及可以将哪些插件添加到预提交管道中。
什么是预提交?
预提交是一个框架,允许您在提交代码之前识别代码中的简单问题。
您可以在预提交管道中添加不同的插件。一旦你的文件被提交,它们将被这些插件检查。除非所有检查都通过,否则不会提交任何代码。
作者图片
要安装预提交,请键入:
pip install pre-commit
酷!现在让我们给预提交管道添加一些有用的插件。
黑色
black 是 Python 中的代码格式化程序。
要安装 black,请键入:
pip install black
现在为了看看 black 能做什么,我们将编写一个很长的函数,如下所示。由于第一行代码超过 79 个字符,这违反了 PEP 8。
让我们尝试使用黑色来格式化代码:
$ black long_function.py
并且代码自动格式化如下!
要将 black 添加到预提交管道,请创建一个名为.pre-commit-config.yaml
的文件,并将以下代码插入到该文件中:
薄片 8
flake8 是一个 python 工具,可以检查你的 Python 代码的风格和质量。它会检查 black 未涵盖的各种问题。
要安装 flake8,请键入:
pip install flake8
为了看看 flake8 做了什么,让我们编写违反 PEP 8 中一些准则的代码。
接下来,使用 flake8 检查代码:
$ flake8 flake_example.py
啊哈!flake8 检测到 3 个 PEP 8 格式错误。我们可以将这些错误作为修复代码的指南。
代码现在看起来好多了!
要将 flake8 添加到预提交管道,请将以下代码插入到.pre-commit-config.yaml
文件中:
伊索特
isort 是一个 Python 库,它自动按字母顺序对导入的库进行排序,并将它们分成节和类型。
要安装 isort,请键入:
pip install isort
让我们试着使用 isort 来对混乱的导入进行排序,如下所示:
$ isort isort_example.py
输出:
酷!进口现在更有条理了。
要将 isort 添加到预提交管道中,请将以下代码添加到.pre-commit-config.yaml
文件中:
审问
询问检查您的代码库是否缺少文档字符串。
要安装询问,请键入:
pip install interrogate
有时,我们可能会忘记为类和函数编写文档字符串,如下所示:
我们可以运行 interrogate,而不是手动查看我们所有的函数和类来查找丢失的文档字符串:
$ interrogate -vv interrogate_example.py
输出:
作者图片
酷!从终端输出中,我们知道哪些文件、类和函数没有 docstrings。因为我们知道丢失的文档字符串的位置,所以添加它们很容易。
$ interrogate -vv interrogate_example.py
作者图片
__init__
方法的 docstring 丢失,但这不是必需的。我们可以通过在参数中添加-i
来告诉 interrogate 忽略__init__
方法:
$ interrogate -vv -i interrogate_example.py
作者图片
酷!要将询问添加到预提交管道,请将以下代码插入到.pre-commit-config.yaml
文件中:
最后一步——向 Git 挂钩添加预提交
您的.pre-commit-config.yaml
文件中的最终代码应该如下所示:
要向 git 挂钩添加预提交,请键入:
$ pre-commit install
输出:
pre-commit installed at .git/hooks/pre-commit
犯罪
现在我们已经准备好提交新代码了!
$ git commit -m 'add pre-commit examples'
您应该会看到如下所示的内容:
作者图片
跳过验证
为了防止预提交检查某个提交,将--no-verify
添加到git commit
:
$ git commit -m 'add pre-commit examples' --no-verify
用户化
黑色
要选择在运行 black 时包括和排除哪些文件,请创建一个名为pyproject.toml
的文件,并将以下代码添加到pyproject.toml
文件中:
薄片 8
要选择忽略哪些错误或编辑其他配置,创建一个名为.flake8
的文件,并将以下代码添加到.flake8
文件中:
审问
要编辑 interrogate 的默认配置,将以下代码插入到pyproject.toml
文件中:
结论
恭喜你!您刚刚学习了如何在提交代码之前使用预提交来自动检查和编辑代码。我希望这篇文章能让你轻松地检查和格式化你的代码。
当您的代码遵循通用标准时,您的同事也会很高兴。
随意发挥,并在这里叉这篇文章的源代码:
**https://github.com/khuyentran1401/Data-science/tree/master/productive_tools/precommit_examples **
我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 T2 Twitter 上与我联系。
星这个回购如果你想检查我写的所有文章的代码。在 Medium 上关注我,了解我的最新数据科学文章,例如:
** 💔-tools-to-track-and-visualize-the-execution-of-your-python-code-666a153e435e> [## 3 个跟踪和可视化 Python 代码执行的工具
towardsdatascience.com](/3-tools-to-track-and-visualize-the-execution-of-your-python-code-666a153e435e)
参考
Lj 米兰达。(2018 年 6 月 20 日)。使用预提交自动化 Python 工作流:black 和 flake8 。Lj 米兰达。https://ljvmiranda 921 . github . io/notebook/2018/06/21/pre commits-using-black-and-flake 8/。**
学习数据科学 SQL 的 4 个原则
原文:https://towardsdatascience.com/4-principles-to-learn-sql-for-data-science-781520c0e983?source=collection_archive---------21-----------------------
提高数据科学技能的技巧
迈尔在 Unsplash 上拍摄的
不言而喻,编写 SQL 代码的能力是在任何数据科学岗位上获得成功的必要条件。没有任何证据表明这种情况会很快改变,SQL 会一直存在,所以掌握这项技能是一项绝对值得的投资。无论你是在寻找你在数据科学领域的第一份工作,还是在为下一轮就业市场复习你的 SQL 技能,或者希望提升你的职业生涯,我有四条原则可以帮助你在所有与 SQL 相关的工作中取得成功。
让我们开始吧。
1。在你写任何代码之前,确定正确的粒度
我说的“谷物”是什么意思
SQL 查询的粒度是您希望输出数据集达到的聚合级别。
例如,如果您正在寻找一个聚集日常用户操作的数据集,那么您的“粒度”可以描述为“用户日级别”(即每行代表每个用户每天采取的操作。)
提前考虑这些谷物是个好主意,主要有两个原因。
首先,它帮助您规划查询的结构
当你进入数据科学就业市场时,这一点尤其重要,因为在这个过程中,求职者经常被要求现场编写 SQL 代码。在开始编码之前,为你的问题建立一个心理框架将有助于以一种清晰、有效的方式得到答案,给面试官留下深刻印象。
其次,它可以帮助您识别代码中的明显错误
通常,您会有一些关于您编写的查询预期返回的行数的上下文。例如,假设我的计划谷物处于“用户”级别,我知道我们有~ 1000 个用户。当我的查询返回一个有 100,000 行的数据集时,我立即知道我的查询中的一个或多个连接有问题。
2。格式问题
SQL 是一种语言,我们的查询讲述了一个故事。让我们把它变成一个我们未来的自己和同事们都能轻松阅读的故事。一些快速检查的查询不需要原始的格式,但是任何有可能被其他人或未来自己读取的查询都应该遵循一致的模式。下面是一个简单但格式良好的查询示例。
我将注意到我在这里特意选择的一些风格。
- 所有关键字都是大写的
- 新行上的关键字右对齐。它们的后续表达式是左对齐的
- 每个表都有一个简单但有意义的别名
- 列号用于 GROUP BY 和 ORDER BY 子句中。我知道有些人认为这是“懒惰”的方式,但是速度的好处和按别名列干净地分组比不尽可能显式的代价更重要。例如,如果我想在 GROUP BY 子句中使用列名,我必须执行以下操作(大多数情况下是这样的,一些数据库允许在 GROUP BY 中使用别名)
关于 SQL 格式化有很多观点,我不认为其中有一个明显的赢家。选一个就好,要始终如一。
3。使用 cte,而不是子查询
cte 或公共表表达式,是临时数据集,可以在给定查询的后续 SQL 语句中引用。cte 最好用一个例子来解释。下面的查询标识了从他们的第一个订单到 100,000 美元订单最快的销售代表。
让我们来分解这个查询的组件
- 首先,您会注意到带有。所有使用 CTE 的查询都必须在第一个 CTE 之前包含此语句。
- 第一个订单日是我们的第一个 CTE。它定义了一个数据集,查找销售代表完成订单的第一天。first_order_day 可以在后续表达式中引用,就像引用数据库中的任何其他表一样。
- 接下来,我们定义另一个 CTE,运行订单值。这将计算每个销售代表的销售总额。
- 最后,我们引用两个 cte 来返回对应于最短 time_to_goal 值的行。
使用子查询编写的查询可以使用 cte 重写,我建议这样做——cte 更干净,对您的同事和未来的自己来说更容易理解。使用子查询,我们可以看到上面的查询是什么样子的。势不可挡,对吧?
通过使用 cte,我们可以获得相同的结果,并改善可读性和逻辑流程。
4.用代码注释讲述一个故事
最终,SQL 现在被视为软件工程中使用的编程语言,那么为什么不像其他语言一样遵循相同的注释约定呢(例如 python )。我相信这很大程度上是因为人们学习 SQL 的方式。虽然软件工程中使用的大多数编程语言都是在牢记这些约定的情况下教授的,但 SQL 通常是在事后才教授的。它通常被视为达到目的的手段(即数据集→分析)。
然而,我们在分析中做出的一些最关键的决定发生在 SQL 查询中,我们应该向我们自己、利益相关者以及那些通过描述性注释来解释我们的意图的人解释这些决定。
特别是,在更复杂的查询中,注释对于全面的分析非常有益。
他们帮助未来的你和你的代码审查者理解你的意图
这为我们自己和我们的同事节省了时间,也避免了重读或审查代码时的麻烦。当我们生成用于分析的数据集时,数据科学家这样做是有最终目标的(例如)我们希望看到过去 6 个月中登录用户对帮助网站的所有访问。)记录我们打算对我们的查询做什么,有助于指导我们编写我们的查询,并帮助审阅者检查我们工作的准确性。
它记录了对数据的假设
Garbage in Garbage Out(GIGO)是执行分析时应该首先考虑的一个表达式。简而言之,如果你输入一个分析或建模的无意义数据,你将得到无意义的结果。
这一点很重要,因为原始数据在用于分析之前需要建模和聚合。这种情况在某种程度上发生在 SQL 中(随着像 dbt 这样的工具的出现,情况更是如此)。因此,当你对你的数据做出假设,或者选择一种类型的聚合(例如使用中位数对*均值*),在你的代码注释中解释为什么*你这样做。没有什么比无法向同事或利益相关者解释为什么在查询中包含一个表达式更糟糕的了。
这完全是信任的问题
最终,这四条原则都植根于一个理念,即信任是数据科学家拥有的最重要的资产。在学习和编写 SQL 时遵循这四个原则将有助于你赢得从面试官到同事和利益相关者的信任。
**专业提示:**如果你是 SQL 新手,或者想提高你的技能,我认为来自 Mode Analytics 的 SQL 学校是最好的免费资源。看看吧!
4 个 Python 特性让你在没有注意到的情况下犯了错误
原文:https://towardsdatascience.com/4-python-features-that-cause-you-to-make-a-mistake-without-noticing-98ef46d873c8?source=collection_archive---------8-----------------------
不要让他们拖累你
Brando Louhivaara 在 Unsplash 上拍摄的照片
自从我踏入数据科学的第一步,我就一直在使用 Python。虽然我过分关注第三方库,如 Pandas 和 Scikit-learn,但学习基本 Python 也是至关重要的。
出于各种原因,Python 是一门伟大的语言。很容易学习和理解。你可以像阅读普通英语一样阅读 Python 代码。Python 也带来了快速简单的开发过程,我认为这是一个动力助推器。
另一方面,Python 有一些我们需要额外注意的特性。否则,我们可能会在不知不觉中犯一些错误。我在学习 Python 的旅途中其实也犯过这样的错误。
在本文中,我们将讨论 4 个 Python 特性,如果使用不当,它们可能会给你带来麻烦。
1.有效的方法
Python 提供了几种修改内置数据结构的方法。例如,sort 方法可用于对列表中的项目进行排序。
然而,这些方法中的一些在适当的位置工作,这意味着它们不返回任何东西。这些方法的一个潜在错误是用它们进行变量赋值。
假设我们有下面的列表,并且需要对它进行排序。
mylist = [1, 4, 2, 10, 5]mysortedlist = mylist.sort()
让我们检查排序列表中项目的顺序。
print(mysortedlist)
None
它实际上没有任何值,因为 sort 方法对原始列表中的项目进行排序,并且不返回任何内容。
print(mylist)
[1, 2, 4, 5, 10]
当你使用合适的方法时要小心。否则,您将最终拥有没有值的变量。
如果你不想修改原来的列表,你可以使用 sorted 函数,它不会改变原来的列表,而是返回一个排序后的列表。
mylist = ["d", "a", "c"]
mysortedlist = sorted(mylist)print(mysortedlist)
['a', 'c', 'd']
2.创建空集
Set 是 Python 中内置的数据结构。它类似于一个列表,但是它只包含唯一的值。
mylist = [1, 1, 2, 3, 3, 4]myset = set(mylist)print(myset)
{1, 2, 3, 4}
当我们将列表转换为集合时,重复项将被删除。集合表示为用逗号分隔的大括号中的值。因此,我们应该能够创建如下空集:
myset = {}
让我们检查一下 myset 变量的类型。
type(myset)
dict
这是一本字典,不是一套。Dictionary 是另一种内置的数据结构,用花括号中的键值对表示。中间没有项目的花括号会产生字典。
我们可以使用 set 函数创建一个空集。
myset = set()type(myset)
set
3.创建包含单个项目的元组
Tuple 是 Python 中的另一种内置数据结构。它用括号中的值表示,并用逗号分隔。
mytuple = ("Jane","John","Matt")type(mytuple)
tuple
元组类似于列表,但它们是不可变的。因此,我们不能更新元组中的值。
append 方法也不适用于元组。然而,我们可以将元组加在一起以创建另一个元组。
mytuple = ("Jane","John","Matt")mytuple + ("Ashley", "Max")
('Jane', 'John', 'Matt', 'Ashley', 'Max')
用一个条目创建一个元组有点棘手。虽然只有一项,但你应该在它后面加一个逗号。否则,你将得到一个字符串而不是一个元组。
mytuple = ("Jane")print(mytuple)
Janetype(mytuple)
str
让我们用逗号做同样的操作。
mytuple = ("Jane",)print(mytuple)
('Jane',)type(mytuple)
tuple
4.列表理解中的多个可重复项
列表理解是 Python 最好的特性之一。它提供了一种基于其他可迭代对象(如集合、元组、其他列表等)创建列表的方法。
列表理解也可以描述为用更简单、更吸引人的语法来表示 for 和 if 循环。不过,它们也比循环快。
这里有一个简单的例子。
a = [1, 2, 3]mylist = [x**2 for x in a]mylist
[1, 4, 9]
新列表包含列表 a 中每个项目的方块。列表理解允许在不同的可重复项中使用多个项目。例如,我们可以基于另外两个列表创建一个列表。
考虑以下列表 a 和 b。
a = [1,2,3]b = [6,7,8]
我想创建一个包含列表 a 和 b 中具有相同索引的产品的列表。因此,新列表将包含项目 6、14 和 24。下面的列表理解似乎是这个任务的一个很好的解决方案。
newlist = [x*y for x in a for y in b]
让我们检查结果。
newlist
[6, 7, 8, 12, 14, 16, 18, 21, 24]
这不是我们所需要的。不是将具有相同索引(16、27 和 3*8)的项目相乘,而是将第一个列表中的所有项目与第二个列表中的所有项目相乘。它实际上是一个叉积。
Python 为我们的问题提供了一个很好的解决方案:zip 函数。
newlist = [x*y for x, y in zip(a,b)]newlist
[6, 14, 24]
zip 函数返回一个 zip 对象,该对象包含两个列表中匹配项的元组。
list(zip(a, b))[(1, 6), (2, 7), (3, 8)]
我们已经讨论了 4 个不太明显的 Python 特性。它们可能会让你犯一些乍一看很难注意到的错误。然而,这样的错误可能会有严重的后果,尤其是当你在一个长脚本中使用它们的时候。
感谢您的阅读。如果您有任何反馈,请告诉我。
4 个 Python 库,使得处理大型数据集更加容易
原文:https://towardsdatascience.com/4-python-libraries-that-ease-working-with-large-dataset-8e91632b8791?source=collection_archive---------8-----------------------
阅读和处理大型数据集的基本指南
图片来自 Pixabay
Pandas 是数据科学社区中流行的 Python 库之一。它为 Python 语言提供了高性能、易于使用的数据结构和数据分析工具。但是在处理大规模数据时,它却失败得很惨。
Pandas 主要使用单个 CPU 内核来处理指令,并且没有利用在 CPU 的各个内核之间扩展计算来加速工作流。Pandas 在读取大型数据集时会导致内存问题,因为它无法将大于内存的数据加载到 RAM 中。
还有其他各种 Python 库,它们不会一次加载大量数据,而是与系统操作系统交互,用 Python 映射数据。此外,它们利用 CPU 的所有内核来加速计算。在本文中,我们将讨论 4 个可以读取和处理大型数据集的 Python 库。
***Checklist:***
**1) Pandas with chunks
2) Dask
3) Vaex
4) Modin**
1)大块阅读使用熊猫:
Pandas 将整个数据集加载到 RAM 中,而在读取大型数据集时可能会导致内存溢出问题。其思想是以块为单位读取大型数据集,并对每个块执行数据处理。
样本文本数据集可能有数百万个实例。这个想法是在每个块中加载 10k 个实例(第 11–14 行),对每个块执行文本处理(第 15–16 行),并将处理后的数据附加到现有的 CSV 文件中(第 18–21 行)。
(作者代码)
2) Dask:
Dask 是一个开源的 Python 库,它提供了对大于内存的数据集的多核和分布式并行执行。Dask 提供了该功能的高性能实现,可在 CPU 的所有内核上并行实现。
Dask 提供了类似于 Pandas 和 Numpy 的 API,这使得开发者在库之间切换变得很容易。
(作者代码)
阅读我以前关于 dask 的文章,深入了解 Dask 数据框架
3) Vaex:
Vaex 是一个 Python 库,它使用一个表达式系统和内存映射来与 CPU 交互,并在 CPU 的各个内核之间并行化计算。Vaex 覆盖了 pandas 的一些 API,对于在标准机器上执行大型数据集的数据探索和可视化是有效的。
请阅读我以前关于 Vaex 的文章,了解如何使用 Vaex 来加速文本处理工作流。
4)摩丁:
熊猫使用单个 CPU 核心来处理计算,而不是利用所有可用的核心。Modin 利用系统中所有可用的内核来加速 Pandas 的工作流程,只需要用户在笔记本上修改一行代码。
阅读我以前关于 Modin 的文章,更多地了解 Modin 如何扩展您的数据探索和可视化
结论:
在本文中,我们介绍了 3 个 Python 库,它们让开发人员能够轻松处理大型数据集。Pandas 在读取 CSV 文件时将整个数据集加载到 RAM 中,这使得很难处理内存不足的数据。使用 Pandas 读取和处理文件使得处理大型数据集变得更加容易。
阅读我以前关于一些分布式库和类似主题的基本指南的文章:
- 摩丁——加速你的熊猫笔记本、脚本和图书馆
- 达斯克如何加速熊猫生态系统
- 使用 Vaex 处理 2 亿行数据集
- Python 中多重处理的基本指南
参考资料:
[1] Pandas 文档:https://Pandas . pydata . org/docs/reference/API/Pandas . read _ CSV . html
感谢您的阅读
4 个 Python 库来检测英语和非英语语言
原文:https://towardsdatascience.com/4-python-libraries-to-detect-english-and-non-english-language-c82ad3efd430?source=collection_archive---------0-----------------------
我们将讨论用于语言检测的 spacy-langdetect、Pycld2、TextBlob 和 Googletrans
照片由 e 在 Unsplash 拍摄
您确定您的模型的输入文本数据是英文的吗?嗯,没有人能确定这一点,因为没有人会阅读大约 20k 条文本数据记录。
那么,非英语文本会如何影响你的英语文本训练模型呢?
挑选任何非英语文本,并将其作为输入传递给英语文本训练分类模型。你会发现这个类别是由模型分配给非英语文本的。
如果您的模型依赖于一种语言,那么文本数据中的其他语言应该被视为干扰。
但是为什么呢?
文本分类模型的工作是分类。而且,不管输入文本是不是英文,它都会完成它的工作。
我们能做些什么来避免这种情况?
你的模型不会停止对非英语文本的分类。因此,您必须检测非英语文本,并将其从训练数据和预测数据中移除。
这个过程属于数据清理部分。数据中的不一致将导致模型准确性的降低。有时,文本数据中存在的多种语言可能是您的模型行为异常的原因之一。
因此,在本文中,我们将讨论检测文本数据语言的不同 python 库。
让我们从空间库开始。
1.空间
您需要安装 spacy-langdetect 和 spacy python 库,下面的代码才能运行。
#1.下载最匹配的默认模型并创建快捷链接。
#2.将 LanguageDetector()函数和模型添加到 NLP 管道。
#3.将文本数据传递到管道中进行语言检测。
#4 将检测到的语言和精度存储在 detect_language 变量中。
我们仅使用单一语言文本数据测试了上述库。当文本有多个语言句子时会发生什么?
让我们找出答案。
预测的语言是 en,也就是英语。预测准确率也低。但是,这篇文章也有一个德语句子。这个图书馆没有预测到这一点。
原因?
该库返回检测到的较长句子的语言。
spaCy 是一个 python 库,用于不同的自然语言处理(NLP)任务。它正在 spaCy NLP 管道中部署 spacy_langdetect 库模型。
在这里了解的空间。在这里了解spacy _ lang detect。
2.Pycld2
如果我们想知道所有句子的检测语言呢?
在这种情况下,使用下面的代码。您需要安装 pycld2 python 库才能运行下面的代码。
Pycld2 python 库是用于压缩语言 Detect 2 (CLD2)的 python 绑定。您可以探索 Pycld2 的不同功能。在这里了解一下pyc LD 2。
3.文本 Blob
假设您正在使用 TextBlob 执行 NLP 任务。那么你会使用 spaCy 还是 TextBlob 进行语言检测呢?我会使用 TextBlob,你也应该。
我们也喜欢选择。
您需要安装 textblob python 库才能运行以下代码。
TextBlob 还返回检测到的较长句子的语言。对多语言句子使用 pycld2 库。
你知道“汝”代表哪种语言吗?
如果你没有,那就访问这个 维基百科链接 。或者你可以查看下面的列表。它是数据科学中使用的语言的标准缩写形式(ISO 639-1 代码)。
TextBlob 提供了一个 API 来执行不同的 NLP 任务。TextBlob 的一些应用是文本处理、情感分析、分类、拼写校正、关键词提取、词性标注等。在这里了解text blob。
4.Googletrans
Googletrans python 库使用 google translate API 检测文本数据的语言。但是这个库不靠谱。所以,在使用这个库之前要小心。您可以将这个库视为语言检测的另一个选择。
您需要安装 googletrans python 库才能运行以下代码。
Googletrans 也有语言翻译的功能。在这里了解一下Google trans。
语言检测的应用
- 根据语言找出文本数据中的偏差。
- 你可以根据不同的语言对文章进行分类。
- 语言通常与地区相关联。这种方法可以帮助你根据语言对文章进行分类。
- 您可以在语言翻译模型中使用这种方法。
- 您可以在数据清理和数据操作过程中使用它。
结论
对于文本数据,我们应该将语言检测视为数据清理过程之一。互联网文本数据并不总是以英语呈现。
在这篇文章中,我解释了不同的 python 库来检测语言。
这些库将帮助您消除数据中的噪声。最好知道你的数据是无噪声的。如果您的模型在新数据上表现不佳,您就消除了一个原因。
希望这篇文章能帮助你减少数据中的噪音。
4 Python Pandas 函数更好地服务于字典
原文:https://towardsdatascience.com/4-python-pandas-functions-that-serve-better-with-dictionaries-bbfcc6c39fa5?source=collection_archive---------6-----------------------
多利用熊猫。
照片由 Lefteris kallergis 在 Unsplash 拍摄
Pandas 可以说是数据科学生态系统中最受欢迎的数据分析和操作库。首先也是最重要的,它很容易学习,并且提供了直观的语法。
话虽如此,我们还是要关注熊猫的另一大特点:灵活性。
Pandas 功能的能力可以通过使用参数来扩展。例如,“read_csv”函数有一个“usecols”参数,它允许我们读取 csv 文件中列的子集。
此外,一些函数有接受 Python 字典作为参数的参数。它进一步增加了灵活性,并加快了几个操作。
在这篇文章中,我们将讨论 4 个熊猫的功能,它们可以在字典的帮助下更好地发挥作用。
让我们从创建一个样本数据框开始。
import numpy as np
import pandas as pddf = pd.DataFrame({
"Group": ["A","B","B","C","A","A","C"],
"Price": ["125","100","120","36","98","170","111"],
"Weight": ["12.13","16.21","9.54","7.99","10.06","15.14","10.54"]
})
df(作者图片)
1.Astype
“astype”函数可用于更改列的数据类型。我以所有列都具有 object 数据类型的方式创建了数据框。
然而,似乎 price 和 weight 列的数据类型应该分别改为 integer 和 float。
一种选择是逐个更改数据类型。
df["Price"] = df["Price"].astype("int")df["Weight"] = df["Weight"].astype("float")
更实用的方法是将字典传递给“astype”函数,并在一个步骤中更改两种数据类型。
df = df.astype({"Price":"int", "Weight":"float"})
让我们检查一下新的数据类型:
df.dtypesGroup object
Price int32
Weight float64
dtype: object
2.替换
顾名思义,替换函数用于更改数据框中的值。
它有两个参数:一个是要替换的值,另一个是新值。
replace 函数也接受一个字典,这样我们可以一次替换多个值。
让我们更新组列中的值。
df["Group"] = df["Group"].replace(
{"A": "Group A", "B": "Group B", "C": "Group C"}
)
df(作者图片)
3.菲尔娜
在数据清理过程中,我们经常需要处理缺失值。“fillna”函数可用于通过适当的替换来更新缺失值。
假设我们在多列中有缺失值,并希望使用单独的值来填充每列中缺失的值。
正如你可能猜到的,解决方法是使用字典。
让我们首先向数据框中添加一些缺失值。
df.iloc[:2, :2] = np.nan
df(作者图片)
我想将“组 A”用于“组”列,将 100 用于“价格”列,作为缺失值的替换。
df = df.fillna({"Group": "Group A", "Price": 100})
df(作者图片)
4.应用
应用函数用于将函数应用于沿轴(即行或列)的数据框中的值。
轴可以用轴参数改变。默认值为 0,表示该函数与索引一起应用(例如,应用于每一列)。
通过使用字典,我们可以对不同的列应用不同的函数。
例如,下面的代码将“价格”列中的值加 10,并将“重量”列中的值增加 10%。
df.apply({"Price": lambda x: x + 10, "Weight": lambda x: x * 1.1})
(图片由作者提供)
我们已经讨论了 4 个 Pandas 函数,它们通过使用 Python 字典提供了更多的功能。
这些不是唯一可以和字典一起使用的熊猫函数。例如,“read_csv”、“agg”和“round”函数也接受 Python 字典作为参数。
你可以成为媒介会员来解锁我的作品的全部权限,以及媒介的其余部分。如果您使用以下链接,我将收取您的一部分会员费,无需您支付额外费用。
https://sonery.medium.com/membership
感谢您的阅读。如果您有任何反馈,请告诉我。
在 SQL 中组合数据的 4 种非常重要的方法
原文:https://towardsdatascience.com/4-really-important-ways-to-combine-data-in-sql-b7a5bc1a3b5b?source=collection_archive---------42-----------------------
蒂姆·约翰逊在 Unsplash 上拍照
因为不是所有的数据都存储在同一个位置。
对我来说,SQL 中的连接是很难理解的事情之一,但是理解起来非常重要。经过一些实践和这篇文章,希望混乱会*息。
正如标题所说,在 SQL 中至少有 6 种连接数据的方法。以前我写过关于要学习的基本 SQL 技能。你可以在这里阅读文章。
SQL 基础知识。足够危险。斯科特·费恩|抄本| Medium
你还可以找到我的 GitHub 上使用的所有代码。
让我们看一下将要使用的表格,快速复习一下。以下代码将创建临时表,我们将使用这些表来讨论连接。
DROP TABLE IF EXISTS customers CASCADE;
DROP TABLE IF EXISTS orders CASCADE;CREATE TEMP TABLE customers (
cust_id INT PRIMARY KEY NOT NULL,
first_name VARCHAR(200) NOT NULL,
lifetime_value FLOAT NULL
);CREATE TEMP TABLE orders (
order_id INT PRIMARY KEY NOT NULL,
cust_id INT NOT NULL,
date DATE NULL,
product VARCHAR(200) NOT NULL,
CONSTRAINT fk_customer
FOREIGN KEY(cust_id)
REFERENCES customers(cust_ID)
ON DELETE CASCADE
);INSERT INTO customers VALUES (1, 'Jim', 4003)
, (2, 'Albert', 49024)
, (3, 'Juanita', 3200)
, (4, 'Bill', 5000)
, (5, 'Leslie', 23500)
, (6, 'Fredrick', NULL)
, (7, 'Ricky', NULL)
, (8, 'Dean', NULL);INSERT INTO orders VALUES (1, 1, '01/01/2020', 'Pen')
, (2, 2, '04/20/2021', 'Scissors')
, (3, 1, '02/28/2021', 'Paper')
, (4, 3, '03/25/2021', 'Paper')
, (5, 4, '06/01/2021', 'Computer')
, (6, 5, '12/24/2020', 'Stapler')
, (7, 3, '01/19/2021', 'Desk')
, (8, 4, '01/28/2021', 'Pens')
, (9, 2, '05/08/2021', 'Paper Clip')
, (10, 1, '06/02/2021', 'Scissors');
一旦创建了表,让我们看看它们是什么样子的。
SELECT *
FROM customers;
客户表
SELECT *
FROM orders;
订单表
好了,现在我们知道了表包含的内容,让我们继续讨论连接。
连接
SQL 中有许多联接,但在我看来,最有用的是以下几种:
- 内部连接
- 左连接
这绝不是一个详尽加入名单,而是一些磨你的哨子。让我们从集合论开始。现在你可能还记得高中时的事,也可能不记得。集合论在连接中起着重要的作用,因为它处理两个或多个对象的集合。
内部连接
在集合论和内部连接中写的是 A⋂B,也就是所谓的交集 b。它只是 a 和 b 重叠的地方。
内部连接
这可能是 SQL 中最常见的连接类型。它只返回两个表中指定列匹配的行,因此返回两个表的交集⋂。
要在 SQL 中执行内部连接,您需要指定两件事。
- 什么类型的联接,在本例中是内部联接
- 要联接的列,cust_id。这是使用关键字 ON 完成的
SELECT *
FROM customers c
JOIN orders o ON c.cust_id = o.cust_id;SELECT *
FROM customers c
INNER JOIN orders o ON c.cust_id = o.cust_id;
请注意,有两种不同的方法可以产生相同的结果。这是因为除非指定,否则内部联接是默认的联接类型。这两种方式你都可以写,但是我更喜欢第二种方式,因为它可读性更好,并且对将来阅读你的代码的人有帮助。
以上两个查询的输出将只输出每个表中有相同 cust_id 的行。
内部联接输出
左连接
既然我们已经讨论了内部连接,那么让我们来讨论一下左连接是做什么的。当讨论集合论中的左连接时,它们被写成 A,或简单的全表 A。
左连接
这是 SQL 中第二常见的连接类型,它返回表 A 中的所有行,并且只返回表 B 中与 A 中的指定列相匹配的行。
要在 SQL 中执行左连接,您需要指定两件事。
- 什么类型的连接,在这种情况下是左连接
- 要联接的列,cust_id。这是使用关键字 ON 完成的
SELECT *
FROM customers c
LEFT JOIN orders o ON c.cust_id = o.cust_id;
SELECT *
FROM customers c
LEFT OUTER JOIN orders o ON c.cust_id = o.cust_id;
就像内部连接一样,有两种不同的方式来编写左连接,这两种方式产生相同的结果。再说一遍,我更喜欢第二种方式,因为它可读性更强,并且对将来阅读你的代码的人有所帮助。
以上两个查询的输出将输出左表中的所有行和右表中的匹配行。现在,在这种情况下,左边的表被认为是 FROM 子句中指定的表,右边的表是 JOIN 子句中指定的表。
左连接输出
这些可能是最有用的连接,现在你知道如何使用它们了。接下来,我们来谈谈工会。
联合
对于联合,我们将使用与连接部分相同的两个表,因为我们熟悉这些数据。
请记住,联接用于向查询输出添加更多的列,而联合用于向查询输出添加更多的行。也就是说,有很多方法可以做到这一点,团结和团结。
联盟
第一种联合方法就是 union。这种特殊的方法将向输出中添加行,但有一些细微差别。首先,两个查询的结构需要完全相同,其次,该方法将自动删除重复项。
让我们来分解一下。
SELECT *
FROM customersUNIONSELECT *
FROM customers;
您可以运行 single select 并查看结果,但它们将与 union 相同。这是因为 UNION 删除了重复项,所以它们本质上是一回事。
工会产出
联合所有
我们将运行完全相同的查询,但是这次我们将指定 UNION ALL 而不是 UNION
SELECT *
FROM customersUNION ALLSELECT *
FROM customers;
使用 UNION ALL 时,不会删除重复项。因此,运行上面的查询将产生下面的结果,这实际上是堆叠在自身上的 customers 表。
关于工会和工会,我在工作中学到的是:
你最好有一个真正好的理由来解释你为什么使用 UNION ,否则就使用 UNION ALL 。
我希望这能帮助您理解如何更好地组合您的数据。感谢您的阅读。
相关性并不意味着因果关系的 4 个原因
原文:https://towardsdatascience.com/4-reasons-why-correlation-does-not-imply-causation-f202f69fe979?source=collection_archive---------7-----------------------
性生活越多,收入越高?如何区分相关性和因果性?
Lea L 在 Unsplash 上拍摄的照片
*“相关性并不意味着因果关系”*这句话已经成为各种各样的陈词滥调。当热情的读者阅读声称两个变量之间存在难以置信的联系的文章时,这似乎是他们在评论区输入的短语。
“相关并不意味着因果关系”是什么意思?我们什么时候应该使用这个短语?我们如何区分相关性和因果关系?相关性不等于因果性的原因是什么?这些是我们在这篇文章中要解决的问题。
相关性与因果关系
当 X 和 Y 趋向于一起变化和移动时,我们说它们是相关的,无论是正向还是负向。在下图中,X 和 Y 有正相关(左),负相关(中),无相关(右)。
作者插图
当 X 的变化导致 Y 的变化时,我们说 X 导致了 Y。另一种说法是,如果没有前面 X 的变化,Y 的变化就不会发生。
作者插图
格言“相关性并不意味着因果关系”是如何思考两个变量 X 和 Y 之间关系的一个有用的提醒。如果 X 和 Y 似乎有联系,有可能但不确定是 X 导致了 Y。也有可能是 Y 导致了 X,或者是某个第三变量(Z)导致了 X 和 Y。
然而,当一个人听到两个变量之间可疑的因果联系时,这个短语有时可能是下意识的反应。通常,这句话是以一种轻蔑的语气说出来的,似乎暗示着“相关性”不如“因果性”联系。这是不幸的,因为相关性可能是有趣的,即使它们不呈现因果关系。相关性可以告诉我们有趣的事情,可以帮助我们理解可能的因果联系。但我们在理解和解释这种相关性时需要小心谨慎。
性生活越多,收入越高?
为了说明我们如何区分相关性和因果关系,让我们看看一篇声称更多的性行为导致更高收入的文章。2013 年夏天,Gawker.com上发表了一篇文章,标题为“更多的钱用于你的性爱:性生活越多的人赚钱越多”。作者马克斯·里夫林-纳德勒写道:“科学家……发现,每周性生活超过四次的人比每周仅性生活一次的人收入高出 3.2%。上帝禁止你根本不做爱。”**
Gawker 的这篇文章基于安格利亚·罗斯金大学经济学教授 Nick Drydakis 的一项名为“性活动对工资的影响”的研究。在他的研究中,Drydakis 调查了 7500 个希腊家庭(不是 Gawker 文章所说的德国家庭)的性交频率和收入之间的关系。
需要澄清的是,Dryadkis 并没有声称他的研究表明更多的性生活会导致更高的收入。他写道,像现有的研究一样,从因果关系中理清相关性是很困难的:“目前还不清楚这种相关性是否代表因果关系……因为目前的研究结果严格地只适用于时间、地点、样本的个人特征,我们应该强调的是,报道的结果只是性活动和工资之间关系的一个指标,但绝不是最终的结论。”**
这项研究和 Gawker 文章中对其结果的相应(错误)解释是“相关性并不意味着因果关系”准则发挥作用的好例子。首先,这项研究主要关注相关性,但这种关系被媒体解释为因果关系。其次,这导致了一些读者的反弹,他们警告 Gawker 文章的作者要小心混淆相关性和因果关系。第三,尽管其非因果性质,研究结果仍然可以说是有趣的。这当然在当时引起了互联网的关注!
有鉴于此,让我们看看为什么相关性并不意味着因果关系的原因。
相关性≠因果关系的 4 个原因
(1)我们遗漏了一个重要因素(省略变量)
相关性可能不等于因果性的第一个原因是,有一些第三变量(Z)同时影响 X 和 Y,使 X 和 Y 一起移动。这种缺失(通常未观察到)变量 Z 的技术术语是“省略变量”。在关于性别与收入关系的研究中,什么第三个因素(Z)能使人们拥有更多的性(X)和更多的钱(Y)?
Drydakis 认为,身体健康是第三个重要的变量:“在这项研究中,我们假设,因为医学和心理学文献表明,性活动与健康、耐力、心理健康、智力和饮食习惯有关,所以它可以被视为一个健康指标,这可能会影响劳动力市场活动的回报……这项研究中发现的模式加强了这一推理。”换句话说,身心健康很可能会影响性活动水*和收入。在其他条件相同的情况下,更健康的人更有可能有更多的性生活和更高的收入,即使前者不会导致后者。
作者插图
可能还有许多其他被忽略的变量影响着人们的性生活频率和收入水*。例如,Drydakis 还发现,某些性格特征(Z)会影响性活动和工资。特别是,外向性被发现影响这两种结果。这似乎是合理的:外向的人可能更容易与他们感兴趣的人搭讪,并以可能获得更高工资的方式展示自己(例如,自信地讨价还价/谈判工资)。
你还能想到哪些省略的变量?
(2)我们得到的东西正好相反(反向因果关系)
X 和 Y 一起移动并不意味着 X 导致 Y 的第二个原因是 Y 可能导致 X。这方面的专业术语是“反向因果关系”。
作者插图
在 Gawker 文章的评论部分,许多读者认为这是怀疑性活动对工资的因果影响的主要原因。一位评论者写道,“性生活最频繁的人赚钱最多?还是说赚钱最多的人性生活最多?”。另一位写道:“更正:赚最多钱的男人得到最多的性爱。”还有一个人写道:“我认为你弄错了。当你破产的时候,有没有试过做爱?”**
你明白要点了。
(3)我们正在寻找不寻常的人(样本选择)
相关性并不意味着因果关系的第三个原因是,我们看到的样本并不代表感兴趣的总体。用专业术语来说,我们有“样本选择”。
作者插图
样本选择的经典例子是基于诺贝尔奖得主詹姆斯·赫克曼的工作。假设你想知道为什么有人会得到他们应得的工资。你出去收集一些关于一些结果 Y(例如工资)和一些你认为可能影响你获得多少报酬的利益变量 X(教育程度、职业)的数据。赫克曼指出,在这样的调查中,你只能收集实际工作人员的工资信息。你无法获得不工作的人的结果信息。此外,工作的人是以某种非随机的方式从人群中挑选出来的(例如,你不太可能在这个群体中找到新妈妈)。因此,估计这个选定群体的工资决定因素可能会导致我们得出不准确的结论。
这和性别收入关系的研究有什么关系?可能的情况是,大量的失业人员(因此收入为 0)有很多性生活,但他们从未出现在数据中,因为他们的工资为零,如果这些人出现在数据中,那么这种关系可能看起来非常不同!
(4)很难测量事物(测量误差)
相关性并不意味着因果关系的第四个原因是,我们感兴趣的结果很难测量,因此只能不完全观察到。这用专业术语来说就是“测量误差”。
当你要求人们报告有争议或敏感的话题时,比如,呃,他们做爱的频率,这是一个特别的问题。当你问人们他们打算投谁的票或者他们对各种有争议的问题的态度时,也有类似的问题。
当具有某些特征的某些类型的人更有可能误报我们感兴趣的变量时,这可能会导致我们推断出不正确的关系。正如一位读者评论的那样:“也可能是这样,在收入问题上撒谎的人,往往也会在性生活次数上撒谎。”**
考虑一个类似的场景,某些类型的男人觉得有必要多报性接触的次数,他们也是追求高薪工作的男人,因为他们相信这两者都能给他们带来声望。在这种情况下,看起来好像有更多报告性经历的人也有更高的工资,而事实上这种关系是因为他们误报了他们的性活动。
外卖食品
事实上,相关性并不意味着因果关系。每当我们看到两个变量之间的关系时,明智的做法是保守地假设这种关系是相关的而不是因果的。
然而,这并不意味着相关性是无用的。我们不应该完全忽视相关性,我们需要小心我们如何解释这些相关性。意识到“相关性并不意味着因果关系”是一个起点,但是在没有准确考虑为什么相关性不等于因果关系的情况下抛出这一短语对讨论没有什么帮助。
在本文中,我们讨论了相关性不等于因果关系的 4 个常见原因。每当我们看到两个变量一起移动,并倾向于在两者之间建立因果关系时,我们应该停下来问自己以下问题:
(1) 我们是否忘记了影响 X 和 Y 的任何变量 Z?(省略变量)
(2) 是 Y 导致了 X 而不是 X 导致了 Y?(反向因果关系)
(3) 谁失踪了?(样本选择)
(4) 测量 X 和 Y 有多容易?(测量误差)
对这些问题的回答要有创造性,这是避免将相关性和因果性混为一谈的一种方法。希望它甚至可以引导我们考虑其他我们以前没有考虑过的关系。毕竟,研究相关性可能是发现更有趣的东西的起点。
每个数据科学家都应该学习组织心理学的 4 个理由
原文:https://towardsdatascience.com/4-reasons-why-every-data-scientist-should-study-organizational-psychology-a9411fd6030b?source=collection_archive---------7-----------------------
在 Unsplash 上由 mariel reiser 拍照
因为我们经常模仿人们的行为,我们仍然需要和人们一起工作
理解人的因素以及如何使用它们是数据科学的重要方面。组织心理学领域为我们提供了许多关于人类行为、动机、恐惧和价值观的见解,可以帮助数据科学家更好地了解他们的客户。这篇博客文章将涵盖四个原因,为什么每个数据科学家都应该学习组织心理学,以便对他们的产品或服务做出更明智的决定,从而创造出不仅有效而且有吸引力的东西。
1.数据科学家不仅仅是统计学家,我们还必须能够理解人
让我们面对它,很容易添加一堆输入数据,并看看它们是否是监督模型的良好预测器或无监督模型的一个好的聚类集。一旦我们可以让模型达到“可接受”的水*,我们通常会根据人们(如客户)的行为和动机来解释结果。然而,有些时候,我们用心理学来回顾性地解释我们的模型可能不是首选的方式。
我们是数据科学家,因为我们拥有使用数据构建产品或回答业务问题的技术技能,即使数据不完整且包含错误。然而,当我们试图预测涉及人们行为和动机的结果时,数据科学家需要能够理解哪些因素会影响他们的决策,最好是在开始收集数据和测试之前。
换句话说,数据科学家不仅应该在构建产品时使用数据,还应该考虑心理学,以便为客户创造真正有效的东西。这就是组织心理学发挥作用的地方,因为它对工作、决策以及动机和恐惧等人性有许多见解。
组织心理学让数据科学家更好地理解了人们如何以及为什么以特定的方式做出某些决定或行为,这可以帮助数据科学家为他们的客户创造一些有价值的东西,而不仅仅是另一个可能没有击中目标的产品。
2.学习组织心理学将向你介绍适用于所有行业的概念,如社会认知和自我认知理论
例如,社会认知理论解释了人、环境和行为之间的关系。这一理论通常用于开发程序来启动行为改变。对于数据科学家来说,当设计一个需要某种干预来触发行为变化的模型时,很好地理解这一理论将对你的方法产生重大影响。
自我认知理论是源于组织心理学的另一个常见术语。该理论指出,人们倾向于根据他们采取的行动对自己的想法、感觉或意图做出推断,而不是直接观察他们的实际行为。这意味着数据科学家必须仔细设计数据收集,以获得关于行为或活动的最准确信息。此外,捕捉感知变量也可能是这一过程的关键部分。
3.学习组织心理学将教会你如何在分析数据时更加意识到自己的偏见和假设
这些组织心理学概念将帮助数据科学家理解人们如何思考和决策。例如,我们应该意识到认知偏差会在很大程度上影响数据科学项目(这是我们都容易发生的)。例如,确认偏差是指我们倾向于寻找确认我们先入之见的信息,而忽略与这些先入之见不匹配的数据点。我确信我们意识到了这种偏见,但是很难控制。
科学家应该注意的另一种偏差是锚定偏差。当数据点受到我们在决策过程中所查看的数据的过度影响时,就会发生这种情况(例如,使用什么数据进行分析)。还有群体思维,当每个人都同意一个想法,但没有人对它进行批判性思考或提出相反的观点时,这种思维可能是有害的。所有数据科学家都应该意识到这些偏见,以及它们如何影响数据科学项目。
4.组织心理学家研究领导风格、团队动力、激励和冲突解决等主题,所有这些对于任何希望建立成功团队或领导他人的数据科学家来说都很重要
作为数据科学家,我们需要了解数据集的心理,以便有效地处理数据。我们还需要激励自己和他人,以便每个人都尽自己所能在预算内按时交付成果。你可能是领导数据科学团队的团队领导或高管。有许多数据科学角色需要有人来领导其他人。如果您是担任这一职位的数据科学家,了解数据科学家的心理对于作为团队领导和高管取得成功至关重要。
组织心理学家研究的主题包括领导风格、团队动力、激励和冲突解决,所有这些对于任何希望领导团队的数据科学家来说都很重要。为你的直接下属设定明确的目标,并允许他们对自己的工作负责,这是强有力的领导的例子。因此,更深入地理解这些基于心理学的概念,并将它们应用到您的日常工作中,将会为您和您的团队带来更有成效、更令人满意的工作体验。
我希望这篇文章能给你一些新的想法,告诉你如何思考与你的数据科学工作相关的组织心理学。这是一个显而易见的话题,但有一点是肯定的:作为数据科学家,我们拥有的知识和视角越多,我们的工作就会越好。因此,如果你想知道为什么每个数据科学家都应该学习组织心理学,或者想了解它对你的公司意味着什么,请在下面留下评论。我很高兴与任何想继续讨论这个话题的人联系。
关于这篇文章,我也发表了一篇关于利益相关者管理对数据科学项目的重要性的文章在这里。如果你也喜欢这些类型的文章,请随时告诉我。
为什么 Plotly 是最好的可视化库的 4 个理由
原文:https://towardsdatascience.com/4-reasons-why-plotly-is-the-best-visualization-library-18c27de05b95?source=collection_archive---------9-----------------------
一旦你去密谋,你就不能回去
杰森·布里斯科在 Unsplash 上的照片
数据可视化是数据科学家的语言。
如果你从事数据行业,你可能需要向某人展示数据。没有一些可视化的魔法,你是做不到的。
随着科技行业的成熟,对更好的可视化的需求也在增加。每种类型的可视化都有其特点,就像折线图比条形图更好地描述趋势一样。
选择可视化的类型已经够让人头疼的了。让我们不要搞乱将会把它们都标绘出来的库。
作者截图
听说过 剧情 吗?
您可能听说过 Matplotib 和 Seaborn,因为它们经常在数据科学课程中被提及。但是您知道这些库是为基本绘图而设计的吗?
甚至 Matplotlib 的官方功能也声明:
Matplotlib 主要用于基本绘图*。— Matplotlib*
以非凡的方式显示您的数据。用 Plotly。
Plotly 是用于交互式数据可视化的 Python 库。Plotly 在解释和探索数据方面非常强大。继续读下去,你就会明白为什么了。
交互性
约翰·施诺布里奇在 Unsplash 上拍摄的照片
Plotly 提供了一个其他可视化库没有的特性——交互性。
这使得用户可以与显示的图形进行交互,从而获得更好的讲故事体验。放大和缩小,点值显示,*移图形,你能想到的,他们都有。
作者录音
能够流畅地浏览您的可视化在数据交流中发挥着巨大的作用。观察使用 Plotly 提供的交互式工具解释复杂数据是多么容易。
与静态图相比,这是领先英里。
现在,让我们更进一步。
作者录音
Plotly 允许用户通过使用可定制的交互工具来进一步改善可视化体验。当我们用 Plotly 可视化数据时,我们可以添加交互式功能,如按钮、滑块和下拉菜单,以显示图形的不同视角**。**
这些互动功能完全可定制显示您想要的内容和您想要的方式。从图表标题到 Y 轴刻度,您可以随时控制显示的内容。在向企业主展示数据时,这一点非常重要,因为它可以更清晰地传达你的观点。
定制和灵活性
由精心下拉
Plotly 就像一张纸,你可以在上面画任何你想画的东西。
与 Tableau 等传统可视化工具相比,Plotly 允许完全控制正在绘制的内容。
由于 Plotly 是基于 Pandas 绘制的,您可以在绘制之前轻松地对数据执行复杂的转换。一个例子是在可视化数据列之前对其进行算术运算,如单位转换。你的创造力是极限。
全面定制包括但不限于—
- 任何时候要显示多少图表
- 下拉菜单等交互式工具的数量
- 每个下拉菜单上的标题、轴、数据源规格
Plotly 通过在绘图过程中定义 3 个主要对象来实现这一点—
数据、布局和图形对象。
- 数据-通常是熊猫数据框。完全可定制的数据点
- 布局—定义绘图标题、x 轴和 y 轴标题、显示图例、激活过滤器/滑块,以及对图表的更多自定义。
- 图-定义如何根据布局绘制数据
通过正确定义每个对象,您可以以任何想要的方式轻松地构建和重建图形。
系列和美学
来自精彩公告的精彩示例
除了能够绘制所有的 Matplotlib 和 Seaborn 图表,Plotly 还提供了大量的图形和图表,如
- 统计图包括但不限于*行类别和概率树图
- 你从未想到的科学图表,从网络图到雷达图
- 财务图表对时间序列分析很有用,例如蜡烛图、漏斗图和子弹图
- 地质图和允许你与之互动的三维绘图
最重要的是,Plotly 可能是最好看的(有待商榷?)图表库就在那里。Plotly 还为工程师提供了更加清晰易懂的代码库。
KNN 分类器由精心策划
当 Plotly 不用于仪表板和数据探索时,它用于机器学习。Plotly 提供了广泛的 AI 和 ML 图表,可以提升你的机器学习游戏。
当 Plotly 用于仪表板时,它由仪表板支撑。
纽约石油天然气由 Dash App 图库
Dash 是一个 Python 框架,允许你创建由 Flask、Plotly.js 和 React.js 支持的惊人的 web 应用。Dash 在构建数据可视化应用方面效率极高,你不需要了解任何 HTML、CSS 或 Javascript。
你只需要知道 Plotly。
Dash 消除了所有需要了解 web 开发的担忧,包括部署应用程序的头痛问题。它很容易维护,跨*台,并且移动就绪。
我在这里谈论更多—
支持
由 Lagos Techie 在 Unsplash 拍摄的照片
Plotly,这个库,是由名为 Plotly 的公司做后盾,该公司还负责开发 Dash 。该公司总部设在蒙特利尔,在波士顿设有办事处。
该公司已经开源了几个可视化产品。它通过为可视化应用程序(主要是 Dash)提供增强的功能、私人托管和持续集成来获得收入。
也就是说,普洛特利*期不会去任何地方。他们官方网站上的文档和指南既复杂又精确。它几乎涵盖了你需要了解的所有事情。
正在为 Plotly 提供持续的支持和开发。
特性不断被添加,一个例子是间隔特性,它在没有任何外部触发的情况下自动激活实时更新。
社区论坛
Plotly 还有一个活跃的论坛,你可以在这里与其他 Plotly 用户互动。这里的成员一般都很友好,乐于助人。如果你有一个问题,很可能已经在论坛上被问过了。快速搜索一下,你就会找到解决办法。
结论
照片由杰森·斯特鲁尔在 Unsplash 上拍摄
如果你们中的任何人对尝试 Plotly 持观望态度,我希望我已经消除了你们的一些疑虑。这可能需要一些时间来学习,但我向你保证这是值得的。
如果我想让你从这篇文章中学到什么,那就是—
pip install plotly
pip install cufflinks
在这篇文章中,我们讨论了为什么 Plotly 是一个伟大的可视化库,因为—
- 交互性
- 定制和灵活性
- 系列和美学
- 支持
像往常一样,我引用一句话作为结束。
数据是新的科学。大数据掌握着答案。”—* 作者帕特·基尔辛格*
订阅我的时事通讯,保持联系。
也可以通过 我的链接 注册一个中等会员来支持我。你将能够从我和其他不可思议的作家那里读到无限量的故事!
我正在撰写更多关于数据行业的故事、文章和指南。你绝对可以期待更多这样的帖子。与此同时,可以随时查看我的其他 文章 来暂时填补你对数据的饥渴。
感谢 的阅读!如果你想和我取得联系,请随时通过 nickmydata@gmail.com 联系我或者我的 LinkedIn 个人资料 。也可以在我的Github中查看之前写的代码。
不应使用机器学习的 4 个理由
原文:https://towardsdatascience.com/4-reasons-why-you-shouldnt-use-machine-learning-639d1d99fe11?source=collection_archive---------16-----------------------
机器学习不是瑞士军刀
纳丁·沙巴纳在 Unsplash 上拍摄的照片
介绍
当机器学习最初出现时,许多人猜测它将引发另一场工业革命。快进到今天,许多人会说这只不过是一个时髦词。
不要误解我。机器学习是一个有用的工具,但也仅此而已。说它像瑞士军刀有点牵强——我认为它更像喷水器(相当小众的东西)。
从我的经验来看,机器学习在很多应用中都大放异彩。例如,亚马逊的推荐系统使销售额增加了 30%以上。然而,在更多的应用中,机器学习是次优的解决方案。
在这篇文章中,我们将讨论不应该使用机器学习的 4 个原因。
说了这么多,让我们开始吧!
请务必 订阅 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!
1.与数据相关的问题
正如在人工智能需求层次中看到的,机器学习依赖于其他几个作为基础的因素。这个基础包括从收集数据、存储数据、移动数据和转换数据的所有内容。重要的是你有一个强大的过程来实现这些初步的步骤,否则你就不太可能有可靠的数据。
为什么这如此重要?你听说过“垃圾进,垃圾出”的说法——你的机器学习模型的性能受到你的数据质量的限制,这就是为什么你从可靠的数据开始是如此重要。
你不仅需要你的数据可靠,还需要足够的数据来利用机器学习的力量。如果不检查这两个标准,您将无法获得 ML 的全部功能。
2.可解释性
有两大类模型:预测模型和解释模型:
- 预测模型只关注模型产生准确预测的能力。
- 解释性模型更侧重于理解数据中变量之间的关系。
机器学习模型,特别是集成学习模型和神经网络,是预测模型——它们在制定预测方面非常出色,远远超过线性/逻辑回归等传统模型的预测能力。
也就是说,在理解预测变量和目标变量之间的关系时,这些模型是一个黑箱。虽然您可能理解这些模型背后的基本机制,但仍然不太清楚它们是如何得到最终结果的。
虽然存在一些技术,如要素重要性和相关矩阵,但它们在理解数据中的关系方面仍然非常有限。总的来说,ML 和深度学习在预测方面很棒,但缺乏解释力。
请务必 订阅 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!
3.技术债务
随着时间的推移维护机器学习模型具有挑战性,并且成本高昂。特别是,在维护机器学习模型时,有几种类型的“债务”需要考虑:
- **依赖债务:**依赖债务是指因不稳定的数据依赖和未充分利用的数据依赖而产生的债务。简单地说,这是指维护同一个模型的多个版本、遗留特性和未充分利用的包的成本。
- 分析债务:这是指如果 ML 系统随着时间的推移而更新,它们往往最终会影响自己的行为,导致直接和隐藏的反馈循环。
- **配置债务:**机器学习系统本身的配置也会招致类似于任何软件系统的债务。应该很容易做出小配置,应该很难出现手动错误,应该很容易看出不同型号之间的差异。
全文是 这里 如果你想了解机器学习系统中隐藏的技术债务。
4.更好的选择
最后,当存在同样有效的更简单的替代方案时,不应该使用机器学习。在我之前的文章中, " 想成为数据科学家,不要从机器学习 *,"*我强调了一点,机器学习并不是每个问题的答案。
一个简单的解决方案需要 1 周的时间来构建,准确率达到 90%,而几乎总是会被选择,而不是一个机器学习模型需要 3 个月的时间来构建,准确率达到 95%。
理想情况下,您应该从您可以实现的最简单的解决方案开始,并反复确定下一个最佳方案的边际收益是否超过边际成本。
如果您可以用 Python 脚本或 SQL 查询解决您的问题,您应该首先这样做。如果你可以用决策树来解决你的问题,你应该首先这样做。如果你能用线性回归模型解决你的问题,你应该首先这么做。
你明白了。更简单=更好。
感谢阅读!
我希望这提供了一些关于机器学习的局限性的见解,以及它为什么不是一个一刀切的解决方案。请记住,这更像是一篇有轶事经验支持的自以为是的文章,所以从这篇文章中获取你想要的。但一如既往,我祝你学习一切顺利!
如果您喜欢这篇文章,请务必订阅https://terenceshin.medium.com/subscribe,千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!
不确定接下来要读什么?我为你挑选了另一篇文章:
**</10-most-practical-data-science-skills-you-should-know-in-2022-9487d7750e8a>
又一个!
[## 六分钟内解释所有概率分布
towardsdatascience.com](/all-probability-distributions-explained-in-six-minutes-fe57b1d49600)
特伦斯·申
- 如果你喜欢这个, 订阅我的媒介 获取独家内容!
- 同样,你也可以 关注我上媒
- 有兴趣合作吗?让我们连线上LinkedIn**
4 sci kit——每个数据科学家都应该使用的学习工具
原文:https://towardsdatascience.com/4-scikit-learn-tools-every-data-scientist-should-use-4ee942958d9e?source=collection_archive---------19-----------------------
复合估算器和变压器
作者: 阿玛尔哈斯尼 & 迪亚赫米拉
照片由桑迪·米勒在 Unsplash 上拍摄
数据科学项目往往包括预处理、功能工程、功能选择、培训、测试之间的多个来回通道…在尝试多个选项时,甚至在生产环境中,处理所有这些步骤会很快变得混乱。幸运的是,Scikit-Learn 提供的选项允许我们将多个估计器链接成一个。换句话说,像 fit 或 predict 这样的特定操作只需要在整个估计序列上应用一次。在本文中,我们将通过一个具体项目的用例实例与您分享其中的四个工具。
目录
1 -管道
2 -函数转换器
3 -列转换器
4 -特征联合
替代语法:make _【composite _ estimator】
奖励:可视化您的管道
热身
在我们开始探索 scikit-learn 的工具之前,让我们先来获取一个可以使用的数据集。
我们应该提到,这只是为了举例。所以不一定需要下载(除非你想自己试代码)。
实际上,我们偶然发现了一个名为 datasets
的漂亮 python 包,它允许您轻松下载 500 多个数据集:
我们将使用亚马逊美国评论。它包含数字和文本特征(例如,评论和它得到的有用投票的数量),目标特征是归属的星的数量。
1 -管道
什么是管道?
为了方便起见,流水线是将估计序列封装成一个序列的工具。
是什么让它有用?
管道之所以方便,有多种原因:
- 紧凑性:您可以避免编写多行代码,也不用担心估计器的顺序。
- 清晰:易于阅读和可视化。
- 易于操作:在整个估计序列上应用拟合或预测方法只需要一个单一的动作。
- 联合参数选择:使用管道可以通过网格搜索一次优化所有估计器的参数。
如何在实践中运用?
实际上,流水线是一束转换器,后面跟着一个估计器。
如果你不知道什么是 transformer,它基本上是实现了 fit
和 transform
方法的任何对象。
在我们的例子中,我们将使用 TfidfVectorizer
将评论从文本数据转换成数字数据,然后尝试使用 RandomForestClassifier
进行预测:
作者图片
双功能变压器
什么是函数转换器?
正如我们在前面提到的,一个 Transformer
需要包含 fit
和 transform
方法。
FunctionTransformer
是一个无状态的转换器,由您创建的 callable
(又名函数)构建而成。
是什么让它有用?
在某些情况下,您需要执行不进行任何参数拟合的变换。在这种情况下,创建一个 fit
方法是没有用的。在这些情况下,FunctionTransformer
将是最有用的。
如何在实践中运用?
我们的数据集包含一个日期格式的要素。我们可以对日期进行转换的一个例子是提取年份。
这是如何使用 FunctionTransformer 实现的:
注意:如果 lambda 函数与FunctionTransformer
一起使用,那么产生的变压器将不可拾取。值得一提的是,您可以通过使用 cloudpickle 包来解决这个问题。
三柱变压器
什么是列变压器?
根据您的数据集,您可能需要对数组或 pandas 数据帧的不同列应用不同的转换。
列转换器允许在连接生成的要素之前应用单独的转换。
是什么让它有用?
这个估计器对于异类数据特别有用。在这种情况下,您需要为列或列子集的数据类型自定义特征提取机制或转换。
如何在实践中运用?
在我们的例子中,我们有文本和数字数据。下面是我们如何使用 Column Transformer 根据数据类型应用单独的转换:
正如所料,ColumnTransformer 的输出数据有 102 列:100 列来自 TF-IDF 转换器,2 列来自规格化器。
作者图片
四特征并集
什么是特征联合?
类似于 ColumnTransformer
,一个 FeatureUnion
串联多个变压器的结果。只是略有不同,因为每个转换器获取整个数据集作为输入,而不是像 ColumnTransformer 中那样获取列的子集。
就您可以用它们做什么而言,这两者是相当等同的,但是根据具体情况,其中一个可能更适合使用,并且需要的代码更少。
是什么让它有用?
FeatureUnion
允许您将不同的特征提取转换器组合成一个Transformer
。
如何在实践中运用?
与前一种情况等效,我们可以通过使用由 ColumnSelector 和给定的 Transformer 组成的管道来构造 FeatureUnion。
我们将构建一个 FeatureUnion,执行与之前实现的 ColumnTransformer
相同的转换。
为此,我们将把两个管道封装成一个 FeatureUnion。每条管线链接一个 ColumnSelector
和一个给定的变压器。
scikit-learn 中没有预实现的 ColumnSelector
,所以我们将使用 FunctionTransformer
来构建我们自己的:
作者图片
替代语法:make_[composite_estimator]
前面提到的方法(除了函数转换器)还有一些替代方法,它们的语法略有不同。
这些方法是:
- 制造 _ 管道
- make _ column _ transformer
- make_union
这些是以前的构造函数的缩写。主要的区别在于,它们不要求也不允许命名估计量。相反,组件名称将自动设置为其类型的小写。
在大多数情况下,使用简写版本更简单、更清晰、更易读。但是,例如,如果您需要执行网格搜索,您可能需要定制您的估计器的名称。在这种情况下,为清晰和简洁起见,指定简短的可识别名称会很有用。
如果您不熟悉使用网格搜索进行参数优化,我们将很快就此写一篇文章。
您可以看到应用于以下管道情况的两个版本之间的差异:
管道语法:
对比 make_pipeline :
好处:可视化您的管道
Scikit-Learn 提供了一种简洁的方式来可视化您使用以下代码行创建的复合估计量:
这将有效地创建一个交互式 HTML 文件,以清晰的方式表示您的管道。
如果您使用笔记本电脑,另一种方法是使用以下代码:
最后的想法
管道和复合估算器是数据科学项目的强大工具,尤其是那些要放在生产环境中的项目。它们的附加值不仅在于清晰和方便,还在于安全和防止数据泄露。
如果您想了解我们如何在实际项目中使用本文中提到的不同工具,请不要犹豫,看看我们以前的文章:
最后,如果您想了解如何利用这些复合估计器来优化整个管道中的超参数,或者比较不同算法的性能,请继续关注我们未来关于网格搜索的文章。
谢谢你坚持到现在。我们希望您喜欢这些内容。注意安全,我们将在未来的文章中再见😊
为数据科学项目获得一流数据集并给老板留下深刻印象的 4 个秘密方法
原文:https://towardsdatascience.com/4-secret-ways-to-get-superb-datasets-for-data-science-projects-impress-your-boss-7cef1633b26d?source=collection_archive---------35-----------------------
面向初学者的数据科学和 Python。
从 NASA 到 Youtube,让我们把数据科学和机器学习带到另一个高度
杰森·霍根在 Unsplash 上的照片
如果你曾经从事过个人数据科学项目,你可能会花很多时间浏览互联网,寻找有趣的数据集进行分析。
即使筛选数十个数据集以找到完美的数据集很有趣,但下载并导入几个 CSV 文件后发现这些数据根本不有趣也会令人沮丧。
最重要的是,让你的数据科学之旅更有趣对你的进步至关重要,并保持你的动力。
我坚信,如果你喜欢你正在做的事情,你会更有效率。根据经验,这是我今年获得晋升的六大建议中的第五条:
这就是为什么,作为一个父亲和数据科学家,找到正确的数据集,让你的机器学习模型变得独特和令人愉快是至关重要的。
在本文中,您将获得一个由 4 个独特的原始数据集组成的候选列表,您可以免费获得这些数据集,并使用一行简单的 Python 代码获得**。**
开始吧!
1.美国国家航空航天局🚀
我想向你们展示的第一个独特的原始数据集提供者是美国国家航空航天局,也叫国家航空航天局。
对于生活在另一个星球上的人(如果你欣赏这个笑话,请告诉我:),NASA 是美国政府机构,负责与航空和航天相关的科学技术。
但是对于那些不知道的人来说,NASA 作为一个公共资助的政府组织,将其数据免费提供给公众(在那里你可以运行你的深度学习和机器学习算法)。该组织提供的数据集分为两类:
- 地球科学
- 空格
您可以通过直接从上面链接的官方网站下载 CSV 或执行下面的命令并使用 NASA Python API 请求数据来开始探索这些数据。该 API 由麻省理工学院提供,用于研究目的。您可以使用下面的代码行安装该库。
pip install python-nasa-api
然后,您需要插入与正确数据集相对应的滚动条,您将准备好探索银河系的不同恒星。
这是我用 Python NASA API 请求的一个数据集的例子。它代表了国家机构发布的关于星系中随时间变化的发现类型的数据:
NASA 提供的输入数据集示例-图片由作者提供
第二个原始数据集提供者是 Quandl。
2.面向银行和官方机构的 Quandl。🇺🇸
我推荐给你的第二个 API 更加官方,但仍然非常有趣。使用 Quandl API 可以让你直接从一个很有影响力的机构获取数据,比如加拿大银行、美国美联储、印度政府等。…用一行 Python 代码。
我已经写了一份关于这个 API 的完整指南,如果你有兴趣的话,我可以让你看看:
Quandl 提供的数据范围超越了金融和经济数据;你可以探索你所在区的房地产价格,雇佣市场活动等等。
我会让你发现上面关于如何获得这些数据的完整指南,但我相信,如果你需要大量数据来执行机器学习或深度学习模型,以及为什么不写一篇关于它的文章,这是一笔很好的资产。
下面是我通过分析纽约哈莱姆区和曼哈顿区的房地产数据得出的一个比较结果:
以下是曼哈顿中城和哈莱姆区(纽约市)一居室公寓月租金(美元)的对比。—作者 Gif。
有趣的是,曼哈顿的月租金价格在 2014 年 7 月出现了大幅上涨。你可以在这篇文章中找到完整的代码。
现在让我们继续另一种获取数据集的方式,这是你永远不会想到的:Youtube。
3.油管(国外视频网站)📺
你梦想过创建自己的 Youtube 算法吗?你现在可以用 Python 来制作。
第三个数据提供者是 Youtube 。自 2015 年以来,Youtube 已经免费使用其实时数据,他们有自己的 API,你甚至可以建立自己的 Youtube 算法。
否则,你可以使用这些数据来运行你自己的算法,并了解你的 Youtube 频道内发生了什么。或许能发现有趣的隐藏模式。
如果你想现在就开始,你只需要遵循一个三步流程。
过程
要设置您的 API,路径很简单,需要三个步骤:
- 安装 Youtube Python API 库
- 设置您的 Google 凭据
- 请求数据
下面是一个完整的例子,你可以阅读这篇精彩的文章,作者是一位致力于数据科学的作者( Chris Lovejoy ):
现在我想结束这篇文章,为更具体的数据科学技能集开发提供一些额外的选择。
4.其他选择🤟
在结束这篇文章之前,我想给你一些额外的选择来改善你的数据科学在特定领域的模型,比如地理数据,或者通过情感分析变得更好。
这些来源也可以用于其他类别。
地理空间数据:
如果你正在寻找建立一个关于任何主题的地理互动图,我推荐使用 OpenDataSoft 。几周前,当我打算用地理空间结果驱动的地图向客户交付地图时,我发现了这个 API。
在所提供的数据集中,您将有可能获得 JSON 文件中的所有地理空间信息。那会节省你几个小时的工作时间。
市场数据:
如果你正在学习金融,并在寻找获得市场相关数据的方法,我强烈推荐雅虎金融 API 。
我做了一个实时测试来检查 API 的健壮性,我对 API 的有效性感到非常惊讶。
你可以在这篇文章中找到全部信息。
📰NLP(自然语言处理)模型的数据:
如果你想更好地分析文本,并发展你在自然语言处理(NLP)方面的技能,我强烈推荐你使用 Twitter API。
我已经测试了关于这个主题的多个在线课程,以获得更好的效果,我发现了一种独特而令人兴奋的方法来建立 NLP 模型,通过使用 Twitter 数据。
我相信 Twitter 可以非常有趣地发展你的数据科学技能,因为你正在用真人数据测试你的人工智能模型,而且所有这些都是免费的**。**
我从来没有这么开心过,我妻子现在把我当成了超级英雄(不完全是:),这让我更加专注于提高自己的技能。
我强烈推荐以下课程:
**https://www.udemy.com/course/trading-with-ml-in-python/?couponCode=TDSCIENCE
结论:
我希望你喜欢这篇文章,显然,这个列表可以扩展(网飞,亚马逊,谷歌,Kaggle …).这只是一些我觉得最有趣的数据集的样本。
作为一名父亲和数据科学家,我正试图让我的儿子参与其中,我发现的最好方法是给他激励和雄心勃勃的项目去工作。他喜欢这样。**
感谢您的关注,
编码愉快,赛义德。
用 Python 绘制多个图形的 4 个简单技巧
原文:https://towardsdatascience.com/4-simple-tips-for-plotting-multiple-graphs-in-python-38df2112965c?source=collection_archive---------7-----------------------
由 Peter Olexa 在 Unsplash 上拍摄
数据可视化
学习可视化多个支线剧情的有用的简短代码片段
当可视化数据时,通常需要在一个图形中绘制多个图形。例如,如果你想从不同的角度观察同一个变量,多图表是很有用的(例如,一个数值变量的并排直方图和箱线图)。在这篇文章中,我分享了 4 个简单但实用的绘制多个图表的技巧。
Pawel Czerwinski 在 Unsplash 上拍摄的照片
资料组📦
让我们导入包并更新图表的默认设置,为图表添加一点个人风格。我们将在 tips 上使用 Seaborn 的内置数据集:
import seaborn as sns # v0.11.2
import matplotlib.pyplot as plt # v3.4.2
sns.set(style='darkgrid', context='talk', palette='rainbow')df = sns.load_dataset('tips')
df.head()
📍技巧 1: plt.subplots()
绘制多个支线剧情的一个简单方法是使用plt.subplots()
。以下是绘制 2 个并排支线剧情的语法示例:
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10,4))
sns.histplot(data=df, x='tip', ax=ax[0])
sns.boxplot(data=df, x='tip', ax=ax[1]);
这里,我们在一个图形中绘制了两个支线剧情。我们可以进一步定制每个支线剧情。例如,我们可以像这样给每个支线剧情添加标题:
fig, ax = plt.subplots(1, 2, figsize=(10,4))
sns.histplot(data=df, x='tip', ax=ax[0])
ax[0].set_title("Histogram")
sns.boxplot(data=df, x='tip', ax=ax[1])
ax[1].set_title("Boxplot");
我们可以将循环中所有数值变量的同一组图形可视化:
numerical = df.select_dtypes('number').columnsfor col in numerical:
fig, ax = plt.subplots(1, 2, figsize=(10,4))
sns.histplot(data=df, x=col, ax=ax[0])
sns.boxplot(data=df, x=col, ax=ax[1]);
📍技巧 2: plt.subplot()
另一种可视化多个图形的方法是使用plt.subplot()
而不在末尾使用s
。语法与之前略有不同:
plt.figure(figsize=(10,4))
ax1 = plt.subplot(1,2,1)
sns.histplot(data=df, x='tip', ax=ax1)
ax2 = plt.subplot(1,2,2)
sns.boxplot(data=df, x='tip', ax=ax2);
如果您想要为多个图绘制相同类型的图形,并在一个图中查看所有内容,这种方法特别有用:
plt.figure(figsize=(14,4))
for i, col in enumerate(numerical):
ax = plt.subplot(1, len(numerical), i+1)
sns.boxplot(data=df, x=col, ax=ax)
我们可以像以前一样进一步定制每个支线剧情。例如,让我们为每个情节添加一个标题:
plt.figure(figsize=(14,4))
for i, col in enumerate(numerical):
ax = plt.subplot(1, len(numerical), i+1)
sns.boxplot(data=df, x=col, ax=ax)
ax.set_title(f"Boxplot of {col}")
学过plt.subplots()
和plt.subplot()
之后,下面的对比有助于理解两者的异同:
熟悉这两种方法是很有用的,因为它们在不同的情况下会派上用场。
📍技巧 3: plt.tight_layout()
绘制多个图形时,通常会看到一些支线剧情的标签重叠在相邻支线剧情上,如下所示:
categorical = df.select_dtypes('category').columnsplt.figure(figsize=(8, 8))
for i, col in enumerate(categorical):
ax = plt.subplot(2, 2, i+1)
sns.countplot(data=df, x=col, ax=ax)
顶部两个图表的 x 轴上的变量名被切掉,并且右边的图的 y 轴标签与左边的子图重叠。使用plt.tight_layout()
很容易解决这个问题:
plt.figure(figsize=(8, 8))
for i, col in enumerate(categorical):
ax = plt.subplot(2, 2, i+1)
sns.countplot(data=df, x=col, ax=ax)
plt.tight_layout()
瞧啊。现在看起来好多了。在绘制多个图形时,我几乎总是使用plt.tight_layout()
来防止重叠。
📍技巧 4: plt.suptitle()
最后,如果您想给整个图加标题,这个技巧很有用:
plt.figure(figsize=(8, 8))
for i, col in enumerate(categorical):
ax = plt.subplot(2, 2, i+1)
sns.countplot(data=df, x=col, ax=ax)
plt.suptitle('Category counts for all categorical variables')
plt.tight_layout()
此外,你可以自定义你喜欢的单独的情节。例如,你仍然可以为每个支线剧情添加标题。
engin akyurt 在 Unsplash 拍摄的照片
您想访问更多这样的内容吗?媒体会员可以无限制地访问媒体上的任何文章。如果你使用 我的推荐链接成为会员,你的一部分会费会直接去支持我。
感谢您阅读这篇文章。希望你下次在 Python 中绘制多个支线剧情时能够应用这些有用的技巧。如果你是一个求知欲很强的学习者,想要了解更多关于这个主题的知识,这个资源会很有帮助。如果你热衷于学习更多的数据可视化技巧,这里有一些我关于数据可视化的帖子:
◼️ 美化熊猫数据帧
◼ 用 Python 实现简单的数据可视化,你会发现很有用 ️
◼️ 在 Seaborn (Python)中实现更漂亮和定制情节的 6 个简单技巧
再见🏃 💨
你应该知道的 4 个简单而有用的 Jupyter 特性
原文:https://towardsdatascience.com/4-simple-yet-useful-jupyter-features-you-should-know-14e5a43cf2e6?source=collection_archive---------18-----------------------
提高笔记本电脑的工作效率
照片由丹·迪莫克在 Unsplash 拍摄
Jupyter 笔记本对于数据科学家来说是一个非常方便的编码工具。它允许我们在处理和分析数据集的同时,以文本和图像的形式可视化数据。在学习了笔记本的基本操作之后,我们可能想要尝试一些更有用的东西,这些东西可以帮助改善我们的笔记本体验和工作效率。在本文中,我想分享一些功能,以满足我们在数据科学工作中的一些特殊需求。
1.运行命令
要在单元格中运行命令,我们只需在命令前加上一个感叹号。
在笔记本中运行的命令
与运行命令相关的一个常见问题是,在某些执行过程中,我们如何与提示交互,例如安装确认(是或否)。诀窍是在命令后面附加 yes 标志(-y),如下所示。
!pip uninstall seaborn -y
2.检查活动变量
当我们处理大量数据时,我们可能已经在工作空间中创建了许多中间变量。为了了解这些变量的当前池,我们可以使用神奇的方法%who
或%whos
,如下所示,后者显示了变量的更多细节。
检查变量
为了让这个命令更有趣,我们可以指定变量的数据类型来创建一个更短的列表。例如,下面的命令只显示了字符串类型的变量。
检查特定类型的变量
3.API 查找
我们并不总是记得我们想要使用的功能或属性。但是,我们确实对它们有一些印象,毕竟我们以前可能时不时会用到它们。在这种情况下,我们可以列出所有可能提醒我们的相关方法。
API 查找
上面的截图向你展示了我们想要得到的在 seaborn 包中可用的支持图的列表。诀窍就是在字符串中使用通配符,前缀为问号。一旦知道要使用什么方法来检查调用签名,就可以使用带有特定函数名的问号,如下所示。
具体功能详情
输出类似于使用help
函数得到的结果,如下所示。
help(seaborn.rugplot)
4.更改默认输出模式
默认情况下,每个单元格在执行完整个单元格后只打印最后一个表达式,如下所示。
显示最后一个表达式
然而,我们可能想要显示更多的条目,比如单元格中的所有表达式。在这种情况下,我们可以更改允许输出多个项目的默认设置。
输出多个项目
通过评估交互模式的源代码,我们可以有其他选择。例如,下面的更新输出最后一个表达式或最后一个赋值。如你所知,赋值通常不输出任何东西。
输出表达式或赋值的值
如果您有兴趣尝试其他选项,这里有包含可能选项的源代码。注意,默认值是“last_expr”,用它可以将笔记本设置为原始状态。
互动选项
结论
在本文中,我们回顾了四个简单而有用的笔记本特性,您可以在自己的数据科学工作中尝试一下。还有许多值得注意的特性,比如笔记本扩展、小部件和许多其他神奇的命令。我们可以在以后的文章中探索它们。
4 技术咄!我从最*的数据科学项目中学到的经验
原文:https://towardsdatascience.com/4-technical-duh-lessons-i-learned-from-my-latest-data-science-project-b685266bce62?source=collection_archive---------19-----------------------
数据科学的真实故事
带着一点软技能的启示…
卡尔·海尔达尔在 Unsplash 上拍摄的照片
我是所有关于写技术文章✍️与充分工作的代码。看到人们从我设计的教程中受益是非常令人满足的。除此之外,我最*开始考虑写一些仍然技术性但更基于经验的故事。
上周,我花了大约 30 个小时用熊猫和神奇地形象化美国政府合同。嗯,我已经和这些库一起工作了很多年,我想我已经了解了它们的一切。但是,在这 30 个小时结束的时候,我学到了四个简单却非常有力的教训。
1 —如果您正在处理大数据,千万不要使用 XLSX 将数据读入 Pandas
照片由米卡·鲍梅斯特在 Unsplash 上拍摄
最初的数据集是以谷歌表单的形式提供的。这份文件包括 58 份单独的表格和超过 15 万份美国政府合同。有 26 列,所有的表在不同的业务领域存储相同的信息。我以前处理过数百万个数据点,我想:
我将下载一个 XLSX 文件,列出所有的工作表名称,运行一个 for 循环为每个工作表创建一个数据框,最后 pd.concat() 它们。
伙计,我错了吗?
读取 150k 行花了 58 分钟,快速搜索后,我意识到熊猫在 XLSX 格式下表现很糟糕。我以前从未在大数据(ish)项目中使用过 XLSX 格式,对此毫无概念!
请注意,我实际上考虑过将文件下载为 CSV 文件,但是没有简单的自动方法将每张工作表保存为单独的 CSV 文件。此外,CSV 格式只能有一个工作表。
看到熊猫用 XLSX 格式表演得有多恐怖,我伸手向客户要 CSV 原件。从 108 个文件中读取 470,000 个观察值不到 1 分钟!
完成项目后,我找到了这个解决方案:
https://www.erickhchan.com/data/2019/03/30/python-batch-xlsxtocsv.html
2-如果您想要完全自定义,请使用 Plotly Graph 对象,而不是 Plotly Express
作为一个赶时间的人,我总是试图找到最快的方法来达到预期的结果。我们期望的结果是表示每个公司的合计合同信息。我很好地清理和处理了数据,并想创建一个交互式气泡图。如果你使用 Python,你最好的选择是 Plotly。现在,Plotly 是一个非常先进但也非常混乱的图书馆。它基本上提供了几个模块,使用 JavaScript D3.js 库将数据转换成 HTML 图像。这个想法是革命性的,但是文档却是一团糟。为什么?让我解释一下。
Plotly 有一个模块叫做 图形对象 。这是主要的 Plotly 模块,开发者可以创建漂亮的交互式图表。你可以完全独立地设计你的图表。我说的是放置图像、改变颜色、处理图例等等。但是,Plotly 提供了另一个模块叫做 Plotly Express 。它也很棒,你也可以创造出很棒的视觉效果,几乎一模一样。但是几乎…
嗯,因为我想在预算内快速交货,所以我选择了 Plotly Express。一切都很完美,直到我意识到我不能真正改变传奇风格。当你访问文档时,有复杂的方法来实现它;无论我做什么,它都返回一个警告⚠️,但没有成功。
由于选项的双重性,开发人员总是对实现文档中所写的内容感到困惑。而问题的根源甚至不仅仅是这种二元性。Plotly 的工作方案包括 Python,JavaScript,CSS,HTML。任何与这些技术相关的设计技术都可能起作用,但没有任何保证。
所以,尽管我很喜欢 Plotly,但它的文档却是一团糟(不复杂,但)。并且看到 Plotly Express 缺乏一些基本的设计能力,我了解到如果我在一个真实的项目中工作,我将总是使用 Graph Objects 模块,即使这意味着我将花费额外的时间,甚至我的 Google 搜索也会带我去所有这些有吸引力的 Plotly Express 实现。
有关 Graph Objects 和 Plotly Express 之间的广泛比较,请查看本文:
3-你不能用一行简单的 Lambda 函数解决所有的数据转换
我记得我第一次使用 lambda 函数。这很不寻常。您最初学习了常规函数语法(例如,def xyz(a,b) ),并且发现您实际上可以使用单行 lambda 函数轻松地执行一些复杂的运算。在某些时候,它变成了第二天性;尤其是如果你正在用熊猫做大量的数据清理和处理。
df【列名】。应用(λx:x+1)
它如此简单,却又非常优雅。当你试验 lambda 时,你开始挑战它的极限。可以设计 if-else 语句;你甚至可以写单行循环。但是 lambda 函数有其局限性。你不能用 lambda 实现所有类型的转换。嵌套的 if-else 语句、复杂循环和聚合操作需要单独定义的自定义函数,并在 lambda 函数中应用。
如果你想要一个搜索栏,选择 Dash,而不是 vanilla Plotly
露西娅·马塞多在 Unsplash 上拍摄的照片
另一个*咄!*我学到的经验是,每当你想以更复杂的方式与数据集交互时,切换到破折号。我们知道我们使用的技术的局限性,但是我们的客户可以逐步达到一个您的前端数据可视化库可能无法达到的水*。在这个项目中,我们最初从基于散点图的气泡图开始。我觉得这个任务可以很容易地完成。但是客户心中有一个目标:创造价值。他对技术限制和数据探索游戏不感兴趣。相反,他想为他的用户/顾客提供尽可能高的价值。我学到的经验是,每当我开始一个数据可视化项目时,我需要发现客户是否需要一个后端解决方案来为他的用户提供最高的价值。在我们的情况下,达什。
注意,这里的搜索栏是对一般后端操作的简化。
“实际上,Dash 是由 Plotly 的创建者制作的,作为一种轻松实现 web 界面和用 Plotly 创建仪表板的方式,而不必学习 javascript、HTML 和其他 web 技术。使用 Dash,您不需要进行可视化,而是构建一个界面来显示 Plotly 的可视化。它在引擎盖下使用 Flask,因此它特别兼容其他 Flask 应用程序。”比森特·利扎纳·埃斯蒂维尔
最终注释
当在实际项目中工作时,你可能不得不考虑那些你在孤立的学习环境中不会过多考虑的事情。数据清理需要更长时间;你被要求做一些你从未想过的非常具体的操作,你的输出必须高效且易于理解。这些你慢慢学。另一方面,你也在每个项目中学到了具体的经验。四大技术*咄!*在我最*的项目中,给我的教训是:
- 如果是处理大数据,千万不要用 XLSX 把数据读入熊猫;
- 如果你想要完全定制,使用 Plotly Graph 对象,而不是 Plotly Express
- 你不能用一行简单的 Lambda 函数解决所有的数据转换;和
- 如果你想要一个搜索栏,请选择 Dash,而不是 vanilla Plotly。
订阅邮件列表获取我的最新内容
我希望这些课程也能对你的项目有所帮助。如果你喜欢我迄今为止分享的内容,可以考虑订阅简讯 !✉️
现在就订阅
我还与我的订户分享我的私人 Google Colab 笔记本,其中包含我发表的每篇文章的完整代码。
如果你正在阅读这篇文章,我确信我们有着相似的兴趣,并且正在/将要从事相似的行业。那么我们就通过Linkedin来连线吧!请不要犹豫发送联系请求!Orhan g . yaln—Linkedin
处理数据集中缺失数据的 4 种技术
原文:https://towardsdatascience.com/4-techniques-to-deal-with-missing-data-in-datasets-841f8a303395?source=collection_archive---------4-----------------------
可以消除缺失值影响的简单方法
兰迪·法特在 Unsplash 上的照片
对于每个数据科学家来说,缺失数据都是一个问题,因为我们可能无法执行我们想要的分析,或者无法运行某个模型。在本文中,我将讨论处理缺失值的简单方法。然而,首先,没有处理空数据的“官方”最佳方法。通常,处理这种情况的最佳方式是理解数据来自哪里以及它意味着什么。这被称为领域知识。不管怎样,让我们开始吧。
在这篇文章中,我们将使用著名的和惊人的泰坦尼克号数据集 (CC0 许可证)。我相信你们都听说过。数据集如下所示:
**import** **pandas** **as** **pd** data = pd.read_csv('test.csv')
data.info()
图片作者。
data.isnull().sum()
图片作者。
正如我们所看到的,丢失的数据只在“年龄”和“船舱”栏中。它们分别是浮点和分类数据类型,所以我们必须不同地处理这两列。
1.删除数据
最简单的方法是删除一列或几列包含空条目的整个训练示例。
data = data.dropna()
data.isnull().sum()
图片作者。
现在没有空条目了!然而,天下没有免费的午餐。看看还剩下多少训练样本:
图片作者。
只剩下 87 个例子了!最初有 418 个,因此我们将数据集减少了大约 80%。这远非理想,但对于其他数据集,这种方法可能非常合理。我认为最多减少 5%就可以了,否则您可能会丢失有价值的数据,从而影响模型的训练。
2.估算*均值
下一个方法是给空条目分配一些*均值(均值、中值或众数)。让我们来看看数据中的以下片段:
data[100:110]
图片来自作者。
对于“年龄”列,*均值可计算如下:
data.fillna(data.mean(), inplace=**True**)
图片来自作者。
30 岁的*均年龄现在已经被添加到空条目中。注意,对于“Cabin”列,条目仍然是 NaN,因为您不能计算对象数据类型的*均值,因为它是分类的。这可以通过计算其模式来解决:
data = data.fillna(data['Cabin'].value_counts().index[0])
图片作者。
3.分配新类别
关于“Cabin”特征,它只有 91 个条目,约占总示例的 25%。所以我们之前算出来的模值不是很靠谱。更好的方法是给这些 NaN 值分配它们自己的类别:
data['Cabin'] = data['Cabin'].fillna('Unkown')
图片作者。
由于我们不再有任何 NaN 值,机器学习算法现在可以使用这个数据集。然而,它将在“船舱”一栏中使用“未知”的独特值作为自己的类别,尽管它在泰坦尼克号上从未存在过。
4.某些算法
最后一个技巧是什么都不做。大多数机器学习算法不处理缺失数据。另一方面,K *邻、朴素贝叶斯和 XGBoost 等算法都可以处理缺失数据。网上有很多关于这些算法及其实现的文献。
结论
有许多方法可以处理缺失数据。某些方法比其他方法更好,这取决于数据的类型和丢失的数量。还有更复杂的输入缺失数据的方法,我没有在这里介绍,但是这些选项是帮助您开始的很好的选择。
完整代码请见我的 GitHub:
https://github.com/egorhowell/Medium-Articles/blob/main/Data%20Science%20Basics/Dealing%20With%20Missing%20Data.ipynb
和我联系!
- 要在媒体上阅读无限的故事,请务必在此注册!T3💜
- 当我在这里发布注册邮件通知时,可以获得更新! 😀
- 领英 👔
- 推特 🖊
- github🖥
- https://www.kaggle.com/egorphysics🏅
(所有表情符号由 OpenMoji 设计——开源表情符号和图标项目。许可证: CC BY-SA 4.0
GPT 4 号将从 GPT 3 号改进的 4 件事
原文:https://towardsdatascience.com/4-things-gpt-4-will-improve-from-gpt-3-2b1e7a6da49f?source=collection_archive---------2-----------------------
人工智能
GPT 3 彻底改变了人工智能。GPT-4 也会这样做吗?
Robynne Hu 在 Unsplash 上的照片
2020 年 5 月,OpenAI 在一篇名为 的论文中展示了 GPT-3,语言模型是很少尝试的学习者 。GPT-3,有史以来最大的神经网络,彻底改变了人工智能世界。OpenAI 发布了一个测试版 API 供人们使用,很快宣传就开始了。人们发现了疯狂的结果。GPT-3 可以将网页的描述转换成相应的代码。它可以模仿人并写出定制的诗歌或歌曲。它可能会对未来或者生命的意义产生疑问。
它没有受过这方面的训练。GPT-3 在互联网上可用的大部分文本数据中接受过暴力训练。但是它并没有被明确地教导去做这些任务。这个系统如此强大,以至于它变成了一个元学习者。它学会了如何学习。用户可以用简单的自然语言与它交流;GPT 3 号将收到描述并认识到它必须完成的任务。
这是一年前。在过去的 3 年里,OpenAI 每年都会发布 GPT 模型。2018 年他们推出了 GPT-1 ,然后是 2019 年的 GPT-2 ,最后是 2020 年的 GPT-3。按照这种模式,我们大概可以接*创造一个假设的 GPT 4。鉴于 GPT-3 能做的一切,以及它改变人工智能中一些范式的程度,问题是:我们能从 GPT-4 期待什么?让我们开始吧!
免责声明:【GPT-4】(还)不存在。接下来是根据我对 GPT 模型的了解,特别是对 GPT-3 模型的了解,对推测和预测的汇编,我在这篇长文《走向数据科学》中对其进行了汇编:
[## GPT-3 —全面概述
towardsdatascience.com](/gpt-3-a-complete-overview-190232eb25fd)
GPT 3 号很大。GPT 4 号会更大。原因如下
GPT 3 号不仅仅是大。有史以来最大的神经网络的名称非常模糊。它可能只是比其他模型大一点点。客观地看,GPT 3 号比它的前任 GPT 2 号大 100 倍,后者在 2019 年出现时已经非常大了。GPT-3 有 175 亿个参数,是最接*的竞争对手的 10 倍。
从 GPT-2 到 GPT-3 将参数数量增加 100 倍不仅带来了数量上的差异。GPT 3 号不仅仅比 GPT 2 号更强大,它更强大的方式也不同。这两种模式之间有一个质的飞跃。GPT 3 号可以做 GPT 2 号做不到的事情。从这个事实来看,有理由期待 OpenAI 继续这一趋势,使 GPT-4 明显大于 GPT-3,旨在找到新的质量差异。如果 GPT 3 号能学会学习,谁知道 GPT 4 号会带来什么。我们可能会看到第一个能够真正推理和理解的神经网络。
这些结果将进一步强化“越大越好”的观念。用 DeepMind 的研究员理查德·萨顿的话来说,“从 70 年的人工智能研究中,我们可以学到的最大教训是,利用计算的一般方法最终是最有效的,而且是最有效的。”他称这是人工智能的惨痛教训。我们将看到它是否能在未来继续存在。
GPT-4 将执行更好的少数镜头多任务处理
GPT-3 在解决 NLP 任务方面给人留下了深刻的印象,如机器翻译,问题回答,或在少数镜头设置中的完形填空任务。然而,在零镜头设置中,它的性能并不好。期望 GPT 3 号在事先甚至没有看到一个例子的情况下解决一个它没有被训练过的任务,对它来说可能是过分的要求。即使是我们人类,也不能靠纯粹的直觉解决很多任务。我们有生活在这个世界上的优势,这个世界充满了丰富的背景,帮助我们驾驭现实。
GPT-3 的优势是少镜头多任务处理。OpenAI 的研究人员承认,少量注射的结果明显好于零注射的结果。正如 Rohin Shah 所言,“少击性能随着参数数量的增加而增加,并且增加的速度比零击性能的相应速度更快。”这意味着 GPT-3 是一个元学习者,模型越大,它的元学习能力越好。
如果我们假设 GPT-4 将有更多的参数,那么我们可以期待它是一个更好的元学习者。对深度学习系统的一个常见批评是,它们需要大量的例子来学习单个任务。GPT-4 可以证明,语言模型可以像我们一样从几个例子中学习多任务处理。GPT-3 可以“理解”它必须在没有被明确告知的情况下继续对话。我们只能想象 GPT 4 号能做什么。
GPT-4 不会太依赖好的提示
OpenAI 于 2020 年 7 月发布了测试版 API playground,供外部开发者与 GPT-3 一起玩。该系统最强大的功能之一是我们可以用自然语言与它交流。我可以告诉 GPT-3:“下面是一个关于宇宙的故事,一个智者正在告诉一个小男孩。这个聪明人很好,乐于助人,对宇宙学和天文学也很了解,”这个系统会继续这个故事,而不用我明确地这么说。
但不仅仅如此。GPT-3 还会让聪明人很好地讲述故事,让他看起来像对宇宙很了解的 T2。它还会用简单语言写这个故事,因为这个男人在和一个小孩说话。GPT-3 将通过这句简单的话获得所有这些信息。任何人都可以推断出这一切,但人工智能呢?太不可思议了。科技博客作者 Gwern Branwen 在他的博客中有很多类似的例子。
Gwern 将这种与 GPT-3 的交互方式称为提示编程。我们可以给 GPT 3 号一个书面输入,它就会知道它必须执行哪个任务。提示可以包括一些明确的例子——一些镜头设置——来帮助系统。令人惊讶的是,只要用简单的英语告诉系统去做,这个系统就可以完成不同的任务,而这些任务从来没有被训练过。
然而,Gwern 警告说,这些测试的结果可能在质量上有所不同。原因是提示编程涉及到采样。而抽样可以“证明知识的存在但不能证明知识的不存在”。一个错误的提示会产生一个不好的结果,但是谁该负责任呢?GPT-3 还是那个写了错误提示的人?
这是一个问题,因为正如 Gary Marcus 所批评的,不知道提示何时会产生不好的结果凸显了系统的一个严重缺陷。格温认为,我们总是可以找到更好的提示,但是如果我们不能确定结果是否正确,那还有什么意义呢?为了找到系统的极限,如果提示不起作用,我们不应该放弃,只有在没有提示起作用的情况下。然而,这种方法的不可行性是显而易见的;我们不能测试每一个可能的提示。
这就是为什么我们需要让 GPT-4 对不良提示更加稳健。除非我们将即时编程标准化(这很可能在未来几年内完成),否则人为错误将会存在,即使如此,这些系统的局限性也将与我们无法提取其真正潜力的能力密切相关。
一个真正的人工智能首先不应该如此依赖一个好的提示。我们人类也依靠“提示”,但是我们可以自我评估来发现问题。如果我在考试,练习的措辞很糟糕,这可能会让我困惑,但我可以意识到措辞不好,并问老师。GPT 3 号做不到这一点,它会试图在没有意识到任何事情的情况下执行任务。
GPT-4 可以实现一种评估给定提示质量的方法。到目前为止,这更像是科幻小说,而不是现实,但我们需要在未来记住这一点。一个不能自我评估的系统不能被称为智能的。如果 GPT-4 能像“我不知道”、“我不太相信我的答案”或“你的提示不是很清楚”这样表达怀疑和缺乏理解,那将是朝着这个方向迈出的一大步。
GPT-4 将有一个更大的背景窗口
GPT-3 非常强大,但它的内存相当有限。一个人不会忘记昨天发生的事情。测试版 API 允许用户输入一个 500-1000 字长的文本——上下文窗口——供 GPT-3 使用。这意味着系统不能继续写一部写了一半的小说或者完成一个大程序的代码。
GPT 3 号完全不知道它的上下文窗口之外是什么。这种限制严重影响了少镜头设置,因为用户必须编写不同的示例。在问答中,这可能不是一个问题,因为它非常重复,但在其他任务中,如翻译文章,这是不可行的。GPT-4 也有这种局限性,但其有用性被缩小的程度肯定会减少。
可以说,一个更重要的问题是,即使我们可以用几百字的提示来表达我们的意图,GPT-3 也是一台健忘的机器。它发现很难在长文本中保持连贯。如果我们开始写一篇文章,并要求 GPT-3 无限期地继续下去,它最终会重复想法,甚至转向不相关的话题。
GPT-3 和以前基于变压器的模型都受到这种限制。变形金刚是 2017 年出现的仅基于注意力的“旧”架构——无卷积、无递归。已经有更好的方法来执行这些类型的任务。Gwern 认为有办法改善变形金刚的注意力缺陷。简单的变形金刚是创建超级强大的语言模型的一种方式,但可能不是唯一的方式,甚至不是最好的方式。(变压器架构的改进汇编可以在这里找到)。
这些想法可以在 GPT-4 中实现。它将享受更大的上下文窗口,并允许用户向系统提供书籍、长篇文章、图像、视频或音频。
结论
以下是我对 GPT 4 号将如何改进 GPT 3 号的预测:
- GPT-4 将有更多的参数,它将被更多的数据训练,使它在质量上更强大。
- GPT-4 在少拍场景下更擅长多任务处理。它在这些环境中的表现将更接*人类。
- GPT-4 将更少依赖好的提示。它将对人为错误更加稳健。
- GPT-4 将避免早期变压器架构的局限性。上下文窗口将会更大,允许系统执行更复杂的任务。
作为数据科学团队领导,我不知道的 4 件事
原文:https://towardsdatascience.com/4-things-i-didnt-know-about-being-a-team-lead-in-data-science-1f96293cb8aa?source=collection_archive---------40-----------------------
办公时间
当我从个人贡献者转变为团队领导时,我学到了什么
照片来自山上山
2019 年,我开始担任高级数据科学家,到 2020 年,我成为我的小组、工具和机器学习*台的团队领导。成为团队领导是一件令人兴奋的事情,但也出现了许多意想不到的变化。在担任这个职位之前,我不知道作为团队领导或产品负责人意味着什么。
1.专注于开发工作的时间更少。
从个人贡献者到团队领导和产品所有者的转变伴随着许多其他需要完成的任务。这些任务包括规划工作和路线图,以及帮助团队成员解决出现的问题。当我进行转换时,我意识到从开发工作中脱离并不容易。相反,我试图将我的时间集中在 50%的开发和 50%的其他方面,但这并不总是这样。有些时候,我可以高效地专注于我的项目,而其他时候,我可以抽身去处理团队中出现的问题。
由于我专注于开发工作的时间比团队中的其他人少,我明智地选择了我的项目和任务。我专注于为我的团队或利益相关者提供高价值的工作,这将让我学习特定的技能或成为特定项目的一部分。我的工作倾向于研究、bug 修复或最小可行产品(MVP)。如果我已经完成了最初的 MVP,那么我将把我的重点转移到如何利用我团队中的其他人来推进工作,并沿着路线图规划工作。
2.问题、难题和阻碍会出现,你需要帮助解决。
导致我从开发工作中抽离出来的事情往往是来自团队的疑问、问题和阻碍。
问题*——*这些往往是最容易处理的。大多数问题我可以通过指导一个人去文档、一些代码或者另一个从事类似项目的人来回答。这些问题往往很容易回答,但它们可能会在一天中由不同的人经常提出。有时问题会来自我团队之外的其他人,他们在寻找我们已经完成的工作或者正在进行的工作的状态更新。这意味着我需要了解团队的大部分工作,以便在这些问题出现时回答它们。
问题 —问题经常出现,错误出现,或者冲突开始。根据具体情况,我会认真对待工作,并决定下一步的最佳行动。至少在一次冲刺中,总会出现一些需要解决的问题。如果是可以等待的工作,它会得到计划。如果不能等待,我或团队中的其他人会接手。冲突?我们会谈到这些。
拦截器 —如果是阻止工作发生,就是拦截器。这些往往会在我们的日常会议中被提出来。如果障碍是我可以帮助解决的,那么我会帮助推进工作。我经常遇到阻止程序,在这种情况下,人们无法访问数据,或者需要电话中的主题专家来澄清一些事情。我可以根据需要安排和促成这些电话,以帮助解决问题。
3.处理冲突和纠纷可能会很复杂。
哦,冲突。不管是哪支球队,这都是经常发生的事情。一些争端可以很快解决,而另一些则需要时间。当我开始担任团队领导时,我没有为我将会看到的冲突和争议的程度做好准备。分歧往往在于代码风格、可视化偏好或处理问题的“正确”方法。在处理了我的第一个重大争议后,我制定了一套工作协议,概述了与另一个成员一起工作时要经历的步骤,当你改变某人的工作时该怎么做,以及解决冲突的步骤。幸运的是,自从那次争执之后,这是我唯一需要上报的问题。
当我开始担任团队领导时,我没有准备好的另一个冲突是数据科学和数据工程之间的团队动态。关系破裂了。我最*写了一篇文章,详细介绍了数据科学和工程之间的合作。总而言之,那次冲突教会了我,我们需要一种强大而信任的关系来合作。当我们朝着 2020 年的共同目标努力时,我花了一年时间在团队之间推广协作和有效沟通的文化。因此,我们的团队变得更加强大,并在许多项目上紧密合作。当我们知道其他人在做什么时,合作变得容易多了。
这些冲突和纠纷不是容易面对的挑战,但它们可以教会一个人很多建立信任、领导和沟通的技巧。
4.您将与利益相关者和其他领导一起制定路线图并确定任务的优先级。
另外 50%的时间我花在计划上。我细化待办事项,冲刺计划,更新路线图。我作为团队的产品负责人,从我们的利益相关者那里收集需要添加到待办事项列表中的工作、工作优先级和反馈。
当我第一次开始接受利益相关者的工作时,我注意到了与工作期望和设定的优先级有关的问题。一个特定的项目,一个利益相关者期望比它更早开始。六个月后,当工作开始时,利益相关者在一次会议上爆发了为什么我们如此落后。听完大家的想法,我暂停了会议,分享了我所知道的对工作的期待和目前的状态。当我们确定发生了什么事时,我们对形势进行了反思,并决定下一步做什么。
问题?工作没有被过滤给我,没有被添加到
待办事项中,没有被利益相关者优先考虑。相反,他们遇到了另一个小组的另一个团队领导,他没有对工作进行优先排序。因此,我的团队没有开始项目,因为涉众没有将期望和需求完全告知正确的团队。涉众已经习惯于将所有的请求提交给一个团队领导。当另外两个团队领导,我和另一个,加入到更大的团队中时,涉众并没有开始向我们提出请求,而是继续使用另一个领导。这导致了对所要求的工作、时间表和优先级的混淆。
我在这里学到的主要东西是,就路线图和优先事项与您的利益相关者和其他团队领导沟通是多么重要。最轻微的误解都可能导致双方处于不同假设下的灾难。
最后的想法
转变为领导角色可能会带来许多意想不到的变化,也有许多很好的学习机会。随着我进入 2021 年,我期待着这个职位将如何继续发展。概括一下:
- 专注于能为你的团队或利益相关者提供价值的工作。
- 充分了解你的团队和他们的工作,以回答与他们和正在做的工作相关的大多数问题。
- 冲突发生了。制定一个补救计划,并与同事建立牢固、信任的关系。
- 当您计划和优先化您的团队与风险承担者和其他领导的积压工作时,沟通是至关重要的。
作为数据科学领域的团队领导,您面临过哪些挑战?你是如何克服它们的?
如果你想阅读更多,看看我下面的其他文章吧!
在进入人工智能行业之前,我希望知道的 4 件事
原文:https://towardsdatascience.com/4-things-i-wish-i-knew-before-starting-in-the-ai-industry-5458c6bf48b9?source=collection_archive---------14-----------------------
人工智能|课程
对那些想加入的人来说,还有 4 个要点。
在 Unsplash 上由 Vinicius Wiesehofer 拍摄的照片
人工智能无处不在。但是如果我问你:“它到底是什么?”你能自信地回答吗?
四年前,我认为我可以回答同样的问题。我正准备开始学习机器学习和深度学习,希望能找到一份工作。我天真地认为我从外面看到的就是我在里面会遇到的。
但是外表是会骗人的。而人工智能,被炒作和资金泛滥包围就是今天最好的例子。除了科学和工程之外,还有一些兴趣模糊和掩盖了人们正在做的真正工作。
无论如何,这个领域是非常吸引人的。它发展和进化的速度令人难以置信,而且有望在一段时间内保持这一速度。未来几年将会有更多 AI 相关的工作。而且,让我们现实一点,这比其他大多数领域更令人兴奋和有趣——毕竟我们正在尝试解决智能问题。
这就是为什么你们中的许多人可能会受益于知道会发生什么。下面是我希望在开始研究人工智能之前知道的四件事。我已经为我将要经历的事情做好了心理准备,并且对这个领域的现在和未来有了更好、更深刻的认识。尽情享受吧!
并不是所有带“人工智能”的东西都是人工智能
我在一家人工智能初创公司工作了三年。我们在建造一个实时双向手语翻译器。一个雄心勃勃的项目超出了我们的资源和知识范围。
我们想解决一个连大型科技公司都没有解决的问题——尽管原因可能是缺乏兴趣;低盈利前景比社会激励更重要。
最后,发现不可能在最后期限前完成,我们不得不走捷径。我们将真正的人工智能与只能在有限场景下工作的补丁结合起来。一点也不觉得骄傲。但我从中得到了关于商业世界的一个重要教训:当金钱受到威胁时,道德就变得可以牺牲。
这是该领域的普遍趋势。人工智能是一个畅销的时髦词——尽管人们越来越厌倦它,这是理所当然的。尽管如此,大多数人工智能产品和服务吸引了人们的注意力,因为投资者喜欢听到“人工智能”这个词。
它承诺了很多。这本身并不坏。但是,当更多的公司声称拥有人工智能解决方案,而不是实际做一些事情来推进该领域——或将该技术应用于现实世界的问题——时,人们就会不信任。
2019 年,伦敦风险投资公司 MMC 发现40%的欧洲“人工智能初创公司”没有使用人工智能。“在 40%的病例中,我们找不到提及人工智能的证据,”MMC 的研究负责人大卫·凯尔纳说。“人们认为是人工智能公司的公司很可能不是。”
当心任何名字里有 AI 的东西。并非所有声称是人工智能的东西实际上都是人工智能。而且只会伤害那些做真正 AI 的人的信任和可信度。
人工智能不仅仅是深度学习
我们大多数人已经开始了解人工智能以及机器学习和深度学习。我们很容易在脑海中把这些概念联系起来。然而,人工智能比深度学习更古老。约翰·麦卡锡在 1956 年创造了“人工智能”一词,而第一次有人在与人工智能的关系中使用“深度学习”是在 1986 年。
人工智能具有独特的属性,因为它是一门科学学科。它不是恒定的。今天属于“人工智能系统”范畴的东西,几十年后可能就不属于了。只有我们不懂的东西,似乎才有资格成为 AI。当涉及到令人印象深刻、新奇、复杂和未来时,深度学习系统会检查所有的框。但并不是所有的 AI 都是那样的。
90 年代中期,在第二次 AI 寒冬之后,几个行业开始在我们没有意识到的情况下整合原始的机器学习应用。大众媒体在很大程度上忽略了它,因为它缺乏我们总是认为是人工智能的花哨。像 AlphaZero、GPT-3 或 Codex 这样的深度学习系统给我们留下了深刻的印象并让我们感到惊讶。它们让我们想起科幻小说和一个我们将与机器共存的假想未来。这就是我们集体归因于人工智能的图像类型。对大多数人来说,线性回归不是人工智能。
不可否认,深度学习是自人工智能诞生以来最成功的范式。但我们应该永远记住,AI 比深度学习更广泛。不仅仅是作为一种技术或科学,而是作为一种哲学的视角来理解人类的意义和智力的奥秘。将两者等同起来对该领域不利。
混合方法是一种有前途的新兴范式,旨在充分利用深度学习,并审视过去的想法,以绕过今天的瓶颈。没有人知道人工智能在 50 年后会是什么样子,但忘记那些有深厚理论基础、可能有助于为下一次重大突破奠定基础的旧思想,是完全不负责任的。
这里有一个简单的维恩图,它展示了人工智能和深度学习之间的关系:
艾⊂ ML ⊂ DL
人工智能并不像大众媒体描述的那么先进
在承诺过多和承诺不足的领域有一个老趋势。这种现象如此普遍,以至于资金和关注度的起伏有了一个名字:AI summers 和 winters。
现在,把一切都归咎于媒体是不公*的。开国元勋们确信,创造一个通用的人工智能在几十年内是可以实现的。马文·明斯基,可以说是其中最著名的一个,在 1967 年——第一个人工智能冬天之前——说“在一代人的时间内……创造‘人工智能’的问题将基本上得到解决。”
当时没有发生。还没有发生。最可能的原因是我们都低估了挑战的严重性。这也是有原因的。我们不了解智力,也不了解大脑。在不了解规则的情况下,如何准确估计挑战的复杂程度?
人工智能专家——有些人比其他人更多——从中吸取了教训,并决定保持低调。他们现在的目标不是激发这个领域的兴趣,而是实现他们声称的可能。然而,还有一个重要的角色,他的目标与此不太一致。大众媒体并不太关心人工智能的可信度损失。他们关心头条新闻,让他们的读者迷上引人入胜的文章。
科学来源于真理。媒体来源于关注。
作为一名作家,我理解好的“点击诱饵”的重要性——这种承诺很多但仍能实现的诱饵,来自真理网的德里克·穆勒提议称之为“合法诱饵”然而,这样做和夸大其词是有区别的。
让我们看看最*人工智能突破的一些头条新闻。
- 《卫报》:“一个机器人写了整篇文章。你害怕了吗,人类?”真实情况:GPT-3 写了八首曲子。然后,《卫报》从每篇文章中“挑选出最好的部分”,然后将它们组合成最终的文章,大概是为了引起更多的印象。
- 《新闻周刊》:“机器人现在比人类阅读能力更强,这让数百万份工作面临危险。”真实情况:一个人工智能系统在一项简单的阅读任务上超越了人类。甚至这个任务的创造者也说它不是为了测试人类的阅读能力而设计的。
或者头条拟人化 AI。
- Engadget :“麻省理工学院创造了一个能够直观理解物理定律的人工智能。”
- KDnuggets :“构建一个通过视频理解世界的 AI。”
- 威瑞森:“人工智能如何理解情感。”
AI 不懂,也不会思考,更不会感受。不管它做什么,它都和我们做的不一样。
从技术上来说,标题不是假的,但它们利用含糊不清和无知来获取观点。或者,更糟糕的是,编辑故意隐藏部分信息来装饰文章,这在道德上是应该受到谴责的。读完之后,我们被误导了,我们的信念与现实不一致。
最后一点,我发现这些实践在最*有了轻微的改变。人们已经厌倦了明目张胆的点击诱饵,新闻媒体也注意到了这一点。让我们希望这种有害的趋势很快消失。
人工智能既是工程技术又是科学学科
我们可以从两个角度来理解人工智能。
首先,作为一个工程学科,专注于构建有益的应用程序来改善人们的福祉。我们在谷歌、亚马逊、网飞、Spotify 产品中有很多这样的例子。所有这些公司都强烈依赖于我们每天使用的人工智能产品。
第二,人工智能可以被视为一个科学领域。艾的创始人在正式建立这个领域时,并没有想到今天的局面。他们想建立一个通用的人工智能;一个在各方面都和我们一样聪明能干的人工智能。他们认为这是一个可以实现的目标,所以所有的努力都朝着这个方向进行。
构建人们可以在日常生活中使用的有用应用程序的短期目标和促进我们对智力和思维的集体理解的长期目标是完全兼容的。然而,我们必须记住,两者都是人工智能的独立维度,因此,它们在不同的层面上发展和发生。
无论哪种情况,你都能找到意义和目的。你可以在一家不太知名的公司工作,建立图像识别系统,帮助机场安检更好地识别乘客。或者你可以在斯坦福大学进行研究,或者在 DeepMind 这样的世界级公司工作,推动该领域向前发展,并在今年最重要的论文之一中成为作者。
一些努力集中在利用科学来建立有用的技术。其他的努力都集中在推进这个领域,而不关心这些发现的直接效用。一个是利益所动。另一个是被好奇心所感动。
无论你选择什么都可以,但不要混淆两者。最重要的是,不要认为它们天生就在一起。学会将两种观点结合成多维概念,这就是人工智能。你将消除所有关于今天这个领域在哪里以及它将走向哪里的困惑。
外卖食品
- 并不是所有带“人工智能”的东西都是人工智能。我们不自觉地将“AI”这个词与先进的深度学习算法和强大的神经网络联系在一起。一些公司利用其背后的营销力量来吸引投资者、客户或员工。永远小心。
- **人工智能不仅仅是深度学习。**深度学习是最成功的人工智能范式,今天大多数人工智能都是深度学习,但过去不是这样,将来也可能不是。学会理解更大的图景,当深度学习决定改变路径以纳入更老的想法时,你就不会迷失。
- 艾并不像大众媒体描绘的那么先进。从历史上看,人工智能专家倾向于过度承诺他们能够实现的目标。现在,大众媒体也经常参与这种趋势。标题夸大了正在做的事情,误导了读者。从外部来看,我们只能从媒体告诉我们的信息中知道 AI 正在发生什么。试着去主要的来源,自己判断。
- 人工智能既是一门工程技术,也是一门科学学科。对该领域的一些困惑是由于混合了这两种观点。人工智能可以被理解为一种有用的技术,以我们每天使用的应用程序的形式出现,但也可以被理解为一种科学探索,以揭示人性的一些最大奥秘:智力和大脑。将两者结合起来,从更高的角度来看待人工智能是什么,不是什么。
如果你喜欢这篇文章,可以考虑订阅我的免费每周简讯https://mindsoftomorrow.ck.page/!每周一关于人工智能的新闻、观点、见解!
您也可以在这里 成为中等会员 直接支持我的工作,获得无限权限!:)
创业数据科学面试中不要强调的 4 件事
原文:https://towardsdatascience.com/4-things-not-to-highlight-in-your-startup-data-science-interview-e05b8c931dcc?source=collection_archive---------25-----------------------
如何最好地准备任何一轮融资、实习或全职创业公司的面试
我的职业生涯是在初创公司做数据科学家。一路走来,我还担任过小型团队的 DS 招聘经理。
人们在创业面试中会犯很多错误。
史蒂夫·哈拉马在 Unsplash 上拍摄的照片
今天,数据科学领域仍然存在巨大的招聘热潮——初创公司迫切需要合格的数据科学家和机器学习工程师。
然而,我已经看到数量惊人的 DS 候选人在简历和面试中强调错误的东西,这让我们选择了另一个候选人。
我想简单地谈谈 DS 候选人容易陷入的每个陷阱,以及你在面试中如何最好地定位自己以获得最终录用的方法
面试免责声明:本文不会深究任何技术技能要求,因为(1)已经有很多关于这个主题的文章,( 2)在我看来,面试中优秀候选人最重要的标志是 【软技能】——技术技能让你获得成功,软技能让你获得工作/晋升/等等。如果您希望我在另一篇文章中写出常见的技术问题,请告诉我!
面试免责声明#2:我只是一个人,这些是我对如何驾驭面试的看法。完全不同意
1.“清洁”项目
在采访中,如果你开始谈论一个 DS 项目,它(1)没有广泛的探索性数据分析(EDA)或者(2)在数据预处理上花费了不到 20 行代码…
…你需要谈论一个不同的项目。
任何数据科学家都会告诉你,80%的工作是数据清理和管理。出于这个原因,创业团队希望了解获得你的华而不实的模型输出所需要的(通常是艰苦的)准备工作。这可能包括技术堆栈、处理数据和做出大数据决策。
谈论你项目中的“肮脏”部分不仅会向招聘人员展示你能够处理混乱的数据,而且这也会给你一个展示相关专业知识和经验的机会。
您将专业处理的所有数据都将是脏的。特别是在创业的时候。
你不需要给出一个一步一步的故事,但你需要证明你知道如何获取肮脏的数据流并找到黄金。
如果你只有干净的项目:如果你是一名刚从大学/训练营毕业的学生,这种情况最有可能发生。如果你是,基于你的学校作业展示这些“真实世界”元素将是一个挑战——99%的指定项目都是用非常干净的数据集完成的。这里最好的建议是积极寻找脏数据,并对其进行处理。这就是我学习(并爱上)数据科学方式,我一直提倡这种方法,认为这是一种在积累宝贵经验的同时获得乐趣的好方法。值得一看的地方包括 Kaggle.com 的 T2 或 T4 的谷歌数据集搜索引擎 T5。
2.“小”项目
面试时,记住项目的影响越大,越有可能引起面试官的积极共鸣。
但不幸的是,许多崭露头角的数据科学家广泛谈论实际上没有那么大影响的项目——而是专注于我所谓的“小”项目。
对于来自大型科技公司的年轻候选人来说尤其如此。
不要以为这个项目是为一家大型科技公司做的,它就有很高的影响力。从经验来看,与相反的通常是大公司项目的情况:大的技术项目通常影响整个团队/公司愿景中相对较小的一部分。即使是在四大科技公司,一个不起眼的项目也不会让面试官感到兴奋。
你需要和面试官交流为什么你做的工作有意义,因为面试官需要相信你在他们公司做的工作也会有意义。
初创企业都是为了产生影响,如果你不能用你在之前的任务中产生的影响来定义你的工作,那么这将是一场艰苦的战斗。
"影响"不一定意味着你改变了世界,它只是意味着你能清楚地表达你的工作给你的组织带来的价值。不断增长的 KPI、引发新计划的有趣见解等。
如果你有的只是小项目:加入一个任务驱动的团队或俱乐部。做研究项目。这显然不是你可以在一个周末突击学习或完成的事情,但帮助一个组织朝着它的目标前进绝对是有意义和有影响力的工作。
3.你无法简单解释的复杂性
对于数据科学家来说,沟通是最重要的技能。许多候选人都在为此挣扎。
我在面试中最喜欢问的问题之一是
你如何向团队中的非技术人员解释 p 值?
p 值是一个非常基本的统计工具,但是你会惊讶有多少非常聪明的 DS 候选人被这个问题绊倒。不是因为他们不知道 p-val 是什么,而是因为将这种想法翻译成非技术语言具有挑战性!
在你的创业面试中,你几乎肯定会和比你技术水*低的人交谈,所以你可以用任何人都能理解的语言清楚地解释你最激动人心的项目是非常重要的。
借用爱因斯坦的一句话,如果你不能向一个 6 岁的孩子解释你的项目,那你自己也不明白。
**如何判断你是否能轻松解释困难的概念:**和你的一个(1)工程朋友和(2)非技术朋友交谈,试着向他们详细介绍你的一个项目,让他们能解释你做了什么和你是如何做的(一般来说)。如果你能清楚地解释你的项目,它是如何运作的,以及它对这两个朋友的影响,你就准备好接受面试了
4.冷静项目
真正激励我修改这篇文章的是,有多少候选人没能表达出他们热爱数据科学的原因。我的结论是,他们中的许多人关注的是让他们看起来印象最深刻的项目和经历,而不是他们所热衷的项目。
对于 DS 初创公司的面试来说,这是一个糟糕的主意。
你的面试官有你的简历,如果他们不认为你是一个令人印象深刻的候选人,他们就不会和你谈话。不要谈论那种无聊但在纸面上看起来很有声望的项目,即使那似乎是正确的事情,因为如果你不用心,面试会注意到。
如果你带着激情和热情去面试,这种能量会有感染力,大大增加你获得工作的机会。
激情是初创公司员工最重要的技能,包括数据科学家。在我第一次创业时,招聘经理告诉我,他“给了我一个机会”,因为我在最后一轮面试中表现出的热情超过了其他候选人。
反过来,我聘用了比其他候选人技术含量稍低的人,因为他们有如此强烈的热情,表达了为我们工作的愿望。这是正确的雇用。
谈谈你为什么喜欢 DS,或者一开始就进入它,以及你为什么想在这个特定的创业公司工作。
如果你所有的项目都是你不感兴趣的:哦,天哪,这可真难。你确定你是在正确的领域吗?找出你感兴趣的主题或问题——体育、医疗保健、气候等——并找到一个与你的热情相关的数据集。或者更好的是,申请在你热爱的领域工作的公司;那样的话,你将会在激情项目中获得报酬!
数据科学作为一个领域仍在发展和演变,因此正确的职业道路或进行面试的方式也在不断变化。虽然技术技能需求可能会不断变化,但我敢打赌,随着数据科学的成熟,上述软技能需求将会持续存在。
感谢阅读,希望你喜欢!
让你的大数据职业转型失败的 4 件事
原文:https://towardsdatascience.com/4-things-to-do-to-fail-your-career-transition-into-big-data-880a243dbdda?source=collection_archive---------59-----------------------
这里有几个陷阱——我曾踏入其中
埃里克·卡瑞茨在 Unsplash 上的照片
1 推迟你做出转换的决定
一切从这里开始。当决定转换时。你选择转换的那一刻。
从你考虑转行到数据科学或大数据已经过去几个月了。
你喜欢编码;你已经用 Jupyter Notebook 完成了几个 Python 教程。
你真的喜欢编码。你真的需要。
现在是时候转换了。这次你真的很有动力。这一次你将完全投入到这个新的冒险中。
这次你要把辞职信交给你的经理。
等等什么?
辞职?
不,你不能一时冲动辞职。你不能丢下你的同事不管就走了。是你的老板教会了你现在知道的一切,现在你要走了?
不,你现在不能换。
你父母会怎么说?他们为你的学校买单。他们帮你付了学生公寓的房租。他们给你提供了很多找到稳定工作的建议。现在你拥有了一切,你却要放弃?
你在学校的时候不擅长编程。你喜欢那样,但你知道,你不够好,没有资格做全职工作。而你将面对的是该领域毕业的其他考生。他们确实参加了计算机科学的课程。他们做到了。而你没有。
你可能还需要支付抵押贷款。你可能有孩子要照顾。即使你找到了教育或培训机会,你也可能不得不搬到一个新的地方,搬走你所有的东西,寻找一个新的公寓,就好像你不久前还是个学生一样。
不。今年你会留在你的工作岗位上。你仍然需要了解这份工作。你需要更多的经验。果然。
明年你就要转行了。
取而代之的是:计划你的职业转换。
这是一个需要评估后果的决定,尤其是当你像一个家庭一样有责任的时候。权衡利弊。
和你的至亲交谈。倾听所有的反馈,积极的和消极的。找到那些也像你计划的那样改变的人。如果他们成功了,为什么不是你?
2 你的简历不是数据驱动的
你已经做了决定。您现在正在切换。你现在正在寻找数据方面的机会。任何机会。
你更新了简历和 LinkedIn 个人资料。现在你每天都要发送几十份申请。是的,你认为你可能有机会找到一份数据科学或数据工程师的工作。
为什么?因为你以前是哈佛和斯坦福的学生。哼真的吗?好吧,这只是暂时的。你把你的 MOOC 证书放在你 LinkedIn 个人资料的教育部分。
现在你的简历是数据驱动的。
现在你是一个科技爱好者。就像你每天浏览的十几份工作一样。
但是日子已经过去了。现在是几周。你的收件箱里收到的都是这个叫“noreply”的家伙的邮件。你预先知道写的是什么。“谢谢你对我们公司感兴趣。我们回顾了您的经历……”
你知道的。只有从这些名牌大学毕业的人才能成为数据科学家。只有那些获得计算机科学硕士学位的人才能成为数据工程师。
你知道的。你必须在 2 或 3 年的大学学习中再次承诺,以获得计算机科学的正确技能,然后成为一个好的候选人。
但是你不能在 2 到 3 年内没有收入。不可能的。这是浪费时间。你最*很晚才睡觉去申请工作。现在你需要睡觉。你明天一早起来继续工作。做着同样的工作。
取而代之的是:让你的简历以数据为导向,用有意义的数据展示你的工作表现。
我们很少看到不是一系列工作邀请的简历。许多候选人把他们的简历写成一份任务描述清单,没有显示任何关键的绩效指标。
许多人忘记从简历中去掉他们高度专业化工作的细节。
你不能说:“我在中世纪旅游方面的经验将有助于构建软件架构。”或者“我在野外地质学方面的经验显示了我适应任何新环境的能力”。
这几点太浅了。
尝试寻找数字关键绩效指标。尝试将这些问题与具体向数据科学家、数据工程师或数据分析师提出的问题相匹配。
3 忽略来自经验丰富的导师的建议和推荐
终于来了!终于!你猜对了!你得到了这个期待已久的机会!
这是你在数据行业的第一次经历。你刚刚参加了实习,或者学徒。
你的经理给了你一个任务。这个项目是你的。您需要进行概念验证,然后将它部署到生产环境中。
你的项目有很多组成部分,你的经理也知道。以下是他的建议:你可以通过使用现有的付费(但便宜)GAFAM API 来获得最复杂的组件,从而更快地放弃你的概念证明(POC ),或者你可以使用免费和开源的,但你必须自己编写更多的代码。
因为你喜欢挑战,所以你选择了最艰难的方式。
发生了什么猜想?
两个月后,仍然坚持重新发明轮子。短期内不会发布 POC。
你的经理很生气,因为 1)你很慢,浪费时间在 GAFAM 通过他们的 API 做得更好的事情上,2)你没有听他的。
他想帮你。他心中有一个路线图。现在,你偏离了轨道。
怎么办:听,听,听。
你的导师和经理在这里帮助和指导你。他们在这里为一个成功的项目提供指导。
所以,仔细听着,如果你有其他的想法,当然你可以试一试,但是是在家里。
4 只依靠你的工作日或同事来获得经验和知识
编程很难。你通过艰难的方式学会了。虽然你参加了几十个教程和 MOOCs,但还有很多东西需要了解。每天都有新词出现:Java、Stream、Avro、Spring、beans 等等。
这么多事情。所以,你问你的同事。
嘿,你知道那是什么意思吗?
对不起,我在我的代码中找不到错误。你能看一下吗?
抱歉打扰你,我不明白我这里的错误。你有时间帮我吗?
诸如此类…
你的同事很有耐心。他们愿意帮忙。当然可以。但是能持续多久呢?他们不是你的导师。他们不是你的私人老师。你猜怎么着,他们一天下来也有工作要做。
取而代之:问一些可以用是或否来回答的问题
我称之为獠牙问题。我的灵感来自网飞电视剧《纸牌屋》中的亿万富翁实业家 Raymond Tusk。图斯克工作的时候,电话整天响个不停。作为公司的首脑,他必须做出许多决定。因此,他对他的员工制定了以下规则:只问我可以用是或不是回答的问题。
这意味着提问的员工必须收集和总结最重要的信息。
这是你应该做的。
问问题是可以的,但是要主动问。向人们展示你对这个问题有一些线索。
之前问谷歌,然后问一个人。在你的问题中提供一些信息。表明你已经接*解决方案了。
《纸牌屋》的雷蒙德·塔斯克( imdb )
结论
职业转换不是一件容易实现的事情。路上有很多陷阱,很多会导致你项目的失败。
但是结局很棒。在大数据领域工作很棒,更一般地说,成为一名软件工程师也很棒。
你也转行了吗?在评论中分享你的故事:)
你想成为一名软件工程师吗?在评论中告诉我们你的项目;)
解决数据质量问题时需要知道的 4 件事
原文:https://towardsdatascience.com/4-things-you-need-to-know-when-solving-for-data-quality-4abf6d31b2c9?source=collection_archive---------23-----------------------
如何确定数据质量解决方案是否适合您
图片由 Unsplash 上的 Artem Sapegin 提供。
随着数据管道变得越来越复杂,投资于数据质量解决方案正成为现代数据团队越来越重要的优先事项。但是你应该建造它,还是购买它呢?
在这篇客座博文中, 斯蒂芬·盖尔盖伊 和 斯科特·奥利里 ,蒙特卡洛的解决方案工程师,讨论了这两种方案的 4 个关键挑战、机遇和权衡。
随着公司接收越来越多的数据,数据生态系统变得越来越复杂——从将非结构化数据存储在 数据湖 中,到让更多内部消费者能够民主化地访问数据——数据质量https://www.montecarlodata.com/the-new-rules-of-data-quality/的责任从未如此之大。
毕竟,如果不能依赖数据,那么你的数据*台有多先进,或者你生产了多少仪表板,都没有用。
确保数据的新鲜、准确和可靠至关重要,但这并不容易。数据工程师和分析师花费超过 40%或更多的时间处理数据质量问题,分散了他们在项目上的注意力,而这些项目实际上会推动业务的发展。
数据团队在内部构建自己的数据质量解决方案并不罕见,对生产管道进行分层稳健测试和监控,并 设置 SLA 以跟踪可靠性 并管理利益相关方的期望。对于那些刚刚起步的人呢?灵感就在那里,主要是由优步、 Airbnb 、 Spotify 、网飞和其他科技巨头撰写的关于他们自己的数据质量之旅的文章。
与任何新兴技术一样,一个哲学(和财务)问题很快就出现了: 您应该构建还是购买一个数据质量解决方案 ?
在去年与数百家公司交谈后,我们了解到大多数组织的数据堆栈结合了定制、SaaS 和开源解决方案。在这些对话中,数据主管、首席数据官和产品经理与我分享了他们在选择构建还是购买其堆栈的核心元素时所犯的错误。
根据专家的意见,在选择构建还是购买数据质量解决方案时,以下是您必须做的 4 件事:
1.了解您的解决方案的预期价值实现时间
像任何内部解决方案一样,设计、构建、扩展和维护内部数据质量解决方案需要时间、金钱和人力。对于你的 Ubers,Airbnbs,和 Netflixes 的世界来说,这没问题。如果您有一个庞大的数据工程和数据科学团队,他们有大量的额外时间,那么构建可能是有意义的-但在大多数公司,数据团队缺乏工作很少是一个问题。
如果像大多数公司一样,在可预见的未来,您没有 5 名以上的数据工程师和 1 名产品经理不知疲倦地解决这个问题,那么您可以考虑寻找内部解决方案来满足您的数据质量需求。
在决定是构建还是购买解决方案时,了解您的团队为构建所述解决方案的新员工预算会有所帮助。图片由蒙特卡洛提供。
当一家领先的 insurtech 提供商的数据团队研究构建一个 数据可观测性 解决方案时,他们意识到构建一个全面的异常检测算法需要他们数据工程团队 30%的人员,而构建和维护的解决方案每年将花费45 万美元以上。他们选择购买。****
同样,我们采访的一家医疗保健初创公司的数据工程副总裁指出,如果他 20 多岁,他会想要建立。但是现在,在他快 30 岁的时候,他几乎只买。
“我有热情,”他说,“但是如果我有时间、精力和资源从头开始建立一个数据*台,那我就完了。我现在长大了,也更聪明了——我知道不该不相信专家。”
它还有助于了解构建或购买(以及集成)解决方案将花费您的组织多少时间。图片由作者提供。
底线是,不要低估从零开始构建解决方案的时间价值。在大多数情况下,数据工程时间太宝贵了,不能花在构建一个可能需要一年多时间才能启动和运行的解决方案上。说到数据质量和可靠性,大多数组织没有时间、资源或声誉来牺牲。
2.机会成本因素
当您的数据工程师花费时间手动构建数据测试来考虑任何和所有可能的边缘情况时,这些时间本可以用于解决客户问题、改进您的产品或推动创新。
当您考虑到即使是世界上最强大的测试也无法解决大约 80%的数据问题时,考虑构建和维护这些测试的机会成本是值得的,而不是从事实际上会推动您的业务的项目。
除了直接的机会成本之外,当问题出现时,使用半吊子数据质量解决方案的数据工程师也可能会花费更多的时间来解决问题,从而进一步耗尽他们在这些关键工作上的精力。事实上,我们发现数据工程师花费大约 40%的时间手动解决数据问题;如果时间就是金钱,那可不是小钱。
说到您可能会花费时间和金钱的地方,购买由专门团队支持的可靠解决方案来帮助您的数据工程师解决任何出现的停机问题通常是有意义的。
例如,在直接面向消费者的床垫品牌居民通过数据可观察性实施数据质量后,他们看到数据问题减少了 90%,缩短了剩余 10% 的检测时间。
正如他们的数据工程主管 Daniel Rimon 告诉我们的那样,“在数据可观察性出现之前,我一直在观察,担心自己会遗漏什么。我现在无法想象没有它的工作…我认为每个数据工程师都必须有这种级别的监控,才能以高效和良好的方式完成这项工作。”
采取主动(而不是被动)的方法来解决这个问题
数据必然会在某一点或另一点中断,这导致团队采取被动的方法来修复错误,而不是更加勤奋和主动地处理它们。随着数据管道变得越来越复杂,解决数据质量问题的被动方法是不够的。
测试(一种重要的主动方法)可以帮助验证您对数据的假设。您可以设置手动阈值,测试空值和其他常见的数据问题指标,甚至使用测试来确定数据是否超出预期范围。
然而,尽管 测试可以检测和防止许多问题 ,数据工程师不太可能预测开发期间的所有可能性,即使他们可以,也需要大量的时间和精力。依赖于测试的数据团队可能会捕捉到您可以轻松预测的问题,但会错过“ 未知的未知”—如分布异常、模式更改、不完整或陈旧数据等问题。
这就是为什么为了真正采取主动方法来解决数据质量问题,最好的数据团队正在利用双重方法,将数据测试与整个管道的持续监控和可观察性相结合。
帮助数据团队快速识别、预警和补救数据质量问题的集中式仪表板提供了一种主动方法,以确保管道所有阶段的高数据可靠性和理解。图片由作者提供。
当物流公司 Optoro 需要解决客户第一个注意到并标记数据问题的问题时,他们考虑构建一个自主开发的解决方案,在客户和不良数据之间进行沟通。虽然他们的选择包括开发一个定制的 SQL 完整性检查器或建立源和目的地检查,但他们的数据团队最终确定这太耗时和对于 Optoro 的许多管道来说,覆盖面太有限。
最终,Optoro 选择投资于现成的数据可观察性解决方案,数据团队发现,端到端的自动化谱系不需要手动映射,是其数据*台的重要补充,并提高了数据质量。
从你今天和未来的需求两个方面来恰当地确定问题的范围
在构建或购买任何数据解决方案之前,您应该确切了解您希望实现的目标,不仅是明天,而是未来 6 个月、12 个月甚至 18 个月。
与我们交谈的许多公司都在其数据基础架构的特定方面考虑数据质量,而不是端到端。为了解决管道中特定部分(例如,转换或建模层)的数据质量问题,数据工程师编写一些测试来解决他们的团队当前面临的直接且充分理解的痛点。
虽然这种方法可能在短期内有效,但是当编写、部署和维护测试成为数据工程师的一项全职工作时,它会让组织失败。这就引出了一个问题,这真的是对数据工程师时间的最佳利用吗?
一种更全面、端到端的方法来解决数据质量问题,该方法结合了映射上游和下游依赖关系的沿袭,并突出显示哪些数据资产受到了数据事件的直接影响。图片由蒙特卡洛提供。
在决定是在内部构建工具还是选择托管供应商之前,您应该能够回答以下关键问题:
谁将是该工具的主要用户?
这个工具会被数据工程师使用吗?还是数据科学家?数据分析师呢?在您回答这些问题之前,了解在您的组织中谁拥有数据质量https://www.montecarlodata.com/which-of-the-six-major-data-personas-are-you/是有帮助的,我们的意思是:当管道破裂或仪表板失效时,谁将负责解决和报告数据问题?如果 15 名以上对您的数据的特定需求和行为有所了解的数据工程师是主要用户,那么内部构建可能最有意义。如果您正在处理大量的数据角色,或者支持一个由工程师和/或分析师组成的精简团队,那么选择一个具有用户友好的协作界面的解决方案可能是一个不错的选择。
使用 SasS 解决方案的另一个好处是,它充当了数据健康的单一事实来源。在我接触过的许多组织中,数据工程师、分析师和科学家都有自己的数据质量流程,导致针对数据事件的多种警报,而没有一个单一的用户界面将一切联系在一起。
您希望您的工具解决哪些数据问题?
当内部版本成为入场券的时候
这些数据问题是您的企业特有的吗?这种类型的 数据停机 是第三方供应商可能不会优先考虑的事情吗?如果是这种情况,那么最好在开源解决方案的基础上构建。
然而,如果你选择这条路,我建议你的数据工程和数据分析团队紧密合作。当涉及到内部建设时,沟通是确保组织的不同部分不会出现重复的关键。一次又一次,我看到数据工程团队为他们的 ETL 管道构建了一个监控工具,而分析团队(只在几个小隔间工作或不停地打电话)构建了一个数据质量仪表板。每个解决方案都需要数百个小时和大量团队成员来构建,但只能解决特定的短期问题,而不能从数据堆栈的分析和工程两方面更具战略性地解决数据质量问题。
当第三方供应商可能是最佳选择时
这个问题在你的行业中普遍存在吗?在这种情况下,一流的 SaaS 解决方案将是您的最佳选择,因为他们的工具将作为您数据的单一真实来源,并且可以支持未来的使用案例,而无需您的团队进行任何额外投资,前提是您的合作伙伴供应商继续投资于以客户为中心的https://www.montecarlodata.com/how-to-convert-100-of-your-proofs-of-concept-into-happy-customers/产品路线图。
您的数据治理需求是什么?
诸如 CCPA 和 GDPR 等数据法规已经改变了企业处理个人身份信息的方式(PII)。一些公司建立自己的数据目录以确保符合州、国家甚至经济联盟的法规。无论您选择构建还是购买您的数据质量解决方案,治理都将是一个关键的考虑因素,您应该确保您的解决方案能够满足您的业务需求,尤其是当 IPO 或任何其他重要的公司里程碑即将到来时。
注意:如果你选择走第三方厂商的路线,一定要确保你投资的期权是 SOC 2 认证 。你以后会感谢我们的。
选择权在你
虽然没有一个神奇的公式告诉你是构建还是购买数据质量解决方案,但是评估谁在使用你的产品、你的数据组织的成熟度以及你的数据目标可以揭示一些明显的迹象。
在此之前,祝您没有数据宕机!
有兴趣了解更多关于 Fox、Intuit 和 PagerDuty 的数据团队如何通过 蒙特卡洛 ?伸出手去 斯蒂芬·盖尔盖伊斯科特·奥利里 ,还有 团队的其他人 。**
根据功能充分利用熊猫群的 4 个技巧
原文:https://towardsdatascience.com/4-tips-to-make-the-most-of-pandas-groupby-function-8f0ebeece2e6?source=collection_archive---------14-----------------------
促进您的探索性数据分析过程
马库斯·斯皮斯克在 Unsplash 上的照片
Pandas 是一个非常流行的数据分析和操作库。它提供了许多功能来执行高效的数据分析。此外,它的语法简单易懂。
在这篇文章中,我们关注熊猫的一个特殊功能——群居。它用于根据列中的类别或不同值对数据点(即行)进行分组。然后,我们可以计算一个统计量,或者对与分组类别相关的数字列应用一个函数。
当我们浏览这些例子时,这个过程将会很清楚。让我们从导入库开始。
import numpy as np
import pandas as pd
我们还需要一个数据集的例子。我们将使用 Kaggle 上的墨尔本房屋数据集中的一个小样本。
df = pd.read_csv("/content/melb_data.csv", usecols = ['Price','Landsize','Distance','Type', 'Regionname'])df = df[(df.Price < 3_000_000) & (df.Landsize < 1200)].sample(n=1000).reset_index(drop=True)df.head()
(图片由作者提供)
我只看过原始数据集的一小部分。read_csv 函数的 usecols 参数允许只读取 csv 文件的给定列。我还过滤了价格和土地面积方面的异常值。最后,使用 sample 函数选择 1000 个观察值(即行)的随机样本。
在开始介绍技巧之前,让我们实现一个简单的 groupby 函数,为 type 列中的每个类别执行*均距离。
df[['Type','Distance']].groupby('Type').mean()
(图片由作者提供)
*均而言,住宅(h)比其他两种类型更远离中央商务区。
我们现在可以从更有效地使用 groupby 函数的技巧开始。
1.自定义列名
groupby 函数不更改或自定义列名,所以我们并不真正知道聚合值代表什么。例如,在前面的示例中,将列名从“distance”更改为“avg_distance”会更有意义。
实现这一点的一种方法是使用 agg 函数而不是 mean 函数。
df[['Type','Distance']].groupby('Type').agg(
avg_distance = ('Distance', 'mean')
)
(图片由作者提供)
我们总是可以在以后更改列名,但是这种方法更实用。
如果我们聚合多个列或者对一个列应用不同的函数,那么定制列名就变得更加重要。agg 函数接受多个聚合。我们只需要指定列名和函数。
例如,我们可以计算类型列中每个类别的*均值和中值距离值,如下所示。
df[['Type','Distance']].groupby('Type').agg(
avg_distance = ('Distance', 'mean'),
median_distance = ('Distance', 'median')
)
(图片由作者提供)
2.λ表达式
Lambda 表达式是 Python 中函数的一种特殊形式。一般来说,lambda 表达式没有名字,所以我们不像普通函数那样用 def 关键字定义它们。
lambda 表达式背后的主要动机是简单和实用。它们是一行程序,通常只使用一次。
agg 函数接受 lambda 表达式。因此,我们可以使用 groupby 函数执行更复杂的计算和转换。
例如,我们可以计算每种类型的*均价格,并用一个 lambda 表达式将其转换为百万。
df[['Type','Price']].groupby('Type').agg(
avg_price_million = ('Price', lambda x: x.mean() / 1_000_000)
).round(2)
(图片由作者提供)
3.As_index 参数
groupby 函数将组分配给返回的数据帧的索引。在嵌套组的情况下,这看起来不太好。
df[['Type','Regionname', 'Distance']]\
.groupby(['Type','Regionname']).mean().head()
(图片由作者提供)
如果我们想稍后在这个数据帧上执行分析,将类型和区域名称列作为索引是不实际的。我们总是可以使用 reset_index 函数,但是有一个更好的方法。
如果 groupby 函数的 as_index 参数设置为 false,则分组后的列表示为列而不是索引。
df[['Type','Regionname', 'Distance']]\
.groupby(['Type','Regionname'], as_index=False).mean().head()
(图片由作者提供)
4.缺少值
默认情况下,groupby 函数忽略缺少的值。让我们首先将 type 列中的一些值更新为 missing。
df.iloc[100:150, 0] = np.nan
iloc 函数通过使用索引来选择行列组合。上面的代码将第一列(0 索引)的 100 和 150 之间的行更新为缺失值(np.nan)。
如果我们试图计算 type 列中每个类别的*均距离,我们将得不到任何关于缺失值的信息。
df[['Type','Distance']].groupby('Type').mean()
(图片由作者提供)
在某些情况下,我们还需要了解缺失值的概况。这可能会影响我们处理它们的方式。groupby 函数的 dropna 参数还用于计算缺失值的聚合。
df[['Type','Distance']].groupby('Type', dropna=False).mean()
(图片由作者提供)
结论
groupby 函数是探索性数据分析过程中最常用的函数之一。它为变量之间的关系提供了有价值的见解。
有效地使用 groupby 函数来提高 Pandas 的数据分析过程是很重要的。我们在本文中介绍的 4 个技巧将帮助您充分利用 groupby 函数。
感谢您的阅读。如果您有任何反馈,请告诉我。
让您的数据科学之旅更有成效的 4 个技巧
原文:https://towardsdatascience.com/4-tips-to-make-your-data-science-journey-more-productive-47790c28a84f?source=collection_archive---------16-----------------------
学习数据科学既有趣又累人。
菠萝供应公司在 Unsplash 上的照片
数据科学家曾被定义为 21 世纪最性感的工作。是的,这很迷人,但成为数据科学家的道路充满了障碍和急转弯。
2019 年,我决定转行,追随自己的热情,成为一名数据科学家。我几乎花了两年时间(T4)才在这个领域找到第一份工作。
当我回顾我的数据科学之旅时,如果重新开始,有些事情我会做得不同。我想把它们作为我的建议分享给想进入这个领域的人。
我坚信,这些提示将对有抱负的数据科学家或计划转行成为数据科学家的人有所帮助。
提示#1
首先设置您的环境。
理论知识很重要,但实践是必须的。在我旅程的开始,我花了大部分时间学习概念和算法。我没有花足够的时间练习。
执行是关键部分。即使你有解决问题的最棒的想法,除非你付诸行动,否则也是无用的。动作部分涉及软件工具和软件包。
Google Colab 和 RStudio 分别是练习 Python 和 R 的绝佳工具。我最喜欢的 Python IDE 是 PyCharm。数据科学家的另一项必备技能是 SQL。您可以轻松地将 MySQL 或 PostgreSQL 安装到您的计算机上。
在您开始数据科学之旅时就开始使用它们。事实上,这应该是首先要做的事情。每天练习,即使只有 30 分钟。
提示#2
在云上做事情。
我很确定你的第一个雇主会使用云计算。事实上,越来越多的企业将他们的数据和计算转移到云端。因此,数据科学家应该能够自如地使用基于云的工具和服务。
我并不是说您应该获得成为云解决方案架构师所需的技能。但是,您至少应该知道提供了哪些服务和解决方案,以及如何在数据科学工作流中使用它们。
了解云计算的最佳方式是通过实践。AWS 免费层账户允许免费使用云服务。对于练习和熟悉*台来说已经足够了。例如,在 EC2 服务器上运行您的脚本是一个很好的实践。
技巧 3
想出自己的问题。
数据科学是关于使用数据解决问题的。问题的形式可以是预测金融实体、需求预测、改进流程等等。
大多数认证包括案例研究或项目。然而,它们不够有挑战性。问题已经为你决定了。其中一些也为解决方案提供了框架。完成这样的项目,很多时候就像是填空。
它们有利于练习工具和框架。但是,你也需要提高你的分析思维能力。数据科学家的思维应该专注于描述可以用数据解决的问题。
提高这种技能的唯一方法是尝试提出一个问题并设计你的解决方案。作为一名数据科学家,它肯定会帮助你更有创造力和生产力。
提示#4
紧跟行业。
数据科学仍在发展。两年前非常流行的库或框架现在可能会被认为是过时的。此外,新的工具和框架很快被引入数据科学社区。
跟上数据科学技术的新工具和增强功能至关重要。然而,随着新工具数量的不断增加,这并不是一件容易的事情。
我对紧跟行业的建议是跟随播客。有很多选择,但你可以很容易地找到受欢迎的。他们通常对新技术了如指掌。
你甚至可以在一个新工具被引入之前了解它。播客提供了倾听人们谈论他们研究的机会。其中一些研究课题有可能很快变成产品。
我最喜欢播客的一点是,我可以了解数据科学生态系统中的初创企业。了解他们想要解决的问题,他们使用什么样的工具和框架,以及他们面临什么样的挑战是非常有价值的。
结论
成为数据科学家的道路可能既有趣又累人。由于它仍然是一个不断发展的领域,最优的学习路径还没有很好地建立。因此,有抱负的数据科学家在他们的学习旅程中面临许多挑战。
在这篇文章中,我列出了 4 个建议,我认为它们会让你的旅程更有成效。这些技巧基于我学习数据科学的经验。
感谢您的阅读。如果您有任何反馈,请告诉我。
掌握 Python f-strings 的 4 个技巧!
原文:https://towardsdatascience.com/4-tips-to-master-python-f-strings-a70ca896faa4?source=collection_archive---------13-----------------------
使用这些有趣的提示和技巧来更好地利用 f 弦
Python 在 Python 3.6 中引入了 f 字符串(格式化的字符串文字)。这些字符串类型使得字符串插值更容易阅读(和编写!).
由克莱门特·赫拉尔多在 Unsplash 拍摄的照片
我在我的帖子中深入讨论了 f 弦,但在这篇帖子中,我将探索一些要点和一些有趣的地方。让我们开始吧!
Python 的 f 串是什么?
Python 的 f 字符串是一种计算格式化字符串表达式的简洁方法。这听起来可能类似于 Python 中的其他字符串格式化方法。
但是,f 字符串真正的优点是它们是在运行时计算的。这使得它们特别强大,可以让你在字符串中包含表达式、条件、格式和对齐方式。
查看我的视频,了解本教程中未涉及的 f 字符串的更多信息,包括如何使用 f 字符串的条件以及如何更容易地调试:
Python f-strings 怎么写?
要在 Python 中编写 F 字符串,只需在字符串前面加上 F(或 F)即可。您可以使用单引号、双引号甚至三引号来创建字符串。
任何要计算的表达式都放在大括号“”中。放入这些花括号中的内容由您决定——它可以是一个变量名、一个表达式,或者如您稍后将看到的,甚至是条件!
让我们从一个简单的例子开始:
我们可以看到花括号内的所有内容都被求值。这一点的巧妙之处在于,评估是在运行时进行的。
我在下面的 YouTube 视频中详细介绍了 f 弦——如果你订阅的话,我会很高兴的!
1 —更改字符串的对齐方式
F-strings 可以很容易地对齐字符串,使您的输出更容易阅读。
与其他格式化方法类似,这是使用冒号后跟某些字符来完成的。具体来说,这使用了以下约定:variable:{alignment}{width}
。
在本例中,您要插入的变量后跟一个冒号、对齐类型和宽度。宽度将是要占用的总宽度。例如,如果变量的长度为 5 个字符,宽度设置为 20,那么将插入 15 个字符。
可以使用以下对齐类型:
- 右对齐 : <
- 左对齐 : >
- 居中对齐 : ^
让我们来看一个例子:
2-使用 f 字符串创建熊猫列
你也可以使用 f-string 在 Pandas 中创建新的列,以使它们的命名看起来更简洁。例如,假设我们想要通过向新列追加某个字符串来创建新列。你可以写:
您也可以通过连接字符串来实现这一点,但这是一种更干净、可读性更好的方式。
3 —用零填充数字
f 字符串使得用任何字符填充数字变得非常容易,比如零。例如,当您处理 id 并希望它们长度相同时,这可能会很有帮助。
让我们来看一个例子:
假设我们希望所有的值都像这样:013453466 和 00000044。为了用 f 字符串做到这一点,我们可以使用{var:0w}
来完成,其中var
是要填充的变量,w
是要填充的值的宽度。
我将展示一个如何用列表理解或.apply()
方法做到这一点的例子:
04-将值格式化为货币
当您准备好便于查看的报表时,将值设置为货币格式会很有帮助。例如,你不想给你的老板或客户看价值 125435673.76,而不是 125,435,673.76 美元,这要容易读得多。
对于 f 字符串,我们可以通过使用,:2f
来应用带两位小数的逗号分隔。这真是太方便了。让我们看另一个例子。我们将使用与之前相同的两种方法来创建新列:
结论:继续多学习!
我希望你从这篇教程中学到了很多。如果你想了解更多关于 f 弦的知识,点击这里查看我的教程。我还有一本电子书,介绍了如何利用熊猫进行数据科学的简单易懂的介绍。
掌握 Python 列表理解的 4 个技巧
原文:https://towardsdatascience.com/4-tips-to-master-python-list-comprehensions-616defe70738?source=collection_archive---------44-----------------------
真正理解那些列表理解!
天一马在 Unsplash 上拍照
列表理解提供了优雅、简洁的方式来创建、修改和过滤 Python 中的列表。
它们的工作方式类似于 for 循环,但更像 Pythonic。
如何写一份清单理解
让我们通过将它们与 for 循环进行比较来看看如何编写 list comprehensions。我们将使用 range()函数创建一个包含从 0 到 9 的值的列表:
我们可以看到,与依赖 for 循环相比,编写列表理解要简单得多。我们不仅不需要初始化一个空列表,我们还可以将所有的事情简化为一行代码!
看看我下面的图片,看看它们是如何以可视化的方式工作的:
如何写清单理解?资料来源:Nik Piepenbreier
技巧 1:用列表理解来修改列表
列表理解遍历列表中的每一项,并对其表达式求值。
因此,我们可以很容易地使用列表理解来修改列表。
让我们看看另一个例子,我们将数字 1-5 *方:
如果你想深入理解列表,可以看看我在 YouTube 上的视频:
Python 列表理解视频。尼克·皮彭布勒尔
技巧 2:用列表理解过滤列表
您也可以使用列表理解轻松过滤列表!
例如,让我们从 0–9 的列表中过滤出任何奇数:
技巧 3:用列表理解有条件地修改列表
假设您有一个员工名单,如果他们的销售额超过 100 美元,他们将获得 13%的佣金。有人给了你一份销售清单,你需要修改它,看看是否要支付佣金:
</7-advanced-python-dictionary-techniques-you-should-know-416194d82d2c>
技巧 4:在列表理解中使用多个条件句
您也可以在列表理解中应用多个条件。如果您希望基于多个条件为真进行过滤,这可能会很有帮助。
为此,只需在第一个语句之后添加后续的 if 语句。
让我们看一个例子,如果数字 0-15 都是 2 和 3 的倍数,那么它们将被过滤:
结论
感谢阅读这篇文章!希望你觉得有用!
如果你想更深入地理解列表,请点击这里查看我的完整的教程。
如果你有任何问题,请在评论中留下,我会尽力回答。
点击此处订阅(图片由 stickpng.com 提供)
如果你想订阅我的 YouTube 频道,可以看看这里,我经常在这里发布 Python 和熊猫教程。
用于可复制 Jupyter 笔记本的 4 种工具
原文:https://towardsdatascience.com/4-tools-for-reproducible-jupyter-notebooks-d7423721bd04?source=collection_archive---------10-----------------------
实践教程
如何增加笔记本代码的健壮性
由凯文·Ku在 Unsplash 上拍摄的照片
Jupyter 笔记本在更广泛的编程社区中名声不佳。Joel Grus 在 2018 年 JupyterCon 上勇敢地发表的著名的 *“我不喜欢笔记本”*演讲,涵盖了许多原因。一般来说,笔记本被认为促进了糟糕的编码实践,因为它们可能难以进行版本控制,通常依赖于以特定顺序运行的单元来返回正确的结果,并且可能难以测试和调试。
“我不喜欢笔记本”,乔尔·格鲁什著
然而,在执行探索性数据分析和初始机器学习模型开发等任务时,Jupyter 笔记本仍然是大多数数据科学家的首选。将图形和表格等输出可视化并与您的代码保持一致的能力,以及为分析添加丰富注释的能力,是任何其他工具都无法复制的。
虽然笔记本电脑仍然是如此受欢迎的选择,但值得看看一些可用的选项,以克服一些可能使笔记本电脑代码不那么健壮的问题。在本文中,我将通过代码示例简要介绍四个工具,它们为一些问题提供了解决方案。其中包括:
- 为了更好的版本控制。
- 使用 nbQA 在笔记本代码上运行 linters。
- Jupyter-nb 管理笔记本内依赖关系的要求。
- 使用 nbval 进行笔记本验证。
1.Nbdime 用于更好的版本控制
使用 Github 等工具对笔记本进行版本控制可能会很困难。版本控制工具不能很好地呈现差异,因为它们不理解典型笔记本的逻辑结构。这使得跟踪变更和合并代码变得很有挑战性,
Nbdime 是一款旨在解决这一问题的工具,它提供了更丰富的视觉差异,可以非常容易地看到同一笔记本不同版本之间的变化。
Nbdime 可以通过 pip 安装。
pip install nbdime
这将自动安装并启用 Jupyter 笔记本的扩展。如果它没有正确安装,您可以使用以下命令手动安装,添加一个标志来确定它是为哪些用户安装的--system
(系统范围)、--user
(当前用户)、--sys-prefix
(当前虚拟环境)。
nbdime extensions --enable [--sys-prefix/--user/--system]
一旦所有的东西都安装好了,如果你打开一个 Jupyter 笔记本,你应该会在你的工具栏上看到下面的新图标。
笔记本中的 Nbdime 图标。图片作者。
我创建了一个笔记本来展示 nbdime 的功能,它在波士顿房价玩具数据集上训练了一个简单的线性模型。这是我存储在 Github 的一个仓库中的一个项目的一部分。笔记本如下所示,代码可以在这个链接找到。
示例笔记本。图片作者。
笔记本工具栏上的新图标构成了 nbdime 的 web 视图功能。该视图提供了对笔记本所做更改的丰富可视化表示。
点击 git 按钮将显示上次提交和当前保存的笔记本版本之间的差异。
单击看起来像钟面的图标将显示最新检查点和当前保存版本之间的差异。
我将对笔记本进行一些更改,并使用 web 视图查看与上次提交的差异。
在笔记本中,我改变了我正在使用的模型,并对残差图做了一个小的改动。让我们看看 nbdime 提供的结果差异。
正如您在下图中看到的,nbdime 逐行逐单元格地显示了自上次提交以来究竟发生了什么变化。它甚至显示了每个单元的输出是如何变化的,包括图表。
Nbdime web 视图中的笔记本差异。图片作者。
2.林挺与 nbQA
林挺是检查代码质量的过程。林挺工具扫描您的代码并检查常见的样式错误。例如,Python linters 通常会检查不符合广泛使用的风格指南(如 Pep8)的代码。
NbQa 是一个允许你在 Jupyter 笔记本上运行任何标准 python linter 的工具。目前可从该工具中访问以下棉条:pylint、black、auto flake、check-ast、doctest、flake8、mypy 和 yapf。
要安装,只需运行以下。
pip install nbqa
让我们在我最*创建的笔记本上运行一下 pylint ,这是一个常用的 python linter。为此,您需要在命令行上运行以下命令。
$ nbqa pylint dataframe_basics.ipynb
这给了我标准的 pylint 输出,它突出了我的代码中的错误。
jupyter 笔记本的 pylint 报告示例。图片作者。
3.使用 jupyter-nb 需求管理依赖关系
使用笔记本进行的每个项目都可能需要一组不同的依赖项。传统上,这些是在 Jupyter 笔记本电脑之外使用虚拟环境进行管理的。
Jupyter nbrequirements 是一款工具,让您能够管理依赖关系,并创建一个独立的优化环境,所有这些都在笔记本电脑中进行管理。
要开始 pip,请安装库并使用下面显示的命令启用笔记本扩展。
$ pip install jupyter-nbrequirements$ jupyter nbextension install --user --py jupyter_nbrequirements
您可以通过使用 cell magic 命令或使用将显示在笔记本顶部的 UI 在笔记本中安装库。
用 nbrequirements 在笔记本上安装需求。图片作者。
要使用 cell magic 安装像 pandas 这样的库,只需在笔记本单元格中键入以下内容。
%dep add pandas --version ">=0.24.0"
4.使用 nbval 验证笔记本电脑
如本文前面所述,笔记本最常用于探索性分析和模型的初始开发。通常,存储这种类型的分析和初始项目开发是有用的,既可以用于文档化,也可以在以后的工作中潜在地构建这些发现。
py.test 插件,【nbval,是一个验证存储笔记本的有用工具。Nbval 将自动运行笔记本中的每个单元格,并检查当前输出是否与上次保存的版本中存储的输出相匹配。ipynb 文件。这是对底层源代码没有任何变化的检查,因此验证了原始分析或实验的结果仍然是可靠的。
要使用此工具,首先通过以下命令进行 pip 安装。
pip install nbval
通过运行以下命令,可以对目录中包含的所有文件执行测试。
py.test --nbval
或者在特定的笔记本上运行这行代码。
py.test ---notebook-name.ipynb
我在现有的两台笔记本上运行了 py.test。第一次运行没有错误,并给出以下输出。
在笔记本上运行 nbval。图片作者。
下面给出了一个笔记本测试失败的例子。
nbval 测试失败的例子。图片作者。
尽管笔记本通常用于探索性分析和初始模型开发,而不是生产代码,但它仍应被视为重要的工作存储。最初的实验和分析是对过去结果的有用记录,应该可以在以后回到笔记本上继续你的工作。因此,有必要开发一些工具来帮助使笔记本中编写的代码更加健壮和可重复。
本文介绍了四种工具,它们有助于使笔记本中的代码更好,更具可重用性。关于可再生数据科学代码的更多技巧,请参见我之前的文章。
</5-tools-for-reproducible-data-science-c099c6b881e5>
感谢阅读!
我每月都会发一份简讯,如果你想加入,请点击此链接注册。期待成为您学习旅程的一部分
提高生产力的 4 种工具,作者:数据科学家
原文:https://towardsdatascience.com/4-tools-to-improve-productivity-by-a-data-scientist-35dc16dbf74b?source=collection_archive---------6-----------------------
数据科学家的生产力工具包
马特·拉格兰在 Unsplash 上拍摄的照片
大家好,
我们今天来谈谈生产力和组织。
如果你从事数据工作,让你的生活井井有条就更重要了,
因为你的数据不会井井有条。
生产力就是能够做你以前从未做过的事情——弗朗兹·卡夫卡
当我年轻的时候,我记得不需要任何提醒。我将能够记住我必须参加的每一次会议或完成的每一件差事。我也认为在课堂上做笔记是不必要的,只要阅读全文就足够了。
哦,时代变得多快啊…
随着年龄的增长,我们的责任越来越大,优先考虑的事情也发生了变化。我们开始积累工作,建立家庭,积累财富。我们的时间越来越宝贵,我们开始意识到不浪费时间是极其重要的。
在做了两年的数据科学家和一年的数据工程师后,我开始学习一些有用的工具来帮助生活,大部分是与工作相关的。我将要提到的这些工具在某种程度上帮助了我。
我希望它对你也一样。
云存储服务
照片由 Pond Juprasong 在 Unsplash 拍摄
使用同步服务订阅云存储服务。
易接*
云存储服务使你能够随时随地从任何机器上访问你的文件。通过同步功能,对文件所做的任何更改都会立即反映在云上。
您是否有一台个人笔记本电脑和一台工作笔记本电脑,但希望能够处理相同的文件?这就是你的解决方案。
支持
现在是 2021 年,停止在物理硬盘上备份你的文件。
你可能会冒着丢失文件的风险,让别人偷偷看一眼你的文件。更不用说购买一个物理硬盘可能比订购一个云存储服务还要贵。
安全性
网络安全往往被忽视。但是,当您将敏感数据保存在文件中时,它们必须以某种形式保持安全。大多数云存储对你的文件提供军用级加密,这当然比只在你的机器上加密要好。想象一下被黑。
我目前使用的云存储方案是Google Backup&Sync。
我用的是免费版,只同步我的工作文件夹。这让我可以轻松地在任何机器上从事任何数据科学项目。
概念
照片由西格蒙德在 Unsplash 上拍摄
概念是一个允许你创建笔记、公告板、日历、提醒等的应用程序。用户可以组合 idea 提供的多个组件来定制他们的页面,允许您创建一个完全个人化的生产力系统。
任务板
作者截图
这就像我的个人吉拉板。上面有我打算完成的所有任务以及它们的状态。我可以附加链接,图片,评论到任务上,就像你处理吉拉门票一样。
有了这样的一块板,我可以很容易地跟踪我一直关注的工作。这确实有助于更好地了解我的所有任务,让我能够更好地进行优先级排序。
证明文件
概念也是一个很好的应用程序,可以记下一堆信息。如果你像我一样,你知道文档被低估了,尤其是在工作中。这非常重要,我的经理已经将文档设置为数据工程团队今年必须改进的内容之一。
用它来记录你的工作、未来项目的信息,甚至只是一堆链接。idea 有一堆工具可以让记录变得更容易。清单、桌子、分隔物,凡是你能想到的,他们都有。
创意板
作者截图
我也用观念来列出我的想法。中等文章题目就是其中之一。有时候,我会在一天中获得一些关于文章的随机想法。它可以出现在最罕见的地方,比如和家人一起去买杂货。五分钟后,我没有忘记它,而是把它放在脑海里。我写完文章后也会把它划掉。
Git 客户端
格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片
如果你的工作涉及到任何代码,很有可能你会把代码推得远远的。一开始学习 git 可能会有点困惑,但是我认为现在的课程已经很好地涵盖了 git。
为了让 git 更加友好,请使用合适的 git 客户端,而不是使用命令提示符或终端。git 客户机为您的存储库、提交和工作流提供了更好的视图。git 客户机不需要输入 git 命令,而是允许您按下按钮来执行命令。
更不用说当合并冲突发生时,git 客户端是救命恩人。
据现场,也快了很多。
崇高的融合
作者录音
一个合适的 Git 客户端在你的代码工作流上提供一个友好的 UI。
从左到右,sublime merge 显示分支、提交和内容。推和拉代码也只是一个按钮之遥。跟踪您的代码从未如此简单。
我正好用 sublime merge,因为是一个同事推荐的。这也很方便,因为我使用 sublime text 作为我的编辑器。任何 git 客户端都会很好地为您服务。
个人日历应用程序
由埃斯特·扬森斯在 Unsplash 上拍摄的照片
无论你身处哪个行业,一款日历应用都能帮你轻松组织生活。你的工作场所可能有某种内部日历应用程序,但这对一些人来说可能还不够。
设置您自己的个人日历。我把我的个人日历作为一个小部件显示在手机的主屏幕上。那样的话,我就能掌握我安排的所有活动。我用谷歌日历,看起来是这样的——
作者截图
账单支付的最后期限,家庭聚餐,甚至你孩子的篮球比赛。你可以在这里设置事件,并在每次醒来时都在它们上面。谷歌日历还会在活动开始前 15 分钟在你的手机上提示通知,如果你完全忘记检查手机,这非常有用。
结论
现在你有了所有这些生产力工具来帮助你,不要偷懒了!出去把事情做好!
在这篇文章中,你已经读到了—
- 云存储服务
- 概念
- Git 客户端
- 日历应用程序
像往常一样,我引用一句话作为结束。
很快不如现在好——塞思·戈丁
订阅我的时事通讯,保持联系。
你也可以通过 我的链接 注册一个中等会员来支持我。你将能够从我和其他不可思议的作家那里读到无限量的故事!
我正在撰写更多关于数据行业的故事、文章和指南。你绝对可以期待更多这样的帖子。与此同时,你可以随时查看我的其他 文章 来暂时填补你对数据的渴望。
感谢 的阅读!如果你想和我联系,请随时通过 nickmydata@gmail.com 联系我或者我的 LinkedIn 个人资料 。你也可以在我的Github中查看之前写的代码。
面向数据科学家的 4 大 Python IDE
原文:https://towardsdatascience.com/4-top-python-ide-for-data-scientist-ccb92d143ca3?source=collection_archive---------3-----------------------
您想使用的 Jupyter 笔记本 IDE 替代方案
照片由 Shamsudeen Adedokun 在 Unsplash 上拍摄
如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。
IDE 或集成开发环境是一个代码编程工具,用于编写、测试、调试和直观地编译代码。任何使用编程语言的人都需要一个 IDE 来简化他们的工作。你可以在记事本上写代码,但是很明显,你为什么要这么做呢?—开发了很多支持我们工作的 IDE。
对于那些已经熟悉 Jupyter 笔记本的人来说,它也是一个交互式的、初学者友好的 IDE,可以用于演示。对于任何级别的数据科学家来说,这都是一个很好的工具。然而,你会意识到 Jupyter Notebook 缺乏任何开发和调试目的。这是因为 Jupyter Notebook 主要是为了测试和文档共享而不是代码开发而开发的。因此,您可能希望研究另一种 IDE,它仍然适合数据科学家的需求,但可以用于开发。
在本文中,我想分享我在不同情况下为数据科学家使用的四大 IDE。让我们开始吧。
1.Spyder
科学 Python 开发环境或 Spyder 是一个免费的开源 Python IDE。如果您正在安装 Anaconda,可以为您安装的软件之一是 Spyder。那么,Spyder 有什么特别之处呢?Spyder 是专门为数据科学构建的 IDE。GUI 很简单,但是学习曲线并不陡峭,如果你是初学者,你可能很容易掌握它。让我们试着看一下整个 GUI。
Spyder GUI(图片来自作者)
请注意这个界面与 RStudio 非常相似;这就是为什么,如果你在 Matlab 或 R 到 Python 之间切换,你会发现更容易。让我们试着一目了然地分解 GUI。
Spyder 代码单元格(图片来自作者)
上面是你写代码的环境。请注意,对于您在数据分析过程中使用的所有常见代码,都有一个自动完成特性。此外,还有一个语法高亮特性,可以帮助您快速找到任何变量或类似代码。让我们看看 Spyder 的另一项功能。
Spyder 功能工具栏(图片来自作者)
上面是四个默认选项卡,可以帮助您导航您的数据科学项目。请注意,一旦您更频繁地使用它们,就会有更多的选项卡可用。对于初学者来说,“帮助”标签是你最好的朋友,因为它向你展示了 Spyder 教程。
帮助选项卡(图片来自作者)
“帮助”功能还扩展到在线帮助,允许您搜索有关库的特定信息。在下一个选项卡中,还会有变量浏览器。
变量选项卡(图片来自作者)
如果您生成任何图,它将在图选项卡中提供。您可以在这里探索您生成的所有地块并保存该地块。
“绘图”选项卡(图片来自作者)
在您更深入地探索 IDE 之后,仍然会产生许多选项卡。你需要的一切都在教程里,很容易上手。
在我看来,如果你以前来自 RStudio IDE 并试图在 Python 中找到类似的东西,你会喜欢使用 Spyder IDE。
2。托尼
Thonny 是一个为学习和教授编程而开发的 IDE。它是由塔尔图大学开发的,你可以在的 Bitbucket 存储库上免费下载。
Thonny IDE(作者图片)
Thonny 对初学者来说非常好,因为它可以在助手页面的帮助下向您显示分步语句和表达式。Thonny 还提供了一个很好的编辑功能,可以打开一个新窗口,显示局部变量和与主代码分开的代码。
Thonny 上的助手标签(图片由作者提供)
您可以探索的所有工具都可以在 view 选项卡中找到,如下所示。
Thonny 视图选项卡(图片由作者提供)
此外,Thonny 为您提供了 Python 脚本调试过程,运行起来非常灵活。总的来说,Thonny 的目的是让您很好地理解 Python 是如何工作的,并帮助您简化编码过程。在我看来,Thonny 适合一个想要学习更多 Python 语言的初学者。
3。原子
Atom 是 GitHub 开发的开源 IDE。开发人员称之为“21 世纪的可破解文本编辑器”,因为 Atom 允许用户安装第三方包和主题。您可以根据自己的喜好定制编辑器的特性和外观,因此它是一个高度通用的 IDE。此外,Atom 对于初学者来说是友好的,对于有经验的开发人员来说是高度可定制的。
Atom IDE(图片由作者提供)
上面是第一次打开 IDE 时显示的屏幕。在这个屏幕上,您可以使用所有的教程和 Atom 特性。以下是我认为 Atom 对 Data Scientist 的主要卖点:
- 带有 Git 和 GitHub 跟踪面板的版本控制嵌入在 IDE 上。
Git 面板(图片由作者提供)
- Atom IDE 上的第三方软件包安装程序
第三方安装程序(图片由作者提供)
你能为数据科学家安装的最好的软件包是氢。它允许你在 Atom IDE 上拥有 Jupyter 内核能力。
氢气包(图片由作者创建)
- 电码协作用电传打字机
电传面板(图片由作者创建)
4.皮查姆
PyCharm 是 JetBrain 开发的 IDE,他也开发了著名的 Java IDE IntelliJ IDEA。
PyCharm 非常适合那些已经有使用另一个 IDE 进行开发或编程语言的经验的人。Pycharm 和 Anaconda 发行版一样,也集成了其工具和库,如 NumPy 和 Matplotlib,允许您使用一系列查看器和交互式绘图。此外,就像我们之前讨论的 Atom IDE 一样,PyCharm 提供了版本控制集成和调试功能。
此外,PyCharm 支持许多其他开发编程语言,如 Node.js、HTML/CSS 等等。这使得 PyCharm 足够灵活,可以与 web 和应用程序开发语言集成使用。
你可以在这里下载 py charm h。有两个版本可用,但你可能想要社区版,因为它是免费的(功能仍然是一流的,所以不用担心)。
。PyCharm IDE(图片由作者创建)
此外,PyCharm 允许您安装各种插件,从而增强了他们的 IDE。
PyCharm 上的插件
如果您是一位经验丰富的数据科学家,并且希望更多地停留在开发领域,那么您可能希望使用 PyCharm 进行更多的探索。否则,您可以使用我之前提到的另一个 IDE。
结论
作为一名数据科学家,您可能有使用 Jupyter 笔记本开发数据科学项目的经验。即使它是一个很好的 IDE,你也会意识到 Jupyter Notebook 缺少一些特性,比如开发和调试目的。
作为一名数据科学家,有许多可供选择 IDE 可供您使用,但我最喜欢的四个是:
- Spyder
- 托尼
- 原子
- 皮查姆
希望有帮助!
如果你没有订阅成为媒介会员,请考虑通过我的推荐订阅来支持我的写作。
访问我的LinkedIn或 Twitter
学习机器学习的 4 个顶级 Python 包
原文:https://towardsdatascience.com/4-top-python-packages-to-learn-machine-learning-738db030c717?source=collection_archive---------9-----------------------
使用这些 Python 包提升您的机器学习知识
马库斯·温克勒在 Unsplash 上的照片
如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。
作为数据科学家,我们被雇用的原因之一是因为我们的机器学习技能。在论文中,学习人工智能和机器学习听起来很令人兴奋。尽管如此,随着我们对这个问题的深入研究,我们意识到机器学习并不像看起来那么容易。
你可能会用一行代码生成一个机器学习监督模型——就像业内所有专家所做的那样。许多专家已经将模型背后复杂的数学和统计发展成一行代码,帮助我们的日常工作。然而,理解代码背后的模型是什么是另一回事。
如果这些代码运行良好,为什么我们需要理解机器学习的概念呢?我可以陈述许多原因,但最重要的原因是为你试图解决的当前问题选择完美的模型。没有机器学习的理解,你很难找到最优解。
这就是为什么在这篇文章中,我想向您展示我学习机器学习的前 4 个 python 包**。让我们开始吧。**
1。Scikit-Learn
Python 中的机器学习建模之王。我不可能在我的列表中省略Scikit-Learn作为你的学习参考。如果出于某种原因,您从未听说过 Scikit-Learn,这个模块是基于 SciPy 构建的用于机器学习的开源 Python 库。
Scikit-Learn 包含我们在日常数据科学工作中使用的所有常见机器学习模型。根据主页,Scikit-learn 支持监督和非监督学习建模。它还提供了用于模型拟合、数据预处理、模型选择和评估的各种工具,以及许多其他实用工具。
Scikit-Learn 中有许多 API 可用于您的机器学习目的。我们可以将它们分为 6 个部分:
- 分类
- 回归
- 集群
- 降维
- 型号选择
- 预处理
为了更好地理解机器学习概念和 API 工作,Scikit-Learn 提供了一个全面的 用户指南 供您遵循。即使有一点统计知识,该指南对初学者来说也很容易理解(你仍然需要学习一些统计)。
如果您使用的是 Anaconda 发行版中的 Python,那么 Scikit-Learn 包已经内置在环境中了。如果选择独立安装包,则需要安装依赖包。您可以通过 pip 执行下面这一行来实现。
pip install -U scikit-learn
我们来试着学习一下最简单的模型——线性模型。正如我上面提到的,Scikit-Learn 包含了一个全面的用户指南供人们遵循。如果你从来没有开发过任何机器学习模型,让我们回顾一下线性模型的 Scikit-Learn 用户指南。
#Develop the linear regression model
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])reg.coef_
作者图片
通过一行代码,您现在已经成功地开发了线性回归模型。您可以查看线性模型用户指南进行进一步探索,因为他们有完整的研究指南。如果你对另一个机器学习模型感兴趣,你可以查看用户指南以获得更多的学习材料。下面是 scikit-learn 主页上的图片,供您参考。
作者图片
2.统计模型
Statsmodels 是一个统计模型 python 包,它提供了许多开发统计模型的类。Statsmodel 包是 Scipy 模块的一部分,但是 statsmodel 包目前是单独开发的。
Statsmodel 软件包侧重于 基于数据的统计估计。换句话说,它通过创建一个统计模型或我们所说的机器学习模型来概括数据。
Statsmodel 提供了统计建模中经常使用的 API。Statsmodel 包将 API 分成 3 个主要模型:
- 其中提供了许多横截面模型和方法,包括回归和 GLM。
[statsmodels.tsa.api](https://www.statsmodels.org/stable/api.html#statsmodels-tsa-api)
提供时间序列模型和方法。[statsmodels.formula.api](https://www.statsmodels.org/stable/api.html#statsmodels-formula-api)
它提供了一个使用公式字符串和数据框架指定模型的接口——简单地说,您可以创建自己的模型。
Statsmodel 对于任何想要更深入地理解统计建模的人来说都是一个很好的入门包。用户指南为您深入解释了理解统计估计所需的概念,以及机器学习模型背后的统计解释。
让我们尝试使用 statsmodel 包学习一个线性回归机器学习模型。指南已经解释了我在下图中向您展示的模型。
线性回归技术文件(来源:https://www.statsmodels.org/stable/regression.html
如您所见,该文档包含大量信息,绝对是值得学习的材料。
让我们尝试使用 Statsmodel 软件包学习 OLS(普通最小二乘法)建模。如果您没有使用 Anaconda 发行版中的 Python 或者没有安装 Statsmodel 包,您可以使用下面一行代码来完成。
pip install statsmodels
继续这些步骤,让我们通过导入包和数据集来开发模型。
#Importing the necessary package
from sklearn.datasets import load_boston
import statsmodels.api as smfrom statsmodels.api import OLS#import the data
boston = load_boston()
data = pd.DataFrame(data = boston['data'], columns = boston['feature_names'])
target = pd.Series(boston['target'])
#Develop the model
sm_lm = OLS(target, sm.add_constant(data))
result = sm_lm.fit()
result.summary()
图片来自作者
您使用 Statsmodel 软件包开发的 OLS 模型将具有您从机器学习模型估计中预期的所有必要结果。为了进一步解释这个结果,你可以在主页上访问 OLS 的例子。
3.Eli5
没有模型背后的可解释性,机器学习是不完整的。根据我作为数据科学家的工作经验,大多数时候,你需要解释为什么你的模型有效,以及你的模型给出了什么样的洞察力。就洞察力而言,我指的不是模型准确性或任何指标,而是机器学习模型本身。这就是我们所说的机器学习的可解释性**。**
现在有很多高级的 ML 解释 Python 包,但是它们中的大多数都太具体了,没有任何学习的机会。在这种情况下,我推荐 Eli5 作为你的机器学习可解释性学习包,因为它提供了所有的基本概念,没有很多复杂的概念。
取自 Eli5 包,该包的基本用途是:
- 检查模型参数,并尝试弄清楚模型如何全局工作;
- 检查模型的单个预测,并找出模型做出决策的原因。
你可以从上面的解释中学习如何解释你的机器学习——特别是黑盒模型。我最喜欢的学习材料是排列重要性,因为这是解释你的机器学习的最基本的方式。
让我们通过使用 Eli5 包来学习排列的重要性。首先,我们需要使用下面的代码来安装这个包。
#installing eli5
pip install eli5
#or
conda install -c conda-forge eli5
让我们试着为示例练习准备一个示例数据集。
#Preparing the model and the datasetfrom xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
mpg = sns.load_dataset('mpg')
mpg.drop('name', axis =1 , inplace = True)#Data splitting for xgboost
X_train, X_test, y_train, y_test = train_test_split(mpg.drop('origin', axis = 1), mpg['origin'], test_size = 0.2, random_state = 121)#Model Training
xgb_clf = XGBClassifier()
xgb_clf.fit(X_train, y_train)
在安装并准备好样本数据之后,我们将使用 Eli5 包来使用排列重要性进行机器学习解释。
#Importing the module
from eli5 import show_weights
from eli5.sklearn import PermutationImportance#Permutation Importance
perm = PermutationImportance(xgb_clf, scoring = 'accuracy' ,random_state=101).fit(X_test, y_test)
show_weights(perm, feature_names = list(X_test.columns))
作者图片
对于结果的进一步解释,您可以访问用户指南,其中有充分的解释。
4.MLflow
机器学习教育的现状并不局限于机器学习模型,而是扩展到模型的自动化过程中。这就是我们所说的 MLOps 或机器学习操作。
许多开源 Python 包都支持 MLOps 生命周期,但在我看来, MLflow 为任何初学者提供了完整的 MLOps 学习资料。
根据 MLFlow 主页,MLflow 是一个管理端到端机器学习生命周期的开源*台。该软件包处理 4 个功能,它们是:
- 实验跟踪(ml 流量跟踪),
- ML 代码可复制(ML 流项目),
- 管理和部署模型 ( MLflow 模型),
- 模型中央生命周期 ( MLflow 模型注册)。
我喜欢这个包,因为它们以一种有组织的方式解释了 MLOps 概念,所有初学者都可以理解。你可以查看概念包了解更多细节。
我不会给出 MLflow 的例子,因为我想为这个包专门写一篇文章,但是我认为你应该从这个包中学习,以更详细地理解机器学习和 MLOps 概念。
结论
作为数据科学家,我们被雇用的原因之一是因为我们的机器学习技能。许多人在不知道机器学习背后的概念以及我们可以用模型做什么的情况下学习代码。
为了帮助学习,我想介绍我学习机器学习的前 4 个 Python 包。它们是:
- sci kit-学习
- 统计模型
- Eli5
- MLflow
希望有帮助!
访问我的LinkedIn或 Twitter 。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
学习 NLP 的 4 个顶级 Python 包
原文:https://towardsdatascience.com/4-top-python-packages-to-learn-nlp-cf7216730426?source=collection_archive---------12-----------------------
利用这些软件包有效地学习 NLP
安妮·斯普拉特在 Unsplash 上的照片
自然语言处理或 NLP 是一个涉及计算机和人类语言之间交互的领域。这是一个热门领域,工业界和学术界仍有许多需求,我认为这一领域不会很快消亡。
为什么有需求?NLP 之所以受欢迎,是因为行业应用程序将自动完成我们过去无法完成的事情。比如情感分析、聊天机器人、文本识别等等。最主要的一点是,NLP 应用程序对数据科学家来说是有用和重要的。
因为学习 NLP 对数据科学家来说很重要,所以我想概述一下我学习 NLP 的顶级 Python 包。让我们开始吧。
1.NLTK
自然语言工具包(Natural Language Toolkit)或 NLTK 是一个开源的 Python 包,专门为处理人类语言而开发。它可以说是 NLP 领域初学者和专业人员最常用的软件包,因为 NLTK 在 NLP 研究中提供了许多有用的 API。根据主页,NLTK 适合任何职业——语言学家、数据科学家、研究人员、学生等等。
NLTK 包含了我们在日常 NLP 活动中使用的所有通用 API。如果我们浏览主页,我们会发现 NLTK 提供了各种工具来解析、词干化、标记化等等。它们还包括从 Twitter 等来源读取数据的 API。你可以点击查看完整的 API 列表。
为了更好地理解 NLP 分析以及如何用 Python 来做,NLTK 创建者为程序员编写了一本介绍性的实用编程书籍,名为 用 Python 进行自然语言处理 。该材料对 NLP 初学者来说是免费的,但也是完整的。如果你从来没有探索过 NLP 领域,我建议你花点时间阅读这本书。
对于 NLTK 安装,您可以通过执行以下代码在 Python 中使用 pip 发行版。
pip install --user -U nltk
NLTK 提供了一个完整的语料库列表供你练习和探索,你可以在这里访问。我们可以使用 NLTK 包中的内置下载器来访问数据。让我们试着下载一个语料库。
#Download the Brown Corpus
import nltk
nltk.download('brown')#Preview the brown words
from nltk.corpus import brown
brown.words()
作者图片
我们可以在上面的图片中看到,我们有一个来自棕色语料库的单词列表。我们试着用 NLTK 来计算词频。
#Import the class
from nltk import FreqDist#Showing the top 10 words
word_count = FreqDist(data)
word_count.most_common(10)
作者图片
布朗语料库中最常见的单词是“The”和其后的“and”。在真实的 NLP 用例中,我们可能会删除上面的所有单词,因为它们没有给模型提供太多信息(这些单词被称为停用词),并且我们会在计算频率之前预处理文本。
2。图案
Pattern package 是为文本处理和 web 挖掘数据开发的开源 Python 包。API 提供了许多功能,例如:
- 各种来源的数据挖掘 API(Google、Twitter 和 Wikipedia)
- 自然语言处理
- 机器学习建模
- 网络分析
如果我们将模式包与 NLTK 包进行比较,那么模式中的文本处理功能要比 NLTK 不完整。然而,Pattern 包含 web 挖掘数据,而 NLTK 没有这些数据。这是因为模式包的开发关注于数据挖掘。
对于已经理解 NLP 主题并希望探索更多真实数据的人来说,该模式是一个很好的包。对于学习者来说,我喜欢这个包中的文档,你可以在这里查看https://github.com/clips/pattern/wiki。该文档包含数据挖掘和网络分析的所有基本教程,以及案例研究。
让我们试试数据挖掘的模式包功能,因为这个包主要用于 web 数据挖掘。对于这个例子,我将尝试从 Twitter 中挖掘最*的数据。
对于初学者来说,如果没有安装 Pattern,可以使用下面的代码。
pip install pattern
然后,我们将尝试运行以下代码来挖掘最*提到“数据科学”的推文
from pattern.web import Twitter, plaintexttwitter = Twitter(language='en')
for tweet in twitter.search('"data science"', cached=False):
print(plaintext(tweet.text))
使用模式样本挖掘的最*推文(图片由作者提供)
从上面的图片中我们可以看到,我们成功地从 Twitter 中挖掘出了这条推文,我们可以完整地分析它。如果我们看一下输入的单个 tweet,这是数据样本。
作者图片
tweet 数据是 JSON 格式的,包含了你需要分析的所有信息(文本、个人资料、时间等。).模式包可以挖掘其他 web 源中的数据,例如搜索引擎 Google。
from pattern.web import Google, plaintext
for result in Google().search('"Data Science"', cached = False):
print(plaintext(result.text))
通过模式挖掘的谷歌搜索(图片由作者提供)
使用模式包可以挖掘更多的数据。如果你感兴趣,你应该参考他们的文档以获得更多信息。
3.文本 Blob
TextBlob 是一个 Python 文本处理包,它提供了许多 API 来简化 NLP 项目任务。TextBlob 构建在 NLTK 和 Pattern 包之上,这意味着您会发现许多熟悉的 API。
TextBlob 突出显示了这个包对初学者的友好程度,可以用它们简单的 API 进行 NLP 活动。TextBlob package 是专门为 NLP 任务开发的,如标记、翻译、情感分析等,并且方式简单。
该文档是学习 TextBlob 包和 NLP 字段的良好开端。他们以一种简单的方式编写教程,任何初学者都可以跟随并试验代码。创建文本分类器的教程位于这里,如果你想尝试一下。例如,让我们自己尝试一下 TextBlob 包功能。
首先,我们需要使用文档中提供的以下代码来安装 TextBlob 包。
pip install -U textblob
python -m textblob.download_corpora
让我们试着分析一下我之前做过的谷歌搜索的情绪。在这一部分中,我将使用模式挖掘数据,预测 google 搜索情感,并将其存储到 Pandas DataFrame 对象中。
from pattern.web import Google, plaintext
from textblob import TextBlob
import pandas as pdres = []
for result in Google().search('"Data Science"', cached = False):
search = plaintext(result.text)
res.append([search, TextBlob(search).polarity, TextBlob(search).subjectivity])
data = pd.DataFrame(res, columns = ['Google Search', 'Polarity', 'Subjectivity'])
data
使用 TextBlob 进行情感分析(图片由作者提供)
TextBlob 情感分析输出有两种测量方式——极性和主观性。极性衡量情绪是中性、积极还是消极。值越接*零(0)意味着情绪接*中性,反之亦然-如果值接* 1/-1,则意味着情绪接*积极/消极。
主观性值在 0 到 1 的范围内,其中 0 表示文本完全不主观(写得客观),1 表示完全主观(写得像观点)。
如果你想了解更多关于使用 TextBlob 的情感分析,你可以在这里访问文档。
4.空间
SpaCy 是一个开源的 Python 包,它的口号是工业级的自然语言处理。这意味着 SpaCy 是为生产环境和工业活动开发的,而不是为了学术目的。
虽然它是为工业目的开发的,但是他们的教程和文档已经很完整了。这些网页为您提供了指南、课程和在线视频,帮助您从头开始学习 NLP 并使用 SpaCy。例如, SpaCy 101 Guide 会让你了解很多主题,比如语言注释、标记化、 POS 标签和依赖、 Vocab、hashes 和 lexemes 等等。
如果您想深入了解这些包,您可以查看以下材料:
- 101 导轨
- 互动在线课程
- 视频课程
所有这些来自 SpaCy 的材料将帮助你更好地理解 NLP 概念,因为它是为初学者开发的。让我们试着用 SpaCy 分析一篇课文。我们将使用以前挖掘的数据作为样本。
首先,我们需要安装 SpaCy 包。您可以使用下面的代码来做到这一点。
pip install -U pip setuptools wheel
pip install -U spacy
python -m spacy download en_core_web_sm
安装完成后,我们就可以使用 SpaCy 处理文本数据了。对于这个例子,我将尝试使用 SpaCy 来分析文本的词性及其特征。
import spacynlp = spacy.load("en_core_web_sm")#I would use the first text data from the Google Search
doc = nlp(data['Google Search'].loc[0])
pos = []
for token in doc:
pos.append([token.text, token.lemma_, token.pos_, token.tag_, token.dep_, token.shape_, token.is_alpha, token.is_stop])pd.DataFrame(pos, columns = ['TEXT','LEMMA','POS','TAG','DEP','SHAPE','ALPHA','STOP'])
文本特征结果(图片由作者提供)
使用 SpaCy,我们可以轻松地标记和识别我们传递的文本数据。有了 SpaCy 对象,我们可以知道引理、词性、标签等等。如果你想知道更多关于这些术语指的是什么,你可以查看空间语言特征指南。
结论
自然语言处理(NLP)是一个行业中仍在发展的领域,许多人正在尝试将 NLP 功能应用到他们的业务中。然而,学习 NLP 并不是一个容易的过程,因为有太多的概念不同于通常的机器学习建模。
在本文中,有 4 个我认为很好的顶级 Python 包作为 NLP 学习材料;它们是:
- NLTK
- 模式
- 文本 Blob
- 空间
希望有帮助!
如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的 简讯。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
在我的LinkedIn或 Twitter 上访问我。
让 Python 熊猫更有效率的 4 个诀窍
原文:https://towardsdatascience.com/4-tricks-for-making-python-pandas-more-efficient-20237a045f09?source=collection_archive---------19-----------------------
充分利用熊猫
Pawel Czerwinski 在 Unsplash 上拍摄的照片
Pandas 可以说是数据科学生态系统中最受欢迎的数据分析和操作库。用户友好和直观的 Python 语法是 Pandas 受欢迎的一个重要因素。然而,这并不是熊猫被绝大多数数据科学家改编的唯一原因。
Pandas 提供了许多功能和方法来加速数据分析和操作。在这篇文章中,我们将学习 4 个技巧来更有效地使用这些函数。
让我们从创建数据框开始。我们将使用 Kaggle 上提供的墨尔本住房数据集。
import pandas as pddf = pd.read_csv("/content/melb_housing.csv")df.columns
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG', 'Date', 'Postcode', 'Regionname', 'Propertycount', 'Distance', 'CouncilArea'], dtype='object')
数据集包含关于墨尔本房屋的 13 个特征(即柱子)。
第一招
第一个窍门是关于read_csv
函数。这可能是最常用的函数,但我们几乎总是不带任何参数地使用它。read_csv
函数有许多参数,使它更加方便。
Pandas 在 dt 访问器下提供了几个方法来操作日期。为了使用它们,日期必须具有 datetime 数据类型。我们总是可以转换数据类型,但是有一个更实际的方法。parse_dates
参数可以处理这项任务。
另一个有用的参数是usecols
。如果只需要处理数据集中的一些列,可以将列名传递给usecols
参数。它节省了内存和计算能力,尤其是在处理大型数据集时。
让我们用这些参数重新读取数据集。
df = pd.read_csv(
"/content/melb_housing.csv",
parse_dates=["Date"],
usecols=["Address", "Rooms", "Date","Type", "Price",
"Regionname"]
)df.head()
(图片由作者提供)
第二招
熊猫的另一个常用功能是value_counts
。它计算一列中不同值的出现次数。因此,我们得到了一个特征(即列)分布的概况。
df.Regionname.value_counts()
(图片由作者提供)
我们可以看到每个地区的房屋数量。在某些情况下,对这些值进行规范化会提供更多的信息,以便我们对类别的分布有更好的了解。
一种方法是将出现的次数除以值的总数。value_counts
功能的normalize
参数很容易完成这项任务。
df.Regionname.value_counts(normalize=True)
(图片由作者提供)
* 28%的房屋位于南部大都市地区。
第三招
第三招也是关于value_counts
函数的。它通常与分类变量一起使用。然而,我们也可以在价格等连续变量上使用它。
查看每个价格出现的次数不是一种首选的方法。但是,我们可以创建容器并检查每个容器中值的数量。value_counts
功能的bin
参数将整个范围划分为指定数量的箱。然后,我们可以看到这些箱中的值的分布。
df.Price.value_counts(normalize=True, bins=10)
(图片由作者提供)
56%的房屋位于第一个区间,该区间的跨度在 73k 和 120 万之间。
第四招
第四个是关于过滤数据帧。在典型的探索性数据分析过程中,我们会进行大量过滤。或者,我们可能只是对符合一组条件的观察结果(即行)感兴趣。
考虑这样一种情况,我们需要过滤超过 3 个房间并且花费超过 50 万的房子。我们可以根据这些条件过滤数据帧,如下所示:
df_filtered = df[(df.Price > 500000) & (df.Rooms > 3)]df_filtered.head()
(图片由作者提供)
我们需要写下数据框和列的名称。在多个过滤器的情况下,我们需要将每个过滤器放在括号中,并用“&”号分开。
query
函数提供了更简单的语法。如果您熟悉 SQL,它肯定会对您更有吸引力。我们可以将条件作为字符串传递,如下所示:
df_filtered = df.query("Price > 500000 and Rooms > 3")df_filtered.head()
(图片由作者提供)
我们仍然需要编写条件,但是语法更容易键入。
结论
我们已经介绍了 4 个简单的技巧。它们不是什么神奇的把戏,但会帮助你更多地利用熊猫。一般来说,我们往往会忽略函数的参数。我绝对建议尽量多使用。他们在那里是有原因的。
感谢您的阅读。如果您有任何反馈,请告诉我。
更有效地使用 Python F 字符串的 4 个技巧
原文:https://towardsdatascience.com/4-tricks-to-use-python-f-strings-more-efficiently-4f389e890514?source=collection_archive---------6-----------------------
完全控制您打印的内容。
乔希·拉科瓦尔在 Unsplash 上的照片
字符串插值是一种将变量嵌入字符串的方法。它使得操纵和丰富字符串变得容易。因此,使用字符串插值,print 语句更加强大。
格式化字符串文字,也称为 f 字符串,是一种非常实用的字符串插值方法。他们使用花括号作为变量占位符。
在这篇文章中,我们将学习 4 个技巧来更有效地使用 f 弦。让我们从一个简单的例子开始演示 f 弦是如何工作的。
age = 24print(f"John is {age} years old.")John is 24 years old.
1.格式化大数
当处理大量数字时,为了更好的可读性,最好使用千位分隔符。f 弦使得正确放置这些分隔符变得非常简单。
以下是没有千位分隔符的情况:
number = 3454353453print(f"The value of the company is {number}")The value of the company is 3454353453
让我们放置分离器,看看有什么不同。
print(f"The value of the company is {number:,d}")The value of the company is 3,454,353,453
2.格式化日期
在我们的脚本中有各种方法来表示日期。这取决于地理位置或只是你的喜好。
我们可以把日期放在 f 字符串中,而不像其他变量那样格式化。
from datetime import datetimetoday = datetime.today().date()print(f"Today is {today}")Today is 2021-06-23
在某些情况下,以下可能是更好的表示。
print(f"Today is {today:%B %d, %Y}")Today is June 23, 2021
如果你居住的国家是月写在日之前,你可以使用下面的格式。
print(f"Today is {today:%m-%d-%Y}")Today is 06-23-2021
3.衬垫号码
在某些情况下,数字以前导零书写,以便所有数字的位数相同。典型的用例可能是产品号或 id 号。
我们可以在 f 字符串中为变量放置任意数量的前导零。
a = 4b = 123print(f"Product numbers are \n{a:03} \n{b:03}")Product numbers are
004
123
“b:03”表示总共有 3 个数字,前导空格将用零填充。在一位数的情况下,我们有两个前导零。如果是“b:04”,数字就写成 0004 和 0123。
4.写表达式
f 字符串还允许在变量占位符中使用表达式。这些表达式可能涉及函数执行。这是一个方便的特性,因为我们不需要为只使用一次的值创建变量。
让我们做一个包含日期操作的例子。
from datetime import datetime, timedeltatoday = datetime.today().date()print(f"The test was 3 days ago which is {today - timedelta(days=3)}")The test was 3 days ago which is 2021-06-20
另一个例子是查找列表中的项目数,并将其用作变量。
mylist = [1, 2, 4, 6, 3]print(f"The list contains {len(mylist)} items.")The list contains 5 items.
结论
字符串是我们脚本的重要组成部分。出于调试目的,我们还将它们与 print 语句一起使用。字符串插值帮助我们充分利用 print 语句。它允许操作或定制字符串很容易。
F-strings 为字符串插值提供了清晰的语法和易读的代码。我们在文章中介绍的技巧为 f 弦的标准使用增加了更多的灵活性。
感谢您的阅读。如果您有任何反馈,请告诉我。
Python Pandas 的 4 个棘手的数据操作
原文:https://towardsdatascience.com/4-tricky-data-manipulation-operations-with-python-pandas-7fd5e8bba624?source=collection_archive---------13-----------------------
挑战极限
Joppe Spaa 在 Unsplash 上拍摄的照片
Pandas 是数据科学生态系统中最受欢迎的数据分析和操作库之一。这有几个原因。
原因之一是熊猫让复杂的操作变得简单直观。在一行熊猫代码中,你可以实现比你预期的更多的东西。
在本文中,我们将讨论 4 个数据操作,这些操作初看起来有点复杂。当我们完成后,你会惊奇地发现用熊猫来完成它们是多么简单。
由于现实生活中的数据集可能相当混乱,数据操作或清理是数据科学工作流程的主要部分。
我准备了一个样本数据集,展示了我们在现实生活中可能会遇到的一些问题。
注:这个故事最初发表在 datasciencehowto.com 的上。
我还将分享创建数据框的代码,以防您想自己练习。
df = pd.DataFrame({ "last_date": ["2021-03-14", "2021-01-13",
"2021-09-15", "2021-01-01",
"2020-12-10","2021-04-02"], "price": ["$950.0", "$450.5", "$1,100.5",
"$360.0", "$850.0", "$440.5"], "duration": ["2 days", "1 week", "5 days",
"1 month", "10 days", "2 weeks"], "amenities": ["tv, dishwasher", "TV, washer",
"dishwasher, washer", "washer",
"tv", "dishwasher"]
})df
df(作者图片)
这些值有不同的类型,如日期、数字、文本和列表。但是,它们与对象数据类型一起存储。
df.dtypeslast_date object
price object
duration object
amenities object
dtype: object
我们应该总是用正确的数据类型存储数据。否则,我们将无法使用一些特定于数据类型的操作。
招数 1:让价格合适
价格栏对我们来说似乎是,但对软件来说不是。“$360.0”是一个字符序列,并不意味着数量或数值。
让我们把它更新成一种计算机实际上能理解的格式它是 360。
df["price_cleaned"] = df["price"].str[1:].str.replace(",","").astype("float")
第一步是从第二个字符开始取值,因为第一个字符是“$”。
然后,我们通过使用 str 访问器下的 replace 函数来删除用作千位分隔符的逗号。
最后一步是将数据类型改为 float。
以下是更新后的数据框:
df(作者图片)
招数二:有电视?
便利设施列在便利设施栏中。假设我对电视特别感兴趣,想要创建一个列来指示是否有电视。
执行这项任务有多种方式。一种有效的方法是使用列表理解,尤其是在处理大型数据框时。
我们需要考虑到“电视”和“电视”是一样的。
df["has_tv"] = pd.Series(['tv' in row.lower() for row in df.amenities]).replace({False:0, True:1})
我们先来阐述一下列表理解:
['tv' in row.lower() for row in df.amenities]
- 它占用了便利设施列中的所有行。
- 将其转换为小写,这样我们就可以同时捕捉到“tv”和“TV”。
- 检查行中是否存在“tv”。
这个列表理解返回真或假,但是我想把它们分别转换成 1 或 0。
Pandas 的替换功能可以很容易地完成这项任务,所以我将列表转换为 Pandas 系列,然后应用替换功能。
数据框现在看起来像这样:
df(作者图片)
招数三:词条多大?
数据框中有一个名为“最后日期”的列。我更感兴趣的是这个条目或广告有多老。因此,我需要计算从今天到最后一天的天数。
下面的代码创建了一个名为“自上次日期”的列,其中包含我需要的信息。
df["since_last_date"] = (pd.to_datetime("2021-11-25") - df["last_date"].astype("datetime64")).dt.days
只要数据类型正确,我们就可以计算出两个日期之间的差异。因此,我使用“astype”函数更新最后一个日期列的数据类型。
“to_datetime”函数获取一个字符串并将其转换为日期。
该减法运算的输出如下:
0 256 days
1 316 days
2 71 days
3 328 days
4 350 days
5 237 days
Name: last_date, dtype: timedelta64[ns]
我们可以使用“dt”访问器下的“days”方法从该输出中提取数量。
df(作者图片)
招数四:标准时长?
持续时间列表示时间长度,但单位不同。我想你会同意,这种格式不是很有用。
让我们创建一个新的 duration 列,它将持续时间显示为天数。
我们需要做的是:
- 取第二个字,换算成天数。
- 将该值乘以第一个单词中显示的数量。
df["duration_days"] = df["duration"].str.split(" ", expand=True)[1].replace(
{"week": 7, "weeks": 7, "days": 1, "day": 1, "month": 30}
).astype("int") * df["duration"].str.split(" ", expand=True)[0].astype("int")
代码看起来很复杂,但是当我们一步一步看的时候就变得很清楚了。
以下部分采用持续时间列中的第二个单词(例如,周、周、月)
df["duration"].str.split(" ", expand=True)[1]
replace 函数用适当的天数替换单词。
replace(
{"week": 7, "weeks": 7, "days": 1, "day": 1, "month": 30}
)
然后“astype”函数将数据类型转换为整数。
乘法的第二部分采用 duration 列中的第一个字,并将数据类型转换为 integer。
df["duration"].str.split(" ", expand=True)[0].astype("int")
将这两个值相乘得到一个标准的持续时间,即天数。
df(作者图片)
您不必一次完成所有这些操作。另一种选择是创建一个具有月、周、日等单位的列。然后,您可以相应地更新该值。
Pandas 提供了许多功能和方法来简化和加快数据分析和处理过程。
考虑到清理原始数据所花费的时间,Pandas 对于数据科学家和数据分析师来说都是一个非常重要的工具。
你可以成为媒介会员来解锁我的作品的全部访问权限,以及媒介的其余部分。如果您使用以下链接,我将收取您的一部分会员费,无需您支付额外费用。
https://sonery.medium.com/membership
感谢您的阅读。如果您有任何反馈,请告诉我。
Python 中的 4 种理解类型
原文:https://towardsdatascience.com/4-types-of-comprehensions-in-python-2fbeafdf2fda?source=collection_archive---------13-----------------------
由 rahu 在 Pixabay 上拍摄的照片
只为了简洁和易读而使用它们
作为 Python 中使用最广泛的“Python”语法之一,你一定听说过 List Comprehension 或者已经经常使用它。几乎是各种 Python 初级教程的必备章节。然而,你知道在 Python 中实际上有 4 种类型的“理解”而不仅仅是列表吗?你也可能听说过或曾经使用过字典理解,但可能没有为集和发生器。
在这篇文章中,我将用例子来介绍 Python 中所有的 4 种类型的理解。在最后一节中,我还想举一个例子告诉你什么时候不使用理解来获得更好的可读性。请小心使用!
1.列表理解
照片由 Pexels 在 Pixabay 上拍摄
这绝对是 Python 中最常用的一个。你会在任何地方看到他们。基本语法如下:
my_list = [<expression> for <item> in <iterable> if <condition>]
在这里,expression
可能与item
完全相同,这意味着我们不想对项目做任何事情,只是保持原样。
condition
是可选的。只有当你想做一个过滤器时才使用它。
所以,基本上:
expression = item
当你想离开item
不变的时候。expression != item
当你想应用一些逻辑去修改item
的时候。condition
将有助于过滤可能返回较少items
的iterable
。condition
是可选的,因此如果它被抑制,iterable
的长度必须等于my_list
。
我们举个例子来演示一下。假设我们有一个只有 1-10 个整数的列表。
my_list = [1,2,3,4,5,6,7,8,9,10]
我们想要做的是用my_list
中的数字创建一个新列表
- 过滤数字,使其只有偶数(使用
condition
) - 过滤后的数字,在被推入新列表之前加 1(使用
expression
)
new_list = [number + 1 for number in my_list if number % 2 == 0]
非常简洁易读!如果我们不用列表理解呢?这里有一个例子。
new_list = []for number in my_list:
if number % 2 == 0:
new_list.append(number + 1)
它也有很好的可读性,但是不够简洁。此外,我们必须先初始化 new_list。
那么,你喜欢哪一个?我想答案对我们大多数人来说是显而易见的:)
2.词典理解
由 Deedee86 在 Pixabay 上拍摄的照片
名称“某物”理解,实际上取决于输出对象类型,而不是理解中使用的 iterable。因此,词典理解会生成词典。
基本语法如下:
my_dict = [<key>:<value> for <item> in <iterable> if <condition>]
请注意,这里的key
和value
可以是带或者不带item
的表达式。
假设我们有一个包含雇员姓名、年龄和职务的字典对象列表。
persons = [
{
'name': 'Alice',
'age': 30,
'title': 'Data Scientist'
},
{
'name': 'Bob',
'age': 35,
'title': 'Data Engineer'
},
{
'name': 'Chris',
'age': 33,
'title': 'Machine Learning Engineer'
}
]
要求是让所有职位包含字符串“数据”的雇员。所以,我们可以称他们为“数据员工”。
此外,我们对雇员的年龄不感兴趣,所以我们希望有这样一个字典,以雇员姓名作为键,以他们的职位作为值。
这次,我们先写没有字典理解的代码。
data_employees = {}for p in persons:
if 'Data' in p['title']:
data_employees[p['name']] = p['title']
同样,我们必须在开始时初始化一个空字典。在 for 循环中,我们将使用 if 条件来过滤雇员的职位。最后,我们需要确保新字典的结构符合要求。
有了字典的理解,我们可以把所有这些放在一行,甚至在证明它的可读性。
data_employees = {p['name']:p['title'] for p in persons if 'Data' in p['title']}
除了简洁,我要说的是字典式的理解更具可读性。
3.集合理解
由设计师在像素点拍摄的照片
是的,Python 中有一套理解语法,很多人不知道。事实上,集合理解和列表理解的唯一区别在于前者使用了花括号{}
而不是方括号[]
。
语法如下:
my_set = {<expression> for <item> in <iterable> if <condition>}
你把它和字典理解混淆了吗?这两者的区别在于,集合理解没有key:value
对,只有一个expression
。
现在,让我们重用上一节中使用的雇员列表。
假设我们没有使用集合理解。
data_employees_set = set()for p in persons:
if 'Data' in p['title']:
data_employees_set.add(p['name'])
那么,让我们使用它。
data_employees_set = {p['name'] for p in persons if 'Data' in p['title']}
请记住,集合和列表的区别在于,集合中的项目不能重复,也不能按顺序排列:)
4.生成器理解
由 Pixabay 上的 DaKub 拍摄的照片
最后但不是列表,发电机的理解也不为大多数人所知。生成器是 Python 中一个相当独特的语法,它通常是从一个带有yield
关键字的函数而不是 Python 中生成的。
例如,让我们使用相同的数字列表和列表理解部分的要求。我们可以定义一个函数来生成一个生成器。
def even_generator(numbers):
for n in numbers:
if n % 2 == 0:
yield int(n/2)eg = even_generator(my_list)
生成器可以通过其内置函数next()
进行迭代。所以,我们可以通过调用print(next(eg))
继续获取生成器的下一个值。
事实上,所有这些都可以使用生成器理解来完成。生成器理解和列表理解的唯一区别是前者使用了括号。
my_gen = (<expression> for <item> in <iterable> if <condition>)
是的,我们甚至不需要yield
关键字!让我们试一试。
eg = (int(number/2) for number in my_list if number % 2 == 0)
就这样,都搞定了。
5.嵌套理解
由 JerzyGorecki 在 Pixabay 上拍摄的照片
我们已经探索了 Python 中所有的 4 种理解类型。它们在 Python 中是非常好的语法。然而,据我所知,许多学习者一旦知道如何使用理解词,就会倾向于过于频繁地使用它们。这可能不是一件好事。
我们通常喜欢使用理解来编写更简洁易读的代码。然而,有时逻辑是相对复杂的,如果我们使用理解会伤害可读性。
典型的例子之一是嵌套理解。
例如,我们想打印一个从 1 到 10 的乘法表。下面是实现这一点的一个普通方法。当然,没有任何列表理解。
for row in range(1, 10):
for col in range(1, row+1):
print(f'{col}x{row}={row*col} \t', end='')
print("")
需要注意的是,我们很容易控制输出格式,因为在 for 循环中可以有多个表达式。例如,我们可以在print()
函数中使用end=''
参数来阻止它输出新的一行。
如果我们使用列表理解来实现这一点,我们当然可以,但是很多东西会被挤在一行代码中,这真的会损害可读性。
print('\n'.join([''.join([f'{col}x{row}={row*col} \t' for col in range(1, row + 1)]) for row in range(1, 10)]))
我打赌没有人能非常容易地理解上面的代码。
基本上,我不是建议放弃嵌套理解。有时候,如果逻辑真的很简单也是可以的。然而,如果我们遇到这种需要嵌套理解的情况,我们是否真的需要使用理解就值得三思了。
摘要
照片由 Pixabay 上的NWimagesbySabrinaEickhoff拍摄
在本文中,我介绍了 Python 中的所有 4 种理解类型——列表、字典、集合和生成器理解。大多数时候,它们非常优雅、简洁,甚至可以提高代码的可读性。那就是所谓的“蟒”。
但是,也需要注意不要滥用。当逻辑不简单时,理解会伤害可读性。在许多需要嵌套理解的情况下,我们需要问自己:我应该用嵌套理解写逻辑吗?
希望你喜欢阅读。编码快乐!
https://colab.research.google.com/drive/1PygMIKhTAW_Pl5VVk6UkIfC1VoltqJNj?usp=sharing https://medium.com/@qiuyujx/membership
如果你觉得我的文章有帮助,请考虑加入灵媒会员来支持我和成千上万的其他作家!(点击上面的链接)
征服数据科学面试—第 1 部分
原文:https://towardsdatascience.com/4-types-of-data-science-interview-questions-part1-d17db4253c69?source=collection_archive---------25-----------------------
ML 重点强的真题
在上一篇文章中,我们谈到了征服编码回合是 DS 面试。在本帖中,我分享了 DS 面试中被问到的实际问题,以及这些问题所评估的内容。
接受采访可能会让人不知所措,但当一个人有所准备时就不会了[图片由萨姆·麦克格在 Unsplash 上拍摄]
DS 面试可以是一连串的多轮面试。对于大多数公司来说,进行 2-3 轮技术谈判是很常见的。接下来通常是高级主管/招聘经理的面试。在一些公司,每一轮都是淘汰赛;但在其他情况下,每一轮都意味着从多个面试官那里获得对候选人的公正评估。在这种情况下,任何一次面试都不是你获得那份梦寐以求的工作的成败关键。通过询问招聘人员来检查面试过程和背后的基本原理是有好处的。
无论是哪种情况,多轮意味着你可以确保在 ds 项目管道的所有方面进行测试。大体上有以下类型的问题:
1。简历/基于项目
2。ML 熟练检查—算法细节
3。基于案例研究的问题
4。指标
我们将在这篇文章中讨论类型 1 和类型 2,其余的将在下一篇文章中讨论。
对你的简历了如指掌[ 来源
简历/基于项目
任何面试的基本要求都是你精通简历上写的一切——因为嘿!你说你一直在努力。这可能是面试中最重要的部分。
你会被要求解释简历中的任何项目。当你解释这个项目时,面试官会更深入地研究这个项目的某些方面,或者他们会增加一些转折,检查你对复杂性的适应程度。
例 1:深究的问题
项目——利用 GBM 进行客户流失预测
考生(C): 讲到了数据来源,因变量的创建
面试官(一): 这两个类在因变量中的分布是怎样的?
***C:***4%—1,剩余 0
我: 你是如何处理阶层失衡的?
C: 数据干预(采样策略)、算法干预(使用类别权重),以及选择正确的报告指标(精度/召回超过准确度)
I: 欠采样的多数比过采样的少数有什么优势?有没有尝试过 Smote/Adasyn 之类的其他技术?
C: 解释原因并转移到分类器——GBM 分类器
***一:***GBM 用的是哪个成本函数?它是如何工作的?除了 GBM 你还尝试了什么?
I: 如何选择最佳的精度/召回截止值?
等等..
例 2:探索项目的所有分支
项目—使用 SVD 的主题建模
C: 介绍用例及文本预处理。
I: 词干化和词汇化有什么区别——什么时候用?
***C 😗** 解释道
我: 数据有多大。用于分解的矩阵的维数。使用 SVD 会遇到什么问题吗?
C: SVD 需要很长时间来分解,因此使用了它的另一个变体——FastSVD(由脸书开发)
I: 能解释一下 FastSVD 是怎么工作的吗?什么有助于加快这一进程?
***C 😗** 通过走进线性代数来解释。
我: 好了,现在有了题目,你是怎么验证题目的?
C: 手动+题目连贯,题目困惑
我: 你是怎么决定题目数量的?
C: 使用奇异值重要性相对于主题数量的 Scree 图
一: 说明本项目使用的系统架构。处理是实时的还是成批的?后端系统是如何处理的?
等等..
例 3:增加现有问题的复杂性
项目——利用测井数据进行异常检测
***C 😗** 解释了关于用例的需要,以及可用的数据。
I: 异常值和离群值有什么区别?
C: 异常值是仍在生成数据的机制内的极值。然而,异常是如此极端,以至于你怀疑它可能是由另一种机制产生的。
我: 你还探索了哪些异常检测技术?您能使用隔离林重新制定您的解决方案吗?
你得到了趋势……
【来源】
机器学习能力检查—算法细节
在这种类型的问题中,你可以期望深入算法的工作原理。你可以用数学、统计学、几何学和其他任何对你有用的东西来解释算法的内部运作。
举例:
1。RF 和 GBM 的区别是什么(这是一个很常见的问题,也有很好的理由。许多业务用例仍然作为分类问题被解决。尤其是对于表格数据,基于树的模式仍然表现得相当好。然而,这是一个进入基于树的算法工作的入门问题,正如你将在下面看到的)
2。 为什么 RF 比决策树好?
****3。**RF/GBM 如何给新数据分配一个概率分值?
****4。**GBM 中使用的损失函数是什么?
5。 解释交叉熵损失函数。为什么要用 log?
**6。**RF 如何计算变量重要性?
7。逻辑回归的变量重要性比 RF 更有优势。你能告诉我这是什么吗?(提示—这与 p 值有关)
8。 你用什么方法检测和溢出?
9。* 部署后,在 1 个发行版上训练的模型遇到了另一个发行版。你会怎么做?*
10。什么时候你会使用 LSTM 而不是简单的 RNN?
11。你能解释一下反向传播是如何工作的吗?**
结论
在这组问题中,您看到了强烈的技术焦点,在下一篇文章中,您将注意到业务焦点,即案例研究和基于指标的问题。继续阅读-
*https://learnwithdivya.medium.com/4-types-of-data-science-interview-questions-part2-106f5bf7218d *
征服数据科学面试—第二部分
原文:https://towardsdatascience.com/4-types-of-data-science-interview-questions-part2-106f5bf7218d?source=collection_archive---------24-----------------------
具有强烈商业焦点的真题
谁不喜欢一个谈论数据和商业的人[图片来自 GraphicMama-team 来自 Pixabay
DS 面试可以是一连串的多轮面试。对于大多数公司来说,进行 2-3 轮是很常见的。这之后有时会有董事轮/招聘经理轮。多轮意味着您可以放心地在 ds 项目管道的所有方面接受测试。
大体上有以下类型的问题:
1。基于简历/基于项目
2。ML 熟练检查—算法细节
3。指标
4。基于案例研究的问题
我们已经在上一篇 中讨论了类型 1 和类型 2,在那里我们看到了具有强烈技术焦点的问题**。**当前岗位目标类型 3 和类型 4。
案例研究是对你思维过程的测试[照片由克里斯蒂娜@ wocintechchat.com在 Unsplash 上拍摄]
基于案例研究的问题
在这类问题中,面试官分享一个业务用例,并要求你解决它。采访者提供最低限度的护栏。
这是一种检验候选人业务敏锐度的方法,看看他们是否能接受模糊的业务陈述(是的,很多时候业务需求确实是模糊的),询问相关问题,陈述他们的假设,将其与合适的数据科学解决方案联系起来,最后将 DS 解决方案翻译回对业务有意义的语言。
在这类问题中,重要的是提出澄清性问题,并将问题分成小块。
假设你是 Big Basket 的分析师。您可以查看 BB 目录中所有产品的价格。您还可以访问交易详情。BB 公司正计划推出一种内部开发的优质蜂蜜。你需要为这种新的内部优质蜂蜜提出一个建议价位。你的方法是什么?
经过测试的概念 —商业敏锐度、数据意识
**Eg2 😗* 你是一家生产疫苗小瓶的公司质量控制团队的一员。小瓶的壁应该至少有 2 毫米厚。该公司保证质量标准的最大缺陷率为 3%。作为一名质量检测员,你需要检测多少瓶才能确定是否达到质量要求。
概念测试 —统计(样本量估计)
你是一家生产各种服装和配饰的精品店的顾问。他们通过自己的网站销售产品。精品店有不同的部门,比如男装、男式配饰、男式鞋,以及类似的女装部门。是时候推出新的春夏系列了。然而,由于过去几个月的低销售量,仓库里有积压的存货。你的工作是想出一个策略,清空旧股票,卖出新股票。你可以给折扣,但你需要对每个部门的成本敏感。
陈述你所做的任何假设。你会考虑哪些数据点来制定你的策略?你会对数据进行什么样的分析?最后,你将如何说服个别部门主管使用你的策略?
**概念测试:**商业敏锐度,将业务转化为 DS,反之亦然
一个可能的解决方案可以谈以下几点:
数据 —库存管理成本、商品成本、过去价格、过去需求、客户交易历史
分析 —需求预测、优惠效果、客户购买倾向、产品捆绑
与业务沟通 —显示没有任何策略的销售预测与有建议策略的销售预测的图表。同样,有无策略的库存成本也是如此。
你是一家金融科技初创公司的数据科学家。这家公司有一种产品提供 500 美元的信用额度(无担保贷款)。目标人群是没有固定收入的人。大多数银行在提供贷款前坚持要求信用检查、工资单、担保/保证。但是你的公司提供无担保贷款,没有任何信用检查,甚至不收利息。对于任何接*你的人,你收集他们在 KYC 的详细信息,并有权查看他们银行账户过去 24 个月的交易。想出一个策略来确定共享的银行账户是否是他们的主要银行账户,以及他们是否有资格获得信贷额度。
概念测试 —商业敏锐度,将问题分解成大块的能力,领域意识,将业务转化为 DS
你是一家数字营销公司的数据科学家。你目前的项目是分析产品评论,找出人们谈论的话题。你有大量的输入数据流。你将如何实时分配主题?你需要能够适应实时出现的新话题?
可能的解决方案可以利用单词嵌入。
这是正确的措施吗?[图片由达林·阿里亚斯在 Unsplash 上拍摄]
指标(KPI)
"如果你不能衡量它,你就不能改进它."
彼得·德鲁克
对于任何商业问题来说,重要的是要知道你试图改善什么——降低成本,增加参与度,提高盈利能力。这就是度量变得重要的地方。我认为衡量标准是将 DS 解决方案与业务目标联系起来的标准。
Eg1: 你是 Twitter 的数据科学家。你想增加新用户对*台的参与度。你将使用什么标准来判断一个新用户是否会变得无所事事?
提示— 跟踪每日指标的趋势—如登录和交互。
我们是一家手机制造商。我们有我们手机和其他公司手机的历史价格表,我们想向管理层报告我们的价格在市场上的竞争力。你会怎么做?
提示— 比例
结论
随着一个人从初级数据科学家向高级数据科学家的晋升,对工作的期望也发生了变化,面试问题也反映了这一点。最初,人们只是期望解决一个问题,只要给出了解决策略。然而,后来人们期望拥有一个端到端的项目,这包括 CRISP-DM 方法的所有方面——定义策略、执行策略、检查策略的有效性、部署和监控解决方案。
本系列中提到的问题的多样性涵盖了这些方面的大部分,将有助于你更好地准备。
您可能还喜欢:
在推荐系统中可能导致异常的 4 类用户
原文:https://towardsdatascience.com/4-types-of-users-that-can-cause-anomaly-in-recommendation-systems-3422a85220cc?source=collection_archive---------23-----------------------
推荐系统
推荐系统中如何处理不同类型的用户
在发布大量内容的社交媒体和电子商务*台上,向用户展示合适的内容至关重要。用户进入*台后可以查看的内容是有限的。因此,这些内容必须由能够自适应地预测用户倾向的系统或引擎来选择。互联网上的大多数服务使用这样的系统来增加用户体验。这就是为什么网飞给你看的电视剧和给你朋友看的不一样。
由 Charles Deluvio 在 Unsplash 上拍摄的照片
根据用户的活动为用户单独预测相关内容的系统称为推荐器或推荐系统。它们大多基于包括*台上用户活动的数据,而不是人口统计数据。内容的类别、发布者、显示时间可以是这些活动的例子。然而,推荐模型中使用了两种类型的数据,即显式数据和隐式数据。显式数据包括直接从用户处获取的信息,例如,评级、喜欢或鼓掌(就像在媒体中一样)。隐式数据表示从用户动作收集的信息,如显示时间、显示次数等。因为*台上有不同的用户/使用类型,所以必须对它们进行预处理,以发现它们可能导致的异常。在本文中,我将解释几个必须考虑的重点,以提供更有效的建议。我将关注评级数据(明确的)并讨论强硬、慷慨和资深用户的评级。
等级
评级是用于基于用户的评估向用户建议相关项目的主要信息之一。这是来自用户的直接反馈。因此,在没有用户统计数据的情况下,可以仅使用比率来创建推荐模型。背后的思路是根据用户的评分找到相似的用户,并根据其相似性推荐内容。简而言之,系统基于这样的想法推荐商品:那些喜欢我的人也可能喜欢我的其他爱好。
评分数据有助于改进您的推荐算法。但是,如果用户反馈不一致,可能会导致无效结果。因此,知道如何避免数据中的异常是至关重要的。可能导致这些异常的用户可以分为四个不同的类别,即强硬、慷慨、老练和冷启动。假设有一个*台可以让用户给内容打分,从 1 分到 5 分。强硬的评分者代表了很少给五星的人群。慷慨的评分者通常会给他们在每个类别或任何领域看到的内容打高分。冷启动评分者是*台的新用户。所以,他们没有留下足够的关于他们喜欢什么的信息。资深评分员是使用*台多年的用户。通过考虑这四种用户类型,评级数据应该被预处理以避免异常。首先,我们必须定义什么类型的数据会导致异常。我们将一步一步地检查所有内容。
与严厉和慷慨的评分者打交道
可能导致异常的第一个评级数据是严厉和慷慨的评级者的评级。推荐模型的目的是预测用户对给定内容的评价。比如有 A、B、c 三部电影,我们想知道应该给用户 x 看哪部电影,模型应该给我们给定用户-项目组合的评分预测。在这种情况下,预测变量是显示评级值的变量。严厉的评定者或慷慨的评定者会导致这一变量的异常,因为他们会使低或高的比率偏离正常值。所以,包含苛刻用户评级的数据会误导推荐。请试着从图 1 来理解。
图 1—两个不同的用户给相同的内容留下了星号(图片由作者提供)
散点图表示给定相同电影的两个用户的评级,从 1 到 5。用户 X 的评价似乎低于用户 Y 的评价。根据评价,用户 X 不像用户 Y 那样喜欢该内容。所以,用户 Y 喜欢的内容不会被一个系统推荐给用户 X。但是,如果您看到这些线条,您会发现它们在不同的评价值中绘制了相同的形状。这让我们得出两个可能的结论。第一,用户 x 在给星的时候比用户 Y 更强硬。第二个,用户 y 在给星的时候比用户 X 大方。因此,两个用户都喜欢电影 C、G,不喜欢电影 A、D 和 f。我们可以通过查看来自不同用户的评级值来理解这种情况。然而,问题是要做一个推荐算法来像我们一样理解这种情况。解决方案是使用*均值和标准差来标准化评级值。图 2 显示了标准化后的用户评级分布。
图 2 —用户 X 和用户 Y 的标准化评级值
从图 2 中可以看出,标准化用户评级后获得了相同的评级值。因此,系统可以将“用户 Y”喜欢的电影推荐给“用户 X”。这里强调的是,我们需要标准化基于用户的评分值,而不是标准化从所有用户收集的所有评分数据。
与资深用户打交道
每个*台上都有几个月或几年来一直在使用这个*台的用户。随着时间的推移,用户对不同类型内容的看法可能会发生变化。这也会给我们的数据带来另一个不必要的异常。例如,在 to time 期间,用户可能开始更喜欢动作片而不是纪录片。因此,使用老用户的所有评级数据可能会导致对他或他的类似用户的推荐不一致。请参见图 3,以便更清楚地理解它。
图 3 —一段时间内基于类别的评级变化。
用户在第一个月给动作片高评分,给科幻片低评分。然而,用户在第二个月开始将较高的费率留给科幻小说,而将较低的费率留给动作电影。假设我们已经使用第一个月和第二个月的评级数据创建了一个推荐模型。我们希望在第二个月向该用户推荐电影。由于我们使用了两个月的数据,该模型可能会推荐用户不想看的动作电影。因此,应该基于用户的*期活动来选择评级,以避免这些类型的不想要的推荐。但是,也可以根据日期来衡量评级值。
冷启动用户
不熟悉这个*台的用户在推荐系统中可能是个问题。这是因为没有足够的关于他们喜欢什么的信息。这些类型的用户称为冷启动用户。解决这个问题很重要,因为如果新用户不喜欢系统推荐给他们的东西,他们就有很高的流失风险。
我们可能会认为用户的人口统计数据可以成为解决方案之一。然而现在大部分*台在注册的时候连性别都不问。因此,使用人口统计学不会有足够的帮助。另一个可能是地理定位。可以基于其地理位置的趋势来推荐项目/内容。这可能对电影有帮助,但对媒体等*台没有帮助。因为有太多的主题、类别、作者和文章。因此,这种选择也不能全面解决问题。
解决方案,也是大多数*台所做的,可以是向用户建议他们希望在*台上看到什么样的内容。诸如 Pinterest 、 Medium 、网飞等*台在你注册后会询问你对什么类型的内容感兴趣。它会暂时带出与您的选择相关的内容。然后,你稍微开始输入数据的推荐算法与你的评级和显示。
结论
在这篇文章中,我们讨论了四种可能导致推荐系统异常的用户类型。不同种类的用户的数量可以根据*台的要求而增加或减少。然而,也可以定义其他的倾斜标准,例如内容的显示次数或显示时间。同样的四种用户类型也可能导致这些标准出现异常。例如,一些用户观看整个视频,而另一些用户观看部分视频。因此,我们可以说,即使用户对视频持积极态度,观看时间也可能不同,评级值也是如此。
4 最新的图像数据增强技术
原文:https://towardsdatascience.com/4-up-to-date-techniques-for-image-data-augmentation-5bdf34ace063?source=collection_archive---------41-----------------------
想把你的精确度再提高一点吗?
图一。演示不同的图像增强技术。从https://arxiv.org/abs/1905.04899检索的图像。
数据扩充是几乎每个机器学习工程师用来提高结果的技巧。翻转图像等简单技巧可以轻松获得图像分类模型的百分之几的准确度,而无需进行太多的微调。
然而,这些简单的技术,如翻转、旋转和抖动图像,并不是我们今天要讨论的内容。相反,我们将讨论在深度学习时代引入的 4 种非正统技术,这些技术在改善图像相关任务(如分类、检测和分割)方面表现出了巨大的潜力。请做好准备,因为这些增强技术中的一些可能看起来太过奇怪而不真实!
1.断流器
剪切可能是本文介绍的四种技术中最直观的一种。目标是“切掉”图像的一部分,并将剩余部分用作具有相同标签的新图像数据(见图 1)。由于增强技术,如抖动和添加颜色,使图像更具挑战性,已被证明是有益的,它应该没有什么不同的方法剪切工作。
2.混合
图二。图像混合的简单可视化。图片作者。
2017 年推出的这种数据增强策略非常简单,乍一看常常会怀疑它的能力。张等人在他们的论文中首先提出了这种技术:我们对两幅图像进行插值,然后我们插值相应的标签作为新的标签。
通过在不同数据集上的大量测试,我们实际上可以看到这种简单的技术提高了各种模型主干的性能。结果被推测是由于在数据集上创建的软标签混合,使得在训练期间可以看到更广泛的数据分布。
边注:这里 我还有一篇关于实现 Mixup 的文章。
3.剪切混合
现在,如果你对 mixup 的工作感到惊讶,你会惊叹于 CutMix 工作得更好!Yun 等人决定将一幅图像的一部分剪切并粘贴到另一幅图像上,而不是将每个像素混合在一起,剪切-粘贴比率用作生成图像的新标签(见图 1)。同样,这种技术非常简单,易于实现,但在处理图像分类任务时却非常强大。
另外,最*的论文attention cut mix引入了 attentive feature map 来决定在哪里剪切和粘贴,这显示了更好的效果。
4.复制并粘贴
图 3。复制粘贴演示。图片来自 https://arxiv.org/abs/2012.07177 的。
Ghiasi 等人决定将 CutMix 的成功转移到实例分割中,方法是将一个实例从一个图像随机复制到另一个图像,以允许图像将其正确分割出来。同样,研究结果表明,这种增强技术在提高性能方面非常有效。
自己测试
使用 PyTorch 之类的框架测试所有这些数据扩充技术非常简单。人们可以容易地改变数据加载器内的图像和相应的标签,以实现所有上述数据扩充技术。
然而,由于我们必须深入研究数据加载器,所以我们不能直接使用 PyTorch 提供的数据加载器。我发现一个有用的*台是 Graviti Open Dataset *台,它连接到许多学术上著名的数据集(例如,CIFAR10、ImageNet),这样就不需要查看哪些数据集经常用于特定任务。我还会推荐 PyTorch 的教程,当你添加你的扩充时。
结论
所以你有它!希望这些增加了一些你可以玩的技巧来提升你的图像模型到一个新的水*!
感谢您坚持到现在🙏*!* 我会在计算机视觉/深度学习的不同领域发布更多内容,所以 加入并订阅 如果你有兴趣了解更多!
您应该考虑参加的 4 个即将到来的数据科学活动
原文:https://towardsdatascience.com/4-upcoming-data-science-events-you-should-consider-attending-93160bdae0ab?source=collection_archive---------21-----------------------
April 有很多东西要学。
萨曼莎·博尔热斯在 Unsplash 拍摄的照片
自从一年多前 COVID 袭击以来,我们都被困在家里,不能去工作,上学,娱乐,或参加娱乐或教育活动。尽管被困在室内在很多层面上都是不好的,但一直呆在室内还是有一些好处的。COVID 迫使大学和活动举办者在网上组织和举办他们的活动,允许来自世界各地的人参加——包括否则无法参加这些活动的人。
是的,COVID 之前的一些活动在活动期间提供在线流媒体,但不是全部。现在,几乎所有的活动都在网上进行,而且大多数都是免费或收取少量费用的。
现在有这么多很棒的网络研讨会、会议和虚拟活动,有时候我真希望能全部参加。我是说,你永远学不完东西!但是,我知道我不能参加所有的活动,主要是因为时间限制。
</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>
因此,我决定浏览本月所有与数据科学相关的活动,并选择我认为非常有利于参加的四个活动,我想与您分享这些活动,以防您正在寻找好的活动来关注和学习新的东西,或者只是与社区进行社交。
№1:数据科学高级计算研讨会
4 月 9 日和 10 日
由南康涅狄格州立大学计算机科学系提供的这是一个为期两天的系列讲座,重点是高级计算在数据科学领域的应用。高级计算在数据科学的各个领域都有许多应用,包括机器学习、大数据、计算机版本和数据挖掘。
这些为期两天的研讨会讲座包括深度学习及其在人工智能中的应用、智能数据分析在建筑中的应用、数字数据如何在医疗保健中发挥重要作用以及敏捷数据科学背后的科学。
参加本次活动没有要求或注册费和,将有利于任何人在数据科学或感兴趣的数据科学。无论你是学习数学、计算机科学、商业还是教育,在这个为期两天的活动中,你都会有所收获。
№2: AI 与 AI 为善
4 月 15 日
哈佛大学的数据科学倡议提供了一个伟大的演讲,作者是来自微软人工智能优秀研究实验室的胡安·m·拉维斯塔·费雷斯。人工智能*年来一直是热门话题之一,许多人对它的使用及其伦理方面持怀疑态度。
AI for Good lab 团队专注于应用数据科学概念、机器学习和人工智能来解决人类最具挑战性的问题。文化遗产、健康、司法改革、守法等问题。在这次演讲中,演讲者将带你了解他们所做的研究类型,他们所解决的问题,以及他们希望对社会产生的影响。
本次网络研讨会免费参加,通过注册本次网络研讨会,您将能够收到一份录音,以防因时差原因无法现场参加。
</5-online-data-science-courses-you-can-start-now-748e4a2b5403>
№3:2021 年数据科学日
4 月 22 日
每年,哥伦比亚大学数据科学研究所都会举办一个关于数据科学的活动,即数据科学日。今年,该活动将完全虚拟化,并将以不同的主题演讲、闪电演讲和关于数据科学一切的互动海报会议为特色。
这一天将包括讨论用于设计和自动化的人工智能工具,人类和机器如何共同努力建设更美好的未来,将大数据应用于不同领域的基本挑战,以及构建和实施大规模图形算法。
在我看来,这一天最精彩的部分将是互动海报会议,在这里,你将有机会了解数据科学研究的最新进展,并与来自世界各地的伟大研究人员接触。这项活动的门票不是免费的,但它只收取 20 美元的小额费用。
№4:数据科学&未来博览会和会议的 AI 领袖
4 月 24 日-25 日
这份名单上的最后一项活动是由佐治亚理工学院、加州大学伯克利分校、UT 奥斯汀分校和卡内基梅隆大学提供和组织的数据科学和人工智能明日领袖会议。这项活动将由大型科技公司赞助,如脸书、微软、谷歌和英伟达。
本次会议的重点是主办大学的研究人员和学生展示他们在数据科学领域的最新工作。不仅如此,在演讲之间,还会有来自行业的专业人士就今年的会议主题发表演讲,主题是数据科学和人工智能的多样化应用。
这次会议将是一个为期一天半的活动,充满了教育讲座,社交和该领域的最新进展。这个会议是免费的。
外卖食品
参加教育活动、讲座和会议是任何领域的任何人拓宽人脉、参与社区活动和结识志同道合者的主要途径。但是最*出去认识新的人,讨论研究或者仅仅是最*的技术进步并不是一个选择——希望这很快会改变。
</6-nlp-techniques-every-data-scientist-should-know-7cdea012e5c3>
所以,现在,如果我们想“认识”新朋友,我们必须虚拟地去做,因为科学不会因为任何事情而停止,它将继续前进,我们必须跟上它。幸运的是,一旦 COVID 来袭,许多大学、学院和组织者决定将他们为学生提供的所有活动扩展到任何地方任何想学习新事物的人。
这一令人惊叹的机会让世界各地的每个人,无论他们的教育背景如何,都参加了他们感兴趣的活动,这些活动是他们因为资金和地点原因而无法参加的。否则,无论我们在世界的哪个角落,我们都可以向最优秀的人学习。
在本文中,我提出了 4 个即将举行的数据科学相关活动,我个人将会参加,希望您也能考虑参加。
每个数据科学家都应该知道的 4 种使用情形
原文:https://towardsdatascience.com/4-use-cases-every-data-scientist-should-know-49dccd4d533f?source=collection_archive---------29-----------------------
意见
如何处理常见机器学习算法问题的示例
Icons8 团队在Unsplash【1】上的照片。
目录
- 介绍
- 信用卡欺诈检测
- 客户细分
- 客户流失预测
- 销售预测
- 摘要
- 参考
介绍
如果您是一名资深的数据科学家,您可能已经看到了其中的一些用例,但是,如果您是相当新的,这些用例可以让您实践各种数据科学概念,这些概念可以进一步应用于多个行业。不幸的是,数据科学用例通常不会在公司中很快得到很好的开发,相反,用例将根据项目的需求和期望经过几次会议来构建。重要的是要有一种通用用例的感觉,这种感觉可以被调整并应用到更新的用例中,因为有时,你会遇到文章中没有提到或大学没有研究过的全新场景。然而,数据科学的美妙之处在于,它是可扩展的,并且只需要相对较少的工作量就可以应用于多个问题。话虽如此,让我们检查四个用例,您可以直接应用到您的工作中,也可以调整用于未来的应用程序,包括模型的可能功能,以及所使用的算法本身。
信用卡欺诈检测
埃弗里·埃文斯在Unsplash【2】上拍照。
在本例中,我们将构建一个受监督的模型,其分类为fraud
或no fraud
。理想情况下,在你的数据集中,你会有很多欺诈看起来像什么而看起来不像的例子。下一步是获取或创建几个描述欺诈行为以及正常行为的特征,这样算法就可以轻松区分这两种标签。
以下是您可以在随机森林算法中使用的功能:
- 货币金额
- 频率
- 位置
- 日期
- 交易描述
- 交易类别
以下是在获得训练和测试数据集后可以使用的示例代码:
RF = RandomForestClassifier()RF.fit(X_train, y_train)predictions = RF.predict(X_test)
你可以从几个功能开始,然后努力构建新的功能,例如,aggregates
或per
功能(例如:每天花费的钱,等等。)
客户细分
照片由粘土堤在un splash【3】上拍摄。
与上面的例子相反,这个场景将使用无监督学习,而不是分类,使用聚类。典型的聚类算法是 K-Means 。这个问题不受监督的原因是因为您没有标签,并且您不知道要对什么进行分组,但是您会希望根据新组的共享特征来找到新组的模式。在本例中,使用该模型的具体原因是,您想要找到购买某些产品的人的模式。这样,你就可以为这些客户设计一个有针对性的营销活动。
以下是您可以在 K 均值算法中使用的可能特征:
- 购买的产品
- 他们的位置
- 产品或商家位置
- 消费频率
- 产品工业
- 教育
- 收入
- 年龄
以下是获得数据和要素后可以使用的示例代码:
kmeans = KMeans(
init="random",
n_clusters=6
)kmeans.fit(X)predictions = kmeans.fit_predict(X)
这种算法通常用于电子商务、商品销售以及任何有客户数据和营销的行业。
客户流失预测
Icons8 团队在Unsplash【4】上的照片。
这种情况可以受益于各种机器学习算法。这个问题也类似于信用卡欺诈检测问题,我们希望收集带有预定义标签的客户的特征,特别是churn
或no-churn
。您可以再次使用随机森林,或者不同的算法,例如 XGBoost 。因此,这个场景是一个使用监督学习的分类问题。我们将预测网站上购买了一种或多种产品的用户的客户流失。
以下是您可以在 XGBoost 算法中使用的功能:
- 登录金额
- 日期功能(月、周等。
- 位置
- 年龄
- 产品历史
- 产品多样性
- 产品使用时间长度
- 产品使用频率
- 登录时间
- 客户通过电子邮件发送给客户服务的金额
- 客户与聊天机器人聊天的数量
- 如果他们提到产品
这些特征可以表明某人是长期用户还是短期用户。一些功能,如推荐,将清楚地表明他们是否喜欢该产品,而产品多样性在分类中可能是任何一种方式,例如,如果他们购买了四种不同的产品,但确实多次使用它们。
以下是获得数据和要素后可以使用的示例代码:
model = XGBClassifier()model.fit(X_train, y_train)predictions = model.predict(X_test)
销售预测
照片由 M. B. M. 在Unsplash【5】拍摄。
也许与前三个用例最不同的是预测销售。在这个例子中,我们可以使用 深度学习 来预测某个产品的未来销量。使用的算法被称为 LSTM ,代表长短期记忆。
以下是您可以在 LSTM 算法中使用的功能:
- 日期
- 制品
- 商人
- 销售额
以下是获得数据和要素后可以使用的示例代码:
model = Sequential()model.add(LSTM(4, batch_input_shape=(1, X_train.shape[1], X_train.shape[2])))model.add(Dense(1))model.compile(loss='mean_squared_error')model.fit(X_train, y_train)predictions = model.predict(X_test)
摘要
本文展示了常见算法的常见用例,还涵盖了您可以使用数据科学解决的各种特定类型的问题。例如,我们研究了监督和非监督学习,以及另一种算法亚型,它使用深度学习进行预测。尽管这些都是特定的用例,但无论您的行业是医疗保健还是金融,您都可以将这些特性(或中的子不同特性)和 Python 代码应用于您业务中的大多数数据科学问题。
总而言之,我们比较了涵盖各种算法的数据科学的四个用例:
* Credit Card Fraud Detection — using Random Forest* Customer Segmentation — using K-Means* Customer Churn Prediction — using XGBoost* Sales Forecasting — using LSTM
我希望你觉得我的文章既有趣又有用。如果您在这些用例中使用了机器学习算法,请随时在下面发表评论。你使用了不同于我举例的算法吗?为什么或为什么不?您还可以将其他哪些可以从示例算法中受益的用例组合在一起?
请随时查看我的个人资料和其他文章,也可以通过 LinkedIn 联系我。感谢您的阅读!
参考
[1]图片由 Icons8 团队在 Unsplash 上拍摄,(2018)
[2]埃弗里·埃文斯在 Unsplash 上拍摄的照片,(2020)
[3]照片由粘土银行在un splash(2019)拍摄
[4]图片由 Icons8 团队在 Unsplash 上拍摄,(2018)
[5]照片由 M. B. M. 在Unsplash(2018)上拍摄
2021 年你应该知道的 4 种有用的聚类方法
原文:https://towardsdatascience.com/4-useful-clustering-methods-you-should-know-in-2021-ac61301e968e?source=collection_archive---------17-----------------------
根据距离形成相似的观察组
凯利·西克玛在 Unsplash 上的照片
聚类分析的主要目的是通常基于 欧几里德 距离形成相似观察值的组(称为簇 )。在机器学习术语中,聚类是一个 无监督的 任务。今天,我们讨论 4 种有用的聚类方法,它们属于两个主要类别——层次聚类和非层次聚类。
在层次聚类下,我们将讨论 3 种聚集层次方法——单连锁、完全连锁和*均连锁。在非层次聚类方法下,我们将讨论 K-Means 聚类。
(图片由作者提供)
我们在这里讨论的每种方法都是使用 Scikit-learn 机器学习库实现的。我还将为分层方法创建 树状图 ,以显示观察值之间的分层关系。阅读本文后,您将能够区分每种聚类方法,并使用真实数据集实现每种方法。
分层和非分层聚类
层次聚类 由一系列连续的合并组成。这里,我们不需要知道要查找的簇的数量。与 K-Means 聚类相比,这是层次聚类的一大优势。这种聚类方法可以应用于更小的数据集。使用层次聚类,我们不仅可以对观察值进行分组,还可以对变量进行分组。凝聚法如单连锁、完全连锁和*均连锁都是层次聚类的例子。
非层次聚类 不是由一系列连续的合并组成的。这里,应该在聚类之前指定聚类的数量。这种方法适用于大得多的数据集。使用非层次聚类,我们可以只对观察值进行分组。K-means 聚类是非层次聚类的一个例子。在 Scikit-learn 中,可以通过使用 KMeans() 类来实现。
凝聚方法
开始时,单个观察值被认为是凝聚方法中的主要聚类。然后,我们将最相似的对象组合成簇。通过考虑观察值之间的最小距离或最大相关性来找到最相似的对象。单个连接、完全连接和*均连接是聚集方法的例子。在 Scikit-learn 中,凝聚方法可以通过使用**college veclustering()类来实现。通过在该类内部定义联动:*{‘完全’,‘*均’,‘单一’}***超参数,可以建立基于单一联动、完全联动、*均联动的不同集聚模型。
分层方法
凝聚-单键
在 单 联动法中,我们结合观测值考虑了两个集合的所有观测值之间距离的最小*。*
单一链接(图片由作者提供)
凝聚—完全连锁
在 完成 联动的方法中,我们结合观测值考虑了 最大 的两组所有观测值之间的距离。
完整链接(图片由作者提供)
凝聚*均连锁
在 *均 联动法中,我们结合观测值考虑了 *均 两组各观测值的距离。
*均链接(作者图片)
履行
以下 Python 代码块解释了如何将完全链接方法实现到“鸢尾数据集”中,以找到鸢尾花的不同物种(簇)。为了可视化的目的,我们还应用主成分分析将 4 维虹膜数据减少为可以用 2D 图绘制的 2 维数据,同时保留原始数据中 95.8%的变化!
第一步:绘制树状图
在这里,我们绘制了完全连锁方法的树状图,以显示观察值之间的层次关系,并猜测聚类的数量。
等到加载 Python 代码!
层次聚类树状图(图片由作者提供)
通过查看树状图,可以更好地获得“Iris”数据的 3 簇解决方案。
步骤 2:获取分类标签
对于“Iris”数据中的每个观察,我们得到 3 个聚类标签(0、1 或 2)。
等到加载 Python 代码!
使用完全链接方法对“Iris”数据进行分类标签(图片由作者提供)
步骤 3:绘制聚类图
在主成分分析的帮助下,我们可以绘制“Iris”数据的 3 个聚类。
等到加载 Python 代码!
(图片由作者提供)
在散点图中,我们可以清楚地看到 3 个集群。事实上,鸢尾花实际上有 3 个品种,分别叫做 Setosa 、 Versicolour 和 Virginica ,我们发现的 3 个簇代表了它们!
非等级方法
K 均值聚类
在 k-means 聚类 中,算法试图将观察值分组到 k 组(簇)中,观察值数量大致相同。组数 k 应由用户指定为 超参数 。
要了解更多关于 K-means 聚类的工作原理、分步实现、目标和假设以及如何找到最优的聚类数(针对 k 的超参数调优),请阅读我的*动手 K-means 聚类帖子。***
履行
以下 Python 代码解释了如何对“鸢尾数据集”实施 K-means 聚类,以找到鸢尾花的不同种类(聚类)。为了可视化的目的,我们还应用主成分分析将 4 维虹膜数据减少为可以用 2D 图绘制的 2 维数据,同时保留原始数据中 95.8%的变化!
步骤 1:获取分类标签
使用 K-Means 方法,我们为“Iris”数据中的每个观察值获得 3 个聚类标签(0、1 或 2)。
等到加载 Python 代码!
使用 K-Means 方法对“Iris”数据进行聚类标签(图片由作者提供)
步骤 2:绘制聚类图
在主成分分析的帮助下,我们可以绘制“Iris”数据的 3 个聚类。
(图片由作者提供)
第三步:创建剪影图****
让我们看看我们发现的集群是*衡的(即,每个集群具有大致相同的观察数量)并且分离良好。为此,我们可以创建一个剪影图。想了解更多,请阅读我的动手 K-Means 聚类帖子。****
*******from yellowbrick.cluster import silhouette_visualizer
silhouette_visualizer(K_Means, X_pca, colors='yellowbrick')*******
剪影图— K-Means 方法(图片由作者提供)
该图包含每个簇的一个刀形。刀形的宽度表示集群中实例的数量。条形长度表示每个实例的轮廓系数。虚线表示*均轮廓分数。
我们可以看到我们发现的星团是。这是因为刀具形状的宽度大致相同。**
3 个集群中的大多数点具有大的轮廓值,并且向右延伸超过虚线,指示我们发现的集群是 良好分离的 。
摘要
聚类是一种有用的技术,可用于根据距离形成相似观察值的组。在机器学习术语中,聚类是一个 无监督的 任务。如果数据中的变量不是在相似的比例上测量的,则执行要素缩放是非常重要的。今天,我们讨论了 4 种不同的聚类方法,并用“Iris”数据实现了它们。Scikit-learn 提供了易于使用的函数来实现这些方法。
聚类分析有三个目标:
- 形成相似观察的组
- 为每个观察值分配聚类标签
- 找到每个集群的中心
第一个目标对于发现数据中的一些重要模式(如果有的话)非常有用。出于可视化的目的,我们可以使用主成分分析来降低数据的维度。
如果数据中没有指示标签的目标列,那么第二个目标对于获取每个观察的分类标签非常有用。这就是为什么聚类是一个 无监督 任务,其中数据中没有目标列。
第三个目标对于获得特定集群中观察值的*均度量非常有用。例如,一家服装厂计划设计一个新系列的衬衫。但是他们不知道适合大多数人的衬衫尺寸。他们有关于人体测量的数据。他们可以应用聚类技术,根据对这些人身体部位的具体测量,将他们分组。一旦找到聚类,他们可以使用聚类中心的值作为衬衫的尺寸。
聚类的主要挑战之一是找到最佳的聚类数。聚类算法本身并不学习最佳聚类数。我们必须在训练模型之前将其指定为超参数。用机器学习的术语来说,也叫 超参数调谐 。为此,我们可以尝试不同的可视化技术。有时,问题的领域知识将帮助您推断出正确的聚类数。要了解更多关于聚类中超参数调优的知识,我邀请您阅读我的动手 K-Means 聚类帖子。它将为你提供一步一步的指导。****
感谢阅读!
**本教程由Rukshan Pramoditha,数据科学 365 博客作者设计创作。
在 https://rukshanpramoditha.medium.com 阅读我的其他文章
2021–03–30
Python 的 More-Itertools 库的 4 个有用函数
原文:https://towardsdatascience.com/4-useful-functions-of-the-more-itertools-library-for-python-6915a10781ce?source=collection_archive---------20-----------------------
使得使用 Python iterables 更加容易
照片由 Chor 曾在 Unsplash 上拍摄
Python 的 itertools 模块提供了几个函数,允许创建迭代器来执行高效的循环操作。
more-itertools 是一个 Python 库,为 iterables 带来了额外的功能。
我们将浏览 more-itertools 库的 5 个非常有用的函数,并查看演示如何使用它们的示例。
先简单解释一下 Python 中的可迭代器和迭代器。
- iterable 是一个 Python 对象,它可以一次返回一个元素,比如列表和元组。iterable 对象有一个返回迭代器的
__iter__
方法。 - 迭代器是一个拥有
__next__
方法的对象。我们可以把迭代器想象成一个表示数据流的对象。每次调用 next 方法时,迭代器都返回行中的下一个元素。因此,迭代器有一个在迭代过程中记住当前位置的状态。
这里有一个简单的例子来说明 iterable 和 iterator 之间的区别。
mylist = [3, 1, 4, 21, 13, 5]print(mylist)
[3, 1, 4, 21, 13, 5]
变量“mylist”是一个列表,所以它是可迭代的。
myiterator = iter(mylist)print(myiterator)
<list_iterator object at 0x000002C9E5860070>
当我们在“mylist”上应用iter
函数时,我们得到一个迭代器对象。我们不能像打印可迭代的那样打印迭代器。但是我们可以得到下一个项目。
next(myiterator)
3next(myiterator)
1
我们还可以使用如下的循环来打印每个项目:
for i in myiterator:
print(i)# output
4
21
13
5
当我们到达终点时它就停止了。如果我们现在调用下一个函数,我们会得到一个StopIteration
错误。一旦我们到达一个迭代器的末尾,就是这样!我们不能从头开始。因此,从某种意义上说,迭代器是可任意使用的。
我们现在已经理解了什么时候可迭代和迭代器。让我们开始探索 more-itertools 库的伟大特性。
它可以很容易地通过 pip 安装。然后,我们只需要导入它。
# install from cmd
pip install more-itertools# install in jupyter notebook
pip install more-itertools
1.块状的
我们有一个需要分割成固定长度的小块的列表。有多种方法可以完成这个操作,但是使用chunked
功能非常简单。
from more_itertools import chunkedmylist = [1,2,3,4,5,6,7,8,9,10]chunked_list = list(chunked(mylist, 3))chunked_list
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
chunked
函数返回一个迭代器,使用list
函数可以很容易地将它转换成一个列表。它接受要分块的列表和每个块的大小。
在我们的例子中,块大小是 3,所以最后一个块只剩下一个项目。
我们可以通过使用列表索引来访问块:
chunked_list[0]
[1, 2, 3]
2.变*
flatten
函数接受嵌套的 iterable 并将它们转换成*面 iterable。例如,我们可以通过使用列表的列表来创建列表。
nested_list = [[1,4], [3,8], [1,10]]list(flatten(nested_list))
[1, 4, 3, 8, 1, 10]
类似地,我们可以使用嵌套元组列表和列表。
nested = [(5,2), (9,2), [1,5]]list(flatten(nested))
[5, 2, 9, 2, 1, 5]
3.最小最大值
minmax
函数是一种快速找到 iterable 中的最小值和最大值的方法。
from more_itertools import minmaxmylist = [3, 1, 4, 21, 13, 5]minmax(mylist)
(1, 21)
它返回一个具有最小值和最大值的元组。
它还可以处理字符串,并根据字母顺序查找最小值和最大值。
mylist = ["A", "C", "Z", "M"]minmax(mylist)
('A', 'Z')
4.每个都是唯一的
假设我们有一组可重复项。unique_to_each
函数给出了每个可迭代变量的唯一值。换句话说,这个函数返回的值只存在于相关的 iterable 中。
当我们做一个例子时,它会变得更加清楚。
from more_itertools import unique_to_eachA = ["John", "Jane"]
B = ["John", "Max"]
C = ["Jane", "Emily"]unique_to_each(A, B, C)
[[], ['Max'], ['Emily']]
列表 A 中的值是同样存在于列表 C 中的“John”和同样存在于列表 C 中的“Jane”。因此,列表 A 没有唯一的值。正如我们在输出中看到的,unique_to_each
函数为列表 A 返回一个空列表。
列表 B 中的“Max”在任何其他列表中都不存在,因此它对于列表 B 是唯一的,我们也可以在输出中看到。
我们也可以在字符串上使用这个函数。请注意,字符串也是可迭代的。
unique_to_each("John","Jane")
[['o', 'h'], ['a', 'e']]
我们已经在 more-itertools 库中介绍了 4 个有用的函数。我强烈建议浏览一下这个库的文档,因为它有更多的功能。
文档组织得很好,因此您可以毫无问题地使用它。
你可以成为一名媒介会员来解锁我的作品的全部权限,以及媒介的其余部分。如果您使用以下链接,我将收取您的一部分会员费,无需您支付额外费用。
https://sonery.medium.com/membership
感谢您的阅读。如果您有任何反馈,请告诉我。
4 种可以减轻决策树过度拟合的有用技术
原文:https://towardsdatascience.com/4-useful-techniques-that-can-mitigate-overfitting-in-decision-trees-87380098bd3c?source=collection_archive---------12-----------------------
预修剪、后修剪和创建系综
照片由玛丽莎&埃里克在 Unsplash 上拍摄
过拟合 对于数据科学家来说,这是继缺失值和离群值之后的第二大问题。与其他机器学习模型相比,决策树中的过度拟合很容易发生,因为它们的学习算法可以产生大型复杂的决策树,这些决策树完全适合训练实例。一般来说,过度拟合是当学习算法完美地拟合训练数据但未能对新的看不见的数据(测试/验证数据)进行概括时发生的问题。在过度拟合中,模型正在记忆数据集中的噪声,并且未能学习数据中的重要模式。过度拟合会影响由不属于训练集的样本做出的预测的准确性(或任何其他模型评估矩阵)。
人们可以在训练数据上以 100%的准确度建立完美的决策树模型,但是在测试数据上的准确度非常低。看看下面的 Python 代码,它在“heart _ disease”数据集上构建了这样一个决策树模型。
代码片段 1:决策树基础模型(等到加载!)
输出 1(图片由作者提供)
正如您在输出中看到的,训练准确率为 100%,测试准确率为 71%,远低于训练准确率。所以,很明显我们的决策树模型是过拟合的。在本文中,我们将使用这个模型作为基础模型以便与其他模型进行比较。
有很多可用的通用技术可以减轻或防止机器学习模型中的过拟合问题。然而,在本文中,我们将讨论 4 种特定于决策树的技术。
**注:**如果你想了解更多关于使用决策树进行回归任务的知识,请阅读我写的这篇文章。但是,这并不是今天内容的前提。
技术概述
这里是我们将在本帖中讨论的技术的概述。
(图片由作者提供)
决策树剪枝的一般思想
在一般情况下,修剪是指移除树木或植物的特定部分以促进其生长的过程。同样的事情也适用于决策树,它不是真正的树,而是机器学习模型。在决策树中,修剪是用于控制或限制树的深度(大小)的过程。默认情况下,创建决策树模型超参数是为了将树扩展到其最大深度。这些树被称为 成年树 ,它们总是过度生长。然而,我们可以调整这些超参数来生成没有完全生长和没有过度拟合的树!
有两种类型的修剪技术:预修剪和后修剪
预修剪
预剪枝是一个早期停止规则,在早期停止决策树的生长。它会生成一棵分枝较少的树。可以通过调整 Scikit-learn**decision tree classifier()或decision tree regressor()**类中的以下超参数来应用预修剪。这些超参数指定了停止条件的阈值。
- max_depth: 指定树的最大深度。这控制了分支的复杂性(即进行分割的次数)。如果 None (默认),则节点被扩展,直到所有叶子都是纯的(即以 100%的准确度拟合模型)。减小该值可以防止过度拟合。
- min_samples_leaf: 决定一个叶节点需要的最小样本数。默认值为 1。增加该值可以防止过度拟合。
- min_samples_split: 指定分割内部节点所需的最小样本数。默认值为 2。如果我们将它的值设置为 5,那么不允许对具有 5 个或更少样本的节点进行进一步的分割。
这些超参数中, max_depth 是最重要的一个。我们可以通过单独调整 max_depth 超参数轻松地对决策树进行预修剪。现在,我们将看到单独使用 max_depth 的影响,同时保持其他预修剪超参数的默认值。
技术 1:单独调整 max_depth,观察单个超参数的影响
在不进行网格搜索或随机搜索的情况下,找出单个 max_depth 超参数对训练和测试数据的影响有时是有用的。验证曲线是一种非常有用的技术,可用于测量单个超参数的影响。以下代码使用上述决策树基本模型创建验证曲线。请注意,下面的代码是从代码片段 1(见上文)开始的。
代码片段 2:绘制 max_depth 的影响(等到加载!)
输出 2(图片由作者提供)
注意,在图中,训练集的准确度分数被标记为“训练分数”,测试集的准确度分数被标记为“交叉验证分数”。在 max_depth 值为 3 时,模型正好合适(不会过拟合或欠拟合)。该模型非常适合训练数据,并且还可以推广到新的未见过的数据。让我们再次构建决策树,但现在使用 max_depth=3 ,并将预测与基础模型的预测进行比较。
代码片段 3:创建 max_depth=3 的决策树(等到加载!)
输出 3(图片由作者提供)
与基本模型相比,测试精度从 0.71 提高到 0.74。除此之外,假阴性的数量(将真正的心脏病患者归类为非心脏病患者——这要危险得多!)已显著减少。因此,模型按照我们想要的方式运行。
**注:**如果你想了解更多关于绘制和解释验证曲线的知识,请阅读我写的这篇文章。
技术 2:一次调优多个超参数
有时,单独调整单个超参数可能效率不高。另一种预修剪技术是寻找多个超参数值的新组合,以减轻过拟合。在这种情况下,不能使用验证曲线,因为它被设计用于绘制单个超参数的影响。这里,我们可以使用网格搜索结合交叉验证来一次调优多个超参数。下面的代码使用上面的基本模型执行交叉验证的超参数调整。请注意,下面的代码是从代码片段 1(见上文)开始的。
代码片段 4:一次调优多个超参数(等到加载!)
输出 4(图片由作者提供)
与基础模型和之前的 max_depth=3 模型相比,测试精度有了显著提高。除此之外,假阳性和假阴性都大大减少了。现在,我们的模型没有过度拟合,测试数据的性能也得到了提高。
**注:**如果你想了解更多关于 k-fold 交叉验证和超参数调优技术的知识,请阅读我写的这篇帖子。
修剪后
后剪枝技术允许完整地增长决策树,然后删除它的一部分。
技巧 3: 成本复杂度剪枝
成本复杂度剪枝(ccp) 是后剪枝技术的一种。它提供了另一个控制树大小的选项。这可以通过为 alpha 找到正确的值来实现,该值在 Scikit-learn 决策树类中通常被称为 ccp_alpha 。CCP _ 阿尔法的值越大,修剪的节点数量越多。默认情况下,该值为零,表示不执行修剪。
sci kit-learndecision tree classifier类提供了一个名为cost _ complexity _ pruning _ path的方法,该方法返回一个类似字典的对象,该对象包含 alpha 的有效值(通过CCP _ 阿尔法属性访问)以及在修剪过程的每一步子树的相应杂质(通过杂质属性访问)。我们可以通过执行以下命令来获得基础决策树模型的 alpha 值:
path = dtclf.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas = path.ccp_alphas
ccp_alphas
输出 5(图片由作者提供)
现在,我们可以使用这些阿尔法值来修剪我们的决策树。通过循环遍历CCP _ 阿尔法值数组,我们将每个阿尔法值传递给决策树分类器的CCP _ 阿尔法值超参数,然后计算每次迭代的训练和测试准确度分数,并将它们存储在两个列表中。
代码片段 5(等待加载!)
然后,我们绘制训练和测试准确度分数。
代码片段 6:绘制 ccp 阿尔法值与精确度的关系图(等待加载!)
输出 6(图片由作者提供)
通过查看该图,我们可以决定减轻决策树模型中过度拟合的最佳 alpha 值是 0.06 。
现在,我们通过设置CCP _ 阿尔法=0.06 再次创建决策树。
代码片段 7:创建一个 ccp 阿尔法=0.06 的决策树(等到加载!)
输出 7(图片由作者提供)
与基本模型相比,测试精度从 0.71 提高到 0.77。除此之外,假阳性和假阴性都减少了!现在,我们的模型没有过度拟合,测试数据的性能也有所提高。
我们可以想象修剪后的决策树。
代码片段 8:可视化决策树(等到加载!)
输出 8(图片由作者提供)
现在,我们意识到后期修剪是在幕后进行的,因此如果我们选择第二个大的 alpha 值(或更接*的值),树会以自下而上的方式进行修剪,直到最大深度为 2。CCP _ 阿尔法值越大,修剪的节点数越多!
**注:**如果你想了解更多可视化决策树的不同方法,请阅读我写的这篇文章。
创建合奏
另一种减少决策树过度拟合的技术是从训练数据和特征的子集创建多个决策树。这些树的集合称为系综(群)。
技术 4:创建随机森林
随机森林顾名思义,就是决策树的集合体。一个随机森林中的不相关决策树的大集合可以产生比任何单个决策树更准确和稳定的结果。在正常的决策树中,当算法想要分割一个节点时,它从所有特征中搜索最佳特征*。相反,随机森林中的每棵树都从特征的随机子集中搜索最佳特征。当在随机森林中种植树木时,这会产生额外的随机性。*
**注:**如果你想了解更多关于随机森林的知识,请看我写的这个帖子。
下面的代码创建了一个包含 100 棵决策树的随机森林。
代码片段 9:创建一个有 100 棵树的随机森林(等待加载!)
输出 9(图片由作者提供)
即使不调整任何超参数,随机森林模型也比基本模型表现得好!但是,这个模型仍然是过度拟合的。建议应用一些超参数调整技术来进一步减轻过拟合。
摘要
我们今天讨论的所有技术只能减轻决策树中的过度拟合,但是它们不能完全防止过度拟合的问题。决策树是其他基于树的学习器的基础学习器,例如 Random Forest,XGBoost。因此,我们今天讨论的技术几乎也可以应用于那些基于树的学习者。
决策树中的过度拟合很容易发生。正因为如此,决策树很少在建模任务中单独使用。但是,如果您应用适当的超参数调整技术或使用多棵树进行集成,您可以减轻决策树中的过度拟合,甚至在模型构建任务中单独使用它们。
我们在这里使用的模型评估指标是**“准确性”**指标,当目标变量具有 类别不*衡 时,这不是最佳选择。我们可以检查我们的“心脏病”数据集的目标变量是否有类别不*衡:
import seaborn as sns
sns.catplot("target", data=df, kind="count",
aspect=1.0, height=4)
(图片由作者提供)
在我们的目标变量中没有明显的阶级不*衡。
**注:**sci kit-learn 中使用的模型评估指标和评分方法的完整列表可在此处找到。
感谢阅读!
在 https://rukshanpramoditha.medium.com阅读我的其他文章
除封面图片外的所有图片、代码示例、图表及所有内容均归作者版权所有。特别感谢 Unsplash 上的玛丽莎&埃里克是封面图片的所有者。非常感谢你,玛丽莎&埃里克,为我提供了一张出色的封面图片!
2021–05–16
为数据科学选择业务用例的 4 个重要提示
原文:https://towardsdatascience.com/4-vital-tips-for-choosing-a-business-use-case-for-data-science-bf9343b6ef18?source=collection_archive---------49-----------------------
根据 Gartner 的数据,到 2022 年,只有 20%的数据科学项目带来业务成果。因此,应用数据科学是一项有前途但有风险的工作。
米利安·耶西耶在 Unsplash 上拍摄的照片
电子邮件、社交媒体内容、应用程序日志、图像——鉴于我们每天生成的数据量和多样性,利用这些数据自然就像是应对任何业务挑战的良方。这种心态很容易理解,因为数据科学的成功案例比比皆是:
●在电子商务领域,推荐引擎将客户与他们最有可能购买的产品匹配起来。
●金融服务提供商利用防欺诈算法来检测诈骗企图。
●制造商可以利用预测分析准确调整供需预测。
这些只是数据科学服务如何惠及各行各业的几个例子。事实上,数据分析在所有垂直业务领域的应用是无限的。但是,尽管数据驱动的解决方案可以为任何行业的公司提供支持,但它们的有效性永远不应该被视为理所当然。
根据 Gartner 的数据,到 2022 年,只有 20%的数据科学项目会带来商业成果。大多数甚至不能保证能进入生产阶段。这表明应用数据科学是一项有前途但有风险的工作。
如果一个项目没有建立在正确的前提上,单靠成本投资和技术不足以将数据科学的发现转化为切实的商业利益。这些是什么?让我们看看。
为什么这么多数据科学项目失败?
虽然每个项目都是不同的,失败通常是许多错误的总和,但一些错误是常见的。在启动数据科学项目之前,您应该了解以下五点。
预评估不佳
这个项目需要多长时间?预计费用是多少?影响是否大于风险?不幸的是,许多企业主在受到数据科学优势前景的诱惑时,忘记了这些基本的考虑。
问错误的问题
数据可能包含所有的答案,但是如果你不知道你在寻找什么或者你打算解决什么问题,你就找不到答案。在没有明确定义问题的情况下一头扎进大量数据中,是从一开始就苦干项目的秘诀。
没有明确的商业目的
无论项目有多创新,它的成功最终将取决于它交付的具体业务成果。忘记商业目标,你可能会在项目进行到一半时发现,你的洞察力对投资回报率没有多大贡献。
数据问题
作为项目的核心,您使用的数据不能是不一致的、不完整的、低质量的、孤立的或有缺陷的。在项目已经开始的时候解决这些问题必然会严重阻碍工作。
利益相关者参与度低
随着工作拖上几周甚至几个月,数据科学团队的士气会下降。最初的热情消退,涉众失去兴趣,他们逐渐转向其他项目。实际上,该项目缺乏支持,最终被放弃。
以上所有的失败都有一个共同点:它们发生在项目的最早阶段,在任何实际工作完成之前。因此,让我们来看看如何通过规划和选择正确的案例来避免困难。
从评估开始
提出数据科学的新用例是容易的部分;当选择要投入生产的产品时,斗争就开始了。对选项的全面评估使选择变得更加容易。
●从比较你正在考虑的用例的好处开始。确定那些解决紧急业务问题的方案和那些将刺激增长的方案。要具体——如果项目的目的太抽象,很有可能只是在纸上看起来不错。
●然后,估计每个案例所需的工作量。这是起草一个粗略的项目路线图来了解其规模和时间表的绝佳时机。
●潜在风险是另一个重要考虑因素。假设最坏的情况,选择失败时不会导致灾难性后果的用例。
关注关键业务问题
承认项目的商业目标是评估阶段的一部分,但是它值得在这个列表中有一个单独的部分。
●数据的使用必须以某种形式带来积极的商业成果。减少用户流失,简化客户旅程,或者简单地用更高效的流程替换现有流程,这些都是您正在寻找的目标。扪心自问,数据是否真的有助于实现这些目标。
●为了实现目标,一套定义明确的 KPI 是必要的。在规划阶段,与其他风险承担者讨论您可以使用哪些指标来跟踪进度。
●将洞察力转化为利润是一项多学科的工作。你需要数据科学家进行分析和算法培训,需要 IT 团队维护数据流,需要营销专家将项目推向市场,以防项目面向消费者。从一开始就让每个人都参与进来会给你一系列的视角,增加选择正确用例的几率。
请记住,面对如此多的利益相关者,你需要有人来协调这个过程。任命一个项目负责人来负责这个项目,并确保事情向前发展。
指定并保护必要的数据
不同的用例需要不同类型的数据。外部还是内部,结构化还是非结构化,自有还是收购?尽早回答这些问题,看看你能做什么,需要什么。
●不要把自己局限于现有的数据集或特定的数据源,从而限制了你的创造力。相反,专注于与你的兴趣和专长相匹配的广泛的主题领域,同时与公司的目标相一致。
●数据治理是另一个最好尽早解决的问题。确保每个人都有适当的访问权限,并且数据质量足够高。识别任何关于隐私、安全和数据使用道德的可能问题。
从小规模开始,随着时间的推移不断发展
如果你不能在一个有很大影响力但有挑战性的用例与一个利润较低但更具可操作性的用例之间做出选择,你可能会选择后者。这种方法有几个优点。
●小范围的项目可以在几周内而不是几个月内带来结果。除了业务成果之外,这还将提高您团队的士气,并增加其未来的参与度。
●出于同样的原因,小项目更安全,因为它们涉及的人员和工作量更少。它们也没那么复杂,因此出错的事情也更少。
●然而,选择低挂的果实并不意味着完全放弃更雄心勃勃的用例。相反,通过这种方式,您的团队将获得处理更大项目所需的专业知识。此外,来自小项目的洞察力可以促进工作,甚至激发新的令人兴奋的想法。
结果
尽管有大量可能的应用,但为数据科学找到正确的用例可能很困难。没有一种放之四海而皆准的方法可以保证任何数据科学项目的成功,这就是为什么许多公司将项目委托给外部顾问。无论你是与专家合作还是单干,有一件事你需要记住:在数据科学中,明智的选择决定一切。
为数据科学工作积累业务知识的 4 种方法
原文:https://towardsdatascience.com/4-way-to-build-your-business-knowledge-for-data-science-job-4c3c04ea3d8a?source=collection_archive---------15-----------------------
商业是这份工作最重要的方面
泰勒·弗兰塔在 Unsplash 上的照片
如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。
我是你任何工作岗位的忠实信徒;你总是需要了解你的公司在卖什么,也就是业务。毕竟,公司雇佣你是为了改善业务流程。
当你申请这个行业的任何工作时,都是关于了解你申请的职位和公司经营的业务类型。这也适用于数据科学家的工作。拥有你申请的公司的商业知识会增加你获得数据科学工作的机会。
想象一下这样一种情况,你是数据领域的新人,发现你的竞争对手拥有和你一样的技能。你是如何与其他人相比脱颖而出的?这就是商业知识发挥作用的地方——公司更希望拥有更好的商业知识。这就是为什么我从不建议人们大量申请这份工作——你需要根据工作要求量身定制你的申请。
最大的问题是:“作为数据领域的应届毕业生或新手,如何获得这种业务经验?”。这篇文章就是为了回答这个问题而写的,所以让我们开始吧。
1。特定数据科学项目
除了展示您的数据科学项目的产品,还有什么更好的方式来展示您的数据科学能力?毕竟,你被雇佣是因为你可以用你的项目解决业务问题。虽然,你对数据科学项目的第一个想法是展示你所有的技术技能。不,如果你能更聪明地工作是最好的。
虽然从事机器学习很有趣,比如 NLP 项目、时间序列项目、图像识别等等,但你有没有考虑过你正在从事的项目会对你想进入的公司有所帮助?如果没有,那就试着改变心态。
正如我上面提到的,技术技能是必需的,但是你被雇佣是因为你的技能可以解决商业问题。这就是为什么创建数据科学项目来解决业务问题总是更好的原因。
例如,您正在申请一份保险公司数据科学家的工作,您的图像识别项目是否适合他们经营的业务?大概不会吧?。如果你创建一个信用评分项目呢?现在,这是一个更适合向保险公司展示的项目。
也许你会想,通过从事这个数据科学项目,我将如何理解他们经营的业务?嗯,做一些研究是你的工作。我不会纵容你,说你需要做的是创建一些适合公司的数据科学项目,并与它一起运行。如果你对该公司(或至少是该行业)的业务和他们面临的业务问题有深入的研究,从而创建一个吸引他们的特定项目,这将会很有帮助。所有的材料都在那里——公司网站、文章、研究论文等等。
建立专门针对你申请的业务的数据科学项目将有助于积累你的业务知识,并减少你在人们永远不需要的项目上工作的时间。总之,我的建议是:专注于一项业务,并围绕它建立一个数据科学项目。
2。实习
没有比与企业本身合作更好的获得实际商业经验的方法了。虽然在你想去的公司获得你想要的职位竞争很激烈,但你可以尝试通过实习经历来帮助你的潜在客户。
我们都知道获得实习职位本身并不容易,但从来都不容易。然而,我可以从我自己的经历和一些实习生的经历中给你一些建议,帮助你获得实习职位。一个字——连接。
利用你的关系,你可能不会马上得到你想要的职位,但是实习职位是一个稍微不同的故事。这仍然是可能的,因为你是公司的临时合同,而不是全职合同。还有,如果你认为因为你是应届毕业生,所以不可能得到实习机会;不,这是可能的。我知道许多人利用他们的关系在他们想去的地方得到了实习机会,他们甚至还没有毕业。
这种联系并不意味着来自你的家人或密友,而是你可以自己建立的。尝试通过社交媒体或公司活动建立联系;从那里开始,试着进行对话,建立更好的联系。许多人通过这种方式获得实习机会——白手起家,仅仅依靠他们的社交技能。这就是为什么要建立联系,不要回避或错过一些重要的东西。
实习有那么重要吗?如果你从未在你想要的某个行业有过任何工作经验或商业知识,我会说是的。我认识一些人,他们在招聘过程中因为实习经历而被评为比竞争对手更高的职位,尽管竞争对手的教育机构排名更高。很疯狂,对吧?这就是为什么如果你想学习商业流程,我总是建议你去实习。
3.自由记者
你可能没有时间去实习,或者已经有了一份全职工作,但有了其他让你感兴趣的事情,那么自由职业者可能是获得商业知识的机会,同时还能赚点钱。听起来很容易?嗯,你还需要在这里和很多竞争对手竞争。
根据我的经验,你需要建立一个体面的技术技能,并从低水*开始,以获得在独立项目中签约的任何机会。此外,如果你建立你的存在来提高你的个人品牌,这将是最好的。
那么,如何从自由职业中获得商业知识呢?这种方式稍微难一点,因为自由职业是接受你得到的工作,而不是选择你想做什么(当然,这取决于人),但你总能从你得到的每份工作中学到商业知识。这是因为自由职业者的工作仍然是解决商业问题的工作。这仍然是一个提高你的商业和技术知识的学习过程。
4。被聘用,但职能不同
就像实习岗位一样,最好的商业经历是当你被你想要的商业行业雇佣的时候。但是,有些时候你必须接受,你应该从一个不同的角度出发,才能进入你想要的位置。
我见过许多受雇于企业的人希望将他们的职业生涯转向数据——他们更容易被接受为数据科学家;为什么?他们已经了解了这个行业,只学到了支持他们转行的技术技能。
业务中的每个功能都将使用数据;这就是为什么你可以利用任何职位成为数据科学家。数据科学家在现代不是受雇于某个特定的部门,而是无处不在;营销、财务、沟通、人力资源——企业中的每一个部门现在都雇佣数据科学家来帮助他们的工作。虽然,还是要说到你公司的成熟度。从任何位置看都是重点;你可以成为一名数据科学家,这是学习业务的最佳方式。
结论
申请数据科学工作很难,尤其是在当前竞争激烈的情况下。为了给你一个优势,你需要了解你申请的公司。我推荐四种获取商业知识的方法,它们是:
- 特定数据科学项目
- 实习
- 自由记者
- 被雇用,但是在不同的功能上
希望有帮助!
如果你想知道作为一名数据科学家,商业知识有多重要,你可以看看我的其他文章。
在我的 LinkedIn 或 Twitter 上访问我。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
Apache Beam 中有效调试数据管道的 4 种方法
原文:https://towardsdatascience.com/4-ways-to-effectively-debug-data-pipelines-in-apache-beam-6508a880f0b4?source=collection_archive---------37-----------------------
通过在部署到云之前运行单元测试、使用模块化结构以及以编程方式生成唯一标签来节省调试时间
作者图片
Apache Beam 是一个开源框架,对于大规模清理和处理数据非常有用。它对于实时处理流数据也很有用。事实上,你甚至可以在笔记本电脑上用 Apache Beam 进行开发,并部署到 Google Cloud 进行处理(Google Cloud 版本称为 DataFlow)。
除此之外,Beam 还涉足人工智能领域。更正式的说法是,它被用作机器学习管道的一部分,或者用于机器学习模型的自动部署(MLOps)。作为一个具体的例子,Beam 可以用来清除 Twitter 数据中的拼写错误或标点符号,然后将数据发送到机器学习模型,该模型可以确定推文是否代表快乐或悲伤的情绪。
使用 Beam 的一个挑战是如何进行调试,以及如何在笔记本电脑上调试基本功能。在这篇博文中,我将展示 4 种可以帮助你改进调试的方法。
快速提示:
这篇博客高度概括了如何调试数据管道。为了更深入的了解,你可能想看一下这个视频,它讲述了 Apache Beam 的单元测试;还有这个视频,它带你完成了一个基本数据管道的调试过程。
1)如果安装了依赖库,只运行耗时的单元测试
如果您使用的是 unittest,那么让测试只在安装了正确的库的情况下运行会很有帮助。在上面的 Python 例子中,我有一个 try 块,它在 Google Cloud 库中寻找一个类。如果找不到该类,将跳过单元测试,并显示一条消息,提示“未安装 GCP 依赖项”
2)运行本地单元测试时使用测试管道
Apache Beam 使用一个管道对象来帮助构建一个有向无环图 (DAG)的转换。您还可以使用 Apache _ beam . testing . test pipeline,这样在构建基本测试时就可以减少配置工作。
有向无环图的例子(由https://en.wikipedia.org/wiki/Directed_acyclic_graph提供)
获得关于如何调试数据管道的另外两个技巧。看看https://www . whiteowleduction . com/4-ways-to-effectively-debug-data-pipelines-in-Apache-beam/
改善图像数据类别不*衡的 4 种方法
原文:https://towardsdatascience.com/4-ways-to-improve-class-imbalance-for-image-data-9adec8f390f1?source=collection_archive---------9-----------------------
实践教程
几种再*衡技术的利弊
对于许多航空影像数据集来说,“建筑物”是一个极其常见的类。(来源:谷歌地球)
一些数据集包含类别不*衡,并且在一些类别中的实例比其他类别中的多得多。如果训练集中的这种不*衡没有反映在实际的数据流中,它会导致机器学习分类期间的*均精度差。
在这篇文章中,我描述了在数据准备和模型准备中结合几种技术的过程,这些技术可以帮助减轻类的不*衡,并在所有类中产生更高的*均精度。
之前:不*衡的数据集
在这个例子中,我将完成一个理论项目,为无人机镜头建立一个内容识别模型。作为样本数据,我有 800 张来自谷歌地球的随机图片。50 多个类中有 100 万个对象。
数据集包含不*衡的对象类型。有些课程的频率要高得多,高达 100 倍。
最高和最低代表类别的每个类别的实例。60%的类只有不到 1000 个实例,而最高级别的类有 300,000 个实例。(图片由作者提供)
如果你天真地预测数据集中的一个对象是一个“建筑物”,你有 50%的可能性是正确的。因此,这种阶级不*衡会让你相信你的模型比实际情况要好。
这些设置对于对象检测算法来说是具有挑战性的,因为模型试图减少整个数据集中的分类错误。因此,许多模型更喜欢接**等的阶级*衡。
这里有几种可能的方法来处理这种不*衡。
调整#1:切片而不是缩减像素采样
简而言之,原始图像太大,不适合神经网络的输入层。一张 1200 万像素的无人机图像是 4000 x 3000 像素。输入物体检测器的普通图像尺寸为 512×512 像素或更小。
虽然可以对原始图像进行下采样,但是您会丢失重要的信息,并且对于小对象类,模型的精度会较低。
本示例数据集的少数类都比#1 多数类“建筑物”小得多,因此缩减采样对少数类的影响不成比例。
将原始图像切割成更小的图块是缩减像素采样的替代方法。通过保持全分辨率,我们可以确保较小项目的少数类不会变得更加难以识别。
一个完整图像的示例被切割成 49 个无重叠的图块。(图片来源:谷歌地球)
每个图像被*铺成更小的正方形单元,这些单元可以在保持原始图像分辨率的同时单独输入网络。为了确保跨单幅图块边界分割的对象不会丢失任何信息,您可以在连续单幅图块之间重叠的情况下对图像进行切片(例如 25%重叠)。
注意:一些数据集可能包含大小差异较大的对象。您可能希望保留完整的原始分辨率,以便能够识别微小的对象,但也可能有太大的对象,以至于无法容纳在一个单幅图块中。在这种情况下,可能需要使用一些全分辨率切片和一些缩减采样的全图图像来构建训练数据集。
当针对切片数据集进行训练时,我们的模型的*均精度(mAP) 比重新调整图像分辨率的数据集版本更高。
缺点:虽然模型可以更好地处理小对象类,但*铺过程会导致更长的训练时间。例如,这种削球方法增加了我们 30%的地图,但也增加了我们 60%的训练时间。
→值得吗?极有可能。
调整#2:合并几乎相同的类
有些类别几乎完全相同,例如“固定翼飞机”和“货机”这两个类的*均边界框直径约为 18 像素。低像素项目上的这种级别的类粒度对于模型来说可能很难学习,尤其是在每个类没有很多数据点的情况下。
我们决定将相似的对象合并到一个合并的类中,这减少了类的数量,并稍微减少了类分布的不*衡。
注意:最好让具有领域专业知识的人参与进来(我这里没有!)合并标签时。他们不仅可以推荐哪些类应该组合在一起,还可以描述最终用户工作流中原始类必须绝对保留的位置。例如,将“Tank”重新归类为“Truck”可能很诱人,但是用户工作流可能会对“Tank”类采取非常具体的操作。此外,为了帮助简化合并过程,您可以通过识别给模型造成最大混乱的类组来创建一个合并候选列表,以供人工审查。
合并后,我们有了 16 个新的类,而原来有 50 个——但是类的不*衡有多大改善呢?我们来看两个分布。
将少数民族班级合并在一起后,每个班级的*均人数增加意味着难学的班级减少了。(图片由作者提供)
在合并之前,75%的类包含不到 1,500 个实例。在代表性不足的班级合并后,每个班级的*均人数超过了 1,500 人。(图中未显示异常值,包括 426,000 计数的“建筑物”类)。
→值得吗?有可能,但可行性取决于领域和最终用户工作流。
调整#3:对特定类进行重采样
克服机器学习中大类不*衡的传统方法是调整训练集中的类表示。
过采样非频繁类增加来自少数类的条目,以匹配多数类的数量。这可以通过几种方式来执行,例如通过生成合成数据或通过从少数类中复制条目(例如,通过 sklearn 的‘重采样’或 TensorFlow 的 tf.data 采样器或 PyTorch 的 WeightedRandomSampler )。缺点是它会导致过采样类的过度拟合。
欠采样频繁类是从多数类中移除条目,以便它们与少数类中的数量相匹配。不利的一面是,通过删除数据点,您可能会删除有价值的信息或导致对现实世界数据的泛化能力较差。或者不*衡可能非常严重,以至于欠采样的结果对于数据集来说太小。
过采样与欠采样(图片由作者提供)
注意:这两种变化都应该在将数据分成训练集和验证集之后发生,以确保验证集中的数据不包含在训练集中。
对于该示例数据集,我们通过在最终训练数据集中选择性地包括切片来实现欠采样。每个图像块中包含的标签被计数并存储在数据帧中。然后,我们创建了一个排序过程来包含或丢弃每个图块。所有包含至少一个少数民族标签实例(除“建筑物”和“小型汽车”之外的任何内容)的图像都包含在训练数据集中。然后,为了完善数据集,我们还包括了 10%的仅包含最频繁类的切片。不包括带有零标签的图块。
按类别划分的对象数量的变化。(图片由作者提供)
奖励:磁贴治疗也使训练更有效率。
除了提高少数类的*均精度,我们还减少了训练时间(通过减少数据集大小),同时只删除了大部分冗余信息。
管理训练中包含哪些图块的另一个好处是,您可以剔除包含零边界框的图块。使用航空摄影,原始全尺寸图像有时可能仅包含 5-10 个注释,这导致大量“空”图块。在太多空瓦片上训练的模型可以学习预测没有边界框作为最优解。
在各种使用案例和内容类型中,许多大规模图像包含可以在训练前移除的死区。例如,查看有多少数字化病理切片是 100%白色的:
来自 PAIGE.ai 的数字病理切片示例。
因此,当您拥有保证包含空白的大型原始图像时,通常最好将切片数据集视为新的训练数据。您可以开始探索并通过更精细的控制来清理它。
→值得吗?是的。
调整#4:调整损失函数
除了比一些少数阶级多 100 倍的“建筑”阶级,图像的空白背景区域实际上是另一个占主导地位的多数阶级。该模型将看到大量容易分类的负面区域,有时前景与背景的比例为 1:1000。并且当过度表示的类相对容易分类时,它们可以支配整体损失,这操纵梯度下降以优化对那些多数类的检测。
不要*等地对待每个错误,而是把罕见类上的错误看得比普通类上的错误更重要。
作为回应,我们实现了聚焦损失à la FAIR 的密集物体探测聚焦损失论文。损失函数基于每个对象的预测概率是动态的。[0,5]之间的可调“聚焦参数”`γ'将分类良好的示例的损耗(p > 0.5)推向零。这一变化降低了在总损失项中过度代表的类别的优势。
来源:脸书艾研究(FAIR)
对于合并类数据集,实现焦点损失提高了少数类的*均精度,并保持了多数类相对较好的*均精度。
→值得吗?是的。
结论
数据集开始时存在明显的类不*衡并不罕见,对于可能包含大量“空”(或背景)类的图像数据集,这种不*衡会进一步加剧。
如果不考虑代表性不足的类,模型可以达到一个精度上限,在该上限下,多数类很容易预测,但除非采取措施解决类的不*衡并提高少数类的性能,否则整体模型精度可能不会提高。
通常,这意味着数据准备技术(如重新采样)和模型准备技术(如调整损失函数)的组合。这些技术中的一些有缺点,如增加模型训练时间,但通常是值得的,因为它们最终可以产生更高的地图。
数据科学家应该 1)准备好花费时间来缓解类别不*衡,2)期望迭代他们的训练数据集。
增加数据科学收入的 4 种方法
原文:https://towardsdatascience.com/4-ways-to-increase-your-data-science-income-cdf09ef5a8f6?source=collection_archive---------18-----------------------
如何在成为更好的数据科学家的同时赚更多的钱
丹尼尔·麦金尼斯在Unsplash【1】上的照片。
目录
- 介绍
- 数据科学博客
- 自由职业工作
- 促销和营销
- 小书创作
- 摘要
- 参考
介绍
除了在工作日有一份稳定的数据科学工作之外,还有其他几种小方法可以显著增加你的收入。可以说,有一些副业会让你不知所措,会让你远离你的主要工作,然而,我认为情况恰恰相反。当你从事更多的数据科学项目时(到某一点),你正在加强你在数据科学方面的知识基础,这最终可以帮助你在当前的工作中表现得更好。当然,这因人而异,但在其他数据科学项目上投入一些时间可能是成为一名更好的数据科学家的绝佳方式。话虽如此,如果你想从这四种增加数据科学收入的方法中学习,请继续阅读下面的内容。
数据科学博客
照片由丹尼尔·麦金尼斯在Unsplash【2】上拍摄。
去年春天,我尝试了以数据科学为主题的博客。起初,在一个月内,我想知道我是否能在正常工作的基础上每周写一到两篇文章。当我通过写博客来练习时,我很快变得更加熟练,月收入逐月增加。
写博客的好处在于,随着时间的推移,你可以从旧文章中获益。有些文章会给你带来几美元一天,甚至几个月后写的文章,你可以想象,一旦你达到大约 50 至 100 篇文章,这一小笔支付可以成为显着的,被动的收入。
撰写数据科学文章的最大好处在于,您可以强化当前主题的知识,同时了解新兴主题。例如,你可以在博客中写一篇关于新的机器学习算法的文章,然后在工作中应用它,因为在为这篇文章进行研究之后,你已经成为了某种程度上的 it 专家。这是在日常工作中引入新话题的好方法。通过为博客研究数据科学,您可以研究特定的库、不同的编码技术以及将数据科学融入业务的方法。用最简单的话来说,写关于数据科学的文章是研究数据科学的最好方法之一,不管是旧的还是新的。
除了获得报酬,以下是数据科学博客的一些好处:
- 实践当前的数据科学技术
- 练习技术写作,这可以应用到你的主要工作中
- 实践新的数据科学库和机器学习算法(像发现 Python 库,PyCaret
- 加入数据科学社区
- 为更多的博客和自由职业工作建立关系网
自由职业工作
医生在Unsplash【3】上拍摄的照片。
在我的博客上建立了一个观众群之后,我能够在那些愿意找我做自由职业的人中更加显眼。大部分时间,我做的自由职业也是写作/博客。然而,不同的是,因为你有一个客户,所以有更严格的要求,而不是可以自由写作。
这里有几个地方可以让你自由写作。我个人用过 Fiverr。这个网站更难成功,但一旦你不断增加一些副业,随着时间的推移,钱会越来越多。这也是实践数据科学工作的另一个好方法。
自由职业的一些好处类似于写作和博客,但是,也有一些独特的好处:
- 练习接收和解释业务需求并执行它们
- 练习与利益相关者进行沟通
- 你也可以从事自由职业的数据科学项目,比如一次性项目,这不仅可以赚很多钱,还可以让你成为某个行业的专家,并将这些概念应用到你当前的主要工作中
促销和营销
由 DocuSign 在Unsplash【4】上拍摄的照片。
下一个增加数据科学收入的方法不太直接,但值得投入时间。我说的推广和营销,是指自我推广和自我营销。这种类型的推广可以有多种方式。我个人认为,简单地写文章是提升你在数据科学领域的能力和重点的一个很好的方式。
另一个推销自己的主要方式是在 LinkedIn 上。这个网站允许你分享帖子,这可以成为其他人看到你过去工作的途径,并证明是未来工作的证据。随着时间的推移,随着 LinkedIn 或类似*台上越来越多的分享、互动或参与,你会看到关于博客/写作/或小型数据科学项目的直接消息增多。
小书创作
照片由真诚媒体在Unsplash【5】上拍摄。
这最后一种增加收入的方法是我最*一直感兴趣的。虽然写一本书似乎令人生畏,但数据科学和机器学习书籍不一定要非常广泛才能成功。
例如,你可以在亚马逊上推广一本书,由几家知名公司出版。他们会帮你写书,这是一个过程,也是最难的部分。当写真正的书时,你可以为数据科学和机器学习中的某些主题编写教程的章节,而不是用章节讲述故事。然而,为了获得成功,你的书需要有独特之处。
写一本书(或有资格写一本书)可以通过证明你是一个作家和你有一些读者来完成,这可以通过上面的方法获得,如数据科学博客,自由职业和自我推销。第一步是找到一家你想合作的公司,然后为这本书设计一个标题和大纲,这样就有东西可以合作了。总的来说,确保你的想法是独一无二的,易于遵循的,并且对其他人也是有用的。
摘要
正如您所见,除了您的主要工作,还有几种方法可以增加您的数据科学收入。这些方法有更多的细节,所以如果你有任何问题,请在评论中联系我们。我希望我能够启发你,不仅看到你可以赚更多钱的方法,而且增加你的数据科学知识,甚至可能在该领域找到更多的激情。
总而言之,以下是增加数据科学收入的主要方法:
* Data Science Blogging* Freelancing Work* Promotion and Marketing* Small Book Creation
我希望你觉得我的文章既有趣又有用。如果您同意或不同意这些赚取更多数据科学收入的方法,请在下面随意评论。为什么或为什么不?这些当然可以进一步澄清,但我希望我能够阐明数据科学中的一些主要收入渠道。感谢您的阅读!
请随时查看我的个人资料、 马特·普日比拉 和其他文章,也可以在 LinkedIn 上联系我。
我与这些公司没有关系。
参考
[1]照片由 Danielle MacInnes 在Unsplash(2017)上拍摄
[2]照片由丹妮尔·麦金尼斯在Unsplash(2018)上拍摄
[3]照片由医生在去毛刺(2021)上拍摄
[4]照片由 DocuSign 在Unsplash(2018)上拍摄
[5]图片由真诚媒体在Unsplash(2018)上拍摄
4 种替换 Python 列表中项目的方法
原文:https://towardsdatascience.com/4-ways-to-replace-items-in-python-lists-68b5ec04f79a?source=collection_archive---------2-----------------------
了解如何通过求解基本算法来替换 Python 列表中的条目,为下一次编码面试做好准备
马丁·沃特曼在 Unsplash 上的照片。
更新:你们很多人联系我要有价值的资源 钉 Python 编码访谈 。下面我分享 4 门我强烈推荐在练习完本帖的算法后坚持锻炼的课程:
- Python 中的 leet code:50 种算法编码面试题 →最适合编码回合备考!
- Python 高级编码问题(StrataScratch)→我找到准备 Python 的最佳*台& SQL 编码面试到此为止!比 LeetCode 更好更便宜!
- 用 Python 练习编码面试问题(60+题)
- Python 数据工程纳米学位 → *优质课程如果你有更多的时间投入。*2022 年 3 月 UDACITY 球场最高 75%*的折扣 *
希望你也会发现它们有用!现在欣赏:D 的文章
💔-nanodegrees-you-should-consider-to-advance-your-data-engineering-career-in-2021-baf597debc72>
介绍
在准备下一轮 Python 编码时,您可能已经注意到需要操作一个或多个列表的算法出现得相当频繁。迟早,你也会在面试中遇到他们中的一员。
需要操作一个或多个列表的算法出现得相当频繁。迟早,你也会在面试中遇到他们中的一员。
为了帮助你在掌握这种数据结构的过程中提高你的编码技能,下面我介绍 4 方法来替换 Python 列表中的一项,以及四个简单的算法供你测试你的技能。
大多数经典的面试问题都可以用多种方法解决,所以对于每个问题,在看我提供的解决方案之前,先试着想出你的解决方案。与其他技能类似,算法面试是一个你可以通过不断练习来大大提高的领域。
1.索引
替换列表中项目的最直接方法是使用索引,因为它允许您选择列表中的一个项目或项目范围,然后使用赋值运算符更改特定位置的值:
例如,假设您正在处理包含六个整数的以下列表:
lst = [10, 7, 12, 56, 3, 14]
你被要求在左起第三个整数上加 10。因为列表是从零开始索引的,所以可以使用下面的语法之一来改变带有index = 2
的元素,在我们的例子中是数字12
:
#Option 1
lst[2]= lst[2] + 10#Option 2
lst[2]+= 10 #no need to repeat "lst[2]" then more elegant#Option 3
lst[2] = 22 #that is 12 + 10
现在试着用第一种方法解决下面的问题:
问题#1
给定一个包含整数(介于 1 和 9 之间)的非空列表,将其视为表示一个非负的唯一整数,并递增 1。返回更新的列表。
在结果中,必须存储数字,使得通过求和获得的数字的第一个数字位于列表的开头,并且列表中的每个元素包含一个数字。你可以假设整数不包含任何前导零,除了数字 0 本身。
注意,我们的输入列表由四个非负整数组成,它们共同表示整数 9999。这是一种边缘情况,因为通过在这个数字上加 1,您将获得一个 5 位数的整数(而不是原来的 4 )和一个前导 1。
为了解决这种情况,解决方案利用了两个条件语句,从最后一个到第一个开始计算数字(使用 reverse()
翻转索引的顺序)。如果不等于 9,则通过现在熟悉的语法digits += 1
仅最后一位数字增加 1,并且立即返回修改后的列表,而不评估剩余的索引。
或者,如果最后一个数字是 9,则用 0 代替,并计算后面的(倒数第二个)数字。如果不等于 9,则加 1 并返回修改后的列表。否则,如果后面的每个数字都是 9,那么该函数将返回一个以 1 开头的列表和与原始列表中的元素数量一样多的 0。
https://anbento4.medium.com/10-mcqs-to-practice-before-your-databricks-apache-spark-3-0-developer-exam-bd886060b9ab
2.For 循环
在上面的问题中,目标只是替换列表中的最后一个整数,将它递增 1,而迭代只是用来覆盖边缘情况。
然而,如果我们想同时替换列表中的多个元素呢?
在这种情况下,使用 for 循环会很好,因为它可以用来迭代列表中的项目。为了展示它是如何工作的,让我们回到原始列表,将所有的整数乘以 2:
lst = [10, 7, 12, 56, 3, 14]for i in range(len(lst)):
lst[i] = lst[i] * 2print(lst)Output: [20, 14, 24, 112, 6, 28]
上面的例子很简单,但是如果要求您在替换列表中的项目时应用稍微复杂一点的逻辑,该怎么办呢?
问题#2
考虑一个整数列表。如果是奇数,就加 1,如果是偶数,就加 2。
注意,这个解决方案不是使用range(len(nums))
,而是使用enumerate()
方法迭代列表中的所有元素,通过模操作符检查整数是奇数还是偶数,并通过分别添加 1 或 2 来替换它们。
Enumerate 是 Python 中的内置函数,可用于在遍历 iterable 对象时添加自动计数器。当可选的start
参数没有指定时,计数器从 0 开始计数,就像它是一个实际的索引一样。
出于这个原因,通常使用enumerate()
来解决需要您根据应用于索引或列表值的条件来操作列表的算法。
3.列出理解
list comprehension 语法是一种更优雅的方法,可以遍历列表元素并应用某种形式的操作。这是因为理解允许你创建一个新的内联列表,使得你的代码看起来非常简洁。
您可以将上面示例中的 for 循环转换为如下理解:
lst = [10, 7, 12, 56, 3, 14]lst = [lst[i] * 2 for i in range(len(lst))]print(lst)Output: [20, 14, 24, 112, 6, 28]
为了填充新列表,还允许您指定基本条件作为列表理解语法的一部分。这正是解决以下算法需要做的事情:
问题#3
给定一个按升序排序的整数列表,返回一个也按升序排序的列表,包括:
-整数的*方,如果能被 3 整除
-原始整数,如果不能被 3 整除
在这种情况下,if 条件在for loop
之前指定,因为存在一个else
语句。然而,当不需要else
时,您可以简单地遵循语法:
output = [ expression for element in list_1 if condition ]
4.切片和洗牌
有时,在编写面试代码时,您可能会被要求重新排列列表中的项目,以便它们以不同的顺序出现。这可以通过切片和洗牌来实现。
例如,如果您希望交换初始列表中的前 3 个和后 3 个元素,您可以写:
lst = [10, 7, 12, 56, 3, 14]lst = lst[3:] + lst[:3]print(lst)Output: [56, 3, 14, 10, 7,
12]
也许,在这种情况下,谈论替换有点牵强,因为您实际上只是改变了元素在列表中的位置。尽管如此,这种方法还是很有效的,可以帮助你解决下面的问题。
问题#4
给出由 2n 个元素组成的 num 列表,形式为[x1,x2,…,xn,y1,y2,…,yn]。以[x1,y1,x2,y2,…,xn,yn]的形式返回数组。
该练习为您提供了用于切片的索引(在本例中为n=3
),并要求您通过创建新的整数对来打乱输入列表。
属于每一对的整数应该是共享相同索引的整数,如果我们将原始列表分割成两个子列表(nums[:n]
和nums[n:]
),使用zip()
将子列表中包含的元素配对在一起并递归地将它们添加到新的shuffled
列表中,可以很容易地获得这个结果。
结论
在本文中,我向您介绍了 4 种方法来替换 Python 列表中的条目,它们是索引、用于循环的、列表理解和切片洗牌。
每个操作本身都很简单*,但是你应该能够通过选择最合适和有效的方法来掌握它们,同时解决更复杂的挑战,为你的下一轮编码做准备。*
出于这个原因,我还展示并分享了 4 种算法的解决方案(每种方法一个),它们代表了您在面试初级和中级数据角色时会发现的复杂程度。
还要注意的是这篇文章中出现的问题是对 Leetcode 上出现的问题的重新解释。每一个问题都有多种解决方案,因此地雷只是象征性的。**
给我的读者一个提示
这篇文章包括附属链接,如果你购买的话,我可以免费给你一点佣金。
来源
停止在 Python 中使用 range()for Loops | Jonathan Hsu |更好的编程
如何同时迭代两个(或更多)列表| Jonathan Hsu |更好的编程
【在 Python 中替换列表中的项目:完整指南:完整指南(careerkarma.com)
在随机森林中可视化单个决策树的 4 种方法
原文:https://towardsdatascience.com/4-ways-to-visualize-individual-decision-trees-in-a-random-forest-7a9beda1d1b7?source=collection_archive---------2-----------------------
使用 sklearn、graphviz 和 dtreeviz Python 包实现决策树的可视化
利亚姆·波兹在 Unsplash 上的照片
数据可视化在数据分析和机器学习领域发挥着关键作用,因为它允许您揭示数据背后的隐藏模式。模型可视化允许您解释模型。如今,可视化过程变得很容易,有了大量可用的 Python 包。
基于树的模型,如决策树、随机森林和 XGBoost,更受监督学习(分类和抑制)任务的欢迎。这是因为这些模型非常适合于现实世界应用中经常使用的非线性数据。
任何基于树的模型的基线模型是 决策树 。随机森林由多个决策树组成。今天,我们将讨论 4 种不同的方法来可视化随机森林中的单个决策树。请注意,这里讨论的方法通常也适用于任何基于树的模型,而不仅仅是随机森林。我们将使用 sklearn 、 graphviz 和 dtreeviz Python 包,这些包只需几行代码就可以轻松创建可视化效果。
下面是我们今天讨论的 4 种可视化树木的方法。
- 使用**sk learn . tree . plot _ tree()**函数绘制决策树
- 使用**sk learn . tree . export _ graphviz()**函数绘制决策树
- 使用 dtreeviz Python 包绘制决策树
- 使用**sk learn . tree . export _ text()**函数打印决策树详细信息
前三种方法以图的形式构建决策树。最后一种方法以文本报告的形式构建决策树。
先决条件
我推荐你阅读我写的以下内容,因为它们是今天内容的先决条件。
- 随机森林——决策树的集合
- 使用决策树训练回归模型
- 掌握 Scikit 的 9 个指南——中途不放弃的学习
基于“葡萄酒数据”构建随机森林模型
在讨论以上 4 种方法之前,首先,我们在“葡萄酒数据”上建立一个随机森林模型。该模型可用作上述 4 种方法的输入。“葡萄酒数据集”在 Scikit-learn 内置数据集中提供。
等到加载 Python 代码!
X 是特征矩阵, y 是标签列。“葡萄酒数据”有 3 个类别标签,分别命名为**、【class_0】、、、【class_1】、、【class_2】、。 X 和 y 都用作随机森林模型的输入。由于这是一个分类任务,我们在“葡萄酒数据”上构建了一个RandomForestClassifier()。对于回归任务,可以使用RandomForestRegressor()。**
等到加载 Python 代码!
该模型现已安装在“葡萄酒数据”上,可通过 rf 变量访问。
访问随机森林中的单个决策树
随机森林中的树木数量由**RandomForestClassifier()或RandomForestRegressor()**类中的 n_estimators 参数定义。在上面我们建立的模型中,有 100 棵树。可以从以下位置访问每棵树:
rf.estimators_[index]
rf 是随机森林模型。这里, 指标 取值范围为 0-99(含)。0 表示第一个决策树。99 代表最后一个。
使用**sk learn . tree . plot _ tree()**函数绘制决策树
这是可视化决策树的最简单和最容易的方法。你不需要安装任何特殊的 Python 包。如果您已经安装了 Anaconda,那么一切都准备好了!此功能不会自动调整图形的大小。所以更大的决策树的较量也不会很明确。为了避免这种情况,你必须使用图形的图形尺寸参数来控制图形尺寸。
让我们使用这种方法绘制随机森林模型中的第一个决策树(通过索引 0 访问)。
等到加载 Python 代码!
第一个决策树的结构(图片由作者提供)
您可以通过运行以下命令将图形保存为 PNG 文件:
fig.savefig('figure_name.png')
要了解更多关于**sk learn . tree . plot _ tree()**函数的参数,请阅读其文档。
使用**sk learn . tree . export _ graphviz()**函数绘制决策树
与前一种方法相比,这种方法有优点也有缺点。优点是该功能可以自动调整图形的大小。因此,在绘制更大的树时,您无需担心这个问题。缺点是您应该通过在 Anaconda 命令提示符下运行以下命令来安装 Graphviz Python 包。
pip install graphviz
如果这对你不起作用,试试下面这个:
conda install -c anaconda graphviz
让我们使用 Graphviz 绘制随机森林模型中的最后一棵决策树(由索引 99 访问)。
等到加载 Python 代码!
最后一棵决策树的结构(图片由作者提供)
您可以通过运行以下命令来保存该数字:
graph.render('figure_name')
现在,图形将被保存为 PNG 文件,因为我们在 graphviz 中指定了 format="png"。Source() 函数。如果指定 format="pdf ",图表将保存为 pdf 文件。
使用 dtreeviz Python 包绘制决策树
dtre evizPython 包可以用来绘制决策树。它创造了一些很好的视觉效果。让我们看看它们在分类和回归数据集上的作用。
在此之前,您需要通过运行以下代码行在您的 Anaconda 环境中安装 dtreeviz :
pip install dtreeviz
如果在您的 Anaconda 环境中运行 dtreeviz 时由于路径问题出现错误,不如在 Google Colab 笔记本环境中使用 dtreeviz 。运行下面一行代码在那里安装 dtreeviz 。
!pip install dtreeviz
现在,您已经准备好在您自己的 Colab 环境中运行 dtreeviz 。
Dtreeviz 在分类数据集上绘制决策树
现在,我们使用 dtreeviz 来绘制建立在用于分类的“葡萄酒数据集”上的随机森林模型的最后一棵决策树。这是代码。
等到加载 Python 代码!
运行上述代码后,会出现一个弹出窗口,要求将 SVG 文件保存到您的计算机上。你可以使用这个免费在线转换器将 SVG 文件转换成 PNG 文件。在像素密度框中设置较高的值(如 250)以获得高分辨率图像。
(图片由作者提供)
Dtreeviz 在回归数据集上绘制决策树
现在,我们使用 dtreeviz 来绘制建立在用于回归的“波士顿房价数据集”上的随机森林模型的第一棵决策树。这是代码。
等到加载 Python 代码!
运行上述代码后,会出现一个弹出窗口,要求将 SVG 文件保存到您的计算机上。你可以使用这个免费在线转换器将 SVG 文件转换成 PNG 文件。在像素密度框中设置较高的值(如 250)以获得高分辨率图像。
(图片由作者提供)
使用**sk learn . tree . export _ text()**函数打印决策树详细信息
与前 3 种方法相比,这种方法以文本报告的形式构建决策树。
让我们使用这种方法打印随机森林模型中第一个决策树(通过索引 0 访问)的决策树细节。
等到加载 Python 代码!
第一个决策树的文本报告(图片由作者提供)
细节和我们用**sk learn . tree . plot _ tree()**函数得到的图一模一样。
摘要
sklearn 、 graphviz 和 dtreeviz Python 包提供了绘制决策树的高级函数。sklearn 函数更容易使用,并给出详细的可视化效果。 graphviz 和 dtreeviz Python 包应该在使用前单独安装。在您的 Anaconda 环境中运行 dtreeviz 时,您可能会由于路径问题而得到一个错误。所以在 Google Colab 笔记本环境下最好使用 dtreeviz 。与其他方法相比,dtreeviz 创建了一些不错的可视化效果。我最喜欢的是*。你最喜欢哪一个?写在评论区。也请通过写你的有价值的反馈让我知道我做得如何,以便我可以基于它们开发我未来的内容。*
感谢阅读!
本教程由Rukshan Pramoditha,数据科学 365 博客作者设计创作。
在https://rukshanpramoditha.medium.com阅读我的其他文章
2021–05–07
你的初创公司现在可以使用人工智能的 4 种方式(不需要倾家荡产)
原文:https://towardsdatascience.com/4-ways-your-startup-can-use-ai-right-now-without-breaking-the-bank-9f1323cbb835?source=collection_archive---------30-----------------------
比尔·杰伦在 Unsplash 上的照片
你不需要大笔预算、数据科学家,甚至不需要几个月的努力——如今,你的初创公司可以通过 4 种方式成为人工智能驱动的公司
更新:你可以在 日文 阅读这篇文章(感谢 Koki Yoshimoto!)
计算机科学家吴恩达称人工智能为“新电力”然而,尽管它的能力和吸引力,人工智能并不适合每一种情况。在我之前的文章中,我提出了 5 种避免投资人工智能的场景。要想知道你的初创公司是否需要人工智能,先从优先考虑你的业务问题开始。制定解决这些挑战的最佳方法,并评估技术如何帮助您。大多数时候,基本的分析、统计或简单的机器学习可以有效地完成这项工作。
一些情况确实保证了人工智能的马力。在这些情况下,额外的智能和自动化可以为您的创业带来变革。本文就是针对这些情况的。
当你感觉到需要时,下一个常见的问题是“我真的需要一大笔预算来使用人工智能吗?”不,你的企业不需要几个月的努力、精英数据科学家,甚至是大笔预算就能成为人工智能驱动的。
以下是你的初创公司或 SME(中小型企业)今天可以开始使用人工智能的 4 种方式。这些建议是从最容易到最难排序的,所以从最上面开始,找出最符合你需求的选项。
1.在您已经使用的工具中启用人工智能功能
人工智能无处不在。你的智能手机可能至少有十几个使用人工智能的应用程序。这项技术使您的相机能够拍摄更好的照片,帮助组织您的照片,并为您策划的社交订阅源提供动力。
大多数企业工具都在为自己的产品添加人工智能驱动的功能。微软已经在 Excel 中加入了一些人工智能功能。当你插入来自截图的数据,或者利用 Excel 中创意面板建议的见解时,你就是在使用人工智能。Salesforce 已经整合了其人工智能引擎 Einstein ,作为其流行的 CRM(客户关系管理)*台的智能助手。虽然一些公司将人工智能功能捆绑到他们的核心产品中,但其他公司可能需要升级。
询问供应商你买的软件是否有人工智能功能。你现有的工具集可能已经是人工智能驱动的,或者可以快速升级。
该选项中的 5 个热门工具: MS Office , Google for Business , Dropbox , Github , Mixmax
照片由你好我是尼克在 Unsplash
2.购买现成的人工智能驱动的 SaaS 工具
今天,有太多的 SaaS(软件即服务)工具可以按月支付。你想润色你的营销文案吗?Grammarly 的俏皮编辑功能可以帮你覆盖好的领域。想要转录您的客户评价视频或进行专业级媒体编辑吗?Descript 的人工智能特性可以让这变得轻而易举。
当您有未满足的业务需求时,寻找由智能功能驱动的功能性 SaaS 工具。它们中的大多数都提供了现成的集成,可以轻松地插入到您现有的 IT 生态系统中。即使他们不是完美的组合,重要的是他们是否能解决你的大部分问题。如果是这样,你可以避免为类似的人工智能能力投资昂贵的企业许可证。
根据您的关键需求评估可用的工具。找出匹配的程度和集成的难易程度。如果结果超过可接受的阈值,您可以继续。
该选项的 5 个流行工具: Zoho Zia , Trello , Grammarly , Descript , WaveApps
照片由 Yogi Purnama 在 Unsplash 上拍摄
3.将现成的人工智能模型嵌入到您的工具中
当你找不到内置智能的工具时,下一个最佳选择是在云中寻找可以连接到你的工具的 AI 模型。例如,如果你试图找出产品中的制造缺陷,你可以使用人工智能来自动化视觉检查。 Amazon Lookout for Vision 是一种基于云的机器学习(ML)服务,可以直接插入到你的工作流程中。
与前面的步骤不同,这一步需要 DevOps(软件开发和 IT 运营)能力。虽然你不需要数据科学家,但你的团队必须具备编程专业知识,才能将你的软件应用与在线 AI 模型联系起来。请注意订阅费用,它通常基于使用量。
为了探索这个选项,识别在线 ML *台,这些*台有预先构建的人工智能模型来解决你的领域问题。这个领域有来自 Clarifai、Dialogflow 和 SightHound 等有前途的初创公司的产品,以及微软、谷歌和亚马逊等较大的参与者。
该选项的 5 个热门*台:AWS 上的 ML、 Azure ML 、 Google Cloud ML 、 Clarifai 、 Sighthound
在 Unsplash 上由伊琳娜·麦卡伊洛娃拍摄的照片
4.重新训练公开可用的人工智能模型
当你穷尽了上述选项时,是时候使用数据科学家在内部训练人工智能模型了。你可以通过重用公开可用的人工智能算法和易于管理的数据集来节省精力,而不是从头开始。它们可以用来解决你的问题。
假设你的初创公司需要通过分析客户调查的文本反馈来了解客户满意度。你需要具有自然语言处理(NLP)能力的算法。与其煞费苦心地训练新的人工智能模型,你的团队可以建立在公共竞赛中获奖模型的工作基础上,如 Kaggle 、 DrivenData 或 AICrowd 。
互联网上最好的东西往往是免费的,但找到它们需要时间。寻找像 HuggingFace 这样的开放库,它们发布带有预训练权重的模型,或者像 PapersWithCode 这样的社区,它们将 ML 模型公之于众。大多数这些网站共享丰富的、经过筛选的数据,为您的模型构建过程提供一个快速启动。让您的团队评估调整公共模型所需的工作,并确定在生产中维护它们的成本。
该选项的 5 个热门来源: HuggingFace , AllenAI , RasaHQ , Kaggle , DrivenData
由 Kelly Sikkema 在 Unsplash 上拍摄的照片
人工智能驱动是一个旅程,而不是目的地
我们已经看了 4 种你可以开始使用人工智能并充分利用你的资源的方法。虽然开始人工智能之旅通常很容易,但获得一致的商业价值将需要持续的关注和投资。
你需要培训你的用户,重组你的组织工作流程,并管理与人工智能相关的文化变革。定期重新评估人工智能投资的总拥有成本(TCO)至关重要。今天对你有效的选择可能在一年后变得昂贵。
例如,订阅人工智能驱动的 SaaS 工具(选项#2)可能适合服务于初始客户群的小团队。随着您的团队规模的扩大和使用量的增加,订阅成本可能会变得过高。在那个阶段,你可能会发现雇佣一个小型数据科学家团队并重新训练公开可用的人工智能模型更经济(选项#4)。
为了简化您的人工智能决策,这里有一个可供您选择的选项摘要:
总结:你的初创公司现在可以使用人工智能的 4 种方式(图片由 Gramener 拍摄)
本文最初发表于 企业家 。增加了插图。
40 个用于 ML 的开源音频数据集
原文:https://towardsdatascience.com/40-open-source-audio-datasets-for-ml-59dc39d48f06?source=collection_archive---------1-----------------------
超过 2tb 的带标签的音频数据集在 DagsHub 上公开提供并可解析
十月已经过去,DagsHub 的 Hacktoberfest 挑战赛也结束了。当宣布挑战时,我们没有想到我们会带着* 40 个新的音频数据集到达终点线,这些数据集在 DagsHub 上公开提供并可解析!我们的社区创造了奇迹,在如此短的时间内完成了如此出色的工作,这是巨大的荣誉。同时,感谢数字海洋、 GitHub 和 GitLab 组织此次活动。
今年,我们将重点放在音频领域。为此,我们改进了 DagsHub 的音频目录功能。现在,您可以收听 DagsHub 上托管的样本,而无需在本地下载任何内容。对于每个样本,您可以获得额外的信息,如波形、光谱图和文件元数据。最后但并非最不重要的一点是,数据集由 DVC 进行版本化,因此易于改进并随时可用。
作者图片
为了让音频从业者更容易找到他们正在寻找的数据集,我们收集了 Hacktoberfest 对这篇文章的所有贡献。我们有来自七个(!idspnonenote)的数据集。)不同的语言,不同的领域,不同的来源。如果您对这里缺少的数据集感兴趣,请让我们知道,我们将确保添加它。
尽管为期一个月的虚拟节日已经结束,我们仍然欢迎对开源数据科学的贡献。如果你想丰富 DagsHub 上的音频数据集,我们很乐意在这个过程中支持你!请通过我们的 Discord 频道了解更多详情。
2022 年黑客啤酒节上见🍻
表演情感语音动态数据库
表演情感语音动态数据库(AESDD)是一个公开可用的语音情感识别数据集。它包含了用希腊语表达情感的话语。它被分为两个主要类别,一个包含行为情感言语的话语,另一个控制自发的情感言语。你可以通过向网站提交情感演讲的录音来为这个数据集做出贡献。它们将被验证并公开提供用于非商业研究目的。
- 供稿:阿比德·阿里·阿万
- 原始数据集
阿拉伯语语音语料库
阿拉伯语语音语料库是南安普敦大学的 Nawar Halabi 博士工作的一部分。该语料库是使用专业工作室用南黎凡特阿拉伯语(大马士革口音)录制的。使用该语料库作为输出的合成语音产生了高质量的自然声音。
- 供稿人:梅尔特·博兹克尔
- 原始数据集
Att-hack:法语表达演讲
这些数据是用法语表达的演讲,100 个短语,在四种社会态度中有多种版本/重复(3 到 5):友好、疏远、支配和诱惑。本研究得到了法国 Ph2D/IDF 关于言语态度建模及其在表达性会话主体中的应用项目的支持,并得到了法兰西岛地区的资助。这个数据库为 2020 年东京语音韵律会议带来了一份出版物。关于更详细的描述,请看的研究文章。
- 供稿人:菲利普·列维科夫
- 原始数据集
音频 MNIST
这个存储库包含用于解释和说明深度神经网络的代码和数据,用于对音频信号进行分类。该数据集由来自 60 个不同说话者的 30,000 个语音数字(0-9)的音频样本组成。此外,它还保存了audioMNIST_meta.txt
,它提供了元信息,比如每个说话者的性别或年龄。
- 供稿:梅尔特·博兹克尔
- 原始数据集
BAVED:基本的阿拉伯声乐情感
基础阿拉伯语声乐情感数据集(BAVED)包含以音频/ wav
格式记录的不同情感水*拼写的 7 个阿拉伯语单词。每个单词都记录了三个层次的情绪,如下:
- 0 级——说话者表达的是低水*的情感。这类似于感到疲倦或情绪低落。
- 级别 1——说话者表达中性情绪的“标准”级别。
- 第二级——说话者表达了高度的积极或消极情绪。
- 供稿人:金龟子
- 原始数据集
鸟音检测
这个数据集是由伦敦玛丽女王大学的机器听力实验室与 T2 的 IEEE 信号处理协会合作主办的一项挑战的一部分。它包含在真实的生物声学监测项目中收集的数据集和一个客观、标准化的评估框架。DagsHub 上举办的 freefield1010 收集了来自世界各地的 7000 多段现场录音,由 FreeSound 项目收集,然后标准化用于研究。这个集合在地点和环境上非常多样化。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
报时回家
CHiME-Home 数据集是带注释的家庭环境音频记录的集合。音频记录最初是为钟声项目制作的。在 CHiME-Home 数据集中,基于与声学环境中的声源相关联的一组 7 个标签,每个 4 秒音频块与多个标签相关联。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
CMU-多模式 SDK
CMU-MOSI 是多模态情感分析的标准基准。它特别适合于训练和测试多模态模型,因为大多数多模态时态数据的最新作品都在他们的论文中使用该数据集。它保存了 65 小时的注释视频,来自 1000 多名发言者,250 个话题,以及 6 种情绪(快乐,悲伤,愤怒,恐惧,厌恶,惊讶)。
- 供稿:迈克尔·周
- 原始数据集
CREMA-D:众包情感多模态演员
CREMA-D 是由 91 位演员的 7442 个原创片段组成的数据集。这些片段来自年龄在 20 至 74 岁之间的 48 名男性和 43 名女性演员,他们来自不同的种族和民族(非洲裔美国人、亚洲人、高加索人、西班牙人和未指明的人)。演员们从精选的 12 个句子中发言。这些句子使用了六种不同的情绪(愤怒、厌恶、恐惧、快乐、中性和悲伤)和四种不同的情绪水*(低、中、高和未指明)。参与者根据组合的视听演示、单独的视频和单独的音频对情绪和情绪水*进行评级。由于需要大量的评级,这项工作是众包的,共有 2443 名参与者每人对 90 个独特的剪辑进行评级,30 个音频,30 个视觉和 30 个视听。
- 供稿:梅尔特·博兹克尔
- 原始数据集
儿歌
儿歌数据集是一个开源的歌唱声音研究数据集。该数据集包含由一名韩国女职业流行歌手演唱的 50 首韩语和 50 首英语歌曲。每首歌都是用两个独立的音调录制的,总共有 200 首录音。每个音频记录都配有一个 MIDI 转录和歌词注释,既有字形层次,也有音素层次。
- 供稿人:金龟子
- 原始数据集
装置并产生语音
DAPS (设备和制作的语音)数据集是专业制作的录音室语音记录和现实环境中普通消费设备(*板电脑和智能手机)上相同语音记录的对齐版本的集合。它有 15 个音频版本(3 个专业版本和 12 个消费设备/现实环境组合)。每个版本由大约 4 个半小时的数据组成(20 个演讲者中每个人大约 14 分钟)。
- 供稿人:金龟子
- 原始数据集
深声刻画人物
后者是一个人类非语言人声声音数据集,由来自 1419 个发言者的 56.7 小时的短片组成,由韩国的普通公众众包。此外,数据集包括元数据,如年龄、性别、噪音水*和话语质量。该报告仅包含 723 个话语(大约。1%)并在 CC BY-NC-ND 4.0 下免费使用。要在更严格的许可下访问完整的数据集,请联系 deeplyinc 。
- 供稿人:菲利普·列维科夫
- 原始数据集
EMODB
EMODB 数据库是免费提供的德国情感数据库。这个数据库是由柏林技术大学通信科学研究所创建的。十名专业发言人(五名男性和五名女性)参与了数据记录。该数据库包含总共 535 个话语。EMODB 数据库包含七种情绪:愤怒、厌倦、焦虑、快乐、悲伤、厌恶和中性。数据以 48 kHz 的采样速率记录,然后下采样至 16 kHz。
- 供稿人:金龟子
- 原始数据集
EMOVO 文集
EMOVO 语料库数据库由 6 名演员的声音构建而成,他们播放了 14 句模拟六种情绪状态(厌恶、恐惧、愤怒、喜悦、惊讶、悲伤)和中性状态的句子。这些情绪是众所周知的,在大多数与情绪化语言相关的文献中都可以找到。这些录音是在 Fondazione Ugo Bordoni 实验室用专业设备制作的。
- 供稿:阿比德·阿里·阿万
- 原始数据集
ESC-50:环境声音分类
ESC-50 数据集是 2000 个环境音频记录的标记集合,适用于环境声音分类的基准方法。该数据集由 5 秒长的记录组成,这些记录被组织成 50 个语义类别(每个类别 40 个示例),大致分为 5 个主要类别:
- 动物。
- 自然声景和水声。
- 人类的,非言语的声音。
- 室内/家庭声音。
- 室外/城市噪音。
该数据集中的剪辑是从Freesound.org 项目收集的公共现场记录中手动提取的。数据集已经预先安排到五个文件夹中,以便进行可比较的交叉验证,确保来自同一原始源文件的片段包含在一个文件夹中。
- 供稿人:金龟子
- 原始数据集
EmoSynth:情感合成音频
EmoSynth 是一个由 144 个音频文件组成的数据集,大约 5 秒长,430 KB 大小,40 名听众根据他们对效价和唤醒维度的感知情绪对其进行了标记。它有关于音频分类的元数据,基于效价和唤醒的维度。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
爱沙尼亚情感演讲文集
爱沙尼亚情感演讲团是在“2006-2010 年爱沙尼亚语言技术支持”国家方案框架内,在爱沙尼亚语言学院创建的一个团体。该语料库包含 1234 个表达愤怒、喜悦和悲伤或中性的爱沙尼亚句子。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
Flickr 8k 音频字幕语料库
Flickr 8k 音频字幕语料库包含 40,000 个语音字幕。wav
音频格式,原始语料库中的训练、开发和测试分割中包含的每个字幕一个。音频采样频率为 16000 Hz,深度为 16 位,并以 Microsoft WAVE 音频格式存储。
- 供稿:迈克尔·周
- 原始数据集
Golos:俄语 ASR
Golos 是一个适合语音研究的俄语语料库。数据集主要由在众包*台上手动标注的录音文件组成。音频的总时长约为 1240 小时。
- 供稿人:菲利普·列维科夫
- 原始数据集
JL 文集
新西兰英语中的情感话语。这个语料库是通过保持 4 个长元音的*均分布来构建的。语料库除了五种主要情绪外,还有五种次要情绪。次要情绪在人机交互(HRI)中很重要,其目的是模拟人类和机器人之间的自然对话。
- 供稿人: Hazalkl
- 原始数据集
LJ 演讲
一个公共领域的语音数据集,由 13,100 个单个说话者朗读 7 本非小说书籍中的段落的简短音频剪辑组成。为每个剪辑提供一个转录。剪辑的长度从 1 秒到 10 秒不等,总长度约为 24 小时。这些文本出版于 1884 年至 1964 年之间,属于公共领域。该音频由 LibriVox 项目于 2016–17 年录制,也在公共领域。
- 供稿人:金龟子
- 原始数据集
SNSD 女士
该数据集包含大量的干净语音文件和中的各种环境噪音文件。wav
以 16 kHz 采样的格式。它提供了在各种信噪比(SNR)条件下混合干净语音和噪声的方法,以生成一个大的、有噪声的语音数据集。SNR 条件和所需的数据小时数可以根据应用要求进行配置。
- 供稿人:哈扎克尔
- 原始数据集
公共领域声音
各种各样的声音可以用于对象检测研究。数据集很小(543MB ),根据其格式分为多个子目录。音频文件从 5 秒到 5 分钟不等。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
RSC:来自江湖经典的声音
从缓存中提取 RuneScape 经典声音到wav
(反之亦然)。Jagex 使用了 Sun 独创的.au
声音格式,这是一种无头、8 位、u-law 编码、8000 Hz pcm 样本。这个模块可以从声音档案中解压原始声音作为头文件,并重新压缩(+重新采样)新的 wav 到档案中。
- 供稿人:哈扎克尔
- 原始数据集
语音口音档案
该数据集包含 2140 个语音样本,每个样本来自不同的朗读者朗读同一篇阅读文章。说话者来自 177 个国家,有 214 种不同的母语。每个谈话者都在用英语说话。
- 供稿:金龟子
- 原始数据集
语音命令数据集
数据集(1.4 GB)有 65,000 个一秒钟长的话语,由成千上万不同的人组成,由公众成员通过 AIY 网站贡献。这是一组一秒钟的.wav
音频文件,每个文件包含一个英语口语单词。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
苔丝:多伦多情感演讲集
西北大学听觉测试 6 号用来创造这些刺激。两名女演员(年龄分别为 26 岁和 64 岁)背诵了载体短语“说出单词 _____”中的 200 个目标单词,并制作了描述七种情绪(愤怒、厌恶、恐惧、快乐、惊喜、悲伤和中性)的录音。总共有 2800 个刺激。
- 供稿人:哈扎克尔
- 原始数据集
乌尔都语
乌尔都语数据集包含从乌尔都语脱口秀收集的乌尔都语语音的情感话语。书中有四种基本情绪的 400 种说法:愤怒、快乐、中立和情绪。共有 38 名发言者(27 名男性和 11 名女性)。这些数据来自 YouTube。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
VIVAE:情感和情绪变化强烈的发声
情感和情绪语料库(VIVAE)由一组人类非语音情感发声组成。全套包括 1085 个音频文件,由 11 个扬声器组成,表达三种积极的(成就/胜利、性快感和惊喜)和三种消极的(愤怒、恐惧、身体疼痛)情感状态。每个参数从低到高的情绪强度变化。
- 供稿:梅尔特·博兹克尔
- 原始数据集
FSDD:免费口语数字数据集
一个简单的音频/语音数据集,由 8kHz 的wav
文件中的口述数字记录组成。录音经过修剪,因此在开始和结束时几乎没有静音。
- 供稿人:金龟子
- 原始数据集
LEGOv2 文集
这个口语对话语料库包含卡耐基梅隆大学在 2006 年和 2007 年从 CMU Let's Go (LG)系统中捕获的交互。它基于 LG 系统的原始日志文件。347 次对话,9,083 次系统用户交流;情绪分为垃圾,不生气,轻微生气,非常生气。
- 供稿人:金龟子
- 原始数据集
MUSDB18
用于音乐源分离的多音轨音乐数据集。MUSDB18 有两个版本,压缩版和非压缩版(HQ)。
- MUSDB18 —由总共 150 首不同风格的全音轨歌曲组成,包括立体声混音和原始源,分为训练子集和测试子集。
- musdb 18-HQ—musdb 18 数据集的未压缩版本。它由总共 150 首不同风格的完整音轨歌曲组成,包括立体声混音和原始源,分为训练子集和测试子集。
- 供稿:金杉马
- 原始数据集
声音性别
VoxCeleb 数据集(7000 多个独特的说话者和话语,3683 名男性/ 2312 名女性)。VoxCeleb 是一个视听数据集,由人类讲话的短片组成,摘自上传到 YouTube 的采访视频。VoxCeleb 包含来自不同种族、口音、职业和年龄的演讲者的演讲。
- 供稿人:阿比德·阿里·阿万
- 原始数据集
Pandas 数据帧迭代速度快 400 倍
原文:https://towardsdatascience.com/400x-time-faster-pandas-data-frame-iteration-16fb47871a0a?source=collection_archive---------4-----------------------
避免使用 iterrows()函数
图片来自 Pixabay 的米哈尔·贾莫鲁克
数据处理是数据科学模型开发流程的重要组成部分。数据科学家花费 80%的时间准备数据集,使其适合建模。有时,对大规模数据集进行数据争论和探索成为一项乏味的任务,人们只能等待相当长的时间直到计算完成,或者转移到一些并行处理。
Pandas 是著名的 Python 库之一,它有大量的 API,但是当谈到可伸缩性时,它失败得很惨。对于大型数据集,仅迭代循环就要花费大量时间,有时甚至数小时,即使对于小型数据集,使用标准循环迭代数据帧也非常耗时,
在本文中,我们将讨论在大型数据集上加速迭代过程的技术或技巧。
(图片由作者提供),时间约束比较以迭代数据框
Pandas 内置函数:iterrows()
iterrows()是一个内置的 Pandas 库函数,它返回一系列的每个实例或行。它以一对索引和一系列列要素的形式遍历数据框。
为了比较基准时间约束,我使用了一个包含 1000 万条记录和 5 列的数据集。我们的数据集中有一个字符串类型的特征‘name’
,需要去除其中的空格。
**temp=[]
for i,row in df.iterrows():
name_new = row['name'].strip()
temp.append(name_new)**
代码片段花了将* 1967 秒来执行,包括悬停在数据框上并执行“name”值的剥离函数。
不建议使用 iterrows,这不仅是因为时间性能问题,而且**iterrows()**
函数不能跨行保留数据类型。你可以使用**itertuples()**
函数来保存类型。
现在,让我们找出迭代数据帧的其他技术,并比较其时间复杂度。
按索引迭代:
数据帧是有行和列的熊猫对象。数据框的行和列被索引,并且可以循环遍历索引以遍历行。
**temp=[]
for idx in range(0,df.shape[0],1):
name_new = df['name'].iloc[idx].strip()
temp.append(name_new)**
迭代数据帧并执行剥离操作花费了将* 223 秒(比 iterrows 函数快 9 倍)。
使用 to_dict():
您可以迭代数据框并以闪电般的速度执行操作,只需将您的 Pandas 数据框转换为字典即可。可以使用 Pandas 中的**.to_dict()**
函数将数据框转换成字典。与**iterrows()**
函数相比,现在迭代一个字典相对来说非常快。
**df_dict = df.to_dict('records')****temp=[]
for row in df_dict:
name_new = row['name'].strip()
temp.append(name_new)**
迭代一个字典格式的数据集需要大约 25 条记录,比**iterrows()**
函数快 77 倍。
使用 apply():
apply()是一个内置的 Pandas 函数,它允许传递一个函数并将其应用于 Pandas 系列的每个值。apply()函数本身并不快,但是它对 Pandas 库有很大的改进,因为这个函数有助于根据需要的条件分离数据。
**temp = df['name'].apply(lambda x: x.strip())**
**apply()**
该函数执行时间为 4.60 秒,比**iterrows()**
函数快 427 倍。
从上面的图(本文开始)中,您可以比较在具有 8 个内核和 32GB RAM 的系统上计算的基准时间数。
结论:
在本文中,我们讨论了几种迭代熊猫数据帧的技术,并比较了它们的时间复杂度。建议在非常特殊的情况下使用**iterrows()**
功能。人们可以很容易地从使用**iterrows()**
或索引方法转移到基于字典的迭代技术,这将工作流的速度提高了 77 倍。
Apply 函数的速度快了大约 400 倍,但它的用途有限,并且需要对代码进行大量修改才能转换到这种方法。我亲自将我的数据框转换成字典,然后继续迭代。
参考资料:
[1]熊猫文献:https://pandas.pydata.org/docs/index.html
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一小部分会员费,不需要你额外付费。
https://satyam-kumar.medium.com/membership
感谢您的阅读
Python 字典和集合的 5 个高级技巧
原文:https://towardsdatascience.com/5-advanced-tips-on-python-dicts-and-sets-6ac1685c42b8?source=collection_archive---------12-----------------------
卢西亚诺·拉马尔霍的《流畅的 Python》笔记(第 3 章)
美国宇航局在 Unsplash 拍摄的照片
“任何正在运行的 Python 程序都有许多词典同时处于活动状态,即使用户的程序代码没有明确使用词典。”库奇林
如果你对编写更高效的 python 代码感兴趣,这篇文章很适合你。
我们将讨论卢西亚诺·拉马尔霍的 Fluent Python 第三章的主要内容,其中包括散列表,例如字典和集合。
1 — Hashmap 与序列类型
提示:对唯一的无序记录使用字典和集合。
让我们从“基础”开始,讨论字典和集合在 python 变量生态系统中的位置。下面我们可以看到一个字典、集合、列表和元组的示例声明。
my_dict = {'key1': 'value1', 'key2': 'value2'}
my_set = {'a','b','c'}my_list = ['a','b','c']
my_tuple = ('a','b','c')
前两个变量( my_dict 和 my_set )的主要区别在于它们利用了散列表。元组、列表和其他 python 序列没有。
python 中的 Hashmaps 使用hash(my_key)
方法散列一个键,并覆盖其散列键对应于hash(my_key)
的值。这个过程也可能涉及到订单的重组。
因此,尽管散列表非常快,但您必须处理唯一的无序数据。
2—创建字典和集合的最佳方式
提示:使用文字声明 而不是 dict() 或 set() 。
有很多方法可以创建 python 字典和集合,但是并不是所有的方法都是一样的。下面是最具表现力和可读性的方法。
# dicts
d = {1: 1, 'x': 'x'}
d_comp = {k: v for k,v in zip(keys, values)}# sets
s = {1, 'x'}
这里,我们利用花括号 来声明变量,而不是调用像dict()
这样的构造函数。根据 Fluent Python 的说法,从可读性和性能的角度来看,这都是最佳实践。
有一个例外。如果我们已经有了一个元素列表,如下所示,我们不能将列表直接传递到文字声明中,所以我们必须使用构造函数。
# elems
dict_elems = [(1,2), ('x','y'), (('my','tuple'), ('my','value'))]
set_vals = [1, 'x', ('my','tuple')]# dict/set
d = dict(dict_elems)
s = set(set_vals)
效率最低的实现使用带有构造函数的显式变量声明。应该避免。这种声明策略也将键转换成字符串,如果你不想要更复杂的 dict 键,这并不理想。
d = dict(1=1, x='x')
s = set([1,2])
上述代码的性能不如文字声明的原因是因为在后端,当使用构造函数时,传递的值会创建一个列表,然后该列表被转换为我们想要的数据类型。对于文字声明,python 使用 BUILD_SET 字节码,这绕过了列表的创建,因此速度更快。
所以,使用 **{}**
而不是 **dict()**
或 **set()**
创建字典和集合。
3-集合运算
提示:使用集合获取唯一元素并执行查找。
集合是 python 中最有效的数据类型之一。如上所述,它们利用 hashmaps 使得查找非常高效。它们对于获取列表的独特元素也很有用。
图 python 中的基本集合操作。图片作者。
然而,set 真正的亮点是它们内置的操作符,如图 1 所示。Fluent Python 引用了一个模拟,我们在不同大小的干草堆中寻找 1000 根针。字典、集合和列表的性能表如下所示。
图 2:大海捞针式查找的性能时间— src 。干草堆类型对应于最后 3 列。图片作者。
正如你所看到的,这个列表比 dict 慢了 9000 多倍,并且是为 10000000 个条目而设置的。作为参考,大海捞针数量的代码简单来说就是len(haystack & needle)
。
因此,如果你在做集合逻辑,使用集合。
但是有一种极端的情况——如果你使用 numpy/pandas,使用.unique()
语法对带有数值的数组/序列更有效。如果你正在处理字符串,也就是 python 对象,使用list(set(my_array))
— src 会更有效。
4 —对字典操作有用的函数
提示:使用内置的 dict 函数来处理缺失值和迭代。
下面是一些最重要的字典函数,但是这个列表并不完整。如果有重要的遗漏方法,lmk。
循环
d.items()
返回一系列键值对。这是在 dict 中迭代键和值的最快方法。
d.keys()
和d.values()
分别返回一系列的键和值。它们是迭代 dict 的键或值的最快方法。
处理潜在的空值
d.get(k, default)
返回键k
的值,如果没有找到则返回默认值。注意default
默认为None
。
d.setdefault(k, default)
的操作方式与 get 相同,但如果没有找到k
,则首先插入默认值。
加入字典
d.update(d2)
连接两个字典。重复键的值将被第二个字典d2
覆盖。
5 —后端发生了什么
提示:没关系。
但是,因为我们是好奇而聪明的程序员,所以让我们来看看在引擎盖下发生了什么…
图 3: Python 的 hashmap 逻辑— src 。图片作者。
如你所见,这是一个非常复杂的过程。对于所有意图和目的,您只需要关注基于 hashmap 的数据类型缺乏顺序和唯一性。但是,这里有一些有趣的事实。
- python 中的每个数据不可变数据类型都有自己用 c 编写的哈希函数。
- 任何可散列类型都可以是字典中的一个键。Hashable 被定义为不可变的和与其他对象可比的。测试变量是否可散列的一个好方法是将它传递给 python 的
hash()
函数。 - 如果您创建了自己的数据类型,要使用字典或集合,您必须实现
__hash__
和__eq__
(equality)方法。
感谢阅读!我会再写 27 篇文章,把学术研究带到 DS 行业。查看我的评论,链接到这篇文章的主要来源和一些有用的资源。
Python 函数的 5 个高级技巧
原文:https://towardsdatascience.com/5-advanced-tips-on-python-functions-1a0918017965?source=collection_archive---------5-----------------------
卢西亚诺·拉马尔霍的《流畅的 Python》笔记(第 5-6 章)
你是学了 Java 编程,然后转到 python 的吗?如果你开始使用 OOP,但现在使用 python,这篇文章是为你准备的。
米歇尔·普林在 Unsplash 上的照片
在 Fluent Python 的第 5-6 章中,卢西亚诺·拉马尔霍讨论了传统的面向对象范例在 Python 中并不总是最优的。下面我们将讨论如何利用 python 的函数来编写高效、简洁的代码。
事不宜迟,我们开始吧。
1 —什么是第一类对象?
为了培养一些直觉,让我们首先了解 python 函数是如何工作的。
用最简单的话来说,函数就是一段代码,只有在被调用时才会运行。但是,在 python 中,函数有很多动态功能,允许您像对待对象一样对待它们。
事实上,python 函数实际上被认为是第一类对象,这意味着它们…
- 是在运行时创建的吗
- 可以将赋给数据结构中的变量或元素
- 可以将作为参数传递给函数
- 可以通过函数返回
上面的动态功能允许工程师以有趣和创造性的方式利用 python 函数。
但这还不是全部。Python 有许多有趣的关键字和语法结构,可以让您快速编写高效的代码。下面,我们将从如何利用关键字/语法开始,然后以一个利用函数作为对象的高级示例结束。
2 —使用 Yield 缩短助手函数
提示:利用 **yield**
关键字在不破坏局部变量状态的情况下从函数返回。
好吧,除非你已经熟悉了yield
,否则上面这句话可能听起来像法语。但是,这个技巧非常有用,可以为大多数返回值的帮助函数节省几行代码。
让我们从返回奇数的基本 python 函数开始。
def odd(my_iterable):
odd_numbers = []
for x in my_iterable:
if x % 2 == 1:
odd_numbers.append(x)
return odd_numbers
我们的流程是 1)声明一个列表,2)在列表中添加奇数,3)返回列表。这是一个非常冗长的函数,只能得到一些奇数。让我们看看yield
关键词是否能有所帮助…
def odd(my_iterable):
for x in my_iterable:
if x % 2 == 1:
yield x
嘭!我们只是删除了 3 行代码,增加了可读性,并且根据用例,减少了程序使用的内存。但是它是如何工作的呢?
yield
关键字迭代返回一个值而不停止函数**。我们的函数不是返回一个列表,而是变成一个生成器,返回一个生成器对象,它是 iterable 的一个子类型。一旦运行,并保存到一个变量,我们可以迭代它,转换成一个列表,等等。**
my_generator = odd([1,2,3,4,5,6])
my_generator # <generator object odd at 0x106c62740>list(my_generator) # (1,3,5)
len(list(my_generator)) # 3
[x for x in my_generator] == list(my_generator) # True
好的,我们可以看到为什么这样可以节省代码行,但是它是如何(潜在地)节省内存的。嗯,生成器和生成器表达式是可迭代的对象,直到程序使用它们时才真正被创建。所以,如果你不需要完整的对象,就不要把它保存到内存中。但是,如果您打算多次使用某个变量,那么将它保存到内存中是最有效的方法。
3-使用列表理解
提示:用列表理解代替**map**
**reduce**
**filter**
。********
函数式编程语言使得上面列出的函数变得流行起来。虽然它们在某些 python 包中非常有用,比如 numpy 和 pandas,但是在常规 python 中,你应该尽可能地坚持列出 comps。
为什么?主要原因是可读性。让我们看一行代码,它对奇数调用一个factorial
函数。
**good = [factorial(n) for n in range(6) if n % 2 == 1]
bad = list(map(factorial, filter(lambda n: n % 2 == 1, range(6))))**
假设您对 list comprehension 语法很熟悉,那么第一条语句应该比第二条语句更容易阅读。他们有相似的后端效率。
在 python 的新版本中,reduce
函数被从内置的 python 函数移到了functools
模块中。map
和filter
仍然是内置的,但是随着列表构图的改进,它们的使用已经减少。
所以,如果你想写 pythonic 代码,使用 列表理解式和生成器表达式 。
4 —利用解包函数参数*
提示:使用 **my_func(*args)**
表示未知数量的位置参数,使用 **my_func(**kwargs)**
表示未知数量的关键字参数。
如果您正在创建将被许多其他人使用的代码,比如 API,那么允许传递的参数具有灵活性是一个很好的实践。您可以通过为每个参数指定默认值来做到这一点,或者您可以使用*
来“分解”参数…
**# BAD
def declare_defaults(p1=None, p2=None, p3=None):
print([p1, p2, p3])# GOOD
def positional_arguments(*args):
print(args)# GOOD
def key_word_arguments(**kwargs):
print(kwargs)declare_defaults(p1=1, p2=2, p3=3) # [1,2,3]
positional_arguments(1,2,3) # [1,2,3]
key_word_arguments(p1=1, p2=2, p3=3) # {'p1': 1, 'p2': 2, 'p3': 3}**
**my_func(*x)**
将所有参数存储在一个名为 **x**
的元组中。 **my_func(**x)**
将所有参数存储在一个名为 **x**
的字典中。
当您有大量参数,并且不希望用户在每个函数调用中都传递每个参数时,利用这些信息会非常有用。或者,当您不知道用户将传入多少参数时,也可以应用它。
5 —使用函数重构您的类
提示:尽可能使用函数而不是类。
最后,让我们讨论一个关于程序设计的高级技巧。在许多 OOP 语言中,你被教导使用大量的类。然而,因为 python 函数可以被当作对象来处理,将它们存储在一个类中会损害可读性、效率和开发时间。
让我们看一个例子…
图 1:策略设计模式的简化 UML 图。图片作者。
在图 1 中,我们有一个类结构,它从理论上计算用户在结账时应该得到多少折扣。这是一个经典的 OOP 设计模式,叫做“策略”有三个主要组件:
- 上下文:有/无折扣总价信息。这显示在
Order
类中。 - 策略:确定应该应用哪个折扣的简单逻辑。这显示在
Promotion
类中。 - 具体策略:计算折扣的实际“算法”。这显示在
BulkItem
和PremiumUser
类中。
看起来很直观,对吧?是的,但是因为 python 函数是一等公民,我们可以极大地简化代码…
**# Concrete Strategies
def bulk_item(price):
return price * 0.5def premium_user(price):
return price * 0.75# Strategy
def determine_discount(context, price):
mappings = {'premium_user': premium_user,
'bulk_item': bulk_item} relevant_mappings = {k:v for k,v in mappings.items() if k in context}
return min(discount(price)
for discount in relevant_mappings.values())# Context + Run
price = 1000
context = ['bulk_order','premium_user','female','USA']
print(f'Best discount: {determine_discount(context, price)}')**
通过在determine_discount
函数中使用函数作为对象,我们能够极大地减少这个逻辑的冗长性。而且,如果我们有 100 个折扣,那么mappings
字典可以相应地扩展。
****因此,尽管这是一个过于简单的例子,但是最好的做法是尽量利用函数作为对象,并尽量少用类。此外,实例化类会花费很多时间——使用更轻量级的数据类型可以提高速度。
感谢阅读!我会再写 22 篇文章,把学术研究带到 DS 行业。查看我的评论,链接到这篇文章的主要来源和一些有用的资源。
Python 序列的 5 个高级技巧
原文:https://towardsdatascience.com/5-advanced-tips-on-python-sequences-5b0e09a21a83?source=collection_archive---------11-----------------------
卢西亚诺·拉马尔霍的《流畅的 Python》笔记。
照片由 NASA 在 Unsplash 上拍摄
“66%的数据科学家每天都在应用 Python。”— src
如果你属于那 66%,这篇文章就是为你写的。
我们将讨论卢西亚诺·拉马尔霍的 Fluent Python 第二章的主要内容,其中包括序列例如列表、元组等。
1-列表与元组
提示:列表应该保存相同种类的信息,而元组可以保存不同种类的信息。
从基础开始,让我们讨论列表和元组之间的主要区别。下面我们可以看到一个例子——列表被方括号[]
包围,元组被圆括号()
包围。
my_tuple = (1,'a',False)
my_list = [1,'a',False]
在后端,列表是可变的,但是元组不是。不可变变量通常需要较少的内存,所以尽可能使用元组。
但是,在 Fluent Python 中有一个更深层次的注释。
从语义上来说,最佳实践是在一个元组中存储不同种类的数据,而在一个列表中存储相同种类的数据。注意,元组和列表都支持在同一个变量中使用多种 python 数据类型,但是我们是在概念上讨论变量的类型。
例如,一个元组可以用来存储以下信息:(latitude, longitude, city_name)
。不仅这些不同的数据类型(float, float, str)
,而且它们在概念上也是不同的。另一方面,列表应该只存储纬度、经度、城市名或三者的元组。
# list of [float, float, str]
bad_practice_list = [[39.9526, 75.1652, 'Philadelphia'],
[6.2476, 75.5658m 'Medellín']]# list of tuples
good_practice_list = [(39.9526, 75.1652, 'Philadelphia'),
(6.2476, 75.5658m 'Medellín')]
为了改进 python 代码的组织,应该始终将同类信息保存在一个列表中。元组用于结构,列表用于序列。
2 —解包项目
提示:使用 *****
和 **_**
来改善你的拆包。
解包是访问 iterable 内部值的一种非常流畅和易读的方式。它们在循环、列表理解和函数调用中很常见。
解包是通过给逗号分隔的变量名分配一个类似序列的数据类型来完成的,例如…
x, y, z = (1,2,3)
然而,Fluent Python 进入了一些花哨的解包方法。一个例子是你可以使用*
来解包一个长的可重复项中的“其余”项。当你有一些感兴趣的项目和其他不太重要的项目时,使用星号符号是很常见的。
x, *y, z = [1,2,3,4,5,6,7]
x #1
y #[2,3,4,5,6]
z #7
如您所见,*
操作符可以出现在一组变量的中间,python 会将所有未考虑的值赋给该变量。
但是,我们可以进一步使用星号拆包操作符。您可以使用_
来解包,并且不保存值。当您想要解包一些东西时,这种约定很方便,但是不像上面的例子,您不需要所有的变量。
x, _ = (1,2)
x #1
下划线_
解包操作符的一个用例是如果您正在使用返回多个值的字典或内置方法。
最后,对于顶部的 cherry,我们可以结合两种方法来解包并且不存储“其余”的值。
x, *_ = (1,2,3,5,6)
x #1
3-函数是否返回 None?
提示:如果函数返回 **None**
,则执行就地操作。
很多 python 数据类型都有同一个函数的两个版本,比如下面显示的x.sort()
和sorted(x)
。
x = [3,1,5,2]
x.sort()
x # [1,2,3,5]x = [3,1,5,2]
y = sorted(x)
x # [3,1,5,2]
y # [1,2,3,5]
在第一个使用x.sort()
的例子中,我们执行了一个就地排序,这个排序更有效,需要的内存更少。但是,在使用sorted(x)
的第二个例子中,我们能够保留列表的原始顺序。
一般来说,Python 保留了这种符号。像x.sort()
这样的点运算符经常返回None
并执行就地突变。像sorted(x)
这样将变量作为参数的函数返回变异变量的一个副本,但是保持原始变量不变。
4 — GenExps 与 ListComps
提示:如果你只访问一次变量,就使用生成器表达式。如果没有,使用列表理解。
列表理解 (listcomps)和生成器表达式 (genexps)是实例化序列数据类型的不同方式。
list_comp = [x for x in range(5)]
gen_exp = (x for x in range(5))
如上所示,list comps 和 gene XP 之间唯一的语法差异是括号类型——括号()
用于 gene XP,方括号[]
用于 list comps。
**列表组件被实例化,这意味着它们被评估并保存在内存中。基因 XP 不是。**每当程序需要一个 genexp 时,它将执行计算以评估该表达式。
这就是为什么如果你只使用一次变量,生成器表达式会更好——它们实际上从来没有存储在内存中,所以效率更高。但是,如果您重复访问一个序列或者需要特定于列表的方法,最好将它存储在内存中。
有趣的旁注—你也可以使用列表理解语法创建字典…
my_dict = {k:v for k,v in zip(['a','b'], [1,2])}
5-切片
最后,让我们以切片的快速注释来结束。与解包不同,有时我们希望使用索引来访问 iterable 中的值。切片允许我们通过使用下面的格式来做到这一点:my_list[start:stop:step]
对于那些知道my_list[::-1]
颠倒一个列表顺序却不知道为什么的人(比如我自己),这就是为什么。通过传递一个-1
作为我们的步骤参数,我们反向遍历列表。
现在大多数 python 包都遵循[start:stop:index]
语法。熊猫和熊猫是一些显著的例子。让我们依次看看每个参数…
start
:切片中的起始索引end
:切片中不包含的结束索引step
:您的start
和stop
步进内的步长(和方向)
因此,因为这些值都是可选的,我们可以做各种各样的酷切片…
x = [1,2,3,4]x[1:3] # [2,3]
x[2:0:-1] # [3,2]last = [-1::] # 4
all_but_last = x[:-1:] # [1,2,3]
reversed = x[::-1] # [4,3,2,1]
现在你知道了!流利 Python 第二章的 5 个主要技巧。只剩一节了…
数据科学家的有用笔记
免责声明,我不是超级有资格把我的观点加到这一块的。然而,这些笔记应该非常直观。如果你不同意,请告诉我。
- 列表理解应该总是取代循环。如果循环体很复杂,你可以创建一个函数来完成这些操作。通过将用户定义的函数与列表理解语法相结合,您可以得到可读且高效的代码。如果你需要迭代多个变量,使用
[enumerate()](https://realpython.com/python-enumerate/)
或[zip()](https://www.w3schools.com/python/ref_func_zip.asp)
。 - 在 python 中“最优”并不重要。如果您正在编写生产级代码,可能会有所不同。但是,实际上,在列表上使用元组时,您不会看到大的性能提升。99%的工作是确保您的数据操作步骤合乎逻辑且高效。如果 1%很重要,那么你可以开始担心元组和列表。此外,如果你真的从事高效代码的工作,你可能不会使用 python。
- **最后切片超级爽。**我早就知道
x[::-1]
会反转列表,但直到读了这一章流畅的 Python 才知道为什么。它对熊猫和熊猫都有效!
感谢阅读!我会再写 35 篇文章,把学术研究带到 DS 行业。查看我的评论,链接到这篇文章的主要来源和一些有用的资源。
你可能应该知道的 5 个人工智能故障
原文:https://towardsdatascience.com/5-ai-failures-you-probably-should-know-about-417ddebbc323?source=collection_archive---------12-----------------------
如果你从未失败过,那你就没有活过
由 Unsplash 上的 CHUTTERSNAP 拍摄
把失败往坏的方面想是很正常的,失败是痛苦的。但事实上,对于任何敢于尝试新事物的人来说,失败不仅是不可避免的,而且是必要的。拥抱失败是指数增长的催化剂,因为其中蕴含着宝贵的人生经验。从失败中学习的好处在于……他们不一定是你自己的。
虽然我们知道人工智能(AI)已经很多年了,但它在工业中的应用仍然处于萌芽阶段。失败是意料之中的。有时失败是致命的,而在其他情况下不完全如此,但都一样,人工智能中的裂缝(或错误的实现)被显示出来,公众的信心丧失。
作为从业者,安全地实践人工智能是我们的责任,因此了解技术失败的次数是值得的,然后继续理解它失败的原因以及应该以不同的方式做什么。也就是说,这里有 5 个人工智能失败的例子。
注意:故障不是按时间顺序排列的
排名第一的微软 Tay
在我看来,聊天机器人有潜力成为技术中最有价值的资源之一。计算机理解自然语言能力的进步使得开发模拟类似人类互动的技术成为可能。微软在 2016 年向 Twitter 发布 Tay 时可能也在想同样的事情。
研究小组将 Tay(thinkingAboutYou 的缩写)描述为“毫无寒意的人工智能”,人们开始注意到这一点,特别是当这个机器人开始发表种族主义和贬损言论来回应其他 Twitter 用户时。
由https://twitter.com/tayandyou(https://PBS . twimg . com/profile _ images/712494863573356544/vtxa 3 ywk . jpg)、合理使用、https://en.wikipedia.org/w/index.php?curid=49953711
该机器人最初是为了测试和改善微软对对话中自然语言的理解而发布的。Tay 已经利用其人工智能技能从互动中学习,以便在未来进行更好的对话。不久,Twitter 用户开始瞄准人工智能机器人的弱点,从而操纵它学习深刻的性别歧视和种族主义情绪。
微软不得不在发布后不到 24 小时就关闭了这个机器人。在未来的一份声明中,微软首席执行官塞特亚·纳德拉评论了泰对微软如何对待人工智能和问责制的重要性的“巨大影响”。
阅读更多关于微软 Tay 的信息。
#2 亚马逊的招聘工具
照片由你好我是尼克在 Unsplash
使用人工智能来简化人才获取在这个时代很常见,然而,情况并非总是如此。曾几何时,如果你是一名在亚马逊寻求技术职位的女性,你的机会非常渺茫。
自 2014 年以来,亚马逊一直在开发一种软件,可以自动审查求职者的简历,目的是找到前 5 名人才。直到 2015 年,亚马逊的机器学习专家才发现,他们的人工智能招聘工具正在以一种非性别中立的方式招聘技术角色(即软件开发人员)。
事实证明,亚马逊已经在 10 年间提交给该公司的简历上训练了他们的机器学习算法。大多数简历来自男性,因为这在技术岗位上最常见,算法学习了这种模式,并确定女性不适合技术岗位。
我以前写过数据项目中不同类型的偏见。此外,你可以阅读更多关于亚马逊性别歧视招聘工具的信息。
#3 因弗内斯喀里多尼亚蓟足球跟踪系统
苏格兰足球队因弗内斯·喀里多尼亚蓟足球俱乐部宣布在 2020 年 10 月推出他们新的人工智能足球跟踪技术。这一声明是在两次成功的技术测试活动后宣布的,这两次测试增强了俱乐部的信心。
在与 Ayr United FC 的一场比赛中,AI 球跟踪技术无法实现它在测试运行中的成功。该系统反复将球与巡边员的光头混淆,尤其是当球处于不清楚的区域时(即被球员阻挡或处于体育场创造的阴影中)。
详述事件的短片
事后看来,一些球迷可能会看到这一事件有趣的一面,但在当时,如果你是一名付费客户,无辜地试图在全球疫情中观看足球直播,你会被摧毁。
尽量不要笑;原来这个问题是由于边裁的头和球在视觉上的相似性造成的。其他因素也影响了这项技术,例如摄像机的角度给人的印象是边裁的头在足球场的范围内。
了解更多关于 AI 追球事件。
#4 优步自动驾驶汽车死亡事故
2018 年 3 月 18 日将被记录为历史上纪念伊莱恩·赫尔茨贝格的一天,她是第一个有记录的涉及自动驾驶汽车的行人死亡事件的受害者。
事件发生在美国亚利桑那州的坦佩。赫尔茨贝格在推着一辆自行车穿过一条四车道的道路时,被优步的测试车撞了个半死。优步意识到了自动驾驶汽车的潜在危险,因此他们整合了一个人在回路系统作为备份。然而,报道称安全驾驶员被她手机上的一段声音分散了注意力,事实上已经错过了三分之一的路程。
伊莱恩·赫尔茨贝格事件中所发生的一切
NBC 新闻的一篇报道称,事件的原因是人工智能无法“将一个物体归类为行人,除非该物体靠*人行横道”。
事件发生后,优步暂停了在亚利桑那州的自动驾驶汽车测试,这是可以理解的,因为自 2016 年以来,该地点一直被批准进行此类测试。
阅读更多关于缩短伊莱恩·赫尔茨贝格生命的事件的信息——我向其家人致以最深切的慰问。
#5 Face ID 使用 3D 打印面具进行黑客攻击
如今,面部识别随处可见,但它可能不像我们最初认为的那样安全。研究人员已经能够找到面部识别被欺骗的实例,使用 3D 打印的面具来描述用于认证面部身份系统的面部。
下面的视频提供了对这一人工智能失败的更多见解。
包裹
失败通常是有代价的,而且代价随着失败影响的人越来越多而增加。有时候,我们不必等到自己犯了错误才去学习。其他人在我们之前犯过错误,所以我们可以从中学习和成长,而不必付出和他们一样的代价。也就是说,要学会拥抱失败,因为这是成长的必由之路。
感谢您的阅读!
如果你喜欢这篇文章,请通过订阅我的**每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。**
相关文章
** </5-best-practices-for-feature-engineering-in-machine-learning-projects-e0a4e74fc4fa> **
5 个人工智能误解被揭穿
原文:https://towardsdatascience.com/5-ai-misconceptions-debunked-50487aa3bd28?source=collection_archive---------32-----------------------
戴维·马托斯的照片。
人工智能可能是一个非常令人困惑的话题
问一百个人他们认为人工智能是什么,你可能会得到一百个不同的答案。这是一个宽泛的术语,有几乎无限多的解释和同样多的误解。这正是为什么我的客户会议、研讨会和人工智能讲座不可避免地会有一个两分钟的环节,我会问观众他们如何看待人工智能。毫无疑问,在任何关于人工智能的讨论开始之前,总有一些误解必须得到澄清。
一些人通过反乌托邦的好莱坞电影接触到了人工智能,一些人通过哲学播客,一些人通过深度学习教程接触到了人工智能。事实上,人工智能世界有许多切入点。人们的观点有很大的不同,这取决于他们进入人工智能世界的入口是什么。
少数误解占据了主导地位。这是我最常遇到的关于人工智能的误解,甚至来自技术专家。
人工智能和机器学习是一回事
让我们从最基本的开始。人工智能和机器学习不是同义词。互换使用这两个术语会导致交流错误。
人工智能这个术语没有一致认可的定义,所以我们来分解一下。这个术语由两部分组成:人工和智能。
人造是一个你可能不熟悉的术语,但它非常简单。它是指由人类创造的物体,与自然界中自然生长的物体相对。因此,你穿的衣服,你睡的床,当然,你用来看迷因的手机都是人造的。
那么,智力是一个几乎每个人都熟悉的术语,然而矛盾的是没有人能真正定义它。智力到底是什么?许多比我聪明得多的哲学家和科学家都问过这个问题。本质上,你可以说智力是指感知和理解周围环境的能力。
那人工智能是什么呢?人工智能这一术语一定仅仅意味着某些人造物体具有某种形式的理解能力。
也就是说,你可以将人工智能称为一个巨大的技术集合,它为人工制品(实际上是计算机)提供了理解的能力。AI 是一个宽泛的术语,包含许多技术,其中之一是机器学习。
机器学习是一种用来让计算机自己学习东西的技术,有时在人类的监督下,有时自主学习。
当一个人工智能在 1997 年击败国际象棋世界冠军时,这个人工智能并不是用机器学习开发的。相反,它是根据人类定义的规则运行的:在任何情况下,如果你愿意,都可以列出最佳可能的行动。然而,我认为这是人工智能,因为击败人类玩家的智能是人工智能的一种形式。
"人工智能是一个宽泛的术语,包含许多技术,其中之一是机器学习."
那么,按照这种逻辑,当打印机告诉它的主人它没有墨水了的时候,难道不能认为它在使用人工智能吗?是的,绝对的。不是机器学习,不是自学,也不是特别聪明。但是机器自己清楚地观察、理解和传达它没有墨水了。
AI 和人工通用智能是一回事
这种误解在非技术观众中普遍存在,尤其是那些只通过小说作品接触过人工智能的人。
人工通用智能(AGI)也许是人工智能的终极水*。AGI 是一种人工智能,它可以完成人类可以完成的任何任务,至少和人类一样好。AGI 是小说作品中一个受欢迎的主题。在《终结者》(1984)、《我》、《机器人》(2004)、《她》(2013)等好莱坞电影中看到的人工智能都是 AGI 的例子。
需要澄清的是:AGI 并不存在。当今世界上存在的所有人工智能的例子都是被制造来执行一个特定任务的人工智能(这些人工智能有时被称为模块化人工智能或狭义人工智能)。当企业和政府实施人工智能解决方案时,他们并没有实施终结者式的超级智能生物。他们正在实施为执行一项特定任务而构建的模块化技术。
由马库斯·斯皮斯克拍摄。
AI 仅用于自动化
另一个常见的误解是,人工智能的唯一用例是自动化。事实上,人工智能可以用于两个主要目的:自动化和增强。
- 自动化是将人类从一项活动中移除。
- 增强是在一项活动中赋予人类权力。
自动化和增强是相反的极端,很少有人工智能解决方案是完全自动化或完全增强的。自动化和增强是一个包含四种策略的规模。
- 效率策略,通过自动化优化活动。
- 有效性策略,在这种策略中,活动是无缝的,使得沟通更加容易。
- 专家战略,人工智能赋予决策能力。
- 创新战略,人工智能使创造力成为可能。
增强人工智能的例子包括帮助医生诊断病人、帮助财务顾问做出货币决策或帮助产品开发人员发明新产品的机器。
人工智能是最*发明的
信不信由你,给物体带来智能的想法,今天被称为人工智能,已经存在至少 2000 年了。很久以前,在古希腊,伟大的哲学家们就以文字的形式展示了自动推理。然而,尽管他们可以对这个主题进行几天的理论化,他们却没有办法实现它。
自从有了计算机,人工智能的实际应用就一直在发展。你知道吗,虽然自动驾驶汽车*年来已经成为热门话题,但它是从 20 世纪 20 年代开始研究的。
人工智能*年来成为热门话题有三个原因:
- 用户生成的数据激增。
- 计算机变得更加强大,价格也更加低廉。
- 算法研究取得突破。
人工智能比以往任何时候都大,但这不是一个新话题。
人工通用智能遥遥无期(或者永远不会发生)
正如我前面提到的,人工通用智能(AGI)是人工智能的一种理论形式,它可以做人类可以做的一切事情,或者一样好,甚至更好。当然,AGI 并不存在。
很多人很快就认为 AGI 是科幻小说中的胡说八道。一些人自信地认为 AGI 永远不会发生;其他人则认为 AGI 在几个世纪之外。事实很简单,没有人知道。有些人认为我们将在几十年内发现 AGI,有些人认为需要几个世纪,有些人认为我们永远不会。但是研究人员认真对待这个话题。
如果我们的星球是一年前创造出来的,人类在星球上已经存在了十分钟,工业时代也就两秒钟前才开始。互联网可能只存在了几毫秒。在这么短的时间内,我们所经历的技术进步是惊人的。我个人认为有一天我们可能会发明 AGI,当那一天到来时,我们需要做好准备。这也是生命未来研究所的使命,它非常认真地对待 AGI 问题。
感谢阅读!如果你喜欢这篇文章,你可能会喜欢我的关于人工智能的书:
https://thisisrealaibook.com/
5 个惊人的 NLP 用例添加到您的投资组合中
原文:https://towardsdatascience.com/5-amazing-nlp-use-cases-to-add-to-your-portfolio-bd228346d854?source=collection_archive---------30-----------------------
使用真实数据集
由 Unsplash 上的absolute vision拍摄
为什么是自然语言处理(NLP)?
在进入主题之前,为什么在你的作品集里有一个 NLP 项目很重要?这对你的职业生涯有什么帮助?
生成的文本数据量正以前所未有的速度增长。根据 IDC 的预测,到 2025 年,大约 80%的全球数据将是非结构化的。这将是零售、科技、医疗保健等行业的模式。
过去,组织一直依赖结构化数据来获取见解,而非结构化数据的潜力尚未得到挖掘。但是现在,组织已经开始意识到非结构化数据的价值,并开始从各种来源捕获非结构化数据,如内部支持中心电话记录、社交媒体上的提及、新闻、博客等。
随着技术的进步,以下是一些组织正在寻求的基于 NLP 的用例,
- 风险感知
- 竞争分析
- 聊天机器人
- 市场调查
在这篇文章中,我将分享一些真实世界数据集上的有趣用例,这些用例可用于学习 NLP 概念和向您的投资组合添加新的 NLP 项目。
1.分析推文对比特币价格的影响
最*,我们看到了推文如何推动加密货币的价格。在 Elon Musk 的一系列推文引发推文风暴后,dogecoin 的价格大幅飙升。Twitter 无疑被视为突发新闻的良好来源。如果一个人能够尽早抓住趋势,那么这肯定可以货币化*。(*请注意,这仍有风险)
https://www.kaggle.com/alaix14/bitcoin-tweets-20160101-to-20190329
这是一个 kaggle 数据集,从 2016 年到 2019 年,它有 1600 万条与比特币相关的推文。这个数据集可以与比特币价格结合起来,以检查两者之间的模式和任何关系。
可以在该数据集上实现的一些用例有:
- 寻找推文数量和比特币价格之间的模式
- 使用推文数量来预测比特币价格的每日走势
- 提取情感并检查它是否有助于改进预测
- 为拥有大量追随者的个人资料增加更高的权重,并做出预测
- 识别负面情绪的影响
- 推特风暴、其规模以及对比特币价格影响的持续时间
Twitter 数据不是一个干净的数据源,它通常需要处理,因为它会包含特殊字符和链接。这个项目将帮助你更好地理解 tweet 数据的处理。这个项目可以很容易地超过一个投资组合,这可以很好地作为一个赚钱的机会。
亚马逊评论数据集上的情感分析
亚马逊评论数据集有大约 30 种不同产品类别的客户评论。可以通过下面的链接下载和分析,
这一最新的亚马逊评论数据集于 2018 年发布,包含 1996 年至 2018 年发布的 2.331 亿条客户评论。它包括详细信息,如评论者 id、产品 id、评论文本、评论者姓名、评论的有用性、产品评级和时间戳。
该数据集还包括元数据,用于捕获一些有用的信息,如产品名称、描述、功能、产品价格、相关/类似产品以及产品技术细节。
上面的数据集链接还包含一些 python 脚本,用于读取数据、将其转换为数据框并计算*均评级
下面是可以在这个数据集上执行的一些分析,可以非常有助于您学习 NLP 概念并构建一个良好的基于 NLP 的投资组合。
- 亚马逊上不同产品类别的*均情绪得分
- 根据客户评论的观点,确定每个产品类别中的前 100 个产品
- *均情绪得分、产品价格和产品评级之间的任何相关性
- 正面评价和产品销售排名之间的关系
该数据集的大小可能是压倒性的,因此原始数据集的替代子集也可在同一链接上获得,该替代子集小得多,并且可用于实验和训练目的。
对堆栈溢出问题进行分类
这个数据集从 2016 年到 2020 年有 60,000 个堆栈溢出帖子,它们被分为三类,
- 优质岗位
- 通过社区编辑打开的低质量帖子
- 未经任何编辑就关闭的低质量帖子
https://www.kaggle.com/imoore/60k-stack-overflow-questions-with-quality-rate
文本分类是一种常见的 NLP 用例,在组织中广泛实施。举个例子,
- 电信公司可以使用文本分类将他们的客户支持电话记录分类为不同的问题类别,然后查看细节以获得见解
- 电子商务公司可以利用这一点,根据内容将社交媒体数据分类到他们的产品类别中
- 更传统的用例,将文本分类为正面/负面/中性情绪
因此,解决这个问题不仅会给你的投资组合增加一个项目,还能帮助你了解整个行业中文本分类用例所涉及的方法。
有助于提高 kaggle 文本分类问题的准确性的一些特征是,
- 帖子的字数
- 基于简单或复杂单词使用的帖子的复杂性分数
- 文本矢量化并将其用作一项功能
这里是到 kaggle 笔记本的链接,它有一个不同算法的简单实现来解决这个分类问题。
识别讽刺的句子
识别讽刺对人类来说很容易,孩子们在幼儿园早期就开始理解和使用讽刺。但是对于机器来说,训练它们学会讽刺还是很困难的。理解讽刺对于了解真实的语境是很重要的。
下面的 kaggle 数据集是一个高质量的数据集,用于构建识别讽刺的模型。到数据集的链接是,
https://www.kaggle.com/rmisra/news-headlines-dataset-for-sarcasm-detection
大多数情况下,我们试图在 Twitter 数据上识别讽刺,但很难获得高质量的数据集,讽刺性的推文大多是对推文的回复,因此没有上下文或原始推文,很难识别讽刺。
这个 kaggle 数据集中的讽刺文本基于 TheOnion 的标题,非讽刺文本来自《赫芬顿邮报》。从这两个来源提取的标题都是专业人士写的,因此非常干净,不需要太多处理
建立一个 NLP 模型来识别讽刺性的标题是很好的,使用这个数据集作为训练数据集并建立一个 NLP 模型来识别 Twitter 数据上的讽刺会更好。
假新闻预测
每天都会产生大量的新闻内容,这些内容中有很大一部分是虚假的,随着社交媒体被广泛用于传播新闻内容,任何虚假新闻都很容易快速传播。预测和阻止假新闻的传播非常具有挑战性,但却至关重要。
在像 covid 这样的疫情情况下,我们发现许多关于治疗的误导性消息正在传播,这些治疗可能会危及生命,并可能对社会造成更大的危害。
同样,组织需要检查假新闻,因为这可能会损害他们的声誉。下面的 kaggle 数据集有大约 20,000 条真实和虚假的新闻,这可以用来建立一个预测假新闻的算法。
https://www.kaggle.com/clmentbisaillon/fake-and-real-news-dataset?select=Fake.csv
结束语
NLP 模型有助于从大型非结构化文本数据中提取洞察力。以前,组织依赖结构化数据来获得洞察力,大多数文本数据被直接移动到归档中,从未仔细查看过。但是现在,随着技术的进步,处理文本数据变得更加容易,组织也开始意识到分析文本数据的好处。因此,在你的投资组合中有一个基于 NLP 的项目肯定会对你的职业生涯有更大的帮助。下面是一个 YouTube 视频的链接,我在那里讨论了这些用例,
莎兰的数据科学
保持联系
- 如果你喜欢这篇文章,并对类似的文章感兴趣,在 Medium 上关注我
- 我在我的 YouTube 频道上教授和谈论各种数据科学主题。在这里订阅我的频道。
- 在这里注册我的电子邮件列表获取更多数据科学技巧,并与我的工作保持联系
你可能不知道的 5 个令人惊奇的熊猫特征
原文:https://towardsdatascience.com/5-amazing-pandas-features-you-probably-dont-know-about-5533498aac88?source=collection_archive---------16-----------------------
解释强大的熊猫功能,以提高您的数据分析工作流程。
照片由锡德·巴拉钱德朗在 Unsplash 拍摄
当在你的数据科学或数据分析项目中使用 pandas 时,你有时会发现你希望以前就知道的强大的新功能。以下是我个人的前 5 名。
1.网页抓取
熊猫有一个强大的方法read_html()
从网页上抓取数据表。
假设我们需要国民总收入的数据。它可以在维基百科的数据表中找到。
来源:维基百科
使用 pandas 阅读来自维基百科的所有 HTML 表格非常简单。
import pandas as pd
url = '[https://en.wikipedia.org/wiki/Gross_national_income'](https://en.wikipedia.org/wiki/Gross_national_income')
tables = pd.read_html(url)
结果是一列tables
(即数据帧)。在这个例子中,我们感兴趣的表是第四个表(注意:Python 确实使用从零开始的索引)。
tables[3]
作者图片
需要时,您可以做一些调整。
df = tables[3].droplevel(0, axis=1)\
.rename(columns={'No.':'No', 'GDP[10]':'GDP'})\
.set_index('No')
作者图片
2.激增
使用explode
方法,您可以将列表中的每个元素转换为一行,复制索引值。
cars = pd.DataFrame({
'country': ['Germany', 'Japan', 'USA'],
'brand': [['Mercedes', 'BMW', 'Audi', 'Volkswagen'],
['Toyota', 'Nissan', 'Honda'],
['Ford', 'Chrysler', 'Jeep', 'Dodge', 'GMC']
]
})
作者图片
cars.explode('brand')
3.偏移、差异和百分比变化
这些功能最好用例子来解释。我们首先生成一个包含日期和值的数据帧。
import pandas as pd
import randomrandom.seed(1)n = 14 # two weeks
df = pd.DataFrame(
{'value': random.sample(range(10, 30), n)},
index = pd.date_range("2021-01-01", periods=n, freq='D')
)
作者图片
现在让我们添加一些列来显示shift
、diff
和pct_change
方法的值。
df['shift()'] = df.value.shift() # value previous day
df['shift(7)'] = df.value.shift(7) # value 7 days ago
df['shift(-1)'] = df.value.shift(-1) # value next daydf['diff()'] = df.value.diff() # difference previous day
df['diff(7)'] = df.value.diff(7) # difference 7 days ago
df['diff(-1)'] = df.value.diff(-1) # difference next daydf['pct_change()'] = df.value.pct_change() # pct change previous day
df['pct_change(7)'] = df.value.pct_change(7) # pct change 7 days ago
df['pct_change(-1)'] = df.value.pct_change(-1) # pct change next day
作者图片
4.比较运算符的包装
Pandas 有一些超级方便的比较运算符的简短包装器,如eq
(等于)ne
(不等于)le
(小于等于)lt
(小于)、ge
(大于等于)和gt
(大于)。它们相当于==
、!=
、<=
、<
、>=
和>
。这里有一些例子。
import pandas as pd
import randomrandom.seed(102)df = pd.DataFrame(
{'A': random.choices(range(25), k=10),
'B': random.choices(range(25), k=10),
'C': random.choices(range(25), k=10),
'D': random.choices(range(25), k=10),
'E': random.choices(range(25), k=10)}
)
作者图片
df.eq(15)
作者图片
s = pd.Series([0, 5, 10, 15, 20], index=['A', 'B', 'C', 'D', 'E'])
df.ge(s)
作者图片
5.剪辑和评估
使用clip()
,您可以调整输入阈值的值。它将边界外的值分配给边界值。方法eval
用于评估描述 DataFrame 列操作的字符串。
df = pd.DataFrame({'A': range(1, 6), 'B': range(10, 60, 10)})
作者图片
df.clip(lower=2, upper = 40)
作者图片
df.clip(lower=2, upper=40).eval('C = A + B')
作者图片
最后的想法
Pandas 是一个非常棒的数据分析和数据科学图书馆。它有大量的功能。我强烈建议花些时间来研究一下文档,这样你就不会错过任何一个强大的功能。
你最喜欢的熊猫功能是什么?让我知道你的想法。
https://brinkhuis.medium.com/find-the-topics-your-medium-story-was-curated-into-automagically-f9dbf297d029
每个数据科学家都应该知道的 5 种异常检测算法
原文:https://towardsdatascience.com/5-anomaly-detection-algorithms-every-data-scientist-should-know-b36c3605ea16?source=collection_archive---------0-----------------------
异常检测算法在异常检测中的比较
图片来自 Pixabay
真实世界的数据集通常包含异常或离群数据点。异常的原因可能是数据损坏、实验或人为错误。异常的存在可能会影响模型的性能,因此为了训练稳健的数据科学模型,数据集应该没有异常。
在本文中,我们将讨论 5 种这样的异常检测技术,并针对随机数据样本比较它们的性能。
什么是异常?
异常是数据集中突出于其他数据点的数据点,并且不确认数据中的正常行为。这些数据点或观察结果偏离了数据集的正常行为模式。
异常检测是一种无监督的数据处理技术,用于从数据集中检测异常。异常可以大致分为不同的类别:
- **异常值:**在数据收集中以非系统方式出现的短/小异常模式。
- **事件变化:**从之前的正常行为有系统的或突然的变化。
- **漂移:**数据中缓慢、无方向性的长期变化。
异常检测对于检测欺诈交易、疾病检测或处理任何具有高级别不*衡的案例研究非常有用。异常检测技术可用于构建更强大的数据科学模型。
如何检测异常?
可以使用简单的统计技术(如*均值、中值、分位数)来检测数据集中的单变量异常特征值。各种数据可视化和探索性数据分析技术也可用于检测异常。
在本文中,我们将讨论一些无监督的机器学习算法来检测异常,并进一步比较它们在随机样本数据集上的性能。
**Checklist:
1\. Isolation Forest
2\. Local Outlier Factor
3\. Robust Covariance
4\. One-Class SVM
5\. One-Class SVM (SGD)**
隔离林:
隔离森林是一种无监督的异常检测算法,它使用随机森林算法(决策树)来检测数据集中的异常值。该算法试图分割或划分数据点,使每个观察结果与其他观察结果隔离开来。
通常,异常远离数据点的群集,因此与常规数据点相比,隔离异常更容易。
(图片由作者提供),异常和常规数据点的划分
从上述图像中,可以观察到常规数据点比异常数据点需要相对更多的分区。
计算所有数据点的异常分数,并且异常分数>阈值的点可以被认为是异常。
Scikit-learn 实现隔离森林算法
局部异常因素:
局部异常因子是另一种异常检测技术,它考虑数据点的密度来决定一个点是否是异常。局部异常值因子计算一个称为异常值的异常值,用于测量该点相对于周围邻域的孤立程度。它考虑了局部和全局密度来计算异常分数。
(来源),局部异常值因子公式
Scikit-learn 实现局部异常因子
稳健协方差:
对于高斯无关特征,可以采用简单的统计技术来检测数据集中的异常。对于高斯/正态分布,远离第三偏差的数据点可视为异常。
对于本质上具有所有高斯特征的数据集,可以通过定义覆盖大部分规则数据点的椭圆超球来概括统计方法,并且远离超球的数据点可以被视为异常。
Scikit-learn 使用椭圆包络实现鲁棒协方差
一类 SVM:
常规的 SVM 算法试图找到一个超*面,该超*面最好地分离这两类数据点。对于一类 SVM,我们有一类数据点,任务是预测一个将数据点簇从异常中分离出来的超球。
Scikit-learn 实现一类 SVM
一级 SVM(新加坡元):
带有 SGD 的一类 SVM 使用随机梯度下降求解线性一类 SVM。该实现旨在与内核*似技术一起使用,以获得类似于默认使用高斯内核的[**sklearn.svm.OneClassSVM**](https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM)
的结果。
sci kit-学习用 SGD 实现一级 SVM
基准测试:
在两组样本数据集(行 1 和行 2)上训练 5 个异常检测。
(图片由作者提供),玩具数据集上 5 种异常检测算法的性能
一类 SVM 往往有点过度拟合,而其他算法在样本数据集上表现良好。
结论:
异常检测算法对于欺诈检测或疾病检测案例研究非常有用,在这些案例研究中,目标类别的分布非常不*衡。异常检测算法还通过从训练样本中移除异常来进一步改善模型的性能。
除了上面讨论的机器学习算法,数据科学家总是可以采用先进的统计技术来处理异常。
参考资料:
[1] Scikit-learn 文档:https://sci kit-learn . org/stable/auto _ examples/miscellaneous/plot _ anomaly _ comparison . html
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一小部分会员费,不需要你额外付费。
https://satyam-kumar.medium.com/membership
感谢您的阅读
5 个可怕的数字功能,可以在紧要关头拯救你
原文:https://towardsdatascience.com/5-awesome-numpy-functions-that-can-save-you-in-a-pinch-ba349af5ac47?source=collection_archive---------16-----------------------
避免被 5 个简单的功能困住
JESHOOTS.COM在 Unsplash 上拍照
您的旅程概述
- 设置舞台
- 1 —快速过滤
- 2 —重塑自我,走出困境
- 3 —重组你的形状
- 4 —查找唯一值
- 5 —组合数组
- 包装
搭建舞台
用 Python 做数据科学时,包 NumPy 无处不在。无论你是用 Scikit-Learn 开发机器学习模型,还是用 Matplotlib 绘图,你的代码中肯定会有一些 NumPy 数组。
当我开始学习 Python 中的数据科学时,我对 NumPy 能做什么知之甚少。这些年来,我提高了我的数字技能,并因此成为一名更好的数据科学家。
擅长操作 NumPy 数组可以挽救你的生命…或者至少一个小时令人沮丧的搜索。当事情变得困难时,我在这里给你的五个数字函数可以帮助你🔥
在这篇博文中,我假设您已经安装了 NumPy,并且已经使用别名np
导入了 NumPy:
import numpy as np
我建议在阅读这篇博客之前先看看 NumPy。如果你对 NumPy 完全陌生,那么你可以查看一下 NumPy 的初学者指南或者 NumPy 上的这个 YouTube 视频系列。
1 —快速过滤
您可以使用where
函数根据条件快速过滤数组。假设您有一个表示为一维数组的音频信号:
# Audio Signal (in Hz)
signal = np.array([23, 50, 900, 12, 1100, 10, 2746, 9, 8])
假设您想要删除signal
中所有 Hz 小于 20 的内容。要在 NumPy 中有效地做到这一点,您可以编写:
# Filter the signal
filtered_signal = np.where(signal >= 20, signal, 0)# Print out the result
print(filtered_signal)
>>> np.array([23, 50, 900, 0, 1100, 0, 2746, 0, 0])
where
函数有三个参数:
- 第一个参数(在我们的例子中是
signal >= 20
)给出了您想要用于过滤的条件。 - 第二个参数(在我们的例子中是
signal
)指定了当条件满足时你希望发生什么。 - 第三个参数(在我们的例子中是
0
)指定了当条件不满足时您希望发生什么。
作为第二个例子,假设你有一个数组high-pitch
指示声音的音高是否应该提高:
# Audio Signal (in Hz)
signal = np.array([23, 50, 900, 760, 12])# Rasing pitch
high_pitch = np.array([True, False, True, True, False])
每当相应的high-pitch
变量这么说时,要提高signal
的音调,您可以简单地写:
# Creating a high-pitch signal
high_pitch_signal = np.where(high_pitch, signal + 1000, signal)# Printing out the result
print(high_pitch_signal)
>>> np.array([1023, 50, 1900, 1760, 12])
那很容易😃
2——重塑自我,摆脱困境
通常,一个数组的元素是正确的,但形式是错误的。更具体地说,假设您有以下一维数组:
my_array = np.array([5, 3, 17, 4, 3])print(my_array.shape)
>>> (5,)
这里你可以看到这个数组是一维的。您想将my_array
输入到另一个需要二维输入的函数中吗?在 Scikit-Learn 这样的库中,这种情况经常发生。为此,您可以使用reshape
功能:
my_array = np.array([5, 3, 17, 4, 3]).reshape(5, 1)print(my_array.shape)
>>> (5, 1)
现在my_array
是恰当的二维。你可以把my_array
想象成一个五行单列的矩阵。
如果你想回到一维,那么你可以写:
my_array = my_array.reshape(5)print(my_array.shape)
>>> (5,)
**专业提示:**简单来说,你可以使用 NumPy 函数
squeeze
删除所有长度为 1 的维度。因此,你可以使用squeeze
函数代替上面的reshape
函数。
3-重组你的形状
你有时需要重组你已经拥有的维度。一个例子可以说明这一点:
假设您将一个大小为 1280x720(这是 YouTube 缩略图的大小)的 RGB 图像表示为一个名为my_image
的 NumPy 数组。你的图像有形状(720, 1280, 3)
。数字 3 来源于这样一个事实,即有 3 个颜色通道:红色、绿色和蓝色。
如何重新排列my_image
以使 RGB 通道填充第一维?您可以通过moveaxis
功能轻松实现:
restructured = np.moveaxis(my_image, [0, 1, 2], [2, 0, 1])print(restrctured.shape)
>>> (3, 720, 1280)
通过这个简单的命令,您已经重构了图像。moveaxis
中的两个列表指定了轴的源位置和目的位置。
Pro 提示: NumPy 还有其他函数,比如
swapaxes
和transpose
,它们也处理数组的重构。moveaxis
函数是最通用的,也是我用得最多的一个。
为什么重塑和重组不一样?
照片由普里西拉·杜·普里兹在 Unsplash 拍摄
很多人认为用reshape
功能整形和用moveaxis
功能重组是一样的。然而,它们以不同的方式工作😦
最好的方法是用一个例子:假设你有矩阵:
matrix = np.array([[1, 2], [3, 4], [5, 6]])# The matrix looks like this:
1 2
3 4
5 6
如果您使用moveaxis
功能切换两个轴,那么您会得到:
restructured_matrix = np.moveaxis(matrix, [0, 1], [1, 0])# The restructured matrix looks like this:
1 3 5
2 4 6
然而,如果您使用reshape
函数,那么您会得到:
reshaped_matrix = matrix.reshape(2, 3)# The reshaped matrix looks like this:
1 2 3
4 5 6
reshape
函数只是按行处理,并在适当的时候生成新行。
4 —寻找独特的价值
unique
函数是一个很好的实用函数,用于查找数组的唯一元素。假设您有一个数组,代表从民意调查中抽取的人们最喜欢的城市:
# Favorite cities
cities = np.array(["Paris", "London", "Vienna", "Paris", "Oslo", "London", "Paris"])
然后您可以使用unique
函数来获取数组cities
中的唯一值:
unique_cities = np.unique(cities)print(unique_cities)
>>> ['London' 'Oslo' 'Paris' 'Vienna']
请注意,独特的城市不一定按照它们最初出现的顺序排列(例如,奥斯陆在巴黎之前)。
有了民调,画柱状图真的很常见。在这些图表中,类别是投票选项,而条形的高度代表每个选项获得的票数。要获得这些信息,您可以使用可选参数return_counts
,如下所示:
unique_cities, counts = np.unique(cities, return_counts=True)print(unique_cities)
>>> ['London' 'Oslo' 'Paris' 'Vienna']print(counts)
>>> [2 1 3 1]
unique
函数可以让你避免编写许多烦人的循环😍
5-组合数组
有时,您会同时使用许多阵列。那么将阵列组合成单个“主”阵列通常是方便的。在 NumPy 中使用concatenate
函数很容易做到这一点。
假设您有两个一维数组:
array1 = np.arange(10)
array2 = np.arange(10, 20)
然后您可以用concatenate
将它们组合成一个更长的一维数组:
# Need to put the arrays into a tuple
long_array = np.concatenate((array1, array2))print(long_array)
>>> [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
组合我们的工具
如果您想将array1
和array2
堆叠在彼此的顶部会怎么样?因此,您希望创建一个二维向量,如下所示:
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]]
你可以先用reshape
函数将array1
和array2
整形为二维数组:
array1 = array1.reshape(10, 1)
array2 = array2.reshape(10, 1)
现在您可以使用concatenate
函数中可选的axis
参数来正确组合它们:
stacked_array = np.concatenate((array1, array2), axis=1)print(stacked_array)
>>>
[[ 0 10]
[ 1 11]
[ 2 12]
[ 3 13]
[ 4 14]
[ 5 15]
[ 6 16]
[ 7 17]
[ 8 18]
[ 9 19]]
差不多了…现在您可以使用moveaxis
功能来完成工作:
stacked_array = np.moveaxis(stacked_array, [0, 1], [1, 0])print(stacked_array)
>>>
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]]
照片由 Unsplash 上的 Japheth 桅杆拍摄
厉害!我希望这个例子向您展示了您刚刚学到的一些不同的工具是如何组合在一起的。
包扎
现在,您应该对在一些棘手的情况下使用 NumPy 感到满意了。如果您需要了解更多关于 NumPy 的信息,那么请查看 NumPy 文档。
**喜欢我写的?**查看我的博客文章类型提示、黑色格式、Python 中的下划线和 5 字典提示了解更多 Python 内容。如果你对数据科学、编程或任何介于两者之间的东西感兴趣,那么请随意在 LinkedIn 上加我,并向✋问好
朱莉娅语言的 5 大优点
原文:https://towardsdatascience.com/5-awesome-things-to-love-about-the-julia-language-688d7c403474?source=collection_archive---------1-----------------------
在我看来,Julia 编程语言的 5 大特点让它变得非常棒。
(图片由200 度上的像素点
介绍
我使用(并称赞)Julia 编程语言已经有年了。到今天为止,我已经在 Medium 上写了 346 篇文章,这些文章都是从一篇关于 Julia 语言的文章开始的。在那篇文章中,我谈到了数据科学家在学习 Julia 编程语言之前可能想知道的一些事情。如果你想读这篇文章,你可以在这里找到它:
在我使用 Julia 的经历中,我相信在我使用 Julia 编写的所有模块、项目和研究之后,有很多功能我都觉得非常方便。今天我想展示一些 Julia 语言的很酷的特性,为什么我认为这些特性很棒。在某些情况下,我甚至会提供一些这种语言派上用场的真实例子,然后将它与数据科学和软件工程领域的其他语言进行比较。这将有助于我们更好地理解为什么这是一个伟大的特性,如何使用它,以及与 Julia 相比,这个行业处于什么位置。
就我对这种语言的主观看法而言,我觉得它至少在数据科学领域有很大的发展潜力。让我们详细介绍一下朱莉娅的一些优秀之处,以及它们为什么如此优秀。
№1:语言本身就是书写的。
如果我们参考 Julia Github 库,我们可以看到一个非常有趣的用于 Julia 核心的语言*衡。
(图片由作者提供)
Julia 编程语言是用 69%的 Julia 本身编写的!与大多数其他编程语言相比,这提供了许多优势,因为有些是用 C 或汇编语言编写的,而且通常语言的实际基础几乎不是用语言的实际语法编写的。这意味着像我这样的语言最终用户的一些不同的事情。
- 研究 Julia 中可能没有被很好地记录的部分的实际源代码是非常容易的。
- 如果有人提议对语言进行修改,但对 C、C++或 LLVM 编译器库一无所知,他们仍然可以对语言做出贡献。
- 更疯狂的是,人们甚至可以编写自己的语言版本,用它来代替核心语言。
对于第一点,我一直在开发一个叫做 Jockey.jl 的 Julia 包,Jockey.jl 是我正在开发的 Julia 编程语言的笔记本服务器会话。然而,我设计这个包的初衷是将笔记本放入终端。我只是想,考虑到朱莉娅·REPL 实际上是多么令人敬畏,也许可以在 REPL 的上半部分开一个笔记本会议,然后在它下面开一个常规的朱莉娅·REPL 会议。
当然,这种工作需要我们了解朱莉娅·REPL 的内部结构,以便改变终端的行为。然而,问题是这种语言在基础上没有任何明确的文档。终端模块。你可以在这里查看文档 markdown 文件,它确实很好地实现了 Github 风格的 markdown:
https://github.com/JuliaLang/julia/blob/master/stdlib/REPL/docs/src/index.md
大部分文档是为最终用户准备的,我想这是很重要的,因为我认为人们通常会关心如何使用 REPL,改变按键绑定等,而不是使用软件包来改变终端的功能。幸运的是,因为我能够浏览 Terminals.jl、LineEdit.jl 和 REPL.jl 的源代码,所以我能够获得这个包的一个简单的、有很多错误的版本,并且发布了那个特性。虽然这种使用方式非常酷,但我最终还是放弃了笔记本电脑的这种方式,因为我发现使用起来很麻烦,因为终端和终端的光标以及底部的 REPL 实在是太难管理了。
很酷的是,即使我不知道这种语言的内部,也没有真正研究过这种语言,我仍然能够进入这个包并阅读所有的源代码。即使我除了朱莉娅之外不知道其他语言,情况也是如此。
№2:构造函数中的多重分派
对于 Julia 编程语言来说,多重调度是一个非常明显的优点。Julia 的核心范式围绕着这个多态的概念。也就是说,虽然多重分派在其他编程语言中肯定是可用的,但我真的相信 Julia 编程语言已经完善了多重分派的概念。我在这篇旧文章中详细解释了我为什么这么想:
话虽如此,我想我已经谈了很多关于多重分派的问题,尽管在我看来这是一种很好的编程方式,但我认为在它上面白费力气可能不是最佳的。然而,许多没有使用过 Julia 或者不熟悉 Julia 的人并没有意识到如何通过多重调度来使用构造函数,从而产生一些令人难以置信的结果。考虑以下构造函数:
struct NormalDist <: Distribution
σ::Float64
μ::Float64
N::Int64
end
这是一个常规的构造函数,对注册到 Julia 中的该构造函数的实际调用如下所示:
NormalDist(::Float64, ::Float64, ::Int64)
如果我们用这些值调用分布,我们将得到一个新的 NormalDist 类型的返回。然而,让某人计算标准偏差、*均值,并将观察值的数量放入他们自己的计算机中,这似乎并不是最佳的选择,通常也不是像这样的正态分布类型的工作方式。也就是说,我们可以使用多重分派来编写这个调用的新版本,它将通过构建内部构造函数来调用一个函数:
struct NormalDist <: Distribution
σ::Float64
μ::Float64
N::Int64 function NormalDist(x::Array) N = length(x)
σ = std(x)
μ = mean(x)
new(σ, μ, N, cdf, apply)
end
end
现在我们有两个注册的调用,一个是对构造函数的调用,一个是对内部构造函数的调用,这个函数将返回我们构造函数的新版本,我现在称之为外部构造函数。现在我们有两个调用,一个是之前的常规构造函数,
NormalDist(::Float64, ::Float64, ::Int64)
另一个是我们的新功能:
NormalDist(::Array)
无论何时使用这个函数,另一端的程序员打算调用什么都不重要。如果他们碰巧有标准差、均值和 N,并且提供了这些参数,那么我们将得到类型。如果它们不传递,而只传递数组,那么它们将获得构造函数。我们还可以构建无限个(除了硬件限制之外)内部构造函数,以使我们的构造函数拥有我们可能需要的所有调用。
说到 Julia,最明显的比较总是 Python。尽管在范例和语法上 Julia 略有不同,但这两种语言有相似的市场定位,也许还有相似的目标。在这个正态分布的 Python 版本中,我们改为定义类型,然后与之等价的是我们的 init()函数。
class NormalDist:
def __init__(self, x):
self.N = length(x)
self.σ = std(x)
self.μ = mean(x)
由于我们必须对提供给初始化的东西进行断言,我们会损失这个函数的性能。我们也无法针对最终用户可能想要使用的不同类型进行无限次数的调用。
我们也可以通过内部构造函数传递我们甚至不知道是什么类型的函数和类型。我有一个视频来自于Julia 综合教程 ,它详细介绍了构造函数,你可以通过 ctrl+点击这个文本来观看。这可能会提供更多关于 Julia 中构造函数的信息以及所有的细节,如果你有兴趣学习 Julia,这个系列教程可能是一个很好的起点!
№3: JIT
现在让我们来谈谈真正的 Julia 编译器,以及它的速度。我必须承认——基准测试编程语言有很多细节,坦率地说,比较这些编程语言的基准存在一些根本性的问题。也就是说,我从来不认为基准测试是编程语言速度的终极目标,因为我确信在很多情况下,不同的语言在某些操作上可能会更快。尽管如此,我们仍然可以从基准测试中观察到,Julia 显然是一种相当快的语言。
我必须承认,不可能知道这个 JIT 负责多少。然而,我能说的是,朱丽亚很快。与具有相似语法的语言相比,情况尤其如此。这种语言的速度通常与 C 和 Rust 差不多。在某些情况下,这三者可以在谁最终更好的基准之间交换速度。有些人很惊讶,不相信 Julia 真的比 c 快,但是需要注意的是,这些基准测试不包括包的预编译。
也就是说,尽管如此,事实仍然是朱莉娅很快。这是一个优势,尤其是在数据科学应用程序中,有些应用程序可能会对数据进行大量的观察和操作。
№4: PKG
Julia 还有一个牛逼的地方就是包管理器,Pkg。与我作为程序员使用过的许多其他包管理器相比,Pkg 即使不是最好的,也是其中之一。照这样下去,我希望我可以用 Pkg 作为我整个操作系统的包管理器。包管理器可以很容易地为我们处理所有的依赖关系,可以生成项目目录,并且做得很容易。我认为从包管理器内部处理虚拟环境环境在我看来更理想。
虽然我认为其他语言确实有一些非常棒的包管理器,但我认为 Julia 的包管理器更好。Julia 语言的包管理器和 TOML 设置工作得很好。包和它们各自的依赖项完全由 Pkg 管理,这使得方便成为这个包管理器及其功能的一个关键特性。
举例来说,将这个包管理器与 Node 相比,我认为添加包的方式要好得多。通常,在 node 中,您会在项目目录中调用 npm,这可能会与一些项目有些混淆,因为有时这不是主目录。与 Python 进行同样的比较,环境要难得多,而且远不如 Pkg 包那样容易管理。能够用 Pkg 管理包和环境,并把 Pkg 作为一个常规的 Julia 包使用,这意味着控制 Pkg 做不同的事情有很大的灵活性。
第五名:REPL
我想分享的最后一个朱莉娅的特点是朱莉娅的 REPL。谈到编程语言的 REPL,当然有一些可取的选择。Python 的 REPL 是一个体面的 REPL,尽管它有点极简主义。在我体验之前,我最喜欢的 REPL 可能是 Steel Bank comm Lisp(SBCL)REPL,因为我发现使用保存的状态保持数据完整的声明性和功能性是一个非常棒的特性。也就是说,朱莉娅凭借其互动和动态的 REPL 彻底颠覆了 REPL。
正如我在 1 中提到的,我已经处理了 REPL 的源代码和类型。REPL 非常灵活,有很多不同的功能。在一个正常的 REPL 工作场景中,搜索、列出目录,所有这些事情有时是不可能的,或者需要编程语言中的方法调用。对于浏览文件或查看环境来说,一遍又一遍地调用 cd("dir ")和一些 LS 方法是极其乏味的。Julia 通过提供一个 Bash REPL 来解决这个问题,可以使用;朱莉娅·REPL 的来信。
julia > ;
shell > ls
更重要的是,Pkg 也有自己的 REPL,它可以解析常规的 Pkg 命令和参数来添加和源包。考虑下面的 REPL 会话:
([@v1](http://twitter.com/v1).6) pkg> activate Jockey
([@v1](http://twitter.com/v1).6) pkg> activate Jockey
Activating environment at `~/dev/Jockey/Project.toml`shell> cd Jockey
/home/emmac/dev/Jockeyshell> ls
bin config Project.toml routes.jl test
bootstrap.jl Manifest.toml public src usershell> cd src
/home/emmac/dev/Jockey/srcshell> ls
core Jockey.jl ServerControllershell> nano Jockey.jlshell>
(图片由作者提供)
能够以我习惯的传统方式处理目录,同时处理包和文件,这真是太棒了。感觉非常流畅,感觉这是在 REPL 工作的一种非常快捷的方式。每当我们将它与其他不包含这些特性和替代复制器的乏味复制器比较时,情况尤其如此。
结论
Julia 是我最喜欢的编程语言,对于任何开发人员来说都是一个极好的选择。如果你对科学计算感兴趣,我强烈建议你学习这门语言,因为它对这项任务特别有用。朱莉娅有很多优点,但这仅仅是我认为不可思议的五个。如果你想了解更多关于 Julia 的知识,你可以访问 Julia 语言网站:
http://julialang.org/
非常感谢您的阅读,我希望关于 Julia 语言的一些令人敬畏的事情可能足以激发一些新的学习。我认为 Julia 是一种非常棒的语言,这就是为什么我喜欢谈论和分享它的特点,因为这是这种奇妙的语言应该得到的欣赏。祝你有美好的一天!
每个数据科学家都应该使用的 5 项 AWS 服务
原文:https://towardsdatascience.com/5-aws-services-every-data-scientist-should-use-1fdbf9a784d2?source=collection_archive---------7-----------------------
图像来源
亚马逊网络服务(AWS)提供了令人眼花缭乱的云服务,从众所周知的弹性计算云(EC2)和简单存储服务(S3)到*台即服务(PaaS)产品,几乎涵盖了现代计算的每个方面。
具体来说,AWS 提供了一个成熟的大数据架构,其服务覆盖了整个数据处理管道,从接收到处理和预处理、ETL、查询和分析,再到可视化和仪表板。AWS 让您可以无缝、轻松地管理大数据,而无需设置复杂的基础架构或部署 Spark 或 Hadoop 等软件解决方案。
在本文中,我将介绍五种 Amazon 服务,每一种都涵盖了现代数据科学工作流的一个基本元素。
1.亚马逊电子病历
亚马逊 EMR 托管集群*台消除了运行 Apache Hadoop 和 Spark 等大数据框架的大部分复杂性。您可以使用它来处理和分析 AWS 资源上的大数据,包括 EC2 实例和低成本 spot 实例。亚马逊 EMR 还允许您在 AWS 数据库(如 DynamoDB)和数据存储(如 S3)之间转换和迁移大数据。
储存;储备
存储层中有各种文件系统,具有不同的存储选项,包括:
- **Hadoop 分布式文件系统(HDFS)——**一个适用于 Hadoop 的可扩展的分布式文件系统,可跨集群中的实例存储多个数据副本。这确保了如果一个实例失败,数据不会丢失。HDFS 提供了临时存储,您可以使用它来缓存工作负载的中间结果。
- **EMR 文件系统(EMRFS)——**提供直接访问存储在亚马逊 S3 的数据的功能,类似于 HDFS。S3 或 HDFS 都可以用作集群的文件系统,但亚马逊 S3 通常用于存储 I/O 数据,而 HDFS 则用于存储中间结果。
数据处理框架
数据处理框架是处理和分析数据的引擎。框架可以在 YARN 上运行,也可以独立管理资源。不同的框架具有不同的功能(例如,批处理、流、交互式分析、内存处理)。您选择的框架会影响您的应用程序用来与正在处理的数据进行交互的接口和语言。
Amazon EMR 支持的主要开源框架有:
- Hadoop MapReduce —分布式计算的编程框架。您提供 Map 和 Reduce 函数,它处理编写分布式应用程序所涉及的所有逻辑。使用 Map 函数将数据映射到中间结果,使用 Reduce 函数将它们合并并生成最终输出。
- Apache Spark —用于处理大数据的编程模型和集群框架。它是一个高性能的分布式处理系统,通过内存缓存处理数据集,通过有向无环图处理执行计划。
Amazon EMR 允许您启动集群、开发分布式处理应用、向集群提交工作并查看结果,而无需设置硬件基础架构、部署和配置大数据框架。
2.AWS 胶水
AWS Glue 是一个方便数据管理的提取、转换和加载(ETL)服务。它得到全面管理且经济高效,允许您对数据进行分类、清理、丰富和传输。AWS Glue 是无服务器的,包括一个数据目录、一个调度程序和一个自动生成 Scala 或 Python 代码的 ETL 引擎。
AWS Glue 处理半结构化数据,提供可在 ETL 脚本中使用的动态框架。动态框架是一种数据抽象形式,您可以使用它来排列数据。它们提供了模式灵活性和高级转换,并且与 Spark 数据帧兼容。
AWS Glue 控制台允许您发现数据源、转换数据和监控 ETL 过程。您还可以使用 AWS Glue API 从 AWS 服务或其他应用程序访问 Glue。
您可以指定希望 AWS Glue 执行的 ETL 任务,以便将数据从源移动到目标。您可以设置作业来响应您定义的触发器,也可以按需运行它们。要转换数据,可以通过控制台或 API 提供脚本,或者使用 AWS Glue 自动生成的脚本。您可以定义爬网程序来扫描数据存储中的源,并用元数据填充数据目录。
3.亚马逊 SageMaker
这种完全托管的 MLOps 解决方案允许您构建和训练机器学习(ML)模型,并轻松地将它们直接部署到生产环境中。您可以使用 Jupyter notebook 实例轻松访问数据源,而无需管理服务器。
SageMaker 提供针对分布式环境中的大数据优化的内置 ML 算法,并允许您带来自己的定制算法。使用 SageMaker 控制台或 SageMaker Studio 将您的模型部署到一个可伸缩的安全环境中。与大多数亚马逊服务一样,数据培训和托管的成本根据实际使用情况计算,没有前期费用或最低费用。
要训练您的模型,您需要创建一个训练作业,包括以下详细信息:
- 存储培训数据的 S3 存储桶的 URL
- 在哪里存储输出
- 计算资源(ML 计算实例)
- 在 Amazon 弹性容器注册表(ECR)中存储训练代码的路径。这可以是内置算法之一,也可以是您自定义的 Python 代码。
最后,一旦训练作业正在运行,您就可以使用 SageMaker 调试器来调优训练数据、参数和模型代码。
4.亚马逊 Kinesis 视频流
许多由组织创建和管理的内容正在向视频转变,这就产生了处理和分析视频内容的需求。亚马逊 Kinesis Video Streams 是一项完全托管的服务,用于向 AWS 云传输直播视频,实时处理视频,并执行面向批量的分析。
您可以使用该服务来存储视频数据,在视频内容上传到云时实时访问视频内容,并监控直播流。
Kinesis 视频流允许您从数百万台设备中捕捉大量实时数据。这包括视频和其他数据,如热成像和音频数据。您的应用程序可以低延迟地访问和处理这些数据。您还可以将 Kinesis 与各种视频 API集成,以对视频内容进行额外的处理和处理。Kinesis 可以配置为在指定的保留期内存储数据,并对静态数据进行加密。
以下组件相互作用:
- 制作者— 为视频流提供数据的来源。这可以是生成视频或非视频视听数据的任何设备。
- Kinesis 视频流 —支持实时视频数据的传输,并使其可实时或临时或批量传输。
- 消费者— 数据的接收者,通常是用于查看、处理或分析视频数据的应用程序。消费者应用程序可以在 Amazon EC2 实例上运行。
5.亚马逊 QuickSight
这是一项完全托管的基于云的商业智能(BI)服务。 Amazon QuickSight 结合了来自多个来源的数据,并将其呈现在一个仪表盘中。它提供了高级别的安全性、内置冗余和全球可用性,以及可用于管理大量用户的管理工具。您无需部署或管理任何基础架构,即可立即投入运行。
您可以从任何移动或网络设备安全地访问 QuickSight 仪表盘。
您可以使用 Amazon QuickSight 访问数据,为分析做准备,并将准备好的数据作为直接查询或保存在 SPICE 内存中(QuickSight 的超快速并行内存计算引擎)。要创建新的分析,您需要添加现有的或新的数据集;创建图表、表格或见解;使用扩展功能添加变量;并将其作为仪表板发布给用户。
结论
在本文中,我讨论了实现现代数据科学项目基本功能的 AWS 服务:
- 亚马逊 EMR — Hadoop 和 Spark 即服务,无需复杂设置即可在任何规模运行。
- AWS Glue —半结构化数据的无服务器 ETL 引擎。
- 亚马逊 sage maker——机器学习盒子,让你组装机器学习管道,并将其部署到生产中。
- 亚马逊 Kinesis 视频流——让你处理和分析视频数据,这是大多数组织都在争相掌握的新数据源。
- Amazon QuickSight —快速简单的可视化和仪表盘,没有复杂的集成。
我希望这将有助于您评估云在您的数据科学之旅中的作用。
5 个初学者友好的机器学习项目
原文:https://towardsdatascience.com/5-beginner-friendly-machine-learning-projects-3475ad85167a?source=collection_archive---------12-----------------------
千里之行始于足下
Jukan Tateisi 在 Unsplash 上拍摄的照片
应用是最好的学习方法。有许多书籍、博客、视频等。机器学习及其应用。成为这类内容的连续消费者很容易让你陷入一个陷阱,以为你离能力越来越*了,但事实上你并没有。
知道你是否理解了机器学习的应用方面的秘密很简单。为自己实现。如果你不能,这并不意味着你是愚蠢的,这只是意味着你的知识有差距,因此你必须回去学习。
真正的理解来自实施,失败,从失败中学习,再实施。
这是有经验的从业者建议初学者尽快开始项目的众多原因之一。项目工作的另一个理由是曝光。在项目中工作,尽可能接*现实世界中正在解决的问题,会让初学者很好地理解在现实环境中工作是什么样的。
知道从什么项目开始会很有挑战性,所以这里有一些想法:
#1 解决个人问题
我们的生活中都有问题。面对我们的问题通常是一个巨大的成长机会,但由于我们天生害怕失败,这可能会令人生畏。能够感受到恐惧并继续前进对于我们自己的生活来说是一项非常有价值的技能,我们可以通过使用我们的机器学习技能来让它变得有趣。
能够发现问题并将其转化为机器学习问题本身就是一种技能,因此我个人总体上更喜欢这种方法。解决你自己发现的问题显示了你的能力范围,因为根据你的角色,你可能会从事一些你不需要做的工作。
例如,在生产中部署和监控机器学习模型可能需要成为您作为 ML 工程师的核心能力的一部分,但构建您自己的项目将为您提供关于 ML 模型管道中其他领域的重要见解,如数据采集。
#2 从头开始编写机器学习算法
我记得有一天我的直线经理让我谈谈决策树——不是因为它有用,他只是对 ML 方法感到好奇。长话短说,我被难住了。我说了一大堆废话,这让我很困扰,因为在我读到决策树之后,我非常确定我明白了它是如何工作的。
我对各种机器学习算法的最大理解来自于我从零开始的算法系列。我的想法是学习每种算法,从头开始编写代码,然后将我的实现与 Scikit 提供的实现进行比较——了解我的表现。
https://github.com/kurtispykes/ml-from-scratch
这个阶段发展了我对各种机器学习模型背后的机制的理解,我学会了如何将数学公式转化为代码。
我给开始使用这种方法的人的唯一一点建议是,试着从尽可能简单的开始,然后逐步积累。例如,从实现线性回归开始,然后将线性回归模型扩展到逻辑回归模型。
#3 带 MovieLens 的推荐引擎
YouTube、亚马逊和网飞都是应用推荐引擎为最终用户创造价值的典范。当我们访问某些网站时,期望有某种程度的个性化是很常见的。因此,推荐系统已经变得非常流行,了解它们可能是特别有趣的。
MovieLens 是一个已知的数据集,这意味着如果你遇到困难,网上有许多实现可以帮助你。该数据集由 162,000 名用户的 62,000 部电影组成。我过去对这个数据集做过一些工作,你可以把它作为一个起点。
https://github.com/kurtispykes/recommender_system
#4 假新闻检测
每当我听到“假新闻”这几个字,我都会不由自主地想起唐纳德·特朗普。虽然我不同意他的许多观点和意识形态,但他对假新闻的厌恶多少是有道理的。
GIF 由@snl 在 GIPHY 上
随着如此多的人通过社交媒体等联系在一起,假新闻可以像野火一样传播,而且它经常这样做。辨别假新闻比以往任何时候都更加重要,因此脸书已经创建了自己的假新闻检测器,从人们的新闻提要中过滤假新闻。利用机器学习和自然语言处理,您可以构建自己的假新闻分类器来检测假新闻。
#5 波士顿房价预测
波士顿房价数据集是一个非常受欢迎的资源,已被用于基准算法。该数据包含由美国人口普查局收集的有关波士顿地区住房的信息。最初,它是由 Harrison d .和 Rubin feld d . l .出版的《享乐价格和对清洁空气的需求》,J. Environ。经济学与管理学,第 5 卷,81–102 页,1978 年。
托德·肯特在 Unsplash 上的照片
房子的价格取决于各种因素(即房间数量、位置、离学校的远*等)。使用 ML 是揭示潜在模式和基于各种特征估计属性价值的好方法。
在进行这个项目时,你可能会决定收集更多的数据,并将预测扩展到波士顿以外的房子。
包裹
我绝对相信这篇文章中分享的项目想法有利于发展你的直觉,这是非常必要的。然而,说到被录用,我相信如果你想脱颖而出,你应该做得更多一点。这并不一定意味着要做更多的项目。相反,我会建议专注于做 1 到 2 个项目,并把它们做好。
我是 Vin Vashista 在 YouTube 上的视频的超级粉丝。如果你有兴趣让你的项目更上一层楼,我强烈建议你看看他关于建立独立数据科学项目的视频,这些项目会让你被录用。
感谢阅读!
如果你喜欢这篇文章,请通过订阅我的免费 每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。
相关文章
</5-ideas-for-your-next-nlp-project-c6bf5b86935c> https://neptune.ai/blog/best-practices-for-data-science-project-workflows-and-file-organizations
Python 中的 5 个最佳 GUI 库
原文:https://towardsdatascience.com/5-best-gui-libraries-in-python-c1cfcbdb7096?source=collection_archive---------21-----------------------
用 Python 制作 GUI 的一些最佳应用程序的比较
(src =https://pixabay.com/images/id-1895383/
介绍
对于数据科学等应用程序,Python 是最受欢迎的选择之一。它在 web 开发领域也非常流行。鉴于 Python 的声明性和脚本语言分类,这两个应用程序看起来很容易。然而,Python 确实有一个生态系统来促进更多的应用,而不仅仅是它所应用的标准应用。
这些学科中有一个相当广泛的生态系统,那就是软件开发。当然,我们已经习惯了在一些软件中使用 Python,但是通常这种语言并不用于为普通用户编写在他们的系统上运行的应用程序。这是因为 Python 不是一种编译语言,因此很难从 Python 应用程序中获得编译后的二进制文件。然而,我们仍然可以使用为传统软件工程创建的库来增强我们的开发体验。我们可以用于此目的的一些模块的一个例子是图形用户界面,或 GUI,框架。我们甚至可以通过数据科学做到这一点,这非常令人兴奋!今天我想比较一些我最喜欢的 Python 语言的图形用户界面模块。
№1:基维
这个列表中我最喜欢的模块之一是 Kivy。Kivy 是一个很好的框架,因为它比这个列表中的许多其他选项更加通用。你甚至可以用 Kivy 开发手机应用!用户界面也很漂亮。但是,我要说的是,那种美颜的定制相当乏善可陈。虽然你可以用这个模块创建一个很棒的应用程序,但很难让它看起来像你自己的,而不只是像其他人的 Kivy 应用程序。
使用 Kivy 的最大缺点可能就是它有多大。Kivy 里面有很多东西要打开。这个包包含了很多看起来不太必要的东西,所有的子模块都让文档有点混乱。与列表中的其他选项相比,我认为 Kivy 可能是最不友好的。虽然我可以肯定地说它是构建 GUI 的一个很好的库,但我也要指出,这个库有时会有点让人不知所措,尤其是对初学者来说。
第二名:Gtk
如果你像我一样,并且你碰巧喜欢 Gnome 桌面环境,那么你可能听说过 Gtk。Gtk 是一个用 C 编写的跨*台 GUI 框架。Gtk 的伟大之处在于它跨越了跨语言的障碍,是为 C、Vala 和 Python 以及其他选项而构建的。
这意味着关于 Gtk 库的知识可以从 Python 移植到其他选项中,例如 c。这可以为您提供一个可靠的选项,用 Python 构建应用程序的原型,然后编写一个用 c 编译的版本。我认为 Gtk 是这个列表中最可靠的选项之一,因为它的 API 非常容易使用,它有很好的文档,并且它的包本身是值得尊敬和经过验证的。
然而,关于 Gtk 需要注意的一点是,Gtk 世界中的一切都是标准化的。最终,定制取决于最终用户的个人 Gtk 主题。当涉及到与其他操作系统一起工作时,这个库也不是那么通用。举例来说,虽然让 Gtk 在 Windows 上工作是可能的,但是这比这个列表中的其他例子要复杂得多。这个库当然有缺点,但是我经常用它来编写 GUI 来控制我自己的东西,因为我个人使用 Gnome 和 Linux。然而,当要写一些与他人分享的东西时,Gtk 有时可能不是最好的解决方案。
№3: PyQT5
QT5 在很多方面和 Gtk 库的地位差不多。它还被用作桌面环境的 Linux 标准,最常与 KDE 一起使用,它几乎和后者一样古老和久经考验。我要说的是,PyQT5 的文档与这个列表中的许多其他文档相比非常突出。文档写得很好,功能齐全,使得 QT5 成为最容易使用 Python 的 GUI 框架之一。
这个 QT5 绑定也为所有支持 QT5 的*台提供了足够的支持。Gtk 的情况就不一样了,它的软件没有 QT5 或 Kivy 那么通用。与 Kivy 一样,QT5 也能够开发移动应用程序。总的来说,这个包很像 Kivy,继承了它许多令人惊奇的特性,但是也保留了这个库的一些问题。一个受欢迎的区别是 PyQT5 比 Kivy 更容易接*,也没有 Kivy 复杂。
№4: PySimpleGUI
这个列表中一个有趣的解决方案是 PySimpleGUI。GUI 编程可能相当复杂,但在许多情况下,它真的不需要如此复杂!PySimpleGUI 简化了 Tkinter、Remi、Wx 和 QT5 库中的东西。使用这个模块的好处是,它将比使用列表中的任何其他解决方案容易得多。虽然它只实现了 GUI 界面的一个子集,但我认为对于那些希望看到更容易理解的东西的人来说,它是值得添加的。我认为这对于那些想开发一个应用程序来快速控制 Python 的人来说也是很棒的,就像我个人使用的例子一样。
№5: Tkinter
Tkinter 是用 Python 编程 GUI 的精华库。这个库被认为是用这种语言开发 GUI 的标准。该模块实际上通常随标准 Python 安装一起分发。虽然这是一个相对基础的框架,但我认为它确实值得一看,当然这取决于你的项目。
像 PySimpleGUI 和 Gtk 一样,我认为这将是构建快速 GUI 来做某事的另一种选择。它非常容易使用,很多人都用过。它绑定到 Tk 库,这是一个在软件开发中已经使用了很长时间的选择。与 Gtk 之类的东西相比,它也是一个非常通用的选项,因为它可以轻松地在所有*台上运行。
结论
GUI 当然是一个有用的东西。虽然 Python 没有经过编译,所以不太可能用这种语言编写一个全功能的应用程序来发布,但它总是让事情快速运行的一个很好的选择。这也展示了 Python 构建应用程序原型的能力。由于库最终通常驻留在 C 生态系统中,所以您可以用 Python 来验证应用程序的概念,然后再使用 C 来完成它。
这些图形用户界面当然也可以应用于数据科学!过去,我一直使用 GUI 来处理模型、数据和底层硬件系统。我认为,当您想为自己创建一个使用这些技术的应用程序时,潜力是无限的。感谢您的阅读!
机器学习项目中特征工程的 5 个最佳实践
原文:https://towardsdatascience.com/5-best-practices-for-feature-engineering-in-machine-learning-projects-e0a4e74fc4fa?source=collection_archive---------15-----------------------
改善您的机器学习体验
丹尼尔·切卡洛夫在 Unsplash 上拍摄的照片
当处理一个新的机器学习问题时,没有办法从一开始就知道解决方案是什么,除非尝试和测试各种不同的实验。随着时间的推移,从业者已经实现了各种不同的技术,以查看在大多数机器学习项目中什么有效,什么无效。由此,当在机器学习管道中执行特征工程步骤时,我们已经能够生成一组最佳实践。
请注意,这些最佳实践中的每一个可能会也可能不会改进您对每个特定问题的解决方案,但是它们不太可能对最终的结果造成极大的损害。
#1 生成简单的特征
首次开始建模过程时,尝试生成尽可能多的简单特征。简单的意思是,尽量生成不需要很长时间编码的特性。例如,不要训练 Word2vec 模型,而是从实现一个简单的单词包开始,它用最少的代码生成数千个特性。其思想是,您希望在开始时使用任何可测量的东西作为特征,因为没有明确的方法可以提前知道一个或多个特征的组合是否对预测有用。
# 2 IDs 可以是特性(需要时)
将 ID 作为特性集的一部分可能听起来很傻,因为唯一的 ID 可能对模型的泛化贡献不大。然而,包含 IDs 使从业者能够创建一个在一般情况下有一个行为而在其他情况下有不同行为的模型。
例如,假设我们想要根据描述某个位置的一些特征来预测该位置。通过将位置的 id 作为功能集的一部分,我们将能够为一个一般位置添加更多的训练示例,并训练模型在其他特定位置表现不同。
#3 降低基数(如果可能的话)
一般来说,如果我们的某个分类特征有许多不同的唯一值(比如说超过 12 个),那么只有当我们希望模型根据该特征表现出不同的行为时,才应该使用该特征。例如,在美国有 50 个州,因此如果您希望模型的预期行为在加利福尼亚是一种方式而在佛罗里达是不同的,您可以考虑使用名为“states”的特性。
另一方面,如果我们不需要根据“States”特性表现不同的模型,那么减少“States”特性的基数会更好。
我们将在另一篇文章中介绍这方面的技术。
#4 小心计数
在某些情况下,随着时间的推移,计数大致保持在相同的范围内——如果文档长度不随着时间的推移而增长或收缩,单词包(BoW)就是这种情况。
计数可能导致问题的实例。以这样一个场景为例,我们有一个功能,可以监控一个用户自从订阅了一项服务后所拨打的电话数量。如果提供订阅服务的企业已经存在了很长时间,很可能他们会有一些在最*的订户之前很久就订阅的订户,因此与最*的订户相比,他们可能已经打了大量的电话。
随着数据的增长,今天不太频繁的值将来可能会变得更频繁,因此,重新评估这些特性非常重要。
#5 进行功能选择(必要时)
以下是仅在绝对必要时才执行特性选择的一些理由;
- 模型必须是可解释的,所以最好保留最重要的特征
- 有严格的硬件要求
- 没有太多时间来执行大量实验和/或为生产环境重建模型
- 在多个模型训练回合之间有一个预期的分布转移
包裹
我们并没有涵盖所有的最佳实践——正如标题中提到的,我只涵盖了 5 个。好奇的读者应该考虑购买机器学习工程,这本书是这篇文章的灵感来源。机器学习工程是安德烈·布尔科夫写的,他是《T4这本百页机器学习书籍 的作者,我向任何寻求提高机器学习技能的人强烈推荐它。
注意:点击上面的图书链接,你将通过我的会员链接被导向亚马逊。我还集成了地理链接,所以如果你不在英国,你会被自动引导到你当地的亚马逊商店。
感谢阅读!
如果你喜欢这篇文章,请通过订阅我的免费**每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。**
相关文章
** </7-common-gotchas-of-data-projects-62e8646552f2> [## 数据项目的 7 个常见问题
towardsdatascience.com](/7-common-gotchas-of-data-projects-62e8646552f2)**
2021 年使用的 5 个最佳云数据库
原文:https://towardsdatascience.com/5-best-public-cloud-database-to-use-in-2021-5fca5780f4ef?source=collection_archive---------9-----------------------
亚马逊 DynamoDB,谷歌 BigQuery,Azure SQL Server,Azure Cosmos DB,亚马逊红移
来源: Shutterstock
2012 年,亚马逊发布了第一个云数据库 DynamoDB,从此改变了数据库格局。从那以后,云数据库在采用和创新方面经历了飞速的增长。随着整个软件开发行业转向云原生开发,云数据库将在未来变得越来越重要。Gartner 预测,到 2022 年底,75%的数据库将迁移到云:
https://www.gartner.com/en/newsroom/press-releases/2019-07-01-gartner-says-the-future-of-the-database-market-is-the
为什么云数据库越来越受欢迎?在数据库技术方面,公共云数据库与其他 SQL 或 NoSQL 数据库没有什么不同。然而,公共云数据库的关键卖点在于数据库管理和扩展。
在传统的 SQL 数据库和许多 NoSQL 数据库中,应用程序所有者管理数据库,包括复制、分片、备份、恢复和扩展。但是在云数据库中,云提供商管理数据库。
大多数云原生数据库除了基本的数据库管理系统之外,还提供以下特性:
- 通过托管分区/分片实现水*扩展。
- 自动备份和恢复。
- 保证 SLA 的高可用性。
- 跨数据中心复制。
- 支持不同的一致性级别(强一致性、最终一致性)。
- 云原生。
- 支持多模式。
- 通过全局分布将数据移动到边缘。
- 无服务器。
- 行星尺度。
尽管主流的 SQL 和 NoSQL 数据库现在正试图改进这些特性,但它们并不是为满足这些需求而从头开始构建的。
在本文中,我将根据以下标准对五个最受欢迎的云原生数据库进行排名:
- 关键特征
- 流行
- 趋势
- 主流用途
- 美好未来
1.亚马逊 DynamoDB
在 2004 年 12 月的圣诞节促销期间,Amazon 痛苦地认识到,集中、强大、一致的 RDBMS 无法处理 Web 级的应用程序负载。由于严格的一致性模型、关系结构和两阶段提交,传统的 SQL 数据库无法提供 Amazon 所寻求的高可用性和水*可伸缩性。亚马逊工程团队开发了一个新的 NoSQL 数据库 DynamoDB,并于 2007 年在他们的 Dynamo 论文中发布了他们的发现。亚马逊发电机纸在后来的 NoSQL 数据库如 Cassandra,Riak 的发展中起到了至关重要的作用。
虽然 DynamoDB 被用作亚马逊购物车应用的主要数据库,但它在 2012 年才公开。此后,DynmoDB 成为最受欢迎的公共云数据库和最受欢迎的 AWS 服务之一。
5 个关键特征
- 这是一个基于键值和文档的 NoSQL 数据库。
- 这是一个全面管理的、多区域、多主、高可用性的数据库。
- 它是为网络规模的应用而设计的。它每天可以处理超过 10 万亿个请求,并支持每秒超过 2000 万个请求的峰值。
- DynamoDB 加速器(DAX)提供了一个完全托管的内存缓存。
- 凭借其多区域复制功能,它可以在任何规模下提供个位数毫秒级的响应时间。
何时使用 DynamoDB
- 当 AWS 是首选公共云提供商时。
- 当需要键值或文档数据库时。
- 当超大规模和高可用性优先于一致性时。
- 当首选完全托管的公共云数据库时。
- 何时需要地理空间数据类型。
何时不使用 DynamoDB
- 当 AWS 不是首选公共云提供商时。
- 作为需要 ACID 事务保证的主数据库(OLTP)。
- 由于法规、数据保护或关键业务需求而首选本地数据库时。
- 当需要柱状数据库或图形数据库时。
- 当需要分布式 SQL (NewSQL)数据库时。
可供选择的事物
- MongoDB
- Riak
- 蔚蓝宇宙数据库
- 床座
- CouchDB
- 卡桑德拉
人气:
亚马逊 DynamoDB 是使用最多的超大规模云数据库之一。也是最 AWS 的服务之一。
*年来,它正面临来自开源数据库(如 Cassandra、MongoDB)和其他公共云数据库(Azure Cosmos DB)的激烈竞争。
由于亚马逊是领先的公共云提供商,DynamoDB 仍然是公共云中最受欢迎的 NoSQL 数据库。
根据流行的数据库排名网站 DB-Engines,它是第二大流行的公共云数据库,仅次于 Azure SQL 数据库:
图片由作者提供(数据: DB-Engines
《2020 年栈溢出开发者调查》将 DynamoDB 列为 2020 年第 11 大最受欢迎的数据库。考虑到 DynamoDB 是该列表中唯一的公共云数据库,这是一个壮举:
来源:堆栈溢出开发者调查,2020 年
趋势
自 2012 年推出以来,DynamoDB 是业内最时尚的数据库之一。DB-Engines 显示了 DynamoDB 在其整个生命周期内的持续增长趋势:
来源: DB-Engines
谷歌趋势还显示,在过去十年中,DynamoDB 的受欢迎程度呈线性增长:
来源:谷歌趋势
2.谷歌大查询
很少有公司能像谷歌一样处理如此庞大的数据集。难怪谷歌凭借许多新颖的想法和创新引领着 21 世纪的大数据格局。在本世纪初,谷歌发现“一刀切”的 SQL 数据库对于分析工作负载来说不够好。他们开发了一个新的数据库“Dremel”,用于数据仓库,即处理大量的分析数据。谷歌在 2010 年发表了一篇论文,“ Dremel:网络规模数据集的交互分析 **,”**将他们的发现公之于众。
后来,谷歌在 2011 年将他们内部的 Dremel 数据库公开为 BigQuery 数据库。从那时起,它就是数据仓库和分析负载的领先和最具创新性的数据库。谷歌云(GCP)在数据存储领域有着强大的影响力,BigQuery 在其中发挥着举足轻重的作用。
5 个关键特征
- 高度可扩展的多云数据仓库解决方案,具有独立的存储、计算和处理能力。
- 它采用无服务器体系结构,具有受管配置、维护、安全性和可扩展性。它具有多位置复制存储的自动高可用性。
- BigQuery ML 使用户能够使用标准的 SQL 查询在 BigQuery 中创建和执行机器学习模型。
- 其高速流插入 API 为实时分析提供了坚实的基础。
- BI 引擎(内存分析服务)通过标准 ODBC/JDBC 为流行的 BI 工具提供亚秒级查询响应时间和高并发性。
何时使用大查询
- 对于大规模(Pb 级)数据仓库解决方案。
- 当需要内置 ML 和 AI 集成时,例如 TensorFlow。
- 当实时分析是一项重要要求时。
- 何时需要地理空间数据类型。
- 当首选无服务器数据库时。
何时不用大查询
- 它的多云产品“BigCloud Omni”仍处于“私有 alpha”阶段。在多云场景中慎用。
- 作为需要 ACID 事务保证的主数据库(OLTP)。
- 由于法规、数据保护或重要的业务机密而首选本地数据库时。
- 当需要文档数据库或图形数据库时。
- 当数据集不大时。
可供选择的事物
- 亚马逊红移
- 雪花
- SAP 数据仓库云
- IBM Db2 仓库
- Azure Synapse 分析
- Oracle 自治数据仓库
- Teradata
人气:
BigQuery 彻底改变了数据仓库。根据 DB-Engines 排名,它是第三大最受欢迎的云数据库:
作者图片(数据: DB-Engines )
趋势
BigQuery 的受欢迎程度在过去几年里急剧上升,这一点已被 DB-Engines 趋势所证实:
来源: DB-Engines
它是最时尚的数据仓库解决方案之一,*年来引起了广泛的关注,如下所示:
来源:谷歌趋势
3.Azure SQL 数据库
微软是数据库领域的另一个大玩家。凭借 Microsoft SQL Server,微软主导了中端 Windows 系统的商业数据库市场。当微软在 2010 年代采用云优先的方法时,它在微软 SQL Server 上提供了托管数据库服务。在接下来的几年中,Microsoft 托管的 SQL Server 经历了许多变化。
目前,Azure SQL 数据库不仅是微软 SQL Server 的托管数据库即服务,还提供了许多其他增值的额外功能。对于许多企业来说,尤其是那些已经在使用 Microsoft SQL Server 的企业,它是云中的首选数据库,因为他们可以轻松地将其本地 Microsoft SQL Server 迁移到云中。
5 个关键特征
- Azure 云上的托管 SQL 数据库。
- 除了独立的数据库,它还提供灵活的弹性池,以经济高效的方式管理和扩展具有可变负载的多个数据库。
- 它提供无服务器计算层。
- 这是一个超大规模的 SQL 数据库,即使在基础架构出现故障的情况下也具有 99.99%的可用性,几乎可以即时备份,并且可以快速恢复数据库。
- 除了标准层,它还为超大规模 SQL 数据集提供超大规模服务层。
- 以轻松的方式将本地 Microsoft SQL 数据库提升并转移到 Azure SQL 数据库。
何时使用 Azure SQL 数据库
- 如果 Azure 是首选的公共云提供商。
- 如果一家公司已经拥有 Microsoft SQL 服务器,并希望将其迁移到云中。
- 出于各种原因(大型 SQL 数据库、快速备份/恢复、高吞吐量),需要超大规模的 SQL 数据库。
- 如果企业级数据保护需要加密、身份验证,限制用户对数据的适当子集的访问。
- 如果出于成本目的需要数据库的弹性池。
何时不使用 Azure SQL 数据库
- 当 Azure 不是首选的公共云提供商时。
- 由于法规、数据保护或关键业务需求而首选本地数据库时。
- 当需要柱状数据库或图形数据库时。
- 当需要分布式 SQL (NewSQL)数据库时。
- 当数据是半结构化和非结构化时。
可供选择的事物
- MySQL
- 神谕
- PostgreSQL
- 马里亚布
- IBM Db2
- 亚马逊极光
- 谷歌云扳手
人气:
Azure SQL 数据库不像这个列表中的其他一些数据库那样具有破坏性或创新性。但是云中的托管 SQL 数据库有着巨大的市场。在这个领域,Azure SQL 数据库表现出色。
根据 DB-Engines 排名,它是最受欢迎的公共云数据库:
图片由作者提供(数据: DB-Engines
趋势
Azure SQL 数据库不像该列表中的其他一些数据库那样具有趋势性。但在过去十年中,它仍然产生了积极的趋势,前一年出现了高峰:
来源: DB-Engines
Google trends 也显示了 Azure SQL 数据库的稳定趋势。
来源:谷歌趋势
4.天蓝色宇宙数据库
微软是传统的大型科技公司,业务遍及全球。当微软在 2010 年启动云优先政策时,他们希望开发自己的星球级 NoSQL 数据库,以关注最大的灵活性和开发者友好性。最后,经过七年的密集研发,他们在 2017 年发布了他们的多模型、多一致性、全球分布式数据库 Azure Cosmos DB。在许多方面,Azure Cosmos DB 引入了数据库技术中的几个新特性。虽然它不是第一个多模型数据库,但它是迄今为止最先进的多模型数据库。它还提供了额外的开发人员友好的特性。
如今,Azure Cosmos DB 是市场上增长最快的数据库之一。在现代,寻找“主数据库”,即“一个数据库来管理所有数据库”,是一个热门话题。在所有潜在的“主数据库”候选者中,Azure Cosmos DB 是目前最合适的候选者。
关键特征
- 面向云的多模型、全球规模的 NoSQL 数据库。
- 它支持几乎所有的主流数据模型:文档数据库(半结构化数据),高度关系数据的图形数据库,高吞吐量数据的宽列存储。
- 它还提供了多种已知的访问模式和 API:SQL、MongoDB API(文档数据库)、Cassandra API(宽列数据库)和 Gremlin(图形数据库)。
- 它提供了最高级的一致性级别和有保证的 SLA:强的、有限的陈旧性、会话、一致的前缀、最终。
- 它是一个全球分布式数据库系统,允许以一位数毫秒延迟从数据库的本地副本中读取和写入数据。
何时使用 Azure Cosmos DB
- 当需要多模型 SQL 数据库时。
- 当需要具有行业标准 API 的 NoSQL 数据库时。
- 当需要具有灵活一致性级别的全局分布式数据库时。
- 当 Microsoft Azure 是首选公共云时。
- 当需要完全受管理的无服务器数据库时。
何时不用 Azure Cosmos DB
- 当 Microsoft Azure 不是首选的公共云提供商时。
- 当由于法规、数据保护或关键业务机密而首选本地数据库时。
- 当需要数据仓库系统时。
- 当需要分布式 SQL (NewSQL)数据库时。
- 如果预算和成本是一个问题,相对昂贵的 Cosmos DB 不是一个好的选择。
可供选择的事物
- MongoDB
- 里亚克
- 蔚蓝宇宙 DB
- 沙发底座
- CouchDB
- 卡桑德拉
- 亚马逊 DynamoDB
- Neo4j
人气:
Azure Cosmos DB 是这个列表中最年轻的数据库,也是最*四年才上市的。尽管如此,它在行业中的采用率非常高,在云数据库普及度方面排名第四:
作者图片(数据: DB-Engines )
趋势
来源: DB-Engines
来源:谷歌趋势
5.亚马逊红移
作为领先的先锋云提供商,亚马逊希望快速发展。众所周知,亚马逊采用了许多开源数据存储,并在此基础上构建了自己的 AWS 服务。当谷歌在 2011 年用 Big Query 撼动数据仓库场景时,亚马逊采用了流行和创新的 SQL 数据库 PostgreSQL,并在此基础上构建了自己的数据仓库解决方案。2013 年,他们发布了亚马逊红移(Amazon Redshift)作为企业级云数据仓库解决方案。
由于 AWS 在公共云领域的主导地位,Amazon Redshift 是领先的数据仓库解决方案之一。另一方面,由于对 PostgreSQL 的强烈依赖,Amazon Redshift 的发展速度不如其竞争对手(如 BigQuery、Snowflake)。
5 个关键特征
- 完全托管、云就绪、Pb 级数据仓库解决方案。
- 与许多 AWS 云和数据服务无缝协作(S3、亚马逊雅典娜、亚马逊 EMR 、 DynamoDB 和亚马逊 SageMaker )。
- 与 AWS 分析生态系统的本机集成(ETL 的 AWS Glue ,高级 BI 的 Amazon QuickSight ,安全数据湖的 AWS Lake Formation )。
- 凭借其硬件加速的查询缓存 AQUA,它可以提供 10 倍的查询性能。
- 它的无共享大规模并行处理(MPP)带来了缓存、高效存储、闪电般的分析查询和并发分析。
何时使用亚马逊红移
- 对于大规模(Pb 级)数据仓库解决方案。
- 当亚马逊是你的公共云提供商时。
- 当各种亚马逊数据分析工具和数据*台已经在使用的时候。
- 当团队熟悉 PostgreSQL 语法和连接性时。
- 除了增强的数据库安全功能,Amazon 还有一个广泛的集成合规计划。
什么时候不用亚马逊红移
- 当亚马逊不是你的公共云提供商时。
- 当需要内置 ML 和 AI 集成时,例如 TensorFlow。
- 作为需要 ACID 事务保证的主数据库(OLTP)。
- 当由于法规、数据保护或关键业务机密而首选本地数据库时。
- 当具有即时水*扩展的无服务器数据仓库成为关键需求时。
可供选择的事物
- 大查询
- 雪花
- SAP 数据仓库云
- IBM Db2 仓库
- Azure Synapse Analytics
- 甲骨文自主数据仓库
- Teradata
人气:
从受欢迎程度来看,亚马逊红移在这个列表中落后于其他公共云数据库,如下图:
图片由作者提供(数据: DB-Engines
趋势
亚马逊红移不是市场上最时尚的数据仓库解决方案,落后于 BigQuery 和雪花。*年来,它的牵引力变得*缓,如 DB-Engines 趋势所示:
来源: DB-Engines
来源:谷歌趋势
结论
在这个列表中,Amazon SQL 数据库是唯一的公有云 SQL 数据库。
Amazon DynamoDB 是云数据库中使用最多的 NoSQL 数据库。
Google BigQuery 彻底改变了数据仓库的面貌,是最具创新性的数据仓库解决方案。Amazon Redshift 是构建在 PostgreSQL 服务器上的另一个流行的数据仓库解决方案。
尽管相对较新,Azure Cosmos DB 是一个非常有前途的数据库,是 master 数据库的主要候选数据库。
许多其他公共云数据库无法进入这一候选名单。其中,Google Spanner 和 Amazon Aurora 在分布式 SQL 数据库领域前景非常看好。
如果您已经在公共云中或者计划迁移到公共云中,您也应该考虑公共云数据库。公共云数据库将继续存在,并将在未来的不同场景中提供托管数据库。
类似文章
</21-predictions-about-the-software-development-trends-in-2021-600bfa048be>
5 个最好的 Python 项目,代码可以在一小时内完成!
原文:https://towardsdatascience.com/5-best-python-projects-with-codes-that-you-can-complete-within-an-hour-fb112e15ef44?source=collection_archive---------3-----------------------
用完整的代码构建五个很酷的 Python 项目,开发人员可以在一个小时内完成这些项目,并添加到您的简历中!
由 Unsplash 上的 krakenimages 拍摄的照片
Python 对于任何开发人员来说都是一种非凡的编程语言,因为它简单、易用、功能多样。除了每个即将到来的版本所带来的持续发展、改进和进步之外,Python 拥有最具支持性和最成熟的社区,该社区拥有大量富有成效和有用的资源,可以以各种可能的方式帮助您。
在 Python 及其等效库的帮助下,我们可以通过构建不同类型的独特项目来实现巨大的成就。Python 的灵活性允许您探索任何您想探索的选项,并且大量精彩的资源将帮助您更轻松地完成您想要的任务。因此,开始从事大量的 Python 项目来添加到你的简历中是一个很棒的主意。
我试图涵盖大多数对初学数据科学的爱好者和程序员有用的主题。如果您有兴趣学习如何在 12 个月内掌握数据科学,您应该查看以下指南,其中建议了实现这一目标必须遵循的 12 个步骤。
</12-steps-for-beginner-to-pro-in-data-science-in-12-months-c6f6ba01f96e>
在本文中,我们将看看五个不同的令人惊叹的项目,您可以使用 Python 及其库来构建它们。您可以在一个小时的时间范围内有效地计算在各自部分中提到的所有项目。我们将从四个简单的 Python 项目开始,以及一个涉及人工智能的稍微复杂一点的 Python 任务。让我们开始建设我们的项目吧!
1.提醒提醒:
在 Python 的帮助下,自动化大多数任务变得非常容易,否则这些任务对人类来说会被认为是棘手或复杂的。在适当的库和编码模式的帮助下,有可能在 Python 的帮助下自动化您的 PC 来实现合适的任务。在这一节中,我们将探索一个类似的项目,通过它我们可以执行这样一种类型的自动化,这将通过提醒我们要完成的任务的警报来提示我们。
在第一个项目中,我们将研究如何及时设置提醒警报,以便您能得到相应的通知。对于这个任务,我们将利用两个基本的库来完成这个项目。Python 中导入的时间模块和 plyer 库(可以用简单的 pip 命令安装)可以用来指定相应的通知请求。下面提供的代码块是实现该项目的预期结果的一个很好的起点。
import time
from plyer import notificationif __name__ == "__main__":
while True:
notification.notify(
title = "ALERT!!!",
message = "Take a break! It has been an hour!",
timeout = 10
)
time.sleep(3600)
上述代码示例演示了此 Python 项目的过程性工作。然而,还可以实现许多进一步的改进和提高。有关使用以下项目和库可以完成的整个过程的完整说明,请访问下面提供的链接,因为与以下主题相关的每个概念和属性都有详细介绍。
2.Python 计算器:
用 Python 创建计算器是一项有趣的任务。在我以前的文章中,我们已经探讨了计算器的几个概念,从执行简单计算的简单计算器到构建具有微分和积分的更复杂的计算器架构。虽然以下代码块利用了纯代码和即时响应,但在本项目中,我们将重点关注使用 Python 创建一个更具交互性的图形用户环境。
对于这个项目,在第一个代码块中,我们将声明声明表达式、创建按钮和等号按钮工作的所有基本要求和强制函数。下面是该项目的第一个示例代码块。该示例代码块的完整代码参考来自以下网站。有关更多信息和整个编码过程,请参考它。
# Import Tkinter
from tkinter import *# globally declare the expression variable
expression = ""# Function to update expression in the text entry box
def press(num):
global expression
expression = expression + str(num)
equation.set(expression)# Function to evaluate the final expression
def equalpress():
try:
global expression
total = str(eval(expression))equation.set(total)
expression = ""except:equation.set(" error ")
expression = ""
在下一个示例代码块中,我们将查看基本 GUI 界面的构造,在该界面中,您可以显示大量按钮并构造整个项目。出于这个示例代码块的目的,我将只显示创建一些基本功能的一些基本元素。从 1 到 3 的数字可以如下创建,我们可以在单击 equals 按钮后测试加法运算。单击按钮元素以显示数字,并相应地执行所需的操作。计算完成后,您可以单击“等于”按钮来显示最终结果。
# Driver code
if __name__ == "__main__":
# create a GUI window
gui = Tk()# set the background colour of GUI window
gui.configure(background="light green")# set the title of GUI window
gui.title("Simple Calculator")# set the configuration of GUI window
gui.geometry("270x150")# we create an instance of this class
equation = StringVar()# create the text entry box for
expression_field = Entry(gui, textvariable=equation)# grid method is used for placing
expression_field.grid(columnspan=4, ipadx=70)# create a Buttons and place at a particular.
button1 = Button(gui, text=' 1 ', fg='black', bg='red',
command=lambda: press(1), height=1, width=7)
button1.grid(row=2, column=0)button2 = Button(gui, text=' 2 ', fg='black', bg='red',
command=lambda: press(2), height=1, width=7)
button2.grid(row=2, column=1)button3 = Button(gui, text=' 3 ', fg='black', bg='red',
command=lambda: press(3), height=1, width=7)
button3.grid(row=2, column=2)plus = Button(gui, text=' + ', fg='black', bg='red',
command=lambda: press("+"), height=1, width=7)
plus.grid(row=2, column=3)equal = Button(gui, text=' = ', fg='black', bg='red',
command=equalpress, height=1, width=7)
equal.grid(row=5, column=2)clear = Button(gui, text='Clear', fg='black', bg='red',
command=clear, height=1, width=7)
clear.grid(row=5, column='1')Decimal= Button(gui, text='.', fg='black', bg='red',
command=lambda: press('.'), height=1, width=7)
Decimal.grid(row=6, column=0)
# start the GUI
gui.mainloop()
作者图片
要查看关于这个主题的更多信息,我建议查看来自 Geek for Geeks 的参考资料。如果你有兴趣通过视频指南了解这个概念,我建议你在 YouTube 上跟随这个视频指南。如果您想了解更多关于图形用户界面和其他可用选项的信息,请查看我以前的一篇文章,其中介绍了七种这样的工具,以及一些用于项目开发的入门代码。
</7-best-ui-graphics-tools-for-python-developers-with-starter-codes-2e46c248b47c>
3.构建您自己的有声读物画外音:
有声读物画外音项目,顾名思义,会涉及一些文字和语音需求。对于这个 Python 项目,我们将把信息转换成文本,并获得一个您可以自动收听的语音记录。该项目将包括两个主要阶段。
第一阶段是将文本数据转换成音频记录,第二步是将电子书翻译成可读格式。对于第一项任务,我们将使用 Python 来利用 Google 文本到语音转换,而在第二阶段,我们将利用光学字符识别(OCR)技术来实现可能的最佳结果。
从项目的第一阶段开始,我们可以开始探索谷歌文本到语音(GTTS)模块,以实现将文本信息转换为音频文件的任务。一旦我们获得了这个音频文件的可播放版本,我们可以选择保留或删除这个特定的文件。执行以下操作的代码如下。
from gtts import gTTS
import ostext = "Hello! My name is Bharath."tts = gTTS(text)
tts.save("hi.mp3")os.system("hi.mp3")
为了获得更多的信息和了解关于这个库工作的复杂细节,建议通过下面提供的链接查看我以前的一篇文章,这篇文章广泛地讨论了这个主题。
在这个项目的第二阶段,我们将专注于将通常为 PDF(或文本文件)格式的电子书阅读成文本描述,以便 GTTS 模块可以阅读。阅读 pdf 或图像中的信息需要使用光学字符识别(OCR)技术。我们将使用 Pytesseract 模块进行这些 OCR 转换。
Pytesseract OCR 模块是解释视觉信息并从特定图像或文档中提取文本描述的最佳选项之一。让我们用这两种技术计算构建有声读物阅读器项目的最终代码块。
#Importing the libraries
import cv2
import pytesseract
from PIL import Image
from gtts import gTTS
from playsound import playsound# Specifying the path
pytesseract.pytesseract.tesseract_cmd = r'C:/Program Files/Tesseract-OCR/tesseract.exe'
# Reading the image
image = cv2.imread('1.png')
# Extraction of text from image
text = pytesseract.image_to_string(image)
# Printing the text
print(text)# Create the voice_text variable to store the data.
voice_text = ""
# Pre-processing the data
for i in text.split():
voice_text += i + ' '
voice_text = voice_text[:-1]
voice_text
tts = gTTS(voice_text)
tts.save("test.mp3")
playsound("test.mp3")
要了解关于光学字符识别和这个库模块的完整工作过程的更多信息,我建议通过下面提供的链接查看我以前的一篇关于用 Python 进行 OCR 的文章,这篇文章广泛地讨论了这个主题。
4.Python 游戏:
作者截图
在这一节中,我们将讨论几个游戏项目,您可以借助 Python 来构建它们。借助 Python 和它提供给用户的各种模块,你可以构建各种各样的游戏。您可以构建像 hangman、tic tac toe、石头剪刀布等更多游戏,包括更多面向图形的游戏,如借助 Pygame 的 flappy bird 或 Mario 副本。
在本文的第一部分,我们将更多地讨论如何使用 Python 中不同的库来创建自己独特的游戏。借助 Python 中预先构建的库模块(如 turtle 包和 random 库),您可以构建一个具有轻微图形化风格的独特项目。
在下面显示的代码块中,我们定义了一个绘制赛道的函数,一旦赛道完成,我们计划放置几只乌龟,这样它们可以互相比赛。比赛的动作可以用随机库来随机化,每次掷骰子的结果都不一样,因此哪只乌龟赢了比赛每次也不一样。
def treat():
speed(0)
penup()
goto(-140, 140)
for step in range(15):
write(step, align='center')
right(90)
for num in range(8):
penup()
forward(10)
pendown()
forward(10)
penup()
backward(160)
left(90)
forward(20)
turtle1 = Turtle()
turtle1.color('red')
turtle1.shape('turtle')
虽然上面的代码块是我们计划构建的项目的示例代码,但是您可以从这里继续自己的一些独特的想法,或者参考我为万圣节构建的一个有趣的 Python 项目。如果你有兴趣建立一个类似的海龟赛跑项目,请点击下面的链接。这是一个详细的指南,告诉你如何在不需要太多编程知识的情况下,用独特而有趣的想法创建任何类型的 Python 游戏。
对于第二部分,您可以使用 Pygame 构建大量项目。它是 Python 中最好的库之一,允许你在许多不同的游戏项目上工作。你可以用这个游戏库建立更简单的项目想法,或者用深度学习和强化学习构建更复杂的项目。如果你有兴趣了解更多关于开发游戏的知识,以及为什么你应该用 Python 和人工智能自己开发一个游戏,那么请从下面提供的链接查看下面的文章。
</5-reasons-why-you-should-develop-a-game-with-python-and-ai-9f5f276e7637>
5.情感分析:
腾雅特在 Unsplash 上拍摄的照片
与我们之前讨论的项目不同,情感分析项目将涉及更多与人工智能相关的其他等效主题,如机器学习和深度学习。然而,我发现可以在许多不同的层次上执行多种多样的情感分析,并且复杂性可以随着任何特定操作的每种变化而不断提高,类似于本文第二点中描述的计算器项目。
让我们首先了解什么是情感分析,以及如何用一个示例代码块在 Python 中执行以下操作。情感分析(也称为观点挖掘或情感 AI)是指利用自然语言处理、文本分析、计算语言学和生物识别技术,系统地识别、提取、量化和研究情感状态和主观信息。
为了执行情感分析的任务,我们可以借助多种方法来获得最成功的结果。通常,对于初学者来说,最好的方法是在清理可用的文本数据并执行标记化的所有基本操作后,从众多的机器学习算法开始。像逻辑回归和朴素贝叶斯这样的机器学习算法是解决这个问题的方法。
我们将在本文中构建的项目将使用自然语言处理工具包的一些元素和内置的朴素贝叶斯算法。我们正在尝试使用电影语料库数据集,并执行某种类型的情感分析。下面显示的完整代码块取自下面的链接。查看以下主题的更多信息和细节。
# Load and prepare the dataset
import nltk
from nltk.corpus import movie_reviews
import randomdocuments = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]random.shuffle(documents)# Define the feature extractorall_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = list(all_words)[:2000]def document_features(document):
document_words = set(document)
features = {}
for word in word_features:
features['contains({})'.format(word)] = (word in document_words)
return features# Train Naive Bayes classifier
featuresets = [(document_features(d), c) for (d,c) in documents]
train_set, test_set = featuresets[100:], featuresets[:100]
classifier = nltk.NaiveBayesClassifier.train(train_set)# Test the classifier
print(nltk.classify.accuracy(classifier, test_set))
如果您有兴趣用更深入的学习方法来处理下面的问题陈述,那么您应该考虑使用 LSTMs 开始寻找解决方案。然后,你可以用一种更复杂的方法来处理下面的问题,这种方法是从序列到序列模型,或者使用一维卷积层等等。作为起点,我建议查看下面的链接,开始使用情绪分析项目的深度学习方法。
如果您有兴趣了解更多关于自然语言处理和其他类似任务的信息,您可以使用 NLP 和深度学习来执行这些任务,请随时查看我以前的一个项目,该项目涵盖了下一个单词预测的主题。在这个项目中,我深入研究了如何在深度学习的帮助下构建下一个单词预测模型,并使用 LSTM 进行预测搜索。
结论:
照片由 Aaron Burden 在 Unsplash
“编写 Python 代码的乐趣应该在于看到短小、简洁、易读的类,这些类用少量清晰的代码表达了大量的动作,而不是让读者厌烦得要死的大量琐碎代码。” —吉多·范·罗苏姆
Python 的简单性允许开发人员直接创建出色的项目。借助 Python 中可用的各种非凡工具,爱好者可以构建他们想要探索的几乎任何类型的项目。由于这种编程语言的多功能性,你可以构建任何类型的人工智能、数据科学、计算机视觉或自然语言项目。
在本文中,我们讨论了如何构建五个不同的 Python 项目,即自动化您的 PC、GUI 计算器、有声读物画外音、Python Hangman 游戏和情感分析。有了代码块、各种引用和其他资源,您应该能够轻松地构建这些项目,而不会有太大的困难。
完成这些项目后,采取一些你自己的选择,并开始探索和尝试这些其他的选择。不断建立越来越多的项目,直到你学到更多。如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。
看看我的其他一些文章,你可能会喜欢读!
</14-pandas-operations-that-every-data-scientist-must-know-cc326dc4e6ee> [## 在各种预算范围内,最适合深度学习的电脑
towardsdatascience.com](/best-pc-builds-for-deep-learning-in-every-budget-ranges-3e83d1351a8) </15-numpy-functionalities-that-every-data-scientist-must-know-f6d69072df68> </17-must-know-code-blocks-for-every-data-scientist-c39a607a844d> </6-best-projects-for-image-processing-with-useful-resources-f860f3dfe977> [## 6 个最佳图像处理项目和有用的资源
towardsdatascience.com](/6-best-projects-for-image-processing-with-useful-resources-f860f3dfe977)
谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!
从数据科学中赚取收入的 5 种最佳方式!
原文:https://towardsdatascience.com/5-best-ways-to-earn-income-from-data-science-a9c8fed1eee6?source=collection_archive---------41-----------------------
意见
探索作为数据科学爱好者或数据科学家的五种最佳创收方式!
马特·拉默斯在 Unsplash 上拍摄的照片
*十年来,由于围绕数据科学的大肆宣传和进步,数据科学已经变得非常流行。由于这种快速发展,为有技能的个人创造了巨大的机会。
今天几乎每个人都想成为数据科学家!但是你实现这个目的的必要条件是什么呢?最终,你获得收入的最佳方式是什么,以便在上升到更高的高度时在更高的水*上成功地表现。
如果你好奇什么最适合你,什么是你可以利用的职业选择和机会,那么请继续关注我们为人工智能有志者探索的五个最佳职业选择。
在我们直截了当地回答手头的问题之前,让我们了解一下数据科学到底是什么,以及为什么它会获得持续的炒作和流行。让我们从简单介绍数据科学开始。
如果您已经非常熟悉数据科学及其各种术语,那么请随意跳到涵盖利用数据科学赚取收入的五种最佳方式的部分!
什么是数据科学?
数据科学是一个跨学科领域,它使用科学的方法、流程、算法和系统,从许多结构化和非结构化数据中提取知识和见解。数据科学与数据挖掘、机器学习和大数据相关。
数据科学是将统计学、数据分析及其相关方法统一起来,以便用数据来理解和分析实际现象的一个概念。它使用数学、统计学、计算机科学、领域知识和信息科学范围内的许多领域的技术和理论。
图灵奖获得者吉姆·格雷(Jim Gray)将数据科学想象为科学的“第四范式”(实证、理论、计算和现在的数据驱动),并断言“由于信息技术和数据泛滥的影响,科学的一切都在发生变化”。
在继续下一个主题和下一节之前,我强烈建议查看我以前的一篇文章,该文章涉及了成功数据科学家的五个最重要的特征。这些品质非常重要,将在从数据科学中赚取收入的各种方式中发挥重要作用。
为什么是数据科学?
数据科学被称为 21 世纪“最性感的工作”。数据是这一代人的宝贵资源,它有能力改变或改善整个世界的现状。
几乎每一家公司,无论是小型初创公司还是大型科技巨头,如谷歌、微软、脸书、亚马逊等。和许多其他公司一样,正在投入他们宝贵的时间和全面的资源来聚集熟练的数据科学家。
这些公司的目标是完成令人难以置信的壮举,并利用人工智能和数据科学开发杰出的创新项目,以全面改善社会和整个世界。
人工智能和数据科学是当今发展最快的领域。人工智能的进步正在快速发展。不缺乏开放的职位以及职业机会。
在现代,数据科学和人工智能,以及人工智能相关的子领域,如机器学习、深度学习、计算机视觉和自然语言处理等,都有广泛的机会。
如果你好奇什么最适合你,什么是你可以利用的职业选择和机会,那么请继续关注我们为人工智能有志者探索的五个最佳职业选择。
随着世界上不断产生的所有这些数据,它为熟练的数据科学家开辟了一个巨大的市场。它允许他们积极参与这一演变,并从这一壮观的数据科学领域赚取边际利润或丰厚利润。
在本文中,我们将系统地分解作为数据科学家的五种赚取收入的方法,以及如何利用这些机会为自己谋利。所以,事不宜迟,让我们开始分析这些可能性。
利用数据科学赚取收入的五种最佳方式
1.很酷的数据科学工作
照片由亚历克斯·科特利亚斯基在 Unsplash 上拍摄
作为显而易见的先生,这个条目是显而易见的。在获得该领域的专业知识后,获得一份数据科学工作是获得定期、及时收入的最佳方式之一。
如果你有相关的经验和技能,那么现在是考虑全职工作的绝佳时机。那里有大量的机会,就业市场对熟练的数据科学家敞开大门。
人工智能是当今发展最快的领域。据《财富》杂志报道,统计数据显示,在过去的四年里,人工智能专家的雇佣量增长了 74%。人工智能被认为是当代人的*【最热门】*工作。
对熟练数据科学专家的需求正以前所未有的速度增长。对机器学习、深度学习、计算机视觉、统计学和自然语言处理等人工智能子领域专家的需求和空缺职位每天都在激增。
工作机会不仅限于数据科学家的角色。其他可供有志之士选择的职位包括机器学习工程师或机器学习科学家、应用程序或企业架构师、数据或基础设施架构师、数据工程师、统计学家、商业智能开发人员和数据分析师等。
对高质量数据科学专业人员的需求很高,提供的薪水也很高。如果你有足够的所需教育和资格,或者如果你对自己的技能水*和投资组合有信心,可以通过面试获得一份数据科学工作,这可能是你最好的方法和正确的方向。
2.创业公司
照片由奥斯丁·迪斯特尔在 Unsplash 上拍摄
所以,你的预算很少,但想法很棒。想知道你的下一步必须是什么?
还有什么更好的时机来创业呢?你可以成为一名拥有一些数据科学技能和知识的白手起家的企业家。感谢所有的大肆宣传,这是在人工智能领域建立自己的创业公司的最佳时机。然而,这需要一些事实核查和挖掘。
除了技术技能,创业时最重要的品质是各种软技能,如自信和有效的沟通。如果你能够从一个组织那里获得你的想法所需要的资金,那么这将会给你一个坚实的优势。
即使在其他方面也完全没问题。如果你有信心你的人工智能项目可以在你的时间框架内完成,也可以在你的预算内实施,我会高度鼓励和推荐你尝试创业的想法。作为一个个人或与一小群对人工智能感兴趣的伙伴一起开始,并最终成为未来的企业家是一种很棒的感觉。
确保你的想法建立了一个坚实的基础,以产生足够的收入来最初维持和继续你的创业项目的进展,而不做出任何妥协,这是至关重要的。在一天结束的时候,自我满足和对你所感知的事物感到快乐是生活中最重要的事情。
如果你选择继续创业,享受你的创业之路,不要害怕失败。确立你的创业想法和具体计划对你的创业成功和成为成功企业家至关重要。
请随意查看我以前的一篇文章,其中包含了我对人工智能和数据科学的六个最佳创业选择的见解。
</6-best-startup-choices-with-artificial-intelligence-360260ccf89e>
3.实习
Icons8 团队在 Unsplash 上的照片
对于数据科学领域的有志之士来说,在一家成熟的公司获得实习机会大有裨益,因为它可以帮助你获得相关经验和未来的工作机会。
如果你是一名正在攻读硕士学位或博士学位的学生,或者你已经积极参与了许多与数据科学相关的项目,那么你最好更多地接触这个行业。因此,作为一名数据科学家,你应该考虑实习机会,以发展工业层面所需的基本技能。
数据科学实习是与该领域的专家一起工作并分析必须执行的各种复杂任务的绝佳机会。它还提供了一个极好的机会来处理实时问题,并衡量全面深入的理解和经验。
类似于各种工作机会和创业选择,有很多实习选择。通常,人们更愿意加入任何有机会获得的实习。然而,强烈建议你瞄准一个你未来有强烈兴趣从事的实习。
如果你对特定的研究分支或特定领域感兴趣,如计算机视觉、自然语言处理、机器人人工智能、与人工智能集成的物联网或其他类似方面,那么就争取在各自感兴趣的学科和领域获得实习机会。
除了被动的收入和现实生活的曝光之外,在一家成熟的公司或组织实习的最大好处是,将同样的实习转换为全职数据科学工作的可能性很高。这种转换能力基于你的表现和技能。所以,不要忽视这些实习机会,充分利用它们!
4.当自由职业者
埃菲社在 Unsplash 上拍摄的照片
作为一名自由代理人,去开放的世界探索你喜欢的各种数据科学项目。
自由职业者是个体经营者,不为任何特定的雇主工作。有大量的选择和选项供他们选择,尤其是在数据科学领域。这些可能不同于自然语言处理、图像分割、计算机视觉等项目。
选项还包括帮助某人完成学校作业或辅导某人与数据科学相关的特定主题。收入显然因项目而异,但这是一种学习和探索新领域的有趣方式。
数据科学和 Python 的自由职业市场非常开放。数据科学自由职业者的门口有无数的机会等着你。最重要的一步是找到一个独特的利基市场,并适应各自的市场。
此外,你可以赚一些钱,这是一个双赢的局面。初学者、中级开发人员或专家都可以将自由职业视为自我发展、学习和赚钱的可行选择。你的工资或收入因每个项目而异。
自由职业最大的好处是你可以协调自己的工作。你也可以决定每个任务或项目的价值,然后决定相应地协商你的报酬。在成功完成分配给你的自由职业项目的同时,可以建立很多机会和有用的联系。
寻找自由数据科学或 Python 在线工作的最佳地点是像 freelancer.com 或 Fiverr 这样的网站。如果你正在寻找一种更直接的方法,在你感到舒适和自信的特定领域获得一份自由职业数据科学工作,那么你最好建立更多的联系,接受公司、组织或初创公司提供的任务和项目。
最初的旅程可能会有点艰难,但这确实是你可以克服的。一个自由职业的数据科学家最重要的方面是有效沟通的能力,并根据需要遵循指示。培养一些毅力和做出艰难决定的能力。你将能够取得伟大的成就,最起码,在学习和探索的同时获得一些体面的收入!
5.内容创作
威廉·艾文在 Unsplash 上的照片
运用创造性和分析性思维制作独特、创新的内容,造福大众!
这是一个稍微被低估的方法,但是现在,由于社交媒体和互联网的兴起,内容创作越来越受欢迎和感兴趣。因此,这种方法现在被作为一种赚钱和吸引追随者的实际手段。
内容创建是产生吸引你的购买者角色的主题想法,围绕这些想法创建书面或视觉内容,并以博客、视频、信息图表或其他格式使你的受众可以访问这些信息的过程。
换句话说,内容创作是信息对任何媒体的贡献,尤其是对特定环境中最终用户/观众的数字媒体的贡献。由于数据科学内容的高受欢迎程度以及新用户和关注者的快速增长,它有很大的发展空间。
数据科学中的内容创作可以涵盖多种内容。它可以在 YouTube 等*台上上传数据科学和人工智能相关的视频,撰写关于人工智能和数据科学的博客或文章,发布关于特定概念的故事和书籍,等等。
内容创作的最初旅程需要时间、耐心和奉献。你一开始就获得的收入可能没有你预期的那么高。另一方面,你可能需要投资一些资源来制作更好的内容。然而,最好的部分是,一旦你能够保持精神并努力工作,你将获得体面的收入,如果你变大了,你也可以将其转化为全职职业。
你越有技能和自信,你突破和成功的机会就越大。这个现代时代给内容创作者提供了广泛的机会来探索,通过加速浏览来成长,并实现繁荣和成功。
数据科学中的内容创作需要时间、奉献、技能、天赋和独特性才能脱颖而出。为了成为一名成功的内容创作者,你需要研究并有能力不断学习和探索新的想法。最重要的是,由于数据是一个发展迅速的领域,您需要保持更新!
结论:
由 Austin Distel 在 Unsplash 上拍摄的照片
在本文中,我们讨论了作为一名数据科学家赚取收入的一些方法。这些方法包括技术性方法,如一份很酷的全职数据科学工作或实习,或者自由职业和内容创作中更具创造性和创新性的方法,或者最终将你自己的资源投资于上述项目的组合,以创建一个成功的初创企业。
然而,前面提到的每种方法都有各自的优缺点。每个人的奋斗、胜利和旅程都是不同的。归根结底,创造性、批判性和分析性思维是数据科学家最迷人的特征。
对于一名成功的数据科学家来说,跳出框框思考和实施创新想法的能力是必要的。这些属性是在行业水*上表现突出的一些关键方面。
老实说,在一天结束的时候,追随你的心、激情和梦想是生活中最重要的部分。享受你所做的,一切都会好的。无论你选择哪一个,保持满足和快乐是生活中最重要的事情。
如果你有兴趣追求数据科学和人工智能的未来,我祝你好运。希望你能从这篇文章中受益。走出去,探索世界,选择最适合你的。如果我错过了作为数据科学家赚取收入的其他酷方法,请告诉我。我很想知道,所以请务必在下面留言。
看看我的其他一些文章,你可能会喜欢读!
</10-best-tools-and-technologies-for-data-science-e335fb99c2f2> </15-awesome-python-and-data-science-projects-for-2021-and-beyond-64acf7930c20> </12-steps-for-beginner-to-pro-in-data-science-in-12-months-c6f6ba01f96e>
谢谢你们坚持到最后。我希望你们喜欢阅读这篇文章。我希望你们都有美好的一天!
作为数据科学家兼顾工作和学习的 5 个最大技巧
原文:https://towardsdatascience.com/5-biggest-tips-to-juggle-work-and-study-as-data-scientists-7cad143f10a?source=collection_archive---------15-----------------------
给有抱负的数据科学家的建议
我个人*衡学习、工作和生活的经验
来源( unsplash )
兼顾硕士学位和全职工作
上个月,我写了关于我参加佐治亚理工学院 OMSCS 项目的兼职硕士学位的故事。从那以后,我收到了更详细地谈论斗争和艰辛的请求。
同时拥有硕士学位和全职工作是很可怕的。作业和截止日期已经占用了我周末的空闲时间。但是尽管我失去了所有的空闲时间,我相信我在生活中拥有更好的待遇。
在石头路的尽头寻找宝藏
我在学习和工作期间经历了改变生活的时刻:我在谷歌换了工作,我向我的女朋友(现在是未婚妻)求婚,由于疫情,我搬到雅加达和家人住在一起。
经过 10 个模块,无数艰难的项目,和 2.5 年的非全日制硕士学习,我终于毕业了。
我努力工作和努力学习的成果。感谢阿尔伯特·宾格尔的图片。
为什么有效的学习和工作很重要?
作为一名数据科学家,这有三个重要原因:
- 首先,您需要不断更新关于最佳实践的知识。你会发现新的 ML 和可视化技术每天都在更新,很容易迷失。
- 第二个,你需要刻意练习,找出知识的缺口。自满是敌人。作为一名数据专家,你需要管理好你的工作和学习。
- 最后,数据科学家是有竞争力和挑战性的。看看与 5 年前相比,LinkedIn 中有多少拥有*【数据科学家】*头衔的专业人士。更不用说需要不断发展的技能集——数据分析、机器学习和软件工程。
不断的创新、审慎实践的需求以及数据领域日益激烈的竞争意味着需要有效地学习和工作。
在学习和工作中保持领先的秘诀
在这篇文章中,我将与你分享五个提高效率的小技巧,告诉你如何在管理你的事业和人际关系的同时,在学习方面表现出色。
1.好好计划你的期望和时间
让期望与你的经理和同事保持一致。
我之所以可以一边工作一边攻读硕士学位,是因为我的经理、家人和女朋友对我的期望一致。
让我给你举个例子。光是拿大师,每周就要占用你至少 20 个小时的时间。这意味着,如果你是全职工作,它很容易占用你的周末和工作日的另一个半天。这不包括因疾病或家庭事件而导致的非生产期。
这就是为什么你应该告诉你的经理,希望偶尔在工作时间有更多的时间学习。这会让你灵活地抽出时间专注于作业或考试。
同样,你也应该安排好和家人及爱人在一起的时间。确保你得到他们的同意,优先考虑工作和学习。
2.稍后设计第一个代码。
创建设计文档将让您了解您的目标,从而消除时间沉淀并产生影响。
让我们假设你收到了一个新项目。理解了问题之后,您开始编写代码,希望能够快速解决您的项目。
但是后来你意识到你引入了很多 bugs 开源软件包被破坏,支持是可怕的。绝望中,你花了几个星期排除故障。
完成后,你意识到你的作业只分配了 20%的代码评分方案。心怀不满,你又花了一整夜写了一份草率的报告。
这个错误是不必要和昂贵的,但我发现这是常见的。
相反,您应该在构建项目时将目标以设计文档的形式表达出来:
- **目标:**你为什么要建这个?
- **最小可行产品:**对你的受众来说,什么是重要的?
- **研究和探索:**有什么时间和资源可以利用?
- **里程碑和成果:**能实现什么?
- **结论:**有什么总结?
作为一个例子,你可以查看这个设计文档 收集并分析 Yayasan Merajut Hati Instagram 数据 。
我为 Yayasan Merajut Hati 创建的设计文档样本(来源于作者)
3。批量你的对焦时间
生产力=时间*专注
如果你是一个早起的人,不要在晚上进行高强度的编程。你会陷入时间陷阱,制造不必要的错误。
相反,把你的生产时间分配给密集的任务。你会做得更多。
就我而言,我通常早上 8 点来上班,下午 4 点下班。这是为了在早上我效率最高的时候专注于复杂的代码片段或设计文档。然后我用下午的时间放松、锻炼和管理电子邮件。
通过为工作、学习和人际关系分配时间,你会完成更多的事情。
注: 有很多天你会觉得不管时间批次都不思进取。在这种情况下,休息,善待自己,必要时请几天假。
4。投资更好的学习策略。
对每一项都有一个好的技巧会让你养成习惯去改善和修剪低效的部分。你会学得更快,并在你的领域出类拔萃。
记笔记和最大限度地利用注意力是很重要的。您可以投资这些工具来管理您的任务和笔记:
- 日历应用(Google Calendar/Keep): 花时间和自己安排会议为专注时间(通常我会放勿扰时间)。为你的待办事项分配时间跨度,坚持你的时间表。
- 管理任务(看板/Trello) : 在仪表板中组织您的每日/每周/每月任务。
- 记笔记(漫游/黑曜石):使用 Zettelkasten 方法记笔记。 Zettelkasten 是一种使用链接笔记的笔记方法,它建立了易于检索的知识存储(想象一下建立自己的图书馆语料库)。建议你用黑曜石(免费)或者 Roam(付费)来实验。
5。让志同道合的朋友和同事参与进来
艾伯特(我最好的朋友)和我在星期六早上一起学习 OMSCS
承认你的弱点,人无完人。找到能帮助你的人,并感谢他们。你的人际关系是你最大的资产,让你不断前进。
我和艾伯特·宾格尔和拉农·西姆一起学习。他们是同样的朋友,在我因学习和工作而陷入深深孤独的时刻,他们一直陪伴着我。没有上帝的恩典和这些人际关系,我不可能超越今天的我。
同样,你应该向朋友寻求学习。目标越接*,越应该寻求帮助,一起坚持下去。一起坚持比独自奋斗更有力量。
总结:学习和工作就是持之以恒
周末用来学习和做项目。为了寻求新的知识和技能,牺牲了大量的闲暇时间。但是回顾奋斗的历程,我坚持了下来……我成长了。
通过这篇文章,我希望你学会:
- 好好计划你的期望和时间:让你的期望与你的经理和同事保持一致。
- **以后再设计第一个代码:**理解你的目标,避免时间下沉,交付影响。
- **批量你的专注时间:**生产力=时间*专注
- **投资于更好的学习策略:**培养习惯,改善和减少低效
- 让志同道合的朋友和同事参与进来:你的人际关系是你前进的最大财富。
感谢 Albert Bingei 修改这篇帖子。
索利·德奥·格洛丽亚
来自作者的更多提示:
- 我喜欢带在线硕士学习数据科学的 5 个原因
- 如何构建你的终极数据科学投资组合
- 数据分析很难…以下是你如何超越的方法
- 写作分析学的隐藏宝石
关于作者
我用 ML @ Google 对抗网络钓鱼。
我热爱我的工作,因为我使用先进的 ML 算法和 MLOps 来保护 Chrome、Gmail 和 Android 用户免受钓鱼攻击,窃取弱势群体的生活积蓄。
我也是一名面向数据科学媒体的作家,为全球 50 多万观众的有志 ML 和数据从业者提供指导。
在我的空闲时间,我写中型文章,在 Kaggle 上编码,为铁人三项/自行车旅行训练。
最后,请通过 LinkedIn 、 Medium 或 Youtube 频道联系文森特
帮助你掌握熊猫图书馆的 5 本书
原文:https://towardsdatascience.com/5-books-to-help-you-master-the-pandas-library-acb5c305159b?source=collection_archive---------9-----------------------
超越“进口熊猫作为 pd”
由玛丽·波特在 Unsplash 拍摄的照片
成为一名数据科学家后,即使只是很短的一段时间,有些事情也会成为你的第二天性。例如,当你分析数据时,你的眼睛被训练来寻找模式和检测异常,你习惯于知道如何处理数据集中缺失的数据点,并且——如果你在旅途中使用 Python 你习惯于编写import pandas as pd
作为你的第一行代码。
Python 是一种非常流行的编程语言,它有成千上万的库,几乎可以满足您使用代码完成的任何事情。但是,当我们谈论一个特定的领域,即数据科学时,一些库和模块比其他的更为人所知和使用。有些我们甚至默认连接到现场。
例如,如果我说我正在使用 Python 来构建一个数据科学项目,那么很有可能,我将在我的代码中的某个地方以某种方式使用 Pandas 库。Pandas、Matplotlib、NumPy、SciPy 和其他是数据科学项目中经常使用的著名 Python 库。事实上,大多数数据科学项目使用所有 4 个库。
</5-new-data-science-books-that-you-should-consider-reading-c90aec1d5b0d>
因为这些库对于外业来说非常重要(至少目前如此),所以知道如何正确使用它们可以使您的工作流程更加高效。正如我经常说的,如果你想学习任何关于数据科学的东西,有各种类型的方法可以采用;你可以看一段 YouTube 视频,读一篇博客文章,或者看一本书。
在本文中,我将重点讨论后者。书籍是很好的学习资源,因为它们把你需要学习的所有信息都集中在一个地方。因此,我将向您提供 5 本书,帮助您掌握熊猫图书馆,并帮助您成为数据处理大师。
第一册:熊猫的动手数据分析
让我们从彭博的数据科学家和软件工程师斯蒂芬妮·莫林的一本书开始吧。斯蒂芬妮写这本书是为了帮助初学者建立一个坚实的熊猫基础,以及如何用它们来处理不同大小的数据集。如果你刚刚接触数据科学,但已经掌握了一些 Python 知识,这本书是我最喜欢的。
这本书涵盖了所有基本的数据操作主题,如 EDA(探索性数据分析),统计学基础,处理数据点,应用一些机器学习算法,并可视化您的数据。本书的作者斯蒂芬妮有时也会为那些希望通过信息得到指导和支持的人提供培训。这本书的结尾进入了一些高级主题,并且也提到了 Git 和 GitHub。
第二册:学习熊猫
接下来是另一本对初学者友好的书,帮助你建立良好的数据分析基础,这是学习熊猫作者迈克尔·海特。Michael 是一名程序员和培训师,写了多本关于数据科学和金融的书。这本书的一个优点是,它只关注熊猫的使用,不会让读者对许多库和概念感到困惑。
这本书采用*稳的学习轨迹来解决熊猫的一切问题,从安装库到获取数据(导入、读取、导出),处理杂乱的数据或使用复杂数据结构呈现的数据,分析数据,并找到模式以有效地将其可视化。
第三册:熊猫食谱:使用 Python 进行科学计算、时间序列分析和数据可视化的食谱
列表中的下一本书讲述了比前两本更高级的话题,那就是西奥多·彼得鲁的《熊猫食谱》。Teddy 是 Dunder Data 的创始人,这是一家培训和教育公司,致力于学习个人和公司如何更好、更高效地进行数据分析。
这本书从 Pandas 的基础知识开始,通过实际项目解释它,从 Pandas 中的数据类型到利用系列方法、基本数据框架方法,以及选择函数和可视化数据的优化。然后,为了跟上熊猫图书馆的更新, Matt Harrison 和 Theodore Petrou 联手发布了这本书的第二版, Pandas 1.x Cookbook 。
第四册:学习熊猫图书馆
《熊猫食谱》第二版的合著者之一马特·哈里森写了另一本关于熊猫的书,了解熊猫图书馆。Matt 希望为初学者编写一本简单、易于理解、数据量不大的书,这样他们就可以专注于学习数据分析技术和 Pandas 的功能,而不是使用特定的数据集。
由于这种简单性,通过阅读这本书,你可以很快学会熊猫的所有基本知识。这本书的主要重点是提供对熊猫数据框架的清晰理解,如何有效地使用它,并让我们一瞥熊猫在现实生活中的应用有多强大。
</5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204> [## 5 本 Python 书籍,让你的代码更上一层楼
towardsdatascience.com](/5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204)
第五册:熊猫为大家:Python 数据分析
最后但并非最不重要的是,丹尼尔·陈的书《熊猫为大家》。如果你是数据科学和编程的初学者,这本书非常棒。在本书中,Daniel 将带您并行学习 Python 和 Pandas,以有效利用您的时间。这本书更多的是指导你如何继续你的数据科学之旅。
因为这本书讲述了 Python 和 Pandas,所以有一些章节专门讲述了更多的编程概念,比如数据类型和函数,还有一些章节侧重于数据建模和操作。这本书的伟大之处在于各章之间的过渡看似流畅。最后,作者丹尼尔(Daniel)在 PyCon 2019 上举办了一场研讨会,利用本书中的材料帮助人们开始接触熊猫。
最后的想法
如果您曾经使用 Python 来构建和实现您的数据科学项目,那么您一定使用过 Pandas 库来读取、分析和讨论您的数据。如今,Pandas 是数据科学项目中使用的最著名的 Python 库之一。
</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)
因为 Pandas 是一个广泛使用的库,它处理实现的重要步骤,包括读取数据、清理数据、分析数据以及为处理做准备。如果这一步做错了或者其中有一些错误,那么项目的最终结果将受到严重影响。
知道如何有效地使用 Pandas 并学习它的技巧和诀窍可以在处理 missy 数据集时产生巨大的变化,减少麻烦。这就是为什么我认为每个数据科学家在投入项目之前都应该花一些时间来掌握这些工具,包括熊猫,只是为了更有效地利用他们的时间。
在这篇文章中,我与你分享了 5 本好书,它们将帮助你掌握熊猫图书馆,使处理你的数据变得轻而易举。我希望这些书或至少其中一本书对您的数据科学之旅有所帮助。
5 本书,让你的数据可视化技能更上一层楼
原文:https://towardsdatascience.com/5-books-to-take-your-data-visualization-skills-to-the-next-level-42565105377e?source=collection_archive---------21-----------------------
更好的可视化等于更好的沟通
爱德华·豪厄尔在 Unsplash 上拍摄的照片
数据科学最吸引我的一点是,它就像解决一个难题。原始数据是你的线索,其中有一些你需要揭示的秘密模式和趋势,以帮助你在未来做出更好的决策。发现这些模式和趋势基本上就是数据科学的全部内容。
我喜欢通过理解数据试图传达的故事来揭示这些模式。这是每个数据科学项目的首要步骤。当数据科学家第一次看到原始数据和一些需求时,您需要探索这些数据,并试图找出其中是否隐藏了什么。然后你将分析它,应用你的模型并获得一些结果。
有一项技能可以帮助你进行更好的初始数据分析并展示最终结果,那就是可视化。数据可视化是数据科学最关键和最具创造性的方面之一。知道使用什么样的可视化可以帮助您快速找到模式,或者花几个小时甚至几天的时间找到对数据有价值的见解。
</10-newsletters-you-need-to-subscribe-to-as-a-data-scientist-d12c7f33fbab>
这同样适用于展示你的发现。如果你使用正确的视觉化,你将更容易传达你的结果。因此,人们会更好更快地理解它们;因此,提高数据可视化技能绝对是一项值得做的工作。此外,它将帮助你更有效地完成你的工作。
作为一个书籍爱好者,我发展技能的最佳途径就是阅读关于该技能的书籍。因此,在本文中,我将向您推荐我最喜欢的数据可视化书籍,我相信这些书籍将帮助您将数据可视化游戏提升到一个新的水*。
№1:有效的数据可视化:针对正确数据的正确图表
让我们从斯蒂芬妮·d·h·常青树的一本书开始吧,她是一名研究人员,专注于帮助人们通过可视化和图表更好地交流他们的工作。她在这个榜单上的第一本书是 有效数据可视化:正确数据的正确图表 。
虽然,这本书的重点是使用 Excel 图表和图形来改善数据发现交流。你从阅读它中学到的经验可以应用到你正在使用的任何软件和可视化工具中。Evergreen 写的书最好的部分是她如何使用幽默和易于理解的方法来解释概念和传递不同的数据故事。
这本书涵盖了许多概念,从什么是成功的可视化到为您的数据选择正确的图表,颜色如何影响图表,以及如何更好地与您的同事或客户分享您的数据发现。
</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>
№2:用数据讲故事:商业专家数据可视化指南
接下来是 Cole Knafic 的 用数据讲故事:商务人士数据可视化指南 。这本书和它的实践续集将帮助你通过可视化学习令人信服的讲故事的基础。阅读这本书,你将学会如何利用你的数据,并让它讲述自己的故事。
这本书将带你通过步骤来创建吸引人的,信息丰富的,引人注目的可视化应用于现实生活中的问题。你将会学到情境在你的视觉化中的重要性,选择一种图表类型,消除不必要的信息,以及学习如何将你的观众的注意力转移到你的视觉化的要点上。
因此,如果你想知道如何将你的数据转化为高效和难忘的视觉效果,这本书将会给你提供你所需要的所有信息。
№3:数据可视化速写本
由 Stephanie Evergreen 写的另一本好书是 数据可视化速写本 。这本书是为我们这些喜欢在把东西变成视觉图形之前用手画草图的人而写的。它将带您浏览草图、仪表板、幻灯片设计和报告结构。
当我学习如何编码时,我喜欢先用笔和纸来解决它;这样做将有助于我更好地理解这个问题,并找到解决问题的新方法。这同样适用于可视化。这本书将向您展示如何创建一个好的组合,并在同一个信息图或仪表板中适合不同的图表。
№4:更好的数据可视化:学者、研究人员和书呆子指南
接下来是乔纳森·施瓦比什的一本书。经济学家和数据可视化作家。乔纳森的作品帮助你改善他们如何向同事、合作伙伴、客户和选民传达他们的工作和发现。上榜的书是 《更好的数据可视化:学者、研究人员和书呆子指南 。
今天,比以往任何时候,我们需要与世界分享的任何内容都需要可视化,以便传播和被他人理解。任何领域的一个重要分支都是研究。研究帮助我们提出新的算法和更好的解决方案。但是,从来没有人教过研究人员如何更好地展示他们的发现。
</5-books-to-help-you-master-the-pandas-library-acb5c305159b>
№5:共鸣:呈现改变观众的视觉故事
最后但同样重要的是,我一直最喜欢的一本书是传播专家南希·杜阿尔特的《共鸣:呈现改变观众的视觉故事》。创建数据可视化不仅仅是把漂亮的图表放在一起或者用颜色理论做实验;它是关于创建数据的可视化表示,以便您的观众和同事能够记住。
在本书中,Nancy 将教您如何通过使用故事原则来创建记忆数据可视化,如何将您的观众置于故事中,使他们与您的发现相关联,并以结构化、有效的方式与他们交流。
最后的想法
要成为一名优秀的数据科学家,你需要掌握一些技能,这些技能可能看起来不相关,但它们合在一起就构成了数据科学领域。这些技能包括编程、数据可视化、商业模式、数学和统计学。
当我开始我的数据科学之旅时,我需要学习或发展的大多数技能似乎都非常简单。但是,除了数据可视化,我觉得这种特殊的技能需要更多的创造力和视觉智能,我认为我不具备。但是,这让我比其他人更加努力地学习这项技能变得更加重要。
</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 本很棒的书,它们可以帮助你将数据可视化技能提升到一个新的水*,成为一个更好的沟通者。
你可以阅读的关于人工智能的 5 本书
原文:https://towardsdatascience.com/5-books-you-can-read-to-learn-about-artificial-intelligence-477b5a26277d?source=collection_archive---------9-----------------------
跟上时代
Pawel Czerwinski 在 Unsplash 上的照片
书,书,书!在我开始机器学习之旅之前,我从当地的 Waterstones 书店堆积了一堆关于人工智能的书籍。我的想法是尽可能多地收集关于人工智能潜力的知识,以及我是否认为这是我可以做的事情。
三年过去了,我成功地完成了从 post-man 到机器学习工程师的转变,现在我又回到了一些在我的旅程早期启发过我的书籍上。
这里有一些很棒的书,你可以拿起来学习人工智能。
主算法:对 Ulitmate 学习机的探索将如何重塑我们的世界
作者:佩德罗·多明戈斯
来源 : 亚马逊
对于那些害怕决策机器出现的人来说,佩德罗·多明戈斯非常清楚地表明,机器已经深深地融入我们的生活很长一段时间了。*心而论,这是有一定道理的。我们的生活是由算法运行的,当它消耗我们提供的数据时,这些算法正在学习更多关于我们的事情。一些很好的例子是 YouTube、网飞和谷歌。总的来说,这本书涵盖了对一种能够改变机器学习和我们生活的主算法的探索。
如何创造思维:揭示人类思维的秘密
作者:雷·库兹韦尔
来源 : 亚马逊
关于计算机是否能与人类智力相匹敌的观点可能正在慢慢改变。计算机在许多任务上已经超过了人类——玩 Jeopardy 和象棋就是一个很好的例子。埃隆·马斯克关于人工智能将在 2025 年超越人类的评论进一步推动了这一论点。雷·库兹韦尔(Ray Kurzweil)是早期相信人工智能可以超越人类智力的人之一,仅仅是基于模仿负责高阶思维的基本原则和神经网络相对简单的想法。这本书分享了他的见解。
超级智能:路径、危险、策略
作者:尼克·博斯特罗姆
来源 : 亚马逊
超智能计算机通常被描绘成一台肩负接管世界使命的机器。这个想法已经存在多年,但随着我们进入人工智能时代,许多问题正在被提出。尼克·博斯特罗姆试图回答“一旦我们设法制造出比我们更聪明的计算机,将会发生什么?”。他分享了他的想法,关于我们可能需要采取什么行动,它将如何工作,以及为什么必须以正确的方式来保护人类。
生活 3.0:成为人工智能时代的人类
作者:马克斯·泰格马克
来源 : 亚马逊
这本书以一个虚构团队(Omega)的故事开始,讲述了他们如何能够使用普罗米修斯(Prometheus)接管世界——一种超级智能的人工智能,可以学习和设计任何东西。起初,你会认为这本书会像许多关于人工智能的传统电影一样,但马克斯·泰格马克做了很好的工作来引导它的方向。他强调了人工智能的粒度以及它发生的速度。泰格马克认为人工智能可能会改变人类的未来,因此人类理解硬币的两面(赞成和反对)并参与定义我们想要的未来是至关重要的——如果你没有目标,你肯定会错过。
人工智能:关于我们的未来,你今天必须知道的 101 件事
作者 : Lasse Rouhiainen
来源 : 亚马逊
在这份书单上的所有书中,这是我唯一还没读过的一本书。我看到它在 Goodreads 上有很好的评价,就想把它捡起来。从我对这本书的收集来看,它涵盖了人工智能如何改善和改变我们的生活。一些章节包括:人工智能如何改变许多行业,人工智能如何改变我们所知的就业市场,以及机器人&它们将如何改变我们的生活。
最后的想法
很多书的存在是为了帮助你学习人工智能。在每本书中,不同的作者对人工智能对未来的影响都有自己的倾向。我个人的建议是尽可能多的阅读那些详细描述争论双方的书籍,并从中得出你自己的结论。
感谢阅读!
如果你喜欢这篇文章,请通过订阅我的**每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。**
相关文章
**</5-free-books-to-take-your-data-science-skills-to-the-next-level-a2026c8cad71> </4-data-related-books-ill-be-reading-in-april-efd06b367e35> https://medium.datadriveninvestor.com/machine-learning-engineers-must-read-these-5-books-583e81922b84 **
关于 Python Timedelta 的 5 个冷知识点
原文:https://towardsdatascience.com/5-cold-knowledge-points-about-python-timedelta-a791bbe4ed80?source=collection_archive---------20-----------------------
由 anncapictures 在 Pixabay 拍摄的照片
了解 datetime.timedelta 的功能范围
作为 Python 中最重要的内置库之一,“ datetime ”库是任何 Python 学习者的必学之作。在这个库中,表示时间间隔的“ timedelta ”是我最喜欢的模块。它提供了许多有用的功能,让我们能够实现开箱即用的特性,并实现使用模式的最大灵活性。毫无疑问,这个库可以成为任何开发者的“角色模块”,展示什么是“Pythonic”。
对于这样一个常见的库,我相信你一定用过或者已经掌握了。但是,仍然有一些关于“时间增量”模块的“冷知识”需要你去了解。它可能会帮助您在开发过程中节省大量时间。希望这篇文章能有所帮助。
from datetime import timedelta
导入此模块后,我们可以开始演示。
1.时间界限
照片由阳光照片在 Pixabay 拍摄
你应该知道使用 timedelta 定义时间间隔是非常容易的。例如,timedelta(days=1)
表示正好是一天的时间间隔。
但是,你知道 timedelta 其实是有边界的吗?我们可以按如下方式检查边界。
timedelta.min
timedelta.max
如果我们想定义一个超出界限的时间间隔呢?我们试试在上限上加一天。
timedelta(days=1) + timedelta.max
如图所示,Python 将抛出一个溢出异常,因为 timedelta 不是为处理那么长的时间间隔而设计的。它有多大?如果用 9999999999 天除以 365(粗略估计忽略闰年),大约是 275 万年。
嗯,如果我们不使用时间增量来计算一些关于恐龙的历史,那就足够了:)
2.时间分辨率
由 geralt 在 Pixabay 上拍摄的照片
众所周知,我们可以使用days
、hours
、minutes
、seconds
和microseconds
来定义使用时间增量的时间间隔。顺便说一下,我们不能使用超过days
的单位是有道理的,因为一个月可能有 28-31 天,而一年可能有 365 或 366 天。
但是,我们需要知道 timedelta 的分辨率是微秒。这意味着我们不能使用 timedelta 来处理纳秒。抱歉让物理学家和化学家失望了:)
事实上,我们可以通过调用 timedelta 模块的属性resolution
来获得这个最小分辨率。
如果我们试图让时间间隔小于分辨率呢?这里有一个例子。我们可以试着得到半微秒。
timedelta.resolution / 2
timedelta 对象将简单地变成零,这意味着在这个“间隔”中实际上没有时间跨度。这肯定是真的,因为我们可以通过在分裂后试图将其恢复到 1 微秒来证明这一点。
(timedelta(microseconds=1) / 2) * 2
它仍然是零,因为当我们除以它时,我们失去了它。
3.属性范围
由 Couleur 在 Pixabay 上拍摄的照片
在 timedelta 对象的实现中,days
、hours
、minutes
、seconds
、microseconds
是类属性。这些属性将有自己的有效范围。
这绝对有意义,因为我们知道 1 天只有 24 小时,1 小时包含 60 分钟。然而,即使我们定义了超出范围的 timedelta 对象,我们也不会触发溢出异常,也不会丢失超出的部分。它会自动转换成更高或更低的单位。
例如,如果我们定义一个 1000000 微秒的间隔,正好是 1 秒,我们将简单地得到一个等于 1 秒的间隔。
one_second = timedelta(microseconds=999999 + 1)
如果我们仅使用seconds
属性定义一个间隔,并使其超过 1 天,timedelta 将会很好地处理它。
one_day_and_one_second = timedelta(seconds=86401)
然而,属性seconds
是在时间增量中具有更高优先级的主要属性。这意味着只要间隔少于一天,timedelta 将使用seconds
来指示它,而不是使用hours
或minutes
。
three_thousands_six_hundred_seconds = timedelta(minutes=60)
4.时间增量的操作
由 StockSnap 在 Pixabay 上拍摄的照片
在这一节中,我想展示 timedelta 模块是如何灵活的。您几乎可以对 timedelta 对象应用任何类型的数值运算。在上一节中,我们已经定义了一些对象,这样我们就可以在演示中重用它们。
首先,减法会起作用并不会让人感到意外。
one_day = one_day_and_one_second - one_second
这也意味着我们可以像元素是数字一样转换方程。
assert one_day + one_second == one_day_and_one_second
assert one_day_and_one_second - one_day == one_second
我们可以用数字来乘或除时间间隔。比如 1 天 10 次就是 10 天。
one_day * 10
我们可以将时间间隔除以另一个。下面的例子显示了“一天有多少秒”。
one_day / one_second
如果我们想要一个整数,双斜线也给我们一个结果的“底数”。
one_day // one_second
我们甚至可以在 timedelta 对象之间进行模运算。
timedelta(seconds=5) % timedelta(seconds=2)
一些数字函数也可以应用于 timedelta 对象,比如获取绝对值。
abs(timedelta(days=-7))
当您正在获取两个 datetime 对象之间的“差异”并且不在乎哪一个是先例时,这将非常有帮助。
除秒以外的展*时间间隔
有时,出于比较或存储的目的,我们可能需要将时间间隔转换成统一的时间单位。大多数时候我们可以调用total_seconds()
函数将一个 timedelta 对象“展*”成秒。
one_day.total_seconds()
这其实相当于one_day / timedelta(seconds=1)
。因此,我们可以轻松地将 timedelta 对象展*为其他时间单位。例如:
one_day / timedelta(hours=1)
one_day / timedelta(microseconds=1)
5.字符串的时间增量
照片由 nattanan23 在 Pixabay 上拍摄
最后,不仅 datetime 对象可以方便地转换为字符串以供输出,timedelta 对象也可以。
str(timedelta(days=7, hours=10, seconds=30, microseconds=300000))
它可能不完全是您所期望的,因为我们每次开发的应用程序都有不同的需求。然而,这绝对是一种输出时间间隔的有效方法。
同样,我们可以使用类函数repr()
将对象输出为字符串。
repr(timedelta(days=7, hours=10, seconds=30, microseconds=300000))
摘要
由自由照片在 Pixabay 上拍摄的照片
在本文中,我假设您已经知道 Python 内置的 datetime 库中的 timedelta 模块。我试图组织一些知识点,这些知识点不太可能被每个开发人员,尤其是学习者所了解,并且在本文中有所解释,比如对象之间的边界和稀有操作。希望它能满足你的一些好奇心。
https://medium.com/@qiuyujx/membership
如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)
使用 Python 简化的 5 个常见 Excel 任务
原文:https://towardsdatascience.com/5-common-excel-tasks-simplified-with-python-feff966e73a4?source=collection_archive---------13-----------------------
使用 Pandas、OS 和 datetime 模块简化 Python 中的 Excel 任务。
照片由 Unsplash 上的 Mélody P 拍摄
我的第一份工作是做一些简单的 Excel 任务,这些任务在大范围内变得冗长而耗时。我可以手动完成所有这些工作,成为处理日常任务的专家,但是我决定学习 Python 来简化它们。
Excel 是处理数据的好工具,但在处理数百个需要修改的文件时有一些限制。这就是 Python 可以提供帮助的地方。
在本文中,我们将简化我(可能还有你)在工作中经常要做的 5 个 Excel 任务。
重要的事情先来
安装库
为了用 Python 简化这些 Excel 任务,我将使用 Pandas、OS 和 datetime。Python 默认自带最后两个库,而 Pandas 需要安装。为此,在您的终端中编写以下命令。
pip install pandas
在本文中,我假设您知道如何使用 Pandas 导入和导出 Excel 文件。但是如果你不知道怎么做,这里有一些方法:
import pandas as pd# Read an Excel file and save it to a dataframe
df = pd.read_excel(excel_file_path)... # (all the operations we'll do in this article)# Export dataframe to a new Excel file
df.to_excel(file_path, index=False)
数据
对于本指南,我使用了两个 Excel 文件,它们位于我的 Python 脚本所在的目录中。电子表格包含如下所示的虚拟数据。
这些数据并不相关。主要思想是所有的数据被分成多个块(Book1,Book2,Book3,…),我们的任务是对所有的数据执行操作。
您可以创建自己的虚拟数据,使用自己的 Excel 文件或从我的 Github 上下载这两个文件。将这些文件放在 Python 脚本所在的目录中。
1)用 Python 连接多个 Excel 文件
我们的第一个任务是将所有这些块合并到一个 Excel 文件中(假设我们想与老板共享所有数据)。
如果有 2 个 Excel 文件,这样做将像复制一个文件中的数据并粘贴到另一个文件中一样容易;然而,对数百个文件这样做是不切实际的。
一个简单的解决办法是使用熊猫。
import os
import pandas as pdmy_list = []
for file in os.listdir():
if file.endswith('.xlsx'):
df = pd.read_excel(file)
my_list.append(df)
df_concat = pd.concat(my_list, axis=0)
df_concat.to_excel('concatenate.xlsx', index=False)
首先,我们用os.listdir()
列出当前目录下的所有文件。然后我们用.endswith(‘.xlsx’)
方法过滤掉文件。
所有的 Excel 文件将被存储到一个名为my_list
的列表中,然后与返回一个我们称之为df_concat
的数据帧的pd.concat()
相结合。该数据帧被导出到 Excel 文件中。
注意,如果使用逗号分隔值(CSV 文件),可以使用read_csv()
和to_csv()
2)使用 Python 更改多个 CSV 文件的名称或扩展名
CSV 是一种常用的文件扩展名,用于存储和读取数据。可以用 Excel 打开,在工作中广泛使用。
我经常需要重命名 CSV 文件,这样任何人都可以很容易地识别它们(例如,在名称的开头添加日期),并且还必须进行转换。csv 文件到。txt 文件,反之亦然,
两者都是简单的任务,但是当处理数百个文件时,它们就变得令人头疼了。幸运的是,我使用下面代码所示的.split()
和os.rename()
方法在几秒钟内完成了这些任务。
import os
import datetime# 1.Getting the current date in YYYYMMDD format
today = datetime.date.today()
today_str = today.strftime('%Y%m%d')# 2.Adding date and changing extension to CSV files within directory
for file in os.listdir():
if file.endswith('.csv'):
file_name, file_extension = file.split('.')
new_file_name = f'{today_str}_{file_name}'
new_extension = '.txt'
new_name = f'{new_file_name}{new_extension}'
os.rename(file, new_name)
首先,我们必须使用 datetime 模块来获取当前日期,并按照我们的要求对其进行格式化(在本例中是年、月、日)。
然后我们过滤掉 CSV 之外的文件,每次文件名到达一个点号(.),所以我们把扩展名和文件名分开。我们用 f 字符串(f’’)
连接名称,并用os.rename()
重命名文件。这将当前文件作为第一个参数,新名称作为第二个参数
3)在 Python 中左右使用 Excel 的字符串函数
想象一下,在我们之前见过的电子表格中,您必须将国家代码添加到“号码”列的每个电话号码中。
我们可以对每个文件执行 Excel 的 LEFT 函数,但这会花费很多时间。相反,我们可以使用 for 循环,将每个 Excel 文件读入 Pandas dataframe,然后使用lambda
和 f-string 将国家代码添加到每个电话号码中。
import os
import pandas as pdfor file in os.listdir():
if file.endswith('.xlsx'):
file_name = file.split('.')[0]
df = pd.read_excel(file)
df = df.astype({'Number': str})
df['Number'] = df['Number'].apply(lambda x: f'44{x}')
df.to_excel(f'country_code_{file_name}.xlsx', index=False)
如果我们一起使用apply
和lambda
函数,我们可以修改列中的值。在本例中,我在“Number”列中每个值的开头添加了“44”代码。注意,我们必须确保列“Number”中的值是 string (str ),所以我们使用了.astype()
方法来更改数据类型。
最后,我们将数据帧导出到一个名称中包含单词“country_code”的新 Excel 文件中。
4)删除列中的重复项并删除 NaN 值
在 Excel 中执行的一些基本数据清理,如删除重复项和 NaN 值,可以通过 Pandas 轻松完成。
您可以使用.drop_duplicates().
轻松删除基于所有列的重复行
df = df.drop_duplicates()
但是如果您想要删除特定列上的重复项,请添加subset
参数。假设我们想删除“数字”列中的重复项。
df = df.drop_duplicates(subset=['Number'])
另一方面,通过.dropna()
可以降低 NaN 值
df = df.dropna(subset=[‘column_name’])
也可以替换空值,而不是删除整行。假设我们想用零替换空值。
df = df.fillna(0)
除此之外,还可以用高于(向前填充)或低于(向后填充)一行的值来填充这些空值。
# Forward filling
df.fillna(method='ffill')# Backwards filling
df.fillna(method='bfill')
5)排序值
对熊猫数据框架进行排序就像对 Excel 电子表格进行排序一样简单。我们只需使用.sort_values()
并指定升序或降序(ascending=True, ascending=False)
以及排序所依据的列。
df = df.sort_values(ascending=True, by=['Year'])
如果我们想保存更改,而不需要像上面显示的那样将值设置为等于df
,我们可以使用inplace
参数
df.sort_values(ascending=True, by=['Number'], inplace=True)
就是这样!这是我们在工作中可能遇到的 5 个常见任务,可以用 Python 简化。如果你是一个 Excel 用户,想使用 Python/Pandas,请查看下面的指南。
与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)
如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑报名成为一名媒体成员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你使用我的链接注册,我会赚一小笔佣金,不需要你额外付费。
https://frank-andrade.medium.com/membership
关于线性回归的 5 个常见误解
原文:https://towardsdatascience.com/5-common-misconceptions-about-linear-regressions-7fe5b64ecedf?source=collection_archive---------13-----------------------
Python 中的示例
艾米丽·莫特在 Unsplash 上的照片
只要问题允许,我非常支持使用简单的模型。这一切都是有趣的,是与花哨的神经网络的游戏,但是如果古老的线性回归能够完成工作,为什么不使用它呢?
然而,线性回归是一个看似简单的概念,它有两个问题:
- 这个理论是经常低估——你认为你知道事情是如何运作的,因为你已经使用它们几百次了;
- 模型很容易上手,所以题目素材很多,每个人都有自己的看法,虚假信息传播超级**。**
在这篇文章中,我将谈论 5 个我“最喜欢的”关于线性回归的误解。希望你能找到以前没有考虑过的东西。
下面是 Python 中的一些例子,如果你想了解代码,这些是你需要的唯一的库:
**import** numpy **as** np
**from** sklearn.linear_model **import** LinearRegression
**from** sklearn.metrics **import** r2_score
**from** scipy **import** stats
误解 1:线性回归=普通最小二乘法
我们的第一个误解是关于术语:人们倾向于将线性回归和 OLS 方法作为同义词。线性回归就是问题本身,当我们假设一个因变量和一个或多个自变量之间存在线性关系,而 OLS 就是众多可用估计方法中的一种。估计参数的其他方法有最小绝对偏差、套索和岭回归。
OLS vs LAD 估计
请看左边的图表。两者之间的线性关系以红色显示。蓝色和绿色分别是 OLS 和拉德估计的关系,你不能肯定地宣布他们中的任何一个更好。(Lasso 和 ridge 将给出与单因素回归中的 OLS 相同的结果。)
我不得不承认,草率地使用这些术语是我对自己的愧疚:我最*发表了一篇关于套索和岭回归的文章,我一直在区分它们和“线性回归”,而事实上它们都是线性回归。(在我的辩护中,sklearn 称相应的模型为线性回归、套索和山脊。)
顺便说一下,在这篇文章的其余部分,我们将重点关注 OLS 方法,尤其是它的假设。
总结:线性回归可以用多种方法和假设来求解,其中之一就是普通最小二乘法。它们不是同义词。
误解 2:多重共线性是世界末日
多重共线性指线性回归中独立变量之间的高度相关性。它有时被认为是一个严重的问题,是一个必须解决的问题,这样模型才能发挥作用。但是,多重共线性只会导致单个系数估计值的可靠性和可解释性降低,模型的预测力不会受到影响。
**缺乏多重共线性不是 OLS 的假设。**事实上,它没有对自变量之间的关系做任何假设,除了一点:变量必须是独立的。换句话说,它们之间不可能存在完美的多重共线性。
我们来看两个例子,首先高相关性会发生什么,然后我们会看到为什么变量之间不能有一个完美的线性关系。
示例 1:高相关性
我们需要生成两个相关的独立变量。我不想使用正态变量,借用了的代码,从两个相关的均匀分布中生成样本。我们需要一个相对较高的相关度来进行演示,让我们将它设置为 0.9。
number_of_obs = 1000
np.random.seed(my_seed)mvnorm = stats.multivariate_normal(mean=[0, 0], cov=[[1., 0.9],
[0.9, 1.]])
X_norm = mvnorm.rvs(number_of_obs)
X = stats.norm().cdf(X_norm)
X1 = X[:,0]
X2 = X[:,1]
我们可以检查这些是否确实相关:
np.corrcoef(X1,X2)
将返回:
array([[1\. , 0.89713787],
[0.89713787, 1\. ]])
这一点得到了证实。
接下来,我们需要通过添加模拟残差来生成因变量,并构造一些系数:
residuals = stats.norm(loc = 0, scale = 1).rvs(number_of_obs)
y = 30 * X1 - 10 * X2 + residuals
接下来,让我们看看 sklearn 的线性回归模型如何处理高相关性:
lr = LinearRegression()
lr.fit(X,y)
lr.coef_
将返回:
array([ 30.36959656, -10.55232467])
估计的系数非常接*实际系数。如果重新运行残差和 y 代,会看到结果会在[30, -10]
附*震荡。
我觉得一部分困惑来自于X2
的系数为负的部分。现在,我们知道那是正确的,因为那就是我们最初如何产生y
的!
但是,如果只看数据本身,可能会产生误导。在左边的图表中,你可以观察到X2
和y
之间非常明显的正相关关系。但那种效果只是通过X1
,与X2
高度相关。如果X1
也在图片中,那么X2
本身对y
有负面影响,我们再一次在生成数据时看到了这一点。
在继续之前,让我们考虑一个现实生活中的例子。假设 X1 是房产的总面积,X2 是卫生间的数量,y 是价格。在这样的例子中,您通常会得到浴室的负系数,然后您通常会听到有人说*“难怪,总面积和卧室之间存在多重共线性,它必须从模型中清除,我们必须忽略浴室变量”*。
但实际上,这个结果难道没有某种意义吗?我们必须记住,系数影响是其他条件不变的影响,所以其他一切都假设保持稳定。如果我们假设房子的总面积不变,并不断增加越来越多的浴室,这将很快成为一个非常怪异的房子,成本会更低,对不对?因此,如果整体尺寸也存在于模型中,浴室系数为负可能并不是世界上最愚蠢的事情。
示例 2:完美多重共线性
剩下的第二个问题是:如果变量之间确实存在完美的多重共线性,会发生什么?
让我们用两个完全相关的变量生成一个简单的例子:
obs_no = 100
np.random.seed(my_seed)
X1 = np.random.uniform(0,100,obs_no)
X2 = 2 * X1
residuals = np.random.normal(0,1,obs_no)
y = X1 + X2 + residuals
很容易看出这里的问题是什么:有无限可能的解决方案。我们将X1
和X2
的系数分别定义为 1 和 1,但是例如,3 和 0 也可以。OLS 实际上有一个封闭的解决方案,这涉及到一个矩阵求逆,如果矩阵的列秩不是满的,就不能这样做。
继续上面的例子,这就是在 numpy 中从头开始求解 OLS 的方法:
intercept = np.ones(obs_no)
X = np.vstack((X1, X2, intercept)).T
Xt = X.T
XtX = Xt.dot(X)
XtX_inv = np.linalg.inv(XtX)
Xty = Xt.dot(y)
coeff = XtX_inv.dot(Xty)
y_pred = X.dot(coeff)
这在常规情况下是可行的,请注意,您必须手动添加截距,并且需要相应地解释系数。然而,现在,你会得到一个错误:
所以再一次,你不能有完美多重共线性的原因是你不能对自变量的矩阵求逆。
Sklearn 与完美多重共线性
如果你和我一样,你可能会想:好吧,你不应该这样做,但是如果我们把这样的数据放入 sklearn 会发生什么?
继续上面的例子,没有 numpy 部分:
X = np.vstack((X1, X2)).T
lr = LinearRegression()
lr.fit(X, y)
lr.coef_
将返回:
array([0.60023761, 1.20047523])
看起来是随机的。但这实际上是可能的解决方案之一:
lr.coef_[1] * 2 + lr.coef_[0]
将返回 3。当您重新运行lr.fit()
行时,您将得到不同的系数,但是它们的加权和将接*于 3。
那么是什么原因呢?我以为矩阵是不能求逆的!
事实证明,矩阵求逆是一项非常昂贵的操作,sklearn 中的线性回归模型使用了一种*似估计(梯度下降)。这种方法足以找到正确的解决方案。(还是不应该做,结果真的很不稳定很诡异,再加上你应该注意到你的变量之间有这样的关系。)
总结 : OLS 不假设自变量之间低相关,但它们不可能有完美的多重共线性。
误解 3:你的变量必须正态分布
我认为这里混乱的来源是你可以阅读像*“y 被假定为正常”*这样的东西,在某种程度上,这是真的,但很容易对术语感到草率。
简单的回答是,我们假设唯一正常的是残差,X 和 y 的分布可以是任意的。然而,y 取的单个值也被假定为正态分布的随机变量。
让我们考虑一个例子。我们想用房子的大小来解释它的价格。这恰好是“真正的”模型,所以其他任何东西对价格都没有影响。如果我们随后看到两栋同样大小的不同房子,模型会预测出同样的价格。但是,它们的观察价格可能不同。再说一次,这不是因为我们在这个简单的例子中遗漏了任何其他因素,我们确实知道“真实”的模型。价格不同的原因是残差,它被添加到线性回归的另一个因子中。因此,具有一定大小的房子的价格也将是一个正态变量,期望值将来自大小和可能的截距,方差将由残差决定。这并不意味着如果我们把观察到的价格放在一起,它们应该是正常的。
另一个混淆的来源可能是看到像取对数正态、*方根等东西。任何变量。这与正态假设无关,它只是一种使自变量和因变量之间的关系“更加线性”的方法。这是一个尝试和观察什么有效的问题。
总结:残差假设为正态,因变量或自变量不为正态。
旁注 :其实连残差正态性都不是 OLS 方法的固定假设,详情查看其 维基百科页面 。如果残差是正态的,OLS 是最大似然估计量,但是技术上你可以不用这个假设做 OLS。唯一发生的事情是,估计量会得到不同的统计性质。我认为很容易把线性回归想成一套记住的 4-5 条规则,但它比那要复杂得多。
误解 4:你必须标准化
你不必为了 OLS 估计而标准化/规范化你的变量。线性函数对模型的预测力没有影响。系数和截距会相应改变,但仅此而已。
如果你的变量在很大程度上不同,你可能想要标准化,并且你想要容易地比较系数。
然而,我发现有一点被忽略了,那就是对于任何正则化技术(套索、脊、弹性网),你绝对必须标准化 独立变量,否则正则化将毫无意义。因变量仍然不需要任何调整。
应用标准化的一个快速方法是 sklearn 的标准定标器。
总结:OLS 方法没有必要标准化。然而,当使用任何正则化方法时,你必须标准化独立变量。
误解 5:你的模型应该渴望达到 R = 1
你可能有过这样的经历,当你满怀希望地开始一个线性回归问题时,却发现你的 R 离 1 非常远。但这真的是一个大问题吗?
和大多数事情一样,答案是:视情况而定。有些人甚至说 R 高达 0.9 是非常可疑的,很可能意味着你使用了一个不应该使用的变量。要记住的主要一点是,R 给你一个粗略的概念,告诉你你的预测有多精确,但是不告诉你你是否找到了正确的模型。所以,是的,低 R 可能意味着你应该小心处理模型的预测,但不一定意味着你必须寻找一个更好的模型。
让我们考虑一下这个值的实际变化。r 定义为:
其中 SSres ,残差*方和来自实际值和预测值:
和 SStot ,总*方和来自实际值和实际值的*均值:
很容易看出,为了使 R 为 1,你的 SSres 必须为 0,这意味着所有的残差必须为零。所以你必须找到一个完美的线性关系才能得到 R = 1。不用说,这种情况几乎不会发生,线性回归也不应该这样。
让我们生成一个示例,以便能够更好地掌握分数的大小。为了简单起见,y 等于 1 * X 加上一个剩余因子:
number_of_obs = 1000
np.random.seed(my_seed)
X = np.random.uniform(0, 100, number_of_obs)
residuals = np.random.normal(0, 20, number_of_obs)
y = X + residuals
我们将跳过拟合模型的部分,假设我们找到了可能的最佳估计值,因此 y 被预测为 x。让我们计算 R:
y_avg = np.mean(y)
SStot = sum((y - y_avg)**2)
SSres = sum((y - X)**2)
print("SStot: %i" % SStot)
print("SSres: %i" % SSres)
print("R2: %.5f" % (1-SSres/SStot))
结果是:
SStot: 1249503
SSres: 407976
R2: 0.67349
(我们可以用r2_score(y, X)
复核公式,结果是一样的。)
在左边的图表中,你可以看到 0.67 的 R 是什么样子的。X 轴有预测的 y 值(或实际的 X 值,在我们的例子中它们是相同的),y 轴是实际的 y 值。
我们必须记住,这是我们能为这个例子建立的最好的模型!没有更好的线性回归了。
这个例子也很方便地展示了不同参数对 R:
- 增加样本量(在我们的例子中是 1000)将产生最小的影响,R 收敛到一个稳定的值;
- 增加残差的方差(20)将通过增加 SSres 来减少 R;
- 通过增加 SStot 来增加均匀自变量的取值范围(100)将会增加 R。
还有一点:OLS 将最小化 SSres (即最小二乘法中的“*方”),并且 SStot 对于给定的一组观测值是恒定的。因此,OLS 适合将最大化 R 的训练集。
总结 : R 要小心处理。该指标可让您大致了解模型的预测力度,但不会告诉您离理想模型有多*。R = 1 实际上不应该发生,高 R 应该引起怀疑。
摘要
现在你知道了,我看到的 5 个错误观念被抛向四周,我希望你能发现一些新的东西。我认为主要的收获是知道线性回归和普通最小二乘法比很多人想象的要复杂。
如果你仍然认为你对所有事情都完全清楚的话,看看 OLS 的维基百科页面。
最后一件事:如果你认为我对自己的误解有任何误解,请告诉我。
5 个常见的简历错误
原文:https://towardsdatascience.com/5-common-resume-mistakes-831e8b3e360d?source=collection_archive---------19-----------------------
通过查看数百份数据科学简历
由 Unsplash 上的 krakenimages 拍摄的照片
记得从学校毕业,整理了一份简历,不断在想自己的简历是不是“好”。想知道什么能让一份简历变得优秀是很难的,但是在阅读了数百份数据科学简历后,我想指出我经常看到的 5 个错误。如果你能避免这些错误,你将会在简历中取得巨大的进步。
所以,这里有 5 个常见的简历错误:
1.使用非标准简历模板
我发现越来越多的人试图让自己的简历与众不同。技能图表或个人风格之类的东西虽然看起来很酷,但往往会分散注意力。商业内幕对两种简历格式进行了比较,并追踪了招聘人员的眼球运动。结果如下:
右边的简历,格式更规范清晰,观察得更透彻。招聘人员要分析数百份简历。你希望你的简历尽可能让人感觉熟悉,这样招聘人员就可以快速有效地找到他们想要的信息。
2.添加过多的绒毛
当我毕业的时候,我的经验很少,我记得我觉得我必须尽我所能让我的简历看起来“充实”我想我的希望是,如果我的简历更密集,我会看起来更有经验。我现在意识到那是个错误。
再说一遍——招聘人员和招聘经理没有太多时间。他们不想阅读不相关的工作或者不太鼓舞人心的工作经历。你应该确保你的简历尽可能清晰地聚焦在你最引以为傲的事情上——你认为是什么让你非常适合这份工作。
很多时候,我看完简历,没有什么特别的东西真正吸引我。确保你把简历上的绒毛去掉,这样即使快速阅读,招聘经理也能清楚地看到是什么让你非常适合这个职位。在我看来,这意味着你永远不应该有一份超过 1 页的简历。即使有几十年的经验,我认为人们可以在一页中总结出真正需要知道的内容。
3.在不应该的时候列举技能
我明白了——你为了一个项目上了一门课,学了一些 C++。这份工作提到 C++是一项有益的技能,那么为什么不把它加入你的简历呢?为什么不把你曾经编写过“Hello World”的所有编程语言都加进去呢?
虽然通常没有那么极端,但是要小心地列出一个你已经有非常基本知识的技能清单。简历上列出的任何东西都是自由提问的游戏,当你的 C++知识被证明只限于几行代码时,这看起来很糟糕。所以,试着对自己诚实,只添加你觉得相当熟练的技能。这并不是说你必须成为你所列举的所有领域的专家,但是你应该能够自如地回答与你的技能相关的面试问题。
费利克斯·林在 Unsplash 上拍摄的照片
4.不给非标准体验留出空间
有时候在面试候选人的时候,他们的经历会变得非常相关,但是却不在他们的简历上。通常,这是因为这段经历与之前的工作经历或教育背景不太相符。
例如,可能是一个附带项目或开源贡献。确保你为那些让你觉得自己非常适合这份工作的经历腾出空间。如第二点所述,去掉绒毛,为你的这些非标准体验腾出空间。它们有望让你在所有简历中脱颖而出。
5.过于依赖学校项目
学校项目很棒,可以帮你学到很多东西。不幸的是,他们倾向于漂亮的锅炉板,真正的缺点是,许多其他人也这样做了。如果你的简历上列出了一大堆你知道其他人也做过的学校项目,很可能招聘人员以前见过它们,并且在阅读你的简历时基本上只是敷衍了事。
照片由乔纳斯·雅各布森在 Unsplash 上拍摄
6.额外收获:基本上是空的 GitHub
一个强大的 GitHub 帐户是一件令人惊讶的事情,可以列在你的简历上。我喜欢看候选人的 GitHub 简介,因为我可以立即看到他们做过的代码和项目的例子。我强烈建议人们找时间在 GitHub 上做几个他们引以为豪的项目——这对帮助你脱颖而出大有帮助。
也就是说,列出一个基本上是空的 GitHub 账户并不是一个好主意。如果你有一个推动你的一个学校项目,这实际上不是很多代码,可能不是你引以为豪的代码,也许不要把你的 GitHub 放在你的简历上。如果你的 GitHub 是空的,一定要跳过它(你会惊讶我经常看到这个)。
我希望这有助于你完善你的简历!
获取您的免费指南来创建一个令人惊叹的数据科学项目。
5 个常见的 SQL 问题让你崩溃
原文:https://towardsdatascience.com/5-common-sql-problems-for-you-to-crush-10a796258643?source=collection_archive---------27-----------------------
详细了解这些问题,并了解解决这些问题的方法
Diana Polekhina 在 Unsplash 上拍摄的照片
对于任何数据科学家来说,拥有出色的 SQL 技能都是一项资产。学习新概念和彻底修改它们都可以通过挑选和解决该领域中的一些常见问题来完成。
在这篇文章中,我将转述 5 个这样的问题,它们是我从 LeetCode 中精选出来的,我将描述他们想要什么,并列出解决它们的方法。带着这些问题,我还希望涵盖一些你应该知道(并修改)的基本概念,以及一些高级的查询方法,这些方法在准备面试时有助于记忆,或者只是增加你的 SQL 知识。
我们开始吧👇
1.合并两张桌子
**问:**您得到了两个表——Person
和Address
,并被要求编写 SQL 查询来报告Person
表中每个人的名字、姓氏、城市和州。
(如果personId
的地址不在Address
表中,则报告null
。)
链接到问题。
**Your Output:**
+-----------+----------+---------------+----------+
| firstName | lastName | city | state |
+-----------+----------+---------------+----------+
| Allen | Wang | Null | Null |
| Bob | Alice | New York City | New York |
+-----------+----------+---------------+----------+
方法:
最简单的解决方法是使用连接的概念。但是,您可能需要决定在这里应该使用哪个连接。
请记住——由于我们需要将城市和州列的值报告为 null,而对于没有该值的行,我们应该直觉地认为这里需要的是左连接。
因此,执行一个简单的左连接,我们可以在 MySQL 中编写以下查询:
select a.firstName, a.lastName, b.city, b.state
from Person a
left join Address b
on a.personId = b.personId;
请注意,我们需要将 Address 表中的外键与 Person 表进行匹配,以便获得每个人所在的城市和州列。
2.从不点餐的顾客
**问:**问题中有两个表——Customers
和Orders
。您的任务是编写一个 SQL 查询来报告所有从不订购任何东西的客户。
链接到问题。
**Your output:** +-----------+
| Customers |
+-----------+
| Henry |
| Max |
+-----------+
方法:
1 号:使用WHERE NOT EXISTS
条款:
首先,作为一个子查询,我们希望从 Orders 表中选择 Customers 表中的客户 id 与 Orders 表中的客户 id 相匹配的所有行。这意味着—我们将选择至少下过一次订单的所有客户。
现在,在主查询中,我们可以简单地不选择那些客户(行)来产生输出。这是借助于 NOT EXISTS 子句完成的。
select c.name as 'Customers'
from Customers c
where not exists
(
select null
from Orders o
where c.id = o.customerId
);
No 2: 使用NOT IN
关键字:
有一种更慢的方法可以做到这一点,我们可以轻松地从 Order 表中选择所有客户 id,并从 Customers 表中选择子查询结果中没有的所有客户。
select c.name as 'Customers'
from Customers c
where c.id not in
(
select customerId from Orders
);
3.第二高的薪水
**问:**我们的任务是找出给定的Employee
表中第二高的薪水。如果没有第二高的薪水,查询应该输出null
。
链接到问题。
**Your output:**+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
方法:
No 1: 解决这个问题最简单的方法就是借助**limit**
和**offset**
关键词。
我们将从表中选择所有不同的薪金,按降序对它们进行排序,并将输出限制为 1,因此我们只获得 1 份薪金,最后,我们将降序偏移 1,这意味着我们选择的不是最高的薪金,而是第二高的薪金。大概是这样的:
select distinct e.salary as SecondHighestSalary
from Employee e
order by e.salary desc
limit 1 offset 1
No 2: 另一种解决方法是使用 SQL 中的**Max()**
函数。
在子查询中,我们从雇员表中选择最高工资。最后,我们从这个子查询的输出中选择最大的薪水,并将其作为最终的输出——现在是第二高的薪水。
select max(e.salary) as SecondHighestSalary
from Employee e
where e.salary < (select max(salary) from Employee );
4.重复电子邮件
**问:**我们被要求根据Person
表找出所有重复的电子邮件。
L 墨迹到问题。
**Your output:**+---------+
| Email |
+---------+
| a@b.com |
+---------+
方法:
我们可以通过确保我们理解的第一件事来解决这个问题,即对于选择副本,我们对任何一种电子邮件的计数都应该大于 1。话虽如此,我们只想将电子邮件作为输出,最好的方法是使用“**Group by**
”和“**Having**
”关键字。
select p.email
from Person p
group by email
having count(p.email) > 1;
5.温度上升
**问:**给定Weather
表,我们想要编写一个 SQL 查询来查找与之前的日期相比温度更高的所有日期。
链接到问题。
**Your output:**+----+
| id |
+----+
| 2 |
| 4 |
+----+
方法:
问题的核心在于确保相邻的日期不是温度升高的日期。所以,为了解决这个问题,我们可以使用**Datediff(date1, date2)**
函数。
请注意,我们只需要在输出表中显示较高的 dateId。因此,在我们的查询中,我们将确保只选择温度较高的日期,例如 w2,如下所示:
select w2.id
from Weather w1, Weather w2
where w2.temperature > w1.temperature
and datediff(w2.recordDate, w1.recordDate) = 1;
接下来,我们希望将 w2 温度与之前的实例进行比较,因此我们采用另一个变量 w1。然后,我们应用两个Where
条件:首先,我们确保 w2 的温度高于 w1 的温度。其次,我们确保日期差异只有 1 天。因此,我们已经成功地构建了我们的查询!
几句临别赠言…
这就是 5 个非常值得了解的问题的列表,我希望它有助于您理解或修改编写更好的查询来解决问题的一些核心概念。
将来,我会回来撰写更多基于 SQL 的文章。所以跟着我留在圈子里!
我还建议成为一名中等会员,不要错过我每周发表的任何一篇数据科学文章。在此加入👇
https://ipom.medium.com/membership/
接通电话!
关注我 推特 。 查看我所有数据科学帖子的完整代码库!
我的另外几篇文章你可能会感兴趣:
https://medium.datadriveninvestor.com/5-interesting-data-science-projects-to-level-up-your-portfolio-f4d88c181061
帮助您找到数据科学导师的 5 个社区
原文:https://towardsdatascience.com/5-communities-to-help-you-find-a-data-science-mentor-22a380a5f853?source=collection_archive---------11-----------------------
获得成功所需的指导和支持
拉格斯技术人员在 Unsplash 上拍摄的照片
一个人可以通过不同的方式进入技术领域,尤其是数据科学领域。例如,如果你很年轻,你可以去学校获得数据科学学位,或者你可以节省金钱和时间,参加一个训练营,教你找到工作所需的所有知识。或者你也可以,大多数人都是这么做的,在网上找资料,给自己定一个时间线,自学自己需要了解的信息。
尽管这些方法各有利弊,但无论你决定走哪条路,你都会发现自己在某个时候处于同样的境地。例如,当你考虑换一个领域,学习一项新技能,或者找到你的第一份工作时,你会经常感到失落,不知道该做什么或者该采取什么步骤来达到你的最终目标。
根据你进入数据科学的具体方式,找人帮助你导航你的学习之旅,之后,你的求职之旅将在难度上有所不同。在数据科学或任何其他领域,有一个指导你选择不同职业的导师可以帮助你快速起步并建立成功的职业生涯。
</10-newsletters-you-need-to-subscribe-to-as-a-data-scientist-d12c7f33fbab>
我可以诚实地说,如果没有那些通过学习数据科学和探索不同职业选择来指导、支持和引导我的人,我不会有今天的成就。此外,因为他们在该领域有更多的经验,他们帮助我看到了我因为对该领域陌生而没有看到的方面。
棘手的是,这个领域的大多数新人,甚至是那些已经学习了一段时间的人,都不知道去哪里找导师,也不知道该怎么做才能有一个导师。这就是这篇文章的目的。在这篇文章中,我将带你浏览 5 个网站,它们可以帮助你免费找到能帮助你发挥全部潜力的导师。
№1: GDEXA
当我们学习一项新技能时,我们经常会学到的技能和我们得到想要的工作所需的技能之间往往有很大的差距。 GDEXA 意识到了这一差距,并试图通过提供免费的全球导师计划来缩小这一差距,行业专家将帮助新手和学习者驾驭这一领域。
要成为该导师计划的一员,您只需通过网站申请,与 GDEXA 团队取得联系,然后与导师匹配,导师将为您提供一对一的会议,帮助您更好地选择职业。GDEXA 为数据科学背后的各种技术领域提供指导。
№2:大数据中的女性
接下来是一个由女性为少数民族和 Bigdata 中没有代表的人建立的社区。 Women in Bigdata 是一个为女性和少数族裔提供大量帮助的社区,帮助她们更好地了解该领域,并发展建立成功职业所需的坚实技术和软技能。他们为此所做的努力之一是向新来者提供指导。
因此,通过参加 BigData 中由女性举办的活动和网络研讨会,您将有机会结识各种了不起的女性,她们在职业生涯中取得了成功,并愿意帮助您导航您的旅程,直到您达到目标。
</5-online-data-science-courses-you-can-finish-in-1-day-5b60f353fa8e>
№3:编写数据科学章节的女性
另一个由女性为所有对数据科学感兴趣的人建立的伟大社区是编写数据科学代码的女性分会。这一章是一个学习数据科学的好地方,从技术技能到职业建议。但是对于今天的文章,我想谈谈他们的 Bytes n' Brew 月度活动。
Bytes n' Brew 是一个社交活动,旨在加入社区,一起谈论该领域的各个方面,从如何开始您的旅程,如何在该领域建立联系,还可以询问其他社区成员如何成为您的导师。要知道下一个 Bytes n' Brew 什么时候会出现,你可以加入社区的 Slack workspace 。
№4:导师俱乐部
名单上的下一个是一个很好的资源,指导俱乐部。指导俱乐部是一个由导师组成的社区,他们为任何需要帮助的人提供时间和专业知识。这个网站有数百名不同技术领域的导师,包括数据科学。你所需要做的就是选择你想和导师名单上的人交谈,准备好你的问题,然后伸出手。
这个网站最棒的地方在于,你可以浏览导师、他们目前的职位以及他们的专业知识,然后安排一次与他们的会面,向他们询问你所有的问题,以帮助指导你做出更好的职业决策。
</9-discord-servers-for-math-python-and-data-science-you-need-to-join-today-34214b93d6b8> [## 9 台用于数学、Python 和数据科学的 Discord 服务器,您需要立即加入
towardsdatascience.com](/9-discord-servers-for-math-python-and-data-science-you-need-to-join-today-34214b93d6b8)
№5:数据中的女性
作为一名科技界女性,我总是支持其他女性,所以另一个欢迎任何人的女性社区是女性数据。该社区举办许多活动,包括年度会议,并提供许多资源来学习和获得数据科学领域的最佳成果。
但是,为了这篇文章,我将介绍一下他们的免费 6 个月导师计划,该计划旨在通过提供职业建议、技术支持和每周生活辅导课程,赋予女性权力,并帮助她们在数据科学领域获得最佳职业。
最后的想法
当我们开始一个新的职业,现在的工作,或者只是经历我们的日常学习旅程时,我们都需要一些支持和指导。特别是在科技领域,有一个指导你学习新技能、写简历、建立投资组合、找工作、准备面试和谈判薪资的导师可以让你更容易完成所有这些步骤,成功的几率也更高。
</6-data-science-slack-workshops-you-need-to-join-b0c00952105d>
当我试图学习一项新技能或申请某个工作角色时,我会试图找到已经掌握该技能或在该工作角色中取得成功的人,并请他们帮助我完成我的旅程。在大多数情况下,我会找到善良的人,他们愿意帮助和回报社区,因为在某些时候,他们利用社区的支持达到了现在的位置。
所以,如果你曾经感到失落,不知道下一步应该做什么,或者只是需要有人谈论你的恐惧或希望,我希望你使用我在本文中提到的网站和社区之一来找到一位导师,这将帮助你发挥你的全部职业潜力。
贝叶斯统计的 5 个具体好处
原文:https://towardsdatascience.com/5-concrete-benefits-of-bayesian-statistics-9acae2a8ae0d?source=collection_archive---------5-----------------------
入门
在钻研数学之前,先了解它的好处
由多尔萨·马斯加蒂在 Unsplash 上拍摄的照片
我们中的许多人(包括我自己)都对使用贝叶斯统计进行分析感到气馁。据说,贝叶斯统计有一个坏名声:它很难并且严重依赖数学。此外,由于它与许多领域(包括数据科学)相关,作家和专业人士希望通过发表关于该公式如何工作的文章来抢占先机。
我认为数据专家、学者、现有书籍和在线课程是造成贝氏努力工作的负面刻板印象的原因。我们都同意,不是每个人都被数学公式所吸引。此外,贝叶斯统计确实依赖于概率的逻辑,所以它在数学上显得复杂。因此,缺乏热情。
当你看到贝叶斯定理时,让我帮你摆脱恐惧。下面是贝叶斯统计的五个实际好处。在这篇文章的结尾,你会感到被鼓励去解决别人给你的任何公式。
1-直观和可靠的模型测试和比较
它提供了一种在坚实的理论框架内结合旧信息和新数据的自然方式。您可以合并变量的过去信息,并形成先验分布以供将来分析。当新的观测数据可用时,你以前的预测可以作为旧的信息。
这些预测分布允许对模型的任何特定方面进行深入测试。您可以将这些分布的模拟数据与真实数据进行比较。贝叶斯假设检验使我们能够量化证据,并在新数据出现时跟踪其进展。这很重要,因为不需要知道收集数据的目的。
2-直接解释结果
置信区间(CI)通常被描述为不确定性的简单度量[1]。事实并非如此,对这个概念的解释并不简单。
我看到数据专家得出结论,购买产品 X 的消费者的百分比,有 1% ≤ 消费者 ≤ 5%的 95%置信区间。这经常被错误地解释为隐含的意思:“有 95%的可能性,购买产品 X 的消费者的真实比例在 1%到 5%之间。”因此,CI 捕捉的是我们计算的区间的不确定性,而不是购买产品 x 的消费者的真实百分比。95%的置信区间意味着在我们计算的无限区间中,参数的真实值在 95%的时间里都在此范围内。
因此,CI 捕捉的是我们计算的区间的不确定性,而不是购买产品 x 的消费者的真实百分比。我们必须想象从特定人群中重复取样,并且对于每组虚构样本,我们估计置信区间。95%的置信区间意味着在我们计算的无限区间中,真实值在 95%的时间里都在这个范围内(上例中为 1%-5%)。所以,很容易分心,曲解结果。因此,您可能会提供错误的建议。
相比之下,在贝叶斯统计中,可信区间有更常识性的解释。这与他们量化估计的不确定性的观点一致得多。例如,假设一个测试显示购买了产品 x 的潜在消费者的分布。如果结果位于 25 和 55 之间,则 0.95,那么 25 ≤结果≤ 45 是 95%的可信区间。没有麻烦。
3-模型灵活性
最*的贝叶斯模型严重依赖于计算模拟来进行分析。与另一种类型的统计,即频率统计[1]相比,这似乎有些过分。然而,贝叶斯模型可以很容易地扩展到包括任何复杂性的数据生成过程。对于频率主义者的方法来说,情况并非如此,在频率主义者的方法中,分析的难度通常会随着您所选择的模型的复杂性而增加。
照片由在 Unsplash 上拍摄
4-记住数学公式不太重要,误用测试的机会较少。
对于那些试图学习频率主义推理的人来说,有相当大的进入障碍。一些例子包括一系列数学和统计结果(名称复杂),这些结果是进行推理所必需的。这些结果背后的假设并不总是清晰的,特别是当使用统计软件进行推断时。这是一个问题,因为滥用软件的可能性很高。
相比之下,在贝叶斯推理中,你通常从头开始建立模型,从关于过程的假设开始。虽然这看起来有点重复,但这意味着您不需要每个不同的统计测试的工作知识。此外,误用贝叶斯模型的机会更少,因为有必要在模型构建过程中明确陈述假设。
5-最佳预测
商界和学术界的领先研究人员使用贝叶斯统计进行预测。内特·西尔弗(Nate Silver)对 2008 年美国总统大选结果的正确预测就是一个例子。内特已经成功地正确预测了每一个状态。尽管大多数媒体都说这场比赛不分胜负。
从这里去哪里?
现在你已经有了贝叶斯统计的五个具体好处,我希望你能受到鼓舞去解决贝叶斯定理。正如我所承诺的,我没有给你任何公式或复杂的图表。我认为,在采取任何行动之前,理解为什么应该是常态。否则,一些任务看起来毫无意义,执行起来也很困难。现在,我建议进一步阅读,当然,这是我的建议:
多诺万,t . m .&米奇,R. M. (2019)。贝叶斯统计初学者:循序渐进的方法。美国牛津大学出版社。
尽情享受吧!
想以每月 5 美元的价格获得 Medium 文章的全部访问权限并支持我的工作吗?使用以下链接订阅:
https://boemer.medium.com/membership
参考文献:
**【1】**置信区间—https://www . khanacademy . org/math/AP-statistics/xfb 5d 8 e 68:推论-分类-比例/介绍-置信区间/v/置信区间-误差幅度
**【2】**frequent ist 推论—https://www . science direct . com/topics/mathematics/frequent ist
**【3】**西尔弗,N. (2012)。信号与噪音:预测的艺术与科学。纽约:企鹅。
CatBoost 的 5 个可爱特性
原文:https://towardsdatascience.com/5-cute-features-of-catboost-61532c260f69?source=collection_archive---------8-----------------------
其他升压算法没有这些功能
耶尔林·马图在 Unsplash 上的照片
我们已经讨论过 5 种 boosting 算法: AdaBoost , 梯度 Boosting , XGBoost ,light GBM和 CatBoost 。
其中, CatBoost 之所以如此特别,是因为它有其他 boosting 算法所没有的特殊之处。
通常,升压算法有两个主要缺点:
- 在 boosting 算法中很容易发生过拟合,因为它们是基于树的算法。
- 将 boosting 算法的训练过程并行化并不容易,因为新的树是按顺序一个接一个地创建的。
考虑到这些缺点,CatBoost 旨在以闪电般的速度为大型数据集构建更一般化的模型。它有内置参数,以减少过度拟合和并行学习,加上一些其他独特的功能!让我们来探索它们。
CatBoost 同时支持 CPU 和 GPU,开箱即用
CatBoost 的pip
和conda
安装都为 CatBoost 提供 GPU 支持。
pip install catboost
#OR
conda install -c conda-forge catboost
CatBoostClassifier() 和 CatBoostRegressor() 类中的以下参数设置可用于在训练时获得 GPU 支持。
- task_type: 可能值为“CPU”和“GPU”。值类型是字符串。默认值为“CPU”。要在培训期间获得 GPU 支持,只需使用“GPU”作为 task_type 的值。
- ****设备:该参数定义了计算机中 GPU 设备的 id。值类型是字符串。您可以使用“0”或“1”等数字来定义单个 GPU 设备。要一次定义多个 GPU 设备,您可以使用一系列数字,如“0:1:2”。
要查找您有多少个 GPU 和正确的 GPU ID,请在 Windows 中转到任务管理器,然后单击性能选项卡。
(图片由作者提供)
为了允许 CatBoost 使用我的 NVIDIA GPU,我应该设置 task_type="GPU" 和 devices='1' 。下面是一个关于 CatBoostClassifier() 类的例子。
from catboost import CatBoostClassifiermodel = CatBoostClassifier(iterations=100,
**task_type="GPU"**,
**devices='1'**)
使用 GPU 实现 CatBoost 对于包含数百万个对象和数百个要素的大型数据集来说非常有效!根据官方文档,对于这样的大型数据集,使用强大的 GPU 可以获得高达 40 倍的速度提升。如果你的数据集不够大,你不会看到 CPU 和 GPU 的训练时间有太大的差别。
我们可以在 CatBoost 中直接使用分类特征
通常,在算法中使用分类特征之前,我们必须对数据集中的分类特征(如果有的话)进行编码。但是使用 CatBoost,您不需要进行编码,因为算法会使用一次性编码自动将这些分类特征编码为数值。
因此,如果您的数据具有分类特征,您需要使用 Pool() 类将整个数据集转换为 CatBoost 的特殊 Pool 数据类型。如果您的数据只有数字特征,我建议您不要将数据转换为 池 数据类型,因为这可能会减慢训练过程。因此,只转换分类数据。
Pool() 类中的以下参数设置可用于通过 CatBoost 直接包含分类特征。
- ****数据:由 X 定义的特征矩阵。可能的类型有熊猫数据帧或 2D 数字阵列。
- ****标签:由 y 定义的目标或标签列。可能的型号有熊猫系列或 1D Numpy 阵列。
- cat_features: 数据集中分类特征名称的列表。
这里有一个例子:
from catboost import CatBoostRegressor, Poolmodel = CatBoostRegressor()pool_data = Pool(X_train,
y_train,
cat_features=['F1', 'F2', ...])model.fit(pool_data)
我写的更详细的指南可以在这里找到。
CatBoost 具有内置参数来减少过度拟合
CatBoostClassifier() 和 CatBoostRegressor() 类及其 fit() 方法中的以下参数可用于减少模型的过拟合。
- early_stopping_rounds: 这在 CatBoostClassifier() 和 CatBoostRegressor() 类的 fit() 方法中都有。默认值为
False
,不激活提前停止。我们可以使用一个整数来提前停止学习过程,以减少过拟合。我写的详细指南可以在这里找到。 - l2_leaf_reg 或 reg_lambda: 这在 CatBoostClassifier() 和 CatBoostRegressor() 类中都可用。这将 L2 正则化项的系数添加到成本函数中。默认值为 3。类型是 float。增加该值可以防止过度拟合。
- ****深度:该参数定义了树的深度。这类似于决策树中的 max_depth 参数。默认值为 6。类型是整数。减小该值可以防止过度拟合。好的值是 2 和 3。
CatBoost 有一个内置参数来生成学习曲线
学习曲线对于监控模型的学习过程极其重要。根据由 n_estimators 或迭代定义的提升回合数绘制训练和验证分数。
在 CatBoost 中,我们可以通过在两个 CatBoostClassifier() 和 CatBoostRegressor() 类的 fit() 方法中将 plot 参数设置为True
来轻松生成学习曲线。下图显示了由 CatBoost 创建的学习曲线。
(图片由作者提供)
这条学习曲线有两个用例:
- 寻找是否有机会提前停止
- 为 早 _ 停 _ 轮 自变量寻找最优值
关于这个的详细指南可以通过阅读我写的这篇文章找到。
CatBoost 通过其默认参数值提供了很好的结果
这是 CatBoost 的另一大特色。您不需要在 CatBoost 中进行参数调整来获得很好的结果。所以,你可以节省时间!根据官方文档,调整后的参数值和默认参数值提供了几乎相同的性能分数!
结论
****你最喜欢的 CatBoost 功能是什么?请在评论区提及。
综上: CatBoost 提供了一种在决策树上实现梯度提升的特殊方法。凭借其特殊功能,很容易提高具有数百万个数据点的大型数据集的学习速度。它还提供了减少过度拟合的有用功能。最后,您可以节省参数调整的时间,因为在 CatBoost 中不需要调整。
****你应该考虑安装 CatBoost 吗?是的,肯定!CatBoost 是一个开源库,每个人都可以使用!除此之外,在它的官方网站上有很棒的文档。看一看吧!
阅读下一条(推荐):
探索 ML 中的 boosting 算法及其 Python 实现!
**
助推技术(作者截图)**
阅读下一条(可选):
找到大多数数据科学家面临的最糟糕问题的解决方案:过度拟合问题!
**
解决过度拟合问题(作者截图)**
今天的帖子到此结束。我总是尽我所能以一种你能从中获得最大收益的方式来写和组织我的内容。应该有很多方法来进一步改善我的内容,你可能有很好的想法。所以,
如果您有任何反馈,请告诉我。
与此同时,你可以 注册成为会员 来获得我写的每一个故事的全部信息,我将会收到你的一部分会员费。
非常感谢你一直以来的支持!下一个故事再见。祝大家学习愉快!
特别感谢 Unsplash 上的 Yerlin Matu ,为我提供了这篇文章的封面图片。
鲁克山普拉莫迪塔
2021–11–13
改善生活的 5 个数据科学概念
原文:https://towardsdatascience.com/5-data-science-concepts-to-improve-your-life-80183e04544e?source=collection_archive---------11-----------------------
如何使用经济学、统计学和数据科学的概念来更清晰地思考和做出更好的决策
粘土银行在 Unsplash 拍摄的照片
概念帮助你理解世界。数据科学的概念可以应用于整个生活,从金融到医疗保健到职业选择,形成了理解世界如何运作的重要学科。在本文中,您将了解到:
- 为什么冠军队不能赢得下一个赛季,为什么早期的科学结果经常是错误的
- 如何处理不同强度的冲突信息
- 什么时候你应该尝试新的东西,而不是坚持你已经知道和喜欢的东西
现在,让我们来探索如何利用 5 个基础数据科学概念来改善生活。
贝叶斯法则
贝叶斯法则是一种评估事件发生概率的方法。你从一个事件前的概率开始,接收证据,并更新你最初分配的概率。贝叶斯法则迫使我们进行概率性思考,并让我们注意到我们观点中的不确定性程度。
例子
贝叶斯法则最有用的一点是,明确考虑一个事件的先验概率会抵消我们忽略基本概率的倾向。让我们看一个例子来说明。
认识 Ruby:
亚历克斯·诺曼摄影
假设有一天你注意到 Ruby 能量很低。根据这种观察,她生病的可能性有多大?对于大多数人来说,Ruby 有点不舒服可能会出现在他们对 Ruby 疲劳的首要解释中。
但是让我们用贝叶斯方法来计算 Ruby 生病的概率:
后验优势=先验优势比 x 似然比
或者在图表中:
亚历克斯·诺曼的图解贝叶斯法则
大正方形的面积表示 Ruby 一年中没有生病的天数比例(即大部分时间),而小矩形的面积表示她生病的天数。这是表中的优先赔率——Ruby 大约每 100 天生病一次。图形中的粉红色表示 Ruby 在非病假和病假中表现出疲劳的天数比例。我们可以看到,Ruby 在 7%的非病假时间和 70%的病假时间里似乎明显感到疲劳(表中的可能性比率)。最后,考虑到 Ruby 看起来很累,我们必须计算出她生病的后验概率,这是先验概率和似然比的乘积,两者的比值降为 1/10。因此,尽管 Ruby 看起来很累——而且累很可能是生病的迹象——但她仍然有十倍的可能没事。
回归*均值
如果你最喜欢的球队去年赢得了冠军,这对他们下赛季赢得冠军的机会意味着什么?在某种程度上,这是由于技能(球队状态良好,顶级教练等)。),他们的胜利表明他们明年更有可能获胜。但这在更大程度上是由于运气(其他球队卷入了药物丑闻,有利的抽签,选秀结果良好等)。),他们明年赢的可能性就越小。
这是因为统计概念上的回归到*均值。
从正态分布回归抽样均值,亚历克斯·诺曼
例子
如果一项试验表明,保健化学品 YK7483 优于淋巴丝虫病的所有其他治疗方法(胆小的人不应该查阅这个资料),你不应该完全相信这个结果。当你对 YK7483 进行第二次测试时,第二次测试更有可能接**均值。如果你只看表面价值,而没有预测到它可能会回归到均值,那你就把钱放错了地方。在的一项关于这种影响的系统研究中,John Ioannidis 分析了“过去 13 年中最受重视的 49 项医学研究发现”,发现 16%的研究存在矛盾,16%的研究在第二次研究中产生的影响比第一次小,24%的研究基本上没有受到质疑,而只有 44%的研究得到了重复。回想一下,这些是最受重视的研究发现,你会认为它们更可靠,而不仅仅是旧样本。
探索-利用
探索、开发和权衡是我们在选择时经常面临的两难境地。你应该选择你所知道的并得到你所期望的东西(“利用”)还是选择你不确定的东西并可能学到更多(“探索”)?这在日常生活中经常发生——最喜欢的餐馆,还是新开的餐馆?目前的工作,还是四处寻找?正常的回家路线,还是试试另一条?。你牺牲一个来得到另一个,所以这是一个交换。你应该选择哪一个取决于获取后果信息的代价,你能利用它多长时间,以及对你的好处有多大。
例子
你的小型电影制作业务在过去几年里取得了一些成功,你正试图找出你的下一个项目应该是什么。你知道,如果你拍一部老经典的续集,回报会很一般。或者,你可以尝试一个高度不可预测的热门新创意:它可能会暴跌,意味着你无法收回制作它的成本,或者它可能是下一个哈利波特系列。
预期值
期望值是事件发生的概率,乘以该事件发生的价值。例如,有 50%的机会赢得 100 美元,你的预期价值是 50 美元(如果你不介意风险的话)。
我们可以用这个框架来计算你是否应该买彩票。假设一张彩票价值 10 美元,你有 0.0000001 的机会赢得 1000 万美元——你应该买一张吗?不使用期望值,这是一个几乎不可能评估的问题。乘出来,拥有其中一张票的预期价值是 1 美元(0.0000001 x 10,000,000 美元= 1 美元)。但是你买票要花 10 美元(1x 10 美元)。所以购买的总期望值是负的:1-$10 = -$9。现实生活中的大多数彩票都是如此,因此买彩票只是我们偏向过度乐观的一个例子。
亚历克斯·诺曼的《两种选择的期望值》
例子
事实证明,所有事件都有一定的风险和价值。保险公司用这个来决定向你收取多少保费。他们将你的参考类中的每个人加起来,并确定他们的*均支出。然后,他们在顶部增加一点利润,这使得购买保险的净预期为负(收益减去成本),就像购买彩票一样。然而,这并不意味着买保险是个坏主意!很多人不喜欢承担过多的风险(一个小的破产机会比支付你可能永远不需要的保险更糟糕),所以购买保险是理性的。另一种说法是,额外收入的边际收益递减(或者凹效用函数,对于数学倾向的人来说)。
帕斯卡的赌注也是用期望值思考世界的例子。人类都用他们的生命打赌,要么上帝存在,要么他不存在。帕斯卡认为,一个理性的人应该像上帝一样生活,并寻求相信上帝。如果上帝确实存在,这样的人只会有有限的损失(一些快乐,奢侈,等等。),而他们将获得无限的收益(以天堂中的永恒为代表)并避免无限的损失(地狱中的永恒)。
抽象
抽象是将复杂的事件概括为其背后的概念的过程,消除了情况的复杂性。抽象过程可以通过隐藏令人困惑的细节来帮助我们理解现实世界,给我们留下跨领域适用的通用概念,并可以应用于不同的情况。
例子
抽象的概念是让计算机工作的关键。计算机只理解 1 和 0,也就是二进制或机器代码。如果一个程序员想编写一个玩俄罗斯方块的程序,他必须一个个地写出所有的 1 和 0,这将是非常耗时的。
为了避免这些工作,程序员开发更高级的语言来控制机器代码。这些 1 和 0 被绑定在一种更高级的编程语言的语法中,这种语言是建立在机器代码之上的。人类程序员可以用这些更容易使用的语言编写他们的软件,然后计算机通过解释器或编译器将脚本转换成它能够理解的东西——机器代码。每个人都赢了。
Conceptually.org 是一个免费的经济学、数据科学、哲学和其他概念的集合,帮助你更好地理解世界。报名每周学习 1 个概念。
5 次数据科学黑客马拉松,增长和提高您的技能
原文:https://towardsdatascience.com/5-data-science-hackathons-to-grow-and-improve-your-skills-ccfb41193eaa?source=collection_archive---------9-----------------------
结识新朋友,帮助解决世界问题。
照片由西格蒙德在 Unsplash 拍摄
当你进入一个像数据科学这样的领域,一个理论上永无止境的领域,总是在发展,总是在进步,总是在移动,这将是一个挑战,当然要找到一个好的点,在那里你可以说,“现在,我有足够的知识开始申请工作。”
在大多数技术和科学领域,没有一个明确的停顿点,让你觉得你知道的“足够了”在这些领域,尝试掌握所有的东西是不可能的,所以你什么时候知道你有足够的能力找到你想要的工作呢?
参加数据科学黑客马拉松或竞赛是一种既有趣又有保证的方式,既能运用现有知识,同时又能获得新技能。在科技领域,众所周知,黑客马拉松是一个应用你的知识、结识兴趣相投的人、帮助解决一些现实生活中的问题的绝佳机会,而且在大多数情况下,还能赢得丰厚的奖金。
今年,作为一名数据科学学习者或从业者,你有机会在舒适的家中参与一些令人惊叹的虚拟黑客马拉松。寻找黑客马拉松或任何活动并不总是一件容易的事情。尽管我们被信息所包围,但跟踪如此大量的信息总是具有挑战性。
</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>
一如既往,我喜欢帮助你用最少的努力得到你想要的,因为你应该把精力放在真正的黑客马拉松上,而不是试图找到一个。在这篇文章中,我们将介绍 5 个即将到来的黑客马拉松,你现在就可以注册。
№1:黑客之家 II
时间:2021 年 4 月 30 日至 5 月 2 日
让我们从最接*的黑客马拉松开始我们的列表;还有不到一周的时间,黑客大联盟将举办第二届夏季黑客马拉松黑客主场 II 。大联盟黑客是官方学生黑客马拉松联盟之一;他们主要目标是支持和培养来自世界各地的学生的计算机科学和技术技能。通过这样做,帮助塑造下一代技术领导者。
hack in Home II 不仅仅是一个黑客马拉松;它更像是一系列研讨会、讲座和小型活动的集合,分布在一个学习、建设和知识共享的周末。这个黑客马拉松对所有人开放,不管他们的年龄、教育背景或年龄。所以,如果你热衷于在应用现有知识的同时学习新技能,Hack in Home II 就是你的机会。
№2:在家办公——脱碳 2021
时间:2021 年 5 月 15 日至 17 日
全球变暖是当今人类面临的最严重的问题之一。 Hack from Home 是由各种公司组织的虚拟黑客马拉松,如 Dataswift.io 、东伦敦大学和伦理技术联盟。他们黑客马拉松的主要目标是找到解决环境问题的技术方案。
脱碳 2021 黑客马拉松将专注于开发和探索降低碳活动的新解决方案。这是通过分析和汇总能源消费者的数据来实现的。本次黑客马拉松面向数据科学家、分析师、web 开发者和前端开发者开放。
</9-comprehensive-cheat-sheets-for-data-science-46005d72b485>
№3:哈肯 2.0
时间:2021 年 5 月 28 日至 30 日
大联盟 Hack 的另一个事件是 HackOn 2.0 。这次黑客马拉松将持续 48 小时的研讨会和讲座,并将关注一个经常被忽视的问题,即提高对心理健康和多样性的认识。加入 HackOn 并不需要成为 hackathon 专家。
无论你的知识水*如何,如果你有一个想法并想实现它,HackOn 就是你的理想之地。这个想法可能不会有任何结果,也可能是改变世界的一步;然而,这是一个值得追求的想法。
№4: COP26 数据黑客马拉松
时间:2021 年 6 月 21 日
我们名单上的下一个黑客马拉松是由牛津大学工程科学系组织的。COP 26 数据黑客马拉松是一场为期 5 天的黑客马拉松,旨在传播对未来能源系统气候变化风险的理解。
COP26 黑客马拉松的目标是开发和构建有助于理解和量化爱尔兰能源系统气候变化的解决方案。你可以以团队或个人的身份报名参加这次黑客马拉松。
</6-data-science-slack-workshops-you-need-to-join-b0c00952105d>
№5:西格玛哈克 3.0
时间:2021 年 6 月 25 日至 27 日
最后同样重要的是 SigmaHacks 3.0 。SigmaHacks 3.0 是一个虚拟黑客马拉松,旨在为来自世界各地的开发人员提供解决现实问题的机会,同时促进创新和鼓励多样性。
要注册 SigmaHacks,你甚至不需要任何以前的技术背景。即使你不知道如何编码,也会有导师和导师在整个黑客马拉松期间指导你。SigmaHacks 还将提供研讨会和参与式会议,以及现金和技术奖励。
外卖食品
如果你正在成为一名数据科学家,你已经学习了基础知识,并试图掌握尽可能多的数据科学方面,以便你可以准备好申请工作;停下来。让我告诉你,数据科学就业市场现在是如此饱和,你永远无法掌握一切;没人能。
</7-tips-for-data-science-newbies-d95d979add54>
所以,你只需要非常了解基础知识,并在实际应用中练习使用它们。在我看来,实践构建项目、与团队合作以及运用你的知识的最佳方式是参加黑客马拉松。
幸运的是,每年都有数百场黑客马拉松在世界各地举行,解决不同类型的问题,你可以虚拟地加入其中。在本文中,我们经历了 5 个即将到来的黑客马拉松;所有这些都将在接下来的两个月内进行。因此,如果你是一名数据科学家,这是你挑战自我并有所作为的机会。
你应该考虑参与的 5 个数据科学开源项目
原文:https://towardsdatascience.com/5-data-science-open-source-projects-you-to-contribute-to-boost-your-resume-d757697fb1e3?source=collection_archive---------11-----------------------
通过这些项目,提高你的技能,充实你的简历
马库斯·温克勒在 Unsplash 上的照片
在数据科学领域获得理想职位的最重要的一个方面是建立一个强大、有力、引人注目的投资组合,证明你的技能,并表明你可以处理大规模项目并在团队中发挥出色。您的投资组合需要证明您花费了时间、精力和资源来磨练您作为数据科学家的技能。
向不了解你的人证明你的技能,尤其是在短时间内——招聘人员在简历或投资组合上花费的*均时间是 7~10 秒——并不容易。不过,也不是不可能。
一个好的投资组合应该包括各种类型的项目,关于数据收集、分析和可视化的项目。它还应该包含不同规模的项目。处理小项目和处理大规模项目是非常不同的。如果您的投资组合具有两种规模,那么这意味着您可以阅读、处理和调试所有规模的软件,这是任何数据科学家都需要的技能。
</6-data-science-certificates-to-level-up-your-career-275daed7e5df>
这可能会让你想知道如何找到好的开源数据科学项目,这些项目容易进入并且在你的投资组合中看起来很棒。这是一个很好的问题,但随着数据科学项目数量的激增,找到好的项目并不是一件容易的事情。
当你试图查找数据科学项目时,你会经常遇到大项目,如 Pandas、Numpy 和 Matplotlib。这些巨大的项目很棒,但还有一些不太为人所知的项目仍然被许多数据科学家使用,并且会在你的简历上看起来很好。
№1: 谷歌机器学习的卡利班
让我们从科技巨头谷歌的一个项目开始这个列表。通常,在构建和开发数据科学项目时,您可能会发现很难构建一个测试环境来展示您在现实生活中的项目。你不能预测所有的场景,并确保涵盖所有的边缘情况。
谷歌将卡利班作为解决这个问题的潜在方案。卡利班是一个测试工具,它在执行过程中跟踪您的环境属性,并允许您重现特定的运行环境。研究人员和数据工程师在谷歌开发了这个工具,每天执行这项任务。
</5-types-of-machine-learning-algorithms-you-need-to-know-5ac7fce8920d>
№2: PalmerPenguins
我们名单上的下一个是 PalmerPenguins,一个最*才开源的数据集。该数据集的构建和开发旨在取代广为人知的 Iris 数据集。Iris 之所以出名,是因为它对初学者来说使用简单,而且应用范围广泛。
PalmerPenguins 提供了一个惊人的数据集,您可以像使用 Iris 一样轻松地将它用于数据可视化和分类应用程序,但有更多的选项。该数据集的另一个重要方面是,它提供了教授数据科学概念的艺术。
№3: 咖啡馆
接下来我们有一个很有前途的深度学习框架,Caffe。Caffe 是一个深度学习框架,其设计和构建以速度、模块化和表达为重点。Caffe 最初是由加州大学伯克利分校人工智能实验室和视觉与学习社区的一组研究人员开发的。
Caffe 作为开源项目发布仅一年后,就被全世界 1000 多名研究人员和开发人员分了手。它有助于转变研究主题,建立新的创业公司和产业力量。Caffe 社区是欢迎和支持开源社区加入的社区之一。
</4-types-of-projects-you-must-have-in-your-data-science-portfolio-4b67cc25ed3e>
№4: NeoML
机器学习可能是数据科学应用的核心,所以我必须至少有一个专门用于机器学习的开源项目。NeoML 是一个机器学习框架,允许用户使用 20 多种传统机器学习算法轻松设计、构建、测试和部署机器学习模型。
它包括支持自然语言处理、计算机视觉、神经网络和图像分类和处理的材料。这个框架是用 C++、Java 和 Objective-C 编写的,可以在任何基于 Unix 的*台、macOS 和 Windows 上运行。
№5: 科尔尼亚
我们将以科妮雅来结束我们的列表。Kornia 是 PyTorch 的支持计算机视觉库。它包括各种例程和微分,可用于解决一些通用的计算机视觉问题。Kornia 构建于 PyTorch 之上,非常依赖其效率和 CPU 能力来计算复杂的函数。
Korina 不仅仅是一个包;它是一组库,可以一起用于训练模型和神经网络,以及执行图像转换、图像过滤和边缘检测。
最后的想法
因此,你成功地通过了数据科学求职的迷宫,你成功地破译了工作角色的名称,并找出了哪个角色更适合你的技能和你想做的事情,现在是时候考虑如何让你的投资组合毫不拖延地为你找到工作了。
在您学习数据科学的过程中,您可能经历过许多项目,从只有几行代码的较小项目到有数百行代码的相对较大的项目。但是,要真正证明你的技能和知识水*,你需要有一些贡献,让你在申请人中脱颖而出。
</6-machine-learning-certificates-to-pursue-in-2021-2070e024ae9d>
吸引招聘者眼球的一个方法是参与世界各地许多数据科学家使用的大型项目。在这篇文章中,我给了你一些项目的建议,你可以为之做出贡献,并帮助建立一些令人敬畏的东西。所以,你现在需要做的就是选择一个项目,然后马上着手去做。
2022 年将推出 5 个数据科学播客
原文:https://towardsdatascience.com/5-data-science-podcasts-to-follow-in-2022-4c9dcce19db5?source=collection_archive---------11-----------------------
倾听来自数据科学世界的声音。
李·坎贝尔在 Unsplash 上的照片
数据科学不是听播客就能学会的。然而,播客所提供的是你无法从其他资源中学到的东西:真实的生活体验。
我们生活在一个获取信息极其容易和廉价的时代。数据科学也是如此。个人博客、MOOC 课程和 Youtube 只是可用于学习数据科学的一些资源。
这些资源通常缺少完成拼图的一个基本部分:真实的生活经历。填补这一空白的最佳人选是播客。它们不仅涵盖了数据科学相关主题,还邀请了业内人士分享他们的经验。
正是因为这个原因,我认为播客是学习数据科学的非常有价值的资源。他们让你热身,为你在数据科学生态系统中的第一份工作做准备。
听播客的另一个好处是,你可以了解数据科学家在特定领域的工作。因此,它可以帮助你决定你的数据科学之路。由于数据科学是一个应用广泛的广阔领域,因此专注于特定领域并相应地提高技能非常重要。
最后但并非最不重要的一点是,播客有助于您跟上数据科学生态系统的最新发展。他们几乎总是分享最新的更新和新闻。
在本文中,我将列出我强烈建议您关注的 5 个数据科学播客。
数据怀疑论者
Kyle Polich 的数据怀疑论播客涵盖了与数据科学、机器学习、统计学和数据科学相关的主题。嘉宾既有学术界的,也有产业界的。因此,你可以了解数据科学的研究领域以及公司如何应用数据科学。
截止到写这篇文章,差不多有 400 集了。每周都会有新的。
家中的数据科学
家庭数据科学由 Francesco Gadaleta 主持,每两周更新一次。我真的很喜欢弗朗西斯科在有客人时解释事情和引导播客的方式。我觉得他问了我会问嘉宾的问题。
《数据科学之家》有几集涵盖了数据科学中使用的软件工具和软件包。还有几集解释了一些关键术语和概念,如强化学习、不*衡数据、MLOps 等。
Python 字节
Python 是迄今为止数据科学中最常用的编程语言。它易于学习,具有直观的语法,这使得 Python 成为有抱负的数据科学家的首选。
Python Bytes 是由迈克尔·肯尼迪和布莱恩·奥肯主持的每周播客。这是了解最新 Python 知识和提高 Python 技能的绝佳资源。
不那么标准差
《不那么标准差》由罗杰·彭和希拉里·帕克主持。他们谈论学术界和工业界数据科学的最新发展。
他们不时招待客人。例如,朱莉娅·西尔格是 2021 年 6 月一集的嘉宾。她用 R 编程语言开发了工具和软件包。
艾今日
《今日人工智能》由 Kathleen Watch 和 Ron Schmelzer 主持。它可能是了解人工智能世界中发生的事情的首选资源。凯思琳和罗恩还采访了一些专家,他们分享了自己在特定话题上的经验和想法。
我最喜欢播客的一点是,它引领我们超越传统资源。书籍、博客和在线课程是学习数据科学的绝佳资源。为了完成这幅图,我们还需要了解该行业的最新发展,以及数据科学在企业中的应用。
本文中提到的播客让我们从已经在数据科学领域工作的人的经验中学习。
感谢您的阅读。如果您有任何反馈,请告诉我。
你现在应该听的 5 个数据科学播客
原文:https://towardsdatascience.com/5-data-science-podcasts-you-should-be-listening-right-now-178f0af8ebce?source=collection_archive---------26-----------------------
跟上最新的趋势,在你的领域保持领先。
Juja Han 在 Unsplash 上的照片
播客正在兴起。它们可以成为数据科学家学习和了解该领域最新消息的替代方式。让自己沉浸在行业中,保持在你所在领域的顶端。
播客是一种被动的学习形式,所以你可以同时做其他事情。你可以在散步、锻炼、打扫房间或放松时听播客。
我将推荐 5 个活跃的播客,每周发布新的剧集,时长从 20 分钟到大约一小时不等。
我建议在你的生活中加入播客。从每周听一个播客开始。
这是清单。🎧
1.超级数据科学播客
超级数据科学是由乔恩·克罗恩主持的播客。
**频率:**每周 1-2 次。
**形式:**60 分钟的行业专家对话,或者更短的单人剧集。
**内容:**这个节目都是关于数据科学的。从统计学到 ML 算法到现实世界的 ML 应用,到新的数据科学趋势,再到可视化。
根据播客的描述:无论你是对开始数据职业感到好奇,还是你是一名有深度的技术专家,无论你是想了解人工智能是什么,还是想将更多数据驱动的流程整合到你的业务中,我们都有鼓舞人心的嘉宾和轻松愉快的对话供你欣赏。我们涵盖了数据收集、数据库、分析、预测建模、可视化、软件工程、现实世界应用和商业化等领域的工具、技术和实施技巧,以及用数据科学粉碎它们所需的一切。
每个数据科学家都应该关注这个播客,以跟上该领域的发展。该节目还主持了 10 分钟的关于生产力技巧和如何在生活中取得成功的剧集。
最* 4 集:
- 距离你的第一份数据科学工作还有 99 天
- 一起学习深度学习
- 时间序列分析
- 用 ML 应对气候变化
2.数据工程播客
数据工程是由托比亚斯·小萌主持的播客。
**形式:**与行业专家的 60 分钟对话。
**频率:**每周。
**内容:**对数据科学家、团队领导和数据工程师的项目、*台和实践的见解。
来自播客的描述:通过深入挖掘技术*台、边缘案例和经验教训,主持人确保你花在倾听上的时间获得最大价值。通过继续学习,您将会在扩展处理管道、部署数据库、维护数据湖和建立适当的治理实践方面学到比您想象的更多的各种重要主题。探索各种规模和不同行业的数据管理,会让你看到超越工作所需的视角。
由于数据工程现在是一个热门话题,我认为在这个列表中包括一个专门的播客是明智的,它在数据工程变得很酷之前就在谈论它。
最* 4 集:
- 在 PostgreSQL 之上构建你的数据仓库
- 数据运营的宏伟愿景和现实现状
- 将机器学习移入 Cherre 的数据管道
- 使用超集的自助服务数据探索和仪表板
3.数据怀疑论者
数据怀疑论者是由凯尔·波利奇主持的播客。
**形式:**与行业专家 30 分钟的对话。
**频率:**每周。
**内容:**一个知名的数据科学播客,内容涉及数据科学、机器学习和统计。
来自播客的描述:数据怀疑论播客的特点是采访和讨论与数据科学、统计学、机器学习、人工智能等相关的话题,所有这些都是从应用批判性思维和科学方法的角度来评估主张的真实性和方法的有效性。
最* 4 集:
- 时间序列的先决条件
- 数量级
- 他们来抢我们的工作
- 疫情机器学习的陷阱
4.家庭数据科学
家庭数据科学是由弗朗西斯科·加达莱塔主持的播客。
形式: 20-45 分钟。与行业专家的对话,或个人插曲。
**频率:**每周。
**内容:**技术、AI、机器学习、算法。
来自播客的描述:家庭数据科学是一个关于机器学习、人工智能和算法的播客。该节目由弗朗切斯科·加达莱塔博士主持,单独播出,并采访了该领域一些最有影响力的人物
最* 4 集:
- 用 Streamr 传送不可阻挡的数据
- 好的、坏的和丑陋的
- MLOps:什么是重要的,为什么重要
- 我的数据能得到报酬吗?来自 Mytiki 的 Mike Andi】
5.跟我说说 Python
跟我说说 Python是由 Michael Kennedy 主持的播客。
**形式:**与行业专家 45 分钟的对话。
**频率:**每周。
**内容:**该展会涵盖了从数据科学、Web 开发到 DevOps 的各种 Python 主题。基本上,Python 的一切可能都在这里。
来自播客的描述:我们深入研究了流行的软件包和软件开发人员、数据科学家,以及用 Python 做惊人事情的不可思议的爱好者。如果你是 Python 的新手,你会通过听取领导的意见很快了解社区的来龙去脉。如果你已经研究 Pythoning 很多年了,你将会了解到你最喜欢的包和来自开源的热门新包。
该播客更侧重于 Python 的软件工程部分,但讨论了对于一名成功的数据科学家至关重要的实践。如果您想提高您的编码技能,学习最佳软件工程实践,了解 Python 的最新趋势和工具,并从其他数据科学家中脱颖而出,那么这就是适合您的播客!
最* 4 集:
- 可扩展至数十亿用户的 Python 应用
- 面向 Python 开发者的 Docker(2021 版)
- Python 从 1994 年到 2021 年,我的你是怎么成长起来的!
- 2021 年的数据工程景观
不确定接下来要读什么?这里有两个选择:
保持联络
关注我的 Medium 了解更多类似内容。
让我们在 LinkedIn 上连线。
检查我的 GitHub 。
不包括 Python 或 R 的 5 种数据科学编程语言
原文:https://towardsdatascience.com/5-data-science-programming-languages-not-including-python-or-r-3ad111134771?source=collection_archive---------7-----------------------
有比你想象的更多的选择。
法托斯 Bytyqi 在 Unsplash 上的照片
进入任何数据科学分支都需要掌握的基本技能之一是编程。现在,如果我们忽略开始学习数据科学是多么令人困惑,那么选择一种编程语言在您的学习之旅中使用是一个完全独立的挑战。
在选择编程语言时,有许多事情需要考虑。在你的目标领域,哪一个会表现得更好?哪个有更好的未来?哪个支持更多功能?如果你是初学者或者有时间限制,哪个更容易学?
所有这些都是有效的问题;根据个人和他们当前的情况,有些比其他的更重要。如果你在网上查找数据科学教程和编程语言,99%的结果不是 Python 就是 r。
在学习或构建数据科学应用程序时,Python 和 R 是很好的选择。因此,它们将是最常用的,Python 比 r 更受欢迎,这是完全有道理的。Python 在数据科学和许多其他领域非常受欢迎的原因是它易于学习并且非常通用。
我不是想把你从 Python 或 R 推开;事实上,我自己就是一个巨大的 Python 迷。相反,我只想告诉你,你有选择;在您的学习之旅中,还有其他编程语言可供您使用,它们相当容易学习,就像 Python 一样。
</5-reasons-why-every-data-scientist-should-blog-f1d81550a6c3>
Java Script 语言
JavaScript 是#1 web 开发编程语言。它是有史以来最受欢迎的语言之一。问题是,它能用来构建数据科学应用吗?
虽然 Python 和 R 在设计大量的库和包方面更有优势,尤其是对于数据科学,但是 JavaScript 可以为这个领域提供一些东西。JavaScript 有很多框架可以让它变得更强大,比如 Hadoop,它也运行在 Java 上,Java 是可以用来构建数据科学应用的语言之一。
也许 JavaScript 本身还没有强大到可以用来构建大型应用程序。但是,它可以与 Python 或 R 配合使用,创建比任何 Python 或 R 都更好、更清晰的可视化效果。
如果你对学习数据科学的 JavaScript 感兴趣,请查看这门课程。
斯卡拉
另一种适合数据科学的语言是 Scala。Scala 是一种现代简单的编程语言,于 2003 年首次推出。Scala 最初是为了解决 Java 的一些问题而设计的。
Scala 可用于构建广泛的应用,从 web 应用到数据科学和机器学习应用。此外,Scala 支持面向对象的编程,并可用于创建大型数据科学项目,因为它在处理大型数据集时非常高效。
也许 Scala 唯一的缺点是,它的类型变得有点复杂,难以完全理解,因为它具有函数和面向对象的双重性质。
但是,它仍然为许多机器学习应用程序提供了一个很好的选择。学习 Scala for data science 的一个资源是 cognitiveclass.ai 的这个课程。
朱莉娅
朱莉娅语言是由一个四人小组在 2009 年创造的,并在 2012 年提供给任何人使用。Julia 最初被设计得像 Python 一样简单,但是没有它的缺点。
主要是,Julia 是一种编译语言,具有快速的数值分析和出色的计算科学任务性能,旨在克服 Python 的缓慢性。您可以使用 Julia 快速实现数学概念,如回归和向量/矩阵操作。
此外,它结合了静态类型的优势和动态类型的灵活性。Julia 还可以快速调用 Python 库,并使用 PyCall 库与 Python 代码交互。但是,在我看来,Julia 最好的一点是它有一个功能齐全的调试器,使用简单,可以简单快速地找到代码中的问题。
许多优秀的资源都关注 Julia 如何对数据科学有用,包括 Coursera 上的 Julia for Data Science 书和 Julia for 初学者 Data Science 程序。
矩阵实验室
MATLAB (Matrix Lab)是一种用于技术和科学计算的全环境语言。MATLAB 将编写简单的代码和有效的可视化集成在一个可以在线或离线使用的环境中,使编写代码和与他人共享代码变得容易。
由于 MATLAB 是基于矩阵的,所以它更容易实现所有类型的计算数学,如数据分析和探索、建模和模拟、科学图形和构建用户界面。
MATLAB 非常适合数据科学,因为它可以模拟现实生活中的系统,并与传感器、图像或视频等物理世界的对象进行交互。此外,MATLAB 提供了多个实用的机器学习和统计分析包。除了图像/视频处理和各种类型的系统优化。
MATLAB 的创造者 MathWorks 在 Coursera 上提供了一门关于如何使用 MATLAB 进行数据科学的实用课程。
</7-tips-for-data-science-newbies-d95d979add54>
去
我们名单上的最后一种语言是著名的戈兰语。Go 是 Google 设计的一种静态类型的编译编程语言。当你阅读 Go 代码时,你会发现它在语法上与 C 非常相似,但是它提供了更多的内存安全、结构化类型和垃圾收集。
通过拥有自己独特的库和对常用包(如 MonGo 和 Postgres)的 API 支持,go 为基础和高级数据科学应用程序(如数据收集、清理和分析)提供了所需的支持。它还拥有各种数学功能、EDA、可视化和机器学习的库。
Go 的另一大优势是它的支持和欢迎社区,这些社区愿意为对语言及其用法感兴趣的新手提供帮助和支持。
我最喜欢的学习数据科学 Go 语言的书是用 Go 学习机器。
外卖食品
有超过 200 种编程语言可以用于你可能想到的任何应用。但是,就数据科学而言,有两个明显的赢家,Python 和 r。他们获胜的原因是有道理的,主要是 Python,因为它在全球拥有 60,000 多个库和 800 万用户。这是一种学习方式,读起来很简单,而且用途非常广泛。
这就是为什么它是任何从数据科学起步的人的明确选择。Python 不是数据科学唯一合理的选择;然而,很难看到任何其他编程语言,因为它非常耀眼。
掌握一门编程语言是学习任何数据科学分支的第一步;有选择总是对的;不是所有人都喜欢 Python 一些更快的语言或语言只是更擅长创建引人注目和清晰的可视化。
</5-reasons-why-every-data-scientist-should-blog-f1d81550a6c3>
在本文中,我向您展示了可用于数据科学的 5 种编程语言,其中一些像 Python 一样酷且可修复。如果你是新人,尝试一下所有的语言,看看哪个更适合你。如果你已经在这个领域,学习一门新的语言对提升你的技能和开拓新的职业前景总是一件好事。
医疗保健领域的 5 个数据科学项目会让你被录用
原文:https://towardsdatascience.com/5-data-science-projects-in-healthcare-that-will-get-you-hired-81003cadf2f3?source=collection_archive---------4-----------------------
想在医疗保健领域应用人工智能?做这些项目来磨练你的技能。
斯科特·格雷厄姆在 Unsplash 上拍照
亚里士多德曾经说过,“对于我们在做之前必须学习的事情,我们通过做来学习。”我们的人脑从观察、经验和这两者的反馈回路中学习得最好。亲自动手,尤其是在学习数据科学时,可以积累丰富的经验,并在观察中形成持久的学习体验。
学习数据科学的主要部分来自于“做”数据科学项目,它有助于建立更深层次的知识、更好的记忆、理解数据科学家面临的“实际”问题,并将磨练您的整体技术技能。此外,这些数据科学项目将增加你的投资组合或简历,这将有助于你获得更好的工作机会。
我列出了以下项目,每个项目都专注于某种类型的机器学习挑战和算法,以更新您的整体机器学习和数据科学技能。
中风预测
肝硬化预测
糖尿病视网膜病变
新冠肺炎病例和死亡率的时间序列预测
乳腺癌检测
你将在每个项目的帮助下学到的技能:
克拉克·蒂布斯在 Unsplash 上拍摄的照片
- 中风预测: 我们将应用支持向量机来解决这个问题。SVM 是医疗保健领域中使用最广泛的算法,因为它提供了一些优势。因此,有必要掌握这种算法,它在医疗保健行业的应用中最终会非常有用。我们还将为这个项目进行一些广泛的探索性数据分析,并磨练你的 EDA 技能。
- 肝硬化预测: 在这个项目中,我们将使用 xgboost,它是一个基于决策树的分类器。这个项目将磨练我们最常用的集成学习方法 xgboost 的技能。此外,我们也将通过这个项目刷新我们的 EDA 技能。
- 糖尿病视网膜病变: 这是一个计算机视觉问题。计算机视觉广泛应用于医疗保健领域,是任何希望将人工智能应用于医疗保健的人的必备技能,这主要是因为许多医疗保健数据是以诊断图像的形式存在的,例如 MRI 等。
- 新冠肺炎病例和死亡率的时间序列预测: 本项目涉及新冠肺炎相关数据的时间序列分析。时间序列分析是你机器学习工具箱中的一项重要技能。这个项目的主要目标是了解新冠肺炎病例在每个区域内的个别进展情况,然后在全球范围内的整体进展情况。在招聘过程中,在你的投资组合中有时间序列模型会给你额外的优势,并展示你在数据科学方面的知识多样性。此外,在仔细分析数据后从数据中得出关键见解是数据科学家必须具备的最被低估的技能之一。这个项目还将帮助你建立解决复杂问题和数据分析所需的批判性思维技能。
- 乳腺癌检测: 在这个项目中,我们将使用一种深度学习技术。一般来说,这是机器学习中最重要和最先进的部分之一。磨练你的深度学习技巧是必须的,这个项目将帮助你做到这一点。
由于数据稀缺、质量差和不一致,在医疗保健领域应用机器学习是一项挑战。总的来说,每个项目都将帮助你为这个挑战做好准备,因为每个数据集都有一个或多个这样的问题。通过应用下面提到的技巧,你可以学习如何更好地处理数据问题,这将帮助你在面试中胜出并获得一份好工作。
在每个项目中,我将提供问题的目标,数据集链接,要使用的算法和实施程序。重要的是要自己做这些项目,因此我不会提供完整的代码。但是,嘿,别担心!我将提供实现过程的一步一步的路线图,还将列出每个项目中使用的一些重要的库和函数。所以跟着我。
现在让我们更深入地研究这些项目!
1.中风预测:
马克西姆·托尔钦斯基在 Unsplash 上拍摄的照片
在这个项目中,我们将根据患者的合并症、工作和生活方式来预测他/她是否会患心脏病。像这样的项目广泛应用于医疗保健领域,做这个项目将传授你更好地理解数据分析,数据清洗,数据可视化和算法。
数据集——冲程数据可在 Kaggle 上获得。
该数据集列出了多个特征,如性别、年龄、血糖水*、身体质量指数、吸烟状况、其他共病等。,以及目标变量:stroke。每行指定一个患者的相关信息。以下是数据集中列出的要素:
- id:唯一标识符
2)性别:“男性”、“女性”或“其他”
3)年龄:患者的年龄
4)高血压:如果患者没有高血压,为 0;如果患者有高血压,为 1
- heart_disease: 0 表示患者没有任何心脏病,1 表示患者有心脏病
6)是否结过婚:“否”或“是”
7)工作类型:"儿童"、"政府官员"、"从未工作过"、"私营"或"自营职业者"
8)住所 _ 类型:“农村”或“城市”
9)*均葡萄糖水*:血液中的*均葡萄糖水*
10)身体质量指数:体重指数
11)吸烟 _ 状态:“以前吸烟”、“从未吸烟”、“吸烟”或“未知”*
12)中风:如果患者有中风,则为 1;如果没有中风,则为 0
该数据集列出了预测中风几率所需的所有相关信息,这些标识符也经常被医疗从业者使用。这些输入参数可用于预测患者中风的几率。
算法:
这可以使用支持向量机来实现。这对小样本的应用是有利的。SVM 在解决生物信息学中的分类问题上表现出了很高的性能。这就是为什么它被广泛应用于医疗保健领域的原因。
用线性 SVM 拟合数据。将库导入为:
从 sklearn.svm 导入 SVC
现在,。拟合高斯核 SVC,看看决策边界如何变化。使用“rbf”内核。使用此函数应用它:
SVC _ Gaussian = SVC(kernel = ' RBF ')
您也可以使用 Nystroem 方法。将库导入为:
从 sklearn.kernel_approximation 导入 nystrom
实施:
首先做一些数据清理。使用这个数据集的一个警告是,它有某些空值和异常值,您可以删除它们或者用中间值替换它们。之后,执行数据可视化,以了解数据中的底层关系和依赖关系。为数据集的不同特征创建猫图、热图、配对图和箱线图,以寻找特征和目标变量之间的任何关系。
之后,将数据分成训练集和测试集。在数据集上训练并预测随机森林模型。最后得到查准率、查全率和查准率的分数来检验模型的性能。从 sklearn.metrics 中,可以导入分类 _ 报告、准确度 _ 得分、精确度 _ 得分、召回 _ 得分来查看性能指标。
2.肝硬化预测:
照片由国立癌症研究所在 Unsplash 上拍摄
肝硬化是一个普遍的问题,尤其是在北美,这是由于酒精的大量摄入。在这个项目中,我们将根据患者的某些生活方式和健康状况来预测患者的肝硬化。
数据集:该数据集可在 Kaggle 上获得,它是从梅奥诊所试验中收集的。
这个数据集大约有 20 个特征。这些特征与患者的详细信息有关,如年龄、性别等。以及患者的血液测试,如凝血酶原、甘油三酯、血小板水*等。所有这些因素都有助于了解患者患肝硬化的几率。
同样,该数据集面临的挑战是需要替换或删除的空值。此外,该数据集具有不*衡的类,因此可能需要对数据集进行上采样。
算法:
我们可以为此使用随机森林分类器,也可以为此模型使用 XGBoost 分类器。一个好的做法是对这两个模型的数据进行训练,并选择得分最高的模型。从 xgboost 中,我们可以导入 XGBClassifier。
实施:
首先,执行一些数据清理,检查异常值和空值。可以通过计算数据集的 z 得分并保持一个阈值来检查异常值,超过该阈值的数据值将被视为异常值。然后做一些探索性的数据分析和可视化,更好地理解数据。当将数据拆分为训练集和测试集时,使用分层 K-fold 来确保目标变量在所有测试和训练拆分中均衡。可以通过从 sklearn.model_selection 导入 StratifiedKFold 来完成。然后在两个模型上训练数据,根据精度、召回率、准确度等性能指标选择模型。从 sklearn.metrics 中,您可以导入分类 _ 报告、准确度 _ 得分、精确度 _ 得分、召回 _ 得分来检查性能指标。
3.糖尿病视网膜病变:
照片由 Harpreet Singh 在 Unsplash 上拍摄
该项目的目的是识别和预测糖尿病患者眼睛后部组织(视网膜)中血管受损的机会,这种情况称为糖尿病视网膜病变。
数据集——这个数据集可以在 Kaggle 上找到
算法:
这是一个计算机视觉问题,我们将对它应用深度学习技术。我们将使用 U-Net 架构来训练数据。为了实现 U-Net,我们将使用 keras,这是一个运行在 TensorFlow 之上的强大的深度学习库。将库导入为:
从 keras.models 导入顺序
从 keras.layers 导入密集、Conv2D、MaxPooling2D、Dropout、Flatten
在 U-Net 架构中有不同的阶段和层次。主要有三个阶段:扩张、连接和收缩阶段。
实施:
首先,数据(图像)被加载、预处理并转换成数组格式。数组值代表像素强度。
数据预处理后,将数据拆分为训练和测试拆分。这种划分必须分层,以确保两种标记的比例相称,并衡量视网膜病患者与健康患者的真实分布。分层 k 倍分裂在医疗保健应用中尤其重要,因为否则它会导致疾病预测和检测中的偏差。可以通过导入此库来完成:
从 sklearn.model_selection 导入 StratifiedKFold】
通过查看训练集和测试集的损失来检查模型的表现。绘制两组的图表并比较结果。
4.新冠肺炎病例和死亡率的时间序列预测
马丁·桑切斯在 Unsplash 上拍摄的照片
在这个项目中,目标是确定疫情的性质并预测其发展。
数据集——该数据集可在此链接上获得,但最初来自约翰·霍普斯金大学。
该数据集包含关于新冠肺炎级数的信息,它有 6 个参数:
id,省州,国家,确诊病例,死亡病例
目标及实施:
您可以首先可视化数据,在数据中寻找可能的趋势。分析时间序列,特别是不同地区的死亡人数和确诊病例,以及它们如何随地区而变化。
这个项目的主要目标是了解新冠肺炎病例在每个区域内的个别进展情况,然后在全球范围内的整体进展情况。在仔细分析数据后,从数据中草拟关键见解。除了编写代码和机器学习之外,数据科学家的一项重要技能是从数据中获取洞察力的能力,这是由批判性思维驱动的。
在数据集中查找“在特定时间框架内,特定地区的病例增长如何超过其他地区”、“单位时间内病例斜率较高的地区”、“每个地区死亡人数发展的最大增长窗口”。
所有这些信息对于监测疾病的传播、制定大流行相关策略(如封锁计划等)至关重要。
算法:
用 ARIMA 模型来解决这个问题。要实现这种库导入:
从 statsmodels.tsa.arima_model 导入 ARIMA
你也可以使用一个简单的 RNN 模型。
用滚动*均值和标准偏差图检查案例的分布。您还可以使用 Dickey fuller 测试来检查时间序列的*稳性。
将数据分成训练集和测试集。计算*均绝对百分比误差和置信区间。
5.乳腺癌预测:
照片由安格拉·哈里在 Unsplash 上拍摄
在这个项目中,我们将预测患者是否患有乳腺癌。
数据集——乳腺癌数据集可以在 UCI ML 知识库和 Kaggle 上找到。
算法及实现:
在这个项目中,我们将根据取自乳腺实性肿块患者的体液样本来预测乳腺癌。基于细胞核的某些特征,如“周长”、“面积”、“纹理”、“凹度”等。我们可以预测乳腺癌是恶性还是良性。
数据包括很少的分类特征,它们需要被转换成数字特征,以便任何机器学习模型可以处理它们。我们可以使用 sklearn 库的“ get_dummies ”或“ one_hot_encoder ”函数来实现。
在一些数据处理之后,应用机器学习算法。针对这个问题应用深度神经网络。要实现它,请导入这些库:
从 tensorflow.keras.models 导入顺序
从 tensorflow.keras.layers 导入密集,激活
我们可以通过改变“优化器”、“损失函数”等超参数来找到最佳模型。你可以尝试用不同的损失函数和优化器做两个模型——loss = ' binary _ cross entropy '和' mean_squared_error ',optimizer= "rmsprop "和" adam "。根据性能指标检查模型类型中的最佳模型。
从 sklearn.metrics 中,您可以导入分类 _ 报告、准确度 _ 得分、精确度 _ 得分、召回 _ 得分来检查性能指标。
你可以在周末完成的 5 个数据科学项目
原文:https://towardsdatascience.com/5-data-science-projects-that-you-can-complete-over-the-weekend-34445b14707d?source=collection_archive---------9-----------------------
所有新来者都受到高度欢迎
照片由弗拉达·卡尔波维奇 发自佩克斯
当我们开始在数据科学领域工作时,我们通常会发现为我们的实践找到正确的学习途径很有挑战性。我们在 Kaggle 上有可用的开源数据科学项目。但是,那些可用的开源项目要么太难理解,要么太容易以至于没有遵循正确的实践。
2016 年,当我开始我的数据科学之旅时,我从“房价预测”和“泰坦尼克号灾难预测”这样非常基础的项目开始。但是,在从事实时工业项目后,我发现这些基础项目不足以在数据上练习你的 EDA 技能。
我收集了一些基于行业的机器学习项目的开源数据及其解决方案,你可以在周末尝试在各个领域实践不同的机器学习模型。我还将与所有解决方案和数据集共享 GitHub 链接。
1.预测信用卡消费
这个项目是基于一个回归问题。任务是训练一个机器学习模型,可以根据历史数据预测信用卡支出。该模型可以帮助银行业根据用户过去的经验来决定信用卡额度。
这个项目有 15 个以上的专栏,从中找出最好的特性。通过这种方式,您还将学习不同的特征消除和选择技术。
最后,我们将使用 bagging 和 boosting 机制为我们的数据找到一个更好的模型。
资料截图
项目来源:你可以在我的 GitHub 页面这里找到解决的 Jupyter 笔记本。
项目数据:项目的数据集可以在这里找到。
2.沃尔玛销售预测
这个项目是另一个实时工业任务。主要目标是预测不同项目的未来销售。这个项目可以帮助公司维持他们依赖于未来销售的供应。
这里,我们有销售的区间水*数据。我们可以尝试 ARIMA、萨里玛、霍尔特和其他预测模型来预测未来几个月的销售。
资料截图
项目来源:你可以在我的 GitHub 页面这里找到解决的 Jupyter 笔记本。
项目数据:项目的数据集可以在这里找到。
3.网络入侵检测
这个项目是另一个令人兴奋的分类任务,有 100 多个特征来训练一个分类模型来对网络入侵类型进行分类。
这里的主要任务是尝试不同的特征消除和特征选择技术来减少特征的数量。最后,我们必须想出一些影响目标变量的重要特征。
最后,我们可以尝试一组分类模型,以找到最适合我们数据的模型。
资料截图
项目来源:你可以在我的 GitHub 页面这里找到解决的 Jupyter 笔记本。
项目数据:项目的数据集可以在这里找到。
4.细分信用卡用户
该项目来自细分领域。任务是对具有相同特征的不同用户进行细分。行业利用这些细分市场,通过一系列活动来锁定用户。
该项目将使用 KMeans 聚类来根据不同聚类的轮廓分数定义不同的聚类。
资料截图
最后,我们将得到一个包含不同用户群的 excel 文件,以此作为我们营销策略的目标。
演示输出
项目来源:这里你可以在我的 GitHub 页面找到已经解决的 Jupyter 笔记本。
项目数据:项目的数据集可以在这里找到。
5.分析在线职位发布
这个项目是另一个令人兴奋的文本分析任务。在这里,您将学习处理数据清理步骤的不同方法。您将了解将文本数据转换为数字向量的不同方法,这有助于我们的机器理解文本数据。
我们还将使用文本分类模型,后面是文本数据的词云表示,用于摘要。
资料截图
项目来源:你可以在我的 GitHub 页面这里找到解决的 Jupyter 笔记本。
项目数据:项目的数据集可以在这里找到。
结论
好了,这篇文章就到这里。我们已经讨论了这个周末你可以练习的五个项目。这些是不同行业的实时项目场景。
这些项目包括回归、分类、分割、预测和文本分析领域的问题。
我希望你喜欢这篇文章。谢谢你的阅读!
以下是我的一些最佳选择:
https://betterprogramming.pub/how-a-single-mistake-wasted-3-years-of-my-data-science-journey-b7ca1e962085 https://betterprogramming.pub/10-python-tricks-that-will-wow-you-de450921d96a
走之前……
如果你喜欢这篇文章,并且想继续关注更多关于 Python &数据科学的精彩文章——请点击这里https://pranjalai.medium.com/membership考虑成为一名中级会员。
请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。
还有,可以随时订阅我的免费简讯: 普朗加尔的简讯 。
从 Scikit 了解 5 种数据转换器-了解
原文:https://towardsdatascience.com/5-data-transformers-to-know-from-scikit-learn-612bc48b8c89?source=collection_archive---------19-----------------------
您可能不知道存在数据转换技术。
图片来自作者
如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。
作为数据科学家,我们经常面临许多在探索数据和开发机器学习时遇到困难的情况。斗争可能来自于统计假设,谁不适合你的数据或数据中有太多的噪音。在这种情况下,您可能需要转换数据以获得更好的清晰度或满足统计方法的假设。
之前,我读过一篇适合初学者的关于数据转换的文章,你可以在这里阅读。
[## 数据转换的初级解释
towardsdatascience.com](/beginner-explanation-for-data-transformation-9add3102f3bf)
如果您不了解什么是数据转换以及转换数据的好处(或坏处),我建议您阅读上面的文章。如果你觉得已经理解了这些概念,那么我们可以进行更深入的讨论。
我要说的一个免责声明是,在进行数据转换时,您需要非常小心,因为您最终会得到一个转换后的数据,它不再是您的原始数据。你需要理解为什么你需要转换你的数据和转换后的数据输出,这就是我写这篇文章的原因。
在本文中,我想从 Scikit-Learn 中概述一个更高级的数据转换,我们可以在特定的情况下使用它。它们是什么?让我们开始吧。
1.分位数变压器
分位数转换是一种非参数数据转换技术,用于将数字数据分布转换为遵循特定的数据分布(通常为高斯分布(正态分布))。在 Scikit-Learn 中,分位数转换器可以将数据转换成正态分布或均匀分布;这取决于您的发行参考。
分位数变换是如何工作的?从概念上讲,分位数转换器将分位数函数应用到要转换的数据中。分位数函数本身是累积分布函数(CDF) 的反函数,你可以在这里查看正态分布的。如果使用均匀分布,转换后的数据将是数据的分位数位置。让我们使用示例数据来更好地理解转换。
import seaborn as sns
import numpy as np
from sklearn.preprocessing import QuantileTransformer#Using mpg data
mpg = sns.load_dataset('mpg')#Quantile Transformation (by default it is Uniform)
quantile_transformer = QuantileTransformer(random_state=0, output_distribution='uniform')
mpg['mpg_trans'] = pd.Series(quantile_transformer.fit_transform(np.array(mpg['mpg']).reshape(-1, 1))[:,0])mpg[['mpg', 'mpg_trans']].head()
作者图片
上图可以看到,索引 0 中的真实数据是 18,转换后的数据是 0.28;为什么是 0,28?让我们试着取 mpg 列的分位数 0.28。
np.quantile(mpg['mpg'], 0.28)
作者图片
结果是 18;这意味着转换后的数据是实际数据的分位数位置的*似值。请注意,当您应用分位数转换时,您会丢失转换变量之间的线性相关性,因为分位数转换器是一个非线性转换器。然而,由于数据已经改变,因此不期望测量转换变量之间的线性相关性。
分位数转换通常用于移除异常值或拟合正态分布,尽管有许多类似的数据转换可供比较。
2.电力变压器
分位数变压器是应用分位数函数的非参数变压器, Power Transformer 是通过Power Function实现的参数变压器。与分位数转换器一样,Power Transformer 通常用于转换遵循正态分布的数据。
从 Scikit-Learn 中,电源变压器类中给出了两种方法: Yeo-Johnson 变换和 Box-Cox 变换。这两种方法的基本区别在于它们允许转换的数据— Box-Cox 要求数据为正,而 Yeo-Johnson 允许数据同时为负和正。让我们使用示例数据来使用 Scikit-Learn 中的电源转换。我想使用以前的数据集,因为有些要素不是正态分布的,例如,权重要素。
sns.distplot(mpg['weight'])
作者图片
正如我们在上面的图像中所看到的,分布明显偏右或正偏,这意味着它没有遵循正态分布。让我们使用电力变压器来转换数据,以密切遵循正态分布。
from sklearn.preprocessing import PowerTransformer
pt = PowerTransformer(method = 'box-cox')
mpg['weight_trans'] = pt.fit_transform(np.array(mpg['weight']).reshape(-1,1))[:,0]sns.distplot(mpg['weight_trans'])
作者图片
使用 Power Transformer(本例中的 Box-Cox)会使数据更接*正态分布。由于数据非常倾斜,转换后的数据并不完全遵循正态分布,但它比未转换的数据更接*正态分布。
虽然 Quantile Transformer 和 Power Transformer 都可以通过保留等级将您的数据转换为另一种数据分布,但其用途可能仍取决于您的数据和您对转换的预期比例。没有确定的方式说一个变压器比另一个好;要知道哪种转换器适合您的数据,您可以做的就是应用它并衡量您使用的指标。
3.k-bin 离散化
离散化是一个**将连续特征转化为分类特征的过程,方法是将其划分为期望值范围(区间)**内的几个区间。我将向您展示下表中的示例数据和离散化转换。
作者图片
在上表中,我有五个数据点(10,15,20,25,30),我将连续值离散化为一个分类特征,称为 Bins,其中包含值 1 和 2。在 bin 特性中,我将 10–20 之间的值输入到类别 1 中,其余的输入到类别 2 中——这就是离散化的基本工作方式。
在 Scikit-Learn 中,使用具有设定间隔(通常为分位数)的宁滨进行离散化的过程在 KBinsDiscretization 类中编译。让我们用数据集的例子来更好地理解这个函数。
from sklearn.preprocessing import KBinsDiscretizer#Setting the divided bins into 5 bins with quantile interval and transformation into ordinal categoryest = KBinsDiscretizer(n_bins = 5, encode = 'ordinal', strategy='quantile')mpg['mpg_discrete'] = est.fit_transform(np.array(mpg['mpg']).reshape(-1,1))mpg[['mpg', 'mpg_discrete']].sample(5)
作者图片
从上表可以看出,连续特征 mpg 被离散化为有序分类特征。您通常会从离散化特性的一键编码中受益;这就是为什么 KBinsDiscretizer 还为您提供了 One-Hot 功能(事实上,默认的编码参数是‘One Hot’)。然而,我经常在 OHE 过程中使用 Pandas get_dummies 特性,因为它比直接从 KBinsDiscretizer 中处理更容易。
4.特征二值化
特征二值化是一个简单的离散化过程,使用一定的阈值将连续特征转换成分类特征。要素二值化的结果是布尔值-真或假(0 或 1)。让我们尝试使用 Scikit 中的二进制化类——学习理解概念。
from sklearn.preprocessing import Binarizer#Setting the threshold to 20
transformer = Binarizer( threshold = 20)mpg['mpg_binary'] = transformer.fit_transform(np.array(mpg['mpg']).reshape(-1,1))mpg[['mpg', 'mpg_binary']].sample(5)
作者图片
从上表可以看出,小于 20 的值将返回 False (0),其余的值将返回 True (1)。门槛是我们经常设定的;您可能想知道为什么设置当前阈值。请注意,如果您将 KBinsDiscretizer n_bins 使用为 2,那么如果阈值与 bin 边缘值相似,它将与二进制化器相似。
5.功能变压器
Scikit-Learn 为我们提供了许多可以用于数据预处理管道的转换方法。然而,我们想应用我们自己的函数进行数据转换,但是 Scikit-Learn 没有提供它。这就是为什么 Scikit-Learn 也提供了 Function Transformers 类来开发他们自己的数据转换函数。
为什么我们要用 Scikit-Learn 开发自己的自定义函数?您的模型只需要有一个 Scikit-Learn 管道,并且需要在您的数据管道中有一个自定义转换。使用模型和数据越多,您就会意识到自定义转换器的使用频率比您想象的要高。
让我们试着用函数变形金刚创造我们自己的变形金刚。我想在我的数据管道中将我的数据转换成日志值,但是 Scikit-Learn 没有提供该功能;这就是为什么我需要自己开发它。
from sklearn.preprocessing import FunctionTransformer#Passing the log function from numpy which would be applied to every data in the columntransformer = FunctionTransformer(np.log, validate=True)mpg['mpg_log'] = transformer.fit_transform(np.array(mpg['mpg']).reshape(-1,1))
mpg[['mpg', 'mpg_log']].head(5)
作者图片
使用函数转换器,您可以像上面的结果一样控制自己的转换结果。数据被转换成日志数据,您可以使用它进行进一步的处理。
你不一定需要依赖 Numpy 包;你总是可以创建你自己的函数——重要的是函数产生一个输出。例如,我在下面的代码中创建了自己的函数。
def cust_func(x):
return x + 1
该函数将通过加法过程返回一个数值(加 1)。让我们将它传递到我们的自定义变压器中。
transformer = FunctionTransformer(cust_func, validate=True)
mpg['mpg_cust'] = transformer.fit_transform(np.array(mpg['mpg']).reshape(-1,1))
mpg[['mpg', 'mpg_cust']].head(5)
作者图片
从上表中可以看出,我们的值结果遵循我们之前开发的函数。Function Transformer 听起来很简单,但从长远来看,它将有助于您的管道过程。
结论
数据转换是数据工作中的一个典型过程,如果您知道数据转换过程的结果,通常会对您的工作有所帮助。Scikit-Learn 为我们提供了一些数据转换方法,包括:
- 分位数转换器
- 电力变压器
- K-Bins 离散化器
- 特征二值化
- 功能变压器
希望有帮助!
在我的LinkedIn或 Twitter 上访问我。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
5 个可以免费使用的数据库
原文:https://towardsdatascience.com/5-databases-that-you-can-use-for-free-841cf81834bf?source=collection_archive---------8-----------------------
你不需要在高质量的数据库管理上花很多钱
美国宇航局在 Unsplash 拍摄的照片
没有数据就不能说数据科学;数据科学本质上是一个科学领域,它试图翻译和传递数据的故事,并使用该故事在未来做出更好的业务决策。所以我认为,挖掘数据试图讲述的隐藏故事本质上是数据科学家在每个项目中所做的事情。
处理可能是您最重要的任务,通常您会使用某种数据库来完成这项任务,无论是本地数据库还是基于服务器的数据库。通常,当你是一名专业数据科学家时,无论你是独立工作还是在公司工作,你将在项目中使用的数据都会提供给你,所以你所要做的就是使用它,利用它并揭示它的模式和趋势。
你需要将大部分注意力和精力放在这项任务上,而不是如何管理数据、存储数据或扩展存储。此外,如果你是一个自由职业的数据科学家,或者是一个初学者,找到一个灵活而强大的好数据库并不总是负担得起的。并不是所有的免费选项都是好的。
当我学习数据科学的基础知识时,我陷入了寻找好的、免费的数据库系统的困境,这些系统给了我所需要的所有能力和灵活性,而没有任何隐藏的成本。因此,我可以专注于讲述我的数据故事,而不是浪费时间管理和处理数据的存储和处理。
在本文中,我将带您浏览 5 个数据库管理系统,您可以免费使用它们,它们提供了灵活性、强大的功能以及顺利管理项目数据所需的一切。
№1: HarperDB
让我们从 HarperDB 开始吧。HarperDB 是一个 SQL/ NoSQL 数据管理*台,它是完全索引的,易于扩展,具有永久免费的权限,并且比 MongoDB 快得多。它还可以处理不同格式的数据,从 CSV 到 JSON,并带有一个简单的 REST API 端点,便于与大多数编程语言集成。
HarperDB 除了离线管理工作室之外,还提供了一个云*台,该*台易于安装和导航,与语言无关,并且不需要复杂的数据库配置。开发人员为开发人员构建了它,使他们的数据管理高效而快速。
№2:重新思考 DB
开源帮助技术领域进入了一个新的层次,这个列表中的第二个数据库系统是第一个开源的、可伸缩的数据库。 RethinkDB 。RethinkDB 是通过在发生变化时推送 JSON 数据而专门为实时应用程序构建的。
由于当今现实生活中的应用程序在规模上快速增长,RethinkDB 提供了一个快速且简单易用的 web 界面,只需点击几下鼠标即可帮助您扩展项目和应用程序。我最喜欢 RethinkDB 的一点是它的社区,以及他们如何一直致力于改进它,使它对全世界的开发者更有用。
№3: FaunaDB
接下来,我们有的 FaunaDB 。FaunaDB 是另一个以开发者为中心的;它是作为一个安全的 web 本地 GraphQL API 提供的。此外,它是一个灵活的关系型查询数据库,无需编写额外的代码或手动分配新的资源,就可以轻松扩展。
FaunaDB 提供了 n 个索引数据文档,您可以使用这些文档根据项目需求和数据类型创建不同的数据模型。此外,它使您能够组合关系、文档和图形,并消除不限制键数的异常。
№4:蟑螂 DB
接下来是一个有趣的命名数据库,我第一次看到它时忍不住笑了,cocroach db。CockroahDB 是一个可靠的数据库,可以以相同的效率和速度用于小型和大型应用程序。它提供了一个分布式 SQL,具有关系文档数据库的易用性和云*台的强大可扩展性。
CockroachDB 是基于 Kubernetes for SQL 构建的,可以支持 ORM(对象关系映射)。它提供数据安全性,并允许您轻松扩展您的应用程序。
</9-free-quality-resources-to-learn-and-expand-your-python-skills-44e0fe920cf4>
№5: CouchDB
最后但同样重要的是一个 Apache 数据库,正如它的名字所暗示的那样,使用起来很舒服。CouchDB 是一个多主同步数据库,可以针对大数据应用轻松扩展。与 RethinkDB 类似,CouchDB 是一个开源数据库,您可以对其进行个性化设置,以使其对您和您的数据更好。
您可以使用 CouchDB 和 JSON API 在本地、全球、在线或离线服务器上安全地存储您的数据,couch db 和 JSON API 是为效率和可靠性而设计和构建的。此外,CouchDB 复制协议允许您通过友好的查询语言和利用 MapReduce 进行高效数据检索的能力,在不同的服务器集群之间自由轻松地移动数据。
最后的想法
每个数据科学家需要完成的基本任务之一是以高效、灵活和强大的方式管理他们的数据库。在每个数据科学项目中,我们设计解决方案、实施算法并编写代码,以帮助我们更好地理解数据并基于数据做出更好的决策。
理解数据、其趋势以及其含义应该是数据科学家的主要关注点,因为这是项目的核心。但是,如果我们没有一个坚实的数据库结构,使我们能够有效地与数据通信,在需要时使用数据,并在可能的情况下添加数据,我们就无法真正专注于这一部分。
</7-tools-used-by-data-scientists-to-increase-efficiency-a0eb1edcc892>
如果您正在寻找一个灵活、高效、可扩展的数据库,那么您一定像我一样在网上到处跑,测试和尝试可用的选项,寻找一个最适合您和您的数据而又不花费大量金钱的数据库。在我今天的文章中,我在你面前展示了 5 个免费的强大的数据库,你可以在你的下一个项目中轻松使用,而不用担心任何额外的成本。
5 个决策树超参数来增强您的树算法
原文:https://towardsdatascience.com/5-decision-tree-hyperparameters-to-enhance-your-tree-algorithms-aee2cebe92c8?source=collection_archive---------14-----------------------
了解一些最常见的超参数,您可以调整这些参数来提高基于树的算法的性能
图片由Alperen yazgá@ unsplash . com 提供
D 决策树是非常酷的算法,为随机森林、LightGBM 或 XGBoost 等更高级的算法奠定了基础。在您的数据科学之旅中,决策树可能是您将学习的第一个非线性算法,因为它们非常易于解释和理解。如果你还在纠结基于树的算法,看看我写的关于分类树的文章。希望,这可能是一个有趣的阅读,以帮助你
在研究数据科学和机器学习的背景下,决策树可能是您将学习的第一个算法,当涉及到它们的性能时,超参数是必不可少的。可以说,超参数对于基于树的算法来说比其他模型更重要,比如基于回归的模型。至少,人们可以在决策树中调整的超参数的数量比大多数算法更加庞大和多样化。
随着权力越来越大,责任也越来越大,决策树可以发现特征和目标之间非常有趣的非线性关系,但它们也非常容易出现高方差,通常称为过度拟合。
你如何控制过度拟合的趋势?用超参数!
**超参数是模型在训练期间无法推断的参数,数据科学家必须自行校准。**正如我们已经讨论过的,学习该算法还会让您很好地理解超参数在训练过程中的重要性,以及更改它们如何影响您的机器学习解决方案的性能和稳定性。
在本帖中,我们将检查一些在拟合决策树时可以调整的常见超参数,以及它们对模型性能的影响。开始吧!
最大深度
我们要研究的第一个超参数是“最大深度”参数。这个超参数设置了一棵树在训练过程中可以“下降”的最高级别。例如,在分类树的 sklearn 实现中,默认情况下,最大深度设置为 none。
在训练过程中没有最大深度会有什么影响?假设你的树不受任何其他超参数控制,你的树可以“理论上”向下直到所有节点都是纯的。这种方法的一个主要问题是,你可能最终只对训练表中的一个例子做出决定。想想看,如果你让你的树降得太多,你就会递归地分割你的空间,直到你“潜在地”隔离了每个例子——这将导致过度拟合,因为你的算法在训练样本中会非常好,但无法推广到现实世界——这是机器学习算法的最终目标。
通过尝试你的树的不同深度级别,你将在你的算法的泛化能力和拟合能力之间取得*衡——下面是一个图形示例,说明当你尝试不同的最大深度参数时会发生什么:
最大深度演示—图片由作者提供
概括一下:
- 一些过高的最大深度可能会导致过度拟合或高方差。
- 太低的最大深度数可能导致欠拟合或高偏差。
最小样本分割
正如我们已经看到的,如果我们不在我们的树中设置最大深度,我们最终会鼓励我们的树寻找纯节点——只包含一个单一类(分类树)或一个连续值(回归树)的节点。这自然会使我们的树基于更少的例子做出决定,因为纯节点可能基于大量的分裂,并且容易遭受维数灾难。
**有没有其他超参数可以帮助我们避免使用稀疏数据来做决策?有啊!**其中之一是“最小样本分割”超参数,它允许您控制一个节点必须包含多少样本才能进行分割。
在这个超参数上设置一个大的数字将会导致你的树用更多的例子进行概括**,因为你只在一个树节点包含的数目超过你设置的数目时才分割它。这将避免创建两个潜在的“低样本”子节点,这些子节点将从节点中产生。**
一个极端的例子(在这个超参数中的一个高值)是:如果你使用训练规模作为“最小样本分割”,你的结果只是目标变量的*均值,因为你是在整个群体上做出推断的——当然,这种方法会有点无意义。
较小数量的最小样本分割会导致决策树过拟合,因为它会对较少的样本做出决策,这与选择较高的决策树最大深度具有相同的效果。
概括一下:
- 太低的“最小样本分割”数可能会导致过度拟合或高方差。
- 过高的“最小样本分割”数可能会导致欠拟合或高偏差。
最小样本叶
与我们上面看到的超参数类似,最小样本叶是一个超参数,它控制末端叶节点可以拥有的样本数量。叶子节点是你的树的任何终端节点,将被用于分类新点。
这与我之前介绍过的超参数非常相似,唯一的区别是您试图控制的样本大小的阶段。在上面的超参数中,在分割节点之前,您控制节点中的实例数量。使用最小样本叶,您可以控制节点中的样本数量,在之后,拆分“可能”发生。
通过增加最小样本数,你也可以防止过度拟合,试图避免维数灾难。
概括一下:
- 太低的“最小样本叶”数可能会导致过度拟合或高方差。
- 太高的“最小样本叶”数可能导致欠拟合或高偏差。
最大功能
不作用于样本大小而作用于特征的超参数是“最大特征”超参数。默认情况下,每次决策树对候选项执行搜索以执行下一次分割时,它都会广泛地查看每个特征。
这主要有两个缺点:
- 您可以阻止您的树以任何方式处理随机性-例如,如果您的树每次执行分割时只能使用随机选择的一些要素,您将在训练过程中引入一个随机过程,这将有利于您的性能。
- 如果你的维数很高,你的树将需要很长时间来训练。
使用 max features,您可以通过为每次分割随机选择一组功能来增加训练过程的趣味。当你有很多特性时,这是非常实用的。
在 sklearn 实现中,您将找到不同的方法来选择每次分割时您想要考虑的最大特性数量——您可以将其定义为一个整数或特性总数的一部分(例如,所有特性的 50%)。
概括一下:
- “最大特征”的数量很高,*似于在没有参数集的情况下对决策树的大范围搜索。
- 当选择树的下一个分割时,较低的最大深度值会选择较少的随机特征来考虑。
最小杂质减少
另一种调整你的树并更严格地确定哪些分裂对你的树来说是“可接受的”的方法是控制杂质的数量(你想要在每个分裂中最小化的值)。
默认情况下,在每一次分裂中,你接受你整个树中杂质的减少。使用该超参数设置,仅当分割将杂质减少了 x 量时,才应用分割。
这个超参数直接作用于决策树的成本函数——即使分割减少了杂质并“理论上”改善了分类或回归,它也不能用于前进,因为它不符合您定义的阈值。在 sklearn 实现中,该值默认设置为 0——这意味着只要减少杂质,任何分割都是有效的,即使它将该值减少 0.00001。
概括一下:
- 低数值的“最小杂质减少”将使你的树在“理论上”有效的分裂上分裂你的数据,但是那可能是没有意义的;
- 高数值的“最小杂质减少”会使你的训练过程在选择下一次分裂时过于严格,导致高偏差。
感谢您的阅读!这是我在开发决策树时通常会调整的 5 个超参数。学习决策树在我对 DS 和 ML 的研究中是必不可少的——正是算法帮助我理解了超参数对算法性能的巨大影响,以及它们如何成为项目成败的关键。
我在Udemy开设了一门关于从零开始学习数据科学的课程——这门课程是为初学者设计的,包含 100 多个练习,我希望您能在身边!
https://ivopbernardo.medium.com/membership
引领人工智能进入下一阶段的 5 个深度学习趋势
原文:https://towardsdatascience.com/5-deep-learning-trends-leading-artificial-intelligence-to-the-next-stage-11f2ef60f97e?source=collection_archive---------1-----------------------
人工智能|深度学习|未来
深度学习主导了人工智能,但它需要更新以保持其霸权,并推动该领域向前发展。
来源:顾在 Unsplash
人类是发明家的一种。世界提供给我们原材料,我们用熟练的工艺将它们转化。技术创造了无数的工具和设备:轮子、印刷机、蒸汽机、汽车、电力、互联网……这些发明已经并仍在塑造着我们的文明和文化。
我们最新的技术孩子之一是人工智能,这是一种*年来与我们的生活交织在一起的工具。它对我们社会的影响是显著的,预计在未来的几十年里会继续增长。人工智能的领军人物之一吴恩达甚至说“人工智能是新的电力”在斯坦福商业的采访中,他说“就像 100 年前电力改变了几乎一切一样,今天我实际上很难想象一个我认为人工智能在未来几年内不会改变的行业。”
但人工智能并不新鲜。它存在于 1956 年,当时约翰·麦卡锡创造了术语,并提出人工智能是一个独立的研究领域。从那以后,它经历了完全漠不关心和源源不断的资金和利息的交替时期。今天,机器学习和深度学习(DL)垄断了 AI。2012 年开始的 DL 革命还没有结束。DL 戴上了人工智能的桂冠,但专家们认为它需要一些改变来保持它。让我们看看 DL 的未来。
摆脱卷积神经网络
在“人工智能教父”杰弗里·辛顿(Geoffrey Hinton)和他的团队凭借一个基于卷积神经网络(CNN)的模型赢得 2012 年 ImageNet 挑战赛之后,DL 的人气飙升。他们以+10%的误差率击败了他们的(非 DL)对手,达到了 63.30%的最高准确率。我们可以说,在过去的十年中,数字图书馆引起了 CNN 的成功和兴趣,这是我们的功劳。
基于 CNN 的模型在计算机视觉任务中非常受欢迎,如分类图像、检测物体,或识别人脸。然而,尽管它们很有用,但辛顿在他的 AAAI 2020 主题演讲中强调了一个重要的缺点:“【CNN】不太擅长处理旋转和缩放等视角变化的[…]影响。”
CNN 可以处理翻译,但人类的视觉系统也可以识别不同视角、背景或光照条件下的物体,这是 CNN 做不到的。当今天的顶级 CNN 系统——在 ImageNet 基准测试中获得了+90%的顶级准确性(——尝试在真实世界的对象数据集中对图像进行分类时,它们会经历 40 %- 45%的性能下降(。
另一个问题是所谓的反面例子。辛顿再次强调了人类视觉系统和 CNN 之间的差异:“我可以拍摄一张图像和一点点噪声,CNN 会将其识别为完全不同的东西,我几乎看不出它发生了变化。[……]我认为这证明 CNN 实际上在使用与我们非常不同的信息来识别图像。”CNN 从根本上不同于人类的视觉系统。由于它们的不可预测性,我们根本不能依赖它们。
Hinton 更进一步解释说,CNN 系统不能解释他们在图像中看到的物体。我们知道物体存在于世界中,我们对它们有经验。从很小的时候起,我们就知道了坚固性、形状恒常性或物体的持久性。我们可以利用这些知识来理解奇怪的物体,但 CNN 只能看到一堆像素。我们可能需要从根本上改变计算机视觉的统治模式,也许是朝着胶囊网络的方向。套用量子力学之父马克斯·普朗克的话:
“科学一次进步一个葬礼。”
自我监督的深度学习
"人工智能的下一场革命将不会受到监督,也不会得到纯粹的强化."
——脸书大学首席人工智能科学家 Yann LeCun
今天的 DL 的一个明显的限制是它对大量标记数据和计算能力的依赖。另一位人工智能先驱 Yann LeCun 说,我们需要用他所谓的自我监督学习来取代监督学习——这是大多数人工智能系统的训练方法:
"*【自我监督学习】*是在学习一个任务之前,先学习代表世界的思想。这是婴儿和动物的行为。一旦我们对世界有了好的描述,学习一项任务就需要很少的试验和样本。”
系统将从原始数据中学习来标记它,而不是用标记的数据来训练系统。我们人类学习的速度比监督(或强化)系统快几个数量级。孩子们不会通过看成百上千张树的照片来学会辨认一棵树。他们看到一个,然后把“树”这个标签放在他们直觉上知道属于这个类别的所有东西上。我们部分是通过观察来学习的,这是计算机目前还做不到的。
Yann LeCun 在 2019 年 12 月就该话题对进行了深度访谈。他认为,自我监督系统将能够“从任何其他部分预测输入的任何部分。”例如,它可以从过去预测未来,或者从可见的事物中预测不可见的事物。然而,尽管这种类型的学习对离散输入很有效,如文本(谷歌的 BERT 或 OpenAI 的 GPT-3 ),但对连续数据如图像、音频或视频则不太有效。为此,他解释说,我们将需要潜在的基于可变能源的模型,这种模型更适合处理世界固有的不确定性。
自我监督学习将取代监督学习。未来仍有一些挑战,但我们已经在搭建弥合差距的桥梁。可以肯定的是,一旦到了彼岸,就不会回头。
"标签是机器学习研究者的鸦片."
—吉坦德拉·马利克,加州大学伯克利分校 EECS 教授
混合模型:符号 AI +深度学习
自从人工智能的概念提出以来,有两种范式在人工智能中受到了空前的欢迎:符号人工智能(也称为基于规则的人工智能)和 DL。从 50 年代到 80 年代,象征性人工智能主导了这个领域,但今天大多数专家反对这个框架。约翰·豪格兰德在他的书《人工智能:非常理念》中称之为 GOFAI(优秀的老式人工智能)。
*【符号人工智能】*处理现实世界的抽象表现,这些表现是用主要基于数理逻辑的表现性语言建模的
这是一种自上而下的人工智能方法。它旨在通过使用“问题的高级符号表示”来赋予机器智能,遵循由艾伦·纽厄尔和司马贺提出的物理符号系统假设。例如,专家系统——最受欢迎的符号人工智能形式——被设计成通过遵循一套如果-那么规则来模拟人类决策。
混合模型是结合符号 AI 和 DL 优点的一种尝试。马丁·福特在他的《智能建筑师https://bookshop.org/books/architects-of-intelligence-the-truth-about-ai-from-the-people-building-it/9781789131512?aid=11092一书中,就这种方法采访了人工智能专家。吴恩达强调了它在解决我们只有小数据集的问题时的有用性。麻省理工学院计算认知科学教授乔希·特南鲍姆(Josh Tenenbaum)和他的团队开发了一种混合模型“在没有任何明确监督的情况下,学习视觉概念、单词和句子的语义解析。”
纽约大学心理学教授加里·马库斯认为,混合模型可以更好地处理常识推理。在最*的一篇论文中,马库斯通过提及人类智力来强调他的观点:
“某种形式的符号操作似乎对人类的认知至关重要,比如当一个孩子知道“姐妹”这个词的含义时,这个词可以应用在无数个家庭中。”
尽管前景看好,混合方法也有重要的批评者。杰弗里·辛顿(Geoffrey Hinton)批评了那些打算用象征性人工智能宠坏 DL 的人。“他们不得不承认深度学习正在做令人惊讶的事情,他们希望将深度学习作为一种低级仆人,为他们提供让他们的符号推理工作所需的东西,”他说。不管它是否奏效,混合动力车型都是未来几年需要关注的事情。
“我预测,几年之内,许多人会想知道,为什么深度学习这么长时间以来一直试图在没有符号操纵工具的情况下做到这一点。”
—加里·马库斯
系统 2 深度学习
完成 2018 图灵奖获奖者三重奏的 Yoshua Bengio(与 Hinton 和 LeCun 一起)在 2019 年发表了题为 的演讲,从系统 1 深度学习到系统 2 深度学习 。他谈到了 DL 的现状,其中的趋势是让一切变得更大:更大的数据集、更大的计算机和更大的神经网络。他认为,我们不会在这个方向上进入人工智能的下一个阶段。
“我们有以非常狭窄的方式学习的机器。他们需要比人类智能例子多得多的数据来学习任务仍然会犯愚蠢的错误。”**
本吉奥从丹尼尔·卡内曼在其里程碑式的著作 《思考,快与慢 》中的洞见中汲取了双系统框架。卡尼曼将系统 1 描述为“自动且快速地运行,很少或没有努力,也没有自愿控制的感觉”,而系统 2“将注意力分配给需要它的费力的精神活动[……]通常与代理、选择和集中的主观体验有关。”
Rob Toews 总结了 DL 的现状:“今天的尖端人工智能系统擅长系统 1 的任务,但与系统 2 的任务斗争激烈。”本吉奥同意。“我们(人类)想出算法、配方,我们可以计划、推理、使用逻辑,”他说,“通常,如果你与计算机解决这些问题相比,这些事情非常慢。这些也是我们希望未来深度学习做的事情。”
Bengio 认为系统 2 DL 将能够归纳为“不同的数据分布”,这被称为无序分布。目前,DL 系统需要在具有相同分布的数据集中进行训练和测试,这响应了独立同分布数据的假设。“我们需要能够应对这些变化并不断学习的系统。”使用非统一的真实世界数据,系统 2 DL 将会成功。
为此,我们需要具备更好的迁移学习能力的系统。本吉奥认为注意力机制和元学习——学会学习——是系统 2 认知的基本组成部分。这里有一段引言,经常被误认为是达尔文的作品,概括了达尔文关于物种起源的名著的中心思想,并强调了在不断变化的世界中学会适应的重要性:
“幸存下来的不是最强壮的物种,也不是最聪明的物种,而是最能适应变化的物种。”
基于神经科学的深度学习
"人工神经网络只是大脑工作方式的粗略类比."
—大卫·苏西洛,谷歌大脑小组
在 1950 年的十年里,几项重要的科学突破为人工智能的诞生奠定了基础。神经学研究发现,大脑是由“要么全有要么全无脉冲”的神经网络组成的。这一发现,连同来自控制论、信息论和艾伦·图灵的计算理论的理论描述,暗示了创造人工大脑的可能性。
人工智能起源于人脑,但今天的 DL 并不像它那样工作。我已经巧妙地提到了 DL 系统和人脑之间的一些差异。CNN 不像我们的视觉系统那样工作。我们观察这个世界,而不是从标记的数据中学习。我们将自底向上的处理与自顶向下的符号操作结合起来。我们进行系统 2 认知。人工智能的最终目的是建立一个可以模拟我们的电子大脑,一个人工通用智能(有人称之为强人工智能)。神经科学可以帮助 DL 向这个目标迈进。
一个重要的方法是神经形态计算,这是指模拟大脑结构的硬件。正如我在上一篇文章中写的,“生物和人工神经网络之间有很大的区别:大脑中的神经元以尖峰脉冲的时间和频率携带信息,而信号的强度(电压)是恒定的。人工神经元则完全相反。它们携带的信息只是输入的强度,而不是时间或频率。”神经形态计算正试图减少这些差异。
人工神经元的另一个缺点是简单。它们是假设生物神经元是“基础数学的哑计算器”而构建的然而,这与事实相去甚远。在发表在科学上的一项研究中,一组德国研究人员表明“单个神经元可能能够计算真正复杂的功能。例如,它本身可能能够识别一个物体。”
"也许你在单个神经元(大脑)中有一个很深的网络."
IMBB 的约塔·波伊拉齐
DeepMind 首席执行官兼联合创始人戴密斯·哈萨比斯在发表于 Neuron 的论文中表达了利用神经科学推动 AI 前进的重要性。除了我已经讨论过的一些想法之外,有两个关键方面很突出:直觉物理学和规划。
James R. Kubricht 和他的同事将直觉物理学定义为“人类理解物理环境并与经历动态变化的物体和物质相互作用的能力的基础知识,至少对观察到的事件将如何展开做出*似预测。”DL 系统做不到这一点。他们不在这个世界上,他们没有具体化,他们缺乏进化的包袱,这让我们有优势在周围导航。乔希·特南鲍姆正致力于将这种能力灌输给机器。
规划可以理解为“决定需要采取什么行动来实现既定目标的探索。”我们每天都在这样做,然而,对于机器来说,现实世界太复杂了。 DeepMind 的 MuZero 可以通过规划玩几款世界级水*的游戏,但这些游戏都有完美定义的规则和边界。
著名的咖啡测试提出,一个具有规划能力的 AI 应该能够进入一个普通的房子,进入厨房,获取配料并制作咖啡。计划要求我们将复杂的任务分解成子任务,但是这种能力超出了今天 DL 系统所能做到的。Yann LeCun 承认“我们不知道该怎么做。”
DL 可以从神经科学中汲取很多理念。如果我们想更接*智慧,为什么不看看我们唯一的例子呢?正如戴密斯·哈萨比斯所说,
“有这么多的利害关系,神经科学和人工智能领域走到一起的需求现在比以往任何时候都更加迫切。”
结论
DL 系统非常有用。在过去的几年里,他们单枪匹马地改变了技术领域。然而,如果我们想要创造真正智能的机器,DL 将需要一个质的更新——拒绝越大越好的观念。
今天有几种方法可以实现这一里程碑:摆脱 CNN 及其局限性,摆脱带标签的数据,将自下而上与自上而下的处理结合起来,向机器灌输系统 2 认知,并从神经科学和人类大脑中汲取思想和进步。
我们不知道实现真正智能系统的最佳途径是什么。用 Yann LeCun 的话说,“没有人有一个完全好的答案”然而,我希望我们最终会到达那里。
推荐阅读
**</5-reasons-why-i-left-the-ai-industry-2c88ea183cdd> **
提高数据科学项目的 5 个开发规则
原文:https://towardsdatascience.com/5-development-rules-to-improve-your-data-science-projects-f3392b8243cd?source=collection_archive---------14-----------------------
卡尔·帕夫洛维奇在 Unsplash 的照片
指导您的数据科学工作流程的简单技巧
在从事数据科学项目时,我喜欢为如何为项目编写代码制定一些基本规则。有了一些简单的原则,我总是确信我将要写的代码能够经受住最低的质量门槛。
在这篇文章中,我将向你展示 5 个简单的开发规则来指导你的数据科学工作流程。
规则
简而言之,规则是:
- 将脚本抽象成函数和类
- 确保函数是原子的
- 编写单元测试
- 结合 Jupyter 笔记本使用您最喜欢的文本编辑器
- 进行小规模频繁提交
现在,让我们一个一个地看一遍。
1.将脚本抽象成函数和类
假设你正在用 Jupyter 笔记本计算如何最好地可视化一些数据。一旦代码工作了,并且您认为它不需要更多的调试,就该对它进行抽象了!让我们看一个例子,
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import numpy as np
import pandas as pd
synthetic_data = np.random.normal(0,1,1000)
plt.plot(synthetic_data, color="green")
plt.title("Plotting Synthetic Data")
plt.xlabel("x axis")
plt.ylabel("y axis")
plt.show()
在这里,我们绘制了一些合成数据。假设我们对我们的绘图满意,我们现在要做的是将它抽象成一个函数,并将其添加到我们项目的代码库中:
def plotSyntheticDataTimeSeries(data):
plt.plot(data, color="green")
plt.title("Plotting Synthetic Data")
plt.xlabel("x axis")
plt.ylabel("y axis")
plt.show()
太好了!现在,我们可以将它放在我们的代码库中,并在每次需要使用这个绘图函数时调用它,如下所示:
plotSyntheticDataTimeSeries(synthetic_data)
简单,也是很好的练习。
如果出于某种原因,我们希望加载数据并对其执行一些简单的转换,我们可能希望有一个类来为我们处理这些。
让我们看一个使用大商场销售数据集的简单例子:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import numpy as np
import pandas as pd
class DataPrep:
def __init__(self,data_path,cols_to_remove=["Item_Fat_Content", "Item_Type", "Outlet_Size"]):
self.data = pd.read_csv(data_path)
self.cols_to_remove = cols_to_remove
self.removeNans()
self.removeCols()
def removeNans(self):
self.data = self.data.dropna()
def removeCols(self):
self.data = self.data.drop(self.cols_to_remove, axis=1)
self.data = self.data.reset_index(drop=True)
data_path = "./BigMartSales.csv"
dp = DataPrep(data_path)
dp.data
现在我们有了它,DataPrep 类可以被系统地用来执行我们想要的转换。这显然是一个玩具示例,并没有涵盖清理和预处理数据集的整个过程。
在这里,我们只是举例说明如何将代码抽象成函数和类,这些函数和类以后可以发展并集成到我们的生产流水线中。
2.确保函数是原子的
结合将你的管道抽象成函数和类的想法,我们也应该总是寻找原子性,也就是说,每个函数应该做一件事。这条规则源于面向对象编程的良好实践,是避免不必要的复杂性的良好指南,这种复杂性可能会在将来耗费大量时间。
因此,如果我们有一个情况,我们加载数据集,转换它,然后绘制它,我们应该为这个过程的每个原子写一个函数。
让我们将一个绘图函数添加到上一个示例的代码库中,看看它会是什么样子:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import numpy as np
import pandas as pd
def badExampleofNonAtomicFunction():
data_path = "./BigMartSales.csv"
cols_to_remove = ["Item_Fat_Content", "Item_Type", "Outlet_Size"]
data = pd.read_csv(data_path)
data = data.dropna()
data = data.drop(cols_to_remove, axis=1)
data = data.reset_index(drop=True)
data[data["Outlet_Identifier"]=="OUT049"]["Item_Outlet_Sales"].plot()
plt.title("Sales for Outlet: OUT049")
plt.show()
badExampleofNonAtomicFunction()
尽管如此,这里我们并没有构建一个合理的跟踪记录来记录我们对数据集应用了什么,所以调试这个将是一场噩梦。
现在让我们看一个例子,看看如何使这段代码更容易调试。我们可以从使用之前构建的类开始,在该类之外编写一个简单的绘图函数:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import numpy as np
import pandas as pd
class DataPrep:
def __init__(self,data_path,cols_to_remove=["Item_Fat_Content", "Item_Type", "Outlet_Size"]):
self.data = pd.read_csv(data_path)
self.cols_to_remove = cols_to_remove
self.removeNans()
self.removeCols()
def removeNans(self):
self.data = self.data.dropna()
def removeCols(self):
self.data = self.data.drop(self.cols_to_remove, axis=1)
self.data = self.data.reset_index(drop=True)
def plotOutletSales(data, outlet_id):
data[data["Outlet_Identifier"]==outlet_id]["Item_Outlet_Sales"].plot()
plt.title(f"Sales for Outlet: {outlet_id}")
plt.show()
data_path = "./BigMartSales.csv"
dp = DataPrep(data_path)
plotOutletSales(dp.data, outlet_id="OUT049")
现在,我们有了稍微好一点的东西,因为我们让每一步都成为一个构建模块,为我们的管道添加单独的功能。
3.编写单元测试
编写单元测试肯定是一个有点烦人的步骤,但对于生产代码来说,确保我们的代码对于真实环境足够健壮,以及在部署管道时帮助防止不必要的错误和问题是非常重要的。
让我们编写一些代码来测试我们为DataPrep
类编写的各个方法:
import unittest
import pandas as pd
import numpy as np
def removeNans(data):
data = data.dropna()
return data
def removeCols():
data = data.drop(cols_to_remove, axis=1)
data = data.reset_index(drop=True)
class TestDataPrep:
def __init__(self):
data_path = "./BigMartSales.csv"
self.data = pd.read_csv(data_path)
super().__init__(unittest.TestCase)
def test_removeNans(self):
data = removeNans(self.data)
result = []
for col in data.columns:
result.append(data[col].isnull().sum())
result = np.sum(result)
print(result)
self.assertEqual(result,0)
def test_removeCols():
data = removeCols(self.data)
cols_to_check = ["Item_Fat_Content", "Item_Type", "Outlet_Size"]
self.assertEqual(any(element in cols_to_check
for element in data.columns)==False)
data_path = "./BigMartSales.csv"
data = pd.read_csv(data_path)
if __name__ == "__main__":
unittest.main()# Output
Ran 0 tests in 0.000sOK
在这个例子中,我们通过编写一个名为 **TestDataPrep**
的类来测试这两个函数,这个类对它们的预期结果进行检查。
4.将您最喜爱的文本编辑器与 Jupyter 笔记本结合使用
我是杰瑞米·霍华德的超级粉丝,我强烈推荐他的视频:
浅谈使用 Jupyter 笔记本进行软件开发。
如果我们将我们最喜欢的文本编辑器与 jupyter 笔记本结合使用,通过以下简单的笔记本命令让它们自动同步,那么数据科学项目的开发可以得到极大的改进:
%load_ext autoreload
%autoloread 2
现在,每次我们在我们选择的文本编辑器上编辑内容时,我们都会在 jupyter 笔记本中自动更新该函数或类。
通过这样做,人们可以利用 jupyter 笔记本令人惊叹的交互功能,以及我们最喜欢的文本编辑器 (我使用 Visual Studio 代码,但这只是一种偏好)的强大文本编辑功能。
5.小而频繁地提交
就像一般的功能和开发一样,我们的目标是构建一个易于调试的管道。
为此,还应该使用小而频繁的提交,而不是大的提交,因为大的提交会使得在出错时更难返回并进行调查。
我的建议是为提交设置一个规则,一旦达到这个阈值,我们就提交并继续开发。
为了有助于此,我们可以提前计划我们的项目,并预见我们需要执行来完成它的步骤,试图找到进度的清晰定义,当达到该定义时,将触发提交。
通过这样做,我们得到了一种在数据科学项目中计算和正确跟踪进度的方法。
良好做法的重要性
所有从事严肃的数据科学项目的人都需要一种随着时间推移而改进的方法。
根据项目的类型和个人的目标,可以添加或更改许多关于个人良好实践的流程,但如果我想留给您一件事,那就是, 定义您的一套良好实践,遵循它,并随着时间的推移改进它!
如果您对数据科学感兴趣,并且正在寻找一个起点,请查看 udemy 课程:
- 数据科学课程 2021:完整的数据科学训练营
这是一个附属链接,如果你使用这个课程我会得到一点佣金,干杯!:)
如果你喜欢这篇文章,在媒体、上关注我,订阅我的简讯,在推特、 LinkedIn 、 Instagram 和加入媒体与我联系!谢谢,下次再见!:)
数据科学家和机器学习工程师的 5 个区别
原文:https://towardsdatascience.com/5-differences-between-data-scientists-and-machine-learning-engineers-a72e0cda7c33?source=collection_archive---------9-----------------------
意见
这些职业会有惊人的不同…
照片由莱昂在Unsplash【1】上拍摄。
目录
- 介绍
- 商业理解
- DevOps
- 软件工程
- 算法知识
- 教育要求
- 摘要
- 参考
介绍
在我们开始之前,我想提一下,一些数据科学职位需要这两种职位的两种技能。所以,是的,一些数据科学家也需要成为机器学习工程师。但是,仍然有大量的角色有更明确的需求,这些需求没有太多的重叠。也就是说,如果我们要看这些角色分开的位置,就像我个人经历的那样,那么我们可以看它们的差异。总的来说,最好是查看职位描述,以获得每个角色最相关的技能。然而,分隔这两种角色的主要主题仍然是非常相关的。我将在下面讨论五个主要差异,如果你想通过例子了解更多关于数据科学家和机器学习工程师的不同之处,请继续阅读。
商业理解
由泰勒·弗兰塔在Unsplash【2】上拍摄的照片。
数据科学的角色非常侧重于业务。更具体地说,数据科学家在某种程度上是产品经理和业务分析师,同时也遵循他们预期的特定于数据科学的知识。因为机器学习工程师的重点更多是在运营和编程上,业务理解 不如一个重点的(不过 ML 工程师了解业务当然还是有好处的)。
为了更好地说明我在这里所描述的,我们可以提出这些例子:
- 数据科学家将寻找业务中的痛点、客户遇到的问题以及内部利益相关者
- 机器学习工程师将关注解决方案在业务和产品中的运作
- 数据科学家需要了解产品工作原理的来龙去脉
- 机器学习工程师仍然会很好地了解产品,但不一定会担心准确性如何影响业务、客户和产品
- 数据科学家必须考虑准确性将如何影响业务,而机器学习工程师将专注于数据科学模型的效率和运营方面
- 一个具体的例子:数据科学家将会看到,对于某个状态来说更准确比整体状态更有利,而机器学习工程师将需要了解和监控模型被访问端点的频率,以及这将是一个缓慢还是快速的过程
如你所见,机器学习侧重于运营,而数据科学更侧重于业务。这就引出了我们下一个不同的 DevOps。
DevOps
卢克·皮特斯在 Unsplash 上拍摄的照片。
DevOps 的功能是工作并监控代码的编码、测试、规划、构建、推送、部署和发布,在这种情况下,是为机器学习工程师、模型及其周围的组件工作。这种差异在于,围绕数据科学模型的 DevOps 过程的更多职责由机器学习工程师承担。
这一过程的一个例子如下:
- 机器学习工程师将确保模型容器可以基于训练计划自动构建、推送和部署,例如,类似于 Docker 的使用
- 机器学习工程师 DevOps 的其他重要概念是:机器学习算法或最终数据科学模型的源代码控制、测试和容器化
围绕这个过程的代码可能涉及或需要另一种技能,这就是软件工程。
软件工程
由拍摄的照片在Unsplash【4】。
再说一次,数据科学家和机器学习工程师都需要了解软件工程,或者只是用一种语言进行编程。然而,机器学习工程师往往更擅长软件工程和面向对象编程。
例如,这里有以下思想:
- 数据科学家可以花费数周时间,而不用太担心代码,但更担心算法、概念和对业务的影响
- 你可以想象一个数据科学家在 Jupyter 笔记本上工作,研究、探索数据集,并用更简单的代码绘制可视化图,而机器学习工程师将使用 OOP 类等概念模块化这些代码,并努力使代码在生产环境中更有效
因此,虽然机器学习工程师更关注代码本身,但数据科学家却有另一个概念需要关注,这就引出了我们的下一点。
算法知识
马库斯·斯皮斯克在Unsplash【5】上的照片。
通常,数据科学家的工作是成为机器学习算法如何工作的专家,这也是他们最终选择最终模型的方式。大多数机器学习工程师实际上不会关注算法背后的数学和统计,而是更多地关注围绕它的编码和实现。
以下是这种差异的一个例子:
- 数据科学家需要知道随机森林机器学习算法在概念上如何处理某些数据(例如*)*
- 他们还需要知道是什么让一个问题被监督、无监督、分类或回归等等
根据以上对这些差异的描述,我们可以看到另一个差异可能会发生。
教育要求
照片由布雷特·乔丹在Unsplash【6】上拍摄。
因为机器学习工程师更专注于编码,所以他们倾向于拥有软件工程学位,或者更具体地说,计算机科学。数据科学家可以拥有各种学位,如数学、统计、数据科学本身、软件工程,甚至更基于自然科学的学位,如生物和化学。
以下是获得每种职业的一些途径示例:
- 数据科学家:
A.数学学士学位->编码训练营->数据科学训练营
B.生物学学士学位->数据科学硕士学位
- 机器学习工程师:
A.计算机科学学士学位
B.计算机科学学士学位-> DevOps 或 MLOps bootcamp
正如你所看到的,每条路径通常都有一个一般的重点或背景,或者是数据科学,或者是机器学习工程。
摘要
数据科学和机器学习惊人地相似,然而,数据科学家和机器学习工程师有更多的不同。这些差异是因为一家公司喜欢关注少数专业员工,而不是一个被整个流程淹没的数据科学家。但是,这并不是说从头到尾不了解整个过程就不重要。理解对方的角色对双方都有好处。但是,你会看到一些公司的数据科学家既是数据科学家又是机器学习工程师,然后你会看到一些公司出于各种原因喜欢将其分开。
总而言之,以下是增加数据科学收入的主要方法:
** Business Understanding* DevOps* Software Engineering* Algorithm Knowledge* Educational Requirements*
我希望你觉得我的文章既有趣又有用。如果您同意或不同意这些差异,请在下面随意评论。为什么或为什么不?这些当然可以进一步澄清,但我希望我能够阐明数据科学家和机器学习工程师的职业之间的一些主要差异。感谢您的阅读!
请随时查看我的个人资料、 Matt Przybyla 和其他文章,也可以在 LinkedIn 上联系我。
我与这些公司没有关系。
参考
[1]照片由 Leon 在Unsplash(2019)上拍摄
[2]照片由泰勒·弗兰塔在Unsplash(2018)上拍摄
[3]卢克·皮特斯在 Unsplash 上拍摄的照片,(2020)
[4]照片由 Fotis Fotopoulos 在Unsplash(2019)上拍摄
[5]照片由马库斯·斯皮斯克在Unsplash(2016)拍摄
[6]照片由布雷特·乔丹在Unsplash(2019)上拍摄
使用 AWS 部署机器学习模型的 5 种不同方式
原文:https://towardsdatascience.com/5-different-ways-to-deploy-your-machine-learning-model-with-aws-bd676ab5f8d4?source=collection_archive---------4-----------------------
让你的模型走向世界的不同方法的利弊。
作为一名数据科学导师,我收到了很多关于机器学习基础设施方面的问题。许多新来者构建他们想要通过 API 向互联网公开的模型,但是即使有大量的可用资源,他们仍然很难做到这一点。其中一个主要原因是,通常不清楚实现目标的“最佳”方式是什么。
莱蒂齐亚·博尔多尼在 Unsplash 上的照片
正如软件工程中的所有事情一样,有许多不同的方法来完成同样的事情。然而,不同的方法有不同的利弊。服务管理得越好,它提供的现成产品就越多,但有时会以更高的价格或更低的灵活性为代价。较少管理的服务有时更便宜或提供更大的灵活性,但可能需要更多的时间和专业知识来配置。
在这篇文章中,我将重点介绍 5 种常见的方法,您可以使用这些方法将一个简单的实时机器学习 API(如 Flask app)部署到互联网上。虽然这个列表并不详尽,但它应该为您选择适合您的解决方案指明了正确的方向。
将其部署在 EC2 实例上
在我看来,将您的模型部署到互联网的最简单(但最不健壮)的方法之一是在 EC2 实例上运行它。这就像在云中获得一个虚拟机,让它可以访问互联网,并在其上启动您的应用程序一样简单。关于这个解决方案的演练,请看我之前的一篇文章。
我向需要快速演示或只是临时展示一些东西的用户推荐这个解决方案。如果你的应用足够小,你几乎不需要花费任何东西来托管它,你只需要 5 分钟就可以完成。你甚至不需要熟悉 Docker 这样的工具,只需要 linux 命令行。对于这样的用例,这将是最便宜和最简单的选择。
然而,这种方法需要大量繁琐的手动设置,不适合实际的生产部署。如果你是一个想向朋友炫耀你的应用程序的人,这个解决方案很棒。如果你在寻找可持续发展的长期目标,请继续阅读。
赞成的意见
- 暂且应急的
- 便宜(可能免费)
- 易于安装/拆卸
- 几乎不需要基础设施/网络经验
骗局
- 不太容易扩展
- 非生产级
- 几乎没有自动化
- 对错误不稳健
创建 AWS Lambda 函数
AWS Lambda 是用于部署无服务器功能的服务。“无服务器”并不意味着没有服务器,它只是意味着你不关心你的代码的底层基础设施,你只为你使用的东西付费。这通常比供应和管理您自己的机器更可取,这是您在上一步中需要做的事情。
虽然 Lambda 可能无法满足一些更复杂的用例,但对于简单且可重复的代码来说,它是理想的。它是可扩展的,非常便宜和简单。您将需要使用一些其他服务,如 API Gateway,但设置将比将您的应用程序部署到独立的 EC2 机器上更加健壮。对于生产,这可能是最便宜的选择。
然而,它们没有你在 ECS 或 EKS 中看到的纯容器化解决方案灵活。支持的编程语言等功能是有限的。我向使用简单 ML 代码的用户推荐这个解决方案,他们根本不想考虑基础设施*。*
优点:
- 生产等级
- 非常适合简单的小型应用/功能
- 无服务器(非常便宜)
缺点:
- 不如其他解决方案灵活
- 需要其他 AWS 服务的知识
将其集装箱化并部署在 EKS 的 Kubernetes
Kubernetes 是当今管理和扩展容器化应用程序的首选之一。Kubernetes 的声明性质有助于自动化许多生产级别的问题,如负载*衡或自动伸缩。与 ECS 等更受管理的容器编排解决方案不同,Kubernetes 提供了对机器学习应用程序的粒度控制。
简单、无状态的机器学习应用程序通常非常适合 Kubernetes。此外,Kubernetes 上有许多成熟的 ML 开源解决方案(如 Seldon ),它们提供了特定领域的支持,并进一步抽象了基础设施的复杂性。
然而,这是有代价的。与申请部署应用程序的单个实例不同,现在您必须管理整个 Kubernetes 集群。对于新用户来说,部署应用程序和管理集群并不是一件简单的任务。
Kubernetes 网络是复杂的,需要大量的经验来深入理解和操作。虽然 Kubernetes 集群可能看起来比管理更好的 ML 解决方案更便宜,但管理不善的集群可能会导致更糟糕的意外货币成本。我向那些绝对需要产品级解决方案、想要细粒度应用程序控制或者只想体验 Kubernetes 的用户推荐这种方法。
优点:
- 非常可扩展
- 良好的自动化程度
- 生产等级
- 大量的社区支持
- 高度灵活
- 体验流行的框架和底层 CS!
缺点:
- 潜在的大量工作
- 对初学者来说有风险
- 在某些情况下,不必要直截了当
- 与托管服务功能对等需要大量设置
通过弹性容器服务(ECS)对其进行容器化和部署
像 Kuberenetes 一样,ECS 是一个用于部署应用程序的容器编排服务。区别在于责任的分配。在 Kubernetes 中,用户不必负责一些底层基础设施问题,而是让 AWS 为您完成。ECS 类似于 Lambda,因为它抽象出了基础设施问题。就灵活性而言,它介于 Lambda 和高度灵活的 Kubernetes 之间。
我向没有 Kubernetes 经验但想部署容器化应用程序的个人推荐这个解决方案。如果你独自工作,管理 Kubernetes 上的应用以及管理集群的所有问题可能会很困难。放弃这些责任会更好地利用你的时间,这样你就可以更专注于应用程序本身。如果你不使用 Docker,我会遵从 Lambda。
优点:
- 比 Kubernetes 简单得多的设置
- 开箱即用的更多功能
- 作为个人开发人员更容易管理(有容器经验)
- 对容器化应用的一流支持
缺点:
- 粒度更小的控制
- 潜在成本更高
创建 Sagemaker 端点
AWS Sagemaker 是一流的云 ML 工具套件。从托管到 jupyter 笔记本到简单模型端点,Sagemaker 的体验可能会像在您的机器上本地创建部署一样。机器学习特定支持附带了一整套服务,使用户能够构建和部署生产就绪的 ML 应用程序,这些应用程序具有您必须为其他选项手动配置的所有功能。
当然,这种解决方案的高度专用性和可管理性可能会使纸面上的成本更加昂贵。它还减少了用户对底层基础设施的关注。然而,你可能花费的美元很可能会及时收回,因为 Sagemaker 不仅使部署模型变得容易,而且创建了生产级 ML 管道。
我向新的云用户推荐这个解决方案,他们只想学习一种新技术来部署他们的模型,并希望从一开始就满足所有其他 ML 基础设施的考虑。除非你有其他上述技术的经验,否则在 Sagemaker 中进行调查将有可能使你在很少或没有云经验的情况下快速开发。
优点:
- 一流的机器学习支持
- 托管基础架构和环境
- 生产级,可扩展
缺点:
- 可能比其他一些解决方案更昂贵
- 潜在的灵活性较低
还有更多…
我敢肯定完整的列表是非常详尽的,当你考虑到其他用例,如批量预测,会变得更加复杂。然而,这些方法和其他云*台上的类似方法是相当常见的方法。根据您的使用情形、应用程序和其他现有基础架构,其中任何一种都可能是最“正确”的。
此外,虽然我在云计算方面做了很多工作,但我承认我并不是每一项服务的专家。如果我错过了什么或者做了你认为应该纠正的假设,请在下面评论,我会解决的!这些权衡是高度主观的,并且机器学习部署在复杂性和实现方面因用例而异。
如果你感到失望,请在 LinkedIn 和 T2 Twitter 上关注我。
你必须知道的 5 个 Dplyr 函数
原文:https://towardsdatascience.com/5-dplyr-functions-that-you-must-know-1a9ca17e50e2?source=collection_archive---------21-----------------------
有了 dplyr,R 中的数据操作很容易,相信我!
由谷仓图片在 Unsplash 上拍摄
介绍
Dplyr 是一个用于操作表格数据的库。它是使用 R 编程语言构建的。
数据操作是一个过程,我们将准备数据集,并以探索的方式分析数据。
我们在这里有几个过程。我们将过滤数据,汇总数据,生成新的列,等等。
本文将向您介绍数据操作必须了解的 5 个 dplyr 函数。
通过理解这些函数,您可以更容易地进行数据操作。
没有进一步,让我们开始吧!
安装并加载库
在我们动手之前,首先确保您已经安装了 dplyr 库。为此,您可以像这样使用 install.packages 函数:
**install.packages('tidyverse')**
在我们安装了这个库之后,现在您可以用下面的代码加载这个库了:
**library(dplyr)**
数据
为了展示这个库的能力,我们将使用一个名为 mtcars 的数据集。该数据集包含有关汽车特征的信息,如重量、油耗、变速器类型等。
让我们使用 head 函数来看看数据集中的前五个观察值。下面是实现这一点的代码:
**head(mtcars)**
这是结果的预览:
作者捕捉到的。
现在让我们进入 dplyr 函数!
“选择”功能
我要展示的第一个功能是选择功能。该函数将根据您的需要选择列。要运行这个函数,您必须给它一些参数,比如数据集和列名。
例如,让我们从 mtcars 数据集中取出 cyl、hp 和 wt 列。下面是实现这一点的代码:
**select(mtcars, cyl, hp, wt)**
这是结果的预览:
作者捕捉到的。
“过滤”功能
我要展示的第二个功能是过滤器功能。该函数将根据一个或多个条件过滤您的数据。
例如,让我们通过只选择有自动变速器的汽车来过滤数据。我们将用值 1 过滤 am 列。
下面是实现这一点的代码:
**filter(mtcars, am == 1)**
这是结果的预览:
作者捕捉到的。
正如我之前提到的,你也可以在函数中添加另一个条件。为了组合这些条件,我们可以使用像 AND ( &)和 OR ( |)这样的比较运算符。
现在让我们添加另一个条件来过滤我们的数据集,我们希望检索马力大于 150 的汽车。
下面是实现这一点的代码:
**filter(mtcars, am == 1 & hp > 150)**
这是这样做的预览:
作者捕捉到的。
“变异”功能
我要展示的第三个函数是 mutate 函数。该函数将通过使用数学或比较运算符操作现有列来创建一个新列。
让我们以创建一个新列为例。如你所知,wt 栏代表汽车的重量,该栏使用 lbs 作为测量系统。
我们将把这个值转换成千克作为计量单位。我们将 wt 列上的值乘以 0.453592 和 1000。我们将此列命名为 wt_kg 。
下面是实现这一点的代码:
**mutate(mtcars, wt_kg = wt * 1000 * 0.453592)**
这是这样做的预览:
作者捕捉到的。
正如我之前提到的,我们也可以使用比较操作符,比如 if-else 操作符来创建一个新列。
让我们举一个例子,我们想根据柱面编号来划分列。条件是这样的。如果汽车的汽缸少于五个,我们将把这个值设置为 FALSE。相反的会得到真实值。我们将这个列命名为 cyl_below_five 。
下面是实现这一点的代码:
**mutate(mtcars, cyl_below_five=if_else(cyl < 5, FALSE, TRUE))**
这是这样做的预览:
作者捕捉到的。
“总结”功能
我要展示的第四个函数是总结函数。这个函数将汇总一个列上的值,并提供一个统计摘要。
为了演示这一点,让我们举一个例子,我们将通过使用 mean 函数对 mpg 列进行*均来对其进行汇总。
下面是实现这一点的代码:
**summarise(mtcars, mean(mpg))**
这是这样做的结果:
作者捕捉到的。
这里额外的一课。如果您想用一个函数汇总您的数据集,您可以使用汇总函数来完成。下面是实现这一点的代码:
**summary(mtcars)**
这是结果的预览:
作者捕捉到的。
“排列”功能
我要展示的第五个也是最后一个功能是“排列”功能。该函数将以升序或降序方式对数据集进行排序。将需要一个或多个列来对数据集进行排序。
让我们举一个例子,我们将根据 mpg 列对数据集进行排序。
下面是实现这一点的代码:
**arrange(mtcars, mpg)**
这是结果:
作者捕捉到的。
从上面可以看到,这个表是升序排列的。我们可以通过用 desc 函数包装列名来对数据集进行降序排序。
让我们修改代码并再次运行它。下面是实现这一点的代码:
**arrange(mtcars, desc(mpg))**
这是结果:
作者捕捉到的。
现在你已经学会了五个必须知道的 dplyr 函数!
额外奖励:管道操作员
但是等等,这篇文章还没有结束。我还有一样东西给你看。在 R 语言中,可以一次运行所有的函数。
我们可以使用一个叫做管道的操作符。下面是它的图解:
由作者创作。
基本上,管道操作符将从左侧捕捉输入,并将其放在右侧的函数上。
回想一下 summarise 函数,我们将再次尝试对 mpg 列进行*均。但这一次,我们将根据气缸数量对数据进行分组。
为此,我们可以使用 group_by 函数对数据进行分组。然后,我们用管道操作符将该函数与摘要函数连接起来。
下面是实现这一点的代码:
**mtcars %>%
group_by(cyl) %>%
summarise(mean(mpg))**
这是结果的预览:
作者捕捉到的。
您注意到管道操作符对代码的可读性了吗?使用管道,您可以使您的代码可读。此外,您可以组合这么多的功能,只运行一次。
结束语
干得好!现在,您已经学习了使用 dplyr 库操作数据的必备函数。您还了解了管道操作符,它使您的数据操作管道更加强大。
我希望这篇文章能够帮助您开始将 dplyr 用于数据操作管道。
如果你对我的文章感兴趣,可以关注我的媒介获取更多这样的文章。还有,如果你想提问或者想打个招呼,可以在 LinkedIn 上联系我。
谢谢你看我的文章!
加速 Python 的 5 种简单方法
原文:https://towardsdatascience.com/5-easy-ways-to-speed-up-python-963c86535eef?source=collection_archive---------8-----------------------
使用这 5 种不同的技术加速你的 python!
(src =https://pixabay.com/images/id-2025863/
介绍
Python 很快发现自己是世界上最受欢迎的编程语言之一,在 T2 TIOBE 指数 T3 上徘徊在第一名和第二名之间。在全球范围内,Python 被用于数据科学和机器学习、脚本编写、软件工程,甚至 web 开发。造成这种情况的原因有很多。首先,Python 是一种非常高级的脚本语言。这使得 Python 非常容易学习。
另一件应该提到的事情是 Python 奇妙的生态系统。大多数其他类似语言的包生态系统通常注册了不到五万个包,而 Python 有大约二十万个。这些软件包也跨越了各种不同的学科。这意味着 Python 很可能是当今使用的最通用的语言之一。然而,不管 Python 有多么强大的生态系统,不管它是一种多么好的语言,没有一种语言没有它的问题。
鉴于 Python 的高级语法和声明性编程特性,可以假设 Python 很可能是一种脚本语言。这意味着它不是被编译,而是被编译的编程语言主动读取,在这个例子中是 C 编程语言。幸运的是,C 是底层迭代编程的标准。这意味着 Python 通常能与许多其他使用 C 语言的语言以及 C 语言本身相处融洽。其实可以从 c 写 Python。
然而,对于任何一种解释型编程语言来说,速度总是一个问题,Python 也不例外。虽然与其他类似的语言相比,Python 是一种非常快速的语言,但它的速度仍然比不上一些编译后的低级解决方案,如 C 或 C++。速度往往是 Python 的致命弱点。虽然这种语言有许多优点,但解释的速度通常被认为是它最大的弱点。然而,有一些简单的技术可以用来非常有效地提高 Python 的速度。
№1:迭代工具
迭代是一件会显著降低计算速度的事情。当然,任何循环都是如此,尤其是在 Python 这样的语言中。虽然 Python 确实支持多线程,但一般来说,控制线程和进程的语法过于声明性,无法像在其他编程语言中那样有效地控制它们。因为 Python 本质上是相当单线程的,所以当它在循环中工作时,迭代经常会使整个应用程序停止。
Python 的标准库中也包含了一个很好的模块来加速这些循环技术,它就是 Itertools。Itertools 模块附带了一些工具,可以通过其他包而不是 Python.h 提供的替代 C 实现快速循环。这些函数通常会导致更快的迭代。我有一整篇文章更详细地介绍了使用 itertools 加速一些算法的例子,你可以在这里阅读:
№2:线程
另一种提高 Python 速度的标准库方法是使用多线程。Python 是作为单线程的高级编程语言而构建的,所以在很多方面,当用 Python 实现多线程时,它会变得更加困难。然而,在大多数例子中,创建一个新流程只是一个简单的调用。
我发现在 Python 中使用线程的最大问题是进程是未命名的,并且不可管理。这意味着您可以在做其他事情时创建进程来处理循环和算术,但很难回调这些线程并管理它们正在做的事情。当然,在大多数情况下,这是不必要的,所以这对于一般的 Python 程序员来说肯定是很方便的。我们可以通过首先从 Python 的标准库中导入线程模块来使用线程:
import threading
接下来,我们需要为新线程编写一个函数:
import time as ti
def sleeper():
ti.sleep(5)
print("Hello")
现在我们可以通过初始化线程来构造一个新的对象。线程类别:
x = threading.Thread(target = sleeper)
我们可以使用目标函数的关键字参数来设定我们的目标。如果我们的函数需要提供参数,那么我们可以添加 args 关键字参数。我还会举一个例子:
import time as ti
def sleeper(n):
ti.sleep(n)
print("Hello")x = threading.Thread(target = sleeper, args = (5))
然后我们可以用 Thread.start()启动我们的线程:
x.start()
不用说,在加速代码的时候,同时做两件事是非常有效的。尽管 Python 中的线程实现不是世界上最好的,但它确实值得了解和使用!
№3:数字巴
即时编译(Just In Time compilation)或 JIT 编译是一种编译技术,它使解释的代码同时被编译、执行和编译。每当我们编译 Python 应用程序时,都要考虑到一定的开销,因为代码中的所有数据都需要注册和分配数据。这是为了每当调用这些对象时,Python 在每个作用域中都有一个对此的引用。JIT 编译可以用来减少这种开销。
使用 JIT 编译,我们不是在运行应用程序之前分配所有这些数据,而是在应用程序运行时进行。这减少了编译到执行的开始时间,就像在线程中一次做多件事一样,在编译时一次做多件事也可以显著加快代码的速度。
Python 中通常使用的包是一个名为 Numba 的包。Numba 实现的伟大之处在于它非常容易使用!Numba 使用一个简单的装饰器让 Python 在某些函数和类上激活 JIT。我写了一篇关于 Numba 的文章,如果你想了解更多,可以看看:
№4: Cython
另一个加速 Python 的流行选择是 Cython。Cython 是一种你可以利用 C 语言速度的方法,甚至不需要了解或编写 C 语言。虽然它当然没有使用 C 语言那么快,但这是坚持使用 Python 的一个很好的方法,同时也加快了速度。
许多程序员将 Cython 视为 Python 速度的可靠解决方案,但我认为这是一个错误。Cython 并不适用于 Python 中的所有内容。在很多情况下,Python 无法正确地执行 Cythonize,虽然这种情况不太常见,但总是有可能的。使用 Cython 处理依赖关系也可能是一场噩梦,如果计划在您的技术堆栈中使用它,这是一件需要考虑的重要事情。我们可以从 Cython 中导入 cythonize 函数。从 Cython 包中构建模块。当然,这个模块不在标准库中,所以您需要自己添加。您还需要从标准库工具 setuptools 创建一个设置,因此我将导入这两个工具:
**from** **setuptools** **import** setup
**from** **Cython.Build** **import** cythonize
我们需要构建一个 Cython 构建文件,通常称为 setup.py
setup(
ext_modules = cythonize("example.pyx")
)
您还需要将正在使用的任何 Python 模块命名为. pyx 文件,而不是. py 文件。最后,为了构建我们的 Cython,我们将使用 Python 命令行界面,如下所示:
python setup.py build_ext --inplace
这将创建一个示例。所以,这个文件现在是一个编译后的二进制文件,我们可以从 Python 中使用它,我们可以简单地导入它,并像您可能期望的那样在 Python 代码中使用它。
№6:并行计算
您可以选择利用的另一个解决方案是并行计算。并行计算结合了图形卡的能力和计算机处理器的能力。在我们使用并行计算之前,我们应该总是考虑图形处理器实际上做什么。图形处理器是一种专门的设备,擅长特定的任务,而不擅长其他任务。换句话说,没有 APU 的处理器将是一个糟糕的图形处理器。同样,中央处理器将是一个可怕的图形处理器。
考虑到这一点,我们应该考虑到图形处理器非常擅长处理大量的数字。这意味着当应用于机器学习中的统计计算时,它们是很棒的,所以在许多数据科学的情况下,并行计算确实可以显著提高速度。前面我们谈到了使用 Numba 的 JIT 编译来加速代码,但是 Numba 包也提供了用于 CUDA 编程的工具。当然这是针对 Nvidia 卡的。
from numba import cuda
为了使用 CUDA,您还需要导出一个环境变量。我个人的~/里就有这个。当然,如果您不希望在 Bash 的每次使用中都声明这个变量,那么您可以简单地将它放入一个终端会话中:
export NUMBA_ENABLE_CUDASIM=1
像 Numba 的 JIT 一样,我们简单地使用一个装饰器来决定一个函数是否要使用 CUDA,这非常简单!更酷的是,我们可以将 CUDA 和 JIT 结合起来,获得令人难以置信的快速结果!
from numba import cuda
@cuda.jit
def example(io_array):
print(io_array)
现在我们知道了并行计算,我们应该考虑到这种语言的实现肯定不是世界上最好的。Python 有缺点,并行计算无疑是其中之一。与其他语言相比,在 Python 中使用 CUDA 总是更加困难,因为它的基础从来没有考虑到并行计算。这是 Julia 的一个优点,它是在并行计算开始流行的时候建立的。我有一篇文章详细介绍了如何使用它的 CUDA 实现,对于那些对 Julia 感兴趣的人,你可以在这里阅读:
另一个巨大的负面影响是,为了实际使用并行计算,你需要一个图形处理单元。图形卡是计算机中最昂贵的硬件之一,所以获得一个能够帮助你的代码快速运行的图形卡是非常困难的,这是这种技术的一个很大的缺点。此外,如果你像我一样喜欢笔记本电脑的便利性,很可能你不会找到一款内置图形处理器的非常轻的笔记本电脑。就个人而言,我喜欢 11-13 英寸的笔记本电脑,但我通常会选择体积庞大的 15 英寸笔记本电脑,这不是我对电脑的偏好。
№7:功能工具
另一个非常容易使用的解决方案是 FuncTools。这个模块在标准库中,它是如此的通用,以至于很难涵盖其中的所有内容。这个包提供了许多装饰器,可以真正加速你的代码,或者只是让你的语法更加用户友好。我认为 Functools 肯定是一个值得了解的包。
正如我提到的,FuncTools 有很多能力。例如,这个包可以让 Python 使用单分派,这改变了类型和函数一起使用的方式。这个模块本身非常棒,在很多情况下非常有用,没有理由不使用它。该模块还提供了一个缓存装饰器,允许您缓存 Python 中的值以备后用,这对于代码中经常使用的函数非常有用。
№8: C
如果这些解决方案似乎都不适合你,你可以时不时地使用 C 语言。Python 最大的特点之一就是它是用 C 语言构建的,所以在需要速度的时候,C 语言通常可以作为语言的后备。您也不需要用 C 编写所有代码,并且可以从 Python 中调用它。当然,这将是这个列表中其他解决方案的一个巨大转变。c 是一门伟大的语言,但是它的命令式本质确实使得它需要花费更多的时间来编写。
结论
Python 是一门伟大的语言。由于各种原因,这种语言最*变得如此流行,当涉及到机器学习应用程序时,它是一个很好的选择。然而,机器学习在硬件上可能很难,与 C 和 C++等编译语言相比,Python 往往会停滞不前。然而,使用这些技术,您可以非常容易地大幅提高 Python 的速度,并使其在某些问题上的应用实际上非常接* c 语言的速度。感谢您阅读我的文章,祝您编程愉快!
新数据科学家的 5 个基本概念
原文:https://towardsdatascience.com/5-essential-concepts-for-new-data-scientists-d72e2960bb73?source=collection_archive---------28-----------------------
游里·罗默在 Unsplash 上的照片
数据科学可能非常令人生畏,尤其是在刚刚起步的时候。虽然使用即插即用的代码片段实现流行的机器学习算法可能很容易,但它不能取代数学直觉。以下是我发现对我的数据科学之旅相当重要的一些概念。
1.偏差方差权衡
调整模型时,偏差-方差权衡是一个非常重要的概念。本质上,它所陈述的是,当调整任何 ML 模型时,我们必须*衡高偏差(欠拟合)和高方差(过拟合)。为了说明这一点,让我们看看基本原则,并观察这种权衡如何出现在所有机器学习模型中。
我们可以这样做的一个方法是查看均方差。为此,我们将查看统计解释,其中均方误差(MSE)定义如下:
MSE 的数学公式——作者的图像
这种 MSE 损失和我们习惯的 MSE 损失之间的主要区别是期望运算符,而不是对样本求*均值。但是,这种差异并不影响分析。
我们在这里看到的是,损失可以分为两部分:偏差和方差。偏差指的是预测和真实结果之间的差异,而方差指的是预测将变化多少**。**
数学上,偏差的*方用蓝色项表示,这是预测 f^ 和实际 f 值之间的预期差值。对于方差,这是橙色项,表示 f^ 和**f^.**预期值之间的预期*方距离
直观上,这可以在分割数据集后观察到。假设我们有一个包含 1000 个数据点的分类数据集,我们将该数据集分成 5 组,每组 200 个数据点,并对每组 200 个数据点进行逻辑回归训练。如果我们的模型有很高的方差,那么每个模型的参数将会有很大的差异。
一般来说,参数(神经网络)多的模型会比参数少(SVM)的模型有更多的方差和更少的偏差**。更多的参数意味着需要更多的内存来学习复杂的数据,但这也带来了负面影响,即它可能适合噪声而不是信号。**
在尽量减少损失的同时,有两种主要方法。
- 收集更多数据。随着数据量的增加,预测的方差会减小。这是大多数最先进模型的基础,在这些模型中,庞大的十亿参数神经网络是在极其庞大的数据集上训练的。这允许非常低的偏差和方差,但是训练成本非常高。
- 增加模型的偏差。有几种方法可以做到这一点。像决策树这样的一些模型允许通过调整超参数来简化模型,以减少方差(树的最大深度等。).或者,你也可以使用正则化
2。正规化
Christophe Hautier 在 Unsplash 上拍摄的照片
正则化是一种非常强大的技术,可以防止模型过度适应训练集。直觉上,规范化是为了惩罚复杂性。具体来说,这是通过添加额外的损失惩罚来引导模型更好地拟合数据来实现的。
在大多数情况下,正则化损失函数减少了模型中的参数数量,或者减少了参数值的大小。这些技术旨在减少过度拟合,其中模型从与目标变量不相关但稍微相关的数据模式中“学习”。这可防止拟合不太有用的特征,并可提高模型的整体质量。
让我们看看最常见的正规化形式,L2 正规化。L2 正则化在概念上非常简单,可以应用于各种不同的模型。本质上,L2 正则化增加了与参数权重的*方成比例的惩罚。较大的参数权重意味着模型的较高复杂性,正则化试图实现的是简化所产生的模型。
让我们看看正则化对玩具数据集的影响!
作者改变正则化参数 C-Image 的效果
上图显示了用于分类两个数据点簇的支持向量机(SVM)算法。除了(逆)正则化参数 C,所有其他超参数保持不变。在左侧,我们看到了明显的过度拟合,模型试图学习一个非常复杂的函数来更好地分类这些点。通过正则化,中间模型做得更好,决策函数更*滑。然而,过多的正则化导致拟合不足,如右图所示。这里,模型学习不适合数据的决策边界。
如果你热衷于学习更多关于这个主题的知识,请查看这篇文章,在这篇文章中,我探讨了正规化的其他实例和应用:
3.梯度下降
照片由约瑟夫刘在 Unsplash
梯度下降是让我们有效优化大多数机器学习模型的神奇钥匙。当根据数据拟合我们的模型时,我们总是在优化,以最小化给定数据的特定损失函数**。对于线性回归,我们最小化残差*方和。对于分类,我们最小化负对数似然。梯度下降是一种简单的通用技术,允许我们半有效地完成所有这些工作。**
梯度下降背后的想法很简单。在每次迭代中,我们取损失函数的梯度。这个梯度告诉我们函数增加的方向。我们在梯度的负方向迈出一步,这应该是函数递减的方向!如果我们采取一个足够小的步骤,损失函数将会更小,这是反复进行的,直到损失函数没有太大变化,并且模型已经收敛。
损失函数表面图和迭代猜测-图片由作者提供
我们可以使用如上所示的简单测试函数看到这一点。从“山”的顶部开始,这些点使用梯度下降慢慢地向山下移动,并收敛到局部最小值。下面的动画显示了每次迭代的运动。请注意,随着梯度(陡度)的增加,箭头变得更大,算法的步长也更大。
使用等高线图的渐变下降动画—作者 GIF
这个简单的想法为数据科学中使用的许多机器学习模型提供了动力,并对其进行了优化和训练。
有趣的是,对于一些机器学习模型(如逻辑回归),像 L-BFGS 这样的二阶优化算法可能更有效。
一旦转向神经网络,梯度下降变得更加重要,因为大多数优化方法仍然使用某种梯度下降的味道。对于神经网络来说,这个过程被称为反向传播,可以帮助我们训练庞大的十亿参数模型。本质上,反向传播可以被视为以系统的逐步方式的梯度下降。多亏了反向传播,我们能够以相对高效的方式训练庞大的模型。在深度学习库中,大多数梯度下降实现都被抽象掉了,但知道这些仍然很重要。
如果你想对这个话题有更深层次的数学理解,可以看看这个由 3 Blue 1 Brown 制作的视频,里面有关于这个话题的精彩视频解释
梯度下降-视频由 3 蓝色 1 棕色
4.维度的诅咒
蒂姆·约翰逊在 Unsplash 上拍照
维数灾难是一个术语,用来描述包含大量特征/变量的数据集如何难以处理。更多的信息通常是有用的,但使用包含许多变量的数据集存在隐性成本。
最明显的问题是计算时间。机器学习算法需要时间和内存来处理数据,数据集越大,所需的内存和计算资源就越多。在某些情况下,由于数据集包含大量的要素,甚至不可能将整个数据集放入内存中。
即使我们能够训练一个模型,尽管有计算的限制,训练出来的模型甚至可能没有用。从某种意义上来说,机器学习就是大海捞针。我们希望在数据中找出可以帮助我们做出更好预测的模式。当维度的数量增加时,需要考虑的交互成倍增加,这个空间慢慢变得无法有效搜索。与此同时,距离在高维空间中开始失去意义。所有的点都变得同样远,使用距离的算法,如 KNN 和 K-Means,开始彻底失去它们的有效性。
随着数据集维度的增加,实际数据点的空间迅速缩小。与针相比,干草堆的大小呈指数增长,从数据中提取模式或有用的见解变得越来越难。
因为这个问题,我们使用像特征选择和维数减少这样的技术来使我们的生活更容易。要素选择包括从数据集中删除要素(变量)以提高模型的性能。这可以基于领域知识、相关性之类的度量或者简单地使用验证数据集上的损失来完成。
自动编码器架构—作者图片
降维另一方面使用线性方法,如主成分分析 (PCA)或神经网络,如自动编码器到将变量转换成全新的变量。新的变量集将比原始集少,但理想情况下包含足够的信息,以便模型生成有用的结果。降维可以提高模型性能,但代价是模型的可解释性。通过降维生成的新变量集将与原始变量集非常不同,并且可能难以识别决定模型行为的原始变量。
5.表征学习
照片由斯蒂夫·约翰森在 Unsplash 上拍摄
最后一个概念稍微高级一点,但在深入研究图像或文本等非结构化数据之前至关重要。
简而言之,一个表示是一组我们可以附加到特定数据点的数字。
表征学习的美妙之处在于,这个数据点可以是任何东西——结构化的或非结构化的。这些数据可以是文本、图像甚至是网络图,但在运行表示学习算法后,我们可以将所有这些复杂的关系分解为一组看似随机的数字。
对于文本,我们用不同的表示法来表示不同的单词。单词“apple”和“fruit”将有一组相似的数字与之相关联,并且很可能与单词“code”有很大不同。对于图像,我们将每个图像转换成特定的表示。该模型学习表示,使得具有相同信息的图像(背景中的猫)应该具有相似的表示,即使背景或照明不同。
本质上,这些表征学习模型是模式识别的一种形式。这些模型被输入数百万和数十亿个数据点,学习这些数据点之间的相似性,并给它们分配相似的表示。
对于文本,这就是通常所说的语言建模。在最基本的场景中,该模型旨在预测序列中的下一个单词**,给出在它之前的单词**。这有助于模型学习数据中的模式,这些模式将塑造不同单词的表示。
表征学习的进步为迁移学习铺*了道路,使我们能够以很小的成本训练最先进的模型。迁移学习的主要思想是,我们可以通过使用容易获得的数据进行训练来学习一个**“通用”表示模型**,然后对其进行微调,以进一步提高性能。
如果你想了解更多,这里有一些表示学习算法。理解一些关于旧模型如何执行表征学习的想法无疑帮助我理解和欣赏了当今最先进的模型所使用的表征学习方法。
NLP — word2vec , BERT
计算机视觉— ResNet
如果你喜欢这篇文章,请在 Medium 上关注我!
查看代码:https://github . com/reoneo 97/medium-data-science/blob/master/ds-essential-concepts . ipynb
在 LinkedIn 上连接:https://www.linkedin.com/in/reo-neo/
作为数据科学家,您应该知道的 5 个基本 Python 函数和技能
原文:https://towardsdatascience.com/5-essential-python-function-and-skills-you-should-know-as-a-data-scientist-c2aa35f22455?source=collection_archive---------3-----------------------
可以使你的程序更加简洁易读的函数和技巧
在 Unsplash 上由 Hitesh Choudhary 拍摄的照片
在过去的几年里,我一直从事数据科学方面的工作,这涉及到大量的 python 工作。因此,随着时间的推移,我学到了一些技能,这使得使用 python 工作变得更加有趣和容易。这些技巧提高了代码的可读性,使代码紧凑,并为您节省了大量时间。因此,让我们深入了解每个此类功能的用例。
由吉菲
是实例
isinstance 是 python 的内置函数,用来判断一个对象是否属于某个特定类型。检查下面的例子;如果 a 是一个整数,则打印“a 是一个整数”,否则打印“a 不是一个整数”
if isinstance(a, int):
print("a is an integer")
else:
print("a is not an integer")if isinstance(c, list):
print("c is a list")
else:
print("c is not a list")
例如,我假设数据将是一个浮点数列表,并相应地编写了代码。然而,当通过我的代码时,数据变成了导致错误计算的字符列表。这时我们可以使用 isinstance 来检查数据类型是否确实是代码所期望的。
希腊字母的第 11 个
它是 python 中最重要和最强大的函数之一。这也是一个广泛使用的功能,所以我们有必要了解它的工作原理。 lamba 允许你定义一个函数,而不用使用 python *def 实际定义一个函数。*基本上,它帮助我们定义匿名函数,这些函数主要是初等的单行函数。虽然要定义一个复杂的函数,还是用 def 来定义一个函数比较好。
alpha = lambda x: x*3
print(alpha(3))
## output will be 9
print(alpha(4.5))
## output will be 13.5beta = lambda x: x>0
print(beta(4))
## output will be True
print(beta(-3))
## output will be Falsestudent_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
sorted(student_tuples, key=**lambda** student: student[2])
##output will be [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
当您需要处理整个数据的每个数据点时,例如,如上所示对数组进行排序,此函数非常有用。
活力
这个函数帮助你同时遍历两个或更多的列表。在下面的例子中,我们在一个循环中遍历三个列表,对元素进行索引求和,并将求和结果追加到一个新列表中。
alpha = [1,2,3,4,5,6]
beta = [7,8,9,10,11,12]
gamma = [13,14,15,16,17,18]
output = []for a, b, c in zip(alpha, beta, gamma):
output.append(a+b+c)
作为一名数据科学家,这是很有用的,例如,在训练神经网络时。我们通常将输入存储为一个列表,并将相应的基本事实存储为一个单独的列表。为了训练模型,我们必须同时迭代这两个列表,以向网络提供输入,并使用来自模型的相应基础事实和预测来计算损耗。
过滤器
这个函数帮助你从列表中过滤数据。在下面的例子中,我们正在过滤奇数。代替 lambda,你也可以定义一个常规函数,并在这里作为参数给出。我有意使用 lambda 来展示 lambda 的另一个用例。
alpha = [1,2,3,4,5,6]filtered = list(filter(lambda x:x%2, alpha))
print(filtered)
## output will be [1, 3, 5]
不管怎么说,在数据科学中,我们必须做大量的数据过滤,所以过滤器是我们新的最好的朋友。
一行用于循环
这用于使代码更加紧凑。在下面的例子中,我比较了编写循环的传统方法和单行方法。
## conventional method
for i in range(10):
print(i)## one line method
for i in range(10): print(i)## conventional method
output = []
for i in range(10):
output.append(i**2)## one line method
output=[]
for i in range(10): output.append(i**2)
上面的例子很简单,不会经常使用。现在,让我们来看一个在一行中创建列表的综合方法。
values = ['alpha', 'beta', 'gamma', 'phi']
# regular function
def ends_with_a(values):
valid = []
for word in values:
if word[-1].lower() == 'a':
valid.append(word)
return valid
print(ends_with_a(values))
## output will be ['alpha', 'beta', 'gamma'] # list comprehension
filtered_list = [word for word in values if word[-1].lower() == 'a']
# results
print(filtered_list)
## output will be ['alpha', 'beta', 'gamma']
这里的第一部分展示了如何使用一个常规函数获得以' a '结尾的单词。第二部分展示了一种叫做列表理解的强大方法。我们基本上得到了相同的结果,但是第二部分的代码更加简洁。因此,一行循环可以广泛地用于编写干净的代码。
总结
上面提到的 python 技巧非常强大,作为一名数据科学家,应该充分了解它们并经常使用它们。从程序员的角度来看,使用这些函数可以使代码更好看,写起来更快。一定要练习这些技巧,并把它们应用到日常工作中去,以适应它们。
如果你知道任何这样的功能,我错过了,但发挥了重要作用,请让我知道。
成为 介质会员 解锁并阅读介质上的许多其他故事。关注我们的Medium,阅读更多此类博文。
成为数据科学家的 5 项必备技能!
原文:https://towardsdatascience.com/5-essential-skills-to-develop-as-a-data-scientist-16442f094c09?source=collection_archive---------14-----------------------
探索每个成功的数据科学家必须具备的五项重要软技能!
萨姆·麦克格在 Unsplash 上拍摄的照片
“世界是一个大数据问题。”——作者安德鲁·迈克菲
数据科学正处于其受欢迎的顶峰。数据科学的快速发展必将为数据科学的追求者和爱好者创造更多的工作机会和职位空缺。只要有机会,每个感兴趣的人都应该设法利用这些黄金机会。
虽然从个人的角度来看,拥有数据科学各种概念的实践知识和理论理解对于取得成功至关重要,但所有数据科学家都必须考虑到软技能对于更上一层楼同样至关重要。只有具备适当的、富有表现力的软技能,你才能发展成为一名更加出色的数据科学家。
在我们开始探讨关于成长为数据科学家的五项最基本技能的文章之前,我强烈建议通过掌握基本概念来精通数据科学。为此,您可以查看我以前的一篇文章和简明指南,其中涵盖了初学者在 12 个月内成为专业数据科学家需要遵循的 12 个步骤。一旦你掌握了足够的数据科学知识,让我们继续学习成为一名数据科学家的五项必备软技能。
</12-steps-for-beginner-to-pro-in-data-science-in-12-months-c6f6ba01f96e>
1.通讯技能
对于数据科学家来说,一个更被低估但极其重要的特性和特征是熟练地交流和表达他们的想法。沟通是生活中每一步的关键。尤其是对于一个数据科学家来说,把自己的想法传达给别人,并清楚地解释自己当前的思维过程是什么,这一点至关重要。无论您是在面对面的环境中工作,还是通过在线会议交流(由于正在进行的全球疫情),您都需要确保您的信息以富有表现力的方式有效地传达给其他人。
沟通的关键是努力提高你的语言,发展你与人交谈的整体方法。确保你的想法令人信服,不要犹豫澄清任何误解。理解你同时代人的感受并相应地传达你的想法和想法是至关重要的。作为一名数据科学家,有效的沟通对成功有很大帮助。
2.乐观的方法
清晰的思路和积极的数据科学方法对于在该领域取得长期成功至关重要。虽然其他学科可能有类似的要求,但不可否认的是,数据科学是一个如此突出的学科,需要批判性思维和充满希望的叙述。在为某些复杂的数据科学问题寻找解决方案的过程中,整体的复杂性可能会成为一些人的主要障碍。
然而,重要的是保持冷静,并制定一个完美的计划来解决这个问题。在这方面,乐观的心态将大有帮助,因为它包含了数据科学家搜索和找到许多方法来解决现有问题。重要的是不要因为不能解决问题而失去动力,而是重新确定你的道路,找到更多的方法来解决手头的任务。
3.协作团队
作为一名数据科学家,在任何公司、创业公司或与一群人一起工作时,最有益的素质和技能之一是团队合作的能力。大多数复杂的数据科学项目需要作为产品进行部署,以达到工业目的,这些项目需要数据科学家团队的高效运作。协调你和其他成员的努力对于打造一个成功的产品,使公司从中受益并产生收入是至关重要的。
一个人不可能独自完成大型项目。但数据科学最棒的部分是美妙的社区和出色的队友,在成功完成任务的过程中,你将与他们一起工作。对于每一位数据科学家来说,学习与团队成员沟通、互动和合作的技能是至关重要的,这样才能创造出众多能够改变当前世界人口结构的精彩项目!
4.毅力
数据科学有时会很粗糙。以你所有的技术力量和技巧,你可能无法解决一个特定的任务。这种可能性可能发生在数据科学家的最高层。对于每一位成功的数据科学家来说,克服这些情况并坚持不懈地茁壮成长至关重要。数据科学并不总是一门简单的学科,因为即使是最优秀的数据科学家也会遇到挑战和障碍。
然而,只要有足够的耐心、奉献和毅力,你就能克服所有这些挑战。无论你面临的特定任务有多艰难,你都需要有清晰的洞察力、思维过程和分析思维,以确定找到问题适当解决方案的正确路径。因此,每一位数据科学家都必须坚持不懈,用纯粹的意志和激情摧毁他们遇到的所有障碍!
5.愿意学习和提高
技术和实践知识在数据科学领域具有重要意义。数据科学的一个突出方面是,作为一名数据科学家或数据科学爱好者,你可以通过过去的日子学到大量的内容和质量。要考虑的一个更重要的方面是你想学习更多东西和每天不断学习新东西的意愿。
我们都知道数据科学发展迅速。每天,我们都有新的创新、技术和发现。你需要对这门学科真正充满热情,才能每天坚持学习。学习和掌握数据科学的热情和意愿将成为推动您成为成功的数据科学家的动力。因此,每个对这个领域充满热情的人都应该继续学习更多的概念,深入研究数据科学的复杂细节。
结论:
在 Unsplash 上由 Boitumelo Phetla 拍摄的照片
如果你真的想做什么,你会找到方法的。如果你没有,你会找到一个借口。
每个数据科学家都必须探索自己的内在品质,才能在数据科学领域取得成功。虽然在数据科学的技术方面非常精通可以为您带来几个机会,让您从中受益并获得金钱利益,但软技能在提高您作为数据科学家的长期成功方面发挥着同等重要的作用。
因此,不仅要不断积累数据科学方面的知识,同样重要的是要不断发展自己的个性,学习与同事和团队成员互动的艺术。一旦你提高和完善了你的软技能和数据科学技能,你将达到新的高度!
如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。
看看我的其他一些文章,你可能会喜欢读!
</5-nlp-topics-and-projects-you-should-know-about-65bc675337a0> </7-tips-to-crack-data-science-and-machine-learning-interviews-38b0b0d4a2d3> </8-best-visualizations-to-consider-for-your-data-science-projects-b9ace21564a> </15-tips-to-be-more-successful-in-data-science-c58aa1eb4cae>
谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!
比较 Python Pandas 和 R data 的 5 个示例。表
原文:https://towardsdatascience.com/5-examples-to-compare-python-pandas-and-r-data-table-27b43402ae6a?source=collection_archive---------32-----------------------
两者的实用指南
Katka Pavlickova 在 Unsplash 上拍摄的照片
Python 和 R 是数据科学生态系统中的两种主要语言。它们都提供了丰富的库选择,可以加速和改进数据科学工作流。
在本文中,我们将比较 pandas 和 data.table,这两个流行的数据分析和操作库分别用于 Python 和 R。我们不会试图宣布一个优于另一个。相反,重点是展示这两个库如何为数据争论提供高效灵活的方法。
我们将讨论的例子是常见的数据分析和操作。因此,你可能会经常使用它们。
我们将使用 Kaggle 上的墨尔本房产数据集作为例子。我将使用 Google Colab(熊猫)和 r studio(data . table)作为 IDE。让我们首先导入库并读取数据集。
# pandas
import pandas as pd
melb = pd.read_csv("/content/melb_data.csv")# data.table
library(data.table)
melb <- fread("datasets/melb_data.csv")
示例 1
第一个示例是基于数据集中的现有列创建一个新列。这是特征工程过程中的常见操作。pandas 和 data.table 都提供了完成这项任务的简单方法。
# pandas
melb["Price_per_area"] = melb["Price"] / melb["Landsize"]# data.table
melb[, Price_per_area := Price / Landsize]
Price、Landsize 和 Price_per_area 列的前 5 行(图片由作者提供)
示例 2
对于第二个示例,我们通过应用几个过滤器来创建原始数据集的子集。该子集包括价格超过 100 万英镑的 h 类房屋。
# pandas
subset = melb[(melb.Price > 1000000) & (melb.Type == "h")]# data.table
subset <- melb[Price > 1000000 & Type == "h"]
对于 pandas,我们提供数据框的名称来选择用于过滤的列。另一方面,data.table 只使用列名就足够了。
示例 3
数据分析中非常常用的函数是 groupby 函数。它允许根据一些数值度量来比较分类变量中的不同值。
例如,我们可以计算不同地区的*均房价。为了让这个例子更复杂一点,让我们也对房子类型应用一个过滤器。
# pandas
melb[melb.Type == "u"].groupby("Regionname").agg(
avg_price = ("Price", "mean")
)# data.table
melb[Type == "u", .(avg_price = mean(Price)), by="Regionname"]
(图片由作者提供)
Pandas 使用 groupby 函数执行这样的操作。对于 data.table,这个操作相对简单一些,因为我们只需要使用 by 参数。
实例 4
让我们进一步看前面的例子。我们找到了房屋的*均价格,但不知道每个地区的房屋数量。
这两个库都允许在一个操作中应用多个聚合。我们还可以按升序或降序对结果进行排序。
# pandas
melb[melb.Type == "u"].groupby("Regionname").agg(
avg_price = ("Price", "mean"),
number_of_houses = ("Price", "count")
).sort_values(by="avg_price", ascending=False) # data.table
> melb[
Type == "u",
.(avg_price = mean(Price), number_of_houses=.N),
by="Regionname"
][order(-avg_price)]
(图片由作者提供)
我们使用 count 函数来获得每组中房屋的数量。的”。n”可以用作 data.table 中的计数函数。
默认情况下,两个库都按升序对结果进行排序。在 pandas 中,此行为由升序参数控制。我们只是用一个减号在 data.table 中以降序得到结果。
实例 5
在最后一个例子中,我们将看到如何更改列名。例如,我们可以更改类型和距离列的名称。
- 类型:房屋类型
- 距离:距离
数据集中的距离列表示到中央商务区(CBD)的距离,因此最好在列名中提供此信息。
# pandas
melb.rename(columns={"Type": "HouseType",
"Distance": "DistanceCBD"},
inplace=True)# data.table
setnames(melb,
c("Type", "Distance"),
c("HouseType", "DistanceCBD"))
对于 pandas,我们传递一个字典,它将更改映射到 rename 函数。inplace 参数用于将结果保存在原始数据框中。
对于 data.table,我们使用 setnames 函数。它有三个参数,分别是表名、要更改的列名和新列名。
结论
我们基于数据分析和操作过程中常见操作的 5 个示例对 pandas 和 data.table 进行了比较。这两个库都提供了简单有效的方法来完成这些任务。
在我看来,data.table 的语法比熊猫简单一点。Data.table 在某些情况下更切题。
值得一提的是,我们在本文中所做的例子仅仅代表了这些库的一小部分功能。它们提供了许多功能和方法来执行复杂得多的操作。
感谢您的阅读。如果您有任何反馈,请告诉我。
5 个例子来解释 Pandas 操作的 SQL 版本
原文:https://towardsdatascience.com/5-examples-to-explain-sql-versions-of-pandas-operations-113f7afde249?source=collection_archive---------35-----------------------
SQL 不仅仅是一种查询语言
照片由 Unsplash 上的尼克·费因斯拍摄
SQL 代表结构化查询语言。然而,它提供的不仅仅是从关系数据库中检索数据的查询。我认为 SQL 是一个完整的数据分析和操作工具。
数据科学生态系统中最受欢迎的数据分析工具之一是 Pandas Python 库。SQL 可以执行几乎任何你可以用 Pandas 做的操作。
在本文中,我们将通过 5 个例子来演示 Pandas 操作的 SQL 版本。示例将包括数据操作和分析任务。
我将做一些超越非常简单的任务的例子,因为我想强调 SQL 是如何被用作数据分析工具的。
我们将使用 Kaggle 上的墨尔本房产数据集。我之前已经下载了数据集,并创建了一个包含其中一些列的 SQL 表。
让我们先来看看这张表。
(图片由作者提供)
注:关系数据库管理系统有 MySQL、SQL Server、PostgreSQL 等几种。尽管它们大多采用相同的 SQL 语法,但可能会有一些细微的差别。在本文中,我们将使用 PostgreSQL。
示例 1
第一个例子是关于日期操作的。在某些情况下,我们需要从某个日期提取特定的信息,比如月份和年份。
在 Pandas 中,可以使用 dt 访问器下的 month 方法从日期中提取月份信息。
我们可以对 SQL 进行同样的操作,如下所示:
SELECT date, EXTRACT(month from date) AS month FROM melb LIMIT 5;
(图片由作者提供)
我们使用 extract 函数,该函数可用于从一个日期获取多条信息。例如,可以通过将提取函数中的“月”参数替换为“年”来提取年。
示例 2
第二个例子是关于字符串操作的。在数据分析中,这是一项非常常见的任务,因为大量数据都是文本形式的。
典型的操作是拆分字符串。Pandas 在 str 访问器下为这个任务提供了 split 函数。在 PostgreSQL 中,split_part 函数可以用来拆分字符串。
让我们创建一个新列,它包含 region name 列中的第一个单词。它可以用作区域组。
SELECT
regionname,
SPLIT_PART(regionname,' ', 1) AS regiongroup
FROM melb LIMIT 5;
(图片由作者提供)
limit 关键字仅用于限制要显示的行数。
示例 3
在这个例子中,我们将复制熊猫的 value_counts 函数。它用于计算一列中不同值的出现次数。在我们的例子中,我们可以找到每个地区的房屋数量。
SELECT regionname, count(1) AS house_count
FROM melb
GROUP BY regionname
ORDER BY house_count desc;
(图片由作者提供)
我们使用 group by 函数根据 region name 列中的不同值对观察值(即行)进行分组。然后,count 函数用于计算每个区域的行数。
实例 4
在这个例子中,我们将在查询中实现一个 if-else 语句。假设我们想根据房屋到中心商业区的距离对它们进行分类。我们可以使用 case when 函数来完成这项任务。
从该表中检索数据时,我们将创建一个名为“距离类型”的新列。它所取的值将基于距离列。
SELECT
distance,
CASE WHEN distance > 20 THEN 'far'
WHEN distance <= 20 and distance > 10 THEN 'medium'
ELSE 'close'
END AS distancetype FROM melb LIMIT 5;
(图片由作者提供)
前 5 行具有相同的距离。为了确认功能按预期工作的情况,我们可以检查每种距离类型的最大距离。
SELECT
MAX(distance),
CASE WHEN distance > 20 THEN 'far'
WHEN distance <= 20 and distance > 10 THEN 'medium'
ELSE 'close'
END AS distancetype FROM melb GROUP BY distancetype;
(图片由作者提供)
我们可以使用 Pandas 中的剪切功能来完成这项任务。
实例 5
最后一个例子是关于一个最常用的 Pandas 函数,groupby。我们使用它来根据不同列中的值比较一列中的不同值或类别。
SQL 为此任务提供了 group by 语句。就像熊猫一样,我们可以用 SQL 创建嵌套组。我们只需要传递用于分组的列名。
一旦创建了组,我们就可以对感兴趣的列应用聚合函数。
让我们根据“类型”和“房间”栏中的类别对房屋进行分组。然后,我们可以为每个类别计算以下值:
- 最高价
- *均距离
- 该组中的房屋数量
SELECT
type,
rooms,
max(price/1000000) as max_price,
cast(avg(distance) as decimal(5,2)) as avg_distance,
count(1) as house_count FROM melb WHERE rooms <= 4 GROUP BY type, rooms
ORDER BY type, rooms;
(图片由作者提供)
为了简化结果集,我只包含了拥有 4 个或更少房间的房屋。结果按“类型”和“房间”列排序。
执行此任务的 Pandas 代码如下:
melb[melb.Rooms <= 4]\
.groupby(["Type", "Rooms"], as_index=False).agg(
max_price = ("Price", "max"),
avg_distance = ("Distance", "mean"),
house_count = ("Distance", "count")
).sort_values(by=["Type","Rooms"])
结论
SQL 是数据科学家的必备技能。虽然它被称为查询语言,但它提供的不仅仅是检索数据。使用 SQL 可以完成几乎所有典型的数据分析和操作任务。
感谢您的阅读。如果您有任何反馈,请告诉我。
用 Python 熊猫学习日期和时间操作的 5 个例子
原文:https://towardsdatascience.com/5-examples-to-learn-date-and-time-manipulation-with-python-pandas-9ab9cdeb032e?source=collection_archive---------10-----------------------
实用指南
(图片由作者提供)
我们经常在数据科学中处理日期和时间。如果您正在处理时间序列数据,它们总是您工作的一部分。
Pandas 在处理日期和时间方面非常高效和实用。在本文中,我们将通过 5 个例子来解决一些常见的日期和时间操作。
如果你想在我发表新文章时收到电子邮件,别忘了订阅。
让我们首先创建一个包含日期的示例数据框架。
import pandas as pddf = pd.DataFrame({
"Date": pd.date_range(start="2021-12-28", periods=5, freq="D"),
"Measurement": [1, 10, 25, 7, 12]
})
(图片由作者提供)
1.使用 DateOffset 的日期时间操作
DateOffset
功能可用于为日期添加特定长度的持续时间。
让我们通过向现有的日期列添加 6 个月来创建一个新列。
df["Date2"] = df["Date"] + pd.DateOffset(months=6)
(图片由作者提供)
以下代码行将 1 年添加到现有的日期列中。
df["Date2"] = df["Date"] + pd.DateOffset(years=1)
需要注意的是,日期列中值的数据类型是datetime
。因此,我们也可以添加时间间隔。
df["Date"] + pd.DateOffset(hours=2)# output
0 2021-12-28 02:00:00
1 2021-12-29 02:00:00
2 2021-12-30 02:00:00
3 2021-12-31 02:00:00
4 2022-01-01 02:00:00
Name: Date, dtype: datetime64[ns]
如果需要做减法,只需将“+”号改为“-”号,或者在函数内部使用负值。
2.使用 Timedelta 的日期时间操作
我们也可以使用Timedelta
功能来添加日期和时间。它的语法与DateOffset
函数的语法略有不同。
df["Date"] + pd.Timedelta(3, unit="day")# output
0 2021-12-31
1 2022-01-01
2 2022-01-02
3 2022-01-03
4 2022-01-04
Name: Date, dtype: datetime64[ns]
Timedelta
函数也接受字符串来指定要添加的持续时间。下面的代码行执行与上面相同的操作。
df["Date"] + pd.Timedelta("3 days")
3.从日期时间对象中提取信息
一个datetime
对象包含几条信息,比如年、月、日、周、小时、微秒等等。
我们有时需要一条特定的信息。例如,我们可以从日期中提取月份,如下所示:
df["Date"].dt.month# output
0 12
1 12
2 12
3 12
4 1
Name: Date, dtype: int64
year
和day
方法分别返回日期的年和日部分。
在零售分析中,星期几是用于分析和建模的重要信息。dayofweek
方法可以用来从一个日期中获取这个信息。
df["Date"].dt.dayofweek# output
0 1
1 2
2 3
3 4
4 5
Name: Date, dtype: int64
所有这些方法都可以在dt
访问器下使用,所以一定要在方法名前写“dt”。
4.异日历
isocalendar
函数返回带有年、周和星期几的数据帧。因此,这是一种在单次操作中提取多条信息的快速方法。
例如,我们可以将年、周和星期几列添加到初始数据框架中,如下所示:
df = pd.concat([df, df["Date"].dt.isocalendar()], axis=1)
(图片由作者提供)
创建附加列的部分是:
df["Date"].dt.isocalendar()
我们使用concat
函数将这些列与原始数据帧结合起来。
5.差异
在某些任务中,两个日期或时间之间的差异可能非常重要。例如,我们可能需要计算流程中连续测量之间的时间。
两个datetime
对象的减法运算给出了天数的差异。
df["Diff"] = df["Date2"] - df["Date"]
(图片由作者提供)
diff 列的数据类型是timedelta
,所以我们可以使用days
方法得到天数。
df["Diff"].dt.days# output
0 365
1 365
2 365
3 365
4 365
Name: Diff, dtype: int64
我们也可以用 1 天除以一个timedelta
对象来得到天数。
df["Diff"] / pd.Timedelta(days=1)# output
0 365.0
1 365.0
2 365.0
3 365.0
4 365.0
Name: Diff, dtype: float64
如果您想要将差异转换为月或年,请使用 NumPy 的timedelta
,因为熊猫无法从月或年构造Timedelta
。
import numpy as npdf["Diff"] / np.timedelta64(1, 'M')# output
0 11.992033
1 11.992033
2 11.992033
3 11.992033
4 11.992033
Name: Diff, dtype: float64
我们已经学习了熊猫的功能和方法来解决日期和时间操作中的一些常见任务。
别忘了 订阅 如果你想在我发表新文章时收到邮件。
你可以成为 媒介会员 解锁我的全部写作权限,外加其余媒介。如果您使用以下链接,我将收取您的一部分会员费,无需您支付额外费用。
https://sonery.medium.com/membership
感谢您的阅读。如果您有任何反馈,请告诉我。
数据科学家无法自动化的 5 个例子
原文:https://towardsdatascience.com/5-examples-where-data-scientists-cant-be-automated-c3d82c518d37?source=collection_archive---------11-----------------------
意见
不,数据科学家不会失业,原因如下。
艾迪尔·华在Unsplash【1】上的照片。
目录
- 介绍
- 形成业务需求
- 数据探索
- 特征创建
- 行业理解
- 将模型实施到业务和/或产品中
- 摘要
- 参考
介绍
随着数据科学越来越受欢迎,以及变得更加明确,有一种观点认为数据科学本身可以自动化。虽然,是的,数据科学家做的很多过程可以并且很可能会自动化,但这个过程的关键步骤几乎总是需要专家的干预。数据科学的某些方面,如模型比较、可视化创建和数据清理,可以实现自动化。然而,这些步骤中的一些并不是数据科学家最有价值的地方。虽然数据科学教育通常侧重于编码和模型开发,但一个人必须指导这一过程的主要原因是因为数据科学应该如何融入业务和产品。我将在下面更详细地讨论这个概念,以及数据科学家无法自动化的五个例子。
形成业务需求
照片由布鲁克·卡吉尔在Unsplash【2】上拍摄。
既然我们对数据科学可以自动化的领域有了大致的了解,我们就可以把重点放在不能自动化的领域。形成商业提问的最重要的步骤之一,也称为问题陈述。自动化无法在业务中找到问题并很好地定义它。数据科学自动化当然可以使执行解决方案的答案变得更容易,但创造力和业务理解是探索需要修复的业务漏洞所必需的。
话虽如此,以下是一些例子,说明为什么形成业务需求应该是人为的,而不是自动化的:
- 软件或自动化不能理解业务的问题,例如,它不知道存在的产品不是基于它们的历史被推荐的产品,因此,它不能提出推荐系统最终将解决的问题
- 自动化不知道如何区分业务需求的优先级,例如,它不知道如何自己评估工作、时间、金钱、受影响的应用程序等等
- 自动化不能满足产品经理,也不能理解业务中的痛点
从本质上讲,数据科学自动化首先要努力找出它需要自己的原因。
数据探索
照片由卡伦·艾姆斯利在Unsplash【3】上拍摄。
类似于数据科学自动化或自动化机器学习(AutoML——这个概念不是一家公司)无法从业务需求开始,AutoML 也不知道要寻找哪些数据源。AutoML 可以合并、连接并最终联合一个最终数据集,但它无法在原始数据被转换之前找到它。
以下是数据探索的一些要点——为数据科学模型找到正确的数据,来自数据科学家与 AutoML:
- 要进行 AutoML 数据探索,首先需要数据,这是由数据科学家收集的
- 数据科学家将查看各种站点、来源和*台,以找到可用于模型的数据
- AutoML 很难给公司发电子邮件,通常 很难知道要寻找什么数据——无论是流量数据、消费者数据还是任何数据
就像上一节中突出显示的声明一样,数据探索必须知道要寻找什么类型的数据,要遵守什么行业,涉及的法规,以及何时停止寻找数据——这个过程将由数据科学家(和数据工程师等——取决于公司)来完成。
特征创建
Jr Korpa 在Unsplash【4】上拍照。
是的,特征工程可以自动化,但是,这个术语经常被互换使用和混淆。出于文章的目的,我们将其定义为feature creation
。数据科学流程中的这一步可以获得 AutoML 的好处,但是,它需要了解业务、产品及其消费者,才能知道要创建哪些新功能。
以下是 AutoML 与 data scientist 在特征创建方面的一些关键实例:
- 数据科学家知道如何通过相乘或相除来组合两个特征,例如在
clicks
中,user
可以是clicks per user
- 数据科学家将知道在有意义的地方将某些功能组合在一起,也许 AutoML 会尝试创建一个功能为
clicks per house type
的功能,虽然它可以认识到划分现有功能很重要(如果*台有此功能),但它可以创建一个完全没有意义的功能,因为它确实了解业务或行业。一个数据科学家会创造一个类似clicks per user grouped by zipcode
的功能。这个特性将会是一个可操作的特性,而不仅仅是你输入到一个模型中的东西,就好像你知道这是最重要的特性一样,然后你就可以针对这个特性的某些价值创造一个营销活动。
行业理解
照片由 Element5 数码在Unsplash【5】上拍摄。
这个例子遵循了上面例子的主题,数据科学需要一个了解业务的人。话虽如此,我将简短地谈这一点。
- 很难自动知道根据行业使用什么类型的数据科学模型
- 行业差异很大,医疗行业的推荐算法可能不如电影服务*台有用
将模型实施到业务和/或产品中
照片由印尼 UX在Unsplash【6】上拍摄。
其他示例围绕数据科学过程的第一部分,而最后一个示例强调了数据科学过程的最后一部分。假设您拥有自动化程度最高的型号选择*台,能够带来惊人的准确性,那么它接下来会做什么?这部分流程非常需要数据科学家。
- 自动化只能到此为止,相反,数据科学家需要知道将结果放在应用程序、网站等的什么地方
- 数据科学家将知道训练模型的频率、显示结果的频率或预测新数据的频率——通常在数据科学流程的范围界定部分进行讨论
- 数据科学家将知道如何更好地向利益相关者总结复杂的结果,即使 AutoML 很好地总结了结果,像数据科学家这样的人将更有助于回答利益相关者、客户和上层领导会提出的几个问题
摘要
您可能已经注意到这些示例中的一个趋势,其中大多数情况是数据科学过程的开始部分,也是数据科学过程的结束部分。这一点意味着数据科学的中间部分可以自动化,这样做的*台非常有用。然而,这是您开始和结束数据科学的方式。这种开始和结束正是需要数据科学家的地方。
总而言之,下面是自动化数据科学*台需要数据科学家的五个关键示例:
** Forming the Business Ask* Data Exploration* Feature Creation* Industry Understanding* Model Implementation Into Business and/or Product*
我相信数据科学职位不会被移除,相反,会随着时间的推移而更新。
我希望你喜欢这篇文章,并开始讨论什么时候我们真正需要数据科学家。你同意我上面讨论的例子吗?如果不是,那是为什么?您还能想到哪些自动化更有用、更值得信赖的例子,以及哪些数据科学家应该只被使用的例子?谢谢你的阅读,我很感激!
**请随时查看我的个人资料和其他文章,也可以在 LinkedIn 上联系我。
我不隶属于上述任何公司。
参考
[1]照片由 Aideal Hwa 在Unsplash(2020)上拍摄
[2]Brooke Cagle 在 Unsplash 上拍摄的照片,(2018)
[3]照片由卡伦·艾姆斯利在 Unsplash 上拍摄,(2016)
[4]照片由 Jr Korpa 在Unsplash(2019)拍摄
[5]照片由 Element5 Digital 在 Unsplash 上拍摄,(2018)
[6]照片由印尼 UX在Unsplash(2020)拍摄
2021 年值得关注的 5 项激动人心的深度学习进展
原文:https://towardsdatascience.com/5-exciting-deep-learning-advancements-to-keep-your-eye-on-in-2021-6f6a9b6d2406?source=collection_archive---------4-----------------------
来源: Pixabay 。
正在进行的研究的暗流
2021 年到了,深度学习一如既往的活跃;这一领域的研究正以指数速度增长。显然还有更多令人着迷和兴奋的深度学习进步。然而,对我来说,这五个展示了正在进行的深度学习研究中的一个核心潜流:深度学习模型的规模有多必要?
1.GrowNet
TL;GrowNet 将梯度推进应用于浅层神经网络。它越来越受欢迎,在分类、回归和排序方面产生了卓越的结果。它可能表明研究支持非专业数据(非图像或序列)上的较大集合和较浅网络。
事实证明,梯度推进在最*几年变得非常流行,可以与神经网络相媲美。这个想法是有一个弱(简单)学习者的集合,每个人纠正前一个人的错误。例如,一个理想的 3 模型梯度增强集成可能看起来像这样,其中示例的实际标签是1
。
- 模型 1 预测
0.734
。目前的预测是**0.734**
。 - 模型 2 预测
0.464
。目前的预测是0.734+0.464=**1.198**
。 - 模型 3 预测
-0.199
。目前预测是1.198-0.199=**0.999**
。
每个模型都在前一个模型的残差上进行训练。尽管每一个模型可能单独都很弱,但作为一个整体,整体可以发展出难以置信的复杂性。像 XGBoost 这样的梯度推进框架在决策树上使用梯度推进,这是最简单的机器学习算法之一。
已经有一些关于神经网络对于梯度增强不够弱的讨论;因为梯度推进有如此多的过拟合能力,所以集合中的每个学习者都是弱学习者是至关重要的。
然而,最*的工作表明,非常深的神经网络可以分解成许多更小的子网的集合。因此,大规模神经网络可能只是小型神经网络的复杂集合。这挑战了神经网络在梯度提升中太强而不是弱学习者的想法。
这个小团体由 k 个模特组成。每个模型都有原始特征和前一个模型的预测。将所有模型的预测相加以产生最终输出。每个模型都可以简单到只有一个隐藏层。
来源:小网论文。
GrowNet 易于调整,需要较少的计算成本和训练时间,但它在多个数据集上的回归、分类和排序方面优于深度神经网络。数据科学家发现了这些好处,并且越来越受欢迎。
论文, Pytorch 实现
2.TabNet
TL;TabNet 是一个用于表格数据的深度学习模型,被设计成能够表示层次关系,并从决策树模型中获得灵感。它在许多真实世界的表格数据集上产生了卓越的结果。
众所周知,神经网络不擅长建模表格数据,公认的解释是因为它们的结构——非常容易过度拟合——反而成功地识别了图像或文本等特定数据的复杂关系。
像 XGBoost 或 Adaboost 这样的决策树模型反而更受现实世界表格数据的欢迎,因为它们将特征空间分割在简单的垂直*面中。这种程度的分离对于大多数真实世界的数据集来说通常是好的;即使这些模型,不管有多复杂,对决策边界做出假设,过度拟合是一个更糟糕的问题。
然而,对于许多真实世界的数据集,决策树模型是不够的,神经网络太多了。TabNet 是由两名谷歌研究人员创建的,目的是解决这个问题。该模型依赖于一个基本的神经网络设计,它像一个更复杂的决策树一样做出决策。
左图:一个简单的类似决策树的神经网络。真正的 TabNet 架构更深入。右:左模型对特征空间的划分,这很像决策树分割特征空间的方式。来源: TabNet 论文。
此外,TabNet 分两个阶段进行训练。在无监督的预训练阶段,模型被训练来预测数据中的屏蔽值。然后将决策层附加到预训练的编码器上,并进行监督微调。这是对表格数据进行令人难以置信的成功的无监督预训练的第一个例子。
来源: TabNet 论文。
至关重要的是,该模型使用注意力,因此它可以选择从哪些特征做出决定。这使得它能够开发现实世界数据中经常出现的层次结构的强大表示。
来源: TabNet 论文。
这些机制意味着 TabNet 的输入数据不需要任何处理。TabNet 在数据科学家中迅速崛起;例如,几乎所有在行动机制卡格尔竞赛中得分最高的竞争者都将 TabNet 整合到他们的解决方案中。由于它的流行,它已经在一个非常简单和可用的 API 中实现。
这代表着深度学习超越了极其专业的数据类型,并揭示了神经网络可以有多普遍。[链接]
论文、简单 Pytorch API 实现、简单 TensorFlow API 实现
3.效率网
TL;dr: 改善深度 CNN 的模型缩放可以是无组织的。复合缩放是一种简单有效的方法,可统一缩放网络的宽度、深度和分辨率。EfficientNet 是一个应用了复合缩放的简单网络,可以产生最先进的结果。该模型在图像识别工作中非常受欢迎。
深度卷积神经网络已经变得越来越大,试图使它们更加强大。然而,它们究竟是如何变大的,实际上是很随意的。有时,图像的分辨率会增加(更多像素)。其他时候,可能是深度(层数)或宽度(每层中神经元的数量)增加。
来源:效率网论文。
复合缩放是一个简单的想法:不是任意缩放它们,而是*均缩放网络的分辨率、深度和宽度。
例如,如果想要使用两倍多的计算资源;
- 将网络深度增加α倍
- 将网络宽度增加β倍
- 将图像尺寸增加γ倍
α、β和γ的值可以通过简单的网格搜索得到。复合缩放可以应用于任何网络,像 ResNet 这样的复合缩放版本的模型一直比任意缩放的模型表现得更好。
该论文的作者开发了一个基线模型 EfficientNetB0,它由非常标准的卷积组成。然后,使用复合缩放,创建了七个缩放模型——efficient net 1 至 EfficientNetB7。
结果是惊人的——与需要 4 到 7 倍的参数和 6 到 19 倍的计算资源的模型相比,EfficientNets 能够执行得更好。似乎复合缩放是利用神经网络空间的最有效的方式之一。
EfficientNet 是最*最重要的贡献之一。它标志着研究转向更强大但也更有效和实用的神经网络。
论文,简单 Pytorch API 实现,简单 TensorFlow 实现
4.彩票假说
**TL;博士:**神经网络本质上是巨型彩票;通过随机初始化,某些子网在数学上是幸运的,并且被优化器识别出它们的潜力。这些子网(“中奖票”)承担了大部分重任,而网络的其余部分没有做太多。这个假设在理解神经网络如何工作方面是开创性的。
为什么神经网络不会过度拟合?这么多参数他们怎么概括?为什么大型神经网络比小型神经网络工作得更好,而这是一个常见的统计学原理,即更多的参数=过度拟合?
“呸!走开,闭嘴!”抱怨深度学习社区。“我们不关心神经网络如何工作,只要它能工作。”长期以来,这些大问题都没有得到充分的研究。
一个常见的答案是正规化。然而,事实似乎并非如此——在张等人进行的一项研究中,没有各种正则化方法的初始架构的性能并不比有正则化方法的初始架构差多少。因此,人们不能争辩说正则化是一般化的基础。
来源:张等
神经网络修剪提供了一个令人信服的答案。
使用神经网络修剪,超过 90%的神经网络权重和神经元(在某些情况下为 95%甚至 99%)可以被消除,而性能几乎没有损失。怎么会这样呢?
假设你想在亚马逊上订购一支笔。当快递包裹到达时,你会发现它装在一个大纸箱里,里面有很多填充物。经过几分钟的寻找,你终于找到了那支笔。
找到笔之后,馅料就不重要了。但在你找到它之前,馅料是送货的一部分。有填充物的纸箱是神经网络,笔是做所有实际工作的子网。找到那个子网后,你就可以抛弃其余的神经网络了。但是,首先需要有一个网络来找到子网。
彩票假说:在每一个足够深度的神经网络中,都有一个更小的子网,它的表现和整个神经网络一样好。
神经网络中的权重开始随机初始化。在这一点上,网络中有大量的随机子网,但有些更有数学潜力。也就是说,优化器认为更新这组权重在数学上更好,以降低损失。最终,优化器开发了一个子网来完成所有的工作;网络的其他部分没有多大用处。
每个子网都是一张随机初始化的“彩票”。有利的初始化是优化器识别的“中奖票”。您拥有的随机彩票越多,其中一张彩票中奖的概率就越高。这就是为什么大型网络通常表现更好的原因。
这个假设对于提出对深度双重下降的解释尤为重要,其中在某个阈值之后,更多的参数产生了更好的泛化而不是更少。
来源: OpenAI 。
彩票假说朝着真正理解深度神经网络如何工作迈出了一大步。虽然这仍然是一个假设,但有令人信服的证据,这样的发现将改变我们在深度学习中的创新方式。
论文
5.零培训的顶级模特
TL;dr: 研究人员开发了一种方法来修剪完全随机初始化的网络,以实现训练模型的最佳性能。
与彩票假说密切相关,这项研究探索了在神经网络中究竟可以存在多少信息。数据科学家看到“6000 万个参数”而低估 6000 万个参数真正能储存多大的力量是很常见的。
为了支持彩票假说,该论文的作者开发了边弹出算法,该算法评估边或连接对预测的“帮助”程度。仅保留另外的 k %的“有用”边缘;剩下的被修剪(去除)。
在一个足够大的随机神经网络上使用边缘弹出算法产生的结果非常接*,有时甚至优于所有权值保持不变的已训练神经网络的性能。
权重百分比指的是 k ,修剪后模型保留的百分比。来源:论文。
这太不可思议了——在一个完全未经训练、随机初始化的神经网络中,已经存在一个表现最佳的子网。这就像有人告诉我,你的名字可以在一个非常短的随机字母序列中找到。
uqhoquiwhrpugtdfdsnaoidpufehiobnfjdopafwuhibdsofpabievniawo;jkjndjkn
ajsodijaiufhuiduisafid**johndoe**ojahsiudhuidbviubdiaiupdphquiwhpeuhqiuhdpueohdpqiuwhdpiashiudhjashdiuhasiuhdibcisviywqrpiuhopfdbscjasnkuipi
这项研究更多的是一个问题,而不是一个答案。它为我们指出了一个新的研究领域:弄清神经网络到底是如何工作的。如果这些发现是普遍的,那么肯定会有更好的训练方法,可以利用这个等待被发现的深度学习的基本公理。
论文
总结和结论
- 小大人。集成方法在深度学习中的应用是将简单子网结构转化为复杂、复杂和成功模型的一个例子。
- TabNet 。神经网络结构非常灵活,TabNet 标志着神经网络真正扩展到了各种数据类型。这是适配不足和适配过度之间的完美*衡。
- 高效网。EfficientNet 是将更多预测能力装入更小空间的增长趋势的一部分,它极其简单而有效。它表明,确实有一个结构向缩放模型发展。随着模型不断变得越来越大,这一点非常重要。
- 彩票假说。对神经网络如何一般化的迷人视角,彩票假说是一把金钥匙,将帮助我们解锁更大的深度学习成就。确定大型网络的力量不是来自于其规模本身,而是来自于“彩票”数量的增加,这是一种突破。
- 零培训的顶级车型。这生动地证明了我们低估了随机初始化的神经网络的预测能力。
毫无疑问,2021 年将在深度学习方面带来更多令人着迷的进步。
5 个专家提示,让你的 Python 字典技能一飞冲天🚀
原文:https://towardsdatascience.com/5-expert-tips-to-skyrocket-your-dictionary-skills-in-python-1cf54b7d920d?source=collection_archive---------9-----------------------
获得有价值的技能
你觉得你懂 Python 的字典吗?
照片由 Danylo Suprun 在 Unsplash 上拍摄
您的旅程概述
- 设置舞台
- 快速回顾—基础知识
- 提示 1 —使用字典进行迭代
- 技巧 2 —自信地获取数值
- 提示 3——词典释义
- 提示 4 —使用压缩功能
- 提示 5 —字典合并
- 包装完毕
搭建舞台
字典是 Python 中的基本数据结构之一。你用它来做计数、分组和表示关系。然而,并不是每个人都知道如何有效地使用字典。
字典使用不当往往会导致冗长的代码、缓慢的代码,甚至细微的 bug😧
当我开始使用 Python 时,我几乎不能从字典中访问和检索数据。但是几年后,我开始意识到掌握好词典是至关重要的。
用 Python 核心开发者之一的话说:
世界上有两种人:精通字典的人和十足的傻瓜。—雷蒙德·赫廷格
不要做一个傻瓜!在这篇博客中,我将向你展示 5 个技巧,让你的 Python 字典技能达到专业水*🔥
快速回顾—基础知识
创建词典的标准方法是使用以下语法:
# Creating an empty dictionary
empty_dict = {}# Standard way to create a dictionary
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}# Can use the dictionary constructor function
better_call_saul = dict([("Jimmy", 33), ("Kim", 31), ("Gus", 44)])
在上面的代码中:
- 名字
Jimmy
、Kim
和Gus
是字典的键。 - 年龄
33
、31
和44
是字典的值。 - 对
"Jimmy": 33
、“Kim": 31
和"Gus": 44
是键值对。
您可以使用以下语法访问字典better_call_saul
中的值
# Getting Kim's age
print(better_call_saul["Kim"])**Output:** 31# Setting Jimmy's age
better_call_saul["Jimmy"] = 34
从上面的代码可以看出,字典是可变的。字典中的键也必须是不同的。
您可以使用字典毫不费力地添加或移除键值对:
# Setting a new key-value pair
better_call_saul["Jonathan"] = 54# Removing the key-value pair again (sorry Jonathan!)
del better_call_saul["Jonathan"]
最后,不是每个 Python 对象都可以是字典中的一个键。精确的规则是对象应该是可散列的。请放心,任何不可变对象都是可散列的。关于 hashable 的更深入的解释,请查看博客:
https://betterprogramming.pub/3-essential-questions-about-hashable-in-python-33e981042bcb
技巧 1 —字典迭代
您应该知道的第一件事是,从 Python 版本开始,字典是有序的:
当你打印一个字典或者循环遍历它的元素时,你将会看到元素以它们被添加到字典中的相同顺序出现——Eric Matthes,Python 速成教程
遍历这些键
要遍历字典的键,可以使用方法keys()
:
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}for name in better_call_saul.keys():
print(name)**Output:**
Jimmy
Kim
Gus
如您所见,通过使用keys()
方法,您可以访问字典的键。但是等等!也可以这样写:
for name in better_call_saul:
print(name)**Output:**
Jimmy
Kim
Gus
如果你遍历字典,那么它将默认遍历所有的键😎
遍历这些值
如果您想遍历一个字典的值,那么您应该使用values()
方法:
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}# Calculating the total age of the characters
total = 0
for age in better_call_saul.values():
total += ageprint(total)**Output:**
108
遍历键和值
如果在一次迭代中既需要键又需要值,那么应该使用items()
方法。让我们先看看它返回了什么:
print(better_call_saul.items())**Output:**
dict_items([('Kim', 31), ('Gus', 44)])
输出是一个字典项目对象。这种对象的功能与元组列表相同。因此,您可以使用以下语法:
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}for name, age in better_call_saul.items():
print(f"{name} is {age} years old.")**Output:**
Jimmy is 33 years old.
Kim is 31 years old.
Gus is 44 years old.
技巧 2——自信地获取价值
考虑代码:
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}young_guy_age = better_call_saul["Nacho"]**Result:**
KeyError: 'Nacho'
您得到一个KeyError
,因为键“Nacho”
在字典better_call_saul
中不存在。哎哟😬
这实际上很现实。通常你不能完全控制字典里的内容。您字典中的数据可能来自
- 网页抓取,
- 一个 API,
- 或者加载数据。
让你的程序这么容易崩溃会给你带来巨大的痛苦。相反,您可以使用get()
方法:
young_guy_age = better_call_saul.get("Nacho", "Can't find")print(young_guy_age)**Output:**
Can't find
get()
方法有两个参数:
- 要为其检索相应值的键。
- 字典中不存在关键字时的默认值。
如果没有给get()
方法提供第二个参数,那么第二个参数默认为None
。使用get()
方法可以避免大量的键错误,从而使你的代码更加健壮。
**提示:**与
get()
相关的方法是setdefault()
方法。这两种方法都很棒,你也应该看看 setdefault 。
技巧 3——字典理解
你大概知道 列表理解 。列表理解是构建列表的一种 Pythonic 方式。您可以使用它们作为标准循环的强大替代:
# Gives the square numbers from 0 to 9
squares = []
for num in range(10):
squares.append(num ** 2)# List comprehensions do the same thing!
squares = [num ** 2 for num in range(10)]
你知道 Python 也支持 字典理解 吗?如果你想要一个快速建立字典的方法,那就不要再找了:
# Manually making a squares dictionary
squares = {0:0, 1:1, 2:4, 3:9, 4:16, 5:25, 6:36, 7:49, 8:64, 9:81}# Dictionary comprehensions do the same thing!
squares = {num: num ** 2 for num in range(10)}
作为另一个例子,考虑一个名字列表:
names = ["Jimmy", "Kim", "Gus"]
假设您想要构建一个字典,其中:
- 字典的关键字是列表
names
中的名字。 - 字典的值是名称的长度。
你可以用字典理解在一行中做到这一点!
length_of_names = {name: len(name) for name in names}
print(length_of_names)**Output:**
{'Jimmy': 5, 'Kim': 3, 'Gus': 3}
技巧 4——使用压缩功能
一个常见的问题是有两个单独的列表,您希望将它们合并到一个字典中。例如,假设您有以下两个列表:
names = ["Jimmy", "Kim", "Gus"]
ages = [33, 31, 44]
如何将names
和ages
组合成之前的字典better_call_saul
?在我向您展示魔术之前,让我们先验证一个简单的方法是否有效:
# The "enumerate" approach
better_call_saul = {}
for idx, name in enumerate(names):
better_call_saul[name] = ages[idx]
还不错!在这种情况下,enumerate
功能通常很有用。
然而,还有一种更巧妙的方法:将zip
函数与dict
构造函数一起使用!
# The "zip" approach
better_call_saul = dict(zip(names, ages))
拉链功能的工作原理就像夹克上的拉链——它从头到尾将物品配对。
值zip(names, ages)
是一个 zip 对象,所以不那么容易理解。但是如果你把它变成一个列表,它就会变得更容易处理:
print(list(zip(names, ages)))**Output:**
[('Jimmy', 33), ('Kim', 31), ('Gus', 44)]
这看起来像是dict
构造器能吃的东西!在使用dict
构造函数之前,您甚至不需要将 zip 对象转换成列表😍
有趣的事实:“zip”方法在执行速度上明显快于“enumerate”方法。
技巧 5 —字典合并
有时需要 合并两个字典 。字典合并将两个字典中的元素合并成一个字典。
在 Python 中有许多方法可以进行字典合并:
- 我将向您展示一种使用
update()
方法进行字典合并的传统方法。 - 我将向您展示 Python 3.9 中引入的令人敬畏的字典合并操作符。
与更新方法合并
假设你有两本字典:
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}
breaking_bad = {"Walter": 46, "Jesse": 23, "Jimmy": 38}
如果你想合并字典,那么你可以使用update()
方法:
# Updates better_call_saul
better_call_saul.update(breaking_bad)
print(better_call_saul)**Output:**
{'Jimmy': 38, 'Kim': 31, 'Gus': 44, 'Walter': 46, 'Jesse': 23}
您现在已经用来自breaking_bad
的新信息更新了better_call_saul
。注意键“Jimmy”
的值是 38。先前的值 33 已被覆盖。
使用字典合并运算符进行合并(Python 3.9+)
在 Python 3.9 中引入了字典合并操作符 |
和|=
。两者都简化了字典合并。如果你又有以前的字典better_call_saul
和breaking_bad
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}
breaking_bad = {"Walter": 46, "Jesse": 23, "Jimmy": 38}
然后你可以写:
better_call_saul |= breaking_bad
print(better_call_saul)**Output:**
{'Jimmy': 38, 'Kim': 31, 'Gus': 44, 'Walter': 46, 'Jesse': 23}
操作符|=
是原地字典合并操作符。它就地修改字典。如果您想要一个包含合并内容的新字典,您可以使用字典合并操作符 |
:
better_call_saul = {"Jimmy": 33, "Kim": 31, "Gus": 44}
breaking_bad = {"Walter": 46, "Jesse": 23, "Jimmy": 38}gilligan_universe = better_call_saul | breaking_bad
print(gilligan_universe)**Output:**
{'Jimmy': 38, 'Kim': 31, 'Gus': 44, 'Walter': 46, 'Jesse': 23}
如果您有两个以上的字典要合并,Python 3.9 中引入的新语法非常有用。
包扎
你现在可以像一个懂字典的人一样昂首阔步地着手未来的项目了!
照片由内森·杜姆劳在 Unsplash 上拍摄
喜欢我写的东西?查看我的博客文章类型提示、黑色格式和Python 中的下划线了解更多 Python 内容。如果你对数据科学、编程或任何介于两者之间的东西感兴趣,那么请随意在 LinkedIn 上加我,并向✋问好
5 个扩展,让你转到 Jupyter 实验室
原文:https://towardsdatascience.com/5-extensions-that-will-make-you-switch-to-jupyter-lab-32c6b66ac755?source=collection_archive---------3-----------------------
有时候 Jupyter 笔记本是不够的。
安德里亚斯·福斯伯格在 Unsplash 上拍摄的照片
Jupyter Lab 被称为 Jupyter 的下一代笔记本界面。它将笔记本、控制台、文本编辑器和终端集成到一个单一的交互式协作环境中。
除了带来经典笔记本和文本编辑器,Jupyter 实验室还提供第三方扩展。正如我们在的上一篇文章中看到的,Jupyter Notebook 只提供了有限数量的原生扩展;然而,Jupyter Lab 包含了一个健壮且蓬勃发展的第三方扩展社区。在本指南中,我将向您展示 5 个扩展,这会让您考虑转而使用 Jupyter Lab。
如果你一直只使用 Jupyter 笔记本,从未听说过 Jupyter 实验室,下面有一个快速设置(如果你熟悉 Jupyter 实验室,请跳转到扩展部分)
**Table of Contents** 1\. [Installing JupyterLab](#2140)
2\. [How to Install Extensions](#2e20)
3\. [Extensions Available by Default on JupyterLab 3.0+](#7f4c)
4\. [Extension 1: JupyterLab Spreadsheet](#c97e)
5\. [Extension 2: Interactive Graphs with Plotly and Chart Editor](#2cf0)
6\. [Extension 3: Drawing with JupyterLab-DrawIO](#ead8)
7\. [Extension 4: Auto-completion to A Next Level with Kite](#a9fe)
8\. [Extension 5: Debugger](#259d)
安装 JupyterLab
正如它的文档中提到的,你可以很容易地用 conda 或 pip 安装 Jupyter Lab。
# conda
conda install -c conda-forge jupyterlab# pip
pip install jupyterlab
安装完成后,运行以下命令打开 Jupyter Lab
jupyter lab
如何安装扩展
JupyterLab 扩展有两种类型:源代码扩展和预构建扩展。源扩展要求安装 Node.js。根据文档,可以用下面的命令安装 Node.js。
# conda
conda install -c conda-forge nodejs# pip
pip install nodejs
但是,在尝试安装扩展时,我仍然得到了“您需要安装 Node.js”的消息。我通过从它的网站下载“推荐给大多数用户”的 Node.js 并直接安装它来解决这个问题。
一旦有了 Node.js,就可以安装扩展了。在 Jupyter Lab 中有两种安装扩展的方法。
选项 1:通过扩展管理器安装扩展
您可以使用扩展管理器轻松安装扩展。只要按照这些步骤。
- 单击位于左侧边栏的扩展管理器图标。
- 点击“启用”按钮。
- 搜索任何你想要的库,然后安装它。
作者图片
选项 2:通过终端安装扩展
要安装扩展,请在命令提示符或终端中运行以下代码
jupyter labextension install name-of-extension
除了编写name-of-extension
,您还可以编写包含扩展名的本地目录、gzipped tarball 或 gzipped tarball 的 URL。如果你想指定一个特定的版本,比如写name-of-extension@version
。
jupyter labextension install name-of-extension@1.2.3
注意:安装任何扩展后,搜索框下方会显示一条消息“需要一个包含最新变更的版本”。确保你每次安装新的扩展时点击“重建”按钮,然后等待一个新的消息弹出,点击“保存并重新加载”
现在是时候看看我相信可能会诱惑你转投 Jupyter 实验室的扩展了!
JupyterLab 3.0+上默认可用的扩展
对于 JupyterLab 3.0 或更高版本,默认情况下有一些扩展可用,如目录。此外,正如你在下面的 gif 中看到的,它可以并排拖动每个选项卡,调整它们的大小,在笔记本之间复制单元格,拖放单元格,隐藏代码,以及更改主题,而无需安装任何扩展!
作者图片
扩展 1: JupyterLab 电子表格
默认情况下,您可以打开多个。Jupyter 实验室的 csv 文件;然而,如果你试图打开一个. xlsx 文件,你会得到一个错误。这时你需要安装一个名为jupyterlab-spreadsheet
的第三方扩展
要安装它,只需在搜索框上写下jupyterlab-spreadsheet
或运行命令jupyter labextension install jupyterlab-spreadsheet
。Jupyter 实验室的电子表格是这样的。
作者图片
扩展 2:带有 Plotly 的交互式图表和带有图表编辑器的简单编辑
Plotly 是一个制作交互式图形的图形库。它也可以在 Jupyter 笔记本中使用,但使用jupyterlab-chart-editor
您甚至可以通过用户友好的点击界面编辑 Plotly 图表。
首先,确保您已经安装了 Plotly 库(pip install plotly)
并且 JupyterLab 也安装了ipywidgets
包。
#conda
conda install jupyterlab "ipywidgets>=7.5"# pip
pip install jupyterlab "ipywidgets>=7.5"
然后打开一个终端并运行jupyter labextension install jupyterlab-plotly
来安装 Plotly 扩展。在这之后,你应该能够绘制如下所示的交互式图形(在这里使用代码来尝试你的第一个图形)
作者图片
现在你可以很容易地用 JupyterLab-chart-editor 编辑这些图表。打开终端,运行jupyter labextension install jupyterlab-chart-editor
安装图表编辑器。
要查看它的运行情况,您必须将自己绘制的图形保存到 JSON 中
pio.write_json(fig, 'example.plotly')
在这个例子中,我创建了一个名为‘example.plotly’
的文件。要打开它,右击文件菜单中的‘example.plotly’
,用“Plotly 编辑器”打开。像这样的窗户应该打开。
作者图片
您可以在这里进行一些更改,然后使用“文件”菜单再次保存该文件,并将其导入到原始笔记本中。
fig_styled = pio.read_json('example.plotly')
扩展 3:用 JupyterLab-DrawIO 绘图
Draw.io 是一款免费的在线图表软件,用于制作流程图、过程图等。有了jupyterlab-drawio
第三方应用,你可以拥有 Jupyter 实验室的所有功能。
要安装它,只需搜索jupyterlab-drawio
或运行命令jupyter labextension install jupyterlab-drawio
。然后,一个新的“图表”图标应该出现在启动器选项卡中。
作者图片
点击它打开一个新的。dio 文件。现在你可以画任何你想画的东西了!
作者图片
扩展 4:使用 Kite 自动完成到下一个级别
Kite 将自动补全提升到了一个新的高度,它的快速补全能够感知代码的上下文。虽然 Jupyter Notebook 提供了自动完成功能,但它包含一些错误,使得编写代码不如在您最喜欢的文本编辑器或 IDE 中那样流畅。
幸运的是,有了 Kite,你将得到更长的多线完井,而你通常得不到。最重要的是,只需鼠标悬停就可以查看 Python 文档,还可以找到有用的示例和操作方法。
作者图片
要安装它,请确保您具有以下要求:
- JupyterLab >=2.2.0
- 风筝发动机
- 带 pip 的 Python 3.6+版本
要安装风筝引擎,进入他们的 Github 页面,向下滚动直到安装部分。为你的操作系统下载安装程序,然后像安装任何程序一样安装它。如果安装成功,您应该在已安装的扩展中看到 Kite。现在写一些代码来看看 Kite 的自动完成功能。
作者图片
要检查所有的文本编辑器/IDE 兼容打开风筝,然后去设置,并点击插件。
扩展 5:调试器
大多数 IDE 支持和 Jupyter 缺乏的一个有用特性是调试器。Jupyter 3.0 +默认自带;但是,如果 Jupyter Lab 上没有,请按照下面的步骤进行安装。
首先,搜索jupyterlab/debugger
或运行命令jupyter labextension install jupyterlab/debugger
安装调试器。然后,在后端,需要一个实现 Jupyter 调试协议的内核。目前,唯一实现这个协议的内核是 xeus-python,这是 python 编程语言的一个新的 Jupyter 内核。要安装 xeus-python ,在终端上运行以下命令。
# conda
conda install xeus-python -c conda-forge#pip
pip install xeus-python
请记住,pip 选项仍处于试验阶段*。*一旦 xeus-python 和调试器扩展安装完毕,打开一个新的 xpython ,点击右边的 bug 图标展开调试器。
图片来自 Jupyter 博客
就是这样!其他很酷的扩展像Google Drive, Github ,和 语言包 也是可用的。使用新的扩展功能,让您的生活更轻松!
与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)
更漂亮的代码的 5 个惊人的重构方法
原文:https://towardsdatascience.com/5-fabulous-refactoring-methods-for-prettier-code-e3bc3447c0b2?source=collection_archive---------22-----------------------
遵循这 5 个重构指导方针和技巧来改进你的代码!
(src =https://pixabay.com/images/id-3822402/
介绍
№1:复杂条件
大型、复杂的条件块在计算机软件和编程中很常见,但也很糟糕。条件并不意味着包含一半的代码,嵌套条件是一种确保代码不可读的可靠方法。有很多方法可以使用过于复杂的条件,比如装饰符和简单地分配被条件修改的变量。将整个代码放入条件块中是一种可怕的做法,它肯定会让任何人像你写代码一样强烈地阅读你的代码。
№2:编码你的评论!
让资深程序员非常沮丧的事情是在代码中过度注释。注释对程序员来说是一个非常有价值的工具,但是当它们被过度使用的时候,它真的会损坏旁边的代码,因为它会令人惊讶地变得不清晰。过度注释也是对代码块的质量和可读性的一个很好的暗示。如果你的代码需要一堆注释来告诉你在代码中做了什么,你可能只需要修改代码而不是留下更多的注释!
虽然我肯定不会说我讨厌注释,但我认为编写可以被解释的代码比编写解释给定算法各个方面的注释要容易得多,也有意义得多。这就是为什么我总是说你应该“编码你的评论”这意味着使用在上下文中有意义的变量别名更有意义,并使您的代码具有易于遵循的逻辑模式。我认为仍然有许多可以接受的情况来利用注释,但是注释不应该在那里解释代码正在做什么,而是为什么代码正在做那件事。
№3:少用参数!
坏代码似乎伴随的另一个问题是大量的参数。虽然像命名和提取这样的方法可能会稍微降低函数的速度,但是拥有大量的参数会大大降低函数的速度。此外,除了让你的函数看起来过于草率之外,它们还会让你的函数难以调用。对于很多位置论点来说尤其如此。虽然我认为类型可以有任意多的输入数据,特别是在初始化的时候,但是函数完全是另一回事。
在大多数情况下,检查八个参数可能不是一个好主意。当然,这条规则总有例外,但是有很多简单的方法可以避免过多的争论。过量的输入通常等同于过量的输出。如果你不能在一行中调用你的函数,那么你可能在一次调用中有不止一个函数。
№4:命名和提取
有一个很好的方法可以让你很容易地改进你的代码,那就是把它看成是它实际情况的一小部分。为此,我喜欢用命名法。命名方法允许我们一次分析一小部分代码,以便一起重构独立的逻辑步骤。采取更小的步骤来重构我们的代码可以让我们更自信地做出改变,所以关注重构的渐进步骤而不是巨大的飞跃是非常有意义的。
提取在某种程度上是这种技术的扩展,通过提取,我们从函数中取出部分命名代码块,并用一种新的方法包围它们。这可以起到清理函数的作用,因为提取的代码只剩下对新方法的引用。这样做的另一个很酷的事情是使代码对其他方法可用,所以对于可能在整个包或模块中循环使用的代码,它甚至更有用。我写了一整篇关于这两种技术以及如何结合使用它们的深入文章,我认为这当然值得一读。如果你想成为一名更好的程序员,你可以在这里查看:
[## 更多的方法意味着更好的代码
towardsdatascience.com](/more-methods-means-better-code-1d3b237f6cf2)
№5:缩短迭代
迭代是常规编程中非常常见的任务,但是肯定有错误的方法来进行迭代。有很多方法可以编写循环,也有很多方法可以让你的循环看起来非常糟糕。一个好的实践是只在绝对需要迭代的时候使用迭代。标准库函数通常会利用更有效的方法将某些操作应用于可迭代对象,应该尽可能地利用这些方法。
尽管您可以使用各种各样的函数来规避迭代,或者至少从您的函数中提取迭代(有关这种技术的更多信息,请参考 4),但在某些情况下,您肯定无法避免编写循环。也就是说,对于更简单的操作,大多数高级语言已经认识到这一点,并有足够的解决方案以更简单的方式进行循环。例如,Python 和 Julia 都有一行 For 循环,可以这样实现:
[x = 5 for x in array]
此外,这两种语言都有标准的库工具,如 itertools.py。如果您想了解更多关于 itertools for Python 以及如何使用它的信息,我写了一整篇文章,您可以在这里查看:
标题里也有“wicked”,挺激进的。
结论
编程是相当复杂的,当在软件上工作时,很容易犯一些基本的错误,使你的代码既难看又慢。幸运的是,有一些技术可以帮助您减少函数的大小和代码的卷积。使用这五个技巧,浏览你的代码世界肯定会容易得多。这个列表中最重要的建议可能是学习提取和命名的技术。作为一个有经验的程序员,这些技术仍然随时会派上用场。信不信由你,即使是世界上最好的程序员仍然会回去剖析他们的代码,以便改进它,而这种技术恰恰在这方面非常有效。非常感谢您阅读我的文章,我希望将这些技术应用到您的软件中能够改善您的结果!感谢您的阅读!
选择排序算法之前要考虑的 5 个因素
原文:https://towardsdatascience.com/5-factors-to-consider-before-choosing-a-sorting-algorithm-5b079db7912c?source=collection_archive---------11-----------------------
知道什么样的排序算法适合你的问题空间
由阿·巴达诺维奇在上拍摄的照片
由于新技术的发展和不断产生的大量数据,对更快、更有效的排序算法的需求一直存在。如果你查找排序算法,你会惊讶于数量庞大的算法,即使具有相同的空间和时间复杂度。然而,深入研究每种算法会发现,微小的实现差异会导致应用程序的巨大差异。在本文中,我将简要讨论在选择符合您需求的排序算法时要考虑的主要因素。
1.简单
在考虑大量数据的技术行业中,当涉及到性能和速度等因素时,实现的简单性通常没什么可说的。像冒泡排序、插入排序和选择排序这样的算法很容易理解和实现,但是考虑到算法的二次(N)*均和最坏情况时间复杂度,它们在计算机世界中不是很流行。然而,由于其简单性,它们被用于教育目的、小规模数据和现实生活场景。例如,一家服装店的员工将选择插入排序而不是合并排序,以根据 t 恤的尺寸来组织 t 恤。对于非常小的输入,插入等基本排序可能优于快速排序和合并排序,因为不需要实例化新的内存单元或进行递归调用。因此,基本排序(如插入排序)可能会在混合算法(如基数排序)中使用。
2.执行时间
运行时间是分类排序算法的主要因素。在编码面试中,当被问到你的算法的时间复杂度时,面试官通常是在寻找最坏情况下的时间复杂度。然而,在实践中,算法在所有数据集上的*均情况和性能是最需要考虑的。快速排序就是一个很好的例子,它是一种常见的排序算法,与一般情况下的 O(NlogN)时间复杂度相比,最坏情况下的时间复杂度为 O(N)。然而,最坏的情况是一种非常特殊和罕见的情况(每当支点总是最小或最大)。此外,实际运行时间可能会因其他因素而有很大变化,如递归调用的数量、对内存的访问以及所需的比较。例如,让我们看看堆排序和快速排序,两者拥有相同的*均时间复杂度,但在实践中,快速排序在大数据上表现得更好。另一种流行的快速排序算法是 Merge sort,它用于一般情况(Java 中的 arrays . sort()for objects)或特殊情况,如电子商务中,网站希望对从其他网站获取的结果进行排序。
在关键系统中有一些特定的使用案例,例如飞机和生命监控系统,它们需要有保证的响应时间。在这些情况下,堆排序是比快速排序更好的选择,因为它的最坏情况时间复杂度更低。
3.内存消耗
空间复杂度表示根据输入数据的大小使用了多少内存。一些基本算法,如插入或冒泡排序,不需要额外的内存,可以就地对数据进行排序。另一方面,更高效的算法如快速排序和合并排序分别需要 O(logN)和 O(N)的时间复杂度(意味着需要额外的空间来完成排序)。在输入数据巨大或可用内存有限的情况下,这可能会有问题。由于内存限制,嵌入式系统和 Linux 内核相当就地但足够有效的排序,如堆排序。当我们在讨论内存消耗时,我们的假设是算法可以将所有数据放入 RAM(内部排序)。但是,在诸如对文件系统和数据库中的数据进行排序的场景中,输入数据无法容纳在 RAM 中,我们需要其他排序算法,如外部合并排序,以通过使用外部存储对数据进行排序(外部排序)。
3.并行处理
在现实世界中,万亿字节的数据仍然需要以一种资源丰富的方式进行排序。由于巨大的成本,采购超强的机器是不可行的。相反,数据可以被分割并分配给更便宜的机器来独立排序,然后合并以创建最终的排序结果。包含分治法的算法,如快速排序、合并排序、映射排序和 Tera 排序,是用于并行处理的良好候选。
4.稳定性
只要具有相同排序关键字的两个对象以与它们在原始输入中相同的顺序出现在排序输出中,排序算法就被认为是稳定的。在对象的其他属性对我们很重要的应用中,这是必不可少的。假设您有一个学生信息列表,比如已经根据姓名排序的成绩。如果我们希望在年级相同的情况下,根据年级对列表进行排序,而不影响 name-sort 属性,我们需要寻找稳定的排序,如插入排序、合并排序等。请记住,尽管快速排序和堆排序这样的排序本质上是不稳定的,但是可以对它们进行修改以支持稳定性。
5.关于输入数据的假设
在许多情况下,拥有关于数据及其范围的额外信息可以让您为特定目的选择可靠的排序算法。考虑非基于比较的算法,如基数和计数排序,它们为数字排序提供了线性时间复杂度。有时,由于数据的特殊结构,应用常规排序算法是不可能的。一个众所周知的例子是使用拓扑排序根据它们的关系将图节点排序。
结论:知道问题空间
最后,没有最好或最差的排序算法。每种算法对于某些应用都是有用的。此外,同一算法可能会根据输入数据的大小改变其行为。选择排序解决方案的第一个方法是确定问题空间和您的需求。有时,单一算法不能满足要求,混合方法会产生更好的结果。一旦知道了问题空间,您就可以缩小潜在的足够好的算法的列表,并对输入数据执行实际的分析,以获得最终的解决方案。
Scikit 的 5 个特性选择方法-了解您应该知道的
原文:https://towardsdatascience.com/5-feature-selection-method-from-scikit-learn-you-should-know-ed4d116e4172?source=collection_archive---------2-----------------------
通过只选择最重要的功能来提高性能
粘土银行在 Unsplash 拍摄的照片
特征选择是一种减少变量的方法,通过使用某些标准来选择对我们的模型预测目标最有用的变量。
增加特征的数量将有助于模型具有良好的预测能力,但只是到某一点为止。这就是我们所说的维度诅咒,模型的性能会随着我们使用的特征数量的增加而提高。尽管如此,当特性数超过峰值时,性能会下降。这就是为什么我们只需要选择能够有效预测的特征。
特征选择类似于**降维技术,**的目的是减少特征的数量,但本质上它们是不同的。不同之处在于,要素选择会选择要保留的要素或从数据集中移除的要素,而降维会创建数据的投影,从而产生全新的输入要素。如果你想知道更多关于降维的知识,你可以看看我下面的其他文章。
</5-must-know-dimensionality-reduction-techniques-via-prince-e6ffb27e55d1>
特性选择有许多方法,但我只展示 Scikit-Learn 中的 5 个特性选择。我只限制 scikit 中的一个工具——learn,因为它最简单也最有用。让我们开始吧。
1.方差阈值特征选择
方差较高的要素意味着该要素中的值会变化或基数较高。另一方面,较低的方差意味着要素中的值相似,而零方差意味着要素具有相同的值。
直觉上,你希望有一个变化的特征,因为我们不希望我们的预测模型有偏差。这就是为什么我们可以根据之前选择的方差来选择特性。
方差阈值是一种简单的方法,可以根据每个特征中的预期方差来消除特征。虽然,方差阈值法也有一些缺点。方差阈值特征选择仅看到输入特征(X ),而不考虑因变量(y)的任何信息。它只对消除非监督建模的特征有用,而不是监督建模。
让我们用一个示例数据集来尝试一下。
import pandas as pd
import seaborn as sns
mpg = sns.load_dataset('mpg').select_dtypes('number')
mpg.head()
作者创建的图像
对于这个例子,为了简单起见,我只使用数字特征。在使用方差阈值特征选择之前,我们需要转换所有这些数值特征,因为方差受数值范围的影响。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
mpg = pd.DataFrame(scaler.fit_transform(mpg), columns = mpg.columns)
mpg.head()
作者创建的图像
在所有要素都处于相同比例的情况下,让我们尝试使用方差阈值方法仅选择我们想要的要素。假设我把方差限制在一。
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold(1)
selector.fit(mpg)
mpg.columns[selector.get_support()]
作者创建的图像
似乎只有权重特征是基于我们设置的方差阈值来选择的。
正如我之前所说,方差阈值只有在我们考虑无监督学习的特征选择时才有用。如果我们希望特征选择用于监督学习的目的呢?这就是我们接下来要讨论的。毕竟,从 Scikit-Learn 中选择的大多数特性对于监督学习都是有用的。
2.用 SelectKBest 进行单变量特征选择
单变量特征选择是一种基于单变量统计检验的特征选择方法,例如:chi2、Pearson-correlation 等等。
使用 SelectKBest 的前提是将单变量统计测试与根据 X 和 y 之间的统计结果选择 K 个特征相结合
让我们用之前的一个示例数据来使用它。
mpg = sns.load_dataset('mpg')
mpg = mpg.select_dtypes('number').dropna()#Divide the features into Independent and Dependent Variable
X = mpg.drop('mpg' , axis =1)
y = mpg['mpg']
因为单变量特征选择方法旨在用于监督学习,所以我们将特征分成自变量和因变量。接下来,我们将使用基于互信息回归的 SelectKBest 来选择特性。假设我只想要最上面的两个特性。
from sklearn.feature_selection import SelectKBest, mutual_info_regression#Select top 2 features based on mutual info regression
selector = SelectKBest(mutual_info_regression, k =2)
selector.fit(X, y)
X.columns[selector.get_support()]
作者创建的图像
基于互信息回归,我们只选择“位移”和“重量”特征,像这些是最重要的特征。
3.递归特征消除(RFE)
递归特征消除或 RFE 是一种特征选择方法**,利用机器学习模型通过在递归训练**后消除最不重要的特征来选择特征。
根据 Scikit-Learn 的说法,RFE 是一种通过递归考虑越来越小的特征集来选择特征的方法。首先,在初始特征集上训练估计器,每个特征的重要性通过一个coef_
属性或通过一个feature_importances_
属性获得。然后,从当前特征集中删除最不重要的特征。该过程在删减集上递归重复,直到最终达到要选择的特征的期望数量。
TL;RFE 博士基于机器学习模型选择了前 k 个特征,这些机器学习模型具有来自其模型(几乎任何模型)的coef_
属性或feature_importances_
属性。RFE 会删除最不重要的特征,然后重新训练模型,直到它只选择你想要的 K 个特征。
这个方法只在模型有coef_
或features_importances_
属性时有效,如果有模型有这些属性,你可以在 Scikit-Learn 上应用 RFE。
让我们用一个数据集的例子。在这个示例中,我想使用泰坦尼克号数据集来解决分类问题,我想预测谁会幸存。
#Load the dataset and only selecting the numerical features for example purposes
titanic = sns.load_dataset('titanic')[['survived', 'pclass', 'age', 'parch', 'sibsp', 'fare']].dropna()
X = titanic.drop('survived', axis = 1)
y = titanic['survived']
我想看看哪些特征最能帮助我预测使用 RFE 谁能在泰坦尼克号事件中幸存。让我们使用逻辑回归模型来获得最佳特征。
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression# #Selecting the Best important features according to Logistic Regressionrfe_selector = RFE(estimator=LogisticRegression(),n_features_to_select = 2, step = 1)
rfe_selector.fit(X, y)
X.columns[rfe_selector.get_support()]
作者创建的图像
默认情况下,为 RFE 选择的要素数是所有要素的中值,步长(每次迭代消除的要素数)为 1。您可以根据您的知识或您使用的指标来更改它。
4.通过 SelectFromModel 进行功能选择
像 RFE 一样,Scikit-Learn 的 SelectFromModel 基于机器学习模型估计来选择特征。不同之处在于 SelectFromModel 特征选择是基于重要性属性(通常是coef_
或feature_importances_
,但也可以是任何可调用的)阈值。默认情况下,阈值是*均值。
让我们用一个数据集例子来更好地理解这个概念。我会用我们之前的泰坦尼克号数据。
from sklearn.feature_selection import SelectFromModel# #Selecting the Best important features according to Logistic Regression using SelectFromModelsfm_selector = SelectFromModel(estimator=LogisticRegression())
sfm_selector.fit(X, y)
X.columns[sfm_selector.get_support()]
作者创建的图像
使用 SelectFromModel,我们发现只有一个特性通过了阈值:“pclass”特性。
像 RFE 一样,你可以使用任何机器学习模型来选择特征,只要它可以用来估计属性的重要性。您可以用随机森林模型或 XGBoost 来尝试一下。
5.特征选择顺序特征选择
在 sci kit-Learn 0.24 版中新增的顺序特征选择(SFS)是一种贪婪算法,通过基于交叉验证分数估计器向前或向后查找最佳特征。
根据 Scikit-Learn 的说法, SFS-Forward 通过从零个特征开始进行特征选择,并找到一个特征,当机器学习模型在这个单一特征上训练时,该特征使交叉验证分数最大化。一旦选择了第一个特征,就通过向所选特征添加新特征来重复该过程。当我们发现达到期望的特征数量时,该过程停止。
SFS-Backward 遵循相同的思路,但工作方向相反:它从所有的特征开始,贪婪地移除所有的特征,直到达到所需的特征数量。
SFS 不同于 RFE 和 SelectFromModel,因为机器学习模型不需要coef_
或feature_importances_
属性。但是,由于它通过多次拟合模型来评估结果,因此速度相当慢。
我们用一个例子来试试。我想试试 SFS-Backward 做个例子。
from sklearn.feature_selection import SequentialFeatureSelector#Selecting the Best important features according to Logistic Regressionsfs_selector = SequentialFeatureSelector(estimator=LogisticRegression(), n_features_to_select = 3, cv =10, direction ='backward')
sfs_selector.fit(X, y)
X.columns[sfs_selector.get_support()]
作者创建的图像
使用 SFS-Backward 进行三个特征选择和十个交叉验证,我们最终得到“pclass”、“age”和“parch”特征。
您可以尝试这种要素选择,并查看模型性能如何,但请记住,随着要素和数据数量的增加,您的选择时间也会增加。
结论
特征选择是机器学习模型的一个重要方面,因为我们不希望有许多特征完全不影响我们的预测模型。
在本文中,我向您展示了您可以使用的 5 种 Scikit-Learn 特性选择方法,它们是:
- 方差阈值特征选择
- 使用 SelectKBest 的单变量选择
- 递归特征消除或 RFE
- SelectFromModel
- 顺序特征选择或 SFS
希望有帮助!
在我的 社交媒体 上访问我。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
5 个提高我工作效率的免费工具
原文:https://towardsdatascience.com/5-free-tools-that-increase-my-productivity-c0fafbbbdd42?source=collection_archive---------11-----------------------
卡尔·海尔达尔在 Unsplash 上拍摄的照片
这不是一个好的 IDE,尽管它很有帮助!
在过去的几年里,我读了不少文章,听了一些播客,在这些播客中,人们(不一定来自数据科学领域)分享了他们最喜欢的提高工作效率的工具。我用其中的一部分做了实验,然而,大多数都没有点击,我在开始后不久就放弃了它们。但是过了一段时间,有几个卡住了,从那以后我几乎每天都在使用它们。
尽管一个好的 IDE 可以极大地提高生产力,但我不会在下面的列表中提到任何一个,因为有很多选择,每个人都可以有自己的偏好。对我来说,Jupyter Lab 是笔记本的首选工具(它有很多普通笔记本没有的非常方便的特性),而我使用 VS Code/PyCharm 编写脚本。
在这篇文章中,我想与你分享我的设置是什么,为什么我喜欢它。自然,这是一个非常主观的话题,我并不是说这是所有无限可能性中最好的一个。这就是为什么我真的很想在评论中听到关于你的经历的任何建议或评论!
来源
记笔记——熊
很长一段时间,我一直在 MacBook 上使用默认的 Notes 应用程序,然而,它缺少一些对我的日常使用非常有帮助的功能。就我个人而言,我使用 notes 应用程序的目的远远不止于 notes——我试图建立一个各种各样的知识库(不同的信息我想留着以后用,并按主题分类),我用它来做任务规划和待办事项列表(我知道有很多很棒的应用程序可以做这个,但我喜欢保持简单),起草文章,保存我想读的书的列表,等等。
那是我发现熊的时候,从那以后我一直在用它。简而言之,这是一个非常简单(但时尚)的文本编辑器。但在我看来,有几个特点非常突出,值得一提:
- 优雅而直观的设计。
- 允许存储相当多的编程语言的代码片段(包括高亮部分)。这就是为什么它是一个知识库的伟大工具!
- 在知识库的基础上,多级标签系统非常适合组织你的笔记。例如,假设您要撰写一篇中等文章的草稿,并将其与所有其他草稿存储在一起。然后你只需要把
#medium/drafts
放在便笺中,Bear 会处理剩下的事情。完成后,将它移动到发布目录中就像将那一行改为#medium/published
一样简单。老实说,起初我并不相信这种组织笔记的方式,但是过了一段时间后,我渐渐喜欢上了这种方式,它实际上非常直观和快捷! - 对图像和照片的内嵌支持—非常适合存储相关截图。
- 待办事项列表的交互式勾选框。
- 笔记以纯文本格式存储,也很容易导出为大多数常见的文件格式。
- 应用内聚焦模式隐藏了除空白笔记之外的几乎所有内容,因此您可以深入研究您的想法。
此外,您可以免费使用 Bear 的大部分功能。可能会让您考虑 premium 选项的一个功能是所有设备之间的同步。我本来打算订阅的,因为我花了相当多的时间在路上(通勤时间长),然而,在大流行时期,这种情况已经不复存在了。但是我以后一定会去试一试!
来源
内容管理—袖珍版
Pocket 是由 Mozilla 公司开发的浏览器扩展/应用程序,它允许你存储任何在线内容(文章、新闻、视频等)。)供以后查看。我经常使用它来存储我在旅途中找到的文章或视频,而那时没有时间观看。当您创建帐户时,您的所有内容将在所有设备上同步,因此您可以轻松地将文章存储在手机上,然后轻松地将其放在桌面上。
Pocket 还有其他一些优点。首先,您可以使用自定义标签,它允许您根据自己的设计将内容分类。另一个值得一提的功能是分散注意力,而且口袋里通常没有广告。如果你想从一个有很多令人分心的元素的网站上阅读一篇文章,Pocket 可以让你在一个漂亮干净的页面上阅读摘录。最后,如果你正在寻找灵感或者想要了解最新的新闻,你可以使用 discover 标签来查看推荐的内容(也可以根据你的喜好定制)。
还有一个具有其他奇特功能的高级模式,然而,对于我的用例来说,免费帐户已经足够好了。
来源
浏览器管理— OneTab
在研究某个主题或从事某个项目时,您可能会在浏览器中打开多个选项卡,有时会出现文本标题难以辨认的情况。当你想休息一下,打开更多不相关的标签时,情况会变得更糟…这就是 OneTab 的用处。这是一个免费的浏览器扩展,它可以让你将所有打开的标签转换成一个列表,然后存储在一个单独的标签中。您可以多次使用该功能,每个列表都带有时间戳。
例如,几周前,我参加了一个关于黑客方法的网络研讨会,并阅读了一些关于 SQL 注入的内容。我没有看完所有我找到的文章,所以只需点击一下,我就把所有的标签页转换成一个列表,如下图所示。
如你所见,用一个时钟恢复/删除所有存储的标签是很容易的。对我来说,OneTab 是一个很好的工具,可以让我暂时停止使用它,并为将来的会话捕捉浏览器的当前状态。此外,为了您的隐私,保存的网站只存储在本地。
照片由 Unsplash 上的模型图形拍摄
番茄工作法——番茄定时器
我不是一个死忠番茄工作法的粉丝,他总是在完成 4 组后才休息一段时间。在我目前的职位上,很难计划 2 小时不间断的工作,因为有计划好的与不同团队的会议,计划外的会议,等等…然而,我发现即使时间更短也很有用。专注于一项任务的一两次冲刺已经很有帮助了,对我来说,当我知道计时器在倒计时时,不屈服于任何分心会更容易。
大多数时候,我用的是定时器,我只是让它在一个标签上开着,然后等待 25 分钟结束的钟声。一般来说,任何计时器都可以工作,不管是你手机上的计时器还是厨房用具上的计时器。
来源
终极聚焦模式——自我控制
你有没有发现自己心不在焉地去了一个网站(可以是脸书,推特,其他社交媒体等。)然后“就一分钟”变成了 10 分钟甚至更久?如果答案是肯定的,自控力可以成为你新的最好的朋友!这是一款适用于 macOS 的免费应用,你可以创建一个你想避开的网站的屏蔽列表,然后指定你想屏蔽它们的时间。一旦做了,就没有怜悯和回头。你可以删除该应用程序或重启电脑,但屏蔽将保持不变。相当硬核,但非常有效。
也有一些替代应用程序可以用于焦点模式,其中一些也可以阻止应用程序。从我的快速研究来看,这是最严格的一个,老实说,我只需要屏蔽网站,所以它完全符合我的需求。
总结
这就是帮助我提高效率的 5 个工具的清单。前 4 个是我日常使用的,并深深融入了我的工作流程。我过去在这个角色中更频繁地使用自制力,但是随着时间的推移,我变得更加自制力了(这是一个坏的双关语),我不再需要那么频繁地使用它了。
写完这篇文章后的某个时候,我读完了尼尔·埃亚尔的难分难解的,惊喜地发现他建议的提高生产力的技巧中有一些重叠。例如,他提到使用 Pocket 来存储文章,以便进行不受干扰的阅读(或者可能在散步时听它们),或者使用自我控制作为我们想要避免的网站的最终拦截器。
你最喜欢的提高生产力的工具是什么?正如介绍中提到的,我很乐意在评论中读到你的建议和经验。你可以在推特上联系我。
觉得这篇文章有趣?成为一个媒介成员,通过无限制的阅读继续学习。如果你使用这个链接成为会员,你将支持我,不需要你额外付费。提前感谢,再见!
如果您喜欢这篇文章,您可能还会对以下内容感兴趣:
可以帮助您提高数据科学家技能的 5 个游戏
原文:https://towardsdatascience.com/5-games-that-can-help-you-improve-your-skills-as-a-data-scientist-7d2d3f2f5a98?source=collection_archive---------3-----------------------
提高你的技能,同时享受乐趣。
卡尔·劳在 Unsplash 上的照片
通常,当我们试图学习一项新技能或进入一个新领域时,我们会投入大量的时间、精力,有时甚至是金钱来学习和掌握这项技能或领域。我们阅读书籍,教程,博客,观看视频,参加课程,参加课程,建立项目,只是为了让自己准备好运用这些技能或在这个领域申请新的工作。
虽然这是学习新事物或提高现有技能的完美方式,但有时我们想知道是否有一种方法可以在做有趣的事情的同时提高我们的技能。我们想知道我们是否能在不实际阅读一本书或一篇技术文章或观看一段视频的情况下建立新的技能。事实是,生活中有许多活动,我们可以在不知不觉中既获得乐趣又提高一些技能。
其中一种方式就是游戏。我们有时都喜欢玩游戏,只是为了放松、减压和摆脱工作情绪。游戏也是一种逃离现实的好方法,让我们沉浸在一个比现实生活更神奇、更精彩的虚拟世界中。游戏还可以帮助我们发展许多领域的基本技能,包括数据科学,而实际上并没有意识到我们正在学习这些技能。
</5-online-data-science-courses-you-can-finish-in-1-day-5b60f353fa8e>
本文将讨论 5 种游戏或游戏类型,它们可以帮助您提高每个数据科学家必须发展的一些基本技能,如批判性思维、解决问题、编码、模式发现和数据分析。这些游戏玩起来很有趣,并且会帮助你在没有压力的情况下提高这些技能。
№1:《命令与征服》(C&C)
我们将以一个即时战略或 RTS 游戏开始游戏列表,命令&征服。这个游戏是最早的 RTS 游戏之一,包括一个完整的演员阵容来帮助你推进故事。这个游戏向玩家介绍了不同的场景和需要完成的不同任务。玩家需要制定一个行动计划来有效地完成这些任务和策略。玩这样的游戏可以帮助你提高批判性和结构化思维技能,这两者对于任何数据科学家获得成功的职业生涯都非常重要。
</10-newsletters-you-need-to-subscribe-to-as-a-data-scientist-d12c7f33fbab>
№2:数据游戏
也许在这个列表中与数据科学最直接相关的是这个游戏集,数据游戏。这些游戏帮助玩家更好地理解任何视频游戏的机制。例如,当你玩游戏时,通常游戏会收集很多关于你游戏模式的数据,但实际上没人能看到这些数据。这个游戏集合允许您查看这些数据,执行一些交互式分析,并进行一些预测,以了解现实生活中的数据分析可能涉及的内容。
№3:代码帝国
接下来,我们有代码帝国。《代码帝国》是一款结合了战略、战术和编码的太空游戏。虽然你不需要任何编码技能就可以玩这个游戏,但是如果你这样做了,它会给你带来很大的优势。这个游戏将帮助你提高机器学习和人工智能技能,因为它会要求你建立机器人和互动内容。你可以使用算法来开发这些机器人,并用它们来对付你的对手。你也可以通过这个游戏,以有趣、互动的方式学习构建机器人和编码。
</5-databases-that-you-can-use-for-free-841cf81834bf>
№4:模式矩阵
对于任何数据科学家来说,发展的最基本技能之一是模式发现。在任何数据科学项目的早期阶段,我们都需要观察数据,分析数据,并从中发现一些模式和趋势,因为这些模式可能会让我们获得重大发现。一个可以帮助你提高模式发现和分析技能的游戏是模式矩阵。
№5:发光游戏
最后但并非最不重要的是,一系列游戏将帮助你通过一系列有趣的互动游戏提高解决问题的技能,这些游戏是由 Lumosity Games 开发的。这个游戏集旨在扩展你的计划、空间推理和逻辑推理技能。
最后的想法
作为数据科学家,我们总是在学习,我们的学习之旅永远不会真正结束。我们越深入这个领域,我们需要知道的就越多。这是由于不同的原因,比如数据科学是一个广阔的领域,你不可能真正掌握它的所有分支,而且数据科学就像任何其他技术领域一样,每天都在进步和发展。
</5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204> [## 5 本 Python 书籍,让你的代码更上一层楼
towardsdatascience.com](/5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204)
正因为如此,有时作为技术领域的一部分可能会有压力和压力,这只是因为我们需要跟上的事情的数量以及我们需要学习的新工具、技能、编程语言和软件包。因此,有一段放松的时间对我们来说是至关重要的,在这段时间里,我们可以减轻压力,远离工作模式。
我是休息时间的倡导者,花些时间完全不去想工作,重新启动你的大脑,给你的能量充电。我也是一个有趣活动的忠实粉丝,我可以做这些活动来帮助我的职业生涯建立有价值的技能,而没有学习和提高技能时经常伴随的压力。
在这篇文章中,我们介绍了 5 个游戏,你可以在空闲时间或者无聊的时候尝试玩玩,帮助你提高解决问题、批判性思维、编码和数据分析的技能。我希望你发现这些游戏中的一个或多个对你的自我提升之旅既有趣又有价值。
提高协作数据科学项目的 5 个好习惯
原文:https://towardsdatascience.com/5-good-habits-to-improve-your-collaborative-data-science-project-3d78ae66d784?source=collection_archive---------24-----------------------
SKYLAKE 工作室在 Unsplash 拍摄的照片
做团队项目有时会有点混乱。尤其是当一个人的理解与团队中的其他人不一致时。因此,每个成员需要获得相同的理解和目标,以避免冲突和误解。
以下是每个小组成员可以培养的习惯或技能,以支持合作项目的成功。
单一责任和开闭原则
单一责任意味着,每个类只应该做一件事。每个类都应该有单独的职责的原因之一是因为一个类可以被组中的多个成员出于不同的原因而改变。如果一个类有许多职责,那么这个类将被修改得越频繁。这可能会导致模块不兼容,并且在代码合并时发生冲突的可能性也会更高。
其次,开闭原则意味着,我们应该使我们的类对扩展开放,对修改封闭。换句话说,如果我们想要添加功能,我们只需要添加新的代码行,而不干扰现有的代码。目标与前面的原则相同,即最小化编辑现有代码产生错误的风险。
这些原则是五个著名的面向对象编程原则中的两个,称为可靠原则:单一责任、开-闭、Liskov 替换、接口分离和依赖倒置。关于其他原则的更多细节,你可以自己在网上搜索。
更多文件,更多提交
在团队中工作与使用 Git 这样的版本控制系统密切相关。使工作变得最复杂的一件事是,由于不同团队成员的不同版本的变更,在某些文件中存在冲突。一个可能的解决方案是为每个不同的类(或彼此相关的函数)创建单独的文件。这样做的目的是尽量减少由多个程序员同时编辑的文件发生冲突的可能性。想象一下,如果有一个文件包含很多函数,所有程序员同时编辑同一个文件,当然会很复杂,冲突风险很大。
还有,不要懒到经常犯。这是程序员经常忘记的琐碎事情之一。通常,为了节省时间,我们会在做了大量更改后提交。其实一点一点去犯的习惯是一件很有用的事情。因为如果稍后发生错误,它将非常有助于调查错误发生处的更改。如果发生意外,我们想回到以前的版本会更容易。
保持清晰,不要藏在评论后面
有时我们可能会发现在代码中写注释是一件经常被争论的事情。在某些情况下,注释可以帮助其他程序员甚至是编写代码的人容易地理解代码在做什么。另一方面,评论的存在有时会有点问题,尤其是对于协作项目。
程序员在修改代码时,通常不会注意注释。或者当审查或修改其他人的代码时,程序员有时会忘记调整关于现有修改的代码解释的注释。当有一天另一个程序员阅读代码时,这可能会导致误解,因为注释和代码内容之间存在不对称。
此外,我们中的许多人都有这样的思维模式,即无论如何,最重要的是代码必须首先成功运行。而当代码实际运行的时候,我们忘记或者懒得整理或者把它变成清晰的代码。我们经常选择注释掉代码的某些部分,而不是删除它们,因为害怕它们在将来会被再次使用。因此,这可能会在将来引起问题。“这个代码还在用吗?”,“这段代码什么时候应该取消注释?”,等等。
我想说的是,为什么我们不一开始就试着写清楚人类可读的代码,而不是因为害怕其他人不理解我们的代码而添加注释。
知识共享
当然,在项目组中,每个成员都有不同的任务。在某些情况下,通常只有一个人或几个人了解整个系统。如果这个人突然离开一段时间,甚至不得不离开项目,问题就会出现。在技术术语中,这可以被称为单点故障,其中有一个组件如果损坏或丢失,将会中断或停止整个系统的工作。
因此,除了自己的任务之外一无所知的其他成员应该尝试更多地了解他们的项目。当然,这将需要更长的时间,并使项目落后于计划。
因此,成员之间分享知识是必要的。团队项目中常用的知识共享形式是代码评审和结对编程。这两者都是为了让所有团队成员从总体上理解他们的代码、其他团队成员的代码以及他们之间的关系。这样做的好处是,它减少了出错的空间。此外,如果一个程序员不可用,那么另一个程序员可以做备份。
单元测试
每一个程序员都应该有这样的心态:每一段代码在测试之前都不能被认为是正确的。尤其是当代码将与其他代码合并时。测试对于减少冲突和错误的风险非常重要。此外,测试还会使调试变得更容易,因为我们可以通过查看哪些单元测试失败来轻松找出哪个部分出错了。
对于大多数程序员使用 Python 的机器学习项目,有许多框架可用于简单的单元测试,如 unittest 和 PyTest。
收场白
许多程序员经常忽略这个习惯,因为有时他们认为这个习惯只会使工作变得复杂和耗时。事实上,如果我们愿意投入一点时间来实现这个习惯,那么我们以后的工作就会变得容易得多。
如果你喜欢阅读这篇文章,并想从我和其他作家那里听到更多,请加入 Medium 和订阅我的时事通讯。或者直接点击下面的链接。谢谢大家!
https://medium.com/@arfinda/membership https://medium.com/subscribe/@arfinda
big query 2021 年新 UI 的 5 大特性(是的,它有标签!)
原文:https://towardsdatascience.com/5-great-features-in-bigquerys-new-ui-for-2021-yes-it-has-tabs-c4bac66d66b?source=collection_archive---------21-----------------------
我探索了 BigQuery 的新 UI,它刚刚在预览版中发布
授权给作者的图像
对于谷歌大查询的用户来说,本周是激动人心的一周;一个备受期待的 UI 更新在公开预览版中发布。
在过去一周愤怒地使用了新的用户界面后,我想分享一下我对新外观的 10 大赞。
读者应该注意到,新的用户界面是在预览,因此可能会进一步改善,然后正式发布(很可能)测试版。
所以,不分先后,我们开始吧。
#1 新布局、新面板
所以提醒一下,这里是以前的 UI 的样子;在这里,我对我制作的伦敦自行车租赁计划(可从 Google 获得的公共数据集)的副本运行了一个简单的查询。我们在左边有一个菜单窗格,在右边有一个水*分割的窗格,用来运行我们的 SQL 查询。
当您第一次启动新的 UI 时,它看起来是这样的。正如你所看到的,变化很大!
新导航菜单
我喜欢的第一件事是左边新的垂直面板——它的官方标签是“BigQuery navigation menu ”,包含以下选项:
SQL 工作区(新)
这将带您回到这个主屏幕,在这里您可以执行 SQL 查询。这是非常有用的,这意味着你可以很容易地返回到这个页面,如果你点击这个菜单中的其他服务之一。
数据传输(旧左侧面板中的传输)
和以前一样,这将带您进入 BigQuery 数据传输服务(DTS)。DTS 屏幕没有变化,除了取消了返回箭头(您现在单击上面的 SQL workspace 菜单项),它是相同的。
提示:新的 UI 提示您保存您的更改,如果您还没有这样做的话。当您从 DTS 面板返回时,旧的 UI 会记住您的 SQL 查询—在新的 UI 中,您的 SQL 会丢失。因此,请确保从查询历史选项中保存或检索您的查询。
单击新的左侧菜单窗格中的链接,提示保存您的工作
预定查询(旧左侧面板中的预定查询,无变化)
保留(旧左侧面板中的保留,无变化)
匕发动机(老款左侧面板匕发动机,无变化)
隐藏面板的新控件
我确实注意到这个新的垂直导航面板的一点是,它占用了相当多的屏幕空间,可能会使您的 SQL 面板有点拥挤,特别是在笔记本电脑上。
好消息是——有一些新的展开/折叠控件来隐藏这个菜单(我倾向于在这种模式下工作)。这些位于导航窗格的底部,如下所示:
我倾向于折叠这个菜单,并且认为大多数人也会这样做:
我倾向于隐藏新的导航窗格
有一点有点奇怪,在浏览器窗格的底部没有类似的控件;如果你想隐藏它,你必须像以前一样手动调整大小。
#2 选项卡式 SQL 窗格在这里!
很高兴在新版本中看到这些——这是许多经验丰富的数据库开发人员将会习惯的。例如,MS SQLServer Management Server 支持选项卡式查询窗格,一些竞争对手的现代云数据仓库也支持,特别是雪花。
在新的用户界面中,有多种方法可以添加新标签:
- 点击撰写新查询按钮
- 从查询历史窗格中选择一个查询,点击在编辑器中打开查询。这很好,因为我曾经发现当只有一个窗格时,这会覆盖您的 SQL,这有点烦人。干得好谷歌!
- 从保存的查询窗格中,点击在编辑器中打开查询。同样,很高兴看到这没有覆盖您当前的 SQL 窗口。
- 在浏览器窗格中,点击一个表或视图名称,这将在一个新的选项卡中打开定义。这是一个相当大的变化,如果您回想一下当前的 UI,这会在 SQL 查询下面的面板中打开表定义(替换任何结果)。我个人不确定我是否喜欢最后这种新行为——如果你想快速浏览数据集中的几个表,这可能会很快导致大量标签被打开。我过去经常使用的另一个功能(现在看来已经没有了)是,您过去可以单击详细信息窗格中的列名,它会将该列添加到您的 SQL 窗口中。我想我需要习惯使用新的和改进的智能感知…
#3 新的智能感知改造!
一旦进入新的 SQL 窗格,首先要注意的一件事就是改进的 Intellisense。这现在真的很好,使编写 SQL 快了很多,特别是如果您不太熟悉表结构的话。
这里有几个例子。
查找数据集和表
所以,我想从我的数据集中选择 dw_pl_journeys 。我只需开始输入数据集的名称,就可以实时看到匹配的数据集(和数据库)。按 tab 键完成数据集:
BigQuery 还可以搜索表名,所以在上面的例子中,如果我输入:
select * fromfact _ journey我在我可以访问的数据集中看到所有与此匹配的表。
关键词(包括函数!)
BigQuery 现在支持所有关键字的自动完成——我发现这真的很有帮助,事实上,这是我最喜欢的变化之一。
例如,我现在只需输入选择日期 _ 就可以很容易地看到的日期函数
我喜欢这个新功能——如果你不确定你需要的日期功能,可以节省时间
提示:要像以前一样强制显示 intellisense,请使用 ctrl+space 热键
#4 新页脚导航菜单
引入了新的页脚菜单,如下所示。这包含作业历史、查询历史和**保存的查询。**这些已经从左侧导航菜单中移出。
#5 并排查看 SQL 结果的拆分窗格
最后,但绝不是最不重要的,新的 UI 能够并排显示选项卡。当您想要比较两个查询的结果时,这非常有用,比如说,您使用的是笔记本电脑,所以没有两台显示器。
假设我想并排查看这两个选项卡:
首先,选择右侧选项卡上的下拉菜单,并选择向右拆分选项卡:
这将 tab2 放在 tab 1 旁边,现在我可以运行并比较结果了——非常有用!
结论
在过去的几天里,我愤怒地使用了新的 UI,我认为与数据科学家和数据专业人员分享我的经验会有所帮助。
总之,我真的很喜欢这个版本中所做的事情,尽管它只是预览版。特别是,新的选项卡是一个非常受欢迎的新增功能,新的智能感知可以列出函数,节省了我交叉引用外部文档来记住函数名或要传递哪些参数的时间。
有几件事我不太确定——特别是出现在新选项卡中的表细节有点奇怪,在我看来,我更喜欢它在 SQL 窗格下面打开。
我很想听听你对新变化的看法,请随时发表评论,2021 年开始 SQL 争论!
后续步骤
1.了解更多关于 Ancoris 数据、分析& AI
统计测试的 5 大准则
原文:https://towardsdatascience.com/5-great-guidelines-for-statistical-testing-in-python-8ee9d8d85a41?source=collection_archive---------15-----------------------
使用统计测试时,我最喜欢遵循的一些规则。
(图片由作者提供)
介绍
统计测试是数据科学家经常需要完成的任务,比数据科学家可能做的许多其他工作更容易出错。也就是说,在大多数情况下,没有像机器学习模型那样的验证。大多数时候,我们的概率是对我们假设的验证,也没有回溯检查来查看我们的概率是否正确。如果是这样的话,那么我们怎么知道我们的研究是否有统计学意义呢?
有一些方法可以避免大多数数据科学家可能熟悉的统计测试中的许多常见陷阱,这可以使工作变得非常可信和真实。一项测试可能不准确、不正确,甚至可能产生误导有几个原因——尽管在统计上是真实的。
№1:寻找坏数据
很容易,在验证和处理任何类型的分析时,最重要的事情就是坏数据。糟糕的数据几乎可以摧毁任何目标,无论是机器学习还是科学推理。在分析案例中,发现坏数据的可怕气味要困难得多,因为观察值通常是关于整个群体的,而不是几个样本。
坏数据很容易扭曲许多功能的有效性。这是因为当涉及到互联网上争论的数据时,往往会有不完整、缺失或不准确的观察结果。大多数数据不是通过观察小组收集的,有时甚至不是从临床上收集的。在处理这些数据的过程中,清理和排序不良数据以使其更适合统计数据是最重要的步骤之一。记住这一点,在尝试测试任何东西之前,确保您的数据准备妥当可能是个好主意!
№2:运用你的判断力
假设是假设的情况,可能是真的,也可能不是。不管假设检验表面上听起来如何,
仅仅因为一个假设被接受并不意味着它就是事实。
例如,我们可以想象一种奇怪的相关性,比如游泳池死亡和车祸死亡。根据我们的判断,我们可能会说,这两者不可能有关联。然而,可能有一些数据可能会产生这两者密切相关的错觉。在统计学中,巧合总是一个需要考虑的重要概念。你所做的研究和其他研究的不同之处在于,尽管你已经否定了一个假设,但你的研究可能看起来是现实而重要的。
在大多数情况下,我认为这其中很大一部分实际上是探索和理解您可能正在处理的数据。如果您对某个功能只有大概的了解,除了其名称之外可能一无所知,那么您可能希望了解更多关于数据的信息,以便在使用数据之前就可以对其中的值做出假设。更好地理解大量数据的最佳方式是直接去找数据分发者,他们通常可能有关于数据的更多信息,例如谁被观察了,他们何时被观察,以及每个特征可能意味着什么。此外,对于数据的属性,可能会有您以前从未见过的更有趣的见解。
我过去使用的另一个策略是,当数据在另一个领域或类似领域中被审查时,这个策略就派上用场了。过去,我一直在研究一些关于迷幻药在临床环境中缓解精神健康问题的效果的数据。虽然这是我感兴趣的事情,因为我发现精神健康是我自己生活中非常私人的事情,但我真的没有太多关于迷幻药世界的知识,甚至不知道数据表中有一半的药物存在!我所做的是补救这个问题,得到独特的特征和观察,并开始研究基本上每一个术语。我还发现了更多关于精神健康领域、临床试验的信息,并与世界上从事这方面工作的一些最重要的专业人士见了面。
深入研究您的数据,更多地将观察结果视为帐户和记录,可以将您的数据科学提升到一个新的水*。不仅如此,我认为它还能激发人们对一些他们可能从未考虑过的事物的新兴趣,这可能会导致更长期和有益的研究!生活在我们所生活的时代的最大好处是,很多这方面的知识也可以从你的键盘上找到!
№3:忽略异常值
如果您处理的连续值中有许多值超过*均值的两个标准偏差,那么您最好放弃它们,而不是尝试处理它们。在某些情况下,这可能意味着数据只是有很高的方差。这可能会有问题,因为这些异常值在统计上非常重要。
此外,您正在测试的掩码可能包含一个异常值,该异常值可能指示不存在的显著性。这是非常危险的,因为在相对较小的样本中,一个超出范围的值可能会完全改变结果。在连续机器学习的许多情况下,模型知道如何处理异常值,甚至是与正常值略有不同的值,并且可以比简单的统计测试更好地处理它们。这使得这条重要的准则更需要记住,因为作为机器学习工程师,这可能是我们直接迎合的概念。
№4:了解更多关于您正在进行的测试的信息
有许多数学分布可用于统计检验。在某些情况下,一些测试实际上可能比其他测试更有可能产生更准确的结果。也就是说,至少了解一点你正在使用的统计测试的类型是非常重要的。这是真的,因为它可以帮助您更好地理解您可能需要对前面的操作的数据做什么,并且使解释结果和理解为什么会出现这些结果变得容易得多。
可能最流行的统计检验类型是独立 T 检验。这个测试建立在 t 分布的基础上。对 t 分布的透彻理解对于理解其测试的目标肯定是非常重要的。虽然知道分布函数的公式可能不那么重要,但至少对它们是什么以及它们的用途有一个坚实的理解是很重要的。对于 T 分布,我们可以通过概率密度函数来观察 T 的回报,然后通过将该统计量与自由度一起推入正则化的下不完全 beta 函数,即累积分布函数,来获得 P 值。理解这些概念对理解统计学非常重要,理解这两个概念将使您处于正确的位置,以准确地测试一些数据!
№5:对于某些测试,删除缺失值
在许多情况下,为了保存观测值而替换缺失的数据可能弊大于利。在假设检验和分析领域尤其如此,因为数据和统计通常对样本的变化更加敏感。例如,您可能有一个 t 分布,其中一组新值具有统计显著性,但是,由于*均值和标准差是大多数连续分布的两个主要组成部分,因此完全有可能改变数据的这两个特征。
通常,每当缺失的观测值被连续数据填充时,这是用*均值来完成的。虽然这当然不会改变均值或标准差,但它会改变 T 检验的自由度,而不会提供任何观察结果。出于这个原因,根据对观察值的影响,以及您是否已经知道您希望测试什么特性,通过只使用可靠的观察值来删除丢失的值并纠正过程通常可能是一个更好的主意。
目标
我认为所有这些有趣的话题和指导方针都在酝酿之中,可能有必要指出假设检验的实际目标是什么,因为我认为它经常会被误解。此外,我认为曲解假设检验的目的也会导致更多的一厢情愿,并有可能使结果产生偏差。有成百上千种方法可以有意或无意地改变统计数据。我认为错误传达测试结果的价值是一件危险的事情,因为它不仅会导致无用的研究,还会导致不正确的论文、研究或愤怒的商人收拾你的桌子。
统计测试的目标永远不应该是证明一个假设。这种思维方式假设有一种方法可以改变结果,除非我们自己观察数据并用一个动态的独立变量进行实验,否则目标是证明假设或零假设是否正确。以证明你的研究为目标可以让你把关于你的假设的发现转化为证明你的假设是正确的,即使事实并非如此。我认为这是在进行科学测试时要记住的一件重要的事情,并且理解证明假设并不是一切在处理统计数据时肯定会派上用场。
结论
统计测试可能是一个非常清晰和乏味的训练。当数据中最微小的变化都可能产生完全错误的结果并导致无效的假设结论时,这一点尤其正确。这可能是一个很大的压力,然而,寻找你的数据并遵循一些观察技巧的基本规则可以完全缓解这个问题,并可以迅速使你的研究更有意义和有效。在这方面,最常被忽视的问题无疑是数据处理和数据争论。这通常是数据科学工作中最乏味的部分,因此很容易理解为什么有些人想要避免它。然而,这些步骤对于得出准确的科学结论是非常重要的,甚至更重要的是获得晋升。感谢您的阅读!
我从微软成功的数据科学家那里学到的 5 个习惯
原文:https://towardsdatascience.com/5-habits-i-learned-from-successful-data-scientists-at-microsoft-aef16a4cfb9b?source=collection_archive---------0-----------------------
如果应用,他们将永远改变你的职业生涯
马修·曼努埃尔在 Unsplash 上的照片
自从我在 2016 年开始我的数据科学生涯以来,我一直想不断学习和提高我对数据科学核心方面的知识。
发展和经验是一份好工作的基本素质而不仅仅是薪水。
我不再想找工作,开始寻找数据科学的经历。由于坚持不懈,我得到了微软的一份工作——我知道是正确的,巨大的。
微软数据科学团队为数据科学家(有经验的或业余的)组织了一次虚拟峰会和实习,以提高他们的工作水*。
因此,我在峰会上接触的数据科学先驱让我明白,在数据科学领域取得成功,归根结底是我们在职业和日常生活中灌输的简单而有效的习惯。
1。把学习和自我提升放在首位。
微软没有给我发电子邮件来参加他们的虚拟峰会,也没有给我发 VIP 邀请,因为直到今天我还在使用 Hotmail。
这里还有人使用 Hotmail 吗?
事实是,如果我没有渴望了解更多和扩展我的知识,我不会知道一个由微软组织的免费峰会正在进行中。
数据科学背后的技术是巨大的,尤其是在当今这个时代,大量的连接是自动化的。
对于希望从其他合格数据专业人员中脱颖而出的数据科学家来说,持续学习和改进至关重要。
如何应用:
众所周知,数据科学不是一个静态的领域。看看职位描述,找出大多数雇主在一个数据科学家身上寻找的技能,并与你的简历进行比较。
你缺少这些技能吗?找出你的弱点并努力改进。
大多数人每天朝九晚五地工作,远程学习被证明是灵活有效的。参与与数据科学和其他重要领域相关的在线课程、文档、视频、播客、研究论文和博客。
2。构建专业的数据科学网络。
虚拟会议有许多高素质的数据科学家,这并不奇怪,但我想知道他们是如何进入与微软合作的这个巨大阶段的,所以我做了一点研究。
我上了 LinkedIn,查看了他们每个人的资料,他们的一个共同点是,他们都在这个*台上有超过 5 千个联系。
数据科学是一场单人冒险的陈词滥调现在已经过时了。我知道,部署模型的自由,从创建美丽的动画到你的可视化,或者通过你的直觉预测分析的快乐。
所有这些听起来很神奇,但是很有可能你需要一些额外的大脑来使分析更快更有效。
团队合作非常重要尤其是在数据解决方案日新月异的今天,你需要与志同道合、在其他技术领域拥有丰富知识的专业人士联系。
除此之外,新的网络和联系让你更接*与实习、自由职业和有利可图的职业机会相关的新信息。
如何应用:
由于主要行业中数据科学家的激增,每年都为专业人员创造了大量与其他具有共同兴趣的专业人员建立联系和网络的机会。
下一次你去面试时,不管结果如何,确保你和面试官建立了职业联系——问问题、建议、资源,并表现出好奇心。
职业机会、集体解决问题的技能和职业认可是建立强大职业关系网的基本好处。
3。有效的数据科学家是好读者。
我知道你在想什么;数据科学是关于数字、统计和编码的,我应该读什么?
嗯,数据科学基础背后的概念和实现都是从简单的词语中获得的。
不仅仅是模型和编程语言的问题;最重要的是你要了解你职业的内部运作。
事实是,如果你依赖于从以前或现在的工作中积累的技巧和经验,你很可能会在职业上停滞不前。
“阅读研究论文将极大地帮助数据科学家跟踪他们所在行业的趋势和发展。”
——绍拉布 Jha。
如何应用:
有数百种高质量的研究论文、书籍、文章和杂志展示了宝贵的数据科学资源,可用于自学和扩展您在您所在领域的某些概念的知识。
在我获得数据科学证书之前,我从博客帖子中学到了大多数编程语言和分析技巧。
除了技术方面,阅读关于生产力、职业建议和个人发展的文章将重新定义你的积极心态和正确的工作态度。
4。积极参与数据科学社区。
去年早些时候,我有这个动力来分享我开始数据科学之旅以来的收获。由于大多数社交*台上流传着大量的诈骗和恶意软件,脸书群组和电报页面在我的道路上不起作用。一个特洛伊木马几乎偷走了我已经工作了 6 个多月的项目。
**提醒:**除非你知道来源,否则不要点击你在脸书群上看到的任何随机链接。
不管你的地位或经验如何,作为一名数据科学家,你应该愿意提供帮助。开放以解决特定的任务,寻找和发布数据集,并指导行业内年轻的专业人士。随着数据科学的高速发展,越来越多的个人跳入与数据相关的领域,打算多样化并扩展他们的技术智力。
然而,有必要帮助支持未来的工程师、分析师和科学家,以提高效率并最大限度地扩大对他人的影响。
如何应用:
成为先锋,撰写有价值的文章,在数据科学论坛上发表博文、研究论文和文章。如果你有演讲的诀窍,你可以开一个播客或 YouTube 频道,专门分享你的经验和简单数据挑战的简单解决方法。
5。你不能逃避它——培养优秀的编码技能。
Quora 上最有争议的数据科学问题:
- 数据科学家做代码吗?
- 一个数据科学家需要成为一个非常优秀快速的程序员吗?
- 数据分析师需要编码吗?不编码能做数据科学家吗?
从我的发现中,我意识到大多数数据科学家都在寻找逃避数据科学编码方面的方法,让我担心的是,许多人都在寻找通往成功的捷径。
当然,不是每个人都喜欢编码,但可悲的是他们不愿意学习。
一个数据科学家至少应该具备 Python、JavaScript 和 R 等编程语言的基础知识,因为大多数与数据相关的任务都是建立在坚实的编码伦理基础之上的。
如何应用:
有大量高质量的在线课程,涵盖了许多编程语言的基础和高级方面。做你的研究,找出你在行业中脱颖而出所需要的必要技能。
适用外卖
数据科学不仅仅是一种“单向职业”,在这种职业中,随机的自称为技术爱好者的人可以练习数据 101 技巧。
不仅仅是分析,要被称为数据科学家;专业人员必须具备数据工程、人工智能、可视化、数据挖掘和许多其他方面的丰富知识。在所有这些领域中,你认为是什么让你成为一名独特的数据科学家?
作为一名数据科学专业人员,培养有价值的习惯是保持良好关系、发挥最大潜力以及在团队成员之间建立有效沟通的好方法。
你每天做的小事造就了你,现在是时候采取措施创造你的成功了。
5 个用于网络安全的隐藏 Python 库
原文:https://towardsdatascience.com/5-hidden-python-libraries-for-cyber-security-e83928777a95?source=collection_archive---------13-----------------------
这些图书馆会让你吃惊的
来源:像素
Python 现在是最流行和发展最快的编程语言之一。它的效用已经在人工智能和商业分析领域得到了证明。构建网络安全解决方案是技术的另一个重要应用。
Python 有一些惊人的库,可以用于网络安全。好的一面是,这些图书馆中的大部分目前都被用于网络安全领域。他们使用 python 是因为它简单易学且用户友好。
在他的文章中,我将分享一些使用 python 创建网络安全解决方案的有用库。
1. Nmap
Nmap 是一个开源工具分析器,广泛用于网络安全领域。该库使您能够将 Nmap 与您的 Python 脚本相集成,允许您利用 Nmap 的功能来扫描主机,然后与 Python 脚本中的结果进行交互。
Nmap 是系统管理员的绝佳工具,因为它专门通过修改 Nmap 扫描结果来自动执行扫描操作。Nmap 是 pen 测试人员用来分析扫描结果并针对主机发起定制攻击的工具。
如何安装
pip install python-nmap
你可以在 Nmap 的官方网站这里了解更多。
2. Scapy
Scapy 是一个复杂的 Python 包,可以在渗透测试中用于扫描、探测、单元测试和跟踪路由。该计划的目的是嗅探,传输,分析和修改网络数据包。许多模块会忽略目标网络/主机没有响应的数据包。
另一方面,Scapy 通过生成一个额外的不匹配(未应答)数据包列表,向用户提供所有信息。除了探测数据包之外,Scapy 还可能向目标主机传输不正确的帧、注入 802.11 帧、解码 WEP 加密的 VOIP 数据包等等。
如何安装
pip install scapy
你可以在 Scapy 的官网这里了解更多关于 Scapy 的信息。
3.美汤
数据收集是渗透测试的关键部分。渗透测试人员有时可能需要从 HTML/XML 站点提取数据。在大型项目中,从一开始就编写一个工具,甚至手动完成这个过程可能需要几个小时或几天。
Beautiful Soup 是一个 Python 模块,可用于自动化数据抓取操作。例如,库可以从 HTML 和 XML 文件中读取数据并解析它们。
如何安装
pip install beautifulsoup4
让我们来看看使用 Python 来使用漂亮的 Soup 的一瞥代码片段。
**from** **bs4** **import** BeautifulSoupsoup = BeautifulSoup(html_doc, 'html.parser')for tag in soup.find_all('b')
print(tag.name)# b
你可以在美汤官网这里了解更多关于美汤的信息。
4.密码术
它包含高级配方和流行加密方法的简化网关,包括对称密码、消息摘要和密钥派生算法。底层的密码原语。这些通常是危险的,可能会被误用。
这一层被称为“危险材料”或“危险品”层,因为在这一层操作时存在潜在风险。这些可以在cryptography.hazmat
包中找到,它们的解释总是包括一个警告。
如何安装
pip install cryptography
你可以在它的官网这里了解更多关于密码学的知识。
5.亚拉
VirusTotal 的 Yara 是一个快速识别数据模式的工具。这就像一个增压版的 Ctrl+F。您可以提供字符串或正则表达式模式,以及是否应该满足一个条件或几个标准。
这个模块使得将 Yara 集成到你的脚本中变得简单。我们可以使用它从符合yara
标准的 API 请求中提取数据。
如何安装
pip install yara-python
让我们来看一看使用 Python 来使用 Yara 的代码片段。
print(matches)
>>[foo]
你可以在雅拉官网这里了解更多关于雅拉的信息。
结论
给定的软件包对您的网络安全非常有用,将帮助您保护您的系统并有效地执行网络安全措施。此外,python 强大的库使它成为程序员的首选语言。
这些 Python 库/模块可以帮助开发人员创建最复杂的网络安全工具,而不必为产品的每个方面编写单独的代码。
在你走之前……
如果你喜欢这篇文章,并且想继续关注更多关于 Python &数据科学的精彩文章——请点击这里https://pranjalai.medium.com/membership考虑成为一名中级会员。
请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。
还有,可以随时订阅我的免费简讯: Pranjal 的简讯 。
每个数据科学家都应该使用的 5 种超参数优化方法
原文:https://towardsdatascience.com/5-hyperparameter-optimization-methods-you-should-use-521e47d7feb0?source=collection_archive---------28-----------------------
入门
网格搜索,连续减半和贝叶斯网格搜索…
照片由马库斯·温克勒在 Unsplash 上拍摄
在每个数据科学项目中,搜索超参数空间以获得最佳性能指标是可能的,也是推荐的。寻找最佳超参数组合是你不想错过的一步,因为它可能会给你精心构思的模型带来它所需要的最终提升。
我们中的许多人默认使用 Scikit-learn 中实现的完善的 GridSearchCV。然而,事实是,根据具体情况,替代的优化方法可能更合适。在本文中,我们将讨论五个选项,并对每个选项进行深入的解释,以及如何在实践中使用它们的指南。
**Table Of Contents**
· [How to find my models’ hyperparameters](#20eb)
· [Grid Search](#ec67)
· [Successive Halving](#3163)
· [Bayesian Grid Search](#e190)
· [Visualizing hyperparameter optimization results](#82f5)
预热
在开始寻找我们的最佳模型之前,我们想先找到一个数据集和一个模型。
对于数据集,我们将使用一个名为 datasets
的包,它允许我们轻松下载 500 多个数据集:
我们选择使用亚马逊美国评论。目标是使用客户评论来预测其目标特征(归因的星级数)。
下面,我们将定义模型,并尝试优化其超参数:
如果您不熟悉管道,请不要犹豫,看看我们以前的文章!
如何找到我的模型的超参数
在我们进入优化部分之前,我们首先需要知道我们的模型的超参数是什么,对吗?为此,有两种简单的方法:
- 特定型号的 Scikit-learn 文档您可以简单地查找您的 Scikit-learn 型号的文档。您将看到超参数的完整列表,包括它们的名称和可能的值。
- 使用一行代码,您还可以使用
get_params
方法来查找给定估计器的所有参数的名称和当前值:
model.get_params()
既然我们知道如何找到我们的超参数,我们可以继续我们不同的优化选项😉
网格搜索
这是什么?
网格搜索是一种基于尝试有限数量的超参数值的每个可能组合的优化方法。换句话说,为了决定哪种值的组合能给出最佳结果,我们要考虑所有的可能性,并使用特定的性能指标来衡量每个结果模型的性能。在实践中,网格搜索通常与训练集上的交叉验证相结合。
说到网格搜索,Scikit-learn 给了我们两种选择:
穷举网格搜索( GridSearchCV
第一个版本是一个经典版本,它详尽地遍历了超参数值的所有可能组合。得到的模型被逐一评估,并挑选出表现最好的组合。
为了可视化你的网格搜索的结果并获得最佳的超参数,请参考文章结尾的段落。
随机网格搜索( RandomizedSearchCV )
网格搜索的第二种变体更具选择性。不是遍历超参数的每个可能的组合,而是在可能的估计量中进行选择。事实上,并不是所有的参数值都被尝试过。从作为自变量给出的某个统计分布中抽取选定的固定数量的参数组合。
这种方法提供了选择我们能够承受的计算成本的灵活性。这是通过自变量 n_iter
固定采样候选数或采样迭代数来实现的。
这里有几点需要提及:
- 列表被统一采样
- 如文档中所述:
如果所有参数都以列表,显示,则执行无替换采样。如果至少有一个参数作为分布给出,则使用替换采样。
- 建议对连续参数使用连续分布,以充分利用随机化。这方面的一个很好的例子是上面使用的均匀分布,用于对 TF-IDF 矢量器选择的最大文档频率进行采样。
- 使用 n_iter 控制结果和计算效率之间的权衡。增加 n_iter 总是会得到更好的结果,尤其是在涉及连续分布的情况下。
- 任何函数都可以作为分布传递,只要它实现了用于值采样的
rvs
方法(随机变量样本)。
连续减半
这是什么?
scikit-learn 提供的第二种超参数调整方法是连续减半。这种方法包括在越来越多的资源上迭代地选择性能最佳的候选者。
事实上,在第一次迭代中,在少量资源上测试了最大数量的参数组合。随着迭代次数的增加,只有表现最好的候选项被保留。基于它们在大量资源上的性能来比较它们。
💡**在实践中,资源可以是什么?**大多数时候,资源是训练集中的个样本。然而,可以选择另一个自定义数字参数,如随机森林算法中的树的数量,将其作为参数传递。
与第一种网格搜索类似,有两种变体:halvinggridsearccv和 HalvingRandomSearchCV 。
连续等分网格搜索(halvinggridsearccv)
scikit-learn 上的连续减半估计器仍处于试验阶段。因此,为了使用它们,您需要有最新版本的 sci kit-learn“0 . 24 . 0”并需要实验功能:
from sklearn.experimental import enable_halving_search_cv
一旦完成,代码与 GridSearchCV 的完全相似:
为了最大限度地利用连续减半并根据您的需求定制计算成本,有许多相关的论据可供参考:
- 资源:您可以利用这个参数来定制每次迭代增加的资源类型。例如,在上面的代码中,我们可以将其定义为随机森林中的树的数量:
甚至是 TFIDF 矢量化中的要素数量:
但是,请确保从 param_grid 字典中删除资源类型。
- 因子:此参数为减半参数。通过为此参数选择某个值,我们可以选择被选中的候选项的比例以及每次迭代所使用的资源数量:
n _ 资源 _ { I+1 } = n _ 资源 _i *因子
n _ 候选人 _ { I+1 } = n _ 候选人 _i /因子
- 积极消除:由于在每次迭代中使用的资源量都要乘以因子,因此最多只能有 i_max 次迭代
(n _ 资源 _ = n _ 资源 _ { 0 } * factor^)≤max _ n _ 资源
如果资源的数量不够多,那么在最后一次迭代中剩余的候选数量就不够少。在这种情况下,攻击性淘汰论是有意义的。事实上,如果设置为 True,第一次迭代会执行多次,直到候选项的数量足够少。
随机连续减半( HalvingRandomSearchCV
就像随机网格搜索一样,随机连续减半类似于常规连续减半,只有一个例外。在这种变型中,从参数空间中随机采样固定选择数量的候选者。这个数字作为一个名为 n_candidates 的参数给出。让我们回到我们的代码。如果我们希望应用随机连续减半,相应的代码将是:
贝叶斯网格搜索
我们将在本文中讨论的第三个也是最后一个方法是超参数贝叶斯优化。为了在 Python 中使用它,我们使用了一个名为 scikit-optimize 的库。该方法被称为BayesSearchCV,如文档中所述,它利用贝叶斯优化,其中被称为“代理”的预测模型被用于对搜索空间建模,并被用于尽快达到良好的参数值组合。
随机网格搜索和贝叶斯网格搜索有什么区别?
与随机网格搜索相比,该方法的优点是考虑了搜索空间的结构以优化搜索时间。这是通过在记忆中保留过去的评估,并使用该知识来采样最有可能给出更好结果的新候选人来实现的。
现在我们对这个方法有了一个清晰的整体概念,让我们继续具体的部分,编码部分。我们将使用一个名为 scikit-optimize 的库。
我应该提一下:
1-如果您使用 scikit-optimize 的最新版本才能正常工作,您可能需要将 scikit-learn 版本降级为“0.23.2”(我建议您在新环境中这样做):
pip install scikit-learn==0.23.2
2-此外,为了避免任何进一步的错误,请确保通过以下命令安装最新的开发版本:
pip install git+https://github.com/scikit-optimize/scikit-optimize.git
现在我们模型的实际代码应该是:
可视化超参数优化结果
为了获得所有候选人表现的完整报告,我们只需要对上面列出的所有方法使用属性 cv_results_ 即可。生成的字典可转换为数据框以提高可读性:
import pandas as pd
results = pd.DataFrame(grid_search.cv_results_)
要获得其他结果项,您只需要以下几行代码:
获胜的候选人:
best_model = grid_search.best_estimator_
超参数的最佳组合:
params = grid_search.best_params_
在测试集上尝试最佳候选项后的最佳得分:
score = grid_search.best_score
网格搜索报告
如果你希望在搜索过程中得到实时报告,scikit-learn 的开发人员会好心地发布一段现成的代码来做这件事。结果看起来像这样:
作者截图
最后的想法
当谈到超参数优化时,Python 提供了大量现成的工具供您选择。你可以选择适合你的方法,并根据你的需要进行实验。最佳模型性能和最佳搜索时间之间的权衡通常是对选择影响最大的因素。在任何情况下,重要的是不要忘记这一步,让您的模型有最好的机会表现良好。
你可以在这个 Github 库 中找到所有聚集在一个地方的 Python 脚本。如果您有任何问题,请不要犹豫,在回复部分留言,我们将非常乐意回答。
感谢您坚持到现在,注意安全,我们将在下一篇文章中再见!😊
更多文章阅读
**</4-scikit-learn-tools-every-data-scientist-should-use-4ee942958d9e>
参考
- sci kit-learn . org/stable/auto _ examples/model _ selection/plot _ grid _ search _ digits . html
- sci kit-learn . org/stable/modules/generated/sk learn . model _ selection。GridSearchCV.html
- scikit-learn.org/stable/modules/grid_search.html
- scikit-learn . org/stable/auto _ examples/model _ selection/plot _ successful _ halving _ heat map . html # sphx-glr-auto-examples-model-selection-plot-successful-halving-heat map-py
- scikit-learn . org/stable/modules/grid _ search . html # aggressive-elimination**
下一个 NLP 项目的 5 个想法
原文:https://towardsdatascience.com/5-ideas-for-your-next-nlp-project-c6bf5b86935c?source=collection_archive---------23-----------------------
自然语言处理笔记
产生一些想法
史丹利戴在 Unsplash 上的照片
自然语言处理(NLP)是人工智能(AI)的一个分支,涉及计算机和自然语言之间的交互。本质上,通过计算分析和表示自然语言,计算机能够理解自然语言,并以类似于人类的方式做出响应。
作为一个初学任何新技术的人,动手实践是学习过程中很重要的一部分。虽然我认为理论知识非常重要,但我不认为它在孤立的情况下是有效的,因为理论并不总是转化为现实世界的场景。采取一种实用的方法是目前为止最好的方式来测试你自己,同时获得在真实环境中工作的经验。
事不宜迟,下面是你下一个 NLP 项目的 5 个想法:
头号对话式人工智能
聊天机器人和语音助手属于对话式人工智能的范畴。对话式人工智能允许人工智能(AI)以类似人类的方式与自然语言进行交互。
聊天机器人在企业中有各种各样的使用案例。一些例子包括:
- 客户支持——在线聊天机器人在回答常见问题方面表现出色,因此它们正在取代客户旅程中的许多人工代理。
- 医疗保健— 英国的 Babylon Health 是一个很好的例子展示了对话式人工智能如何让医疗保健服务对患者来说更加实惠和方便。
- 人力资源流程 —随着新冠肺炎的封锁,许多人在家工作,但公司仍在招聘,这意味着员工培训和入职仍是必要的。这些过程可以通过对话式人工智能进行优化。
#2 自动完成和自动更正
“自动完成”和“自动更正”在很多情况下都对我有所帮助。我敢肯定,我们都在智能手机上输入了“omw”,它会自动变为“在我的路上!”或者快要拼错一个单词时,自动更正功能会帮你扭转局面。
谷歌的搜索引擎是自动完成和自动更正的一个很好的例子。当我们在搜索引擎机制中输入一些东西时,谷歌会搜索互联网并返回最相关的结果。
作者 Gif
这些技术帮助用户找到更准确的结果,令人疯狂的是,我们大多数人每天都在使用谷歌,因此我们希望一旦我们点击搜索框,这些功能就会出现。为了不断满足客户的期望,自动完成和自动更正都是 NLP 的有价值的应用程序,可以与许多企业集成,因此这是一个非常值得实施的项目。
#3 文本生成
从技术上讲,文本生成属于自然语言生成(NLG),它是自然语言处理(NLP)的一个子领域。维基百科将 NLG 描述为“一个将结构化数据转化为自然语言的软件过程。它可用于为组织生成长格式内容以自动化自定义报告,以及为 web 或移动应用程序生成自定义内容。”【来源 : 维基百科。
#4 命名实体识别
命名实体识别是信息提取的一个子任务,它试图定位非结构化文本中提到的命名实体并将其分类成预定义的类别,例如人名、组织、位置、医疗代码、时间表达式、数量、货币值、百分比等。【来源 : 维基百科。
命名实体识别(NER)在任何需要对大型文档进行高级概述的情况下都非常有价值。通过实施 NER,您可以轻松地收集正文的要点,并开始根据某些标准(如与其他文本的相关性或相似性)对文档进行分组。一些使用案例包括:
- 客户协助 —客户的请求将被分类到合适的标题中,并提取关键字来确定请求的优先级,以帮助加快响应时间。
- 招聘——我们可以使用 NER 来总结申请人的简历,并开始将他们分为合适的雇员和不合适的雇员,而不是让人类解析大量的简历。
#5 情感分析
在情感分析入门中,我指出“情感分析的目标是使用自然语言处理和机器学习对主观数据进行解释和分类。”。这类问题的许多例子都是使用客户反馈和 twitter 数据来执行的,但是您可以使用任何类型的文本来表达他们的观点或体验。
我在以前的博客中已经广泛地讨论了情感分析,我的第一个 NLP 项目是一个情感分析项目。查看下面的 Github 库。
****https://github.com/kurtispykes/twitter-sentiment-analysis
包裹
在这个时代,项目可能比简历更可行。如果你希望学习一项新技术或进入一个新领域,参与一个项目是取得成功的最佳途径。一定要从错误中吸取教训,当你遇到困难时,不要害怕寻求帮助。
感谢阅读!在 LinkedIn 和 Twitter 上与我联系,了解我在数据科学、人工智能和自由职业方面的最新动态。
相关文章
https://pub.towardsai.net/7-free-online-resources-for-nlp-lovers-26b1e0bba343 ****
5 个用于浏览在线出版物的交互式图表
原文:https://towardsdatascience.com/5-interactive-charts-for-exploring-online-publications-cf9a289d5d24?source=collection_archive---------40-----------------------
使用文字气泡、网络图和地图来发现大量文章中的内容
使用可搜索单词气泡图查找正在撰写的内容。(图片由作者提供)
要查看本文中包含的图表的实时版本,以及用于创建它们的代码,请在这里 查看我的 GitHub 项目资源库 。
在处理文本数据集时,掌握内容的“谁、什么和哪里”可能是一个挑战。对于大量的在线文章来说尤其如此。
文章呈现的非结构化文本使得从整体上检查集合变得困难。相反,机器学习和数据科学技术可以解析出关键信息——标题、日期、关键词、名称、位置——以创建更容易导航的结构化数据集。
在本文中,我将重点介绍五个用于可视化这些结构化数据集之一的交互式图表,目的是探索其中存在的趋势和关系。
数据集
ISW 数据集包含来自战争研究所发表的 1700 多篇文章的数据。ISW 的文章涵盖了来自世界各地的广泛的政治话题,并被情报专业人士用来了解最新的时事。
数据集的创建记录在另一篇文章中,其中描述了用于收集文章的网络搜集过程,以及用于丰富文章的自然语言处理技术。请参阅本文,了解该数据集存在哪些字段。
ISW 文章中的许多重要信息都与有新闻价值的事件中的人物、地点和日期有关。下面的图表旨在以一种简单易懂、直观的方式发现这些信息。
可搜索单词气泡
当探索一个大的文本数据集时,首要目标是找出哪些单词在其中使用得最频繁。了解这一点可以洞察内容的整体主题和任何报道模式。
可搜索单词气泡图将单词云的视觉效果与关键词搜索的结果结合在一起:
点击查看现场演示。(图片由作者提供)
它是如何工作的
- 单个单词显示为圆形节点,根据它们在文章集合中出现的频率来确定大小。
- 单词和次数显示在节点内。
- 只需在搜索栏中键入新单词,即可将其添加到图表中。
- 点击一个节点将显示其搜索结果,显示该词出现的每篇文章和单个句子。
图表最初由数据集中被识别为关键词的词填充,这些词是使用 NLP 技术为每篇 ISW 文章提取的。
仅通过查看上面的图表,就可以开始推断 ISW 数据集中的趋势——它集中于涉及中东的故事,俄国是一个主导话题,许多与冲突相关的术语被重复使用。
有了这些初步的见解,就有可能更深入地探究一个话题。点击“俄罗斯”节点将显示所有提到该词的文章,突出显示的句子给出了报道内容的即时背景。
很容易看出这种图表的好处。它为用户提供了两全其美的东西——关于数据集包含什么的初始线索,以及进一步搜索感兴趣的特定项目的能力。
共生矩阵
ISW 数据集包含从每篇文章中提取的人名。光是这些名字的列表就提供了关于收藏主题的信息,但更有趣的是它们之间的关系。
一个共现矩阵可视化了一篇文章中两个人被提及的频率:
看现场演示这里(图片由作者提供)
它是如何工作的
- 该矩阵沿 X 轴和 Y 轴排列有人名。
- 每个彩色单元格代表两个相应的人在同一篇 ISW 文章中被提及的次数,颜色越深的单元格代表的次数越多。
- 点击任何一个单元格都会在侧边菜单中显示两个人的名字和照片,以及他们出现的所有文章的列表。
- 行和列可以按字母顺序或总提及次数重新排序。
知道两个人在同一篇文章中被写了多少次有助于理解他们的关系。一起频繁提及可能表明他们通过主题联系在一起,或者经常涉及相同的新闻事件。
很容易跟踪任何一个人的专栏,以确定与他们相关的每个人。点击每个单元格并阅读链接的文章可以让用户更好地了解个人之间的关系。
感兴趣的人,那些和许多其他人有联系的人,在图表上以密集填充的列和行突出出来。例如,弗拉德米尔·普京和其他人一起被广泛地写了出来,他在图表上的单元格被填满了。
网络链路图
共现矩阵非常适合显示一对一的联系,但可能不是跟踪贯穿整个组的一串联系的最佳方法。
一个网络链接图将多人之间的联系可视化:
看现场演示这里(图片由作者提供)
它是如何工作的
- 每个人都被表示为一个包含他们照片的圆形节点
- 连接节点的线条表示这两个人一起出现在至少一篇 ISW 文章中
- 将鼠标悬停在节点上以突出显示其连接。单击并拖动以将节点固定到位。双击以取消固定。
一个所有人之间的所有联系同时显示出来的视图有它自己的好处。一旦找到感兴趣的人,就可以很快看到与他们有联系的每个人。将鼠标光标移动到这些人身上,就可以很容易地看到他们的次级联系。
锁定节点的位置允许用户开始在空间上组织网络。将关键节点拉向边缘,或者将相似的人群聚集在一起,可以帮助直观地解析信息。
世界地图
ISW 数据集还包括从每篇文章中提取的国家名称。大部分内容都与事件发生的地点有关,因此能够按位置搜索文章非常有用。
一张互动的世界地图让用户可以准确地看到哪些国家被写得最多:
看现场演示这里(图片由作者提供)
它是如何工作的
- 地图国家根据国家在数据集中被提及的次数进行颜色编码,颜色越深的国家被提及的次数越多。
- 将鼠标放在任何一个国家上,可以看到它的名字和被提及的次数,点击它可以显示链接和文章的详细信息。
这个图表简单但有效。在没有数据集的任何先验知识的情况下,很容易看出大多数报道集中在中东和俄罗斯。只需点击几下鼠标,就能找到与感兴趣的国家相关的文章。
入库时间线
知道“谁”被写是一回事,但是知道“什么时候”他们被写也能提供很多洞察力。
一条入库的时间线将人们被描写的年月形象化:
看现场演示这里(图片由作者提供)
它是如何工作的
- 图表的 Y 轴列出了人名。X 轴显示一个分格的时间线,其中每个单元格代表一年中的一个月。
- 单元格按计数着色,颜色越深代表该人当月被提及的文章越多。
- 点击任一单元格将在侧边菜单中显示所选人员的姓名和照片,以及他们出现的文章列表。
- 名字可以按字母顺序排列,也可以按数量排列。
使用从上述文章中提取的相同名称,以及它们出现的文章的出版日期,可以跟踪这些年来的报告趋势。
快速浏览一下图表,趋势就很明显了。例如,对约翰·克里的报道主要存在于 2016 年,当时他担任国务卿。谢尔盖·拉夫罗夫从 2017 年到 2019 年有两年的时间,那时他根本没有被写过。
对于任何给定的人,对他们的报告何时开始、何时停止以及存在的任何差距都是显而易见的。该图表对任何希望探索其数据集中的长期趋势的用户都是有益的。
拿走
以上图表都是视觉效果的例子,旨在使数据更容易获取和理解。它们有助于将太大而无法手动探索的数据集转换成更容易接*的小块。
使用这些图表在您自己的基于文本的数据集中发现信息。在这里 看看他们每个人的源代码 。
5 个有趣的 Jupyter 交互式可视化扩展
原文:https://towardsdatascience.com/5-interesting-jupyter-interactive-visualization-extensions-ab030c8d0eb9?source=collection_archive---------6-----------------------
Jupyter 环境中有趣的交互式数据可视化工具
作者图片
可视化是数据分析的重要组成部分。如果没有可视化,我们将很难从数据中总结信息。然而,有时我们希望有一个动态的可视化来简化我们的分析活动。
幸运的是,Jupyter Notebook 有许多可视化扩展,我们可以使用它们从您的笔记本中创建交互式可视化。这些扩展是什么,如何使用它们?让我们探索五个有趣的 Jupyter 交互式可视化扩展。
1.ipywidgets
Jupyter extensionsipywidgets是一个交互式 HTML Jupyter widgets 笔记本。该软件包允许您创建一个小部件,通过交互式 GUI(如滑块、复选框、文本字段等)来控制您的数据。如果我们想在 Jupyter Notebook 上手动创建一个基于 GUI 的可视化,这是非常有用的。
首先,我们需要安装扩展包。
pip install ipywidgets
使用 ipywidgets,我们可以定制 Jupyter 笔记本小部件。让我们探索一下可用的基本小部件。
from ipywidgets import interact#Basic ipywidgets interact would generate UI from the functiondef f(x):
return x
ipywidgets 扩展与基础交互,从函数生成 UI。生成的 UI 将取决于传递给我们的数据类型。让我们尝试传递整数数据。
interact(f, x=10)
作者图片
传递整数值将返回 slider UI。接下来,让我们使用布尔数据。
interact(f, x=True)
作者图片
布尔值将返回复选框。最后,让我们使用字符串值。
interact(f, x='hi')
所有的 UI 都很棒,但是如何将它应用到可视化中呢?我们需要创建我们的函数来返回所有的交互式可视化。让我们用 Seaborn 包把它和 ipywidgets 结合起来。
import seaborn as sns
import matplotlib.pyplot as pltmpg = sns.load_dataset('mpg')def f(x):
img = sns.countplot(mpg[mpg['mpg']<x]['origin'])
plt.title('Origin Countplot mpg = {}'.format(x))
return img
作者 GIF
当我们移动滑动条时,我们将执行函数,当我们用滑块 ipywidget 过滤它时,返回“原点”的计数图。如果你想了解更多关于 ipywidgets 的功能,你可以在这里阅读。
2.熊猫-侧写
Pandas-Profiling 是一个探索性的软件包,可以在我们的 Jupyter 笔记本上生成交互式 HTML 报告。熊猫概况的基本报告显示在下面的 GIF 中。
作者 GIF
正如我们从 GIF 中看到的,生成的报告是 Jupyter 笔记本中的一个交互式 HTML 报告。你如何生成这个?让我们用样本数据来尝试一下。
首先,我们需要安装 Pandas-Profiling 包。
#Installing via pip
pip install -U pandas-profiling[notebook]#Enable the widget extension in Jupyter
jupyter nbextension enable --py widgetsnbextension#or if you prefer via Conda
conda env create -n pandas-profiling
conda activate pandas-profiling
conda install -c conda-forge pandas-profiling#or if you prefer installing directly from the source
pip install [https://github.com/pandas-profiling/pandas-profiling/archive/master.zip](https://github.com/pandas-profiling/pandas-profiling/archive/master.zip)#in any case, if the code raise an error, it probably need permission from user. To do that, add --user in the end of the line.
安装完软件包后,我们就可以生成报告了。让我们使用之前的 mpg 样本数据。
#Importing the function
from pandas_profiling import ProfileReport#Generate the report. We would use the mpg dataset as sample, title parameter for naming our report, and explorative parameter set to True for Deeper exploration.profile = ProfileReport(mpg, title='MPG Pandas Profiling Report', explorative = True)profile
过了一段时间,报告就会出现,您就可以研究 HTML 了。
作者图片
报告选择如上图所示。您可以尝试所有选项来探索数据。如果你想更深入地挖掘这个包,你可以阅读下面我以前的文章。
3.ipympl
Jupyter-Matplotlib 或 ipympl 是一个 Jupyter 笔记本扩展,支持在 Jupyter 笔记本中进行交互式 Matplotlib 可视化探索。
如果我们需要使用 matplotlib 进行快速可视化,这种探索是简单而强大的。我们先试着安装包。
pip install ipympl
当你安装完这个包之后,你需要在你的 Jupyter 笔记本中使用下面这个神奇的命令来启用 ipympl 扩展:%matplotlib widget
。
让我们用示例数据尝试一下 matplotlib 扩展。
%matplotlib widgetimport matplotlib.pyplot as plt
import numpy as npfig = plt.figure()
plt.plot(np.sin(np.linspace(0, 20, 100)));
作者 GIF
正如您在上面的图像中看到的,我们的 matplotlib 可视化变成了一个交互式可视化,您可以在绘图中*移和缩放。
我们可以用数据集传递另一种 matplotlib 绘图。让我们用之前的 mpg 数据集来试试。
fig = plt.figure()
plt.scatter(mpg['mpg'], mpg['horsepower'])
作者 GIF
只要可视化基于 matplotlib 包,我们就可以在绘图中传递交互式小部件。这就是为什么它可以与另一种 matplotlib 可视化一起工作。
您可以使用 ipympl 实现类似于 ipywidgets 的其他小部件;不过,我觉得 ipywidgets 包已经涵盖了很多功能。如果您对 ipympl 小部件感兴趣,您可以探索一下示例。
4.itables
如果你想要一个交互式的熊猫数据框架表,你可能需要安装 itables 包扩展。该包允许您在数据框中进行简单的探索。
作者 GIF
如何启用这个扩展?让我们先安装软件包。
pip install itables
当您完成软件包的安装后,您只需要运行下面的代码。
from itables import init_notebook_mode
init_notebook_mode(all_interactive=True)
您的数据框将自动具有类似于上述 GIF 的交互式扩展。如果只想显示一个系列或数据框,可以使用下面的代码。
from itables import showshow(mpg[['mpg', 'name']])
作者图片
5.ipycanvas
你想拥有一个可以在 Jupyter 笔记本上玩的交互式画布吗?如果是这样,那么您应该尝试一下 ipycanvas 包扩展。这些扩展允许你在你的 Jupyter 笔记本中创建一个可绘制的画布。让我们先安装软件包。
pip install ipycanvas orjson
安装包后,让我们试着从笔记本示例启动一个手绘画布。
from ipywidgets import Image,ColorPicker, IntSlider, link, AppLayout, HBox, RoughCanvas, hold_canvaswidth = 800
height = 800canvas = RoughCanvas(width=width, height=height)drawing = False
position = None
shape = []def on_mouse_down(x, y):
global drawing
global position
global shapedrawing = True
position = (x, y)
shape = [position]def on_mouse_move(x, y):
global drawing
global position
global shapeif not drawing:
returnwith hold_canvas(canvas):
canvas.stroke_line(position[0], position[1], x, y)position = (x, y)shape.append(position)def on_mouse_up(x, y):
global drawing
global position
global shapedrawing = False
with hold_canvas(canvas):
canvas.stroke_line(position[0], position[1], x, y)
canvas.fill_polygon(shape)shape = []canvas.on_mouse_down(on_mouse_down)
canvas.on_mouse_move(on_mouse_move)
canvas.on_mouse_up(on_mouse_up)canvas.stroke_style = '#749cb8'picker = ColorPicker(description='Color:', value='#749cb8')link((picker, 'value'), (canvas, 'stroke_style'))
link((picker, 'value'), (canvas, 'fill_style'))HBox((canvas, picker))
作者图片
在上面的图片中,我正在玩我用上面的代码创建的画布。你可以试着点击画布,画一些有趣的东西。
如果你还想看看 ipycanvas 能做什么,你可以在这里阅读整个文档。
结论
Jupyter Notebook 是数据科学家使用最多的 IDE 之一,因为它提供了多功能性。数据可视化等活动通常也在笔记本上完成。为了帮助这项活动,我概述了五个有趣的 Jupyter 扩展交互可视化。它们是:
- ipywidgets
- 熊猫-侧写
- ipympl
- itables
- ipycanvas
希望有帮助!
在我的LinkedIn或 Twitter 上访问我。
如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。
如果您不是作为中等会员认购,请考虑通过 我的推荐 进行认购。
你可能错过的 5 个有趣的 Python 库
原文:https://towardsdatascience.com/5-interesting-python-libraries-that-you-might-have-missed-3ee7cb4f099e?source=collection_archive---------23-----------------------
约书亚·科尔曼在 Unsplash 上拍照
介绍
每周,我的团队都会举行一次分享会,在会上我们分享、教授和学习与数据相关的一切。我知道 Python 有很多强大的软件包,可以帮助我们更容易地编码。然而,在我为一次团队会议所做的研究中,我发现有这么多我从未见过的有趣的模块/库。在这篇文章中,我想和大家分享一些有用的软件包。
现在,让我们看看这里有什么!
维基百科(一个基于 wiki 技术的多语言的百科全书协作计划ˌ也是一部用不同语言写成的网络百科全书ˌ 其目标及宗旨是为全人类提供自由的百科全书)ˌ开放性的百科全书
你有没有遇到过这样的情况:你正在解决一个问题,但是却在纠结一些你不理解或者不知道它们是什么意思的术语?我有过,很多次。这就是为什么当我看到这个模块的时候,我想:“哦。我真幸运!”。相信我,会有帮助的。
首先,安装wikipedia.
,然后,如果您希望获得您想知道的任何内容的特定数量的摘要句子,只需将它作为参数传递给下面的summary()
函数。例如,我在下面做的是找出逻辑回归的解释。
!pip install wikipedia
import wikipedia
图 1:我试图找出什么是逻辑回归
Pandasql
你是 Python 的新手,你想用更简单、更类似于你的东西来操作数据,比如 SQL?试试pandas
套餐。它允许您使用 SQL 语法查询 pandas 数据帧。
安装pandasql
并导入sqldf
。下面是一个简单的数据框,向您展示这个有用的包是如何工作的。
!pip install -U pandasql
from pandasql import sqldfdata = {'product_name': ['pencil', 'eraser', 'pen', 'desk', 'laptop'],
'price': [2, 1, 1, 50, 678],
'owner': ['Chi','Joe','Dan','Lisa','Rose']}df = pd.DataFrame(data)
df
图 2:一个简单的数据集
选择 product_name 包含 pen 的数据。
query = '''Select * from df where product_name like "pen%"'''
sqldf(query)
图 3:用 sqldf 查询后
米辛戈
处理缺失值是我们在每个分析或数据科学项目中需要处理的不可或缺的任务。这个库使得可视化缺失数据变得比以往更加方便。
让我们再次创建一个包含空值的简单数据集,看看这个包是如何工作的。
data = {'product_name': ['pencil', np.nan, 'pen', 'desk', 'laptop'],
'price': [2, np.nan, 1, 50, np.nan],
'owner': [np.nan,'Joe',np.nan,'Lisa',np.nan]}
df = pd.DataFrame(data)
df
图 4:具有空值的数据
只用一行代码就可以用条形图和矩阵来可视化缺失值。
mi.bar(df, figsize = (10,5))
图 5:展示每列中缺失值的条形图
mi.matrix(df, figsize = (11,4))
图 6:显示缺失值的矩阵
图 5 和图 6 显示了缺失值的数量。在图 6 中,我们甚至可以在每一列中看到这些缺失的位置。
这个库值得更深入地研究。强烈推荐!
艺术
好的。有些人可能认为这不是一个有用的包,但不要否认这是一个有趣的包。它让像编码这样严肃的事情变得更加有趣。
!pip install art
from art import *
安装导入art
包后,还有很多有趣的东西可以探索。
1.art()函数
该函数在正常模式下返回一幅或多幅艺术作品作为str
。看看这个美丽的:
图 7: art()函数
2.tprint()函数
这个函数打印 ASCII 文本,并且每次刷新时图片都是随机的。
图 8: tprint()函数
表情符号
表情符号是我想分享的另一个有趣的包。这个有没有用还得看。但对我来说,它帮助我进行情绪分析,我必须区分积极和消极。表情符号确实有帮助。
我下面例子中的红心表情符号帮助你知道这是一个乐观的信息。你可以用demojize.
反过来分析这个符号
!pip install emoji
import emoji
图 9:积极向上的红心
图 10:解码红心
很酷,对吧?
结局
每天学习新东西是很棒的。如果你有什么要分享的,请随时回复。
5 款 Jupyter 扩展,提高您的工作效率
原文:https://towardsdatascience.com/5-jupyter-extensions-to-improve-your-productivity-8d7977340439?source=collection_archive---------10-----------------------
这些软件包将扩展 Jupyter 笔记本的功能
克里斯托夫·高尔在 Unsplash 拍摄的照片
Jupyter Notebook 是许多数据专家分析数据和开发机器学习模型的流行 IDE,因为它的可用性和实用性。该笔记本已经是一个初学者友好的 IDE 使用,并可以进一步扩展,以提高您的数据活动的生产力与一点点调整。
出于以上原因,我想在本文中概述我的五个 Jupyter 扩展来提高您的工作效率。让我们开始吧!
1.jupyter-资源-使用
您是否遇到过 Jupyter 笔记本因为内存问题而变慢或崩溃的情况?当我们探索占用大量内存的大数据或繁重的建模计算过程时,这种情况经常发生。
为了控制内存问题,我们可以使用 jupyter-resource-usage 扩展来显示笔记本中的内存使用情况。这个扩展工作很简单;您当前笔记本服务器和子服务器中的所有资源都将显示在右上方。让我们试着安装扩展。
pip install jupyter-resource-usage
当你完成软件包的安装后,试着重启 Jupyter 并访问你的 Jupyter 笔记本。内存显示现在应该在您的笔记本中可用。
作者图片
如果你想限制分配的资源,你可以使用这里介绍的各种方法来控制它们。
2.pyforest
每当您在一个新的环境中工作或者开发一个新的项目时,您必须导入所有需要的包。这不是一个交易破坏者,但有时重新导入所有的包并不愉快。这就是为什么 pyforest 被开发出来。
pyforest 扩展是一个从 Bamboolib 开发者那里自动导入的流行 python 包。这个扩展将你的工作流程转变为自动导入如此流行的包,如pandas
、numpy
、sklearn
等等。你可以点击查看列表。
让我们尝试安装 pyforest 扩展。
pip install --upgrade pyforest
python -m pyforest install_extensions
完成软件包安装后,您应该重新启动 Jupyter 以使 pyforest 自动导入生效。让我们看看扩展是否发生了。
作者图片
从上面的图片可以看出,我没有导入任何 seaborn 或 pandas 包,但是我可以在我的 Jupyter 笔记本中自动使用它。pyforest 扩展会自动导入这个带有流行缩写的包(seaborn 是 sns,pandas 是 pd,等等。).
您不需要担心内存分配,因为 pyforest 最初并不导入所有的包,而是在您执行使用特定包的代码时只导入所需的包。
3.jupyter-主题
顾名思义, jupyter-themes 是 jupyter 笔记本的扩展,可以改变主题。这个扩展也改变了我们的绘图,降价,熊猫数据框,等等。所以,主题的改变不仅仅局限于 Jupyter 笔记本的背景。
让我们试着安装 jupyter 主题。您可以使用下面的代码来安装这个包。
pip install jupyterthemes
安装后,您可以通过 CLI 访问 jupyter-themes 来更改 jupyter 笔记本主题。首先,让我们在命令提示符下使用下面的代码来看看有哪些主题可用。
jt -l
作者图片
默认有九个主题可供我们选择。让我们尝试其中一个主题,比如说“切斯特主义”。
jt -t chesterish
要查看 Jupyter 笔记本中的更改,您需要重新启动服务器。之后,你会看到你的笔记本类似下图。
作者图片
如果您想将主题重置为默认主题,可以使用下面的代码进行重置。
jt -r
你仍然可以用 jupyter-theme 做很多事情,比如控制颜色、单元格宽度、隐藏特定的工具栏等等。你可以在他们的页面上阅读所有的命令。
4.jupyter-通知
jupyter-notify 扩展是一个 jupyter 笔记本扩展,用于在我们的手机运行完毕时通知我们。当运行耗时的建模过程或清理活动,并且您想在等待时做些别的事情时,此扩展非常有用。
首先,我们需要使用下面的代码来安装这个包。
pip install jupyternotify
安装完这个包后,您需要通过运行下面的神奇命令代码将通知加载到您的 Jupyter 笔记本中。
%load_ext jupyternotify
设置已准备就绪;让我们试着运行笔记本并得到通知。例如,我们将使用下面的代码。
%%notify
import time
time.sleep(2)
print('Finish Trying Notifiy')
作者图片
在单元格中使用神奇的命令%%notify
,当我们运行完代码时,我们会得到类似上图的通知。如果您希望在通知中包含特定的消息,您可以像下面的示例一样添加该消息。
%%notify -m "Execution done"
time.sleep(2)
print('Finish Trying Notifiy')
作者图片
在 magic 命令后添加-m
参数将允许您编辑消息。如果您需要得到特定消息的通知,这将会很有帮助。
5.水印
水印扩展是一个神奇的命令,允许我们通过 Jupyter 笔记本环境打印硬件、版本、时间和更多信息。如果我们在探索过程中很快需要这些信息,这是很有帮助的。
要安装这个包,我们需要使用下面的代码。
pip install watermark
安装完这个包之后,我们可以通过运行下面的代码在笔记本中加载这个扩展。
%load_ext watermark
让我们试试 Jupyter 笔记本的扩展功能。首先,我们可以运行下面的代码来获取硬件信息。
%watermark
作者图片
默认情况下,神奇的命令%watermark
会给我们硬件信息。我们可以使用水印获取很多信息,例如,我们在 Jupyter 笔记本环境中导入的包版本。
%watermark --iversion
作者图片
如果你想知道所有可用的命令,你可以访问主页面。
结论
Jupyter Notebook 是数据专家最常用的 IDE 之一,为了提高使用这个 IDE 的效率,我概述了我的五个扩展;它们是:
- jupyter-资源-使用
- pyforest
- jupyter-主题
- jupyter-通知
- 水印
希望有帮助!
在我的LinkedIn或 Twitter 上访问我。
如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的 简讯。
如果您不是中等会员认购,请考虑通过 我的推荐 进行认购。
成为伟大的数据科学家所需的 5 项关键技能
原文:https://towardsdatascience.com/5-key-skills-needed-to-become-a-great-data-scientist-b654be1c55bb?source=collection_archive---------4-----------------------
根据我 10 年的经验(学习建立这些技能)
照片由 Unsplash 上的 Aziz Acharki 拍摄
成为一名成功的数据科学家并不需要天生的天赋。然而,在数据科学领域取得成功需要一些技能。所有这些关键技能都可以通过适当的训练和实践获得。在这篇文章中,我将分享一些重要的技能,为什么它们被认为对数据科学家很重要。还有,这些技能是如何获得的。
批判性思维
数据科学家应该养成批判性思维的习惯。它有助于更好地理解这个问题。除非问题被理解到最细微的程度,否则解决方案不可能是好的。批判性思维有助于分析不同的选项,并帮助选择正确的选项。
在解决数据科学问题时,这并不总是一个好的或坏的决定。许多选择都处于好与坏之间的灰色地带。一个数据科学项目涉及许多决策。例如,选择正确的属性集、正确的方法、正确的算法、正确的度量标准来衡量模型性能,等等。选择正确的选项需要更多的分析和清晰的思维。
照片由戴安娜帕克豪斯在 Unsplash 拍摄
培养批判性思维的一个简单方法是像孩子一样好奇。问尽可能多的问题,直到没有问题为止。我们问得越多,理解得越多。我们对问题理解得越好,结果就越好。
让我用一个例子来证明批判性思维。让我们考虑以下电信公司的场景。我们希望找到忠诚的高净值客户。为了确定这一客户群,我们必须从一系列问题开始,如:
- 客户有哪些不同的类别?
- 顾客的*均年龄是多少?
- 一个顾客花了多少钱?
- 客户互动的频率是多少?
- 客户是否一直按时支付账单?
- 是否有任何延迟或遗漏付款?
- 顾客的终身价值是什么?
这些有助于识别精英客户。它有助于组织确保这些客户体验到最好的服务。
有一些技巧可以帮助提高批判性思维能力。其中一个技巧是基本原则思维。这是一个心理模型,有助于更好地理解问题。这是一个使用基本原则解决数据科学问题的示例。
[## 如何用第一性原理思维解决数据科学问题?
towardsdatascience.com](/how-to-use-first-principle-thinking-to-solve-data-science-problems-db94bc5af21)
心智模型是帮助清晰思考和更好决策的神奇工具。因此,采用心智模型有助于提高你的批判性思维能力。这里有一篇文章强调了在工作中采用心智模型的好处。
</5-mental-models-to-help-boost-your-data-science-career-2a40fd9b7d8f>
编码
对于数据科学家来说,编码技能就像艺术家的眼睛一样重要。数据科学家要做的任何事情都需要编码技能。从多个来源读取数据,对数据进行探索性分析,构建模型,并对其进行评估。
Firos nv 在 Unsplash 上的照片
AutoML 解决方案会带来什么?*年来,许多汽车产品问世了。许多人甚至认为很快就不需要任何编码技能了。让我们举一个例子,
- 有 2 家公司,A 公司和 B 公司
- 他们都在使用最流行的 AutoML 产品
- 他们能够使用 AutoML 解决几个数据科学问题
- 现在他们中的一个想要主导市场
- 能够超越使用 AutoML 解决方案实现的解决方案的公司将有更好的机会。
不可否认,AutoML 解决方案在未来会被广泛采用。如今,数据科学团队解决的许多标准问题都将实现自动化。这并不意味着数据科学工作的结束,也不意味着数据科学家不再需要编写代码。这将使数据科学团队能够专注于新问题。
如今捕获的数据量如此之大。如今,许多组织只使用了一小部分可用数据。有了 AutoML,焦点将转移到未探索的领域。
您是否对数据科学感兴趣,但觉得自己不具备编码技能?这里有一篇文章可以帮助你学习数据科学的编码。
数学
数学是数据科学家需要理解的另一项重要技能。在学习数据科学时,你可以不知道一些数学概念。不理解数学概念,就不可能成为优秀的数据科学家。
本工程照片拍摄于un plash
让我举一个简单的例子来说明数学概念在解决问题中是如何有用的。让我们选择客户流失分析。
- 我们将从了解不同客户群体的行为和特征开始。一种方法是选择不同的样本数据并寻找模式。这里需要的数学概念是统计和概率
- 为了有效地进行数据分析,对线性代数的理解将非常方便
- 假设我们想建立一个模型来预测可能流失的用户。要理解梯度下降的概念,微积分知识将是有帮助的。如果您正在使用决策树,那么信息论的知识将有助于理解构建树的逻辑。
- 如果您希望优化参数,运筹学和优化知识可能会有所帮助。
- 为了有效地实施模型评估,像代数这样的数学概念非常有用
这还不是全部,没有数学就没有机器学习算法。这并不意味着你需要成为一名数学家才能成为一名成功的数据科学家。它所需要的只是高中水*的数学。
如果你有兴趣学习数据科学的数学。这是对你最好的菜。
https://www.coursera.org/specializations/mathematics-for-data-science#courses
合作
数据科学家不能孤立工作。数据科学家应该与多人合作,以确保项目的成功。即使在今天,许多数据科学项目仍然失败。大多数失败的首要原因是团队之间缺乏理解和合作。
万花筒在上拍摄的照片
解释跨不同团队协作和工作的重要性。让我们考虑一个数据科学团队与客户增长团队合作的场景。目标是了解客户流失的原因。
你决定和几个不同的团队交谈,他们是这样说的
增长团队——客户流失主要是由于竞争对手提供的大幅折扣
营销团队 —产品团队发布的新功能可能会引发一些问题,从而导致客户流失
产品团队 —营销团队只是专注于带来大量新客户,而没有建立客户的价值或意图
客户支持团队 —许多客户反映了许多与支付相关的问题。这可能是客户流失的原因
如果你没有和其他团队谈过,你会根据成长团队提供的输入开始解决问题。仅仅依靠一个团队的投入是无法解决问题的。即使增长团队是这里的主要发起人,仅仅依靠他们提供的输入也是不够的。为了获得一个整体的图景,你需要与不同的利益相关者交谈。当你限制与你一起工作的人或团队时,来自他们的偏见就会传递到你正在构建的解决方案上。
此外,在许多情况下,数据科学团队需要与数据工程和其他技术团队密切合作。没有良好的协作,就不会有成功。
交流和讲故事
- 投入到项目中的工作量
- 生产中部署的最终机器学习模型的准确性
- 探索性分析中确定的见解
如果解决方案没有很好地传达给利益相关者,所有这些都是无用的。数据科学中涉及的问题和解决方案通常要复杂得多。在将它们传达给企业之前,简化它们是非常重要的。在交流中使用讲故事的方法很有帮助。
我举个例子,更简单的说明良好沟通的重要性。让我们考虑下面的场景。数据科学团队正在开发一个预测模型,以预测零售能源客户的能源使用量。数据科学团队需要让业务和基础架构团队相信拥有并运行至少 10 个不同模型对于提高准确性的重要性。这意味着计算能力的更高使用和训练模型的更多时间。
选项 A —你提到了用于将客户分成不同组的聚类技术,因此你说每个组都需要一个模型。
这里的问题是,业务团队并没有被告知每个团队实际拥有一个模型的好处。因此,如果成本很高,他们可能不会信服。
选项 B —你从客户的概况和特征开始。你展示了客户的能源使用模式。你向业务团队展示了一些独特的模式,比如一些家庭在周末几乎不用电,可能是因为他们通常倾向于在不同的地方过周末。同样,你展示了独特的模式,因此你解释了一种模式不会适合所有这些不同的客户,因此需要至少 10 种不同的模式来迎合 10 种不同的独特类别的客户。
现在,企业理解了拥有如此多不同模型的重要性。他们可以轻松地将增量收益与所需的基础架构成本进行比较,以评估各种选项。
数据科学团队的工作是将想法清楚地传达给利益相关者。这不是一件容易的工作,因为大多数人对数据科学的了解有限。只有当业务从中发现价值时,数据科学项目才被认为是成功的。
改善组织协作的一个好方法是提供一个团队之间信息流动良好的环境。
领导技能——很好
最后但同样重要的是领导技能。大多数组织都有一个小型的数据科学团队,他们通常处理不同的问题。数据科学家经常会被拉到不同的会议中进行临时提问。数据科学家的工作是决定什么时候说是,什么时候说不是。正确设置优先级非常重要。
此外,数据科学家需要有一个清晰的思维过程,并应该有能力预见结果。很多时候,业务团队会施加很大的压力来加快分析。数据科学家的职责是管理预期并产生高质量的结果。
保持联系
- 如果你喜欢这篇文章,并对类似的文章感兴趣,在 Medium 上关注我。订阅 Medium ,获取数千篇与职业、金钱等相关的文章。
- 我在我的 YouTube 频道上教授和谈论各种数据科学主题。在这里订阅我的频道。
- 在此注册我的电子邮件列表,获取更多数据科学技巧,并与我的工作保持联系
为您的数据科学日常工作提供 5 项黑仔 Vim 功能
原文:https://towardsdatascience.com/5-killer-vim-features-for-your-data-science-daily-routine-ec814fc6c090?source=collection_archive---------15-----------------------
用这些简单的建议提高你的工作效率
照片由安德鲁·尼尔在 Unsplash 上拍摄
尽管被称为“21 世纪最性感的工作”,但数据科学的日常工作也包括无聊和重复的任务。
在你的文件顶部一次又一次地写相同的导入,手动格式化同事通过电子邮件发送的值列表,或者绘制可疑列以了解数据的错误,这些步骤是我们日常工作的一部分,事实是,它们占用了你大量的时间。
在本文中,我将介绍一些 vim 特性,它们确实帮助我消除了数据科学工作流中的摩擦。一些特性是普通的 vim,其他的需要额外的插件。这篇文章旨在引发思考。对我最有效的可能对你来说不是最相关的。如果你想最大限度地利用它,只需要花几分钟来确定你的工作流程中的摩擦,你将有希望通过调整下面描述的技巧来写下你自己的捷径。
1.登记册的使用和滥用
你可以把寄存器看作是拥有多个剪贴板的一种方式,每个剪贴板都与一个标识符相关联,这样以后就可以很容易地访问它。寄存器的命令采用"<register-name><vim-command>
的形式。
例如,"ap
允许你粘贴寄存器a
的内容。在从事数据科学项目时,我经常在寄存器i
中提取常见的导入,这样我就不必跨脚本手动复制粘贴了。这个过程展示在下面的 gif 中。
展示寄存器的使用。vim 命令以黄色突出显示。作者 Gif。
我也有一个寄存器,它包含了"p
中的基本绘图指令。我几乎每天都用它。这比不断搜索正确的语法要方便得多。
寄存器对于存储基本的 matplotlib 命令也非常方便。作者 Gif。
寄存器的另一个优点是:它们在 vim 会话中是持久的!
2.Vim 保守得最好的秘密:行自动完成
这是一个我一直在使用的普通 vim 命令,但令人惊讶的是,vim 用户并不太了解它,ctrl-x ctrl-l
允许你自动完成一整行。在数据科学项目中非常方便,例如,对各种列应用类似的转换是很常见的。
请注意,自动完成会考虑任何打开的缓冲区的内容。当您想要快速插入一个已经在不同脚本中定义的路径时,这非常方便。
行自动完成。作者 Gif。
3.全能的宏
一开始,Vim 宏可能有点令人畏惧,但是一旦您开始使用这个特性,您会想在此之前您实际上是如何工作的。宏用于存储动作序列,以便该序列可以多次应用。可以用命令q<macro-identifier>
启动宏。定义您的动作后,宏用命令q
关闭。然后你可以用@<macro-identifier>
调用你的宏。
让我们看看这在一个具体的例子中是如何工作的。我经常使用宏来快速格式化我通过电子邮件收到的或从网上收集的数据。在下面的例子中,目标是将一组无格式的字符串转换成一个 python 列表。
使用 vim 的宏将无格式值转换成 python 列表。作者 Gif。
4.模糊文件查找器
ctrlp.vim 是一个 vim 插件,它允许你快速检索文件、缓冲区等……感谢模糊匹配。在处理可能有几十个文件的大型项目时,这是最有用的。
默认情况下,可以使用ctrl-p
调用插件。只需输入文件名的几个字母,您就可以检索脚本。
用模糊匹配查找文件。作者 Gif。
5.绝对的 git 插件
逃犯是 vim 的一个神奇的 git 插件。引用他的作者:
“亡命天涯太牛逼了,竟然违法。这就是为什么它被称为逃犯”。
逃犯允许您从 vim 命令栏调用任何 git 命令。为了更快地跟踪代码,我在我的。vimrc
下面是我在实践中如何使用它的演示:
终极 git 插件。作者 Gif。
你想要更多吗?
我的开发设置实际上依赖于 vim 和一个叫做 tmux 的屏幕多路复用器的联合使用。vim + tmux 组合的关键特性是可以直接从 vim 向您的终端发送代码行。与 ipython 相关联,这提供了一个高度交互的环境,非常适合数据科学固有的繁重探索任务。如果你想了解更多,请查看这篇 帖子 。
感谢阅读!如果您喜欢这类内容,请在 Medium 上关注我。你也可以通过使用我的附属链接加入 Medium 来支持我的写作。
自学成才的数据专业人员的 5 条法则
原文:https://towardsdatascience.com/5-laws-for-self-taught-data-professionals-4bf351ac5c24?source=collection_archive---------30-----------------------
它们也适用于开发人员
照片由 Giammarco 在 Unsplash 上拍摄
访问我的 LinkedIn 个人资料的人会得到一个低级的摘要,详细描述我是如何从职业足球(美国读者的足球——我们将不得不安排一次关于这个的争论)对阵托特纳姆热刺队的比赛中首次亮相一队到成为一名邮递员的。
那些足够勇敢继续窥探我的个人资料的人很快就会发现,我在 Python 和机器学习方面有 3 年多的经验——哦,对于我目前的角色,我没有最强的学术背景。我的借口是“我 10 岁”(或者 16、18、21 岁)的时候不知道自己想成为一名机器学习工程师,所以我不会为此自责。
正因为如此,人们经常对我能在他们自学的数据专业旅程中传授给他们什么样的智慧感兴趣。
数据职业涵盖了很大范围的角色(查看 数据相关角色概述 以了解相关概念)。虽然数据专业人员旗下的每个角色都有自己的技术要求,但我所谓的智慧并没有延伸到这些要求,我在这一过程中学到了一些普遍适用的规律,这些规律帮助我走到了今天。
💔-tips-to-transition-into-data-science-from-any-field-6baaecdcac2d>
#1 获得所有权
让我们从直言不讳开始;自学并不容易,也不比其他路线容易——事实上,如果你在早期阶段没有感到迷失,我会担心的。
如果你决定走自学之路,你就无意中承担了自学带来的所有责任。例如,没有人会根据你的目标设计课程,除非你自己去做。如果你要达到你的目标,你必须掌握自己的发展。
不承担责任的最好例子是在我职业生涯的早期,我对自己感到非常内疚;当一个话题对我来说太难了,以至于反复几次都抓不住时,我会把它推迟。我这样做的理由总是“等我有了工作,我会从一个高级机器学习工程师那里学到的”。
诚然,有些事情你自己是无法完全掌握的,一旦你进入这个领域,你会从资深团队成员那里学到很多东西,但把你的发展放在别人的肩上,你是在煽动一个会阻碍你进步的坏习惯!
相反,一定要控制所有你能控制的杠杆(例如,你如何度过你的空闲时间,以及你的学习)。如果你知道有些东西你应该学,但是有一点点困难,那么寻求帮助。在 Reddit、Quora、Stackoverflow 等地方有很多社区。专门给那些有问题需要答案的人,以及有问题需要答案的人。
注意:尽量避免在 LinkedIn 上随意向某人寻求帮助,除非这与他们已经完成的工作或你已经建立的报告相符。
#2 不要想太多
当你自学的时候,你没有固定结构的奢侈。你必须自己解决问题,这意味着犯错误是不可避免的。
过度思考的一个流行例子是语言辩论。如此多的人长时间停滞不前,因为他们不知道是学习 Python 还是 R——在 Tensorflow 和 PyTorch 之间做出决定时也会出现同样的现象(我可以永远继续下去)。
我不认为当有经验的数据科学家充当看门人并发布类似“每个数据科学家都必须知道 x ”的帖子时会有所帮助——当我写下这些时我笑了,因为我肯定对此感到内疚,但是我知道当我说这样的话时我在和谁说话,我知道不是每个人。
只要你对自己作为数据专业人员的角色有一个良好的基础,你就会做得很好。有了使用新工具的经验,学习新工具会变得更容易,当你在网上消费内容时,问自己一个问题来保持你的过滤器也很重要…
“这个人是我未来想去的地方吗?”
#3 立即推销自己
我博客的读者会说,我在以正确的方式建立人际网络方面很有一套!我再也没有申请过数据科学的工作,为什么?因为我的关系网。我通过我的网络找到了我的第一份工作,作为一名实习机器学习工程师,并且我通过我的网络获得了每一份自由职业的工作。
我不知道这是否叫做吸引力法则——老实说,我并不在乎它叫什么——但我很喜欢把你的能量释放到这个世界上,然后让它吸引它所吸引的东西。我的意思是,在分享你正在做的事情、学习的内容、正在做的事情等方面保持一致,因为世界上还有其他人对你的能力感兴趣,然而,除非你让他们知道,否则他们永远不会知道你拥有这些能力。
你绝对不会吸引所有人,但对那些你确实吸引的人来说,他们会为你做得更多——这可能意味着打电话给人力资源部,坚持要求设立一个新职位,这样你就可以被聘用。
请记住,这是对我有效的方法,但我知道这并不适合所有人。你必须找到你推销自己的独特方式。
#4 跳入深水区
我有一个秘密要告诉你…
你永远不会觉得自己完全准备好了!
没有采取行动的合适时机。你只需要采取行动。
我能想到的最常见的例子是在找工作的时候;在找工作的时候,很多人都想 100%满足工作规范中的要求,在我看来这是非常不现实的,因为如果你做到了,就意味着你大材小用了。承担一个新的角色时,你必须有发展的空间,所以如果是这样的话,你也可以去做(特别是如果你达到了 70%或更多的标准)。
</5-hacks-to-overcome-data-science-imposter-syndrome-47cc45032e96>
每当你要在职业生涯中迈出一大步时,永远不会有你准备好的时刻,你只需要跳下去。
#5 永远不要欺骗自己
人们在简历上撒谎,人们对朋友撒谎,人们对家人撒谎。虽然我不建议你在任何情况下撒谎,但有一种情况是完全不能容忍的,那就是当它发生在你身上的时候!
听我说完…
我真诚地相信,任何人都可以自学一切,成为数据专家,如果他们致力于成为一名数据专家的话。是的,这需要努力工作,但是有些人就是不适合独立完成,这没什么不好。
专注于目标;如果你的目标是成为一名数据科学家,那么你有责任在不违背你的价值观的情况下,尽一切努力成为一名数据科学家。是的,人们,这可能意味着自学路线不适合你,因此你应该参加某种形式的正规教育。
这不会让你比别人更弱或更笨,事实上,我从中得到的是你非常有自知之明。
当你知道它对你不起作用,但你觉得它听起来不错时,不要试图强迫自己自学。相反,要以目标为导向。做你必须做的事情来实现你的目标——我可以向你保证,这样你会更有成就感。
包裹
自学绝非更容易的路线。通过加入这条道路,你已经自动接受会有你缺乏清晰的时候,这可能是压倒性的。完全没有理由为什么有人不能从一个不相关的字段过渡到数据字段。你会到达目的地的信念和到达目的地的勇气是至关重要的。
感谢阅读!
如果你喜欢这篇文章,请通过订阅我的**每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。**
相关文章
**</3-ways-to-drastically-improve-your-programming-skills-on-your-own-9359ce670099> [## 当我意识到数据科学证书不会推动我的职业发展时
towardsdatascience.com](/the-moment-i-realized-data-science-certificates-wont-push-my-career-forward-efe2d404ab72)**
5 个鲜为人知的 Python 特性
原文:https://towardsdatascience.com/5-lesser-known-python-features-19989db6e13e?source=collection_archive---------11-----------------------
以及编码示例
Python 是目前全球使用最广泛的编程语言之一。它的简洁明了的语法使得 Python 程序非常容易读写,确保了快速的学习曲线。此外,Python 有“电池包”——多个库(标准库和第三方库),这将极大地方便程序员的工作。
更好的是,在过去的几年里, Python 在数据科学和机器学习领域也变得非常流行,成为❤️.这些快速发展的领域中使用最多的语言虽然可以很快达到基本的编程水*,但掌握 Python 语言肯定需要一些时间。在本文中,我们将详细解释 5 个鲜为人知的 Python 特性,这不仅有助于您更好地理解 Python 的工作原理,还能帮助您发现解决常见编程挑战的不同方法。
Max Langelott 在 Unsplash 上拍摄的照片
1.带有 for 和 while 循环的 Else 语句
我们习惯于将 else 子句与 if 语句结合使用;然而, for 和 while 语句也可以有一个 else 子句。对于循环语句,else 块仅在循环自然终止的情况下运行,这意味着它不会因 break 语句或异常而终止。
下面,您可以找到两个例子来了解 else 子句如何处理循环语句。在第一个示例中,for 循环遍历列表的每个元素,而不会过早终止,因为不满足 if 条件,因此不执行 break 语句。在这种情况下,else 块被执行。
然而,在下一个例子中,for 循环没有到达迭代器的末尾,通过 break 语句提前终止。结果,不执行 else 块。
2.三元运算符
在 Python 2.5 中引入,三元运算符是 if-else 语句的简化单行版本,允许简洁地测试条件。该运算符计算一个语句,并根据该语句是真还是假来执行操作。
三元运算符具有以下语法,通常用于确定变量的值,如下所示。
[当 _ 真]if[条件]else[当 _ 假]
三元运算符有助于精简您的代码;然而,如果条件以及真和假表达式非常复杂,它们可能很难阅读。
3.表达式中的运算符优先级
如果 Python 在对表达式求值后显示的结果与预期的不同,那么在很多情况下,原因可能是错误地考虑了运算符优先级。重要的是要记住,在 Python 中,一些元素优先于其他元素。
下表显示了在 Python 中工作时我们必须考虑的运算符优先级。
接下来,有几个例子展示了 Python 中优先级是如何工作的,遵循上表中给出的规则。
如上所示,在 Python 中,比较运算符的优先级高于逻辑运算符。然而,重要的是要记住它并不适用于熊猫,在熊猫中逻辑操作符的优先级高于比较操作符。因此,我们需要用括号将每个布尔表达式括起来,以避免错误。
有关更多详细信息,请参见官方 Python 文档(6.17 节运算符优先级)
4.没有人
None 是表示没有值的关键字。在 Python 中,只有一个 None 对象,这意味着 None 的所有引用都指向同一个对象。记住 None 是 Python 函数的默认值是很重要的。您可能知道,Python 中有一些函数会返回值,如 len() 、 min() 或 eval()。
但是,还有其他函数(或者方法!)不返回任何内容,换句话说,它们不返回任何内容。例如函数 print() 或列表方法**。追加()**。
与内置函数一样,在创建自己的函数时,并不强制编写 return 语句。如果未指定,Python 将返回 None(默认值),表示没有有意义的返回值。
5.函数参数:*args 和**kwargs
参数*args 和kwargs 允许您向函数传递多个位置或关键字参数**。当我们不能预先确定必须传递给函数的参数的确切数量时,它们特别有用。
解包操作符* 允许您向函数传递不同数量的位置参数。在下面的例子中,我们向函数 variable_arguments 传递了五个不同的位置参数。正如您在下面看到的,所有参数都被打包到一个名为 args 的元组中。
此外,我们可以在函数中使用 for 语句来遍历元组的所有元素,如下所示。注意,在这种情况下,我们选择了不同于 args 的另一个名称,这也是有效的。
同样,解包操作符允许您向函数**传递不同数量的位置参数。在这种情况下,参数被打包到一个名为 kwargs 的字典中。
和以前一样,我们可以使用 for 循环来迭代字典的元素。
重要的是要记住,您可以将标准、*args 和**kwargs 参数组合到同一个函数中(参见下面的示例);但是,它们必须按以下顺序提供。
some_func( fargs,*args,**kwargs)
尤其相对于 C 或 Java 等其他编程语言,Python 的学习曲线非常陡峭;然而,仍然有许多高级特性需要您在 Python 世界中积累丰富的经验后才能掌握。
有关 Python 编程的更多信息,您可以在这里查看我以前的一篇文章。
</10-python-built-in-functions-you-should-know-fbd5c879e0ab>
感谢阅读!
阿曼达💜
为您的下一个 NLP 项目准备的 5 个鲜为人知的 Python 库
原文:https://towardsdatascience.com/5-lesser-known-python-libraries-for-your-next-nlp-project-ff13fc652553?source=collection_archive---------2-----------------------
带有代码示例和解释。
图片由有意识设计来自 Unsplash
当我第一次开始阅读 Medium 时,我最喜欢的文章类型是那些向我介绍新的 Python 库的文章。我了解的几个库现在是我日常项目的一部分。
为了传播它,我想分享我在过去几年做各种自然语言处理(NLP)工作中发现的 5 个很棒的 Python 库。
1)宫缩
当然,你可以写一长串正则表达式来扩展文本数据中的缩写*(即不要* → 不要;不能 → 不能;还没有 → *还没有)。*但是为什么不省点力气,利用 Python 库来帮你完成繁重的工作呢?
缩写是一个易于使用的库,它将扩展常见的英语缩写和俚语。它速度快,效率高,并且可以处理大多数边缘情况,比如丢失撇号。
安装
pip install contractions
示例
import contractionss = "ive gotta go! i'll see yall later."
text = contractions.fix(s, slang=True)
print(text)
结果
ORIGINAL: ive gotta go! i’ll see yall later.OUTPUT: I have got to go! I will see you all later.
用例
文本预处理的一个重要部分是创建一致性,并在不丢失太多含义的情况下削减唯一单词的列表。例如,词袋模型和 TF-IDF 创建了大型稀疏矩阵,其中每个变量都是语料库中不同的词汇。扩展缩写可以进一步降低维数,甚至有助于过滤掉停用词。
文献
2)蒸馏标点符号
恢复丢失的标点符号到纯英语文本…听起来很简单,对吗?对计算机来说,要做到这一点肯定要复杂得多。
Distilbert-punctuator 是我能找到的唯一一个执行这项任务的 Python 库。而且超级准确!这是因为它使用了一个精简版本的 BERT,这是一个由谷歌提供的最先进的预训练语言模型。它进一步微调了超过 20,000 篇新闻文章和 4,000 篇 TED 演讲的文字记录,以检测句子的边界。当插入句尾标点符号时,例如句号,模型还会适当地大写下一个起始字母。
安装
pip install distilbert-punctuator
专业提示:这个库需要相当多的依赖项。如果你在安装上有问题,那么在 Google Colab 上试试,在这种情况下,你需要运行!皮普安装蒸馏标点符号代替。
例子
from dbpunctuator.inference import Inference, InferenceArguments
from dbpunctuator.utils import DEFAULT_ENGLISH_TAG_PUNCTUATOR_MAPargs = InferenceArguments(
model_name_or_path="Qishuai/distilbert_punctuator_en",
tokenizer_name="Qishuai/distilbert_punctuator_en",
tag2punctuator=DEFAULT_ENGLISH_TAG_PUNCTUATOR_MAP
)punctuator_model = Inference(inference_args=args,
verbose=False)text = [
"""
however when I am elected I vow to protect our American workforce
unlike my opponent I have faith in our perseverance our sense of trust and our democratic principles will you support me
"""
]print(punctuator_model.punctuation(text)[0])
结果
ORIGINAL:
however when I am elected I vow to protect our American workforce
unlike my opponent I have faith in our perseverance our sense of trust and our democratic principles will you support meOUTPUT:
However, when I am elected, I vow to protect our American workforce. Unlike my opponent, I have faith in our perseverance, our sense of trust and our democratic principles. Will you support me?
用例
有时,您只是希望您的文本数据在语法上更加正确和更具可读性。无论任务是修复混乱的 Twitter 帖子还是聊天机器人消息,这个库都是为你准备的。
文档
3)文本统计
Textstat 是一个易于使用的轻量级库,它提供了关于文本数据的各种指标,如阅读水*、阅读时间和字数。
安装
pip install textstat
例子
import textstattext = """
Love this dress! it's sooo pretty. i happened to find it in a store, and i'm glad i did bc i never would have ordered it online bc it's petite.
"""# Flesch reading ease score
print(textstat.flesch_reading_ease(text))
# 90-100 | Very Easy
# 80-89 | Easy
# 70-79 | Fairly Easy
# 60-69 | Standard
# 50-59 | Fairly Difficult
# 30-49 | Difficult
# <30 | Very Confusing# Reading time (output in seconds)
# Assuming 70 milliseconds/character
print(textstat.reading_time(text, ms_per_char=70))# Word count
print(textstat.lexicon_count(text, removepunct=True))
结果
ORIGINAL:
Love this dress! it's sooo pretty. i happened to find it in a store, and i'm glad i did bc i never would have ordered it online bc it's petite.OUTPUTS:
74.87 # reading score is considered 'Fairly Easy'
7.98 # 7.98 seconds to read
30 # 30 words
用例
这些指标增加了一层额外的分析。比方说,你正在从一本八卦杂志中寻找一组名人新闻文章。使用 textstat,你可能会发现更快更容易阅读的文章更受欢迎,保留率也更高。
文档
4)胡言乱语检测器
这个低代码库的主要目的是检测乱码(或难以理解的单词)。它使用一个在大型英语单词语料库上训练的模型。
安装+ 培训
pip install gibberish-detector
接下来,您还需要在您的终端上训练模型,但这非常简单,只需要一分钟。只需遵循以下步骤:
- 从这里下载名为 big.txt 的训练语料库
- 打开您的 CLI 和 cd 到 big.txt 所在的目录
- 运行下面的:胡言乱语-检测器训练。\big.txt >胡言乱语-detector.model
一个名为的文件将会在你当前的目录下创建。
示例
from gibberish_detector import detector# load the gibberish detection model
Detector = detector.create_from_model('.\gibberish-detector.model')text1 = "xdnfklskasqd"
print(Detector.is_gibberish(text1))text2 = "apples"
print(Detector.is_gibberish(text2))
结果
True # xdnfklskasqd (this is gibberish)False # apples (this is not)
用例
我过去曾使用过 gibbish-detector 来帮助我从数据集中删除不良的观察结果。
它也可以被实现用于用户输入的错误处理。例如,如果用户在你的 web 应用程序上输入了无意义、无意义的文本,你可能想要返回一个错误消息。
文档
5) NLPAug
我把最好的留到了最后。这个多用途的图书馆确实是一个隐藏的宝石。
首先,什么是数据增强?它是通过添加现有数据的稍微修改的副本来扩展训练集大小的任何技术。当现有数据多样性有限或不*衡时,通常使用数据扩充。对于计算机视觉问题,增强用于通过裁剪、旋转和改变图像的亮度来创建新的样本。对于数字数据,可以使用聚类技术创建合成实例。
但是如果我们处理的是文本数据呢?
这就是 NLPAug 的用武之地。该库可以通过替换或插入语义相关的单词来扩充文本。
它通过采用像 BERT 这样的预训练语言模型来实现这一点,这是一种强大的方法,因为它考虑了单词的上下文。根据您设置的参数,前 n 个相似单词将用于修改文本。
预训练的单词嵌入,如 Word2Vec 和 GloVe,也可以用于用同义词替换单词。点击此处阅读一篇展示该库全部功能的精彩文章。
安装
pip install nlpaug
例子
import nlpaug.augmenter.word as naw# main parameters to adjust
ACTION = 'substitute' # or use 'insert'
TOP_K = 15 # randomly draw from top 15 suggested words
AUG_P = 0.40 # augment 40% of words within textaug_bert = naw.ContextualWordEmbsAug(
model_path='bert-base-uncased',
action=ACTION,
top_k=TOP_K,
aug_p=AUG_P
)text = """
Come into town with me today to buy food!
"""augmented_text = aug_bert.augment(text, n=3) # n: num. of outputsprint(augmented_text)
结果
ORIGINAL:
Come into town with me today to buy food!OUTPUTS:
• drove into denver with me today to purchase groceries!
• head off town with dad today to buy coffee!
• come up shop with mom today to buy lunch!
用例
假设您正在一个数据集上训练一个监督分类模型,该数据集有 15k 个正面评论,只有 4k 个负面评论。像这样严重不*衡的数据集将在训练期间产生对多数类(正面评论)的模型偏差。
简单地复制少数类的例子(负面评论)不会给模型增加任何新的信息。相反,利用 NLPAug 的高级文本增强功能来增加少数民族类别的多样性。该技术已被证明可改善 AUC 和 F1 评分。
文档
结论
作为数据科学家,Kaggle 的竞争对手,或者一般的程序员,我们在口袋里放尽可能多的工具是很重要的。我们可以利用这些库来解决问题,增强我们的数据集,并花更多的时间来思考解决方案,而不是编写代码。
如果你对 NLP 感兴趣,可以看看我最*写的关于命名实体识别(NER)的文章。我将展示如何使用 spaCy——另一个强大的 NLP 库——来构建一个模型,自动识别非结构化文本中与家庭装修服务相关的单词。
https://levelup.gitconnected.com/auto-detect-anything-with-custom-named-entity-recognition-ner-c89d6562e8e9
感谢阅读!
5 个鲜为人知的小贴士、技巧和窍门。使用案例+演示。
原文:https://towardsdatascience.com/5-lesser-known-tableau-tips-tricks-hacks-with-use-case-demo-463f98fbdc7e?source=collection_archive---------21-----------------------
你都认识吗?
虽然其他媒体作者和 Tableau 用户有他们自己的黑客列表可以分享,但这里是我版本的 Tableau 变通方法列表,它们对我的个人用例很有效,其中一些是我纯属巧合发现的。希望下面的 5 个 Tableau 变通方法对一些阅读本文的 Tableau 用户会有帮助,我几乎没有找到相关的文档🙃
1.将背景图像绘制为底图
虽然我在我写的另一篇文章中简要地分享了这一点,但它之前被掩盖了,所以我决定在这里重申这一点。
用例:绘制交通路线的自定义图层
按作者分类的图像|渲染运输路线的 Tableau 工作表|未渲染任何底图
有时底图服务可能没有您想要的详细信息,或者在某些情况下无法访问所需的底图服务,绘制背景地图图像就是这样一种替代方法。为了尽量减少麻烦,请随意访问我创建的 Tableau 实用程序 web 应用程序: Tableau 数据实用程序
在选项卡下【空间→CSV】:
作者图片| Web 应用程序的标题栏
一直滚动到底部,你最终会看到这个:
按作者分类的图像|预览 web 应用程序上的功能|以上内容使用户能够导出地图图像,以便在 Tableau 仪表盘中用作背景底图
继续将地图定位到您想要的视图,并选择**【导出地图图像】**。此后,在 Tableau 仪表板中,从标题菜单中选择“导入背景图像”,并输入所需的坐标— 注意:在 web 应用程序上,记下地图图像下方呈现的坐标,因为这些坐标与您应该为背景图像绘制的坐标完全相同。
按作者分类的图像|将背景图像绘制为底图时,这些坐标对应于 Tableau 中的精确坐标
表格结果:
按作者分类的影像|(左)不带底图的路径|(右)带有导入的地图影像的路径
**注意:**要更改希望从 Tableau 实用程序中导出的底图的选择,请随意输入另一个底图 URL,如下所示:
作者提供的图像|(左)使用默认底图|(右)使用备选地图服务,即one Map-请注意,用户的输入必须是 XYZ 底图切片服务也称为 Slippy 地图
2.用参数切换工作表视图
为了节省仪表板上的额外空间,我经常在工作中使用书中的另一个老技巧,包括在同一个仪表板上的两个视图之间切换。
**用例:**为相同的数据点呈现不同的图表类型
- 第一步。创建一个参数【选择图表】
- 第二步。创建一个计算出的 字段 【折线图】
- 第三步。创建一个计算出的 字段 【条形图】
图片作者|创建参数**【选择图表】、计算字段【折线图】和计算字段【条形图】**
此后,继续拖动两个计算字段,如下所示:
作者截屏|将**【折线图】计算字段拖到折线图工作表的筛选器上|将【条形图】计算字段拖到条形图工作表的筛选器上|两个字段都设置为“至少 1”**
现在你知道了:
作者的屏幕截图|演示使用参数值在折线图和条形图之间切换
3.使用 RANK()创建排序的图表布局
一些 Tableau 用户可能会注意到,尽管使用了仪表板标题中的排序选项,但是每当数据源更新自身时,图表布局就会恢复到无序和未排序的状态。
按作者排序的图像 Tableau 工作簿上显示的相应排序图标
为了确保图表保持排序,创建一个名为**【销售排名】**的单独字段:
Image by Author |假设要排序的度量值是 SUM([Sales]),用 RANK()函数包装该实体
此后,拖动**【销售额排名】**字段,如下所示:
作者截屏|将字段**【销售排名】改为离散。|继续将其拖动到尺寸字段【子类别】**的前面
因此,下次数据源再次更新时,上面的条形图仍将保持其排序形式**(仅供参考:要隐藏[Rank Sales]列,只需右键单击并取消选择该字段的“Show Header”。)**
4.使用❝Join Calculation❞映射数据源
在某些包含不同国家数据源的数据可视化中,经常会遇到不同编码的国家名称。
**用例:**从两个不同的数据源映射国家名称
令人欣慰的是,Tableau 使用户能够 ❝Create a 加入 Calculation❞ ,这使用户能够利用 Tableau 的公式和方程,通过单个计算字段来映射不同的数据源。下面说明了如何做到这一点:
作者插图| (1) 在数据源页面上,在两个不同的数据源之间选择**【创建连接计算】|(2)在计算中使用 IF-ELSEIF-ELSE 公式在两个数据源之间映射【美国】****【中国大陆】|(3)**在实际的 Tableau 工作簿中,美国和
使用上面的实现,实际的数据源不需要修改,但仍然可以根据需要进行映射。
5.在显示器中使用上标和下标
虽然 Tableau 中没有呈现上标或下标的内置功能,但它支持显示包含上标和下标数字符号的 ASCII 字符。
图片作者| 1 我过去的 Tableau 仪表板目前部署在 Tableau Public |红色轮廓表示脚注引用的上标符号的用法
为了让其他 Tableau 用户的生活更轻松,如果你想在你的仪表盘上实现上标和下标符号,可以在我的 GitHub 上获取我在创建的 JavaScript 工具。只需双击它,在任何支持 JavaScript 的浏览器(Chrome,Edge)中运行。
作者截图|继续将需要转换的字符输入到相应的文本字段,并选择按钮**【转换】**,如上图所示|然后将符号复制并粘贴到 Tableau 中
这就结束了我的 5 个 Tableau 的列表!希望您发现这很有用,如果您对数据分析或其他与 Tableau 相关的内容❤感兴趣,请关注我的 Medium
https://geek-cc.medium.com/membership
👩💻以下是其他一些你可能感兴趣的 Tableau 技巧&招数(每篇文章的 Tableau 工具已经部署在: Tableau 数据实用工具):
我希望在开始学习数据科学时就知道的 5 个教训
原文:https://towardsdatascience.com/5-lessons-i-wish-id-known-when-i-started-learning-data-science-1a90a4d2a7e7?source=collection_archive---------20-----------------------
如果你试图闯入,小心这些令人大开眼界的宝石。
来自 Pexels 的 Andrea Piacquadio 的照片
我的一个老朋友打电话给我寻求建议,他已经开始学习数据科学了。他想换个领域。最后,我和他就我的工作经历进行了一次长谈。
很明显,他被网上大量的可用资源所淹没,希望从一个成功闯入数据科学的人那里听到可信的信息。
当我真正感到谦卑时,他选择向我寻求建议;我意识到,可能有许多人没有可靠的信息来源,但他们可以从我告诉他的事情中受益。
如果你正开始学习数据科学,并且和我的朋友情况相似,那么这篇文章适合你。在这篇文章中,我概述了我希望知道的一切,以及为了更好的学习体验,每一课对你意味着什么。
闯入这个领域不需要硕士学位。
除非亲身经历,否则没有办法百分百确定。但是如果你选择在世界上寻找例子,并与已经在这个领域的人交谈,他们会告诉你同样的事情。
许多人已经在数据科学和人工智能领域大开杀戒,而没有相关的正规教育,更不用说硕士学位了。我很幸运得到了一位谷歌工程师的指导,他的话给了我视角。
“我从一所知名大学获得了硕士学位,但我的团队(谷歌)中有些人没有硕士学位,但他们的表现同样出色,甚至更好。硕士学位是历史证明的展示你专业技能的方式之一——还有其他方式。只要你能展示你的专业技能,你就会做得很好。”
当我在 2017 年开始学习数据科学时,我认为我需要一个硕士学位,尽管我已经完成了计算机科学本科学位。我记得为“在美国的 MS”制定了一个计划,并为 GRE 做准备。
我对流行的硕士课程和他们提供的模块研究得越多,我就越清楚。我可以在硕士课程期间学习他们教的东西,直接从他们那里学习,只需花一小部分费用,就能在我家舒适地学习。
等等,我说过吗?
这对您意味着什么:
是的,我做到了。你可以从 Coursera、Udacity 和 EdX 等 MOOC *台的教授那里学习同样的课程,但投资要便宜得多。
哪些课程?哪些*台?我建议你看一下以前的一篇文章,在那里我概述了我使用过的资源并推荐了。我将在这里为你总结一下硕士学位的替代方案:
- 找出你的优势和劣势。如果你来自一个不同的领域,看看如何利用你现有的技能成为你的优势。
- 列出你还需要学习的内容,并专注于它们。
- 依靠知名大学的在线课程来学习概念。我很乐意根据你现有的技能帮你推荐课程。
- 运用这些技能来创建展示你专业技能的项目组合。巩固你所学知识的最好方法是在项目中应用它。
我知道这听起来很简单,但是很有效。
你不需要硕士学位就能进入这个领域,但你仍然需要展示你的专业知识和技能。
您不需要在 Python 和 r 之间进行选择。
大多数发烧友需要做的第一个决定。如果你有这个问题,我理解你的想法。我的简短回答是:你最终会两者都用到。
我有计算机科学背景,自然对 Python 驾轻就熟。我从来不喜欢 R,主要是因为我不能掌握语法,而 Python 是我大部分工作的首选。
在我学习旅程的几个月里,我很幸运地在一位教授的指导下获得了一份学术实习。这是一次数据分析实习,让我领略了数据科学的世界。不过,有一个问题。
和我一起工作的教授对 r 很满意,他让我也用同样的方法。如果这发生在你身上,你有两个选择:
- 拒绝——冒着成为实习中表现最差的人之一的风险。
- 答应吧——但是必须从头开始学习一门新的语言。
我做了后者。我想不惜任何代价进入这个领域,如果这意味着我必须学习一门新的语言,那就顺其自然吧。我很感谢这次经历,因为我在旅程的早期就采取了学习的心态。
一年后,在我的第一份工作中,我必须同时使用 Python 和 r。现在,在我目前的工作中,我主要使用 PySpark。它类似于 Python,但是还有更多的东西需要学习。由于我以前的经历,我克服了学习新语言的恐惧。
我喜欢接受挑战,最终获得胜利。
这对你意味着什么:
当你开始的时候,经常会感到不知所措,你会被要求做出很多选择,你会想要做出最好的选择。
但是不要陷入哪种语言/工具最好的争论。为什么?在这个生态系统中,所有的语言都有其用途。
根据经验,如果你来自统计学/数学背景,我建议从 r 开始。如果你来自计算机科学或其他背景,请随意从 Python 开始。
最后,语言并不重要,你对数据科学和人工智能概念的理解程度才是最重要的。最终目标是成为技术不可知者;使用最适合问题的工具/语言。
你的职称不重要;这种工作。
大多数初学者(包括我)都走在“数据科学家”这个头衔后面。毕竟,它被认为是 21 世纪最性感的工作。
我第一次接触数据科学是在一名数据分析师实习生的时候。在最*担任高级数据科学家之前,我也是一名机器学习工程师。奇怪的是,我喜欢到目前为止我演过的每一个角色。
我意识到我更专注于我正在做的工作,而不是标题。我问自己的问题是:
- 我每天都在学习新的东西吗?
- 我所做的工作对现实世界有影响吗?
- 我接触到端到端的机器学习管道了吗?
如果你没有听说过数据科学中的各种角色,数据分析师、数据工程师、商业智能分析师、机器学习工程师、产品分析师、业务分析师、MLOps 工程师等等。
如果你超越头衔,开始关注你所做的工作,那么所有的角色都会同样有回报。
寻找什么:
作为初学者,请保持开放的心态。数据科学家是一个总括术语,头衔并不重要,但工作种类很重要。在进行普通的 SQL 查询时,你可以被称为数据科学家,或者被称为从事前沿技术工作的数据分析师。两者都存在。
我建议接受任何能挑战你学习新事物的角色。根据对你来说最重要的事情,不断地问自己一系列问题,以保持现实核查。
追逐头衔会限制你进入这个领域的机会,你不会想这么做的。尝试不同的角色会帮助你发现自己的优势。一旦你发现自己擅长什么,你就可以专注并专攻它。
为你的第一份数据科学工作接触初创公司。
如果你在正确的地方,学习曲线是巨大的。
这次我很幸运。给你一些背景,我住在一个叫斯里兰卡的小岛上,数据科学和人工智能方面的公司屈指可数。与美国或英国相比,这里的工作机会很少。
由于我们这里没有多少大型科技公司提供数据科学工作,我发现自己加入了一家人工智能初创公司,我非常高兴。
在你职业生涯的初期,你并不真的需要一家大的科技公司在你的名字后面。学习曲线更重要。如果你找到了与你的价值观和文化产生共鸣的合适的创业公司,你会有家的感觉。
初创公司提供丰富的学习经历,有大量的成长机会。如果你有创业的正确心态,没人能阻止你在事业上蒸蒸日上。
如何接*初创公司:
创业都是关于人和文化的。找出你是否适合的最好方法是通过与他们的员工建立关系网。以下是你可以采取的一些步骤:
- 在 LinkedIn 上联系员工,关注他们的社交媒体账户。这会让你领略他们的文化和他们的工作。
- 基于你对初创公司的了解,列出你真正感兴趣的初创公司。
- 学习所需的技能,建立可展示的项目来展示。
- 通过电子邮件或 LinkedIn 联系团队中的某人,告诉他们你对他们的工作感兴趣。
- 如果有空缺,最终会解决的。耐心点。
这是几个年轻热情的数据爱好者的真实故事,他们加入了我所在的人工智能初创公司。他们做了我上面列出的事情,我们非常乐意欢迎他们加入我们的团队。
开始分享你所知道的一点点知识永远不会太早。
有人(和你未来的自己)会受益并欣赏它。
当我开始学习数据科学时,我觉得我没有知识可以分享。我是说,谁会想知道我的经历呢?我绝不是专家。我被 Fast.ai 的 Rachel Thomas 说服写了这篇文章,并最终在博客上分享了我的知识。
发生了两个重大变化:
- 许多人能理解我的经历,并开始从我的工作中受益。我不断收到积极的反馈,并且非常乐意帮助每一个伸出援手的人。
- 我开始理解我写的概念,好多了。学习是一回事,但当我试图在一篇文章中解释它时,我必须做进一步的研究,并综合我的学习和解释。这一实践增强了我对核心概念的理解。
我开始比我的读者受益更多。学习新的东西并与我的读者分享已经成为一种习惯。我希望我能早点开始分享。
“教就是学两遍。”—约瑟夫·儒贝尔
如何开始分享:
事实上,当你在学习过程中不断进步时,你没有太多东西可以分享。你仍然可以从分享你的经验开始,比如你学到了什么,什么有用,什么没用。
这可以是你的博客,媒体,或任何其他*台,如 YouTube。就当是教一个朋友跟你学。你会很容易从这些*台上找到志同道合的人。
你学得越多,剩下的就越多。作为一个初学者,你不希望以吹牛和无所不知的态度出来。永远记住,即使你觉得自己已经取得了重大成就,也还有很多事情要去完成。
当你把自己放在那里时,对你收到的各种反馈要谦虚和耐心。如果你不开始,你永远不知道会发生什么。
最后的想法
感谢您阅读至此。我真心希望这对你有用,尤其是如果你开始学习数据科学的话。在这篇文章中,我总结了我和我的朋友在一个小时的谈话中分享的经验:
- 闯入这个领域不需要硕士学位。
- 您不需要在 Python 和 r 之间进行选择。
- 你的职称不重要;这种工作。
- 为你的第一份数据科学工作接洽初创公司。
- 开始分享你所知道的一点点知识永远不会太早。
我在 Medium 中广泛地写下了我在数据科学领域的学习和经历。当我开始的时候,社区给了我帮助,这是我回报的方式。
如果您对如何进入数据科学领域有更好的想法,并且对自己也能进入这个领域充满信心,那么这篇文章已经达到了它的目的。
是吗?
要获得更多关于如何进入数据科学领域的有用见解、有趣的合作和指导,请考虑 加入我的电子邮件好友私人列表 。
麦肯锡教给我的 5 条经验将使你成为更好的数据科学家
原文:https://towardsdatascience.com/5-lessons-mckinsey-taught-me-that-will-make-you-a-better-data-scientist-66cd9cc16aba?source=collection_archive---------0-----------------------
如何在数据世界中脱颖而出
丹·迪莫克在 Unsplash 上拍摄的照片
数据科学是*年来最热门的领域之一,吸引了大量人才加入顶级公司数据科学团队的竞争。有很多文章教你如何准备 DS 面试以及“从其他面试者中脱颖而出”,但是这个旅程肯定不会止于被录用。获得工作机会仅仅是第一步;然而,没有多少人谈论一旦你通过面试并加入公司,你如何从其他雇佣的数据科学家中脱颖而出。
在麦肯锡工作的几年里,我有幸与麦肯锡和我服务过的顶级公司的无数聪明的数据科学家一起工作,并观察到了那些获得合作伙伴和客户最高评级和赞扬的人的共同特点。可能会让你们中的一些人感到惊讶,表现最好的数据科学家不一定是那些构建最奇特的模型或编写最高效代码的人(当然,他们必须通过相当高的技术技能才能被聘用),而是那些除了分析能力之外还拥有许多重要的**【软技能】**的人。本文将我在麦肯锡工作期间的经验和观察总结为 5 条经验,这将帮助你成为一名更好的数据科学家。
GIF by GIPHY
作为一个热爱精确的数据人,我想指出的是,尽管“数据科学家”这个头衔涵盖了当今行业中的各种工作,但在本文中,我主要关注的是给数据科学家的提示,这些提示会以任何形式影响业务决策(而不是那些更注重研究的“核心数据科学”角色)。
第一课。自上而下的沟通是关键
自上而下的沟通,或称金字塔原则,是由麦肯锡合伙人芭芭拉·明托创造并推广的,被许多人视为商业(甚至个人生活)中最有效的沟通结构。尽管这是战略顾问等一些人的第二天性,但许多数据科学家在这种沟通方面犯了错误。这个想法很简单:当你试图传达一个想法/论点时,如果你以一个关键信息开始,然后是几个主要论点来支持这个关键信息,这是最有效和最容易让观众理解的;如果需要,每个参数后面可以跟有支持数据。
采用自上而下的沟通是有利的,原因如下:
- 关键的要点是放在前面和中间:如果你在一封电子邮件/备忘录的开头看到了 TLDR ,或者在一篇研究论文的开头看到了执行摘要,你就会明白这一点的重要性。提前传达关键信息将确保你的听众得到一个大概的想法,即使他们没有抓住所有的细节。
- 演示/沟通可以很容易地针对不同的受众进行定制:您可以准备一套沟通,并将其保持在“关键信息”的水*上,为 c 级高管提供主要论点,并为同行和其他对杂草感兴趣的分析型受众提供详细信息。
不幸的是,对于数据科学家来说,他们的工作大部分时间都在进行深入的分析,这种沟通结构可能不是自然形成的,可能是违反直觉的。我经常看到数据科学家以深入的细节开始演讲或交流,却没有让观众理解关键信息。
如何实践:实践这一点的一个简单方法是在会前根据这个结构记下你的想法,以便在交流你从分析中得出的关键发现时让自己保持在正确的轨道上。经常后退一步问自己你实际上在试图解决什么问题也是有帮助的;这应该是你传达的关键信息。
作者图片
第二课。自己做“翻译”
如果你看看麦肯锡建议的公司数据组织的蓝图,它强调了一个被称为“翻译者”的角色的重要性,该角色被认为是业务和数据团队之间的沟通桥梁,将分析性见解转化为业务的可操作性见解(我假设这个角色部分是由于我在上面提出的观点的挫败感而产生的)。我敢肯定,作为一名数据科学家,你已经被要求“像向一个五岁的孩子解释一样解释它”或“用简单的英语解释它”。从其他人中脱颖而出的数据科学家正是能够做到这一点的人——充当他们自己的翻译;如果被问到,他们可以向既没有分析背景也没有时间阅读白皮书的首席执行官们很好地解释他们的 ML 模型,并且他们总是可以将他们的分析结果与业务影响联系起来。这些数据科学家因以下原因而受到重视:
- 很难从非分析型的人那里得到“翻译”:麦肯锡确实试图培养一批战略顾问成为不同分析研究的“翻译”;但在我看来,从来没有成功过。原因很简单:为了准确解释复杂分析的关键要点并准确反映警告,你需要一种分析心态和深刻的理解,这是通过几周的分析训练营培训无法实现的。例如,如果你不知道肘方法,你如何解释你为 K-means 选择的聚类数?不知道 SSE 是什么怎么解释肘法?。作为一名 DS,你花在教授这门不太成功的速成课程上的时间,或许更应该花在打造自己的沟通风格和自己翻译上。
- 如果 DS 能够解释他们自己的分析,精确性的损失是可以避免的:我相信大多数人都玩过“电话”游戏或它的变体。信息传递的时间越长,就越难保持其准确性。现在想象同样的过程发生在你的分析工作上;如果你依赖他人来解释/翻译你的工作,当信息到达最终用户时,它可能会偏离现实。
GIF by GIPHY
**如何实践:**与朋友(最好是没有任何分析背景的朋友)一起实践,向他们解释你的模型/分析(当然不要透露任何敏感信息)。这也是在你的方法中发现知识缺口的好方法;就像《大讲解员》理查德·费曼认为的那样,如果你不知道如何用简单的方式解释某件事,很多时候是因为你自己还没有理解好。
第三课。以解决方案为导向是第一法则
这不仅限于数据人才;对于在的人来说,这是一家公司的任何职能/角色所必不可少的。能够发现问题并提出担忧当然非常有价值,但更令人赞赏的是提出潜在解决方案的能力。如果没有一个以解决方案为导向的人在房间里,讨论可能经常会陷入困境,而不是试图找出前进的道路。
在大多数顶级咨询公司,以解决方案为导向是首要原则,在我看来,这种方法也应该适用于技术领域。作为一名数据科学家,当人们由于缺乏分析背景而提出荒谬的数据要求时,您可能会经常遇到令人沮丧的情况。我见过无数的 DS 不知道如何处理这些情况,并且因为总是唱反调而在利益相关者管理方面失败。不要把他们拒之门外,要以解决方案为导向,用你对数据和分析工具的更好理解,帮助他们重新定义问题并限制范围。
面向解决方案并不意味着你永远不能对任何事情说不,或者总是必须有已经起草好的完美解决方案;这意味着在你说的每一个“不”字后面,你都应该有一个“但是……怎么样?”。
**如何实践:**当你遇到问题时,在向你的团队或经理报告之前,花点时间想想你可能解决问题的方法。在解决问题时发挥你的创造力,不要害怕成为提出新解决方案的人。从你的工作流中扩展出来,了解更多关于业务和其他团队的工作也是有帮助的。了解全局通常有助于将点点滴滴联系起来,引导你找到创造性的解决方案。
GIF by GIPHY
第四课。在商业环境中建模时,可解释性胜过精确性
没有人真的想预测客户流失,每个人都在试图理解客户流失
如今,当每一家公司都在建立模型来预测客户流失时,很难退一步问自己为什么我们要在第一时间预测客户流失。公司希望预测客户流失,以便找到可行的解决方案来防止客户流失。因此,如果你的模型告诉首席执行官“网站访问量的立方根是表明客户流失的最重要特征之一”,他能利用这些信息做什么呢?可能没什么…
作为一名数据科学家,像你们中的许多人一样,我过去只关注准确性,作为建模时的成功衡量标准。但是我逐渐意识到,如果不能将其与业务影响联系起来,通过添加不可解释的功能和微调超参数将准确率从 96%提高到 98%对业务毫无意义(同样,这仅适用于面向业务的 DS,对于 ML 的某些领域,这种提高可能意味着全世界)。
如果模型是一个黑箱,也很难从高管那里获得信任。模型是一种在一天结束时指导商业决策的工具,所以它的价值很大程度上基于它的实用性和可解释性也就不足为奇了。
**如何实践:**在构建模型或执行分析时,始终将业务影响牢记在心。在建立模型时,避免将随机的交互特征扔向模型,并希望其中一个能够坚持下来;相反,在开始构建模型之前,应该对特征工程阶段进行充分的考虑。写下来自模型/分析的业务建议也将帮助您重新评估您在构建模型时所做的设计选择。
第五课。确保有一个假设,但不是和一个假设结婚
作者图片
从特性探索到探索性数据分析(EDA),将假设作为大多数分析的起点非常重要。如果没有假设,你就不知道如何为 EDA 分割数据,或者先测试哪些特性。没有假设,甚至没有必要进行 AB 测试(这就是为什么它被称为假设测试)。但我时常观察到,数据科学家在没有明确假设的情况下钻研低头分析阶段,后来迷失在兔子洞里。或者更常见的情况是,数据科学家将假设构建过程完全留给团队成员,而不了解数据,后来意识到没有足够的数据来测试这些假设。在我看来,最好的方法是让数据科学家从一开始就参与这些假设集思广益会议,并使用假设来指导和优先考虑后续分析。
假设固然重要,但它们应该是起点,而不是终点。一次又一次,我看到许多数据科学家(或与数据科学家一起工作的人)坚持一个假设,尽管有相互矛盾的发现。这种对最初假设的“忠诚”会导致数据窥探和篡改数据以符合特定的叙述。如果你熟悉“辛普森悖论”,你就能理解数据在讲述“错误故事”中的力量。优秀的数据科学家应该能够保持数据的完整性,并使叙述符合数据,而不是相反。
如何实践:为了想出好的假设,建立商业理解和敏锐度是很重要的。在探索数据的过程中,请记住这些假设来指导你,但是当数据告诉你一个与你最初的“有根据的猜测”不同的故事时,请虚心接受。拥有良好的商业意识也将有助于你在这个过程中调整你最初的理论,并根据数据调整你的叙述。
当谈到面向业务的角色时,人们往往认为人才可以分为两类:分析型和战略型,好像这两种能力位于光谱的相反两端。好吧,我告诉你一个秘密,最好的分析人才是那些也了解事情的战略/业务方面,并了解如何与业务利益相关者沟通的人,战略角色中最好的人才对分析和数据有一定的理解。
Python 中生成加权随机数的 5 个层次
原文:https://towardsdatascience.com/5-levels-of-generating-weighted-random-numbers-in-python-80473c9b0df?source=collection_archive---------7-----------------------
像技术领导一样赢得算法面试
图片由 Gerd Altmann 从 Pixabay 拍摄
在 Python 中获得一个随机数很简单,因为有一个名为random
的内置模块。但是加权随机数呢?
我们来看一个真实的面试问题:
有一个字典如下:
*my_nums = {'A': 5, 'B': 2, 'C': 2, 'D': 1}*
键是四个字母,值是它们的权重。
请设计一个可以根据权重随机生成字母的函数。
(换句话说,这个函数应该有 50%的概率生成“A”,20%的概率生成“B”,20%的概率生成“C”,10%的概率生成“D”。)
如果你对 Python 非常熟悉,可能知道我们可以用 Python 3.6 引入的一个叫做random.choices()
的方法,或者 Numpy 中类似的方法来解决问题。
但是,技术面试不是为了测试你能不能记住一个特殊的 API。它旨在测试你是否能自己设计并实现一个算法。所以,面试官可能会问你:
"你能自己设计并实现这个方法吗?"
其实这是一个非常好的面试问题。因为不同水*的程序员对它会有不同的想法。所以区分初级和高级 Python 开发人员是很容易的。
本文将深入探讨这个问题的 5 种不同解决方案,从最直观但效率低下的方法到最佳答案。
第一级:最直观但效率低下的方法
如果我们的候选列表包含每个字母的期望数目,这将成为一个简单的问题。
如上所示,最直观的解决方案是生成一个列表,其中包括基于字母权重的每个字母的预期数量,然后从该列表中随机选择。
但是,如果有很多字母,并且它们的权重是更大的数字,这种解决方案显然不是很高效。因为我们会浪费很多时间来生成列表。
级别 2:避免生成大的列表
实际上,前面的解决方案的列表是不必要的。
因为总重量是 10 (5+2+2+1)。我们可以先生成一个 1 到 10 之间的随机整数,然后根据这个数返回一个字母:
上面的代码避免了像前面的解决方案那样生成列表,因此效率更高。
但是我们必须写很多代码,这看起来很难看。
第三级:避免写太多代码
事实上,我们不必将r
与所有范围进行比较。
如下面的例子,我们可以从r
中依次减去一个权重,任何时候结果小于或等于零,我们返回它:
第 4 级:用数学技巧让它更快
很明显,对于前面的解决方案,r
越快达到 0,我们的算法就越有效。
那么,如何才能让 *r*
更快的达到 0 呢?
直观来看,如果r
一直减去当前最大权重,会更快达到 0。所以,在运行weighted_random()
函数之前,我们可以按照权重从大到小对my_nums
进行排序。
如果你知道数学期望,我们可以用它来证明这个想法。
例如,以下是条目顺序不同的my_nums
词典。对于每一个字典,让我们计算它的数学期望,得到一个随机的字母需要多少步。
1.最佳订单
{A:5, B:2, C:2, D:1}
e = 5/10 * 1+2/10 * 2+2/10 * 3+1/10 * 4 = 19/10
2.最差的订单
{B:2, C:2, A:5, D:1}
e = 2/10 * 1+2/10 * 2+5/10 * 3+1/10 * 4 = 25/10
3.最差订单
{ D:1, B:2, C:2, A:5}
e = 1/10 * 1+2/10 * 2+2/10 * 2+5/10 * 5 = 34/10
如上所示,将权重从大到小排序的最佳顺序需要最少的*均步骤才能得到结果。
级别 Python 的应用方式
到目前为止,我们的解决方案已经足够好了。但仍有空间让它变得更好。
事实上,第 4 级解决方案引入了一个新的耗时步骤。因为我们首先要对字典进行排序。当这是一本更大的字典时,它完全不够高效。
在引擎盖下,内置的 Python 函数random.choices()
应用了一个更聪明的想法。它使用累积权重而不是原始权重。由于累积权重是升序排列,我们可以使用二分搜索法更快地找到位置。
基于我们的问题,让我们来实现这个伟大的想法:
现在,这个解决方案应用了 Python 的random.choices()
方法的相同思想。(对了,我们可以在 GitHub 上查看这个内置方法的源代码。)
如果我们能在这个层面设计我们的解决方案,我们肯定会在技术面试中胜出。
结论
要想在技术面试中胜出,仅仅记住一个特殊的内置方法是不够的。你需要知道它是如何在引擎盖下工作的,如果你能自己实现它就太好了。
感谢阅读。如果你喜欢,请关注me,成为 中等会员 享受更多关于编程和技术的精彩文章!
更多有趣的 Python 帖子给你:
https://medium.com/techtofreedom/the-art-of-writing-loops-in-python-68e9869e4ed4 https://medium.com/techtofreedom/5-uses-of-asterisks-in-python-3007911c198f
5 个心智模型有助于提升您的数据科学职业生涯
原文:https://towardsdatascience.com/5-mental-models-to-help-boost-your-data-science-career-2a40fd9b7d8f?source=collection_archive---------2-----------------------
办公时间
激发超级思维的简单框架
照片由科尔顿鲟鱼在 Unsplash 上拍摄
我们成年后 50%或更多的时间花在事业上。我们做出的许多决定都会对我们的职业生涯产生直接或间接的影响。这可能是关于换工作,搬到一个不同的城市,选择一个爱好项目,或学习一个数据科学主题。深思熟虑的决定确保事业成功。我们每个人都会犯一些错误,这是很自然的。但是没有足够的奢侈去做太多错误的决定,因为每个错误的决定都要花费时间和金钱。在这里,我将展示一些简单的工具,您可以采用这些工具来确保在数据科学领域取得成功。
心智模型是一套惊人的框架,有助于清晰的思考。这有助于做出更好的决定。在这篇文章中,我将分享一些心智模型,以及关于拥抱它们。
心智模型如何帮助提升您的数据科学职业生涯?
采用心智模式将有助于训练你的大脑进行批判性思维。这有助于我们更好地理解问题,并提出更好的解决方案。这是数据科学项目成功的秘诀。是的,你对问题的理解比你的技术能力更重要。
心智模型也有助于更好地了解我们自己和我们的目标。它有助于获得重要问题的答案,
- 我应该提高什么技能来增加我的收入潜力?
- 什么数据科学角色更适合我?
- 作为一名数据科学家,我在工作中有足够的机会成长吗?
- 下一份工作应该期待什么?
- 我应该申请什么类型的数据科学职位?
- 我的优点和缺点是什么?
我们将详细了解采用以下 5 种流行的心智模式,
- 第一性原理思维
- 二阶思维
- 倒置
- 地图与区域
- 费曼技术
第一原理思维
这个框架有助于清楚地理解一个问题的基本要素。我是在阅读阿什莉·万斯(Ashlee Vance)的《埃隆·马斯克》(Elon Musk)一书时接触到这个概念的。阿什利解释说,埃隆可以选择以大约 6500 万美元的价格为 SpaceX 购买一枚火箭。但是,他选择使用第一原理思维,以十分之一的成本自己建造它。
要采用基本原则思维,请遵循这个简单的方法
- 尽你所能定义这个问题
- 把问题分解成基本要素
- 尝试改变一个或多个基本面
- 从头开始构建新的解决方案
第一原理思维的另一个流行例子是滚动手提箱的发明。人们总是把重物举过头顶或扛在肩上。大约在公元前 400 年,我们开始用牛车运输重物。但直到 20 世纪 70 年代,轮子才被装在手提箱上,用来装载个人物品
第一原则思维可以方便地解决大多数数据科学问题。它有助于更好地理解问题,并提出可能的最佳解决方案。要了解如何将基本原则思维应用于数据科学问题,请阅读下面的文章
[## 如何用第一性原理思维解决数据科学问题?
towardsdatascience.com](/how-to-use-first-principle-thinking-to-solve-data-science-problems-db94bc5af21)
二阶思维
大多数人试图只解决眼前的问题。没有太多关于后果的思考过程。任何人都能想出解决问题的办法。但是,要想出一个理想的解决方案,还需要考虑后果。
照片由布鲁斯·马尔斯在 Unsplash 上拍摄
二级思维有助于超越解决方案。看到大多数人看不到的东西,就能取得惊人的成果。不采用其他思维模式没问题,但不采用这种模式可能代价高昂。采纳这一点非常容易,总是问更多的问题,想接下来是什么?
一个著名的不使用二阶思维的失败例子是泰坦尼克号悲剧。没有足够的措施来处理并发症。这艘载有 1500 多人的船只有 16 艘救生艇,只够船上 1/3 的人使用。船员们没有合适的照明设备,也没有望远镜。因此,不使用二阶思维可能会导致非常糟糕的后果。
在数据科学环境中,在向业务团队提供建议时。总是考虑所有可能的结果。有些结果是立竿见影的,有些可能需要更多的时间。但是,应该在考虑结果之后选择最终的解决方案。例如,提高客户保持率的一种方法是向更容易流失的客户提供折扣。不过,最有可能的是,这些客户可能会继续留下来。但我们需要了解后果,比如,它可能会对其他客户产生什么影响?这种折扣在多长时间内有助于留住顾客?是否会导致与竞争对手的价格战?从长远来看,这一战略是否可持续?
反转
这种思维模式可能不会给你带来最佳的解决方案。也许甚至没有接*它,但它将确保你避免问题。我发现这种方法有时很有启发性。
让我们考虑一个更相关的例子,您计划学习一个新的数据科学主题。达到你的目标可能有多种途径。你可以报名参加一门课程,你可以向朋友学习,你可以做一个项目,通过做事情来学习。选择正确的课程可能会令人困惑,比如所有不同的课程是什么?或者,有什么爱好项目可以帮助我学习题目?反转法是指从正常的方式中走出来,开始思考相反的方向。比如,什么会阻止你学习这个话题,什么会让你很快厌烦。因此,逆向思维不仅有助于识别障碍,也有助于消除不太合适的选择。
这种方法适用于任何数据科学问题。例如,假设问题陈述是,增加客户群。我们应该考虑有助于获得新客户的策略。但与此同时,我们应该使用逆向思维来了解可能导致客户流失的触发因素。否则,即使获得了新客户,也可能会有许多现有客户流失。因此,对企业的建议必须包括获取新客户的方向和防止客户流失的策略
地图 vs 领地
这项技术是关于识别地图和区域之间的区别。地图基于某个时间点的快照提供了更高级别的视图。领土显示了真实的现实。
照片由 N. 在 Unsplash 上拍摄
这里我说的地图是指
- 我们根据经验设计的策略
- 案例研究或白皮书中的建议
- 逐步指南
我说的领域是指执行中的现实。一个策略以前的成功并不能保证将来的成功。此外,仅仅因为许多人遵循一步一步的指导并不意味着它会帮助你实现你的目标。
这并不意味着我们需要忽视基于以往经验或书本的策略。关键是我们需要明白,有一种基于现实的定制需求。例如,流行的学习数据科学的分步指南可能不适合你。也许是因为你的个人承诺、目标和专业水*。但是如果你从指南中挑选有用的见解,并把它们应用到你的计划中。成功的机会肯定更大。
以下是一些问题,将帮助您调整地图(战略/指南)与区域(您的现实)战略
- 谁创造了这张地图?为什么呢?
- 这张地图是什么时候制作的?现在用起来是不是太旧了?
- 地图会出什么问题?
- 如何让地图更有用?
- 从地图上应该忽略什么?
- 地图中考虑了哪些假设?
这些问题将帮助您了解我们正在讨论的地图是否仍然可用,或者需要进行哪些更改以使其适应性更强?
在数据科学项目环境中,假设您已经成功降低了在线商品的客户流失率。这并不意味着你可以轻松解决所有商家的客户流失问题。这取决于客户群、他们的概况、接触点和其他模式。来自成功的学习是好的,但是你需要让他们适应新的领域以确保成功
费曼的技术
费曼是历史上最伟大的物理学家之一。他以分解一个复杂的问题并用非常简单的术语解释它而闻名。这种技术可以用来更好地理解任何复杂的主题。
在数据科学职业生涯中,总是有大量的场景可以应用费曼的技术,
- 为了更好地理解您正在学习的新主题
- 达成一个简单的叙述,以便与业务涉众进行讨论
- 为团队中的新成员设计数据科学培训计划
以下是费曼技术中的简单步骤,可以应用到您的场景中,
第一步——你对这个话题了解多少?
- 写下你所知道的关于这个话题的一切。
- 如果这是你第一次学习这个话题,花些时间阅读一下
- 写下你对题目的理解。
第二步——你会如何向一个青少年解释这个话题?
- 保持事情足够简单,以便他们能被一个孩子理解
- 保持你的叙述简短,因为孩子们的注意力持续时间较短。
- 不要使用任何行话,避免使用任何复杂的术语
第 3 步——了解差距
- 基于步骤 2,了解你缺乏理解或需要更多阅读的领域。
- 努力弥补你的差距,直到你能够用简单的术语解释或谈论它们
第 4 步——精炼你的叙述
- 现在是时候把事情按正确的顺序进行,并进行叙述了。
- 如果你没有听众,那就和你的朋友分享,并获得他们的反馈
保持联系
- 如果你喜欢这篇文章,并对类似的文章感兴趣,在 Medium 上关注我
- 我在我的 YouTube 频道上教授和谈论各种数据科学主题。在这里订阅我的频道。
- 在此注册我的电子邮件列表,获取更多数据科学技巧,并与我的工作保持联系
2021 年 Gartner 数据和分析峰会的 5 个“元”要点
原文:https://towardsdatascience.com/5-meta-takeaways-from-the-gartner-data-and-analytics-summit-2021-2cc6cdf037b2?source=collection_archive---------23-----------------------
关于活动元数据,您应该知道什么,以及如何使用它来构建前瞻性数据堆栈
马克西姆·霍普曼在 Unsplash 上的照片
我很高兴能参加今年 6 月初举行的 Gartner 数据&分析峰会,我参加了 50 多场会议,重点讨论帮助数据和分析领导者满足当今和未来需求的策略和讨论。
在这些会议中,一个反复出现的概念是活动元数据:似乎正在推动 2021 年主要趋势的隐藏力量:增强数据目录、自主数据操作、数据结构和数据网格、数据和分析治理以及数据工具的消费化。
在本文中,我将解开活动元数据的基础,并列出有助于您利用活动元数据构建前瞻性数据堆栈的 5 个要点。
1.扩充数据目录现在是企业必备的东西
我们喜欢将现代数据堆栈视为神奇的解决方案,但即使是拥有现代基础架构的现代数据团队也常常难以找到并记录他们的数据。
今天的数据团队正面临着这些编目挑战:
- 他们对哪些数据存储在哪里知之甚少。
- 他们往往花更多的时间寻找数据,而不是实际分析数据。
- 他们发现很难在业务用户之间跨数据资产共享上下文。
今天的传统数据目录不能很好地解决这些问题。
然而,机器学习-增强数据目录会主动抓取和解释元数据来解决这些问题。它们支持实时数据发现、数据资产的自动编目以及更好的数据环境,所有这些都显著缩短了从问题到洞察的时间。
不确定什么是机器学习数据目录(MLDC)? 在此了解更多 。
图片由 Atlan 提供。
2.活动元数据是自主数据操作的关键
“Gartner 预计,到 2023 年,利用活动元数据、机器学习和数据结构来动态连接和自动化数据管理流程的组织将减少其数据交付时间,并对价值产生 30%的影响。”
—罗伯托·托雷斯、 CIO 潜
传统的数据目录只是被动地包含和组织技术元数据,即关于组织数据的基本信息。然而,主动元数据无处不在地寻找、丰富、编目和使用所有这些类型的元数据,采用传统的“被动”技术,使之真正面向行动。
这有助于组织最大化其数据的价值,并在目录深入研究用户活动、跨数据资产的联系等时找到更深入的见解。因此,激活元数据是建立为组织中不同数据用户工作的数据操作框架的第一步,也是最重要的一步。
3.激活元数据对于启用数据结构至关重要
数据结构是一个统一的环境,由一个架构和运行在该架构之上的数据服务组成,可帮助组织管理其数据。可以把它想象成一个跨越所有不同数据源和端点的“织物”。
“数据结构利用对现有的、可发现的和可推断的元数据资产的持续分析,来支持跨所有环境(包括混合和云计算*台)的集成和可重用数据的设计、部署和利用。”
— Ashutosh Gupta, Gartner
数据结构不是一种现成的工具或技术。相反,它由各种工具、资源和流程组成。数据结构是一个新兴的设计框架,它识别并连接来自不同应用程序的数据,以发现可用数据点之间独特的、与业务相关的关系。
目前,没有任何独立的工具或解决方案能够充当成熟的数据结构体系结构。相反,起点是投资元数据管理解决方案。这些需要支持元数据的摄取、共享、管理、激活和用知识图表示。获取正确的元数据是为数据系统设置可组合数据结构的第一步。
4.元数据管理工具的消费化
现代数据堆栈发展迅速且多样化。很容易在几秒钟内以很少的开销进行扩展,但在为数据带来治理、信任和上下文方面可能会很痛苦,这就是活动元数据在生态系统中不可或缺的地方。
过去,数据目录和管理工具是为像数据工程师和科学家这样的技术用户构建的。但是这些*台正变得越来越消费化,或者意味着每个人都可以在日常工作中使用。
技术含量较低的业务人员现在希望快速访问和使用值得信赖的数据,而不是通过向工程师发送电子邮件,而是通过简单的自助服务工具。
这些用户不是负担,而是提供了一个新的视角,这对于组织了解如何使用和组织他们的数据是一个很大的优势。
随着越来越多的业务用户投入到数据中,企业开始意识到缩短数据发现和准备时间以及提供大量上下文来帮助技术水*较低的用户产生和实施其见解的重要性。这就是为什么传统的数据管理工具开始让位于现代的元数据管理工具(例如我的公司 Atlan ),这些工具专注于出色的最终用户体验,就像我们在 Slack 等现代企业技术产品中看到的一样。
这些现代工具不仅更容易被业务用户使用,而且还极大地提高了数据工程团队的生产力。这符合由 Slack 和 concept 等新工具引领的企业技术消费化的大趋势。
5.数据分析和治理能力正在融合
为了理解和信任数据,数据不能在的筒仓中。当没有人知道谁在寻找特定的数据集以及寻找的原因时,多层次的层次结构和管理会使数据问题变得更糟。
这就是为什么治理数据不仅仅是对数据访问施加限制,还包括使数据民主化,并确保数据在正确的时间到达正确的用户手中。
数据治理的最终目标是支持更顺畅、更快速的决策。
今天,我们看到了一种融合,数据治理正在成为数据分析管道中的一个活跃部分。治理现在不是一个好的奖励,而是现代数据生态系统的必备功能,这些生态系统需要开放,更易于所有人访问,而不损害数据安全性或合规性。
觉得这个内容有帮助?在我的时事通讯《元数据周刊》上,我每周都写关于活动元数据、数据操作、数据文化和我们的学习建设的文章。 在此订阅。
这篇文章是我和同事合写的, 斯瓦米 & 拉巴尼 。
Python 中检查 NaN 值的 5 种方法
原文:https://towardsdatascience.com/5-methods-to-check-for-nan-values-in-in-python-3f21ddd17eed?source=collection_archive---------0-----------------------
python 中如何检查单个值是否为 NaN?有使用库和不使用库的方法。
NaN 代表非数字,是表示数据中缺失值的常用方法之一。它是一个特殊的浮点值,不能转换为除 float 以外的任何其他类型。
NaN 值是数据分析中的主要问题之一。为了得到想要的结果,处理 NaN 是非常必要的。
在数组、系列或数据帧中查找和处理 NaN 很容易。然而,确定一个独立的 NaN 值是很棘手的。在这篇文章中我解释了在 python 中处理 NaN 的五种方法。前三种方法涉及库的内置函数。后两个依赖于 NaN 的属性来寻找 NaN 值 。
方法 1:使用熊猫图书馆
pandas 库中的 isna() 可用于检查值是否为 null/NaN。如果值为 NaN/null,它将返回 True。
import pandas as pd
x = float("nan")
print(f"It's pd.isna : {pd.isna(x)}")**Output**It's pd.isna : True
方法 2:使用 Numpy 库
numpy 库中的 isnan() 可用于检查值是否为 null/NaN。类似于熊猫中的 isna() 。
import numpy as np
x = float("nan")
print(f"It's np.isnan : {np.isnan(x)}")**Output**It's np.isnan : True
方法 3:使用数学库
数学库 提供了内置的数学函数。该库适用于所有实数。 处理复数的话可以用 cmath 库。
数学库内置了函数 isnan() 来检查 null/NaN 值。
import math
x = float("nan")
print(f"It's math.isnan : {math.isnan(x)}")**Output**It's math.isnan : True
方法四:与自身比较
当我开始在一家大型 IT 公司工作时,我必须接受第一个月的培训。培训师在介绍南价值观的概念时提到,他们就像外星人我们一无所知。这些外星人在不断变形,因此我们无法将 NaN 的价值与其自身进行比较。
检查 NaN 值的最常见方法是检查变量是否等于自身。如果不是,那么一定是 NaN 值。
def isNaN(num):
return num!= numx=float("nan")
isNaN(x)**Output**True
方法 5:检查范围
NaN 的另一个可用于检查 NaN 的属性是范围。所有浮点值都在负无穷大到无穷大的范围内。
无穷大<任意数<无穷大
但是,楠的值不在这个范围内。因此,如果值不落在从负无穷大到无穷大的范围内,则可以识别出 NaN 。
这可以通过以下方式实现:
def isNaN(num):
if float('-inf') < float(num) < float('inf'):
return False
else:
return Truex=float("nan")
isNaN(x)**Output**True
希望以上文章对你有所帮助。我确信会有许多其他技术来检查基于各种其他逻辑的 NaN 值。请分享你遇到过的检查 NaN/ Null 值的其他方法。
干杯!
成为会员
我希望你喜欢这篇文章,我强烈推荐 注册中级会员 来阅读更多我写的文章或成千上万其他作者写的各种主题的故事。
你的会员费直接支持我和你看的其他作家。你也可以在媒体上看到所有的故事。
你可能会感兴趣的我的其他文章:
sebastiaan stam 在 Unsplash 上拍摄的照片
熊猫小组 5 分钟指南
原文:https://towardsdatascience.com/5-minute-guide-to-pandas-groupby-929d1a9b7c65?source=collection_archive---------31-----------------------
使用这个有用的工具开始数据分析
由 Camylla Battani 在 Unsplash 拍摄的照片
数据分析从根本上讲就是用数据寻找问题的答案。当我们对一组数据执行一些计算或统计时,通常在整个数据集上这样做是不够的。相反,我们通常希望将数据分组,进行计算,然后比较不同组的结果。
数据分析从根本上讲就是用数据寻找问题的答案。
假设我们是一个数字营销团队,正在调查最*转化率下降背后的潜在原因。随着时间的推移,将转换率作为一个整体来看不太可能导致我们找到可能的原因。相反,我们希望比较不同营销流、活动、品牌和时间段的转化率,以确定指标的差异。
Pandas 是非常受欢迎的 python 数据分析库,它有一个 GroupBy 函数,提供了一种高效的方法来执行这种数据分析。在下一篇文章中,我将通过代码示例简要介绍 GroupBy 函数,以了解该工具的核心特性。
数据
在本教程中,我将使用 openml.org 网站上的一个名为“credit-g”的数据集。该数据集由许多提出贷款申请的客户的特征和一个表示贷款是否已偿还的目标变量组成。
数据可以在这里下载,或者使用 Scikit-learn API 导入,如下所示。
基本用法
该函数最基本的用法是简单地将GroupBy
添加到整个数据帧中,并指定我们想要进行的计算。这将生成按您选择的段分组的所有数字变量的汇总。这是快速获取整个数据集摘要的有用方法。
在下面的代码中,我按照作业类型对所有东西进行了分组,并计算了所有数值变量的*均值。输出显示在代码下方。
汇总所有数值变量。图片作者。
如果我们想更具体一些,我们可以取数据帧的一个子集,只计算某些列的统计数据。在以下代码中,我只选择了 credit_amount。
按工作类型列出的贷方金额。图片作者。
我们也可以根据多个变量进行分组。在这里,我计算了*均信贷金额的工作和住房类型。
按工作和住房状况列出的*均信贷额。图片作者。
多重聚合
能够为变量计算多个聚合通常非常有用。[DataFrameGroupBy.**agg**](https://pandas.pydata.org/pandas-docs/version/0.23/generated/pandas.core.groupby.DataFrameGroupBy.agg.html)
功能让这一切成为可能。
在下面的代码中,我计算了每个工作组的信用额度的最小值和最大值。
按工作类型列出的最低和最高信用额。图片作者。
也可以对不同的列使用不同的聚合。在这里,我计算了 credit_amount 的最小和最大金额,以及每种工作类型的*均年龄。
按工作类型分列的最低和最高 cedit 金额和*均年龄。图片作者。
命名聚合
[pd.NamedAgg](https://pandas-docs.github.io/pandas-docs-travis/user_guide/groupby.html#groupby-aggregate-named)
函数允许您为多个聚合提供名称,从而提供更清晰的输出。
NamedAgg 函数提供了更清晰的输出。图片作者。
自定义聚合
还可以对 groupby 应用自定义函数来扩展可能的聚合。
例如,如果我们想计算每种工作类型的好贷款和坏贷款的百分比,我们可以使用下面的代码。
按工作类型划分的好贷款和坏贷款的百分比。图片作者。
测绘
我们可以将内置的 pandas 绘图功能添加到 GroupBy 中,以便更好地可视化趋势和模式。
我扩展了在上一节中创建的代码,创建了一个堆叠条形图,以更好地显示每种工作类型的好贷款和坏贷款的分布。
使用 GroupBy 生成堆积条形图。图片作者。
除了使用 GroupBy 在同一个图表中创建比较之外,我们还可以在多个图表中创建比较。
用一行代码生成多重图。图片作者。
pandas GroupBy 函数是一个工具,作为一名数据科学家,我几乎每天都使用它来执行探索性数据分析。这篇文章是关于这个函数的基本用法的一个简短的教程,但是还有许多更强大的方法可以用来分析数据。
pandas 文档包含了对 GroupBy 函数的所有可能特性和用法的更详细的描述。这可以在这个环节找到。
本教程的完整笔记本和代码可以在这个 Github 库中找到。更多有用的 pandas 方法、函数和技巧,请看我以前的文章。
</10-things-you-didnt-know-about-pandas-d20f06d1bf6b>
感谢阅读!
我每月发一份简讯,如果你想加入请通过这个链接注册。期待成为您学习旅程的一部分
5 分钟机器学习
原文:https://towardsdatascience.com/5-minute-machine-learning-naive-bayes-f48472670fdd?source=collection_archive---------6-----------------------
贝叶斯定理和朴素贝叶斯
图片来自 Unsplash.com,作者: @markbertulfo
朴素贝叶斯是一组简单有效的机器学习算法,用于解决各种分类和回归问题。如果你已经有一段时间没有上统计课了,或者看到“贝叶斯”这个词让你感到不安,那么这可能是一个很好的 5 分钟介绍。我将在 5 分钟内用一个健身房新年决心的例子来解释贝叶斯定理和朴素贝叶斯。我还将在我的 GitHub 中包含一些使用 Scikit-learn 的简单 python 代码。我们开始吧!
贝叶斯定理快速介绍
为了解释朴素贝叶斯,我们需要首先解释贝叶斯定理。贝叶斯定理的基础是条件概率(图 1)。事实上,贝叶斯定理(图 1)只是计算条件概率的一种替代或逆向方法。当联合概率、***【P(A∩B)】较难计算或如果逆或贝叶斯概率、【P(B | A)***较容易计算时,则贝叶斯定理可以应用。
图 1 —条件概率和贝叶斯定理
让我们快速定义一下贝叶斯定理中的一些术语:
- 类先验或先验概率: 事件 A 在对事件 b 一无所知之前发生的概率。
- 预测先验或证据: 与类先验相同,但用于事件 b
- 后验概率: 得知事件 b 后事件 A 的概率。
- 可能性: 后验概率的反转。
贝叶斯定理 vs 朴素贝叶斯:区别是什么?
这一切和朴素贝叶斯有什么关系?你需要知道贝叶斯定理和朴素贝叶斯的区别在于,朴素贝叶斯假设条件独立,而贝叶斯定理不假设条件独立。这意味着所有输入要素之间的关系是独立的。也许不是一个伟大的假设,但这就是为什么算法被称为“幼稚”。这也是算法非常快的一个原因。即使算法是“幼稚的”,它仍然可以胜过复杂的模型,所以不要让它的名字阻止你。下面我将展示贝叶斯定理和朴素贝叶斯之间的符号差异。让我们首先为我们在 Globo Gym 的朋友做另一个贝叶斯定理的例子。
应用贝叶斯定理的步骤
这里有一个简单的例子,将与所有的新年决心相关。Globo Gym 想要预测在给定天气条件下会员是否会去健身房***(attend = yes | weather)***。
步骤 1-查看或收集“原始”数据。
我们有这样的数据,其中每一行都代表会员在天气条件下参加 Globo Gym 的情况。所以观察 3 是在外面阴天的时候去健身房的会员。
weather attended
0 sunny yes
1 rainy no
2 snowy no
3 cloudy yes
4 cloudy no
第二步-将长数据转换成频率表
这提供了天气状况下的出席总数。
attended
no yes
weather
cloudy 1 3
rainy 2 1
snowy 3 1
sunny 1 3
第 3 步-行和列求和以获得概率
weather probabilities
cloudy = 4/15 or 0.267
rainy = 3/15 or 0.20
snowy = 4/15 or 0.267
sunny = 4/15 or 0.267attendance probabilities
no = 7/15 or 0.467
yes = 8/15 or 0.533
查看我们的类先验概率(出席概率),*均一个会员有 53%的可能去健身房。仅供参考,这正是大多数健身房的商业模式:希望很多人注册,但很少参加。然而,我们的问题是,在给定的天气条件下,会员去健身房的可能性有多大。
第五步——将频率表中的概率应用于贝叶斯定理
图 2 显示了我们用贝叶斯定理表示法提出的问题。让我们从上面的频率表中给图 2 中的每个概率赋值,然后重写等式,这样就清楚了。
图 2 -假设天气晴朗,出席概率的贝叶斯定理
可能性 : P(晴|是)= 3/8 或 0.375(总晴和是除以总是)
类先验概率 : P(是)= 8/15 或 0.533
预测器先验概率*:**P(sunny)=*4/15 或 0.267
图 3 -带值的贝叶斯定理
图 3 显示,如果天气晴朗,一个随机成员有 75%的可能去健身房。这高于 53%的整体*均出席率!相反,下雪时去健身房的概率只有 25% (0.125 ⋅ 0.533 / 0.267)。
既然这是一个二元的例子(参加或不参加) P(是|晴天) = 0.75 或 75%,那么反过来 P(否|晴天) 就是 0.25 或 25%,因为概率必须求和为 1 或 100%。
这就是如何使用贝叶斯定理来寻找分类的后验概率。朴素贝叶斯算法与我们接下来要展示的类似。要明确的是,我们的例子中一个明显的问题是,给定天气,我们对所有成员应用相同的概率,这是没有意义的,但这只是一个有趣的例子。现在,让我们讨论额外的功能和使用朴素贝叶斯。
多重特征和使用朴素贝叶斯
几乎在所有情况下,模型中都有许多特征。Globo Gym 的示例特征可以是:年龄箱、会员类型、性别等。让我们展示如何将这些特性融入贝叶斯定理和朴素贝叶斯。
下面的图 4 显示了简化到朴素贝叶斯算法中的贝叶斯定理,该算法结合了多种特征。在贝叶斯定理中,您将计算给定所有特征的单个条件概率(上图)。对于朴素贝叶斯,我们通过计算每个特征的条件概率来简化它,然后将它们相乘。请记住,这就是它被称为“幼稚”的原因,因为所有的特征条件概率都是彼此独立计算的。朴素贝叶斯算法在独立性和去除分母的帮助下得到简化。你可以按照贝叶斯定理的上述步骤来应用这些简单的计算,从而得出贝叶斯定理和朴素贝叶斯之间的关系!
图 4 —简化为朴素贝叶斯的贝叶斯定理
结论
这是对贝叶斯定理和朴素贝叶斯的 5 分钟快速介绍。我们使用了一个有趣的例子,Globo Gym 使用贝叶斯定理预测健身房的出席率。我们解释了贝叶斯定理和朴素贝叶斯之间的区别,展示了简化的符号,并通过独立性假设展示了为什么它是“朴素”的。这里还有很多要补充的,但希望这能让你对贝叶斯定理和朴素贝叶斯算法有所了解。我会在下面的参考文献中添加一些好的读物。我希望你对朴素贝叶斯的好奇心有所增长,并把它融入到你的下一个项目中。
参考
- 这家伙真棒!Jason Brownlee 的文章:机器学习的贝叶斯定理、概率和从零开始开发朴素贝叶斯
- 免费 pdf 的想贝氏书在这里
- 简单代码的 GitHub 回购
- Scikit-learn 朴素贝叶斯文档
解释所有机器学习模型的 5 分钟备忘单
原文:https://towardsdatascience.com/5-minutes-cheat-sheet-explaining-all-machine-learning-models-3fea1cf96f05?source=collection_archive---------3-----------------------
没有时间深入研究流行的机器学习模型?
解释最重要的机器学习模型
马库斯·温克勒在 Unsplash 上的照片
很多时候,恰好你过几天就要面试了,你的日程排得满满的准备。或者可能你正处于修订模式,想看看所有基本的流行机器学习模型。如果是这样的话,你来对地方了。在这篇博客中,我将简要解释一些在采访中最常被问到的机器学习模型。我还将列出与每个模型相关的重要参数,以及找到同一主题的详细解释的来源,因此如果需要,您可以更深入地了解。
由吉菲
机器学习模型可以大致分为监督学习和非监督学习两类。在监督学习中,我们有两大类回归和分类。接下来的几节将对它们进行简要的解释,让您有必要的了解。
分类(按作者分类的图片)
注意:我提供的是模型,我认为这是最常见的模型,应该在接受任何数据科学采访之前准备好。然而,这个列表是主观的。
监督学习
在监督学习中,用于训练模型的数据被“标记”。这意味着每个输入的输出是已知的。例如,如果您的模型试图预测房价,您可能会有一些变量,如房子的大小、楼层数等。当您的数据被标记时,这意味着您还有一个包含房价的变量。
监督学习的例子。作者图片
上面的例子是为了回归。现在让我们仔细看看回归和分类。
分类
在分类中,模型的输出是离散的。例如,考虑狗与猫的图像分类,其中我们预测图像是否包含狗或猫的家庭。类别(这是模型的输出)在这里将是离散的,即狗或猫。现在,我们将浏览常用于分类的模型。
逻辑回归
不要迷茫;名字中有“回归”二字,但用于分类。逻辑回归使用一个方程来创建数据曲线,然后使用该曲线来预测新观察的结果。
逻辑回归(图片由作者提供)
实质上,创建了一个逻辑等式,使得输出值只能在 0 和 1 之间。
详细 解说此处
支持向量机
支持向量机(SVM)在用于分类的数据点之间形成边界。例如,在 2 维的情况下,SVM 将创建一个边界,使得一个类的大部分数据点落在边界的一侧,而另一个类的大部分数据点落在另一侧。
SVM(修改后的图片带 CC 牌照)
所以 SVM 的目标是找到最大化利润的边界(如上图所示)。
重要参数/概念 —内核、C、伽玛、余量
详细解释 此处
决策图表
在决策树中,你基本上是问一些关于你的观察的问题,并沿着树向下直到你得到一个结果,如下所示。
决策树(图片由作者提供)
在上面的例子中,每个正方形被称为一个节点,,这里的节点数量越多,将导致数据集上的模型越过度拟合。
重要参数/概念 —节点、叶节点、熵、信息增益
详细解释 此处
随机森林
它是一种集成学习技术,使用多个决策树来给出最终输出。随机森林基于原始数据集的引导数据集创建多个决策树,并在决策树的每一步随机选择变量的子集。在推理过程中,我们得到所有决策树的输出,最后,我们选择具有最多票数的输出。随机森林通常比决策树更受欢迎,因为它们可以防止过度拟合。
重要参数/概念 —决策树的数量、引导数据的大小、随机森林特征的数量,以及决策树部分提到的所有其他内容。
详细解释 这里的 (也包括其他的合奏方法)
朴素贝叶斯
这个模型需要很强的概率基础。它的工作是基于贝叶斯定理。
作者图片
基本上,我们试图找出“给定一个输入(X),一个特定输出(y)的概率是多少”。我们假设每个输入变量都是相互独立的,所以 P(X|y)可以写成
作者图片
此外,对于所有可能的输出(0,1),P(X)(出现在分母中)将保持不变。所以我们对所有可能的输出计算 P(y|X),概率最高的输出将是模型的最终预测。
详解 此处
神经网络
当今最基本的机器学习模型之一。它被称为神经网络,因为它是模仿我们大脑中神经元的工作方式而设计的。神经网络发现数据集中的模式,有时甚至人类都无法识别。它们非常强大,非常有用,尤其是在处理图像、文本和音频时。
神经网络(图片来自维基百科带 CC 许可)
在上图中,前两个圆圈表示输入图层,中间 5 个圆圈表示隐藏图层,最后一个黄色圆圈表示输出图层。隐藏层中的每个节点代表一个线性函数和一个激活函数。
重要参数/概念— 学习率、损失函数、反向传播、激活函数。
详细解释 此处
回归
在回归中,模型的输出是连续的。例如,考虑房价预测,我们根据房子的大小和层数来预测房子的价格。这个房价将是一个连续的变量,而不是离散的。
线性回归
它类似于逻辑回归。这里我们试图找到一条最符合数据的线。然后,该最佳拟合线用于预测新的数据点。
线性回归(图片来自维基百科
线性回归只不过是直线或*面的方程。该等式包含每个输入变量的系数,反映每个输入变量对输出的敏感度。
重要参数/概念— 回归系数
详解 此处
可用于回归任务的其他重要模型有决策树、随机森林、神经网络等。因为上面我已经讲过了,所以我现在就跳过它们。
无监督学习
在无监督学习中,用于训练模型的数据是“未标记的”。这意味着你只有输入。在无监督学习中,我们试图仅基于输入数据来发现模式。无监督学习中使用的两种主要方法包括聚类和降维。
使聚集
聚类(图片由维基百科提供 CC 许可)
聚类包括基于某些标准对数据点进行分组或聚类。它用于客户细分、欺诈检测、文档分类等。
一些常见的聚类技术包括 k 均值聚类、层次聚类、均值漂移聚类和基于密度的聚类。虽然每种技术在寻找聚类时使用不同的标准,但它们都旨在实现相同的目标。
详解此处
降维
它包括通过寻找/提取一组更重要的变量来减少所考虑的输入变量的数量。有两种方法通过特征消除或特征提取来减少输入特征。
最著名的降维方法之一是基于特征提取的主成分分析(PCA)。
详细解释 此处
结论
我希望这种总结所有重要机器学习模型的尝试对你们所有人都有用。如果你认为有任何改进的余地,或者你想要一个关于任何其他模型的解释,请让我知道。如果你想了解更多关于机器学习的话题,请关注我们的 medium 。
成为 介质会员 解锁并阅读介质上的许多其他故事。
5 分钟数据科学设计模式 I:回访
原文:https://towardsdatascience.com/5-minutes-data-science-design-patterns-i-callback-b5c0738be277?source=collection_archive---------23-----------------------
数据科学设计模式的迷你集合——从回调开始
UnsplashPavan Trikutam
注意:这些系列是为数据科学家编写的软件设计快速入门,比设计模式圣经更轻量级的东西— 干净代码 我希望在我刚开始学习时就存在。设计模式指的是一些常见问题的可重用解决方案,有些恰好对数据科学有用。很有可能其他人已经解决了你的问题。如果使用得当,它有助于降低代码的复杂性。
由于代码块比较多,这里的是语法高亮的版本。
那么,回调到底是什么?
Callback
function,或 call after,简单来说就是一个函数会在另一个函数之后被调用。它是作为参数传递给另一个函数的一段可执行代码(函数)。【1】
**def** **foo**(x, callback**=None**):
print('foo!')
**if** callback:
callback(x)
**return** **None**>>> foo('123')
foo!>>> foo('123', print)
foo!
123
这里我将函数print
作为回调函数传递,因此字符串123
在foo!
之后被打印。
为什么我需要使用回调?
回调在高级深度学习库中非常常见,很可能你会在训练循环中找到它们。
- fastai — fastai 为 PyTorch 提供高级 API
- Keras—tensor flow 的高级 API
- 点燃 —使用事件&处理程序,这在他们看来提供了更多的灵活性
import numpy **as** np
*# A boring training Loop*
**def** **train**(x):
n_epochs **=** 3
n_batches **=** 2
loss **=** 20
**for** epoch **in** range(n_epochs):
**for** batch **in** range(n_batches):
loss **=** loss **-** 1 *# Pretend we are training the model*
**return** loss>>> x **=** np**.**ones(10)
>>> train(x)
14
因此,假设您现在想要打印一个时期结束时的损失。您可以只添加一行代码。
简单的方法
**def** **train_with_print**(x):
n_epochs **=** 3
n_batches **=** 2
loss **=** 20 **for** epoch **in** range(n_epochs):
**for** batch **in** range(n_batches):
loss **=** loss **-** 1 *# Pretend we are training the model*
print(f'End of Epoch. Epoch: {epoch}, Loss: {loss}')
**return** losstrain_with_print(x)End of Epoch. Epoch: 0, Loss: 18
End of Epoch. Epoch: 1, Loss: 16
End of Epoch. Epoch: 2, Loss: 14
回调方法
或者您调用来添加一个 PrintCallback ,它做同样的事情,但是用了更多的代码。
**class** **Callback**:
**def** **on_epoch_start**(self, x):
**pass** **def** **on_epoch_end**(self, x):
**pass** **def** **on_batch_start**(self, x):
**pass** **def** **on_batch_end**(self, x):
**pass** **class** **PrintCallback**(Callback):
**def** **on_epoch_end**(self, x):
print(f'End of Epoch. Epoch: {epoch}, Loss: {x}')**def** **train_with_callback**(x, callback**=None**):
n_epochs **=** 3
n_batches **=** 2
loss **=** 20 **for** epoch **in** range(n_epochs): callback**.**on_epoch_start(loss) **for** batch **in** range(n_batches):
callback**.**on_batch_start(loss)
loss **=** loss **-** 1 *# Pretend we are training the model*
callback**.**on_batch_end(loss) callback**.**on_epoch_end(loss)
**return** loss>>> train_with_callback(x, callback**=**PrintCallback())End of Epoch. Epoch: 2, Loss: 18
End of Epoch. Epoch: 2, Loss: 16
End of Epoch. Epoch: 2, Loss: 14
通常,一个回调定义了几个特定的事件on_xxx_xxx
,表示函数将根据相应的条件执行。所以所有回调都将继承基类Callback
,并覆盖期望的函数,这里我们只实现了on_epoch_end
方法,因为我们只想在最后显示损失。
为做一件简单的事情而写这么多代码似乎有些笨拙,但是有很好的理由。考虑现在你需要添加更多的功能,你会怎么做?
- 模型检查点
- 提前停止
- 学习率计划程序
你可以只在循环中添加代码,但是它将开始成长为一个真正的大函数。测试这个功能是不可能的,因为它同时做 10 件事。此外,额外的代码甚至可能与训练逻辑无关,它们只是用来保存模型或绘制图表。所以,最好把逻辑分开,一个功能按照单一责任原则应该只做 1 件事。这有助于你降低复杂性,因为你不需要担心你会不小心打碎 10 件东西,一次只考虑一件事情会容易得多。
当使用回调模式时,我可以多实现几个类,而训练循环几乎没有被触及。我不得不改变训练函数一点,因为它应该接受 1 个以上的回调。
包装回调列表的回调类
**class** **Callbacks**:
"""
It is the container for callback
"""
**def** __init__(self, callbacks):
self**.**callbacks **=** callbacks
**def** **on_epoch_start**(self, x):
**for** callback **in** self**.**callbacks:
callback**.**on_epoch_start(x)
**def** **on_epoch_end**(self, x):
**for** callback **in** self**.**callbacks:
callback**.**on_epoch_end(x)
**def** **on_batch_start**(self, x):
**for** callback **in** self**.**callbacks:
callback**.**on_batch_start(x)
**def** **on_batch_end**(self, x):
**for** callback **in** self**.**callbacks:
callback**.**on_batch_end(x)
附加回调的伪实现
**class** **PrintCallback**(Callback):
**def** **on_epoch_end**(self, x):
print(f'[{type(self)**.**__name__}]: End of Epoch. Epoch: {epoch}, Loss: {x}')
**class** **ModelCheckPoint**(Callback):
**def** **on_epoch_end**(self, x):
print(f'[{type(self)**.**__name__}]: Save Model')
**class** **EarlyStoppingCallback**(Callback):
**def** **on_epoch_end**(self, x):
**if** loss **<** 3:
print(f'[{type(self)**.**__name__}]: Early Stopped')
**class** **LearningRateScheduler**(Callback):
**def** **on_batch_end**(self, x):
print(f' [{type(self)**.**__name__}]: Reduce learning rate')
**def** **train_with_callbacks**(x, callbacks**=None**):
n_epochs **=** 3
n_batches **=** 6
loss **=** 20
**for** epoch **in** range(n_epochs):
callbacks**.**on_epoch_start(loss) *# on_epoch_start*
**for** batch **in** range(n_batches):
callbacks**.**on_batch_start(loss) *# on_batch_start*
loss **=** loss **-** 1 *# Pretend we are training the model*
callbacks**.**on_batch_end(loss) *# on_batch_end*
callbacks**.**on_epoch_end(loss) *# on_epoch_end*
**return** loss
这是结果。
>>> callbacks **=** Callbacks([PrintCallback(), ModelCheckPoint(),
EarlyStoppingCallback(), LearningRateScheduler()])
>>> train_with_callbacks(x, callbacks**=**callbacks)[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[PrintCallback]: End of Epoch. Epoch: 2, Loss: 14
[ModelCheckPoint]: Save Model
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[PrintCallback]: End of Epoch. Epoch: 2, Loss: 8
[ModelCheckPoint]: Save Model
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[LearningRateScheduler]: Reduce learning rate
[PrintCallback]: End of Epoch. Epoch: 2, Loss: 2
[ModelCheckPoint]: Save Model
希望它能让你相信回调使代码更干净,更容易维护。如果你只是使用简单的if-else
语句,你可能会得到一大块if-else
从句。
参考
- https://stack overflow . com/questions/824234/what-a-callback-function
我希望在我的数据科学职业生涯中避免的 5 个错误
原文:https://towardsdatascience.com/5-mistakes-i-wish-i-had-avoided-in-my-data-science-career-6c22a44304a1?source=collection_archive---------2-----------------------
布鲁斯·马斯在 Unsplash 上的照片
我得到了这些教训,所以你不必这样做
当我第一次从金融转向数据科学时,我觉得自己站在世界之巅——我在我梦想的领域找到了一份工作,我的职业轨道已经确定,我只会低着头努力工作,还有什么可能出错呢?嗯,有几件事…在接下来的一年里,作为一名数据科学家,我很高兴我发现自己在职业生涯早期犯了几个错误;这样,在为时已晚之前,我有时间进行反思和调整。过了一段时间,我意识到这些错误是相当普遍的;事实上,我观察到我周围的很多 DS 仍然在犯这些错误,没有意识到从长远来看它们会伤害他们的数据职业生涯。
如果我的“麦肯锡教给我的能让你成为更好的数据科学家的 5 课”是我从最优秀的人那里学到的,那么这篇文章中的课是我通过艰难的方式学到的,希望我能帮助你避免犯同样的错误。
错误 1:将自己视为步兵而非思想伙伴
在成长过程中,我们总是被基于我们遵守规则和命令的程度来评价,尤其是在学校里。如果你按照课本和练习考试,只要努力学习,你就会成为优等生。很多人似乎把这种“步兵”心态带到了他们的工作环境中。在我看来,正是这种心态阻碍了许多数据科学家最大限度地发挥他们的影响力,并从同行中脱颖而出。我观察到许多 d,尤其是初级 d,认为他们对决策过程没有任何贡献,宁愿退居幕后,被动地执行为他们制定的决策。这就开始了一个恶性循环——你对这些讨论的贡献越少,利益相关者就越不可能让你参与到未来的会议中,你在未来做出贡献的机会也就越少。
我举一个具体的例子,说明在模型开发的情况下,步兵和思想伙伴的区别。在数据收集和功能头脑风暴会议中,以前的我习惯于被动地记录利益相关者的建议,以便我可以在以后“完美地”实施它们。当有人提出一个我知道我们没有数据的功能时,我不会说任何基于假设的话,他们更高级,他们一定知道一些我忽略的东西。但你猜怎么着,他们没有。我后来面临的情况是,我们集体讨论的 50%的功能需要额外的数据收集,这将使我们的项目期限处于危险之中。结果是,我经常发现自己最终处于一个不受欢迎的位置——传达坏消息的信使。努力成为思想伙伴如今,我很早就让自己参与对话,并利用我作为最接*数据的人的独特地位;这样,我可以在早期管理涉众的期望,并提出建议来帮助团队前进。
如何避免这种情况:
- 确保你不要在会议上退缩,在会上你可以从数据的角度贡献一些东西:涉众对度量的定义是否足以满足他们想要度量的东西?数据是否可用于度量该组指标?如果没有,我们能用现有的数据找到代理吗?
- 冒名顶替综合症是真实存在的,尤其是在初级 DS 中;确保你意识到这一点,每当你在质疑是否应该说一些“别人可能已经想到的”或问一个“愚蠢的澄清问题”时,你应该这样做。
- 对其他人正在做的事情保持一定的好奇心。在很多情况下,我发现我可以通过注意到其他人由于对公司数据缺乏了解而可能忽略的差距来增加价值。
错误 2:将自己归入数据科学的特定领域
我想成为数据工程师还是数据科学家?我想处理营销和销售数据,还是做地理空间分析?您可能已经注意到,到目前为止,我在本文中一直将术语 DS 用作许多与数据相关的职业道路的通用术语(例如,数据工程师、数据科学家、数据分析师等)。);这是因为如今在数据世界中,这些头衔之间的界限非常模糊,尤其是在较小的公司中。我观察到许多数据科学家认为自己只是构建模型的数据科学家,不关注任何业务方面,或者只关注数据管道的数据工程师,不想了解公司正在进行的建模。
最好的数据人才是那些能够身兼数职或者至少能够理解其他数据角色的流程的人。如果你想在创业的早期阶段或成长期工作,这就特别方便了,在这种情况下,职能可能还没有专业化,你需要灵活,并承担各种与数据相关的责任。即使你处于一个明确定义的工作岗位,随着时间的推移,你会获得更多的经验,你可能会发现你有兴趣转换到一个不同类型的数据角色;如果你不把你自己和你的技能局限在一个特定的角色上,这个支点会容易得多。
如何避免这种情况:
- 同样,对其他数据角色正在处理的项目保持好奇。安排与同事的定期会议,互相讨论感兴趣的项目,或者让不同的数据团队定期互相分享他们的工作/项目。
- 如果你不能在工作中接触到其他数据角色,那么试着在空闲时间保持/练习你不使用的数据技能。例如,如果您是一名数据分析师,并且已经有一段时间没有接触建模了,那么可以考虑通过像 Kaggle 竞赛这样的外部项目来练习这些技能。
错误 3:没有跟上该领域的发展
自满害死人
每个士兵都知道这一点,每个 DS 也应该知道。对自己的数据技能沾沾自喜,不花时间学习新技能是一个常见的错误。在数据领域这样做比在其他领域更危险,因为数据科学是一个相对较新的领域,仍在经历剧烈的变化和发展;不断有新的算法、新的工具,甚至新的编程语言被引入。
如果你不想成为 2021 年仍然只知道如何使用 STATA 的数据科学家(他存在,我和他一起工作),那么你需要跟上该领域的发展。
不要让这成为你(GIFGIPHY)
如何避免这种情况:
- 报名参加在线课程,学习新概念和新算法,或者温习那些你已经知道但在工作中有一段时间没有用到的知识。学习能力是每个人都应该不断练习的肌肉,成为一个终身学习者可能是你能给自己的最好礼物。
- 注册一份 DS 时事通讯或关注 DS 博客/媒体出版物,养成关注 DS“新闻”的习惯。
错误 4:过度发挥你的分析能力
如果你只有一把锤子,所有的东西看起来都像钉子。不要做那个什么事都想用 ML 的 DS。当我第一次进入数据科学的世界时,我对我在学校学到的所有花哨的模型都非常兴奋,迫不及待地想在现实世界的问题上尝试所有这些模型。但是现实世界不同于学术研究,80/20 法则总是在起作用。
在我之前的一篇关于“麦肯锡教给我的 5 个教训”的文章中,我谈到了业务影响和可解释性有时比你的模型准确性多几个百分点更重要。有时,假设驱动的 excel 模型可能比多层神经网络更有意义。在这些情况下,不要过度使用你的分析能力,使你的方法矫枉过正;取而代之的是,展示你的商业肌肉,做一个有商业头脑的 DS。
如何避免这种情况:
- 在你的军械库中拥有一整套分析技能/工具,从简单的 Excel 到高级的 ML 建模技能,这样你就可以随时评估在这种情况下使用哪种工具是最好的,而不是带着枪去决斗。
- 在深入分析之前理解业务需求。有时利益相关者会要求 ML 模型,因为它是一个流行的概念,他们对 ML 模型能做什么有不切实际的期望;作为一名 DS,你的工作就是管理期望,帮助他们找到更好更简单的方法来实现他们的目标。记得吗?做思想的伙伴,而不是步兵。
错误 5:认为建立数据文化是别人的工作
在我的文章“建立伟大数据文化的 6 个基本步骤”中,我谈到了如果公司没有伟大的数据文化,数据科学家的生活会变得多么糟糕和低效。事实上,我已经听到许多 DS 抱怨无效的特别数据请求,这些请求应该由涉众以自给自足的方式轻松处理(例如,在 Looker 中将聚合从每月一次改为每天一次,实际上只需要两次点击)。不要认为改变那种文化是别人的工作;如果你想看到改变,那就去改变。毕竟,有谁比数据科学家本身更有能力建立数据文化并教育利益相关者关于数据的知识呢?帮助建立公司的数据文化将会让你和你的利益相关者的生活更加轻松。
如何避免这种情况:
- 将为非分析性利益相关者进行培训和开发自助资源作为自己的责任
- 确保你开始实践你所宣扬的;开始将查询链接到幻灯片,将真实的数据源链接到文档,并开始记录您的代码和数据库。你不可能在一夜之间建立起数据文化,所以这肯定需要耐心
我确实想指出,在你的职业生涯中犯错误是没关系的;最重要的是从那些错误中吸取教训,并在将来避免它们。或者更好的是,把它们写下来,以帮助其他人避免犯同样的错误。
初次学习编程时要避免的 5 个错误
原文:https://towardsdatascience.com/5-mistakes-to-avoid-when-first-learning-to-program-431dc1fa190a?source=collection_archive---------11-----------------------
一开始的快速进步并不意味着高效的学习过程
Unsplash 上 AltumCode 拍摄的照片
我们生活在一个科技的世界里;无论你往哪里看,你都会发现一种使用算法或程序来工作的设备或工具。从我们的手机、智能电视、手表,甚至烤箱和洗衣机,科技已经成为我们生活中不可分割的一部分。随着技术与我们生活的方方面面交织在一起,许多人对这个领域感到好奇,或者了解事物是如何工作的。
技术作为一种职业道路可以非常令人满意,有利可图,令人兴奋。有了技术职业,你就有机会在维护现在的同时参与建设未来。这是吸引我进入这个领域的核心理念之一。每天都有许多人在考虑进入科技领域,而不管具体是哪个分支。无论你是在考虑成为一名网站开发人员、一名应用程序开发人员、一名数据科学家,还是一名研究人员,你需要迈出的第一步是学习编程。
编程是进入数据科学领域及其所有分支的首要基础。在我看来,编程本身就是一项很好的学习技能,不管最终目标是什么应用。学习编程将教会你如何从结构上思考问题,并用简单的语言表达出来,让计算机执行。
</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 个错误。我试图帮助他们避免错误,以便他们能够以正确的方式学习编程,或者,如果我可以说的话,允许他们轻松学习任何编程语言并掌握他们接下来选择追求的任何分支的方式。
№1:跳过头脑风暴
当你第一次面对一个编程问题时,你开始思考解决方案;一旦你这么做了,你可能会停下来开始实施它。这是人们在学习时犯的第一个错误——我一开始也是这样做的。
有效解决任何问题的一个重要步骤是尝试从不同的角度看待问题,并尝试找到该问题的其他答案,然后检查这些答案,将它们缩小到最有效的答案,或者以您当前的技能水*可以快速实现的答案。
所以,下一次你遇到新的编程问题时,花点时间考虑多个答案,记住,最简单的答案并不总是你首先想到的。
№2:跳过旧的时尚纸笔
如果你正试图以正确的方式学习编程,你不应该跳过先用纸笔或白板的方法来解决问题。我知道当一个人有了解决问题的想法时会有一种冲动,以及你会觉得你想开始在你的答案中编码。但是,这样做将占用你学习如何组装算法的时间。
当你心中有一个答案时,我希望你花一些时间,把这个答案作为一组步骤,从输入到回答的逻辑步骤。在这个阶段,避免使用精确的语法,把重点放在使用想法或概念上。这样,你就试着用你的大脑去思考任何一种编程语言,而不是一种特定的语言。
</7-data-science-myths-that-we-should-leave-behind-in-2021-e5984f62d6fd>
№3:记忆语法
这与上面的错误有关,我认为这是初学者犯的最多的错误。“因此,我们经常试图学习新的技能,”编程专家说,“我们选择一种特定的语言开始,例如 Python、C++或 Java。”。
这三种编程语言有一些共同点,但它们的语法肯定不完全相同。所以,我的大多数学生试图坐下来记忆特定编程语言的语法,记忆函数,不同的做事方法,以及可能的库。
他们通过这样做来思考,他们可以有效地解决任何给定的问题,因为他们可以回忆起他们需要的所有工具。但这不是真的,它只是强迫你在一种编程语言的框架内思考。所以千万不要背语法;如果需要的话,你完全可以用谷歌搜索。
№4:没有投入足够的时间学习基本面
编程本质上是寻找一套有效的步骤来解决一个特定的问题。这组动作就是我们所能计算出的算法。学习如何把一个问题清晰地表达成一系列步骤,本质上就是学习编程。花时间解决问题,在考虑编写代码之前,先找到解决各种问题的步骤。
一旦你习惯了写算法,你就可以开始考虑把你的算法写成代码了。在这个阶段,尽可能多地使用伪代码,因为如果你掌握了这一点,你就可以用任何编程语言编写代码。
</6-new-awesome-features-in-python-3-10-a0598e87689f>
№5:匆忙进入应用程序
这就是为什么人们会犯前面 4 个错误的原因。当人们开始学习编程时,你是有目的的。通常,进入任何技术分支并学习如何编码通常是任何分支学习旅程的前 5 步。
所以,当你在学习编程的基础知识时,你会努力以最快的速度学习,这样你就可以进入你所涉足的领域的核心。但是,我在这里的建议是花时间学习编写“为什么”,因为这不仅会在你将来进入该领域的高级部分时节省你的时间,而且还会给你在未来想要的技术领域之间转换的自由。
最后的想法
如果你正在考虑从事数据科学,你首先需要学习如何编程。当开始学习编程时,人们总是有这样的假设,即编程是复杂的,或者它只是达到应用程序构建技能水*的一个繁琐的步骤。
但是,作为一名编程教师,我总是鼓励我的学生先为了学习编程而教编程,然后再学习应用程序。这种心态将允许他们专注于编程,而不是将其视为旅程中的一步。因为一旦他们接受这种心态,他们将能够掌握编程,从而学习他们想要的任何技术分支。
我教孩子、青少年和成人编程已经有 6 年多了,通过这些年,我注意到我所有的学生都倾向于做一种模式,不管他们的年龄如何。本文探讨了初学者在第一次学习编程时经常犯的 5 个常见错误。
这些错误可能有助于你快速学会用特定的编程语言编程,但是它们不会让你有效地理解它。最重要的是,这些错误会妨碍你完全掌握编程的本质,以及写代码的真正意义。
为机器学习学习数学时要避免的 5 个错误
原文:https://towardsdatascience.com/5-mistakes-to-avoid-when-studying-math-for-machine-learning-6c8bcb2e2d06?source=collection_archive---------8-----------------------
在你的学习方法中要避免哪些陷阱
罗马法师在 Unsplash 上拍摄的照片
如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。
作为一名数据科学家,机器学习是我们解决业务问题的主要工具,也是我们受雇于一家公司的一个原因。然而,仅仅使用机器学习而没有机器学习算法背后的任何数学知识就足够了吗?在我看来,你需要学习机器学习背后的数学。
以下是一些支持我观点的论据:
- 数学帮助你选择正确的机器学习算法。理解数学让你深入了解模型如何工作,包括选择正确的模型参数和验证策略。
- 通过产生正确的置信区间和不确定性测量值来估计我们对模型结果的信心需要对数学有所了解。
- 正确的模型会考虑许多方面,如指标、训练时间、模型复杂性、参数数量以及需要数学来理解所有这些方面的特征数量。
- 通过了解机器学习模型的数学,你可以开发一个适合你自己问题的定制模型。
即使我们知道数学有多重要,学习数学的主要问题是学习曲线有多高。根据我的经验,许多人放弃学习数学是因为他们陷入了阻碍他们发展的学习陷阱。
在这篇文章中,我想概述一下你在机器学习中学习数学时应该避免哪些错误。让我们开始吧。
1.不知道机器学习需要什么数学题目
开始学习数学是令人钦佩的,因为开始总是最难的。虽然意图是有的,但问题是在为机器学习而学习数学时,要确定知道哪个数学题目。毕竟,数学是一个广泛的话题。
我经常遇到的错误是,人们开始学习的数学题目没有触及机器学习需求和没有足够研究什么数学题目支持机器学习领域。我有一个经验,我问别人你如何开始为机器学习学习数学——他们的答案是打开他们的高中数学材料;显然,这是一个错误的学习起点。
我的建议是开始学习机器学习的这个基础数学题目:
- 线性代数
- 多元微积分
- 优化方法
为了支持你在这些数学主题上的学习过程,我会在本文末尾分享额外资源的链接。
2.没有寻求帮助
学习的责任在于你自己,但是向别人寻求帮助总是没问题的。当你不懂某些东西,尤其是数学时,这并不是一件可耻的事情。你看到所有的迷因都在那里;数学是你可能遇到的最困难的事情的化身。
我一直处于不理解书中呈现的数学概念的境地。我试图搜索所有的资料、论文和书籍,但不知何故,我就是不感兴趣。最后,我 决定向某人求助。毕竟,没完没了地寻找材料只是浪费时间。我的熟人解释说,机器学习的数学概念比我读过的任何材料都好,我完全理解他的解释,直到现在,它仍然铭刻在我的脑海中。
我真的鼓励每个人如果不明白就去寻求帮助,特别是那些在数据科学领域和机器学习数学领域开始他们旅程的人。你可以开始向社交媒体上你崇拜的人提问,比如 LinkedIn 或 YouTube。Stackexchange 或 Reddit 也是一个开始数学讨论的好地方,尽管这取决于人们是否会回答你的问题。然而,如果你有不明白的地方,试着寻求帮助。
3。不理解机器学习算法概念就跳到学习机器学习数学
你已经知道要学什么数学题目,但它仍然是一个宽泛的东西。请记住,我们希望学习机器学习的数学,而不仅仅是任何数学主题;这就是为什么我们需要把它和机器学习算法联系起来。
这是我早年曾经犯过的一个错误。我知道要成为一名伟大的数据科学家,我需要了解数学,所以我学习了线性代数。然而,我所学的并没有转化为理解机器学习数学,因为我无法将线性代数数学与机器学习数学联系起来。在这种情况下,我试图通过理解机器学习概念作为我的出发点来改变我的方法。
比如我学生时代,通过导入线性回归模型学习机器学习编码。我知道如何使用这个模型,但我不完全明白它是如何工作的。为了理解线性回归的概念,我开始寻找学习资料,并由此向我介绍了许多新的术语,如线性函数。当我开始理解线性回归概念时,我试图通过学习我发现的每个新术语中的数学概念来更深入地研究。用这种方法,我能够更好地理解数学。
4。专注于数据科学的数学,而不是机器学习的数学
虽然数据科学和机器学习是一个相互交织的主题,但它们本质上有不同的数学概念来支持它们。最根本的错误是学习一个专注于数据科学而不是机器学习的数学概念。
数据科学的数学和机器学习的数学有什么区别?这是目的。当我们学习数据科学时,该领域分析我们拥有的数据,并测试假设以验证我们的假设。这就是为什么我们在学习数据科学时经常学习概率和统计,因为我们依靠概率数学来进行假设检验。
但是,机器学习中的数学就不一样了。他们更关注作为我们使用的许多模型的基本过程的线性代数和用于数值优化的多元微积分,这几乎成为我们使用的机器学习算法的支柱。例如,逻辑回归基于线性函数(因此是线性代数)。通过最大似然估计优化系数(因此需要多元微积分)。
我不会说专注于数据科学数学是一个致命的错误,因为它在你的日常数据活动中仍然有用。此外**,在我看来,数据科学数学是你在学习更多机器学习数学之前需要了解的先决条件**。
5.困在“学生时代”的学习方式中
人类是习惯性动物,所以我们喜欢做我们最熟悉的事情。这包括我们的学习方式,我们被教导只使用笔和书来学习——这意味着我们只专注于理论和回答教科书上的问题。如果你打算专门从事机器学习学术界或者研究,这种学习方式没有错。然而,在工业案例中,你需要一种不同的方法。
在商业环境中,数据科学家需要有快节奏的、灵活的、适用的心态。为机器学习学习数学是相似的;你需要更多地关注数学背后的直觉和应用,而不是定理。当前的技术进步如此之大,以至于所有手工解决问题的费力工作都不再重要。依靠计算能力比在纸上写下每个方程更有意义。
此外,您可以使用 NumPy 之类的计算库来支持您的学习过程。这个软件包是为了让你的生活更轻松而开发的,所以你需要的所有方程式都已经在这个软件包里了。
用于机器学习的数学学习资源
如果有错误,肯定有正确的方法。如果你已经学会了在为机器学习而学习数学时要避免的错误,我想和大家分享一些额外的资源。
- 马克·彼得的《机器学习的数学》
- 加勒特·托马斯(2018)的机器学习数学
- 吉姆·赫夫雷昂(2020)的《线性代数》
- 舒尔曼和学院的多元微积分
- 机器学习的微积分 YouTube 视频
- 优化学习 YouTube 视频
- 杰森·布朗利的机器学习基础数学符号
结论
学习机器学习的数学很重要,原因有很多,尽管你可能会遇到一些学习陷阱;这些错误是:
- 我不知道机器学习需要什么数学题目
- 没有求助
- 不理解机器学习算法概念就跳到学习机器学习数学
- 专注于数据科学的数学,而不是机器学习的数学
- 停留在“学生时代”的学习方式
希望有帮助!
访问我的 LinkedIn 或 Twitter
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
Python 编程中最强大的 5 个一行程序
原文:https://towardsdatascience.com/5-most-powerful-one-liners-you-should-know-in-python-programming-c9d49a89b7f3?source=collection_archive---------3-----------------------
编程;编排
这是您可以使用 Python 在一行中完成的事情
来自 Pexels 的 cottonbro 摄影
Python 提供了一组独特的特性!
Python 程序员使用它们以更 python 化的方式快速编写代码。
在这里,我正在讨论我在 1 分钟或更短时间内掌握的 5 个最强大的单行代码(当然你也可以)。
我说的 强大的俏皮话是什么意思??
这些单行代码将使你的程序干净、清晰、简短、易于理解和修改。
如果一行程序令人困惑,难以理解,那么它就不是一个 Pythonic 式的方法!所以,谨慎使用这个强大的工具!⚡️
让我们跳进来吧!
对于一行中的循环
根据 for 循环♻️的用途,有两种方法可以将其压缩到一行中。
- 如果 for 循环体只有一条语句,那么只需将所有内容写在一行中。
例如,印刷从 10 到 15 的所有数字的方块可以在一行中实现,
for k in range(10,16): print(k**2)
一行中的 For 循环|作者图片
- 如果使用 for 循环来填充或创建列表,那么使用 list comprehension。
在上面的同一个例子中,所有数字的*方列表可以创建为,
使用列表理解|图片作者
在这份快速阅读材料中,列举的理解,它的优点和缺点都用有趣的例子详细说明了。👇
💔-python-tricks-for-better-code-511c82600ee1>
在一行中分配多个变量
在 Python 中,可以在一行中将多个值赋给多个变量。举个例子,
一行中的多个变量赋值|作者图片
此外,您可以分配不同类型的值,如整数,浮点,字符串。🔸 🔹
例如,
在一行中分配多个变量|作者图片
更进一步,可以将多个值赋给单个变量。举个例子,
为单个变量分配多个值|按作者排序的图像
正如您在上面看到的,分配给单个变量的所有值构成了一个元组。
交换一行中的值
与其他编程语言不同,Python 在交换两个变量的值时消除了临时变量。
因此,两个变量的值可以在一行中交换。举个例子,
交换一行中的变量值|按作者排序的图像
这不仅限于两个变量,而是可以用任意数量的变量来完成。🏆这是一个有三个变量的例子,
交换多个变量值的一行程序|作者图片
关于交换值的更多信息可以在这里找到— 3 省时的 Python 窍门 。
删除一行中的重复项
使用 Python 数据结构💡高效地删除重复️in 单行。
当您有一个重复值的列表时,这里有一个优雅的技巧来删除重复值。简单来说,把列表转换成集合就完成了!
举个例子,
在 Python | Image by Author 中移除一行中的重复项
在一行中导入所有库
这一行代码在我的代码中总是节省了几行。⏳
pyforest 就是解决方案!!
***pyforest***
是一个 python 包,它在一行中导入了所有常用的包。它不是预装的,因此只有第一次使用时,你需要安装它。
pip install pyforest
与其将每个库都导入到你的程序中,不如写在一行下面,这样你就可以避免所有思考和导入所需库的麻烦。
import pyforest
导入pyforest
后,pd.DataFrame()
、np.arange()
、sns.countplot()
、sys.exit()
等常用 Python 包中的所有函数都可以直接使用。
dir(pyforest)
会给你pyforest
导入的 105 包的完整列表。🍀
Pyforest 导入的包列表|图片作者
总结一下,
我发现在使用 Python 进行数据分析以及复杂的自动化任务时,这些一行程序非常方便。其中一些比如pyforest
不管任务是什么都有用(我不建议使用它,因为如果你在协作项目中工作,它会降低代码的可读性),而其他比如for
循环一行程序在某些情况下是好的。
🚩使用一行程序时,你应该记住 PEP-8 关于一行中最大字符数的准则,即 79 个字符。
现在你可以通过 在这里报名 成为媒介会员,阅读我和其他作家发表的所有故事。如果你这样做,我会得到你的费用的一小部分。欢迎加入我的邮件列表来了解我写作的最新进展。
感谢您的阅读和投入时间!!
Python 编程中最可靠的 5 个函数
原文:https://towardsdatascience.com/5-most-reliable-functions-you-should-know-in-python-programming-654db1bb89f?source=collection_archive---------13-----------------------
编程;编排
Python 函数提高了您的生产力,保持您的代码干净、清晰、简短!
照片来自 Pexels
Python 提供了一堆内置函数!
Python 程序员使用它们快速、清晰地以更 python 化的方式编写代码。
在这里,我正在讨论我在 1 分钟或更短时间内掌握的 5 个最强大、最快的内置函数(当然你也可以)。⏳
我在我的项目中经常使用它们来使代码更快,更容易理解。
这些内置函数将使你的程序干净、清晰、简短、易于理解。
让我们跳进来吧!
地图功能
函数对 iterable 中的每一项应用指定的函数。其语法本身是不言自明的。
map(function,iterable)
例如,让我们创建一个函数来返回一个大写的输入单词。然后将这个函数映射到列表中的每一项。
Python | Image 中 map()函数最简单的例子作者
就是这样!函数makeupper()
应用于列表colors
中的每个项目。
在我的上一个项目中,函数map()
比一个for
循环对列表中的每一项应用复杂函数要快 1.5 倍的⚡。
下面是一个简单函数的执行时间比较⏳。
按作者比较 map()函数和循环|图像的执行时间
随着执行速度的加快,map()
函数提高了代码的可读性。
枚举函数
有时,在使用迭代器时,我们还需要计算迭代次数。♻️
enumerate()是解决方法!!
enumerate()函数为 iterable 添加一个计数器,并以枚举对象的形式返回。这个对象可以直接在for
循环中使用,甚至可以转换成元组列表。
下面是它的语法:
enumerate(iterable, start=0)
一个iterable
必须是一个序列或者一些支持迭代的对象。由于 Python 是一种 0 索引语言,迭代计数器默认从 0 开始。当然,您可以更改迭代计数器的起始数。
让我们继续上一个函数中的颜色示例。
colors = ['red', 'yellow', 'green', 'black']
result = enumerate(colors)
在这个例子中,result
是一个枚举对象,可以直接在for
循环中使用,甚至可以转换成一个列表。
作者在 Python | Image 中枚举()函数
Zip 功能
zip()函数用于使用多个容器的相似索引,以便它们可以作为单个实体使用。
语法和定义一样简单:
它从每个容器或 iterable 中产生一个包含一个条目的元组。
让我们举一个两个列表的例子。
colors = ['red', 'yellow', 'green', 'black']
fruits = ['apple', 'pineapple', 'grapes', 'cherry']
在 for 循环中使用 zip()函数,
Python |作者图片中的 zip()函数
zip()常用于假设容器长度相等的情况。但是,如果容器长度不同,当最小的容器用完时,zip()
功能停止。下面是一个例子👇
使用 zip()函数当容器具有不同的大小或长度时,
Python 中的 zip()函数具有不同大小的 iterable | Image by Author
您可以通过zip()
函数传递列表、元组、集合或字典。
过滤功能
通常,我们需要处理一个 iterable 并提取那些满足给定条件的项。
filter()可以节省您的时间和精力!!
filter()
从一个 iterable 中提取元素,比如 list,提取的元素所在的元组是函数返回 true 的元组。
下面是一个语法:
filter(function, iterable)
为了更容易消化,我们举个例子。让我们创建一个函数来检查单词是否大写。然后使用filter()
从 iterable 中提取所有大写的单词。
作者在 Python | Image 中使用 filter()函数
这里是关于 滤镜() 的官方文档。
🚩学习如何使用 三元条件 在单行中定义函数。
λ函数
Lambda 函数用于创建匿名函数,即没有名称的函数。当我们需要创建一个函数来执行单个操作时,它们非常有用,并且可以用一行代码编写。它的语法是:
lambda parameters: expression
🎯Lambda 函数可以有任意数量的参数,但只能有一个表达式。
例如,lambda x: x+2
就是这样!!刚才我创建了一个函数,它有一个输入参数x
并添加了2
。
然而,正如您所看到的,这是一个匿名函数,不能在后面的阶段调用。因此,要在程序中随时调用它,lambda 函数可以像这样赋给一个函数对象,
add2 = lambda x: x+2
调用这个函数与调用用 def 关键字定义的函数完全一样。举个例子,
add2(10) # It will return 12 as output
Lambda 函数在某些情况下可以是一个很好的一行程序,例如 列表理解。
Lambda 函数作为列表理解|作者图片中的一行程序
如上图所示,newlist
是使用 lambda 函数用一行代码生成的。
总结一下,
我发现在使用 Python 进行数据分析以及复杂的自动化任务时,这些内置函数非常方便。其中一些如zip()
、map()
在很多情况下是有用的,而其他如Lambda
函数在某些情况下是最好的一行程序。
🚩5 个最强大的一行程序甚至可以进一步提高你的编码。
</5-most-powerful-one-liners-you-should-know-in-python-programming-c9d49a89b7f3>
现在可以通过 在这里报名成为中会员 阅读我和其他作家发表的所有故事。如果你这样做,我会得到你的费用的一小部分。请随意加入我的电子邮件列表来保持对我写作的更新。
感谢您的阅读和投入时间!!
2021 年必须知道的 5 个人工智能概念
原文:https://towardsdatascience.com/5-must-know-ai-concepts-in-2021-75d8c1ff938?source=collection_archive---------16-----------------------
人工智能|解释
这是你不想错过的。
道格拉斯·桑切斯在 Unsplash 上的照片
AI 应该通过复制我们的生物来模仿人类的智能吗?或者我们的心理生物学本质与人工智能无关,就像鸟类生物学与航空航天工程无关一样?
这是该领域的人们自其提出以来一直在思考的问题。我们想要建立智能系统,而我们人类可以说是唯一真正智能的物种。从我们身上寻找灵感难道不符合逻辑吗?然而,因为人工智能的构建模块与生物学的基本部件如此不同,我们难道不应该忘记人类,沿着我们的研究引领我们的道路前进吗?
没有人知道人工智能的未来会怎样。我们知道的是,现在的深度学习越来越接*类人认知。也许人类在智力方面并不特别,但进化给了我们一些独特的特征,我们在创建人工智能系统时最好考虑到这些特征。我们已经在这种环境中进化了几千年,慢慢适应了不变的自然法则。为什么不通过模拟我们的抛光机制来绕过这个过程呢?
在这篇文章中,我将谈论目前处于人工智能研究前沿的五个例子。每一个都至少松散地基于人类认知功能的某些方面。这些概念将是未来几年的核心,所以让我们密切关注它们。
变形金刚——人类的注意力
不久前,基于递归的架构主导了自然语言处理(NLP)。如果你面临一个自然语言处理问题——翻译、语音转文本、生成任务——你要么使用门控循环单元(GRU),要么使用长短期记忆(LSTM)。这两种架构是为处理顺序输入数据而设计的。例如,该系统可以将一个英语句子和每个连续的单词翻译成西班牙语。
这些模型的主要缺点之一是消失梯度问题。因为信息是按顺序处理的,所以当系统要输出第一个法语单词时,第一个英语单词只是被记住了。为了解决这一缺陷,研究人员在 2014 年引入了注意力机制。通过模仿认知注意力,神经网络可以衡量环境的影响。不再有信息丢失。
2017 年,谷歌的 AI 团队发表了开创性的论文 注意力是你所需要的全部 。它说:注意力机制强大到足以解决语言任务。我们不需要递归,也不需要顺序处理。他们发明了著名的变压器架构。变形金刚影响深度学习格局的方式只能与 2012 年辛顿的团队赢得 ImageNet 挑战赛时 CNN 在计算机视觉(CV)中的颠覆相媲美。
转换器的工作原理是并行处理一个句子中的所有单词(记号),并学习它们之间的上下文关系。与 LSTM 相反,变压器不按顺序处理数据。训练时间要短得多。如今,变压器是任何 NLP 任务的首选架构。甚至 CV 的科学家也开始将变形金刚应用于图像和视频问题。即使是卷积也不能幸免于关注。
从 2017 年到 2021 年,研究人员进一步开发了变压器,旨在解决各种缺点,提高性能。transformer-XL更大,允许系统在更大的上下文中学习依赖性。GPT-3——它建立在最初的 transformer 架构上——不能越过它的上下文窗口,这使得它没有记忆。改革者解决令人望而却步的培训费用。它提高了效率,减少了培训时间,同时实现了最先进的性能。
*年来,变形金刚最引人注目的一些应用是多任务人工智能,如谷歌的 BERT ,OpenAI 的 GPT 家族——其中 GPT-3 是毫无争议的明星——悟道 2.0 ,它保持着最大神经网络的记录。变压器也是新一代聊天机器人——Meena、 BlenderBot 2.0 或 LaMDA 背后的核心算法。它甚至涉足了生物学领域。几天前 DeepMind 宣布他们已经发布了 AlphaFold 2 的代码和数据库。一个有助于更深入理解蛋白质折叠的模型。
自我监督培训——人类学习
自 2012 年以来,有监督的深度学习系统一直主导着人工智能领域。这些系统从标记的数据中学习,以将新的实例分类到学习的类别中。我们投入大量资源对训练样本进行分类,以方便学习。然而,这些模式匹配系统不像我们一样学习。
强化学习更像我们学习的方式。这些系统生活在一个受限制的虚拟世界中,在这个世界中,它们可以做一组有限的动作来获得奖励。DeepMind 的研究人员几个月前发表了一篇论文,认为“奖励足以”实现通用人工智能。然而,并不是人们所做的一切都是为了优化奖励,就像增强人工智能所做的那样。更不用说我们世界的复杂性,每时每刻可能的行动数量,或者我们想要或需要的复杂性和细微差别。
出于上述原因,研究人员最*对无监督——或 自我监督——Yann le Cun 喜欢称之为学习——的范式产生了更多的兴趣。他认为我们的学习与这些系统相似(至少与其他范式相比)。人类通过观察和感知世界学到很多东西。这就是自我监督学习的意义。
【自我监督学习】就是在学习一个任务之前,先学习代表世界的思想。这是婴儿和动物做的事情*。[……]*一旦我们对世界有了很好的描述,学习一项任务就需要很少的试验和样本。”
- 监督学习系统学习在数据中寻找模式,而不关心世界。
- 强化学习系统学习优化奖励,而不关心世界。
- 自我监督学习系统需要代表世界来理解事物之间的关系。
这些系统可以从输入的可见部分中学习输入的隐藏部分。例如,如果你向一个自我监督的系统输入半个句子,它可以预测缺失的单词。要做到这一点,他们需要对事物之间的关系有更深入的了解(这并不是说他们理解世界的方式和我们一样,事实并非如此)。
对大量标记数据(监督学习)和不可计数模拟(强化学习)的需求是一个障碍。自我监督学习旨在解决这两个问题。这些系统在没有明确告诉它们必须学习什么的情况下学习。没有课。没有任务。
自我监督学习的一些重要成功都与 transformer 架构有关。例如,伯特或 GPT-3 已被证明在语言生成任务中非常成功。在许多 NLP 领域中,自我监督系统现在是最先进的。这些系统的一个显著缺点是它们不能处理连续的输入,例如图像或音频。
"人工智能的下一场革命将不会受到监督,也不会得到纯粹的强化."
——扬·勒昆
即时编程——人际交流
低代码和无代码计划出现在几十年前,是对编码领域日益扩大的技能缺口的一种反应。创建好的代码和知道如何在设计-生产管道的不同点处理任务的技术能力是昂贵的。随着软件产品变得越来越复杂,编程语言也越来越复杂。No-code 旨在为非技术业务人员解决这一差距。这是一种绕过编码让任何人都可以访问结果的方法。
几年前,知道如何编码可以说和说英语一样重要。你要么知道要么错过了很多。工作机会、书籍和文章、论文以及其他技术工作...在未来,智能房屋(domotics)的比例将会增加。技术软件技能可能和现在一样重要,比如知道如何修理水管或坏掉的灯。
在无代码计划和人工智能的未来的交叉点上,我们有即时编程。GPT 3 是最著名的使用提示的人工智能系统。OpenAI 去年发布了 API,人们很快就认识到了提示的独特性。这是不同的东西;既不是与人交谈,也不是正式意义上的编程。Gwern 称之为的提示编程(Prompt programming),可以理解为一种新的编程形式。它不像无代码那样肤浅,因为我们用自然语言与系统交流——我们给它编程。它不像用 C 或 Python 编程那样技术性很强。
GPT-3 引起了研究人员和开发人员的注意,许多人被激励去发现它的缺点。一些人发现 GPT 3 号在应该成功的地方失败了。然而,格温证明他们错了。他认为我们应该像用英语编程一样接* GPT 3 号。我们必须把它做好,不是每件事都顺利。他调整了提示,重复了测试,并成功地教会了 GPT-3 正确地完成任务。他说:
"*【提示】*是使用 DL *【深度学习】*模型的一种相当不同的方式,最好把它看作一种新的编程,其中提示现在是一个“程序”,它对 GPT-3 进行编程以做新的事情。"
GPT-3 激发了用英语编写系统程序的可能性。该系统可以理解我们的意图,并以一种它可以毫无疑问地解释它们的方式将它们翻译给计算机。
一个月前,微软——去年与 OpenAI 合作的微软——发布了 GitHub Copilot。该系统由 GPT-3 的后代 Codex 驱动,是一个强大的代码自动完成系统。微软看到了 GPT-3 在创建代码方面的潜力,以及它如何理解英语并将其转化为编写良好的功能性程序。除了其他功能之外,Copilot 还可以阅读用英语描述某个功能的注释,对其进行解释,并记下该功能。
GPT-3 和 GitHub Copilot 将无代码的承诺和即时编程的潜力结合到一个新时代,这将允许非技术人员进入编码世界。
即时编程的主要优势以及它会成功的原因是,我们人类已经进化到用自然语言交流,而不是用正式语言。英语有一系列我们凭直觉知道的规则。在我们理解我们正在使用的规则之前,我们学习正确地说话。我们不会发明规则,然后遵守规则。我们发现我们已经遵循的规则。
写 Python 或者 C 就不一样了。我们称它们为语言,但它们在很多方面与英语不同。计算机需要明确的、不可解释的命令来知道该做什么。编程语言有严格的语法规则,不能被破坏,否则程序不会运行。这没有捷径可走。在没有提示编程的情况下,如果你想与计算机交流,你必须学习它的语言。甚至像 Python 这样的高级语言也需要相当程度的技术专长,而大多数人都不具备。
即时编程是编码的未来:我们将能够用自然语言编写大多数东西。将会有中间系统来处理我们不精确的、细微的、充满上下文的思想和计算机需要工作的正式指令集之间的转换。
多模态——人类感知
直到最*,深度学习系统还被设计用来解决单峰问题。如果您想在机器翻译方面达到最先进的性能,您可以使用英语-西班牙语文本数据对来训练您的系统。如果你想战胜 ImageNet 挑战,你的系统必须在物体识别方面是最好的,除此之外别无其他。NLP 系统和 CV 系统是截然不同且不可混合的。
现在,研究人员从神经科学中获得灵感,试图模拟我们的感知机制,专注于创建从不同类型的数据中学习的人工智能系统。与其按照专业领域来划分系统,为什么不让它们结合来自视觉和语言来源的数据呢?短信里有信息。图像中有信息。但是在两者的交汇处也有信息。这种多模态系统的新趋势就是谷歌和 BAAI 今年分别用 MUM 和 Wu Dao 2.0 T5 所做的。这是试图让人工系统类似人脑的一个进步。
我们已经进化成了一个多模态的世界。我们周围的事件和物体产生不同种类的信息:电磁的、机械的、化学的……例如,一个苹果有颜色、形状、质地、味道、气味……这就是为什么我们的大脑是多感官的。我们有一套感知系统,可以捕捉世界的多模态性质(其他生物有不同的感知系统,允许它们感知我们在生物学上不知道的模式)。更有趣的是,大脑将来自感知通道的信息整合到现实的单一表征中。
这就是我们可以从给人工智能灌输这种能力中找到效用的地方。如果给一个模型一对文字图像可以让它更准确地表现世界,那么它的预测或行动就会更精确,也能更好地适应环境。这就是今天对智力的定义:“利用遗传能力和学到的知识理解和适应环境的能力。”
一个拥有相当于眼睛、耳朵和手的人工器官以及作为大脑的 GPT-3 的机器人将比任何现有的人工智能都要强大得多。大脑是所有处理发生的地方,但处理的数据也很重要。未来的人工智能系统将拥有传感器、控制器和执行器,它们以一种快速、准确和丰富的信息处理方式相互连接。
焦点仍然在以软件为中心的虚拟系统上,但是一些研究小组已经成功地集成了文本和图像数据。这些网络应该如何结合这两种类型的信息仍然是一个谜(人类也没有完全理解),但目前这些尝试已经成功了。 DALL E , CLIP , MUM , UC ,武道 2.0 就是活生生的证明。
多任务处理和任务转移——人类的多样性
监督和强化的人工智能系统是糟糕的多任务处理系统。即使是像 AlphaZero 这样被设计用来学习不同任务的系统,也必须为每个任务进行遗忘和重新学习。然而,自我监督系统在这方面更胜一筹。原因是他们接受的是任务不可知的训练。因为这些系统没有被明确告知从输入数据中学习什么,所以它们可以应用于不同的任务,而不需要改变参数。GPT 3 号就是这种情况。
GPT-3 最有力的特点之一是它能够用相同的砝码处理不同的任务。该系统不会在内部进行改变,以进行机器翻译、回答问题或生成创意小说。该系统是以无监督的方式从大多数互联网文本数据中训练出来的。但是它不知道如何运用它所学到的东西。在快速编程的帮助下,用户可以调节 GPT-3 来解决给定的任务。根据记录,GPT 3 号在几项未经训练的任务中达到了最先进水*。这就是多任务处理和任务转移的威力。
多任务系统可以将相同的输入应用于不同的任务。例如,如果我把“猫”这个词输入系统,我可以让它找到西班牙语翻译“gato”,我可以让它给我看一只猫的图像,或者我可以让它写一篇关于为什么猫如此怪异的文章。相同输入的不同任务。
这种想法经常与的少投学习结合在一起。有监督的深度学习系统在预先选择的一组类上进行训练和测试。如果一个 CV 系统已经学会了对汽车、飞机和船只图像进行分类,它只会在这三个类别上测试时表现良好。在少量(或零次/一次)学习设置中,系统针对新的类进行测试,而没有权重更新。
一个例子是在测试时向系统显示一辆自行车的三幅图像,然后要求它正常地对汽车、飞机、轮船和自行车图像进行分类。这很简单,因为我们已经在测试时展示了 3 个自行车的例子。一个学会了如何学习的系统(如 GPT-3)应该能够在这些极端情况下表现良好。GPT 3 号证明了这是可能的。而且它的表现也没有被监督系统羡慕的地方。
如果我们结合多任务和少镜头设置,我们可以建立一个系统,能够解决它没有训练过的任务。在这种情况下,我们不是在测试时向系统显示新的类,而是让它执行新的任务。在少数镜头设置的情况下,我们会展示几个任务是如何完成的例子。而且,在没有内部学习任何新东西的情况下,系统现在会被调整来解决新的任务。
例如,让我们以一个在巨大的文本语料库中训练的系统为例。在一次性任务转移设置中,我们可以写:“我爱你-> Te quiero。我讨厌你-> ___”我们通过向系统展示一个例子(一次性设置),隐式地要求系统将一个句子从英语翻译成西班牙语(这是一项未经训练的任务)。
想想看,我们人类是可以做到这一点的。我们是元学习者。我们不只是学会做任务,而是知道如何学会做新的任务。如果我看到有人在打扫房间,我会马上知道怎么做。我明白扫帚的运动必须方向一致才能清洁地板,我会努力协调手和脚,使过渡*稳。我们不仅仅在有人训练我们的时候学习。我们通过观察来学习。几杆任务转移就是这样。人工智能系统开始在这方面做得更好。
订阅我的免费每周简讯明日之心获取更多关于人工智能的内容、新闻、见解和思考!
此外,欢迎在 LinkedIn 或 Twitter 上发表评论和联系!:)
推荐阅读
</5-deep-learning-trends-leading-artificial-intelligence-to-the-next-stage-11f2ef60f97e> [## GPT-3 —全面概述
towardsdatascience.com](/gpt-3-a-complete-overview-190232eb25fd)