TowardsDataScience 博客中文翻译 2019(五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

2019 年和 2020 年:数据科学中的事实和期望

原文:https://towardsdatascience.com/2019-and-2020-facts-and-expectations-in-data-science-9788531eae85?source=collection_archive---------30-----------------------

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

KDNuggets 的编辑问了我以下问题:

2019 年人工智能、数据科学、深度学习和机器学习的主要发展是什么,你预计 2020 年有哪些关键趋势?

答案摘要发表在:《人工智能、分析学、机器学习、数据科学、深度学习研究 2019 年主要进展及 2020 年主要趋势》

以下是我的延伸回答。

— — — — — — — — — — -

2019 年主要进展

2019 年是人工智能稳定的一年。机器已经开发了自己的语言并实现了自己的偏见,这种不太可能的说法将把这个位置留给数百万有能力的数据科学家的日常工作。

所以,数据科学的第一个主要发展,在我看来,是 2019 年获得的民主化的高水平。不仅开源工具的普及降低了数据科学领域的准入门槛,而且大学和电子学习平台上的无数课程正在塑造全新一代的数据科学家。虚拟和真实的数据科学社区到处都在涌现,相互支持和教育,提供论坛讨论、教程和博客帖子。

过去一年的另一个有希望的成就是采用了主动学习、强化学习和其他半监督学习程序。事实上,过去几年在各种平台上积累(收集)数据的努力现在应该有回报了。然而,这些数据大部分就在那里。没有人检查过,更不用说贴标签了。即使在当前状态下,半监督学习程序也可能提供尝试这些数据的希望。

最后,数据科学领域成熟的第三大进步是在 autoML 概念中用“引导的”来修正“auto”一词。全自动数据科学解决方案虽然极具吸引力,但已被证明仅适用于简单的问题,即数据集被标记、干净、平衡等。对于已经稍微复杂一些的问题,专家干预似乎是不可或缺的。因此,概念已经从全自动解决方案转变为具有灵活数量的集成触点的“引导”解决方案。

2020 年的主要趋势

新一代数据科学家将于 2020 年参加 2019 年参加的课程,他们将立即开始解决现实世界的问题。他们将需要快速的解决方案来实现简单模式部署,恒定模式监控,以及灵活模式管理。真正的商业价值将来自数据科学生命周期的这三个最终部分。

人工智能算法的更广泛采用和数据的更广泛使用将在安全安全隐私方面带来关键问题;这些问题本应在 2019 年得到解决,但尚未接近任何解决方案。假新闻问题、保护用户隐私、防范来自世界各地的黑客和小偷,这些问题一如既往地现实,并将在整个 2020 年再次得到解决。

深度学习将继续享受又一年的惊人人气。然而,今年将是用户决定深度学习解决方案何时值得工作,只是效率低下,或者显然不适合的一年。

最后,我相信深度学习黑盒的更广泛使用将会提出机器学习可解释性 (MLI)的问题。我们将在 2020 年底看到 MLI 算法是否能够应对彻底解释深度学习模型闭门造车背后发生的事情的挑战。

就此,我祝愿你们所有人度过一个充实而精彩的 2020 年!

2019 年即将结束。AI 的下一步是什么?

原文:https://towardsdatascience.com/2019-is-coming-to-an-end-whats-next-for-ai-3a4cd45f70aa?source=collection_archive---------46-----------------------

深度学习和人工智能伦理的限制垄断了对人工智能未来的讨论

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

AI Now and AI Index 2019 Reports

2019 年即将结束,两份最着名的人工智能研究报告-《人工智能 2019 年报告》《人工智能指数 2019-已经出炉。他们对人工智能的技术水平有什么看法?**AI 下一步走向何方?**我会试着在这篇短文中总结一下。

先说 AI Index 2019,由斯坦福大学以人为中心的人工研究所开发。作为今年的一个新事物,人工智能指数首次包括了两个强大的数据可视化工具:

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

Ai Vibrancy Dashboard example

  • ArXiv Monitor,一个全论文搜索引擎,跟踪 ArXiv 上发表的人工智能论文的指标。

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

ArXiv Monitor search engine

通过使用这些工具,任何人都可以深入了解有关国家或学科人工智能状况的详细信息,但我将尝试在这里列出一些我认为更有趣的报告要点,同时将它们与一些个人想法或我与该领域一些专家分享的想法进行交叉:

  • 中国现在每年发表的人工智能论文和欧洲一样多,已经在 2006 年超过了美国。
  • 出席人工智能会议的人数继续大幅增加。例如,2019 年 NeuIPS 的与会者超过 13,000 人,比 2018 年增加了 41%(相对于 2012 年增加了 800%)。
  • 2012 年后,人工智能计算能力每 3.4 个月翻一番。也就是说,该报告还提到“在一些广泛的自然语言处理分类任务上,如 SuperGLUE 和 SQuAD2.0 基准测试中所捕获的,进展非常迅速;在一些需要推理的 NLP 任务上,性能仍然较低,例如 AI2 推理挑战,或者人类水平的概念学习任务,例如 Omniglot 挑战。

在与一些专家讨论这些数字时,他们得到的感觉是:

  • 纸张原稿量明显减少
  • 大量的论文现在只关注通过调整模型,甚至通过应用蛮力(都包括数据集规模或计算能力)来展示对先前工作的微小改进

我个人认识的专家似乎没有指出那个方向,正如你在这篇文章中看到的,Yoshua Bengio 警告说“进展正在放缓,巨大的挑战仍然存在,简单地将更多的计算机投入到一个问题中是不可持续的”。其他文章,比如来自麻省理工科技评论的这篇文章进一步暗示深度学习的时代可能会结束

还有,就像我在我的文章《深度学习是不是太大太失败了?“看起来深度学习模型变得越来越庞大,而规模准确性却没有从中受益太多

另一个寻求进步的有趣领域是教育。虽然人工智能培训(传统大学和在线)的报名人数正在增长,但我仍然发现两个令人担忧的领域。其中一个在 AI Index 2019 报告要点中提到,另一个没有提到:

  • 人工智能的多样性仍然是一个问题。特别是性别的多样性,女性在 2018 年新聘教师或人工智能博士获得者中所占比例不到 20%。
  • 虽然该报告对人工智能人才给予了大量关注,但另一个相关主题却被忽略了,即政府和公司如何培训他们的非技术人才为人工智能做准备。实际上,AI Now 2019 报告的执行摘要明确指出“算法管理技术在工作场所的传播正在增加工人和雇主之间的权力不对称。人工智能不仅威胁到不成比例地取代低收入者,而且威胁到降低工资、工作保障和其他对那些最需要的人的保护。

最后,人工智能指数报告强调指出了一个在过去几个月中非常明显的趋势。人工智能伦理正变得与可解释性和可解释性非常相关,成为最常提到的伦理挑战。这让我想到了第二份报告, AI Now 2019 报告,该报告重点关注道德问题。让我来总结一下我认为第二份报告中最相关的几点。首先,一些执行要点:

  • 人工智能的伦理压力主要来自社区、记者和研究人员,而不是公司本身。
  • 虽然正在努力监管人工智能,但政府对监控的采用超过了他们
  • 人工智能投资在气候变化(注意之前提到的计算能力增长率)以及地缘政治和不平等加剧方面有着深远的影响

其次,关于建议,作者明确表示,像影响识别或面部识别这样的技术应该被禁止或不使用,同时在可能影响人们生活和获得机会的敏感环境中不受管制。关于偏见,作者指出,研究应该超越技术修正以解决更广泛的政治后果。

虽然我同意,但我真诚地认为还有另一件重要的事情需要考虑,那就是偏倚控制应该从研究转向商业实施,将这与论文的另一项建议联系起来,即让数据科学家对与他们的模型和数据相关的潜在风险和危害负责

当然,报告涉及更多的主题,我将非常乐意讨论你感兴趣的任何相关方面。对你来说,这两份报告的亮点是什么?

2019 年:伯特之年

原文:https://towardsdatascience.com/2019-the-year-of-bert-354e8106f7ba?source=collection_archive---------7-----------------------

自然语言处理中深度迁移学习的兴起

当我们结束 2019 年时,反思语言机器学习领域最近的主要趋势很有意思。2019 年是 NLP 具有里程碑意义的一年,从阅读理解到情感分析,各种重要任务都创造了新纪录。突出的关键研究趋势是 NLP 中迁移学习的兴起,它指的是使用大量预先训练的模型,并根据你特定的语言相关任务对它们进行微调。迁移学习允许您重用以前构建的模型中的知识,这可以提高性能和泛化能力,同时需要更少的标签化训练数据。

预训练模型,然后针对特定任务进行微调的想法本身并不新鲜——计算机视觉从业者经常使用在 ImageNet 等大型数据集上预训练的模型,在 NLP 中,我们多年来一直在通过重用单词嵌入来进行“浅层”迁移学习。

但是在 2019 年,通过像 BERT 这样的模型,我们看到了向更深层次的知识转移的重大转变,即将整个模型转移到新的任务中——本质上是使用大型预训练语言模型作为可重复使用的语言理解特征提取器。

这在去年被称为“ NLP 的 ImageNet moment ”,在 2019 年,研究继续建立在这一趋势上。 BERT 在使自然语言处理中的迁移学习变得容易方面非常出色,并且在这个过程中,以最小的适应性为 11 个句子级和单词级的自然语言处理任务产生了最先进的结果。从实用的角度来看,这是令人兴奋的,但 BERT 和相关模型可能更有趣,因为它们推进了我们对如何向计算机表示语言的基本理解,以及哪些表示最能让我们的模型解决具有挑战性的语言问题。

新出现的范式是:当你可以重用 BERT 对语言的扎实掌握时,为什么要不断地从零开始学习语言语法和语义?

这一核心概念,加上简单的微调程序和开源代码,意味着 BERT 迅速传播开来-最初于 2018 年底发布,BERT 在 2019 年变得非常受欢迎。直到我试图收集去年发表的与 BERT 相关的论文,我才意识到它有多受欢迎。我收集了 169 篇与 BERT 相关的论文,并手动将这些论文标注到几个不同的研究类别中(例如,构建特定领域版本的 BERT,理解 BERT 的内部机制,构建多语言 BERT,等等)。).

这是所有这些文件的图表:

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

A collection of BERT-related papers published between November 2018 and December 2019. The y axis is the log of the citation count (as measured by Google Scholar), but with a floor of 0. The majority of these papers were found by searching for BERT in the title of arXiv papers.

这类信息通常具有更好的交互性,所以这里有一个 GIF。你也可以查阅 Jupyter 笔记本自己玩剧情,原始数据这里

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

Mousing over a mass of BERT papers.

现在有很多伯特论文。此图的一些注释:

  • 观察 2018 年 11 月原始论文发表和 2019 年 1 月左右论文泛滥之间的(相当短的)滞后是很有趣的。
  • 第一波 BERT 论文倾向于关注核心 BERT 模型(红色、紫色和橙色点)的直接扩展和应用,如将 BERT 用于推荐系统、情感分析、文本摘要和文档检索。
  • 然后,从 4 月份开始,一系列探索 BERT 内部机制的论文**发表了(绿色),比如理解 BERT 如何模拟层级语言现象以及分析注意头之间的冗余。特别有趣的是论文*BERT 重新发现了经典的 NLP 流水线,其中作者发现 BERT 的内部计算反映了传统的 NLP 工作流程(首先进行词性标注,然后进行依存解析,然后进行实体标注等)。).***
  • 9 月份左右,一批集中于压缩 BERT 的模型尺寸的论文被发布(青色),像 DistilBERTALBERTTinyBERT 论文。例如,HuggingFace 的 DistilBERT 模型是 BERT 的压缩版本,参数数量减少了一半(从 1.1 亿减少到 6600 万),但在重要的 NLP 任务上性能却提高了 95%(参见 GLUE 基准)。最初的 BERT 模型并不完全是轻量级的,这在计算资源不充足的地方(比如手机)是一个问题。
  • 这个伯特论文列表很可能是不完整的。如果与 BERT 相关的论文的真实数量是我的两倍,我也不会感到惊讶。作为一个粗略的上限,引用原始 BERT 论文的论文数量是目前超过 3100 篇
  • 如果你对其中一些模型的名字感到好奇,自然语言处理研究人员基本上被芝麻街的角色弄得晕头转向。我们可以责怪埃尔默论文让整个事情开始,这使得后来的模型像伯特和厄尼是不可避免的。我急切地等待一个大鸟模型——让我们称压缩版为小鸟?

伯特文学的几点启示

通过查阅这些文献,出现了一些一般性的概念:

  • ****开源机器学习模型的价值。作者免费提供了 BERT 模型和相关代码,并提供了一个简单的、可重复使用的微调过程。这种类型的开放对于加速研究至关重要,如果作者不那么直率,我怀疑这种模式会如此受欢迎。
  • ****认真对待超参数调整的重要性。RoBERTa 的论文引起了轰动,它提出了一种更具原则性的训练 BERT 的方法,包括优化的设计选择(如改变训练任务)和更广泛的超参数调整。这种更新的训练机制,加上在更多数据上对模型进行更长时间的训练,再次将性能推至各种 NLP 基准的破纪录水平。
  • ****关于模特身材的思考。最初的 BERT 作者很感兴趣地观察到,简单地增加模型的大小可以显著提高性能,即使是在非常小的数据集上。也许这意味着在某种意义上你“需要”数以亿计的参数来代表人类语言。2019 年的其他几篇论文发现,简单地扩大 NLP 模型的规模就能带来改善(著名的是 OpenAI 的 GPT-2 模型)。而且有新的技巧来训练大得离谱的 NLP 模型,比如 NVIDIA 的 80 亿参数庞然大物。但也有证据表明,随着模型规模的增加,回报会减少,类似于计算机视觉研究人员在添加更多卷积层时遇到的问题。关于模型压缩和参数效率的论文的成功表明,可以从给定大小的模型中获得显著更高的性能。

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

Our NLP models are getting bigger and bigger. From DistilBERT paper.

伯特到底是什么?

让我们后退几步,讨论一下伯特到底是什么。 BERT (来自变形金刚的双向编码器表示)是谷歌研究人员建立的一个预先训练好的语言模型** (LM)。语言模型在激励模型学习对语言的深刻理解的任务上被训练;LMs 的一个常见训练任务是下一个单词预测(“猫坐在 __”上)。**

BERT 基于一种相对较新的神经网络架构——变形金刚,它使用一种叫做自我关注的机制来捕捉单词之间的关系。在变形金刚中没有卷积(如在 CNN 中)或递归运算(如在 RNNs 中)。已经有一些 优秀的 教程发表讲解变形金刚和自我关注,这里就不多赘述了。但简单来说:

  • 自我关注是一种序列到序列的操作**,它通过将每个单词的上下文烘焙到其表示中来更新输入令牌嵌入。这使得它可以同时对所有输入单词之间的关系进行建模——与 RNNs 形成对比,在 RNNs 中,输入标记被依次读入和处理。自我关注使用点积计算单词向量之间的相似性,并且所得到的关注权重通常被可视化为关注权重矩阵。**
  • 注意力权重捕捉单词之间关系的强度,我们允许模型通过使用多个注意力头来学习不同类型的关系。每一个注意力头往往捕捉到一种特定类型的词与词之间的关系(带有一些冗余)。其中一些关系可以直观地解释(比如主语和宾语的关系,或者跟踪相邻的词),而一些则相当难以理解。你可以将注意力头视为类似于卷积网络中的过滤器,其中每个过滤器从数据中提取特定类型的特征——无论哪个特征都将最有助于神经网络的其余部分做出更好的预测。
  • 这种自我关注机制是《变形金刚》中的核心操作,但只是把它放在上下文中:变形金刚最初是为机器翻译开发的,它们有一个编码器-解码器结构。转换器编码器和解码器的构建模块是一个转换器模块**,它本身通常由一个自我关注层、一定量的标准化和一个标准前馈层组成。每个模块对输入向量执行这一系列操作,并将输出传递给下一个模块。在变压器中,深度是指变压器块的数量。**

使用这个转换器设置,BERT 模型在 2 个无监督的语言任务上被训练。关于 BERT 训练最重要的一点是,它只需要未标记的数据——任何文本语料库都可以使用,不需要任何特殊的标记数据集。BERT 论文使用维基百科和一本书的语料库来训练模型。与“正常”语言模型一样,数据很便宜,这是一个巨大的优势。

伯特是怎么训练的?

但是伯特接受了哪些任务的训练来鼓励它学习如此好的、普遍有用的语言理解呢?未来的工作调整了学习策略,但是最初的论文使用了两个任务:

  1. ****假面语言模型(MLM)任务。这项任务鼓励模型学习单词级和句子级的良好表征(因为句子是单词表征的总和)。简而言之,一个句子中 15%的单词是随机选择的,并用<掩码>标记隐藏(或“屏蔽”)。该模型的工作是预测这些隐藏单词的身份,利用<掩码>之前和之后的单词——因此,我们试图从损坏的输入中重建文本,并且左右上下文都用于进行预测。这允许我们建立考虑所有上下文的单词表示。BERT 同时学习其双向表示,与 ELMo(一种基于 RNN 的语言模型,用于生成上下文感知的单词嵌入)等方法相反,在 ELMo 中,从左到右和从右到左的表示由两个语言模型独立学习,然后连接。我们可以说 ELMo 是一个“浅层双向”模型,而 BERT 是一个“深层双向”模型。
  2. 下一句预测(NSP)任务。如果我们的模型将被用作语言理解的基础,那么对它来说,拥有一些句子间连贯性的知识将是有益的。为了鼓励模型学习句子之间的关系,我们添加了下一个句子预测任务,在这个任务中,模型必须预测一对句子是否相关,即一个句子是否有可能出现在另一个句子之后。正训练对是语料库中真实的相邻句子;从语料库中随机抽取负训练对。这不是一个完美的系统,因为随机抽样的配对实际上可能是相关的,但这已经足够好了。

该模型必须学会同时做这两项任务,因为实际的训练损失是这两项任务的损失的组合(即它是平均 MLM 和 NSP 可能性的总和)。

如果你发现了掩蔽方法的一点问题:你是对的。由于在一个片段中随机有 15%的单词被屏蔽,你很可能有多个出现。这很好,但是 BERT 将这些屏蔽的令牌彼此独立地对待,这有点限制,因为它们很容易相互依赖。这是 XLNet 论文提出的观点之一,有些人认为这是 BERT 的继任者。

微调伯特

一旦训练了基本的 BERT 模型,通常可以分两步进行微调:首先,继续对未标记的数据进行“无监督的”训练,然后通过添加额外的层和对新目标进行训练来学习实际任务(使用不太多的标记示例)。这种方法源于谷歌的戴&乐【2015 年的 LM 论文。

BERT 微调实际上会更新模型的所有参数,而不仅仅是新任务特定层中的参数,因此这种方法不同于完全冻结转移层参数的技术。

在实践中,使用 BERT 转移学习,通常只有经过训练的编码器堆栈会被重用,您可以砍掉模型的解码器部分,而只使用编码器转换块作为特征提取器。因此,我们不关心转换器的解码器部分会对它最初被训练的任何语言任务做出的预测,我们只是对模型已经学会在内部表示文本输入的方式感兴趣。

BERT 微调可能需要几分钟或几小时,这取决于您的任务、数据大小和 TPU/GPU 资源。如果你有兴趣尽快尝试 BERT 微调,你可以在 Google Colab 上使用这个现成的代码,它提供了一个免费的 TPU。

伯特之前有什么?

原创 BERT 论文写得很好,推荐去看看;以下要点总结了本文对语言模型预训练和微调领域先前主要方法的描述:

  • 无监督的基于特征的方法(如 ELMo),使用预先训练的表示作为输入特征,但使用特定于任务的架构(即,它们为每个新任务改变模型的结构)。所有你喜欢的单词嵌入(word2vec to GLoVe to FastText)、句子嵌入和段落嵌入都属于这一类。ELMo 还提供单词嵌入,但是是以上下文敏感的方式进行的— —标记的嵌入/表示是从左到右和从右到左语言模型隐藏状态向量的串联。
  • 无监督微调方法(类似于 OpenAI 的 GPT 模型),这些方法对受监督的下游任务的所有预训练参数进行微调,并且仅通过引入一些特定于任务的参数来最小程度地改变模型结构。预训练是在未标记的文本上进行的,学习任务通常是从左到右的语言建模或文本压缩(就像自动编码器一样,它将文本压缩成矢量表示,并从矢量中重建文本)。然而,这些方法对上下文建模的能力受到限制,因为它们通常是单向的、从左到右的模型——对于给定的单词,没有能力将所有后来的单词合并到它的表示中。
  • ****从监督数据中转移学习。在转移从具有大量训练数据的监督任务中学习到的知识方面也有一些工作,例如,使用来自机器翻译模型的权重来初始化不同语言问题的参数。

问题或需要考虑的事情

  • 计算机视觉的一些工作表明,预训练和微调最有助于加快模型收敛。

结论

我希望这篇文章提供了对 BERT 现象的合理概括,并展示了这个模型在 NLP 中变得多么流行和强大。该领域正在快速发展,我们现在从最先进的模型中看到的结果甚至在 5 年前都是不可信的(例如问答中的超人表现)。最近 NLP 进展的两个关键趋势是迁移学习和变形金刚的兴起,我很想看看这些在 2020 年将如何发展。

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

Happy holidays!

Welocalize 是自然语言处理和翻译技术的行业领导者。要与我们团队中的某个人谈论你的 NLP 项目,请发电子邮件给 david.clark@welocalize.com 的戴夫。

用卷积神经网络对引力波进行分类

原文:https://towardsdatascience.com/2020-how-a-i-could-help-astronomers-sorting-big-data-811571705707?source=collection_archive---------32-----------------------

Python 和 Keras 信号处理实用指南。

在这篇文章中,我们展示了机器学习如何帮助天文学家对太空探索中记录的大数据进行排序。实践策略和可行的 Python 代码在从太空运来的真实数据集上提供了现场体验。具体来说,我们训练一个卷积神经网络来识别来自太空的引力波。

2020 太空年:人工智能如何帮助天文学家整理大数据

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

gravitational waves generated by binary neutron stars

我们都在一些常见的图像数据集(如 MNIST 或 CIFAR10)上构建、训练、评估和检查了神经网络。类似的人工智能技术已经被用于识别 YouTube 频道上的猫视频,检测癌症肿瘤或理解气候变化如何影响事物。

现在是时候在太空探索的真实世界数据集上尝试机器学习了。

我们邀请你考虑使用来自两个探测器的图像将图像分类为引力波或非探测事件的问题。

什么是引力波?

引力波是空间的拉伸和压缩,因此可以通过测量两个物体之间的长度变化来发现。

[## 引力波解释了

一种在电磁波谱之外观察宇宙的新方法。

medium.com](https://medium.com/swlh/gravitational-waves-explained-83ce37617ab2)

LIGO(激光干涉引力波天文台),世界上最大的引力波天文台,能够极其精确地记录它们。目前,数据归档保存了超过 4.5 的数据。预计它将以每年 800 的速度增长。我们得到了两个包含 NumPy 对象形式的数据的文件,由pav los proto papas教授的团队准备:

  • GW_aug.npy(关于 1568 次引力波事件的数据)
  • ND_aug.npy(关于 1216 个未检测事件的数据)

每个事件由 39 个频率分量描述。每个频率分量进一步由 100 个时间分量表示。时间分量代表在给定时间给定频率分量的归一化功率,记录在两个位置:LIGO 汉福德(H1)和 LIGO 利文斯顿(L1)。

一个事件看起来像是在 H1 和 L1 记录的信号的照片或图像。这是因为频谱图不仅在 Y 轴上绘制频率,在 X 轴上绘制时间,而且还使用颜色在 Z 轴上传达信号强度,颜色越亮,信号能量越高。因此,声谱图解释了信号强度如何分布在信号中的每个频率上。

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

Spectrograms of gravitational waves

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

Spectrograms of non-gravitational waves

如上所示,如果我们将位置视为光谱图图像的通道,分类器在处理同一事件的不同特征时应该不会有太多问题。事实上,它们可以是互补的,就像 RGB 图像中的通道一样。

用 Keras 分类引力波

每天处理 4.5 千兆字节的数据,并从非引力波中整理出引力波是一个有趣的挑战。在本节中,我们构建一个卷积神经网络(CNN)来自动将事件分类为 GW 或 ND。

CNN 的一个强大的方面是它允许图像堆叠或附加,这样网络读取汉福德数据(H1),紧接着是利文斯顿数据(L1)。下面,在组合我们的数据集后,我们创建一个数值响应变量,GWs 为 1,nd 为 0。我们还将数据分为训练集和测试集。

我们发现,使用与分类 MNIST 或 CIFAR-10 类似的网络架构也能提供可接受的结果。下面我们创建一个灵活的 CNN 架构:

  • Conv2D 添加了一个具有可变数量的过滤器和过滤器大小的卷积层。
  • L2 正则化用于避免过拟合。这意味着在每次更新之前,大的权重被罚以略小于 1 的因子。
  • 批量标准化将小批量的平均活化度保持在接近 0,活化度标准偏差保持在接近 1,以解决内部协变量偏移。这使得我们的网络能够更快地融合。
  • MaxPooling2D 图层对要素地图进行下采样,以识别最重要的要素。
  • Dropout 的工作原理是随机忽略一些节点,并强制剩余的节点学习其他功能。这提高了我们网络的泛化能力。

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

验证准确性是确保模型运行良好的重要方法。经过短暂的训练,CNN 模型对未知事件的分类准确率已经达到了 79.54%。

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

结论

2020 年将会看到中国和其他国家竞相前往火星,包括 T2、美国和 T3。这是欧洲和俄罗斯的联合行动,也是阿拉伯联合酋长国的首次火星任务。所有的希望都寄托在将人工智能作为现场天才研究助理的等价物上。

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

NASA Just Unveiled Its 2020 Mars Rover

在本文中,我们通过说明探索性数据分析和深度学习技术如何应用于天文学,使空间探索更接近数据科学家。我们用 LIGO 探测器记录的引力波事件训练了一个卷积神经网络。该网络能够正确识别与中子星或黑洞相关的事件,准确率接近 80%。

想要更多吗?你可以参考下面我们关于深度学习和计算机视觉基本工作机制的文章。

[## 深度学习为什么有效:解决一个农民的问题

在开始是神经元:梯度下降,反向传播,回归,自动编码器,细胞神经网络…

towardsdatascience.com](/why-deep-learning-works-289f17cab01a)

感谢阅读。

2020 年即将到来:获得第一份数据工作的实用技巧

原文:https://towardsdatascience.com/2020-is-coming-practical-tips-for-landing-your-first-data-job-13f77aab1333?source=collection_archive---------22-----------------------

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

Source: Pixabay at Pexels — free stock images

办公时间

记住 5 件重要的事情

数据科学是一个非常广阔的领域。一开始,数据科学家是一个包罗万象的职位。你必须了解工程和机器学习。做一个优秀的数据分析师,对云很流利。作为开发人员,编写 SQL 和一些编程语言。或者更好,做一个合适的开发者!这是压倒性的。随着领域的发展,所有这些需求都获得了各自的角色。

当我们谈论该领域的扩展时,请记住,我们不是指商业智能和统计的合并。关于这一点已经说了很多,尽管人们常说数据科学是从领域知识、统计和商业智能的融合中诞生的,但我个人认为不同,可能是我见过的最好的图形解释来自博客 Upside :

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

这张图片本身非常清晰,显示了商业智能和数据科学是两个完全不同的领域,因此后者的扩展来自不同角色下任务的个性化,而不是从商业智能职位到数据科学角色的某种转换。如今,你可以在数据工程师、数据科学家或数据分析师等职位上找到相同数量的职位。之后还在全面扩展中扮演其他角色,如机器学习工程或数据翻译。

所有这些都让来自不同领域的人——比如我——被对越来越多专业人士的指数级需求所吸引,也因为有机会涉足一个相对较新的领域。如果你一直喜欢数据和与数字打交道,并且喜欢试图理解事情发生的原因,这将是一个非常令人兴奋的事情。

如果你对上面的描述感同身受,并且你正在考虑进入数据科学行业,或者也许你已经走了一半,在下一篇技巧文章中,我将尝试与你分享一些我从自己的经历中学到的东西,那时我不久前决定完全进入这条道路。如果你想在 2020 年进入数据科学领域,希望它对你也有用🙂。

1.了解你自己

随着这个领域的成长,角色的多样化使得人们更容易进入这个行业,在所有可用的角色下工作。所以要做的第一件重要的事情是了解我现在已经准备好扮演哪种角色,以及几年后我想扮演哪种角色。

现在网上比较常见的三个角色可能是:

  • 数据科学家:通常负责构建机器学习模型的家伙,通常包括它要使用的大部分功能。他们负责不断改进模型的性能,并尝试新的模型以改进预测。
  • **数据工程师:**这家伙可能更擅长编程和计算机科学。他们负责所有的数据流,以便从数据科学家构建的模型中获取数据。
  • :数据分析师的工作可能是这个领域中最容易被误解和混淆的工作。当我在找工作时,不断发现招聘数据分析师的职位,要求只知道和使用 Excel,不需要任何统计或数学知识,要求为商业或管理团队找到、描述和可视化见解。理想的自动化过程。这些角色我的朋友,以我的理解,是商业智能的位置。同样,在我看来,数据分析师是一个不断进行特别分析的人,对分布、概率或代数等概念有着深刻的理解,定期探索模式,以改善机器学习模型和整个公司对它们如何工作的理解。有时为数据工程设计需要哪些数据以及如何获得这些数据。

作为一名数据科学家、工程师或分析师,如果有人觉得上面的一些描述不准确,请不要怪我🙃。正如我所说的,这个领域发展得太快了,以至于无法跟上,所以可能会有一些组合,以相同或不同的角色名称出现。

如果你现在还不清楚哪一个应该是你现在和未来的角色,不要担心,我花了很长时间来理解地雷。比如我自称是数据分析师,会做机器学习。这两样我都喜欢,但我知道我现在能为数据分析师这个角色提供更多。我将来会成为全职数据科学家吗?谁知道呢。另一方面,你可能有很强的计算机科学和编程背景,能够从数据工程师做起,但知道自己最终想成为数据科学家。以我的理解,场内学习和枢转的可能性非常高。

实用提示:

  • 制定个人品牌宣言。这听起来可能很傻,但是用文字写下你的职业历程、你的主要技能、你的成就、目标以及为什么你会对公司有价值,这对了解你自己会很有帮助。是的,我确实说了 4 行或者 5 行。我知道这很少,但这种约束有助于你只追求最重要的东西。
  • 写下你的职业经历:因为对专业人士的需求很大,所以提供的机会也很大。意味着你将和一些充满激情的小伙子们竞争。因此,如果你和我一样,或者你可能来自不同的行业或有着不同的经历,一定要能够解释你的职业故事,以及你是如何和为什么进入数据科学的。

2.准备找工作:最重要的工具

之前我开始找工作,当我在找工作的时候,我听说了几个网站和一些我需要牢记在心才能成功的东西。然而,在实践中,我发现这些工具中很少是真正需要的,对我找工作有用的。更重要的是,在每天至少 6 个小时全身心投入找工作的过程中,我发现为了应对一切,在头脑中记住有限的事情是非常重要的。

天佑王者 LinkedIn :不仅是找工作的最佳地点,根据工作岗位的数量和寻找员工的人的活跃程度来看,它也是一个建立关系网和展示自己的好地方。

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

Source: geralt at Pixabay — free stock images

我想给刚入门的人的主要建议是:

  • 建立你的个人资料:漂亮的照片、完整的职业经历和教育背景,以及良好的拼写/语法是最基本的。从那里你可以定制你的网址——而不是使用 LinkedIn 给你的默认网址,选择一个合适的背景图片,写下一个漂亮的标题,显示你更新的联系信息,包括一个好的和可靠的总结(可以来自你的品牌声明),并尽可能填写 LinkedIn 包括的所有其他部分,如技能,成就或推荐。
  • 保持活跃:努力在网络中保持活跃,向你的数据科学相关内容的联系人展示自己,同时不断添加和跟进该领域的人员,以增加你的人脉。如果他们发布任何机会,或者在他们工作的一些公司找到工作,他们可能会有用。
  • 调整您的设置:当您的个人资料 100%完成时,就该打开“让招聘人员知道您是开放的”选项,以及使用 Premium 的免费试用。顺便说一下,就我个人而言,这是我全力推荐的东西,因为它给了你更多搜索和跟踪的机会。接下来几周,你可能会在 LinkedIn 上做得最多的两件事。
  • 接触合适的受众:与你所在城市的人联系,最好是在你感兴趣的特定行业。不要浪费时间添加来自高级组织的首席技术官或首席执行官。这些人甚至不会接近你感兴趣的招聘过程。相反,添加高级数据科学家、领导甚至人力资源部门的人员,他们可能会根据您的个人资料更多地参与流程。最后但同样重要的是——这可能是我在找工作时收到的最好的建议,加上目前在该领域工作的贵校校友。他们已经经历了这一切,他们中的许多人会很乐意帮助你推荐,或者至少是一条好的建议。

这是我在 LinkedIn 上的简介,如果你想看的话。

注意你的 Github:Github 不仅仅是一个在线分享和个人项目的地方,它也展示了你的一些东西。它显示了你有多活跃,你如何编码,你喜欢做的事情以及对你自己的基本描述。一定要推广各种各样的项目,展示不同的技能和兴趣。此外,理想情况下,尽可能频繁地推送至 GitHub。在数据科学领域寻找第一份工作的一部分就像学习一项运动:你不能暂时停止这项运动,否则,你会忘记东西。所以一定要坚持不懈地推进你的日常工作,这样你才能显示出你的积极和提高你的技能。例如,这是我的简介

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

我自己在 GitHub 上的活动面板的例子。

****你的简历很重要:如今,简历仍然非常重要,尽管我不会给出关于风格和设计的建议,因为这可能非常主观,但我会给你一些我听过的最好的建议:

  • 保持简短:理想情况下 1 页,最多 2 页。即使你有 8 年的工作经验和博士学位。人们只是不读更多。
  • 联系方式:包含你所有的联系方式,并且要包含正确。仔细检查你的电话、电子邮件和所有网址。
  • 介绍自己:开头的个人简历很重要。人力资源人员和招聘经理会收到数百份求职简历。给他们一个快速的理由继续阅读你的全部课程。
  • 包含你的技能:不要让别人从你以前的工作描述和教育中解读你的整套技能,让他们更容易明白这些技能。此外,一些公司使用软件来识别课程中的关键词并进行过滤。所以确保重要的东西在你的简历中至少被提到一次。
  • 细节很重要:好的拼写、文本对齐、可扫描性、你要发送的文件的名称……所有这些都是关于你自己的。所以要比以前更整洁。

3.去哪里找

我们的任务是尽可能有效地利用我们的时间。很多招聘网站甚至在开始搜索和申请他们的职位之前就要求你填写一份很长很长的简历。此外,许多公司会在几个地方发布招聘信息,所以你看到的许多工作岗位会在不同的站点之间重复出现。所以,明智地利用你的时间,不要花几个小时在几个求职网站上寻找工作岗位,而是选择几个并关注它们。

对我来说,前面提到的主要工作板块是 LinkedIn。第二个可能取决于你住在哪里或者你感兴趣的公司类型。在英国,玻璃门或的确都是不错的选择。但如果你想加入一家初创公司,安吉尔可能是你的选择。

不过最重要的一点是:不要浪费时间。每天你应该用不到 50%的专属求职时间寻找合适的职位,其余的时间去申请,包括填写大量公司简介的数据和写漂亮的求职信。这听起来可能需要很多时间,但请记住,你还应该做一些兼职项目,在 LinkedIn 上保持活跃,最终准备面试,还要有自己的生活,所以你可以明白为什么我们不想浪费任何时间,如果不值得工作的话。

4 应用策略并跟踪所有

找一份全职工作可能比人们通常认为的压力更大。这就是为什么保持条理对你来说很重要:

  • 从分解你的一周开始。周一和周五通常是申请或接触他人的糟糕日子。所以,利用这些日子做你的兼职项目,写求职信,学习一些东西或者寻找周围的人。
  • 应用,应用,应用。当我在找工作时,学校的人告诉我们要争取每周提交 10 到 20 份申请。不知道这个数字是从哪里来的,但是在实践中,这感觉像是一个激进而迫切的目标,但是完全可行且富有成效。
  • 记录每件事。你发申请了吗?在 LinkedIn 上加了个人?给在聚会上认识的人写了封邮件?不管是什么事情,找一个你觉得舒服的工具或方法,并把它写下来。在我的例子中,这个工具是一个简单的谷歌表单。每次我联系某人或申请职位时,我都会写下我联系的人、我是如何联系的、发生的日期以及一些对我自己更有用的数据。这一点尤其重要,如果我到那时还没有得到通知的话,会在整整一周之后跟进每个行动。不要害怕这样做,人们通常不会太在意。
  • **多做一点。无论你是通过求职公告板还是公司网站申请职位,一定要在之后写好封面(简短而甜蜜:两段……一段关于你,一段关于机会和公司),最好通过电子邮件或 LinkedIn 直接发给公司里的某个人。而你在后者没有溢价,不用担心,一条用词恰当的短信会比什么都没有强。

关于求职信已经说了很多,但是以我的经验来看,即使没人看,如果你花时间完整地写了一些关于你申请的机会的东西,它也显示了你的一些东西。

5.准备你的面试

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

Source: Startup Stock Photos at Pexels — free stock images

不为面试做准备就像根本不去一样。在我看来,这些是你总是需要准备的主要东西:

  1. 技术问题:数据科学领域有一系列基本问题,尤其是在初次面试时会被问到。我们不会一一列举这个故事,但是我推荐 Nitin Panwar 的这个故事,你可以很容易地在谷歌上找到几个列出所有这些问题的网站。
  2. 能力问题:这更多的是关于你自己……以前的经历、教育、技能、优势、劣势、动机等。同样,许多在线网站都有这些问题的例子供你准备,尽管我发现这个网站特别好。
  3. 公司和角色:雇主希望员工积极主动,对公司感兴趣,所以一定要尽可能多地研究,并在面试中展示你的知识

如前所述,所有这些观点和建议试图总结我在自己求职过程中发现的所有有用的东西,但也是从我的几个同学的求职中发现的。然而,我敢肯定,许多其他人可能对我在这篇文章中提到的一些事情有不同的体验,或者他们可能有一些额外的东西添加到我在这里试图编译的求职工具包中。如果是这样的话,请一定要在评论中分享你的经验,这样我们都可以从中学习!

请记住,数据科学是一个不断变化的领域。在过去的一年里,它发生了很大的变化,你可以肯定,在未来的几年里,它将继续变化。所以继续前进!听播客,参加聚会,尽可能多的阅读书籍,不断学习新的东西,当然,在 Medium 中保持关注…这是一个让你保持消息灵通的神奇来源。

如果你喜欢这个故事,别忘了看看我最近的一些文章,比如 9 本与数据科学相关的书向圣诞老人索要圣诞礼物一篇 NLP 介绍和 5 个提高游戏技巧。在我的媒体简介中可以找到所有这些和更多🙂。

还有如果你想直接在你的邮箱里收到我的最新文章,只需** 订阅我的简讯 😃**

感谢您的阅读,媒体上见!

您可以使用的 21 种最流行的实时聊天软件解决方案

原文:https://towardsdatascience.com/21-of-the-most-popular-live-chat-software-solutions-you-can-use-f0c5c53ec77e?source=collection_archive---------39-----------------------

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

您知道吗,使用实时聊天软件的企业中有 49%的企业在实施两年内转化率有所提高。

此外,使用它不到一年的 30%的企业声称,由于他们的实时聊天软件,收入增加了 5-10%。这些统计数据凸显了实时聊天对企业日益增长的重要性。

它有助于客户获得对其查询的即时响应。此外,企业主可以将他们的 CRM 数据库与他们的实时聊天软件相集成,以了解客户行为。这反过来可以帮助他们做出更明智的商业决策。总体来说,这是一个双赢的局面。

最佳实时聊天软件

如果你还没有利用实时聊天软件,是时候加入了。毕竟,你想比你的竞争对手更胜一筹。为了帮助你做出明智的决定,我整理了一份最好的实时聊天软件清单,你应该看看。

直播聊天软件#1: 直播聊天

LiveChat 的客户遍布 150 个国家的 27,000 多家公司,显然非常受欢迎。它最大的优点在于简单。

它干净、整洁、易于使用。您可以将它与 130 多种工具无缝集成,包括 Shopify、WordPress、MailChimp 等。因此,您可以在同一个平台上与潜在客户聊天,同时将他们的详细信息添加到您的 CRM 软件中。

根据所提供的功能,它们的价格从每月 16 美元到 50 美元不等。

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

图片 via LiveChat

直播聊天软件#2: Olark

Olark 面向那些希望利用数据来了解客户行为的人。它允许你参与并认同那些看起来最有希望的线索。

这款实时聊天软件提供定制的聊天前调查、实时聊天记录、自动消息传递、访客洞察和详细报告等功能。

Olark 的另一个有趣的特性是,它允许你调整你的实时聊天框的外观,以匹配你的品牌颜色。他们的计划从每月 12 美元开始,一直涨到 17 美元。

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

图像通过 Olark

直播聊天软件#3: 对讲机

想要在您的实时聊天中增加乐趣吗?使用表情符号和 gif。

Intercom 的现代实时聊天旨在引发对话,帮助您与目标受众建立联系,同时保持轻松。它允许您自定义实时聊天,还可以为 web、Android 和 iOS 配置不同的设置。

这款实时聊天软件的定价较高。从 87 美元开始,根据你选择的计划,价格可以超过每月 150 美元。

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

图像通过 对讲机

实时聊天软件#4: 伽椰子

如果提供实时聊天支持是你的最终目标,伽椰子是最好的方式。您可以轻松地将实时聊天功能添加到您的移动应用程序、网站或帮助中心。

即使您的团队离线,伽椰子也允许客户发送他们的问题。另一方面,如果客户走开了,错过了你的信息,这个软件会自动向他们发送一封电子邮件,这样你就可以继续交谈。

他们的计划从每月 15 美元到 60 美元不等。

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

图片经由 伽椰子

实时聊天软件#5: 获取

实时聊天完全是为了延长即时客户服务。有时,通过文本聊天可能还不够。在这种时候,Acquire 的视频和语音通话功能就派上了用场。它可以创造奇迹,提高你与客户的转换质量。

Acquire 的基本月套餐起价为每月 40 美元。他们还为企业制定了单独的计划,附带了许多额外的功能,如支持机器人、视频录制、智能建议等。

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

图像通过 采集

实时聊天软件#6: LiveHelpNow

LiveHelpNow 旨在通过其实时聊天服务、常见问题仪表板、短信支持和其他无缝集成的工具来简化客户支持。

最棒的是,你可以用一个账户支持无限数量的品牌。因此,您可以从一个平台管理您的所有网站。

他们的聊天、支持票和 FAQ 服务每个月都要花费 21 美元。对于电话管理,他们每月收费 9 美元。

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

图片通过LiveHelpNow

实时聊天软件#7: Tawk

要让这个实时聊天软件工作,你所要做的就是复制一个简单的 Javascript 行,并将其粘贴到你的网站的 HTML 中。不到一分钟,它就开始运行了。

最棒的是 Tawk 是完全免费的。如果你不想自己回答客户的问题,你可以从他们那里雇一个聊天代理,每小时 1 美元。

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

图像经图克

直播聊天软件#8: OCC 直播帮助

OCC 是在线聊天中心的缩写。他们的软件旨在迎合所有层次的网站所有者。对于刚创业的人,他们有一个运营商一个网站的免费基础聊天。

这个免费的包允许你监控访问,无限制聊天,上传自定义聊天图标,邀请访问者聊天,等等。对于更高级的功能,他们也有每月 5 美元和 50 美元的其他计划。

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

图像通过OCCLiveHelp

实时聊天软件#9: 用户型

Userlike 的最终目的是帮助你与客户建立关系。使用该软件,您可以使用粘性聊天创建个性化消息。

它的作用是,如果客户第二次回来聊天,他们会将他们连接到之前交谈过的接线员。通过这种方式,他们想在谈话中建立一种连贯性。

他们有一个基本的免费计划,但对于高级功能,你可以选择从€29 到€299 不等的计划。

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

图片经由 用户喜欢的

实时聊天软件#10: 我的实时聊天

想免费和你的网站访问者聊天吗?使用我的 LiveChat 的浮动聊天按钮。要在你的网站上获得它,你只需要插入一个 HTML 代码。它不会干扰你的网站设计,所以你不需要为此烦恼。

其他计划每月从 19 美元开始,直到 99 美元。

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

图片 via 我的 LiveChat

实时聊天软件#11: 谁的

谁知道千篇一律的实时聊天软件并不适用于所有人。因此,他们为那些需要一个适合他们需求的软件的人提供了一个解决方案。他们经验丰富的团队可以帮助你应对你面临的任何挑战。

使用 WhosOn,您可以在内部保存您的聊天数据,并在不同品牌之间定制您的聊天。他们的基本计划是免费的,而最高级的计划每月收费 46 美元。

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

图片 via WhosOn

直播聊天软件#12: 纯聊天

Pure Chat 的免费实时聊天软件包括可定制的小工具、原生 iOS 和 Android 应用程序、无限制聊天和强大的操作员仪表板等功能。他们允许在这个套餐中免费提供 3 个运营商。

你也可以使用他们免费的自动聊天机器人来捕捉线索、安排约会和完成支付。

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

图片经由 纯聊天

实时聊天软件#13: Comm100

Comm10 允许您通过传统的消息、音频、视频联系客户,还提供共同浏览和远程浏览器控制。为了更快地解决问题,你还可以在它的平台上共享URL和文件。

他们的套餐价格从 29 美元起,超过 49 美元。

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

图片经由 Comm100

实时聊天软件#14: JivoChat

这种一体化的业务管理器确保您可以在所有可能的平台上与您的客户取得联系。您可以在一个屏幕上接收电话、电子邮件和聊天。

它还可以选择与 Weebly、Wix、 BigCommerce 等平台集成。你可以免费使用基础版,而专业版每月收费 30 美元。

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

图片经由JivoChat

精选的相关内容:

实时聊天软件#15: 新鲜事

转化、支持或入职——无论你的目标是什么,Freshworks 都有适合你的东西。通过所有阶段,Freshworks 实时聊天选项可以确保客户体验的连贯性。

虽然他们的基本型号是免费的,但最高级的每月费用超过 70 美元。

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

形象经由新鲜出炉

实时聊天软件#16: REVE Chat

这款全渠道实时聊天软件允许您使用共同浏览功能与客户进行互动和协作。

它们还允许屏幕共享以及语音和视频通话,以确保客户获得最佳体验。标准套餐每月 13.50 美元,而企业套餐每月 45 美元。

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

图像通过 查看聊天

实时聊天软件#17: ZaZaChat

使用 ZaZaChat,您可以向您的客户发送基于行为的消息。不要等他们问你问题,你可以根据他们的行动直接发出信息。

甚至在开始聊天之前,您就可以使用他们的预表单功能来收集他们的联系信息。

他们的基本包对所有人都是免费的,而其他的价格范围是每月 14-59 美元。

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

图片经由ZaZaChat

实时聊天软件#18: Zoho SalesIQ

Zoho SalesIQ 相信在客户支持方面采取积极主动的方法。因此,他们的实时聊天功能允许你甚至在访问者键入查询之前就向他们发送消息。基于他们的聊天知识库,你可以嵌入链接到流行的常见问题或其他文章。

当你的员工不在的时候,佐霍会代替你。您可以设置一个离线代理为您处理问题。

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

图片经由 Zoho

实时聊天软件#19: LiveAgent

LiveAgent 让您可以轻松地在多个平台上与客户取得联系。在其实时聊天软件上,你可以为你的社交媒体提及、电子邮件、聊天和电话创建一个通用收件箱。

其他功能包括强大的票务系统、呼叫中心和支持中心。他们的套餐价格在每月 15-39 美元之间。

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

图片 vialive agent

20 号实时聊天软件: Happyfox

Happyfox 很容易安装,只需几分钟就能安装完毕。一旦完成,你就可以将其与你的品牌审美相匹配。你不需要成为编码专家。这是一个简单的过程,需要你遵循几个步骤。

对于那些想要使用实时聊天来获得支持的人和那些想要使用它来增加销售的人,它们有不同的功能。他们的月计划从 29.99 美元到 99.99 美元不等。

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

图像通过happy fox

直播聊天软件#21: Netrox SC

Netrox SC 是为那些想要使用实时聊天来提高销售额的人准备的。他们的实时聊天有一个独特的功能,叫做“聊天区”,允许你跟踪你的网站访问者,对他们进行分类,并开始与他们交谈。

他们的精简版是免费的,而专业版每月收费 14 美元。

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

图片 vianet rox SC

结论

实时聊天可以让您的客户支持更上一层楼。它可以让您在几秒钟内回复客户的查询。在某些情况下,你可以在他们问你之前主动给他们一个答案。

不仅如此,还能提高客户满意度,让你获得更多的转化。我希望你能从上面提到的工具中找到最适合你业务的实时聊天软件。

本文发表在 谢恩巴克 的博客上。

关于作者

谢恩·巴克是内容解决方案礼品公司的创始人兼首席执行官。你可以在推特脸书LinkedInInstagramiTunes 上和他联系。

绝对初学者的 21 熊猫操作

原文:https://towardsdatascience.com/21-pandas-operations-for-absolute-beginners-5653e54f4cda?source=collection_archive---------2-----------------------

先决条件:Python 和 NumPy 基础。

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

Source: https://pandas.pydata.org/

介绍

Pandas 是一个易于使用并且非常强大的数据分析库。像 NumPy 一样,它将大多数基本操作矢量化,即使在 CPU 上也可以并行计算,从而提高计算速度。这里指定的操作是非常基本的,但是如果你刚刚开始接触熊猫,那么这些操作就太重要了。您需要将 pandas 作为“pd”导入,然后使用“pd”对象来执行其他基本的 pandas 操作。

  1. 如何从 CSV 文件或文本文件中读取数据?

CSV 文件以逗号分隔,因此为了读取 CSV 文件,请执行以下操作:

df = pd.read_csv(file_path, sep=’,’, header = 0, index_col=False,names=None)**Explanation:**‘read_csv’ function has a plethora of parameters and I have specified only a few, ones that you may use most often. A few key points:a) **header=0** means you have the names of columns in the first row in the file and if you don’t you will have to specify header=Noneb) **index_col = False** means to not use the first column of the data as an index in the data frame, you might want to set it to true if the first column is really an index.c) **names = None** implies you are not specifying the column names and want it to be inferred from csv file, which means that your header = some_number contains column names. Otherwise, you can specify the names in here in the same order as you have the data in the csv file. 
**If you are reading a text file separated by space or tab, you could simply change the sep to be:**sep = " " or sep='\t'

2。如何使用预先存在的列或 NumPy 2D 数组的字典创建数据框?

使用字典

# c1, c2, c3, c4 are column names. 
d_dic ={'first_col_name':c1,'second_col_names':c2,'3rd_col_name':c3} df = pd.DataFrame(data = d_dic)

使用 NumPy 数组

np_data = np.zeros((no_of_samples,no_of_features)) #any_numpy_arraydf = pd.DataFrame(data=np_data, columns = list_of_Col_names)

3。如何可视化数据框中顶部和底部的 x 值?

df.head(num_of_rows_to_view) #top_values
df.tail(num_of_rows_to_view) #bottom_valuescol = list_of_columns_to_view df[col].head(num_of_rows_to_view)
df[col].tail(num_of_rows_to_view)

4。如何重命名一列或多列?

df = pd.DataFrame(data={'a':[1,2,3,4,5],'b':[0,1,5,10,15]})new_df = df.rename({'a':'new_a','b':'new_b'})

重要的是将返回的数据帧存储到新的数据帧#中,因为重命名不是原位的。

5。如何获取列表中的列名?

df.columns.tolist()

如果您只想遍历名称,不使用 tolist()函数也可以做到这一点,但它会将所有内容作为索引对象返回。

6。如何求一个数列中值的出现频率?

df[col].value_counts() #returns a mapper of key,frequency pairdf[col].value_counts()[key] to get frequency of a key value

7。如何重置现有列或其他列表或数组的索引?

new_df = df.reset_index(drop=True,inplace=False)

如果你做 inplace=True ,就没有必要把它存储到 new_df。此外,当您将索引重置为 pandas RangeIndex()时,您可以选择保留旧索引或使用’ drop '参数将其删除。您可能希望保留它,特别是当它最初是列之一,并且您临时将其设置为 newindex 时。

8。如何删除列?

df.drop(columns = list_of_cols_to_drop)

9。如何更改数据框中的索引?

df.set_index(col_name,inplace=True)

这会将 col_name col 设置为索引。您可以传递多个列来将它们设置为索引。inplace 关键字的作用和以前一样。

10。如果行或列有 nan 值,如何删除它们?

df.dropna(axis=0,inplace=True)

axis= 0 将删除任何具有 nan 值的列,这可能是您在大多数情况下不需要的。axis = 1 将只删除任何列中具有 nan 值的行。原地同上。

11。在给定条件下,如何对数据帧进行切片?

您总是需要以逻辑条件的形式指定一个掩码。
例如,如果您有年龄列,并且您想要选择年龄列具有特定值或位于列表中的数据框。然后,您可以实现如下切片:

mask = df['age'] == age_value 
or
mask = df['age].isin(list_of_age_values)result = df[mask]

具有多个条件:例如,选择高度和年龄都对应于特定值的行。

mask = (df['age']==age_value) & (df['height'] == height_value)result = df[mask]

12。给定列名或行索引值,如何对数据框进行切片?

这里有 4 个选项:at、iat、loc 和 iloc。其中“iat”和“iloc”在提供基于整数的索引的意义上是相似的,而“loc”和“at”提供基于名称的索引。

这里要注意的另一件事是“iat”,在为单个元素“提供”索引时,使用“loc”和“iloc”可以对多个元素进行切片。

Examples:a) 
df.iat[1,2] provides the element at 1th row and 2nd column. Here it's important to note that number 1 doesn't correspond to 1 in index column of dataframe. It's totally possible that index in df does not have 1 at all. It's like python array indexing.b)
df.at[first,col_name] provides the value in the row where index value is first and column name is col_namec)
df.loc[list_of_indices,list_of_cols] 
eg df.loc[[4,5],['age','height']]
Slices dataframe for matching indices and column namesd)
df.iloc[[0,1],[5,6]] used for interger based indexing will return 0 and 1st row for 5th and 6th column.

13。如何对行进行迭代?

iterrows() and itertuples()for i,row in df.iterrows():
    sum+=row['hieght']iterrows() passess an iterators over rows which are returned as series. If a change is made to any of the data element of a row, it may reflect upon the dataframe as it does not return a copy of rows.itertuples() returns named tuplesfor row in df.itertuples():
    print(row.age)

14。如何按列排序?

df.sort_values(by = list_of_cols,ascending=True) 

15。如何将一个函数应用到一个系列的每个元素上?

df['series_name'].apply(f) where f is the function you want to apply to each element of the series. If you also want to pass arguments to the custom function, you could modify it like this.def f(x,**kwargs):
    #do_somthing
    return value_to_storedf['series_name'].apply(f, a= 1, b=2,c =3)If you want to apply a function to more than a series, then:def f(row):
    age = row['age']
    height = row['height']df[['age','height']].apply(f,axis=1)
If you don't use axis=1, f will be applied to each element of both the series. axis=1 helps to pass age and height of each row for any manipulation you want.

16。如何将函数应用于数据框中的所有元素?

new_df = df.applymap(f)

17。如果一个序列的值位于一个列表中,如何对数据帧进行切片?

使用掩码和 isin。要选择年龄在列表中的数据样本:

df[df['age'].isin(age_list)]

要选择相反的情况,年龄不在列表中的数据样本使用:

df[~df['age'].isin(age_list)]

18。如何按列值分组并在另一列上聚合或对其应用函数?

df.groupby(['age']).agg({'height':'mean'})

这将按系列“年龄”对数据框进行分组,对于高度列,将应用分组值的平均值。有时,您可能希望按某一列进行分组,并将其他列的所有相应分组元素转换为一个列表。您可以通过以下方式实现这一目标:

df.groupby(['age']).agg(list)

19。如何为特定列的列表中的每个元素创建其他列的副本?

这个问题可能有点混乱。我实际上的意思是,假设你有下面的数据帧 df:

Age Height(in cm)20  180
20  175
18  165
18  163
16  170

在使用列表聚合器应用 group-by 后,您可能会得到如下结果:

Age Height(in cm)
20  [180,175]
18  [165,163]
16  [170]

现在,如果您想通过撤消上一次操作返回到原始数据框,该怎么办呢?你可以使用熊猫 0.25 版本中新引入的名为 explode 的操作来实现。

df['height'].explode() will give the desired outcome.

20。如何连接两个数据帧?

假设您有两个数据帧 df1 和 df2,它们具有给定的列名、年龄和高度,并且您想要实现这两个列的连接。轴=0 是垂直轴。这里,结果数据帧将具有从数据帧追加的列:

df1 --> name,age,height
df2---> name,age,heightresult = pd.concat([df1,df2],axis=0)

对于水平连接,

df1--> name,agedf2--->height,salaryresult = pd.concat([df1,df2], axis=1) 

21。如何合并两个数据框?

For the previous example, assume you have an employee database forming two dataframes likedf1--> name, age, heightdf2---> name, salary, pincode, sick_leaves_takenYou may want to combine these two dataframe such that each row has all details of an employee. In order to acheive this, you would have to perform a merge operation.df1.merge(df2, on=['name'],how='inner')This operation will provide a dataframe where each row will comprise of name, age, height, salary, pincode, sick_leaves_taken. how = 'inner' means include the row in result if there is a matching name in both the data frames. For more read: [https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html?highlight=merge#pandas.DataFrame.merg](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html?highlight=merge#pandas.DataFrame.merge)e

总结

作为初学者,对于任何数据分析项目,您可能需要非常了解这些操作。我一直认为 Pandas 是一个非常有用的库,现在你可以集成各种其他数据分析工具和语言。在学习支持分布式算法的语言时,了解 pandas 的操作甚至会有所帮助。

接触

如果你喜欢这篇文章,请鼓掌并与其他可能会发现它有用的人分享。我真的很喜欢数据科学,如果你也对它感兴趣,让我们在 LinkedIn上联系或者在这里关注我走向数据科学平台。

适用于初学者的 27 种数字操作

原文:https://towardsdatascience.com/27-things-that-a-beginner-needs-to-know-about-numpy-edda217fb662?source=collection_archive---------10-----------------------

初学者的数据操作。

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

Source: scipy-lectures.org

简介

在我之前的一篇关于 21 熊猫绝对初学者操作的文章中,我讨论了一些重要的操作,可以帮助新手开始数据分析。这篇文章应该为 NumPy 提供类似的目的。简单介绍一下,NumPy 是一个非常强大的库,可以用来执行各种操作,从寻找数组的平均值到快速傅立叶变换和信号分析。从这个意义上说,它非常类似于 MATLAB。

您需要将 NumPy 作为“np”导入,然后使用它来执行操作。

操作:

  1. 将列表转换为 n 维 NumPy 数组
numpy_array = np.array(list_to_convert)

2。np.newaxis 和 np.reshape 的使用

np.newaxis 用于创建大小为 1 的新维度。例如

a = [1,2,3,4,5] is a list
a_numpy = np.array(a)

如果你打印a_numpy.shape,你会得到(5,)。为了使其成为行向量或列向量,可以这样做

row_vector = a_numpy[:,np.newaxis] ####shape is (5,1) now
col_vector = a_numpy[np.newaxis,:] ####shape is (1,5) now

类似地,np.reshape 可以用来整形任何数组。例如:

a = range(0,15) ####list of numbers from 0 to 14
b = a.reshape(3,5) 
b would become:
[[0,1,2,3,4],
 [5,6,7,8,9],
 [10,11,12,13,14],
 [15,16,17,18,19]]

3。将任何数据类型转换为 NumPy 数组

用 np.asarray .作 eg

a = [(1,2), [3,4,(5)], (6,7,8)]
b = np.asarray(a)
b::
array([(1, 2), list([3, 4, (5, 6)]), (6, 7, 8)], dtype=object)

4。得到一个 n 维的零数组。

a = np.zeros(shape,dtype=type_of_zeros)
type of zeros can be int or float as it is required
eg.
a = np.zeros((3,4), dtype = np.float16)

5。获取 1 的 n 维数组。

类似于 np.zeros:

a = np.ones((3,4), dtype=np.int32)

6。np.full 和 np.empty

np.full 用于用一个特定值填充数组,而 np.empty 通过用随机值初始化它们来帮助创建数组。例如。

**1.** np.full(shape_as_tuple,value_to_fill,dtype=type_you_want)
a = np.full((2,3),1,dtype=np.float16)a would be:
array([[1., 1., 1.],
       [1., 1., 1.]], dtype=float16)**2.** np.empty(shape_as_tuple,dtype=int)
a = np.empty((2,2),dtype=np.int16)
a would be:array([[25824, 25701],
       [ 2606,  8224]], dtype=int16) The integers here are random.

7。用 np.arrange 和 np.linspace 得到一个等间距值的数组

两者都可以用于排列,以创建元素间距均匀的数组。

林空间:

np.linspace(start,stop,num=50,endpoint=bool_value,retstep=bool_value)**endpoint specifies if you want the stop value to be included and retstep tells if you would like to know the step-value.'num' is the number of integer to be returned where 50 is default Eg,**np.linspace(1,2,num=5,endpoint=False,retstep=True)This means return 5 values starting at 1 and ending befor 2 and returning the step-size.output would be:
(array([1\. , 1.2, 1.4, 1.6, 1.8]), 0.2) ##### Tuple of numpy array and step-size

阿兰格:

np.arange(start=where_to_start,stop=where_to_stop,step=step_size)

如果只提供了一个数字作为参数,它被视为一个停止,如果提供了两个,它们被假定为开始和停止。注意这里的拼写。

8。寻找 NumPy 数组的形状

array.shape

9。知道 NumPy 数组的维数

x = np.array([1,2,3])
x.ndim will produce 1

10。寻找 NumPy 数组中元素的个数

x = np.ones((3,2,4),dtype=np.int16)
x.size will produce 24

11。获取一个 n 维数组所占用的内存空间

x.nbytesoutput will be 24*memory occupied by 16 bit integer = 24*2 = 48

12。查找 NumPy 数组中元素的数据类型

x = np.ones((2,3), dtype=np.int16)x.dtype will produce
dtype('int16')It works better when elements in the array are of one type otherwise typecasting happens and result may be difficult to interpret.

13。如何创建 NumPy 数组的副本

使用 np.copy

y = np.array([[1,3],[5,6]])
x = np.copy(y)If,
x[0][0] = 1000Then,
x is
100 3
5 6y is
1 3
5 6

14。获取 n-d 数组的转置

使用 array_name。T

x = [[1,2],[3,4]]
x
1 2
3 4x.T is
1 3
2 4

15。展平 n-d 数组得到一维数组

使用 np.reshape 和 np.ravel:

np.reshape:这真是一个又好又甜的把戏。在整形时,如果您提供-1 作为维度之一,那么它是从元素的数量中推断出来的。例如,对于一个大小为(1,3,4)的数组,如果它被整形为(-1,2,2),,那么第一维的长度被计算为3。所以,

If x is:
1 2 3
4 5 9
Then x.reshape(-1) produces:
array([1, 2, 3, 4, 5, 9])

np .拉威尔

x = np.array([[1, 2, 3], [4, 5, 6]])x.ravel() produces
array([1, 2, 3, 4, 5, 6]) 

16。改变 n-d 数组的轴或交换维度

使用 np.moveaxis 和 np.swapaxes。

x = np.ones((3,4,5))
np.moveaxis(x,axes_to_move_as_list, destination_axes_as_list)
For eg.x.moveaxis([1,2],[0,-2])This means you want to move 1st axis to 0th axes and 2nd axes to 2nd last axis. So,the new shape would be.(4,5,3)

转换没有到位,所以不要忘记将它存储在另一个变量中。

np.swapaxes。

x = np.array([[1,2],[3,4]])x.shape is (2,2) and x is
1 2
3 4np.swapaxes(x,0,1) will produce
1 3
2 4If x = np.ones((3,4,5)), and
y = np.swapaxes(0,2)
y.shape will be
(5,4,3)

17。将 NumPy 数组转换为列表

x = np.array([[3,4,5,9],[2,6,8,0]])
y = x.tolist()
y will be
[[3, 4, 5, 9], [2, 6, 8, 0]]

NumPy 文档提到,如果 x 是一维数组,使用list(x)也可以。

18。更改 NumPy 数组中元素的数据类型。

使用 ndarray.astype

x = np.array([0,1,2.0,3.0,4.2],dtype=np.float32)x.astype(np.int16) will producearray([0, 1, 2, 3, 4], dtype=int16)x.astype(np.bool) will produce 
array([False,  True,  True,  True,  True])

19。获取非零元素的索引

使用 n-dim_array .非零()

x = np.array([0,1,2.0,3.0,4.2],dtype=np.float32)
x.nonzero() will produce(array([1, 2, 3, 4]),) It's important to note that x has shape (5,) so only 1st indices are returned. If x were say,x = np.array([[0,1],[3,5]])
x.nonzero() would produce (array([0, 1, 1]), array([1, 0, 1]))So, the indices are actually (0,1), (1,0), (1,1). 

20。排序 NumPy 数组

使用 NP . ndarray . sort(axis = axis _ you _ want _ to _ sort _ by)

x = np.array([[4,3],[3,2])
x is
4 3
3 2x.sort(axis=1) #sort each row3 4
2 3x.sort(axis=0) #sort each col3 2
4 3

21。将 NumPy 数组与值进行比较

比较将产生布尔类型的 n 维数组。例如

x = np.array([[0,1],[2,3]])x==1 will produce
array([[False,  True],
       [False, False]])

如果你想数 x 中的数字 1,你可以这样做

(x==1).astype(np.int16).sum()

它应该输出1

22。将两个数字矩阵相乘

使用 numpy.matmul 获取二维矩阵的矩阵乘积:

a = np.eye(2) #identity matrix of size 2
a
1 0
0 1b = np.array([[1,2],[3,4]])
b
1 2
3 4np.matmul(a,b) will give
1 2
3 4

如果我们提供一个一维数组,那么输出可能会非常不同,因为将使用广播。我们将在下面进行讨论。此外,还有另一个名为np.multiply的函数,它执行元素到元素的乘法。对于前两个矩阵,np.multiply(a,b)的输出为。

1 0
0 4

23。两个数组的点积

np.dot(矩阵 1,矩阵 2)

a = np.array([[1,2,3],[4,8,16]])
a:
1 2 3
4 8 16b = np.array([5,6,11]).reshape(-1,1)b:
5
6
11np.dot(a,b) produces
38
160
Just like any dot product of a matrix with a column vector would produce.

行向量与列向量的点积将产生:

if a is array([[1, 2, 3, 4]])
and b is:

array([[4],
       [5],
       [6],
       [7]])np.dot(a,b) gives:array([[60]])a's shape was (1,4) and b's shape was (4,1) so the result will have shape (1,1)

24。获取两个 numpy 向量的叉积

从物理学上回忆向量叉积。它是关于一点的力矩的方向。

x = [1,2,3]
y = [4,5,6]z = np.cross(x, y)z is:
array([-3,  6, -3]) 

25。获取数组的梯度

使用 np.gradient. NumPy 使用泰勒级数和中心差分法计算梯度。你可以在这篇文章中读到更多。

x = np.array([5, 10, 14, 17, 19, 26], dtype=np.float16)np.gradient(x) will be:
array([5\. , 4.5, 3.5, 2.5, 4.5, 7\. ], dtype=float16)

二十六。NumPy 数组怎么切片?

For single element:
x[r][c] where r,c are row and col number of the element.For slicing more than one element.x:
2 4 9
3 1 5
7 8 0and you want 2,4 and 7,8 then dox[list_of_rows,list_of_cols] which would bex[[0,0,2,2],[0,1,0,1]] producesarray([2, 4, 7, 8])If one of the rows or cols are continuous, it's easier to do it:x[[0,2],0:2] producesarray([[2, 4],
       [7, 8]])

二十七。广播

任何关于 NumPy 的文章如果不包括广播都是不完整的。这是一个重要的概念,有助于 NumPy 向量化操作,从而加快计算速度。理解一些规则将有助于你更好地剖析广播。

来自 NumPy 文档:

当操作两个数组时,NumPy 按元素比较它们的形状。它从尾部维度开始,向前推进。在以下情况下,二维是兼容的

1.他们是平等的,或者

2.其中一个是 1

另一件要记住的事情是,

如果尺寸匹配,输出将具有每个尺寸的最大长度。如果其中一个维度的长度为 1,则该维度中的值将重复

假设有两个数组 A 和 B,维度分别为**(3,4,5)****(4,1)** ,你想把这两个数组相加。由于它们没有相同的形状,NumPy 将尝试广播这些值。它开始比较最后一个维度的长度:5 和 1,这两个值不相等,但因为其中一个是 1,所以它将重复,最终输出在最后一个维度的长度为 5。

两者的倒数第二个尺寸具有相同的长度4

A 中倒数第三个维度或第一个维度的长度为3,而 B 没有任何长度。**当一个向量中缺少一个维度时,NumPy 会在向量前加 1。**于是,B 变成了**(1,4,1)** **。**现在,长度匹配为 3 和 1,值在 b 中重复 3 次。最终输出将具有形状**(3,4,5)**

a :3 5 8
4 5 6
9 7 2b :b = [2,3,4]a's shape: (3,3)
b's shape: (3,)Last dimension has same length 3 for the two and then 1 is prepended to the the dimension of b as it doesn't have anything in that dimension. So, b becomes [[2,3,4]] having shape (1,3). Now, 1st dimension match and values are repeated for b. Finally, b can be seen as2 3 4
2 3 4
2 3 4So, a+b produces5 8 12
6 8 10
11 10 6

查看更多广播上的这些帖子:第一第二

总结

感谢您的阅读。希望这篇文章对需要入门 NumPy 的人有所帮助。我发现这些操作非常有用,把它们放在我们的提示中总是好的。这些操作非常基本,在 NumPy 中可能有不同的方法来实现相同的目标。除了一些其他的帖子,我大部分时候使用 NumPy 文档作为参考,这些帖子的链接已经提供了。此外,如果你有兴趣,可以看看我关于绝对初学者的 21 熊猫操作Spark 装置的帖子。

接触

如果你喜欢这篇文章,请分享给其他可能会觉得有用的人。我真的很喜欢数据科学,如果你也对它感兴趣,让我们在 LinkedIn 上联系,或者在这里关注我走向数据科学平台。

2D 还是 3D?用于心脏图像自动分割的卷积神经网络的简单比较

原文:https://towardsdatascience.com/2d-or-3d-a-simple-comparison-of-convolutional-neural-networks-for-automatic-segmentation-of-625308f52aa7?source=collection_archive---------1-----------------------

卷积神经网络(CNN)已经显示出对大量计算机视觉任务的承诺。这些应用中包括自动分割。医学成像的分割在研究环境中用于计算建模、定量研究和基于人群的分析的发展。此外,医学成像分割在从诊断到患者专用设备开发的行业中都有应用。根据应用的不同,单个扫描体积的手动分割可能需要几个小时。另一方面,训练有素的 CNN 可以在几秒钟内准确地分割扫描的结构。因此,CNN 有可能补充传统的医学成像工作流程,降低相关成本。

用于分割的 CNN 可以基于所使用的卷积核的维度来分类。2D CNN 使用 2D 卷积核来预测单个切片的分割图。通过一次对一个切片进行预测,对整个体积的分割图进行预测。2D 卷积核能够利用切片的高度和宽度来进行预测。然而,由于 2D CNN 采用单个切片作为输入,它们本质上无法利用来自相邻切片的上下文。来自相邻切片的体素信息对于分割图的预测可能是有用的。

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

2D CNNs predict segmentation maps for MRI slices in a single anatomical plane.

3D CNNs 通过使用 3D 卷积核对扫描的体积块进行分割预测来解决这个问题。利用片间上下文的能力可以提高性能,但是由于这些 CNN 使用的参数数量增加,因此会带来计算成本。

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

3D CNNs use 3D convolutional kernels to predict segmentation maps for volumetric patches of an MRI volume.

那么,3D CNNs 到底好到什么程度,值得付出额外的代价吗?在这篇文章中,我通过一个简单的实验来探究这个问题。我在心脏成像数据集上比较了 2D 和 3D CNNs 的性能。由此产生的度量产生关于这两种类型的 CNN 之间的性能差距的直觉。

2D 和 3D CNNs 被训练用于从磁共振成像(MRI)中自动分割心脏的任务。来自[1]的数据集被用于此。该数据集包含 33 名患者的磁共振成像,其中每名患者与 20 个不同的体积相关联,在不同的时间步骤拍摄。前 25 名患者用于训练(5920 个轴向切片)。剩余的扫描被保留用于测试(2060 个切片)。数据集提供了心内膜和心外膜的注释轮廓。这些注释用于创建具有 3 个类别的分割图:背景、心肌和内腔。

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

Original slice, annotated contours, and resulting ground truth segmentation map used in the experiments.

一个完全卷积的 2D CNN [2]被训练用于扫描的分段。切片保持原始分辨率(256×256 像素),并且使用 8 的批量大小来训练模型。使用完整的 2D 切片来训练该模型。

一个 3D CNN [3]被训练来完成同样的任务。用于训练 2D CNN 的设置对于 3D CNN 保持相同,除了输入大小和批量大小。3D CNN 在来自训练集的尺寸为 256×256×8、批量为 1 的 3D 面片上进行训练。

这两个 CNN 在训练期间都增加了两个辍学层[4]和深度监督[5],我几乎总是用它来训练深度学习模型,不管应用程序如何。模型训练 50k 次迭代,学习率 5e-6;每种模式都需要大量的训练。没有使用数据扩充。

通过在每个测试扫描上取分割预测的平均骰子相似性系数(DSC ),在测试扫描上评估模型。这有助于将 DSC 视为“准确性”的更具鉴别力的版本。2D 有线电视新闻网通过扫描每一片进行推断,一次一片。利用 3D CNN 的推断是通过从扫描中迭代采样 3D 片来执行的,直到扫描中的所有体素都具有与其相关联的预测。

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

Classwise and overall DSC results for each CNN

当查看 DSC 时,它有助于检查分割图上较小结构(即,非背景)的特定于类别的 DSC,因为 DSC 度量对于类别频率不是不变的。看起来 3D CNN 的表现更好。这两种型号之间的性能差距比我预期的要大得多。以下是预测的一些定性结果。确实有一些 3D CNN 明显更胜一筹的例子。

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

Some qualitative results: Original slice (top row), 2D CNN predictions (middle), 3D CNN predictions (bottom). Notice the first two columns, where the 3D CNN performed much better.

有一些考虑要讨论。2D CNN 在单个 1080 Ti GPU 上训练,批量大小为 8 个切片,尺寸为 256x256。另一方面,3D CNN 需要 2 个 GPU,批量大小为 1,面片尺寸为 256x256x8。此外,我最初使用更小的补丁(94x94x8)来训练 3D CNN,以便在训练期间增加批量大小,但这导致了非常差的结果。因此,当训练 3D CNNs 时,在切片平面上保持大视野可能是有益的。训练的速度是另一个考虑因素。2D CNN 的训练迭代每次耗时约 0.5 秒(我在实际训练步骤的同时执行了所有批处理预处理)。3D CNN 的训练步骤持续 3 秒钟;大约 6 倍长!这就是训练一个神经网络一天和训练一个神经网络差不多一周的区别!另一个注意事项:因为 3D 面片的深度为 8,而 3D CNN 的输出步幅为 16,所以最大池层会有一些复杂情况。对于最大池层,我对高度和宽度维度使用了步幅 2,但对深度维度保持了步幅 1。如果不这样做,批的深度尺寸将在正向传递过程中变为零。

那么 3D CNNs 值得努力吗?在我看来,是的!但是要放聪明点。如果你是第一次处理一个新问题,从 2D CNN 开始,这样你就可以快速重复实验。在你认为你已经把所有的旋钮都调好之后,再升级到 3D CNNs。此外,对于您的 3D CNNs,您可以通过使用更小的补丁或下采样训练实例来开始训练,以便在训练结束时微调到所需的分辨率之前加快训练步骤!

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

Source

想聊聊深度学习?在 LinkedIn 上联系我或者在下面留言。

参考文献

[1] Andreopoulos A,tsos JK。用于心脏 MRI 分析的形状和外观的有效且可概括的统计模型。

[2] Ronneberger O,Fischer P,Brox T. U-net:用于生物医学图像分割的卷积网络。

[3]米莱塔里·F·纳瓦卜·N·艾哈迈德·萨 V-net:用于体积医学图像分割的全卷积神经网络。

[4] Srivastava N,Hinton G,Krizhevsky A,Sutskever I,Salakhutdinov R. Dropout:防止神经网络过拟合的简单方法。

[5]李振宇,谢,张,涂.深度监督网.

面向数据科学家的 3 个高级 Python 函数

原文:https://towardsdatascience.com/3-advanced-python-functions-for-data-scientists-f869016da63a?source=collection_archive---------8-----------------------

Python 可以带来很多乐趣。重新发明一些你一开始不知道存在的内置函数并不是一件困难的事情,但是为什么你会想这么做呢?。今天,我们来看看其中的三个函数,我每天或多或少都会用到它们,但在我的数据科学职业生涯中,有很长一段时间我都没有意识到。

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

Photo by Drew Beamer on Unsplash

虽然它们可能不会节省大量的时间(,如果你理解背后的逻辑),你的代码看起来会干净得多。也许对你来说这听起来没什么大不了的,但是未来你会感激的。

几周前,我发布了一篇关于一些基本纯 Python 技能的文章,,这篇文章涵盖了一些其他很酷的内置函数,所以一定要看看:

[## 数据科学家的 3 项基本 Python 技能

你不需要图书馆做所有的事情。纯 Python 有时候是绰绰有余的。

towardsdatascience.com](/3-essential-python-skills-for-data-scientists-b642a1397ae3)

事不宜迟,就从第一个开始吧!

地图()

map() 是一个内置的 Python 函数,用于将一个函数应用于一系列元素,如列表或字典。这可能是对数据进行某种操作的最干净、最易读的方式。

在下面的例子中,目标是对列表中的数字求平方。首先,必须声明这样做的函数,然后我将展示在有和没有 map() 函数的情况下如何实现,因此是以非 python 化python 化的方式。

nums = [1, 2, 3, 4, 5]# this function will calculate square
def square_num(x): 
    return x**2 **# non-pythonic approach**
squares = []
for num in nums:
    squares.append(square_num(num))

print('Non-Pythonic Approach: ', squares) **# pythonic approach**
x = map(square_num, nums)
print('Pythonic Approach: ', list(x))

输出基本上是一样的,但是花一点时间来体会一下python 式方法看起来有多干净。也不需要循环。

zip()

zip() 是我的最爱之一。它使你能够同时遍历两个或更多的列表。这在处理日期和时间时会派上用场。

例如,当我有一个属性表示某个事件的开始时间,第二个属性表示该事件的结束时间时,我每天在工作中使用它。为了进一步分析,几乎总是需要计算它们之间的时间差,而目前为止最简单的方法就是使用 zip 来完成。

在这个例子中,我创建了两个包含数字的列表,任务是对相应的元素求和:

first = [1, 3, 8, 4, 9]
second = [2, 2, 7, 5, 8]# Iterate over two or more list at the same time
for x, y in zip(first, second):
    print(x + y)

如此简单干净。

过滤器()

filter() 函数类似于 map() —它也将函数应用于某些序列,不同的是 filter() 将只返回那些被评估为 True 的元素。

在下面的例子中,我创建了一个任意的数字列表和一个函数,如果数字是偶数,该函数将返回 True。我将再次演示如何以非 python 化python 化的方式执行操作。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# Will return true if input number is even
def even(x):
    return x % 2 == 0**# non-pythonic approach**
even_nums = []
for num in numbers:
    if even(num):
        even_nums.append(num)

print('Non-Pythonic Approach: ', even_nums)**# pythonic approach**
even_n = filter(even, numbers)
print('Pythonic Approach: ', list(even_n))

再说一次,python 式的方式要干净得多,可读性也更好——这是你将来会喜欢的。

在你走之前

在 Python 中有更多类似于 3 的函数,但是我不认为它们在数据科学中有太多的适用性。实践这三条,当你在工作或大学中面临任何挑战时,记住它们。重新发明轮子太容易了,但是没有意义。

你日常使用的内置函数有哪些?随意分享。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

实现预测分析现代化的 3 种方法

原文:https://towardsdatascience.com/3-approaches-to-modernizing-predictive-analytics-7ed38b5250d3?source=collection_archive---------36-----------------------

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

各行各业各种规模的公司都在想方设法利用大数据的力量做出更好的决策。为了提供有价值的见解并满足预期,数据科学团队长期以来一直求助于预测分析,或使用历史数据对问题进行建模,并揭示过去产生特定结果的关键因素,以对未来进行预测。预测分析已经存在多年了;然而,在机器学习之前,这项技术不容易实时采用或扩展。

机器学习正在使预测分析现代化,为数据科学家提供了通过更多实时洞察来增强其工作的能力。得益于混合云基础架构机遇,现在可以快速高效地在几乎任何业务应用中嵌入和扩展预测分析。

实时处理大量数据的能力可以带来更准确的预测,从而做出更好的商业决策。然而,预测分析的现代化并非没有挑战。这里有一些公司可以现代化部署其遗留预测模型的方法,以及这些流行方法的优缺点。

在新框架上重建模型

组织可以采用现有的训练和验证数据集,并在最新的技术框架内重建它们,从而实现现代预测模型。例如,公司可以使用类似的算法(例如,使用 H2O.ai 或 scikit-learn)重建他们的预测模型,并将其与传统模型结果进行比较。

-赞成

在新框架中简单地重建预测模型的主要优势在于,组织可以重用现有的数据集、代码和以前成功的算法。在一个新的框架中重建模型是一个相对简单的过程,并且允许公司在实现时理解完整的建模生命周期——不需要太多额外的工作。

-缺点

在新框架中重建预测分析模型的一个缺点是,一旦投入生产,很难立即知道新模型是否会优于旧模型。用新框架更新预测分析模型是使用更多数据驱动模型的好机会。然而,如果公司只是重复使用相同的训练和验证数据集,那么他们可能会错过用新的数据源、功能、算法等更新数据集的机会。

在新框架上重建预测分析模型也只是第一步。下一步是将模型引入生产环境并部署它们,这可能是一个耗时、复杂的过程,具体取决于所使用的框架和生产平台。总的来说,在新框架上部署旧模型的投资回报率可能很低。

在云环境中部署模型

当由于数据隐私法规、行业标准等原因,组织的部分数据和基础架构需要保留在公司防火墙之后时,内部私有环境是必要的。然而,许多企业正在转向云环境或混合云环境来部署预测模型。这种方法有它自己的优缺点。

-赞成

大数据行业正在围绕三个公共云提供商进行整合——谷歌云平台、微软 Azure 和亚马逊网络服务。因此,企业正在迁移到这些服务,以便更灵活地选择和定制他们的环境,并更快地部署预测模型和应用程序。将现有模型迁移到云环境有许多优势,其中包括在已建立的平台和更全面的管理工具上加速测试的能力。

-缺点

过渡到云环境的一个挑战是,许多传统预测分析提供商尚未利用云环境的优势,这使得数据科学团队难以在这一新环境中引入新的算法、框架和应用。公司还需要解决数据将存放在哪里的问题,以及当一切都迁移到第三方云环境时,谁将监控模型和应用程序。

公共云环境正在成为各行各业首选的分析平台;但是,在进行任何更改之前,考虑在另一个环境中部署现有模型的 ROI 和真正的业务挑战和好处是很重要的。

使用 Quickpath 部署模型

对许多公司来说,将预测模型移植到生产环境中是一个关键挑战。需要将模型注入到现有系统中,并在不中断业务活动的情况下高效、经济地执行。与现有的数据分析基础架构无缝协作,因此无论公司位于何处,都可以充分利用其选择的数据和分析工具。

预测分析现代化通常包括将内部系统迁移到云平台,整合历史上分散的数据源,从批处理迁移到实时或流数据接收,以及为用于报告和模型开发目的的单一真实来源设置数据虚拟化层。

借助 Quickpath,数据科学团队可以从传统分析系统转移到现代、高效且可扩展的平台上进行部署。遗留模型可以导出到 Quickpath 平台,而无需重新构建它们。它们可以在新的基础设施中运行,甚至可以与现代机器学习模型并行,用于冠军挑战者测试、集合模型或任何基于人工智能的决策。从本质上讲,公司可以充分利用前两种现代化方法,无需重建遗留模型或将所有运营数据迁移到新环境中。Quickpath 在提供这些功能并利用现代数据科学的最新数据解决方案的同时,将这些环境联系起来。公司可以按照他们的时间表进行现代化,并专注于提供最高 ROI 的工作。

Quickpath 平台具有将人工智能和预测模型投入生产所需的四项关键功能,包括:

通用模型管理 —所有模型和决策的中央存储库。企业可以跟踪每个模型、结果和用于决策的数据,还可以访问报告和分析,以及主动漂移和异常检测。

实时决策 —实时部署模型、数据和规则,以提出最具商业价值的建议。

集成能力 —支持预测分析的人员、流程和技术的集成,以及连接和集成相关系统的开放式架构。

弹性运行时环境 —配置和扩展弹性运行时环境以在任何地方运行。

大数据分析市场正在发生巨大变化。事实上,该市场预计将以 29.7%的复合年增长率(CAGR)增长,到 2023 年将达到 406 亿美元。预测分析的现代化意味着组织最终将走出试验阶段,不仅可以做出更快、更明智的决策,还可以从部署中实现真正的商业价值。

图像来源

原载于 2019 年 6 月 5 日【https://www.quickpath.com】

针对每个数据集的 3 种出色的可视化技术

原文:https://towardsdatascience.com/3-awesome-visualization-techniques-for-every-dataset-9737eecacbe8?source=collection_archive---------4-----------------------

同时学习一些关于足球的知识

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

可视化很棒。然而,一个好的视觉化很难实现。

此外,向更多的观众展示这些可视化效果需要时间和精力。

我们都知道如何制作条形图、散点图和直方图,然而 我们却不太注意美化它们。

这伤害了我们——我们在同事和经理中的信誉。你现在感觉不到,但它确实发生了。

此外,我发现重用我的代码是必要的。每当我访问一个新的数据集时,我需要重新开始吗?一些 图形的可重用思想可以帮助我们快速找到有关数据的信息。

在这篇文章中,我还将谈论 3 个很酷的视觉工具:

  • 与图形的分类相关,
  • 配对图,
  • 使用 Seaborn 的群集图和图形注释。

简而言之,这个帖子讲的是有用的、像样的图。

我将使用 FIFA 19 完整球员数据集中的数据,这些数据来自于ka ggle——在最新版本的 FIFA 19 数据库中注册的每个球员的详细属性。

由于数据集有许多列,我们将只关注分类列和连续列的子集。

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

Player Data

这是一个格式很好的数据,但是我们需要对工资和价值列做一些预处理(因为它们是欧元并且包含字符串),使它们成为数字,以便我们进行后续分析。

与图形的分类相关性:

简单来说,相关性是衡量两个变量如何一起移动的指标。

例如,在现实世界中,收入和支出是正相关的。如果一个增加,另一个也会增加。

学习成绩和电子游戏使用率呈负相关。一个因素的增加预示着另一个因素的减少。

因此,如果我们的预测变量与我们的目标变量正相关或负相关,这是有价值的。

当我们试图理解我们的数据时,不同变量之间的相关性是一件很好的事情。

我们可以很容易地使用 Seaborn 创建一个很好的相关图。

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

Where did all the categorical variables go?

但是你注意到什么问题了吗?

是的,这个图形只计算数字列之间的相关性。

如果我的目标变量是 ***Club*** 或者 ***Position?***怎么办

我希望能够获得三种不同情况之间的相关性,我们使用以下相关性指标来计算它们:

1.数字变量

我们已经有了这种形式的皮尔逊相关,它是两个变量如何一起移动的度量。范围从[-1,1]

2.分类变量

我们将使用克莱姆的 V 来表示分类-分类案例。它是两个离散变量的相互关系,用于具有两个或多个层次的变量。这是一个对称的度量,因为变量的顺序无关紧要。克莱姆(A,B) ==克莱姆(B,A)。

例如:在我们的数据集中,ClubNationality一定有某种关联。

让我们使用堆积图来检查这一点,这是理解分类变量与分类变量之间分布的一种极好的方式。我们使用数据的子集,因为在这个数据中有很多国籍和俱乐部。

我们只保留最好的球队(保留波尔图只是为了样本更加多样化)和最常见的国籍。

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

俱乐部偏好在很大程度上说明了国籍:了解前者有助于预测后者。

我们可以看到,如果一名球员属于英格兰,他更有可能在切尔西或曼联踢球,而不是在巴塞罗那或拜仁慕尼黑或波尔图。

这里有一些信息。克莱姆的 V 也捕捉到了同样的信息。

如果所有俱乐部都有相同比例的每个国籍的球员,克莱姆的 V 就是 0。

如果每个俱乐部都偏好单一国籍克拉默的 V ==1,比如所有英格兰球员都在曼联踢球,所有德国人都在拜仁慕尼黑等等。

在所有其他情况下,其范围为[0,1]

3.数字和分类变量

对于分类连续的情况,我们将使用相关比率

在不涉及太多数学知识的情况下,这是一种离散度的度量。

给定一个数字,我们能找出它属于哪一类吗?

例如:

假设我们的数据集中有两列:SprintSpeedPosition:

  • GK: 58(德基)、52(库尔图瓦)、58(诺伊尔)、43(布冯)
  • 68(D. Godin),59(V. Kompany),73(S. Umtiti),75(M. Benatia)
  • 91(C 罗),94(G .贝尔),80(S .阿圭罗),76(R .莱万多夫斯基)

如你所见,这些数字很好地预测了他们所处的阶段,因此相关率很高。

如果我知道冲刺速度超过 85,我绝对可以说这个玩家在圣

这个比率的范围也是从[0,1]

完成这项工作的代码取自 dython 包。我不会写太多代码,反正你可以在我的 Kaggle 内核中找到。最终结果看起来像这样:

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

Categorical vs. Categorical, Categorical vs. Numeric, Numeric vs. Numeric. Much more interesting.

是不是很美?

光看这些数据,我们就能了解足球这么多。例如:

  • 球员的位置与运球能力高度相关。你不会在后面打梅西。对吗?
  • 与运球相比,价值与传球和控球的相关性更高。规则是总是传球。内马尔,我在看着你。
  • 俱乐部和工资有很高的相关性。意料之中。
  • 体型和喜欢的脚高度相关。这是否意味着如果你很瘦,你很可能是左撇子?没多大意义。可以进一步调查。

此外,我们可以从这个简单的图表中找到很多信息,这些信息在没有分类变量的典型相关图中是看不到的。

我把它留在这里。人们可以更多地观察图表,找到更有意义的结果,但关键是,这使得寻找模式变得更加容易。

配对图

虽然我谈了很多关于相关性的内容,但这是一个变化无常的指标。

为了理解我的意思,让我们看一个例子。

Anscombe 的四重奏由四个数据集组成,这四个数据集具有几乎相同的相关性 1,但具有非常不同的分布,并且在绘制时显得非常不同。

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

Anscombe Quartet — Correlations can be fickle.

因此,有时绘制相关数据变得至关重要。并单独查看分布情况。

现在我们的数据集中有许多列。把它们都画出来会很费力。

不,这只是一行代码。

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

非常好。我们可以在这张图表中看到很多。

  • 工资和价值高度相关。
  • 大多数其他值也是相关的。然而,潜力与价值的趋势是不寻常的。我们可以看到,当我们达到一个特定的潜在阈值时,值是如何呈指数增长的。这些信息有助于建模。可以用一些势的变换使它更相关。

**警告:**没有分类列。

我们能做得更好吗?我们总是可以的。

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

如此多的信息。只需添加参数hue作为分类变量Club

  • 波尔图的工资分配太偏向下层了。
  • 我没有看到波尔图球员价值的陡峭分布。波尔图的球员会一直寻找机会。
  • 看看很多粉红色的点(切尔西)是如何在潜在工资图表上形成一个集群的。切尔西有很多高潜力球员,但工资较低。需要更多的关注。

我已经知道了工资/价值支线剧情的一些要点。

工资 500k 的蓝点是梅西。此外,比梅西更有价值的橙点是内马尔。

虽然这个技巧仍然没有解决分类问题,但是我有一些很酷的东西来研究分类变量的分布。虽然单独来说。

群集图

如何看分类数据和数值数据的关系?

进入图片群情节,就像他们的名字。为每个类别绘制的一群点,在 y 轴上有一点分散,使它们更容易看到。

他们是我目前最喜欢的策划这种关系的人。

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

Swarmplot…

为什么我不用箱线图?**中值在哪里?我能画出来吗?**显然。在顶部覆盖一个柱状图,我们就有了一个看起来很棒的图表。

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

Swarmplot+Boxplot, Interesting

非常好。我们可以看到图表上的单个点,看到一些统计数据,并明确了解工资差异。

最右点是梅西。然而,我不应该在图表下面的文字中告诉你。对吗?

这张图表将会在演示中出现。你的老板说。我想在这个图上写梅西。进入图片注释

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

Annotated, Statistical Info and point swarm. To the presentation, I go.

  • 看那边的波尔图。用这么少的工资预算和巨头竞争。
  • 皇马和巴萨有这么多高薪球员。
  • 曼彻斯特市的工资中位数最高。
  • 曼联和切尔西相信平等。许多球员聚集在同一工资等级附近。
  • 我很高兴,虽然内马尔比梅西更受重视,但梅西和内马尔的工资差距很大。

在这个疯狂的世界里一种正常的表象。

结论

概括一下,在这篇文章中,我们讨论了计算和读取不同变量类型之间的相关性,绘制数值数据之间的相关性,以及使用群集图绘制数值数据与分类数据之间的相关性。我喜欢我们如何在 Seaborn 中将图表元素相互叠加。

此外,如果你想了解更多关于可视化的知识,我想从密歇根大学调出一门关于 数据可视化和应用绘图 的优秀课程,它是一个很好的 数据科学专业的一部分,Python 本身就是其中之一。一定要去看看

如果你喜欢这篇文章**,请鼓掌**。这将有助于增加这个职位的覆盖面。将来我也会写更多初学者友好的帖子。在 关注我,或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系

你也可以看看我在 Seaborn 上的另一篇帖子,在那里我创建了一些更简单的可重用图形。

这个 kaggle 内核中的这篇帖子的代码。

参考

  1. 对分类相关性的搜索
  2. Seaborn Swarmplot 文档
  3. Seaborn Pairplot 文件

原载于 2019 年 4 月 19 日https://mlwhiz.com

重温神经网络和深度学习中的 3 个基本概念

原文:https://towardsdatascience.com/3-basic-concepts-in-neural-net-and-deep-learning-revisited-7f982bb7bb05?source=collection_archive---------29-----------------------

准备你的第一次人工智能面试

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

Outskirts of Tokyo! (Source: Saptashwa)

在这篇文章中,我想重温深度学习的一些非常基本的问题/概念;你可能已经问过自己这些问题,或者,你很有可能在你的第一次人工智能面试中遇到这些问题。所以,没有任何延误,让我们这样做吧!

1.线性激活有问题!那为什么用 RELU?或者说,RELU 如何表现非线性?

你可能已经知道为什么(通常)不使用线性激活函数,但是,如果你仍然需要浏览这个概念,这里有一个简短的回顾。

没有激活函数的神经网络本质上是一个线性回归模型。因此,使用线性激活函数将始终线性映射输入,无论有多少层。让我们通过一个简单的演示来看看:

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

这里,我们考虑一个简单的具有 1 个隐藏层的神经网络。如果您扩展最终方程(将给出输出),它将始终是输入的线性函数,即使您添加更多具有线性激活函数的层。因此,所有的隐藏层都可以用线性激活的单一层代替。

但是,现在出现了第二个问题。**经过整流的线性单位(RELU)怎么能代表非线性?**这是一个有点棘手的问题。首先,我们来看看一次函数的定义。函数 f: A→ B 是线性的,如果对于域 Af 中的每个 xy 具有以下性质

f(α x + β y) = α f(x) + β f(y) …。(1)并且,这个方程更简化的版本是 f(x+y) = f(x) + f(y)…。 (2) RELU 定义为 *f(x) = max(0,x)。*正如你所看到的,RELU 不满足这两个方程,所以它是一个非线性函数。然而,很难想象一个在一半输入域为零而在另一半输入域为线性的函数如何能表示复杂的非线性!在这里,我将向您展示一个简单的逐步添加线性输入的例子,看看 RELU 如何帮助我们将线性输入映射到非线性输出(例如:y=x)。

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

如图所示,只需将 RELU 激活的线性输入相加,我们就可以得到 y=x 的一个很好的表示。让我们在下图中验证这一点

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

Intuition for how RELU represents non-linearity (Here true function is y=x²).

从这里,希望你可以了解 RELU 如何帮助我们用深度神经网络发现数据中的非线性。

2.为什么交叉熵而不仅仅是简单的二次成本?

我经常做语义分割任务,我们试图将图像的每个像素分类到特定的类别标签中。在这类任务中,以及在大多数深度学习问题中,你处理的是概率。因此,通常会得出结论(与线性回归任务相比),均方误差不是您想要最小化的函数。

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

类似于我们在逻辑回归问题中使用误差函数开始起作用。但是,问题是我们为什么首先使用这样的误差函数?在这里,你可以说带有逻辑回归假设的**均方误差(MSE)成本函数将导致一个非凸函数,**然后很有可能陷入局部最小值而不是全局最小值。现在如何知道一个函数是否凸?给定一个单变量函数(两次可微),如果二阶导数是非负的,则该函数是凸的。对于多变量函数,二阶导数将形成一个称为海森矩阵的矩阵。这个 Hessian 矩阵需要是半正定的,函数才是凸的。让我们做一些数学运算来证明对数损失成本函数确实是一个凸函数。

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

如果您使用逻辑回归假设和 MSE 函数,那么对 w.r.t θ进行两次微分不会得到所有 x. 的非负项

关于神经网络,使用这种对数损失成本函数有一个更微妙的原因。*通常神经网络的最后一层会有 sigmoid 作为激活函数,使用 MSE 会导致严重的学习减速。*让我们看一个非常简单的例子

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

由于在( w,b 的导数中存在 sigmoid 函数的导数,这些参数的学习速率变得非常慢。如果我们不使用 MSE,而是使用交叉熵代价函数,那么我们可以解决这个问题。让我们通过几个步骤的计算来看看这个—

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

我们不仅能够移除 sigmoid 函数的导数(这会导致学习速度变慢),还使用**交叉熵作为成本函数,使得可训练参数的学习速度与输出中的误差成比例。**您也可以检查偏差项。尽管这是针对单个神经元示出的(等式(4)中的求和超过了训练示例的数量),但是结论对于许多神经元、多层网络仍然有效。太好了!让我们进入下一个概念。

3.对正则项和减少过拟合有什么直觉吗?

机器学习中的过度拟合也被称为高方差,即,当您的模型在训练数据上表现非常好,但无法用测试数据集复制时。为了减少过度拟合,可以采取的一个初步措施是增加训练数据的数量。下一步可能是减少网络的深度,即减少一些层。另一种减少过度拟合的方法是在成本函数中增加一个额外的项。该项是网络所有权重的平方和乘以正则化参数。于是新的代价函数就变成了-新的代价=旧的代价+ λ/2 ∑w,这也被称为 L2 正则化,也用于岭回归。如果你使用 TensorFlow,这个 L2 正则化可以通过调用tf.nn.l2_loss与你的成本函数相加,这个项的作用是告诉网络惩罚大权重项。现在,由于权重不再那么大(如果λ很大),即使网络非常深,许多隐藏单元对训练模型的影响也会小得多。

我发现了另一种方法,根据激活函数,为吴恩达讲座中的正则化项和高方差减少建立直觉。让我们想想 tanh 激活函数—

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

因此,降低权重会减少 tanh(z) ,迫使其位于线性区域,从而降低网络模拟复杂非线性的能力,并有助于减少方差。

希望这篇文章已经帮助你重温了一些旧的概念,也许在这个过程中你学到了一些新的东西。

保持坚强和快乐,干杯!

3 个美丽的现实生活相关性

原文:https://towardsdatascience.com/3-beautiful-real-life-correlations-fed9e855da52?source=collection_archive---------20-----------------------

统计学和哲学

用这三个现实生活中的相互关系来改变你的看法。

什么是相关性?

相关性是两个变量之间关联的度量。你可以在宇宙中找到积极的,消极的,没有关联的。

相关性是数据科学家在日常生活中要处理的事情。让我们开始吧!

相关性 1:花在会议上的时间与你在工作中的价值

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

Deciding the future (Photo by You X Ventures on Unsplash)

如果你大部分工作时间都在开会,那么很可能你对你的公司非常有价值。可能不是每次都是这样,但我是在一般意义上说的。会议旨在提出影响公司未来的想法、策略和决策。所以这里不是玩乐的地方。所以,如果你被邀请参加公司几乎所有的会议,你可以肯定你的公司信任你的沟通技巧和创造性的投入——你对你的公司真的很有价值。

因此,我们可以说,你花在会议上的时间和你在公司的价值之间存在正相关关系。

含义

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

Where you stand… (Photo by Danka & Peter on Unsplash)

你可以分析一下,与另一家公司中与你职位相同的人相比,你的价值有多大。你可以每周分析一次,你的会议时长是上升还是下降,还是几乎保持不变——这意味着,公司对你的看法有任何变化;积极还是消极?同样,你也可以用相反的方式,如果你知道自己在公司的价值,你可以预测接下来一周或一个月的会议持续时间。更进一步,你甚至可以根据他们开会的时间来预测你公司或其他公司的某个人的头衔(价值)。

相关性 2:水的沸点与时间的关系

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

Is it pure? ( Photo by Tim Marshall on Unsplash)

水是一种化学物质,沸点是它的性质之一,告诉我们它在什么温度开始沸腾。有一种东西叫做 依数性——溶剂的性质会受到其中所含溶质的影响。纯水(不是指蒸馏水,而是含有天然矿物质的水)会有特定的沸点。同时,随着水开始变得越来越不纯净,即更多的杂质开始进入饮用水中,水的沸点升高,这种现象称为沸点升高,是依数性之一。如果你家附近一条河里的水的沸点比你昨天测得的要高,那么你就可以开始怀疑这条河的水质了。

由于饮用水应该具有一致的质量,其化学性质(在这种情况下是沸点)应该显示恒定的沸点,或者水的沸点与时间应该没有相关性。

含义

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

Pollution ( Photo by Brian Yurasits on Unsplash)

沸点和经过的时间之间的正相关将是非常惊人的,因为它是包含杂质的指示——在这一点上,你必须调查原因。也许当地一家工厂正在向河里倾倒未经处理的工业废料。通过比较每个国家之间的相关值,您可以找到最关心其河流或水体的地方或国家-相关性最小的国家获胜,因为他们采取了大量管理措施来长期保护水质。

相关性 3:智慧 vs 高估

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

Power of Wisdom ( Photo by Toa Heftiba on Unsplash)

最后,我们都听说过这句谚语“随着年龄的增长,智慧也随之而来”,弗兰克·德金领导的一项研究证明了这一点。在那项研究中,参与者被要求估计一座山的倾斜度,研究表明,年长的参与者比年轻的参与者给出了更好的估计——即使一些年长的参与者没有任何关于山的具体知识。因此,正如研究证明的那样,年长的人比年轻的人更善于评估,他们将其归因于与年轻的人相比,成年人的经验知识(或**)。同样,应该注意的是,几乎所有较年轻的参与者和一些较年长的参与者*(离群值)给了过高的估计。*

因此,我们可以说智慧与高估成负相关,也就是说,你拥有的智慧越多,做出错误决定或估计的可能性就越小。

含义

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

Reward of Wisdom (Photo by Miguel Bruna on Unsplash)

智慧水平和高估程度之间的负相关关系证明,当你年纪很大的时候,你会更准确地做出决定。但这里有一个好消息,根据你想要的精度(或者相应的高估程度),你可以从回归线中知道你需要获得的相应的智慧水平。如果智慧只是老年人的特征,那么我们将不会在全球范围内看到任何有影响力的年轻领导人。这表明年轻人也可以获得和成年人一样的智慧。这是什么意思?对年轻人来说,这意味着你会比同龄人做出更少的错误决定,而且相对于同龄人来说,你会在短时间内取得成功,因为你非常擅长判断事物,这是因为你最近获得了高水平的智慧。请注意,缩短时间并不适用于付出的努力——事实上,这将是一件巨大的事情,因为老实说,你的目标是实现非凡的成就,所以决心和激情应该是你最好的朋友。还记得那句谚语吗,“不劳无获”?

所以,看看回归线,找到你需要获得的智慧水平,开始获得它。但是怎么做呢?

尽可能多地阅读,探索不同的知识领域,解释你的经历,讨论你的想法,辩论你的观点。

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

Just a beginning ( Photo by Jukan Tateisi on Unsplash)

基本上,你所见证的是统计学中一个简单概念的力量。我将很快以最简单的方式探索更强大的功能。敬请期待!

如果你觉得这篇文章对你有帮助,请分享这篇文章,让有需要的人也能得到启发。

参考

[1]【李,z .和杜尔金,F. H .,“地面上感知距离的两种理论的比较:角度扩展假说和内在偏差假说”(2012),i-Perception,第 368–383 页

3 机器学习中常见的技术债以及如何规避

原文:https://towardsdatascience.com/3-common-technical-debts-in-machine-learning-and-how-to-avoid-them-17f1d7e8a428?source=collection_archive---------13-----------------------

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

本文概述了机器学习中的 3 个常见技术债务以及如何避免它们。如果你读这篇文章有困难,可以考虑在这里订阅中级会员!

技术债务 是实施代码时所做的权宜决策的持续成本。正是技术决策中的所有捷径或变通办法在早期软件版本和更快的上市时间中带来了短期利益。这个短语是沃德·坎宁安在 1992 年创造的,他试图向非技术产品利益相关者解释我们称之为“重构”的必要性。

人工智能(AI)和机器学习(ML)系统具有增加技术债务的特殊能力。具体来说,它具有常规代码的所有问题,加上系统级的 ML 特定问题。本文讨论了您在生产过程中可能遇到的三个技术债务。

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

Fig. 1 — AI/ML system is not everything

1.隐藏的反馈循环

从整体来看,人工智能系统通常是更大的数据机器的一部分。这意味着它的输入和输出依赖于大型机器中的其他组件(见图 1)。作为其周围环境的结果,真实世界系统经常最终影响它们自己的训练数据。

这可能以令人惊讶的方式发生,例如,你运行一个视频流平台,你的后端团队开发了一个推荐引擎,根据观众过去的观看历史和个人资料向他们推荐新频道。该引擎还包括那些被观众否决或忽略的频道。然后你启动这个功能,并庆祝推荐的视频每周都有越来越多的点击。事情看起来很好,但好得难以置信。

您忽略的是,前端团队实施了一个修复来隐藏低置信度(例如,低于 50%)的推荐视频,因为潜在的不良视频不应被推荐。随着时间的推移,以前置信度为 50–60%的建议现在可以推断出小于 50%的置信度。这形成了一个强大的反馈循环,刺激了你的指标(如收视率),这是一个危险。您现在不知不觉地陷入了一个陷阱,总是向用户推荐相同类型的内容,削弱了您的系统推荐用户可能感兴趣的新内容的能力。

Because you bought a vacuum, you need to buy more!

最终,这变成了一个问题,您的度量增加了,但是系统的质量没有增加。更糟糕的是,你可能不知道这正在发生。找到并修复循环是一个更加困难的问题,需要跨团队的努力。

减轻

退一步,以更全面的方式研究你试图解决的问题。避免视野狭窄,停留在人工智能工程师/科学家的舒适区,在那里你只想提高你自己的指标。

寓意:你不仅应该开发人工智能,也应该允许它去探索。此外,定期检查你的衡量标准,重新思考你如何衡量成功——不要只看数字。

2.管道丛林

人工智能系统通常由一系列工作流管道组成。这些管道负责一系列以特殊顺序运行的复杂作业。它们可能是由不同的人建造的,他们对全局有不同的认识,这就是灾难发生的地方。

通常,由于时间的压力,一条管道只是为了满足某个要求而仓促搭建。它可以由用不同语言编写的不同胶水代码和用于管理管道的特殊语言组成。它们可以从数据准备、抓取、清理、连接、验证、提取特征、在训练/测试集中分割数据、检查点、监控性能和推向生产等。这意味着它更容易以一个意大利面条系统结束,并陷入混乱!

在管道丛林中,你可能还会惊讶地发现未申报的消费者。如果没有访问控制,这些消费者中的一些可能是下游系统,它们悄悄地将您的模型的输出作为另一个系统的输入。未声明的消费者既昂贵又危险,尤其是当它与您的 AI 系统的输出紧密耦合时。

减轻

通过从更大的角度看待系统,并认真对待数据收集和特征提取等任务,可以避免管道丛林。解决这个问题的一个方法是投入一些投资来清理管道,以大幅减少前进的阻力。对于复杂系统,可能值得将这项工作分成更小的部分,并让外部顾问来完成,因为重构可能需要几个月或几年的时间。

保持子系统的所有组件一致需要额外的努力。管道丛林往往会滚雪球般变成一个更大的问题,所以在为时已晚之前做好清理工作。哦,我提到管理依赖关系了吗?

3.数据相关性

在一个典型的软件工程项目中,依赖关系指的是你导入的所有模块、包和库,这些模块、包和库有助于在不重新发明轮子的情况下构建某些功能。在一个人工智能系统中,也有数据依赖,并且它具有类似的构建债务的能力。更糟糕的是,它可能更难被发现。

数据相关性不一致

数据质量的不一致可能导致输入信号不稳定,因为数据可能会随着时间的推移而发生定性或定量的变化。这些输入数据可以从另一个 ML 系统生成,并且可以随时间更新以产生用于另一个系统的嵌入或语义映射(例如,图像嵌入、TF/IDF)。上游系统的静默更新会破坏下游预测系统。

数据相关性中未使用的功能

随着时间的推移,新的功能会使旧的功能变得多余,而这种变化不会被发现。例如,匆忙拼凑起来的遗留的、相关的或捆绑的特性会卡在模型中,永远留在那里。最终,这些特征会导致(多重)共线性,并削弱模型的统计能力。

减轻

使用嵌入/语义映射的冻结副本,并允许原始副本随着时间的推移而改变。仅在审查和验证后部署新映射。此外,未使用或未充分利用的特征可以通过彻底的留一特征评估来检测。定期运行这些检查以删除这些不必要的功能。

寓意:代码依赖可以通过使用编译器和链接的静态分析来识别。确定数据相关性需要检查数据如何转化为信号,从数据中去除噪声并提取清晰的信号。

结论—偿还技术债务

在这个快速发展的世界里,快速行动和打破常规可能是新的发展口号。然而,通过在开发过程中询问一些有用的问题,可以将技术债务保持在最低限度。我们应该问自己:

  1. 我们是否确切地知道一个新的模型或更新的模型将如何影响整个系统?我们在哪里以及如何衡量这种变化的影响?
  2. 我们衡量成功的标准是什么?它与商业目标一致吗?
  3. 我们是否跟踪了整个系统的所有依赖、生产者和消费者?当我们需要的时候,我们有一个系统的方法来识别错误吗?

注:本文首发于https://derekchia . com/3-common-technical-debts-in-machine-learning-and-how-to-avoid-them/。请在 twitter 上关注我,DerekChia 获取更多更新!

参考资料:

  1. 机器学习系统中隐藏的技术债务https://papers . nips . cc/paper/5656-hidden-Technical-Debt-in-Machine-Learning-Systems . pdf
  2. 你的 ML 测试分数是多少?大规模生产系统规则https://ai.google/research/pubs/pub45742
  3. 机器学习:技术债的高息信用卡【https://ai.google/research/pubs/pub43146 T2

优化超参数的 3 种不同方法(交互式 Python 代码)

原文:https://towardsdatascience.com/3-different-ways-to-tune-hyperparameters-interactive-python-code-87548d7f2365?source=collection_archive---------20-----------------------

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

Photo by chuttersnap on Unsplash

优化和调整超参数的交互式指南

H 超参数(HP)是机器或深度学习算法无法通过训练学习的那些参数。这些参数的值需要在训练过程之前设置,它可以控制算法如何从数据中学习。超参数(HP)可以是神经网络的层数或一层中的节点数,可以是神经网络可以使用的学习速率或优化器类型。获得正确的超参数可能是反直觉的,它更像是一个试错过程。因此,我们需要找到一种方法来自动调整这些参数,以获得最佳组合,最大限度地提高 ML 模型的性能。

在本文中,我将讨论一些优化和调整超参数(HP)的方法,以最大化或最小化客观指标(当指标是准确性时最大化,而当指标是 RMSE 或任何其他损失函数时最小化)。

但是,在我们深入研究超参数优化部分之前,让我们先了解一些重要的概念:

目标函数:

机器学习可以简单地定义为从经验中学习行为。这里的学习,我们的意思是随着时间的推移,在某些特定的任务上变得更好、更有进步。但是什么是进步呢?

为了开发一个函数来判断改进,我们需要有模型好坏的正式度量。在机器学习中,我们称这些为“目标函数”。最常见的目标函数是平方误差,它基本上是预测值和实际地面真相之间的差异。如果该值较大,则精确度较低。我们优化超参数的目标是最小化这个目标函数。获得模型超参数的正确组合可以极大地提高模型的性能,让我们看看如何调整这些参数以最小化目标函数:

一维网格搜索:

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

调整超参数的一种方法是为每个 HP 定义一个相等的范围,并让计算机尝试所有可能的参数值组合。这可能是获得最佳 HPs 组合的一个很好的方法。它的工作原理是把你想要调优的 HPs 放在一个 n 维网格中,然后在这个网格中尝试每一种组合。您可以使用嵌套循环来实现这一点,也可以使用一些现成的库,如 Scikit Learn — GridSearchCV。让我们看看它是如何工作的,下面的示例将尝试找到超参数(C、Gamma 和 Kernel)的最佳组合来为 MNIST 数据集构建分类器:

(互动代码——点击播放按钮自行运行代码)

上面的代码将强力尝试这三个超参数的每一种可能的组合,然后打印出最佳组合。

  • **优点:**这种方法会得到最好的超参数。
  • 缺点:这是一个详尽的操作。如果超参数范围或数量很大,可能性可能有数百万,这将需要很长时间才能完成。它也遵循一个序列,不考虑过去的经验。

2-随机搜索:

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

顾名思义,它将尝试随机选择预定义数量的超参数组合,这将给出最佳超参数的一些指示。现在,让我们看一些代码:

(互动代码——点击播放按钮自行运行代码)

正如您在代码中看到的,您可以定义想要选择一组随机超参数的次数或迭代次数,然后尝试它们并获得最佳组合。

**优点:**比网格搜索法快多了。

**缺点:**可能不会返回能够返回最佳精度的最佳超参数组合。它也不考虑过去的评估,不管结果如何,它都将继续迭代。

3-贝叶斯优化:

在上面的例子中,我们有一个客观的指标,即精度,我们还有一个目标函数,试图最大化指标和最小化损失。贝叶斯优化方法试图通过基于目标度量的过去评估结果建立概率模型来找到最小化目标函数的值。它试图在探索包含最佳超参数的最佳区域和利用该区域来最大化/最小化客观度量之间找到平衡。

优化超参数的问题是,评估一组 HPs 的性能是一个昂贵的过程,因为我们必须在每次迭代中建立相应的图或神经网络,然后我们必须训练它,最后,我们必须评估性能。优化过程可能需要几个小时或几天,但在这个例子中,我们将只训练 3 个时期,以便您可以看到最好的 HPs,然后使用这些来训练更多的时期。

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

让我们看看下面的示例,该示例使用贝叶斯优化来调整 MNIST 数据集的神经网络。我们将使用 scikit-optimize 库来执行 HPO。它是实现了贝叶斯优化算法的库之一:

(交互式代码—点击播放按钮自行运行代码)

结论:

优化机器学习模型的超参数对于机器学习模型的性能至关重要,并且调整 HPs 的过程不是直观的,并且可能是复杂的任务。上面的文章展示了三种自动调整这些参数的流行方法。我们还探索了 scikit-optimize ( skopt)库,在撰写本文时它仍在开发中,但它是一个非常强大的工具。它有一个非常简洁的贝叶斯优化方法的实现,大大优于网格搜索和随机搜索,特别是当涉及到复杂的任务和大量的超参数时。

每个数据科学家都应该知道的 3 个距离

原文:https://towardsdatascience.com/3-distances-that-every-data-scientist-should-know-59d864e5030a?source=collection_archive---------3-----------------------

无论您是刚开始接触数据科学,还是已经在该领域工作了很长时间,如果不了解以下 3 个距离,您将无法生存:

1.欧几里德距离(或直线距离)

欧几里德距离是最直观的:当有人要求我们进行距离测量时,我们都会直观地测量它。

欧几里得距离是使用 x 和 y 坐标的两点之间的直线距离:例如,我们可以通过给出两个坐标(纬度和经度)在世界地图上找到一个城市。

欧几里德距离测量直线距离。

假设我们想在图中所示的市中心地图上测量 A 点到 B 点的直线距离。

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

The Euclidean Distance from a Point A to a Point B is the straight-line distance, computed with Pythagoras.

有了欧几里德距离,我们只需要两点的(x,y)坐标,就可以用毕达哥拉斯公式计算距离了。

请记住,毕达哥拉斯定理告诉我们,当我们知道水平边和垂直边的长度时,我们可以计算直角三角形的“对角线”的长度(斜边),使用公式 a + b =c。

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

Computation of the Euclidean distance from Point A to Point B.

2.L1 距离(或城市街区距离)

L1 距离,也称为城市街区距离、曼哈顿距离、出租车距离、直线距离或蛇形距离,不是直线距离,而是街区距离。

L1 距离测量城市街区距离:仅沿直线的距离。

这幅图直接说明了发生了什么:L1 距离只允许我们做直线运动!

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

The L1 distance from Point A to Point B is the City Block Distance, also called Manhattan Distance.

从图中的 A 点到 B 点有多种最短路径:我们可以向上走两个街区,然后向右走三个街区,或者我们可以向右走三个街区,然后向上走三个街区,等等。

但是 L1 距离是一个距离,所以实际的轨迹并不重要。我们需要知道的是,总的来说,我们必须向东走一定距离 x ,向北走一定距离 y 。两者之和就是从 A 点到 b 点的 L1 距离

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

Compute the L1 (City Block) Distance from Point A to Point B.

3.切比雪夫距离(或棋盘距离)

切比雪夫距离也称为棋盘距离或 L 无穷远距离。对切比雪夫距离最直观的理解就是棋王在棋盘上的移动:它可以向任何方向(上、下、左、右、垂直)走一步。

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

In the Chebyshev distance, a diagonal step is as large as a vertical step.

它不同于 L1 距离,因为在切比雪夫距离中,我们将垂直运动计为一步,而在城市街区距离中,我们将垂直运动计为两步(向左一步和向右一步)。

它也不同于欧几里德距离,因为欧几里德距离中的一个垂直移动,其距离为 sqrt( x + y ) 正如我们之前看到的。

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

Comparison of the Euclidean Distance, L1 Distance, and Chebyshev Distance.

切比雪夫距离是棋盘距离。

切比雪夫距离的一个直观例子是一架无人机,它有两个独立的电机:一个电机向前,一个电机侧向。两台电机可以同时运行,并且可以同时达到最大速度。

这样做的结果是,无人机在对角线方向上的速度可以和它在水平方向上的速度一样快:只要让两个电机都以最大速度运行。

回到切比雪夫距离城市地图的图片,这意味着在步骤 1 中,两个电机同时运行,在步骤 2 中,两个电机也同时运行,但在步骤 3 中,不再需要向前移动,只有横向电机仍在运行。

因此,切比雪夫距离被定义为一个轴上的最长距离。

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

Computing the Chebyshev Distance from point A to point B.

我希望这篇文章能提高你对未来距离的理解,我真诚地感谢你阅读我的内容。祝你在练习中应用距离时好运!

赢得黑客马拉松所需的 3 个关键人物

原文:https://towardsdatascience.com/3-essential-persons-needed-to-win-a-hackathon-71391a084df0?source=collection_archive---------32-----------------------

团队组成是赢得黑客马拉松的一个非常关键的因素。由于黑客马拉松是一种要求非常高的比赛,通常在 48 小时内,参与者需要提交一个像样的演示文稿和一个可用的原型。所以,要更有效地完成任务,你需要背景多元化的队友。理想情况下,每个团队至少要有 1 个程序员,1 个商人,1 个设计师。

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

Photo by Vlad Hilitanu on Unsplash

如前所述,有四种主要类型的黑客马拉松,本文中提到的黑客马拉松指的是第三种。如果你有兴趣知道常见的黑客马拉松类型之间的区别,请阅读我以前的文章

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

Photo by cyda

1。程序员:开发解决方案的核心

程序员是一个非常宽泛的术语,它可以进一步分为前端开发人员、后端开发人员和数据科学家。取决于主题,一个团队可能需要不止一种类型的程序员。

对于前端开发者来说,他们主要是配合设计师将线框转化为真实的应用。这群人必须熟悉至少 1 种前端开发语言,如 CSS 和 HTML,用于网站开发。前端开发人员无疑也需要与后端开发人员携手工作,因为他们的工作部件应该能够相互通信。您的团队可能需要半天以上的时间来解决兼容性问题。

后端开发人员的角色是构建原型的核心功能。为什么你需要在最终陈述中有一个可行的原型,因为它是告诉评委你的解决方案在技术上可行的最有效的证据。对于数据科学家来说,大数据现在是一个非常热门的话题,在提供数据集的黑客马拉松中,它也希望参与者建立一个模型或从数据中获得见解。同样,与前端开发人员一样,这两类人也是专家,对编程语言或相关软件(如 JavaScript、R 和 Python)有扎实的知识。

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

Photo by Fabian Grohs on Unsplash

然而,只有程序员不能使解决方案吸引陪审团。所以才需要设计师。

2。设计师:美化样机外观

第一印象非常重要,尤其是在简短的陈述中。黑客马拉松的投球时间很短,通常在 4 到 8 分钟左右。这很像速配,美女或帅哥很容易引起别人的兴趣和他们聊天。同样的逻辑在黑客马拉松中,风格化的界面更有可能吸引观众的兴趣去了解更多。除此之外,不是每个人都能像设计师那样思考。让设计师与众不同的是他们的创造力,因此团队中有一名设计师可以在创意头脑风暴中添加创新元素,使解决方案具有颠覆性并脱颖而出。

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

Photo by Clint Bustrillos on Unsplash

3。商人:说服法官你的解决方案是最好的

团队中的业务人员应该是最优秀的销售人员,是最体面的人,并且具有很强的说服他人的谈话技巧。他或她将负责思考资料和演示流程中包括的内容。由于黑客马拉松的大部分评委都有商业背景,有一个来自商业世界的人可能会更好地知道评委们想在演讲中听到什么。商业计划、成本效益分析和竞争对手分析可能是一个商业人士可以立即想到要包括在幻灯片中的一些基本组成部分,但如果你让一组程序员制作 PowerPoint,他们可能会在幻灯片中放很多公式或代码,演示将是一个非常技术性的讲座。这就是一个团队需要一个商人的主要原因,这是为了有一个翻译来以一种更外行的方式解释技术知识,并帮助观众消化解决方案中使用的先进技术。

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

Photo by Austin Distel on Unsplash

如果你有兴趣参加黑客马拉松,留意你的邻居,找到你需要的合适的伙伴。如果你想知道在哪里可以找到黑客马拉松,请继续关注我的黑客马拉松系列

如果你觉得我的文章有用,请在我的 linkedIn 页面上为我的技能背书,鼓励我写更多的文章。

最初发表于cydalytics.blogspot.com

[## 欢迎来到黑客马拉松的世界

学生应该加入黑客马拉松的 5 个理由

medium.com](https://medium.com/series/welcome-to-the-world-of-hackathon-81d194abbec4)

数据科学家的 3 项基本 Python 技能

原文:https://towardsdatascience.com/3-essential-python-skills-for-data-scientists-b642a1397ae3?source=collection_archive---------9-----------------------

学习熊猫很棒。 Numpy 也非常有趣。但是你可能很早就开始使用图书馆**了吗?**也许你还没有意识到 pure Python 所提供的一切。

如果这听起来像你,你会喜欢这篇文章。

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

Photo by fabio on Unsplash

本文将介绍我在日常数据科学工作中最常用的一些非常酷的纯 Python 功能。我在整个数据准备阶段都在使用它们(大量用于数据清理),甚至后来在绘图前汇总数据。

我希望你也能把这些融入到你的项目中。虽然没有运行时速度或性能方面的好处,但是当您从头开始实现这个逻辑时,您将节省大量时间。那么事不宜迟,让我们跳入第一点!

By GIPHY

λ函数

Lambda 函数非常强大。是的,当您必须以相同的方式清理多个列时,您不会使用它们——但这不是我经常遇到的事情——通常情况下,每个属性都需要自己的清理逻辑。

Lambda 函数允许你创建’匿名函数。这基本上意味着您可以快速创建特定的函数,而不需要使用 pythondef来正确定义函数。

话虽如此,请记住,lambdas 主要被设计成一行程序**——因此应该用于更简单的东西。对于更复杂的逻辑,你需要使用常规函数。**

好了,说的够多了,我现在给你看两个具体的例子,通过它们你可以看到在你的下一个项目中,仅仅通过不为每件事定义一个函数,你可以节省多少时间。第一个例子可能不会在现实世界中经常用到,但是值得一提。一切都是为了平方数字。

# regular function
def square_number(x):
    res = x ** 2
    return res# lambda function
square = lambda x: x ** 2# results
print('square_number(4): {}'.format(square_number(4)))
print('square lambda: {}'.format(square(4)))**>>> square_number(4): 16
>>> square lambda: 16**

上面的代码片段以常规方式和 lambda 方式包含了相同逻辑的实现。显然,结果是一样的,但是看看这个一行程序的美妙之处吧!

第二个例子将涵盖检查数字是否偶数的过程:

# regular function
def is_even(x):
    if x % 2 == 0:
        return True
    else:
        return False

# lambda function
even = lambda x: x % 2 == 0# results
print('is_even(4): {}'.format(is_even(4)))
print('is_even(3): {}'.format(is_even(3)))
print('even(4): {}'.format(even(4)))
print('even(3): {}'.format(even(3)))**>>> is_even(4): True
>>> is_even(3): False
>>> even(4): True
>>> even(3): False**

同样的逻辑以两种方式实现。你决定你喜欢哪一个。

列出理解

用最简单的方式解释,列表理解允许你使用不同的符号创建列表。你可以认为它本质上是一个建立在括号内的单行 for 循环。

在做特征工程的时候,我经常使用列表理解。例如,如果我正在分析垃圾邮件检测的电子邮件标题,我很好奇问号是否更经常出现在垃圾邮件中。这是一个用列表理解完成的非常简单的任务。

也就差不多了,不需要进一步的理论解释。例子是最重要的。

我选择声明一个常规函数,它将检查列表中以某个字符开始的条目,在本例中是’ a 。一旦实现,我会做同样的事情,但用列表理解。猜猜哪一个会写得更快。

lst = ['Acer', 'Asus', 'Lenovo', 'HP']# regular function
def starts_with_a(lst):
    valids = []

    for word in lst:
        if word[0].lower() == 'a':
            valids.append(word)

    return valids

# list comprehension
lst_comp = [word for word in lst if word[0].lower() == 'a']# results
print('starts_with_a: {}'.format(starts_with_a(lst)))
print('list_comprehension: {}'.format(lst_comp))**>>> starts_with_a: ['Acer', 'Asus']
>>> list_comprehension: ['Acer', 'Asus']**

如果你第一次看到这个,语法可能会有点混乱。但是当你每天写它们的时候,它们开始吸引你,让你看看你能把多少复杂性放进去。

活力

这是我在实践中很少见到的许多内置 Python 方法之一。从数据科学家的角度来看,它使您能够同时迭代两个或更多列表。这在处理日期和时间时会派上用场。

例如,当我有一个属性表示某个事件的开始时间,第二个属性表示该事件的结束时间时,我每天在工作中使用它。为了进一步分析,几乎总是需要计算它们之间的时间差,而 zip 是迄今为止最简单的方法。

例如,我决定比较一些虚构公司和虚构地区的一周销售数据:

sales_north = [350, 287, 550, 891, 241, 653, 882]
sales_south = [551, 254, 901, 776, 105, 502, 976]for s1, s2 in zip(sales_north, sales_south):
    print(s1 — s2)>>> -201
    33
    -351
    115
    136
    151
    -94

看看这有多简单。您可以应用相同的逻辑来同时迭代 3 个数组,您只需要在括号中添加’ s3 '和其他一些列表名。

最后的话

纯 Python 就是这么厉害。确保你知道它的能力。你不需要一个专门的库来处理所有的事情。我的意思是这很有帮助,但是这会让你成为更好的程序员

练习这些技能,掌握它们,并把它们应用到你的日常工作中,不管是为了娱乐,为了大学,还是为了工作。你不会后悔的。

你有什么想法?你认为纯 Python 之外的东西对数据科学家来说是必不可少的吗?让我知道。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

金融科技初创公司数据新闻实习生的 3 课

原文:https://towardsdatascience.com/3-lessons-from-a-data-journalism-intern-at-a-fin-tech-startup-c765817f3299?source=collection_archive---------21-----------------------

现实世界中的数据科学

了解我在一家金融科技初创公司实习时学到的经验,这家公司正在利用机器学习来彻底改变信贷承销行业。

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

The Data Science Team at ZestFinance (I’m on the upper left corner!)

随着我们进入秋季,我想我应该花时间反思一下我在加利福尼亚州洛杉矶 Zest Finance 担任数据记者的 14 周暑期实习。

如果你不熟悉我的背景,我目前是一名硕士研究生,正在进入研究生院的最后一年,学习计算机科学。我是怎么在 ZestFinance 结束的?我在网上申请,招聘人员发现我的经历很有趣,经历了面试过程,最终接受了邀请,作为 12 名实习生之一去他们的办公室过暑假。

我的目标是分享我从这次难忘的经历中学到的一些重要经验。

什么是 ZestFinance?

该公司的使命是让每个人都能获得公平透明的信贷。根据公司网站:

数万亿美元的贷款行业仍然依赖陈旧的评分技术,这种技术过于简化了对借款人财务状况的看法。结果,数百万本应得到贷款的人总是被拒绝。大约 4600 万美国人要么是“信用隐形人”,在三大信用机构之一没有档案,要么是“不可记录的人”,没有足够的信息来产生信用评分。这是现代信用体系的失败。

基于机器学习的信贷模型可以通过从更多数据中获取更深入的见解,特别是银行已经拥有的未使用的数据,来产生更有利可图的承保。ZestFinance 是首批部署机器学习模型进行借贷的公司之一,我们知道它是可行的。

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

Zest 的自动化机器学习(ZAML)

更具体地说,我整个夏天都在研究 Zest 专有的自动化机器学习平台 ZAML。ZAML 使贷方能够分析非传统数据,包括他们内部已经拥有的数据,如客户支持数据、支付历史和购买交易。该平台还可以考虑传统的信用信息和非传统的信用变量,如客户如何填写表格,他们如何浏览贷款人的网站等。虽然黑盒问题减缓了机器学习在消费金融中的应用,但 ZAML 能够全面解释数据建模结果,衡量业务影响,并符合监管要求。

作为一名数据记者,我是数据科学团队中值得骄傲的一员。更具体地说,我的职责包括:(1)从大型和小型数据集挖掘趋势和见解,以讲述数据故事,(2)利用内部和外部数据源进行分析、建模和可视化,并将它们转化为主题叙述、报告和白皮书,以及(3)宣传数据科学研究计划,同时与营销团队跨职能合作,以量化其不断增长的影响和相关性。

现在你对团队和我的角色有了更多的了解,让我们深入了解一下我从这次实习中获得的一些主要见解。

最小可行分析

这个概念来自康纳·杜威的一篇优秀文章,我整个夏天都在回想这个概念(查看我对他的采访!)。这篇文章谈到了最小可行分析的概念,这意味着数据科学家可以取得渐进的进展,不要假设利益相关者需要最复杂的可用解决方案。

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

产生 MVA 的过程非常简单:(1)清楚地理解手头的业务问题,(2)产生快速和肤浅的见解来解决问题,(3)将结果反馈给利益相关者并获得他们的想法,以及(4)总结分析或深入挖掘。

通过记住这个框架,我能够为我当时工作的数据故事/技术报告/博客文章做出许多不同的迭代。在我的案例中,利益相关者是团队中的其他数据科学家以及不同职能部门的几位高管。

认知多样性

我非常幸运能够与来自多个职能部门的同事交流,包括数据科学、营销/设计、法律、商业分析、产品管理和软件工程。这让我能够利用我所谓的认知多样性——观点或信息处理风格的差异。换句话说,它是个人如何思考和处理新的、不确定的和复杂的情况。

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

给定一个实现机器学习模型来确定贷款/信贷申请人是被拒绝还是被批准的假设示例,这里有几个心智模型来解决这个问题:

  • 数据科学家关心的是如何设计完美的实验来实现最佳性能的模型。
  • 软件工程师关心如何建立合适的基础设施来将模型投入生产。
  • 营销人员关心的是如何向公众传达模特使用的独特功能。
  • 法律顾问关心如何解决与模型结果相关的潜在风险和合规性。
  • 业务分析师关心如何计算模型对客户的业务影响。
  • 产品经理非常关心上面提到的所有事情。

如果有一个收获是我真正感激的,那就是我能够开发的大量心智模型。通过学习倾听不同的意见,并以同事理解的方式用他们的语言说话/写作,我磨练了多侧面思考的能力——通过不太明显的推理,使用间接和创造性的方法解决问题的能力。

领域知识

在 ZestFinance 实习之前,我对信用担保几乎一无所知。但是夏天过后,我对这个古老的行业有了更多的了解:

  • 大约 2600 万美国人被联邦消费者金融保护局认为是“信用隐形人”,因为他们在三个信用机构中没有任何记录。另外 1900 万人没有足够的档案数据被贷款系统认为是可计分的。数以百万计的人在他们的信用档案的某个阶段有严重的错误被纠正。这 4500 多万美国人面临着真正的后果:更高的拒绝率、更高的贷款费用、劣质的金融产品——尽管其中许多产品实际上可能具有很高的信誉。
  • 信用评分是 20 世纪最大的经济催化剂之一,但它已经跟不上今天的消费者了。可用于更准确和公平地对人评分的数据源的激增不能被传统的评分技术轻易或容易地消耗。
  • 贷款人开始转向人工智能和机器学习承销,这些技术通过复杂的算法处理更多数据,可以处理杂乱或有缺陷的数据。机器学习信用模型从数百万次交互中得出结论,并使用比传统技术多 10 至 100 倍的变量。使用机器学习的银行和贷款机构报告了更高的批准率或更低的违约率,有时两者兼而有之,这是通过找到传统技术遗漏的好借款人(并拒绝可能已经获得批准的坏借款人)。
  • 新的机器学习评分算法的制造商必须确保他们的模型不会延续当前贷款系统中存在的偏见。事实上,ZestFinance 的 ZAML 工具可以“去偏向”信贷和其他受监管行业的模型。

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

在实习过程中,我获得了大量的领域知识,包括银行和金融机构如何对信贷申请人做出决策,他们如何采用机器学习,如何在模型设计中建立可解释性和公平性,以及如何确保模型的预测性能与其对企业客户的 ROI 值之间的相关性。

最重要的是,我真的很喜欢 ZestFinance 的使命驱动型文化,即建立一个让更多人获得信贷机会的世界。我对这家公司只有温暖的感觉,强烈建议你看看他们的博客空缺寻找新的内容和工作机会。

收尾

实习肯定重申了我对人工智能/机器学习的热情,我很感激我的工作确实为未来的工作留下了一些动力。快速分析和迭代实验阶段,与不同的利益相关者交谈所需的沟通技巧,解决各种商业领域问题的巨大潜在应用,都促成了我对这一领域的兴趣。

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

Me and fellow interns at the Wisdom Tree on top of Hollywood!

我非常感激有机会在这个夏天利用数据新闻为一个新兴行业的不可思议的产品创造价值。我完成了很多,犯了很多错误,最重要的是,由于一个令人敬畏的团队和一群多元化的导师,我学到了比我预期更多的东西。我希望我至少成功地向你们传达了一些教训。感谢您的阅读。

如果你喜欢这个作品,你可以在 https://jameskle.com/的找到更多我的作品和项目。你也可以在Twitter上关注我,在GitHub 上查看我的代码,直接发邮件给我 在 LinkedIn 上找我。 注册我的简讯 就在你的收件箱里接收我关于数据科学、机器学习和人工智能的最新想法吧!

作为一名没有经验的数据科学研究生,我学到了 3 个教训。

原文:https://towardsdatascience.com/3-lessons-i-learned-as-a-first-year-data-science-grad-student-with-no-experience-86449c90a5ff?source=collection_archive---------12-----------------------

即使有了大学,研究生院也有它自己的一系列挑战。

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

Photo by Japheth Mast on Unsplash

去年,我开始攻读数据科学硕士学位。除了在 Khan Academy 上了一堂 SQL 课和大学里的几堂数学课,我没有任何学科知识。关于数据和分析,我只知道我在那个部门工作,因为我在大学里做过兼职。话虽如此,以下是我在课外学到的一些经验。

1.重要的是学习技能,而不是等级。自从我们开始上学,我们就被告知,在周末,我们会因为表现出色而获得一张金色贴纸(后来变成了分数,学校失去了一点阳光)。即使现在在研究生院,我发现自己在课堂上想要一个 A,这不是一件坏事,但会分散我们对真正学习技能的真正目标的注意力。为了得到一个好成绩,它被深深地印在我们的脑海中,以至于我们忘记了我们应该学些什么。这就是我决定挂科重考编程课的原因。完全公开——即使我没有通过,我的雇主也会支付课程费用,这也是我选择这门课程的另一个原因。当事情进展顺利的时候,我正在学习编程入门,在那里我学习 Python 直到我们进入函数。由于某种原因,我不能用脑子思考函数,当我们开始上课时,我跟不上了。在这一点上,即使我的作业分数很低,我也通过了这门课,但是,我意识到这是 Python 的基础,如果不能完全理解这门课的这一组成部分,我的基础就会出现漏洞。所以我走了一条不寻常的路,故意不及格,以便重修这门课。当我完全意识到我做了什么时,我的大脑吓坏了,特别是当我看到我的成绩单时,但我知道从长远来看会更好,因为我将拥有成为伟大的数据科学家所需的基础。大多数人并不像他们那样幸运,因为这门课要上两次以上,所以我的建议是在你的空闲时间(或者真的,指定一个时间)回去深入研究你不熟悉的领域。当你看到其他人都在继续前进时,不要害怕重新开始,因为重要的是有一个没有任何裂缝的基础!

2.求助!参加在线课程有其挑战性,尤其是当课程不提供任何讲座,我需要 YouTube 视频之外的帮助时。我开始问我已经有编程经验的朋友,我向不同的人寻求帮助,这样我就不会用问题淹没同样的朋友。我反复查看我的清单,甚至得到了已经获得计算机科学学位的实习生的帮助。起初,当最近的大学毕业生帮我做作业时,这有点刺痛了我的自尊心,但我很快就克服了,因为我迫切需要一个人的帮助,而不仅仅是 3 分钟的视频。这个故事的寓意——不要让你的自负阻止你获得帮助!我们都需要团结😉。另外,你不知道一路上会遇到谁。

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

Image by Wokandapix from Pixabay

3.别紧张,这太难了!!当我开始学习第一种编程语言时,我非常紧张,甚至在开始之前就把自己搞得一团糟。我会先发制人地担心我无法理解家庭作业,因为我阻碍了我的大脑实际学习。我最大的教训/我想让每个人都知道的是,是的,编程是有挑战性的,会有更多的日子你想知道你为什么报名参加这个,但这就是我如何知道我正在把自己推出我的舒适区,当你反思你在哪里时,你会意识到你已经走了多远。;)

即使只有一门课完成了,一门课不及格,还有一门课还在进行中,我在不到一年的时间里从这个项目中学到的东西比我过去几年的工作中学到的还要多。所以坚持下去吧!我认为秘诀是坚持不懈,一旦你解决了问题,当你感到兴奋时,你就不想停下来了!此外,搞清楚事情并创造新东西的兴奋感是成为数据科学家最棒的部分!

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

Photo by Japheth Mast on Unsplash

数据科学家告诉自己的 3 个谎言

原文:https://towardsdatascience.com/3-lies-data-scientists-tell-themselves-8d29af9ccdf2?source=collection_archive---------19-----------------------

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

如果你浏览 r/MachineLearning 的话,你可能已经在过去几周看到了一些关于 Siraj Raval 的帖子,Siraj Raval 是 YouTube 上一位致力于为自己树立在线数据科学教育家名声的人物。他最近因抄袭、夸大其技能以及利用数据科学炒作赚快钱而受到抨击。

虽然 Siraj 的罪行清单是多种多样的,但我认为有一个自我欺骗的潜在主题。对自己说善意的谎言并不新鲜,数据科学也不例外;事实上,这个领域的某些方面可能会让它变得更加普遍。我思考了我的职业生涯——我所看到的——三种类型的谎言很突出。

谎言 1:执行代码相当于理解方法论

在数据科学(和一般的计算机科学)中,业余和理解之间的区域可能相当灰色。举个例子,如果有人复制了一个回购,创建了一个识别手写数字的模型,是不是说明他们懂计算机视觉?我不这么认为;事实上,他们可能连 GitHub 都不懂。

那么,在什么时候我们可以说我们真正了解了一些东西——当我们已经编码了它,将它应用于不同的场景,或者研究了潜在的数学?什么时候我们对一个话题足够了解,可以把它放在简历上,申请工作,或者收费让别人向我们学习?

我 7 岁女儿的数学课很好的框定了这个问题。学生们使用自我评估将他们的能力分为三组:我可以在别人的帮助下完成我可以自己完成我可以教别人。它的数据科学版本可能是我可以克隆它我可以编码它我可以派生它

那么你需要达到什么样的程度才能声称自己拥有一项技能呢?大多数人可能会说在编码派生之间。这是不是意味着,如果你能导出 OLS,你就只能得到做回归的许可?看情况。如果你在为一个 Kaggle 比赛做模型,那么就开始吧:毕竟,这是你将要学习的方式。但是,假设您的结果是一家制造公司的人类安全项目的一部分。你最好对你的方法论的数学和假设有一个坚实的理解。切尔诺贝利是一个强有力的例子,说明有些人认为他们知道自己在做什么,但却没有很好地理解其中的机制。同样,我们可以很容易地合理化我们执行代码的能力等同于我们的理解,但这不是真的。

谎言 2:如果是在网上,那就是公开招标

如果你像我一样,堆栈溢出已经使你习惯于简单地复制、粘贴、测试,然后继续前进。然而,堆栈溢出和 GitHub 之间有着天壤之别,即版权法。我认为有一个常见的误解,即如果代码在公共回购中,那么它就在公共领域中。然而,仅仅因为你可以在公共图书馆买到《哈利·波特》,你就没有权利在车库外出售它的影印版。数据科学家需要了解版权级别和使用他人代码的常见惯例。

那么在使用别人的代码之前应该怎么做呢?首先你需要弄清楚回购是在什么样的许可下进行的。对于大多数回购,这通常是在许可证文件中,尽管我注意到 scikit-learn 回购将它们存储在一个名为 copy 的文件中。无论你在哪里找到它,这基本上是自述文件的合法版本。在那里,您应该可以看到所选择的项目许可以及适用的条件。GitHub 通常会在大多数许可文件的顶部有一个很好的可视化效果。

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

好吧,如果回购没有许可证,然后呢?GitHub 上的许可页面声明如下:“你没有义务选择许可。但是,如果没有许可证,将适用默认的版权法,这意味着您保留对您的源代码的所有权利,任何人都不得复制、分发或从您的作品创建衍生作品。”因此,即使是看似没有公开许可的回购也仍然受到严格的版权保护。

我强烈推荐 MattyMeck 的文章一个数据科学家的开源许可指南给任何想了解更多的人。

谎言三:人气相当于同行评议

围绕我们领域的大肆宣传意味着我们可以从几乎任何来源找到验证。有了这样源源不断的崇拜,我们很容易成为不穿衣服走来走去的皇帝,以为自己的工作无可挑剔。

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

社交媒体往往会加剧这种效应。比如,我有 LinkedIn 上的背书,这些人从未见过我,更不用说见过我的作品了。你可以制作一个在 Reddit 上获得好评的数据可视化,一个获得浏览量的 YouTube 视频,或者一篇获得阅读量的文章,但这种反馈并不总是与你的内容准确一致。

突击测验。哪位科技领袖被提名为财富年度商业人物、时代全球最具影响力人物之一、以及福布斯最具影响力人物之一?你可能会猜测史蒂夫·乔布斯或埃隆·马斯克,但答案其实是 Theranos 公司的伊丽莎白·霍姆斯。炒作和关注并不等同于你所生产的产品的质量和价值。

我们如何保持诚实?

Siraj 的受欢迎程度盖过了其他伟大的创作者和教育工作者,这很可悲。我最喜欢的两个学习 TensorFlow 的 YouTubers 是 MorvanDanDoesData 。可悲的是,他们俩都不再制作视频了。DanDoesData 尤其伟大;他会记录这些长达一小时的工作会议,你可以看到他遇到问题,并与错误作斗争。在他的主页视频中,他说,“我想体验安装东西的痛苦!”我喜欢这种观点:困难的事情有一种真实性。引用艾米莉·狄金森的话“我喜欢痛苦的样子,因为我知道这是真的;

所有这些都是一个很好的提醒,让我们放慢脚步,尽职尽责,不要被炒作分心。我们很容易被这个领域的激动人心所吸引。但是当兴奋变成夸张时,我们就知道我们没有朝着正确的方向前进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值