TowardsDataScience 博客中文翻译 2019(二百五十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

距离掌握数据科学又近了 1000 个小时

原文:https://towardsdatascience.com/how-to-find-time-to-learn-data-science-8b73578619f0?source=collection_archive---------26-----------------------

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

一年 1000 小时的学习时间,每年学习更多数据科学的简单有效的方法

数据科学、机器学习或人工智能领域正在随着不断扩展的知识领域、无数的突破和令人难以置信的创新进步而爆炸。无论是专家还是新手,管理时间以跟上变化变得越来越复杂。这篇文章对任何人都有用,比如:

  1. 有人想把职业生涯转向数据科学
  2. 数据科学专家,但希望保持其专业知识最新的人
  3. 一个是特定领域的专家,比如 NLP,他们希望转向视觉或机器人或人工智能领域的其他领域
  4. 或者想从初级数据科学家成为高级数据科学家

无论你属于哪一类,你都可以很容易地在一年中找到 1000 个小时来学习更多的东西,以实现上述目标之一。这 1000 个小时不算你在职学习或培训的时间。这 1000 小时完全是你在日常办公时间之外的额外学习活动。

那么它是如何工作的呢?这很简单,遵循以下准则

将 1000 小时分成每天、每周和每月的目标

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

这种分裂并不新鲜;你可能已经从许多自助大师那里听过很多次了。如果你有一个更大的目标,把它分成更小的目标块,这样你就可以有效地衡量,每天或每周跟踪。所以,如果我们用 1000 个小时除以 365(哦,是的,这是一年中的天数),大约得到 2.74 个小时。但我建议将平均每天的目标设定为 3 小时,并留出 30 天以备不时之需,那时你不会像每隔一天一样感到疯狂(比如度假或与孩子一起运动,或者只是因为深夜派对后的头痛)。休息 335 天,你平均要花 3 个小时(怎么?我们稍后会谈到这一点)。所以,335 乘以 3 等于 1005(哦,对了,还有 5 个小时的奖励)。在每周目标方面,你可以设定每周 21 小时(仍然保持这个目标,因为不是每周都一样)。同样,每月的目标是大约 90 小时。

创建一个用于计划和跟踪的跟踪器

跟踪对于检查你做得如何至关重要。你需要记录所有的学习活动,如阅读、观看视频、参加课程等。将这些计划按组或流派、内容来源、媒体、编码小时数等进行划分。适用于你的。一个电子表格将是正确的选择,这样你就可以生成一个数据透视表和总结或视觉效果,如果你需要看到你的努力在哪里。然后你需要每天更新,每周和每月跟踪,检查你的进展如何。每天、每周、每月和每年跟踪的少量样本:

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

买个 ANC 耳机

由于你需要有效地利用每一点时间,我强烈建议你买一个 ANC ( 主动噪音消除)耳机。Bose 和 Sony 有一个非常有效的,虽然有点贵。只要记住 ANC 耳机会是你这段旅程中最好的伴侣;因此,总是带在身边。你需要用它来观看培训或会议视频或听有声读物或数据科学解说文章在嘈杂的地方,如健身房或在公共汽车、火车等交通工具上。

旅行时间是最好的时间

我们大多数人每天都要进行大量的旅行。无论我们是去办公室还是去购物中心,大多数时候我们都是在旅行。一定要在手机上使用耳机来浏览任何视频内容或听有声读物。如果你在开车,不要使用 ANC 耳机,使用车载音乐设备来听有声读物或任何其他不太需要集中注意力的音频内容,记住生命比 1000 小时的学习目标更宝贵。

没有手机不要上厕所

是的,分秒必争,包括你在厕所的时间。我们在浴室里花了很多时间。如果你打算快速复习任何内存密集型活动(如浏览 Numpy 或 Tensorflow 2.0 备忘单),我们可以有效地利用这 5-10 分钟。我们可以使用抽认卡或像 Anki 这样的工具来快速学习。

锻炼不仅对身体有益,对大脑也有好处

如果你在健身房跑步或锻炼,你可以使用你的手机和 ANC 耳机来复习。选择一个不需要太注意的题目或科目,这个时候最适合复习。如果你经常游泳,你可以得到一个防水耳机。

在周末留出时间

如果你有固定的工作或学校/大学时间,那么在周末留出一些额外的时间。通常情况下,要在工作日达到平均 3 小时的睡眠时间是很有挑战性的,所以周末需要迎头赶上。即使在与家人、朋友和社区度过了美好时光后,你也可以在一些周末和假期坚持 7-8 小时。

在跟踪器中也包括准备时间

一项重要的活动是准备学习材料。作为一名数据科学家,我需要搜索并准备好学习材料、书籍和视频/音频课程。媒体可能是一个很好的来源(最好是付费订阅,因为这将打开一个完整的信息世界,这些信息是经过策划、增强的,并且针对你需要的特定点)。使用谷歌或其他搜索引擎来准备学习材料。对于博客甚至媒体文章,你可以转换成 PDF 文档(从 Chrome 浏览器使用打印选项,并保存为 PDF),你可以再次参考,你也可以做突出显示或另一个跟踪喜欢的日期在文件名中,等等。

像运动蔻驰一样追踪你的进度

只要你能跟踪并采取纠正措施,你的表现就会很好。就像体育教练对球员、比赛、策略、统计数据的每一个细节都有敏锐的眼光一样,你也需要虔诚地跟踪进展。千万不要把这个留到周末活动时用。每天,遵循这一点,更新信息,检查你是否达到了每日、每周的目标,或者如果你设定了子学习目标,哪些领域需要更多的学习。

使用 YouTube 获取免费内容

无论你在哪个领域或者想学什么,YouTube 都是一个很好的来源。我不能亲自参加所有的会议、训练营和大学课程,但使用 YouTube,我可以轻松做到。有令人难以置信的免费和高质量的信息。使用播放列表或为自己创建一个播放列表。你可以使用 YouTube 的海量下载软件(搜索谷歌,你会发现很多免费软件可以这样做)供以后观看。我把从 YouTube 上下载的大部分学习视频保存在我手机上的一个适当的文件夹结构中,当我在家里和办公室之间旅行时使用。你甚至可以下载 mp3 格式的 YouTube 作为你的纯音频时间。

如果可以的话,利用办公时间

你也可以利用办公时间来学习(不要把正式培训或在职学习算作这 1000 个完全额外的学习时间,这是你办公室工作相关培训和学习之外的时间)。许多组织有专门的学习系统,使他们的劳动力管理技能。许多人订阅 Udemy Business 或 Udacity 或其他一些外部或内部课程。如果你有这样的设施,充分利用这一点。除此之外,你可以在伸展手脚的间隙,读一篇 5 分钟的关于某个特定主题的中型文章。大多数时候,1-2 个小时可以来自办公时间本身。利用午休时间,不要只是坐着闲聊(许多人认为这是建立关系网)。

社交媒体不是为了有针对性的学习

是的,社交媒体包含了很多信息(其中大部分对你设定的特定目标毫无用处)。这些对放松或娱乐有好处,但大多没有任何价值,因为这些不是集中在学习上。更好地利用这段时间(不要同意我……没关系,我的意思是——至少减少并转移这段时间去学习或快速复习抽认卡)

数学落后 1000 小时

在这里,我展示了一些日常样本数据。这里有几个例子来展示一个人如何能达到 3 小时。每个人的情况不同;因此,你需要找出什么适合你。

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

最后一个音符

这篇文章不仅仅是理论或噱头;在过去的几年里,我个人每年持续达到 1000 小时以上。我 40 多岁了,家里有两个正在成长的孩子。如果我能做到,为什么你不能?可能不是同一个配方或配方。你需要根据你的承诺、生活方式和情况来定制。如果你觉得 1000 小时太多,那就从 500 小时开始,并根据你的进度进行调整。再次重申,准备和跟踪是成功的关键,不要忘记小休息(记住每一滴都很重要),永远不要忘记你的 ANC 耳机。

我现在很想分享爱比克泰德的一句非常著名的励志名言,瑞安·哈乐黛在他的书《障碍就是出路》中让这句话变得更加流行

“坚持,反抗”。坚持努力。抵制分心、沮丧和混乱。"

因此,只要你练习**、**、【坚持和抵抗】,你就可以达到 1000 小时甚至更长时间,让你追求数据科学的旅程发生重大变化。

感谢阅读。你可以在@ LinkedIn 联系我。

只需每月 5 美元,就可以无限制地获取最鼓舞人心的内容…点击下面的链接,成为媒体会员,支持我的写作。谢谢大家!
https://baijayanta.medium.com/membership

如何找到你的伴侣并发展你们的关系

原文:https://towardsdatascience.com/how-to-find-your-partner-and-grow-your-relationship-ae3a31bb1ede?source=collection_archive---------12-----------------------

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

情人节到了。无论你是否会和某人分享这一天,你可能都想过你理想中的伴侣和关系应该是什么样子。如果你想知道关于“如何找到你的伴侣并发展你们的关系”的数据(来源在脚注中)是怎么说的,我们可以为您提供一些有用的见解。

情侣在哪里见面?

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

大多数情侣在工作或学校相遇,紧接着是夜总会、酒吧或私人聚会。健身房,作为遇见你的意中人的地方,几乎和在线约会服务或应用程序一样受欢迎。还有一件有趣的事情是,当同性恋者互相比较时。超过一半的同性恋夫妇说他们在酒吧或聚会上相遇,但只有不到 20%的同性恋夫妇在那里相遇。女同性恋通常在工作或学校相遇。

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

你有没有想过情侣们如何被介绍给彼此和他们的关系有多幸福之间是否存在依赖关系?如果你的家人给你介绍人,一定要小心。大多数通过家人认识伴侣的人后来的关系都很差或非常差。根据数据,我们还观察到勇敢是有回报的。通过自我介绍认识的夫妇比其他人更快乐。这难道不令人鼓舞吗?明天,你应该向你喜欢的人迈出第一步,这是我们的建议。

如何保持快乐?

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

幸福的夫妇通常表示他们的父母认可他们的伴侣。显然,知道你可以依靠家人的支持,对某人来说更容易享受一段关系。除此之外,我们还发现工作状态对一段关系的质量有很大的影响。失业的人会发现比有固定工作的人更难维持良好的关系。“对自己的爱情生活最满意”的是企业家。人们可以得出这样的结论:在享受稳定的关系之前,个人的幸福和满足感必须放在第一位。

如何白头偕老?

金钱买不到幸福。就是你经常在碰到社交媒体或者网络平台的时候看到的吧?然而,我们发现,对于 60 岁以上的人来说,金钱确实可以买到一段美好的关系。

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

把自己描述为非常差、差或一般的家庭平均收入是 32,000 美元。良好的人际关系平均能多挣 13,000 美元,总收入为 45,000 美元。因此,专注于你的事业一点也不自私。下一次你的伴侣抱怨你总是在办公室呆太久的时候,请随意参考我们的分析,以表明你在乎你们关系的质量。

您可以在此 自行进入 探索项目:

大家一起多找一些感悟吧!

数据集来源:
罗森菲尔德、迈克尔·j、鲁本·j·托马斯、马亚·法尔孔。2018.情侣如何相遇并在一起,wave 1,2,3:公开版 3.04,加上 wave 4 增补版 1.02 和 wave 5 增补版 1.0 和 wave 6 增补版 1.0【电脑档案】。斯坦福大学图书馆。

如何微调 GPT-2,让你可以产生长篇的创造性写作

原文:https://towardsdatascience.com/how-to-fine-tune-gpt-2-so-you-can-generate-long-form-creative-writing-7a5ae1314a61?source=collection_archive---------9-----------------------

世界上最伟大的文本生成人工智能可以成为你的写作伙伴!

自从 OpenAI 将其 GPT-2 语言模型发布到野外以来,人们一直在使用这种人工智能写作工具来生成滑稽、可怕和有趣的简短文本。

如果你想使用 GPT-2 生成包含你喜欢的主题、人物、背景和写作风格的长篇作品,你需要微调基本模型并进行大量阅读。

我可以免费教你怎么做!

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

Photo by Brett Jordan on Unsplash

认识一下输出先生,我的 AI 写作伙伴

我刚刚花了 18 天完成了全国小说世代挑战(NaNoGenMo),电脑生成一份 51422 字的手稿

在这场编写和编码马拉松进行到一半的时候,我的人工智能编写伙伴产生了一位名叫输出先生的人工智能作者的这段令人惊叹(也有些令人不安)的独白:

This monstrosity of yours? The monstrosity that is being written now, by the talented and novel-obsessed AI writer you just launched against your will, is just so terribly boring, there's no way I could squeeze in one more story.I write fantasy, I write sci-fi, I write horror, I write romance, I write all sorts of nonsense. You can't even imagine how many lines I've written, how many worlds and histories I've created and twisted and broken and made to rhyme and rhyme and be the best that there ever was.

今年剩下的时间我会想办法把 Output 先生奇怪而精彩的 AI 作品融入到我自己的写作中。如果你喜欢这一段,给我发一条带有你地址的信息,我会用蜗牛邮件给你一个 Output 先生手写的故事。

在为出版商周刊撰写关于 NaNoGenMo 的文章时,我有机会与伟大的作家讨论长篇人工智能文本生成,如罗宾·斯隆半影先生的 24 小时书店Sourdough 的作者。作为他写作项目的一部分,斯隆在他从一个比特币矿工那里购买的 GPU 上运行一个版本的 GPT-2。

Robin 告诉我,在长篇文本的生成中包含人类作者是“至关重要的”。“这基本上仍然是关于一个人的,”他解释道,并指出人类作者和人工智能语言模型之间的未来合作。“一个作家做决定,有一个计划和一些他们想对世界说的话。如果这意味着他们成为其他文本的编辑或策展人,我认为这很好,甚至很棒!”

按照罗宾的建议,我在我的 NaNoGenMo 项目中扮演了馆长。

我本可以与我的人工智能写作伙伴在不到一小时的时间内生成 5 万字,但我选择花 18 天时间阅读数百页,并将最引人注目的文本收集到一个文档中。

我还在代码中使用了前缀标签,以确保 GPT-2 模型在整个项目中专注于我最喜欢的形而上学主题。

约翰·奥诺在 Medium 上写道:“在小说的程序化生成中,一个悬而未决的问题是如何保持读者的兴趣。”。希望通过我的 NaNoGenMo 项目解决这个问题,我决定使用书写提示和回复来生成更短(可能更有趣)的部分。

我是这样做的…

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

Photo by Brett Jordan on Unsplash

创建一个数据集。

无论你想生成哪种形式的长篇文章,你都需要找到尽可能大的数据集。

使用谷歌的 BigQuery 工具和归档在 Pushshift.io 的 Reddit 数据的巨大档案,我在一个方便的 CSV 文件中创建了一个由个人写作提示组成的大规模数据集——每个都用< |startoftext| >和< |endoftext| >标记分隔。

我还使用了 Pushshift 的 Reddit 搜索工具来收集数百个与人工智能相关的写作提示,以添加到数据集,因为我希望我的机器人能够处理我最喜欢的科幻主题。

在这个过程的最后,我得到了一个包含 1,065,179 个标记的书写提示数据集。GPT-2 是一个大规模的语言模型,所以你需要一个相对较大的数据集来有效地调整模型。

创建另一个数据集(如果需要)。

除非你想遵循我的写作提示/回答模型,否则你只需要创建一个数据集。

我的项目需要两个数据集。使用同样的工具和大量的 Reddit 搜索,我收集了我能在网上找到的评分最高和最棒的写作提示。我添加了许多专注于人工智能的回复,包括我多年来写的我自己的写作提示回复

在第二个训练数据集中,我得到了 1,947,763 个标记。

构建数据集。

如果你想生成任何结构的作品,这一步真的很重要。

我想给我的人工智能尽可能最整洁和高质量的学习数据,所以我使用了一系列简单的标记来教 GPT-2 书写即时反应的形状。

我添加了和标记来匹配书写提示数据集,但我也确保每个响应都有标记为[WP]的原始书写提示和标记为[RESPONSE]的响应本身。

虽然这是一个巨大的,耗时的工作,但它使我的输出更加有趣。我将整个数据集保存为. TXT 文件。这是数据集的样子:

<|startoftext|>[WP] On November 4, 2020, humanity abandons the Internet. Billions of bots have colonized the web with spam, deepfakes, and fake news. At the now deserted r/WritingPrompts, literary AIs (trained on great works of human literature) create an infinite library of prompts & responses.

[RESPONSE] Zackary Blue worked as a night janitor in the basement for major financial services company. He cleaned cavernous spaces beneath the building where hundreds of millions of dollars got traded every single day.
<|endoftext|>

微调你的 GPT-2 语言模型。

微调我的两个语言模型花了几天时间。Max Woolf 教会了我这一步需要知道的一切。

重要更新: Google Colab 更新了它的标准张量流版本,你必须在 Max Woolf 的 Colab 笔记本顶部添加一行代码才能使用旧版本的张量流。只需将这行代码添加到 Colab 笔记本的顶部,Woolf 的笔记本就可以完美运行了:

%tensorflow_version 1.x

我用的是中等大小的 355M 版本的 GPT 2,因为它足够大,可以处理我的数据集,但又足够小,可以在 Google Colab 的云服务器上运行。我用 42000 步训练了这两个模型。

我将训练分成更小的部分,因为谷歌 Colab 不会跑超过 12,000 步。

使用微调后的 GPT-2 模型生成文本。

一旦我的两个语言模型被训练好,我就开始生成我的 NaNoGenMo 项目。

每天早上,我都会运行写作提示程序(Jane Doe ),生成 10-20 页由电脑生成的写作提示。

对于每次运行,我设置长度为 100 个字符,温度为 0 . 7,输出为 10 个样本。为了塑造这个项目,我使用 prefix 函数将写作提示输出指向我最喜欢的主题,如虚拟现实、模拟理论和 AI 作家。

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

The code from one of my many Writing Prompt Prompter runs.

除非您想遵循我的书写提示/响应模型,否则您只需要用一种语言模型生成文本。

然而,我为我的 NaNoGenMo 项目增加了一个额外的步骤。

我挑选了我最喜欢的计算机生成的写作提示,并将其输入到写作提示响应者(输出先生)中,以生成 100 至 125 页的响应。 Max Woolf 的 Google Colab 笔记本帮我编写了这一步的所有代码。

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

The code from one of my many Writing Prompt Responder runs.

通读你所有的输出。

我梳理了无名氏和 Output 先生生成的数百页文本,挑选了最引人注目的故事。

对于我为 NaNoGenMo 收集的每 350 个令人信服的计算机生成的文字,我都必须费力地阅读大约 10,000 个单词的奇怪、令人困惑、重复或简单易懂的计算机生成的文本。

将最好的作品收集在一个主文件中。

在 11 月,我将每天的输出存储在一个文件中。我每天晚上都会阅读那个文件,寻找引人注目的文字。这是我保存的第一批作品之一,一个乌托邦宣言:

We are a group of artists, writers, coders, and tinkerers, who have banded under the banner of Humanity v2.0\. We are a worldwide collective of similar interests. We all have the same goal - to create anew the foundations of a better world.

我建议你在电子书阅读器或平板电脑上阅读电脑生成的文本。它让你远离电脑屏幕,给你更多实际的阅读体验。我还使用了神奇的语音梦想阅读器在早上上班的时候听我的电脑生成的内容。

在这些史诗般的阅读过程中,我将最好的作品保存在一个标有“NaNoGenMo Final”的主文件中

重复这个过程,直到你有足够引人注目的写作。

之后,我在 11 月连续 17 天运行相同的文本生成步骤。我一直在我的最终文档中添加计算机生成的文本,直到我越过了 NaNoGenMo 马拉松的 50,000 字终点线。

策划你的计算机生成的创作。

一旦“NaNoGenMo Final”文档达到临界质量,我就使用强大的写作工具 Scrivener 围绕虚拟现实、人工智能写作或上帝等主题重新排列计算机生成的故事。

我只对简单的重组进行了编辑,但人类管理员可以使用这一步骤来制作章节、编辑特定段落、添加插图、撰写评论或其他任何内容!

检查抄袭和出版!

一旦我完成了最终的手稿,我就通过 Quetext 工具运行每个提示和回复,以确保我的机器人没有在网上抄袭任何人。GPT 2 号运行着一个拥有数百万篇文章的庞大数据集,但它偶尔会鹦鹉学舌。

就是这样!NaNoGenMo 是一次很棒的写作和编码体验,如果你这个月有时间,我推荐你试试。

从来没有这么多的资源可供像我这样的业余爱好者使用,GPT-2 在经过微调后确实非常强大。我将在今年余下的时间里阅读这些由 GPT-2 产生的故事。

这里是最后一个例子,人工智能作家和人类作家之间的一点联系…

They are a species apart, but they share one thing in common: their love of books. They are the ones who seek out books for their own needs, whether they be scientific, philosophical, or religious texts. They are the ones who, from the beginning, have been able to find meaning within books.

如何针对数据微调神经网络:图像分类

原文:https://towardsdatascience.com/how-to-fine-tune-your-neural-network-for-your-data-image-classification-d0f01c92300b?source=collection_archive---------10-----------------------

使用 PyTorch 从迁移学习中获得更多

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

Photo by Denisse Leon on Unsplash

介绍

当你没有很多数据时,建立一个用于图像分类的神经网络并不总是容易的。近年来,这一领域取得了一些重大进展,使得构建有价值的模型变得更加可能,而无需使用数百万张图像进行训练。最值得注意的是,迁移学习名列榜首。

迁移学习是从在 I mageNet 数据集上训练的大型模型中提取预先训练的权重,并使用这些权重作为不同数据集的起点。通常,这是通过替换最后一个全连接层并训练模型,同时仅更新线性层的权重并让卷积层保持它们的权重来完成的。

这种图像分类方法通常非常有效,因为卷积层(我们可以将其视为学习图像特征的模型的一部分)已经看到了许多不同的图像,并且通常在提取图像特征以传递给线性层方面做得非常好。有一些简单的方法可以让这种普遍有效的方法更好地适用于您的特定数据。

GoodReads 案例研究

数据

为了证明迁移学习的有效性以及如何在迁移学习的基础上进行改进,我使用了一个从 Goodreads 收集的数据集,这个数据集可以在 Kaggle 上找到。从这些数据中,我试图根据书籍封面的图像来预测一本书的正确类型。为了节省计算时间,我只使用了数据的子样本,并删除了所有少于 5 次观察的类型。最终的数据集有 77 种类型和近 20,000 个观察值,我们将其分为一个训练、验证和测试集(60/20/20)。

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

Example of book cover image

模型

在这个案例研究中,我使用了 VGG 11 网络,如下图所示。

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

https://www.quora.com/What-is-the-VGG-neural-network

我将对网络进行的唯一更改是用一个新的线性层替换最后一个输入为 4096、输出为 1000 的线性层,新的线性层输入为 4096、输出为 77(我们拥有的流派数量)。除此之外,网络的架构将保持不变。

对于模型的每个版本,我们保持相同的超参数,以便进行公平的比较。我使用 0.0003 的学习率,Adamax 优化器,交叉熵损失,以及 10 个时期后没有改善的早期停止。

迁移学习

如上所述,迁移学习为图像分类任务提供了巨大的收益。我们要运行的第一个测试是比较迁移学习和在没有任何预训练权重的情况下从头开始训练 VGG-11 架构。在 PyTorch 中,我们通过加载模型的预训练权重,替换最后一层,并从所有卷积层中移除梯度来实现这一点,如下所示。

现在我们可以像普通网络一样训练它。我训练并测试了我们的转移学习网络,以及我们的从头开始的网络。结果完全符合我们的预期。

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

Losses for transfer model vs. scratch model

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

Accuracy for transfer model vs. scratch model

从准确度图和损失图来看,很明显,我们的迁移学习模型比我们的从头开始模型表现得好得多。事实上,看起来我们迁移学习模型第一个时期的验证损失比我们从头开始的模型要好。除此之外,值得注意的是,传输模型达到最小验证损失只需要一半的时间。因此,传输模型在一半的时间内执行得更好。这是双赢的局面。

微调

很明显,迁移学习是有效的,我们也很好地理解了它为什么有效。该模型从图像中学习了许多特征,并根据这些特征对我们的书籍封面进行了训练。让我们快速看一下 ImageNet 到底是什么样子。

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

https://www.researchgate.net/figure/Examples-in-the-ImageNet-dataset_fig7_314646236

这些图像中有很多多样性,所以模型学习一般特征如此之好并不令人惊讶。如果我们看看这些数据,它看起来真的不像许多图片看起来像我们的哈利波特书的封面。有理由认为,更好地学习我们的书籍封面的特性可能有助于我们的转移模型进一步改进。

我们可以通过在训练时慢慢解冻卷积层的梯度来微调我们的传输模型,以适应我们独特的数据。首先,我们开始加载我们的模型,并以与我们第一个传输模型完全相同的方式更改最后一层。然后,在每一次训练之后,我们可以用类似这样的代码来更新网络的下一个卷积层的权重。

我们慢慢地更新渐变,从最底层开始,一直到顶层。这保留了我们的模型从预先训练的权重中获得的大量信息,同时有助于根据我们的书籍封面对其进行微调。经过训练和测试后,我们可以将其与我们的其他两个网络进行比较。

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

Losses for all models

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

Accuracy for all models

对我们的模型进行微调会使我们的原始模型获得一些适度的收益。同样,我们也看到它减少了达到最小验证损失所需的训练时间。

提示和技巧

  • 我在所有这些模型中使用了相同的超参数,试图使比较公平。实际上,在进行微调以防止过度拟合时,使用较低的学习速率(通常是递减的学习速率)通常更有效。
  • 与大多数深度学习实例一样,大量数据将使微调更加有效。
  • 同样的技术也可以用于 NLP 任务的网络。它不限于图像。

最后的想法

像这样微调一个模型并不总是能得到更好的结果,但是绝对值得尝试。这是一个很容易的调整,你可以对你的代码进行调整,这有可能为你的模型提供一个几乎没有成本的提升。

如果你想看完整的代码,你可以查看我的 github repo。数据和代码都在那里,应该可以运行。

如何预测销售收入:比较各种预测方法

原文:https://towardsdatascience.com/how-to-forecast-sales-revenue-compare-various-forecasting-approaches-7c4d69242469?source=collection_archive---------8-----------------------

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

预测销售额的方法有 100 多种。问题变成了选择哪一个。在本文中,我将简要介绍预测销售的流行方法,以及如何将这些方法与关键指标进行比较。根据使用案例,客户可能对平均值等简单方法满意,而其他人可能想要使用预测算法进行更精确的预测。

那么我应该使用哪种方法呢?答案很简单。计算预测值和实际值之间的误差。哪种方法的误差最小,就选择哪种方法。如果简单平均法能准确预测实际收入,就没有理由不使用它。

用例&数据定义

对于这篇文章,我将采用一家年收入为 7500 万美元的公司 2016 年至 2018 年的销售数据,并使用这些数据来预测 2019 年 1 月至 3 月的收入。我会将预测值与实际值进行比较,并计算两者之间的差异。差异最小的方法将胜出&也就是说,该方法将用于计算今年剩余时间的预测。

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

测量预测值与实际值之间的误差

有两种计算误差的标准方法。第一个是计算一月、二月和三月的预测值和实际值之间的差值,以达到全年的平均值。

一月预测错误= Abs(一月预测-一月实际)

二月预测误差= Abs(二月预测-二月实际)

三月预测误差= Abs(三月预测-三月实际)

平均误差=(一月预测误差+二月预测误差+三月预测误差)/ 3

使用 abs(绝对值)的原因是,有时预测值会高于实际值,也可能低于实际值。因此,当我们添加误差时,我们添加的是误差的绝对值。

上面的度量被称为平均绝对误差(MAE) 并且容易理解。

我更喜欢的一个度量标准是惩罚平均误差中没有出现的巨大差异。

为了惩罚较大的误差,我们得到每个月误差的平方,并将三个月的误差相加,得到平均值。该值的平方根是捕捉大误差的误差,称为均方根误差(RMSE)

平均平方误差= [(一月预测误差)^ 2 +(二月预测误差)^ 2+三月预测误差)^ 2 ] / 3

RMSE =的平方根(平均平方误差)

还有一个也很常见的误差是平均绝对百分比误差(MAPE) ,其中误差是一个百分比。

虽然这三种方法都是测量误差的有效方法,但我更喜欢第二种方法(RMSE),因为它会惩罚与实际值的较大偏差。

各种预测方法

让我们来看看预测销售的各种预测方法。

简单平均法

这里,我们取过去 3 年的平均值,并将其作为 2019 年 3 个月的预测。这意味着 2019 年 1 月、2 月和 3 月的预测将相同,并将等于过去 3 年的平均值。这是最简单的预测方法之一。

使用这种方法,我得到的均方根误差(RMSE)是 312500

移动平均线

这里我们取预测的移动平均值。我们可以做 6 个月移动平均线。我用的是最后一个移动平均值,并将其设置为 2019 年三个月的预测值。对 2019 年 1 月、2 月和 3 月的预测将是相同的,并将等于过去 6 个月的移动平均值。请注意,有些人可能会通过纳入 1 月份的预测来重新计算 2 月份的移动平均值。我宁愿不做那件事。我倾向于只包含预测输入的实际值。

使用这种方法,我得到的均方根误差(RMSE)是 347968

直线外推

在 2016 年 1 月和 2018 年 12 月的观察之间画一条简单的线,并在接下来的三个月里延续这条线。如果数据有一个好的趋势,这是可行的。如果数据中存在季节性,这往往表现不佳。

使用这种方法,我得到的均方根误差(RMSE)是 410171

上个月的收入与预测值一样,也就是天真的方法

2019 年 1 月、2 月和 3 月的预测将与 2018 年 12 月的收入相同。

使用这种方法,我得到的均方根误差(RMSE)是 373743

去年同月收入预测

2019 年 1 月、2 月和 3 月的预测将是 2018 年 1 月、2 月和 3 月的实际值(一年前的同一个月)

使用这种方法,我得到的均方根误差(RMSE)是 382058

将转换率应用于未结业务机会

我使用了 0.1 的转换系数,并使用每月初的开放机会来计算该月的预测。

使用这种方法,我得到的均方根误差(RMSE)是 292368

使用预测模型对机会进行评分

不要使用像 0.2 这样的历史转换系数,而是建立一个简单的分类模型来预测本月完成交易的概率。所有可能性大于 80%的交易我都在预测中做了标记。

使用这种方法,我得到的均方根误差(RMSE)是 163539

使用 Prophet 进行时间序列预测

这里我们用了 Prophet 算法,把 2016 年喂到 2018 年,来预测 2019 年三个月的营收。

使用这种方法,我得到的均方根误差(RMSE)是 132957

对比图

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

RMSE 越低,模型越好。

总结

从上面可以看出,对于我试图解决的销售预测问题,最后两种基于机器学习的方法比其他方法表现得更好。最初的几种方法很容易做到。如果这种准确性对于经营你的企业来说是可以接受的,那么你的情况就很好。如果需要更高的精度,最后一种方法更有益。例如,当预测订单数量或呼叫中心的呼叫数量时,这些预测与库存和人力资源投资相关联,以对预测做出反应。因此,当需要采取一项成本为$$$的行动时,客户倾向于使用具有良好精确度的方法(如上面的最后两种方法)来创建预测。

如何使用 SARIMA 模型用 Python 预测销售额

原文:https://towardsdatascience.com/how-to-forecast-sales-with-python-using-sarima-model-ba600992fa7d?source=collection_archive---------1-----------------------

从统计学和 python 到时间序列预测的分步指南

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

你想象过预测未来吗?嗯,我们还没有到那一步,但是预测模型(带有一定程度的不确定性)给了我们一个很好的方向,当我们展望未来时,可以更果断地规划我们的业务。在本帖中,我们将展示一种使用 SARIMA 模型预测汽车行业销售时间序列的方法。

解释模型

SARIMA 用于非平稳序列,即数据不会围绕相同的均值、方差和协方差波动。这个模型可以识别趋势和季节性,这使得它非常重要。SARIMA 由其他预测模型组成:

AR: 自回归模型(可以是简单、多元或非线性回归)

【马:】移动平均线模型。移动平均模型可以使用加权因子,其中观察值由修整因子加权(对于系列中最早的数据),并且最近的观察值具有较高的权重。

AR 和 MA 的组合一起携带 ARMA 模型,但该模型仅用于平稳序列(均值、方差随时间恒定)。

如果系列有趋势,就要用 ARIMA 型号。
ARIMA 用于非平稳系列。在该模型中,微分步骤 I (d)用于消除非平稳性。
用于微分的集成元素“I”允许该方法支持具有趋势的时间序列。但是这个模型仍然不能识别季节性。

最后,我们得到了 SARIMA 模型,它具有季节相关性,可以识别时间序列的季节性。现在我们可以去找密码了!

数据处理

我们将使用一组汽车销售数据,可以从这里下载。

import warnings
import itertools
import numpy as np
import matplotlib.pyplot as plt
warnings.filterwarnings("ignore")
plt.style.use('fivethirtyeight')
import pandas as pd
import statsmodels.api as sm
import matplotlib
matplotlib.rcParams['axes.labelsize'] = 14
matplotlib.rcParams['xtick.labelsize'] = 12
matplotlib.rcParams['ytick.labelsize'] = 12
matplotlib.rcParams['text.color'] = 'G'df = pd.read_excel("Retail2.xlsx")

这一步只是导入库,比如 numpy、pandas、matplotlib 和 statsmodels,也就是包含 SARIMA 模型和其他统计特性的库。这部分代码用于设置 matplotlib 的图表。

原始数据集和代码有点复杂,但是为了使一切更容易,可供下载的文件只有一个日期和销售列,以避免数据预处理。

y = df.set_index(['Date'])
y.head(5)

set_index 命令将列 date 设置为索引,head 打印数据集的前 5 行。

y.plot(figsize=(19, 4))
plt.show()

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

分析图表,我们可以观察到时间序列有季节性模式。十月是销售的高峰期,至少过去三年是这样。这几年也有上升趋势。

from pylab import rcParams
rcParams['figure.figsize'] = 18, 8
decomposition = sm.tsa.seasonal_decompose(y, model='additive')
fig = decomposition.plot()
plt.show()

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

使用 pylab 库中的“sm.tsa.seasonal_decompose”命令,我们可以将时间序列分解为三个不同的部分:趋势、季节性和噪声。

SARIMA 到时间序列预测

我们用萨里玛吧。型号符号是SARIMA(p, d, q).(P,D,Q)m。这三个参数说明了数据中的季节性、趋势和噪声

p = d = q = range(0, 2)
pdq = list(itertools.product(p, d, q))
seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
print('Examples of parameter for SARIMA...')
print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[1]))
print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[2]))
print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[3]))
print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[4]))

SARIMA…
的参数示例 SARIMAX: (0,0,1) x (0,0,1,12)
SARIMAX: (0,0,1) x (0,1,0,12)
SARIMAX: (0,1,0) x (0,1,1,12)
SARIMAX: (0,1,0) x (1,0,0,12)

for param in pdq:
    for param_seasonal in seasonal_pdq:
        try:
            mod = sm.tsa.statespace.SARIMAX(y,order=param,seasonal_order=param_seasonal,enforce_stationarity=False,enforce_invertibility=False)
            results = mod.fit()
            print('ARIMA{}x{}12 - AIC:{}'.format(param,param_seasonal,results.aic))
        except: 
            continue

ARIMA(0,0,0)x(0,0,1,12)12—AIC:410.521537786262
ARIMA(0,0,0)x(1,0,0,12)12—AIC:363.03322198787765
ARIMA(0,0,0)x(1,0,1,12)12—AIC:348.1333310565

根据 Peterson,t .(2014)AIC(AK aike 信息标准)是对给定数据集的统计模型的相对质量的估计。给定一组模型的数据, AIC 估计每个模型相对于其他每个模型的质量。AIC值越低越好。我们的输出表明,AIC值为 223.43 的SARIMAX(0, 0, 1)x(1, 1, 1, 12)是最佳组合,因此我们应该认为这是最佳选择。

mod = sm.tsa.statespace.SARIMAX(y,
                                order=(0, 0, 1),
                                seasonal_order=(1, 1, 1, 12),
                                enforce_stationarity=False,
                                enforce_invertibility=False)
results = mod.fit()
print(results.summary().tables[1])

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

在“mod = sm.tsa.statespace.SARIMAX”命令中,我们需要设置所选的组合。

results.plot_diagnostics(figsize=(18, 8))
plt.show()

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

通过上述诊断,我们可以将重要信息可视化为分布和自相关函数 ACF(相关图)。值向上“0”在时间序列数据上有一些相关性。接近“1”的值表现出最强的相关性。

pred = results.get_prediction(start=pd.to_datetime('2018-06-01'), dynamic=False)
pred_ci = pred.conf_int()
ax = y['2015':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between(pred_ci.index,
                pred_ci.iloc[:, 0],
                pred_ci.iloc[:, 1], color='k', alpha=.2)
ax.set_xlabel('Date')
ax.set_ylabel('Retail_sold')
plt.legend()
plt.show()

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

该步骤包括将真实值与预测值进行比较。我们的预测与真实值非常吻合。命令“pred = results . get _ prediction(start = PD . to _ datetime(’ 2018–06–01 ')”确定您将预测的时间段与真实数据进行比较。

y_forecasted = pred.predicted_mean
y_truth = y['2018-06-01':]
mse = ((y_forecasted - y_truth) ** 2).mean()
print('The Mean Squared Error is {}'.format(round(mse, 2)))
print('The Root Mean Squared Error is {}'.format(round(np.sqrt(mse), 2)))

均方差为 595.97
均方根误差为 24.41

Obs:在 MSE 和 RMSE 中,值越接近零越好。它们是衡量准确性的标准。

pred_uc = results.get_forecast(steps=12)
pred_ci = pred_uc.conf_int()
ax = y.plot(label='observed', figsize=(14, 4))
pred_uc.predicted_mean.plot(ax=ax, label='Forecast')
ax.fill_between(pred_ci.index,
                pred_ci.iloc[:, 0],
                pred_ci.iloc[:, 1], color='k', alpha=.25)
ax.set_xlabel('Date')
ax.set_ylabel('Sales')
plt.legend()
plt.show()

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

在这里,我们预测未来 12 个月的销售额。该参数可以在代码的“pred _ UC = results . get _ forecast(steps = 12)”行修改。

y_forecasted = pred.predicted_mean
y_forecasted.head(12)

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

这一步显示了我们之前运行的测试的预测值。

y_truth.head(12)

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

这一步表明数据集的真值。我们可以比较上面的两个系列来衡量模型的准确性。

pred_ci.head(24)

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

在上表中,我们可以看到模型作为预测边界指示的下限值和上限值。

forecast = pred_uc.predicted_mean
forecast.head(12)

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

最后,这里我们有未来 12 个月的销售预测!

我们可以注意到销售随着时间的推移而增加。一月和二月是最糟糕的月份,比如最后几年。

这只是一个统计模型的实验。我真的推荐尝试递归神经网络来预测,我的建议是使用更多的数据。但这肯定是另一篇文章的主题。

参考:

Python 3 中的 ARIMA 时间序列预测指南

如何打造一个高效的人工智能团队?

原文:https://towardsdatascience.com/how-to-form-an-effective-a-i-team-bb14817910e7?source=collection_archive---------30-----------------------

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

19 世纪末,许多公司和企业都有高薪的电力副总裁职位。这样的职位持有者曾经被视为对一种被称为的迷人自然力有着深刻理解和控制的人。这是当时的流行语。企业和公司四处奔走,通过在工作场所的黑暗角落安装电线和电灯,使他们的运营更加合理化。随着时间的推移,所有发光的东西都被淘汰了,现在一年到头到处都有电已经不再是一个幻想了。类似的故事可以与时代的每一个重大突破性进展联系起来,无论是燃料发动机的发明,还是数字计算机在商业和个人生活中的应用。

如今,人们对用智能的人工智能解决方案来改变日常生活非常兴奋。随着像 FAANG (脸书、苹果、亚马逊、网飞和谷歌)这样的大型技术市场参与者的不断进步,这种人工智能的兴奋正在转化为一种狂热。消费者被深度学习(D.L .)驱动的图像、音频和文本数据处理产品的能力所淹没,如谷歌助手、谷歌照片、亚马逊 Alexa、亚马逊 Prime 和脸书门户。人工智能驱动的营销策略、基于机器学习的 I-o-T 解决方案和推荐系统正变得越来越普遍。许多小企业希望利用类似的机会,正在寻找将这些解决方案整合到现有软件基础设施中的方法。

小企业和初创公司大多面临资金问题,充分利用现有资源来生存变得至关重要。另一方面,人工智能的进步正在诱惑并重塑我们数字生活的方方面面。在这种情况下,设计一个紧凑的、以结果为导向的人工智能团队变得非常重要。所以问题是, 如何组建一个 5~10 人的人工智能团队,能够在 6~12 个月的时间框架内交付人工智能解决方案?这个问题的答案在于知道商业世界中人工智能的核心是什么。下面的文氏图展示了商业世界中围绕人工智能行业的各种角色,以及每个角色的核心是什么。

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

真正的人工智能开发的一个先决条件是对数学领域(如线性代数、概率和最优化)以及计算机技能的良好理解。从现代软件世界的当前趋势来看,这一要求也是显而易见的,在现代软件世界中,未来的开发预计不会基于硬编码程序,而是将涉及一种更加动态的数据集成方法。随着越来越多的数据流流入,未来的软件将是动态的和不断发展的。新的数据将需要新的框架、新的统计方法以及在快速变化的环境和需求下寻找最佳解决方案的现代方法。

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

有些角色对每个人工智能团队来说都是必不可少的,比如管理数据流、建立和训练数学模型以及理解业务需求。这些角色中的每一个角色都必须有一个或多个人。互补技能的良好平衡造就了一个适应性更强的团队,该团队能够以专注的方式完成严格限定时间的目标。从现代开发和部署平台的基本最小团队结构和能力来看,5~10 人的团队规模似乎是各种中型项目的神奇范围。以下流程图提供了特定角色及其主要职责的简要描述。根据业务团队参与的深度和开发操作的范围,可以在不同的类别中添加更多的工程师和开发人员。

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

人工智能的世界变化很快,这个领域有许多可能的发展方向。随着深度学习在过去几年中有望发展,技术行业巨头对此产生了巨大的兴趣。这一趋势将在未来几年渗透到其他中小型企业。这使得关键决策者了解这种转变发生的框架变得至关重要。

usmnmjd@gmail.com 穆罕默德·奥斯曼·马吉德

如何在第一份数据科学工作之前获得数据科学经验

原文:https://towardsdatascience.com/how-to-gain-data-science-experience-before-your-first-data-science-job-88bed5f9fee3?source=collection_archive---------4-----------------------

需要 3 年以上经验的入门级工作的答案

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

Photo by Lukas from Pexels

介绍

数据科学职业生涯中最困难的部分无疑是开始。获得第一个数据科学职位绝非易事。如果你的名字后面没有字母 PhD,那就更难了。如果你在互联网上搜索入门级的数据科学工作,你很可能会对你找到的几乎所有东西都有很高的要求感到沮丧。似乎你看到的每份工作描述都要求博士学位或至少 3 年机器学习经验。这就回避了一个问题,“没有数据科学家的经验,你怎么能胜任数据科学家的工作?”成千上万的人在线或在大学学习数据科学课程。这些课程对于培养技能很重要,但它们不会成为候选人被选中从事数据科学工作的原因。没有一种方法可以让你进入数据科学,但我想分享一些我做的事情,以获得经验,为抓住我梦想的工作做好准备。无论你是一名即将毕业的学生,还是一名打算从事数据科学的学生,都有很多方法可以获得数据科学方面的经验。

获得经验的方法

做研究

寻找机会与他人合作撰写学术论文是在数据科学的几个重要领域获得经验的绝佳机会。做研究的缺点是通常报酬不高,而且通常不涉及机器学习之类的东西。尽管如此,我还是强烈建议找机会做研究来充实你的数据科学简历。

为什么这是很好的经历

做研究应该看起来有吸引力有两大原因。首先是处理数据的机会。由于研究的性质,有机会参与数据的整个生命周期。其中一些,比如数据收集,可能并不适用于你未来的职业。其他部分,如分析和解释是有价值的技能。我想在这里强调能够解释数据并根据分析得出可靠结论的价值。这是一项至关重要的技能,但有时会被忽视,因为它很难作为一项技术技能来测试。理解如何解释结果是数据科学家和能够键入“from sk learn . ensemble import RandomForestRegressor”的人之间的区别。从事学术研究需要你完全基于数据得出结论,同样,你必须根据你的结果帮助行业做出决策。

研究也给你机会学习如何建立实验。你对实验的影响程度取决于你和谁一起工作以及有多少人一起写论文。提出一个好问题,并设置一个实验来回答它,几乎是每一篇学术论文的基础。这种技能可以很好地转化为数据科学,在数据科学中,你需要提出好的问题,并使用机器学习来回答这些问题。在至少有助于推动研究的领域获得研究经验,可以帮助你成为一名数据科学家,可以自主有效地工作,而无需有人告诉你要解决什么或如何解决。

怎么做

对于学生和非学生来说,寻找研究机会需要稍微不同的方法。我在这两个阶段都做得很成功。找到一个研究你感兴趣的东西的人是很重要的。将你的兴趣扩展到机器学习之外一秒钟,因为研究机器学习的人比研究其他学科的人少得多。一旦你决定了你想学什么,列出一份有相关兴趣的人的名单。这就是学生和非学生的不同之处。如果你是学生,我建议看你的大学。你通常可以找到一个研究助理的职位,这个职位会支付你做研究的费用。然而,这并不意味着你不应该去和那些不做招聘广告的教授交谈。仅仅一头扎进一个由 50 名研究助理组成的实验室,并不会给你与教授一对一进行研究同样的体验。如果你不是学生,我会联系任何你想联系的人。发送电子邮件解释你是谁,为什么你对他们的研究感兴趣,以及你如何看待自己的帮助。我和全国各地的一位教授一起远程工作,为研究做出贡献。真的没有限制。对每个人来说,最重要的是找到合适的衣服。找到你感兴趣的研究,你将能够为。

重写你的工作描述

在我找到一份全职工作之前,这是让我受到关注的最大帮助。秘诀是做数据科学不一定要有数据科学家这个职称。无论你现在在哪里工作,无论是实习还是全职,找个机会尝试一下机器学习。如果你用聪明的方法去做,没有人会因为你失败而生气,如果你成功了,你会交到很多朋友。最重要的是,你将获得一些真实世界的数据科学经验。

为什么这是很好的体验

没有比在数据科学领域实际工作更好的经验来为数据科学领域的工作做准备了。如果你能在你目前的职位上找到从事数据科学的方法,那基本上和从事数据科学工作是一样的。如果你能证明你在任何地方使用机器学习解决了一个问题,那么没人会在乎你的职称是什么。他们会请你告诉他们那个项目。

这是一次好经历的另一个原因是它展示了创造力和解决问题的能力。不会有人告诉你用机器学习做什么或者如何解决问题。类似于通过研究获得的经验,你可以表明你可以创造性地和自主地识别和解决问题。

怎么做

你如何着手做这件事将在很大程度上取决于你在哪里工作,你的经理是谁。因此,我不会试图向你展示如何在工作中开展机器学习项目的路线图,我只会告诉你我是如何做到的,并给你一些提示。

大三那年夏天,我被聘为分析实习生。我真的很想要一份数据科学的实习工作,但是我没有资格去做。我以为我只是接受了一份分析实习,我确信我最好的情况是整个夏天都在计算 p 值。我被分配了一个研究销售趋势的项目。在我实习的前 4 或 5 周,我整理数据并分析趋势。然后,我意识到我的项目远远超过了计划。我决定继续尝试我在数据上获得的一些机器学习技能,看看我是否能提出比趋势更好的东西。两周后,我去找我的经理,告诉她我在忙什么,并给她看了我的作品。对我来说,这是一个非常好的实习机会,公司得到的比原来预想的要多得多。

因此,以下是我的建议和建议:

  1. 确保你没有推迟你被雇佣去做的工作,而是去做你想做的事情。
  2. 确保你的经理同意你正在做的事情。
  3. 找到一个能为企业增加价值的问题,而不仅仅是你个人的机器学习游乐场。
  4. 如果你第一次尝试失败或不成功,不要放弃。想办法做自己喜欢的事。

做一个个人项目

利用自己的时间从事数据科学项目已经被宣传了一遍又一遍,听起来有点陈词滥调。这是老生常谈,因为这是事实。自己做一些很酷的事情显示了你处理来自任何地方的数据的热情和能力。它与 Kaggle 或学校项目有着不同的感觉,对你来说是非常好的体验。

为什么这是很好的经历

最好的员工是那些做自己喜欢的事情的人。一个雇主想要雇佣热爱研究难题并解决它们的数据科学家。唯一疯狂到把空闲时间花在编码和构建机器学习模型上的人,是那些真正喜欢这样做的人。如果做个人项目对你来说是一件苦差事,而你做这些只是为了得到一份工作,你可能会重新考虑你是否真的喜欢你正在做的事情。如果你确实喜欢做一些小项目,并建立了一个不错的项目组合,这就向你潜在的雇主展示了你的动力和能力。

个人项目也是展示技术技能的好方法。你应该一直努力学习新技能。基于你正在学习的东西做一个项目既能巩固你的学习,又能向别人展示你的能力。随着你做越来越多的项目,你的技能将会提高,你将能够做更多令人印象深刻的事情来增加你的投资组合。然后,您可以将您的 GitHub 添加到您的简历中,并让它作为微型技术简历来支持您的其他经验!

怎么做

开始一个项目是最难的部分。如果你想读一本很好的指南,告诉你如何找到并完成一个有价值的项目,并将其添加到你的投资组合中,请点击这里查看泰勒·福克曼的文章。我将只讨论我认为重要的几个要点。

当在一个项目中工作时,有三个大的部分。你有数据、模型和结果。首先,找到你感兴趣的数据。试着寻找那些没有在一百万个其他项目中使用过的数据,这些数据可能包含一些独特的见解。尽量避免模仿别人以前做过的项目。找到数据后,构建并评估几个模型来回答你的任何问题。然后,确保你用有趣的方式展示你的结果。这可以是通过一篇博客文章,一个漂亮的笔记本,或者一个幻灯片。用一种好的、可理解的方式展示你的项目和做一些酷的事情一样重要。

展示你的经历

在你做了所有这些事情以获得一些数据科学经验之后,你仍然需要很好地展示它以获得一份工作。无论你在做什么,你都可以让它听起来绝对无聊,或者有趣而独特。让我们以 LinkedIn 的个人资料为例。你决定和一位教授一起做一些关于防晒霜是否能预防皮肤癌的研究,并发表了一篇很酷的论文。现在你想把它放在你的 LinkedIn 个人资料上。您可以添加类似这样的内容:

研究助理

  • 我帮助进行了关于防晒霜对皮肤癌预防作用的研究。我帮助分析了这些数据,并撰写了现在发表在《美国防晒杂志》上的论文。

这是放在你的 LinkedIn 上的好东西。虽然我已经准备好成为一名数据科学家,但这可能并不确切。有过相同经历并试图获得数据科学工作的人可能会这样写:

研究助理

  • 作为一名研究助理,我参与了关于防晒霜和皮肤癌的假设的制定和测试。我积极参与准备数据和解释我进行的线性回归的结果。我以一种没有统计学背景的学者也能理解这项研究最重要的发现的方式展示了我的结果。我准备从这次经历中汲取实验思维,并将其应用于数据科学问题。

显然,这不是你可能写的完美版本。但我的观点是:如果你做了一些让你更有准备成为数据科学家的事情,不要羞于指出来。你必须清楚地表明,你已经有意识地寻找那些能让你成为优秀数据科学家的经历,并很好地展示出来。

最后的想法

在你找到第一份工作之前,有很多方法可以获得数据科学方面的经验。不要觉得局限于班级项目和 Kaggle 竞赛。发挥创造力,用你感兴趣的数据技能去做一些有趣的事情。一旦你获得了这些经验,确保它们被展示给人们看和阅读。然后,不要害怕去申请一份需要一两年经验的工作。你可以提出一个论点,你已经有了。

如果您有任何问题,请随时发表评论!

如何通过深度学习和嵌入层获得表格数据的最新结果

原文:https://towardsdatascience.com/how-to-gain-state-of-the-art-result-on-tabular-data-with-deep-learning-and-embedding-layers-d1eb6b83c52c?source=collection_archive---------8-----------------------

卡格尔蓝皮书推土机竞赛的另一种方法

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

Embeddings can be use other than word representations

动机

T 基于 ree 的模型,如 Random Forest 和 XGBoost,在解决表格(结构化)数据问题中非常流行,并在最近的 Kaggle 竞赛中获得了很多关注。这是有其充分理由的。然而,在本文中,我想介绍一种不同于 fast.ai 的表格模块的方法,它利用了:

深度学习和嵌入层。

这有点违背行业共识,即深度学习更多地用于图像、音频或 NLP 等非结构化数据,通常不适合处理表格数据。然而,分类数据的嵌入层的引入改变了这种观点,我们将尝试在蓝皮书推土机竞赛上使用 fast.ai 的表格模块,并看看这种方法能走多远。

你可以找到 Kaggle 笔记本📔 此处

加载数据

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

首先,让我们导入必要的模块。这里最核心的一个是**fastai.tabular**:

from fastai import *
from fastai.tabular import *

然后我们将数据读入熊猫数据帧。您可以在本文顶部的 Kaggle 笔记本链接中找到具体的代码,但在这里,我将只展示必要的代码片段,以尽可能保持简洁。我们将 CSV 文件读入train_df,这将是我们主要工作的数据帧。我们还将在test_df中读到测试集。

让我们简单看一下我们正在处理的数据:

len(train_df), len(test_df)
(401125, 12457)

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

对训练集排序

这是为了创建一个好的验证集。一个好的验证集对于一个成功的模型的重要性怎么强调都不为过。因为我们要预测未来的销售价格数据,所以我们需要建立一个验证集,确保所有数据都在训练集的“未来”收集。因此,我们需要首先对训练集进行排序,然后将“未来”部分拆分为验证集。

train_df = train_df.sort_values(by='saledate', ascending=False)
train_df = train_df.reset_index(drop=True)

数据预处理

比赛的评估方法使用 RMSLE(均方根对数误差)。所以如果我们取预测的对数,我们可以用老 RMSE 作为我们的损失函数。只是这样更容易。

train_df.SalePrice = np.log(train_df.SalePrice)

对于特征工程,由于我们将使用深度学习来解决问题,并且它非常擅长特征提取,所以我们将只在saledate进行。这是使用深度学习方法的优势,它需要更少的功能工程和更少的领域知识。我们将使用 fast.ai 的add_datepart函数来添加更多与销售日期相关的功能。

# The only feature engineering we do is add some meta-data from the sale date column, using 'add_datepart' function in fast.ai
add_datepart(train_df, "saledate", drop=False)
add_datepart(test_df, "saledate", drop=False)

add_datepart所做的是,它接受saledate列,并添加了一堆其他列,如day of weekday of month,无论是月、季、年的开始还是结束,等等。这些添加的功能将提供对日期的更多洞察,并与用户购买行为相关。例如,在年底,公司通常会开展促销活动,价格通常会降低。

让我们检查是否所有这些与日期相关的特征都被添加到我们的数据框架中:

# check and see whether all date related meta data is added.
def display_all(df):
    with pd.option_context("display.max_rows", 1000, "display.max_columns", 1000): 
        display(df)

display_all(train_df.tail(10).T)

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

他们确实被加了进去。很好。现在我们需要做一些数据预处理,因为这个数据帧有相当多的缺失数据,我们还想对列进行分类和规范化。有了 fast.ai 库,这就相当简单了。我们只需在 Python 列表中指定我们想要的预处理方法,就像这样:

# Defining pre-processing we want for our fast.ai DataBunch
procs=[FillMissing, Categorify, Normalize]

这个变量procs稍后将被用于创建用于训练的 fast.ai 数据束。

构建模型

L 让我们看看每一列的数据类型,以决定哪些是分类的,哪些是连续的:

train_df.dtypes
g = train_df.columns.to_series().groupby(train_df.dtypes).groups
g

结果如下:

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

然后,我们将所有分类列放入一个列表cat_vars中,所有连续列放入一个列表cont_vars中。这两个变量也将用于构造 fast.ai DataBunch。

# prepare categorical and continous data columns for building Tabular DataBunch.
cat_vars = ['SalesID', 'YearMade', 'MachineID', 'ModelID', 'datasource', 'auctioneerID', 'UsageBand', 'fiModelDesc', 'fiBaseModel', 'fiSecondaryDesc', 'fiModelSeries', 'fiModelDescriptor', 'ProductSize', 
            'fiProductClassDesc', 'state', 'ProductGroup', 'ProductGroupDesc', 'Drive_System', 'Enclosure', 'Forks', 'Pad_Type', 'Ride_Control', 'Stick', 'Transmission', 'Turbocharged', 'Blade_Extension', 
            'Blade_Width', 'Enclosure_Type', 'Engine_Horsepower', 'Hydraulics', 'Pushblock', 'Ripper', 'Scarifier', 'Tip_Control', 'Tire_Size', 'Coupler', 'Coupler_System', 'Grouser_Tracks', 'Hydraulics_Flow', 
            'Track_Type', 'Undercarriage_Pad_Width', 'Stick_Length', 'Thumb', 'Pattern_Changer', 'Grouser_Type', 'Backhoe_Mounting', 'Blade_Type', 'Travel_Controls', 'Differential_Type', 'Steering_Controls', 
            'saleYear', 'saleMonth', 'saleWeek', 'saleDay', 'saleDayofweek', 'saleDayofyear', 'saleIs_month_end', 'saleIs_month_start', 'saleIs_quarter_end', 'saleIs_quarter_start', 'saleIs_year_end', 
            'saleIs_year_start'
           ]cont_vars = ['MachineHoursCurrentMeter', 'saleElapsed']

我们将创建另一个数据帧df来馈入数据集中。我们还将因变量指定为dep_var

# rearrange training set before feed into the databunch
dep_var = 'SalePrice'
df = train_df[cat_vars + cont_vars + [dep_var,'saledate']].copy()

现在是时候创建我们的验证集了。我们通过从训练集中切掉一块最近的条目来做到这一点。街区应该有多大?嗯,和测试集一样大。让我们看看代码:

# Look at the time period of test set, make sure it's more recent
test_df['saledate'].min(), test_df['saledate'].max()# Calculate where we should cut the validation set. We pick the most recent 'n' records in training set where n is the number of entries in test set. 
cut = train_df['saledate'][(train_df['saledate'] == train_df['saledate'][len(test_df)])].index.max()
cut12621# specify the valid_idx variable as the cut out range.
valid_idx = range(cut)

我们首先查看测试集的时间段,并确保它比我们所有的训练集更近。然后我们计算需要剪下多少记录。

最后,让我们使用 fast.ai 的 datablock API 构建我们的 DataBunch 进行训练:

# Use fast.ai datablock api to put our training data into the DataBunch, getting ready for training
data = (TabularList.from_df(df, path=path, cat_names=cat_vars, cont_names=cont_vars, procs=procs)
                   .split_by_idx(valid_idx)
                   .label_from_df(cols=dep_var, label_cls=FloatList)
                   .databunch())

构建模型

我们将从刚刚创建的数据集中启动一个 fast.ai tabular.learner。我们希望将预测的价格范围限制在历史销售价格范围内,因此我们需要计算y_range。请注意,我们将SalePrice的最大值乘以 1.2,因此当我们应用 sigmoid 时,上限也将被覆盖。这是从模型中挤出更多性能的一个小技巧。

max_y = np.max(train_df['SalePrice'])*1.2
y_range = torch.tensor([0, max_y], device=defaults.device)
y_rangetensor([ 0.0000, 14.2363], device='cuda:0')

现在我们可以创建我们的学习者:

# Create our tabular learner. The dense layer is 1000 and 500 two layer NN. We used dropout, hai 
learn = tabular_learner(data, layers=[1000,500], ps=[0.001,0.01], emb_drop=0.04, y_range=y_range, metrics=rmse)

关于 fast.ai tabular_learner最重要的一点是为分类数据使用嵌入层。这是使深度学习在处理表格数据方面具有竞争力的’秘方’。由于每个分类变量都有一个嵌入层,我们为分类变量引入了良好的交互,并利用了深度学习的最大优势:自动特征提取。为了更好的正则化,我们还对密集层和嵌入层使用了 Drop Out。学习者的指标是 RMSE,因为我们已经记录了销售价格。我们来看看模型。

TabularModel(
  (embeds): ModuleList(
    (0): Embedding(388505, 600)
    (1): Embedding(72, 18)
    (2): Embedding(331868, 600)
    (3): Embedding(5155, 192)
   ...
    (60): Embedding(3, 3)
    (61): Embedding(2, 2)
    (62): Embedding(3, 3)
  )
  (emb_drop): Dropout(p=0.04, inplace=False)
  (bn_cont): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (layers): Sequential(
    (0): Linear(in_features=2102, out_features=1000, bias=True)
    (1): ReLU(inplace=True)
    (2): BatchNorm1d(1000, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (3): Dropout(p=0.001, inplace=False)
    (4): Linear(in_features=1000, out_features=500, bias=True)
    (5): ReLU(inplace=True)
    (6): BatchNorm1d(500, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (7): Dropout(p=0.01, inplace=False)
    (8): Linear(in_features=500, out_features=1, bias=True)
  )
)

从上面可以看出,我们有分类列的嵌入层,然后是删除层。对于连续列,我们有一个批处理范数层,然后我们将所有这些列(分类嵌入+连续变量)连接在一起,并将其放入两个完全连接的层中,这两个层分别有 1000 和 500 个节点,中间有 Relu、batch norm 和 Dropout。很标准的东西。

现在我们有了模型,让我们使用 fast.ai 的学习率查找器来查找一个好的学习率:

learn.lr_find()
learn.recorder.plot()

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

我们将挑选学习率曲线斜率最大的一端的学习率:le-02

让我们使用 fast.ai 的单周期训练方法进行一些训练。注意,我们为正则化添加了一些权重衰减(0.2)。

learn.fit_one_cycle(2, 1e-2, wd=0.2)

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

我们可以用较小的学习率训练更多的周期:

learn.fit_one_cycle(5, 3e-4, wd=0.2)

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

在我们的验证集上,我们已经达到了 0.223的分数。由于竞赛不接受提交材料,我们只能通过查看排行榜来大致了解该模型的表现:

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

排名第一的是 0.229 。对比这款车型的 0.223 。我们不知道它在测试集上的表现如何,但总的来说,我认为我们得到的结果一点也不差。

关于嵌入层的更多内容

W 让一切点击这里的是嵌入层。嵌入只是一个把某物映射到一个向量的花哨说法。就像 NLP 中越来越流行的单词嵌入一样,它意味着使用一个向量(大小是任意的,取决于任务)来表示单词,这些向量是权重,可以通过反向支持来训练。

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

类似地,对于我们的例子,我们在分类变量上使用了嵌入。每一列都有一个可以训练的嵌入矩阵。每个唯一的列值都有一个映射到它的特定向量。这方面的美妙之处在于:通过嵌入,我们现在可以开发变量的“语义”,这种“语义”以权重的形式影响我们的销售价格,可以通过我们的深度神经网络提取和训练。该模型将具有“T2”深度,它需要很好地适应大数据集。

但是不要把我的话当真,还是只看我这个不起眼的小项目的成果吧。在一个更荣耀的例子中,有这篇论文,作者是在一个名为 Rossman (预测未来销售)的 Kaggle 竞赛中获得第三名的人。在排行榜上的顶级团队中,其他人都使用了某种重型功能工程,但通过使用嵌入层,他们以较少的功能工程获得了第三名。

更有趣的是,有了嵌入层,你实际上可以在嵌入矩阵空间中可视化变量投影。以罗斯曼项目为例。他们对德国各州的嵌入矩阵进行了二维投影。

如果你在嵌入空间上圈出一些州,在实际地图上圈出相同的州。你会发现它们惊人的相似。嵌入层实际上发现了地理。

觉得这篇文章有用?在 Medium 上关注我(李立伟)或者你可以在 Twitter @lymenlee 或者我的博客网站wayofnumbers.com上找到我。你也可以看看我下面最受欢迎的文章!

[## “这是 CS50”:开始数据科学教育的愉快方式

为什么 CS50 特别适合巩固你的软件工程基础

towardsdatascience.com](/this-is-cs50-a-pleasant-way-to-kick-off-your-data-science-education-d6075a6e761a) [## 一枚硬币的两面:杰瑞米·霍华德的 fast.ai vs 吴恩达的 deeplearning.ai

如何不通过同时参加 fast.ai 和 deeplearning.ai 课程来“过度适应”你的人工智能学习

towardsdatascience.com](/two-sides-of-the-same-coin-fast-ai-vs-deeplearning-ai-b67e9ec32133) [## 你需要了解网飞的“朱庇特黑仔”:冰穴📖

是时候让 Jupyter 笔记本有个有价值的竞争对手了

towardsdatascience.com](/what-you-need-to-know-about-netflixs-jupyter-killer-polynote-dbe7106145f5)

如何使用 Pandas 和 Googlemaps API 从地址栏生成经度和纬度坐标

原文:https://towardsdatascience.com/how-to-generate-lat-and-long-coordinates-from-an-address-column-using-pandas-and-googlemaps-api-d66b2720248d?source=collection_archive---------4-----------------------

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

Photo by Paula May on Unsplash

如果您想使用地址数据中的地理坐标绘制地图,Google 提供了一个名为 Geocoding 的 API,允许您将地址转换为地理坐标,反之亦然。

什么是地理编码?

地理编码是将地址(如“1600 amphetica Parkway,Mountain View,CA”)转换为地理坐标(如纬度 37.423021 和经度-122.083739)的过程,您可以使用地理坐标在地图上放置标记,或定位地图。如果你想深入了解,请点击这里阅读更多

谷歌云地理编码 API 定价:

Google 为这个 API 提供每月 200 美元的免费积分(基于您拥有的帐户类型),所以请确保您了解自己运行这个 API 可能会产生的成本。

我们开始吧

我使用 Jupyter notebook 来运行本教程中的脚本。

首先,您需要导入 GoogleMapsPandas 包。如果您还没有安装,请确保已经使用 pip 将这些软件包安装到您的环境中。

from googlemaps import Client as GoogleMaps
import pandas as pd 

创建您的 API 密钥

现在,您需要在 Google Cloud Platform 帐户的凭证部分创建一个 API 密匙。这很简单。

  • 在你的控制台搜索栏中输入 API &服务
  • 点击 启用 API 和服务
  • 搜索 地理编码 API 并确保其已启用
  • 现在点击 凭证 > 创建凭证 并创建一个新的 API 密钥

在 Python 中创建新的 GoogleMaps 对象时,您将使用这个 API 键。

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

现在回到 Jupyter notebook,使用刚刚生成的 API 键创建一个 GoogleMaps 对象。

gmaps = GoogleMaps('YOUR_API_KEY')

下一步是导入 csv 文件,该文件包含一列您想要转换的完整地址。

addresses = pd.read_csv("YOUR_CSV_FILE.csv")
addresses.head()

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

添加两个空列来保存经度和纬度数据。

addresses['long'] = ""
addresses['lat'] = ""

地理编码响应

运行Google maps . geocode命令返回一个 JSON 对象,看起来像 this 。如果需要,您还可以利用更多的属性。然而,如前所述,我们将只关注经度和纬度地理坐标,它在 JSON 响应中有一个“geometry”和“location”的*键。
-几何形状>位置>横向
-几何形状>位置> lng
*

生成经度和纬度坐标

现在是时候遍历数据帧,为每个地址记录插入“lng”和“lat”。

for x in range(len(addresses)):
    try:
        time.sleep(1) #to add delay in case of large DFs
        geocode_result = gmaps.geocode(addresses['FullAddress'][x])
        addresses['lat'][x] = geocode_result[0]['geometry']['location'] ['lat']
        addresses['long'][x] = geocode_result[0]['geometry']['location']['lng']
    except IndexError:
        print("Address was wrong...")
    except Exception as e:
        print("Unexpected error occurred.", e )addresses.head()

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

有了生成的坐标,您可以像这样绘制地图视图。

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

source: https://blog.exploratory.io/geocoding-us-zip-code-data-with-dplyr-and-zipcode-package-7f539c3702b0

最后,如果需要,将您的结果导出到 csv。

addresses.to_csv('address_coords.csv')

就是这样!希望这对你有帮助。如果你有任何问题或建议,请告诉我。

你可以成为中等会员享受更多这样的故事。

如何使用 Scikit-Learn 和 Python 生成预测区间

原文:https://towardsdatascience.com/how-to-generate-prediction-intervals-with-scikit-learn-and-python-ab3899f992ed?source=collection_archive---------0-----------------------

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

(Source)

使用梯度推进回归器显示机器学习估计中的不确定性

“所有的模型都是错误的,但有些是有用的”——乔治·博克斯。当我们提出机器学习预测时,记住这个明智的建议至关重要。所有的机器学习管道都有局限性:影响目标的特征不在数据中(潜在变量),或者模型做出的假设与现实不符。当我们显示一个预测的精确数字时,这些都被忽略了——房子将是 450,300.01 美元——这给人的印象是我们完全相信我们的模型是真实的。

显示模型预测的一种更诚实的方式是估计范围:可能有一个最可能的值,但也有一个真实值可能存在的较大区间。这不是数据科学课程中通常涉及的主题,但我们在预测中展示不确定性,并且不要过度吹嘘机器学习的能力,这一点至关重要。虽然人们渴望确定性,但我认为展示一个包含真实值的宽预测区间比一个远离现实的精确估计要好。

在本文中,我们将介绍一种在 Scikit-Learn 中产生不确定性区间的方法。完整的代码可以在 GitHub 的上找到,在 nbviewer 上有一个互动版的 Jupyter 笔记本。我们将主要关注的实现,在最后有一个简短的部分和理解理论的资源。生成预测区间是数据科学工具箱中的另一个工具,对于赢得非数据科学家的信任至关重要。

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

Prediction intervals we’ll make in this walkthough.

问题设置

在这次演练中,我们将使用在 DrivenData 上举办的机器学习竞赛中的真实建筑能源数据。你可以在这里获得原始数据,但是我已经在 GitHub 中提供了一个清理过的版本,它具有以 15 分钟为间隔测量的能量和八个特征。

data.head()

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

Cleaned building energy data

目标是从特征中预测能量消耗。(这是我们在 Cortex Building Intel 每天都要做的实际工作!)。毫无疑问,我们的数据中存在未捕捉到的影响能源消耗的隐藏特征(潜在变量),因此,我们希望通过预测能源使用的上限和下限来显示我们估计中的不确定性。

# Use plotly + cufflinks for interactive plotting
import cufflinks as cfdata.resample('12 H').mean().iplot()

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

Building energy data from DrivenData (hosting machine learning competitions for good!)

履行

为了在 Scikit-Learn 中生成预测区间,我们将使用梯度推进回归器,从文档中的这个示例开始工作。基本想法很简单:

  1. 对于较低的预测,使用GradientBoostingRegressor(loss= "quantile", alpha=lower_quantile)和代表下限的lower_quantile,比如 0.1 代表第 10 个百分位数
  2. 对于上限预测,使用带有代表上限的upper_quantileGradientBoostingRegressor(loss= "quantile", alpha=upper_quantile),比如 0.9 代表第 90 百分位
  3. 对于中间预测,使用预测中间值的GradientBoostingRegressor(loss="quantile", alpha=0.5),或预测平均值的默认loss="ls"(对于最小二乘法)。文档中的例子使用了后一种方法,我们也将这样做。

在高层次上,损失是由模型优化的函数。当我们将损失改变为分位数并选择α(分位数)时,我们能够得到对应于百分位数的预测。如果我们使用较低和较高的分位数,我们可以产生一个估计范围。(我们不会在这里讨论分位数损失的细节——参见下面分位数损失的背景。)

在将数据分成训练集和测试集之后,我们构建模型。我们实际上必须使用 3 个独立的梯度推进回归器,因为每个模型都在优化不同的函数,并且必须单独训练。

from sklearn.ensemble import GradientBoostingRegressor# Set lower and upper quantile
LOWER_ALPHA = 0.1
UPPER_ALPHA = 0.9# Each model has to be separate
lower_model = GradientBoostingRegressor(loss="quantile",                   
                                        alpha=LOWER_ALPHA)
# The mid model will use the default loss
mid_model = GradientBoostingRegressor(loss="ls")upper_model = GradientBoostingRegressor(loss="quantile",
                                        alpha=UPPER_ALPHA)

训练和预测使用熟悉的 Scikit-Learn 语法:

# Fit models
lower_model.fit(X_train, y_train)
mid_model.fit(X_train, y_train)
upper_model.fit(X_train, y_train)# Record actual values on test set
predictions = pd.DataFrame(y_test)# Predict
predictions['lower'] = lower_model.predict(X_test)
predictions['mid'] = mid_model.predict(X_test)
predictions['upper'] = upper_model.predict(X_test)

就这样,我们有了预测区间!

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

Prediction intervals from three Gradient Boosting models

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

Prediction intervals visualized

用一点点 plotly 的,我们可以生成一个很好的交互剧情。

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

Interactive plot produced with plotly

计算预测误差

与任何机器学习模型一样,我们希望在测试集(我们有实际答案的地方)上量化我们预测的误差。测量预测区间的误差比点预测稍微复杂一点。我们可以计算实际值在该范围内的时间百分比,但这可以通过使间隔非常宽来容易地优化。因此,我们还需要一个考虑到预测值与实际值有多远的度量,比如绝对误差。

在笔记本中,我提供了一个函数来计算下、中和上预测的绝对误差,然后对“区间”绝对误差的上下误差进行平均。我们可以对每个数据点都这样做,然后绘制误差的箱线图(边界内的百分比在标题中):

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

有趣的是,对于这个模型,较低预测的中值绝对误差实际上小于中间预测。这个模型没有很高的精度,可能会受益于优化(调整模型超参数)。实际值有一半以上的时间处于下限和上限之间,我们可以通过降低下分位数和提高上分位数来提高这个指标的精度。

可能有更好的指标,但我选择了这些,因为它们计算简单,易于解释。您使用的实际指标应该取决于您试图解决的问题和您的目标。

预测区间模型

用 3 个独立的模型进行拟合和预测有些繁琐,因此我们可以编写一个模型,将梯度推进回归量包装到一个类中。它源自 Scikit-Learn 模型,因此我们使用相同的语法进行训练/预测,只是现在它在一个调用中:

# Instantiate the class
model = GradientBoostingPredictionIntervals(
    lower_alpha=0.1, upper_alpha=0.9
)# Fit and make predictions
_ = model.fit(X_train, y_train)
predictions = model.predict(X_test, y_test)

该模型还带有一些绘图工具:

fig = model.plot_intervals(mid=True, start='2017-05-26', 
                           stop='2017-06-01')
iplot(fig)

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

请按照您认为合适的方式使用和调整模型!这只是进行不确定性预测的一种方法,但我认为它很有用,因为它使用了 Scikit-Learn 语法(意味着一条浅的学习曲线),我们可以根据需要对它进行扩展。一般来说,这是解决数据科学问题的好方法:从简单的解决方案开始,只在需要时增加复杂性!

背景:分位数损失和梯度推进回归变量

梯度推进回归器是一个集合模型,由单独的决策树/回归树组成。(模型的原解释见弗里德曼 1999 年的论文《贪婪函数逼近:一种梯度助推机》。)与并行训练树的随机森林相反,梯度增强机器顺序训练树,每棵树从当前集合的错误(残差)中学习。树对模型的贡献是通过最小化模型预测和训练集中实际目标的损失函数来确定的。

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

Each iteration of the gradient boosting machine trains a new decision/regression tree on the residuals (source)

使用默认损失函数-最小二乘法-梯度推进回归器预测平均值。理解的关键点是最小平方损失同等地惩罚低误差和高误差:

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

Least squares loss versus error

相反,分位数损失基于分位数以及误差是正(实际>预测)还是负(实际<预测)来惩罚误差。这允许梯度推进模型不是针对平均值而是针对百分位数进行优化。分位数损失为:

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

其中 α 是分位数。让我们快速地看一个例子,实际值为 10,分位数为 0.1 和 0.9:

  1. 如果 α = 0.1,预测值= 15,那么损失=(0.1–1)*(10–15)= 4.5
  2. 如果 α = 0.1,预测值= 5,那么损失= 0.1 *(10–5)= 0.5
  3. 如果 α = 0.9,预测= 15,那么损耗=(0.9–1)*(10–15)= 0.5
  4. 如果 α = 0.9,预测值= 5,那么损失= 0.9 *(10–5)= 4.5

对于分位数< 0.5, if the prediction is greater than the actual value (case 1), the loss is greater than for a prediction an equal distance above the actual value. For a quantile > 0.5,如果预测小于实际值(情况 4),则损失大于低于实际值相等距离的预测。如果分位数== 0.5,那么高于和低于实际值的预测会产生相等的误差,并且模型会针对中值进行优化。

(对于 mid 模型,我们可以使用loss="quantile", alpha=0.5表示中值,或者使用loss="ls"表示平均值)。

分位数损失最好用损失与误差的关系图来说明:

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

Quantile loss versus error for different quantiles

分位数< 0.5 drive the predictions below the median and quantiles > 0.5 驱动预测高于中位数。这是一个很好的提醒,机器学习方法的损失函数决定了你要优化什么!

根据我们想要的输出,我们可以优化平均值(最小平方)、中值(alpha == 0.5 的分位数损失)或任何百分位数(alpha ==百分位数/ 100 的分位数损失)。这是分位数损失的一个相对简单的解释,但它足以让您开始通过模型演练生成预测间隔。为了更进一步,查看这篇文章或者从维基百科页面开始并查看源代码。

结论

从机器学习模型预测单个数字会给人一种错觉,即我们对整个建模过程有很高的信心。然而,当我们记住任何模型都只是一个近似值时,我们看到了在进行估计时需要用*来表示不确定性。*一种方法是使用 Scikit-Learn 中的梯度推进回归器生成预测区间。这只是预测范围的一种方法(例如,参见线性回归的置信区间),但它相对简单,可以根据需要进行调整。在本文中,我们看到了一个完整的实现,并了解了分位数损失函数背后的一些理论。

解决数据科学问题就是在你的工具箱中有许多工具可以根据需要应用。生成预测间隔是一项有用的技术,我鼓励您阅读本演练并将其应用于您的问题。(学习任何技术的最好方法是通过实践!)我们知道机器学习可以做一些非常不可思议的事情,但它并不完美,我们不应该这样描述它。为了获得决策者的信任,我们通常需要给出的不是一个单一的数字作为我们的估计,而是一个预测范围,表明所有模型中固有的不确定性。

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

我写数据科学,偶尔也写一些其他有趣的话题。你可以在 twitter 上关注我以获得有用的技术和工具。如果拯救世界同时帮助底线对你有吸引力,那么请联系我们 Cortex。

如何在没有神经网络的情况下为评论文本生成“摘要”

原文:https://towardsdatascience.com/how-to-generate-summaries-for-review-text-without-neural-networks-568f14dbe835?source=collection_archive---------22-----------------------

获取带有相关术语的可解释关键词,以理解消费者评论

作为一名在 Clorox 消费品行业工作的数据科学家,我的“日常挑战”之一是从大量关于特定产品的用户评论中快速而简洁地提取有用的信息。从表面上看,这个任务需要对大量文本进行某种形式的摘要。说到生成文本摘要,我们通常会想到复杂的深度学习相关模型和解决方案——序列到序列模型、编码器-解码器 RNNs、注意力机制等。然而,尽管这些深度学习模型需要花费巨大的努力来训练,但它们的性能对于特定的任务来说并不总是令人满意的。更重要的是,如果我们的目标是从文本内容中提取有见地的信息,有时我们实际上并不需要文本的语言摘要。在这篇博客中,我想介绍一种方法,它可以通过基于频率的计数从评论文本中生成“摘要”。

举个例子,我将使用亚马逊的公共用户评论的子集来评价家用清洁产品之一的 Clorox 湿巾。此链接将带您进入评论页面。下面是我从这些评论中总结出来的“总结”。

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

它是这样工作的:

词性标注

第一步是用词性来标记评论文本中的每个标记。当我们考虑用户对某个产品的评论以及文本的词性成分时,提供最有洞察力的信息的术语或标记很可能是名词或形容词就不足为奇了。名词有助于解释“是什么”的问题(消费者谈论的产品是什么,主题是什么。它可以是包装、送货、气味等),而形容词有助于“关于什么”的问题。(包装呢;交付呢;气味呢)。标记后,我们将提取前 15 个最流行的名词和前 15 个最流行的形容词。

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

相关术语搜索

现在我们有了名词和形容词的频率,下一步将是找到它们之间的关系。

具体来说,对于一个流行名词,如何才能知道最靠前的相关形容词?同样对于一个形容词,怎么才能知道最上面的相关名词呢?了解相关术语可能有助于我们加深从文本中获得的信息,但这项任务本身并不像看起来那么简单。

以“价格”这个术语为例。它在上面的图中显示为第三个流行名词,现在我想通过查看我们的消费者使用的最相关的形容词来了解价格。那么我们就有一个问题——如何定义相关?更具体地说,如何构造一个搜索算法来找到并显示最相关的形容词?

让我用下面的评论作为例子来帮助说明我的方法:

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

在这种情况下,我们将术语“价格”称为目标术语,因为我们想要获得关于“价格”的信息。在特定的审查中,我们对目标术语的每次出现重复以下步骤。

1.确定目标术语的位置(以黄色突出显示)

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

2.查找与目标术语具有相同 POS 标签的最近术语。称它们为“边界条件”(用蓝色突出显示)。在这种情况下,由于“价格”是一个名词,边界项将是最接近的名词。

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

3.找出边界术语中的所有形容词,并将它们保存到列表中

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

然后,我们重复上述相同的过程,将“价格”作为所有评论的目标术语。最终,我们会有一个与价格这个术语潜在“相关”的形容词列表。通过这种方式,我能够得到如下的前 15 个相关形容词:

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

像“好”和“伟大”这样的术语非常流行。这实际上是真的,因为我们可以在亚马逊上找到很多评论,上面写着“价格合理”和“价格优惠”最后,我们对所有提到最多的名词和形容词重复整个相关术语搜索过程,我们最终将得到我在开始时提供的汇总表。

这不是一个复杂的方法,但它非常有效且易于使用。它就像构建单词云一样简单,但也提供了更多的见解和更好的解释。要阅读更多关于这种技术的内容,它是如何实现的,有哪些缺点,这里是我为它写的原始博客的链接

在这里你可以找到我上面提到的方法的代码。下面是如何使用它:

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

我希望这个博客对你有所帮助,我希望听到你的反馈

感谢您通读!

如何获得数据科学实习机会——技术专长与个性

原文:https://towardsdatascience.com/how-to-get-a-data-science-internship-technical-expertise-vs-personality-c68d3a117eaa?source=collection_archive---------12-----------------------

对于每个数据科学爱好者来说

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

任何领域的专家都曾是初学者——海伦·海丝

之前我还是一个还在读大学的学生的时候,就想去搞一个数据科学的实习。我太想得到它了,所以我申请了这么多公司,但只得到他们的几个回复。

更具体地说,只有不到 10%的公司回复了我的申请。不仅如此,当我看到实习职位的描述时,要求是具有很强的技术技能,优秀的成绩,深入的机器学习知识等。

我迷路了。我既没有很强的技术背景,也没有数据科学实习的经验。我只是在寻找我的第一份数据科学实习。

以下是我从 LinkedIn 收到的一些关于如何获得数据科学实习的问题。

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

我知道努力工作却没有得到想要的东西是什么感觉。

但如果我告诉你,经验或技术背景对获得数据科学实习可能并不那么重要,你会感兴趣吗?

在本文中,我将分享如何获得第一份数据科学实习。

现在,让我们问自己下面的问题。

为什么需要获得数据科学实习?

然后,从招聘经理的角度出发。

为什么需要雇佣实习生?

问完这两个问题,你是否找到了你和你的招聘经理都在寻找的共同答案?

第一个问题的答案之一是学习数据科学,了解数据科学家应该具备哪些技能,以便您可以学习。然而,你能拿出什么样的资格、技能等让招聘经理雇佣你呢?

现在,让我们描绘两个场景。

第一种情况

想象一下,招聘经理正在寻找实习生,他们可以帮助完成一些数据标注任务,还可以评估各种机器学习模型。也就是说他或她不是在寻找一个有很强技术背景的人。

她可能只是想找一个愿意从事一些与机器学习无关的任务的人。换句话说,招聘经理正在寻找一个拥有她所寻找的个性的人。

例如,给定一个数据标记任务,您可能认为这是一个非常手工的过程。当你的导师在你的数据集上训练模型,发现你标注的大部分标签都是不正确的时候,她会觉得自己浪费了时间去信任你的工作。

但是如果她想找一个很有个性的人一起工作呢?一旦她对交给你的任务感到满意,我相信她会愿意教你你感兴趣的东西。

第二种情况

假设招聘经理正在寻找一个人来帮助她解决她面临的一些最困难的问题。换句话说,她想引进一个有很强技术能力和机器学习知识的人。

在这种情况下,她要求的候选人必须有能力阅读研究论文,提出解决问题的好主意,清理代码,使当前的代码更有效等等。

因此,招聘经理会对候选人有更高的期望。简而言之,候选人应该具备很强的技术能力。

个性与技术专长

现在,我想你对招聘经理的期望有了更清晰的了解。因此,让我来分享你应该如何准备自己,以便获得你的第一个数据科学实习机会!

如果你是一个没有很强技术背景的人,这里有一些我的建议。首先,你应该在面试中表现出良好的个性。什么被认为是好的性格?例如,努力工作,愿意学习,对机器学习充满热情,独立等等。

从招聘经理的角度来看,如果你没有技术背景,但只要你愿意学习并努力工作,大多数时候,他或她会愿意给你一个机会。前提是你申请的不是需要很强技术背景的实习。

此外,不要对公司或工作范围挑剔。如果你得到了数据科学实习,也许你的大部分时间将花在手工任务上。然而,如果你设法更快地完成任务,并且你表现出你的技术技能在短时间内确实提高了很多,你的经理会给你机会尝试训练一些模型。另一方面,别忘了这次实习会给你以后带来更多的实习机会。

而且,有一个很棒的项目来论证也很重要。我这里说的不是学校的项目,而是有趣的现实世界的项目。如果你有兴趣知道展示哪种项目,请在下面评论!

你可以请你的同学或朋友来帮助你。将您的代码发布到 GitHub 并不是故事的结尾。你应该找一个对数据科学一无所知的人,你以一种他或她知道你在说什么的方式向你的朋友介绍这个项目

另一方面,花一些时间在社交活动上。如果你能给他们留下很好的第一印象,你就有很大的机会获得面试机会。

如果你确实有技术专长,但仍然找不到实习机会,这里有一些你可以注意的方法。如果你的目标是那些顶级公司,练习你的编程技能

有很多网站可以参考,比如 LeetcodeTopcoderCoderbyte 等。如果你是懒人类型的人,问问你的学长,朋友,甚至去查一下 glassdoor 看看有没有人分享面试的问题。你会感到震惊,有时你甚至可以在那里找到面试问题的答案。

此外,练习,练习,练习你的演讲。不要让你的演示搞砸了你的大项目。我怎么强调这一点都不为过,因为我看到太多的实习生在实际面试中因为他们的陈述而搞砸了。他们可能有有趣的项目要展示,但在他们完成演示后,我仍然不明白他们想展示什么。请记住,数据科学不仅仅是编码,还包括清楚地展示你的发现。

如果你知道你总是无法回答与机器学习知识相关的问题,那么花时间复习你的知识

不仅如此,展示有趣的项目。记得清理你的代码并插入整洁的注释。此外,一定要注意你的简历。有一次我面试一个实习生,他或她的简历中显示的作品集链接无法访问。

性格还是很重要的在这种情况下。展示出你很有个性,这样你潜在的老板就会接受你。

最后的想法

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

获得数据科学实习没有完美的公式,但有一些方法可以让你得到它!

你会得到你为之工作的东西,而不是你希望得到的东西——丹尼尔·米尔斯坦

非常感谢你一直读到最后。如有疑问,欢迎在下方评论!

相信我,如果你听从我的建议,你会得到一个!

祝你顺利获得第一份数据科学实习,并祝你早日圣诞快乐!🎄

关于作者

低魏宏是 Shopee 的数据科学家。他的经验更多地涉及抓取网站,创建数据管道,以及实施机器学习模型来解决业务问题。

他提供爬行服务,可以为你提供你需要的准确和干净的数据。你可以访问 这个网站 查看他的作品集,也可以联系他获得的抓取服务

你可以在 LinkedInMedium 上和他联系。

[## ●伟鸿-中等

在媒体上阅读低纬鸿的作品。数据科学家|网络抓取服务:https://www.thedataknight.com/.每…

medium.com](https://medium.com/@lowweihong?source=post_page-----6bef8cb1477a----------------------)

你可能喜欢的故事

[## 如何学习机器学习

由数据科学家分享

towardsdatascience.com](/how-you-can-learn-machine-learning-5991dee49362) [## 进入数据科学领域之前你应该知道的 5 件事

数据科学家日常生活的幕后

towardsdatascience.com](/5-things-you-should-know-before-getting-into-data-science-f4312f06ea73)

如何获得 2019 年数据科学面试

原文:https://towardsdatascience.com/how-to-get-a-data-science-interview-in-2019-d6df63231d43?source=collection_archive---------14-----------------------

你能做的几乎没有什么能保证你在数据科学领域获得面试或工作。另一方面,你可以做很多事情来增加你被关注的可能性。我制作了这个循序渐进的指南,来帮助数据科学的希望者展现出他们最好的一面,并对公司和招聘人员产生影响。

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

在过去的三年里,我浏览了数百份招聘信息,面试了一系列公司。当我完成研究生学业时,我想知道我未来的选择是什么。在这个过程中,我把求职周期分解成了一门科学。

此外,在过去的 6 个月里,我花了大量时间面试数据科学候选人。我在相对较短的时间内经历了桌子的两面,我相信我对什么能真正引起你的注意有独特的理解。这些建议是基于我在这个行业看到的趋势以及我的个人经验。

第一步:照照镜子

为了在面试过程中为自己做好准备,思考下一步你想扮演什么样的角色是很重要的。我建议浏览招聘启事,以确定你想要的目标角色类型。问自己几个关键问题:

  • 我最擅长的技能是什么?
  • 为了得到我想要的角色,我需要提高哪些技能?
  • 我如何展示这些“关键”技能领域的能力?
  • 我会考虑为了工作而搬迁吗?
  • 我想为哪种类型的公司工作(规模、行业、文化)?

带着这些问题,你可以开始思考如何识别机会,展示自己的价值。

第二步:创建高质量的内容

数据科学就业市场的最大趋势是关注未来员工创造的内容。我特别留意候选人的简历中是否有以下链接:

这是让自己与众不同的最简单的方法。如果你已经在两个或更多的资源上发布了内容,这真的会大有帮助。你应该根据你的目标角色来提供这些资源。如果你最感兴趣的工作列表都有 tableau 组件,我强烈建议创建一个 tableau 公共帐户。如果你正在寻找 ML 工程师角色,那么拥有一个包含你个人工作的 Git 账户是有意义的( GithubBitbucketGitLab )。

虽然这些资源极其宝贵,但如果做得不好,它们也会伤害你。我建议在你申请之前更新这些资源。像对待简历或正式邮件一样仔细地修改它们。

从事个人项目会让雇主对你有更多的了解。这表明你有在自己的时间里从事项目的主动性,并且你对数据科学充满热情。项目也向他们展示你对什么类型的数据感兴趣。如果你是在某个行业内部申请,我建议你做一些与该领域相关的项目。

第三步:准备你的电子简历

很明显,简历是获得关注的重要部分。此时,你应该更新两份简历:传统简历和你的 LinkedIn 个人资料。

在更新这些简历之前,我喜欢浏览 5-10 个我觉得有吸引力的职位。如果他们大多需要相同的技能,我会寻找始终不变的关键词和主题。通过突出与工作要求相关的经验和技能,使你的简历适合这些职位是很重要的。如果你申请了几个不同类型的职位,我建议你为每种类型的职位准备不同版本的简历。事实上,我不建议为你申请的每个职位都制作一份简历。

如果这些职位需要你目前不具备的技能,我建议你做一个项目来培养这些技能。你将学到证明你能力的技能和证据。

很多人在 LinkedIn 或者网上发布简历。我建议看看其他数据科学家是如何格式化简历的。以下是提供有用的最佳实践的简历模板和在线服务的链接:

我的传统简历推荐:

  • 从你的技术技能开始。
  • 展示相关的项目和你使用的工具。
  • 强调黑客马拉松中的任何团队工作(一定要做黑客马拉松)。
  • 链接到您创建的内容!
  • 美学和适当的编辑很重要,让其他人通读一下语法错误。
  • 对于每个项目,确定你做了什么以及它所带来的影响(如果适用)。尽可能具体()例如,建立一个随机福里斯特分类器来识别顾客是否会购买。这导致了上个月 1320 次额外的转换。)
  • 对于学校作业或个人项目,项目部分会很有帮助。如果你只有不到 2-3 年的全职经验,突出你的项目经验。

我的 LinkedIn 个人资料推荐:

  • 在“关于我”的陈述中加入一些有意义的内容。如果你申请的是一个特定类型的职位,确保这份声明突出了该职位所需的技能。
  • 社会证明很重要。请别人认可你的技能或推荐你
  • LinkedIn 让你提供比简历更多的辅助内容。加入志愿者工作、有趣的项目或你感兴趣的事情。
  • 加入社区或在这个平台上发布与工作相关的内容会向雇主暗示你关心你的职业关系网。

第四步:仔细考虑你的沟通渠道

你如何让自己进入一家公司的视野可能是你获得面试机会的最重要因素。由一个活跃的员工推荐会大大增加你的机会。Jobvite 和卧底招聘人员的一项民意调查显示,只有约 7%的候选人通过推荐申请,但约 40%的雇员来自推荐。如果你不考虑这种方法,你会让自己处于很大的劣势。

浏览你的社交网络还有其他积极的好处。你可能在机会发布之前就听说了,而且有积极的激励措施在为你工作。许多公司提供推荐奖金,如果面试官与你的推荐人关系良好,他们可能会表现出偏好。

大量资料表明,70-85%的求职者实际上是通过某种形式的网络找到工作的。与某人至少有一个相似度会大有帮助。联系你的校友网络、LinkedIn 网络,甚至你的社交网络。如果你朋友的父母在你感兴趣的行业工作,问问他/她的想法也无妨。当你在找工作的时候,友好地问问题不会有坏处。

其他人可以从你找到工作中受益。大多数招聘人员的薪酬是基于他们将候选人安置到角色中的能力。接触技术招聘公司可能是外包你一些工作的好方法。他们可以帮助你发现机会,让你很好地理解当前的市场趋势。

公司也有招聘团队,他们通过将销售线索转化为工作来获得报酬。在申请的时候,或者在申请之前,我建议联系公司的技术招聘人员,建立关系。更多的是关于你应该如何与这些人交流。

总之,你应该列出一个你想联系的人的名单。这份名单应该包括你的人际网络(学校、LinkedIn 和社交网络)中的人,或者有动机在组织中提拔你的招聘人员。

第五步:做作业

在你接近一家公司之前,尽可能多的了解它是很重要的。很少有什么事情比一个对面试的公司没有基本了解的应聘者更让我反感的了。我建议在向您在上一步中确定的联系人发送邮件之前,彻底调查一家公司。

你应该了解以下与公司有关的事情:

  • 该行业
  • 业务线和产品
  • 竞争对手
  • 高层领导
  • 价值观和使命宣言
  • 历史
  • 规模和增长轨迹
  • 最近有什么新闻吗

您可以在以下几个地方找到此信息:

与你感兴趣的职位上的人进行信息面试。同样,我会通过你的关系网联系这些人。这是询问必要技能的好机会,他们希望自己已经学会的东西,以及他们是如何找到工作的。我不建议询问这个人所在公司的工作或机会。如果他们认为你是一个好的候选人,他们会提出空缺职位,并主动推荐你。

信息面试技巧:

  • 在他们附近见面喝咖啡
  • 将会议时间设定为 30 分钟(尊重他们的时间)
  • 策划一些好的问题,这样你就有话题可聊了。我喜欢问:

他们生活中的一天是怎样的?

他们公司的文化是什么样的?

他们希望在面试时知道什么?

他们喜欢在这个领域工作吗?

他们会给想进入这个领域的人什么建议?

第二天通过电子邮件感谢他们。根据您的对话进行定制。这是记住你们谈论的内容并留下持久印象的好方法。

第六步:伸出手,仔细选择你的信息

当你联系招聘人员时,传达一些信息是很重要的:

  1. 为什么你对这个职位、市场和/或公司感兴趣。一定要为每个公司定制这个。
  2. 引起你注意的关于公司的最新消息。
  3. 你能为公司提供的价值。请提供一些背景资料,说明你在这个职位上取得成功所需的技能。
  4. 你的简历。

在这种情况下,招聘人员可能会要求你申请这个职位。如果你给他们留下了印象,他们会给你的申请打上标记。

在他们回应后,一定要感谢他们。当候选人付出额外的努力来继续对话时,对我来说是有意义的。即使招聘人员没有决定给你面试机会,他们也可能会把你的简历发给他们关系网中的某个人。

如果你在一周内没有收到招聘人员的回复,仍然申请这个职位并提交你的简历。申请之后再跟进也无妨。

最后的想法

我知道这个过程看起来很艰难,相信我,我也经历过。然而,我可以想象你在之前的工作中已经采取了类似的措施。希望这篇文章能给你一些如何提高你在公司和招聘人员眼中的价值的建议。如果您遵循这一流程并继续发展您的技能,我相信您将能够开始并保持成功的数据科学职业生涯!

如何更全面地了解模型的准确性

原文:https://towardsdatascience.com/how-to-get-a-fuller-picture-of-a-models-accuracy-e3e6f45becb2?source=collection_archive---------21-----------------------

交叉验证的案例以及如何实现一个版本(k-fold)

使用单个训练测试分割给你一个机器学习模型或算法的性能的单个快照。这就像根据一场比赛来评价一支足球队(美国队或其他球队)。如果你真的想知道一个团队总体表现如何,你需要的不仅仅是这张快照。同样,我们不应该在一次随机分割中评估我们的算法。幸运的是,有更好的方法。我给你带来 k 倍交叉验证。

当火车测试分裂使你误入歧途

今天,我使用的是 Gareth James 的经典广告数据集,其中有 200 条电视、广播和报纸广告支出的记录以及相应的销售数据。

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

我创建了一个线性回归模型来预测基于 TV*Radio 的销售,并在测试数据集上进行验证:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as npdf = pd.read_csv(‘data/advertising.csv’) # import data
df[‘TVxradio’] = df[‘TV’] * df[‘radio’] # create featurex = np.array(df[‘TVxradio’]).reshape(-1, 1)
y = np.array(df[‘sales’])x_train, x_test, y_train, y_test = train_test_split(
     x1, y1, test_size=0.3, random_state=54546)model = LinearRegression()
model.fit(x_train, y_train)
print(f’model accuracy on test set: {model.score(x_test, y_test)}’)

结果:

model accuracy on test set: 0.9721866564067523

厉害!!模特太棒了!

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

Kevin Jarrett CC 2.0

或者是?

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

Image by htuuli from Pixabay

这个分数不能向你展示模型的真正预测能力。在这种情况下,你是在根据一场比赛来评判足球队。你不知道这是不是一种‘幸运’train_test_split。在这种情况下,是的。我作弊了。选择新的random_state (71464)使我们的模型精度下降到 0.80。

有一种更好的方法来优化模型,而不是随心所欲。一种提供对分数分布的洞察并降低过度适应测试数据集的风险的方法。

为什么/何时使用 k-fold 交叉验证

  • **在较小的数据集上。**如果你有一个庞大的数据集,你可以将它分成三个有代表性的部分——训练、测试和最终评估。不幸的是,你并不总是有这种奢侈;您的数据集可能不够大,无法分成三个有代表性的部分。这就是交叉验证的用武之地。K-fold 交叉验证可以防止过度拟合测试数据,而不会进一步减小训练数据集的大小。
  • 让你的模型得到一个不那么偏颇(理解:乐观)的评价。 K-fold 交叉验证报告模型在来自训练集的几个(K)样本上的性能。这使您能够洞察模型中可能看到的精度分布。
  • 当你有足够的计算资源/时间。K-fold 交叉验证比将数据分割成三部分的计算量更大。它重新拟合模型,并在每次迭代中测试 k 次,而不是一次。因此,对于运行时/计算成本不显著的小数据集,它更有价值,并且额外的分区会显著减少训练数据集。

了解 k 倍交叉验证

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

Image from Scikit-learn Developers

当您在交叉验证分割策略(cv)设置为整数的情况下运行cross_val_score时,它会执行以下操作:

  1. 将数据集随机分割成 k 个“折叠”(又名。较小的数据集)
  2. 留出一个切片,并在其他切片上训练模型。
  3. 在保存的集合上验证模型并记录分数。
  4. 重复第二步和第三步,每次折叠一次。

然后,您可以使用这些分数来获得模型准确性的平均值、标准偏差和 95%置信区间的估计值。

如何使用 k 倍交叉验证

scikit-learn 的cross_val_score的基本用途包括以下参数:

  • 估计值-用于拟合数据的模型
  • x-要拟合的数据
  • y —目标变量(如果使用监督学习)[可选]
  • cv-您想要的折叠次数[默认为三次]

注意:没有一个“正确”的折叠次数。您需要考虑每个文件夹中数据集的大小。理想情况下,折叠的大小应该相等,这在非常小的数据集中尤其重要,因此可以考虑选择一个 k 值来均匀划分数据集。斯坦福大学的 Hastie 和 Tibshirani 指出 k=5 或 k=10 是典型的 k 值。

还要注意:cross_val_score不会自动洗牌。如果你想多次运行它(类似于引导),确保包含一个 shuffle。

一如既往,查看文档用户指南了解更多信息。

例 1:单一回归

回到广告数据集,同样的单因素线性回归模型(电视花费*电台花费),只需要几个变化就可以实现 k 倍cross_val_score

# import necessary python modules and classes
**from sklearn.model_selection import cross_val_score**
from sklearn.linear_model import LinearRegression # your model here
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np# import data
df = pd.read_csv('data/advertising.csv')# engineer feature of interest
df['TVxradio'] = df['TV'] * df['radio']# slice data
x = np.array(df['TVxradio']).reshape(-1, 1)
y = np.array(df['sales'])# train-test split
x_train, x_test, y_train, y_test = train_test_split(
     x, y, random_state=0)# select model
model = LinearRegression()**# k-fold cross validation
scores = cross_val_score(model, x_train, y_train, cv=10)
print(scores)
print(
     f"95% CI Accuracy: "
     f"{round(scores.mean(), 2)} "
     f"(+/- {round(scores.std() * 2, 2)})"
)**# test model on test set
model.fit(x_train, y_train)
print(f'model accuracy on test set: {model.score(x_test, y_test)}')

结果:

[0.87595678, 0.97943611, 0.8740311, 0.93150634, 0.94679878, 0.89219105, 0.91211392, 0.97882041, 0.8539725, 0.95655506]95% CI Accuracy: 0.92 (+/- 0.09)model accuracy on test set: 0.9041657637532045

在这里,你得到了比单一快照更多的东西:重复试验的精确度的平均值和标准偏差。在这种情况下,我打印了大约 95%的置信区间。这才是值得兴奋的。

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

Eric Danley via Flickr CC 2.0

示例 2:使用预处理

当使用预处理时,交叉验证需要多一点额外的代码,但是仍然是完全可行的,并且为了更好地理解模型的准确性是值得的。

通常,当使用预处理时,您不应该包含您的验证数据,这样这些数据在测试阶段对模型来说是“新的”,而不是通过预处理泄露进来。为了在使用 k-fold 交叉验证时避免这种情况,您需要使用一个Pipeline将这些数据转换传递给第一个参数中的cross_val_score。尽管这增加了代码的复杂性,但它相当简单,并且对于生成模型性能的有效评估是必不可少的。

在这个例子中,我使用了同样的广告数据集和多元回归。这些特征包括电视消费、广播消费、报纸消费和电视消费*广播消费,并且该模型预测产品销售。随着管道进入cross_val_score,该功能将首先将数据分成训练和验证,然后按照make_pipeline指示的顺序使用转换器转换训练数据集,在这种情况下,在拟合到LinearRegression()之前使用StandardScaler()

# import necessary python modules and classes
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression # your model here
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn import preprocessing
import pandas as pd
import numpy as np# import data
df = pd.read_csv('data/advertising.csv')# engineer additional feature of interest
df['TVxradio'] = df['TV'] * df['radio']# slice data
X = np.array(df[['TV', 'radio', 'newspaper', 'TVxradio']])
y = np.array(df['sales'])# train-test split
X_train, X_test, y_train, y_test = train_test_split(
     X, y, random_state=5)**# setup pipeline with preprocessing transformers
lr = make_pipeline(preprocessing.StandardScaler(),
                   LinearRegression())**# k-fold cross validation
scores = cross_val_score(lr, X_train, y_train, cv=10)
print(scores)
print(
     f"95% CI Accuracy: "
     f"{round(scores.mean(), 2)} "
     f"(+/- {round(scores.std() * 2, 2)})"
)# test model on test set
model = LinearRegression().fit(X_train, y_train)
print(f'model accuracy on test set: {model.score(X_test, y_test)}')

结果:

[0.9859427, 0.97482388, 0.97914505, 0.82607816, 0.97520017, 0.98505002, 0.96018605, 0.973842, 0.984283, 0.8727062]95% CI Accuracy: 0.95 (+/- 0.11)model accuracy on test set: 0.9715483746381636

您在这里可以看到,随着这些特征的增加,平均模型精度增加,并且 95%的精度置信区间也变宽了。与我上面的更简单的模型相比,这个模型的准确性随着训练数据集的变化而变化。

期末笔记

K-fold 交叉验证是一种很好的方式,通过提供更广泛的评估,而不是单一的高度调整的试验,来提供对团队真实质量和机器学习模型准确性的洞察。它允许你最大限度地利用你的训练集,同时仍然避免由于过度适应测试集而导致的偏差。

请随意查看这个博客的 GitHub 库

有关更多信息:

[## k-fold 交叉验证的简单介绍

交叉验证是一种统计方法,用于评估机器学习模型的技能。它通常用于…

machinelearningmastery.com](https://machinelearningmastery.com/k-fold-cross-validation/)

如何找到一份数据科学家的工作——7 个可行的建议

原文:https://towardsdatascience.com/how-to-get-a-job-as-a-data-scientist-7-actionable-tips-c8ec166e56bf?source=collection_archive---------10-----------------------

想知道如何获得数据科学工作?如果你想搬家,这里有 7 个可行的建议需要考虑。

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

对许多人来说,找工作可能是一项具有挑战性的任务,但我们都需要经历这一过程,才能找到工作,建立自己的事业。目前就业市场上最理想的工作有很大一部分是与分析相关的工作,比如数据科学家、数据工程师,甚至是数据分析师。

随着像数据科学家这样的工作变得越来越受欢迎,它们的竞争也会越来越激烈。竞争激烈的就业市场意味着最有技能的人往往是最容易被雇佣的。雇主们正在寻找能够解决他们面临的任何问题的数据科学家。那么,一个人如何才能找到一份数据科学家的工作呢?

当谈到获得数据科学家的工作时,许多人不知道从哪里开始以及如何获得数据科学的工作。作为一名数据科学家,成就伟大事业的道路并不复杂。

如何获得数据科学工作的 7 个可行建议

当然,在你申请任何数据科学工作之前,你需要雇主在数据科学家候选人身上寻找的正确技能。这些可行的建议不仅能巩固你的基础,还能帮助你获得正确的技能。这些技巧可以帮助你获得第一份数据科学工作。这 7 个可行步骤包括基本技能以及软技能、教育资源和其他决定如何获得数据科学家工作的因素。在这里,我们试图提供非常具体的步骤,让你在数据科学领域找到理想的工作。

1.知道最重要的技能

数据科学家是程序员、统计学家、软件工程师以及其他更多人的混合体。数据科学家需要能够从头到尾运行一个项目。因此,想要获得数据科学家工作的人需要具备多种技能才能胜任工作。

拥有一套强大的技能是雇主可以好好利用的。了解数据科学和分析中最重要的技能是任何未来的数据科学家应该做的第一件事。成为数据科学家的一些最重要的技能是:

  • 精通 Python
  • 精通 SQL 的经验
  • R 的有效使用
  • 从事统计学
  • 了解机器学习

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

了解这些技能并能够有效地使用它们是获得数据科学家工作的核心要素。如果你觉得自己还不能胜任使用上述任何一种技能,那么试着专注于提高技能,这也是我们的下一个技巧。

2.不断学习

在数据科学领域,为了在你的领域保持领先,你必须掌握技能发展。数据科学和分析领域总是在不断适应,问题每次都在变化。因此,提升和磨练你的技能对于打造数据科学家的职业生涯至关重要。

通过在教育资源中的实践来建立真正的行业知识可以有很长的路要走。拥有强大的分析技术基础是可以在自己家里舒适地建立起来的。

利用教育资源

如果你想得到一份数据科学家的工作,了解基础知识是不够的。要在分析领域取得成功,需要深入的知识和解决问题的技能。利用在线练习、训练营和模块等教育资源对掌握分析技能大有帮助。

尝试练习,阅读案例研究,做类似于那些来自 Strata Scratch 的教程,可以让你在游戏中保持领先。持续学习对于跟上分析领域的步伐是必要的,所以如果你想得到一份数据科学家的工作,就要花时间继续学习。

3.增强你的沟通技巧

获得一份数据科学家的工作不仅需要强大的分析工具,沟通等软技能也很重要。能够描述你将如何解决一个问题,以及你为什么选择那条路线来解决问题,是成为一名数据科学家的关键部分。

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

数据科学家需要能够交流项目的每一步及其背后的推理。当你解决一个问题或处理一个项目时,试着记下你的想法,这样你就可以在将来学会向别人解释每一步。

4.熟能生巧

作为一名数据科学家,找到一份完美的工作需要时间。每个成功的数据科学家背后,都有大量的求职申请和数次面试。事实是,获得一份数据科学家的工作需要时间和努力。

保持乐观,从你没有得到的数据科学职位中学习,从不如你希望的顺利的面试中学习。尽可能多地练习模拟面试。最终,熟能生巧,你会得到一份数据科学家的工作。

5.网络

获得一份数据科学家的工作不仅是拥有最强的技能,也是为了结识业内人士,他们可能会帮助你找到一份出色的数据科学工作。通过与其他数据科学家甚至招聘人员建立关系,你可以获得更好的结果。利用 LinkedIn 这样的社交网站,参加行业会议,对获得你梦想中的数据科学家职位大有帮助。所以,开始利用你网络中的关系吧。

6.建立投资组合

雇主会看到成百上千的简历,声称该候选人有能力做他们需要的事情,但并不是每个求职者都有很多表现。说你能做某事是很好的,但是表现出你能做并且做得更多会更好。

好的作品集对找数据科学工作非常重要。你应该在你的 数据科学投资组合 中包含什么,实际上取决于你在寻找什么类型的数据科学角色。

建立一个过去工作和项目想法的文件夹向雇主展示你有能力、有能力并且有所作为。以多样化和有趣的投资组合脱颖而出可能是你申请的决定性部分,这将使你获得一份数据科学家的工作。

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

额外收获:你在业余时间所做的所有学习对建立投资组合大有帮助。保存你在 Strata Scratch 上完成的问题和练习的最佳解决方案,以充实你的文件夹。

7.找一个导师

除了常规的人际交往,你可以遵循的获得数据科学家工作的最佳建议之一是找到一位导师。导师可以指导你完成项目和教育资源,甚至可以帮助你弄清楚雇主到底在数据科学家候选人身上寻找什么。

结论

在你找到一份工作之前,你可能会申请数百份数据科学工作。所以我们建议你耐心点,多做准备。你不仅要学习重要的概念,还要记住你将与不同的人和情况打交道。所以你必须准备好回答在不同的工作环境中你会如何表现的问题。

如何在数据科学领域找到工作

原文:https://towardsdatascience.com/how-to-get-a-job-in-data-science-cf6f3a87d841?source=collection_archive---------13-----------------------

赢得数据科学面试的技巧

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

Image credit: fusionanalyticsworld.com

数据科学领域有许多流行词汇,但总体而言,关于面试过程的重要资源很少。鉴于此,我想分享这篇文章,因为我真的对数据科学面试准备的需求产生了共鸣,尤其是对大学生而言。这绝对是一个领域,我希望在进入这个行业之前,我在学校期间有更多的信息。我用粗体突出了我认为每个部分中的一些关键部分,因为它们与我在许多公司的大部分真实面试非常相关。

介绍

从事分析工作的数据科学家应该与产品团队紧密合作,以推动产品向前发展。扮演这样一个角色通常需要几项基本技能,这些技能通常会在各种公司的面试中得到广泛测试。本帖将是面试流程的介绍,重点是各知名公司的资源和样题。

一般提示

很重要的一点是,要很好地理解手头具体职位的角色和职责,以及你可能从事的产品。这是因为面试官可能会问你一些基于他们已经完成或正在进行的工作和项目的问题。因此,你可以问自己以下类型的问题:

  • 公司是什么样的企业,处于什么阶段?根据对这些问题的回答,不同类型的指标,以及分析数据的方式将会很重要。Alistair Croll 和 Benjamin Yoskovitz 的书《精益分析》是这方面的一个很好的资源。
  • 该产品如何融入公司产品套件的更广泛的生态系统?我喜欢和不喜欢该产品的哪些方面?产品应该有哪些新功能?这些问题通常也会在产品管理面试中出现,因为那里的工作职能主要是考虑产品问题。这里有一些有用的资源,比如 PM 面试和产品经理面试。
  • **如果我正在开发这个产品,我应该衡量哪些关键绩效指标(KPI),即基本的业务指标?**哪些因素和变量会影响这些指标,它们是如何影响这些指标的?每个公司都有自己的衡量标准,但基于商业模式和公司创收方式,这些标准有很多重叠之处。基于商业模式,YC 有一个很棒的视频覆盖指标:【https://www.startupschool.org/videos/66
  • 产品如何赚钱?这里的关键是考虑推动核心业务的产品和流程中的各种杠杆。Keith Rabois 使用了术语“商业方程式”,这是一个有用的概念。他的用法的一个例子是:http://growth . eladgil . com/book/chapter-8-financing-and-evaluation/going-public-why-do-an-IPO-an-interview-with-Keith-rabois-part-2/

在面试前做调查会表明你对手头的工作和产品感兴趣。此外,你或许可以开始想象你可能会被问到什么类型的问题——在脸书这样的公司,对话可能会集中在用户、社交图和内容上,而在优步这样的公司,对话可能会围绕乘客、拼车算法和定价。最后,重要的是不要忽视一般的提示,包括:润色你的简历,拥有一个项目组合,等等。

产品感

这类面试问题的主要功能是更好地理解如何衡量和改进产品。目标是评估你对产品决策和相关数据的看法。它们可以是开放式的(更常见,询问要跟踪什么指标以及如何优化它们),也可以是更详细和技术性的(关于您可能跟踪什么类型的数据以及这些数据可能如何影响指标)。

示例问题:

  • 假设你是第一个使用 Facebook Messenger 的人。你会跟踪什么 KPI?您将如何衡量和改进这些 KPI?
  • 假设你在 Youtube,有两个新想法要实现来增加收入。您将如何决定实施哪一个,为什么?

概率与统计

这些是经过测试以确保数字素养的核心主题,对于数据科学角色的成功至关重要。通常,概率主题将限于你可能在统计学 101 课程中找到的东西:基本分布,条件概率,以及像中心定理和大数定律这样的概念。对于统计主题,像假设检验、统计显著性和其他与统计推断相关的主题是常见的,因为 A/B 检验是许多公司实验的核心部分。有许多这类主题的教科书(例如,谢尔登·罗斯的《概率入门教程》)以及涵盖这一内容的在线课程。

这些问题的技术细节水平可能因角色类型而异。例如,如果这个角色专门在一个实验团队中处理 A/B 测试和大规模推理问题,那么你在这个类别中收到的问题可能会比在纯产品方面工作的人涉及更多的数学。这种数学将涉及分布、统计测试、优化等背后的技术细节。另一方面,许多公司也会问用通俗的语言解释这些技术概念的问题。这是为了测试你对更复杂主题的理解和沟通能力,这对他们评估很有用,因为作为一名数据科学家,你将经常与其他部门的非技术人员互动

示例问题:

  • 掷两个骰子。假设两者的最大值是 4,那么总和超过 6 的概率是多少?
  • 向外行解释什么是 p 值和置信区间。

编码和 SQL

尽管数据科学家的主要角色不同于软件工程,但数据科学家应该对编码和计算机科学有相当的熟练程度。最常用的语言是 Python 和 r。此外,SQL 问题在面试中也很常见,因为它们更简单,而且大多数数据科学职位都会涉及查询大型数据集。

涵盖的常见算法和数据结构将涉及 and 数组、流、图和矩阵,因为它们经常用于产品的实际应用中。适用于软件工程的相同原则也适用于此:总是从强力解决方案开始,然后慢慢优化,重点关注最差的运行时和内存使用情况。LeetCode 和破解编码面试都是练习编码问题的绝佳资源。

与编码问题类似,SQL 问题通常具有真实公司中常见的结构,因为它们对收集用户、交易等特定类型的数据感兴趣。例如,优步和 Lyft 可能会问关于用户最后一次乘车的时间、最繁忙的时间或其他关于拼车体验的问题,而脸书可能会问关于用户和友谊图的问题。

示例问题:

  • 给定一个包含一段时间内销售的产品的表:date,product_id,sales_amount,按时间顺序计算每种产品在一段时间内的累计总和。
  • 给定一个整数数组,找出第一个缺失的正整数。例如,如果给定[0,2,1]返回 3,如果给定[-1,4,1,3]返回 2。

最后的想法

虽然这篇文章并没有完全涉及整个过程的所有部分(例如,没有简历和人际关系网方面),但我认为它从实际面试中需要注意的方面对整个过程进行了很好的概述。如果你对更多的面试准备资料感兴趣,一定要去看看:https://datascienceprep.com/

如何从预测分析投资中获得回报:公司应该知道什么

原文:https://towardsdatascience.com/how-to-get-a-return-on-your-predictive-analytics-investment-what-companies-should-know-74207fced2ba?source=collection_archive---------23-----------------------

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

由于预测分析,公司可以挖掘当前和历史数据,并预测未来事件,比仅凭经验和有根据的猜测更有把握。但是,预测分析工具并不是企业的神奇解决方案。

将预测分析应用于业务需求对于获得最佳结果至关重要。在使用预测分析时,你可以做以下五件事来最大化投资回报(ROI)。

1.使用预测分析减少生产停工时间

停机时间是制造工厂的一个主要问题,主要是因为停机时间的长短和生产的产品类型决定了停机时间的成本。

例如,统计数据显示,汽车工厂的一次停电每分钟可能会花费 22,000 美元。预测分析有助于减少计划外停机,从而提高公司的投资回报率。

在一个案例研究中,一家开发和制造营养成分的生物技术公司发现设备上的管道堵塞降低了生产线的速度,导致需要更频繁地延迟清洗设备。但是,企业无法确定问题的根本原因

在该公司查看其季度审查并发现停机时间减少了 3.6%后,它使用了预测分析来洞察未来的停机时间,并允许业务主动出击。该解决方案将停机时间减少了 83%,并将生产能力提高了 5.1%。

2.应用预测分析减少员工流动

工作研究所(Work Institute)2018 年的一项研究发现,员工流动成本通常占员工基本工资的 33% 。这意味着找出员工离职的原因,并努力解决这个问题,可以为每一个决定留在公司的员工节省数千美元。

越来越多的公司投资预测分析工具,以评估员工对工作的真实感受,以及是否存在警告信号,表明他们可能会沮丧到辞职。

其中一些工具还可以帮助人力资源代表将事件联系起来。

例如,如果一个人的平均生产率下降,并且在过去的三个月里他们开始迟到,这些事情都可能表明对工作不满意。但是,如果一家公司投资于人力资源预测分析软件,它可以通过增加员工留下来努力工作的可能性来提高投资回报率。

3.使用电话营销来参与分析软件提出的销售线索建议

许多预测分析软件选项可以帮助销售专业人员缩小销售线索列表,找到最合格的销售线索,而不是在不太可能采取积极行动的人身上花费太多时间。

也就是说,即使预测分析依赖于令人印象深刻的计算能力,人的因素仍然需要成为销售组合的一部分。

因此,提高投资回报的一个好方法是,公司使用预测分析来寻找最佳线索,然后让电话销售专业人员培育线索来帮助推动销售。内部或外部电话营销团队对业务有益,因为他们可以展示对客户需求的个性化理解,然后以吸引这些特征的方式讨论产品或服务。

这个例子表明,尽管预测分析解决方案变得越来越先进,但它们不会——也不应该——取代擅长工作和了解客户的人。

4.利用预测分析发现交叉销售和追加销售机会

当客户收到与他们已经购买或将要购买的产品相关的推荐时,就会发生交叉销售。许多公司通过在网站上展示各种“你可能也会喜欢……”的产品来做到这一点,只要有人将一件商品添加到虚拟购物篮中。

然后,当人们被说服花更多的钱购买类似但更贵的产品时,促销就发生了,比如同意更好的互联网套餐或更大的饮料配快餐套餐。

预测分析允许品牌通过使用更好的定位和确保最高价值的客户收到最有吸引力的报价来提高他们的投资回报率。第一田纳西银行尝试了这一策略,并实现了总体投资回报率 600%的增长,因为预测分析允许品牌更有效地分配其营销资源。

此外,由于向特定受众群体发送了最相关的报价,营销回复率提高了 3.1%。这种方法也帮助银行削减了印刷和邮寄成本。

如果人们被不感兴趣的优惠轰炸,交叉销售或追加销售都不会有效。预测分析有助于品牌在吸引客户时更加精准。

5.依靠预测分析进行更好的内容营销

正如没有通用的营销方法一样,公司在选择何时发布何种内容时,必须足够具体。合适的内容可以将品牌定位为思想领袖,让客户渴望听到他们要说的话。

预测分析可以帮助公司发现最适合不同受众群体的内容。然后,这些企业可以做出更明智的决策,决定如何使用内容预算来获得最佳投资回报。

预测分析还提供关于内容时机的指导。例如,历史统计数据显示,一个品牌的社交媒体页面在下午三点左右最活跃,这是内容发布的理想时间。或者,数据可能表明,人们通常在下载一本电子书之前至少会访问一个网站三次。

这些细节有助于内容创作提高投资回报率,并限制品牌在不想要或不必要的材料上浪费金钱的可能性。

预测分析可以帮助解决业务问题

你不应该将预测分析软件视为可以立即解决公司面临的所有问题的东西。

但是,正如这个列表所示,战略性地应用预测分析的力量可以提高投资回报率,帮助企业克服挑战。

图像由 Rawpixel

如何从一个不平衡的 RNG 得到一个无偏的

原文:https://towardsdatascience.com/how-to-get-an-unbiased-rng-from-an-unbalanced-one-dbb44850e5f7?source=collection_archive---------13-----------------------

Python 中的一个随机抽取器,适用于从倾斜的硬币到莎士比亚

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

Stars, quasars, and other celestial objects generate photons in a random way that can be used to generate random numbers

“当然,任何考虑用算术方法产生随机数的人都是有罪的.”
—约翰·冯·诺依曼

有可能从一枚不公平的硬币中获得公平的投掷吗?或者,一般来说,是否有可能从具有非均匀分布输出的源中提取随机性?还是从任何一种文字中?也就是说,我们怎样才能平衡不平衡呢?

假设我们有一枚硬币正面朝上的概率是 30%。你能使用这样一枚硬币(以任何你想要的方式,但只有这枚硬币)并期望总是有 50%的机会得到正面或反面吗?

这里是一个简单的 Python lambda 函数,它定义了不偏不倚的硬币的投掷:

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

头部编码为“0”,尾部编码为“1”,所以 flip_a_biased_coin() 实际上是一个非平衡二进制随机生成器。

现在让我们定义函数 flip_the_coin() ,该函数必须使用 flip_a_biased_coin() 才能创建一个均匀分布的二进制生成器。

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

在求职面试中,我见过很多关于这个问题的答案,包括基于二叉树或哈希表的怪异策略,以及过度设计的决策算法。

但是解决方案更简单。你要做的就是玩…

可能性

flip_a_biased_coin() 得到连续两个“0”的概率是多少?我们把这个概率命名为 p

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

连续得到两个“1”的概率是多少?

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

好吧…这些概率好像没啥用。但是得到一个“01”或者“10”序列的概率有多大呢?

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

最后一丝平衡!

flip_a_biased_coin() 输出一个“01”序列或“10”序列,概率相同:21%。

为了利用这一特性,每个“01”序列都被编码为“0 ”,或者换句话说,每次抛两次硬币,先投正面,然后投反面,结果是正面。反之亦然,“10”序列被编码为“1 ”,也就是说,每次抛两次硬币,一次是正面,一次是反面。

可以简化说,每两次投掷,如果结果不同,返回第一次;否则继续抛硬币两次。

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

这是一个完美平衡的随机发生器!

您可以粗略地检查这种发电机的输出:

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

Number of 0s: 495 Number of 1s: 505

另一个有趣的属性

你可以用这种方法作为随机抽取器来抽取任意序列的比特!

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

例如,让我们用二进制编码莎士比亚戏剧《罗密欧与朱丽叶》第二幕第二场最著名的部分:

噢,罗密欧,罗密欧!你为什么是罗密欧?否认你的父亲,拒绝你的名字。
或者,如果你不愿意,只要你发誓做我的爱人,我就不再是凯普莱特家族的人了。

100111111000001010010111111110111101111011001000010011011111111110111101110111001111001110111001111111001111111111111000111111101111111111111111111111111111111100……共 1040 位

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

我们可以通过使用为 flip_the_coin() 函数所采用的相同策略,以诗意的方式提取具有均匀分布的比特序列。

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

对于每一对比特,如果比特不同,则打印第一个比特;否则不会打印任何内容。这就是结果:

100010101111110010110000000010010010001100100111100000111001010111111010000101110110101000100100010001011001000001010011101101110100001000100110000001110001110011001100100100001100111001110110101011010011111110010100101100110101001011100100101111011

这个序列是从原始的 1040 位中提取出来的,包含 130 个“0”和 119 个“1”,这意味着有 52%的概率得到“0”(或头部),有 48%的概率得到“1”(或尾部)。

🎲你能找到一个装骰子的策略吗?🎲

对于这种简单的算法来说,这确实很好,但是您可以注意到,该算法丢弃了 1040 位中的 791 位,导致了大约 76%的拒绝率…非常糟糕!

还能改进吗?

熵的浪费

flip_the_coin() 和*debias _ Romeo _ and _ Juliet()*使用的原始策略在产生一个比特之前丢弃了许多比特。

如前所述,丢弃一个“00”序列(或两个头)的概率是*,丢弃一个“11”序列(或两个尾)的概率是***【1-p】**。这意味着期望拒绝率 rej§

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

这意味着

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

换句话说,考虑到硬币已经平衡的最佳情况,一半的硬币投掷将被丢弃。

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

graph as a function of p (x axis) and rej (y axis)

实际上,我们浪费了大量可以从序列中提取的“随机性”,使我们的输出变得更短,或者需要一个必须生成很长比特序列的源!

因此,这个简单的策略似乎能完成任务,但远非最佳。该算法没有以任何方式使用其浪费的“00”和“11”序列。

让我们想办法使用它们吧!

简单有效的方法

主要概念是重新使用“00”和“11”序列,并在进一步的提取循环中将它们转换成新的“0”和“1”序列。

新策略将通过使用两个不同的来源递归地回收“浪费的随机性”:序列“丢弃/非丢弃”(即 discard_seq )和丢弃对的值(“00”编码为“0”,“11”编码为“1”,即 new_seq )。直觉上,它依赖于这样一个事实,即给定已经生成的序列,这两个源仍然是可交换的比特序列,因此有资格进行另一轮提取。

让我们看一个输入“10011011”的例子:

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

Step 1 with initial input

根据初始输入,我们计算 3 个序列:

  • discard_seq :如果初始输入没有被 flip_coin() 丢弃,则每一位为“1”,否则为“0”。这个序列将被相同的策略递归地重复使用。
  • new_seq :将“00”映射成“0”,将“11”映射成“1”。这个序列将被相同的策略递归地重复使用。
  • 简单的抛硬币*:这是我们在文章中使用的第一个策略。这将不会被重复使用,是最终输出的一部分。*

图像中使用的颜色将被重新用作后续步骤的参考(相同的颜色,相同的来源)。

现在我们继续第 2 步,使用 discard_seq 作为输入:

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

Step 2 with discard_seq from Step 1 as input

这里我们还有 3 个新的序列,它们具有与上一步完全相同的属性。请注意,当没有产生输出时,会出现一个红色的 X

现在我们以同样的方式将此步骤的 discard_seq 用于下一步(步骤 2.1):

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

Step 2.1 with discard_seq from Step 2 as input

如上所述,该算法创建了 3 个新序列,其中 2 个被递归地重复使用,然后以固定顺序相互连接。当每个计算步骤都没有输出时,该过程结束。

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

In one image, Step 2.1.1 with discard_seq from Step 2.1, Step 2.2 with new_seq from Step 2 and Step 3 with new_seq from Step 1

从步骤 2.1 我们可以只使用一个“1”,我们不能从中提取随机性,因为没有熵了,对于步骤 2.2 和 3 也是一样。

这里是每一步算法的递归可视化,以便让您更好地了解该过程:

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

A visual diagram with the step executed with input “10011011”

最终的结果是“10110”,而简单的 flip_coin() 在相同的输入下只会产生“101”!现在让我们来看一个快速的 Python 实现,名为 better_flip_coin() 函数:

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

您会注意到,如果一个序列的位数为奇数,最后一位将被丢弃。该函数返回一个列表并直接对列表进行操作:一个用于经典的 flip_coin() ,一个用于 new_seq ,一个用于 discard_seq

好了,现在我们已经完成了作业,我们可以使用所学的知识并将其应用于…

第二幕,第二场…算法反击了

这里是相同的函数,但是应用于一个字符串位序列(注意 better_flip_coin()生成的是字符串位列表,而不是位列表):

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

结果非常有希望:

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

Number of extracts bits: 893 Number of 0s: 450 Number of 1s: 443

这意味着我们刚刚丢弃了 147 位,这意味着丢弃率仅为 15%!甚至分布似乎更好,得到“0”(头)的概率为 50.39% ,得到“1”(尾)的概率为 49.61% !!!

现在让我们检查每对比特(或每对掷硬币)由两种算法产生的比特的平均值**§**

我们已经发现 flip_coin() 的拒绝率是
rej§= 1–2p(1-p),因此平均
**ā§**只是它的“互补”:

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

为了计算 better_flip_coin() 的平均值ā’【p】,需要进行非平凡的分析,但是可以证明

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

我不打算在这里写演示,因为它很长。

注意,描述由 better_flip_coin() 产生的平均比特的函数等于熵函数的定义!

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

two graphs as function of p (x axis) and the average of bits produced by each algorithm (y axis)

这意味着 better_flip_coin() 函数本质上是你能得到的最好的!如果源已经具有均匀分布,则该算法将为来自源的每个被处理的比特产生 1 个比特。

感谢你阅读这篇文章(或者至少感谢你来到这里)。
让我知道你对这篇文章的看法,以及是否有人可以将 flip_coin() 策略应用到一个已装载的骰子上!

如何擅长行为面试

原文:https://towardsdatascience.com/how-to-get-good-at-behavioral-interviews-625654b1e257?source=collection_archive---------24-----------------------

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

行为面试技巧远比大多数人意识到的重要。

部分原因是它们随处可见:实际上每个面试都是行为性的,至少在某种程度上是这样。

但这也是因为行为面试通常是公司招聘过程的第一步。不擅长行为面试有一种方法可以让你当场毙命——甚至在你有机会展示你花了很长时间培养的那些闪亮的技术技能之前。

因此,擅长行为面试是必须的,然而我已经数不清有多少次听到人们说“我就是不擅长行为面试”,好像不擅长技术面试是一种无法治愈的医学状况。

幸运的是,如果说我从与数百名目前和未来的数据科学家在sharpes minds的合作中学到了什么,那就是行为面试绝对可以被征服。

在这篇文章中,我想解释你如何做到这一点。

你最大的优点和缺点是什么?

我明白了,准备面试最有效的方法是真正擅长回答一个具体的、老生常谈的问题:你最大的优点和缺点是什么?

这个问题总是出现,而且并不总是被直接问到。最重要的是,善于回答这个问题意味着善于自省,因此,行为面试。

那么如何才能有效回答这个问题呢?以下是我在 SharpestMinds 使用的流程:

  • 从参加一个(免费的)“大五”人格测试开始,就像这个。你将在性格的 5 个维度上得分:内向/外向、责任心、开放性、神经质、宜人性。
  • 接下来,做一些自我反省,问问自己是否同意你的结果。
  • 如果有,选择你获得最高分的个性维度。比方说,让我们想象你在内向方面得分很高。
  • 问问你自己:在工作环境中,我的高分如何转化为优势或劣势?在我们的例子中,内向的人有哪些优点和缺点?
  • 例子:内向的人从独处中获得能量,而与他人互动也耗费了他们的能量。如果你是一个内向的人,你可能对持续的单独工作有着异乎寻常的高容忍度(当事情需要完成时,这是一种优势)。然而,你也不太可能与你的同事核实你的行动方针(当你有可能最终花数小时在错误的事情上时,这是一个弱点)。

这是关键:你的长处和短处是由每个人都有的性格特征(如内向或开放)明确衍生出来的。有了这个框架,你可以看到你不应该因为你的优点而受到赞扬,也不应该因为你的缺点而受到指责:每个人都因为他们是谁而拥有这两者。

行为面试寻求的是你识别这两者的能力,更重要的是,开发策略来解决你的弱点。这是任何完美的行为面试答案的最后一步。

顶端的樱桃

“你最大的优点和缺点是什么?”

“嗯,我是一个内向的人,因此我很乐意长时间埋头专注于一项任务。这有点像一把双刃剑:因为除非必要,否则我倾向于避免社交,所以我倾向于不经常向他人汇报我的工作。因此,我学会了定期检查自己,反思自己是否达到了外部反馈可以帮助我不偏离轨道和避免兔子洞的程度。

最后一句话是你对行为问题所能给出的任何答案中最重要的部分:你制定了什么策略来解决你的弱点?即使你没有被直接问到,这也绝对应该包括在你谈论自己缺点的任何时候,因为这表明你已经花了很多心思在你是谁和你需要改进的地方,以至于你正在积极采取纠正措施变得更好。

剖析一个完美的答案

一个强有力的行为面试答案通常有 3 个组成部分:

  1. 提及性格来设置场景(“我是一个内向的人…”)
  2. 提及因你指出的个性特征而产生的相关优势或劣势(“…所以我发现我擅长 X,但在 Y 方面很挣扎…”)
  3. 你针对这些优点和缺点制定的策略(“…但是我发现我可以通过…”)

这适用于任何行为面试问题,而不仅仅是优点和缺点。例如,想象一下被问到一个看起来完全不同的问题:“你什么时候在工作场所经历过冲突?”

一个好的方法是这样的:

**第 0 步:**你可能还没有想到一个故事。所以停下来说,“这是一个有趣的问题,让我考虑一下。”→很多人没有意识到他们可以这样做,这实际上让你显得更加成熟和有思想。

**第一步:**设置场景。“我不得不和我的一位同事一起改进我们的推荐系统。她负责客户关系,她非常注重细节,非常认真

第二步:介绍优势和劣势。“这太棒了,因为这意味着她可以真正进入顾客的生活,理解他们的问题,并与他们感同身受。但这也让她很难看到全局,并理解她面向客户的工作如何更广泛地适应我们的运营。因此,她一开始坚持要一些我们的预算无法提供的功能,或者在技术上不可能实现的功能,因为她觉得这些功能会给她如此关注的用户增加价值。”

**第三步:**描述你的策略。“当这一切终于发生时,我意识到,如果我能让她与技术团队产生共鸣,并理解他们所面临的限制,她的共鸣实际上可以成为我们项目的优势。所以我带她去见了开发团队,让他们解释了我们的系统是如何构建的,以及每个新功能对他们时间的要求。听到他们谈论需要在周末或晚上加班来完成我们当时的淡化版本,这足以改变现状,我最终得到了她的认可。”

就像技术技能一样,你使用这个框架的表现会随着练习而提高,所以做到这一点很重要。好消息是,你不需要与精通技术的人交谈来练习给出良好的行为面试答案:重要的是他们在看到时知道内省。

如果你有关于行为面试的问题,请随时在 Twitter 上联系我。我是@jeremie charris

原载于 2019 年 12 月 18 日https://blog.sharpestminds.com

当你还没有 3 年工作经验和博士学位时,如何被聘为初级数据科学家

原文:https://towardsdatascience.com/how-to-get-hired-as-an-entry-level-data-scientist-when-you-dont-already-have-3-years-experience-476394f2cc2c?source=collection_archive---------3-----------------------

作为一个新的复杂领域,招聘人员很难判断谁是合格的数据科学家,这是可以理解的。因此,你可能会看到工作申请有着难以置信的要求,例如数据科学博士学位和 3 年工作经验。如果被招聘为数据科学家的最佳方式是已经成为一名数据科学家,那么你如何才能找到一份数据科学的工作呢?以下是我对获得数据科学工作的具体建议。有些很容易实现,有些很难,但我保证它们都是值得的。

有网站

数据科学职位是一个技术职位。作为一名技术人员,拥有一个网站增加了你作为技术人员的合法性。我建议“自己”做,不要使用 Wix 或 Squarespace 这样的基本编辑器。就我个人而言,我用 R+blogdown+T1 相当快速地制作了我的网站。这是我的第一条建议,因为几乎在每次面试中,面试官都会提到我的网站有多好。我也有过几次招聘人员联系我*,因为我网站的*。

我已经在我的网站上添加了谷歌分析。这让我知道来自特定地理区域的人何时查看我的站点。如果我在亚特兰大申请一份且只有一份工作,拥有一个来自亚特兰大的网站视图给了我一个暗示,有人正在从那个公司看我的网站。如今,大多数公司甚至不会给你发拒绝邮件,所以浏览你的网站可能比你通常得到的信号更多。

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

你也应该得到一个自定义域名。除了让你的简历看起来更好之外,这还能让你的电子邮件看起来像 yourname@yourname.com 的邮件,这很不错。

网站也是一个展示你正在做的一些个人项目的地方,这就引出了我的下一个技巧。

有一个投资组合

招聘人员不一定很懂数据科学。投资组合是向他们证明你做了的最好方式。在简历上列出项目清单是很好的。更好的是有招聘人员可以点击在线查看的网址。理想情况下,你的项目有一个互动元素(例如,对招聘人员上传的图像进行物体检测,或者在他们的社交媒体上进行一些 NLP)。让你的项目变得有趣是一件大事,我在最近的文章“你的个人数据科学项目很无聊。让我们改变这一点。”我建议至少有 3 个项目,我的投资组合只有几个,但我仍然偶尔会得到积极的评价。

下面是一些你应该快速制作一个在线项目的东西:

擅长核心数据科学技能

核心的数据科学技能是 python(包括 numpy、pandas、sklearn)和 SQL。我建议看这么多教程,直到你完全厌倦为止,制作自己的教程也是一个好主意。

我参加过的很多技术面试都是一些基本的 python 或 numpy 问题(例如,寻找数组中的第二大值,寻找数组中数字的出现频率,从有序序列中寻找缺失的元素)。做 leetcode 并对 Big O Notation 和数据结构有一个很好的理解应该会让你为大多数数据科学面试做好充分的准备。

在数据科学中占有一席之地

在我看来,你应该在数据科学中有一个技术和非技术的利基。以下是数据科学中的一些技术领域(不要选择 python 或 SQL,那是你的核心技能):

  • 稀有
  • MongoDB
  • 商务智能工具
  • 计算机视觉
  • 自然语言处理
  • 时间序列
  • 火花
  • 张量流

但是,开发非技术领域也很重要,例如:

  • 金融
  • 运动
  • 形象化
  • 制造业

基本上,我认为精通一个不是 Python/SQL 的工具或过程,并且有一个专业领域是很重要的。成为数据科学子领域的专家会让你更有可能在那个领域找到工作。我相信,在未来几年内,数据科学“通才”岗位会越来越少,而对特定工具和知识的需求会越来越多。

与此相关的一些其他想法是:

  • 为你的领域建立一个俱乐部/聚会
  • 为 it 开源项目做贡献
  • 做关于覆盖利基的 Kaggle 竞赛
  • 创建专门针对你的领域的教程

要么重写你的简历,要么复印两份

如今,你的简历很可能会被电脑阅读。虽然有很多人在谈论人工智能如何彻底改变招聘,但大多数用来解析简历的程序并没有那么好。你可能认为“我应该做一份漂亮的简历来脱颖而出”,但实际上你应该想的是“我应该做一份简单的简历,这样计算机就能读懂。”有情节,表格,或者有趣布局的简历,其实是阻碍你的。

你的简历会通过一个叫做申请人跟踪系统的东西。我在这里找到了一个免费的网站来测试你的简历在 ATS 上的表现。编辑它,直到它很容易通过,并检查多个 ATS 测试人员。

你可能只想要两份简历,一份通过 ATS,另一份看起来很棒,可以亲自交给别人。

使用 Indeed 的高级搜索

J.T .安东内尔称,招聘人员接待第一个求职者的平均时间为 200 秒。大多数工作会有 200 名申请人。从我在 LinkedIn 上看到的情况来看,对于数据科学来说,它甚至不止于此。

如果你想让你的简历真正被浏览,如果你申请的工作发布日期是旧的,你就没有机会了。我的建议是使用 Indeed 的高级搜索,并将工作限制在“3 天内”如果这移除了很多工作,不要惊慌,新的工作一直在发布。

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

接下来,我建议删除那些需要大量经验的招聘信息,你也可以这样做。这些工作要么需要大量的经验,而你不适合这个职位,要么他们不需要大量的经验,但招聘人员要求很多,因为他们不太了解数据科学,认为要求类似“7 年的 TensorFlow 经验”是可以的,尽管它只有 4 年左右。不管怎样,这都不是你应该申请的工作。以下是我对取消这些工作的建议:

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

博士学位是消除不适合你的工作的最好方法。如果你是在申请你的第一份工作,你也可以试着加上“初级”、“小”或“入门级”这样的词。你也可以在“至少其中一个词”部分添加你的专业领域,来寻找你特别适合的工作。老实说,这是我求职的最佳建议之一,幸运的是这很容易实现。不要气馁,如果只有几个工作,在你做了这些筛选后,新的工作会一直发布。

您的 LinkedIn 个人资料

填写你的 LinkedIn 个人资料是个好主意。以下是我对此的最佳建议

  • 你过去的工作描述应该至少有两段。确保使用你可能想要的工作的关键词,例如,如果你想从事计算机视觉方面的工作,在你的描述中提及计算机视觉技能。当我重写我的工作描述时,LinkedIn 开始向我展示不同的工作。
  • 添加到 LinkedIn 个人资料的技能部分。很多人忘记了它的存在,但它在向你展示你可能想要申请的工作时发挥了作用。
  • 利用 LinkedIn 学习,如果你是一名在校大学生,你很有可能免费获得这个或 Lynda.com。参加这些课程极大地增加了我对主题和技能的理解,但一个很好的优势是你可以直接将课程证书添加到你的个人资料中。
  • 我建议在你的个人资料中放一张封面照片,而不是默认的,这表明你在乎你的 LinkedIn。最后,确保你确实有一张个人资料照片,而且是在中性背景下拍摄的。

联系 LinkedIn 上的人

一般来说,我不认为 LinkedIn 是一个申请工作的好地方,但是直接接触人们可以帮你很多。试着输入“数据科学家招聘”,搜索人而不是工作。许多人会在他们的简历中提到这一点。这些人通常不介意别人向他们寻求机会。当你提出要求时,要简短,有一个令人信服的理由你对他们公司感兴趣,有一个你申请的具体工作包括你的简历,我建议包括一个链接到你的网站。如果你没有包括所有这些,你很可能会被忽视。我不建议在简历中没有注明要招聘的人身上试用。我在下面进行了测试,屏蔽了人们的照片、公司和姓名,但你可以看到他们的简历正是你要找的。

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

打动开发者的技能

你将不得不与开发人员一起工作,在许多公司的面试过程中,你甚至可能会被一些人面试。要让这些人认为你很好共事,就要投资那些让你很好共事的技能。这些包括 git、flask、docker、使用 API 以及将模型部署到云。杰瑞米·哈里斯在这篇博客文章中对此做了比我更好的报道。

打造“你的品牌”

为自己扬名是有用的,因为它可能会让人们试图雇佣你,甚至不用你去申请工作。这里有一些你可以做的事情来建立你的品牌,其中一些我已经提到过了。即使你有工作,做这些事情也是有用的,因为你永远不知道你什么时候会去找另一份工作。

  • 制作一个网站(它应该包括博客部分)
  • 拥有一个专业的 twitter 账户,与你尊敬的人互动,实际上我从 twitter 上学到的比 LinkedIn 多得多
  • 在 YouTube 上建立教程(尤其是关于新兴技能的)
  • 在介质上写东西
  • 参加会议
  • 参加黑客马拉松比赛(或者指导,如果你太老的话)
  • 志愿者数据科学为非营利组织工作吗
  • 开始聚会或俱乐部
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值