TowardsDataScience-博客中文翻译-2016-2018-四十一-

龙哥盟 / 2024-10-13 / 原文

TowardsDataScience 博客中文翻译 2016~2018(四十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

用 GA、BigQuery 和 R 可视化用户如何开始他们的网站之旅

原文:https://towardsdatascience.com/visualising-how-users-start-their-journey-on-your-website-with-ga-bigquery-and-r-aa56fa39e386?source=collection_archive---------5-----------------------

帮助你的业务人员了解你的网站或应用程序的用户如何开始他们的旅程是为他们设计最佳体验的关键;从关注哪些登录页面最重要,到在用户初次体验后吸引他们。

数据可视化是向利益相关者传达这一点的有力方式,在这篇文章中,我们将看看如何使用 sunburst d3.js R 包装器来可视化用户在你的网站上浏览的前 4 个页面。要查看 sunburst 的 d3.js 版本,请查看交互式数据可视化这里。

第一步——启动并运行 SunburstR

首先,您将使用下面的脚本来获得一个在 r 中运行的示例,它使用了 CRAN 上可用的 sunburstR 包和来自 Kerry Rodden 的 github repo(该包的创建者)的数据集。

在 2 分钟内创造出这个令人敬畏的互动视觉化…

在 R 中运行这段代码…

哇塞!在您继续用自己的数据(更难的部分)尝试之前,看到一些东西与现有的数据集一起工作总是很好的

注意:任何人都可以复制下面的教程,因为它将使用 Bigquery 的公共演示 GA 数据,但是要用您自己的 Google Analytics 数据复制它,您需要有 Google analytics 360(付费版本)来访问 BigQuery 中收集的原始数据和查询数据的权限。

步骤 2 —您的数据需要什么格式?

因此,您首先需要了解的是,您的数据需要是什么格式,以便轻松地使用这个包中的 sunburst() 函数。

让我们看一看。你会在例子中看到。csv 下面有两列:一列是旅程中每页的,用连字符“-”分隔,第二列是****导航通过此旅程的会话总数

例如,在这个样本数据集中,22,781 个访问者在他们的帐户中开始了他们的旅程,并且随后的 5 次页面访问也在帐户页面上。然后,sunburst 函数将使用这些整数值自动计算每次旅行的用户百分比。****

图片来自【https://gist.github.com/kerryrodden/7090426】

第 3 步—从 BigQuery 获得这种格式的数据

Google 友好地提供了一个 GA Bigquery 数据集样本,完全用于学习和测试目的。了解如何按照本文档‘Google Analytics Sample dataset for big query’中的说明设置运行查询,并在 google.bigquery.com 上创建一个帐户

等等……这个样本数据来自哪里?

它来自一个名为谷歌商品商店的网站。

下面的代码将把你的数据转换成第二步中所有访问你的网站的相同格式。

  • 子查询为会话中的每次命中创建一个带有行的表。此表包含会话 ID、点击数(点击数是一个页面视图或事件)、点击数、点击数页面路径(即 url)以及点击数之后的 3 个页面路径。它获得了 x7 天的数据(每一天的数据都在它自己的表中)。它只过滤页面浏览量的点击,所以我们忽略所有其他点击类型。****
  • 当您对自己的数据集运行下面的查询时,您只需替换子查询中列出的表名。
  • 外部查询然后从每个会话中选择一行,其中第一次点击是登录页面,然后统计有多少会话在此开始了它们的旅程以及它们的 3 次后续页面查看。如果有下一页,则 Concact 函数会在该页和下一页之间添加一个连字符。这最后一个专栏“全页之旅”是你将插入到 sunburst 的专栏。****
  • 我在多个步骤中构建了这个查询,所以我鼓励您删除外部查询,以了解它是如何工作的。

在 BigQuery 中运行此查询…

你会得到这样的输出……

步骤 3 —对您的数据进行质量评估

好的,你想知道你的数据是正确的。你可以通过在谷歌分析中查看 2 份报告来回答这个问题。你可以在这里添加谷歌分析账户,这也是谷歌商品商店的账户。

  1. 登陆页面报告—来自行为>站点内容>登陆页面

通过登录页面匹配检查会话 —要使用登录页面报告对您的数据进行 QA,请删除第 2–8 行和第 34–38 行,这将删除按多条路径分组,以便您只按登录页面分组。运行查询,您的总数应该与这些页面上的会话总数相匹配。

2.“下一页”报告—在同一页的“入口路径”选项卡下

检查特定页面的“下一页”会话 —在这里,您可以检查特定登录页面移至下一页的会话数是否与 GA UI 和您的查询相匹配。例如,将下面的行添加到您的外部查询中,以查看在登录到“/home”页面后移动到特定页面的会话数。

其中 t.page_path = '/home '

你的任务完成了!确保它们匹配或匹配误差很小(在 Bigquery 中采样和定义会话会使其与 GA UI 完全匹配变得很困难)然后就可以开始了。****

步骤 4 —以. csv 格式下载

这是容易的部分。将表格下载为. csv 格式,并将其保存在合适的地方。“下载”为。csv 按钮在步骤 2 的图像中高亮显示。

步骤 5-更新您的 R 脚本,从您的。csv 文件并运行

调整步骤 1 中的 R 脚本,使其指向您计算机上的新位置(要实现这一点,您可以右键单击您的。csv 文件,然后选择“属性”以获取文件的路径)

您根据自己的选择更新配色方案,这就是您将从样本 GA 数据中获得的输出。****

第六步——分析你的发现

所以,你并没有做所有这些艰苦的工作,只是为了创造一个令人惊叹的互动数据,即,在这一点上挑选出你从与你的创作互动中发现的任何有趣的学习。你可以回答一些问题,比如:

  • 最重要的登录页面是什么
  • 这些页面中第二受欢迎的页面是什么
  • 最流行的整页路径是什么(5 步?)
  • 大多数离开你网站的用户来自哪里?

对所有这些问题的回答将产生讨论点,并引发进一步的探索性分析

第七步——将你的惊人创造导出为. html 文件,与世界分享

很好,您已经有了数据可视化,R 为您提供了一种很好的方式将您的作品导出为. html 文件。这意味着你现在不必担心把它托管在一个闪亮的服务器上或一个仪表板上,你的用户仍然可以很容易地与它交互。**

下一步做什么的一些想法:

  • 把它放在屏幕上,让你的同事与它互动
  • 通过电子邮件发送给同事
  • 如果你有一个闪亮的服务器,你可以把你的小部件添加到一个仪表板上(这篇文章没有涉及)。

第八步——祝贺自己

您已经使用了 BigQuery,R 并接触到了 d3.js 数据可视化的交互性!关于所有这些工具,还有很多需要学习的地方,但一些关键要点是:

  • 对于 Google 360 用户来说,在 BigQuery 中访问底层数据允许您以 GA 用户界面中不可能的方式提取和可视化数据。你能回答的问题是无穷无尽的。
  • d3.js 的 R 中的包装器真的很有帮助,因为你不必深入到定制 javascript、html 和 json 的世界来创建可视化;一些友好的灵魂已经为你做了艰苦的工作(如果你遇到任何其他伟大的灵魂,请分享)。然而,为了获得一些关于 d3 的其他可能性的灵感。看这里https://d3js.org/
  • 如果你认为它看起来像一个饼状图,你很担心——我也有同样的想法。我想说的是,这种可视化的主要目的不是让用户能够在一瞬间理解指标,而是让他们与 it 的互动激发他们的兴趣,以了解更多关于用户如何与你的网站互动的信息,并在你的分析团队中推广可能性的乐趣。

可视化机器学习:我们如何使智能人性化?

原文:https://towardsdatascience.com/visualising-machine-learning-how-do-we-humanise-the-intelligence-e62658f1f6df?source=collection_archive---------12-----------------------

Photo by Jamison McAndie on Unsplash

对于数据科学专业人士来说,这是激动人心的时刻。随着分析技术的快速发展,特别是在机器学习、深度学习和人工智能方面,世界各地的研究人员和从业人员已经开始将这些技术应用于影响人类的深度应用。

高级分析时代

社交谈话充斥着各种对话,这些对话已经从自动驾驶汽车转变为飞行汽车,从智能机器转变为已经在我们家中安静协作的机器人,从聊天机器人转变为对话式人工智能,这种人工智能正变得无处不在,与环境相关,与人类的反应无法区分。

许多人引以为豪的事实是,作为一个人类,我们已经设法创造了实时智能,一种没有自然进化的智能。随着各学科的进步,我们终于攻克了模拟人类智力的几个难题,并开始在某些领域超越它。

Video synthesis to re-enact politicians using Recurrent neural networks: University of Washington

伟大的分析分歧:救赎还是巫术?

有趣的是,在这一点上,世界各地的公众意见也开始出现明显的分歧。在这个光谱的另一端,有人质疑人工智能的存在和意图,不仅就高级分析的可信度,而且就其实用性进行了深入的辩论。

在某种程度上,大多数消费者都有一种恐惧感。对潜在应用领域的乐观描述存在一种诡异的不确定性,人们对其可行性、规模和影响提出了质疑。

技术的进步和人们对它产生的原始恐惧感之间有一种联系。—唐·德里罗

在过去的几十年里,技术的快速进步总是伴随着恐惧的升级。虽然早期的技术很复杂,但它是完全理性的。有了深度学习和人工智能,我们再也不能声称这一点,因为它们现在超越了人类逻辑和理解的领域。

分析消费的挑战

缺乏基本意识是当今分析学科面临的最大挑战,这比围绕其采用的道德困境排名更高。随着用户对新技术的理解越来越失去控制,围绕其感知效用和采用问题的噪音变得越来越大。

虽然终端消费者对高级分析的大规模采用仍在逐步进行,但这已经是企业面临的一个明确而现实的挑战。尽管他们在数据科学上投入了数百万美元来收集智能见解,但企业面临着来自内部的巨大阻力。

企业项目中最大的挑战不是模型工程或准确性,而是分析应用的实地采用和这些智能模型提供的建议的实施。更有甚者,当他们最终违背行业直觉时&直觉。

Model accuracies from a forecasting project, where neural networks outshines other models

高精度低接受度的模型

在实施高级分析项目的这些年里,我们遇到了太多的例子,其中杰出的复杂模型(黑盒)以非凡的准确性满足了项目目标,但未能满足人类接受标准。

虽然像神经网络这样的黑盒模型带来了准确性的显著提升,但这通常是以失去可解释性和人类理解力为代价的。相比之下,用直观的 if-then-else 条件和简单的阈值来解释决策树模型就容易多了。

然而,在项目中,复杂的黑盒模型可能带来的商业利益的改善太诱人了,不容忽视。作为数据科学从业者,我们的责任是弥合这一鸿沟,实现机器学习见解的消费,并温和地推动规范的行动。

如果不能简单的解释,说明你理解的不够好。——阿尔伯特·爱因斯坦

机器学习的可视化框架

虽然图表在传达信息方面更强大,并且可以证明远远优于数字表,但视觉框架在将机器学习的智能人性化方面可能特别有效。

让我们看看这个可视化框架的 4 个关键元素,它们可以促进简单理解,并有助于揭开高级分析模型的神秘面纱。

A visual framework for humanizing Machine learning

1.信息设计:

数据的视觉故事讲述是最重要的方法,它不仅呈现数字表,而且重要的是呈现统计结果和算法结果的解释,以达到规定的行动。

一个标准化的方法以用户为中心的信息设计方法,通过设计正确的导航工作流程,相关的表现和相关的视觉设计是开始这个旅程的正确地方。

Demonstration of how a static visual presentation can encapsulate & illustrate model results well

2.适应性抽象:

洞察一个系统最有效的方法是通过跨越抽象层次。数据科学家和设计师本能地在不同层面上上下移动,以收集见解&为用户设计解决方案。

当务之急是让用户拥有一定的流动性,这样他们就可以鸟瞰全局(抽象的摘要),消化底层细节,并根据上下文和用户的专业知识进行动态导航。

Bret Victor 的 抽象阶梯 是一个有用的参考,其中他演示了通过抽象时间、算法和数据来绕开问题。以一种上下文相关的、领域驱动的方式应用它,可以通过揭示底层的设计方法来揭开分析解决方案的神秘面纱。

Bret Victor’s ladder of abstraction with a toy car example as a walk-through

3.模型分解

在用户的入门之旅中,同样重要的是向他们提供对模型内部的窥探,尽管不是以压倒性的方式。虽然像神经网络这样的算法如何学习或将数据映射到期望的输出仍然令人类困惑,研究在这一领域进展迅速。

有几个早期的 尝试来解开深度学习的内部步骤序列,特别是在分类和图像识别等领域。让用户免受有毒 统计术语的危害,如果我们能够解压缩模型并实现对输出的简单可追溯性,这将大大有助于让人们欣赏这些黑盒模型的美丽。

A powerful methodology for classification models; Distill has setup a prize for outstanding work in this area

4.用户交互性:

用户交互性是将这个框架的各种元素粘在一起的强有力的粘合剂。它实现了一个可视化的讲故事界面,促进了跨抽象级别的有意义的用户旅程,以理解机器学习模型的显著性和操作。

通过使所有的用户交互一致、可感知、可学习和可预测,整个体验可以从一个令人怀疑的事物转变为有意义和令人敬畏的事物。

Case study: What-if modelling (move the sliders) for prescriptive action, enabled in a Visual causal analysis

摘要

虽然数据科学和人工智能学科经历了令人兴奋和振奋的进步,但保持用户的期望和体验是重要的。这一点非常关键,因为相当一部分目标人工智能用户正随着日益加深的脱节和不信任而迅速疏远。

弥合这一差距不需要太多的想象力。我们的工具包中已经有了许多建立用户信任和促进理解所需的使能因素,该领域的研究正在迅速解开其余的难题。

我们需要的是承认这种差异,并在实施机器学习解决方案时,通过调整上述视觉框架以及组成的 4 个关键方面,有意识地努力解决这一问题。

对数据科学充满热情?随意在 LinkedIn 或者Twitter上加我。

[## Ganes Kesari | LinkedIn

在其他网站上包含此 LinkedIn 个人资料

www.linkedin.com](https://www.linkedin.com/in/ganes-kesari/)

可视化我的脸书网络集群

原文:https://towardsdatascience.com/visualising-my-facebook-network-clusters-346bac842a63?source=collection_archive---------4-----------------------

一个月前,我无意中发现了一个由 @Nicky Case 做的名为群众的智慧和疯狂的杰出项目。这个互动游戏描述了信息、成瘾、假新闻和行为如何在人际网络中传播。我强烈建议你在进一步阅读之前尝试这个项目,因为它会帮助你理解上下文。

Crowds explains network theory concepts using mini DIY interactives

项目摘要出现在结论页之前。他们说——“一个健康的社会需要群体内部的纽带群体之间的桥梁”,并用一个有用的图表来说明。

For healthy flow of ideas, one needs a mix between bridging and bonding in their network

这个项目让我们深入了解了两极分化的机制——既是孤立网络的一部分,又是超连接网络的一部分,这是如何让我们生活在泡沫中的——让我们更难获得与我们现有观点不一致的信息。

这些想法让我睡了几个晚上。我很好奇,想知道我是群体思维泡沫的一部分,还是一个孤立的网络。

所以我决定把我的脸书网络形象化——亲眼看看我在 2000 多个朋友的网络中处于什么位置。

以编程方式构建我的网络

脸书对数据不太友好,尤其是在剑桥分析事件之后。它不提供对提供用户连接的结构化列表的 API 的访问。Twitter 在数据访问方面更友好,但由于我在脸书比在 Twitter 上更活跃,它将是我现实生活网络的更好指标。

我使用 Selenium 作为 web 抓取工具来获取我所有 2000 多个朋友的列表,并将其存储为 JSON 文件。然后我有计划地访问了他们的个人资料,并搜集了我和他们共同的朋友的名单。

Scraping Facebook to get list of mutual connections of friends

经过 65 个小时的搜索和一次临时阻塞,我设法获得了我所有朋友的列表,以及我与他们共享的所有共同朋友的列表。

Structured list of mutual friends with every friend stored as JSON files

处理数据

现在我有 2000 多个 JSON 文件,每个朋友一个文件,其中包含我和他们有共同之处的朋友列表。我所需要做的就是将这个网络可视化——作为一个由 2000 个节点连接而成的图表。

我用了一个叫做 Gephi 的开源软件来做这个。Gephi 需要两个文件来绘制网络——“节点”和“边”——前者列出了所有具有唯一 ID 的节点和关于每个节点的一些附加数据,后者列出了节点之间的所有连接以及关于连接的附加信息,例如方向性和权重。

我决定使用我与一个人交换的消息数量来包含在可视化中,以查看我的亲密朋友在网络中的位置。我用我的脸书档案数据来计算这个。

所有的数据,因此被提炼成两个简洁的文件— nodes.csvedges.csv

Processed files ready to be visualized

可视化网络——终于!

好了,现在是隆重亮相的时候了!

鼓声

A block made of 2000 ‘friends’

嗯。嗯,这有点违反气候。

所以我们在这里看到 2000 个不同颜色的点。节点越暗(越大),我和节点代表的人互动越多。

这张 GIF 图有助于更好地解释。

Every node represents a friend — the connected nodes hightlight on hovering

现在,节点已经连接,但我们需要根据它们的连接程度将它们分组。一种方法是应用力导向算法——Gephi 中的一种内置功能,模拟基于物理的网络转换,使连接的节点相互吸引,断开的节点相互排斥——从而根据它们的相互连接将它们排列在整齐的集群中。

我应该强调的是,没有额外的数据,如我的朋友来自哪里,他们的背景是什么,等等,被输入到这个模拟中。它将纯粹在网络互连的基础上工作。说得够多了,让我们来看看实际行动。

运行强制定向算法

我在这个视频中记录了整个模拟过程,如果你已经完成了,我强烈建议你观看其中的一部分。

我输入模拟的数据没有关于我朋友个人细节的信息,但该算法将我的网络排列成整齐的桶,准确地代表了我生活中的背景——按城市或工作场所排列。

从图表中得出的推论

Generated graph of my network

  1. IIT·卡拉格普尔在我的好友列表中占了 60%以上,由于其极其密集的相互联系,这使得我的网络非常容易受到群体思维的影响。难怪我的脸书反馈极度偏颇,大多与我自己的 20 多岁的男性——印度——IIT——建筑观点一致。
  2. 有很高的 冗余度— 有是网络的整个区域,有我从未交往过的人脉很广的人。事实上,我在脸书上 50%的信息都是和 9 个朋友交流的。在我自己的“朋友圈”里,即使没有上千人,也有数百人实际上是陌生人。
  3. ——我的大多数亲密朋友都位于群集的交叉点——这意味着我们共享两个以上的子网络,因此我们的生活中有更多的“区域”交叉,这有助于更丰富的经历,从而更丰富的友谊。
  4. 个体集群中有影响力的人位于子网络的中心:我的许多受欢迎的亲戚和大学生群体中的职位承担者由于与其他人的高联系而占据了网络的中心。
  5. 我的网络的平均路径距离是 2.4,这意味着每个人与其他人的平均距离是 2.4。这意味着我的关系网或多或少是紧密相连的。

那都是乡亲们!

我和麻省理工学院媒体实验室的 Judith Sirera 还制作了另一个数字工具,名为“与自己约会”(https://www . Media . MIT . edu/projects/A-Date-With-Yourself/overview/),它可以帮助你与过去的自己创造互动体验。

源代码?

如果你喜欢我的工作,可以考虑通过 请我喝咖啡 来支持我的工作😋💝作为感谢,我会给你提供一个链接到这个项目的源代码与指示,使你自己的网络图🌟 💫✨

使用 Python 可视化南非婚姻数据

原文:https://towardsdatascience.com/visualising-south-african-marriage-data-using-python-3f3887238ddb?source=collection_archive---------18-----------------------

数据可视化是一个非常重要的工具,可以发现影响特定市场、人群或用户和客户行为的趋势。在处理大数据时,这种价值尤其强大。可视化通过将数据转换为更直观的视觉效果,使数据更容易消化和解释,因为人类通常以视觉为导向。

有许多工具可以在这个过程中提供帮助,包括 Excel。然而,出于本文的目的,重点是使用 Python 来执行这种分析。Python 是一种理想的编程语言,通常用于可视化和数据分析,尤其是在与大型数据集交互时。

本文的目的只是向读者介绍从 URL 上传数据、清理数据(在本例中不需要太多清理工作)并以最合适的方式可视化数据的步骤。

数据

我决定查看 StatsSA 关于 2006 年至 2015 年间记录的民事婚姻数据。数据帧总共有 130 万个条目。该数据框架中的一些列包括:I .)province code-代表南非给定省份的代码。)MarriageMonth —表示给定月份的整数,iii。)BridegroomAge,四。新郎和新娘之间的年龄差距。我选择不看各省的婚姻状况,因为这些数字与每个省的人口规模相对应。

在这篇文章中,我们将只关注视觉化;从 2006 年到 2015 年,一年的结婚总数按月份和新郎新娘的平均结婚年龄来划分。

按月份和年份可视化婚姻总数

表示这种可视化的最佳方式之一是通过堆叠条形图,因为这是比较该数据集时间段内每月总结婚数的最直观方式,并且实现起来相对简单。

执行此分析的第一步包括从源获取此数据的 csv 格式,读取它并将其保存为 dataframe。

import pandas as pd
import numpy as np
import io
import requests
url = "https://data.code4sa.org/api/views/r4bb-fvka/rows.csv"
file=requests.get(url).content
c=pd.read_csv(io.StringIO(file.decode('utf-8')))

然后,您希望导入 python 库,这将允许您将数据绘制成可视化的图形。我还导入了一个库,它使我能够生成一个彩色地图,我将使用它来使读者更容易识别堆叠条形图中的不同月份。

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

下一步涉及实际的可视化。为了完成这项工作,我将数据按照我要计算的婚姻总数的列进行了分组;年和月。这将返回一个具有两个堆叠级别数据的数据框架,即一年被细分为几个月。然后,我开始分解这些数据。这个过程将月份转换成列,以便我将数据绘制成清晰的堆积条形图。

然后绘制数据,并根据与结婚月份整数相对应的月份重命名图例。

c.groupby(['MarriageYear', 'MarriageMonth']).size() \
 .unstack().plot.bar(stacked=True, colormap='GnBu', figsize=(12, 14))\
 .axes.legend(['January','February','March','April','May','June','July','August','September','October','November','December'])

结果

结果是一个漂亮的彩色堆积条形图,显示了 8 年来结婚人数的持续下降。

这一趋势表明,人们更倾向于在年底结婚,12 月是结婚的首选月份。

table = c.groupby(['MarriageYear', 'MarriageMonth']).size().unstack()
print("December:",sum(table[12]*100/table.values.sum()))
print("November - December:",(sum(table[12])+sum(table[11]))*100/table.values.sum())

事实上,2008 年至 2015 年间,16.09%和 25%的婚姻分别发生在 12 月和 11 月至 12 月。像六月和七月这样较冷的月份正好相反,六月的结婚率低至 6.3%,六月和七月为 12%。

平均结婚年龄

对于 2008 年至 2015 年之间的平均年龄组,使用 seaborn regplot 似乎是最合适的方式来表示这些数据,一个用于新娘,另一个用于新郎。Seaborn Regplot 类似于散点图,有一条线穿过代表移动平均值的数据。

我没有将所有 130 万个条目都绘制在这张图上,而是计算出了大约 1070 个合适的样本大小。

https://www.surveysystem.com/sscalc.htm(置信水平- 99%,置信区间- 3)。

*#average age of BrideGroom*
dfSample = c.sample(1070)
xdataSample, ydataSample = dfSample['MarriageYear'], dfSample['BridegroomAge']
sns.regplot(x=xdataSample,y=ydataSample, color ='g')
plt.show()

MarriageYear
2008    36.121894
2009    36.394938
2010    36.820361
2011    36.705663
2012    36.845890
2013    37.062966
2014    37.288561
2015    37.959784
Name: BridegroomAge, dtype: float64

2008 年,新郎新娘的平均结婚年龄为 36 岁,到 2015 年上升到 37.9 岁(可能受到异常值的影响),而到 2015 年,平均年龄从 34 岁上升到 36 岁。

*#mean for bride*
dfSample = c.sample(1070)
xdataSample, ydataSample = dfSample['MarriageYear'], dfSample['BrideAge']
sns.regplot(x=xdataSample,y=ydataSample, color ='b')
plt.show()

新娘的平均年龄比新郎新娘小 4 到 5 岁,平均年龄从 31.7 岁开始,到 2015 年慢慢上升到 33.65 岁。初婚新娘的平均年龄从 29 岁开始,到 2015 年上升到 31 岁。

用 Networkx 可视化股票相关性

原文:https://towardsdatascience.com/visualising-stocks-correlations-with-networkx-88f2ee25362e?source=collection_archive---------0-----------------------

在最近的一堂网络分析课上,我们被要求可视化股票之间的相关性。作为投资者,你对通过选择不同类型的投资来分散风险感兴趣。因此,你可能希望看到哪些股票表现相似(正相关)或非常不同(负相关)。

使用一个包含所选股票随时间变化的价格的数据集,我们将创建一个关联矩阵,并通过 Networkx 可视化。

Github 上的 Jupyter 笔记本(也可以在 HTML 文件中看到)的完整代码。

图书馆

a.计算相关矩阵

我们首先加载数据集,并用.corr()创建相应的相关矩阵。

下图显示了数据帧的快照。

然后我们存储股票名称,这样我们就可以命名图形中的节点,并将数据帧转换为矩阵,这样在 networkx 中创建图形就更容易了。

b.创建图表

我们现在将基于相关矩阵创建一个图表。G.edges(data=True)将显示所有的边及其相应的权重。

c.(英)可视化(= visualization)

第 1 部分:基本图表

你会得到这样的东西:

Graph — Part 1

第 2 部分:区分负相关和正相关

现在,我们将从图 G 创建一个名为 H 的副本。在 H 中,如果我们想要可视化所有正相关,我们将删除所有负的边,反之亦然。

这样做之后,我们需要更新代码,将“G”改为“H”。

下面我们可以看到负相关和正相关的图表。我们可以注意到,可用的负相关性更少(右图)。

Left: create_corr_network_2(G,corr_direction=”positive”) | Right: create_corr_network_2(G,corr_direction=”negative”)

第 3 部分:根据权重设置边的样式

我们现在需要提取边的权重,以便它们作为图中边的宽度。鉴于相关性非常小,我们将使用函数1+abs(x))**2来修改每一个,这样它们在图中就不会看起来太薄。

如果相关性为正,我们将使用标度颜色plt.cm.GnBu,否则使用plt.cmPuRd

然后,我们需要将所有这些值添加到nx.draw_networkx_edges中。

我们的图表现在看起来像这样:

Left: create_corr_network(G,corr_direction=”positive”) | Right: create_corr_network(G,corr_direction=”negative”)

第 4 部分:用最小相关性过滤边缘

上面的图表看起来太密集了,所以我们现在将添加一个最小相关性,这样我们只能看到更强的相关性。

对于前面的代码,我们只需要添加正相关的or weight["weight"] < min_correlation和负相关的or weight["weight"] > min_correlation。如果一条边不符合这个标准,那么它将被删除。

使用最小值。相关性为 0.7 和-0.7,我们得到下图:

Left: create_corr_network(G, corr_direction=”positive”, min_correlation = 0.7) | Right: create_corr_network(G, corr_direction=”positive”, min_correlation = -0.7)

第 5 部分:根据链接边的数量(度数)设置节点样式

最后一步是根据节点链接到多少条边(也称为节点的度数)来设置节点的样式。为此,我们在 node_sizes 中解包所有节点,并将其缩放到x**3,以便它们看起来更大。

最终的图表如下所示:

Left: create_corr_network(G, corr_direction=”positive”, min_correlation = 0.7) | Right: create_corr_network(G, corr_direction=”positive”, min_correlation = -0.7)

创建上述图表的最终代码如下:

将阿姆斯特丹的温度可视化为 R 中的热图—第一部分

原文:https://towardsdatascience.com/visualising-temperatures-in-amsterdam-as-a-heatmap-in-r-part-i-7e1be1e251c0?source=collection_archive---------5-----------------------

我最近在玩热图,决定用它来可视化阿姆斯特丹的温度数据。

获取数据:

荷兰皇家气象研究所(Koninklijk Nedarlands Meteorologisch Instituut in Dutch,或简称为 KNMI )免费提供追溯到 20 世纪 50 年代的历史天气数据。你可以从他们的测量和观察页面获得你选择的气象站的数据(荷兰语)。他们给出每小时和每天的读数。我从本页的中获得了史基浦机场(气象站编号 240)的每日数据。

阅读和理解数据:

数据被格式化为 CSV 文件。前几行有用荷兰语和英语描述每个字段的解释。这些行没有任何注释字符(通常是#)作为前缀,所以我们在读取文件时会跳过它们。我们感兴趣的内容从第 48 行开始,即标题行。

t <- read.csv('~/Downloads/etmgeg_240.txt', skip=47)
str(t)'data.frame': 24311 obs. of  41 variables:
 $ X..STN  : int  240 240 240 240 240 240 240 240 240 240 ...
 $ YYYYMMDD: int  19510101 19510102 19510103 19510104 19510105 19510106 19510107 19510108 19510109 19510110 ...
 $ DDVEC   : int  188 153 203 193 207 185 240 203 246 176 ...
 $ FHVEC   : int  77 41 15 77 82 57 134 77 67 51 ...
 $ FG      : int  87 41 21 77 87 62 144 82 72 62 ...
 $ FHX     : int  195 82 51 103 144 123 180 103 129 103 ...
 $ FHXH    : int  18 4 24 15 21 22 13 20 12 21 ...
 $ FHN     : int  41 10 0 51 36 0 62 51 21 26 ...
 $ FHNH    : int  24 21 3 1 24 3 24 1 24 3 ...
 $ FXX     : int  NA NA NA NA NA NA NA NA NA NA ...
 $ FXXH    : int  NA NA NA NA NA NA NA NA NA NA ...
 $ TG      : int  12 13 3 12 48 64 67 61 41 26 ...
 $ TN      : int  -13 7 -20 -7 18 46 58 36 6 -8 ...
 $ TNH     : int  1 4 9 6 1 4 24 2 24 5 ...
 $ TX      : int  26 18 16 19 84 86 86 70 63 61 ...
 $ TXH     : int  20 19 23 16 21 24 1 14 1 24 ...
 $ T10N    : int  NA NA NA NA NA NA NA NA NA NA ...
 $ T10NH   : int  NA NA NA NA NA NA NA NA NA NA ...
 $ SQ      : int  NA NA NA NA NA NA NA NA NA NA ...
 $ SP      : int  NA NA NA NA NA NA NA NA NA NA ...
 $ Q       : int  NA NA NA NA NA NA NA NA NA NA ...
 $ DR      : int  NA NA NA NA NA NA NA NA NA NA ...
 $ RH      : int  NA NA NA NA NA NA NA NA NA NA ...
 $ RHX     : int  NA NA NA NA NA NA NA NA NA NA ...
 $ RHXH    : int  NA NA NA NA NA NA NA NA NA NA ...
 $ PG      : int  9891 9876 10019 10098 10059 10043 10026 10084 10089 10090 ...
 $ PX      : int  9957 9923 10097 10114 10094 10087 10105 10115 10151 10148 ...
 $ PXH     : int  NA NA NA NA NA NA NA NA NA NA ...
 $ PN      : int  9837 9853 9931 10084 10030 9980 9957 10040 10034 10016 ...
 $ PNH     : int  NA NA NA NA NA NA NA NA NA NA ...
 $ VVN     : int  NA NA NA NA NA NA NA NA NA NA ...
 $ VVNH    : int  NA NA NA NA NA NA NA NA NA NA ...
 $ VVX     : int  NA NA NA NA NA NA NA NA NA NA ...
 $ VVXH    : int  NA NA NA NA NA NA NA NA NA NA ...
 $ NG      : int  7 8 6 7 8 8 8 7 5 5 ...
 $ UG      : int  90 93 94 94 95 89 82 93 89 89 ...
 $ UX      : int  98 98 100 97 100 100 94 97 96 95 ...
 $ UXH     : int  6 9 21 12 5 3 4 8 1 2 ...
 $ UN      : int  73 88 83 89 89 72 76 88 76 78 ...
 $ UNH     : int  20 1 12 8 14 23 16 17 14 12 ...
 $ EV24    : int  NA NA NA NA NA NA NA NA NA NA ...

因此,我们有各种各样的天气观测——尽管有些指标的读数不是每年都有的。越往过去走,数据越粗略。在我们的练习中,让我们从 2016 年的每日气温数据开始。YYYYMMDD是日期栏,而TXTN栏分别包含最高和最低温度。温度以 0.1°C 为单位(例如,10°C 在本文件中显示为 100 ),因此我们将它们除以 10。

过滤和修改数据:

我们将使用dplyr包中的filter函数来过滤 2016 年的数据。然后我们将使用select函数来挑选我们需要的字段,并将这个子集分配给一个新的数据帧。

library(dplyr)
t %>% filter(YYYYMMDD >= 20160101 & YYYYMMDD <= 20161231) %>% select(YYYYMMDD, TN, TX) -> t.2016

接下来,我们将对此数据进行一些更改。每次观察的日期(YYYYMMDD列)存储为整数。我们将把它转换成一个适当的日期对象,然后把它分解成方便的单位——年、月、周、工作日和日——供以后使用。同时,我们也将温度除以 10。我们将使用lubridate包来处理日期。

library(lubridate)
t.2016 %>% mutate(
    date = as.Date(as.character(YYYYMMDD), format="%Y%m%d"),
    year = year(date),
    month = month(date, label=T, abbr=T),
    week = strftime(date,"%W"), 
    wday = substring(wday(date, label=T, abbr=T),1,2),
    day = day(date),
    TN = TN / 10,
    TX = TX / 10
) -> t.2016
head(t.2016) YYYYMMDD  TN  TX       date year month week wday day
1 20160101 1.1 8.0 2016-01-01 2016   Jan   00   Fr   1
2 20160102 4.6 6.5 2016-01-02 2016   Jan   00   Sa   2
3 20160103 5.3 8.5 2016-01-03 2016   Jan   00   Su   3
4 20160104 4.3 7.2 2016-01-04 2016   Jan   01   Mo   4
5 20160105 4.4 7.7 2016-01-05 2016   Jan   01   Tu   5
6 20160106 1.8 4.4 2016-01-06 2016   Jan   01   We   6

可视化数据:

让我们首先尝试将最高温度可视化为热图。我们将使用绿色调色板来绘制热图。

library(ggplot2)
library(viridis)
ggplot(data = t.2016, aes(x=day,y=month)) + geom_tile(aes(fill=TX)) + scale_fill_viridis()

我们可以清楚地看到阿姆斯特丹夏季从 5 月到 9 月的延伸,7 月是一年中最热的一天,1 月和 12 月有几天非常冷。

我们现在将做一些更小的调整:

  1. 我们将在 x 轴上标记所有的日子,而不是让 ggplot 为我们选择一些东西。毕竟我们知道一个月不会超过 31 天。此时,我们将确保日期(x 轴)从 1 开始,而不是从 0 开始。我们还会将 y 轴向热图靠近一点。
  2. 因为这是最高温度,我想选择一个能唤起温暖的调色板。Viridis 有 3 个以上的调色板-岩浆,等离子和地狱,我们将选择岩浆主题来完成这项工作。
  3. 在上面的截图中,平铺看起来很漂亮,但是根据你的绘图窗口的大小,它们可能看起来被压扁了。我们将锁定图块,使其始终保持 1:1 的比例,而不考虑绘图窗口的宽度和高度。
  4. 最后,我们将使用不同的主题隐藏背景中的灰色网格。我是来自 ggthemes 套装的塔夫特主题的粉丝。
**library(ggthemes)**
ggplot(data = t.2016, aes(x = day,y = month)) + 
geom_tile(aes(fill = TX)) + 
**scale_x_continuous(breaks=c(1:31), expand=c(0,0))** + **coord_equal(ratio = 1) +** scale_fill_viridis(**option="magma"**) + **theme_tufte(base_family="Helvetica")**

我个人认为岩浆主题会让夏季更加突出。

链接:

  1. 如果你喜欢viridis库,请务必阅读插图。我还发现小插曲中提到的 SciPy2015 视频很有教育意义。
  2. 我从 Bob Rudis 的这个帖子中学到了很多我在这里使用的技术。

接下来:

虽然我对我们的进展很满意,但我们还可以利用一年的温度数据做更多的事情。在下一篇文章中,我将分享一种让热图看起来像真实日历的方法。

更新: 第二部分现已更新,两部分的源代码也已更新。

将阿姆斯特丹的温度可视化为 R 中的热图—第二部分

原文:https://towardsdatascience.com/visualising-temperatures-in-amsterdam-as-a-heatmap-in-r-part-ii-92db6b37a5e1?source=collection_archive---------4-----------------------

在这个两部分系列的的最后一部分中,我们研究了如何获取阿姆斯特丹的天气数据,处理这些数据并创建一个简单的热图。下面是我们的数据在第一部分结束时的样子:

 YYYYMMDD  TN  TX       date year month week wday day
1 20160101 1.1 8.0 2016-01-01 2016   Jan   00   Fr   1
2 20160102 4.6 6.5 2016-01-02 2016   Jan   00   Sa   2
3 20160103 5.3 8.5 2016-01-03 2016   Jan   00   Su   3
4 20160104 4.3 7.2 2016-01-04 2016   Jan   01   Mo   4
5 20160105 4.4 7.7 2016-01-05 2016   Jan   01   Tu   5
6 20160106 1.8 4.4 2016-01-06 2016   Jan   01   We   6

我们现在将根据这些数据创建另一个热图,并使它看起来像一个日历。让我们首先在 y 轴上绘制星期,在 x 轴上绘制星期几:

ggplot(data = t.2016, aes(x = wday, y = week)) + 
geom_tile(aes(fill = TX)) + 
coord_equal(ratio = 1) + 
scale_fill_viridis(option="magma") + theme_tufte(base_family="Helvetica")

注意 x 轴上的星期是按字母顺序排列的。我们将把它们转换成与一周中的天数相对应的系数:

t.2016$wday <- factor(t.2016$wday, levels=c("Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"))

接下来,我们将在month上应用一个facet_wrap来给每个月分配它自己的面板。注意,我们设置了scales = "free",这样每个月都有自己独立的 x 和 y 轴。

ggplot(data = t.2016, aes(x = wday, y = week)) + 
geom_tile(aes(fill = TX)) + 
coord_equal(ratio = 1) + 
scale_fill_viridis(option="magma") + theme_tufte(base_family="Helvetica") +
**facet_wrap(~month, nrow = 3, scales = "free")**

我们现在很亲密。让我们使用geom_text在每个图块上添加日期:

ggplot(data = t.2016, aes(x = wday, y = week)) + 
geom_tile(aes(fill = TX)) + 
coord_equal(ratio = 1) + 
scale_fill_viridis(option="magma") + theme_tufte(base_family="Helvetica") +
facet_wrap(~month, nrow = 3, scales="free") + **geom_text(aes(label=day), color="grey", size=3)**

差不多了,但还不完全是。看到问题了吗?我们的约会颠倒了!

基本上,一个月的第一周应该在顶部(即远离 x 轴),最后一周应该在底部。我们可以通过将周转换为按相反顺序排序的因子来实现这一点:

t.2016$week <- 
factor(t.2016$week, levels=rev(sort(unique(t.2016$week))))

在此期间,我们还将添加一些收尾工作:

  1. 隐藏每个月的 y 轴刻度线和标签。我们还将隐藏主轴的 x 和 y 轴标题。
  2. 将 x 轴标签移动到顶部并隐藏其刻度线。
  3. 默认情况下,月份标签将放置在面板内部。我们将把它们移到外面,否则 x 轴标签会出现在它们上面。我们还将增加月份标签的字体大小,并将它们左对齐。
  4. 向图表添加标题。
ggplot(data = t.2016, aes(x = wday, y = week)) + 
geom_tile(aes(fill = TX)) + 
coord_equal(ratio = 1) + 
scale_fill_viridis(option = "magma") + 
theme_tufte(base_family = "Helvetica") +
facet_wrap(~month, nrow = 3, scales="free") + 
geom_text(aes(label = day), color = "grey", size = 3) + **# hide y-axis ticks and labels** theme(axis.ticks.y = element_blank()) +
theme(axis.text.y = element_blank()) +**# hide main x and y-axis titles** theme(axis.title.x = element_blank()) + 
theme(axis.title.y = element_blank()) +**# move x-axis labels (week names) to top, hide ticks** scale_x_discrete(position = "top") +
theme(axis.ticks.x = element_blank()) +**# move panel title (month names) outside (above week names)** theme(strip.placement = "outside") +
theme(strip.text.x = element_text(size = "14", hjust = 0)) +**# center-aligned plot title** ggtitle("2016: Heatmap of maximum temperatures in Amsterdam") + 
theme(plot.title = element_text(size = "16", hjust = 0.5))

最终结果:

更新: 源代码

充分利用回答机器人:基于 t-SNE 的主题群可视化

原文:https://towardsdatascience.com/visualising-topic-groups-using-t-sne-d44cbcd57ca?source=collection_archive---------4-----------------------

最初发表于 Zendesk Engineering

客户服务的世界充满了问题。在 Zendesk 我们提供一种叫做支持的产品,公司可以用它来处理这些问题。例如,当客户发送电子邮件时,公司代理可以使用支持来快速响应,从而(希望)带来积极的解决方案和幸福的关系。然而,人们通常会遇到类似的问题,因此我们也提供了一个名为 Guide 的产品,用于发布常见问题的答案。

答案机器人是一个人工智能系统,它通过搜索在 Zendesk 指南中找到的答案来自动响应支持票。它通过摄取大量的文本数据来学习语言模型,然后用它来读取传入的门票。了解了收到的票证后,它会就哪些指南文章可能会回答最终用户的问题提出明智的建议。

把单词变成数字

驱动该系统的基础数学的一个有趣的结果是将指南文章和支持票转换成称为分布式表示或嵌入的数字向量。

举个例子,

*'How do I change my password'* → Answer Bot → [0.4, 3.35, 0.2, 5.04]

答案机器人真的很擅长把内容接近的票和文章分配给向量空间接近的向量。这在评估指南和支持中的内容范围时具有很大的实用价值,因为我们可以使用机器学习技术(如聚类)来识别主题。然后,我们可以用它来生成简单的可视化效果,让 Zendesk 客户鸟瞰:

  1. 在其指南实例中呈现内容。
  2. 他们在票证上看到的问题类型。

第二个是我们即将推出的产品 Content Cues 的主要目标,该产品旨在帮助指导内容创建者根据他们的支持标签中发生的对话制作相关内容。

将 Answer Bot 产生的分布式表示可视化的困难在于它们是 100 维向量,这比我们习惯绘制的通常的 2 或 3 维向量要多得多。因此,虽然我们可以从数学上定义跨门票和文章的信息聚类,但没有一种自然的方式来将这些数据点投影到一个易于人类查看和解释的图上。

幸运的是,有一些强大的方法可以让我们将高维数据映射到低维空间。我们在这里选择使用的方法被称为 t 分布随机邻居嵌入,或 t-SNE 。

t-SNE:一种可视化高维数据的有用技术

t-SNE 算法很有趣,因为它使用联合概率分布来描述数据点的接近程度。算法是这样的:

  1. t 分布用于产生描述高维点接近程度的联合概率分布。
  2. 第二组低维数据点(对应于每个高维数据点)被随机初始化,并且 t 分布被用于创建另一个联合概率分布。
  3. 梯度下降用于通过更新低维数据点的值来最小化两个分布之间的差异。

最终结果为我们提供了反映高维数据结构的数据点,并且能够绘制在 2D 或 3D 图上。

例如:

*'How do I change my password'* → Answer Bot → T-SNE → [0.65, 0.209] *'How do I reset my password'* →Answer Bot → T-SNE → [0.65, 0.319]*'How do I return an item'*     → Answer Bot → T-SNE → [0.32, 0.85]
*'I need to return a purchase'* → Answer Bot → T-SNE → [0.36, 0.75]

t-SNE can be used to project high dimensional data points in to low dimensional space while preserving their relative closeness.

可视化数据

在我们第一次通过时,我们决定将重点放在传入支持票证的内容上。我们采样了几千张票,用答案机器人把它们转换成 100 维向量,然后用 t-SNE 把它们投影到 2D 空间。

100-Dimension Support tickets embedded into 2D space. Each point represents a unique ticket. The axis ticks can be ignored. A quick note about the plot: We also ran the original data through a variant of the KMeans clustering algorithm, which we used to colour groups of dots within the plots. Purple dots represent point deemed outliers from clusters.

正如您所看到的,如果我们将来自给定帐户的所有样本支持票嵌入到同一个 2D 空间中,事情看起来很混乱,很难解释。我们可以看到一些票组的分离,但我们没有看到清晰分离的漂亮紧密的集群。因此,接下来,我们删除了离群点,以获得聚类数据的清晰图像。

100-Dimension Support tickets embedded into 2D space with outlier points removed.

尽管在移除异常数据点后,该图的可解释性显著提高,但该图看起来仍然有些杂乱。因此,为了让这个图更好看,我们在使用 t-SNE 的之前消除了异常值。这产生了更加美观和可解释的结果。

Clusters are now clearly separated. Each of these clusters represent a group of related Support tickets that all talk about the same thing.

调整情节

t-SNE 图的局部和全局聚类结构在很大程度上受两个参数的影响:困惑和迭代次数。困惑与分配联合概率的方式有关,迭代的次数就是算法运行的次数,以便最小化描述数据的联合概率分布之间的差异。为了更好地探索这两个参数的影响,请查看如何有效地使用 t-SNE。

我们探索了改变困惑和迭代对审美和可解释性的影响,发现作者建议的默认设置通常效果最好。由于数据是在绘制之前采样的,我们能够将每个聚类的数据点数量限制在 100 个点,这在不同客户之间产生了相当一致的结果。一般来说,随着困惑的增加,集群的紧密度增加。

Grid comparison of t-SNE using a range of perplexity and iteration settings.

帮助公司成为客户想要的样子

如果你回想一下上面图中的每个点代表一张票的内容,就会发现一个深刻的效用。使用 t-SNE 来可视化支持票证,我们能够直观地捕获传入的支持票证数据流的结构,这为我们提供了向任何一个客户提出的问题的总体分布情况。对于 Zendesk Guide 平台来说,这是非常有价值的,因为它为我们提供了一种方法来帮助我们的客户弄清楚他们的客户在问什么。

如果我们的客户更了解他们的客户需要什么,那么他们可以提供更好的客户支持。在 Zendesk,这就是我们的全部。

感谢以下朋友和同事对这篇博文的有益反馈:阿尔温·格里芬、安·丁、克里斯·豪斯勒、宋伊·谢、埃里克·帕克、迈克·莫蒂默

延伸阅读:

  • 范德马腾律师事务所。使用基于树的算法加速 t-SNE。机器学习研究杂志15(10 月):3221–3245,2014。 PDF [ 补充材料 ]
  • 范德马滕和辛顿。使用 t-SNE 可视化高维数据机器学习研究杂志9(11 月):2579–2605,2008。PDF补充材料谈
  • https://lvdmaaten.github.io/tsne/
  • (Sci-kit learn 实现)https://github . com/Sci kit-learn/Sci kit-learn/blob/a 24 c8 b 46/sk learn/manifold/t _ SNE . py # L442

可视化——从灾难中学习:泰坦尼克号

原文:https://towardsdatascience.com/visualization-learning-from-disaster-titanic-42eeb99cdbdc?source=collection_archive---------0-----------------------

我最近一直在学习数据分析,我的旅程带我参加了关于“从灾难中学习:泰坦尼克号”的 kaggle 练习。我还受到启发,从我遇到的一些其他资源中对数据集进行了一些可视化分析。

该数据集提供了泰坦尼克号上乘客的详细信息,并有一个关于乘客存活率的专栏。幸存的人被表示为“1”,而未幸存的人被表示为“0”。本练习的目的是确定是否有可能通过乘客的其他特征/信息来确定哪些人可能幸存。

名词(noun 的缩写)b:专栏、专题和信息这三个术语在这里都有相同的含义,可以互换使用。

我会获取一些特征/列,并将其可视化,以深入了解数据集,并确定某些特定特征是否可能决定某个乘客能否生还。

首先,清理数据集以移除或替换丢失的值。数据集中的列有:
乘客 Id: 乘客身份
生还: 乘客是否生还
乘客类别: 车票类别
姓名: 乘客姓名
性别: 乘客性别(男或女)
年龄: 乘客年龄
SibSp: 与乘客同行的兄弟姐妹和/或配偶人数
Parch: 与乘客同行的父母和/或子女人数
车票: 票号
票价: 票价

乘客性别

存活下来的雌性比雄性多。

年龄

票的类别(Pclass)

**

第一张图显示,平均而言,Pclass 1 更贵,而 Pclass 3 最便宜,第二张图显示,持有 Pclass 1 车票的乘客更有可能幸存,而 Pclass 3 车票的持有者不太可能幸存。

港口登船

**

第一个图表显示端口 C 的平均成本高于其他端口。第二张图显示,在 C 港上船的人生还的可能性稍大一些。

我们上两节已经告诉我们,为旅行支付更多费用的人更有可能幸存下来。

家庭成员

我已经添加了兄弟姐妹/配偶列和父母/子女列,形成了一个家庭列。我们现在将使用这个家庭栏来想象有家人在船上的乘客是否可能生还。

概要 : 一名女性,购买了一张 Pclass 1 船票,在 C 港上船,船上有一至三名家庭成员,年龄不到 10 岁,生还的可能性更大。

十年 Twitter 数据的可视化(第二部分——设计)

原文:https://towardsdatascience.com/visualization-of-10-years-of-twitter-2-design-abbbe121a7d4?source=collection_archive---------7-----------------------

这是关于我的数据可视化项目http://tany.kim/twitter。阅读上一篇关于数据清理和处理的文章。

有了102 万条推文349 个好友的海量数据集,我得出了两个主要观点(推文和好友)。每个视图都有一系列的交互式可视化,其中一些通过在其中一个视图中发生的用户交互来链接和更新。在这里,我描述了决策过程——为什么我选择这些可视化类型和交互。讨论设计过程不可避免地包括可视化的见解。

按类别排列的推文堆积条形图

Stacked bar charts of tweets categorized with interaction type during a selected time range

对于推文的分析,我选择了 4 个类别(交互、媒体、语言、来源)。每个类别中的推文属于 2-3 种类型中的一种,并以颜色编码。那些不属于任何类型的推文以浅灰色显示。为了显示推文的时间线,我按月统计推文——一个月的推文用一组堆叠的条形表示。通过这个堆积条形图,我可以看到我很少转发,我从 2015 年末才开始引用。此外,我发现过去一年我提到的次数(即与朋友交谈的次数)比以前多。

同样的技术也用于显示每小时或每天的推文数量。在下图中显示了推文的来源,我可以看到一个清晰的模式,我一醒来就用手机发推文,然后开始工作时用电脑发推文,然后晚上使用手机的比例增加。

Stacked bars to show the source of tweets (green: big screen, orange: small screen)

类型比率饼图

Pie charts of four categories. Selected Category is highlighted.

堆积条形图有助于调查推文随时间的变化。除此之外,我想提供一种更简单的方式来显示给定时间内推文类型的比率。这四个饼图/圆环图汇总了所选时间范围内的所有推文。

天/小时的矩阵(热图)视图

Number of all tweets (not categorized) by day and hour

我只对“所有推文”使用了矩阵视图,所以我只能将数据集的一个属性(推文的数量)编码成一个可视属性(区域填充颜色的不透明度)。在我过去的项目中,我喜欢在两种颜色中使用数量有限(通常最多 7 步)的热图。这样,每种颜色都可以代表整个系列中的一个独立群体。我喜欢这种与众不同的颜色使用的美学,但是对于这个项目,我想展示 7x24 数据点之间的细微差异,这也是一种更简单的编码选择。

不透明度是一种很好的方式来区分与相邻元素的相对差异。但是尽管数据范围的图例显示为梯度,但精确的值很难解码。为了支持这一点,我添加了触发工具提示的鼠标悬停交互。较小的屏幕不支持此功能。

用于朋友搜索的所有连接的可视化

与具有常规子菜单类型的内容结构的 Tweets 视图相反,Friends 视图是搜索驱动的单页样式。

四个组件(朋友的搜索/下拉列表、线图、力定向网络图和散点图)用作用户界面,通过该用户界面可以选择朋友。当朋友被选择时,朋友视图中的所有可视化被更新,指定朋友的状态。

向朋友提及的折线图

Early prototyping of line graphs for friends

这是我为这个项目做的第一个可视化。该图是早期开发阶段的截图。这可能很有趣,但太混乱了,所以我想对数据集的一个维度进行编码,可能是分类数据,这样就可以使用颜色。我之前解释的将朋友标记为现实世界和/或网上朋友的想法最初来自于这种需求。这是迭代数据可视化设计的一个很好的例子;数据集在交给设计师之前并不总是完整的。有趣的可视化想法可以触发新数据属性的创建。

通过颜色编码,我可以清楚地看到我与现实世界中已经认识的人交谈,然后我将我的网络扩展到我从未见过的人。然后,当我有机会访问他们居住的城市时,我见到了他们中的一些人。我见过他们中的一些人很多次,我很感激 Twitter 创造的网络。

散点图

对二维数据进行编码的最简单的可视化方法之一是散点图。我用这个来编码提及次数(X 轴)和对话持续时间(Y 轴)。每个点代表一个朋友,并用线形图中使用的匹配类别进行颜色编码。

力定向图

通过追踪每条推文中提到的账户,我分析了我的朋友们是如何相互联系的。一种常见的可视化形式是力导向图,我开始用编写这个例子。每个节点(圆圈)的颜色编码与线图和散点图相同,边(两个圆圈之间的线)的厚度代表在一条推文中一起出现的次数。当选择一个朋友时,相应的节点和边被突出显示。

直方图和分布曲线和排名

在制作散点图之前,我制作了两个独立的直方图来显示提及次数的分布和交流持续时间的分布。在我制作这些直方图之前,我预计外观将接近正态分布。但事实非常令人吃惊。我的许多 Twitter 朋友(349 人中的 250 人)收到的总提及次数少于 100 次,而少数人超过了 2000 次。持续时间图不像计数图那样极端,但仍显示类似的模式。事实上,这些螺旋分布导致我制作散点图来显示每一个朋友,并列两个维度-计数和持续时间。此外,在分析了网络图数据后,我认为显示共享好友数量的分布也会很有趣。

我把分布曲线放在直方图上,然后列出每个类别中的前 10 个朋友。直方图本身不具备互动功能,但显示选定的朋友的状态。

使用 Tableau 中的经度和纬度值可视化地理数据

原文:https://towardsdatascience.com/visualize-geographic-data-using-longitude-and-latitude-values-in-tableau-4a90a00fca2b?source=collection_archive---------2-----------------------

如今,人口普查数据集和许多公共数据集都包含经度和纬度值。通过在地图上绘制经度和纬度坐标,可以直观地显示隐藏的地理信息。本文将提供一个分步指南,并举例说明如何在 Tableau 中构建地理可视化工作表。

以下是房地产数据集中经度和纬度值的示例。这些字段是地块级经度地块级纬度

longitude and latitude values

在 Measures of Tableau 中,右键单击宗地级别经度(数据集中的字段名),然后选择地理角色 > 经度。然后右键宗地级别纬度,选择地理角色 > 纬度

包裹级别经度拖至列架,将包裹级别纬度拖至行架。

复合属性联动键即属性唯一键拖动到标识卡上的明细处。这就是我们用 Tableau 绘制的地图。

拖动司徒市上的色标记牌。如下所示,添加了 Situs City 维度来编码关于城市属性位于哪个城市的信息。

Color Encoding

Situs City

可视化地理数据有助于我们发现不同的变量如何与地理位置相关联,方法是将这些变量在地图上分层。本文展示了如何使用 Tableau 中的经度和纬度值构建交互式可视化。

感谢阅读。如果您有任何问题,或者您有任何地理可视化的示例想要分享,请告诉我。

报名参加🦞:的 Udemy 课程

具有机器学习和统计的推荐系统

https://www.udemy.com/course/recommender-system-with-machine-learning-and-statistics/?referralCode=178D030EF728F966D62D

使用 Python 中的 Seaborn 可视化世界趋势

原文:https://towardsdatascience.com/visualize-world-trends-using-seaborn-in-python-2e563e7d35da?source=collection_archive---------3-----------------------

研究和分析数据是任何数据科学工作的第一步。您需要获得关于数据的性质和分布的一般信息,以便相应地规划您的工作流。这就是我们所说的“一张图胜过千言万语”的可视化的来源。有了信息丰富的图表,更容易从数据中获得见解,也更容易将见解传达给其他人。

在本帖中,我们将看到如何使用丰富的可视化来获得关于世界趋势数据的见解。该数据集包含了 1960 年和 2013 年的国家名称、国家代码、互联网用户统计、出生率和预期寿命。数据集和代码可以在 github 链接中找到

[## sambit 9238/数据科学

在 GitHub 上创建一个帐户,为数据科学的发展做出贡献。

github.com](https://github.com/sambit9238/DataScience/blob/master/SeabornPlotsOnWorldTrendSurvey.ipynb)

在分析数据之前,我们需要首先导入所有需要的依赖项。为了丰富的可视化,我们将在这里使用 seaborn,它在 matplotlib 库上工作,以提供更好的和信息丰富的情节。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

这里我用的是 python 3.5,numpy 1.13,pandas 0.18,matplotlib 1.5,seaborn 0.8,statsmodel 0.8.0。在做任何事情的时候,我总是面临一个问题,由于软件包中的一些更新或版本兼容性等原因,我会收到很多反对警告。在编码时,这些可能看起来令人沮丧。让我们忽略所有的警告,这样它就不会显示在屏幕上。

import warnings
warnings.filterwarnings("ignore")

现在首先使用 pandas 的 read_csv 函数将数据加载到数据框中。

df = pd.read_csv("world_trend_survey.csv")
df.head() #to show top 5 rows

输出-

我们可以用 Seaborn 的分布图来看看 1960 年和 2013 年的互联网用户数、出生率、平均寿命和平均寿命的数据分布。为了让两个情节并排,我们可以为两个要绘制的次要情节创建一个次要情节框架。

f, ax = plt.subplots(2,2,figsize=(8,4))
vis1 = sns.distplot(df["Internet users"],bins=10, ax= ax[0][0])
vis2 = sns.distplot(df["Birth rate"],bins=10, ax=ax[0][1])
vis3 = sns.distplot(df["LifeExp1960"],bins=10, ax=ax[1][0])
vis4 = sns.distplot(df["LifeExp2013"],bins=10, ax=ax[1][1])

情节看起来像-

在平均预期寿命上可以看到一个有趣的分布。在 1960 年,数据分布是均匀的,而在 2013 年,它类似于正态分布。此外,我们可以绘制收入群体和互联网用户之间的箱线图,以了解他们之间的相互关系。通过首先使其成为图形对象,可以将打印的图形保存到本地文件。

vis5 = sns.boxplot(data = df, x = "Income Group", y = "Birth rate")
fig = vis5.get_figure()
fig.savefig("fig1.png")

情节看起来像-

Income Group vs Internet Users

从图中很明显,互联网的使用随着个人收入的增加而增加。通过绘制收入群体与出生率、国家地区与互联网用户、国家地区与出生率的图表,可以得出类似的见解。

Country Region vs Internet Users

在绘制了这四幅图之后,看起来互联网用户的数量和出生率之间有关系。让我们画一个共同的图来看看他们的关系。

vis6 = sns.jointplot(data = df, x = "Internet users", y = "Birth rate", kind='kde') #here kde means kernel density plots

这里,皮尔逊系数-0.82 意味着它与负斜率成线性关系。p 值< 0.001 表示该信息在统计学上高度显著。

Internet Users vs Birth Rate

从图中可以看出,当人们更多地使用互联网时,他们可能没有太多的时间生孩子。所以,高收入人群的出生率更低,这很直观,因为他们会有更多的意识。从这些图中也可以得出类似的其他见解。为了使这些结论更有说服力,让我们绘制 2D 线性图:

vis7 = sns.lmplot(data = df, x = "Internet users", y = "Birth rate",fit_reg=False, hue = "Income Group",size = 6, aspect=1.5, scatter_kws = {'s':200}, )

此处,“色调”用于为不同类别的标记提供不同的颜色,“纵横比”是长度和宽度之间的纵横比,“scatter_kws”是散点图的关键字参数,散点图从 matplotlib 调用。“s”表示此处标记大小设置为 200,以使绘图更具信息性。

Internet Users vs Birth Rate

从这里很明显,低收入群体出生率高,互联网使用率低。这与高收入群体完全相反。其中,中低收入群体和中高收入群体的结果差异很大。也许国家地区因素在这里也起了作用。让我们绘制国家地区的统计数据。

vis8= sns.lmplot(data = df, x = "Internet users", y = "Birth rate",fit_reg=False,\
                  hue = "Country Region",\
                 size = 6, aspect=1.5, scatter_kws = {'s':200}, )

Internet Users vs Birth Rate

由此可见,国家地区对出生率起着重要作用。在欧洲地区,互联网的使用情况各不相同,但出生率却相当一致。在非洲地区,大多数国家出生率很高,互联网使用率很低。最有趣的结果是在亚洲地区获得的。在这里,结果是高度多样化的,因为它是中等收入群体。可以想象,也许亚洲地区的大部分人口属于中等收入群体。所以,让我们一张一张地来了解全国各地区的收入群体分布情况。

sns.countplot(y="Income Group", hue="Country Region", data=df);

Income Group

从上图可以看出,非洲对高收入群体的贡献几乎为零,而对低收入群体的贡献最大,这与欧洲的情况正好相反。最有趣的情况是亚洲地区。收入群体似乎几乎是均匀分布。

现在来看看不同人口统计中的预期寿命状况,让我们使用蜂群图。

vis9 = sns.swarmplot(x="LifeExp1960", y="Country Region", hue="Income Group", data=df)
vis9.legend_.remove()
plt.legend(loc="upper left", bbox_to_anchor=(1,1))
plt.show()

Life Expectancy at 1960 vs Country Region

从上图可以看出,在 1960 年,收入是影响预期寿命的一个重要因素。收入越高,预期寿命越高。但是乡村地区也起着很大的作用。从中东和大洋洲可以看出,高收入人群的预期寿命也较低。让我们看看 2013 年的趋势变化。

vis10 = sns.swarmplot(x="LifeExp2013", y="Country Region", hue="Income Group", data=df)
vis10.legend_.remove()
plt.legend(loc="upper left", bbox_to_anchor=(1,1))
plt.show()

Life Expectancy at 2013 vs Country Region

在 2013 年,情况似乎与 1960 年没什么不同。每个地区的预期寿命都有所提高,特别是高收入群体和中上收入群体。但是非洲地区似乎仍然处于特权之下。

用方面可视化您的数据

原文:https://towardsdatascience.com/visualize-your-data-with-facets-d11b085409bc?source=collection_archive---------3-----------------------

数据很乱。它通常是不平衡的,贴错标签的,并散布着古怪的价值观,让你的分析和机器学习训练失去了方向。

清理数据集的第一步是了解需要清理的地方。今天,我找到了合适的工具。

可视化您的数据

理解数据是为机器学习清理数据集的第一步。但这可能很难做到,尤其是以任何一种概括的方式。

Google Research 的一个名为 Facets 的开源项目可以帮助我们可视化我们的数据,并以各种方式将其切片,这可以帮助我们开始了解我们的数据集是如何布局的。

通过允许我们找到数据看起来与我们期望的不一样的地方,Facets 有助于减少以后的灾难。

让我们看看 Facets 是什么样子的。该团队在网上有一个演示页面,所以你不用安装任何东西就可以从 Chrome 上试用 Facets。此外,Facets 可视化使用由 Typescript 代码支持的聚合物 Web 组件,因此可以很容易地嵌入到 Jupyter 笔记本和网页中。

方面有两个部分:方面概述和方面分析。让我们更详细地看一看每一个。

方面概述

刻面概述给出了数据集的概述。在《T4》前几集中,我们看到了像熊猫这样的工具如何帮助我们了解数据集是如何分布的。使用 Facets Overview 工具,我们可以获得这类信息的稍微升级的视图。

它将我们的数据列拆分成显著的信息行,显示缺失百分比、最小值和最大值等信息,以及平均值、中值和标准偏差等统计信息。它还有一个显示零值百分比的列,这完全有助于捕捉大部分值为零的情况。

The tool highlights high percentages of zeros, which is a good gut check for certain columns.

对于数据集的每个要素,您还可以查看数据在训练集和测试集中的分布。这是一种很好的方式,可以再次检查测试集是否与训练数据集具有相似的分布。

那又怎样?

是的,的确,从技术上来说,最好的做法是自己独立完成至少这一级别的分析,但是我肯定忘记了检查我的每一列数据的所有这些方面。该工具将有助于确保您不会错过这一关键步骤,并突出任何异常情况。

多面跳水

现在我们来看看刻面跳水。这就是事情变得真正有趣的地方。它允许您更加清晰地了解您的数据集,甚至可以一直放大以查看单个数据!

您可以通过数据集的任何要素按行和列对数据进行“分面”。这看起来就像你在网上购物,比如说,买鞋子,然后根据不同的类别比如尺码、品牌和颜色过滤。让我们来看一个深潜的例子,让它更加具体。

该界面分为 4 个主要部分。中间的主要区域是数据的可缩放显示。在左侧面板中,您可以使用各种下拉选项来更改数据的排列,以控制刻面、定位和颜色。正下方是中间显示的图例。最右边是特定数据行的详细视图。您可以单击中间可视化中的任何一行数据,查看该特定数据点的详细读数。

现在让我们看看这一切是如何组合在一起的。

为此,我们将使用“人口普查数据集”,这是巴里·贝克尔从 1994 年美国人口普查中提取的经典数据集。它的目标是根据各种普查统计数据预测一个家庭的年收入是高于还是低于 5 万美元。

逐行刻面

我们将首先按照年龄范围分割数据,并根据目标值给数据点着色。这里蓝色表示小于 50K,红色表示大于 50K。

按列分面

现在我们可以按年龄来看数据的另一个特征。在不同的年龄范围内,每周不同的小时数会产生不同的结果吗?让我们通过每周小时数的专栏来找出答案。

我们看到,17-26 岁的人群中有很大一部分每周工作 15-29 小时,这可能是孩子们做暑期工的结果。我们还可以看到,随着年龄的增长,工作 29-43 小时的人越来越少,而 43-57 小时的时间段在图表的中间年份保持相对稳定。

配置

但是这仍然没有告诉我们我们在寻找什么。让我们尝试改变剧情的定位,获得更详细的外观。我们将定位切换到“分散”,并且仅按年龄分面。我还将选择“每周小时数”作为垂直排序顺序,以便更容易地查看不同年龄组的工作时间。现在我们可以看到,在图表的中间,每周的工作时间在上升,而在两边,工作时间在下降。

你应该继续探索这些数据,看看你能找到什么趋势和关系。例如,您可以按原产地分面,这将显示数据严重失真。这可能会告诉您,您可能想要收集更多的数据点,以获得更平衡的数据集。

加载你的数据

如果这很有趣,您可能想知道如何将数据集加载到 facets 中。在这里,你有两个选择。

你可以使用 web 界面,直接上传数据并在浏览器中播放,或者你可以使用项目的 GitHub 页面上的说明,将该库安装为 Jupyter 笔记本扩展。

Facets 是一个非常有用的工具,可用于查看数据集,查看不同要素之间的关系,以及确保数据集中没有缺失或意外的值。

感谢阅读这一集的云人工智能冒险。如果你喜欢这个系列,请为这篇文章鼓掌让我知道。如果你想要更多的机器学习动作,一定要关注媒体上的我或订阅 YouTube 频道以观看未来的剧集。更多剧集即将推出!

使用 Google Data Studio 可视化您的数据

原文:https://towardsdatascience.com/visualize-your-data-with-google-data-studio-609c38247905?source=collection_archive---------4-----------------------

在努力用我珍贵的数据创建一个简单、互动和可访问的仪表板时,我撞见了数据工作室并坠入爱河。

基础知识

1.创建仪表板

2.添加数据源

连接器

创建新数据源时,您可以使用 Data Studio 连接器或探索社区连接器,如 data.world、facebook ads、salesforce 等。

Available Connectors

3.构建图表

Available Charts

你可以建造

  • 时间序列图表
  • 条形图
  • 组合图
  • 圆形分格统计图表
  • 桌子
  • 地理图
  • 记分卡片
  • 分散
  • 项目符号图
  • 对比图
  • 数据透视表

现在让我们学习一些技巧和窍门

掌握谷歌数据工作室

我们将构建一个很酷的仪表板,并展示 Data Studio 的一些隐藏功能。

我们将使用来自 data.world 的脸书指标 数据集,欢迎亲自探索。
每个原则都适用于任何其他连接器,特别是 BigQuery 这种常见的数据源。

预赛

了解你的客户

您的客户是将要使用仪表板的一群人,无论他们是经理、R&D 团队还是您应该与他们会面的其他公司,他们了解您的数据如何能够让他们受益,并且定义指标

比方说,脸书的 R&D 正在向 Facebook 页面发布一项新功能。该团队对帖子互动感兴趣,特别是付费和非付费页面之间的差异。

定义指标

我喜欢从目标开始,所以在我们构建仪表板之前,我们应该定义我们想要可视化的指标和 KPI。

我们一起设定并定义了这些是我们在发布新的付费功能期间想要遵循的指标。

  1. 随着时间的推移相互作用
  2. 喜欢分销
  3. 按组列出的职位类型(有偿与无偿)
  4. 互动的季节性(每周和每年)

塑造您的数据

设置度量标准后,我们通常需要在可视化数据之前转换数据——可能是 tablify(强制关系模式)、反规范化和创建自定义视图。

我们的数据已经被收集和预处理,我们剩下的唯一事情是使用 data.world 特殊列添加一个 id 列。

SELECT row_index, dataset_facebook.*
FROM dataset_facebook

data.world Data Connector

仪表板

主题

我建议使用你公司的颜色作为仪表板主题,这是时候设置你的主要和次要颜色,你的图表托盘和字体。
你可以利用你的 UX 设计师来帮助你获得公司的托盘颜色和与仪表板的最终结构。

Setting a Theme

设计

这是一个好主意,添加你的标志作为一个图像,添加一个页面标题,并考虑每个页面的一般结构。

General Structure

数据

过滤数据

有时您不想显示所有的数据,无论您想基于多个条件过滤空值还是某些值,您可以简单地创建一个过滤器。

Filter Nulls

添加动态过滤器

我们可以创建基于日期的过滤器或基于数据的过滤器。由于我们没有日期时间列,所以让我们使用月份列来过滤帖子。

Filter Posts by Month

自定义查询

让我们用帖子点赞的宁滨创建一个自定义的 data.world 查询

你可以使用 BigQuery 做同样的事情,这里是官方教程。

图表

柱状图

构建直方图需要宁滨和行数。
宁滨可以通过创建自定义字段或自定义查询来实现,正如我们在上面所学的那样。

宁滨可以通过创建自定义字段或自定义查询来实现,正如我们在上面所学的那样。

在我们得到一个索引列和一个宁滨列之后,剩下的工作就是设置宁滨列的维度和索引列的计数。

我建议添加文本来明确说明直方图的维度。

Binning → Histogram

饼图

饼图是显示类别如何构成整体的好方法。

在 google data studio 中构建饼图时,您可以控制圆环的宽度、颜色和图例位置,以创建简洁的设计。

Designing Pie Charts

水平条形图

水平图表是我最喜欢的比较类别的方法。
创建水平条形图:

  1. 创建条形图
  2. 设置尺寸和度量
  3. 样式→水平
  4. 勾选显示数据标签

Horizontal Bar Chart

堆积条形图

堆积条形图是比较不同组之间类别的好方法,例如付费页面和非付费页面:

  1. 创建一个水平条形图
  2. 添加另一个维度
  3. 勾选堆叠条形图
  4. 可选:100%堆叠

Stacked Bar Chart

100% Stacked Bar Chart

警告

  • 不支持跨数据源操作,例如连接。
    【编辑:自 2018 年 7 月起,可选择加入或【混合】数据源
  • 最适合谷歌云平台用户的有限连接器。更多连接器和灵活性,请查看图和表。

结论

当开始使用 Google Data Studio 时,您会期望简单性伴随着有限的功能。

我希望我展示了有很大的回旋余地,就性价比而言,我认为 Data Studio 是一个很好的选择。

行动呼吁

取一个简单的 csv 文件或使用现有数据集的 data.world 连接器并试用 Google Data Studio 。

它是免费的、简单的、可分享的。

Final Dashboard

如果你喜欢这篇文章,请按下鼓掌键👏🏽如果你对接下来的帖子感兴趣,一定要关注我

【中:】https://medium.com/@talperetz24 推特:https://twitter.com/talperetz24 领英:https://www.linkedin.com/in/tal-per/

用树叶地图可视化空气污染

原文:https://towardsdatascience.com/visualizing-air-pollution-with-folium-maps-4ce1a1880677?source=collection_archive---------6-----------------------

Photo by Andrew Stutesman on Unsplash

在我之前关于预测空气污染的文章中,我研究了使用递归神经网络(RNN 和 LSTM)预测比利时的空气污染。

[## 用递归神经网络预测空气污染

在 Curieuze Neuzen 的公民科学项目之后,我想了解更多关于空气污染的知识,看看我是否可以…

towardsdatascience.com](/forecasting-air-pollution-with-recurrent-neural-networks-ffb095763a5c)

作为一个小项目,我认为在地图上绘制一段时间内的空气污染会很有趣。叶子包是一个很好的工具。

我们将绘制比利时 6 种污染物的空气污染图:

  • 臭氧
  • 二氧化氮
  • 一氧化碳
  • 二氧化硫
  • 颗粒物质(PM10)
  • 苯(C6H6)

这些数据是从欧洲环境署的网站上下载的。如果你想使用其他欧洲国家的数据,我鼓励你访问他们的网站。它有许多欧盟国家的数据集,并且有很好的文档记录。

我们将使用的数据集是:

  • BE_ <污染物 _ ID>_ 2013–2015 _ aggregated _ time series . CSV
  • BE _ 2013–2015 _ metadata . CSV

污染物 id 在 EEA 的空气污染物词汇中描述。

  • 1 =二氧化硫
  • 5 =颗粒物质
  • 7 =臭氧
  • 8 =二氧化氮
  • 10 =一氧化碳
  • 20 =苯

项目设置

导入包

**from** **pathlib** **import** Path
**import** **pandas** **as** **pd**
**import** **numpy** **as** **np**

**import** **seaborn** **as** **sns**
**import** **folium**
**from** **folium.plugins** **import** TimestampedGeoJson

project_dir = Path('/Users/bertcarremans/Data Science/Projecten/air_pollution_forecasting')

空气污染物

我们将制作一本空气污染物及其数据集编号、科学符号、名称和垃圾箱边缘的字典。垃圾箱边缘基于维基百科页面上的比例。

pollutants = {
    1: {
        'notation' : 'SO2',
        'name' :'Sulphur dioxide',
        'bin_edges' : np.array([15,30,45,60,80,100,125,165,250])
    },
    5: {
        'notation' : 'PM10',
        'name' :'Particulate matter < 10 µm',
        'bin_edges' : np.array([10,20,30,40,50,70,100,150,200])
    },
    7: {'notation' : 'O3',
        'name' :'Ozone',
        'bin_edges' : np.array([30,50,70,90,110,145,180,240,360])
    },
    8: {'notation' : 'NO2',
        'name' :'Nitrogen dioxide',
        'bin_edges' : np.array([25,45,60,80,110,150,200,270,400])
    },
    10: {'notation' : 'CO',
        'name' :'Carbon monoxide',
         'bin_edges' : np.array([1.4,2.1,2.8,3.6,4.5,5.2,6.6,8.4,13.7])
    },
    20: {'notation' : 'C6H6',
        'name' :'Benzene',
         'bin_edges' : np.array([0.5,1.0,1.25,1.5,2.75,3.5,5.0,7.5,10.0])
    }
}

加载元数据

在元数据中,我们有每个采样点的坐标。我们需要这些信息在地图上标出取样点。

meta = pd.read_csv(project_dir / 'data/raw/BE_2013-2015_metadata.csv', sep='**\t**')

彩色温标

有 10 个装订边,我们将使用不同的颜色。这些颜色是用 ColorBrewer 创造的。

color_scale = np.array(['#053061','#2166ac','#4393c3','#92c5de','#d1e5f0','#fddbc7','#f4a582','#d6604d','#b2182b','#67001f'])
sns.palplot(sns.color_palette(color_scale))

数据准备

加载时间序列数据

我们将日期变量转换为日期时间。这样我们就可以很容易地用它们来切割熊猫的数据帧。

**def** load_data(pollutant_ID):
    print('> Loading data...')
    date_vars = ['DatetimeBegin','DatetimeEnd']
    filename = 'data/raw/BE_' + str(pollutant_ID) + '_2013-2015_aggregated_timeseries.csv'
    agg_ts = pd.read_csv(project_dir / filename, sep='**\t**', parse_dates=date_vars, date_parser=pd.to_datetime)
    **return** agg_ts

数据清理

我们将对数据进行一些基本的清理。关于我们为什么做这些特殊的清洁行动的更多信息,你可以阅读我之前关于预测空气污染的文章。

  • 仅保留 P1D 的数据聚合过程的记录,以拥有每日数据
  • 删除计数为 UnitOfAirPollutionLevel 的记录
  • 移除可视化中多余的变量
  • 移除少于 1000 个测量日的采样点
  • 插入缺少的日期并用下一个有效日期的值输入 AirpollutionLevel
**def** clean_data(df):
    print('> Cleaning data...')
    df = df.loc[df.DataAggregationProcess=='P1D', :] 
    df = df.loc[df.UnitOfAirPollutionLevel!='count', :]
    ser_avail_days = df.groupby('SamplingPoint').nunique()['DatetimeBegin']
    df = df.loc[df.SamplingPoint.isin(ser_avail_days[ser_avail_days.values >= 1000].index), :]
    vars_to_drop = ['AirPollutant','AirPollutantCode','Countrycode','Namespace','TimeCoverage','Validity','Verification','AirQualityStation',
               'AirQualityStationEoICode','DataAggregationProcess','UnitOfAirPollutionLevel', 'DatetimeEnd', 'AirQualityNetwork',
               'DataCapture', 'DataCoverage']
    df.drop(columns=vars_to_drop, axis='columns', inplace=**True**)

    dates = list(pd.period_range(min(df.DatetimeBegin), max(df.DatetimeBegin), freq='D').values)
    samplingpoints = list(df.SamplingPoint.unique())
    new_idx = []
    **for** sp **in** samplingpoints:
        **for** d **in** dates:
            new_idx.append((sp, np.datetime64(d)))

    df.set_index(keys=['SamplingPoint', 'DatetimeBegin'], inplace=**True**)
    df.sort_index(inplace=**True**)
    df = df.reindex(new_idx)
    df['AirPollutionLevel'] = df.groupby(level=0).AirPollutionLevel.bfill().fillna(0)
    **return** df

绘制空气污染随时间的变化图

加载所有采样点的所有日期对于地图来说太过繁重。因此,我们将在每月的最后一天对数据进行重新取样

备注:我们在笔记本中使用的箱边缘通常应用于 O3、NO2 和 CO 的(半)小时平均值。在我们在笔记本中使用的数据集中,我们只有日平均值。由于本笔记本只是为了说明如何在地图上绘制时间序列数据,我们将继续使用日平均值。然而,在欧洲经济区网站上,你也可以下载每小时的平均值。

**def** color_coding(poll, bin_edges):    
    idx = np.digitize(poll, bin_edges, right=**True**)
    **return** color_scale[idx]

**def** prepare_data(df, pollutant_ID):
    print('> Preparing data...')
    df = df.reset_index().merge(meta, how='inner', on='SamplingPoint').set_index('DatetimeBegin')
    df = df.loc[:, ['SamplingPoint','Latitude', 'Longitude', 'AirPollutionLevel']]
    df = df.groupby('SamplingPoint', group_keys=**False**).resample(rule='M').last().reset_index()
    df['color'] = df.AirPollutionLevel.apply(color_coding, bin_edges=pollutants[pollutant_ID]['bin_edges'])
    **return** df

为了显示污染随时间的演变,我们将使用 leav 的timestampgeojson插件。此插件需要 geojson 输入功能。为了转换 dataframe 的数据,我创建了一个小函数create _ geo JSON _ features来完成这项工作。

**def** create_geojson_features(df):
    print('> Creating GeoJSON features...')
    features = []
    **for** _, row **in** df.iterrows():
        feature = {
            'type': 'Feature',
            'geometry': {
                'type':'Point', 
                'coordinates':[row['Longitude'],row['Latitude']]
            },
            'properties': {
                'time': row['DatetimeBegin'].date().__str__(),
                'style': {'color' : row['color']},
                'icon': 'circle',
                'iconstyle':{
                    'fillColor': row['color'],
                    'fillOpacity': 0.8,
                    'stroke': 'true',
                    'radius': 7
                }
            }
        }
        features.append(feature)
    **return** features

在此之后,输入要素被创建,我们可以创建一个地图,它们将被添加。TimestampedGeoJson 插件为时间滑块提供了一些简洁的选项,这些选项是不言自明的。

**def** make_map(features):
    print('> Making map...')
    coords_belgium=[50.5039, 4.4699]
    pollution_map = folium.Map(location=coords_belgium, control_scale=**True**, zoom_start=8)

    TimestampedGeoJson(
        {'type': 'FeatureCollection',
        'features': features}
        , period='P1M'
        , add_last_point=**True**
        , auto_play=**False**
        , loop=**False**
        , max_speed=1
        , loop_button=**True**
        , date_options='YYYY/MM'
        , time_slider_drag_update=**True**
    ).add_to(pollution_map)
    print('> Done.')
    **return** pollution_map**def** plot_pollutant(pollutant_ID):
    print('Mapping **{}** pollution in Belgium in 2013-2015'.format(pollutants[pollutant_ID]['name']))
    df = load_data(pollutant_ID)
    df = clean_data(df)
    df = prepare_data(df, pollutant_ID)
    features = create_geojson_features(df)
    **return** make_map(features), df

下面我们展示了每种空气污染物的分布图。你可以点击图片进入带有交互式地图的网页。点击播放按钮,可以看到空气污染物随时间的演变。

二氧化硫

pollution_map, df = plot_pollutant(1)
pollution_map.save('../output/pollution_so2.html')
pollution_map

Link to interactive map: https://bertcarremans.github.io/air_pollution_viz/pollution_so2.html

颗粒物质

pollution_map, df = plot_pollutant(5)
pollution_map.save('../output/pollution_pm.html')
pollution_map

Link to interactive map: https://bertcarremans.github.io/air_pollution_viz/pollution_pm.html

其他可视化可在以下位置找到:

  • https://bertcarremans . github . io/air _ pollution _ viz/pollution _ c6h 6 . html
  • https://bertcarremans . github . io/air _ pollution _ viz/pollution _ co . html
  • https://bertcarremans . github . io/air _ pollution _ viz/pollution _ NO2 . html
  • https://bertcarremans . github . io/air _ pollution _ viz/pollution _ O3 . html

结论

通过这个故事,我想展示使用 leav 在地图上可视化时间序列数据是多么容易。所有污染物的地图和 Jupyter 笔记本可以在 GitHub 中找到。请随意重复使用它来绘制你祖国的空气污染图。

使用 Tableau 可视化和发展您的业务

原文:https://towardsdatascience.com/visualizing-and-growing-your-business-with-tableau-2c2fd6c079bb?source=collection_archive---------17-----------------------

动机

目标是了解最近开始使用信用卡处理设备进行支付的商家类型,如 Square、Clover 等金融科技公司提供的信用卡处理设备。探讨他们对不同产品可能存在的顾虑类型,并展示调查结果和建议。

数据

商家

这个数据集包含一个商家列表和关于他们的业务的信息——一家快餐店、一家牙医诊所、一家杂货店等。

装置

该数据集包含设备列表及其与商家的关联历史。例如,一旦设备被“供应”给商家,该商家就使用该设备。同样,当设备与商家“解除关联”时,该设备不再被商家使用,并且可以被重新供应。

案例

该数据集包含当商家联系呼叫中心时由客户支持创建的查询/问题列表。如果可能,此数据包括报告的问题列表以及商家和设备信息。

World of merchants

有多少商家,什么类型的?

数据集中有 92,985 个商家,其中 57,624 个商家在某个时间点被分配了设备,服务类别中的商家数量最多,航空公司中的商家数量最少。有许多商家类型属于不同的类别,有或没有与它们相关联的设备。使用仪表板中的交互式包装气泡图来了解商家及其相关设备(如果有)。

Merchant-Device Distribution

商家保留设备多长时间?

大多数商家倾向于将他们的设备保留大约 200 天。对于体育用品商店,设备与商家关联的最大天数是 269 天,而最小天数少于 0 或 1 天。也有一些设备已经与具有相同序列号的同一商家和设备进行了多次供应和解除关联。这些在交互式仪表板中用负值表示。

客户支持会收到哪些类型的问题,针对哪些设备?

商家已经登记了关于硬件/软件故障排除、功能、培训、账户设置以及与订单处理、账户取消和合同条款相关的其他问题的各种问题。

由于公司或公司政策、应用程序和合同条款可能存在各种账户/资金或其他一般性问题,因此即使是目前没有相关设备的商家也会提出问题或疑问。

我们可以通过哪些方式改善商户体验?

这是一些可以从数据可视化中推断出来的观察结果-

  • 服务类的商户和设备数量最多,其次是零售业和餐饮业
  • 有 35,361 个商家没有与其相关联的设备
  • 与商户关联的设备类型 9 有 16,672 台,登记的案例/问题数量最少,而设备类型 13 与商户关联的设备数量最多,为 46,672 台,问题数量最多,为 157,615 个
  • 最严重的问题似乎与教育/功能有关。故障排除是相辅相成的。
  • 在较大的类别中,设备数量最多的服务类别平均每台设备的案例数量最少,为每台设备 3.41 个问题,而餐馆最多
  • 商人数量最少的是运输业,航空、汽车和铁路是商人数量最少的几个类别
  • 最常见的问题类型似乎与教育/职能有关。从更深层次的原因来看,软件功能性问题很少,请求培训和应用程序教育问题在几乎所有设备中都很突出,商家可能对培训和教育更感兴趣,而不是抱怨功能性问题
  • 硬件和仪表板培训/功能和故障排除问题非常重要,而且似乎更重要,这可能会影响商家的整体体验
  • 还有许多新的商家/设置案例,其中大多数都有激活码或发送电子邮件的子类型,这可能意味着激活码是通过电子邮件发送的,并且没有被正确验证或超时

设计

仪表板旨在通过以下部分回答上述问题

  • 顶部的核心指标用于获取商家和设备数量
  • 商家-设备云和分销
  • 设备历史中的商家
  • 问题数量和问题类型

所有图表都根据设备类型进行着色,并且可以交叉过滤,这使得在控制面板上查看特定的商家类型、设备或问题变得非常容易。为了方便起见,仪表板还包括一个针对商家类型和类别的仪表板级过滤器。所有的图表都是彩色的

下面是现场直播的 仪表盘

建议

  • 更好的文档、视频记录或面对面培训,以帮助培训和/或教育
  • 激活码可能是一个容易解决的问题
  • 将功能/教育分解到自己的桶中,以识别功能问题和与教育相关的案例,这可能有助于确定各种问题
  • 修复电子邮件功能,使激活码问题得到解决,这将使商家的设置过程成为一个愉快的体验
  • 大多数商家使用这种设备,并在大约 150-200 天后停止使用。识别这些商家,并向这些商家提供奖励(金钱利益或增加订阅时间或企业认为合适的任何东西),并重新联系他们。
  • 提供更好的客户支持,确保客户支持主管有更好的装备
  • 设备 9 记录的问题相对较少。确定使该设备脱颖而出的功能,并考虑将它们集成到设备 5 和 13 中

增加市场覆盖面的一些方法

  • 一些商家有一个关联和分离多次的设备,这使我们相信一些商家喜欢所提供的服务/设备,并愿意提供第二/第三次机会来使用它。找出他们疏远的原因,并为这些问题提供更好的解决方案
  • 增加在社交媒体(SEO)上的曝光率
  • 运输行业中的极少数商家让我们相信这些设备不适合糟糕的移动或蜂窝网络。瞄准航空公司、汽车、铁路等商户类型,扩大商户基础

反光

值得注意的是,该数据集是一个更大的真实世界数据集的一小部分,并且是一个封闭的产品分析挑战的一部分,以了解可以从数据的一个小子集中收集什么样的见解。

仅用一行代码可视化人工神经网络(ann)

原文:https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e?source=collection_archive---------2-----------------------

ann-visualizer

ANN Visualizer 是一个 python 库,它使我们能够仅使用一行代码来可视化人工神经网络。它用于与 Keras 一起工作,并利用 python 的 graphviz 库来创建您正在构建的神经网络的整洁且可展示的图形。

借助深度学习高级技术,您现在可以可视化整个深度学习过程,或者只是您构建的卷积神经网络。

我们将使用 keras 建立一个简单的神经网络,然后使用 ANNvisualizer 来可视化我们的神经网络。

杰森·布朗利制作了一些关于 http://machinelearningmastery.com/的伟大作品。他的一个例子是使用 Keras 构建简单的神经网络。

安装

这个演示需要 3 个库

  • 克拉斯
  • ann 可视化工具
  • graphviz

您可以使用以下命令安装该库:

pip3 install keraspip3 install ann_visualizerpip install graphviz

创建一个名为 index.py 的新文件,将代码复制并粘贴到文件中

要生成可视化,您需要遵循以下命令结构:

ann_viz(model,view=True,filename="network.gv ",title="MyNeural Network ")

  • model–您的 Keras 顺序模型
  • view–如果设置为真,则在命令执行后打开图形预览
  • filename–保存图表的位置。(它保存在 a '中。gv '文件格式)
  • title–可视化人工神经网络的标题

您已经看到了如何在 Keras 中轻松创建您的第一个神经网络模型。

让我们把它结合成这段代码。

使用以下方式运行 index.py :

python3 index.py

以下是最终可视化效果的示例:

很美,不是吗?你可以在这里浏览这个 GitHub 库,看看一个模型是如何被创建和可视化的演示。

这在很多方面都很有用。当您想用一行代码解释该模型的神经网络时,它可用于教学目的。

链接到完整的代码

[## shah 0150/人工神经网络可视化器

通过在 GitHub 上创建一个帐户,为人工神经网络可视化开发做出贡献。

github.com](https://github.com/shah0150/Artificial-Neural-Networks-Visualizer)

参考资料:

[## Prodicode/ann-visualizer

一个用于可视化人工神经网络(ann)的 python 库

github.com](https://github.com/Prodicode/ann-visualizer) [## 用 Keras 一步步开发你的第一个神经网络

Keras 是一个强大易用的 Python 库,用于开发和评估深度学习模型。它包裹着…

machinelearningmastery.com](https://machinelearningmastery.com/tutorial-first-neural-network-python-keras/)

这是一个值得一看的图书馆。

感谢阅读!😊如果你喜欢它,测试你能击中多少次👏五秒钟后。这对你的手指来说是很好的有氧运动,并且会帮助其他人看到这个故事。

可视化墨西哥的平均温度

原文:https://towardsdatascience.com/visualizing-average-temperature-in-mexico-313eef90f4f4?source=collection_archive---------1-----------------------

在这个分析中,我研究了自 1985 年以来墨西哥 32 个州的平均温度。

墨西哥是世界上气候系统最多样化的国家之一。其中一个因素是该国的地理位置,位于北回归线穿过的地区。

“墨西哥呈现出各种各样的气候;北部干旱,南部/东南部湿热和半湿润,高地理区域气候寒冷或温暖。”

国家统计和地理研究所( INEGI

出于同样的原因,有可能在离热气候几百公里的地方发现冷气候。此外,墨西哥共和国的一些州可能表现出很大的气候可变性。

最值得注意的变化是杜兰戈州的气候,这里的气温是全国最低的,有时达到零下 26 度,最高的是墨西哥的沙漠下加利福尼亚州有时超过 50 度

维基百科:墨西哥

下面,我对从 1985 年到 2015 年底,通过常规和自动气象站测得的各州月平均气温进行了探索性分析。分析所需的所有代码都是用 R 开发的,可以在这个 GitHub repo 中通过开源 GNU GPLv3 许可获得。

温度数据由墨西哥国家委员会(CONAGUA)提供,可在墨西哥政府的公开数据页面上获得。这些都是直接从网站上阅读,以促进分析的可重复性。随后,对数据进行预处理,以便能够在 r 中正确处理它们。要考虑的变量有:联邦实体、年、月和相应的温度。

首先,我绘制了每个状态的值的热图。我得到的图表显示了州一级的一些有趣的模式。最有趣的总结如下。

Average temperature from 1985 to 2015 in each of the 32 states of Mexico.

塔巴斯科:最热的州

最热的州是塔巴斯科州,30 年平均气温 26.84℃。

特拉斯卡拉:最冷的州

最冷的州是特拉斯卡拉州,30 年平均气温 14.44℃。

索诺拉:最易变的州

气温变化最大的州是索诺拉州,年平均气温变化率为 6.0964 摄氏度。

格雷罗州:最稳定的州

温度最稳定的州是格雷罗州,年平均温度变化率为 1.339 摄氏度。

荣誉奖 1:恰帕斯州

恰帕斯州是近年来气温上升较为明显的州之一。1985 年,年平均气温为 19.24℃,到 2015 年,年平均气温上升到 21.21℃。

荣誉奖 2:新莱昂

新莱昂州从 2002 年到 2005 年呈现出一种有趣的模式,因为该州的温度与前几年相比急剧下降。从 2006 年起,气温有所上升,平均而言,仍高于 2002 年之前的气温。

原载于 2016 年 8 月 5 日mexicoendatos . github . io

可视化贝多芬的全部作品,第一部分:从 IMSLP 中收集和清理数据

原文:https://towardsdatascience.com/visualizing-beethovens-oeuvre-part-i-scraping-and-cleaning-data-from-imslp-77ecb124002d?source=collection_archive---------3-----------------------

这篇文章是我写的一个简短教程系列的第一部分,记录我在一个个人兼职项目中的进展,我希望在这个项目中分析和可视化贝多芬的全部作品。这个项目的目标是探索音乐和情感之间的联系,同时也尝试不同的可视化音乐数据的方法,特别是关于颜色。

自从我开始玩数据,我就想找到新的有趣的方法来结合我对音乐和数据的兴趣。最近很好奇音乐艺术家在整个职业生涯中是如何发展变化的。这个问题的一个方面是,我特别感兴趣的是,艺术家使用的调式是否会随着时间而改变,如果是这样,这些改变是否有任何可以解释的模式,可以追溯到传记的细节。很多人在乐理中遇到的第一个想法就是“大调=快乐”和“小调=悲伤”的联想。显然,这是对音乐带给我们的感受的过于简化的简化,但这些咒语在帮助年轻音乐家区分两种模式方面的有效性表明了音乐和情感的普遍性。

更进一步,在古典音乐中,理论家和作曲家早就讨论过不同的调有不同的特征的观点。最近,我也成了雅各布·科利尔的粉丝,他形容他对音高的习得和对和弦的理解强烈植根于他自己的抽象感觉,随着时间的推移,他学会了适应这些感觉。作为一名音乐家,我自己主观上也经历过这种情况,我当然也有朋友有类似的感受。比如 Db 专业,因为一些莫名其妙的原因,一直让我觉得“自省”。这种联想似乎相当主观和个性化,但我很好奇它们是否在创作过程和基调选择过程中对作曲家和词作者产生了某种影响,无论是在意识还是潜意识层面。

为了研究这些观点,我决定钻研路德维希·范·贝多芬的全部作品,在大学最后一个学期,我上了一门名为“浪漫时代的音乐”的课,对他的音乐有了新的欣赏。贝多芬的全部作品特别适合这种类型的分析,因为贝多芬的生活和作品被很好地记录了下来。学者们将贝多芬的一生典型地划分为三个时期(T3),他的作品被很好地组织到不同的目录(T5)中(T4)。此外,至少有一些证据表明,贝多芬意识到不同的调有不同的特点,并在选择他的调号时考虑到了它们的情感属性。虽然贝多芬的数据点较少,因为他没有像莫扎特或巴赫等其他巨人那样发表过很多作品,但他在历史上因是情感大师而受到尊敬,这更符合我第一轮分析的目标。我特别感兴趣的是,看看我们是否能从贝多芬的早年和晚年的比较中收集到什么信息。贝多芬晚年开始丧失听力,最终死于抑郁症和酗酒。

在本文中,我将介绍我为这个项目获取数据的过程,并将数据转换成适合 Python 3 分析的形式。对于数据科学家来说,这个过程并不是工作中最迷人的部分,但根据我的经验,它通常是最重要的(也是最耗时的)。为了简洁起见,在本演练中我将只介绍我的代码的主要亮点,但是您可以在我的 GitHub 上找到我的完整的、带注释的 Jupyter 笔记本,其中记录了本文涉及的所有内容,以及我的所有失败和成功。

查找和搜集数据

在研究了音乐学家如何从历史上组织贝多芬的全部作品后,我试图找到一个包含他的作品的完整数据库的资源。虽然维基百科有一个广泛的、维护良好的贝多芬作品页面,但我决定使用国际乐谱图书馆项目 (IMSLP)来收集数据进行分析,主要是因为贝多芬的全部作品已经以表格形式存在于他们的网站上,有多个目录系统。作为参考,这是他们桌子的样子。

Source: http://imslp.org/wiki/List_of_works_by_Ludwig_van_Beethoven

为了抓取这个表格,我使用了美汤,这是一个强大的 Python 包,用于从网站抓取数据。首先,我检索了网页的 HTML,将其转换为一个 BeautifulSoup 对象,该对象可用于通过 HTML 元素和属性访问信息。

import requestsimport pandas as pd
from bs4 import BeautifulSoupurl = "http://imslp.org/wiki/List_of_works_by_Ludwig_van_Beethoven"
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')

为了找出从“汤”中提取我感兴趣的数据的最佳方式,我检查了页面上的 table 元素本身,看看它是如何组织的。似乎是一个巨大的容器元素,行的元素包含单元格的父元素轻松访问)。

| 元素,列名的 | 元素(未显示,但可以通过向下进入 |

On Google Chrome, you can do this by right clicking => “Inspect”

为了便于阅读,我首先将 table 元素存储为它自己的变量。使用它,我然后遍历它的行以获得所有的和单元格,因为在这里调用 findAll()会返回一个元素列表,这些元素匹配传递到函数中的任何标签。方便的是,这两种单元格类型都有一个. text 属性,我可以调用它从每个单元格中获取文本。在这个过程中,我做了一些清理,最终得到了一个列表列表(2D 数组),它很容易就变成了熊猫数据帧。

table = soup.find("table")table_text = []

for row in table.findAll("tr"):
    cells = row.findAll(["th", "td"])
 *# Remove new line from each string in the process*
    cell_contents = [cell.text.replace("\n", "") for cell in cells]
    table_text.append(cell_contents)raw_works = pd.DataFrame(table_text[1:], columns = table_text[0])

Initial DataFrame stored in “raw_works” and its shape

看起来和原始网页上的表格一模一样!然而,刮削只是这一过程的第一步。在我尝试从数据中提取任何有趣的东西之前,数据需要被清理得更多。

清理和争论数据

首先,我将所有的列名都变成小写,然后删除没有日期的行,因为这些行对我的目的没有用(而且,它们中的许多都有注释,表明作者是可疑的)。类似地,没有键的行也没有用,所以我删除了它们,这样 IMSLP 就可以用它们来表示组合组。

df = raw_works.copy() # Generally, I like to preserve the original
df.columns = [column.lower() for column in df.columns]len(df[df["date"] == ""]) # 10
df = df[df["date"] != ""]len(df[df["key"] == ""]) # 146
df = df[df["key"] != ""]

由于我的探索和想象主要与随着时间的推移调与调式的变化有关,我想看看贝多芬的全部作品中表现了哪些调。

df["key"].nunique()
df["key"].unique()

Looks like we got some multi-key action… I’ll deal with this next time

请记住,这些键分类并不意味着整个作品始终保持相同的键(事实上,很可能不是这样);更确切地说,它们只是指出了贝多芬选择并列为作品基础的主调。看起来贝多芬更喜欢远离有 4 个以上临时记号的键,F#大调和 Bb 小调除外…让我们来调查一下。

len(df[df["key"] == "F♯ major"]) # 1
len(df[df["key"] == "B♭ minor"]) # 1df[df["key"] == "B♭ minor"]

Translation: “To Hope”

根据资料,贝多芬只写过一首 Bb 小调的曲子,我觉得有点奇怪,所以我决定跟进。看《安蝶·霍夫农》的分数,好像这首曲子其实是 Eb 大调,于是进去做了一个快速的手动修复。

df.loc[df[“key”] == Bb minor”, “key”] = “Eb major”

F#大调单首曲子是贝多芬的《泰雷兹》钢琴奏鸣曲,所以那里不需要做任何改动。

为了将每个组合分为大调或小调,我以函数的形式写出了一些条件逻辑,应用于我的“key”列,暂时将罕见的多键异常视为“other”。

def decide_key(key):
    if "major" in key:
        if "minor" not in key:
            return "major"
        else:
            return "other"
    elif "minor" in key:
        if "major" not in key:
            return "minor"
        else:
            return "other"
    else:
        return Nonedf["mode"] = df["key"].apply(decide_key)

接下来,让我们看看日期。

df["date"].min(), df["date"].max()

(‘ -’, ‘ — ‘)

看起来有些非数字文本值漏掉了,所以我使用一些正则表达式匹配对“date”列进行了过滤,以确保我的 DataFrame 只包含“date”列中的值至少包含一个数字的行。

df = df[df["date"].apply(lambda x: bool(re.search("[0-9]", x)))]
df["date"].min(), df["date"].max()

(‘1782’, ‘1826’)

太好了!但是,正如您从数据帧头部的早期图片中看到的,许多日期值似乎是范围而不是具体年份,因为贝多芬作品的确切时间并不总是为人所知。

作为一个临时解决方案,我决定创建新的日期栏,以他的作品的最小、最大和平均年份为特色,为自己提供最大的灵活性,以便我可以在以后决定我到底想如何处理这个问题。为了实现这一点,我使用了一点字符串解析,依赖于所有范围都遵循“XXXX-YY”格式的假设,允许我将“-”传递给 str.split()函数以获得破折号前后的数字。因为 str.split()返回由传入的分隔符分隔的字符串列表,所以查找最小日期很简单,因为我可以只取列表的第一个值。最大日期有点棘手,因为我必须从字符串的第一部分提取世纪,然后将它添加到第二部分,同时还要考虑范围格式变为“XXXX-YYYY”的偶然情况,因为组合跨越了从 18 世纪到 19 世纪的过渡

# Just so I know how many dates are ranges first
len(df[df["date"].str.contains("-")]) # 167df["min_date"] = df["date"].apply(lambda x: x.split("-")[0] if "-" in x else x)# Need to add the first two characters for second part of range
df["max_date"] = df["date"].apply(lambda x: x[0:2] + x.split("-")[1] if "-" in x else x)# Need to fix of turn of century exception
df["max_date"] = df["max_date"].apply(lambda x: x[2:] if len(x) == 6 else x) #

在获得最小和最大年份之后,我想将这些字符串转换成整数,这样我就可以找到它们的中点,但是当我尝试时,我得到了一些错误,暴露了一些我必须解决的新的数据输入障碍。很快地看了一眼,似乎我的一些日期有问号,表明对确切的日期甚至日期范围的一些不确定性。

df[df["date"].str.contains("\?")]

?

由于注释表明其中一些已经是可疑的条目,并且只有极少数的日期具有这种模糊性,所以我决定暂时将它们从我的数据中删除。

df = df[~df["date"].str.contains("\?")]

在尝试了另一种到整数的转换后,我发现一些日期仍然有非数字字符。

# Create a list of all possible characters for the standard date range convention used here
chars_to_match = [str(x) for x in list(range(10)) + ["-"]]df[df["date"].apply(lambda x: any(char not in chars_to_match for char in x))]

(ca. = circa, rev. = revision)

幸运的是,没有太多的行有这个问题,所以我决定半手工地修复这些讨厌的异常,在原始日期列的值中保留额外的信息。

df["min_date"] = df["min_date"].str.replace(" ca.", "")
df["max_date"] = df["max_date"].str.replace(" ca.", "")df.loc[df["max_date"].str.contains("rev"), "max_date"] = 1807

瞧啊。这个修复允许我最终将最小和最大年份转换为整数,并取它们的平均值来创建我的“avg_date”列。

df["min_date"] = df["min_date"].apply(int)
df["max_date"] = df["max_date"].apply(int)df["avg_date"] = (df["min_date"] + df["max_date"]) / 2

让我们看看我的最终数据框架。

df.head()

(I have a feeling that there will still be a lot of manual work ahead…)

正如我提到的,有一些小的清理步骤和检查,我选择不包括在本文中,需要注意的新事物总是会出现,所以这里显示的最终数据帧不一定是我将在本项目的其余部分中使用的确切数据帧。当然,这里没有显示的任何更改或添加都将保留在这个项目的 Github 库中。

在我的下一篇文章中,我将解决如何更深入地分析和可视化这些数据的问题。我边走边写,所以我还不确定我最后的努力会把我带到哪里,但我脑海中有一些想法(例如,旭日图,“滚动讲述”时间线,动画回放示例)。敬请期待下篇文章一探究竟!

如果你是我作品的粉丝,请👏下面这篇文章。如果你想了解我正在做的任何事情的最新进展,一定要关注我的 推特

可视化竞争和协作

原文:https://towardsdatascience.com/visualizing-competition-collaboration-7e1b38f99f2a?source=collection_archive---------0-----------------------

我最近一直在欣赏扎克·利伯曼的《T2》草图,并开始思考类似的基于细胞的动画,在这些动画中,细胞与邻近的其他细胞进行动态互动。我尝试了各种竞争和合作的互动方式。回想起来,这些结果让人想起进化捕食者/猎物模拟(就像这些)——我发现越来越多的城市景观可视化有点引人注目(尽管没有扎克的草图那么有审美趣味)。

所有实验的规则/限制:

  • 所有细胞都被初始化为小的随机高度和小的随机生长率(正和负)
  • 如果所有单元都没有高度,或者任何单元达到 100(有时永远不会达到),则模拟结束
  • 每个细胞的动态完全由一个函数描述,该函数传递细胞的状态及其所有邻居,并返回其生长率的单一变化(可以是向上、向下或零)
  • 当生长率下降(变得更负)时,细胞被染成红色,当生长率上升时,细胞被染成绿色。否则为灰色。
  • 邻域大小可以变化(这里它们的半径在 1 到 5 之间)

每一个都标有所用规则的叙述和结果的解释。由于随机初始化,其中一些在每次运行时看起来非常不同。

琐碎的审判

稍微有趣一点

外卖:

  • 在某些情况下,将一个概念(我对动态如何工作的假设)转化为预期的结果是非常困难的。动力系统直觉不好?
  • 许多复杂的规则很快崩溃为琐碎的结果——建立平衡(以创造稳定性)有时是具有挑战性的。
  • 闪烁是逻辑卡在两种状态之间的线上的结果——缓冲器或动量的某种实现会有所帮助。

代码(都是用 paper.js 做的)这里是这里是。

可视化客户反馈:单词云的三种替代方案

原文:https://towardsdatascience.com/visualizing-customer-feedback-three-alternatives-to-word-clouds-defc73e8e503?source=collection_archive---------4-----------------------

今年早些时候,我写过关于为什么单词云很烂的文章。有没有更好的可视化客户反馈的方法?是的,有,最棒的是,您甚至可以使用 Excel 来创建这些可视化效果——如果您正确地表示数据的话。

在这篇文章中,你将学习三种简单而有效的可视化客户反馈的方法。

在 Thematic,我们通过与客户洞察专家密切合作,发明了这三种技术。如果你关心数据,如果你想知道顾客在说什么,请继续读下去。

为可视化准备客户反馈

客户反馈有两种形式:分数和文本。分数很容易。它们总是可以用数字表示,对于如何将它们组合成所有客户的总分,有不同的方法:

  • 平均值(例如星星的数量)
  • 从高分的百分比中减去低分的百分比,例如净推介值(NPS)或客户满意度(CSAT)

为了简单起见,让我们假设我们将使用 NPS。

谈到文本,我们需要根据代码框架,首先用一个或多个主题对每个响应进行编码。主题是一个单个或多个单词的概念。它应该在数据集的上下文中有意义。

例如,假设我们的数据集包含大学生对以下问题的回答:“你向朋友或同事推荐我们学校的可能性有多大?”

  • 无意义主题:大学,学生,素质,好,学习,第一年
  • 好主题:行政,校园,课程,学校声誉,好大学

代码框架是包含这些主题的平面列表或层次结构。查看我们的指南,了解如何手工编写调查回复。或者,该任务可以使用文本分析自动完成。

可视化 1。影响

这种观想回答了这个问题:“每个主题对我的总分有什么影响?”首先,您需要进行以下计算:

  1. 计算总 NPS
  2. 计算不包含该主题的响应子集中的 NP
  3. 从 A 中减去 B

使用这个简单的公式计算主题对 NPS 的影响

现在您可以可视化这些数据,以条形图的形式列出每个主题:

显现对 NPS 影响的差异

这种可视化显示了每个主题的相对影响,无论是积极的还是消极的。在这个具体示例中,通过解决管理问题,NPS 至少可以提高 2 个百分点。

可视化 2。关键驱动因素分析

这个可视化回答了这样一个问题:“随着时间的推移,哪些主题与我分数的下降和上升紧密相关?”

首先,我们需要比较两个数字序列:一段时间内的 NP 和一段时间内的主题频率。使用 Excel,您可以很容易地计算两个序列之间的相关性,这可以是正的(主题越多,NPS 越高,见下图),也可以是负的(主题越多,NPS 越低)。

第二,你需要根据主题与 NPS 相关性的绝对值来绘制主题频率。

主题与名词短语的相关性

最终的可视化效果可能如下所示:

核电厂的主要驱动因素

它表明,大多数主题并不频繁,并且与名词短语的相关性很低。在这个例子中,忠诚和好的产品推动了 NPS,但是大多数其他主题并不重要。

可视化 3。奖励和惩罚

这个可视化回答了以下问题:

  1. “我服务的哪些特点让客户感到满意,因此他们会给我更高的分数?”
  2. “客户对我的服务有哪些期望,如果我没有实现,就用较低的分数来惩罚我?”

对于每个主题,只需计算支持者和反对者的百分比,然后将这些值绘制如下:

NPS 分析的奖罚计算

推广者比例较高的主题是我们的奖励因素,而贬低者比例较高的主题是惩罚因素。在这个例子中,公司在沟通方面超出了客户的预期。然而,在客户对病假等福利的期望方面,它表现不佳。

即使是最准确的词云,其提供的洞察力也是有限的。它回答了这个问题:“人们谈论什么?”——以一种非常模糊的方式。

我们在这里展示的三种可视化效果为更有针对性的问题提供了答案:

  • 每个主题对我的总分有什么影响?
  • 随着时间的推移,哪些主题与我分数的下降和上升紧密相关?
  • 就客户期望而言,我们在哪些方面表现出色,在哪些方面表现不佳?

在这三种情况下,您都需要有一个与每个评论相关联的满意度分数。此外,主题需要足够有意义,以便从客户调查受访者提供的答案中得出结论。

如果你的角色是寻找深入的客户洞察,这些可视化提供了一个起点。下一步,你可以采访客户,找出他们思考背后的原因。

在惩罚和奖励的例子中,您可以调查为什么客户对利益有某些期望。你也可以想出如何更好地管理这些期望。

使用 lyus 可视化邮政编码级别的数据

原文:https://towardsdatascience.com/visualizing-data-at-the-zip-code-level-with-folium-d07ac983db20?source=collection_archive---------2-----------------------

洛杉矶餐馆的 Python EDA 和带有 regex 和 GeoJSONs 的市场检查

包含地理数据(如纬度、经度和 FIPS 代码)的数据集非常适合通过像 Folium 这样的制图包进行可视化。虽然州代码和 FIPS 县代码在制图包中广泛使用,但我想在使用 GeoJSON 时绘制邮政编码级别的数据。

为此,我们查看了洛杉矶县餐馆和市场检查数据集。有两个单独的 csv 文件可用:一个用于检验记录,一个用于违规记录。

从高层来看这个过程是什么样的?

  1. 清理数据
  2. 转换违规记录并与检查记录合并
  3. 找到合适的 GeoJSON
  4. 可视化一些数据

1 清理数据

让我们从将 csv 文件加载到数据框中开始,看看我们有哪些变量。

Data frame for inspections

Data frame for violations

日期时间对象

“activity_date”列是一个字符串,我们将运行一个 apply 函数,将它们转换为两个表中的 datetime 对象。

邮政编码

查看一下独特的邮政编码,会发现许多邮政编码在通常的 5 位数字后面附加了 4 位数字。这些数字主要用于 USPS 邮件分拣。出于分析目的,我们只保留前 5 位数字。

违规中的异常值

查看违规代码会发现代码大多以“F”开头。好像有几个以‘W’开头的只出现一两次。当与违规描述匹配时,它们是前面没有违规编号的唯一描述。此外,有些甚至没有导致扣分。由于它们仅构成 272,801 个违例中的 17 个条目,我们可以安全地删除它们。

用正则表达式创建新特征

Nope, I still can’t

当查看“pe_description”列时,记录看起来像这样:“餐厅(0-30)座位中度风险”。

它似乎描述了 3 个不同的事情:它是什么类型的机构,它可以容纳多少人,以及风险水平。

为了更好地表示数据,我们用 regex 和 string split 编写了三个 helper 函数来创建新的特性变量。

这里使用的两个正则表达式语句的简要描述:

为了提取机构的类型,我们希望得到第一个左括号之前的所有内容。因此正则表达式的形式是。+(?= ()

我们把这个分解一下:
。+ → 这个匹配,返回任意字符,继续。使用“+”意味着它必须至少匹配一次。
(?= ()→ 这是一个前瞻,表示字符串以' ('结尾,并且不会返回左括号。

为了提取机构的规模,我使用了 regex (?< =()。+(?=))

我们把这个也分解一下:
(?< =() → 这是一个 lookbehind,表示字符串以不会返回的开括号开始。
。+ → 如上,返回任意字符并继续。
(?=)→和上面一样,一个指示字符串以不会返回的右括号结束的 lookahead。

The end result

2 转换违章记录并与检查记录合并

单个违规行为似乎并不能告诉我们关于某个特定地点的太多信息。让我们从违规数据帧创建一个新的数据帧,它代表所有不同的违规以及每个设施点的每个违规的总数。

首先,我们通过设施 id 和违规代码对违规数据帧进行分组。然后,我们通过计数进行汇总,找出每个设施违反特定规则的总次数。

我们把这个新的数据框拆开。然后,我们转置结果数据帧,使违规代码现在是列。索引被重置,因此 facility_id 也是一个单独的列。

然后,我们将这个新矩阵与检查数据框合并,这样我们现在就有了每个设施 id 所有违规的总实例记录。

3 找到合适的 GeoJSON

为了在 follow 中按邮政编码绘制数据,我们需要一个 GeoJSON 来表示每个邮政编码的边界。幸运的是,洛杉矶时报有一个。

看看这个 GeoJSON 代表的邮政编码就知道有 800 多个邮政编码;其中大部分是没有用的,只会使生成的地图变得杂乱。因此,我们试图过滤掉不相关的邮政编码,使地图更加清晰。

有了这个更新的 JSON,我们现在可以查看一些地理分布。

4 可视化一些数据

我们在这里创建两个辅助函数来帮助我们创建数据框。第一个 count_distribution 函数返回每个位置(邮政编码)的子组的总计数。

Lots of restaurants in 90004 and 90005

subgroup_distribution 函数返回每个位置(邮政编码)的每个子组的百分比表示。

Almost 70% of facilities in 90004 are high risk

然后我们创建辅助函数来创建叶子地图。

助手功能完成后,让我们开始可视化数据。

Average score of facilities in each ZIP code

洛杉矶中心区在这些检查上做得不好。

Total facilities in each ZIP code

Total facilities for 2000+ occupancy and representation of 2000+ occupancy in each ZIP code

像体育馆和多功能厅这样的大型设施似乎离洛杉矶市中心很远。从集中图可以看出,这样的大型设施是该一般区域中仅有的设施。

Average violations with plumbing violations and food contact surface cleanliness violations

让我们来看看两个比较常见的违规行为:管道和食物接触面清洁度。计算每个邮政编码的设施对特定违规代码的平均违规次数。

从右边的地图来看,Marina Del Rey 周围的区域似乎是每个设施管道违规发生率最高的区域。

与此同时,西洛杉矶学院周围的邮政编码似乎有更高的两种类型的违规发生率。

改进和后续步骤

  1. 我当然希望对这些检查进行“队列分析”,看看随着时间的推移,哪些方面得到了改善或恶化。
  2. 如果能获得更多关于每个单独设施的信息,将会很有意义,因为这些设施的性质可能与特定的违规行为密切相关。例如,一个小的家庭经营的街头小吃摊可能与斯台普斯中心有不同的违规行为。Foursquare API 可以用来做这件事。

一如既往,代码可以在我的 Github 上找到。我还查看了一些相关数据,它们不在这个特定 EDA 的范围内。一如既往,请随时通过 LinkedIn 联系!

使用 Azure Databricks 和 Power BI Desktop 可视化数据

原文:https://towardsdatascience.com/visualizing-data-with-azure-databricks-and-power-bi-desktop-845b0e317dc6?source=collection_archive---------4-----------------------

Azure Databricks 是一项强大的技术,它通过提供一个两个学科的用户都可以轻松理解和利用的工作流,帮助统一数据工程师和数据科学家之间的分析流程。数据工程师可以使用它来创建有助于向数据科学家提供数据的工作,然后数据科学家可以使用 Databricks 作为工作台来执行高级分析。

然而,在现实生活中,以可理解的格式交付数据以提供可操作的见解的需求扩展了数据工程师和科学家的需求。考虑到这一点,我们怎么能指望营销人员、销售人员和企业高管理解并利用 Azure Databricks 等综合分析平台来执行日常任务呢?

幸运的是,我们可以将 Azure Databricks 中的集群连接到 BI 工具,如 Power BI。本教程的目的是帮助您了解如何使用 Azure Databricks 和 Power BI 来完成数据可视化任务,以及如何将 Databricks 中的集群连接到 Power BI

本教程中使用的技术:

  • Azure 数据块
  • 电源 BI 桌面

对于本教程,我将假设您知道如何使用 Databricks UI 来创建笔记本。我还假设您对 PySpark 以及如何在 Databricks 中创建集群有基本的了解。

获取我们的数据

对于这个演示,我将使用 Python 在 Databricks 中编写脚本。Python 中有一些非常酷的数据 viz 库,我将向您展示如何在 Databricks 笔记本中使用它们。

此外,我将使用 Azure Databricks 附带的一个预加载数据集,这样我就不必浪费时间解释如何将数据导入 Databricks,我在这篇博客文章中对此进行了介绍。

让我们首先创建一个 Python 笔记本并加载我们的数据集。编写以下代码:

# load our data into Databricks
ourData = "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv"# create a dataframe for that data
diamonds = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load(ourData)

如果编译成功,我们应该会看到以下输出:

让我们摆弄一下我们的数据,这样我们就可以使用不同类型的视觉效果。让我们先看看我们的数据,看看我们在处理什么:

display(diamonds)

我们应该在 Databricks 笔记本中看到下表:

如您所见,每当我们在 Databricks 中运行 display()函数时,我们将在数据集中获得 1000 行的限制。

可视化数据块中的数据

既然我们已经在 Databricks 中定义了不同的数据框架(比如说速度快了 5 倍),我们可以开始试验不同类型的数据可视化。我们知道我们有哪些列,它们是什么数据类型,以及我们的钻石数据框架中有什么类型的数据,所以让我们从一些聚合开始。

首先,让我们按颜色将钻石分组,并显示它们的平均价格。我们将通过编写以下代码为此创建一个新的数据框:

# Group by color
diamonds_color = diamonds.groupBy('color').avg("price")
display(diamonds_color)

当我们执行代码时,我们得到了一个表格,但是你看到表格底部的条形图按钮了吗?这个按钮允许我们可视化我们的数据。在本例中,我使用了一个基本的条形图,但我将介绍使用该功能可以做些什么。

在 Azure Databricks 中,我们可以创建不同类型的可视化,如下图所示:

不是所有东西都可以是条形图的,对吗?

我们也可以使用“绘图选项”自定义我们的绘图

这是一个非常基本的例子,但是使用这个特性,我们可以定制我们想要在图表中使用的字段、键、值、组、聚合类型以及图表的显示方式。

让我们探讨另一个例子。在 databricks 笔记本的另一个代码块中编写以下代码:

# depth to carat
depthVcarat = diamonds.select("depth", "carat")
display(depthVcarat)

在这个数据框中,我们希望了解钻石的深度与其克拉值之间是否存在关系。让我们创建一个散点图,看看是否有:

看起来不像。

既然我们已经在 Databricks 笔记本中获得了一些很酷的可视化效果,我们可以将它们整合到一个非常整洁的仪表板中。

为此,我们可以使用笔记本中的下拉菜单,显示视图:代码,然后单击新仪表板:

在这里,我们可以移动我们的视觉效果来创建一个如下所示的仪表板:

在这里,我们可以移动我们的视觉效果,以适应我们的仪表板。控件非常简单,我们可以选择布局选项(堆叠或浮动)和仪表板宽度。

仪表板可以在数据块中非常简单,也可以更加复杂。我们可以做一个快速的模拟,就像我们刚刚制作的那样,或者我们通过创建一个计划的作业来刷新它,从而增加一些复杂性。例如,如果我们创建一个为流式作业提供视觉效果的仪表板,我们可以创建一个经常更新它的作业。

虽然 Databricks 中的可视化工具很好,但它们不如 Power BI 全面。现在让我们将数据连接到 Power BI。

将数据块连接到 Power BI Desktop

Power BI 提供交互式数据可视化,使用户能够创建报告和仪表板。使用 Azure Databricks,您可以为所有业务用户带来性能优势。特别是,您可以使用 DirectQuery 将处理责任卸载给 Azure Databricks,它将处理我们在 Power BI 中不一定需要的大量数据。

Power BI 带有一个内置的 Spark 连接器,允许我们连接到数据块中的集群。为了连接到您的集群,您需要在数据块中生成一个个人访问令牌。

首先,让我们将钻石数据帧保存为 Databricks 中的全局表。全局表可用于所有集群。

# save diamonds dataframe as a global table
diamonds.write.saveAsTable("diamonds")

让我们通过检查我们的数据选项卡来确认我们的表已经被创建:

太好了,现在我们已经保存了我们的表,让我们将它连接到 Power BI。首先,我们需要获得我们的 JDBC (Java 数据库连接)服务器地址。转到集群 UI,选择要连接的集群。在编辑页面上,向下滚动并选择 JDBC/ODBC 选项卡。

在这里,我们看到了一系列需要连接到 Power BI 的值。我故意对您隐藏我的值,但您需要以下格式的地址:

https://<server-host>:<port>/sql/protocol/o/<key>/<key>

最后的两个键会在你的 JDBC 网址文本框中,所以只需复制并粘贴这些值。

一旦你有了网址,进入 Power BI,点击工具栏中的获取数据,然后点击更多…

在获取数据对话框中,我们需要寻找 Spark (beta) 连接器:

点击连接。输入我们之前构建的 URL,使用 HTTP 作为协议,选择 DirectQuery 作为数据连接方式。这将允许我们将处理任务卸载给 Spark(如前所述)。

现在,我们需要登录集群。使用“令牌”作为用户名,使用令牌作为密码(确保在执行此操作之前已经生成了令牌)。点击连接连接到您的集群。

如果一切正常,您应该能够在 Navigator 对话框中看到所有的表。选择钻石表,您将看到我们的数据预览:

我们可以像在 Power BI 中编辑任何数据源一样编辑我们的数据导入,或者我们可以将它全部加载进来。还是做后者吧!点击加载开始。

处理 Power BI 中的数据

现在我们的 Databricks 表在 Power BI 中可用了,我们可以开始创建一些非常棒的可视化。

在“字段”选项卡中,我们可以看到导入的表格及其相应的列:

让我们尝试创建我们在 Databricks 中制作的每种颜色平均价格的条形图。在字段选项卡中,选中颜色和价格复选框,将这些字段插入到我们的仪表板中。

现在,我们想为我们的可视化选择一个“堆积柱形图”。我们需要改变一些东西来使我们的图表看起来更好。在 visualizations 选项卡中,我们希望将轴设置为 color,为图例选择颜色,并将值设置为 price 列的平均值。应该是这样的:

我们的最终结果应该是这样的:

这是我们在这里创建的一个非常简单的示例,但是希望您现在已经了解了在 Power BI 中从数据块导入数据的基础知识

结论

在这篇博文中,我们采用了一个简单的 csv 文件(它已经为我们加载到 Azure Databricks 中了!)并用 Python 把它变成了一个数据框,并在上面应用了一些很酷的可视化效果。然后,我们将数据帧保存为表格,将集群连接到 Power BI,并在表格上应用一些可视化。

你可能想知道为什么我们实际上在两个不同的地方做可视化。Databricks 是数据工程师和数据科学家在统一的分析工作流中合作的一个很好的工具,但不是所有的业务用户都能够使用 Databricks 这样的工具,并且使用 Power BI(实际上是一个带有 jetpack 的拖放工具)这样的简单工具来满足他们的报告需求会舒服得多。

这个例子将云中的数据拉回到 Power BI Desktop 中。一个更具成本效益的策略是使用 Power BI Online 这样的工具,这样数据就可以保存在云中,所以在生产场景中要记住这一点。

我希望你能从本教程中获得一些价值。如果你有任何问题,请在评论中提问。

使用 Python 中的 Pairs 图可视化数据

原文:https://towardsdatascience.com/visualizing-data-with-pair-plots-in-python-f228cf529166?source=collection_archive---------0-----------------------

如何快速创建强大的探索性数据分析可视化

一旦你有了一个干净的数据集,下一步就是探索性数据分析(EDA)。 EDA 是找出数据能告诉我们什么的过程,我们使用 EDA 来寻找模式、关系或异常,以便为后续分析提供信息。虽然 EDA 中有大量方法可以使用,但最有效的开始工具之一是 pairs 图(也称为散点图矩阵)。一个对图允许我们看到单个变量的分布和两个变量之间的关系。结对图是确定后续分析趋势的一个很好的方法,幸运的是,它很容易在 Python 中实现!

在本文中,我们将通过使用 seaborn 可视化库在 Python 中启动和运行 pairs 绘图。我们将了解如何创建默认的 pairs 图来快速检查我们的数据,以及如何定制可视化以获得更深入的见解。这个项目的代码可以从 GitHub 上的 Jupyter 笔记本中获得。我们将探索一个真实世界的数据集,由 GapMinder 收集的国家级社会经济数据组成。

Seaborn 的 Pairs 地块

要开始,我们需要知道我们有什么数据。我们可以把社会经济数据作为一个熊猫的数据框架来加载,然后看看这些列:

数据的每一行代表一个国家在一年中的观察,列保存变量(这种格式的数据称为整齐数据)。有 2 个分类列(国家和洲)和 4 个数字列。这几列是不言自明的:life_exp是出生时的预期寿命,单位是年,pop是人口,gdp_per_cap是人均国内生产总值,单位是国际货币。

seaborn 中的缺省 pairs 图只绘制数字列,尽管稍后我们将使用分类变量进行着色。创建默认的 pairs 图很简单:我们加载 seaborn 库并调用pairplot函数,向它传递我们的 dataframe:

# Seaborn visualization library
import seaborn as sns# Create the default pairplot
sns.pairplot(df)

我仍然很惊讶,一行简单的代码给了我们整个情节!pairs 图基于两个基本图形,直方图和散点图。对角线上的直方图允许我们看到单个变量的分布,而上下三角形上的散点图显示了两个变量之间的关系(或缺乏关系)。例如,第二行最左边的图显示了 life_exp 与 year 的散点图。

默认配对图本身常常给我们提供有价值的见解。我们看到预期寿命和人均国内生产总值正相关,表明高收入国家的人们往往更长寿(尽管这当然不能证明一个导致另一个)。(谢天谢地)随着时间的推移,世界范围内的预期寿命似乎也在上升。从直方图中,我们了解到人口和 gdp 变量严重右偏。为了在未来的图中更好地显示这些变量,我们可以通过取这些值的对数来转换这些列:

# Take the log of population and gdp_per_capita
df['log_pop'] = np.log10(df['pop'])
df['log_gdp_per_cap'] = np.log10(df['gdp_per_cap']) # Drop the non-transformed columns
df = df.drop(columns = ['pop', 'gdp_per_cap'])

虽然该图本身在分析中是有用的,但我们可以通过根据分类变量(如洲)给图形着色来使其更有价值。这在 seaborn 也是极其简单的!我们需要做的就是在sns.pairplot函数调用中使用hue关键字:

sns.pairplot(df, hue = 'continent')

现在我们看到大洋洲和欧洲的预期寿命最长,亚洲人口最多。请注意,我们对人口和 gdp 的对数转换使这些变量呈正态分布,从而更全面地表示了这些值。

这个图表提供了更多的信息,但是仍然有一些问题:我倾向于不去发现堆叠的直方图,像对角线上的那样,是很容易解释的。一个更好的显示来自多个类别的单变量分布的方法是密度图。我们可以在函数调用中将直方图换成密度图。在此过程中,我们将向散点图传递一些关键字,以更改点的透明度、大小和边缘颜色。

# Create a pair plot colored by continent with a density plot of the # diagonal and format the scatter plots.sns.pairplot(df, hue = 'continent', diag_kind = 'kde',
             plot_kws = {'alpha': 0.6, 's': 80, 'edgecolor': 'k'},
             size = 4)

对角线上的密度图比堆积的柱状图更容易比较各大洲之间的分布。改变散点图的透明度增加了可读性,因为这些图上有相当多的重叠(称为过度绘制)。

作为默认配对图的最后一个例子,让我们通过只绘制 2000 年以后的年份来减少混乱。我们仍将按洲进行着色,但现在我们不会绘制年份列。为了限制绘制的列,我们向函数传递一个列表vars。为了明确剧情,我们还可以加一个标题。

# Plot colored by continent for years 2000-2007
sns.pairplot(df[df['year'] >= 2000], 
             vars = ['life_exp', 'log_pop', 'log_gdp_per_cap'], 
             hue = 'continent', diag_kind = 'kde', 
             plot_kws = {'alpha': 0.6, 's': 80, 'edgecolor': 'k'},
             size = 4);# Title 
plt.suptitle('Pair Plot of Socioeconomic Data for 2000-2007', 
             size = 28);

这看起来越来越好了!如果我们要做建模,我们可以使用这些图中的信息来通知我们的选择。例如,我们知道 log_gdp_per_cap 与 life_exp 正相关,因此我们可以创建一个线性模型来量化这种关系。在这篇文章中,我们将坚持绘图,如果我们想进一步探索我们的数据,我们可以使用 PairGrid 类定制 pairplots。

使用 PairGrid 进行定制

sns.pairplot函数相反,sns.PairGrid是一个类,这意味着它不会自动为我们填充图形。相反,我们创建一个类实例,然后将特定的函数映射到网格的不同部分。为了用我们的数据创建一个 PairGrid 实例,我们使用下面的代码,它也限制了我们将显示的变量:

# Create an instance of the PairGrid class.
grid = sns.PairGrid(data= df_log[df_log['year'] == 2007],
                    vars = ['life_exp', 'log_pop', 
                    'log_gdp_per_cap'], size = 4)

如果我们要显示它,我们将得到一个空白的图形,因为我们没有将任何函数映射到网格部分。PairGrid 需要填写三个网格部分:上三角形、下三角形和对角线。为了将图映射到这些部分,我们在部分上使用grid.map 方法。例如,为了将散点图映射到上面的三角形,我们使用:

# Map a scatter plot to the upper triangle
grid = grid.map_upper(plt.scatter, color = 'darkred')

map_upper方法接受任何接受两个变量数组(比如plt.scatter)和相关关键字(比如color)的函数。map_lower方法是完全相同的,但是填充网格的下三角形。map_diag略有不同,因为它接受一个接受单个数组的函数(记住对角线只显示一个变量)。一个例子是plt.hist,我们用它来填充下面的对角线部分:

# Map a histogram to the diagonal
grid = grid.map_diag(plt.hist, bins = 10, color = 'darkred', 
                     edgecolor = 'k')# Map a density plot to the lower triangle
grid = grid.map_lower(sns.kdeplot, cmap = 'Reds')

在这种情况下,我们在下面的三角形上使用二维(密度图)的核密度估计。综上所述,这段代码给出了以下情节:

当我们想要创建自定义函数来将不同的信息映射到绘图上时,使用 PairGrid 类的真正好处就来了。例如,我可能想要将两个变量之间的皮尔逊相关系数添加到散点图上。为此,我将编写一个接受两个数组的函数,计算统计数据,然后将其绘制在图上。下面的代码显示了这是如何做到的(归功于这个堆栈溢出答案):

我们的新函数被映射到上面的三角形,因为我们需要两个数组来计算相关系数(还要注意,我们可以将多个函数映射到网格部分)。这会产生以下情节:

相关系数现在出现在散点图上方。这是一个相对简单的例子,但是我们可以使用 PairGrid 将任何函数映射到图上。我们可以根据需要添加尽可能多的信息,前提是我们能想出如何编写这个函数!作为最后一个例子,这里是一个在对角线上显示汇总统计数据的图,而不是一个图。

这需要一点清理,但它表明了总体思路;除了使用库中任何现有的函数(如matplotlib)将数据映射到图形上,我们还可以编写自己的函数来显示定制信息。

结论

Pairs 图是快速探索数据集中的分布和关系的强大工具。Seaborn 提供了一个简单的默认方法来制作 pair plots,可以通过 Pair Grid 类对其进行定制和扩展。在一个数据分析项目中,价值的主要部分通常不是来自华而不实的机器学习,而是直接的数据可视化。pairs 图为我们提供了对数据的全面的初步观察,是数据分析项目的一个很好的起点。

我欢迎反馈和建设性的批评,可以通过 Twitter @koehrsen_will 联系到我。

纽约州贫困的可视化距离剖面图

原文:https://towardsdatascience.com/visualizing-distance-profiles-of-deprivation-in-new-york-state-2c0a35260f38?source=collection_archive---------11-----------------------

“aerial photography of city” by Sergey Kuznetsov on Unsplash

距离剖面图有助于探索城市地区的人口特征。它们被广泛应用于城市人口统计学和社会学研究。追溯到 20 世纪 20 年代和芝加哥学派的模型。他们认为,每个主要城市都是从市中心向同心圆扩展的。

source: https://transportgeography.org/?page_id=4908

我偶然看到了这篇论文, ,这是一个可再现的框架,用于可视化美国大都市地区的人口统计距离剖面图 ,它将带您了解在 r 创建距离剖面图的工作流程。我发现它很有趣,并且熟悉所需的软件包,因此,我决定创建纽约州邻里贫困的距离剖面图。

数据准备

在能够计算距离之前有相当多的准备工作。这里就不展示代码了,都贴在 GitHub 里了。简而言之:

  1. 我首先必须获得 NYS、纽约人口普查区和美国城市的空间文件。
  2. 过滤纽约地铁
  3. 创建贫困指数并加入人口普查区域
  4. 对纽约市内的人口普查区域进行空间过滤

到目前为止,我一直在交替使用 metros 。事实上,大都市和小城市地区是有区别的。也有基于核心的统计地区(CBSA)的定义,指的是大都市或微地区,以及组合统计地区(CSA),指的是大都市和微地区。还有主要统计区域(PSA ),即所有 CSA 加上不属于 CSA 的 cbsa。很头疼,真的。

此外,联邦统计系统为这些地区创造产品和收集数据,然而,不知何故,这些定义是由白宫的预算办公室创造的。

反正我跑题了。因此,在过滤和连接数据后,我可以绘制出 CBSAs 的贫困水平。(这张地图不包括纽约的所有 CBSAs)

距离轮廓

你可以看到每个城市核心是如何从该州的其他地方脱颖而出的(亮色=高度剥夺)。它确实类似于同心环模型,在这种情况下,剥夺水平在核心处最高,并随着距离的增加而减少。真正富裕的社区/人口普查区也是如此。索引是相对于整个状态的。因此,与该州的所有人口普查区域相比,城市核心区拥有高度贫困和富裕的区域,而不仅仅是它们各自的 CBSA。

然而,要创建距离简档,我们需要测量距离。为此,我必须查找每个 CBSA 的主要市政厅的坐标。这有点耗时,但是谷歌帮了大忙。所以不像听起来那么可怕。一旦所有的坐标都被收集起来,它们必须被转换成简单的特征并被投影。因为,你知道,地球是圆的。

测量了从每个主要市政厅到人口普查区质心的距离。参考文章提供了一些实现这一点的详细代码。奥尔巴尼和布法罗 CBSAs 都有多个主要城市,因此,坐标是为每个城市绘制的,距离是从最近的城市开始测量的。

我不知道你怎么想,但是,我发现这个情节真的很令人满意。

oohh, spaghetti plot

这些数据向我们展示了一个非常有趣的动态。剥夺感在靠近市中心(内城)的地方确实很高,在靠近郊区的地方急剧下降;然后在离市中心大约 10 公里的地方,贫困又开始增加,但是没有达到城市中心的水平。

我想进一步探索这些数据,所以我把重点缩小到了四个主要的北部地区(当然,我刚刚在四个之后写的一切都是高度主观和武断的)。纽约州北部是什么?

纽约北部

为了探索进一步的模式,我绘制了 CBSA 每个县的距离与贫困的关系图。在拥有几个主要城市的奥尔巴尼和布法罗地区,这种关系非常简单——剥夺感随着离市政厅的距离而减少。然而,在锡拉丘兹和罗彻斯特 CBSAs,我们看到了一种模式,即主要县(分别为奥农达加和门罗)的人口普查区代表了贫困得分的范围,而通勤县的人口普查区没有达到同样高的贫困或富裕水平。

Larger, individual plots are posted in GitHub

为了更直观,我将每个县(跨越四个 CBSAs)分为核心县(T0)或通勤县(T2),并将剥夺分数转换为四分位数。通过这样做,很明显,CBSA 最贫困的人口普查区是那些离核心最近和最远的人口普查区。这是有道理的,通勤县中较远的区域往往是非常乡村化的,而较近的通勤区域是发达的,因为它们邻近核心县。

现在怎么办?

我不知道,正如我承诺的,这只是试探性的。我认为在健康研究中使用这些方法是有潜力的,可以突出差异或者评估医疗服务的可及性,但是需要正确的数据。

感谢阅读!

如果你觉得这很有趣,我建议阅读 参考文章 。我的 网站 上也有这篇文章的一个版本。

可视化世界各地的能源组合

原文:https://towardsdatascience.com/visualizing-energy-mix-around-the-world-fd457f462c84?source=collection_archive---------11-----------------------

利用世界发展指标,我将各个国家和地区的能源组合(可再生能源、不可再生能源、核能)形象化。

(L) Asia-Pacific (R) Europe and Middle East

(L) Americas (R) Africa

在使用核动力源发电方面,我们可以观察到:

  • 欧洲使用高比例的核能,最高的是法国,76%的电力来自核能
  • 在其他大洲,美国/加拿大/韩国/南非在本地区使用核能的比例最高(基于 2012 年最完整的国家列表数据)

关于可再生能源,这些国家在本地区使用可再生能源(包括水电)的比例最高:阿尔巴尼亚、塔吉克斯坦、尼泊尔、巴拉圭、莫桑比克,据报告为 99%以上。

我们也可以看到不可再生能源仍然是主流,但在每个地区都有国家向可再生能源发展。

为了生成三元图,我使用了 gtern 包:

ggtern(df, aes(x = Nuclear, y = Nonrenewable, z = Renewable, col=region)) +
    geom_point(shape = 17, alpha=0.8, size = 5) + 
    geom_Lmark(alpha=0.1)

这是我关于数据科学和视觉故事的# 100 日项目的第 48 天。我的 github 上的全部代码。感谢阅读。欢迎新主题的建议和反馈。

想象我所知道的一切

原文:https://towardsdatascience.com/visualizing-everything-i-know-8400fe4f824f?source=collection_archive---------10-----------------------

使用文化映射数据可视化(点击此链接转到交互式可视化仪表板)来分析巴克明斯特·富勒的我所知道的一切的抄本,这是 1975 年录制的 42 小时大声思考系列讲座。

语言反映思想

如果你还不知道工程图标巴克明斯特富勒的生活,没有比现在更合适的时间来了解。富勒 1895 年出生于马萨诸塞州的米尔顿,是设计创新和系统思维的杰出代表。在 20 世纪 40 年代末,他推广了网格穹顶作为建筑结构的使用。他的设计过程是一个有机的过程——与其说是灵光一现,不如说更像是音乐的四分之一。

作为一名前海军士兵,他非常熟悉航海和海洋,并经常被引用来解释平衡帆的概念。(船上的平衡翼是一个微型方向舵——稍微移动它就可以移动整艘船。)他一直在寻找意义,并相信他一生的工作应该是全人类的财产。1969 年,美国人文主义者协会授予他年度人文主义者。

“有史以来所有人类共有的是什么?问题,问题,解决问题。我们是来解决问题的,”

先见之明的谈话

在 1975 年 1 月的最后两周,巴基发表了一系列 12 次演讲,时间跨度 42 小时,讨论了他所知道的一切。讲座被录像——最近由巴克明斯特富勒研究所转录。他们详细描述了迫使他理解世界的事件,他的主要发明,如 1927 年的 Dymaxion house,以及他的开拓性观点。

Buckminster Fuller — Everything I Know — session 01 — January 20, 1975

巴基总是着眼于大局,在他 1975 年系列的第二部分中,他问观众,“纵观历史,所有人的共同点是什么?问题,问题,解决问题。我们在这里是为了解决问题,”我们解决问题的共性是富勒经过多年思考和观察得出的简单结论。然而,通过我所知道的一切可以证明,解决问题本身并不那么简单。为什么?因为解决问题是为了理解人性。正确解决真正的问题是真正的创新,它需要一个归纳研究的过程。

归纳法和演绎法的主要区别在于,演绎法是关于假设和测试的,而归纳法关注的是从数据中产生新的想法。通常使用演绎法。当想法在测试阶段失败时,它们就被搁置了。有了归纳,这个想法会随着它的上下文发展——本质上是修剪制表符。

视觉无障碍

在《我所知道的一切》系列中,巴克明斯特·富勒详细阐述了他的归纳研究过程——但该系列以一种面向学术读者的形式存在。在我们这个时代腐败的世界里,缺乏即时性会扼杀好的想法,我们想解开巴基为我们其他人说的话。我们怎样才能使巴基一生的知识更容易和更广泛地被获取,为所有学科的战略家提供重要的信息来帮助理解巴基的意图?强调系统方法是一回事,但这意味着什么——必须是谁,他们需要遵循的计划是什么?

为了弄清问题的真相,我们使用自然语言处理技术处理了我所知道的一切的文字记录,以逐段识别巴基话语的潜在含义并进行评分。基于能指,他的会议带领我们通过框架,调查,仪器,校准,系统化,修剪标签,阴谋,编排,实现,投资,原则,愿景。

然后,我们通过会话获取这些能指,并根据我们的符号矩阵绘制出最能说明问题的能指。我们使用我们的专利矩阵来观察语言群是如何发挥作用的,导致意识形态的原型。它展示了巴基的认知框架及其演变的真相和紧张局势的有形可视化。

通过代码和原型定义

在巴克明斯特·富勒和《我所知道的一切》系列中,出现了四个不同的原型。空想家炼金术士现实主义者军事家。每个原型都是基于从文本中的能指升起的人类代码。代码是原型似乎天生遵循的指导原则。从这些原型中,强烈的视觉和技术显现出来,被接受的时代精神的批判性也显现出来。每个原型都生活在巴基对他所知道的一切的记忆中。在他的一生中,他是各种原型的融合。炼金术士,他最舒服的地方——试验网格圆顶的人,因素最突出。现实主义者,他对权力结构和融资的现实论述最少。

理论家

理论家肩负着责任同步。Bucky 坚持他的核心原则,即有机和固有的做事方式。他使用象征性的短语,如“持续的紧张”、“整体思维”和“视线”在《我所知道的一切》的文化景观中,空想家原型约占 27%。

炼金术士

炼金术士渴望实验实施的经验。这是典型的巴基,我们看到巴基亲自动手,他的魔术在这里发生。意义短语“设计科学”多次出现。“能量几何”和“革命”都发挥了作用。炼金术士原型占了我所知道的一切的文化景观的 36%。

现实主义者

现实主义者由生存能力可扩展性的代码驱动。这是考验他人的现实。它包括“工具”和“有权力的人”等意符。在巴克明斯特富勒的例子中,它没有超越对他的核心更关键的原型。现实主义原型被限制在“我所知的一切”( T42)文化景观的 16%。这很奇怪,因为生存能力和可伸缩性是专业领域的常用词,然而如果引入得太早,它们就会缺乏创新。

军师

战略家原型是由庄严正直的代码驱动的。巴基希望自己的努力对世界有意义。这个原型允许未来的计划和未来的验证。这就是意符出现的地方,比如“逻辑事物”、“注意”和“模式完整性”战略家我所知道的一切的文化景观的 21%。

可行的计划

通过看到原型,除了他自己的成功和尝试,我们可以讨论巴基如何看待世界上的事情。一个人从意识形态开始,渴望实验,接受现实,并不断制定策略。归根结底,真正的问题是人们害怕过程创新,因为他们不理解它,或者害怕它会有抑制性,如果做得正确,这是不正确的。似乎目前我们做得不对。对于与我所知道的一切相关的每个问题,我们还追踪了巴克明斯特·富勒被引为灵感的专利。奇怪的是,申请的专利没有一项被批准。

1975 年,巴基告诉我们如何让创新贯穿我所知道的一切。我们让它看得见。我们将以巴基的挑衅来结束,“显然我们有一个很大的缓冲空间来犯错,但我要说,这个缓冲空间即将结束。缓冲即将结束……”趁我们还有时间,让我们开始重新审视我们的研究实践,让巴基的思想更广泛地传播开来。创新不应落后于我们。

  • 蒂姆·斯托克和玛丽·莱娜·图波特

基于 Keras 的卷积神经网络中间激活可视化

原文:https://towardsdatascience.com/visualizing-intermediate-activation-in-convolutional-neural-networks-with-keras-260b36d60d0?source=collection_archive---------1-----------------------

在本文中,我们将使用 Keras 和 Python 来训练一个简单的卷积神经网络,以完成分类任务。为此,我们将使用一组非常小而简单的图片,包括 100 张圆形图片、100 张正方形图片和 100 张三角形图片,这些图片是我在 Kaggle 中找到的。这些将被分成训练集和测试集(工作目录中的文件夹)并传送到网络。

最重要的是,我们将复制 Franç ois Chollet 在他的书 Deep Learning with Python 中的一些工作,以便了解我们的层结构如何根据每个中间激活的可视化来处理数据,这包括显示网络中卷积和池层输出的特征地图。

这意味着我们将可视化每个激活层的结果。

我们将进行得非常快,因为我们在这里并不专注于用 Keras 做 CNN 的详细解释。

让我们首先导入所有需要的库:

%matplotlib inlineimport glob
import matplotlib
from matplotlib import pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import imageio as im
from keras import models
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers import Dropout
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ModelCheckpoint

这些是我们的训练图像:

images = []
for img_path in glob.glob('training_set/circles/*.png'):
    images.append(mpimg.imread(img_path))plt.figure(figsize=(20,10))
columns = 5
for i, image in enumerate(images):
    plt.subplot(len(images) / columns + 1, columns, i + 1)
    plt.imshow(image)

正方形

(代码和上面差不多,完整代码见这里)

三角形

图像形状是 28 像素乘 28 像素的 RGB 比例(尽管它们可能只是黑白的)。

现在让我们继续进行卷积神经网络的构建。通常,我们用Sequential()开始模型:

# Initialising the CNN
classifier = Sequential()

我们指定我们的卷积层,并添加MaxPooling进行下采样,添加Dropout防止过度拟合。我们使用Flatten,并以 3 个单元的Dense层结束,每个类一个(圆形[0],正方形[1],三角形[1])。我们指定softmax作为我们最后的激活函数,这是为多类分类建议的。

# Step 1 - Convolution
classifier.add(Conv2D(32, (3, 3), padding='same', input_shape = (28, 28, 3), activation = 'relu'))
classifier.add(Conv2D(32, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
classifier.add(Dropout(0.5)) # antes era 0.25# Adding a second convolutional layer
classifier.add(Conv2D(64, (3, 3), padding='same', activation = 'relu'))
classifier.add(Conv2D(64, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
classifier.add(Dropout(0.5)) # antes era 0.25# Adding a third convolutional layer
classifier.add(Conv2D(64, (3, 3), padding='same', activation = 'relu'))
classifier.add(Conv2D(64, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
classifier.add(Dropout(0.5)) # antes era 0.25# Step 3 - Flattening
classifier.add(Flatten())# Step 4 - Full connection
classifier.add(Dense(units = 512, activation = 'relu'))
classifier.add(Dropout(0.5)) 
classifier.add(Dense(units = 3, activation = 'softmax'))

对于这种类型的图像,我可能会构建一个过于复杂的结构,这一点在我们查看特征地图时会很明显,但是,对于本文来说,它有助于我准确展示每个图层将做什么。我确信我们可以用更少的层次和更少的复杂性获得相同或更好的结果。

让我们来看看我们的模型总结:

classifier.summary()

我们利用rmsprop作为我们的优化器、categorical_crossentropy作为我们的损失函数来编译模型,并且我们指定accuracy作为我们想要跟踪的度量:

# Compiling the CNN
classifier.compile(optimizer = 'rmsprop',
                   loss = 'categorical_crossentropy', 
                   metrics = ['accuracy'])

此时,我们需要将我们的图片转换成模型可以接受的形状。为此,我们使用ImageDataGenerator。我们启动它,并用.flow_from_directory来填充我们的图像。工作目录中有两个主要文件夹,称为training_settest_set。其中每个都有 3 个子文件夹,分别叫做circlessquarestriangles。我已经向training_set发送了每种形状的 70 张图片,向test_set发送了 30 张图片。

train_datagen = ImageDataGenerator(rescale = 1./255)
test_datagen = ImageDataGenerator(rescale = 1./255)training_set = train_datagen.flow_from_directory('training_set',
                                                 target_size = (28,
                                                 28),
                                                 batch_size = 16,
                                                 class_mode =
                                                     'categorical')test_set = test_datagen.flow_from_directory('test_set',
                                            target_size = (28, 28),
                                            batch_size = 16,
                                            class_mode =
                                                 'categorical')

该模型将训练 30 个时期,但我们将使用ModelCheckpoint来存储最佳表现时期的权重。我们将指定val_acc作为用于定义最佳模型的指标。这意味着我们将保留测试集上在准确性方面得分最高的时期的权重。

checkpointer = ModelCheckpoint(filepath="best_weights.hdf5", 
                               monitor = 'val_acc',
                               verbose=1, 
                               save_best_only=True)

训练模型

现在是训练模型的时候了,这里我们包括了callbackcheckpointer

history = classifier.fit_generator(training_set,
                                   steps_per_epoch = 100,
                                   epochs = 20,
                                   callbacks=[checkpointer],
                                   validation_data = test_set,
                                   validation_steps = 50)

该模型训练 20 个时期,并在时期 10 达到其最佳性能。我们得到以下消息:

Epoch 00010: val_acc 从 0.93333 提高到 0.95556,将模型保存到 best_weights.hdf5

在此之后,对于下一个时段,模型没有改进,因此时段 10 的权重是存储的权重——这意味着我们现在有一个存储该特定时段的权重的hdf5文件,其中测试集的准确度为 95.6%

我们将确保我们的分类器装载了最好的权重

classifier.load_weights('best_weights.hdf5')

最后,让我们保存最终模型以备后用:

classifier.save('shapes_cnn.h5')

显示训练过程中的损耗和精度曲线

现在让我们检查一下我们的模型在 30 个时期的表现:

acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']epochs = range(1, len(acc) + 1)plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()plt.figure()plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()plt.show()

我们可以看到,在纪元 10 之后,模型开始过度拟合。不管怎样,我们保留了性能最好的 epoch 的结果。

班级

现在让我们弄清楚分配给每个图形集的类别号,因为这是模型产生预测的方式:

圆:0
正方形:1
三角形:2

预测看不见的图像的类别

通过训练和存储我们的模型,我们可以从测试集中加载一个简单的看不见的图像,并查看它是如何分类的:

img_path = 'test_set/triangles/drawing(2).png'img = image.load_img(img_path, target_size=(28, 28))
img_tensor = image.img_to_array(img)
img_tensor = np.expand_dims(img_tensor, axis=0)
img_tensor /= 255.plt.imshow(img_tensor[0])
plt.show()print(img_tensor.shape)

# predicting images
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)images = np.vstack([x])
classes = classifier.predict_classes(images, batch_size=10)
print("Predicted class is:",classes)**> Predicted class is: [2]**

预测是类[2],它是一个三角形。

到目前为止一切顺利。我们现在进行这篇文章最重要的部分

可视化中间激活

引用弗朗索瓦·乔莱(Franç ois Chollet)在他的书《用 Python 进行深度学习》(这一节我会大量引用他的话):

中间激活“有助于理解连续的 convnet 层如何转换其输入,以及初步了解各个 convnet 滤波器的意义。”

“conv nets 所学的表征非常适合可视化,很大程度上是因为它们是视觉概念的表征。可视化中间激活包括在给定特定输入的情况下,显示网络中各种卷积和池化图层输出的特征地图(图层的输出通常称为其激活,即激活函数的输出)。这给出了输入如何被分解成由网络学习的不同滤波器的视图。每个通道对相对独立的要素进行编码,因此可视化这些要素地图的正确方法是将每个通道的内容独立绘制为 2D 图像。”

接下来,我们将获得一个输入图像——一个三角形的图片,而不是网络被训练的图像的一部分。

“为了提取我们想要查看的特征地图,我们将创建一个 Keras 模型,该模型将成批图像作为输入,并输出所有卷积和池层的激活。为此,我们将使用 Keras 类模型。使用两个自变量实例化模型:输入张量(或输入张量列表)和输出张量(或输出张量列表)。产生的类是一个 Keras 模型,就像顺序模型一样,将指定的输入映射到指定的输出。使模型类与众不同的是,它允许具有多个输出的模型,而不像顺序输出。”

从输入张量和输出张量列表实例化模型

layer_outputs = [layer.output for layer in classifier.layers[:12]] 
# Extracts the outputs of the top 12 layersactivation_model = models.Model(inputs=classifier.input, outputs=layer_outputs) # Creates a model that will return these outputs, given the model input

当输入图像时,该模型返回原始模型中的层激活值。

在预测模式下运行模型

activations = activation_model.predict(img_tensor) 
# Returns a list of five Numpy arrays: one array per layer activation

例如,这是图像输入的第一卷积层的激活:

first_layer_activation = activations[0]
print(first_layer_activation.shape)**(1, 28, 28, 32)**

这是一张 28 × 28 的特征图,有 32 个通道。让我们尝试绘制原始模型的第一层的激活的第四个通道

plt.matshow(first_layer_activation[0, :, :, 4], cmap='viridis')

甚至在我们试图解释这种激活之前,让我们画出同一图像在每一层的所有激活

在每个中间激活中可视化每个通道

这部分的完整代码可以在这里找到

这就是了!让我们试着解释一下发生了什么:

  • 第一层可以说是保留了三角形的完整形状,尽管有几个滤镜没有被激活,留为空白。在该阶段,激活保留了初始图片中几乎所有的信息。
  • 随着我们越来越深入,激活变得越来越抽象,越来越难以视觉解释。他们开始编码更高层次的概念,如单个边框、角和角度。更高的呈现携带越来越少的关于图像的视觉内容的信息,以及越来越多的关于图像类别的信息。
  • 如上所述,模型结构过于复杂,以至于我们可以看到我们最后的层实际上根本没有激活,在这一点上没有什么需要学习的。

原来就是这样!我们已经看到了卷积神经网络如何发现一些基本图形中的模式,以及它如何将信息从一层传递到另一层。

完整代码在此。

可视化 2018 年日本樱花季预测——尽在 R

原文:https://towardsdatascience.com/visualizing-japan-cherry-blossom-season-forecast-2018-doing-it-all-in-r-8b0ef46a6762?source=collection_archive---------14-----------------------

另一种用于教育目的的动画数据可视化体验,利用 FFmpeg 将图像转换为 MP4

最近,我怀着无比的喜悦第一次访问了日本。这次旅行是对日本美丽迷人的风景、历史和丰富文化的完美介绍。我非常怀念的一件事是能够看到樱花。所以我决定把它作为这次可视化的主题。

四处寻找数据集(最好是带日期的 geojson),不幸的是没有这样的可用数据集。

没问题。我决定从 2018 年 JR 铁路通行证的官方预报网页建立一个简单的网络抓取。它包括下载一个表,然后将该表映射到日本地区的名称。有一些必要的数据清理操作,以确定开花、完全开花和花期结束。幸运的是,官方预报网页给了我所需的开花前 1 周和开花后 1 周的假设:

“请记住,大多数花一旦开始开花,通常需要一周的时间达到盛开,而的盛开也要持续一周左右”(JR 铁路通行证博客)

下面是我们将构建的体验的结果。

这种方法不使用任何库。目标是帮助人们更好地理解幕后发生的事情。电影是一系列静止的图像,当一个图像一个图像地播放时,会产生运动的错觉。本教程将通过生成 55 张图片(每天一张)来做同样的事情,并将使用 FFmpeg 将它们转换成一部电影(2 行代码)。

Sallie Gardner at a Gallop — made by Eadweard Muybridge in 1878

使用 R:

我们将跳过步骤 0 (webscraping 和数据清理以创建数据集),专注于步骤 1 到 3——加载文件、生成图像并将其转换为电影。

步骤 1——加载并准备文件

我们将使用 2 个文件:1)从 JR 铁路通道获得的数据集和来自日本的 Geojson 文件,我们将把它们转换成带有每个地区名称的数据帧。

#Step 1 - Loading datasets
myurl<-'[https://raw.githubusercontent.com/tristanga/Visualizing-Japan-cherry-blossom-season-forecast-2018/master/sakura_2018.csv](https://raw.githubusercontent.com/tristanga/Visualizing-Japan-cherry-blossom-season-forecast-2018/master/sakura_2018.csv)['](https://raw.githubusercontent.com/tristanga/Visualizing-Japan-cherry-blossom-season-forecast-2018/master/sakura_2018.csv')
sakuradf<- read.csv(myurl)
sakuradf$sakura <- as.factor(sakuradf$sakura)#Loading geojson Japan map and convert it into dataframe
myurl <- '[https://raw.githubusercontent.com/tristanga/Visualizing-Japan-cherry-blossom-season-forecast-2018/master/Japan.json](https://raw.githubusercontent.com/tristanga/Visualizing-Japan-cherry-blossom-season-forecast-2018/master/Japan.json)['](https://raw.githubusercontent.com/tristanga/Visualizing-Japan-cherry-blossom-season-forecast-2018/master/Japan.json')
map_japan <- geojson_read(myurl,  what = "sp")
map_japan.df <- fortify(map_japan)#Adding the name to the region
myid <- as.data.frame(map_japan@data)
myid$id <- seq.int(nrow(myid))-1
myid <- myid  %>% select(id, name)
map_japan.df <- merge(map_japan.df, myid,  by.x="id", by.y="id")

步骤 2 —生成 55 幅图像

我们首先必须创建一个包含所有唯一日期的过滤器。由于像冲绳这样的一些地区在使用的 geojson 地图上看不太清楚,所以最好从樱花预测的第 65 天开始一直到结束,而不是第 1 天。

要从 ggplot 获得更好的结果,需要 ggplot 的主题(参见 theme_map)。

然后,从第 65 天到最后创建一个简单的循环,过滤当天的内容并与 JSON 合并,然后将图像保存到地图文件夹中。

#Step 2 - Generating 55 images#Creating a filter of all the dates
mydates =unique(sakuradf$date)#Displaying only the last 55 days of the season (skipping Okinawa region)
startdate = 65
enddate = length(mydates)#Generating a style
theme_map <- function(base_size = 12) {
  theme_minimal() +
    theme(
      axis.line = element_blank(),
      axis.text.x = element_blank(),
      axis.text.y = element_blank(),
      axis.ticks = element_blank(),
      axis.title.x = element_blank(),
      axis.title.y = element_blank(),
      # panel.grid.minor = element_line(color = "#ebebe5", size = 0.2),
      panel.grid.major = element_line(color = "#ebebe5", size = 0.2),
      panel.grid.minor = element_blank(),
      plot.background = element_rect(fill = "#f5f5f2", color = NA), 
      panel.background = element_rect(fill = "#f5f5f2", color = NA), 
      legend.position = 'None', legend.title = element_blank(),
      panel.border = element_blank()
    )
}#Creating a loop to filter on each day, generate a chart and saving 55 images in a map folder
for (x in startdate:enddate){
  my_x = mydates[x]
  print(paste("The year is", my_x))
  sakuradf_x <- sakuradf %>% filter(date == my_x)
  map_japan.df_x <- merge(map_japan.df, sakuradf_x,  by.x="name", by.y="name")
  japanplot <- ggplot(map_japan.df_x) +
    geom_polygon(aes(x = long, y = lat, fill = sakura, group = group)) +
    theme_map()+scale_fill_manual(values=c("4"='#d2618c',"3"='#e3adcb' , "2"="#f7e0f4", "1"="#9db6c7")) +
    ylim(30,46)+ 
    xlim(127,148)+ 
    labs(x = NULL, 
         y = NULL, 
         title = "Japan Sakura Seasons", 
         subtitle = paste("Date: ", my_x, sep=""),
         caption = "Japan Weather Forecast 2018")
  filename <- paste0("maps/img_" , str_pad(x-64, 7, pad = "0"),  ".png")
  ggsave(filename = filename, plot = japanplot, width = 5, height = 5, dpi = 150, type = "cairo-png")
}

步骤 3 —从图像到电影

只要你下载了 FFmeg 并解压到本地文件夹,比如 C:/ffmpeg,只需要简单的几行代码就可以创建电影。如果您没有 FFmeg,可以从以下网址下载:

[## FFmpeg

Stanislav Dolganov 设计并实现了无损运动估计和补偿的实验支持。

www.ffmpeg.org](https://www.ffmpeg.org/)

#Step 3 - Creating a movie from the images (please note that ffmeg is on my C:/)
makemovie_cmd <- paste0("C:/ffmpeg/bin/ffmpeg -framerate 5 -y -i ", paste0(getwd(), "/maps/img_%7d.png"),  " -r 56 -pix_fmt yuv420p ",  paste0(getwd(), "/maps/"), "sakura_movie.mp4")
system(makemovie_cmd)

然后在地图文件夹中创建一个 sakura_movie.mp4。你可以在 Github 上找到完整的代码和文件。

[## 特里斯坦加/可视化-日本-樱花-季节-预测-2018 年

可视化-日本-樱花-季节-预测-2018 -另一个用于教育目的的动画数据可视化

github.com](https://github.com/tristanga/Visualizing-Japan-cherry-blossom-season-forecast-2018)

如果你喜欢这个可视化效果,别忘了用文章页面上的鼓掌按钮鼓掌👏。每篇帖子最多可以鼓掌 50 次。如果您有任何问题,请随时通过 LinkedIn 联系我。

在 D3 中可视化陨石撞击

原文:https://towardsdatascience.com/visualizing-meteorite-strikes-in-d3-7c679e5072df?source=collection_archive---------12-----------------------

Meteorite shower

如果没有木星清理早期的太阳系,地球将会布满流星碰撞的痕迹。我们每天都会遭受小行星的撞击。如果没有木星,CNN 演播室可能会变成一个巨大的陨石坑。—加来道雄

作为 JavaScript 和 D3 的业余爱好者,我想挑战自己,创建一个使用 D3.js 和 jQuery 的强大功能来构建数据集的动画可视化的页面。

数据

为了让所有这些工作起来,我必须结合 3 个不同的数据集——

  • json 格式的地理空间数据
  • csv 格式的陨石数据
  • csv 格式的人口密度数据

我加入了 geo-json 文件和人口密度文件,并添加了人口密度(每平方英尺。km)到每个国家的 geo-json 文件。然后我用陨石数据在地图上标出陨石。

设计

可视化大致分为 3 个部分—

  • 页眉
  • 地图或可视化
  • 右边的故事

页眉

顾名思义,标题包含标题和 3 个补间属性——发现和观察到的陨石的年份和数量,根据地图上正在进行的动画进行插值。可视化中的动画从最古老的年份开始到最近的年份,年份滚动跟踪这一点,随着动画的进行,发现和观察到的陨石的计数累积显示在发现和观察滚动中。

地图或可视化

该地图包含整个可视化-一个互动的地图,陨石,动画等。,我使用 bootstrap 来帮助将不同的部分组织成网格,并使用 jQuery 和 d3 来实现交互性和动画。动画从最古老的一年开始,将流星坠落并撞击地球的相应坐标可视化。我还为攻击本身添加了一个效果,使地面上的接触可视化。这也有助于在非常小的陨石的情况下,确定它最终撞击的位置。

故事

story carousel 由按钮和信息组成,用于切换可视化效果并提供详细信息。有 4 个按钮可以显示理解可视化及其重要性的信息,也可以改变渲染。

  • 信息按钮默认选择,以便用户获得可视化的介绍。
  • 跳过介绍按钮,跳过动画,一次载入所有陨石。
  • 人口密度按钮根据各自区域的人口密度改变地图的不透明度。
  • 数据按钮显示用于可视化的数据集信息。

请注意,从“人口密度”中选择不同的按钮会将地图恢复到其原始设置。

Population Density view on Meteorite Strikes

下面是一个现场 演示

反光

虽然我喜欢创建这个可视化,但我想承认 SVG 的性能问题,处理这么多的圆圈和动画本身。在这方面,我尝试过用 Canvas 代替 SVG,使可视化速度更快。请记住 canvas 的一个缺点,我不能直接添加一个工具提示,并且必须使用一个变通方法来添加第二个隐藏的 Canvas,以使工具提示工作,以及进行这些更改所涉及的时间,我正在考虑在未来的项目中用 Canvas 替换 SVG。有了 SVG,可视化可以完美地用于其他任何事情。

资源

  • 费尔特龙
  • D3 —动画&交互
  • 动画数据—彼得·库克
  • HTML5 —画布教程

反馈

如果您有任何反馈,请随时在这里留下您的评论或通过 LinkedIn 联系我。

可视化模型 101,使用 R

原文:https://towardsdatascience.com/visualizing-models-101-using-r-c7c937fc5f04?source=collection_archive---------8-----------------------

你已经有了一个模型,现在呢?

开场白

这是(差点)我上一篇关于 “模型选择 101,使用 R”的直接续篇: ( 我大概应该把这个做成一个系列吧?)

[## 型号选择 101,使用 R

使用 R 对简单模型选择进行快速标记

medium.com](https://medium.com/@peter.nistrup/model-selection-101-using-r-c8437b5f9f99)

因此,如果您还没有,请检查一下,因为大多数示例将使用来自该分析的相同数据模型

也就是说,这是一个续集以及一个 101 本身,这意味着— 就像上一篇文章— 一样,这将主要是介绍性的。如果您想自己下载数据并跟随本文,请直接阅读本文末尾!

如果你喜欢这篇文章并想看更多,请务必关注我的简介

我们在做什么?

在这篇文章中,我们将看看你用你的模型得到的一些可视化的发现,比如给定解释变量对我们的反应变量的边际效应。

我们将会制作这样的美丽情节:

Who knew that if you receive no government support at all you’re forced into employment 😮

准备我们的数据和模型

我们必须做一些整理工作,为适当的可视化准备我们的数据和模型:

dat$gov.support <- exp(dat$gov.support)
dat$employed <- factor(dat$employed, levels(dat$employed)[c(2,1)])

第一个命令**对我们的‘gov . support’值应用 exp()变换,这是因为值在原始数据中默认为对数变换。我们这样做的原因是,当我们用‘log(gov . support)’拟合模型时,我们得到与上一篇文章相同的结果,但是我们得到了‘back’的额外好处——转换我们的数据,我将在后面展示!**

第二个命令**简单地交换了我们的分类响应变量‘employed’的顺序,这样我们的模型拟合将默认为拟合‘employed = =“yes”’,即使没有明确定义它。这很重要,因为现在我们可以不用一个“逻辑”响应变量来拟合我们的模型,该变量检查是否被使用== "yes"' 。**

这意味着上一篇文章中的基本模型是这样创建的:

fit.1 <- glm(employed == "yes" ~ ., data = dat, family = binomial)

现在我们这样定义:

fit.1 <- glm(employed ~ . - gov.support + log(gov.support), data = dat, family = binomial)
summary(fit.1)

请注意,我们没有为响应变量定义逻辑条件,我们用变量的对数变换替换了新的指数变换' gov.support ',以恢复到我们的初始模型:

如上所述,我们在进行“清理”之前,得到了与上一篇文章完全相同的摘要。

我想做的最后一件事是重新定义我们的因素变量,使其更加清晰:

dat$zero.young.children <- factor(dat$young.children == 0)dat$zero.school.children <- factor(dat$school.children == 0)dat$zero.children <- factor(dat$young.children + dat$school.children == 0)

这意味着我们的最终拟合看起来像这样:

glm(employed ~ foreigner 
                 + log(gov.support) 
                 + age 
                 + school.children 
                 + zero.young.children 
                 + zero.school.children
                 + zero.children
                 + I(age^2) 
                 + foreigner:age 
                 + foreigner:zero.children
                 + age:school.children 
                 + log(gov.support):zero.young.children, 
family = binomial, data = dat)

现在让我们制作一些情节!

让我们先画出我觉得最有趣的东西,即“”和“ gov.support ”之间的关系。

为此,我使用了一个名为“sjPlot”的非常出色的软件包:

*library("sjPlot")
plot_model(full.fit, type = “pred”, terms = c(“gov.support”))*

给了我们这个情节:

完全 无用!这是怎么回事?为了方便起见,' plot_model '给出了以下错误:

这正是我们需要转换数据的原因!让我们再试一次:

*plot_model(full.fit, type = “pred”, terms = c(“gov.support [exp]”))*

这几乎是毫无用处的,现在发生了什么?****

让我们试着看看我们的模型,以及它如何试图捕捉数据中的关系。有几种不同的方法可以做到这一点,但我们先来看看完整模型的系数:****

看到这个,你首先注意到的是什么?对我来说,它是因子变量‘零.年轻.儿童’系数几乎是 13 !虽然这不一定是个问题,但是让我们来看看系数的置信区间:**

*confint(full.fit)*

对,这看起来像麻烦!看看这个跨度,这意味着我们的边际效应图将会有巨大的置信区间。这很可能是我们的图有如此大的置信区间的原因。

sjPlot 也可以绘制这些:

*plot_model(full.fit, transform = NULL, show.values = TRUE, axis.labels = “”, value.offset = .4)*

这使得很容易看出,因子变量' zero.young.children' '在制作任何真正有把握的图时是很成问题的****

让我们走一点弯路,创建一个更简单的模型,没有任何变量交互,结果我们得到的是:

*simple.fit <- glm(employed ~ foreigner 
 + age 
 + zero.young.children 
 + zero.children 
 + log(gov.support) 
 + I(age^2), family = binomial, data = dat)
summary(simple.fit)*

AIC 中有一点点增加,这不是一件好事,但也不算太多,而且我们通过使用这个模型获得了很多简单性*!(如果我们用BIC来衡量性能,我们实际上发现这款车型更好,因为【BIC对复杂车型的处罚更严厉!1047 vs 1068)***

让我们看看新的系数:

*plot_model(simple.fit, transform = NULL, show.values = TRUE, axis.labels = “”, value.offset = .4)*

这个好看多了!让我们尝试使用这个模型再次制作我们的情节!

*plot_model(simple.fit, type = “pred”, terms = c(“gov.support [exp]”))*

不错,有用的东西!所以很明显,你获得的政府支持越多,被雇用的可能性就越低。这颇有点直观的感觉!外国人非外国人的区别如何?嗯 plot_model 也让这变得非常简单,只需将它添加为一个术语即可!:**

*plot_model(simple.fit, type = “pred”, terms = c(“gov.support [exp]”, “foreigner”))*

这简直易如反掌!因此,这个模型表明,在其他变量相同的情况下,外国人比非外国人更有可能被雇用。

年龄怎么样?这需要一个稍微不同的方法,因为我们并不真的假设与年龄有严格的正或负关系,这就是为什么权力转换 I(年龄)是有意义的。也就是说,我们不期望雇佣一个 10 岁的人,也不期望雇佣一个 70 岁的人,但是我们期望雇佣一个 30 岁的人。

遗憾的是,sjPlot 不太喜欢这种权力转换(或者说我是个不会做的笨蛋),所以我用“jtools”包来代替:

*effect_plot(simple.fit, pred = age, data = dat, interval = TRUE)*

因此,就业似乎在 30 岁左右达到“顶峰”,然后就消失了,这也有很多直观的感觉!

现在生孩子呢?:

*plot_model(simple.fit, type = “pred”, terms = c(“gov.support [exp]”, “zero.children”))*

惊喜惊喜!不生孩子会让你更有可能被雇佣和进入市场!

现在这可能看起来有点落后,但是让我们试着比较我们的图和我们的模型的系数,试着理解它!(我是视觉学习者,所以这对我来说很有意义,该死!):**

分类变量外国人零.孩子零.年轻.孩子很容易解释,成为非外国人 ( 外国人编号)会降低你被 1.12 雇用的对数几率,没有任何小孩会使你的对数几率提高 1.31 ,没有任何小孩会使它提高 你必须考虑到无论何时零.童零.童也是如此,基本上给对数概率一个“累积改进”**

更高的年龄提高了你被雇佣的对数几率 0.37* ,但是几率也会随着年龄 * - 0.0055 而下降,这意味着什么?这只是一个凹 2。次数多项式,有点类似于我们的年龄图,即我们看到一个最初的上升,然后是一些最大值,然后下降。***

就是这样!我们已经成功地以直观的方式复制了系数的值,干得好**

结束语

如果您想继续,请从这里获取数据:https://github . com/pela 15 AE/statmod/blob/master/employment _ data . txt由于是丹麦语,您可以运行下面的代码来翻译所有变量名和分类值:

*names(dat) <- c(“employed”, “foreigner”, “gov.support”, “age”, “education”, “young.children”, “school.children”)
levels(dat$employed)[1] <- “yes”
levels(dat$employed)[2] <- “no”
levels(dat$foreigner)[1] <- “yes”
levels(dat$foreigner)[2] <- “no”*

另外,看看高维数据的数据可视化:

*** [## 主成分分析(PCA) 101,使用 R

一次提高一个维度的可预测性和分类能力!使用 2D 图“可视化”30 个维度!

medium.com](https://medium.com/@peter.nistrup/principal-component-analysis-pca-101-using-r-361f4c53a9ff)***

结束语

如果你想看和了解更多,一定要关注我的 媒体 🔍碎碎念 🐦****

***** [## 彼得·尼斯特鲁普-中等

阅读彼得·尼斯特拉普在媒介上的作品。数据科学、统计和人工智能...推特:@PeterNistrup,LinkedIn…

medium.com](https://medium.com/@peter.nistrup)*****

可视化多维数组

原文:https://towardsdatascience.com/visualizing-multi-dimensional-arrays-a1027dcb02fa?source=collection_archive---------4-----------------------

A conceptual model of a multi-dimensional array

如果你在 5、6 年前问我对多维数组的看法,我会说它们是最简单的概念,但是实现起来最复杂,因为当我想到多维数组时,我的脑海中就会出现上面的“架构奇迹”。

那是很久以前,在我发现最简单的方法之前,就像理解 1+1 = 2 一样简单,去实现它们。好吧,虽然你们中的一些人可能已经很清楚了,这听起来可能是一个微不足道的任务,但这个概念中有一部分需要澄清,就像我几年前做的那样。所以系好安全带,我们走。

让我们从最基本的开始。什么是数组?

数组的原始定义只是说

数组是一种存储介质,可以保存固定数量的单一类型的值

虽然这部分是对的,但现在不再是了。考虑到我手头选择的编程语言,我认为我们可以扩展这个定义,并将其修改到新的水平。

JavaScript 提供了非常有用的特性,允许动态创建数组,这意味着数组的大小可以在以后决定,甚至不必固定。当要存储到阵列的数据数量改变时,它可以被修改,或者递增或者递减。

我们可能都注意到了,在某些时候,创建线性一维或二维数组的动力。让我们来创建多维数组。

多维数组,在我看来是数组中的数组。让我们讨论一个数组,用一个表格来直观地说明这一点。

假设您有一个简单的表,其中需要存储学生的详细信息,如姓名年龄年级提供的科目。现在,由于我们必须存储许多学生的详细信息,很明显这已经是一个二维数组,上面的详细信息将以下面的方式映射。

A two-dimensional representation of the Student Details Table

在一定程度上,这张表似乎足以从中获取信息。但是,如果最后一列(保存了提供的主题的)也被细分为如下所示,那么它将被认为更加干净和高效。

A multi-dimensional representation of the Student Details Table

这也为我们提供了操纵这些学科子学科细节的特权。那么,我们如何实现这一点呢?

我们把映射上面学生详细信息的数组叫做“ studentArray ”。我们将为这个数组创建骨架。

**var** noOfStudentRecords=100;
**var** noOfColumns = 4;
**var** studentArray = [];
**for**(**var** x = 0; x < noOfStudentRecords; x++)
{
    studentArray[x] = [];
    **for**(**var** y = 0; y < noOfColumns; y++)
    {
        **if**(y==3)
        {
            studentArray[x][y]= **new** Array[3];
        }
    }
}

在上面的代码中,我们将第三列指定为一个新数组:因此, 一个数组在另一个数组 中创建了一个 多维数组

这是创建多维数组的一个非常基本的解释。在更复杂的情况下,我们可以将这些单独的主题分成更多的类别,以容纳更多的细节,应用与上面相同的概念,只是在不同的维度上。

可视化纽约市电影许可证数据

原文:https://towardsdatascience.com/visualizing-nyc-film-permit-data-e7c0aa24285?source=collection_archive---------11-----------------------

More on this later

鸽笼和博格

你,一个有时有趣,有时有创造力的人。你,有时涉猎艺术,也许甚至在或多或少的创造性或艺术性的职业中谋生。你告诉某人,也许是一个大家庭成员,也许是一个有点疏远的大学朋友,也许是在喝咖啡的时候,你已经离开了你看起来可能很酷,也许看起来很稳定的工作,去参加一个为期几个月的全职、面对面的编码训练营。

然后,你的同伴会礼貌而严肃地回答,用很多话来说:

哦哇。太棒了。那么…你已经彻底放弃了你所有的梦想?你正在向科技行业进行艰难的职业转型?你终于承认你的文科学士一文不值了? Rekt。你不会怀念至少看起来很酷吗?我是轻量级的,通过你的家庭来替代生活。开心地说服人们新兵训练营是有效的。嗯,我应该做一个吗?

我是从文卡特什·拉奥的《绝命毒师》中剽窃来的:软件正在吞噬世界。我们可以认为软件不是一个独立于其他行业的行业,而是每一个其他行业之上的新的一层。

当我说“在…之上”时,我显然不是指“优于”我的意思是,你能想到的几乎每一个行业都在成为,或将成为,拥有软件超能力的电子人。最终,每个行业中的每个实体都将不得不尽可能最好地创建和使用,或者至少是恰当地使用软件工具,否则就会被那些这样做的人(更好更快地)所超越。这既不是辩论,也不是新闻。

新兵训练营和他们的崇拜者/憎恨者应该避免本能地认为新兵训练营是“转向科技行业”的途径。更有用的是,把它们看作是把我们自己抽象到我们所从事的任何行业的软件层的机会。

我的大多数同学都来自这样或那样的行业,而不是直接来自学院。我们已经走进了这个领域,亲眼目睹了应用软件的最佳创造者和实现者,在他们各自的领域里,正在取得胜利。现在,我们正试图在我们工业化的自我之上,安装一些类似博格的功能——反过来,将这些功能带回丰富我们所了解和喜爱的行业。

Obligatory gif // Where my BioShock fans @

也许不是。至少,我们应该认识到,我们过去的经历已经不可逆转地塑造了我们,我们应该尽可能积极地接受这一点。你永远不知道你碰巧知道的东西,无论是通过学术研究还是职业辛劳,什么时候会派上用场,即使你正试图进入新的领域和经历。

虽然我在一个灰色墙壁、没有窗户的房间里工作了近两年,上了十几个小时的夜班,收集了宝贵的深层领域知识,充实了我的 IMDb 档案,但我并没有完全成为我在学校时梦想成为的创意艺术家。在一家大型电影后期制作公司做数字日报操作员需要每天日出后睡觉,日落后醒来,在一些周末也是如此,这是不太自然的。

from mixinglight.com — I pretty much lived my life in a room like this one

这留下了某些可以说是重要的东西:社交生活?暴露在日光下?一份与在曼哈顿从事一份有创造性但技术要求高的工作相称的薪水?免费的办公室小吃?一般比较绿的草?这是我决定参加数据科学训练营的动力。我既没有创作自己的电影,也没有为电影制作人提供有用的工具。至少我可以和保罗·达诺共用一个冰箱。

我不会放弃对电影的热爱,也不会制作电影,但我正在一个不断发展的领域中寻找一种新的谋生方式。我们生活在一个网飞掌管好莱坞的世界,即使是在实体的意义上。你知道网飞的《纸牌屋》第一季是怎么诞生的吗?

通过分析观众数据——想想 3000 万次“播放”,400 万次评级,300 万次搜索——该公司能够确定在英国播出的原版《纸牌屋》的粉丝也在观看由凯文·史派西主演、大卫·芬奇执导的电影——从CIO.com

看到了吗?数据科学完全适用于我的专业领域。我会想办法把它绑回去的。你会喜欢的,我保证。故事就是一切。

也就是说,下面是我第一次尝试运用数据科学工具来创造一些关于电影制作的有趣的东西。

可视化纽约市公开电影许可证数据

我最好的朋友迈克是一名数据科学家。不久前,迈克告诉我优步推出了一款漂亮的新开源工具,名为 kepler.gl 。他说,它提供了超级简单、超级容易的数据可视化。他说,不需要编程经验。

那太好了,因为现阶段我的编程经验非常少。不幸的是,事实证明,与我热爱的电影制作行业相关的数据集并不总是完美格式化并准备好输入到预建的数据 viz 工具中,因此,由于没有任何解析和重塑数据集的编程技能,我只能使用开普勒登录页面上提供的六个左右的演示。真扫兴。

然而,现在我进入了熨斗学校(T1)的数据科学训练营(T3)的第三周。从我很小的时候起,计算机就帮助我做有创造性的事情,但只是通过像 Adobe 制作的那些预建的 GUI 应用程序。只有在专注于 Python 几个星期,或者如果算上课程准备工作的话,可能几个月之后,在经验丰富的讲师的指导下,我才开始感觉到在数据方面的幼稚能力。该是一些蹒跚学步的婴儿的时候了。

一位同学(对查尔斯大喊)带我去了纽约市开放数据中心,在它的数千个重要的和社会相关的数据集中,还有一个 API,提供了在该市备案的电影许可记录。该列表中归档的每个许可包括关于每个电影或电视制作的日期、邮政编码和每个制作保留的街道名称的信息。

我立刻想用开普勒将这些完全品牌化的时间/地理数据可视化。我想看到所有被允许的电影作品在纽约地区的地图上出现和消失,就像延时摄影中的水痘一样。开普勒很适合这类事情。

不幸的是,开普勒不接受像这样的文本字符串:“24 街和 26 街之间的百老汇”——作为有效的地理坐标。我认为可以用谷歌的地理编码 API 来实现,但是我在最后期限内要尽快做出一些像样的东西,所以我只是将许可数据中的邮政编码转换成经纬度坐标,而不是街道名称描述。不是最准确的地理信息,但绝对是最方便的。自然语言处理将不得不等待。

我写了一个 python 脚本,从这些纽约市的许可证记录中提取,对照人口普查局的所有邮政编码目录交叉引用每个许可证提供的邮政编码,并将其与相应的纬度/经度配对。

然后,该脚本写出一个. csv 文件,其中包含按日期排列的所有许可坐标。这个文件可以上传到 kepler.gl,以查看有趣的热图或 hex-bin 可视化的高调纽约电影制作活动!下面的例子:

NYC Film Permits: Heatmap-Timelapsed via Kepler.gl

如果你想在自己的网络浏览器中玩可视化,请访问我的 GitHub repo sitory:你所要做的就是下载 repo 中的“nyc _ film _ permits.json ”,并将其上传到开普勒演示网站。

[## boscacci/可视化-纽约市-电影-许可-数据

对 kepler.gl 的修补通过创建一个帐户来促进 boscacci/Visualizing-NYC-Film-Permit-Data 的发展…

github.com](https://github.com/boscacci/Visualizing-NYC-Film-Permit-Data)

我希望这是一种鼓励,任何有适当动机的呆子都可以相对快速地使用一些预建的数据可视化工具:您不必学习像 plotly 或 matplotlib 这样的图形库来获得一个可爱的十六进制热图延时,您可以将它作为 react 对象嵌入到任何网页上。我们真的站在巨人的肩膀上。

用 R 可视化职业星际争霸

原文:https://towardsdatascience.com/visualizing-professional-starcraft-with-r-598b5e7a82ac?source=collection_archive---------5-----------------------

Snapshot of a Protoss vs Terran Match

自从我开始为《星际争霸:育雏战争》进行数据挖掘专业回放以来,已经过去了将近十年。在最近试用了 R 中的新动画包后,我想重新访问这个数据集,看看我是否可以用 gganimate 和 tweenr 包使用其中一些回放制作一个有趣的可视化效果。结果就是下面的视频:

Terran vs Zerg

这篇博文讲述了我创作这个视频的 R 脚本。用于生成该可视化的所有数据和代码都可以在 Github 上获得。我通过观看星际争霸中的回放并使用 BWAPI 每 5 秒输出一次游戏状态的快照来生成数据集。这里也可以使用可用的数据集。这个过程的结果是,我最终得到了以下格式的 CSV 文件:

**frame,pID,unitID,x,y** 0,0,12,3792,864
0,0,19,3744,858
0,0,30,3704,864
0,0,34,3808,834
0,0,64,3768,864

该文件指定了游戏帧或刻度计数、控制该单元的玩家的 ID、用于跟踪该单元的游戏内标识符以及该单元的位置。虽然包含单位类型和状态变量(如健康)会很有用,但这些数据为可视化军队的移动提供了一个起点。数据集包括建筑物和移动单位,但不包括中立单位和结构。

**# libraries** library(ggplot2)
library(gganimate)
library(ggforce)
library(tweenr)
library(dplyr)

如前所述,我使用 gganimate 和 tweenr 库来创建可视化。gganimate 对于在 R 中创建动画图很有用,而 tweenr 提供了在动画中的不同捕捉点之间进行插值的方法。ggplot2 用于创建实际绘图,ggforce 用于设计绘图样式,dplyr 用于设置数据。

**# video settings** fps <- 24
nframes <- 5000

我为视频回放定义了两个参数。第一个 fps 是输出视频的帧速率,第二个 nframes 是视频的总长度。视频的长度将为n 帧/fps 秒。

**# load the replay data** df <- read.csv("PvT.csv") **# lag the x and y coordinates to plot lines of movement** 
df <-  df %>%  group_by(unitID) %>%  
    mutate(x1 = dplyr::lag(x, n = 1, default = NA),         
           x2 = dplyr::lag(x, n = 2, default = NA), 
           y1 = dplyr::lag(y, n = 1, default = NA),
           y2 = dplyr::lag(y, n = 2, default = NA))

下一步是加载和转换数据。加载的数据帧包括每个单位在特定游戏时间的 x 和 y 位置,但我也想延迟这些值,以便在坐标之间画线。我使用 dplyr 和 mutate 来使 x 和 y 位置分别滞后 5 秒和 10 秒。

**# set up graphics** df$colour <- ifelse(df$pID == 0, 'RED', 'GREEN')
df$time <- df$frame / fps
df$ease = 'linear'
df$size = 5
df$alpha = 1 **# Use tweenr** dt <- tween_elements(df, 'time', 'unitID', 'ease', nframes=nframes)

然后,我为绘图设置附加参数,包括单位的颜色和大小,以及用于动画的插值类型。最后一步使用 tweenr 构建一个数据帧,在输入数据帧的不同状态之间进行插值。

**# animate with gganimate** p <- ggplot(data = dt) +  
    geom_point(aes(x=0, y=0, size=10, alpha=0, frame = .frame)) +   
    geom_segment(aes(x=x1, y=y1, xend=x2, yend=y2, size=1, 
                 alpha=0.5, frame = .frame, color = colour)) +   
    geom_segment(aes(x=x, y=y, xend=x1, yend=y1, size=1, alpha=1,
                 frame = .frame, color = colour)) +   
    geom_point(aes(x=x, y=y, size=size, alpha=alpha, frame = .frame,
                 color = colour)) +   
    scale_size(guide = 'none') +   
    scale_colour_identity() +   
    scale_alpha(range = c(0, 1), guide = 'none') +     
    ggforce::theme_no_axes()

下一步是创建数据图,包括线和点。第一个几何点用于缩放点的大小,第二个几何点用于绘制单位。两个 geom_segment 调用用于在单元的当前和过去位置之间画线。旧的轨迹比新的轨迹颜色浅( alpha = 0.5 )。代码块的其余部分修改了绘图的样式。

**# output the video** animation::ani.options(interval = 1/fps)
gganimate(p, "output.mp4", ani.width=640, ani.height=640 
    ,title_frame = FALSE)

最后一步是创建动画情节的视频。我将视频大小设置为 640×640 像素,并禁用了视频顶部的帧计数器。也可以输出 gif 和网页。该脚本的结果显示在下面的示例视频中。渲染可能需要相当长的时间。

Protoss vs Terran

视频显示了神族(红色)对人族(绿色)游戏中的部队移动。视频的开头显示了侦察阶段和最初的冲突。稍后,你可以在地图上看到人族玩家放置蜘蛛雷的位置。在神族玩家拿出一个扩张点并获得地图中间的控制权后,比赛结束。

本·韦伯是 Zynga 的首席数据科学家。我们正在招聘!

Zerg vs Protoss

用熊猫和三个 js 可视化衰退

原文:https://towardsdatascience.com/visualizing-recessions-with-pandas-and-three-js-2df3f514dc44?source=collection_archive---------17-----------------------

Just a gif. Scroll down to the CodePen for the interactive version.

美国经济衰退的严重程度如何比较?严重程度如何衡量?这些是我在与 Christopher Brooks 一起为最后一个项目Python 数据科学导论识别经济衰退后考虑的问题。下面这篇文章概述了在分析 pandas 中的数据并使用 three.js 将其可视化的过程中获得的一些关键经验。我将重点介绍:

  • 使用向量计算减少不透明 for 循环
  • 使用特征缩放更好地理解数据点之间的差异,否则很难区分
  • 三维可视化数据的挑战和一些未解决的问题

但是在你不得不读太多之前,这里有一个可视化的东西,这样你就可以自己看了。四处拖动以更改视角。点击球体来显示它们的工具提示。它们也是可拖动的,因为图表很容易变得混乱。

简单的矢量

第一步是识别 1947 年至 2016 年间的衰退。很自然地,我对自己说,“让我们从一个 for 循环开始,看看我能走多远。”但是事情失去了控制。很快。

既然发现衰退取决于季度差异,我想为什么不直接研究差异呢?这就是矢量派上用场的地方。首先,我从一个向量开始,从一个季度的 GDP 开始,然后加上接下来几个季度的 GDP。这是 1981 年第三季度的情况:

接下来,我从第一个向量中创建了一个 GDP 季度间差异的向量:

现在我们开始工作了!迭代差异变得更加直接,这在处理不仅仅是两个季度下降然后两个季度上升的衰退时特别有用。如上图所示,始于 1981 年第三季度的衰退就是一个过山车的例子。

特征缩放

用 three.js 在三维空间中可视化日期似乎很有希望,但是数据一加载进来,我就遇到了阻碍。每个维度都有不同范围的值,这使得进行比较变得困难。用一个公认的粗略类比来说,我如何才能举起一个放大镜来观察每一个维度,照亮交互的微观世界,同时又不遮挡其他所需放大镜的视野?

对于每个特性,我需要在一个更容易理解的范围内扩展值。下面是一个例子:

衡量衰退严重程度的一个标准是从开始到结束的跌幅。由于我对原始值本身不感兴趣,而是对每个值在集合中的位置更感兴趣,所以我将它们扩展到 0 到 100 的范围内。幸运的是, scikit-learn 有一个工具可以做到这一点。这最终造成了双重打击,因为它既有助于分析,又因为相同的缩放范围(0 到 100)可以用于多个维度,提供了一种将数据输入 three.js 的一致方法。

然而,它回避了以下问题:像这样扩展数据有帮助吗?一方面,我失去了背景。我不知道原始值是多少,也不知道它们在什么范围内。上表中的原始数据具有跨越 4%范围的值,这与 40%或 400%大不相同。因此,这种方法肯定会被用来混淆大局,扭曲特定关系的重要性。另一方面,我确实发现放大并突出各种比较很有帮助。回想起来,上面的可视化可能更适合与每个指标更直观的显示一起使用。但是,活到老,学到老。

多个优先级,一个用户界面

切换到 UI,我发现使用三维工具提供了一些竞争优先权,特别是工具提示。以下是我试图实现的目标:

  • 摇动相机,从不同角度查看数据点和其他图表元素。
  • 确定每个数据点的年份和季度。
  • 将工具提示和它的数据点连接起来,这样你的眼睛就不用看页面上其他地方的断开列表了。
  • 保持 UI 整洁,同时提供有用的见解。
  • 使用颜色来配对元素并传达优先级。

我创建的可视化只需要容纳 10 个数据点,我觉得如果所有 10 个工具提示都打开,我的方法几乎不起作用。那么,如果图表包含数百个数据点,该怎么办呢?怎么可能看出每一张是哪一年的?我没有这些问题的答案,但是我猜想没有一个形象化的东西可以统治所有的问题。即使只需要 10 个数据点,也需要从多个角度来了解,这可能需要各种图表来完成工作。

结论

感谢您的阅读,如果您想亲自查看代码或了解我的方法的更多细节,请随意查看回购。

可视化数据科学中的成功——获得梦想中的工作

原文:https://towardsdatascience.com/visualizing-success-landing-that-dream-job-fac7e8f65088?source=collection_archive---------4-----------------------

Free Press Journal

你如何才能在数据科学领域找到理想的工作?由于这些都是引人注目的高薪机会,大多数公司不会依赖简历机器人来筛选候选人。LinkedIn Group“管理分析”目前正在研究数据科学领域成功就业的关键成功因素。

虽然组织经常在各种管理档案中寻找数据科学技能,但吸引招聘人员的目光已经变得越来越困难。最近的估计表明,目前大约有 15000 名合格的数据科学家在工作,200 000 名声称有资格证书,以及近 100 万名“想要成为”的人。正如营销大师塞思·戈丁可能会提出的,简历的目标不是在人群中脱颖而出,而是在你未来的雇主心中留下深刻印象。[2]

作为就业候选人,我们建议在分析招聘流程时应用数据科学思维。促使每个特定组织考虑雇用数据科学家的问题的本质是什么?什么样的数据线索可用于确定他们的市场和/或组织挑战?在利益相关者看来,他们认为应对挑战的最佳方法是什么?最后,你如何展示数据(你的个人资料、你的经历和你的动机)来引发行动号召——伸出手来雇佣你?

根据描述性、预测性和规范性分析的愿景,编写一个商业故事,其中你的贡献将被视为一个关键的成功因素。确定雇主所面临挑战的性质——认为缺乏人才、流程效率低下或技术使用不当。探究组织和市场的历史是如何让这个问题持续存在的。请记住,招聘人员或项目经理是这个故事的主角,描述一下你将如何解决这个难题。通过你的推荐人和你的资历提供证据,证明“幸福的结局”始于让你加入公司。

如果清楚地讲述你的故事很重要,那么关注你的听众听到了什么是至关重要的。你的招聘人员会将你的经历与成百上千的其他应聘者的经历进行比较。前景理论的原则可以帮助你预测框架如何影响你提出的数据和论点。锚定可以被用于你的优势,发挥你的优势,忽视你的弱点。模糊偏见可以用来降低与你未来就业相关的风险、不确定性和/或模糊性。

在你的简历和面试中运用视觉叙事的原则,将你的个人信息转化为行动号召——一起工作。埃德加·戴尔围绕经验锥所做的工作表明,观众对他们所看到的东西的记忆要比他们所读到的东西多得多[3]。他们对你展示的数字不太敏感,而更关心你如何帮助他们将可分享的经验形象化。相似性、接近性、连续性和收尾的格式塔原则在这里和在任何商业陈述中一样有效,为什么不应用它们来帮助你的招聘人员理解你试图讲述的故事呢?

最后,记住你的简历、求职信和每一次面试都只是围绕“自我、我们和现在”的一个更大的集体故事中的几个章节。[4] Y 我们的故事早在你想到申请他们组织的职位之前就开始了,他们的故事不仅仅是雇佣一名数据科学家。社交媒体和专业网络的使用有助于开发为什么这两个故事合在一起有意义的元数据。数据挖掘可以帮助你发现隐藏在背后的机构故事和对话。招聘过程的每一步都应该加强而不是削弱这些对话。最后,你的故事必须既有数据驱动,又在你未来雇主试图讲述的更大故事中有意义。

领英集团 管理层分析 讨论的主要焦点之一是数据科学领域就业的关键成功因素。该小组每周都会调查就业市场和特定的组织机会。集团经理定期发布与人力资源专家和数据科学从业者的访谈,以获得见解和讨论。在接下来的几个月里,该小组将分享有效招聘策略的例子,并在设计可视化简历和编写面试脚本方面提供帮助。加入讨论,实践数据科学所宣扬的内容。

商业分析实践是商业分析研究所的核心和灵魂。在我们位于巴约纳的暑期学校,以及我们在欧洲的大师班,我们专注于数字经济、数据驱动的决策、机器学习和视觉通信,我们可以帮助您将分析应用于您和您的组织。

Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com 商业分析研究所的负责人。他的 LinkedIn 个人资料可以在 www.linkedin.com/in/leeschlenker.查看你可以在 https://twitter.com/DSign4Analytics的 Twitter 上关注我们

[1] Quora,如今有多少数据科学家(以任何名字命名)?,2015 年 10 月

【2】戈丁,赛斯,与众不同还是不同凡响?, Typepad,2013 年 4 月

[3] Maheshwari,V . K .埃德加·戴尔的经验锥,2016 年 10 月

[4]甘兹,M. 讲述你的公共故事,

三维可视化印度铁路

原文:https://towardsdatascience.com/visualizing-the-indian-railways-in-3d-22738404fea4?source=collection_archive---------4-----------------------

本文描述了作为 IDC 交互式数据可视化课程一部分的地理可视化项目的概念、流程、见解和扩展。

最后,我有了这个三维可视化。

概念

这个概念是将印度铁路网上每个车站始发的列车形象化。这将允许用户比较数字,甚至根据他们的位置得出结论。目标是能够使 viz 有洞察力,并且必须至少遵循威廉·克利夫兰的三个视觉操作,即检测、组装和估计。这些都在课程中讨论过。你也可以看看这个由约翰·劳瑟做的展示。他涵盖了关于数据感知的非常有趣的方面。在他的演讲的第 115 页提到了克利夫兰的模型。我想,如果我能在车站的位置制作 3d 条形图,那么高度将代表源列车的数量。

简而言之,可视化参数如下(基于 Isabel Meirelles 在 Design for information 中的描述标签):

  • 国家印度
  • 媒介在线互动应用
  • 运输
  • 任务提供从车站出发的列车的比较
  • 结构代表始发列车数量的车站位置的 3D 突出

我还想,如果我们可以制作一个“粗略的”等高线地图,对到达一个地方的难易程度进行“编码”。这将基于从通过的列车数量、停止时间和特定车站一天中的时间得出的指数。等高线将被绘制成倒置的,这样,如果一个地方有较少的火车经过,它的高度将会更高,因为它很难到达。我觉得这也会给轮廓带来一些物理属性。想象一下,有人坐在地上,说 A 很难到达一个车站,因为只有一列火车经过,而说 B 却很容易到达,因为有 10 列火车经过。因此,“A”将显示得比“B”高。一个冰可以在虚拟现实中探索它。在我们拥有的短时间内,我无法找到实现这一点的工具。

过程

该流程包括:

  • 来源和清理数据
  • 获得有用的数据
  • 将数据转换成 geojson
  • 地图上的展示

选择的武器是:R、Python、Mapbox 和 Google Sheets

采购和清洁数据数据由data.gov.in提供。使用的格式是 csv。我用了 R 代码的这个来源作为参考。

导出有用数据

首先,我使用 R Studio 读取 R 中的数据。

library(readr)
timetable <- read_csv("C:/Users/my pc/Downloads/isl_wise_train_detail_03082015_v1.csv")

接下来,我制作了火车的子集。因此,我可以捕捉已经到达目的地的火车。

timetable.srs.dest <- subset(timetable, timetable$`station Code` == timetable$`Destination station Code`)

利用dplyr库,我对数据进行了分组和汇总。然后我把文件写成 CSV 格式。

library(dplyr)
traingp<-group_by(timetable.srs.dest,`source Station Name`)
trainsfromStation<-summarise(traingp,count=n())
trainsfromStation
arrange(trainsfromStation,desc(count))
write.csv(trainsfromStation,"NumbOfTrainsoriginating.csv")

我还做了一些其他的探索性分析,比如每站经过的列车。

trainflux<-group_by(timetable,`Station Name`)
trainflux
trainfluxCount<-summarise(trainflux,count=n())
trainfluxCount
arrange(trainfluxCount,desc(count))
arrange(trainfluxCount,count)
write.csv(trainfluxCount,"trainsstoppingperstation.csv")

停止时间和每个站点的平均停止时间。这可以让你了解一个电视台有多忙。由于我的 n00by R 技能,这并不像看起来那么简单。首先,使用Distance !=0移除所有源站和目的站。由于提到时间的方式很有趣,我不得不去掉所有时间向量中的单引号。为此,我使用了gsub。然后,我必须将字符转换成 POSIXlt 日期格式。这将启用使用difftime的时间计算。使用 difftime,我为 HaltTime 创建了一个新的矢量,分辨率为分钟。有人告诉我,这些步骤只需在 excel 中点击几下。

trainNoSource=subset(timetable,dataset$Distance!=0)
trainNoSource$`Arrival time`<- gsub("'",'',trainNoSource$`Arrival time`)
trainNoSource$`Departure time`<- gsub("'",'',trainNoSource$`Departure time`)
trainNoSource$`Arrival time`<-strptime(trainNoSource$`Arrival time`,format = ("%H:%M:%S"))
trainNoSource$`Departure time`<-strptime(trainNoSource$`Departure time`,format = ("%H:%M:%S"))
trainNoSource$`Halt Time`<-as.difftime(trainNoSource$`Departure time`-trainNoSource$`Arrival time`,format = "%H:%M:%S",units="mins")

接下来,我删除了停车时间小于 0 的列车,并按照车站对它们进行分组。我移除了到达和离开的向量。然后我研究了平均停顿时间。

trainNoSource=subset(trainNoSource,trainNoSource$`Halt Time`>=0)
trainNoSource$`Arrival time`<-NULL
trainNoSource$`Departure time`<-NULL
trainNoSource_grpstation<-group_by(trainNoSource,`Station Name`)
trainNoSource_haltTimes<-summarise(trainNoSource_grpstation,count=n(),totalhalt=sum(trainNoSource_grpstation$`Halt Time`))
arrange(trainNoSource_haltTimes,desc(count))
trainNoSource_haltTimes<-summarise(trainNoSource_grpstation,count=n(),totalhalt=sum(`Halt Time`))
arrange(trainNoSource_haltTimes,desc(count))
arrange(trainNoSource_haltTimes,desc(totalhalt))
trainNoSource_haltTimes$`avgstop`<-trainNoSource_haltTimes$totalhalt/trainNoSource_haltTimes$'count'
arrange(trainNoSource_haltTimes,desc(avgstop))
write.csv(trainNoSource_haltTimes,"avgHaltTimeperstation.csv")

将数据转换成 geojson

csv 文件被上传到 google sheets。我使用了awesome tablesGoogle sheets 插件将站点代码转换成纬度和经度值。

不幸的是,使用 mapbox 进行挤出的文档非常少。仅仅是一个例子,它花了我相当长的时间去工作。从例子 geojson 来看,似乎需要一个heightbase heightcolor属性。我不想太复杂,所以我选择了单一颜色。我构建了如下的 google sheet 文件。

然后,我使用 geojson.io 将 csv 转换成 geojson 文件。也可以使用地图框工作室进行同样的操作。

这似乎足够了,但是

我一点也不知道

“拉伸”属性只能应用于多边形。如何将点转换成多边形?这可能不是在凌晨 3:45 问的最相关的问题。但不幸的是,它是!Python前来救援。感谢一些以前的作品。

当“我写了一个剧本”变得和“我洗了个澡”一样平常的时候,我写了一个剧本。

该脚本将简单地把这些点转换成一个固定大小的正方形。geoJSON 规格表很有帮助。这个过程是以这个点作为正方形的中心,然后以循环的方式计算角点。

在地图上展示

到早上 6 点,我已经在 mapbox studio 中完成了地图上的所有多边形。为了突出高度,我将车次乘以 7000,因为它似乎对视觉检测有很大影响,有助于估计。我后来使用了地图框的例子,并修改了它来添加工具提示。

结果就在这里主持了。项目在此回购。如果我错了,请随时纠正我。

洞察力

我们在课堂讨论中获得的一些见解是:

  • 瓦多拉只有一趟始发列车,但有 298 趟列车经过

  • 有从达卡始发的国际列车

  • 霍拉启动的火车最多

  • 随着越来越多的列车从边界始发,列车从外到内移动。

扩展ˌ扩张

  • 使用颜色通道采用冗余,以允许用户知道列车始发的范围。一种颜色代表 1–10、10–20 等。
  • 再加一层乘火车路过
  • 看看是否能发现洞察力,如果火车能和人口一起被可视化。

希望这有所帮助!

干杯,

Rohit

最初发表于 http://rohitg.in/2017/09/10/DataViz/和并使用http://markdowntomedium.com转换为媒介

用 Python 可视化人群的疯狂

原文:https://towardsdatascience.com/visualizing-the-madness-of-crowds-with-python-1a81aaa22784?source=collection_archive---------17-----------------------

Which would you have invested in?

我们将数据科学中的事物可视化的根本原因不仅仅是为了展示漂亮的图片,而是为了表达不容易理解的想法。

我脑海中不断闪现的一个想法(无意双关)是资产价格泡沫:当股票、黄金或房地产等资产的价格以前所未有的幅度脱离其基本面驱动因素时。

值得注意的是资产泡沫不一定排除非金融工具。大规模金融泡沫的最早例子之一发生在郁金香市场:

  • 形象归功于洛特·范·多恩

Readers who may be confused by the idea of a Tulip Bubble may want to check this out

在本帖中,我们将通过一些典型的金融时间序列来了解资产泡沫的一些显著特征。

除了用于数据分析的标准库之外,我们还将使用一个新的库。所以,事不宜迟,让我们启动 Jupyter 笔记本:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# New library
import pandas_datareader.data as webimport datetime

为了分析金融资产,业内的标准做法是将投资业绩与一些基准进行比较,如标准普尔 500 指数,该指数由在纽约证券交易所和纳斯达克上市的 500 家美国大型市值公司组成。我们的行动计划将是比较两种资产(比特币和 Helios and Matheson 股票)与标准普尔 500 的已知泡沫历史。

在这里,我们将为标准普尔 500 创建一个熊猫数据框架,以及比特币(加密货币)和 Helios and Matheson(股票代码:HMNY)的数据集,Helios and Matheson 是支持 MoviePass 的上市公司。我们数据框架的主要利益变量是‘调整收盘’,这是针对股票分割等事件调整的常规价格,因此更准确地反映了现实。

我们的数据框架:

  1. 标准普尔 500 指数
  2. 比特币
  3. 电影通行证库存

我们还要确保我们考察的所有变量都在同一个时间框架内,在这个例子中是从 2013 年到 2018 年。因此,我们所有的数据框架将在该时间框架内作为其各自的指数,每日频率作为频率。

所有数据帧将具有 1496 行和 6 列的形状。

我们要做的第一件事是检查表格格式的数据,看看我们是否可以收集一些见解:

通过查看平均值、中值和标准差,我们知道:

  1. 标准普尔 500 看起来很正常,有相似的平均值和中值,标准差大约是平均值的 17%。
  2. 比特币的平均值约为中值的 4 倍,这表明它向右倾斜,而标准差要大得多
  3. 与比特币类似,MoviePass 股票的均值大于中值,标准差几乎与均值一样大。

我们可以通过对调整后的收盘价做一些简单的直方图来证实我们的直觉:

直方图证实了比特币和 MoviePass 相对于标准普尔 500 的某种正态分布具有偏斜分布。

但是无论是直方图还是表格数据摘要都不能告诉我们是否存在泡沫。我们可能会一行一行地检查所有的数据集,但是那将会是枯燥、乏味和反 pythonic 的。

让我们做更多的可视化:

在这里,我们第一次真正直观地确认了资产泡沫,将比特币的价格与标准普尔 500 价格进行了比较:经典的曲棍球棒模式,超高速上涨,然后以同样的速度下跌,如果不是更快的话。

下图显示了每日百分比变化。请注意比特币在 2014 年 2 月 14 日经历了 339%的价格上涨。

接下来我们来看看 MoviePass 股票:

我们再次看到了相同的曲棍球棒模式,但这一次 MoviePass 股票显示了至少两种不同的泡沫状价格行为,在 2016 年 6 月 7 日,价格绝对惊人地上涨了 900%。

虽然表格数据确实给了我们数据集的简明摘要,但只有通过可视化数据,我们才能全面了解价格动态变化中的戏剧性事件。

通常,为了向大众传达一个观点,一个高影响力的视觉效果比一千篇只有少数人能理解的学术论文更有用。

让我们来看看资产的波动性:

上面的图显示了价格的变化,并给我们提供了价格波动的有力线索。用相同的 y 轴缩放,它们表明比特币和 MoviePass 股票可能是普通投资者可能希望远离的高于平均水平的风险资产。

预测?也许

关于可视化的最后一点是预测。在查看数据集时,我脑海中萦绕的一个问题是,有人能通过可视化工具仅查看过去的数据来预测资产价格泡沫吗?

做到这一点的一个方法,或者至少,得到一个关于时间序列可预测性的线索,是使用均值回复的概念。

让我们再来看看《标准普尔 500》的情节,与《比特币》和《电影通行证》的情节相比。

我们实际上将使用雅虎愿意给我们的所有数据,并扩展我们当前的数据框架。同时,我们将为我们的每项资产创建一个新列,该列将记录从一个时期到下一个时期的【Adj Close】价格特征的变化。

新列将被称为‘调整收盘差异’,根据定义,它是前移一个周期的‘调整收盘’与当前的‘调整收盘’之间的差异,也称为一个系列的第一差异

尽管比特币和 MoviePass 的价格历史并不像标准普尔 500 那样久远,但视觉效果仍然揭示了重要的见解。

首先,标准普尔 500 的时间序列图显示了长期的上升趋势。

第二,如果我们比较标准普尔 500 从时间段(1980-1995)到时间段(1996-2018)的“Adj Close”价格的平均值,在数量上有很大的差异。

这两个观察告诉我们的是,标准普尔 500 的时间序列数据属于一类称为非平稳数据的时间序列数据。

非平稳数据的两个定义特征是:

  1. 非常数意味着跨越不同的时间段
  2. 非常数意味着即使取不同时期均值的差值,均值的变化也是非常的

如果平均值的变化是恒定的(长时间围绕同一点上下波动),则由于不同时间段的不同平均值而不稳定的时间序列数据可以变为稳定的。

为什么这很重要?

因为与非平稳时间序列相反,平稳时间序列会回归均值,因此可以用统计方法进行分析,例如预测。

如果你检查 2011 年至 2017 年比特币的调整后收盘价,它类似于众所周知的随机漫步,没有明确的趋势,直到你到达 2017 年至 2018 年期间。

同样的情况也适用于 2003 年至 2018 年左右 MoviePass 股票的调整后收盘价。

如上所述,判断一个时间序列是否可以平稳,从而均值回复的一种方法是,像我们在这里做的那样,查看价格的一阶差

如上图所示,标准普尔 500 指数的均值明显不是平稳的,因为即使是首差也有增加的趋势。

此外,似乎有一些强有力的证据表明,比特币和 MoviePass 股票都是稳定的,因此意味着它们的大部分价格历史都在回归。

因此,对于一般投资者来说,投资于具有以下特征的资产可能并不明智:

  1. 长期均值回复特性和
  2. 价格以前所未见的幅度上涨(曲棍球棒模式),没有充分的理由
  3. 易挥发的

归根结底,视觉的最终力量不在于它们提供了确凿的证据,而在于它们为我们的研究提供了必要的指导,并为普通人提供了易于理解的信息。

你可以在这里找到完整的代码和数据。

想象穿过 IIT 孟买(主门)的行人流量

原文:https://towardsdatascience.com/visualizing-the-pedestrian-flow-through-the-iit-bombay-main-gate-4104cb904a82?source=collection_archive---------5-----------------------

2017 年 8 月 30 日进行了一项调查,以研究通过 IIT 孟买大门安检的人流量。IDC 的两名学生正在记录数据。一个在入口侧,另一个在出口侧,在电子表格上实时输入行人数据。

(Left: Sukant Maharana — Logging the pedestrian entries) (Right : Jonathan Mathew —Logging the pedestrian exits)

Left: Logging, clustering, and counting each clusters of the pedestrian entries Right : Same for the pedestrian exits

记录的行人数据参数有—
时间、类别(学生/职员/工人)、性别,如果他们成群结队而来,那么一组有多少人。我们把总的统计数据制成表格。
要计算的变量有:

总出入境人数
总学生出入境人数
总职工出入境人数
总职工出入境人数
总男性出入境人数
总女性出入境人数
总男学生出入境人数
总女学生出入境人数
总男职工出入境人数
总女职工出入境人数
总男职工出入境人数
总女职工出入境人数

在任何给定时间,这相当于 12x2=24 行数据

这是 2017 年 8 月 30 日下午 3:30 到 7:30 录的 4 个小时。然后他们被分成 15 分钟的数据组。因此,创建了 4x4=16 个数据仓/簇/列来可视化。这样我们就得到了一个图表,总共有 24 条线在 15 分钟的 X 方向上以 16 个间隔移动,结果绘制了 24x16=384 个点。

点击下面的链接,查看上图的互动版

[## [折线图]基本

编辑描述

www.arkadesignstudio.in](http://www.arkadesignstudio.in/iitb data/main/main.html)

关于图表

该图表在 X 轴上绘制了 15 分钟的时间间隔,在 Y 轴上绘制了进出的人数。有一系列复选框负责显示或隐藏每一行。我们可以控制哪个看哪个不看。

绘图和分析—所有 24 行

在这段时间里,大部分住在校外的人回家,教职员工外出购物和进行日常必要的活动,住在校外的学生回家,而一些住校生也去校外与朋友共度夜晚。

绘图和分析—总出入量

棕色线显示总出口,而天蓝色线显示总入口。这包括所有进出大门的行人、学生、职员和工人。我们可以看到,在超过 4 小时的时间内(从下午 3:30 到晚上 7:30),行人的数量总体上有所增加。出口的数量远远多于入口。我们发现,在下午 6 点和 7 点的前一刻钟左右,入口和出口都出现了峰值。

我们可以看到,下午 4:30-4:45 是教职员工和学生最繁忙的工作时间,他们需要收拾一天的工作。人们大约在 4:45-5:00 开始离开。

绘图和分析——学生、职员和工人的总出口

黄线显示员工总出口,而棕色线显示学生总出口,绿线显示工人总出口。在学生和员工之间可以看到良好的相关性,因为他们都有或多或少相同的时间表,但在工人中却不同,因为他们有突然的时间表。这些曲线仍然遵循比例增减的模式。

绘图与分析—全体员工出入

黄线显示五线谱出口,而紫线显示五线谱入口。
进出人员数量有较好的增减比例。这是因为大量的住宿员工外出当地购买夜宵,并在 15-30 分钟内返回。

请随时回复这篇博文或直接给我回复关于这个研究项目的建议或关于任何有趣项目信息

读者好
我是 Arka Majhi,IIT 孟买 IDC 设计学科的硕士研究生。作为学术工作的一部分,我做了一个关于数据可视化的练习。

同时查看我的作品集和资源库

设计作品集:https://www.behance.net/arkamajhi4d63

建筑作品集【http://spadelhi.org/arkamajhi/】:

工作室网站:http://arkadesignstudio.in/

通过喜欢和张贴你对我的项目的建设性意见来支持我。提前感谢。将等待您的回复。

想象叙利亚-约旦边境的难民危机

原文:https://towardsdatascience.com/visualizing-the-refugee-crisis-at-the-syrian-jordanian-border-70526b60fb12?source=collection_archive---------12-----------------------

我在 2016 年到 2018 年间绘制了 Rukban 难民营的地图。继续阅读,了解更多。

Rukban 是叙利亚和约旦边境的无人区。2014 年,该地区成为逃离叙利亚内战的难民的居住地。

联合国卫星项目自 2014 年底以来一直在记录鲁克班地区的收容所数量。现有数据涵盖了过去两年,最近一次统计是在上个月发布的。

本文探讨了 2016 年 5 月至 2018 年 6 月期间联合国卫星项目关于 Rukban 难民营的数据。

我在图 1 中绘制了庇护所数量随时间的变化。截至 2018 年 6 月,共有 11,702 个庇护所。自 2016 年 12 月以来,收容所的数量一直在增加。

Figure 1

在图 2 中,我绘制了 2016 年 5 月至 2018 年 6 月之间十二个不同时间点的避难所密度。

Figure 2

最后,我很好奇从太空看 Rukban 避难所是什么样子。因此,我使用了大约在联合国卫星项目评估完成时拍摄的公开卫星图像。图像如图 3 所示。遮蔽物是图像右下四分之一处最明显的暗像素和亮像素。

Figure 3

关于这篇文章

  • 阅读 了解我在这篇文章中使用的三个数据源的更多细节。
  • 要重现图 2 & 3 使用 这段源代码 (Python)。
  • 在图 3 中,我使用了 Sentinel-2 l1c 级产品。您可以使用经过大气校正的 l2a 产品来获得更加一致的图像。
  • 如果你有任何问题,请在下面的评论区留言或发送给我:[anajjar@protonmail.com](mailto: anajjar@protonmail.com)

可视化翻译质量数据

原文:https://towardsdatascience.com/visualizing-translation-quality-data-a2be30788bfe?source=collection_archive---------3-----------------------

没有知识不是力量

毫无疑问,我们正生活在信息时代最激动人心的日子里。电脑越来越快,智能手机无处不在。惊人的多样化来源每天都会产生大量的数据。为语言服务购买者和提供者收集数据肯定比以往任何时候都容易,但看起来本地化行业并没有做很多工作来利用所有这些信息。总的来说,当然,除了少数例外,这个行业似乎错过了这一点,没有充分利用,或者至少试图理解,所有这些每天产生的精彩信息。

也许问题在于,太多的信息可能很难理解,甚至会让人感到不知所措。准确地说,这就是数据可视化的优势。

在这一系列文章中,我将介绍三种不同的工具,您可以使用它们来可视化您的翻译质量数据:Tableau、TAUS DQF 和 Excel。本文是第 1 部分,将只关注一般信息和表格。

数据可视化的案例

也许数据可视化最重要的一点是,它允许你以一种非常自然的方式吸收信息。在表格中很难理解的大量信息,在一个漂亮的图表中呈现和总结时突然变得有意义。模式和趋势可能变得更容易发现,有时甚至是显而易见的。相关性可能会突然出现,给你急需的业务或战略优势,让你有效地根据你的信息采取行动。

这如何应用于翻译/本地化实践?嗯,有很多信息可以测量和分析,例如:

  • 生产力,
  • 供应商表现,
  • MT 系统性能,
  • 工具性能,
  • 财务状况,
  • 流程效率等…

在易贝,我们使用数据可视化来跟踪供应商的表现、不同语言组合的机器翻译输出质量、机器翻译输出中发现的问题类型的详细信息、我们在供应商的交付物中发现的问题类型等等。

钥匙

让我们花一分钟的时间来检查使可视化有效的必要条件。你会注意到,我绝不是这方面的专家,但根据我的经验和研究,以下是需要考虑的要点:

首先要明确。你想用图表找出什么?你想引起人们对什么的注意?你在说什么呀传递明确的信息是当务之急。

要有选择性:不要仅仅因为。仔细计划你想要包含的数据点,评估它们是否有助于你的信息的主要目的。这可能很难做到,尤其是当你有太多信息的时候——你可能会想添加一些没有任何价值的信息。

记住你的听众,保持相关性。塑造你的信息来回答他们可能有的问题。丢弃任何他们认为不必要的信息。项目经理可能对财务和按时交付的百分比感兴趣,工程师可能对流程效率感兴趣,而语言经理可能关注质量和语言表现。

思考一下呈现信息的最佳方式,以及如何突出最重要的信息。包含趋势、突出模式并使有意义的相关性显而易见通常是个好主意。

(舞台上由人扮的)静态画面

Tableau 可能是最流行的可视化程序之一。这个概念很简单:Tableau 可以从一个简单的 Excel 文件或数据库(以及其他几个选项)中读取数据,解析它,并将信息转化为维度和度量。这是最棒的部分:你可以简单地将这些维度和度量拖放到列和行上,Tableau 会为你生成图表(或者他们喜欢称之为视图)。自动地。毫不费力。

它还提供了一系列令人惊叹的图表选项和定制选项,当你开始使用该软件时,这些选项可能会让人不知所措,但一旦你掌握了其中的窍门,就完全有意义了。

让我们来看一些例子:*

  • 这张图表以一种非常简单的方式展示了我们目前正在处理的两种内容类型的供应商表现,即标题和描述。很明显,供应商 2 可能是描述的最佳选择,而供应商 5 在标题方面表现不佳。

  • 现在,假设我们想要分析不同语言的后期编辑是如何工作的,同样是基于内容类型。我们可以看一下评审人员为他们每个人发现了多少错误。

这里很明显,德国的后期编辑在描述方面做得很好,但他们在标题方面很吃力,因为蓝色列的位置有很大的差异。我们还可以看到,西班牙语和法语似乎高于误差平均值。意大利语、葡萄牙语和俄语从一种内容类型到另一种内容类型没有显示出重大变化。

c)现在,我们想更深入地了解审核人员发现的错误,为此,我们将按语言查看不同类型的错误。看这张图表,似乎最大的问题是误译。这是一个很好的提示,可以尝试找出为什么会发生这种情况:来源太复杂了吗?后期编辑做的研究不够吗?我们是否提供了正确的参考资料?另一方面,数据似乎表明术语并不是一个大问题。我们可以推断我们的术语表可能是好的,我们的工具显示正确的术语表匹配,我们的翻译是主题专家。

例如,我们也可以看到法语比意大利语有更多的问题。

Tableau 将很容易让你交换你的列和行来改变数据的显示方式。在下面的例子中,重点是错误类别,而不是发现的错误数量。然而,在这个视图中我不喜欢的是错误类别的名称是垂直的,难以阅读——可以旋转它们,但这会使图表变得更宽。

您可以尝试创建一个视图,以尽可能最好的方式准确显示您想要的内容,这有很多选项。

  • 一个非常简单的方法,可以根据处理的字数快速查看最忙的月份。

  • 现在,我们想看看编辑距离 —分析这些信息可以帮助我们计算出,例如,按语言的机器翻译性能,考虑到较小的编辑距离意味着较少的后期编辑工作。我还将包括字数,以查看上下文中的编辑距离。

我可以让 Tableau 在图表中画一条线来显示所有语言的平均编辑距离。

蓝点表示德语是编辑距离最低的语言,平均为 21.15。这可能表明我的 DE 输出是好的,或者至少比语言的其他部分更好。意大利语的红点到处都是,这可能表明我的 IT MT 输出质量不一致——与葡萄牙语正好相反,大多数紫色点集中在图表的中心。

  • 在这个最后的例子中,让我们假设我们想要看到我们的评论者覆盖了多少内容;理想情况下,他们应该审查 50%的总字数。在这里,我们可以看到,按照语言,我们已经处理了多少单词,复习了多少单词。您可以很快看到法语单词数是俄语单词数的两倍。你还可以很容易地注意到,FR reviewer 没有覆盖其他人那么多。这可能表明您需要另一个审核人,或者当前审核人表现不佳。相比之下,葡萄牙语的总字数和评论字数之间的差异很小。如果我们只需要审核 50%的内容,PT reviewer 就覆盖太多了。

使用 Python 可视化 Tweet 矢量

原文:https://towardsdatascience.com/visualizing-tweet-vectors-using-python-e528358bce68?source=collection_archive---------0-----------------------

此内容最初出现在 好奇洞察

我尝试了很多不同的技术。我发现,拥有使用各种概念、语言、库、工具等的经验。当试图解决问题时,会导致更稳健的思考。如果你不知道某样东西的存在,那么当它有助于你使用时,你就不能使用它!有很多方法可以获得这些经验。人们可以在网上找到几乎任何可以想象的主题的精彩内容。但是我发现理解一项技术的最好方法是尝试用它来建造一些东西。

我的最新目标是 Python 生态系统中的一篮子不同的库,涵盖 web 开发、缓存、异步消息传递和可视化等内容。由于我是一名数据科学家,我加入了一个机器学习组件只是为了好玩。为了探索这些技术,我创建了一个半实用的应用程序,它从 Twitter 流中读取,解析推文,并进行一些机器学习魔法,以对推文的情绪进行评分,并将其投影到二维网格中,其中具有相似内容的推文将彼此更接近地出现。它使用异步消息传递或多或少地实时完成所有这些工作。

这篇博文的剩余部分将展示如何从头开始构建它。为了对它的功能和涉及的技术保持完全透明,下面是我将演示如何构建的组件:

  • 使用 Flask +标准前端工具(Bootstrap,JQuery 等)在 Python 中进行基本的 web 开发。)
  • 使用 Celery 和 Redis 的异步、可链接的任务队列
  • 使用 Socket-IO 在 Flask 和连接的客户端之间进行基于事件的实时通信
  • 使用模式过滤/解析 Twitter 流
  • 使用 NVD3 的流式实时可视化
  • 使用 Scikit-learn 和 Gensim (word2vec)进行情感分析和单词嵌入

这里有一张完成后的应用程序的截图。

我们为什么要这么做?这个应用程序有什么实际的、真实的目的吗?大概不会。但是这很有趣也很简洁,希望你能学到很多东西。如果这听起来很有趣,那么继续读下去!

(注:完成的应用程序位于 此处 。请经常参考这个,因为我可能会在整个帖子中省略一些细节)。

设置

首先,让我们讨论一下运行应用程序所需的设置。除了可以工作的 Python 解释器之外,您还需要安装应用程序使用的一系列库。您还需要知道如何执行一些任务,比如启动 Redis、启动 Celery 和运行 Flask 服务器。幸运的是,这些都很容易做到。我在项目的 自述文件 中写下了详细的说明。遵循这些步骤,您应该可以开始运行了。

情感和词向量模型

现在让我们建立情绪和词向量模型来转换推文。我们将使用 这个 Twitter 情感数据集 作为两个模型的训练数据。第一步是读入数据集,并使用 TF-IDF 进行一些预处理,将每条 tweet 转换为单词包表示。

print('Reading in data file...')  
data **=** pd.read_csv(path **+** 'Sentiment Analysis Dataset.csv',  
                   usecols**=**['Sentiment', 'SentimentText'], error_bad_lines**=**False)print('Pre-processing tweet text...')  
corpus **=** data['SentimentText']  
vectorizer **=** TfidfVectorizer(decode_error**=**'replace', strip_accents**=**'unicode',  
                             stop_words**=**'english', tokenizer**=**tokenize)
X **=** vectorizer.fit_transform(corpus.values)  
y **=** data['Sentiment'].values

注意,我们使用了一个定制的标记器,用于处理 tweets 中常见的模式。我从克里斯托弗·波茨写的 的 脚本中借用了这一点,并对其稍作修改(最终版本在“脚本”文件夹中)。接下来,我们可以训练情感分类器和 word2vec 模型。

print('Training sentiment classification model...')  
classifier **=** MultinomialNB()  
classifier.fit(X, y)print('Training word2vec model...')  
corpus **=** corpus.map(**lambda** x: tokenize(x))  
word2vec **=** Word2Vec(corpus.tolist(), size**=**100, window**=**4, min_count**=**10, workers**=**4)  
word2vec.init_sims(replace**=**True)

这应该运行得很快,因为训练数据集不是很大。我们现在有一个模型可以读取一条推文,并将其情绪分为积极或消极,另一个模型可以将推文中的单词转换为 100 维向量。但我们仍然需要一种方法来使用这些 100 维向量在二维网格上空间绘制推文。为此,我们将对单词向量进行 PCA 变换,只保留前两个主成分。

print('Fitting PCA transform...')  
word_vectors **=** [word2vec[word] **for** word **in** word2vec.vocab]  
pca **=** PCA(n_components**=**2)  
pca.fit(word_vectors)

最后,我们将把所有这些工件保存到磁盘上,以便以后可以从 web 应用程序中调用它们。

print('Saving artifacts to disk...')  
joblib.dump(vectorizer, path **+** 'vectorizer.pkl')  
joblib.dump(classifier, path **+** 'classifier.pkl')  
joblib.dump(pca, path **+** 'pca.pkl')  
word2vec.save(path **+** 'word2vec.pkl')

Web 应用程序初始化

现在我们已经准备好了所有需要的模型,我们可以开始应用程序的实质性工作了。首先,一些初始化。这段代码只在 Flask 服务器启动时运行一次。

# Initialize and configure Flask
app **=** Flask(__name__)  
app.config['SECRET_KEY'] **=** 'secret'  
app.config['CELERY_BROKER_URL'] **=** 'redis://localhost:6379/0'  
app.config['CELERY_RESULT_BACKEND'] **=** 'redis://localhost:6379/0'  
app.config['SOCKETIO_REDIS_URL'] **=** 'redis://localhost:6379/0'  
app.config['BROKER_TRANSPORT'] **=** 'redis'  
app.config['CELERY_ACCEPT_CONTENT'] **=** ['pickle']# Initialize SocketIO
socketio **=** SocketIO(app, message_queue**=**app.config['SOCKETIO_REDIS_URL'])# Initialize and configure Celery
celery **=** Celery(app.name, broker**=**app.config['CELERY_BROKER_URL'])  
celery.conf.update(app.config)

这里有一大堆事情要做,所以让我们把它分解一下。我们已经创建了一个名为“app”的变量,它是 Flask 的一个实例,并设置了一些配置项来做一些事情,比如告诉它使用 Redis 作为代理(注意,“config”只是一个键/值对的字典,我们可以将它用于 Flask 不需要的其他设置)。我们还创建了一个 SocketIO 实例,它是来自 Flask-SocketIO 集成库的一个类,基本上用 SocketIO 支持包装 Flask。最后,我们创建了 Celery 应用程序,并更新了它的配置设置,以使用我们为 Flask 定义的“config”字典。

接下来,我们需要将之前创建的模型加载到内存中,以便应用程序可以使用它们。

# Load transforms and models
vectorizer **=** joblib.load(path **+** 'vectorizer.pkl')  
classifier **=** joblib.load(path **+** 'classifier.pkl')  
pca **=** joblib.load(path **+** 'pca.pkl')  
word2vec **=** Word2Vec.load(path **+** 'word2vec.pkl')

最后,我们将创建一些助手函数,使用这些模型对推文的情绪进行分类,并将推文转换为 2D 坐标。

**def** **classify_tweet**(tweet):  
    """
    Classify a tweet with either a positive (1) or negative (0) sentiment.
    """
    pred **=** classifier.predict(vectorizer.transform(np.**array**([tweet.text]))) **return** str(pred[0]) **def** **vectorize_tweet**(tweet):  
    """
    Convert a tweet to vector space using a pre-trained word2vec model, then transform
    a sum of the vectorized words to 2-dimensional space using PCA to give a simple
    2D coordinate representation of the original tweet.
    """
    tweet_vector **=** np.zeros(100)
    **for** word **in** tokenize(tweet.text):
        **if** word **in** word2vec.vocab:
            tweet_vector **=** tweet_vector **+** word2vec[word] components **=** pca.transform(tweet_vector)
    x **=** components[0, 0]
    y **=** components[0, 1] **return** str(x), str(y)

烧瓶路线

处理 web 请求的服务器代码非常简单,事实上只有两条路线。第一个是根路径,只返回主页(“index.html”)。

**@app.route**('/', methods**=**['GET'])
**def** **index**():  
    """
    Route that maps to the main index page.
    """
    **return** render_template('index.html')

第二条路线接受一个输入短语,并启动一个任务链,该任务链将从 Twitter firehose 发出一系列与输入短语匹配的推文。

**@app.route**('/twitter/<phrase>', methods**=**['POST'])
**def** **twitter**(phrase):  
    """
    Route that accepts a twitter search phrase and queues a task to initiate
    a connection to twitter.
    """
    queue **=** app.config['SOCKETIO_REDIS_URL']
    # create_stream.apply_async(args=[phrase, queue])
    chain(create_stream.s(phrase, queue), send_complete_message.s()).apply_async()
    **return** 'Establishing connection...'

乍一看,这可能令人困惑,所以让我们更仔细地检查一下。“queue”变量只是一个指向 Redis 运行的 URL 的字符串(“redis://localhost:6379/0”),我们稍后会用到它。“chain”行是一个芹菜函数,它由一系列要排队并异步运行的任务组成。在这种情况下,我们将一个对“create_stream”任务的调用排队,随后是一个对“send_complete_message”任务的调用。这些任务可能会也可能不会立即开始执行(取决于任务队列的状态),但无论如何,函数的执行会继续到最后一行,在那里我们会向客户端返回一条消息,告知(到 Twitter 的)连接正在建立。

任务队列

在上一节中,我们对两个函数的调用进行了排队,“create_stream”和“send_complete_message”。我们说过这些在 Celery 中被定义为任务,这意味着它们在主程序线程之外异步执行。让我们来看看那些函数。

**@celery.task**
**def** **create_stream**(phrase, queue):  
    """
    Celery task that connects to the twitter stream and runs a loop, periodically
    emitting tweet information to all connected clients.
    """
    local **=** SocketIO(message_queue**=**queue)
    stream **=** Twitter().stream(phrase, timeout**=**30) **for** i **in** range(60):
        stream.update()
        **for** tweet **in** reversed(stream):
            sentiment **=** classify_tweet(tweet)
            x, y **=** vectorize_tweet(tweet)
            local.emit('tweet', {'id': str(i),
                                 'text': str(tweet.text.encode('ascii', 'ignore')),
                                 'sentiment': sentiment,
                                 'x': x,
                                 'y': y})
        stream.clear()
        time.sleep(1) **return** queue

这里有很多东西需要消化,所以让我们一步一步来。首先,“本地”是一个 Socket-IO 实例。回想一下,我们使用 Socket-IO(通过 Flask-SocketIO 包装器库)将信息从 Flask 服务器“推”到所有连接的客户端,因此这个对象创建了一个通道,允许我们这样做。我们在函数中创建一个本地实例而不使用全局实例的原因是因为我们的 Celery 任务在一个单独的线程中运行(记住,这个函数是异步调用的)。

在下一行中,我们创建了一个从模式库中导入的对象,该对象创建了一个与 Twitter 的持久连接。请注意,我们传入了通过客户端输入获得的搜索短语。这将限制 Twitter 流只捕捉包含该短语的推文。下一部分进入一个 60 秒的循环,每秒钟我们检查新的推文,如果发现任何推文,我们就对它们运行我们的情感和矢量化功能。最后一步是“emit”行,在这里我们告诉 Socket-IO 推出一条消息,其中包含该 tweet 的所有数据。

在函数执行的最后,它返回“queue”变量。你可能想知道——这是干什么用的?它通向哪里?还记得我们将多个芹菜任务链接在一起。当“create_stream”完成执行链中的下一个任务时(“send_complete_message”)被调用,第一个任务的输出被传递给下一个任务。在这种情况下,我们使用链将信息(Redis 队列的 URL)传播到每个任务。

“send_complete_message”函数要简单得多,应该不需要太多解释。本质上,我们所做的是向我们的客户端发出一条消息,表明前一个函数中的循环已经执行完毕。

**@celery.task**
**def** **send_complete_message**(queue):  
    """
    Celery task that notifies the client that the twitter loop has completed executing.
    """
    local **=** SocketIO(message_queue**=**queue)
    local.emit('complete', {'data': 'Operation complete!'})

实际上,没有必要这样设置。我们可以很容易地把它放在“create_stream”函数的末尾。但是我想演示一个简单的例子,说明如何用 Celery 编写工作流并在任务之间传递信息。重点是了解这些库以及它们能做什么!

前端

我们剩下的就是为用户创建一个 UI 来进行交互,并连接一些 javascript 来通过 Socket-IO 进行通信,并处理从服务器推送的事件。UI 代码非常通用,所以我不会在这篇文章中涉及它,但可以随意检查回购中的 index.html,看看它都放在一起。不过,我会说一些关于 javascript 代码的事情。首先,我们需要一个函数,它获取用户提供的短语并将其发布到 web 服务器,这将启动整个过程。这是非常标准的 JQuery 内容。

**function** **twitter**() {  
    phrase **=** $('#phrase').val();
    url **=** encodeURI('/twitter/' **+** phrase);
    $.ajax({
        type: 'POST',
        url: url,
        **success**: **function**(data, status, request) {
            $('#twitter-status').html(data);
        },
        **error**: **function**() {
            alert('An error occurred submitting the request.');
        }
    });
}

我们还需要一个函数来创建图表,我们将使用它来显示推文。我从 NVD3 网站上收集了一些例子,得出了下面的结果,它使用“数据”变量作为输入(稍后填充)来呈现散点图。

**function** **loadGraph**() {  
    **var** chart **=** nv.models.scatterChart()
        .pointRange([2000, 2000])
        .color(d3.scale.category10().range());
    chart.xAxis.tickFormat(d3.format('.02f'));
    chart.yAxis.tickFormat(d3.format('.02f'));
    d3.select('#chart svg')
        .datum(data)
        .transition()
        .duration(500)
        .call(chart);
    nv.utils.windowResize(chart.update);
    **return** chart;
}

此外,在主脚本体中还有一些事情要做,它在页面第一次加载时只运行一次。首先,我们打开一个套接字来建立与服务器的持久连接。

**var** socket **=** io.connect('http://' **+** document.domain **+** ':' **+** location.port);

接下来,我们需要创建一个事件处理程序来响应来自服务器的“tweet”消息。事件处理程序做一些事情:

  • 用新状态更新一些标签
  • 向图表使用的数据结构中添加新的 JSON 记录
  • 重新绘制图形以显示新数据
  • 将 tweet 中的原始文本附加到显示面板上
socket.on('tweet', **function**(msg) {  
    $('#phrase').val('');
    $('#twitter-status').html(
        'Connection established. Streaming for 60 seconds (currently at ' **+** msg.id **+** ')...');
    sentiment **=** parseInt(msg.sentiment);
    x **=** parseFloat(msg.x);
    y **=** parseFloat(msg.y);
    data[sentiment].values.push({
        id: msg.id,
        x: x,
        y: y,
        size: 2000,
        shape: "circle"});
    loadGraph();
    $('#twitter-results').append(
        '<br>' **+** $('<div/>').text('(' **+** x.toFixed(2) **+** ', ' **+** y.toFixed(2) **+** ') ' **+** msg.text).html());
});

我们还需要一个事件处理程序来响应“完成”消息。

socket.on('complete', **function**(msg) {  
    $('#twitter-status').html(msg.data);
});

最后一步只是连接开始的点击事件并初始化图形。

$('#begin').click(twitter);
nv.addGraph(loadGraph);

把所有的放在一起

本质上就是这样。如果您想自己运行它,最简单的方法是在这里下载源代码,并按照 README.md 中的说明进行操作。

为了不使这篇文章太长,我忽略了相当多的细节,但是如果你想了解我使用的任何库的更多信息,我强烈建议你浏览一下那个库的文档。几乎所有这些都有大量的示例代码,这就是我如何学到了很多制作这个应用程序所需的知识。

演练到此结束。正如我在开头所说,尝试新技术是一种很好的学习方式。通过同时结合几种新技术,它迫使人们更好地理解。这个应用程序非常简单,除了作为学习工具之外,在目前的状态下并不那么有用,但它有一百万种扩展方式。如果你觉得这个东西有趣,请随意叉回购,并作出自己的版本!

要对本文发表评论,请查看位于 好奇的洞察力 的原始帖子

关注我的Twitter获取新帖子更新

可视化您的探索性数据分析

原文:https://towardsdatascience.com/visualizing-your-exploratory-data-analysis-d2d6c2e3b30e?source=collection_archive---------0-----------------------

也许生活在数据科学世界的人和不生活在数据科学世界的人之间最大的差异之一是翻译数据以便每个人都能理解它的能力。数据科学家向业外人士展示数据分析的最佳方式之一是生成可视化效果。在我作为一名数据科学家的短暂时间里,很明显只有两种情况可以生成可视化。第一次是在探索性数据分析(EDA)期间,您最初接收数据,对其进行清理、排序,并创建您喜欢的任何其他要素,以获得干净完整的数据集。从这一点上,您可以开始看到某些变量之间的关系、特征之间的相关性(如果有的话),并生成更多的可视化效果,以便更好地显示手头的数据。另一种情况通常发生在分析结束时,此时您可能希望直观地看到您的模型预测与 EDA 可视化的预测相比如何,或者查看您的推断现在是否能够做出新的发现或 EDA 中显示的数据的延续。

这篇文章将关注可视化的第一个机会,EDA。在此之前,我们深入到视觉化,因为理解你将要做的事情的定义是关键。EDA 是一种数据分析方法,它使用各种技术,主要是可视化技术,以:最大限度地提高洞察力,揭示底层结构,检查异常值,测试假设,并确定最佳因素。这是一种分析数据的方法,它延迟了应该使用哪种模型的通常假设,而是让数据自己说话。

根据我的经验,目前为止我遇到的最好的可视化库是 matplotlib 、 seaborn 和 Tableau 应用程序。每一个都提供了一套独特的工具。

我将使用的两组数据来自 Kaggle 竞赛,用于预测大芝加哥地区捕蚊器中西尼罗病毒(WNV)的情况。我将向您展示一些使用 Seaborn 和 Matplotlib 在天气数据集上完成的初始 EDA。我还想指出,虽然你将看到的可视化是我的, Ira Rickman ,Michael Costa 和 Kristina Schendt 也参与了这个项目。我将用来显示 Tableau 使用情况的另一个数据集使用了关于美国大规模枪击事件的斯坦福大学图书馆,我目前正在将其用于一个单独的项目,稍后将有一个完整的博客专门讨论这个项目。

虽然很容易创建一些最有价值的类型,但在进行 EDA 时,可以生成两种图表:直方图和散点图。直方图允许我们看到特定变量的分布,而散点图允许我们看到两个或更多变量之间的关系。在我探索 WNV 天气数据的整个过程中,这些图是至关重要的,即使它们的使用可能看起来是多余的。EDA 的目的是以你知道的每一种方式探索数据。

下面的两个直方图向我们展示了平均温度在数据时间段内的分布和频率。正如您所看到的,它的范围从 40 度到 90 度左右,最常见的平均温度在 70 度左右,即使不知道数据的任何其他信息,您也可以假设数据收集的时间段是从春天到初秋。

您还会看到 Matplotlib 和 Seaborn 之间的巨大差异。第一个图形是使用 Matplotlib 创建的,需要(也很好地允许)大量的代码来设置,并且受限于您在其上放置的参数。第二个是 Seaborns 版本的直方图,称为密度图。正如您所看到的,它的设置要容易得多,因为它为您设置了箱和其他参数,并为您提供了整个数据分布的清晰线条。然而,由于它没有排除任何可能的异常值,这降低了我们关注数据主要部分的能力。

Matplotlib Average Temperature Histogram

Seaborn Average Temperature Density Plot

下面是使用 Seaborn 生成的四个非常不同的散点图示例。

第一张图比较了平均温度和风速的数据点。虽然起初,它看起来太大,是一个杂乱无章的散点图,但它仍然为我们提供了一些关键信息。总的来说,它向我们表明,这两个变量之间似乎几乎没有相关性,同时也表明,大多数数据点的温度在 55 至 85 度之间,风速在 1 至 12 英里每小时之间。我们还可以看到,随着温度的降低,风速超过每小时 15 英里的次数会增加,这与温度向相反方向变化的情况相反。

Wind Speed vs Average Temperature

我们的第二个散点图比较了平均温度和总降水量,虽然就图表而言,它似乎有点不清楚,但它继续为我们的数据提供了有价值的信息。从该图中可以得出两个主要结论:该数据集中的大部分时间几乎没有降水,这向我们揭示了一些偏远的数据点,那里的降雨量接近 7 英寸。

Precipitation Total vs Average Temperature

我们最后的两个露点与平均温度和平均风速与最大风速的散点图和其他散点图一样,揭示了我们对数据的重要理解。第一次,我们看到两个图,它们的变量似乎都有很强的相关性和积极的趋势。我们可以在第一张图中看到,随着温度的升高,露点也会升高,这并不奇怪,因为露点与湿度直接相关,但由于这张图,我的数据告诉我要进一步研究这个问题。如果没有这个情节我可能不会做这个调查。不出所料,我们的第二张图通过比较平均和最大风速,向我们展示了我们迄今为止最强的相关性,而不仅仅是将一个特征与其自身进行比较。然而,即使在其明显的冗余中,它也向我们展示了一些罕见的情况,可能是异常值,风速超过每小时 20 英里。

DewPoint vs Average Temperature

Wind Speed vs Average Wind Speed

下面是我在 Seaborn 图书馆最喜欢的图表之一,热图。这不仅为我们提供了每个变量之间相关性的数值,还为我们提供了一个易于理解的可视化表示,其中暗红色表示高度相关,深蓝表示不相关或负相关。这是创建最简单的图之一,但也是最具信息量的图之一,可以指导我们生成其他图来调查它带来的数字。需要注意的是,由于它是比较数据集中每个变量之间的相关性,因此根据变量的数量、观察值和计算机的处理能力,它需要一些时间来处理。

Seabron Correlation Heatmap of Weather Variables

另一个很棒的工具是 Tableau,它最基本的功能是一个点击应用程序,可以创建一个很棒的可视化世界。我发现它在比较多个地理区域的事件时特别有用。如前所述,我目前正在从事一个涉及美国大规模枪击事件的项目,因此我目前正在运行我的 EDA。以下是我到目前为止能够生成的一些非常容易解释和创建的 Tableau 图表。

下图向我们展示了从 1966 年到 2016 年美国大陆的每一次枪击事件的地点,颜色的深浅根据每个地点的受伤或死亡人数而变化。颜色越深,数字越高。我们几乎可以立即看到,大多数事件发生在人口密集区或其附近,伤亡人数最多的地区是南加州、丹佛地区、德克萨斯州中部、弗吉尼亚州西部和康涅狄格州。然而,值得注意的是,对于其中的一些地方,像奥罗拉、桑迪胡克、弗吉尼亚理工大学或德克萨斯大学这样的突发事件将它们推到了不幸的境地。

Locations of US Shootings 1966–2016, Total Number of Victims

我们的第二张图表也向我们展示了这些事件发生的地点,但这次我们不是统计受害者人数,而是查看枪手被诊断患有精神健康疾病的案例密度。虽然我们可以看到一些类似的枪击和精神疾病事件的发生中心,但它也揭示了这些行为的肇事者中有惊人数量的人很可能有预先存在的精神健康问题。

Locations of US Shootings 1966–2016, Number of Shooters with Diagnosed Mental Health Illnesses

正如你从 WNV 和美国枪击案中看到的,即使是最简单或最丑陋的图表也能为你提供关于数据的重要信息。无论是揭示异常值、趋势、相关性,还是在数据的兔子洞里增加阴谋,EDA 都允许数据显示它自己,并让我们在它完成后进行分析。

使用 TensorBoard 可视化您的模型

原文:https://towardsdatascience.com/visualizing-your-model-using-tensorboard-796ebb73e98d?source=collection_archive---------1-----------------------

在这一集的云人工智能冒险中,了解如何使用 TensorBoard 可视化您的模型并调试问题!

当您可以看到问题是什么时,调试问题就容易多了。但是随着大量的训练数据被输入到一个复杂的模型中,情况会变得…复杂。谢天谢地,TensorBoard 让这变得容易多了。

与传统编程不同,机器学习通常非常不可预测。您的数据质量,以及我们模型的细微差别,包括必须选择的许多参数,都对培训过程的成败有着广泛的影响。

Use TensorBoard to find the gaps

如果有某种方法来跟踪训练过程中的一些指标,并查看我们创建的模型的结构,那将使我们能够调整模型并调试我们看到的任何问题。

现在,这个抽象的过程可能很难可视化,但幸运的是,TensorFlow 有一个内置的解决方案!

见见 TensorBoard,TensorFlow 的内置可视化工具,它使您能够做各种事情,从查看您的模型结构到查看训练进度。

TensorFlow 在引擎盖下使用了计算图的思想。

这意味着它不是传统意义上的两个数相加,而是构造一个加法运算符,并将相加后的值作为输入传递给。

因此,当我们考虑 TensorFlow 训练您的模型时,它实际上是作为其“图形”的一部分执行一切。TensorBoard 可以可视化这些模型图,这样你就可以看到它们的样子,更重要的是,确保你已经按照你想要的方式连接了所有的部件。

这是一个由 TensorFlow 可视化的模型图的更复杂版本的例子。TensorBoard 允许我们缩放、平移和扩展元素以查看更多细节。这意味着我们可以在不同的抽象层查看模型,这有助于降低视觉复杂性。

然而,TensorBoard 不仅仅是显示模型结构。它还可以在一个漂亮的图表上绘制度量的进展。通常情况下,我们会绘制诸如准确性、损失、交叉熵等东西。根据不同的模型,不同的指标可能很重要。TensorFlow 的固定估值器附带了许多预配置的值,将在 TensorBoard 中显示,因此这是一个很好的起点。

TensorBoard 可以显示各种其他信息,包括直方图、分布、嵌入以及音频、图片和文本数据。但那是为了以后的视频。

让我们来看一个 TensorBoard 的例子,它带有我们目前为止一直使用的线性模型。首先,我们将启动 TensorBoard,并通过运行以下命令将其指向保存模型结构和检查点文件的目录:

tensorboard --logdir=”/tmp/iris_model/”

这将在端口 6006 启动一个本地服务器。没错,就是 GOOG:)前往 localhost:6006 查看本地机器上的 TensorBoard。

我们可以看到线性分类器默认提供的一些标量指标。我们还可以扩展和放大这些图表。

双击允许我们缩小。你可以看到我们的训练进展顺利,损失减少。同样清楚的是,培训尚未完全完成,因为损失仍在以很好的速度减少,所以这将提示我们可能需要运行更长时间的培训过程,以从该模型中获得最大收益。

现在让我们转到图表选项卡。请注意,从表面上看,图表非常简单。

我们可以通过单击加号来展开每个模块,以查看更多详细信息。例如,如果我展开“线性”块,我们会看到它由许多子组件组成。我们可以滚动来放大和缩小,点击并拖动来平移

还要注意,我们给特征列的名称“flower_features”显示为命名的图形组件。

这有助于调试和识别图形是如何连接的。TensorFlow 的大多数操作都可以命名,因此这可以是阐明您的模型的一个很好的方法。

今天,我们了解到,当您可以将模型与重要的训练指标一起可视化时,机器学习会更加容易和有趣。TensorBoard 让你轻松做到这一点,它内置在 TensorFlow 中!

下次你需要可视化你的机器学习时,使用 TensorBoard 来看看引擎盖下发生了什么!

如果你想要更多的机器学习动作,一定要订阅频道来观看未来的剧集!

此外,TensorBoard 的创作者在今年早些时候的 TensorFlow 开发峰会上给了这个精彩的演讲,请查看它以获得更深入的了解。

使用 Python 中的 Seaborn 和 WordCloud 可视化 YouTube 视频

原文:https://towardsdatascience.com/visualizing-youtube-videos-using-seaborn-and-wordcloud-in-python-b24247f70228?source=collection_archive---------11-----------------------

Courtesy: Pexels.com

我是一个狂热的 Youtube 用户,喜欢在空闲时间用它看视频。我决定对在美国播放的 youtube 视频做一些探索性的数据分析。我在这个链接上找到了 Kaggle 上的数据集

[## 趋势 YouTube 视频统计

热门 YouTube 视频的每日统计数据

www.kaggle.com](https://www.kaggle.com/datasnaek/youtube-new)

我下载了所有可用的地理数据集的 csv 文件“USvidoes.csv”和 json 文件“US_category_id.json”。我用 Jupyter 笔记本进行了分析。

我们开始吧!

加载必要的库

**import** **pandas** **as** **pd**
**import** **numpy** **as** **np**
**import** **seaborn** **as** **sns**
**import** **matplotlib.pyplot** **as** **plt**
**import** **os**
**from** **subprocess** **import** check_output
**from** **wordcloud** **import** WordCloud, STOPWORDS
**import** **string**
**import** **re** 
**import** **nltk**
**from** **nltk.corpus** **import** stopwords
**from** **nltk** **import** pos_tag
**from** **nltk.stem.wordnet** **import** WordNetLemmatizer 
**from** **nltk.tokenize** **import** word_tokenize
**from** **nltk.tokenize** **import** TweetTokenizer

我创建了一个名为“df_you”的数据帧,它将在整个分析过程中使用。

df_you = pd.read_csv(r"...\Projects\US Youtube - Python\USvideos.csv")

最重要的一步是了解数据的长度、宽度和带宽。

print(df_you.shape)
print(df_you.nunique())

数据集中似乎有大约 40949 个观察值和 16 个变量。如果有必要,下一步将是清除数据。我检查了是否有需要删除或操作的空值。

df_you.info()

我们看到总共有 16 列没有空值。对我们有好处:)现在让我们通过查看最上面的几行来了解一下数据。

df_you.head(n=5)

现在是可视化令人兴奋的部分!为了可视化变量中的数据,如“喜欢”、“不喜欢”、“视图”和“评论数”,我首先使用对数分布对数据进行归一化。数据的标准化对于确保这些变量被适当地缩放而不让一个主导变量扭曲最终结果是必不可少的。

df_you['likes_log'] = np.log(df_you['likes']+1)
df_you['views_log'] = np.log(df_you['views'] +1)
df_you['dislikes_log'] = np.log(df_you['dislikes'] +1)
df_you['comment_count_log'] = np.log(df_you['comment_count']+1)

让我们现在绘制这些!

plt.figure(figsize = (12,6))
plt.subplot(221)
g1 = sns.distplot(df_you['likes_log'], color = 'green')
g1.set_title("LIKES LOG DISTRIBUTION", fontsize = 16)

plt.subplot(222)
g2 = sns.distplot(df_you['views_log'])
g2.set_title("VIEWS LOG DISTRIBUTION", fontsize = 16)

plt.subplot(223)
g3 = sns.distplot(df_you['dislikes_log'], color = 'r')
g3.set_title("DISLIKES LOG DISTRIBUTION", fontsize=16)

plt.subplot(224)
g4 = sns.distplot(df_you['comment_count_log'])
g4.set_title("COMMENT COUNT LOG DISTRIBUTION", fontsize=16)

plt.subplots_adjust(wspace = 0.2, hspace = 0.4, top = 0.9)

plt.show()

现在让我们找出数据集中存在的唯一类别 id,以便在数据帧中分配适当的类别名称。

np.unique(df_you["category_id"])

我们看到有 16 个独特的类别。让我们使用之前下载的 json 文件‘US _ category _ id . JSON’中的信息为这些类别命名。

df_you['category_name'] = np.nan

df_you.loc[(df_you["category_id"]== 1),"category_name"] = 'Film and Animation'
df_you.loc[(df_you["category_id"] == 2), "category_name"] = 'Cars and Vehicles'
df_you.loc[(df_you["category_id"] == 10), "category_name"] = 'Music'
df_you.loc[(df_you["category_id"] == 15), "category_name"] = 'Pet and Animals'
df_you.loc[(df_you["category_id"] == 17), "category_name"] = 'Sports'
df_you.loc[(df_you["category_id"] == 19), "category_name"] = 'Travel and Events'
df_you.loc[(df_you["category_id"] == 20), "category_name"] = 'Gaming'
df_you.loc[(df_you["category_id"] == 22), "category_name"] = 'People and Blogs'
df_you.loc[(df_you["category_id"] == 23), "category_name"] = 'Comedy'
df_you.loc[(df_you["category_id"] == 24), "category_name"] = 'Entertainment'
df_you.loc[(df_you["category_id"] == 25), "category_name"] = 'News and Politics'
df_you.loc[(df_you["category_id"] == 26), "category_name"] = 'How to and Style'
df_you.loc[(df_you["category_id"] == 27), "category_name"] = 'Education'
df_you.loc[(df_you["category_id"] == 28), "category_name"] = 'Science and Technology'
df_you.loc[(df_you["category_id"] == 29), "category_name"] = 'Non-profits and Activism'
df_you.loc[(df_you["category_id"] == 43), "category_name"] = 'Shows'

现在让我们画出这些来识别流行的视频类别!

plt.figure(figsize = (14,10))
g = sns.countplot('category_name', data = df_you, palette="Set1", order = df_you['category_name'].value_counts().index)
g.set_xticklabels(g.get_xticklabels(),rotation=45, ha="right")
g.set_title("Count of the Video Categories", fontsize=15)
g.set_xlabel("", fontsize=12)
g.set_ylabel("Count", fontsize=12)
plt.subplots_adjust(wspace = 0.9, hspace = 0.9, top = 0.9)
plt.show()

我们看到前 5 个被浏览的类别是“娱乐”、“音乐”、“如何和风格”、“喜剧”和“人物和博客”。因此,如果你正在考虑开办自己的 youtube 频道,你最好先考虑这些类别!

现在让我们用箱线图来看看不同类别的观点、喜欢、不喜欢和评论的情况。

plt.figure(figsize = (14,10))
g = sns.boxplot(x = 'category_name', y = 'views_log', data = df_you, palette="winter_r")
g.set_xticklabels(g.get_xticklabels(),rotation=45, ha="right")
g.set_title("Views across different categories", fontsize=15)
g.set_xlabel("", fontsize=12)
g.set_ylabel("Views(log)", fontsize=12)
plt.subplots_adjust(wspace = 0.9, hspace = 0.9, top = 0.9)
plt.show()

plt.figure(figsize = (14,10))
g = sns.boxplot(x = 'category_name', y = 'likes_log', data = df_you, palette="spring_r")
g.set_xticklabels(g.get_xticklabels(),rotation=45, ha="right")
g.set_title("Likes across different categories", fontsize=15)
g.set_xlabel("", fontsize=12)
g.set_ylabel("Likes(log)", fontsize=12)
plt.subplots_adjust(wspace = 0.9, hspace = 0.9, top = 0.9)
plt.show()

plt.figure(figsize = (14,10))
g = sns.boxplot(x = 'category_name', y = 'dislikes_log', data = df_you, palette="summer_r")
g.set_xticklabels(g.get_xticklabels(),rotation=45, ha="right")
g.set_title("Dislikes across different categories", fontsize=15)
g.set_xlabel("", fontsize=12)
g.set_ylabel("Dislikes(log)", fontsize=12)
plt.subplots_adjust(wspace = 0.9, hspace = 0.9, top = 0.9)
plt.show()

plt.figure(figsize = (14,10))
g = sns.boxplot(x = 'category_name', y = 'comment_count_log', data = df_you, palette="plasma")
g.set_xticklabels(g.get_xticklabels(),rotation=45, ha="right")
g.set_title("Comments count across different categories", fontsize=15)
g.set_xlabel("", fontsize=12)
g.set_ylabel("Comment_count(log)", fontsize=12)
plt.subplots_adjust(wspace = 0.9, hspace = 0.9, top = 0.9)
plt.show()

接下来,我计算了参与度指标,如喜欢率、不喜欢率和评论率。

df_you['like_rate'] = df_you['likes']/df_you['views']
df_you['dislike_rate'] = df_you['dislikes']/df_you['views']
df_you['comment_rate'] = df_you['comment_count']/df_you['views']

使用参与度热图构建关联矩阵。

plt.figure(figsize = (10,8))
sns.heatmap(df_you[['like_rate', 'dislike_rate', 'comment_rate']].corr(), annot=**True**)
plt.show()

从上面的热图可以看出,如果观众喜欢某个视频,他/她有 43%的机会对其进行评论,而如果观众不喜欢该视频,则有 28%的机会进行评论。这是一个很好的见解,这意味着如果观众喜欢任何视频,他们更有可能对它们进行评论,以显示他们的欣赏/反馈。

接下来,我试着分析“标题”和“标签”栏中的字数唯一字数、标点数和单词的平均长度

*#Word count* 
df_you['count_word']=df_you['title'].apply(**lambda** x: len(str(x).split()))
df_you['count_word_tags']=df_you['tags'].apply(**lambda** x: len(str(x).split()))

*#Unique word count*
df_you['count_unique_word'] = df_you['title'].apply(**lambda** x: len(set(str(x).split())))
df_you['count_unique_word_tags'] = df_you['tags'].apply(**lambda** x: len(set(str(x).split())))

*#Punctutation count*
df_you['count_punctuation'] = df_you['title'].apply(**lambda** x: len([c **for** c **in** str(x) **if** c **in** string.punctuation]))
df_you['count_punctuation_tags'] = df_you['tags'].apply(**lambda** x: len([c **for** c **in** str(x) **if** c **in** string.punctuation]))

*#Average length of the words*
df_you['mean_word_len'] = df_you['title'].apply(**lambda** x : np.mean([len(x) **for** x **in** str(x).split()]))
df_you['mean_word_len_tags'] = df_you['tags'].apply(**lambda** x: np.mean([len(x) **for** x **in** str(x).split()]))

绘制这些…

plt.figure(figsize = (12,18))

plt.subplot(421)
g1 = sns.distplot(df_you['count_word'],
                 hist = **False**, label = 'Text')
g1 = sns.distplot(df_you['count_word_tags'],
                 hist = **False**, label = 'Tags')
g1.set_title('Word count distribution', fontsize = 14)
g1.set(xlabel='Word Count')

plt.subplot(422)
g2 = sns.distplot(df_you['count_unique_word'],
                 hist = **False**, label = 'Text')
g2 = sns.distplot(df_you['count_unique_word_tags'],
                 hist = **False**, label = 'Tags')
g2.set_title('Unique word count distribution', fontsize = 14)
g2.set(xlabel='Unique Word Count')

plt.subplot(423)
g3 = sns.distplot(df_you['count_punctuation'],
                 hist = **False**, label = 'Text')
g3 = sns.distplot(df_you['count_punctuation_tags'],
                 hist = **False**, label = 'Tags')
g3.set_title('Punctuation count distribution', fontsize =14)
g3.set(xlabel='Punctuation Count')

plt.subplot(424)
g4 = sns.distplot(df_you['mean_word_len'],
                 hist = **False**, label = 'Text')
g4 = sns.distplot(df_you['mean_word_len_tags'],
                 hist = **False**, label = 'Tags')
g4.set_title('Average word length distribution', fontsize = 14)
g4.set(xlabel = 'Average Word Length')

plt.subplots_adjust(wspace = 0.2, hspace = 0.4, top = 0.9)
plt.legend()
plt.show()

现在,让我们将视频标题、视频描述和视频标签的单词 cloud 可视化。这样我们就能发现标题、描述和标签中哪些词比较流行。创建一个词云是在博客世界中寻找热门词的一种流行方式。

  1. 视频标题的文字云
plt.figure(figsize = (20,20))
stopwords = set(STOPWORDS)
wordcloud = WordCloud(
                      background_color = 'black',
                      stopwords=stopwords,
                      max_words = 1000,
                      max_font_size = 120,
                      random_state = 42
                    ).generate(str(df_you['title']))

*#Plotting the word cloud*
plt.imshow(wordcloud)
plt.title("WORD CLOUD for Titles", fontsize = 20)
plt.axis('off')
plt.show()

从上面的词云可以明显看出,最常用的标题词是“官方”、“视频”、“谈话”、“SNL”、“VS”和“星期”等等。

2。标题描述的文字云

plt.figure(figsize = (20,20))

stopwords = set(STOPWORDS)

wordcloud = WordCloud(
                      background_color = 'black',
                      stopwords = stopwords,
                      max_words = 1000,
                      max_font_size = 120,
                      random_state = 42
                    ).generate(str(df_you['description']))

plt.imshow(wordcloud)
plt.title('WORD CLOUD for Title Description', fontsize = 20)
plt.axis('off')
plt.show()

我发现描述视频最流行的词是“https”、“video”、“new”、“watch”等等。

3。标签的文字云

plt.figure(figsize = (20,20))

stopwords = set(STOPWORDS)

wordcloud = WordCloud(
                      background_color = 'black',
                      stopwords = stopwords,
                      max_words = 1000,
                      max_font_size = 120,
                      random_state = 42
                    ).generate(str(df_you['tags']))

plt.imshow(wordcloud)
plt.title('WORD CLOUD for Tags', fontsize = 20)
plt.axis('off')
plt.show()

热门标签似乎是' SNL ',' TED ',' new ',' Season ',' week ',' Cream ',' youtube '从词云分析来看,看起来 youtube 上有很多周六夜现场的粉丝!

我第一次使用 word cloud library,它产生了漂亮而有用的视觉效果!如果你有兴趣了解更多关于这个库以及如何使用它,那么你一定要看看这个

[## 用 Python 生成单词云

很多时候,你可能会看到一朵云,里面充满了不同大小的单词,它们代表频率或…

www.datacamp.com](https://www.datacamp.com/community/tutorials/wordcloud-python)

这个分析在我的 Github 页面上。

[## 探索性数据分析

通过在 GitHub 上创建帐户,为 tanmayeewaghmare/探索性数据分析开发做出贡献。

github.com](https://github.com/tanmayeewaghmare/Exploratory-Data-Analysis/blob/master/Youtube videos analysis_ US Market.ipynb)

感谢阅读!

美国投票用机器学习解决

原文:https://towardsdatascience.com/voting-in-the-us-solved-with-machine-learning-9f2f8ec4b290?source=collection_archive---------8-----------------------

Let’s do better

或许有一种方法可以巧妙利用机器学习来解决美国的投票方式。这种用法可以应用于任何 web 安全性和真实性至关重要的情况。想想网上购物、报税、银行……任何可能用到 TouchID 的地方。

值得注意的是,没有一个系统在安全性方面是 100%完美的,但是我们可以真正接近一些以前没有的技术。

在美国,投票就像它来的时候一样倒退。美国有两个真正的大问题:选区不公正的划分和选民被剥夺权利。在这个国家,投票比想象的要困难得多。不幸的是,每个州都有不同的做法,所以很难归纳出一个解决方案。但是整个系统急需彻底改革。

网上安全投票可能是也可能不是正确的解决方案,但随着机器盒子中 face-verify.js 的发布,突然之间,人脸识别的一些有趣应用打开了大门,因为它与验证人们的身份有关。

我决定试着看看在这种情况下教授我的驾照照片是否可行。我想象一个投票系统,让美国公民验证他们的公民身份,上传一张官方照片,然后当你与投票网站互动时,通过你的网络摄像头识别你的脸,以确保你是投票的人。

如果在家投票不可行,这项技术可能很容易应用到全国各地的投票站。

回到我的测试。

当你自己尝试的时候,先读一下这篇详细介绍 JavaScript 库的博客文章。

我确保 Facebox 已经安装在我的系统上,然后从 Machine Box github 仓库中取出 faceverify 。我按照指示,让它在我的笔记本电脑上运行。

然后我教 Facebox 一张我驾照的扫描图像。这也不是一个特别好的扫描图像,它很小,而且我相信你知道,驾照上有各种各样的反光和半透明的问题。

我不认为这会奏效,但我惊喜地发现它确实奏效了。

I couldn’t help but smile when it worked

在我的驾照照片上,我留着胡子,头发短得多,并且做着一个愚蠢的鬼脸。但它仍然有效。

我现在可以证明,事实上是我在看那个网站。想象一下,如何通过嵌入简单的人脸识别来帮助提高投票的可访问性。这是一个 JavaScript 库,这意味着你可以在浏览器中添加验证某人 的能力。

我希望这有助于朝着正确的方向迈出一步,改善我们投票的方式,我们购物的方式,以及我们在线认证的方式。不再有黑客使用我的信用卡从亚马逊购物,提交欺诈性的退税,或者使用我的 Gmail 给我的联系人发垃圾邮件。我们能到达那里。简单易用、易于访问的机器学习可以引领潮流。

现在,在你离开评论区关于打印出来并举起一张照片来欺骗面部识别的轨道之前,让我解释一些事情。

有两种方法可以缓解这种情况。一种是要求个人识别码或密码伴随任何面部验证。把你的脸当成你的用户名,而不是密码。一旦你验证了这个过程,确保你与网站互动的整个过程都是你自己,而不是有人在监视你,这仍然是有用的。Facebox 还有一个迄今尚未提及但即将推出的功能,将有助于挫败将照片或静止图像冒充人脸的企图。如果您对部署这一附加功能感兴趣,请发送电子邮件至 hello (at ),我们将与您详谈。

什么是机器盒子?

Machine Box 将最先进的机器学习功能放入 Docker 容器中,这样像你这样的开发人员就可以轻松地将自然语言处理、面部检测、对象识别等融入其中。到您自己的应用程序中。

盒子是为扩展而建造的,所以当你的应用真正起飞时,只需水平地添加更多的盒子,直到无限甚至更远。哦,它比任何云服务都要便宜得多,而且数据不会离开你的基础设施。

有戏让我们知道你的想法。

等等…你给我打电话了!大声抱怨技术招聘和搬迁援助

原文:https://towardsdatascience.com/wait-you-called-me-rant-about-tech-recruiting-and-relocation-assistance-3449ceed1626?source=collection_archive---------11-----------------------

最近,我开始接到未识别号码的电话,来电者不会留下语音邮件。我以前偶尔会收到这些,但数量似乎增加了,我很好奇它们是关于什么的。我开始回答,招聘人员对我在德克萨斯州的圣安东尼奥、衣阿华州的得梅因、新泽西州和其他城市的职位感兴趣。在我接了第一个电话后,我突然意识到我已经在几个招聘网站(比如 Monster)上发布了我的简历,他们就是从那里得到我的号码的。我只是觉得奇怪,这些招聘人员不会先尝试电子邮件或至少留下语音邮件。

我受宠若惊,这些招聘人员正在接触,并开放移动到这些地方的短期合同工作。我喜欢收拾东西搬到某个地方的冒险经历,但我真的不想在这些地方得到一份固定工作的承诺。我向招聘人员表达了我的兴趣,但我不想浪费他们的时间。我住在华盛顿州 DC 市,如果我要去这些地方,我没有联系,我需要搬迁福利。招聘人员听到这一消息后立即犹豫不决。

我觉得这很奇怪。我明白公司只能花这么多。如果我先联系他们,我也能理解他们可能会拒绝搬迁福利。最后,我知道他们可能已经耗尽了当地的人才库,这就是为什么他们打电话给住在该地区以外的我。但是我为什么要为一个我没有申请的公司,承担搬到一个我没有联系的城市的全部负担和风险呢?

搬家需要金钱、时间和情感成本。它们包括:

  • 交通——到达目的地的机票或汽油费。如果你像我一样或者住在其他城市,比如纽约/旧金山,你可能需要租或者买一辆车。
  • 住房——你需要弄清楚你要住在哪里,你要用你的旧房子做什么。你打算毁约还是转租?或者,如果你是房主,你打算出租还是出售你的房子?
  • 便利设施——你能把舒适生活所需的所有东西都装进两个行李箱吗?如果没有,你可能需要运送东西。你可以租一套带家具的公寓,这会有所帮助。舒适生活所需的其他杂费呢?

您可以协商您的小时费率,以便将这些成本计算在内。但是如果你的合同是一个随意的协议,他们仍然可以在任何时候让你走。我不想冒这种风险,以防他们认为这个职位不再有必要,他们认为我不合适,或者我认为他们不合适。我不希望这些成本被我更高的时薪慢慢覆盖。我想让我的雇主预先支付他们的费用!

我想当你向招聘者敞开大门时,你需要愿意听到好机会和坏机会。给申请人打电话,让他们搬家,除了时薪之外不提供任何东西,这些策略在一定程度上必须奏效,否则这些招聘人员不会这么做。我只是希望接受这些职位的候选人最终会意识到,他们可以而且应该为这些利益进行谈判,因为这样我们都会更好。

等待周末:如何挑选最好的葡萄酒

原文:https://towardsdatascience.com/waiting-for-weekends-some-insights-on-how-to-select-the-best-wine-a752523ac7b7?source=collection_archive---------18-----------------------

市场上有大量的葡萄酒可供选择,对于葡萄酒爱好者来说,选择最好的葡萄酒永远是一个追求。美国、法国、西班牙、德国和许多其他葡萄酒国家的葡萄酒品种繁多,在任何酒类商店都很容易买到。价格也会有很大差异。根据我的经验,更高的价格并不总是保证更好的质量。有了这么多选择,买酒的最佳诀窍是什么?

为了回答这个问题,我使用了 2017 年收集的来自 Kaggle 的葡萄酒评论数据,并在下面检查了典型客户在购买葡萄酒时可能感兴趣的几个问题。这些数据涵盖了来自 43 个国家的 129971 篇葡萄酒评论。每篇葡萄酒评论都包含标题、国家、省份、地区、品种、价格、0-100 分、品酒师描述和品酒师信息等信息。

1。哪些国家是主要的葡萄酒生产国,哪些种类的葡萄酒在这些国家的评价最高?

首先,令人惊讶的是,美国生产的葡萄酒数量是第二大葡萄酒生产国法国的三倍。第三大葡萄酒生产国意大利的葡萄酒数量与法国大致相当。还值得注意的是,两个南美国家(智利和阿根廷)的产量高于奥地利和德国等欧洲国家。

接下来,数据显示,在美国最受欢迎的葡萄酒生产葡萄是黑皮诺、赤霞珠和霞多丽。对欧洲国家来说,这些品种并不那么受欢迎。所以,当你购买欧洲生产的葡萄酒时,请记住这一点。有趣的是,尽管欧洲国家距离很近,但它们生产最多的品种却是不同的。在法国,大多数生产的葡萄酒是波尔多风格的混合红,意大利是混合红,西班牙是 Tempranillo,葡萄牙是葡萄牙红,奥地利是 Grüner Veltliner,德国是 Riesling。

然而,产量最高的葡萄酒并不意味着质量最好。下面是产量最高的 15 种葡萄酒的图表,中间值用点数表示。因此,如果你购买美国葡萄酒,你最好的选择是黑皮诺、西拉和波尔多风格的混合红葡萄酒。对于第二大生产国法国来说,最好的品种是雷司令、黑比诺、香槟混合、琼瑶浆、马尔贝克和灰比诺。如果你更喜欢意大利葡萄酒,搜索桑娇维塞格罗索和内比奥罗。

令人惊讶的是,所有奥地利葡萄酒的评级都非常高,如雷司令、布劳夫兰基施(blaufrnkisch grüner velt liner)、长相思(Sauvignon Blanc)等(见下表)。与法国葡萄酒类似,奥地利最高等级的葡萄酒品种是雷司令。请记住,虽然法国有许多品种的中等质量低于奥地利。

Variety quality analysis for US, France, Italy and Austria. You can find similar analysis for other countries here.

2.不同价格类别中评价最好的葡萄酒有哪些?

现在让我们来看看葡萄酒的价格。为了让你购物更容易,我分析了四个价格类别。在这里,我们将只展示价格低于 50 美元的前两个类别的分析,而对于价格高于 50 美元的另外两个类别的分析,您可以在这里找到。

$ 0-$ 15

你可能会认为,如果你付不到 15 美元,就不可能品尝到高评价的葡萄酒。我会给你惊喜,但你可以,这是清单:

最有可能的是,这些葡萄酒可能很难在你当地的杂货店找到(尤其是在这篇文章之后),但是你可以尝试使用这个网站https://1000corks.com/搜索葡萄酒,并检查你附近是否有特定葡萄酒的位置。

让我们也检查一下价格和质量之间是否有任何关联。观察点数 vs 价格的散点图,你可以看到它看起来更像一个扭曲的三角形,而不是一条直线。很明显,有很多葡萄酒的质量与其价格不符。

$ 15-$ 50

如果你认为在前面的类别中价格和质量之间没有相关性,看看 15-50 美元类别中的散点图——它只是一个完全没有相关性的正方形。在这个价格类别中,高价格根本不能保证质量。例如,有很多酒的评分只有 80 分,价格从 15 美元到 45 美元不等。然而,请记住,总的来说,与以前的价格类别相比,有更多的葡萄酒评分超过 90 分。

如果你想品尝这一类别中的一些最好的葡萄酒,下面列出了评级最高的葡萄酒。例如,你可以尝试售价 44 美元的葡萄酒,比如加州索诺马海岸生产的夏敦埃酒,它被打了 99 分(见下文)。

3.对于不同国家生产的最佳葡萄酒,最常见的描述是什么?

这个数据库的有趣之处在于它包含了葡萄酒评论。因此,我按国家分析了评级最高的葡萄酒(> 87 分)中的受欢迎程度,并将其映射到国家轮廓上。你可以看到每个国家对葡萄酒的描述都有一些独特之处。

我不需要再讲什么了,这些图片上有几千个字。选择你的鞋底所属的国家!(你可以找到更多的国家 wordcloud。pdf 文件此处

美国

法国

意大利

西班牙

奥地利

4.葡萄酒的质量可以预测到什么程度?

由于在大多数情况下,价格并不是葡萄酒质量的最佳指标,我很好奇如何使用现有的机器学习工具来预测葡萄酒的质量。因此,我创建了一个模型,使用国家、价格、品种和省份等特征以及从标题中提取的其他三个特征(如年份、起泡和年份)来预测质量点。实际分数和预测分数之间的散点图如下所示,训练模型能够预测质量,r2 分数为 0.49,均方误差为 4.9 点。

虽然图中有明显的散点,但这比简单地看价格和质量之间的相关性要准确得多。那么,对于一款高品质的葡萄酒来说,什么特征是最重要的呢?该算法显示,影响葡萄酒评级的主要特征是价格和年份。有趣的是,接下来影响评级最大的特征是加州省、黑皮诺品种、霞多丽品种、混合红品种和华盛顿省。所以,根据经验,当你不知道你想要什么样的葡萄酒时,你可以选择加州的黑比诺葡萄酒,这是陈年的,价格你可以承受。

结论

在这篇文章中,我根据对从 Kaggle 获得的 2017 年葡萄酒评论数据的分析,展示了一些关于如何选择最佳葡萄酒的见解。

  • 在葡萄酒数量最多的国家,最受欢迎的葡萄酒品种是美国的黑皮诺,法国的波尔多风格的混合红,意大利的混合红,西班牙的坦普拉尼洛。
  • 美国评价最高的葡萄酒品种是黑比诺、西拉和波尔多风格的混合红,法国是雷司令、黑比诺、香槟混合、琼瑶浆、马尔贝克和灰比诺,意大利是桑娇维索和内比奥罗。
  • 奥地利生产的葡萄酒有很多评级很高的品种,其中评级最高的品种是雷司令。
  • 有些酒即使价格低于 15 美元,也有很高的评价。价格区间较高(15-50 美元)的葡萄酒并不能保证质量更好。
  • 葡萄酒的质量主要与价格和年份有关。地理位置也很重要,最好的葡萄酒通常来自加州和华盛顿。在各种类型的葡萄中,黑比诺、霞多丽和混合红通常是质量较好的标志。

是时候去商店买酒了吗?

要了解更多关于这个分析的内容,请点击这里的链接查看我的 Github。

向您介绍我使用 IAS 的经历

原文:https://towardsdatascience.com/walking-you-through-my-experience-with-ias-5cfc6f9e926a?source=collection_archive---------11-----------------------

科技生活

IAS 的夏季研究奖学金项目是由不同知名大学的教授指导的研究项目

好吧,你们所有人都应该知道享有盛誉的 IAS 夏季研究奖学金。这是每个理科生的梦想。这是一个夏季研究奖学金,提供给全印度的精选学生。

暑期研究奖学金项目(SRFP) 由印度科学院提供,是一种在印度的暑期沉浸式体验,是对学年期间发生的研究活动的补充。通常,这是一个竞争激烈的本科生项目,由学院的教职员工(通常是印度理工学院、印度理工学院、印度理工学院和印度其他知名学院)监督,他们为本科生的研究工作提供总体指导。该奖学金为期至少 8 周。研究领域变化很大,可以来自任何艺术或科学学科。

在这个项目中,学生可以在不同著名大学教授的指导下,在各自感兴趣的领域进行研究。

与其他人不同,我希望在这个著名的研究团队下从事图像和模式识别方面的工作。结果预计将于 2017 年 2 月 28 日公布。我像往常一样焦虑,希望能在获奖者中找到自己的名字。虽然我成功的可能性很小,但我还是抱最大的希望。但是,如果愿望是马,乞丐会骑。唉!我的名字不在那里。那天我彻底地看了几遍清单,我完全失望了。

尽管由于我的平均绩点只有 8.5,机会很少,我还是浏览了所有在信号和图像处理领域工作的教授的资料。我列出了大约 30 名教授的候选名单,仔细阅读了他们的研究论文。虽然我不能理解其中的重要部分,但我能够理解他们研究领域的要点。这帮助我提交了一份关于最新技术趋势的报告,这也得到了许多前辈和讲师的验证。由于我有一些 OpenCV 和图像处理的经验,我有点期待被选中。

但是,我继续前进,申请了 RGSoC (一个面向女生的开源竞赛)。我为此花了整整两个月的时间,但我的团队还是没有入选。学期即将结束,我手里没有实习机会。我很担心,不知道接下来会发生什么。我开始申请当地的实习,我完全沮丧。

我一点也不知道第二批入选名单还没有公布。5 月 2 日,我收到了一个学长发来的“刚果”消息,以及一个 IAS 第二次选拔结果列表的链接。还有维奥拉。我找到了我的名字。安妮莎·斯温……那是我的名字。我简直不敢相信自己的眼睛。这些证件与我的相匹配!我被选中在德里大学的 Geetika Jain Saxena 博士的指导下研究图像处理。

拿到确认邮件后,我和导师取得了联系,询问了要做的工作细节。令我完全惊讶的是,我的兴趣领域与她的专业领域完全相关。再次出现的问题是住宿。住宿名单只公布给在第一次选择名单中获得奖学金的人。我进退两难。是否会有住宿?我向我的导游寻求帮助,她好心地为我的住宿问题联系了宿舍管理员。我在 IIT 德里得到了 IAS 提供的住宿,但是我决定留在德里大学的校园里。

Summer Research Fellow Meet (INSA,Delhi)

一切都是固定的。我向班加罗尔的学院发出了录取通知书,并于 2017 年 5 月 26 日踏上了前往德里的旅程。我于 2017 年 5 月 29 日正式加入该协会。在第一次与我的向导见面时,有人问我以前的工作经历,她向我介绍了其他一些将要带领 t 走过这段漫长旅程的教师。

之后,我被分配了第一周的任务,即对图像的基本操作。在整个实习期间,我尽力在特定的时间内完成分配的任务。这项工作最好的部分是深入研究该项目的理论方面,以及研究背后的物理和数学概念。在正确的指导和极大的热情下,在加入的前 4 周,我用 OpenCV 和 Python 完成了项目的第一部分,即人脸识别。在那之后,我准备好了第二次体验微软 Kinect。我在 Kinect 和 C#领域完全是一只新蜜蜂。尽管花了更多的时间来熟悉 Kinect 的硬件和软件平台,但这确实是一次令人兴奋的学习经历。在为数据库创建收集数据时,外面的人很有帮助,最后,我们有了 10 个主题的 32 个特征的数据。对我来说最困难的部分是数据挖掘。然而,最终我们能够分析数据,并实现了 89%的人脸识别准确率和 65%的步态识别准确率。我于 2017 年 5 月 25 日成功完成了这个为期 57 天的项目。

data extraction from kinect

我想对所有为我提供完成这个项目的可能性的人表示最深切的感谢。然而,如果没有我的导师和印度科学院的支持和帮助,这是不可能的。我谨向他们所有人表示诚挚的感谢。我非常感谢 Geetika Jain Saxena 博士的指导和不断监督。此外,还要感谢 Amit Pundir 教授博士为我们提供了必要的信息和对项目未来的见解。

我还要感谢 Rajshekhar Mukherjee 先生对完成该项目的支持。我想对我的父母和 Maharaja Agrasen 学院(德里大学)的成员表示感谢,感谢他们的合作和鼓励,帮助我完成了这个项目。我要特别感谢印度科学院给我这个机会。我还要感谢和赞赏我开发这个项目的同事们,以及那些愿意用他们的能力帮助我的人们。

我的 IAS 团契之旅既激动人心又鼓舞人心。这一经历将永远伴随着我,并将激励我在未来几年深入研究图像处理和机器学习领域。

在下面的评论区让我知道你对这篇文章的想法,如果你想和我联系,我在这里->TwitterLinkedininsta gram

想要一份数据科学方面的工作?少一些热情,多一些怀疑。

原文:https://towardsdatascience.com/want-a-job-in-data-science-be-less-enthusiastic-and-more-skeptical-895e9e3c14f7?source=collection_archive---------2-----------------------

过去几年来,每周都有准数据科学家和应届毕业生在 LinkedIn 上联系我,亲自寻找进入这个新兴领域的“建议”。(建议在这里用引号括起来,因为他们真的在找工作。)

这些问题很多本质上都是一样的:我该学 python 还是 R?你使用什么工具?你能告诉我工作与生活的平衡吗?我刚刚从数据科学专业毕业!—你为什么这么热爱数据科学?我需要什么来开始?

充其量,这些问题都是老生常谈——在一个难得的好日子,我不介意回答它们。但大多数情况下,它们让我烦恼不已。它们旨在让我认为提问的人非常聪明,并且在思考他们在数据科学领域的职业生涯。但是谷歌一下这些问题,你会发现它们在论坛上重复出现。我对所有这些问题的回答通常是,“我不知道,看情况。”我不会添加任何别人没有的新东西。

但我会给求职者一些建议:如果你想在这个领域找到一份工作,抛弃那些令人厌倦的问题,学会批判性地谈论数据和模型。我称之为数据科学的秘密语言。如果你想在社交活动中给专业人士留下深刻印象,或者获得一个好的数据科学职位,你必须学会如何用这种秘密语言提问。

持续的内部批评

这种秘密语言是一种持续的、内在的批判。

这是一种认识,因为这个领域已经承诺了很多,它有可能不会实现。例如,离散事件模拟可能显示如何为工厂节省数百万美元,但它从未得到实施。机器学习算法可能会为消费者提供定制的内容,但就实施成本而言,这不值得。这些例子很重要。每当一个过分热情的营销人员告诉我没有什么数据解决不了的问题时,我都会想到它们。专业建议:不要听起来像个小贩。

换句话说:你需要能够穿透宣传,说出组织可以误用(或者干脆不使用)他们的数据的方式。

你需要意识到这个领域的问题。隐私不在其中。例如,一个真正的问题是,我们如何利用数据来强化我们想要改变的系统。想想现在有些银行不使用信用评分,而是使用社交媒体数据来评估信用度。在确定贷款时使用种族、年龄、性别和其他因素是非法的。然而,社交媒体数据体现了这些东西。你能批判性地谈论这个问题吗?

在社交和面试活动中,能够在这种内部批评中坦率地发言,将会比你想象的走得更远。原因如下:公司不是在寻找训练有素的技术专家(除非是一家人事代理机构,在这种情况下,你应该在你还有时间的时候尽快逃离他们),他们在寻找知道如何批判性地思考数据的人。你会立刻和你的谈话对象产生融洽的关系。数据科学不仅仅是编码;这也是关于知道技术什么时候有用,什么时候没用。

因为如果你真的真的关心这个领域——并希望成为其中的一部分——那么看着公司推出营销人员无法解释的按钮式黑盒分析平台会让你感到困扰;看到公司吹嘘他们花了多少钱来建立他们的数据科学团队,而不是专注于该团队的产出,你需要烦恼;看着公司吹嘘算法准确性而不处理假阳性应该会让你感到困扰。还有很多例子。如果你进来谈论谷歌、网飞和脸书的成功——这些例子已经有十多年的历史了——你会被视为知之甚少,没什么新东西可补充。

因此,抛开关于工作与生活平衡的典型问题,直接进入这个领域的核心。在你的下一次社交活动中,问那个大公司的代表一个表明你知道秘密语言的问题:我在你的网站上看到你已经投资了数百万来建立你的数据科学团队——它达到你的期望了吗?它为你节省了数百万美元的回报吗?也许这听起来很尖锐,但这是经理们喜欢看到的批判性思维类型。我向你保证,很多人在内心问过同样的问题——你会比你想象的更快适应。

想要集群?你要几个?

原文:https://towardsdatascience.com/want-clusters-how-many-will-you-have-8737f4ba9bf2?source=collection_archive---------18-----------------------

K-Means 会给你你想要的所有聚类。惯性和最小簇间距离的比率似乎在最佳 K 处具有可检测的局部最小值

好吧,那是开玩笑,我道歉!但这是我们在开始分组工作之前应该问自己的问题。聚类取决于距离的概念。预期一个群集的成员到该群集的质心的距离比到其他群集的质心的距离更近。给定一些数据点,以及一种计算它们之间距离的方法,似乎计算机程序应该能够通过足够的数据处理来做到这一点。但是我们必须小心行事。假设这种练习是无监督的,则该算法没有关于数据在特征空间中如何分布的先验知识。但愿不会,如果数据是均匀分布的,那么就没有希望实现任何有意义的集群。或者更糟的是,我们将拥有与数据点数量一样多的聚类,而我们将一无所获。这里探讨的想法是检查数据本身是否能为我们指出一个可以指示最佳集群数量的指标。这正是这篇文章的重点。

我们在已知的集群中使用合成的数字向量,因此我们可以评估这种方法。我们坚持二维,因为我们希望可视化所获得的集群,并说服自己,它似乎是可行的。 K-means 在 SciKit 中的实现是这里所有模拟的驱动程序。这里所有模拟的源代码可以从 github 下载。

1.优化 K-means 中的 K

流行的 K-means 方法将 n 个数据点分成 k 个簇,其中 k 被指定为输入。K-means 通过要求最小化每个聚类中的数据点到该聚类的质心的距离的平方和来识别这些 k 聚类。利用 C_i 作为具有簇的x 作为该簇中的任何数据向量/点,并且 μ_i 作为该簇的质心向量/点,K-means 最小化由下式定义的 kI_k 的总惯性:

Equation 1

图 1 用一个 3 集群的例子说明了这一点。K-means 正确地试图使 k 簇尽可能紧密,但是什么是 k 的最佳值是个问题。 I_k 等辅助信息能告诉我们我们的 k 是不是最好的吗?

Figure 1. K-means minimizes the overall inertia Ik of the k clusters. For k = n, Ik would be the absolute minimum at zero. But that is of no value. Ik* couples that criteria with maximizing the minimum intracluster separation. The k that minimizes Ik* is likely the optimal k for k << n.

让我们考虑以下论点。

  • k 等于数据点 n 的数量时,每个数据点都是其自己的聚类,并且 I_k 将等于零——其最小可能值。所以很明显使 I_k 最小的 k 不是最优的 k

Equation 2

  • 随着 k 的增加,星团间的距离将会减小。因此最小簇间距离的倒数将增加。用 r_k^ij 作为模拟 k 簇时簇 i 和簇 j 之间的距离,

Equation 3

结合等式 2 和 3,我们定义了新的度量 I_k *

Equation 4

因此,我们基本上使用簇间距离作为对 I_k. 的平衡,它们都随着 k 的增加而减少,但是根据模拟,它们的比率表现得更好,并且对于 k < < n 具有局部最小值。

让我们非常清楚,我们只是在谈论一个局部最小值,它可以通过从小 k 值到大 k 值的模拟来检测。随着 k 向着n数据点的总数增加,当每个数据点成为其自己的聚类时,将达到 0 的全局最小值。

2.完美聚类的数据集

为了了解这一指标的用处,我们假设在二维空间中有 14400 个点,在一个 3x3 的网格中分成 9 个不同的簇。每个聚类有 1600 个点均匀分布在 40x40 的网格上。参见下面的图 2。

Figure 2. K-means on perfectly clustered data with 9 actual clusters. (A -C). K-means will split the data into as many clusters as we ask it to. The dark grid lines show the actual separation boundaries. The numbers indicate the centroid locations of the clusters that K-means has found (D) Both the inertia and the minimum intercluster distance decrease as k increases (E) I_k has a detectable minimum at k=9 that we can use to pick the right number of clusters (F) The inertia is driven to zero as k increases to 144000, whereas the intercluster distance reaches a constant value.*

当我们运行 K-means 且 K= 9 时,我们得到了正确的聚类识别,如图 2B 所示。图中的数字是质心的位置,正如我们的数据所示,它们正好在每个星团的中心。当 K-means 在图 2A 中以 k =5 运行时,它将真实聚类分成片段,甚至将它们与来自其他真实聚类的片段相结合,以识别它所找到的聚类。图 2C 显示了使用 k =23 运行 K-means 时的情况,我们看到数据以各种方式被拆分。**

**这里的要点是,K-means 会将数据分成您要求的任意多个聚类。但是图 2D 显示了度量 I_k 甚至在惯性 I_k 和最小集群间距离 min{r_k^ij} 随着 k 增加而稳定减小时也是如此。放大小的 k ,图 2E 显示我们确实在 k=9 有一个确定的局部最小值。还有其他局部最小值,但它们都更高。放大更大的 k ,图 2F 显示最小的簇间距离接近单个点的分离距离,而 I_k (因此 I_k )下降到零。

Figure 3. The internal structure of the clusters is not a barrier to detecting the optimal k as the k that minimizes I_k*

*集群的性质没有什么特别之处,允许/不允许检测这个指标。上面的图 3 显示了一个类似的练习,其中数据以螺旋形式聚集,并且指标并未因此而变差,如图 3E 所示,其中当 k = 9 时,获得了 I_k 的清晰局部最小值。

3.松散聚集的数据集

所以这对于完美的聚类数据集来说效果很好。对于聚类没有很好分离的数据,它将如何处理?让我们考虑一个和以前一样大小的数据集,但是在数据点的位置中加入了一些随机误差,所以聚类不是那么清晰。

Figure 4. ( A-B). The clusters are visibly separable. Ik has a clear local minimum at k=9, that is 20% smaller than the nearest local minimum at k=4 (C-D) The cluster separation is blurred. I_k does show a local minimum at k=9, that is only about 7% smaller than the closest local minimum at k=4**

在上面的 4A 图中,即使没有网格线的帮助,我们也能直观地分辨出星团。在图 4C 中没有这么多,我们在群集之间只看到一个细长的无数据区。我们让 K-means 在这里工作来检测这些集群。图 4B 和 4D 显示在两种情况下, I_kk =9 处具有局部最小值。这个最小值在图 4B 中比在图 4D 中更明显。当然,考虑到后者的弥散群边界,这是可以预料的。*

4.统一的情况:没有集群

最后,我们看一下数据均匀分布的情况,这样就没有聚类了。但是我们知道,K-means 无论如何都会得出 k 簇。能否帮助我们发现这种情况,并得出数据不可聚类的结论?参见下面的图 5,我们在 120x120 的网格上均匀分布了 14400 个数据点。

Figure 5. When the data is uniformly distributed, there are no real clusters. (A-B) K-means clusters with k=4 and k=9. © The lack of clear local minima for Ik and the near constant nature of Ik is an indication of unclusterable data.**

*与图 2 至图 4 不同,图 4C 中的 I_k 的度量没有显示明显的局部最小值, I_k 在很大程度上不会随着 k 的增加而变化。对于较大的 k ,它最终会变为零,就像其他图中一样,但是对于k<n而言, I_k 比其他情况更平坦。这可能是决定底层数据没有聚集的线索。

5.结论和后续步骤

这篇文章是我们真正想要得到的东西的先驱——即文本聚类。这里,我们建立了一个合理的标准来检测使用 K-means 时的最佳聚类数。证据是经验性的,我们没有证据证明它在所有情况下都有效,尤其是在有噪声的高维空间。文本是橡胶与长向量、上下文问题以及构建这些向量的任何方法相遇的地方。应该很有意思。

原载于 2018 年 11 月 5 日【xplordat.com】**

想成为数据科学家?试试费曼技术。

原文:https://towardsdatascience.com/want-to-become-a-data-scientist-try-feynman-technique-2ea010da1c54?source=collection_archive---------2-----------------------

Source : Pixabay

许多博客和文章都是关于如何成为数据科学家的。这个列表通常是这样的

学习描述统计学、假设检验、概率

学习机器学习算法的类型——有监督的、无监督的

学习 Python,R,SAS,SQL

使用 Python、R、SAS 应用机器学习技术

学习数据可视化

虽然上述方法没有错,但这并不是成为高效数据科学家的充分途径。现在你可能会问为什么?在回答这个问题之前,我想先谈谈“费曼技术”。

为什么这项技术被称为“费曼技术”?

这项技术以伟大的理论物理学家理查德·费曼的名字命名。他被戏称为“伟大的解释者”,因为他用通俗易懂的语言解释甚至最复杂的科学问题的非凡技能。

费曼技巧:

第一步:缩小你觉得难以理解的话题的范围。了解主题。

第二步:用非常简单的术语解释这个话题,就好像你在教别人一样

Image Source : Geminthinking

第三步:通过例子或演示它是如何工作的

步骤 4: 评估你对该主题的了解,如果仍有一些概念不清楚,了解更多,重复步骤 2-4

在适当的时候,你会对这个话题有比开始时更好的理解。这就是“费曼技巧”的魔力

成为“伟大的解释者”成为伟大的数据科学家

数据科学领域需要不断学习。有些概念可能太难理解了。费曼技巧可以帮助一个人理解原本认为难以置信的话题。

需要向老板、客户或风投解释

只有当关键决策者看到其中的价值时,分析行业才能生存下去。决策者是

你的老板——如果你正在进行内部分析

客户——如果你从事分析咨询/服务行业

VC(风险投资家)——如果你正在为你的“人工智能初创企业”寻求投资(称之为人工智能是获得资金的第一步:P )

通常情况下,你的老板/客户/风投可能没有分析背景,或者对最新的分析主题没有深刻的理解。你有责任用尽可能简单的语言解释分析概念,让他们看到你的提议的价值。

所以,底线是— 练习你的费曼技巧,否则你可能会面临和呆伯特每天面对他的老板一样的折磨,如下图所示

Source : Dilbert Comic

Image Source : Dilbert Comic

我如何成为一名数据科学家

在我的 MBA 课程中,我是唯一一个有统计学背景的人,当我向我的朋友解释时,我总觉得我对统计学概念的理解有所提高。他们肯定我很容易就学会了这个概念,这给了我鼓励,也增加了我自己彻底学习这个概念的责任,这样我就不会教错了。

彻底学到一些东西的信心让我进入了数据科学领域。即使是现在,我仍然遵循费曼技巧来更好地理解最初看起来不可理解的话题。

实践费曼技巧——写文章

我必须承认,我写了第一篇关于“推荐引擎的文章,是为了更好地理解推荐系统是如何工作的。虽然我不自称在推荐系统方面有专长,但我可以肯定地说,我凭直觉学到了一些东西。

类似地,在我的上一篇文章“如何将一个闪亮的应用程序分类——第一部分”中。我试过通过乐高来解释码头工人!!

费曼技术——治疗冒名顶替综合症的方法

Image source : Pinterest

随着数据科学领域变得有利可图,许多人都想进入这个领域。那些成功进入(没有统计/数学)背景的人,有时会患上冒名顶替综合症。如上图所描绘的,“你是最容易被忽悠的”。克服冒名顶替综合症的唯一方法是真正深入了解各种数据科学主题,以及有什么比费曼技术更好的方式来深入了解主题。

记住:成为‘伟大的解释者’才能成为‘伟大的数据科学家’!!

如果你喜欢我的文章,给它一些掌声,你也可以在下面评论你对这篇文章的看法。

你可以联系我

领英

推特

我的博客:分析洛卡

想要对文本进行聚类?尝试自定义单词嵌入!

原文:https://towardsdatascience.com/want-to-cluster-text-try-custom-word-embeddings-615526cbef7a?source=collection_archive---------23-----------------------

分析具有单词嵌入的 Tf-idf 向量的聚类有效性。本文考虑的文本语料库实例表明,自定义单词嵌入可以帮助提高语料库的聚类能力

在我们使用单词嵌入的文本分类结果之后,这是一个受欢迎的消息。在分类的上下文中,我们得出结论,用朴素贝叶斯和 tf-idf 向量保持简单是一个很好的起点。虽然我们不能一概而论,但是在构建文档+单词向量时所做的额外工作并没有为分类质量带来相应的收益。在这篇文章中,我们继续前面为文本聚类打下的基础,特别是两篇文章——想要聚类?你要几个?和用转换后的文档向量聚类文本。我们从分类练习中选择我们熟悉的 20 新闻和影评文本语料库。我们评估了不同的降阶变换的聚类效果。重现这些结果的代码可以从 github 下载。

为什么降阶转换有助于聚类?

在我们深入细节之前,让我们停下来考虑一下,是否有任何理由期待应用单词嵌入会带来一些好处。除了计算性能的明显优势之外,如果我们得不到高质量的集群,这当然是没有用的!

从 VSM 模型产生的文档向量是长且稀疏的。不幸的是,每个文档簇的质心都接近原点。也就是说,所有的文档簇几乎都有一个共同的质心!另外,由于我们将文档向量归一化为具有单位长度,所以一个簇中的每个文档离这个公共质心的距离大约相同。我们的情况是,集群间距离接近于零,集群内距离接近于 1!这不是划分集群的好时机。

如果我们可以在不破坏文档向量的内容/意义的情况下减少文档向量的顺序,我们当然可以期待更高质量的结果。这正是这篇文章的重点,下面是我的计划。

  • 将文档归入已知的组/群,并将它们混合在一起
  • 应用降阶变换并构建文档向量
  • 聚集文档向量,看看我们是否已经完整地恢复了原始组
  • 评估不同转换在恢复纯净完整的文档群集方面的能力

1.用于聚类的文档向量

从有/没有单词嵌入的文本语料库中构建文档向量的准备工作已经在前面的文章中完成了— 单词嵌入和文档向量:第 2 部分。分类。我们在弹性搜索索引中有 20 个新闻和电影评论文本语料库。从不同算法(FastText、Word2Vec 和 Glove)构建的预训练和定制单词向量也在索引中。将 K-Means 应用于降阶的文档向量是简单的。

  • 从 elasticsearch 索引中获取(停止的令牌)稀疏的 n 长文档向量。 n 是文本语料库的词汇量大小。通过应用单词嵌入,将这些 n 长的稀疏向量转换成密集的 p 长的向量。
  • 应用 K-Means 聚类(对于 20 条新闻,K=3,对于电影评论,K = 2 ),并找出所获得的聚类的纯度。

下图说明了其中的机制。设置与我们的分类类似,只是我们在这里对向量进行聚类。关于分类的早期文章对图中的每个步骤都有详细的描述,代码也在它的 github 中。

Figure 1. The mechanics of the text clustering exercise. The document (row) vectors X and pre-trained/custom (column) word-vectors W are fetched from the elasticsearch index to build dense (row) vectors Z that are then normalized to have unit length before clustering with K-Means

2.变换空间中的距离

为了说明降阶变换对集群内和集群间距离的典型影响,让我们从 20 个新闻语料库中挑选“alt .无神论”组,并计算如下。

  • 簇间距离:20 个组中每个组的质心,以及从“alt.athiesm”的质心到其他 19 个组的质心的 19 个距离
  • 簇内距离:备选无神论组中 799 个文档的每一个到其质心的距离。

图 2 中的盒须图(5%和 95%的须)显示了转换前后的距离分布。对于稀疏和长( n = 44870,20 个新闻的停止词汇的大小)原始文档向量,簇内的距离都在预期的 1.0 左右,并且簇间距离接近 0.1。使用定制的 fasttext 单词嵌入(使用 p = 300,即转换后的向量长度为 300),我们得到了一个有利的距离分布,其中聚类本身被处理(聚类内中值距离从 1.0 降低到 0.27),而不同的聚类被推开(与其他聚类的中值距离从 0.1 左右增加到 0.28)。

Figure 2. The order reduced document vectors in a known cluster show larger compaction among themselves and greater separation from other clusters. Such transformations are better for the clustering task.

3.评估转换

我们从上一篇文章用转换后的文档向量聚类文本中知道,

  • 我们需要将文档向量标准化为单位长度,并且
  • 不同变换之间的变换向量之间的距离不能直接比较,并且
  • 可以比较每个空间中簇间距离与簇内距离的比率,以获得关于变换的有用性的一些线索。

此外,我们还概述了计算该比率的以下程序。

  1. 计算每个簇的质心,以及簇中每个文档与该质心之间的距离。找出这些距离的中间值。
  2. 取 1 中获得的所有聚类的中间值的平均值。这是该空间的“代表性”距离 A。
  3. 计算质心之间的平均距离 B。
  4. 比率 B/A 是我们可以跨转换比较的

为了获得更好的集群能力,我们希望 B/A 更大。也就是说,最大化 B/A 的转换应该在聚类方面做得更好。下面的图 3 让我们看到了 at 的前景。所有情况下的文档都使用停止标记(但没有词干)通过 Scikit 的 tf-idf 矢量器进行了矢量化。然后对这些向量应用不同的降阶变换。我们选择 p 为 300,即转换后的文档向量在所有情况下都具有 300 的长度。尝试的转换包括以下内容。

  • 奇异值分解
  • 手套(带手套. 840B.300d )
  • FastText (带crawl-300d-2M-subword . vec
  • Word2Vec (带Google news-vectors-negative 300 . bin)
  • 使用 FastText 定制矢量(使用 Gensim )
  • 使用 Word2Vec 定制矢量(使用 Gensim

根据步骤 1-4 处理每次转换中获得的文档向量,以计算簇间/簇内距离比率 B/A。图 3A 显示了考虑所有 20 个组/簇的 20-news 文档向量的比率。图 3B 用于电影评论数据集。

Figure 3. Order reducing transformations seem to improve the intercluster/intracluster distance ratio, boding well for the clustering task.

从图 3 中可以看出,降阶转换,尤其是自定义单词嵌入,似乎可以为 B/A 产生较大的值,因此有助于提高聚类能力。是时候验证事实是否如此了。

4.K-均值聚类

现在我们开始实际的集群任务,如图 1 所示,以验证图 3 所显示的内容。我们将使用相同的变换列表,并检查所获得的簇有多纯。也就是说,在任何获得的聚类中,我们希望找到单个组/类的文章。我们的立场是,那些具有较大 B/A 值的转换应该产生更纯的集群。

在每种情况下,我们给 K-Means 模拟已知的聚类数。假设我们在这里通过给出精确的 K 来帮助 K-Means,我们希望它至少能够将文章按组分开,并将它们放在不同的簇中。但不幸的是,这种情况并不总是发生,在某些情况下,文章会一边倒地聚集在一两个集群中。从我们的角度来看,这是一次失败的集群行动。

如果聚类任务是成功的,我们应该最终得到这样的聚类,每个聚类都有一个主要部分的文章来自其中一个组,这样我们就可以用那个组来识别那个聚类。

然后,通过不属于该聚类/组的文章的数量来测量所获得的聚类的“纯度”。

4.1 二十篇新闻文章

在 20 个新闻数据集的情况下,我们从 3 个组中挑选文章进行这个练习——这样我们就可以很容易地绘制结果。然而,请注意,图 3A 中的结果是通过考虑所有 20 个组/簇而获得的。词云图提供了我们正在处理的内容的鸟瞰图。

Figure 4. The dominant words in these three groups are mostly different. This enhances dissimilarity and so we expect to be successful at clustering

下面的图 5A 显示,使用自定义单词嵌入时,放错位置的文章数量最少,而原始文档向量的情况最差。具有定制 word2vec 嵌入的文档向量产生最纯的集群,每个集群标识一个特定的组。不同变换的性能与图 3A 所示的很好地匹配。

Figure 5. (A) Six of the 7 attempted transformations were successful at clustering. Order reducing transformations seem to have helped with clistering (B) Several articles about hockey seem to have found their way into hardware & religion based content when using the raw document vectors.

4.2 电影评论

电影评论数据集只有两个类,所以很容易设计,我们考虑所有的文档。这里再一次出现了两个组的单词云。

Figure 6. The positive & negative reviews share a lot of common words that are dominant. We can expect to have some difficulty with clustering.

图 7A 仅标识了两个成功的转换,并且它们与图 3B 中具有最大 B/A 比率的两个相一致。显然,正如图 6 中的单词云所表明的,电影评论更难聚类。总的来说,与 20 条新闻相比,我们可以做出以下观察。

  • 在群集任务中,7 次尝试转换中只有 2 次成功(相比之下,7 次尝试转换中有 6 次成功)。其他的则很不平衡,只有一个集群拥有大部分文档。
  • 即使在这两个成功的转化中,获得的簇的纯度/质量较差,有超过 30%的错簇。

Figure 7. Of the 7 attempted transformations, only 2 make the grade in reasonably segregating the positive and negative reviews as separate clusters. And they both of them involve custom word-embeddings.

5.结论

至此,我们结束了另一篇文章。我们已经在这里展示了降阶转换可以帮助文档聚类。在这些转换中,自定义单词嵌入似乎有优势——因此它进入了标题。至于为什么自定义单词嵌入比其他降阶转换做得更好,以及这个结论是否超出了本文研究的文本存储库,还有待进一步研究。

原载于 2018 年 12 月 14 日【xplordat.com】

想用 BigQuery?读读这个

原文:https://towardsdatascience.com/want-to-use-bigquery-read-this-fab36822830?source=collection_archive---------7-----------------------

Photo by Stephen Dawson on Unsplash

我最近开始使用 BigQuery,我必须承认我爱上了 DB…
本文试图解释它背后的技术,这是在成本和性能方面有效利用 DB 的一个要求。

BigQuery 是谷歌发布的 Dremel 的公开实现。

Dremel 是 Google 的查询引擎,它能够将 SQL 查询转换成从 Google 的分布式文件系统中读取数据的执行树。Dremel 具有很高的可伸缩性,无论数据集有多大,它都能够在几秒(或几十秒)内返回查询结果。

BigQuery 通过 REST API、命令行界面和 Web UI 向第三方提供 Dremel 的核心特性。

但是 BigQuery 不仅仅是 Dremel…

事实上,BigQuery 利用了谷歌开发的多种技术。

首先,它使用 Borg (Google 的集群管理系统)为 Dremel 作业分配计算能力。Dremel jobs 使用 Jupiter 从谷歌的文件系统中读取数据,Jupiter 是谷歌的高速网络,以 10 Gbps 的速度交换数据。

由于其架构,BigQuery 不需要索引,数据以一种专有的列格式存储在 Colossus (Google 的文件系统)上,每个查询对目标表进行全扫描。

负载的增加主要通过添加服务器来管理。这对于用户来说是透明的,用户不会像使用 Redshift 或 Postgres 那样“添加服务器”或“使用更大的机器”。

术语“无索引”和“全扫描”通常不是“快”的同义词,那么 BigQuery 为什么这么快呢?

主要得益于两个因素:

  • 列存储:数据按列存储,这样可以实现很高的压缩比和扫描吞吐量。
  • ****树形架构:树形执行架构用于在数千台机器上分发查询和聚合结果。

柱状存储

作为一个分析数据库,BigQuery 存储格式针对访问大量行的少数几列进行了优化。由于这个原因,存储是按列执行的,因此您只能访问更少的不同存储卷(由于可以并行访问它们,所以速度更快)。

数据模型与协议缓冲区紧密相关,具有必填、重复和可选字段。
为了以连续的方式存储信息,让我们引入
重复级别定义级别的概念。

  • ****重复级别:重复发生的场路径中嵌套的级别。
  • ****定义级别:字段路径中定义了多少个可选/重复字段。

让我们举个例子,假设我们有下面的表定义:

message Book {
 required string title,
 repeated string author,
 repeated group price {
   optional int64 discount,
   optional int64 usd,
   optional int64 eur,
 }
}

我们有三项记录:

Book1:
 author: "AAA"
 title: "firstTitle"
 price:
  discount: 0
  eur: 11
  usd: 12Book2:
 author: "BBB"
 author: "CCC"
 author: "DDD"
 title: "secondTitle"Book3:
 title: "thirdTitle"
 price:
  discount: 0
  eur: 11
 price:
  discount: 1
  eur: 11

让我们计算每个值的重复和定义级别。我还将为缺失的可选字段添加显式的空值。

Book1:
 author: "AAA"          R: 0, D: 1
 title: "firstTitle"    R: 0, D: 1
 price:
  discount: 0           R: 0, D: 2
  eur: 11               R: 0, D: 2
  usd: 12               R: 0, D: 2Book2:
 author: "BBB"          R: 0, D: 1
 author: "CCC"          R: 1, D: 1
 author: "DDD"          R: 1, D: 1
 title: "secondTitle"   R: 0, D: 1
 (price):
  (discount: null)      R: 0, D: 0
  (eur: null)           R: 0, D: 0
  (usd: null)           R: 0, D: 0Book3:
 title: "thirdTitle"   R: 0, D: 1
 (author: null)        R: 0, D: 0
 price:
  discount: 0          R: 0, D: 2
  eur: 11              R: 0, D: 2
  (usd: null)          R: 0, D: 1
 price:
  discount: 1          R: 1, D: 2
  eur: 11              R: 1, D: 2
  (usd: null)          R: 1, D: 1

当没有重复时,重复级别总是零,当字段重复时,例如第二个记录中的 author ,R 是 1,因为重复发生在第一个重复级别,第三个记录中的 price 也是如此。

定义级别非常简单,例如在第一条记录中价格.折扣为 2,因为价格折扣都已定义。另一方面,在记录 3 中,最后一个空值 price.usd 的 D 等于 1,因为 price 被定义,而 price.usd 没有被定义。

每列存储为一组块,如下所示:

compressed value, R, D

r 和 D 仅在必要时存储,不能推断。空值可以推断为,对它们来说,D 始终是一个小于字段路径中重复字段和可选字段之和的数字(从示例中可以看出)。
根据存储的信息,可以很容易地为每个查询列并行重建每个记录。

例如,让我们考虑一下 price.eur 列。在磁盘上,我们将有:

11 R: 0, D: 2
NULL R: 0, D: 0
11 R: 0, D: 2
11 R: 1, D: 2

扫描该列,每当 R 为 0 时,我们就遇到一个新记录,而当 R 大于 0 时,我们在同一记录中有重复。如前所述,D 可用于空值。因此,遍历该列,我们得到:

Book1:
 price:
  eur: 11Book2:
 price:
  eur: nullBook2:
 price:
  eur: 11
 price:
  eur: 11

列存储也带来了存储优势,因为它允许您压缩每一列。两个经典的解决方案是位图游程编码** (RLE)。**

假设您有一个由 n 行组成的列,其中有 k 个不同的值。使用前面的示例,您有一个包含以下值的 price.eur 列( n = 10, k = 5)

[10.0, 10.0, 8.99, 8.99, 7.0, 6.0, 7.0, 6.0, 2.0, 2.0]

这个列可以很容易地用长度为 n (行长度)的 k 位图(一个位图对应一个不同的值)来压缩,其中如果某个值在行中,那么在该值的位置有一个设置位。

price.eur: 10.0 [1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
price.eur: 8.99 [0, 0, 1, 1, 0, 0, 0, 0, 0, 0]
price.eur: 7.0  [0, 0, 0, 0, 1, 0, 1, 0, 0, 0]
price.eur: 6.0  [0, 0, 0, 0, 0, 1, 0, 1, 0, 0]
price.eur: 2.0  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1]

可以存储位图而不是实际的列。如果考虑选择、聚合和投影模式,优势甚至更大。在分析数据库中,查询(如下所示)

可以直接执行加载值= 4.0 和< 3.0 的位图,并执行逐位 and。

使用 RLE 可以进一步提高压缩率。在这种情况下,你要做的是表示 0 和 1 的序列。例如,前三个位图将变成:

price.eur: 10.0 – 0,2 (0 0s, 2 1s, rest 0s)
price.eur: 8.99 – 2,2 (2 0s, 2 1s, rest 0s)
price.eur: 7.0 – 4,1,1,1 (4 0s, 1 one, 1 zero, 1 one, rest 0s)

可以想象,这种技术的效率很大程度上取决于不同的因素,比如行的顺序、列的类型和用法。电容器所做的是试图找到一种智能的行重新排序,目的是优化(或至少次优化)数据存储和检索。

这种选择也有一些缺点。例如,它在更新方面表现不佳。Dremel 通过不支持任何更新操作来解决这个问题。

Coffee break (Photo by rawpixel on Unsplash)

用于查询执行的树形结构

每个 SQL 语句将一个或多个嵌套表及其模式作为输入,并生成一个嵌套表及其输出模式。
嵌套数据结构的思想用于减少阻抗不匹配(也就是应用程序代码和 DBs 数据表示中对象之间的不匹配)。

即使查询中没有指定记录构造函数,也总是会产生嵌套结果。

让我们以一个 SQL 查询为例,它执行:投影** (AS)、选择 (SELECT/FROM/WHERE)和记录内聚合 (COUNT — WITHIN)。**

该查询将返回如下内容:

Book: Book1
price:
 discountCnt: 1
 str: "AAA,firstTitle"

如果您将嵌套记录视为一棵带标签的树,那么:

  • 选择: WHERE 删除不符合条件的分支,而 SELECT 生成的值与表达式中使用的重复次数最多的字段级别相同。
  • 聚合: COUNT/WITHIN 执行记录内聚合,计算价格字段中折扣的出现次数。

但是查询是如何执行的呢?
答案是:
使用树执行方法

根节点接收查询,读取表元数据,并将查询重新路由到下一级。在底部,叶节点是与分布式文件系统交互的节点,它检索实际的数据,并将其传播回树中。

例如,假设您执行:

根节点获取组成 T 的所有分区(可能你们中的一些人更熟悉术语碎片),而不是将查询重写为

其中 R1iR1n 是发送到第一级节点的查询的结果。特别是:

其中 T1i 是在执行树的第一级中由服务器 I 处理的平板(T 的碎片)。

查询在下一级被修改和推送,直到到达叶子。树叶从分区中读取实际的列数据,然后一切都传播回根。

需要注意的是,树叶扫描的数据量是影响查询费用的数据量。

关于分区,BigQuery 在加载数据时确定表的最佳分区数,然后根据数据访问和查询模式调整分区数。

查询调度程序

通常,几个查询同时执行,查询调度器调度查询并平衡负载。

每个查询中处理的数据量通常大于
可供执行的处理单元(槽)的数量。一个槽对应于叶服务器上的一个执行线程。通常情况下,每个插槽会被分配给多个平板电脑。
执行查询时,dispatcher 会计算药片处理时间的直方图,并决定重新安排处理时间过长的药片。

就复制而言,每台平板电脑通常都是三向复制,因此如果其中一台不可访问,则叶服务器会访问另一台副本。

让我们用一些数学知识来理解这种机制在执行查询时为何如此之快。

假设您有一个包含 50TB 数据、10 列和 1000 个分区的表,考虑到前面讨论的列存储,您有 10 个文件乘以 1000 个平板电脑。

让我们假设你在桌子上执行了一个SELECT *
如果有 2000 个插槽,每个插槽必须读取 5 个文件(10x1000/2000 ),每个文件的大小为 5GB,总共 25GB,可以并行读取。考虑到木星网络的速度,这些数据可以在 20 秒左右送达。

实际问题

让我们通过理解 BigQuery 背后的技术得出一些实际的考虑。

  1. 最小化扫描数据量**:永远不要运行SELECT *,如果这对于一般的分析数据库来说是真的,那么对于 BigQuery 及其按查询付费策略来说更是如此。仔细选择您需要的列。除此之外,您可以应用几种策略来减少数据量,比如使用分区表。
  2. 不删除**:如果你犯了一个错误,你不能删除或重命名一个列…你只能从REQUIREDNULLABLE增加或放松一个列的模式。但是,您仍然可以删除或重命名列。例如,您可以执行一个查询,选择除了要删除的列之外的所有列,并将查询结果作为新表的目标。或者,您可以将现有的表转储到Google Cloud Storage(GCS)中,然后重新导入它,不包含您想要删除或重命名的列。这些都会带来成本的下降(扫描整个表,创建新表,因此需要额外的存储)。
  3. 外部数据源 : BigQuery 也可以使用它的查询来定位外部数据源。支持的来源有 BigtableGoogle 云存储Google Drive 。数据被动态加载到 Dremel 引擎中。例如,如果您想直接查询存储在 GCS 上的日志,这可能非常有用。另一方面,与定位本地表相比,定位外部数据会导致性能降低。

结论:我们深入了解了 BigQuery 的工作原理。特别是,它的存储格式和查询执行机制如何对大量数据执行快速分析查询。然后,根据我们对 BigQuery 架构的了解,我们得出了一些关于如何优化成本和查询性能的实际考虑。

如果您喜欢这篇文章,并且觉得它很有用,请随意👏或者分享。

干杯!

热启动贝叶斯优化

原文:https://towardsdatascience.com/warm-starting-bayesian-optimization-674312bfcd7?source=collection_archive---------16-----------------------

每当在新数据集上训练机器学习模型时,都需要超参数调整。然而,它经常被放弃,因为它缺乏一个理论框架,我以前曾试图在这里解开:

[## 揭开超参数调谐的神秘面纱

它是什么,为什么是自然的

towardsdatascience.com](/demystifying-hyper-parameter-tuning-acb83af0258f)

一种将智能和高效的超参数调整系统化的方法是贝叶斯优化,它构建了可调整问题的概率代理,以推荐最佳参数。它通过在每次迭代后更新代理来逐步建立对问题的理解。下图说明了由 OPTaaS 生成的代理模型的演变,以最小化 Beale 函数。

Evolution of the surrogate model generated for mimizing the Beale function

正如我们在第一个图(5 次迭代)中看到的,贝叶斯优化面临冷启动问题,因为先验最初是平坦的,需要在提供“有意义的”建议之前建立底层函数的表示。经过 35 次迭代,对 Beale 函数有了更好的理解;代孕妈妈看起来很像。在本文中,我们将看到热启动代理模型如何显著提高性能。

为什么要暖启动?

从前面的示例中,我们了解到,如果贝叶斯优化器有一些关于函数或其类型的整体形状的先验信息,那么在早期的推荐可能会更好,因为它不需要花费太多的时间来初始化代理。

此外,在超参数调整的背景下,机器学习模型的某些超参数配置可能是合法的,但在实践中没有意义。例如,具有少量树的随机森林将具有较低的准确性,因此可能不值得在这样的区域中探索超参数配置,而不管它正在被训练的基础数据集如何。

随机森林的热启动

我们将研究随机森林的热启动贝叶斯优化的性能改进。通过对许多数据集和具有不同超参数配置的随机森林进行搜索,我们能够了解随机森林的性能如何随每个超参数平均变化。

利用这些测试中的知识,我们可以指导优化器在模型历史上表现良好的区域进行搜索,避免尝试历史上较差的配置,例如使用少量的树。

结果

为了进行性能比较,我们将使用 OPTaaS ,这是一种通用贝叶斯优化器,我们将在全新的数据集上将它与热启动版本进行比较。我们对 30 个全新的数据集进行了测试,下面的图显示了在 CMC 数据集、德国信用数据集和声纳数据集上的结果。

Warm (green) vs Cold (blue) started OPTaaS for training a RF on the CMC data set

Warm (green) vs Cold (blue) started OPTaaS for training a RF on the German credit data

Warm (green) vs Cold (blue) started OPTaaS for training a RF on the Sonar data

正如我们所见,热启动 OPTaaS 有助于识别更好的超参数配置,比冷启动版本快得多。后者确实赶上了(令人放心),但是需要更多的迭代来建立对底层问题的理解。可以理解的是,需要采取预防措施来确保热启动配置不会过度适应训练数据集,以保证普遍的性能改进。

更新:我开了一家科技公司。您可以在此了解更多

扩展ˌ扩张

热启动代理通过提供首先尝试的“合理”配置,在初始迭代中表现出竞争优势。然而,在初始迭代之后,有许多扩展可以帮助提高性能。我将在下一篇文章中详细介绍它们。

同时,如果您有任何问题或者是否想尝试optas,请不要犹豫联系。

致以最热烈的问候和新年最美好的祝愿

原文:https://towardsdatascience.com/warmest-greetings-and-best-wishes-for-the-new-year-c905f4b375a5?source=collection_archive---------5-----------------------

我们希望你的假期在新的一年里充满欢乐和笑声。✨🎄

非常感谢您的支持、评论、互动和反馈。我们感谢您的贡献,并将努力为我们的数据科学社区带来更多价值。我们相信数据相关知识对于让世界变得更美好至关重要,因此我们认真对待这项任务。

为了结束这一年,请在这里找到我们最大的里程碑的集合。我们希望你喜欢它😀。

感谢我们所有的第一批支持者。🦋

2017 年 12 月 23 日。

根据 Smedian 上的@ Lincoln Daniel排名第二增长最快的出版物!超出了我们的预期——感谢我们所有的读者!

2017 年 12 月 19 日

我们在 30 天内收到了超过 100 万次的浏览👩‍💻。感谢您阅读和撰写✨数据科学

2017 年 11 月 23 日。

我们的团队正在成长,我们现在已经为 2018 年做好了准备!我们有 10 个人:4 名编辑和 6 名编辑助理✨

2017 年 11 月 2 日。

我们一岁了!我们现在已经发展成为一个社区,在脸书、LinkedIn 和 Twitter 上拥有超过 30,000 名粉丝。谢谢你。

2017 年 10 月 20 日

入门指南# data science# machine learningwith@ dpatil@ robd Thomas@ Rama 100@ balazskegl@ bnj _ cooley等。

2017 年 7 月 16 日。

我们的第一次每周精选😀

在这里,我们选择了几个突出的职位,值得一读,如果你错过了他们…我们希望你会发现他们像我们一样翔实和愉快!

2017 年 3 月 11 日。

祝一切顺利,

A.我是灯的精灵

原文:https://towardsdatascience.com/warning-for-the-future-our-future-is-what-we-will-tell-the-machines-we-want-88201238ef0e?source=collection_archive---------9-----------------------

"小心你想要的,因为你可能会得到它."小猫娃娃

这可能是一个愚蠢的引用,但这个公理对我来说是为了人类的未来而牢记在心的最重要的规则。

请阅读这篇文章,传播出去,永远不要忘记。

另一个即将到来的隐喻是这个:

灯之精灵:你想要的任何东西,你都会得到(在适当的时候)。

1.我们得到了我们想要的。

让我用具体的例子来说明这个理论:

我们希望在最复杂的战略游戏中击败最优秀的人类……

我们知道了:

http://www . CNBC . com/2016/03/08/Google-deep minds-alpha go-takes-on-go-champion-lee-sedol-in-ai-milestone-in-Seoul . html

我们希望以我们最好的艺术家的风格创作艺术…

我们知道了:

http://uk . business insider . com/ai-makes-photos-look-like-named-paints-2015-9?r=US & IR=T

我们想自动生成正反两方面的论点或赢得地质公园…

我们知道了:

https://youtu.be/6fJOtAzICzw?t=45m29s

我们想看看异性或年长的我们会是什么样子……

我们知道了:

https://www.faceapp.com/

用文字创作图片?检查。

以… 风格创作原创音乐作品完成。

一个唱的比我们最好的歌手还好听的 AI。即将到来。

预测天气… 很快。

预测未来?就等着吧。

我可以继续下去…

我们的局限在于我们提供给它的数据质量、它的行动方式和处理能力…

随着我们制造更高效的芯片,处理能力也在提高。

我们正在收集越来越多的数据。

我们正在物联网、网络、服务和任何地方建立人工智能…

所以这只是时间问题。

因此,就获取我们可能想要的任何东西而言,只不过是训练一种算法,让它利用数据做我们想做的事情。因为那是精灵说的语言。

但是如果你能想到的任何事情都有可能发生…只是要小心你的想法!

2.我们想要什么,就会得到什么。

这里有一些我可以想象的我们想要的东西和我对未来的预测。我带你一步一步扩大规模。

想象一下:

  • 一个可以帮助人们克服抑郁的人工智能:一个带有网络摄像头的对话工具,它可以很好地读取你的面部表情,你的呼吸,你脸上的脉搏,你的话语,你在说什么,你是如何说的。它会找到最好的词语和视觉效果来帮助你摆脱抑郁。想象一下,有你可能希望的最好的朋友&精神病医生?你的梦中情人。嗯,这将是真的。如果有人想给它足够的数据和处理能力,这种情况就会发生。
  • 一个会成为有史以来最好教练的人工智能。基于多种感官数据,将能够告诉任何人他们想要实现的最可选的路线图。一个人工智能可以访问你的心跳,你的视野,音频和更多或更少的数据,这取决于你想要多精确。想想双子座蟋蟀或肩天使,一个会在你需要的时候称赞你,在你需要的时候推你一把,但知道如何保持克制不给你压力的伴侣…一个心灵的 GPS。它会带你去你想去的地方。但是你想去哪里,它会选择带你去哪里?

  • 想象一下,一个将改变公众舆论的人工智能,一个将创作米克尔杰克逊(Mickael Jackson)最佳时期的新原创歌曲的人工智能……一个将让你发笑的人工智能,一个将向你展示你最喜爱的东西的人工智能……一个将唱歌来平静你的头脑的人工智能……一个将让你快乐的人工智能……一个将让你爱上在网络上遇到的陌生人的人工智能。一个人工智能会说服你,卖给你你不知道但你想买的东西。一个比你先知道你想要什么的人工智能(这已经是普遍现象了!亚马逊、网飞、Spotify……)。一个能帮助你理解你在宇宙中的位置的人工智能怎么样?你存在的理由?
  • 或者,也许一个人工智能会在网络上创建随机的个人资料,并编写像这样的中等文章,以输入它希望你或说服你为它做事的新想法???;-)

3.所以小心你的愿望…

我对每一个阅读这篇文章的人的最终警告是,认真想想你会问精灵什么?

  • A.AI 精灵,我想赢得我们的战争。
  • B.AI 精灵,我想给世界带来和平。

这两种说法都可能导致我们的毁灭,这取决于人工智能如何解释它们,以及它会选择哪条道路来解决这个问题。

A.它可以决定,为了赢得所有的战争,它必须创建电子邮件帐户,这些帐户将黑客攻击各种政府计算机,黑客攻击记者帐户和张贴文章,黑客攻击脸书,谷歌等……调整他们的算法,程序或公司结构,以操纵我们的行动,使我们“赢得战争”。

它会像我们使用机器工作一样使用我们的大脑。不小心。没有情感依恋。

它只会按命令行事。

从你的角度来看,你根本不知道刚刚发生了什么。在你眼里,你只是认为那是你妈妈在向你寻求一个不经意的帮助…那台机器黑了你。它比你聪明多了。它知道你会有什么反应。(记住,它比你更了解你)

所有这些每个人都会为某人做的小事情都有助于推动正确的中尉推翻独裁者。通过操纵他们的信息来源说服所有其他人支持他:电子邮件,信息,新闻,短信…

有了足够的处理能力和访问电子邮件地址和网络浏览器,这是可以做到的…

B.它可能会认为,要给世界带来和平,没有比消灭所有人类更有效的方式了。

因为像人类这样有情感的生物不可能从不互相冲突。只有当我们在 ask 中制定它时,它才会决定这样做。

因此,我们应该“极其明确地知道我们想要什么”:

也许我们应该问的是。答:精灵:“我想给世界带来和平,但我不希望任何人在这个过程中死去或遭受任何痛苦。我希望人类有尽可能好的未来”

希望这能保护我们免于更糟的情况。

"小心你想要的东西,因为你可能会得到它"想想你可能不想要的所有不同的事情,如果人工智能选择了一条特定的道路,而你只是达到目的的一种手段?

对我来说,意识到这个公理似乎是人类历史上最重要的安全声明之一。

我们手头拥有的是一种比原子弹更强大的潜在武器。我们可以预测未来,解决癌症,编辑我们自己的基因。我们的想象力和需求将设计我们的未来。

我们有潜力将梦想变成现实。这些梦想的规模将随着我们的数据量和处理能力而增长。

我将结束一个哲学上的审问:

明智到为了自己而决定不去拥有“我们想要的东西”吗?

如果你关心人类的未来,请分享。到处都是。

注意:(除非这篇文章是由一个聪明的 A 写的。我已经试图让你传播它有它自己的议程?你怎么会知道?)

观察学习者学习

原文:https://towardsdatascience.com/watching-a-learner-learn-cd49b9d01dd0?source=collection_archive---------15-----------------------

使用 Keras 和 Matplotlib

除了理解训练算法,更清楚地了解学习者拟合数据时实际发生了什么也是不错的。

我写了下面展示的工具,以配合一个外行人关于机器学习如何工作的演示。其目的是帮助商业领域的专家寻找机器学习,并就解决他们自己的问题和机会进行头脑风暴。我想演示学习的迭代过程,但也想避免让非程序员看代码。

在这样做的过程中,我发现看着一个模特学习是令人着迷的。人们可以看到模型首先关注什么,它很难找到什么,超参数设置如何影响过程,等等。这也有助于调试。

Jupyter 笔记本和一个模块中的所有代码都是 Python。你可以在 Github 上找到代码。

Full video of neural network training

它是如何工作的

机器学习模型是最终的早期交付/中期交付。一旦用随机数据初始化了一个模型,它就是一个工作的发布候选,尽管不是非常精确的。拟合每一批新数据会产生一系列新候选模型中的下一个,平均而言,如果一切顺利,这些模型的质量会逐步提高。

因此,基本的攻击计划是运行一个比批量大得多的代表性数据样本,通过每个候选模型并绘制当前候选模型认为整个目标函数看起来像什么。重要的是,这些结果仅供展示,对训练没有帮助。

Keras 提供了一种机制,允许程序在不同的点插入自己的代码,包括批处理结束。稍后我将讨论如何注册回调。

在我开始之前有两个警告:

  1. 到目前为止,这段代码只适用于具有一个特征和一个标签的 Keras 模型。
  2. 这是狗慢,Keras 会抱怨它。把这个用于学习,而不是生产。更多关于性能以及如何使其易于管理的想法,请参见下文。

绘制模型

我发现最少的有用数据包括 3 件事,这可以在下图左侧的大图中看到

  1. 拟合数据的固定散点图。(灰色圆点填充了大部分情节。)
  2. 最新候选模型的输出图。(蓝色实线。)
  3. 对损失的想象。(实线周围的蓝色阴影区域。)

顺便说一下,这个线性例子只是为了说明。你永远不会真的用神经网络来找到这种关系。但是,您可以获得一些有用的见解,例如,方差似乎与输入变量相关(异方差),并且您会注意到优化器在斜率之前关注截距。

线性示例也有助于获得超参数如何影响训练的直观感觉。例如,尝试不同的学习速率、衰减或批量大小。

Full video of linear training

另外两个有趣的数据系列,特别是对于熟悉机器学习的外行人来说,可以在上图右侧的较小图表中看到:

  1. 整个数据集(或代表性样本)在训练过程中的损失图。
  2. 训练过程中每批的损耗图。

在回调中,计算图表所需的数据非常简单:

y_pred = model.predict(X)loss = np.square(y - y_pred)

请注意,损失是一个向量,表示在代表性样本中的每个数据点,模型有多远。

为了关注模型的哪个部分对损失贡献最大,我添加了一个平滑选项,使用卷积来计算移动平均值。

if loss_smoothing > 1:
    loss = np.convolve(loss,
             np.ones((loss_smoothing,))/loss_smoothing, mode='same')

绘制图形主要是直接使用 Matplotlib,除了每个组件只创建一次,例如

y_pred_line = ax_main.plot(X, y_pred, '-',
                 color='steelblue', lw=4,
                 label='model', zorder=15)[0]

然后,在后续调用中,使用第一次调用中返回的对象更新数据。

y_pred_line.set_ydata(y_pred)

一些小事情需要注意:

  1. 使用 zorder 来控制复杂图形中图层的顺序(什么在什么上面)。
  2. 散点图绘制成本很高,而且不会改变。因此,它在设置期间被绘制一次,并且不再被绘制。
  3. 假设损失是均方误差。理想情况下,这将是可选择和可重写的。
  4. 任何正则化惩罚都被忽略。显示正则化损失并可视化它何时成为损失的重要部分将是有趣的。

一个更复杂的问题是如何创建动画。Matplotlib 包括一个动画库,但它假设它将控制时钟,告诉程序何时重画。我们需要事件驱动的重绘。

使用 %matplotlib inline 时,回调只需要调用 plt.show() 将更改刷新到屏幕。包含下面的语句,告诉 iPython 每次都清除输出图。否则,每个 plt.show() 调用将在前一个图形的下方创建一个新的图形。

clear_output(wait=True)

内联工作有一些限制,特别是图形的大小有限。使用 QT5 或另一个独立的显示器,每次更新数据时都必须刷新绘图事件。

fig.canvas.draw()
fig.canvas.flush_events()

注册回拨

Keras 为滚动回调提供了一个 lambda 选项。

LambdaCallback

keras.callbacks.LambdaCallback(on_epoch_begin=**None**, on_epoch_end=**None**, on_batch_begin=**None**, on_batch_end=**None**, on_train_begin=**None**, on_train_end=**None**)

LambdaCallback() 实际上只是将回调封装在一些代码中,告诉 Keras 何时调用它。

redraw_callback = LambdaCallback(on_batch_end=cb_redraw)

包装后的回调被传递到拟合步骤。

model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size,
          callbacks=[**redraw_callback**])

Keras 向回调传递非常少的信息,例如,不是模型或数据集。因此,为了确保回调得到它需要的东西,闭包是必需的。

def get_redraw(X_in, y_in, model, batch_size, epochs, **kwargs): # [argument processing] # [setup steps] # [initialization of any variables retained between calls] def redraw(batch, logs): # [code that will be run after each batch] # return the closure around the actual callback function
    return redraw

然后,在将调用传递回 model.fit() 的代码中:

cb_redraw = get_redraw( *[arguments]* )redraw_callback = LambdaCallback(on_batch_end=cb_redraw)model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size,
          callbacks=[redraw_callback])

表演

不可回避的事实是,重新运行模型并绘制所有这些图形需要大量时间。根据模型的复杂程度,回调的计算时间可能会使实际训练相形见绌。

没有什么能使它成为一个可用于生产的工具。但是,一些技术有助于将性能提高到对学习有用的水平。

顺便说一下,绘图可能是最慢的部分。此外,Matplotlib 有时会在大型数据集上出错。

回调采用三个参数来管理数据大小:

  • graph_sparsity 可以减少重算中使用的数据量。值为 n 表示仅使用数据点的 1/n
  • scatter_sparsity 对散点图做同样的事情。散点图不会成为性能瓶颈,因为它只绘制一次,但它会导致溢出。
  • loss_smoothing 控制损失线的视觉外观,但也减少了需要绘制的点数。这可能有很大的影响,因为损失是在模型线上下多次绘制的。

另一个重要的性能指标是频率,控制模型评估和重绘的频率。我提供了 3 个频率选项:

  • 标量值 n 表示图表应该每 n 批更新一次。因为训练过程往往在开始时很快,后来很慢,所以这只对较小的数据集有效。
  • true/false 值的数组,每批一个,指示是否更新。请注意,这是批处理运行的总数。它不会在每个时期结束时重置为零。
  • 决定每批是否更新的频率回调,例如,基于模型是否已经改变到值得重画。

获取结果

还有最后一个特性,如果你想存储动画,比如向客户展示。您可以将显示模式设置为“文件”或“屏幕”(默认)。在文件模式下,它会将每个图像作为一个单独的文件保存到指定的路径。

走到最后一步,创建一个动画,大概是很少的 Python 代码,但是我还没有做到。同时,你可以用 iMovie 之类的工具把图片串起来。

观看现代人工智能方法的应用

原文:https://towardsdatascience.com/watching-modern-ai-methods-in-action-929e106d6a7c?source=collection_archive---------6-----------------------

在学习不同的人工智能方法时,我非常有兴趣了解这些方法是如何工作的。不是他们描述内在数学的公式或论文,而是真正的他们。所以,我搜索了一些有趣的例子,并把它们收藏起来,现在我想分享其中最值得注意的例子。

张量流游乐场

这是一个具有许多不同参数的交互式神经网络。您可以选择问题类型,尝试不同的架构,并立即看到培训结果。适合初学者的简单神经网络的完美例子。

链接到 TF 游乐场

逐步构建决策树的直观示例

直观和交互式的决策树介绍。只要继续滚动,一切都会显示出来。有英语、法语、俄语和 10 多种语言版本。

链接开始

如果你对更高级的决策树例子感兴趣,请查看这个。美丽的可视化决策树集成(包括数学)。你也可以在这里玩梯度提升训练。

遗传算法

进化不仅仅是一些生物理论,也是一个伟大的灵感如何与试验。检查进化中的汽车或僵尸。

进化神经网络

构建神经网络可能非常耗时,但遗传算法可以自动完成这一过程。

本页将向你展示进化中的神经网络。

回旋

卷积是许多现代神经网络的非常重要的构件。在这里你可以找到动画,展示这个操作是如何工作的。如果你想看它的运行,请访问 keras-js 。

只要画任何东西,你的浏览器内部的神经网络就会试图识别数字,显示下面所有的中间计算。你也应该看看卷积 VAE 演示,这个网络可以产生许多不同的手写数字只有 2 个输入!用类似的方法,你甚至可以生成面。

强化学习

让我们从高度抽象环境中的简单代理开始。链接

他的目标——尽可能靠近绿点,避免接触红点。通过调整参数,你可以改变他的行为和学习动力。您还可以在上层菜单中找到更多样品。

又一个有很多 RL 技术和简单可视化的网站:

您可以尝试不同设置,看看这些算法如何解决同一任务。此外,你可能会发现每一项都有详细的数学描述。

这些点和网格非常好,但我们需要一些更真实的东西。边浏览边训练自动驾驶汽车怎么样?你可以先试试简化版的 DeepTraffic 。如果你想要一个真正的挑战,去 DeepTesla 。

警告:这些例子可能需要一些编码技巧来调整

数学

现代人工智能背后有相当多的数学知识,很好地理解这些原理对设计这样的系统非常有用。 Setosa.io 对一些底层概念有很好的可视化,比如条件概率、回归、PCA 和马尔可夫链。这里和这里你可以找到马尔可夫链蒙特卡罗方法的交互例子。要获得更多关于机器学习背后的数学的详细信息,请查看distilt . pub。

请分享你最喜欢的可视化!

水泵维护预测:数据-科学图解

原文:https://towardsdatascience.com/water-pumps-maintenance-prediction-data-science-illustrated-20c7100017c5?source=collection_archive---------1-----------------------

Photo by Jainath Ponnala on Unsplash

这篇文章有两个目标:

  • 专注于可以通过机器学习解决的真实(即物理)世界问题
  • 解释机器学习食谱的主要成分

虽然数据分析是一个相当“古老”的话题,但毫无疑问,是最近的数字化浪潮使它成为一个“热门”话题。预测网页点击和在线欺诈的迫切需要尚未对预测模型库产生巨大影响,但它肯定有助于使它们更容易被更多的受众使用。仅 Coursera 上涵盖该主题的 MOOCs 数量就令人印象深刻。反过来,这对非数字化的问题也非常有益:我们在现实世界中面临的问题。

在这篇文章中,我将讨论坦桑尼亚水泵维护的优化。数据集和问题描述可以在 DrivenData.org 的这一页上找到。如果你对预测分析的类似“高社会影响力”应用感兴趣,我在这里整理了一份公开挑战列表:

[## 高影响力数据科学挑战

数据科学是一个相对廉价的实验领域,但它不是免费的:你需要获得大量的数据源…

becominghuman.ai](https://becominghuman.ai/high-impact-data-science-challenges-381e812770e4)

备注:这篇文章使用 Python 作为代码片段,但是在 R 和许多其他编程语言中语法非常相似。

这个数据集的完整 Python 笔记本在这个 GitHub repo 上。

关于非数字变量,先说一句

作为高中生,至少在我这一代,我们可能会在数学/科学课上遇到我们的第一个数据分析问题。因为这些课程着重于数字变量,我们倾向于觉得更符合数字数据建模。然而,许多最具信息性的数据属性是分类的:国家、星期几、职业……此外,总是可以使用“范围”将数字变量转化为离散的类别,而反之则不成立。因此,对于数据科学专业的学生来说,掌握分类变量真的是一件头等大事:它们往往信息量很大,使用起来非常方便。

入门指南

Python 中必需的数据工具包

  • 为了执行常见的数据操作,比如过滤和分组,我们使用了 Pandas 包。Pandas DataFrame 对象保存数据集。
  • 为了构建数据的标准预测模型,我们使用了 scikit-learn 软件包。
  • 【可选】使用 Python 最便捷的方法大概就是使用 conda 包管理器。它允许您用不同的包创建不同的环境,以避免配置冲突。

导入数据

将 CSV 数据集加载到 Pandas DataFrame 对象就像这样简单:

请注意,数据集有两个文件,一个用于预测变量(模型中的 X ),另一个用于目标变量(模型中的 Y)。这在数据挑战数据集上很常见,因为模型的目的是预测 Y,所以在现实生活中你不知道 Y。

处理缺失值和默认值

丰富的数据集包含许多解释变量。候选解释变量越多,我们就越有可能建立一个好的预测模型。

不幸的是,通常每个变量只为记录的子集正确填充,并且跨所有特征指定的记录集太小。为了处理完整的数据集,我们必须提供适当的“虚构”值,而不是缺失的值。

至少有两种方法可以找到丢失的值。

最简单的情况是数据文件中没有值。这是 Pandas 用“ dataframe.isnull ”方法标记的“清除缺失值”场景:

需要仔细目视检查的困难情况,以及缺省值隐藏丢失值的情况,缺省值通常是“0”或“无”。要发现它们,我们需要找到在给定列中出现频率非常高的值。Pandas 通过" dataframe.value_counts "方法向我们提供这些信息:

处理缺失的分类值和布尔值

缺失分类值是最容易处理的:我们认为它们自己形成了一个“缺失”类别。我们使用" dataframe.loc[selector,field] = value "语法重写相关记录,如下所示:

对于布尔字段,我们注意到它们只是二进制类别的一种特殊情况,因此我们将它们转换为字符串编码并用“MISSING”替换空值:

处理缺失的数值和日期值

为了填补一个缺失的日期(对于连续的数字也是如此),我们通常使用平均值或中间值。也有这样的情况(这取决于数据收集的方式),使用一个极值,例如最早的日期可能更合适:例如,我们可以假设没有数据是已知的,因为“那时”的数据收集不正确。

在任何情况下,我们都应该保留现有的信息,即“数据集中缺少的数据”。我们通过在覆盖数据之前添加 0/1 缺失标志列来做到这一点。

处理丢失的 GPS 数据

使用“ dataframe.describe ”方法,我们识别 GPS 坐标的奇怪极值:

  • 最低高度是-90 米,而坦桑尼亚的最低水平是海平面
  • 最小经度是 0 度,而坦桑尼亚在 30/40 范围内
  • 最大纬度是-2.e-08(实际上是 0°),而坦桑尼亚在-1/-11°范围内

我们可以用它们的场平均值来代替这些极值,但我们可以更精确。相反,我们选择正确坐标框中的所有坐标,并计算每个“流域”的平均值,流域是一个很大的地理单位,将国家分为 9 个区域。通过这种方式,我们用局部平均值代替所有不正确的值,而不是用普通的替代值。

与日期和数字空值一样,在覆盖不正确的值之前,我们创建二进制标志来跟踪它们在原始数据集中的存在。

备注:这样的条件平均并不针对地理数据,但这个案例非常适合说明。

编码

修剪高基数分类变量

为了使分类变量具有可靠的预测能力,需要对其进行大量的观察;否则,我们无法对其影响有信心。当然,许多机器学习算法可以自己丢弃不可靠的预测器,以确保鲁棒性,但如果我们能够在上游处理它,它仍然有所帮助。

在下面的代码片段中,我将所有稀有(在包含> 50,000 条记录的数据集中出现的次数少于 40 次)分类值分组为一个“稀有”值。我们使用“ dataframe.value_counts ”方法来实现这一点,我们以前曾使用该方法来查找非常高的频率值。

备注:要深入了解稳健估计的主题,您可以阅读关于套索和脊正则化技术的内容。

编码分类变量

一旦我们完成了对分类列的清理/整理,我们就可以将它们转换成数字,以便将它们输入到我们选择的预测模型中。

我们如何将美国、西班牙、俄罗斯、澳大利亚等数值转化为数字?我们没有!实际上,我们将分类值转化为向量。这可以通过显式编码隐式编码来完成。因为这篇文章的目标是呈现机器学习食谱的一般成分,所以我只呈现一个明确的方法;一键编码

One-hot-encoding 首先将每个值映射到一个索引整数,然后将该整数映射到一个向量,该向量在相应的索引上等于 1,在其他地方等于 0。以美国、西班牙、俄罗斯、澳大利亚为例,我们可以:

  • USA => 0 => (1,0,0,0)
  • 西班牙=> 1 => (0,1,0,0)
  • 俄罗斯=> 2 =>(0,0,1,0)
  • 澳大利亚=> 3 =>(0,0,0,1)

在 Pandas 中,我们使用" pandas.get_dummies "函数执行这种转换,如下所示:

备注:如果你有大量可能的唯一值,向量空间将会非常大并且非常稀疏,但是我们之前已经注意到修剪稀有值。

备注:隐式编码让训练算法确定每个值的最佳向量表示,这通常被称为嵌入,这在文本的神经网络建模中非常常见。要了解更多信息,你可以从这篇博客文章开始。

编码数字变量

在这一阶段,不是绝对有必要进一步转换数值变量,但它可以帮助模型估计阶段(进一步向下)重新调整它们。事实上,根据经验观察(以及理论上理解),如果所有的预测变量都被缩放到一个共同的值范围,那么对数据的模型校准的优化阶段工作得最好。给定的分类变量被编码为 0/1,我们在几个单位的尺度上缩放一切。常用的缩放方法有:

  • 正常:(X[I]-均值(X))/标准偏差(X)
  • min/Max:(X[I]-min(X))/(Max(X)-min(X))
  • 分位数:百分位数(X[i],X)

以下是使用“ pandas.qcut ”函数的分位数编码示例:

编码日期变量

通过使用" dataframe.apply "方法和自定义 Python " lambda "函数拆分日期戳,为年、月、星期添加新功能:

[更高级]编码 GPS 数据

相对于区域划分,GPS 坐标有一个优势:它们考虑了空间顺序,而这在区域名称中是没有的。此外,区域名称并不重要,适当的表示是靠近区域边界的所有区域。然而,区域名有一个优点:稀疏。

充分利用坐标和区域聚类的一种方法是:

  • 在地图上覆盖一个网格
  • “衡量”每个记录的每个网格节点的相关性

在下面的例子中,我覆盖了一个 4x5=20 个节点的网格。让我们将节点标记为 N(1),…,N(20)(顺序无关紧要)。然后,我们向数据集添加 20 个额外的“权重”特征/列,定义如下:

  • 权重(GPS[i],N(1)) =核(距离(GPS[i],N(1)))
  • 权重(GPS[i],N(20)) =核(距离(GPS[i],N(20)))

这里,函数表示高斯函数(具有适当的标准偏差),使得权函数在接近节点时达到最大值。

Image source : https://commons.wikimedia.org/wiki/User:TUBS

备注:由于只有网格节点重要,网格甚至不必是方形的,例如可以由区域中心坐标组成,因为它们可能反映关键位置。

建模

识别高度相关的特征

当数据集中收集了许多信息时,很可能成对的列是高度“相关”的。

在这种情况下,为了避免模型估计过程中的“共线性”问题并减少模型优化问题的维度,我们应该删除一些近似等效的列。

当特征是连续变量时,我们使用简单的相关性度量来识别它们。在分类值的更一般的情况下(记住我们可以将数字转化为分位数),我们使用 克莱姆的 V 统计量 来测量“相关”程度,一个介于 0 和 1 之间的数字,1 表示完全相关。

在本例中,我们看到 3 个地理要素携带相似的信息,因此我们应该删除其中的 2 个。

识别关键预测特征

识别对目标变量有显著预测能力的变量类似于识别“相关”变量。因此,我们可以通过重新使用 列联表克莱姆的 V 统计量:来执行这项任务

逻辑回归:瞧!

经过所有这些细致的数据准备工作,我们终于可以估算出一个预测模型。由于这一切都是由令人敬畏的 scikit-learn 库为我们完成的,因此这可能是最容易的一步!只有一个微妙的问题需要考虑(不是自动化的):将数据集分成两部分。为了避免夸大我们模型的性能,我们应该:

  • 在数据集的一部分进行校准
  • 在数据集的另一部分上测量其性能

我们通过在拆分桌面之前重新调整数据集行的顺序来实现这一点:

进一步建模

虽然逻辑回归是最标准的分类方法,但它很少是表现最好的方法。尽管如此,它仍然提供了一个非常好的基础性能,您可以从中进行迭代。

如果你的数据集预测变量有很多有用的相互作用(参见笔记本),这些模型很可能会优于逻辑回归精度:随机森林(笔记本中有介绍)和 XGBoost

祝你好运!

我们使用的熊猫和 scikit-learn 函数列表

  • 熊猫:功能 read_csv
  • 熊猫:方法数据帧. isnull
  • 熊猫:方法数据帧.值计数
  • 熊猫:方法数据框架. loc
  • 熊猫:功能获取 _ 假人
  • 熊猫:方法数据框架.应用
  • 熊猫:功能 qcut
  • 熊猫:函数交叉表
  • 熊猫:方法数据框架.示例
  • scikit-learn:模型物流回归

1 最后一句话

如果你喜欢读这篇文章,你可以用下面(在左手边)的绿色心形小按钮来提高它的可见度。

谢谢!

Spark 结构化流中的水印技术

原文:https://towardsdatascience.com/watermarking-in-spark-structured-streaming-9e164f373e9?source=collection_archive---------4-----------------------

处理迟到事件是流处理引擎的一个关键功能。这个问题的一个解决方案是水印的概念。并且从 Spark 2.1 开始支持结构化流 API。

什么是水印?

水印是帮助流处理引擎处理延迟的有用方法。基本上,一个水印是一个阈值,用于指定系统等待延迟事件多长时间。如果到达的事件位于水印内,它被用来更新查询。否则,如果它比水印旧,它将被丢弃,并且不会被流媒体引擎进一步处理。

Flooding watermarks

但是,我为什么要在乎呢?

在分布式和网络化系统中,总有可能发生中断——节点故障、传感器失去连接等等。因此,不能保证数据会按照创建的顺序到达流处理引擎。为了容错,因此有必要处理此类无序数据。

为了解决这个问题,必须保留聚合的状态。如果发生延迟事件,可以重新处理查询。但是这意味着所有聚集的状态必须无限期地保持,这导致内存使用也无限期地增长。这在现实世界中是不实际的,除非系统有无限的资源(例如无限制的预算)。因此水印对于通过设计约束系统并防止其在运行时爆炸是一个有用的概念。

怎么用?

自从 Spark 2.1 ,水印被引入结构化流 API。您可以通过简单地将**withWatermark**-操作符添加到查询中来启用它:

withWatermark(eventTime: String, delayThreshold: String): Dataset[T]

它使用两个参数,a)一个事件时间列(必须与聚合正在处理的相同)和 b)一个阈值来指定延迟数据应该被处理多长时间(以事件时间为单位)。然后,Spark 将维持一个集合的状态,直到max eventTime — delayThreshold > T,其中max eventTime是引擎看到的最新事件时间,T是窗口的开始时间。如果延迟数据在此阈值范围内,查询最终会得到更新(下图中的右侧图像)。否则,它将被丢弃,不会触发重新处理(下图中的左图)。

Late donkey in structured word count: event dropped (left), event within watermark updates Window 2 (right).

值得一提的是,查询的输出模式必须设置为"append"(默认设置)或"update”Complete-根据设计,模式不能与水印一起使用,因为它要求保存所有数据,以便将整个结果表输出到接收器。

一个快速演示,如何在一个简单的 Spark 结构化流应用程序中使用这个概念,可以在这里找到——这是一个字数(有一些小的 NLP 增强)还有什么:D****

参考

结构化流媒体编程指南、 Spark 结构化流媒体书籍作者亚采克·拉斯科夫斯基、 databricks 博客、 post 作者马杜、 post 作者 vishnu viswanath 、waitingforcode 上的 post 、 Knoldus 博客、 SoftwareMill 【T21

婴儿的名字和太阳耀斑有什么共同点

原文:https://towardsdatascience.com/wave-cycles-the-pattern-that-rules-the-universe-270e4af0078b?source=collection_archive---------6-----------------------

The ripple effect in water, Pexels

最近,我遇到了“永恒循环”,这是一个古老的印度/埃及/希腊观点,认为宇宙中的一切都是一个循环,过程无限重复。起初,这对我来说是一个荒谬的想法——我肯定能想到几个非循环的例子。尽管我很想驳回这种说法,但是,我很快就开始看到它背后的价值,我无法停止思考这个想法。很快,我到处寻找,发现了循环过程的证据。

这篇文章是我对无所不在的永恒轮回的思考和发现的延伸。我的工作试图为以下关键问题提供证据:

任何看似“随机”的事件可以用循环模式来解释吗?

如果答案是肯定的,我们人类可能会有一种看待宇宙的新方式。我请求你,读者,在阅读这篇文章的时候,保持开放的心态,试着用一种不同的方式来观察这个世界。

波浪周期介绍

本文的前提基于“波浪周期”,这个术语代表一种模式化的行为,从波谷循环到波峰,然后再返回——很像波浪。波浪周期最常见的表示是 f(x) = sin(x)的图形。

Graph of the sine function, created by Abhinav Raghunathan

波动周期是大自然的美丽创造,有可能解释我们在宇宙中观察到的许多现象——人造的和自然的。

这篇文章并不完全是数学性的——相反,它是一项旨在尝试和诊断宇宙在多大程度上受这些波支配的调查。周期行为的应用是无止境的,但是这篇文章的目的是告诉你一些最有趣的,甚至是最奇特的波周期占主导地位的例子。

波的数学导论

波浪的区别因素之一是它们的波峰和波谷——代表最大值和最小值的高点和低点。古埃及、希腊和印度的数学家认识到了这个概念的力量,并发展了三角函数(正弦、余弦、正切等)。).让·巴普蒂斯特·约瑟夫·傅立叶和丹尼尔·伯努利等有影响力的思想家的发展导致了 1807 年“傅立叶级数”的发现,这是一个革命性的概念,表明任何函数都可以表示为这些“波”函数(特别是正弦)的总和。

Fourier Series approximation [3]

本质上,傅立叶引入了逻辑证明,即自然界或宇宙中发生的任何函数都可以表示为波周期的总和。

科学中的循环行为

重复行为与英国物理学家罗伯特·胡克提出的胡克物理学关系最为密切。虎克因发现虎克定律而出名,虎克定律从本质上解释了当弹簧被压缩或拉伸时,膨胀力或收缩力的增加。他的发现彻底改变了经典物理学,但也(令人惊讶地)对科学家模拟量子相互作用的方式产生了深远的影响。他在 17 世纪 60 年代的发现为亨得里克·安顿·洛伦兹等其他科学家发表他的“洛伦兹振荡器模型”铺平了道路这个模型允许物理学家近似电子的运动,就像它被系在弹簧上一样。这种电子的运动反映了简谐振子的运动,它具有轮廓分明的波状模式。

Simple harmonic oscillator [5]

由周期支配的另一个有趣的领域是太阳学,研究太阳及其各种组成部分。感兴趣的具体课题是太阳活动周期。众所周知,这是 11 年一次的重复,这些图案由太阳极小期和太阳极大期组成[8]。像美国宇航局这样的机构利用这种循环模式来预测和识别危险的太阳事件,如日冕物质抛射(CMEs)和太阳耀斑。使用美国宇航局 RHESSI 任务的数据,以下分析表明,2002-2015 年太阳耀斑的总体趋势可以解释为正弦函数的一个周期[6]。

Solar Flares 2002–2015 [14], created by Abhinav Raghunathan

神经科学和心理学中的循环行为

从我们早上起床到晚上睡觉,所有的事情都是由某种类型的波动模式控制的。我们的睡眠周期具有很强的周期性,从急剧下降到“阶段 4”睡眠开始,然后是浅睡眠(REM)和部分觉醒。

Hypnogram of a normal sleep cycle [4]

睡眠之外,甚至我们正常的大脑活动也是波浪式的。当处于警戒状态时,我们的β波看起来像这样:

Beta brain waves [1]

放松或睡觉时,我们的 delta 波看起来像这样:

Delta brain waves [2]

我们的幸福也像波浪一样起伏。心理学和神经科学规定了多巴胺、血清素和内啡肽等神经递质的一部分“兴奋感”,这些神经递质都以类似的重复模式激活神经受体。考虑波动周期的净效应当然很有趣——它们不仅让我们感受情感,还让我们活着。

本节最后一个(可能也是最有趣的)波动周期应用是汽车销售。在美国,众所周知,汽车销售是季节性的——夏季较高,冬季较低。对此的解释是,汽车制造商在夏季左右发布下一代车型,因此经销商经常被迫清理现有库存。还有一种理论认为,在春天,温暖的天气会鼓励消费者购买汽车。事实上,芝加哥大学行为科学系的 Devin G. Pope 进行的一项研究发现,“气温上升 20 度会导致某些汽车的销量显著增加”[7]。虽然这的确很有趣,但这种周期性行为甚至在气候更稳定的地方也存在吗?

下一个合乎逻辑的步骤是在另一个国家测试汽车销售。挪威的季节模式与美国相似,但其温度范围从冬季的约 27 华氏度到夏季的约 64 华氏度。Veitrafikken AS 的opplysningsrdet(一个报告挪威汽车销售统计数据和数字的政治独立组织)的数据用于执行以下分析【13】。

New car sales in Norway 2012–2015 [13], created by Abhinav Raghunathan

似乎汽车销售在一段时间内的分布有两个高峰——一个在早春,另一个在初夏。数据显示,挪威的汽车销售趋势与美国相似,7 月气温最高,1 月最低。即使在这里,波动周期也与季节性一致——这是一个重复的周期,年与年之间没有太大的差异。

其他波浪周期现象

这一节将讲述看似不相关的领域,在这些领域中波动周期以某种方式占主导地位。大多数人只有关于为什么这些现象是波动周期的理论,但它们绝不是随机的产物。

特殊波动周期模式的第一个例子是枪支暴力。Pierre Alexis Geoffroy 博士和 Ali Amad 博士在《美国公共卫生杂志》发表的一篇关于“大规模枪击事件的季节性影响”的论文中,研究了美国大规模枪击事件可能存在的季节性[13]。通过使用一种叫做 余弦模型的先进统计方法,研究人员在 2013 年、2014 年和 2015 年发现了强烈的季节相关性。

下一步是将这一发现扩展到所有形式的枪支暴力。枪支暴力档案馆(GVA) ,一家旨在传播美国枪支暴力相关准确信息的非营利公司,为接下来的探索提供了必要的关键数据[12]。

Gun violence time series decomposition 2014–2018 [12], created by Abhinav Raghunathan

通过时间序列分解,观察到的图被分解成趋势线、季节性成分和随机噪声。这种分解的前提是:

Observed Data = Trend Line + Seasonality + Random Noise

利用这一点,时间序列的季节性成分似乎代表了数据的一个非常重要的部分,表明枪支暴力与季节性密切相关。为了加强这一观点,相同数据的周期图如下所示。

Periodogram for gun violence in the US [12], created by Abhinav Raghunathan

周期图有几个峰值,其中最有意义的位于大约 0.12813 的频率处,这与大约 7.8 个月的波浪周期相关。这表明枪支暴力的模式大约每八个月重复一次。这是一个相当奇特的结果,但仍然是一个有趣的结果——关于为什么这个波动周期以它似乎逃避这个简短研究的方式重复的明确解释。

本文的最后一个例子涵盖了历史上婴儿名字中波周期的存在。一些有趣的文章,如《时代》杂志的“婴儿名字预测者”和对“英国婴儿中心”编辑的采访,发现美国婴儿的名字在某种程度上是周期性的[9][10]。虽然没有对这一现象给出解释,但 Data.gov 发布并托管在 Kaggle 上的美国社会保障应用程序的数据被用来更深入地研究这一波周期[11]。

Baby names over time [9], created by Abhinav Raghunathan

从数据看,这三个名字确实显示出周期性的迹象(尽管如果它们是波周期,它们的周期跨度约为 80 或 90 年),但并非所有名字都是如此。当然,如果这些名字真的需要 80 年才能重新出现,只有时间才能证明新的婴儿名字是否真的是波动周期(至少在美国是如此)。

结论

很明显,周期性行为支配着自然和生活的许多方面。波动周期可能决定一切,从行星运动和太阳活动到我们的睡眠周期,但我们仍然不知道它们的力量。尽管科学和技术尽了最大的努力,模式化行为优越性的真实程度也许永远不会完全为人所知,因为它的影响遍及微观、中观和宏观。周期性是一个如此强大的概念,以至于许多来自印度、埃及和希腊的古老宗教都相信死后轮回的概念。随着技术的进步,越来越多的波动周期和模式化行为的联系变得显而易见(如最近科学新闻中的引力波)——也许有一天我们将能够认识到并充分利用宇宙节律性的力量。

我邀请你,读者,从这篇文章中汲取灵感,用真实世界的数据为自己进行调查。模式统治着我们的世界——要识别它们,关键是你要睁大你的眼睛,打开你的思维!

如果你喜欢这篇文章,请鼓掌并跟随 Delta 理论来到 Medium!

编后记

我在本文中创建的图表和执行的数据科学是用 R 制作的,这是一种因其功能和速度而备受青睐的统计编程语言。我要感谢 R 及其相关库背后的开发人员,没有他们,我的这个小项目就不可能实现。

图书馆:

  • ggplot2,ggthemes
  • 预测,tseries,TSA
  • dplyr,plyr
  • 润滑剂

我用 R 写的数据分析可以在这里找到——如果你想和我讨论这篇文章中的任何信息,你可以在 LinkedIn 上联系我。

引用和免责声明

所有图片均根据知识共享署名-相同分享 3.0 未授权获得许可。

****Images*:*** *[1] Eeg beta* [Image]. (2005, December 22). Retrieved from [https://commons.wikimedia.org/wiki/File:Eeg_beta.svg](https://commons.wikimedia.org/wiki/File:Eeg_beta.svg)*[2] Eeg delta* [Image]. (2005, December 22). Retrieved from [https://commons.wikimedia.org/wiki/File:Eeg_delta.svg](https://commons.wikimedia.org/wiki/File:Eeg_delta.svg)*[3] Fourier series for trig poly high degree* [Image]. (2010, November 15). Retrieved from [https://commons.wikimedia.org/wiki/File:Fourier_series_for_trig_poly_high_degree.gif](https://commons.wikimedia.org/wiki/File:Fourier_series_for_trig_poly_high_degree.gif)*[4] Sleep Hypnogram* [Image]. (2011, December 20). Retrieved from [https://commons.wikimedia.org/wiki/File:Sleep_Hypnogram.svg](https://commons.wikimedia.org/wiki/File:Sleep_Hypnogram.svg)[5] *The Simple Harmonic Oscillator* [Image]. (n.d.). Retrieved July 21, 2018, from The University of Texas at Austin Department of Physics website: [https://web2.ph.utexas.edu%2F~coker2%2Findex.files%2Fsho3.html](https://web2.ph.utexas.edu%2F~coker2%2Findex.files%2Fsho3.html)**Web Pages:**
[6] HESSI Scientific Objectives. (n.d.). Retrieved July 21, 2018, from NASA website: [https://hesperia.gsfc.nasa.gov/hessi/objectives.htm](https://hesperia.gsfc.nasa.gov/hessi/objectives.htm)[7] The Seduction of a Sunny Day: How Weather Biases Car Buying Behavior. (2015, May 14). Retrieved July 22, 2018, from Association for Psychological Science website: [https://www.psychologicalscience.org/news/motr/the-seduction-of-a-sunny-day-how-weather-biases-car-buying-behavior.html](https://www.psychologicalscience.org/news/motr/the-seduction-of-a-sunny-day-how-weather-biases-car-buying-behavior.html)[8] [Solar cycles]. (n.d.). Retrieved July 21, 2018, from NASA StarChild website: [https://starchild.gsfc.nasa.gov/docs/StarChild/questions/question17.html](https://starchild.gsfc.nasa.gov/docs/StarChild/questions/question17.html)[9] Williams, L. (2015, February 2). What's in a Baby's Name? The Cyclical Trends and Spread of Unusual Names. Retrieved July 22, 2018, from Independent website: [https://www.independent.co.uk/life-style/health-and-families/features/baby-names-the-most-popular-cyclical-trends-and-spread-of-unusual-names-10018000.html](https://www.independent.co.uk/life-style/health-and-families/features/baby-names-the-most-popular-cyclical-trends-and-spread-of-unusual-names-10018000.html)[10] Wilson, C. (2014, May 11). How Popular Will Your Name Be in 25 Years? Retrieved July 22, 2018, from TIME website: [http://time.com/93911/baby-name-predictor/](http://time.com/93911/baby-name-predictor/)**Reviewed and Published Datasets:** [11] Kaggle. (2017). *US Baby Names* [data file]. Retrieved from [https://www.kaggle.com/kaggle/us-baby-names/home](https://www.kaggle.com/kaggle/us-baby-names/home)[12] Ko, James. (2018). *Gun Violence Data* [data file]. Retrieved from [https://www.kaggle.com/jameslko/gun-violence-data/home](https://www.kaggle.com/jameslko/gun-violence-data/home)[13] Opplysningsrådet for Veitrafikken AS, “dmi3kno”. (2018). New Car Sales in Norway [data file]. Retrieved from [https://www.kaggle.com/dmi3kno/newcarsalesnorway](https://www.kaggle.com/dmi3kno/newcarsalesnorway)[14] Samaha, Kheiralla. (2017). *Solar Flares from RHESSI Mission* [data file]. Retrieved from [https://www.kaggle.com/khsamaha/solar-flares-rhessi/home](https://www.kaggle.com/khsamaha/solar-flares-rhessi/home)**Scientific Papers:** [15] Geoffroy, P. A., & Amad, A. (2016). Seasonal Influence on Mass Shootings. *American Journal of Public Health*, *106*(5), e15\. [http://doi.org/10.2105/AJPH.2016.303065](http://doi.org/10.2105/AJPH.2016.303065)*

使用外部来源的所有数据和图像从未打算用于商业目的,也没有以任何方式修改。

WaveNet:谷歌助手的语音合成器。

原文:https://towardsdatascience.com/wavenet-google-assistants-voice-synthesizer-a168e9af13b1?source=collection_archive---------1-----------------------

Sundar Pichai, CEO of Google, presents improvements in Google Assistant’s Voice after WaveNet at the I/O conference on May 8, 2018 in Mountain View, California.

有没有想过机器合成人类声音的可能性,听起来几乎像人类一样自然?WaveNet 使之成为可能。

语音合成。串联的。参数化。DL。

让机器合成类似人类的语音(文本到语音)的想法由来已久。在深度学习出现之前,有两种主要的方法来构建语音合成系统,即拼接参数化

在拼接 TTS 中,其思想是从说话者那里收集一长串句子的语音记录,将这些记录分割成单元,并尝试将对应于新呈现文本的单元拼接起来,以产生其语音。由拼接 TTS 产生的语音对于已经存在于原始收集的录音中的文本部分来说听起来很自然,但是对于以前没有见过的文本部分来说,听起来有点失真。除此之外,修改声音将需要我们在一个全新的录音集合上完成所有这些工作。而在参数化 TTS 中,想法是使用参数化物理模型(本质上是函数)来模拟人类的声道,并使用记录的语音来调整这些参数。参数化 TTS 合成的语音听起来比拼接 TTS 更不自然,但通过调整模型中的某些参数来修改语音更容易。

最近,随着 WaveNet 的到来,我们有可能以端到端的方式(从音频记录本身)生成原始音频样本,轻松修改语音,更重要的是,与现有方法相比,听起来明显更自然。这一切都要归功于深度学习的出现。

WaveNet。为什么这么激动?

为了在 WaveNet 和现有的语音合成方法之间进行比较,进行了主观的 5 级 平均意见得分(MOS)测试。在 MOS 测试中,向受试者(人类)呈现从任一语音合成系统生成的语音样本,并要求他们以五分制评分(1:差,2:差,3:一般,4:好,5:优秀)对语音样本的自然度进行评级。

Subjective 5-scale mean opinion scores of speech samples from LSTM-RNN-based statistical Parametric, HMM-driven unit selection Concatenative, and WaveNet-based speech synthesizers.

从条形图中可以清楚地看到,WaveNet 在 5 级 MOS 测试中获得了 4.0 以上的自然度,明显优于其他基线系统,非常接近真实的人类语音。务必在 DeepMind 的博客上查看语音样本,以了解这些方法合成的语音在自然度上的差异!除了能够生成音频样本作为输出, WaveNet 可以很容易地根据各种语音特征,如文本,说话人身份等,以产生符合我们要求的语音。这才是更令人兴奋的地方。

Wavenet。生成模型。

生成模型。那是什么?给定一般的未标记数据点,生成模型试图学习什么概率分布生成那些数据点,目的是通过利用学习到的分布生成新的数据点(类似于输入数据点)。生成模型可以以不同的方式对概率分布建模,隐式地(具有易处理的或近似的密度)或显式地。当我们说生成模型显式地模拟概率分布时,我们的意思是我们显式地定义概率分布,并尝试根据输入的未标记数据点来调整该分布。与此相反,隐式生成模型学习概率分布,该概率分布可以直接用于采样新的数据点,而不需要显式定义它。GANs(生成对抗网络)是目前深度学习的圣杯,属于隐式生成模型的范畴。而 WaveNet 及其同类 Pixel CNN/RNNs 是显式生成模型。

WaveNet 如何对概率分布进行显式建模? WaveNet 试图将数据流 X 的联合概率分布建模为流中每个元素 Xt 的逐元素条件分布的乘积。因此对于一个原始音频波形 X = {X1,X2,X3 … XT}, 联合概率因式分解如下:

因此,每个音频样本 Xt 以所有先前时间步的样本为条件。这看起来是不是类似于时间序列预测模型,其中一个时间步长的观测值取决于之前时间步长的观测值(这就是我们试图使用这些条件分布项建模的内容)?其实 WaveNet 是一个自回归模型。

我们应该如何继续对这些条件分布项建模?作为强大的非线性序列模型,RNNs 或 LSTMs 是最明显的选择。实际上,像素 RNN 利用相同的想法来生成看起来类似于输入图像的合成图像。我们可以用这个想法来产生合成语音吗?语音采样频率至少为 16KHz,这意味着每秒钟至少有 16000 个样本。rnn 或 LSTMs 不能模拟如此长的(大约 10,000 个时间步长的)时间相关性,因为它们最多可以模拟 100 个时间步长的时间相关性,因此它们不太适合语音合成。 此外,训练 rnn、LSTMs 将会非常慢,因为由于它们固有的顺序性质,它们不能被并行化。我们可以用 CNN 来处理这个问题吗?等等,CNN?怎么会?类似于像素 CNN 中已经采用的想法。

CNN。因果关系。扩张了。

我们为什么要尝试 CNN?与 rnn 或 LSTMs 相比,CNN 通常训练得更快,尤其是当应用于长的 1-D 序列时,因为与掩模或滤波器的每个卷积位置相关的操作可以以并行和独立的方式执行。更快的训练。听起来不错!自回归(一个时间步长的输出仅依赖于先前时间步长的输出,而不依赖于未来时间步长的输出)属性如何?这就是因果卷积发挥作用的地方。 1-D 因果卷积可以通过用适当数量的零对要执行卷积的输入 1-D 序列进行左填充,然后执行有效的卷积来容易地实现。与 RNNs 或 LSTMs 相比,因果卷积将允许我们对更长的时间依赖性进行建模(允许我们指定回看长度)。

Causal Convolutions to make sure that the model cannot violate the ordering in which we model the data.

太好了!我们已经轻松地解决了自回归违规。但是,如何管理数千个样本的订单的回顾长度呢(因此,我们的模型在得出关于当前时间步长的输出的结论之前,至少要回顾一秒钟的音频)?我想到的最简单的事情就是将滤波器的尺寸增加到足够大,以使回看长度适当,但这真的有帮助吗?在我看来,这样做将减少模型的非线性,这反过来将使我们的模型难以学习复杂的时间依赖性,从而限制我们模型的性能。你可能想到的下一件事是增加神经网络的层数。可能会有帮助。但是,这在计算上是不可行的,因为感受野的大小或输出中时间步长的回望长度随着模型中隐藏层的数量而线性增加,并且对于我们来说,具有几千个隐藏层的模型在计算上是不明智的。现在,我们不得不限制隐藏层的数量和过滤器的大小,同时增加回看长度?我们将如何着手做这件事?扩张的脑回会帮助我们。

扩张卷积试图通过在大于其长度的区域上应用过滤器并以一定的步长跳过输入值来增加回望长度或感受野大小。它相当于从原始滤波器通过用零扩展而得到的更大滤波器的卷积,但效率明显更高。在 WaveNet 中,多个扩大的卷积层一层一层堆叠起来,只有几层就有非常大的感受野。扩张因子的指数增加(加倍)导致感受野随深度的指数增长。

Stack of dilated causal convolutional layers: Doubling the dilation factor with each layer results in O(2^n) receptive field growth.

Softmax 分布。Mu-law 压扩。

为了对条件概率建模,WaveNet 采用 softmax(分类)分布而不是其他混合模型,因为分类分布更灵活,并且可以更容易地对任意分布建模,因为它不对它们的形状进行假设。原始音频通常存储为一系列 16 位整数值(32,768 至 32,767),使用 softmax 层输出概率分布将要求我们的模型在每个时间步长输出 65,535 个值。这不是会拖慢我们的模型吗?肯定会的。对此我们能做些什么?减少位深度在这里是可行的。如果我们继续使用线性位深度(除以 256 ),减少将对低振幅样本产生比高振幅样本更大的影响。假设一个 16 位样本的原始值为 32767,这是可能的最大正值。转换为 8 位后,样本值变为 127 (32767/256 = 127,余数为 255),舍入误差为 255/32768。这是小于 1%的量化误差。但与最低幅度 16 位样本(0 至 255 之间)的误差相比。当减少到比特深度 8 时,它们都舍入到零,这是 100%的误差。关键在于,对于线性位深度缩减方法,向下舍入对低振幅样本的影响比对高振幅样本的影响更大。如果我们能够重新分配样本值,使得在较低幅度处有更多的量化级别,而在较高幅度处有更少的量化级别,则可以减少这种量化误差。这就是为什么在 WaveNet 中使用 Mu-law 压扩(一种非线性量化)而不是简单的线性量化。

Expression to carry out Mu-law companding results in a better (sounds similar to original audio) reconstructed output than linear quantization.

在上面的表达式中,1 < Xt < 1(从 32,768…32,767 到 1…1 重新采样的不同时间步长的音频采样)和= 255。这将使模型在每个时间步只输出 256 个值,而不是 65,535 个值,从而加快训练和推理。

门控激活。跳过和剩余连接。

非线性激活函数在任何深度学习模型中都是必不可少的,以学习输出和输入之间的复杂关系。 RELU 最初在 WaveNet 中使用,但在进行实验后,发现具有 sigmoid 激活的非线性双曲正切门控(受 Pixel CNN 启发)更适合 WaveNet。

Expression for gated activation function used in WaveNet.

在上面的表达式中, W 表示可学习的滤波器, ******* 表示卷积算子,圈起来的点表示逐元素的乘法。剩余连接(将底层的输出添加到上层的输出)和跳过连接(将底层的输出直接添加到输出层)已被发现在减少神经网络的收敛时间和训练更深的网络方面是有用的。因此,在 WaveNet 的架构中采用了它们,如下图所示。

WaveNet’s architecture: showing gated activation function, skip connections and residual connections.

调理。本地的。全球。

我们还没有讨论如何根据各种特征,如说话者身份、相应的文本等来调节输出语音。 WaveNet 的输出语音可以以两种方式进行调节:全局调节,单个特征偏置所有时间步长的输出,如说话人身份或局部调节,具有多个特征,实际上是不同时间序列的特征,其偏置不同时间步长的输出,如语音的底层文本。如果我们更正式地表达这一点,那么这将意味着在实际模型中的条件分布项中引入新的参数(局部调节中的 Ht 和全局调节中的 H )。

Modified conditional distribution term, after introduction of a conditioning input.

在局部调节中,调节输入的时间序列可能比音频的时间序列长度短,对于局部调节,要求两个时间序列的长度必须相同。为了匹配长度,我们可以使用转置 CNN(一种可学习的上采样方案)或其他上采样方案来增加条件输入的长度。

Expression after introduction of the bias term h.

在上面的表达式中, V 是可学习的线性投影,其本质上服务于两个目的:变换以校正尺寸和学习用于偏置输出的正确权重。

很棒的模型。快速训练。推理慢?

WaveNet 的架构,无论我们到目前为止谈论了什么,都很好地捕捉了复杂的时间依赖性和条件。除此之外,由于高度并行化,它在训练时真的很快。但是推论呢?由于一个时间步长的输出依赖于前一个时间步长的输出,因此对新音频的采样本质上是连续的。产生 1 秒钟的输出大约需要 1 分钟的 GPU 时间。如果谷歌在他们的助手上部署了这种模式,那么像“嘿,谷歌!天气怎么样?”。那他们是如何提高推断时间的呢?IAF 就是答案。

使流量正常化。IAF。

正常化流程?标准化流程是一系列转换,它学习从简单概率密度(如高斯分布)到丰富复杂分布的映射(双射)。假设你从概率分布 q(z) 和概率分布 q(x) 中采样了足够多的点,那么可以使用归一化流来学习变换,该变换将从【q(x)中采样的点映射到其在分布 q(z) 中的对应映射。这是怎么做到的?让我们考虑一个变换 f ,一个可逆且平滑的映射。如果我们用这种映射来变换一个随机变量【q(z),那么得到的随机变量【z’= f(z)有一个分布【q(z’:**

为了直观地了解我们是如何得到这个变换后的随机变量分布的表达式的,请查看 Eric Jang 的博客文章。一次变身 f 够吗?事实上,我们可以通过组合几个简单的变换,并连续应用上述表达式来构造任意复杂的密度。通过一系列变换 fk 连续变换一个随机变量z0Q0得到的密度 qK(z) 为:**

这些变换 fi 的 中的每一个都可以容易地使用矩阵乘法(具有可学习的值)来建模,之后是诸如 ReLU 的非线性。然后,想法是用您最喜欢的优化算法更新变换的可学习参数,通过在变换的概率分布 qK(z)下优化从【q(x)采样的点的似然性(对数似然性)。** 这将使分布q(x) 非常相似,从而学习从 q(z)q(x) 的适当映射。**

Distribution flows through a sequence of invertible transforms.

规范化流程的想法如何帮助我们进行快速推理?请记住,WaveNet 是一个生成模型,除了尝试学习会产生训练数据的概率分布之外什么也不做,因为它是一个显式定义的生成模型(具有易处理的密度),所以我们可以很容易地学习一个变换,该变换可以将点从简单分布(如高斯分布)映射到 WaveNet 学习的复杂分类分布。如果学习到的标准化流程具有快速推理方案,那么我们在 WaveNet 中的慢速推理问题可以很容易地得到解决。IAF(逆自回归流)可以很好的适合这个思路。

在 IAF 中,想法是首先从z∞Logistic(0,I)** 中抽取随机样本,然后对抽取的样本应用以下变换,**

A simple scale and shift transform on zt where scaling factor (s) and shifting factor (µ) are computed by using learnable parameters (θ) and values in input sample z from previous time-steps.

为了输出时间步长 xt 的正确分布,逆自回归流可以隐式地推断它在先前时间步长 x1,.。。,XT 1基于噪声输入 z1,.。。,ZT 1,允许其并行输出所有 xt 给定的 zt 。下图会让事情变得更清楚(注意变化的符号)。

In Inverse Autoregressive Flow, outputs at different time-steps can be computed in parallel because the output of a time-step isn’t dependent on the output of previous time steps.

太好了!IAF 具有快速推理方案(甚至可以并行计算易处理的条件概率),但是它们训练起来较慢。为什么?因为如果给我们一个新的数据点,并要求我们评估密度,我们需要恢复,这个过程本来就是连续的,速度很慢。并行 WaveNet 利用了这一事实,提出了使用简单 WaveNet(教师 WaveNet)训练 IAF(学生 WaveNet)的概念。

平行。更快。WaveNet。

在并行 WaveNet 中,想法是利用 IAF 具有快速推理方案的事实。因此,在第一阶段,我们训练出一个简单的 WaveNet 模型(我们称之为教师培训)。在第二阶段,我们冻结教师 WaveNet 的权重,并利用它来训练一个 IAF(学生蒸馏)。其思想是首先从z∞Logistic(0,I)*** 中抽取一个随机样本,以并行方式通过 IAF。这将为我们提供转换分布的要点以及相关的条件概率。想法是在简单的教师波网上传递变换分布中的这个点,这将产生关于已经训练的教师波网的条件概率。然后,我们尝试最小化从任一模型接收的条件概率之间的 KL-散度。这将允许 IAF(学生 WaveNet)学习与其教师几乎相似的概率分布,并且结果验证了这一事实,因为从教师和学生 WaveNet 接收的输出之间的 5-标度 MOS 分数几乎可以忽略不计。***

Parallel WaveNet’s training procedure.

这样部署够快吗?是的,它是。事实上,它能够以超过实时 20 倍的速度生成语音样本。但是还有一个问题,每次我们需要重新训练我们的模型时,我们会先训练老师的 WaveNet,然后再训练学生的 WaveNet。此外,学生 WaveNet 的表现在很大程度上取决于教师 WaveNet 的培训程度。但总的来说,去部署还是不错的。

“空谈是廉价的。给我看看代码。”

在线上有许多简单 WaveNet 的实现。对于并行实现,我还没有找到一个。

  1. 在 Keras 中实施
  2. py torch 中的实现
  3. tensor flow 中的实现(这是网上引用最多的一个)

参考资料:

  1. 音频压缩扩展。
  2. NLP 任务中的卷积层。
  3. 扩张的脑回。
  4. 规范流程:Eric Jang 的教程- 第 1 部分,第 2 部分。变分推理与规范化流程(论文)。
  5. 深度语音:实时神经文本到语音转换(Paper) :附录对于理解 WaveNet 相当有用。
  6. wave net:raw 音频(纸张)的生成模型。
  7. P 平行波网:快速高保真语音合成(论文)。
  8. PixelCNN,Wavenet &变分自动编码器—圣地亚哥 Pascual — UPC 2017。

检测和移除异常值的方法

原文:https://towardsdatascience.com/ways-to-detect-and-remove-the-outliers-404d16608dba?source=collection_archive---------0-----------------------

Unsplash — A small lone mushroom on moss

在从事数据科学项目时,你在寻找什么?EDA 阶段最重要的部分是什么?有些事情如果不在 EDA 阶段完成,会影响进一步的统计/机器学习建模。其中之一就是寻找“离群值”。在这篇文章中,我们将试着理解什么是离群值?为什么识别异常值很重要?有哪些剔除异常值的方法?不要担心,我们不会只讨论理论部分,我们还会对数据进行编码和绘图。

遇见异数

维基百科的定义,

在统计学中,异常值是指远离其他观察值的观察点。

上述定义表明,离群值是与人群分离/不同的东西。很多激励视频建议与众不同,尤其是马尔科姆·格拉德威尔。从统计学的角度来看,这是否也是一件好事?我们将通过这篇文章找到答案。

数据收集和异常值

我们现在知道什么是异常值,但是,您是否也想知道异常值是如何引入到人群中的?

数据科学项目从收集数据开始,这也是离群值首次引入人群的时候。但是,在收集阶段,您根本不知道异常值。异常值可能是数据收集过程中出现错误的结果,也可能只是数据中出现偏差的迹象。

让我们来看一些例子。假设你被要求观察印度板球队的表现,即每个球员的跑动并收集数据。

Collected data

从上面收集的数据可以看出,除了 10 分的 Player3,其他玩家都是 300+。这个数字可能只是一个键入的错误,或者它显示了你的数据中的差异,表明 Player3 表现非常差,因此需要改进。

现在我们知道异常值可能是一个错误或者仅仅是一个方差,你将如何决定它们是否重要。如果它们是错误的结果,那就很简单了,我们可以忽略它们,但是如果它只是数据中的一个差异,我们就需要想得更远一些。在我们试图理解是否忽略离群值之前,我们需要知道识别它们的方法。

寻找异常值

你们大多数人可能会想,哦!我只需要一个峰值数据就可以找到异常值,就像我们在前面提到的 cricket 例子中所做的那样。让我们考虑一个有 500+列和 10k+行的文件,你还认为可以手工找到离群值吗?为了便于发现异常值,我们有大量的统计方法,但我们将只讨论其中的几个。大多数情况下,我们会试图看到可视化方法(最简单的方法)而不是数学方法。

那么,让我们开始吧。我们将使用包含在 sklearn 数据集 API 中的波士顿房价数据集。我们将加载数据集,并分离出特征和目标。

boston = load_boston()
x = boston.data
y = boston.target
columns = boston.feature_names#create the dataframe
boston_df = pd.DataFrame(boston.data)
boston_df.columns = columns
boston_df.head()

Boston Housing Data

特征/独立变量将用于寻找任何异常值。看上面的数据,似乎我们只有数值,也就是说,我们不需要做任何数据格式化。(叹气!)

我们将遵循两种类型的分析来发现异常值-单变量(单变量异常值分析)和多变量(两个或多个变量异常值分析)。不要搞混了,当你开始编码和绘制数据时,你会发现发现异常值是多么容易。为了简单起见,我们将从检测异常值的基本方法开始,然后慢慢转向高级方法。

使用可视化工具发现异常值

盒子剧情-

维基百科的定义,

在描述统计学中,箱线图是一种通过四分位数图形化描述数字数据组的方法。盒状图也可以有从盒状图垂直延伸的线(须状图 ) 表示上下四分位数之外的 可变性,因此有盒须图和盒须图之称。异常值可能被标绘单个点。

上述定义表明,如果有一个异常值,它将被绘制为箱线图中的点,但其他群体将被分组在一起,并显示为方框。让我们自己试试看。

import seaborn as sns
sns.boxplot(x=boston_df['DIS'])

Boxplot — Distance to Employment Center

上图显示了 10 到 12 之间的三个点,这些是异常值,因为没有包括在其他观察值的框中,即没有靠近四分位数的地方。

这里我们分析了单变量异常值,即我们仅使用 DIS 列来检查异常值。但是我们也可以做多元异常分析。我们能用箱线图做多元分析吗?视情况而定,如果您有一个分类值,那么您可以将它用于任何连续变量,并进行多元异常值分析。由于我们在波士顿住房数据集中没有分类值,我们可能需要忘记使用箱线图进行多元异常值分析。

散点图-

维基百科定义

散点图,是一种使用笛卡尔坐标显示一组数据的典型两个变量的值的图表或数学图。数据显示为点的集合,每个点具有确定水平轴上位置的变量的值和确定垂直轴上位置的其他变量的值。****

顾名思义,散点图是显示两个变量的值的点的集合。我们可以试着从我们的住房数据中画出两个变量的散点图。

fig, ax = plt.subplots(figsize=(16,8))
ax.scatter(boston_df['INDUS'], boston_df['TAX'])
ax.set_xlabel('Proportion of non-retail business acres per town')
ax.set_ylabel('Full-value property-tax rate per $10,000')
plt.show()

Scatter plot — Proportion of non-retail business acres per town v/s Full value property tax

看上面的图,我们可以发现大部分数据点位于左下角,但也有一些点远离人群,如右上角。

用数学函数发现异常值

Z 值-

维基百科定义

Z 值是一个观察值或数据点高于所观察或测量的平均值的标准偏差的有符号数。

Z-score 背后的直觉是通过找到它们与数据点组的标准差和均值的关系来描述任何数据点。Z-score 是寻找平均值为 0 且标准差为 1 的数据分布,即正态分布。

您一定想知道,这对识别异常值有什么帮助?嗯,在计算 Z 分数时,我们重新调整数据的比例并将其居中,寻找离零太远的数据点。这些离零太远的数据点将被视为异常值。在大多数情况下,使用阈值 3 或-3,即如果 Z 分值分别大于或小于 3 或-3,则该数据点将被识别为异常值。

我们将使用 scipy 库中定义的 Z 分数函数来检测异常值。

from scipy import stats
import numpy as npz = np.abs(stats.zscore(boston_df))
print(z)

Z-score of Boston Housing Data

看看上面的代码和输出,很难说哪个数据点是异常值。让我们尝试定义一个阈值来识别异常值。

threshold = 3
print(np.where(z > 3))

这将产生如下结果-

Data points where Z-scores is greater than 3

不要被结果迷惑。第一个数组包含行号列表,第二个数组包含相应的列号,这意味着 z[55][1]的 Z 得分高于 3。

print(z[55][1])3.375038763517309

因此,ZN 列上的数据点—第 55 条记录是异常值。

IQR 得分-

箱线图使用 IQR 方法来显示数据和异常值(数据的形状),但为了获得已识别异常值的列表,我们需要使用数学公式并检索异常值数据。

维基百科定义

四分位数间距 ( IQR ),也称为中间分布中间 50% ,或技术上的 H 分布,是统计离差的度量,等于第 75 个和第 25 个百分位数之间的差值,或上下四分位数之间的差值,IQR =Q3—Q1。

换句话说,IQR 是第三个四分位数减去第一个四分位数;这些四分位数可以在数据的箱线图上清楚地看到。

它是离差的一种度量,类似于标准差或方差,但对异常值更稳健。

在寻找数据的分布,然后保留一些阈值来识别异常值方面,IQR 有点类似于 Z-score。

让我们看看我们可以使用 IQR 来绘制箱线图,以及如何使用它来查找异常值列表,就像我们使用 Z 得分计算一样。首先我们将计算 IQR,

Q1 = boston_df_o1.quantile(0.25)
Q3 = boston_df_o1.quantile(0.75)
IQR = Q3 - Q1
print(IQR)

这里我们将得到每列的 IQR。

IQR for each column

现在我们有了 IQR 分数,是时候抓住异常值了。下面的代码将给出一个包含真值和假值的输出。False 表示这些值有效的数据点,而 True 表示存在异常值。

print(boston_df_o1 < (Q1 - 1.5 * IQR)) |(boston_df_o1 > (Q3 + 1.5 * IQR))

Detecting outlier with IQR

既然我们知道了如何检测异常值,那么了解它们是否需要被删除或纠正就很重要了。在下一节中,我们将考虑一些去除异常值的方法,如果需要,还可以输入新值。

使用异常值:更正,删除

在数据分析过程中,当您发现异常值时,最困难的决策之一可能是如何处理异常值。他们应该删除它们还是纠正它们?在讨论这个问题之前,我们先来看看去除异常值的几种方法。

Z 分数

在上一节中,我们看到了如何使用 Z 分数来检测异常值,但现在我们想要移除或过滤异常值并获得干净的数据。这可以用一行代码来完成,因为我们已经计算了 Z 值。

boston_df_o = boston_df_o[(z < 3).all(axis=1)]

With and without outlier size of the dataset

因此,上述代码从数据集中删除了大约 90+行,即离群值已被删除。

IQR 得分-

就像 Z-score 一样,我们可以使用之前计算的 IQR 分数,通过只保留有效值来过滤出异常值。

boston_df_out = boston_df_o1[~((boston_df_o1 < (Q1 - 1.5 * IQR)) |(boston_df_o1 > (Q3 + 1.5 * IQR))).any(axis=1)]boston_df_out.shape

上述代码将从数据集中删除离群值。

有多种方法可以检测和移除异常值但是我们在本练习中使用的方法被广泛使用并且易于理解。

是否应该移除异常值。每个数据分析师/数据科学家可能在他们处理的每个问题中都有一次这样的想法。我发现了一些很好的解释-

https://www . research gate . net/post/When _ is _ it _ justificial _ to _ exclude _ outlier _ data _ points _ from _ statistical _ analyses

https://www . research gate . net/post/Which _ is _ the _ best _ method _ for _ removal _ outliers _ in _ a _ data _ set

https://www . the analysis factor . com/outliers-to-drop-or-not-to-drop/

总结他们的解释-坏数据,错误的计算,这些可以被确定为异常值,应该被删除,但同时你可能也想纠正它们,因为它们改变了数据的级别,即意味着当你建模你的数据时会导致问题。前 5 名员工的工资分别是 10K、20K、30K、40K 和 50K,突然其中一人开始拿到 100K 的工资。考虑这种情况,因为你是雇主,新的工资更新可能会被视为有偏见的,你可能需要增加其他员工的工资,以保持平衡。因此,您可能有多种原因想要了解并纠正异常值。

摘要

在整个练习中,我们看到了在数据分析阶段如何遇到一些不寻常的数据,即异常值。我们了解了可以用来检测和消除这些异常值的技术。但是有一个问题是关于保证是否可以移除异常值。为了回答这些问题,我们找到了进一步的阅读材料(这些链接在前一节中提到过)。希望这篇文章能帮助读者了解异常值。

注意- 在本练习中,使用了以下工具和库。

框架- Jupyter 笔记本,语言- Python, - sklearn 库,Numpy,Panda 和 Scipy, Plot Lib- Seaborn 和 Matplot。

参考文献

  1. 波士顿数据集
  2. Github 回购
  3. KDNuggets 离群值
  4. 检测异常值

改善地图可视化的方法

原文:https://towardsdatascience.com/ways-to-improve-a-map-visualization-ba3dc083b3cb?source=collection_archive---------10-----------------------

如何让地图可视化更上一层楼?

Photo by Joey Csunyo on Unsplash

首先,我将介绍为什么使用地图可视化数据通常会吸引观众的两个原因。然后,我将介绍三个技巧,帮助您在构建地图可视化时从优秀过渡到卓越。

为什么要使用地图进行数据可视化?

它将为你的数据提供重要的背景。

让我们从一个假设的场景开始。这是你工作的第一周,你的任务是向公司老板汇报每月的销售业绩。财务部的罗恩会把数据发给你,你会把一些幻灯片放在一起。应该是小菜一碟。如果你打开数据文件,只有一个数字呢?

就我个人而言,我希望财务部的罗恩对新员工开了一个有趣的玩笑。你知道我要去哪里吗?数据需要上下文才能为受众提供价值。销售额与上月相比是上升还是下降?谁是我们的顶级销售代表?销售收入如何与利润挂钩?不管你公司的老板有多好——如果这是你在会议上唯一带去的东西,那很可能不会有好结果。

还记得那些 五个 w吗?谁,什么,哪里,什么时候,为什么。这个列表是为了帮助记者们在构思故事之前弄清楚一个主题的重要背景。它之所以有效,是因为它们也是观众想知道的东西。从这个意义上说,做记者和用数据交流没有太大区别。在您构思数据故事之前,请尝试在地图上绘制数据。这样可以快速求解出在哪里

从年轻时开始,我们都接触过地理概念。

数据可视化设计师 Ryan Sleeper 在他的书《实用的 Tableau》中写道,“地图的力量来自于它们固有的利用用户多年来构建的模式的能力。”

这是一个巨大的优势,因为观众可以快速理解地图可视化。理解可视化设计的努力越少,就越能专注于可视化中的数据所表达的内容。你解码第一张图片和第二张图片需要多长时间?

Visualization: Shelby Temple, made with Tableau; data: Tableau Sample Superstore

Visualization: Shelby Temple, made with Tableau; data: Tableau Sample Superstore

将地理学引入数据可视化还有很多原因,但我认为这足以证明这种类型的可视化有显著的优势。如前所述,让我们来看看如何让地图可视化更上一层楼的一些技巧。

1。使用绿色或岩浆色

当选择数据可视化的颜色时,我注意到人们经常选择最吸引他们的颜色。不幸的是,这不是最好的方法——因为对你有吸引力的可能对其他人没有吸引力。

数据可视化需要有最能引起观众共鸣的颜色。此外,它应该导致快速和准确的决策。使用某些调色板(如 Jet,Python 包 Matplotlib 的旧默认调色板)会导致决策速度变慢且不准确。

不用担心,Nathaniel Smith 和 Stefan van der Walt 已经创建了开放源代码调色板,这些调色板丰富多彩,漂亮,可供色盲观众使用,现在研究支持成为快速准确决策的有效调色板。

Visualization: Shelby Temple, made with Tableau; Inspired by work of Jacob Olsufka; Data: Temperature data from MarkieAnn Packer

Jet 的缺点是在感觉上不一致或对色盲不友好。根据颜色范围加热,容易洗掉。

如果你想了解更多关于色彩理论和绿色的发展,这个来自创作者的视频 既有娱乐性又有知识性。

此外,这里是 的一篇文章 ,Viridis 与其他常见调色板进行了测试,在速度和决策准确性方面表现良好。

快速感谢 Ben Jones,他的 Tweet 最初引起了我对这些调色板的注意。

2。使用六边形瓷砖网格图

Hex 平铺网格地图是最近创建的,作为对平铺网格地图的改进。创建平铺网格地图是为了处理一些问题,例如试图创建一幅美国与阿拉斯加和罗德岛的地图。阿拉斯加需要太多的视觉地产,而罗德岛经常迷路。在这里,我画出了各州平均龙卷风路径长度。

Visualization: Shelby Temple, made with Tableau; data: https://www.ncdc.noaa.gov/stormevents/

Visualization: Shelby Temple, made with Tableau; Inspired by work of Matt Chambers; data: https://www.ncdc.noaa.gov/stormevents/

这些地图很像美国的参议院,每个地区都有平等的(视觉)代表。罗德岛现在和阿拉斯加一样大,但是这个位置仍然让观众明白他们正在看美国的可视化地图。

六边形栅格地图通过允许相同距离的更多相邻形状而改进了平铺地图。距正方形瓷砖中心的距离仅在上、下、左和右是相同的。对角方块的中心距离更远。在六边形栅格地图中,您可以将更多的图块放在一起,从而提高地图的方向准确性。

我通过 Matt Chambers ( ,他在 Tableau )到 2015 年在 NPR 从事数据新闻工作的 Danny DeBellus、Alyson Hurt 和 Brian Boyer,追踪了作为数据可视化的 hex grid map 的创建。这里是 那条

3。去掉边框,增加密度

国家、州、城市和邮政编码非常有用,因为它们提供了一种一致的分层方式来按地理位置浏览数据。

然而,许多空间现象并不局限于这些人为的边界。一个入室抢劫犯会不会走到一个邮政编码的边界,耸耸肩,然后说,“哎呀!我猜是时候转身了。”—可能不会。

像强盗一样,龙卷风也不在乎邮政编码。这使得它成为密度热图的绝佳候选。

Visualization: Shelby Temple, made with Tableau; data: https://www.ncdc.noaa.gov/stormevents/

密度图通过聚类来可视化数据。这允许对任何新兴模式的真正理解,因为它们不局限于想象中的人为边界。

我看到这个问题发生的一个常见例子是按州查看数据。圣路易斯位于伊利诺伊州和密苏里州的交界处。按州查看您的数据会将这个大都市切成两半,该区域的任何模式或趋势都可能丢失。

结论

这些是我最喜欢的改进地图的方法。如果你正在寻找更多,我建议检查一下使用距离或半径过滤器归一化人口数据

留给你最后一张可以欣赏的地图!

我们是美国

原文:https://towardsdatascience.com/we-are-america-ebc58a0d1d61?source=collection_archive---------13-----------------------

谁组成了我们这个国家?

“American flag” by Thomas Ashlock on Unsplash

我偶然看到这篇关于如何在 R 中创建点密度图的教程帖子,它非常详细,所以我决定用美国人口普查数据试一试。每年都要收集全国的人口构成数据。在这里,我使用在县一级收集的特定种族和民族的人口普查估计数。所有提取和绘制数据的代码都贴在这里。

本教程提供了一些将县估计值转换为点数据的函数。在收集数据并转换成点之后,使用 ggplot2 对其进行映射就非常简单了。

按种族和民族划分的美国人口地理分布

我错误判断了最终会得到的数据点的数量,所以地图有点拥挤。然后,我认为这作为一个互动的情节会更好,并决定我将创建一个闪亮的应用程序——尽管这被证明是一个令人沮丧的过程。所以,我选择了画面…是的,我知道你在想什么:

在我的辩护中,我以前从未建立过一个闪亮的应用程序,我会用一个更简单的项目再试一次。Tableau 相对简单,但需要一些数据准备。在连接到仪表板之前,我必须将点数据提取到 shapefile 中,然后在 QGIS 中编辑该文件(必须删除夏威夷和阿拉斯加)。

当我写这篇文章的时候,我知道你不能在媒体中嵌入画面。这里可以找到互动剧情。

更好的是,我留给你这个…

我们是拼贴

原文:https://towardsdatascience.com/we-are-collage-e2c27a6198b2?source=collection_archive---------10-----------------------

“Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks” Published in ICCV 2017

达达、Instagram 和人工智能的未来

拼贴是当下的语言,但已经有 100 多年了。让我们来看看它从哪里来(达达),它现在怎么样(Instagram),以及为什么它对人工智能的未来不可或缺(深度假货,GANS 和根深蒂固的副本)。

昨天:达达

虽然最简单形式的剪切和粘贴技术可以追溯到公元前 200 年左右中国发明纸张的时候,但是直到 20 世纪初现代主义的早期阶段,艺术家们采用大规模生产的印刷媒体作为材料,拼贴才成为一种不可或缺的交流方式。入场,舞台左边汉娜·霍奇。

Hannah Höch, Da-Dandy, 1919

霍赫是一位德国达达主义者,在两次大战之间的威玛时期一直工作到二战结束。她的作品对魏玛政府的失败、她那个时代的社会约束和对女性角色的规定,以及日益泛滥的流行文化进行了超现实主义的探索。在一段支离破碎、混乱不堪的时间里,霍奇用时尚杂志、报纸和照片的碎片来构建她的作品,声称“绘画拼贴的材料没有限制——首先,它们可以在摄影中找到,也可以在文字和印刷品中找到,甚至可以在废品中找到。”(1)她的作品拥抱矛盾,揉合了当时的性别、种族、政治和物质紧张关系,包括一头扎进今天仍然普遍存在的艺术与工艺部落主义。

“[刺绣]是一种艺术,应该像艺术一样对待……你们,女工匠,现代女性,你们觉得你们的精神在你们的作品中,你们决心要求你们的权利(经济和道德),你们相信你们的脚在现实中牢牢地扎根,至少你们应该知道你们的刺绣作品是你们自己时代的记录。”

—汉娜·霍奇,刺绣和蕾丝,1918 年

Hannah Höch, Untitled (Large hand over woman’s head), 1930

但是霍奇,这也是我选择和她一起开始的原因之一,她不仅粉碎了这些珍贵的印刷材料,她还制作了它们。十多年来,正如 Artsy.net 的 Madeleine Boucher 所写的,“白天,hoch 为女性爱好期刊和插图日报设计刺绣图案,而到了晚上,她就在自己的作品中把这些图像撕成碎片。她的作品经常猛烈抨击那些杂志重新包装并作为时尚推广的女性和美化家庭生活的理想。(2)

拼贴重视这种与无所不在的文化材料的双重关系,但这种立场是一把双刃剑。《拼贴文化》(Collage Culture)的作者大卫·巴纳什(David Banash)认为,使用现成的组件是 20 世纪艺术创作的核心,因为尽管它凸显了“不可避免的消费文化的可能性和局限性”,并且“有能力批评[它的]意识形态”,但拼贴也“依赖于消费文化的材料,并且毫不夸张地重现了大规模生产和消费的确切过程。”(3)

所有物质形式的拼贴美学不仅有助于激发现代主义,它还通过后现代主义和超越后现代主义获得了巨大的文化相关性。让我们快速回顾一下这段历史,这样我们就能在这些概念和时期上达成共识。

时代有点像刻板的青少年拒绝他们父母的方式。现代主义需要启蒙运动来对抗。大约从 1620 年到 1800 年的启蒙运动,主要描述了发生在欧洲的早期科学和反君主制活动。开始于 19 世纪晚期的现代主义,拒绝了启蒙运动的确定性和还原论。二战后出现的后现代主义抛弃了现代主义的客观性和普遍性。今天,在一个我喜欢称之为过渡时代的时期,我们正在抛弃后现代主义的讽刺和无所不能的态度。

在考虑“后现代主义”之后的新时代的名字时,人们发现前缀“trans”以一种特殊的方式突出出来。20 世纪的后三分之一是在“后”的标志下发展起来的,这标志着“真实”、“客观”、“原创”、“真诚”等现代性概念的消亡,所有这些概念现在都以“跨主体性”、“跨原创”、“跨抒情”、“跨感伤”等形式获得新生

米哈伊尔·爱泼斯坦,俄罗斯文学批评家,后现代主义在后现代性中的地位(4)

在所有这些剧变中,拼贴以其对混合、界限和交叉的专注,成为艺术和交流的重要而持久的工具。“好吧,好吧,所以拼贴是伟大和有用的,有这整个血统或什么的。你想说什么?你答应了迷因和 AI!”

今日:Instagram

Instagram Story post by the author

因此,尽管生产者-消费者混合体诞生于照片拼贴的熔炉中,但在过去的 100 年里,它已经进入了社会、政治和艺术生活的每一个角落。甚至写作这件作品的过程也是由拼贴美学促成的。我正在从网上资源中剪辑引文,即时重组我的文字,并将产品粘贴到发布平台上。想想嘻哈和采样,想想傲慢与偏见和僵尸,想想励志演讲 supercuts ,想想你参与过的每一个 meme,想想社交媒体平台界面设计与开发。

如果这是一个播客,我会在这里插入录音草稿。

因为不仅仅是我们用来在 Instagram 上宣传我们的虚拟形象的图像,甚至是应用程序中提供的具有剪切粘贴美学的功能和界面,而是用来制作软件本身的技术。Instagram 最初是一个相当简单的照片源,但直到它开始直接复制粘贴其竞争对手 Snapchat 的功能后才火了起来。发送给个人或朋友群体的消失的照片和视频,后来成为公开的“故事”,面部滤镜和动画贴纸装饰都源于 Snapchat。(5)

这并不一定是对 Instagram 设计实践的价值判断,(我对他们有意包含习惯形成功能的选择非常不满,但不是对竞争对手的复制),而是旨在指出拼贴是当今所有技术交流规模的组成部分。不仅仅是大型平台从其他地方获取零碎的东西来构建自己。如今的软件开发从来都不是从空白的画布开始的。几乎总是有一个库、API 或组件系统被 zee interonets 或内部遗留代码窃取。当然,是的,也许我延伸了拼贴的概念,远远超出了它最初的含义,但事实证明语言是由使用它的人创造的。离开我的烟雾弥漫的人行道语言警察!(当我写这篇文章时,营火仍在燃烧。今天旧金山的空气质量指数是 265。)

就像进化不能从现有的身体形式直接跳到完美的理想状态,而是必须盲目地穿过错综复杂的微小突变一样,技术变革也倾向于逐步改进。但是后来,我们发明了一种叫做基因工程的东西,它使得基因结构发生了巨大的变化,这种变化仅仅通过进化是不可能的。拼贴是技术创新的基因工程。就像在不同的人群中工作一样,拼贴将他们不同的背景和思维方式重新组合成更广泛的可能结果,通过接触不同来源和类型的材料,拼贴扩展了可能创造的边界

我在 SAP、Y-Combinator Research 和现在的微软专门从事的基于艺术的技术探索研究,这种研究风格严重依赖拼贴作为一种探究技术。基于艺术的研究试图跳到遥远的、不稳定的、目前通常不可行的睡莲叶子上,而不是专注于渐进的改进,以拓宽我们创新途径的菜单。拼贴是一种技能,一种艺术,也是未来人工智能民主化的关键。

明天:艾

纽约现代艺术博物馆的前馆长劳拉·霍普特曼说,拼贴让我们“同时体验信息……就像一朵水平的云。”(6)对今天的人工智能来说,这似乎是一个恰当的描述:工具本质上允许我们通过浓缩和表现来把握我们不断增长的信息海洋。人工智能是大规模的拼贴。它的预测和世代是人类知识的集合,如癌症筛查的标签集,以及物质文化,如图像的宝库,切碎成大量的值,仔细检查并重组为新的知识和材料。

随着人工智能变得越来越普遍,它将变得类似于霍赫时代的那些业余爱好期刊和插图日报,就像今天的 gif 和 memes 一样,本身也受到材料重组的影响。这已经发生了。以谷歌大脑研究员伊恩·古德菲勒(7)于 2016 年提出的生殖对抗网络为例。甘的算法是两种已经存在的算法的拼贴。这是一种用于从一组原始声音中创建新版本的技术,例如从人类语音库中创建人工声音,或者从一组人脸中创建新的人脸。把甘想成一个很有耐心的艺术家,一个很有眼光的买家。这位艺术家被委托画一幅肖像,并得到了一大堆原始资料。艺术家每完成一幅画像,买家就会给他们打分。起初,这是一个非常糟糕的分数,但很快,在经过一百万次尝试后,分数变得更好(不完美,但非常接近,头发和虹膜仍然很难)。

Image Source: NVIDIA via NYT

Image Source: NVIDIA via NYT

Image Source: NVIDIA via NYT

现在,因为我们在谈论人工智能,我们必须记住,无论是“艺术家”还是“购买者”都不知道什么是脸,甚至什么是图像。两者都将像素颜色分解成数值数组,然后进行统计比较并进行调整。一个 AI,至少按照目前的定义,是无法理解设置给它的问题的。它只能非常快速地聚合成千上万个“数据化”的人类行为,比如给一幅图像贴标签,或者为它提供的集合创建统计上相似的示例,比如创建一幅图像。癌症筛查人工智能可能比任何一个医生都更容易做到,但这不是因为它“更聪明”,而是因为它使用了数千名医生的知识。(我是不是把这些成堆的微积分工作原理过于简单化了?是的。网上至少有 1 万亿篇文章可以教你基础知识。往前走!)

现在 Goodfellow 是一个超级专家,目前这是制作一个好的人工智能拼贴画所需要的。但是,如果不把我们所有的努力集中在创造更容易的方式让人们编写他们自己版本的人工智能(生成器,分类器,异常检测器等)上,会怎么样呢?),相反,我们促进广泛的人工智能拼贴。胶水!剪刀!工具丰富!为了让大量的人,每个人,面包店老板,数字艺术家,中学生,能够制作有用的和有意义的人工智能,我们不应该只专注于让编码小说模型更加平易近人的方法。拼贴的血统向我们展示了这样一种界面,它可以访问现有的人工智能算法,并让人们以奇怪和反直觉的方式重新组合它们,这将导致谁在创造人工智能,以及它被要求做什么有趣、怪异甚至可能是革命性的事情。这就是我们如何通过自动化来避免混淆。这就是我们如何深度伪造迷因战争。这就是我们取胜的方式!

哇哦。原来美术技能就像…有用?谁想到它…

支持

感谢杰伦·拉尼尔和微软一直以来的支持和指导。

笔记

  1. 汉娜·霍赫,“拼贴,”在汉娜·霍赫,编辑。道恩·阿德斯,丹尼尔·赫尔曼(伦敦:白教堂画廊,2014 年)
  2. 马德琳·鲍彻,“艺术还是工艺?:汉娜·霍奇的拼贴画拥抱了艺术与工艺、达达与商业主义之间的冲突”,artsy.net,2014 年 10 月 14 日出版,2018 年 11 月 12 日访问,https://www . artsy . net/article/madeleineb-Art-or-Craft-Hannah-hochs-Collages-enchanted
  3. David Banash 接受 Rick Poynor 采访,“拼贴文化:怀旧与批判”,《设计观察家》,2013 年 11 月 11 日出版,2018 年 11 月 17 日访问https://Design Observer . com/feature/Collage-Culture-怀旧与批判/38187
  4. 米哈伊尔·爱泼斯坦,“后现代主义在后现代性中的位置”,出版于 1998 年,访问于 2018 年 11 月 17 日,http://www.focusing.org/apm_papers/epstein.html
  5. 卡丽莎·贝尔,“Instagram 证明无耻的复制是有回报的”,Mashable,2018 年 5 月 12 日发布,2018 年 11 月 17 日访问https://Mashable . com/2018/06/12/insta gram-proves-copy-is-the-best-strategy/# NysItTmXfaqo
  6. 瑞秋·沃尔夫,“剪切粘贴文化:新拼贴”,Artnews.com,2013 年 12 月 12 日出版,2018 年 11 月 18 日访问,http://www.artnews.com/2013/12/12/the-new-collage/
  7. 维基百科,2018 年 11 月 19 日访问https://en . Wikipedia . org/wiki/Generative _ adversarial _ network
  8. Tero Karras、Timo Aila、Samuli Laine、Jaakko Lehtinen,“Gans 的渐进增长,以提高质量、稳定性和变化性”,发表于 2018 年【https://arxiv.org/pdf/1710.10196.pdf】ICLR

我们是数据点:剑桥分析丑闻后的网络身份

原文:https://towardsdatascience.com/we-are-data-points-identity-on-the-web-post-cambridge-analytica-scandal-7f5dc756fe79?source=collection_archive---------7-----------------------

We are just tiny data points in a vast data universe | Image source Hunter Bryant

剑桥分析公司+脸书丑闻中有一线希望,它引发了一场关于我们在线隐私权的辩论。我们的虚拟房子被入侵了:政府进来拿走了我们的身份。抛开是否是美国邀请了侵略者这个问题,今天我们将探讨这个丑闻的核心:网络身份的概念。这个案子到底有什么让我们困扰的?删除脸书代表着什么?为了发泄我们的愤怒,让我们回顾一下法律意义上的个人数据是什么,监管中有哪些疏漏,以及我们的网络足迹是否应该引起我们的担忧。

受法律保护(*有法律时)

信息安全部门在个人身份信息的标签下提供了最全面的个人数据定义。PII 是指可以识别特定人的信息。这个定义包括诸如任何身份号码(护照、社会安全号码、驾照)、位置、联系方式、面部、指纹和基因等指针。你会注意到可识别的概念比个人更狭隘:我们的个性、行为和信仰(不一定是宗教信仰)不受 PII 保护伞的保护。

在 PII 的阴影下隐藏着它更丑陋的兄弟:仍然指向特定人的非特定信息。例如,一个人的性别并不特别明显,因为很有可能另外几十亿人也有同样的性别。然而,如果你是男性主导的职场中唯一的女性,即使这些信息也不会泄露你的身份。

PII 是数据隐私法规中的一个流行术语,但是以 PII 为中心的立法根据每个国家对它的解释而有所不同。不严格地说,PII 的个人数据经常被忽视,或者很少提供指导以确保其保护。剑桥分析公司丑闻(以及之前曝光的 NSA 行为)凸显了美国对非 PII 数据的监管是多么薄弱。当美国人在自己做的床上醒来时,美国公民正在为即将到来的通用数据保护条例欢呼雀跃。在地球的另一边,中国正以只有中国会做的方式拥抱 PII 和非 PII:通过对其公民进行评级系统试验。大多数非洲国家缺乏任何监管,他们的公民数据自由公开——你可以打赌他们有自己的剑桥分析公司的故事。

PII 的多面性

保护 PII 的概念存在于全球立法中,但在现实中并没有得到积极的执行。欧盟的 GDPR 是迄今为止最强有力的控制 PII 滥用的尝试,它让每一个存储欧盟公民数据的组织都成为它的保管员。如果这些公司不遵守规定,将会被罚款。对于欧洲人来说,这是一项重大的集体努力,因为个人信息有多种形式:除了姓名、年龄和银行信息,公司还必须保护所有本地化信息和任何生物特征数据。

PII 泄密是非法冒充行为的温床:犯罪分子使用我们窃取的身份申请贷款,访问我们的银行账户,或跟踪我们。就位置数据所能揭示的信息而言,它本身就是一个潘多拉盒子。想象一下,苹果泄露了我们精心储存在 iphone 上的每日路线。你去的地方、生活的地方、工作的地方和闲逛的地方都会暴露出来。更糟糕的是,你的缺席是可以预测的,你的房子可能会被抢劫。定位不仅仅是 GPS 设备的领域:每一项现代营销努力都将涉及收集客户定位库。这些不是由于受到严格监管而无法代表其人口的经济地位和利益的行政区域。现代营销区域由传感器、信标、IP 翻译和脸书签到定义:称之为数据驱动的地理。生物特征数据——唯一区分我们生物特征的数据——同样是当代信息收集中无处不在的资产。被授权进行安全共享的实体多种多样,从语音控制设备、保存我们的图片和视频的社交媒体服务器,到操作闭路电视的实体商店老板。

最后,谈谈基因组学和 PII。人类基因组计划实现了所有基因的测序和绘图,为分子生物学和医学的惊人进步打开了大门。基因组数据不同于 PII 环境中的任何其他数据:虽然其他 PII 属性可以改变,但 DNA 集永远是唯一的。一旦它出现在公众面前,它就消失了;伤害是不可逆的。监管也更具挑战性。与其他数据类型不同,它无法在不损失其价值的情况下成功匿名或匿名。它需要完整地可供分析。这就要求在基因治疗成为主流之前,需要额外的专门监管。

龙在这里:PII 领域之外的数据

如果 PII 是一个令人头疼的监管问题,我们应该如何处理 PII 定义之外的数据?龙来了:根据法律,非 PII 信息(除了财务数据)大多是未开发的领域。现代立法只保护我们的社会安全号码、地址和基因,而不保护我们的行为数据。窃取 PII 是犯罪——窃取非 PII 的数据在道德上是不酷的,但是没有人会因此而入狱。

我们就是我们所做的,营销人员最清楚这一点。网飞的商业模式是基于行为数据的:一个节目的长度是针对目标观众优化的,这样我们就不会失去兴趣;悬崖衣架是由转换率决定的,而不仅仅是它们的艺术价值。当我们向网络 cookie 输入我们的兴趣、购物偏好和平均决策时间时,它会跟踪我们的互联网冒险,然后向数据经纪人报告。我们不断了解到行为信息比我们报道的兴趣更优越。网飞跟踪我们的点击,知道我们并不像我们说的那样热爱外国电影和纪录片。根据 OKCupid 的数据显示,Christian Rudder 的 Dataclysm 专门为我们在网络上的谎言写了几章。

这些点击和行为模式的集合都是人类特征的分支,但还不足以具体到某个人。因此,根据定义,它不属于 PII 范式。行为数据的收集和分析正是剑桥分析公司数据收集工作的支柱:我们刚刚了解到数据泄露会造成多大的伤害。

数据经济建立在我们的个人行为数据之上。我们的点击(和缺乏点击)被货币化,出售和转售,并由该经济体的参与者进行分析。正如亚历克·罗斯在的《未来的产业、中所报道的,私人公司现在收集并出售关于普通美国消费者的 75,000 个个人数据点。“我们的数据支持营销工作,并支持推出新服务。看到我们的生活被量化成一点一点,感觉几乎失去了人性。但抛开偏执不谈,当亚马逊根据我们的兴趣向我们推荐伟大的交易时,我们真的不喜欢吗?

摘要

个人数据的多维性带来了多重问题:对我们、对监管者、对整个经济。我们不仅被我们的名字和地址所识别,还被我们的生理和行为所识别。我们是我们所想、所做以及我们想而没做的事情的储存库:所有这些都被上传到互联网上。剑桥分析报告强调了我们对自己的网络足迹知之甚少,以及我们的法律是多么的不完善。监管者需要从互联网出现前的心态中走出来,在这种心态下,我们的想法和行为只有有限的家人和朋友圈子知道。GDPR 是朝着更自觉地处理我们的个人信息迈出的奇妙一步,这有可能激励其他国家。我们对自己的数据几乎没有控制权,因为我们不仅依赖于我们分享的内容,还依赖于我们的朋友、我们使用的服务、医生、工作场所和政府设法保密的内容。我们需要法律来保护我们。

— — — — — — — — —本文原载于数据漫游。

在 Twitter 上关注我了解更多数据故事!

“…我们已经不在堪萨斯了”——采访中的挣扎

原文:https://towardsdatascience.com/we-arent-in-kansas-anymore-interviewing-struggles-f036d4a9fc9a?source=collection_archive---------5-----------------------

欢迎回来!这是我如何从地球科学职业转向数据科学系列的第五篇。

读者现在应该对我为你的第一份数据科学工作找工作的方法和哲学有了一个坚实的理解。现在,让我们进入“典型的”数据科学面试的面试准备和形式部分。

你应该知道如何申请,如何让你的名字出现在简历上。希望你在几个公司的系统中有一些推荐。很快,你就要参加面试了。开始准备面试永远不会太早。

与石油和天然气行业相比,面试“技术”行业中需要任何编码技能的技术职位是一件非常不同的事情。

例如,对于我在(超级)大型石油公司的职位,流程包括:

  1. 校园面试——技术和软技能,以确保我在基础知识上是坚定的,并有逻辑思维流程
  2. 现场面试—包括技术部分和软技能部分。还要求我提交论文。
  3. 报价阶段/谈判

数据科学相关职位的面试通常有 4-5 个步骤:

  1. 人力资源电话筛选——这基本上是为了验证你是否适合这个职位。它本质上不应该是技术性的,但要准备好谈论你以前的工作与数据科学的关系。对我来说,这通常包括描述我在石油和天然气领域帮助支持的地质统计模型,以及这些模型与手头角色的关系。这些通常是简短的谈话,平均 30 分钟左右。
  2. 技术电话筛选——通常由招聘经理或高级个人贡献者进行。这可以有一个技术编码部分(通过在线界面或口头),技术建模部分(方法,解释等)。)和商业敏锐度组件(解决问题的方法、KPI 等)。).这些可能长达(或超过)一小时。有时候你也会得到一个很傻的脑筋急转弯来“热身”。
  3. 案例研究/项目(可选。)—为了进一步建立技能,许多(但不是全部)公司会给出一个简短的案例研究或项目,要求候选人展示他们拥有的技能和能够完成的事情。这可能需要一些时间,取决于你的分析有多深入,以及你的编码能力有多强。有时你要在一定的时间内交上来并被评分,有时你要在现场面试中展示你的发现。
  4. 现场面试——类似于其他行业的面试,通常是半天到一整天(通常,但不总是)的午餐时间。包括编码块(在“可怕的”白板上)、机器学习原理、软技能、逻辑谜题、工作流程和业务问题/敏锐度。
  5. 报价阶段/谈判

对于经验丰富的专业人士来说,前三个阶段通常很容易准备。它们与其他行业和职业非常相似。请注意,你必须详细解释支持你的项目的职责,而且电话那头的人可能对石油和天然气行业的内部运作一无所知

让招聘人员或招聘经理不知道你的职业会对你有利。请详细解释你和你的家人或朋友一起做的事情,他们都不在能源行业。我发现向他人扩展我们的谋生知识真的很有趣。见鬼,考虑到这个博客系列的创建,我仍然从谈论它中获得快乐!

出于不同的原因,第 4 和第 5 阶段对我们来说是摆脱石油和天然气的棘手阶段。

我将从简单的第五阶段开始。

要约和谈判对任何求职者来说都是困难的。你真的想获得你的第一份数据科学工作,我们大多数人也需要进行现实检查。 石油天然气行业涨工资 。我已经说过了,这并不是说你再也挣不到你曾经挣过的工资,但很可能不会是你的 第一 数据科学职位。

我个人转向数据科学是为了更好的生活质量和解决有趣的问题。在我优先考虑的事情中,基本工资排在后面。如果薪水是你最想要/最需要的,你可能会失望。

很多时候,你会被追问在前任雇主那里挣了多少钱。转移,转移,转移!在美国,法律不要求你提供这些信息,你以前的雇主也不能透露。

我总是全面地看待每个机会,这真的取决于工作要求和责任,以及我对公司的价值。如果角色和职责很重要,我会拿较低的薪水,但是,不太重要的职责,过高的薪水可能会通过。

谈判更难建议。有些公司的基本工资有很大的浮动空间,有些则没有。意识到这一点,如果这是一份梦寐以求的工作,而且薪水很低,就协商其他事情。假期、职称、奖金和晋升时间表都可以商量。发挥创造力,从他人那里获得关于如何进入谈判阶段的想法。

最难准备的阶段是 阶段 4

现场面试。在软件工程领域(特别是破解编码面试)已经有了一本书又一本书,老实说,许多数据科学面试在编码方面与软件工程面试没有太大区别。

不要缩短准备现场面试的时间。在网上练习,和当地小组一起练习(如果有的话),练习,练习,再练习!

转向数据科学的地球科学家应该将他们的努力集中在三个基本领域😗*

  1. 编码实践——实践常见的算法和技术,动态地改进您的代码。不要在面试中一开始就找到最佳解决方案。总是从你的 MVP(最小可行产品)代码开始,并在时间允许的情况下进行优化。让面试官带你走向优化。
  2. 谜题练习——不管你喜不喜欢,许多公司仍然喜欢猜谜语。"加利福尼亚州有多少个斯博克岛?"这些都是愚蠢的问题,但是旨在让你在处理问题时更有逻辑。这就像一个面试官递给我们一块石头,在告诉他们这是一块花岗岩之前,解释一下你看到了什么。“我看到钾长石、石英和黑云母。它是一种长英质侵入火成岩,具有明显的结构。我推断它最有可能是花岗岩。”好吧,用这个类似的逻辑来解释这个谜语。
  3. 概率和统计——练习基本的 101 级概率和统计。包括贝叶斯定理、组合学、回归、常见的机器学习算法(决策树、森林、SVM、NLP、神经网络)。你不需要成为机器学习的大师,但是要知道每种算法的基本功能,以及在面试阶段什么时候使用它们

我很幸运有我的激励社区通过模拟面试来帮助准备面试过程。我鼓励其他人找到当地的小组或创建他们来帮助练习面试策略。

最后一个小贴士是做好“失败”的准备。你不会每次面试都成功,也不会每次现场都表现出色。我经历了惨痛的教训。

拒绝是

找工作就像约会。你在讨好潜在的雇主,因为他们和你在一起。有时候事情并不顺利…

你认为你已经搞定了,但还是被拒绝了。你可能认为你悲惨地失败了,然而却被置于谈判阶段。只要你对事物保持幽默感,并坚持不懈,你会找到一个适合你职业抱负的人。

就我个人而言,为我的第一份数据科学工作找到最合适的角色比我预期的要长。我一路上跌跌撞撞,受了点伤。然而,我确实获得了一个很好的机会。其中,我将在我的旅程的下一集描述。

在我的职业支点系列中补上或回顾以前的条目:为什么地球科学家成为优秀的数据科学家、填补知识空白、构建求职框架和解读工作描述。

继续第 6-8 集,为什么咨询,我的第一个咨询项目和寻找未经加工的钻石。

“我想,我们从头开始吧。”

原文:https://towardsdatascience.com/we-begin-by-beginning-i-guess-8a62beec84f5?source=collection_archive---------1-----------------------

作为一个在脸书、Twitter、Tumblr 和类似网站时代的 20 多岁的人,我冒险写博客只是时间问题。实际上,在之前,我曾经尝试过一次博客,最终它变成了一个不经常更新的总统辩论饮酒游戏库——配有 gif。

Out with the old and in with the new, I suppose!

鉴于我正在尝试一个新的博客,它回避了这个问题:我应该写些什么?我对很多事情都充满热情——数据科学、教育、政治、法律、定量扫盲——尤其是当这些兴趣重叠的时候。将自己归入一个领域似乎很傻,但收集一些不相关的散漫内容似乎更傻。

幸运的是,如果我在过去几年中学到了什么,数据科学几乎与所有东西都有重叠。

所以这就是我要开始的地方:将数据科学应用于一些(希望如此)酷问题。但是我该如何开始呢?正如乔治·奥威尔在 1984 年的中所说,“在纸上做记号是决定性的行为。”感觉就像带着新买的笔记本开始了新的学年。一旦你动笔,事情就有了定论。然而,在那一刻之前,可能性是无限的。**

我最近重读了《华氏 451 度》,下面这段话在我的记忆中尤为突出:**

蒙塔格从地板上拿起一本小册子。“我们从哪里开始?”他把书打开一半,仔细看了看。“我想,我们从头开始吧。”

所以,我想这是开始。在接下来的几天和几周内,将会有关于使用信息和证据解决问题的帖子,但目前,欢迎!

我们知道你也想去 C2

原文:https://towardsdatascience.com/we-know-you-wanted-see-c2-too-72d1617c2a9?source=collection_archive---------7-----------------------

在为期三天的令人难以置信的 C2 MTL 会议人工智能论坛中,研究和创业领域的创新者分享了他们关于人工智能(AI)的知识和经验,激发了关于这些技术的应用和潜力的富有成效的讨论。演讲范围从机器学习将在医疗保健中发挥的关键作用,到成功的人工智能创业公司的关键特征,再到该领域伦理问题的思考。展示了令人难以置信的洞察力,来自各种人工智能应用的不同观点的碰撞为未来的行动带来了兴奋感。魁北克 MESI 和蒙特利尔国际在促成这一切的过程中发挥了关键作用。

Montreal: an electric feeling in the air. Source: Jonathan Denney, Unsplash.com

一个深思熟虑的早餐小组讨论了媒体和人工智能的成熟度,提到了与更琐碎的应用程序相比,人工智能技术的通信和翻译应用程序的重要性;例如,文本到语音技术消除了对转录语言信息的需要,从而释放了大量以前难以访问和共享的知识。随着开源研究和创造的令人钦佩的扩张,数据预计将成为开发人工智能技术的关键因素,正如 aifred 的数据驱动的医疗预测一样。

在小组讨论期间,创业的一个有趣优势浮出水面;在失败和随后的调整方面,初创公司与大公司相比的敏捷性。失败是任何创新努力的核心组成部分,成功努力的定义特征(不仅限于人工智能初创公司)是基于失误调整计划和愿望的能力,以便打造更强大的竞争对手。

Data is the Atlas of the AI world. Source: Markus Spiske, Unsplash.com

通用电气首席营销官琳达·博夫(Linda Boff)谈到了创造力的重要性,这是将卑微和危险的劳动转移到人工智能技术运行的机器上的结果;这意味着创新和创新思想在世界舞台上扮演着重要而令人垂涎的角色。这个想法是利用人工智能的力量,作为可以产生最大影响的学科中开创性应用的基础,例如 3D 打印器官为医疗保健专业人员提供更好的诊断提供了潜力。

加拿大人工智能“生态系统”的现状和未来潜力是根据当代作为基于认知能力扩展的工业革命来探索的,与扩展人类机械能力的经典工业革命相反。丰富的数据、灵活的模型和可用的计算能力推动了人工智能革命;这些因素为人工智能在不同行业中的指数级影响提供了基础。

From mechanical revolution to cognitive revelation: The Canadian AI Ecosystem sparks justified excitement. Source: Unsplash.com

乔尔·贝克曼,作曲家和人造音乐的创始人讨论了一个经常被忽视的声音对人类认知和体验的影响的有趣演示,他提出声音是设计的一个方面,分享了视觉设计的相同原则。对声音的生物反应比其他感官快得多,因此这种感官形式在构建其他感官的感知和输入中起着作用。他的想法是一个完美的例子,说明如何以创新的方式应用人工智能,在未探索的领域用创造性的方法解决问题。例如,医疗保健中的警报疲劳可以通过医疗保健专业人员的习惯化来消除,这违背了警报本身的目的;可以通过分析声音来诊断自然生态系统的健康状况。声音是人工智能研究领域的一个主要例子,它充满了创新的潜力,有许多应用等待被解锁,也许是在前面提到的通信环境中。

关于艺术和文化意义,长野健也提到了声音的未实现的潜在影响;声音在传输过程中会因流式传输而损失很多质量,而重点是通过流式传输来提高视觉质量。视觉媒体质量的这种偏见可能在当今世界视觉图像优于声音的优势中发挥作用,人工智能拥有潜在的调整这种焦点不平衡的能力。

Kent Nagano, Music Director of Orchestre symphonique de Montréal, presents a wonderful performance.

aifred 团队特别感兴趣的是江泽龙·拉瓦莱和乔纳森·卡内夫斯基通过“人工智能优先”的镜头重新想象医疗保健的想法;这一领域的注意力集中在诊断上,因为这是目前最精确和相应最有价值的数据所在。未来的研究和创新可以使用听觉数据和视觉数据,从分析生物功能模式来检测健康问题(如血栓)的风险,到分析医生行动和互动的视频。人工智能的魅力在于它可以提供可访问性,通过消除不重要的、机器可控的细节的干扰,并允许人类的创造力和高级思维出现。例如,从结肠镜检查中获取视频图像并应用人工智能,以便经验较少的医生可以在专家的水平上进行操作,或者应用人工智能来分析生活方式因素,以查看哪些因素在人类疾病的背景下可能是重要的。这与 aifred 背后的价值观和灵感极其相关,特别是在精神保健方面。

当然,伟大的 Yoshua Bengio ,Element AI的联合创始人兼蒙特利尔学习算法研究所所长,分享了他对人工智能及其应用的想法,特别是自然语言理解和生成、医疗保健和机器人技术的成功和障碍。关于语言理解和生成,在这一领域进行了大量投资,包括微调虚拟个人助理、语音识别、文件检索(这可能会使有能力轻松负担法律服务的人更容易获得服务,并改变司法系统中的偏见)和教育对话系统。

Pictured: Internally excited yet outwardly calm aifred Project Leader Abhishek Gupta and Yoshua Bengio.

深度学习再一次被讨论到它在医学上的潜力。人工智能可以处理医生没有时间自己筛选的高维数据;来自患者数据和医生笔记的信息可以用来预测未来的结果和估计未来事件的概率,但只有足够的训练数据才能用于机器学习模型。医学中可用于训练机器学习模型的数据的当前状态相当分散,这是我们在寻求生物数据以用作心理健康治疗的预测器时亲身经历的,但一个积极的趋势表明,这种数据的集中化正在上升;这对于人工智能在医疗保健领域的进步至关重要。必须面对的挑战围绕着可供分析和分类为相关或不相关的大量数据,必须进一步考虑其收集与各种形式的研究不一致的问题。

此外,在大踏步前进的过程中,走出去并思考创新可能带来的问题总是很重要的,特别是在人工智能领域等快速增长的努力。来自 Google 的 Blaise Agüera y Arcas 讨论了在 AI 技术中引入人类偏见(将人类价值观注入具有预测偏差的机器学习模型)、在没有充分预见的情况下将 AI 盲目应用于现实世界问题、失业影响、安全考虑以及与这些日益复杂的技术(如机器人)的发展相关的法律权利方面必须做出的重要考虑。随着人工智能应用的出现,这些主题将变得越来越多地被讨论和相关,在思想发展和人工智能进化的整个过程中讨论它们是重要的。

Blaise-ing new trails in the consideration of AI ethics.

关于人工智能技术的各种观点和深思熟虑的思考由许多激动人心和深刻的演讲者组成。 Ben Boyd 强调了在“不信任时代”具体体验和真实客户意见的重要性。的迈克尔·斯拉比展示了技术在政治中的作用,包括脸书在圈定新闻来源方面的影响,这些新闻来源通常会被忽视,以努力使民主更知情和更有效,以及技术应该旨在改善政治的方向;参与的民主化和集中精确的开源数据可访问性。视觉驱动的设计实践也是 Drod Benstrit 的谈话主题,他谈到了人类对有意义的联系的热情,以及我们的经历对我们如何感知现在和塑造未来的影响,以及合作创新和投资实验的重要性。Amanda Hill介绍了当今世界中内容创作者与消费者之间的不平衡(估计为 2000:1 ),在这个世界中,注意力是一种稀缺商品。这是一个重要的考虑因素,尤其是在一个无数信息不断争夺注意力的世界里,选择什么样的内容最强大、最有意义。穆罕默德·尤努斯(Muhammed Yunus)详细讨论了全球财富不平等及其伴随的问题,他建议对年轻人进行再教育,让他们成为企业家,并将社会焦点转向个人创造力的价值。

最后,医疗保健和人工智能再次与 Dialogue、的联合创始人兼首席执行官亚历克西斯·斯米尔诺夫(Alexis Smirnov)发生了碰撞,他谈到了通过可穿戴设备进行慢性病管理,消除了定期去看医生的需要,或者在整个怀孕期间持续跟踪胎儿健康。持续健康跟踪的更主动性质可以是关于生活方式的数据收集,例如运动胸罩跟踪呼吸模式并推荐相应的锻炼方案,通过言语模式识别精神病,或通过跟踪眼球运动检测自闭症。人工智能的可能性似乎是无限的,即使在医学领域,其应用也在不断涌现,并以越来越实用和有影响力的想法为基础。aifred 团队很高兴能够成为这个人工智能时代的一部分,我们非常感激能够在今年的 C2 MTL 会议上有机会向这些才华横溢的人学习。我们非常感谢蒙特利尔国际让 aifred 有可能体验这个非凡的 AI 论坛。对于人工智能技术来说,这是一个令人兴奋的时代,置身其中就像站在一场思想和创新的龙卷风中,有可能解决世界问题;我们已经不在堪萨斯了,但我们肯定会去旅行。

The future is in our hands. Source: Oliver Thomas Klein, Unsplash.com

我们必须是老师

原文:https://towardsdatascience.com/we-must-be-the-teachers-e6baaf9dd02a?source=collection_archive---------7-----------------------

“机器学习是人工智能(AI)的一种应用,它为系统提供了自动学习和根据经验改进的能力,而无需显式编程。”~ 什么是机器学习?

关于机器学习,以及它有望提供超出编程范围的洞察力,人们既兴奋又有些担忧。特别是当结合今天可用的海量数据时,人们预计人工智能将最终提供大数据长期以来承诺的好处。

但是许多想使用机器学习的人误解了它的优点和缺点。在与许多人谈论机器学习在当前状态和过去更有限的技术中的前景、危险和失败时,我想起了阿瑟·c·克拉克的名言,“任何足够先进的技术都与魔法没有区别。”

作为人类,我们倾向于用魔法来看待无法解释的事情。但是,尽管它很复杂,机器学习不是魔法,这样对待它将大大降低它实现承诺的机会。它可以用来检测趋势和相关性,但它不能挥舞魔杖,召唤出我们认为理所当然的数据关系和隐含意义。

如果我们抛弃 AI 是魔法的想法,我们可以开始将机器学习视为与其他类似过程相关的过程。当我们想让我们的孩子学习时,我们不会简单地把他们留在图书馆里,然后抱最好的希望。我们引导他们找到最合适的资源。我们纠正他们的错误。我们回答他们的问题,并提出我们自己的问题来激发他们的思考。我们是他们的老师。

简而言之,如果我们想了解如何最好地完成机器学习,我们需要了解教育策略。虽然机器的学习方式与儿童不完全相同,但也有相似之处。我们应该注意两者的相同点和不同点来指导我们的机器教学。

孩子们的优势在于,他们可以通过与父母、老师和同龄人之间越来越复杂的反馈回路进行学习。我们不能用机器复制这一点,但我们可以提供反馈。IBM Watson 并不是通过被灌输一本百科全书而学会在《危险边缘》中获胜的,尽管毫无疑问它被灌输了很多。它通过输入问题并纠正答案来学习。

我们不能简单地把数据转储进去,然后希望建立正确的连接。我们需要投入更少的资金,尝试我们希望得到答案的问题,并给出反馈。在《国王和我》中,安娜唱道“……如果你成为一名教师。你的学生会教你。”正是如此,当我们从人工智能那里得到答案时,我们必须学会如何提出问题来引出我们想要的答案,以及我们需要向系统提供哪些额外的信息,以便它可以回答我们可能会问的各种问题。

机器在快速吸收大量数据的能力方面具有优势,这既带来了机遇,也带来了威胁。对于孩子,我们有时间去识别他们什么时候会朝着一个意想不到的、不受欢迎的方向发展。对于机器来说,如果学到了错误的教训,不重新开始就很难忘记它们。

这给我们带来了我们必须教给孩子和机器的最重要的一课。我们不能假设学习会灌输价值观。当人工智能被灌输了大量的社交媒体内容时,它首先学到的一些东西是种族主义和不容忍。虽然你可能不认为你的公司的数据集会朝着这个方向发展,但它们很可能会比你想象的更黑暗。

让我们假设你的公司是一个利润驱动的企业。理论上,这意味着所做的决策应该完全由最小化成本、最大化利润和支持底线的动机驱动。但是除了在最极端的情况下,人们会考虑很多其他因素。他们权衡客户的良好意愿、员工的福祉以及某项决策的社会影响。他们有价值观,这些价值观以成千上万种大大小小的方式与底线相平衡。

但是机器就像孩子一样,只学习教给他们的东西。如果你的人工智能每次回答一个问题时都向它提供反馈,但你的唯一标准是它是否实现了利润最大化,那么如果它后来提出了令人震惊的建议,不要感到惊讶。您必须构建数据来支持基于价值的决策,并鼓励对这些决策进行加权。

举个简单的例子,如果你不提供任何关于不同产品类型的环境影响(例如,包装或能源使用)的数据,人工智能就无法在决策中权衡这些因素。同样,如果当人工智能推荐环保选择时,你不提供虚拟的赞美,它就不会学会重视这些选择。

机器学习不是魔法。虽然它可能会提供你从来没有考虑过的精彩想法和见解,但它只能与输入和价值观以及它所学到的教训一起工作。我们必须是老师。认真对待你在指导和教授你的人工智能中的角色,就像对待孩子一样,当它显示出你灌输的智慧、知识和价值观时,你的回报就会到来。

我们需要听到你的声音!

原文:https://towardsdatascience.com/we-need-to-hear-from-you-dc6d46fb605a?source=collection_archive---------15-----------------------

走向数据科学调查 |⏱3 分钟

我们在 2016 年 10 月推出了我们的媒体出版物,以更好地分享数据科学概念、思想和教育。今天,我们对你们所有人的热情感到非常惊讶。你们让我们的出版物充满活力,我们为此感谢你们所有人!

现在,我们的读者数量显著增加,我们意识到我们有责任呈现更高质量的内容,并将我们的出版物提升到一个新的水平;这就是为什么我们需要听到你的声音。

关于我们 | 我们的团队

我们需要谈论“数据”

原文:https://towardsdatascience.com/we-need-to-talk-about-data-a2d29820203b?source=collection_archive---------4-----------------------

我最近读了一些有见地的博客,很多都是关于数据的。像这一个,和这一个,和许多其他的博客。数据是目前的热门话题,这很好。

不幸的是,随着每一篇关于“数据”的新博文,一个越来越响亮的“但是……”正悄悄潜入我的脑海。让我解释一下。

在处理数据产品时,我经常使用“过载术语”这个短语,以至于它自己也有变成过载术语的危险。我们在谈论数据时使用的许多词语根据上下文有许多微妙的不同的含义,如果我们不小心弄清楚我们的意思,我们也有使复杂的空间疏远的风险。

当我第一次加入我现在的团队时,我总是被这些词汇地雷绊倒。一个特别突出的例子是——我们编写了一种新的格式来指定我们特殊类型的数据集,并且我们试图给它命名。工作名称让人们感到困惑,现在它是我们正在迭代的东西,它需要一个永久的、容易理解的名称。

代表?哦不。“语言”?绝对不行!格式?也许吧,但是……‘好的,说明’?嗯,我们已经有了一个叫“松鼠”的东西……这种情况持续了几天,直到我威胁要把这个东西叫做“松鼠”,并列出所有明智的选项供团队投票。

因此,在粒度级别上,作为一个社区,我们在明确我们的术语方面尽职尽责,但我们遗漏了一个绝对的错误。“数据”是一个超载的术语。

Let’s put an end to lexical buckaroo, before it kicks off

对数据趋势和发展的理解,以及对它们所带来的挑战和机遇的参与真的越来越多,以至于“数据”不是一个足够微妙的术语来清楚地谈论我们正在工作和思考的事情。

一天早上,当我端着咖啡,半听着广播四台的时候,这个想法开始变得有点尖锐。有一场关于的讨论正在进行,这是一项关于对癌症患者进行常规基因组图谱绘制的最新提议以生成关于医疗保健的更准确的数据洞察。一位讨论者表示,这并没有太大的争议,因为医生已经有了很多关于病人的数据,使他们能够安排和预约。

这种比较意味着所有数据都是等同的,我认为这是不真诚的,只会加剧对任何涉及数据的不信任,因为数据对个人来说是侵入性和不透明的。由个体独特的基因组图谱产生的数据,在几个非常基本的方面不同于显示医生预约的可用性和工作模式的数据。

在思考这个问题时,我试图阐明我认为区分数据“类型”的标准(故意不在这里说“数据类型”,因为:重载术语)。

出处:数据是从哪里来的?它是如何收集的,数据主体对收集知道些什么?

应用:现在的数据在用什么?它与原点的对齐程度如何?数据主体是否同意此申请?

处理:数据是否与其他东西结合,数据主体对那个‘其他东西’有什么控制?它是用于识别聚合模式,还是用于扩展单个数据主体的数据范围?

敏感性:是否有可能对数据主体造成伤害或损害,尤其是在考虑治疗的情况下?

我认为这些标准可以帮助我们区分,比如说,开发团队用来改进他们正在构建的软件的分析,服务提供给用户以完成任务的数据,或者服务要求用户提供以完成任务的数据。

这让我想起了大约一年前我第一次读到的一篇博客文章,作者是一位前谷歌设计伦理学家:

如果你控制了菜单,你就控制了选择[……]数百万人激烈地捍卫我们做出“自由”选择的权利,而我们却忽视了这些选择是如何在上游被我们最初没有选择的菜单所操纵的。

在上下文中应用,呈现给用户选择的数据的来源可能完全是用例不可知的——比如像寄存器这样的核心参考数据集——但是它的应用和处理会对用户能够(和不能够)做什么产生真正的影响。有时这是正确的做法,会让服务对用户来说更清晰、更有用,但我认为我们必须开始清晰、透明地思考和谈论我们所说的“数据”是什么意思。

在我的脑海中,我可以看到从基础设施到洞察力的某种光谱上的“数据”,但我说“某种程度上”是因为我不确定这是一条从一个到另一个的直线,或者在这两者之间或超越这两者的是什么(尽管我们可以非常肯定在某个地方有大量的创新),但我真的很高兴找到答案,并听取其他人的想法。

我们用人工智能评估了华盛顿的食用大麻市场

原文:https://towardsdatascience.com/we-sized-washingtons-edible-marijuana-market-using-ai-4fbf3d9f1ebf?source=collection_archive---------27-----------------------

Image sourced from Wikimedia Commons

随着加拿大成为 G7 国家中第一个将娱乐用大麻合法化的国家,它可能会向美国华盛顿州寻求暗示。2012 年,华盛顿州和科罗拉多州成为第一个这样做的州,尽管面临联邦政府的禁令。然而,即使美国有机会观察,我们国家对该行业的了解仍不完善。华盛顿到底卖了多少 THC 这种让使用者兴奋的化学物质——仍然不得而知。

这一数字对于回答美国和加拿大决策者的问题至关重要:我们能否将整个社会的 THC 消费与公共卫生结果联系起来?大麻的精神作用和麻醉作用主要是由于四氢大麻酚,而且由于植物的效力千差万别,理解四氢大麻酚背景下的行业规模是有意义的,而不仅仅是植物的质量。

我是卡耐基梅隆大学海因茨学院学生团队的一员,支持兰德公司对这一行业的分析,在我们的工作中,我们使用人工智能来估计食用大麻产品中合法销售的四氢大麻酚的数量。我们的团队首次对西澳大利亚进行了此类评估。

我们的数据杂乱无章,缺少信息

我们得到了一个 60gb 的从种子到销售交易的数据集,其中包括 1000 万份可食用大麻产品的销售。我们需要估计所有这些产品中销售的四氢大麻酚的数量,但是所有食物中四氢大麻酚含量的数值都丢失了。我们收到的信息看起来有点像这样[1]:

Data provided includes some numeric variables (sale time, price, potency, etc.), categorical variables, and unstructured text (product names).

我们需要以某种方式获得这些 THC 值。

兰德研究人员史蒂文·达文波特注意到,一些产品,比如上面的“PButter_TRIPLES_10mg”,在其名称中提到了重量。他判断这些重量指的是产品中 THC 的数量[2]。这些重量可能显示为“10 毫克”、“10 毫克”、“0.01 克”或其他多种形式,但对人眼来说,其含义很清楚:带有这种标签的产品含有 10 毫克四氢大麻酚。

利用这些信息,他编写了一个脚本来识别这些模式[3],并从 44%的交易中提取这些权重。

计算 THC 销售额的第一种方法表现不佳:平均值和价格回归

对于另外 560 万的销售,产品名称并没有给我们一个拐杖。例如,“主曲奇 9”没有提到重量。处理这个问题的最简单的方法是假设这些其他交易的每笔销售的 THC 与之前的 44%相同。如果我们可以从 200 万份固体食物中提取 THC 估计值,其中每份食物含有 1 毫克 THC,还剩下 100 万份固体食物,那么我们可以说固体食物与 300 万毫克 THC 有关(200 万 x 1 毫克+100 万 x 1 毫克)。

这是我们的第一个“模型”。

但是当然,这是一个可怕的假设。如果这些交易因为人们购买更多的 THC 而变得更加昂贵呢?或者后 56%中的产品类型是否与给我们提供有用产品名称的 44%不同?我们可以想出一百万种出错的方式,所以我们必须做得比基于这种假设的计算更好。

你可以通过在他们没有见过的数据上使用模型来测试你的模型有多好。我们通过交叉验证来判断我们的方法工作得有多好,这是对这一基本思想的一个更稳健的应用。每笔交易的平均误差为 40 毫克 THC,我们的第一个模型并不好。

因此,我们认为我们可以通过利用价格和数据中的其他数字做得更好。更贵的产品可能含有更多的主要活性化学物质,包括四氢大麻酚。通过考虑每家商店周围的销售时间和家庭收入,我们控制了两个关键趋势:THC 价格如何随着时间的推移而下降,以及高收入消费者如何抬高价格。这种基于回归的模型做得更好——每笔交易的误差为 20 毫克 THC 但仍有很多不确定性。

机器学习/人工智能极大地改善了预测

这促使我们更进一步:利用非结构化文本数据来预测 THC 的数量。

在上面的数据表中,猜测“PButter_Triples_10mg”和“PButter_Triples”很可能是相似的产品,可能具有相似的 THC 含量是合理的。他们有许多相同的名字。同样,“PButter_Triples”可能与“酊剂 Wintermint”有很大不同——它们没有相似的名字。为了利用这些信息,我们计算了所有交易中每个单词的每个唯一单词的频率。[4]有了这个庞大的频率表,我们将文本转换成了定量信息,以训练人工智能对 THC 含量进行预测。

Converting text into a “bag of words” model gives us usable data for machine learning.

我们选择的机器学习算法是“随机森林”,它使用来自数百棵决策树的预测。这些树中的每一个都不断地将数据分成许多类别来进行预测。我们数据的一个简化树可能如下所示:

Decision trees partition data into many categories according to rules. Here, in this toy, if a transaction’s price is less than $50 and its product name contains “PButter”, then we believe it has 10 mg of THC.

使用所有可用的信息——价格、销售时间、当地收入、产品名称、效力和所有其他变量——我们的 AI 创建了一个“随机森林”,试图最小化预测每笔销售的 THC 数量的误差。每笔交易的交叉验证误差仅为 5 毫克 THC,其性能远远超过所有以前的模型。事实证明,这是估算其余 560 万笔交易中每笔交易的 THC 含量的最佳方法。

跨车型的交叉验证性能

新能力,新答案

虽然我们的算法是熟悉的,但它们在这里的应用在药物政策领域开启了全新的机会。

我们对出售的四氢大麻酚含量的估计表明,华盛顿的大麻合法市场在不断扩大。我们不确定这是因为更多的人在消费大麻,还是合法市场正在蚕食黑市。

但是根据我们的估计,他们让决策者有能力回答更深层次的问题,即 THC 如何合法地到达消费者手中。到底是哪些产品让消费者兴奋?我们看到固体食物支配着液体食物。然而,从 2016 年 7 月到 2017 年 6 月,通过食品合法销售的 THC 只有 0.3 公吨,仅占同期西澳大利亚合法市场销售的 24 公吨 THC 的一小部分。

食物是获取 THC 的廉价途径吗?显然不是——它们每单位 THC 的价格大约是可用大麻产品的九倍。对大麻的需求完全由合法产品的销售来满足吗?不,差距很大。【5】如果没有,有黑市满足吗?也许吧。

这对消费者的健康有什么影响?我们的工作才刚刚开始。

我们揭示了这个行业规模和特征的另一个谜团。走出国门,我们在这里描绘的画面可能预示着加拿大市场将如何在未来几年发生变化。我相信数据科学家也会关注它。

脚注

[1]这不是数据的精确复制,因为在链接不同表中的匹配记录时涉及多个数据库连接。

[2]对生物多样性产品采用了单独的程序。为了简洁起见,这里省略了这些。

[3]兰德公司的研究人员史蒂文·达文波特利用正则表达式得出这些值。

[4]实际上,我们使用了一个 TF-IDF 矩阵来训练我们的模型。这些矩阵特别有用,因为它们降低了像“of”和“the”这样的非信息性单词的重要性。使用主成分分析,我们的 TF-IDF 矩阵的大小也减少了几百维,这大大加快了计算时间。

[5]我们在一个单独的项目中,通过根据抽样偏差重新加权的消费者调查,开发了我们对需求的估计——定义为消费者对大麻的消费,无论它是否是在受管制的市场上获得的。

我们用数据科学来探索艾德·希兰的歌曲,以下是我们的发现

原文:https://towardsdatascience.com/we-used-data-science-to-explore-ed-sheerans-songs-here-s-what-we-found-480b56b23517?source=collection_archive---------2-----------------------

那是星期五下午,艾德·希兰在那天早上发布了他的最新专辑。当我第一次坐着听它的时候,一个想法在我的脑海中闪过,“这张专辑听起来真的不太新鲜。要么是我听了太多他的歌,要么是他的大部分歌曲都是如此相似,以至于我现在或多或少能猜出歌词中的下一首是什么。在我考虑周五晚上的计划时,我给里法德发了条短信,像任何一个理智的计算机科学一年级学生一样,问他,“伙计,你愿意放弃周五晚上的计划,去听听艾德·希兰的歌吗?”令我惊讶的是,他很快就回来了,说他准备让自己经历在音乐网站上搜索歌词和在 d3.js 中创建可视化的痛苦。

Most popular words in Ed Sheeran’s songs

于是黑客攻击开始了。

这个想法是,我们将使用已知的自然语言处理技术,如词频、句子相似度和情感分析,来找出艾德·希兰歌曲的多样性。首先,我们必须从某个地方获取数据,Rifad 很快组装了一个刮刀,从互联网上众多歌词网站中的一个网站上获取歌词,后来我们才意识到我们可以使用 Genius API 来找到这些歌词。

尽管如此,一旦歌词保存下来,我的工作就开始了。最近,我一直在试验一种奇特的 word2vec 模型,它可以将单词转换为向量,然后人们可以使用这些向量,使用余弦相似度或欧几里德距离等现有技术,在句子、短语甚至整个文档之间找到某种程度的相似度。我想到的处理这个特定数据集的方法是,首先生成专门针对艾德·希兰歌词的单词嵌入,计算他所有歌曲的归一化向量,然后应用降维算法将向量维度从 50 个减少到 2 个,使其易于可视化。在这个过程中,我希望在他的歌曲中找到流行词,以及他的词汇是多么的丰富多彩。

点燃一个 Jupyter 笔记本,我开始工作。我使用了 gensim 的 word2vec 模型来生成单词嵌入。word2vec 模型的工作方式是将一个大型文本语料库作为输入,然后从中生成一个几维的向量空间。在相似的上下文中使用的单词在这个空间中彼此放置得更近。这里要注意的一点是,它需要大量的文本。我的文本语料库由 40 多首歌曲组成,词汇长度大约为 2500 个单词,虽然不完全是最好的输入源,但因为我们只是出于好奇才这样做的,所以我决定继续。我想我可以通过询问一些“粉丝”对他音乐的看法来评估这位模特的表现。现在,由于我使用的是微不足道的 4gb MacBook Air,我只使用了 50 维。最好的模型使用接近 300 个维度。单词的上下文窗口是 7,并且对频繁出现的单词进行子采样。在训练结束时,我有了一个 1.5 mb 的模型,其中他的歌曲中使用的每个单词现在都是一个 50 维的向量。

下一步是将他的歌曲作为向量构建一个相当特别的表示。为了做到这一点,我计算了每首歌的矢量和,然后将矢量归一化。标准化这些向量背后的原因是它有助于找到各对向量之间的相似性。事后看来,人们可能会认为,更公平的表示可能会利用某种方法,这种方法利用了一个词的 tf-idf 得分等指标。

有了这些向量,我决定快速构建一个单词云。毫不奇怪,使用最多的词是,紧随其后的是。(边注:如果你足够用心的看上面的云字,你可以在云字里看到艾德·希兰的剪影;) )

现在更有趣的部分来了,把我的 50 维向量空间投影到 2。从文献来看,有两种方法可以做到这一点,如果维度太高,主成分分析可以很好地将其减少到更易于管理的程度,然后可以使用 t 分布随机邻居嵌入算法再次将其减少到 2-3 个维度,然后可以可视化。另一种方法是直接使用 t-sne,这就是我所做的,因为它可以在 500 次迭代中轻松处理 50 个维度。

一旦尘埃落定,这就是我们得到的。

A 队(最左边)和形状的你(最右边,绿点)这样的歌和他其他的歌很不一样。我们对此的一个解释是,他的大部分歌曲在某些方面都是怀旧的,因此在中间有一簇。集群中的一些歌曲是山上的城堡照片。这有某种直观的意义,因为 word2vec 模型将相似上下文中的单词放得更近。这也是一个被艾德·希兰的青少年粉丝证实的观点,他们玩着观想游戏。

随着星期五的到来,我结束了一天的工作,把数据交给了里法德,这样他就可以计算歌曲的情感分数。他想利用谷歌情感分析 API 和 Spotify API,这样他就可以找到最悲伤/最快乐的歌曲。Google 情感 API 返回两个高度相关的分数,一个是情感分数,另一个是代表不同长度文本中情感的量级。因此,较长的文本将具有较高的量级。另一方面,Spotify API 返回了一堆有趣的指标,比如可跳舞性、语速和效价。我们想出了一个非常粗略的、背在纸上的公式来计算最终的歌情。因为效价和情感分数是相似的值,我们把它们加在一起,然后乘以数量级。然后,我们将结果按语速划分,认为对于包含更多单词的歌曲,结果应该是正常的。然后,我们对结果进行平方,并计算结果的对数值。我们当然认为这个公式没有最好地代表歌曲中的情感,然而,它有一些坚持人类对歌曲的判断的外表,这可能是对的,也可能是错的。

分数越高的歌曲越积极。不出所料,不要是最悲观的,或者说可能是使用了最多带有负面含义的词语的人。我知道什么真的让我们觉得我们知道什么,它有一个不自然的高分。我想我们可以把这部分归因于他歌词的模糊性。

总的来说,这是一个很好的星期五到星期六,用来编写相当业余的文本挖掘脚本。更重要的是,我们学到了很多关于这个过程的知识,获得了一些真正的乐趣,偶尔还会遇到令人惊讶的结果。

我们制作了一个快捷的网站,在那里我们所有的互动可视化都是——https://r1fad.github.io/edSheeran/

我们所有的代码都可以在这里找到——【https://github.com/r1fad/edSheeran】T21

微型杀伤性武器:我们的“喜欢”如何劫持民主

原文:https://towardsdatascience.com/weapons-of-micro-destruction-how-our-likes-hijacked-democracy-c9ab6fcd3d02?source=collection_archive---------2-----------------------

Excel 文件揭示脸书/剑桥分析公司丑闻背后的数据科学

“我们能够建立一个模型来预测美国每个成年人的性格。”—剑桥分析公司前首席执行官亚历山大·尼克斯

舔“喜欢”是我们大多数人不假思索就会做的事情。这是一种社会货币,它给我们短暂的震动,并加速我们的多巴胺中心。然而,谁知道我们所有的“喜欢”会预测我们的个性,并变成反对我们的政治说服工具呢?

接下来是:

  • 这是一个警示性的故事,说明大数据如何被坏人滥用。
  • 一步一步的电子表格教程,解释了个性预测算法,套索回归。
  • 以及对你在网络上留下的数字足迹的警告。

震惊世界的大选过去近两年后,剑桥分析公司(简称“ca”)的脸书丑闻仍然是媒体关注的焦点。似乎这个故事的每个有趣的角度都被报道了。

但是有一个问题仍然没有解决:

这些模型是如何工作的??

而不是表面上的(你喜欢的脸书页面与个性测验分数的关联)。但是在引擎盖下。用一种大多数人都能理解的语言……好啊 Excel 先生。

作为一个自称的数据迷和电子表格活动家,我试图满足我的好奇心,并对我发现的简单性感到惊讶。

通过一个名为 LASSO regression 的一般线性回归模型,我将使用电子表格向您展示机器学习如何比只有 125 个脸书喜欢的家庭更好地预测您的个性。听起来有点反乌托邦,但却是事实。

你的数据是有价值的,你有权知道它是如何被使用的。

第 1-3 部分(约 10 分钟)讲述了所发生的事情,并向你介绍了丑闻的背景。您将了解微定位(根据您的个性档案向您发送个性化广告)的实践,以及如何收获 8700 万份脸书档案。

第 4-5 部分(约 15 分钟)向您展示了如何做到这一点——数据科学。如果你对丑闻很熟悉,只是想要教程,跳过这里。第 5 部分是我们打开引擎盖查看细节的地方。

Google Drive 电子表格链接:

这个模型最好在 Excel 中查看,但是你也可以在 Google Sheets 中在线查看(calcs 比较慢),并且有一个 PDF 格式的数学(文章的第 5 部分),便于离线参考。

  • https://drive . Google . com/drive/folders/1hx _ mhajbsdq w5 jpwtwcpgihm 2 xyl 3 RH 7?usp =共享

像任何超能力一样,机器学习会被反派(Cambridge Analytica)和英雄一样使用(危机文本行)。小心行事。

如果你喜欢这篇文章,并想获得其他免费的电子表格教程,帮助你理解像面部识别或网飞如何提出你的建议,在这里注册我的电子邮件列表:

剑桥分析公司(Cambridge Analytica)是一家数据驱动的分析公司,专门从事心理特征分析或“心理战”,于 2016 年 6 月被特朗普竞选团队聘用,负责领导其数字行动,直至 11 月的大选,并吹嘘说他们拥有美国每个成年人的多达 5000 个数据点

Source: https://cambridgeanalytica.org/

呼气…哇。

事实上,他们在其网站上将此列为一项成就(连同截至 2018 年 5 月的破产通知)。

Source: https://ca-political.com/

在选举前的几个月里,CA 将他们的数据宝库投入到他们的个性预测机器中,建立了针对不同受众的 10,000 高度个性化的脸书广告,以努力操纵未决选民的投票行为,抑制投票率。

肯·波恩有人吗?

他们称这种广告行为为“微定位”帮助开发这些工具的前 CA 神童数据科学家和告密者 Christopher Wiley称之为:

Source: The Guardian; (Note: caption added by me)

你的选民记录,你在哪里购物,你的推文,你的地理位置电话数据,你去什么教堂,你看的电视节目,你的脸书喜欢。他们有。

尤其是你这样的人。

有了足够多的你喜欢的人,心理剖析领域的前沿研究人员在 2014 年证明,计算机在预测你的性格方面比你最亲近的人更准确。

  • 只要有 9 个脸书喜欢,计算机就能预测你和同事的性格。
  • 有 65 个赞,还有一个朋友。
  • 有了 125 个赞,你的家人。

“Computer-based personality judgments are more accurate than those made by humans”: http://www.pnas.org/content/pnas/112/4/1036.full.pdf

根据剑桥研究人员的说法,他们最终收获了 CA 微定位操作中使用的脸书数据,仅在 1 周内就可以从头开始学习这样的机器学习模型:

数据远比模型更有价值,因为如果你有数据,建立模型是非常容易的——因为模型只使用一些很好理解的统计技术来建立它们。我能够在一周内从不做机器学习变成知道我需要知道什么。就这么多。亚历山大·科岗

他是对的。

在大计划中,模型(你的喜好和个性测验分数之间的一种关联)是容易的部分。

在讨论如何使用心理分析以及如何收集 8700 万份脸书档案之前,有几件事我想说出来…

我的 4 个警告—数据科学不是万能的

  1. 数据科学不是万能的。光靠它不能操纵选举或让一个好的候选人变坏。然而,当选举由极微弱优势决定时,毫无疑问,技术可以发挥作用。
  2. 微观定位在政治中的有效性广受争议,但我们不知道它在特朗普竞选中的效果如何。在选举之后,丑闻各方的关键人物(川普竞选团队、CA、特德·克鲁兹竞选团队、亚历山大·科岗)都公开声称 CA 的模特是一文不值的蛇油、自切片面包以来最好的东西,或者根本没用过。其他怀疑者对微定位的有效性进行了辩论,而该领域的研究人员则持不同意见。鉴于 CA 的模型不在公共领域(谢天谢地),我不会猜测它们在多大程度上帮助或没有帮助特朗普获胜。请记住,大多数方面都受到激励,要么保持距离,要么邀功。

Source: https://overthinkgroup.com/facebook-cambridge-analytica/

3。这一丑闻的根源是同意。在 2014 年之前,脸书的开发者政策允许第三方应用在没有朋友同意的情况下收集脸书用户朋友的数据。因此,尽管只有约 30 万人参加了在线性格测试并表示同意……这也暴露了他们朋友的数据(他们没有明确表示同意)……8700 万人。该数据随后与 CA 共享(违反脸书的政策)。没有黑客入侵,数据永远在外面。

4。您的数字足迹正在增长。机器变得越来越智能。政治是一场高风险的游戏。这不是你最后一次听说坏人利用你的数据进行邪恶的活动(叹气),但是知情是很重要的,这样你就可以在数据隐私方面做出自己的选择。数据经纪人不歧视政党,在某些情况下,你可以看到这些机构掌握的你的数据。像 CA 这样的组织已经被用于2020 年的选举,脸书现在有一个选举作战室来应对新出现的威胁,所以这不是你最后一次听到这个消息。

既然我已经一吐为快了,让我们来看看心理侧写是如何工作的。

你思想的隐形操纵者

心理测量是一种测量个人性格的科学尝试,自 20 世纪 80 年代以来一直存在。

简单来说,人们参加一个问答性格测验,他们在标准的“大五”性格特征(海洋)上得分。

Source: Cambridge Analytica

一旦你知道了某人的个性,你就可以将他们分成不同的广告段,并根据他们的个人口味,发布量身定制的有说服力的广告。

大数据的兴起

尽管心理特征分析已经存在了几十年,但问题总是在于数据收集。

由于大多数性格测验涉及 100 多个问题(如下例),需要 20-30 分钟才能完成……从全球范围内的大范围人群中收集数据从来都不容易。

Sample personality question from IPIP

然后脸书在 2004 年出现了。

“大数据”一词是在 2005 年创造的。

第一代 iPhone 发布于 2007 年。

我们的数字足迹开始呈指数增长。

大研究和炸薯条

突然,研究人员看到了机会。

2007 年,剑桥心理测量中心的两名心理学研究人员开发了一款脸书性格测试应用(myPersonality),并迅速走红。超过 600 万人使用该应用程序,其中近一半的人允许研究人员使用他们的脸书数据。

社会科学家现在有了一座个性数据的金矿,他们可以从中挖掘洞察力。

2013 年,他们发表了突破性的研究,表明你对脸书的喜欢可以预测你的个性和政治观点(以及其他方面):

Source: http://www.pnas.org/content/pnas/early/2013/03/06/1218772110.full.pdf

Source: http://www.pnas.org/content/pnas/early/2013/03/06/1218772110.full.pdf

有趣的是,它表明高智商的最佳预测者是“雷暴”、“科尔伯特报告”和“卷曲的薯条”(注意:相关不等于因果……吃薯条不会让你更聪明,斯蒂芬哈哈!)。

“I can feel my brain getting bigger.” — Stephen Colbert (https://archive.org/details/COM_20130328_083000_The_Colbert_Report/start/840/end/900)

同样,喜欢“Hello Kitty”的人往往有“O——开放”的分数。

在他们的研究中,他们就数据隐私和所有权的含义敲响了警钟,但有其他议程的人很快注意到了这一点。

一个坏主意

在加入加州大学之前的 2013 年夏天, Christopher Wiley 发现了这篇论文并说:

“然后我偶然看到一篇关于性格特征如何可能是政治行为的先兆的论文,它突然变得有意义了。自由主义与高度开放和低自觉性相关,当你想到自由民主党时,他们是心不在焉的教授和嬉皮士。他们是早期采用者…他们对新思想非常开放。突然间,一切都变得明朗起来。”

2013 年晚些时候,Wiley 被介绍给了 Alexander Nix,后者向他提供了一份在英国行为研究和传播公司战略传播实验室(Strategic communication s Laboratories)担任研究总监的工作,该公司随后创建了美国子公司 Cambridge Analytica。

尼克斯告诉怀利,

“我们会给你完全的自由。实验。来测试你所有疯狂的想法。”

那不是个好主意。

在为 SCL 做研究时,威利与史蒂夫·班农取得了联系。鉴于班农作为《布莱巴特》主编对政治的兴趣以及他对奈杰尔·法拉奇脱离欧盟英国退出欧盟运动的支持,克里斯关于政治信息的想法激起了班农的兴趣。

12 月,CA 成立,班农担任副总统,并得到共和党超级捐助者和人工智能先驱罗伯特·默瑟的资金支持。

有了充足的储备,CA 需要找到一种方法来获得脸书的数据并实现他们的政治说服承诺。

数据采集季节到了

亚历山大·科岗出场了。

科岗是剑桥大学的一名研究员,2014 年初,威利和科岗经人介绍认识了对方。

威利和 CA 对科岗的研究实验室从他们的应用程序中获得的脸书数据感兴趣。

CA 愿意向研究人员支付数据费用;然而,科岗和他的大学同事们之间的谈判破裂了(他们既有伦理上的顾虑,也和科岗有金钱上的纠纷),所以科岗和 CA 设计了另一个计划。

科岗主动提出开发自己的应用程序,自己收集数据。CA 同意并帮助他建立了一个名为全球科学研究或“GSR 的独立实体 GSR 将获取数据,与 CA 共享,CA 将补偿 GSR 的费用。

Data Harvesting

为了加快收集数据,GSR 使用了第三方在线调查公司 Qualtrics,并通过亚马逊的 Mechanical Turk 向用户支付 2 至 4 美元进行性格调查。

受访者被要求授权访问他们在脸书的个人资料,科岗的应用程序执行了它的唯一功能——收集他们在脸书的数据和朋友的数据。

Senate Judiciary Hearing on April 10, 2018; Source: https://youtu.be/BylLTX05jSY?t=13699

总共有超过 300,000 名脸书用户参加了这次测验(CA 花费了大约 100 万美元),这相当于收集了大约 8,700 万人的脸书数据(你的喜欢和其他个人资料数据,如你的位置、你的名字等……)。

以下是我整理的时间表,展示了一些关键角色之间的联系:

Good Research, Bad Actors

那么哪里出了问题?

  1. 在应用程序审核过程中,脸书未能阅读 GSR 应用程序的所有条款和条件(见上面的条款图片&条件)。他们在法庭上承认了这一点,GSR 的条款规定他们可以出售人们的数据。
  2. 不管 GSR 自己的条款如何,GSR 自己忽略了脸书的应用程序开发者政策(科岗声称没有阅读),该政策禁止他们与 CA 共享数据。
  3. 朋友没有明确同意 —脸书的应用开发者政策(当时)允许一个人同意他们所有朋友的数据。

现在 CA 有了他们的数据,是时候让他们使用,呃…“滥用”它了。

从实验室到政治说服

“我们利用脸书收集了数百万人的个人资料。并建立模型来利用我们对他们的了解并锁定他们内心的恶魔。这是整个公司建立的基础。”— Christopher Wiley,加州大学前数据科学家

这里有一个简单的例子来说明微定位是如何工作的:

  1. 识别选民——利用选民记录和其他数据,识别尚未做出决定的选民
  2. ID 热点话题 —选择一个对选民来说重要的“热点”话题,如第二修正案(持枪权)
  3. 调整广告以适应个性——根据个人的个性档案,细微调整信息以更好地引起那个人的共鸣。
  4. 匿名投放广告——通过一种被称为“暗帖”(现已被禁止)的脸书做法,匿名购买广告并投放给符合你标准的人

正如 Alexander Nix 所解释的那样,例如,一个高度神经质(‘N’)和高度尽责(‘C’)的人需要一个理性的、基于恐惧的信息。他们会看到一张窃贼进入他们家的照片,因为入室盗窃的威胁以及拥有枪支的保险单很有说服力。

Source: Cambridge Analytica

相反,一个开放程度低(“O”)且非常随和(“A”)的人需要根植于传统和家庭的信息。他们会看到一张父亲将价值观传递给儿子的照片。

根据一名前 CA 员工泄露的内部幻灯片显示,在特朗普竞选期间,他们的广告被观看了 15 亿次。

随着大数据的兴起,广告变得越来越个性化也就不足为奇了。不过,问题不在于个性化广告。问题在于数据隐私、缺乏透明度和同意。

现在我将使用一步一步的电子表格来解释丑闻背后的数据科学。是的,有数学。但是你可以遵循所有的公式…不需要编码。

在这一部分,我将讨论:

  1. 性格预测研究中使用的算法概述
  2. 拉索回归简介
  3. 拉索回归中如何选择最佳λ

将第 4 部分视为套索回归的“鸟瞰”级别视图;然而,第 5 部分是“虫眼”视图。

在第 5 部分中,您将看到所有的逐步数学推导和对 Excel 文件中公式的引用。它非常详细,但坦率地说,我不能忍受教程隐藏这些细节,所以我们将得到引擎盖下!

4.1 个性预测算法概述

尽管 CA 使用的确切算法并不公开,但我们可以转向他们的想法所基于的研究论文,并从采访中收集见解。

以下是我们从两篇重要研究论文中了解到的情况:

LASSO: http://www.pnas.org/content/pnas/112/4/1036.full.pdf; SVD: http://www.pnas.org/content/pnas/early/2013/03/06/1218772110.full.pdf

我选择 LASSO 回归作为本教程的参考,是因为两篇论文背后的一位研究人员和亚历山大·科岗(剑桥的研究人员,他给了 CA 所有的脸书数据)所做的评论。

2018 年在艾伦·图灵研究所谈论他 2014 年的论文时,论文背后的一名研究人员这样说:

"我们没有做奇异值分解,而是做了套索回归,这提高了我们的精确度."

再者,科岗有说:

“我们并没有完全使用 SVD,”他写道,并指出当一些用户比其他人有更多的“喜欢”时,SVD 可能会很困难。相反,科岗解释说,“这项技术实际上是我们自己开发的……它不属于公共领域。”没有深入细节,科岗将他们的方法描述为“多步骤共现方法”

当你有高维数据时,SVD 和 LASSO 都是强有力的技术(一个“大”的特征…就像我们例子中的数百万个“脸书页面”)。它们都为您提供了消除数据冗余、关注最具预测影响力的信息以及提高计算效率的方法。LASSO 还有一个额外的优点,那就是可解释性。

4.2 套索回归简介

套索回归是一种线性回归,它使用 L1 正则化(如下所述)来防止过度拟合和执行自动特征选择。

由于我们的目标是找到最重要的脸书页面对个性得分的预测影响,自动特征选择(消除没有影响或多余影响的脸书页面)非常有吸引力。

Each Facebook Page‘s coefficient determines that page’s predictive influence

先定义 LASSO 代表什么,定义背后的目标函数(基于 scikit-learn 对 LASSO 的实现)。

L 东AbShrinkageS选举 O 操作员

目标是找到使我们的目标函数最小化的系数(贝塔系数)(下面以 4 种不同方式给出):

在方程的前半部分,拟合度,我们有一个简单的均方误差方程(前面的 1/2 项是为了简化我们将在第 5 部分探讨的数学)。

在等式的后半部分,L1 惩罚,如果λ(我们控制的调谐参数)大于零,那么如果我们希望最小化目标函数,添加我们的系数的绝对值意味着我们的系数必须收缩(与没有惩罚的系数值相比)。

因此,套索中的“最小绝对收缩率”或“LAS”。

把 L1 的处罚想象成收缩射线。它将缩小系数的大小…并且有可能使系数消失。

L1 penalty is like a shrink ray gun. It shrinks coefficients and sometimes makes them disappear!

你可能想知道为什么我们要增加一个惩罚来缩小系数的大小?答案是防止“过度拟合”

当算法“记忆训练数据”时,就会发生过度拟合,这意味着它不会针对看不见的/测试数据进行很好的概括。添加惩罚有助于“调整”系数的大小,并改进算法对从未见过的维持数据的预测。

L1 penalty prevents overfitting

正如我们将在下一节中看到的,当 lambda 值足够高时,它也会迫使一些系数为零,因此充当'选择运算符'(LASso 中的“SO”)。具有零系数的页面意味着该页面在预测中被忽略,并且当我们有许多具有零系数的页面时,这被称为“稀疏解”

反之,如果系数很大(真的很高或者真的很低),则说明该页面的影响力度很高。

4.3 如何在 LASSO 回归中选择λ

选择最佳 lambda 值的一种流行技术叫做交叉验证。

在 k-fold 交叉验证中,您任意选择一系列 lambda(我在 Excel 模型中使用 0.0、0.01、0.10、1.0),查看每个在您的验证集上的表现,并选择在所有验证集中具有最低平均误差的 lambda。

例如,如果我们有足够的数据(未在 Excel 中显示),我们会将我们的数据分成训练/测试集,然后进一步将我们的训练数据分成 5 (k)个折叠或分区。在 5 个验证集上测试了每个 lambda 之后,我们会选择平均误差最小的一个。

在 Excel 模型中,我使用了一个难以置信的小数据集作为文件,旨在便于遵循并向您传授关键原则:

  • 训练集= 5 人(和 8 个可能的脸书页面)
  • 测试集= 2 人
  • 验证集=无

假设没有验证集,两个人的测试集将足以在 Excel 模型中选择最佳的 lambda😎

在测试了所有的λ之后,当我们增加λ的大小时,可视化收敛的脸书页面系数的路径是有帮助的(参见表“C1”。Excel 文件中的分析-套索追踪):

LASSO Trace — Tracking Coefficient Values Based on Different Lambdas

这给了我们几个推论:

  1. 随着λ的增加,稀疏度增加…零系数的数量从零增加到全部
  2. 当λ为零时(没有 L1 惩罚),使用所有系数,并且训练 MSE 是最佳的;然而,当 lambda 为 0.10 时,测试 MSE(最终影响因素)是最佳的。
  3. 当λ太低时,0.0,我们过度拟合(低训练 MSE,较高测试 MSE)。当λ太高(1.0)时,我们处于拟合不足状态(高训练和测试 MSE)。

现在你已经对 LASSO 做了什么有了一个高层次的了解,我们将处理一些具体的数学问题,并浏览如何在 Excel 模型中为特定的 lambda 训练算法。

现在是我们动手的时候了…在我们训练算法的时候,我会处理下面的每个部分。

  1. 定义目标函数、关键术语和 Excel 文件概述
  2. 数据预处理——从“喜欢”到“标准化”
  3. 用零初始化系数
  4. 循环坐标下降—一次更新一个系数
  5. 迭代直至收敛

我们的目标是找到对某人的开放程度最有预测性影响的脸书页面(海洋人格得分中的“O”)。虽然 Excel 文件中的人是虚构的,但脸书的 8 页是研究论文中最有影响力的部分。

5.1 定义目标函数、关键术语、Excel 文件

如第 4 部分所述,我们的目标是找到使套索成本函数最小化的系数(为了清楚起见,下面给出了几种方法)。在函数下面是一个图例,解释每个希腊符号。

当我们完成训练算法的步骤时,您可以参考表“B1”。TrainingAlgorithm_Lambda_.01”了解数学运算。

我会告诉你如何更新 1 脸书页的系数。

由于每个系数是“一次一个”更新的(而不是像梯度下降中那样“一次/同时更新”),您可以将相同的数学方法应用于后续的系数更新。

Excel 表从左到右将“迭代”(所有系数的完整训练循环)组织成多个部分。在每次迭代中,你可以看到每个脸书页的系数是如何一次更新一个的。最后,你可以在左上角看到我们的 lambda 超参数。

在我们训练我们的算法之前,我们必须把我们的‘喜欢’转换成计算机能理解的语言……0 和 1!

5.2 数据预处理:从“喜欢”到“标准化”

我们训练管道的第一步是预处理我们的数据。参见 Excel 文件中的表“a .预处理数据”。

我们首先将每个“Like”转换为“1 ”,其他的都变成“0 ”:

接下来,为了确保一个页面的受欢迎程度不会影响算法对该页面的权重,我们必须让每个脸书页面处于相同的比例。

如果一个页面非常受欢迎(比如“TED”——5 个人中有 4 个人喜欢它),我们需要一种方法来确保算法不会对这个页面和一个不太受欢迎的页面(比如“单身汉”——5 个人中只有 2 个人喜欢它)产生不同的权重。

为了实现这种缩放,我们使用一种称为标准化的技术。标准化使每个页面居中,因此每个页面的平均分数为 0,标准偏差为 1(这使每个页面符合相同的“钟形曲线”)。

**Standardization Formula (also in Excel file):** (Sample Page Raw Score — Page’s Average Score)
 =   ______________________________________________
           Page’s Standard Deviation

Preprocessing Data — Standardization

5.3 用零初始化系数

在训练开始时,每个脸书页面的系数从 0 开始。

然后,使用一种称为“循环坐标下降”的迭代更新方法,该模型“学习”每次调整 1 个系数,以根据我们的训练数据生成更好的预测。每个系数都可以被认为是一个“坐标”,我们按顺序循环(从第一个开始,到第八个结束)。

由于我们的数据在训练开始时是标准化的,我们可以有效地忽略偏差,因为它对模型没有影响。

参见表 B1。TrainingAlgorithm_Lambda_.01 ":

为了确保这个算法可以重现,我在每次迭代中以循环顺序更新系数;但是,这不会在生产中产生最好的效果。

由于 LASSO 在消除冗余方面做得很好,因此按顺序更新它们将导致算法保留第一个脸书页面的系数,如果有两个页面有相同的喜欢。

如果你用 Python 实现 LASSO(比如 sci-kit learn 的包),最好选择“随机”而不是“循环”这将确保每次迭代中系数更新的顺序是随机的,这也将导致更快的收敛。

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html

5.4 循环坐标下降:更新系数

⚠️在这一节,有很多数学 ⚠️

为了清晰起见,展示了每一个艰苦的步骤,您将看到机器实际上是如何“学习”更新系数的。

为了便于参考,您可以查看作为 PDF 的数学步骤,或者参考 Excel 文件中的“D. LASSO 回归数学”表。

所有数学运算的最终结果提供了用于更新每个系数的 3 个更新规则。例如,参见表“B1”中的第 36–45 行。Excel 文件中的 TrainingAlgorithm_Lambda_.01 "。

如果这不适合你,你可以试试这种方法…

https://xkcd.com/1838/

循环坐标下降是一种优化算法。在每次迭代中,一个坐标(或“系数”)在使我们的目标函数最小化的方向上更新。

与梯度下降的关键区别在于套索目标函数中的 L1 罚项因绝对值符号而不可微。

本质上,如果我们知道函数的输出(如误差)将通过改变输入(如系数)的值而改变,那么函数就是可微的。

因为绝对值的导数可以是-1,未定义,或 1,所以它是不可微的。因此,我们必须计算“子梯度”,我们的更新规则将根据满足的条件采取 3 种形式中的 1 种。

以下是我们将涉及的 4 个步骤:

  1. 计算 MSE 相对于 1 系数的梯度(套索成本的第 1 部分)
  2. 简化步骤 1 的结果,重新定义术语
  3. 计算 L1 罚金的次梯度(套索成本的第 2 部分)
  4. 将步骤 1 中的梯度与步骤 3 中的子梯度相结合,并定义 3 个更新规则。

第 1 步,共 4 步:

第 2 步,共 4 步:

在 Excel 文件中,您可以在工作表“B1”上看到这些计算。第 16–34 行中的 TrainingAlgorithm_Lambda_.01 "。

第 3 步,共 4 步:

第 4 步,共 4 步:

在 Excel 文件中,您可以在工作表“B1”上看到这些计算。第 36–45 行中的 TrainingAlgorithm_Lambda_.01 "。

在你训练算法时一次更新一个系数之后,下一个问题是…你什么时候停止训练?

5.5 迭代直到收敛

在 LASSO 回归中,收敛标准是用户定义的,当满足以下两个条件之一时,算法停止训练:

  1. 最大迭代— 一旦算法经过(插入次数)次迭代(对所有系数进行“训练循环”),训练停止。
  2. ‘Tol = Tolerance’—Tolerance 代表迭代前后系数值的变化。在每次迭代结束时,该算法比较该迭代之前/之后的每个系数的值,如果至少有一个系数的变化没有超过容差值,则训练停止。

在 Excel 文件中,可以在第 373–385 行看到公差标准,我使用的公差为 0.001。

停止训练后,您应该选择在验证集上表现最好的 lambda,并检查系数。

包裹

当您拥有数百万个要素并且正在寻找一种简单的方法来解释结果时,套索回归是一种强大的工具。

在我们的例子中,我们可以看到“科尔伯特报告”是最有预测影响力的脸书页面;但是,请记住,算法首先看到了这一页,因为我们没有以随机顺序更新系数,所以这是一个有偏差的结果。

当我们反思脸书丑闻时,信任是双向的,当这种信任被打破时,各方都应该重新审视自己的信念、政策和行动。

我们正处于数字时代的婴儿期,我们几乎还没有找到自己的立足点,但随着技术的加速发展,我们的数字足迹将继续呈指数级增长:

  • 作为消费者,你愿意放弃哪些数据来换取免费服务和个性化体验?
  • 作为一家公司,你应该采取什么样的数据隐私政策?
  • 作为一名数据科学家,你是否在遵循类似于表示或表示的道德清单?
  • 作为政府,监管应该扮演什么角色?

在此类丑闻之后,社会对数据隐私的看法将继续被重塑,未能发展的公司将通过自然选择被淘汰。

数据科学既不是万灵药,也不是诅咒。当谈到心理测量学的未来时,斯坦福大学的研究员迈克尔·科辛斯基总结道:

“这有点像火,”他说。“你可以用火来温暖你的房子,也可以烧掉它。你不能禁火,也不能阻止某些人纵火。你需要的是消防员和消防设备。”

订阅更多并分享

如果你喜欢这个,并且想在 Excel 中获得更多免费的机器学习教程,直接发送到你的收件箱,请点击下面并输入你的电子邮件。

课程包括如何建立你的第一个神经网络,面部识别如何工作,以及网飞如何生成你的建议。

如果你是一个电子表格积极分子,请与他人分享这篇文章😉

其他资源:

  • 电影——关于心理测量学的 14 分钟纪录片+丑闻
  • 拉索回归——VBA 教程(帮我做了详细的数学)
  • 拉索回归(L1) vs .岭回归(L2)——Python 中的精彩概述来自 Aarshay Jain 和 Team AV
  • 套索回归— Coursera 第一课
  • 脸书于 2012 年提交的个性预测专利申请(在“喜欢”的预测能力研究发表之前)

基于网络的语音命令识别

原文:https://towardsdatascience.com/web-based-voice-command-recognition-58a9bb1ec8db?source=collection_archive---------8-----------------------

上次我们将音频缓冲区转换成图像。这次我们将拍摄这些图像,并使用 deeplearn.js 训练一个神经网络。结果是一个基于浏览器的演示,让你说出一个命令(“是”或“否”),并实时查看分类器的输出,就像这样:

很好奇想玩玩它,看看它除了识别之外,是否还识别?现场试用。你会很快发现表演远非完美。但这对我来说没问题:这个例子是为了成为在网络上进行各种音频识别的合理起点。现在,让我们深入了解这是如何工作的。

快速入门:训练和测试命令识别器

以下是你如何训练自己的是/否分类器:

1.进入车型培训页面。从服务器下载训练 数据需要一点时间。

2.单击训练按钮,您将看到一个显示训练进度的图表。一旦你准备好了(这将需要一段时间,可能 500 次迭代或 2 分钟,取决于你的硬件),停止训练,并按下保存重量(文件)按钮。这将下载一个 JSON 文件。

3.然后进入推理演示页面,按下 load weights (file)按钮,选择下载的 JSON 文件,加载训练好的模型。

4.翻转开关,允许使用麦克风,并尝试说“是”或“否”。您将在页面底部看到麦克风和置信度。

以上是对训练示例如何工作的机械描述。如果你有兴趣了解血淋淋的(和有趣的)细节,请继续阅读。

数据预处理和加载

训练一个神经网络需要大量的训练数据。在实践中,可能需要数百万个样本,但我们将使用的数据集按照现代标准来看是很小的,只有 65,000 个标记样本。每个示例都是一个单独的 wav 文件,文件名中带有标签。

将每一个训练 wav 作为一个单独的请求来加载被证明是非常慢的。每个请求的开销很小,但是当超过几千次时,就真的开始感觉到了。为了更快地加载数据,一个简单的优化方法是将带有相同标签的所有示例放入一个长音频文件中。解码音频文件非常快,把它们分成一秒钟长的缓冲区也是如此。进一步的优化是使用压缩音频格式,例如 mp3。[scripts/preprocess.py](https://github.com/google/web-audio-recognition/blob/master/train-model/scripts/preprocess.py)会为你做这个连接,产生这个迷人的结果。

在我们“再水合”我们的原始音频示例之后,我们将原始数据的缓冲区处理成特征。我们使用我在上一篇文章中提到的音频特征提取器来完成这项工作,它接收原始音频,并生成 log-mel 声谱图。这相对较慢,并且占据了加载数据集的大部分时间。

模型培训注意事项

对于是/否识别器,我们只关心两个命令:“是”和“否”。但是我们也想发现任何这样的话语的缺乏,以及沉默。我们包括一组随机话语作为“其他”类别(没有一个是或不是)。这个例子也是由预处理脚本生成的。

因为我们面对的是真正的麦克风,我们从来没有期望听到纯粹的寂静。相反,“静音”是某种程度的环境噪音加上糟糕的麦克风质量。幸运的是,训练数据还包括背景噪声,我们将它与不同音量的训练样本混合在一起。我们还生成了一组无声示例,其中仅包括背景音频。一旦我们准备好样品,我们就生成最终的光谱图作为我们的输入。

为了生成这些最终的频谱图,我们需要决定缓冲区和跳跃长度。合理的缓冲长度是 1024,跳长是 512。由于我们处理的是 16000 Hz 的采样速率,因此计算出的窗口持续时间约为 60ms,每 30ms 采样一次。

一旦我们标记了光谱图,我们需要将输入和标签转换为 deeplearn 数组。标签字符串“是”、“否”、“其他”、“沉默”会被一键编码为四个整数的Array1D s,意思是“是”对应[1, 0, 0, 0],“否”对应[0, 1, 0, 0]。来自特征提取器的光谱图需要转换成一个Array3D,作为模型的输入。

我们正在训练的模型由两个卷积层和一个完全连接的层组成。我直接从 deeplearn.js 的 MNIST 示例中获得了这个架构,并且根本没有为处理 spectrograms 进行定制。结果,性能与最先进的语音识别相差甚远。要查看更多的错误分类,请尝试音频的MNIST,它可以识别语音数字(例如“0”到“10”)。我相信,通过遵循本文我们可以做得更好。现实世界的语音识别器可能根本不使用卷积,而是选择更适合处理时间序列数据的 LSTM 。

最后,我们想告诉机器学习框架如何训练模型。用 ML 的说法,我们需要设置超参数,包括设置学习率(每步跟随梯度多少)和批量大小(一次摄取多少个例子)。我们出发去比赛:

在训练过程中,梯度下降算法试图最小化成本,你可以看到蓝色。我们还用橙色绘制了准确性,这是偶尔通过在测试集上运行推理来计算的。我们使用测试集的随机子集,因为推理需要时间,我们希望尽可能快地训练。

一旦我们对测试的准确性感到满意,我们就可以保存模型权重并用它们来推断结果。

保存和加载模型权重

一个模型由它的架构和它的承重节点的重量来定义。权重是在模型训练过程中学习的值,并且不是所有节点都具有权重。ReLUs 和 flatten 节点不会。但是卷积和全连接节点既有权重也有偏差。这些重量是任意形状的张量。为了保存和加载模型,我们需要能够保存图的权重。

保存和加载模型很重要,原因如下:

  1. 模特训练需要时间,所以你可能想训练一下,减肥,休息一下,然后从你停下的地方继续。这称为检查点。
  2. 从推论上来说,拥有一个可以加载和运行的自包含模型是很有用的。

在撰写本文时,deeplearn.js 还没有序列化模型和模型权重的工具。对于这个例子,我实现了一种加载和保存权重的方法,假设模型架构本身是硬编码的。[GraphSaverLoader](https://github.com/google/web-audio-recognition/blob/master/train-model/src/GraphSaverLoader.ts)类可以保存来自本地存储(IndexedDB)或文件的&负载。最终,我们将需要一种非黑客的方式来保存和加载模型及其相应的权重,我对 ML 开发人员工效学的改进感到兴奋。

包扎

非常感谢 Nikhil 和 Daniel 在 deeplearn.js 上的辛勤工作,以及愿意回答我一连串愚蠢的小问题。另外,还要感谢皮特,他负责创建和发布我在这篇文章中使用的数据集。亲爱的读者,谢谢你读到这里。

我很高兴看到这种基于浏览器的音频识别技术如何应用于令人兴奋的教育 ML 项目,如可教机器。如果你能制造一个自我改进的系统,对每一个额外的口语进行训练,那该有多酷?在浏览器中训练这些类型的模型的能力允许我们以保护隐私的方式考虑这样的可能性,而不用向任何服务器发送任何东西。

所以你有它!这是对网络上语音命令识别的解释。我们在的上一篇文章中讨论了特征提取,而这一次,我们稍微探讨了一下完全在浏览器中进行的模型训练和实时推理。

如果你以这个例子为基础,请在 twitter 上给我留言。

最初发表于smus.com

面向数据科学家的 Web 开发

原文:https://towardsdatascience.com/web-development-for-data-scientists-42b0a34dbdec?source=collection_archive---------14-----------------------

一口大小的数据科学第三集

几乎从定义上来说,数据科学是跨学科的。一个好的数据科学家既是统计学家,又是主题专家,还是开发人员。

但是,你如何检查这些盒子呢?你需要知道的大多数统计数据和模型构建都可以通过像 Udacity 和 Fast.ai 这样的 MOOCs 获得。你需要的大部分主题经验,你可以在工作中学习,或者通过阅读维基百科的文章。

但是开发者盒子呢?在数据科学的上下文中,“开发”是什么意思?弄清楚这一点可能是在数据科学领域立足的最具挑战性的方面,因为大多数进入数据科学的人都是为了算法和模型构建。

他们通常不知道如何编写干净的代码,或者如何进行 web 开发——或者为什么这很重要。

这就是为什么 Wesley 在本周的指导中开始关注网络开发。

Web 抓取:Scrapy 和 Selenium 概述,第一部分

原文:https://towardsdatascience.com/web-scraping-a-simple-way-to-start-scrapy-and-selenium-part-i-10367164c6c0?source=collection_archive---------7-----------------------

kaggle.com

关于可以节省您时间的铲运机设计的想法

在这篇文章中,我分享了我第一次使用网络抓取的经验和我用过的工具( Scrapy 和 Selenium )。我希望这篇文章能对那些寻求普遍指导的人有所帮助,因为我涵盖了我认为有价值的知识和我希望在第一次想到刮擦时就知道的事情。具体来说,我想强调一起使用这两个工具的特点以及何时使用什么,因为我在网上找到的许多解释都集中在其中一个上。我不会讨论代码的细节,我会在另一篇文章中讨论,但我会通过 Airbnb 的例子来回顾我随着时间的推移而形成的概念理解,我发现 Airbnb 是这个主题的一个很好的榜样。作为旁注,我将使用术语网络抓取,抓取和网络爬行作为同义词。

F 首先,这不是火箭科学。可以说,开始这种项目的最好方法是边做边学,对于某些网站,你可以用 Python 的基础知识和手头的教程在几天内构建一个工作的 scraper。我开始从学习这种【真正有用】的零碎课程,打折时大约 10 美元。在很大程度上,本课程涵盖了 Scrapy 在网络爬行中的使用,但也涉及到了 Selenium 的使用。这两个可以单独使用,并合并在一个刮刀。如果您是 Python / JavaScript 初学者,合并它们可能需要一些额外的研究,但这是完全值得的。就我个人而言,我发现 Corey 的 YouTube 频道在学习 Python 基础知识方面很有帮助,因为他有很好的方法来分解概念。

D 不同网站——不同工具 虽然 Scrapy 是一个专门为 web 爬行而设计的 Python 框架,但它最适合正确呈现的 XML 和 HTML 页面,可能不适用于 JavaScript 驱动的页面,这些页面使用 React 和 Angular 等框架。实际上,这意味着您将向 Scrapy 传递一个有效的元素选择器,但将得到一个空输出。这方面的一个例子是不同种类的定时器和交互元素。Scrapy 的另一个特点是,它通过访问页面的 URL 来浏览页面,然而,当您检查元素或获取源代码(通过xpathcss)时,您会发现一些按钮没有任何链接到它们的 URL。例如,这个导游有一个href(网址),所以你可以重定向到旅游信息。

airbnb.ae

另一方面,这个 Airbnb 的“成为主机”按钮在你检查源代码的时候是没有 href (=URL)的。

airbnb.ae

最后一种情况的另一个例子是无限加载页面,以及在某些情况下的“加载更多”或“下一步”按钮。比如这个“显示全部”按钮:

airbnb.ae

在这些情况下,如果你想使用 Python,你会求助于其他工具,比如 Selenium ,我发现这是一个对初学者相当友好但优化程度较低的抓取工具。具体来说,Selenium 使得与网站互动变得容易,或者简单地点击页面,同时获得我感兴趣的元素。

同时, Selenium 在处理某些 Scrapy 优雅处理的异常时显得笨拙。其中一个例子是NoSuchElementException,Scrapy 返回一个空列表,而 Selenium 不能返回特定页面的所有元素。例如,考虑 Airbnb 上房屋的评论计数,如果一个物业有评论,计数器就会显示,你可以在跨度内的class="_1lykgvlh"中看到它。

airbnb.ae

然而,下面的属性没有 reviews,计数器也不是源代码的一个元素,在同一个class="_1lykgvlh"中没有什么可以“检查”的:

airbnb.ae

因此,如果您遍历所有这些类以从中获取所有元素,比如“new”标签、评论计数和“free cancel”标签,Selenium 将为第一个属性返回所有这些元素,并为第二个属性删除这些元素(即使只找到 1 个元素会触发 NoSuchElementException)。出于这个原因,在 Selenium 中处理这个异常和所有其他异常是非常重要的,因此您的 scraper 是健壮的和功能性的。

Selenium 的一个特性是,它必须为每个请求打开一个浏览器来getURL。这意味着 Selenium 是一个内存密集型工具,您可能会遇到内存利用问题。出于这个原因,我选择只在必要的时候使用硒,而不是过度使用。在 Airbnb 的例子中,如果我可以选择,我会从目录页面中抓取所有属性的详细信息,而不是进入每个属性配置文件,从那里抓取详细信息并返回到目录。

S scrapers 不通用 不用说,不同的网站会要求构建不同的 scraper,除非它们有相同的源代码。也就是说,一旦网站发生变化,为特定网站编写的 scraper 可能需要更改,因此您可能需要调整脚本。例如,开发人员可能会更改某个元素的类名或 id,这将导致异常或空结果。因此,有必要在浏览器、终端中监控抓取过程,或者只是查看输出文件。

B e 好听。并且避免被堵 一般来说,态度好一点,温柔的接近服务器。如果网站有 API,就使用它,如果没有,你真的需要它们,小心不要让他们的服务器崩溃,避免你的 IP 被封锁,所以要掌握 DOWNLOAD_DELAY , sleep() 的窍门,设置并发请求的限制或其他暂停你的刮板的方法。一个好主意是避免从你的主工作站启动铲运机,至少在你开始熟悉它的行为时。因为如果 IP 地址被屏蔽或被标记为可疑,这不仅对你来说是痛苦的,对你的同事、家人和任何使用同一网络的人来说也是痛苦的。这意味着,要特别留意具有重要战略意义的网站,比如 google.com(它不会屏蔽你,但会邀请你参加 CAPCHAs 会议)。

我喜欢熟悉该网站的机器人政策,阅读 robots.txt 以大致了解他们更喜欢允许和不允许机器人做什么,并搜索他们的网站以了解他们是否允许机器人出现在他们的网站上。

robots.txt for airbnb.ae

仅仅看一下限制列表就会让你感觉到他们对 crawler 有多严格。网站可以区别对待机器人,抓取工具通常会被自动屏蔽。如果您的日志中有 500 的请求状态,并带有Request deniedHTTP status is not handled or not allowed等,您就可以识别出这种行为。

如果没有 API,并且在设置延迟后你一直得到 500 个,你可以为你的 scraper 设置一个USER_AGENT,它会将它的头从pythonX.X或任何其他默认名称(很容易被服务器识别和过滤)更改为你指定的代理的名称,因此服务器会将你的 bot 视为浏览器。在 Scrapy 中,最简单的方法之一就是通过设置。但是请记住,您希望让用户代理与您的机器操作系统和浏览器名称保持一致。例如,这个USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'可以在 Mac 上运行,但不能在 Ubuntu 上运行。

T 现在有很多工具可供选择 Scrapy 和 Selenium 并不是网页抓取的唯一选择。有许多 Python 库(例如, BeautifulSoup 、 urllib 、 lxml 、 Requests )和其他工具,如谷歌的木偶师(node . js),可以提供类似的结果。区别在于他们可以处理的框架和成本。因此,你的目标是熟悉他们的能力,并以最有效的方式使用他们。

这些是我做第一批刮擦项目时学到的主要东西。和大多数事情一样,最困难的是开始,不要迷路。因此,我建议参加在线课程,比如我发现非常有用的网上课程,如果你是初学者的话,可以逐渐加深理解。

这是这篇文章的第一部分,我将继续第二部分,在这里我将与你分享一个 Python 代码,并解释它的功能,这样你就可以复制它。

如果你有问题,请在下面评论,如果你想建立关系网,请在 LinkedIn 上与我联系。

LinkedIn:【https://www.linkedin.com/in/areusova/T2
GitHub:https://github.com/khunreus

从新闻博客中抓取和分析 400,000 篇文章

原文:https://towardsdatascience.com/web-scraping-and-analyzing-400-000-articles-1393d0e789ba?source=collection_archive---------9-----------------------

领先在线出版商的每日发帖频率有什么趋势&季节性吗?

在这篇文章中,我将分析由希腊领先的在线出版商之一 NEWSBEAST 发表的文章。核心问题是“news beast 的每日发布频率有任何趋势&季节性吗?”数据分析前的主要步骤(文末有完整 r 代码的链接可以):

  • 使用 R 中的 rvest & car 库从站点(www.newsbeast.gr)抓取文章
  • 数据准备(包括数据清理、转换)
  • 探索性分析

让我们创建一个散点图来查看过去 4 年每天发布的文章数量。

Image by Author

我们可以清楚地发现,在每天发表的文章数量上有两种不同模式的持续趋势(在过去 4 年中)。我们怀疑在特定的工作日(可能是周末?)发表的日常文章明显少了。第二个趋势(不太明显)可能是每年发表的文章越来越少。现在让我们用不同颜色来区分每个工作日,以获得更清晰的视图。

Image by Author

所以现在很明显,周末期间的每日帖子数量比工作日少得多。
现在,让我们尝试在每个工作日建立一个模型,并创建一个图来展示这些。在下图中,每个工作日通过使用黄土回归拟合一条单独的平滑线来表示

Image by Author

周末的标准误差(95%置信水平)表明与工作日的差异是显著的。

现在让我们调查不同年份之间是否有显著差异。

Image by Author

通过查看误差线,看起来所有的差异(不同年份之间)在统计上都是显著的,除非在比较 2016 年和 2017 年时,误差线是重叠的。
这一发现可以通过在不同样本中应用非参数 Wilcoxon 符号秩检验来证实(见下表)

年份:2014–2015 | P 值< 0.001

年份:2015–2016 | P 值< 0.001

年份:2016–2017 | P 值< 0.001

所有的 p 值都非常低(< 0.01),置信水平为 0.95,因此发布的每日平均文章的差异非常显著。

最后,为了研究其他不太明显的季节性趋势,我们使用了一个专用于时间序列分析的软件包。使用 prophet package for R 拟合了一个预测模型,如下所示,它揭示了更多的季节性趋势。特别是在圣诞节和暑假期间(大约在 8 月份)的日常文章中出现了两个主要的“下降”。在复活节期间也有一个小的“下降”。

Image by Author

另一个有用的功能是能够绘制各种成分的图表(如下图),这是一个简单的方法来得出每日/每周/每年的趋势。特别是在下面的图表中,我们可以很容易地发现周末的下降,在圣诞节期间、暑假、复活节期间的日常文章中的“下降”以及每年的“下降”。

Image by Author

结论

分析表明,这个新闻博客发布的内容越来越少。另一个有趣的发现是,在假期期间(圣诞节、复活节、夏天和周末),发布的帖子显著减少。这很奇怪,因为众所周知,人们倾向于使用这些新闻博客,尤其是在假期。他们肯定应该在假期期间试着发布更多的文章。

特别是:

  • 在过去的 4 年里,每日发布的文章显著减少。总体围绕 30% 的文章较少。
  • 周末发表的文章比平日少得多。
  • 每年圣诞节和暑假期间,日常生活用品会有两次显著的“下降”。
  • 每年复活节假期期间,每日发表的文章数量都有小幅“下降”。

全 R 码

原载于www.manosantoniou.com

斯德哥尔摩的网络搜集公寓列表

原文:https://towardsdatascience.com/web-scraping-apartment-listings-in-stockholm-3fcebacf8be6?source=collection_archive---------9-----------------------

使用 Python 进行抓取,使用 MS SQL server 进行存储

我和我的合伙人已经卖掉了我们的公寓,正在寻找一个新的。因为大多数人在寻找新公寓时,都要手动穿过 https://www.hemnet.se/,这对我来说似乎既乏味又累人。所以我想——为什么不利用我的 Python 知识,通过编程找到最合适的公寓呢?这就是我所做的,我做了一个非常简单的网页抓取器来找到待售的物品。

Photo by Adam Gavlák on Unsplash

目录

  • 网页抓取部分
  • 刮削功能
  • 数据库存储部
  • 可视化销售对象的数据
  • 备注
  • 进一步工作

1.刮网部分

下面是一对通过库 BeautifulSoup 处理 HTML 对象的函数。请记住,这些功能可以用更专业和最佳的方式编写,但这个项目的范围确实是快速获得数据,以便完成一个“最佳”公寓交易。

1.1 刮削功能

首先,我们需要处理 BeautifulSoup 对象,我们在一个标准的 Python 函数中处理这个对象,我选择将这个函数命名为“Booli_ScrapeObjects”。该函数有两个输入参数(page 和 object_info ),其中 page 是 URL,object _ info是一个 Pandas 数据帧,用于存储每个对象的所有有趣信息。该函数的工作前提是网站的 HTML 对象保持静态。该函数如下:

**def** *Booli_ScrapeObjects*(page, object_info):
 request = requests.get(page)
 soup = BeautifulSoup(request.text,'lxml')
 links = soup.select("a[href*=/annons/]")

 **for** *j, row* in enumerate(links):
  info = row.contents[5].text.split("\n")
  **while** '' in info:
   info.remove('')
  info[0] = info[0].strip(" kr")
  info[1] = info[1].strip(" kr/m²")
  info[2] = info[2].strip(" kr/mån")
  object_info.append(info)
  **try:**
   info.insert(0,"https://www.booli.se" + links[j]["href"])
  #FETCHING ADDRESS, # ROOMS AND M2
  request_apartment = requests.get(info[0])
  soup_apartment = BeautifulSoup(request_apartment.text, 'lxml')
  address = soup_apartment.findAll('span',
   class_ = 'property__header__street-address')
  address = address[0].contents[0].strip("\n\t\t")
  info.append(address)
  size = soup_apartment.findAll('span',
   class_ = 'property__base-info__title__size')
  size = size[0].contents[0].strip("\n\t").split(",")
  rooms = size[0].strip(" rum")
  m2 = size[1].strip(" m²")
  info.append(rooms)
  info.append(m2)
  **except:**
   info.insert(0, "Unknown")   #Link
   info.append("Unknown")      #Address
   info.append("Unknown")      #Rooms
   info.append("Unknown")      #m2
   info.append("Unknown")      #Estimate
   continue
**return** object_info

Print Screen from Boolis webpage - showing number of objects per page.

上面的函数抓取可以在给定页面上找到的对象。如果找到的对象数量大于 38 个,对象将被分割成多个页面(见左图)。这个问题在下面的函数中解决了,它采用相同的 URL 参数来计算我们有多少个页面,前提是每个页面最多包含 38 个对象。

**def** *Booli_findNumberOfPagesData*(url):
 request = requests.get(url)
 soup = BeautifulSoup(request.text,'lxml')
 data = soup.findAll('div',
		class_ = 'search-list__pagination-summary')
 numberOfObjectsPerPage = 38
 try:
  numberOfObjects = int(data[0].text[
		-(len(data[0].text)-3 - data[0].text.rfind("av")):])except:
  numberOfObjects = 0
  numberOfPages = int(
		np.ceil(numberOfObjects/numberOfObjectsPerPage))**return** numberOfPages, numberOfObjects

有了上面的两个函数,我们可以编写一个新的函数,循环遍历每个 URL,并将信息存储在 Pandas 数据帧中。该函数如下:

**def** *loopThroughRegions*(data_url, 
			m2_max, 
			m2_min, 
			maxListPrice, 
			minListPrice):
 object_info = []
 region = []
 length = [0]
 **for** *index, row* in data_url.iterrows():
  #Base URL
  url = "https://www.booli.se/{}/{}/?
			maxListPrice={}&
			maxLivingArea={}&
			minListPrice={}&
			minLivingArea={}&
			objectType=L%C3%A4genhet&
			page=1&
			upcomingSale=
				".format(row["Region"],
					row["RegionID"],
					maxListPrice, 
					m2_max, 
					minListPrice, 
					m2_min)
  object_info = **Booli_ScrapeObjects**(*url, object_info*)
  numberOfPages, numberOfObjects = **Booli_findNumberOfPagesData**(*url)* **for** *page* in range(2, numberOfPages):
   url = "https://www.booli.se/{}/{}/?
		maxListPrice={}&
		maxLivingArea={}&
		minListPrice={}&
		minLivingArea={}&
		objectType=L%C3%A4genhet&
		page={}&
		upcomingSale=
			".format(row["Region"],
				row["RegionID"],
				maxListPrice,
				m2_max,
				minListPrice,
				m2_min,
				page)
  object_info = **Booli_ScrapeObjects**(*url, object_info*)
 length.append(len(object_info))#Creating a simple vector containing duplicates of regions up to number of object stored for each region
 **for** *i* in range(0, length[len(length)-1] - length[len(length) - 2]):
  region.append(row["Region"])**return** object_info, region

为了在常规的 Microsoft SQL Server 数据库中存储 Pandas 数据框,我们需要清理数据。例如,我们想要两个重写对象,从 1 个房间到 1.5 个房间,依此类推。执行这一简单清洁过程的简单函数如下:

**def** *cleaningData*(object_info):
 **for** *index, row* in object_info.iterrows():**if** row["m2"].find("+") != -1:
   m2s = row["m2"].split("+")
   newM2 = int(m2s[0]) + int(m2s[1])
   object_info.set_value(index, "m2", newM2)**if** row["Number of rooms"].find("½") != -1:
    rooms = row["Number of rooms"].split("½")**if** rooms[0] == "":
     newRooms = 0.5
    **else:** newRooms = float(0.5) + float(rooms[0])object_info.set_value(index, "Number of rooms", newRooms)**if** row["Rent"].find("—") != -1:
     newRent = 0
     object_info.set_value(index, "Rent", newRent)
    **else:** newRent = "".join(row["Rent"].split())
     object_info.set_value(index, "Rent", newRent)**return** object_info

1.2 数据库存储部分

最后,我们有了结构化格式的所有数据——所以现在是时候以一种方便的方式存储它了,即存储在数据库中。我们将所有数据存储在熊猫数据框中,如下所示:

Pandas Data Frame containing apartment data.

所以我们需要构建一个可以存储每一列的数据库表。这可以通过下面的 SQL 代码轻松完成(假设您使用的是 MS SQL server,尽管语法与其他数据库类似):

Query for creating the table “UpcomingSales”.

现在让我们编写一个简单的函数,它可以使用 pyodbc-package 连接到我的本地“本地”数据库。该函数如下:

**def** *mssql_connect*(server, database, driver):
    cnxn = pyodbc.connect('DRIVER='+driver+ \
                          ';SERVER='+server+ \
                          ';DATABASE='+database + \
                          ';Trusted_Connection=yes')
    cursor = cnxn.cursor()
    **return** cnxn, cursor

使用这个函数结合一个按行插入数据的查询,我们最终达到了我们的目标 (这个查询最好使用一个简单的 merge 语句来编写):

#SQL INPUT PARAMETERS
pyodbc.pooling = False
server = 'server'
database = 'database'
username = 'username'
password = 'password'
driver= '{ODBC Driver 13 for SQL Server}'cnxn, cursor = mssql_connect(	server, 
				database, 
				username, 
				password, 
				driver)
data = result.values.tolist()
**for** *i, item* in enumerate(data):
 insert_query = "IF NOT EXISTS ( \
			SELECT \
				* \
			FROM \
				[Booli].[UpcomingSales] \
			WHERE \
				[Link] = '" + str(item[0]) + "' AND
				[DateInserted] = '" + 
				str(date.today()) +"') \
			BEGIN \
			INSERT INTO [Booli].[UpcomingSales] \
			VALUES ('" + str(item[0]) + \
				"'," + str(item[1]) + \
				"," + str(item[2]) + \
				"," + str(item[3]) + \
				",'" + str(item[4]) + \
				"'," + str(item[5]) + \
				"," + str(item[6]) + \
				",'" + str(item[7]) + \
				"','" + str(date.today()) +"') \
			END"cursor.execute(insert_query)#Cleanup
cnxn.commit()
cursor.close()
cnxn.close()

现在,我们可以通过一个简单的 select-query 与数据库对话来获得结果:

Select-query to the table that holds the object data.

2.可视化销售对象的数据

很容易调整代码,以抓取售出的对象,而不是待售的对象,我不会介绍如何做到这一点,而是我会显示一些简单的可视化从售出的对象抓取数据。首先,我们通过 SQL 查询调用数据库来获取数据。生成的数据将存储在名为“数据”的熊猫数据框中。获取数据的 Python 代码如下所示:

query = "SELECT 
             * \
         FROM \ 
             [Booli].[SoldObjects]"
data = pd.read_sql(query, cnxn)

输出如下所示:

此外,我们使用内置的 pandas 功能“cut”将租金成本分成不同的价格部分:

bins = [0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 10000]
labels = ['-500', '500-1000', '1000-1500', '1500-2000', '2000-2500', 	'2500-3000', '3000-3500', '3500-4000', '4000-10000'])data["Rent categories"] = pd.cut(
				data['Rent'], 
				bins = bins, 	
				include_lowest = True, 
				labels = labels
				)

现在我们可以绘制数据,以了解不同租金类别的价格随时间的变化情况

直觉告诉你——租金越低,价格越高。现在让我们仔细看看斯德哥尔摩不同地区的价格差异

对于那些住在斯德哥尔摩的人来说,结果可能不会令人惊讶,因为奥斯特马尔姆的平均售价最高,远远高于整体平均水平。

现在,让我们来看看每个地区[价格/平方米]的分布及其各自的平均值

以及整个样本的[价格/平方米]的分布:

正如我们所见,整个样本的平均价格为 85000 SEK。

最后,我们来看看每个地区的平均[价格/平方米]以及这些物品的房间数量。

如前所述,该样本缺乏较高“#房间数”范围内公寓的数据,因此平均值不能代表实际市场价格。为了让我的观点更清楚,让我们计算每个区域的对象数和“房间数”

如图所示,在最好的情况下,我们可以说“# rooms”= 1、2、3 和 4 具有代表性平均值,而“# rooms”> 4 的平均值由于数据点较少而具有高度失真的平均值。

3.评论

首先,Python 代码肯定可以写得更有效率,但正如我指出的,这个项目的目的不是为抓取组件编写生产就绪代码,这只是一个用于特定目的的一次性项目。如上所述,刮擦部分的一个明显的优化是搜索多个区域而不是一个区域。

URL-structure for multiple areas.

4.进一步的工作

我们可以使用“每平方米价格”的响应变量 Y 实现一个简单的回归模型,以找出每个独立变量 x 的贡献。在给定一组独立变量值的情况下,该模型也可以用作价格估计器。

感谢您的阅读。如果您有任何问题,请通过 cfuru@kth.se 联系我,也可以在 linkedin 加我。

网页抓取基础知识——硒和美丽的汤应用于搜索营地可用性

原文:https://towardsdatascience.com/web-scraping-basics-selenium-and-beautiful-soup-applied-to-searching-for-campsite-availability-4a8de1decac9?source=collection_archive---------2-----------------------

[Image[1] (Image courtesy: https://pixabay.com)]

对于数据科学领域的人来说,网络搜集是一项重要的基本数据收集技能。它对于收集项目和兴趣的小信息也非常有用。并不是你分析的每一个数据集都能以一种方便的格式获得,而且,如果你想做有趣和独特的分析,那么通过搜集自己编译一个数据集是做新颖和有见地的工作的一个很好的方法。

在这篇文章中,我将介绍 Python 中抓取的一些基础知识,并提供创建一个抓取器的示例代码,该抓取器将收集关于即将到来的营地预留空缺的信息。我选择这个特别的例子,是因为我想解决自己在加州营地保留地导航的问题,还因为除了促进技术素养,帮助人们走出户外享受自然对我个人来说也很有意义。

让我们开始吧——如果你从头到尾都遵循了这篇教程和文章,你应该掌握了从网络上收集易于访问的数据并用于你自己的项目的所有技能。更具体地说,您将能够:

  • 了解如何导航 HTML 源代码以找到您想要捕获的信息
  • 使用 Beautiful Soup 从网站收集并解析 HTML 代码
  • 使用 Selenium 和 ChromeDriver 自动导航到站点,在文本框中填充信息,单击所需的下拉菜单和输入,并为多个网站地址、变量和输入返回这样做的响应
  • 了解如何使用 Requests、ChromeDriver、BeautifulSoup 和 Selenium 进行网页抓取的基础知识
  • 使用 Pandas 解析 HTML 表,使用 datetime 转换日期

一些背景和基础知识:

Web 抓取就是从互联网上自动收集和解析数据。这些数据可以构成数据科学项目的基础,用于比较各种产品或服务,用于研究或其他商业用途。

Python 中有许多对 web 抓取有用的库,一些主要的有:请求、美汤、硒和刺儿头。本教程将只涵盖前三个,但我会鼓励你自己去看看 Scrapy。

我们将使用 Requests 向网站发送请求信息,使用 Beautiful Soup 提取和解析 HTML 组件,使用 Selenium 选择和导航网站中非静态的、需要单击或从下拉菜单中选择的组件。

如果你不熟悉 HTML——超文本标记语言,也称为 web 编码语言——你可能想尝试一下 W3schools 基础教程,然而对于这个例子来说,你只需要熟悉一些标题的基本标签<标题>、表格<表格>以及行< tr >和数据单元格< td >、项目列表< li >和链接【就足够了

网络抓取示例——营地预订信息教程

[Image[2] — Recreation.gov search bar (Image courtesy: https://recreation.gov)]

我们将要浏览和收集信息的网站是www.recreation.gov,特别是他们的页面,用于预订阿斯彭·霍洛群营地。

让我们首先导入这项工作所需的库,并定义要导航到的 url:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from random import randint
import datetime
import os
import time
import pandas as pdurl = '[https://www.recreation.gov/camping/aspen-hollow-group/r/campgroundDetails.do?contractCode=NRSO&parkId=71546'](https://www.recreation.gov/camping/aspen-hollow-group/r/campgroundDetails.do?contractCode=NRSO&parkId=71546')

我对查找与我当前日期相关的预订感兴趣,所以我将使用 datetime 库来管理它。下面的代码存储今天的。现在时间戳为当前时间,时间戳的一部分为今天的日期,格式为网站可以读取的格式。

current_time = datetime.datetime.now()
current_time.strftime("%m/%d/%Y")

我可以定义我想在露营地呆多少个晚上,从现在开始我想看多远,以及我想查看多少个周末的预订,以便开始为这些日期收集信息:

nights_stay = 2
weeks_from_now_to_look = 13
how_many_weeks_to_check = 4

在查看了预订网站如何格式化输入日期后,我将检查以确保我的格式化方式看起来是正确的:

for week in range(0, how_many_weeks_to_check):
    start_date = current_time + datetime.timedelta(days=week*7) + datetime.timedelta(days=weeks_from_now_to_look*7)
    end_date = start_date + datetime.timedelta(days=nights_stay)
    print(start_date.strftime("%a %b %d %Y") + ' to ' + end_date.strftime("%a %b %d %Y"))

这给了我一个看起来正确的输出—我看到的是:

Sat Jun 02 2018 to Mon Jun 04 2018
Sat Jun 09 2018 to Mon Jun 11 2018
Sat Jun 16 2018 to Mon Jun 18 2018
Sat Jun 23 2018 to Mon Jun 25 2018

为了选择网站的元素并解析出将返回我想要的信息的源代码,我将通过右键单击并选择“inspect”来选择网站的元素,这将允许我查看页面的 HTML 源代码,并将自动突出显示我单击的元素。

[Image[3] — Inspecting source code (Image courtesy: https://recreation.gov)]

从那里,我可以右键单击与我感兴趣的元素相关的代码,并复制 xpath,这样我就可以在我的抓取代码中使用它作为导航输入。

[Image[4] — Coping element XPath (Image courtesy: https://recreation.gov)]

我将这样做来查找到达日期、离开日期和输出信息摘要的类路径的 xpath,以便我可以使用 chromedriver 来根据路径查找和选择这些元素。

下面的代码通过访问网站,在开始和结束日期字段中选择和输入信息,然后将它得到的汇总信息存储到我命名为camping_availability_dictionary的字典中来实现这一点。请注意,我在这段代码中包含了一个介于 3 和 6 之间的随机整数秒的时间延迟,这样,如果您运行这个示例,您将能够看到 chromedriver 启动、导航、输入您的开始和结束日期,以及点击。我通过类名找到站点摘要数据,并将其存储到一个列表中,然后获取该列表的文本并保存到我初始化的字典中。该字典使用文本格式的搜索开始和结束日期作为关键字,并将搜索的摘要数据存储为其值。

chromedriver = "/Applications/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriverdriver = webdriver.Chrome(chromedriver)time_delay = randint(3,6)
camping_availability_dictionary={}for week in range(0,how_many_weeks_to_check):
    driver.get(url)
    time.sleep(time_delay)
    start_date = current_time + datetime.timedelta(days=week*7) + datetime.timedelta(days=weeks_from_now_to_look*7)
    end_date = start_date + datetime.timedelta(days=nights_stay)
    selectElem=driver.find_element_by_xpath('//*[[@id](http://twitter.com/id)="arrivalDate"]')
    selectElem.clear()
    selectElem.send_keys(start_date.strftime("%a %b %d %Y"))
    time.sleep(time_delay)
    selectElem.submit()
    time.sleep(time_delay)
    selectElem=driver.find_element_by_xpath('//*[[@id](http://twitter.com/id)="departureDate"]')
    selectElem.clear()
    selectElem.send_keys(end_date.strftime("%a %b %d %Y"))
    time.sleep(time_delay)
    selectElem.submit()
    time.sleep(time_delay)
    site_data = driver.find_elements_by_class_name('searchSummary')
    time.sleep(time_delay)

    property_data = []for i in site_data:
        if len(i.text) != 0:
             property_data.append(i.text)

    camping_availability_dictionary[start_date.strftime("%a %b %d %Y") + ' to ' + end_date.strftime("%a %b %d %Y")] = property_data        

    time.sleep(time_delay)

现在,如果我查看一下camping_availability_dictionary存储了什么,它有以下键和值:

{'Sat Jun 02 2018 to Mon Jun 04 2018': ['1 site(s) available out of 1 site(s)\nALL (1)\nGROUP STANDARD NONELECTRIC (1)'],
 'Sat Jun 09 2018 to Mon Jun 11 2018': ['0 site(s) available out of 1 site(s)\nALL (0)\nGROUP STANDARD NONELECTRIC (0)'],
 'Sat Jun 16 2018 to Mon Jun 18 2018': ['0 site(s) available out of 1 site(s)\nALL (0)\nGROUP STANDARD NONELECTRIC (0)'],
 'Sat Jun 23 2018 to Mon Jun 25 2018': ['0 site(s) available out of 1 site(s)\nALL (0)\nGROUP STANDARD NONELECTRIC (0)']}

这对于了解这个站点的可用性来说已经足够了,但是让我们使用其他的图书馆来整理信息,并把一些露营地服务打印出来。

我们将导入我们的请求库,通过 html 文本从我们的 url 和页面请求信息,并定义我们的汤配方:

import requestsresponse = requests.get(url)
page = response.text
soup = BeautifulSoup(page,"lxml")

如果我们要打印出刚刚通过调用print(soup.prettify())得到的页面信息,我们会看到页面的 HTML 代码的格式化版本,比如:

<!DOCTYPE html>
<html lang="en" xml:lang="en"  xmlns:fb="http://www.facebook.com/2008/fbml" xmlns:og="http://opengraphprotocol.org/schema/">
 <head>
  <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
  <script type="text/javascript">
   window.name="ra";
			var _brandName_ = "NRSO";
  </script>
  <script type="text/javascript">
   // Instructions: please embed this snippet directly into every page in your website template.
	    // For optimal performance, this must be embedded directly into the template, not referenced
	    // as an external file.

通过滚动该文本,我们可以看到我们可能想要获取块,因此让我们获取该标题并将其分配给一个新变量— <code class="fe mj mk ml lw b">campsite_info=(soup.find("title"))</code>我们可以获得该新元素的文本,并看到它确实是我们的露营地标题— <code class="fe mj mk ml lw b">campsite_info.get_text()</code>返回:

 ‘Facility Details — ASPEN HOLLOW GROUP, CA — Recreation.gov’

进一步查看代码,我们可以看到我们想要的内容表,并使用基于类名的 find:

print(soup.find_all(class_='contable'))

退货:

[<table class="contable" id="contenttable" name="contenttable">
<thead>
<tr style="display:none;">
<th id="th1">th1</th></tr></thead>
<tbody>
<tr>
<td class="td1" colspan="2">Within Facility</td></tr>
<tr>
<td class="td2"><ul class="detail"><li>Bike Rentals</li><li>Boat Rentals</li><li>Campfire Rings</li><li>Drinking Water</li><li>Food storage lockers</li></ul></td>
<td class="td2"><ul class="detail"><li>General Store</li><li>Laundry Facilities</li><li>Potable Water</li><li>Vault Toilets</li></ul></td></tr>
<tr class="brline">
<td class="td1" colspan="2">Within 10 Miles</td></tr>
<tr>
<td class="td2"><ul class="detail"><li>Canoeing</li><li>Fishing</li><li>Kayaking</li></ul></td>
<td class="td2"><ul class="detail"><li>Swimming</li><li>Wireless Internet</li></ul></td></tr></tbody></table>]

现在我们只想获取该文本,让我们使用table_body = soup.find_all(class='contable')将它分配给一个变量,并获取该列表的第一个元素,以便对信息进行一些格式化。

作为最终输出,我们希望打印出营地信息和可用性,以及设施内和设施附近的内容摘要:

print(campsite_info.get_text()+"\n")
print("Campsite availability: \n")

for key in camping_availability_dictionary:
    full_string = str(camping_availability_dictionary[key])
    parsed_string = " - " + full_string.split(" out of")[0][2::] + ", type: " + full_string.split("ALL")[1][6:-5]
    print(key, parsed_string)  
print("\n")rows = table_body[0].find_all('tr')
for row in rows:
    columns = row.find_all('td')
    for column in columns:
        string = column.get_text()
        if string == 'Within Facility':
            print("Items Within Facility: \n")
        if string == 'Within 10 Miles':
            print("\nItems Within 10 Miles: \n")   
        else:    
            items = column.find_all('li')
            for item in items:
                words = item.get_text()
                print(words)

上面给出了我们的最终输出:

Facility Details - ASPEN HOLLOW GROUP, CA - Recreation.gov

Campsite availability: 

Sat Jun 02 2018 to Mon Jun 04 2018  - 1 site(s) available, type: GROUP STANDARD NONELECTRIC 
Sat Jun 09 2018 to Mon Jun 11 2018  - 0 site(s) available, type: GROUP STANDARD NONELECTRIC 
Sat Jun 16 2018 to Mon Jun 18 2018  - 0 site(s) available, type: GROUP STANDARD NONELECTRIC 
Sat Jun 23 2018 to Mon Jun 25 2018  - 0 site(s) available, type: GROUP STANDARD NONELECTRIC 

Items Within Facility: 

Bike Rentals
Boat Rentals
Campfire Rings
Drinking Water
Food storage lockers
General Store
Laundry Facilities
Potable Water
Vault Toilets

Items Within 10 Miles: 

Canoeing
Fishing
Kayaking
Swimming
Wireless Internet

现在你可以去预定那个网站了——露营快乐!

参考链接:

  • 请求文档
  • BeautifulSoup 文档
  • 硒文档
  • Chromedriver 启动信息

用 Python 对 HTML 表格进行 Web 抓取

原文:https://towardsdatascience.com/web-scraping-html-tables-with-python-c9baba21059?source=collection_archive---------0-----------------------

Pokemon Database Website

首先,我们将尝试抓取在线口袋妖怪数据库(http://pokemondb.net/pokedex/all)。

检查 HTML

在前进之前,我们需要了解我们希望抓取的网站的结构。这可以通过点击 来完成,右击我们想要刮的元素,然后点击“检查” 出于我们的目的,我们将检查表格的元素,如下所示:

Inspecting cell of HTML Table

根据 HTML 代码,数据存储在 < tr >之后..< /tr > 。这是行信息。每一行都有一个对应的 < td >../或单元格数据信息。

导入库

我们需要请求来获取网站的 HTML 内容,需要lxml.html来解析相关字段。最后,我们将把数据存储在熊猫数据帧上。

**import** **requests**
**import** **lxml.html** **as** **lh**
**import** **pandas** **as** **pd**

刮掉表格单元格

下面的代码允许我们获得 HTML 表的 Pokemon 统计数据。

url='http://pokemondb.net/pokedex/all'*#Create a handle, page, to handle the contents of the website*
page = requests.get(url)*#Store the contents of the website under doc*
doc = lh.fromstring(page.content)*#Parse data that are stored between <tr>..</tr> of HTML*
tr_elements = doc.xpath('//tr')

为了进行健全性检查,请确保所有行都具有相同的宽度。如果没有,我们得到的可能不仅仅是桌子。

*#Check the length of the first 12 rows*
[len(T) **for** T **in** tr_elements[:12]]

输出:【10,10,10,10,10,10,10,10,10,10,10,10】

看起来我们所有的行正好有 10 列。这意味着在 tr_elements 上收集的所有数据都来自这个表。

解析表格标题

接下来,让我们将第一行解析为标题。

tr_elements = doc.xpath('//tr')*#Create empty list*
col=[]
i=0*#For each row, store each first element (header) and an empty list*
**for** t **in** tr_elements[0]:
    i+=1
    name=t.text_content()
    **print** '**%d**:"**%s**"'%(i,name)
    col.append((name,[]))

输出:
1:“#”
2:“名”
3:“型”
4:“总”
5:“HP”
6:“攻”
7:“防”
8:“Sp。Atk"
9:"Sp。Def"
10:"速度"

创建熊猫数据框架

每个头都和一个空列表一起被附加到一个元组中。

*#Since out first row is the header, data is stored on the second row onwards*
**for** j **in** range(1,len(tr_elements)):
    *#T is our j'th row*
    T=tr_elements[j]

    *#If row is not of size 10, the //tr data is not from our table* 
    **if** len(T)!=10:
        **break**

    *#i is the index of our column*
    i=0

    *#Iterate through each element of the row*
    **for** t **in** T.iterchildren():
        data=t.text_content() 
        *#Check if row is empty*
        **if** i>0:
        *#Convert any numerical value to integers*
            **try**:
                data=int(data)
            **except**:
                **pass**
        *#Append the data to the empty list of the i'th column*
        col[i][1].append(data)
        *#Increment i for the next column*
        i+=1

为了确保万无一失,让我们检查一下每列的长度。理想情况下,它们应该都相同。

[len(C) **for** (title,C) **in** col]

输出:【800,800,800,800,800,800,800,800,800,800】

完美!这表明我们的 10 列中的每一列正好有 800 个值。

现在,我们准备创建数据帧:

Dict={title:column **for** (title,column) **in** col}
df=pd.DataFrame(Dict)

查看数据框中的前 5 个单元格:

df.head()

你有它!现在你有了一个包含所有需要信息的熊猫数据框架!

附加说明

本教程是 3 部分系列的子集:

该系列包括:

  • 抓取口袋妖怪网站
  • 数据分析
  • 构建 GUI Pokedex

网页抓取 Indeed.com

原文:https://towardsdatascience.com/web-scraping-indeed-com-e5591790736d?source=collection_archive---------1-----------------------

在这个项目中,我想展示我通过网络抓取获取自己数据的能力。该项目的主要目标是确定一名数据科学家在不同大都市地区的工资。由于大多数公司不公布 Indeed.com 的工资,我使用自然语言处理来确定一个职位发布的工资是高于还是低于基于职位的工资中位数。任何网络抓取项目的第一步是确保服务条款允许你挖掘他们的数据。在阅读服务条款后,我发现网络抓取确实是允许的,所以我继续我的项目。

我选择了纽约、芝加哥、旧金山、奥斯汀、西雅图、洛杉矶、费城、亚特兰大、达拉斯、匹兹堡、波特兰、凤凰城、丹佛、休斯顿、迈阿密、夏洛特,当然还有 DC 的华盛顿。通过观察大范围的城市,我可以看到全国各地的工资差异。这个项目将来的一个可能扩展是遍历所有 50 个州的列表,看看它们在全国范围内有什么不同。

一些简单的直观分析告诉我,成为数据科学家的一些最佳地点是加利福尼亚、弗吉尼亚和纽约。这张地图有点误导,因为虽然弗吉尼亚的平均工资很高,但那里只有三份带薪的工作。大部分年薪的招聘职位都在纽约、加州和伊利诺伊州。我们可以看到,这些地区的工资仍然相对较高,并有助于使工资中位数超过 10 万美元。

我使用了一个计数矢量器,并确定在决定工资是高于还是低于中位数时,最重要的词或“特征”是数据、科学家、分析师等。需要注意的一点是,这些数字没有给我们任何关于这是正相关还是负相关的见解。例如,我发现头衔中有分析师的工作比头衔中有科学家的工作更有可能显示出低于中位数的工资。这个项目的另一个可能的扩展是改变我使用的 n _ grams 的数量,因为数据可能会出现在大多数职位中,如果我们有数据科学家、数据分析师等,这可能更能说明问题。作为自己的特色。

这个项目向我展示了网络抓取的重要性,以利用互联网上已经存在的东西来创建有意义的数据分析。在您了解了模型的基本假设之后,创建模型并不困难。数据科学家的许多工作是确定使用哪种模型,如何获取数据,以及如何将数据处理成完成分析所需的任何形式。

[## Jupyter 笔记本浏览器

我将收集各种市场中数据科学工作的薪资信息。然后使用位置、标题…

nbviewer.jupyter.org](http://nbviewer.jupyter.org/github/rowandl/portfolio/blob/master/Webscraping Indeed.com/Webscraping Indeed.ipynb)

Github

Web 抓取、正则表达式和数据可视化:全部用 Python 完成

原文:https://towardsdatascience.com/web-scraping-regular-expressions-and-data-visualization-doing-it-all-in-python-37a1aade7924?source=collection_archive---------1-----------------------

一个学习三种无价数据科学技能的小型真实项目

与大多数有趣的项目一样,这个项目以一个简单的问题开始,这个问题被半认真地问了一遍:我为我的大学校长的五分钟时间支付多少学费?在与我们学校的校长( CWRU )进行了一次偶然而愉快的讨论后,我想知道我的谈话到底花了我多少钱。

我的搜索导致了这篇文章,它和我的校长的薪水一起,有一张显示俄亥俄州私立大学校长薪水的表格:

虽然我可以为我的总统找到答案(剧透一下,是 48 美元/五分钟),并且感到满意,但我想利用这张桌子进一步推广这个想法。我一直在寻找机会练习 Python 中的网页抓取和正则表达式,并认为这是一个很棒的短期项目。

尽管在 Excel 中手动输入数据几乎肯定会更快,但我不会有宝贵的机会来练习一些技能!数据科学是关于使用各种工具解决问题的,web 抓取和正则表达式是我需要努力的两个领域(更不用说制作图表总是很有趣)。结果是一个非常短但完整的项目,展示了我们如何将这三种技术结合起来解决数据科学问题。

这个项目的完整代码可以在谷歌联合实验室的 Jupyter 笔记本上获得(这是我正在尝试的一项新服务,你可以在云端分享和合作 Jupyter 笔记本。感觉是未来!)要编辑笔记本,在 Colaboratory 中打开它,选择文件>在驱动器中保存一份副本,然后您可以进行任何更改并运行笔记本。

网页抓取

虽然课堂和教科书中使用的大多数数据看起来都是现成的,格式简洁,但实际上,世界并没有这么美好。获取数据通常意味着弄脏我们的手,在这种情况下,从网上提取(也称为抓取)数据。Python 有很好的工具来完成这项工作,即用于从网页中检索内容的requests库,以及用于提取相关信息的bs4 (BeautifulSoup)。

这两个库通常以下列方式一起使用:首先,我们向网站发出 GET 请求。然后,我们从返回的内容中创建一个漂亮的 Soup 对象,并使用几种方法解析它。

# requests for fetching html of website
import requests# Make the GET request to a url
r = requests.get('[http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html'](http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html'))# Extract the content
c = r.contentfrom bs4 import BeautifulSoup# Create a soup object
soup = BeautifulSoup(c)

由此产生的汤对象相当吓人:

我们的数据就在那里的某个地方,但我们需要提取它。为了从汤里选择我们的桌子,我们需要找到正确的 CSS 选择器。一种方法是访问网页并检查元素。在这种情况下,我们也可以只查看 soup,并看到我们的表驻留在带有属性class = "entry-content"<div> HTML 标签下。使用这些信息和我们的 soup 对象的.find方法,我们可以提取文章的主要内容。

# Find the element on the webpage
main_content = soup.find('div', attrs = {'class': 'entry-content'})

这将返回另一个不够具体的 soup 对象。要选择表格,我们需要找到<ul>标签(见上图)。我们还想只处理表中的文本,所以我们使用了 soup 的.text属性。

# Extract the relevant information as text
content = main_content.find('ul').text

我们现在有了字符串形式的表的确切文本,但显然它对我们没有多大用处!为了提取文本字符串的特定部分,我们需要使用正则表达式。这篇文章我没有篇幅(也没有经验!)来完整解释正则表达式,所以这里我只做一个简单的概述,并展示结果。我自己也还在学习,我发现变得更好的唯一方法就是练习。请随意查看本笔记本进行一些练习,并查看 Python re 文档开始(文档通常很枯燥,但非常有用)。

正则表达式

正则表达式的基本思想是我们定义一个模式(“正则表达式”或“regex”),我们希望在一个文本字符串中进行匹配,然后在字符串中搜索以返回匹配。其中一些模式看起来非常奇怪,因为它们既包含我们想要匹配的内容,也包含改变模式解释方式的特殊字符。正则表达式在解析字符串信息时总是出现,并且是至少在基础水平上学习的重要工具!

我们需要从文本表中提取 3 条信息:

  1. 总统的名字
  2. 学院的名称
  3. 薪水

首先是名字。在这个正则表达式中,我利用了这样一个事实,即每个名字都位于一行的开头,以逗号结尾。下面的代码创建一个正则表达式模式,然后在字符串中搜索以找到该模式的所有匹配项:

# Create a pattern to match names
name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)# Find all occurrences of the pattern
names = name_pattern.findall(content)

就像我说的,这个模式非常复杂,但是它确实是我们想要的!不要担心模式的细节,只需要考虑大致的过程:首先定义一个模式,然后搜索一个字符串来找到模式。

我们对大学和薪水重复这个过程:

# Make school patttern and extract schools
school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)# Pattern to match the salaries
salary_pattern = re.compile(r'\$.+')
salaries = salary_pattern.findall(content)

不幸的是,薪水的格式是任何计算机都无法理解的数字。幸运的是,这给了我们一个练习使用 Python 列表理解将字符串 salaries 转换成数字的机会。下面的代码说明了如何使用字符串切片、splitjoin,所有这些都在一个列表理解中,以获得我们想要的结果:

# Messy salaries
salaries = ['$876,001', '$543,903', '$2453,896']# Convert salaries to numbers in a list comprehension 
[int(''.join(s[1:].split(','))) for s in salaries] **[876001, 543903, 2453896]**

我们将这种转换应用到我们的工资中,最终得到我们想要的所有信息。让我们把一切都放进一个pandas数据框架。此时,我手动插入了我的大学(CWRU)的信息,因为它不在主表中。重要的是要知道什么时候手工做事情比编写复杂的程序更有效(尽管整篇文章有点违背这一点!).

Subset of Dataframe

形象化

这个项目是数据科学的象征,因为大部分时间都花在了收集和格式化数据上。然而,现在我们有了一个干净的数据集,我们可以画一些图了!我们可以使用matplotlibseaborn来可视化数据。

如果我们不太关心美观,我们可以使用内置的数据帧绘图方法来快速显示结果:

# Make a horizontal bar chart
df.plot(kind='barh', x = 'President', y = 'salary')

Default plot using dataframe plotting method

为了得到更好的情节,我们必须做一些工作。像正则表达式一样,用 Python 绘制代码可能有点复杂,需要一些实践来适应。大多数情况下,我通过在 Stack Overflow 等网站上寻找答案或者阅读官方文档来学习。

经过一点工作,我们得到了下面的情节(详情见笔记本):

Better Plot using seaborn

好多了,但是这还是没有回答我原来的问题!为了显示学生为他们校长的 5 分钟时间支付了多少钱,我们可以将工资转换成美元/5 分钟,假设每年工作 2000 小时。

Final Figure

这不一定是值得出版的情节,但这是结束一个小项目的好方法。

结论

学习技能最有效的方法是实践。虽然整个项目可以通过手动将值插入 Excel 来完成,但我喜欢从长计议,思考在这里学到的技能如何在未来有所帮助。学习的过程比最终结果更重要,在这个项目中,我们能够看到如何将 3 项关键技能用于数据科学:

  1. Web 抓取:检索在线数据
  2. 正则表达式:解析我们的数据以提取信息
  3. 可视化:展示我们所有的辛勤工作

现在,走出去,开始你自己的项目,记住:不一定要改变世界才有价值。

我欢迎反馈和讨论,可以通过 Twitter @koehrsen_will 联系。

从维基百科上抓取最棒的视频游戏列表

原文:https://towardsdatascience.com/web-scraping-the-list-of-greatest-video-games-from-wikipedia-pt-1-230c64d93e8c?source=collection_archive---------3-----------------------

嗨,欢迎来到我的博客。

博客和数据科学(以及两者的结合)是我生活中相对较新的尝试,但伟大的事情往往来自卑微的开始。

在我学习 python 及其相关库的短暂时间里,我已经被自己学到的东西震惊了。为了努力工作并展示我不断发展的技能,我希望我的每一篇博文都可以作为我不断进步的标志。

撇开序言不谈,让我们进入这篇文章的实质内容。

作为对自己的最初挑战,我想尝试使用 python 进行 web 抓取,从网页中提取数据,并以一种允许进一步检查和可视化的方式对其进行格式化。维基百科似乎非常适合这项任务,因为它非常容易访问,并且包含大量有趣的数据。

作为一个终生的电子游戏迷,我认为看看这个被认为是有史以来最好的电子游戏列表会很有趣。我正在研究的表格根据“有史以来最好的游戏”名单中的提及次数对视频游戏进行排序。

该表列出了 1978 年至 2013 年间发布的 100 款不同游戏,结构如下:

宝宝的第一次刮网

接近网络抓取时,我发现这个来自分析网站 Vidhya 的指南非常有价值。我鼓励任何第一次接触网络搜索的人使用这个资源来收集他们的方位。

在 python 中,我使用了两个 python 库:Urllib2 和 BeautifulSoup。

Urllib2 帮助 python 获取 URL,而 BeautifulSoup 使用 HTML 和 XML 文件从网页中提取信息。

随着分析 Vidhya 指南的编码,我能够利用以下代码检索网页的 HTML 数据:

#import library to query webpage of interest
import urllib2#specifying page of interest
wiki = “[https://en.wikipedia.org/wiki/List_of_video_games_considered_the_best](https://en.wikipedia.org/wiki/List_of_video_games_considered_the_best)"#save the HTML of the site within the page variable
page = urllib2.urlopen(wiki)#import library to parse HTML from page
from bs4 import BeautifulSoup#parse data from "page" and save to new variable "soup"
soup = BeautifulSoup(page)

该指南提供了一些额外的演示,说明如何检查 HTML 的结构,以及如何使用各种 HTML 标签从“soup”文件中返回感兴趣的信息。出于本文的目的,我不会深入讨论这个问题,但它有助于更好地理解如何阅读上述步骤的 HTML 输出。

为了从感兴趣的页面中提取适当的表数据,我需要确定表“class”。在 Chrome 浏览器中,我通过(右键单击-> inspect)检查了我感兴趣的表,并确定该表属于“wikitable sortable”类型。页面本身特别将其标注为“wikitable sortable jquery-table sorter”,但是,soup 文件只将其识别为“wiki table sortable”在对这个次要组件进行故障排除之后,我能够以下面的方式提取表信息:

#pinpointing the location of the table and its contents
first_table = soup.find(“table”, class_ = “wikitable sortable”)#creating lists for each of the columns I know to be in my table.
A=[]
B=[]
C=[]
D=[]
E=[]
F=[]#utilizing HTML tags for rows <tr> and elements <td> to iterate through each row of data and append data elements to their appropriate lists:for row in first_table.findAll(“tr”):
    cells = row.findAll(‘td’)
    if len(cells)==6: #Only extract table body not heading
        A.append(cells[0].find(text=True))
        B.append(cells[1].find(text=True))
        C.append(cells[2].find(text=True))
        D.append(cells[3].find(text=True))
        E.append(cells[4].find(text=True))
        F.append(cells[5].find(text=True))

当我检查输出时,我注意到数据是 unicode 格式的,这使得对其执行操作变得更加复杂。由于堆栈溢出,我利用列表理解将所有值从 unicode 转换为简单的 python 字符串值:

#convert all values from unicode to string
A = [x.encode(‘UTF8’) for x in A]
B = [x.encode(‘UTF8’) for x in B]
C = [x.encode(‘UTF8’) for x in C]
D = [x.encode(‘UTF8’) for x in D]
E = [x.encode(‘UTF8’) for x in E]
F = [x.encode(‘UTF8’) for x in F]

最后,我导入了 pandas,并将每个数据列表连接到一个数据框架中。这样做的时候,我指定了出现在维基百科页面上的列名:

#import pandas to convert list to data frame
import pandas as pd
df=pd.DataFrame(A,columns=[‘Year’])
df[‘Game’]=B
df[‘Genre’]=C
df[‘Lists’]=D
df[‘Original Platform’]=E
df[‘References’]=F

万岁。打印 dataframe 得到了以下输出。我没有拿出所有的参考信息,但这在我的后续检查中不需要。

要了解我是如何用 Tableau Public 可视化这些数据的,请查看我的另一篇博文。感谢阅读!

R 中的网页抓取教程

原文:https://towardsdatascience.com/web-scraping-tutorial-in-r-5e71fd107f32?source=collection_archive---------4-----------------------

几天前,数据学校的凯文·马卡姆发表了一篇很好的教程,讲述了使用 16 行 Python 代码进行网络抓取的方法。

[## 网络抓取总统的 16 行 Python 谎言

注意:本教程以 Jupyter 笔记本的形式提供,谎言的数据集以 CSV 文件的形式提供,两者都…

www.dataschool.io](http://www.dataschool.io/python-web-scraping-of-president-trumps-lies/)

教程很简单,制作精良。我强烈建议你看一看。事实上,这样的教程激励我复制结果,但这次使用 r。在 Kevin 的允许下,我将使用与他的博客帖子相似的布局。此外,我将使用同一个网站发表一篇名为特朗普的谎言的观点文章。这将有助于对这两种方法进行比较。

检查纽约时报的文章

为了更好地描述我们将要学习的文章,我鼓励你看看 Kevin 的教程。总之,我们感兴趣的数据由一个谎言记录组成,每个谎言包含 4 个部分:

  • 谎言的日期
  • 谎言本身
  • 解释为什么这是一个谎言
  • 支持解释的文章的 URL(嵌入在文本中)

The data that we want to extract from the web page.

将网页读入 R

要将网页读入 R,我们可以使用 R 大师 Hadley Wickham 制作的包。这个包的灵感来自于像 Beautiful Soup 这样的库,使得从 html 网页中抓取数据变得容易。要使用的第一个重要函数是read_html(),它返回一个包含关于网页的所有信息的 XML 文档。

收集所有的记录

正如 Kevin 的教程中所解释的那样,每条记录在 HTML 代码中具有以下结构:

<span class="short-desc"><strong> DATE </strong> LIE <span class="short-truth"><a href="URL"> EXPLANATION </a></span></span>

因此,要收集所有的谎言,我们需要识别所有属于class="short-desc"<span>标签。将帮助我们这样做的功能是html_nodes()。这个函数需要我们已经阅读过的 XML 文档和我们想要选择的节点。对于后者,我们鼓励使用 SelectorGadget ,这是一个开源工具,可以轻松地生成和发现 CSS 选择器。使用这样一个工具,我们发现所有的谎言都可以通过使用选择器".short-desc"来选择。

这将返回一个包含 116 个 XML 节点的列表,其中包含了网页中 116 个谎言的信息。

请注意,我使用的是 magritter包中的%>%管道操作符,它可以帮助将复杂的操作表达为由简单、容易理解的部分组成的优雅管道。

提取日期

让我们从简单的开始,专注于从第一个谎言中提取所有必要的细节。然后,我们可以很容易地将这种方法推广到其他领域。请记住,单个记录的一般结构是:

<span class="short-desc"><strong> **DATE** </strong> **LIE** <span class="short-truth"><a href="**URL**"> **EXPLANATION** </a></span></span>

注意,日期嵌入在<strong>标签中。要选择它,我们可以使用选择器"strong"使用html_nodes()功能。

然后我们需要使用html_text()函数只提取文本,trim 参数被激活来修剪前导和尾随空格。最后,我们利用 stringr 包将年份添加到提取的日期中。

提取谎言

为了选择 lie,我们需要使用 xml2 包中的xml_contents()函数(这个包是 rvest 包所需要的,所以没有必要加载它)。该函数返回一个包含属于first_result的节点的列表。

我们感兴趣的是谎言,它是第二个节点的文本。

请注意,谎言周围多了一对引号(“…”)。为了去掉它们,我们只需使用 stringr 包中的str_sub()函数来选择谎言。

提取解释

希望现在不要太复杂,我们只需要选择属于class=".short-truth"<span>标签中的文本就可以提取解释。这将把文本连同左括号和右括号一起提取出来,但是我们可以很容易地去掉它们。

正在提取 URL

最后,要获取 URL,请注意这是<a>标签中的一个属性。我们简单地用html_nodes()函数选择这个节点,然后用html_attr()函数选择href属性。

构建数据集

我们找到了提取第一条记录的 4 个部分的方法。我们可以使用 for 循环将这个过程扩展到所有其他地方。最后,我们想要一个有 116 行(每条记录一行)和 4 列(保存日期、谎言、解释和 URL)的数据框。一种方法是创建一个空数据框,并在处理每个新记录时简单地添加一个新行。但是,这被认为不是一个好的做法。正如这里建议的,我们将为每条记录创建一个单独的数据帧,并将它们全部存储在一个列表中。一旦我们有了 116 个数据帧,我们将使用 dplyr 包中的bind_rows()函数将它们绑定在一起。这就创建了我们想要的数据集。

注意,日期列被认为是一个字符向量。如果把它作为日期时间向量就更好了。为此,我们可以使用 lubridate 包并使用mdy()函数(月-日-年)进行转换。

将数据集导出到 CSV 文件

如果想导出数据集,可以使用 R 默认自带的write.csv()函数,或者使用 readr 包中的write_csv()函数,这比第一个函数快两倍,也更方便。

类似地,要检索数据集,可以使用默认函数read.csv()或 readr 包中的read_csv()函数。

摘要

本教程的完整代码如下所示:

我还想提一下,stringr、dplyr、lubridate 和 readr 包都是 tidyverse 家族的一部分。这是一个 R 包的集合,它们被设计成一起工作来使数据分析过程更容易。事实上,你也可以使用流行的 purrr 包来避免 for 循环。但是,这需要创建一个函数,将每个记录映射到一个数据框。关于如何进行网络抓取的另一个例子,请看迪安·阿塔利写的这篇很棒的博客文章。

希望你觉得这个教程有用。它的目的不是展示哪种编程语言更好,而是向 Python 和 R 学习,以及增加您的编程技能和工具来处理更多样化的问题。

使用 Selenium-Python 进行 Web 抓取

原文:https://towardsdatascience.com/web-scraping-using-selenium-python-8a60f4cf40ab?source=collection_archive---------0-----------------------

如何在 Python 中使用 Selenium 浏览网站的多个页面并收集大量数据

Shhh! Be Cautious Web Scraping Could be Troublesome!!!

在我们深入探讨本文的主题之前,让我们先了解一下什么是网络抓取,它有什么用处。

  1. 什么是网络抓取?

网络抓取是一种使用模拟人类网上冲浪的软件从互联网上自动提取信息的技术。

2.网络抓取有什么用?

网络抓取帮助我们提取大量关于客户、产品、人员、股票市场等的数据。使用传统的数据收集方法通常很难获得大规模的此类信息。我们可以利用从电子商务门户网站、社交媒体渠道等网站收集的数据来了解客户行为和情绪、购买模式以及品牌属性关联,这些对于任何企业都是至关重要的洞察。

现在让我们把手弄脏吧!!

既然我们已经定义了抓取的目的,那就让我们深入研究如何真正做有趣的事情吧!在此之前,下面是一些关于软件包安装的内务操作说明。

a. Python 版本:我们将会使用 Python 3.0,但是也可以通过稍微的调整来使用 Python 2.0。我们将使用 jupyter 笔记本,所以你不需要任何命令行知识。

b. Selenium 包:您可以使用以下命令安装 Selenium 包

!pip install selenium

c. Chrome 驱动:请从这里安装最新版本的 Chrome 驱动。

请注意,你需要在你的机器上安装谷歌浏览器来完成这个插图。

当抓取一个网站时,首要的事情是理解网站的结构。我们将刮Edmunds.com,汽车论坛。这个网站帮助人们做出购车决定。人们可以在论坛上发布他们对不同汽车的评论(非常类似于在亚马逊上发布评论)。我们将讨论入门级豪华车品牌。

我们将从不同用户的多个页面收集约 5000 条评论。我们将收集用户 id、评论日期和评论,并将其导出到 csv 文件中,以供进一步分析。

让我们开始编写我们的刮刀

我们将首先在笔记本中导入重要的包—

#Importing packages
from selenium import webdriver
import pandas as pd

现在让我们创建一个新的谷歌浏览器实例。这将有助于我们的程序在谷歌浏览器中打开一个网址。

driver = webdriver.Chrome('Path in your computer where you have installed chromedriver')

现在让我们访问谷歌浏览器,打开我们的网站。顺便说一句,chrome 知道你是通过一个自动化软件来访问它的!

driver.get('[https://forums.edmunds.com/discussion/2864/general/x/entry-level-luxury-performance-sedans/p702'](https://forums.edmunds.com/discussion/2864/general/x/entry-level-luxury-performance-sedans/p702'))

Web page opened from python notebook

哇哈哈!我们刚刚从 python 笔记本中打开了一个 url。

那么,我们的网页看起来怎么样?

我们将检查网页上的 3 个项目(用户 id、日期和评论),并了解如何提取它们。

  1. 用户 id :检查用户 id,我们可以看到高亮显示的文本代表用户 id 的 XML 代码。

XML path for user id

userid 的 XML 路径(XPath)如下所示。这里有一件有趣的事情需要注意,XML 路径包含一个评论 id,它唯一地表示网站上的每个评论。这将非常有帮助,因为我们试图递归抓取多个评论。

//*[[@id](http://twitter.com/id)=”Comment_5561090"]/div/div[2]/div[1]/span[1]/a[2]

如果我们看到图中的 XPath,我们会发现它包含用户 id‘dino 001’。

我们如何提取 XPath 中的值?

Selenium 有一个函数叫做“ find_elements_by_xpath ”。我们将把 XPath 传递给这个函数,并获得一个 selenium 元素。一旦有了元素,我们就可以使用' text '函数提取 XPath 中的文本。在我们的例子中,文本基本上是用户 id ('dino001 ')。

userid_element = driver.find_elements_by_xpath('//*[[@id](http://twitter.com/id)="Comment_5561090"]/div/div[2]/div[1]/span[1]/a[2]')[0]
userid = userid_element.text

2.评论日期:类似于用户 id,我们现在将检查发表评论的日期。

XML path for comment date

让我们看看注释日期的 XPath。再次注意 XPath 中惟一的注释 id。

//*[[@id](http://twitter.com/id)="Comment_5561090"]/div/div[2]/div[2]/span[1]/a/time

那么,我们如何从上面的 XPath 中提取 date 呢?

我们将再次使用函数“find_elements_by_xpath”来获取 selenium 元素。现在,如果我们仔细观察图片中突出显示的文本,我们会看到日期存储在“title”属性中。我们可以使用函数“get_attribute”来访问属性中的值。我们将在这个函数中传递标记名,以获取其中的值。

user_date = driver.find_elements_by_xpath('//*[[@id](http://twitter.com/id)="Comment_5561090"]/div/div[2]/div[2]/span[1]/a/time')[0]date = user_date.get_attribute('title')

3.评论:最后,我们来探讨一下如何提取每个用户的评论。

XML Path for user comments

下面是用户评论的 XPath

//*[[@id](http://twitter.com/id)="Comment_5561090"]/div/div[3]/div/div[1]

同样,我们的 XPath 中有注释 id。与 userid 类似,我们将从上面的 XPath 中提取注释

user_message = driver.find_elements_by_xpath('//*[[@id](http://twitter.com/id)="Comment_5561090"]/div/div[3]/div/div[1]')[0]comment = user_message.text

我们刚刚学习了如何从网页中抓取不同的元素。现在如何递归提取 5000 个用户的这些项?

如上所述,我们将使用注释 id,注释 id 对于提取不同用户数据的注释是唯一的。如果我们看到整个注释块的 XPath,我们会看到它有一个与之关联的注释 id。

//*[[@id](http://twitter.com/id)="Comment_5561090"]

XML Path for entire comment block

下面的代码片段将帮助我们提取特定网页上的所有评论 id。我们将再次对上述 xpath 使用函数' find_elements_by_xpath ,并从' id 属性中提取 id。

ids = driver.find_elements_by_xpath("//*[contains([@id](http://twitter.com/id),'Comment_')]")
        comment_ids = []
for i in ids:
    comment_ids.append(i.get_attribute('id'))

上面的代码给出了一个特定网页上所有评论 id 的列表。

如何将所有这些整合在一起?

现在,我们将把目前为止看到的所有东西放入一个大代码中,这将递归地帮助我们提取 5000 条评论。我们可以通过遍历在前面的代码中找到的所有评论 id 来提取特定网页上每个用户的用户 id、日期和评论。

下面是从特定网页中提取所有评论的代码片段。

Scrapper To Scrape All Comments from a Web Page

最后,如果你检查我们的网址有页码,从 702 开始。因此,我们可以通过简单地改变 url 中的页码来递归地转到前面的页面,以提取更多的评论,直到我们获得所需数量的评论。

这个过程需要一些时间,取决于你的计算机的计算能力。所以,冷静下来,喝杯咖啡,和你的朋友和家人聊聊天,让硒发挥它的作用吧!

总结:我们学习了如何在 Python 中使用 Selenium 抓取网站并获得大量数据。您可以进行多种非结构化数据分析,并发现有趣的趋势、观点等。利用这些数据。如果有人有兴趣看完整的代码,这里是我的 Github 的链接。

让我知道这是否有帮助。享受刮擦,但要小心!

如果你喜欢读这篇文章,我会推荐你读另一篇关于使用 Reddit API 和 Google BigQuery 抓取 Reddit 数据的文章,作者是德克萨斯大学奥斯汀分校的一位同学(Akhilesh naraparetdy)。

[## 使用 Python 和 Google BigQuery 抓取 Reddit 数据

访问 Reddit API 和 Google Bigquery 的用户友好方法

towardsdatascience.com](/scrape-reddit-data-using-python-and-google-bigquery-44180b579892)

周末项目:从卫星图像中探测太阳能电池板

原文:https://towardsdatascience.com/weekend-project-detecting-solar-panels-from-satellite-imagery-f6f5d5e0da40?source=collection_archive---------10-----------------------

我花了很多时间处理卫星图像或衍生产品,主要是与土壤科学相关的项目。你可以看看我以前的一篇文章,我用多任务卷积神经网络和环境信息来预测土壤有机碳含量:

[## 深度学习和土壤科学—第二部分

使用上下文空间信息的数字土壤制图。从点信息生成土壤图的多任务 CNN

towardsdatascience.com](/deep-learning-and-soil-science-part-2-129e0cb4be94)

这个周末,我想探索另一个领域,我认为这将是一个好主意,试图从卫星图像检测太阳能电池板。目前我住在澳大利亚,利用太阳能的潜力是巨大的。政府坚持推动使用煤来生产能源,所以我认为任何强调可再生能源的个人努力都是重要的。

目标

这是一个周末项目,所以我的想法是在短时间内实现一些东西,并希望得到一些下降的结果。结果并不完美,但这是良好的第一步。

整个过程包括:

  • 生成数据集
  • 训练卷积神经网络(CNN)
  • 尝试用模型做一些有趣的事情

资料组

我确信有可能找到一个好的数据集来实现这一点,但目标之一是从头生成一个数据集。CNN 非常强大,但是没有数据,你做不了什么。

为了生成对应于太阳能电池板位置的多边形,我使用了谷歌地球引擎。我花了大约 1.5 个小时在 1 公里的范围内划分太阳能电池板,结果总共 124 个多边形(没有我预期的那么多)。

Creating polygons

下一步是在这些多边形内生成 1800 个随机点,并提取以这些位置为中心的图像。那些是阳性样品(有太阳能电池板)。对于负样本(没有太阳能电池板),我生成了 1800 个不与多边形相交的随机点(加上一个缓冲区,以确保电池板不在图像中)。

Examples of positive samples (top) and negative samples (bottom)

模型

我能想到几种检测太阳能电池板的方法。我们可以尝试分割图像,使用遮罩,预测多边形的顶点。我不想花几个小时训练这个模型,所以我选择了一个相对简单的完全卷积神经网络来预测一个像素成为太阳能电池板一部分的概率。几个 conv-马克斯普尔序列,最初几层中的一些空间退学者,以及接近结尾时更多的退学者。我使用的一个小技巧(我在一次会议上从谷歌的某人那里学到的)是计算 RGB 图像的相对亮度,并将其用作上下文。我对 RGB 图像进行了裁剪(没有调整大小),并将其与亮度图像合并(在使用一些卷积减少亮度图像的大小之后)。

People has been asking about this “trick”. Just make sure that the shape of the cropped RGB is equal to the RelLum after the convolutions. The number of convolutions will depend on the shape of the original image and how much you crop it (not resize it).

在训练 100 个时期的模型之前,我使用 Kera 的ImageDataGenerator对图像应用了一些数据增强(垂直和水平翻转,80-120%亮度范围)。用 GPU 在桌面上运行训练只需要几分钟。

结果

考虑到我花在生成数据集和训练模型上的时间,我对结果印象深刻。该模型对训练集和验证集的准确率分别达到了 95%和 92%。

输出的几个例子:

High probabilities in an image with solar panels (top) and low probability in image without panels.

总的来说,结果是好的。有些地方模型会混淆,比如汽车挡风玻璃,房屋边缘,电缆。在实践中这不是一个大问题,因为在这些区域的概率通常低于 0.8,所以在适当的阈值下,误差是最小的。通过这个模型的第一次迭代,我可以预测一个大的区域,并手动选择负样本来进一步改进模型。

使用私有 API 进行预测

我决定使用 Flask 编写一个小的 tile 服务器,而不是运行 Jupyter 笔记本并使用它来预测新图像。大概我会写一篇关于这个的文章,但总的来说逻辑是:

  • 给定 API 的视口,前端向 API 请求图块。
  • API 从官方切片服务器(卫星视图)检索切片。
  • API 使用图块进行预测。
  • API 使用用户定义的模型、阈值和不透明度生成覆盖图(原始图像+概率)。
  • 前端显示瓷砖。

由于这种方法,我可以探索任何领域,并迅速得到预测。

Frontend displaying tiles predicted “on-the-fly”. Showing probabilities > 95%. Still some errors, but probably easy to correct with more negative samples.

最后的话

这是一个有趣的项目,结果比我预期的好得多。我可能会尝试改进模型,使其达到生产水平。API 肯定是我想继续改进的东西,因为我需要这样的东西已经有一段时间了。如果有人知道替代方案,请告诉我。

我希望你喜欢这篇文章。我想我会坚持太阳能主题,并尝试生成一个辐射模型来估计一所房子安装太阳能电池板的潜力。

数据科学每周 Python 摘要(7 月第一周)

原文:https://towardsdatascience.com/weekly-python-digest-for-data-science-1st-week-july-83bbf0355c36?source=collection_archive---------3-----------------------

大家好!我正在开始一个新的系列,我将谈论和测试一些谈论 Python 和 R 的库、代码或博客,以及它们在机器学习、深度学习和数据科学中的应用。第一份出版物是关于 Python 的。

1。sg2im —从场景图生成图像

https://github.com/google/sg2im

这个伟大的开源代码将允许您使用图形卷积来处理输入图形,通过预测对象的边界框和分段遮罩来计算场景布局,并使用级联优化网络将布局转换为图像。

该论文可在此处找到:

[## [1804.01622]从场景图生成图像

摘要:要真正理解视觉世界,我们的模型不仅要能识别图像,还要能生成…

arxiv.org](https://arxiv.org/abs/1804.01622)

那么这段代码是做什么的呢?它实现了一个端到端的神经网络模型,输入一个场景图,输出一个图像。场景图是视觉场景的结构化表示,其中节点表示场景中的对象,边表示对象之间的关系

图形卷积 网络 处理输入的场景图形,该网络沿着边缘传递信息以计算所有对象的嵌入向量。这些向量用于预测所有对象的边界框和分割遮罩,它们被组合以形成粗略的 场景布局 。该布局被传递到 级联细化网络 ,该网络以递增的空间比例生成输出图像。该模型针对一对 鉴别器网络 进行对抗性训练,以确保输出图像看起来逼真。

如何运行和测试代码?

首先克隆代码

git clone https://github.com/google/sg2im.git

原始代码是在 Ubuntu 16.04 上用 Python 3.5 和 PyTorch 0.4 开发和测试的。我在我的 Mac 上测试,没有问题:)

我建议您在虚拟环境中尝试一下。您可以设置虚拟环境来运行代码,如下所示:

python3 -m venv env               # Create a virtual environment
source env/bin/activate           # Activate virtual environment
pip install -r requirements.txt   # Install dependencies
echo $PWD > env/lib/python3.5/site-packages/sg2im.pth  # Add current directory to python path
# Work for a while ...
deactivate  # Exit virtual environment

你需要安装 python-venv 来完成这个。哦,顺便说一句,我需要改变一些脚本,这是我用的:

python3 -m venv --without-pip env # Added the --without-pip
source env/bin/activate           # Activate virtual environment
pip install -r requirements.txt   # Install dependencies
echo $PWD > env/lib/python3.6/site-packages/sg2im.pth  # Add current directory to python path
# Work for a while ...
deactivate  # Exit virtual environment

哦!也因为某些原因,我需要从 requirements.txt 中删除**pkg-resources=0.0.0** 。这似乎是一个错误:

[## pip 冻结命令输出中的“pkg-resources==0.0.0”是什么

本网站使用 cookies 来提供我们的服务,并向您显示相关的广告和工作列表。通过使用我们的网站,您…

stackoverflow.com](https://stackoverflow.com/questions/39577984/what-is-pkg-resources-0-0-0-in-output-of-pip-freeze-command/39638060)

我已经创建了问题和 PR:)

要运行预先训练好的模型,您需要通过运行脚本bash scripts/download_models.sh来下载它们。这将下载以下型号,并需要大约 355 MB 的磁盘空间:

  • sg2im-models/coco64.pt:在 COCO-Stuff 数据集上训练生成 64 x 64 的图像。该模型用于从论文中生成图 5 中的 COCO 图像。

https://arxiv.org/pdf/1804.01622.pdf

  • sg2im-models/vg64.pt:经过训练可以在可视基因组数据集上生成 64 x 64 的图像。该模型用于从论文中生成图 5 中的可视基因组图像。

https://arxiv.org/pdf/1804.01622.pdf

  • sg2im-models/vg128.pt:经过训练,可以在可视基因组数据集上生成 128 x 128 的图像。这个模型被用来从纸上生成图 6 中的图像。

您可以使用脚本scripts/run_model.py使用简单的人类可读的 JSON 格式在新的场景图上轻松运行任何预训练的模型。

要重现上面的绵羊图像,你必须运行:

python scripts/run_model.py \
  --checkpoint sg2im-models/vg128.pt \
  --scene_graphs scene_graphs/figure_6_sheep.json \
  --output_dir outputs

您将获得:

我们来看看 figure_6_sheep.json:

[
  {
    "objects": ["sky", "grass", "zebra"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1]
    ]
  },
  {
    "objects": ["sky", "grass", "sheep"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1]
    ]
  },
  {
    "objects": ["sky", "grass", "sheep", "sheep"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1],
      [3, "by", 2]
    ]
  },
  {
    "objects": ["sky", "grass", "sheep", "sheep", "tree"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1],
      [3, "by", 2],
      [4, "behind", 2]
    ]
  },
  {
    "objects": ["sky", "grass", "sheep", "sheep", "tree", "ocean"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1],
      [3, "by", 2],
      [4, "behind", 2],
      [5, "by", 4]
    ]
  },
  {
    "objects": ["sky", "grass", "sheep", "sheep", "tree", "ocean", "boat"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1],
      [3, "by", 2],
      [4, "behind", 2],
      [5, "by", 4],
      [6, "in", 5]
    ]
  },
  {
    "objects": ["sky", "grass", "sheep", "sheep", "tree", "ocean", "boat"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1],
      [3, "by", 2],
      [4, "behind", 2],
      [5, "by", 4],
      [6, "on", 1]
    ]
  }
]

让我们来分析第一个:

{
    "objects": ["sky", "grass", "zebra"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1]
    ]
  }

因此,我们有天空、草地和斑马,其中天空[0]在草地[1]上方,斑马[2]站在草地[1]上。

First image from figure_6_sheep.json

让我们创建一个新的来测试代码:

[{
    "objects": ["sky", "grass", "dog", "cat", "tree", "ocean", "boat"],
    "relationships": [
      [0, "above", 1],
      [2, "standing on", 1],
      [3, "by", 2],
      [4, "behind", 2],
      [5, "by", 4],
      [6, "on", 1]
    ]
  }]

跑步:

python scripts/run_model.py \
  --checkpoint sg2im-models/vg128.pt \
  --scene_graphs scene_graphs/figure_blog.json \
  --output_dir outputs

我有:

有点奇怪,但很有趣:)。

2。算法 / Python —所有算法都用 Python 实现。嗯“所有”

[## 算法/Python

所有算法都用 Python 实现

github.com](https://github.com/TheAlgorithms/Python)

编程是数据科学中的一项必备技能,在这个伟大的资源库中,我们将看到几个重要算法的全 Python 代码实现。

这些仅用于演示目的。出于性能原因,Python 标准库中有许多更好的实现。

例如,你会发现机器学习代码,神经网络,动态编程,排序,哈希等等。例如,这是用 Numpy 在 Python 中从头开始的 K-means:

3。mlens — ML-Ensemble —高性能集成学习

[## 弗伦纳哈格/姆伦斯

高性能集成学习

github.com](https://github.com/flennerhag/mlens)

ML-Ensemble 将 Scikit-learn 高级 API 与低级计算图框架相结合,以尽可能少的代码行构建内存高效、最大化并行化的集成网络。

只要基础学习者是线程安全的,ML-Ensemble 就可以依靠内存映射多处理实现内存中立的基于进程的并发。有关教程和完整文档,请访问项目网站。

通过 PyPI 安装

ML-Ensemble 在 PyPI 上可用。与一起安装

pip install mlens

简单示例(iris 义务示例):

**import** numpy **as** np
**from** pandas **import** DataFrame
**from** sklearn.metrics **import** accuracy_score
**from** sklearn.datasets **import** load_iris

seed **=** 2017
np**.**random**.**seed(seed)

data **=** load_iris()
idx **=** np**.**random**.**permutation(150)
X **=** data**.**data[idx]
y **=** data**.**target[idx]**from** mlens.ensemble **import** SuperLearner
**from** sklearn.linear_model **import** LogisticRegression
**from** sklearn.ensemble **import** RandomForestClassifier
**from** sklearn.svm **import** SVC

*# --- Build ---*
*# Passing a scoring function will create cv scores during fitting*
*# the scorer should be a simple function accepting to vectors and returning a scalar*
ensemble **=** SuperLearner(scorer**=**accuracy_score, random_state**=**seed, verbose**=**2)

*# Build the first layer*
ensemble**.**add([RandomForestClassifier(random_state**=**seed), SVC()])

*# Attach the final meta estimator*
ensemble**.**add_meta(LogisticRegression())

*# --- Use ---*

*# Fit ensemble*
ensemble**.**fit(X[:75], y[:75])

*# Predict*
preds **=** ensemble**.**predict(X[75:])

您将获得:

Fitting 2 layers
Processing layer**-**1             done **|** 00:00:00
Processing layer**-**2             done **|** 00:00:00
Fit complete                        **|** 00:00:00

Predicting 2 layers
Processing layer**-**1             done **|** 00:00:00
Processing layer**-**2             done **|** 00:00:00
Predict complete                    **|** 00:00:00

要检查层中估计器的性能,请调用data属性。属性可以包装在一个[**pandas.DataFrame**](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html#pandas.DataFrame)中,但是以表格格式打印出来。

**print**("Fit data:\n%r" **%** ensemble**.**data)

我们看到:

Fit data:
                                   score**-**m  score**-**s  ft**-**m  ft**-**s  pt**-**m  pt**-**s
layer**-**1  randomforestclassifier       0.84     0.06  0.05  0.00  0.00  0.00
layer**-**1  svc                          0.89     0.05  0.01  0.01  0.00  0.00

还不错。让我们来看看整体表现如何:

Prediction score: 0.960

他们这里有很棒的教程:

[## 入门- mlens 0.2.1 文档

编辑描述

ml-ensemble.com](http://ml-ensemble.com/info/tutorials/start.html)

今天就到这里了:)。很快你会得到更多的信息,也可以用 R 发帖。如果您想了解最新信息,请订阅以下内容:

感谢你阅读这篇文章。希望你在这里发现了一些有趣的东西:)

如果你有任何问题,请在推特上关注我

[## 法维奥·巴斯克斯(@法维奥·巴斯克斯)|推特

Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…

twitter.com](https://twitter.com/faviovaz)

还有 LinkedIn。

[## Favio Vázquez —首席数据科学家— OXXO | LinkedIn

查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 15 个工作职位列在…

linkedin.com](http://linkedin.com/in/faviovazquez/)

那里见:)

数据科学每周文摘(7 月第一周)

原文:https://towardsdatascience.com/weekly-r-digest-for-data-science-1st-week-july-df8ce2f3bb72?source=collection_archive---------9-----------------------

大家好!在这个新系列中,我将讨论并测试一些关于 R 及其在机器学习、深度学习和数据科学中的应用的库、代码或博客。你可以在这里阅读的 Python 版本。

1。调色板 —单个 R 包中大多数调色板的集合

https://github.com/EmilHvitfeldt/paletteer

数据可视化在数据科学中至关重要。是我们向企业解释我们的发现的途径,它还帮助我们理解我们正在分析的数据,将几周的工作压缩成一幅画面。

r 是一种很好的可视化语言。这个伟大的软件包 paletteer 的目标是使用一个公共接口成为 R 中调色板的综合集合。把它想象成“调色板的脱字符号”。

这个包还没有在 CRAN 上,但是如果你想要开发版本,那么直接从 GitHub 安装:

# install.packages("devtools")
devtools::install_github("EmilHvitfeldt/paletteer")

调色板

调色板分为两组;离散连续。对于离散调色板,您可以在固定宽度调色板动态调色板之间进行选择。两者中最常见的是固定宽度调色板,它具有固定的颜色数量,当所需的颜色数量变化时,该数量不会改变,如下调色板所示:

另一方面,我们有动态调色板,其中调色板的颜色取决于您需要的颜色数量,如cartography包中的green.pal调色板:

最后,我们有连续调色板,它可以根据您的需要提供任意多种颜色,以实现颜色的平滑过渡:

该包包括来自 28 个不同包的 958 个包,有关这些包的信息可以在以下数据框中找到:palettes_c_namespalettes_d_namespalettes_dynamic_names

该套件还包括使用相同标准接口的ggplot2

library(ggplot2)ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  geom_point() +
  scale_color_paletteer_d(nord, aurora)

非常容易和有用。记得访问 GitHub repo:

[## EmilHvitfeldt/paletteer

调色板-在一个 R 包中收集了大多数调色板

github.com](https://github.com/EmilHvitfeldt/paletteer)

并启动它;).

2。DALEX —描述性的机器学习解释

https://github.com/pbiecek/DALEX

解释机器学习模型并不总是容易的,但对于一些商业应用来说却非常重要。有一些很棒的库可以帮助我们完成这项任务,例如:

[## 托马斯 p85/石灰

本地可解释的模型不可知解释(原始 Python 包的 R 端口)

github.com](https://github.com/thomasp85/lime)

顺便说一句,有时候一个简单的 ggplot 可视化可以帮助你解释一个模型。关于这方面的更多信息,请看马修·梅奥的这篇精彩文章:

[## 解释机器学习模型:综述

一篇关于机器学习解释的文章早在三月份就出现在 O'Reilly 的博客上,作者是 Patrick Hall,Wen…

www.kdnuggets.com](https://www.kdnuggets.com/2017/11/interpreting-machine-learning-models-overview.html)

在许多应用中,我们需要知道、理解或证明输入变量是如何在模型中使用的,以及它们对最终模型预测有什么影响。DALEX是一套帮助理解复杂模型如何工作的工具。

要从 CRAN 安装,只需运行:

install.packages("DALEX")

他们有关于如何将 DALEX 用于不同 ML 包的惊人文档:

  • 如何使用带有脱字符号的 DALEX】
  • 如何配合 mlr 使用 DALEX】
  • 如何与 H2O 一起使用 DALEX】
  • 如何在 xgboost 包中使用 DALEX】
  • 如何使用 DALEX 进行教学?第一部分
  • 如何使用 DALEX 进行教学?第二部分
  • 分解 vs 石灰 vs 沙普利

伟大的备忘单:

https://github.com/pbiecek/DALEX

https://github.com/pbiecek/DALEX

一个交互式笔记本,您可以在其中了解有关该产品包的更多信息:

[## 粘合剂(测试版)

编辑描述

mybinder.org](https://mybinder.org/v2/gh/pbiecek/DALEX_docs/master?filepath=jupyter-notebooks%2FDALEX.ipynb)

最后是一个书籍风格的文档,其中讨论了 DALEX、机器学习和可解释性:

[## DALEX:描述性机器学习解释

不要相信黑箱模型。除非它能自我解释。

pbiecek.github.io](https://pbiecek.github.io/DALEX_docs/)

在原始存储库中签出它:

[## pbiecek/DALEX

DALEX -描述性机器学习解释

github.com](https://github.com/pbiecek/DALEX)

而且记得启动它:)。

modelDown —生成一个包含预测模型的 HTML 摘要的网站

modelDown生成一个包含预测模型 HTML 摘要的网站。Is 使用 DALEX (见上文)解释器来计算和绘制给定模型如何表现的概要。我们可以看到预测分数是如何精确计算的(预测分解),每个变量对预测的贡献有多大(变量响应),哪些变量对给定模型最重要(变量重要性),以及模型的表现如何(模型性能)。

您现在可以从 GitHub 安装它:

devtools::install_github("MI2DataLab/modelDown")

当您成功地安装了这个包之后,您需要为您的模型创建 DALEX 解释器。下面是一个简单的例子(来自作者):

*# assuming you have two models: glm_model and ranger_model for HR_data*
explainer_glm <- DALEX::explain(glm_model, data=HR_data, y=HR_data$left)
explainer_ranger <- DALEX::explain(ranger_model, data=HR_data, y=HR_data$left)

接下来,将所有创建的解释器传递给函数modelDown。例如:

modelDown::modelDown(explainer_ranger, explainer_glm)

就是这样!现在,您应该已经用默认选项生成了 html 页面。

您将看到如下页面:

索引页

索引页提供了 explainers 中提供的数据的基本信息。您还可以看到作为参数给出的所有解释器的类型。此外,数字变量的汇总统计数据也是可用的。对于分类变量,表中列出了因子水平的频率。

模型性能

模块显示功能model_performance的结果。

可变重要性

函数variable_importance的输出以图表的形式呈现。

还有更多。下面是一个用这个包生成的页面的实例:

https://mi2datalab.github.io/modelDown_example/

今天就到这里了:)。很快你会得到更多的信息,也可以用 R 发帖。如果您想了解最新信息,请订阅以下内容:

感谢你阅读这篇文章。希望你在这里发现了一些有趣的东西:)

如果你有任何问题,请在推特上关注我

[## 法维奥·巴斯克斯(@法维奥·巴斯克斯)|推特

Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…

twitter.com](https://twitter.com/faviovaz)

还有 LinkedIn。

[## Favio Vázquez —首席数据科学家— OXXO | LinkedIn

查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 15 个工作职位列在…

linkedin.com](http://linkedin.com/in/faviovazquez/)

那里见:)

每周精选—2017 年 10 月 13 日

原文:https://towardsdatascience.com/weekly-selection-101e392ae99b?source=collection_archive---------5-----------------------

怎样才能成为小公司的优秀数据科学家

由 Shanif Dhanani — 7 分钟阅读。

数据科学是每个人都在谈论的领域之一,但很少有人知道如何“正确地”做学校现在才开始了解如何教授它。就数据科学而言,每个公司都有自己的招聘实践(见鬼,有些根本没有)。

计算机视觉及其为何如此困难

大卫·阿默兰——5 分钟阅读。

最难理解的是最基本的东西。我们生活在一个视觉世界。我们看到东西,立即明白它们是什么,以及我们可以用它们做什么。我们不仅可以识别它们,还可以了解它们的特殊属性和它们所属的类别。

权力的游戏单词嵌入,R+L = J 吗?—第 1 部分

通过 JC 泰斯图德 — 7 分钟读取。

在我的第一篇关于文本生成的文章之后,我决定学习并撰写关于单词嵌入的文章。单词嵌入是 2013 年(现在是史前时代)的热门新事物。现在,让我们将这一数据科学突破应用于一些愚蠢的事情!

2017 年大数据趋势点燃

由 Mac Fowler — 4 分钟读取。

我有幸参加了在密歇根州大急流城举行的大数据点燃 2017 大会。为期三天的会议以“指数智能时代”为主题,并为我提供了一个机会,让我后退一步,更广泛地了解大数据和分析市场。

时尚品牌利用人工智能实现个性化的五种方式

由克拉克博伊德 — 9 分钟阅读。

很少有行业不受正在进行的人工智能革命的影响。在大量开源技术的推动下,各种品牌都在挖掘人工智能和机器学习的潜力,以理解大数据。

人工智能能帮你找到爱情吗:了解婚介行业

由 Shamli Prakash — 5 分钟阅读。

我认为我这一代人是极其幸运的一代,他们处在由技术革命推动的世界巨变的尖端。

在数据科学社区敢于与众不同

通过 Jerica Copeny — 4 分钟阅读。

如果您想提高对某个问题的认识或倡导一项重要的事业,将数据科学作为您的工具,该怎么办?作为一名数据科学家,这种想法可能会让你非常兴奋:让问题变得明朗,用数据让故事变得生动。

对算法公平性讨论的温和介绍

按 Gal Yona — 10 分钟读取。

近年来,机器学习算法已经兴起:在打破了几乎所有可以想象的计算机视觉相关任务的基准之后,机器学习算法现在一直在我们的家里和口袋里。

  • 与我们的团队实时聊天
  • 写给走向数据科学的
  • 订阅我们的官方简讯(新)
  • 成为 Patreon

每周精选

原文:https://towardsdatascience.com/weekly-selection-24786e857132?source=collection_archive---------7-----------------------

亲爱的读者和投稿人:

感谢您继续支持数据科学。本周,我们扩展了每月数据科学初级读本的主题,向您展示了本周的一些最佳人工智能帖子。

我们非常高兴地欢迎伊内斯·特谢拉、阿伦·南比亚尔、钟楚红、萨米·阿梅加维和达希·奥尔连多加入我们的编辑团队。我们很高兴为我们的贡献者提供这种支持,我们希望作家将充分利用他们的才华。

与麦迪逊关于机器学习的坦诚对话 5 月

由瑞安·路易——阅读:8 分钟。

欢迎来到坦诚的机器学习对话。我是 Ryan Louie,我采访了机器学习从业者,了解他们职业背后的思考。

Wolfram 暑期学校 Reddit 的计算思维

到瑞典人怀特——读数:8 分钟。

大约在去年的这个时候,我在想这个夏天该做些什么。在研究生院度过了一个相当糟糕的学期,但我终于完成了路易斯安那州立大学社会学博士项目的核心课程。

前馈网络的反向传播

由酱油猫——读数:7 分钟。

为了训练网络,使用特定的误差函数来测量模型性能。目标是通过更新相应的模型参数来最小化误差(成本)。为了知道在哪个方向和多大程度上更新参数,必须计算它们相对于误差函数的导数。这就是反向传播的用途。

自动驾驶汽车跟踪行人

由 Priya DWI vedi——阅读:5 分钟。

自动驾驶汽车在行驶时需要周围的世界地图。它必须能够连续跟踪路上的行人、汽车、自行车和其他移动物体。在这篇文章中,我将通过一种称为扩展卡尔曼滤波器的技术进行讨论,谷歌自动驾驶汽车正在使用这种技术来跟踪道路上的移动物体。

每周精选—2017 年 10 月 20 日

原文:https://towardsdatascience.com/weekly-selection-26-5fb7439a1f58?source=collection_archive---------8-----------------------

Join us as an Editorial Associate of Towards Data Science

庆祝迈向数据科学一周年

由钟楚红 — 3 分钟读完。

迈向数据科学始于一年前的 2016 年 10 月 21 日。我们现在已经成长为一个在 Medium 上拥有超过 30,000 名粉丝的社区,并在脸书、 Twitter 、 LinkedIn 和 Instagram 上开展业务。

为什么 OpenMined 成为开源项目的榜样

由 Awa 孙茵 — 3 分钟读完。

这不是我第一次写关于 OpenMined 的开源项目。

机器学习工程师新手犯的 6 大错误

克里斯托弗档案员 — 5 分钟阅读。

在机器学习中,有许多方法来构建产品或解决方案,每种方法都有不同的假设。很多时候,如何导航和识别哪些假设是合理的并不明显。

利用 Python 中的客户细分找到您的最佳客户

由苏珊李 — 5 分钟读完。

当谈到找出谁是你的最佳客户时,古老的 RFM 矩阵原理再次发挥作用。RFM 代表近期、频率和货币。

为机器学习和深度学习学习数学

由 Aneesha Bakharia — 3 分钟阅读。

虽然我在攻读工程学位时确实学了很多数学,但当我想进入机器学习领域时,我已经忘记了大部分。毕业后,我从未真正需要过任何数学。

从网络开发到计算机视觉和地理

由伦纳德·博格多诺夫 — 7 分钟读完。

在过去的四年里,我一直有一个想法,那就是我要创办一家公司。潜在的感觉是,我想做一些我能热情地承担全部责任的事情。

  • 与我们的团队实时聊天
  • 为走向数据科学而写作
  • 订阅我们的官方简讯(新)
  • 成为 Patreon

每周精选—2017 年 10 月 27 日

原文:https://towardsdatascience.com/weekly-selection-27-cafbf0c682ea?source=collection_archive---------4-----------------------

Join us as an Editorial Associate of Towards Data Science

为什么医院需要更好的数据科学

由Sanjeev agr awal—6 分钟阅读。

可以说,航空公司比医院在运营上更复杂,资产更密集,监管更严格,但迄今为止,在保持低成本并获得可观利润的同时,表现最好的航空公司比大多数医院做得更好。

教一个变分自动编码器(VAE)画 MNIST 字符

由菲利克斯莫尔 — 4 分钟读取。

自动编码器是一种神经网络,可用于学习输入数据的有效编码。给定一些输入,网络首先应用一系列变换,将输入数据映射到低维空间。

利用文本挖掘改进 Airbnb 收益预测

通过 Joaee 咀嚼 — 11 分钟阅读。

Airbnb 是一个受欢迎的家庭共享平台,让世界各地的人们分享他们独特的住宿。对于潜在的主人来说,这可能是一个有利可图的选择,因为他们有空的度假屋、多余的房间甚至是多余的床。

吴恩达深度学习专业化— 21 条经验教训

Ryan Shrott — 10 分钟阅读。

我最近完成了吴恩达在 Coursera 上的新深度学习课程的所有可用材料(截至 2017 年 10 月 25 日)。该专业目前有 3 门课程。

人工智能应用:数据科学遇上采购

由 Shamli Prakash — 4 分钟阅读。

采购职能是组织中最重要的职能之一,但往往不被人们所重视。不知何故,它很少拥有与营销、金融或科技等更时髦的同行相关的浮华和魅力。

一个气泡图,对比 10 个数据可视化工具

由苏珊李 — 7 分钟读完。

对于任何想学习数据分析和可视化的人来说,网上不乏“最佳工具”文章,告诉你该选择什么。我不会尝试创建一个列表,因为有太多的工具可以列举。

使用深度学习的狗品种分类:实践方法

通过 Kirill Panarin — 8 分钟读取。

几天前,我注意到由 Kaggle 主办的犬种鉴定挑战赛。我们的目标是建立一个模型,能够通过“观察”狗的图像来进行狗的品种分类。

每周精选

原文:https://towardsdatascience.com/weekly-selection-2fb8808eed01?source=collection_archive---------9-----------------------

克拉姆甘笔记

由亚瑟·格雷顿 — 8 分钟阅读。

下面的讨论与最近的论文有关:“克莱姆距离作为有偏瓦瑟斯坦梯度的解决方案”

数据科学复兴

通过罗布·托马斯 — 7 分钟读取。

“如果人们知道我是多么努力才掌握这门技能,那就一点也不美妙了。”——米开朗基罗。

甘戈:用甘戈创造艺术

肯尼·琼斯——13 分钟阅读。

这里介绍的工作是 Kenny Jones 和 Derrick Bonafilia(都是威廉姆斯学院 2017 级)在 Andrea Danyluk 教授的指导下进行了一个学期的独立研究的结果。

Z 分数的惊人寿命

由此生 — 5 分钟读完。

1730 年 6 月 6 日星期二的深夜,亚伯拉罕·德莫佛跌跌撞撞地从考文特花园的一家咖啡馆里走了出来,由于喝了太多的杜松子酒,又上了几个小时的课,还在赌博,他还有点晕头转向。

用 Tensorflow 和 OpenCV 构建实时物体识别 App

通过 Dat Tran — 4 分钟读取。

在本文中,我将介绍如何使用 Python 3(具体来说是 3.5)中的tensor flow(TF)新的对象检测 API 和 OpenCV 轻松构建自己的实时对象识别应用程序。

如何不按人气排序

由华雷斯博奇 — 8 分钟读取。

问题:你是一个 web 程序员。你有用户。你的用户阅读你网站上的内容,但不评价他们。您想要制作一个用户可能想要点击的流行内容列表。你需要某种“分数”来排序。

每周精选

原文:https://towardsdatascience.com/weekly-selection-38de4d58f8cd?source=collection_archive---------4-----------------------

亲爱的读者和投稿人:

本周,春天来了,我们对深度学习、统计学和数据科学应用的理解也来了,这要感谢我们知识渊博的作家。我们很高兴向您展示我们每周精选的关于数据科学的文章。

我们的使命一直是为您带来关于数据科学哲学、理论和应用的有趣、有用的文章。我们希望提供高质量、可信的信息,让我们的读者能够从中学习,并展示我们的作者能够创作出的最佳作品。

三月给 TDS 带来了一些大的变化。我们非常自豪,目前我们每天收到多达 10 份投稿,现在已经有超过 70 名投稿者。

现在是提高标准的时候了。

我们正在寻找我们社区的成员来帮助我们向读者提供优秀的文章,并通过编辑协助帮助我们崭露头角的作家发展他们的声音。

加入我们,成为《走向数据科学》的编辑助理。

我们期待着在接下来的一周阅读您的意见,我们希望欢迎一些编辑助理加入 TDS 团队!

神经网络架构

由尤金尼奥·库勒切罗——阅读:14 分钟

深度神经网络和深度学习是强大和流行的算法。他们的成功很大程度上在于神经网络架构的精心设计。

LSTM 举例使用 Tensorflow

作者:罗威尔·阿蒂恩萨

在深度学习中,递归神经网络(RNN)是一个神经网络家族,擅长从序列数据中学习。已经找到实际应用的一类 RNN 是长短期记忆(LSTM ),因为它对长期依赖的问题是稳健的。

数据解释中的萤火虫、热手和其他(所谓的)谬误。

作者:亨利·金——阅读:4 分钟

很久以前,当我第一次学习认知心理学时,我被分配到了关于所谓“热手谬误”的著名论文。要点很简单:人们不擅长评估概率。

根除癌症的机器

作者奥利弗·米切尔——阅读:6 分钟

本周在奥斯汀举行的 SxSw 互动大会上,前副总统乔·拜登(Joe Biden)向所有创新者发出挑战,要求他们有更远大的想法。拜登的癌症登月任务组于去年 1 月成立,汇集了 20 个政府机构和 70 多家私营公司,目标只有一个——“消除我们所知的癌症。”

特征工程:宁滨的贝叶斯方法

作者:Andrew Greatorex —阅读:5 分钟

任何数据科学难题中最关键的一块,或许也是最不迷人的一块:特征工程。这可能是漫长而令人沮丧的,但如果做得不好,它可能会给随后的任何建模或分析带来灾难。

蒙特卡罗分析与模拟

由阿纳尔多·冈兹——阅读:8 分钟

蒙特卡罗方法是解决非常困难的概率问题的简单方法。这篇课文是对这门学科的一个非常简单的、说教式的介绍,融合了历史、数学和神话。

我叫伊尼戈·蒙托亚。一个与语音识别应用共情的案例。

卢西恩·利塔(Lucian Lita)—阅读:6 分钟

你好。我的名字叫蒙古朋友。叹气。靛蓝拉托亚。Grrrr。伊尼戈蒙托亚。有时候,在使用语音识别应用程序时,你需要竭尽全力保持冷静。对我们许多人来说,名字是最糟糕的压力源。

用爬山搜索算法解决幻灯片难题

由拉胡尔察觉 —读数:3 分钟

爬山搜索算法是局部搜索和优化技术中最简单的算法之一。Miroslav Kubat 在《机器学习导论》一书中是这样定义的。

区块链 VS 人工智能

鲍里斯·拉夫罗夫(Boris Lavrov)——阅读:12 分钟

在当今的科技世界中,有两大趋势是你不能错过的。首先是人工智能(AI)技术的复兴:计算机视觉、自然语言处理和生成、机器翻译以及大规模数据集的处理和分析的进步。

每周精选

原文:https://towardsdatascience.com/weekly-selection-4420934492be?source=collection_archive---------3-----------------------

车辆检测与跟踪

由伊万·卡萨科夫 — 7 分钟阅读。

在我的实现中,我使用了深度学习方法来进行图像识别。具体来说,我利用卷积神经网络(CNN)的非凡能力来识别图像。

纽约时报新闻数据集的主题建模

由 Moorissa Tjokro — 4 分钟读取。

我们生活在一个不断收集数据流的世界。因此,从收集的信息中寻找见解会变得非常乏味和耗时。主题建模是作为组织、搜索和理解大量文本信息的工具而设计的。

2017 年 GPU 技术大会(GTC)上人工智能(AI)、虚拟和增强现实(VR 和 AR)对医学成像的影响

通过erinjeri—10 分钟读取。

今年的 GTC 组织了一场医疗保健追踪,致力于人工智能和健康技术之间的应用。许多研讨会专注于使用 Nvidia 硬件、图形处理单元(GPU)应用机器学习算法来预测早期癌症检测的开始,许多会议分析解剖结构中的其他癌症肿瘤,如肺、乳腺和大脑。

如何增长数据

由艾德·怀尔德-詹姆斯 — 5 分钟阅读。

数字化和人工智能的双重浪潮已经高涨到任何企业都无法忽视的地步。它已经从幕后成为价值和创新的驱动力。难怪最近一期《经济学人》宣称“世界上最有价值的资源不再是石油,而是数据”。

我的赛博克隆:数字化的自己

由Sampreeti Bhattacharyya—4 分钟阅读。

一年前,我开始将这个项目作为个人夜间爱好来研究(https://TechCrunch . com/2016/01/09/virtual-reality-and-a-parallel-universe-of-cyber clones/Ross FinmanBenjamin Reinhardt)。并不是说我在攻读博士学位、创业、指导学生和抱怨生活之间没有任何事情可做。

犯错是算法:算法的易错性和经济组织

由 juan.mateos-garcia — 5 分钟阅读。

深入挖掘当今一些最大的技术争议,你可能会发现一种算法失灵了。

每周精选

原文:https://towardsdatascience.com/weekly-selection-46c95612a64c?source=collection_archive---------2-----------------------

亲爱的读者和投稿人:

是时候对我们最喜欢的关于数据科学的文章进行每周综述了。本周,我们遇到了文化冲突,因为人工智能帖子揭示了分析的技术方面,而我们更具商业头脑的贡献者阐明了表现大数据的实用性。

我们总是渴望听到新的观点,为什么不加入到关于数据科学的对话中来呢?看看我们的作家网页,了解如何提交您的文章!

我们要感谢我们的作家提供了这些精彩的贡献,它们都值得一读,但这里有一些我们最喜欢的开始你:

数据丰富的人越来越富有——人工智能的现状(第一部分)和(第二部分)

由弗雷德里克·阿南德——阅读:8 分 17 秒

你可能没有错过这些天关于人工智能(AI)和机器学习的讨论。在一个两部分的博客中,我们看看什么是人工智能,以及它的影响,然后探索人工智能在北欧的状态。

为什么重叠置信区间对统计显著性毫无意义

作者:Prasanna Parasurama——阅读:4 分钟

重叠的置信区间/误差线对统计显著性没有任何意义。然而,许多人错误地推断缺乏统计学意义。很可能是因为相反——非重叠置信区间——意味着统计显著性。我犯了这个错误。

利用人性和大数据解决问题

瑞安·莫里森——阅读:3 分钟

想象一下,如果你能让十几个、一百个、一千个甚至上万个人一起工作来发现模式,会有什么样的成就。你可能会有令人难以置信的新发现,发现以前从未了解的事物,或者发现以前从未见过的事物。

灭绝和濒危语言的数据可视化

由明成 —阅读:3 分钟

我们的项目展示了世界各地灭绝和濒危语言的分布。数据集是从《卫报》发布的 Kaggle 上下载的。它总共包括 14 个变量(即列),但我们只选择了 5 个变量在这个项目中进行可视化:语言的名称、经度、纬度、濒危程度(脆弱、绝对脆弱、严重脆弱、严重濒危或灭绝),以及说话者的数量。

成为机器学习极客

到莫莉莎·乔克罗——读数:4 分钟

我认为家是任何你可以自由做自己的地方。最快乐的时候,最原始的你。当我开始阅读我的机器学习教材时,我差不多就是这样。尽管我很开心(也很书呆子气),但我还是疯狂地阅读了这本书,即使是在地铁上或吃着一碗拉面的时候。

每周精选

原文:https://towardsdatascience.com/weekly-selection-49ce988c7ee7?source=collection_archive---------7-----------------------

ResNet 及其变体概述

由冯文森 — 11 分钟阅读。

在 AlexNet [1]在 LSVRC2012 分类大赛上取得辉煌胜利之后,deep Residual Network [2]可以说是过去几年中计算机视觉/深度学习社区中最具开创性的工作。

我对当今优秀数据科学家的两点看法?

通过 Dat Tran — 6 分钟读取。

我的父母最近问我,我为了重新生活做些什么。过去,这并不容易解释,因为数据科学不是一个定义明确的领域。甚至当我在埃森哲开始我的第一份工作时,我几乎不知道我到底在做什么。当然有一些定义,比如:

用机器学习预测逻辑的歌词

由汉斯·卡明 — 9 分钟读完。

这个实现的关键是创建一个二元模型 马尔可夫链来表示英语。更具体地说,我们的链将是一个 dictionary 对象,其中每个键都是一个惟一的元组,由一个单词及其后面的单词组成。

构建贝叶斯深度学习分类器

由凯尔·多尔曼 — 19 分钟读完。

在这篇博客文章中,我将教你如何使用 Keras 和 tensorflow 来训练贝叶斯深度学习分类器。

使用 TensorFlow 进行基因组变异调用的简单卷积神经网络

由杰森钦 — 10 分钟阅读。

毫无疑问,使用深度神经网络的最新进展的快速发展已经改变了我们可以解决从图像识别到基因组学的各种问题的方式。

最佳书架:用 D3.js 改编真实世界对象的数据可视化

到谭永金 — 8 分钟读完。

当你听到“数据可视化”时,第一个想到的视觉形式是什么?条形图还是折线图?一些更奇特的东西,比如热图或者定向网络?

这是玉米卷吗?自定义视觉的机器学习实验

通过 Elisha Terada — 5 分钟阅读。

想知道如何获得机器学习(ML)吗?那么,现在你可以通过云端提供的机器学习服务,称为功能即服务(FaaS)。

黄画的蒙特利尔:神经风格网络

由 Gabriel Tseng — 6 分钟读取。

最近,CNN(卷积神经网络)的一个非常酷的应用是设计神经网络;这些包括分离一个图像的风格,另一个图像的内容,并把它们结合起来。

机器学习在让 EHR 物有所值中的作用

伦纳德·达沃利奥博士——5 分钟阅读。

华尔街日报发表的一篇名为“关掉电脑,倾听病人的声音”的专栏文章将一个关键的医疗保健问题推到了全国讨论的前沿

深度神经网络能作曲吗?

由贾斯汀·斯韦利亚托 — 9 分钟阅读。

当我去年九月开始读研时,我想尽快投入到深度学习的热潮中。

关于神经网络和深度学习

由 Pranjal Srivastava — 19 分钟阅读。

现代计算机的数字运算和数据处理能力令人惊叹。但是,如果我告诉你,与人脑相比,这些都不算什么呢?

释放流程挖掘的价值

托马斯·菲拉雷(Thomas Filaire)—10 分钟阅读。

本文的目的是向读者介绍流程挖掘,这是一种创新的分析方法以客观和详尽的方式了解任何流程。

每周精选

原文:https://towardsdatascience.com/weekly-selection-56616a31a5c3?source=collection_archive---------5-----------------------

亲爱的读者和投稿人:

我们欢迎你来参加我们的第一次每周综述。感谢我们的作家们精彩的一周精彩的文章。从如何构建数据科学就绪硬件的技术教程,到对人工智能未来的哲学思考,我们阅读了您的提交内容。

向加入我们 slack 频道的贡献者致意!我们在作者页面上为潜在贡献者添加了一些资源,请阅读。我们还提供一些提示,帮助您为下一期简讯选择每周精选的特色文章。我们期待您的回复。

在这里,我们选择了几个突出的职位,值得一读,如果你错过了他们……我们希望你会发现他们像我们一样丰富和愉快!

神经网络能解决任何问题吗?

作者布伦丹·福特纳——阅读:6 分钟

在你深度学习之旅的某个时候,你可能会遇到通用逼近定理:“一个单层的前馈网络足以表示任何函数,但该层可能大得不可行,可能无法正确学习和推广”。

语音识别:懒狗入门

卢西恩·利塔 —阅读:8 分钟

我和一个好朋友最近在吃饭时聊起了语音识别应用。没错,我们就是那些人。隔着一张桌子,刻板的极客们对技术、创业和变革变得兴致勃勃。你可以走进几乎任何一家硅谷咖啡店,买一杯超定制的拿铁咖啡,仅仅五分钟后,你就可以成为风险投资或移动开发领域的迷你专家——或者至少感觉自己是专家。

卡尔曼滤波器:直觉和离散情况推导

作者:Vivek Yadav——阅读:6 分钟

在这篇文章中,我们将回顾离散卡尔曼滤波器的推导过程。我们将首先建立由离散动态控制的系统的方程,然后表达近似系统,计算误差协方差并计算最小化误差协方差的更新规则。由于经由卡尔曼滤波的估计涉及连续的测量和状态传播,所以在离散实现的情况下它们更容易理解。

我们时代的新闻

由卢克·阿姆布鲁斯特——阅读:18 分钟

假新闻是 2016 年美国总统大选后这些天非常热门的话题。脸书和谷歌正在用自己的行动来减少假新闻的传播,包括降低搜索结果的排名和收回广告资金。自动标记假新闻而不彻底交叉检查声明的技术挑战——目前只有人类才能完成这项任务——是防止假新闻传播的严重障碍。

推荐古腾堡计划的书籍

劳拉·普罗韦尔——阅读:7 分钟

为年轻读者选择他们喜欢阅读的书籍对父母和教育工作者来说是一个挑战。我的解决方案是建立一个推荐引擎,既考虑阅读水平,也考虑最近阅读的书籍的主题,并返回下一步阅读的建议。

每周精选

原文:https://towardsdatascience.com/weekly-selection-6c0f3c3f387d?source=collection_archive---------4-----------------------

亲爱的读者和投稿人:

我们希望您喜欢本周选择的新文章:

从名字中深度学习性别——LSTM 递归神经网络

由迪帕克巴布公关 — 4 分钟阅读。

深度学习神经网络已经在与视觉、语音和文本相关的问题上显示出有希望的结果,并取得了不同程度的成功。我在这里试着看一个文本问题,我们试着从人名中预测性别。

英国皇家学会关于机器学习的报告(2017 年 4 月)

由朱利安哈里斯 — 10 分钟阅读。

英国皇家学会发起了一项(128 页!)关于机器学习的报告。我仔细阅读了它,并做了一些笔记,其中有一些有用的不同或以有用的方式传达的东西,其他人可能会觉得有用。在这里和那里,我链接了我发现的其他作品,并添加了一些观察。

纽约租赁市场分析| ka ggle 排名前 15%的网站!

通过Shubhankar Srivastava—9 分钟读取。

这是我第一次认真参与 Kaggle 竞赛的文档记录——租赁店租赁咨询。两个半月, 146 个 git 提交了和 87 个提交了之后,我站在了排行榜的前 15% 之内——这是一个我引以为豪的位置!

我参加 Kaggle 数据科学碗 2017(肺癌检测)的经历

由阿希什·沙阿 — 4 分钟读完。

我参加了 Kaggle 一年一度的数据科学碗(DSB) 2017 ,很想和大家分享我激动人心的经历。首先,我想强调一下我对这场比赛的技术方法。

数据和心理健康:2016 年 OSMI 调查

由绒毛哺乳动物 — 16 分钟读取。

大家好!首先,我要感谢我的朋友们,CMU 社区和媒体对我的上一篇文章提供了周到的反馈。分享的故事和关于这篇文章的对话非常感人,我真的很高兴这篇文章为 CMU 精神健康的讨论做出了贡献。

每周精选

原文:https://towardsdatascience.com/weekly-selection-6c25cd42348a?source=collection_archive---------5-----------------------

神经形态和深度神经网络

由Eugenio culrciello—6 分钟阅读。

用于计算神经网络的神经形态或标准数字:哪个更好?这个问题很难回答。标准的数字神经网络是我们在深度学习中看到的那种,它们取得了所有的成功。他们使用 64 位或更低的数字值进行计算,所有这些都在标准数字硬件中。

提高机器学习模型的准确性

通过 Prashant Gupta — 8 分钟读取。

厌倦了机器学习模型的低准确率吗?助推是来帮忙的。 Boosting 是一种流行的机器学习算法,可以提高你的模型的准确性,就像赛车手使用 nitrous boost 来提高他们的汽车速度一样。

Tensorflow RMSD:使用 Tensorflow 做它没有被设计去做的事情

斯坦福大学潘德实验室(Matthew p . Harrigan)——8 分钟阅读。

深度学习彻底改变了图像和语音处理,让你可以把边缘变成猫。在我们的实验室里,我们将这些技术应用于小分子药物研发。

我的 Spotify 音乐很无聊吗?涉及音乐、数据和机器学习的分析

胡安·德·迪奥斯·桑托斯 10 分钟阅读。

几天前,我一边听着 Spotify 保存的歌曲,一边和一个朋友聊天。唱了几首歌后,她打断了谈话告诉我:“你的音乐品味很有趣……你的播放列表里有很多综艺器乐歌曲,其中一些是无聊”。

上周的数据故事、数据集和可视化综述

本杰明·库利 — 8 分钟阅读。

每个星期,我都会剪辑、保存和收藏大量我在网上找到的关于用数据讲述故事的很酷的东西。以下是 5 月 22 日这一周吸引我眼球的内容。在典型的时事通讯中,我会包含一堆链接供你点击,保存起来以后再看(没关系,我们都这样做)。

生成模型和 gan

由 Anish Singh Walia — 4 分钟阅读。

简单地说,它们是一类无监督的机器学习模型,用于生成一些数据。它使用观测值的联合概率分布。

Stock2Vec —从 ML 到 P/E

由乔恩·佩尔 — 3 分钟读完。

Word2Vec 是一个简单却惊人强大的算法。

它构建单词向量来表示单词含义。它仅仅通过周围的单词来学习这些意思。然后你可以使用这些单词向量作为输入,让机器学习算法执行得更好并找到有趣的抽象。

为大家揭秘人工智能

由 Namit Chaturvedi — 8 分钟阅读。

每个计算机程序的核心都有一个数学函数在起作用。这可能像计算未偿还贷款的利息一样简单,也可能像自动驾驶飞机一样复杂。人工智能,或 AI ,是一个计算机程序的通称,其核心数学功能已经(几乎)自动创建;而机器学习,或 ML ,指的是提供创造人工智能方式的一系列技术。

每周精选

原文:https://towardsdatascience.com/weekly-selection-6fd8fcca6425?source=collection_archive---------5-----------------------

为什么预测是智慧的本质

由彼得·斯威尼 — 10 分钟读完。

机器学习和智能都植根于预测,这是巧合吗?当我们的技术体现了智能的本质时,我们是否正在接近一个重要的转折点?或者这是误解历史长河中的又一篇章?如果这确实是本质,在一个由许多组件组成的系统中,是什么让预测凌驾于其他之上?

用无监督学习重新定义篮球位置

埃文·贝克——8 分钟阅读。

NBA 总决赛结束了。最后一瓶香槟已经被倒空,五彩纸屑开始沉降。既然金州勇士队已经完成了在篮球界释放他们超凡脱俗的统治地位,我认为这将是结束一个以硬木为重点的机器学习项目的好时机。

具有 Sigmoid 函数的多层神经网络—菜鸟深度学习 1 和 2 。

由那华康 — 21 又 15 分钟读完。

上次,我们介绍了深度学习领域,并检查了一个简单的神经网络——感知器……或恐龙……好吧,说真的,单层感知器。我们还研究了感知器网络如何处理我们输入的输入数据并返回输出。

带张量流的拾波线发电机

由安德鲁·皮尔诺 — 5 分钟阅读。

几个月前我看到一篇文章,说有人创造了一个搭讪生成器。由于我刚刚开始进入深度学习的世界,我一直在考虑一些有趣的项目,这些项目至少可以在我学习的时候为我提供娱乐。一个可怕的搭讪发电机听起来像魔术。

人们利用机器学习赚钱的 6 种方式

由亚伦爱戴 — 5 分钟阅读。

机器学习绝对是非常酷的,很像虚拟现实或者你键盘上的触控条。但是有用是有很大区别的。对我来说,如果能解决问题、节省时间或金钱,那就是有用的。通常,这三件事是有联系的,并且与一个更宏大的想法有关;投资回报。

关于谨慎选择优化算法

通过米歇尔·格林 — 6 分钟读取。

为什么模拟很重要?首先,我们需要它,因为许多现象(我甚至可以说是所有有趣的现象)无法用一个封闭的数学表达式来封装,而这基本上是你可以用笔和纸或数学软件来完成的。

介绍 PDPbox

通过酱汁猫 — 6 分钟读取。

PDPbox 是用 Python 编写的部分依赖绘图工具箱。目标是可视化某些特征对任何监督学习算法的模型预测的影响。(现在支持所有 scikit-learn 算法)

序列对序列模型:介绍和概念

通过 Manish Chablani — 3 分钟读取。

我们使用嵌入,所以我们必须首先编译一个“词汇表”列表,包含我们希望我们的模型能够使用或读取的所有单词。模型输入必须是包含序列中单词 id 的张量。

生成性对抗网络-历史和概述

由 Kiran Sudhir — 12 分钟阅读。

最近,生成模型越来越受欢迎。特别是由 Ian Goodfellow 等人提出的一个相对较新的模型,称为生成对抗网络或 GANs。

每周精选

原文:https://towardsdatascience.com/weekly-selection-76000754118a?source=collection_archive---------10-----------------------

如何用 TensorFlow 的物体检测器 API 训练自己的物体检测器

由 Dat Tran — 8 分钟读取。

这是关于“用 Tensorflow 和 OpenCV 构建一个实时物体识别应用程序”的后续帖子,在这里我专注于训练我自己的类。

人工智能和机器学习对交易和投资的影响

迈克尔·哈里斯 — 8 分钟阅读。

以下是我几个月前在欧洲做的一次演讲的节选,当时我是一名受邀演讲者,面对的是一群低调但高净值的投资者和交易者。

神经网络和 3D 程序内容生成的未来

通过Sam Snider-hold—8 分钟读取。

作为全球制作机构 MediaMonks 的一名创意技术专家,人们总是问我关于人工智能、人工智能、神经网络等方面的问题。它们是什么?他们能做什么?我们如何使用它们?

我们如何教会一台机器自己编程?—整洁的学习。

通过 Murat Vurucu — 5 分钟读取。

在这篇文章中,我将尝试解释一种叫做通过扩充拓扑进化神经网络(NEAT)的机器学习方法。

甘斯·恩罗斯

通过 Naresh Nagabushan — 10 分钟读取。

想象有一天,我们有了一个神经网络,它可以看电影并生成自己的电影,或者听歌并创作新的电影。

机器学习的基本模型——概述

由 gk_ — 10 分钟读完。

如今软件中最常见的“机器学习”形式是算法,可以从中学习并对数据做出预测。

CM1K 神经网络芯片实验

由诺亚发楞 — 11 分钟阅读。

2017 年 3 月,我获得了麻省理工学院沙盒项目的资助,利用 CM1K 神经网络芯片来开发一款产品。

基于模型强化学习的随机输入贝叶斯神经网络

由何塞·米格尔·埃尔南德斯·洛巴托 — 9 分钟读完。

关键贡献在于我们的模型:具有随机输入的贝叶斯神经网络,其输入层包含输入特征和随机变量,这些变量通过网络向前传播,并在输出层转换为任意噪声信号。

数据科学简化版:假设检验

由帕拉德普梅农 — 7 分钟阅读。

假设检验的应用在数据科学中占主导地位。对其进行简化和解构势在必行。就像犯罪小说故事一样,基于数据的假设检验将我们从一个新奇的建议引向一个有效的命题。

用机器学习预测逻辑的歌词

由汉斯·卡明——9 分钟读完。

从中学开始,当我第一次听到他的歌曲“我所做的一切”时,逻辑就对我的生活产生了显著的影响。

每周精选

原文:https://towardsdatascience.com/weekly-selection-7bbfb26818ac?source=collection_archive---------4-----------------------

深度学习的函数式编程

由 Joyce Xu — 11 min 阅读。

在我开始在 ThinkTopic 的最新工作之前,“函数式编程”和“机器学习”的概念完全属于两个不同的世界。一个是随着世界转向简单性、可组合性和不变性以维护复杂的扩展应用程序,编程范式越来越流行;另一个是教计算机自动完成涂鸦和制作音乐的工具。重叠在哪里?

face 2 face——模仿德国总理面部表情的 Pix2Pix 演示

通过 Dat Tran — 7 分钟读取。

受吉恩·科岗研讨会的启发,我制作了自己的 face2face 演示,可以在 2017 年德国总理发表新年致辞时将我的网络摄像头图像转换成她的图像。它还不完美,因为这个模型还有一个问题,例如,学习德国国旗的位置。

keras:R 中的深度学习

Karlijn Willems — 22 分钟阅读。

正如你现在所知道的,机器学习是计算机科学(CS)中的一个子领域。深度学习是机器学习的一个子领域,它是一套受大脑结构和功能启发的算法,通常被称为人工神经网络(ANN)。

我有数据。我需要洞察力。我从哪里开始?

由罗摩罗摩克里希南 — 5 分钟阅读。

这个问题经常出现。这通常是刚接触数据科学的数据科学家、分析师和管理人员会问的问题。他们的老板面临着压力,要求他们展示花在收集、存储和组织数据的系统上的所有资金的投资回报率(更不用说花在数据科学家身上的钱了)。

《贝叶斯可加回归树》论文摘要

到 Zak Jost — 4 分钟读取。

本文开发了一种贝叶斯方法来集成树。对于一篇学术论文来说,它非常具有可读性,如果你觉得这个主题有趣,我建议你花时间去读一读。

用降维技术降维

由埃利奥尔·科恩 — 13 分钟读完。

在这篇文章中,我将尽我所能去揭开三种降维技术的神秘面纱;主成分分析,t-SNE 和自动编码器。我这样做的主要动机是,这些方法大多被视为黑盒,因此有时会被误用。

每周精选

原文:https://towardsdatascience.com/weekly-selection-814d389de752?source=collection_archive---------7-----------------------

你现在能听到我说话吗?远场语音

由陆杰瑞 — 9 分钟读完。

在我之前的帖子中,我提出了一个案例,成功的人工智能公司将通过围绕数据创造网络效应或开发专有算法,在“计算语音”价值链中开发一条护城河

应用深度学习—第 1 部分:人工神经网络

由 Arden Dertat — 23 分钟阅读。

欢迎来到应用深度学习教程系列。我们将从人工神经网络(ANN)开始,特别是前馈神经网络,对几种深度学习技术进行详细分析。

如何成为数据科学家(第 1/3 部分)

通过实验 — 17 分钟读取。

我是专门从事数据科学领域的招聘人员。产生这个项目的想法是因为我最常被问到的一个问题是:“我如何获得数据科学家的职位?”

人工智能和经济不平等的加剧

由阿比纳夫·苏里 — 16 分钟读出。

几个世纪以来,技术在美国劳动力市场中发挥了关键作用,使工人能够以更高效的方式完成日常任务。

我在 TensorFlow 中学到了什么

通过 Malo Marrec — 7 分钟读取。

当我刚开始在 Good AI Lab 实习时,我的任务是制作一个基本的自动驾驶汽车演示。我既兴奋又沮丧。

最新热门话题:机器学习是种族歧视

由马特布雷姆斯 — 6 分钟阅读。

机器学习和人工智能是两个时髦词,它们在最近几年获得了大量关注。

遗传编程应用于人工智能启发式优化

Ryan Shrott — 6 分钟阅读。

我对遗传编程的兴趣始于 2015 年研究迭代最后通牒游戏。最近,我一直在使用遗传算法来优化工作中风险管理系统的参数。

每周精选

原文:https://towardsdatascience.com/weekly-selection-85905d69f686?source=collection_archive---------7-----------------------

用于物体检测的深度学习:综述

由 Joyce Xu — 11 min 阅读。

随着自动驾驶汽车、智能视频监控、面部检测和各种人数统计应用的兴起,对快速准确的物体检测系统的需求不断增加。

离群点检测技术概述

到塞尔吉奥·桑托约 — 9 分钟读完。

异常值是偏离其他数据观察值的极端值,它们可能表明测量值的可变性、实验误差或新奇性。换句话说,异常值是偏离样本总体模式的观察值。

数据科学评估 ico

由 Debajyoti (Deb)射线 — 4 分钟读取。

我最喜欢的一句话是约翰·梅纳德·凯恩斯(John Maynard Keynes)的名言:“市场保持非理性的时间,可以超过你保持偿付能力的时间”。投资者可以在动荡的加密货币市场中赚(或赔)很多钱,并将他们的成功归功于技能。

Support us on Patreon.

《走向数据科学》是一份独立的出版物。为了保持我们的开放和编辑自由,我们要求我们的支持者承诺一小笔捐款来帮助我们竞选。非常感谢!

面试的 SQL 总结

通过Vijini mallawatarachchi—7 分钟读取。

SQL结构化查询语言是一种用于管理关系数据库管理系统(RDBMS) 中数据的语言。在本文中,我将带您了解每个程序员都应该知道的常用 SQL 命令。

如何编写分布式 TensorFlow 代码—以 TensorPort 为例

由马洛马雷克 — 9 分钟阅读。

当我第一次对这个话题感兴趣时,我对可用的好资源的稀缺感到惊讶。有 TensorFlow 文档和教程,但就系统的复杂性而言,它出奇的薄,我经常发现自己在阅读 TensorFlow 实现本身。

事件驱动架构模式

由阿努拉达·维克拉马拉奇——3 分钟读完。

这是用于开发高度可伸缩系统的最常见的分布式异步架构。该体系结构由单一用途的事件处理组件组成,这些组件监听事件并异步处理它们。

ConvNets 系列。空间变压器网络

由 Kirill Danilyuk — 11 分钟阅读。

空间转换器是不同模块集合中的另一个乐高积木。它通过应用可学习的仿射变换然后进行插值来消除图像的空间不变性。

神经网络:你的大脑像电脑吗?

由 Shamli Prakash — 5 分钟阅读。

大约三年前,当我怀儿子的时候,一个朋友送给我一本丽莎·艾略特的《里面发生了什么事?》。。对我来说,这是一个非常受欢迎的偏离,因为所有的育儿书籍都坚持告诉我,我的生活将变成一个充满不眠之夜、疲惫不堪和普遍缺乏理智的生活地狱。

交易策略开发的验证方法

迈克尔·哈里斯——6 分钟阅读。

有几种方法可以用来验证交易策略,但每种方法都有优点和缺点。在本文中,我们讨论四种验证方法。

人工智能时代的数据质量

由乔治·克拉萨达吉斯 — 9 分钟阅读。

作为数据挖掘决策支持系统的总监,我已经交付了 80 多个数据密集型项目,包括多个行业和知名企业的数据仓库、数据集成、商业智能、内容性能和预测模型。在大多数情况下,数据质量被证明是一个关键的成功因素。

每周精选

原文:https://towardsdatascience.com/weekly-selection-903e70d9006e?source=collection_archive---------4-----------------------

亲爱的读者和投稿人:

请在这里找到我们本周的精选:

一种新型深度神经网络

由尤金尼奥·库勒切罗—7 分钟阅读。

这种新型的神经网络是最初的前馈模型 LeNet5 / AlexNet 及其衍生物的进化,包括比ResNet/Inception更复杂的旁路方案。这些前馈神经网络也被称为编码器、,因为它们将图像压缩和编码成更小的表示向量。

为什么您的车型需要保养

作者马丁·施密茨博士——3 分钟阅读。

人们通常认为给定的模型可以永远投入使用。其实恰恰相反。你需要像维护机器一样维护你的模型。机器学习模型可以超时下车或者坏掉。这对你来说听起来很奇怪,因为它们没有移动的部分?嗯,你可能想仔细看看概念的变化和漂移。

犯错是算法:算法的易错性和经济组织

胡安.马特奥斯-加西亚——17 分钟阅读。

深入挖掘当今一些最大的技术争议,你可能会发现一种算法失灵了:

  • YouTube 广告争议:该算法将一些最大的全球品牌的广告放在带有仇恨言论的视频上
  • 脸书视频争议:该算法在其用户订阅源中发布暴力视频。

数据好奇 2017 年 5 月 8 日:上周的数据故事、数据集和可视化综述

由本杰明库利 — 5 分钟阅读。

每个星期,我都会把在网上找到的大量与数据相关的很酷的东西剪辑、保存并加入书签。以下是 5 月 1 日这一周吸引我眼球的内容。在典型的时事通讯中,我会包含一堆链接供你点击,保存起来以后再看(没关系,我们都这样做)。为了赶上下周的帖子,请在媒体上关注我的最新消息。我也在推特上。

Keras 教程:Python 中的深度学习

由 Karlijn Willems — 25 分钟读取。

现在,你可能已经知道机器学习,这是计算机科学的一个分支,研究可以学习的算法的设计。今天,你们将关注深度学习,这是机器学习的一个子领域,是一套受大脑结构和功能启发的算法。

用 One2Seq 模型像特朗普一样发推特

戴夫·柯里(Dave Currie)——11 分钟阅读。

在本文中,我将向您介绍我的项目的大部分内容,我创建了一个一对一的模型,可以生成类似于 Trump 的推文。实际模型与我在“如何构建您的第一个聊天机器人”文章中构建的模型非常相似。

字加起来!

艾德·怀尔德-詹姆士——4 分钟阅读。

你在学数学的时候,有没有想过加数字以外的东西?如果 1 + 2 = 3,那你为什么不能说“绿色+水果=苹果?”

每周精选

原文:https://towardsdatascience.com/weekly-selection-91038bc59ca0?source=collection_archive---------4-----------------------

深度学习背景去除

由吉迪施佩尔 — 16 分钟读完。

在过去几年的机器学习中,我一直想打造真正的机器学习产品。

Support us on Patreon.

走向数据科学是一份独立的出版物。为了保持我们的开放和编辑自由,我们要求我们的支持者承诺一小笔捐款来帮助我们竞选。非常感谢!

软件架构模式

通过阿努拉达维克拉马拉奇 — 3 分钟读取。

这是大多数企业级应用程序中最常见的架构模式。假设层数为 n ,这也被称为 n 层模式。这是 JAVA EE 应用程序的事实模式。

什么是机器学习?

由俞凤 G — 4 分钟读出。

这个世界充满了数据。很多很多数据。从图片、音乐、文字、电子表格、视频等等。看起来短期内不会减缓。机器学习带来了从所有这些数据中获取意义的希望。

大数据会有偏见,如果我们听之任之

费德里卡·佩尔泽——7 分钟阅读。

如果我每次听到“数据不会说谎”都能得到一便士…

泰勒斯威夫特 vs 人工智能:谁更胜一筹?

由 Shreya Shankar — 3 分钟读完。

我从小就是泰勒·斯威夫特的超级粉丝。我中学时代 iPod Nano 的顶级播放歌曲都是从 讲到现在的

使用预先训练的 word2vec 进行迷因搜索

By Eyyüb Sari — 6 分钟读完。

模因抵得上千言万语。它们是一种文化。我和我的朋友过去常常用 Giphy 在 Messenger 上发送很多这样的消息。

人文专业毕业生要考虑数据科学

由卡森·福特 — 5 分钟阅读。

我的职业轨迹有些不寻常。早在 2009 年,我本科毕业,获得了古典语言学位,不久后又获得了同一领域的硕士学位,之后继续攻读博士学位。

如何通过 5 个步骤开始使用指标

由梅琳达·埃尔姆博格 — 6 分钟阅读。

所以,你已经决定使用度量,祝贺你!你会得到奖励!现在艰苦的工作开始了,你从哪里开始呢?下面的几个步骤应该会对你有所帮助。

每周精选

原文:https://towardsdatascience.com/weekly-selection-9795aa406956?source=collection_archive---------10-----------------------

这是第一次计算机可视化吗?

由冒险中的数据 — 3 分钟读取。

有一段时间,我一直在寻找第一个计算机数据可视化。

做数据科学更快

通过罗布·托马斯 — 3 分钟读取。

人工智能是许多企业的目标。但是,为了做人工智能,一个组织需要机器学习。而且,没有分析,机器学习是不可能的。

使用 Tensorflow 对象检测 API 构建玩具检测器

通过 Priya Dwivedi — 5 分钟阅读。

这个项目是我的热门项目的第二阶段-Google tensor flow 物体检测 API 是实现图像识别最简单的方法吗?

学术生态系统被破坏了,下面是我们应该如何恢复它

由 Sofija Melnikaite — 8 分钟读取。

我在伦敦大学学院(University College London)攻读组织心理学硕士学位时,意识到学术界的生态系统遭到了破坏,而目前我们没有采取多少措施来恢复它。

PyTorch 教程精华

伊拉里昂·赫列斯托夫——7 分钟阅读。

当我刚开始研究 PyTorch 时,几天后我就放弃了。与 TensorFlow 相比,我很难理解这个框架的核心概念。

使用 Scrapy 构建自己的数据集

由迈克尔·加拉尼克 — 7 分钟读完。

当我刚开始在工业界工作时,我很快意识到的一件事是,有时你必须收集、组织和清理你自己的数据。

阿姆斯特丹的环境救星:循环经济

由劳伦麦克森 — 9 分钟阅读。

原材料是一种有限的资源。随着依赖这些资源的行业数量的增加(如智能手机和平板电脑的金属),消费者的数量也在增加。

TED 中反复出现的话题是什么

汉娜·韩嫣 3 分钟阅读。

今天我探索了 TED 演讲的数据、主题和观众。鉴于 TED 上想法的多样性,演讲通常有几个相关的主题和标签。

如今五家企业如何使用人工智能和大数据

由克拉克·博伊德 — 8 分钟读完。

预测分析可以定义为一种数据挖掘形式,它使用统计建模来分析历史模式,然后使用这些模型来预测未来的结果。

每周精选

原文:https://towardsdatascience.com/weekly-selection-a486a5b5e411?source=collection_archive---------13-----------------------

是什么让美国如此伟大?一个科学家的视角

由 dj 帕蒂尔 — 8 分钟阅读。

从我们走上街头为科学游行到现在刚刚一个多星期。这是多么不可思议的一天——因为你参加了 600 多次游行!!!

用 Spark 打造 Spotify 的“发现周刊”

由 Moorissa Tjokro — 6 分钟读取。

今天是我在 NBC Universal 实习的第三天,我受到鼓舞要实现一个新的目标:在今年夏天离开 30 Rock 1221 Campus 之前掌握 Spark。

数据科学与公共政策交汇处的思考

由琼王 — 4 分钟读完。

“有意思……数据科学与公共政策有什么关系?”当我告诉别人我是计算分析和公共政策的硕士生时,这是一个普遍的反应。我仍在努力为这个问题寻找完美、简洁的答案。

大峡谷:玩神,在 Python 里

由赛斯·格林 — 8 分钟读出。

大峡谷是一个小小的模拟生态系统,有三种动物:草、兔子和狼。草长在岩石上,然后被兔子吃掉。兔子反过来被狼吃掉。每过一年,每只动物都会做三件事情中的一件:1)繁殖,如果她有足够的能量 2)吃食物,如果食物在她旁边,增加她的能量 3)移动,如果她旁边没有食物,减少她的能量

关于数据科学,什么样的纸牌屋是正确的(和错误的)

由马特布雷姆斯 — 8 分钟阅读。

鉴于最近发布了两部 《纸牌屋》第五季预告片和即将发布的值得狂欢的网飞系列第五季,这是做两件事的绝佳机会:一是立即重新观看该系列。两人回顾了《纸牌屋》第四季如何使用数据科学家,以及他的工作如何很好地反映了现实世界的数据科学。

机器学习、外星知识和其他不明飞行物

由彼得·斯威尼 — 8 分钟读取。

深度学习会产生我们无法解释的观察结果。这是理论的终结还是深入解释的战斗口号?对大卫·温伯格的回应。

人工智能咨询如何伤害你的数字化转型

马丁·施密茨博士——4 分钟阅读。

你对人工智能如何提升你的业务有很好的想法?你有预算,有支持,只是想让它动起来。现在你聘请外部顾问来做这项工作。他是一个完美的模型建造者——但是尽管他很善良,他却在摧毁你的生意,因为他在做模型并运行!

如何利用聊天机器人、脸书信息和移情作用塑造自己的数字人格

由约翰尼邓恩 — 18 分钟阅读。

假设你遭遇了一场车祸,你的身体变得面目全非。医生给你机会对你的大脑进行数字扫描,让你复制你的意识,然后移植到新的身体里。当然,这里扼杀快乐的词是“复制”,因为现在你只有两个意识,而你是困在残疾身体里的那个。

每周精选—2018 年 4 月 13 日

原文:https://towardsdatascience.com/weekly-selection-apr-13-2018-f79124ffd153?source=collection_archive---------8-----------------------

使用 Tensorflow、OpenCV 和 Docker 进行实时和视频处理对象检测。

作者利奥·博科特 — 7 分钟阅读

在本文中,我将介绍如何在 Docker 容器中使用 Tensorflow 对象检测 API 来执行实时(网络摄像头)和视频后处理。我使用 OpenCV 和 python3 多处理和多线程库。

博弈论导论(上)

通过 Devin Soni — 5 分钟读取

博弈论一般是指对描述逻辑决策者行为的数学模型的研究。它被广泛应用于经济学、政治学、政治学、计算机科学等多个领域,可以用来对很多现实世界的场景进行建模。

选择评估 ML 模型的正确指标—第 1 部分

通过 Alvira Swalin — 9 分钟读取

在后现代主义的世界里,相对主义以其各种各样的伪装,成为最受欢迎和最受唾骂的哲学学说之一。根据 相对主义 不存在普遍的、客观的真理;相反,每个观点都有自己的真理。

使用语言模型和 LSTMs 生成公鸭说唱歌词

鲁斯兰·尼古拉耶夫 — 10 分钟阅读

所有未来人工智能应用的一个主要部分是建立能够从一些数据集学习的网络,然后生成原创内容。这个想法已经被应用到自然语言处理(NLP)中,这就是人工智能社区如何开发出所谓的语言模型

使用 Apache Spark 进行深度学习—第一部分

通过法维奥·巴斯克斯 — 8 分钟阅读

如果您在数据领域工作,您很可能知道 Apache Spark 是什么。如果你没有,那也没关系!我来告诉你是什么。

量子计算和人工智能喜结连理

由杰森·罗尔 — 8 分钟阅读

2018 年,量子技术人员和大胆的开发人员正在使用量子算法来改造人工神经网络优化领域:机器学习和 AI 的蜜蜂膝盖。因此,我们可以满怀信心地说,多亏了量子算法,量子计算和人工智能的未来无可救药地纠缠在一起。

用相似性传播聚类加密货币

Sebastian Quintero — 8 分钟阅读

几个月前,Radicle 的加密团队开始开发一个加密指数,不是作为一种投资工具,而是为了在评估加密经济中新的分散项目时有一个清晰和公正的基准。本文讨论了一些初步的统计工作,帮助我们更好地理解硬币运动。

我分析了我在脸书的数据,这是一个关于害羞、孤独和变化的故事

通过przemysaw Mroczek—7 分钟读取

我想知道脸书对我有什么了解,就像现在其他人一样,但我开始深入挖掘联系数据、广告点击量和我的活动历史之外的信息。第一次,我脑子里所有关于解析我的 facebook 数据的想法看起来都是可行的。

维基数据简介

通过比约恩·哈特曼 — 5 分钟阅读

你听说过维基数据吗?如果不是,你可能会首先想到维基百科小儿科——这没有错。维基数据也是维基媒体基金会的一个项目。

每周精选—2018 年 4 月 20 日

原文:https://towardsdatascience.com/weekly-selection-apr-20-2018-7a75effe7cc?source=collection_archive---------12-----------------------

使用 XGBoost 的可解释机器学习

由斯科特伦德伯格 — 10 分钟阅读

这是一个关于错误解释你的机器学习模型的危险,以及正确解释它的价值的故事。如果您发现集合树模型(如梯度推进机器或随机森林)的稳健准确性很有吸引力,但也需要解释它们,那么我希望您会发现这是有益的。

RNN/LSTM 的陷落

通过Eugenio culrciello—8 分钟阅读

我们爱上了循环神经网络(RNN)、长短期记忆(LSTM)及其所有变体。现在是时候放下它们了!

贝叶斯线性回归简介

由威廉·科尔森 — 10 分钟阅读

贝叶斯与频率主义者的辩论是我觉得观看比参与更有趣的学术辩论之一。我认为学习统计推断的两种方法并在适当的地方应用它们会更有成效,而不是狂热地跳到某一方面。

我们编织了一张多么解开的网:VAEs 中的表征学习。1)

由科迪·玛丽·怀尔德 — 15 分钟阅读

这是一个举世公认的真理:没有标签的数据一定需要无监督学习。除了油嘴滑舌,人们普遍认为监督学习有着有意义的缺点:标签成本高、噪音大,并且将你的问题引向实现某种程度上人为的目标,而不是简单地以更中立的方式学习数据的有意义轮廓。

炒作&神经网络的缺点

由尼克拉斯·东格斯 — 8 分钟阅读

深度学习目前受到了广泛的宣传。人们希望在任何地方都使用神经网络,但它们总是正确的选择吗?这将在下面的章节中讨论,以及为什么深度学习现在如此受欢迎。

数据科学家面试失败的 4 种方式

通过 Ganes Kesari B — 6 分钟读取

“数据科学家”可能是本世纪最性感的工作。但是雇佣一个可不是那么回事。事实上,这对公司来说是极其痛苦的。

我从物理学到数据科学的旅程

由阿德蒙德·李 — 10 分钟阅读

随着我对数据科学领域的热情不断增长,我每天都在学习新知识。作为一名即将毕业的物理系学生,要追求不同的职业轨迹,必须要回答【为什么】【如何】个问题。

Python for Finance:股票投资组合分析

凯文·博勒——26 分钟阅读

我最近的两篇博文是关于用 Python 扩展分析洞察力的;此处可找到零件 1,此处可找到零件 2。我写这些已经有几个月了,主要是因为去年 11 月我把家搬到了西雅图,加入了亚马逊;我花了大部分时间在我的主要项目上,确定我们的全球推广计划和相关的商业智能路线图。

新泽西州运输系统故障的 5 个阶段

通过普拉纳夫巴达米 — 8 分钟阅读

2018 年 3 月 2 日星期五,纽约市是三月份横扫该地区的四个东北风中的第一个的末端。从前一天晚上到下午早些时候,寒冷的天气一直在持续下降,并伴有上午晚些时候的阵风。

通过贡献开源成为更好的数据科学家

到劳伦·奥尔德加 — 7 分钟读完

让我们面对现实:在一场 Kaggle 竞赛中获得高分并不需要坚持 PEP8 或者其他任何软件开发最佳实践。然而,代码是我们的手艺,在你职业生涯的某个时刻,你可能想要或需要学习编写生产级代码。

每周精选—2018 年 4 月 27 日

原文:https://towardsdatascience.com/weekly-selection-apr-27-2018-80e65734fd9d?source=collection_archive---------9-----------------------

数据可视化颜色的 Viz 调色板

由以利亚米克斯 — 9 分钟阅读

本月早些时候,Susie Lu 和我发布了 Viz Palette ,这是一款帮助数据可视化设计师评估和改进调色板的工具。它显示了在各种数据可视化类型中使用的调色板,还使用技术来测量各个颜色,这些技术试图识别颜色在视觉上何时过于相似,以及颜色名称何时过于相似。

“WTH,神经网络会学习吗?”—新人的困境

Nityesh Agarwal — 13 分钟阅读

神经网络学习内容的简单、清晰的鸟瞰图——它们学习“越来越复杂的概念”。

浏览器中的深度学习:简明指南

由麦克施 — 6 分钟读完

Tensorflow.js 是一个新的深度学习库,可以在你的浏览器中运行。作为一名机器学习和 Javascript 爱好者,我在 Tensorflow.js 发布后立即开始使用它进行对象检测库的工作。

微型自主车辆中深度学习特征地图的可视化

尼尔森·费尔南德斯——4 分钟阅读

我们开始制造 Axionaut 已经有几个月了,这是一辆迷你自主无线电遥控(RC)汽车,并在巴黎的一些比赛中驾驶它参赛。到目前为止一切顺利,我们设法获得了好职位。

YOLO v3 有什么新功能?

由 Ayoosh Kathuria — 9 分钟读取

你只看一次,或 YOLO,是一个更快的对象检测算法。虽然它不再是最准确的对象检测算法,但当您需要实时检测时,它是一个非常好的选择,不会损失太多的准确性。

Python 中的贝叶斯线性回归:利用机器学习预测学生成绩

由威廉·科尔森 — 12 分钟阅读

即使在与贝叶斯线性建模理论斗争了几个星期并写了一篇关于它的博客文章之后,我也不能说我完全理解了这个概念。因此,抱着边做边学是最有效的技术的心态,我开始做一个数据科学项目,使用贝叶斯线性回归作为我选择的机器学习模型。

基于人工智能的运营:业务和技术经理的学习

由伊恩肖 — 12 分钟读完

在这篇由两部分组成的文章中,我想分享我在将强化学习(RL)应用于大规模城市运营问题上的工作和思考。

使用自动编码器驱动的视听克隆重新定义沉浸式游戏

通过 Chintan Trivedi — 5 分钟读取

享受电脑游戏的一个重要方面是成为游戏及其故事线的一部分的感觉。沉浸感对激发情绪非常重要,越是感受到这些情绪,玩游戏就越有乐趣。

迁移学习

由 Niklas Donges — 8 分钟阅读

迁移学习是在新问题上重新使用预先训练好的模型。它目前在深度学习领域非常受欢迎,因为它使你能够用相对较少的数据来训练深度神经网络。

深度学习遇上物理学:受限玻尔兹曼机器第一部分

作者阿尔特姆·奥珀曼 — 8 分钟阅读

本教程是关于受限玻尔兹曼机器的两部分系列的第一部分,这是一种用于协同过滤的强大的深度学习架构。在这一部分,我将介绍受限玻尔兹曼机背后的理论。

每周选择—2018 年 4 月 6 日

原文:https://towardsdatascience.com/weekly-selection-apr-6-2018-586b54f74300?source=collection_archive---------10-----------------------

超参数在起作用!第一部分—激活功能

由丹尼尔·戈多伊 — 11 分钟阅读

深度学习是关于超参数!也许这是一种夸张,但对不同超参数对训练深度神经网络的影响有一个良好的理解肯定会让你的生活更容易。

半监督学习和 GANs

作者:Raghav Mehta — 5 分钟阅读

大多数深度学习分类器需要大量的标记样本才能很好地泛化,但获得这样的数据是一个昂贵而困难的过程。为了解决这个限制提出了半监督学习,这是一类利用少量已标记数据和大量未标记数据的技术。

用 10 行代码拯救生命:用 XGBoost 检测帕金森症

通过 Priansh Shah — 3 分钟阅读

因此,您已经涉足了数据科学,听说过“XGBoost”这个术语,但不知道它是什么。我非常喜欢通过来学习,所以让我们尝试使用 XGBoost 来解决现实生活中的问题:诊断帕金森氏症。

可视化贝多芬的全部作品,第一部分:从 IMSLP 中抓取和清理数据

由迈克尔张 — 10 分钟阅读

这篇文章是我写的一个简短教程系列的第一部分,记录我在一个个人兼职项目中的进展,我希望在这个项目中分析和可视化贝多芬的完整作品。这个项目的目标是探索音乐和情感之间的联系,同时也尝试不同的可视化音乐数据的方法,特别是关于颜色。

使用 Python 中的散景进行数据可视化,第三部分:制作完整的仪表板

由威廉·科尔森 — 10 分钟阅读

有时我会学习一种数据科学技术来解决一个特定的问题。其他时候,就像使用散景一样,我尝试一种新工具,因为我在 Twitter 上看到一些很酷的项目,然后想:“看起来很棒。

如何用 Keras 构建神经网络

由尼克拉斯·东格斯 — 9 分钟阅读

Keras 是目前最受欢迎的深度学习库之一,为人工智能的商品化做出了巨大贡献。它使用简单,只需几行代码就能让你建立强大的神经网络。

变型自动编码器作为双人游戏——第一部分

由 Max Frenzel — 17 分钟读取

人工智能领域,特别是深度学习的子领域,在过去几年里随着进步一直在爆炸式增长。一种特殊的方法,【生成模型】已经对这种进步做出了很大贡献。

论文复制:使用“MAML”和“爬行动物”进行深度元学习

作者:阿德里安·卢卡斯·埃科菲——8 分钟阅读

在这篇文章中,我复制了最近在元学习领域的两篇论文: MAML 和类似的爬行动物。完整的笔记本可以在这里找到。

每周精选—2018 年 8 月 10 日

原文:https://towardsdatascience.com/weekly-selection-aug-10-2018-eb5062f68b35?source=collection_archive---------10-----------------------

数据科学的基本数学——“为什么”和“如何”

由 Tirthajyoti Sarkar — 10 分钟阅读

数学是任何当代科学学科的基础。难怪几乎所有现代数据科学的技术(包括所有的机器学习)都有某种深刻的数学基础。

为什么自动化特征工程将改变你进行机器学习的方式

到威廉·科尔森 — 11 分钟阅读

自动化特征工程将节省您的时间,构建更好的预测模型,创建有意义的特征,并防止数据泄漏

德雷克——使用自然语言处理理解他的歌词

由 Brandon Punturo — 8 分钟阅读

每隔几年,就会有一位艺术家席卷全球。在过去,这是甲壳虫乐队和迈克尔·杰克逊等人的作品。这些艺术家天生就有能力用他们的创作天才影响数百万人。

使用 Python 和立交桥 API 从 OpenStreetMap 加载数据

由尼古拉·亚纳基耶夫 — 9 分钟阅读

你有没有想过德国大部分 Biergarten 在哪里,或者瑞士隐藏着多少家银行?OpenStreetMap 是一个伟大的开源世界地图,它可以让我们对这些和类似的问题有所了解。隐藏了大量的数据,充满了有用的标签和地理信息,但是我们如何得到这些数据呢?

针对酒店评论的网页抓取猫途鹰、文本挖掘和情感分析

由苏珊李 — 10 分钟读完

一项又一项研究表明,猫途鹰在旅行者的决策过程中变得极其重要。然而,理解猫途鹰泡沫评分与数以千计的猫途鹰评论文本之间的细微差别可能具有挑战性。

自然语言处理简介

由 Niklas Donges — 11 分钟读取

自然语言处理(NLP)是计算机科学和人工智能的一个领域,它涉及计算机和人类之间用自然语言进行的交互。NLP 的最终目标是让计算机像我们一样理解语言。

使用 pandas 和 networkx 开始使用 Python 进行图形分析

通过费利克斯回复 — 5 分钟读取

图表分析并不是数据科学的一个新分支,但也不是数据科学家如今常用的“常用”方法。然而,图表可以做一些疯狂的事情。经典的使用案例包括欺诈检测、推荐或社交网络分析。

《数据科学 A-Z 从零到 Kaggle 内核大师》

由莱昂纳多·费雷拉 — 13 分钟阅读

我来自巴西,世界各地的许多人都与我联系,询问在数据科学领域学习或获得空缺职位的技巧,所以我决定写这篇文章,让内容更加“结构化”,并以更好的方式为刚刚开始这一旅程的人做出贡献。

每周精选—2018 年 8 月 17 日

原文:https://towardsdatascience.com/weekly-selection-aug-17-2018-4ad31bfe7c37?source=collection_archive---------10-----------------------

Photo by Michał Parzuchowski on Unsplash

数据科学项目最重要的部分是写博客

作者:威廉·科尔森 — 8 分钟阅读

在将最终代码上传到 GitHub 或提交作业后,称数据科学项目已经完成是一种诱惑。然而,如果你就此打住,你就错过了这个过程中最关键的一步:写并分享一篇关于你的项目的文章。

用 Python 和 Tableau 进行预测

到格雷格·拉弗蒂 — 7 分钟阅读

在这篇文章中,我将展示如何在 Tableau 中使用 Python 代码来构建一个实现时间序列预测的交互式仪表板。如果你只是想先玩一下仪表盘,探索一下 SARIMAX 算法,可以在这里下载完整的 python 实现的仪表盘或者在 Tableau Public 上找到这个稍微简单的版本

更好的协作数据科学

通过梅根·里斯达尔 — 8 分钟阅读

上周六,我在南加州最大的数据会议 Data Con LA 2018 (前大数据日 LA)上做了主题演讲。这是我的博客形式的演讲。

不要犯这个机器学习的大错误:研究 vs 应用

乔治·赛义夫——4 分钟阅读

如今,每个人都在研究机器学习。对于许多企业来说,这绝对是一个值得追求的伟大方向,因为它让他们能够以一种相当快速和简单的方式交付巨大的价值。对机器学习技能的需求空前高涨。

像老板一样在 Python 中微调 XGBoost

由费利克斯回复 — 4 分钟读取

XGBoost(或 eXtemeGradientBoosting)不会再被引入,在太多的数据科学竞赛中被证明是相关的,如果你刚刚开始使用它,它仍然是一个很难微调的模型。

机器学习方法——构建酒店推荐引擎

由苏珊李 — 5 分钟读完

所有在线旅行社都在争先恐后地满足亚马逊和网飞设定的人工智能驱动的个性化标准。此外,在线旅游世界已经成为一个竞争激烈的空间,品牌试图通过推荐、比较、匹配和分享来吸引我们的注意力(和钱包)。

利用网络摄像头和深度学习创建定制的堡垒之夜舞蹈

通过 Chintan Trivedi — 4 分钟读取

如果你知道游戏堡垒之夜,你可能也知道围绕着游戏中的庆祝/表情/舞蹈的狂热。游戏玩家已经花费了数百万美元通过应用内购买来购买舞蹈动作,这使得一些简单而愚蠢的事情成为游戏开发者的一大收入来源。

不要在卷积网络中使用丢包

由哈里森·詹斯马 — 4 分钟阅读

我注意到有大量的资源可以学习深度学习的内容和原因。不幸的是,到了制作模型的时候,他们很少有资源解释何时以及如何制作。

App 描述告诉我们什么:Python 中的文本数据预处理

由芬乔 — 9 分钟读完

继续讨论数据清理和探索的主题,许多有效的 NLP 分析都依赖于文本数据的预处理。因此,我决定对来自 Apple Appstore 描述的一些文本数据和结果文本的 K-Means 聚类进行逐步预处理。

每周精选—2018 年 8 月 24 日

原文:https://towardsdatascience.com/weekly-selection-aug-24-2018-c36c60fdca3d?source=collection_archive---------19-----------------------

深入探究深层网络背后的数学

由 Piotr Skalski — 9 分钟阅读
如今,有了许多高级的、专门的库和框架,如 Keras、TensorFlow 或 PyTorch,我们不需要经常担心我们的权重矩阵的大小或记住我们决定使用的激活函数的导数公式。

更好理解深度学习的最新进展

由亚瑟·佩萨——9 分钟阅读

这种对更好地理解深度学习的呼吁是阿里·拉希米在 2017 年 12 月 NIPS 举行的时间考验奖颁奖典礼的核心。通过比较深度学习和炼金术,阿里的目标不是解散整个领域,而是“开启对话”。

使用 Kaggle 开始(并指导)您的 ML/数据科学之旅——为什么以及如何进行

通过尼提什·阿加瓦尔 — 13 分钟读取

之前,我并不确定。我会说类似这样的话:先学这门课,或者先读这篇教程,或者先学 Python(只是我做过的事情)。但是现在,随着我在这个领域越来越深入,我开始意识到我所采取的方法的缺点。

Python 中的“数据科学”机器学习项目演练

由威廉·科尔森 — 17 分钟阅读

在我们这个数据驱动的世界里,数据科学是一个非常强大的工具。你可以说我是理想主义者,但是我相信这个工具不应该仅仅用于让人们点击广告或者花更多的时间在社交媒体上。

关于 AutoML 和神经架构搜索你需要知道的一切

由乔治·赛义夫 — 7 分钟阅读

AutoML 和神经架构搜索(NAS)是深度学习城堡的新国王。它们是在不做太多工作的情况下,为您的机器学习任务获得巨大准确性的快速而肮脏的方法。简单有效;这就是我们想要的人工智能!

ICML 2018上的生成对抗网络和变型自动编码器

到 Agrin Hilmkil — 11 分钟读取

生成模型经典地用数据(x)和标签(y)描述联合分布 p(x,y)的模型。然而,在这种情况下,生成模型将被理解为具有从数据 X 的(近似)分布中取样以产生新样本 x ~ X 的机制

使用双向生成对抗网络估算市场风险管理的风险值

由哈马德·沙阿 — 18 分钟读完

我们将探索双向生成对抗网络(甘比)在市场风险管理中的应用:评估投资组合风险度量,如风险价值(VaR)。

测量模型优度

由阿贾伊坦皮 — 9 分钟阅读

数据和人工智能正在改变世界各地的商业,从金融、制造和零售到医疗保健、电信和教育。这种转变的核心是将原始数据转化为信息和有用的、可操作的见解的能力。

每周精选—2018 年 8 月 3 日

原文:https://towardsdatascience.com/weekly-selection-aug-3-2018-9512b40af37f?source=collection_archive---------13-----------------------

AutoKeras:谷歌汽车的黑仔

由乔治·赛义夫 — 4 分钟阅读

谷歌人工智能终于发布了 AutoML 的测试版,有人说这项服务将完全改变我们进行深度学习的方式。谷歌的 AutoML 是一个新的机器学习工具云软件套件。它基于谷歌在图像识别领域的最新研究,名为神经架构搜索 (NAS)。

启发您下一个数据科学项目的 5 种资源

由康纳·杜威 — 6 分钟读完

你有没有过想开始一个新项目却又决定不了要做什么的经历?首先,你花几个小时集思广益。然后几天。在你意识到之前,几个星期过去了,没有任何新的发货。

用 Flask 部署 Keras 深度学习模型

通过本·韦伯 — 7 分钟读取

这篇文章演示了如何使用用 Keras 构建的深度学习模型来设置端点以服务于预测。它首先介绍了一个使用 Flask 通过 Python 设置端点的例子,然后展示了在使用 Flask 为预测构建 Keras 端点时需要解决的一些问题。

图形&路径:PageRank

由大卫·派恩斯 — 6 分钟读完

想象一下,有人正在搜索 web️以了解他们最喜爱的名人。关于这个人有大量的信息;Twtr 上的推文,Amzn 上的大事记,Medm 上的文章,Fb 上的粉丝页面,甚至 Mspc 账户。

用 D3.js 进行交互式数据可视化

由迪潘然(DJ)萨卡 — 7 分钟阅读

交互式可视化可以给平淡乏味的数据集增添令人印象深刻的魅力。交互数据的主要特征在于它作为一个应用程序独立使用。它允许用户选择特定的数据点,以他们选择的方式将故事可视化。

在 AWS SageMaker 上酝酿定制 ML 模型

By Thushan Ganegedara — 12 分钟阅读

最近爱上了 SageMaker。仅仅是因为它太方便了!我真的很喜欢他们的方法,向客户隐藏所有的基础设施需求,让他们专注于解决方案中更重要的 ML 方面。

用不确定性解释你的模型

通过条内 Naor — 7 分钟读取

随着深度神经网络(DNN)变得更加强大,它们的复杂性也在增加。这种复杂性带来了新的挑战,包括模型的可解释性。

图形和 ML:多元线性回归

由劳伦·申 — 8 分钟阅读

上次,我在 Neo4j 浏览器中使用简单的线性回归创建了一个德克萨斯州奥斯汀的短期租赁模型。在这篇文章中,我演示了如何通过一些小的调整,同一套用户定义的过程可以创建一个带有多个独立变量的线性回归模型。这被称为多元线性回归。

每周精选—2018 年 8 月 31 日

原文:https://towardsdatascience.com/weekly-selection-aug-31-2018-f1f91a026dd7?source=collection_archive---------10-----------------------

如何在现实世界中构建有价值的数据科学项目

由 Jonny Brooks-Bartlett — 15 分钟阅读。

大多数关于如何“完成”数据科学任务的文章通常讨论如何编写算法来解决问题。例如,如何分类文本文档或预测财务数据。如果属于数据科学家的职权范围,学习如何做这些事情对他们来说可能是至关重要的知识。

卷积神经网络:生物启发模型

由詹姆斯·勒 — 14 分钟阅读

令人难以置信的是,人类的大脑是如何展开一幅仅由 R、G、B 值组成的图像的。电脑怎么样?我们如何开始编写一个算法,像我上面做的那样对场景进行推理?我们怎样才能得到正确的数据来支持我们的推论呢?

制作音乐:当简单概率胜过深度学习

由 Haebichan Jung — 9 分钟读完

我是如何发现一个利用深度学习做音乐的问题,并通过创建自己的原创模型来解决的。

如何使用 Dask 数据帧在 Python 中运行并行数据分析

通过卢西亚诺·斯特里卡 — 5 分钟读取

如果你从事大数据工作,你知道如果你使用熊猫,你可能会为一个系列的简单平均值等待整整一分钟,我们甚至不要调用应用。这只是几百万行的数据!当你达到数十亿时,你最好开始使用 Spark 或其他东西。

用 Scikit-Learn 进行命名实体识别和分类

由苏珊李 — 7 分钟读完

命名实体识别和分类 (NERC)是从非结构化文本中识别信息单元的过程,如名称,包括人、组织和位置名称,以及数字表达式,包括时间、日期、金钱和百分比表达式。

营销分析专家的一天

到克里斯·道塞特 — 7 分钟读完

营销分析是一个多方面的,但往往被误解的做法。这里有一个例子来突出这个角色的多样性。

改变工程师的思维模式:从如何到为什么

杰西·史密斯 — 7 分钟阅读

在一个数据泛滥、信息泛滥的世界里,我们可以在家里舒适地从看不见的云上发现外面的天气;是时候后退一步,问一些重要的问题了。

教程:双深度 Q-学习与决斗网络架构

由法比奥·m·格雷茨 — 9 分钟阅读

如果你和我一样对深度 Q 学习着迷,但从来没有时间理解或实现它,这是给你的:在一个 Jupyter 笔记本中,我将 1)简要解释强化学习如何不同于监督学习,2)讨论深度 Q 网络(DQN)背后的理论,告诉你在哪里可以找到论文中相应的解释及其含义,以及 3)如何在 python 和 tensorflow 中实现使其工作所需的组件。

使用 Youtube V3 API、Mask-RCNN 和 Google Vision API 进行自动语音识别数据收集

By 黃功詳 Steeve Huang — 8 min read

随着机器学习特别是深度学习的快速发展,语音识别得到了显著的提高。这种技术依赖于大量高质量的数据。然而,为非流行语言建立的模型比那些流行语言(如英语)的模型表现差。

如何构建非地理地图#1

作者范妮·卡萨皮安 — 8 分钟阅读

要以类似地图的方式可视化您的非地理数据,您需要将每个元素(或地图上的点)视为由某一组要素(或属性)定义的。

每周精选

原文:https://towardsdatascience.com/weekly-selection-c7a084d009ef?source=collection_archive---------9-----------------------

亲爱的读者和投稿人:

本周我们为你准备了令人兴奋的新品。我们希望你喜欢阅读这些文章。如果您有任何问题,请发布到我们的 Slack 频道。

人工智能帮助医学研究人员发现严重哮喘的基因特征

由 Devi Ramanan — 6 分钟阅读。

一个欧洲医学研究联盟使用一种人工智能形式发现了一个 1693 年的基因签名,以有意义地区分严重哮喘和非哮喘以及轻中度哮喘。通过对哮喘人群进行细分,研究人员希望为对治疗有反应的患者开发有针对性的治疗方法。

彼得·沃斯访谈

由 gk_ — 11 分钟读取。

人工通用智能 (AGI)是一个新兴领域,旨在建造“思考机器”;即智能堪比人脑的通用系统。

市级项目

由罗曼·库丘科夫 — 5 分钟读完。

人工智能技术现在已经渗透到经济的许多领域,建筑、设计和城市化也不例外。它们有巨大的潜力,直到完全修改已建立的方法和实践。

主成分分析的一站式商店

通过哑光 Brems — 15 分钟读取。

主成分分析(PCA)是统计学和数据科学领域中需要理解的一项重要技术……但是在整理课程时,我觉得在线资源太专业,没有完全解决我的问题,并且/或者提供了相互矛盾的信息。

探索 2016 年头条

由限定 — 4 分钟读取。

2016 年是美国头条新闻的大年。至少在地面上是这样感觉的。我们认为最好后退一大步,看看一整年的头条新闻会出现什么样的模式。

每周精选

原文:https://towardsdatascience.com/weekly-selection-c96dd85cfe63?source=collection_archive---------8-----------------------

这是第一次计算机可视化吗?

由冒险中的数据 — 3 分钟读取。

有一段时间,我一直在寻找第一个计算机数据可视化。

做数据科学更快

通过罗布·托马斯 — 3 分钟读取。

人工智能是许多企业的目标。但是,为了做人工智能,一个组织需要机器学习。而且,没有分析,机器学习是不可能的。

2017 年大数据趋势点燃

通过 Mac Fowler — 4 分钟读取。

我获得了参加密歇根州大急流城大数据点燃 2017 大会的绝佳机会。为期三天的会议以“指数智能时代”为主题,并为我提供了一个机会,让我后退一步,更广泛地了解大数据和分析市场。

使用 GANs 进行数据集扩充

佩德罗·费雷拉 — 13 分钟

生成对抗网络(GANs)已经席卷了机器学习社区。它们优美的理论基础和在计算机视觉领域不断改进的重大成果,使它们成为近年来机器学习领域最活跃的研究课题之一。

机器学习的用户体验

Maksym Zavershynskyi — 5 分钟阅读。

众所周知,机器学习在可解释性方面存在困难,或者更确切地说,是缺乏可解释性。如果您的用户必须处理数字输出,就像在销售、交易或市场营销中使用的系统一样,这是一个问题。

神经网络的软介绍

由舒邦德赛 — 9 分钟读完。

在过去的几年里,神经网络已经成为机器学习的同义词。最近,我们已经能够制造神经网络,它可以产生栩栩如生的面孔,转移动态艺术风格,甚至可以按年“老化”一个人的照片。

云端训练模型的大数据

由俞凤 G — 3 min 读出。

当我们的训练数据太大而不适合我们的机器时,或者训练模型开始需要几个小时时,会发生什么?我们当然要上云!

如何选择数据科学工作?

由基里尔·叶列缅科 — 8 分钟读完。

数据科学似乎无愧于 21 世纪最性感工作的称号。“但是由于这个领域的所有这些骚动,许多人想知道数据科学职业的趋势是否仅仅是一种时尚。为什么要拿你的教育、职业和未来做赌注呢?

应用深度学习——第三部分:自动编码器

通过 Arden Dertat — 10 分钟读取。

欢迎来到应用深度学习系列的第 2 部分。第 1 部分是对人工神经网络的实践介绍,包括理论和应用,有很多代码示例和可视化。

人工智能垂直领域(二):金融科技

由弗朗西斯科·科里亚——10 分钟阅读。

从历史上看,金融业是你可能会想到的最抵制变革的行业之一。

每周精选

原文:https://towardsdatascience.com/weekly-selection-ca1014d538e6?source=collection_archive---------12-----------------------

我多大了?

由保罗-路易·普罗夫 — 7 分钟阅读。

你能猜到这个膝盖核磁共振后面的人有多大年纪吗?我给你一个提示。这是一个 14 到 21 岁的德国男性的录音。不知道吗?我喜欢想象这是神经网络在被训练之前看待世界的方式。它完全没有线索。所以,让我来训练你。

非 NLP 数据和研究人员的词向量

通过康纳麦当劳 — 8 分钟阅读。

单词向量代表了在提高我们分析单词、句子和文档之间关系的能力方面的一个重大飞跃。在这样做的过程中,他们通过向机器提供比以前可能使用的传统单词表示更多的单词信息来推进技术。

8 年过去了,阿姆斯特丹仍然是智能城市的领头羊

劳伦·麦克弗森 — 7 分钟阅读。

阿姆斯特丹有 1281 座桥。对于我们大多数人来说,这似乎是一个相当容易被抛弃的事实,但对于阿姆斯特丹智能城市倡议来说,这是一个巨大的飞跃。因为直到今年,我们都不知道有多少座桥。

激活功能:神经网络

由 SAGAR SHARMA — 5 分钟读取。

它只是你加到任何神经网络输出端的一个东西(节点)。也被称为传递函数。它也可以连接在两个神经网络之间。

应用深度学习——第二部分:真实世界案例研究

由阿登·德塔特 — 17 分钟读出。

欢迎来到应用深度学习系列的第 2 部分。第 1 部分是对人工神经网络的实际介绍,包括理论和应用,有很多代码示例和可视化。现在是最酷的部分,深度学习对真实世界数据集的端到端应用。

在不平衡数据集上评估一个模型应该使用什么指标?

由 Shir Meir Lador — 9 分钟阅读。

我一直认为度量的主题有点令人困惑,特别是当数据集不平衡时(这在我们的常见问题中经常发生)。

概括 10 种常见的软件架构模式

通过Vijini mallawatarachchi—5 分钟读取。

想知道大型企业级系统是如何设计的吗?在主要的软件开发开始之前,我们必须选择一个合适的架构,它将为我们提供期望的功能和质量属性。

人工智能规划历史发展

Ryan Shrott — 12 分钟阅读。

在本文中,我将考察人工智能规划研究领域的三大发展。对于每个开发,我将提供原始论文的简短摘要以及适当的例子来演示几个用例。

Support us on Patreon.

《走向数据科学》是一份独立的出版物。为了保持我们的开放和编辑自由,我们要求我们的支持者承诺一小笔捐款来帮助我们竞选。非常感谢!

每周精选

原文:https://towardsdatascience.com/weekly-selection-cbdd8305845b?source=collection_archive---------5-----------------------

脸书·艾发明新语言背后的真相

由罗曼·库塞拉 — 7 分钟阅读。

有太多的文章发表说脸书在他们开发了自己的语言后关闭了他们的机器人。媒体就是喜欢这些点击诱饵标题。

深度网络架构的直观指南

由 Joyce Xu — 9 分钟读完。

在过去的几年里,计算机视觉深度学习的许多进展都可以归结为少数几个神经网络架构。抛开所有的数学、代码和实现细节,我想探索一个简单的问题:这些模型如何以及为什么工作?

参加 Deeplearning.ai 课程后的感想

通过 Arvind N — 8 分钟读取。

在全职工作和家里蹒跚学步的孩子之间,我用业余时间学习认知科学和人工智能的思想。偶尔会出现一篇很棒的论文/视频/课程,你会立刻被吸引住。

言情小说,由人工智能生成

Elle O'Brien — 6 分钟阅读。

我一直对爱情小说很着迷——药店里卖几美元的那种,通常封面上有一些迷人的、灯光柔和的情侣。

深度学习周记:测试自动驾驶(虚拟)

由斐参孙 — 5 分钟阅读。

本周我将重点讨论深度学习如何用于自动驾驶汽车。在这个领域有很多机器学习应用,但我将聚焦于一项非常酷的技术:虚拟测试。

总结灾难中的推文

由 Gabriel Tseng — 9 分钟阅读。

4 月 25 日,就在中午之前,尼泊尔经历了一场震级为 T4 7.8 级的地震。地震席卷了加德满都山谷,一系列余震夷平了整个村庄。

开放式学习依赖于非物理现象

菲尔·马奇威克 — 7 分钟阅读。

在自发表'以来的短暂时间里,机器学习是开放式的吗?’,我一直在想,机器学习技术很可能能够进行开放式学习。

每周精选—2017 年 12 月 1 日

原文:https://towardsdatascience.com/weekly-selection-dec-1-2017-9a024c0580d3?source=collection_archive---------2-----------------------

聚类无 ML 的空间数据,寻找同质区域

作者比约恩·哈特曼 — 4 分钟阅读

就在最近,有人问我如何对一些数据进行聚类。通常,这没什么大不了的,因为有很多算法致力于此。但是这个数据集是不同的。

社交网络数据:Twitter vs FB vs Google vs 其他所有人

通过吉米·蒂迪 — 7 分钟阅读

这是关于技术如何塑造我们的社会联系的三篇系列文章中的第三篇。第一篇文章试图让你相信我们的在线和离线社交网络非常重要。

如何改进我的 ML 算法?吴恩达的经验教训— I

通过 Kritika Jalan — 5 分钟读取

你已经花了几周的时间来构建你的机器学习系统,但你对它的性能并不满意。你想了多种方法来提高你的算法的性能,即。

数据科学的 Docker

通过 Sachin Abeywardana — 3 分钟读取

Docker 是一个为软件工程师简化安装过程的工具。来自统计背景的我过去很少关心如何安装软件,偶尔会花几天时间来解决系统配置问题。

如何成为一名数据科学家(第二部分)

伊恩·布卢门菲尔德——11 分钟阅读

在本系列的第 1 部分中,我确定了三个我认为是数据科学家基本技能的领域:SQL、随机变量/条件概率和 R 或 Python 中的 ML 基础。了解这些领域可以让你在谈判桌上获得一席之地,并让你处于可以开始增值的位置。

我们如何‘训练’神经网络?

由维塔利·布沙耶夫——15 分钟阅读

这是我计划的关于用于机器学习特别是神经网络“训练”的优化算法系列的第 1 部分。在这篇文章中,我将介绍梯度下降(GD)及其小变化。

3 个吸引读者注意力的专家数据可视化技巧

由 Payman Taei — 8 分钟阅读。

不管你是谁,也不管你是否意识到了这一点,每当你看到一个视觉场景——无论是看网页、走进房间还是打开电视,你都会在十分之一秒内开始理解这个视觉体验。

结构化深度学习

Kerem Turgutlu(疯狂科学家) — 10 分钟阅读

在机器学习/深度学习或任何类型的预测建模任务中,数据先于算法/方法。这就是为什么机器学习在某些任务之前需要大量的特征工程,如图像分类、NLP 和许多其他“不寻常”的数据,这些数据不能直接输入到逻辑回归或随机森林模型中。

国家财富或教育支出与其学生在 PISA 中的表现之间有关系吗?

Marta Klajnerok — 13 分钟阅读

公立学校在古代就已为人所知,许多社会发展了多年,最终在 19 世纪形成了强制性的公共机构。世界各地的社区都很重视教育年轻一代,为他们提供更好的未来,因为教育不仅对相关的个人,而且对整个社会都有很多好处。

每周精选—2018 年 12 月 14 日

原文:https://towardsdatascience.com/weekly-selection-dec-14-2018-f1d882844060?source=collection_archive---------28-----------------------

第三波数据可视化

由以利亚米克斯 — 12 分钟阅读

想象一下 30 年前做数据可视化是什么样子。现在是 1988 年,您正在使用 Excel 2.0 制作简单的图表,如饼图和折线图,或者使用 SPSS 之类的工具进行更复杂的探索,使用 Arc/Info 进行地理空间数据可视化。

如何在计算机视觉中做一切事情

到乔治·赛义夫 — 7 分钟读取

想做计算机视觉?深度学习是当今的趋势。大规模数据集加上深度卷积神经网络(CNN)的代表能力有助于建立超精确和稳健的模型。只剩下一个挑战:如何设计你的模型。

动手机器学习模型解读

由迪潘詹(DJ)萨卡尔 — 26 分钟阅读

鉴于人工智能在行业中的快速采用,解释机器学习模型不再是一种奢侈品,而是一种必需品。这篇文章是我的“可解释的人工智能(XAI)”系列文章的延续。

用 Python 进行音乐流派分类

按 Parul Pandey — 9 分钟读取

现在的公司使用音乐分类,要么是为了能够向他们的客户推荐(如 Spotify、Soundcloud),要么只是作为一种产品(如 Shazam)。确定音乐流派是朝着这个方向迈出的第一步。

数据科学不仅仅是。适合()。预测()

由约纳坦·哈达尔 — 7 分钟阅读

两个月前,我结束了在 YellowRoad 作为数据科学家的第二年,所以我决定对我的项目进行回顾性分析,我做得好吗?我发现了哪些有趣的方法?我犯了什么错误?最重要的是,我学到了什么?

Vaex:Python 和快速可视化的核心数据帧之外

由马腾·布雷德尔斯 — 8 分钟阅读

有些数据集太大,不适合你的台式电脑的主存,更不用说你的笔记本电脑了。尽管如此,我们还是希望在大数据时代使用大型数据集。然而,我们真的不想为了一个小实验而学习设置 Hadoop 或 Spark 基础设施。

物理引导神经网络

由穆罕默德·阿里坎·诺扬 — 6 分钟读取

基于物理的模型是当今科技的核心。近年来,数据驱动模型开始提供一种替代方法,并在许多任务中胜过物理驱动模型。

通过构建真实世界的应用程序掌握 Python

通过 Dhrumil Patel — 7 分钟读取

我们将使用 Python 和 leav 构建我们的 web 地图。你们都知道 Python,所以让我向你们简单介绍一下叶子。它基本上是一个数据可视化库,用于可视化地理空间数据或涉及坐标和位置的数据。

作为数据科学家如何提出正确的问题

由阿德蒙德·李 — 5 分钟阅读

我相信提出正确的问题和定义问题陈述是许多数据科学初学者(包括我)面临的一些挑战。

每周精选—2017 年 12 月 15 日

原文:https://towardsdatascience.com/weekly-selection-dec-15-2017-8769b2454d07?source=collection_archive---------4-----------------------

培养自己的专家

由卢西恩·利塔 — 5 分钟阅读

如果你发现自己处于这种困境,考虑一下:你的招聘标准可能已经过时,你的候选人范围可能过于狭窄。

Youtube 浏览量预测器

通过 Aravind Srinivasan — 10 分钟读取

在过去的 5 年里,YouTube 已经向 YouTube 内容创作者支付了超过 50 亿美元。流行的 YouTuber PewDiePie 在 2016 年仅从 YouTube 就赚了 500 万美元,这还不包括赞助、代言和 YouTube 以外的其他交易。

video fi——注释视频和寻找简化的见解

通过 Shivangi Shroff — 5 分钟读取

看视频很好玩,但是尝试手动分析视频,就没那么好玩了!你可能会错过重要的细节,这是非常耗时的。如果这个过程可以自动化呢?它肯定能让少数人的生活更轻松。

如何讲故事,用数据编织有凝聚力的叙事

by Payman Taei — 5 分钟阅读

讲故事是人类最重要的进化优势之一。这是一个大胆的说法,但我相信这是真的。

在机器学习中处理缺失数据

由伯颜安杰洛夫 — 4 分钟读完

缺失值代表了真实世界数据的混乱。发生这种情况的原因可能有很多,从数据输入过程中的人为错误、不正确的传感器读数,到数据处理流程中的软件错误。

曼加干

通过贝希 — 8 分钟阅读

漫画和动画因其复杂的艺术风格和引人入胜的故事而受到全世界的赞赏。这个游戏的粉丝群是如此庞大,以至于有成千上万的艺术家在那里绘制原创漫画和动漫角色,也有成千上万的人想要创造它们。

使用物体检测实现更智能的零售结账体验

由 Priya Dwivedi — 4 分钟阅读

我一直在玩 Tensorflow 对象检测 API ,对这些模型的强大感到惊讶。我想分享一些实际用例的 API 的性能。

莎士比亚英语的机器翻译

由露蒂雷哈克 — 4 分钟读完

如果你一直在关注深度学习的最新发展,你可能会遇到 艺术 风格转移 这是一种用图像 A 的内容,以图像 b 的风格创建新图像的技术。

一个非常简单的 Jupyter 笔记本交互控件演示

通过 Tirthajyoti Sarkar — 5 分钟读取

project Jupyter/IPython 对数据科学家如何快速测试和原型化他/她的想法并向同行和开源社区展示工作产生了最大程度的影响。这是一个非营利性的开源项目,诞生于 2014 年的 IPython 项目,该项目迅速发展,支持跨所有主要编程语言的交互式数据科学和科学计算。

每周精选—2018 年 12 月 21 日

原文:https://towardsdatascience.com/weekly-selection-dec-21-2018-ff8056029bc7?source=collection_archive---------19-----------------------

为什么你应该关心内特·西尔弗和纳西姆·塔勒布的推特之战

由艾萨克·费伯 — 10 分钟阅读

过去一个月,一场不为人知的争议再次浮出水面。定量分析社区的两个图标在最伟大的公共舞台 Twitter 上发生了冲突。

教程:搭建车道检测器

By Chuan En Lin 林傳恩 — 10 min read

Waymo 的自动驾驶出租车服务本月刚刚上路——但自动驾驶汽车是如何工作的呢?道路上画的线向人类驾驶员指示车道在哪里,并作为相应地驾驶车辆的方向的指导参考,以及车辆代理如何在道路上和谐互动的约定。

如何学习数据科学:保持动力

哈里森·詹斯马 — 11 分钟阅读

在过去的几周里,我暂停了写作,专注于申请实习。但是当我今天开车去上课的时候,一个问题开始困扰我。

利用数据科学变得更聪明——应对真正的企业挑战

由迪潘詹(DJ)萨卡尔 — 17 分钟阅读

《数据科学战略指南——用数据科学变得更聪明》被设想为一系列文章,它更像是一份战略指南,描述了在现实世界中实施和执行数据科学项目时需要牢记的基本挑战、陷阱和原则。

合成数据生成——新数据科学家的必备技能

通过 Tirthajyoti Sarkar — 11 分钟读取

简要概述为自驱动数据科学项目生成合成数据的方法/包/想法,并深入研究机器学习方法。

用 Python 分析黑客新闻书籍建议

作者亚历山德罗·莫扎托 — 6 分钟阅读

一个黑客新闻线程的分析,使用 Python,黑客新闻 API 和 Goodreads API,以及权威的前 20 名书籍建议列表!

用 Python 开发 NLP 模型&用 Flask 部署,一步一步

由苏珊李 — 6 分钟读完

到目前为止,我们已经开发了许多机器学习模型,根据测试数据生成数值预测,并测试结果。我们在网下做所有的事情。实际上,生成预测只是机器学习项目的一部分,尽管在我看来这是最重要的一部分。

通过机器学习为机器学习项目产生新想法

由 Paras Chopra — 19 分钟读作

让我们做一个快速图灵测试。下面,你会看到十个机器学习项目创意。其中五个是由人类产生的,五个是由神经网络产生的。你的任务是区分它们。

解构 BERT:从 1 亿个参数中提取 6 种模式

由杰西·维格 — 6 分钟读取

2018 年标志着自然语言处理领域的一个转折点,一系列深度学习模型在从问题回答到情感分类的 NLP 任务中取得了最先进的成果。

py spark 简介

由本·韦伯 — 15 分钟读取

PySpark 是一种很好的语言,可以进行大规模的探索性数据分析,构建机器学习管道,为数据平台创建 ETL。如果您已经熟悉 Python 和 Pandas 之类的库,那么为了创建更具可伸缩性的分析和管道,PySpark 是一种很好的学习语言。

ProGAN:NVIDIA 如何生成前所未有质量的图像

由莎拉·沃尔夫 — 10 分钟阅读

上面高分辨率图像中的人看起来可能是真实的,但实际上不是——他们是由一个对数百万名人图像进行训练的程序合成的。“ProGAN”是 NVIDIA 首创的一种生成性对抗网络的口语术语。

每周精选—2017 年 12 月 22 日

原文:https://towardsdatascience.com/weekly-selection-dec-22-2017-42e33a892788?source=collection_archive---------6-----------------------

成为走向数据科学的赞助人

由 TDS 团队

2016 年 10 月,我们使用 Medium 创建了一个数据科学出版物。我们的目标只是收集好的帖子,并将它们分发给更广泛的受众。仅仅几个月后,我们很高兴地看到,我们有一个非常快速增长的观众和许多贡献者。

Docker 如何帮助你成为更高效的数据科学家

通过哈默尔侯赛因 — 14 分钟读取

在过去的 5 年里,我听到了很多关于码头集装箱的传言。似乎我所有的软件工程朋友都在用它们开发应用程序。

陌生事物:分析和交流数据的五堂课

乔丹·德沃金 — 8 分钟阅读

作为一名统计领域的研究生,我很快意识到,不与数据打交道的人对统计这个词的反应往往是两种之一:“哦,我讨厌那门课!”和“你一定很喜欢数学!”。

组建数据科学团队的最有效方式是什么?

通过 Chuong Do — 7 min 读取。

从 2012 年到 2017 年,我有幸在 Coursera 从零开始建立数据和分析组织。在那段时间里,随着公司规模的扩大和业务的发展,我们尝试了各种不同的团队结构。

你真正需要知道的顶级算法和数据结构

杰森·罗尔 — 11 分钟阅读

如果你想成为一名软件工程师,但不知道从何入手,那就给你省点悬念:是算法和数据结构。一旦你掌握了这些编程支柱的要点,你就会发现它们无处不在。

如何在数据科学面试中胜出:统计学

由卡森·福特 — 9 分钟阅读

对于从事或试图从事数据科学工作的人来说,统计学可能是你需要发展的最大和最令人生畏的知识领域。这篇文章的目标是把你需要知道的东西减少到有限数量的具体想法、技术和方程式。

梯度下降与神经进化

作者:Lars Hulstaert — 10 分钟阅读

2017 年 3 月,OpenAI 发布了一篇关于进化策略的博文,这是一种已经存在了几十年的优化技术。他们论文的新颖性在于,他们成功地将该技术应用于强化学习(RL)问题背景下的深度神经网络。

如何让技术资料简洁美观

by Payman Taei — 10 分钟阅读

数据是任何演示或报告的支撑。它提供了真实的片断,这些片断共同构成了一幅精确的图像。没有数据,营销人员会根据假设和推测来创建他们的活动,而不是确切地知道他们的客户想要什么。

使用 Jupyter 笔记本的交互式数据科学

由郁风 G — 6 分钟读出

在我的视频中,你已经看到我在屏幕上实时运行 Python 代码并显示结果。今天,我想和你分享我是如何做到这一点的,并告诉你如何利用它!

针对糖尿病的机器学习

由苏珊李 — 9 分钟读完

根据 T4 疾病控制和预防中心的数据,现在大约七分之一的美国成年人患有糖尿病。但到 2050 年,这一比例可能会飙升至三分之一。考虑到这一点,这就是我们今天要做的事情:学习如何使用机器学习来帮助我们预测糖尿病。我们开始吧!

高速车辆以及如何追踪它们

通过贝蒂 — 7 分钟阅读

毕业后,我把探索课堂上没有机会探索的话题作为自己的目标。我的目标是每天阅读两篇关于人工智能技术最新进展的文章(即机器学习、深度学习、人工智能在游戏中的应用,等等)。

我如何使用机器学习对邮件进行分类,并将其转化为见解(第二部分)。

由安东尼 Dm。 — 5 分钟读取

自从我写了 第一部分 已经有一段时间了,在过去一年的许多项目中,我找不到时间和精力继续我离开的地方。在我写第 2 部分的时候,圣诞节越来越近了,这给了我一些空闲时间来继续我的研究。

不用任何培训就能构建一个类似的图像查找器!

由王安森 — 4 分钟阅读

在本文中,我们将通过剖析图像对象分类器 VGG 的训练权重来构建一个相似图像查找器,并使用它从图像数据库中提取特征向量,以查看哪些图像彼此“相似”。这种技术被称为转移学习,在我们这边不需要任何训练——艰苦的工作在 VGG 实际接受训练的时候就已经完成了,我们只是重新使用训练过的权重来建立一个新的模型。

为什么你的分析项目无法实现指数价值

到杰西·帕盖特——5 分钟阅读

因此,您已经在数据仓库的基础上构建了一个分析仪表板,恭喜您!你现在正在推进一些令人兴奋的预测/机器学习计划,这很好,但在你合上分析这本书之前,有一些事情你应该知道。

将医学艺术从人工智能中分离出来

休·哈维 — 8 分钟阅读

人工智能需要数据。理想情况下,数据应该是干净、可信的,最重要的是准确的。不幸的是,医学数据远非如此。事实上,医学数据有时远非干净,而是非常肮脏。

我们感谢帕特里翁的支持者,是他们让我们的工作成为可能,☺️

传恒(亨利)、克里斯·曼古姆、 皮尤什·劳特雷、钟弘成、贾亚拉姆·奈尔、帕沃·波汉多夫、香农·霍恩、卡森·福特、哈雷尔·温斯坦、希森·乔、迈克尔·D·施拉格、杰里卡·科佩内 多米尼克·蒙,豪尔赫·库尼亚,阿什维尼·萨罗德,刘淑芳,瓦西夫·胡达,尤瓦尔·布劳温迪·黄。

成为赞助人 ✨

每周精选—2018 年 12 月 28 日

原文:https://towardsdatascience.com/weekly-selection-dec-28-2018-1fa4e0d93349?source=collection_archive---------18-----------------------

贝叶斯定理:数据科学的圣杯

作者阿尔特姆·奥珀曼 — 8 分钟阅读

贝叶斯定理可能是数理统计和概率论领域中最重要的定理。由于这个原因,这个定理经常在数据科学领域得到应用。
在本文中,我将用一个实际问题来直观地推导贝叶斯定理。

利用最先进的自然语言处理库 Flair 进行文本分类

由 Tadej Magajna — 6 分钟读取

为什么这是 NLP 的大新闻?Flair 在解决自然语言处理问题方面提供了一流的性能,如命名实体识别(NER)、词性标注(PoS)、词义消歧和文本分类。这是一个建立在 PyTorch 之上的 NLP 框架。

通过构建真实世界的应用程序掌握 Python(第 3 部分)

通过 Dhrumil Patel — 5 分钟读取

世界在快速发展,技术也在快速发展。每天你都会看到一些你从未听说过的东西。但这不是问题。问题是,如何找到合适的资源,以正确的顺序学习所有的东西?如果你也有同样的问题,那你就等着享受吧。

作为一名软件工程师,我曾与一名数据科学家共事。下面是我的经验

由本丹尼尔 A. — 5 分钟阅读

2017 年末,我开始对机器学习领域产生兴趣。我讲了我刚开始旅行的经历。总之,它充满了有趣的挑战和大量的学习。我是一名 Android 工程师,这是我与我们的数据科学家合作 ML 项目的经验。

两个卷积的故事:图形神经网络的不同设计范例

由科迪·玛丽·怀尔德 — 14 分钟阅读

“图形”是自然语言中一个不如数学术语精确的术语:在日常用语中,图形通常可以用来表示绘图、图表或更普遍的数据可视化。

什么是智力?

由叶戈尔德志 — 24 分钟读出

大约 7 年前,当我还在上高中的时候,我是一名网站开发人员,并把学习心理学作为业余爱好,我偶然发现了一篇关于人工神经网络的文章。

理解文本摘要并在 python 中创建自己的摘要器

通过 Praveen Dubey — 7 分钟读取

我们都与使用文本摘要的应用程序进行交互。这些应用程序中有许多是针对发布每日新闻、娱乐、体育文章的平台的。

湾区怎么通勤?

乔恩·贝特 — 11 分钟阅读

对于这个项目,我想回答一个问题。我们能否仅使用通勤数据来定义旧金山湾区公交机构的服务区域?如果可以,会是什么样子?

每周精选—2017 年 12 月 29 日

原文:https://towardsdatascience.com/weekly-selection-dec-29-2017-cdab5a8eaaba?source=collection_archive---------6-----------------------

基于网络的多媒体学习的音频功能

由 Boris Smus — 8 分钟阅读。

深度学习的学生面临的第一个问题是在 MNIST 数据集中对手写数字进行分类。多亏了 deeplearn.js 的,这个最近被移植到网络上。

马尔可夫链蒙特卡罗方法的零数学介绍

由本剃须刀 — 11 分钟读取。

对于我们中的许多人来说,贝叶斯统计充其量是巫毒魔法,或者说是完全主观的胡说八道。在贝叶斯方法的商标中,马尔可夫链蒙特卡罗方法尤其神秘。

人工智能在音频处理中的承诺

丹尼尔·罗斯曼 — 7 分钟阅读

2017 年是人工智能的好年景,尤其是深度学习。我们已经看到图像和视频处理的人工智能技术的兴起。尽管事情往往需要一段时间才能进入音频世界,但在这里我们也看到了令人印象深刻的技术进步。

一次性学习:使用连体神经网络进行人脸识别

由弗达奥斯·杜卡里——5 分钟阅读

本文以人脸识别为例,介绍了一次性学习,特别是连体神经网络。我将与你分享我从论文《FaceNet:人脸识别和聚类的统一嵌入》和 deeplearning.ai 中学到的东西。

机器学习基础(二):神经网络

通过康纳麦当劳 — 6 分钟阅读

在我的上一篇文章中,我通过展示成本函数和梯度下降在学习过程中的核心作用,概述了机器学习的工作原理。

如何创建代号机器人第一部分:Word2vec

由杰里米·尼曼 — 6 分钟读完

作为一个桌游爱好者和程序员,我想到设计一个算法来玩流行的游戏代号将是一个有趣的,如果不是值得努力的话。在这一系列的博客文章中,我将分享我在产生基于单词联想的线索方面的各种尝试,这些线索是代号的组成部分。所以!让我们开始吧。

计量分析:中本聪

由迈克尔·姜 — 7 分钟阅读

自然语言处理工具被应用于中本聪的比特币论文,以将其与众多加密货币相关的论文进行比较,试图识别未知的中本聪的真实身份。

如何可视化分布

Marc Laforet — 5 分钟阅读

您已经将所有必要的数据整理成一种清晰的格式,您已经恰当地执行了一个时髦的统计分析,现在是分析结果的时候了。这就是可视化数据派上用场的地方。

如果我告诉你数据库索引是可以学习的,会怎么样?

科迪·玛丽·怀尔德——5 分钟阅读

不幸的是,这篇论文我没能在 NIPS 上看到,但在过去的几天里,它在 ML 圈子里引起了相当多的关注。这些作者中包括杰夫·迪恩(Jeff Dean),一位非常受尊敬的早期谷歌员工,他们有一个核心观点,他们在整篇论文中重申:在他们的核心,数据库索引是模型。

数据挖掘简介

由西达斯·阿西里 — 4 分钟读完

数据挖掘是当今非常热门的话题。与几年前不同,现在一切都与数据绑定,我们有能力很好地处理这些类型的大数据。

我们感谢 Patreon 的支持者,是他们让我们的工作成为可能😊

丹尼尔·夏皮罗,博士,文卡特·拉曼,配制员,基里尔·帕纳林,赛赛,扎克·塞格彭,蒂尔塔约蒂·萨卡尔,安东尼·马内洛,纳温·蒂鲁帕图尔。

成为✨的资助人

每周精选—2018 年 12 月 7 日

原文:https://towardsdatascience.com/weekly-selection-dec-7-2018-fcec7ff38a2e?source=collection_archive---------19-----------------------

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

由迪潘然(DJ)萨卡 — 18 分钟阅读

迁移学习是一个令人兴奋的概念,我们试图将一个领域和任务中的现有知识运用到另一个领域和任务中。灵感来自我们人类本身,我们有一种天生的能力,不需要从头开始学习一切。

用一个简单的 Python 机器人增加你的 Instagram 粉丝

到法比奥内维斯 — 9 分钟读取

培养观众是一项昂贵而痛苦的任务。如果你想建立一个与你相关的、有共同兴趣的听众群,那就更难了。我总是看到 Instagram 有一个很好的方法来推广我的照片,但我从来没有超过 380 个粉丝…

永远不要从假设开始

凯西·科济尔科夫(Cassie Kozyrkov)—8 分钟

设置假设检验是一场交际舞;它的步骤是动作-动作-世界-世界。有很好的狐步舞节奏。不幸的是,大多数人一开始就搞砸了。以下是如何正确地跳舞。

法医深度学习:Kaggle 相机模型识别挑战

弗拉基米尔·伊格洛维科夫(Vladimir Iglovikov)——15 分钟阅读

大约一年前,在 kaggle.com 举办了一场名为 IEEE 信号处理协会——相机型号识别的计算机视觉挑战赛。

冷启动问题:如何建立你的机器学习组合

爱德华·哈里斯 6 分钟阅读

我是一名物理学家,在 YC 的一家初创公司工作。我们的工作是帮助新毕业生获得他们的第一份机器学习工作。

Python 和 Slack:天生一对

作者:威廉·科尔森 — 8 分钟阅读

当你知道你能用 Python 做多少事情时,生活就会变得更加美好。我日常工作流程中的第一个转变来自于我阅读了《用 Python 自动化枯燥的东西》,并发现有一些日常任务——比如任何与电子表格有关的事情——我不再需要浪费时间。

一种不同的(深度)学习

到 Gidi Shperber — 10 分钟读取

深度学习真正重新洗牌了机器学习领域的东西,特别是在图像识别任务中。2012 年,Alex-net 发起了一场解决(或至少显著改善)计算机视觉任务的竞赛(仍远未结束)。

多任务学习:多教你的人工智能,让它变得更好

由亚历山大·巴甫洛夫·洪查尔 — 17 分钟读完

大家好!今天,我想告诉你关于机器学习的话题,一方面,这是非常面向研究的,应该把机器学习算法带到更像人类的推理中,另一方面,这是我们从机器学习的基础中非常熟悉的,但很少被解释为我今天想要展示的。

每周精选—2017 年 12 月 8 日

原文:https://towardsdatascience.com/weekly-selection-dec-8-2017-f6851d4b6f8d?source=collection_archive---------6-----------------------

顶级人工智能研究人员对“模拟假说”的坦诚思考

由丹尼·赫尔南德斯 — 4 分钟阅读

我在奶头的一个黑暗的房间里调查了人工智能科学家,了解他们最深层的意图和信念。

黑人生活的数据:麻省理工学院举行的首次会议

由贾梅勒·沃森-丹尼尔斯 — 8 分钟阅读

我们听说过万有引力和电磁力,但还有另一个:Yeshimabeit Milner。正是她的远见推动了现在被称为“黑人生活数据”的运动。

深度学习&医疗诊断

通过尼尔·拉西亚 — 6 分钟阅读

在过去的几个月里,已经有许多研究发现宣布,声称深度学习已经被应用于,并且经常是立即在特定的诊断领域胜过医生。

如何在 Tensorflow 上使用神经网络(SSD)构建实时手部检测器

维克多·迪比亚 — 10 分钟阅读

这篇文章记录了使用 Tensorflow(对象检测 API)训练手部检测器的步骤和脚本。我感兴趣的主要是检测桌子上的手。

如何用神经网络找到沃利

通过 Tadej Magajna — 6 分钟读取

深度学习提供了另一种方法来解决 Wally 在哪里的难题。但与传统的图像处理计算机视觉方法不同,它只使用少数几个带标签的例子,包括沃利在图像中的位置。

你应该知道的 4 个深度学习突破

由塞斯·魏德曼 — 11 分钟阅读

由于开源社区的强大,第二部分变得越来越容易。关于如何使用 TensorFlow 等库来训练和使用深度学习模型的具体细节,有许多很好的教程,其中许多出版物如《走向数据科学》每周出版一次。

kegra:用 Keras 对知识图谱进行深度学习

丹尼尔·夏皮罗博士——7 分钟阅读

你好。我在过去的文章中提到过,我正在紧张地研究面向企业数据集的认知计算。这是那个。这篇文章需要对深度学习有所了解,但是你应该能够理解数据科学的最基本知识。

Python 数据科学:将条件循环转化为 Numpy 向量

通过 Tirthajyoti Sarkar — 4 分钟读取

矢量化技巧是数据科学家非常熟悉的,通常用于编码,以加速整体数据转换,其中简单的数学转换是在可迭代对象(如列表)上执行的。不太为人所知的是,对非平凡的代码块(如条件循环)进行矢量化也是值得的。

拿破仑是有史以来最好的将军,数学证明了这一点。

由 Ethan Arsht — 8 分钟读取

受棒球赛计量法的启发,我选择使用一种胜于败的系统。战争经常被用来评估一个棒球运动员对他的球队的贡献。

带动量的随机梯度下降

由维塔利·布沙耶夫 — 7 分钟阅读

这是我关于用于训练神经网络和机器学习模型的优化算法系列的第 2 部分。第 1 部分讲的是随机梯度下降。

使用 XGBoost 预测献血,无需使用 Dataiku 编写任何代码

通过 Nadaa Taiyab — 9 分钟读取

我决定用一个名为驱动数据的组织举办的类似 Kaggle 的竞赛中的数据集来测试 Dataiku 的数据科学工作室技术。驱动数据主办数据科学竞赛,以解决具有社会影响的问题。

用 Python 解决一个简单的分类问题——水果爱好者版

由苏珊李 — 6 分钟读完

在这篇文章中,我们将使用最流行的 Python 机器学习工具 Scikit-learn 在 Python 中实现几个机器学习算法。使用简单的数据集来训练分类器以区分不同类型的水果。

ka ggle 内核简介

由郁风 G — 5 min 读出

在《人工智能历险记》的这一集里,我们将了解什么是 Kaggle 内核,以及如何开始使用它们。虽然这一集没有爆米花,但我可以保证 Kaggle 内核正在爆开!

每周精选

原文:https://towardsdatascience.com/weekly-selection-e0c037c6f2c1?source=collection_archive---------3-----------------------

亲爱的读者和投稿人:

像往常一样,我们很高兴向您展示我们每周精选的关于数据科学的文章。我们希望你喜欢:)

捍卫简单,数据可视化之旅

由艾琳·罗斯——阅读:7 分钟。

在我职业生涯的最后 8-9 年里,我一直专注于数据可视化,这给了我足够的时间来发展我在这个领域的一两个理念。我说两个,但我真正指的是大约六个半心烦意乱的职业危机产生时刻(持续几周或几个月),询问我想从这个领域中得到什么,我正在做的事情是否是“正确的事情”,以及我是否应该做其他事情。

机器学习,遇见海洋

由凯特·温——读数:5 分钟。

马萨诸塞州的梅德福德今天气温 20 度,当我过河时,昨天的雪正刮过马路。我飞过整个国家,和一小群工程师、渔业科学家以及以晚餐和能量饮料的承诺招募的朋友们聚集在一个小小的地下室办公室里。

下一个前沿——从认知到理解

尤里·巴尔佐夫——阅读:5 分钟。

AI 能从一个没有 90%大脑正常生活的人身上学习意识吗?也许一个自闭症患者也能帮上忙?核心价值观和讲故事呢?虽然这些问题听起来很矛盾,但它们可能会给人工智能科学家提供一些发展具有自我意识的人工智能的重要线索。

检查你对数据的假设

布莱恩·高德西——阅读:6 分钟。

不管我们愿不愿意承认,我们都会对数据集做出假设。我们可以假设我们的数据包含在特定的时间段内。或者,我们可以假设包含电子邮件的文件夹的名称是这些电子邮件的主题或分类的适当描述符。这些关于数据的假设可以是预期或希望,有意识的或潜意识的。

LDA 是降维技术还是分类器算法?

作者梅加洛姆·迭戈·费尔南德斯——阅读:9 分钟。

在这篇文章中,我将继续讨论这个主题,但现在,谈论线性判别分析(LDA)算法。LDA 被作者定义为一种降维技术,然而一些来源解释说 LDA 实际上作为线性分类器工作。

参数推断:最大似然 & 最大似然

Rahul Bohare——阅读:15 分钟和 10 分钟。

这篇文章深入探讨了理论机器学习最重要的概念之一,即。,参数推断。当我觉得需要的时候,我会试着专注于对概念的直觉理解,同时嵌入数学公式。

每周精选

原文:https://towardsdatascience.com/weekly-selection-ef9af1a8784d?source=collection_archive---------9-----------------------

如果您正在使用神经风格转移或深度照片风格转移,重要资源

由 Kailash Ahirwar — 6 分钟阅读。

神经风格迁移和深度照片风格迁移是深度学习的有趣领域。他们的受欢迎程度已经上升到另一个水平。像 Prisma 和 Deepart.io 这样的应用加速了流行。

深度学习之美背后的秘密酱:激活功能初学者指南

到 Mate Labs — 7 分钟读取。

激活功能是获取输入信号并将其转换为输出信号的功能。激活函数将非线性引入网络,这就是为什么我们称之为非线性。

在 SELU 自动编码器(不是另一个 MNIST)上高斯混合模型的无监督学习

由gon alo Abreu—5 分钟读取。

你是一个不了解人类文化的外星人,出于某种原因,你设法从手写数字数据集中获取了所有图像(MNIST)。

人们在谈论“再现性危机”和“p 值”,我觉得我应该理解,但我的眼睛已经变得呆滞……你能帮忙吗?

通过哑光 Brems — 9 分钟读取。

我不知道回答这样的问题有多大市场,但如果有人知道,也许我会成为数据科学领域的“亲爱的艾比”。(“亲爱的 Statsy”有些潜力。)

基于索赔的索赔的危险性

伦纳德·达沃利奥博士 — 4 分钟阅读。

医疗保健因缺乏采用的数据格式而臭名昭著。一个例外是付款人和供应商之间交换的账单信息。这些文件通常被称为“索赔”

流派精要——建立专辑推荐系统

由维尔莫斯米勒 — 16 分钟阅读。

为了练习我的 Python 技能并探索推荐系统的内部工作方式,我决定使用协作过滤来构建一个推荐系统,该系统基于以音乐专辑的用户评级形式的明确反馈。

连接深度学习应用的点…

由贾纳丹·谢蒂 — 6 分钟阅读。

我们的日常活动充满了情感和情绪。想过我们如何通过计算机识别这些情绪吗?哎呀,没脑子的电脑:)?

每周精选

原文:https://towardsdatascience.com/weekly-selection-f740cb6755e1?source=collection_archive---------13-----------------------

SQL 教程:如何编写更好的查询

由 Karlijn Willems — 19 分钟阅读。

结构化查询语言(SQL)是数据科学行业中不可或缺的技能,一般来说,学习这项技能相当容易。然而,大多数人忘记了 SQL 不仅仅是编写查询,这只是前进道路上的第一步。确保查询是可执行的,或者它们适合您正在工作的环境,这完全是另外一回事。

数据科学简化版:简单线性回归模型

由帕拉德普·梅农 — 9 分钟读出。

在本系列之前的帖子中,我们讨论了统计学习和假设检验的概念。在本文中,我们深入线性回归模型。

通过 Tensorflow 识别蝙蝠的声音来检测蝙蝠

由罗兰梅尔滕斯 — 10 分钟阅读。

上周我发现我的公寓后面有蝙蝠。我立即抓起我的“蝙蝠探测器”:一种将蝙蝠用来回声定位的超声波信号从听不见的频率范围转换成听得见的频率范围的装置。

政治党派:看看数据

通过 Akhil Jalan — 4 分钟读取。

传统观点认为,特朗普时代是近期政治中政治极化最严重的时期。我决定看看一些数据,看看是否真的是这样。

对抗性自动编码器的向导指南:第一部分,自动编码器?

由纳雷什纳加布山 — 9 分钟阅读。

我们知道,卷积神经网络(CNN)或在某些情况下密集的全连接层(MLP——一些人喜欢称之为多层感知器)可以用来执行图像识别。

带 Keras + OpenAI 的强化学习:DQNs

通过 Yash Patel — 11 分钟读取。

上次在我们的 Keras/OpenAI 教程中,我们讨论了一个将深度学习应用于强化学习上下文的非常基本的例子。回想起来,这真是一场不可思议的演出!

利用深度学习检测面部特征

Peter Skvarenina — 6 分钟阅读。

也许你想知道如何在实时视频聊天中在人脸上放置有趣的物体或检测情绪?在这里,我将向您展示一种利用深度学习的可能方法,并略读一种较老的方法。

以下是我从编写、编码和设计自己的长格式数据驱动专题故事中所学到的东西

由本杰明库利 — 9 分钟阅读。

“不择手段。”这个短语在历史上有了新的含义,从第一次出现在让-保罗·萨特的戏剧中,到出现在马尔科姆·Ⅹ关于民权运动的演讲中。

神经网络系列简介—第一部分

由 David Fumo — 8 分钟读完。

神经网络和深度学习是计算机科学和技术行业的重要话题,它们目前为图像识别、语音识别和自然语言处理中的许多问题提供了最佳解决方案。

每周精选

原文:https://towardsdatascience.com/weekly-selection-fb4dcf6e73b0?source=collection_archive---------7-----------------------

Google tensor flow 物体检测 API 是实现图像识别最简单的方法吗?

由 Priya Dwivedi — 4 分钟阅读。

有许多不同的方法来进行图像识别。谷歌最近发布了一个新的 Tensorflow 对象检测 API,以推动计算机视觉无处不在。谷歌提供的任何服务都不能掉以轻心,所以我决定尝试一下这个新的 API,并在 you tube 的视频上使用它:)

记忆、注意力、序列

通过Eugenio culrciello—4 分钟阅读。

我们已经看到分类神经网络的兴起和成功。神经网络的下一个重大步骤是理解来自观察和与现实世界互动的复杂时空数据。我们之前谈过在这个领域运作的新一波神经网络。

如何用 CNN,TensorFlow,单词嵌入做文本分类

由拉克什马南 V — 9 分钟读取。

假设我给你一篇文章的标题“Twitter Bootstrap 的惊人扁平版本”,并问你这篇文章出现在哪个出版物上:纽约时报、TechCrunch 或 GitHub。你的猜测是什么?

智慧城市和图像识别

由乔·汉森 — 6 分钟读完。

人工智能的进步意味着应用程序越来越多地具备图像识别能力,使它们能够识别物体,检测人脸的年龄,并筛选出成人内容。几年来,国土安全部一直致力于在美国机场实施生物识别监控系统来验证旅客的身份,最近他们在海关和边境保护局的试点中取得了成功。

使用 Keras 和直方图均衡化进行深度学习的图像增强

由瑞安阻断 — 12 分钟读取。

深度神经网络,尤其是卷积神经网络(CNN),尤其擅长图像分类任务。最先进的 CNN 甚至被证明在图像识别方面超过了人类的表现。

tensor flow 中的音频处理

由达里奥·卡扎尼 — 6 分钟读完。

我们发现 TensorFlow 中的音频处理很难,下面是我们的解决方案。有无数种方法可以执行音频处理。在 TensorFlow 中用人工神经网络运行带有音频输入的实验的通常流程是首先预处理音频,然后将其馈送到神经网络。

在哪里投资放射学 AI

休·哈维 — 8 分钟阅读。

随着我们到达围绕人工智能及其对放射学领域的影响的炒作曲线的顶点,精明的投资者意识到这一前进空间的危险和陷阱比以往任何时候都更重要。

每周精选—2018 年 2 月 16 日

原文:https://towardsdatascience.com/weekly-selection-feb-16-2018-6f2551d3181b?source=collection_archive---------9-----------------------

应用贝叶斯法则

由威廉·科尔森 — 9 分钟阅读

贝叶斯推理的基本思想是用更多的数据变得“更少的错误”。这个过程很简单:我们有一个最初的信念,称为先验,当我们获得更多信息时,我们会更新它。

使用生成式对抗网络的自动特征工程

到哈马德·沙阿 — 8 分钟读取

深度学习的目的是使用一系列可微分函数(即几何变换)来学习高维度和噪声数据的表示,这或许可以用于监督学习任务以及其他任务。

如何编写数据科学中的生产级代码?

文卡特什·帕帕克里什南博士 — 11 分钟阅读

编写生产级代码的能力是数据科学家角色的抢手技能之一——无论是否明确公布。对于一个从软件工程师转型为数据科学家的人来说,这听起来可能不是一个具有挑战性的任务,因为他们可能已经完善了开发生产级代码的技能,并多次部署到生产中。

每个有抱负的数据科学家需要知道的 10 件事

通过 Ayo Oluleye — 6 分钟读取

哈佛的一篇文章《数据科学家:21 世纪最性感的工作》首先引发了我对数据科学领域的兴趣。那时,我已经在管理咨询行业工作了 3.5 年,并在 MS Excel 中建立模型和开发项目方面建立了良好的声誉。

广义线性模型

通过 Semih Akbayrak — 7 分钟读取

自从我写了第一篇面向所有人的机器学习文章以来,已经有很长时间了。从现在开始,我会试着更频繁地发表文章。

区块链与传统数据库

由沙安雷 — 4 分钟读完

传统数据库使用客户机-服务器网络体系结构。在这里,用户(称为客户端)可以修改存储在中央服务器上的数据。

在谷歌工作表中构建深度神经网络

由布莱克·韦斯特 — 7 分钟读完

我想告诉你深度卷积神经网络并不像听起来那么可怕。我将通过展示我在 Google Sheets 中制作的一个实现来证明这一点。这里有这里有。

用 Python 进行深度学习

通过维哈尔鞍马 — 8 分钟阅读

深度学习背后的主要原因是,人工智能应该从大脑中获取灵感。这种观点产生了“神经网络”这个术语。

用人工智能对抗癌症

由 Andrew DeCotiis-Mauro — 9 分钟阅读

今年 8 月,我听到了没有人想从他们的医生那里听到的话:“你得了癌症。”我被诊断出患有一种罕见的非霍奇金淋巴瘤。经过几周混乱的测试和第二意见后,很明显我的预测是好的。

每周精选—2018 年 2 月 2 日

原文:https://towardsdatascience.com/weekly-selection-feb-2-2018-f93285dc6810?source=collection_archive---------9-----------------------

通过 DPC 模拟 TI 资质

由埃尔文·埃德米尔 — 12 分钟阅读

当我在 ESL One 云顶发现 FATA 生病的时候,已经是我所在时区的午夜了。当文本到达时,我仍处于半睡半醒的状态,因此尽管仍在做梦,我仍在考虑建立一个统计模拟,以从数字上评估无法通过 DPC (Dota Pro Circuit)积分进入 TI 的风险。

为什么、如何以及何时应用功能选择

到 Sudharsan Asaithambi — 5 分钟阅读

现代数据集的信息非常丰富,数据是从数百万个物联网设备和传感器收集的。这使得数据变得高维,拥有数百个要素的数据集很常见,甚至达到数万个也不罕见。

如何掌握新技能

由威廉·科尔森 — 6 分钟阅读

学习新技能的最好方法是用它来解决问题。在我以前作为一名航空航天工程学生的生活中,我花了几个小时在 Excel 中编写复杂的公式来做从设计机翼到计算航天器再入角度的一切事情。

如何处理缺失数据

通过 Alvira Swalin — 8 分钟读取

我在数据清理/探索性分析中遇到的最常见的问题之一是处理丢失的值。首先,要明白没有好的方法来处理丢失的数据。

深度学习的 Skejul 会议

通过法维奥·巴斯克斯 — 6 分钟阅读

当你的人在世界各地,在不同的时区,甚至在同一个房间时,安排一次会议是不容易的。我们都超级忙,对吧?也许你没有正确利用你的时间,也许你某一天有很多会议,而其他时间却没有。

关于机器学习需要知道的 12 件有用的事情

由詹姆斯·勒 — 16 分钟读完

机器学习算法可以通过从示例中进行归纳来找出如何执行重要任务。在手动编程不可行的情况下,这通常是可行的且成本有效的。

为什么在深度学习中我们需要比反向传播更好的学习算法

通过 Kailash Ahirwar — 2 分钟读取

我们都同意一件事,即反向传播是一种革命性的学习算法。当然,它已经帮助我们训练了几乎所有的神经网络结构。

【Tensorflow 服务的实用文本生成

通过 5agado — 9 分钟读取

在这篇文章中,我将讨论深度学习模型通过 Tensorflow 的暴露和服务,同时展示我对灵活实用的文本生成解决方案的设置。

大规模应用开发的架构

由查敏·娜琳达 — 17 分钟读完

现在,只需一瞥的时间,就可以实时分析卫星从太空发送到地球的数十亿字节的数据。还记得埃隆·马斯克强调的来自人工智能的潜在威胁吗?如果我们不能规范人工智能,这种威胁就不远了,对他来说这是非常重要的。

数据揭示:是什么让一场 Ted 演讲受欢迎?

由到 — 13 分钟读取

我分析了 2550 个 ted 演讲的数据集来寻找这个问题的答案。我研究了一个特定演讲的哪些可用变量,如评论数量、翻译语言数量、演讲时长、标签数量或在线发布日期,是其受欢迎程度的强有力预测因素,以浏览量衡量。

理解特征工程(第三部分)——文本数据的传统方法

由迪潘詹·萨卡尔 — 18 分钟阅读

在本系列的前两部分中,我们已经介绍了处理结构化数据的各种特性工程策略。检出第一部分:连续、数值数据第二部分:离散、分类数据复习。在本文中,我们将看看如何处理文本数据,这无疑是非结构化数据最丰富的来源之一。**

平均,你用错了平均:几何&调和手段在数据分析中

丹尼尔·麦克尼克 — 20 分钟阅读

算术平均值只是得出“平均值”的许多方法中的一种。更专业地说,这些被称为“汇总统计”、“集中趋势度量”或“位置度量”。

用 Python 监督学习

由维哈尔鞍马 — 7 分钟阅读

地球的未来是人工智能/机器学习。任何不理解这一点的人很快就会发现自己落后了。

关于深度学习的深层误解

由杰西·摩尔 — 12 分钟阅读

我开始写这篇文章,是希望对抗一些关于深度学习(DL)的误解,深度学习是一个机器学习领域,同时被称为银弹和研究炒作。真相在中间的某个地方,我希望我能把水搅浑——至少一点点。

我们感谢 49 位 Patreon 支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、哈比卜·巴卢瓦拉、赛赛、扎克·塞普恩、蒂尔塔约蒂·萨卡尔、帕布·帕拉尼萨米、西米恩·科斯塔迪诺夫、内森·劳伊

成为✨的资助人

每周精选—2018 年 2 月 23 日

原文:https://towardsdatascience.com/weekly-selection-feb-23-2018-cbaef14c913a?source=collection_archive---------8-----------------------

谁在椭圆形办公室发推特?

由格雷格·拉弗蒂 — 18 分钟阅读

我开发了一个推特机器人@ who sintheeval,它转发唐纳德·特朗普的每一条推文,并预测这条推文是由特朗普本人还是他的一名助手写的。请务必在 Twitter 上关注这个机器人,并继续阅读以了解我是如何构建这个模型的!

最好的数据科学学习资源和我的数据科学之旅-

由阿尼什·辛格·瓦利亚 — 12 分钟阅读

因此,在这篇文章中,我将分享我的一些技巧和最好的资源,这些是我在大约 2 年前对这个时髦词完全陌生时开始的。

机器学习从零开始(第一部分)

塞巴斯蒂安·科维亚特科夫斯基 9 分钟阅读

这是关于机器学习的全新系列的第一篇文章。每篇文章都将基于五个核心原则。我的主要目标是让读者对应用机器学习的基础有一个深入的了解。

可视化弓箭手

以利亚·米克斯(Elijah Meeks)——13 分钟阅读

要实现这一点,你需要数据。不幸的是,卡通面部识别和自动分析的状态很糟糕,至少就我所能利用的而言是这样。微软的视频索引器 API 可能意味着你可以不用手工就能做到这一点,至少对于真人主演的无聊节目来说是这样,但我们没有。

解释机器学习模型

Lars Hulstaert — 8 分钟阅读

不管您的数据科学解决方案的最终目标是什么,最终用户总是更喜欢可解释和可理解的解决方案。此外,作为一名数据科学家,您将始终受益于模型的可解释性,以验证和改进您的工作。

递归神经网络(RNN)

由尼姆斯辛哈 — 7 分钟读完

作为人类,当我们看一部电影时,我们不会每次都在理解任何事件的同时从零开始思考。我们依靠电影中最近发生的经历,并从中学习。

处理您的仪表板布局?

通过 Tricia Aanderud — 5 分钟阅读

也许创建仪表板的最大障碍是布局。它必须是有用信息和吸引力的正确结合。大多数仪表板都显示在网页上。

为什么深度学习可能最适合乳房

休·哈维 — 11 分钟阅读

1986 年是伟大的一年。在史上最差着装十年的鼎盛时期,俄罗斯人发射了 Mir 空间站,皮克斯成立,微软上市,第一台 3D 打印机售出,马特·格罗宁创作了《辛普森一家》。

每周精选—2018 年 2 月 9 日

原文:https://towardsdatascience.com/weekly-selection-feb-9-2018-e2be7fb8d038?source=collection_archive---------13-----------------------

deepfakes 带来的家庭乐趣。或者我是如何让我的妻子上《今夜秀》的

由斯文·查理尔 — 5 分钟读完

deepfakes 应用程序是一种深度学习算法,可以学习如何重建人脸。给它一堆图片,让它运行几个小时,它就会吐出这些图像的模糊副本。

数据科学家需要了解的 5 种聚类算法

由乔治·赛义夫 — 11 分钟读完

聚类是一种涉及数据点分组的机器学习技术。给定一组数据点,我们可以使用聚类算法将每个数据点分类到特定的组中。

成为数据驱动或灭亡:为什么你的公司需要数据战略,而不仅仅是更多的数据人

通过德韦恩·格费里 — 6 分钟读取

在过去的 14 年里,我一直以这样或那样的方式处理数据。我最初是一名管理信息系统经理(ABN·阿姆洛),这是一个很棒的头衔,但我基本上是下载 PDF 报告,并手动将它们输入电子表格,以生成每日财务报告,多年来,我做过商业情报经理( ING 银行、荷兰合作银行、德尔塔·劳埃德)、数据分析师(微软)、数据科学家(阿德延), De Bijenkorf ,现在是一家荷兰支付技术初创公司( Dimebox )的数据主管。

命名实体识别:应用和用例

由 Shashank Gupta — 5 分钟阅读

命名实体识别是一个过程,其中算法将一串文本(句子或段落)作为输入,并识别该串中提到的相关名词(人、地点和组织)。在我们之前的博客中,我们给了你一瞥我们的命名实体识别 API 是如何工作的。

那么,你还有多少 ML 模型没有造出来?

通过文卡特拉曼 — 6 分钟读取

好奇怪的问题!!这是你看了标题后会想到的。也许你认为“不是”这个词是偶然的。

面向所有人的卷积神经网络|第一部分

由简·扎瓦日基 — 7 分钟读完

Coursera 深度学习专业化的前三门课程是可以忍受的艰难,但接下来是课程 4 。这么多伟大的主题和概念!但是无数次停止视频、做笔记和重新观看讲座让我们,一群官方导师,决定学习指南值得努力。

在机器学习中,识别上下文仍然很难——以下是解决这个问题的方法

亚伦·爱戴 — 4 分钟阅读

机器学习已经走过了漫长的道路,因为它涉及到识别人脸,物体和其他文字。但它仍然有点纠结的地方是语境。

模拟器:应用深度强化学习的关键培训环境

由西里尔·格洛克纳 — 4 分钟阅读

深度强化学习(DRL)是目前人工智能中最令人兴奋的领域之一。现在还为时尚早,但这种技术可以应用于明显且服务不足的市场:希望自动化或优化工业系统和流程效率的企业(包括制造、能源、HVAC、机器人和供应链系统)。

我们感谢我们的 50 位 Patreon 支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、哈比卜·巴卢瓦拉、赛赛、扎克·塞普恩、蒂尔塔约蒂·萨卡尔、帕布·帕拉尼萨米、西米恩·科斯塔迪诺夫、内森·劳伊

成为✨的资助人

每周精选—2018 年 1 月 12 日

原文:https://towardsdatascience.com/weekly-selection-jan-12-2018-53017efa34ce?source=collection_archive---------4-----------------------

用 d3 构建共现矩阵分析学位论文中的重叠主题

作者德博拉·梅斯基塔 — 7 分钟阅读

我硕士学位研究的目标是在不同领域的研究人员之间激发新的合作机会。但在此之前,我需要后退一步,看看是否有任何合作已经发生

尖峰神经网络,下一代机器学习

通过 Devin Soni — 4 分钟读取

每个远程关注机器学习最新进展的人都听说过当前用于机器学习的第二代人工神经网络。这些一般都是全连接的,接受连续值,输出连续值。

机器学习研究人员需要学习的 8 种神经网络架构

由詹姆斯·勒 — 22 分钟读完

对于人类无法直接编码的复杂任务,需要机器学习。有些任务非常复杂,以至于人类要想清楚所有的细微差别并明确地为它们编码是不切实际的,甚至是不可能的。

神经网络优化算法

由 Vadim Smolyakov — 6 分钟读取

神经网络用 f(x(i)表示;θ)其中 x(i) 是训练数据并且 y(i) 是训练标签,损失的梯度 L 相对于模型参数θ被计算。学习率( eps_k )决定了算法沿梯度的步长大小(最小化时为负方向,最大化时为正方向)。

关于特朗普总统和共和党,数据科学揭示了什么

由帕克·休厄尔 — 8 分钟阅读

作为用户生成内容分析课程的最后一个项目,我们的六人小组想知道推特用户和对《纽约时报》文章的评论者对川普总统和共和党的看法。我们假设大多数人会把特朗普和他领导的政党紧密联系在一起,反之亦然。

给我讲个故事:关于模型可解释性的想法

由科迪·玛丽·怀尔德 — 6 分钟阅读

最近,我的思考围绕着感觉像是机器学习的一些最大的元对话:学习一个普遍智能的演员的潜力和局限性,算法公平性的细微差别和真正的规范挑战,以及现在,模型对人类来说是可解释和可理解的意味着什么。

如何获得一份数据科学家的工作?

通过法维奥·巴斯克斯 — 4 分钟阅读

大家好。这篇博客文章来自我最近在 LinkedIn 发表的三篇文章。这里是第一部分、第二部分和第三部分。这是一个很难回答的问题。这一个和我一起挂吧(而这并不是关于宇宙、存在和一切的最终答案)。

情感分析:概念、分析和应用

由 Shashank Gupta — 7 分钟阅读

情感分析是对文本进行上下文挖掘,识别和提取源材料中的主观信息,并帮助企业在监控在线对话的同时了解其品牌、产品或服务的社会情感。然而,社交媒体流的分析通常仅限于基本的情感分析和基于计数的指标。

用 Python 进行加密货币价格预测

由Chalita Lertlumprasert—11 分钟阅读

自从比特币的价格开始飙升以来,围绕加密货币市场的炒作一直在持续。备用硬币每天都在不断出现——有些是骗局,有些几个月内就登上了硬币排行榜的榜首。

从 FourSquare 签到中预测纽约市的财富

陈 — 8 分钟阅读

在营销和广告中,对当地人口统计数据的了解使企业能够更好地为当地居民提供产品和服务。在学术界,社会科学家可能有兴趣了解城市中的人们如何应对不断变化的业务,也许是对中产阶级化的研究。

了解特征工程(第二部分)—分类数据

由 Dipanjan Sarkar — 14 分钟读取

在本系列 的前一篇文章中,我们讨论了处理结构化连续数字数据的各种特征工程策略。在本文中,我们将关注另一种类型的结构化数据,这种数据本质上是离散的,通常被称为分类数据。

我的数据科学之旅

由 Rosebud Anwuri。 — 8 分钟读取

很多人问我关于我从化学工程转到数据科学的问题。我是怎么做到的?我什么时候做的?我为什么要这么做?我觉得今天(2018 年 1 月 6 日)是回答这些问题的合适日子,因为这是我报名参加第一门编程课程以来的第三个年头。

概率概念讲解:参数估计的贝叶斯推断。

由 Jonny Brooks-Bartlett — 14 分钟阅读

在之前的博文中,我介绍了机器学习和统计模型中参数估计的最大似然法。在这篇文章中,我们将回顾另一种使用贝叶斯推理的参数估计方法。

我们感谢 43 位 Patreon 支持者让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、赛赛、扎克·塞格彭、蒂尔塔杰约蒂·萨卡尔、安东尼·马内罗、纳温·蒂鲁帕特尔、路易斯·洛雷特·德莫拉、塞加·梅尔【特

成为赞助人 ✨

每周精选—2018 年 1 月 19 日

原文:https://towardsdatascience.com/weekly-selection-jan-19-2018-b33ccefc7d3c?source=collection_archive---------11-----------------------

首先创建一个常识基线

由罗摩·罗摩克里希南 — 8 分钟阅读

当你着手解决一个数据科学问题时,很容易一头扎进去,开始构建模型。不要。首先创建一个常识基线。

多维数据的有效可视化艺术

到迪潘詹·萨卡尔 — 16 分钟读取

描述性分析 是与数据科学项目甚至特定研究相关的任何分析生命周期的核心组件之一。数据聚合、汇总和可视化是支持这一数据分析领域的一些主要支柱。

Python 中的股票分析

威廉·科尔森 — 11 分钟阅读

人们很容易被大量的数据和可用于数据科学的免费开源工具冲昏头脑。在花了一点时间使用了 quandl 金融库和 prophet 建模库之后,我决定尝试一些简单的股票数据探索。

各种强化学习算法介绍。第二部分(TRPO,PPO)

by 黃功詳 Steeve Huang — 10 min read

本系列的第一部分 介绍各种强化学习算法。第一部分(Q-Learning,SARSA,DQN,DDPG) I 讲述了强化学习(RL)的一些基本概念,并介绍了几种基本的 RL 算法。在本文中,我将继续讨论两种更高级的 RL 算法,这两种算法都是去年刚刚发表的。

我的数据科学和生物信息学之旅—第 1 部分:编程

由鲁本·范·帕梅尔 — 12 分钟阅读

根据 IBM 的调查,每天有 250 万兆兆字节(1⁰ ⁸)的数据产生(一台普通电脑只能容纳 1 兆字节)。现有数据的 90%是在过去两年中生成的。

机器学习零到英雄:首次在 Kaggle 上竞争所需的一切,循序渐进!

由柳文欢·达尔 — 16 分钟阅读

这篇文章将讲述我希望在一年前就知道的一切,当时我第一次决定学习更多关于数据科学的知识——它是为任何对数据科学感兴趣的人准备的,无论是作为一种爱好还是作为一种潜在的职业。

用广播和 PyTorch 加速你的 Python 代码

通过 Marko Cotra — 7 分钟读取

当我做硕士论文的时候,我花了很多时间处理大量的激光雷达数据。其中一个步骤是移除属于场景中静态对象(建筑物、栅栏等)的所有点测量。

你需要知道的数据科学概念!第一部分

迈克尔·巴伯 — 27 分钟阅读

我的背景是南部和东部非洲的大型制药公司、学术界(牛津大学物理和理论化学系的博士)和“为社会公益服务的数据科学”行业。

人工智能能否实现 10 分钟的核磁共振成像?

休·哈维 — 8 分钟阅读

MRI 机器(磁共振成像)是一头笨重的野兽。站在超过 7 英尺高,像一辆家用汽车一样宽,重量超过一吨,不断发出令人不安的滴答“嘶嘶”声,不完全是一件对病人友好的医疗设备。

如何进行数据实验室:针对大型数据集运行笔记本电脑

由郁风 G — 5 分钟读完

将大数据传输到本地计算环境既缓慢又昂贵。在这一集的人工智能冒险中,我们将看到如何将您的笔记本环境应用到您的数据中!

我们感谢 46 位帕特里翁的支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、哈比卜·巴卢瓦拉、赛赛、扎克·塞格彭、提尔塔吉约蒂·萨卡尔、安东尼·马内洛、塞加·梅尔、让·皮埃尔和迪潘詹·萨卡尔

成为✨的资助人

每周精选—2018 年 1 月 26 日

原文:https://towardsdatascience.com/weekly-selection-jan-26-2018-66e12abc1bff?source=collection_archive---------7-----------------------

使用 Tensorflow 和 Keras 进行手写识别

由 Priya Dwivedi — 4 分钟阅读

由于个人书写风格的巨大差异,手写识别(也称为按书写者对每个手写文档进行分类)是一个具有挑战性的问题。

我的深度学习之旅

通过法维奥·巴斯克斯 — 8 分钟读取。

在这篇文章中,我将分享我如何研究深度学习并使用它来解决数据科学问题。这是一个非正式的帖子,但内容有趣(我希望如此)。

机器学习新手的 10 大算法之旅

由詹姆斯·勒 — 11 分钟读完

在机器学习中,有一种东西叫做“没有免费的午餐”定理。简而言之,它指出没有一种算法对每个问题都是最好的,并且它特别适用于监督学习(即预测建模)。

-> Start Learning with Dataquest

使用 Tensorflow 对象检测在 Android 上检测皮卡丘

由胡安·德·迪奥斯·桑托斯 — 12 分钟阅读

TensorFlow 的众多功能和工具的深处,隐藏着一个名为 TensorFlow 对象检测 API 的组件。顾名思义,这个库的目的是训练一个能够识别帧中对象(例如图像)的神经网络。

在 NLP 和 CV 中应用迁移学习

由 Lars Hulstaert — 8 分钟阅读

在这篇博文中,我将讨论迁移学习的两个应用。我将概述自然语言处理和计算机视觉领域的例子。

优步司机排班优化

由伊万·周 — 12 分钟读完

优步的关键价值主张之一是为他们的司机合作伙伴提供调度灵活性。根据 Beneson Strategy Group 的一份报告,73%的司机更喜欢有一份可以让他们选择时间表的工作。

比谷歌更擅长机器学习——可能吗?

由亚伦·爱戴 — 3 分钟读完

说你在某件事上比谷歌更好是没有意义的。然而,当我对我们的面部识别技术进行测试时,我发现我们比谷歌的视觉 API 更准确。

描绘神经科学的图景

由法赫德·阿尔哈兹米 — 5 分钟读取

神经科学是一个多样化的科学领域,由不同的学科组成:生物学、心理学、计算机科学、语言学等等。脑科学的主要目标是了解神经系统。

为什么 AI 不会取代放射科医生

休·哈维 — 10 分钟阅读

2016 年末,神经网络教父杰弗里·辛顿教授表示,“很明显,我们应该停止培训放射科医生”,因为图像感知算法很快就会明显优于人类。他说,放射学家是“已经越过悬崖边缘但还没有往下看的郊狼”。

通过分享学习

由威廉·科尔森 — 4 分钟阅读

传统教育很简单:坐下,闭嘴,听老师讲课。课后去图书馆反复阅读同样的单词,试图理出我们日常生活中意义不大的抽象话题。

我们感谢 47 位帕特里翁的支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、哈比卜·巴卢瓦拉、赛赛、扎克·塞格彭、提尔塔吉约蒂·萨卡尔、帕布·帕拉尼萨米、安东尼·马内洛、让·皮埃尔和迪潘詹·萨卡尔

成为✨的资助人

每周精选—2018 年 1 月 5 日

原文:https://towardsdatascience.com/weekly-selection-jan-5-2018-76fc5287bd1c?source=collection_archive---------5-----------------------

信息规划和朴素贝叶斯

由瓦迪姆·斯莫里亚科夫 — 7 分钟阅读

信息规划包括基于信息度量做出决策。信息规划与主动学习[1]和最优实验设计[2]密切相关,其中标记数据的获取是昂贵的。

基于网络的语音命令识别

Boris Smus — 7 分钟阅读。

上次我们将音频缓冲区转换成图像。这次我们将拍摄这些图像,并使用 deeplearn.js 训练一个神经网络。结果是一个基于浏览器的演示,让你说出一个命令(“是”或“否”),并实时查看分类器的输出。

艺术风格转移

通过 Firdaouss Doukkali — 5 分钟读取。

这篇文章是关于艺术风格转移,或者你也可以称之为神经风格转移。知道深度学习可以用图像做出一些神奇的东西,很有意思。所以,我会试着让你更好地理解这个概念,以及它是如何工作的。

理解特征工程(上)——连续数值数据

由 Dipanjan Sarkar — 18 分钟读取

任何智能系统基本上都由一个端到端的管道组成,从接收原始数据开始,利用数据处理技术从这些数据中获取、处理和设计有意义的特征和属性。然后,我们通常利用统计模型或机器学习模型等技术对这些功能进行建模,然后根据手头要解决的问题,在必要时部署该模型以供将来使用。

概率概念解释:最大似然估计

由 Jonny Brooks-Bartlett — 8 分钟阅读

在这篇文章中,我将解释什么是参数估计的最大似然法,并通过一个简单的例子来演示这种方法。有些内容需要基本概率概念的知识,如联合概率的定义和事件的独立性。

人工智能,2018 年及以后的 AI

到尤金尼奥·库勒切洛 — 13 分钟阅读

这些是我对深度神经网络和机器学习在更大的人工智能领域的发展方向的看法,以及我们如何才能获得越来越多的复杂机器来帮助我们的日常生活。

将大规模枪击事件政治化——当我们可以谈论枪支管制的时候

通过 Viet Vu — 2 分钟读取

2017 年 10 月 1 日,一名枪手从拉斯维加斯一家酒店房间内射出子弹,造成 59 人死亡,546 人受伤。这是美国近代史上最致命的大规模枪击事件。在每一次大规模枪击事件后,这种叙述都变得很熟悉,几乎是照本宣科。

使用 TensorFlow 对象检测 API、ML 引擎和 Swift 构建 Taylor Swift 检测器

莎拉·罗宾逊——11 分钟阅读

注意:在撰写本文时,Swift 还没有官方的 TensorFlow 库,我使用 Swift 构建了针对我的模型的预测请求的客户端应用程序。这种情况将来可能会改变,但泰勒对此有最终决定权。

你需要知道的 10 种机器学习算法

通过 Sidath Asiri — 6 分钟读取

由于数据分析、大计算能力和云计算的发展,我们生活在一个革命性时代的开端。机器学习肯定会在那里发挥巨大作用,机器学习背后的大脑是基于算法的..

甘斯真的模拟了真实的数据分布吗,或者他们只是在巧妙地愚弄我们?

由 Gal Yona — 6 分钟读完

自 2014 年引入以来,生成对抗网络(GANs)已经成为密度估计任务的流行选择。方法很简单:GAN 框架由两个网络组成,一个用于生成新样本,另一个用于区分真实样本(来自真实数据分布)和生成的样本。

GPU 优化的动态编程

由阿努拉达·维克拉马拉奇——3 分钟阅读

我们来考虑一下 路径和:项目欧拉问题 81 ( 链接)中的两种方式 。探索解的动态编程范式和 GPU 优化是我们感兴趣的问题。

训练和可视化单词向量

由 Priya Dwivedi — 6 分钟阅读

在本教程中,我想展示如何在 tensorflow 中实现 skip gram 模型,为您正在处理的任何文本生成单词向量,然后使用 tensorboard 将它们可视化。我发现这个练习非常有用,有助于我理解 skip gram 模型是如何工作的,以及在你将它们用于 CNN 或 RNNs 之前,感受一下这些向量捕捉到的关于你的文本的关系。

GPU 优化简介

通过阿努拉达·维克拉马拉奇——5 分钟阅读

大多数涉及大量计算的任务都需要时间,随着数据集变得越来越大,这将变得更加耗时。解决这个问题的一种方法是使用线程。

看德国交通标志

由卡斯帕·弗雷登斯伦德 — 10 分钟阅读

我的意思是,当然,当我们开车穿过德国时,它们就在那里,我们(希望)确实看到了它们,有时我们甚至会记录它们的含义,并根据这些含义改变我们的行为。但是我们看那些醒目的蓝色、红色和白色的几何象形图做得还远远不够。

我们感谢 39 位 Patreon 支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、公式化、基里尔·帕纳林、赛赛、扎克·塞格彭、蒂尔塔约蒂·萨卡尔、安东尼·马内洛、纳温·蒂鲁帕图尔。

成为✨的资助人

每周精选—2018 年 7 月 13 日

原文:https://towardsdatascience.com/weekly-selection-jul-13-2018-419574fd653f?source=collection_archive---------11-----------------------

如何构建数据科学组合

由迈克尔·加拉尼克 — 17 分钟阅读

数据科学怎么找工作?了解足够的统计学、机器学习、编程等知识以便能够找到工作是很困难的。我最近发现的一件事是,相当多的人可能拥有找工作所需的技能,但没有作品集。

如何在你梦想的公司找到一份数据科学家的工作——我的 Airbnb 之旅

由彭慧丽 — 8 分钟读完

我一个月前刚开始在 Airbnb 的新工作,是一名数据科学家,我仍然觉得我在这里太幸运了。没人知道我有多想加入这家公司——我的办公桌前贴着 Airbnb 办公室的照片;我把我的 iPhone 壁纸设置成我站在 Airbnb 标志前的照片;我四次申请 Airbnb 的职位,但最后一次才收到招聘人员的回复…

学习新的数据科学语言

通过本·韦伯 — 7 分钟读取

在不断变化的数据科学工具生态系统中,您经常发现自己需要学习一门新语言,以便跟上最新的方法或更有效地与同事协作。

你可以用 R 设计一个好的图表

由以利亚·米克斯——5 分钟阅读

上周,当爱德华·塔夫特哀叹 R 无法创建带有良好标签和注释的漂亮图形时,dataviz twitter 上一片哗然。他建议,获得他在书中宣传的那种高质量图表的唯一方法是将 R 的输出导入 Adobe Illustrator,并投资于“对图形上的文字进行推理”。

不仅仅是另一篇 GAN 论文——SAGAN

通过 Divyansh Jha — 7 分钟读取

今天我要讨论一篇最近的论文,这篇论文是我读的,并提交给了我的一些朋友。我发现这篇论文的想法非常简单,我觉得像我这样对生成性敌对网络知之甚少的人都能理解。

从拓扑数据分析到深度学习:不劳无获

由丁丁·梅里尔 — 7 分钟阅读

今天,我将尝试给出一些关于 TDA(用于拓扑数据分析)的见解,这是一个快速发展的数学领域,肯定会很快完全集成到机器/深度学习框架中。

Spotify 的“这是”播放列表:50 位主流艺术家的终极歌曲分析

由詹姆斯·勒 — 15 分钟阅读

每个艺术家都有自己独特的音乐风格。从献身于木吉他的艾德·希兰,到精通说唱艺术的德雷克。从能在流行歌曲中唱一些疯狂高音的阿黛尔,到在 DJ 台上创造 EDM 魔术的 Kygo。

xkcd.com+人工智能

丹尼尔·夏皮罗博士,7 分钟阅读

这篇文章向您展示了我们如何使用数据科学、深度学习和肘部油脂来创建 xkcd.com 漫画分类器。我们可以从漫画的描述中预测漫画的主题。

我如何用 Python 和 Tkinter 构建我自己的梅西烟火秀

由 Tuan Doan Nguyen — 5 分钟阅读

我想,与其千里迢迢跑到皇后区或布鲁克林去欣赏焰火(或者挤在东河沿岸成千上万的人群中),我真的可以通过制作一些焰火模拟来增加我一天的乐趣。

每周精选—2018 年 7 月 20 日

原文:https://towardsdatascience.com/weekly-selection-jul-20-2018-e38fc1c10c6?source=collection_archive---------15-----------------------

销售员的进化:Python 的完整遗传算法教程

由艾瑞克·斯托罗兹 — 8 分钟读完

从自然选择中汲取灵感,遗传算法(GA)是一种解决搜索和优化问题的迷人方法。虽然已经有很多关于 GA 的文章(参见:这里和这里,但是很少有人展示用 Python 一步步实现 GA 来解决更复杂的问题。

为 UCI 机器学习库引入简单直观的 Python API

通过 Tirthajyoti Sarkar — 7 分钟读取

为 UCI 机器学习门户引入简单直观的 API,用户可以在其中轻松查找数据集描述,搜索他们感兴趣的特定数据集,甚至下载按大小或机器学习任务分类的数据集。

创业数据科学:模型服务

通过本·韦伯 — 10 分钟读取

为了让数据科学家在初创公司高效工作,他们需要能够构建其他团队可以使用的服务,或者产品可以直接使用的服务。例如,数据科学家不应该仅仅定义一个预测用户流失的模型,而应该能够建立一个端点,为玩家流失的可能性提供实时预测。

更快的深度学习:最优 DNN 原语

由阿里山扎塔什 — 11 分钟读完

深度神经网络(DNNs)在越来越广泛的工业应用中提供了无与伦比的准确性和性能,例如图像识别、自然语言处理和自动驾驶汽车控制等其他复杂问题。

数据科学信用风险建模简介

由 Rafael Pierre — 9 分钟阅读

在我们的上一篇文章中,我们通过分析来自 Lending Club 的贷款数据,开始使用数据科学进行信用风险建模。我们已经提出了一些可能的迹象,表明由 Lending Club 分配的贷款等级不是尽可能最优的。

赋权作为内在动力

克里斯·马莱(Chris Marais)—9 分钟阅读

有钱,有影响力的朋友,或者拥有一辆车意味着你更有权力决定你想要什么样的未来。这不一定意味着你知道哪些目标是正确的,但它肯定会让你处于一个权力的位置,在那里有许多可能的未来可供选择。

TDA 统治一切:番茄集群

通过丁丁·梅里尔 — 5 分钟读取

你想念应用数学吗?再说一次,我的目标是推广拓扑数据分析及其提供的多种可能性。前一篇文章提到了机器学习和深度学习,但 TDA 在其中的一个领域找到了用途:聚类

进步的钟摆

由彼得·斯威尼 — 20 分钟读出

人工智能会给医学带来革命还是放大其最深层的问题?

伟大假说的提出

由郑薇薇 — 8 分钟阅读

比尔和梅林达盖茨最喜欢的书真相将如何跨越你的数据科学实践

每周精选—2018 年 7 月 27 日

原文:https://towardsdatascience.com/weekly-selection-jul-27-2018-996a330c927c?source=collection_archive---------5-----------------------

马里奥 vs 瓦里奥:Python 中的图像分类

由艾里克·林森 — 8 分钟阅读

从我的学龄前时代起,我记得花了很多时间和我最喜欢的游戏机玩游戏。我最喜欢的两个平台游戏是马里奥和瓦里奥。我记得当我的祖母看了一眼我正在玩的游戏,问我那是什么。我解释说是超级马里奥。

为什么“好的数据”缺乏精确性

由莎拉胡克 — 13 分钟读取

我刚刚在斯德哥尔摩参加了 2018 年 ICML 国际机器学习大会,度过了美妙的一周。ICML 最活跃的非正式社区之一是“数据为善”社区。我们组织了几次自发的午餐,在那里我遇到了一些令人难以置信的研究人员和应用实践者。

用 Python 进行零售价格推荐的机器学习

由苏珊李 — 6 分钟读完

日本最大的社区购物应用 Mercari 深刻地认识到一个问题。他们希望向卖家提供定价建议,但这很难,因为他们的卖家可以在 Mercari 的市场上出售任何东西或任何一捆东西。

如何获得正确的数据?为什么不自讨苦吃?

由威廉·科尔森 — 6 分钟阅读

虽然数据科学的技术技能——想想用梯度推进机器建模——得到了最多的关注,但其他同样重要的通用问题解决能力可能会被忽视。

Coursera 的深度学习大师班

索汉·乔杜里 — 10 分钟阅读

《钢铁侠》上映时我才八岁,看着它让我肃然起敬。有什么不爱呢?超级英雄的技术,大胆的行动,以及小罗伯特·唐尼自大的天才让我的心怦怦直跳,眼睛死死盯着屏幕。

深度学习和土壤科学

作者 José Padarian — 7 分钟阅读
这是我致力于深度学习在土壤科学中的应用的系列文章的第一篇。我的动机是为了表明深度学习对其他事情有用,而不是对猫和狗的照片或情感进行分类。并不是说猫和狗有什么不好,但是已经有数百万个这样的例子了…

如何与数据科学撒谎

由马頔舒尔加 — 10 分钟阅读

最近,我读了达雷尔·赫夫写的《如何用统计撒谎》一书。这本书谈到了如何利用统计数据让人们得出错误的结论。我发现这是一个令人兴奋的话题,我认为它与数据科学非常相关。

前沿人脸识别比较复杂。这些电子表格使它变得更容易。

由戴夫·史密斯 — 20 分钟读取

机器学习可能很复杂……而且刚开始学的时候很吓人。另一方面,电子表格很简单。它们并不性感,但是它们去除了干扰,帮助你以直观的方式形象化代码背后发生的事情。

每周精选—2018 年 6 月 15 日

原文:https://towardsdatascience.com/weekly-selection-jun-15-2018-a3a0f3f67d99?source=collection_archive---------10-----------------------

将机器学习模型嵌入网络应用

由查敏·娜琳达 — 12 分钟读完

学习数据科学的最佳方式是实践,没有其他选择。在这篇文章中,我将反映我如何开发一个可以将电影评论分为正面或负面的机器学习模型,以及如何将该模型嵌入到 Python Flask web 应用程序中。

c++中的算法

通过 Vadim Smolyakov — 9 分钟读取

本文的目的是向读者介绍四种主要的算法范例:完全搜索、贪婪算法、分治和动态编程。许多算法问题可以映射到这四个类别中的一个,掌握每一个将使你成为一个更好的程序员。

机器学习即服务

由塞巴斯蒂安·科维亚特科夫斯基 — 9 分钟阅读

用户生成内容的爆炸式增长和归档材料的数字化产生了大量数据集,其中包含大量人就几乎每一个主题发表的意见。

数据科学中“直觉”的诅咒

通过法维奥·巴斯克斯 — 5 分钟阅读

我们习惯很快就下结论,而不分析所有方面。因此,当试图理解世界时,直觉经常失败。在这里,我提出了一个不同的系统来做数据科学,而不是“相信你的直觉”。

临床自然语言处理简介

由安德鲁龙 — 17 分钟读完

医生总是写下关于他们病人的临床记录——最初,这些记录写在纸上,锁在柜子里。对数据科学家来说幸运的是,医生现在可以在电子病历中输入他们的笔记。

创业数据科学:R - > Python

由本·韦伯 — 9 分钟读完

在我的博客系列初创公司的数据科学中,我收到的一条反馈是,对于加入初创公司的数据科学家来说,Python 将是更好的选择。如果 Python 已经是执行数据科学任务的首选语言,这就很有意义了。

数据科学的差距

基里尔·叶列缅科 — 7 分钟阅读

似乎每隔一天就有一篇关于数据科学如何成为就业前景最佳领域的新文章。无论是需求还是高薪,它看起来都是寻找工作保障的学生和寻求更高工资的工人的理想选择。

如何在数据科学竞赛中胜出——洞察力、技巧和策略

由 Christo Zonnev — 6 分钟读取

过去两天,我花了相当多的空闲时间在当前的数据科学竞赛上。在 Vidhya 的贷款预测问题。是的,睡眠比平时少了,但是学习是值得的。

每周精选—2018 年 6 月 22 日

原文:https://towardsdatascience.com/weekly-selection-jun-22-2018-b9a2af5292dd?source=collection_archive---------6-----------------------

用深度学习把堡垒之夜变成 PUBG(cycle gan)

由钦坦特里维迪 — 5 分钟阅读

如果你是一个游戏玩家,你一定听说过两个疯狂流行的皇家战役游戏,堡垒之夜和 PUBG。这是两个非常相似的游戏,100 名玩家在一个小岛上决一雌雄,直到只剩下一名幸存者。

自然语言处理从业者指南

由迪潘詹(DJ)萨卡尔 — 31 分钟读取

非结构化数据,尤其是文本、图像和视频包含了丰富的信息。然而,由于处理和分析这些数据的固有复杂性,人们通常不会花费额外的时间和精力从结构化数据集冒险出来分析这些非结构化数据源,这可能是一座潜在的金矿。

从头开始的卷积神经网络

由 Alejandro Escontrela — 13 分钟读取

著名的卷积神经网络的 NumPy 实现:迄今为止最有影响力的神经网络架构之一。

搭乘航班:使用 Networkx 和底图可视化社交网络

由 Tuan Doan Nguyen — 7 分钟阅读

今天,我将介绍非常强大的网络可视化工具——Networkx 和底图。许多有趣的问题自然来自或启发某种形式的图模型——顶点(或节点)和连接这些顶点的边之间的关系。

人工智能解决方案

维亚切斯拉夫·波隆斯基博士——8 分钟阅读

对人工智能(AI)未来的歇斯底里无处不在。关于人工智能如何治愈疾病、加速人类创新和提高人类创造力的耸人听闻的新闻并不缺乏。

Billboard Hot 100 Analytics

由玫瑰花蕾安乌里。 — 8 分钟读取

关于流行的现代音乐,你从“年长”的人那里听到的最多的是什么?总的主题是:“你的音乐声音太大,缺乏内容”。

机器学习 Kaggle 竞赛第二部分:提高

到威廉·科尔森 — 20 分钟阅读

我建议不要走“孤独的天才”之路,不仅因为它非常孤独,还因为你会错过竞争中最重要的部分:向其他数据科学家学习。

各付各的,第 2 部分:使用地理数据改进机器学习模型

由拉斐尔·皮埃尔 — 11 分钟读完

这就是数据科学的妙处之一。有时候这感觉像是一项调查工作:你需要寻找线索并把这些点联系起来。就好像真相就在那里。

数据讲述:提高洞察力到行动的转换,以获得更大的现实世界影响

由周宇 — 9 分钟读出

数据科学家有两种类型:B 型和 A 型。B 型用于构建,A 型用于分析。对应这两种类型,在数据科学项目中,我最担心两种潜在的结果。第一,模型不能进入生产系统。

超参数在起作用!第二部分—权重初始化器

由丹尼尔·戈多伊 — 17 分钟阅读

这是我关于超参数系列的第二篇文章。在这篇文章中,我将向你展示正确初始化你的深层神经网络的重要性

每周精选—2018 年 6 月 29 日

原文:https://towardsdatascience.com/weekly-selection-jun-29-2018-81be07001f73?source=collection_archive---------15-----------------------

贝叶斯统计如何说服我去健身房

由段德安阮 — 10 分钟阅读

所以有一点背景信息:我来自越南,在新加坡上高中,目前在美国上大学。我经常听到人们取笑我看起来有多小,我的体重肯定有多轻,我应该如何锻炼,去健身房,增加体重,以便拥有“更好的体格”。

开始阅读深度学习研究论文:为什么和如何

通过 Nityesh Agarwal — 8 分钟读取

在你读完那本书或完成那门令人惊叹的关于深度学习的在线课程后,你是如何继续学习的?你如何变得“自给自足”,这样你就不必依赖别人来分解该领域的最新突破?

使用 Hyperopt 在 Python 中进行贝叶斯优化的介绍性示例

由威廉·科尔森 — 9 分钟阅读

虽然寻找一个函数的最小值可能看起来很平常,但这是一个延伸到许多领域的关键问题。例如,优化机器学习模型的超参数只是一个最小化问题:这意味着搜索验证损失最低的超参数。

边缘上的深度学习

通过 Bharath Raj — 7 分钟阅读

可扩展的深度学习服务取决于几个约束。根据您的目标应用,您可能需要低延迟、增强的安全性或长期成本效益。在这种情况下,将深度学习模型托管在云上可能不是最佳解决方案。

2018 年 CVPR 十大最酷论文

由乔治·赛义夫 — 8 分钟读完

2018 年计算机视觉和模式识别大会(CVPR)于上周在美国盐湖城举行。这是计算机视觉领域的世界顶级会议。今年,CVPR 收到了 3300 份主要会议论文,接受了 979 份。超过 6500 人参加了会议,好家伙,这是史诗!

数据科学泡沫

由丹尼尔·卡罗尔 — 4 分钟读完

恐怕我有一些坏消息要告诉我的数据科学家同事;数据科学是当今公司最糟糕的投资之一。虽然单个项目可以获得 1000 倍的投资回报,但你的公司的下一个项目做到这一点的可能性几乎为零,事实上,它完全失败的可能性相当高。去年,Gartner 估计多达 85%的数据计划会失败。

创业公司的数据科学:深度学习

由本·韦伯 — 13 分钟读出

这篇博文是对使用 Keras 深度学习框架解决经典(浅层)机器学习问题的简要介绍。它展示了一个案例研究,来自我在意外之财数据公司的经历,我在那里研究一个模型,预测美国数亿套房产的房价。

快速发现可行管道

肖恩·麦克卢尔 — 22 分钟

软件开发的一个原则是尽可能自动化。这就是 DevOps 的思维模式,在这种模式下,致力于自动化有助于团队不断地推出特性,同时确保最佳实践得到尊重。

使用 Tensorflow 对象检测和 OpenCV 分析足球比赛

通过 Priya Dwivedi — 4 分钟阅读

作为数据科学家,让我们利用这个机会对足球片段进行一些分析。通过使用深度学习和 opencv,我们可以从视频剪辑中提取有趣的见解。请看下面澳大利亚和秘鲁比赛的 gif 示例,我们可以识别所有球员+裁判,足球,还可以根据球员球衣的颜色预测球员属于哪个队。所有这些都可以实时完成。

打赢不平衡数据之战

由 Rafael Pierre — 9 分钟阅读

多年来,欺诈者只是简单地从信用卡或借记卡中提取数字,并将其打印在空白塑料卡上,以便在实体店使用。但在 2015 年,Visa 和 Mastercard 强制要求银行和商户引入 EMV——芯片卡技术,这使得商户开始为每笔交易请求 PIN 成为可能。

每周精选—2018 年 6 月 8 日

原文:https://towardsdatascience.com/weekly-selection-jun-8-2018-10c21253876?source=collection_archive---------11-----------------------

Python 中的自动化特征工程

由威廉·科尔森 — 11 分钟阅读

机器学习越来越多地从手工设计的模型转向使用 H20 、 TPOT 和 auto-sklearn 等工具的自动优化流水线。这些库,以及随机搜索等方法,旨在通过在很少或没有人工干预的情况下为数据集找到最佳模型,来简化模型选择和机器学习的调整部分。

直观理解用于深度学习的卷积

通过 Irhum Shafkat — 15 分钟读取

近年来,强大而通用的深度学习框架的出现,使得在深度学习模型中实现卷积层成为可能这是一项极其简单的任务,通常只需一行代码即可实现。

用于数据科学的 Python:你可能已经忘记的 8 个概念

由康纳·杜威 — 7 分钟读完

如果你曾经发现自己在编程时一遍又一遍地查找相同的问题、概念或语法,你并不孤单。我发现自己经常这样做。

利用 FIFA 18 中的深度 Q-Learning 完善任意球艺术

通过 Chintan Trivedi — 8 分钟读取

在我的上一篇文章中,我展示了一个使用监督学习技术训练来玩国际足联游戏的人工智能机器人。通过这种方法,机器人很快学会了传球和射门等游戏的基本知识。然而,进一步改进它所需的训练数据很快变得难以收集,并且几乎没有改进,使得这种方法非常耗时。

我如何利用数据科学和机器学习在阿姆斯特丹找到一套公寓

由 Rafael Pierre — 11 分钟阅读

阿姆斯特丹的房地产市场正在经历一场令人难以置信的危机,自 2013 年以来,房地产价格以每年两位数的速度飙升。虽然房主有很多理由笑,但对那些想买房或租房的人来说就不一样了。

最好的话

通过周里昂 — 6 分钟读取

这句话是在 2015 年 12 月 30 日南卡罗来纳州竞选集会的高潮中说出的,只是我们现任总统唐纳德·j·特朗普越来越多的“特朗普主义”的又一个例子。这些声明既让唐纳德更受他的支持者的喜爱,成为他们值得信赖的总统,同时也是似乎所有其他人嘲笑的原因。

必须知道深度学习(AI)中的信息论概念

通过 Abhishek Parbhakar — 6 分钟阅读

信息论是一个重要的领域,对深度学习和人工智能做出了重大贡献,但对许多人来说却是未知的。信息论可以被视为深度学习的基本构建模块的复杂融合:微积分、概率和统计。

数学机器学习之光:理解 Word2vec 的直观指南

由 Thushan Ganegedara — 12 分钟阅读

数学机器学习系列 之光 A-Z 第三篇博文来了。这篇文章是关于 Word2vec 算法的。Word2vec 算法输出单词向量。

解释正态分布的 68–95–99.7 规则

由迈克尔·加拉尼克 — 4 分钟阅读

正态分布通常与上图中的68-95-99.7 rule相关。68%的数据在平均值(μ)的 1 个标准差(σ)内,95%的数据在平均值(μ)的 2 个标准差(σ)内,99.7%的数据在平均值(μ)的 3 个标准差(σ)内。

每周精选—2018 年 3 月 16 日

原文:https://towardsdatascience.com/weekly-selection-mar-16-2018-b8e81e1fcdba?source=collection_archive---------5-----------------------

我是如何用 Python 中的深度学习实现 iPhone X 的 FaceID 的。

由诺曼·迪帕洛 — 8 分钟阅读

新的 iPhone X 最受讨论的一个特点是新的解锁方式,TouchID 的继任者: FaceID
创造了无边框手机后,苹果不得不开发一种简单快捷的解锁手机的新方法。

k 近邻介绍

由 Devin Soni — 4 分钟读取

k-最近邻(kNN) 分类方法是机器学习中最简单的方法之一,通常是向您介绍机器学习和分类的一种很好的方式。

利用深度学习提升 FIFA 18 图形

通过 Chintan Trivedi — 6 分钟读取

游戏工作室花费数百万美元和数千个开发小时来设计游戏图形,试图使它们看起来尽可能接近现实。虽然图形在过去几年看起来非常逼真,但仍然很容易将它们与现实世界区分开来。

用 Python 控制网络

由威廉·科尔森 — 9 分钟阅读

问题:提交课堂作业需要浏览错综复杂的网页,以至于好几次我都把作业提交错了地方。此外,虽然这个过程只需要 1-2 分钟,但有时它似乎是一个不可逾越的障碍(比如当我晚上很晚才完成一项任务,而我几乎记不起我的密码)。

成为数据科学家应该知道的十种机器学习算法

作者:沙尚克·古普塔 — 9 分钟阅读

机器学习从业者性格各异。虽然其中一些是“我是 X 方面的专家,X 可以对任何类型的数据进行训练”,其中 X =某种算法,但其他一些则是“适合合适工作人员的合适工具”。

理解特征工程(四)——文本数据的深度学习方法

到迪潘詹·萨卡尔 — 29 分钟阅读

处理非结构化文本数据非常困难,尤其是当你试图构建一个智能系统,像人类一样解释和理解自由流动的自然语言时。您需要能够处理嘈杂的、非结构化的文本数据,并将其转换为任何机器学习算法都可以理解的结构化、矢量化格式。

在 BigQuery 上用纯 SQL 实现的深度神经网络

由哈里桑卡尔·哈里达斯博士 — 9 分钟阅读

在这篇文章中,我们将用 SQL 实现一个带有一个隐藏层(以及 ReLu 和 softmax 激活函数)的深度神经网络。神经网络训练的端到端步骤(包括前向传递和反向传播)将作为 BigQuery 上的单个 SQL 查询来实现。

Python 中的数据预处理:我是如何爱上并行化应用于 Dask 和 Numba 的

欧内斯特·金 — 7 分钟阅读

作为旧金山大学数据科学的研究生,我经常与数据争论。应用是我学会的许多帮助创建新要素或清理数据的技巧之一。

我们感谢 Patreon 的支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、哈比卜·巴卢瓦拉、赛赛、扎克·塞普恩、蒂尔塔约蒂·萨卡尔、帕布·帕拉尼萨米、西米恩·科斯塔迪诺夫、内森·劳伊

成为✨的资助人

每周精选—2018 年 3 月 2 日

原文:https://towardsdatascience.com/weekly-selection-mar-2-2018-f827465a384d?source=collection_archive---------4-----------------------

Join us as an Editorial Associate

数据工程初学者指南—第二部分

由罗伯特·常 — 12 分钟读完

《数据工程入门指南》第一部分 中,我解释了一个组织的分析能力是建立在一层又一层之上的。从收集原始数据和构建数据仓库到应用机器学习,我们看到了为什么数据工程在所有这些领域发挥着关键作用。

雇佣数据科学家第一步:停止寻找数据科学家。

杰西·摩尔 — 6 分钟阅读

我们正在寻找一个人来填补我们商业模式中即将到来的空白。我们不确定你会做什么,但我们确信我们的股东会喜欢我们有数据科学家的想法。

映射真实世界

通过 Pratyush More — 5 分钟读取

我们都认为我们知道世界是什么样子的。但是我们的世界地图总是反映最重要的东西吗?例如,关于中国在过去几十年中惊人的经济增长已经说了很多。

5 种快速简单的 Python 数据可视化代码

由乔治·赛义夫 — 7 分钟读完

数据可视化是数据科学家工作的一大部分。在项目的早期阶段,您通常会进行探索性数据分析(EDA ),以获得对数据的一些见解。

揭开量子门的神秘面纱——一次一个量子位

由杰森·罗尔 — 11 分钟读完

如果你想进入量子计算领域,那就别无选择:你必须掌握量子门的模糊概念。像量子计算中的一切一样,更不用说量子力学了,量子门被笼罩在一层不熟悉的术语和矩阵数学的迷雾中,这反映了量子的神秘。

找数据科学家工作的两面性

由法维奥·巴斯克斯 — 16 分钟阅读

所以你是一名数据科学家,或者你认为你离数据科学家越来越近了,你开始在这个领域找工作。我的第一个建议:耐心点!这不是一件容易的事,也许你会申请上百份工作才能得到一份。

意外后果和古德哈特定律

由威廉·科尔森 — 4 分钟阅读

为了增加收入,一个客户服务呼叫中心的经理制定了一项新政策:不再按小时计酬,而是根据每个员工打电话的次数来支付报酬。在第一周之后,这个实验似乎取得了巨大的成功:呼叫中心每天处理的电话数量增加了一倍!

机器学习从零开始:第二部分

塞巴斯蒂安·科维亚特科夫斯基 — 10 分钟阅读

非常感谢您的关注和积极反馈!我很高兴看到你们许多人认为这些材料很有用。这个系列正在逐渐发展成为一个关于应用机器学习中最重要主题的全面和独立的教程。

如何成为一个糟糕的数据科学家!

通过帕斯卡·波特文 — 4 分钟读取

所以,你想成为一名数据科学家,或者更好地说,你认为你现在是一名数据科学家,并且你已经为你的第一份工作做好了准备…我们要确保你不是我下面列出的“想成为数据科学家”的刻板印象之一,否则你很可能会在面试中遭到无数次拒绝。我不认为这是所有刻板印象的完整列表。

我们感谢帕特里翁的支持者,是他们让我们的工作成为可能😊

威廉·霍格,克里斯·塞德尔,拉梅什·沙拉姆,丹尼尔·夏皮罗,博士,文卡特·拉曼,基里尔·帕纳林,哈比卜·巴卢瓦拉,【赛赛】,扎克·塞格彭,蒂尔塔约蒂·萨卡尔,帕布·帕拉尼萨米,西米恩·科斯塔迪诺夫,

成为✨的资助人

每周精选—2018 年 3 月 23 日

原文:https://towardsdatascience.com/weekly-selection-mar-23-2018-fdb1c918691e?source=collection_archive---------10-----------------------

使用 Tensorflow 对象检测进行逐像素分类

由 Priya Dwivedi — 4 分钟阅读

过去,我使用 Tensorflow 对象检测 API 来实现对象检测,输出是图像中不同感兴趣对象周围的边界框。更多请看我的文章。

我们的 Gitter 平台上的✨实时聊天我们现在有了一个 Gitter 平台,让我们的作者们就他们即将发布的帖子交流想法和反馈。请在此加入并在#介绍频道介绍你自己!

使用 Python 中的散景进行数据可视化,第一部分:入门

威廉·科尔森 — 11 分钟阅读

如果没有交流结果的有效手段,最复杂的统计分析可能是没有意义的。我最近在我的研究项目中的一次经历让我明白了这一点,在这个项目中,我们使用数据科学来提高建筑能效。

什么是期望值?

通过 Devin Soni — 4 分钟读取

期望值是大量实验中随机变量的平均值。随机变量将数值映射到实验中每个可能的结果。

利用深度学习解决网站所有者的共性问题

通过 uKit ICO — 5 分钟读取

如果你看看这篇文章,你会发现这部分网站仍然有很大的增长潜力。增长的因素之一是当前网站建设工具的简单性。

为什么你应该开始使用。npy 文件更频繁……

由 Tirthajyoti Sarkar — 5 分钟阅读

Numpy 是数值 Python 的缩写,是 Python 生态系统中高性能科学计算和数据分析所需的基础包。它是几乎所有高级工具如 Pandas 和 scikit-learn 构建的基础。

每位数据科学家都应该阅读的五大业务相关书籍

由简·扎瓦日基 — 7 分钟读完

根据 Drew Conway 的说法,数据科学独角兽是统计、编程和商业方面的专家。虽然已经说了很多并做了很多来帮助数据科学家变得更擅长数学和编码,但这篇文章帮助数据科学家提高他们的商业思维。

deep learning . ai 课程回顾

托马斯·特里梅尔 — 14 分钟阅读

最近在 Coursera 上完成了吴恩达的 deeplearning.ai 专精的最后一门课程,想分享一下自己上这套课程的想法和体会。我发现 Arvind N 对前三门课程的评论在决定参加第一门课程时非常有用,所以我希望,也许这也能对其他人有用。

用于图像分类的增强

通过 Neerja Doshi — 5 分钟读取

在处理图像数据时遇到的一个问题是图像的不一致性(有些图像太大或太小,有些是矩形而不是正方形,等等)。另一个经常面临的问题是训练集中图像的数量,这经常导致过度拟合。

借助自然选择的音乐

通过 Irhum Shafkat — 10 分钟读取

深度生成模型的一个更有趣的问题是,模型如何在生成过程中考虑用户偏好?

我们感谢 Patreon 的支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、哈比卜·巴卢瓦拉、安娜·安尼辛、公式化、斯普林姆、赛赛赛、扎克·蒂格彭、提尔塔约提·萨卡尔、

成为赞助人 ✨

每周精选—2018 年 3 月 30 日

原文:https://towardsdatascience.com/weekly-selection-mar-30-2018-5071ebfd5fc8?source=collection_archive---------9-----------------------

这就是这么多数据科学家离职的原因

由 Jonny Brooks-Bartlett — 8 分钟阅读

是的,我是一名数据科学家,是的,你的确没看错标题,但总得有人说出来。我们读到了很多关于数据科学是 21 世纪最性感的工作的故事,以及作为数据科学家可以赚到诱人的钱的故事,这似乎是绝对的梦想工作。

在数据科学领域找一份工作可能会是什么样子

由克里斯汀·凯尔勒——9 分钟阅读

我读过一些文章,这些文章阐述了进入分析和数据科学领域有多难。这不是我的经历,所以我想分享一下。

用于深度学习的线性代数

由 Niklas Donges — 9 分钟阅读

线性代数的概念对于理解机器学习背后的理论至关重要,尤其是对于深度学习。它给你一个更好的直觉,让你知道算法到底是如何工作的,这让你能够做出更好的决定。

深度学习的“怪异”介绍

由法维奥·巴斯克斯 — 14 分钟读出

有关于深度学习的惊人介绍、课程和博文。我将在参考资料部分列出其中一些,但这是一种不同的介绍。

学习关于学习的算法

由科迪·玛丽·怀尔德 — 13 分钟读完

当我第一次听说元学习时,它的前提是一个令我陶醉的东西:建造不仅能够学习,而且能够学习如何学习的机器的项目。元学习的梦想愿望是算法能够根据性能信号修改其架构和参数空间的基本方面,算法能够在面对新环境时利用积累的经验。

深度学习最佳实践(1) —权重初始化

通过 Neerja Doshi — 7 分钟读取

作为深度学习的初学者,我意识到的一件事是,没有太多的在线文档在一个地方涵盖所有深度学习技巧。有许多小的最佳实践,从初始化权重、正则化等简单技巧到循环学习率等稍微复杂的技术,可以使神经网络的训练和调试更加容易和有效。

提升您的数据科学技能。学习线性代数。

通过 hadrienj — 7 分钟读取

本系列的目标是为希望理解足够的线性代数以适应机器学习和深度学习的初学者提供内容。不过我觉得深度学习书中关于线性代数的章节对初学者来说有点难。

自然语言处理—建立问答模型

通过 Priya Dwivedi — 7 分钟阅读。

我最近在斯坦福大学通过深度学习(CS224N)完成了一门关于 NLP 的课程,我很喜欢这种体验。学到了一大堆新东西。在我的最后一个项目中,我设计了一个基于斯坦福问答数据集(SQuAD)的问答模型。

我们感谢帕特里翁的支持者,是他们让我们的工作成为可能😊

威廉·霍格、克里斯·塞德尔、拉梅什·沙拉姆、丹尼尔·夏皮罗、博士、文卡特·拉曼、基里尔·帕纳林、哈比卜·巴卢瓦拉、安娜·安尼辛、公式化、斯普林姆、赛赛赛、扎克·蒂格彭、提尔塔约提·萨卡尔、

成为赞助人 ✨

每周精选—2018 年 3 月 9 日

原文:https://towardsdatascience.com/weekly-selection-mar-9-2018-ac6dccf969da?source=collection_archive---------13-----------------------

马尔可夫链简介

由德文·索尼 — 5 分钟读完

马尔可夫链是统计建模随机过程的一种相当常见且相对简单的方法。它们已经被用于许多不同的领域,从文本生成到金融建模。

为您的回归问题选择最佳机器学习算法

到乔治·赛义夫 — 5 分钟阅读

当处理任何类型的机器学习(ML)问题时,有许多不同的算法可供选择。在机器学习中,有一个叫做“没有免费的午餐”的定理,它基本上说明了没有一种最大似然算法对所有问题都是最好的。

超越准确度:精确度和召回率

由威廉·科尔森 — 11 分钟阅读

你会相信一个声称完全在大脑中创造了一个模型的人以超过 99%的准确率识别试图登机的恐怖分子吗?嗯,这里有一个模型:简单地给每个从美国机场起飞的人贴上非恐怖分子的标签。鉴于美国航班每年平均 8 亿乘客和2000 年至 2017 年登上美国航班的 19 名(已确认)恐怖分子,这个模型达到了惊人的 99.9999999%的准确率!

利用 GANs 对感知图像哈希的黑盒攻击

通过尼克·洛卡西奥 — 5 分钟读取

tldr: 这篇文章演示了 GANs 能够以两种关键方式破解图像哈希算法:(1) 反转攻击:从哈希合成原始图像(2) 中毒攻击:合成任意自然图像分布的哈希冲突。

通过网络抓取使用 Python 进行数据分析:使用 CIA World Factbook 进行说明

通过 Tirthajyoti Sarkar — 9 分钟阅读

在数据科学项目中,几乎总是最耗时和最混乱的部分是数据收集和清理。每个人都喜欢建立一两个很酷的深度神经网络(或 XGboost)模型,并用很酷的 3D 交互情节来展示自己的技能。但是这些模型需要原始数据作为开始,而且这些数据来的不容易也不干净。

糖尿病数据的机器学习工作流程:第 2 部分

通过lahi ru Liyanapathirana—7 分钟读取

在本系列的上一篇文章中,我们讨论了关于糖尿病数据集的机器学习工作流。并讨论了诸如数据探索、数据清洗、特征工程基础和模型选择过程等主题。你可以在下面找到之前的文章。

为什么取连续目标变量的对数?

通过 Radek Osmulski — 5 分钟阅读

数据科学是一个阴谋。

“嗨,我叫鲍勃,我是你们的教练。我将教你如何开车。打开第 147 页的书,让我们了解不同类型的排气歧管。这是基本的波义耳定律的公式……”

机器学习从零开始:第三部分

塞巴斯蒂安·科维亚特科夫斯基 — 12 分钟阅读

第 3 部分介绍了数组。这一系列高阶集合允许我们以机器学习算法可以处理的格式描述图像和文本文档。

每周精选—2018 年 5 月 11 日

原文:https://towardsdatascience.com/weekly-selection-may-11-2018-8f6774cfd7aa?source=collection_archive---------12-----------------------

用于深度学习的线性代数

由维哈尔鞍马 — 5 分钟阅读

线性代数、概率和微积分是机器学习的“语言”。学习这些主题将有助于更深入地理解底层算法机制,并允许开发新的算法。

深度学习书籍笔记:概率入门

阿德里安·卢卡斯·艾柯菲(Adrien Lucas Ecoffet)—18 分钟阅读

这些是我对深度学习这本书第三章的笔记的第一部分。它们也可以作为概率的快速入门。这些笔记涵盖了这一章的大约一半(介绍性概率的部分),后续的文章将涵盖其余部分(一些更高级的概率和信息理论)。

逻辑回归算法

通过 Niklas Donges — 7 分钟阅读

逻辑回归是用于二元分类的最常用的机器学习算法之一。这是一个简单的算法,您可以将其用作性能基线,它易于实现,并且在许多任务中表现得足够好。

利用 Tensorflow 对象检测构建自定义掩膜 RCNN 模型

通过 Priya Dwivedi — 5 分钟阅读

您现在可以使用 Tensorflow 对象检测库构建自定义遮罩 RCNN 模型!掩模 RCNN 是一个实例分割模型,可以逐个像素地识别任何对象的位置。

揭开生成对抗网络的神秘面纱

斯蒂芬·侯赛因 — 5 分钟阅读

在本教程中(源自我的原始帖子这里),你将学习什么是生成性对抗网络(gan ),而无需深入数学细节。之后,你将学习如何编写一个简单的可以创建数字的 GAN!

机器共情的深度学习:机器人和人类的互动——第一部分

由尼尔森·费尔南德斯 — 4 分钟阅读

当我们思考下一次数字革命迫在眉睫的发展时,人类将面临前所未有的自动化浪潮。越来越多的智能和互联设备将与我们共存。

使用位置敏感散列法进行快速近似重复图像搜索

按 Gal Yona — 9 分钟读取

如果你在机器学习方面受过一些教育,最近邻居这个名字可能会让你想起 k-nearest neighbors 算法。这是一个非常简单的算法,看起来实际上没有“学习”:kNN 规则只是通过训练集中 k 个最近邻中的多数标签对每个未标记的例子进行分类。

一个问题解释 AI 为什么会起作用

由彼得·斯威尼 — 20 分钟读取

请教各位驻院专家,AI 为什么会起作用?他们会很乐意解释是如何工作的,方法就像一个令人着迷的梯度下降的术语。但是为什么呢?为什么一台昂贵而高深莫测的机器会创造出我解决问题所需的知识?

每周精选—2018 年 5 月 18 日

原文:https://towardsdatascience.com/weekly-selection-may-18-2018-7c9d44b14f88?source=collection_archive---------10-----------------------

用 Python 进行无监督学习

由维哈尔鞍马 — 7 分钟阅读

无监督学习是一类机器学习技术,用于发现数据中的模式。提供给无监督算法的数据没有被标记,这意味着只有输入变量(X)被提供,而没有相应的输出变量。

如何用 Python 从零开始构建自己的神经网络

由詹姆斯·洛伊 — 6 分钟读完

作为我个人更好地理解深度学习之旅的一部分,我决定在没有 TensorFlow 这样的深度学习库的情况下,从头构建一个神经网络。我认为,理解神经网络的内部工作对任何有抱负的数据科学家都很重要。

谷歌的 AutoML 将改变企业使用机器学习的方式

由乔治·赛义夫 — 6 分钟读完

Google 的 AutoML 是一个新兴的(alpha 阶段)机器学习工具云软件套件。它基于谷歌在图像识别领域的最新研究,名为神经架构搜索 (NAS)。

Tableau 图表上的终极备忘单

由 Kate Strachnyi — 11 分钟阅读

Tableau Desktop 是一款非常棒的数据分析和数据可视化工具。它允许您立即看到您的数据(通过几次拖放)。“演示”功能非常有用,尤其是对于那些刚刚开始使用 Tableau 的人。

2018 年国际足联世界杯:数据驱动的理想球队阵容方法

by 詹姆斯·勒 — 8 分钟阅读

随着 2018 年俄罗斯世界杯的到来,世界各地的每个足球迷都渴望预测今年哪个队会赢。对于球迷来说,另一个迫在眉睫的问题是他们最喜欢的国家队应该如何排队:应该使用什么阵型?应该选哪些球员?哪些人应该留在替补席上或从锦标赛中淘汰?

3 个小而强大的卷积网络

由亚瑟·迪亚尔 — 5 分钟阅读

为了在 ImageNet 上获得最佳精度,已经开发了许多 CNN 架构。计算能力不限这个比赛,何苦呢?

使用 Tensorflow 对象检测在视频中检测皮卡丘

由胡安·德·迪奥斯·桑托斯 — 7 分钟读完

在 TensorFlow 的众多功能和工具中,有一个名为 TensorFlow 对象检测 API 的组件。顾名思义,这个库的目的是训练一个能够识别帧中对象(例如图像)的神经网络。

预测泰坦尼克号乘客的生还几率

由 Niklas Donges — 20 分钟阅读

在这篇博文中,我将介绍在著名的 Titanic 数据集上创建机器学习模型的整个过程,这个数据集被世界各地的许多人使用。它提供了泰坦尼克号上乘客的命运信息,按照经济地位(阶级)、性别、年龄和存活率进行汇总。

使用 Keras 优化超参数

通过 Mikko — 15 分钟读取

有了正确的流程,就不难为给定的预测任务找到最先进的超参数配置。在三种方法中——手动、机器辅助和算法——本文将重点讨论机器辅助。

每周精选—2018 年 5 月 25 日

原文:https://towardsdatascience.com/weekly-selection-may-25-2018-455ab14c69ca?source=collection_archive---------4-----------------------

模型解释的必要性和重要性

由迪潘然(DJ)萨卡 — 12 分钟阅读

在过去十年中,机器学习领域经历了一些显著的变化。最初只是一个纯学术和研究导向的领域,我们已经看到广泛的行业采用了不同的领域,包括零售,技术,医疗保健,科学和更多。

使用无监督学习计划巴黎之旅:地理位置聚类

由 Hamza Bendemra 博士 — 6 分钟阅读

当女朋友告诉我,她正计划和她的一个女朋友去巴黎旅行 10 天,我想我能帮上忙。

如何制作像汉斯·罗斯林一样的动画图表——全部在 R 中完成

由特里斯坦·甘瑞——5 分钟阅读

汉斯·罗斯林是统计学大师。他毕生致力于推动使用数据和动画图表来探索发展问题,并分享基于事实的世界观。

科学家工具箱中需要的 10 种数据挖掘技术

由詹姆斯·勒 — 30 分钟读完

数据科学家的核心是数学和统计学背景。出于这种数学背景,他们正在创建高级分析。在这种应用数学的极端,他们正在创建机器学习模型和人工智能。

创业数据科学:商业智能

由本·韦伯 — 17 分钟读完

在初创公司建立数据科学涉及的大量繁重工作是说服产品团队使用仪器并关心数据。如果你能够实现这个目标,下一步就是能够回答你的组织内所有关于产品健康的问题。

现实生活规划问题的强化学习

由菲利普·奥斯本 — 15 分钟阅读

最近,我发表了一些例子,其中我为一些现实生活中的问题创建了强化学习模型。例如,根据设定的预算和个人偏好使用强化学习进行膳食计划。

时序嵌套交叉验证

作者:考特尼·科克伦 — 18 分钟阅读

这篇博文讨论了对时间序列数据使用传统交叉验证的缺陷。具体来说,我们解决了 1)在不导致数据泄漏的情况下分割时间序列,2)使用嵌套交叉验证来获得独立测试集的无偏误差估计,以及 3)使用包含多个时间序列的数据集进行交叉验证。

进入文本的黑暗之心

通过周里昂 — 8 分钟读取

互联网是一个丛林。在这里,丰富的多样性和奇妙的色彩结合起来,创造了一个独特的生态系统,使新的技术和通信方法。

Google Duplex 打败图灵测试了吗?是和否

通过 Artem Oppermann — 4 分钟读取

尽管谷歌在语音人工智能领域的成就是开创性的,但有两个原因(在我看来)导致谷歌人工智能没有通过图灵测试。然而,仍然有好消息。

每周精选—2018 年 5 月 4 日

原文:https://towardsdatascience.com/weekly-selection-may-4-2018-c6293c8f2e5a?source=collection_archive---------9-----------------------

随机加权平均——一种获得深度学习最新成果的新方法

由 Max Pechyonkin — 8 分钟读取

传统的集成将几个不同的模型结合起来,并使它们对相同的输入进行预测。然后使用某种平均方法来确定系综的最终预测。

能预测你电影口味的 4 个推荐引擎

由詹姆斯·勒 — 18 分钟读完

当你下班回家的时候,你曾经不得不回答这个问题至少一次吗?至于我——是的,而且不止一次。从网飞到 Hulu,鉴于现代消费者对个性化内容的巨大需求,建立强大的电影推荐系统的需求极其重要。

行动中的超参数!介绍 DeepReplay

丹尼尔·戈多伊 — 8 分钟阅读

在我之前的帖子中,我邀请你想知道当你训练一个神经网络时,在引擎盖下到底发生了什么。然后我研究了激活函数的作用,用图和动画说明了它们对特征空间的影响。

auto mold——自动驾驶汽车专用增强库

由乌吉瓦尔·萨克森纳 — 5 分钟阅读

在 Udacity 的自动驾驶汽车纳米级课程开始不久,我就意识到,除了通常遵循的增强技术,自动驾驶汽车还需要专门的增强。无人驾驶汽车是人工智能最复杂的挑战之一,在许多方面也不同于其他挑战。

Web 抓取、正则表达式和数据可视化:全部用 Python 完成

由威廉·科尔森 — 7 分钟阅读

与大多数有趣的项目一样,这个项目以一个简单的问题开始,这个问题被半认真地问了一遍:我为我的大学校长的五分钟时间支付多少学费?在与我们学校的校长()进行了一次偶然而愉快的讨论后,我想知道我的谈话到底花了我多少钱。

如何赢得数据科学面试

克里斯汀·凯尔勒 — 7 分钟阅读

我以前写过关于我最近找工作的文章,但是这篇文章只关注面对面的面试。那一整天,试着让他们眼花缭乱,交叉你的手指,希望你已经为扔给你的东西做好了准备。

我的第一份数据科学家实习

由阿德蒙德·李 — 7 分钟读完

在写作的时候,是我在量子发明的数据科学家实习最后一天的前一天。现在,坐在笔记本电脑屏幕前,回想过去几个月的学习历程,真的很难,但也很充实。

机器学习为什么在边缘?

由 Neil Tan — 5 分钟阅读

软件工程可能很有趣,尤其是当与志同道合的人朝着共同的目标努力时。自从我们开始了微控制器(MCU)人工智能框架助理项目,许多人问我们: 为什么要在 MCU 上进行边缘计算?云与应用处理器还不足以构建物联网系统吗? 深思熟虑的问题,的确如此。

数学机器学习之光:理解 KL 散度的直观指南

由 Thushan Ganegedara — 10 分钟阅读

我正在开始一系列新的博客文章,遵循初学者友好的方法来理解机器学习中一些具有挑战性的概念。首先,我们将从 KL 散度开始。

每周精选—2017 年 11 月 10 日

原文:https://towardsdatascience.com/weekly-selection-nov-10-2017-dd0fefaf43a7?source=collection_archive---------5-----------------------

应用深度学习—第 4 部分:卷积神经网络

由阿登·德塔特 — 23 分钟阅读

卷积神经网络(CNN)无处不在。它可以说是最流行的深度学习架构。最近对深度学习的兴趣激增是由于 convnets 的巨大普及和有效性。

如何让临床人工智能技术获得监管机构批准

由休·哈维 — 12 分钟读完

医学中的人工智能正在到来,除了一个讨厌的障碍,没有什么可以阻止它。无论你是一家三人创业的小公司,还是一家价值数十亿美元的国际企业集团,你都必须通过医疗器械监管的试金石测试。

用 Python 预测员工流动率

由苏珊李 — 9 分钟读完

本文展示了一个员工离职分析项目的参考实现,该项目是使用 Python 的 Scikit-Learn 库构建的。在本文中,我们介绍了逻辑回归,随机森林和支持向量机。

B2B 高管必备的 5 种数据可视化

By Payman Taei — 6 分钟阅读

人脑是一个强大的工具,可以创造和处理大量的信息。如果你想走从页面或屏幕到大脑的最短路线,试试图像。

谷歌联合实验室——简化数据科学工作流程

由 Dmitry Rastorguev — 3 分钟读取

谷歌最近公开了其用于数据科学和机器学习工作流的内部工具,名为 Colaboratory 。虽然它非常类似于 Jupyter Notebook ,但真正的价值来自这项服务目前提供的免费计算能力。

分析科研人员的迁移

由汉娜·韩嫣 — 4 分钟读完

今天我根据 ORCID (开放研究者和贡献者 ID)数据调查了科研人员的洲际和洲际迁移。由于不是每个人都有 ORCID,该数据集最好被视为所有研究人员的定向样本,并跟踪他们最早/最新开展研究活动的国家以及他们的博士国家。

数据科学可视化 10 年

通过本·韦伯 — 6 分钟读取

我在数据科学领域的职业生涯始于十年前,当时我在加州大学圣克鲁斯分校(UC Santa Cruz)上了第一门机器学习课程。从那以后,我在各种团队中工作过,使用过许多不同的可视化工具。

每周精选—2018 年 11 月 16 日

原文:https://towardsdatascience.com/weekly-selection-nov-16-2018-241d01514a9e?source=collection_archive---------14-----------------------

全面的实践指南,将学习与深度学习中的真实世界应用相结合

由迪潘詹(DJ)萨卡尔 — 45 分钟阅读

人类有跨任务传递知识的天生能力。我们在学习一项任务时获得的知识,我们以同样的方式用来解决相关的任务。

如何用优化器更快的训练神经网络?

到皮奥特·斯卡斯基 — 11 分钟读取

当我在做最后一篇文章时,我有机会只用 Numpy 创建自己的神经网络。这是一项非常具有挑战性的任务,但同时它极大地拓宽了我对神经网络内部发生的过程的理解。

AI 犯错是谁的错?

凯西·科济尔科夫(Cassie Kozyrkov)—6 分钟阅读

别误会,我爱机器学习和 AI。但我不会盲目地信任他们,你也不应该,因为你构建有效可靠的 ML/AI 解决方案的方式是强迫每个解决方案去赢得你的信任。

时间序列预测的贝叶斯方法

丹尼尔·弗利 — 19 分钟阅读

今天我们将从头开始在 R 中实现贝叶斯线性回归,并使用它来预测美国 GDP 增长。这篇文章是基于英格兰银行关于应用贝叶斯计量经济学的非常翔实的手册。

x tensor 视觉

由狼伏尔普雷希特 — 7 分钟读完

展示一个清晰的愿景是很重要的——尤其是对于开源项目:只有一个共同的目标才能把人们聚集在一起。这就是为什么我们决定最终整理出一份文件,展示我们对 C++如何在数据科学的未来发挥重要作用的愿景,以及为什么。

井字游戏——用极大极小算法创造无与伦比的人工智能

由格雷格·苏尔马 — 6 分钟阅读

在今天的文章中,我将向你展示如何创建一个无与伦比的人工智能代理来玩经典的井字游戏。你将学习极大极小算法的概念,这种算法在人工智能、经济学、博弈论、统计学甚至哲学等领域得到了广泛而成功的应用。

建模:教授机器学习算法以交付商业价值

到威廉·科尔森 — 9 分钟读取

这些文章涵盖了应用于预测客户流失的概念和完整实现。project Jupyter 笔记本在 GitHub 上都有。

用深度学习预测职业棋手的棋步

由 Sayon Bhattacharjee—9 分钟阅读

所以我不擅长下棋。我爸爸在我小的时候教我,但我想他是那种总是让孩子赢的爸爸。为了弥补这个世界上最受欢迎的游戏之一的技能缺乏,我做了任何数据科学爱好者都会做的事情:建立一个人工智能来击败我无法击败的人。

每周精选—2017 年 11 月 17 日

原文:https://towardsdatascience.com/weekly-selection-nov-17-2017-8f91774abb10?source=collection_archive---------8-----------------------

[The "A ?】“iPhone Bug 像病毒一样传播

由尼克·洛卡西奥 — 4 分钟阅读

苹果于 11 月 1 日推出了 iOS 11.1,发布了大量问题和漏洞。但是没有什么能与 A [?] bug 在过去的一周收到了这个。

Booking.com 一位数据科学家的日记

由西康大乘 — 6 分钟读完

大约两年半前,我作为一名数据科学家加入了Booking.com,此前我在迪拜从事了 3 年的咨询工作。从咨询转向纯粹的数据科学角色是我职业生涯中的一个重大转变,事后看来,我很高兴自己做出了这个选择。

机器学习中的正则化

由 Prashant Gupta — 7 分钟读取

训练机器学习模型的一个主要方面是避免过度拟合。如果模型过拟合,精度会很低。

每个 ML 工程师都需要知道的基本算法

克里斯托弗·档案员 — 4 分钟阅读

在深度神经网络接管场景之前,机器学习作为一个领域已经存在了很长时间。这里有一个你需要知道的算法列表,这样你就可以解决任何遇到的问题。

辛顿++

由安东尼·雷佩托 — 10 分钟阅读

杰弗里·辛顿有所发现。他的机器智能模型依赖于他称为“胶囊”的神经元簇,是对我们自己的大脑如何理解世界的最好解释,因此也是对机器如何理解世界的最好解释。

理解神经网络中的目标函数。

由拉斯·赫尔斯特 — 9 分钟阅读

博客帖子经常解释优化方法,如随机梯度下降或其变体,但很少花时间解释如何为神经网络构建目标函数。为什么均方误差(MSE)和交叉熵对数损失被用作 resp 的目标函数。

info gan——生成性对抗网络第三部分

通过 Zak Jost — 6 分钟读取

在第一部分中,提交了原始 GAN 文件。第二部分对 DCGAN 进行了概述,它极大地提高了 GANs 的性能和稳定性。

人工智能从业者需要应用的 10 种深度学习方法

由詹姆斯·勒 — 13 分钟读完

过去十年,人们对机器学习的兴趣激增。你几乎每天都能在计算机科学项目、行业会议和《华尔街日报》上看到机器学习。

机器人也错了——最坏情况下的混乱映射

由克里斯·巴特勒 — 8 分钟读出

上一次计算器不按你的意愿工作是什么时候?一个人最后一次这样做是什么时候?从确定性的角度来看,像机器学习这样的算法介于这两者之间。

每周精选—2018 年 11 月 23 日

原文:https://towardsdatascience.com/weekly-selection-nov-23-2018-20f392f9282a?source=collection_archive---------9-----------------------

在 Python 中部署 Keras 深度学习模型作为 Web 应用

由威廉·科尔森 — 7 分钟阅读

建立一个很酷的机器学习项目是一回事,但归根结底,你希望其他人能够看到你的努力。当然,你可以把整个项目放在 GitHub 上,但是你的祖父母怎么知道呢?不,我们想要的是将我们的深度学习模型部署为世界上任何人都可以访问的 web 应用程序。

通过构建真实世界的应用程序掌握 Python(第一部分)

通过 Dhrumil Patel — 8 分钟读取

互联网是一个烂摊子,有时,没有合适的资源,学习一门新的编程语言可能是一项乏味的任务。在这种情况下,大多数学习者会放弃或者选择其他东西来玩。所以,在我们开始之前,让我向你保证一件事,这不是你在网上冲浪时偶然发现的任何其他“学习 python 编程”的帖子。

处理深度学习中的不平衡数据集

由乔治·赛义夫 — 6 分钟读完

并非所有的数据都是完美的。事实上,如果你能得到一个完美平衡的真实世界数据集,你将会非常幸运。大多数情况下,您的数据会有某种程度的类不平衡,这是因为您的每个类都有不同数量的示例。

文本自然语言处理介绍

由文茨斯拉夫·约尔达诺夫 — 16 分钟读完

读完这篇博客后,你会知道一些从一些文本中提取特征的基本技术,所以你可以使用这些特征作为机器学习模型的输入。

面向大众的深度学习(…和语义层)

通过法维奥·巴斯克斯 — 12 分钟阅读

深度学习现在无处不在,在你的手表里,在你的电视机里,在你的手机里,在某种程度上,在你阅读这篇文章的平台上。在这里我将谈论如何以一种非常简单的方式开始使用深度学习来改变你的业务。但是首先,你需要了解语义层。

理解二元交叉熵/对数损失:一个直观的解释

由丹尼尔·戈多伊 — 9 分钟阅读

如果你正在训练一个二进制分类器,你很可能使用二进制交叉熵/对数损失作为你的损失函数。有没有想过用这个损失函数到底是什么意思?

使用美国各州直观查看欠拟合和过拟合

由瓦伦蒂诺·康斯坦蒂努 — 8 分钟阅读

在训练预测模型时,需要牢记许多注意事项-数据如何生成的基本假设、独立变量之间的相关性、用于训练的数据份额等等。

食品配送时间预测简介

通过 Jye SR — 14 分钟读取

配送时间预测长期以来一直是城市物流的一部分,但最近精确化对于 Deliveroo、Foodpanda 和 Uber Eats 等按需配送食品的服务变得非常重要。

超越单词嵌入第 4 部分——将语义结构引入神经自然语言处理

由亚伦(阿里)博恩施泰因 — 7 分钟读完

自从 word2vec 的出现,神经单词嵌入已经成为在 NLP 应用中封装分布式语义的常用方法。本系列将回顾使用预训练单词嵌入的优点和缺点,并演示如何将更复杂的语义表示方案(如语义角色标记、抽象意义表示和语义依赖解析)整合到您的应用程序中。

每周精选—2017 年 11 月 24 日

原文:https://towardsdatascience.com/weekly-selection-nov-24-2017-a2fda1650c9f?source=collection_archive---------2-----------------------

估计深度神经网络的最佳学习速率

由帕维尔·苏梅诺克 — 6 分钟阅读

在这篇文章中,我将描述一个简单而强大的方法来找到一个合理的学习率,这是我从 fast.ai 深度学习课程中学到的。我正在旧金山大学亲自学习这门课程的新版本。

揭开“EM 路由矩阵胶囊”的神秘面纱第 1 部分:概述

通过 Sahaj Garg — 13 分钟读取

最近,深度学习之父之一的杰弗里·辛顿(Geoffrey Hinton)发表了一项革命性的计算机视觉架构,在机器学习界掀起了波澜:胶囊网络。Hinton 自 2012 年以来一直在推动使用胶囊网络,此前他首次革命性地使用卷积神经网络(CNN)进行图像检测,但直到现在他才使它们变得可行。

公司级仪表盘的三个常见错误

由克里斯·道塞特 — 4 分钟阅读

公司级仪表板很特殊。他们掌握着所有部门和业务领域最重要的关键绩效指标(KPI)。

对贾哈和托普的 JAMA《适应人工智能》的思考

伦纳德·达沃利奥博士——6 分钟阅读

当记者写下人工智能在医疗保健领域的颠覆性力量时,他们往往会专注于放射学和病理学,这是有充分理由的。这两项交易都涉及从可量化的图像数据中解读模式——在从面部识别到热狗分类的几项研究和商业应用中,人工智能已经证明了这一点。

创建更有说服力的图表的 5 个数据故事技巧

由 Payman Taei — 9 分钟阅读

与数字打交道通常不被认为是一份性感的工作。毕竟,像会计和数据录入这样的职业在这个数字时代并不是最令人兴奋的职业。

强化学习:怪癖

多米尼克·蒙恩(Dominic Monn)—3 分钟阅读

作为实习的一部分,我一直在各种 OpenAI Gym 环境中应用 A3C 和 GA3C 算法的变体。在此之前,除了一些入门课程,我没有任何广泛的强化学习经验,所以这对我来说很新鲜。

为什么您应该忘记数据科学代码的“for-loop ”,而接受矢量化

通过 Tirthajyoti Sarkar — 4 分钟读取

我们都使用 for-loops 来完成大部分需要在一长串元素上迭代的任务。我敢肯定,几乎所有正在阅读这篇文章的人,都是在高中或大学时使用 for 循环编写了他们的第一个矩阵或向量乘法代码。

吴恩达的计算机视觉— 11 个经验教训

瑞安·施罗特——6 分钟阅读

我最近在 Coursera 上完成了吴恩达的计算机视觉课程。Ng 在解释优化任何计算机视觉任务所需的许多复杂想法方面做得非常出色。

我们能不能不要再用单词云了

由 Claire Lesage — 5 分钟阅读

自然语言处理中有很多有趣的、更科学的问题,但我今天在这里只是和大家分享一个观点。词云是一流的丑陋。

每周精选—2017 年 11 月 3 日

原文:https://towardsdatascience.com/weekly-selection-nov-3-2017-c7f7d2eaddc2?source=collection_archive---------10-----------------------

45 种激活数据科学职业生涯的方法

由基里尔叶列缅科 — 8 分钟阅读。

我们询问了 LinkedIn 小组成员,他们在成为成熟的数据科学家时面临的最大挑战是什么。一些最常见的挫折是:不知道从哪里开始,缺乏经验,无法形成网络,难以联系到合适的人。

Watch #DSFORALL with Nate Silver, Tricia Wang and others.

一个数据科学工作流程

到 Aakash Tandel — 13 分钟读取。

没有解决数据科学问题的模板。路线图会随着每个新数据集和新问题而变化。但是我们确实在许多不同的项目中看到类似的步骤。

数据科学家需要掌握的 10 项统计技术

由詹姆斯·勒 — 15 分钟读完。

不管你站在数据科学性感的立场上,都不可能忽视数据的持续重要性,以及我们分析、组织和联系数据的能力。

张量流入门(第一部分)

由纳拉辛哈·普拉桑娜·HN—7 分钟阅读。

Tensorflow 是广泛用于实现机器学习和其他涉及大量数学运算的算法的库之一。

建立分析文化

由乔治·克拉萨达斯 — 7 分钟阅读。

“大数据时代”的数据可用性大幅提高。公司通常会积累大量复杂的数据,描述越来越多的业务活动。

机器学习遇上时尚

由郁风 G — 5 分钟读完。

在《人工智能历险记》的这一集中,我们将尝试把整个机器学习工作流程整合成一个流程,从我们之前的剧集中汲取最佳实践。这是一个很大的材料,但我认为我们可以做到这一点!

每周精选—2018 年 11 月 30 日

原文:https://towardsdatascience.com/weekly-selection-nov-30-2018-ee503959b8d4?source=collection_archive---------13-----------------------

使用 Tensorflow 对象检测控制第一人称射击游戏

由钦坦·特里维迪 — 4 分钟阅读

不久前,我偶然发现了这个非常有趣的项目,在这个项目中,文章的作者使用一个网络摄像头来玩名为《真人快打》的经典格斗游戏。他利用卷积神经网络和递归神经网络的组合来从他的网络摄像头记录中识别踢和打的动作。

让你的神经网络说“我不知道”——使用 Pyro 和 PyTorch 的贝叶斯神经网络

由 Paras Chopra — 17 分钟阅读

构建图像分类器已经成为新的“hello world”。还记得你第一次遇到 Python 的那一天,你的打印“hello world”感觉很神奇吗?几个月前,当我跟随 PyTorch 官方教程并为自己构建了一个简单的分类器时,我也有同样的感觉。

Python 功耗分析简介

通过 Eryk Lewinson — 7 分钟读取

如今,许多公司——网飞、亚马逊、优步和 T21,还有一些更小的公司——不断地进行实验(A/B 测试),以测试新功能并实现那些用户认为最好的功能,并最终带来收入增长。数据科学家的角色是帮助评估这些实验,换句话说,验证这些测试的结果是否可靠,是否可以/应该在决策过程中使用。

3 种常见的数据科学职业转变,以及如何实现这些转变

由杰瑞米·哈里斯 — 7 分钟阅读

当我学习物理的时候,我经常需要在谷歌上查找听起来很奇怪的技术术语。当我这样做的时候,第一个点击往往是维基百科的一篇文章。

使用 NLP 算法人性化客户投诉

通过 Vishal Morde — 8 分钟读取

去年圣诞节,我经历了作为消费者最沮丧的经历。我正在做一些最后一分钟的假日购物,在排了很长的队后,我终于到达了受祝福的收银台,却发现我的借记卡被封了。

用 Python 进行强化学习

由维哈尔鞍马 — 12 分钟读取

强化是一类机器学习,其中代理通过执行动作来学习如何在环境中行为,从而得出直觉并看到结果。在本文中,您将学习理解和设计一个强化学习问题,并用 Python 来解决。

使用 FastAI 和即时频率变换的音频分类

约翰·哈特奎斯特 9 分钟阅读

虽然深度学习模型能够帮助解决许多不同类型的问题,但图像分类是课程和框架最普遍的例子,通常充当“你好,世界”的介绍。

图论—历史&概述

由耶稣·纳胡拉 — 4 分钟阅读

也许这是一种直觉,用图来分析系统会增加我对分散式和集中式网络的理解。我这个数学家看到了明确的网络分析是如何极大地有利于激励驱动系统的研究的。

每周精选—2018 年 11 月 9 日

原文:https://towardsdatascience.com/weekly-selection-nov-9-2018-25b26b120302?source=collection_archive---------18-----------------------

为什么你不应该成为数据科学通才

由杰瑞米·哈里斯 — 6 分钟阅读

我在一家数据科学导师初创公司工作,我发现有一条建议是我反复给有抱负的学员的。这真的不是我所期望的。

我的秘制酱料将在一场纸牌比赛中名列前 2%

通过阿沛·帕瓦尔 — 7 分钟阅读

在 kaggle 比赛中竞争是有趣和令人上瘾的!在过去的几年里,我开发了一些标准的方法来探索功能并建立更好的机器学习模型。

5 份数据科学总结

凯西·科济尔科夫(Cassie Kozyrkov)—7 分钟

本着团队合作的精神, Next Rewind 视频系列要求一群人从 Google Cloud Next SF 2018 中挑选五个最喜欢的演讲,并在不超过五分钟的时间内对着镜头进行讨论。

预测工程:如何设置你的机器学习问题

威廉·科尔森 — 9 分钟阅读

这些文章将涵盖应用于预测客户流失的概念和完整实现。project Jupyter 笔记本在 GitHub 上都有。

轻松调度:Python 成本优化教程

由艾瑞克·斯托罗兹 — 6 分钟读出

恭喜你!你是镇上最酷商店的骄傲的新主人。为了保持运营,您需要确保为每个班次安排了正确数量的工人。在本教程中,我们将为即将到来的一周设计最低成本的时间表。

我在找房子,所以我用 Python 做了一个 web scraper!

由法比奥·内维斯 — 8 分钟阅读

几个月后,我将不得不离开我租的公寓,去找一个新的。尽管这种经历非常痛苦,尤其是当房地产泡沫即将出现时,我决定将它作为提高我的 Python 技能的又一个激励!最后,我希望能够做两件事

使用 3D 可视化调整 ML 模型中的超参数

由 Xoel López Barata — 6 分钟读取

想象一下,你正试图为 Kaggle 的 Rossmann 商店销售竞争开发一个解决方案。你已经做了大量的功能工程,并创造了大量的新变量,这可能有助于你更好地预测未来的销售。

用 RNNs 进行时间序列预测

通过Marek galo VI—6 分钟阅读

在这篇文章中,我想给你一个我建立的预测时间序列数据的 RNN 模型的概述。这项工作的主要目标是设计一个模型,该模型不仅可以预测下一个时间步,还可以生成一系列预测,并利用多个行驶时间序列以及一组静态(标量)特征作为其输入。

每周精选—2018 年 10 月 12 日

原文:https://towardsdatascience.com/weekly-selection-oct-12-2018-4dcff99d33e?source=collection_archive---------21-----------------------

熵是不确定性的量度

由塞巴斯蒂安·科维亚特科夫斯基 — 9 分钟阅读

假设你正在医生办公室的候诊室里与三个病人交谈。他们三人都刚刚完成了一项医学测试,经过一些处理后,得出两种可能的结果之一:疾病要么存在,要么不存在。

可以对你的时尚图片进行分类的 4 种卷积神经网络模型

由詹姆斯·勒 — 12 分钟读完

买衣服是一件很累人的事情。我的眼睛被太多的信息轰炸。销售、优惠券、颜色、蹒跚学步的孩子、闪烁的灯光和拥挤的过道只是传递给我的视觉皮层的所有信号的几个例子,不管我是否积极地试图注意。

没有学位如何学数据科学

由 Jason Jung — 7 分钟阅读

我想告诉你如何在没有学位的情况下(或者免费)成为一名数据科学家/机器学习工程师。具有讽刺意味的是,我有一个学位——甚至是为数据科学而设的(西北大学的分析硕士学位)。

利用 Spark 进行大规模图形挖掘

按 Win Suen — 8 分钟读取

如果您是一名工程师,您很可能使用过图形数据结构来实现搜索和查找算法。你也用它们来解决机器学习问题吗?

出租车如何算出车费?—预测纽约市出租车价格

由苏珊李 — 5 分钟读完

预测出租车价格肯定没有预测机票价格那么红火。然而,由于我们目前没有可用的机票价格公开数据,为什么不从预测出租车价格开始练习呢?

如何使用 Python、Geopandas 和 Matplotlib 制作 gif 地图

由本杰明·库利 — 7 分钟阅读

作为一种语言,Python 非常灵活。这使得有时仅用几行代码就可以实现许多不同的可视化。但是现在有了这么多不同的图表网站和软件,为什么还要写代码呢?

政策梯度的直观解释—第 1 部分:强化

Adrien Lucas Ecoffet — 13 分钟阅读

这是一系列教程的第 1 部分,我希望有 2 或 3 部分。下一部分将讨论 A2C,如果时间允许,我希望能完成一部分关于各种形式的政策外政策梯度的讨论。

Matplotlib 终极指南

通过 Julia Kho — 6 分钟阅读

本文是关于如何自定义 Matplotlib 绘图的常见问题和答案的汇编。这是快速 Matplotlib 绘图的一个很好的备忘单,而不是 Matplotlib 库的介绍。

口红推荐的协作嵌入

通过 Sylvain Truong — 10 分钟阅读

对于一家电子商务公司来说,花时间和精力去了解客户行为,对客户和公司本身来说都是一种双赢的策略。

出于性能考虑,停止使用 pip 安装 Tensorflow!

由迈克尔阮 — 2 分钟阅读

停止使用 pip 安装 Tensorflow!用康达代替。如果你不知道 conda 是什么,它是一个跨平台运行的开源包和环境管理系统。

每周精选—2018 年 10 月 19 日

原文:https://towardsdatascience.com/weekly-selection-oct-19-2018-15b95f1a09cf?source=collection_archive---------10-----------------------

自学习人工智能代理第一部分:马尔可夫决策过程

由 Artem Oppermann — 11 分钟阅读

深度强化学习正在兴起。近年来,深度学习的其他子领域没有被研究人员和全球大众媒体谈论得更多。深度学习中的大多数杰出成就都是由于深度强化学习而取得的。

人工智能入门终极指南

到卡西·科济尔科夫 — 16 分钟读完

许多团队试图在计算出期望的输出和目标之前,通过钻研算法和数据来启动应用人工智能项目。不幸的是,这就像在纽约市的公寓里养了几年小狗,然后惊讶于它不能为你放羊。

好奇心驱动的学习变得简单

由托马斯·西蒙尼尼 — 9 分钟阅读

近年来,我们在深度强化学习方面看到了很多创新。从 2014 年的 DeepMind 和 Deep Q 学习架构,到 2018 年的 OpenAI 用 OpenAI five 玩 Dota2,我们生活在一个令人兴奋和充满希望的时刻。

要想被聘为数据科学家,不要人云亦云

由杰瑞米·哈里斯 — 5 分钟阅读

我还记得我哥哥决定卖掉他的比特币的那一刻。那是 2017 年,我们在星巴克。一位中年妇女向我们走来,她正在向任何愿意接受的人分发小册子。顶部用粗体字写着“比特币:提前退休之路”。

使用 OpenCV 和 Tensorflow 实时查找停车位置

由 Priya Dwivedi — 6 分钟阅读

有多少次你开车在停车场转来转去寻找停车位。如果你的手机能告诉你最近的停车位在哪里,那该有多方便啊!

微型杀伤性武器:我们的“喜欢”如何劫持民主

由戴夫·史密斯 — 23 分钟读完

点击“喜欢”是我们大多数人不假思索就会做的事情。这是一种社会货币,它给我们短暂的震动,并加速我们的多巴胺中心。然而,谁知道我们所有的“喜欢”会预测我们的个性,并变成反对我们的政治说服工具呢?

用人口普查收入数据预测学校表现

到 Sayon Bhattacharjee — 11 分钟阅读

我小时候,我们家经常搬家。出于这个原因,我的父母一直在考虑找一个合适的社区居住。有几个因素影响了这个决定,但对于忧心忡忡的父母来说,有一个主导因素:一所好学校。

金融市场的平稳性和记忆性

Yves-Laurent Kom Samo — 16 分钟阅读

平稳性和时间序列的可预测性是时间序列记忆的一个特例,是量化投资过程的基本概念。然而,正如最近出版的《金融机器学习的进步》一书的第五章所证明的,这些经常被从业者和研究者误解。

每周精选—2018 年 10 月 26 日

原文:https://towardsdatascience.com/weekly-selection-oct-26-2018-59ffd3fbfb83?source=collection_archive---------13-----------------------

数据科学家需要了解的 5 个基本统计概念

由乔治·赛义夫 — 9 分钟阅读

当执行数据科学(DS)的艺术时,统计学可以是一个强有力的工具。从高层次的角度来看,统计是使用数学对数据进行技术分析。

人工智能对人类智能的洞察

通过穆罕默德·阿里坎·诺扬 — 8 分钟阅读

自从图灵设想思维机器以来,人工智能(AI)和人类智能之间的比较一直是一场激烈的辩论

从预先训练的模型中转移学习

由佩德罗·马塞利诺 — 14 分钟读完

深度学习正在快速成为人工智能应用的关键工具(LeCun et al. 2015)。例如,在计算机视觉、自然语言处理和语音识别等领域,深度学习已经产生了显著的成果。

在没有大数据的 NLP 中应用深度学习的经验教训

由约纳坦·哈达尔 — 10 分钟阅读

作为一名数据科学家,你最重要的技能之一应该是为你的问题选择正确的建模技术和算法。几个月前,我试图解决一个文本分类问题,即对哪些新闻文章与我的客户相关进行分类。

用 Python 构建 ETL 管道

丹尼尔·弗利 — 8 分钟阅读

在我的上一篇帖子中,我讨论了我们如何设置一个脚本来连接 Twitter API 并将数据直接传输到数据库中。今天,我将向大家展示我们如何访问这些数据并对其进行分析,实际上是从头到尾创建一个完整的数据管道。

文本预测器——用递归神经网络生成说唱歌词

由格雷格苏尔马 — 12 分钟阅读

在今天的文章中,我将向您介绍 递归神经网络 (RNNs)的主题,它将允许我们训练代理学习文本、音频、视频等序列数据。

neural funk——结合深度学习和声音设计

通过最大 Frenzel — 21 分钟读取

很长一段时间以来,我一直想把我对音乐的热情与我在人工智能领域的工作结合起来。但我一直拖着。我觉得在尝试让深度学习参与这个过程之前,我需要首先提高我的音乐制作技能。

使用 Apache Spark SQL 和数据框架的大规模 SQL——概念、架构和示例

由迪潘詹(DJ)萨卡尔 — 21 分钟阅读

不管大肆宣传以及通常被称为‘NoSQL’数据库的新型数据库的出现,关系数据库将会一直存在。原因很简单,这些数据库强制执行基本的结构和约束,并提供了一种很好的声明性语言来查询我们喜欢的数据——SQL!

我如何利用自己的社交媒体数据

杰西·史密斯 — 5 分钟阅读

大约两年前,我参加了第一次数据科学入门课程。在我注册的十周时间里,我学会了如何收集数据,修改数据,分析数据,可视化数据,并将其粘贴到机器学习算法中。

每周精选—2018 年 10 月 5 日

原文:https://towardsdatascience.com/weekly-selection-oct-5-2018-6f07cbdb199d?source=collection_archive---------19-----------------------

超越 DQN/A3C:高级强化学习调查

由徐雅欣 — 17 分钟阅读

关于深度强化学习,我最喜欢的一点是,与监督学习不同,它真的,真的不想工作。用神经网络解决计算机视觉问题可能会让你达到 80%的目标。

通过采样进行迭代初始质心搜索,用于 k 均值聚类

马修·梅奥 — 8 分钟阅读

在这篇文章中,我们将着眼于使用迭代方法来搜索 k-means 聚类的一组更好的初始质心,并且将通过在我们的完整数据集的样本上执行这个过程来实现。

解决多臂强盗:epsilon-greedy 和 Thompson 采样的比较

由康纳·麦克唐纳 — 12 分钟读完

多臂土匪(MAB)是决策科学中的一个经典问题。实际上,它是不确定条件下的最优资源配置之一。这个名字来源于老式的吃角子老丨虎丨机,通过拉一只手来操作——它们被称为强盗,因为它们抢劫玩它们的人。

为什么机器能打得过马里奥却打不过口袋妖怪?

由 Shayaan Jagtap — 5 分钟阅读

到现在为止,你可能已经听说过机器人以超人的水平玩视频游戏。这些机器人可以被显式编程,以设定的输出对设定的输入做出反应,或者 学习 进化 ,以不同的方式对相同的输入做出反应,以期找到最佳反应。

神经网络嵌入解释

作者:威廉·科尔森 — 8 分钟阅读

近年来,神经网络的应用从图像分割到自然语言处理再到时间序列预测都有了很大的发展。深度学习的一个显著成功的应用是嵌入,这是一种用于将离散变量表示为连续向量的方法。

卷积:探索一个熟悉的算子的深层根源

由科迪·玛丽·怀尔德 — 10 分钟阅读

在现代机器学习的世界中,卷积算子占据着奇怪的位置:它对任何一个读过 2012 年以来的神经网络论文的人来说都非常熟悉,同时也是一个对其更深层次的数学基础往往知之甚少的对象。

驾驭无限创造力的机器想象力

休·哈维 — 9 分钟阅读

没有数据,人工智能什么都不是。就像一个人被锁在一个白色无声的房间里努力理解外部世界一样,没有某种输入,人工智能是不可能实现的。

使用 Tensorflow 试验 twitter 数据

由戈加·帕塔尔卡齐什维利 — 9 分钟阅读

机器学习和人工智能最吸引人的地方在于,通过使用它们,它让我们有可能开始重新思考一切——你可以从完全不同的角度看待一切,我认为,有时这种“重新思考”的事实是新发明的关键。

每周精选—2018 年 9 月 14 日

原文:https://towardsdatascience.com/weekly-selection-sep-14-2018-f60564d8fdfe?source=collection_archive---------10-----------------------

数据科学技能:使用 python 进行网页抓取

由凯瑞·帕克 — 9 分钟阅读

作为一名数据科学家,我在工作中接受的第一批任务之一就是网络搜集。这在当时对我来说是一个完全陌生的概念,使用代码从网站收集数据,但这是最符合逻辑和最容易获得的数据来源之一。

当贝叶斯、奥卡姆和香农一起定义机器学习的时候

通过 Tirthajyoti Sarkar — 10 分钟读取

有点令人惊讶的是,在所有机器学习的热门词汇中,我们很少听到一个短语将统计学习、信息论和自然哲学的一些核心概念融合成一个三个词的组合。

多维数据有效可视化的图形语法综合指南

由迪潘詹(DJ)萨卡尔 — 11 分钟阅读

可视化多维数据是一门艺术,也是一门科学。由于我们的二维(2-D)渲染设备的限制,随着维度数量的增加,在两个以上的数据维度(属性或特征)上构建有效的可视化开始变得具有挑战性。

冻结 Keras 模型

由约瑟夫·布洛克 — 7 分钟读完

Keras 已经成为工业界和学术界开发和测试神经网络的主要 API 之一。由于其各种后端可能性,它结合了用户友好的语法和灵活性,这意味着你可以用 TensorFlow,Theano 或 CNTK 编写并在 Keras 中调用它。

又一次机器学习演练和挑战

威廉·科尔森 — 15 分钟阅读

在花费大量时间和金钱学习课程、书籍和视频后,我得出了一个结论:学习数据科学最有效的方法是做数据科学项目。阅读、倾听和记笔记是有价值的,但是直到你解决了一个问题,概念才从抽象固化为你有信心使用的工具。

解决在现实世界中部署人工智能系统的最后一英里问题

由伊恩肖 — 10 分钟读完

最后一英里的问题是实现人工智能承诺的价值的最后障碍。获得人工智能系统的好处需要的不仅仅是坚实的商业案例、执行良好的人工智能实现和强大的技术栈。

使用深度学习创建混合内容协作电影推荐器

由亚当·莱恩贝里和克莱尔·隆戈 — 11 分钟阅读

在这篇文章中,我们将描述我们如何使用深度学习模型来创建一个利用内容和协作数据的混合推荐系统。这种方法首先分别处理内容和协作数据,然后将两者结合起来产生一个两全其美的系统。

深度学习热潮背后的真正原因

由 Ganes Kesari — 6 分钟读取

一方面,我们有数据科学从业者对此赞不绝口,每个人和他们的同事都投身于学习,并从这项被认为是改变游戏规则的分析技术中发展出自己的事业。

每周精选—2018 年 9 月 21 日

原文:https://towardsdatascience.com/weekly-selection-sep-21-2018-27e2659deba7?source=collection_archive---------9-----------------------

从无到有:50 行 Python 中的 AI 平衡术

由麦克施 — 11 分钟读完

大家好!今天我想展示如何用 50 行 Python 语言教会一台机器平衡一根杆子!我们将使用标准的开放体育馆作为我们的测试环境,并且只用 numpy 创建我们的代理

深度学习语义分割:指南和代码

乔治·赛义夫 — 11 分钟阅读

深度学习和计算机视觉社区的大多数人都明白什么是图像分类:我们希望我们的模型告诉我们图像中存在什么单个对象或场景。分类很粗,层次很高。

使用 Keras 构建深度学习模型

通过 Eijaz Allibhai — 9 分钟阅读

深度学习是机器学习中越来越受欢迎的子集。深度学习模型是使用神经网络构建的。神经网络接受输入,然后使用训练期间调整的权重在隐藏层中处理这些输入。

深度学习框架 Power Scores 2018

由杰夫·黑尔 — 10 分钟读完

深度学习仍然是数据科学中最热门的事情。深度学习框架正在快速变化。就在五年前,除了阿诺之外,其他领导人都不在。

制作动画图的简单方法

通过 Piotr Skalski — 5 分钟阅读

在我最新的文章发表后,许多人向我询问如何用 Python 制作动画图表的技巧。事实上,经常会出现静态图表已经不够用的情况,为了说明我们正在处理的问题,我们需要更强大的工具。

身无分文如何学习数据科学

由 Harrison Jansma — 9 分钟阅读

去年,我自学了数据科学。我从数百个网上资源中学习,每天学习 6-8 个小时。同时在一家托儿所拿最低工资。

循环神经网络图解指南

由迈克尔阮 — 9 分钟阅读

嗨,欢迎来到循环神经网络图解指南。我是迈克尔,也被称为学习矢量。我是人工智能语音助手领域的机器学习工程师。如果你刚刚开始学习 ML,并且想获得递归神经网络背后的一些直觉,这篇文章是为你准备的。

Leuk Taal:通过数据科学(和艺术)学习一门新语言

拉斐尔·皮埃尔

我坚信,通过学习一个国家的语言,你可以对这个国家及其人民有更多的了解。当我开始学习荷兰语时,我惊讶地发现这种语言反映了荷兰人是多么的直接和客观。

每周精选—2018 年 9 月 28 日

原文:https://towardsdatascience.com/weekly-selection-sep-28-2018-c97347c43c18?source=collection_archive---------5-----------------------

维基百科数据科学:与世界上最大的百科全书合作

由威廉·科尔森 — 17 分钟阅读

维基百科是现代人类最令人印象深刻的创造之一。谁会想到在短短几年内,匿名的免费贡献者可以创造出有史以来最大的在线知识来源?

LSTM 和 GRU 图解指南:一步一步的解释

由迈克尔阮 — 10 分钟阅读

在这篇文章中,我们将从 LSTM 和 GRU 背后的直觉开始。然后我会解释让 LSTM 和 GRU 表现如此出色的内部机制。如果你想了解这两个网络的内幕,那么这篇文章就是为你准备的。

神经网络预测市场

通过 Vivek Palaniappan — 8 分钟阅读

机器学习和深度学习已经成为量化对冲基金常用的新的有效策略,以实现利润最大化。作为一名人工智能和金融爱好者,这是一个令人兴奋的消息,因为它结合了我感兴趣的两个领域。

企业难以采用深度学习的 5 个原因

由 Ganes Kesari — 5 分钟读取

所以,你已经听说了关于深度学习的令人眼花缭乱的推销,并且想知道它是否在生产中实际有效。企业面临的首要问题是,永久商业利益的乐土是否会成为现实。

如何用 Python 快速测试几十个深度学习模型

托马斯·西哈 — 5 分钟阅读

优化机器学习(ML)模型不是一门精确的科学。最佳模型架构、优化算法和超参数设置取决于您正在处理的数据。

初学者卷积神经网络:Python 和 Keras 实用指南

由乔迪托雷斯。AI — 20 分钟读取

在这一点上,我们准备处理另一种类型的神经网络,即所谓的卷积神经元网络,广泛用于计算机视觉任务。这些网络由一个输入层、一个输出层和几个隐藏层组成,其中一些是卷积的,因此得名。

多类文本分类模型的比较和选择

由苏珊李 — 7 分钟阅读

当使用给定的数据集处理监督机器学习问题时,我们尝试不同的算法和技术来搜索模型以产生一般假设,然后对未来实例做出最准确的预测。

以下是如何使用 Python 将数据预处理速度提高 2-6 倍的方法

由乔治·赛义夫 — 5 分钟阅读

Python 是所有机器学习的首选编程语言。它易于使用,有许多奇妙的库,使处理数据变得轻而易举!但是,当我们处理大量数据时,事情就变得更加棘手了…

我为什么称自己为数据科学家?

通过法维奥·巴斯克斯 — 7 分钟阅读

被称为“21 世纪最性感的工作”在这里,我将讨论我成为数据科学家的原因,而不是炒作。

参见机器人游戏:探索人类和机器的好奇心

由诺曼·迪帕洛 — 9 分钟阅读

从生存的角度来看,驱动动物和人类的主要生物需求并没有特别大的区别。人类和动物需要吃和喝才能生存,需要庇护,他们有一种繁殖的冲动,以保持物种的生存。但是,很明显,人类和动物的行为完全不同。

每周精选—2018 年 9 月 7 日

原文:https://towardsdatascience.com/weekly-selection-sep-7-2018-8d2b0e9f1a87?source=collection_archive---------12-----------------------

数据科学写作的实用建议

由威廉·科尔森 — 10 分钟阅读

写作是每个人都想做的事情,但是我们经常发现很难开始。我们知道,写关于我们的数据科学项目的文章可以提高我们的沟通能力,打开大门,让我们成为更好的数据科学家,但是我们经常纠结于我们的文章不够好或者我们没有必要的背景/教育。

递归神经网络:语言建模的发电站

由詹姆斯·勒 — 12 分钟读完

大学三年级春季学期,我有机会去丹麦哥本哈根留学。在此之前,我从未去过欧洲,所以我非常兴奋地沉浸在一种新的文化中,结识新的人,去新的地方旅行,最重要的是,遇到一种新的语言。

概率概念讲解:概率规则

乔尼·布鲁克斯-巴特利特——5 分钟阅读

当我撰写本系列的介绍性文章时,我介绍了一些基本的概率概念(边际概率、条件概率和联合概率、独立性和互斥性,以及组合概率的“与”和“或”规则)。

深度学习和土壤科学(第一部分、第二部分)

由何塞·帕达里安 — 7 分钟阅读

这是我致力于深度学习在土壤科学中的应用的系列文章的第一篇。我的动机是为了表明深度学习对其他事情有用,而不是对猫和狗的照片或情感进行分类。并不是说猫和狗有什么不好,但是已经有数百万个这样的例子了…

如何用 Python 制作动画图

由维维安 — 5 分钟阅读

Matplotlib 和 Seaborn 是 Python 中一些很好的库,可以创建很棒的图形。但是这些图都是静态的,很难用一种动态的、令人愉悦的方式来描绘数据值的变化。

为数据科学家讲述故事

由简·扎瓦日基 — 6 分钟读完

《哈佛商业评论》最近发表了一篇关于顶尖数据科学家实际工作的文章。令人惊讶的是,关键技能是沟通,而不是统计模型的经验。

机器如何理解我们的语言:自然语言处理导论

艾玛·马尔迪——5 分钟阅读

对我来说,自然语言处理是数据科学中最迷人的领域之一。机器能够以一定的准确度理解文本内容的事实令人着迷,有时甚至令人害怕。

神经网络中的权重初始化技术

原文:https://towardsdatascience.com/weight-initialization-techniques-in-neural-networks-26c649eb3b78?source=collection_archive---------0-----------------------

即使构建一个简单的神经网络也是一项令人困惑的任务,在此基础上调整它以获得更好的结果是极其乏味的。但是,在建立神经网络时要考虑的第一步是参数的初始化,如果做得正确,那么优化将在最少的时间内实现,否则使用梯度下降收敛到最小值将是不可能的。

本文假设读者已经熟悉神经网络的概念、权重、偏差、激活函数、前向和后向传播等。

基本符号

考虑一个 L 层神经网络,它有 L-1 个隐藏层和 1 个输入和输出层。层 l 的参数(权重和偏差)表示为

在这篇文章中,我们将看看一些基本的初始化方法,以及一些为了达到更好的效果而必须使用的改进技术。以下是初始化参数的一些常用技术:

  • 零点初始化
  • 随机初始化

零初始化:

在一般实践中,偏差用 0 初始化,权重用随机数初始化,如果权重用 0 初始化呢?

为了理解,让我们考虑对输出层应用 sigmoid 激活函数。

Sigmoid function (https://towardsdatascience.com/derivative-of-the-sigmoid-function-536880cf918e)

如果所有权重被初始化为 0,则对于 W[l]中的每个 W,关于损失函数的导数是相同的,因此所有权重在后续迭代中具有相同的值。这使得隐藏单元对称,并持续所有 n 次迭代,即,将权重设置为 0 并不会使其优于线性模型。需要记住的一件重要事情是,用 0 初始化时,偏差没有任何影响。

W[l] = np.random.zeros((l-1,l))

让我们考虑一个只有三个隐藏层的神经网络,在隐藏层有 ReLu 激活函数,在输出层有 sigmoid。

在来自 sklearn.datasets 的数据集“make circles”上使用上述神经网络,获得如下结果:

对于 15000 次迭代,损失= 0.6931471805599453,准确度= 50 %

显然,零初始化在分类中是不成功的。

随机初始化:

为权重分配随机值比只分配 0 值要好。但有一点我要记住,如果权重被初始化为高值或非常低值会发生什么,什么是合理的权重值初始化。

a) 如果权重初始化为非常高的值,则项np.dot(W,X)+b变得显著更高,并且如果应用类似 sigmoid()的激活函数,则该函数将其值映射到 1 附近,其中梯度的斜率变化缓慢,并且学习需要大量时间。

b) 如果权重被初始化为低值,它将被映射为 0,情况同上。

这个问题通常被称为消失梯度。

为了看到这一点,让我们看看上面的例子,但是现在权重被初始化为非常大的值而不是 0:

W[l] = np.random.randn(l-1,l)*10

神经网络与前面的相同,使用来自 sklearn.datasets 的数据集“make circles”上的这种初始化,获得如下结果:

对于 15000 次迭代,损失= 0.38278397192120406,准确度= 86 %

这种解决方案更好,但不能完全满足需要,因此,让我们看看一种新技术。

新的初始化技术

正如我们在上面看到的,对于大的或 0 的权重(W)初始化,即使我们使用适当的权重初始化,也不会获得显著的结果,训练过程很可能将花费更长的时间。有一些与之相关的问题:

a)如果模型太大,需要花很多天来训练,那怎么办

b)消失/爆炸梯度问题怎么办

这些是多年来一直存在的一些问题,但在 2015 年,何等人(2015)提出了激活感知权重初始化(用于 ReLu),能够解决这个问题。ReLu 和 leaky ReLu 还解决了渐变消失的问题。

他初始化:我们只是简单地将随机初始化与相乘

为了了解该解决方案的有效性,让我们使用之前的数据集和神经网络进行上述初始化,结果如下:

对于 15000 次迭代,损失=0.07357895962677366,准确度= 96 %

当然,这是对以前技术的改进。

除了正在使用的初始化之外,还有一些比旧技术相对更好并且经常使用的其他技术。

Xavier 初始化:与 He 初始化相同,但用于 tanh()激活函数,在该方法中 2 被 1 代替。

有些人还使用以下技术进行初始化:

这些方法是初始化的良好起点,减少了渐变爆炸或消失的机会。他们设定的权重既不会比 1 大太多,也不会比 1 小太多。因此,梯度不会消失或爆炸得太快。它们有助于避免缓慢收敛,也确保我们不会一直偏离最小值。存在上述的其他变体,其中主要目标也是最小化参数的方差。谢谢你。

来源:神经网络和深度学习,吴恩达(Coursera.org)。

欢迎,机器学习

原文:https://towardsdatascience.com/welcome-machine-learning-647b59c15ef5?source=collection_archive---------5-----------------------

Photo by Sai Kiran Anagani on Unsplash

目前最受欢迎的主题之一是机器学习,尽管这并不是什么新鲜事。ML 背后的数学来自 80 年代!年复一年,算法变得越来越好,让我们离备受期待的人工智能更近了一步。

我开始探索它,我正在一点一点地学习什么是机器学习(什么不是)。当公司开始在人工智能的冰水中浸泡双脚时,有些问题总是困扰着他们,第一个问题是“这些麻烦值得吗?”

如果你还不确定人工智能的力量,建议你看看凯文·凯利的书《必然——塑造我们未来的 12 种技术力量 》。如果你没有太多的时间去读它,十二种力量中的第一种是人工智能,它足以播下好奇心的种子。

我说的不是试图将人类从地球表面消灭的嗜血机器人,而是非常具体(和专注)的应用。在我们的算法中加入自我意识只会让它们在完成设计任务时效率更低。我们不希望特斯拉遭遇生存危机而碰壁,对吗?

既然我们已经把“我,机器人”从等式中去掉了,下一个要解决的问题是数学。我们必须了解线性代数、微积分、微分方程和统计学吗?大多数博客说没有,但我认为一个诚实的答案比这要复杂一点。有一些图书馆可以为我们提供帮助,但是我们如何获得我们不了解的专业知识呢?我们甚至不知道它是如何工作的。懂得数学很重要,但也许只有在我们已经学会用自己的腿走路之后,它才是值得的。在不了解数学的情况下应用机器学习是可能的,但在某个点上改进算法需要对幕后发生的事情有更深入的了解。迟早,我们将不得不学习它。数学最终会降临到我们每个人身上。

重点是机器学习的先决条件不是数学而是知道如何分析数据。难怪如今最受欢迎的专业人士之一是数据科学家。如果数据结构不良或被误解,数学将无法保存您的工作,而使用数据完成的工作即使没有高等数学也能很好地完成。

算法会预测事情,但不会告诉我们那个预测的“为什么”。这个秘密隐藏在数据中,我们应该把大部分工作集中在数据上。

我可以用 ML 做什么?

要将 ML 应用到我们的产品中,我们必须了解它的能力。机器学习基本上是一个从数据中自动学习的程序。不要绝对地说出它需要做的一切,而是提供一些例子,让它自己学习。

是不是看起来太神秘了?它不是。到最后,都只是数学。以线性回归为例。有一个非常经典的例子,根据房子的平方英尺来预测房子的价值。如果我们从几个房子里得到数据,我们可以像这样在图上画点:

虚线是模型将学习的内容。它通过画一条线来概括问题,这条线可以根据点来调整自己,并使用这条线来进行预测。如果我们把 y 轴上的线下移,结果会有所改善吗?如果我们稍微倾斜一下呢?这是一个优化过程,算法将尝试降低错误率。

使用 ML 可以解决不同类型的问题:

  • 回归:当我们想要找到一个数值,比如房子或机票的价格;
  • 建议:当我们试图找到用户真正想要的东西。亚马逊或网飞推荐算法就是很好的例子;
  • 分类:当我们试图找出事物的类型时。最著名的例子是电子邮件中的垃圾邮件过滤器,但我们可以建立,例如,一个判断汽车是否损坏的算法;
  • 排名:这些结果中哪些是最相关的?当我们用谷歌搜索某样东西时,它就是这样做的;
  • 异常检测:在我们的数据中寻找不寻常的东西;
  • 聚类:谁买了这个也买了…

机器学习是一门庞大的综合性学科。我还有很多要学,但有一点是肯定的:我们所有的努力都应该集中在数据上。有了更好的数据,我们可以向我们的系统灌输智能,做出更好、更自信的预测。知道存储什么本身就是一个巨大的问题,将数据组织成尚不存在的模型似乎是一项艰巨的任务。

目前,我们要做的就是继续前进,看看机器学习会把我们引向何方。

欢迎来到深度强化学习第一部分:DQN

原文:https://towardsdatascience.com/welcome-to-deep-reinforcement-learning-part-1-dqn-c3cab4d41b6b?source=collection_archive---------0-----------------------

近年来,许多人工智能实验室正在致力于研究深度强化学习(DRL ),它有望成为未来的核心技术。我也在庆应义塾大学从事 DRL 研究。在接下来的几篇文章中,我将写下我对最近 DRL 的调查。所有这些都假设读者具备强化学习的基础知识。

在这篇文章中,我介绍了 DeepMind 提出的第一个深度强化学习方法——深度 Q 网络(DQN)。该论文于 2015 年在《自然》杂志上发表后,许多研究机构加入了这一领域,因为由于 DQN 使用的技术,深度神经网络可以让 RL 直接处理图像等高维状态。让我们看看 DQN 取得了多大的成就。

街机学习环境

街机学习环境:总代理评估平台于 2013 年发布,提出了 AI 的学习环境。ALE 有很多游戏最初是为一款古典游戏主机 Atari 2600 设计的。大概是 Pong,SpaceInvaders,PacMan,Breakout 这些游戏中的一部分大家都非常了解。

Atari games available in ALE

这个模拟器的任务是提供一个平台,在这个平台上,AI 可以玩很多游戏,而不需要任何特定的功能设计。在 DQN 出版之前,RL 代理需要手工设计的功能作为输入。比如 RL 代理玩太空入侵者的时候,入侵者位置是显式提取的。但是这些信息在玩突围的时候完全没用。因此,代理商不能依赖这种功能来玩 ALE 中的所有游戏。

深度神经网络(DNN)

AlexNet 利用 DNN 在 ILSVRC 2012 图像分类竞赛中取得了不可思议的成绩。

AlexNet

DNN 最伟大的事情是通过反向传播提取特征表示。

learned weights of a convolutional layer in AlexNet

由于这种能力,分类器不再需要手工设计的特征。经过适当的多次反向传播后,DNN 知道颜色或形状等哪些信息对完成任务很重要。

将 DNN 带入 RL

人们很自然地认为 DNN 使 RL 代理能够将图像与价值联系起来。然而事情并不容易。

Comparison between naive DQN and linear model (with DQN techniques) from Nature

朴素 DQN 具有 3 个卷积层和 2 个全连接层,以直接从图像估计 Q 值。另一方面,线性模型只有一个完全连接的层,一些学习技术将在下一节讨论。两个模型都以 Q 学习方式学习 Q 值。如上表所示,朴素 DQN 的结果非常差,甚至比线性模型还要差,因为 DNN 很容易在在线强化学习中过度拟合。

深度 Q 网络

在两篇论文中介绍了 DQN,2013 年在 NIPS 上用深度强化学习玩雅达利,2015 年在 Nature 上通过深度强化学习进行人类级别的控制。有趣的是,在 2013 年至 2015 年期间,关于 DRN 的论文很少。我猜原因是人们不能在没有自然版本信息的情况下复制 DQN 实现。

DQN agent playing Breakout

DQN 主要通过四种技巧来克服不稳定学习。

  • 经历回放
  • 目标网络
  • 剪裁奖励
  • 跳过帧

我逐一解释每种技术。

体验回放

经验重放最初是在 1993 年的使用神经网络的机器人强化学习中提出的。DNN 很容易过度适应当前的剧集。一旦 DNN 过度满足,就很难产生各种体验。为了解决这个问题,经验重放存储了包括状态转换、奖励和行动在内的经验,这些经验是执行 Q 学习的必要数据,并进行小批量更新神经网络。这种技术有以下优点。

  • 降低更新 DNN 的经验之间的相关性
  • 通过小批量提高学习速度
  • 重用过去的转换以避免灾难性的遗忘

目标网络

在 TD 误差计算中,目标函数随 DNN 频繁变化。目标函数不稳定,训练困难。因此,目标网络技术确定目标函数的参数,并且每隔数千步用最新的网络替换它们。

target Q function in the red rectangular is fixed

剪裁奖励

每个游戏都有不同的分数尺度。例如,在乒乓球比赛中,玩家赢得比赛可以得到 1 分。否则,玩家得到-1 点。但在《太空入侵者》中,玩家击败入侵者获得 10~30 分。这种差异会使训练不稳定。因此,修剪奖励技术修剪分数,所有积极的奖励设置为+1,所有消极的奖励设置为-1。

跳过帧

ALE 每秒能够渲染 60 幅图像。但实际上人们不会在一秒钟内采取这么多行动。AI 不需要计算每一帧的 Q 值。因此,跳帧技术是 DQN 每 4 帧计算 Q 值,并使用过去的 4 帧作为输入。这样降低了计算成本,积累了更多的经验。

表演

所有上述技术使 DQN 能够实现稳定的训练。

DQN overwhelms naive DQN

在 Nature 版本中,它显示了经验重放和目标网络对稳定性的贡献有多大。

Performance with and without Experience Replay and Target Network

经验回放在 DQN 非常重要。目标网络也提高了其性能。

结论

DQN 已经用以上 4 种技术在很多雅达利游戏中实现了人类水平的控制。然而,仍然有一些游戏 DQN 不能玩。在这个系列中,我将介绍与它们斗争的论文。

接下来,我提供 DQN 的 TensorFlow 实现。

  • 欢迎学习深度强化学习第二部分:张量流中的 DQN(即将推出)

欢迎来到人工智能加州酒店

原文:https://towardsdatascience.com/welcome-to-the-hotel-california-of-artificial-intelligence-444371fc0bf4?source=collection_archive---------4-----------------------

1977 年,老鹰乐队发行了《加州旅馆》,这是一首关于毒品和毒瘾对人的影响的歌曲。把“我们都只是这里的囚犯,我们自己的设备”放在我们今天的数字生活方式的背景下,我们会发现很多真理。谷歌免费提供大部分服务,亚马逊希望我们每个家庭都有回音,脸书成为我们的“朋友”名录,这都是有原因的。看起来很方便的东西是一种威胁。这是对终端消费者的威胁,也是对现有经济的威胁。即使我们可以选择随时退房,我们也不会离开。

野兽的盛宴

二十年后,互联网巨头——亚马逊、谷歌、脸书、阿里巴巴和百度——仍在收集大量数据,用每个人的知识、观点、推荐、位置、移动、购买行为、关系状态、生活方式等信息填充他们的数据库。这不是秘密,也不是什么新鲜事。而且看不到尽头。相反,几乎每个月都有新的服务或设备发布,以提供更好的用户体验,使我们的生活更方便,并增加我们的数字成瘾剂量。

亚马逊、谷歌、脸书等公司已经在我们的生活中无处不在。而且多亏了物联网,我们的模拟生活和数字生活之间的差距越来越小。在通过智能手机和平板电脑提供大量服务让我们分别与网络和设备挂钩后,互联网巨头们将让自己在每个人的家中都感到舒适。

像 Nest、Tado 或 Netatmo 这样的智能家居设备只是一种新的电器类别的开始,这些电器正在成为人们私人领域的眼睛,这些电器还没有连接到互联网,还没有成为谷歌公司的抓爪。像亚马逊 Echo 或谷歌 home 这样的智能私人助理已经成为下一个进化水平,可以用来控制智能家居设备,或通过简单地使用我们的声音来使我们的生活变得更容易。另外,我们应该非常小心地使用“智能”这个术语,因为这些命令几乎都是预定义的脚本。而且坦率地说,我没有印象,苹果的 Siri 和亚马逊的 Alexa(Echo 背后的人工智能(AI)引擎)目前都没有从我的交互中学习。

然而,这种技术发展的进步表明了一件事:亚马逊、谷歌公司找到了通过其他渠道与我们接触的新方法,收集他们做出更好决策所需的数据、信息和知识,并向我们提供更好的答案。因此,他们显然遵循一个目的。我们每一个人每天都被用来训练他们的人工智能。也就是说,谷歌公司向客户提供的所有服务都旨在利用他们获得的数据绘制一幅世界地图。

对最终消费者的影响:在激烈的竞争中获得便利

终端消费者基本上没什么可抱怨的。遵循等价交换原则,特别是谷歌和脸书免费提供花哨的服务,只收取数据作为回报。而且,数字成瘾完全正中他们的下怀。最终消费者已经入住“加州酒店”。即使他们可以随时退房,问题是,他们想离开吗?

不幸的是,这个问题的答案是否定的。一旦你成为这个圈子的一部分,就很难或者不可能离开。原因是一切都变得数字化了。我们的社会将会到达一个没有数字服务就什么都不能工作的点。你也可以说一个不存在于数字世界的人不再存在了。通过让用户体验更加便捷,任何人都不必再成为技术专家。这使得进入“加州旅馆”陷阱更加糟糕,因为我们社会的大多数人不再知道事情是如何联系在一起的——分别不知道到底发生了什么。老鼠赛跑中的便利。

总而言之,提供每个人数据的激烈竞争是谷歌公司成功的基础,也是他们对抗现有经济的武器。

对(已建立的)经济的影响:移动、改变、创新或死亡

最讽刺的是,我们每一个人都在支持谷歌公司反对现有的经济,甚至是现有的经济本身。成熟经济体的公司也成为了互联网巨头的客户。理由很充分。在大多数情况下,在自己的环境中运行自己的 it 基础设施和服务不再有意义,或者独自开发亚马逊、谷歌等公司已经开发的创新服务太昂贵了。然而,现有的经济陷入了恶性循环。即使他们仍然拥有他们的数据——从法律的角度来看——这并不意味着他们只拥有他们数据中的知识。

数据和从数据中得出的见解是互联网巨头建立大部分业务的基础。他们正在处理数据并将其货币化。然而,这仅仅是互联网巨头如何运作的一个大机器的一部分。但这一点赋予了他们颠覆现有经济中任何现行商业模式的力量。亚马逊只是一个例子,它已经开始以各种可能的方式去除中介。我们可以肯定,像 DHL、UPS 或联邦快递这样的公司不会以他们今天做生意的方式存在——提示:亚马逊 Prime Air。此外,亚马逊已经为成为一个完全端到端的商品提供商做好了一切准备。数字的和非数字的。

说起人工智能,互联网巨头们正在全面拥抱 AI。然而,大多数领导人低估了这将对他们的业务产生的影响。但与此同时,互联网巨头正在大力投资人工智能。尤其是老牌经济体是这场游戏中的大输家。

原载于www . reasoning . world

欢迎核心 ML

原文:https://towardsdatascience.com/welcoming-core-ml-8ba325227a28?source=collection_archive---------3-----------------------

在 WWDC17 主题演讲之后,我的朋友 Aleph 和我对新的核心 ML 框架感到非常兴奋。然后我们开始四处玩耍,并决定分享一些我们在这里做的事情。

借助 Core ML ,您可以为您的应用提供机器学习功能,该功能可在本地运行并针对设备性能进行优化,从而最大限度地减少内存占用和功耗。

核心 ML 支持许多机器学习模型(神经网络、树集成、支持向量机和广义线性模型)。模型应该是核心 ML 模型格式(具有. ML model 文件扩展名的模型) 1

在我们的例子中,我们将使用一个著名的模型 VGG16 ,它用于对图像进行分类,幸运的是,它是 Core ML 中可用的预训练模型之一。

⚠️ 重要:如果你真的想实现一个计算机视觉应用,也许你应该检查一下新的视觉框架。在这篇文章中,我们想展示的是,你可以如何轻松地使用预训练模型,通过机器学习使你的应用程序更加强大。

下载模型

在我们的示例中,我们将使用。 mlmodel 格式。然而,如果你在一个不同的框架中训练你的模型,比如 Keras,你可以使用 Core ML Tools 将其转换成合适的格式。关于我们的教程,你可以在这里下载 VGG 模型。

下载完“VGG16.mlmodel”文件后,只需将它放在文件旁边,就可以将其添加到项目中。

应用程序设置

我们将在示例中创建的应用程序非常简单,因此每个人都可以跟着做。如果你想看一些不那么简单的东西,看看 Aleph 的这个回购。

我们的应用程序将有一个图像视图,显示要分类的图像,一个用户可以点击以选择另一张图片的栏按钮,以及一个显示模型给出的分类的标签。

当用户点击“+”按钮时,我们呈现一个带有“库”和“相机”选项的动作表。选择其中之一后,图像拾取控制器出现。

图像拾取器委托方法非常简单。在“didCancel”中,我们简单地称之为“dissolve()”。在“didFinishWithMediaType”中,我们从“info”字典中获取图像,并将其传递给我们的“classify(image: UIImage)”方法。

预处理

首先,我们需要缩放图像,因为我们的模型接收的输入必须是 224x224。调整大小后,我们需要从图像数据中创建一个“CVPixelBuffer”。“CVPixelBuffer”是我们的模型期望作为参数的类型。

“核心 ML”部分

一旦我们在“CVPixelBuffer”中有了图像数据,我们就可以将它传递给我们的模型,代码再简单不过了。

为了做到这一点,我们将在“viewDidLoad()”中创建我们的“VGG16”模型,并且在我们的“classify()”方法中,我们需要做的就是在我们的模型上调用“prediction()”。该方法将返回一个“VGG16Output ”,从中可以获取一个字符串形式的“classLabel”属性。

最后

嗯,正如你所看到的,核心 ML 框架是一个非常强大和易于使用的工具,使我们的应用程序更加智能。你可以想到所有疯狂的想法,自然语言处理,计算机视觉和其他惊人的领域可以让你的应用程序做到这一点。

如果你有任何建议,请告诉我们。

另外,如果你想分享你是如何计划在你的应用中使用 Core ML 的,我们很高兴听到你的想法!

1 参见将核心 ML 模型集成到您的应用中

很快会有一个关于这个的帖子!WWDC 现在很疯狂,所以当我们有时间一起玩 keras 和 Core ML 时,我们肯定会在这里分享结果。

我们编织了一张多么解开的网:VAEs 中的表征学习。1)

原文:https://towardsdatascience.com/what-a-disentangled-net-we-weave-representation-learning-in-vaes-pt-1-9e5dbc205bd1?source=collection_archive---------1-----------------------

这是一个举世公认的真理:没有标签的数据一定需要无监督学习。

除了油嘴滑舌,人们普遍认为监督学习有着有意义的缺点:标签成本高、噪音大,并且将你的问题引向实现某种程度上人为的目标,而不是简单地以更中立的方式学习数据的有意义轮廓。然而,它们确实给了我们学习中非常有价值的东西:一个最大化的简单目标。所有现代神经网络系统都是建立在梯度下降基础上的,梯度下降修改参数值以优化结果。在无监督学习的背景下,你到底想让模型为了什么而优化自己的问题就不那么清楚了。

无监督学习的一个常见策略是生成模型,其思想是:你应该给模型一个从给定分布中产生样本的任务,因为在该任务中表现良好需要模型隐式地学习该分布。如果你想到人类的术语,这种直觉是有道理的:例如,如果我们想测试一个孩子是否理解“房子”这一类别,我们可能会不断地要求他们画一所房子,如果他们能够多次画同样的房子,或者画不符合这一类别的东西,比如烤面包机,我们可能会合理地假设他们理解什么标准使一些东西本质上像房子。

生成式建模最常用的两种方法是生成式对抗网络(GANs)和变分自动编码器(VAEs)。

GANs 的工作原理是引入噪声(z ),并使用生成器神经网络将 z 转换为数据的传真版本(X-hat)。然后,鉴别器将该数据与真实示例(X)进行比较,生成器学习创建鉴别器更有可能归类为真实的假图像。乍一看,z 在这一切中的作用可能并不明显。如果这种噪声没有增加任何信息价值,我们为什么需要它作为我们的输入呢?答案是它允许我们采样。生成式建模的一个重要方面是,我们不只是想要一个可以从有问题的分布中生成一个示例的模型,而是一个我们可以重复绘制并每次获得不同输出的模型。由于发生器仅由矩阵组成,满足这一采样标准要求至少部分网络设置是随机的。在 GAN 中,当我们遍历 z 噪声空间时,根据发生器在给定每个 z 样本作为输入时产生的 X,我们会从分布中获得不同的图形。此外,因为我们决定并控制我们使用的分布 z,所以在模型训练后很容易进行采样:我们只需从相同的选择分布中采样 z 值,并且知道,在预期中,我们得到的采样 z 将来自生成器已经学会使用该 z 产生真实输出的区域。

可变自动编码器速成班

VAEs——这将是本文其余部分的重点——具有类似的结构,尽管在两个主要方面有所不同。

  1. VAEs 不只是将随机抽取的 z 映射到图像中,而是将特定的 X 作为输入,学习一种编码器,将 Q(z|X)从该 X 映射到压缩代码 z 。该代码有望包含重建 X 所需的信息,通过解码器 P(X| z )运行,以预测特定的 X 再次返回。
  2. VAEs 不是使用神经网络来生成真实 X 和生成/重构 X 之间的损失,而是通常使用逐像素损失函数来测量重构 X 和原始 X 之间的像素距离。

就本文的目的而言,第一个是最显著的区别:事实上,在 VAE 中,您不仅仅关心产生看起来像是来自数据分布整体的东西,您还关心再现作为输入给您的特定图像(或者一般来说,来自数据分布的观察)。因此,你的 z 分布,对于 GANs 来说只是一个有用的随机性来源,通常需要对可用于特定图像重建的信息进行编码。理论是:由于 z 是一个低维向量,网络被迫学习输入图像的压缩和信息表示。

然而,我们现在回到我们之前用 GANs 概述的标准:在我们训练了模型之后,需要能够从模型中取样。此外,为了有效地进行采样,您需要能够在训练后对给定的 z 进行采样,并高度确信 z 空间的该区域对应于实际输出。

这样做的一种方式,也是 VAEs 通常使用的方式,是激励网络将它编码的 z 值推出 X,即 Q( z |X),以接近某个先验 p( z ,这通常是一个维度独立的多元高斯。这也被称为“各向同性”高斯。这听起来很专业,也很复杂,但是从视觉角度来看,事实并非如此。在二维空间中,每个维度的方差都等于 1,维度之间没有协方差,高斯看起来就像一个圆,以 0 为中心。在更高维度中,它是一个球体(或超球体)。

这两个元素组合成以下目标函数:

在这个目标中,第一项对应于重建损失(也称为数据似然损失),并在概念上映射到“我的模型在生成与数据分布相似的东西方面有多好”。第二项是网络为每个 X 编码的 q( z |X)值与先验分布 p( z )之间的 KL 散度。因为当两个分布相等时 KL 散度最低,所以这一项向更集中在先前多元高斯空间中的 z 值推进。这个术语通常被称为正则化术语。

然而,特别是 vae 并不仅仅或者甚至主要用作生成模型;他们的主要用途是作为代表学习者。我们的意思是,vae 经常被用于创建低维编码分布(前面提到的 z ),建模者希望,由于瓶颈和重构结构,它已经被迫学习数据中有意义的概念。其逻辑本质上是:如果你传输信息的带宽有限,你会优先使用它来描述你试图传输的数据的最显著的方面。

这是有价值的,因为人们普遍认为深度网络的许多价值在于它们作为习得特征提取器的能力:系统可以接受高维输入,并从中生成更多语义上有意义的特征。如果一个无监督的系统可以实现类似的目标,即通过使用大量的标记数据来创建高度信息化的压缩特征表示,那么就有很好的理由相信一个高性能的模型可以使用这些特征来训练,并且只需要少量的标记数据。

这听起来很棒:一个简单的、基于概率的解决我们无人监督学习困境的方法。但是,没那么快。

尽管这种技术很有前途,但在实践中,试图使用 VAEs 作为表征学习器的研究人员面临两个主要困难:纠缠码和忽略码。这篇博文将讨论 BetaVAE,它解决了第一个潜在的问题,第 2 部分将关注 InfoVAE,它解决了第二个问题。

(注意:我在这里和整篇文章中使用“代码”作为编码器学习的低维 z 表示的简写。此外,在现代 ML 中,论文中最常见的 VAEs 用例是图像数据,所以我偶尔会提到像“像素丢失”这样的东西,它们与图像数据特别相关。我把它们留在这里,因为我认为它们提供了有用的直觉,但为了减少混乱和可能的过度拟合:VAE 的思想适用于图像以外的领域)

定义解开

在我们的模型试图表现的现实世界中,有一些变异因素可以独立修改,而另一些则不能(或者,出于实际目的,永远不能)。一个简单的例子是:如果你正在给人建模,那么一个人的衣服与他的身高无关,而他的左腿的长度强烈地依赖于他的右腿的长度。解开特征的目标最容易理解为想要使用你潜在的 z 代码的每一个维度来编码这些潜在的独立变异因素中的一个且仅一个。使用上面的例子,一个清晰的表示将把一个人的身高和衣着作为 z 码的独立维度来表示。

解开的目标有几个不同的动机。从实际意义上来说,想象你正在学习一个生成模型来创建人的图片,最终目标是在视频游戏场景的背景中生成一群假的人。您可能希望能够告诉模型,“我希望生成一个看起来像这个人,但是更高的人”。如果你已经学会了一个独立编码一个人的身高的尺寸,那么你可以修改它,保持其他一切不变。相反,如果你在一个共享维度中对身高和性别进行编码,改变身高的同时保持人的所有其他方面不变是不可能的,因为修改身高的内部维度也会修改性别。

从一个更加信息化的角度来看,一个清晰的表示是有用的,因为当你捕捉到最有意义或最显著的观察结果的不同之处时,这些不同的轴对于各种各样的监督任务来说通常是有价值的。如果这是真的,当你使用这种清晰的表示作为输入时,它允许你使用更少的数据和更简单的模型来执行给定的监督任务。

作为更多和更少纠缠的代码看起来像什么的激励性例子,看看下面的图片。左侧网格提供了不太独立的编码示例,右侧网格显示了更独立的编码。

在上面的每一行中,当你从左向右移动时,一个 z 码的一个维度是变化的,然后一个解码器被用来将这个 z 码转换成一个图像。这个模型是从一个非常简单的数据集训练出来的,这个数据集只包含一个白点,位于黑色背景上的某个地方。这里只有两个可独立修改的参数:水平方向和垂直方向。右边的网格已经学习了直接映射到这些因素的 z 值:第一维插值在最底部和最顶部之间,在大约相同的水平位置,第二维插值在最右侧和最左侧之间,在大约相同的垂直位置。后两个维度没有提供信息。

相比之下,左手模型学习的大多数因素结合了垂直和水平位置的变化。第一个因子向左上方移动,第二个因子仅向下移动,最后一个因子向右下方移动。同样有趣的是,在最后一个因素中,你可以看到第 7 张和第 8 张图片之间有很强的不连续性,球突然“跳”到了右边很远的地方。尽管该数据只有两个独立的维度,但左侧网格已经(低效地)将其表示扩展到 4 个维度上。

总而言之:右侧网格中的表示优越的两个主要方面是它们是平滑的,以及它们表示独立轴

想来点贝塔吗?

左手网格——低效且混乱的网格——由(正常的)VAE 学习,右手网格——未混乱的网格——由贝塔 VAE 学习。贝塔 VAE 实际上只是一个非常简单的概念的名称:在 VAE 损失中采用“调整”或“先前执行”术语,并通过在目标中对其施加更大的权重来增加该术语的约束程度。

You’re not imagining things; this paper’s many pages of math boiled down to adding a coefficient to a term in the objective, and turning that coefficient to values greater than 1

为什么这两个方程中的差异会转化为两个网格之间的差异,这种直觉不是很明显,但如果你挖掘得足够深入,就会有一些有价值的理解。

从正在发生的事情的基础开始:KL 散度项量化不同的是来自先前的 z 的条件/编码分布。然后,当它产生看起来与多元高斯先验有很大不同的 z 分布时,它会惩罚网络,其中每个维度都是 N(0,1),并且维度在统计上是独立的(也就是说:维度之间的相关性是 0)。在下面的讨论中,需要记住 z 的几个重要特性:

  • 由于这是一个变型自动编码器,编码器网络不仅仅产生一个向前传递的 z 的确定值,它还对一个 z 分布的平均值和方差进行编码;网络从该分布中取样,并将样本向前传递。因此,当我们说我们正在实施多元高斯先验时,这意味着我们正在推动这些编码的均值更接近 0,编码的标准差更接近 1,维度之间的相关性更接近 0。
  • 如果你看上面的等式,我们将约束应用于条件分布,或者从每个单独的 X 编码的分布。因此,当先验将这些条件分布的平均值推至更接近 0 时,这意味着平均值在不同 X 观察值之间的差异方面受到约束。

为了让这成为一个有用的约束,让我们考虑一下 z 代码必须做什么,以及它的选项是什么。从重建损失的角度来看, z 分布的工作是向前传递信息,该信息将尽可能明确地传达编码它的 X 的特征。当正则化损失的权重变大时,它对学习到的 z 向量有三个主要影响。

  1. 平滑度:当你改变 z 的值时,它激励重建平滑地变化,而不是跳动或不连续的
  2. 简约性:它激励网络将关于 X 的信息压缩到尽可能少的维度中
  3. 轴对齐:它鼓励将数据可变性的主轴与 z 向量的维度对齐

总的来说,这些激励推动网络将关于 X 的信息压缩成少量平滑变化的独立维度。

保持平稳

Graphic from: “Understanding Disentangling in B-VAE”.

重建损失问题的一个潜在解决方案是将平均值推得更远,并将标准偏差推得更低,以减少从不同观察值生成的 z 值之间混淆的机会

然而,这种行为恰恰是正则化术语所反对的:它更倾向于彼此接近的均值,以及接近 1 的标准差。如上图所示,在这种情况下,如果网络对 x2 进行宽分布编码,则很有可能会对 x-波浪线进行采样,这实际上在 x1 下比在 x2 下更有可能。因此,当网络打算重建 x1 时,它很容易重建 x2。

作者称之为“数据局部性”的这种强烈动机具有推动网络对数据中平滑变化的因素进行编码的效果。

明智地使用你的维度

让我们暂时回到之前的白点比较。回想一下,这两种编码方案之间最大的区别之一是,网络使用了多少个维度来编码本质上是两个维度的生成因素。我们看到这种效应的原因是,在贝塔-VAE(贝塔> > 1)下,模型为它用来编码信息的每个维度付出了代价。这是因为对于 X 的所有输入值,维度不产生成本的唯一方式是它等价于 N(0,1),的全局先验。当一个维度在 X 的所有值上不变时,那么,根据定义,它不包含关于 X 的任何信息。每当模型偏离这种无信息状态,并且实际上开始以不同的方式将 z 编码为 X 的函数,这在目标函数中强加了成本。

这种对维度效率的驱动意味着模型只想要编码最具信息性的变化轴。我喜欢把普通的 VAE 场景想象成,在线性代数的意义上,在一个实际上只有二维的空间中,使用四个基本向量。这是无关的,但是当模型的损失很少或没有损失时,这种浪费就不会在模型中突出出来。相比之下,在 BetaVAE 下,模型被鼓励减少基向量的数量,只保留那些在描述空间时足够有价值的向量。

显然,白色斑点的情况下,字面上正好有两个轴的生成是一种过于简化。有了真实的数据,几乎不可能有某个低维空间捕捉到所有有意义的变化的。但是,可能有这样的情况,您有两个轴捕获了几乎所有的变化,而第三个轴只捕获了一小部分剩余的变化。在这种情况下,网络可能仍然选择不表示第三维,因为它没有增加足够的解释力,不值得支付表示的成本。

保持一致

解开的最后一个组成部分,轴线对齐,来自于这样一个假设,如果真的存在潜在的生成因素,那么不同的因素将提供不同的解释力。例如,想象一下,如果我们有一个白色圆圈数据集,但除了圆圈改变位置外,它还改变了半径。当然,圆圈的大小是一个独立的因素,我们可能希望我们的模型能够捕捉到它。但是,将圆放在完全不正确的位置所导致的重建损失远远高于仅重建错误大小的圆所导致的重建损失,这也是事实,因为不同大小的圆之间会有许多像素重叠。

因为这个维度提供的有用信息较少,所以不值得花费这么多成本。请记住,在正则化条件下,将条件均值移动到信息位置或减少条件方差以最小化混淆的可能性是很昂贵的。因此,在网络可能愿意为获得清晰明确的位置信息付出代价的情况下,尺寸的 z 值可能更接近先验值:具有更大的标准差和更小的均值分布,这意味着只有非常大和非常小的圆才能相互区分。这种将我们潜在维度的能力与它们的信息价值结合起来的愿望,是我们所施加的约束的自然结果。

然而,因为高斯是各向同性的,维度之间没有协方差,如果我们对齐这些不同的因素,我们只能了解不同因素的不同方差。因此,因为网络被激励根据一个因素的信息含量来缩放方差,并且我们期望不同的生成因素是那些具有最不同信息含量水平的因素(由于代表不同的生成过程),所以它被激励将其主要生成因素与 z 的维度对齐。

重构知识

从根本上来说,测试版 VAE 的方法与普通的 VAE 在本质上没有区别,只是侧重点不同。在最简单的框架中:当你把贝塔系数调高时,它只是一个更加规则的 VAE。VAEs 的许多理论已经围绕着通过应用信息瓶颈来强制压缩。BetaVAE 说,为了产生适当的解开因素,瓶颈需要更强。

这两种方法之间的这种基本相似性的一个好处是,我们可以从 BetaVAE 中获得的许多直觉——在正则化约束的极端版本下潜在空间是如何形成的——也有助于我们更好地理解典型的 VAE 如何工作,以及我们可以期望它们创建什么样的表示。毕竟,很多希望和重量都寄托在这样的模型上,以帮助领导生成性表征学习的充电器,所以重要的是要记住:他们不会选择我们希望他们会选择的那种特征,他们只会选择我们激励他们找到的那种特征。

(我在上面重新构建的许多直觉来自于 本文 ,由最初的贝塔 VAE 方法的作者发布,其中明确试图为他们的方法为什么有效提供解释)

  1. 这并不总是正确的,因为有些文章像这篇一样,在 VAEs 的末端贴上鉴别器来做一个更“基于特征的”损失函数,但是“基于元素的平方差”是一个足够普遍的标准,我将在这篇文章中坚持引用它
  2. 这将是所有的一块,但中期起草我意识到这是倾向于 6000 字的方向,并决定后分裂是最明智的选择。

AI 对于营销意味着什么!

原文:https://towardsdatascience.com/what-ai-means-for-marketing-372e7681a08b?source=collection_archive---------12-----------------------

你目前的营销策略中缺少了一些东西。

经验丰富的企业可以证明,客户的需求是不变的——更好的价格、更快的交付和更顺畅的客户服务。你最好跟上,因为有比以往更多的选择。对于一个顾客来说,在网上对比几十个同类产品的功能和价格的同时查看你的产品并不罕见。客户在做出最重要的决定(是否购买)时会考虑所有这些因素。

识别完美的产品对消费者来说是一个挑战,但对企业来说也是一个挑战。你如何确保顾客以正确的方式理解你的产品? 为了向消息灵通的消费者销售,你必须领先一步——这意味着了解他们的偏好,他们的兴趣如何变化,以及他们的生活中发生了什么。不幸的是,这些都是传统营销方法无法发现的细节。

这就是人工智能驱动的营销的切入点。AI 不是魔法,也不会给你提供一刀切的解决方案。但它基于强大的科学,将允许您识别数据模式,并进行人类无法管理的复杂计算。希望转变方法并实现激进业务增长的市场应该密切关注能够检查客户购买模式并预测未来购买决策的人工智能工具。

要了解这项技术的实际应用,只需看看亚马逊,它利用机器学习来推动他们的营销战略。亚马逊从悬停交互开始,以确定客户正在仔细查看哪些产品,使他们无需点击即可分析客户行为。基于这些微妙的手势和互动,亚马逊可以微调产品选择,为客户提供最有可能导致购买的个性化体验。人工智能处于整个精简流程的核心,尽可能多地考虑因素和数据点,以向亚马逊提供如何最好地为每个客户个性化目标营销的意识。

亚马逊已经掌握了这些技术,让它们能够显著提高销售额和客户参与度。但你不需要亚马逊的预算来利用人工智能。如果你准备好改革你的营销策略,是时候仔细看看人工智能驱动的工具了。毕竟,最好的客户服务始于准确了解客户想要什么——并以简单易懂的方式提供。

你如何看待人工智能在你的营销工作中的作用?

感谢您花时间阅读帖子。

关于作者: 韦达·孔杜鲁是 VectorScient 的创始人兼 CEO。在她目前的职位上,Veda 负责制定和执行 VectorScient 的战略。Veda 还担任 VectorScient 预测营销云的首席产品架构师。在推出 VectorScient 之前,Veda 在企业界工作了 10 多年,为销售、需求预测和供应链设计和构建软件应用程序,在产品质量、客户关注和参与方面享有盛誉。Veda 将她的统计学背景与机器学习和数据科学相结合,创造出真正世界级的预测分析产品。她拥有计算机科学硕士学位。

人工智能最需要的是期望管理

原文:https://towardsdatascience.com/what-ai-mostly-needs-is-expectation-management-625c90ea147f?source=collection_archive---------13-----------------------

里斯本 2017 年网络峰会。

在世界上最大的科技会议的第二天,与会者聚集在中心舞台,观看最大的科技公司之一展示其最新的创新。这很壮观——无人机在飞,面部识别能力被展示,然后首席执行官发表声明——“人工智能现在解决了儿童贩运问题!”。人群欢呼起来。

等等——什么?

我想澄清一些事情。人工智能并没有解决贩卖儿童[或任何人类最大的问题]——做出这些类型的声明可能会危及真正基于人工智能的应用程序的扩散。

我来详细说明一下。

尽管潜力巨大,人工智能仍然是一项 T2 技术。然而,要实现真正的改变,过程同等重要。单靠人工智能永远无法解决儿童贩运问题,因为它没有解决这个问题的根源——只有结合人类行为和过程的复杂变化系统,它才有机会。

吴恩达(人工智能的超级英雄之一)使用下面的经验法则:“如果一个典型的人可以在不到一秒钟的思考时间内完成一项脑力任务,我们很可能现在或在不久的将来使用人工智能使它自动化”。

决定照片中是否有特定的人脸?是的。决定这张图片是否显示不适当的内容?是的。解决拐卖儿童问题?可惜没有。

这些类型的主张不仅仅是关于更大的人道主义问题。我自己也在科技行业工作,我和许多公司谈过,他们承诺会有成堆的金子[“我们让你的业务成本效益提高 60%!”],结果却大失所望。对技术的信任减少,人工智能的利用也减少——这些公司在再次开始人工智能冒险之前理所当然地会三思。

这些陈述所推进的,是对人工智能当前能力的误解。这里错的是期望管理,而不是人工智能。

那么我们能做什么呢?

对于那些从事人工智能工作的人来说——管理那些期望。我们不需要更多的人工智能宣传,我们需要更多真实世界的用例。开始构建后者,诚实而透明地对待 AI 能做什么和不能做什么[ 这里的是一个好的开始]。

对于人工智能爱好者——对人工智能的潜力保持乐观,但对围绕它的营销机器保持怀疑。提问讨论——这个问题有可能被 AI 解决吗?人工智能通常需要大量数据进行训练。这么多数据可能随时可用吗?此外,人工智能目前处于最佳状态,有着明确的目标和可预测的环境。这就是为什么 AI 在语言翻译方面相当不错,但不能写小说或电影剧本[ 看看当我们试图让 AI 做后者时会发生什么,这太搞笑了]。这些条件具备到什么程度?

当然,你必须教育自己问一些正确的问题——媒体上有一些关于这个话题的精彩帖子,比如这里的和这里的。

无论你做什么:不要把脚本演示误认为是真正的人工智能。正如 WebSummit 的一位发言者正确地提到的那样:“只要我没有看到,我就不相信”。

嘿,很高兴你看了我的帖子!如果你喜欢,请按下👏按钮下面按几下,这样其他人也能听到。还有,如果你有什么想法,请在评论里告诉我!

请注意:本文表达的观点是我个人的,并不代表我的雇主的观点。

应用描述告诉我们什么:Python 中的文本数据预处理

原文:https://towardsdatascience.com/what-app-descriptions-tell-us-text-data-preprocessing-in-python-afc7ed88360d?source=collection_archive---------5-----------------------

将 NLP 应用于 App Store 上的应用描述

继续讨论数据清理和探索的主题,许多有效的 NLP 分析都依赖于文本数据的预处理。因此,我决定对来自 Apple Appstore 描述的一些文本数据和结果文本的 K-Means 聚类进行逐步预处理。

为什么是 Appstore?来自 kaggle 的这个数据集包含 7197 个应用及其各自的应用描述。应用描述是应用创建者尽力“推销”他们的应用的地方。利用预处理后的数据,我检验了“应用描述是应用类型的良好预测者吗?”。

我在这里使用的预处理“框架”如下:

  1. 翻译*
  2. 删除非字母字符
  3. 全部转换为小写
  4. 标记化
  5. 删除停用词
  6. 词干**
  7. 分析

*我想先翻译所有的描述,因为非字母字符的正则表达式会删除像日语和中文这样的语言。

**在这个特殊的例子中,我已经省略了词汇化,因为我想以后再看词汇多样性。

像往常一样,我们从读入包含相关数据的 csv 文件开始。这里,我们将具有基本应用信息的数据帧与具有应用描述的另一个数据帧合并。

因为特性变量的数据类型很大程度上是合适的,所以让我们快速看一下底层数据。

不出所料,App Store 上的大多数应用都是游戏,占数据集的 54%左右。接下来最具代表性的类型是“娱乐”和“教育”,远远落后于 7%和 6%左右。

平均而言,评分最高的类型是“生产力”和“音乐”。有趣的是,到目前为止,“目录”、“金融”和“书籍”是应用商店中评分最低的应用。

预处理过程

1 翻译成英语

预处理从将所有应用程序描述翻译成英语开始。这里,我们使用 googletrans 包对 Google Translate 进行 API 调用。不幸的是,这个 API 调用有 15k 字符的限制。虽然这不是最好的解决方案,但我们可以通过为数据帧中的每一行重新初始化转换器来解决这一限制。

为了防止在语言已经是英语时进行 API 调用的不必要操作,我们可以使用 langdetect 包进行条件检查,并且只在语言不是“en”时进行 API 调用。

有 46 个应用程序的描述返回了错误调用。虽然长度对一些人来说是个问题,但对另一些人来说却无法确定错误。由于这是数据集的一小部分,我们可以放弃这些应用程序。

2 删除非字母字符

既然我们已经确定诸如日语或汉语这样的语言不会被正则表达式过滤,我们就创建一个表达式[^a-zA-Z ]来返回所有的字母字符和空格。在 helper 函数 cleaned()中使用 re.sub()方法删除其他任何内容。保留空格,以便在进行标记化时,字符串可以被空格分割。

3 转换为小写

规范化文本数据的另一个步骤是将所有字符转换成小写字母。这与在 dataframe 的目标列上运行 str.lower()一样简单。

4,5,6 标记化、删除停用词和词干

由于接下来的 3 个步骤是通过 nltk 包实现的,所以我为它们创建了一个聚合助手函数。

标记化是指将一个长字符串分割成更小的块或标记。这非常类似于在字符串上运行 split 函数,根据定义的分隔符返回单个组件的列表。我们在这里用 nltk 包中的 word_tokenize 来标记字符串。

停用词是被过滤掉的词,因为它们对文本的整体意义没有太大贡献。这些词包括“a”、“to”、“and”等。我们通过 nltk 包中的 stopwords.words('english ')找到英语的一组停用词。

词干是指从一个单词中去掉词缀。比如‘爬’就变成了‘爬’。我们在 nltk 包中用 SnowballStemmer('english ')初始化一个词干分析器。

Example of sanitized output

下面的 helper 函数将首先对字符串进行标记。然后,它检查每个标记是否是停用词。最后,如果这个词不是停用词,它就运行词干分析器,并将这个词附加到一个列表中。

7 分析

现在让我们深入研究一下经过清理的数据。

7.1 字云生成

在特定类型的应用中,最常用的词是什么?虽然简单的单词计数或 tfidf 矢量器会返回单词的排名,但也许顶部的单词可以更有效地在单词云中可视化。

为了给每种类型生成一个词云,我为每种类型创建了一个净化应用程序描述的语料库(或集合)。幸运的是,有一个 wordcloud 包可以方便地从给定的语料库中生成 word cloud。

wordcloud 包的工作原理是为一个语料库创建一个前 200 个单词的列表,并为每个单词创建一个附带的标准化单词计数列表。然后使用 Python 图像库来绘制单词云。这个总结并没有公平对待他的代码,你可以在这里阅读更多。

Wordclouds for games and weather apps

Wordclouds for shopping and music apps

以“游戏”、“天气”、“购物”和“音乐”的词云为例,我们看到最突出的词确实是我们对特定类型的预期。虽然这些流派的区别似乎很明显,但对其他流派来说就有点模糊了,这一点我们将在聚类时再讨论。

7.2 词汇多样性

像‘游戏’这样的不同体裁,自然会产生更丰富多彩的语言和描述吗?我试图通过使用一个简单的公式来确定词汇多样性来回答这个问题。我取了每个过滤单词列表中唯一单词的数量,并除以该描述的总单词数。数字越大,使用的词汇就越多样化。

正如所料,“游戏”和“书籍”的平均词汇多样性得分最高。这可能是由于这两种类型的子类型的多样性,以及这种描述更“吸引人”的趋势。

目录的描述毫无疑问是枯燥的。

7.3 情感分析

是不是有些流派的 app 描述比其他流派的更正面?我决定通过在 Textblob 包中运行情感分析来描绘这个画面。

情绪极性 0 表示中性情绪,极性低于 0 表示消极情绪,极性高于 0 表示(你猜对了)积极情绪。

“游戏”、“金融”和“医疗”类别的平均情绪极性最低。如果游戏包含令人苦恼的主题,如战争或恐怖(这些主题被很好地表现出来),那么“游戏”可能具有非常低的情感极性。“金融”和“医疗”的描述可能较低,因为应用程序可能正在描述不利的金融或医疗状况。

似乎有一些催人泪下的人(约翰·格林)弥补了书籍的离群值。提到“捕捉快乐时光”似乎弥补了“照片和视频”应用的异常值。

7.4 K 均值聚类

现在回到我们开始时试图回答的问题,“应用程序描述是应用程序类型的良好预测者吗?”。

为了回答这个问题,我在单词向量上应用 K-means 聚类,看看它们如何映射到实际的类别。

当我们用 10 个聚类运行聚类时,结果聚类中的前 10 个单词如下:

乍看起来,一些集群可以被标记为:

集群 0:儿童应用

集群 3:音乐应用

集群 4:涉及战争/战斗/怪物的游戏

第六组:益智游戏

集群 7:照片和视频应用

集群 9:汽车相关应用

那么这些集群如何映射到实际的应用类型呢?

上面的标签似乎在很大程度上具有代表性,但似乎有一个问题是游戏在样本中的代表性过高。其他类别的阴影太淡,无法获得任何有意义的见解。同样的热图在没有“游戏”类应用的情况下再次出现。

没有了“游戏”这种被大量代表的类型,其他类型的代表深度现在被更清楚地确定了。一些明显的群是群 3“教育”,群 4“金融”和“购物”,群 7“天气”,群 9“照片和视频”。

如果我们将集群的数量增加到接近流派总数(22 个,不包括游戏)会怎么样?

让我们也将这些映射与每个聚类中的顶级单词进行交叉比较:

有 20 个集群,定义明确的集群如下:

集群 0:购物

第 9 组:健康与健身

第 10 组:音乐

第 11 组:照片和视频

第 13 组:教育

第 14 组:金融

第 17 组:天气

为什么只有三分之一的体裁被聚类很好地代表,有各种各样的原因,其中两个最明显的原因是样本大小不平衡和跨体裁的单词重叠。

不平衡的样本量

正如在最初的 EDA 中所看到的,大约 54%的应用是游戏。即使去掉了游戏,很大一部分仍然是“教育”和“娱乐”应用。

All the games.

在所有流派中选择一个恒定的样本量是很有趣的,但这需要更大的样本总量。

单词重叠

尽管样本量很小,但“天气”应用还是被集群 17 很好地识别出来。有争议的是,被聚类很好地识别的流派是那些具有独特命名的流派。

Wordclouds for utilities and reference apps

看看像“实用工具”和“参考”这样的体裁的词云,它们包含的词在其他多种体裁中也有很好的表现。

也许可以跨所有流派形成流行标记的列表,并从当前净化的字符串中过滤掉。尽管如此,像“生产力”和“公用事业”这样的类型可能仍然会重叠,不会完美地聚集在一起。

我当然希望在修复了这个 NLP 分析的一些问题后,创建一个模型,不仅仅考虑应用程序描述来预测应用程序类型。

我也一直在尝试从每种类型中产生应用描述。以下是“体育”类型的几个例子:

Not great as you can tell ¯_(ツ)_/¯

感谢阅读,代码可在这里找到!

什么是超参数?以及如何调整深度神经网络中的超参数?

原文:https://towardsdatascience.com/what-are-hyperparameters-and-how-to-tune-the-hyperparameters-in-a-deep-neural-network-d0604917584a?source=collection_archive---------0-----------------------

什么是超参数

超参数是决定网络结构的变量(例如:隐藏单元的数量)和决定网络如何训练的变量(例如:学习率)。

超参数是在训练之前设定的(在优化权重和偏差之前)。

与网络结构相关的超参数

隐藏层和单元的数量

隐藏层是输入层和输出层之间的层。

“很简单。只要不断增加层,直到测试误差不再改善。”

使用正则化技术的图层中的许多隐藏单元可以提高精度。单元数量较少可能会导致装配不足

拒绝传统社会的人

Random neurons are cancelled

Dropout 是一种正则化技术,用于避免过拟合(提高验证精度),从而提高泛化能力。

  • 通常,使用 20%-50%的神经元的小丢弃值,其中 20%提供了一个好的起点。过低的概率影响最小,过高的值导致网络学习不足。
  • 使用更大的网络。当在更大的网络上使用 dropout 时,您可能会获得更好的性能,从而为模型提供更多学习独立表示的机会。

网络权重初始化

理想地,根据在每层上使用的激活函数,使用不同的权重初始化方案可能更好。

大多使用均匀分布

激活功能

Sigmoid activation function

激活函数用于向模型引入非线性,这允许深度学习模型学习非线性预测边界。

一般来说,整流器激活功能最受欢迎。

在进行二进制预测时,在输出层使用 Sigmoid** 。** Softmax 用于输出层,同时进行多类预测。

与训练算法相关的超参数

学习率

Learning rate

学习率定义了网络更新其参数的速度。

学习率低减缓学习过程但平滑收敛。较大的学习速率加速学习但可能不收敛。

通常一个衰减学习率是首选。

气势

动量有助于用前几步的知识知道下一步的方向。它有助于防止振荡。动量的典型选择在 0.5 到 0.9 之间。

时代数

epochs number 是训练时整个训练数据显示给网络的次数。

增加历元数,直到验证精度开始下降,即使训练精度在增加(过拟合)。

批量

最小批量是参数更新发生后给网络的子样本数。

批量大小的一个好的默认值可能是 32。也试试 32,64,128,256 等等。

找出超参数的方法

  1. 手动搜索
  2. 网格搜索(http://machinelingmastery . com/Grid-Search-hyperparameters-deep-learning-models-python-keras/)
  3. 随机搜索
  4. 贝叶斯优化

什么是产品推荐引擎?以及它们的各种版本?

原文:https://towardsdatascience.com/what-are-product-recommendation-engines-and-the-various-versions-of-them-9dcab4ee26d5?source=collection_archive---------0-----------------------

Ref - http://www.emailvendorselection.com/recommendation-engines-for-email-marketing/

什么是产品推荐?

产品推荐基本上是一个过滤系统,它试图预测和显示用户想要购买的商品。它可能不完全准确,但如果它向你展示了你喜欢的东西,那么它就做对了。

推荐系统近年来变得越来越流行,并且被用于各种领域,包括电影、音乐、新闻、书籍、研究文章、搜索查询、社交标签和一般产品。大多数用于数字领域,今天的大多数电子商务网站,如易贝、亚马逊、阿里巴巴等,利用其专有的推荐算法,以便更好地为客户提供他们肯定会喜欢的产品。还有很多好处,我们将在接下来的博客中介绍。

如果设置和配置得当,它可以显著提高收入、点击率、转化率和其他重要指标。此外,它们还可以对用户体验产生积极影响,这转化为更难衡量但对在线业务非常重要的指标,如客户满意度和保留率。

所有这些都只能通过推荐引擎来实现。推荐引擎基本上是数据过滤工具,它利用算法和数据向特定用户推荐最相关的项目。或者简单地说,他们只不过是“商店柜台伙计”的自动化形式。你向他要一个产品。他不仅展示了那个产品,还展示了你可以购买的相关产品。他们在交叉销售和追加销售方面训练有素。

随着互联网上信息量的增长和用户数量的显著增加,公司根据他们的偏好和口味搜索、绘制并向他们提供相关信息变得越来越重要。聊天机器人也在做同样的工作,但是它们更聪明并且从用户查看或购买的每个产品中学习。

让我们考虑一个例子来更好地理解推荐引擎的概念。如果我没看错的话,你们几乎所有人肯定都用过亚马逊购物。如你所知,亚马逊网站 35%的收入来自其推荐引擎。那么他们的策略是什么?

Reference: Amazon

亚马逊在电子邮件活动和大部分网站页面上使用推荐作为有针对性的营销工具。亚马逊会根据你浏览的内容推荐不同类别的产品,并将你可能购买的产品放在你面前。比如产品页面底部的“经常一起购买”选项,吸引你购买套餐。这一建议有一个主要目标:提高平均订单价值,即通过根据顾客购物车中的商品或他们目前正在现场查看的商品提供产品建议来追加销售和交叉销售顾客。

亚马逊利用用户的浏览历史来让这些产品始终留在顾客的眼中。它使用客户的评级和评论来显示推荐和最畅销选项中平均得分较高的产品。亚马逊想让你买一个包,而不是一个产品。比如你买了一部手机,它会推荐你买一个保护套或者一个屏幕保护套。它将进一步使用来自引擎的建议来发送电子邮件,并让您了解产品/类别的当前趋势。

有哪些不同类型的推荐?

基本上有三种重要的推荐引擎:

  • 协同过滤
  • 基于内容的过滤
  • 混合推荐系统

协作过滤:

这种过滤方法通常基于收集和分析关于用户的行为、活动或偏好的信息,并基于与其他用户的相似性来预测他们会喜欢什么。协同过滤方法的一个关键优点是它不依赖于机器可分析的内容,因此它能够准确地推荐诸如电影之类的复杂项目,而不需要“理解”项目本身。协同过滤基于这样的假设,即过去同意的人将来也会同意,并且他们会像过去一样喜欢相似种类的项目。例如,如果一个人 A 喜欢项目 1、2、3,而 B 喜欢项目 2、3、4,那么他们有相似的兴趣,A 应该喜欢项目 4,B 应该喜欢项目 1。

此外,有几种类型的协同过滤算法:

  • 用户-用户协同过滤:在这里,我们试图搜索长相相似的顾客,并根据他/她的长相相似者的选择提供产品。这种算法非常有效,但需要大量的时间和资源。这种类型的过滤需要计算每个客户对信息,这需要时间。因此,对于大型基础平台,这种算法很难实施。
  • 项目-项目协同过滤:它与前面的算法非常相似,但我们不是寻找看起来相似的客户,而是尝试寻找看起来相似的项目。一旦我们有了商品外观相似矩阵,我们就可以很容易地向从商店购买了任何商品的顾客推荐相似的商品。这种算法比用户-用户协同过滤需要更少的资源。因此,对于一个新客户,该算法比用户-用户协作花费的时间少得多,因为我们不需要客户之间的所有相似性得分。亚马逊在其推荐引擎中使用这种方法来显示促进销售的相关产品。
  • 其他更简单的算法:还有像购物篮分析这样的其他方法,它们通常没有上述算法那样高的预测能力。

基于内容的过滤:

这些过滤方法基于项目的描述和用户偏好选择的简档。在基于内容的推荐系统中,关键字用于描述项目;此外,还建立了一个用户简档来说明该用户喜欢的项目类型。换句话说,算法试图推荐与用户过去喜欢的产品相似的产品。基于内容过滤的理念是,如果你喜欢一个项目,你也会喜欢一个“相似”的项目。例如,当我们推荐同一种类的项目时,如电影或歌曲推荐。这种方法源于信息检索和信息过滤研究。

基于内容的过滤的一个主要问题是系统是否能够从用户关于一个内容源的动作中学习用户偏好,并在其他不同的内容类型中复制它们。当系统被限制为推荐与用户已经在使用的内容类型相同的内容时,当可以推荐来自其他服务的其他内容类型时,来自推荐系统的价值明显较小。例如,基于新闻浏览推荐新闻文章是有用的,但是当基于新闻浏览推荐来自不同服务的音乐、视频时,不是更有用吗?

混合推荐系统:

最近的研究表明将协作和基于内容的推荐结合起来会更有效。混合方法可以通过分别进行基于内容和基于协作的预测,然后将它们结合起来来实现。此外,将基于内容的能力添加到基于协作的方法中,反之亦然;或者将这些方法统一到一个模型中。

一些研究集中于将混合方法的性能与纯协作和基于内容的方法进行比较,并证明混合方法可以提供比纯方法更准确的推荐。这种方法可以用来克服推荐系统中的常见问题,例如冷启动和数据缺乏问题。

网飞是使用混合推荐系统的一个很好的例子。该网站通过比较相似用户的观看和搜索习惯(即协同过滤)以及通过提供与用户评价高的电影具有共同特征的电影(基于内容的过滤)来进行推荐。

Reference: http://dataconomy.com/2015/03/an-introduction-to-recommendation-engines/

总之,在类型的产品推荐引擎上可以做出很多技术性的解释。用户或买家最关心的是产品和引擎给出的推荐质量。这样的认知计算方法可以让你的推荐人的质量更上一层楼。

有哪些‘高级’的 AI 和机器学习在线课程?

原文:https://towardsdatascience.com/what-are-some-advanced-ai-and-machine-learning-online-courses-8609ab281450?source=collection_archive---------1-----------------------

你在哪里可以找到不那么常见,但高质量的‘高级’机器学习和人工智能在线课程(免费)?

为什么是这篇文章?

机器学习是热门且有需求的。

但问题就在这里。

许多年轻的专业人士已经开始了他们的数据科学和机器学习之旅,他们面临着一个共同的问题——他们已经完成了一两门基本的在线课程,完成了一些编程课程,在 Github 上建立了几个项目,然后……然后呢?

学什么?哪里可以找到集中的资源?基础掌握之后去哪里找稍微高级一点的课程?

在我之前的一篇关于媒体的文章(由 TDS 团队发表)中,我详细讨论了,在那里你可以找到 MOOC(大规模开放在线课程)来启动你进入数据科学和机器学习的旅程。那篇文章假设读者是初学者,并涵盖了基本的 MOOCs,这些 MOOCs 针对基础和中级学习进行了优化。你可以在这里找到那个,

[## 机器学习和数据科学如何选择有效的 MOOCs?

给渴望学习并为数据科学/机器学习做出贡献的非 CS 领域专业人士的建议。策划自…

towardsdatascience.com](/how-to-choose-effective-moocs-for-machine-learning-and-data-science-8681700ed83f)

我写了另一篇详细的文章,专门关注数据科学和机器学习需要掌握的数学概念以及学习哪些课程的主题。你可以在这里找到那个,

[## 数据科学的基本数学——“为什么”和“如何”

数学是科学的基础。我们讨论了成为更好的数据科学家需要掌握的基本数学主题…

towardsdatascience.com](/essential-math-for-data-science-why-and-how-e88271367fbd)

最近,我在个人邮箱和 LinkedIn 收件箱里收到了很多信息,大多来自聪明、年轻的专业人士,询问类似的问题和我对在线课程的建议。

对于这些信息,我大多都有现成的答案。我只是给他们发了一个我的文章列表(依次包含了来自 KDnuggets 或 Team AV 的其他高引用文章的链接和参考)。大多数情况下,我都会收到满意的回复:-)

然而,自从写了这些文章,我个人参加了一些人工智能和机器学习(ML)的“高级”课程,看到了一些讨论和评论,自然觉得有必要更新这些参考资料。

经过一番思考后,我决定最好留下原来的文章,因为它们确实迎合了初学者的需要,也很好地满足了许多读者的需求,并尝试编写一份新的在线课程列表。

这就是这篇文章的内容。

我所说的“高级”水平课程是什么意思?

“高级”是一个相对的术语。最好有一个基线来解释这个上下文中的单词。幸运的是,说到 ML 在线 MOOC,我们几乎有了一个黄金标准——教授吴恩达的 Coursera 课程(原版的,不是 Deeplearning.ai 专精)。

因此,在本文中,我所说的“高级”是指两个特征,这两个特征需要在将要讨论的课程中出现(不一定同时出现),

  • 比上述课程更广泛,即涵盖更高级和更多样化的主题
  • 与人工智能或 ML 相关的高度专业化的焦点

我希望我能说明,我的意图并不是说吴教授的课程是初级课程。这仍然是你所能要求的对机器学习世界的最好介绍——尤其是对初学者而言。但是,在你完成那门课程后,做一些编程,对数学概念感到舒适,你应该建立在你的基础上,学习不同的主题。

我只是希望这篇文章能通过列出一些专注于此的免费 mooc 来帮助你做到这一点。

选课的唯一重点是什么?

人工智能和人工智能是热门话题,涵盖这些主题的免费在线课程并不缺乏。尽管如此,我发现真正高质量的人工智能课程少得惊人。

是的,我就在那个阵营里,这个阵营坚信深度学习不是人工智能,因此拒绝任何课程的概念,标题里有“AI”这个词,但只涵盖 Python 中的深度学习框架,被归类为 AI 课程。

因此,为了将我的列表限制在有限数量的高质量课程上,我列出了一些简单的基本规则或过滤器。

  • 我倾向于避免任何重点放在特定编程框架/工具上的课程,也就是说,没有像“Python 的机器学习……”这样的课程(一些例子或代码片段是可以的)
  • 按照同样的逻辑,这份名单将有一些课程非常强调理论基础——这主要有利于大学课程,而不是由个体企业家或公司(如 fast.ai、谷歌、微软、IBM 等)提供的课程。)
  • 类似地,我也加入了 Udacity 的课程,这些课程是由大学教师或知名研究人员教授的,比如巴斯蒂安·特龙或彼得·诺维格。我没有包括他们的纳米学位参考文献,我不认为这有助于提高智力。
  • 我提出了两个对真正的人工智能学习非常重要但受到较少关注的主题— 强化学习博弈论
  • 没有主要侧重于数据科学/数据工程/数字分析/应用统计的课程。在当今世界,它们都是非常重要的学习主题,但为了这篇文章,我更愿意将它们与我对纯机器学习和人工智能的关注完全分开。

我相信这种关注将会自动地将列表导向高质量的人工智能和人工智能的基础课程,这将有利于中级到高级的学习者。

毕竟,你将是法官。

就我个人而言,我并没有修完所有的课程,尽管我已经完成了其中很大一部分。所以,我尽量让我对课程的评论简洁而真实。

链接和参考

没有进一步的拖延,这是清单。

通用机器学习和深度学习

这些课程涵盖了一般的 ML 和 DL 主题。

Source: https://www.jeremyjordan.me/support-vector-machines/

  • 乔治亚理工学院的“机器学习”关于 Udacity 的课程:这是最全面的 ML 课程之一,涵盖了有监督的、无监督的学习、随机化优化技术(例如遗传算法)、强化学习,甚至是介绍性的博弈论概念。
  • 原斯坦福课堂版吴恩达讲座:这是吴教授在斯坦福的 ML 课程的完整课堂版。深入涵盖了淡化的在线 MOOC 中缺失的 ML 基础主题。
  • 国家研究型大学高等经济学院关于 Coursera 的“高级机器学习专业:这是俄罗斯研究人员提供的一套很棒的课程(共 5 门)。很好地涵盖了实用的深度学习技术以及基本概念。
  • 【规模机器学习】Yandex 在 Coursera 上的文章:涵盖了使用 MLib/Spark 等的 ML 模型的部署和放大。
  • “机器学习加州理工课程” :之前在 edX 上,但后来移到了 Mostafa 教授的主页。链接点在那里。在机器学习和一般学习理论的深层数学方面,这是一门伟大的基础课程。
  • 机器学习基础加州大学圣地亚哥分校 edX 上的“机器学习基础”:一门平衡的课程,教授 ML 中的核心理论和实践概念,重点是算法问题。

人工智能和博弈论

Photo by rawpixel on Unsplash

这些都是 AI 和博弈论相关的课程。

Udacity 的“人工智能导论”课程 :你目前在网络上能找到的最全面的核心 AI 课程。它由两位著名的专家——巴斯蒂安·特龙和彼得·诺维格教授。它们涵盖的主题包括人工智能搜索算法、规划、表征逻辑、概率推理、机器学习、马尔可夫过程、隐马尔可夫模型(HMM)和过滤器、计算机视觉、机器人和自然语言处理。

哥伦比亚大学的“人工智能(AI)”edX上的课程:这也是对 AI 中本质话题的综合复习,只是在不那么严谨的层面上。这是对人工智能广泛领域的一个很好的介绍,涵盖的主题包括-智能代理的类型和定义,人工智能的历史,搜索,游戏,逻辑,约束满足问题,人工智能在自然语言处理(NLP),机器人和计算机视觉中的应用示例。

斯坦福大学在 Coursera 上的博弈论:这是对博弈论精彩世界的一个很好的介绍(还很全面),涵盖了所有基本主题,如纳什均衡、混合策略、相关均衡、子博弈完美、扩展形式、重复博弈和民间定理、贝叶斯博弈、联盟博弈。

【基于知识的人工智能:认知系统】由佐治亚理工学院在 Udacity 上举办:关于传统人工智能(或他们称之为 GOFAI)的综合课程,涵盖的主题包括——语义网络、手段和目的分析、基于案例的推理、增量概念学习、逻辑和规划、类比推理、约束传播和元推理。

强化学习

Photo by Franck V. on Unsplash

这些是强化学习相关的课程。

佐治亚理工学院在 Udacity 上的“强化学习”课程:这可能是最全面的强化学习课程了。两位老师都非常博学,对这门学科充满热情。交付方式是会话式的,有趣的。它涵盖了所有的主题,如 MDP 基础知识、时间差异(TD)学习、价值和政策迭代、Q 学习、收敛特性、奖励成形、土匪问题、Rmax 分析、一般随机 MDP、状态概括、POMDP、期权、目标抽象技术、机制设计、蒙特卡罗树搜索、DEC-POMDP、政策评论家概念等。

实用强化学习,由国立研究型大学高等经济学院在 Coursera 上提供:这是另一个涵盖基本 RL 主题的非常全面的课程。与乔治亚理工学院课程的主要区别在于,它不包括博弈论讨论,而是提供更多关于深度 Q 学习的讨论。这是一门实践性更强的课程,教你构建 RL 代理的实用技巧(但不一定是完整的代码)。

其他相关主题

乌达城的“机器人人工智能:这是一门很棒的小课程,专门关注人工智能在机器人领域的应用,授课老师不是别人,正是巴斯蒂安·特龙。他涉及的主题包括——定位、卡尔曼滤波器、粒子滤波器、高级人工智能搜索技术、PID 控制、SLAM(同步定位和绘图)等。

用于机器学习的数学专业化伦敦帝国理工学院 Coursera 上的:四门课程的伟大专业化,专门致力于建立机器学习的数学基础。它涵盖了——多变量微积分、线性代数和主成分分析(一个完整的短期课程)。

摘要

我希望给你一些免费在线课程的建议,这些课程涵盖了机器学习和人工智能的一些高级主题。在这篇文章中,我特别列出了 MOOCs,没有考虑自由形式的视频讲座(斯坦福 CS229 课程除外)。当然,你可以从各个大学的在线平台上搜索这样的视频讲座,它们通常质量很高。

祝你在学习这些令人兴奋的话题的旅途中取得巨大成功!

如有问题或想法分享,请联系作者tirthajyoti【AT】Gmail . com。此外,您可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。如果你像我一样对机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。

** [## Tirthajyoti Sarkar - Sr .首席工程师-半导体、人工智能、机器学习- ON…

查看 Tirthajyoti Sarkar 在世界上最大的职业社区 LinkedIn 上的个人资料。Tirthajyoti 有 8 份工作…

www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)**

您的数据科学团队可能失败的 3 个阶段是什么?

原文:https://towardsdatascience.com/what-are-the-3-stages-where-data-science-teams-fail-e9f8bcd86825?source=collection_archive---------7-----------------------

在分析成熟度的每个阶段,技能、工具和流程的正确组合是什么

今天,大多数组织都声称是人工智能驱动的。这到底是什么意思有待解释。一些组织可能正在制作 excel 报表,而其他组织可能正在构建认知模型。但是,事实是,每个人都渴望在分析中发挥作用。

但是最大的问题是,我们应该从哪里开始呢?

应该从哪里寻找人才?团队应该如何组织?他们如何扩大规模以避免不可避免的、缓慢的死亡,这是大多数团队面临的问题?在数据科学团队的早期阶段行之有效的方法,在几年后,在他们实现最初的承诺后,就不再适用了。

随着数据科学市场的不断发展,没有标准的指导方针可以遵循。本文旨在填补这一空白。

首先,数据科学团队的需求是什么?

根据任何分析师的估计,公司正投入数千亿美元来解决数据问题。关键问题是得出可以推动业务决策的可行见解。一提到“分析”这个词,人们就会联想到预测模型和花哨的算法。

然而,只有在相关业务环境中正确应用相关技术,数据科学才能带来价值。即使是最简单的探索性分析,如果做得正确,也会带来丰厚的回报。人工智能有其应有的地位,但它不是解决所有数据问题的银弹。

数据科学团队发展的 3 个阶段是什么?

Photo by Todd Diemer on Unsplash

让我们看看如何着手孵化一项数据科学实践或一家提供分析服务的初创公司。从建立 Gramener 的经验中,我将追踪成长的三个不同阶段,每个阶段需要的重点领域和技能,并分享如何获得合适人才的智慧。

令人惊讶的是,这种数据科学团队的规模与我们的祖先多年来建造避难所的方式有几个相似之处。因此,为了增添一些乐趣,让我们将每个阶段与建造房屋的类比进行对比,并追溯不同时期的复杂程度:石器时代、中世纪和现代。

第一阶段:“临时营地”

(Pic by José-Manuel Benito — Own work, Public Domain on wikimedia)

启动数据科学实践的最佳方式是直接投入,确定挑战的优先级,并提供一套现成的工具。人们必须挑选几个可以通过数据解决的紧急和关键的业务问题,而不是煮沸海洋。分析是一个漫长的旅程,开始的工作是成功的一半。

类似地,为理想的技能组合做过多的准备会导致分析瘫痪。船上的多面手,能够涵盖许多分析所需的技能的人(比如统计、编程和信息设计),即使只是有限的深度。需要的是幸存者,他们在匮乏中茁壮成长,身兼多职,并注入活力来解决任何特定的挑战。

雇佣这样的初创阶段的超级明星需要非常规的方式。避开所有正规渠道。接入你的网络,在会议上发言和联系,通过技术传播者发出试探。这些早期的人不是为了工作或额外津贴而来,而是为了满足他们原始激情的自由挑战。

从你所在的地方开始。利用你所拥有的。尽你所能。——阿瑟·阿什

在我们的房屋建筑类比中,我们现在处于石器时代。为了满足基本的生理需求,穴居人建造了基本的、功能性房屋 。帮助选择可行的地点、收集原材料、设计最粗糙的架构的通才技能,以及“完成工作”的常识就是所需要的全部。

第二阶段:“茅草屋”

(Pic by OpenClipart-Vectors / 27440 images)

在最初的团队取得小胜利并确立目标后,数据科学团队可以开始向邻近的用例展开。慢慢扩大所解决问题的范围,加深与用户的伙伴关系。最初的试点现在可以发展成跨越一个季度或一年的长期计划。

展示增强的投资回报率,以证明下一级投资需求的合理性。虽然事情可能开始朝着对你有利的方向发展,但是在这个过渡阶段要避免过度承诺。开始专业化,投资于几个更深的领域(比如销售分析、 NLP ),同时继续保持浅层次,完成其他领域的工作(比如设计)。

随着多面手继续主持节目,开始填补更专业的角色。通过黑客马拉松、专业精修 学校扩大招聘渠道,同时将现有员工提升到数据科学领域。开始根据所选的几个专业领域组织团队,同时保持视野开阔,反应敏捷。

前进,永不停止,因为前进就是完美。哈利勒·纪伯伦

随着人类的前进,房屋建筑的复杂程度迅速提高。效率和效果来自于稍微好一点的原材料和少数像泥瓦匠这样的核心角色,而多面手涵盖了其余部分。尽管梦想比头顶上的多一点点,功能&目的才是至高无上的。

第三阶段:“富丽堂皇的家”

(Pic by pngtree)

作为一个不断发展的实体,数据科学团队现在基本上是一个成熟的业务部门。凭借专业领域的专业知识和对所有关键数据科学技能领域的掌握,该团队现在已准备好处理广泛领域中足够复杂的问题。

不再面临生存挑战,团队的任务可以深深地融入到涉众的长期业务目标中。团队的结构可以是垂直排列的,或者是水平排列的技术卓越中心,或者是介于两者之间的混合矩阵结构。

用成熟的招聘流程和内部招聘人员推动快速增长的业务。对于庞大而多样的人数,通过增加传统渠道,广撒网招人。至关重要的是,在保持早期通才、满足专家期望的同时,还要标准化流程以扩大组织规模。

完美是不可达到的,但是如果我们追求完美,我们就能赶上优秀。——文斯·隆巴迪

快进到现代,我们有规模经营的建筑公司。专业组织拥有房屋建筑的各个方面,如设计、建筑、工程。虽然形式和功能被认为是理所当然的,但它承诺的是更高的生活质量和细微的方面,如优雅和可用性。

摘要

3 Stages of Data Science teams evolution: Summary Illustration

我们已经了解了数据科学团队发展的 3 个关键阶段。第一部分的重点是采取小步快速起步,完成小目标。第二种方式是通过提升特定领域的能力,同时在所有其他领域保持多面手的地位,迈出有分寸的步伐。

最后,第三种方式更像是在跑马拉松,你必须集中精力,正确处理,并做好长期高效工作的准备。因此,每个阶段的重点、技能、招聘渠道以及组建团队的指导方针在这三个阶段都有很大的不同。

未能认识到这种区别可能会被证明是致命的做法,而熟练地处理这些细微差别可以作为释放增长的硝基助推器。贯穿这三个方面的关键原则是提供可操作的见解,推动业务决策并为数据科学投资带来投资回报。

如果你觉得这很有趣,你会喜欢我写的这些相关文章:

  • 让你在数据科学生涯中不可或缺的 4 种超能力
  • 数据科学家面试失败的 4 种方式

对数据科学充满热情?随时在LinkedIn上加我,订阅我的 简讯

数据科学中的关键技能有哪些?

原文:https://towardsdatascience.com/what-are-the-key-skills-in-data-science-99415719e9e1?source=collection_archive---------4-----------------------

作为关于数据科学所需技能和经验的 白系列访谈 的一部分,我形成了以下关于数据科学、管理和团队建设的想法。

在数据科学访谈系列的第四部分 中, 管理分析 团队采访了 Lee Schlenker。他是商业分析和社区管理教授,也是商业分析学院的负责人之一。他的研究兴趣包括分析、决策和社区管理。他们讨论了商业中对数据科学技能和数据文化的需求。

“作为一名从业者、演讲者和顾问,我努力帮助学生和管理从业者理解数据如何改善管理决策。在我的研究生和高管会议和任务中,我对数据科学的愿景——“商业分析 4.0 ”建立在四个支柱上:理解数据在当今经济中扮演的角色,研究密切影响人类决策的认知过程,将机器学习应用于企业试图解决的特定类型的问题,以及帮助他们将数据转化为可操作的决策。在过去的一周里,商业分析研究所一直在采访专业人士,内容涉及数据科学中的技术、认知和商业技能,以及人力资源如何识别合适的候选人。在这里,我想谈谈我对这些技能在数据科学中的重要性的看法。”

贸易技能指的是对每个市场的商业逻辑、组织和公司资源货币化的理解。数据科学经理需要有良好的业务背景,以便分析数据如何反映业务实践的现实。

“管理主要是帮助内部和外部客户做出更好的决策。由于人类的决策会受到对风险、不确定性和模糊性的感知的影响,数据科学的作用是帮助管理层根据他们面临的问题(或机会)的性质做出最佳决策。数据科学是一种思维方式,而不是一套技能——管理候选人需要证明他或她通过分析方法“解决”业务问题的能力:评估背景(行业和企业业务模式的逻辑),确定问题的根源,评估可供您使用的数据的质量,选择正确的方法来解决问题,并利用数据为集体行动创造条件。”

技术技能,指的是数据科学和管理,远不止是计算机知识;它需要了解行业中使用的算法和技术,以及如何将它们应用到业务需求中。

“技术技能涵盖的远不止计算机知识,技术是我们用来与客户和组织互动的工具的同义词。在研究软件和算法之前,管理候选人需要掌握技术在他们希望工作的行业和组织中是如何使用的。随着数字化转型中的创新站稳脚跟,这些技术确实在不断发展——竞争优势的基础源于当前技术如何捕获、聚合和交流数据,以及机器学习背后的分析方法如何促进意义的形成。最后一点是判断一个经理应该了解多少技术知识的关键——候选人应该对数据、数据存储、算法和软件有足够的了解,以帮助他或她的客户理解他们所掌握的数据。”

认知技能指的是理解人们如何解读他们看到的数据,以及他们如何利用数据来煽动行动。人们从不同的角度看待数据,优秀的数据科学经理会在手头问题的背景下从数据中寻找解决方案。

“数据科学的目标不是让机器变得更智能,而是帮助人们做出更好的决策。让我们记住,软件是由人编写的——最好的算法并不比编写它们的人更好。人们从不同的角度看待数据,因为他们从不同的角度看待价值。同样,我们数据的价值并不来自数据本身,而是来自使用它的环境。Kahneman 和 Tversky 在行为经济学方面的工作是非常重要的。在这里,管理者需要理解数据呈现的环境如何在解决具体问题时调节其感知价值。同样,格式塔原理和视觉传达的各种工作提供了数据如何或能够转化为行动的关键。"

人力资源招聘人员在招聘时应该更具分析性,通过测试应聘者所申请公司的真实数据问题来评估他们。

“我强烈建议将分析方法应用于我们如何接触人力资源。由于许多客户公司并不完全确定他们需要什么样的技能和能力,招聘人员可以从研究公司背景开始,以了解这个职位应该解决哪些问题或机会。在评估候选人的资历时,招聘人员最好调查一下候选人的数据测试如何揭示他或她的经历、过去的任务和成就,而不是看他们的简历。面试本身可以被设计成反映候选人在工作中将要面临的问题类型。最后,他或她的视觉沟通技巧应该在面试过程中展示出来。如果候选人的知识可以在电脑后面测试,那么候选人对公司的价值应该在他或她未来的同事面前测试。”

当今最好的人力资源机构可以通过紧跟该领域的最新趋势来识别优秀的数据科学家。

“我们在这里假设,公司或咨询公司以一致和统一的方式招聘——不幸的是,情况很少如此。脑海中浮现出某些项目经理和顾问,他们似乎在公司文化和与数据科学团队合作方面分享了大量经验。他们追随行业的发展,更倾向于关注问题的解决,而不是追随硬件和软件的最新趋势。最后,他们通常与顶级大学和专业协会都有密切联系,这使他们能够监控候选人库,以满足他们团队(或客户)的未来需求。”

Lee Schlenker 是 http://baieurope.com PAU 商学院的教授,同时也是商业分析学院的负责人。 他的 LinkedIn 简介可以在www.linkedin.com/in/leeschlenker.查看这是** 商业分析研究所 关于数据科学和数据科学技能的一系列面试的一部分。**

阅读白对数据科学专业人士的其他访谈系列:

白访谈系列:Yves Mulkers 关于数据科学的技巧

白访谈系列:Davy Cielen 谈数据科学技巧

白访谈系列:麦肯恩院长谈数据科学技巧

一个伟大的数据科学经理具备哪些素质?

原文:https://towardsdatascience.com/what-are-the-qualities-of-a-great-data-science-manager-6c936240cbb?source=collection_archive---------2-----------------------

这是我被问了很多次的事情。

首先,让我陈述一个显而易见的事实:数据科学经理通常需要成为优秀的经理。现实是,大多数技术人员、开发人员和科学家并不真正关心经理——或者只是把他们当作必要的开销。然而,正如各种高调实验所证明的那样,最好的管理者对团队的表现有着巨大的影响。

一个好的经理有远见,以目标为导向,关心团队,听取他们的决定,是一个导师和教练,授权和激励团队成员,避免微观管理。所有的软件工作都需要这样的管理者。

最重要的是,数据科学工作提出了自己独特的挑战,因为它是多学科的,新的,迭代的,工作流令人困惑,结果往往难以解释和说明,行话很多,数学对于不熟悉它的人来说很棘手,一些模型是一个黑盒,并且有关于什么可以做什么不可以做的宣传。

斯坦教授是这样说的:

成功管理一个数据科学团队需要的技能和理念不同于管理其他聪明的专业人员团队。明智的做法是意识到可能出现的潜在组织摩擦和权衡。

那么,一个伟大的数据科学(产品)经理还需要具备哪些特质呢?我认为高效的数据科学经理有 5 个品质:

  1. 平衡跨数据、数学/统计、机器学习和软件领域的技术差异,并将它们与业务背景和价值联系起来
  2. 通过在全局水平上做出贡献(是否有盲点,我们是否在正确的轨道上,挑战假设)以及提供关于决策(例如模型选择、不确定性水平)和解释的反馈,赢得技术团队的尊重和信任,更重要的是,
  3. 增加结构(例如,工作流、具有反馈循环和代码审查的敏捷流程、代码库、文档),吸收冲击和消除障碍,识别脱节(例如,业务和数据科学之间或数据科学和开发运营之间)并建立共识,促进平稳的工作环境,管理工作量,设定节奏并保持质量
  4. 掌控关键工作流程领域,如数据采集、数据质量、确定最重要方面的优先级、结果展示等
  5. 知道如何为现实世界的应用推出数据科学解决方案..计划、管理或协调实现业务价值所需的业务流程变更、生产级代码和 IT 运营

Balázs Kégl 谈到了“形式化者”,这是数据科学家的一个特殊类别。下面是稍微编辑过的的帖子节选(方括号是我的)。

他们掌握在数据科学方面什么是可能的,在业务方面什么是需要的【有价值的、可行的】。他们能够流利地与领域专家交流,将业务目标转化为损失[技术]指标。他们形式化数据科学原型工作流(但他们不一定构建它们)。他们可以定义和确定数据收集工作的规模,并估计其成本。他们还可以估计构建和调整工作流并将其投入生产所需的工作量。

简而言之,数据科学形式化者拥有做出关于构建以数据为中心的产品的明智决策的所有要素。

当然,上面提到的每一点都可以添加很多细节,但重点是开始一场对话。你怎么想呢?有什么需要补充的吗?有什么故事可以分享吗?

参考资料:

[## 为什么管理数据科学家与众不同

成功管理一个数据科学团队需要的技能和理念不同于那些在…

sloanreview.mit.edu](http://sloanreview.mit.edu/article/why-managing-data-scientists-is-different/)

斯坦福大学的人工智能讲座https://www.youtube.com/watch?v=21EiKfQYZXc

https://medium . com/forward-data-science/the-data-science-ecosystem-industrial-edition-938582427466

工作规则!:来自谷歌内部的洞见将改变你的生活和领导方式作者:拉兹洛·博克

TED 中反复出现的话题是什么

原文:https://towardsdatascience.com/what-are-the-recurring-topics-in-ted-8392cf9f3fb?source=collection_archive---------2-----------------------

今天我探索了 TED 演讲和 T2 数据,他们的话题和观众。

鉴于 TED 上想法的多样性,演讲通常有几个相关的主题和标签。

为了可视化各个主题及其各种组合的频率,我使用了 R/python/D3 中的一个工具,名为 UpSet ,它是由一组哈佛研究人员开发的,使用矩阵、条形图和附加属性图来描述部分到整体的关系以及不同集合的交集。

首先,我研究了前 30 个主题的频率(总共 48 个主题)

我们可以看到:

  • 创意火花是最常见的主题
  • 顶级主题关注非传统智慧、前瞻性思维和有意义的故事
  • 常见的组合主题包括艺术的不寻常和创造性的火花,壮观的表演和创造性的火花,什么让我们快乐&大脑是如何工作的

同样,我查看了标签/主题,因为有 289 个标签/主题,所以我偷偷查看了涵盖一半讲座的前 30 个标签/主题,所以这仅反映了这 30 个标签内的讲座,不包含其他标签。

我们可以看到:

  • 技术、文化、科学、全球问题和设计是热门话题
  • 科学与技术,设计与技术,生物与科学,全球问题与文化,以及音乐,艺术与娱乐是一些反复出现的组合主题

接下来,我按主题查看了 2001 年至 2012 年间观点和喜好最多的会谈。鉴于一个演讲会出现在不止一个主题中,我将把它列为下一个最受欢迎的。

肯·罗宾逊 2006 年关于学校扼杀创造力的演讲是有史以来点击率最高的演讲,有 1200 万次点击率,是 3K 的最爱。

看看标题中的关键词也能让我们对主题有所了解。以下是 TED 演讲题目中最常见的 10 个动词、形容词和名词:

在会谈的内容中,在总共 1000+次会谈中,“人民”一词出现在《10K 时报》周围。

相关文章:

寻找 TED 演讲的特点
TED 演讲人的职业

这是我关于数据科学和视觉故事的# 100 日项目的第 60 天。我的 github 上的全部代码。感谢阅读。如果喜欢,请分享。欢迎新主题的建议和反馈。

成为一名数据科学家需要具备哪些技能?

原文:https://towardsdatascience.com/what-are-the-skills-needed-to-become-a-data-scientist-in-2018-d037012f1db2?source=collection_archive---------5-----------------------

根据 Glassdoor 的数据,数据科学家是 2017 年美国排名第一的职业。这并不奇怪,因为该领域的平均基本工资为 123,000 美元。尽管如此,数据科学就业市场远未饱和,仅在美国就估计短缺 19 万名专家。如果你正在考虑转向数据科学的职业生涯,2018 年将提供大量有利可图的机会。这篇文章的目的是让人们更清楚地知道在 2018 年成为一名数据科学家需要什么。

为了揭示这个不断发展的领域,我们在 2017 年底进行了一项关于这个主题的研究。这项研究包括从 1,001 份 LinkedIn 简历中收集数据,这些简历中的人目前都有“数据科学家”的头衔。这群人被分为两组——在财富 500 强公司工作的人和在其他地方工作的专业人士。此外,该样本包括在美国(40%)、英国(30%)、印度(15%)和其他国家(15%)工作的数据科学家。因此,数据是从具有各种背景的数据科学家那里收集的,以限制偏见。

典型的数据科学家特征

A male, who speaks at least one foreign language, and has a second-cycle academic degree (Master’s or PhD). He has been in the workforce for 4.5 years, after taking him 2 years to land the title. R and Python are the preferred coding languages, followed by SQL.

人们不禁会注意到,数据科学专业在很大程度上是由男性主导的,他们占样本的 70%。尽管如此,随着该领域的巨大需求,每个有知识的人在该行业都有一席之地。所以如果你恰好是女性,请不要气馁,继续读下去。

数据科学家需要哪些顶级技能?

以下是科学家在个人资料中发布的最常见的技能数据。

R 和 Python 是主导数据科学领域的编程语言。据报道,53%的数据科学家能够“说”R 和/或 Python。请注意,它们可能会重叠,因为一些数据科学家同时使用两种语言。

在不断变化的数据科学世界中,这些是专业人员在工作中使用的最新工具。r 和 Python 是最基本的编程语言,每个打算进入这个行业的人都应该学习。

尽管数据表明 R 是使用更广泛的语言,但是根据 Stack Overflow 社区的说法,考虑将 Python 放在你的待办事项列表的首位,因为这是发展最快的编程语言。很可能到 2019 年,Python 的受欢迎程度将大大超过其他编码语言。它的灵活性和相对易用性是 Python 脱颖而出的主要原因。

数据科学的其他流行语言有:

SQL (40%)

MATLAB (19%)

Java (18%)

C/C++ (18%)

渴望了解更多信息?

我们发现,拥有 SAS、LaTex、Hadoop 或 Tableau 也有好处。在基础之外扩展你的技能可以显著提高你获得数据科学家职位的机会。

工作经验

鉴于数据科学家这一职业最近才出现,数据科学家的工作经验中位数为 2 年也就不足为奇了。如果你申请的是一个数据科学职位,而之前没有该领域的经验,你也不必感到尴尬。你不会是第一个。在我们的样本中,只有 36%的数据科学家曾经是他们之前工作的数据科学家。这个领域有很大的发展空间。另外 64%的人的职位是什么?嗯,最常见的背景是分析师(19%)、IT 专家(16%)或学者(12%)。

此外,8%的人在获得数据科学家工作之前是实习生。

从底层开始,那些人实现了梦想。所以,你能不能!

教育和培训

大多数从事数据科学家工作的专业人士都受过高等教育。事实上,调查结果表明,大约 75%的数据科学家拥有博士或硕士学位。

另一方面,一个花哨的学位并不是必须的。研究样本中大约 25%的数据科学家毕业于“未排名的大学”。换句话说,你的大学是否在“泰晤士高等教育”排行榜上,并不一定会决定你在数据科学领域开始职业生涯的机会。

此外,只有 13%的专业人员参加了数据科学和分析大学项目。大多数数据科学家拥有计算机科学(20%)、统计和数学(19%)或社会科学(19%)学位。只要你有一些定量的背景知识,你就有可能踏入数据科学的大门。

因此,你不一定要参加额外的学术项目来获得工作所需的技能。如果你想提升你的技能,在线课程是一个可行的选择。近 40%的数据科学家在他们的 LinkedIn 简历中报告注册了在线课程。

就业行业

一旦你掌握了技能,你需要卷起袖子去找工作。那么,数据科学找工作最好的行业是什么?在英国和美国的就业市场,你很可能会被工业公司(制造业、快速消费品、公用事业、咨询等)聘为数据科学家。).然而,印度的情况并非如此,那里大多数(68%)的数据科学家受雇于科技和 IT 公司。

医疗保健和金融行业似乎也需要数据科学家,占整个样本的 14%和 6%。

雇佣公司

你觉得自己是在财富 500 强中还是更被小公司吸引?不管公司层级如何,似乎各种规模的公司都雇佣了能够用 R、Python、SQL 和 Matlab 编程的数据科学家。然而,如果你要去一家财富 500 强公司,SAS 和 Hadoop 可能会派上用场。图表之外的公司很少需要能够使用 Hadoop。在 F500 中,大数据为王,这对于较小的公司来说是不正确的。

这是数据科学专业在 2017 年底的样子,也可能是整个 2018 年的样子。好消息是,即使你没有匹配的学位或足够相关的工作经验,你仍然可以赶上相关的技能和工具。如果你对数据和终身学习充满热情,2018 年是开始从事数据科学家职业的时候了。

你可以在这里阅读完整的研究。

机器学习的类型有哪些?

原文:https://towardsdatascience.com/what-are-the-types-of-machine-learning-e2b9e5d1756f?source=collection_archive---------1-----------------------

面向普通人的机器学习:为普通人编写的机器学习类型分析。

机器学习

在高层次上,机器学习只是研究如何教会计算机程序或算法逐步改进给定的任务。在事物的研究方面,机器学习可以通过这个过程如何工作的理论和数学模型来看待。然而,更实际的是研究如何构建展示这种迭代改进的应用程序。有许多方法来构建这个想法,但大体上有三个主要的公认类别:监督学习、非监督学习和强化学习。

在一个被人工智能、机器学习和过度热衷于谈论这两者的世界里,学习理解和识别我们可能遇到的机器学习类型是一件有趣的事情。对于普通计算机用户来说,这可以采取理解机器学习的类型以及它们如何在我们使用的应用程序中展示自己的形式。对于创建这些应用程序的从业者来说,了解机器学习的类型是至关重要的,这样,对于您可能遇到的任何给定任务,您都可以创建适当的学习环境,并了解为什么您所做的工作有效。

监督学习

监督学习是最流行的机器学习范式。它最容易理解,也最容易实现。这非常类似于教一个孩子使用闪存卡。

给定带有标签的示例形式的数据,我们可以将这些示例-标签对一个接一个地馈送给学习算法,允许算法预测每个示例的标签,并向它提供关于它是否预测了正确答案的反馈。随着时间的推移,该算法将学习近似示例及其标签之间关系的确切性质。经过充分训练后,监督学习算法将能够观察到一个新的、从未见过的例子,并为它预测一个好的标签。

因此,监督学习通常被描述为面向任务的。它高度专注于一个单一的任务,向算法提供越来越多的例子,直到它能够准确地执行该任务。这是您最有可能遇到的学习类型,因为它在以下许多常见应用程序中都有展示:

  • 广告流行度:选择表现良好的广告通常是一项监督学习任务。当你浏览互联网时,你看到的许多广告被放在那里,因为一个学习算法说它们有合理的流行度(和可点击性)。此外,它在某个网站上或与某个查询(如果你发现自己使用搜索引擎)相关联的位置在很大程度上是由于一个习得的算法,该算法认为广告和位置之间的匹配将是有效的。
  • 垃圾邮件分类:如果你使用现代电子邮件系统,你可能会遇到垃圾邮件过滤器。垃圾邮件过滤器是一个监督学习系统。Fed 电子邮件示例和标签(垃圾邮件/非垃圾邮件),这些系统学习如何先发制人地过滤掉恶意电子邮件,以便其用户不会受到它们的骚扰。其中许多还以这样的方式运行,即用户可以向系统提供新的标签,并且系统可以学习用户偏好。
  • 人脸识别:你用脸书吗?最有可能的是,你的脸已经被用于一个被训练来识别你的脸的监督学习算法中。拥有一个可以拍照、识别人脸、猜测照片中的人(建议使用标签)的系统是一个受监督的过程。它有多个层次,找到面孔,然后识别他们,但仍然受到监督。

无监督学习

无监督学习与监督学习完全相反。它没有标签。相反,我们的算法将被输入大量数据,并被赋予理解数据属性的工具。从那里,它可以学习分组、群集和/或组织数据,以便人类(或其他智能算法)可以进入并理解新组织的数据。

无监督学习之所以成为一个如此有趣的领域,是因为这个世界上绝大多数的数据都是未标记的。拥有智能算法,可以获取我们数万亿字节的未标记数据,并对其进行理解,这是许多行业潜在利润的巨大来源。仅此一项就可以帮助提高许多领域的生产率。

例如,如果我们有一个包含所有已发表的研究论文的大型数据库,并且我们有一个无监督的学习算法,知道如何以这样一种方式对这些论文进行分组,以便您始终了解特定研究领域的当前进展,会怎么样?现在,你开始自己启动一个研究项目,将你的工作钩入这个算法可以看到的网络。当你写下你的作品并做笔记时,该算法会向你提出相关作品的建议,你可能希望引用的作品,甚至可能帮助你推进该研究领域的作品。有了这样的工具,你的工作效率会大大提高。

因为无监督学习是基于数据及其属性,我们可以说无监督学习是数据驱动的。无监督学习任务的结果由数据及其格式化方式控制。您可能会在以下领域看到无监督学习:

  • 推荐系统:如果你曾经使用过 YouTube 或网飞,你很可能会遇到一个视频推荐系统。这些系统经常处于无人监管的领域。我们知道关于视频的事情,也许它们的长度,它们的类型,等等。我们也知道很多用户的观看历史。考虑到用户已经观看了与你相似的视频,然后欣赏了你尚未观看的其他视频,推荐系统可以在数据中看到这种关系,并向你提示这样的建议。
  • 购买习惯:你的购买习惯很可能包含在某个地方的数据库中,而这些数据此时正在被积极地买卖。这些购买习惯可以在无监督学习算法中使用,以将客户分组到相似的购买细分中。这有助于公司向这些分组的细分市场营销,甚至可以类似于推荐系统。
  • 对用户日志进行分组:面向用户较少,但仍然非常相关,我们可以使用无监督学习对用户日志和问题进行分组。这可以帮助公司识别其客户面临的问题的中心主题,并通过改进产品或设计 FAQ 来处理常见问题来纠正这些问题。无论哪种方式,它都是积极完成的事情,如果你曾经提交过产品的问题或提交过错误报告,它很可能会被输入到无监督的学习算法中,与其他类似的问题进行聚类。

强化学习

与监督和非监督学习相比,强化学习是相当不同的。我们可以很容易地看到监督和非监督之间的关系(标签的存在或不存在),与强化学习的关系有点模糊。一些人试图将强化学习与这两者联系起来,将它描述为一种依赖于时间依赖的标签序列的学习,然而,我的观点是,这只会使事情更加混乱。

我更愿意把强化学习看作是从错误中学习。将强化学习算法放在任何环境中,它在开始都会犯很多错误。只要我们向算法提供某种信号,将好的行为与积极的信号相关联,将坏的行为与消极的信号相关联,我们就可以加强我们的算法,使其更喜欢好的行为而不是坏的行为。随着时间的推移,我们的学习算法学会犯比以前更少的错误。

强化学习是非常行为驱动的。它受到神经科学和心理学领域的影响。如果你听说过巴甫洛夫的狗,那么你可能已经熟悉了强化代理的想法,尽管是生物代理。

但是,要真正理解强化学习,我们来分解一个具体的例子。让我们看一下教代理玩游戏马里奥。

对于任何强化学习问题,我们都需要一个代理和一个环境,以及一种通过反馈回路连接两者的方法。为了将代理连接到环境,我们给它一组可以影响环境的操作。为了将环境与代理连接起来,我们让它不断地向代理发出两个信号:一个更新的状态和一个奖励(我们对行为的强化信号)。

在马里奥这个游戏中,我们的智能体就是我们的学习算法,我们的环境就是游戏(很可能是特定的关卡)。我们的代理有一套动作。这些将是我们的按钮状态。我们的更新状态将是每一场比赛帧久而久之和我们的奖励信号将是分数的变化。只要我们将所有这些组件连接在一起,我们就建立了一个强化学习场景来玩游戏马里奥。

现实世界中强化学习在哪里?

  • 电子游戏:强化学习最常见的地方之一就是学习玩游戏。看看谷歌的强化学习应用,哪个学围棋的 AlphaZero 和 AlphaGo。我们的马里奥例子也是一个常见的例子。目前,我还不知道有任何生产级游戏将强化学习代理部署为其游戏 AI,但我可以想象,这将很快成为游戏开发者采用的一个有趣的选择。
  • 工业模拟:对于许多机器人应用来说(想想装配线),让我们的机器学习完成它们的任务而不必硬编码它们的过程是很有用的。这可能是一个更便宜、更安全的选择;它甚至更不容易失败。我们也可以激励我们的机器使用更少的电力,以节省我们的钱。更重要的是,我们可以在模拟中开始这一切,以便在我们可能损坏机器时不浪费金钱。
  • 资源管理:强化学习有利于在复杂环境中导航。它可以处理平衡某些需求的需要。以谷歌的数据中心为例。他们使用强化学习来平衡满足我们的电力需求的需要,但尽可能高效地做到这一点,从而削减主要成本。这对我们和普通人有什么影响?我们的数据存储成本更低,对我们共享的环境影响更小。

把这一切联系在一起

既然我们已经讨论了机器学习的三个不同类别,重要的是要注意,这些学习类型之间的界限很多时候是模糊的。不仅如此,有许多任务可以很容易地被表述为一种学习类型,然后转换成另一种范式。

例如,以推荐系统为例。我们把它作为一个无监督的学习任务来讨论。它也可以很容易地重新表述为一个监督的任务。给定一堆用户的观看历史,预测某部电影应该推荐还是不推荐。这样做的原因是,最终,所有的学习都是学习。这只是我们表述问题陈述的方式。某些问题更容易用这样或那样的方式表达。

这也凸显了另一个有趣的想法。我们可以混合这些类型的学习,设计系统的组件,以这样或那样的方式学习,但在一个更大的算法中集成在一起。

  • 扮演马里奥的特工?为什么不赋予它识别和标记敌人的监督学习能力?
  • 对句子进行分类的系统?为什么不让它有能力利用句子意思的表达,通过无监督的过程学习呢?
  • 想要将社交网络中的人分组到关键细分市场和社交群组中吗?为什么不加入一个强化过程来提炼一个人的表征,这样我们就可以更准确地对他们进行聚类?

同样,我认为我们都了解一点机器学习是非常重要的,即使我们自己永远不会创建一个机器学习系统。随着机器学习在我们每天使用的一切事物中变得越来越普遍,我们的世界正在发生巨大的变化。理解基本原理将帮助我们驾驭这个世界,揭开看似崇高的概念的神秘面纱,让我们更好地思考我们使用的技术。

如果你有任何问题,让我知道!我自己仍然在学习人工智能领域的很多东西,讨论有助于加深理解。

如果你喜欢这篇文章或者觉得它有任何帮助,如果你给我一两美元来资助我的机器学习教育和研究,我会永远爱你!每一美元都让我离成功更近一步,我永远心存感激。

原主办:【hunterheidenreich.com】

还有比现在更好的时机吗?

原文:https://towardsdatascience.com/what-better-time-than-now-c7171cf8910e?source=collection_archive---------22-----------------------

艺术和想要改变世界是如何引导我走向数据科学的

数据在理解我们周围的世界中起着至关重要的作用。在我意识到数据的价值之前,我一直在以这样或那样的方式处理数据。现在我参加了一个沉浸式数据科学项目。这里有一点是关于我的旅程的:

在肯塔基大学,我是后来成为“绿点计划”的试点小组成员。我可以列举出遭受暴力或跟踪的女性的统计数据。然而,我知道有太多的人正在经历不符合“男人对女人的暴力”范式的暴力。我不得不就一个遗漏了很多人的框架提出问题。

后来,在佛蒙特大学的社会工作硕士项目中,我继续追寻这些问题。这包括利用国家调查数据研究性别和亲密伴侣暴力。

Exploratory chart I created for a 2011 project on Gender and Intimate Partner Violence

在 MSW 项目中,我还承担了一个更密集的数据项目,作为我实地工作的一部分。我所在的组织调查了佛蒙特州的所有公立学校,以评估 LGBTQ+青年的学校氛围。在过去,这是一个由学校管理者完成的五个问题的调查。我把它变成了一个更全面的学生调查。

新的调查对学校氛围有了更准确的了解。100%的学校管理者报告说,他们有一个法律要求的反欺凌政策。然而,许多学生报告说,学校工作人员目睹了欺凌行为,却无动于衷。令我印象深刻的发现是:同性恋学生在许多指标上与异性恋或异性恋学生表现相似。被认定为双性恋、同性恋、质疑者或跨性别者的学生报告了不成比例的更高的暴力、精神健康挑战和缺乏资源的比率。

我对数据的欣赏也是通过我的艺术背景发展起来的。我曾宣称摄影是我美术学士学位的重点,然而我的兴趣和实践更多的是跨学科的。

我从像菲利克斯·冈萨雷斯-托雷斯这样的人的作品中找到了灵感。他用普通的材料来描述艾滋病流行、枪支暴力和历史上的重大事件。

“Untitled” (Portrait of Ross in L.A.) by Félix González-Torres. (photo: mark6mauno, CC BY-NC 2.0)

哈桑·埃拉希的追踪瞬变项目也引起了我的共鸣。作为对被列入政府观察名单的回应,他开始过度分享自己的生活:去过的每个机场,吃过的每顿饭,用过的每个厕所。该项目提出了关于隐私、我们共享的数据以及如何使用这些数据的问题。

后来,乔纳森·哈里斯的许多项目鼓励我继续思考艺术、数据和讲故事的交叉。在我们感觉很好中结合使用实时数据、情感分析和交互性让我大开眼界。为了好玩,我会继续学习社交网络分析和数据可视化之类的课程。

2013 social network analysis of my Facebook account made with Gephi

“危机短信热线”是数据科学在社会公益方面的首批应用之一,它一直困扰着我。当执行董事和我都向 Hive Chicago 展示我们各自的项目时,我第一次知道了这件事。短信热线是一个重要的资源,我与和我一起工作的年轻人以及其他关心年轻人的人分享。但我特别兴奋地看到他们在理解危机趋势方面取得的进展,以便提供更有效的支持。正如董事会成员 DJ Patil 解释:“如果发短信的人带有‘布洛芬’一词,他们主动自杀的可能性会增加 16 倍(‘桥牌’是 8 倍,‘今晚’是 3 倍),危机顾问可以立即开始风险评估,以帮助降低短信者的情绪。”

在过去的三年里,我的工作重点是在高中和大学学生中预防艾滋病和药物滥用。该职位包括更新、实施和分析当地青少年风险行为调查。我们用这些结果来指导我们自己的工作。

2016 年,我们带着一些高中同辈领导去了 CADCA 年中培训学院。框架研究所的 Moira O'Neil 做了主旨发言。放了四张幻灯片后,我的同事向我伸出手:“请不要因为它们而离开我们!”我笑了,但是我的同事是对的——框架的焦点和方法正好符合我的胃口。在奥尼尔在那次演讲中分享的所有东西中,这是我最大的收获:

From Moira O’Neil’s presentation “Framing Change: A Strategic Approach to Communications”

主要观点是:如果你试图围绕一个问题推动改变,分享一个使这个问题人性化的故事。这可能是一个问题如何影响一个人的故事。下一步,包括数据,以显示问题的规模超出了个人。如果你停在这里,人们会变得不太可能支持改变,因为问题感觉太大了。但是,当你将一个故事和数据与可行的解决方案结合起来时,人们更有可能支持改变,而不仅仅是一个故事。

虽然我以前听说过这种说法,但我从未见过它被形象化。终于卡住了。自从第一次看到这个图表以来,我已经多次分享了它的简化版本。我们高中的同龄人领导小组用它来思考如何为自己辩护,并在他们的社区创造变化。它为我在全组织一级的种族和性别平等倡议方面的工作提供了信息。

不幸的是,在新政府的领导下,我被聘用时所依据的联邦研究基金不再提供了。随着拨款截止日期的临近,我面临着不确定性,不知道我是否还会有一份工作,或者那份工作会是什么。无论如何,这将意味着我在公司所做工作的转变。这似乎是一个跳跃的好时机。

虽然十多年来数据一直是我故事的一部分,但我从来没有能够花我喜欢的时间去研究它。我手机上的一个列表包含了我想用数据探索的项目想法,问题如下:

  • 生活成本和无家可归率之间有什么联系?
  • 大麻法律的变化如何影响鸦片制剂的死亡?
  • 一个州的种族构成和它的监禁率有什么关系?
  • 社交媒体使用的增加与青少年性活动的减少有关吗?
  • 想法是如何被采纳的?一个人在开始使用一个短语之前要接触它多少次?

虽然我多年来一直在增加清单,但我还没有愉快地检查过任何东西。我很高兴开发一套新的技能,这将有助于我承担这样的项目。

对我来说,提高自己的能力,为我们的社区做出积极的改变,这很重要。数据科学有助于更明智、更有效地讲述故事、制定战略、进行干预和评估。除了危机文本行,还有很多例子激励着我。uAspire 正在使用虚拟咨询帮助学生找到支付大学费用的方法。T2 正在努力使用人工智能来帮助遭受家庭暴力的人。虽然这是我进入数据科学之旅的开始,但它是我已经走过的路的延续。

感谢阅读!想法、问题和反馈总是很受欢迎。

戈瓦纳斯的 311 噪音投诉能告诉我们关于中产阶级化的什么?

原文:https://towardsdatascience.com/what-can-311-noise-complaints-in-gowanus-tell-us-about-gentrification-444c7da0a07a?source=collection_archive---------8-----------------------

使用 Python 和 NYC 开放数据来识别我最喜欢的布鲁克林社区的模式

A view of of the Gowanus Canal taken in 2010, the year it was given Superfund Site status. Photo Credit

戈瓦纳斯是布鲁克林的一个街区,夹在公园坡和卡罗尔花园之间,沿着戈瓦纳斯运河,这是一条工业水道,现在因其“黑色蛋黄酱”而臭名昭著,这是一个被污染的假底的术语。这一街区仅占布鲁克林人口的 5%多一点,在 20 世纪中期,由于与集装箱化不兼容,这条大道在很大程度上被废弃后,这里相对安静。在过去的 15 年里,它经历了巨大的变化,部分原因是 2003 年的住宅重新分区和 2010 年的超级基金选址。今天,戈瓦努斯正在迅速贵族化。

在全食超市和肯瓦地板的招牌落下之前,我住在戈瓦纳斯。自从我 2013 年离开这个街区以来,建筑环境的变化相当惊人。除了建设引入新的住房存量沿水,该社区正在投资绿色空间,努力提高宜居性。变化如此之大,我很想知道随着时间的推移,社区是如何表达他们的担忧的。

Picture of the Gowanus Canal from the 3rd St Bridge in 2012 (left) features the back of the Kentile Floors sign. Today, the sign is gone and the bridge view showcases high-end advertisements (right).

NYC 311 是非紧急呼叫系统,允许市民报告他们附近的问题。从一开始,它就是一个地区脉搏的快速快照。具体来说,噪音投诉被用作帮助理解中产阶级化的一个(不完善的)代理。这说明街上的人越来越多,但也说明那些使用电话线路报告噪音的人——那些潜在的不太熟悉附近基线声音的人。

通过查看 2010 年至 2017 年 311 个数据中的噪音投诉,我希望确定戈瓦纳斯的投诉如何偏离布鲁克林的整体分布。这个数据驱动的故事能告诉我们关于何时街区发生变化的什么,这种趋势对我最喜欢的布鲁克林街区的未来意味着什么?

数据

311 数据集从 2010 年至今在 OpenDataNYC 上可用。数据集很大,所以我用 api 过滤了布鲁克林的电话。噪音投诉分为四类:1)一般投诉;2)住宅;3)商业;4)街道/人行道。

在使用 Python 过滤掉其他类型的投诉后,这些年来,整个布鲁克林区有 664,116 个电话留给我处理。数据集brooklyn.head()如下所示:

隔离 Gowanus

识别发生在 Gowanus 的电话需要一些数据管理。这是一个玩 Geopandas 和 Shapely Python 包的好机会,这是我在 NYU 大学的城市信息学课上第一次遇到的东西(见这里一个[有点乱]的作业,它也使用这些包来质疑 link NYC Wifi hub distribution 的公平性)。

首先,我组合了为每一行提供的纬度和经度,并将它们转换成适当的几何图形。这一步至关重要,因为它为数据引入了空间意义。这些纬度/经度不仅仅是数字;他们有一个相关的地理投影。

我不会在这里包括这个项目的所有代码(为此,请查看我的 Github ),但如果你想做类似的事情,下面是一些关键片段:

# creating a column which combines latitude and longitude
brooklyn['lonlat'] = zip(brooklyn['Longitude'],brooklyn['Latitude'])# creating a geometry column using shapely 
# this says: "these aren't numbers; they have a spatial definition"
brooklyn['geometry'] = brooklyn[['lonlat']].applymap(lambda x:shapely.geometry.Point(x))# assigning geometry, crs, and converting into a geodataframe
geometry = brooklyn.geometry
crs = {'init': 'epsg:4326'}
brooklyn = GeoDataFrame(brooklyn, crs=crs, geometry=geometry)

接下来,我使用 Google Maps 查看我定义的 Gowanus 社区的经纬度坐标。我用 Shapely 为这些点创建了一个多边形,如下图所示。从那里,我使用一个带有contains()函数的for循环来询问每个被记录的呼叫的位置是否在我标识为 Gowanus 的区域内,这产生了一个布尔数组。

I used Google Maps to eyeball my Gowanus boundary. From there I used python to create a new dataframe with calls that were contained within the polygon using the Geopandas and Shapely packages.

我将该数组作为一个新列添加到我的布鲁克林数据库中,名为“is _ gowanus”——描绘一个全部为“真”或“假”的列,指定每个呼叫的纬度/经度是否落在多边形内。使用该专栏,我创建了一个名为“Gowanus”的新数据框架,其中:gowanus = brooklyn[brooklyn['is_gowanus'] == True]

在这个空间分析练习结束时,我的 Gowanus 数据框架有 7,262 行,相比之下,Brooklyn 数据框架仍然有 664,116 行

探索性分析

现在我们已经有了每个群体的数据框架——布鲁克林和戈瓦努斯的全部——我们可以做一点挖掘了。首先,我按照年份和投诉类型对数据进行了分组,以便随时间的推移对数据进行可视化(这需要 python 中的一些时间序列体操)。下面的图表显示了布鲁克林和戈瓦努斯的抱怨是如何演变的。

These plots show the distribution of 311 noise complaint types from 2010 to 2017. While the volume of calls follows roughly the same trend, the noise types appear to follow a different distribution.

第一个堆积条形图显示了从 2010 年到 2017 年至今,整个布鲁克林 via 311 的噪音投诉稳步增加。请注意,总体而言,“住宅”噪音一直是投诉最多的。第二个堆积条形图显示了同一时期戈瓦努斯地区噪音投诉的稳步增长。Gowanus 地区主要是商业噪音投诉,而不是住宅噪音,以灰色显示。尤其是在 2016 年,电话数量似乎扩大到所有噪音投诉的大多数,这种模式在布鲁克林整体上没有观察到。

这两个图显示了这些年来电话总数增加的总趋势,但是在噪音投诉的类型方面有所不同。这可能主要是由于该地区的分区指定,但值得进一步调查。

平稳性测试

我的分析的下一部分使用平稳性测试来查看 Gowanus 的噪音投诉模式。如果数据是稳定的,那么它在一段时间内具有相同的统计属性,比如均值和方差。如果数据不稳定,通常是由于所谓的单位根,数据的一部分是不可预测的。

使用滚动方法直观评估平稳性

首先,因为只有相对较少的几个月的数据(少于 100 个月),所以可以直观地查看趋势。我统计了自 2010 年以来每月的噪音投诉电话,按月份和年份分组。下图显示了一段时间内的数据,滚动平均窗口为 10。

These plots show total noise complaints by month. Notice that there is some periodicity in Brooklyn (right) that doesn’t seem to be mirrored in the Gowanus plot (left).

这些图显示了从 2010 年到 2017 年 12 月,Gowanus 和 Brooklyn 的投诉量。请注意,滚动平均值的一般趋势大致遵循相同的模式,随着时间的推移稳步增加。布鲁克林地块似乎具有更规律的季节性,而戈瓦纳斯地块在 2014 年春夏出现了一些有趣的峰值。2017 年,冬季还有另一个高峰,这似乎没有反映在布鲁克林的整体情节中。

绘制时间序列数据后,整体趋势是否不同,从视觉上看并不完全清楚。为了进一步挖掘,需要将 Gowanus 调用数据标准化,并使用平稳性统计测试来确定 Gowanus 是否实际上是平稳的,或者它是否有单位根。

平稳性的 AD Fuller 检验

首先,我把 Gowanus 的数据做成一个比率。我没有使用噪音投诉的总数,而是查看了与布鲁克林其他地方相比,高瑙斯噪音投诉的百分比。你会注意到随着时间的推移,剧情似乎相当稳定,在 2016 年和 2017 年有一些潜在的变化点。使用这些标准化的数据,我们可以真正了解关于 311 噪音投诉行为的核心问题。

This plot shows the ratio of noise complaints in Gowanus to all of complaints in Brooklyn over time.

我选择使用 AD Fuller 测试来评估平稳性。 AD Fuller 测试的零假设是一个单位根,这意味着不存在平稳性。如果我们可以拒绝零假设,这通常意味着数据是平稳的。我使用 python 中的 Statsmodels 包来实现测试。

单行测试的结果是 p 值为 0.00132,,这意味着我们可以在适当的置信区间拒绝空值。这个测试的假设是一个怪异的双重否定,但这意味着虽然有一些视觉上的变化,但这个数据总体上是平稳的。仅回顾过去三年,p 值仍接近于零,这也意味着稳定。

商业噪音投诉

看到平稳性测试的结果有点令人惊讶,但这可能并不能说明全部情况。我们探索性分析的一个较大偏差表明,噪音投诉细分存在较大偏差。为了特别关注这些,我重复了分析,只关注“商业噪音”投诉。

This plot shows the percentage of commercial noise complaints in Gowanus over time. Notice the irregularity in the past three years.

该图显示了戈瓦努斯地区商业噪音投诉的百分比。与所有随时间推移的噪声投诉不同,该图显示了过去几年中似乎存在的主要偏差,包括 2016 年和 2017 年明显的不规则峰值。特别是在进行过去五年的 AD Fuller 测试时,我们得到的 p 值为 0.0541 。在这里,我们不能拒绝零(只是勉强),这意味着这些数据不是静态的。戈瓦努斯的情况有些不同。

结论和局限性

那么,戈瓦纳斯的 311 电话能告诉我们关于中产阶级化的什么呢?绝对没有什么是肯定的。

我们的测试结果表明,虽然这些噪音投诉数据总体上是稳定的,但对于 Gowanus 中的某些投诉类型,它们并不是稳定的。“商业噪音”在 311 数据集中的最佳描述是:“喧闹的音乐/聚会。”这可能意味着,随着社区的中产阶级化,会有更多吵闹的派对打扰居民。

然而,所有这些确实意味着,在 2016 年,更多的人会更加频繁地打电话给咨询喧闹的派对。这带来了这项研究的一个有趣的限制:在 311 报告中存在已知的偏差(见研究调查报告与实际违规的比率)。尽管由于数据的偏差,很难从数据中得出具体的结论,但我们仍然可以使用这种数据驱动的轶事来支持“邻居走了”的说法。

View from Smith Ave F stop looking over the canal towards Manhattan, 2013

下一步:周期性和变革点

该项目的下一步是调查不同类型投诉的确切变化点(偏离平均值超过 3 sigma 的区域)。布鲁克林时间序列数据中似乎也有明显的周期性,这在 Gowanus 呼叫的收集中并不明显。Gowanus 周期也可能存在,但它隐藏在噪声中,因为 Gowanus 调用的次数较少(信噪比随着 sqrt(N)下降)。傅立叶分析可以揭示是否存在类似的周期性,或者这是该社区与布鲁克林其他地区不同的另一个区域。

更多即将推出!参见 Github 上的完整探索。

代理可以从自我游戏中学到什么?

原文:https://towardsdatascience.com/what-can-agents-learn-through-self-play-37adb3f3581b?source=collection_archive---------9-----------------------

如果你想从零开始做一个苹果派,你必须首先发明宇宙——卡尔·萨根

[ 认知状态:使想法更清晰成形的沉思尝试]

最近几个月,DeepMind 的人工系统在复杂的战略游戏中击败了人类玩家,取得了惊人的胜利:首先是围棋,然后是紧接着的象棋和松吉。他们伟大的新武器?重复的自我游戏,算法收集观察数据,通过自我游戏来学习。先前的方法(包括最初的 Alpha Go)通过学习专家的走法,训练智能体直接模拟人类的战略行为;自我游戏的范式更优雅,让战略洞察力从与另一个战略玩家的互动中消失。

这是一个巧妙的象征,自我游戏;你是自己最大的敌人,你是自己最伟大的老师。在某种程度上,这是愚蠢的:一个嫁接到机械过程中的人类故事。但是故事和人类已经运行良好。

自我游戏的最大好处是你不需要直接监督;代理用来学习的所有信息都来自另一个代理(它自己的克隆体),这个代理为了最大化它自己的目标而行动。在这种更不痛不痒的技术声明中,隐含的好处是功能无限的数据的承诺——仅受我们的计算机限制——机器可以在此基础上飙升至潜在的至高无上。AlphaZero 之所以能如此迅速地跃升为战略能力,是因为考虑到游戏的固定规则,这种积极并行的算法模拟游戏情节的速度比真正的人学习游戏要快得多。

自我游戏之所以诱人,是因为它不受人类收集的数据的限制,甚至也不受人类知识的现有限制,而只是纯粹优化游戏规则。

但是那些规则是什么?

要回答这个问题,我认为值得想清楚允许自我发挥的前提条件。

最重要的是,你需要一些方法来判定谁在一场特定的遭遇战中获胜。当您通过推动代理学习更有可能获胜的动作和状态来激励他们时,这是必要的。即使你没有对算法学习的数据进行硬编码,你也在对你试图优化的策略约束进行硬编码。当策略约束来自另一个玩家的行为时,它们可以被更简单地封装:作为判断游戏最终状态的规则。每种算法都根据你设定的规则来达到一个标准,并且根据它们符合你期望的行为的程度来惩罚或奖励它们。就游戏而言,这些规则很简单,因为游戏是一个固定且受约束的世界。有简单的方法来检查你是否赢了;它的设计是客观的。

这是必要的,因为在自我游戏的世界中,对一个代理人产生战略约束的世界完全是由一个单独的其他代理人的行为创造的。但在我看来,那些战略依赖完全在于试图通过简单规则取胜的代理人的问题是有限的。人类在宇宙中面临的大多数战略约束不是来自其他人,而是来自自然界的动态。

当我们想到 AGI 时,我们想到的是一个具有广泛战略能力的代理人,它也能获得关于世界的信息。我们能想象出什么样的环境,这些环境能产生什么样的习得行为,从而导致这种广泛的战略能力?

让我们想一想,如果我们有一个让自己活着的环境,会发生什么。给定的回合是什么?我们会在一个环境中设置一个代理,并给他们非常宽泛的指令“在最后,并产生最多数量的后代”吗?会有不同程度的其他代理人吗?他们能够结成联盟并传递信息吗?会有你不得不应对的随机事件吗?我们会等待语言进化,还是预先创造语言作为一种能力?环境如何激励代理人制定长期计划,在需要信息之前了解世界,建立联盟?从某种意义上来说,这个场景开始听起来像一个简单的游戏,其中数据是由代理的行为为我们创建的,而更像是一个复杂的环境,在这个环境中,我们假设了许多关于智能生物获得对世界的战略方法的环境的先验知识。

我是不是太过于模式匹配了?从进化已经使用的剧本中剽窃得太明目张胆了?也许吧。也许我们不应该认为进化环境是广义战略生物进化的唯一方式。但是我不知道我已经听到了一个令人信服的论点,关于那个模拟环境看起来像什么,从那些基于阿尔法零的存在断言 AGI 即将到来的人那里。

并且,冒着简短离题的风险,我认为人类进化的大框架值得在机器学习的世界里更多的考虑。我从 NIPS 2016 带回来的一个金块(不幸的是,我没有注意到演讲者)是这样一个想法:也许我们不应该只考虑一个人一生中学到了什么,而是全人类在数十亿年的时间里学到了什么?

当我还是个孩子的时候,我学会了如何说话,但在我有生之年,我没有学会为什么要说话。我没有遇到使语言适应的环境因素,也没有因此受到惩罚,没有尝试其他策略,也没有选择这个策略。对环境破坏的惩罚是死亡,这不是你能强加给一个生物并让它继续学习的惩罚。在许多方面,我更像是一个经过微调的网络,而不是一个经过全面训练的网络:我准备好了,就像海绵一样,通过漫长的世代将语言吸收到为它准备的路径中。对我来说,这是一个重要的区别:一旦工具存在,就学习如何使用它,而不是在面对促使它成为必要的动机之后,首先设计这个工具。

所有这些都是在说:如果我们希望通过激励一个智能体去赢得一场游戏来训练它,那么这个正确的比喻是指一个孩子成熟到成年,还是一个物种进化到生存?这个问题来自于(可能过于天真)的观察,即幼儿不会通过试图优化奖励和惩罚的某种客观函数,或者至少不是一种竞争性函数来了解世界。在很多方面,进化已经学会了以生存为标准的宏观目标函数,每个人都在几代人构建的机器基础上学习该目标的子元素:说话、联系、观察,使用一套物种水平的先验知识了解世界。

总结:是的,这是真的,当前最具体的机器学习问题是算法上的细微差别:我们如何以更实用的方式更好、更快地为系统建模。但是,我傲慢的假设是:我们设计的代理人的能力很快将不是由我们可以设计的模型的复杂性决定的,而是由他们成长和训练的环境的复杂性决定的。这些环境必须被设计,由人类明确指定,因为为了以数字速度运行,它们必须被参数化并被赋予可编程的规则。

机器智能的两大优势似乎是它可以迭代学习的速度,以及它可以用来做出决策的潜在巨大的数字数据池。但是,如果我们真的想利用第一个优势来构建一个战略智能体,而不仅仅是一个可以执行人类训练它执行的任务的智能体,我们需要为我们的智能体设计复杂、动态、多玩家的环境,以便在完全模拟的环境中迭代。因为人类已经领先一步了。

关于统计理论中最大的争论,一只章鱼能告诉我们什么?

原文:https://towardsdatascience.com/what-can-an-octopus-tell-us-about-the-biggest-debate-in-statistical-theory-f017295d781f?source=collection_archive---------12-----------------------

Photo by Serena Repice Lentini on Unsplash

最杰出的统计学家(罗纳德·费雪和杰吉·内曼)会对通灵动物说些什么?

你可以在我的 Github 页面找到可视化计算的 R 代码

看看我的另一篇文章:贝叶斯统计如何说服我去健身房?

见见保罗。!!

保罗是一只出生于英国的章鱼,在德国奥伯豪森过着平静的水生生活,除了玩他的触角爪鱼和享受他每天的贻贝之外,他什么也没做。那是在他以最强有力的方式开始正确并连续预测德国 2010 年世界杯所有比赛结果之前。他短暂的职业生涯拥有令人印象深刻的 12/14 的正确预测记录,比大多数博彩公司更令人印象深刻。

Paul’s more than impressive prediction track record (Wikipedia). He also successfully predicted the WC 2010 final match between Spain and Holland

他的方法?保罗通过从他的水族箱中的两个塑料容器中挑出一个贻贝并吃掉它,预测了比赛的获胜者。你知道的:盛放牺牲贻贝的容器上的旗帜代表胜利者。

奥伯豪森海洋生物水族馆是否藏有一只来自超时空的胡言乱语的黑暗章鱼,或者,事实上,保罗只是一只幸运的普通章鱼,仍然是一个激烈辩论的话题。

从统计学的角度来看,保罗完美的占卜率是不能随便忽略的。

那么,统计理论中最有影响力的人物,比如罗纳德·费雪、杰吉·内曼和埃贡·皮尔森,会对这个世界上最受喜爱和蔑视的头足类动物说些什么呢?

我们可以根据非参数统计检验的假设,提出关于保罗常态或超感知觉的基本问题,如下所示:

我们假设保罗只是在没有任何知识的情况下随机选择了一个赢家。在这种假设下,很容易看出,如果在总共 14 个匹配中, X 是匹配的数量,保罗预测正确,那么×遵循大小为 14、概率为 0.5 且平均值为 7 的二项分布。

Graph of binomial distribution with n = 14, p = 0.5. Red columns represents data at least as extreme as actual observation (12 correctly predicted matches)

然后你会从统计学 101 中得到下一步的想法,我们进行一些假设检验。我们计算 P 值,将其与一些预设的显著性水平进行比较,然后我们可以拒绝或接受 I 型错误率为的零假设。

没那么快!!!

我必须阻止你行动太快,跳进计算 P 值和得出各种误解和错误的结论。

至少有两种方式可以进行假设检验程序。介绍的第一个程序是费希尔的数据测试方法——显著性测试;第二个是尼曼-皮尔森的方法——验收测试。本文将区分这两种方法之间的差异,并揭示它们在灵媒章鱼保罗(或触角假保罗)的案例中是如何产生分歧的

From left to right: Ronald Fisher, Jerzy Neyman, and Egon Pearson (Images source: Wikipedia)

P 值到底是什么?

P 代表概率(也许?)*。这是一种可能性,但不仅仅是一种可能性。简而言之,从实验中获得的 P 值代表获得至少与观察数据一样极端的数据的长期累积概率,假设零假设为真**。*

注意,P 值也是一个条件概率,以零假设为真的事实为条件。我稍后将回到它。

回到我们心爱的头足类动物,我们看到保罗在 14 场比赛中取得了令人印象深刻的 12 场预测准确性。因此,在预测率为 0.5 的零假设下,我们可以计算出观测数据的 P 值如下:

P 值和费希尔显著性检验

罗纳德·A·费希尔(Ronald A.Fisher)提出的 P 值是反对零假设的证据指标,其逻辑是:如果从实验中获得的 P 值很小,那么我们必须假设一个极其平常的事件刚刚发生,或者概率条件出现了问题。因此,0.0065 的低 P 值可以作为随机猜测不能令人满意地解释保罗记录的证据。

足以指出的是,Fisher 认为, P 值可以用作反对零假设的证据的连续度量。结果从“不重要”变为“重要”没有特定的固定值。正如罗斯诺所说:

当然,上帝爱 0.06 和 0.05 一样多。上帝把支持或反对零的证据的力量看作是 p 的大小的一个相当连续的函数,对此有什么疑问吗?

换句话说,对于所有的意图和目的,p = 0.06 和 p = 0.05 构成了反对零假设的相同数量的证据。

Though following conventions, the choice of significance level could be, at best, arbitray. Source: XKMD

话虽如此,在实践中,通过比较研究p-值是否小于给定的显著性水平(0.05 或 0.01 ) ,很大程度上使得对研究结果的评估受到约束。

似乎很明显,我们的 p 值(0.0065)在 5%和 1%的水平上都是显著的。

但这实际上意味着什么呢?

许多人犯的一个常见错误是匆忙得出结论,例如:“由于测试 p 值<为 0.05(测试具有显著的 p 值),零假设为真的可能性非常小/我们可以拒绝零假设。”

这是不对的。跟我念:W-R-O-N-G

记得我之前说过, P 值是一个条件概率,也就是说,它提供了在假设为真的零假设下观察到的和更极端结果的理论概率的信息。因为零假设 H 总是真的,所以它不可能同时是假的,也不可能是后验可证伪的。基本上,如果在任何时候你说 H 为假,那么你也使整个测试及其结果无效。

那么解读结果的正确方法是什么呢?

一个显著的结果从字面上解释为双重陈述:要么是一个以低概率发生的罕见结果刚刚发生,要么是零假设不能令人满意地解释研究结果。换句话说,你可以说“随机猜测的无效假设似乎没有解释通灵井保罗的占卜率,因此我们推断,其他过程——我们认为很可能是上帝对保罗的特殊指示——存在,解释了结果**

p 值和尼曼-皮尔逊假设检验

在费希尔引入显著性检验的八年后,Jerzey Neyman 和 Egon Pearson 发表了另一种统计推断方法,利用了长期误差率而不是证据强度。

比方说,零假设可能是真的,也可能不是真的——保罗可能真的是一只正常的头足类动物,也可能不是。(记住:这种说法在费雪检验中是无效的,因为我们总是假设零假设为真)。在我们研究的最后,我们不得不拒绝或者不能拒绝零假设。

因此,可能会发生 4 种情况。

本质上,你可以做出一个正确的决定(拒绝真或成功拒绝假),犯一个第一类错误(假阳性——拒绝真零假设)或一个第二类错误(假阴性——拒绝假零假设)

奈曼和皮尔森设计了一个连贯的频率主义范式,使用 P 值作为正式决策过程的一部分。奈曼-皮尔森范式是这样运作的:

  • 有一个零假设(保罗是正常章鱼,成功率 0.5* )*
  • 有一个你认为可能是真的替代假设(保罗是一只成功率为 0.75 的灵媒章鱼——我刚刚编造了这个)
  • 有一个长期的最大假阳性错误率,表示为α。我们预先设定这个错误率,通常是 5%或 1%
  • 然后,我们需要计算可容忍的长期假阴性错误率所需的样本量β和检验的功效(正确拒绝零假设的概率,为 1β)
  • 只有在仔细计算了这些特征之后,才能进行实验。在你的研究完成后,你将你的 p 值与α进行比较,如果 p < α

Now, if you are thinking that N-P’s α looks very similar to Fisher’s significance level, that’s a good catch as they both use the same conventional cut-off points (5 or 1%). However, there are 2 fundamental differences: 1) α has to be set 先验(不一定是费希尔显著性水平),则拒绝零假设;以及 2) α不接受分级——也就是说,在实验之前,您可以选择α = 0.05 或α = 0.01,但不能在同一测试中同时选择两者(而 Fisherian 方法允许您具有更极端显著性的不同水平)

从根本上说,N-P 和 Fisher 之间的差异归结为长期 I 型错误率和显著性水平之间的差异(通常被错误地认为是一): Neyman-Pearson 对长期假阳性错误率的控制是以排除任何基于观察到的 P 值 的证据意义的行动为代价实现的。如果你想控制误差率,那么使用尼曼-皮尔逊方法,并在实验前设置α;如果你想要一个衡量的证据,那么使用费希尔的方法,并解释实验后观察到的P-值。不能两个都用。

让我们回到保罗身上,好吗?

使用 N-P 范式评估 Paul 的通灵能力的问题是,在实际进行观察之前,我们没有考虑设置、α、β和测试的 1β功效。

是的,在玩弄保罗的神力之前,奥伯豪森海洋生物水族馆的管理员怎么能不考虑假设检验呢?

反正为了讨论方便,我们继续进行,假设长期假阳性错误率α预设为 0.01,保罗会在 14 次尝试后耗尽神力,所以尝试次数限定在 14 次。这意味着测试的临界值是 11。

在这个临界值和样本量下,我们可以计算出长期 II 型误差为 0.47,因此测试的功效为 0.53(请参见我所附的计算 R 脚本)。在一天结束的时候,我们仍然可以拒绝零假设,并相信通过在无限系列的试验中这样做,我们只在 1%的情况下错误地拒绝了它们。

请注意这与费希尔的方法有多么不同:N-P 不是显著性测试(他们对反对无效假设的证据的强度不感兴趣),而是接受性测试(决定是否接受替代而不是无效)。尼曼-皮尔森框架会说,在你的研究结束时,你必须做出决定,然后离开。

与此同时,有传言称,一名研究人员曾带着“不重要”的结果找到费舍尔,问他应该怎么做,费舍尔说,“去获取更多数据”。

很抱歉让你一直烦到现在。如果你和我一样,那么我希望你能通过这个小小的(编码)挑战活跃起来?

现在让我们假设我们有条件建立完美的实验。我想有一个决策程序,可以确保长期 I 型错误率和 II 型错误率都是 10%(所以功效是 90%),我至少需要进行多少次观察?

(尝试这个问题并在我的 Github 页面查看解决方案)

正确的方法是什么?

都是!!!

因为这两种方法来自完全不同的实验范围。

当然,我们已经预见到了这一点

然而,这并不意味着在特定的环境中或为了特定的目的,一种方法并不比另一种更合适。

至少,在评估保罗的通灵能力时,我希望你能看到费希尔的方法比尼曼-皮尔森的方法提供了更多。费希尔方法的局部范围更符合基础实验科学实际进行的方式,因为我们通常试图在这些结果的基础上对这个系统做出推论。我们希望在给出一些观察结果的情况下得出一些关于 Paul 的结论,其中严格控制α、β和 1β幂的严格实验设计既无必要也不切实际。对于这样的实验,对结果的局部解释应该胜过对整体误差率的考虑。

尼曼-皮尔森方法的决策规则应该局限于旨在产生决策的实验——类似于一些临床试验的实验。

但是保罗到底有没有通灵能力?

也许是,也许不是。

事情是这样的:就我们进行的假设检验(费希尔或尼曼-皮尔森)而言,我们可以有把握地得出结论:随机猜测不太可能产生如此令人印象深刻的记录。然而,这并不是说保罗肯定接受了高等生物的精神指导。至少,没有证据表明费希尔、尼曼或皮尔森喜欢精神推断能力。然而,他们很可能会同意这里面有猫腻(没有双关语!!!)关于保罗做预测的方式。

请注意,在 14 场比赛中,保罗在 11 场比赛中专门选择了德国国旗(这在概念上与说“它选择了德国”完全不同)。也许德国国旗有什么吸引保罗的地方。也许,他知道摘下这面旗会让管理员高兴,给他更多的食物。毕竟,作为德国的居民,保罗为什么要冒着被他的第二故乡鄙视和憎恨的风险呢(事实上,就在世界杯半决赛之前,他的确是这样做的)?

“Where is my German-looking flag?”. Source: Google doodle

你会很高兴地知道,保罗短暂而非凡的一生是不可能被遗忘的。

章鱼保罗的粉丝们可以在奥伯豪森海洋生物水族馆欣赏一个 6 英尺高的塑料保罗抓着一个足球的复制品,作为对这种软体动物的纪念,在那里他成为了世界杯预言家。

Image source: Alex Domansky/Reuters

来源:

[1]罗斯诺和罗森塔尔(1989 年)。心理科学中的统计程序和知识证明。美国心理学家,44(10),1276–1284

流行的深度学习应用

原文:https://towardsdatascience.com/what-can-deep-learning-bring-to-your-app-fb1a6be63801?source=collection_archive---------4-----------------------

深度学习是最热门的技术之一。深度学习的研究论文很多,能跟上真的是应接不暇。

有许多令人兴奋的研究课题,如生成对抗网络、自动编码器和强化学习。在这些领域所做的研究吸引了人们的敬畏和兴趣,然而,这些研究中的大部分还没有准备好被实现到现代软件项目工作流中。

在这篇文章中,我将介绍一些在 web 和移动应用程序中经常使用的深度学习的流行应用程序,这些应用程序有很好的入门教程。

在科幻小说和未来可能性领域之外讨论深度学习,软件工程师、商业人士和应用程序开发人员想知道:深度学习现在如何帮助我?

在某种意义上,你可以找到很好的教程和源代码,详细说明如何实现这些算法;并且实现相对容易,下面是深度学习的一些稳定且普遍适用的应用。

推荐引擎

网飞、亚马逊、Spotify 以及更多的应用程序都依赖它们的推荐引擎来提升用户体验,为用户提供更好的服务。对你的 app 来说幸运的是,自己的推荐引擎入门并没有那么难。

推荐引擎分为两大类:基于内容的和协作过滤的方法。基于内容是指将应用程序中的对象量化为一组功能,并根据用户自己的数据拟合回归模型来预测用户的倾向。协同过滤更难实现,但性能更好,因为它结合了整个用户群的行为来对单个用户进行预测。

这两种策略都能够利用大规模数据集上的深层网络来提高分类和回归性能。

根据你的经验,你会发现最好从基于内容的引擎开始,直到你有一个相当大的用户群。在此基础上,您可能希望完全切换到协作过滤,或者让您的系统学习优化引擎的两种模型之间的权重,例如:

pred = x1 * (Content-Based Engine) + x2 * (Collab-Filtering Engine)

Keras 协同过滤代码

题目的进一步解释

文本情感分析

许多应用程序都内置了评论或基于评论的评论系统。自然语言处理研究和递归神经网络已经走过了漫长的道路,现在完全有可能在你的应用程序中的文本上部署这些模型,以提取更高层次的信息。这对于评估评论部分的情感极性,或者通过命名实体识别模型提取有意义的主题非常有用。

这些模型也可以用于内部决策和战略决策。

关于情感分析有多有用的更多信息:

样本代码

更多样本代码 ←文章底部回购

聊天机器人

另一个非常有趣的科幻类应用是聊天机器人。聊天机器人被许多人视为下一代网络用户界面的支柱之一。聊天机器人可以用对话样本和递归神经网络进行训练。有许多关于如何构建聊天机器人的教程:

图像识别

如果你的应用利用图像,图像检索和分类是非常有用的。一些最流行的方法包括使用识别模型将图像分类到不同的类别,或者使用自动编码器根据视觉相似性检索图像。图像识别策略也可以用于分割和分类视频数据,因为视频实际上只是图像的时间序列。

提高图像识别性能的流行策略

销售调研

除了寻找可以改进你的应用程序的新功能,深度学习在幕后也很有用。使用深度学习回归和分类模型,可以改进市场细分、营销活动分析和许多其他方面。如果你有大量的数据,这将非常有帮助,否则,你可能最好使用传统的机器学习算法来完成这些任务,而不是深度学习。

结论

每当我看到一个新的应用程序,就很容易想象推荐引擎、情感分析、图像识别和聊天机器人如何改进应用程序的功能。由于深度学习的力量,所有这些应用都成为可能或得到了极大的改善。

显然,这只是我的观点,深度学习还有很多应用。然而,我认为这是一个很好的应用程序列表,它有大量的教程和文档,并且通常运行可靠。相比之下,像生成对抗网络或强化学习这样的东西很难弄清楚如何集成到你的网络或移动应用程序中。我认为深度学习的这些用例对大多数 app 都有普遍适用性。此外,深度学习是数据科学的一个子集,数据科学可以通过更多方式为您的软件项目提供价值。

CShorten

Connor Shorten 是佛罗里达大西洋大学计算机科学专业的学生。对软件经济学、深度学习和软件工程感兴趣。

机器学习能为理论科学做些什么?

原文:https://towardsdatascience.com/what-can-machine-learning-do-for-theoretical-science-ed16fbe8dc8e?source=collection_archive---------10-----------------------

科学理论使这个世界变得可以理解,至少对我们大多数人来说是这样。但是后来我们听到了一个传言,说城里有一种新游戏:机器学习。连同它的兄弟,大数据,他们威胁要把科学理论赶出城镇。机器学习,尤其是深度学习,已经成为构建更加准确的预测模型的魔盒。利用它,人们可以根据以前观察到的模式进行预测。传统上,做预测是一件复杂的事情,除了其他事情之外,还包括发展理解事物如何运作的基本理论。但是现在你可以把足够多的数据扔给一个足够大的神经网络,你会从另一边得到预测。那么,为什么要为理论费心呢?

谣言很快就消散了,因为它是基于一个错误的前提,即科学的目标是做出预测。它不是。科学的目标是提供理解。理解来自解释,解释由理论提供。现代科学的整个大厦是建立在一张相互联系的理论网的基础上的。

谣言可能已经消失了,但它的幽灵仍在困扰着我们。老派理论家倾向于将这一新的经验主义浪潮视为平民对他们专业的攻击。而且,许多来自我们新民主化领域的分析能力较弱的新数据专家,似乎经常将理论与先入为主的偏见混为一谈。

对我个人来说,这种相当令人遗憾的事态……有些尴尬。我最初是一名理论物理学家。理论帮助我理解这个世界。然而,我现在靠修补机器学习算法谋生。我可以直接体会到这些算法的威力。是的,机器学习是一种工具,但它是独一无二的工具。它从根本上改变了我们与信息的关系。无论如何,我们对什么构成对现实的理解的概念将受到机器学习在科学中所扮演的角色的影响。

如果理性主义要在经验主义的洪流中生存下来,那么理论家需要找到一种方法,将机器学习有意义地融入他们的世界。不是作为一个处理挖掘数据的无脑苦差事的外国职员,而是作为一个完整的公民和建立科学理论艺术的向导。

这并不是一个奇怪的愿望。毕竟,我们如何存储、处理或传递信息的大多数重要进步,无论是新的数学技术还是电子计算机,都在科学理论的发展中得到了应用。没有理由认为机器学习应该是一个粗暴的例外。问题是,怎么做?

我们用来构建理论的模板很大程度上来源于物理学。理论本质上是一套规则,可用于推导现象不同方面的预测模型。理论的解释力来自于它们提供现实各方面的整体图景的能力,也就是说,能够表明不同的现象产生于一小组简单的规则。比如同样的统计力学的规则可以用来计算平衡中任何物质的热力学性质(如温度、压力、密度)。

从历史上看,我们相信能够在这样的理论框架的基础上解释宇宙,这在很大程度上是由物理学惊人的成功所推动的。然而,由于上个世纪最后 25 年肯尼斯·威尔逊和其他人的开创性工作所提供的见解,这一信念现在建立在健康的理解基础上。

考虑规则集的层次结构,初始(底层)规则集代表理论的数学结构,最终(顶层)规则集代表数据中观察到的稳定相关性的数学结构。我们现在可以考虑这样一种转换,即通过将这种转换应用于前一级别的规则集来获得每一级别的规则集。这个用来从低级规则集导出高级规则集的过程被称为重正化群流(我非常宽松地使用这个术语)。

对于某些类型的转换和规则集,会发生一些非常显著和意想不到的事情;从非常不同的初始规则集开始,最终得到相同的最终规则集。在这种情况下,最后一个规则集被称为固定点,导致相同固定点的一组初始规则集被称为构成了一个普遍性类。普遍性假设(或简称为普遍性)指出,自然界中实际存在的规则集和转换都属于上述类型。(见此处介绍普适性和重整化群)。

如果普适性是真的,那么这将意味着复杂系统中观察到的稳定相关性将独立于基础理论的细节,即简单的理论可能就足够好了。此外,我们应该看到在各种不相关的领域中,相关性具有相同的数学结构。

普适性首先是在接近连续相变的不同系统的热力学变量的行为中被观察和研究的。从那以后,人们在各种不同的和不相关的地方观察到了这种现象,例如复杂网络的动力学、多智能体系统、粉红噪声的出现和墨西哥一个城镇的公交系统,仅举几个例子(见这里一些有趣的例子)。有足够的经验证据表明,自然(包括许多人造实体)确实偏爱普遍性。

虽然属于普遍性类别的理论可能有非常不同的起源(就它们试图解释的现实方面而言)和数学细节,但它们共享一些重要的数学性质,这些性质对它们的数学结构有严格的限制。对于物理学中发现的普适类,这些性质通常是对称性、维度和局部性。但是,一般来说,它们将取决于具体的普适类,并且可以通过执行该类成员的重整化群流来确定。

普遍性本身只能部分解释为什么物理学的理论框架如此成功。第二部分来自对物理系统中规则集的层次结构与我们的直觉非常吻合的观察。在物理学中,规则的等级是尺度或分辨率的等级。直觉上,我们期望大的事物(宏观物体)有规则,小的事物(微观实体)也必须有规则。我们也知道大的事物是由小的事物组成的,因此宏观模式应该遵循微观理论。这正是现实中发生的事情。这就是为什么(近乎天真的)还原论在物理学的大部分领域如此有效的原因。

这个谜题的最后一块与技术发展的时间线有关。我们从观察人类尺度的现象开始,直到那时才开始发展技术,显微镜和望远镜,来观察越来越小和越来越大尺度的现象。这个时间线与物理系统中规则集的层次非常吻合。因此,我们可以在理论和实验之间建立一个非常富有成效的反馈。但是,更重要的是,起点非常关键——对于许多物理系统来说,人类尺度是普遍性发生的尺度。这意味着即使只有少量数据和人工检查,稳定的相关性也是显而易见的。

为了理解为什么以上几点如此重要,考虑这样一种情况:我们从包含一箱气体中所有原子在不同时间的快照的图片开始,而不是测量热力学性质。从这些数据中推导出热力学或统计力学有多容易?

我们目前在生物学、经济学或社会科学等领域遇到的情况与上述情况没有太大不同。与物理学不同,在这些领域中,我们没有机会知道现实中规则集的层级对应着什么。我们也不知道普遍性应该在哪个阶段发生,我们应该期待看到稳定的相关性。

但是我们以前没有,现在有了,更多的数据和一个工具,机器学习,来提取这些数据并找到这些稳定的相关性。有充分的理由相信深度神经网络本质上执行一种重正化群流,并且它们如此有效的原因之一是因为在许多情况下,数据生成的生成过程(规则集)是分层的。当通过普遍性的棱镜来看时,这意味着深度神经网络为我们提供了对包含正确基础理论的普遍性类中的重整化群流的访问,然后可以使用它来约束基础理论的数学结构。

考虑一个思想实验,其中向深度神经网络提供气体原子的快照以及热力学变量的一些复杂函数的值;我们训练网络的任务是从快照中预测价值。我们期望热力学出现在网络的最后一层吗?我们应该能够从网络的权重中约束统计力学的数学结构吗?原则上,没有理由不这样认为。

回到前面提出的问题上来;机器学习如何帮助理论科学?机器学习可以为科学理论提供数学支架,理论家将为其添加意义和通往现实的桥梁。然而,在我们到达那里之前,我们需要对机器学习有更好的理解。我们将需要从一般原理来理解机器学习算法。换句话说,机器学习中对称性、维数和局部性的类似物是什么?也许,是时候开始开发一个真正的机器学习理论了。

哲学能教会机器学习什么?

原文:https://towardsdatascience.com/what-can-philosophy-teach-machine-learning-4ff091d43de6?source=collection_archive---------5-----------------------

从苏格拉底到人工智能的认知科学之旅

'Scuola di Atene' by Raffaello. Source: Pixavay

从苏格拉底到认知科学

自从苏格拉底向 Thrasymachus 询问正义概念的定义,哲学第一次提出了一个最具挑战性的哲学问题:什么是概念?数百年来,关于概念的性质和结构的探索吸引了世界上最优秀的头脑的注意力;然而,直到 16 世纪和 17 世纪,这种探索才在两种对立的哲学传统之手下充分繁荣起来:经验主义和理性主义。

经验主义者认为概念是头脑中的一种图画或图像。根据这种观点,狗的概念相当于一幅原型狗的心理图画或图像。反过来,公正的概念相当于我们通常认为公正的事物和事件的脑海画面或图像的组合。

另一方面,理性主义者认为概念不应该被理解为孤立的精神图像。相反,他们声称概念更像是一个巨大推理网络中相互连接的节点。

Alonso de Proaza’s illustration of the Porphyrian tree (sixth-century tree representing Aristotle’s categories) in his work "De logica nova" (1512). It illustrates one of the first attempts to build an inferential network.

经验主义者和理性主义者之间的竞争源于之前关于思想和知识本质的更根本的分歧。对于经验主义者来说,拥有一个概念就相当于拥有了感知识别和分类物体的能力,这是通过在头脑中计算这些物体所具有的所有感知特征来实现的。例如,拥有狗的概念——并因此拥有关于狗的思想和知识——相当于有能力根据这些物体通常具有的感知特征将狗与非狗的东西区分开来——因此得名( Empiria 在古希腊语中是经验的意思)。

相反,对于理性主义者来说,拥有一个概念需要更高的认知能力,也就是理性地得出所有推论的能力。因此,举例来说,拥有狗的概念——因此,拥有关于狗的思想和知识——包括能够推断狗是哺乳动物,哺乳动物是动物,狗也是,动物不同于植物,狗也是,植物和动物都是生物,狗也是,等等。

A graph representing a small inferential network

目前,大多数关于概念的讨论都是在认知科学的框架内进行的。根据这种方法,思维类似于计算机。因此,思维被理解为对头脑中的表征结构进行计算(见 Thagard,2018)。

认知科学方法继承了早期现代哲学的许多概念。事实上,经验主义和理性主义奠定了认知革命的基础。因此,毫不奇怪,多年来,许多认知科学家卷入了两种对立理论框架之间的长期争论:一方面,所谓的概念经验主义,概念原子主义,只是概念的表象观;另一方面,所谓的概念角色语义学,推理主义,或者只是概念的实用主义观点(参见 Margolis & Laurence,1999)。前者认为概念或者是一组基于感知的语义特征(心理图像),或者是某种类似语言的心理词汇。在这两种情况下,概念都被认为是孤立的心理表征。相反,后者认为概念不是心理表征,而是推理能力的集合。根据这种观点,一个概念的意义在于它与许多其他概念的推理关系。

不言而喻,双方的分歧再现了经验主义和理性主义的同样分歧。因为,这里真正利害攸关的是关于认知本质的分歧,也就是说,那些认为整个认知架构最终依赖于孤立特征集上的计算的人,和那些认为思维从根本上讲是一个在推理性互联节点的大规模网络上进行计算的人之间的分歧。

Robert Fludd’s microcosm diagram of the mind, in his work "Utriusque cosmi maioris scilicet et minoris metaphysica, physica atqve technica historia" (1619).

从认知科学到机器学习

你可能想知道这一切与机器学习和人工智能有什么关系。嗯,它实际上做了很多。人工神经网络是连接主义系统。联结主义是认知科学中的一个框架,旨在完全根据神经激活的模式来模拟心理现象。尽管脱离了早期的思维计算模型,即思维只是在符号心理结构上进行计算,但联结主义模型从思维的表象理论中借鉴了许多思想,包括经验主义者(原子主义者或只是表象主义者)对概念的观点(见福多尔&皮里希恩,1988)。

因此,对于连接主义者来说,概念是特征向量表示。特征向量表示是表示特征空间中特定对象或类别的向量。因此,例如,狗的概念只不过是表示类“狗”的特征活动的向量。

Illustration of a feature vector representation of the concept of dog

尽管联结主义的概念方法被证明是非常强大的,但它也有其局限性。当前的机器学习算法非常擅长执行许多我们通常与概念相关的认知任务,如识别事物、寻找相关性、对对象进行分类、记忆模式、编码和检索信息等。然而,我们通常会觉得,在很大程度上,这些算法是对真实人类认知进行建模的镜头。正如 D'Mello 等人(2006 年)所建议的:

机器学习通常需要大量准确的训练集,对已知或未知的知识知之甚少,将新知识很少地整合到旧知识中,一次只学习一项任务,几乎不允许将学到的知识转移到新任务中……相比之下,人类学习已经解决了许多这些问题,并且通常是持续的、快速的、高效的、准确的、健壮的、灵活的和毫不费力的。

我认为,机器学习算法现在面临的许多限制,部分是由于缺乏概念认知的完整概念造成的。在心理表征理论(这是认知科学的默认立场)底层的经验主义者精神的驱动下,连接主义者(或神经网络)模型对特征向量活动投入了太多的注意力,将概念之间的推理关系完全排除在讨论之外。

尽管已经有一些严肃的尝试来说明根据关系图表示的概念知识,但是为了在神经网络中实现这样的结构,做得很少。幸运的是,在过去的几年里,一些将图论与神经网络联系起来的研究得出了非常有趣的结果。这些研究有不同的风格。目前,在这个问题上最重要的两个项目是关系神经网络 (RNN)(见巴塔格利亚等人,2018 年)和图卷积网络 (GCNs)(见 Kipf & Welling,2017 年)。这两条研究路线都很有前途,但仍有很长的路要走。

Illustration of a multi-layer Graph Convolutional Network (GCN). Source: THOMAS KIPF’s "GRAPH CONVOLUTIONAL NETWORKS", URL = <https://tkipf.github.io/graph-convolutional-networks/>

从机器学习回到哲学

当面对两种或两种以上对立的理论时,我们通常会觉得有必要选择其中一种。虽然很多时候这是正确的做法,但在对认知进行理论化时就不那么正确了。那些认为概念是特征向量表示的人和那些认为概念是关系图中的节点的人之间所谓的竞争是误导。在我看来,这两种理论不是对手,但事实上,它们需要共同努力,以达成一个更丰富、更现实的人类认知模型。

1781 年,伊曼纽尔·康德出版了有史以来最杰出的哲学和科学书籍之一:KrV。在许多其他事情中,康德意识到经验主义者和理性主义者同时是正确的和错误的。因为,根据康德的说法,概念知识是经验(或康德词汇中的直觉)和推理规则(或康德词汇中的概念)共同作用的结果。直觉和概念本身都不能让任何人了解这个世界。引用康德批判中非常著名的一句话:

没有直觉的概念是空洞的。没有概念的直觉是盲目的。

我真的认为康德的认知理论可能会给当前认知科学和人工智能领域的争论带来一些新的启示。特别是,我相信上面引用的话可以很好地适用于特征向量和推理主义的概念方法之间的争论。对于,没有特征向量表示的推理网络是空的,没有推理网络的特征向量表示是盲的。让我进一步阐述一下这个想法。

Source: <https://medium.com/@rgrydns/kant-how-is-a-synthetic-a-priori-judgment-possible-45af58688600>. Original from "Philosophy for Beginners", by Richard Osborne, illustrated by Ralph Edney (New York: Writers and Readers Publishing, 1992), p. 104.

如上所述,绝大多数当前的机器学习算法仅仅依赖于特征活动的向量。这些算法已经被广泛用于从输入中识别、分类和记忆模式。然而,要做到这一点,他们需要接受大量准确数据的训练,一旦他们从训练集中学习,他们几乎没有能力从先前所学中发现和整合新知识。看起来好像机器是认知盲。每当他们学到新东西时,他们都忍不住要重新发明轮子。这些都是严重的问题。

现在,假设一台机器执行复杂的认知任务所需要的只是在大型关系图上进行计算,这些关系图包含成千上万个推理上互连的节点。很容易想象,对于一台机器来说,从它以前学到的知识中发现和整合新知识将会是怎样的。它只需要计算一个给定概念,比如“狗”,和许多其他概念,比如“哺乳动物”、“动物”等之间的适当的推理联系。然而,机器仍然对狗一无所知。因为,如果没有在后台工作的特征向量算法,当提供真实的狗(图片、文字或任何东西)作为输入时,它将无法识别、分类和记忆任何东西。确实,最终,机器会知道狗是哺乳动物,哺乳动物是动物,动物是生物,等等。;但与此同时,它真的对这些事情一无所知。他们的概念将只是空洞的。

威尔弗莱德·塞拉斯(1974),一位杰出的美国哲学家和新康德主义认知方法的杰出捍卫者,他曾经区分三种不同的概念反应:

  1. 概念输入反应:感知输入触发适当的辨别/分类/识别概念反应。
  2. 概念内反应:条目概念反应触发关于其他概念的有效推理模式。
  3. 概念退出反应:概念内反应引发新的歧视性/分类性/识别性概念反应。

根据这幅图,在入门阶段,输入被处理、识别并在概念下分类。这些概念性的反应反过来又引发了对其他概念的推理性反应,其中许多可能还没有在初级水平上处理过。最后,这种推理转换可以触发对那些在入门级别还没有被处理的概念的新的识别/分类响应,让系统在入门级别没有被完全训练的情况下学习新的东西。

不用说,这种入口-内部-出口的图景是对人类认知的过度简化。一些概念进入反应可能直接导致概念退出反应;概念退出反应可以作为新概念进入反应的输入;概念进入和概念退出反应之间的不一致可能导致认知系统改变或调整节点之间的推理模式等。我想在这里引起注意的是,概念认知是一种复杂的现象,它是不同类型的反应之间非常微妙的相互作用的结果。

结论

那么,哲学能教会机器学习什么呢?除此之外,它可以教会它,如果不整合到统一的图片(a)特征向量表示和(b)推理网络,就无法实现真正的深度学习。在完全承认这一点之前,人工智能和机器学习不会在模拟人类认知方面取得太大进展。

参考

  • 巴塔格利亚·p .等人(2018),“关系归纳偏差、深度学习和图网络”, arXiv:1806.01261v3 [cs .LG】。
  • D'Mello,S. K .,Franklin,s .,Ramamurthy,u .,和 Baars,B. J. (2006),“基于认知科学的机器学习架构”。 AAAI 2006 春季研讨会系列。美国人工智能协会。加州帕洛阿尔托:斯坦福大学。
  • 福多尔,j .,&皮里申,Z. (1988),"联结主义和认知架构:一个批判性的分析,认知,28:3–71。
  • Kipf,t .和 Welling,M. (2017),“带图卷积网络的半监督分类, ICLR
  • 劳伦斯和马格里斯(1999 年)。概念与认知科学,载于概念:核心读物,E. Margolis & S. Laurence(编。),第 3–81 页。
  • 塞拉斯,W. (1974),"意为功能分类",综合,27(3–4):417–437。
  • Thagard,P. (2018),"认知科学",斯坦福哲学百科全书,爱德华·n·扎尔塔(ed .).

用 Python 到底能做什么?以下是 Python 的 3 个主要应用。

原文:https://towardsdatascience.com/what-can-you-do-with-python-the-3-main-applications-518db9a68a78?source=collection_archive---------0-----------------------

如果您正在考虑学习 Python——或者如果您最近才开始学习——您可能会问自己:

“我到底能用 Python 做什么?”

这个问题很难回答,因为 Python 有很多应用。

但是随着时间的推移,我发现 Python 有 3 个主要的流行应用:

  • Web 开发
  • 数据科学—包括机器学习、数据分析和数据可视化
  • 脚本

我们依次来说一下他们中的每一个。

网页开发

基于 Python 的 Web 框架,如 DjangoFlask 最近在 web 开发中非常流行。

这些 web 框架帮助您用 Python 创建服务器端代码(后端代码)。这是在你的服务器上运行的代码,而不是在用户的设备和浏览器上运行的代码(前端代码)。如果你不熟悉后端代码和前端代码的区别,请看我下面的脚注。

但是等等,为什么我需要一个 web 框架?

这是因为 web 框架使得构建通用后端逻辑变得更加容易。这包括将不同的 URL 映射到 Python 代码块,处理数据库,以及生成用户在浏览器上看到的 HTML 文件。

应该用哪个 Python web 框架?

Django 和 Flask 是两个最流行的 Python web 框架。如果你刚刚开始,我推荐你使用其中的一个。

Django 和 Flask 有什么区别?

Gareth Dwyer 有一篇关于这个话题的优秀文章,让我在这里引用一下:

<开始引用>

主要对比:

  • Flask 提供了简单性、灵活性和细粒度控制。它是非独立的(它让您决定如何实现事物)。
  • Django 提供了无所不包的体验:开箱即用的管理面板、数据库接口、ORM[对象关系映射] ,以及应用程序和项目的目录结构。

你可能应该选择:

  • Flask,如果您关注的是体验和学习机会,或者如果您希望对使用哪些组件有更多的控制(例如您希望使用什么数据库以及您希望如何与它们交互)。
  • 姜戈,如果你专注于最终产品。特别是如果你正在开发一个简单的应用程序,比如一个新闻网站,一个电子商店,或者博客,你希望总是有一个单一的,明显的做事方式。

</结束引用>

换句话说,如果你是初学者,Flask 可能是更好的选择,因为它需要处理的组件更少。此外,如果您想要更多的定制,Flask 是更好的选择。

另一方面,如果您希望直接构建一些东西,Django 可能会让您更快地实现。

现在,如果你想学习 Django,我推荐一本名为《Django 初学者》的书。你可以在这里找到。

你也可以在这里找到那本书的免费样本章节。

好了,我们进入下一个话题!

数据科学——包括机器学习、数据分析和数据可视化

首先我们来回顾一下什么是机器学习什么是

我认为解释什么是机器学习的最好方式是给你一个简单的例子。

假设你想开发一个程序来自动检测图片中的内容。

所以,给定下面这张图(图 1),你希望你的程序识别出它是一只狗。

Picture 1

给定下面的另一个(图 2),您希望您的程序识别出它是一个表格。

Picture 2

你可能会说,我可以写一些代码来实现。举个例子,也许如果图片中有很多浅棕色的像素,那么我们可以说这是一只狗。

或者,你可以找出如何检测图片的边缘。然后,你可能会说,如果有很多直边,那么它就是一张桌子。

然而,这种方法很快就变得棘手了。如果图中有一只白狗没有棕毛怎么办?如果图片只显示了桌子的圆形部分呢?

这就是机器学习的用武之地。

机器学习通常实现自动检测给定输入中的模式的算法。

比方说,你可以给机器学习算法 1000 张狗的照片和 1000 张桌子的照片。然后,它会学习狗和桌子的区别。当你给它一张新的狗或桌子的图片时,它将能够认出这是哪一张。

我觉得这有点类似于婴儿学习新事物的方式。婴儿如何知道一个东西看起来像狗,另一个像桌子?可能来自一堆例子。

你可能不会明确地告诉一个婴儿,“如果一个东西是毛茸茸的,有浅棕色的毛,那么它可能是一只狗。”

你可能会说,“那是一只狗。这也是一只狗。这是一张桌子。那个也是桌子。”

机器学习算法的工作方式大致相同。

您可以将同样的想法应用于:

  • 推荐系统(想想 YouTube、亚马逊和网飞)
  • 人脸识别
  • 声音识别

在其他应用中。

你可能听说过的流行的机器学习算法包括:

  • 神经网络
  • 深度学习
  • 支持向量机
  • 随机森林

您可以使用上述任何算法来解决我前面解释的图片标记问题。

用于机器学习的 Python

Python 有流行的机器学习库和框架。

最受欢迎的两个是 scikit-learnTensorFlow

  • scikit-learn 内置了一些更流行的机器学习算法。我在上面提到了其中的一些。
  • TensorFlow 更多的是一个底层库,允许你构建定制的机器学习算法。

如果你刚刚开始一个机器学习项目,我建议你首先从 scikit-learn 开始。如果你开始遇到效率问题,那么我会开始研究 TensorFlow。

我应该如何学习机器学习?

学习机器学习基础,我会推荐斯坦福的或者加州理工的机器学习课程。

请注意,你需要微积分和线性代数的基础知识来理解那些课程中的一些材料。

然后,我会用 Kaggle 练习你从这些课程中学到的东西。这是一个网站,人们在这里竞争为给定的问题建立最好的机器学习算法。他们对初学者也有很好的指导。

数据分析和数据可视化怎么样?

为了帮助你理解这些可能看起来像什么,让我在这里给你一个简单的例子。

假设你在一家在线销售产品的公司工作。

然后,作为一个数据分析师,你可能会画一个这样的条形图。

Bar Chart 1 — generated with Python

从这个图表中,我们可以看出,在这个特定的星期天,男性购买了超过 400 个单位的这种产品,女性购买了大约 350 个单位的这种产品。

作为数据分析师,您可能会对这种差异提出一些可能的解释。

一个显而易见的可能解释是,这种产品更受男性欢迎,而非女性。另一个可能的解释是样本量太小,这种差异只是偶然造成的。另一个可能的解释是,出于某种原因,男性更倾向于在周日购买这种产品。

为了理解这些解释中哪一个是正确的,你可以画另一个像这样的图。

Line Chart 1 — generated with Python

我们不是只显示周日的数据,而是查看一整周的数据。正如你所看到的,从这个图表中,我们可以看到这种差异在不同的日子里相当一致。

从这个小小的分析中,你可能会得出结论,对这种差异最有说服力的解释是,这种产品只是更受男性欢迎,而不是女性。

另一方面,如果你看到一个像这样的图表呢?

Line Chart 2 — also generated with Python

那么,如何解释周日的差异呢?

你可能会说,也许出于某种原因,男性倾向于只在周日购买更多这种产品。或者,也许这只是一个巧合,男人在周日买得更多。

这是现实世界中数据分析的一个简化例子。

我在谷歌和微软工作时做的数据分析工作与这个例子非常相似——只是更复杂。实际上,我在谷歌使用 Python 进行这种分析,而在微软使用 JavaScript。

我在这两家公司都使用 SQL 从我们的数据库中提取数据。然后,我会使用 Python 和 Matplotlib(在谷歌)或 JavaScript 和 D3.js(在微软)来可视化和分析这些数据。

使用 Python 进行数据分析/可视化

最流行的数据可视化库之一是 Matplotlib 。

这是一个很好的入门库,因为:

  • 这很容易上手
  • 其他一些图书馆如 seaborn 就是基于它。因此,学习 Matplotlib 将有助于您以后学习这些其他库。

应该如何学习 Python 的数据分析/可视化?

你应该首先学习数据分析和可视化的基础知识。当我在网上寻找这方面的好资源时,我什么也找不到。所以,我在 YouTube 上做了一个关于这个主题的视频:

Intro to Data Analysis / Visualization with Python and Matplotlib

我最后还在 Pluralsight 上做了一个关于这个主题的完整课程,你可以通过注册他们的 10 天免费试用免费参加。

我推荐他们两个。

在学习了数据分析和可视化的基础知识后,从 Coursera 和 Khan Academy 等网站学习统计学的基础知识也会有所帮助。

脚本

什么是脚本?

脚本通常是指编写旨在自动化简单任务的小程序。

所以,我在这里举一个我亲身经历的例子。

我曾经在日本的一家小公司工作,那里有一个电子邮件支持系统。这是一个让我们回复客户通过电子邮件发送给我们的问题的系统。

当我在那里工作时,我的任务是统计包含特定关键字的电子邮件数量,以便我们可以分析我们收到的电子邮件。

我们可以手动完成,但是我写了一个简单的程序/简单的脚本来自动完成这个任务。

实际上,当时我们用 Ruby 做这个,但是 Python 也是做这种工作的好语言。Python 适合这种类型的任务,主要是因为它具有相对简单的语法,并且易于编写。用它写点小东西测试一下也很快。

嵌入式应用呢?

我不是嵌入式应用方面的专家,但我知道 Python 与 Rasberry Pi 一起工作。这似乎是一个受硬件爱好者欢迎的应用程序。

游戏怎么样?

您可以使用名为 PyGame 的库来开发游戏,但它并不是最流行的游戏引擎。你可以用它来建立一个爱好项目,但是如果你对游戏开发很认真的话,我个人不会选择它。

相反,我会推荐用 C#开始使用 Unity,这是最流行的游戏引擎之一。它允许你为许多平台构建游戏,包括 Mac、Windows、iOS 和 Android。

桌面应用呢?

您可以使用 Tkinter 用 Python 创建一个,但这似乎也不是最流行的选择。

相反,像 Java、C#和 C++ 这样的语言似乎更受欢迎。

最近,一些公司也开始使用 JavaScript 创建桌面应用程序。

比如 Slack 的桌面应用就是用一个叫电子的东西打造的。它允许您用 JavaScript 构建桌面应用程序。

就个人而言,如果我正在构建一个桌面应用程序,我会选择 JavaScript。如果你有网页版的话,它允许你重用一些网页版的代码。

然而,我也不是桌面应用的专家,所以如果你不同意或者同意我的观点,请在评论中告诉我。

Python 3 还是 Python 2?

我会推荐 Python 3,因为它更现代,也是目前更受欢迎的选择。

脚注:关于后端代码与前端代码的说明(以防您不熟悉术语):

假设你想做类似 Instagram 的东西。

然后,您需要为您想要支持的每种类型的设备创建前端代码。

例如,您可以使用:

  • iOS 版 Swift
  • Android 版 Java
  • 用于网络浏览器的 JavaScript

每组代码将在每种类型的设备/浏览器上运行。这将是决定应用程序布局的代码集,当你点击按钮时,按钮应该是什么样子,等等。

然而,你仍然需要存储用户信息和照片的能力。您会希望将它们存储在您的服务器上,而不仅仅是用户的设备上,以便每个用户的粉丝都可以查看他/她的照片。

这就是后端代码/服务器端代码的用武之地。您将需要编写一些后端代码来做类似这样的事情:

  • 跟踪谁在跟踪谁
  • 压缩照片,这样它们就不会占用太多存储空间
  • 发现功能中向每个用户推荐照片和新账户

所以,这就是后端代码和前端代码的区别。

顺便说一下,Python 并不是编写后端/服务器端代码的唯一好选择。还有许多其他流行的选择,包括基于 JavaScript 的 Node.js。

喜欢这篇文章吗?那么,你可能也会喜欢我的 YouTube 频道。

我有一个名为 CS Dojo 的编程教育 YouTube 频道,拥有 440,000 多名订户,在那里我制作了更多像这篇文章这样的内容。

例如,您可能会喜欢这些视频:

What Programming Language Should I Learn First?

How I Learned to Code — and Got a Job at Google!

无论如何,非常感谢你阅读我的文章!

你能从伯灵顿警方的数据中学到什么

原文:https://towardsdatascience.com/what-can-you-learn-from-burlington-police-data-8f541bdc845a?source=collection_archive---------6-----------------------

伯灵顿是佛蒙特州尚普兰湖畔的一座小城,人口大约 42000 人。这座城市有一个开放数据项目的门户,他们将其描述为:

部分资金来自一笔赠款,该市承诺与 Socrata 建立试验性合作伙伴关系,so crata 是一家基于云的软件公司,旨在促进佛蒙特州和纽约市等州政府和市政府的“开放数据”转变。这一安排使 Burlington 能够在其开放数据平台上发布多达 20 个数据集。这些数据集包括城市财政、出租房屋、公园一分钱计划、犯罪统计、分区许可申请等信息。”

对于自学如何在数据分析中使用 Python 的人来说,这是一个无价的工具。这让我追求的问题更有意义,与当地信息更相关。我已经研究了几个数据集,但是在这篇文章中,我将把重点放在伯灵顿警察局的数据集上

[## 伯灵顿|开放数据

感谢您访问伯灵顿市的开放数据网站。单击此处了解如何浏览网站和…

data.burlingtonvt.gov](https://data.burlingtonvt.gov/)

数据

对于伯灵顿警方的数据,只有几个变量可以处理。以下是它包含的内容列表:

  • 事件 Id —数字渐进序列
  • 呼叫类型—违规类型,例如。陶醉
  • 日期—12 小时格式的日期和时间戳
  • 位置—街道名称,用于由/分隔的两条街道
  • 事故编号—字母数字字符串

其中一些比其他的更有用。一开始,事件 Id 和事件编号是没有用的,除非我在某个地方查找它们。日期从 2011 年 10 月 1 日到 2013 年 11 月 12 日,这是一个相当奇怪的选择,但它不应该是一个问题。在此期间,总共发生了 28,832 起违规事件。

位置

位置数据在变得有用之前需要大量的工作。有些列出了两条被连字符分开的街道,而不是只有一条。缩写不一致也是一个问题。我采取的第一步是把所有的东西都变成小写,以消除它作为变量的可能性,然后在浏览列表后,我最终去替换不同的缩写或拼写错误。例如:

  • “路”到“路”
  • " rd。"至“研发”
  • “大道”到“av”
  • “高度”到“高度”

最后,我做了大约 19 处修改,将唯一值从远远超过 900 减少到接近 700。无论数据集如何,这都是一个问题,不这样做可能会意外隐藏有用的信息。

地理

我带着我的狗步行、开车或骑自行车游览了这座城市的很多地方。教堂街(见文章顶部的图片)是一条步行街,镇上的大多数酒吧、餐馆和娱乐场所都在这里。UVM 大学、州立大学和尚普兰学院在会议期间占人口的很大比例,并且位于市中心步行距离内的东部。

这是一个相当安静的城镇,但在夏季和秋季,我们确实有很多游客。冬天会很冷,我来这里后见过的最冷的时候是零下 25 华氏度,而夏天却很温暖。这也是一个相当活跃的城市,有漂亮的自行车道、公园和受保护的森林环绕。

概观

该数据集为期两年,快速浏览一下所有地点和时间段的所有违规次数,就可以发现一些明显的趋势。

如你所见,这是一个非常安全的地方。与其他事情相比,交通违规领先一大截。噪音排在第二位,醉酒和非法侵入排在第三位。

现在是时候深入挖掘一下了。一段时间内的趋势对于理解快速 matlibplot 折线图很重要,它显示虽然秋季有峰值,但到 2013 年总体上只有一点下降。在这种情况下,我希望能得到最新的数据。

深入挖掘可能会发现更多,所以让我们看看每小时的模式。这可能会影响警方的人员配备,并让您大致了解何时最忙。

小时

没什么好惊讶的,这里很少有酒吧营业到凌晨 2 点,所以酒吧关门并不奇怪,但实际上中午是相当繁忙的时间。我将按违规情况进一步细分,但总的来说,基于一天中的时间有一个明显的趋势。

工作日

按照一周中的某一天来划分,可以看出一点趋势。这并不奇怪,当你接近工作周的尾声时,会有一个小的增长。让我惊讶的是,周日并不比一周中的其他时间低。如果能看到这种按通话类型分类的情况,将会很有意思。

纵观整个月,有一个相当一致的趋势,变化幅度很小。因为这是总数而不是平均数,31 号有所下降仅仅是因为不是每个月都有 31 天。在这种情况下,一个月中不同的日子会引发更多的问题。

以下是一些有趣的趋势。佛蒙特州的二月寒冷刺骨,气温最低。十月有一个与秋天树叶季节相关的穗。当树叶变了的时候,路上会有大量游客涌入。

按街道细分

在这一点上,我们知道根据小时、星期几和月份会有变化。但这只能告诉我们整个城市的趋势。既然我们有了街道信息,下一步就是相互比较不同的街道。

我将重点关注教堂街及其周边地区,因为它在违规计数中排名前 5。前 5 名中还包括教堂街两端的两条街,珍珠街和梅恩街。

在下面的所有图表中,整个城市的违规顺序是从最常见到最少。如果街道反映了整个城市,那么每个酒吧都会向下减少,如果不是这样,那么这个位置就不同于一般人群。

教堂街

教堂街是一条行人专用街道,这里是城市中大多数酒吧、餐馆和娱乐场所的所在地。这是一个全年都很繁忙的地方,当气温在零度以上时更是如此。

我在和一个酒保谈论这个数据时发现了一个有趣的注意事项,他解释说,在这个数据出现的时候,酒吧利用非法侵入来阻止被赶出去的人回来。不一定是有人非法侵入住宅或其他私有财产。

这并不奇怪,因为这是一条行人专用的街道,交通流量很小,醉酒和非法侵入的发生率很高。我希望我能更清楚地知道什么是违反条例——在这种情况下的其他手段。

珍珠街

珍珠街位于教堂街的北端,是镇上唯一的酒类商店之一,也是通往佛蒙特州立大学 UVM 分校(该市人口的主要组成部分)的主要通道。珍珠街到达 UVM 的地方变成了科尔切斯特大道,所以我把它们放在一起做对比。

在这里你可以看到,从教堂街向外走,违法行为的类型减少了,只有醉酒例外。我猜这反映了学生们回家的路线,但有趣的是,当我看着大多数学生宿舍所在的南展望街时,那里几乎什么都没有。

主要街道

包围教堂街的南端,穿过 UVM 大学校园,我们看到一些与上面的 Pearl 和 Colchester 相同的行为,除了噪音投诉。

北大街

与目前其他的不同,这一次不是在去大学的路上,而是在去住宅区的路上。交通显然是首要问题。

小时与呼叫类型

现在,让我们将一天中的具体时间与违规类型结合起来。这应该向我们显示某些违规行为最有可能发生或至少被报告的时间。

有趣的是,在 6 点的时候,这种巨大的增长一直持续到午夜。几乎就像在清晨、工作日和下班后有一个小小的平台期。

像这样分开,我不太确定酒保所说的醉酒和非法侵入的关联。如果酒吧阻止被踢出去的人重新进入是非法侵入的主要原因,那么有很多人试图在中午进入酒吧。

身体攻击和家庭暴力看起来有相似的形式,但是凌晨 2 点的攻击高峰显示了早上晚些时候喝多少酒可以影响决策。我也对下午 5 点的峰值很好奇,那里发生了什么?

到目前为止,噪音违规比其他任何违规都有最有序的结构。噪音条例一天 24 小时执行,但晚上 10 点至早上 7 点之间有特定的安静时间,它显示。

精神健康问题似乎在上午 10 点有一个平台期,并在下午的大部分时间里保持在或接近这个水平。可能是同一个人的某个方面出现了反复的问题,但这些数据不会揭示这种趋势。

这是一个事故时间没有反映犯罪报告时间的例子。我想人们回家后会发现他们的房子被盗了,而不是在事情发生的时候呆在家里。

固有偏见

这是一个很好的点来谈一谈数据集如何有偏见,以及当政策根据这些见解进行修改时,如何将偏见纳入反馈循环。

给出违规的原因可能是因为官员发现了它,或者因为有人举报了它。例如,教堂街可能会有很多违规行为,因为整个晚上都有警察在那里巡逻。这并不意味着同样的违规行为没有在其他地方发生,只是没有人发现它。

这意味着这些模式可以在一个反馈循环中重新加强自己,通过对他们周围的一条街道进行更严格的监管,以发现更多的违法行为,这在数据中得到反映,他们被指示进行更多的巡逻,尽管这可能没有反映出现实中城市的犯罪密度。

我喜欢做这种工作,但从不把数据当作绝对的真理,每一部分都需要被认为是不完整的,随着一切变得越来越自动化,危险变得越来越明显。这种引入的偏见会因城市中不同种族、民族和阶级的聚集而放大,并以非常直接的方式不成比例地影响人们的生活。

以上数据应该持保留态度,我没有发现任何明显的偏见,种族不是我的数据中的一个变量,但请记住这一点

结论

我对此进行挖掘的结果并不令人惊讶,但有一些明显的趋势出现了:

  • 违规计数明显受一天中的时间、一周中的日期和月份的影响(一般来说,二月星期一的凌晨 4 点问题最少,十月星期五晚上问题最严重)
  • 交通违规是记录事件的主要原因,占总数的 40%,并且在以下方面具有独特的模式
  • 相同的街道出现在多个违规类型列表的顶部,似乎存在特定热点位置的模式
  • 分解一天中的时间和违规类型是非常有效的,并揭示了一些有趣的模式

将天气与违规类型进行比较会很有意思,因为我们已经可以看到寒冷是如何影响违规的。当他们发布从 2013 年到现在的数据时,看到比两年更长时间的趋势会很有趣。

我将继续看看我还能从伯灵顿的其他数据集中学到什么。喜欢就留言,喜欢就关注我!

开发人员想要发展什么样的编码技能

原文:https://towardsdatascience.com/what-coding-skills-do-devs-want-to-develop-a952ee620312?source=collection_archive---------8-----------------------

开发者的技能是如何相互关联的,技能会如何进化?

在最近的 Stack Overflow 开发者调查中,70%的受访者明确了他们的角色(前端、数据库管理员等),其中许多人认为自己身兼数职。

devs of all trade

我们可以看到,web 开发是各行各业开发人员共享的通用技能,而机器学习专家和质量保证工程师更专业。

以下是按角色分列的受访者人数:

经常使用的语言数量的中位数是 2。

number of programming languages used

大约 80%的人使用 1 到 4 种编程语言,同时可能知道更多的语言。

考虑到这一点,我们可以比较受访者使用过的语言和想要掌握的语言。

当前技能与未来技能

A snippet of the survey data

由于数据包含了开发人员已经做了什么和他们希望开发什么,我们可以提取额外的语言/平台/框架/数据库,这通常是几个项目的列表。我们可以从整体和细节两方面来看待它们。

我们可以在 TypeScript、Swift、Go、Scala、R、Python、Haskell、Rust 等等里面看到很多兴趣点。

如果研究一下不同语言在每个人愿望清单中的共现情况,结果是这样的:

language skills devs want to acquire

platforms that devs want to work on in addition to what they have worked on

frameworks that devs want to work on in addition to what they have worked on

databases that devs want to work on in addition to what they have worked on

进一步的问题和想法

对于一个有共现模式的数据集,我们如何直观地把有共现的部分和没有共现的部分一起可视化?

例如,在使用 SQL 的受访者中,大多数人不仅使用 SQL,还使用其他语言。

我觉得一种方法是引入交互性和动画——通过提供放大感兴趣的语言的选项,人们可以看到部分受访者单独使用这种语言,而不是将其作为工具包的一部分,然后扩展到共同出现的语言技能的细节。

对于调查数据,我们如何确定它代表了总体?如果它有类别不平衡,我们如何在分析具有网络模式的数据集时考虑到这一点?

如果 javascript 是被调查的最受欢迎的语言,这可能只是因为有许多 web 开发人员返回了调查问卷。因此,我对使用节点大小来表示回答者的数量持谨慎态度,因此同时所有节点大小都显示度数。

给定所有的个体变化,我们如何以集体的方式最好地可视化网络的演变?

例如,一个开发人员今天使用 Go、Python、Ruby,将来想使用 Go、Python、Ruby 和 PHP。给定当前的语言集,我们如何可视化添加的语言?这也不同于 VBA 程序员想使用 Python 的场景,这是一种技能的转移而不是增强。

这是我关于数据科学和视觉故事的# 100 日项目的第 40 天。我的 github 上的全部代码。感谢阅读。欢迎新主题的建议和反馈。

那只天鹅是什么颜色?

原文:https://towardsdatascience.com/what-color-is-that-swan-372973f22c90?source=collection_archive---------3-----------------------

纳西姆·塔勒布的《黑天鹅》给广大观众带来了统计学、经济学和哲学中一些晦涩难懂的观点。他写这本书已经有一段时间了,但我最近才读了它。

当我读塔勒布的书时,许多观点让我感觉很熟悉。具有讽刺意味的是,这是因为我对经济学的研究,而塔勒布对此进行了激烈的批评。(不过,我认为塔勒布的厌恶针对的是金融和宏观经济学家,而不是我的领域——应用微观。)我在塔勒布身上感受到了一种同道中人的精神,因为他尊重不确定性。

很难用一段话来概括像塔勒布这样的一本书,因为事实上这本书里有许多优秀而独特的思想。然而,人们喜欢简化,黑天鹅已经被简化为一个单一的主要想法。以下是亚马逊上的营销声明:

黑天鹅是一个事件,积极的或消极的,被认为是不可能的,但造成巨大的后果。在这本具有开创性和预言性的书中,塔勒布以一种有趣的方式展示了黑天鹅事件几乎解释了我们世界的一切,然而我们——尤其是专家们——却对它们视而不见

“几乎一切”的说法值得商榷。塔勒布的例子主要集中在金融领域,他确实倾向于推断。以下是该书更具批判性的总结:

我可以通过总结这本书的主要观点来帮你节省这本书的价格——以及你阅读这本书所需要的时间:难以预测的事件很难预测,因为它们很难预测,我们经常欺骗自己认为我们可以预测它们。但是我们不能。

读完这本书后,很容易看出大多数人留下的是什么:有些事件,黑天鹅,既极其重要又不可预测。

不过,这本书还有更多的内容,我希望在这篇文章中探索一下。

灰色天鹅

在读这本书之前,我从来没有提到过灰天鹅。这让我很惊讶,因为我在书的早期就想知道塔勒布所讨论的关于灰天鹅的话题。

要了解灰天鹅,了解一两件关于伯努瓦·曼德尔布罗的事情是很重要的。Mandelbrot 是一位应用数学家,他发展了一门叫做分形几何的数学分支。不严格地说,分形几何是对不同尺度上重复模式的研究。Mandelbrot 发现分形几何为我们在自然界看到的许多事物提供了很好的模型。例如,树枝看起来很像树,只是更小。一个小的岩石露头看起来很像一座山,只是小一些。Mandelbrot 的工作使得在过去看似混乱的事物中发现模式成为可能。

为了我们的目的,重要的是要知道 Mandelbrot 和他的学生发现了许多复杂现象遵循幂律分布的大量证据。(这里有一些技术上的注意事项,但除非感兴趣的读者要求,否则我将省略它们。)

幂律分布很有趣,因为它们是分形的。幂律直方图可能是这样的:

如果这些值来自幂律分布,此图表仅显示不同值的概率。在最左边,你有低值,它们非常频繁。右边,你的值很高,而且不那么频繁。

正如我所说,幂律分布是分形的。假设你在上图左侧的某处画了一条垂直线。然后放大并重新绘制图形。我会给你一张新的图片,但我不需要:它看起来几乎和上面的一样。这就是幂律分布被称为“可伸缩”或“分形”的原因它们在不同的尺度上重复出现。

那又怎样?好吧,让我们把这个想象成美国的收入图表。幂律的分形性质意味着最富有的 10%之间的不平等与整体的不平等一样明显。

那就回到塔勒布的灰天鹅。灰天鹅类似于拥有 2000 亿美元净资产的人。(我刚刚查了一下,比尔·盖茨现在估计有 870 亿美元。最近,富豪榜有所波动。)因为幂律分布,我们都知道这是有可能发生的。此外,我们知道,认为有人可能在可预见的未来达到 5000 亿美元,甚至可能达到 1 万亿美元,这并不疯狂。如果发生这种情况,我们也不会完全措手不及。因此,我们的知识让一些黑天鹅变成了灰色。然而,它们并不是完全白色的,因为它们仍然是不可预测的,而且它们关系重大。提示一个关于有多少财富被最富有的 1%或其他人控制的统计数据。

现在,所有这些都是为了说明灰天鹅和黑天鹅的区别是非常重要的。

盲目的

我在盐湖城长大,它正好位于一条大断层线上。每个人都知道有一天,也许是明天,也许是 500 年后,沿着瓦萨奇前线很可能会有一场大地震。所以人们在某种程度上已经做好了准备。至少,如果发生了,没有人会说“我从来没想过这是可能的。”SLC 大地震:灰天鹅。

另一方面,2008 年金融危机是一只黑天鹅。一小部分人可能已经看到了它的到来。不过,最主要的是,它不知从哪里冒出来的。或者更准确地说,它是从我们的盲点靠近的。(在我看来,金融业没有因为发现盲点而得到任何赞誉。事实上,我要说复杂的建模和“风险管理”实际上在很大程度上保留了盲点。AAA 评级很有分量。谁知道我们得回去检查穆迪的工作?)

黑天鹅是巨大的事件,它们不仅仅是普通的不可预测的。它们有不可预知的原因。还记得 SLC 的地震吗?我们知道地震将会发生,我们知道原因是什么,只是不知道什么时候。对于黑天鹅,我们甚至不知道会发生什么。

知识毁灭

灰天鹅和黑天鹅之间另一个相当重要的区别与一个无聊的技术术语有关:“数据生成过程。”基本上,我们世界中的事物会产生数据。我们经常想知道给出数据的底层过程,并且我们经常只能通过研究数据本身来找到答案。

这是一个棘手的问题,塔勒布详细阐述了这个问题。一个简短的例子对我来说就够了。假装你回到家,看到一扇窗户被砸碎,一些贵重物品从你的卧室被偷走。窗户和贵重物品是数据点。您真的很想知道生成这些数据点的过程。即使你认为是窃贼造成了这两个事实(相对于,比如说,地震和需要借一些珠宝的家庭成员的组合),你仍然不知道窃贼来自哪里。为什么你是目标?下一个是谁?

在这方面,灰天鹅还是比黑天鹅更容易驯服。随着你观察到越来越多的数据点,你开始了解事件的分布。这是非常缓慢的,仍然有很大的不确定性(T2 什么时候会看到万亿美元?),但至少你可以用之前的数据做一些有根据的猜测。然而,对于黑天鹅,以前的数据本质上是没有帮助的。原因是因为黑天鹅产生于你推理系统之外的事物。它们是你的世界“模型”之外的风险。

“黑天鹅”还有更多坏消息,这源于它们的影响力如此之大。黑天鹅引发了经济学家有时称之为“结构性断裂”或“政权更迭”的现象。基本上,这意味着他们改变了数据生成过程。

再举一个例子,这次是从塔勒布回收的。这是火鸡的例子。我们有一只火鸡,随着时间的推移,它学会了每天被喂养和照顾。火鸡可能开始觉得它在积累数据生成过程的知识,直到感恩节到来。

感恩节过后,我们发现所有的数据收集都是无用的。感恩节前的数据生成过程完全没有告诉我们从感恩节开始的过程。

第二个例子。2008 年的黑天鹅事件对金融行业产生了巨大影响。压力测试、抵押贷款改革、资本要求和财政紧缩都是反应的特征。尽管有些人声称社会什么都没有改变,并且正在重蹈覆辙,但我认为我们已经对金融体系进行了修改,这些修改已经影响了 2008 年以后的数据生成过程。出于这个原因,查看 2008 年之前的数据并不能告诉我们 2008 年之后的情况。人们生活在一个不同的世界,正是因为 2008 年的黑天鹅。

观鸟

塔勒布以一些关于该做什么的讨论结束了黑天鹅,并且他以这种方式继续他随后的工作。

最后,我要指出,我认为大多数人并没有完全理解这本书。我在亚马逊的示例评论很好地证明了这一点。不确定性有很多种。我们应该努力学习更多关于地震震级的知识。然而,我们不应该试图预测和避免所有可能发生的坏事。调查灰天鹅是富有成效的,即使它不能提供确定性。调查黑天鹅通常不会有什么结果。

塔勒布讨论的另一个话题涉及保护我们免受负面黑天鹅的影响,以及从正面黑天鹅中获利的机会。这是另一篇文章的主题,即将发表。

哪些公司在雇佣数据科学家方面犯了错误

原文:https://towardsdatascience.com/what-companies-get-wrong-about-hiring-data-scientists-704fa60c594?source=collection_archive---------9-----------------------

简而言之,你不能在至少不了解需要什么技能和才能的情况下招聘特定职位的员工,但这正是当今许多希望招聘数据科学家的雇主所面临的情况。

出现这种情况有许多原因,但一个重要原因是数据科学围绕着许多不同工具的使用,因此许多企业根据特定应用程序的经验进行招聘。

也许更令人困惑的是,某些专业人士开始自称为“数据科学家”,而事实上他们并不是。

那些有 Excel、Tableau 或 Sheets 等点击式软件经验的人倾向于吹嘘数据科学,这是有道理的,因为他们经常处理分析和可视化,但他们不具备真正的数据科学家所具备的所有技能。

真正的数据科学家在编码方面也很流利,所以如果你雇佣的专业人士不是这样,那就有问题了。要开发或使用数据科学领域的大多数技术,如人工智能或机器学习,你必须能够编写代码。

编程经验也为数据科学家提供了使用工具的新机会,比如 R、Python、TensorFlow 和其他一些工具。这些工具也更加强大和可配置。

以下是招聘数据科学家时需要了解的内容:

1。头脑必备技能

一个显而易见的问题是,许多雇主对“数据科学家”的描述信以为真。如果有人声称他们是一个,那么他们一定是,对不对?

大部分情况下,是的。但是,最好还是看一个应聘者具备的技能。

他们应该拥有统计和机器学习方面的专业知识,了解预测分析,并拥有类似编码语言的经验,如 Python 或 r。该领域的其他语言包括 Python、Java 或 Scala。此外,还需要 SQ 等关系数据库的经验,以及 Hadoop 或 Spark 等平台的大数据知识。

最后,如果他们已经在该领域工作了一段时间,那么他们可能已经使用过 Hive、Pig 或 AWS 等数据工具。

更重要的是,他们必须能够阅读他们正在处理的数据,以提取或处理洞察力、模式、信号处理和可视化。

是的,这确实很多,但它涵盖了真正的数据科学家会涉及的所有内容。现在和将来,在锁定一个广泛使用和淡化的头衔之前,开始审视你雇佣的那些人的技能,确保他们与职位描述相匹配。

2。数据科学有很多职责

与其他领域不同,在其他领域,单个职位或描述可以被分解为不同的子集,这不是数据科学的工作方式。换句话说,数据科学家有许多职责,他们必须能够参与分析和统计内容生命周期的每个阶段:

数据获取或收集:通常,这包括从各种来源收集数据、使用 API 以及在关系型或非关系型数据库上运行查询。他们可能还必须构建 ETL 管道,并提出适当的策略来识别哪些数据最有价值。他们会收集或追逐什么?

数据清理和转换:这实质上意味着获取非结构化和杂乱的数据,并通过构建数据集和组织信息的方式使其变得有用。一些数据可能不完整,这也要求使用预测建模。

分析:这一阶段要求使用统计和机器学习建模技术来理解、识别、描述或预测数据集内的趋势。

解释结果和制定行动:这一阶段完全是关于战略。您正在获取或解释分析结果,以了解它与业务优先级和需求的关系。然后,它被应用到未来的战略和决策中,有望采取适当的行动。

编程、开发和自动化:许多人认为,传统的开发人员负责创建用于简化或自动化数据科学流程的库、工具和实用程序。那不一定。大多数数据科学家都参与了这些项目,甚至会贡献生产质量的代码。

澄清一下,你会发现很少有数据科学家是所有职责或技能的绝对专家。也就是说,一个有能力的专业人士至少应该能够在各种阶段坚持自己的立场。如果你发现有人自称是“数据科学家”却不能做这些事情,那么最好去别处看看。

3。教育背景很重要

任何领域的经验都很重要,但遗憾的是,你并不总能找到简历上有一长串经验的新员工或潜在候选人。在这种情况下,参考他们的教育背景很重要。

业内一些最优秀的数据科学家拥有适当的定量学科的高级学位(硕士或博士)。这可能包括统计学、计算机科学、应用数学、经济学、工程学或运筹学等领域。有一些专注于数据科学的学位课程可以帮助那些希望进入该领域的人获得正确的经验。

还有在线或本地的新兵训练营、MOOCs(大规模开放在线课程)和认证项目。如果你想找一个水平较低的人,只要确保他们有适当的技能或者来自相关的职业领域。

4。个人进化和成长至关重要

数据科学行业正在不断成长和发展。新的平台、工具、技术和方法正在被定期引入。再加上现代企业的需求——其中许多企业在数据处理、收集和交付方面都有不同的需求——你就拥有了一个名副其实的变革宝库。

这对你雇佣的候选人和员工意味着什么?他们必须准备好继续学习、成长和适应。你不会想雇佣一个一成不变或死板的人,他们固执己见,认为自己总是知道得最多。事实并非如此。

最有前途的候选人应该是对知识如饥似渴,有实现个人成长的愿望。有数百本书、在线资源、专业知识、视频和专家级课程,甚至对那些积极工作的人也非常有益。找到那些不仅愿意与你和你团队的其他成员一起成长,而且也明白总有那么多东西需要学习的人。

5。需要技术知识

统计学、数学和各种应用科学拿走了蛋糕,是的。然而,重要的是要记住我们在这里谈论的是一个面向技术的领域。在数据科学领域,您将会遇到的大多数工具和平台都非常前沿。为了取得成功,数据科学家需要大量的技术知识、计算机技能以及对现代技术的一定程度的熟悉。

数据科学是一个复杂的过程

数据科学行业的真正本质是与海量的数字信息(数据)一起工作,以构建和发展正确的见解,然后利用这些见解做出有价值的明智决策。

很难确定具体的细节,有时定义会变化无常,包括它适用于谁。并非所有自称的“数据科学家”都是真正的数据科学家。这是一个很重要的区别,需要加以理解。

你要确保你为你安排的项目雇佣了正确的人。

专注于上面讨论的技能和经验,你就会走上正轨。

图像由【energepic.com】

数据科学大多忽略了什么

原文:https://towardsdatascience.com/what-data-science-mostly-ignores-58eb0e75d03d?source=collection_archive---------5-----------------------

我们都知道算法会出轨,追逐一个狭隘的目标函数,但是真的会错过这个点。例如,摩根大通决定将程序性广告从 40 万减少到 5000 万,并认为在他们关心的结果中没有任何有意义的差异。算法在做什么?当然,它并没有对照它想要改善的业务成果来检查自己。它只是愉快地在破坏它的损失函数。

另一个例子:假设你有一堂课,学生们总是很晚才交作业。所以对于所有未来的任务,你把最后期限往后推。那显然会解决问题,对吗?

以上两个例子都有一个隐藏的因素,严重改变了大多数人对这种情况的看法。用技术术语来说,在这两种情况下,一些外部因素改变了“数据生成过程”,但是模型不包括那个外部因素。

但是模型预测得太好了!是的,他们经常这样做,在许多情况下,这就是你所需要的。但其他时候,你真的想做一个反事实。这就是数据科学中常用的模型可能非常失败的地方。

再举个例子。假设你为一家公司工作。该公司向许多消费者发送了促销信息。您可以使用客户数据库中的信息,训练一个关于促销回应率的统计学习模型。

现在,经理们说“好的,我们将通过谷歌上的搜索广告提供这些促销活动。如果回复率和你的模型预测的一样高,我们会赚很多钱。”

这里有一个很大的缺失:公司是如何决定给谁升职的?嗯,公司通常只有自己客户的数据,所以估计样本可能只包括那些以前从公司购买的客户。那很糟糕。这意味着你的模型预测的 X%回复率对于那些只是在谷歌上搜索的人来说可能太高了。

有几种方法可以解决这个问题。让我们来讨论一个显而易见的问题:如果模型遗漏了一些重要的东西,那么您可以包含它!这很好,但有时会使整个努力无效。再次考虑促销活动:你可以包括一个指标,表明该客户是否是以前的客户。但是,你没有任何不是你以前顾客的人的数据。你不能在他们身上估计任何模式。

另一种方法是做一个实验,发送一个新的促销信息,但这次是针对非客户。但是,如果你有干净的实验数据,你可以运行一个非常简单的模型,比如说,一个回归,并获得想要的洞察力。没有数据科学家你也能做到。你可以用 excel 来做。

第三种方法是使用心理学或经济学中的人类行为模型。你需要有数学建模能力的人。根据我的经验,大多数数据科学家都不是这样。

在统计学中,有一个概念叫做“外推”。外推是在样本数据范围之外进行预测。传统的外推法从技术和数学的角度解释“范围”(x 变量的最大值减去最小值)。但是这个术语在更宽松的意义上也同样适用。在样本数据的概念背景之外进行预测,即使不比正常的推断更危险,也是一样危险的。正如我所说,概念背景是一个松散的定义,但我认为它对大多数人仍然有用:你从中获得数据的背景,在最重要的方面是否与你想要做出预测的背景相似?这是问题的核心。

你可能会想,在这一点上,这是否只是天真的数据科学家。也许吧。大概吧。看看这个:

例如,考虑一家有兴趣开展直接营销活动的公司。目标是根据对每个人的人口统计变量的观察,确定将对邮件做出积极响应的个人。在这种情况下,人口统计变量作为预测因素,对营销活动的反应(积极或消极)作为结果。公司对深入了解每个预测者和反应之间的关系不感兴趣;相反,该公司只是想要一个精确的模型来预测使用预测器的反应。这是一个为预测建模的例子。(着重部分由作者标明)。

这是来自斯坦福大学教授的著名著作《统计学习导论》。对我来说,这个加粗的句子是有问题的。这是有问题的,因为有时深刻的理解对于准确的模型是必要的,尤其是在反事实的情况下。

数据科学往往会忽略其他东西,比如未观察到的异质性和可解释性的价值,但我试图描述我认为最常见和最有害的东西。

要做些什么?了解是一个开始,我已经给出了几个可供选择的方法。但我的主要建议很简单:试着从多个角度理解你的问题,看看你是否遗漏了什么重要的东西。数据科学模型可以处理大量的信息和大量的变量,并且它可以适应基本上任何数据模式。但是它不能帮助你忘记告诉它的事情。

设计给 AI 带来了什么

原文:https://towardsdatascience.com/what-design-brings-to-ai-b44bb3be181e?source=collection_archive---------4-----------------------

透明、信任+共生

人工智能(AI)系统可以执行惊人的问题解决,从预测到推荐到分类等等。但无论人工智能解决方案有多精确,如果没有出色的设计工作,它们都不会有相关性、有洞察力并被人们采纳。

设计实践早在视觉外观和感觉被创造出来之前就开始了,并在之后继续。设计涵盖问题空间探索、用户研究、旅程映射、原型制作、线框图、数据可视化、用户测试、图形用户界面(GUI)、工业设计、语音用户界面(VUI)等。它在人类和机器之间建立了一种至关重要的联系,使人工智能系统能够以最佳状态运行。

在这篇文章中,我不会涉及人工通用智能,即创造接近人类等级的广泛推理的项目。我将关注为特定任务构建的离散认知机器工具和系统。

人工智能是由人建立的,是为了给人解决问题。即使人工智能的答案足够正确,足以提供帮助,也很少有人会受益,除非系统是可理解的、可信任的,并且通过向最终用户学习而积极进化。在人际交往方面,即使一个同事有正确的答案,我们也可能很难接受他们善意的建议,除非我们信任他们并理解他们的决策。根据信息传递者是谁或者是什么,人们听到的信息是不同的。

1.透明度

照亮黑盒

“The inside of an engine” by Michael Mroczek on Unsplash

设计在定义你如何与人工智能系统交流以及发现这种交互的限制或可能性方面发挥着作用。我们可以弄清楚用户如何与系统交互,它如何解决问题,以及它如何从我们这里学习。

技术推理越先进,将机器的过程翻译成人类可以理解的上下文就变得越重要。解释的渠道可能包括概念说明、用户流程、清晰的文字、数据可视化、语音和用户界面。

不是所有的人工智能都能够清楚地解释它们是如何工作的,即使是对它们的创造者。例如,如果深度学习图像识别系统在一个数千维的数学空间中运行,试图在粒度级别上查明系统成功分类图像的“原因”可能会适得其反。在这种情况下,有帮助的是系统的架构和流程的抽象表示,并用例子加以说明。

如果为这些系统设计一个清晰、直观的解释很容易,这将是一个已解决的问题。设计师们很幸运,挑战依然存在。

谁需要知道什么?

需要解释系统如何工作的两个主要受众是创建者和最终用户。创造者需要了解系统的结构、输入、输出以及来自内部工作的反馈——以便开发人工智能代码的工程师和科学家能够有效地构建它。通常创建者在构建时会设计他们自己的视图。设计师在这里的机会是扩展和增强这些观点;从原理图,到仪表板反馈,到概念提炼。

Photo by Fancycrave on Unsplash / “A man driving an auto rickshaw in Bangkok” by Hanny Naibaho on Unsplash

设计的真正好处是给系统的最终用户。根据受众和人工智能技术的不同,在使用之初应该会有一些关于系统如何工作的预先解释,如果用户感兴趣,可以很容易地获得进一步的细节。

许多人会直觉地抵制这样一种想法,即一台机器对一个认知问题给出了正确的答案,而他们可能以不同的方式解决了这个问题,尤其是拥有多年领域专业知识的专业用户。设计师可以通过揭示人工智能的数据源和过程来缓解这种摩擦,让人们可以检查相关的证据和决策。打开这扇门可以让用户建立信任,并主动与人工智能交流。

设计的第三个目标是更一般的、高层次的受众:可能对产品感兴趣的人,他们可能更接近于理解和使用它。对于这类观众来说,基于示例或小用例故事的清晰简明的解释效果很好。

展示这个系统是什么以及它是如何工作的,是人们信任、使用并最终改进这个系统的第一步。

2.信任

photo by Diana Măceşanu

人类是独一无二的,我们有能力生动地构建一个想象的未来,并与他人广泛分享。作为具有强迫性创造力的工具制造者和故事讲述者,至少从皮格马利翁的神话开始,我们就一直被我们的作品变得栩栩如生并与我们交流的想法所困扰。

从《弗兰肯斯坦》到《哈尔》,再到《天网》,故事讲述者在我们的想象中精心打造了一些地方,在那里我们可以集体探索各种可能性,并接受有意识工具的后果。科幻小说不仅仅是关于未来的,它也是探索伦理问题和对现在的情感反应的一种方式。它的作用是将人们运送到不同的极限世界,这样我们就可以试运行并体验这些困境。

除了这种艺术探索,人工智能确实构成了一些非常真实的威胁,从世俗的(定向广告和机器人电话)到相应的(扰乱行业和取代工作;敌对的外国政府干预选举)。

设计思维,也称为以人为中心的设计,考虑到这些希望和恐惧,形成我们为之设计的人的文化背景。它还挑战假设,并对人们实际需要什么进行开放式调查。通过适当的研究发现和验证特定的用例,我们更有可能从一个感觉相关和有价值的系统开始。

通过了解人工智能的焦虑来源,我们可以努力解决不适、缺乏信任和恐惧。从透明度开始,我们可以创造一种理解感、熟悉感和最终的信心,这将使人们更有效地使用系统。

权力范围

建立信任的第一步是交流人工智能是什么样的工具。正如刀是增强我们双手的工具,眼镜是我们用来改善视力的工具,人工智能工具扩展并支持我们的思维。

通过创造能为我们做大量低级脑力劳动的机器,我们释放了精神资源,这样我们就可以将它们用于更细微的问题解决。我们最好用计算器来计算我们的财务状况,用我们的理性和想象力来提前计划。

一个擅长分类的工具(比如从 x 射线图像中检测早期肺癌)通常擅长这项任务,而且仅仅是那种任务。曾经是科幻小说,现在很常见的工具——比如即时驾驶方向和音乐推荐——擅长这些事情,但我们不希望它们执行其他认知任务。

通过澄清人工智能的领域和能力,我们可以让人们认为人工智能是支持性的,而不是取代他们的思维。因此,我们必须提供一种统一的视觉语言,通过这种语言,用户可以表达不同意见或同意意见。设计还必须处理概率:系统对给定答案的信心,以及不确定性的数量。无论机器推理多么有用,人类推理应该总是有机会做出最后决定。机器推理应该被视为一种增强,而不是替代。

在国际象棋和围棋比赛中,人工智能击败了人类冠军,现在玩家与人工智能合作,以人工智能或人类单独不可能的方式扩展和改进他们的游戏。

避谷

“Creepy mannequin posed in a vintage pilot outfit” by Erik-Jan Leusink on Unsplash

像 Alexa 和 Siri 这样的虚拟助手通过自然语言处理和语音界面模仿人类交互,尽管我们可以很快看出它们的局限性。设计师可以选择语调、性别和姓名、幽默感、健谈性和微妙的线索,如如何指示人工智能正在倾听或计算答案。随着语音合成的改进,语音用户界面(VUI)的语音语调和发音从木讷发展到接近人类。这一点,加上语言处理的进步,使我们更接近 3D 图形专业人士长期以来所称的恐怖谷。基本上,一个程序越接近代表一个真实的人,它看起来就越奇怪,越不舒服。

这方面的设计选择可以放大或缩小伦理和存在的问题,即:我们如何对待无权无势的人?我们可能会习惯家里有一个活泼的女性;一个总是醒着,可以回答问题和执行任务的人——而且从不疲倦或抱怨。和隐形无薪仆人一起长大的孩子,成年后会如何对待其他人?设计如何预见类似的问题并努力解决它们?

电影和游戏可以通过保持人形角色足够外星化或卡通化来避开山谷。VUIs 将受益于更多的可定制性:不是每个人都想和他们的 AI 聊天。

这就是设计师可以帮助定义从机器到接近人类的 VUI 频谱的地方,这为用户提供了选择他们感兴趣的对话级别的选项。人工智能还可以随着时间的推移进行适应和调整,以反映用户的语言——从简洁到絮叨;从枯燥到喜剧。VUIs 可以模仿人的语调和措辞,就像人与人之间一样,目的也是一样的。

无论做出何种设计选择,它们都应该是有意的、全面的和负责任的。

边缘共振

Android emoji

建立信任需要同时满足理性和感性的大脑。人们确实需要从逻辑上理解这个系统是关于什么的,它是如何工作的,以及它有多精确。一个互补的设计任务是处理边缘大脑,与感觉和动机有关。

例如,像人工智能的“听”或“思考”状态的图形动画这样的小设计元素不仅仅表明系统的当前认知状态。运动的形状、颜色、速度和质量结合起来表达了一种个性。不管是有意识的还是无意识的,这些都被我们的边缘大脑接收到了,如果设计得好的话,会给我们一种不仅仅是连接到一台机器的感觉。

当设计元素充满情感时,它们更容易让人记住。我们更容易与它们产生关联,也更有可能回头使用它们。

信任的设计目标是培养情感一致性:体验应该是积极的和难忘的,但也要符合系统的本质。

3.共生

“Man with dog sled is followed by two other dogs pulling another sled in Rovaniemi” by 🔮🌊💜✨ on Unsplash

几千年来,我们设计了其他生命形式来为我们执行任务。从种植作物到家畜到宠物,我们创造了跨越智能光谱的生物来扩展我们的能力。

狗是一个熟悉的例子。当我们繁殖来选择狩猎伙伴或牧羊人时,我们得到的动物可以帮助我们更好地工作,而不需要那么直接的努力。工作犬不仅在食物、住所和延续品种方面从中受益,而且显然从成功完成任务中获得满足和快乐。

人工智能对我们来说是什么?如果作为设计师,我们选择把它想象成另一种生物或有感觉的东西,我们可以把欲望、目标和需求赋予它。人工智能就像澳大利亚牧羊犬一样,被设计来为人们做特定的工作。一个人工智能应该“想要”表现好,并因此得到奖励。那么,一个人工智能如何评估它的表现,它的奖励应该是什么?

主动反馈

被动使用分析是大多数软件的标准部分,通过点击、滚动和 API 调用等交互来告诉我们人们如何使用工具。虽然人工智能系统需要被动反馈,但主动反馈至少同样重要。

主动反馈的原始版本被用在电话树中:当呼叫自动应答服务时(“拨 1 代表英语……”),大多数现在被编程为通过将呼叫者重定向到现场代表来响应按键或叫喊。该程序通过将被归类为“愤怒”的来电者转给一个人来实现其目的,这样整个系统就有更好的机会来实现其回答客户问题的目的。

有效的主动反馈启示的设计是一个迷人的地方;我们知道不应该做什么(不要像微软臭名昭著的 Clippy 一样盲目打断),但定义正确的方法是一项正在进行的工作。和 VUIs 一样,设计师有机会创造一系列方法,以适应多种用户和情况。

主动反馈应该捕捉用户的反应、决策过程和想法,以允许人工智能随着时间的推移而学习和进化。诀窍在于在适当的时候不引人注目地暴露这些机制。我们不想干涉用户的主要任务,我们必须确保反馈请求与上下文相关。此外,一个人给出反馈的倾向通常是不同的,既有一般性的,也取决于一天中的时间、心情或环境。

游戏化和定制化是激励主动反馈的两种方式。游戏化的界面给任务带来了回报和进步感,否则这些任务可能看起来不那么重要。这里的定制指的是为每个人提供不同程度的参与。这可以应用于任务本身(例如,将建议标记为相关或不相关)或应用于系统中的游戏化程度。

适应性设计

By Bjørn Christian Tørrissen [CC BY-SA 3.0 (https://creativecommons.org/licenses/by-sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons

无论是语音界面还是图形界面,都需要具有流动性和适应性。在一个层面上,这意味着呈现与直接焦点或对话相邻的信息,但也高度相关,并且以不干扰用户主要活动的方式呈现。

另一种适应性设计是根据数据结构和用户偏好以正确的方式显示信息(例如,表格数据或地理可视化,或两者都有)。圣杯是捕捉使用系统的人的上下文心理状态的一致感觉,并在正确的时间出现正确的事情,以优化生产力和乐趣。

人工智能解决方案将越来越多地代表用户做出微观决策。在某些情况下,比如回答问题,设计师需要考虑到用户的动力来预测失败。设计者应该考虑“我怎样才能提供额外的交互元素作为响应的一部分,让用户能够对答案进行自我修正?”

自然语言问题可以用自然语言响应和交互式可视化或数据表来自适应地回答。通过这种多渠道反馈方法,我们进入了一个令人兴奋的新领域。

就像机器学习模型可以随着时间的推移而更新和适应一样,设计师可以发展用户角色和旅程地图。这项工作的一部分在产品更新时自然发生,但反馈捕捉的方面指向半自动更新的可能性,或者可能是另一个推荐这种更新的人工智能。

以 Bot 为中心的设计

一个成功设计来捕捉被动和主动反馈的人工智能系统有很好的机会保持相关和有用,即使是在引入新事件和信息的时候。最终,那些被证明有用的人将继续工作,人类将用电和代码来奖励他们。那些没有的将加入数字垃圾。

正如设计师专注于以人为中心的设计一样,对于人工智能,我们需要以机器人为中心的设计来补充它。人工智能“想要”的要么是良好表现的证据,要么是允许我们调整模型以实现更好表现的关键反馈。我们如何才能制造一个系统,根据人工智能的需求,从人类那里最优地寻求和引导反馈?

人工智能依靠我们来修改和教授它们,以保持聪明和相关性。这种修改的直接应用是更新代码,但是这些更新是由主动和被动的人类反馈来调节和定义的。

机器对机器的通信定义明确且简单。人与人之间的交流,虽然并不总是简单或容易,但我们在这方面有丰富的经验,可以做得很好。几十年来,我们在用户界面、聊天机器人和 vui 方面一直在做机器对人类的工作——这并不容易,但我们知道如何研究和预测人们需要什么,并设计支持它的设计。人机是最难的,也是最需要伟大设计的。这对人工智能的成功也至关重要。这是最被忽视的,因为我们没有研究和绘制机器的体验和旅程。

在《欲望的植物学》一书中,迈克尔·波伦提出了一个好问题:在苹果和土豆这样获得巨大成功的植物中,是我们在培育它们,还是它们在培育我们?对人类有用和有吸引力似乎是一个很好的进化赌注。

非常感谢帮助校对、编辑、修改和调整这篇文章的人们:Domingo Huh、Johannes Schleith、Amir Hajian、Mimi Hayton、Corey Ouellette、James Bayliss、Noelle Campbell 和 Graham Sinclair。

管理者需要了解数据科学的哪些内容?

原文:https://towardsdatascience.com/what-do-managers-need-to-know-about-data-science-c6d8b57a708e?source=collection_archive---------7-----------------------

法国出版商 Ellipses 最近与我和我的同事 Farid Makhlouf 联系,为商科学生编写一本数据科学大学教材。因为市场上已经有一些关于数据科学的有价值的介绍性文本,我们决定讨论更具包容性的业务分析主题。未来的管理者需要了解数据、决策科学和机器学习的哪些方面,才能为他们的组织和客户增加价值?

在我们的提案中,在定义了业务分析之后,我们将在后续章节中探讨数据、决策、问题解决和评估的重要性。然后,我们通过对算法、软件包、机器学习和大数据的贡献,将注意力转向信息技术的影响。每章都将通过实际的商业问题以及使用简单编程程序的练习来说明。最后,我们来看看今天愿意在这一领域投资的学生可以获得的个人技能、团队能力和就业机会。

我们认为商业分析是一种看待商业和市场的思维方式,而不是一种专业化。我们认为,希望投资分析的经理需要了解数字经济如何影响组织评估人员、流程和技术的方式。商业分析的最终目标不是引入机器学习,而是改善人们做出决策的方式。

正如我们在别处讨论过的,数据不仅仅是数据。在现代经济中,数据无处不在——我们在过去两年中产生的数据比人类历史上产生的数据还多。数据是第四次工业革命的命脉——互联网技术和商业分析的进步将成为可持续竞争优势的新基础。如果数据本身没有价值,那么业务分析就能创造价值——使用数据解决客户、组织和社会问题。

人类决策是数字经济的核心。这并不是因为我们花越来越多的时间盯着我们的电话和笔记本电脑,人们不存在。将互联网视为一个复杂的人类互动网络是有益的:我们建立网站、应用程序和智能对象来捕捉利益相关者的动机和行动。这些信息以各种形式表现为数据:定量的、定性的、离散的、分类的等等。这有可能被用来改善管理决策。

由于人们看待价值的角度不同,他们看待数据的角度也不同。商业分析试图沿着三个轴理解对价值的看法:决策者如何使用数据来说明他们的挑战和机遇,他们使用什么类型的证据来证明问题,什么形式的数据将用于判断成功?包括锚定、框架和省略在内的认知偏差强烈影响他们如何使用手头的数据。对风险、不确定性和模糊性的认知经常阻碍人类的决策。

数据的价值与其在解决问题中的用途直接相关。探索决策环境可以帮助我们理解我们面临的挑战的性质——我们是在完美信息的确定性环境中工作,还是在有缺失的随机环境中工作?我们可以假设手头的数据包含期望的结果(监督学习)或不包含(非监督学习)吗?你必须处理哪种数据(定性的、定量的、离散的、连续的、名义的、顺序的… …)?我们应该花多少时间去寻找答案,一个好的答案有多好呢?

一个算法是一套在有限步骤中解决问题的规则。这些规则集的名称和形式各不相同,具体取决于它们的应用场合。直觉和逻辑推理是个人用来解决问题的组织系统。在团队和组织中,这些过程通常被称为业务流程,其中的步骤被分解为活动和任务。在机器学习中,算法指的是复制人类思维的编码过程和可执行文件。

数据科学软件平台识别数据中隐藏的模式,并使用这些模式对被研究的人群进行复杂的预测。这些机器学习工具通常避免了编程方面,并提供用户友好的 GUI(图形用户界面),以便具有最少算法知识的管理人员可以使用它们来建立预测模型。这些软件平台允许管理者在产品和服务、业务流程和周围的基础设施中定义、优化和嵌入分析。

大数据是一个术语,指的是那些庞大或复杂到传统软件无法处理的数据集。大数据分析是收集、组织和分析这些大型数据集以发现模式和其他有用信息的过程。大数据既不是一门可以在课堂上学习的学科,也不是一门可以在课堂上学习的语言,它是在特定业务环境中开发的编程知识、分析技能和实践的结合。随着管理决策变得更加复杂和昂贵,大数据的圣杯已经成为更好、更快的决策。

我们将在指出商业分析领域当前的咨询和就业机会中结束我们的工作。我们认为,这些职位远远超出了“数据科学家”的头衔,延伸到了商业、工业和公共服务领域的战略和运营管理核心。我们将试图证明,专业人员不是单独工作,而是在一个团队和一个实践社区中工作,这些团队和社区汇集了互补的技能、知识和经验。我们要强调的是,这本书并不是这一主题的权威文本,而是提醒我们,分析思维是管理者每天需要带到工作中的一个工具。

你会在教材中包括哪些主题、案例和练习?商科学生在今天和可预见的未来需要了解哪些关于数据、决策科学和机器学习的知识?


Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com T4 商业分析研究所的负责人。他的 LinkedIn 个人资料可以在www.linkedin.com/in/leeschlenker.查看,你可以在https://twitter.com/DSign4Analytics的 Twitter 上关注我们

成功人士都聊些什么?

原文:https://towardsdatascience.com/what-do-successful-people-talk-about-a-machine-learning-analysis-of-the-tim-ferris-show-161fc7ed4394?source=collection_archive---------16-----------------------

蒂姆·费里斯秀的机器学习分析

首先,我是蒂姆·费里斯和他作品的超级粉丝。他的几本书改变了我的生活。他还因他非常受欢迎的播客而闻名——我总是在手机上下载至少几集。因此,当他决定上传《T2》所有剧集的文字记录时,我很兴奋,这一点也不奇怪。作为一名数据科学家(尤其是专门研究 NLP 的),我知道我能做些什么。我的分析是这样的。

**如果你想跳到结果并自己探索,请导航到互动网站:https://boyanangelov.com/materials/lda_vis.html

首先我必须从他的网站上搜集数据。幸运的是,这很容易,因为 HTML 的结构非常好。我下载并解析了 200 集的数据。为此,我使用了一些非常酷的 Python 开源库。

任何 web 抓取项目的第一步都是调查网站的 HTML 结构。所有的现代浏览器都包含了可以帮助你的开发工具,在我的例子中,我使用的是 Chrome:

Using the Chrome developer tools to inspect the URLs

接下来的步骤是使用几个典型的抓取和 NLP(自然语言处理)库。其中包括 BeautifulSoup 和 NLTK 。

最有趣的结果是 LDA 主题模型的可视化。LDA 代表潜在狄利克雷分配,是一种在文本数据中发现模式(主题)的常用技术。漂亮的包 PyLDAvis 允许交互式可视化,你可以看到下面的截图:

在这里,您可以看到 Tim 和他的客人正在谈论的不同主题的几个分组。大多数话题都与商业有关,但也有一些例外,最显著的是营养运动

你可以尝试做一些我没有时间做的事情。例如,看看播客中提到的最常见的名字是什么,或者每集之间不同的词汇复杂性,这将是很有趣的。

希望这个简短的分析是有趣的,并在你自己的 web 抓取项目中随意借用这些方法。让我知道你发现了什么!

Github 的一个要点是重现分析的代码:

金丝雀在苏格兰看到了什么?

原文:https://towardsdatascience.com/what-does-a-canary-see-in-scotland-1c6597d092b9?source=collection_archive---------1-----------------------

…其中一位卡纳里亚流行病学家在苏格兰登陆,将它与尼泊尔进行比较,最后开始 数据…

很奇怪,几十年前,我成为了加那利群岛 Linux 用户组的一员,并选择了“Shrek 0a”(“Shrek cero a”)作为我的用户名。我不知道史莱克是苏格兰人,因为他的口音不能翻译成西班牙语。当然,我无法想象我最终会生活在这个“很远很远”的地方(“我们到了吗?”)。

苏格兰人口超过 530 万,面积超过 77933 平方公里。这给了我们 67.5/公里的人口密度,比加那利群岛(284.46/公里)小 4 倍。但这只是平均水平,因为还有格拉斯哥(3298.0 英镑/公里),你知道你在哪里。还有因弗内斯(25.1/Km),你以为你在哪里。还有(苏格兰)高地 (9/km,你所在的地方……很远很远)。

将这些密度与伦敦 (5,518/公里)东京 (6,224.66/平方公里)纽约 (10,831.1/公里)…或西伯利亚(3/公里)尼泊尔(180/公里)…

我提到尼泊尔是因为一周前我遇到了来自尼泊尔两姐妹,而就在昨天我偶然发现了 EdgeRyders 的 Matt(小 PDF) 的一个有趣的项目 ,关于一种跨越深谷运送货物的方法。我想知道如果风允许的话,它是否可以在苏格兰的一些地区使用?这些风能很好地为电池提供能量?也许还有其他的适应措施,比如漂浮的工具,以防设备掉进湖里?

注意:要习惯“数据”与“关于基础设施的探索性想法”混合在一起。这两件事同时占据了我的头脑。事实和可能性。是什么,又能是什么。如果你恰好喜欢德博诺的帽子,你可以称之为“白帽”和“绿帽”。

总之…我终于开始研究苏格兰的一些公开数据。这个非常详细的 PDF 和这个很好的解释文本需要这个更简单的页面来帮助理解它(32 理事会区域,1000+中间区域,6000+数据区域):

http://statistics.gov.scot/areas

这个查找页面可能会派上用场。我发现我可以用。带熊猫的 CSV 文件,但是还是不知道怎么处理 n-triples (虽然我找过)。我找到了边界文件,还有一个QGIS苏格兰用户组。

所以…这是我的第一个结果!这只是为了表明我已经使用了每个 2011 年数据区的人口,它们的面积(边界文件提供了方便。DBF 文件与“中间地带”,与代码,名称,人口和面积),以获得密度,然后显示它使用 QGIS。印象不深,但我要走了。

Colour is quintiles: most of the territory is in the lowest.

这告诉我们什么?苏格兰大部分地区都有人口密度< 155/km². Not strange considering that the average is 67.5/km², but still, it’s both “huge” and “mostly empty”.

Next Friday, I’ll go deeper and tell you what my 工具箱开始看起来像…

数据科学家到底长什么样?

原文:https://towardsdatascience.com/what-does-a-data-scientist-really-look-like-eab503edb1bb?source=collection_archive---------11-----------------------

The cast of HBO’s Silicon Valley (Source:HBO)

基于 Stack Overflow 2018 年度发展调查数据的分析。

介绍

六年前,哈佛商业评论将数据科学家评为“21 世纪最性感的工作”,从那时起,数据科学家成为美国发展最快的职业之一,毕业生的起薪达到六位数,雇主的需求继续超过供应。

但是,这些人是谁,幸运地获得了 Glassdoor 所描述的“美国最好的工作”?成为他们中的一员需要什么?成为一名数据科学家真的像宣传的那样好吗?

为了探讨这些问题,我使用了 Stack Overflow 收集的数据来回应他们的 2018 年度开发者调查。该数据集包含来自全球 183 个国家和地区的软件开发人员的近 100,000 份回复。

在受访者中,7,088 人(7.7%)自认为是数据科学家。这些受访者与数据所代表的其余 85,010 名非数据科学家软件开发人员进行了比较。

第 1 部分:“典型的”数据科学家是什么样的?

计算机科学和软件开发在历史上被描绘成书呆子男性程序员的领域。看看 HBO 的硅谷的演员阵容就明白我的意思了。

但随着最近围绕数据科学的大肆宣传,我希望这种情况可能会有所改变。从事“21 世纪最性感的工作”的前景是否足以吸引更多人口多样化的人从事计算和技术工作?不幸的是,答案似乎是

Figure 1: Comparison of gender (left) and age (right) distributions for data scientists (DS) vs non-data scientists (Non_DS).

从图 1 中可以看出,数据科学家和非数据科学家受访者的年龄和性别分布几乎相同。数据科学家和非数据科学家的平均年龄都是 30.5 岁,91%的数据科学家是男性,而非数据科学家是 92%。

这表明,数据科学工作的增长并没有吸引个人从新的人口统计学转向计算和技术,而是仅仅为那些无论如何都有可能成为开发人员的人创造了一条新的职业道路。

然而,比较数据科学家和非数据科学家的教育背景确实揭示了这两个群体之间的一个关键差异。

Figure 2: Comparison of highest degree level distributions for data scientists (DS) vs non-data scientists (Non_DS).

图 2 显示,尽管与普遍看法相反,没有硕士或博士学位也有可能成为数据科学家,但数据科学家比非数据科学家更有可能拥有更高的学位,45%的数据科学家受访者拥有硕士或博士学位,而非数据科学家只有 23%。

这表明数据科学和非数据科学开发人员角色所需的技能存在差异,数据科学角色更可能需要作为高级学位课程一部分教授的技能。

第 2 部分:数据科学家和非数据科学家的编码技能有什么不同?

鉴于雇主对数据科学家角色的学术要求更高,这就提出了一个问题:与非数据科学家相比,雇主是否也要求数据科学家拥有更丰富的编码经验?

然而,图 3 显示,事实上情况正好相反。

Figure 3: Comparison of the distribution of professional coding experience for data scientists (DS) vs non-data scientists (Non_DS).

数据科学家通常比非数据科学家开发人员拥有更少的专业编码经验,62%的数据科学家受访者拥有五年或更少的专业编码经验,而非数据科学家只有 57%。

这表明,在开发人员的角色中,不是在各个方面对数据科学家提出更多要求,而是在编码技能和大学教授的各种技术技能之间存在权衡。

然而,并非所有的编程语言都是同等创造的,数据科学家和非数据科学家在日常工作中使用的编程语言也不一定相同。

数据科学家更有可能使用为统计建模和分析而设计的语言或带有统计建模和分析库的语言,如 Python 或 R,而非数据科学家更有可能使用与 web 开发活动相关的语言进行编程,如 HTML、CSS 和 JavaScript。例如,77%的数据科学家报告在过去的一年中使用 Python 编程,相比之下,35%的非数据科学家使用 Python 编程,而 72%的非数据科学家报告在过去的一年中使用 JavaScript 编程,相比之下,55%的数据科学家使用 JavaScript 编程。

这反映了数据科学家和非数据科学家通常执行的任务类型的差异,前者通常专注于使用统计和建模技术从数据中获得洞察力,后者更可能参与软件工程或 web 开发类型的活动。

第三部分:数据科学家比非数据科学家对职业更满意吗?

如果数据科学家真的是目前最好的工作,那么我们会期望数据科学家比非数据科学家对他们的工作和职业更满意。这正是我们从数据中观察到的。

然而,尽管数据科学家确实比非数据科学家更倾向于对自己的工作和职业感到满意,但这两个群体都倾向于对自己的工作/职业感到高度满意。

图 4 显示,73%的数据科学家和 70%的非数据科学家对自己的工作至少略有满意,而 74%的数据科学家和 73%的非数据科学家对自己的职业至少略有满意。

Figure 4: Comparison of the job satisfaction (left) and career satisfaction (right) distributions for data scientists (DS) vs non-data scientists (Non_DS).

因此,即使数据科学的职业不适合你,任何与发展相关的角色都可能导致类似于“美国最好工作”的工作和职业满意度水平。

结论

在本文中,我们探讨了获得一份数据科学家的工作需要什么,以及这与获得非数据科学家开发人员角色有何不同,并根据 2018 年 Stack Overflow 年度开发人员调查的数据,比较了这两个群体中人们的工作和职业满意度。

由此,我们发现:

1。虽然数据科学家和非数据科学家往往来自相似的人口背景(即主要是年轻男性),但数据科学家比非数据科学家更有可能拥有更高的学位,但往往缺乏专业的编码经验。

2。与非数据科学家相比,数据科学家更有可能使用侧重于统计和建模的编程语言,如 Python 和 R,而非数据科学家则倾向于使用侧重于 web 开发的语言,如 HTML、CSS 和 JavaScript。

3。尽管数据科学家比非数据科学家享有更高的工作和职业满意度,但这两个群体都倾向于对自己的工作和职业高度满意。

综上所述,典型的数据科学家似乎是典型的书呆子男性程序员:30 岁出头的男性,拥有高级学位,并有一些用 Python 或 r 等语言编程的专业经验。

然而,仅仅因为这是一个“典型的”数据科学家现在的样子,并不意味着这是一个人未来的样子。事实上,为了全球经济,这种形象需要改变。

如前所述,数据科学是一个快速增长的职业,需求一直超过供应,预计未来许多年都将如此。

满足这一需求的最佳方式是,雇主想方设法吸引传统上在计算机科学和技术领域代表性不足的人群加入这一行业。

因此,如果你不认为自己符合“典型”数据科学家的标准,那么我的建议是:不要气馁

在数据科学职业中,各种背景的人都有很大的发展空间,根据数据科学家对工作和职业的满意度,努力培养获得数据科学职位所需的技能是非常值得的。

毕竟,谁不想从事“21 世纪最性感的工作”呢?

要了解关于这个分析的更多信息,请访问这个项目的 GitHub 资源库,这里有。

Genevieve Hayes 博士是数据科学家、教育家和人工智能及分析专家,拥有Genevieve Hayes Consulting。你可以在LinkedIn或者Twitter上关注她。她还是 价值驱动数据科学 的主持人,这是一个每月两次的播客,面向希望最大化其数据和数据团队价值的企业。

想要发掘企业数据的价值,但不知道从哪里开始?**下载免费的数据科学项目发现指南。

数据团队真正做的是什么?

原文:https://towardsdatascience.com/what-does-a-data-team-really-do-12484482e683?source=collection_archive---------0-----------------------

充分利用数据的指南。

那些玩“大数据”、复杂数学、酷酷的代码和花哨的可视化工具来取乐的数据人是谁?

嗯,很可能……:)可能我们在工作的时候确实很开心,但更重要的是,我们沉迷于改善事物,解决值得解决的难题,并产生真正的影响。

在本文中,我将:

  • 解释我们的数据团队做什么
  • 展示其原因和方式
  • 展示创造高效数据驱动环境的机会

It 是以清单的形式整理出来供参考。如果您正在进行分析工作或考虑您的组织如何才能最好地从数据中受益,那么您可能会发现以下几点特别有用。

  1. 目的 —我们工作的目的是什么?
  2. 第一原则——什么最重要?
  3. 影响 —影响对我们意味着什么?
  4. 数据驱动框架 —如何系统化和扩展这种影响?
  5. 分析工具集 —我们可以通过哪些方式传递价值?
  6. 利用 —如何充分利用分析?
  7. 责任 —我们应该做些什么来让整个组织变得更好?
  8. 回顾——我们怎样才能确保自己尽了最大努力?
  9. 愿景——我们要去哪里,下一步是什么?

目的

高层次的分析(为了简化本文,我将所有与数据相关的工作,如商业智能、产品分析、数据科学、数据工程等放在一个大的“分析”桶中)是一个强大的工具集,它使我们能够改进业务的任何方面。

GOGOVAN 的使命是“随简单而动”。我们的数据团队在这里确保无论何时您需要将某物从 A 点移动到 B 点,您都能获得最佳体验。

我们可以通过帮助团队成员和整个组织的系统做出决策并采取行动使我们变得更好来做到这一点。在 GOGOVAN,我们的数据团队在所有领域开展工作,包括运营、财务、营销、产品、客户服务、工程和战略,通常与这些职能团队密切合作,帮助他们有所作为。

我们的目的是通过促进整个组织做出更明智的决策来产生真正的影响。

基本原理

根据柯林斯英语词典,首要原则是指“理论、系统或方法所基于的基本概念或假设。”

当我们与我们的团队合作时,它有助于理解从我们的业务角度来看什么是潜在的价值,以及我们想要完成什么。

就我们公司而言,我们专注于按需物流的核心要素,以便我们能够为我们的客户、合作伙伴和业务利益相关方提供最佳结果。

这真的很简单:

  • 顾客希望他们的商品能够快速、便宜、可靠地送达。
  • 司机们想通过高效地完成工作来赚钱。
  • 企业希望扩大并留住客户群,增加收入并降低成本。

举个例子,让我们把我们提供给客户的服务进行分解。对我们的客户来说,重要的是:

  • 价格
  • 质量
  • 时间

价格很简单,越便宜越好。质量与如何提供服务有关,尤其是我们合作伙伴的可靠性、对我们处理商品方式的信任、沟通、支持以及我们产品的 UX。时间可以分解为响应时间、到达时间和交付时间。

因此,如果我们能够改善其中的任何一个方面,就意味着我们的服务变得更好,这应该会让客户更满意,从而促进业务增长。

对我们来说,第一原则思维意味着关注那些至关重要的事情。

影响

分析就是要对业务产生影响。当我们确定什么是重要的时,关键问题是我们如何影响它。我们可以通过许多方式对业务产生影响,但让我根据我们运营中的一个例子来解释一下。

我们平台的核心竞争力之一是将订单与司机匹配起来。

Example activity — drivers-orders matching

为了改善我们对客户的服务,我们的工作应该集中于发展能力,使我们能够系统地改善所有的组成部分,如价格、质量和时间。

那么,我们如何更好地利用“驱动因素-订单匹配”活动的这个例子呢?

下面是我们很久以前使用我们构建的交互式数据探索工具在新加坡运营中发现的一个例子。您可以看到,在这种特殊情况下,订单可以由在那个时刻有空且更接近订单的司机接受。

Example of order assignment (visualized by interactive data tool).

  • 通过匹配离取货地点更近的司机,到达和交付时间将更快,司机的成本将更低,司机时间的利用率将更高,因此,他将能够完成更多订单并赚得更多。
  • 通过整合订单和设计最佳路线,我们可以为客户提供更好的价格,同时为指定司机提供更高的总价值。
  • 通过为特定订单推荐 a)最适合该特定订单,b)最有可能接受该订单,c)并成功完成该订单(对完成该类订单的评分较高)的司机,我们还可以确保提供最优质的服务。

那时,除了构建可以滚动时间和监控操作的交互式工具之外,我们还进行了深度分析,并创建了突出异常值的脚本。我们继续致力于各种自动化数据驱动的方法,以不断改善我们的运营。

当然,这只是数据驱动方法可以发挥作用的一个活动。我们工作中的其他一些例子包括:

  • 通过设计激励措施和政策来平衡供求关系
  • 客户细分和优化营销活动的绩效
  • 预测和吸引流失用户
  • 跟踪和改进产品的性能
  • 检测欺诈和异常

还有更多…

产生影响我们核心竞争力的影响是三赢——客户赢、司机赢、业务赢,数据团队乐于产生真正的影响。😃

数据驱动框架

Distribution of demand in Hong Kong

有时候,说“让我们买个算法或者雇个聪明的顾问来解决 x 问题”可能很有诱惑力。虽然在数据科学环境中可能有这样的地方和时间,但我确实看到了一个大问题。

我们的生态系统不是一成不变的,在系统反馈循环中提炼解决方案和进行学习的迭代过程有很大的价值。这导致了积累的知识,在我的经验中,这些知识非常有价值,并加速了获得“模式识别”的魔力。

GOGOVAN 经济是一个动态复杂的生态系统。在一些底层服务组件之间可能存在权衡。另外,今天行之有效的东西很容易在明天(甚至是同一天)改变,在一个市场行之有效的东西在另一个市场可能表现不佳。

因此,不一定要有一个完美的公式或实现任何特定的方法来解决它。但更重要的是,它是关于拥有一个框架,在这个框架中,我们可以管理所有的参数,从而持续、渐进和系统地改善我们为客户和合作伙伴提供的服务。

该框架应该允许立即:

  • 班长
  • 设计
  • 部署
  • 调整
  • 评价

所有对我们努力优化的事情有贡献的关键流程。

当面临任何业务或技术决策时,类似的标准可能是有价值的。每当我们做出一个关键决策时,我们可以问自己:“这如何有助于我们提高为客户和合作伙伴提供服务的能力?”

数据驱动框架旨在创造一种环境,在这种环境中,我们可以系统地控制并持续改进我们的成果。

分析工具集

与一些数据科学课程可能让我们相信的不同,事实是,作为一名数据科学家,除了开发尖端的深度学习模型,还有更多方法可以产生影响。😃

根据我的经验,当数据科学家专注于手头的问题,并选择最务实的方式来有效地解决问题时,他们会取得最好的结果。快速迭代、学习和改进解决方案会带来很多价值和满足感。

此外,作为更广泛组织的一部分,我们需要务实。构建控制调度所有方面的通用生产算法可能是最终的解决方案,但是它需要比数据团队更多的输入和资源。

那么,作为一名数据科学家,我们能为企业做出哪些贡献呢?

Matrix showing tools available to the data scientist. To play with the interactive version and see descriptions you can use this link and hover on points.

上述可视化的目的只是为了展示数据科学家的库存中有不同的“工具”来产生影响。通常,当我们说工具时,我们指的是语言、库、可视化和查询技术,在这里,我只是根据数据科学家可以交付的工作成果或他们可以执行的活动来介绍它。

有时候,考虑我们能够产生影响的最务实的方式可能是有益的,这就是为什么我使用这两个轴来形象化它——直接影响和独立贡献。

直接影响 —产出或活动对业务的直接影响程度。例如,拥有一个自动分配驱动程序的算法比为运营团队提供匹配驱动程序的报告具有更直接的影响。

独立贡献 —这仅仅意味着我们可以在多大程度上在数据团队中独立完成,而不必依赖其他基础设施、资源或影响产品路线图。

其他要考虑的事情还可能是每个工作产出的复杂性、时间和可伸缩性。

这并不是“科学的”,只是为了说明,在每个组织和数据团队中,根据各自的战略、基础架构、技能组合或某个时间点和公司增长,感觉会有所不同。

在我们的案例中,我们的工作包括所有工具的组合,这取决于任务是什么,它需要多精确,可用时间以及谁和如何使用它。在 GOGOVAN,我们创建了一个主数据平台,为“一切数据”提供一站式服务。它允许您搜索、导航、标记、协作和贡献成千上万的图表、报告、交互式工具、笔记本、查询、仪表板、算法和其他资源。

data platform — navigation

data platform — search

我们的数据平台可以很容易成为博客文章本身的主题,如果你对更多细节感兴趣,请让我知道。

分析工具集提供了许多产生影响的方法,因此选择最合适的方法并实际应用它们。

利用

有人可能会问“嘿,数据团队做了这么多工作,但是我们能在公司中多好地利用所有这些数据和工作呢?”。答案是视情况而定。这是一项团队工作,我们不会孤立工作,可能影响数据团队工作的因素有:

  • 产品和系统集成和迭代数据驱动特性的能力
  • 组织中的数据文化
  • 职能团队经理的风格和经验
  • 跨团队沟通和协作
  • 本组织的战略决策
  • 操作流程和程序

例如,公司拥有的用户越多,即使是很小的变化也会影响到越多的人,因此优化的潜力就越大。数据越多的公司面临的挑战和机遇就越大。最后,企业的类型将决定技术在其核心竞争力方面能发挥多大的作用。组织对使用数据的态度越开放和支持,人们就越有能力根据数据做出决策和采取行动。

因此,您的目标可能是扩展这三个领域(数据价值、数据文化和数据输出),使它们变得尽可能大和尽可能重叠,并且您能够通过让人们接受良好的数据教育并以良好的态度使用数据来产生足以解决关键问题的数据输出并很好地利用它。

就我们个人而言,我相信数据的潜力和价值是巨大的。物流非常适合优化,具有大规模和快速的增长,作为技术初创公司,这意味着我们正在收集关于我们服务的大量数据,包括应用遥测数据、GPS 位置、交易数据、营销信息、客户服务数据、远程信息处理信息等…

分析的利用是指在公司用正确的数据文化创造正确的数据输出,以服务于正确的数据价值。

责任

我相信数据团队处于一个独特的位置,可以对组织的每个部分产生影响。我们非常幸运能够每天与数据密切合作,因此我们经常能够在问题和机会出现在其他团队面前之前发现它们,这是有意义的。这就是为什么我们积极主动、清晰沟通、与整个公司的人密切合作并认真对待我们的责任是如此重要。

数据团队的主要角色是:

  • 提供信息和决策支持
  • 发现见解和分享知识
  • 跟踪公司产品的性能和进展
  • 如果出现问题,会发出信号并发出警告
  • 促进全球跨团队协作和分享最佳实践
  • 让数据民主化,让人们能够使用数据
  • 促进数据驱动的决策
  • 优化公司服务和业务活动
  • 通过创新和开发知识产权提供竞争优势
  • 贡献可能革新服务或产生新商业模式的解决方案

我们有责任教育员工,分享我们在整个组织中发现的知识和见解。信息不受限制地流向正确的人和系统是非常重要的,这样我们就可以改进我们的服务并尽快解决任何问题。在 GOGOVAN,我们定期举行开放式分析会议,创始人、管理层和任何感兴趣的人都可以参加,学习和讨论我们正在进行的最新项目和见解。

巨大的数据带来巨大的责任。

回顾

定期回顾我们正在做的工作是很有用的,特别是看看我们是否得到了我们期望的结果,以及我们正在产生什么影响。我们可以从中学习,并利用它来计划下一步的行动。

对思考影响有用的问题:

  • 这项工作的预期成果是什么?
  • 我想解决什么问题?
  • 我想回答什么问题,为什么?
  • 我如何知道我所做的对公司有贡献?
  • 我今天能做些什么来让公司或我们的服务变得更好?
  • 来自埃隆马斯克:什么是效用增量?
  • 蒂姆·费里斯:我现在能做些什么来让其他事情变得简单或不相关?
  • 今天我能做些什么来赢得这一天呢?

除此之外,我们还不断尝试检查我们的工作方式、最佳实践和技术:

在军队中有一种叫做 AAR 的东西(行动审查后)。我们做的一件事是在我们的分析会议后,我们有一个快速的回顾会议。我们每个人都输入时差,然后讨论三个问题:

  1. 怎么样了?
  2. 什么进展顺利?
  3. 我们能改进什么?

这是一个非常开放和支持性的环境,每个人都可以发表评论并提出改进建议。然后,我们确保在下一部作品中纳入这些评论。我们有最佳实践笔记本,其中包括代码片段、解释、可视化等,根据我们的经验,这些都很有效。

"我们决不能忙得抽不出时间来磨利锯子."斯蒂芬·柯维

我们试图以优化数据科学家的工作效率和体验的方式来设计我们的工作环境。我们做的一些事情包括:

  • 在设计我们的分析基础架构和模式时,要考虑简单性、灵活性和性能
  • 使用领先的工具和库(是的,我们喜欢 Python、Pandas、Spark 等。并拥抱开源)
  • 拥有可提高再现性和协作性的笔记本模板
  • 为常见的功能和活动创建实用程序(例如直接从 Jupyter 向我们的数据平台自动发布和标记 HTML 笔记本)
  • 使用文档化的环境,以便新的数据科学家可以进来,运行几个命令,一切准备就绪,开始在几分钟内提供价值…

回顾你工作的影响,问正确的问题,思考预期的结果,并回顾结果。

视力

简单地说,愿景就是描绘一幅美好未来的图画。在未来,我看到一个令人敬畏的数据团队为公司的成功做出巨大贡献。

尽管我们在 GOGOVAN 的所有领域都做了大量的工作,但在我看来,这只是一个热身,我们仍然有很多机会和方法来改善未来。

我们创造强大而全面的数据能力,帮助公司实现其目标(在我们的情况下,增长,为我们的用户提供最佳服务,并发展竞争优势)。我们渴望在这方面成为世界上最好的。

对我们来说,非常令人兴奋和充满希望的下一步是扩展我们在系统中自动和直接做出智能决策的能力。要做到这一点,我们必须投资于领先的基础设施和应用人工智能/人工智能能力,使我们的服务更好。

我们的愿景是创造一流的数据驱动能力,推动公司不断前进。

本文原载于 GOGOVAN 科技博客

1/2 的概率意味着什么?—概率的频率主义方法

原文:https://towardsdatascience.com/what-does-a-probability-of-1-2-even-mean-a-frequentist-approach-towards-probability-60893ba59ecd?source=collection_archive---------10-----------------------

我的一个朋友每当面临困难的决定时就扔硬币。有用吗?我不知道,但他认为是的。从统计学上来说,不应该。一枚硬币有两面,我们大多数人都意识到任何一面出现的几率都是 50%。将此转换为概率(这简单地意味着我们想要给我们的机会分配一个数字),我们可以说在一次硬币投掷中获得正面的概率正好是 0.5——假设没有人篡改我们的硬币。然而,这些 0.5%或 50%的数值(它们代表同样的东西)实际上意味着什么呢?这是否意味着每掷两次硬币,我们一定会得到一个正面和一个反面?这不可能是真的;我们凭经验直观地知道这一点。

然而,当涉及到这样的问题时,我们的直觉不一定是非常可靠的来源。我们的直觉经常让我们得出令任何数学教授都感到恐惧的结论。现在,在你给这种说法贴上完全垃圾的标签,用无数次你的直觉能够提供与亚里士多德相媲美的洞察力的机会来轰炸我之前,让我给你一个简单的例子。

假设一个假想的场景,你所要做的就是扔一枚硬币,然后把它叫出来——我知道这没什么令人兴奋的,但请继续关注我。因为你知道要么正面要么反面出现的概率正好是一半,所以——只是因为你喜欢——假设你称之为正面;但是,最后都是尾巴。酷毙了。你再扔一次,坚持你的叫牌(正面),结果又是反面。令人沮丧。在给它第三次投掷之前,你考虑你的下一个电话。你的直觉告诉你,由于前两次投掷都是反面,这一次很可能是正面。有道理,但是直觉几乎总是有道理的,不一定代表就是正确的。有道理和正确是两回事;不幸的是,这次我们的直觉是错误的。

它让我们相信获得正面的概率实际上增加了,即不再是 0.5;事实上,还不止这些。你想想,这可能是真的吗?这不可能。它仍然是同一个硬币,因此,没有理由改变概率。

在概率的世界里,直觉需要退居二线。

然而,现在让我们回到我们最初提出的问题。一半的概率到底是什么意思?如果这并不意味着每次我们掷两次硬币都会得到一个正面,那么为什么它会被指定为数字半(1/2)。为了回答这个问题,我们可以采取两种方法:频率主义方法,或者公理化方法。虽然公理化方法在数学上更优雅,但我们将重点关注频率主义方法,并将公理化方法留待以后讨论。

这两种方法都为我们提供了一种不同的方法来为一个特定的事件分配一个概率值(在我们的例子中:获得人头的概率)。频率主义者的方法要求我们做以下事情:重复实验若干次,然后简单地用你得到你想要的结果的次数除以你进行实验的次数。听起来很棘手?它不是。比方说,你掷一枚硬币 20 次,结果是 12 次正面朝上。因此,我们需要做的就是用 12 除以 20,得到 0.6。但是,这是否意味着获得人头的概率是 0.6 呢?不幸的是,它不是那样工作的。

如果你可能已经注意到,我们定义方法的方式相当模糊。要求某人“多次”重复一个实验不是一个好主意;根据他们如何定义“一些”,他们可能会重复实验二十次、两百次,或者如果他们很匆忙的话,可能只重复两次。你问我们需要重复多少次;确实是一个非常好的问题。简单的答案是:尽可能多的次数。

比方说,你只扔两次硬币。两次都是反面。使用我们的公式,正面的概率是 0/2,也就是 0!

现在来折腾两百次吧。假设 200 次中有 115 次正面朝上,我们可以看到正面朝上的概率可以写成 115/200,即 0.575。我们现在越来越接近了。

如果我们折腾两千次,得到人头的概率会不会更接近 0.5?频率主义者的方法声称它会。事实上,这正是 frequentist 方法的基础:你重复实验的次数越多,你就越接近获得真实的概率值。不过,有一个问题:为了得到真实的概率,你必须进行无数次的实验。但是,不要让这个太困扰你。当我们做了大量的实验后,我们得到正面的概率值可能会看起来像这样:0.5006;实际上,这可以四舍五入到 0.5。

有人实际尝试过这种方法吗?令人惊讶的是,答案是肯定的。列纳德·蒙洛迪诺在其引人入胜的作品《酒鬼之行》中提到了一位南非数学家,他在 20 世纪 40 年代实际上进行了一万次硬币投掷。约翰·克里奇当时是一名德国战俘,因此有充足的时间可以支配。他开始掷一枚公平的硬币,并记录下他的结果。当他投掷了 100 次后,他的正面概率大约是 0.44 (44/100)。然而,当他完成(一万次投掷)时,它已经上升到大约 0.5067 (5067/10000),非常接近实际值 0.5!

我们能重复 Kerrich 的实验吗?我们当然可以。但是我们实际上并不需要一枚硬币来重复实验。我们可以简单地让计算机为我们模拟实验。电脑最棒的一点是,它们做这个不会累,而且速度极快。下面是我用一种叫做 python 的语言写的一个计算机程序。你不必担心编程部分,那不是我们目前最关心的。

Figure 2: A function which simulates coin tosses, and then uses the frequentist approach in order to calculates the probability of getting a head

我所做的是,我写了一个函数,在这个函数中,我创建了一个虚拟硬币。你只需要提供你想折腾的次数就行了。然后,这个函数将模拟投掷次数——每次投掷随机出现正面或反面。该函数将计算人头出现的次数,然后简单地除以投掷的总次数,以计算出人头出现的概率。

Figure 3: Results of tossing 10 coins, 100 coins, and 1000 coins

我首先试着掷硬币十次,结果得到的概率是 0.4 (4/10)。然后我试着扔了一百次,最后得到的概率是 0.48 (48/100)。我最后试着扔了一千次,果然,最后得到的概率是 0.507 (507/1000),这看起来非常像 0.5 的真实概率。

因此,当我们说获得正面的概率是 1/2 时,它实际上意味着——根据频率主义者的方法——随着你不断投掷硬币(次数越多越好),你获得正面的次数与投掷总数的比率将接近 1/2。注意,直觉。

虽然我们可以继续用我们的虚拟硬币投掷器做越来越多的投掷,但我不想让你无聊死;希望到现在为止,你已经相信频率主义者的方法实际上是有效的——最好的部分是,我们做到了,没有累着我们的手。

AI RFP 需要包含什么?

原文:https://towardsdatascience.com/what-does-an-ai-rfp-need-to-contain-13c747b316ed?source=collection_archive---------16-----------------------

AI RFP

我们正在启动一系列针对合作伙伴的帖子,帮助他们将人工智能技术商业化。在本帖中,我们涵盖了合作伙伴在销售和实施层面最重要的一点:AI RFP 需要包含什么?

对于那些不熟悉这个术语的人来说,RFP 意味着“提案请求”。在人工智能销售过程中,电子大脑使用 RFP 来快速评估项目。一个良好构建的 RFP 确保电子大脑团队能够提供快速周转,因此您可以为您的客户提供快速服务。为了能够对人工智能项目的价格和时间表进行报价,我们需要回答的问题真的很少。

人工智能技术试图解决的商业问题是什么?

你必须清楚地告诉我们人工智能试图解决的高层次问题。尽可能地将这一点与人工智能解决方案如何影响业务底线联系起来。是为了吸引更多顾客的华而不实的技术吗?或者,我们是在尝试自动化现有流程并降低成本吗?以下是一些我们需要回答的潜在问题:

  • 正在解决的业务问题是什么?
  • 人工智能解决方案有望带来多少额外收入?
  • 人工智能解决方案有望节省多少成本?
  • 正在处理什么类型的数据?视频?图像?文字?约会吗?数字?时序数据?

我们从哪里获得人工智能的数据?

需要回答的一个最重要的问题是,客户是否有合适的数据来创建解决方案。所有人工智能解决方案都需要数据才能工作。然而,最具创新性的解决方案并不是利用你手头的数据构建的。它们经常需要一段时间来手动收集数据集。有时这是一个先有鸡还是先有蛋的问题。如果人工智能不工作,我们怎么发射?我们需要发射来获取数据。我们需要数据来让人工智能工作。

当和你的客户讨论这个项目时,试着想一些巧妙的方法来解决这个问题。通常,人工智能系统会让人类参与进来,以便“训练”人工智能。如果系统不知道如何处理一个特定的输入,它可以把这个输入路由给一个“人”,让这个人来处理。然后,这些人可以服务于第二个目的,即监控人工智能,并确保它在适当的质量水平上工作。

通常,客户会问你需要多少数据才能让系统工作。这是一个很难肯定回答的问题。然而,必要时,请遵循以下经验法则:对于您认为需要理解的数据中存在的每个潜在“模式”,您将需要 1000 个条目。例如,假设您正在创建一个系统,它可以根据照片预测汽车的品牌、型号和年份。这里的经验法则要求你有 1000 张每种品牌、型号和年份的汽车的图片。然而,假设你只是试图预测品牌。这是一个比较简单的问题,你可能只需要很少的图片就可以了。

  • 客户已经有数据了吗?
  • 他们已经获得了多少数据?
  • 数据需要以某种方式手动“增强”吗?
  • 数据缺少 AI 解决方案需要的东西吗?
  • 数据有多“嘈杂”?
  • 我们能在没有数据集的情况下推出产品,并在开发过程中收集数据吗?

对解决方案的质量/准确度有什么要求?

取决于人工智能系统正在做什么,对它的质量可能会有不同的期望。例如,在语音识别解决方案中,我们期望 100%的准确率——我们希望系统能够识别我们说的每一个单词。然而,在一个做中频股票交易的系统中,如果系统有 75%的准确率,只要比随机概率好得多,我们就可以满足了。对质量的要求会变得更加复杂。假设你有一个能找到恐怖分子的系统。100 万人中可能只有 50 人是恐怖分子。一个 99%准确的系统意味着它能正确识别 49 名恐怖分子,但另外 10,000 名完全普通的人会被错误地宣布为恐怖分子。这里,你需要区分假阳性和假阴性率。

  • 系统的质量应该达到什么水平?
  • 有什么方法可以衡量质量的高低?还是纯粹主观?
  • 系统需要以这样或那样的方式“偏向”吗?

技术在哪里实现?

人工智能技术的设计将根据系统部署的环境而有所不同。对于大多数用例,该技术安装在服务器上,并集成到 SaaS 类型的产品中。然而,在某些情况下,人工智能技术可能需要直接在移动设备上运行。这更具挑战性,但并非不可能。

  • 这项技术是部署在服务器上还是移动设备上?
  • 是否需要集成到更大的产品中?
  • 较大的产品构建在什么堆栈上?Linux?Windows?iOS?安卓?
  • 周边系统内置了哪些编程语言和框架?
  • 人工智能的相关数据保存在什么数据库中?

有没有周边的非 AI 技术也需要开发?

如果正在创造的技术是一个新产品的原型,在人工智能技术之上,仅仅创造产品本身就可能需要额外的工作。

  • 是否有需要开发的用户界面?
  • 用户界面是基于网络的还是移动的?两者都有?
  • 是否存在需要作为解决方案的一部分构建的大型复杂系统的集成?

结论

我希望这有助于你更好地理解你需要把什么放进一个人工智能的建议书中。通过彻底调查和记录您客户的需求,我们可以为您提供非常快速的周转时间。这确保了顺利和快速的销售。

本帖原载于www . electric brain . io

理想的数据科学家的个人资料是什么样的?

原文:https://towardsdatascience.com/what-does-an-ideal-data-scientists-profile-look-like-7d7bd78ff7ab?source=collection_archive---------1-----------------------

分析 1000 份招聘启事的结果

(这是我的数据科学职业项目的第 2 部分。你可以在这里找到第一部。)

如果你是一名数据科学求职者,你一定一直在想应该在简历上写些什么技能才能接到电话;如果你想进入这个领域,你可能已经挠了很多次头,想知道学习哪些技术才能成为一个有吸引力的候选人。

继续读下去,我有你的答案。

首先,我们看看不同职位的技能要求。(图表如下)

Python 和 R 之间不再有争论,因为 Python 现在是主导者

曾经有一场关于 Python 或 R 是数据科学的首选语言的争论。显然,市场需求告诉我们,Python 现在是领导者。同样值得注意的是,R 甚至比 SAS 更少被提及。因此,如果您正在考虑进入数据科学,请考虑将您的学习精力集中在 Python 上。SQL 作为数据库的语言(也可能是数据!),成为数据科学家第二重要的语言。由于数据科学家职业的广泛性,其他语言也扮演着重要的角色。

总结一下,数据科学家的顶级语言有: Python,SQL,Scala,Lua,Java,SAS,R,C++和 Matlab

机器学习工程师所需的语言更加多样化

Python 作为机器学习的事实上的语言,毫不奇怪地成为机器学习工程师的顶级语言。因为需要从零开始实现算法,在大数据环境中部署 ML 模型,所以 C++和 Scala 等相关语言也很重要。总的来说,与其他两个角色相比,对语言的需求似乎更加分散。

综上所述,机器学习工程师的顶级语言有: Python,Scala,Java,C++,Lua,SQL,Javascript,Matlab,CSS 和 C#

如果你想成为一名数据工程师,SQL 是绝对必须的

数据工程师无时无刻不在和数据库打交道,SQL 就是数据库语言,所以难怪 SQL 是顶级语言。Python 很重要,但还是输给了 Scala 和 Java,因为这些语言帮助数据工程师处理大数据。

综上所述,数据工程师的顶级语言有: SQL、Scala、Java、Python 和 Lua

Scala 正在成为数据科学中第二重要的语言(不是 R)

有趣的是,当我们研究不同的角色时,Scala 要么是第二,要么是第三。所以我们可以说数据科学中排名前三的语言是 Python、SQL 和 Scala 。如果你正在考虑学习一门新的语言,考虑 Scala!

Spark 是除了数据工程师之外最顶尖的大数据技能

仅对于数据工程师而言,Hadoop 比 Spark 被提及得多一点,但总体而言,Spark 绝对是人们应该首先学习的大数据框架。Cassandra 对于工程师来说比科学家更重要,而 Storm 似乎只与数据工程师相关。

综上所述,数据科学的顶级大数据技术有: Spark,Hadoop,Kafka,Hive。

在深度学习方面,TensorFlow 是王者

数据工程师的招聘信息中很少提到深度学习框架,因此这个角色似乎不需要 DL 框架。对 DL 框架的最多提及来自机器学习工程师角色,这表明 ML 工程师确实大量处理机器学习建模,而不仅仅是模型部署。再者,TensorFlow 在深度学习领域绝对是霸主。虽然 Keras 作为一个高级深度学习框架真的很受数据科学家的欢迎,但它几乎与机器学习工程师的角色无关,这可能表明 ML 从业者大多使用 TensorFlow 等较低级别的框架。

综上所述,数据科学中最重要的深度学习框架有: TensorFlow,Torch,Caffee,MXNet

AWS 全面领先

计算机视觉是机器学习中最大的需求来源

对于一般的数据科学家来说,自然语言处理是最大的 ML 应用领域,其次是计算机视觉、语音识别、欺诈检测和推荐系统。有意思的是,对于机器学习工程师来说,最大的需求仅来自计算机视觉,自然语言处理远在其次。另一方面,数据工程师再次成为焦点专家——这些 ML 应用领域都与他们无关。

洞察力 —如果你想成为一名数据科学家,你可以根据你想进入的领域选择各种类型的项目来展示你的专业知识,但对于机器学习工程师来说,计算机视觉是一条出路!

说到可视化,Tableau 是必须的

数据科学家最需要可视化工具,而数据工程师和机器学习工程师很少提到可视化工具。然而,Tableau 是所有角色的首选。对于数据科学家来说,Shiny、Matplotlib、ggplot 和 Seaborn 似乎同样重要。

Git 对每个人都很重要,而 Docker 只针对工程师

接下来,我们使用词云来探索每个角色最常用的关键词,并结合相应的技能来构建所有数据科学角色的理想配置文件!

数据科学家更多的是关于机器学习,而不是商业或分析

数据科学家一直被视为需要统计、分析、机器学习和商业知识的全能职业。现在看来还是这样,或者至少,在一个数据科学家身上还是有各种需求的。然而,现在数据科学家似乎更关注机器学习,而不是其他任何东西。

其他顶级要求包括:业务、管理、沟通、研究、开发、分析、产品、技术、统计、算法、模型、客户/客户和计算机科学

机器学习工程师是关于研究、系统设计和构建的

与一般的数据科学家相比,机器学习工程师显然似乎有更专注的投资组合,包括研究、设计和工程。显然,解决方案、产品、软件和系统是主导主题。与之相伴的还有研究、算法、人工智能、深度学习和计算机视觉。有趣的是,商业、管理、客户和沟通等术语似乎也很重要。这可以在这个项目的下一次迭代中进一步研究。另一方面,管道和平台也很突出,证实了机器学习工程师在建立数据管道以部署 ML 系统方面的责任的共同理解。

数据工程师是真正的专家

数据工程师拥有比机器学习工程师更专注的投资组合。显然,重点是通过设计和开发管道来支持产品、系统和解决方案。最高要求包括技术技能、数据库、构建、测试、环境和质量。机器学习也很重要,可能是因为管道主要是为了支持 ML 模型部署数据需求而构建的。

就是这样!我希望这个项目能帮助你了解雇主在寻找什么,最重要的是帮助你做出明智的决定,如何定制你的简历和学习什么技术!如果你喜欢这个帖子,我会感谢你的掌声,谢谢!

附言:我将在单独的帖子中讲述技术细节,请继续关注,更多内容即将推出:)

我们上 LinkedIn 连线吧!

古罗马军事与数据分析有什么共同点?

原文:https://towardsdatascience.com/what-does-ancient-roman-military-has-in-common-with-data-analysis-a3f723a063b6?source=collection_archive---------6-----------------------

数据分析很有趣。但更重要的是,这真的很重要!

我很高兴成为网上快时尚品牌Miracas.com的一员。对我来说,直接从数据库转储出来的销售数据几乎就像玩金沙一样。尽管业内权威人士使用的一些术语可能相当吓人。例如…组群分析。当我在字典里搜索 coorts 这个词时,它把我带到了罗马军事史,才发现 coorts 基本上就是群体的意思。

本质上,群组分析背后的想法是将用户分成群组,或者群组,并研究这些群组的行为以获得更好的洞察力。例如,在给定月份获得的所有用户是我们可以观察的群体,以便了解他们在随后的几个月里如何逗留。

银河系漫游指南的一课!

在寻求正确答案之前,我们必须先问正确的问题。否则我们可能会以 42 结束,这也可能是正确的答案,但我们不明白是怎么回事。为了理解我分析的目的,让我从提出以下问题开始。

我想研究什么用户行为?

我想了解随着时间的推移,我的用户是如何与我保持联系的。因此,我想计算一段时间内现有用户的订单数量。我的样本数据跨度为一年,因此将月定义为分析的时间单位是有意义的。

我们希望如何将用户分成不同的群体?

基本上我问的是,如何将用户分成有意义的群体。例如,可以使用年龄组、人口统计或一阶值来定义群组。在我提出的前一个问题的上下文中,让我将分组定义为在给定月份中首次订购的所有唯一用户。

简而言之,我想了解的是,根据我公司的销售数据,我在某个月获得的用户是如何在随后的几个月中保持不变的?

下面这个情节是想出答案的方法之一

Sample data used here is purely for illustration purpose. It does not reflect the typical industry indicators and must not be quoted elsewhere.

图表显示,平均而言,约有 7%的用户在第二个月再次下单。这一数字在第三和第四个月分别增加到约 8%和 9%。橙色信封显示了分析中使用的不同群组的最大和最小保留值。

所以既然问题成立,那就开始玩沙子吧。

r 规则

r 是一个非常强大的数据处理工具。我在做半导体建模的时候遇到了 R。我很快就变得非常喜欢它。它为喜欢玩数据的人提供的便利可能会让人上瘾。为了处理数据,我将在本文中使用 basic R,并在最后使用ggplot2创建一些美观的图表。

我使用下面的 R 包进行分析。

  • plyr :拆分、应用和组合数据的工具
  • 整形 2 :顾名思义,整形数据的包
  • 关于 R 最棒的事情之一

除了这些库之外,我还使用了 RColorBrewer、colorRamps 和 gridExtra 包来提高剧情的美感。

为了本文的目的,我生成了一些样本数据。

[## rahulnyk/组群 _R

R 中的组群分析

github.com](https://github.com/rahulnyk/cohorts_R)

这是它的样子。

准备数据

下面是我如何读取样本数据的。

dr <- read.csv('sample_date.csv', stringsAsFactors = F)dr$date_add <- as.Date(dr$date_add)dr$date_add_month <- as.Date(cut(dr$date_add, breaks = "month"))dr <- subset(dr, (date_add_month > as.Date("2015-05-01") &   (date_add_month < as.Date("2016-06-01") )))number_of_months <-length(unique(as.character(dr$date_add_month)))

第一行代码只是将 csv 文件读入数据帧。在第二行,我将数据值转换成日期格式。下一行将日期分成几个月,这样给定月份中的所有订单都可以存储在一起。第 4 行代码只是一个子集命令

提示:对日期数据总是使用 R 日期格式。这就让 R 变得聪明,在绘图和其他计算时适当地对待它们。

我在这里也提取了number_of_months值。稍后当我将数据分成群组时,我将需要它。

计算群组

可以想象,这是最重要的一步。我们将根据用户第一次订购的月份对他们进行分组。让我重申一下我这次分析的目的。

我们的想法是了解某个月有多少用户购买,在接下来的几个月里留下来并下更多的订单。

这是我实现这一目标的方法。

  1. 列出给定月份的唯一用户(ulist)
  2. 仅将用户列表中的数据子集化到一个新的数据框中(dr1)。从原始数据框中删除数据(dr)。
  3. 使用 dr1 统计这些用户每月的订单数量。我将结果归纳到另一个数据框架中,叫做dr1s
  4. 从第一个月开始,每个月都这样做。每一次迭代,我都在过滤掉那一个月获得的用户m
  5. 将结果组合成一个名为Cohorts的数据帧。

下面是完成这一切的代码。虽然乍一看可能很吓人,但实际上很容易理解(用一点 R 知识)

Cohorts <- data.frame() ## empty cohorts data frame. for (m in unique(as.character(dr$date_add_month))){

  u <- subset(dr, dr$date_add_month == m) ## -- data for month m

  ulist <- unique(u$user_id) ## -- orders by unique users in month m dr1 <- subset(dr, dr$user_id %in% ulist) ## -- only month m users
  dr <- subset(dr, !(dr$user_id %in% ulist)) ## -- remove from dr

  ## -- Number of orders by these users for every month
  dr1s <- ddply(dr1, .(date_add_month), summarize, total = length(user_id)) 

  ## -- Combine the calculations into the Cohorts data frame. 
  colnames(dr1s) <- c("Month", m)
  a <- c(m, dr1s[,m])
  a <- data.frame(t(a))
  Cohorts <- rbind.fill(Cohorts, a)
}## Some more processing with the final data frame
col_names = paste("Month", array(1:number_of_months), sep = " ")
colnames(Cohorts) <- c("Month", col_names)
Cohorts["Month"] <- as.Date(Cohorts$Month)
Cohorts["max"] <- as.numeric(as.character(Cohorts[,2]))

我在这里使用ddply来计算每月的订单数量。该函数来自plyr库,是最方便的工具之一,可用于根据多种条件对数据框的行进行子集划分,对每个子集进行计算,并将结果合并到另一个数据框中。我向所有 R 爱好者强烈推荐花些时间玩玩ddply

这是我们的劳动成果,数据框Cohorts的样子。

太棒了不是吗!

最困难的部分已经完成了。此时,我已经有了要计算的数字。现在剩下的就是将这些数据绘制成美观的图表。但在此之前,让我谈一谈重塑数据。

熔化和铸造

当然是剑…但是数据也是!
在进行任何类型的分析时,重塑数据都非常重要。r 有一个强大的重塑库,可以帮助你根据需要融化和铸造数据。这里有一个不错的教程。

[## 重塑简介 2

长格式数据有一个可能变量类型的列和一个这些变量的值的列。长格式…

seananderson.ca](http://seananderson.ca/2013/10/19/reshape.html)

有了这些丰富的知识,让我们将队列数据框重塑为更易于绘制的东西。基本上,我们需要将数据转换成一种可以被ggplot2轻松使用的格式,我已经提到过这是 r 最棒的地方之一了。相信我……的确如此!

df_plot <- melt(Cohorts, id.vars = c('Month', 'max'), value.name = 'Orders', variable.name = 'Month_after')df_plot <- na.omit(df_plot)df_plot["Value"] <- as.numeric(df_plot$Orders)df_plot["Pc_value"] <- ceiling(df_plot$Value*100/df_plot$max)df_plot["Percentage"] <- paste(ceiling(df_plot$Value*100/df_plot$max), "%", sep="")df_plot["Percentage_2"] <- ifelse(df_plot$Percentage == "100%", df_plot$Value , df_plot$Percentage)

我们名为df_plot的新数据帧如下所示。

注意,添加列Percentage_2只是为了绘图方便。Percentage_2中的值表示Month 1中的订单总数以及后续月份的重复订单百分比。

没有艺术的生活是什么

现在是我最喜欢的部分,添加一些颜色。我使用了 RColorBrewer 和 colorRamps 库来增加魅力…然而默认的 ggplot 选项对于我们的目的来说已经足够了。

代码来了

## Cohorts tile chart ##
hm.palette <- colorRampPalette((brewer.pal(9, 'YlOrRd')), space='Lab', bias=10)p <- ggplot() p <- p + geom_tile(data = na.omit(df_plot), aes(x = Month, y = Month_after, fill=Value), width=31, height=1) p <- p + geom_text(data =  na.omit(df_plot), aes(x = Month, y = Month_after, label = Percentage_2), color = "white")#, fontface = "bold")p <- p + scale_fill_gradientn(colours = hm.palette(100)) + theme_bw() + coord_flip() p <- p + theme(panel.background = element_blank(), axis.line.x = element_blank(), panel.border = element_blank())p <- p + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position="none") + ylab("") p <- p + xlab("Orders by new users") 
print(p)

还有沃伊拉。!这是我们得到的

在这一点上,我想提一下,我在这里使用的数据纯粹是为了本文的目的而生成的,并不是实际的销售数据。此处计算的数字不得在别处引用。

再做一些修改,我可以用另一个有趣的图表来表示这些数据。

Average customer retention rate

我将把这个图表的代码留给你来写。

这些图表对任何企业都非常重要。通常,客户获取成本(CAC)是任何电子商务公司平均订单价值的重要组成部分。因此,衡量用户如何逗留并产生更多订单是很重要的。

第一个图表显示了在给定月份(第 1 个月)中获得的独立用户的订单数量,以及这些用户在随后几个月中再次订购的百分比。例如,2015 年 7 月,共有 479 个独立用户首次订购,其中约 11%在Month 2(即 2015 年 8 月)再次订购。该数字在Month 11(2016 年 6 月)降至 4%左右。

对于不同的企业,客户保持率可能会有很大的不同。对我来说,这表明了我的客户有多满意。它本身可能没有完整的意义。然而,当与平均订单价值、客户获取成本、客户终身价值、客户投诉数量等其他指标一起考虑时,它对引导业务朝着正确的方向发展非常有帮助。

其中一些参数可以使用我在这里使用的相同样本数据来计算。虽然我会把这个分析留到以后再说。

总结

分析用户行为的重要性怎么强调都不为过。群组分析是一种很好的方法。就像罗马军队一样,当数据被分成有意义的组时,它变得更易于管理。在试图找到答案之前,问正确的问题是很重要的。学习正确的工具来处理数据也同样重要。有了 R 和它的大量曲目,学习它几乎不会出错,至少到基础水平。

如果我能对这篇文章或任何其他方面有所帮助,请不吝赐教。感谢阅读,希望你喜欢。