数据科学的 5 个必备应用
随着数据科学成为软件行业越来越多的话题,机器学习成为技术领域的前沿,每天都有新的应用程序开发出来,让工作变得更简单、更快速。随着这种令人兴奋的增长,我们不断有新的创造者、科学家和分析师加入终生学习的行列。
今天我决定分享我个人最喜欢的五个工具,有些很明显,有些不太明显。不管怎样,希望有人发现这些工具的推荐是有用的。
5.WSL
这个列表中的第一个工具是 Windows 用户专用的,也就是说,不是我专用的,但是它是在 Windows 中最大化工作流程的一个好方法。对于那些刚刚接触这个概念的人来说,Windows 没有传统的 bash 终端,因为这个操作系统的编程方式与基于 Unix 的系统完全不同。这对普通开发人员的工作流程是一个严重的损害,对于数据科学家来说也是如此。
然而,WSL 允许您在 Microsoft Windows 中运行一个虚拟的 Linux 终端,通常是 Ubuntu。通常情况下,Windows 上的套件需要不断的应用程序切换,“Git-Bash”,“Anaconda Prompt”等。当然,走这条路没有错,但是 WSL 使整个集成变得更加容易,并允许显著增强的工作流,尤其是在与团队合作时。
4.数据库浏览器
很多人可能没有听说过 DB-Browser。DB-Browser 允许您查看数据库的内部结构,并熟悉其模式,而无需发送任何查询。当我有一些神秘的数据库时,或者想要测试一些查询以确保它在推送代码之前正确地做了我想要的事情时,我会大量使用 DB-Browser。DB-Browser 在 Windows、Linux 和 Mac 上也普遍可用,这使得它成为一个任何人都可以使用的免费工具。
3.r 工作室
如果您是一名杰出的 R 程序员,或者更喜欢 Python、Scala、MATLAB 或 Julia,但是经常使用 R,R studio 绝对是值得研究的 DS 工具。R studio 唯一显著的缺点是它不便宜,当然也不是免费的。无论价格还是使用,R studio 绝对是一个很酷的工作环境,我非常喜欢。
2.码头工人
Docker 是另一个你可能想到过,但没有出现在这个列表中的。由于这是一个更加固执己见的列表,我想我应该提醒你 Docker 并不总是最好的选择。然而,作为一个喜欢开发操作系统和 Linux 的人,Docker 是一个设置虚拟环境来完成工作的好工具。我们不仅拥有像 Python 包索引这样的语言包管理器的优势,我们还拥有 Linux 包管理器的优势。
虽然这些好处肯定是有的,但对大多数人来说,只使用画中画/虚拟环境可能是一个更好的主意。这些工具对于快速设置、跟踪 pip 轮和部署绝对有用。这两种方式各有利弊,但就我而言,我推荐 Docker。
1.朱皮特
在所有人都看到的结论中,我向你呈现:
朱皮特
当然,Jupyter 可能不需要介绍,但它在我的列表中名列前茅,因为没有它没有任何意义。Jupyter 允许你在一个虚拟的执行虚拟内核的单元中使用 Conda 虚拟环境。这对于数据科学来说是必须的,但是当然你可能已经知道了。
还要注意的是,Jupyter 是跨平台的,可以在任何地方使用。Jupyter 还支持允许执行任何语言的扩展,使它成为除 Python 之外还可以与 R、Scala、Julia 和 C 一起使用的工具。我无法告诉你我一天中有多少次跳进 Jupyter 来调试某个东西,或者在尝试使用某个功能之前测试它。快速简单的设置也是一个优势。
结论
有许多工具可以让数据科学家的工作变得非常简单。根据我使用每种软件的频率,这是我最喜欢的五种软件,但我很想知道其他数据科学家喜欢使用什么软件,以及他们也喜欢我使用的软件。请随意在下面分享,因为我绝对想知道。
我非常兴奋地看到以 DS 为中心的软件在未来几年甚至更长时间内的发展前景。随着过去一年的显著增长,我想我们将在未来几年看到一些非常酷的东西!
数据挖掘的 5 个误区
https://www.freepik.com/free-vector/data-mining-isometric-concept_4015382.htm
什么是数据挖掘?
数据挖掘用于分析数据,检测数据中的模式和关系,并将其转换为有用的信息,以便企业做出更好的决策。数据分析已经出现了几个世纪,但最近由于新的专业技术进入市场而变得普遍。但是,随之而来的是关于什么是数据挖掘、它如何工作以及利用它的好处的许多误解和神话。
Photo by Markus Spiske on Unsplash
误区一:数据挖掘是一个极其复杂且难以理解的过程。
数据挖掘背后的算法可能很复杂,但是使用正确的工具,数据挖掘可以很容易使用,并且可以改变你经营业务的方式。数据挖掘工具使您能够通过简单易懂的图表、查询和可视化来轻松查看和理解您的数据,让您深入了解您的业务是如何运作的。然后,您可以识别问题和潜在问题,并做出基于分析的决策来改善效率低下的情况。
数据挖掘工具并不像人们想象的那样复杂或难以使用。它们被设计成易于理解,以便企业能够解释产生的信息。数据挖掘是非常有利的,不应该让那些考虑使用它的人感到害怕。
Photo by Donald Giannatti on Unsplash
神话 2:数据挖掘是另一个很快就会消失的趋势,它让我们可以回归标准的商业实践。
定量实践已经被企业采用了相当一段时间。数据挖掘只是 20 世纪初出现的一种更成熟的实践。数据无处不在,一些数据库的大小非常大,使得手动发现变得极其困难。凭借易于使用的功能、降低成本和减少时间的优势,以及在快速部署且易于理解的解决方案中对公司绩效进行分析的能力,很难相信如此有利和有益的东西会逐渐消失。如果说有什么不同的话,数据挖掘将是一个永恒的、不断发展的工具,它将在未来的几年里帮助我们。
Photo by Austin Distel on Unsplash
误区三:数据挖掘技术如此先进,可以取代领域知识。
企业及其市场的专业知识和经验不能被数据挖掘技术取代。关于新出现的分析方法的知识是重要的,但是,如果没有业务和市场的知识,这些方法是没有用的。因此,对两者都有所了解是至关重要的。
如果你正在对一家公司的数据进行分析,有一个该领域的专家来理解产生的信息是很重要的,反之亦然。如果有人了解业务及其市场,请数据挖掘专家使用工具和建模进行分析以帮助提高他们的业务知识是很重要的。没有领域知识,数据挖掘基本上就无法存在。
误区四:只有大数据库才值得挖掘。
虽然数据挖掘更常用于分析大数据集,但它可以用于任何规模的数据集。几乎任何数量的数据都可以产生有价值的信息,可用于企业检测问题和潜在问题。即使是这些样本规模的数据集,也能让企业发现效率低下的地方,并主动或计划加以改进。与整个数据库本身相比,从大型数据仓库中提取某些数据来进行分析可能更有益。你只需要知道你想要分析哪些数据来产生有价值的结果和结论。
Photo by John Schnobrich on Unsplash
误区五:数据挖掘只在某些行业有用。
尽管数据挖掘可能最常用于高度关注数据和创新驱动的行业,但它是一种可用于任何行业的工具。总会有数据挖掘不值得投资回报的情况。但是就像数据库的大小不重要一样,行业也不重要。你分析的任何类型的数据都有价值。
以下是要点:
数据挖掘对你的企业来说既不太贵也不太复杂。最重要的是,人们在那里提供帮助;技能和知识可能已经存在于您的组织中,但是您的团队中有数据英雄吗?随着分析和可视化工具变得越来越用户友好,更多的人现在能够从数据挖掘中获得洞察力。你不再需要成为一名计算机科学博士来从你收集的数据中获取价值。是时候我们扔掉“但这是我们一直以来的做法”并开始挖掘数据来为我们的业务提供真正的价值了。
RYAN M. RAIKER,MBA // Ryan Raiker 是 ABBYY 的高级产品营销经理,ABBYY 是一家业务流程和数字智商解决方案的全球供应商。作为常驻的“流程智商人员”,Ryan 在流程发现、分析、监控和预测/说明性分析、业务战略管理、业务发展方面拥有专业知识,专注于帮助公司了解其业务流程并从中获得价值。他获得了威得恩大学的工商管理硕士学位、商业分析/信息学学士学位和运营管理辅修学位,并继续在该大学担任兼职教授。
提升你的编程生涯的 5 个新年决心
如何在 2020 年提升你作为开发者的就业能力
1 月 1 日即将到来,伴随着午夜钟声的承诺。有太多的事情需要开始或停止。但有时我们的新年决心中会忽略我们的职业目标。这是非常不明智的,因为工作是我们生活中如此重要的一部分,为了我们的最大利益,我们应该做得更好。
我们应该仔细考虑十年后我们想要达到的目标,并计划🅝🅞🅦如何达到目标。十年的结束是一个很好的时机来反思什么对我们有用或没用,并思考我们可以做什么不同的事情来实现下一个十年的目标。
所以从编程中休息一下,在你完全沉浸在同样的旧工作中之前,花一些时间来反思和解决。记住这一点,这里有一些解决办法和一些附带的资源,让你走上新的轨道。
**⭐️ Pro Tip:** As you approach this list, do not be vague. Think to yourself: "*What shall I do, by when*". You need to make a plan: [SMART](https://en.wikipedia.org/wiki/SMART_criteria) goals are specific, measurable, achievable, relevant and time bound.
让我们一起来看看这个列表:
— 1:学习软件制作的艺术
让一个程序运行起来并不需要大量的知识和技能。每个人都能做到。让某些东西工作并不是一件困难的事情——让它正确才是!想象一下你第一次上编程课时写的第一个程序。并与现在进行比较。看看你走了多远?
现在,让我向您介绍设计模式、坚实的原则和软件架构范例的神奇世界,看看您如何将自己定位于编写优雅软件的少数精英,这些软件具有持久性、高内聚和松散耦合,最显著的是易于理解、扩展和维护。
“建筑是关于重要的东西。不管那是什么。”—拉尔夫·约翰逊
这里有几本你今年应该努力阅读的经典著作:
如果你把心思放在建筑管道上,而不是最新的语言、流行的框架或其他开发时尚上,软件工程会得到更好的服务。我不是说这些不重要;事实上正好相反!但是如果你想提升你的职业生涯,这是我的第一条建议:把你的精力集中在构建软件上,然后以一种维护成本低的方式开发软件。换句话说:了解软件架构;你的雇主会喜欢你的!
— 2:关注用户体验
大多数后端开发人员认为 UX(用户体验)设计等同于 UI(用户界面)设计,所以他们认为 UX 是前端开发人员的责任。没有。我将通过“解释”我在“UX 开发者设计实践”一书中看到的一张图片来解释这种差异。以下是我对此的看法:
UX 设计不仅仅是视觉上的;它关注用户体验的整体感觉,并涉及整个软件开发生命周期。软件多久中断一次,你如何向用户提供反馈,界面有多直观,运行一批需要多长时间,响应时间有多短,解决一个问题的上市时间有多长[是的,这在这里也起作用。
我和我的团队在与非常难以取悦的银行家和风险经理打交道多年后,艰难地学会了 UX 的五条简单规则:
- 设计软件时让用户参与进来
- 性能和功能一样重要
- 错误消息应该针对用户,而不是开发人员
- 自我导向的用户界面中清晰的导航是最好的
- 质量保证是软件开发不可或缺的一部分
特别是在用户界面设计方面,我推荐你查阅几个资源:101 UX 原则书和 99%不可见播客。
— 3:做一个有开发意识的开发者
许多程序员认为他们的主要职责是编码,他们认为 DevOps 是一个松散的概念,实际上并不能帮助他们改善现状。这是不正确的,接受 DevOps 可以极大地帮助你的编程生涯。我的建议是从这些基本的 DevOps 技能开始:
连续交货
连续交付(CD)是从构建到生产环境中构建、测试、配置和部署软件的过程。为了向您的最终用户交付价值,您必须持续、快速、一致且无误地发布。Atlassian 的 Bamboo 是我的首选工具,因为它易于配置,并且开箱即可与吉拉集成。在这里你可以找到更多信息。对于一个开源的等价物,试试詹金斯。
如果你仍然依赖手工过程来部署你的软件,帮你自己一个忙,停止吧!当你熟悉了的好处之后,使用 CD 将是一件轻而易举的事情!
测试自动化
软件测试不再仅仅是与项目相关的质量保证(QA)专家的责任。当您持续交付软件时,不可能依赖特别的和手工的测试。我假设你有 TDD(测试驱动开发)的基础知识,所以我鼓励你熟悉几种测试技术和 BDD(行为驱动开发):
应用程序监控
反应式软件补救措施并不理想,因为它们会中断客户服务,所以每个组织都提供了一种 APM(应用程序性能监视器)系统来监控 CPU 使用、磁盘空间、SLA 等。但是作为一名开发人员,您还能引入什么来帮助和补充这项工作呢?监控和分析日志对于跟踪应用程序性能、故障排除、执行根本原因分析、审查系统行为和预测未来中断非常重要。
我建议你关注一下 Elastic (ELK) stack ,因为该公司已经为开源和商业用途整合了可以说是最受欢迎的日志管理平台: Elasticsearch 用于深度搜索和数据分析, Logstash 用于集中日志记录、日志丰富和解析, Kibana 用于强大而漂亮的数据可视化。他们的在线视频是一个很好的切入点。
DevOps 对软件开发产生了重大影响。我们在这里只是触及了表面,但是伴随你的旅程的 DevOps“善良”的伟大资源是 DZone 。
— 4:提高你的人际交往能力
认为开发人员是只独自工作的内向极客的想法已经完全过时了。程序员是团队的一部分,他们每天都与同事、经理和业务用户互动。需要提高的首要能力是谦逊。你可能已经读过我对这个问题的看法了:在职业发展方面,技术能力尚可但软技能优秀的程序员比技术大师表现更好!!
这只是成为更好的开发者的一个方面;为了获得更全面的人际交往技巧,我建议你阅读以下两本优秀的书籍:
— 5:了解业务领域
作为一名年轻的工程师,在我曾经工作的环境中,业务分析师(BA)是业务和开发团队之间的联络人,所以我相信如果 BA 能够向我解释需求,我就会编写代码——这在我职业生涯的早期阶段很好。然而,我艰难地意识到,企业并不关心代码!作为软件工程师,我们的工作不是编写代码,而是为公司增加价值(T21)并产生商业影响。
花时间了解企业如何运作是我们工作的一个主要部分,但经常被忽视。没有简单的、放之四海而皆准的答案,因为我们都可能专注于不同的领域,但一个想法是与企业交谈并寻求建议,参加培训课程,甚至寻求商业认证。你的最终目标应该是证明你可以在与企业的讨论中贡献出许多独特而有价值的见解!例如,尝试指出错误的规范,并提出他们接受的替代建议。
为了解决一个问题,你必须首先理解这个问题
如果你想从一个程序员进步到开发主管、架构师或项目经理,并获得一席之地,这将对你有极大的帮助!
关于下决心
今年你不需要制定太多的计划。你只需要几个对你的编程生涯和心态有积极影响的好例子。我希望这篇文章能激励你以最好的方式开始属于你的一年!
📌 **The Statistics behind New Year’s resolutions** The statistics on how many people actually follow through and accomplish their New Year’s resolutions are rather grim. [Research](https://www.forbes.com/sites/kevinkruse/2016/01/03/making-new-years-resolutions-stick/#6a4c4c456903) suggests that approximately half of all Americans make New Year’s resolutions yet only **8%** actually achieve them. Also [according to 'U.S. News'](https://health.usnews.com/health-news/blogs/eat-run/articles/2015-12-29/why-80-percent-of-new-years-resolutions-fail) approximately **80%** of resolutions fail by the second week of February!Ouch! Don’t be part of these statistics!📌 **Make your career resolutions stick**
How can you join this elite few people that pursue their plans and achieve their goals? [Here](https://hbr.org/2014/12/make-your-work-resolutions-stick) is what the Harvard experts say.
新年快乐——新的十年快乐
🤞祝新年快乐、健康、成功。希望 2020 年,我们所有人都离我们渴望拥有的职业更近一步,成为我们想成为的人。
🙏最后但同样重要的是,让我对今年所有的读者和**TDS 团队 说声**谢谢。这真的是一次很好的聚会,你们都是一个很棒的社区的一部分。****
感谢阅读!
我定期在媒体上撰写关于领导力、技术&的数据——如果您想阅读我未来的帖子,请‘关注’我 !
我希望我能早点知道的 5 个 Python 特性
Python 初学者
超越 lambda、map 和 filter 的 Python 技巧
Photo by Kirill Sharkovski on Unsplash
Python 可以说是近十年来崛起的编程语言,并且被证明是一种非常强大的语言。我已经用 Python 开发了很多应用,从交互式地图到区块链。Python 的特性那么多,初学者一开始很难掌握所有的东西。
即使你是一个从 C 或 MATLAB 等其他语言转换过来的程序员,用更高抽象层次的 Python 编码绝对是一种不同的体验。我希望我能早点知道 Python 的一些特性,并强调其中最重要的五个。
1.列表理解—紧凑代码
许多人会将 lambda 、 map 和 filter 作为每个初学者都应该学习的 Python“技巧”。虽然我认为它们是我们应该知道的功能,但我发现它们在大多数时候并不特别有用,因为它们缺乏灵活性。
Lambda
是在一行中组合一个函数供一次性使用的方法。如果多次调用这些函数,性能会受到影响。另一方面,map
将一个函数应用于列表中的所有元素,而filter
获取满足用户定义条件的集合中的元素子集。
Photo by Anastase Maragos on Unsplash
列表理解是一种简洁而灵活的方法,通过灵活的表达式和条件从其他列表中创建列表。它由一个方括号构成,带有一个表达式或函数,仅当元素满足特定条件时,该表达式或函数才应用于列表中的每个元素。它还可以嵌套处理嵌套列表,比使用 map 和 filter 灵活得多。
# Syntax of list comprehension **[** expression(x) **for** x **in** aList **if** optional_condition(x) **]**
2.列表操作—循环列表
Python 允许负索引 where aList[-1] == aList[len(aList)-1]
。因此,我们可以通过调用aList[-2]
等等来获得列表中的倒数第二个元素。
我们还可以使用语法aList[start:end:step]
对列表进行切片,其中包含开始元素,但不包含结束元素。因此,调用aList[2:5]
就产生了[2, 3, 4]
。我们也可以简单地通过调用aList[::-1]
来反转一个列表**,我发现这种技术非常优雅。**
Photo by Martin Shreder on Unsplash
列表也可以解包成单独的元素,或者使用星号混合元素和子列表。
3.压缩和枚举循环
Zip
函数创建了一个迭代器,它聚集了多个列表中的元素。它允许在 for 循环中并行遍历列表和并行排序。可以用星号解压。
Photo by Erol Ahmed on Unsplash
Enumerate
一开始可能看起来有点吓人,但在许多情况下会变得非常方便。它是一个自动计数器,经常在 for 循环中使用,因此不再需要通过counter = 0
和counter += 1
在 for 循环中创建和初始化计数器变量。Enumerate 和 zip 是构造 for 循环时两个最强大的工具。
4.生成器—内存效率
当我们打算计算一大组结果,但希望避免同时分配所有结果所需的内存时,使用生成器。换句话说,它们动态地生成值并且不在内存中存储先前的值,因此我们只能对它们迭代一次。
它们通常在读取大文件或使用关键字yield
生成无限序列时使用。我经常发现它在我的大部分数据科学项目中很有用。
5.虚拟环境—隔离
如果您只能记住本文中的一件事,那么它应该是使用虚拟环境。
Photo by Matthew Kwong on Unsplash
Python 应用程序经常使用来自不同开发者的许多不同的包,具有复杂的依赖性。使用特定的库设置开发不同的应用程序,其中结果不能使用其他库版本再现。这里不存在满足所有应用要求的单一安装。
conda create -n venv pip python=3.7 # select python version
source activate venv
...
source deactivate
因此,为每个应用程序创建独立的自包含虚拟环境venv
至关重要,这可以使用pip
或conda
来完成。
相关文章
感谢您的阅读。你可以注册我的简讯来接收我的新文章的更新。如果您对数据科学感兴趣,以下文章可能会有用:
[## 每个 Python 初学者都应该学习的 4 个 NumPy 技巧
编写可读代码的技巧
towardsdatascience.com](/4-numpy-tricks-every-python-beginner-should-learn-bdb41febc2f2) [## Python 3.8 中针对 Python 新手的 6 项新特性
请做好准备,因为 Python 2 不再受支持
towardsdatascience.com](/6-new-features-in-python-3-8-for-python-newbies-dc2e7b804acc) [## Python 初学者应该避免的 4 个常见错误
我很艰难地学会了,但你不需要
towardsdatascience.com](/4-common-mistakes-python-beginners-should-avoid-89bcebd2c628)
最初发布于edenau . github . io。
数据科学家离不开的 5 个 Python 包
介绍性概述
Python 是一种通用语言,因此,它提供了大量的扩展,从科学编程到数据可视化,从统计工具到机器学习。
了解每个可用的扩展几乎是不可能的,但是如果你的任务包括分析数据并在其上建立机器学习模型,那么有几个扩展是至关重要的。
因此,在这篇文章中,我将详述 5 个主要的包,它们将使您的 Python 变得非常通用,它们是:
所以我们开始吧!
Numpy
Numpy 是一个科学计算包。它允许您执行任何种类的数学和统计操作。特别是(这也是为什么它是机器学习的基础),它允许你非常快速和容易地执行 N 维计算。任何时候你被要求操作向量和矩阵,你知道你必须使用 Numpy 来达到这个目的。
现在让我们看一些例子。
Numpy 的主要对象是同构多维数组,它可能看起来像向量(如果维度是 n,1)或矩阵(如果维度是 n,m)。让我们创建包含 1,2,3 的第一个数组:
import numpy as np
a=np.array([1,2,3])
a
Output: array([1, 2, 3])
我们可以用以下方法检查这个数组的一些属性:
a.shape
Output: (3,)
a.dtype
Output: dtype('int32')
type(a)
Output: numpy.ndarray
我们还可以通过指定组件的数量和形状来初始化数组。也就是说,如果我想创建一个数字从 0 到 11 的 3×4 矩阵,我将写:
b=np.arange(12).reshape(3,4)
b
Output: array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
你也可以把不是数组的对象转换成数组,比如列表。每当你需要计算列表项时,这是非常有用的。假设你想减去这两个列表:
list_1=[1,2,3]
list_2=[4,5,6]
list_2-list_1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-4c6e19f7626c> in <module>
1 list_1=[1,2,3]
2 list_2=[4,5,6]
----> 3 list_2-list_1
TypeError: unsupported operand type(s) for -: 'list' and 'list'
如你所见,因为你不能减去两个列表,所以出现了一个错误。但是,如果你使用这个技巧:
np.asarray(list_2)-np.asarray(list_1)
Output: array([3, 3, 3])
问题绕过了!
熊猫
Pandas 提供数据结构和数据分析工具,这些工具对于您的数据进行清理和用于机器学习任务是必不可少的。
pandas 中的主要对象是数据帧,它只是结构化的数据集,可以很容易地修改和访问。您可以创建或导入(从 web、csv 文件、文本文件等)您的数据框架。
让我们从头开始创建一个:
import pandas as pd
data = [['alex', 10], ['tom', 15], ['jim', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df
我们可以访问这个 df 的元素,因为它是一个矩阵:
df[:1] #showing only the first row
df.iloc[:,1] Output:
0 10
1 15
2 14
Name: Age, dtype: int64
熊猫数据框架的所有列都是系列对象:
type(df['Age'])
Output: pandas.core.series.Series
我们还可以向数据集追加新列,并设置索引:
g=['M','M','M']
df['Gender']=g
df.set_index('Name',inplace=True)
df
Pandas 是处理大量数据的基础,因为它还能够总结相关信息(如缺失值、异常值、平均值和频率等)。
df.isnull().sum() #for missing values Output:
Age 0
Gender 0
dtype: int64df.describe()
Matplotlib
Matplotlib 提供了不同的数据可视化工具。它不是 Python 中唯一可用的可视化包,然而它是最直观的,并且能生成非常好的结果。
让我们看看如何绘制不同的图表:
import matplotlib.pyplot as plt
import numpy as np
men_means = [20, 34, 30, 35, 27]
x = np.arange(len(labels))
fig, ax = plt.subplots()
ax.bar(x - width/2, men_means, width, label='Men')
ax.set_title('Men Means')
我们还可以在同一个图表中显示多个条形:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
men_means = [20, 34, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
x = np.arange(len(labels))
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, men_means, width, label='Men')
rects2 = ax.bar(x + width/2, women_means, width, label='Women')
ax.set_title('Men and Women Means')
现在,让我们用直方图和正态分布图近似来模拟正态随机变量:
import matplotlib.pyplot as plt
mu, sigma = 0, 0.1 # mean and standard deviation
s = np.random.normal(mu, sigma, 1000)
count, bins, ignored = plt.hist(s, 30, normed=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2) ),linewidth=2, color='r')
plt.show()
现在想象一下,我们要绘制一个调查结果,让人们说出他们最喜欢的意大利面食。调查的结果是:
import matplotlib.pyplot as plt
labels = 'Gnocchi', 'Tortellini', 'Spaghetti', 'Penne'
sizes = [15, 30, 45, 10]
explode=(0,0,0,0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal')
plt.show()
您也可以使用“爆炸”选项来强调最受欢迎的答案:
explode=(0,0,0.1,0)
作为一名数据科学家,数据可视化至关重要,因为您总是需要以直观而强大的方式展示您的结果。此外,甚至在开始构建模型之前,相关的图表通常对识别数据中的模式很有用,因此它们可能会建议您应该运行哪种分析。
sci kit-学习
这可能是机器学习最重要的包,因为它提供了所有的算法,从监督到非监督,从分类到回归。此外,它包括 ROC、MSE R 平方等评估指标,这些指标将在每次算法训练后自动计算。
让我们来看一个非常简单的 ML 任务示例,使用波士顿房价数据集,并尝试仅针对一个变量对价格进行建模,以便我们可以将其可视化。由于这是一项回归任务(目标变量“价格”是连续的),我们将使用简单线性回归:
import pandas as pd
from sklearn.datasets import load_boston
dataset = load_boston()
df = pd.DataFrame(dataset.data, columns=dataset.feature_names)
df['target'] = dataset.target
df.head()
由于我们想要建立一个简单的线性回归(只有一个特征),我们需要将维数从 13 减少到 1,并且在不丢失相关信息的情况下,我们需要运行一个主成分分析:
from sklearn.decomposition import PCA
pca = PCA(1)
projected = pca.fit_transform(dataset.data)
print(dataset.data.shape)
print(projected.shape)
Output:
(506, 13)
(506, 1)
很好,现在让我们导入并训练我们的模型:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(projected, dataset.target, random_state=0)
from sklearn.linear_model import LinearRegression
lm = LinearRegression()
lm.fit(X_train,y_train)
y_pred = lm.predict(X_test)
#let's visualize the results
plt.scatter(X_test, y_test, color='black')
plt.plot(X_test, y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.xlabel('First Principal component')
plt.ylabel('price')
plt.show()
我们还可以要求对我们算法的性能进行“反馈”:
from sklearn.metrics import mean_squared_error, r2_score
print("MSE: {:.2f}".format(mean_squared_error(y_test, y_pred)))
print("R2: {:.2f}".format(r2_score(y_test, y_pred)))
Output:
MSE: 73.04
R2: 0.11
如你所见,用几行代码(不到 2 分钟)我们训练了一个 ML 模型,没有任何手工计算。
海生的
和 matplotlib 一样,seaborn 是一个用于数据可视化的 Python 包。然而,它对于统计表示特别有用,并且它返回关于您的数据的更多相关信息。
特别是,它非常方便地显示数据之间可能的相关性:通过 pairplot() 和 heatmap() 您可以初步了解所有特性(和目标)之间的关系:
import seaborn as sns sns.set(style="ticks")
df = sns.load_dataset("iris")
sns.pairplot(df, hue="species")
sns.heatmap(df.corr(),annot=True)
我们还可以可视化数据的联合分布(比如,sepal_length 和 sepal_width 这两个特征):
sns.jointplot(x='sepal_length',y='sepal_width',data=df,size=5)
最后,让我们看看每个物种的萼片长度值的分布:
ax=sns.boxplot(x='species',y='sepal_length',data=df) ax=sns.stripplot(x='species',y='sepal_length',data=df,jitter=True,edgecolor='gray')
Seaborn 显示相关信息的速度非常快,功能非常强大,如果您正在执行探索性分析,它可能会节省您的大量时间,并为您提供关于最佳算法的线索。
不用说,涵盖这些方案的所有潜力几乎是不可能的。然而,了解哪些是您需要的工具以及如何在您的分析过程中部署它们是很重要的。作为一种良好的实践,请记住,无论您的分析需要何种计算,python 都提供了一种最快、最智能的方法:边做边发现是探索这些工具的一种非常好的策略。
如果您有兴趣了解这些软件包的更多信息,这里有官方文档:
- https://numpy.org/
- 【https://pandas.pydata.org/ 号
- 【https://matplotlib.org/
- https://scikit-learn.org/stable/index.html
- https://seaborn.pydata.org/index.html
原载于 2019 年 9 月 4 日http://datasciencechalktalk.com。
构建再入院模型前要问的 5 个问题
Photo by Kat Stokes on Unsplash
所以,你想建立一个再入院模型?你并不孤单。
根据医疗保健研究和质量机构(AHRQ) 的数据,30 天的再入院每年会产生 413 亿美元的医院费用。因此,许多组织正在研究未来再入院的最佳预测指标,并公布他们的研究结果。这些研究论文是很好的参考和比较工具,但是对于真实世界的应用,在开始复制这些研究项目之前,有几个问题需要考虑。
为什么?
这一切都始于构建一个可以在您的组织中实际使用的模型。数据科学家经常重复发表的论文,却发现这些“理想”的机器学习模型无法部署到生产中。学术论文没有考虑现实世界中存在的数据滞后和/或您特定组织的需求。与其花费时间和资源构建一个贵公司无法使用的模型,不如构建一个从第一天开始就可以部署并产生影响的模型,这不是很好吗?
在闭环,我们开发了一个框架,供数据科学家和临床团队在创建任何新的预测模型时遵循。在建立再入院模型之前,问自己以下 5 个问题:
- 什么干预?
- 你今天做什么?
- 什么结局?
- 什么病人?
- 什么数据?
让我们逐一回答这五个问题。为了帮助说明医疗保健组织将如何处理这些问题,我们成立了一个名为 ABC Health 的小组。虽然该组织是虚构的,但情况非常真实,凸显了现实世界医疗保健预测模型的复杂性。
1.什么干预?
在你跳到具体细节之前,先考虑一下全局。头脑风暴一下你将如何使用这些预测。贵组织是否对被视为“高风险”再次入院的患者采取干预措施?当病人在医院时,会有专门的护士吗?在他们出院前会安排随访吗?远程监控技术是否放置在“高风险”患者家中?
对处于危险中的成员的干预可能今天还没有到位,这很好,但是如果你发现自己正在阅读这篇文章,你很可能对预测有一些预期的用途。想想那些是什么。
我们虚构的组织 ABC Health 使用家访作为对被标记为“高风险”再次入院患者的干预措施。
2.你今天做什么?
您组织中适当的干预自然会为您的新模型提供一个要超越的基线。扪心自问,如今这些项目是如何识别患者的?它是否基于患者需要满足的某些参数?您的组织是否使用 LACE 评分或其他类型的基于规则的评分系统?超越现有基线有助于展示投资回报率和您的再入院模型将产生的影响。
如果缺乏干预表明没有正式的基线,想一想什么样的非正式规则可以用来识别有风险的病人。临床医生是否需要手动浏览图表来寻找“高风险”患者?病人出院的时候会凭直觉吗?
在 ABC Health,如果患者在过去六个月内入院三次或三次以上,则被视为高风险患者。这意味着我们的新模型需要比我们现有的基于规则的方法更好地预测。
3.什么结果?
我知道你在想什么,“这个很简单,跳过”?再想想!
大多数再入院研究论文预测某人在另一次住院 30 天内被接纳的可能性,但是什么被认为是再入院呢?如果住院是有计划的或与最初入院无关,是否属于再次入院?如果再入院是出院 31 天,您的组织要花费多少?您是否要考虑任何不良事件(死亡率、健康获得性感染等)。)在那个时间段?回答这个问题时,想想您的具体组织。很有可能,你特别想预测的会与网上的研究论文不同。
根据合同规定,ABC 必确健康部负责另一名住院患者入院后 45 天内的所有再入院,与怀孕或癌症相关的入院除外。ABC Health 需要预测某人在 45 天内再次住院或死亡的可能性,忽略妊娠和癌症相关住院。
4.什么病人?
每个病人都需要预测再入院吗?那些有急性护理机构或临终关怀的出院倾向的病人呢?要回答这个问题,回想一下你实际上想要预测什么。
ABC Health 仅对在家出院的患者实施上门护士访视干预。也就是说,出院回家的病人是唯一会得到再入院风险评分的人。
5.什么数据?
这个问题其实是两题合一,就当是加分吧。首先,你想在什么时候做预测?大多数论文预测出院时的再入院,但有许多不同的选择。回想一下实际的干预。如果干预是在他们出院时安排随访预约,则在出院时进行预测。如果干预是为了在患者住院期间提供额外的护理,那么预测的时间就在入院时。
ABC 健康护士在患者出院后致电高危患者,约定上门预约。如果护士联系不上病人,两天后再打电话。这意味着我们需要从出院开始每天进行再入院预测,直到首次入院后 45 天。
第二个问题是,在做出预测的具体时间,你手头有哪些数据来源?回答这个问题时要彻底,不要害怕向您的数据或 IT 团队寻求帮助。您的组织有 ADT(入院出院转移)馈送吗?预测时有哪些索赔?这些索赔是及时的,还是延迟了 90 天或更长时间?你对这个病人了解多少?你能访问住院病人的电子病历数据吗?
在做出预测时,在出院时,ABC Health 拥有处方索赔、接近实时的 ADT 馈送和 CMS 蓝按钮病历,但他们无法访问住院期间的 EMR 数据。此外,他们的医疗索赔有 3 个月的延迟,这意味着他们对病人的所有医疗索赔都将来自以前的住院——如果有的话。
通过回答这五个问题,我们能够更详细地定义我们的模型,而不仅仅是预测再入院的*。让我们看看我们的模型是如何发展的。*
最初:“我想预测 ABC Health 的再入院情况”
***回答完 5 个问题后:“*我想通过预测谁将在出院回家后 45 天内再次入院或出现死亡等不良反应,但忽略与怀孕或癌症相关的入院,来优化居家护士出诊干预。这些预测将从患者出院开始每天进行,直到首次入院后 45 天。机器学习模型将由处方索赔、ADT 馈送、CMS 蓝按钮数据和 3 个月延迟医疗索赔提供支持。”
这个框架对于创建一个提供真正投资回报的人工智能模型来说是非常有效和有价值的,因为你已经在头脑中定义了特定组织的模型。
试试看,让我知道进展如何!
作者: Megha Jain —产品负责人
Megha 是一位经验丰富的产品经理,拥有超过 11 年将软件解决方案推向市场的经验。除了拥有密歇根大学计算机科学工程硕士学位的深厚技术经验外,她还拥有麻省理工学院斯隆管理学院的 MBA 学位,这为她打下了坚实的商业基础。她喜欢从事以用户为中心的产品,并热衷于使用技术来帮助改善生活。
原载于 2019 年 5 月 31 日https://closed loop . ai*。*
加快您的 Power BI 仪表板速度的 5 种快速方法
Power BI 是一个流行的(免费的)工具,可以根据您的数据创建仪表板。拖放界面使得从头开始构建一个简单的仪表板变得快速而简单。然而,一旦事情变得更加复杂,并且您不断添加小部件,您的仪表板的速度可能会降低到爬行的速度。
尽管有很多方法可以提高你的仪表板的速度,我在这篇文章中列出了 5 个快速修复方法,你可以立即应用来快速提高性能,而无需任何剧烈的改变。
1.尽可能使用整数
搜索数字行比搜索字符串要快得多。因此,只要有可能,就使用整数。比如用 0 / 1 值代替“是/否”会更好。或者 1/2/3 而不是“低/中/高”。而且要注意,因为一个数字不一定是整数。您可以将 1/2/3 作为值,但它们仍然可以被视为字符串。因此,请始终在查询编辑器中检查数据格式。
2.移除任何不用的东西
Don’t make your tables look like this, if there is no need to. (image source: http://sqlserverbi.blog)
无论是表格、列还是行,如果您没有使用它,它就不应该出现在您的仪表板中。因此,在数据(预处理)过程中,坚持你的仪表板所需要的,其他一切只会降低性能。
3.坚持使用默认的 Power Bi 小部件
The Power BI market place.
Power BI marketplace 是一个很好的资源,可以找到令人惊叹的小部件来展示您的见解。即使有时候你别无选择,只能使用它们,如果你有选择的话,我还是建议你坚持使用默认的小部件。如果那个花哨的第三方小部件看起来稍微好一点,但是降低了你的仪表板的速度,你应该问自己这样一个问题:是否值得实现它。我并不是说所有的 marketplace 插件都很慢,但是我做的一些最大的速度提升是通过切换回默认的切片器。
4.使用标签
使用选项卡不仅会提高性能,还可能会减少仪表板的拥挤。如果你发现自己被仪表盘上的切片器、图表和卡片弄得不知所措,明智的做法是将它们分成主题/副主题等。并将它们放在不同的选项卡中。通过连接不同选项卡上的过滤器,您可以保留切片器,使选项卡 A 成为过滤器选项卡 B,反之亦然。仪表盘会更快更好看。
5.在表格中使用前 N 行
一张大桌子可以让仪表盘爬得最快。每次使用切片器时,表都必须生成并显示数据集中的所有数据。为此,微软增加了方便的“前 n 行”功能。激活后,该表将自己限制为 N 行,而不是显示整个数据集。同样,一个非常简单的干预将产生巨大的改善。
衡量就是了解
Power BI’s new feature: The performance analyzer.
微软在其最新(2019 年 5 月)的 Power BI 更新中增加了一项新功能:**性能分析器。**这个新工具可以让您分析仪表板的速度,并指出瓶颈。它的工作原理是记录你使用仪表板时的动作,并为每个小工具的加载时间计时。一旦你停止记录,你会得到一个很好的概览(你可以导出),显示每个小部件的加载持续时间。
同样,除了这 5 种提高速度的快速方法,你还可以在这里找到许多其他的选择。但是在你开始实施更激烈的措施之前,我建议你先试试下面 5 个建议中的一个。
关于作者 :我叫 Bruno,是总部位于荷兰的人工智能技术纵向扩展公司dash mote的数据科学家。我们的目标是借助基于人工智能的解决方案,弥合图像和数据之间的鸿沟。
查看我在 上的其他作品 https://www.zhongtron.me 。
2020 年学习新编程语言的 5 个理由
学习一门新的编程语言,在新的一年里提升你的职业和技能
Photo by Clément H on Unsplash
李小龙曾有一句名言:“我不怕练过一万次踢腿的人,但我怕练过一万次踢腿的人”。在 2020 年,你是需要学习一门新的编程语言,还是需要像李小龙所说的那样,继续学习你已经掌握的语言?像许多其他问题一样,答案是:看情况。
如果你刚刚开始学习你的第一门编程语言,那么我建议你先正确地学习这门语言。但是如果你已经很好地掌握了一门语言,或者你是一个经验丰富的软件开发人员,已经掌握了不止一门编程语言,那么我建议你明年学习一门新的语言。
学习一门新的编程语言是有代价的。它需要你大量的时间、精力和大脑循环。仍然学习一门新的语言可以直接或间接地给你带来显著的好处。
在这里,我列出了如果你学习一门新的编程语言,你可以拥有的五个主要优势:
更大的画面
Source: The Blind Elephant
在现代,编程语言领域是巨大的、多样的和复杂的。通常,一种编程语言只涵盖编程语言领域的一小部分。有一个著名的故事,盲人只触摸大象的一部分,并以他们的方式解释大象,例如,有人触摸大象的尾巴,并解释大象像一根绳子。编程语言也是如此。
以下是主流编程语言范例:
在一个范例中,还有许多子范例。通常,一种编程语言专注于一种范式(例如, C 是过程式的,Haskell 是函数式的)。也有许多语言触及了多范例,尽管不是 100%(例如 Java 是面向对象的,部分是函数式的)。
学习一门新的编程语言会让你对编程语言有更全面的了解。像任何其他领域一样,有一个更大的画面通常是有帮助的,并给你一个额外的优势。
适合的
Photo by Egor Kamelev from Pexels
在过去快乐的日子里(例如上个世纪),开发人员的生活很简单。在那个年代,你可以学一门主流编程语言,然后工作一辈子。
但是在现代,软件开发人员的生活更加充满活力。随着微服务的兴起,多语言编程是一种常态现在反而是例外。
你可能需要在工作或项目中学习一门新的语言。人脑在迁移学习方面表现出色。如果你已经了解 Haskell/Scala,你可以快速学习其他函数式编程语言。如果你学习了现代语言中的一种,例如 Kotlin,那么你可以快速学习其他类似的现代语言(例如 TypeScript)。
如今,甚至前端 web 框架也使用不同的编程范例。因此,如果你已经了解 Scala/Haskell,那么你可以学习前端框架 React 比其他框架更快,因为 React 大量使用函数式编程的概念。
通常,公司希望用新的软件栈来探索新的软件开发。如果你已经知道编程语言,你可以很容易地抓住机会,加入更新,更酷的项目。
更大的工具箱
Photo by Todd Quackenbush on Unsplash
如果你只知道如何操作一种工具,例如锤子,那么你会在每一种不是合适工具的情况下都尝试使用锤子。软件开发人员也是如此。
作为人类,我们都想呆在自己的舒适区内。因此,我们希望坚持我们已经知道的编程语言,并希望在每个地方使用它们。我见过许多只懂一种编程语言(例如 Java 或 JavaScript)的开发人员,他们试图在所有用例中使用它们。
学习一门新的编程语言将增强你的工具集,让你成为一名更好的开发者。
全栈软件开发之路
Source: dev.to
随着微服务架构的兴起,对全栈开发者的需求只会越来越大。我写过一篇关于微服务架构最佳实践的博文:
正确实施微服务架构的 10 个技巧
towardsdatascience.com](/effective-microservices-10-best-practices-c6e4ba0c6ee2)
在那篇文章中,我提到过微服务架构需要跨职能团队。如果一个团队有两个只能编写前端代码的开发人员和两个只能编写后端代码的开发人员,那么这个团队就不够灵活。由于前端和后端开发人员并行工作,团队的进展将受到阻碍,例如,当前端或后端开发人员都无法工作时。团队将处于一个更好的位置,因为很少有全栈开发人员可以在栈之间切换。
此外,该公司将愿意支付额外的工资给一个完整的堆栈开发人员。
现在,学习另一种编程语言不会使你成为一个全栈开发人员。但它将对您成为全栈开发人员有很大帮助。
职业发展
Photo by Jamie Saw on Unsplash
如果你想爬上职业阶梯,也就是说,如果你想成为一名软件架构师或解决方案架构师,那么你不仅要有更深的专业知识,还要有更广的专业知识。在软件架构师的角色中,您应该对整个堆栈做出设计决策,而不仅仅是后端或前端。
从前,有一些“象牙塔”架构师,他们可以在不知道动手编码的情况下为一个项目设计软件架构。但是公司越来越多地寻找会编码的软件架构师。
如果你是一个软件架构师,可以用多种编程语言编码,可以和开发者交流,那么开发者会对你更加尊重。
同样,通往软件架构师或解决方案架构师的道路需要许多其他技能。但是如果你想成为一名软件架构师/解决方案架构师,学习新的编程会对你有所帮助。
如果你觉得这很有帮助,请分享到你最喜欢的论坛( Twitter,LinkedIn,脸书)。
如果你对编程语言感兴趣,也可以看看我下面的文章:
针对求职者和新开发人员的顶级编程语言的深入分析和排名
towardsdatascience.com](/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e) [## 现在要学习的 7 种现代编程语言
Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能
towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec) [## 回归金属:2019 年开发大数据框架的 3 大编程语言
C++,Rust,用 Java 做数据密集型框架
towardsdatascience.com](/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842)
在你的机器学习项目中使用 YAML 文件的 5 个理由
即使你的项目很小,YAML 文件也能增加它的灵活性和可重用性。
Photo by Max Nelson on Unsplash
在我攻读数据科学硕士期间,没有人告诉我配置文件的必要性,以及有了它们我的生活会变得多么简单。老实说,没有人告诉我作为一名数据科学家的许多非常重要的方面,我严重缺乏关于最佳实践的知识。然而,我已经在上一篇文章的中解决了大部分问题,我不会再重复了。
&在开始我的数据科学职业生涯之前,我想知道些什么。
towardsdatascience.com](/what-my-data-science-degree-did-not-teach-me-part-1-3d7ff23875e5)
简而言之,当我毕业的时候,我的项目有点又快又脏。它们起作用了,有时有很好的结果,但是在我的解决方案的开发过程中,灵活性和可重用性显然不是优先考虑的。项目进行的时间越长,我就越渴望找到一种方法来轻松运行项目的不同部分,重用代码或简单地定制我的环境,而不会因为想到我必须复制或重写的大量代码而感到难过。
什么是 YAML?
缩写 YAML 用来代表另一种标记语言。它现在代表 YAML 标记语言,以便更好地代表 YAML 目前拥有的面向数据的目的。
YAML 是一个人类友好的数据序列化标准,它遵循 Python 缩进,是一个 JSON 超集。YAML 不是唯一可用于配置文件的格式;配置文件可以在中创建。JSON 或 INI 格式的 py 文件。我选择 YAML 是因为它的简单,但我稍后会回到它,因为我在这篇文章中的一个(或两个)原因是基于它的简单(剧透警告!).
如果您不知道什么是配置文件:
配置文件用于存储配置参数,即应用程序的初始参数和设置。这里的“应用”一词有其更广泛的定义。如果您的代码对数据做了一些事情,它符合应用程序定义。如果您想要一种简单的方法来理解配置文件的用途之一,请考虑您可能在项目中硬编码的所有内容,例如(但不仅限于!):
- 输入或输出文件位置
- 机器学习模型的参数输入
- 预处理的参数(例如,大小训练与测试集)
- 日志文件的位置
1.即使在小项目中,潦草地修改代码来改变参数也不是一件有趣的事情。
毫无疑问,我通常可以从项目一开始就使用 YAML 文件,但是我经常跳过这一步。我后来总是意识到,不早点用 config.yaml 开始是一个错误。不幸的是,了解最佳实践并不总是意味着我愿意自动应用它们。
任何可以在我的脚本中硬编码的东西,都可以在配置文件中占据它应有的位置。虽然您可能经常只从一个数据源开始,但大多数项目可能会变得更加复杂,从配置文件开始比以后设置要容易得多。
配置文件不仅有助于避免脚本中的硬编码路径。每当我看到自己一次又一次地修改部分代码以查看对输出的影响,或者注释掉代码以避免每次都运行一个步骤时,我(应该)意识到这部分代码或这个参数代表了在我的配置文件中设置的完美候选。我将在本文后面详述这些功能。
2.写你的第一个 YAML 文件是小菜一碟
YAML 文件最好的部分是简单的语法和创建一个容易。这是我在任何(机器学习与否)项目中选择 YAML 文件而不是任何其他类型的配置文件的主要原因。如果我们想给 config.yaml 文件一个输入和输出位置,那么它应该是这样的:
files:
location: 'C/Users/Yourname/Mydocuments/theinputlocation.txt'
output: 'C/Users/Yourname/Mydocuments/theoutputlocation.txt'
很简单,对吧?但是这里有几个特征可以让它变得更简单!
- 我也可以写一个不带引号的字符串(只要它不包含任何可能被视为 YAML 语法的特殊字符)!如果我真的想或者需要使用引号,单引号和双引号都可以。
files:
location: C/Users/Yourname/Mydocuments/theinputlocation.txt
output: C/Users/Yourname/Mydocuments/theoutputlocation.txt
- YAML 使用注释的方式与 Python 等其他语言一样,使用#注释掉其余的行。
files:
#put the locations of your files here
location: 'C/Users/Yourname/Mydocuments/theinputlocation.txt'
output: 'C/Users/Yourname/Mydocuments/theoutputlocation.ext'
- 不需要特别的陈述,你直接从你的 YAML 文件的内容开始。
在这第二个原因上加了子原因,我有点作弊,但是如果我们可以把列表放在列表里,我肯定可以把原因放在原因里。
3.用 Python 阅读 YAML 文件也非常容易
因此如果编写。yaml 文件这么容易,那么读取 yaml 文件并告诉 Python 如何处理其内容呢?
pip install pyyaml
用 Python 读 YAML 文件只需要一个包。
下面的代码允许您正确、安全地加载。yaml 文件,如果您弄乱了您的配置文件,将返回一个清晰的错误消息。
import yaml
try:
with open (path_to_yaml, 'r') as file:
config = yaml.safe_load(file)
except Exception as e:
print('Error reading the config file')
以我们上面使用的输入位置和输出位置为例,下面是我如何访问我的设置:
location_input = config['files']['location']
location_output = config['files']['output']
- 如果您不想每次都写文件,该怎么办?
你的 YAML 档案里应该有什么:
write_file: True #turn to False to prevent from running
python 代码中应该包含什么(假设您的数据位于 pandas 数据框架中):
if config['write_file']:
mydf.to_csv(location_output)
4.当你与人们分享你的应用程序时,他们(不管是不是开发人员)会喜欢你的
如果您需要共享您的程序,而人们有不同的文件存放位置,会发生什么情况?尽管大多数数据科学家&分析师喜欢通读 Python 代码,但他们会非常感激您没有强迫他们滚动每个脚本来找出在哪里更改输入/输出文件路径。
**如果整个数据科学项目需要转移到服务器上,该怎么办?**如果您只需要从项目中的一个位置导入一个文件(这种情况很少发生在我身上),这可能不是一个问题。如果您需要从几个位置导入几个文件(并且文件有时可能会更改名称),该怎么办?任何运行代码或从您的 g it 存储库中提取代码的人都必须仔细检查代码,找到每一条路径,并用自己的路径替换它。
此外,让人们运行您的代码来更改参数并不总是一个好主意。限制只能访问 YAML 文件也有助于限制对代码的损害,同时保持项目的灵活性。
5.它可以帮助您专注于您的机器学习代码(或项目的任何其他部分)
我目前参与的项目需要大量的代码、大量的文件加载和大量的处理。对我们来说,在每次运行整个项目来测试代码的时候开发它是不可想象的。使用 YAML 文件(或另一个配置文件)允许我们以模块化的方式建立我们的项目。
当我们回想机器学习时,大多数项目都需要昂贵的数据清理。一旦您的数据被清除,您可能不需要重新运行每个步骤。当然,Jupyter Notebook 也允许你分别运行我的代码的不同部分。但是老实说,我不止一次因为愚蠢的无限循环、沉重的模型或者我永远不会知道的非常模糊的原因而使内核崩溃。每个人都崩溃了一个内核,并对整个体验和重新运行整个代码感到不安。
例如,您可以在预处理步骤结束时将清理后的数据帧保存在一个. csv 文件中,这样您就可以仅在必要时运行这些步骤。
steps:
preprocessing: False
machinelearningstep: Truetemp_location: mytempfile.csv
以及它在 Python 中的样子:
if config['preprocessing']:
#do extensive cleaning on my dataframe
else:
#load the temp file that is being saved each time I run
#the preprocessing step in the location indicated in the config
#file
YAML 文件有优点也有局限性,就像任何语言或格式的配置文件一样。我意识到我给出的许多理由也适用于另一种类型的配置文件(我第二喜欢的是. py 文件)。无论我的同事或我选择 YAML 档案或。py 文件并不重要,但是从长远来看,以一种简单、易读、友好的方式构建项目对于团队的生产力和快乐非常重要。如果从长远来看,我们可以避免挫折,为什么不呢?
编程时 3 个简单的练习
towardsdatascience.com](/mindfulness-for-programmers-da6f92147b8f) [## 向你的祖母解释数据科学
或者如何向你的家人或任何与技术世界脱节的人解释数据科学。
towardsdatascience.com](/explaining-data-science-to-your-grandma-f8345621483d)
开始学习数据科学
为什么每个人都可以并且应该学习数据科学的 5 个理由。
数据科学家正式成为 21 世纪最性感的工作。数据科学家收入丰厚,工作生活平衡良好,他们解决的问题足够有趣,足以让任何人坚持下去。如果这还不足以让人们对这个领域感兴趣,那么还有更进一步的原因。
- 数据科学将帮助你完成当前工作中的日常任务。
即使你不是正式的数据科学家,但拥有一些数据科学技能,你在办公室的生活也会变得容易得多。当你的老板给你带来一份去年的销售清单,而不是逐行滚动时,你写几行代码,带来一份 2018 年发生的 100,00 0,00 0 笔销售的摘要。更好的是,在快速午餐和分析你告诉老板的数据后,你实际上可以预测下一年最大的销售额将在什么时候发生。此外,凭借您新获得的数据科学技能,您可以自动化您在办公室中做的大多数日常工作。这样,你将有更多的时间学习最新的机器学习算法及其应用,而不是做无聊的重复工作。
2。数据科学是多学科的,无处不在。
不管你现在在做什么,我可以向你保证,你可以将数据科学应用于其中。目前,人工智能被用于预测股票价格,发现罕见疾病,分析图像,预测评论的情绪或总结在线评论。我们创造自动语音识别系统、自动驾驶汽车和对话代理。当谈到数据科学时,天空是无限的,它可以应用于工作或生活的任何领域。
3。数据科学可能很艰难,但却很有价值。
天空是无限的,但旅程的起点是学习基础数据科学,它没有你想象的那么难。大多数人没有开始这个旅程,因为他们认为他们没有足够的数学背景,他们没有做过统计,或者他们不会写一行代码。尽管这是数据科学家的基本技能,但这些都是可以学习的,基本上不需要任何先验知识。你需要的是学习的意愿和决心。好消息是,一旦你开始了你的旅程,你会马上运用你的技能。只需几行代码,你就能分析数据集,做出令人印象深刻的图表和可视化。一旦你发现你可以用这么少的努力做什么,你就会有动力去学习更复杂的算法,这将帮助你解决更复杂的问题。这会让你保持动力,一旦你开始这个旅程就很难停止。数据科学会让人上瘾,学习永远不会停止。
4。如今的数据科学很容易学习。
此外,如果你看看关于该主题的在线课程、教程和视频的数量,就没有理由不学习数据科学。有了这些信息,你甚至不需要传统的书籍和正规的教育。还有一些训练营可以帮助你在短时间内成为一名数据科学家。他们选择所有材料,并设计您作为初学数据科学家将采取的学习路径。如果你选择其中一个或者以自学的方式进行,你就不会抱怨缺乏资源或帮助。
5。数据科学会让你成为一个更好的全面发展的人。
如果你正在考虑过渡到数据科学,你会注意到,利用你学到的技能,你将从不同的角度看待同样的问题。运用数学、统计和算法的观点将帮助你看到问题的另一面,提出解决方案并测试它。数据科学家解决的问题的复杂性不仅会在专业层面上锻炼你的大脑,改变你的思维,还会让你成为一个更全面的人。
PS:你正在阅读这篇文章,所以你的数据科学之旅已经开始或即将开始。我祝你一切顺利,如果你喜欢这篇文章,不要不好意思留下评论。我的数据科学博客之旅现在就要开始了,我希望我们能一起走这条路……
原载于 aboutdatablog.com: 每个人都可以而且应该学习数据科学的 5 个理由,2019 年 10 月 10 日。
PS:我正在 Medium 和aboutdatablog.com上撰写深入浅出地解释基本数据科学概念的文章。你可以订阅我的 邮件列表 以便在我每次写新文章时得到通知。如果你还不是中等会员,你可以在这里加入。
下面还有一些你可能喜欢的帖子
* [## python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们
初学者在 python 和 pandas 中开始使用 lambda 函数的快速指南。
towardsdatascience.com](/what-are-lambda-functions-in-python-and-why-you-should-start-using-them-right-now-75ab85655dc6) [## Jupyter 笔记本自动完成
数据科学家的最佳生产力工具,如果您还没有使用它,您应该使用它…
towardsdatascience.com](/jupyter-notebook-autocompletion-f291008c66c) [## 当你开始与图书馆合作时,7 个实用的熊猫提示
解释一些乍一看不那么明显的东西…
towardsdatascience.com](/7-practical-pandas-tips-when-you-start-working-with-the-library-e4a9205eb443)*
我如此热爱谷歌联合实验室的 5 个原因
Photo by Mitchell Luo on Unsplash
Google Colaboratory 是机器学习教育和研究的研究工具。这是一个 Jupyter 笔记本电脑环境,无需设置即可使用。
以上是用它的创造者的话来说,对 Colab 的定义。相信我,它不仅如此,因为它允许任何人在浏览器中实验人工智能和机器学习超级容易和免费。
你可以在下面找到我的“为什么我喜欢它”列表。
Photo by Elaine Casap on Unsplash
1 —它提供免费的计算能力
是的,合作实验室提供免费计算能力。您的代码在专用于您的帐户的虚拟机中执行。更好的是,只需点击一下鼠标,你就可以在你的项目中使用一个 GPU 加速器。采用**特斯拉 K80 GPU,**它给你提供了总共 12 GB 的内存,你可以连续使用它长达 12 个小时。
虽然它可以免费使用,但也有一定的限制。协作室用于交互式使用。不支持加密货币挖掘。长时间运行的后台计算也不受欢迎。对于这种情况,建议使用本地运行时选项。
2 —不需要设置
协同实验室带有预加载的库。这意味着您可以立即开始将库导入笔记本。
可用的预安装软件包有:
数据处理包: Pandas、Numpy、Scipy、Statsmodels
机器学习包: TensorFlow、Sklearn
可视化包: matplotlib、plotly、seaborn
虽然它为您涵盖了大多数常用的机器学习库,但是您可以安装任何不在合作实验室 中的库。
3 —轻松共享和协作
如果你需要团队合作来开发你的人工智能项目,这又是一个超级简单的 Colab,因为 Colab 笔记本就像谷歌文档和工作表一样。它们存储在 Google Drive 中,可以共享、编辑和协同评论。
4-它支持 Python 2.7 和 Python 3.6
毫无疑问,Python 被认为是所有人工智能开发平台中的第一名,因为它的简单性和丰富的库使工作变得容易得多。
5 —与 GitHub 集成
谷歌联合实验室与 GitHub 整合。在 Colab 环境中,很容易从 GitHub 保存和加载笔记本。公共 GitHub 笔记本可以直接加载,不需要额外的授权步骤。访问私人 GitHub 笔记本需要一个额外的步骤,以允许 Colab 访问您的文件。
感谢阅读。
学生应该加入黑客马拉松的 5 个理由
我在倒数第二年的时候开始加入黑客马拉松。一开始,我不知道什么是黑客马拉松,我就像一张白纸。在参加了大约 20 次黑客马拉松后,我发现自己在各个方面都有了很大的提高,我想利用这篇文章来鼓励更多的学生加入黑客马拉松。
Photo by NESA by Makers on Unsplash
首先,你需要对黑客马拉松的意义有一个简单的了解。黑客马拉松是“黑客”和“马拉松”两个词的混合。结合这两个词的上下文,你可能会有一个粗略的感觉,黑客马拉松是一个密集的编码比赛。这可能是过去一些黑客马拉松(黑客马拉松的类型将在另一篇文章中解释)或黑客马拉松的情况。如今,大多数黑客马拉松(至少在香港)对编码部分的权重较低,但对业务部分的关注度较高。因此,根据我的观察,近年来的黑客马拉松更像是将数据科学家、设计师、商人和工程师等不同领域的人才聚集在一起,在一到三天内完成一个项目。
Photo by cyda
回到这篇文章的主题,为什么学生应该加入黑客马拉松?
1。用现实生活中的问题练习你的技能
在学校,你学到了很多理论和知识,但你没有很多机会来测试你的能力。大多数时候,学校只会给你布置作业和考试来给你的技能打分,评估中使用的材料都是以易于使用的方式准备的。例如,我的专业是统计学,我通常需要在我的作业中处理数据,一般来说,提供的数据集都是以表格形式构造的,数据量非常有限。然而,在黑客马拉松中,你将获得(或者你需要搜集)真实的数据。因此,你可以知道在公司工作时的困难,如如何清洗数据,将非结构化数据转换为结构化格式,以及如何使用云计算来处理大数据。
2。同行之间建立网络并进行知识交流
在不同的学校就读,同一专业的范围因学校或讲师而异。黑客马拉松为参与者提供了一个与不同背景的人交流的好机会。有时,你可能会遇到来自海外学校的学生。通过网络或他们的介绍,你可以知道他们使用了什么技术或软件,这样你就可以了解你在知识和技能方面缺乏什么,换句话说,你可以估计你在就业市场上的竞争力。
Photo by Brooke Cagle on Unsplash
3。会见有经验的导师,获取行业知识
为了帮助参与者改进他们的想法,通常在黑客马拉松中会有导师会议。组织者将邀请他们的高级员工作为导师,他们将在最终演示之前与参与者交谈并评论他们的想法。在会场中安排导师的主要原因是让该行业的新成员能够了解业务关注点,并专注于组织者提供的问题陈述。作为一名学生,你可能对不同的行业没有任何想法,但你可以充分利用导师会议来更好地了解行业的性质和不同公司的文化。
Photo by Kaleidico on Unsplash
4。了解更多新技术
组织者可能会与 AWS、谷歌和微软等不同的科技公司合作,提供如何使用云服务的黑客马拉松前研讨会。对于非技术人员,你可以知道如何使用一些方便的工具来做编程,对于技术人员,你可以知道完成任务的替代方案。
对于主题为非常新的或不常见的技术,如区块链或无人机的黑客马拉松。还可能有由领域专家提供的简报会议,这样参与者可以对主题有一个公平的理解。
Photo by André François McKenzie on Unsplash
5。奖项
黑客马拉松通常有三种主要类型的奖励,即现金奖励、奖品和奖杯以及工作机会。特别是针对学生的黑客马拉松,他们会为选定的参与者提供实习机会(即使他们不是获胜者)。一些公司组织黑客马拉松作为候选人选择过程,通过导师会议,不同的管理团队负责人可以直接与参与者交谈,他们可能知道参与者的优势或劣势,因此他们可以判断参与者是否适合他们的团队。
如果你发现你梦想的公司将举办黑客马拉松,你应该申请参加比赛。这可能是你进入那家公司的捷径,或者至少你有机会直接与经理交谈,看看你是否适合该公司的文化。
奖项也可以是无形的东西,比如你在黑客马拉松中建立的友谊,一些人找到志同道合的人并创办了一家创业公司。
Photo by Marten Bjork on Unsplash
列出的五个原因只是我发现可以适用于大多数人的一些常见的好处。有更多的商品加入黑客马拉松,但你只有在参与其中后才能发现。
希望这篇文章对你有用,如果你想了解更多关于黑客马拉松的信息,请继续关注我的黑客马拉松系列
如果你觉得我的文章有用,请在我的 linkedIn 页面上为我的技能背书,鼓励我写更多的文章。
学生应该加入黑客马拉松的 5 个理由
medium.com](https://medium.com/series/welcome-to-the-world-of-hackathon-81d194abbec4)
为什么网络抓取会让你的生意受益的 5 个理由。
你可能已经涉足电子商务,或者你准备卷起袖子为一家有创意的初创公司工作。扩大业务规模的需求岌岌可危。那么,你如何利用网络抓取来发展你的业务呢?在这篇文章中,我将通过真实的例子向您介绍网络抓取(网络抓取、数据提取、屏幕抓取)如何让您的业务受益并提高您的利润。
1。竞争对手监控:
by Wu Yi from Unsplash
在过去的十年里,电子商务市场取得了巨大的飞跃。然而,随着数字设备融入我们的生活并改变购买行为,这种数字零售格局将继续增长。
繁荣的市场很容易进入,但零售商之间的竞争只会变得更加激烈,给新来者留下很小的发展空间。你的零售业务如何生存?你需要研究你的竞争对手。中国古代将军孙子曾经说过“知己知彼,百战不殆。”这也适用于商业。
您可以通过网络搜集获得竞争对手的最新变化:
a. 从竞争对手的网站上搜集产品信息,对新产品发布做出及时反应,发现新的市场策略。
b. 刮产品/服务广告。洞察他们的预算。
d. 预测流行趋势,保持竞争力。
2。定价优化:
如果你很难设定一个价格,你会发现网络搜集对这个目的非常有帮助。优化的问题在于,我们无法在增加利润的同时不失去客户。
请记住,客户愿意为更有价值的产品支付更多的钱。至于零售业务,重要的是在你的竞争对手缺少的地方提高你的服务。以下是网络抓取发挥作用的方式:
a. 搜集客户信息,找出如何通过微调你的市场策略来提高他们的满意度。
b. 接下来,制定一个 动态定价策略 。市场不是一成不变的,你的定价要跟上变化,才能实现利润最大化。网络抓取使您能够及时了解市场价格和促销活动的变化。
3。销售线索生成:
我敢打赌,当你被要求得到更多的线索时,你会感到厌倦。当然,你可以购买尽可能多的名单。**警告!**他们不是优质销售线索。你可能会选择能够让你搜索公司和电子邮件的潜在客户生成工具。尽管存在准确性问题,但由于报价有限,它们相当昂贵。毕竟,从长远来看,这不是一个可持续的解决方案。诀窍就在这里!您可以在短时间内免费从数百万个网站中在线提取销售线索的联系信息!
a. 设定你的目标人物 :学历、公司、职称等。
b. 在你的小生上找到相关网站 :医疗保健提供者上的医师;来自 Yellowbook.com 的餐馆;来自知名开源医疗网站的关键意见领袖。
查看这篇文章。学习 如何一步步在 15 分钟内获得数千条线索
联系人列表是一些有价值的资产。有了这些名字,你就可以通过批量发送活动和时事通讯来赢得客户。但是,请确保发送相关信息,不要滥发。
4。投资决策:
网络抓取对投资界来说并不陌生。事实上,对冲基金不时利用网络搜集技术提取替代数据以避免失败的风险。它有助于发现不可预见的风险和潜在的投资机会。
投资决策是复杂的,因为它通常涉及一系列的过程,然后才能做出一个合理的决策,从建立一个假设的论点,实验,到研究。测试投资论点最有效的方法是通过历史数据分析。它让你能够洞察过去失败或成功的根本原因,你应该避免的陷阱,以及你未来可能获得的投资回报。
作为一种手段,web scraping 更有效地提取历史数据,其中您可以将这些数据输入到一些机器学习数据库中进行模型训练。因此,投资公司利用大数据提高了分析结果的准确性,从而做出更好的决策。
查看此文关于 股市分析使用网刮
5。产品优化:
Photo by Malte Wingen on Unsplash
对我们来说,在购买之前搜索在线评论是一个常识。评论会决定性地影响顾客的购买决定。因此,我们可以分析他们对我们的看法,以便跟上他们的期望。
假设你的产品团队即将推出一款新产品。你这么着急,想知道它能不能有所突破。重要的是收集客户的反馈,以便与您的产品进行交叉检验并做出改进。情感分析技术被广泛用于分析顾客的态度,无论是积极的、中立的还是消极的。然而,这种分析需要来自许多网站的大量文本数据才能发挥作用。网络抓取可以更快地自动化提取过程,为这种平凡的工作节省大量的时间和精力。
以上只是网络抓取所能达到的一小部分。您可以构建一个网络爬虫来提取我们上面描述的数据。或者关于它的应用,你可能比我有更多创新的想法。不要低估网络抓取的力量。对于企业来说,以常规方式获取大量必要信息是最佳解决方案。你应该把所有的精力集中在重要的商业运作上。
原载于 2019 年 12 月 17 日https://www.octoparse.com。
你应该在 2020 年开始数据科学之旅的 5 个理由
学习数据科学不应该总是为了成为一名数据科学家
Photo by Ruthson Zimmerman on Unsplash
L 学习数据科学不应该总是为了成为一名数据科学家。任何热衷于处理数据的人都可以把它作为学习数据科学基础的目标。
您有兴趣了解数据的力量吗?
你有兴趣学习如何探索数据,分析数据,并从数据中得出有意义和有见地的发现吗?
您是否有兴趣将数据科学技能添加到您的技能集工具箱中?
你有兴趣了解当今最热门的职业领域之一吗?
如果您对上述大多数问题的回答是肯定的,那么您必须下定决心,尽快开始您的数据科学之旅。没有理由拖延。挑战自我,在 2020 年开始你的旅程。掌握数据科学的基础知识需要时间、精力和努力,但请记住,千里之行始于足下。缓慢但肯定的是,随着您自学数据知识并寻找机会与其他数据科学爱好者或专业人士分享您新获得的知识,您的知识和专业技能将随着时间的推移不断增长。
我们生活在人类历史上最有趣的时代。数字时代迎来了“数据时代”,一个数据成为比石油和黄金更有价值的商品的时代。全球每天产生的数据量是前所未有的,随着世界上越来越多的人接入互联网,预计这一数据量还会继续增加。想想储存在谷歌(你的谷歌搜索)、脸书、推特、YouTube、Instagram、LinkedIn、亚马逊、网飞等平台上的数据量。政府数据、医疗保健数据、客户数据以及保存在全球数千所大学数据库中的学术记录又如何呢?电信数据,例如文本消息、语音呼叫等。这是学习数据科学最激动人心的时刻。
现在有很多免费的资源可以用来学习数据科学。资源可以在 edX、Coursera、Udemy、DataCamp、YouTube 等平台上找到。唯一的因素就是你。球在你的球场上。你愿意奉献你的时间和精力去学习数据吗?学习数据科学的基础知识是一项绝不会让你后悔的伟大投资。现在是采取行动的时候了,而且要迅速行动。让 2020 年成为你最终踏上数据科学之旅的一年。
学习数据科学的 5 个理由
1。学习数据科学为你提供了一个重塑自我的机会。
当我大约两年前开始我的数据科学之旅时,我已经是大学的一名物理学教授了。但和往常一样,我总是想学习一些新的东西,一些可以让我在学术上不断挑战的东西,一些非常令人兴奋的东西。在做了一些研究并与我的一个也在研究数据科学的朋友交谈后,他鼓励我从事数据科学。大约两年前,我开始了我的数据科学之旅。在这段时间里,我在 DataCamp 、 edX 、 Coursera 和 YouTube 等平台上完成了无数的数据科学和机器学习课程。挑战自己,在 2020 年了解数据。如果你有一些数学和基础编程的背景,可以通过自学自学数据科学。
2。我们生活在一个数字世界,一切都是数据驱动的。
商业,会计,教育,科学,工程,医疗,科技,能源部门,政府等等。因此,拥有处理数据的能力是一项基本技能。将您的数据科学知识与您已经拥有的任何技能相结合,将为您的简历和履历增加更多价值。
3。数据科学也是一个非常有前途的领域,有很多高薪的工作机会。
数据科学、机器学习和分析被认为是最热门的职业道路。行业、学术界和政府对熟练数据科学从业者的需求正在快速增长。因此,持续的“数据热潮”吸引了如此多具有不同背景的专业人士,如物理、数学、统计、经济和工程。数据科学家的就业前景非常乐观。IBM 预测到 2020 年对数据科学家的需求将飙升 28%:https://www . Forbes . com/sites/louiscolombus/2017/05/13/IBM-predicts-demand-for-data-scientists-will-soar-28-by-2020/# 7916 f 3057 e3b。
通过学习数据科学的基础,你可以增加在数据科学领域找到工作的几率。你要问自己的问题是:当数据科学领域的机会来敲门时,你准备好了吗?如果你一直在拖延数据科学,现在是时候开始你的旅程了,不要拖延。
4。基本的数据科学技能对于个人使用非常重要。
我发现数据科学在我的学术生活中对分析研究数据非常有帮助。作为一名计算材料科学家,我的研究涉及分析计算建模软件产生的大量数据。分析这些数据有助于我得出有意义的见解,如奇异的材料属性,使材料适合各种应用,如药物设计和输送、太阳能采集、高速电子设备和生物传感应用。我还使用机器学习工具来分析材料属性的大型数据集,以建立某些属性之间的相关性,并进行异常值检测。使用数据可视化技术也帮助我产生了高质量的可视化研究数据。
数据科学方面的知识也帮助我更好地分析学生的考试成绩。我使用我的数据科学知识来构建供个人使用的模型,如购房推荐系统(根据房间数量、面积、房龄、邮政编码等预测因素来预测房价)、抵押贷款计算器等。
5。你可以利用你在数据科学方面的知识来获得额外收入。
对于有数据科学背景的人来说,有很多额外的收入机会,例如自由职业、家教、教学、博客。当我开始写博客时,我在 medium 上发表的数据科学文章每月收入不到 2 美元。今天,我每个月挣 600 多美元,当然还不包括房租,但这是一笔不错的额外收入,尤其是因为它来自我喜欢做的事情。如果您已经掌握了一些基本的数据科学知识,并且对在 medium 上撰写数据科学博客感兴趣,这里有一些资源:
可以帮助您开始数据科学之旅的资源
如果你有分析学科的背景,并且正在考虑数据科学,这里有一些你可以用来自学的资源:
(一) 数据科学专业证书 (HarvardX,through edX)
(二) 分析:必备工具和方法 (佐治亚 TechX,through edX)
(三) 应用数据科学与 Python 专业化 (密歇根大学,通过 Coursera)
(四)“Python 机器学习”,塞巴斯蒂安·拉什卡著。这本书提供了关于数据科学和机器学习的很棒的介绍,包括代码:“Python 机器学习”,作者 Sebastian Raschka 。作者以一种非常容易理解的方式解释了机器学习的基本概念。此外,代码也包括在内,因此您实际上可以使用提供的代码来练习和构建您自己的模型。我个人认为这本书在我作为数据科学家的旅程中非常有用。我会向任何数据科学爱好者推荐这本书。你所需要的是基本的线性代数和编程技能,以便能够理解这本书。
(五) 走向媒介上的数据科学出版 。该网站上有大量资源,涵盖了从基础到高级概念的大量数据科学信息。
学习数据科学的最佳方法是什么?
秘诀是从构建数据科学的基础知识开始。有了基础数学( 机器学习必备数学技能 )和编程技能,你就可以开始上一些在线课程,比如上面列出的那些。然后,在建立了足够的基础知识之后,您可以开始阅读一些书籍,以获得更精细和更高级的数据科学概念。
学习和掌握数据科学的基础知识需要时间、精力、耐心和努力。这是开始的正确时间。坚持每天花一个小时学习和实践数据科学。如果你坚持不懈,你会惊讶于一两年内你能获得多少知识和技能。
你的聊天机器人需要自然语言处理的 5 个原因
随着聊天机器人的出现和崛起,我们开始看到它们利用人工智能——特别是机器学习——来大规模完成实习生或退伍军人团队无法完成的任务。更好的是,企业现在能够通过用冷数学分析对话来获得洞察力。
然而,仍然有相当多的人每次与机器人交谈时都会有一种共同的情绪— “它不明白我在说什么。”
**这就是自然语言处理发挥作用的地方。**在合适的应用环境中,NLP 可以为更易于使用的功能和服务界面铺平道路。但更重要的是,基于 NLP 的聊天机器人可以让屏幕另一边的终端用户知道他们正在进行对话,而不是通过有限的选项和菜单来达到他们的最终目标。
什么是自然语言处理(NLP)?
自然语言处理基于深度学习,使计算机能够从用户的输入中获取意义。在机器人的情况下,它评估用户输入的意图,然后根据类似于人类的上下文分析做出响应。
假设你有一个聊天机器人用于客户支持,很有可能用户会试图问一些超出机器人范围的问题,然后扔掉它。这可以通过设置默认响应来解决,但是,要预测用户可能会问什么样的问题或者会以什么样的方式提问是不可能的。
当谈到自然语言处理时,开发人员可以训练机器人进行多种交互和对话,并提供它将接触到的内容的多个示例,因为这往往会给它提供一个更广泛的基础,使它可以更有效地进一步评估和解释查询。
因此,虽然训练机器人听起来是一个非常乏味的过程,但结果是非常值得的。苏格兰皇家银行在其聊天机器人中使用 NLP通过文本分析来增强客户体验,以多种形式解读客户反馈的趋势,如调查、呼叫中心讨论、投诉或电子邮件。这有助于他们确定客户不满意的根本原因,并据此帮助他们改进服务。
实现 NLP 的最佳方法是什么?
实现 NLP 的最佳方法是混合机器学习和最大化结果的基本含义。机器学习只是许多 NLP 平台的核心,然而,基本含义和机器学习的融合有助于制造高效的基于 NLP 的聊天机器人。
机器语言用于训练机器人,这导致它不断学习自然语言处理(NLP)和自然语言生成(NLG)。ML 和 FM 都有自己的优点和缺点。这两种方法的最佳特性对于解决现实世界的业务问题都是理想的。
基于自然语言处理的机器人需要做的是:
1。通过准确的解释减少假阳性结果。
2。使用统计建模识别用户输入失败并解决冲突。
3。使用全面的沟通来获得用户响应。
4。更快地学习以解决发展差距。
5。通过较少的训练数据输入实现自然语言能力。
6。能够将输入的培训数据重新用于未来的学习。
7。为误报提供简单的纠正措施。
NLP 引擎能做什么?
NLP 引擎广泛使用机器学习来解析用户输入,以便提取必要的实体并理解用户意图。具有自然语言处理功能的聊天机器人可以分析多种用户意图,从而最大限度地减少失败。
一、意图识别
通过聊天机器人的用户输入被分解,并通过几个词编译成用户意图。例如,“搜索西雅图提供深盘玛格丽塔的比萨饼角落”。
NLP 通过理解单词的含义、位置、变化、复数以及人类语音可能具有的许多其他因素来分析完整的句子。因此,它将完整的句子或段落分解为更简单的句子,如搜索 pizza,然后是语音中的其他搜索因素,以更好地理解用户的意图。
二。处理实体
实体可以是与日期、时间、地点、位置、描述、单词的同义词、人、项目、数字或指定对象的任何东西相关的字段、数据或单词。聊天机器人能够识别用户的单词,匹配可用的实体或收集完成任务所需的额外实体。
三世。名词的大写
NLP 使聊天机器人能够从普通名词中删除大写,并从语音/用户输入中识别专有名词。
四世。扩展&词汇的迁移
NLP 使机器人能够不断添加新的同义词,并使用机器学习来扩展聊天机器人的词汇,同时还可以将词汇从一个机器人转移到下一个机器人。
动词的时态
人工智能聊天机器人通过时态来理解动词的不同时态和变化。
六。收缩
具有 NLP 的机器人可以扩展缩写,并简化删除单词间撇号的任务。
除此之外,支持 NLP 的机器人还拥有许多功能,如文档分析、机器翻译、区分内容等等。
NLP 引擎依赖以下元素来处理查询—
意图 —构建对话式用户界面的核心概念,它被确定为用户想要实现的任务或用户希望解决的问题陈述。
话语 —用户可以作为聊天机器人的输入给出的各种不同的句子实例,就像他们提到一个意图一样。
实体 —它们包括与用户意图相关的所有特征和细节。这可以包括位置、日期、时间等。
上下文 —这有助于在整个用户会话中保存和共享不同的参数。
会话 —这基本上涵盖了用户对话的起点和终点。
市场上有许多 NLP 引擎,从谷歌的对话流(以前称为 API . ai)wit . ai、沃森对话服务、 Lex 等等。有些服务提供一体化解决方案,而有些则专注于解决单一问题。
其核心,自然语言处理的关键在于理解输入,并将其翻译成计算机之间可以理解的语言。从话语中提取意图、参数和主要上下文,并将其转换为结构化数据,同时调用 API 是 NLP 引擎的工作。
为什么你的聊天机器人需要自然语言处理?
有许多不同类型的聊天机器人,用于各种目的,如常见问题解答、客户服务、虚拟帮助等等。没有 NLP 的聊天机器人主要依赖于预先输入的静态信息&自然不太能处理人类语言,这些语言在表达每个特定查询时会有情感、意图和情绪的变化。
让我们来看看你的聊天机器人应该有 NLP 的 5 个理由:
1。跨语言的自然对话
预输入静态内容方法的问题是,语言在表达特定语句时有无限多的变化。用户可以用无数种方式来表达一种情绪。研究人员花了很长时间努力让系统解释人类的语言。
通过 NLP,可以在人类输入的文本和系统生成的响应之间建立联系。这种响应可以是任何事情,从对查询的简单回答、基于客户请求的动作或者将来自客户的任何信息存储到系统数据库。
NLP 可以区分人类生成的不同类型的请求,从而大大增强客户体验。
(a) 基于自然语言处理的聊天机器人能够智能地理解语言语义、文本结构和语音短语。因此,它使您能够分析大量的非结构化数据,并使之有意义。
(b) NLP 能够理解跨语言的语素,这使得机器人更有能力理解不同的细微差别。
NLP 赋予聊天机器人理解和解释俚语的能力,并像人类一样不断学习缩写,同时通过情感分析理解各种情绪。
2。关注关键任务
通常,为了使一个组织发挥作用,需要部署许多不同的角色和资源,但是,这需要在不同的垂直领域重复手动任务,如客户服务、人力资源、目录管理或发票处理。基于 NLP 的聊天机器人大大减少了客户服务或发票处理等操作中的人力,因此这些操作需要的资源更少,员工效率更高。
现在,员工可以以更具创造性的方式专注于任务关键型任务和对业务产生积极影响的任务,而不是每天在单调重复的任务上浪费时间。您可以使用基于 NLP 的聊天机器人进行内部使用,尤其是人力资源和 IT 服务台。
3。降低成本
成本核算是任何企业发展和提高盈利能力的一个重要方面。基于 NLP 的聊天机器人可以极大地帮助降低与重复性任务中的人力和其他资源相关的成本以及客户保留成本,同时提高效率和简化工作流程。
4。更高的客户满意度
今天的千禧一代希望他们的问题能够得到即时响应和即时解决方案。NLP 帮助聊天机器人理解、分析问题,并根据问题的复杂性对其进行优先排序&这使得机器人能够比人类更快地响应客户的查询。更快的响应有助于建立客户信任,进而带来更多业务。
使用聊天机器人后,您将体验到客户保持率的提高。它通过增加现有客户的忠诚度来减少每次获得新客户的努力和成本。聊天机器人给予顾客他们想要的时间和注意力,让他们感到重要和快乐。
5。市场调查与分析
仅仅从社交媒体上,你就可以获得或生成大量多样的、非结构化的内容。NLP 有助于结构化非结构化内容并从中提取意义。您可以轻松理解客户评论、意见、评论或疑问背后的含义或想法。你可以一瞥用户对你的服务或品牌的感受。
结论
基于 NLP 的聊天机器人可以帮助增强您的业务流程,将客户体验提升到新的水平,同时还可以提高整体增长和盈利能力。它提供了保持市场竞争力的技术优势——节省时间、精力和成本,从而进一步提高客户满意度和业务参与度。
尽管自然语言处理,NLU 和 NLG 并不完全等同于人类的语言理解,考虑到它的微妙之处和对上下文的依赖;一个智能聊天机器人可以很好地模仿这种理解和分析水平。在半受限的环境中,当评估用户的目标&时,机器人可以很好地执行,以自助交互的形式完成所需的任务。
虽然 NLP 本身是关键,不能创造奇迹或确保聊天机器人有效地响应每一条消息,但它对聊天机器人的成功用户体验至关重要。
当在人工智能和基于规则的机器人之间做出决定时,有许多因素需要考虑。在马鲁蒂科技实验室,我们为不同行业的不同用例,大规模地开发了这两种聊天机器人。如果你想了解更多或有任何问题,请在 hello@marutitech.com给我们留言——我们很乐意聊天。
您需要更好的数据管理解决方案的 5 个理由
祝贺你。这需要时间,但你是数据驱动型的。你有数据科学家来处理数据,有一个储存充足的数据湖,还有分析师来澄清这一切。但是,即使基础设施到位,从数据中获益也不像按动开关那么容易。如今,企业还没有正确管理他们的数据。
因此,他们问自己一个新问题:
如何将海量数据转化为真知灼见?
成为“数据第一”的公司
2018 年 8 月 29 日,ThinkData WorksCEOBryan Smith在滑铁卢Communitech 做了一场关于“数据优先”公司的演讲。首先投资于数据并正在改变业务格局的组织。众所周知,苹果在 2018 年 8 月 2 日达到了万亿美元的估值,史密斯预测亚马逊也不远了。一万亿英里的竞赛类似于 4 分钟一英里:一旦一个人打破了它,我们将看到许多其他公司开始打破它。
六天后,亚马逊 击中了那个标志 。
但受益于数据优先的不仅仅是大型企业;数据有无数的机会为企业和客户增加价值。
无论您是刚刚开始开发数据能力,还是多年来一直关注数据能力,成为数据第一公司都不仅仅是基础设施。
这是关于制定最好的游戏计划。
在 Communitech,Smith 概括了五种方法,每个组织都可以最大限度地提高其使用的数据的数量、质量和价值。
以下是您需要更好的主数据管理策略的五个原因。
1.共享数据必须既安全又简单。
大多数公司内部共享数据的方式存在许多问题。安全问题是重中之重。用电子邮件发送电子表格是不负责任的,尤其是当它们包含敏感信息时,但这仍然是许多公司共享数据的方式。如果下周电子表格中的数据发生变化,你必须重新做一遍。
在发布信息的多种方式中,无论你是使用拇指驱动器还是 Dropbox,都存在问题。管理权限,保持数据更新,这样的例子不胜枚举。
那么,成功且负责任的数据管理的关键是什么呢?
它正在寻找一种安全共享数据的方法,维护最新版本,并为用户设置特定的访问和控制权限。轻松完成这一切是高效数据团队的关键。
2.外部数据是一个不容错过的好机会。
我们不需要解释外部数据的价值。在组织之外创建的数据有助于提供独特的见解,让您获得竞争优势。问题是,在您的组织之外创建的数据也是在您的组织之外创建的。查找、连接和规范化来自外部来源的数据对您的团队来说是一种压力,随着您连接到每个新的来源,这种压力会呈指数级增长。
数据的价值和可用性意味着每个人都应该连接更多而不是更少的数据。组织和个人应该能够访问一个数据市场,该市场以他们想要的格式提供所有外部数据源。数据 市场 是一个数据管理解决方案,在拥有数据和利用数据之间架起了一座桥梁。
3.你的数据科学家被铐上了。
与顶尖的数据科学家一起工作,却不明白为什么他们没有创造出令人惊叹的东西?不是他们,是你的数据。数据科学家 80%的时间都被他们工作中最琐碎的事情占据了——获取数据并使其可用。他们大约有五分之一的时间花在查找数据上,而 60%的时间花在清理、组织、格式化和整理数据上。
这不是他们进入数据科学的原因。
如果没有数据管理解决方案,他们的时间就会被“脏活累活”所占据,而不是利用数据来帮助您发展业务。
数据科学家只有 20%的时间是数据科学家。
And we have to imagine that screaming into a pillow is at least 1% from the ‘Other’ segment. Data from Forbes.****
4.只有 0.5%的数据被使用。
麻省理工科技评论 发表了这个统计数据,它真的让我们大吃一惊。但事实是,在每天创建的 2.5 数据中,只有很小一部分得到了利用。
将数据转换成有意义的东西很难。尽管有大量的数据和对其洞察力的渴望,有效使用内部和外部数据的障碍使得使用大量数据变得非常困难。
实际上,这意味着对于大多数公司来说,他们连接的唯一数据是:
- 最低挂的水果,或
- 对他们的成功至关重要的东西。
这意味着利用数据进行创新,或者开发模型并进行试验超出了的范围。
为了获得数据的优势,我们不能吝啬。
为什么?
5.1.8 万亿美元。
这就是原因。
据 Forrester 称:“到 2021 年,洞察驱动的业务将从非洞察驱动的竞争对手那里每年窃取 1.8 万亿美元
当心“偷”这个词为了竞争,企业将不得不大幅增加他们使用的数据量。
把你的数据放在湖里真是太好了。现在该拿出来了。
我最近的一些帖子,希望你能看看:
[开放数据和公开数据有区别吗?](http://Is There a Difference Between Open Data and Public Data?)
原载于https://blog.thinkdataworks.com。**
**连接ThinkData 作品 上Namaraapp,或者 这里联系我们 ******
每个数据科学家(和程序员)都应该使用的 5 种资源
或者:我是如何学会停止担忧并热爱我所拥有的资产的
Photo by Max Duzij on Unsplash
如果你曾经听到有人告诉你,他们从来不需要查任何东西,或者他们什么都知道——那么作为一名优秀的数据科学家,你可能应该有点怀疑。从统计学上来说,一个人不可能知道所有的事情,除非是关于一个非常具体的话题。作为数据科学家,我们通常会涉足与数据科学和编程相关的不同专业领域。即使我们只专注于一个专业,现实是技术在不断发展,因为我们拥有的工具最适合我们手头的任务。伴随这种不断的进化而来的是好奇、适应变化和不断学习的需要。
作为优秀的数据科学家,重要的是不要回避利用每一个可以利用的资源。如果你对某件事不确定,你可以使用很多资源来帮助解决问题,回答问题,或者了解更多关于某个特定主题的信息。即使你不打算马上使用它——知道去哪里找也无妨!
在这篇博文中,我将介绍 5 大可用资源(免费!)献给每一位数据科学家,以及每一位希望了解某个主题的更多信息或者只是想增长技能、提高能力的人。
5.证明文件
Photo by Bernd Klutsch on Unsplash
当我学习一个新的库、库中的一个新函数、一门新的编程语言等时,我喜欢浏览的第一批资源之一。是特定库/函数/语言的文档。在许多情况下,文档都经过精心策划,为每个特定组件的功能以及使用它时的预期提供了解释和示例。虽然有些库有非常深入和有条理的文档,但有时这些文档可能有点乏味。
如今,文档通常允许开源协作,所以当人们觉得文档不够完整时,他们可以根据需要添加解释。虽然这些添加通常必须得到项目负责人的批准,但大多数人都乐于接受用户的有益合作。
在某些情况下,文档可能有点太专业,提供的库或语言的范围太广,不够详细,或者——正如我上面提到的——只是有点乏味。在这种情况下,我喜欢求助于…
4.博客帖子
博客文章(比如你现在正在阅读的这篇)允许人们分享他们积累的关于任何话题的知识。有些人知道如何讲故事,从你读到开头几个字的那一刻起,他们就能把你吸引住。他们有一种天赋,可以用你想不到的方式来解释事情——也许还会不时地出现一些例子。不知不觉中,你就明白了几分钟前让你陷入困惑漩涡的话题。
博客帖子最好的一点是,人们通常不会写它们,除非他们对他们正在讨论的话题感到某种程度的舒适。这样,你就可以放心了,你正在从某个人那里获得知识,这个人可能不一定是某个主题的专家,但是他们对他们正在讨论的内容有足够的信心来写下来。
博客的缺点是,当人们倾向于漫谈时,它们有时会变得有点长。其他时候,他们有点跑题,不太切中要害。在很多情况下,他们可能解释了你正在寻找的东西的概况,但并没有真正得到你真正需要的东西。如果你正在寻找一个特定问题的答案,那么我可能会推荐…
3.StackOverflow
StackOverflow 是对技术领域的任何人来说最有用的网站/论坛之一。除了帮助数据科学家回答问题和解决他们可能遇到的问题,它也是程序员遇到困难时使用的东西。StackOverflow 是数据科学/编程社区的真实代表,在这里,人们提出问题,让那些更有经验的人(或者至少是发现了特定问题的答案的人)来回答问题。有时问题就像运行特定方法或函数的正确语法一样简单。其他时候,人们会遇到更多的技术问题,例如实例化和建立神经网络的正确方法。
因为 StackOverflow 本质上是一个供人们提问和回答问题的论坛,所以在很多情况下,你会发现有人和你遇到了同样的问题。虽然数据科学仍然是一个相对较新的领域,但它已经足够成熟,人们已经经历了相同的练习,并遇到了与您相同的问题。语言和库已经存在了足够长的时间,人们可以找到并修复 bug,并解决他们自己的许多问题。如果有人很好奇问了一个问题,那么很可能其他人已经花时间回答了他们的问题。
在某些情况下,人们不喜欢问自己的问题,找不到他们的具体问题或充分解决他们问题的答案,不通过阅读学习,或者他们只是喜欢自己解决问题。如果是这种情况,请考虑一下…
2.油管(国外视频网站)
Photo by Christian Wiediger on Unsplash
在今天这个时代,你可以找到任何东西的视频——无论你是想建立一个机器学习模型,在你的汽车上做一些工作,学习新的烹饪食谱,甚至只是寻找一些娱乐。进入 YouTube。YouTube 是一个允许用户发布几乎任何主题的视频的网站,在许多情况下,这些视频是解释性的,可以帮助你学习新的东西或扩展你对现有主题的知识。
使用 YouTube 进行编程和数据科学也没什么不同。在一个存在在线学校和新兵训练营的世界里,不难找到一个关于数据科学或编程任何方面的极端(有时太多)细节的视频。刚刚接触 Python,您正在尝试学习如何构建函数?有一个视频可以证明这一点。试图学习如何建立一个推荐系统?还有一个的视频给也就是。对神经网络感兴趣?你猜对了。没有短缺的视频为的那个。
最终,YouTube 与 StackOverflow 的相似之处在于,它是人们帮助人们(或为人们创造娱乐内容),只是这次它是视频格式的。也许接受完全陌生的人的建议是你不能面对面交谈的,这不是你喜欢的。也许你对给你建议的人的出身有些犹豫。如果这些是你所关心的,那么你可以使用的最好的资源,经常被忽视的是…
1.你的网络!
Photo by Helena Lopes on Unsplash
我之前在博客中提到过这一点,事实是数据科学和编程是一个非常紧密的社区。我们是一群总是乐于谈论我们知道什么,我们正在做什么,以及我们想学什么的人。在我的网络中,我还没有遇到过一个数据科学家不愿意坐下来边喝咖啡(或一两杯欢乐时光饮料)边聊天,讨论他们的知识以及他们是如何获得这些知识的。
使用你的人际网络是一种经常被忽视的资源,因为大多数人不喜欢“打扰”别人。这里的问题始于把使用你的网络看作是对他人的打扰。大多数人都乐于与他人建立真诚的联系,尤其是当这意味着可以谈论一点自己和自己的知识时。
不是每个人都喜欢交际。好消息是,如果有人不喜欢谈论自己,回答你的问题,或者坐下来聊天,他们很可能会在你真正出去做这些之前让你知道。他们可能不会回复你的信息,他们可能会拒绝你。别担心!第一步是把你自己放在那里,真正地与人互动。即使你认为你现在不是一个善于交际的人,当你找到一些共同点和话题来谈论的时候,谈话往往会自由地进行。不要害怕利用你的网络来帮助你成长为一个人和一名数据科学家!
荣誉奖——谷歌
Maybe the most recognizable logo of them all. Source
在我结束之前的任何资源之前,谷歌通常是我开始的地方(也许除了网络)。通过了解如何有效地使用谷歌,你经常可以找到各种有价值的资源来帮助解决手头的问题。有效的谷歌搜索减少了你花在寻找东西上的时间,让你花更多的时间实际解决你的问题。但是要小心不要迷失在兔子洞里——因为谷歌提供了这么多不同的结果,很容易忽略那些可能最有用的。
虽然这并不意味着是一个包罗万象的资源列表,但它是我在作为一名数据科学家的旅程中(以及在进入该行业之前)发现有用的前五个。互联网是一个充满知识的地方。但是要小心,因为不是所有的都是有用的,当然也不会总是对的!小心行事,永远愿意学习,并过着好奇的生活。一个好的数据科学家总是在问问题,总是在寻求学习!
5 大物体检测挑战和解决方案
回顾对象检测问题提出的独特挑战和研究人员克服这些障碍的努力
Personal photo processed with YOLOv2. Author at Haleakalā National Park.
计算机视觉领域最近经历了实质性的进展,这主要归功于深度学习,特别是卷积神经网络(CNN)的进步。在图像分类中,计算机根据图像的内容对图像进行分类或分配标签,只需利用预先训练的神经网络并微调最后几个吞吐量层,通常就可以看到很好的结果。
分类和然而,就在几年前,在一幅图像中找到未知数量的单个物体还被认为是一个极其困难的问题。这项被称为物体检测的任务现在已经可行,甚至已经被像和 IBM 这样的公司产品化。但是所有这些进步都来之不易!物体检测提出了许多超出图像分类所需的相当大的挑战。在简单介绍了这个主题之后,让我们深入探讨这些问题带来的几个有趣的障碍以及各种新兴的解决方案。
介绍
物体检测的最终目的是定位重要的物品,在其周围绘制矩形包围盒,并确定所发现的每个物品的类别。物体检测的应用出现在 许多不同的领域 包括为自动驾驶汽车检测行人,监控农作物,甚至为体育运动实时跟踪球。多年来,研究人员为此目标投入了大量工作:从 2001 年发表的 Viola 和 Jones 的面部检测算法到 2017 年发布的 RetinaNet 快速、高度精确的单状态检测框架。CNN 的引入标志着物体探测历史上的一个关键时刻,因为几乎所有现代系统都以某种形式使用 CNN。也就是说,这篇文章的剩余部分将专注于对象检测的深度学习解决方案,尽管其他方法也面临类似的挑战。要了解更多关于物体检测的基础知识,请查看我在 Metis 博客上的帖子:“ 物体检测初学者指南 ”
挑战
1.双重优先级:对象分类和定位
对象检测的第一个主要复杂性是它的附加目标:我们不仅要对图像对象进行分类,还要确定对象的位置,通常称为对象定位任务。为了解决这个问题,研究人员通常使用多任务损失函数来惩罚错误分类和定位错误。
基于区域的 CNN 代表了一类流行的对象检测框架。这些方法包括生成物体可能位于的区域建议,然后进行 CNN 处理以分类和进一步细化物体位置。Ross Girshick 等人开发了 快速 R-CNN 以改进他们最初的结果与 R-CNN 。顾名思义,快速 R-CNN 提供了显著的加速,但准确性也提高了,因为分类和定位任务是使用一个统一的多任务损失函数来优化的。将可能包含对象的每个候选区域与图像的真实对象进行比较。然后,候选区域招致错误分类和边界框错位的惩罚。因此,损失函数由两种项组成:
其中分类项对真实对象类别 u 的预测概率施加对数损失,定位项是定义矩形的四个位置分量的平滑 L₁ 损失。注意,当不存在对象时,本地化惩罚不适用于背景类, u=0 。还要注意,可以调整参数 λ 以更强地优先考虑分类或定位。
2.实时检测的速度
目标检测算法不仅需要准确地分类和定位重要的目标,还需要在预测时非常快,以满足视频处理的实时要求。几年来的几项关键改进提高了这些算法的速度,将测试时间从 R-CNN 的每秒 0.02 帧(fps)提高到令人印象深刻的快速 YOLO 的每秒 155 帧。
快速 R-CNN 和 快速 R-CNN 旨在加快原有 R-CNN 的接近速度。R-CNN 使用 选择性搜索 来生成 2000 个感兴趣的候选区域(RoI ),并将每个 RoI 单独通过 CNN 库,这导致了巨大的瓶颈,因为 CNN 处理相当慢。相反,快速 R-CNN 将整个图像通过 CNN base 发送一次,然后将通过选择性搜索创建的 ROI 与 CNN 特征图进行匹配,从而将处理时间减少了 20 倍。虽然快速 R-CNN 比 R-CNN 快得多,但另一个速度障碍仍然存在。快速 R-CNN 在单幅图像上执行对象检测大约需要 2.3 秒,而选择性搜索占用了整整 2 秒的时间!更快的 R-CNN 用一个单独的子神经网络取代了选择性搜索来生成 ROI,从而又提高了 10 倍,因此测试速度约为 7-18 fps。
尽管有这些令人印象深刻的改进,视频通常至少以 24 fps 拍摄,这意味着更快的 R-CNN 可能无法跟上。基于区域的方法包括两个独立的阶段:提出区域和处理区域。这种任务分离被证明有些低效。另一种主要类型的对象检测系统依赖于统一的单状态方法。这些所谓的单次检测器在单次通过图像时完全定位和分类物体,这大大减少了测试时间。一个这样的单次检测器 YOLO 从在图像上布置网格开始,并允许每个网格单元检测固定数量的不同尺寸的物体。对于图像中出现的每个真实对象,与对象中心相关联的网格单元负责预测该对象。然后,一个复杂的多项损失函数确保所有的定位和分类发生在一个过程中。这种方法的一个版本,快速 YOLO,甚至达到了 155 fps 的速率;然而,在这种高速度下,分类和定位精度急剧下降。
最终,今天的对象检测算法试图在速度和准确性之间取得平衡。检测框架之外的几个设计选择会影响这些结果。例如, YOLOv3 允许不同分辨率的图像:高分辨率图像通常具有更好的准确性,但处理时间较慢,低分辨率图像则相反。CNN 基底的选择也影响速度-精度的权衡。像《盗梦空间-雷斯网-V2》中使用的 164 层这样的非常深的网络产生了令人印象深刻的准确性,但在速度方面与 VGG-16 的框架相比就相形见绌了。物体检测设计的选择必须根据速度和精度孰先孰后来决定。
3.多种空间比例和纵横比
对于对象检测的许多应用,感兴趣的项目可能以各种尺寸和纵横比出现。从业者利用几种技术来确保检测算法能够以多种尺度和视角捕捉对象。
锚箱
更快的 R-CNN 的更新区域建议网络不是选择性搜索,而是在图像的卷积特征图上使用一个小的滑动窗口来生成候选 ROI。可以在每个位置预测多个 ROI,并相对于参考锚盒进行描述。这些锚箱的形状和尺寸经过精心选择,以适应不同的比例和长宽比。这允许检测各种类型的对象,希望在定位任务期间边界框坐标不需要调整太多。其他框架,包括单次检测器,也采用锚盒来初始化感兴趣的区域。
Carefully chosen anchor boxes of varying sizes and aspect ratios help create diverse regions of interest.
多重特征地图
单次发射探测器必须特别强调多尺度问题,因为它们只需通过 CNN 框架一次就能探测到物体。如果仅从最终的 CNN 层中检测到对象,则只会发现较大的项目,因为较小的项目可能会在池层中的下采样期间丢失太多信号。为了解决这个问题,单触发探测器通常在多个 CNN 层中寻找物体,包括保持较高分辨率的早期层。尽管使用多特征地图是一种预防措施,但众所周知,单次检测器很难检测到小物体,尤其是那些紧密聚集的物体,如一群鸟。
Feature maps from multiple CNN layers help predict objects at multiple scales. (Figure source, modified.)**
特征金字塔网络
特征金字塔网络(FPN) 将多特征地图的概念更进了一步。图像首先通过典型的 CNN 路径,产生语义丰富的最终层。然后,为了重新获得更好的分辨率,FPN 通过对该特征图进行上采样来创建自上而下的路径。虽然自上而下的路径有助于检测不同大小的对象,但空间位置可能会有偏差。在原始特征图和相应的重建层之间添加横向连接,以改善对象定位。FPN 目前提供了一种探测多尺度物体的领先方法,YOLO 在第三版 的 中增加了这项技术。
The feature pyramid network detects objects of varying sizes by reconstructing high-resolution layers from layers with greater semantic strength. (Figure source, modified.)**
4.有限的数据
目前可用于对象检测的有限数量的注释数据被证明是另一个重大障碍。对象检测数据集通常包含大约十几个到一百个对象类别的基本事实示例,而图像分类数据集可以包括超过 100,000 个类别。此外,众包经常免费产生图像分类标签(例如,通过解析用户提供的照片说明的文本)。然而,收集地面真实标签以及用于物体检测的精确边界框仍然是令人难以置信的乏味工作。
由微软提供的 COCO 数据集目前领先于一些可用的最佳对象检测数据。COCO 包含 300,000 个分段图像,其中 80 个不同类别的对象具有非常精确的位置标签。每幅图像平均包含大约 7 个物体,并且这些物体以非常大的比例出现。尽管这个数据集很有帮助,但是如果只在 COCO 上训练,这 80 个选择类之外的对象类型将不会被识别。
缓解数据稀缺的一个非常有趣的方法来自 YOLO9000,即 YOLOT3 的第二个版本 。YOLO9000 将许多重要的更新纳入了 YOLO,但它也旨在缩小对象检测和图像分类之间的数据集差距。YOLO9000 同时在 COCO 和 ImageNet 上进行训练,这是一个拥有数万个对象类的图像分类数据集。COCO 信息有助于精确定位物体,而 ImageNet 增加了 YOLO 的分类“词汇”分层单词树允许 YOLO9000 首先检测对象的概念(如“动物/狗”),然后深入到细节(如“西伯利亚哈士奇”)。这种方法似乎对 COCO 已知的概念(如动物)很有效,但对不太流行的概念表现不佳,因为 RoI 建议仅来自 COCO 的训练。
YOLO9000 trains on both COCO and ImageNet to increase classification “vocabulary.” (Figure source, modified.)**
5.阶级不平衡
类别不平衡被证明是大多数分类问题的一个问题,对象检测也不例外。考虑一张典型的照片。更有可能的是,照片包含几个主要对象,图像的其余部分被背景填充。回想一下,R-CNN 中的选择性搜索为每幅图像生成了 2000 个候选感兴趣区域——想象一下,这些区域中有多少不包含物体并被视为阴性!
最近在 RetinaNet 中实现了一种称为焦点损失的方法,有助于减少等级不平衡的影响。在优化损失函数中,当惩罚错误分类时,焦点损失代替了传统的对数损失:
其中 pᵤ 是真实类别的预测类别概率,γ >为 0。附加因子(*)减少了高概率的良好分类示例的损失,总体效果是不强调模型熟知的许多示例的类,如背景类。因此,占据少数类的感兴趣对象会获得更多的重要性,并提高精确度。
结论
目标检测通常被认为比图像分类困难得多,特别是因为这五个挑战:双优先级、速度、多尺度、有限数据和类别不平衡。研究人员致力于克服这些困难,经常产生惊人的结果;然而,重大挑战依然存在。
基本上,所有的对象检测框架都继续与小对象作斗争,尤其是那些聚集在一起的部分遮挡的对象。具有顶级分类和定位精度的实时检测仍然具有挑战性,从业者在做出设计决策时必须经常优先考虑这两者。如果假设帧之间存在某种连续性,而不是单独处理每一帧,视频跟踪在未来可能会有所改进。此外,一个有趣的增强可能会看到更多的探索,将当前的二维边界框扩展到三维边界立方体。尽管许多物体检测障碍已经有了创造性的解决方案,但这些额外的考虑——以及更多——表明物体检测研究肯定还没有完成!
参考
[1] T.-Y. Lin,P. Goyal,R. Girshick,K. He 和 P. Dollar,密集物体探测的焦点损失 (2017),arXiv 预印本 arXiv:1708.02002。
[2] R. Girshick,J. Donahue,T. Darrell 和 J. Malik,用于精确对象检测和语义分割的丰富特征层次 (2014),IEEE 计算机视觉和模式识别会议(CVPR)。
[3] R. Girshick, Fast R-CNN (2015),IEEE 计算机视觉国际会议(ICCV)。
[4] S. Ren、K. He、R. Girshick 和 J. Sun。更快的 r-cnn:用区域提议网络实现实时目标检测。 (2015)神经信息处理系统(NIPS)。
[5] J. Redmon,S. Divvala,R. Girshick,a .法尔哈迪,你只看一次:统一的实时物体检测 (2015),arXiv 预印本 arXiv:1506.02640。
[6] J .雷德蒙和 a .法尔哈迪, Yolo9000:更好、更快、更强 (2017),计算机视觉和模式识别(CVPR)。
[7] J .雷德蒙和 a .法尔哈迪,约洛夫 3:一种增量改进 (2018),arXiv。
[8] W. Liu,D. Anguelov,D. Erhan,C. Szegedy 和 S. E. Reed, SSD:单次多盒探测器 (2015),CoRR
[9] T.-Y. Lin,P. Dollar,R. Girshick,K. He,B. Hariharan 和 S. Belongie,用于对象检测的特征金字塔网络 (2017),IEEE 计算机视觉和模式识别会议论文集。
[10] T.-Y. Lin、M. Maire、S. Belongie、J. Hays、p .佩罗娜、D. Ramanan、P. Dollar 和 C. L. Zitnick,微软 coco:上下文中的通用对象 (2014),欧洲计算机视觉会议。
5 个智能 Python NumPy 函数
简洁编程的优雅 NumPy 函数
在机器学习和数据科学项目的日常数据处理中,我们会遇到独特的情况,这些情况需要样板代码来解决问题。随着时间的推移,其中一些被转换成由核心语言或软件包本身根据社区的需要和使用提供的基本特性。在这里,我分享 5 个优雅的 python Numpy 函数,它们可以用于高效简洁的数据操作。
1)在整形中使用-1
Numpy 允许我们重塑一个矩阵,只要新的形状与原来的形状兼容。这个新形状的一个有趣的方面是,我们可以给出一个形状参数作为 -1 。这仅仅意味着它是一个未知的维度,我们希望 Numpy 能够解决它。Numpy 将通过查看***‘数组的长度和剩余维度’***并确保它满足上述标准来确定这一点。现在让我们看一个例子。
Pictorial representation of different reshape with one dimension as -1
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
a.shape
(2, 4)
假设我们给行 1,给列-1,那么 Numpy 将能够找到列 8。
a.reshape(1,-1)
array([[1, 2, 3, 4, 5, 6, 7, 8]])
假设我们给行-1,给列 1,那么 Numpy 将能够找到行 8。
a.reshape(-1,1)
array([[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8]])
类似地,下面是可能的。
a.reshape(-1,4)
array([[1, 2, 3, 4],
[5, 6, 7, 8]])a.reshape(-1,2)
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])a.reshape(2,-1)
array([[1, 2, 3, 4],
[5, 6, 7, 8]])a.reshape(4,-1)
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
这也适用于任何更高级张量整形,但是只能给出一个维度-1。
a.reshape(2,2,-1)
array([[[1, 2],
[3, 4]],[[5, 6],
[7, 8]]])a.reshape(2,-1,1)
array([[[1],
[2],
[3],
[4]],[[5],
[6],
[7],
[8]]])
如果我们试图重塑一个不兼容的形状或一个以上的未知形状,将会出现一个错误信息。
a.reshape(-1,-1)
**ValueError**: can only specify one unknown dimensiona.reshape(3,-1)
**ValueError**: cannot reshape array of size 8 into shape (3,newaxis)
总而言之,当重塑数组时,新形状必须包含与旧形状相同数量的元素,这意味着两个形状的尺寸的乘积必须等于。当使用-1 时,对应于-1 的维数将是原始数组的维数的乘积除以赋予reshape
的维数的乘积,以保持相同的元素数量。
2) AArgpartition:在数组中找到 N 个最大值
Numpy 有一个名为 argpartition 的函数,它可以高效地找到最大的 N 值索引并依次找到 N 个值。它给出索引,然后你可以排序,如果你需要排序的值。
a = np.array([10, 7, 4, 3, 2, 2, 5, 9, 0, 4, 6, 0])index = **np.argpartition**(a, -5)[-5:]
index
array([ 6, 1, 10, 7, 0], dtype=int64)np.sort(a[index])
array([ 5, 6, 7, 9, 10])
3) Clip:如何将数组中的值保持在一个区间内
在许多数据问题或算法中(如强化学习中的 PPO ),我们需要将所有值保持在一个上限和下限内。Numpy 有一个名为 Clip 的内置函数可以用于此目的。Numpy clip () 函数用于 Clip (限制)数组中的值。给定一个区间,区间外的值被剪切到区间边缘。例如,如果指定了[-1,1]的间隔,则小于-1 的值变为-1,大于 1 的值变为 1。
Clip example with min value 2 and maximum value 6
**#Example-1**
a = np.array([10, 7, 4, 3, 2, 2, 5, 9, 0, 4, 6, 0])
print (**np.clip**(a,2,6))[6 6 4 3 2 2 5 6 2 4 6 2]**#Example-2**
a = np.array([10, -1, 4, -3, 2, 2, 5, 9, 0, 4, 6, 0])
print (**np.clip**(a,2,5))[5 2 4 2 2 2 5 5 2 4 5 2]
4)提取:根据条件从数组中提取特定元素
我们可以使用 Numpy extract() 函数从符合条件的数组中提取特定的元素。
arr **=** np.arange(10)
arrarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])# Define the codition, here we take MOD 3 if zero
condition **=** np.mod(arr, 3)**==**0
conditionarray([ True, False, False, True, False, False, True, False, False,True])**np.extract**(condition, arr)
array([0, 3, 6, 9])
类似地,如果需要,我们可以使用 AND 和 OR 组合的直接条件
**np.extract**((**(arr > 2) & (arr < 8)**), arr)array([3, 4, 5, 6, 7])
5) setdiff1d:如何在一个数组中找到与另一个数组相比较的唯一值
返回一个数组中不存在于另一个数组中的唯一值。这相当于两个数组的差异。
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array([3,4,7,6,7,8,11,12,14])
c = **np.setdiff1d**(a,b)
carray([1, 2, 5, 9])
最后注意:
这是 5 个 Numpy 函数,社区并不经常使用,但是它们非常简洁优雅。在我看来,只要有类似的情况,我们就应该使用它们,因为它们不仅提供了更少的代码,而且是实现复杂问题解决方案的一种聪明方式。
感谢阅读。可以联系我@ LinkedIn 。
每月只需 5 美元,就可以无限制地获取最鼓舞人心的内容……点击下面的链接,成为媒体会员,支持我的写作。谢谢大家!
d6tflow 可扩展深度学习管道 5 步指南
如何将典型的 Pytorch 脚本转换为可扩展的 d6tflow DAG 以加快研究&开发
引言:何苦呢?
构建深度学习模型通常涉及复杂的数据管道以及大量的反复试验,调整模型架构和需要比较其性能的参数。经常很难跟踪所有的实验,往好里说会导致混乱,往坏里说会导致错误的结论。
在你的 ML 代码不好的 4 个原因中,我们探讨了如何将 ML 代码组织成 DAG 工作流来解决这个问题。在本指南中,我们将通过一个实际的案例研究,利用 d6tflow 将现有的 pytorch 脚本转变为可扩展的深度学习管道。起点是脸书的 pytorch 深度推荐器模型,我们将通过 5 个步骤将代码迁移到可扩展的深度学习管道中。下面的步骤是用部分伪代码编写的,以说明概念,完整的代码也是可用的,请参见文章末尾的说明。
我们开始吧!
第一步:计划你的 DAG
要计划您的工作并帮助他人了解您的管道是如何组合在一起的,您需要从考虑数据流、任务之间的依赖关系和任务参数开始。这有助于您将工作流程组织成逻辑组件。你可能想画一个这样的图
下面是脸书深度学习推荐器模型(DLRM)的 Pytorch 模型训练 DAG。它显示了训练任务TaskModelTrain
及其所有的依赖项,以及这些依赖项是如何相互关联的。如果你写功能代码,很难看出你的工作流程是如何像这样组合在一起的。
第二步:写任务而不是函数
数据科学代码通常组织在函数中,这会导致很多问题,如4ML 代码不好的原因中所述。相反,您希望编写 d6tflow 任务。好处是您可以:
- 将任务链接到 DAG 中,以便自动运行所需的依赖关系
- 从依赖关系轻松加载任务输入数据
- 轻松保存任务输出,如预处理数据和训练模型。这样你就不会意外地重新运行长时间运行的训练任务
- 将任务参数化,以便智能管理它们(参见下一步)
- 将输出保存到 d6tpipe 为了将数据从代码中分离出来并轻松共享数据,请参见数据科学家犯下的 10 大编码错误
下面是将功能代码转换成 d6t 流程任务后,脸书·DLRM 代码的“之前/之后”的样子。
伸缩性不好的典型 Pytorch 功能代码:
使用可伸缩 d6tflow 任务编写的相同逻辑:
步骤 3:参数化任务
为了提高模型性能,您将尝试不同的模型、参数和预处理设置。为了跟踪所有这些,您可以向任务添加参数。这样,您可以:
- 跟踪哪些模型已经用哪些参数进行了训练
- 随着参数的变化,智能地重新运行任务
- 帮助其他人了解工作流中引入参数的位置
下面用参数设置脸书 DLRM 模型训练任务。请注意,您不再需要手动指定保存训练模型和数据的位置。
比较训练模型
现在,您可以使用该参数轻松地比较不同模型的输出。确保在加载任务输出之前使用该参数运行工作流(参见步骤 4)。
继承参数
通常,您需要在工作流程的下游设置一个参数级联。如果你写函数代码,你必须在每个函数中重复这个参数。使用 d6tflow,您可以继承参数,以便终端任务可以根据需要将参数传递给上游任务。
在脸书 DLRM 工作流中,TaskModelTrain
从TaskGetTrainDataset
继承参数。这样你可以运行TaskModelTrain(mini_batch_size=2)
,它会将参数传递给上游任务,即TaskGetTrainDataset
和所有依赖于它的其他任务。在实际代码中,注意self.clone(TaskName)
和@d6tflow.clone_parent
的使用。
步骤 4:运行 DAG 来处理数据和训练模型
要开始数据处理和模型训练,您需要运行 DAG。您只需要运行自动运行所有依赖项的终端任务。在实际运行 DAG 之前,您可以预览将要运行的内容。如果您对代码或数据进行了任何更改,这尤其有用,因为它将只运行已更改的任务,而不是整个工作流。
步骤 5:评估模型性能
现在工作流已经运行并且所有任务都已完成,您可以加载预测和其他模型输出来比较和可视化输出。因为任务知道每个输出保存在哪里,所以您可以直接从任务加载输出,而不必记住文件路径或变量名。这也使得你的代码可读性更好。
比较模型
您可以很容易地比较具有不同参数的不同模型的输出。
继续迭代
当您迭代、更改参数、代码和数据时,您会想要重新运行任务。d6tflow 智能地指出哪些任务需要重新运行,这使得迭代非常高效。如果你改变了参数,你不需要做任何事情,它会知道自动运行什么。如果您更改了代码或数据,您必须使用.invalidate()
将任务标记为未完成,d6tflow 将会解决剩下的问题。
在脸书 DLRM 工作流中,比如说您更改了培训数据或对培训预处理进行了更改。
完整源代码
所有代码都在 https://github.com/d6tdev/dlrm 提供。与https://github.com/facebook/dlrm相同,增加了 d6tflow 文件;
- flow_run.py:运行流= >运行该文件
- flow_task.py:任务代码
- flow_viz.py:显示模型输出
- flow_cfg.py:默认参数
- dlrm _ d6t _ py torch . py:dlrm _ data _ py torch . py 用于 d6tflow
自己试试!
你的下一个项目
在本指南中,我们展示了如何构建可扩展的深度学习工作流。我们使用了现有的代码库,并展示了如何将线性深度学习代码转换为 d6tflow DAGs 以及这样做的好处。
对于新项目,你可以从 https://github.com/d6t/d6tflow-template的可扩展项目模板开始。结构非常相似:
- 运行. py:运行工作流
- task.py:任务代码
- cfg.py:管理参数
5 个步骤。五个月。成为一名 AI 产品经理。
Photo by Marvin Meyer on Unsplash
越来越多的公司正在雇佣专门打造人工智能产品的产品经理。为什么?
- 人工智能本质上是高度战略性的
- 人工智能的成功需要不同于传统软件产品的技术工具箱
- 几乎在每个行业,人工智能都有巨大的机会!
以下是 5 个步骤,让你在 5 个月内获得第一份人工智能产品经理的工作:
第一步——选择你的人工智能应用领域。
人工智能项目经理预计不仅仅拥有技术和商业印章。他们需要有战略眼光。他们需要了解行业的总体趋势。在我的职业生涯中,我见过应用人工智能可能会扰乱整个公司和整个商业模式的情况!理解 ML 算法是如何工作的很重要(我们稍后会谈到),但是作为第一步,你需要决定你想要颠覆什么行业。是 fintech 吗?电子商务?工业技术?天空是无限的——但是,当然,记住利用你以前的行业经验来获得在招聘过程中推销自己和谈判的最佳杠杆。
第一个月
花第一个月的时间,深入熟悉你所选择的行业领域。
- 在你选择的领域里,列出 10 家最值得工作的公司
- 对这个领域的人进行信息采访
- 阅读与你选择的领域相关的书籍和行业分析(Gartner,Forester 等。)参加会议等。
- 用你最擅长的任何方式学习空间内外!
第二步——成为顾客
一旦你选择了你的人工智能应用领域,你需要为你选择的领域培养“产品意识”。在你所选择的领域中,开发客户想要什么的自然直觉的最好方法就是成为客户。如果你想为职业足球运动员开发软件,了解你的客户的最好方法就是自己踢足球!去参加足球练习,和足球运动员一起玩,和足球运动员交谈,观看足球比赛,分析足球运动员。当您自己成为一名足球运动员时,您将对该应用领域中的客户真正想要和需要的东西有更自然的直觉。
第二个月
花两个月的时间成为顾客!第一个月是了解全局。第 2 个月不是被动学习…第 2 个月是动手体验学习。出去做吧!对于如何做到这一点,没有硬性的指导方针。这完全取决于你选择的领域,但这里有一些例子可以激发你的想象力:
- 例子 1——营销技术:如果你选择了“营销技术”,试着帮助你的朋友和家人进行营销!试着开一家 Shopify 商店,卖一些你在阿里巴巴上买的便宜的东西。尝试自己做营销!
- 例子 2——联网汽车:假设你的目标是联网汽车领域的人工智能工作,也许你想在这些联网汽车创新者之一那里找到一份工作。为了“成为顾客”,我会设定一个目标,试驾每一辆电动汽车和无人驾驶汽车。你知道这是怎么回事吗?想象你正在与邮轮的招聘经理交谈——如果你能告诉招聘经理你已经试驾了市场上的每一辆智能汽车,你就为成功搭建了舞台!
#3 —为客户而设计
一旦你对你的应用领域中的客户真正想要什么有了自然的直觉,你就应该开始为能解决这些问题的产品创建模型和设计。理想情况下,这是你已经在做的日常工作的一部分,但如果不是,你仍然可以把它作为一个副业或“激情项目”
我以前的一个 MBA 学生利用他的激情项目在 Adobe 获得了他的第一份项目经理工作。该学生能够向 Adobe 招聘团队展示他自己创作的与 Adobe 业务和整体战略相关的设计和模型。尽管他以前从未担任过“正式”的产品经理,但他能够通过有形的模型而不是假设的案例面试讨论来展示自己的创意设计技能。
第三个月
- 设定一个目标,测试 5 种新的客户体验(在开始时,重数量轻质量!稍后你可以“收敛”你的最佳想法)
- 使用纸质原型、Balsamiq 和 Adobe XD 等工具来模拟你的新体验。给顾客看。
- 可选:参加谷歌免费的快速原型制作迷你课程,看看它能有多快!
步骤 4 —为客户打造
这一步是数据和算法占据中心舞台的地方。作为一名人工智能项目经理,你将与数据工程师、数据科学家,甚至可能是学术研究人员密切合作。不仅能够说 ML 行话,而且能够对这些算法如何工作有一个功能上的理解将会大有帮助。这会让你更有效地合作。会帮助你感知更多的 AI 商机。它将帮助你了解人工智能有哪些可能,哪些不可能——当然,最好的学习方式是通过动手项目,而不是被动地阅读或观看相关材料。
我需要成为一名程序员吗?不完全是。您甚至可以使用 Microsoft excel (0 编码)创建自己的测试数据集,并组合一些非常基本的模型(如线性或逻辑回归)!假设您正在为足球运动员开发预测足球受伤或预测门票价格的软件,您可以用 excel、R 或 python 中的虚构数据(或真实数据)来构建这个软件。尽管这些项目看起来很简单,但它们会给你一种更自然的直觉,让你知道什么是可能的,什么是不可能的。
*在步骤 3 中测试 UX 设计,在步骤 4 中测试一些概念验证算法模型。
第 4 个月
- 设定一个目标,在月底拥有一个半固体预测模型。
- 你在第四步走多深取决于你先前的技术技能,但是再次强调,最重要的是你用真实的东西弄脏你的手!
- 可能的工具:Excel,Tableau,Matlab,R,Python,
第五步——向你的客户(雇主)展示你的人工智能项目管理技能!
现在你已经做了一些与你的目标公司相关的人工智能产品管理的实际操作项目,你是黄金!!!现在你只需要以一种用户友好的方式展示它。Balsamiq、Adobe XD 和其他原型制作应用程序具有允许您将模型(带有 0 编码)导出到移动设备上的功能。是的,你可以在面对面的面试中把它掏出来,通过展示你原始的激情来真正吸引面试团队!您还可以使用 Adobe portfolio 来展示项目组合或创建自己的网站。这就是我最终获得第一份人工智能项目管理工作的原因。我创建了一个与我的简历相关联的 AI 和 PM 设计项目组合(使用 Adobe portfolio)。由于招聘人员和招聘经理几乎在每次面试中都在谈论它,这是我获得第一份人工智能项目经理工作的一个非常直观和切实的销售特征。
第五个月
- 设定一个目标,拥有一个视觉上有吸引力的项目组合,这样你就可以向雇主展示你在步骤 1-4 中做了什么。
- 如果你想让它变得非常简单,只需制作一些谷歌幻灯片,并在你的简历中嵌入一个“仅供查看”的谷歌幻灯片链接,或者把它放在你的 LinkedIn 个人资料中
- 提示—如果你不想在简历上出现超长的网址,你可以使用 Adobe acrobat 在简历中嵌入超链接。如果你没有 Acrobat,很多图书馆都有免费的 adobe 软件。
全程接触潜在雇主(即使是在第一个月)。不要推迟你的面试,即使你还在第二或第三个月,因为每次面试你都会学到很多东西。有了这 5 个步骤,你将成为一个人工智能项目经理的黄金雇员,一个在你选择的领域寻求创新的公司!
底线
如果你想成为人工智能项目经理,这是我最好的建议。做个 AI PM 就好!不要只是等着招聘人员来给你一个 AI PM 的黄金机会。只要开始把它作为你当前工作的一部分,或者作为一个业余爱好,你会惊奇地发现隐藏的机会之门向你敞开。
感谢您的阅读!随时欢迎反馈和评论!
获取视频内容及最新文章更新,订阅 智能产品*YouTube 频道 。*
5 步和 10 步,来学习机器学习。
有一个 5 步捷径,你可以马上解决机器学习问题,作为一个初学者,如果你想用机器学习做点什么,你可以先走这条路。
然后,你可以通过 10 步走成为一名数据科学家或更高级的机器学习工程师。
请记住这一点,
—改善你的心态和思维方式,这比学习如何使用工具重要得多。
—实现您的目标并成为数据科学家没有固定的轨道,因此您可以自由改变任何步骤或做您认为适合您的事情。
Read The Catalog
途径 1:阅读目录途径(5 步计划)
这条道路就像阅读你刚买的新设备的目录,你将学会如何有效地使用它,它将把你从一个初学者变成一个能够完成工作的*初学者!*你将能够以有限的准确度解决有限的问题。我建议在某些时候走这条路,以便能够快速解决不太重要的问题。
当我开始解决任何机器学习问题时,我会经常使用这些工具,这给了我一个尝试提高的基线准确性,它帮助我更加熟悉我拥有的数据集,并给了我一些见解。
- 精通 python 或者任何其他语言,比如 R,但是我建议你从 python 开始,网上有很多免费的资源,我建议你通过试错法和一些阅读来学习。
- 学习如何使用 Numpy 和 Scipy 进行数学运算, Pandas 和 Matplotlib 和 seaborn。
Numpy 和 Scipy、 都是数学库。 熊猫 是一个用于数据操作和分析的 python 库。 Matplotlib和Seaborn是帮助你可视化数据的库。 - 阅读文章 机器学习简介:自上而下的方法 **,**它会给你一个关于机器学习世界的流畅介绍。
- 阅读关于 **Scikit-learn,**这一步是实际的目录阅读,Scikit-learn 是您将用来解决问题的工具集,您不必学习库中的所有内容,只需学习实现一两个模型并阅读其他模型。 Scikit-learn 是一个 python 库,它有很多已经实现的模型,这些模型是黑盒,你可以用它们来直接训练和预测,你甚至可以调整模型的参数以适应你的问题并获得更高的准确性。
- 阅读一书中的第 2 章 用 Scikit 动手机器学习-学习& TensorFlow
如果你对数据科学不感兴趣,那么你不应该继续瞄准数据科学,但如果你感兴趣,我建议你走第二条路。
Now, Let’s be Professional
途径 2:建立职业道路(10 步计划)
这条道路实际上会把你从一个初学者变成一个数据科学家,它会给你工具集和知识来解决相对复杂的问题。
决定你作为一名数据科学家有多优秀的最重要的一点是,你应该始终了解该领域的最新发现。
我建议你阅读大量的论文,关注大量的出版物和作家,并与他们接触,有任何问题都可以联系我!我们可以互惠互利,建立一个充满爱心的社区。
另一件真正重要的事情是练习。
- 当然,选择一门编程语言来掌握并在你的旅途中使用。
- 复习你的线性代数知识https://OCW . MIT . edu/courses/mathematics/18-06-Linear-Algebra-spring-2010/
- 从小抄上修改你的统计和概率知识,或者你可以在 https://www.khanacademy.org/math/statistics-probability 的 T21 网站上从头学起
- 复习你的微积分知识或者从这门课程中学习微积分https://www.youtube.com/playlist?list = plzhqobowt qdmsr 9k-rj 53 dwvrmyo 3t 5 yr
- 当然,最受欢迎的免费课程是 Coursera 上的吴恩达课程理论知识 。
- 推荐阅读 aurélien géRon的书** 用 Scikit 动手机器学习-Learn&tensor flow,这是一本信息量很大的好书,是技术知识的 。**
- 在 Kaggle 上大量练习,现在你可以用你目前所理解的机器学习技术来解决问题。
- 本课程数据可视化https://www . EDX . org/course/data-visualization-a-practical-approach-for-absolute-初学者-0
- 了解如何使用数据库(SQL 和非 SQL)
- 学习 Hadoop & Spark,我推荐这个课程https://www.udemy.com/share/1000lU,那里有很多免费的课程和书籍,去看看吧。
- 我相信,如果你已经达到了这一点,你将能够引导自己前进。
要有奉献精神,要有信心你能做到。
祝你玩得开心,让你的机器 充满创意。
数据科学项目生命周期的 5 个步骤
通常,当我们谈论数据科学项目时,似乎没有人能够给出整个过程如何进行的可靠解释。从收集数据,一直到分析和展示结果
在这篇文章中,我将分解数据科学框架,带您经历项目生命周期的每个步骤,同时讨论关键技能和需求。
OSEMN 框架
Data Science Process (a.k.a the O.S.E.M.N. framework)
我将使用 OSEMN 框架带您完成这一过程,它从头到尾涵盖了数据科学项目生命周期的每一步。
1.获取数据
数据科学项目的第一步非常简单。我们从可用的数据源中获取我们需要的数据。
在这一步中,您需要查询数据库,使用像 MySQL 这样的技术技能来处理数据。您还可以接收 Microsoft Excel 等文件格式的数据。如果你使用的是 Python 或 R ,他们有特定的包可以从这些数据源直接读取数据到你的数据科学程序中。
您可能会遇到不同类型的数据库,如 PostgreSQL 、 Oracle ,甚至非关系数据库(NoSQL),如 MongoDB 。另一种获取数据的方法是使用网络抓取工具从网站上抓取,例如美汤。
收集数据的另一个流行选项是连接到 Web APIs。脸书和 Twitter 等网站允许用户连接到他们的网络服务器,访问他们的数据。你需要做的就是使用他们的 Web API 来抓取他们的数据。
当然,最传统的获取数据的方式是直接从文件中获取,比如从 Kaggle 下载,或者从以 CSV(逗号分隔值)或 TSV(制表符分隔值)格式存储的现有公司数据中下载。这些文件是平面文本文件。您将需要使用特殊的解析器格式,因为像 Python 这样的常规编程语言本身并不理解它。
所需技能
要完成上述任务,你需要一定的技能。例如,对于数据库管理,你需要知道如何使用 MySQL 、 PostgreSQL 或 MongoDB (如果你使用的是非结构化数据集)。
如果你希望在更大的数据集或大数据上工作,那么你需要学习如何使用分布式存储来访问,如 Apache Hadoop 、 Spark 或 Flink 。
2.擦除数据
获得数据后,接下来要做的事情是清理数据。这个过程是为了我们“清理”和过滤数据。记住“垃圾进,垃圾出”的哲学,如果数据未经过滤,不相关,分析的结果就没有任何意义。
在这个过程中,您需要将数据从一种格式转换成另一种格式,并将所有数据整合成一种标准化的格式。例如,如果您的数据存储在多个 CSV 文件中,那么您将把这些 CSV 数据合并到一个存储库中,以便您可以处理和分析它。
在某些情况下,如果您正在处理锁定的文件,我们还需要过滤这些行。锁定文件是指网页锁定文件,你可以从中了解到用户的人口统计数据,进入你的网站的时间等。
除此之外,清理数据还包括提取和替换值的任务。如果你意识到有缺失的数据集,或者它们可能看起来没有价值,这就是相应替换它们的时候了。
最后,您还需要拆分、合并和提取列。例如,对于产地,您可能同时拥有“城市”和“州”。根据您的需求,您可能需要合并或拆分这些数据。
把这个过程想象成组织和整理数据,删除不再需要的,替换丢失的,以及标准化所有收集数据的格式。
所需技能
您将需要像 Python 或 R 这样的脚本工具来帮助您清理数据。否则,你可以使用像 OpenRefine 这样的开源工具或者购买像 SAS Enterprise Miner 这样的企业软件来帮助你轻松完成这个过程。
为了处理更大的数据集,你需要掌握 Hadoop、 Map Reduce 或 Spark 方面的技能。这些工具可以通过编写脚本来帮助您清理数据。
3.浏览数据
一旦你的数据准备好被使用,就在你跳入人工智能和机器学习之前,你将不得不检查这些数据。
通常,在一个公司或商业环境中,你的老板只会扔给你一组数据,而如何理解这些数据取决于你。因此,将由您来帮助他们解决业务问题,并将其转化为数据科学问题。
为了实现这一点,我们需要探索数据。首先,您需要检查数据及其属性。不同的数据类型,如数字数据、分类数据、序数和名义数据等。需要不同的治疗方法。
然后,下一步是计算描述性统计,以提取特征和测试显著变量。检验重要变量通常是通过相关性来完成的。例如,探索某人患高血压的风险与其身高和体重的关系。请注意,有些变量是相关的,但它们并不总是意味着因果关系。
机器学习或建模中使用的术语“特征,是帮助我们识别代表数据的特征的数据特征。例如,“姓名”、“年龄”、“性别”是成员或员工数据集的典型特征。
最后,我们将利用数据可视化来帮助我们识别数据中的重要模式和趋势。我们可以通过简单的图表,如折线图或条形图,获得更好的图片,以帮助我们理解数据的重要性。
所需技能
如果你正在使用 Python,你将需要知道如何使用 Numpy、Matplotlib、Pandas 或 Scipy 如果您使用 R,您将需要使用 GGplot2 或 data exploration 瑞士刀 Dplyr。除此之外,你还需要掌握推断统计学和数据可视化方面的知识和技能。
就像你不需要硕士或博士来做数据科学一样,这些技术技能对于进行实验设计是至关重要的,因此你能够重现结果。
附加提示:
- 好奇。这可以帮助你发展你的蜘蛛感官来发现奇怪的模式和趋势。
- 关注你的听众,理解他们的背景和行话。以便您能够以对他们有意义的方式呈现数据。
4.模型数据
这是大多数人认为有趣的阶段。正如许多人称之为“神奇发生的地方”。
再一次,在到达这个阶段之前,记住擦洗和探索阶段对于构建有用的模型同样重要。所以,在这些阶段上花点时间,而不是直接跳到这个过程。
在对数据建模时,首先要做的事情之一是减少数据集的维数。并非所有的特征或值对于预测模型都是必不可少的。你需要做的是选择有助于结果预测的相关。
我们可以在建模中执行一些任务。我们还可以训练模型来执行分类,以使用逻辑回归来区分您收到的电子邮件是“收件箱还是“垃圾邮件”。我们也可以使用线性回归来预测数值。我们还可以使用建模对数据进行分组,以了解这些聚类背后的逻辑。例如,我们对电子商务客户进行分组,以了解他们在您网站上的行为。这需要我们使用聚类算法(如 k-means 或层次聚类)来识别数据点组。
简而言之,我们使用回归和预测来预测未来值,使用分类来识别,使用聚类来分组值。
所需技能
在机器学习中,你需要的技能是监督和非监督算法。对于库,如果你正在使用 Python,你将需要知道如何使用Sci-kit Learn;而如果你用的是 R,就需要用脱字符号。
在建模过程之后,您将需要能够计算评估分数,例如分类的精确度、召回率和 F1 分数。对于回归,您需要熟悉用于测量拟合优度的 R,以及使用 MAE(平均误差)或 RMSE(均方根误差)等误差分数来测量预测数据点和观察数据点之间的距离。
5.解释数据
我们正处于数据科学项目的最后也是最关键的一步,解释模型和数据。模型的预测能力在于它的概括能力。我们如何解释一个模型取决于它概括未知未来数据的能力。
解释数据指的是将你的数据呈现给一个非技术门外汉。我们提供结果来回答我们在项目开始时提出的业务问题,以及我们在数据科学过程中发现的可行见解。
可操作的洞察力是我们展示数据科学如何带来预测性分析以及随后的规定性分析的关键成果。在其中,我们学习如何重复一个积极的结果,或防止一个消极的结果。
最重要的是,你需要相应地想象你的发现,让它由你的业务问题驱动。以对组织有用的方式展示你的发现是很重要的,否则对你的利益相关者来说毫无意义。
在这个过程中,仅有技术技能是不够的。你需要的一项基本技能是能够讲述一个清晰可行的故事。如果你的演讲没有引起听众的反应,那就意味着你的交流没有效率。请记住,你将面对一个没有技术背景的观众,所以你传达信息的方式是关键。
所需技能
在这个过程中,要具备的关键技能是技术技能之外的。你需要很强的业务领域知识,以能够回答你要回答的业务问题的方式展示你的发现,并将其转化为可操作的步骤。
除了 Matplotlib,ggplot, Seaborn , Tableau , d3js 等数据可视化所需的工具之外。,你将需要软技能,如演示和沟通技能,再加上报告和写作技能,这肯定会在项目生命周期的这一阶段对你有所帮助。
概述
我在这里展示的是数据科学家在典型的数据科学项目中按时间顺序遵循的步骤。如果是一个全新的项目,我们通常会花费 60-70%的时间来收集和清理数据。因为它是一个框架,你可以用它作为你喜欢的工具的指南。
真正的北方总是我们定义的商业问题,甚至在开始数据科学项目之前。永远记住,扎实的业务问题、干净且分布良好的数据总是胜过花哨的模型。
我希望你今天学到了一些东西。如果您有任何反馈,请随时留言,并与任何可能觉得有用的人分享。
使用 Matplotlib 实现惊人可视化的 5 个步骤
Matplotlib 烂透了。默认情况下。
但是你可以调整它。
Photo by Isaac Smith on Unsplash
我们都经历过。 Matplotlib 被导入,你的数据集准备好了,你准备好做一些惊人的可视化。很快,看起来像土豆一样的默认 Matplotlib 图表的残酷现实就摆在你面前。
该死的。
几周前,我写了一篇文章,通过使用 Flask 和 Bokeh 开发交互式仪表板应用程序,将您的可视化提升到一个新的水平:
视觉化很重要。也许对作为数据分析师/科学家的你来说并非如此,但你可能会对表格数据充满信心…
towardsdatascience.com](/https-medium-com-radecicdario-next-level-data-visualization-dashboard-app-with-bokeh-flask-c588c9398f98)
那篇文章比这篇文章要复杂得多,但是如果你需要更灵活的东西,我还是想指出来。
今天,我将向你展示我在***【Matplotlib】***中使用大多数可视化工具所做的 5 件事,希望你能意识到,直接跳到 Seaborn 或 Bokeh 并没有真正的好处——在大多数情况下 Matplotlib 已经涵盖了。
数据集介绍
对于本指南,我使用了 Kaggle 上的KC _ house _ data数据集。从其他的海洋中选择这个的主要原因是它包含了大量的观察结果,但更重要的是,它包含了两个应该高度相关的属性:
- 居住面积
- 价格
由于潜在的相关性,可以绘制一个很好的散点图。
如果您不想下载数据集并跟随,以下是数据集头部的样子:
Head of kc_house_data.csv
但是在开始可视化之前,这里是导入和基本设置的代码:
Imports and Setup — https://gist.github.com/dradecic/43729ca53567fa44e433130faebeeb6d
我选择从数据集中抽取 100 个点,因为一般来说,当数据点太多时,散点图看起来不太好。
然后,我设置 x 代表居住面积, y 代表房价。
最初的绘图现在非常简单:
Default Matplotlib scatter plot — https://gist.github.com/dradecic/bfa07c255be6d7eafba74f001d6a9eb5
执行该单元格将产生一个不令人满意、乏味且难看的图表:
Default Matplotlib scatter plot
幸运的是,你可以做很多事情。以下是本文将基于的 5 个要点:
- 移除脊椎
- 向标题和轴标签添加自定义字体
- 向轴标签添加单位
- 更改标记、颜色、大小和不透明度
- 添加注释
事不宜迟,让我们直入第一点。
1.移除脊椎
Matplotlib 中的图表显示在一个“盒子”中,至少可以说,这个盒子看起来非常严格。默认情况下,其他可视化库更加开放,这种效果在这里很容易实现。
这里的目标是删除顶部的水平栏和右侧的垂直栏。
这是通过将以下内容添加到您的图表代码单元格中实现的:
Removing Spines — https://gist.github.com/dradecic/a96645c8798e556d1379bad2216bf895
Removing spines
瞧啊。图表现在更加开放,因此更有吸引力。
2.向标题和坐标轴标签添加自定义字体
现在,这个过程将比第一个过程更加繁琐。我选择使用 Raleway 字体,你需要下载压缩的 。ttf 如果你还没有的话。
下载完成后,将 TTF-s 解压到 Matplolib 的文件夹中。如果你像我一样使用Anaconda,Windows 上的路径会如下:
C:\Users\**<YOUR-USER-NAME>**\AppData\Local\Continuum\anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
您现在可以通过 Jupyter 和 Matplotlib 直接访问任何下载的字体。在新的单元格中,粘贴以下代码(我选择了半粗斜体作为标题,浅斜体作为轴标签):
Fonts Setup — https://gist.github.com/dradecic/a8b85ca866e7ac1543a362247feac80d
现在,您可以在调用 *之前,将以下代码添加到您的图表单元格中。*散点()。
注意在设置标题和/或轴标签时如何使用 LaTeX 。如果图表上的文字应该代表某种单位,例如平方英尺,这样做可以避免图表看起来怪异。
Title and Axis Labels — https://gist.github.com/dradecic/aa873a492a17b46da590370379853f24
这就是你的图表现在的样子:
Title and axis labels with custom font
对于几行代码来说还不错。但是你可以做得更好。
3.向轴标签添加单位
真的没有必要进一步解释这一点是关于什么的。
您希望轴标签更有吸引力。句号。
实现这一点的过程不像其他可视化库中那样简单,但它是可管理的。总之,代码如下:
Axis Units — https://gist.github.com/dradecic/71d0408606239e4ce7d9ddc37e646c79
上面的代码将为两个轴标签添加一个千位分隔符。
此外,在 x 轴上,单位是平方英尺,所以这就是将要添加的内容。
在 y 轴上,单位是美元。分笔成交点被格式化为货币,用逗号作为千位分隔符,用点号作为美分分隔符。
Added units to tick labels
4.更改标记、颜色、大小和不透明度
你不会真的认为我会跳过这个吧——是吗?
可能最明显的是,在大多数情况下,您要做的第一件事是改变标记的大小、形状和颜色。这里我使用了一个倒三角形作为标记,一些深蓝色作为标记颜色。
由于大量数据点集中在几乎相同的位置,不透明度应该降低,这样你可以更清楚地看到这些点。
总之,下面是实现这一点的代码:
Marker, Size, Color, and Opacity — https://gist.github.com/dradecic/14d62e2cddda2e0cc34e6d90e2174977
Changing markers
快好了。但还不是时候。
5.添加注释
最后,如果有意义的话(如果变量相关),在散点图上打印相关系数是个好主意。如果这样做,默认情况下,图例文本的左侧会有一个标记。
这不是我们想要的,我们想要一个简单、清晰、可见的相关系数的纯文本表示。
首先,你需要计算它。使用 Numpy 非常简单,在这种情况下,我会将结果四舍五入到小数点后两位。然后您需要将标签传递给 。scatter() 调用并隐藏存在的每一个图例句柄。
这样做需要一点代码,但并不复杂。
Annotation — https://gist.github.com/dradecic/100f022267b4dbbb50bbf693955d99ce
Adding annotations
这就是你最终图表的样子。对于几分钟的工作来说相当不错!
如果您在这个过程中迷路了,不要担心,下面是完整的代码片段:
Final — https://gist.github.com/dradecic/a578a62eed97653db4e64ba945fdf1ff
结论
这不是 Matplotlib 的权威指南。它是在考虑普通人的情况下编写的——不是完全的初学者,但也不是专家。
我希望你现在可以看到 Python 最流行的可视化库的威力,并且下次你不会立即跳入 Seaborn 或 Bokeh 中。
感谢阅读。
直到下一次…
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)