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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

圣杯人工智能项目的美妙之处——以及如何找到它们

原文:https://towardsdatascience.com/the-beauty-of-holy-grail-ai-projects-and-how-to-find-them-5dbbbadd7ae6?source=collection_archive---------20-----------------------

人工智能项目管理

关于下一个最佳人工智能星际飞船的排名和双倍下注的艺术。

W 面对充满人工智能(AI)项目想法的海洋,很难找到从哪里开始钓鱼的方法。公司越来越意识到人工智能的好处。在过去的六年里,私募股权部门在人工智能初创公司投资了超过500 亿美元。你应该从哪里开始你的人工智能之旅?你是如何对不同的 AI 项目进行排名的?根据你的业务的 AI 成熟度水平,你应该专注于哪些 AI 项目?

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

Photo by Vince Fleming on Unsplash

这篇文章解释了如何对不同的人工智能项目进行评估和排序。每个组织都有有限的资源,他们需要分配这些资源来最大化影响。根据你在人工智能成熟旅程中的位置,人工智能项目的影响和风险之间的权衡变得更加重要。这些见解是通过与保时捷股份公司、硅谷初创公司 Xcalar 的行业专家讨论以及我自己的经历得出的。

让我们继续读下去。🎳

使用影响-风险人工智能项目矩阵

评估人工智能项目的主要维度是影响和风险。影响定义了人工智能项目的价值,风险定义了项目失败的可能性。人工智能项目可以根据其估计的影响和风险水平分为四组。

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

低影响、低风险的人工智能项目属于“扎实起步”类别。这些项目可能有助于开始你的人工智能之旅,但一旦你的公司达到人工智能成熟度的高级水平,这些项目就不再相关了。

高影响力、低风险的人工智能项目是寻找的“圣杯”项目。这些项目都有可能成功,并对业务目标产生重大影响。如果你发现了这些项目,就牢牢抓住它们,集中精力让它们发挥作用。

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

The Holy Grail AI Projects everyone is looking for. Source: Wikimedia

高影响、高风险的人工智能项目被认为是“计算好的赌注”。这个项目是否会成功还不确定,但是如果你的天才工程师找到了让它工作的方法,这个项目保证会有回报。

最后,低影响、高风险的人工智能项目属于“不-不-从不”类别。始终避免这些项目。即使项目成功,对底线的影响也有限。

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

Photo by Lubo Minar on Unsplash

现在,你如何评估人工智能项目的影响和风险来对它们进行排序?下面几节将深入探讨这两个标准。

影响

如果一个人工智能项目影响了商业目标,那么它就是有意义的。每个公司都有目标,KPI,或称 OKRs ,以此来指导业务。一些公司甚至采用了成功的人工智能策略。人工智能项目应该支持人工智能策略,从而支持商业目标。

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

Photo by James Toose on Unsplash

所有产生的影响是相等的吗?

前微软研究员、现保时捷公司创新经理 Tobias Grosse-Puppendahl ,区分了人工智能提供的三类价值:业务、客户和知识价值。商业价值通过新产品或降低成本直接影响公司的财务状况。客户价值侧重于推动用户参与。知识价值使员工能够采用新技能或在未来做出更明智的决策(例如通过收集有价值的数据)。

根据您公司的情况,侧重于将影响与这三个方面联系起来。

你如何计算人工智能项目的潜在影响?

低影响力和高影响力人工智能项目之间的区别在于可寻址受众的规模和财务机会。您可以将影响定义为

影响力=潜在受众机会。*

潜在受众是指受变更影响的用户、员工或产品数量。机会解决财务或 KPI 数据的预期变化。这包括交付项目的成本。你可以通过将你的情况与竞争对手的结果或你自己的预测进行比较来估计机会。将这两个因素相乘,你就有了一个衡量影响的尺度。

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

Photo by Miguel Henriques on Unsplash

例如,让我们假设你有 1000 个用户,他们平均每月在你的网站上花费 10 美元。我们预计推荐系统将增加 5%的利润。作为对比,麦肯锡表示,推荐引擎已经为亚马逊创造了超过 35%的收入。由于我们不是亚马逊,5%的涨幅似乎是合理的。这相当于(1000 * 10 美元)* 0.05 =每月额外利润 500 美元。很高兴我们锁定了我们的业务基础!如果我们计算所有项目的影响,我们可以将它们分成高影响或低影响类别。

风险

风险是指在给定时间、成本和质量限制的情况下,项目不成功的可能性。项目的风险越大,失败的可能性就越大。

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

Photo by Loic Leray on Unsplash

什么因素定义了人工智能项目的风险?

每个人工智能项目都通过数据、算法和基础设施来满足人工智能的三位一体。如果数据不可用,算法是一个新的领域,并且你没有合适的基础设施,那么实现一个人工智能项目就变得非常困难。因此,它变得更加危险。

OpenAI 的 Josh Tobin全栈深度学习课程中指出,定义人工智能项目可行性的主要因素是数据可用性、准确性要求和问题的复杂性。一般来说,数据标注和精度要求往往是主要的成本因素(第 2 周,Min 29 )。需要的标记数据越多,精度要求越高,项目的成本就越高。制造自动驾驶汽车需要很高的精确度,因此非常昂贵。另一方面,创建一个基本的在线推荐器通常具有有限的数据标记和准确性要求,因此更便宜且风险更小。

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

Photo by Matthew Szlichta on Unsplash

前谷歌项目经理丽贝卡·叶(Rebecca Ye)现在是创业公司 XCalar 的联合创始人和首席运营官,她将与商业成果的联系作为每个人工智能项目的主要风险因素。丽贝卡看到许多大公司刚刚开始使用人工智能。为了进行可持续的投资和实施人工智能,来自业务部门的拉动至关重要。人工智能项目应该明白他们需要满足商业目标。

现在我们有了 AI 项目的风险因素列表,让我们标准化 AI 项目风险评估。

你可以用什么工具来定义人工智能项目的风险?

虽然人工智能项目的风险不像影响那样容易计算,但是人工智能项目画布可以作为评估风险的良好代理。AI 项目画布检查项目的价值主张、数据、客户和财务视角。因此,它回答了 Josh 和 Rebecca 在上面提到的主要因素。

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

你能在 AI 项目画布中回答的类别越多,你的 AI 项目的风险就越低。如果你有一个清晰的价值定义,数据随时可用,你知道如何将产品运送给你的客户,并且你关注项目财务,那么你就走上了成功之路。使用令人信服的回答类别的数量将项目分为高风险和低风险的 AI 项目。

作为最后一步,现在我们已经根据影响和风险对项目进行了排序,我们应该根据 AI 成熟度的水平来关注哪些项目?

根据你的人工智能成熟度水平下注

吴恩达,前谷歌和百度大脑负责人,现任 landing.ai 首席执行官,建议公司简单地从人工智能开始。在人工智能转型剧本中,从人工智能项目开始是第一个要点。在在线课程AI for everybody中,他进一步解释说,从人工智能开始比拥有人工智能战略更重要。我们想更进一步,建议在开始人工智能之前先看看人工智能项目的影响和风险。

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

通常,踏上人工智能成熟之旅的公司会发现自己处于三个成熟水平之一:初级、高级、专业。刚起步的公司没有可用的基础设施,没有对其数据能力的概述,并且只雇佣了最初的几名数据员工。先进的人工智能组织已经成功交付了第一批人工智能项目。专业的人工智能公司已经将人工智能确立为其主要竞争优势之一,并从有效的基础设施和高技能的工程师中受益。

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

例如,保时捷强调人工智能是其重点主题之一,以推动其 IT 能力的未来。

Tobias 强调了理解你的公司在人工智能成熟之旅中的位置的重要性。对他来说,当一家公司正在寻找创新的新方法来解决现有问题时,高影响、高风险的“计算赌注”人工智能项目尤其具有吸引力。创新的想法很少是低风险的,但对于一个人工智能成熟度高的公司来说是重要的。谷歌建议将你的核心/可行创新/登月项目的工作分成 70/20/10 份,以持续创新。

关键要点

在评估人工智能项目时,要考虑影响-风险矩阵。鉴于你在人工智能成熟之旅中的位置,专注于不同类别的人工智能项目。

  • 影响=潜在受众*机会
  • 风险最好通过人工智能项目画布来评估
  • 如果你是从人工智能开始,寻找低影响、低风险的“扎实起步”人工智能项目开始
  • 在你的第一次学习之后,专注于高影响力、低风险的“圣杯”人工智能项目来推动价值
  • 一旦你已经达到人工智能的成熟期,从高影响和高风险类别中分配一些资源到“计算好的赌注”人工智能项目上

这篇文章旨在给你一个评估不同人工智能项目的实践指南。这些方法已经被尝试和测试,并在今天的工业中被应用。如果你想了解更多商业和数据科学之间的联系,关注媒体LinkedInTwitter 上的我。

在 Python 中选择机器学习预测模型的数据科学家指南

原文:https://towardsdatascience.com/the-beginners-guide-to-selecting-machine-learning-predictive-models-in-python-f2eb594e4ddc?source=collection_archive---------6-----------------------

了解如何为您的 ML 项目选择最佳模型。

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

Photo by Franck V. on Unsplash

本文提供了 Python 中一些预测性机器学习模型的快速概述,并为针对数据科学问题选择正确的模型提供了指导。

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

近年来,随着机器计算能力的提高,预测建模经历了一场革命。我们现在能够在多个内核上以数 GHz 的速度运行数千个模型,使预测建模比以往任何时候都更高效、更经济。虚拟机,例如亚马逊网络服务(AWS)提供的虚拟机,为我们提供了实际上无限的定量能力(当然成本很高!).

然而,每个数据科学家面临的一个基本问题是:

哪种预测模型更适合手头的问题?

回答这个问题可以归结为每个机器学习问题中的一个基本问题:

你试图预测的目标是什么样子的?

如果你试图预测一个连续目标,那么你将需要一个回归模型

但是如果你试图预测一个离散目标,那么你将需要一个分类模型

Python 中的回归模型:

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

Regression Modeling — https://en.wikipedia.org/wiki/Regression_analysis

  • **线性回归:**当您预测一个连续模型,并且您的目标在-∞和+∞(如温度)之间变化时,最佳模型是线性回归模型。根据您可能拥有的预测值(即特征)的数量,您可以使用简单线性回归(SLR)或多元线性回归(MLR)。这两者在 Python 中使用相同的包:sklearn.linear_model.LinearRegression() 关于这一点的文档可以在这里找到
  • **伽马回归:**当对具有 0 到+∞分布的目标进行预测时,那么除了线性回归之外,具有Gamma Distribution的广义线性模型(GLM)可用于预测。关于 GLM 的详细信息可以在这里找到。

Python 中的分类模型

Python 提供了许多分类模型。在这一节中,我们回顾一下[scikit-learn](https://scikit-learn.org)库中一些广泛使用的模型。

  • 逻辑回归(LogReg): 该模型用于预测多类目标。与 K_Nearest Neighbors (kNN)不同,该模型在线性情况下工作良好。SciKit-Learn 在其线性模型库中提供了这个包:sklearn.linear_model.LogisticRegression() 关于这个的文档可以在这里找到
  • **KNN(或 K 近邻)**为非参数模型,其中 logistic 回归为参数模型。一般来说, KNN 比 LogReg 模型效率低,支持非线性解。该模型根据特定类的最近邻居数量(顾名思义)对目标进行分类。这里可以找到sklearn.neighbors.KNeighborsClassifer 的文档。需要注意的是,sklearn还提供了一个KNeighborsRegressor,本文未涉及。

分类问题的混淆矩阵

我的关于**用 Python 评估机器学习分类问题:重要的 5+1 度量 的文章提供了分类性能度量的概述,以及这些模型的混淆矩阵混淆度量的定义。**

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

Structure of a Binary Classification Confusion Matrix https://medium.com/@minaienick/evaluating-machine-learning-classification-problems-in-python-5-1-metrics-that-matter-792c6faddf5

高级分类器/回归器模型

Python 库提供了许多算法,如 SciKit-Learn、XGBoost 和……其中一些算法既提供了分类器又提供了回归器,还提供了许多用于定制的参数。

  • ****决策树:决策树提供可定制的模型,同时也是更加优化的模型的基础,如 RandomForestGradientBoosting文档可在此处找到。决策树是非参数监督学习,因此能够处理异常值和相关变量。但是,它们很容易过度适应训练数据集,用户应该小心这个问题。

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

Visualization of a Decision Tree — https://scikit-learn.org/stable/modules/tree.html

  • Bagging 模型(或集成): Bagging 分类器在原始数据集的随机子集上拟合基本分类器(例如决策树或任何其他分类器),然后聚合这些分类器以获得最终预测。这可以通过投票或平均来实现。更多关于 [sklearn.ensemble.BaggingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html) 的细节可以在这里找到。

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

Bagging Approach — “Data Mining: Accuracy and Error Measures for Classification and Prediction” , Paola Galdi Roberto Tagliaferri

  • ****随机森林:**随机森林模型类似于装袋模型,但有区别。根据 Sklearn 关于 [sklearn.ensemble.RandomForstClassifie](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html)r : 的文档,“随机森林是一种元估计器,它在数据集的各个子样本上拟合多个决策树分类器,并使用平均来提高预测精度和控制过拟合。子样本大小始终与原始输入样本大小相同,但样本是替换抽取的。这种类型的模型有许多优点,包括高学习速度、可扩展性、模型的非迭代性质(它总是收敛的)。该模型的另一个重要优点是,它可以处理不平衡的情况,并可以利用 bootstrapping 来处理这种情况。但是,该模型可能会占用大量内存,并且可能会过度适应定型数据集。本文很好地总结了这一模式。

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

General Scheme of a Random Forest Model — https://www.mql5.com/en/articles/3856

  • ****投票模型:投票模型可以将多个模型打包在一个模型下。Sklearn 文档称之为 “用于不适合估计器的软投票/多数规则分类器。” 在这个模型中,可以给每个投票模型分配一个权重,这样不合适的模型就会被打折扣。这类似于 bagging,但适用于不同的模型和不同的权重(Bagging 仅适用于一个基础模型,然后对预测值进行平均)。[sklearn.ensemble.VotingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html)有关于这款车型的更多细节。
  • ****Boosting 模型:在 Boosting 模型中,每棵树根据其准确性获得一个重要性权重。更精确的模型将具有更高的权重,因此对最终预测的贡献更大。高度不准确的模型将被负权重惩罚,这意味着它们的预测将在最终预测中被逆转。助推模型有多种,但值得注意的有:[sklearn.ensemble.GradientBoostingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html)[sklearn.ensemble.AdaBoostingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html)

Scikit-Learn 算法备忘单

Scikit-Learn 开发了一个流程图,用于根据样本的特性、特征(或预测值)和目标为机器学习问题选择正确的模型。此互动备忘单可在此处找到。

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

Scikit-learn Algorithm Cheat-Sheet (https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html)

最后的想法…

当谈到机器学习预测模型时,这篇文章几乎没有触及表面。为此目的已经开发了许多包(并且仍在增加),这将需要大量的时间来复习和学习。学习这些模型的最好方法是在实际项目中使用它们。我希望这篇文章可以作为为您的数据科学项目选择正确模型的指南,并帮助您完成数据科学之旅。

尼克·米奈, 博士( LinkedIn 简介 )是一位高级顾问和富有远见的数据科学家,代表了领导技能、世界级数据科学专业知识、商业敏锐度和领导组织变革能力的独特组合。他的使命是推进人工智能(AI)和机器学习在行业中的实践。

自然语言处理的开端

原文:https://towardsdatascience.com/the-beginning-of-natural-language-processing-74cce2545676?source=collection_archive---------33-----------------------

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

让我们都回到人类生活的早期阶段,早期人类用不同的手势相互交流,在一定程度上,今天我们在世界各地使用 7000 多种语言。对于早期人类来说,这是一个相当大的成就,这使得人类有别于世界上的其他生物,这就是沟通的艺术。

现在,我们通过一种被称为“自然语言处理”的新方法与计算机进行互动,将这种艺术推向了一个新的高度它与自然语言和计算机之间的交互有关。它是人工智能和计算语言学的主要组成部分之一。它提供了计算机和人类之间的无缝交互,并在机器学习的帮助下赋予计算机理解人类语言的能力。

NLP 的历史可以追溯到 1971 年,当时美国国防高级研究计划局(DARPA)将 NLP 用于语音的鲁棒自动转录(rat ),以执行与通过极度嘈杂和/或高度失真的通信信道接收的包含语音的信号相关的任务。

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

2011 年,苹果在 iPhone 中引入了 Siri,这为 NLP 的各种应用带来了突破。

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

如今,我们都知道聊天机器人在各种公司中有多重要,例如信使、公司网站、银行、客户服务等等。

因此,让我们借助 Python 编程语言,开始我们学习这项蓬勃发展的技术的旅程。

Python 和 NLTK 入门:

Python 是不同机器学习活动中使用最多的语言,其中一个主要原因是支持不同的第三方包。为了学习 NLP,我们需要首先安装“NLTK”,可以从http://www.nltk.org免费下载,并按照那里的说明下载您的平台所需的版本。

一旦安装了 NLTK,就可以按照下面的命令安装所需的数据

import nltk
nltk.download()

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

一旦你运行了命令,你将得到上面的窗口,在这里你可以从你想要安装的软件包列表中选择。一旦你安装了所有必要的软件包,我们就可以开始探索它们了。

标准自然语言处理工作流程

我假设您知道 CRISP-DM 模型,这是执行任何数据科学项目的典型行业标准。任何基于 NLP 的问题都可以通过包含一系列步骤的系统工作流来解决。下图描述了主要步骤。

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

我们通常从文本文档的语料库开始,并遵循文本争论和预处理、解析和基本探索性数据分析的标准流程。基于最初的见解,我们通常使用相关的特征工程技术来表示文本。根据手头的问题,我们要么专注于建立预测的监督模型,要么专注于无监督模型,后者通常更专注于模式挖掘和分组。最后,我们与相关利益相关者或客户一起评估模型和整体成功标准,并部署最终模型以供将来使用。

预处理

清理和预处理文本数据通常涉及多个步骤。我将强调自然语言处理(NLP)管道中大量使用的一些最重要的步骤,我经常在我的 NLP 项目中使用它们。

1)标记化

通过使用空格和标点符号分隔单词将文本分成小块的过程。

为了实现这一点,我们需要使用 nltk.word_tokenize()

代号:

string = ‘Virat Kohli is the best batsmen in the world’
tokens = nltk.word_tokenize(string)
tokens[‘Virat’, ‘Kohli’, ‘is’, ‘the’, ‘best’, ‘batsmen’, ‘in’, ‘the’, ‘world’]

上面的列表是我们的字符串的记号,也称为 Unigrams,我们还可以从这些记号中创建二元、三元、n 元,如下所示:

二元模型:

二元模型是由两个连续单词组成的记号。

代码:

tokens_bigrams = list(nltk.bigrams(tokens))
tokens_bigrams[(‘Virat’, ‘Kohli’),
(‘Kohli’, ‘is’),
(‘is’, ‘the’),
(‘the’, ‘best’),
(‘best’, ‘batsmen’),
(‘batsmen’, ‘in’),
(‘in’, ‘the’),
(‘the’, ‘world’)]

三元模型:

三元模型是由三个连续单词组成的记号。

代码:

tokens_trigrams = list(nltk.trigrams(tokens))
tokens_trigrams[(‘Virat’, ‘Kohli’, ‘is’),
(‘Kohli’, ‘is’, ‘the’),
(‘is’, ‘the’, ‘best’),
(‘the’, ‘best’, ‘batsmen’),
(‘best’, ‘batsmen’, ‘in’),
(‘batsmen’, ‘in’, ‘the’),
(‘in’, ‘the’, ‘world’)]

n 语法:

n 元语法是有 n 个连续单词的记号,我们可以在代码中指定。

代码:

tokens_ngrams = list(nltk.ngrams(tokens,4))
tokens_ngrams[(‘Virat’, ‘Kohli’, ‘is’, ‘the’),
(‘Kohli’, ‘is’, ‘the’, ‘best’),
(‘is’, ‘the’, ‘best’, ‘batsmen’),
(‘the’, ‘best’, ‘batsmen’, ‘in’),
(‘best’, ‘batsmen’, ‘in’, ‘the’),
(‘batsmen’, ‘in’, ‘the’, ‘world’)]

这些不同的记号化方法对你的 NLP 项目非常有帮助。

2)词干

要理解词干,你需要了解词干代表什么。词干也被称为单词的基本形式,我们可以通过在词干上附加词缀来创造新单词,这一过程称为词尾变化。考虑跳跃这个词。你可以给它加上词缀,组成新词,比如 JUMPS,JUMPED 和 JUMPING。在这种情况下,基本词 JUMP 是词干。

该图显示了词干是如何出现在所有词形变化中的,因为词干构成了词缀构成每个词形变化的基础。从一个词的词尾变化形式获得其基本形式的逆过程称为词干提取。词干分析帮助我们将单词标准化为词根或词根,而不管它们的词形变化,这有助于许多应用,如分类或聚类文本,甚至在信息检索中。现在让我们来看看流行的波特梗

代号:

def simple_stemmer(text):
    ps = nltk.porter.PorterStemmer()
    text = ' '.join([ps.stem(word) for word in text.split()])
    return text
simple_stemmer("My system keeps crashing his crashed yesterday, ours crashes daily")‘My system keep crash hi crash yesterday, our crash daili’

请注意,词干通常有一套固定的规则,因此,词根可能在词典上不正确。这意味着,词干单词可能在语义上不正确,并且可能不在字典中(从前面的输出中可以明显看出)。

  1. 词汇化

词汇化与词干化非常相似,我们去掉词缀来获得单词的基本形式。然而,在这种情况下,基本形式被称为词根,而不是词干。区别在于词根在词典中总是正确的(存在于词典中),但是词根可能不是这样。因此,词根,也称为引理,将始终存在于字典中。

代号:

from nltk.stem import WordNetLemmatizer
from nltk.stem import wordnetword_lem = WordNetLemmatizer()
word_lem.lemmatize("My system keeps crashing his crashed yesterday, ours crashes daily")'My system keeps crashing his crashed yesterday, ours crashes daily'

你可以看到单词的语义并没有受到影响,然而我们的文本仍然是标准化的。

请注意,词干化过程比词干化慢得多,因为当且仅当词条存在于词典中时,通过从单词中移除词缀来形成词根形式或词条还需要一个额外的步骤。

4)删除停用词

意义不大或没有意义的单词,尤其是当从文本中构造有意义的特征时,被称为停用词。如果你在语料库中做一个简单的术语或词频,这些通常是出现频率最高的词。通常,这些可以是冠词、连词、介词等等。停用词的一些例子是 a、an、the 等等。

代码:

from nltk.corpus import stopwords
stopword_list = set(stopwords.words('english'))

如果您想了解更多关于停用词的信息,可以查看上面代码中创建的停用词列表。基于你的 NLP 问题,你甚至可以在这个列表中添加更多的单词。

def remove_stopwords(text, is_lower_case=False):
    tokens = nltk.word_tokenize(text)
    tokens = [token.strip() for token in tokens]
    if is_lower_case:
        filtered_tokens = [token for token in tokens if token not in stopword_list]
    else:
        filtered_tokens = [token for token in tokens if token.lower() not in stopword_list]
    filtered_text = ' '.join(filtered_tokens)    
    return filtered_textremove_stopwords("The, and, if are stopwords, computer is not")‘, , stopwords , computer’

就这样,我们到了这篇文章的结尾。在我的下一篇文章中,我们将看到如何构建一个文本规格化器,它将在一个函数下为我们做所有需要的预处理。

本文使用的 Jupyter 笔记本的 Github 链接:https://github . com/sunil manu/Natural-Language-Processing-Series

谢谢

数据科学中开发运营技能的优势

原文:https://towardsdatascience.com/the-benefits-of-dev-ops-skills-in-data-science-fa0a30aade85?source=collection_archive---------37-----------------------

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

ev-Ops 是我热爱的一门学科。我对开发运营的热爱来自于我对 Linux 的热爱,我对这两者的热爱让我在数据科学和编程方面变得更加出色。这对于能够部署你自己的作品是非常有益的。此外,在许多情况下,能够 SSH 到服务器并实际使用它是至关重要的。

部署

开发操作技能是许多人使用 Heroku、Netlify 和类似的简单部署系统的唯一原因。这些服务的问题是它们昂贵且有限。这些服务也不是专有的,这意味着如果您的公司需要部署到他们的 VPS,而没有适当的技能和知识,那么您将不得不让其他人来部署您的终端和应用程序。

与使用共享主机服务相比,能够单独配置 NGINX 可以为您节省大量资金和麻烦。能够部署自己的应用程序不仅是一种解放,而且速度更快!部署你自己的 Flask 应用程序也将使你的团队的工作更容易。这是因为您可以在一个会话中建立并运行您的模型。

另一个很大的好处是尺寸和计算;虽然优化通常可以用来解决这些和类似的问题,但拒绝计算限制、计算定价以及最重要的存储限制也是很好的。当您使用 Gunicorn 3 和 NGINX 在 VPS 上部署您的模型时。如果你想改善你的部署,你可以在这里

通用编程

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

知道如何使用 Linux 就是知道如何使用服务器,知道如何使用 bash,能够无头操作电脑。所有这些技能被结合成一个,因为 Linux 是如此的通用,如此的被使用。

许多微型计算机项目也可能需要一些 Linux 知识。显然,Linux 是绝对必须的,尤其是对于 web 开发和部署。

对于数据科学来说,互联网对于这项工作的必要性经常被低估。数据科学实际上并不是拟合模型和建立巨大的神经网络,而是获得你做这些事情所需的数据。因为你首先需要数据来建立一个模型,所以非常清楚如何将数据传递给你自己是一个数据科学家必须具备的技能。

此外,bash 的强大功能可以极大地改变您的工作流程。使用 git 来检索存储库、提交和编辑文件是一件非常方便的事情。在没有 bash shell 的 Windows 中,开发人员经常会遇到需要 bash 终端却没有的问题。熟悉 bash 是一项您肯定不会后悔学习的技能。

部署端点和管道是数据科学难题的重要组成部分。虽然我通常更喜欢拟合模型和处理数据,但我很了解管道和事先获得良好数据结构的重要性。

Unix 系统管理技能可以使您的部署变得容易,有时可以将不可能变为可能。部署可能是一件痛苦的事情,有时它真的可以穿透一个非常大的模型;限制机器学习模型的大小和计算速度。这些技能会让工作变得轻而易举,而且肯定会让你的生活轻松很多。因为工作流程的增加,学习起来也很棒。能够将这些技能融入到你的工作流程中,不仅可以更快,而且实际上感觉更有效率。

基于 BERT 的 DeepPavlov 文本分类模型

原文:https://towardsdatascience.com/the-bert-based-text-classification-models-of-deeppavlov-a85892f14d61?source=collection_archive---------11-----------------------

DeepPavlov 是一个对话式人工智能框架,包含了构建聊天机器人所需的所有组件。DeepPavlov 是在开源机器学习框架 TensorFlowKeras 之上开发的。它免费且易于使用。本文描述了如何使用 DeepPavlov 的基于 BERT 的模型。

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

关于伯特

BERT(Transformers 的双向编码器表示)[1]的发布是自然语言处理(NLP)社区去年最激动人心的事件。BERT 是一种基于转换器的技术,用于预训练语言表示,它可以在各种 NLP 任务中产生最先进的结果。伯特论文被计算语言学协会北美分会评为年度最佳长篇论文。

Google Research 发布了几个预训练的 BERT 模型,包括多语言、中文和英文的 BERT。关于这些预训练模型的更多细节可以在这里找到。除了已发布的模型,在 DeepPavlov,我们还为俄语培训了基于 BERT 的模型(RuBERT)。

RuBERT 基于多语言 BERT,并在俄语维基百科和新闻数据上进行训练。我们将 BERT 集成到三个下游任务中:文本分类、标注、问题回答。因此,我们在所有这些任务上都取得了重大进展。基于 DeepPavlov BERT 的模型可以在这里找到。

BERT 预处理器

DeepPavlov NLP 管道在 config/faq 文件夹下的单独配置文件中定义。配置文件由四个主要部分组成:数据集 _ 读取器数据集 _ 迭代器链接器训练器。你可以在这里阅读更多关于配置文件的结构。

所有基于 BERT 的模型的公共元素是配置文件的链接器部分中的BERT _ 预处理器块。未处理的文本应该被传递给 bert_preprocessor 用于标记化成子标记,用它们的索引编码子标记,并创建标记和段掩码。如果将类处理为流水线中的独热标签,则应将 one_hot_labels 设置为 truevocab_file 参数定义了 BERT 词汇文件。

{
    "in": [ "x" ],    
    "class_name": "bert_preprocessor",
    "do_lower_case": false,
    "vocab_file": "{DOWNLOADS_PATH}/bert_models/multi_cased_L-12_H-768_A-12/vocab.txt",
    "out": [ "bert_features" ]
}

文本分类的 BERT

DeepPavlov 通过使用预训练的 BERT,为 NLP 中最受欢迎的任务之一——文本分类问题——提供了一个易于使用的解决方案。人们可以使用几个经过预先训练的英语、多语言和 RuBERT 模型。对于文本分类情况,对应于[CLS]令牌的最终隐藏状态(即,变换器输出)被用作分类任务的聚合序列表示。

让我们在情感分析问题上演示基于 DeepPavlov BERT 的文本分类模型。它包括确定作者对某一特定主题的态度。这可以通过应用文本分类来实现。在这种情况下,类别可以是阴性、中性和阳性。

首先,安装模型的所有需求。

python -m deeppavlov install rusentiment_bert

rusentiment _ bert 模型基于多语言环境的 bert,其最大序列长度( max_seq_length )等于 64。

您可以使用命令行与模型进行交互。

python -m deeppavlov interact rusentiment_bert -dx::I like this game>> [‘positive’]

或者,您可以通过 Python 代码与模型进行交互。

您可以在自己的数据上训练基于 BERT 的文本分类模型。为此,更改配置文件的 dataset_reader 中的 data_path 参数,以及分别定义训练集和测试集文件的****traintest 参数。数据文件应该是 csv 格式,由 class_sep 分隔(默认为 class_sep= ",)。然后以同样的方式训练模型:

python -m deeppavlov train <config_file>

你可以在这里阅读更多关于基于 BERT 的文本分类模型。

参考文献

  1. https://arxiv.org/abs/1810.04805

开始深度学习的最佳书籍

原文:https://towardsdatascience.com/the-best-books-for-getting-started-with-deep-learning-df15fc6da9d1?source=collection_archive---------37-----------------------

如果你想跟上深度学习,你应该读哪些书?考虑从这三个中的一个或多个开始!

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

虽然人工神经网络的想法最初是在 20 世纪 40 年代提出的,第一个感知器是在 1958 年建造的,但深度学习领域真正开始腾飞是在过去十年里,在成功将神经网络应用于计算机视觉、自然语言处理和许多其他常见的机器学习任务方面取得了实质性突破。

但是深度学习是一个庞大且快速增长的领域。提高速度的最好方法是什么?没有哪本书会包含该领域的所有最新技术——为了跟上那些你开始阅读学术论文所需要的技术。但是在你这么做之前,你必须先在这个领域打好基础才能跟上。这里有三本书将为你提供理解与深度学习相关的最新论文所需的背景。

伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔的《深度学习

这是一个全面的,但容易理解的领域介绍。亚马逊页面清楚地表明了这本书的影响力,两位著名的数据科学家 Geoff Hinton 和 Yann LeCun,甚至 Elon Musk 都发表了评论!这可能是关于深度学习的最著名的书,如果你真的想成为一名数据科学家,你真的应该花时间去吸收。

在提供一些背景的简短介绍之后,“深度学习”被分成三个部分。第 1 部分介绍了足够的数学知识来帮助您完成本书的其余部分——线性代数、概率、信息论、数值计算和机器学习基础知识。如果你根本没有这些主题的背景知识,你可能会想就每个主题挑选一些更深入的书籍来填补你理解中的任何空白,但每个领域都有一个很好的总结,其中有足够的信息来帮助你完成本书后面的深度学习内容。

第 2 部分是本书的核心,带您了解深度学习系统的常见元素。它始于“深度前馈网络”(有时称为多层感知器),这是所有深度学习系统的核心。然后介绍正则化(避免过度适应训练数据)、优化(有效训练网络的技术)、卷积网络(针对具有已知网格状结构的数据进行优化)以及使用递归和递归网络的序列建模(针对序列数据)。

第 3 部分然后介绍了深度学习研究的一些关键领域——从线性因子模型和自动编码器到蒙特卡罗方法和深度生成模型。

这不是一本轻量级的书,它可能很难读,因为它完全专注于理论(书中没有源代码——这是对该领域的概念性介绍)。也就是说,一旦你开始用手指敲击键盘,使用 Tensorflow 或 Pytorch 创建模型,这是开始理解你将要处理的关键主题的好方法。也有可以免费在线

Aurélien Géron 的“使用 Scikit-Learn 的动手机器学习& Tensorflow

这本书与古德费勒的大书大不相同。在短短的 500 多页中,Géron 介绍了经典的机器学习和深度学习。每一部分都以代码开始,后面是你需要理解的解释。

如果你有编程的背景,你绝对应该试试这本书。到第 77 页,除了提供机器学习过程的概述,你将已经从头到尾实现了你的第一个机器学习项目!您将体验到整个数据科学工作流程,从构建问题、清理和可视化数据,一直到选择和训练模型,然后使用网格搜索和集成方法微调模型。然后,您将了解分类、训练模型、支持向量机、决策树、其他集成方法,以及使用主成分分析进行维度缩减。

如果你主要对深度学习感兴趣,当你建立 TensorFlow 并创建你的第一个图表时,好东西从第 229 页开始。还有一种实用的、代码优先的方法,在代码周围散布足够的理论,这样你就知道发生了什么。它涵盖了深度学习的关键理论概念,包括卷积神经网络、递归神经网络、自动编码器,甚至简单地涉及了强化学习。同时,它还涵盖了关键的实际问题,如跨设备和服务器分布张量流处理(对于大多数非平凡数据集的及时训练是必不可少的)。

要知道还有一个第二版应该是 2019 年 10 月出来的。鉴于自该书两年前首次出版以来深度学习的变化速度,等待新版本可能是值得的。

Francois Chollet 的《用 Python 进行深度学习

这本书提供了一个机器学习领域的实践,浓缩的介绍,介于“深度学习”的权威和深度与“用 Scikit-Learn & Tensorflow 实践机器学习”的实用简洁之间

它从定义人工智能、机器学习和深度学习开始。从那里,它提供了机器学习的简史,展示了决策树等传统机器学习模型如何与神经网络相关联。它还使用小代码片段提供了足够的线性代数和微积分背景,为本书的其余部分做好准备。

从那里,它介绍了 Keras——一个用于快速构建神经网络的复杂框架,并使用该库来实现二元和多类分类器,然后使用标准波士顿房价数据集进行回归。

然后,它将向您介绍一些关键概念的概述,如数据预处理、特征工程/学习、过拟合和欠拟合以及机器学习问题的工作流。从那里,它贯穿了解决计算机视觉和自然语言处理问题的实际工作的例子,介绍了一些概念,如循环神经网络(RNN 的),甚至长期短期记忆(LSTM 的)。

如果你决定尽快构建复杂的模型,并且只愿意读一本书,假设你已经熟悉 Python 编程,这可能就是你一直在寻找的书。

选择你自己的冒险

如果您只是想获得一些关于机器学习的实践经验,“用 Scikit-Learn & Tensorflow 实践机器学习”是一个极好的起点。它会让你在短短 500 多页的篇幅内练习构建经典和深度学习解决方案。

如果你准备好了更深入的深度学习体验,“用 Python 进行深度学习”是理想的选择。通过使用 Keras 而不是像 TensorFlow 这样的低级框架,它允许您快速构建复杂的模型。因为它只专注于深度学习,所以与 Géron 更通用的指南相比,它向您介绍了更广泛的概念。

如果你认真理解深度学习,你应该花时间通过“深度学习”来工作。它会给你提供一个坚实的基础,然后你应该从另外两本书里挑一本开始应用这个理论。当然,每本书都有一些其他书没有的金块,所以如果你有时间和兴趣,为什么不读完这三本书呢?它会回报你在该领域理解的深度和广度上所付出的努力。

最初发表于【https://flatironschool.com】

马修斯相关系数是你从未听说过的最好的分类标准

原文:https://towardsdatascience.com/the-best-classification-metric-youve-never-heard-of-the-matthews-correlation-coefficient-3bf50a2f3e9a?source=collection_archive---------2-----------------------

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

恭喜你!你已经建立了一个二进制分类器——一个使用 128 个 GPU 及其专用发电站的花哨的神经网络,或者一个在你的旧 ThinkPad 上运行的健壮的逻辑回归模型。你设计了模型,输入了数据;现在终于到了衡量分类器性能的时候了。

不要误会:ROC 曲线是比较模型的最佳选择。然而,标量指标在机器学习社区中仍然很受欢迎,其中四个最常见的是准确度召回精确度F1 分数。标量度量在教科书、网络文章、在线课程中无处不在,它们是大多数数据科学家熟悉的度量。但是几周前,我偶然发现了另一个用于二进制分类的标量度量:马修斯相关系数(MCC)。在我的“发现”之后,我四处询问,惊讶地发现这个领域的许多人并不熟悉这个分类标准。作为一个重生的信徒,我是来传播福音的!

让我们从“著名的四个”指标的快速概述开始,包括讨论为什么它们有时不是非常有用,甚至完全误导。接下来,我将介绍另一个指标。

提醒一下,在二元分类法中,我们有两类:所谓的正类和负类。使用混淆矩阵来讨论分类度量是有用的,我们在为我们的二元分类器设置分类阈值之后对混淆矩阵进行计数。(不熟悉混淆矩阵?查看我的另一篇帖子。混淆矩阵有 4 个值,对应于真实类别和预测类别的 4 种组合。下面是一个典型的混淆矩阵,TP,FP,FN,TN 代表四种组合。

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

Confusion Matrix

让我们看一个玩具例子:我们的数据是宠物的图像,或者是一只狗(🐶),或者一只猫(🐱).我们的分类器在每张照片中检测到一只宠物,我们想测量它的性能。

这是我们的照片分类器的混淆矩阵。我们一共 24 张照片,18+2= 20 狗狗照片,3+1= 4 猫咪照片。

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

Dogs are “positive”

精确度、召回率和 F1 分数

再回顾一下*,precision* 是所有检测到的阳性中真正阳性的比例,或者简称为 TP/(TP+FP)。在我们的例子中,狗照片是积极的类别,18+3 张被归类为狗的照片中有 18 张实际上包含狗。因此,精度是 18/21=86%。召回是被正确分类的真阳性的数量(TP/(TP+FN))。从上面的矩阵很容易看出有 20 个真阳性,其中 18 个被成功检测到。因此,召回率为 18/(18+2),即 90%。

最后,F1 分数是精确度和召回率的调和平均值。这算起来有 88%。奇妙的分类器,对吧?沉住气。再看一下矩阵,特别是猫照片的分类。只有 1/4 的猫照片被成功检测到。而且,被归类为猫的 3 张照片中,有 2 张其实是狗。那么为什么 F1 的分数这么高呢?

精确度和召回率(以及 F1 分数,它是两者的函数)认为一个类,正面类,是我们感兴趣的类。他们只使用混淆矩阵中的三个值:TP、FP 和 FN。第四个值——TN——没有在这些指标中使用。您可以在 TN 单元格中输入任何值—0、100、无穷大—精度、召回率和 F1 值都不会改变。

作为练习,现在让我们翻转混淆矩阵。让我们认为“猫”是一个积极的类,也就是我们感兴趣的类。爱猫人士,欢喜!这是新的混淆矩阵。请记住,这是与之前的完全相同的分类器。

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

Cats are “positive”

快速计算显示,现在准确率为 33%,召回率为 25%,F1 得分为 29% —哎呀!我们的分类器在给猫分类方面很糟糕。让我们继续下去,看看整体的准确性——也许这将是我们的救赎。话说回来,也许不是。

准确(性)

准确度是被正确分类的样本的比例。让我们再次看看我们最初的混淆矩阵:

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

总共有(TP+FP)+(FN+TN)=20+4= 24 个样本,TP+TN= 19 被正确分类。因此,准确率达到了惊人的 79%。但是这是相当误导的,因为尽管 90%的狗被准确地分类,但是对猫来说只有 25%。如果你平均 90%和 25%,你会得到 57.5%的平均准确率,这比分类器的准确率 79%低得多。原因是什么?在我们的数据集中,狗的样本比猫的样本多得多。班级不平衡。

为了查看类别不平衡如何影响准确性,想象现在不是 4 张猫照片,而是我们有 100 组这 4 张照片,总共 400 张照片。由于我们使用相同的分类器,400 张照片中的 100 张将被正确分类,300 张将被错误分类。下面是相应的混淆矩阵:

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

So many cats!

快速计算表明,现在的准确度低得多(100+18)/(400+20)=28%,因为猫现在是多数类。新的类别比例也会影响精度(但不会影响召回率——检查!),因此 F1 的分数。

马修斯救援相关系数

到目前为止,我们已经看到了经典度量的一些问题:准确性对类别不平衡很敏感;精确度、召回率和 F1 分数是不对称的。那么该怎么办呢?如果对这两个类都感兴趣,可以将二进制分类问题视为具有两个类的多类问题,然后计算相应的多类度量:微观或宏观平均精度、召回率和 F1 分数。(要了解更多关于多级指标的信息,请查看我的多级指标简化版系列、第一部分第二部分;另外,请看我关于 kappa 分数的帖子,也被称为科恩的 kappa 系数

对于二进制分类,还有另一个(也可以说是更优雅的)解决方案:将真实类和预测类视为两个(二进制)变量,并计算它们的相关系数(以类似于计算任何两个变量之间的相关系数的方式)。真实值和预测值之间的相关性越高,预测就越好。这是应用于分类器时的φ系数 (φ),改名为马修斯相关系数 ( MCC) 。计算 MCC 不是火箭科学:

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

MCC 的一些好的性质可以容易地从这个公式中导出:当分类器是完美的(FP = FN = 0)时,MCC 的值是 1,表示完美的正相关。相反,当分类器总是误分类(TP = TN = 0)时,我们得到的值为-1,代表完美的负相关(在这种情况下,您可以简单地反转分类器的结果,以获得理想的分类器)。事实上,MCC 值总是在-1 和 1 之间,0 表示分类器不比一个公平硬币的随机投掷好。MCC 也是完全对称的,所以没有哪个类比另一个更重要;如果你转换正负,你仍然会得到相同的值。

MCC 考虑混淆矩阵中的所有四个值,并且高值(接近 1)意味着两个类别都被很好地预测,即使一个类别被不成比例地欠(或过)代表。

我们现在都准备好了!让我们为我们的原始分类器计算 MCC。这是混淆矩阵:

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

输入数字,我们发现:

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

哎哟!0.17 的相关性表示预测类和真实类是弱相关的。我们知道确切的原因。我们的分类器不擅长给猫分类。

最后,您不需要编写自己的 MCC 函数——它的已经包含在 scikit-learn 的中。下面是验证上述计算的代码片段:

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

就是这样。那是邮件。您现在拥有了另一个指标。明智地使用它!

希望你觉得这篇文章有趣、有用并且容易理解。

喊出蒂林娜 。正是由于他和他非常有用和优雅的 简单变形金刚 库,我接触到了这个度量。

最佳预测技术或如何根据时间序列数据进行预测

原文:https://towardsdatascience.com/the-best-forecast-techniques-or-how-to-predict-from-time-series-data-967221811981?source=collection_archive---------2-----------------------

时间序列预测在工业或商业的许多分支中有许多应用。它允许预测产品需求(从而优化生产和仓库存储),预测销售收入(调整公司开支)或预测股票价格的未来值。在本文中,我将尝试目前的基本方法来实现这一目标。我们将从描述最流行的模型开始,然后转移到模型评估,这表明了给定预测问题的最佳方法。

工具

有很多种软件可以用于时间序列预测——使用 Python、R、Matlab 和许多其他语言都可以轻松完成。在我们这里使用的 R 中,也有相当多的软件包使预测变得更简单,预测预言家,或者 xts ,这里仅举几个例子。包的完整列表及其描述可在时间序列 CRAN 任务视图中找到。

时间序列模型

在进入复杂的时间序列模型之前,我们将讨论一些简单的模型,它们构成了进一步预测的基础。如果一个复杂的方法不能提供更好的结果,那么使用它们是没有意义的。

  1. 平均值-预测值等于时间序列的平均值。
  2. Naive 预测值等于时间序列的最后一个值。
  3. 季节性简单预测-给定季节的预测值等于该季节前一个完整周期的值,例如,2019 年 1 月的预测值等于 2018 年 1 月的时间序列值。

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

图:航空公司月度乘客基线预测。

时间序列线性模型(TSLM)只是一个线性回归模型,它根据一些预测因素(最常见的是线性趋势和季节性)来预测所需的值:

yt =a1x1,t+a2x2,t+…+anxn,t+b+et,

其中 xi,t 是一些预测值, aib 是要估计的回归系数。两个最常用的预测指标是趋势和季节性。前者只是对数据的线性趋势进行建模,只有趋势预测值的模型可以写成:

yt = at +b+et。

季节性预测因子是虚拟变量,表示进行预测的时期(如月、季度)。

指数平滑是另一种预测时间序列的有用方法。基本思想是将时间序列的未来值预测为过去观测值的加权平均值,其中权重随时间呈指数下降-观测值越老,对预测的影响越小。该方法可以扩展到包括趋势(霍尔特的方法,又名双指数平滑)或趋势和季节性(霍尔特-温特斯方法)。在这些模型中,趋势和季节性系数也被计算为一些表达式的加权平均值。指数平滑法是预测时间序列的有效方法。基本思想是将时间序列的未来值预测为过去观测值的加权平均值,其中权重随时间呈指数下降:

yt = a yt-1+a(1-a)yt-2+a(1-a)2yt-3+…,

其中 a(0,1)是应该被估计的平滑参数。上述方法可以扩展到包括趋势(霍尔特的方法,又名双指数平滑)或趋势和季节性(霍尔特-温特斯的方法,又名三指数平滑)。在这些模型中,趋势和季节性系数也被计算为一些表达式的加权平均值。尽管这个想法很简单,但是公式更复杂,我们就不讨论技术细节了。感兴趣的读者可以参考 Hyndman 和 Athanasopoulos 的关于时间序列预测的书[1]。

(自回归综合移动平均)模型使用完全不同的方法。自回归( AR )部分考虑了先前值对预测值的影响:

yt=a1yt-1+a2yt-2+et,

而移动平均( MA )模拟噪声对未来值的影响。

yt=et+b1et-1+b2et-2,

其中 et 为随机噪声项。在上面的例子中,每个噪声项影响三个连续的 yt 值。实际上,这种噪声术语可能反映了一些意外事件,例如影响股票市场的政治家声明。

实际上,这种噪声术语可能反映了一些意外事件,例如影响股票市场的政治家声明。

AR 和 MA 模型可以简单地合并成 ARMA 模型,如下所示:

yt = et+b1et-1+b2et-2+a1yt-1+a2yt-2。

ARIMA 的集成部分对应的是 ARMA 模型如何拟合的技术问题。基本上,只有让它们符合平稳的时间序列才有意义。使非平稳数据平稳化的一种方法是从中减去滞后值(差值)。这就是 ARIMA 在拟合 ARMA 之前所做的——它对数据进行多次差分,直到得到足够平稳的数据。

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

图航空公司月度旅客预测。

评测

模型选择几乎是每个机器学习项目都会涉及到的问题。一种方法是将数据分成训练集和测试集,并在训练集上学习模型后在测试集上计算一些误差度量。然而,这个过程不同于机器学习中经常使用的随机训练测试分割。有了时间序列数据,我们不能简单地选择随机点,而是将一些分割点之前的所有观察值放入训练集,其余的放入测试集。这反映了我们的模型在现实中的应用——我们从历史数据中学习,然后预测未来。

另一种方法是使用时间序列交叉验证(也称为滚动预测起源过程)——我们创建许多具有不同分割点的训练测试分割,然后在每个分割上评估模型。

自然出现的问题是,我们应该使用什么样的指标来判断模型的表现。最受欢迎的是

  • 平均绝对误差,它表明我们的预测平均与真实值相差多少,
  • 平均绝对百分比误差,表示预测值与真实值相差的百分比。

结论

我们已经解释了时间序列预测的基础知识。显然,每个问题都有自己的微妙之处,需要特殊的步骤(例如适当的数据准备,处理缺失值的方式,或者定义满足某些业务条件的评估指标),因此不可能得出一个通用的方法。我们刚刚介绍了预测背后的核心思想。

[1] Hyndman,R. J .,& Athanasopoulos,G. (2018)。预测:原理与实践。OTexts。

保存熊猫数据的最佳格式

原文:https://towardsdatascience.com/the-best-format-to-save-pandas-data-414dca023e0d?source=collection_archive---------0-----------------------

将 pandas 数据帧序列化到持久存储的各种方法的比较

当从事数据分析项目时,我通常使用Jupyter笔记本和一个很棒的pandas库来处理和移动我的数据。对于中等大小的数据集,这是一个非常简单的过程,您可以将其存储为纯文本文件,而不会有太多的开销。

但是,当数据集中的观察值很多时,保存数据和将数据加载回内存的过程会变得更慢,现在每个内核的重新启动都会占用您的时间,迫使您等待数据重新加载。因此,最终,CSV 文件或任何其他纯文本格式都失去了吸引力。

我们可以做得更好。有大量的二进制格式来存储磁盘上的数据,其中许多是pandas支持的。我们如何知道哪一个更适合我们的目的?嗯,我们可以尝试其中的几个,比较一下!这就是我在这篇文章中决定做的:通过几种方法将pandas.DataFrame保存到磁盘上,看看哪种方法在 I/O 速度、消耗的内存和磁盘空间方面更好。在这篇文章中,我将展示我的小基准测试的结果

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

Photo by Patrick Lindenberg on Unsplash

要比较的格式

我们将考虑以下存储数据的格式。

  • 纯文本 CSV —数据科学家的老朋友
  • pickle——Python 序列化事物的方式
  • message pack——它像 JSON,但是又快又小
  • HD F5—一种旨在存储和组织大量数据的文件格式
  • 羽化 —一种快速、轻量且易于使用的二进制文件格式,用于存储数据帧
  • Parquet—Apache Hadoop 的柱状存储格式

当你做一些数据分析工作时,它们都被广泛使用(可能除了 MessagePack)并且经常遇到。

选择的指标

为了找到存储笔记本会话之间数据的最佳缓冲格式,我选择了以下指标进行比较。

  • size_mb —带有序列化数据帧的文件的大小(Mb)
  • save_time —将数据帧保存到磁盘上所需的时间
  • load_time —将之前转储的数据帧加载到内存中所需的时间
  • save_ram_delta_mb —数据帧保存过程中的最大内存消耗增长
  • load_ram_delta_mb —数据帧加载过程中的最大内存消耗增长

请注意,当我们使用高效压缩的二进制数据格式(如 Parquet)时,最后两个指标变得非常重要。它们可以帮助我们估计加载序列化数据所需的 RAM 数量,此外还有数据本身的大小。我们将在接下来的章节中更详细地讨论这个问题。

基准

我决定在测试中使用合成数据集,以便更好地控制序列化的数据结构和属性。此外,我在基准测试中使用了两种不同的方法:(a)将生成的分类变量保存为字符串,以及(b)在执行任何 I/O 之前,将它们转换为pandas.Categorical数据类型。

函数generate_dataset展示了我是如何在基准测试中生成数据集的。

CSV 文件保存和加载的性能作为基准。五个随机生成的百万次观察的数据集被转储到 CSV 中,并被读回到内存中以获得平均指标。每种二进制格式都在 20 个随机生成的具有相同行数的数据集上进行了测试。数据集由 15 个数值特征和 15 个分类特征组成。您可以在这个资源库中找到带有基准测试功能的完整源代码。

(a)作为字符串的分类特征

下图显示了每种数据格式的平均 I/O 时间。一个有趣的观察是hdf显示了比csv更慢的加载速度,而其他二进制格式表现明显更好。印象最深的两个是featherparquet

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

保存数据和从磁盘读取数据时的内存开销如何?下一张图片显示hdf再次表现不佳。果然,csv不需要太多额外的内存来保存/加载纯文本字符串,而featherparquet彼此非常接近。

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

最后,让我们看看文件大小。这次parquet显示了一个令人印象深刻的结果,考虑到这种格式是为了高效存储大量数据而开发的,这并不奇怪。

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

(b)转换的分类特征

在上一节中,我们没有尝试有效地存储我们的分类特征,而是使用普通字符串。我们来修正这个疏漏吧!这次我们使用专用的pandas.Categorical类型,而不是普通的字符串。

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

看看它现在和纯文本csv相比是什么样子!现在所有的二进制格式都显示了它们的真正威力。基线远远落后,所以让我们把它去掉,以便更清楚地看到各种二进制格式之间的差异。

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

featherpickle显示出最佳的 I/O 速度,而hdf仍然显示出明显的开销。

现在是时候比较数据流程加载期间的内存消耗了。下面的条形图显示了我们之前提到的关于拼花地板格式的一个重要事实。

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

只要占用磁盘上的一点空间,就需要额外的资源来将数据解压缩回数据帧。您可能无法将文件加载到内存中,即使它需要永久存储磁盘上的中等容量。

最后一幅图显示了这些格式的文件大小。所有格式都显示出良好的效果,除了hdf仍然比其他格式需要更多的空间。

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

结论

正如我们的小测试所显示的,似乎feather格式是存储 Jupyter 会话之间数据的理想选择。它显示出很高的 I/O 速度,不会占用太多的磁盘内存,并且在加载回 RAM 时不需要任何拆包。

当然,这种比较并不意味着您应该在每种可能的情况下都使用这种格式。例如,feather格式预计不会用作长期文件存储。此外,它没有考虑到所有可能的情况,当其他格式可以显示他们最好的。然而,对于本文开头所述的目的来说,这似乎是一个极好的选择。

你对 Python 语言感兴趣吗?离不开机器学习?看过网上的其他东西吗?

那么你可能会对我的博客 感兴趣,我的博客 讨论了各种编程话题,并提供了我感兴趣的教科书和指南的链接。

最佳免费数据科学电子书

原文:https://towardsdatascience.com/the-best-free-data-science-ebooks-b671691e5231?source=collection_archive---------1-----------------------

有些包括代码和练习

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

被困在付费墙后面?给我发个 tuit 到我会 dm 你我的好友链接。

这 25 本书集中的每一本书都是由数据科学领导者、导师、指导者推荐给我的,或者是我在某个特定项目上向他们寻求帮助。希望对你有帮助!

Python 是我的首选编程语言,这也是为什么大多数书籍都是基于 Python 的编程,但是如果你有其他语言的其他书籍的推荐,请在评论中分享它们,或者 给我发一条 tweet ,我会添加它们。

数学和统计学

  • 统计学习导论作者:Gareth James、Daniela Witten、Trevor Hastie 和 Robert Tibshirani。

* [## 统计学习导论

加雷思·詹姆斯、丹妮拉·威滕、特雷弗·哈斯蒂和罗伯特·蒂布拉尼家中的应用程序

faculty.marshall.usc.edu](http://faculty.marshall.usc.edu/gareth-james/ISL/)

描述:本书提供了统计学习方法的介绍。它面向非数学科学领域的高年级本科生、硕士生和博士生。这本书还包含一些 R labs,详细解释了如何在现实生活中实施各种方法,应该是数据科学家的宝贵资源。

  • 艾伦·b·唐尼的《T21》

[## 想想统计 2e

艾伦·b·唐尼。下载 PDF 格式的这本书。代码示例和解决方案可从这个 GitHub 资源库获得…

greenteapress.com](https://greenteapress.com/wp/think-stats-2e/?source=post_page-----2d4f32793a51----------------------)

描述:Think Stats 强调你可以用来探索真实数据集和回答有趣问题的简单技术。这本书介绍了一个使用美国国立卫生研究院数据的案例研究。鼓励读者使用真实数据集进行项目工作。

  • 加雷斯·詹姆斯、丹妮拉·威滕、特雷弗·哈斯蒂和罗伯特·蒂布拉尼的《统计学习的要素》

[## 统计学习的要素:数据挖掘、推理和预测。第二版。

编辑描述

web.stanford.edu](https://web.stanford.edu/~hastie/ElemStatLearn/)

描述:虽然这种方法是统计学的,但重点是概念而不是数学。给出了许多例子,大量使用了彩色图形。对于统计学家和任何对科学或工业中的数据挖掘感兴趣的人来说,它应该是一个有价值的资源。这本书的覆盖面很广,从监督学习(预测)到非监督学习。许多主题包括神经网络、支持向量机、分类树和 boosting——这是任何书籍中第一次全面讨论这一主题。

  • 艾伦·b·唐尼使贝叶斯统计变得简单

[## 想想贝叶斯

贝叶斯统计变得简单。阅读 HTML 中的思维贝叶斯。顺序思考…

greenteapress.com](https://greenteapress.com/wp/think-bayes/)

描述:大多数关于贝叶斯统计的书籍使用数学符号,并以数学概念如微积分的形式提出观点。这本书用 Python 代码代替数学,用离散逼近代替连续数学。结果,数学书上的积分变成了求和,大多数概率分布的运算都是简单的循环。

  • 概率编程&黑客的贝叶斯方法作者:Cam Davidson-Pilon

[## 黑客的贝叶斯方法

贝叶斯方法是推理的自然方法,但它隐藏在慢…

camdavidsonpilon.github.io](http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/)

描述:面向黑客的贝叶斯方法旨在从计算/理解第一,数学第二的角度介绍贝叶斯推理。当然,作为一本入门书,我们也只能到此为止:一本入门书。对于受过数学训练的人来说,他们可能会对这篇文章产生的好奇心和其他用数学分析设计的文章产生兴趣。对于数学背景较少的爱好者或对数学不感兴趣而只是简单地练习贝叶斯方法的人来说,这篇文章应该是足够的和有趣的。

  • 布拉德利·埃夫隆和特雷弗·哈斯蒂的《计算机时代的统计推断》

[## 计算机时代的统计推断:算法、证据和数据科学

21 世纪见证了统计方法在范围和影响上惊人的扩张…

web.stanford.edu](http://web.stanford.edu/~hastie/CASI/)

描述:这本书带领我们经历了 20 世纪 50 年代引入电子计算后的数据分析革命。从经典推理理论开始——贝叶斯、频率主义者、费雪主义者——个别章节讨论了一系列有影响的主题:生存分析、逻辑回归、经验贝叶斯、折叠刀和自助、随机森林、神经网络、马尔可夫链蒙特卡罗、模型选择后的推理,等等。这本书将方法论和算法与统计推断相结合,并以对统计学和数据科学的未来方向的推测结束。

分析

  • Jeffrey Leek 的《数据分析风格的要素》

[## 数据分析风格的要素

想要分析数据的人的指南。免费!数据分析既是科学,也是艺术。这本书是…

leanpub.com](https://leanpub.com/datastyle)

描述:这本书关注的是数据分析的细节,这些细节有时会被传统的统计学课程和教科书遗漏。这本书作为数据科学或数据分析的入门课程的伴侣是有用的。对于负责阅读和评论数据分析的人来说,它也是一个有用的参考工具。

数据挖掘

  • Ron Zacharsk 的《数据挖掘程序员指南》

[## 古老的数字艺术

第 1 章:简介 2:推荐系统 3:基于项目的过滤 4:分类 5:关于分类的更多内容…

guidetodatamining.com](http://guidetodatamining.com/)

描述:如果你是一个对学习一点数据挖掘感兴趣的程序员,你可能会对初学者实践指南感兴趣。这就是这本书所提供的。本指南遵循边做边学的方法。

  • 社交媒体挖掘剑桥大学出版社

[## 下载图书

《社交媒体挖掘》一书由剑桥大学出版社于 2014 年出版。请查看剑桥大学的网页…

dmml.asu.edu](http://dmml.asu.edu/smm/book/)

描述:社交媒体挖掘集成了社交媒体、社交网络分析和数据挖掘,为学生、从业者、研究人员和项目经理了解社交媒体挖掘的基础和潜力提供了一个方便和连贯的平台。它介绍了由社交媒体数据产生的独特问题,并提出了网络分析和数据挖掘的基本概念,新出现的问题和有效的算法。适合用于先进的本科和研究生开始课程以及专业短期课程,文本包含不同难度的练习,以提高理解,并有助于在社交媒体挖掘的各种场景中应用概念,原则和方法。

数据科学的非技术性介绍

  • 数据科学的艺术Roger d . Peng 和 Elizabeth Matsui

[## 数据科学的艺术

这本书描述了分析数据的过程。作者有丰富的经验,既管理数据分析师…

leanpub.com](https://leanpub.com/artofdatascience)

描述:这本书描述了分析数据的过程。作者在管理数据分析师和进行他们自己的数据分析方面都有丰富的经验,这本书是他们经验的精华,适用于数据科学的从业者和管理者。

  • 数据科学手册作者:卡尔、马克斯、亨利和威尔

[## 数据科学手册

查看数据科学手册!帕兰蒂尔优步顶尖数据科学家的采访汇编…

www.thedatasciencehandbook.com](https://www.thedatasciencehandbook.com/)

描述:《数据科学手册》汇集了对 25 位杰出数据科学家的深度采访,他们在其中分享了自己的见解、故事和建议。

  • Roger D. Peng 和 Hilary Parker 关于数据科学的对话

[## 数据科学对话

罗杰·彭和希拉里·帕克在 2015 年创办了“不那么标准偏差”播客,专门讨论…

leanpub.com](https://leanpub.com/conversationsondatascience)

描述:Roger Peng 和 Hilary Parker 在 2015 年创建了“不那么标准偏差”播客,该播客致力于讨论学术界和工业界数据科学家的背景故事和日常生活。这本书收集了他们关于数据科学以及它在现实世界中如何工作(有时不工作)的许多对话。

面向数据科学的 Python 编程

  • Ashwin Pajankar 和 Sushant Garg 的 Python 面向对象编程(图片不匹配,但链接正确)

[## 用 Python 进行面向对象编程

这本书是 Python 3 面向对象编程的简单而权威的指南。其他类似的书…

leanpub.com](https://leanpub.com/PythonOOP)

描述:这本书是 Python 3 面向对象编程的简单而权威的指南。其他类似类型的书籍利用复杂的写作风格和例子向读者介绍 Python 3 中的 OOP。然而,这本书用简单的语言来解释概念。它面向已经了解 Python 的中级学习者。

  • 用 Python 自动化枯燥的东西作者:Al Sweigart

[## 用 Python 自动化枯燥的东西

完全初学者实用编程。作者阿尔·斯威加特。如果你曾经花了几个小时重命名文件或…

automatetheboringstuff.com](https://automatetheboringstuff.com/)

描述:你将学习如何使用 Python 编写程序,在几分钟内完成手工需要几个小时才能完成的事情——不需要任何编程经验。一旦你掌握了编程的基础知识

  • 杰克·范德普拉斯的《Python 数据科学手册》

[## Python 数据科学手册

对于许多研究人员来说,Python 是一流的工具,这主要是因为它的库用于存储、操作和…

shop.oreilly.com](http://shop.oreilly.com/product/0636920034919.do)

描述:熟悉阅读和编写 Python 代码的工作科学家和数据处理人员会发现这份全面的案头参考非常适合处理日常问题:操纵、转换和清理数据;可视化不同类型的数据;并使用数据建立统计或机器学习模型。很简单,这是 Python 中科学计算的必备参考。

  • 学 Python,破 Python 作者斯科特·格兰特

[## 学 Python,破 Python

学习 Python,Break Python 是一个关于 Python 编程语言的实践性介绍,是为那些已经…

learnpythonbreakpython.com](https://learnpythonbreakpython.com/)

简介:学习 Python,突破 Python 从温和的编程入门开始。慢慢地,通过例子和练习,我们引入了更复杂的程序元素,并展示了它们可以用在哪里,以及我们如何破坏它们,从而达到了一个舒适的水平。通过以这种方式积累知识,我们希望给予你一定程度的舒适,让你在尝试新事物和冒险时感到舒适;简而言之,我们希望你能熟练编程。

  • Steven Bird、Ewan Klein 和 Edward Loper 的《Python 的自然语言处理》

[## NLTK 图书

Steven Bird、Ewan Klein 和 Edward Loper 这本书的 NLTK 版本针对 Python 3 和 NLTK 3 进行了更新。第一个…

www.nltk.org](https://www.nltk.org/book/)

描述:这本书提供了自然语言处理的简单介绍,该领域支持多种语言技术,从预测文本和电子邮件过滤到自动摘要和翻译。通过它,您将学习如何编写处理大量非结构化文本的 Python 程序。您将使用广泛的语言数据结构访问丰富的注释数据集,并且您将理解用于分析书面交流的内容和结构的主要算法。

  • 生产中的数据科学本·G·韦伯著

[## 生产中的数据科学

从初创公司到数万亿美元的公司,数据科学在帮助组织最大化…

leanpub.com](https://leanpub.com/ProductionDataScience)

描述:从初创公司到价值数万亿美元的公司,数据科学在帮助组织最大化其数据价值方面发挥着重要作用。本书面向希望在多个云环境中构建数据产品并培养应用数据科学技能的分析从业者。

  • 数据驱动主持人希拉里·梅森,DJ 帕蒂尔

[## 数据驱动

成功处理数据不仅仅是把 Hadoop 放在你的机房里,或者雇佣一些疯狂的物理学家…

www.oreilly.com](https://www.oreilly.com/library/view/data-driven/9781491925454/)

描述:谷歌、LinkedIn 和脸书如何使用他们的数据的例子,以及沃尔玛、UPS 和其他组织在大数据出现之前如何利用这一资源的例子。无论你如何处理,建立数据文化是 21 世纪成功的关键。

机器学习

  • 用 Scikit-Learn 和 TensorFlow
    进行机器实践学习

[## ageron/handson-ml

这个项目旨在教你 python 中机器学习的基础。它包含示例代码和…

github.com](https://github.com/ageron/handson-ml)

描述:作者 Aurélien Géron 通过使用具体的示例、最小化理论和两个生产就绪的 Python 框架——scikit-learn 和 tensor flow——帮助您直观地理解构建智能系统的概念和工具。您将学习一系列技术,从简单的线性回归开始,逐步发展到深度神经网络。

  • 理解机器学习:从理论到算法

https://www . CSE . huji . AC . il/~ shais/understanding machine learning/index . html

描述:这些包括学习的计算复杂性以及凸性和稳定性概念的讨论;重要的算法范例包括随机梯度下降、神经网络和结构化输出学习;以及新兴的理论概念,如 PAC-Bayes 方法和基于压缩的界限。

  • 强化学习:理查德·萨顿
    和安德鲁·巴尔托
    的介绍

[## 强化学习:导论

从亚马逊购买勘误表和说明完整的 Pdf 格式,没有利润代码解决方案-发送您的解决方案中的一章,获得…

incompleteideas.net](http://incompleteideas.net/book/the-book.html)

描述:在《强化学习》中,理查德·萨顿和安德鲁·巴尔托对该领域的关键思想和算法提供了清晰而简单的描述。这第二版已经被显著地扩展和更新,提出新的主题和更新其他主题的范围。

  • 深度学习麻省理工学院出版社出版

[## 深度学习

深度学习教材是一个资源,旨在帮助学生和从业人员进入机器领域…

www.deeplearningbook.org](http://www.deeplearningbook.org/)

描述:深度学习教材是一种资源,旨在帮助学生和从业者进入一般的机器学习领域,特别是深度学习领域。

  • 机器学习向往 by deeplearning.ai

[## 机器学习向往- deeplearning.ai

人工智能正在改变众多行业。来自吴恩达的免费电子书《机器学习向往》教你如何…

www.deeplearning.ai](https://www.deeplearning.ai/machine-learning-yearning/)

描述:人工智能正在改变无数的行业。来自吴恩达的免费电子书《机器学习向往》教你如何构建机器学习项目。这本书的重点不是教你 ML 算法,而是如何让 ML 算法工作。

数据可视化

  • 马尔科姆·麦克莱恩的《D3 技巧和诀窍》

[## D3 技巧和窍门 v3.x

超过 600 页的使用 d3.js 的提示和技巧,D3 . js 是领先的 web 数据可视化工具之一。这是……

leanpub.com](https://leanpub.com/D3-Tips-and-Tricks)

描述:超过 600 页的使用 d3.js 的提示和技巧,D3 . js 是领先的 web 数据可视化工具之一。它旨在让你开始并推动你前进。包括 50 多个可下载的代码示例。

有没有另一本电子书必须在这个列表中?在评论里分享给我我会补充的!*

学生和教育工作者最好的免费笔记软件!—视频

原文:https://towardsdatascience.com/the-best-free-note-taking-software-for-students-and-educators-video-ce8366d18b55?source=collection_archive---------15-----------------------

Notion for Educators Video

问题是

我经常回想起我读完本科时学习有多差;在不理解讲师所说的任何内容的情况下做笔记,并一遍又一遍地重写笔记,希望其中一些内容能被理解。

如今,笔记软件的进步极大地改善了学生记录和组织笔记的方式。然而,教育工作者仍然经常以“讲座内容到个人笔记”的静态格式提供内容。人们认为,理解和运用好的学习理念,剖析教育者提供的内容,是每个学生的个人责任。但是这是为什么,为什么教育工作者(总的来说)没有改变他们提供课程的媒介?

在与研究同事讨论过这个问题后,似乎有几个基本问题促使他做出改变:

  1. 向学生提供内容的网站是有限的(例如黑板),并且只能允许静态的。pdf 文件
  2. 学生的参与度很低,因此对教育工作者来说益处并不明显
  3. 它与作为大学课程基本组成部分的授课形式相一致

然而,我认为现在比以往任何时候都有机会更新向学生提供内容的格式基准。特别是依赖于代码/编程的课程,它们将从更具互动性的学习过程中受益。

概念总结

为此,我想介绍一下概念,这是一个笔记应用程序,它集成了许多功能,使其成为这些问题的强大解决方案。此外,个人计划现在对学生和教育工作者完全免费,而其他解决方案可能很难证明其成本合理或为商业团队设计。

简而言之,主要优势是:

  1. 用 LaTeX(数学)和代码块做笔记
  2. 任务和项目管理
  3. 知识库可以用表格建立,并可以在线参考
  4. 导出到。pdf 和。csv 文件
  5. 带通知的桌面和移动应用程序
  6. 每页上的讨论和评论
  7. 嵌入功能的综合列表

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

上面的演示视频更详细地展示了这些为学生构建内容的功能。这是对前一篇文章“ 数据科学研究项目的最佳笔记/任务管理应用 ”的直接跟进,该文章展示了如何将概念用于个人项目。

我还应该指出,我与概念的创造者没有任何关系,我只是对教育和新工具充满热情。

如果您想注册试用该应用程序,请使用下面的链接:

[## 为您的笔记、任务、维基和数据库提供一体化的工作空间——概念

注册时获得 10 美元的信用点数

www . opinion . so](https://www.notion.so/?r=d322470fd7fc4f61a29918c476cc9c81) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

谢谢

英国货币

最周密的计划

原文:https://towardsdatascience.com/the-best-laid-plans-7eb3a22ffbc1?source=collection_archive---------21-----------------------

设计和数据可视化

想象也门的隐形战争

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

Commemorative stamp, Mutawakkilite Kingdom of Yemen, 1965

此片改编自我于 2019 年 6 月 20 日在微软反应堆伦敦举行的可视化数据会议上发表的一篇 演讲

我经历了一次奇怪的数据新闻之旅。事情大概是这样的——五年前,我被盒子包围着,结束了我作为 Embarq 的设计顾问的角色,Embarq 是班加罗尔的一个可持续交通和研究实验室。四年前,我在温莎城堡看女王私人收藏的波斯手稿——我暂时离开了设计行业,在库陶尔德攻读艺术史硕士学位,专攻波斯艺术。三年前,我住在一个手提箱里,开始了我在伦敦的第一份工作,在小型媒体基金会(Small Media Foundation)工作,这是一家与中东民间社会组织合作的媒体和研究实验室。两年前——更多的箱子,更多的手提箱,更多的移动——但现在我正在贝鲁特帮助组织一个 DATA4CHANGE 工作坊,为那些不熟悉 DATA4CHANGE 的人准备——data 4 change 是一个工作坊,它将设计师和开发者以及人权组织聚集在一起,发起宣传活动。最后,我们来到一年前,当时我正在完成也门和平项目和 DATA4CHANGE 的一个项目,致力于可视化也门的隐形战争 ,这是我们去年 12 月启动的项目。这样一来,我就可以直接进入项目,了解相关的过程,它是如何发展的,以及最终的结果

该项目的最初想法来自于 2016 年贝鲁特的 DATA4CHANGE 研讨会,我作为参与者参加了该研讨会。

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

Cover image

仅提供一些背景信息——2015 年,也门总统在一场政变中被推翻,自那以来,由沙特阿拉伯领导的国际联盟支持的政权与美国政府支持的北也门激进组织之间一直在进行内战。如果你真的想要所有的细节,你可以访问项目链接——正如我希望解释的那样,我们已经做了一些非常好的事情,使数据更容易访问。

我们使用了一个数据集,记录了也门的空袭数量以及目标地点的类型、地点和时间。

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

A screen grab of the data we were working with

我们在 2016 年研讨会期间使用的初始数据集记录了从 2015 年 3 月到 2016 年 8 月的空袭,这是整个国家近 18 个月的无休止空袭。最初,这个项目进展相当缓慢。在 2016 年的研讨会之后,我们在 2017 年底重启了该项目。该项目旨在与带来数据集的原始组织合作,创建一个互动故事,描绘也门三个主要城市的空袭地图和对居民的视频采访。

但是这个项目经历了许多实施过程。2018 年 3 月,在恢复该项目六个月后,我们的主要合作伙伴——一对来自也门的记者和电影制作人——由于个人原因不得不退出。这对他们来说是不幸的,对我们来说是令人沮丧的。这意味着要么取消项目。又来了。或者迅速找到一个新的合作伙伴,重新调整他们的时间表和目标,同时确保已经完成的工作没有浪费,同时仍然给他们足够的空间来发挥创造性的领导作用。没什么大不了的。

令人欣慰的是,离职的组织在电子邮件和半提及中留下了一些线索,让我们相当容易地找到了新的合作伙伴。

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

2018 年 9 月,我们与一家总部位于 DC 的倡导组织合作,该组织专门致力于也门事务和美也关系。这是幸运的一击!这确实意味着尽管整个项目的想法改变了。。。

与此同时,我经历了十几轮的数据更新、整理和清理。在早期,我在管理项目时努力跟上快速更新的数据集。

我们得到的第一个数据集记录了 2015 年 3 月至 2016 年 8 月的空袭。当我们在 2017 年底重新启动该项目时,数据集已经增长到 15846 行,并详细列出了从 2015 年 3 月到 2017 年 12 月的空袭,这是 28 个月的空袭数据。然后我们得到了另一个更新的版本,记录了截至 2018 年 3 月的空袭-这意味着我们正在处理 33 个月的空袭数据-这几乎是三年,你可以在那段时间开始并完成你的本科学位-可悲的是,冲突仍在继续。随着项目工作的进展,数据集再次更新,以包括截至 2018 年 8 月的记录——所以这又是八个月——这是一个实习!2018 年 12 月,当我们发布这个故事时,数据有 18714 行,记录了截至 2018 年 11 月 5 日的空袭。这意味着最终的故事比实时数据少了大约六周。

为了补充数据集,我和一些同事搜集了各省的地理空间坐标以及最近记录的人口。这意味着我们现在可以在地图上找到三年来的空袭数据。老实说,我们当时可能已经停止了……这本身就是一个令人信服的故事。但是我们没有。

然后我定位并添加了被轰炸的特定地点的卫星图像。

这是一个重要的视觉效果,提醒我们和用户,数据集中的数字是真实的人和真实的地方。

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

Sana’a International Airport

在从事这项工作并于 2018 年 9 月与也门和平项目合作的同时,他们告诉我们,他们希望在参众两院提交要求结束空袭行动或至少结束美国参与其中的立法之前,将此作为游说和告知 DC 代表、读者和关键决策者的工具。这些动议将在 11 月至 1 月间提出。我们很快就收到了行动号召和迫在眉睫的最后期限!

错误的开始和起伏确保了在这个阶段我没有这个项目的视觉形象,或者任何实质性的设计工作,更不用说精确的可视化了。

如果你还没有注意到的话,我努力成为事实上的数据集专家,管理项目,同时作为设计者并致力于数据可视化。作为一名设计师,我习惯以“你知道什么是很酷的尝试”开始,等待项目经理说“是的,让我们尝试一下,但是它是可扩展的吗,我们能在时间表内完成吗? “你为什么用那种字体”…我不得不与自己进行太多这样的对话,最终有点累了——所以如果你认为这篇文章可能是关于我展示一些超级酷的高科技可视化,我很抱歉给你带来了坏消息——主要是我抱怨这有多困难。

所以在这个阶段,我有一个选定的格式——一个长篇故事,我有一个干净和最新的数据集,我有一个行动呼吁,要求其读者写信给他们的当地代表,要求就立法采取行动,这显然是一个截止日期,但我仍然不完全相信我迄今为止尝试的数据可视化,以及它们是否符合我们决定的方向。

我最初摆弄原始图形——一个开源数据可视化框架——我们有一些很有潜力的有趣的输出。

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

Bee swarm graph

我用蜂群图绘制了按目标分类的空袭。我非常喜欢这个画面,以及如何用密集的点来表示空袭的数量。

然后,我用桑基图显示空袭次数多的省份,以及哪些地点成为目标。稍加努力,就能写出一个故事,但这不是最鼓舞人心的选择。

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

Sankey graph

我也在努力嵌入这些视觉化的东西,非常想念隐藏在桑基图的每一条线或蜜蜂群的每一个点下的额外信息。它也非常慢,数据集太重,对于这个平台来说不是一个可行的选择。另外,每次数据集添加新行时,我几乎不能更新它。

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

这时我想起了 Tableau——我几乎没用过它——我有点害怕用它!这是我第一次认真地使用 Tableau 这样的野兽,有一个陡峭的学习曲线。更糟糕的是,我有一个很紧的截止日期——在方向改变后,整个项目必须在 3 个月内启动并运行——必须在关键立法到达参议院之前完成。

我很快就爱上了 Tableau。对于我们需要用数据集实现的视觉效果来说,这是绝对完美的。不透明的界面成了我的朋友,不断登录以保存文件,当然我可以习惯这一点——我现在所要做的就是快速创建一个可视化,可能有助于游说参议员和众议员结束也门战争。没有压力。

我非常想试试我们收集的坐标数据。在最初努力将其与主数据集合并后…

也门有 21 个省,每个省至少有五种不同的拼法。慢慢地,但肯定地,我设法用正确的坐标排列好一切,并将数据集导入 Tableau。

现在我想要一张地图。因此,在导入数据后,摆弄一些设置,我想象的最基本的设置,并设法创建一个三年空袭数据的回放。颜色的强度是最近的……变成白色,圆圈的大小代表在那个特定位置的撞击次数。

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

Screen grab of the map with air strike data being played

然后,我尝试了一个更经典的时间线,其中每个点都是按目标类型分类的空袭次数,并用颜色编码。

看到它变得栩栩如生——能够与数据互动——真是太棒了,但每次我想起那个数据集是关于什么的,我都感到害怕。

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

然后,我用一个树状图来查看哪种类型的建筑或地区遭到了最多的空袭。确切地告诉我这一点是很好的,但是提供不充分的信息会占用很多空间。你还必须记住,许多空袭目标是未知的,当你在图表中看到未知的时候,兴趣就会减弱…但是未知目标的数量如此之多,你肯定不能忽视它们,这是一个很好的平衡…

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

按照叙述的方式,我们有理由创建一个网站,在那里可以快速访问大量数据——一个页面可以提供数据集的概览,同时还可以提供细节——这样的东西在与参议员、众议员和其他官员交谈时会很有用。我们真的需要能够快速有效地传达我们的信息——这就是我决定创建一个仪表板的原因。

这个仪表板可以连接到一个动态表,并不断更新-解决快速增长的数据集的问题。它可以快速地给人们提供具体的数字,比如目标、空袭次数以及这些年的进展。它还可以用来创作几十个故事,任何人都可以从这里开始寻找有关也门空袭的信息。

为了到达仪表板,我回到了时间线——第一个版本是正确的,但是我把它进一步分解了。

我创建了一个精细的时间表,其中每一天都是可见的,每个方块的大小代表当天空袭的次数,颜色表示类别的类型。

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

The granular timeline

我决定将仪表板嵌入到文章的末尾——如果有人正在阅读这个故事,他们可以从导航中选择它,或者如果他们没有失去兴趣,他们会自然得到它。如果它被用来游说特定的个人,那么即使是正确视图的屏幕截图也会有助于激起某人的兴趣。

在叙事本身,我想包括较小的咬大小的图形。这些视觉化很大程度上是两页的内容,我将它们提取出来并放入 excel,然后允许我进行两次视觉化。

第一份记录了美国出售的武器和装备的种类以及由此带来的经济收益。

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

这一画面很重要,它显示了也门冲突对美国经济有多么有利可图,这不仅仅是对联盟领导人天真的错误信任。

第二个互动图形更详细地显示了 2015 年至 2018 年对民用场所的空袭次数,显示了空袭异常激烈的时期。

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

有了主内容中的这两个迷你可视化,我可以返回到仪表板。

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

在仪表盘中,我添加了一个摘要数字,增加了一些选项,用户可以选择年份,按类别过滤,悬停并获得详细信息,在获得概览的同时突出显示特定事件,然后最后添加注释,虽然不是最优雅的,但足以添加更多背景信息,突出显示媒体报道的特定事件和时刻,或者关于也门冲突的关键决策是何时做出的。

一旦我们有了一个可用的仪表盘,我就制作了一个带有相关断点的移动和平板版本的可视化。

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

我们有一个可行的故事!!

这个故事是建立在速记的基础上的,一旦我设法获得足够的数据,视觉语言开始成形。

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

这个故事很大程度上是关于美国对也门的政策,非常详细地描述了视觉语言、图形、颜色、字体和照片…

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

就竞选以来形势的发展而言:2018 年 12 月,参议院通过了一项重要决议,限制美国对沙特联盟的支持——这项决议于今年 4 月在众议院获得通过,但不幸的是,也许可以预见的是,特朗普阻止了这项决议。

这将是一项正在进行的工作。尤其是在冲突持续的时候。

您可以在 tableau 网站这里查看仪表盘,在这里查看故事

如果有人想访问数据或工作簿,请随时联系!

数据科学研究项目的最佳笔记/任务管理器应用程序

原文:https://towardsdatascience.com/the-best-note-taking-task-manager-app-for-data-science-research-projects-ddc82afaa509?source=collection_archive---------6-----------------------

概念 起初看起来像任何其他笔记应用程序,但很快就变得很明显,其中的一些功能使它脱颖而出。

这是我发现的第一款将笔记、任务管理和项目规划以惊人的方式结合在一起的应用。最重要的是,没有任何功能被锁定在付费墙后面。我仍在学习使用所有的功能,但我想展示它是如何帮助我改进我的研究项目的。

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

Source: Verge

到目前为止我发现的最好的特性:

  • 支持 LaTeX 数学和代码单元格的 Markdown 注释
  • 可用于任务管理、会议日志和文件存档
  • 我见过的做这么多事情的最好的定价模型
  • 文献综述/参考表格的多种格式
  • 页面和内容可以链接,这是惊人的跟踪参考和来源!

只是要注意,我没有任何方式附属于该应用程序,只是有人对一些独特的功能感到兴奋。除了用文字展示之外,我还通过视频展示了这一点。我是第一次以这种方式展示,所以感谢任何反馈。 显示的模板可在此处公开获取。

关键特征

1.减价说明

不同于一些为作者创建的编辑器,笔记可以用 markdown 编写,这包括 LaTeX math 和 code 单元格。其他嵌入也可以包括谷歌地图,推文,Github 回购,视频和更多!

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

Markdown Page Demo

2.任务管理

检查表可用于跟踪项目中要完成的任务。我还利用了一个存档,其中保存了所有已完成的任务,以便在稍后召开回顾会议时,我可以轻松演示我完成的每项任务。

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

Task Management

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

Archiving Tasks

3.文献综述、参考文献和链接页面

concept 最好的特性之一是,我可以用它来跟踪我对一个项目的各种格式的所有引用。我总是发现一个简单的表格(例如使用 Excel)可能是有效的,但有时它有助于以董事会的方式查看它。

此外,我可以添加标签,用于跟踪论文的主题、提交的出版物和参考类型(如文章、书籍、链接等)。然后,这些标签可以用于过滤或排序,这可以更容易地找到我需要的特定部分的资源。

最后,通过给每个引用一个“引用标签”,我们可以在其他地方的文本中链接这些引用。这个链接是内嵌的,但也可以打开来显示参考的完整信息,包括我做的任何笔记。这可以用于我创建的任何内容,包括其他笔记、会议和文件。

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

Reference Table

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

Reference as Gallery View

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

Inline Reference with Page Link

这些仅仅是使 idea 脱颖而出的主要特性,但还有更多,我建议你亲自尝试一下。

希望对你有用!

谢谢

英国货币

更好的推荐系统的最佳工具

原文:https://towardsdatascience.com/the-best-tool-for-better-recommendations-systems-e57142b45f11?source=collection_archive---------25-----------------------

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

奇异值分解背后的直觉:一种基于简单英语主成分分析的工具,无需数学

介绍

在介绍推荐系统的前一篇文章中,我们看到这个工具在过去的一年中有了巨大的发展。成为维护网站或应用程序受众参与和使用其服务的工具。通常,推荐系统使用我们以前的活动为我们做出具体的推荐(这被称为基于内容的过滤)。现在,如果我们第一次访问一个电子商务,它对我们一无所知,那么它怎么能给我们推荐呢?最基本的解决方案是推荐最畅销的产品、最新发布的产品、经典产品,例如,如果我们谈论的是电影或书籍,或者我们甚至可以推荐给企业带来最大利润的产品。

然而,这种方法已经过时了,因为许多电子商务已经开始使用基于协同过滤的推荐系统。让我们记住它是如何工作的:假设我喜欢以下几本书:《盲人刺客》和《莫斯科的绅士》。我的朋友马蒂亚斯也喜欢《盲人刺客》和《莫斯科绅士》,但也喜欢《小龙虾歌唱的地方》。看来我们俩有相同的兴趣。所以你可能会肯定我也喜欢《小龙虾歌唱的地方》,尽管我没有读过。

此外,在协同过滤(CF)领域,我们可以实现用户-用户或项目-项目协同过滤。关于这两种技术的更多细节,它们背后的数学逻辑以及如何在机器学习中实现它们,可以在我以前的一篇文章中找到,但简而言之,下图总结了这两种工具:

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

  • 用户-用户 CF :这是我们之前例子的情况。因为马蒂亚斯和我都喜欢《盲人刺客》和《莫斯科绅士》,我们可以推断我也会喜欢马蒂亚斯读的第三本书:《小龙虾歌唱的地方》
  • Item-item CF :在这种情况下,算法会再次向我推荐《小龙虾歌唱的地方》,但只是因为马蒂亚斯、维多利亚和我,我们三个人都喜欢《盲刺客》,而《小龙虾歌唱的地方》是马蒂亚斯和维多利亚都喜欢的唯一一部电影,但我不喜欢。

协同过滤的问题是

开发一个基于用户-用户或项目-项目协同过滤的推荐系统是很棒的,并且肯定是为我们的用户提供更好的建议的第一步。然而,这两种工具都有其局限性,这也是事实。

如果要进行用户-用户 CF,考虑公司的用户数量和项目将非常重要。许多商业模式意味着拥有比商品多得多的用户,在大多数情况下,这些用户只会购买一些可用的产品。想想你自己:你买过多少亚马逊的产品?可能只是其中很小的一部分。现在想象成千上万像你一样的用户在一个用户和产品的矩阵中…这听起来像是很多空白,对吗?这就是所谓的数据稀疏性,对于推荐系统来说,这可能是一个严重的问题。正如《T2 网络技术和应用》一书所解释的:

数据稀疏可能导致两个用户之间的共同评价项目数量少或没有,导致相似性信息不可靠或不可用,进而导致推荐质量差。然而,这种分析过程往往没有经过实验验证。

在一个有 100 个客户和 100 种产品的企业中,评论或购买任何产品的客户的稀疏矩阵甚至可以是这样的:

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

想象一下,与每个用户向量一起工作来找到它们的相似性…并没有真正的帮助,对吗?

另一方面,使用项目-项目 CF 时,考虑业务的性质是很重要的。对于电子商务,选择这个选项可能是好的。事实上,亚马逊自己开发了一个使用项目-项目 CF 的推荐系统,声称它比用户-用户方法更快,并且它可以帮助人们找到他们感兴趣的产品。然而,对于一个娱乐平台,如网飞或 Spotify,它可能不是一个非常三叶草的选择,因为项目-项目 CF 往往会给出更明显的建议,它缺乏大胆的建议和预测。

在这种情况下,两种选择都有其局限性,一些更复杂的工具开始流行起来。在接下来的章节中,我们将会看到其中的一个。

奇异值分解

奇异值分解是使用主成分分析 (PCA)的一种方式,根据维基百科,这是一种非常复杂的统计程序,它使用正交变换将一组可能相关变量的观察值转换为一组称为主成分的线性不相关变量的值。这种变换的定义方式是,第一个主分量具有最大的可能方差(即,尽可能多地解释数据中的可变性),而每个后续分量在与前面分量正交的约束下又具有最大的可能方差。得到的向量(每个向量都是变量的线性组合,并且包含与原始数据相同数量的观察值)是不相关的正交基集。

PCA 背后的本质数学实际上非常复杂,不幸的是,这超出了本文的范围(也可能超出了我用简单英语解释的范围)。然而,如果前一段听起来像胡言乱语,不要惊慌。希望接下来的几行能让你更好地理解奇异值分解是如何工作的,即使你没有经历 PCA 的所有数学运算。

奇异值分解可以方便地处理稀疏性,不仅在处理推荐系统时,而且在任何使用充满缺失数据的大型矩阵的 ML 工具中,因为 PCA 可以将我们的原始数据集减少到一个更小的特征集,该特征集描述了我们数据中的方差。因此,奇异值分解将矩阵分解成如下三个分量:

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

通常,这种分解的 U 和 V 元素代表了人类已经学会与我们试图推荐的任何东西相关联的特征。例如,请允许我回到我们之前的书籍示例,让我们再添加几个标题:

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

用户的潜在特征

这个矩阵是 U,它描述了每个用户与我们创造的潜在特征的接近程度。例如,我们在用户评级矩阵中使用主成分分析来查找“用户类型”,我们可以翻转矩阵并运行主成分分析来查找典型书籍类型的简介,转置我们的原始矩阵,并获得如下结果:

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

项目中的潜在特征

应用主成分分析后得到的矩阵将会是 v,让我们回想一下:我们的主成分分析对书籍一无所知,但它可以对书籍进行分类。正如我们之前看到的,我们最初的用户和项目矩阵是潜在特征的 U 和 V 矩阵的结果。所以如果我们有 M 和 U,我们可以重建 R,用这种方式来填补我们没有的评级的空白。这被称为矩阵分解

当然,这一切还涉及到更多的概念。基础数学中的关键概念是特征向量和特征值。然而,即使对此一无所知,一旦我们有了 U 和 V,我们就可以预测任何用户-项目组合的评分,只需将 U 中对应的用户行与 V 中对应的项目列相乘即可。最漂亮和最令人兴奋的是,我们甚至不需要担心计算,因为当在 Python 中使用奇异值分解时,我们正在做的是一次找到我们之前看到的方程的所有组成部分。因此,SVM 正在做的是对用户和商品都应用主成分分析,并给我们矩阵,我们需要得到我们想要的评级。

显然,我们不能用缺失值做矩阵运算,对吗?因此,我们需要一个完整的表来使用主成分分析。一开始,人们只是开始用平均值或其他合理的值来填充缺失的单元格。然而,有一种更好的方法。假设以下场景:

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

一个典型的矩阵,由于缺乏审查而缺少值

知道维多利亚对“智人”的评级可以作为乘法的结果找到,我们的支持向量机算法将把这视为优化问题,当我们试图为那些不完整的行和列找到最佳可能值时,试图最小化误差。

所有这些的 Python 实现并不像它的解释听起来那么混乱。你可以使用 surprise 很容易地做到这一点,这是推荐系统的一个特定包。然而,你可以用它做很多事情,不幸的是,这篇文章已经离开了我,所以我将不得不把它留到另一个场合。

同时,如果你有兴趣看到所有这些的应用程序,请记住我的 GitHub 帐户有几个关于这些和其他东西的存储库。如果你愿意,欢迎在 GitHub 和 Medium 上关注我。另外,如果你想直接在你的邮箱里收到我的最新文章,只需 订阅我的简讯 😃

一如既往的感谢阅读!特别感谢我在整篇文章中使用的以下信息来源:

偏差-方差权衡:解释与演示

原文:https://towardsdatascience.com/the-bias-variance-trade-off-explanation-and-demo-8f462f8d6326?source=collection_archive---------9-----------------------

偏差-方差权衡是数据科学和机器学习领域中一个基本但重要的概念。通常,我们会遇到这样的陈述:“较简单的模型具有高偏差和低方差,而较复杂或复杂的模型具有低偏差和高方差”或“高偏差导致欠拟合,高方差导致过拟合”。但是偏差和方差实际上意味着什么,它们与模型的准确性和性能有什么关系?

在本文中,我将解释偏差和方差的直观和数学含义,展示偏差、方差和模型性能之间的数学关系,最后通过一个小示例演示改变模型复杂性对偏差和方差的影响。

开始时的假设

偏差和方差是统计学术语,可用于各种情况。然而,在本文中,它们将根据试图拟合/解释/估计一些未知数据分布的估计器来讨论。

在我们深入研究估计量的偏差和方差之前,让我们做如下假设

  1. 有一个数据发生器,Y = f(X) + ϵ,它产生数据(x,y),其中ϵ是添加的随机高斯噪声,以原点为中心,有一些标准偏差σ,即 E[ϵ] = 0,Var(ϵ) = σ。请注意,数据可以从生成器中重复采样,产生不同的样本集,如 Xᵢ、Yᵢ和 iᵗʰ迭代。
  2. 我们正在尝试使用一个估计器来估计(拟合曲线)我们从生成器获得的样本集。估计量通常是一类模型,如岭回归、决策树或支持向量回归等。一类模型可以表示为 g(X/θ),其中θ是参数。对于不同的θ值,我们在该特定类别的模型中得到不同的模型,并且我们尝试改变θ以找到最适合我们的样本集的模型。

偏差和方差的含义

估计值的偏差是其估计值和数据中真实值之间的“预期”差异。直观地说,它是估计量与估计量试图估计的实际数据点的“接近”(或远离)程度的度量。请注意,我使用了“预期”一词,这意味着我们正在仔细考虑这种差异,请记住,我们将无限次地进行这个模型训练实验。这些模型中的每一个都将在真实数据的不同样本集 Xᵢ、Yᵢ上训练,导致它们的参数采用不同的θ值,以试图最好地解释/拟合/估计该特定样本。

最终,对于某个测试点 xₒ,这个估计量 g(X)的偏差在数学上可以表示为

bias[g(xₒ)]=e[g(xₒ)]-f(xₒ)

它实际上是估计量在该点的期望值和在该点的真实值之差。

自然地,当一个不同的数据样本集被抛向它时,如果一个估计量没有摆动或改变太多,它将在一个测试点具有高偏差(因此总体上也在极限内)。当估计器没有足够的“能力”来充分拟合固有的数据生成函数时,通常会出现这种情况。因此,与更复杂的模型相比,更简单的模型具有更高的偏差。

保持这些想法,我们将在文章的后面再次回到它们。现在,这里有一个数字来帮助巩固他们。

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

Linear Regression fits for two different samples of size 8. Notice how curve has not changed too much although the sample sets are totally disjoint

估计值的方差是一个模型的估计值与估计值的“预期”值之间的平方差的“预期”值(在估计值的所有模型上)。太复杂,一次看不懂?让我们把那个句子分解一下…

假设我们使用不同的数据样本集来训练∞模型。然后在测试点 xₒ,所有这些模型的期望值就是 E[g(xₒ)].此外,对于所有模型中的任何一个模型,该模型在该点的估计是 g(xₒ).这两者的区别可以写成 g(xₒ)——e[g(xₒ)].方差是所有模型中该距离平方的期望值。因此,在测试点 xₒ,估计量的方差可以用数学方法表示为

var[g(xₒ)]=e[(g(xₒ)——e[g(xₒ)]

根据这个等式,我们可以说,当估计器在任何数据点“变化”或改变其估计值很多时,当它在数据的不同样本集上被训练时,估计器具有高方差。另一种说法是,估计器足够灵活/复杂,或者具有很高的“能力”来完美地拟合/解释/估计提供给它的训练样本集,因此它在其他点的值波动很大。

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

Support Vector Regressor fits for the same sample sets. Notice how the curve changed drastically in this case. SVR is a high capacity estimator compared to Linear Regression hence higher variance

请注意,这种对高方差含义的解释与具有高偏差的估计量的解释完全相反。这意味着估计量的偏差和方差是互补的,即偏差较大的估计量变化较小(方差较小),而方差较大的估计量偏差较小(因为偏差较大可以拟合/解释/估计数据点)

偏差-方差分解

在这一节中,我们将看到估计量的偏差和方差在数学上是如何相互关联的,以及如何与估计量的性能相关联的。我们首先将估算者在测试点的误差定义为真实值和估算者的估算值之间的“预期”平方差。

到目前为止,应该相当清楚的是,每当我们谈论期望值时,我们指的是对所有可能模型的期望,对来自数据生成器的所有可能数据样本进行单独训练。对于任何看不见的测试点 xₒ,我们有:-

err(xₒ)= e[(g(xₒ))| x =xₒ]

为了符号的简单,我将 f(xₒ和 g(xₒ分别称为 f 和 g,并跳过了 x 上的条件:-

err(xₒ)= e[(g(xₒ])]

= e[(f+ϵg)]

=e[ϵ]+e[(f g)]+2。埃[(g)ϵ)

=e[(ϵ0)]+e[(f e[g]+e[g]]+2。e[fϵ]2。E[gϵ]

=e[(ϵe[ϵ]]+e[(f e[g]+e[g]]+0 0

=var(ϵ)+e[(g e[g])]+e[(e[g]f)]+2。E[(g E[g])(E[g]f)]

= Var(ϵ) + Var(g) + Bias(g) + 2。{ E[g]E[gf]E[g]+E[gf]}

= σ + Var(g) + Bias(g)

  1. 因此,在未知数据样本 xₒ下估计器的误差(以及因此的精度)可以分解为数据中噪声的方差、偏差和估计器的方差。这意味着偏差和方差都是估计量的误差来源。
  2. 此外,在上一节中,我们已经看到,估计量的偏差和方差是互补的,即增加其中一个意味着减少另一个,反之亦然。

现在暂停一下,试着想一想这两个事实结合在一起对评估者意味着什么。

偏差-方差权衡

从偏差和方差的互补性质以及分解为偏差和方差的估计器误差来看,很明显,当涉及到估计器的性能时,在偏差和方差之间有一个折衷。

如果估计量具有非常高的偏差和低的方差,即当它根本不能适应样本集中的数据点时,它将具有高误差。在另一个极端,如果估计量具有非常高的方差和低的偏差,即当它非常好地适应样本集中的所有数据点(样本集是真实数据的不完整表示)时,估计量也将具有高误差,因此不能概括其他看不见的样本,并且最终不能概括真实数据集。

在偏差和方差之间取得平衡的估计器比那些生活在极端的估计器能够更好地最小化误差。虽然这超出了本文的范围,但是可以使用基本的微分学证明这一点。

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

Courtesy : The Elements of Statistical Learning by Jerome H. Friedman, Robert Tibshirani, and Trevor Hastie. Blue curves show the training errors on 100 samples of size 50. Red curves are the corresponding test set errors

这个数字来自 ESLR,它很好地解释了这种权衡。在这个例子中,100 个大小为 50 的样本集被用于训练 100 个相同类别的模型,每个模型的复杂度/容量从左到右增加。每条浅蓝色曲线都属于一个模型,并演示了模型的训练集误差如何随着模型复杂性的增加而变化。浅红色曲线上的每一点依次是通用测试集上的模型误差,随着模型复杂性的变化而追踪曲线。最后,较暗的曲线是各自的平均(趋向于极限中的期望值)训练和测试集误差。我们可以看到,在偏差和方差之间取得平衡的模型能够概括出最好的结果,并且比那些具有高偏差或高方差的模型表现得好得多。

演示

我放了一个小演示来展示我在这篇文章中谈到的所有内容。如果所有这些都有意义,并且你想自己尝试一下,那就看看下面吧!我比较了岭回归和 K-最近邻回归之间的偏差-方差权衡,K = 1。

请记住,KNN 回归器 K = 1 完全符合训练集,因此当训练集发生变化而岭回归器没有变化时,它会“变化”很多。

Demo comparing bias-variance between KNN and Ridge Regressors

我希望这篇文章很好地解释了这个概念,并且读起来很有趣!如果你有任何后续问题,请发表评论,我会尽力回答。

偏差-方差权衡

原文:https://towardsdatascience.com/the-bias-variance-tradeoff-8818f41e39e9?source=collection_archive---------3-----------------------

在这篇文章中,我们将解释偏差-方差权衡,这是机器学习中的一个基本概念,并展示它在实践中的意义。我们将表明,一个看不见的(测试)点的均方误差是两种竞争力量(偏差/方差)和问题本身固有噪声的结果。

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

动机

我们经常在机器学习教科书中看到下图描述了泛化(测试)错误及其与模型复杂性的联系。泛化(测试)误差,即看不见的数据中的误差,可以分解为偏倚误差(错误的模型假设产生的误差)、方差(对训练数据小波动的敏感性产生的误差)和不可约误差(问题本身固有的噪声)。

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

高偏差通常源于过于简化的模型假设,而高方差则源于过于复杂的假设。顾名思义,不可约误差与底层模型无关,而是与问题中的固有噪声有关。这种噪声可以表示来自数据质量的噪声(例如,数据收集或报告中的不准确性)、来自描述现实问题的真实函数的仅近似知识的噪声、来自潜在现象的非确定性行为的噪声,并且一般来说,是不能容易地定义的任何类型的噪声。当我们的模型遭受高偏差时,模型的平均响应远离真实值,我们称之为欠拟合。当我们的模型遭受高方差时,这通常是因为它无法在训练数据之外进行推广,我们称之为过度拟合。我们的目标是建立一个模型,实现偏差和方差之间的平衡,使这两种竞争力量的综合误差最小*。这是上图中的中间区域!

*通常,随着模型复杂性的增加,传统的机器算法(如回归算法、梯度提升树、支持向量机等)会遇到偏差-方差权衡的问题。然而,深度学习的最新进展质疑了只要有大量训练数据,模型复杂度就会增加的既定概念。

问题定义

让我们从定义一些关键概念开始。我们假设自变量 x 通过确定性或非确定性关系影响因变量 y 的值。我们说非确定性是因为 y 的值也会受到无法明确建模的噪声的影响。让我们通过函数 f 来表示 yx 的依赖关系,这实质上代表了 xy 之间真实的底层关系。在真实情况下,当然很难——如果不是不可能的话——知道这种关系,但是我们将假设 f 是固定的,即使它是未知的。在这种情况下, yx 和随机噪声的结果,由公式给出:

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

噪声由具有零均值和方差σϵ的随机变量ϵ建模。方差的大小代表了潜在现象的不确定性水平。我们的不确定性越大,σϵ的价值就越大。在数学上,ϵ具有以下特性:

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

现在,当我们试图对潜在的现实生活问题建模时,这实际上意味着我们试图找到一个函数 ,使得它尽可能接近真实的(但我们未知的)函数 f 。函数 在回归情况下可以采用系数的形式,在支持向量机(SVMs)的情况下可以采用支持向量和对偶系数的形式,并且它是从训练数据中学习的。生成训练数据的基础分布越接近生成测试(看不见的)数据的基础分布,由函数 表示的模型将越好地推广到看不见的数据。函数 通过最小化损失函数来学习,其目标是使训练数据的预测尽可能接近它们的观察值: y ≈ f̂(x)

M ean 平方误差(简称 MSE)是一个预测 f̂(x) 与其真值 y 的均方差。它被定义为:

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

偏差被定义为对于给定的不可见(测试)点 x 的预测平均值(在训练数据的不同实现上)与真实底层函数 f(x) 的差异。

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

让我们花一些时间来解释一下我们所说的“训练数据的不同实现”是什么意思。假设我们想要监控某个社区的家庭收入水平和房屋销售价格之间的关系。如果我们能够获得每家每户的数据,我们就能够训练出一个非常精确的模型。但是,由于获取数据可能成本高昂、耗时,或者受到隐私问题的影响,大多数时候我们无法获得底层人群的所有数据。一个实现意味着我们只能访问一部分底层数据作为我们的训练数据。这种认识可能不代表潜在人口(例如,如果我们只调查某个家庭有一定教育水平的房屋)或具有代表性(如果没有种族、教育、年龄或其他类型的偏见)。因此,当我们说期望𝔼[【f̂(x】**是针对训练数据的不同实现时,这可以被认为是我们有机会从基础总体中投票选出一个样本,在这个样本上训练我们的模型 ,计算 f̂(x) 并重复多次(每次使用不同的训练样本)。预测的平均值将代表𝔼[【f̂(x】**。在这里, f̂(x) 即使 x固定*也是变化的,仅仅是因为 f̂依赖于训练数据。 **所以, 对于训练数据的不同实现会有所不同。*用更数学的术语来说, 是一个随机变量,受我们获取训练数据的随机性影响。

**方差*定义为 f̂(x) 与其期望值𝔼[*f̂(x)在训练数据的不同实现上的均方偏差。

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

将测试 MSE 与偏差、方差和不可约误差联系起来的公式为:

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

术语𝔼[𝔼[(yf̂(x)]]中的第一个期望是未知(测试)点的分布 x ,而第二个期望是训练数据和随机变量ϵ.的分布因为 依赖于训练数据,我们也可以说第二次期望已经超过了 f̂、 ϵ.如果我们把上面的公式写得更明确一点,那就是:

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

但是为了简单起见,我们将跳过期望标识符。右边的三项都是非负的,不可约误差不受模型选择的影响。这意味着测试 MSE 不能低于σϵ。我们现在将推导出给定测试点 x 的公式。因为它适用于给定的测试点 x,所以它适用于任何看不见的测试点的分布。

偏差-方差分解的证明

提醒一下,我们假设 x 是一个看不见的(测试)点, f 是潜在的真函数(规定了 xy 之间的关系),它是未知但固定的,ϵ代表问题中的固有噪声。测试 MSE,𝔼[(yf̂(x)]是对训练数据和随机变量ϵ : 的不同实现

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

(1)是因为 y = f(x) + ϵ,(2)是因为平方展开、期望的线性性质和随机变量ϵ的独立性 。记住,当两个随机变量独立时,它们乘积的期望等于它们期望的乘积。在 Eq 中。(3)我们看到测试 MSE 如何分解成不可约误差σϵ和𝔼[(f(x)f̂(x)】。现在让我们看看如何进一步分析后一项。

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

**在 Eq 中。(4)我们通过𝔼[*【f̂(x】*和等式中的加减。(5)我们展开正方形内的项。偏置𝔼[f̂(x)-f(x)只是一个常数,因为我们从𝔼[ f̂(x) 中减去 f(x) (一个常数),后者也是一个常数。因此,将期望应用于平方偏差,(𝔼[f̂(x)**f(x))没有任何效果。换句话说,𝔼[(𝔼[f̂(x)f(x))=(𝔼[f̂(x)f(x))。在 Eq 中。(6)我们能够把 f(x) −𝔼[ f̂(x) 拉出预期,因为正如我们提到的它只是一个常数。最后,由于期望的线性,(7)成立。因此,我们在(8)中看到,𝔼[(f(x)f̂(x)]是偏差和方差的平方和。当我们结合等式。(3)和(8),我们最后得到:

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

这是针对给定的测试点 x 的,但是我们通常有一组测试点,这可以转换成我们在上一节中给出的公式。

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

(期望𝔼在右手边是测试数据的分布。)

在实践中显示偏差-方差权衡

在我们推导出偏差-方差分解公式之后,我们将展示它在实践中的意义。假设,规定 xy 之间关系的基础真函数 f 为:

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

并且噪声由具有零均值和标准偏差 1 的高斯模型(ϵ ~𝒩(0,1)来建模。提醒一下, y = f(x) + ϵ.如果我们从这个过程中随机产生 1000 个点,我们会得到下面的图。

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

蓝点代表( xy )对,红线是底层真函数 f(x) 。红点是我们要预测的看不见的(测试)点。我们看到 f 遵循非线性模式,因为在函数定义中增加了平方根和余弦。出于我们的目的,这 1,000 个点代表了整个潜在人群。下面是重现这个情节的代码。

我们将用不同复杂程度的多项式回归来模拟这个问题。提醒一下,在多项式回归中,我们试图拟合 xy 之间的非线性关系。

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

换句话说,我们试图用 f̂(x) 来近似 y ,如等式所示。(9).我们将不详细讨论如何学习模型参数 w₀、w₁、…、wd,因为这超出了本文的范围,但是让我们假设它们是通过最小化损失函数来评估的,该函数试图使f̂(x尽可能接近*y。***

现在,假设我们只能使用 20 个点(1000 个点中的 20 个)来训练我们的多项式回归模型,我们考虑四个不同的回归模型,一个具有度 d =1(简单直线),一个具有 d =2、 d =3 和 d =5。如果我们从潜在人群中随机抽取 20 个点,并重复这个实验 6 次,这就是我们可能得到的结果。

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

蓝点代表特定实现(实验)的 20 个训练数据点。红线是潜在的(我们未知的)真实函数 f ,其他线代表四种不同模型对训练数据的不同实现的拟合。绿色、紫色、青色、橙色点代表每个模型下测试(未显示)点 x 的预测f̂(x】。正如我们所看到的,复杂度较低的代码行差异较小。以 d =1(简单直线)为例。在不同的实验中,直线的斜率没有太大的变化。另一方面,更复杂的模型( d =5)对训练数据中的小波动更敏感。例如,看实验 1 和实验 6 之间的橙色线( d =5)的差异,以及这如何影响预测 f̂(x).这就是我们前面提到的方差问题。一个简单的模型对训练数据的变化非常稳健,但一个更复杂的模型则不然。另一方面,平均而言, f̂(x)f(x) 的偏差偏差对于更简单的模型来说更大,因为我们的假设不能代表潜在的真实关系 f 。以下是上述情节的代码。

现在,假设我们模拟* 10,000 个不同的实验,每次从底层人群中随机抽取 20 个点作为我们的训练数据。在每次实验中,我们都会学到与实验训练数据相关的不同的 f̂。如果对于一个给定的看不见的测试点 x,我们为每个实验评估 f̂(x) ,我们将为 f̂(x).收集 10,000 个值对于线性( d =1)和二次( d =2)回归模型,我们这样做。如果我们记录这 10,000 个值,我们会得到下面的图。 ( 注意,在代码和图中,测试点用 x_ 表示,训练数据用 x _train 表示。换句话说,尽管我们在本文中用 x 来表示测试点,但是在代码中,为了避免混淆,我们用变量*x _test)来表示。

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

正如我们看到的,黑线代表的 f̂(x、 𝔼[ f̂(x) 的均值,对于线性回归模型来说比二次回归模型(紫色 hist)更远离真实 f(x) (红线)。这就是偏差*,换句话说,当我们的模型假设过于简单时,与真实模型的偏差。另一方面, f̂(x、 var( f̂(x) )的方差在二次模型上比线性模型上更大,正如我们从底部(紫色)直方图的更大分布中看到的。这就是方差问题,换句话说, f̂(x) 对训练数据的小波动的依赖性较大。下面是再现直方图的代码。*

现在让我们考虑 1000 个测试点,并计算平均测试 MSE(在这些点上)。我们还计算平均平方偏差(在这 1000 个测试点上)和平均方差。如果我们对五个模型这样做,从度数 d =0(水平线)一直到度数 d =4,我们得到下面的图。

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

如果我们把黄色(偏差的平方)、蓝色(方差)和红色(不可约误差)的线加在一起,我们得到绿色的线(测试误差)。这是我们熟悉的偏差-方差公式!

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

黑线代表训练 MSE,它随着模型复杂性而降低,因为更复杂的模型往往更适合训练数据。在这个特定的例子中,我们看到潜在问题的最佳模型是二次模型( d =2),因为它实现了最小的测试误差。上述情节的代码发布在下面。

如果你有兴趣了解更多关于偏差-方差的问题,这里有一个非常有用的吴恩达的教程。

结论

在本文中,我们提出了偏差-方差问题。我们继续进行数学推导,并举例说明偏差方差在实践中的真正含义。我们证明了模型选择必须与两种竞争力量作战:偏差和方差。一个好的模型应该在这两者之间取得平衡,但是由于不可约误差的存在,我们永远不可能达到零测试误差。我们的模型不应该过于简单,但也不应该过于复杂,这样它就可以很好地推广到以前看不到的数据。

大数据手册

原文:https://towardsdatascience.com/the-big-data-handbook-f953e1777244?source=collection_archive---------13-----------------------

你知道 Hadoop 是一只黄色的玩具大象吗?

了解有关 Hadoop 生态系统的所有信息

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

Photo by Joshua Sortino on Unsplash

作为一名经济和金融背景的学生,算法、数据结构、Big-O 甚至大数据对我来说都太陌生了。文件系统、吞吐量、容器化、守护进程等术语。在我的字典里几乎没有任何意义。

这是我向普通人解释大数据的尝试(在上下文中加入一些技术术语)。

什么是大数据?

大数据字面意思是大数据(换句话说,大量数据)。问题应该是,多大的数据才算大数据大数据?这个问题没有固定的答案,因为它取决于你问这个问题的时间。随着数据量的持续增长(指数级),今天被视为“大”的数据在 10 年后可能不再被视为“大”。然而今天,从业者通常将 1tb 或更大的数据归类为“大”数据。

除了纯粹的数据量之外,我们还必须考虑产生和消费的数据的速度准确性多样性。简而言之,数据正以如此快的速度(速度)从不同的来源和不同的结构(多样性)被创造出来,以至于我们不得不考虑数据的准确度和精确度(准确性)。

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

The Four V’s of Big Data (IBM Big Data Club)

为什么需要大数据?

从人类文明开始到 2003 年,总共有 5 艾字节的信息被创造出来,但是现在每两天就有这么多的信息被创造出来。 —谷歌执行董事长埃里克·施密特

信息时代的曙光始于搜索引擎的出现,社交媒体平台的创建进一步加速了这一进程。随着数据量的增加,我们想要分析的数据类型也在增加。来自传统类型的结构化数据(如 CRM 数据、POS 数据、系统日志、XML、JSON 等。)到非结构化数据(例如,社交媒体、图像、电子邮件、Web 数据、音频、视频等)。),企业显然需要能够捕获存储管理分析优化所有这些类型的数据。

谷歌是如何解决大数据问题的?

虽然这可能有点技术性,但我会尽量让它变得简单。

当互联网在 21 世纪初爆发时,谷歌面临着一个数据问题。需要处理的信息实在太多了,所有这些数据都存储在大型的集群(一组一起工作的计算机)。为了能够处理和分类万维网上的海量信息,谷歌的杰弗瑞·迪恩桑杰·格玛瓦特在 2004 年发表了他们的论文——“MapReduce:大型集群上的简化数据处理 ”,这是一个用于分析网站数据以进行搜索优化的框架。2005 年, Apache ,一个开源组织,在他们的“Nutch”项目中使用了 MapReduce ( 关于这个框架的细节在下面)这是一个高度可扩展和可伸缩的网络爬虫软件项目。

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

Doug Cutting (source: https://twitter.com/cutting/status/786058270150721540)

现在,你可能想知道这个术语 Hadoop 是怎么来的?2006 年,雅虎的员工道格·卡丁()离职。然后,设计了 Hadoop 并以他儿子的黄色玩具大象命名,最终在 2007 年作为开源的 Apache 项目发布。它很快成为一个顶级的 Apache 项目。如今,许多公司使用 Hadoop 进行大容量数据存储和处理,因为它能够以最小的数据移动(成本)高效地查询数据。更多的细节和优点将在下面列出。

大数据堆栈简介

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

Big Data Stack (source: Singapore Management University)

为什么有这么多组件?

在 Hadoop 生态系统中,有许多不同的层负责不同的组件,包括数据存储、集成、访问、资源管理、执行引擎以及运营和管理。

在我失去这一段以外的读者之前,让我提供一个栈试图完成的高级描述。

当大量数据分散在许多不同的计算机上时,从数据消费、存储、处理和分析的一切都不可避免地变得更加困难。然后为这些过程中的每一个创建工具,因为它们帮助摄取和处理数据,而一些工具协调这个复杂的过程,以便获得用户想要的结果。

警告: 下面包含了大量的技术术语!您可能希望简单地阅读每个组件的高级描述。

软件描述和功能

Apache Hadoop

一个开源软件框架,用于商用硬件集群上数据集的存储和大规模处理(又称分布式计算)。简单地说,Hadoop 是为那些有大量数据要存储和分析,但没有时间、技能或资源成为分布式系统专家来处理这些数据的人而创建的。

数据集成

为了将传入数据存储到数据存储层中,由于传入数据的类型(流或批处理数据)和传入数据的来源各不相同,因此通常需要一个数据集成工具。

阿帕奇水槽

Flume 是一个分布式的、可靠的、可用的服务,用于高效地收集、聚集和移动大量的日志数据。它有一个简单灵活的基于数据流的架构。

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

Flume Basic Architecture (Source: Singapore Management University)

Flume 服务于数据接收/集成层和服务器,将数据从源移动到目的地(通常是 HDFS/Hbase)。它解决了几个问题:

  • 分布式数据源
  • 改变数据结构
  • 源和目的地之间的阻抗不匹配(HDFS/Hbase)
  • 系统和服务器的规模不断扩大

Sqoop

SQL 到 Hadoop 的简称。顾名思义,Sqoop 旨在使用 Hadoop MapReduce 在关系数据库和 HDFS 之间传输批量数据。它的优势在于能够连接到许多流行的数据库和企业数据仓库(EDW)。

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

Sqoop Basic Architecture

Sqoop 与工作流协调器 Apache Oozie 集成,允许调度和自动化导入/导出任务。

阿帕奇卡夫卡

Kafka 是一个分布式流媒体平台,发布和订阅(通常被称为“发布/订阅”系统)大量的记录流(消息系统)。它通常用于构建实时数据管道,在系统和应用程序之间可靠地获取数据,还用于构建实时应用程序,对数据流进行转换或做出反应。

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

Kafka pub/sub messaging system

请注意,这与 Flume 不同,因为 Flume 只是接收日志数据流并将其存放到接收器中(即单一目的地)。另一方面,Kafka 能够在不同类型的 feed 之间轻松共享数据(即通过推拉模式分离生产者和消费者)。

数据存储和管理

在数据存储层,根据存储的数据类型(结构化/非结构化/半结构化数据)以及数据存储中文件的读/写频率,有不同的选项。

HDFS (Hadoop 分布式文件系统)

这是 Hadoop 的存储层,存储结构化数据。这一层还负责数据分发和数据复制。它解决了几个关键问题:

  1. 数据太大,无法存储在单台机器上 —使用多台机器协同工作来存储数据(分布式系统
  2. 数据增长过快且不稳定 —添加更多机器进行线性扩展并避免瓶颈(可扩展)
  3. 机器数量越多,故障概率越高 —冗余存储数据;数据分布在多个节点上(容错)
  4. 分布式系统的复杂性 —抽象复杂细节的高级 API(简单编码模型 )

Apache Hbase

基于 Apache Hadoop 构建的可水平扩展、低延迟、随机访问的数据存储。它利用 HDFS 的冗余,使其具有容错能力。它与 HDFS 的不同之处在于,它是一个 NoSQL 键值存储,使用列族。它本质上是一个存储地图的数据库。CPU 和内存密集型,偶尔有大量顺序 I/O 访问。

执行引擎

执行引擎的选择通常取决于您需要解决的问题,有些执行引擎只在它为之构建的用例中才是强大的。在这种情况下,创建 MapReduce 是为了处理大数据,并在集群中的数百或数千个节点之间进行扩展。另一方面,Spark 的优势在于它有一个统一的面向最终用户的 API,使得构建数据处理管道变得容易。

MapReduce

核心 Hadoop 处理引擎(在 Spark 推出之前)旨在利用并行性。它是由两个组件组成的框架— 1) Map 和 2) Reduce

Map 操作获取一组数据,并将其转换成另一组数据,其中各个元素被分解成元组(键/值对)。归约操作将来自映射(或洗牌)的输出作为输入,并将那些数据元组组合成更小的元组集。MapReduce 的优势在于,这两个操作都在每个节点上本地完成,并且跨节点传输的数据最少(低 I/O 成本)。

阿帕奇火花

Spark 的动机是基于 MapReduce 的局限性,它对于重复使用工作数据集的应用程序来说效率低下。出现问题的两个例子:

  1. 迭代、多阶段算法 —像梯度下降这样的机器学习算法将一个函数迭代地应用到同一个数据集,以优化一个参数,其中每次迭代都可以表示为一个 MapReduce 作业,因此每个作业都必须从磁盘重新加载数据,从而导致显著的性能损失
  2. 交互式数据挖掘工具 —类似地,像小猪蜂巢这样的工具被用来在数据集上运行特别的探索性查询。每个查询都会产生很大的延迟,因为它运行一个新的 MapReduce 作业并从磁盘读取数据(而不是一次加载,多次读取)

因此,Spark 的目标是允许内存数据共享,从而避免复制,同时保留弹性和容错的优势。这是通过使用弹性分布式数据集 (RDDs)通过分布式内存抽象实现的。rdd 允许以容错方式在大型集群上进行内存计算。

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

Spark Toolkit

Spark 的神奇之处在于,它是一个统一计算引擎,有一套大数据处理的库。这意味着通过一组一致的 API,Spark 可以用于支持广泛的数据分析任务,包括数据加载、运行 SQL 查询、机器学习和流计算。

数据分析

PigHive 之前,数据分析是用 MapReduce 术语(Java)完成的,这使得人们很难掌握那些必要的技能。像 joinfilter 等许多常见操作都需要自定义代码。Pig 和 Hive 是试图使数据分析民主化的两种早期解决方案。

Pig 是一个用于分析大型数据集的平台,有两个主要组件:

  1. pig Latin——一种用于分析大型数据集的高级编程语言
  2. Pig 引擎—解析、优化并自动执行 PigLatin 脚本,作为 Hadoop 集群上的一系列 MapReduce 作业

储备

Hive 最初是由脸书在 2007 年开发的,但现在是一个开源的 Apache 项目。

Hive 是一个管理和查询结构化数据的系统,构建在 Hadoop 之上。业务分析师更容易访问它,因为它有一种类似 SQL 的查询语言,称为 HiveQL(非常类似于 MySQL)。

在后台,hive 引擎将 Hive 查询转换为 Map Reduce 代码,然后发送给 Hadoop 执行。

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

Hive Query Flow

资源管理和协调

Apache Hadoop YARN(又一个资源谈判者)

它是一个资源管理框架,将编程模型从资源管理基础设施中分离出来,并将许多功能委托给每个应用程序的组件。这允许多种数据处理工作负载,如交互式 SQL、实时流、机器学习,甚至对存储在单个平台上的数据进行批处理。

动物园管理员

ZooKeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。⁴

结束语

我希望这对那些对这些不同的工具如何相互集成感到困惑的人有用。很高兴收到任何反馈!

支持我! —如果你喜欢我的内容并且没有订阅 Medium,请考虑支持我并通过我在这里的推荐链接订阅 ( 注意:你的一部分会员费将作为推荐费分摊给我)。

参考

  1. https://mindmajix . com/MapReduce/history-and-advantages-of-Hadoop-MapReduce-programming
  2. https://towards data science . com/a-brief-summary-of-Apache-Hadoop-a-solution-of-big-data-problem-and-hint-from-Google-95fd 63 b 83623
  3. https://flume.apache.org/
  4. https://zookeeper.apache.org/

未来十年最大的人工智能风险不是机器人起义

原文:https://towardsdatascience.com/the-biggest-ai-risk-of-the-next-decade-is-not-a-robot-uprising-efb9f6bf2d31?source=collection_archive---------18-----------------------

关于人工智能未来影响的大概括掩盖了我们今天面临的更紧迫的问题。

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

Finally, robotic beings rule the world — pictures of the Terminator and HAL are just played out at this point. (Flight of The Conchords, Robots)

过去十年,科技领域出现了许多有趣且令人印象深刻的发展(,但也不乏失败的例子)。人工智能的研究和开发在过去十年中有了巨大的增长,部分原因是大型数据集的可访问性和更强的计算能力促进了深度学习革命。随着人工智能的使用越来越普及,我们对未来十年有什么期待?

先前对“2020 年愿景”的技术预测相当不靠谱——从完全错误到尚未实现。人工智能的未来是最未知的领域之一,许多人工智能专家不愿意给出任何具体的预测。在 2016 年的一项调查中,67%的人工智能研究人员表示,人工超级智能是可能的,但只会在超过 25 年后出现。25%的人说这根本不可能。

虽然对人工智能的普遍担忧是基于消灭人类的超级智能机器人起义,但在不久的将来,我们有更紧迫的担忧。这被称为伟大的人工智能悖论——担心遥远的存在性人工智能风险实际上是误导,分散了对人工智能在未来十年可能引发的真正问题的注意力。这篇文章的想法是强调我们目前拥有的人工智能的潜在(错误)用途,以及它与人类终结超级智能的不同之处。然而,讽刺的是,这篇文章也可能是一长串历史上不可靠的人工智能预测的一部分…

过去十年的 AI…

过去的十年是人工智能研究非常激动人心的时期。2012 年见证了 AlexNet 的推出,这是一种深度卷积网络,在 ImageNet 竞赛(一种常用的评估自动图像分类的基准)中表现相当好。原始论文对谷歌学术的引用超过 53,000 次,可以被认为是深度学习革命的开始,这场革命启动了人工智能研究和应用的复兴。

专家预测,围棋的超人表现至少还需要 10 年时间。

这个深度学习跳板为许多进一步的人工智能应用打开了大门。DeepMind 开发了用于玩游戏的革命性模型,并在 2016 年实现了围棋超人类表现的里程碑,当时专家预测这至少还需要十年。自然语言处理在过去十年中也取得了重大进展,2018 年 BERT 的开发重新定义了该领域的艺术起点,让计算机能够更好地理解我们的语言和言语。

许多技术领域现在都在利用人工智能——自动驾驶汽车、语言翻译、手机——人工智能研究在过去十年中的重要性通过它在不同行业中的应用速度得到了证明。的确,AI 界有三位大佬获得了 2018 图灵奖(诺贝尔计算奖),可见过去十年 AI 研究的意义。

深度学习的概念其实是一个相当古老的想法;从 80 年代就有了。然而,只有当计算能力赶上来,并且我们拥有可以满足数据饥渴算法的大规模标记数据集时,它的真正利用才是可能的。虽然深度学习已经让我们做了许多令人印象深刻的事情,但我们仍然依赖于一个 30 年前的想法— 我们会不会开始发现深度学习的局限性,需要一些新的东西?

…以及未来十年的人工智能

那么,未来十年我们可以期待看到什么呢?有许多关于人工智能将如何影响 2020 年及以后的工业的预测,其中大部分是过去几年的研究,并以新的方式应用。我们已经看到增强了某些行业,随着数据变得越来越丰富,这种情况可能会继续下去。

我们目前的人工智能在某些领域明显缺乏,距离一般智能还有很长的路要走。

所有这些新的创新仍然处于狭义人工智能的领域;只能胜任一项特定任务的程序(你的下棋人工智能不会擅长在餐馆订桌,反之亦然)。即使其中一些可以被认为是专家人工智能,在人类或超人的水平上执行,他们仍然从根本上严重缺乏人工一般智能(AGI)。即使是围棋中令人印象深刻的壮举,一些被预测为至少 10 年后的事情,仍然停留在狭隘/专业的人工智能领域。

我们目前的狭义人工智能在某些领域严重不足。它们的样本效率非常低:在深度学习系统能够准确分类之前,必须向它展示很多很多的例子(相比之下,我们人类只能从少数例子中学习)。他们没有常识,无法理解我们认为理所当然的事情,尽管正在努力将常识理解嵌入我们当前的系统。深度学习系统也非常脆弱;他们操作环境的微小变化会导致灾难性的失败,甚至会被恶意攻击利用。

我们不需要太担心 AGI

既然 AGI 似乎离我们还有很长的路要走,我们应该为此担心吗?AI 可能受制于安国定律:

“我们往往会高估一项技术在短期内的效果,而低估其长期效果。”

人工智能在未来十年的预测影响可能被夸大了(特别是如果我们达到深度学习的极限),发展 AGI 的后果可能比我们甚至可以想象的更大。如果是这样的话,我们当然应该考虑如何安全地开发 AGI,但不能忽视我们当前的人工智能系统可能出现的越来越多的问题。用吴恩达的话说:

“在遥远的未来,可能会有一场机器人杀手的竞赛,但我今天不致力于不让人工智能变得邪恶,原因与我不担心火星上人口过剩的问题一样。”

围绕人工智能安全研究的必要性有不同的观点。马斯克的开放人工智能是基于安全 AGI 的发展,尽管他对人工智能的未来相当宿命论。这与布赖恩·考克斯的观点形成对比,他同意大多数人工智能专家的观点,认为 AGI 还有很长的路要走。关于 AGI 的未来影响及其存在风险的笼统概括的问题在于,它将注意力从我们今天面临的更紧迫的问题上转移开了。

这并不是说人工智能安全研究是一个毫无意义的研究领域。通过在正常人工智能研究的同时发展人工智能安全研究,我们可以确保当(如果)AGI 最终到来时,我们已经做好了准备。它甚至可能有助于提高我们人工智能系统的性能。对于那些对人工智能安全感兴趣的人来说,一个很好的资源是罗伯特·迈尔斯的 YouTube 频道。

AGI 作为一种生存风险的另一面是,它也提供了“生存的希望”——这可能是人类有史以来最好的事情。与核灾难等其他生存风险不同,AGI 对人类的毁灭伴随着乌托邦的诱惑。然而,我们离终结世界的人工智能场景还有一段路要走,但这并不意味着它在此期间不会有破坏性。

那么我们应该担心什么呢…

我们目前拥有的人工智能可能会出很多问题,即使不担心 AGI。虽然人工智能在未来十年将如何影响我们的社会和经济仍有很多不确定性,但它很可能会继续渗透到工业的大部分领域。以下是对未来十年人工智能使用的三点担忧。

1.对就业和平等的影响

人工智能对就业的影响是一个激烈辩论的话题。一些人大大夸大了人工智能自动化大量劳动力的能力,但其他人认为它将创造更多的工作岗位。人工智能的主要影响将是我们所做工作类型的转变——人工智能可以接管工作中的世俗元素,允许人类工人以互补的方式使用他们的创造力和技能,这些都超出了我们当前人工智能的范围。然而,这并不是没有自己的一套压力,仍然会造成破坏;人们将需要在工作中欣然接受更多技术,并接受重新培训,以便与新的人工智能同行一起工作。

也有人担心因人工智能的使用而加剧的平等问题。公司可以通过使用自动化系统代替人工来节省资金,这在短期内通过降低成本(并可能增加产量)给他们带来巨大的好处。这不仅扩大了经济不平等,也是一个坏的长期战略,因为消费者剩下的钱更少,无法使用这些公司提供的服务。需要采取措施确保人工智能提供的好处不被掌握权力的少数人所独享。

2.不道德和非法使用

虽然人工智能可以用在许多有用和有益的方面,但它也有可能被用于不道德和道德上有问题的用途。自主武器(和人工智能在军队中的广泛应用)是人工智能如何被用于一些人可能会反对的方式的一个主要例子。谷歌在项目 Maven(其与美国国防部签订的开发人工智能软件以分析无人机镜头的合同)上受到了很多反对。军事人工智能不一定是终结者式的杀手机器人;有许多方法可以应用它。随着人工智能的不断发展,我们将继续看到人工智能系统在军队中更广泛的使用和越来越强的能力。

I need your clothes, your boots, and your motorcycle. AI-powered DeepFakes are a powerful tool for video manipulation and spreading misinformation. (Ctrl Shift Face)

除了物理战争,人工智能还通过社交媒体和错误信息的传播进行不道德的使用。这十年最令人担忧的发展之一是 DeepFakes 的兴起,以及他们如何通过高科技伪造视频和声音来传播错误信息。虽然这项技术还不成熟,而且在仔细检查下仍然有可能发现假货,但随着时间的推移,假货只会越来越好。通过使用人工智能系统传播错误信息的潜在便利性和有效性可能会产生深远而极具破坏性的后果,其背后的技术仍然建立在深度学习的基础上,而无需跳到 AGI。

3.缺乏理解

随着人工智能系统得到更广泛的使用和持续的研究,人们希望我们能够很好地掌握这些系统如何学习和做出决定。不幸的是,今天大多数人工智能背后的深度学习方法从根本上来说是黑盒模型——我们很难窥视引擎盖下的情况,看看他们实际上在做什么。模型的复杂性(通常有数百万个参数)远远超出了人类的理解能力,系统本身也无法解释它们是如何做出决策的。这非常令人担忧,尤其是当这些系统部署在可能直接影响我们的环境中时,例如无人驾驶汽车或医疗应用。

“指标只是代表您真正关心的东西,不假思索地优化指标可能会导致意想不到的负面结果。”— 瑞秋·托马斯

我们不仅不确定我们当前的人工智能系统是如何做出决策的,它们有时还会学到错误的东西。使用度量标准来训练和评估人工智能系统往往会产生误导,这往往会追溯到人工智能系统缺乏常识的问题。例如,一个人工智能学会了一种在视频游戏中最大化分数的古怪而高效的方法,而没有真正赢得比赛。它完全优化了它被告知要做的事情,然而设计者实际上希望它赢得比赛。虽然这是一个微不足道、无关紧要的例子,但不需要太多的想象力就可以看出这在现实世界中会产生重大的负面影响。

…对此我们能做些什么?

好消息是,我们已经在研究当前和未来人工智能的潜在影响。像机器智能研究所和牛津人类未来研究所这样的组织正在研究人工智能将如何改变我们的未来(无论是好是坏)。人工智能技术的持续发展将需要克服当前的一些问题(缺乏可解释性,偏见问题等)。)并包括提高人工智能系统安全性的研究。

除了技术发展,未来十年还需要见多识广的政策制定者听取专家的建议,对人工智能进行监管。也有必要更好地告知公众关于人工智能的信息,并开始讨论人工智能可能将人类带向的未来方向。通过将我们的努力重新聚焦于短期人工智能影响,我们可以确保人工智能在未来十年的崛起尽可能有益。

丹妮莉丝·坦格利安的两个极端

原文:https://towardsdatascience.com/the-binary-extremes-of-daenerys-targaryen-1c89502de92d?source=collection_archive---------23-----------------------

(或者我应该说…“二进制极端”?)

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

“Louder Than Words ( concepts /studies )” by Ahmed Karam is licensed under CC BY-NC-ND 4.0

警告:包含 HBO 的权力的游戏的剧透。如果你不是最新的,不想让这个节目被剧透,现在就回头吧!

《权力的游戏》的倒数第二集(以下简称《GoT》)激起了激烈的辩论和讨论,这是有充分理由的。丹妮莉丝·坦格利安——战败者,解放者,赢得粉丝忠诚的女人提利昂琼恩·雪诺——向尖叫的平民降下龙火,其中许多是孩子,尽管这座城市已经投降。我们惊恐地看着龙之母将君临浇在火焰中。

丹妮莉丝展示的残暴让观众感到震惊。这是一个在其中一条龙吞食了一个孩子后,把她的龙拴起来的角色。她推迟了在维斯特洛的推进,因为她想首先结束弥林的奴隶制。而一旦维斯特洛,当她意识到白行者带来的威胁时,她再次搁置了自己的目标,选择帮助北方对抗死亡之军。这个富有同情心的人怎么能烧死成千上万的平民呢?

因为丹妮莉丝被她的正义观所驱使,因为她观点中的许多原则恰好符合我们现代的理解,所以我们很容易忘记她其他道德上有问题的行为。她也许有很强的同情心,但她也批准了对自己兄弟的处决。她把两个背叛她的朋友锁在金库里,让他们自生自灭。她用龙火判了塔利一家死刑,因为他们不肯下跪。我需要继续吗?

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

Fire and blood…. Photo by raquel raclette on Unsplash

对大多数 GoT 观众来说,这些例子和君临的人们有明显的区别。毕竟丹妮莉丝的哥哥是个虐待狂。她困在地下室的前朋友真的背叛了她。而且,直到倒数第二集,她对政敌使用龙火,而不是无辜的旁观者。

在观众眼中,卷入(政治或其他)的和无辜的之间的区别是至关重要的。一些人宣称丹妮莉丝对龙火的普遍使用是完全正当的。有些人谴责它在任何情况下都是原始和野蛮的。很少人,如果有的话,会想到丹妮莉丝会焚烧一座投降的城市,吓坏了的女人和孩子会被诅咒。

也许,随着《T2》的每一季《权力的游戏》的播出,你对丹妮莉丝·坦格利安的任何错误的怀疑都会慢慢被遗忘,或者至少被忽略。(对我来说当然是这样。)一方面,她是疯王的女儿;她看起来确实有点像 T4,对自己的王位“权利”过于执着。另一方面,观众信任的角色,像米桑代、乔拉、提利昂和琼恩,都崇拜她。我们推断,这些角色的默许无疑意味着她偶尔的严厉在 GoT 世界中不会被认为是不合时宜的。

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

“Daenerys Stormborn” by Marta Rodriguez is licensed under CC BY-NC-ND 4.0

现在我们知道了丹妮莉丝对君临做了什么,我们很容易回过头来看看她的行为为何让我们震惊。她过去的行为一直符合明显的区别不知何故涉及无辜**;因此,很容易假设丹妮莉丝使用这种架构运作。然而,现在比以往任何时候都清楚的是,龙之母只是简单地把人归类为对她的或对她的**。****

她过去的每一个目标都反对她,或者干脆拒绝承认她王室主张的合法性。他们只是碰巧从来都不是无辜的旁观者。丹妮莉丝从来不需要将无辜的旁观者归类为“反对她的人”,因为在君临之前,无辜的人们一直都很崇拜她。

战斗开始时,坦格利安已经厌倦了瑟曦把市民当作人盾,她鄙视那些本该驱逐瑟曦的市民却接受了她的统治。对龙族女王来说,君临的无辜者是瑟曦暴政的同谋,因此他们“反对丹妮莉丝”,该死。

这种二元、还原的思维方式并不是丹妮莉丝·坦格利安独有的。许多其他《GoT》角色对道德和人类行为持有非黑即白的观点,最著名的是奈德·史塔克。但是,虽然丹妮莉丝的观点是基于问题“它们是给我的吗?”,奈德的问题是“我采取的行动是最正确、最可敬的吗?”****

有趣的是,内德为坚持他黑白分明的行为准则付出了最终的代价。当他选择打破自己的规则时,他也经历了最重要的性格决定时刻。澄清一下,奈德是被“国王”乔佛里处决的,如果他与蓝礼·拜拉席恩培提尔·贝里席合谋玷污了自己,那就不会发生这种事。他塑造性格的时刻发生在《GoT》开拍前几年,当时他向他垂死的妹妹莱安娜·史塔克承诺,他会认乔恩为自己的儿子。为了做到这一点,他不得不撒谎。

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

Heck yeah, House Stark! Photo by Guillaume Archambault on Unsplash

如果丹妮莉丝能够打破她所谓的“支持我或反对我”的二分法,她也许能够挽回自己。唉,城不能不烧,死不能复生。她毁灭性的选择可能把她逼到了一个无法逃脱的角落。

她最终会付出什么样的代价?

丹妮莉丝·坦格利安看待世界的扭曲范式可以很容易地用二叉树来表示,二叉树是计算机科学中的一种分层数据结构。如果你不熟悉计算机科学科目,没关系!二叉树很容易解释。

计算机科学由两类部分组成:节点 ( 你只需要知道节点保存数据)和边** ( 把这些想成指针)。每个节点都可以指向(带 的*)另一个节点,这个节点就叫做它的子节点。(对于那个子节点,那么,原始节点就是它的父节点。)***

树中的第一个节点称为根节点**,它没有任何其他节点的边指向它。不指向任何其他节点的节点,即没有边的节点,称为。根节点在树的顶端,其子节点在它的下面,所以要可视化一棵计算机科学树,只需想象一棵颠倒的生物树。**

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

Imagine this tree, but flipped! Photo by Lionello DelPiccolo on Unsplash

每个节点都可以指向多个其他节点。这个特征(我喜欢称之为“多点--多点*”)是树的最显著的特征,因为它意味着数据不是以单一的线性方式被访问的。因此,树是一种非线性数据结构。***

二叉树是树的一种。它具有与标准树相同的所有特征,只有一个规范:每个节点最多可以指向两个子节点。这个额外的约束使得二叉树对于像搜索* ( 在树中寻找你想要的数据)这样的编程方法非常有用。二叉树非常适合完成二分搜索法(使树成为二叉查找树)的任务,这比听起来要简单。它由以下步骤组成:***

  1. 检查根节点的数据。如果这是你想要的,太好了!如果没有,查看根节点的数据是大于还是小于您的目标。如果它比你的目标大,进行第二步。如果比你的目标少,就去第三步。**
  2. 转到左侧的子节点。(根节点的边被指定为*;左边的边指向左边的子节点。)将这个左边的子节点视为新的根节点,并返回到步骤#1。***
  3. 转到右侧的子节点。将这个右边的子节点视为新的根节点,并返回到步骤#1。**

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

Photo by Micah Hallahan on Unsplash

当然,上面的步骤假设树的节点包含数字形式的数据。也可以将基于单词的数据(称为 字符串 )存储在树中。在这种情况下,排序将基于字母顺序,而不是数字升序。

那么这些和丹妮莉丝有什么关系呢?! 大问题!首先,让我们把我们现在对树木的了解应用到人类的视角中。根节点是一个人潜在的引导问题*,他们用它来建立对世界和周围人的感知。边缘不像二叉查找树的那样有左右指示符,而是每个都与那个问题的一个可能答案相关联。一条标记有清晰的、基于行动的答案的边将指向一个叶节点**,它的数据就是这个人应该做出的决定性决定。标有“需要进一步调查”注释的边将指向另一个有另一个问题的节点,该节点有自己的边指向有答案或更多问题的其他节点。*****

毫不夸张地说,丹妮莉丝不屈的“支持我或反对我”的心态最好被描述为一棵二叉树*,它有三个总节点:带着她的问题的根节点,带着她可能的选择的两个子节点,以及带着引导这些选择的答案的关联。***

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

“Game of Thrones Sigils” by Jig Ignacio is licensed under CC BY-NC-ND 4.0

根节点的数据提出了这样的问题,“这个人是无条件支持我的主张,还是他们威胁了我的王位继承权?

一条代表答案,“他们无条件支持我的主张;他们是我的。“它指向接受和同情的决定性决定,丹妮莉丝在她的故事中多次展示了这两者。**

其他边缘边缘代表答案,“**他们威胁到我的王位;他们是我。”它指向了杀死他们*(或者很可能,在丹妮莉丝看来,甚至在没有审判的情况下“处决”他们),很可能是用龙火。丹妮莉丝已经杀害了多名持不同政见者,显然她认为他们不值得她的怜悯和同情。***

一个更成熟的树木模型不会如此黑白分明。它不会被限制为只有两种选择,只有两种可能的结果(因此不能用二叉树来表示)。更熟练的《权力的游戏》玩家(玛格丽·泰里尔奥莱娜·泰里尔培提尔·贝里席瓦里斯浮现在脑海中)最好用一个有很多很多节点的复杂树来表示。**

希望这篇博文能启发你对丹妮莉丝·坦格利安和/或树数据结构的理解!如果你对你所读的有任何想法或评论,请在下面与我分享。

参考资料和进一步阅读

区块链的可扩展性问题&类似 Visa 的交易速度竞赛

原文:https://towardsdatascience.com/the-blockchain-scalability-problem-the-race-for-visa-like-transaction-speed-5cce48f9d44?source=collection_archive---------0-----------------------

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

区块链系列的未来

是的,区块链有一个可扩展性问题。这就是问题所在,这就是人们正在解决的问题。

对可扩展解决方案的争夺是区块链的登月竞赛。比特币每秒处理 4.6 笔交易。Visa 平均每秒处理大约1700 笔交易(根据官方声称的每天超过 1.5 亿笔交易计算得出)。采用的可能性是存在的,但是目前受到可伸缩性的限制。

Tata Communications 在 2018 年发表的一项研究显示,在其调查中,44%的组织正在采用区块链,但也暗示了部署新技术带来的普遍问题。从架构层面来看,未解决的可伸缩性问题正在成为区块链采用和实际应用的瓶颈。

正如 Deloitte Insights 所说,“区块链的系统相对较慢。区块链缓慢的交易速度是依赖高性能遗留交易处理系统的企业的主要担忧。”世界在 2017 年和 2018 年尝到了可扩展性问题的滋味:比特币网络上严重的传输延迟和高昂的费用,以及臭名昭著的 Cryptokitties 应用程序,它使以太坊区块链网络(数千个分散的应用程序依赖的网络)拥塞。

如今的区块链扩展性到底有多差?

为了扩展区块链,通过降低哈希复杂度来增加块大小或减少块时间是不够的。无论采用哪种方法,在达到与 Visa 这样的企业竞争所需的交易量之前,扩展能力都会达到一个上限,Visa "平均每天处理 1.5 亿笔交易"或每秒约 1,736 笔交易(TPS)。

相比之下,比特币的交易速度要低得多。目前,块大小设置为 1MB (1,048,576 字节——尽管通过 SegWit,该大小可以扩展到理论上的 4MB ),并且平均事务大小为 380.04 字节(假设每个事务都是从一个钱包到 x 个其他钱包——因此批量事务将被计为一个事务。稍后我会更多地谈论批量交易以及我为什么这样标记它)并且似乎在上升。因此,目前一个比特币区块可以容纳的平均交易量计算如下:

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

目前比特币区块生成时间为 10 分钟;即每十分钟开采一个新的区块。十分钟(600 秒)内,基于之前的假设,比特币平均可以交易 2759.12 笔左右。换句话说,比特币区块链目前只能保证每秒 4.6 次交易。

增加块大小或减少块生成时间并不能解决问题:看看非 SegWit TPS

可扩展性问题与区块链的价值主张打包在一起;因此,不能简单地通过改变区块链中的参数来提高可伸缩性。

比特币社区可以调整两个变量来尝试增加 TPS。一个变量是块大小(B),目前硬编码为 1MB。理想情况下,应该增加 B 来增加 TPS。另一个变量是块生成时间(TB),它可以通过改变哈希难题的复杂性来调整。理想情况下,应该减少 TB 来增加 TPS。

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

Table 1: the different scenarios for increasing TPS will be examined in the section below. Only in S1 and S2 can the Bitcoin blockchain achieve Visa-like TPS, but both scenarios are impossible due to transaction propagation time, which will be discussed in this section as well.

场景 1 &场景 2

为了从 4.4 增长到 Visa 的 1736,比特币需要将其 TPS 扩大 377.5 倍。换句话说,B 需要从 1MB 增加到 377.5MB(表 1,s 1),或者 TB 需要从 10 分钟减少到 1.6 秒(表 1,S2)。第三种情况是两者都调整。由于第三个不可控因素,这三种情况中的任何一种都无法在区块链上实现:向比特币网络上的每个节点广播一个新块所需的中继时间(TR)。

目前,比特币网络中估计有 10,198 个节点。通过对等网络传输 1MB (1,048,576 字节)需要一些时间。卡尔斯鲁厄理工学院测量了比特币的块传播时间,2019 年 1 月 17 日报告的平均块传播时间为 13989.42 毫秒,即传播到 99%的网络大约需要 14 秒。TB 不能低于 TR (TR99)=14 的 99%,因为如果这样,那么在网络中的大多数块接收到旧块之前,将会产生新块。TB 越接近 TR99,分叉、孤立块和链重组以及(在极端情况下)双重开销攻击等安全漏洞就越多。

场景三

即使 TB = TR99 = 14,块大小为 1MB,比特币区块链也只能将其速度提高到 188 TPS(表 1,S3)。虽然这一规模代表着 TPS 增长了 188 倍,但与 TPS 签证每天 1,736 次的处理量相去甚远;此外,它增加了上述风险。另一个变量 B 可以重新调整,但不会影响 TR,这会影响 TR99,从而影响 TB 的下限。

场景四

例如,通过将 B 的大小增加一倍(从 1MB 增加到 2MB),网络上每个节点下载一个新块的时间 TR 也会增加—大约 2 倍;因此,在 2MB 时,TR99 = 28s,所以 TB 的下限也应该是 28s。通过将 B 增加任何因子,然后将 TR 增加相同的因子,净 TPS 将保持不变——在这种情况下,大约为 188 TPS(表 1,S4)。降低 TR 对 B 的影响的一个解决方案是增加比特币网络中所有节点的带宽。不幸的是,因为它是一个 P2P 网络,这个责任落在网络中每个对等体的肩上。

赛格维特的出现

2017 年,隔离见证(SegWit)在所有比特币节点生效。注意——我不会深入 SegWit 的所有细节,但如果你想了解它的历史及其在比特币现金硬分叉出现中的作用,请看看这篇文章:

[## 通往 SegWit 的漫长道路:比特币最大的协议升级如何成为现实

隔离证人(SegWit)已在比特币上激活。截至今天,比特币网络上所有支持 SegWit 的节点都是…

bitcoinmagazine.com](https://bitcoinmagazine.com/articles/long-road-segwit-how-bitcoins-biggest-protocol-upgrade-became-reality/)

顾名思义,它将每个事务的见证部分与实际的事务数据分离开来。它作为一个软分支出现,所以它的建立对现有的区块链网络和代码没有任何重大影响。由于见证交易的加权方式,新的支持 SegWit 的比特币块理论上可以增加到 4MB,而不改变比特币块的大小。

我说理论上是因为还有其他因素影响 SegWit 块的最终大小。事实上,如果你查看比特币区块链浏览器,你会发现(至少在这篇文章发表的时候)平均块大小仍然低于 1MB。

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

Source: https://www.blockchain.com/charts

但这并不是说块不能超过 1MB。在 2018 年初,我们见证了最大的(可能仍然是最大的)块大小之一,重量约为 2.1MB 。SegWit 的软分叉有助于在不改变核心代码的情况下改善块大小,但它仍然没有以可伸缩的方式改善 TPS。

当在工作验证共识下检查之前的四个场景时,我们看到,简单地增加块大小或降低挖掘复杂性只能让我们到此为止。由于事务传播时间的原因,即使是这两者的组合也会受到限制。试图挖掘比旧块传播速度更快的新块将导致一些相当大的安全问题。与此同时,SegWit 帮助缓解了一些 TPS 问题,但仍需要一个更具可扩展性的解决方案来实现类似 Visa 的 TPS。

似乎在区块链拼图中,将任何一个棋子移动到适当的位置来增加 TPS,都会将另一个棋子移出适当的位置;无论如何,有一些项目和初创公司正在努力实现将区块链的采用推向可扩展阶段所需的 TPS 答案。

解决可扩展性的现有和未来方法

在寻找可伸缩性问题的潜在答案时,会出现许多其他问题。例如,如果答案只适用于一个特定的区块链,那么它依赖于一个假设,即特定的区块链将是未来需要可伸缩性的那个;否则,这种努力就是不适当的或错误的。另一个考虑是要了解权衡可能是什么。目前,所有可用的解决方案都有局限性。

1.一次交易批量付款

优点:通过将多个事务放入一个事务中来减少事务记录的大小,允许每个块中有更多的事务,这可以在一定程度上提高 TPS。

缺点:不能批量处理多个钱包的交易;隐私风险

批量支付一直是比特币的一个特点(因此,比特币的分支包括 Digibyte、Dogecoin、比特币现金等。)通过 RPC 发送许多。交易所已经这样做了,当你试图在区块链浏览器上查找你的交易 ID 时,你就能看到。您最终可能会看到一个钱包发送给多个不同的钱包。这样的话,就是批量交易

这样做的好处是,将它放在一个事务中意味着 1)您只需支付一笔事务费,2)您不必为每个事务编写一个完整的事务,如我前面所述,大约 380 字节。事实上,在事务可能的 380 个字节中,只有 34 个字节可能是事务信息。

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

Only a small portion of a transaction record on the block actually talks about the transaction.

例如,如果我想一次发送十个事务,并且我将它们作为单独的事务发送,那么我将在一个块上占用 380 x 10 = 3,800 字节的空间。另一方面,如果我将事务一起批处理,块中的第一个事务将包含在 380 个字节中,接下来的 9 个事务每个都是 34 个字节;即 380+(34×9)= 686 字节,小了 5.5 倍。

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

If these transactions weren’t batched, then the size of this would be: 10 transactions x 380 bytes per transaction = 3,800 bytes

不过,它也有局限性;不同钱包的不同交易不能批量处理。换句话说,如果有 10 个人排队买咖啡,那 10 个人不可能把他们所有的交易放在一起,然后从星巴克送出。每个人都必须产生一个单独的交易。批量交易仅限于一对多,不能多对一。例如,在支付账单(电费、互联网费、电话费、网飞、Hulu、保险费等)时,批量交易会非常有用。)立刻。

此外,出于隐私考虑,您可能不想进行批量交易。正如 David A. Harding 在他关于比特币批量交易的文章中提到的,如果你要做工资单,批量交易中的一个隐私问题可能会出现——任何人都可以检查他们的交易,并查看其他员工发送了什么钱包。

2.比特币现金

优点:可以在一个块中存储比比特币更多的交易,这增加了有能力的 TPS

缺点:这只是一个临时解决方案,因为它的 TPS 仍然远远低于 Visa 平均每天 1700 次的全球 TPS。该解决方案也仅限于比特币现金,因此它不能成为其他区块链的解决方案。

如果您回头看看我之前提出的从理论上扩展 TPS 的场景,场景 1 可能听起来很熟悉。这是因为对它的尝试已经发生了——即 2017 年 8 月发生的比特币现金硬分叉。硬分叉的主要动机是将块大小从 1MB 非 SegWit 比特币块增加到 8MB(增加了 8 倍)。

但是在最好的情况下,这个解决方案仍然远远没有达到人们在可伸缩性方面所寻求的答案。

比特币现金是比特币的一个硬分支,旨在作为比特币的替代品,具有更快交易的附加值主张。它主要增加块大小(B);尽管与比特币相比,它的交易速度有所提高,但它仍然没有足够的 TPS 来参与全球交易领域的竞争。

3.闪电网络

优点:双方之间近乎即时的交易,没有任何费用

缺点:交易发生在链外,需要用户有一个闪电节点,并且仅限于基于比特币核心的区块链(如比特币现金、莱特币、Digibyte、Dogecoin)

对于本文来说,深入了解 Lightning 网络如何在粒度级别上工作的细节有点太详细了,但是有大量的资源以我认为容易理解的方式指导您。简而言之,闪电网络让你可以将比特币带出区块链,与另一方私下交易。例如,我可能计划下个月每天早上喝咖啡。我想用比特币交易,但我不想像一个不知道闪电网络是什么的呆子一样,站在咖啡柜台前等待我的大宗交易确认。

所以我做的是,我可以在闪电网络上创建一个所谓的支付通道。这种新的支付渠道不通过比特币区块链进行交易,而是将其视为一种储备。我存了,比如说 0.5 BTC,这是一笔储备金,然后我可以用它来支付我在闪电网络上联系到的任何人。

一旦我完成了,我回到区块链并告诉它,“嘿,我在一个月的过程中给星巴克 0.1 BTC 买咖啡,只要从我最初投入的余额中扣除它。”那么我还剩 0.4 BTC。当然,这是解释实际情况的一种非常简单的方式,所以如果您想了解 Lightning 网络的特性,一定要看看其他资源。

不幸的是,这是一个比特币专用的离线交易解决方案,可用于比特币和比特币分叉的区块链,如 Digibyte 和 Litecoin。闪电网络提供的优势是即时和零费用交易,这使得微交易以及购买咖啡的能力无需等待。

然而,在目前阶段,创建支付渠道需要的知识比普通比特币买家可能熟悉的知识多一点,而且它仍然需要用户闪电节点生命周期前后的链上交易。因此,闪电网络对于比特币和类似比特币的加密货币来说是一个很好的解决方案,但它只解决了链外问题。

4.EOS 和其他高性能区块链

优点:高理论可扩展性

缺点:中央集权会导致(历史上也曾导致)审查

高绩效区块链项目使用不同的共识机制。工作证明(PoW)最受欢迎的替代方法之一是股份证明(PoS)。最近的一个项目,EOS,使用了它所谓的委托利益证明(dPoS),这是 PoS 的一个修改版本。在 dpo 中,像你我这样的用户实际上并不是虚拟化采矿过程的一部分;相反,我们投票决定谁是。EO 使用授权 PoS(dpo)来申请多达 3,996 个 TP,但代价是集中化,这赋予了关键利益相关方比机构群体其他成员更多的权力。

EOS 只有 21 个节点(区块生产者),2018 年 6 月,那些区块生产者冻结了 7 个 EOS 账号。虽然冻结背后的理由可能是合理的,但它表明了一个组织对整个区块链的权力,以及他们执行这一权力的能力。

区块链社区需要可伸缩性,这是 EOS 受欢迎的原因,但代价是中央集权带来的审查和控制。关于其他可能损害 EOS 完整性的其他缺陷的列表,请看看这篇文章: EOS 不是区块链,而是一种美化的云计算服务(声明:该研究由 Consensys 资助,Consensys 的创始人是以太坊的联合创始人)。

5.bloXroute

优点:它是一个链上解决方案,不受区块链限制,因此它可能是所有区块链的可伸缩性的答案

缺点:它仍在开发中,建设/运营全球 CDN 是一项昂贵的壮举,在区块链领域尚未完成

在区块链特定的项目之外,初创公司开始出现,以更大的规模解决这个问题。到目前为止,我在这个领域看到的最有趣的项目之一是一家名为 bloXroute 的初创公司。上周,我在研究区块链领域时发现了这家公司。该公司背后的想法是将内容交付网络(CDN)移植到区块链网络上,以解决可扩展性问题。

什么是 CDN?

cdn 是今天提高网速的工具。这就是为什么当你打开下一个 YouTube 视频时,它不再需要向你显示加载微调器,让你等三分钟才能观看一分钟的视频。如果你以前从未经历过这些问题,你只是太年轻了,无法理解。

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

内容分发网络听起来复杂而奇特,虽然建立一个比你想象的更复杂,但想法很简单——将大容量内容放在靠近人群的计算机(称为服务器)上,这样,无论何时,比如说,曼哈顿的某人想要下载一段内容来观看,他们都不需要从加州圣克拉拉的某台计算机上下载;相反,在纽约附近的某个地方保存着一个更接近的版本。CDN 领域最大的公司是 Akamai 【纳斯达克股票代码:AKAM】,它是作为一个减少互联网上大文件延迟的解决方案而创建的。

出于同样的考虑,bloXroute 打算将 CDN 的概念作为区块链分布式网络(BDN)应用于区块链空间;毕竟,如果数据块的大小最终达到千兆字节,传输速度将成为一个问题。

bloXroute 计划于 2019 年在 Q1 试运行其 BDN。这项试验的结果将让我们更好地了解它在构建区块链全球网络方面的进展。此外,它还打算发行一种向股东支付股息的证券——BLXR。红利来自交易费,在 bloXroute 每区块链超过 100 TPS 后,将对每笔交易收取交易费。在我的后续文章中,我将更深入地研究 bloXroute。

后续步骤

在过去的几周里,我一直在阅读文章,与社区中的人们交谈,并试图尽可能多地了解区块链的可伸缩性问题,但这只是皮毛。在我的后续文章中,我将发布更多关于可伸缩性和可伸缩性解决方案的信息,以及我在这个领域看到的有趣的公司/项目。

有什么要补充的吗?我是不是想错了什么?请让我知道!

进一步阅读

读完这篇文章后,你可能会有比开始时更多的问题。这是有道理的——除非你准备好阅读一本书,否则我不可能详细讨论每一个话题。但是我在这篇文章中留下了我阅读的不同文章和论文的链接。如果你有时间并且希望你的问题得到解答,我强烈推荐你通读一遍。对于每个主题,他们比我讲得更详细。

让你开始机器学习的书

原文:https://towardsdatascience.com/the-book-to-really-start-you-on-machine-learning-47632059fd0e?source=collection_archive---------6-----------------------

让你的机器学习知识更上一层楼

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

Cover of the Book.

许多 ML 从业者经常被问到的一个问题是:“我能做些什么来开始真正建立机器学习项目和解决方案?”

外面有太多的信息——好的和坏的——以至于很难知道从哪里开始。此外,人们来自非常不同的背景,因此起点可能会有很大差异。例如,对我来说,我是通过观看计算机科学频道关于神经网络的理论视频进入 ML 世界的,随着我越来越感兴趣,我开始阅读关于该主题的文章、新闻和博客。

然而,通过这样做,我只对机器学习最肤浅的部分有了模糊的理解,我根本无法独自解决一个项目。了解到这一点,我决定参加一些负担得起的 Udemy 机器学习课程。诸如此类的课程很有帮助,因为它们丰富和提高了我的知识,还涵盖了不同算法和模型的一些 Python 实现。

尽管如此,这些课程并没有让我满足于 a 所知道的东西,我想更深入地了解每一次对话,了解算法的精髓,并了解如何自己构建一个端到端的机器学习项目。我希望能够有一个想法,建立或下载一个数据集,并执行它。

这就是我要讲的这本书的由来。

注意:这篇文章包含附属链接,这样你就可以轻松地购买任何一本书,而不需要额外付费,同时有助于创建更多像这样的帖子。

不久前我读了这本书,但是随着它的新版本的出版,我认为分享我对它的想法是个好主意。

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

Old edition of the Book.

本书是“ 用 Scikit 动手机器学习——学习&tensor flow。这是一本最初于 2017 年出版的书,但在我看来,每一个新的版本都已经成为通过实践学习机器学习的最佳深度资源之一的更好版本。

这本书是给谁的?

这本书 是为机器学习的初学者设计的,他们正在寻找一种实用的学习方法,通过构建项目并在特定的环境下研究不同的机器学习算法。完成整本书后,你应该准备好自己面对一个项目,并适应这个过程中的不同步骤。

尽管这是一本相当有创意的书,但它也将为中级机器学习从业者的工具箱添加一些工具。

这本书假设你有一定的 Python 编程经验,并且知道如何使用主要的科学库: Numpy、Pandas 和 Matplotlib

此外,如果你想最大限度地利用它,最好有一些基本的数学,代数和统计知识。除此之外,如果你愿意努力,你可以在很少或没有初步理解或机器学习的情况下轻松完成它。

一切都解释得非常清楚,有代码片段、注释和示例。

它包括什么?

正如我前面提到的,这是一本非常实用的书,第二章已经让你开始工作并编写项目代码。在此之前,它描述了机器学习是什么,不是什么,它的基本原理,以及它的主要应用和优势。

它展示了如何实现不同的机器学习算法,并涵盖了你所知道的关于它们的理论,而不必深入研究它,用数百万个复杂的方程来折磨你。最新版本由 19 章组成,分为两大块:

  • 第一部分、解释了分类、回归、降维和无监督学习技术的主要概念,以及传统的机器学习算法,如线性回归、逻辑回归、支持向量机、决策树或集成模型。
  • 第二部分,专注于使用 Tensorflow 和 Keras 的人工神经网络和深度学习。卷积神经网络和递归神经网络的解释,随着自动编码器,甚至有一章关于强化学习。

每一章都被进一步划分为一个更精细的结构,带我们一步一步地看完它,这本书还包含各种附录。

这些章节如下:

  • 第一部分 : 1。机器学习的前景,2。端到端机器学习项目,3。分类,4。训练模型,5。支持向量机,6。决策树,7。集成学习和随机森林,8。降维,9。无监督学习技术。
  • 第二部分 : 10。介绍人工神经网络与 Keras,11。训练深度神经网络,12。用 Tensorflow 定制模型和训练,13。用 Tensorflow 加载和预处理数据,14。使用卷积神经网络的深度计算机视觉,15。使用 RNNs 和 CNN 处理序列,16。使用 RNNs 和注意力的自然语言处理,17。使用自动编码器和 GANs 的表示学习和生成学习,18。强化学习,19。大规模训练和部署张量流模型。

正如我前面提到的,在每一章中,我们都会找到代码片段和旁注来补充解释,以及图形、图像和图表,在每一章的结尾都有一组问题和练习,这些问题和练习可以在其中一个附录中解决。

此外,一个非常有用的补充是在一个常见的机器学习项目中一步一步做什么的清单。

这本书怎么读?

每个人都是不同的,但对我来说,最有效的方法是一边在纸上读这本书,一边写笔记。与此同时,我会试着浏览代码,每次在这一章结束时,我会花时间回答问题和做小练习。如果我遇到困难或者不知道怎么做,我会重读这一章的某些部分或者在网上寻找信息。

这本书会对我产生什么影响?

如果你刚开始学习机器学习,这本书会把你所掌握的理论知识,进行相当程度的提升,然后在一些实际项目中运用。很多时候,我们无法测试我们对某事了解多少,直到我们试图把它付诸实践。通过阅读这本书,你将完全准备好从事你感兴趣的项目。

如果你已经了解机器学习,并参与过一些项目,这本书将总结你的理论知识,教你一些你可能忽略的实用技巧,并建议你如何以最佳方式构建你的项目。这是一本很棒的书,可以回答你日常工作中可能出现的具体问题。

下一步做什么?

在你读完这本书之后,我会鼓励你想出几个你想用机器学习做的项目,并把这本书放在身边,试着去执行它们。这将测试你在现实世界中的问题,让你面对机器学习项目的一些困难,并且你将建立一个解决问题的组合,这对你的学习和你未来成为机器学习工程师或数据科学家具有很高的价值。

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

Other Machine Learning books from my library

一旦你对处理这类项目感到舒适,如果你想更进一步,更接近专家,你可以尝试你用这本书做的同样的程序,但是用一个更高级的,像下面的一个:

或者,如果你对技术性较低的书籍感兴趣,并希望探索人工智能的好奇心、危险性和影响范围,你可以阅读以下书籍:

* [## 关于人工智能和机器学习的三本顶级书籍

三本令人难以置信的人工智能书籍,让你的思维开窍,思维活跃。

towardsdatascience.com](/three-top-books-about-artificial-intelligence-and-machine-learning-b48ff2fa3548)

此外,如果你想专攻机器学习的某个特定领域,你可以找一本关于这个主题的书,甚至是更专业的在线课程。

结束语

一如既往,我希望你喜欢这篇文章,并且我已经说服你去读这本书。

在这里您可以找到最新版本的链接:

如果你喜欢这篇文章,请在@ jaimezorno**Twitter 上关注我。还有,你可以看看我其他关于数据科学和机器学习的帖子 这里 。好好读!

有关机器学习和数据科学的更多资源,请查看以下资源库: 如何学习机器学习 !有关职业资源(工作、事件、技能测试),请访问AIgents.co——数据科学家职业社区&机器学习工程师

如果你想了解更多关于机器学习和人工智能的知识 请在 Medium 上关注我,敬请关注我的下一篇帖子!

在那之前,保重,享受人工智能!*

游戏中的大脑:电子游戏人工智能

原文:https://towardsdatascience.com/the-brains-in-games-video-game-ai-d0f601ccdf46?source=collection_archive---------8-----------------------

计算机如何思考:第五部分

到目前为止,我们探索的人工智能大多局限于转换和操纵数据的领域——进行预测、计算相似度和推导含义。计算能力的低成本,以及通过互联网大规模收集数据的能力,为以迄今为止不可能的方式部署这些算法创造了新的机会,而正是这些算法被在线平台用来挖掘用户的数据,以获取有价值的碎片,如数字页岩油。

但是还有另一种类型的人工智能,几乎与我们目前探索的完全无关。这种智力也许更普遍,当然也更明显,尽管它在很大程度上局限于大多数人生活中的一小部分。这就是电子游戏的人工智能。视频游戏采用算法来智能地响应玩家的输入。从《太空入侵者》中外星飞船的可预测模式,到《吃豆人》中反应灵敏得多的幽灵,最早的视频游戏使用数学过程来模仿有思维生物的行为。随着时间的推移,这些技术已经进化得非常复杂,产生了难以置信的复杂行为。就像我们之前看到的数据操作技术一样,它们的核心是一些令人惊讶的简单几何技巧。

在这篇文章中,我们将了解构成视频游戏功能的三类算法,它们是“转向”,控制简单的运动模式,“寻路”,在复杂环境中导航路径,以及“目标导向的行动规划”,这是制定更复杂行为的一种方式。

引导

“转向”是控制视频游戏中实体运动的一类算法的名称。每当计算机控制的角色移动时,它都会响应转向算法的指令,这是一系列的数学步骤,可以读取游戏的状态,计算每个元素的位置,并将其转换为向特定方向移动的指令。

为了帮助我们探索这些算法,我想向你们介绍一个我为此创造的小家伙。他没什么好看的,只是黑色背景上的一个红点,现在他根本不知道该怎么做。但是我们可以教他,并希望在这个过程中学到一些东西。

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

A close-up of our boy. He doesn’t do much right now.

第一个也是最基本的转向行为叫做“寻找”。没有目标,我们的男孩只是坐在一个地方。为了让他动起来,我们需要给他一些渴望的东西。首先,我们会给他灌输一种想要靠近鼠标指针的迫切愿望。这将让我们操纵他,看他如何改变方向。“seek”算法非常简单。男孩计算出到达目标的方向,并朝那个方向尽可能快地加速。

尽管他只不过是几行代码和屏幕上的一个红点,但一旦他活了过来,开始在屏幕上飞奔,我就不可能不去想象他身上一些不足的人格碎片。我的第一次迭代让这个男孩移动得太快,他的位置总是和鼠标指针完全匹配。这个版本的男孩没有任何个性——他只是鼠标指针的延伸,一个物体。但是一旦我让他慢下来,让他努力跟上指针,他就变得与众不同,一个有自己权利的人,一个我能感同身受的人。

男孩愉快地在屏幕上缩放,急切地追逐鼠标指针,并随着目标的移动而转向。但是当他达到目标时,奇怪的事情发生了。他跑过鼠标指针,然后像一只兴奋的小狗,在他的目标上来回跳舞。我们的“搜索”算法有问题。因为男孩总是朝着他的目标尽可能快地加速,当他到达目标时,他注定会超调。像一个反向的坦塔罗斯,他永远不能达到他的目标,只能超过它。要解决这个问题,我们必须给他多一个行为:“到达”。

“到达”几乎和“寻找”一样简单。男孩计算到目标的距离,如果距离很短,他就减小加速度。当他站在目标的正上方时,他的加速度减小到零。这让我们的男孩正好停在他的目标上。有了这两种行为,我们的小男孩高兴地跟着鼠标指针在屏幕上缩放,当他到达指针时,聪明地停下来。

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

I spent an unreasonable amount of time doing this

“寻求”的反义词是“逃离”,在许多方面甚至更简单。和以前一样,男孩计算着他的目标的方向,但是他没有朝目标加速,而是加速离开了。利用这种行为,我们快乐的小男孩变成了一个懦夫,从鼠标指针旁跑开,躲在一个角落里。只有当鼠标指针在他周围移动,并在另一个方向追逐他时,他才会离开这个藏身之处。

如果说我为那个追着鼠标指针跑的男孩感到高兴,那我就更被这个懦弱的版本迷住了。他可怜的恐惧,以及当他被困在角落里时,如果鼠标指针靠近他,他会颤抖的样子,唤起了我巨大的同情。理智上,我知道那个男孩只是一些代码行,一个响应一些输入参数确定一个角度的几何计算,并相应地在我的屏幕上移动一个点。但在情感上,不可能不把“逃离”算法的完全确定性输出解读为一种情感的表达。

这个男孩倾向于直接撞上障碍物,并坚持在那里直到他的目标移动,这是我们男孩行为中一个明显的缺陷。在开阔的地面上,他看起来很聪明,选择一条直接的路线到达目标。但是在他的路径上放一堵墙,他的寻找和逃离算法的简单性就变得显而易见了。他径直撞上了墙,并继续尽他最大的努力去推它,忘记了他对目标的缺乏进展。这可不行。为了帮助他,我们需要给他多一种行为,比我们到目前为止看到的更复杂一些。这就叫“忌”。

“避免”让我们的孩子转向以避开他路上的障碍,但要做到这一点,我们需要扩大孩子对周围世界的了解。到目前为止,他只知道关于这个世界的两个事实——他自己的位置和他的目标的位置。现在,我们需要他向前看,找出任何阻碍他前进的东西。这是用简单的几何图形完成的。我们在他的行进方向上画了一条线,距离由男孩移动的速度决定——他走得越快,他必须越早开始转弯以避开目标。如果我们画的线与一个障碍物相交,比如一堵墙,那么这个男孩知道他必须改变路线,否则就会相撞。他必须改变路线的方向是由与障碍物的投影交点决定的。我们在障碍物的中心和男孩预计会与障碍物碰撞的点之间画一条线。这条线,或者说“矢量”,正指向男孩必须急转弯以避开障碍物的确切方向。运用矢量数学,我们可以把这两条线加在一起,得到的矢量代表了我们孩子新的、修正过的路径,指引他安全地脱离危险。

有了这种新知识,我们的孩子可以在屏幕上飞奔,每当有障碍出现在他和他的目标之间,他就巧妙地绕过它。

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

Our boy is growing up!

在这套“驾驶”算法中还有最后一个行为,它处理的是根本没有目标的情况。让他自己的设备,没有目标逃跑或寻找,我们的男孩坐着不动。但是如果我们想让他有自己的,自我激励的运动呢?当他没有其他目标时,我们希望他自己蹒跚学步,没有特定的方向,而是或多或少随机地探索世界。这种行为被称为“徘徊”,是我们迄今为止见过的最复杂的算法。

“漫步”最简单的实现方式是让我们的孩子完全随机地选择每一步的方向,而不考虑他在哪里或去过哪里。但是这产生了一个不令人满意的结果。男孩战战兢兢地站在原地,朝任何方向都没有取得进展。这个男孩不再是一个在屏幕上跑来跑去的热切的年轻人,而是一个焦虑的残骸,在现场瑟瑟发抖。

另一种方法是让男孩随机选择一个目标,朝着这个目标前进,只有当他达到这个目标时才选择一个新的目标。这让男孩看起来更有目的,但还是不尽如人意。这个男孩会跑过屏幕的一半,然后掉头朝另一个方向跑去,就好像他刚刚发现自己忘记了什么。他跑向墙壁,虽然“躲避”行为阻止了他与墙壁相撞,但这让他的行为看起来很奇怪,像机器人一样。

创造一种令人信服的“漫步”行为出人意料地困难,而且选择更多地是由美学而不是数学来引导的。没有一个正确的选择,而是我们必须以我们的品味为导向——什么对我们来说是自然的?我选择的算法是让这个男孩沿着一条直线行进,但偶尔会稍微调整一下他的路线。结果是这个男孩愉快地四处游荡,不时地转来转去,忙着探索这个世界,有点像一只寻找食物的蚂蚁。

“寻找”、“逃离”和“徘徊”行为中的每一种都赋予了男孩独特的个性。当他寻找的时候,他热切而专注。当他逃跑时,他是胆怯和懦弱的。他流浪的时候,好奇而忙碌。如果我们给我们的孩子一些朋友,我们可以更清楚地看到这些性格。我们最初的男孩将继续追逐鼠标指针,使用“寻找”行为。他的第一个朋友我们称之为“懦弱的男孩”。利用“逃离”算法,他逃离任何靠近他的人——也许不是一个理想的朋友。我们将用下一个朋友“友好的男孩”来弥补这一点,他使用“寻找”来跟踪任何接近他的人。最后,我们将添加一个“忙碌的男孩”,他无视所有人,只是在屏幕上闲逛。

这四个小伙子都以特有的方式相互作用。我们最初的穿红衣服的男孩在鼠标指针后快速移动,把友好的黄色男孩拉在身后。如果这个热情的二人组靠近胆小的蓝衣男孩,他会冲进一个角落躲起来。与此同时,这个忙碌的男孩做着自己的事情,对这一切都浑然不觉,除非他碰巧徘徊在其他人的附近,在这种情况下,他的“避免”算法让他绕过他们。看着他们互相追逐,他们的个性更加明显,更难不把他们的动作想象成他们感情的表达,而不是简单的几何运算。当友好的男孩抓住懦弱的男孩,把他追到一个角落,忘记了他对同伴明显的厌恶,很难不同情懦弱的男孩,当友好的男孩在他身边蹦跳时,他在角落里发抖。

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

Poor yellow boy. Nobody wants to be his friend.

这些转向行为是游戏中更复杂的人工智能系统的构建模块,但它们几乎一点也不智能。它们远不如我们在前几章看到的最简单的算法复杂。但是令人着迷的是,虽然他们可能缺乏智力,但他们却拥有另一种更加无形的品质:个性。转向算法只不过是几何图形,但是当我看到我创造的小男孩跑来跑去的时候,我忍不住把动机和感觉归因于他。尽管我知道他的行为只不过是一些非常基本的代码行的输出,但我觉得肯定有更多的东西。他的个性不是这个男孩的品质,而是完全存在于我自己头脑中的东西。他变得不仅仅是他身体各部分的总和,他变成了一个人。但那个人只活在我的想象里。

为什么我很容易看出这个男孩有一些小的个性,而对于我们迄今为止看到的复杂得多的算法来说却不是这样?鼓励我同情这个男孩的品质是什么?这是“智力”,还是别的什么?当我看到更复杂的视频游戏智能系统时,我会回到这个问题。

寻路

我们的孩子很聪明!他可以在屏幕上缩放,追逐鼠标指针,甚至可以突然转向以避开挡路的障碍物。引导它运动的简单操纵算法产生了一种复杂的行为模式,给人一种“聪明”行为的错觉。但是有一个地方我们的孩子的简单大脑让他失望了。一堵直墙或另一个男孩在他的道路上并不会影响他——他只是转向一边,直到他清除了障碍。但是更复杂的形状——一个死胡同或者甚至一个深的角落——呈现出一个不可逾越的障碍。每当他不得不短暂地将从目标处移开以清除障碍时,这个男孩就完全被难住了。他被困在角落里,悲伤地用头撞墙,不知道如何前进。

为了帮助他,我们需要给他一些提前思考的方法——理解为了前进,他必须先向后看。我们要实现这个目标的方法叫做“寻路”。我们会给这个男孩一张假想的地图,让他画出一条通向目标的路线,避开中间的障碍物,并在他需要逃离死胡同时改变方向。

想象有一个看不见的网格覆盖在我们的孩子正在探索的世界上。这个网格由几十个节点组成,通过一根细线连接到它们的邻居。当这条线只穿过空白空间时,我们称之为网络中的“边”。但是当这条线被一个障碍物——一堵墙或者这个男孩的一个朋友——挡住时,我们就说这些节点是“不相连的”。结果是一种负空间版本的世界。在有开放空间的地方,网格是由节点和连接它们的边组成的规则网格。但是墙壁或其他障碍物会刺破网格,在网络中造成缺口。

这个格子是我们的孩子用来绘制路线的地图。男孩没有直接朝着自己的目标加速,而是更多的考虑。他找到网格中离自己最近的节点,以及离他的目标最近的节点。然后他计算出一条沿着网格边缘的路径,穿过所有的中间节点。在没有墙的地方,路径是通过那些直接在他和他的目标之间的节点的一条直线。但是在他前进的道路上有障碍的地方,网格的边缘不会跨越这些障碍。男孩的路径必须绕过网格中的这个缺口。有了这条路,男孩就能自信地找到自己的目标。他没有直接朝目标射击,而是朝着路径上的每个连续节点前进,确信因为有一条边连接着节点,所以在他的路上没有墙。

男孩如何通过节点和边构建路径是那些纯数学问题中的一个,对一组非常特定的人来说非常有趣,对其他人来说非常无聊,所以我在这里跳过这一点。可以说,这是一个经过充分探索的数学领域,可以以令人印象深刻的速度可靠地找到通过任意网格的或多或少的最优路径。这种令人印象深刻的速度意味着我们的男孩可以随着目标的移动重新计算他的路径,无缝地重新定向以绕过墙壁或完全改变方向,以准确无误地找到他的目标,无论它藏在哪里。即使遇到最险恶的迷宫,男孩也立即出发,从不拐错弯,毫不犹豫地穿过曲折的道路。

事实上,男孩解决迷宫的准确无误的技巧有一个有趣的,违反直觉的效果。以前,这个男孩对他的目标的热切追求,以及他轻率地走进角落和死胡同,有一种天真的魅力。他过于急切是可以理解的。现在,他毫不留情地追踪他的目标,毫不犹豫地避开路上的任何东西,消除了这种迷人的易错性。男孩拥有思想和欲望的幻想破灭了。我们有了一个不会思考的机器人,而不是一个渴望的男孩。讽刺的是,通过让这个男孩变得更聪明,我们让他看起来完全没有头脑。

问题是这个男孩已经被赋予了关于迷宫的完美知识,并且能够立刻准确无误地回忆起这些信息。我们不再能轻易地认同他的处境。为了让他的行为回到人类熟悉的领域,我们必须重新引入发现和错误的元素。这也需要我们增加大量的复杂性。

之前,这个男孩得到了一张迷宫地图——一个由节点和边组成的网络,显示出哪里有墙挡住了他的路。现在,我们给他一张白纸。他的节点和边的网络从完全连接开始,每个节点都有一条边连接到它的邻居。这个男孩相信任何地方都可以到达任何地方,直到他知道不是这样。这个学习过程由他记忆中的一系列已知的墙来控制。他知道的每一面墙都存放在那里。当男孩看到一堵新墙时,他会把它的尺寸存入记忆库,更新他对世界的理解。他在自己的世界地图上找到了与这面新墙相交的所有边,并从网格中剪掉了它们。然后,他重新计算他的目标路径。之前存在路径的地方,现在节点之间的边被移除,路径消失了。男孩必须找到一条新路线。当男孩在迷宫中移动时,他遇到了新的墙壁,并相应地更新了他的地图。当他发现他的路线尽头是一个死胡同时,他转身尝试另一条路。

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

Clever but a bit clumsy

当我们看着这个男孩用这种新算法穿越迷宫时,他又变得可爱了。他停下来,重新考虑,转身尝试新的方法。我们看着他转错弯,发现他的错误,然后回来尝试另一种方式。由于他的许多失误,他花了比以前长得多的时间来完成迷宫。但是,奇怪的是,他似乎更聪明,而不是更不聪明。他完成迷宫的速度较慢,但现在他真正地解决了一个难题,看着他,我们可以同情他。他从错误中学习,慢慢地成为穿越他所学的迷宫的专家。

我们的孩子现在相当老练了。他有记忆力,他可以看到周围世界的事情,他可以制定计划,并随着他对世界的理解的变化而更新计划。但是我们也发现了一些有趣的事情:让这个男孩看起来聪明的不是他的过程有多复杂,或者他在完成任务方面有多擅长。“智力”是不那么有形的东西。这是关于这个男孩的行为和人类行为有多相似。而是看着他,我们是否能看到自己。

面向目标的行动计划

我们就快搞定我们的孩子了。我们已经教他驾驶,所以他可以寻找或逃离一个目标,并避免沿途的障碍。我们教会了他寻路,这样他就能找到通往目标的路,即使这需要他走过一条复杂的道路。我们甚至给他一个基本的记忆——他可以记住他遇到的墙,并使用这些记忆更新他的计划以达到他的目标。但是所有这些追求目标的行为让人感觉有点目光短浅。我们的孩子在寻找银幕上的位置方面是一个世界级的天才,但是他不知道一旦他到了那里他要做什么。他有短期目标,但没有长期抱负。

让我们解决这个问题。让我们给我们的孩子一些制定计划的便利:“首先我要做这个,然后我要做那个”。我们会让他不仅在寻找目标方面更熟练,而且在解决实际的问题上更熟练。举例来说,这使得动作视频游戏中的警卫可以在一个区域巡逻,并攻击他们发现的任何入侵者。这就是《T4》中的幽灵和《模拟人生》中的角色之间的区别,前者遵循各自简单的套路在迷宫中追逐玩家,后者过着复杂的生活,遵循复杂的套路,只需要人类玩家最起码的指导。

有很多方法可以做到这一点,但我们要使用的方法是一种已经在许多流行的视频游戏中以某种形式使用的方法。它被称为“面向目标的行动规划”,它利用了一些我们已经了解过的相同的寻路算法。

想象你在一个锁着的房间里,你想出去。在房间里,你可以看到一把钥匙。在你的头脑中,你形成一个计划:去找钥匙,拿起钥匙,去开门,打开门,离开房间。这不是一个复杂的计划,但它相当重要。在你打开它之前,你不能打开门。除非你有钥匙,否则去开门是没有意义的。这些操作需要以特定的顺序执行才能成功。想象一个更复杂的场景:早上准备去上班。为了准时上班,穿好衣服,保持整洁,你需要采取一系列的行动。有些可以按任何顺序发生,有些有复杂的要求。要吃早餐,你需要去冰箱,拿出牛奶,去柜台,拿出一个碗,等等。要洗澡,你必须采取另外一系列的行动。但是你是先洗澡,还是先吃早餐,并不影响你最终工作的成功程度。面向目标的行动计划的关键在于,这些行动序列可以用我们用于寻路的相同的“节点和边”概念来表达。简单的锁定房间场景是一条直线路径。要到达“拾取密钥”,您必须通过“转到密钥”。要进入“解锁门”,您必须通过“拿起钥匙”和“进入门”。只有一种方法来排列顺序以达到最终目标。“准备工作”图要复杂得多。例如,“冰箱——柜台——碗——早餐”路径。但将这些联系起来是一个复杂的联系网络——事情可以以任何顺序发生——如果你愿意,你可以在洗澡时刷牙(尽管我觉得这是错误的)。你可以两只袜子都穿上,然后两只鞋子都穿上,或者完全完成一只脚的穿戴后再继续下一只(这在我看来也是错误的——就像一只脚短暂地过度穿戴)。

这一过长的题外话进入了我对早晨日常事务的看法,这是一种描述事物的复杂方式,在计算机的抽象语言中,可以通过两个相关联的概念来非常简单地表示:“状态”是关于世界的真实事物。你洗过澡了吗?你带牙刷了吗?“行动”是你能做的事情。“去洗澡”,“拿起你的牙刷”。行动有结果——它们改变世界的状态——它们也有要求——这些要求对于要采取的行动必须是真实的。在算法的语言中,状态是节点,动作是边——它们形成了一个“图形”,就像帮助我们的男孩导航迷宫的网格一样,但这一次是抽象概念的地图,而不是物理空间。为了制定一个计划,男孩通过这个状态和行动的网络计算出一条路径,直到他到达我们的“目标”状态。

这是我们的孩子已经知道如何做的事情!我们已经学习了寻路,以及构建表示物理路径的节点和边的网格。唯一的变化是在更抽象的状态领域中构建这个网格。为了帮助我们做到这一点,我们要给我们的孩子一份工作。像许多在这个世界上起步的年轻人一样,他的第一份工作将是在零售业。

首先我们要建立他的商店。我们将添加一些代表过道的墙,一个角落里的小房间代表储藏室,一个小盒子代表柜台。所有这些都是用和我们之前用来创建一个男孩可以导航的迷宫一样的概念创建的。男孩可以用完全相同的方式探索他的商店。目前,这个男孩只有一份工作,为顾客打扫卫生。像许多零售员工一样,这个男孩对于如何工作没有太多选择。他对世界的理解可以用一个非常简单的网络来表示:

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

每个圈是一个“状态”,圈与圈之间的线是“动作”。为了实现他的目标——达到“干净的混乱”状态,他必须采取“干净的混乱”行动。但他只有在“接近狼狈”的状态下才能采取那种行动。为了到达那里,他必须采取“去食堂”的行动,这只有在他处于“能看见食堂”的状态时才有可能。“目标导向的行动计划”所实现的是允许男孩通过这些状态和行动导航一条路径。他知道他必须采取适当行动的顺序。更重要的是,如果他在这些行动中被打断,他可以从他停止的地方继续。

实际情况是这样的:他漫无目的地四处游荡,直到发现一片狼藉,然后他开始一个简单的例行程序:去那片狼藉,清理干净。去食堂,男孩必须使用他的物理寻路和驾驶技能导航到正确的位置。为了清理,男孩可能会暂停一段时间。在更复杂的模拟中,我们可能会播放一个男孩疯狂拖地的动画。

多么苦差事啊!在这个阶段,男孩的行为并不比以前复杂多少。我们的孩子在浪费他的潜力!是他承担更大责任的时候了。他忠实地完成了一段时间的清洁工作后,让我们给他一个额外的任务。没有顾客就没有店铺功能,那就介绍一些吧。就像这个男孩一样,顾客有一系列他们可以采取的状态和行动——在商店里寻找一件商品,走向它,拿起它,把它拿到柜台,等待援助,为商品付款,然后离开商店。这个男孩得到了一组补充的状态和动作:如果一个顾客在柜台前,去柜台,把商品卖给他们。

现在他有两个优先事项。如果有顾客在柜台前等着,他就会去那里销售。如果车间里一片狼藉,他会跑去打扫干净。在这期间,他焦急地徘徊,寻找机会帮忙。由于底层决策架构的灵活性,我们能够非常容易地添加这样的新职责。每个状态和动作只是网格中的一个节点和一条边。给孩子设定新的目标就像确定哪些州需要实现目标一样简单。添加新动作就像描述它们的需求和结果一样简单。随着新的目标、行动和状态被添加到世界中,男孩可以通过这个行动网格无缝地绘制新的路径,通过组合一系列会导致实现所需状态的行动来找出如何实现他的新目标。

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

Our boy, hard at work

我们的男孩(忠实的红点)在商店里跑来跑去,寻找脏东西(绿点),他通过来回奔跑来清理它们。顾客(橙色点)从左上角进入商店,寻找商品(灰色点)。当他们找到它们时,他们把它们捡起来,带到柜台(右下角),在那里等待我们的男孩。当男孩看到他们时,他冲过去向他们推销商品,这时他们回到屏幕的左上角离开商店。

所有这些工作的结果是在我们的屏幕上,在男孩的商店里,一个复杂的互动之舞。顾客来来往往,忙着四处寻找他们需要的商品。男孩急切地追逐着商店地板上的食物,当他注意到顾客在等待时,他冲过去拿走他们的付款。尽管画面简陋,动作略显笨拙,但整个作品呈现出令人信服的生活场景。每个顾客都在按照自己简单的冲动行事,这个男孩并不比他更复杂,但是在一起互动时,我们观察到一个迷人的现象:涌现。“涌现”是指简单系统在大规模互动时产生复杂行为。由于目标设定行为,两个顾客为同一件商品相互竞争。男孩和顾客共享的“回避”转向导致他们在相遇时笨拙地绕着对方跳舞。最有趣的是,我们发现脏乱堆积在商店远离柜台的角落——男孩被拉回到柜台向顾客出售物品,然后才能走到远处的角落去打扫。这个男孩的行为变得难以预测。他的内部状态由几个不断变化的元素的位置决定,很难理解是什么决定了他的决策。我们的模拟,商店,足够简单,给定时间,我们可以根据控制男孩行为的简单算法来分解每个动作和反应,但是随着复杂性的增加,这样做变得越来越没用。几乎不可避免的是,用我们用来描述现实生活和人际交往的语言,根据男孩的欲望和偏好来解释他的行为开始变得很自然。“他把那位顾客推开,这样他就可以去收拾那些乱七八糟的东西”,“当一堵墙后面有一堆乱七八糟的东西时,他会感到困惑”。“直到那些顾客等了一会儿,他才看到他们”。“他懒得打扫整个商店”。

最近几篇文章关注的是人工智能的一个分支,这个分支与数据科学和机器学习的世界关系不大,这个领域最先进的研究都发生在那里。在许多方面,驱动视频游戏“机器人”的算法是微不足道的,与新兴的计算机智能领域没有太大的关联。但在另一种意义上,这些算法是与人类人工智能体验最相关的一些算法。与几乎任何其他类型的人工智能相比,视频游戏机器人处于人/计算机关系的最前沿——它们是同类中最“像人”的,尽管在数学上往往远没有那么复杂。这是来自这些算法的关键见解:它是关联性,而不是复杂性,它是*同理心,*而不是处理能力,它定义了我们认为什么是智能的,我们认为什么是“像我们一样”。

本系列上一篇文章《 电影数学:计算机如何理解文字 》,此处可用*。这篇文章的代码可以从我的 github,* 这里

这一系列的下一篇文章将于六月出版。

分支定界算法

原文:https://towardsdatascience.com/the-branch-and-bound-algorithm-a7ae4d227a69?source=collection_archive---------4-----------------------

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

Photo by Valeriy Andrushko on Unsplash

简单地说,这是优化中最常用的算法之一,是混合整数编程的支柱。

你们大多数人可能听说过混合整数编程,或者更一般的离散优化。在本文中,我们将讨论混合整数编程背后的驱动力算法,即分支定界算法。

首先,让我们一般地定义一个优化问题,这样我们就在同一页上了。优化问题可以非常简单地总结为一行:

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

在这个等式中,我们实际上是说,我们希望通过来自集合 X.x 来最小化函数 f (也称为成本函数)。集合 X 可能是所有实数的集合,可能是整数的集合……也可能是包含实数和整数的向量的集合(这是混合整数编程的大多数情况)。需要记住的一点是 X可行集。所以我们只需要关心这个集合中的解。

分支定界算法的思想很简单。给定 X 的某些子集,它找到成本函数 f 的边界。我们如何准确地得到这些子集?例如,如果我们的解向量 x 的某些成员是整数,并且我们知道这些成员在 0 和 2 之间。然后,我们将从第一个成员开始,探索向量的该维度的每个值的解决方案。这种搜索过程产生如下所示的树形结构(假设不同的整数解在 1 和 5 之间枚举):

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

可行集的不同子集包含在花括号中。从逻辑上讲,我们希望以最有效的方式搜索这棵树,在每个叶节点评估函数 f 可能会非常昂贵,并且可能涉及优化问题的连续变量。幸运的是,我们可以使用一些技巧来智能地限制父节点的成本,防止我们将它们一直扩展到叶节点,从而导致更有效的搜索策略。

分支定界算法依赖于优化中的边界原则,这只是一个用来描述非常直观的事物的花哨术语。想象可行集的子集, S1S2 。如果来自 S1 的解的上界低于 S2 的解的下界,那么显然不值得探究 S2 的解。这就是分支定界算法背后的全部魔力。从这一点开始,为了简洁起见,我将用 UB 表示上限,用 LB 表示下限,用 GUB 表示全局上限。现在是时候动手实践一下这个算法的具体例子了。

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

我们使用算法的方式如下。我们有一堆开放的节点,我们称之为开放。开放只是意味着它们还没有被完全探索。我们还跟踪全球上限 T21。在每一步中,我们从开集中取出一个节点并展开它,我们还评估它是否是叶节点。如果节点有子节点,我们查看子节点的 LBUB 。如果子节点的 LB 低于 GUB ,那么我们把它加到 OPEN 栈,如果高于全局 UB 那么就不值得探究了。此外,如果节点的 UB 低于全局 UB ,那么我们将全局 UB 更新为节点的 UB

让我们给上图一些上下限来说明这一点:

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

我们从一个无限的 GUB 开始。红色表示每个节点的成本,此外,为了简单起见,我们用一个数字(黑色)枚举树的每个节点。那么,应用分支定界会发生什么呢?首先, OPEN 栈将包含节点 1,因为它是根节点。我们从堆栈中弹出一个节点并展开它。我们现在看节点 2 和 3。我们看到节点 3 具有比当前 GUB 更低的 UB ,我们将 GUB 设置为 40 并将其添加到 OPEN 。节点 2 的 LB 仍然低于 GUB ,因此我们将其添加到 OPEN 堆栈中。我们再次从堆栈中弹出一个节点并查看子节点,现在我们查看节点 2 的子节点,我们看到节点 4 是一个叶节点,开销为 10。我们现在可以将 GUB 更新为 10 并进一步观察。节点 5 太贵了,所以没有提到。我们再次从堆栈中弹出一个节点(节点 3),但是我们看到节点 3 的 LB 高于当前的 GUB (10),因此我们不做任何事情。

在这一点上,算法完成,我们设法修剪所有的解决方案,将导致从节点 3。自然地,在实践具有数千个节点的分支和界限算法时,这个例子在这里说明了它的机制。神奇之处在于有效地导出解集的上下界,这本身就是一个完整的研究领域。

关于分支定界算法的一个更有用的事实是,它以更紧的界限递增地给出更好的解。这意味着,当算法提前终止时,有时也会给出有意义的解。这通常用于优化,以有意义的起点引导其他一些方法。这篇文章的要点是:

如果下限大于全局上限,那么在那里寻找解决方案是没有好处的!

我希望我能够对分支和绑定的机制有所了解。继续优化!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值