关于机器学习的行业故事
伦敦 PAPIs.io 2018 大会笔记
上周我去参加了 PAPIs.io Europe 2018 大会,在伦敦金丝雀码头大厦举行。
该会议将自己描述为“一系列致力于现实世界机器学习应用以及推动这些应用的创新、技术和工具的国际会议”(据我所知,名称 papis 来自“预测 API”)。
我在周四去了那里,那一天是专门讨论“工业和创业”的,我对我所看到的做了一些笔记。下面快速总结一下!
The view from the 39th floor of Canary Wharf Tower.
采用 Kubernetes、Dask 和 Jupyter 的 ML 基础设施
上午的主题演讲由 Olivier Grisel 主讲,他可能因对 scikit-learn 的巨大贡献而闻名——因此任何用 Python 进行机器学习的人都应该感谢他!他的幻灯片在网上这里。
在这个大约 23 分钟开始的视频中,他展示了如何使用三个主要的开源组件来建立自己的机器学习基础设施: Kubernetes (一个基于容器的集群编排系统) Dask (一个并行化 python 作业的工具,它与现有的 python 库如 pandas/numpy 深度集成)和 Jupyter Notebooks (著名的交互式开发 web 应用)。
具体来说,他使用 minikube 在本地运行 kubernetes,使用 jupyter hub 在一台 jupyter 服务器上管理多个用户。他展示的第一个例子有些琐碎(例如,增加一个计数器),但这使他能够深入地描述计算是如何分布和执行的。第二个例子展示了如何运行网格搜索来为支持向量机找到最佳参数,使用 dask-joblib 在集群上运行。
问答中我最喜欢的一句话是一个关于开发 ML 系统的即兴评论:“你不应该在 Jupyter 笔记本上做所有的事情”(因为这对维护来说不是很好)。
使用自动气象站进行边缘预测
第二个演讲人是来自亚马逊的人工智能/人工智能传播者朱利安·西蒙(他在这里写博客)。从这个视频的第 59 分钟开始,他的演讲集中在运行数据中心之外的机器学习预测(“在边缘”——在摄像机、传感器等方面)。).实现这一点需要,也许并不奇怪,经历一场机器学习系统可用的各种 AWS 服务的旋风之旅。其中包括:
- 用胶子和 MXNet 定义和操纵模型;
- 用 SageMaker 建立和训练模型;
- 使用λ编写按需预测函数;
- 使用 Greengrass 将代码部署到边缘设备。
他的演讲以最近推出的“世界上第一款面向开发者的深度学习摄像机”DeepLens 的演示结束,展示了实时物体检测的作用。
管理工程师和数据科学家角色之间的差距
其中一个涉及非常有趣话题的演讲是由来自数据驱动广告公司 dataxu 的 Beth Logan 主持的。她描述了他们如何着手开发和自动部署机器学习管道(因此标题为“驾驶时更换轮胎”这个演讲是在线的这里是)以支持广告领域的各种应用。
离开 ML 本身,有一些有趣的观点是关于如何管理“数据科学家”和“工程师”的工作,以使每个角色发挥他们的优势。实际上,这是让数据科学家开发和迭代模型,同时将生产和扩展模型的所有工作留给工程师,工程师还必须证明生产实现的性能符合预期。
数据科学和工程的交叉是一个我可能会写一整篇博文的主题;可以说,我们在最后讨论了这样的划分是否是“正确”的方式,以及在合作时每个学科如何超越另一个学科。
机器学习中的流水线丛林
下一个发言人是来自另一家处理数字广告的公司 Appnexus 的 Moussa Taifi。他讨论了为点击预测建立各种管道,这是在线广告的一项常见任务。
穆萨在研究和生产之间来回穿梭时,谈到了开发管道的一些实际问题。这些问题包括:一旦管道过于复杂(“丛林”),就很难再现结果;为实验进行模型版本控制;避免时间旅行等常见问题(对测试集中的数据之后创建的数据进行培训);以及不管手头的任务如何,采用即时数据转换和特征提取的系统与根据预先计算的固定特征集构建模型相比,哪一种更好。
建立机器学习的文化
Lars Trieloff 发表了一篇关于在 Adobe 内部培育人工智能文化的高级演讲——特别关注 Adobe Sensei 。他的演讲跨越了三个广泛的领域:*品牌、愿景和技术,*以及这三者需要如何结合才能在组织内培养机器学习的文化。有趣的是,他还谈到了责任——以及在开发新的机器学习工具时,公司的所有员工需要如何经历培训和批准过程。
机器学习的可行性与投资回报
来自 BigML 的 Poul Petersen 发表了一篇关于该公司如何预测 2018 年奥斯卡获奖者中的 6 位的演讲——见这篇博文有一些类似的内容。除了奥斯卡奖,他还提出了一个有趣的观察,即如何根据对机器学习项目的可行性和预计投资回报的比较,对这些项目进行优先排序。如果两者都很低,这显然是一个禁区;如果两者都很高,这是一个显而易见的,你应该已经在努力了。剩下的两个类别是“可推迟”(低投资回报率,高度可行)和“脑力劳动者”(高投资回报率,目前不可行)。
他给出了一个类似的类比,根据特定系统的发展阶段,哪些算法是他的目标:早期阶段,需要快速原型(逻辑回归),中期阶段,你有一个经过验证的应用程序(随机森林),最后是后期阶段,调整性能变得至关重要(神经网络)。
创业推介和小组讨论——欧洲人工智能景观
创业推介分散在一天当中。我在这里看到的:
- 逻辑时钟:他们有一个名为 Hops 的企业机器学习平台,旨在提高数据科学家的生产力。
- Antiverse :旨在利用人工智能在一天内发现抗体药物。
- Tensorflight :通过使用机器学习分析卫星和航空数据,实现财产检查自动化。
- 为企业客户提供单一联系点,自动化他们与你联系的各种方式。
这些创业公司中的一些在一天结束时参加了一场创业大战,这是由一个 AI 判断的。当我第一次听说这件事时,我有些怀疑,但它实际上非常有趣。每个初创公司都被 Alexa 轮流提问,问题涉及团队的规模、经验和结构,并根据各种因素进行评分。获胜者赢得了 10 万英镑!
相反,创业小组采取了回顾的视角——回顾 Twizoo(在我离开前不久,被 Skyscanner 收购)、 prediction.io (在伦敦成立后被 Salesforce 收购)和 Seedcamp 。反复出现的主题是关注客户而不是机器学习的重要性:技术是解决客户痛苦的使能器,与客户的需求相比,需要在过程中解决的抽象机器学习问题几乎是多余的。
这一天有许多不同的外卖。一个突出的现象是,机器学习领域的欧洲创业公司仍然在蓬勃发展。事实上,Juno AI项目的 Libby 宣布他们正在开始新一轮的地形测绘——这个项目绝对值得一试并为之做出贡献。
英超联赛中的不平等
由于许多学者所做的出色研究,我们现代社会中日益扩大的收入和财富不平等已经开始引起媒体和决策者的注意。在本文中,为了让读者熟悉不平等研究中的一个关键概念——基尼系数,我将展示我的一个附带项目的结果:英格兰超级联赛中的足球运动员价值不平等。
衡量一个国家收入(或财富)不平等程度最常用的方法是基尼系数。科拉多·基尼在 1962 年发明了这个系数,用来衡量收入的分配情况。想象一个 100 人的村庄,他们一起生产和销售价值 10 万美元的商品。如果每个村民每月都有 1000 美元的收入,那么基尼系数将会是 0,因为收入是平均分配的。另一方面,如果村里只有 1 个人获得全部销售收入,10 万美元;而其他村民什么也得不到,基尼系数将升至最大值 1。这 10 万美元在这 100 名村民中的任何其他可能分配都会得到 0 到 1 之间的基尼系数。
在当今世界,收入不平等程度最低的国家往往是前苏联或斯堪的纳维亚国家,基尼系数通常低于 0.30(或 30%)。在另一个极端,我们看到了基尼系数超过 0.60 的南非。非洲和拉丁美洲的收入不平等程度很高,而欧洲国家的收入不平等程度与世界其他地区相比相对较低。当然,值得注意的是,许多盛产石油的中东国家不存在不平等数据,那里的不平等水平可能是世界上最高的。
好吧,既然我们现在知道基尼系数是如何工作的,我们可以用它来衡量其他经济概念的分布。你可能已经听说了,欧洲足球联赛的冬季转会窗口最近关闭了。英格兰俱乐部出手阔绰,总共花费了 4 . 3 亿英镑,他们实际上已经打破了转会截止日的记录。这个数字是巨大的,但是仔细想想,这些钱大部分都花在了少数球员的转会上,这个窗口最贵的转会是 7500 万,超过了整个金额的 1/6。
当一个俱乐部花费塞尔维亚每天的 GDP(国内生产总值)仅仅是为了转会一名球员,球队内部的平衡和平等会发生什么?
让我们看看英超的球队到底有多不平等。首先,在这个问题的理想研究中,我们应该有每个参与者收入的完美信息。不幸的是,据我所知,没有这样的信息来源。然而,感谢 Transfermarkt 网站,我们知道了球员的估计市场价值。当然,这些都是主观的价值,它们不一定反映实际的市场价值,但是,如果我们假设在转会市场上更有价值的球员比那些价值较低的球员赚得更多,它们可以很好地代表球员的收入。
一旦我们有了每个球员的估计市场价值,我们就可以计算基尼系数来衡量足球运动员在英超球队中的价值分布。你可以在上图中找到 2005 年以来英超各队的基尼系数。我们看到,2005 年至 2013 年间,平均不平等从 0.48 左右降至 0.44,但此后又开始上升。2005 年的阿森纳阵容是我们样本中最不平等的一个,基尼系数超过 0.60,而 2013 年的斯托克城基尼系数最低,为 0.27。
就目前的情况来看,价值不平等和英超联赛的成功之间有着很强的正相关关系。在我们的样本中,拥有更多不平等阵容的球队赢得了更多的分数。当然,相关性并不意味着因果关系。不平等的球队也可能是拥有最好(或更贵)球员的球队,上图正好反映了这一点。事实上,当我们观察五巨头——阿森纳、切尔西、利物浦、曼城和曼联时,我们会发现它们的不平等水平在大多数赛季中一直高于英超联赛的平均水平,尽管不平等水平有下降趋势(见下图)。
显然,当我们检查总市值和成功之间的联系时,我们看到了明显的正相关,但这次是二次关系(下图)。挥金如土的球队也比其他英超球队更成功,但这并不令人惊讶。
如果你想研究英超联赛中每支球队的不平等程度是如何变化的,我还创建了一个信息丰富且易于使用的 Tableau 仪表盘——如下图所示。不幸的是,这些仪表板不能嵌入到媒体中,所以如果你想检查一下,请随时访问www.baymul.com/en/data-viz-epl.html并亲自处理数据。
The full, interactive version of this visual above can be found at http://www.baymul.com/en/data-viz-epl.html
推断统计学基础
简介:
统计是数据科学家需要的最重要的技能之一。统计学涉及大量的数学知识,很难掌握。因此,在本教程中,我们将浏览一些统计学的概念,以学习和理解推断统计学并掌握它。
为什么我们需要推断统计学?
考虑这样一种情况,你对孩子们每天看电视的平均时间感兴趣。现在你知道你所在地区的儿童平均每天看 1 小时电视。你如何为所有的孩子找到这个?
有两种方法可以用来计算结果:
- 收集每个孩子的数据。
- 使用我们掌握的数据来计算总体平均值。
第一种方法是极其困难和令人生畏的任务。完成这项任务所需的努力和资源将是巨大的。
第二种方法简单得多,也更容易实现。但是有一个问题。你不能把从有限的数据集中得到的平均值等同于整个人口。考虑这样一种情况,你所在地区的儿童对体育运动更感兴趣,因此他们花在电视上的时间明显少于总人口。我们如何着手寻找人口平均数?这就是推理统计学帮助我们的地方。
推理统计:
推理统计学帮助我们回答以下问题:
- 从样本中对总体进行推断
- 推断样本是否与总体显著不同。让我们看看前面的例子,我指出样本与总体不同,因为孩子们对体育更感兴趣,而不是看电视。
- 从模型中添加或删除一个特征是否有助于改进它。
- 如果一个模型明显不同于另一个。
- 假设检验。
这向我们展示了为什么推断统计学是重要的,以及为什么值得投入时间和精力来学习这些概念。
正态分布和 z 统计量:
正态分布也称为钟形曲线,具有以下特性:
- 均值=中位数=众数。
- 曲线是对称的,一半的值在左边,一半的值在右边。
- 曲线下的面积是 1。
Image credit: University of Virginia
在正态分布中:
- 68%的数据在平均值的一个标准偏差范围内
- 95%的数据落在平均值的两个标准偏差内
- 99.7 %的数据落在平均值的三个标准偏差内。
为了计算事件发生的概率,我们需要 z 统计量。计算 z-统计量的公式为
其中 x 是要计算 z 值的值。μ和σ分别是总体均值和标准差。基本上,我们在这里做的是通过将平均值移动到 0 并将标准偏差转换为 1 来标准化正态曲线。z-统计量实际上是以标准差形式计算的值与平均值的距离。因此,z 值 1.67 意味着该值在正方向上偏离平均值 1.67 个标准偏差。然后,我们通过从 z 表中查找相应的 z 值来找到概率。
中心极限定理;
正态分布的主要重要性来自中心极限定理。中心极限定理表明,无论总体分布的形状如何,随着样本量的增加,样本均值的抽样分布都接近正态分布。让我们通过一个例子来看这个问题。考虑这样一种情况,我们查看一个人一周内的推文数量(随机生成的数据在 0 到 200 之间)。数据的频率分布如下所示:
这与我们所知的任何一种分布都不相似。
现在,让我们从这些数据中随机抽取 1000 个大小为 50 的样本,并计算每个样本的平均值。当我们绘制这些平均值时,我们得到一个正态分布曲线,也称为采样曲线或采样分布。
平均值= 98.78(人口平均值= 98.87)
中心极限定理有一些重要的性质:
- 总体的平均值大约等于抽样分布的平均值。我们可以在上面的例子中看到这一点,其中总体平均值(98.87)大约等于抽样分布的平均值(98.78)。
- 抽样分布的标准偏差也称为标准误差,等于总体标准偏差除以样本大小的平方根。因此,样本量越大,标准偏差越低,从总体平均值确定样本平均值的准确度越高。
- 不管总体分布的形状如何,样本均值的分布都是正态分布。这意味着,即使我们的原始分布是偏态或双峰分布或其他分布,样本均值始终是正态分布。这就是中心极限定理如此强大的原因。
为了使中心极限定理成立,样本量应该足够大(一般大于 30)
置信区间:
就像我之前说过的,我们找到了样本平均值,并且想要估计总体平均值。样本统计对潜在人口的估计有多准确一直是个问题。置信区间解决了这个问题,因为它提供了可能包含总体参数的一系列值。
image credit: Luis Fok, Oregon State University
有单侧或双侧置信区间。在双侧置信区间中,如果我们选择 95%的置信区间,我们在尾部的每一侧选择 2.5%,然后计算范围。在单侧置信区间中,我们通过在分布的左边或右边取整个 5%来计算置信区间。上图显示了一个双侧置信区间。我们用来计算置信区间的公式是:
这些符号代表什么
Sample Mean
Z value for the desired confidence level
confidence level
the standard deviation of the population
置信区间概念中的另一个重要术语是误差幅度。它是置信区间的一半。它被称为抽样误差,这意味着如果样本平均值在误差范围内,那么它的实际值就是总体平均值,差异只是偶然出现的。否则,结果被认为具有统计学意义。我们将在后面的教程中再次讨论这个概念。
当我们取 95%的置信区间时,并不意味着总体均值在我们以 95%的概率得出的范围内。置信区间表示包含未知总体参数真值的可能置信区间的频率(即比例)。因此,如果我们取无限多的样本,并找出每个样本的置信区间范围,那么包含总体参数的区间数就等于置信区间。如果我们取 95%的置信区间,那么这意味着总体参数存在于所有可能的置信区间范围的 95%中。
这些是继续前进所需的一些基本概念。
激进化对社交媒体的影响模型
数据科学在工作中发现 ISIS 极端分子和恐怖主义在网上传播
Photo by Tom Roberts on Unsplash
考虑到当前激进思维和激进主义的趋势,理解激进主义如何在在线社交网络上发挥作用至关重要。
一个数据科学项目基于取自社会科学模型的“激进化的根源”模型,研究了 激进化影响 的问题。这项工作围绕着被认为具有影响力的三个层面:
- **微观影响:**内部的、个人的影响,由该人在 Twitter 上发布的帖子来表示。
- **中观影响力:**小群体影响力,以他人帖子为代表,分享。
- **宏观影响:**全球影响,以公共网站为代表(这部分未被涵盖,因为大多数网站实际上都被执法机构屏蔽了)。
通过分析部首语音风格 (n-gram 模型)研究了部首化,并通过语言的余弦相似性将人与部首化进行了比较。
Kaggle 上有一个数据集,包含 112 名普通(非激进)用户和 112 名亲 ISIS 的激进用户。
进行了两项主要分析。
1.我能理解一个用户是否真的激进了吗?
第一个分析是关于激进和非激进用户的分类,基于个人和社会(中观层次)。结果表明,这两个方面密切相关:
因此,即使使用非常简单的分类器,用户也可以很容易地被分为两类。朴素贝叶斯分类已经达到 90%的精度。
2.我能预测用户是否会受到影响从而变得激进吗?
第二项分析着眼于对激进化的预测。为了做到这一点,用户的时间表被分成两个依赖于时间的集合,帖子的前 80%用于培训,最新的 20%用于测试。因此,对于激进化预测,中性用户组的精度更高,亲 ISIS 激进组的召回率更高。在这两种情况下,准确率和召回率都不是很高。这可能是因为在激进化的时间窗口中应该考虑到可能的灵活性。因此,可以应用进一步的研究来改进这种现象的检测。
这项关于 激进化影响 的研究已经由 Miriam Fernandez 、Moizzah Asif、Harith Alani(英国 KMI 开放大学)在阿姆斯特达姆网络科学大会 2018 上发表。
关于这项研究的全文可在线获取。
这篇论文在 WebSci2018 上获得了最佳论文奖!
信息根——生成性对抗网络第三部分
结账我的 YouTube 上甘斯的视频 。本文原载于
在第一部分中,提交了原始 GAN 文件。第二部分对 DCGAN 进行了概述,它极大地提高了 GANs 的性能和稳定性。在这最后一部分,将探讨 InfoGAN 的贡献,它应用信息论中的概念将一些噪声项转换成对结果有系统、可预测影响的潜在代码。
动机
正如在第二部分的例子中所看到的,当对发生器的噪声矢量进行算术运算时,可以做一些有趣且令人印象深刻的事情。在下面来自 DCGAN 论文的例子中,戴眼镜的男人的输入噪声向量被操纵以给出导致戴太阳镜的女人一旦被馈送到生成器中的向量。这表明在噪声向量中有结构对发电机输出具有有意义且一致的影响。
然而,没有系统的方法找到这些结构。这个过程是非常手动的:1)生成一堆图像,2)找到具有你想要的特征的图像,3)将它们的噪声向量平均在一起,并希望它捕捉到感兴趣的结构。
改变发电机输出的唯一“旋钮”是噪声输入。因为它是噪音,所以没有关于如何修改它以获得想要的效果的直觉。问题是:“如果你想要一个戴眼镜的男人的图像——你如何改变噪声?”这是一个问题,因为你的表象是纠缠*。InfoGAN 试图解决这个问题,并提供了一个清晰的表示。*
这个想法是提供一个潜在代码*,它对输出有意义和一致的影响。例如,假设您正在处理 MNIST 手写数字数据集。你知道有 10 个数字,所以如果你能通过把部分输入赋给一个 10 态离散变量来使用这个结构就好了。希望是,如果你保持代码不变,随机改变噪声,你会得到相同数字的变体。*
Entangled vs Disentangled
InfoGAN
InfoGAN 解决这个问题的方法是将生成器输入分成两部分:传统的噪声向量和新的“潜在代码”向量。然后,通过最大化代码和发电机输出之间的互信息,使代码变得有意义。
理论
该框架仅通过将正则化项(红框)添加到原始 GAN 的目标函数来实现。
λ是正则化常数,通常设置为 1。我(c;G(z,c)) 项是潜在码 c 和发电机输出 G(z,c) 之间的互信息。
显式计算互信息是不实际的,因此使用标准的变分论点来近似下限。这包括引入一个“辅助”分布 Q(c|x) ,该分布由一个参数化的神经网络建模,并且旨在逼近真实的 P(c|x) 。 P(c|x) 表示在给定生成的输入 x 的情况下,码 c 的可能性。然后,他们使用一种重新参数化的技巧,使您可以只从用户指定的先验(即均匀分布)中采样,而不是未知的后验。
**
上面的正则项转化为以下过程:从你选择的先验中为潜在代码 c 采样一个值;从您选择的先验中采样噪声值z*;生成 x = G(c,z);计算 Q(c|x=G(c,z)) 。*
然后,目标函数的最终形式由互信息的下限近似给出:
体系结构
如上所述,现在有了生成器的第二个输入:潜在代码。理论部分介绍的辅助分布由另一个神经网络模拟,它实际上只是一个完全连接的层,附加在鉴别器的最后一个表示层上。Q 网络本质上是试图预测代码是什么(见下面的细微差别)。这只在输入假输入时使用,因为这是唯一知道代码的时候。
InfoGAN architecture. New components outlined in red.
这里有一个很难理解的细微差别。为了计算正则项,您不需要估计代码本身,而是需要估计对于给定的生成输入,看到该代码的可能性*。因此, Q 的输出不是代码值本身,而是您选择用来对代码建模的分布的统计数据。一旦知道了概率分布的充分统计量,就可以计算可能性了。*
例如,如果您使用连续值代码(即在-1 和+1 之间),您可以将 Q(c|x) 建模为正态/高斯分布。在这种情况下, Q 将为这部分代码输出两个值:平均值和标准差。一旦你知道了平均值和标准差,你就可以计算出可能性 Q(c|x),,这就是你需要的正则项。
结果
在 MNIST 手写数字数据集上的训练报告了初步结果。作者指定了一个 10 态离散码(希望它能映射到手写的数字值),以及两个介于-1 到+1 之间的连续码。为了进行比较,他们训练了一个具有相同结构的常规 GAN,但没有使用最大化互信息的正则化项。
下图显示了一个过程,其中特定的噪声矢量保持不变(每行),但潜在代码发生了变化(每列)。在部分 a 中,您可以看到离散代码不断改变数字。部分 b 显示常规 GAN 基本上没有显著或一致的变化。
零件 c 和 d 显示了 InfoGAN 的连续代码变化。这显然会影响手指的倾斜度和宽度。有趣的是,它们实际上从-2 变化到+2,即使训练只使用从-1 到+1 的值,这表明这些代码有意义地推断。
Comparing InfoGAN to regular GAN when changing code values. From InfoGAN paper.
这是一些面部图像的结果。请参见论文了解更多结果和解释。
Results on 3D face model dataset
Results on CelebA dataset
结论
值得强调的是,从来没有预先指定倾斜或手指粗细将有助于分离为代码。InfoGAN 训练程序自己发现了这些属性,即在无人监督的情况下。这项研究做的唯一事情就是确定潜在代码的结构。
我们已经看到,通过简单地添加一个项,最大化部分生成器输入与其输出之间的互信息,学习过程将数据中有意义的属性解开,并将它们分配给这个强加的潜在代码结构。
你做吧
我发现原始回购很难运行,因为它的依赖关系非常陈旧。我已经更新了代码,这样你就可以用现代 Tensorflow APIs(版本 1.3.0)运行了。
继续挖
在这个由 3 部分组成的系列中,我们已经介绍了一些主要的贡献,并看到了 GANs 所做的惊人的事情。尽管如此,这仅仅触及了表面。有多个 github repos,其中包含大量且不断增长的研究论文。这里有一个,这里有另一个。这是一个令人兴奋的研究领域,其成熟度和有效性都在不断提高。如果你在这里发现了你想评论的某篇论文,请在评论中留言。
信息图营销:10 件小事可以带来巨大变化
人类是视觉生物。这或许可以解释为什么猜图法已经成为最近数字营销人员使用的最有效的病毒式营销技术之一。
那么,什么是猜图? Backlinko 的 Brian Dean 将访客画像定义为三种强大的数字营销策略的结合:信息图、访客发帖和链接建设。他甚至称之为他有史以来“最喜欢的”SEO 策略之一。
作为一种搜索引擎优化策略,使用猜测图包括在权威网站上重新利用和重新发布你的信息图作为客座博文——因此有了术语“猜测图”通过简单地编写独特的介绍来配合你的访客照片,你可以毫不费力地将这些图片发布在多个网站上。
需要一些灵感和技巧来开展你自己的猜图活动吗?这里有五个正确使用猜图法的案例研究。
你可以在下面查看这篇文章的视觉摘要或者 点击这里 阅读每一个推广猜谜技巧的详细解释。
在你的网站上嵌入:
<script src="//my.visme.co/visme.js"></script><div class="visme_d" data-url="pv0go3jo-10-small-things-that-can-make-a-big-difference" data-w="800" data-h="4615" data-domain="my"></div><p style="font-family: Arial; font-size: 10px; color: #333333" >Created with <a href="http://www.visme.co/make-infographics" target="_blank" style="color: #30a0ea"><strong>Visme</strong></a></p>
5 家成功推出 Guestographics 的公司
1.如何将“无聊”的小众生活化
你可以想象为像害虫控制这样无聊的话题制造轰动是多么具有挑战性。但是 SEO 战略家 Mike Bonadio 通过巧妙策划的猜测活动做到了这一点,他不太可能的成功是如此有趣,以至于它被发表在 Backlinko 上。
以下是他的竞选结果:
- 超过 1000 份社交分享
- 在《班戈每日新闻》和《地球母亲新闻》等高权威出版物上发表
- 有机交通增长 15.5%
以下是他使用的猜测照片的部分截图:
下面是迈克是如何做到的简要概述:
- 由于“害虫控制”是一个相当无聊的话题,迈克研究了更有趣的“肩膀壁龛”,他可以用它来启动他的活动。这些话题与他的主题密切相关,同时也是他的目标受众感兴趣和关心的事情。
- 迈克围绕“害虫控制”创建了一张思维导图,其中他确定了理想的“壁龛”,他的主题“害虫控制”可以借用这些壁龛,例如园艺、家庭装修、自己动手等等。
- 一旦他有了“肩膀龛”的列表,他就运行搜索与这些次要话题相关的热门或趋势帖子。在“园艺”这个案例中,Mike 发现大多数著名的园艺博客都非常关心(并且写了)如何消灭花园害虫。答对了。
- 在 Mike 发现他的主要主题和肩膀小生之间的完美重叠后,他开始创作关于“园丁的自然害虫控制”的内容,并以此作为他的猜测摄影的基础。然后他创造了另一个思维导图来帮助他的设计师将他的想法充实到一个完成的信息图中。
- 到了推广他的信息图的时候,迈克用谷歌搜索、内容研究工具 Buzzsumo 和博客目录 Alltop 列出了 40 个顶级园艺博客和博客作者。然后,他确定了这些网站背后的合适人选,并向多达 97 名潜在客户发送了推广信息。
其他提示
提示 1:分为两部分的软销售推广比直接的更有效。
当 Mike 启动他的猜图推广时,他测试了两种类型的推广。一种是软推销的“试探性”接触,在发送信息图之前,他先判断接收者的兴趣。
另一种是更直接的推销,他立即与接收者分享他的信息图。
“试探”邮件的回复率为 40%,而直接推销邮件的回复率仅为 16%,因此了解这一点对未来的营销活动很有帮助。
提示 2:主动为你的信息图写一个定制的介绍。
对于那些反应良好的潜在客户,Mike 发送了一封电子邮件,其中包含了一个嘉宾照片的链接,并提供了一份定制的介绍。
提示 3:确保定制的介绍必须有一个包含品牌或描述性锚文本的单一反向链接。
下面是 Mike 如何在他的 guestographics 简介中使用品牌锚文本:
提示 4:如果你的猜测图出现在显著的网站上,在你的推广邮件中提到这一点,作为你的信息图可信度的社会证明。
从那以后,迈克的信息图像病毒一样传播开来,并在 Flipboard 和 Pinterest 等网站上分享。不用说,他的害虫控制公司客户肯定得到了他们急需的流量提升,而这一切都来自于一个经过深思熟虑的猜图策略!
2.如何使用猜图法与更权威的网站竞争
当 HerePup 的 Perrin Carrell 决定推出一个宠物博客时,他知道自己进入了一个已经被 PetMD.com 等博客主宰的利基市场。尽管如此,他还是坚持了下来。
Perrin 开展了一项猜测活动,取得了显著优势,并取得了以下成果:
- 仅在 6 周内流量增加了 963%
- 超过 1k 的推荐访问者
- 《赫芬顿邮报》的一篇特写
以下是信息图的部分截图:
以下是 Perrin 如何使用猜图法超越竞争对手的:
- 首先,Perrin 选择了一个高需求的话题,同时也是他的目标读者关心的话题。因此,他在谷歌上搜索“狗和人类健康”,偶然发现了 WebMD 的一篇文章,“宠物如何改善你的健康”,这篇文章获得了 228 个推荐域名。他看到它有相当大的流量,但仍然缺乏,他肯定能写出更好的东西。他找到了他的摩天大楼技术机会。
- 在此之后,佩兰做了更多关于“宠物如何改善人类健康”这一主题的研究,整理了他能找到的关于这一主题的最佳资料。
- 最后,他让一名自由设计师捕捉他收集的所有数据,并将其转化为引人注目的信息图。
其他提示
提示 1:改进现有媒体,你可能会超越你的竞争对手。
在 Perrin 的案例中,他发现顶级内容可以通过更多的研究和设计来改善,所以他开始创造比他从更有影响力的来源找到的内容更好的内容。
由于以视觉震撼的信息图形式添加了更多引人入胜的媒体,并将其推广到相关网站,Perrin 得以突破,并从更成熟的竞争对手中脱颖而出。
3.如何用病毒猜测恢复旧内容
争议可能是很好的宣传。以 Ahrefs 博客上的这个猜测性的案例研究为例。
这个名为的信息图“喝完一罐可乐一小时后会发生什么”最初发表在《叛离的药剂师》上。它是基于韦德·梅雷迪思 11 年前的一篇文章,关于可乐如何在饮用后一小时内对你的系统造成严重破坏。
下面是信息图的截图:
以下是这张信息图的表现:
- 收到差不多 1K 的反向链接。
- 在赫芬顿邮报、Reddit、雅虎、电讯报、Buzzfeed、Examiner、Indiatimes 等网站上发表。,这带来了更多的反向链接和评论。
- 增加了数百个关键字的 DA 和排名
- 仅在脸书就收到了超过 4.4 万股股票
那么,他们是怎么做到的呢?
显然,根据 Ahrefs 的说法,这张信息图完美地结合了以下成分,这导致了它的广泛传播:
- 伟大的设计
- 在正确的地方推广
- 令人激动的话题
- 一点争议
- 讨论了一个引起大品牌愤怒的话题
以下是每个属性与其他属性相结合对结果的影响:
- 这位叛逆的药剂师选择了一个他们擅长的话题,引发了情感上的回应。在他们的案例中,他们的信息图表谈到了可乐对健康的危害,这引发了读者的焦虑。
- 它打击了世界上最强大的饮料制造商之一可口可乐,这在很大程度上导致了它在网上产生的轰动和争议。
- 他们的信息图表首先在在线论坛 Reddit 上获得了势头。它的受欢迎程度像滚雪球一样越来越大,最终到达了权威网站,这些网站不失时机地链接回该信息图。即使 Reddit 上的原始帖子最终被删除,该信息图的受欢迎程度也已经飙升,来自权威网站的更新链接仍然存在。
Wordstream 已经成功推出了几个信息图表,如“谷歌最大的失败和失败”,以及他们最近的信息图表,题为“谷歌在哪里赚钱:谷歌 Adwords 广告中最昂贵的 20 个关键词”
Wordstream 写了一个案例研究,概述了他们是如何通过信息图取得成功的。值得注意的是,这是在 2010 年制作的,但你可以从中学到很多东西。以下是他们猜测活动的惊人结果:
- 美国有线电视新闻网,这无疑是最权威的网站之一,导致了大量的反向链接
- 转载于《财富》、Techcrunch(美国和日本)、维基百科、赫芬顿邮报、Epic.org 和 Privacy.org
- 登上 Digg、Reddit 和 StumbleUpon 的首页,获得大量曝光
- 在脸书产生了 2K 个赞和 1.2K 条推文
- 赢得了 3500 个链接
尽管 Wordstream 承认信息图没有 2010 年那样的病毒效应,但快速搜索他们最新的博客帖子,包含“谷歌在哪里赚钱”的猜测图,仍然显示出这些令人惊叹的结果:
- 产生的社交分享:1 204 条推文、187 条脸书分享、13 条 Google+分享和 107 条 Instagram 分享
4.如何复活被低估的信息图
当知名的在线营销人员鼓吹搜索引擎优化策略时,你可以打赌它在大多数时候是有效的。
在一个案例研究中,尼尔在他的博客上发布了一张信息图,起初,几乎没有引起任何关注。
下面是该图的截图:
根据 Neil 的说法,他的信息图表在他的博客上首次发布时并没有获得太多的流量。
但是当他把它投给《企业家》杂志时,奇迹发生了。他的猜测最终产生了超过 12K 股!
尼尔从恢复他被低估的猜测摄影中学到了什么:
- 如果你创建的信息图没有吸引你的读者和追随者,不要放弃。而是推广到其他网站。
- 将你的信息图表发布在权威网站上,尤其是你的目标受众经常光顾的网站。因为他已经是《企业家》的定期撰稿人,所以很容易就能在网站上发布他的信息图。
- 正如尼尔·帕特尔所说,数据驱动的博客帖子非常成功。当你做一个猜测图时,确保添加百分比、统计数据、案例研究和其他相关数据。在你的信息图中利用可信网站发布的数据、研究或调查。
结论
现在你知道了:四个伟大的案例研究证明了猜图学的力量。
正如你所看到的,猜图是给你的网站带来急需的提升的最佳策略之一!
急于赶上潮流,但没有资源?然后,我推荐你试试 Visme ,它能让你在几分钟内制作信息图,而且不需要任何设计技巧。很好,对吧?
缺乏灵感?然后继续检查这个关于 19 个不同主题的 101 个最佳信息图表示例的庞大列表。
那么,猜图学是如何帮助你的博客成长的呢?请在下面的评论中告诉我!
信息图表 2.0:如何在信息图表疲劳的时代脱颖而出
信息图是当今最有效的视觉交流形式之一。教育家们用它们来进行课堂教学和研究项目。项目经理和业务主管使用它们来创建可视化报告。营销人员和记者正利用它们更有效地与受众沟通。
为什么在过去的十年里受欢迎程度激增?因为有文字的图片几乎总是会比只有文字的图片更容易让人记住。事实上,这项研究得出的结论是,那些按照包含插图的说明去做的人比那些按照纯文字说明去做的人要好 323%。
然而,问题是:当互联网上充斥着成百上千的信息图(有些设计得并不那么有效)时,你怎么能让这些信息图为你和你的品牌服务呢?
让我们来看看信息图设计中一些最有创意的趋势,并向您展示如何将它们应用到您自己的视觉营销内容中,使其在视觉噪音的海洋中脱颖而出。我们还将看看信息图的未来,以及如何利用这些信息来改善信息图的内容。
什么是信息图疲劳?
信息图表已经存在了很长时间,远在数字时代之前。但是,一般来说,当我们谈论信息图时,我们指的是那些遍布 Pinterest 并出现在博客帖子中的长垂直图形。自从 Visme 和 Piktochart 等简单的在线图形创建工具问世以来,信息图在网络世界变得非常流行。
几年前,社交媒体专家说,随着在线读者开始厌倦在互联网上看到信息图表,信息图表已经达到了顶峰。事实是,每个人都厌倦了看到糟糕的信息图,而不一定是一般的信息图。普通人只需要 8 秒钟就能对他们不感兴趣的内容失去兴趣。考虑到 93%的 Pinterest 用户利用该平台来研究和计划未来的购买,难以处理的信息图表将永远不会被第二次看到。
当信息图表疲劳开始出现时,品牌必须找到更多创新的方式来创建不会让读者厌烦的内容。信息图表开始包括互动元素,如动画、视频和 gif,以及引人注目的自定义视觉效果,如插图和照片。与此同时,设计师开始脱离通常的模板,创造新的和创新的设计。
信息图表仍然相关吗?
信息图表疲劳仍然存在,尽管我们应该称之为“糟糕的信息图表超载”。糟糕的信息图可以快速滚动,不会给浏览者留下任何印象。做得好、有创意的信息图仍然非常有意义,而且在未来许多年里都会如此。
你应该继续创建信息图表用于你的内容营销吗?
是的,只要你这样做是为了给你的内容增加独特的价值,而不仅仅是为了创建一个好看的信息图。确保信息准确,视觉效果不会令人不快,并且易于理解。你知道吗,在你的博客文章中包含一个精心设计的信息图表会使它的可分享性至少增加 12%?
为了避免“信息图失败”,你的视觉需要有一定的质量。随着在线信息图创作者和 DIY 编辑多年来的发展,可以完成的事情的可能性也在发展。
例如,许多信息图已经偏离了一般的垂直构成,以满足某些社交媒体渠道的大小要求。我们看到越来越多的方形和矩形信息图、微型信息图、动画和互动信息图等等。与此同时,一些信息图被制作得看起来像网站,而一些网站被设计成模仿滚动信息图。
以下是我们在过去一年中观察到的一些最值得注意的很酷的信息图表趋势:
微型信息图表
信息图并不总是充满信息的纵向作品。有时候,一个微型信息图就是你以视觉方式呈现一条信息所需要的全部。此外,方形或矩形的微型信息图更容易在社交媒体上分享。为了获得更惊人的效果,添加动画效果并将信息图保存为视频或 GIF。
信息图表风格的网站/滚动信息图表
随着信息图变得越来越具有交互性,它们也逐渐进入了网页设计的领域。因此,我们开始看到网络和应用程序开发工具被用来创建信息图表。(点击阅读更多关于用户界面设计(UID)、用户体验设计(UXD)和信息图表之间的关系。
在下面的例子中,有两种变体:以完整的网站格式呈现的信息图和看起来像信息图的网站。有些情况下,你甚至分不清!
如果您的企业有重要的信息需要可视化地解释,尝试这种格式是一个好主意(并且您也有额外的时间和资源来投资开发类似网站的信息图)。这种类型的可视内容通常具有交互式按钮和指向其他页面或信息图部分的超链接,以创建更好的用户体验。
滚动和交互式信息图
这些是可以在滚动网页格式中欣赏的信息图表:
受信息图表启发的网站
这些网站被设计成类似信息图表:
方形信息图
分享信息图的首选社交媒体渠道一直是 Pinterest,因为它的垂直特性。然而最近,越来越多的信息图被放到了 Instagram 上,并从那里被放到了脸书和 Twitter 上。这是一个非常新的趋势,我们认为它将在 2018 年起飞。由于这种趋势只涉及信息图的大小,所有其他趋势都可以应用于它。例如,3D 设计和动画可以用来创建非常创新的方形信息图。
方形信息图对于提供快速解释和促进快速社交媒体分享非常有用。公司和创业公司可以真正从这种信息图表趋势中受益,因为它更容易分享!
以上是我们目前在网上最喜欢的一些正方形信息图。如果你关注 Instagram 上的标签**#信息图**,你会看到一些非常惊人的例子,而且每天都有更多。
动画信息图
现在你在网上找到的一些很酷的信息图可以包含所有类型的动画效果。动画可以是一个焦点,也可以是设计的补充。制作信息图动画的最佳策略是知道何时使用它。
问问你自己:动画会促进信息的传递还是会分散读者的注意力?
我们上面展示的滚动信息图充满了动画和元素的进出效果,它们随着你的滚动而移动。但是这些并不是唯一可以添加到信息图中的动画。您可以制作图表和文本动画。
当信息图包含动画时,需要以向查看者显示动画的格式保存。其中包括可以在任何浏览器上查看的. html5。可以在任何设备上查看的 gif 和视频格式的. mp4。这实际上取决于您应用于信息图的动画类型,从而知道您需要哪种文件格式。
以上是保存在中的动画信息图示例。gif 格式。
互动信息图表
交互式信息图是用户可以与之交互的信息图。这可以通过点击、悬停甚至数据输入来实现。主要思想是,根据用户在信息图上的操作,信息会自我修改。
这些信息图可以是任何形状:正方形、长方形或长而垂直。它们的一个共同点是,它们需要是. html5 格式才能工作。这种风格的信息图还不能在社交媒体上分享。它们特殊的可点击特性最好在浏览器中体验。
以下是一些例子:
多媒体信息图表
当在线信息图制作者们整合了嵌入视频和 gif 的可能性时,他们向前迈出了一大步。只需一个 iframe 代码片段,任何视频或 GIF 都可以包含在信息图中。
这些交互式信息图表需要嵌入到网站或电子邮件中,以. html5 或。gif 文件格式。如果下载为. jpeg 或。png 文件,视频和 gif 显示为静态照片。因此,包含视频或 gif 的信息图不能发布在 Pinterest 上。
这些听起来像是挫折,但它们真的不是。这些很酷的信息图表可能不会在社交媒体上疯传,但它们肯定会让你的内容在竞争中胜出。它们也可以用作会议上的演示文稿或创新的数字简历。
信息图设计的可能性已经发展到如此的高度,信息图甚至可以被认为是多媒体设计的一个例子。例如,您可以使用 Visme 等在线信息图表制作工具将所有类型的互动和动画内容嵌入到您的视觉效果中,包括视频、音频、gif 和实时内容。
例如,有些信息图有不同部分的背景音乐和音频解释。点击可以产生声音效果并激活叙述。动画可以用来显示社交媒体渠道或电子商务网站在线销售柜台上的实时活动。
集成的第三方内容和实时信息
随着信息图变得越来越数字化,第三方内容的整合变得越来越普遍。第三方内容到底是什么?视频和 gif 是第三方内容,但来自 Twitter 和脸书的表格、地图和实时社交媒体反馈也是第三方内容。通过嵌入第三方内容,您的信息图表可以达到一个全新的水平。显示的信息可以有许多不同的表达渠道。
这里有一个例子:
插图人物
我们看到的另一个有趣的趋势是使用插图人物。在信息图中,字符被用作解说员或演示者,而不是单独显示数据。使用插图人物的另一种方法是将他们作为视觉形象的一部分。字符可以赋予信息图额外的个性和亲切感,而不是依赖图表、箭头和流程图。
3D 插图/等距信息图
我们观察到的另一个趋势是 3D 插图的使用。使用 3D 元素的信息图被称为等轴信息图,具有真正不同的感觉。三维插图通常用于在等距信息图中创建一个完整的场景,模糊了我们习惯的经典部分的线条。这种风格的信息图将在 2018 年继续流行,但只有时间才能证明它是否会成为永恒。
手绘风格
手绘风格不仅仅是信息图设计中的一种趋势——我们在设计的各个方面都可以看到它。自从手绘刻字和脚本字体热潮以来,我们在内容营销的各个环节看到了越来越多的手绘风格设计。当在信息图表中使用时,这种样式赋予信息一种真正特殊的感觉。如果使用得当,手绘风格可以让你的酷信息图在浩瀚的互联网视觉海洋中更快地被看到和识别。
摄影
在信息图中包含摄影一点都不新鲜,但是它的使用方式确实令人印象深刻。许多很酷的信息图混合了手绘风格的设计和摄影,创造出一些非常有创意的视觉效果。
你如何利用这些趋势让你的信息图脱颖而出?
没有必要用你自己的内容去尝试这些趋势中的每一个。挑选一些符合你品牌风格的,看看你是否喜欢它们,它们是否能给你带来效果。在我们提到的趋势中,有些集中在数字风格的信息图表上,比如使用动画和第三方内容。其他人更倾向于艺术方面,比如静态信息图。
你对内容数字化的选择很大程度上取决于你的品牌和产品。如果你的服务是面向连接、网络、响应设计和数字营销,那么数字风格趋势可能是一个更好的选择。如果你是设计烹饪书的艺术家或者打印材料的教育者,更有创造性和艺术性的趋势可能更适合你的视觉内容。
当然,两种不同的趋势可以在同一个信息图中一起使用。一个动画微型信息图在。gif 格式可以在 Twitter 和 Instagram 上产生很大的影响(转换成. mp4 格式时)。就像我们在上面看到的,手绘设计和摄影真的很好地结合在一起,所以想象一个视频嵌入在同一信息图中的电视或手持设备的绘图中。可能性是无限的。
UXD 和 UID 如何帮助你制作更好的信息图?
当我们观察上述趋势时,我们提到了一些信息图是如何被视为网站的,以及一些网站是如何受到信息图的启发的。这种趋势的出现是因为网站和应用开发者使用的工具启发了信息图表的制作方式,反之亦然。
这些工具被称为用户体验设计(UXD) 和用户界面设计(UID) 。网站和应用程序设计人员和开发人员遵循 UXD 和 UID 规则来构建他们的项目。这两种实践是网站和应用程序运行的基础。
UXD 和 UID 到底是什么?
UXD
来自 Beaker 的 Ben Ralph 说:“用户体验设计是研究用户行为和理解用户动机,目的是设计更好的数字体验。”UXD 适用于网站和应用程序对用户点击和操作做出反应的方方面面。这完全是关于用户对数字平台的体验。
UID
用户界面设计更多的是关于一个网站或应用程序如何符合 UXD。它遵循平台功能的视觉图形方面。
UXD 和 UID 一起工作,确保一个网站或应用程序不仅看起来不错,而且运行良好。随着信息图越来越数字化,了解 UXD 和 UID 的工作方式将有助于您创建更好的信息图,并从您的设计中获得更好的结果。
这里有一些关于如何应用 UXD 和 UID 来创建很酷的信息图的提示
创建信息图时,首先要考虑的是将会看到它并与之交互的人:
- 他们是谁?
- 你想用你的信息为他们解决什么问题?
- 你的信息图的目的是什么?是销售线索磁铁还是视觉支持?
一旦你决定了你是为谁设计,就该计划信息流了。
- 在文案和视觉效果方面,到底需要包含哪些信息?
- 你如何在信息呈现的方式上变得有创造性?
- 评估信息图的导航:什么应该是交互式内容?
- 使用讲故事的技巧来增强信息图的体验和可用性。
在解决了 UXD 方面的问题之后,是时候构建信息图了。这是用户界面设计。
UID 的首要规则是忠于你的品牌。采取必要的步骤遵循你的 UXD 大纲,同时在颜色、字体、形状和视觉策略方面保持品牌。
- 使用对齐、间距和大小调整等设计工具构建信息图。
- 整合支持信息流的动画,而不是分散信息的注意力。
- 评估您可以包含第三方内容的地方,并确保它在视觉上非常合适。
当您完成信息图的构建后,请考虑在发布或发布前对其进行测试。请你的同事测试信息图,并询问他们对信息图的看法。评估结果并调整你的设计。
为什么你的信息图应该是移动友好的?
信息图表也应该是移动友好的,这并不奇怪,特别是因为人们平均在手机上花费 69%的媒体时间。他们很可能会先在智能手机上看到你的信息图,然后再在笔记本上看到。这就是为什么你的信息图在手机和桌面上都应该表现良好。它应该看起来不错,功能良好,易于滚动,可读,易于在所有设备上使用。UID 和 UXD 在这个意义上也可以帮助你的信息图。
让信息图在桌面和移动设备上都好看的最好方法是不要用过多的形状、颜色和字体。注意它在小屏幕上的大小。如果观众需要放大才能看到一条信息,那么这条信息就太小了。适合手机屏幕的信息图的理想宽度是 630 像素,比普通信息图的 800 像素略小。
结论:信息图表的未来是什么?
正如我们所见,信息图表的未来很大程度上取决于用户和观众。信息图比以往任何时候都更需要功能性和美观性。他们需要走得更远,探索比所呈现的信息更深远的可能性。
信息图表的未来在于数字和互动领域,用户将享受这一旅程,并记住它。
这就是为什么可以有把握地说,在 2018 年及以后,信息图表将更加数字化。随着时间的推移,多媒体信息图将变得越来越普遍。更多信息图表将保存为. html5,.gif 和. mp4 格式来维护动画和嵌入的第三方内容。我们甚至可能会看到虚拟现实中使用的信息图表,在虚拟现实中,用户可以用一种全新的方式与信息互动。
由于“糟糕的信息图表疲劳”的出现,静态信息图表的未来更加不确定我们相信,随着等距设计和品牌插图的使用,这种风格的信息图将会出现创造力和创新的激增。即使没有交互性,信息图也需要流畅并对用户产生影响。
将来你的信息图和其他的相比如何?这完全取决于你想在设计中承担的风险。
信息规划和朴素贝叶斯
用更少的例子学得更好
信息规划包括基于信息度量做出决策。信息规划与主动学习[1]和最优实验设计[2]密切相关,其中标记数据的获得是昂贵的。
主动学习背后的关键思想是,如果仔细选择训练样本以最大化特定任务的信息增益,那么模型可以用更少的标记样本学习得更好。换句话说,给定大量未标记的数据,我们希望根据它们在学习模型参数中的有用性对未标记的例子进行排序。前 K 个信息量最大的训练样本由专家标注器标注,并添加到训练集中。
这里,我们将考虑使用朴素贝叶斯图形模型的文本分类任务。我们将着眼于两种信息度量[3]:熵和互信息,它们将被用于为信息规划对未标记的文档集进行排序。
设 x_ij 为伯努利随机变量,指示{1,…,D}中的单词 j 对于{1,…,n}中的文档 i 的存在( x_ij = 1 )或不存在( x_ij=0 ),由θ_ JC 参数化(单词 j 出现在类 c 中的概率)
另外,设 pi 是代表类别标签上的先验的狄利克雷分布。因此,可学习参数的总数是|theta| + |pi| = O(DC) + O© = O(DC),其中 D 是字典大小, C 是类别数。由于参数数量少,朴素贝叶斯模型不会过度拟合。
伯努利朴素贝叶斯公式的选择很重要,因为它导致了基于单词的信息规划。通过将字典中的每个单词与一个二进制随机变量相关联,我们能够计算单个单词对类别标签分布的影响。
我们可以将类条件密度写为:
我们可以通过最大化对数似然来推导朴素贝叶斯推理算法。考虑单个文档中的单词x _ II:
使用朴素贝叶斯假设,我们可以计算对数似然目标:
通过将 log p(D|theta)相对于模型参数 pi_c 和 theta_jc 的梯度设置为零,我们获得以下 MLE 更新:pi_c = N_c/N 和 theta_jc = N_jc / N_c 其中 N_c = sum(1[y_i = c])。
请注意,为伯努利随机变量添加β先验和为类密度添加 Dirichlet 先验以平滑 MLE 计数是很简单的:
在测试期间,给定训练数据 D 和学习的模型参数,我们想要预测类别标签 y 。应用贝叶斯规则:
将分布代入 p(y=c|D) 和 p(x_ij|y=c,D) 并取对数,我们得到:
伯努利朴素贝叶斯的贝叶斯公式在 scikit-learn [5]中使用上述步骤实现。虽然从零开始(用更快的语言,如 C++)派生和实现 ML 算法是一个很好的实践,但我们将使用 scikit-learn 实现,并专注于信息规划。下面的 ipython 笔记本中有全部代码。
我们将在20 个新闻组数据集的子集上训练我们的模型。特别是,我们将自己限制在 4 类:空间,图形,汽车和曲棍球。我们将使用计数矢量器来生成每个文档的字数矢量,同时过滤停用词和低频词。
熵规划
熵衡量随机变量中的不确定性。在基于熵的规划中,我们希望根据类别标签的熵对测试文档进行排序。这个想法是,通过注释对其类标签具有最高不确定性的文档,将能够用更少的注释示例更好地训练我们的模型。在类分布的情况下,熵可以以封闭形式计算:
*#rank test documents according to entropy of their class label*
top_K = 20
X_test_class_logp = nb_clf.predict_log_proba(X_test_vec)
X_test_class_entropy = -np.sum(np.exp(X_test_class_logp) * X_test_class_logp, axis=1)
planning_entropy_idx = np.argsort(X_test_class_entropy)[-top_K:]
相互信息规划
在交互信息的情况下,我们需要选择我们想要用于规划的随机变量。既然我们对文档分类感兴趣,选择 y_i (文档 i 的类标签)作为变量之一是有意义的。我们对第二个变量的选择取决于感兴趣的数量。我们可以选择一个全局变量 theta_jc(单词 j 出现在类 c 中的概率)或者 pi_c(类 c 的概率)。在这个例子中,我们考虑估计 MI(y _ I;theta),即我们感兴趣的是在给定测试文档的类别标签 y_i 的情况下,测量关于单词分布 theta 的信息增益。因为两个变量都是离散的,所以可以以封闭形式估计互信息:
我们可以使用全概率法则计算p(θ):
此外,我们计算 MI(x _ j;pi)来衡量每个单词 x_j 对全局标签分布 pi 的信息量。
*#rank test documents according to mutual information (MI) between class labels and theta*
log_pi = nb_clf.class_log_prior_ *#log pi(c) global*
log_py = nb_clf.predict_log_proba(X_test_vec) *#log py(c) per doc*
log_pxy = nb_clf.feature_log_prob_ *#log pxy(c,j) = log p(x_ij = 1 | y = c)*
[C,D] = log_pxy.shape
log_pi_tile = np.tile(log_pi.reshape(-1,1), log_pxy.shape[1])
*#log px(j) = log [\sum_c p(x_ij = 1 | y = c) x p(y = c)]*
*# = log [\sum_c exp{log_pxy(c,j) + log_pi(c)}]*
log_px = logsumexp(log_pxy + log_pi_tile, axis=0)
*#MI between x_j and pi*
X_test_word_MI = np.zeros(D)
**for** class_idx **in** range(C):
X_test_word_MI = X_test_word_MI + \
np.exp(log_pi[class_idx]) * np.exp(log_pxy[class_idx,:]) * np.log(np.exp(log_pxy[class_idx,:])/np.exp(log_px)) + \
np.exp(log_pi[class_idx]) * (1-np.exp(log_pxy[class_idx,:])) * np.log((1-np.exp(log_pxy[class_idx,:]))/(1-np.exp(log_px)))
*#end for*
*#MI between y_j and theta*
logp_theta = logsumexp(log_pxy + log_pi_tile, axis=0)
X_test_docs_MI = np.zeros(X_test_vec.shape[0])
**for** doc_idx **in** range(X_test_vec.shape[0]):
doc_MI = 0
**for** class_idx **in** range(C):
doc_MI += np.sum(np.exp(log_pxy[class_idx,:] +
log_py[doc_idx, class_idx]) * \
(log_pxy[class_idx,:] - logp_theta), axis=-1)
*#end for*
X_test_docs_MI[doc_idx] = doc_MI
*#end for*
planning_MI_idx = np.argsort(X_test_docs_MI)[-top_K:]
让我们来看看每门课学习的单词概率:
我们可以显示上面与每个类别相关的前 10 个(最高概率)单词:
课堂十大单词:0
get 请像任何人一样使用感谢图形会知道课堂十大词汇:1
想想也知道汽车变得像一辆汽车班级十大单词:2
赛季年第一次打曲棍球课堂十大单词:3
美国国家航空和宇宙航行局可能知道得更多,就像太空一样
让我们来看看前 20 个(MI 最高的)信息词汇:
前 20 名 MI 单词:
球队计划联赛月球季后赛轨道球员地球游戏 nasa nhl 玩汽车赛季图形曲棍球队游戏汽车空间
还不错!考虑到地面真相标签是:
地面实况标签:
科学.空间.计算机.图形.记录.汽车.记录.运动.曲棍球
我们可以看到,最高 MI 的单词很好地反映了地面真相标签。
最后,让我们可视化基于熵和互信息的测试文档排序:
特别地,我们对离群值感兴趣,即具有最高熵和互信息的文档。从上面的 violin 图中,我们可以看到与高熵文档相比,高 MI 测试文档的密度更大,这表明 MI 可以更好地区分哪些文档最适合信息规划。
在离散 X 和 Y 的情况下,为了最大化信息增益 I(X;Y),我们想要最大化 H(X)(关于 X 的不确定性)和最小化 H(X|Y)(即我们想要 Y 关于 X 的信息性)。
为了可视化熵和基于 MI 的计划之间的差异,我们可以根据熵对文档进行排序,并使用相同的索引对 MI 进行排序。
在上图中,具有高熵但低 MI 的文档是不确定的,但不是信息丰富的。因此,管理信息为信息规划提供了更好的手段。
密码
下面的 ipython 笔记本中有全部代码。
结论
我们研究了两种用于选择训练样本的信息度量:简单朴素贝叶斯设置中的熵和互信息。虽然熵根据文档的不确定性对文档进行排序,但是 MI 也考虑了计划变量的信息量。通过主动选择训练样本,我们可以用更少的标记样本获得更高的准确率。信息规划可以在减少我们对大量训练数据的依赖方面发挥作用,尤其是在标签获取成本高昂的情况下。
参考
[1] B. Settles,“主动学习文献调查”,技术报告,2010 年
[2] K. Chaloner 和 I. Verdinelli,“贝叶斯实验设计:综述”,统计科学,1995 年
[3] T. Cover 和 J. Thomas,“信息理论的要素”,Wiley,2006 年
[4] K. Murphy,“机器学习:一种概率观点”,麻省理工学院出版社,2012 年
[5] F. Pedregosa 等人,“Scikit-learn:Python 中的机器学习:【T4
神经网络信息论
打开黑盒…稍微
“信息:概率的负倒数值.”—克劳德·香农
这个博客的目的不是理解神经网络背后的数学概念,而是从信息处理的角度来看神经网络。
编码器-解码器
在我们开始之前:
编码器-解码器不是两个 CNN/rnn 组合在一起!事实上也不一定是神经网络!
本来,信息论的一个概念。编码器只是简单地压缩信息,而解码器扩展编码后的信息。
在机器学习的情况下,编码和解码都是完全丢失的过程,即一些信息总是丢失。
编码器的编码输出被称为上下文向量,这是解码器的输入。
有两种方法可以设置编码器-解码器设置:
- 编码器反函数中的解码器。这样,解码器试图再现原始信息。这是用来消除数据噪声的。这个设置有一个特殊的名字,叫做自动编码器。
- 编码器是压缩算法,解码器是生成算法。这有助于将上下文从一种格式转换为另一种格式。
示例应用:
自动编码器:把英文文本压缩成矢量的编码器。解码器从向量生成原始英文文本。
编码器-解码器:将英文文本压缩成向量的编码器。解码器从向量生成原文的法语翻译。
编码器-解码器:将英文文本压缩成向量的编码器。从文本内容生成图像的解码器。
信息论
现在,如果我说每个神经网络,本身,是一个编码器-解码器设置;对大多数人来说,这听起来很荒谬。
让我们重新想象一下神经网络。
假设输入层是 X,它们的真实标签/类(存在于训练集中)是 y。现在我们已经知道神经网络找到了 X 和 y 之间的潜在函数。
所以 X 可以看成是 Y 的高熵分布,高熵是因为 X 包含了 Y 的信息,但它也包含了很多其他信息。
示例:
“这小子不错。”包含足够的信息来告诉我们它的“积极”情绪。
酪
它还包含以下内容:
1.是一个特定的男孩
2.只是一个男孩
3.句子的时态是现在时
这句话的非熵版本应该是“正的”。是的,这也是输出。我们过一会儿再回到这个话题。
现在想象每一个隐藏的层作为一个单一的变量 H(因此层将被命名为 H0,H1 ……H(n-1))
现在每一层都变成了变量,神经网络变成了马尔可夫链。因为每个变量只依赖于前一层。
所以本质上每一层都形成了一个信息的党派。
下面是一个神经网络的可视化马尔可夫链。
最后一层 Y_ 应该产生最小熵输出(相对于原始标签/类“Y”)。
这个获取 Y_ 的过程就是在 X 层的信息流经 H 层的时候对其进行挤压,只保留与 Y 最相关的信息,这就是信息瓶颈。
交互信息
I(X,Y) = H(X) — H(X|Y)
H ->熵
h(X)-> X 的熵
H(X|Y) ->给定 Y 的 X 的条件熵
换句话说,H(X|Y)表示如果 Y 已知,从 X 中去除了多少不确定性。
互信息的性质
- 当你沿着马尔可夫链移动时,互信息只会减少
- 互信息对于重新参数化是不变的,即在图层中混排值不会改变输出
重温瓶颈
在神经网络的马尔可夫表示中,每一层都成为信息的一个分区。
在信息论中,这些划分被称为相关信息的连续细化。你不必担心细节。
另一种方式是将输入编码和解码成输出。
因此,对于足够的隐藏层:
- 深度神经网络的样本复杂度由最后一个隐层的编码互信息决定
- 精度由解码的最后一个隐藏层的互信息决定
样本复杂度是一个人需要获得一定准确度的样本的数量和种类。
培训阶段的相互信息
我们计算相互之间的信息
- 层和输入
- 层和输出
Initial Conditions
最初,权重是随机初始化的。因此,关于正确的输出几乎一无所知。对于连续层,关于输入的互信息减少,并且隐藏层中关于输出的信息也很少。
Compression Phase
当我们训练神经网络时,图开始向上移动,表示关于输出的信息的获得。
酪
图也开始向右侧移动,表示后面层中关于输入的信息增加。
这是他最长的阶段。这里,图的密度最大,图集中在右上方。这意味着与输出相关的输入信息的压缩。
这被称为压缩阶段。
Expansion Phase
在压缩阶段之后,曲线开始向顶部移动,但也向左侧移动。
这意味着,在连续的层中,关于输入的信息会丢失,而在最后一层中保留的是关于输出的最低熵信息。
虚拟化
神经网络的马尔可夫链版本突出了一点,学习是从一层到另一层发生的。图层拥有预测输出所需的所有信息(外加一些噪声)。
所以我们用每一层来预测输出。这有助于我们窥视所谓黑盒的分层知识。
这给了我们一个视角,需要多少层才能对输出做出足够准确的预测。如果在较早的层达到饱和,则该层之后的层可以被修剪/丢弃。
这些层通常有数百或数千维。我们的进化不允许我们想象任何超越三维的事物。所以我们使用降维技术。
有各种方法来执行降维。克里斯托夫·奥拉有一个精彩的博客解释这些方法。我不会深入 t-SNE 的细节,你可以查看这个博客了解详情。
为了保持简洁,SNE 霸王龙试图降低维数,将高维空间的邻居保留在低维空间。因此,这导致了相当准确的 2D 和三维绘图。
以下是具有两层的语言模型的层图。
关于情节:
- 精选 16 个单词
- 使用最终的语言模型找到上述 16 个单词的 N 个同义词(2D 的 N=200,3D 的 N=50)
- 在每一层找到每个单词的表示向量
- 使用 t-SNE 找出以上所选单词及其同义词的 2D 和三维简化表示
- 绘制简化的表示
2D plots of Layer 1 and Layer 2
3D plots of Layer 1 and Layer 2
摘要
- 几乎每个深度神经网络都像一个编码器-解码器
- 大部分训练时间花在压缩阶段
- 层是自下而上学习的
- 在压缩阶段之后,神经网络对输入的遗忘越多,它就越准确(消除输入中不相关的部分)。
我已经把数学排除在这个博客之外了。如果你对信息论、博弈论、学习理论等数学足够熟悉,那么请观看 Mastero Naftali Tishby 的 视频 。
谢谢(-_- )/
InOut——从为期两天的黑客马拉松中学到的东西
班加罗尔频繁举办科技活动,有时同一天还会有不止一个好活动。谷歌的班加罗尔开发者大会原定于 10 月 13 日举行,而同一天也没有发布。我必须选择参加哪一个,因为我有参加两个的确认。由于我的朋友说,“你应该参加 InOut,这真的很好”,我花了 2 天的周末,与其他许多热情的开发者和创造者一起,与一个我以前不认识的人合作,建立了一个人脸识别的 web 应用程序,日夜进行对话和讨论。InOut 是一个社区黑客马拉松,已经举办了几年。今年,它收到了来自世界各地不同国家的 4000 多份申请,我很高兴我参加了这次黑客马拉松,因为我有一些很棒的收获。
黑客马拉松于周六早上开始(前一天晚上有一些技术讲座),我可以看到到处都是兴奋的面孔——这要感谢 InOut 的欢迎包。虽然它对每个人都开放,但大多数参与者都是大学生,很高兴看到他们提出一些非常好和有趣的想法。虽然黑客马拉松有一些感兴趣的话题,如区块链、人工智能、物联网、健康等,但参与者可以自由地构建和处理他们的任何想法。周六早上开始的几个小时有着复杂的场景。当一些参与者分组讨论他们的想法和构建方法时,一些人已经开始工作(或者编码!).
我和我的队友 Utkarsh(我在参加黑客马拉松之前并不认识他)讨论了一些我们想要尝试和构建的东西。大约一个小时后,我们最终决定建立一个自动化商店的工作模型,该模型使用人脸识别、物体检测和使用深度学习的支付自动化。他负责 UI 部分,而我负责使用 TensorFlow 进行人脸检测和识别的模型构建。从想法讨论开始,在接下来的 30 个小时的许多其他对话中,我们在一些事情上相互同意和不同意,所有这些都导致了更好的决策和改进的代码。这就是黑客马拉松所做的,他们提供平台和环境来提出想法,并在建立想法的过程中通过讨论和协议与团队相处。
由于我们每个人都在应用程序的两个不同部分工作,我们必须不时地整合这些变化。在协作时,版本控制是必须的。我把初始化我作为 Git 存储库工作的任何文件夹/工作区作为个人习惯,这样即使我不想把代码推到任何代码存储库中,我也可以用它来跟踪变化。使用代码时,许多事情都可能出错。运行良好的代码可能会突然崩溃。你可能会花时间试图解决一些不是实际问题的东西。出于所有这些原因,每当一个特性/功能工作时,进行一次提交,以便有一个工作状态作为备份!如果你正在开发的应用程序在你需要演示之前一个小时就中断了(这种情况就发生在我们身上),这就有很大的不同了!
Swags & Stickers — Pic Credit
周六午夜左右,我们和黑客马拉松组织者开了一个社区会议。我是为数不多的出席者之一。虽然我认为这只是一个讨论会议,但几分钟后我意识到这不是。InOut 现已成为印度最大的社区黑客马拉松之一,它是几年前从一个大学活动开始的。组织者,也是 InOut 的创始人,分享了他们开始一个大学水平的活动,然后发展成为像这样大的黑客马拉松的经历。大多数参与讨论的人都是大学生,他们也在组织大学级别的技术活动。他们分享了考虑到所涉及的成本以及缺乏大学的适当支持,他们组织一次社区活动有多困难。的确,组织一次社区活动需要付出很多努力!
由于我们在午夜后试图修复一个代码问题,我们认为最好睡一会儿。在我睡觉之前,我想再试一次来解决这个问题。代码错误很棘手。他们不断告诉你,他们可以在不超过 5-10 分钟内修复,然后你花了几个小时,修复错误,然后感觉鼓励你继续工作。差不多同样的事情也发生在我身上。当我彻夜未眠,让应用程序变得更好更实用时,第二天早上,黑夜进行了报复,它让我像僵尸一样走来走去!在这整个过程中,时间过得飞快…
组织者确保我们在会场度过的两天不仅仅是编码。不时会有食物、能量饮料、竞赛、赠品,还有纳什·维尔,他在整个黑客马拉松中登台表演,让环境充满活力。在黑客马拉松快结束的时候,我们在其他参与者的帮助下验证了我们构建的自动签入和签出应用程序是如何工作的。而且效果相当不错!!获奖者呢?有一些非常有趣的提交,但得到大多数评委投票和参与者最大掌声的是 SAD,它代表悲伤的分布。随着计算设备在我们周围的出现,设备的空闲时间可以用于分布式计算。SAD 就是建立在这个理念上的。恭喜👏 👏
黑客马拉松让我们能够提出想法,并提供一个强化和推动我们实现目标的环境。非常感谢 InOut 组织了如此精彩的活动!!
TL;博士:
黑客马拉松是将你的想法转化为解决方案的绝佳机会
注册,组建团队,集思广益,开始编码(看这很简单)
仅仅保存代码是不够的。提交代码,提交,提交!!!
你不一定要成为极客/忍者/黑客才能参加黑客马拉松👍
走进这样一个黑客马拉松,你会得到代码(不管它是否有效😉),新朋友和美好的经历👏 👏
还有赃物👌
下面是我们在黑客马拉松期间构建的 web 应用程序的演示。我继续对它进行研究,并将其转化为一个身份管理系统,该系统通过将人口统计信息与人脸结合起来注册身份,并使用深度学习模型进行人脸检测和验证。这项工作仍在进行中,还有更多的功能需要添加:
你觉得这篇文章有用吗?欢迎留下任何反馈/意见。感谢阅读!!😃
在伯顿,在你的衣服上喷洒隐形数据
在读完阿尔多斯·赫胥黎的《勇敢新世界》后,我醒来时对世界有了这种反乌托邦的看法,在那里,的数据将以人眼看不见的方式写在物体上。例如,在你的 t 恤上。想象一下,你的衣服被一波看不见的二进制数据写入,在这些数据中,没有人能看到、感觉到、闻到和破译。像喷雾一样,这种技术可以用于,例如,如果你进入一家商店,机构想在你的衣服上写一个“cookie”来跟踪你的访问。使用传感器,他们可以跟踪,例如,你什么时候进入商店,你在哪里,你在一个特定的产品前花了多少时间。我给它起了个名字:‘in perton’——不可见的持久原子数据。
我们消费的数据很大一部分是我们能看到的数据。自从有了印刷机,书面语言现在无处不在:在这篇文章中,街道上的标志,衣服标签,杂志,瓶子标签,说明书。也就是说,我们不使用任何解码设备就可以看到和理解的数据。另一方面,大量的数据以二进制格式存储在我们电脑的硬盘中。虽然我们无法读取这些数据,但我们知道设备是一个数据容器。我们知道数据就在那里。硬件的唯一目的是存储数据,因此,如果我们破坏存储卡或 DVD,数据就消失了。
在 19 世纪早期,一种新的数据格式被引入。电磁波的发现为“看不见的数据”创造了机会。模拟和数字数据就像空气中弥漫的烟雾一样在我们周围流动。电台、Wi-Fi 网络、电视信号就在我们面前,只是我们看不见而已。这个故事的好处在于这些看不见的数据是不稳定的。使用它或者失去它。我们只能使用现在正在产生的电波,但我们无法恢复昨天由我们的电台产生的电波。基本上,它不会“粘”在任何地方。然而,不可见的数据已经可以通过其他方式存储和检索。
IBM 的研究人员去年成功地在单个原子上存储了数据。这对于减小硬盘的物理尺寸是一个巨大的成就,但这并不意味着这些原子可以被“喷射”到物体中,并以有序的方式被取回。DNA 储存也已经成为可能。研究人员能够存储数百万数据,包括从莎士比亚的十四行诗到马丁·路德·金的演讲。这种 DNA 储存可以持续数千年。分子可以被插入物体中以获得永久数据。然而,DNA 数据存储的排序和检索是复杂的。
在一个不太危险的用途上,该技术与区块链结合,可用于强制私有财产。就像序列号一样,每个产品都可以在它的分子上包含唯一的 id。举例来说,如果你买了一辆车,它的底盘上不会有 VIN 号码,它会出现在车的每个部分。所有的部件、轮胎、车轮和保险杠都会包含这个数字,不销毁它就无法删除。
如果研究人员能够找到一种更简单的方法来重新排列衣服的纤维、物质的原子或植入易于写入或检索的 DNA,这将是下一个技术突破。类似于核能的发现,会带来很多伦理上的担忧。数据变得越来越有价值,许多机构正在研究存储、检索和分析数据的替代方法。
看不见的数据很难被发现,先进的加密算法几乎无法破解。和其他任何技术一样,储存在粒子上的隐形持久数据可以用于好的方面或坏的方面。看看你现在的衬衫,问问自己:上面有看不见的数据吗?吓人?是的…但也许这就是我们勇敢的新世界。
磷的内幕:见见 Roman Shraga,数据科学家!
嘿,罗曼,给我们介绍一下你自己吧!
我两岁的时候,我们全家从乌兹别克斯坦移民到布鲁克林,我在纽约这里长大。我在布朗大学主修计算机科学,我大学毕业后的第一份工作是在微软,在那里我所在的团队专注于构建机器学习模型,以增强在微软搜索引擎 Bing 上的体验。之后,我在一家名为 PlaceIQ 的公司工作了两年,在那里我建立了分析管道来处理和分析万亿字节的数据。现在,我正与遗传学家、分子生物学家和工程师合作,利用我的数据科学技能释放基因组学的全部力量。
你在磷公司的头衔是什么?你为公司做什么?
我的头衔是数据科学家,我的职责包括使用机器学习和统计学从数据中获取价值。作为一家基因组公司,我们有许多数据来源:来自我们实验室的原始基因信息、我们的研究合作伙伴与我们共享的临床数据,以及来自我们应用程序的各种使用和物流数据。我的工作就是利用这些数据回答问题,改进我们的产品。
你最喜欢你工作的什么?
我喜欢我们所做的工作对人们的生活产生切实的影响。无论我们开发一种新的分析方法,改进我们的流程,还是拓展研究的范围,我们的工作都会有所作为。这种环境促进学习,鼓励协作,让每个人都想超额完成任务。每天和一群分享这些价值观的人一起工作真的是一种特权。
在磷公司工作,你学到了什么?
我学到了这么多,很难保持这个答案简短!我已经了解了人类生物学的复杂性和美丽,了解了医疗保健生态系统,了解了运行临床实验室需要什么,了解了生物信息学和基因组学数据,了解了现代软件改善复杂过程功能的能力。
到目前为止,你最喜欢的项目是什么?
我最喜欢的项目是使用下一代测序数据构建检测拷贝数变异的工具。拷贝数变异是基因结构变异的一种重要类型,已知在某些情况下会导致疾病。准确检测这些是临床遗传学的一项重要能力,但由于各种原因,这样做具有挑战性。我一直致力于开发标准化技术和算法来揭示这些变体。
你有个人的口头禅吗?
就数据建模而言,我认为复杂性是必须赢得的。也就是说,我认为您应该选择尽可能简单的模型,并证明您引入的任何额外的复杂性在性能方面都有可衡量的好处。在我的领域中,人们经常会对使用一个闪亮的新工具感到兴奋,即使它对一个更简单、更容易理解、更容易维护的解决方案没有任何好处。
告诉我们一些大多数人不知道的你的事。
我是烹饪和家居装修节目的狂热观众。顶级厨师和房屋猎人是我的最爱。
明年空闲时间你最期待的一件事是什么?
十二月初,我要养一只小狗了!
你有什么爱好吗?
我喜欢发现新的有趣的地方。我喜欢住在纽约的一个原因是,总有一家新餐馆可以尝试,一个有趣的活动可以参加,或者一个未被发现的街区可以逛逛。我尽可能经常尝试新事物。
哪种口味的冰淇淋最适合你?
薄荷巧克力片。
在 Tensorflow(直方图、激活、内部/整体梯度)中具有交互式代码的神经网络的思维内部[带 TF 的手动背部道具]
GIF from this website
很长时间以来,我一直想了解我的模型的内部运作。从今天开始,我希望了解与这个主题相关的话题。在这篇文章中,我想涵盖三个主题,权重直方图,可视化神经元的激活,内部/积分梯度。
请注意,这篇文章是为了我未来的自己来回顾这些材料。
在上阅读之前
Original Video from TechTalksTV (https://vimeo.com/user72337760) If any problem arises I will delete the video asap. Original video Link here: https://vimeo.com/238242575
这个视频超出了本文的范围,但它确实帮助我理解了内部和积分梯度,以及如何理解神经网络内部工作的概述。
数据集/网络架构/精确度/类别号
Image from this website
红色矩形 →输入图像(32323)
黑色矩形 →与 ELU 卷积()有/无平均池
橙色矩形 → Softmax 进行分类
像往常一样,我们将使用 CIFAR 10 数据集来训练我们的全卷积网络,并尝试了解为什么网络会将某些图像预测到它的类别中。
有一点需要注意,因为这篇文章更多的是关于了解网络的内部运作。我将只使用测试集中的 50 张图片来衡量准确性。
左图像 →测试图像(50 张图像)的精度/时间成本
右图像 →训练图像(50000 张图像)的精度/时间成本
如上所述,该模型在第 7 个时期的最终精度为 81%。(如果您希望访问完整的培训日志,请点击此处。)最后,让我们看看每个类的每个数字代表什么。
Image from this website
权重直方图(训练前/后)
Histogram of weighs before training
上图是每一层的权重直方图,为了便于可视化,我将每一层直方图分为三层。在最左侧,我们可以观察到权重的平均值通常为 0,标准偏差(stddev)值在 0.04 到 0.06 之间。这是意料之中的,因为我们用不同的 stddev 值声明了每个层。此外,一些曲线比其他曲线小的原因是由于每层的权重数不同。(例如,层 0 仅具有 3 * 3 * 128 的权重,而层 2 具有 3 * 128 * 128 的权重。)
Different stddev values
Histogram of weighs after training
马上,我们可以观察到一个明显的差异。尤其是前三层。分布的范围从-5 增加到 5。然而,看起来大部分权重存在于-1 和 1 之间(或者接近于零。)对于第 4 层到第 6 层,看起来平均值和最后三层一样发生了偏移。
可视化某些层的激活值
Test Input for the network
使用由约辛斯基和他的同事完成的技术,让我们想象上面的图像是如何在第 3、6 和 9 层之后被修改的。(请注意,我最初在这篇博文中发现了亚瑟·朱利安尼使用的方法。)
Activation after layer 3
绿框 →捕捉绿色值的通道
蓝框 →捕捉蓝色值的通道
现在有 128 个频道,所以我就不一一列举了。相反,我会想象前 27 个通道,如上所示。我们可以看到,在第 3 层之后,某些颜色值在网络中被捕获。
Activation for layer 6
红色框 →捕捉红色的通道
然而,在第六层之后,似乎某些过滤器能够比绿色或蓝色更好地捕捉红色。
Activation after layer 9
最后,在第九层之后(就在全局平均汇集之前),我们可以可视化深度为 1 的每个通道(因此它看起来像灰度图像)。然而(至少对我来说),它似乎不是人类可以理解的。所有的图片都可以在这里找到并且我创建了一个 GIF 来累积所有的变化。
GIF 的顺序 →输入图像,第 3 层后激活,第 6 层后激活,第 9 层后激活
内部渐变/正负属性
alpha value of 1.0
现在让我们使用内部渐变,阿尔法值为…
0.01,0.01,0.03,0.04,0.1,0.5,0.6,0.7,0.8,1.0(与原始输入相同),来形象化的表现网络的内部运作。
上面的所有图像都代表了相对于具有不同 alpha 值的输入的梯度。我们可以观察到,随着 alpha 值的增加,由于网络中的饱和度,梯度变得更接近 0(黑色)。当我们以 gif 格式查看所有图像时,我们可以清楚地看到渐变是如何变化的。
然而,我能够做出一个有趣的观察,随着 alpha 值变小,我的网络无法做出正确的预测。如下所示,当 alpha 值很小(0.01)时,网络通常预测 3 或 4。(猫/鹿)
红框 →车型预测
但是随着 alpha 值的增加,最终达到 1.0,我们可以观察到模型的准确性增加了。最后,让我们看看每个 alpha 值的渐变的正负属性。
蓝色像素→ 正属性覆盖原始图像
红色像素→ 负属性覆盖原始图像
同样,如果我们用这些图像创建一个 gif,会更容易看到变化。
积分梯度/正负属性
左图 →步长为 3000 的积分梯度黎曼近似
右图 →蓝色表示正属性,红色表示负属性
最后,当我们使用积分梯度来可视化梯度时,我们可以观察到类似上面的东西。我发现的一个非常有趣的事实是,网络是如何预测马(7)、狗(5)和鹿(4)的。
让我们先看看原始图像,如左上图所示,中间的图像是马,右边的图像是羊。
当我们可视化积分梯度时,我们可以看到一些有趣的东西。如中间的图片所示,网络认为马的头部是最重要的。但是,只拍头部的时候,网络以为是狗的形象。(它看起来有点像一只狗)。类似的故事对于右图,当网络只考虑到只有一只羊的头时,它预测为看到一只狗。
然而,如最左边的图像所示,当网络获得一匹马的整体形状(包括人类的某个部分)时,它会正确地将图像识别为一匹马。太神奇了!
互动码
对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!同样为了透明,我在 github 上上传了所有的训练日志。
最后的话
由于这个领域仍在成长和发展,将会有新的方法和发现。(我希望我也能为这些发现做出贡献。).最后,如果你想访问来自论文原作者的代码"请点击这里。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的推特这里关注我,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。
参考
- http://公理/定义/定理/证明。(2018).YouTube。检索于 2018 年 6 月 14 日,来自https://www.youtube.com/watch?v=OeC5WuZbNMI
- 公理—字典定义。(2018).Vocabulary.com。检索于 2018 年 6 月 14 日,来自https://www.vocabulary.com/dictionary/axiom
- 深度网络的公理化属性–穆昆德.孙达拉扬,安库尔.塔利,严琦琦。(2017).Vimeo。检索于 2018 年 6 月 14 日,来自https://vimeo.com/238242575
- STL-10 数据集。(2018).Cs.stanford.edu。检索于 2018 年 6 月 15 日,来自 https://cs.stanford.edu/~acoates/stl10/
- 贝嫩森河(2018)。分类数据集结果。rodrigob . github . io . 2018 年 6 月 15 日检索,来自http://rodrigob . github . io/are _ we _ there _ yet/build/classification _ datasets _ results . html # 53544 C2 d 3130
- [复本],H. (2018)。如何在 Matplotlib (python)中隐藏轴和网格线?堆栈溢出。检索于 2018 年 6 月 16 日,来自https://stack overflow . com/questions/45148704/how-to-hide-axes-and-gridlines-in-matplotlib-python
- VanderPlas,J. (2018)。多重支线剧情| Python 数据科学手册。jakevdp . github . io . 2018 年 6 月 16 日检索,来自https://jakevdp . github . io/python datascience handbook/04.08-multiple-subplots . html
- Matplotlib . py plot . subplot-Matplotlib 2 . 2 . 2 文档。(2018).Matplotlib.org。检索于 2018 年 6 月 16 日,来自https://matplotlib . org/API/_ as _ gen/matplotlib . py plot . subplot . html
- matplotlib,m. (2018)。matplotlib 中超过 9 个支线剧情。堆栈溢出。检索于 2018 年 6 月 16 日,来自https://stack overflow . com/questions/4158367/more-than-9-subplots-in-matplotlib
- pylab_examples 示例代码:subplots _ demo . py—Matplotlib 2 . 0 . 0 文档。(2018).Matplotlib.org。检索于 2018 年 6 月 16 日,来自https://matplotlib . org/2 . 0 . 0/examples/pylab _ examples/subplots _ demo . html
- Matplotlib . py plot . hist-Matplotlib 2 . 2 . 2 文档。(2018).Matplotlib.org。检索于 2018 年 6 月 16 日,来自https://matplotlib . org/API/_ as _ gen/matplotlib . py plot . hist . html
- Python?,I. (2018)。在 Python 中有没有一个干净的生成折线图的方法?。堆栈溢出。检索于 2018 年 6 月 16 日,来自https://stack overflow . com/questions/27872723/is-there-a-clean-way-to-generate-a-line-histogram-chart-in-python
- Pyplot 文本— Matplotlib 2.2.2 文档。(2018).Matplotlib.org。检索于 2018 年 6 月 16 日,来自https://matplotlib . org/gallery/py plots/py plot _ text . html # sphx-glr-gallery-py plots-py plot-text-py
- 【谷歌/ ICLR 2017 /论文摘要】反事实的梯度。(2018).走向数据科学。检索于 2018 年 6 月 16 日,来自https://towards data science . com/Google-iclr-2017-paper-summary-gradients-of-counter factuals-6306510935 F2
- NumPy . transpose—NumPy 1.14 版手册。(2018).Docs.scipy.org。检索于 2018 年 6 月 16 日,来自https://docs . scipy . org/doc/numpy-1 . 14 . 0/reference/generated/numpy . transpose . html
- 命令,G. (2018)。Git 在一个命令中添加和提交。堆栈溢出。检索于 2018 年 6 月 16 日,来自https://stack overflow . com/questions/4298960/git-add-and-commit-in-one-command
- 如何将图像切片为红色,g. (2018)。如何使用 misc.imread. Stack 溢出将图像分割为红色、绿色和蓝色通道。检索于 2018 年 6 月 16 日,来自https://stack overflow . com/questions/37431599/how-to-slice-a image-into-red-green-and-blue-channels-with-misc-imread
- 如何在 Windows 10 上安装 Bash shell 命令行工具?(2016).Windows 中央。检索于 2018 年 6 月 16 日,来自https://www . windows central . com/how-install-bash-shell-command-line-windows-10
- Google Colab 免费 GPU 教程—深度学习火鸡—中等。(2018).中等。检索于 2018 年 6 月 16 日,来自https://medium . com/deep-learning-turkey/Google-colab-free-GPU-tutorial-e 113627 b9f5d
- 安装— imgaug 0.2.5 文档。(2018).img aug . readthe docs . io . 2018 年 6 月 16 日检索,来自http://img aug . readthe docs . io/en/latest/source/installation . html
- NumPy . absolute—NumPy 1.14 版手册。(2018).Docs.scipy.org。检索于 2018 年 6 月 16 日,来自https://docs . scipy . org/doc/numpy-1 . 14 . 0/reference/generated/numpy . absolute . html
- NumPy . clip—NumPy 1.10 版手册。(2018).Docs.scipy.org。检索于 2018 年 6 月 16 日,来自https://docs . scipy . org/doc/numpy-1 . 10 . 0/reference/generated/numpy . clip . html
- NumPy . percentile—NumPy 1.14 版手册。(2018).Docs.scipy.org。检索于 2018 年 6 月 16 日,来自https://docs . scipy . org/doc/numpy/reference/generated/numpy . percentile . html
- CIFAR-10 和 CIFAR-100 数据集。(2018).Cs.toronto.edu。检索于 2018 年 6 月 16 日,来自https://www.cs.toronto.edu/~kriz/cifar.html
- [ ICLR 2015 ]追求简单:具有交互码的全卷积网。(2018).走向数据科学。检索于 2018 年 6 月 16 日,来自https://towards data science . com/iclr-2015-forwards-for-simplicity-the-all-convolutional-net-with-interactive-code-manual-b 4976 e 206760
- EN10/CIFAR。(2018).GitHub。检索于 2018 年 6 月 16 日,来自https://github.com/EN10/CIFAR
- 深度网络的公理化属性–穆昆德.孙达拉扬,安库尔.塔利,严琦琦。(2017).Vimeo。检索于 2018 年 6 月 16 日,来自https://vimeo.com/238242575
- (2018).Arxiv.org。检索于 2018 年 6 月 16 日,来自https://arxiv.org/pdf/1506.06579.pdf
- 黎曼和。(2018).En.wikipedia.org。检索于 2018 年 6 月 16 日,来自https://en.wikipedia.org/wiki/Riemann_sum
洞察路线——有效志愿者数据科学项目的七个步骤
Photo by Kevin Ku from Pexels
Insight Lane 背后的团队:D4D 碰撞模型最近发布了他们项目的版本 1.2 ,这是一个重大的升级,解决了项目技术堆栈中的许多基础问题,将允许未来更快更好的开发。
虽然我们都对我们在这个版本中取得的具体成就感到非常自豪和兴奋,但我最喜欢的方面是看到团队使用结构良好的计划和有效的项目管理技术富有成效地协作。规划和项目管理有时被视为在数据科学中完成“实际工作”的不便或阻碍,但我们的经验表明,它们是项目成功和团队快乐的基础。
志愿技术项目往往遵循一条既定的弧线:个人或团体从一个令人信服的想法开始。首先是巨大的热情——聊天渠道建立起来了,源源不断的好想法和有趣的文章被分享。代码库被创建,并且有一系列的初始提交。当然,对于项目将如何发展并最终达到目标,还没有投入太多的思考,但是嘿,我们有热情,我们正在建设!
Photo by Startup Stock Photos from Pexels
然而,随着时间的推移,这种热情开始消退。很快,每日代码提交变成了每周,然后是每月。困难的决策被推迟,因为它们涉及太多的工作,并且影响项目的太多领域,这通常会进一步减慢进度。现有团队成员开始渐行渐远,新成员也没有成功加入,因为他们不知道从哪里开始,也不知道如何跟上进度。
Insight Lane 团队已经活跃了一年多,在此期间,项目的性质发生了重大变化。最初只是与美国的一个城市合作,现在已经发展成为一种工具,可以帮助世界上任何一个城市实现更安全的道路。这种方向上的变化带来了在更广泛的背景下考虑每个问题的需要——城市以多种不同的方式记录和存储数据,一些数据源的覆盖范围不一致,项目的总体复杂性急剧增加。我们的最终目标是让所有参与城市在推进道路安全事业中相互分享他们的见解,利用集体智慧的力量,而不是在孤立的孤岛中运作。
为了解决这种新方法的挑战,同时保持专注和高效,团队实施了许多不同的项目管理技术,这些技术可能对希望启动自己的项目的新团队有用。它们中的每一个都有促进有效沟通和朝着明确定义的目标不断前进的想法。
1。定期会议
Insight Lane 团队每周三东部时间下午 6 点通过 Google Hangouts 召开一个小时的会议。这个时间很方便,因为它允许来自不同时区的成员参加。我们有一个轮流主持会议的时间表,这让每个人都有机会确保他们的想法被听到和讨论。这种格式可以适应那一周需要解决的任何问题,但总是包括重要的日程安排,如审查正在进行的任务和更新与外部小组的讨论。
2。任务跟踪
一个项目最终是其各个部分的总和,而在一个数据科学项目中,必然会有很多移动的部分!如果某件事情值得讨论,那么通常就值得采取行动,试图在没有结构化流程的情况下组织任务会很快变得难以管理。任务跟踪对于了解当前正在进行的工作、谁在做以及还有什么需要做是非常重要的。我们的团队已经选择使用 GitHub Issues,它与我们的项目代码库和其他 GitHub 功能(如拉请求)很好地集成在一起。任务存储在逻辑列表中(待办事项、进行中、已完成和等待),每个任务的完整通信历史都很容易看到。
3。项目里程碑
将我们的项目组织成具有清晰范围的发布里程碑,对于确保我们总是致力于增加价值的事情来说是一个巨大的胜利。在这个过程中,我们再次选择了 GitHub,使用它的“项目”特性。通常,当我们接近一个发布的工作范围的末尾时,我们会设定一个完成的时间表,这可以真正地帮助激励团队完成他们的任务,而不是延迟发布。
4。自由交流
虽然项目面临的大部分重大问题都是在例会上通过使用我们的任务跟踪软件来讨论的,但通过使用实时聊天服务,从事同一任务的团队成员之间往往可以在短时间内取得很大进展。还可以分享新的想法,以激发关于项目下一步可能走向的进一步讨论。我们通过 DataForDemocracy 的 Slack 环境有一个专门的项目通道,我们用它来深入研究技术问题、发送测试文件和一般的项目聊天。这也是在团队中培养团队精神的一个重要方法,这对于保持参与和投入是至关重要的。
5。新用户入职流程
每个团队都可以从新成员的到来中受益,他们带来了新的想法和观点以及额外的能力。不幸的是,一旦一个项目达到一定的复杂程度,新成员如果不花大量的时间让他们熟悉情况,就很难参与进来,这通常会导致很高的退出率。为了缓解这种情况,Insight Lane 团队邀请每一位加入我们渠道的新成员使用我们在版本 1.1 中开发的既定管道流程登上一座新城市。这使得新成员阅读我们的文档并为自己运行代码,通常是根据他们自己城市的数据,这提供了一个有趣且相关的起点。它还帮助我们发现我们假设中的未知边缘情况,因为每个城市都是不同的,并确定我们的文档不像我们认为的那样清晰的区域。
6。代码管理&评审
数据科学团队由个人组成,每个人都有自己的经验和对所用技术的熟悉程度。对于什么样的工作标准是可接受的,会有不同的期望,因此使用一些行业实践和工具有助于建立项目基线。我们的团队有一个惯例,在没有首先被审查之前不合并代码,并且使用 Travis 持续集成来确保现有的功能不会受到负面影响。此外,我们最近开始使用 Codecov,这是一个工具,旨在提供一个简单的度量,来衡量我们的代码有多少被自动化测试所覆盖。通过将新功能与新测试相匹配,我们试图确保这个数字不会因为添加代码而减少。
7。使用适当的技术
数据科学团队需要了解有哪些新工具可用,以确保他们以最佳方式实现目标。但是如今技术领域变化很快,有很多很酷的语言、应用和服务可供使用,这意味着很容易陷入兔子洞,而这不一定会推动项目向前发展。广泛使用并有良好记录的技术和语言是很好的选择,那些允许重用现有模块的技术和语言也是如此。鉴于我们项目的数据驱动性质,Python 是一个很好的选择,有许多机器学习和数据分析模块可以提供帮助。团队成员的计算机和设置很可能是各种标准的混合,因此找到在不同环境中一致工作的方法也是一个好主意。Docker 容器在这方面帮了我们大忙。
七个步骤,一个目标
Photo by Kaique Rocha from Pexels
乍一看,这些技术都集中在提高项目的效率上,但是在更重要的层面上,它们致力于提升团队成员的 T2 乐趣。志愿者项目可能是艰苦的工作。现代世界不断吸引着你的注意力,在常规工作或学习之外找时间免费工作是很困难的。拥有一种进步感、成就感和团队精神可以让一个项目变得令人愉快,我相信这是 Insight Lane 长期保持稳定和高效的重要原因。最终,任何项目都取决于它的员工,当员工参与其中并感受到价值时,他们处于最佳状态。
原载于 2018 年 8 月 21 日medium.com。
来自纽约市 DATAx 会议 7 场会议的见解(2018 年 12 月)
纽约 DATAx 大会(创新企业峰会)于 2018 年 12 月 12 日和 13 日举行。该活动分为五个平行的赛道会议,侧重于不同的领域,并允许参与者从一个赛道流向另一个赛道。虽然我不能参加每一次会议,但这里有一些我听过的精彩演讲。
让数据变得有用
凯西·科兹尔科夫,谷歌首席决策科学家
Cassie Kozyrkov 提供了一些可行的建议,让数据科学家在产生业务影响方面更加有用。本次演讲的几个要点包括:
激励你的全体员工查看信息是很重要的;使其易于访问并打破孤岛。
严谨应该从决策者开始。她讨论了学术界如何教授使用最复杂工具的技能,这在多年的实践后成为一个难以打破的习惯,所以当这些人被商业企业聘用时,他们不会神奇地改变他们的思维模式(他们还不知道什么对商业价值来说是重要的)。这意味着他们可能会在错误的项目上投入精力。她建议先对数据进行粗略的扫描,只有当决策者认为这项工作有价值时,才进行更深入的挖掘。
按正确的顺序做事。(你可以在她的文章中读到更多信息:“人工智能的第一步可能会让你吃惊”)
处理应用项目的正确方法是颠倒算法-输入-输出的顺序,就像这样:考虑输出,然后输入,然后算法/模型。确保每个项目的正确阶段都有正确的领导参与。如果他们是独立的个体(在许多组织中,一个人拥有几个或所有这些角色),那么您将按如下方式传递接力棒:
- 决策者(关注产出)
- 首席分析师(关注输入)
- 首席机器学习工程师(专注于算法/模型)
- 首席统计师(关注绩效)
在她的演讲中听到的另一个关键信息是“拆分你该死的数据”——凯西称之为最佳生活理念,所以她希望这些话会成为她的墓碑
Airbnb 动态定价的定制回归模型
徐航军,高级机器学习软件工程师,Airbnb
杭军描述了 Airbnb 部署的定价策略模型,这是一个分享家居和体验的在线市场。价格优化的目标是帮助在 Airbnb 上分享房屋的房东为他们的房源设定最佳价格。
与定价策略适用于大量相同产品的传统定价问题相比,Airbnb 上没有“相同”的产品,因为他们平台上的每个列表都为他们的客人提供独特的价值和体验。Airbnb 房源的独特性质使得人们很难估算出一条准确的需求曲线,而这条曲线是应用传统的收入最大化定价策略所必需的。
他们使用监督回归模型,以最优价格为标签。如果一个列表没有以 140 美元被预订,他们不应该以更高的价格(比如 160 美元)列出它。另一方面,如果列表的预定价格是 120 美元,那么他们不应该以低于这个价格(比如 110 美元)的价格列出它。这就创造了一个他们试图平衡的最低和最高预订范围。
该公司面临的一些挑战包括处理非常独特的列表和稀疏的数据。
数据驱动的产品管理:如何在亚马逊时代建立成功的客户体验
丽贝卡·格林,Handy 首席产品官
在今天的零售环境中,两天发货、点击订购和轻松退货已经成为赌注。为了在亚马逊时代保持竞争力,公司必须适应并超越对即时、无缝和端到端客户体验的期望。
Rebecca 谈到了公司如何通过数据驱动的产品管理来满足不断增长的客户期望。她还分享了在当今的商业环境中,构建成功产品的一些设计决策和客户考虑因素。
我从她的演讲中得到的主要启示是“便利是王道”——让你的买家更容易,也会让你更容易!她提供了一些让顾客生活更轻松的公司的例子:Lowes 的虚拟现实可以让你更快地找到商店里的东西。另一个例子是 Sephora 的调查、配色等。当然,亚马逊提高了免费退货和 2 天送货的风险。
她的公司 Handy 让顾客的生活变得更轻松的一种方式是将其服务与其他公司(如销售家具的 Wayfair)无缝集成。Handy 提供家庭服务(其中一项是组装家具)。通过合作,他们简化了流程,并在一个屏幕上提供家具和组装工作(无需单独结账),并且无需额外的安排,因为 Handy 正好在送货卡车经过的同一天过来。
他们也使用大量的 A/B 测试来看什么对他们的客户有效。例如,他们试图通过使用 2 分钟的视频宣传 Handy 的工作原理,并通过使用 FAQ 文本部分来揭示在购买时刻,购买者更喜欢阅读 FAQ 而不是观看视频。
深度学习闪电入门
麦格劳-希尔教育公司分析和 R&D 副总裁 Alfred Essa
深度学习是机器学习中发展最快的领域。在他的演讲中,阿尔弗雷德谈到了什么是深度学习?为什么重要?与其他 ML 技术相比,它是如何工作的?然后,他通过构建一个简单的营销深度学习模型得出结论。
阿尔弗雷德从讨论“极端”的含义开始,他提供了一些例子,如跑马拉松(我完全可以理解)——然后他继续谈论深度学习是机器学习的一个极端情况。
我们讨论了深度学习的各个方面,包括:神经元、层、前向传播、损失和成本函数以及反向传播。最终目标是创建一组实现最低损失或误差的网络参数(权重和偏差)。
从金融服务部门的人工智能计划中吸取的 10 条经验教训
Andy Price,金融服务主管,纯存储
数据驱动的用例正在为商业领域的人工智能(AI)等下一代工作流铺平道路,金融服务业也不例外。为了大规模交付人工智能,组织必须考虑几个主要的依赖因素和挑战,这要求他们对人工智能项目对组织内基础设施的技术要求有高层次的理解。Andy 分享了从金融服务领域的人工智能计划中学到的 10 条经验。
- 不要低估信息安全挑战—访问您需要的内部数据很困难,其他挑战包括将数据放入公共云中。数据来源计划花费的时间比任何人预计的都要长 2-3 倍
- 工具和框架正在快速发展——不要对工具过于虔诚。你不想 6 个月正确而永远错误。这里遵循的原则是建立在开放标准的基础上,避免供应商锁定——这样您就可以根据需要换入/换出工具
- 你的计划是战略性的还是战术性的——提前与客户和利益相关者讨论,因为这可能会推动不同的思维过程。想想必须对解决方案进行全面重新设计的含义。如果你不提前考虑战略方向,技术投资可能会被扔掉。如果是战略性的,就这样对待它,并在允许您无中断扩展的基础上进行构建
- 人工智能通常对概念验证具有挑战性——测试难的东西——尝试打破它——不要在容易的东西上浪费时间。尽可能进行真实世界的测试;了解你的投资能让你走多远(避免意外)。玩具数据集产生玩具结果
- 记录您的关键能力—您希望为解决方案设计的实际规模水平是多少;多少个 GPU 等等。你可能想对未来进行再投资,但提前记录这一点是值得的
- 基础架构关键优先级—让 GPU 保持忙碌,让数据科学家忙于数据科学。避免让数据科学家进行系统集成和系统优化/调整。确保基础设施有能力处理混乱因素;针对一切进行了调整,并且能够同时提供不同的数据类型
- 认识到数据科学的成本-你不希望数据科学家没有生产力。在纽约,一名数据科学家的平均成本是每年 15 万美元。不要吝啬基础设施投资。如果我们相信软件正在吞噬世界,数据是世界上最有价值的资源,人工智能是第四次工业革命,那么让我们相应地行动和投资。
- 人工智能是一个管道——不仅仅是培训。60-80%的人工智能工作是数据准备,只有 20-40%是训练。大多数组织都专注于培训部分;但所有早期阶段都包括从组织中各个领域的数据科学家的笔记本电脑中收集各种数据集。需要整合,在端到端平台上保持高效和有效
- 很少有人了解端到端的解决方案。数据科学家了解工具和框架。基础设施必须能够应对挑战。很少有数据科学家懂基础设施,很少有基础设施人不懂数据科学;需要弥合这一差距
- 在大型组织中,这变得越来越具有挑战性——需要密切协作;公司在各自为政中工作。AIRI 人工智能就绪基础设施—产品闪存刀片—一旦您的 GPU 数量增加,传统存储将无法跟上
从金融领域的机器学习(ML)教学中获得的 5 个经验教训
Meninder (Mike) Purewal,纽约大学主任、数据科学家兼兼职教授
迈克讲述了他从教授 ML 金融课程中学到的五条经验。
- 教金融领域的 ML 很难——找到理解金融、数学和计算机科学的独角兽几乎是不可能的。最好的办法是找到覆盖几个领域的人,把他们和覆盖其他专业领域的人组成团队。教育供给刚刚开始满足需求
- 在金融领域教授 ML 很容易——借助谷歌搜索的便利,你可以快速找到代码,并将其复制粘贴到你的控制台上,然后说你是一名数据科学家。这很有吸引力,也很危险,因为大多数人并不完全了解这种东西是如何工作的
- 期望与现实——在现实中,工作是艰难的,细节是一种折磨。市场上活跃的产品主要是编码规则 vs. AI。让这些东西运转起来是一件苦差事。对高层领导的期望与现实不符
- 没有太多好的例子可以教——金融文化倾向于保密(信息囤积)。教科书非常缺乏,所以他建议人们使用博客/ LinkedIn 帖子来学习。他被迫使用 Iris 数据集,因为金融数据很少。这导致人们在实际工作之前无法学习
- 深度&少 vs .浅层&多——在机器学习中,人们可以选择两个方向。他们可以成为专注于研究的专家(深度&少数),或者进入咨询/管理角色(浅层&人)。两者都有价值,但它们走的是不同的道路。你需要适当地宣传自己,适当地设定学习目标和期望
通过负责任的人工智能加速创新
普华永道董事兼兼职教授 Jay Chakraborty
我真的很期待这次会议,因为人工智能和数据科学背景下的“伦理”真的是我最关心的问题
对我来说。Jay 在强调一些例子方面做得很好,这些例子说明了为什么在处理机器/数据时我们需要人的因素。他提供的例子包括 Stanislav Petrov——他承认显示俄罗斯受到攻击的数据中存在问题(他意识到美国不会只派 5 枚导弹来攻击俄罗斯;因为这还不够)——他基本上发现了一个系统故障;点击阅读更多关于的内容。
另一个例子是对选美冠军的预测(其中包含主要选择白人女性作为潜在获胜者的偏见)。此外,他提到了一个例子,我计划将这个例子纳入我正在开发的数据科学伦理课程中——这是一个决定警察应该巡逻哪些街区的算法——这通常会导致他们巡逻更贫困的街区,并仅仅因为有机会在那个街区发现更多的“犯罪”。
为了释放人工智能的全部潜力来转变您的业务,需要深入了解客户,将社会和道德影响嵌入人工智能设计和模型开发的结构化方法中。他介绍了负责任的人工智能的伟大模型;它代表着治理、可靠、道德、负责和透明。
Jay 还强调了一个事实,即我们需要摆脱使用“黑盒”的借口,开始打开它并记录进入这些模型/算法的一切。
结论
总之,DATAx 大会给我提供了几次学习的机会,让我认识了一些真正有趣的人!
从原始 NBA 投篮记录数据和探索热手现象的见解
作者:迈克尔·阿瑟、凯勒·约翰逊、艾蒙·汗、尼迈·库马尔、里德·怀德
Photo by Ramiro Pianarosa on Unsplash
概述
数据科学和篮球比赛每年都变得越来越交织在一起。休斯顿火箭队的强力三分中锋进攻使他们一跃成为 NBA 的精英球队之一。他们的总经理达里尔·莫雷十多年来一直是高级分析的公开支持者,在过去的几年里,很明显莫雷球(被 NBA 书呆子亲切地称为 T5)正在被整个联盟的总经理模仿。费城 76 人队现在正在收获前通用汽车和数据大师 Sam Hinkie 的好处,他的非正统团队建设战略引起了整个联盟的两极分化辩论,并最终导致他在 2016 年下台。虽然他可能丢掉了工作,但他数据驱动的工作成果是不可否认的。76 人队现在是联盟中最强的球队之一,主要由欣奇选中的年轻球员提供动力。
我们小组认为在篮球分析方面仍有大量有趣的工作要做,我们想探索一个原始数据集并做一些我们自己的分析。具体来说,我们小组希望获取原始 NBA 投篮日志数据,从中提取有意义的信息,并创建引人注目的图形来展示我们的发现。此外,我们想探索“热手”现象的统计学意义。换句话说,我们想发现,事先知道一个球员连续投篮几次,是否会改变我们对他下一次投篮是否会进的预期。
数据
数据收集
除了 NBA 网站之外,像我们使用的数据这样的原始空间拍摄数据很难在任何地方找到。不幸的是,NBA 在几年前就停止公开其 API 了。我们需要刮他们的网站,以获取当前的数据。我们对项目的分析和可视化方面比对抓取更感兴趣,所以我们使用了 2014-2015 赛季的数据集,该数据集是在公共 API 仍然可用时获得的。当新数据可用时,我们的分析可以很容易地扩展到新数据。数据集的示例如下所示。
A snippet of the raw NBA shot log dataset
数据清理
正如对 NBA 官方数据集的预期,这些数据得到了合理的维护;然而,有一些令人惊讶的差异需要清理。许多名字在数据中被拼错了,这在我们的分析中造成了异常值。此外,CLOSEST_DEFENDER 和 player_id 要素中的名称需要采用相同的格式,以便于我们的分析。一旦我们有了相同格式和正确拼写的名字,我们就可以做一些预处理和特征提取,并做一些分析。
特征抽出
由于炮测井数据提供的直接信息很少,我们需要为我们所做的每一种不同类型的分析进行大量的特征提取。我们不会在这一节中用很少的上下文来解释我们所有的预处理工作,我们将回顾一下在洞察和分析一节的每个不同小节中什么样的预处理是必要的。
见解和分析
最佳双向球员
我们希望从 2014-2015 年 NBA 最佳双向球员的简单评估开始我们的分析。一个好的双向球员是进攻和防守都有效的球员。我们决定通过创建一个包含三个特征的数据帧来做到这一点:{player_id,pts_scored,pts_allowed}。通过对 SHOT_RESULTS 列中每个“制造”篮筐的所有 PTS_TYPE 特征求和来计算每个球员的得分。所允许的点数是通过对给定球员在 CLOSEST_DEFENDER 功能中列出的每个投篮进行求和来计算的。新数据框架的示例如下:
一旦我们有了这个数据框架,我们创建了一个散点图(如下)来更好地可视化数据。
Points given up vs Points scored
正如所料,一些最优秀的双向球员,如德怀恩·韦德,拉塞尔·维斯特布鲁克和勒布朗·詹姆斯,被列在图表的右下部分,因为他们得到了很多分,但在许多篮下没有被列为最接近的防守者。其他球员如克莱·汤普森、斯蒂芬·库里和詹姆斯·哈登也榜上有名。虽然这些球员的防守并不出色(根据这一分析),但他们的得分能力使他们和其他人一样属于精英类别。
关于这个图表的一个奇怪的事情是贾马尔·克劳福德出现在精英双向球员中。贾马尔·克劳福德被普遍认为是一个糟糕的防守者。他意外出现在图表的这个区域可以用他在团队中的角色来解释。克劳福德的角色是替补能力较弱的球员,并在球队最好的球员休息时承担进攻负担。这个角色导致克劳福德比图表上显示的其他球员少打了 30%的比赛,这也导致他比其他人打了更多的比赛。换句话说,这种特定类型的分析确实有利于像贾马尔·克劳福德这样的球员,显然不是一个完全描述球员价值的指标。事实上,任何先进的体育指标都将固有地偏爱某些类型的球员,这取决于该指标优先考虑比赛的哪些方面。
球员得分效率
为了评估单个球员的表现,我们希望收集更多关于他们投篮的背景信息。这位球员的投篮一般都很好,还是效率不高?在深入研究之前,我们首先必须使用特征提取来开发数据,这些数据详细说明了球员的平均投篮距离,他们在每个区域的投篮百分比,以及他们在每个不同区域能够投篮的次数。这些信息给了我们一个球员在比赛中投篮类型的更完整的图像。然后,我们创建了一个模块,该模块接受输入玩家姓名,并将他们的击球距离、击球时间和击球结果数据输出到一个新的数据帧中。我们工具的屏幕截图如下所示:
一旦我们有了新的数据帧,所有的镜头都由 DIST 镜头和时钟镜头组织成 144 个独特的箱。投篮距离被分割成 6 个距离范围的<5 ft, 5–10 ft, 10–15 ft, 15–20 ft, 20–25 ft, and 25–30 ft. Clock times were segmented into 24 bins of 1 second each, from 0–24 sec. Each bin was then mapped to the amount of shots taken in that bin, and the amount of shots made.
We then made 2D heatmaps of this data, with distance on the Y-axis and clock time on the X-axis.
Using this 数据,我们计算了球场上每个区域的联盟平均投篮命中率(投篮次数/总投篮次数)。然后我们创建了一个二元热图,它显示了一个球员在球场的那个区域是高于还是低于联盟平均水平。棕色区域表示高于联盟平均水平,黑色区域表示低于联盟平均水平。扬尼斯·阿德托昆博的二元热图如下所示:
虽然热图很有用,但它们并不十分美观。我们想要更好的东西。使用 matplotlib 中的 plot_trisurf(),我们绘制了# shots made、shots taken 和 binary 图。这些是热图的 3D 视图:
Giannis Antetokounmpo Shot Breakdown
解释
使用这些图形,我们可以确定哪些球员知道他们在场上的哪些区域效率很高,哪些球员在他们缺乏持续转换技能的区域持续投篮。在扬尼斯·阿德托昆博(希腊怪胎)的例子中,我们可以看到他的大部分投篮都是在离篮筐更近的地方完成的,大部分时间仍然在投篮时间表上。詹尼斯是一个有效率的球员,这张图表显示他的大部分投篮都靠近篮筐,他是一个强有力的射手。
布莱恩·罗伯茨是一个很大程度上在三分球范围内投篮的球员,尽管他不是一个特别好的三分球手。请注意,在第三张图中,当投篮时间低于 3 分范围时,他低于联盟平均水平:
Brian Roberts Shot Breakdown
玩家互动
使聚集
除了之前提取的数据集特性之外,我们还必须设计一种方法来将一些高级防御指标融入到我们的数据中。我们可以通过在每个球员的数据帧末尾添加防守框加减栏来做到这一点。这个指标让我们可以看到一个球员在球场上的个人防守对整个球队的防守表现有多大贡献。在提取了关于玩家倾向和综合统计数据的有用特征之后,我们想要比较不同玩家如何倾向于相互得分,以及我们是否可以在这些玩家关系中找到任何趋势。
为此,我们考虑了两种聚类算法:K-Means 和 Mean-Shift。我们最终选择使用 K-Means,因为均值漂移在处理不密集且有很多异常值的数据时表现不佳。鉴于我们数据集中合格的 NBA 球员数量相对较少,并且两个球员投篮命中率非常相似的可能性很小,我们决定 K-Means 是我们数据集的一个更好的聚类工具。
使用 K-Means 时最大的挑战是决定聚类的数量。我们发现 4 到 5 个聚类对于这个数据集是最佳的,因为有更多的聚类会创建一些参与者很少的小类,而有更少的聚类会导致类过于一般化。使用 k=5 会产生两类高容量得分玩家,一类中容量玩家和两类低容量玩家。
可视化集群
下一步,我们想要可视化这些职业如何影响玩家的得分和防守。我们用于这个可视化的工具是 D3.js ,因为它在创建不同类型的可视化方面非常灵活。受我们在研究数据驱动文档时发现的一个例子的启发,我们选择创建一个力导向图。创建这个图表需要在 Jupyter Notebook 中进行大量的数据预处理,以构建一个 JSON 文件,该文件的格式易于从 JavaScript 操作。
首先,我们必须从击球日志数据中创建一个查找矩阵,以记录每个球员在其他球员身上的得分。然后,这个矩阵 attack_defense_matrix.csv 与 players_kmeans.csv 一起被迭代,以构建节点和边的列表。每个节点包含一个玩家的信息,包括一个唯一的标识符,他们的总得分,k-means 定义的类别标签,以及玩家的[防守框加/减(DBPM)](http://Defensive Box Plus/Minus (DBPM)) 。每条边反映了给定玩家相对于其他玩家的得分。这些数据随后被存储为 JSON 文件中的邻接表,JavaScript 文件解析该文件以填充图形。
我们从这些经过处理的数据中创建了两个交互式的力导向图:一个可视化玩家的进攻能力和一个突出他们的防守限制。在 mouseover 上,进攻图形显示每个球员从我们的得分效率工具生成的 3D 热图。防守图形显示每个球员调整后的 DBPM。
Force-Directed Graph of NBA Players by Offensive Cluster
图表的解释
攻击图
进攻图中节点的大小表明了球员得分的多少。我们选择在 mouseover 上展示一个球员的投篮分布,来探究不同类型球员的进攻能力有何不同。节点的平均大小因类而异。节点的颜色代表 k-means 聚类生成的不同组。红色和蓝色节点往往都是高得分者,但他们通常在球场上的不同区域投篮。紫色节点是次要得分手,投篮分布更均匀,绿色和橙色节点往往是更低输出的球员。我们发现这些 k-Means 定义的类是一种合理有趣的球员分组方式,作为传统篮球位置的替代。
蓝色节点代表在篮筐附近得分最多的球员。虽然这一组主要由大个子组成,但一些凶悍的后卫如凯里·欧文和詹姆斯·哈登也属于这一类。大多数大个子的蓝色节点都是高度连接的,这意味着大个子通常会在其他中锋和大前锋身上得分。这是有道理的,因为这些球员经常互相防守,并且在大多数防守中都倾向于靠近篮筐。
红色节点代表射手,主要是后卫,他们的大部分得分来自三分球范围,如斯蒂芬库里和达米恩·利拉德。这些球员中的一小部分通常会在其他后卫身上得分,这是有道理的,因为后卫是最经常防守远射的球员。其他 K 均值聚类包含对游戏影响较小的玩家。
防御图
防守图中节点的大小代表了一个球员允许在其上得分的投篮次数。乍一看,似乎较大的节点代表较差的防守者,因为他们得分最多,但这是误导性的,因为球员上场时间越长,节点越大。此外,中锋和大前锋更有可能在我们的数据中被列为最接近的防守者,因为他们经常在篮下投篮。由于这些原因,我们的防守图不公平地惩罚了‘大个子’。
当鼠标悬停在一个节点上时,我们图表的用户可以看到玩家的防守框正/负(DBPM)评级。这一评级是最广泛用于衡量球员对防守的整体影响的,它是我们的分析偏离球员普遍观点程度的晴雨表。例如,图中保罗·米尔萨普节点的大小暗示他是一个糟糕的防守者,但他的 DBPM 评分是 26——联盟中最强的之一。
滚烫的手
一些球员(咳咳克莱·汤普森)怎么可能“走火入魔”,或者换句话说,怎么可能有看似不可阻挡的高效发挥?我们想知道,“热度”,或者一个球员在最后 N 次投篮中的投篮次数,对投篮命中率或者得分有影响吗?
为了研究这一点,我们开发了一个击球条件和球员热度的模型,并研究这些因素如何影响击球精度。
作者感谢的分析,因为它解决了“热手”问题。所有的编码都是由这篇文章的作者独立完成的。
难度条件分为四类:
- 游戏条件(主场/客场、游戏时间、总游戏时间、积分优势)
- 射门条件(到球网的距离,英尺对 2 对 3 指针,射门时钟)
- 防守条件(最近的防守者距离、防守者技能(DBPM)、身高劣势)
- 球员固定效果(球员真实投篮百分比)
我们做多重回归来找出每个条件类别中特征的重要性。然后,我们对所有条件类别进行回归,找出每个条件类别的相对重要性:
难度条件分析
在游戏条件图中,我们看到主场和客场的区别比积分分布和周期占主导地位。经过的游戏时间看起来基本没有影响。我们应该小心不要过早地解释这一点,因为与其他三种难度条件相比,游戏条件显得无关紧要。
投篮条件和防守条件(分别以距离和防守者技能为特征)对投篮难度的贡献相对相等,球员固定效应(真实投篮百分比)的贡献约为投篮条件和防守条件的 75%。
热分析
我们必须根据先前的多次发射来定义热。N 热被定义为在最后 N 次尝试中进行的 K 次射击的 K/N。我们比较了 N 次热身赛得分和一次投篮得分:
虽然这个模型可能暗示了不同热度之间的显著影响差异,但是我们在线性模型截距的上下文中解释了相对较低的量级分数:0.988402331。
这意味着热量对这些点的影响相对来说是微不足道的。
热,在上下文中
为了进一步研究热量的影响,我们做了另一个回归,这次控制困难条件:
在这个最终回归中,我们看到球员固定效应,即球员的真实投篮命中率,是平均热效应的 8 倍以上,并且是得分的最重要的决定因素。这并不奇怪,因为真实的投篮命中率是一个球员整个赛季的总和,也是他们得分多少的决定性指标。防御条件也是一个相当大的贡献。射击条件本质上是由结构决定的射击距离。我们看到主场优势实际上没有热火重要。
“热手”存在吗?这很难说,但与环境和球员统计相比,这在 NBA 人口中似乎可以忽略不计。要做的进一步工作包括对单个玩家进行分析,看是否只有一些玩家表现出热手牌。可以探索玩家信心指标和更深入的投篮难度分析。
结论
在这个项目的过程中,我们清理了一个原始的 NBA 投篮日志数据集,执行了特征提取技术,并创建了有用的分析工具,为球员如何得分提供了有用的视觉效果和洞察力。虽然我们的工具目前只提供了初步的见解,但只需对我们的源代码进行微小的更改,就可以实现更高级的概念,并且可以相对容易地收集和分析更近的炮测井数据。
此外,我们发现热手现象没有统计学意义。虽然有一些我们没有探究的热手问题的变体(例如一些特定的玩家是否有能力变热),但我们发现,一般来说,连续投篮并不会对未来的投篮产生有意义的影响。
我们希望您喜欢阅读我们的工作。如果你有兴趣,看看我们的 Github 库。
洞察流失预测的复杂性
Photo by Gabriel Crismariu on Unsplash
如果仅仅进行客户流失预测就像参加一场纸牌游戏比赛。
你已经有了一个数据集,一个很好的基础设施,一个衡量你的预测成功与否的标准,你的目标和特性也已经定义好了。你只需要做一些功能工程和测试一些算法,瞧,你得到了一些东西。我希望有这么简单。
实际上,这很复杂。我在移动游戏行业研究客户流失已经有一段时间了,这篇文章将揭示与这种预测相关的一些复杂性。让我们想一想在进行客户流失预测之前我们必须回答的一些问题。
- 你打算如何利用你的结果来产生投资回报?这一点极其重要,但却常常被忽视。如果某个用户成为高流失率用户,你打算如何行动?基础设施和/或组织结构是否能够发挥作用?运送无法采取行动的复杂物品是没有意义的。
- *预测的目标是什么?*是了解还是预测有可能流失的用户?这通常会导致您使用两套不同的算法。
- 在你的行业中,有没有你应该知道的基准或最佳实践?这肯定会对你试图解释和/或预测的客户流失产生影响。
- 你如何衡量你的预测是否成功?如果你把用户流失看作是一个二元分类问题,不流失的用户可能非常少。您可能会尝试使用 ROC 曲线下的部分面积(PAUC ),而不是 AUC 或自定义加权指标(得分=敏感性 0.3 +特异性* 0.7)。*
- *你怎么知道什么时候停止改进你的预测,什么时候发布你的第一个版本?*一旦您建立了评分标准,您必须建立一个阈值。阈值将通知您何时发货。
- 您是否与利益相关方就模型的成功衡量达成一致?
- *你想预测你的所有用户还是只预测一个细分市场?*例如,如果你想预测新用户或老用户,你可能不会使用相同的功能。
- *目标是什么?*这很有趣,但你可以将流失预测视为一个经典的二元问题(1:流失用户,0:不流失),但你也可以将 Y 视为播放的会话数。
- 你有什么特点?您打算使用时间相关功能吗?根据你的行业知识,预测客户流失最重要的特征是什么?基于您当前的数据库,它们容易计算吗?你考虑过 RFM 的著名特征吗?
- 你如何获得数据?您是否需要进行批量 SQL 调用来收集所需的数据形状,或者您是否需要从流式数据开始,或者您是否打算在发布更好的版本时从批量数据发展到流式数据?
- 你打算如何清理你的数据?你如何处理丢失的、异常的和极端的值,这些值会破坏你的模型。
- *当你编码时,你应该测试什么?*谷歌发表了一篇很棒的文章,它提供了一套可操作的测试来帮助你开始。
- *你如何在生产中推动你的工作?*您需要将您的预测结果放入数据库中,还是需要将您的模型作为 REST API 提供?你如何与软件工程师合作?
- *您将如何监控生产中预测的质量?*您打算创建一个仪表板吗?您会在数据库中创建一个包含日志的表吗?你会监控什么?根据您预测质量的某些 KPI,您打算如何行动?
- *你的车型保养流程是怎样的?*您是否打算每个月、每个季度对您的模型进行一次更改?你计划改变什么?改变的历史是什么?
- *你的交付成果是什么?*随着时间的推移,您打算如何改进您的模型?
- 你要用哪个工具?在必要的情况下,你将使用 R、Python 或 park。当你真的有大数据(1000 万行要预测)的时候,推荐 Spark。注意,与顶级 Python 库(tensorflow、sk learn……)相比,Spark ML 库是有限的
- *您将使用哪些软件包进行预测?*有这么多包有(sklearn,H2O,TPOT,TensorFlow,Theano…等等)
- 你如何处理再次聘用用户的问题?如果你决定预测用户将在未来 30 天内流失会怎样?如果他们 30 天后回来呢?在你的分析中,你如何看待这种偏见?
- 你打算用哪种算法?可能是随机森林、SVM、线性回归、神经网络或其他。你也可以使用自动机器学习来找到你的第一个模型。无论你决定选择什么,你都需要知道每个算法的数据假设。
这是最好的部分,你甚至还没有开始编码…
伟大文章的链接
- 作为回归问题的流失: delta dna 文章
- 新用户流失: gamasutra 文章
- 老用户流失: gamasutra 文章
- 流失预测生存分析:硅工作室
- 考虑再次参与的流失预测的高级示例:[点击](http://Seems like an approach that address all problem related to churn https://ragulpr.github.io/2016/12/22/WTTE-RNN-Hackless-churn-modeling/)
值得分享?
请按下💚就在你的正下方。它帮助更多的人找到它。
Instagram #LifeInScience 系列。
与更多的观众分享你的故事和激情。
我们#life in science系列的目标是更好的了解你。你为什么对自己的工作如此有激情,你是如何开始的,你目前在做什么?
您可以通过给我们发送电子邮件来投稿:
- 你的名字(如你所愿)。
- 您的 Instagram 用户名(可选)。
- 这些问题中的一个或两个问题的答案(总计2200 个字符):
- 你是如何对你的科学领域充满热情的?
- 你目前在做什么?
- 你最喜欢的,你认为应该让更多人知道的科学概念是什么?
- 最新的科学发现是什么让你有一种“哇”的感觉?
5.最后,为你的故事选择至少十个精确的标签(这个列表并不详尽):#生命科学#科学#科学故事#科学#科学理论#实验#实验室#认知科学#神经科学#大脑#心理学#生物学#进化#哲学#人类学#语言学#健康#太空#未来#技术#科技#生活#创新#艺术#灵感#女性科技#地球#自然#计算机科学#数据科学#机器学习#数据可视化#数据驱动#统计#设计#分析
把你的短信发给 publication@towardsdatascience.com T21,不要忘记一张或多张你的照片。最好的帖子将会发布在我们的insta gram和 脸书 页面上。
非常感谢,
TDS 团队。
Snoopreport 服务为深度分析提供 Instagram 用户活动数据
Snoopreport 是一个监控平台,监控 Instagram 上的用户活动,如喜欢、评论和关注。
该服务有一个用户友好的仪表盘,你可以添加无限数量的 Instagram 账户进行监控。用户操作在每周和每月的 PDF 报告中提供。要了解 PDF 报告的更多信息,请点击此处。
您还可以按时间顺序下载所有用户操作和 CSV 格式的附加帖子数据,以便进行深入分析。
CSV 报告示例:
CSV 报告中提供的数据
该报告提供您监控的用户的赞、评论和关注,以及获得赞和评论的帖子的相关数据(帖子描述、帖子 URL、地理标签和一些其他指标)。
CSV 报告中显示的数据:
- 日期—受监控用户执行操作的日期和时间。你可以确定用户在 Instagram 上最活跃的时间间隔
- 类型—操作的类型:喜欢、评论或关注
- 用户名—获得赞、评论或关注的用户的用户名
- 全名—通常是获得赞、评论或关注的用户的名和姓
5.帖子 URL —链接到 Instagram 帖子,带有赞或评论
6.媒体 URL —指向媒体文件的链接。通过这个链接,你只能得到图片(视频也是以图片形式打开的)
7.直接媒体 url —指向您可以直接下载的媒体文件(照片或视频)的直接链接。该数据可用于图像识别,以自动方式确定介质上的物体或人
8.标题——对罐子的描述,包括文字、标签和用户名。使用此字段确定标记的用户或品牌。例如,如果您想知道用户喜欢的品牌,解析该字段以自动获得品牌列表。字幕也可以通过自然语言处理进行分析,以识别作为文本提及的情感、品牌、地理位置和事件。
9.位置名称-文本格式的地理标记。如果用户没有添加位置,则该字段为空
10.位置地址-地址格式的地理标记
11.位置 URL——在谷歌地图上将地理标记为坐标
12.Likeback —显示用户是否在他喜欢的帖子上被标记的指标。用它从简单提到用户的内容中突出用户真正的兴趣。
首先,营销人员和分析师会对 CSV 报告感兴趣。要了解 Snoopreport professional 用于分析的更多信息,请阅读我们的文章。
为了获得更有价值的用户洞察,如果您监控多个用户,我们还提供群组报告。您可以在单个 CSV 报告中下载添加到仪表板中的任意数量用户的活动数据,并分析这组用户的行为。组报告看起来像单个用户的报告,但是添加了 Username_Monitored 列。它有执行某个动作的 Instagram 用户。
我们将在未来的报告中添加新的指标,如品牌、博客或个人用户标志等。关注更新https://snoopreport.com!
在 Ubuntu 16.04 上逐步安装 Hadoop 3.1.0 多节点集群
Image Source: www.mapr.com/products/apache-hadoop/
网上有很多关于安装 Hadoop 3 的链接。他们中的许多人工作不好或需要改进。这篇文章摘自官方文件和其他文章以及 Stackoverflow.com 的许多回答
1.先决条件
注意:所有先决条件必须应用于名称节点和数据节点
1.1.安装 JAVA、SSH 和其他软件实用程序
首先,我们需要为 Java 8 安装 SSH 和一些软件安装实用程序:
sudo apt install \openssh-server \software-properties-common \python-software-properties
然后我们需要安装 Oracle 的 Java 8 发行版,并更新当前的 OS。
sudo add-apt-repository ppa:webupd8team/javasudo apt updatesudo apt install oracle-java8-installer
要验证 java 版本,您可以使用以下命令:
java -version
1.2.为 Hadoop 创建专门的用户和组
我们将使用专用的 Hadoop 用户帐户来运行 Hadoop 应用程序。虽然这不是必需的,但建议这样做,因为它有助于将 Hadoop 安装与同一台机器上运行的其他软件应用程序和用户帐户(安全、权限、备份等)分开。
sudo addgroup hadoopgroupsudo adduser --ingroup hadoopgroup hadoopusersudo adduser hadoopuser sudo
您可以使用以下命令检查组和用户:
compgen -gcompgen -u
1.3.SSH 配置
Hadoop 需要 SSH 访问来管理其不同的节点,即远程机器加上您的本地机器。
首先,您需要以 Hadoopuser 的身份登录
sudo su -- hadoopuser
以下命令用于使用 SSH 生成一个键值对
ssh-keygen -t rsa -P “” -f ~/.ssh/id_rsa
将 id_rsa.pub 中的公钥复制到 authorized_keys 中。
cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keyschmod 0600 ~/.ssh/authorized_keys
确保 hadoopuser 可以 ssh 到自己的帐户,无需密码。从 hadoopuser 帐户 ssh 到 localhost,以确保它工作正常。
ssh localhost
注意:如果你得到错误:ssh:连接到主机本地主机端口 22:连接被拒绝,那么,请尝试使用下面的命令安装 ssh-server。
sudo apt-get install ssh
2.下载并配置 Hadoop
在本文中,我们将在三台机器上安装 Hadoop:
第一台机器将充当名称节点(主节点)和数据节点(从节点),其他机器是数据节点(从节点)
在每台机器上,我们必须使用以下命令编辑/etc/hosts 文件
sudo gedit /etc/hosts
每个文件必须包含这些行:
127.0.0.1 localhost10.0.1.1 hadoop-namenode10.0.1.2 hadoop-datanode-210.0.1.3 hadoop-datadnode-3
注意:如果/etc/hosts 文件包含下面一行
127.0.1.1 <Hostname>
然后你要删除这一行。
2.1.下载 Hadoop
我们将把所有软件安装在/opt 目录下,并将 HDFS 的底层数据也存储在那里。下面我们将用一个命令创建文件夹。
sudo mkdir -p /opt/{hadoop/{logs},hdfs/{datanode,namenode},yarn/{logs}
文件夹的布局将如下所示
/opt/├── hadoop│ ├── logs├── hdfs│ ├── datanode│ └── namenode├── yarn│ ├── logs
您可以使用以下命令下载 hadoop-3.1.0.tar.gz:
wget -c -O hadoop.tar.gz [http://www-eu.apache.org/dist/hadoop/common/hadoop-3.1.0/hadoop-3.1.0.tar.gz](http://www-eu.apache.org/dist/hadoop/common/hadoop-3.1.0/hadoop-3.1.0.tar.gz)
要解压缩 Hadoop 包,您可以使用以下命令:
sudo tar -xvf hadoop.tar.gz \ --directory=/opt/hadoop \--strip 1
Hadoop 3 的二进制版本压缩了 293 MB。它的解压缩大小为 733 MB,其中有 400 MB 的小文档文件,解压缩可能需要很长时间。您可以通过在上面的命令中添加以下行来跳过这些文件:
--exclude=hadoop-3.1.0/share/doc
2.2.Hadoop 常见配置
注意:这些步骤必须在名称节点和数据节点上完成。
有一些环境设置将被 Hadoop、Hive 和 Spark 使用,并由 root 和普通用户帐户共享。为了集中这些设置,我将它们存储在/etc/profile 中,并从/root/创建了一个符号链接。bashrc 到这个文件。这样,所有用户都将拥有集中管理的设置。
sudo gedit /etc/profile
/etc/profile 必须类似于:
if [ “$PS1” ]; thenif [ “$BASH” ] && [ “$BASH” != “/bin/sh” ]; then# The file bash.bashrc already sets the default PS1.# PS1=’\h:\w\$ ‘if [ -f /etc/bash.bashrc ]; then. /etc/bash.bashrcfielseif [ “`id -u`” -eq 0 ]; thenPS1=’# ‘elsePS1=’$ ‘fififiif [ -d /etc/profile.d ]; thenfor i in /etc/profile.d/*.sh; doif [ -r $i ]; then. $ifidoneunset ifiexport HADOOP_HOME=/opt/hadoopexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport HADOOP_CONF_DIR=/opt/hadoop/etc/hadoopexport HDFS_NAMENODE_USER=rootexport HDFS_DATANODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport JAVA_HOME=/usr/lib/jvm/java-8-oracleexport HADOOP_MAPRED_HOME=/opt/hadoopexport HADOOP_COMMON_HOME=/opt/hadoopexport HADOOP_HDFS_HOME=/opt/hadoopexport YARN_HOME=/opt/hadoop
以下命令将在~/之间创建一个符号链接。bashrc 和/etc/profile,并应用对/etc/profile 所做的更改
sudo ln -sf /etc/profile /root/.bashrcsource /etc/profile
更新/opt/HADOOP/etc/HADOOP/HADOOP-env . sh 文件并设置 JAVA_HOME 变量和 HADOOP_HOME、HADOOP _ CONF _ 目录和 HADOOP _ LOG _ 目录变量
export JAVA_HOME=/usr/lib/jvm/java-8-oracleexport HADOOP_HOME=/opt/hadoopexport HADOOP_CONF_DIR=/opt/hadoop /etc/hadoopexport HADOOP_LOG_DIR=/opt/hadoop/logs
注销并重新登录到您的 hadoopuser 帐户,并使用以下命令检查 Hadoop 安装。
hadoop -version
2.3.主节点配置
首先,我们必须更新位于/opt/Hadoop/etc/Hadoop/的 hdfs-site.xml 文件,以定义这台机器上的名称节点和数据节点,并定义复制因子和其他设置:
sudo gedit /opt/hadoop/etc/hadoop/hdfs-site.xml
该文件必须类似于:
<configuration><property><name>dfs.namenode.name.dir</name><value>file:///opt/hdfs/namenode</value><description>NameNode directory for namespace and transaction logs storage.</description></property><property><name>dfs.datanode.data.dir</name><value>file:///opt/hdfs/datanode</value><description>DataNode directory</description></property><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.permissions</name><value>false</value></property><property><name>dfs.datanode.use.datanode.hostname</name><value>false</value></property><property><name>dfs.namenode.datanode.registration.ip-hostname-check</name><value>false</value></property></configuration>
然后,我们必须更新位于/opt/hadoop/etc/hadoop 的 core-site.xml 文件,并让 hadoop 发行版知道名称节点的位置:
sudo gedit /opt/hadoop/etc/hadoop/core-site.xml
该文件必须类似于:
<configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop-namenode:9820/</value><description>NameNode URI</description></property><property><name>io.file.buffer.size</name><value>131072</value><description>Buffer size</description></property></configuration>
然后我们必须更新位于/opt/hadoop/etc/hadoop/的 yarn-site.xml 文件
sudo gedit /opt/hadoop/etc/hadoop/yarn-site.xml
该文件必须类似于:
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>Yarn Node Manager Aux Service</description></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property><name>yarn.nodemanager.local-dirs</name><value>file:///opt/yarn/local</value></property><property><name>yarn.nodemanager.log-dirs</name><value>file:///opt/yarn/logs</value></property></configuration>
然后我们必须更新位于/opt/hadoop/etc/hadoop/的 mapred-site.xml 文件
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value><description>MapReduce framework name</description></property><property><name>mapreduce.jobhistory.address</name><value>hadoop-namenode:10020</value><description>Default port is 10020.</description></property><property><name>mapreduce.jobhistory.webapp.address</name><value> hadoop-namenode:19888</value><description>Default port is 19888.</description></property><property><name>mapreduce.jobhistory.intermediate-done-dir</name><value>/mr-history/tmp</value><description>Directory where history files are written by MapReduce jobs.</description></property><property><name>mapreduce.jobhistory.done-dir</name><value>/mr-history/done</value><description>Directory where history files are managed by the MR JobHistory Server.</description></property></configuration>
现在我们必须格式化名称节点
hdfs namenode –format
最后,我们必须将您的数据节点(Slaves)添加到位于/opt/hadoop/etc/hadoop 的 workers 文件中
10.0.1.110.0.1.210.0.1.3
配置数据节点后,您必须确保名称节点可以无密码访问它们:
ssh-copy-id -i /home/hadoopuser/.ssh/id_rsa.pub hadoopuser@10.0.1.2ssh-copy-id -i /home/hadoopuser/.ssh/id_rsa.pub hadoopuser@10.0.1.3
2.4.配置数据节点
注意:您可以将 Hadoop.tar.gz 文件从名称节点复制到数据节点并提取,而不是下载 Hadoop。你可以使用下面的命令:
scp hadoop.tar.gz hadoop-datanode-2:/home/hadoopuserscp hadoop.tar.gz hadoop-datanode-3:/home/hadoopuser
在每个数据节点上,您必须执行以下步骤:
我们必须更新位于/opt/hadoop/etc/hadoop 目录下的 hdfs-site.xml、core-site.xml、yarn-site.xml 和 mapred-site.xml,如下所示:
hdfs-site.xml
<configuration><property><name>dfs.datanode.data.dir</name><value>file:///opt/hdfs/datanode</value><description>DataNode directory</description></property><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.permissions</name><value>false</value></property><property><name>dfs.datanode.use.datanode.hostname</name><value>false</value></property></configuration>
core-site.xml
<configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop-namenode:9820/</value><description>NameNode URI</description></property></configuration>
yarn-site.xml
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>Yarn Node Manager Aux Service</description></property></configuration>
mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value><description>MapReduce framework name</description></property></configuration>
2.5.启动 Hadoop
完成上述步骤后,我们必须从名称节点执行以下命令来启动名称节点、数据节点和辅助名称节点:
start-dfs.sh
它将给出以下输出:
Starting namenodes on [hadoop-namenode]Starting datanodesStarting secondary namenodes [hadoop-namenode]
此外,要启动资源管理器和节点管理器,我们必须执行以下命令:
start-yarn.sh
它将给出以下输出:
Starting resourcemanagerStarting nodemanagers
之后,为了确保 Hadoop 成功启动,我们必须在 name node 上运行 jps 命令,data nodes 必须给出以下输出:
在名称节点上(忽略进程 id):
16488 NameNode16622 DataNode17215 NodeManager17087 ResourceManager17530 Jps16829 SecondaryNameNode
在数据节点上(忽略进程 id):
2306 DataNode2479 NodeManager2581 Jps
如果您得到类似的输出,那么所有的 Hadoop 守护进程都会成功启动。
注意:您可以通过运行 hdfs dfsadmin -report 命令*(它必须返回 Live datanodes (3))* ,在/opt/hadoop/logs 下检查日志并检查是否一切正常。
2.6.在浏览器上访问 Hadoop
Namenode
访问以下网址:https://Hadoop-NameNode:9870/
资源经理
访问以下 URL:https://Hadoop-NameNode:8088/
3.参考
- [1] F. Houbart,“如何安装和设置 hadoop 集群”,Linode,2017 年 10 月 16 日。【在线】。可用:https://www . Li node . com/docs/databases/Hadoop/how-to-install-and-set-up-Hadoop-cluster。【2018 年 7 月 20 日获取】。
- [2]“栈溢出问答”,栈溢出,[在线]。可用:https://www.Stackoverflow.com。
- [3]“Apache Hadoop 文档”,Apache,[在线]。可用:https://www.hadoop.apache.org。【访问时间 2018 年 01 月 07 日】。
- [4] G. Bansal,“在 Ubuntu 上安装 Hadoop 3.0.0 多节点集群”,2017 年 8 月 31 日。【在线】。可用:http://www . gaur av 3 ansal . blogspot . com/2017/08/installing-Hadoop-300-alpha-4-multi . html【访问时间 16 07 2018】。
- [5] M. Litwintschik,“Hadoop 3 单节点安装指南”,2018 年 3 月 19 日。【在线】。可用:http://www . tech . marksblogg . com/Hadoop-3-single-node-install-guide . html【2018 年 10 月 06 日访问】。
在 Windows 10 中安装基于 Python 的机器学习环境
机器学习入门指南
Photo by Ahmad Dirini on Unsplash
**目的:**为机器学习安装一个基于 Python 的环境。
The following set of instructions were compiled from across the web and written for a Windows 10 OS. Last tested on 02/09/2019.
概观
当我第一次进入机器学习领域时,我花了几个小时来思考如何正确设置我的 Python 环境。出于沮丧,我决定写这篇文章来帮助任何经历这个过程的人。我们将从安装 Anaconda Navigator 开始,这将允许我们创建独立的环境,这将非常方便。此外,使用 Anaconda,我们可以用非常简单的命令轻松安装兼容的 Python 模块。最后,我们可以使用 Anaconda 获得 Spyder——一个科学的 Python 开发环境。如果您按照下面显示的步骤操作,您将很快安装好 Tensorflow、Keras 和 Scikit-learn。
得到蟒蛇
为了开始用 Python 构建您的机器学习(ML)模型,我们将从安装 Anaconda Navigator 开始。Anaconda 提供了一种在您的机器上安装 Python 模块的高效而简单的方法。所以让我们开始吧。
- 下载并为你的操作系统安装最新版本的 Anaconda Navigator。
2.继续安装向导,但是跳过需要下载和安装 VS 的步骤,我们将在后面完成。此外,确保为单个用户安装 Anaconda Navigator 为所有用户安装 Anaconda 可能会导致问题。例如,您将无法安装任何模块,因为 Anaconda 没有必要的特权。
Make sure you install Anaconda to the current user else you might face problems down the road.
Skip this step. We will get it done in a bit.
3.启动 Anaconda Navigator 并选择 Home 选项卡,它应该是默认选中的。找到 VS 代码面板,点击安装按钮。这需要一两分钟。
After you install VS Code, you will be able to see a Launch button under the VS Code panel.
安装 Keras 和 Tensorflow
现在我们已经安装了 Anaconda,让我们在机器中安装 Keras 和 Tensorflow。
4.关闭 Anaconda Navigator 并启动 Anaconda 提示符。通过在 windows 搜索栏中搜索来启动 Anaconda 提示符。下面的终端应该打开。注意,这将在 base Anaconda 环境中打开。
5.将 Python 降级为Keras&tensor flow兼容版本。Anaconda 将开始寻找 Python 3.6 的所有兼容模块。这可能需要几分钟时间。要降级到 Python 3.6,请使用以下命令:
conda install python=3.6
After the environment is resolved, Anaconda will show you all the packages that will be downloaded. Currently, Tensorflow offers compatiblity with Python 3.5–3.8.
6.创建一个新的 conda 环境,我们将在其中安装我们的模块,以使用 GPU 构建我们的模型。为此,请执行以下命令:
conda create --name PythonGPU
注意:确保你有一个 NVIDIA 显卡。如果没有,安装 Keras 的 CPU 版本。
如果您想使用您的 CPU,请执行以下命令:
conda create --name PythonCPU
按照终端上显示的说明进行操作。Conda 环境允许用户自由安装非常特殊的独立模块。我个人创造了两个环境。一个是我可以使用 CPU 构建我的模型,另一个是我可以使用 GPU 构建我的模型。关于康达环境的更多信息,我建议你看一下官方文档。
7.要激活刚刚创建的 conda 环境,请使用:
activate PythonGPU
或activate PythonCPU
要停用环境,请使用:
conda deactivate
不要停用环境,我们将安装所有好的东西。
8.要安装 Keras & Tensorflow GPU 版本,即使用我们的 GPU 创建模型所必需的模块,请执行以下命令:
conda install -c anaconda keras-gpu
如果您想使用您的 CPU 来构建模型,请改为执行以下命令:
conda install -c anaconda keras
许多计算机的东西将开始发生。一旦疯狂停止,我们可以继续前进。先不要关闭任何东西。
为机器学习/深度学习获取 Spyder 和其他 Python 包
现在,您可能需要一些软件来编写和执行您的 Python 脚本。您可以随时使用 Vim 来编写和编辑您的 Python 脚本,并打开另一个终端来执行它们。然而,你将错过 Spyder 提供的所有酷功能。
9.安装 Spyder。
conda install spyder
10.安装熊猫。Pandas 是一个非常强大的库,允许您轻松地读取、操作和可视化数据。
conda install -c anaconda pandas
如果您想用 Pandas 读取 Excel 文件,请执行以下命令:
conda install -c anaconda xlrd
conda install -c anaconda xlwt
11.安装 Seaborn 库。Seaborn 是一个令人惊叹的库,可以让您轻松地可视化您的数据。
conda install -c anaconda seaborn
12.安装 scikit-learn。
conda install -c anaconda scikit-learn
13.安装枕头来处理图像
conda install pillow
添加缺少的模块
现在,您应该对使用 conda 命令安装模块感到满意了。如果你需要一个特定的模块,只需在谷歌上搜索如下内容:
Anaconda LibraryNameYouWant Install
如果你遇到任何问题,搜索网页。很可能你不是第一个遇到给定错误的人。
启动 Spyder 并检查所有模块是否安装正确
要启动 Spyder,首先激活您想要的 conda 环境(PythonCPU 或 PythonGPU)并执行以下命令:
spyder
为了确保一切安装正确,在 python 控制台上执行以下代码行:
import numpy as np # For numerical fast numerical calculations
import matplotlib.pyplot as plt # For making plots
import pandas as pd # Deals with data
import seaborn as sns # Makes beautiful plots
from sklearn.preprocessing import StandardScaler # Testing sklearn
import tensorflow # Imports tensorflow
import keras # Imports keras
如果您没有看到 ModuleImport 错误,您现在可以开始使用 Keras、Tensorflow 和 Scikit-Learn 构建基于机器学习的模型了。
图表
www.frank-ceballos.com](https://www.frank-ceballos.com/) [## Frank Ceballos -威斯康星医学院博士后| LinkedIn
我是威斯康星医学院的博士后研究员,在那里我分析高维复杂的临床数据…
www.linkedin.com](https://www.linkedin.com/in/frank-ceballos/)