TowardsDataScience 博客中文翻译 2019(三百六十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

AirBnB 新用户预订预测——使用机器学习

原文:https://towardsdatascience.com/new-airbnb-user-booking-prediction-using-machine-learning-874836bff403?source=collection_archive---------23-----------------------

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

Photo credits to Prexels

对任何公司来说,最有价值的信息之一就是了解用户的行为。一个好的战略决策通常基于对客户购买模式和趋势的了解。此外,互联网已经连接了世界,我们的数据被共享,并用于网络上的每一个营销活动。数据已经成为 21 世纪最有价值的商品。

在这篇摘录中,我想使用机器学习来预测 AirBnb 新用户的行为,以分类用户是否会在注册账户的 5 天内进行预订。这个博客解释了这个项目的工作流程和一些决策。尽情享受吧!

你可以在这里找到这个项目报告

我还在 Heroku 上托管了一个 flask 应用程序,请随意查看这里的。

问题陈述:

我们能使用机器学习来发现 AirBnB 新用户的洞察力吗?

我们如何利用用户行为预测来最大化假想营销活动的收益?

TL;速度三角形定位法(dead reckoning)

我们从在 Kaggle 上发现的不平衡数据集开始。我们使用 ADASYN 对我们的训练集进行过采样,以输入到基本的逻辑回归模型中。我们决定使用 AUC 分数作为我们的评估指标,因为我们希望根据假设的业务约束优化概率阈值。总之,使用我们的最佳表现模型(CatBoost),我们应该向至少有 16%的预订概率的用户做广告,以最大化净收入。在这个过程中,我们发现用户通过 web 应用程序和特定的注册流程进行注册会产生更高的整体转化率。

这是我的方法:

  1. 数据预处理
  2. 型号选择
  3. 模型评估和度量
  4. 要点和建议
  5. 烧瓶应用程序

数据预处理

为了这个项目,我使用了 Kaggle 上的一个旧数据集。你可以在这里找到数据集。Kaggle 最初的问题陈述是预测新用户的首次旅行目的地。我更感兴趣的是第一次使用 AirBnb 的用户是否会预订。

以下是我使用的一些功能:

  • date_account_created:帐户创建日期
  • timestamp_first_active:第一个活动的时间戳,注意它可以早于 date_account_created 或 date_first_booking,因为用户可以在注册之前进行搜索
  • date_first_booking:首次预订的日期
  • 性别
  • 年龄
  • 注册方法
  • 注册流:用户注册的页面
  • 语言:国际语言偏好
  • affiliate_channel:什么样的付费营销
  • affiliate_provider:营销的地方,如谷歌,craigslist,其他
  • first_affiliate_tracked:用户在注册之前互动的第一个营销是什么
  • 注册应用程序
  • 第一设备类型
  • 第一个浏览器

由于我们偏离了最初的 Kaggle 问题陈述,我们必须制作自己的输出标签。我决定,我们的积极阶层将是那些在注册 AirBnB 账户后 5 天内进行预订的人,否则他们将被视为处于消极阶层。在 5 天之后,既记账又预订的用户数量显著减少,因此,我使用 5 天作为分类阈值。

在注册后 5 天内预订的用户被标记为 1。

在注册后 5 天内没有预订的用户被标记为 0。

使用这个定义,我们有大约 40,000 个正类(1)和 111,500 个负类(0)。在实践中,我们的积极阶层代表性不足是相当普遍的。这被称为不平衡数据集。这是一个专门针对欺诈或其他异常检测等问题的问题。克服不平衡数据的常用技术是对训练数据集进行过采样。我们从来不想在我们的验证或测试集上进行过采样。在这个项目中,我使用了 ADASYN,它是*自适应合成采样方法的缩写。*在将数据分成训练集、验证集和测试集之后,我将 ADASYN 应用于训练集。我们现在正在处理 66,880 个阳性和 69,685 个阴性标签。最后,让我们开始建模…

模特培训

在应用任何高级机器算法之前,最好总是构建一个普通的基础模型。我使用 SciKit-Learn 的逻辑回归软件包来训练一个基本模型。结果如下:

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

如您所见,由于分布不平衡,我们的模型在预测负类(0)方面比正类(1)做得更好。对于这个项目,我们希望最大化我们的阳性类(1)的 AUC 分数。我将在下面的评估部分更详细地解释我们为什么选择这个指标。

我继续使用其他分类算法,如朴素贝叶斯、KNN、决策树、RandomForest、XGBoost 和 CatBoost。我根据 AUC 分数挑选了表现最好的 3 个模型,并对所有这些模型进行了参数调整。我将在另一篇文章中详细介绍如何有效地使用 GridSearchCV 来调整不平衡数据集上的参数。以下是参数调整后 AUC 得分最高的前 3 个模型的结果。

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

在选择具有相似性能的型号时,需要考虑一些事情。我将在下一节“模型评估”中讨论更多细节。

模型评估和度量

如上所述,我们主要关注最大化 AUC 分数。AUC 代表曲线下面积。它是在各种概率阈值下模型性能的度量。分类算法的默认概率阈值设置为 0.50。这意味着如果模型输出 0.50 或更大的概率,它将预测正类(1)。相反,如果模型输出 0.50 或更小的概率,它将预测负类(0)。我们在哪里设置阈值是特定于业务案例的约束。在我们定义假设的业务案例之前,让我们看看在模型选择过程中我们可能要考虑的其他事情。

模型的可解释性是选择模型时要考虑的最重要的事情之一。最终,我们希望能够解释我们模型的结果,并对问题提出有见地的建议。在三个模型(logistics、XGBoost、CatBoost)中,Logistics 回归是迄今为止最容易解释的。

模型训练速度可能是另一个需要考虑的因素。如果经常重新训练模型是令人感兴趣的事情,人们可能希望训练速度尽可能快。其他人可能也希望预测速度尽可能快,因为预测速度直接影响客户在 web 上的信息流。在我们的例子中,我们对训练时间更感兴趣,因为我们希望能够随着更多数据的可用而定期更新我们的模型。以下是顶级模特的训练时间:

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

同样,逻辑回归在速度上胜出,但 CatBoost 也不算太慢。

最后,但也是最重要的,让我们将这些点与我们假设的 AirBnB 业务问题联系起来。

我们如何利用用户行为预测来最大化假想营销活动的收入?

我们的目标是最大限度地提高假想营销活动的收入。让我们来解释一下这个问题的背景。经过一番研究,我得出了一些估计(它们绝不是 100%准确的):

预计 2020 年将有大约 220 万新用户使用 AirBnB。所有首次用户中有 23%预计会进行预订—这是我们样本数据集中的正类样本。当平均预订价格为每晚 160 美元(17%的费用来自预订者,3%来自房东)时,AirBnB 的每次预订收入约为 32 美元。我还估算了每个用户的平均广告成本为 5 美元。不要太在意这些数字是从哪里来的,但要得出合理的结论,有这些业务约束是很重要的。利用这些信息,我们可以预测每个用户的成本和收益。

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

通过了解我们预测的成本和收益,我们可以改变概率阈值来最大化任何广告活动的利润。每个概率阈值将为真阳性、真阴性、假阳性和假阴性的数量产生一组不同的计数。我们要绘制概率阈值与净收入的关系图。

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

很明显,CatBoost 模型为我们假设的营销活动带来了最高的收入。这与我们的假设一致,即最大的 AUC 分数将产生最好的结果。尽管就训练时间而言,CatBoost 是一种比 logistics regression 慢的算法,但就总收入而言,它比 logistics regression 多 150,000 美元。在下一节中,我将讨论将我们的概率阈值设置为 0.16 的重要性及其意义。

要点和建议

如上所述,我们需要将概率阈值设置为 0.16,以达到我们假设的活动的最大收入。这意味着,如果我们的模型预测一个新用户有 16%或更高的机会预订,那么在我们的活动中瞄准这个用户是值得的。

让我们看看我们选择的 CatBoost 模型的特性重要性。

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

使用基于树的模型的缺点是我们失去了可解释性。根据你所处的行业,有时候了解你的模型的解释比模型的表现更重要。从功能重要性来看,我们只知道 signup_flow、signup_method 和 signup_app 是预测预订行为的重要因素。

为了更深入,让我们来看看物流回归模型的系数,它具有很高的可解释性。它似乎与 CatBoost 模型的功能重要性保持一致。这样,我们就可以对每个功能如何影响用户行为有一些信心

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

These coefficients are transformed from log odds

就拿‘sign up _ app _ Web’来说吧。在其他功能保持不变的情况下,通过网络注册的新用户在注册账户 5 天后进行预订的几率是不通过网络注册的用户的 6 倍。AirBnB 的网络体验一定有什么能产生更高的转化率。类似地,同样的分析也适用于注册流程。注册流本质上是用户从最初接触产品到注册页面所看到的页面流。注册流 24、3 和 12 往往表现良好。

烧瓶应用程序

如果你能走到这一步,我为你骄傲!下面是 Flask 应用程序的一个片段。如果你有兴趣的话,可以自己去看看!我将把如何创建烧瓶应用程序的细节留待以后讨论。我通过 Heroku 在一个免费的托管平台上部署了应用

关于 CatBoost,我应该说的另一点是,与其他算法不同,CatBoost 将以文字形式接受特性。我们不需要一次性编码分类特征,这有助于简化 Flask 应用程序的后端 python 脚本。

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

感谢您的阅读!

你可以在这里找到这个项目库。

你也可以在我的 LinkedIn 上找到这个帖子。

人工智能和机器学习时代数学/统计科学学生的新途径

原文:https://towardsdatascience.com/new-avenues-for-statistical-science-students-in-the-era-of-artificial-intelligence-machine-291d630437c2?source=collection_archive---------31-----------------------

在这个从手机、家电和电子产品、城市、电子商务、医疗保健、连接到工业 4.0 标准的一切都变得“智能”的时代,我们关注统计科学的范围。人工智能和机器学习是技术的新流行语;让人想起电的发现或计算机的发明。工资最高的工作是在人工智能、人工智能和数据科学领域。没有统计科学的核心,这些途径是不可能的。我们探索统计科学毕业生在新技术领域可以利用哪些技能,以及在“智能”世界中可以弥合哪些差距。

1.传统统计科学

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

Figure 1. Traditional Statistics mostly into reporting and Data Analysis

很久以前,统计学通常被认为是银行和金融部门最常用的学科。大多数毕业生无法超越银行和金融工作的范畴。从工资水平、技术挑战和影响因子来看,这个数学领域不像工程和计算机科学那么酷。然而,统计科学一直是破解最复杂问题的最有力武器,这些问题来自核物理、通信系统、机器人、空间科学和其他许多领域。

1.今日统计科学

随着计算机计算能力的巨大飞跃和更有效的统计算法的发明;人工智能和机器学习已经进入了一个新的领域。它的影响又远又广,几乎触及每一个生命。

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

A 人工智能和机器学习是计算机科学的一个分支,它使用核心统计算法来训练计算机进行学习;通过预测、诊断或预后采取行动。AI 在学术界被广泛接受为使用(深度)神经网络的算法家族,而机器学习则是没有神经网络的统计算法家族。

学习大致分为三类

2.1 监督学习

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

Figure 2.1.1 Supervised learning Logical Architecture [1]

Ssupervised Learning 是一种统计学习算法,它使用一个已知的数据集——称为由输入值和响应值形成的训练数据集——来学习过去,通过损失函数优化来最小化误差,并建立一个模型来对新数据集进行预测。

监督学习分为两部分-

分类:分类响应值,其中数据可以被分成特定的“类”

回归:连续响应值。

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

Figure 2.1.2 (a) Classification example showing decision boundary separating two classes (b) Linear Regression of data points. [2]

2.2 无监督学习

U 监督学习是一种机器学习算法,用于从由没有标记响应的输入数据组成的数据集进行推断。

最常见的无监督学习方法是聚类分析,用于探索性数据分析,以发现数据中隐藏的模式或分组。使用基于诸如欧几里德距离或概率距离的度量定义的相似性度量来对聚类进行建模。

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

Figure 2.2. (a). Clustering of Data Samples using Gaussian Mixture Models and Expectation Maximization.(GMM-EM) (b) Clustering using K-means.[7]

2.3 强化学习

这是另一类算法,通过基于动作最大化奖励和最小化惩罚来学习。它不同于监督学习算法,因为监督学习具有目标数据形式的答案,所以模型是在正确答案上训练的。在强化学习中,主体决定做什么来执行特定的任务。

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

Figure 2.3.1. Typical framing of a Reinforcement Learning (RL) scenario: an agent takes actions in an environment, which is interpreted into a reward and a representation of the state, which are fed back into the agent. [4]

3.当今机器学习/数据科学中使用的算法

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

Table 3.1 Most useful algorithms used in Machine Learning / AI

虽然大多数数学/统计科学毕业生在毕业期间会遇到各种各样的算法,但表 3.1 强调了机器学习和人工智能的当代艺术中最重要的要求。在工业和研究领域,这些算法被广泛使用,并且对它们的熟悉是最受欢迎的。

我们特别强调基于神经网络的人工智能相关算法是未来技术进步的驱动力。接触人工智能现在是毕业生的必修课。

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

Figure 3.1 Applications of AI. (a) Objects detection from the image [6] (b) Time Series prediction on some data

A I 用于基于视觉的应用,如 o 对象检测、对象分类、对象语义字幕。自动驾驶汽车、面部识别、入侵检测是流行的用例。

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

Figure 3.2 (a) Self Driving car identifying objects on front. [3]

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

b) Speech to text used in modern day applications like Voice search, Google Maps, Voice assisted infotainment in vehicles etc.[4]

A I 用于序列建模,带时间语义数据。时间序列预测、来自文本数据的情感分析、语言翻译、语音识别、语音到文本和文本到语音是一些最广泛使用的应用。

统计学毕业生需要熟悉线性代数中的关键数学概念、微分学、优化技术,如梯度下降、最大似然和最大后验估计、贝叶斯统计、线性模型

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

Table 3.2. Key mathematical concepts required to be familiar with

4.程序设计语言

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

统计科学毕业生不需要熟悉计算机科学工程,但是,至少一门编程语言的知识和将数学模型编码成软件的能力是必须的。事实上,上面提到的大多数工具和算法都是在编程练习中学会的。

ython 是数据科学家和计算机科学专业人士用来构建 ML 和 AI 应用程序的最流行的语言。Python 已经走在了传统语言的前面,如 Java、C++、PHP 。它很容易学习,非常强大,涵盖几乎所有应用程序的库,强大的用户基础 Github 和堆栈溢出。根据大多数跨行业的调查[8–12],Python 作为最通用、最流行的编程语言占据主导地位。

通过 python 学习数据科学及其应用既简单又有趣。Python 拥有数百个数据科学库来构建强大的应用程序。

强烈建议数据科学专业的学生在学习这门课程时熟悉 Python。能够将数学模型转化为工作程序对学生来说是最大的优势。

M ATLAB 是最强大的商用数值计算平台。学生熟悉它是一个加分项。

R 专为统计应用而设计,但是不同平台上丰富的库使得 Python 成为更好的选择,因为解决方案需要跨各种技术栈的集成。

5.ML/DS 的职业前景和道路

数据科学家是过去 4 年来最好的工作[13,14]。数学/统计科学毕业生的范围是巨大的。麦肯锡全球研究所警告说,数据和分析人才严重短缺。仅美国就缺少 20 万名数据科学家和 120 万名具有数据科学知识的管理人员。其他国家的短缺并没有太大的不同。在过去的 4 年中,对 ML 和数据科学专业人员的需求增长了 10 倍[14]。

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

Figure 5. Rate of Growth of Jobs in Specific Domains [14]

LinkedIn[14]也分析了这些工作的职业道路,以下是 5 个最常见的前角色

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

Table 5. Career Path for the Machine Learning Engineer and Data Scientist

6.结论

我们强调了数据科学在各个行业领域的范围,研究了成为数据科学家/机器学习/人工智能专家所需的数据科学方面的特定技能。我们还展示了该领域毕业生的职业前景、需求和道路。培养具有上述技能的统计毕业生至关重要,以使他们符合当前的技术需求。如果以上任何一项缺失,大学最好纳入数学/统计科学毕业生的完整技能发展。

7.参考

1.NPTEL —机器学习简介

2.https://kindsonthegenius . com/blog/2018/01/what-is-the-difference-that-classification-and-regression . html

3.https://blog . statsbot . co/neural-networks-for-初学者-d99f2235efca

4.https://9 to 5 Google . com/2017/04/18/Google-cloud-speech-API-recognition/

5.https://en.wikipedia.org/wiki/Reinforcement_learning

6.https://en.wikipedia.org/wiki/Object_detection

7.斯坦福大学机器学习 CS229

8.https://coding infinite . com/best-programming-languages-to-learn-2019/

9.https://www . techrepublic . com/article/forget-the-most-popular-programming-languages-heres-what-developers-actual-use/

10.https://www . geeks forgeeks . org/top-10-programming-languages-of-the-world-2019-to-begin-with/

11.https://www . fullstackacademy . com/blog/nine-best-programming-languages-to-learn-2018

12.https://technostacks.com/blog/top-programming-languages

13.https://www . Forbes . com/sites/louiscumbus/2018/01/29/data-scientist-is-the best-job-in-America-dues-2018-rankings/# 182 f4b 955535

14.https://economic graph . LinkedIn . com/research/LinkedIns-2017-US-Emerging-Jobs-Report

15.https://www . Forbes . com/sites/louiscolumbus/2016/12/18/mckinseys-2016-analytics-study-defines-the-future-machine-learning/# 3aa 65 f 9514 EB

16.麦肯锡全球研究院——分析时代:在数据驱动的世界中竞争,2016

在 2019 年 Geo for Good 峰会上宣布了新的地球引擎功能

原文:https://towardsdatascience.com/new-earth-engine-features-announced-at-geoforgood-summit-2019-57c33ef48bb8?source=collection_archive---------24-----------------------

改进的文档|与 Google AI 平台的集成|更酷的可视化

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

The Geo for Good Summit 2019 was held on 16–19 Sep 2019 at Google Event Center, Sunnyvale, California. Image by Google Earth Outreach.

随着 2020 年 9 月 14 日 Geo for Good Summit 2020 的临近,看看去年宣布的所有新功能可能会有所帮助。这不仅能帮助你学习新的技巧和诀窍,还能帮助你决定参加网上活动(如果你还犹豫不决的话)。

Geo for Good Summit 2019 于 2019 年 9 月 19 日落下帷幕,作为第一次与会者,我惊讶地看到峰会上宣布的新进展数量。此次峰会是同类峰会中的第一次,它将用户峰会和开发者峰会合二为一,让用户受益于新工具的知识,让开发者了解用户的需求。因为我的主要关注点是大规模地理空间建模,所以我只参加了与谷歌地球引擎相关的研讨会和分组会议。至此,让我们来看看三个新的令人兴奋的发展,以打击地球引擎

1.关于机器学习的更新文档

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

The documentation for Machine Learning and Deep Learning has been updated. Screenshot by author from this website.

文档真的吗?是啊!作为一名业余地球引擎用户,我对这个工具的头号抱怨是它在应用开发者网站谷歌地球博客和它们的堆栈交换答案之间传播的糟糕的文档质量。因此,欢迎对文档进行任何更新。我很高兴文档已经更新,以帮助对实现机器学习和深度学习模型感兴趣的地理空间数据科学家的不断增长的用户群。

文档附带了自己的示例 Colab 笔记本。示例笔记本有监督分类非监督分类密集神经网络卷积神经网络Google Cloud 上的深度学习。我发现这些笔记本对我的起步非常有用,因为在流程中有相当多的非平凡数据类型转换(intfloat32等等)。

2.地球引擎和人工智能平台集成

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

The Google Colab Environment is now integrated with Google AI Platform using the ee.Model API. Image by author.

尼克·柯林顿和克瑞丝·布朗共同宣布了期待已久的地球引擎+谷歌人工智能平台整合。到目前为止,用户基本上限于在 Google Colab 的虚拟机(VM)上运行小型作业,并希望与 VM 的连接不会超时(通常持续约 4 小时)。其他限制包括缺少任何任务监控或排队功能。

不再是了!新的ee.Model()软件包让用户可以与谷歌云服务器通信,他们可以根据自己的需要来设置服务器。不用说,这是对 VM 上以前提供的原始深度学习支持的巨大改进。尽管它是免费的,但人们不能简单地训练、验证、预测和部署任何大于几层的模型。一旦在 Google bucket 中创建了.TFRecord对象,就必须在 Google AI 平台上单独完成。通过这种云集成,用户可以直接在 Colab 环境中运行和测试他们的模型,从而极大地简化了这项任务。ee.Model()类附带了一些有用的功能,比如ee.Model.fromAIPlatformPredictor()可以直接从你在谷歌云上的模型预测地球引擎数据。

最后,由于你的模型现在位于人工智能平台上,你可以作弊并使用你自己离线训练的模型来预测地球上的发动机数据并绘制其输出图。注意,如果你想这样做,你的模型必须用tf.contrib.saved_model格式保存。流行的 Keras 功能model.save_model('model.h5')ee.Model()不兼容。

展望未来,似乎该团队计划坚持将 Colab Python IDE 用于所有深度学习应用程序。然而,对于深受喜爱的 javascript 代码编辑器来说,这并不是致命的打击。在峰会上,我看到与会者仍然更喜欢 javascript 代码编辑器来完成他们的非基于神经的机器学习工作(如支持向量机、随机森林等)。).作为一个 python 爱好者,我也去代码编辑器快速可视化和地球引擎应用!

我没有在峰会上试用新的ee.Model()包,但尼克·克林顿展示了一个笔记本,上面有一个简单的工作示例来帮助我们学习函数调用。开发过程中仍然存在一些问题,比如由于“地球引擎与云平台的通信方式”,在预测期间将卷积内核限制为仅 144 像素宽,但他向我们保证,这将很快得到解决。总的来说,我对这种集成感到兴奋,因为 Earth Engine 现在是我地理空间计算工作的真正替代选择。随着地球引擎团队承诺在ee.Model()类中提供更多新功能,我想知道世界各地的公司和实验室是否会开始将他们的建模工作迁移到地球引擎。

3.更酷的可视化!

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

Global 24-hour temperature animated gif produced on Earth Engine using the ‘NOAA/GFS0P25’ dataset. Link to code. Image by author.

Matt Hancher 和 Tyler Erickson 展示了一些与可视化相关的新功能,我发现这大大简化了开发动画视觉效果的工作。使用ee.ImageCollection.getVideoThumbURL()功能,您可以在几秒钟内创建自己的动画 gif!我在一组数据集上试了一下,创建 gif 的速度确实令人印象深刻。

对将视频的每一次迭代导出到你的硬盘说再见吧,因为使用print()命令这些 gif 就出现在控制台上!上面显示的是来自“NOAA/GFS0P25”数据集的全球温度预测示例。波浪状图案是由于地球自转导致太阳在不同时间撞击我们星球的表面造成的。制作 gif 的代码可以在这里找到。这个动画是基于迈克尔·德威特的原创博文中的例子,我参考了开发者页面上的这个 gif 制作教程来制作的。

我没有涵盖峰会上介绍的所有新特性和功能。为此,请阅读峰会重点介绍工具,如 Google Earth Pro,BigQuery GIS,Plus Codes 等。您还可以查看峰会的会议资源,获取您感兴趣主题的演示文稿和笔记本。

#GeoforGood19

Hadoop 中的新特性:你应该知道 Hadoop 中的各种文件格式。

原文:https://towardsdatascience.com/new-in-hadoop-you-should-know-the-various-file-format-in-hadoop-4fcdfa25d42b?source=collection_archive---------5-----------------------

Hadoop 文件格式初学者指南

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

答几周前,我写了一篇关于 Hadoop 的文章,并谈到了它的不同部分。以及它如何在数据工程中发挥重要作用。在这篇文章中,我将总结 Hadoop 中不同的文件格式。这个话题将会很简短。如果你想了解 Hadoop 是如何工作的,以及它在数据工程中的重要作用,请访问我关于 Hadoop 的文章,或者跳过它。

[## Apache Hadoop 小结:大数据问题的解决方案和来自 Google 的提示

欢迎学习大数据和 Hadoop 简介,我们将在这里讨论 Apache Hadoop 以及如此大的问题…

towardsdatascience.com](/a-brief-summary-of-apache-hadoop-a-solution-of-big-data-problem-and-hint-comes-from-google-95fd63b83623)

Hadoop 中的文件格式大致分为两类:面向行和面向列:

面向行:
存储在一起的同一行数据即连续存储:SequenceFile、MapFile、Avro Datafile。这样,如果只需要访问该行的少量数据,则需要将整行数据读入内存。延迟序列化可以在一定程度上减轻问题,但是从磁盘读取整行数据的开销是无法收回的。面向行的存储适用于需要同时处理整行数据的情况。

面向列:
将整个文件切割成几列数据,并将每列数据存储在一起:Parquet、RCFile、ORCFile。面向列的格式可以在读取数据时跳过不需要的列,适用于只有一小部分行在字段中的情况。但是这种读写格式需要更多的内存空间,因为缓存行需要在内存中(在多行中获取一列)。同时也不适合流式写入,因为一旦写入失败,当前文件无法恢复,而面向行的数据可以在写入失败时重新同步到上一个同步点,所以 Flume 使用面向行的存储格式。

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

Picture 1.(Left Side )Show the Logical Table and Picture 2. ( Right Side) Row-Oriented Layout(Sequence File)

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

Picture 3. Column-oriented Layout (RC File)

如果仍然不清楚什么是面向行和面向列,不要担心,你可以访问这个链接并知道它们之间的区别。

以下是一些在 Hadoop 系统上广泛使用的相关文件格式:

序列文件

存储格式因是否压缩以及是使用记录压缩还是块压缩而异:

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

The Internal structure of a sequence file with no compression and with record compression.

不压缩:
按照记录长度、键值长度、值度、键值、值值顺序存储。该范围是字节数。使用指定的序列化执行序列化。

记录压缩:
只对值进行压缩,并将压缩后的编解码器存储在头中。

分块压缩:
多条记录一起压缩,利用记录间的相似性,节省空间。在块的前后添加同步标志。块的最小值是由属性设置的 io . seqfile . compress . block size。

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

The internal structure of a sequence file with block compression

地图文件

MapFile 是 SequenceFile 的变体。在向 SequenceFile 添加索引并对其排序后,它是一个映射文件。索引存储为一个单独的文件,通常每 128 条记录存储一个索引。可以将索引加载到内存中进行快速查找——这些文件按照键定义的顺序存储数据。
映射文件记录必须按顺序写入。否则,将引发 IOException。

映射文件的派生类型:

  1. SetFile : 一个特殊的映射文件,用于存储一系列可写类型的键。钥匙是按顺序写的。
  2. ArrayFile: Key 是表示在数组中位置的整数,值可写。
  3. BloomMapFile: 使用动态布隆过滤器针对 MapFile get()方法进行了优化。过滤器存储在内存中,只有当键值存在时,才调用常规的 get()方法来执行读取操作。

Hadoop 系统下面列出的文件包括 RCFile、ORCFile 和 Parquet。Avro 的面向列版本是 Trevni。

RC 文件

Hive 的记录列式文件,这种类型的文件首先将数据逐行划分为行组,在行组内部,数据以列的形式存储。其结构如下:

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

Data Layout of RC File in an HDFS block

与纯粹的面向行和面向列相比:

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

Row-Store in an HDFS Block

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

Column Group in HDFS Block

兽人档案

ORCFile(优化记录列文件)提供了比 RCFile 更有效的文件格式。它在内部将数据划分为默认大小为 250M 的条带。每个条带包括一个索引、数据和页脚。索引存储每列的最大值和最小值,以及每一行在列中的位置。

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

ORC File Layout

在 Hive 中,以下命令用于使用 ORCFile:

CREATE TABLE ...STORED AAS ORC 
ALTER TABLE ... SET FILEFORMAT ORC 
SET hive.default.fileformat=ORC

镶木地板

基于 Google Dremel 的面向列的通用存储格式。尤其擅长处理深度嵌套的数据。

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

The internal Structure of Parquet File

对于嵌套结构,Parquet 将其转换为平面列存储,用重复级别和定义级别(R 和 D)表示,并在读取数据以重建整个文件时使用元数据来重建记录。结构。以下是研发的一个例子:

AddressBook {   
     contacts: {     
        phoneNumber: "555 987 6543"  
}   
 contacts: {   
} 
} 
AddressBook { 
}

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

现在,你知道 Hadoop 中不同的文件格式。如果您发现任何错误和建议,请随时与我联系。你可以通过我的 LinkedIn 联系我。

[## 忘记 API 用漂亮的汤做 Python 抓取,从 web 导入数据文件:第 2 部分

API 并不都是为你准备的,但是美丽的汤会永远伴随着你。

towardsdatascience.com](/forget-apis-do-python-scraping-using-beautiful-soup-import-data-file-from-the-web-part-2-27af5d666246)

新程序员的 7 大罪

原文:https://towardsdatascience.com/new-programmers-7-cardinal-sins-310615988944?source=collection_archive---------7-----------------------

面向非程序员的编程

提高编程技能的学习

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

Image from David Rangel available at Unsplash

当我发表文章 时,为什么每个工程师都应该开始考虑发展分析和编程技能? 我怎么也想不到它会对读者产生如此积极的影响。希望开始探索编程和数据科学领域的人向我寻求建议,以充分利用这一惊人的旅程;还有人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常希望在这段旅程中继续分享我的经历、学习、成功和失败,以帮助尽可能多的人过渡到充满无数好处和机会的职业生涯。给你,亲爱的读者:谢谢

-罗伯特

每一次向新职业的过渡都涉及到一个学习曲线;在完全适应新的工作环境之前,我们都必须经历一个过程。具有很强的适应能力和对变化的灵活性的人可能会发现它平滑而简单;其他的可能需要更多的时间和努力。不管你处于学术还是专业阶段,毫无疑问,向数据科学职业过渡将是一个挑战,在某种程度上,这是一个充满持续学习的无尽旅程。然而,迈出第一步是最重要的,但也是最困难的。基于我在数据科学领域的短暂职业生涯,我提出了以下新程序员的 7 " 基数 原罪";我从错误和失败中学到的教训,我希望有人能提前想到;帮助我成长并帮助我在实现目标的道路上更进一步的课程。希望你觉得它们有用…

1.一开始就没有一个初始策略

大多数没有计算机科学或数据分析背景的工程师想要在数据科学领域开始新的职业生涯,他们没有明确的战略,没有成为数据科学家、分析师或工程师的步骤。他们试图在没有真正深入具体话题的情况下,尽可能快地用信息填满自己的脑袋;他们倾向于一次注册多个在线课程,从不同的网站下载一些小抄,阅读许多作者的文章,但没有一个结构化的计划。在开始这段旅程之前,我会 高度 建议制定一个学习计划和一个日常习惯清单,努力实现你的目标,建立/加强你的分析和编程技能。自己研究你想从事的行业中最流行的编程语言和软件,搜索最广泛使用的库和软件包,并根据你的目标确定哪种编程语言和软件最适合你。坚持和练习会让你成为大师。

2.试图同时学习几种编程语言和软件

新程序员经常会受到诱惑,想同时学习几种编程语言和软件,并把它们作为技能写进简历。虽然你可能认为这是推销自己的一种策略,但往往会适得其反。拥有数据科学、数据分析师和数据工程职位的公司和组织更有可能要求候选人在一种或两种(最多三种)编程语言和软件方面具有强大而扎实的背景。很少有职位要求你同时精通 Python、R、SQL、C、C++、C#、Matlab、Java、Ruby 和 Go。取而代之的是,研究你在特定行业或公司更可能使用的编程语言和软件;掌握你的编程和分析技能,成为真正的专家。你会意识到所有的编程语言都有一个共同的逻辑和相似的功能,在此之后,从一种语言到另一种语言的转换只需要你学习不同的语法,而不是它背后的整个逻辑。

3.不要在代码上写注释行

尽管这听起来很明显,是一个无关紧要的任务,但它代表了一个很好的策略,可以跟踪每一行或者每一块代码在返回暂停的项目时所执行的操作。在最初的代码编写过程中,程序员对项目的目的和目标有清晰的认识;他们知道他们想要编码的程序背后的逻辑步骤和他们追求的结果。然而,由于多种原因(经济限制、信息缺失、优先级变化),所有项目都容易暂停,这将迫使程序员切换到不同的任务,使前一个任务暂停。恢复一个被中断的项目花费的时间越长,记住它被留在哪里以及它遗漏的点的机会就越小。这就是注释行发挥作用的地方。试着在你认为有必要的地方包含它们;记住要足够清楚,并牢记它们应该让代码程序员和执行者理解代码背后的逻辑步骤。

4.在编写代码的过程中不要求反馈

你的经理要求你做什么,她/他期望你做什么,客户要求什么,而你实际做了什么,这之间总是有巨大的差距。每当你开发一个程序或新代码时,试着把它分成几个阶段,并在进入下一个阶段之前寻求反馈。在每个阶段结束后获得反馈会让你知道你是否仍然在正确的轨道上,或者是否根据客户的要求需要做出改变。嘿,这并不意味着你不能理解你被要求做的事情,而是把它看作是利益相关者之间想法和期望的一致。你收到的反馈越多,如果偏离了方向,你需要修改的东西就越少。记住,持续的沟通对于每个项目的成功实施都是至关重要的。

5.不测试你目前的知识

你可能已经看过很多如何做和一步一步的编程教程。您可能也读过多本数据科学书籍和编程指南。你可能已经完成了很多来自 Udemy、Coursera 和 DataCamp 的编程训练营。猜猜接下来是什么?测试你目前的知识。这种训练营和课程的真正价值不是结业证书本身,而是你获得的知识和能够 成功应用 解决给定问题。说实话,每个人都可以通过跳过大部分讲座而不真正经历它们来注册在线课程,从而获得证书;公司和组织都意识到了这一点。尝试将自己推向新的极限,在网上寻找编程挑战,尝试头脑风暴的想法,并在没有太多帮助资源的情况下编写代码。这并不意味着你在实际工作中没有它们,但是它会让你感觉更舒服,更安全,更少依赖它们。

6.变得一致

在某些时候,你可能会觉得使用一种特定的编程语言和软件很舒服,但你可能会发现学习一种新的编程语言和软件毫无用处。我多次听到数据分析师争论哪种编程语言在能力、可用的库和包、在线资源和受欢迎程度方面是最好的。然而,你必须足够谦虚,认识到从另一种语言、库、包或软件中学习新东西的空间总是存在的。每种编程语言和软件都有其优点和缺点,但是我们的目标是充分利用它们的优点,并且足够灵活地确定哪种语言和软件最适合用于解决特定问题的特定任务。

7.假设你什么都知道

相信我,你不知道。没人知道。数据科学领域如此广泛,以至于每天都有学习新东西的空间。你能探索、使用和掌握的库、包、函数、方法和算法的总数真的很高。永远保持好奇,记得保持谦虚,因为你认为你知道的越多,实际上你知道的就越少。

— —

如果你觉得这篇文章有用,欢迎在 GitHub 上下载我的个人代码。你也可以直接在 rsalaza4@binghamton.edu 给我发邮件,在LinkedIn上找到我。有兴趣了解工程领域的数据分析、数据科学和机器学习应用的更多信息吗?通过访问我的媒体 个人资料 来探索我以前的文章。感谢阅读。

罗伯特

保护您的隐私,创建您自己的虚拟专用网络

原文:https://towardsdatascience.com/new-story-a6420a1f097?source=collection_archive---------13-----------------------

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

Hacking Scence.

当您的智能手机或笔记本电脑连接到不可信的网络(如酒店、咖啡店或图书馆的 WiFi)时,您是否希望安全可靠地访问互联网?一个虚拟专用网 (VPN)可以让你像在一个专用网上一样,安全地穿越不可信的网络。流量从 VPN 服务器流出,继续其到达目的地的旅程。

OpenVPN 是一款功能全面、开源的安全套接字层(SSL) VPN 解决方案,支持多种配置。在这个由两部分组成的教程中,我们将使用 digital ocean 在 Ubuntu 服务器上设置一个 OpenVPN 服务器,然后配置从 Android 对它的访问。本教程将使每个设置的安装和配置步骤尽可能简单。让我们从第一部分开始,它包括安装和配置的前五个步骤。

第一步:安装 OpenVPN 和 EasyRSA

这一步适用于 VPN 服务器和 CA 机器。我们开始更新我们的包索引并安装 OpenVPN。OpenVPN 在 Ubuntu 的默认存储库中可用,所以我们可以使用apt进行安装

$ sudo apt update 
$ sudo apt install openvpn

OpenVPN 是一种 TLS/SSL VPN。这意味着它使用证书来加密服务器和客户端之间的流量。为了发布可信证书,我们将设置简单的证书颁发机构(CA)。为此,我们将从项目的官方 GitHub 资源库下载最新版本的 EasyRSA,我们将部署它来构建我们的 CA 公钥基础设施(PKI)。

我们将在独立的服务器上构建 CA。这种方法的原因是,如果攻击者能够渗透到我们的服务器,他们将能够访问我们的 CA 私钥,并使用它来签署新的证书,使他们能够访问我们的 VPN。因此,从独立机器管理 CA 有助于防止未经授权的用户访问我们的 VPN。还要注意,作为进一步的预防措施,建议我们在不使用 CA 服务器来签署密钥时将其关闭。

为了开始构建 CA 和 PKI 基础设施,我们使用 wget 在我们的 CA 机器和 OpenVPN 服务器上下载最新版本的 EasyRSA。要获得最新版本,请进入官方 EasyRSA GitHub 项目的 发布页面,复制以.tgz结尾的文件的下载链接,然后将其粘贴到以下命令中:

$ wget -P ~/ [https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz](https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz)

然后提取 tarball:

$ cd ~ 
$ tar xvf EasyRSA-3.0.4.tgz

我们已经成功地在服务器和 CA 机器上安装了所有需要的软件。继续配置 EasyRSA 使用的变量,并设置一个 CA 目录,从中我们将生成我们的服务器和客户机访问 VPN 所需的密钥和证书。

第二步:配置 EasyRSA 变量并构建 CA 证书

我们将仅在 CA 机器上遵循这些说明。EasyRSA 安装了一个配置文件,我们可以编辑它来为我们的 CA 定义一些变量。在我们的 CA 机器上,导航到 EasyRSA 目录:

$ cd ~/Documents/EasyRSA-3.0.4/

这个目录中有一个名为vars.example的文件。我们制作了这个文件的副本,并将副本命名为vars,没有文件扩展名:

$ cp vars.example vars

我们使用我们首选的文本编辑器打开这个新文件,我们可以使用另一个编辑器,例如 nano 编辑器:

$ vim vars

查找为新证书设置字段默认值的设置。它看起来会像这样:~/Documents/EasyRSA-3.0.4/vars

. . .#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "me@example.net"
#set_var EASYRSA_REQ_OU         "My Organizational Unit". . .

取消对这些行的注释,并将突出显示的值更新为我们喜欢的值,但我们不会将它们留空:~/Documents/EasyRSA-3.0.4/vars

. . .set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "DigitalOcean"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community". . .

完成后,保存并关闭文件。在 EasyRSA 目录中有一个名为easyrsa的脚本,调用它来执行与构建和管理 CA 相关的各种任务。我们使用init-pki选项运行这个脚本,在 CA 服务器上启动公钥基础设施:

$ ./easyrsa init-pki

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

在这一点上,我们再次调用easyrsa脚本,在它后面加上build-ca选项。这将构建 CA 并创建两个重要的文件ca.crtca.key,它们构成了 SSL 证书的公共端和私有端。

  • ca.crt是 CA 的公共证书文件,在 OpenVPN 的上下文中,服务器和客户端使用该文件相互通知他们是同一个信任网络的一部分,而不是某人执行的中间人攻击。因此,我们的服务器和所有客户端都需要一份ca.crt文件的副本。
  • ca.key是 CA 机器用来为服务器和客户端签署密钥和证书的私钥。如果攻击者能够访问我们的 CA,进而访问我们的文件,他们将能够签署证书请求并访问我们的 VPN,从而影响其安全性。这就是为什么我们的文件应该只有在我们的 CA 机器上,并且理想情况下,我们的 CA 机器应该在不签署证书请求时保持离线,作为额外的安全措施。

如果我们不想每次与 CA 交互时都被提示输入密码,我们可以运行带有nopass选项的build-ca命令,如下所示:

$ ./easyrsa build-ca nopass

在输出中,我们将被要求确认我们的 CA 的通用名称:

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

通用名称是在证书颁发机构的上下文中用来指代该机器的名称。我们可以输入任何字符串作为 CA 的通用名称,但是为了简单起见,按下ENTER接受默认名称。这样,我们的 CA 就就位了,并准备好开始签署证书请求。

第三步:创建服务器证书、密钥和加密文件

我们将仅在服务器上遵循这些说明。现在我们已经有了一个准备好的 CA,我们可以从我们的服务器生成一个私钥和证书请求,然后将请求传送给我们的 CA 进行签名,创建所需的证书。我们也可以自由创建一些加密过程中使用的附加文件。首先导航到我们的 OpenVPN 服务器上的 EasyRSA 目录:

$ cd ~/Documents/EasyRSA-3.0.4/

从那里,用init-pki选项运行easyrsa脚本。虽然我们已经在 CA 机器上运行了这个命令,但是有必要在这里运行它,因为我们的服务器和 CA 将有单独的 PKI 目录:

$ ./easyrsa init-pki

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

然后再次调用easyrsa脚本,这次使用gen-req选项,后跟机器的通用名称。同样,这可以是我们喜欢的任何东西,但最好是描述性的。在本教程中,OpenVPN 服务器的通用名称将简单地称为服务器。一定要包括nopass选项。如果不这样做,将对请求文件进行密码保护,这可能会导致以后的权限问题:

$ ./easyrsa gen-req server nopass

这将为服务器创建一个私钥和一个名为server.req的证书请求文件。将服务器密钥复制到/etc/openvpn/目录:

$ sudo cp ~/Documents/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/

我们将仅在 CA 机器上遵循这些说明。使用一种安全的方法(比如下面例子中的 SCP ),将server.req文件传输到我们的 CA 机器:

$ scp -i ~/.ssh/id_rsa_do zaid@my_server_ip:~/Documents/EasyRSA-3.0.4/pki/reqs/server.req .

接下来,在我们的 CA 机器上,导航到 EasyRSA 目录:

$ cd ~/Documents/EasyRSA-3.0.4/

再次使用easyrsa脚本,导入server.req文件,遵循具有其通用名称的文件路径:

$ ./easyrsa import-req /tmp/server.req server

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

然后,我们通过运行带有sign-req选项的easyrsa脚本,后跟请求类型和通用名称,对请求进行签名。请求类型可以是clientserver,因此对于 OpenVPN 服务器的证书请求,请确保使用server请求类型:

$ ./easyrsa sign-req server server

在输出中,我们将被要求验证请求是否来自可信的来源。键入yes,然后按ENTER确认:

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

如果我们加密了 CA 密钥,此时会提示我们输入密码。接下来,使用一种安全的方法将签名的证书传输回我们的 VPN 服务器:

$ scp -i ~/.ssh/id_rsa_do pki/issued/server.crt zaid@my_server_ip:/tmp

在退出我们的 CA 机器之前,我们也将ca.crt文件传输到我们的服务器:

$ scp -i ~/.ssh/id_rsa_do pki/ca.crt zaid@my_server_ip:/tmp

我们将只在服务器上遵循这些说明。接下来,重新登录到我们的 OpenVPN 服务器,并将server.crtca.crt文件复制到我们的/etc/openvpn/目录中:

$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

然后导航到我们的 EasyRSA 目录:

$ cd ~/Documents/EasyRSA-3.0.4/

在这里,通过键入以下命令创建一个强 Diffie-Hellman 密钥,以便在密钥交换期间使用:

$ ./easyrsa gen-dh

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

这可能需要几分钟才能完成,所以如果你在这里,我亲爱的读者,你可以喝杯茶,尽情享受。一旦完成,生成一个 HMAC 签名以增强服务器的 TLS 完整性验证能力:

$ openvpn --genkey --secret ta.key

当命令完成时,我们将两个新文件复制到我们的/etc/openvpn/目录中:

$ sudo cp ~/Documents/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/Documents/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

至此,我们的服务器所需的所有证书和密钥文件都已生成。我们已经准备好创建相应的证书和密钥,我们的客户机将使用它们来访问我们的 OpenVPN 服务器。

第四步:生成客户端证书和密钥文件

我们将只在服务器上遵循这些说明。虽然我们可以在客户机上生成私钥和证书请求,然后将其发送给 CA 进行签名,但本指南概述了在服务器上生成证书请求的过程。

这样做的好处是,我们可以创建一个脚本来自动生成包含所有必需的密钥和证书的客户端配置文件。这让我们不必向客户端传输密钥、证书和配置文件,并简化了加入 VPN 的过程。

最佳实践

我们将为本指南生成一个客户端密钥和证书对。如果我们有多个客户,我们可以对每个客户重复这个过程。但是请注意,我们需要为每个客户端的脚本传递一个唯一的名称值。在本教程中,第一个证书/密钥对被称为client1

首先,在我们的主目录中创建一个目录结构来存储客户端证书和密钥文件:

$ mkdir -p ~/client-configs/keys

由于我们将在此目录中存储客户端的证书/密钥对和配置文件,因此作为一项安全措施,我们现在应该锁定其权限:

$ chmod -R 700 ~/client-configs

接下来,导航回我们的 EasyRSA 目录,运行带有gen-reqnopass选项的easyrsa脚本,以及客户端的通用名称:

$ cd ~/Documents/EasyRSA-3.0.4/
$ ./easyrsa gen-req client1 nopass

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

ENTER确认常用名。然后,将client1.key文件复制到我们之前创建的/client-configs/keys/目录中:

$ cp pki/private/client1.key ~/client-configs/keys/

接下来,使用安全方法client1.req文件传输到我们的 CA 机器。我们将仅在 CA 机器上遵循这些说明。

$ sudo scp -i ~/.ssh/id_rsa_do zaid@my_server_ip:~/Documents/EasyRSA-3.0.4/pki/reqs/client1.req .

我们导航到 EasyRSA 目录,并导入证书请求:

$ cd ~/Documents/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1

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

然后像我们在上一步中对服务器所做的那样对请求进行签名。不过,这次一定要指定client请求类型:

$ cd pki/reqs
$ sudo chown zeyd:zeyd client1.req
$ ./easyrsa sign-req client client1

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

在提示符下,输入yes以确认我们打算对证书请求进行签名,并且它来自受信任的来源。同样,如果我们加密了 CA 密钥,这里会提示我们输入密码。这将创建一个名为client1.crt的客户端证书文件。将此文件传输回服务器:

$ scp -i ~/.ssh/id_rsa_do pki/issued/client1.crt zaid@my_server_ip:~/client-configs/keys/

我们将只在服务器上遵循这些指示。接下来,我们也将ca.crtta.key文件复制到/client-configs/keys/目录:

$ cp ~/Documents/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

这样,我们的服务器和客户机的证书和密钥都已生成,并存储在服务器上的适当目录中。仍然需要对这些文件执行一些操作,但是这些将在后面的步骤中进行。现在,我们可以继续在我们的服务器上配置 OpenVPN。

第五步:配置 OpenVPN 服务

我们将仅在服务器上遵循这些说明。现在,我们的客户机和服务器的证书和密钥都已经生成,我们可以开始配置 OpenVPN 服务来使用这些凭证。首先将一个示例 OpenVPN 配置文件复制到配置目录中,然后提取它,以便将其用作我们设置的基础:

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz

在我们首选的文本编辑器中打开服务器配置文件:

$ sudo vim /etc/openvpn/server.conf

通过查找tls-auth指令找到 HMAC 部分。这一行应该已经被取消了注释,但是如果没有,那么删除"“取消注释。在这一行下面,添加key-direction参数,设置为" 0":/etc/openvpn/server.conf

tls-auth ta.key 0 # This file is secret
key-direction 0

接下来,通过查找注释掉的cipher行,找到关于加密算法的部分。AES-256-CBC密码提供了很好的加密级别,并得到了很好的支持。同样,这一行应该已经被取消了注释,但是如果没有,那么就删除""前置:/etc/openvpn/server.conf

cipher AES-256-CBC

在此之下,添加一个auth指令来选择 HMAC 消息摘要算法。为此,SHA256是个不错的选择:/etc/openvpn/server.conf

auth SHA256

接下来,找到包含定义 Diffie-Hellman 参数的dh指令的行。由于最近对 EasyRSA 进行了一些更改,Diffie-Hellman 密钥的文件名可能与示例服务器配置文件中列出的不同。如有必要,通过删除2048来更改此处列出的文件名,使其与我们在上一步中生成的密钥一致:/etc/openvpn/server.conf

dh dh.pem

最后,找到usergroup设置,去掉**;**"在每一行的开头取消对这些行的注释:/etc/openvpn/server.conf

user nobody
group nogroup

到目前为止,我们对样本server.conf文件所做的更改对于 OpenVPN 的运行是必要的。下面列出的更改是可选的,尽管它们对于许多常见用例来说也是必需的。

在 Udemy 上查看我们的免费课程。

感谢阅读。如果你喜欢这篇文章,请点击下面的按钮,这样我们就可以保持联系。

注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

图像处理新手?

原文:https://towardsdatascience.com/new-to-image-processing-5aa5200aa895?source=collection_archive---------36-----------------------

本文将总结最基本和最简单的图像处理技术,如 RGB 提取、对象标记,并展示对图像应用不同类型的滤镜后会发生什么。

下面例子的环境是用 Octave interpreter for Linux 在 Octave 中完成的。

RGB 与 HSV 提取

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

Figure 1. The Comparison Extracting the original image with RGB vs HSV

图像提取可以通过两种方法完成,直接从 RGB 颜色模型或通过转换到 HSV 模型。

为了在 RGB 颜色模型中只提取花的黄色像素,我们将不得不考虑红色、绿色和蓝色的近似值。然后对这 3 个值应用阈值。

然而,在 HSV 模型中,我们只需要对强度值应用阈值来提取花部分。色调和饱和度可以忽略不计。

标注对象

此图像中有 3 个以上的对象,我们希望用大于 200 像素的连接像素来标记每个对象。

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

Figure 2. Trying to label different objects in the original image.

1)我们需要创建一个 3×3 大小的结构元素,以便稍后进行侵蚀和扩张。

2)创建一组与输入图像大小相同的空白矩阵。[在这种情况下,我创建了 5 个空白矩阵,称为标签。]

3)从输入图像中,我们需要找到值为“1”的第一个像素位置,并从该点开始膨胀。这将提取第一个对象。

4)检查对象是否包含至少 200 个像素。然后将值从“1”替换为“2 ”,如标记我们的对象编号,并将该数据存储在第一个空白矩阵中。

5)在原始图像中,将所有已标记的值设置为“0”。然后为我们的下一个对象找到下一个起点。

6)重复迭代,直到原始图像被替换为“0”值,或者直到它为空。

过滤器

噪声是处理图像时的主要问题之一。使用正确的过滤方法消除噪声有助于获得更清晰的图像输出。

过滤可以分为两个领域:

1)空间域

2)频域

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

Figure 3. A process chart to compare spatial filters and frequency filters.

在空间域中,通常为 3×3 或 5×5 的遮罩被创建并应用于原始图像中的第一个像素,直到最后一个像素。因为在空间域中,遮罩的中心值至关重要,所以我们需要在输入图像的边界周围实现填充算法。

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

Figure 4. Explains the equation for spatial filtering.

空间域中的滤波

使用均值和平均滤波器的空间滤波示例

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

Figure 5. The result of applying a Mean filter VS using the existing function in Octave.

下面的代码比较了两种过滤方法的编译时间,一种是自己编写函数,另一种是使用 Octave 库中现有的函数。

在 DIY 滤镜输出中,我使用了

1 0 1
1 -4 1
0 1 0

(均值滤波器)作为过滤遮罩。

频域滤波

定义

  • 这些技术基于修改图像的光谱变换
  • 将图像转换为其频率表示
  • 执行图像处理
  • 计算回到空间域的逆变换
  • 高频对应于图像中快速变化的像素值(如文本、纹理、树叶等)。)
  • 强低频分量对应于图像中的大尺度特征(例如,主导图像的单个同质对象)

技术

  • 傅里叶变换
  • 非周期但曲线下面积有限的函数可以表示为正弦和/或正弦乘以权函数的积分

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

Figure 6. Shows the equation of Fourier Transform and Inverse Fourier Transform for filtering the image in a Frequency Domain

使用高斯和理想滤波器的低通滤波输出示例

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

Figure 7. The image on the left is the original image and the image on the right shows the result after applying the Lowpass filter.

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

Figure 8. Shows the output of the image after applying the Ideal Lowpass filter to the original image.

频域高斯滤波:

[使用 fspecial()和截止频率= 100]

频域中的理想低通滤波

[使用 meshgrid(),截止频率=最大距离的 67%]

机器学习新手?尽量避免这些错误

原文:https://towardsdatascience.com/new-to-machine-learning-try-to-avoid-these-mistakes-d54a164e2316?source=collection_archive---------23-----------------------

作为一名数据科学家,我艰难地学到了一些东西

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

机器学习是计算机科学中最热门的领域之一。如此多的人抱着这样一种错误的想法,即仅仅运行 10 行 python 代码,并期望事情在任何情况下都能神奇地工作。这篇博客是关于我艰难地学到的所有东西。希望它能为你节省一些犯同样错误的时间。

1.你不应该相信这是魔法

机器学习就像任何科学领域一样:它有自己的规则、逻辑和局限性。相信这是某种黑魔法无助于提高你的人工智能技能。这种信念将与你理解每个模型/层类型如何工作所需的科学好奇心相抵触。相信这是魔法是一种懒惰的方式来说服自己为什么不需要理解背后运行的机制。

ML 唯一神奇的地方就是背后没有魔法。它基于纯粹的逻辑、数学,当然还有一些随机性和运气…

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

Machine learning is magical but NOT magic

2.不要从真实的数据集开始

从真实世界的数据集开始,充满了问题和噪音不会帮助你寻求理解。取而代之的是,生成一些理想的伪数据集。例如,首先创建一个随机 x 列表和一个 y=3x+2 列表,然后测试密集层将如何学习权重 3 和偏差+2。

这允许你逆向工程反向传播背后的机制,不同的优化器,不同的初始化方法,看看模型是否收敛得足够快。逆向工程是一种有趣的方式来理解事物是如何工作的,而不需要进入复杂的数学细节。(但如果可以,何乐而不为!)

每当试图解决一种新类型的问题时,首先尝试思考是否有办法首先生成一个理想的、无噪声的、假的数据集,以便检查哪种类型的层或 ML 模型将更容易解决这一挑战。如果一个模型不能解决这个假的/简单的挑战,那么在一个更难的嘈杂的数据集上尝试它甚至没有意义。

3.不要从庞大的数据集开始

立即将整个数据集投入到模型中,然后等待几个小时才能得到第一个结果,这是适得其反的。相反,最好从一小部分数据开始,先用不同的模型进行实验。一旦你得到了最初的第一个结果,你就可以去大数据。

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

Go step by step

4.首先可视化/清理数据

理解你的数据集是成功的关键点和主要因素,清理数据是 ML 中最重要的步骤之一。找出数据收集、存储、频率等方面的问题非常重要。可视化数据集有助于识别许多问题。数据是否包含大量缺失值?如何替换它们?数据采样速率相同吗?特征需要规范化吗?特征是否独立?我们需要先运行 PCA 吗?或许数据科学中最重要的原则如下:

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

Shit IN -> Shit OUT principle

5.特征的数量并不重要,重要的是维度的数量。

具有 100 个特征的数据集(其中所有特征都是线性相关的)可以有效地减少到只有 1 个特征,而不会丢失数据。了解特征和维度的区别对降低数据集的复杂性有很大帮助。

6.小心数据泄漏或扭曲的数据

神经网络以其欺骗和懒惰地学习我们不想让它们学习的东西的能力而闻名。例如,如果类别之间存在很大差异,假设 99.99%的邮件不是垃圾邮件,0.01%是垃圾邮件,那么神经网络很有可能会一直懒洋洋地学习对非垃圾邮件进行分类。另一个问题是数据泄露:

当您希望使用模型进行预测时,任何其值实际上不可用的特征,都是会给模型带来泄漏的特征。

当你用来训练机器学习算法的输入数据恰好拥有你试图预测的信息 —丹尼尔·古铁雷斯问数据科学家:数据泄露

因此,请确保没有简单的方法来作弊,并在输入和输出之间找到简单但无意义的相关性。

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

Take care of leakage

7.快速迭代,更快失败

在看了这个关于棉花糖挑战的视频后,我得到了这个观点的灵感:

Marshmallow challenge

教训是不要假设你最初的模型想法会起作用,你可能会错误地认为,你越快发现这一点,你就越快尝试其他东西,而不会浪费太多时间,达到最后期限或在发现真相之前支付巨额云计算账单。

拥有一个足够快的地面模型是一个关键点,剩下的时间可以用来改进结果和更新“到目前为止”最好模型的记录。但关键是不要等到最后一刻才验证结果。

8.小心不要过度装配

为一个训练阶段 0 亏的模特感到骄傲是很有诱惑力的。然而,它可能不是真实世界的最佳模型。这是一个众所周知的过拟合问题

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

Over-fitting illustrated

9.不要从复杂的 ML 模型开始

不要直接使用一个 双向 LSTM 变分自动编码器与 注意机制模型 ,如果你的问题已经可以简单地使用一个线性密集层解决。

Tensorflow 很强大,但你可能不是

最好是先从简单的模型开始,你可以理解和控制,然后逐渐增加复杂性,以检查复杂性是否带来任何附加值。请记住,最后,模型越复杂,就需要越多的数据来真正验证模型没有过度拟合。

一个好的经验法则是跟踪模型中参数的数量与数据集大小的关系。如果您的模型参数数量大于您的数据集大小,这将触发一个自动警告!

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

Don’t go full complexity

10.不要犹豫,创建一个定制的损失函数

机器学习的目标是减少损失函数。在许多情况下,缺省值(RMSE,对数损失)就足够了。但是很多人害怕为一些具体问题定义自己的损失函数。

损失函数可以被看作是你希望 ML 模型实现的惩罚或奖励。因此,如果您希望 ML 模型收敛到特定行为,可以通过创建一个损失函数来实现,该函数奖励这种行为,同时惩罚针对您的特定问题和特定数据集的不当行为。

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

Machine learning is like a child — It needs guidance, through loss functions

结束点——投资

机器学习的最佳投资是在知识上,你越了解每一层的抽象角色、每一个功能背后的机制、局限性,就越容易更快地创建模型。

第二个最好的投资,是在一个专用的 硬件上进行机器学习。一个 300 美元的 GPU 可以加速高达 20 倍的培训工作量,这意味着一天的工作可以减少到一个小时,同样的数据科学家工程师可以在相同的时间内尝试 20 倍以上的模型。

最后一点:

永远不要低估娱乐的重要性。

如果你喜欢阅读,请关注我们: 【脸书】 推特 LinkedIn

原载于 2019 年 7 月 19 日 https://medium.com**的

人工智能经济的世界新秩序

原文:https://towardsdatascience.com/new-world-order-of-the-ai-economy-a9fa40375ba8?source=collection_archive---------20-----------------------

结合其他全球趋势,人工智能正在迅速拆除建立新世界秩序的旧壁垒。因此,下一个世纪将由迅速适应新人工智能经济的国家主导。如果中国不能适应人工智能经济,下一个世纪将是“中国世纪”的假设可能被证明是错误的。

人工智能经济建立在三大支柱之上:

  1. 人工智能劳动力:拥有广泛技能的劳动力资源,包括人工智能研究人员、人工智能实施者和精通机器人和自动化的人工智能工作者
  2. 人工智能基础设施:需要数据共享、算法交换、劳动力流动和低成本能源来支持持续的人工智能创新
  3. 人工智能社会契约:工人失业将产生巨大的阻力。再培训、保证收入计划和其他转型成本将被采用人工智能经济的领先国家吸收

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

Pax Britannica (1815- 1914) — Map reproduction courtesy of the Norman B. Leventhal Map & Education Center

旧世界订单:

自 19 世纪初以来,英国统治下的和平(1815-1914)、美国世纪(1917-2017)和中国世纪(2017 年至今)的出现(或可能再次出现)都是由类似的经济和政治规则推动的。

1.容易获得的低成本劳动力、能源和原材料

2.机构和政府对工业的支持,提供了获得资本、政治稳定和国际贸易的机会

3.持续创新推动边际生产成本下降,工人生产率提高,支持生活水平的提高

自 1800 年以来,包括电报、蒸汽动力、电力、装配线、自动化和最近的机器人技术在内的新技术的迅速采用为早期采用者带来了持久的优势和在世界舞台上的优势。

随着中国准备承担下个世纪的经济霸权,或许规则已经改变。重要的是,根据杰里米·里夫金(2015 年)的说法,能源成本正迅速走向“零边际成本”,正如 T2·法里德·扎卡利亚(2009 年)在其著作《后美国世界》(The Post American World)中首次概述的那样,军事和政治权力的不断扩散正在降低超级大国游戏的新参与者的壁垒。

最根本的规则变化是人工智能(AI)的主流采用,以及在自动化、效率和准确性方面实现人工智能驱动的巨大生产力增益。AI 和自动化从根本上改变了以前世界秩序的经济基础。

  1. 数字工作者是在云中或桌面计算机上作为程序运行的重复任务的机器人,这与 1999 年科幻电影《黑客帝国》中的角色并非完全不同。这通常被称为机器人流程自动化,但新一代数字工人正在使用计算机视觉和先进的机器学习来执行工作,速度是传统人类工人的 100 倍
  2. 体力工作越来越多地使用工业机器人来代替人类工人。计算机视觉和机器人技术的进步正在迅速缩小只能由人类完成的事情的范围。机器人的应用正在飞速发展,即使是在低成本劳动力仍然充足的市场
  3. 用模糊事实做出的复杂决策长期以来一直是人类主题专家的领域,他们的有机神经网络大脑可以考虑所有数据,并在瞬间做出最佳决策。如今,这一优势正在缩小,深度学习系统在认知、视觉、翻译、信号处理、复杂系统分析和无数其他任务方面一直优于人类

构建人工智能经济:

第一优先:人工智能劳动力

对人工智能和机器人技术工人的需求已经远远超过了目前的供应。随着人工智能经济的发展,这种阻抗不匹配将成为创新的一个门控因素。为了避免这种情况,我们需要立即投资调整我们的劳动力。正如李开复在他的书《人工智能超级大国:中国、硅谷和世界新秩序》中概述的那样,中国已经在创造“人工智能城市”,并在中国政府的全力支持下建设这种人工智能能力。未来的领导者需要通过以下方式打造这种力量:

  • 招募并留住(国内)最优秀的人工智能人才到大学从事研究并支持本科人工智能教育。资助人工智能领域的研究生研究,包括拨款、挑战和以行业为重点的联合创新项目
  • 拓宽科学、工程和数学本科学位要求,以包括核心人工智能教育和实践经验
  • 资助机器人和机电培训项目技术和两年制学院,并与工业机器人供应商紧密合作

根据“新美国安全中心”的论文了解中国的人工智能战略,中国目前正在这一领域进行大量投资,在人工智能研究方面排名第一,在人工智能专利方面排名第一,在人工智能风险投资方面排名第一,在人工智能公司数量方面排名第二,在最大的人工智能人才库方面排名第二

第二优先:人工智能基础设施

最近关于人工智能的新闻一直集中在与数据收集和使用相关的隐私问题和偏见上。从为训练虚拟助理而收集的个人数据,到人工智能评估购物者的犯罪意图,显然任何问题都有待解决。中国已经采取了一种权宜的数据收集方法,并可以利用这种方法超越其他全球人工智能竞争对手。

  1. 国家数据共享计划对于建立下一代人工智能所需的训练集至关重要——西方需要迅速解决隐私和伦理问题
  2. 开放算法交换以及商业算法交换将是一个关键的成功因素。知识产权法将需要适应,以促进思想和 ML 模型的流动
  3. 劳动力的流动性和低成本的能源将需要支持持续的人工智能创新

正如这篇 IEEE 文章中所详述的,我们已经看到商业形式只是为了弥补这些数据差距:IEEE Spectrum 文章但是这些模型存在很多商业摩擦

第三优先:AI 社会契约:

最近的全球政治和经济状况加剧了世界各地的民族主义和移民问题。这在一定程度上是因为工作场所的自动化开始取代工人。领先的人工智能经济学将通过人工智能优化的社会结构或安全网来解决这些社会问题,以避免政治摩擦

  1. 中年工人的再培训和技能提升,加上从衰退行业分流年轻工人,将是继续成功的关键
  2. 为无法重新获得技能的工人提供有保障的收入计划,将缓解变革阻力,维护社会秩序

数据科学家的新年决心

原文:https://towardsdatascience.com/new-years-resolutions-for-data-scientists-43a0d3d8b4ff?source=collection_archive---------17-----------------------

更好的项目和更干净的代码的新十年指南

今天是反思过去 364 年并宣布自我完善的传统日子。

这是多事之秋。像伯特这样的模特震撼了传统领域;Kubernetes 和 Docker 联手了;公司因使用有偏见的算法进行商业决策而受到抨击;争议搅乱了数据科学训练营;职位描述需要不断扩展的不相关技能。比以往任何时候都清楚的是,我们的行业是一个多面性的行业,在这个行业中,保持稳定和相关性是一项挑战。

这里有 10 条建议,每条都有助于你成为一名数据科学家和程序员,并提供有用的资源,还有 6 条可以帮助你在这个过程中保持理智:

通用编程

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

Photo by Denis Pavlovic on Unsplash

  1. 我将让(我的 python 路径)成形
  2. 我将清理环境(而不是pip install每个包都要同一个)。
  3. 我会学一门新的语言。
  4. 为了更好的数据序列化,我将放弃 pickle T8。
  5. 我将设定健康的界限(与容器化)。
  6. 我会写干净优雅的代码。
  7. 我将学习足够的 C 语言在 Python 崩溃时修复它(或者至少理解它为什么会崩溃)。
  8. 我将实际上 学会如何负责任地获得
  9. 我将学习 bash 成为命令行向导。
  10. 我将扩展我的研究工具箱以便更好地调试。

数据科学、机器学习和人工智能

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

Photo by h heyerlein on Unsplash

  1. 我会关注机器学习中的偏差,争取从我的数据中消除。
  2. 我会问为什么事情会起作用,而不仅仅是它们会起作用。我会批判性地评估预先训练好的模型,而不是天真地使用它们。
  3. 如果我更倾向于实践,我会学习一些理论上的东西——比如我的模型背后的数学
  4. 如果我更学术一点,我会动手做一些的东西,不会让完美主义阻止我推出产品。
  5. 我会加入一个以数据科学为导向的 Slack ,Discord,或者 IRC 频道去认识新同事。
  6. 我会参加聚会或会议(或者至少在线观看视频)来增长我的技能。
  7. 我会将我的模型可视化,或者将它们部署到 web 应用中,这样更多的人可以使用和理解它们。
  8. 我会交叉训练我的大脑,提高我的领域知识。(对于 NLP 工程师,我推荐学习语言学。)
  9. 我将在我不擅长的领域做一个项目——如果我经常与数字打交道,就使用非结构化数据;如果我经常与文字打交道,就尝试计算机视觉。(甚至可能制作一些艺术!)
  10. 我会在社交媒体上关注一些令人敬畏的人工智能从业者。

普遍建议

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

Photo by Lindsay Henwood on Unsplash

无论你想在今年做得更好,这里有一些基本的决心,为你的成功打下基础:

  1. 我会优先考虑每晚至少睡 8 个小时,因为睡眠对学习来说是必不可少的。
  2. 我会每天花时间运动身体,吃有营养的食物,因为健康对成功至关重要。
  3. 我会找到适合我的压力管理技巧,因为我的心理健康和我的身体健康以及职业道德一样重要。
  4. 除了工作和学习,我会花时间做自己喜欢的事情,因为成为一个快乐、全面发展的人不仅有利于提高生产力,也是生活的意义所在。
  5. 我会记住,我作为一个人的价值与我的求职、我的 Kaggle 分数或任何其他成功的外部衡量标准无关。在这个行业里很容易精疲力竭,灰心丧气。我会尊重我的步伐和进步。
  6. 如果我感到沮丧、焦虑或孤独,我会向我的朋友和同事求助。我们都在这个一起

后知后觉是 2020 年。从你的错误中吸取教训,确定你需要强化的地方,并制定一个计划,在这一年中改进。

但是试着享受这个过程。

纽约出租车数据集分析

原文:https://towardsdatascience.com/new-york-taxi-data-set-analysis-7f3a9ad84850?source=collection_archive---------14-----------------------

用回归模型预测出租车费用

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

Photo by Anders Jildén on Unsplash

最近我有机会玩了一下谷歌云的大查询平台托管的纽约出租车公共数据集。我决定对数据集应用机器学习技术,尝试使用 Python 建立一些预测模型。在这篇文章中,我将尝试预测出租车费用。让我们直接开始吧!本文的所有代码都可以在 Github 的链接中找到

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

Google Big Query Tables

首先,在检查 Google 大查询表时,我们注意到每年有一个表。这给了我一个想法。我可以使用 2015 年的数据来训练我的机器学习模型,然后使用 2016 年的数据来测试模型的预测能力。

接下来,让我们使用 Google 的 data lab 平台查询 2015 年的随机 100K 行和 2016 年的随机 100K 行。

现在,让我们开始预测出租车费用的过程。首先,让我们导入必要的包并将数据加载到 pandas 数据框中。我使用%matplotlib 内联,因为我使用 jupyter 笔记本进行分析。

从数据框中,我们看到每一行都是一次旅行,而每一列都是与旅行相关的属性。

直觉:

我喜欢首先纯粹凭直觉建立一个预测模型来开始我的项目。这个简单直观的模型将给出我们的基线精度,我们将尝试使用更先进的技术来打破这个基线精度。

对于任何预测模型,我们需要考虑我们试图预测的响应变量是什么,以及可能对所述响应产生影响的特征变量是什么。在本练习中,我们想要预测的响应是 fare_amount 。纯粹从直觉的角度来看,我们知道出租车一般按固定的初始费用+每公里 a(总距离)+每分钟 a(总时长)收费。回头看看我们的数据框列,我们已经有了一个 trip_distance 列,但是我们缺少一个 trip_duration 列。但是,我们提供了接送日期时间,因此我们可以使用下面的这些列轻松计算出 trip_duration

现在,让我们为简单直观的模型( fare_amount 、 *trip_distance、*和 trip_duration )可视化感兴趣的列。

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

Visualizing the columns of interest for simple intuitive model

从图表中可以看出,所有三列都有显著的异常值。让我们执行一个离群点删除,并再次绘图。

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

Visualizing the columns of interest after outlier removal for simple intuitive model

好多了!此外,我们可以清楚地看到票价 _ 金额行程 _ 距离行程 _ 持续时间之间有很强的相关性,因此我们是在正确的轨道上。

在我们继续之前,让我们创建一些助手函数。第一个功能是拆分数据,以便训练数据集只包含 2015 年的数据,测试数据集只包含 2016 年的数据,如前所述。第二个功能是计算一些可用于评估模型预测能力的统计数据。在本练习中,我选择的统计数据是均方根误差(RMSE),它给出了实际费用 _ 金额和预测费用 _ 金额之间的差异的标准偏差,单位为美元,可以计算为 sklearn 的*均方误差()*的平方根。R-square 给出了模型预测的实际 fare_amount 的变化量的百分比,可以直接从 sklearn 的 r2_score() 中获得。

太好了!现在,我们已经准备好完全凭直觉构建我们的第一个模型。让我们首先将数据分为响应(y)和特征(X),然后使用上述帮助函数创建训练集和测试集,然后在训练数据集上拟合简单的线性回归模型,最后使用上述帮助函数检查模型结果。

----Training Data results (2015 data set)----
RMSE: $5.6
R2: 0.79

----Test Data results (2016 data set)----
RMSE: $5.5
R2: 0.81

对我们的第一次尝试来说还不错!测试数据集的 RMSE 为 5.5 美元,我们将使用它作为基线得分。现在,让我们努力提高这个分数。

特征工程:

我在这里采用的方法是通过特征工程的过程给模型增加更多的特征。对问题进行更深入的思考。

  • 一周中的取件日和一天中的时间可能在需求和交通状况中发挥重要作用,从而对票价产生影响
  • 纬度差和经度差可以是增加行程距离对费用影响的附加数据
  • 由于特定位置的额外费用,上下客社区可能会对票价产生影响?

所以,让我们添加一些额外的功能如下。Geohashing 是一种基于绝对纬度和经度创建离散地理位置的方法。您可以将它视为为属于同一邻域的位置创建一个通用名称。我使用 pygeohash python 包,可以使用pip install pygeohash安装。由于纬度和经度列中有许多缺失的数据,让我们也删除它们。新增功能包括:

  1. 提货月份
  2. 一周中的提货日
  3. 一天中的取件时间
  4. 纬度差
  5. 经度差
  6. 地理哈希拾取位置
  7. 地理哈希删除位置

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

看起来在 lat_diflon_dif 中有一些异常值,我们把它们去掉吧。此外,由于像 month、day_of_week、hour_of_day、pickup_geohash 和 dropoff_geohash 这样的列是分类的,所以让我们使用 pandas get_dummies 方法对它们进行编码。

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

Visualizing the features

现在,让我们拆分训练和测试数据集,并拟合一个简单的线性回归模型

----Training Data results (2015 data set)----
RMSE: $3.5
R2: 0.92

----Test Data results (2016 data set)----
RMSE: $7139352.0
R2: -338832003532.88

呀!该模型在训练数据集上具有更好的 RMSE,但在测试数据集上具有更差的 RMSE,这表明该模型过度拟合。这就需要使用正则化技术。我们可以用 sklearn 的 Lasso 回归进行正则化。

----Training Data results (2015 data set)----
RMSE: $5.6
R2: 0.79

----Test Data results (2016 data set)----
RMSE: $5.3
R2: 0.82

好吧,从过度拟合的角度来看,这更好,但 RMSE 模型并没有改善太多。让我们现在尝试超参数调整,以改善模型 RMSE。我们可以为 Lasso 回归调整的参数称为 alpha,它是一个乘以 L1 罚项的常数。alpha 的默认值是 1。较小的 alpha 将通过减少惩罚项使 Lasso 回归类似于线性回归。

因为我们使用套索回归,有两种方法来执行阿尔法超参数调整。第一种方法是使用 sklearn 的通用 GridSearchCV,它可以用于调整任何机器学习模型。第二种方法是使用 sklearn 自己的 LassoCV,它专门用于 Lasso 回归。让我们两个都试试,比较他们的运行时间,以及每个人能找到的最好的阿尔法。

首先,让我们运行 GridSearchCV 方法:

GridSearchCV execution time: 3124.58699989Lasso best params: {'alpha': 0.0004012807031942776}

----Training Data results (2015 data set)----
RMSE: $3.7
R2: 0.91

----Test Data results (2016 data set)----
RMSE: $3.8
R2: 0.90

哇!当 alpha 值为 0.0004 时,我们能够获得仅 3.8 美元的测试 RMSE!然而,GridSearchCV 方法的运行时间长达 3124 秒。差不多一个小时了!让我们看看 LassoCV 是否能跑得更快,但为我们提供可比较的结果。请注意,我们将对 LassoCV 使用相同的 alpha 搜索空间,以实现真正的面对面比较。

LassoCV execution time: 42.0979998112LassoCV best params: 0.000401280703194

----Training Data results (2015 data set)----
RMSE: $3.7
R2: 0.91

----Test Data results (2016 data set)----
RMSE: $3.8
R2: 0.90

太棒了。LassoCV 不仅为我们提供了相同的最佳 alpha 值 0.0004,以获得仅 3.8 美元的测试 RMSE,而且它的运行速度更快,可以在 42 秒内完成!我必须承认,我自己也对结果感到惊讶,并且必须深入研究才能理解为什么 LassoCV 比 GridSearchCV 跑得快得多。目前,看起来我们使用线性模型可以达到的 RMSE 的最佳测试分数是 3.8 美元。这比我们简单直观模型的 RMSE 低 1.7 美元!最后,让我们绘制实际票价与 LassoCV 模型预测票价的对比图,以直观地检查相关性

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

Actual vs Predicted Fare using LassoCV tuned model

太好了!那表情很有希望。

我们可以通过尝试更复杂的模型,如梯度增强,甚至是神经网络,来进一步改善模型的 RMSE。我们还可以通过查询 100 万行而不是 10 万行来将更多的数据添加到训练集中。你怎么想呢?请就我们如何进一步改进该模型发表评论。

感谢您的阅读!希望你觉得有趣。干杯!

使用机器学习的新闻和媒体偏见检测

原文:https://towardsdatascience.com/news-and-media-bias-detection-using-machine-learning-a-potential-way-to-find-fake-news-13c766aa3988?source=collection_archive---------27-----------------------

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

**媒体。**在美国,这一直是一个有分歧的问题,由于新闻业内隐含的偏见,媒体和报纸对关键话题的报道有所不同。*我听说过隐性偏见,但它们是什么?*从本质上讲,大型报纸机构撰写的文章往往反映了作者的继承观点,尤其是因为新闻机构往往更喜欢来自政治光谱某一领域的作者。现任美国总统唐纳德·j·特朗普(Donald J. Trump)一贯创造不同的观点:保守派人士更有可能以有利的方式报道特朗普的行动,而自由派媒体则倾向于以负面的方式描绘特朗普的行动。因此,很明显,媒体渠道在关键问题上存在很大的分歧和偏见——但如果我们能够直接识别任何新闻文章中的偏见,会怎么样呢?

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

Simplified representation of the American political spectrum: liberal sources tend to report more negatively about Donald Trump, while conservative sources tend to report more positively

**数据。**有大量数据代表了媒体的偏见——我发现 ProQuest 报纸数据库中有来自许多新闻来源的数千篇关于唐纳德·特朗普的文章。我还意识到,我可以使用媒体偏见/事实核查这个识别主要新闻来源的政治偏见的最大网站,合理地确定一个足够大的新闻机构的总体政治倾向。有了如此大量的数据,有一个很好的方法来看看我是否可以分析这些偏见的文章——机器学习。

**机器学习。**通过利用神经网络并充当人工大脑,机器能够在最少人工参与的情况下在大数据集中找到模式(当有数百万个数据点时,这真是太棒了!).由于可用数据和计算能力的增长,机器学习最近出现了巨大的增长。研究人员还一直在努力制造越来越多层的更复杂的神经网络(深度学习),这使他们能够解决更困难的问题。机器学习本身在几乎所有可以想象的领域都有一堆应用;机器学习的最新进展包括自动驾驶汽车、语言翻译和面部识别。我之前使用机器学习来预测加密货币价格(链接,并生成鞋子设计(链接)。这一次,我将使用它来识别文章的新闻来源,并预测文章中的偏见。现在来研究一个更具体的神经网络架构…

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

A simple feedforward neural network

**LSTM 细胞。**一个特别的神经网络是寻找模式的真正革命性的方法,它是来自本文的长短期记忆(LSTM)递归神经网络(RNN),它由多个单独的 LSTM 细胞组成。*但它是如何工作的呢?*它基本上是通过使用特殊的门来允许每个 LSTM 层从先前层和当前层获取信息。数据通过多个门(例如,遗忘门、输入门等)。)和各种激活功能(例如 tanh 功能),并通过 LSTM 细胞。这样做的主要优点是,它允许每个 LSTM 细胞在一定时间内记住模式;他们本质上可以“记住”重要的信息,而“忘记”不相关的信息。这在分析文本时非常有用(例如,单词“和”不像“自由”这样的加载单词那样与政治偏见相关)。现在我已经有了数据和模型的计划,我终于可以开始了。

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

An LSTM cell and its internal components — cell state c. input gate i, forget gate g, output gate o, and external input gate g

**数据收集。随着我的计划准备就绪,我开始了真正的工作。我回到 ProQuest 报纸数据库,为四个新闻源下载了每个新闻源 5000 篇文章,总共 20000 篇文章。这些新闻来源是纽约时报、CNN、华尔街日报和纽约邮报(根据媒体偏见/事实核查确定,从最自由到最保守排列)。幸运的是,这些文章下载到每个来源的一个文件中,所以我简单地根据它们的新闻来源(0 到 3)标记了四个集合。没那么简单,对吧?完全正确!这里的问题是我的神经网络接受数字,而不是单词…

单词嵌入。为了将单词输入到我的模型中,我必须使用单词嵌入方法将每篇文章中的每个单词转换成向量表示。对于这个项目,我使用了这篇论文中的 GloVe 方法,它将单词转换成一个 300 维的向量,使得相似的单词在这个 300 维的空间中彼此靠近。但是你怎么可能用数字来表示一个单词呢?嗯,GloVe 代表一个词,有 300 个确定的特征。把它想象成这个词的特征(例如,当使用 GloVe 时,(男人减去女人)的向量表示等于(国王减去王后),因为在这两种情况下,除了性别之外,两者的几乎所有特征都是相同的)。既然单词已经用数字表示了,我可以对我的数据进行一些最终的调整。

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

Words are embedded with “features” where similar words are close to each other

**数据预处理。**文章根据原文中的分段符分成几节。你为什么那样做?对于一个模型来说,很难一次分析整篇文章(RAM issues ouch),所以更好的方法是浏览每一句话,并对每一句话的结果进行平均,以获得对文章的预测。我从每个来源选取了 1,000 篇文章作为我的测试集(20%拆分),剩余的数据被放入训练集,其中 5%的训练集被用作验证集。终于可以准备开始编码我的深度学习模型了!

**深度学习模型。**我专注于使用长短期记忆递归神经网络,以允许神经网络识别数据中的重要信息,并根据它找到的属性预测文章的来源。我还决定从这篇论文中添加一些脱落层,以确保我的模型不太符合训练数据(尽管这听起来像是任务完成了,但实际上使模型总体上不太准确)。我使用 Keras 和 Python 3.6 中的 Tensorflow 后端来创建我的模型。这些图层是输入图层、LSTM 图层、下降图层、LSTM 图层、下降图层、密集图层和 softmax 输出图层。

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

Deep recurrent neural network architecture for textual origin classification

**训练。**我训练了我的模型 10 个纪元。*为什么是 10 个纪元?*这是由早期停止决定的,当验证精度停止增加时,模型自动停止训练——它只是碰巧在数字附近。我使用了一些非常标准的超参数:1024 的批量大小、分类交叉熵损失函数、AdamOptimizer 和 ReLu/softmax 激活函数。

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

Progress of the model’s accuracy throughout training

结果。现在是有趣的部分!我发现有两件事我想测试我的模型的能力:预测文章的来源和预测文章的政治偏见。我通过 F1 分和二元准确率来衡量新闻源预测的能力;我通过 n-grams 和 t-SNE 可视化分析了政治偏见检测的能力。以下段落详细介绍了模型的每个分析。

**F1 得分(准确度)。**该模型获得了 77.20%的 F1 分数(即,此类问题的准确率)。*我怎么知道模特不只是运气好?*我对这个数字做了统计显著性检验,得到 p 值为 0。实际上,我的模型碰巧准确预测到这一点的概率是 0%。接受模型是好的。

二进制精度。我还使用受试者工作特征(ROC)曲线下的面积测试了每个类别的模型的二进制准确性;这给了我 94%以上的所有类的二进制准确率。*这是什么意思?*这基本上意味着该模型非常擅长区分文章的来源。

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

Area under the ROC curve for each class

**N-Grams。**首先,我进行了一个 n-gram 测试——基本上,我从测试集中提取了 7 个单词的所有可能序列,其中一个单词必须是“Trump”(这给了我一个可能有偏见的句子),并将这些短语反馈到模型中。我选择了可信度最高的短语,这可以被认为是一种让我看到模型与每个新闻源相关联的短语的方式。该模型能够将自由派消息来源与关于唐纳德·特朗普的负面措辞相关联(这通常是自由派消息来源对特朗普的预期报道),并将保守派消息来源与关于唐纳德·特朗普的正面措辞相关联(这通常是保守派消息来源对特朗普的预期报道)。

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

Phrases of length 7 (one of the words must be “Trump”) that the model associates with each class

t-SNE 可视化。 *这个东西听起来很复杂,是什么?*让我们后退一点——我的模型的输出是四维的,因为有四个类。我不能绘制它,所以我从 4 维输出层收集置信度,并使用 t 分布随机邻居嵌入(t-SNE)可视化方法调整它的大小。这意味着四维预测被转换成二维点。我绘制了这些点,并根据它们真正的新闻来源给它们着色(蓝色代表自由派来源,红色代表保守派来源)。一般来说,这个方法让我画出模型的预测,看看它们是如何分布的。我发现这个模型能够把自由派的资料和保守派的资料组合在一起。这种分组非常重要,你实际上可以在自由派和保守派之间划出一条非常清晰的分界线。哇!这有点像模型有自己的文章政治光谱!有趣的是你提到了这一点,我也正打算这么说——能够看到模型如何基于偏见分析这些文章,这非常酷!但真正的问题是:我们如何应用这一发现?

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

t-SNE visualization of the model’s predictions, showing its ability to distinguish between origins and also between political bias

**应用。**这种技术的一个直接应用是将模型嵌入到像苹果新闻这样的新闻应用中。这将为用户提供新闻提要中每篇文章的实时分析,并在他们点击任何内容之前通知他们任何潜在的偏见(例如,“这篇文章有 43%的机会具有适度的自由偏见”)。该项目的一个更间接的扩展是将模型作为扩展嵌入到 web 浏览器中。经过一些修改,这意味着该模型可以分析网站的不同形式的偏见(例如,识别可能为产品做广告的网站)以及政治偏见。这将给用户提供前所未有的控制,让他们能够控制自己想获取的信息,并避免有偏见的信息。但是这个项目的长期期限是什么?为了最大限度地利用这个项目,我将使用这个模型来生成一个巨大的数据库,其中包含来自不同政治领域的句子。然后,我会训练一个 CycleGAN 或其他生成神经网络,使其能够将有偏见的句子转换为具有相同意思的同一句子的完全无偏见的版本。完成后,主要用途是应用检测模型找到有偏见的句子,然后应用生成模型将每个有偏见的句子转换成目标句子。什么?这将是一个浏览器扩展,它不仅会告诉你是否有偏见,还会给你一个选项,让你在消除偏见的情况下阅读同一个网站!疯狂 yyyyy。

总结。我创建了一个机器学习模型,它不仅能够高精度地预测一篇文章的新闻来源,还能检测新闻文章的政治偏见。这表明机器学习是多么强大,以及它有多么广泛的应用。该项目的主要应用在于浏览器扩展和嵌入新闻应用程序。在这两种情况下,用户将获得对他们阅读的信息的控制,这两种应用程序都促进了公众对拥有公正观点的重要性的认识。然而,将这个项目的模型进一步应用于创建将有偏见的句子转换成无偏见的句子的神经网络具有很大的潜力,因为它能够生成有偏见的句子的无偏见版本。

也许有一天我们能够完全控制我们接收的信息。

**常见问题。**我去了英特尔国际科学与工程展览会展示这个项目——这里是评委问我的一些问题,您可能也想知道。

  • 当我可以在你提到的媒体偏见/事实核查网站上找到偏见时,你的项目有什么意义?该网站的局限性在于它是手动的,只有大型媒体公司的概况。我的模型能够单独查看文章。例如,网站可能会说 CNN 的文章实际上是保守的,因为它是一般化的,所以有点自由,但我的模型能够分析文章,并确定它是保守的,即使它来自 CNN。这种模式在小型新闻机构中也有优势,比如在脸书看到的那些可能在为某个议程做广告的新闻机构。这些组织不能在网站上检查,因为他们很小,但是模型仍然能够分析他们的帖子以找出偏见。
  • *你试过其他型号吗?*我最近看到卷积神经网络在语言任务上也表现良好,但决定坚持使用递归神经网络的标准。我将来肯定会像伯特一样尝试更多的模型。
  • *你的下一步是什么?*我可能会添加一个中立的来源,收集更大范围的政治偏见,这样我的模型就更广泛了。更多应用!
  • 你怎么知道这个模型是通过政治偏见而不是文章主题之类的东西来识别来源的?n-grams 没有显示一个明确的主题,并且它们几乎只具有政治偏见作为唯一可识别的信息。这意味着该模型似乎将政治偏见视为来源的主要指标,并且该模型必须擅长于这样做才能准确。

新闻公司与伯特联系

原文:https://towardsdatascience.com/news-to-company-linking-with-bert-48a1ac9805f1?source=collection_archive---------12-----------------------

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

So much noise, so little signal (source)

我们都听说过 Bert 以及这个模型家族如何成为许多 NLP 任务的当前艺术状态。我想分享一下我们在 Company.info 只用基于 Bert 的模型创建完整的新闻到公司链接渠道的经验。

我们的业务是收集和出售在荷兰注册的公司的准确信息。这对我们的客户在销售、营销和合规方面非常有帮助,可以节省大量时间。关于公司的数据不断变化,从他们的办公地点到活动和产品,要跟上这些变化是相当费力的。我们提供一体化解决方案,让我们的用户可以专注于重要的事情。

新闻是一个特别重要的信息来源。如果我们在文章发表时就收录它们,并正确地分析它们的内容,我们就能够在它们发生时提供关于公司及其活动的细节。为了实现这一点,我们建立了一个从新闻文章中摄取、链接和提取信息的渠道。

为了让您有所了解,以下是我们门户网站的新闻部分显示的关联公司(荷兰语):

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

A News article linked to Microsoft and Ingram Micro

对于一个合适的新闻公司链接,有几件事要做好:

  • 过滤无关的新闻
  • 摘录提及的相关公司
  • 为每个提及生成候选人
  • 挑选合适的候选人

这里是管道的概述,接下来我们将介绍每个阶段:

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

News to company linking pipeline

我不会讨论摄取部分,因为这是一个值得单独发布的数据工程壮举。因此,在我们的管道中,我们从一个经过清理和去重的文章数据库开始,为链接做好准备。

相关新闻过滤

一篇新闻文章是否相关实际上取决于出版商的业务和受众。如果你是 TechCrunch,你就不会发布关于政党丑闻的新闻。Company.info 也不例外,随着时间的推移,会创建一套标准来确定相关性。举个例子,

  • 这篇文章应该是关于在荷兰有注册办事处的公司
  • 股票市场的新闻是不相关的,除非他们报告一个大的损失或利润
  • 关于服务中断的新闻是不相关的

虽然有很多这样的规则,但它们并不是黄金法则:您通常需要考虑不止一个,有些可能在特定时期适用,甚至不同的编写者可能会对同一篇文章做出不同的决定。

随着时间的推移,我们已经捕获了编写者的决定,这给了我们一个训练二进制分类模型的开端。深度学习模型是利用大量数据并学习自然语言中所有细微差别的首选。目前,预训练的 Transformer 语言模型提供了最好的结果,我们在多语言 Bert 的基础上创建了我们的分类器。

我们所有的实现都是基于奇妙的变形金刚库,这个库是透明的,最新的,用 fp16 和分布式训练可以快速训练。对于这一部分,我们调整了一个BertForSequenceClassification模型。

我们的银牌测试集的 F1 分数对于我们的目的来说已经足够高了(抱歉,我们的法律团队不愿意分享数字)。经过误差分析,我们意识到,对于错误的预测,通常模型预测是正确的,这可以用我们的噪声数据集来解释。对于许多错误,你还需要努力思考来证明一个不同的预测,而且不可能有实际的共识。

我们正在将模型推向生产,但我们还没有将编写者排除在循环之外:当模型不自信时,我们要求他们为下一轮训练决定和收集用户行为。

相关实体确认(RER)

这非常类似于传统的命名实体识别(NER)问题,除了我们对所有的ORG类的实例不感兴趣,只对重要的实例感兴趣。一篇新闻文章可以提到几十家公司,但并不是所有的公司都有新闻价值。以下面的片段为例:

FD Mediagroep 从 Heerhugowaard 手中接管信息和数据分析公司 Sizo。随着这项收购于周三宣布,Het Financieele Dagblad 和 BNR·尼乌斯 radio 背后的公司加强了其在公司数据领域的地位,自 2012 年收购 Company.info 以来,它一直活跃在这个市场。

这里,**FD Mediagroup****Sizo**是相关的公司提及,其余的应该忽略:

  • Heerhugowaard 是一个位置
  • 《金融日报》是一份报纸
  • BNR 新闻电台是一家广播电台
  • Company.info 是一家公司,但这不是本文的重点

所以首先,你有古典 NER 的所有挑战;也就是说,您不希望将产品、专有名称或非公司缩写与公司混淆。最重要的是,如果是一家公司,你需要决定它与整篇文章的相关性。

解决这个问题的一个方法是有两个阶段:一个是传统的句子级 NER,然后是显著性模型,该模型决定哪些提取的提及值得链接。这是我们开始之前的设置,这意味着要调整两个模型;但是,如果我们将两者结合起来,端到端地解决问题,会怎么样呢?

这就是我们所做的,我们称之为相关实体识别(RER)。这基本上是一个序列到序列模型,令牌作为输入, IOB 标签作为输出。非常类似于 NER 的解决方案,除了我们将整篇文章作为输入,并且只为相关的提及指定 B-ORG 和 I-ORG 标签。

对于这一部分,我们还使用了基于 Bert 的实现;特别是这个建立在BertForTokenClassification之上的变形金刚的延伸。不过,它被并入主回购协议只是时间问题。同样,训练过程非常顺利,我们很快就取得了成果。新模型几乎总是报告公司名称,不会将缩写、人名或地名与公司混淆。

该模型在检索相关提及方面获得了显著的 F1 分数,其预测给我们的人类评估者留下了深刻的印象。它能够区分真正细微的差别,并有效地利用上下文来区分相关性。我们认为这是变形金刚模型中自我关注闪耀的领域;不仅因为我们能够看到一篇文章的整个上下文,而且还可以看到每一个单词是如何与另一个单词相关联的,以及如何有效地利用这些信息来学习决定相关性的关系。

候选生成

对于每个提取的提及,目标是从我们的 Elasticsearch 数据库中注册的 300 多万家公司中找到合适的公司。然而,对所有这些记录运行机器学习模型是不可行的,所以通常首先提取一个小得多的候选人列表,然后只对这些候选人运行链接模型。

为此,我们简单地做一个简单的 Elasticsearch 查询,使用从上一步中提取的提及信息,对照一些有意义的字段,如注册公司名称和 url。然后,我们将 top- n搜索结果输入链接模型进行训练或预测。因为基本事实表明了给定提及的正确公司 ID,所以我们可以为每个提取的候选人分配一个二进制标签。训练时,阳性样本将有label = 1,所有其他阴性样本将有0。上菜时,我们把所有的候选人喂给链接模型,让它挑选正确的一个。

虽然候选生成可能看起来简单,但它实际上起着重要的作用;因为如果合适的公司没有出现在候选名单中,它将没有机会被下游链接模型评分。为了衡量某种候选生成方法或搜索策略的效果,我们考察了检索召回率。也就是说,如果我们取顶部的50结果,那么被提及的目标公司出现在这些50中的频率是多少。你可以花时间优化搜索策略,或者以训练/推理时间为代价,简单地强制更多的候选人。

实体链接

好了,我们已经走了很远了!现在我们只需要决定一个候选(实体)成为我们目标的可能性。例如,假设提到了Sizo(文章中的公司名称),我们从 Elasticsearch 中抽取了 20 名候选人,他们的名字、URL 或公司描述中都以某种方式包含了单词Sizo。他们没有必然的联系。例如,其中一个是咨询公司,而另一个是当地的理发店。但是如何才能选择合适的搭配呢?

你我正常做的是,先看文章,了解上下文;是科技新闻还是与银行业或本地业务相关的新闻?文章用了哪些词(想话题建模)?有没有提到地点或关键人物可以帮助做出正确的猜测?

另一方面,我们查看每个候选公司及其所有属性来猜测可能性:该公司的活动代码是什么?如果它有一个网站,他们在描述他们的产品或服务时使用的关键术语是什么?注册地点在哪里,谁是关键人员?财务信息(如年利润/资产)能给我们提供有关其经营规模的线索吗?

有了双方的这些信息,我们通常可以相当成功地挑选出正确的候选人。

实体链接是一个经典的 NLP 问题,你可以在这里查看最近的一些方法。在疯狂地混合和匹配想法之前,我们问自己:我们能想到的最简单体面的深度模型是什么?我们能单独依靠伯特来完成这项工作吗?

Bert 和许多最近的预训练模型具有将多个序列作为输入的能力。例如,在一个多任务训练设置中,Bert 本身被训练来预测两个句子是否相互跟随。在 Bert 的术语中,text_a是第一个,text_b是第二个输入序列。text_b是可选的,你只有在处理“序列对”问题时才使用它。

让我们花点时间想想这个双输入设置有多强大。你基本上被赋予了权力来模拟两个“任何东西”之间的关系,无论你需要什么,只要你能用有意义的文本形式来表示它们。

这种双输入设置,非常符合我们之前建立的思维过程;也就是一边看文章和上下文,另一边看每个候选人的属性。具体来说,我们将(提及,文章)对表示为text_a(第一个序列),将候选公司的文本表示为text_b(第二个序列)。然后,我们定义一个二进制分类任务,并教导该模型对阳性样本预测 1,对阴性样本预测 0。

举个例子,考虑一下我们之前看到的同一个新闻片段:

FD Mediagroep 从 Heerhugowaard 手中接管信息和数据分析公司 Sizo。随着这项收购于周三宣布,Het Financieele Dagblad 和 BNR·尼乌斯 radio 背后的公司加强了其在公司数据领域的地位,自 2012 年收购 Company.info 以来,它一直活跃在这个市场。

在这里,我们希望将提及**FD Mediagroep** **、**联系起来,因此我们将提及和文章(第一个序列)表示如下:

  • text_a : **FD Mediagroep** | FD Mediagroep takes over information and data analysis company Sizo from Heerhugowaard. With this acquisition announced on Wednesday, the company behind Het Financieele Dagblad and BNR Nieuwsradio strengthens its position in the field of company data, a market in which it has been active since the acquisition of Company.info in 2012.

虽然我们主要关注的是提及,但文章是决定公司的行业和活动的重要背景。在提及和文章文本之间使用|分隔符有点武断,我们期望我们的模型在看到足够多的样本后学习这种key | context语义。

现在我们必须考虑第二个序列,以及如何在单个字符串中表示一个公司及其所有属性。假设 Elasticsearch 返回的候选人具有以下属性:

  • id : 235582
  • 名称:FD Mediagroep B.V.
  • 别名:[FDMG, FD, Financieele Dagblad, Het Financieele Dagblad]
  • 网址:[[www.fdmediagroep.nl,](http://www.fdmediagroep.nl,) [www.fdmg.nl](http://www.fdmg.nl)]
  • 描述:The FD Mediagroep is a Dutch media group. The group originated from Het Financieele Dagblad, but also includes BNR Nieuwsradio, Energeia and ESB.

我们将所有这些信息压缩成:

  • text_b : **name**: FD Mediagroep B.V., FDMG, FD, Financieele Dagblad, Het Financieele Dagblad | **url**: [www.fdmediagroep.nl,](http://www.fdmediagroep.nl,/) [www.fdmg.nl/](http://www.fdmg.nl/) | **description**: The FD Mediagroep is a Dutch media group. The group originated from Het Financieele Dagblad, but also includes BNR Nieuwsradio, Energeia and ESB.

我们遵循与text_a相同的|分离结构。最重要的是:

  • 实体属性被简单地映射到key: value表示。
  • 多值属性的值用逗号连接。
  • 所有语义相似的属性如namealternate_names都被折叠在同一个键下。
  • 缺失值将简单地写成nil

如上所述,Bert 模型应该很容易决定text_b中代表的公司是否是text_a中提及的正确目标。

对于这一部分,我们还调整了一个单一的BertForSequenceClassification模型,并将问题定义为一个二元分类任务。在训练期间,所有阳性样本(text_atext_b对)得到标签 1;和阴性样品 0。服务时,我们预测所有候选人的可能性,并报告得分最高的候选人。

将问题公式化为二进制分类主要是出于性能原因,并且与负采样方法非常一致。将所有东西都塞进 Bert 有它的好处,包括简单性和极大地受益于考虑到text_atext_b记号之间的良好关系的自我关注。但是有几个问题:

  • 我们实际上是在寻找一个多类分类器,并且在决定最可能的匹配之前,理想的情况是同时查看所有的候选项。这不是 Bert 的设计工作方式,所以我们必须求助于二进制分类。
  • 整个训练过程有点低效:对于每一个给定的提及和x阳性和阴性样本,我们重复text_a对应于提及的x次。理想情况下,我们应该只编码text_a一次。
  • 与上述相关的是我们如何处理负样本数量和训练时间之间的权衡。
  • Bert 对输入长度(最大 512 个子字)有一个硬约束,这对于适应所有新闻文章和实体属性是非常严格的。

因此,虽然这个解决方案对我们的目的来说是好的,但我们可以想办法改进它。最近许多关于实体链接的工作试图将提及和实体映射到一个嵌入空间,其中匹配的提及和实体彼此更接近。例如,请参见此处的、此处的或此处的。这种方法的优点是:

  1. 没有输入限制:包括候选人的所有文本、数字和分类数据。
  2. 整体嵌入一个候选公司。这种 company-to-vec 对于聚类或相似建模等其他任务非常有用。

但这并不意味着我们必须抛弃 Bert,我们仍然可以使用一个经过调整的 Bert 作为文本特性的强大编码器。这就是我们现在正在做的,我将在以后的文章中省略细节。

对于没有任何调整或巧妙技巧的纯 Bert 模型来说,结果相当令人印象深刻。让您了解一下,与我们基于 xgboost 和手工制作功能的传统系统相比,它实现了17%绝对 F1 增益。最终用户测试也很有结论性,我们正在将这种模式推向生产。

最终注释

这就是你要的,一个功能齐全的新闻链接管道。我们在所有阶段都使用了相同的底层 Bert 模型,这不仅给出了令人印象深刻的结果,还极大地简化了代码重用和维护。

在我们的 Kubernetes 集群中,每个单独的模型都作为一个微服务提供,并在管道的正确步骤由一个编排服务调用(想想 AWS 步骤函数)。每个型号都可以自行扩展,我们可以为不同的服务提供不同的硬件配置。例如,过滤服务(流水线的第一步)是相当轻量级的,可以在一个小型的纯 cpu 机器上提供。尽管实体链接模型需要更多的资源,但是我们使用 gpu 机器来跟上输入负载。

我想借此机会感谢我在 Company.info 的所有同事。这是少有的拥有支持性文化、大量数据和值得解决的问题的地方之一。

如果您有问题或建议,请留下评论。谢谢,直到下一个帖子:)

使用文本和元数据的下一个最佳动作预测:构建代理助手

原文:https://towardsdatascience.com/next-best-action-prediction-with-text-and-metadata-building-an-agent-assistant-81117730be6b?source=collection_archive---------12-----------------------

利用深度学习提高客服团队的效率

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

简介和动机

我们在 Reply.ai 的使命是在与企业互动时消除挫折感,节省人们的时间。我们可以影响客户体验的方法之一是让客户支持代理更开心、更高效。我们很乐意与 ML 社区分享我们如何使用深度学习来制作实时助手,以提高客户服务团队的效率。

在 Zendesk、Kustomer、Khoros 这样的客服平台里,客服人员在回答罚单、聊天的时候,会做很多重复性的工作。除了其他职责之外,他们还必须对票证进行分类、添加特定标签、将票证发送给其他团队、选择模板,而不是编写独特的个性化响应。我们这个项目的目标在概念上很简单:为支持代理提供关于他们下一步最佳行动的建议。通过帮助代理完成枯燥的任务,用户将获得更快的响应,代理可以将宝贵的时间花在更复杂的查询上。还记得微软的 Clippy 吗?这是正确的做法,对于客户服务团队也是如此。

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

问题定式化

首先,我们把这个问题公式化为一个纯文本多类分类任务。我们所需要的只是被标记的数据,来把它作为一个有监督的机器学习问题来处理。

因此,我们分析了支持团队的历史记录,并重新创建了每个票据的整个生命周期,从其创建到被标记为由支持代理解决的那一刻。我们关注客户端和代理之间交换的消息的文本内容以及在票据上执行的任何其他操作。

产生的数据集由 23k 个票证快照样本组成,包含客户端和代理之间的对话,以及它们相关的元数据和执行的操作。我们的分类器旨在学习这些动作并建议最可能的动作。

扩展问题表述,将对话背景考虑在内

经过一些初步的实验,我们得出的结论是,我们必须扩展问题公式,因为我们需要做的不仅仅是纯文本分类。在许多情况下,仅通过查看客户的文本请求,无法建议适当的支持措施。我们需要这个模型来考虑当时的环境。否则,纯文本和指定标签之间的关系就太随意了。因此,我们摆脱了纯文本模型模式,为模型提供了上下文元数据作为额外的输入。

让我们看一个具体的例子来说明这一点。我们正在与一个电子商务平台合作,客户会经常询问他们订单的状态或抱怨延迟的项目。为了选择最佳的可能回应,我们需要知道订单的实际状态。物品已经离开仓库了吗?有交通事故吗?

这就是元数据发挥作用的地方。我们添加了一个分类变量,其中包含关于订单状态的重要信息,作为附加输入。现在,我们需要一个能够处理新输入特征的模型。

寻找解决方案

现有的关于结合文本和元数据的模型的研究非常缺乏。这真的让我们很惊讶,因为我们相信这样的模型在许多现实生活中的人工智能应用中会非常有用,而不仅仅是在我们的特殊用例中。所以我们想填补这个空白,建立我们自己的!

我们决定从 fast.ai 开始,这是我们进行深度学习的首选库。我们必须承认:我们在这里确实有偏见,因为团队中的一部分人将他们的深度学习知识归功于雷切尔·托马斯和杰瑞米·霍华德非凡的教学风格,而且我们参加了当前课程的伙伴计划。在仔细查看了 fast.ai 论坛之后,我们终于找到了其他有着完全相同问题的分区器,更重要的是,还有一些有用的代码。幸运的是,另外两名学生 Quan Tran 和 José M. Fernández Portal 已经做了大量工作,我们能够进行合作。结果是在 fast.ai 库的基础上构建了一个模型,我们可以用它来处理对客户支持票据进行分类的任务,并考虑上下文元数据。

Concat 模型架构

下面是我们提出的模型架构的一个非常高层次的解释。(欢迎在评论中点击了解详情,或者让我们在 fast.ai 论坛的这个帖子中进行更技术性的对话。)

神经网络(NN)可以由其他更小的 NN 组成。这种类型的模块化架构由多个不同的网络组成,这些网络用于执行子任务。他们可以相互作用或独立工作,以实现输出。建议的实现利用该属性分三个阶段创建端到端解决方案:

  1. **特征提取:**输入层由两个子模块组成。文本数据被传递到用于文本分类的尖端 NN 解决方案,称为 【乌尔姆菲特】 ,并且表格元数据由 fast.ai 表格 NN 标准实现来处理。这两个模块互不连接,独立工作,从各自的输入数据中提取特征。它们中的每一个都输出一个向量来表示这些特征。
  2. **特征组合:**在第二步中,我们通过简单地连接两个向量,将前面模块的输出组合成一个。
  3. **分类:**最后,我们将连接的向量送入第三个模块,对表示的特征进行解码和分类。对于这个任务,使用多层感知器,这是标准的方法。

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

Model Architecture

结果

我们的最佳车型 F1 得分为 0.57 。结果是在一个非常嘈杂的数据集上实现的,该数据集具有分布在 20 个目标类上的巨大的类不平衡。我们将其与优步·艾的路德维希进行了比较,后者提出了一种不同的方法来组合文本和元数据特征。我们用 Ludwig 训练的最好模型是一个使用预训练手套向量的 WordCNN。优步·路德维希·艾的 F1 成绩要低得多,为 0.41 分

自己试试这个!

我们对这个结果不满意,因为我们客户的数据中的噪音和类别不平衡使得我们不可能获得一个清晰的概念证明。这就是为什么我们创建了一个简短的实验,这样你就可以说服自己我们的 Concat 模型实际上是有效的,并自己运行一些代码。检查一下 Kaggle 内核。为了简单起见,我们基于 IMDB 电影评论数据集生成了合成数据。但是请随意插入您自己的数据集,并告诉我们它是如何进行的。

关于回复

Reply.ai 开发 ai 技术,为快速发展的公司提供更快、更智能的客户服务。在 Forrester 的企业客户服务排名中,我们与三星、可口可乐、霍尼韦尔和拉斯维加斯的 Cosmopolitan 等客户合作,让他们的客户更开心,让他们的客户服务团队更高效。

感谢

☞仍有疑问或想使用 AI 为您的客户提供更好的自助服务,DM us on Twitter

下一个更好的玩家?用于二元分类的 GBDT + LR

原文:https://towardsdatascience.com/next-better-player-gbdt-lr-for-binary-classification-f8dc6f32628e?source=collection_archive---------18-----------------------

另一种有效的叠加预测算法

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

Clarke Quay @ Singapore

例如,具有逻辑回归的堆积梯度推进决策树(GBDT)在解决二元分类问题时可以是非常有效的算法。CTR 预测。

从 2014 年发布的论文脸书预测广告点击的实践经验中,脸书通过结合决策树和逻辑回归为他们的点击预测系统引入了这种算法。该算法将系统性能提高了 3%,对在线业务产生了重大影响。

在本文中,我将介绍以下议程:

  • 算法解释
  • 使用信用审批数据集的 Python 实现
  • RAM 问题和潜在解决方案

我们开始吧!

算法解释

GBDT 和逻辑回归都是众所周知的分类模型。GBDT-LR 算法通过将每棵树的预测叶节点的索引作为线性分类器逻辑回归的稀疏输入来组合这两个模型。

让我们假设我们已经训练和调整了一个有 300 棵树的 GBDT 模型,每棵树有 3 个叶节点。第二步是使用该模型再次对训练数据集进行预测。然而,不是输出标签,而是为 300 棵树中的每一棵树返回预测叶节点的索引。

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

GBDT output prediction leaf node index

在上面的示例中,第一棵树返回 3,因为预测是在第三个叶节点上。同样,第二棵树返回 2,最后一棵树返回 1。GBDT 模型的输出将看起来像[3,2,…]。,1].由于模型包含 300 棵树,这个列表应该有 300 个元素。

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

One-hot encode GBDT output

接下来,列表中的每个数字都被一键编码。比如 3 变成[0,0,1],2 变成[0,1,0],1 变成[1,0,0]。这些一键列表被附加在一起以形成逻辑回归模型的输入。因为每棵树包含 3 个叶节点,所以最终的列表应该有 300 * 3 个元素。

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

Overall Structure

现在,我们已经成功地为逻辑回归构建了训练数据集。很明显,输入数据非常稀疏。因此,L1 正则化用于解决这个问题,并避免过度拟合。

Python 实现

让我们用 UCI 信用审批数据集来看一下 Python 的实现。源代码可用。数据集包含 15 个不同的标称和序数特征(A1 至 A15)以及一个二元目标标签(A16)。

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

Data Glance

为了快速处理数据,丢失值的记录将被删除。分类特征是一次性编码的。

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

Quick Data Processing

首先,让我们训练一个 GBDT 和一个逻辑回归模型用于基准测试。对于 GBDT,网格搜索用于寻找最优参数。选择 ROCAUC 分数作为评估标准。

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

Benchmark Models

从上面的脚本可以看出,我使用 lightgbm 来训练 GBDT 模型。Lightgbm 分类器适用于该算法,因为我们可以通过调整“num_leaves”参数来指定每棵树中的叶节点数。树的数量由“n_estimators”控制。

接下来,我们将使用经过训练的 GBDT 模型对训练和测试数据进行预测。将“pred”函数中的“pred_leaf”设置为 True,以输出每棵树的预测叶节点的索引。

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

Output Prediction Leaf Node Index

最后,我们需要将 GBDT 输出转换为独热格式,并使用稀疏数据来训练具有 L1 正则化的逻辑回归。

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

GBDT-LR Performance

嘣!GBDT-LR 算法实现了 0.86 的 ROCAUC 分数,这优于基线 GBDT (0.83)和 LR (0.82)模型。

RAM 问题

到目前为止,一切看起来都很好,对吗?然而,这个数据集非常小。处理后只包含 653 条记录。因此,我们正在训练只有 20 个叶节点的小树。想象一下,在 GBDT 模型中,我们有一个更大的数据集,包含更多的要素,需要更多的叶节点和更多的树,这种一次性编码的输出可能非常巨大。

矩阵的大小可以通过记录数叶节点数树数来计算。在解决复杂问题时,我们需要小心处理这个矩阵。一个潜在的解决方案是将该矩阵转换成稀疏矩阵对象。

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

Use of Sparse Matrix

注意,通过将独热矩阵转换成稀疏矩阵,RAM 使用从 4,272 字节减少到 56 字节。然而,随着处理时间从 419 毫秒增加到 898 毫秒,这个技巧给 CPU 计算带来了更多的负担。

结束注释

同样,上面用作示例代码在@ 这里可用。

感谢阅读!

下一代自适应神经系统

原文:https://towardsdatascience.com/next-gen-adaptive-neural-systems-c71615eae2a?source=collection_archive---------16-----------------------

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

Photo by Joshua Sortino on Unsplash

自从深度学习革命开始以来,神经网络中就存在一种趋势,这种趋势可以简单地用一个词来概括:规模。

缩放这些模型的自然维度是计算和数据。十多年来,从硬件加速器到高级软件工具,计算扩展在堆栈的每个级别都是一项艰巨的任务。大型数据集已成为新数字经济中的一个关键优势,它一直是能够吸收和理解此类数据集的模型背后的驱动因素。

在大多数情况下,最好的模型处于我们扩展这些资源的能力的最前沿。这成为一个实际问题,因为预测有时需要在低延迟的情况下大量计算,但通常学习最好的模型不是最快的。与解决这个问题相关的研究领域叫做模型压缩。有许多技术,有些感觉有点粗糙,比如将小权重设置为零,并引入稀疏数据表示。其他方法似乎更有原则,如知识提炼,其中一个训练有素的重量级模型用于“教授”一个小得多的网络,或者另一种称为条件计算的技术,其中控制器决定为给定的输入样本激活网络的哪些部分。

模型适应和解压缩

相对于最初训练的网络,压缩模型在泛化能力方面损失了多少,这是一个公开的问题。如果你读了论文,你当然会发现在实验中,压缩模型的表现和原始模型一样好,甚至比原始模型的评价集还要好。但我在现实世界中部署模型时学到的一件事是,故事永远不会结束。环境总是可以在你的带领下改变,有时很慢,有时相当快。

通往真正智能和适应性系统的道路可能依赖于我从旧的创造力和天才之神那里得到的灵感,我称之为模型解压。原理很简单:当你发现你的模型在性能上有偏差时,在压缩模型中添加一些容量,然后动态学习。

从技术角度来看,这听起来像是一个愚蠢的想法,因为我们今天处理模型漂移的方式要有效得多。我们只是重新训练或不断训练大网络,并在我们想要推出新型号时重复压缩过程。理解为什么认为是次优的,需要一点关于边缘计算的想象力。

边缘

模型压缩得到真正关注的原因是因为我们希望部署这些令人惊叹的技术,而不会受到网络的瓶颈限制。网络通信通常是最慢和最糟糕的资源,因此,如果你需要一个大型云服务器来完成所有的 ML 并将其发送回手机或远程设备,你将面临可靠性和延迟的问题。模型压缩使我们能够运输这些模型,并以低延迟和低功耗在设备上运行它们。

我会回头说我们当前的方法有点傻,因为当环境彻底改变时,你不能指望一个超专门化的模型简单地完全适应自己。如果这是真的,我们将永远不需要一个重量级的模型。最近有一些关于使用被称为“教学助手”的中间模型的工作,来帮助建立一个蒸馏的层次结构,以帮助学生网络更好地学习。从解决边缘模型漂移的逻辑角度来看,似乎中间网络可以满足教师和学生之间的一系列资源需求。

当然,对于较小的漂移来说,这更有意义,甚至可能不需要任何新的资源(除了计算能力)。这都是相对的,当人类以人工智能工程师的形式被警告模型突然倒退时,他们不应该调整自己。更有意义的是,我们向这个系统引入新的组件来帮助自动化这个过程。

对于我们在训练和推理阶段之间的区别,有很多批评。这个想法是,训练应该像在大脑中一样一直进行,而不仅仅是一次性的。这和持续学习者的学习有些关系。

不幸的是,这并不容易符合硬件的故事。培训被认为是非常计算密集型的,如果没有硬件加速,这种情况是相当没有希望的。但现实并非总是如此:从头开始训练众所周知是计算密集型的,但我们可能不需要对训练数据进行几十次或几百次检查来适应新的情况。也许有必要重新审视一下利用当前硬件进行边缘培训的想法。

下一代神经系统

由于对资源的严格限制,这些问题在今天对 edge 来说是很难解决的。它们在云中的负担要小得多,所以我们为什么没有能够自动调整自己并不断从各种流中摄取数据的系统,这是一个奇怪的问题。嗯,我们有他们,但在我所知道的这样做的组织中,他们的 ML 团队的规模在几十到几百人之间。一个很大的原因是,构建可伸缩的数据处理系统仍然很重要。但更大的原因是,由于各种原因,我们的模型仍然很难训练,这涉及到许多人尝试不同的想法来提高性能。

这在手工生成特征的 ML 时代是有意义的。但是深度学习已经改变了这一点,或者至少它承诺会改变。在过去的几十年里,特别是最近的几十年里,我们已经证明了这是可行的。但大多数现实世界的场景都没有受益于一些非常聪明的科学家和多年来对归纳偏差和数据准备策略的研究思考。他们努力的结果是神经结构搜索、超参数优化和迁移学习。这些也在谷歌内部得到了证明,以至于它现在可以作为云服务使用。随着不同数据领域中新形式的无监督预训练方法的出现,深度学习的典型成功可能最终会在跨领域和行业的许多现实世界问题中实现。

这些是我们下一代系统的基本要素。

障碍

到目前为止,这些元素还没有集成到一个系统中。我们没有实现目标有几个原因,我将简要介绍一下。

有些部分似乎不兼容。例如,在通过神经架构搜索找到最佳架构后,如何从预训练的模型中进行迁移学习?有没有软件可以存储模型,当你想建立一个新的模型时可以查询它们,检索最好的模型作为预训练的起点?在将原始数据转换成当前网络可以有效学习的最佳形式方面,是否存在类似的事情?当然,这些算法存在超参数等价物,应该结合模型进行调整吗?我预计我们将及时解决其中的一些问题,这必须由一个在系统工程和深度学习科学方面都具有专业知识的行业研究实验室来推动。

运行这样一个系统也有很大的成本,忽略了建设它所必需的前期资本。但是如果我们把视野扩展到时间维度,成本就没那么有趣了。因为每个人都知道,计算成本总是会大幅下降,半个世纪以来一直如此,尽管摩尔定律已经终结,但它仍将继续,而且现在整个全球经济都在推动这一进步。

成本也不那么令人感兴趣,因为迁移学习承诺消除大量必要的计算能力。人们只需要训练一个好的基础模型一次,并根据需要多次微调它,成本要小几个数量级。这引发了该领域另一项高级技术的应用:联邦学习。

通常情况下,公司拥有不想共享的专有数据。然而,由于对其应用深度学习存在严重成本限制,他们也可能不愿意利用这些数据。但是,如果我们拥有下一代自适应深度学习系统,并具备联合学习的能力,也就是说,在本地进行培训(就像在公司网络内部一样),并且只向外部世界报告梯度,他们可能会更愿意。具体来说,这可以使多个医疗记录公司或律师事务所联合创建针对他们的问题的最佳模型,将其真正的应用留在下游,以针对他们的具体问题进行微调,而他们不必分享关于该模型的任何信息(其他各方可能也不太关心它,因为它对他们来说只有很小的价值)。联合学习甚至可以进一步降低初始预训练模型的成本。

也许我们根本不需要等待更好的计算机硬件。

下一级艺术与工作和休闲的未来

原文:https://towardsdatascience.com/next-level-art-and-the-future-of-work-and-leisure-f66049112e44?source=collection_archive---------19-----------------------

用人工智能变得更有创造力(和人性)

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

Photo by Amaury Salas on Unsplash

人工智能和深度学习对大量领域产生了巨大影响,并在过去几年中引发了许多颠覆和进步,这一事实对许多阅读本文的人来说不会感到惊讶。

然而,有些人可能会感到惊讶的是,即使是艺术和创意领域,这些一直被视为独特的人类领域,也没有受到这些最新进展的影响。

对人工智能取代工作的恐惧是围绕这些技术最常见的担忧之一。现在它甚至侵占了我们的创造性追求。这是否意味着我们不仅要担心我们的工作被人工智能抢走,还要担心我们的人性?

虽然许多人担心人工智能会取代或替代人类,或者认为人工智能永远不会有创造力,人工智能产生的任何东西根据定义都不是艺术,但我想提出一种替代观点。我相信,先进的 AI 将让我们专注于我们独特的天赋和优势,为我们提供创造性探索和表达的新工具,让我们享受更多高质量的休闲时间。

最终,它将使我们变得更有人情味。

在这篇文章中,我首先想给你一个非常简短(并且非常不完整)的关于深度学习和艺术交叉的介绍,并向你介绍一小群选择了神经网络作为他们首选媒介的艺术家。

然后,我想向您介绍我目前的公司 Qosmo 在过去几年中一直在从事的一些项目,以及我自己的一些个人项目。

最后,我想和你们分享一个不仅是人工智能和创造力,更广泛的工作和人类的未来愿景。

我希望在这篇文章结束时,我会让你相信,我们既不应该害怕人工智能削弱或贬低我们的人性,也不应该认为它只会影响日常工作,但不会对我们的创造力产生任何影响。相反,我希望到最后你会对人工智能的未来感到兴奋,并准备好接受它,不是作为一个竞争对手,而是作为一个强有力的工具来重获和加强我们的人性。

边注:本文基于我在 2019 年 SciPy Japan 上的一系列演讲,以及 2019 年日经 AI 峰会上的扩展版本。如果你更喜欢看视频,你可以在 YouTube 上找到 SciPy talk。但是这篇文章不仅是最近的,而且更有深度,特别是关于知识工作和创造力的未来的最后一部分,在 SciPy 的演讲中我根本没有时间去触及它。

人工智能艺术简史

人工智能和创造力之间的联系第一次从相当深奥的圈子渗透到主流意识,可能是在 2015 年谷歌宣布 DeepDream 的时候。

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

Image credit: https://www.reddit.com/r/deepdream/comments/3cc2a2/very_wow_such_puppyslug/

想象一下盯着一朵云。过了一会儿,你会感觉到你可以在那里看到一个模式。也许是一张脸。你盯着云看的时间越长,越想那张脸,你实际上就越说服自己,云中真的有一张脸在盯着你。

DeepDream 本质上就是这种现象的神经网络等价物。

通过反复强化神经网络在图像中拾取的模式,最初非常微妙的模式(或其想象的暗示)逐渐变成这些模式的完整表现。这样,狗的眼睛开始长出来,蜗牛从建筑物中冒出来,风景变成了有着童话般高塔的奇异城市景观。

从高中开始,一直到我获得博士学位,我偶尔会为乐队制作音乐视频来赚点小钱。我第一个使用深度学习的项目是在 2016 年我的博士学位即将结束时,当时我使用 DeepDream 网络在我为字母和树制作的*《虚空》*的视频中实现了一种有点新奇的视觉效果。

虽然今天没有人会对此感到兴奋,但你必须记住,就深度学习而言,2016 年是史前时代。当时这是一个非常酷的效果(至少我是这么认为的),这是我熟悉 TensorFlow(当时仍处于起步阶段)和深度学习的一个好方法。

最近,我们已经超越了对现有图像的简单处理。特别是,我们已经看到了神经网络在生成图像方面的惊人突破。很大程度上,这要归功于一种叫做 GANs生成对抗网络的网络。

GANs 基本上是通过让两个网络相互对抗来工作的,一个是生成假数据的生成器,另一个是必须判断数据是真实的还是由生成器网络创建的伪造品的鉴别者或评论家,他们已经在他们可以生成的图像类型中实现了令人震惊的准确性和可信度。

特别受欢迎(也很奇怪)的是(半)真实的脸相互变形的幻觉图像,这导致了令人着迷的视频。

由于这类甘赝品最近达到的真实程度,一个像这样的网站山寨产业已经兴起。每当这个特定的网站被刷新,一个新的由神经网络想象出来的照片般真实的肖像就产生了。虽然这很有趣,但它也让人们关注围绕深度造假和在近乎完美的人工智能造假时代真实数据的可信度日益增长的问题。

这一点我将在下面再次谈到。虽然人工智能艺术本身是有趣和令人愉快的,但它也像其他艺术形式一样,允许我们突出问题,表达我们的关切。通过使用这些问题或失败点作为我们工作的基础,并把它们发挥到极致,我们作为艺术家可以传播意识和教育。

最好的艺术不仅仅是审美上的愉悦,还能引发人们的思考。

2018 年 10 月,当法国集体 【明显】 能够在知名拍卖行佳士得以 432,500 美元的价格拍卖他们的甘创作的艺术品*【Edmond de Belamy】*时,人工智能艺术第一次真正成为主流。

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

Image credit: https://en.wikipedia.org/wiki/Edmond_de_Belamy#/media/File:Edmond_de_Belamy.png

这在艺术和 AI 社区都引起了轩然大波,并提出了 AI 是否能真正产生艺术的问题。

然而,这远不是它提出的唯一问题,拍卖后的大部分注意力都集中在显而易见公司处理和实施这个项目的方式上。他们面临着严厉的批评,因为他们采用了别人的代码,在一个结果可疑的简单数据集上进行训练,并出售打印在画布上的生成输出。

我不想太深入整个关于明显是否值得金钱和关注的争论(如果你感兴趣,网上有很多这样的讨论,例如伟大出版物 Artnome 中的这篇文章)。然而,我想说的是,在我看来,不管我们是否认为最终的作品是艺术,在我看来,显然不是真正的艺术家。

很能说明问题的是,他们甚至没有用自己的名字,而是用 GAN 算法背后的一个关键方程来签名。就好像他们想说“不是我们做的,是人工智能做的。”

这与真正的人工智能艺术家所做的完全相反。

就像一个画家研究他的画笔和画布并完善他的笔触一样,就像一个钢琴家研究她复杂的乐器并练习她的技巧一样,一个真正的人工智能艺术家深入研究他正在工作的网络,以及他需要操纵它们的方式,以精确地实现他心目中的创造性结果。

从这个意义上说,AI 和神经网络不是创造者!它们是钢笔、刷子、照相机、小提琴、凿子等。他们是工具。

由于它们的高度复杂性和新颖性,它们可能看起来像魔法,像自主的创造者,但最终它们仅仅是(希望)熟练的创造者手中的工具。

对我来说,显而易见的是非常聪明地利用这种新颖性和高度复杂性来做好销售。无论你如何看待他们的艺术才华,他们肯定是聪明的企业家。

这有点像有人在 1985 年 MS Paint 发布前夕用它画了一个简单的草图,印在一张大画布上,然后拍卖掉。创造它的过程的纯粹的新颖性和(当时)看似很高的复杂性可能已经获得了很高的价格并给人们留下了深刻的印象。但它可能不会是“好艺术”。Paint 女士肯定不会是创造者。

就像数码相机不比模拟相机更具创造力,或者 Photoshop 不比前数字平面设计师的笔和纸更具创造力一样,人工智能和深度学习也是如此——至少在可预见的未来,我们可以现实地想象它们——不是创造者,而是创造者使用的工具。

对于那些对真正的自主创造力感到兴奋的人来说,这可能会有点失望。但我对此感到高兴,并认为这丝毫不会降低人们对这些技术的热情。它们让我们创作者真正有了新的创造性表达方式。不仅仅是作为固定的工具,它们几乎是一个元工具,允许我们不断地梦想新的工具和过程来实现我们的创造性愿景。

关于我认为什么/谁是真正的人工智能艺术家,让我简单地给你介绍几个我认为属于这一类的人。

这个列表绝不是详尽的,人工智能艺术家的社区正在不断增长。开始研究更广泛的人工智能艺术的一个好地方是由巴鲁·埃利奥特组织的 NeurIPS 工作室的画廊,该工作室是关于创造性和设计的机器学习的

为了简洁起见,我也不会太深入任何一位艺术家的细节,而是鼓励你自己去看看他们的艺术(和思想)。

认识人工智能艺术家

可能最著名的人工智能艺术家是马里奥·克林格曼。

克林格曼,就像显而易见的一样,将他的大部分注意力集中在与甘相关的艺术上,尤其是肖像画。然而,与显而易见的相反,他真正成为了它们错综复杂的大师,确切地知道如何设计、训练和操纵它们,以达到他所渴望和设想的精确的艺术效果。

他的许多作品都有一种令人难以置信的微妙之处,让人想起更传统的艺术形式,常常怪异地将美术美学与更抽象的艺术形式混合在一起。

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

“Neural Glitch”; Image credit: http://www.aiartonline.com/art/mario-klingemann/

驱动他追求人工智能艺术的是对“趣味性”的追求,正如他在接受艺术市场大师 采访时概述的那样。

“我试图找到有趣的东西,这是一种永无止境的探索,因为一旦你抓住它,它就会像雪花一样在你手中融化。有趣隐藏在不熟悉、不寻常和不可思议之中,但是一旦你发现了它,并把它拖到聚光灯下,你看它的时间越长,它就变得越熟悉或正常,最终失去它的有趣性。

我使用机器作为检测器,帮助我在不断增长的信息堆中进行搜索,这些信息正以越来越快的速度进入我们的世界。与此同时,我自己也在不断增加,用机器生成有序的信息模式,速度比我自己的设备更快。在这个过程中,有时是我决定,有时是我让机器决定。"

这个搜索方面是人工智能艺术中反复出现的主题。

我们可以想象所有可能的艺术品的抽象空间。这个空间是难以置信的高维度和巨大的(潜在的无限取决于我们所考虑的媒体)。传统上,艺术家只能非常缓慢地探索这个空间中的无限小的区域。

神经网络本质上提供了工具,允许我们以更快的速度和更广阔的视野探索这个空间。人工智能艺术家的技能往往在于知道如何将这种网络化的探索引向“高度有趣”的区域。

克林格曼最近还在苏富比拍卖行拍卖了他的一件作品路人的回忆。这件作品不仅仅是一件静态的艺术品,它实际上包括了生成机制本身,导致了一个完全生成的、无限进化的装置。

最后,这件作品“仅仅”卖了 3.2 万英镑,这导致了一场广泛的媒体风暴,文章题为“人工智能艺术品在拍卖中失败,机器人启示录尚未到来”,宣称短命的人工智能艺术场景只不过是一种好奇,基本上已经走到尽头。

然而,我个人认为这对人工智能艺术社区来说是一个好迹象(我认为马里奥·克林格曼也同意这一点)。32,000 英镑是一个合理且非常值得尊敬的价格,它并没有标志着人工智能艺术的终结,而是标志着人工智能艺术炒作和利用注意力/新奇经济的终结。

这标志着人工智能艺术已经成为一种严肃而受人尊敬的艺术形式,而不是一种被夸大的好奇心。

与马里奥·克林格曼的作品非常不同,但同样有趣的是土耳其媒体艺术家 Memo Akten 的作品。

克林格曼的作品非常“专注”(因为没有更好的词),接近艺术,而阿克滕的作品则更具概念性和多样性。虽然他的最终结果可能看起来不那么“精致”,但它们都是基于通常非常简单但巧妙而具有煽动性的想法。

我强烈建议你去看看的作品目录,因为它种类繁多,但是我想在这里和你分享我最喜欢的他的作品,他称之为 学着去看

这个想法非常简单,但结果却令人震惊和深思。

在训练过程的开始,神经网络通常是随机初始化的,这意味着它们绝对没有“真实世界”的概念。在训练过程中,通过反复接触数据,他们形成了世界的图像(或者至少是数据集中所代表的世界)。如果这个数据集有偏见,那么经过训练的网络的世界观也会有偏见。

在《学会看》中,Akten 将这一想法发挥到了极致,并在非常独特的图像数据集上训练了各种神经网络。

一个网络只看到海洋和海岸线的图像,另一个网络只看到火的图像,还有一个网络只看到花的图像。

结果是,一旦网络完成了他们的训练过程,并被释放到“真实世界”,看到更多的普通图像,他们只能根据他们所学到的来解释这些图像。

例如,“花卉网络”不知道如何更好地解释它所看到的关于花卉的一切,它看到的任何地方都有花卉。

这就好像一个孩子从出生就在一个除了鲜花什么都没有的孤立环境中长大,然后突然被释放到现实世界中。它的视觉皮层和模式识别系统可能会努力解释新的模式,也可能会看到到处都是花。

虽然这是一个思想实验和纯粹的猜测,但众所周知,我们人类对我们视觉感知中的某些模式也有自然的(非常有用的)偏好,例如偏好看脸。

学会观察提出了一个有趣的问题:由于我们独特的成长和文化背景,我们每个人可能会有多少偏见。

我们看待和感知世界的方式到底有多不同?

虽然它不太可能像 Akten 网络的偏见或思想实验中的孩子那样强烈,但几乎可以肯定的是,人与人之间存在微妙的差异。

算法的偏差在过去已经引起了普遍关注。种族主义聊天机器人或性别歧视图像识别/分类模型只是一些例子。它们确实是数据驱动科学,特别是深度学习的最基本问题之一。

在某些情况下,偏见非常明显。虽然这些案例确实令人震惊和担忧,但它们不太可能是最有问题的,因为它们太明显了。随着数据驱动技术变得越来越普遍,特别是细微但无处不在的小偏差将变得至关重要,但也很难检测和消除。

虽然我们可能没有直接的解决方案,但作为艺术家,我们有能力让这个问题引起关注,并通过将它发挥到极致,让外行(以及经验丰富的从业者)更容易理解它。

这是我认为许多有趣的人工智能艺术生活的地方,特别是 Memo Akten 也参与的更具概念性的那种:采用成熟的神经网络,并将它们推向(或超越)它们的临界点或应用领域。这不仅经常导致有趣和意想不到的结果,还让我们更深入地了解如果在现实世界中盲目放任这种模型可能产生的问题。

这里我要介绍的最后一位艺术家是计算设计讲师汤姆·怀特

顾名思义,他的项目感知引擎专注于感知在创造力中的作用。用他的话说,

“人类的感知是创造过程中经常被低估的组成部分,因此设计一个将感知放在前面和中心的计算创造过程是一个有趣的练习。”

同样,它本质上是一种通过巧妙地改变应用领域来欺骗神经网络做它们最初不想做的事情的练习。

它使用了对立的例子的想法,并把一个有趣的艺术扭曲。特别是,怀特建立了一个反馈回路,在这个回路中,对网络的感知引导着创作过程,而创作过程又反过来影响感知。

简单地说(有点简化),White 使用了一个经过训练的神经网络来识别图像中的对象,然后使用了第二个系统,该系统可以生成抽象形状并搜索一个结果,该结果可以“欺骗”网络对特定对象类进行高确定性预测。结果是看似抽象的形状(怀特后来把它变成了真实的丝网印刷),仍然使网络确信是某些物体的照片般逼真的表现。

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

Image credit: https://medium.com/artists-and-machine-intelligence/perception-engines-8a46bc598d57

有趣的是,一旦我们知道网络认为它看到了什么,我们在大多数情况下也可以突然看到大多数图像中的对象(尽管我怀疑有人被骗将其与真实的东西混淆)。

White 使用的真实过程实际上比我在这里给出的项目的简略大纲更加巧妙和深刻。如果你对细节感兴趣,我强烈推荐你看看他的文章。

[## 感知引擎

一个视觉概述检查神经网络的能力,创造从真实的收集抽象的表现…

medium.com](https://medium.com/artists-and-machine-intelligence/perception-engines-8a46bc598d57)

Qosmo:计算创造力和超越

现在你已经对人工智能艺术有了一点概念,并且认识了一些在这个新兴领域工作的人,让我简单地给你讲讲我自己是如何参与进来的。

实际上,我的学术生涯始于一名物理学家,攻读量子信息理论博士学位。但是在做这个的时候,我意识到我想做一些更实用的东西。通过我共同创立的一家初创公司,我也有了一些创业经验,我认为人工智能不仅从纯粹的学术角度来看很有趣,而且也是解决一些非常酷的现实世界问题(并赚些钱)的非常有前途的工具。

因此,在获得博士学位后,我在一家初创公司工作了几年,该公司将人工智能应用于广泛领域的商业问题,例如金融和医疗保健。虽然在这些领域肯定有有趣的问题需要解决,但我个人对人工智能的创造性越来越感兴趣。

最终,在 2019 年 2 月,我终于决定辞去之前的工作,加入我的朋友 Nao Tokui 在他的公司 Qosmo 。如果你对这一切是如何展开的完整故事感兴趣(以及我是如何同时成为一名作家和音乐家的),我最近详细写了这一切:

[## 在不到两年的时间里,从上班族变成了作家、音乐家和艺术家

分享你的创意项目如何改变你的生活。

medium.com](https://medium.com/swlh/from-office-worker-to-author-musician-and-artist-in-less-than-two-years-e69fbbc6f520)

Qosmo 是一个位于东京的小型创意团队。该公司的核心理念是“计算创造力”,重点关注 AI 和音乐(但肯定不限于这些领域)。

这里我想简单介绍一下我们过去的三个项目。

AI DJ

大概到目前为止 Qosmo 最著名的项目就是我们的 AI DJ 项目了。

最初开始于 2016 年的 AI DJ 是一场人类与 AI 的音乐对话。

在 DJing 中,播放“背靠背”意味着两名 DJ 轮流选择和混合曲目。在我们的例子中,我们有一个人和一个人工智能背靠背地玩。

具体来说,一个人(通常是 Nao)选择一首曲目并进行混音,然后 AI 接管并选择一首曲目并进行混音,以此类推,创造出一种自然、连续的合作表现。

这种增强人类创造力和处理人类与机器创造力之间关系的想法是我们在 Qosmo 所做工作的核心。我们对自主创新的机器并不特别感兴趣(我们也不真的相信它们在不久的将来是可能的),而是对人类如何为了创新的目的与人工智能和机器进行交互感兴趣。

AI DJ 由几个独立的神经网络组成。核心是一个可以根据以前播放过的曲目选择曲目的系统,以及一个可以进行节拍匹配和混音的系统。

至关重要的是,我们使用的不是数字音频,而是真正的黑胶唱片。人工智能必须学会如何物理地操纵光盘(通过使用强化学习训练的微型机器人手臂),以便对齐节拍,并使节奏匹配。

虽然这个项目已经有几年的历史了,但是我们仍然在不断地开发这个系统。例如,使用摄像机来分析人群行为,并通过根据这些信息调整曲目选择来鼓励人们多跳舞。

过去,我们在许多地方,包括本地和全球,都进行过这种表演。到目前为止,我们最大的表现是在谷歌 I/O 2019 上,在首席执行官桑德尔·皮帅的主题演讲之前,我们在主舞台上做了一个小时的表演,让观众热身。

你可以在我们的网站上了解更多关于 AI DJ 的详细信息。

[## 人工智能 DJ 项目-人工智能和人类之间的对话

“人工智能 DJ 项目”是一场现场表演,由人工智能(AI) DJ 和人类 DJ 一起演奏…

qosmo.jp](http://qosmo.jp/en/projects/ai-dj-human-dj-b2b-2/)

想象的声音场景

作为人类,我们的视觉和听觉体验有着很深的联系。看看海滩的图片,你很容易想象海浪和海鸥的声音。看着繁忙的十字路口,脑海中可能会浮现出汽车喇叭声和建筑噪音。

想象的声音场景是一项实验,让 AI 对想象的声音和图像有类似的感觉。这是一个基于网络的声音装置,让用户探索谷歌街景,同时沉浸在人工智能想象的声音场景中。

在技术上,它是基于跨模态信息检索技术的思想,如图像到音频或文本到图像。

用关于视频(即,视觉和音频)输入的两个模型来训练该系统:一个良好建立的、预先训练的图像识别模型处理帧,而另一个卷积神经网络将相关联的音频读取为频谱图图像,其损失迫使其输出的分布尽可能接近第一个模型的分布。

一旦经过训练,这两个网络就可以让我们从庞大的环境声音数据集中检索出与特定场景最匹配的声音文件。

生成的声音场景有时有趣,有时有趣,有时发人深省。其中许多符合人类的预期,而另一些则让我们感到惊讶。我们鼓励你迷失在想象的声音场景中。

神经节拍盒

我们最近的艺术项目是 Neural Beatbox,这是一个视听装置,目前作为展览“人工智能:超越人类”的一部分在伦敦巴比肯展出(还展出了 Mario Klingemann 和 Memo Akten 的作品)。

就像 AI DJ 一样,这个作品围绕着一个音乐对话。然而,除了在人工智能 DJ 中,人工智能不是参与者,而只是推动者,对话发生在装置的不同观众之间。

节奏和节拍是人类最基本和最古老的交流方式。Neural Beatbox 使任何人,无论他们的音乐背景和能力如何,都能用自己的声音创造复杂的节拍和节奏。

当观众走近这个装置时,他们被鼓励录制自己的短片,发出声音,做鬼脸。使用该视频,一个神经网络将观众的声音分割、分析并分类为各种类别的鼓声,然后将其中一些整合到当前播放的节拍中。

同时,另一个网络不断产生新的节奏。

通过以这种方式结合后续观众的贡献,人们之间直观的音乐对话得以展开,从而产生不断发展的作品。

人工智能的轻微缺陷,如偶尔的错误分类或不寻常的节奏,实际上增强了创作体验,并导致有趣和独特的音乐体验。作为观众,试图通过制造“非鼓声音”来推动系统超越其预期领域,可以导致真正有趣的结果,其中一些结果实际上令人惊讶地充满音乐和灵感。

目前,Neural Beatbox 仅限于在巴比肯展览等公共场所展示,但我们也在考虑将它作为一个基于网络的互动作品开放。我们只是有点担心互联网上的人们可能会为这个装置贡献什么样的声音和视频…虽然结果可能会很搞笑和有趣,但它们可能也会很快包含一些 NSFW 的内容。;)

生成模型和价值

除了我最近在 Qosmo 的工作之外,我还和 AI 一起完成了一些我自己的艺术作品和一些与创造力相关的项目。在向您展示其中一些之前,我想简单快速地进行一次技术考察。

创意场景中使用的许多模型都属于“生成模型”这一大类。上面介绍的 GANs 就是其中的一个变种。

生成模型本质上是这样的模型,顾名思义,学习如何生成或多或少真实的数据。物理学家理查德·费曼的一句话很好地概括了这背后的一般思想。

“我不能创造的东西,我不明白。”—理查德·费曼

作为与人工智能合作的研究人员和工程师,我们希望如果我们能够教会我们的模型创建至少是模糊现实的数据,这些模型一定已经对真实世界的样子或行为方式有了某种“理解”。

换句话说,我们用创造和产生有意义的输出的能力作为智能的标志。

不幸的是,这种“理解”或“智能”仍然经常看起来像下面的图像。

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

Image credit: https://sufanon.fandom.com/wiki/File:Pix2pix.png

虽然我们的模型确实在学习真实世界的一些东西,但它们的知识领域通常非常有限,正如我们在上面的偏见例子中已经看到的那样。

在我之前从事实际商业应用的工作中,这是个坏消息。你不希望你的财务或医疗预测看起来像上面的图片!

然而现在作为一名艺术家,我发现这令人兴奋和鼓舞。事实上,正如已经指出的,许多艺术家故意寻找这些生成模型的断点或边缘案例。

我个人最喜欢的生成模型类型是所谓的变分自动编码器*,或者简称为 VAEs 。我发现它们都非常通用,而且从信息论的角度来看,它们既漂亮又优雅。*

简而言之,vae 将原始数据作为输入,然后通过信息瓶颈压缩和传输这些数据,最后尽可能精确地重建这些数据。

由于信息瓶颈(更专业地说:一个比数据空间维度低得多的潜在空间),模型不能只是直接传递数据,而必须学习高效的抽象和概念。

例如,如果我们想将它应用于狗和猫的图像,而不是简单地传输每一个像素值,则模型被迫学习抽象概念,如“狗”和“猫”的概念、腿和耳朵的概念、皮毛颜色等,这允许数据的更紧凑(尽管通常不是完全无损)的表示。

作为这个过程的一个整洁的副产品,我们得到了我们的数据的一个紧凑的数学描述,一个所谓的潜在向量或嵌入。这使得我们可以做各种有趣的事情,如有意义的数据比较以及数据点之间的真实插值,如上面 GAN 人脸的例子。

如果您想更详细地了解所有这些,我从两个玩家之间合作博弈的角度写了一篇关于 VAEs 的深入讨论。

* [## 作为双人游戏的可变自动编码器(上)

爱丽丝和鲍勃在自动编码奥运会上

towardsdatascience.com](/the-variational-autoencoder-as-a-two-player-game-part-i-4c3737f0987b)

个人项目

我想在下面展示的项目都以这样或那样的方式使用了 VAEs。

潜在脉动

当 VAE 被初始化时,它的数据表示是完全随机的,因为它还没有学习任何关于训练数据的东西。然后,随着训练的展开,网络逐渐学习不同的概念和抽象,相似数据的聚类开始在潜在空间中形成,随着模型收敛,这些聚类越来越清晰。

潜在脉动显示了一个这样的训练过程,从最初的随机混沌,到模型经历不同阶段,尝试不同的表示,最后确定在一个表现出相当明显的聚类。

此处潜在空间中的每个点代表大约 30 万条消费者投诉文本中的一条,这些文本涉及大约 12 种不同的金融产品(如“信用卡”、“学生贷款”等),用不同的颜色表示。

除了自然的学习过程,我还在嵌入中添加了一些周期性的随机噪声,以创建与轨道*【2 Minds】*【inside info】同步的节拍模式,时间从最初的 172bpm 延长到 160bpm,以更好地匹配视频帧速率。我选择了“两个头脑”这首歌,因为这个标题让我想起了 VAE 的编码器和解码器的关系。

通常,当用生成模型创作艺术时,我们会想到模型创作的实际输出。然而,潜在脉动颠覆了这一概念,表明潜在空间本身可以具有内在的美感和艺术品质,即使模型训练的数据显然是枯燥的,如本案例中使用的消费者投诉文本。

潜在景观

另一个相关的作品是潜在景观,它在视觉化潜在空间中根深蒂固的优雅和美丽方面走得更远。

我喜欢把这些看作是神经网络的“大脑扫描”。

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

从技术上来说,这些图像是通过分析潜在空间的潜在度量生成的(这件作品实际上是我们正在进行的研究论文的副产品)。粗略地说,潜在的空间不是“平的”,空间内的距离也不一致。潜在景观显示了在潜在空间的不同位置有多少弯曲,多少距离扭曲。

上面的结果也是基于在相同的金融投诉数据集上训练的 VAE,显示了令人想起外星景观或宇宙气体云的抽象形成。

就像在《潜在的脉动》中一样,网络本身,而不是生成模型的输出,成为了艺术品。

神经机能障碍

我要提到的最后一个项目是我迄今为止最大的个人项目。因为我之前已经在媒体上广泛地写了这个项目,我只想给你一个非常简短的概述。

NeuralFunk 是一个利用深度学习进行声音设计的实验。这是一个完全由神经网络合成的样本制成的实验轨道。

再说一次,神经网络不是音轨的创造者,但它们是用来创作音轨的唯一工具。因此,结果不是人工智能创作的音乐,而是用人工智能作为探索创造性表达新方式的工具创作的音乐。

在创建样本的过程中,我使用了两种不同类型的神经网络,一种是根据光谱图训练的 VAE 神经网络,另一种是 WaveNet 神经网络(还可以根据来自 VAE 的光谱图嵌入进行调节)。这些网络一起提供了许多工具来产生新的声音,从重新想象现有的样本或将多个样本组合成独特的声音,到完全无条件地创造全新的声音。

由此产生的样本然后被用来制作最终的轨道。

标题 NeuralFunk 的灵感来自鼓和低音子流派 Neurofunk 这是我最初的想法。但是在项目的过程中,它变成了更具实验性的东西,与声音设计过程本身的实验性质相匹配。

如果你想了解这个项目的全部细节(包括代码),可以看看我写的文章。

[## NeuralFunk -将深度学习与声音设计相结合

完全用神经网络产生的样本制作轨迹

towardsdatascience.com](/neuralfunk-combining-deep-learning-with-sound-design-91935759d628)

那么我的下一步是什么?

我有一个使用人工智能的扩展现场表演的大愿景,它将结合上面介绍的许多概念(和项目),并将它们带到一个新的水平,同时给我一种全新的音乐表演方式。

到目前为止,这不过是一个愿景,鉴于项目的规模,我甚至有点害怕开始。

然而,我目前正在非常积极热情地写一本关于休息时间的重要性的书。

虽然这看起来有点不着边际,但它实际上在几个方面完全融入了人工智能和创造力的关系。

为了让你相信这一点,让我们来做一个小小的旅行。起初,这看起来可能是随机的和不相关的,但是请耐心听我说,希望到最后你会同意我的观点,并对这个未来的愿景感到兴奋。

工作、休闲和创造力的未来

在人类历史的大部分时间里,工作的概念本质上等同于体力劳动。先是在田地和农场,后来在工厂。

在 20 世纪初,工厂工人平均每天工作 10 个小时以上,每周工作 6 天。

这一切都在 1926 年发生了变化,亨利·福特引入了八小时工作制和五天工作制(同时将工资大幅提高到行业标准以上)。

福特为什么要这么做?这不是因为他只是一个好人。他可能是,我不确定,但他这样做的原因更实际,更受商业驱动。

首先,他认识到,如果他提供比别人更好的工作条件,他就能轻易地吸引到最优秀的人才。这正是所发生的事情。最熟练的工人离开了他的竞争对手,排队到他的工厂工作。如果有人不表演,他就被解雇了。有足够多的人愿意接管这个职位。

第二,他认为如果人们没有空闲时间或者太累而不能利用空闲时间,他们就不会在休闲活动上花钱。

“有更多闲暇的人必须有更多的衣服。他们吃更多种类的食物。他们需要更多的交通工具。[……]休闲是不断增长的消费市场中不可或缺的成分,因为劳动人民需要有足够的空闲时间来寻找消费品的用途,包括汽车。”

这纯粹是经济上的。

通过给他的工人更多的休闲时间(和更多的钱花在休闲上),同样的工人最终能够并被激励去购买他们正在生产的产品。更多的空闲时间不会有害,反而会促进经济发展!

最后,也是我们讨论中最有趣的一点,他意识到他的员工可以在更短的时间内完成更好的工作,原因有两个。

对时间的限制会带来更多的创新和更好的方法。人们会真正考虑如何工作,而不仅仅是埋头苦干。

“我们可以在五天内获得至少和六天一样多的产量,我们可能会获得更大的产量,因为压力会带来更好的方法。”—亨利·福特

此外,休息得更好的员工通常更有效率,更有动力,也更少犯代价高昂的错误。

本质上,福特认为即使对于体力劳动来说,将忙碌等同于生产力也只是在一定程度上起作用。

大约在福特缩短其工厂工作时间的同时,哲学家伯特兰·罗素于 1936 年发表了他的精彩论文【歌颂懒惰】。

在这篇文章中,罗素指出,从历史上看,不是工作,而是对闲暇的庆祝让我们完成了许多我们现在认为是文明最大成就的事情。

“过去有一个小的休闲阶层和一个大的工人阶层。有闲阶级享有的优势在社会正义中是没有基础的[……]它几乎贡献了我们所称的文明的全部。它培育了艺术,发现了科学;它写了书,发明了哲学,改善了社会关系。甚至被压迫者的解放通常也是从上面开始的。没有有闲阶级,人类永远不会摆脱野蛮。”

他继续认为,前进的道路是重新发现我们对休闲和休假的欣赏(至少是高质量的休闲,如反思和沉思,而不是无休止地滚动我们的脸书饲料)。

让每个人都加入休闲阶层,而不仅仅是少数人。

我想严肃地说,在现代社会中,对工作美德的信仰正在造成巨大危害,而通往幸福和繁荣的道路在于有组织地减少工作。—伯特兰·罗素

鉴于 20 世纪初的这种趋势,我们现在应该生活在一种文化中,这种文化类似于古希腊和古罗马,高度重视休闲,并认为忙碌实际上是一种懒惰,缺乏时间管理和深刻的反思。

然而,事实似乎恰恰相反。我们发现自己身处一种文化中,这种文化常常把忙碌、压力和过度工作作为荣誉的象征、成就和骄傲的标志。一个按时下班并在白天充分休息的人不可能像一个日复一日长时间加班并且几乎不离开办公桌的人那样高效,对吗?

问题是,即使我们已经在很大程度上从体力劳动转向了知识工作,工人们仍然遭受着相当于工厂工作心态的智力折磨!

在某种程度上,这可能是合理的,目前仍然存在相当于工厂工作的大量智力残余。在这种工作中,投入的时间越多,产出越多(至少在一定程度上,就像亨利·福特意识到的那样)。

这是一种真正证明长时间工作和牺牲休息时间是合理的工作。但这也是最没有价值的一种工作。而且这个值一直在进一步递减。迅速地。这些正是被人工智能和其他生产力和自动化工具颠覆并最终取代的成熟任务。他们的日子已经屈指可数了。

在我之前的工作中,我领导了一个人工智能工具的开发,该工具帮助金融分析师搜索大量新闻数据,并从这些文本中产生见解。有了这个工具,分析师可以将搜索相关信息和为经理生成特定报告的时间减少 90%!在常规任务上浪费的时间减少了 90%,现在可以将这些时间重新投入到真正重要的工作中,真正利用他们的技能和创造力。

或者,它可以投资到休假中。这是一项值得的投资。

人工智能不会夺走我们的工作,也不会威胁或削弱我们的人类价值观。我的朋友和合著者约翰·菲奇和我认为事实正好相反。是的,人工智能将扰乱就业格局,但将会保留的工作以及新创造的工作将围绕创造力和同理心等人类技能。

这些技能相对于时间是高度非线性的。投入更多的时间绝对不等于产出更好或更高。事实上,很容易投入太多时间,忽略休息的平衡和滋养作用,结果减少一个人的产出。

在未来的工作中,休假将不会被认为是一件“值得拥有”的事情,或者是慷慨的雇主为吸引和留住人才而提供的诱人福利。

相反,有意识地休假将是关键技能和竞争优势之一。除了我们的工作伦理,我们应该认真开始思考我们的“休息伦理”。

约翰和我对这个未来非常兴奋,我们目前正在写一本关于休假的书。

* [## 休假-重新发现人类最伟大的实践之一

重新学习在不精疲力竭的情况下实现目标的失传艺术。

www.timeoffbook.com](https://www.timeoffbook.com)

我们希望鼓励更多的人重新发现这种似乎已经被遗忘的古老艺术,并就如何培养和利用高质量的休闲提供非常实用的技巧,以及分享历史和当代关于利用时间力量的惊人人物的不可思议的故事。

我们相信,专注于将同理心和创造力以及支持它们的休闲实践和习惯置于其企业或个人哲学核心的公司和个人将会蓬勃发展。

很快,这可能是唯一可行的选择。

忙碌工作很容易自动化,没有人,不管他们投入多少时间,牺牲多少生命,会在这些任务上胜过人工智能。

另一方面,创造力和同理心在未来很长一段时间内仍将是人类特有的。

那些理解这些技能以及新工具的人将不会把人工智能视为障碍或对手,而是作为一种使人类更上一层楼的技术。

能够让他们这样做的将是一种健康的工作和休闲节奏,以及有意识的休假实践。

所以我们不妨现在就开始练习!*

我希望这篇长文让你对人工智能艺术本身感到兴奋,以及人工智能将允许我们在未来更多地关注创造力的更广泛的影响。

我也希望我激励你自己采取行动。

如果你是一名人工智能从业者,希望你能玩玩你自己的人工智能艺术,也许从推动你的模型接近和超越它们的极限开始,看看它们如何表现。

但是不管你是否直接与人工智能一起工作,我真的希望你能考虑用更多更好的时间来练习。

不是偷懒,也不是偷懒。这是你对自己最好的投资之一!

让我们把无用功留给 AI,变得更有人情味!*

熊猫和模特的下一步

原文:https://towardsdatascience.com/next-steps-with-pandas-and-modeling-5e6e36672e39?source=collection_archive---------12-----------------------

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

Not for wildlife enthusiasts, but data scientists. Copyright Chi King under the Creative Commons Attribution 2 Generic License. No changes were made to this image.

到目前为止,您已经学习了机器学习的基础知识,以及一点 Python 3 和 Pandas。下面是一些后续步骤和免费资源,让你开始行动。我会继续在这里添加我想到的信息,或者评论中的建议。

此时,您不应该像阅读一本书一样阅读文档(尽管如果这对您有用,您可以这样做)。自上而下浏览文档,熟悉各种可用的主题。

在查看堆栈溢出之前,特别是如果您想提出问题,请查看文档。我更喜欢查找我当前的疑问或问题,并通读相关部分。

例如,我经常不得不编写自己的日期时间解析器,并将其传递给 read_csv 。我还传递了自己的数据类型列表,以获得正确的数据框。文档中有这两种情况的示例。

文档还包括食谱,非常值得浏览。

  • 将 Pandas 用于大型数据集

在创建了我的 Pandas 数据框之后,我使用 Pandas 创建了大约 30 GB 的数据集。这个过程包括导入、清理、合并 Pandas 数据帧和旋转(如果需要的话)。在 Pandas 中使用大型数据集有多种策略。查看文档和这个关于栈溢出的问题。小心栈溢出的老问题,因为它们可能涉及过时的特性或熊猫编码风格。

用于 Tensorflow 的 Dask Dask-ml 可能是你的下一步,还有分布式 Tensorflow 。在走这条路之前,确保你能彻底证明资源的花费是合理的。制定一份书面计划,并在做出最终决定前征求反馈。

  • tsfresh 提取日期/时间特征

不要试图自己构建依赖于时间的特征(星期几等)。

  • 通过指定 dtypes 减少内存使用

不要只接受熊猫的推断。检查数据类型,并仔细查看没有按预期显示的列。如果已知一个列只包含浮点数或整数,并且它显示为对象,那么请仔细检查它。

如果您知道某个特定的列是一个范围有限的整数,比如 1–3,请指定数据类型。例如

并且要小心具有混合数据类型的列。 Pandas 使用数据块而不是整列来推断数据类型。所以仔细检查导入数据的数据类型是必要的。

  • 汤姆·奥格斯佩格的《现代熊猫》

我从阅读汤姆的书中受益匪浅,这本书是免费的。不过,我劝你还是付他点什么吧,要看你自己的情况。

另一个优秀的免费资源。当你遇到问题或疑问时,请在这里查阅。

  • 学习贝叶斯方法

正如 Cal Davidson Pilon 在他的书 概率编程和针对黑客的贝叶斯方法 中指出的,贝叶斯方法在统计学书籍中经常受到冷遇。贝叶斯方法优雅、有用,是思考某些问题的一种非常自然的方式。我们现在都有计算资源,如数字海洋、自动气象站等。所以贝叶斯方法现在已经可以实际学习和使用了。

Pilon 首先通过编码,然后是理论来介绍贝叶斯方法,这不仅是开发 Python 技能的极好方法,也是获得工作模型的极好方法。

艾伦·唐尼的《思维贝叶斯》和《思维统计》都是免费的,也值得一读。

  • 最好的计算和学习资源

最佳永远是一个相对名词。这就是为什么 Stack 的人会问很多封闭的问题,询问使用哪种技术或者哪种技术是 T2 最好的。 Tim Dettmers 发表了一篇评估各种 NVIDIA 卡的性价比的优秀博文。挑选一台符合你预算的二手电脑,但在购买之前,确保你了解你需要的计算能力

最新的驱动程序更新可能不支持旧的 AMD 卡。

如果你正在寻找便宜的培训或教程资源,不要忽视甲骨文、英伟达、英特尔或 AMD 的开发者网站。例如,英伟达提供相关技术的在线课程,如 OpenACC。

  • 参与挑战

例如, Kaggle 数据清理挑战可以锻炼你的技能。创建几个笔记本在 GitHub 上展示总是一件好事,可以传递给潜在的雇主,或者作为在当地 PyData meetup 上准备演讲的提纲。

  • 参加您当地的 PyData 聚会

请在评论中留下优质资源。我一直在寻找对这份文件的补充。

熊猫形象版权所有 驰王*知识共享署名 2通用许可。没有对此图像进行任何更改。*

NFL 教练是如此,如此可预测

原文:https://towardsdatascience.com/nfl-coaches-are-so-so-predictable-3e15fa69bd32?source=collection_archive---------12-----------------------

深入分析

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

Source: Pixable

周日,深秋。我在看匹兹堡钢人队,我开始生气了。这是托德·哈利时代,你可以肯定,在比赛的某个时刻,钢人队将会遵循以下比赛顺序:跑-跑-传球-踢。钢人队有可能赢得这场比赛吗?他们在场上的什么位置?他们目前赢了吗?没关系——和现代 NFL 中的许多其他进攻协调人一样,Haley 也有自己的风格。某种…可预测性。他可能会改变路线和阵型,但是类型的比赛——第一次进攻,在只剩两码的时候第三次传球——似乎太容易预测了,即使是对普通球迷来说。

不久前,如果不为数据付费或从各种来源获取大量数据,很难量化 Haley 和其他 OCs 在他们的游戏呼叫中的可预测性。但是多亏了马克西姆·霍洛维茨罗恩·尤尔科的NFL scraper软件包,获得每场比赛的详细数据从未如此简单。所以我决定进行调查:NFL 的比赛召唤有多可预测?

为此,我使用 NFL scraper(所有用于分析的代码都可以在这里找到)收集了 2009 年至 2018 年的详细数据。我想了解的第一件事是跟注的游戏条件。我最喜欢的一个包含大量游戏场景信息的指标是获胜概率,或者基于当前的游戏条件,如分数、剩余时间、场地位置等,X 队最终赢得游戏的可能性有多大。具体来说,我想了解基于球队控球时的预扣胜率的打法会被称为什么打法。让我们从这里开始,第一步,看看快照前成功概率的一般分布。

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

好吧,不完全是正态分布,但在被称为胜率极高或极低的比赛中,也没有太多的模式*。好了,检查完毕后,让我们来看看这是如何按玩法来划分的。在我的数据集中,有 398,645 次播放。这是按游戏类型的分类:*

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

下面,您将看到两个独立的可视化效果——在左边,方框图显示了调用的时间汇总,在右边,我绘制了所有数据,以便更好地了解真实的分布情况:

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

哇哦。教练都是疯狂保守的!当一个球队获胜的机会少于 50%时,通常会判平底球、第四次传球和越位球…而且通常在击球前的概率要低得多。你可以说我疯了,但是当球队更有可能输球而不是赢球时,他们应该尽一切努力保住控球权,然而,当拥有控球权的球队有将近 55%的概率输掉比赛时,平均的控球率就会出现。

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

因此,数据告诉我们,当涉及到比赛叫牌时,教练有一些奇怪的倾向,至少在赛前获胜概率的背景下是如此。但也许还有其他的情境因素影响着他们所谓的戏剧类型,而这些戏剧在当时是最有意义的。

为了分析这是否是真的,我建立了一个分类模型,该模型只包含一些变量,以了解 NFL 中“可预测”的比赛召唤实际上是多少。从那里,我研究了多少可预测性如何影响胜利的可能性,以及不可预测性对每场比赛的平均和整体影响。

我不打算进入我如何建立分类模型的细节(或其他技术的许多细节——你可以随时查看代码或在 Twitter 上联系我),但我想让模型尽可能“天真”——这意味着我没有让模型暴露尽可能多的信息。也就是说,我没有让模特知道谁在和谁比赛,也没有让模特知道赛季的星期。这些都是可以提高准确性的变量,但是我不希望个别球队和/或赛季动态压倒比赛召唤的情境方面。

也就是说,我在 2009 年至 2018 年的逐场比赛数据样本上训练了我的模型,并在同一时期随机抽取的样本上进行了测试。模型中包括的特征描述了比赛的预扣分情况— 击倒、距离、场上位置、剩余时间、比分差距、预扣分获胜概率和各种预期得分结果(即下一次得分比赛的可能性)。我也控制了季节。

该模型表明,NFL 中的比赛呼叫是令人惊讶地可预测的——该模型在训练和测试集中正确地“呼叫”了大约 77%的比赛(参见代码以了解其他度量,如精度、kappa 等)。正如你在下面的混淆矩阵中看到的,这个模型在预测什么样的打法会被叫牌上没有太大的困难,只是在跑动和传球上有点混淆。如果我给出了有关团队参与的模型信息或其他更广泛的战术风格的历史特征,这可能会得到澄清。

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

现在我们有了广义的“可预测性”,我们可以检查哪些团队比“平均水平”更可预测或更不可预测在分析的时间段内,新英格兰队是最难预测的球队之一,这并不令人惊讶:

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

这张图表显示,该模型正确地预测了充电器在 2009 年至 2018 年期间播放的所有戏剧中的近 80%,这还没有提到克拉伦斯·谢尔蒙、哈尔·亨特、肯·惠森杭特、弗兰克·赖克。虽然这并不完全相关,但在这个时间段内普遍成功的团队聚集在图表中不太可预测的一侧。

这种相关性很有趣,部分原因是很难在 NFL 保持几年以上的好成绩,还因为该模型考虑了每一场比赛——这张图表只是从总体上考察了“可预测性”。那么每场比赛的可预测性是如何影响输赢的呢?

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

第一步只是看看每场比赛的可预测性有多分散。在左边,我按游戏绘制了广义分类模型的准确性,区分了输和赢(灰色= 0 =输,蓝色= 1 =赢)。该模型是全面可靠的,几乎在每场比赛中都预测了超过 60%的吹罚,并且在一些比赛中接近 95%是正确的。但是正如你从上面直方图相似的形状和高度可以看到的,仅仅是可预测性并不能很好的区分成功和失败。这表明,有一些潜在的变量可以更好地区分成败,团队质量是最明显的一个。

考虑到这一点,我想在控制团队实力的同时,模拟出每场比赛的可预测性对输赢的影响。通过使用可预测性和团队来拟合每场比赛结果的 logit 模型,我们可以做到这一点。而且结果很有意思!

首先要注意的是,仅仅使用团队、可预测性和一个简单的模型,我们就可以相当准确地从输家中挑选赢家。左侧的图表是一个混淆表,显示了模型的校准统计数据(基本上,如果我们分配 10 个团队有 70%的获胜机会,那么从长远来看,7 个团队应该会获胜——这与您应该如何测量天气预报的准确性类似)。在右边,我们可以看到一旦我们控制了整个团队的力量,可预测性是如何影响胜利的可能性的。基本上,你的叫牌越不可预测,你赢得比赛的可能性就越大(某人,请将这篇文章发给 Randy Fichtner )。

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

所以结论是…在你的叫牌中少一些可预测性,你就能赢得比赛。对吗?

不完全是。这项分析之前的一切主要集中在 NFL 的比赛召唤是否是普遍可预测的。它没有检查正在被调用的戏剧是好是坏。毕竟,如果教练已经在优化他们的战术选择,那么可预测性可能是好的。这种分析并没有深入到的比赛实际上叫什么,场上有什么人员,以及一个团队执行得有多好。但我们可以大致估计,当其他教练转向时,转向是否有价值。

为了做到这一点,我使用了另一个我喜欢的叫做胜利概率的指标。基本上,你在比赛开始前测量一个队获胜的可能性,然后在比赛结束后再次测量这个可能性。这两个概率的差异是该游戏在促成胜利方面的成功或不成功程度(增加的胜利概率可以是负的,只是你在你的起始位置“增加”了一个负值)。

我们可以使用观察到的 WPA 来创建一个 eWPA 模型,或按游戏类型创建预期的 WPA。然后,我们针对模型“称之为”错误的打法,将实际的 WPA 与 eWPA 进行比较,因为这些打法是教练偏离他们的平均水平的打法。然后,我们可以看到当他们偏离时团队的效率如何,以及这在整个赛季中对他们团队的帮助有多大。

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

正如你从上面的图表中看到的,有一些证据表明,偏离预期的行动号召会增加一个团队获胜的几率。在每场比赛的基础上,一场意想不到的比赛价值约 0.07%的额外 WPA 跨越团队赛季。这听起来可能不多,但是整个赛季加起来,平均每个队加起来有 21%的获胜概率*。只有 5 支队伍在曲折前进而不是曲折前进时产生的 WPA 比预期的少。这就是大多数球队都在跑的时候球队应该投球的决定性证据吗?不一定。但是有一些统计证据表明 NFL 的比赛召唤是次优的。我不是第一个得出这个结论的分析师(或粉丝)。***

无论是哪种情况,我希望你喜欢这次对 NFL 比赛召唤倾向的深入研究,以及如何将高级分析技术应用于比赛数据可以产生一些有趣的见解。现在,我们需要做的就是让教练在他们预计会输的时候停止踢皮球…

NGBoost 解释道

原文:https://towardsdatascience.com/ngboost-explained-comparison-to-lightgbm-and-xgboost-fda510903e53?source=collection_archive---------4-----------------------

现实世界中的数据科学

与 LightGBM 和 XGBoost 的比较

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

Photo by James Pond on Unsplash

Stanford ML Group 最近在他们的论文,【1】Duan et al .,2019 及其实现中公布了一种新算法,名为 NGBoost。该算法通过使用自然梯度将不确定性估计包括到梯度增强中。本文试图理解这种新算法,并与其他流行的 boosting 算法 LightGBM 和 XGboost 进行比较,看看它在实践中是如何工作的。

内容

  1. 什么是自然渐变增强?

  2. 经验验证—与 LightGBM 和 XGBoost 的比较

  3. 结论

  4. 什么是自然渐变增强?

正如我在简介中所写的,NGBoost 是一种新的提升算法,它使用自然梯度提升,这是一种用于概率预测的模块化提升算法。该算法由基本学习器参数概率分布评分规则组成。我将简要解释这些术语是什么。

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

From the paper, Duan, et at., 2019

  • 基础学习者

该算法使用基础(弱)学习器。它采用输入 x ,输出用于形成条件概率。那些基础学习者对树学习者使用 scikit-learn 的决策树,对线性学习者使用岭回归。

  • 参数概率分布

参数概率分布是一种条件分布。这由基础学习者输出的附加组合形成。

  • 评分规则

评分规则采用预测的概率分布和对目标特征的一次观察来为预测评分,其中结果的真实分布在预期中获得最佳评分。该算法使用最大似然估计或 CRPS。

我们刚刚学习了 NGBoost 的基本概念。我绝对推荐你阅读原文进一步理解(有数学符号的算法更容易理解)。

2。经验验证—与 LightGBM 和 XGBoost 的比较

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

Photo by billy lee on Unsplash

让我们实现 NGBoost,看看它的性能如何。原论文也在各种数据集上做了一些实验。他们比较了 MC dropout、Deep Ensembles 和 NGBoost 在回归问题中的表现,NGBoost 显示了其极具竞争力的性能。在这篇博文中,我想展示一下模型在 Kaggle 上著名的房价预测数据集上的表现。该数据集由 81 个要素、1460 行组成,目标要素是销售价格。让我们看看 NGBoost 可以处理这些情况。

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

Distribution of the target feature

由于测试算法的性能是这篇文章的目的,我们将跳过整个特征工程部分,将使用那那西的解决方案

导入包;

# import packages
import pandas as pdfrom ngboost.ngboost import NGBoost
from ngboost.learners import default_tree_learner
from ngboost.distns import Normal
from ngboost.scores import MLEimport lightgbm as lgbimport xgboost as xgbfrom sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from math import sqrt

这里我将使用上面的默认学习者、分布和评分规则。用这些东西来玩会很有趣,看看结果会有什么变化。

# read the dataset
df = pd.read_csv('~/train.csv')# feature engineering
tr, te = Nanashi_solution(df)

现在用 NGBoost 算法预测。

# NGBoost
ngb = NGBoost(Base=default_tree_learner, Dist=Normal, Score=MLE(), natural_gradient=True,verbose=False)ngboost = ngb.fit(np.asarray(tr.drop(['SalePrice'],1)), np.asarray(tr.SalePrice))y_pred_ngb = pd.DataFrame(ngb.predict(te.drop(['SalePrice'],1)))

对 LightGBM 和 XGBoost 进行同样的操作。

# LightGBM
ltr = lgb.Dataset(tr.drop(['SalePrice'],1),label=tr['SalePrice'])param = {
'bagging_freq': 5,
'bagging_fraction': 0.6,
'bagging_seed': 123,
'boost_from_average':'false',
'boost': 'gbdt',
'feature_fraction': 0.3,
'learning_rate': .01,
'max_depth': 3,
'metric':'rmse',
'min_data_in_leaf': 128,
'min_sum_hessian_in_leaf': 8,
'num_leaves': 128,
'num_threads': 8,
'tree_learner': 'serial',
'objective': 'regression',
'verbosity': -1,
'random_state':123,
'max_bin': 8,
'early_stopping_round':100
}lgbm = lgb.train(param,ltr,num_boost_round=10000,valid_sets=[(ltr)],verbose_eval=1000)y_pred_lgb = lgbm.predict(te.drop(['SalePrice'],1))
y_pred_lgb = np.where(y_pred>=.25,1,0)# XGBoost
params = {'max_depth': 4, 'eta': 0.01, 'objective':'reg:squarederror', 'eval_metric':['rmse'],'booster':'gbtree', 'verbosity':0,'sample_type':'weighted','max_delta_step':4, 'subsample':.5, 'min_child_weight':100,'early_stopping_round':50}dtr, dte = xgb.DMatrix(tr.drop(['SalePrice'],1),label=tr.SalePrice), xgb.DMatrix(te.drop(['SalePrice'],1),label=te.SalePrice)num_round = 5000
xgbst = xgb.train(params,dtr,num_round,verbose_eval=500)y_pred_xgb = xgbst.predict(dte)

现在我们有了所有算法的预测。让我们检查一下准确性。我们将使用与这次卡格尔比赛相同的标准,RMSE。

# Check the results
print('RMSE: NGBoost', round(sqrt(mean_squared_error(X_val.SalePrice,y_pred_ngb)),4))
print('RMSE: LGBM', round(sqrt(mean_squared_error(X_val.SalePrice,y_pred_lgbm)),4))
print('RMSE: XGBoost', round(sqrt(mean_squared_error(X_val.SalePrice,y_pred_xgb)),4))

以下是预测结果汇总。

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

Summary of the results

看起来 NGBoost 胜过了其他著名的 boosting 算法。平心而论,我感觉如果调一下 BGBoost 的参数,会更好。

NGBoost 与其他 boosting 算法的最大区别之一是可以返回每个预测的概率分布。这可以通过使用 pred_dist 函数来可视化。该功能能够显示概率预测的结果。

# see the probability distributions by visualising
Y_dists = ngb.pred_dist(X_val.drop(['SalePrice'],1))
y_range = np.linspace(min(X_val.SalePrice), max(X_val.SalePrice), 200)
dist_values = Y_dists.pdf(y_range).transpose()# plot index 0 and 114
idx = 114
plt.plot(y_range,dist_values[idx])
plt.title(f"idx: {idx}")
plt.tight_layout()
plt.show()

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

Probability distribution examples

上面的图是每个预测的概率分布。x 轴显示销售价格的对数值(目标特征)。我们可以观察到,索引 0 的概率分布比索引 114 更宽。

4。结论和想法

从实验结果来看,NGBoost 和其他著名的 boosting 算法一样好。然而,计算时间比其他两种算法要长得多。这可以通过使用二次抽样方法来改善。此外,我有一个印象,NGBoost 包仍在进行中,例如没有提前停止选项,没有显示中间结果的选项,选择基础学习者的灵活性(到目前为止,我们只能在决策树和岭回归之间选择),设置随机状态种子,等等。我相信这几点很快就会落实。或者你可以为项目做贡献:)

你也可以在我的 GitHub 页面上找到我在这篇文章中使用的代码。

包裹

  • NGBoost 是一种新的 boosting 算法,它返回概率分布。
  • 自然梯度推进,一种用于概率预测的模块化推进算法。这由基本学习器参数概率分布和 S 取芯规则组成。
  • NGBoost 预测与其他流行的 boosting 算法相比具有很强的竞争力。

如果你觉得这个故事有帮助,有趣或什么的,或者如果你有任何问题,反馈或字面上的任何东西,请随时在下面留下评论:)我真的很感激。还有,你可以在 LinkedIn 上找到我。

参考:

[1] T. Duan 等, NGBoost:概率预测的自然梯度推进 (2019),ArXiv 1910.03225

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值