TowardsDataScience 博客中文翻译 2020(七十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

一个非常简单的方法来编辑熊猫数据帧中的一行一行

原文:https://towardsdatascience.com/a-really-simple-way-to-edit-row-by-row-in-a-pandas-dataframe-75d339cbd313?source=collection_archive---------2-----------------------

大蟒

使用 pd.loc 根据条件更改数据的子集。

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

图片由@ siscadraws 创建(Instagram)

您是否曾经需要根据某些条件编辑表格中的每一行?

这是数据分析项目的常见任务。每次需要这样做时,我都会在 StackOverflow 中搜索解决方案。最后,我阅读了 Pandas 文档,并创建了一个模板,每当我需要逐行编辑数据时,这个模板都能工作。

下面我们来看看如何使用熊猫。 loc 方法来选择你的数据的一个子集,如果它满足一个条件就编辑它。

注意,在尝试下面的任何代码之前,不要忘记导入熊猫。

import pandas as pd

对…的快速介绍。位置[]

熊猫文档对“有这样的描述。loc[] ":

通过标签或布尔数组访问一组行和列(在*.DataFrame*中)。

对于我们的例子,我们将使用这样的方法:

df.loc[row_indexer,column_indexer]

这里有一些样本数据,并举例说明了row_indexercolumn_indexer指的是什么。(关于如何获取样本数据的解释,请查看我的另一篇文章轻松从网站获取表格。)

df = pd.read_html('[https://finance.yahoo.com/quote/TSLA/profile?p=TSLA')[0](https://finance.yahoo.com/quote/TSLA/profile?p=TSLA')[0)]

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

摘自雅虎财经的样本表格

要设置一个row_indexer,您需要选择一个蓝色的值。最左边一列中的这些数字是“行索引”,用于标识每一行。一个column_indexer,你需要选择一个红色的值,它们是数据框的列名。

如果我们想要选择文本“Mr. Elon R. Musk”,我们需要执行以下操作:

df.loc[0,'Name']

这给了我们想要的输出:

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

选择 Elon Musk 名字的 df.loc 的输出

现在我们已经有了基本的东西,我们准备开始编辑我们的表格!

基于一组条件逐行编辑数据帧

现在,假设我们想要编辑表中一些人的“Title”值。让我们把埃隆·马斯克(Elon Musk)改成“老板”,扎卡里·柯克霍恩(Zachary Kirkhorn)改成“投资人”,其他人都改成“另一个家伙”。

我们需要遍历表中的每一行,检查“Name”值是什么,然后根据我们指定的更改编辑“Title”值。

为了逐行浏览数据,我们将使用 df.index ,它从数据帧中选择“行索引”。为了了解其工作原理,我们可以在一个基本的“for”循环中打印样本表中的索引:

for index in df.index:
    print(index)

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

for 循环的输出,用于打印数据帧的索引值

这为我们提供了与您在第一个屏幕截图中看到的最左边一列相同的值。

为了搜索和编辑数据帧中每一行的数据子集,我们使用下面的代码:

for index in df.index:
    if df.loc[index,'Name']=='Mr. Elon R. Musk':
        df.loc[index,'Title'] = 'The Boss Man'
    elif df.loc[index,'Name']=='Mr. Zachary J. Kirkhorn':
        df.loc[index,'Title'] = 'The Money Man'
    else:
        df.loc[index,'Title'] = 'Another Dude'

这个循环将遍历数据帧的每一行,检查“名称”是什么,然后根据它满足的条件编辑“标题”。我们的条件是,每一行的价值“名称”是否与“埃隆·r·马斯克先生”、“扎克里·j·柯克霍恩先生”和其他所有人在一起。

在本例中,因为第一行的“姓名”是“Mr. Elon R. Musk ”,所以脚本会将第一行的“头衔”值更改为“老板”。因为我们使用 df.loc[] 指定了行索引,所以它知道哪一行要执行这个更改。

生成的数据帧如下所示:

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

已编辑的数据帧,根据条件更改了“标题”值

我们已经根据前面指定的条件成功地更改了每一行的“Title”值!

我希望下一次您必须梳理成千上万的行并根据某些条件编辑值时,您会发现这很有用。

你应该查看一下 [df.loc[]文档](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html),了解更多关于如何使用该方法的信息。你也可以看看 Pandas 用户指南来获得更多关于索引和选择数据的提示。

编辑愉快!

ML-Ops 的配方:机器学习的扩展和操作

原文:https://towardsdatascience.com/a-recipe-for-ml-ops-scaling-operationlising-machine-learning-9a532e3ecd34?source=collection_archive---------50-----------------------

在解决问题方面,机器学习理论得到了更多的重视,但对操作化和商业化的思考太少。让我们探索一下如何将规模带入 ML 解决方案。

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

典型的机器学习生命周期&实现大规模 ML 解决方案的相应驱动因素

前提

本文旨在给出有效扩展机器学习解决方案所需的概念层次。

与质量取决于代码/平台架构的传统软件不同,数据科学/机器学习完全是关于微调指标质量不仅取决于代码/平台架构,还取决于数据和调整的程度。(来源:数据报)

这是一个持续改进的生命周期,除了与健壮的部署管道无缝集成之外,还必须不断地使用/试验多种技术。

作为我们讨论的基础,本文以可再生能源、风力预测为例。所使用的 ML 算法超出了本文的范围,但是我们将看到如何给引擎装上轮子,扩展以满足每天处理的万亿字节信号。

设定目标

捕捉问题定义与雇佣最好的数据科学家来解决问题一样重要。考虑到可再生能源预测领域,针对一般受众的单一目标可总结如下:

获取可用的最佳功率预测

根据地区法规/市场要求,根据所需的预测类型、提交时间、提交频率和预测粒度(例如:每小时、每半小时、每“n”分钟等)设定目标。

数据准备:

根据手头的问题,数据科学家需要决定训练和部署模型所需的数据类型。数据工程团队将并行工作以创建主干网,并考虑以下因素:

  1. 摄取方法(是否是 ftp、IOT、API、数据湖等)
  2. 数据量/频率
  3. 清洗/清洁:(去除噪声、副本、输入等)
  4. 可靠性(质量、完整性、解决数据缺口、延迟等)

模型开发/培训/评估:

数据科学家在检查可用数据的性质之前,不应该开始开发模型。

算法的选择应与当前预测问题的性质以及这些算法对数据中观察到的不规则性/噪声的响应程度相关联。

平台是从一开始就要做出的另一个重要选择:

  1. 可伸缩性:这方面不仅包括各种预测下的模型/代码可伸缩性,还包括条件。为概念验证而编写的代码很少是可伸缩的。为可伸缩系统编写代码时,本质会发生变化,甚至数据科学家也可能需要忘记和重新学习。
  2. 该平台需要容纳一个高效的数据管道:一个健壮的系统,用于及时接收、存储和检索,以便每天进行多次预测。
  3. 再现性,跟踪&存储:全新场景培训的初始阶段包括实验和比后期更多的微调。因此,重要的是每个实验在所有水平上都是可重复的:即,模型被训练的条件。(注意:模型版本化不同于代码版本化,这里模型将被标记上所有用于重新生成模型的工件。诸如ml flow等框架都内置了这些特性。)。
  4. 标准化:无论使用何种方法/算法,都应采用即插即用格式,与外部子系统的接口(如果适用)应通过标准接口,最好通过 API 封装。
  5. 度量/ KPI s:性能度量的选择取决于领域,并且主要由业务参数驱动。例如:与准确性相关的指标,如 nmae、RMSE、MAPE 等。正被用于预测分析领域。
  6. 当然,对于用于开发模型的代码和输入配置文件,隐含了软件配置管理&版本控制的原则。
  7. 产品化就是让模型适应现实世界的条件,在这种条件下模型要经受 *。*通常在纸面上或概念证明通常会在交叉验证层面产生良好的结果,但需要详细考虑的是操作准确性。通常,在部署到生产中之前,应在近场条件下评估模型。尽管模型性能是一个主观的问题,但是新的模型应该至少比部署的模型大几个点,如果不是这样,回归系统应该发出警报,并且记录异常/异常值。

部署:

  1. 成本&规模:风力发电场通常根据其能源容量和资产数量进行分级。每个客户都需要一个基于单个服务器场的预测,或者需要一个包含多个服务器场的合并提交格式的预测,因此,每次部署的计算成本可能会有很大差异。与此同时,平台和架构的选择应该确保成本不会随着部署的增加而呈指数增长,并且最终会趋于平稳。
  2. 可扩展的机器学习平台在不断发展,因此频繁的升级和图书馆的 eol ( *寿命终止)*公告是常见的。因此,任何类型的软件升级,无论是更新的型号,还是库升级,都应该是 100%自动化的。同样,解决方案架构扮演着重要的角色。理想情况下,基于容器的实现是首选,但这同样取决于要解决的问题以及随之而来的约束。
  3. 部署模型的可审核性与可再现性同样重要;如果某项工作失败或未能以最佳方式执行,了解其原因非常重要,这将直接影响客户的响应时间。

监控/诊断/反馈回路:

  1. 机器学习是一个持续改进的过程,因此部署模型意味着开发监控工具来提供可操作的见解。这些包括指标、异常值、异常值等。大多数公司低估了为此目的构建内部工具的优势,因为这些工具捕捉了这些模型所暴露的实际工作环境。
  2. 由于季节变化、有限数据集上的训练、数据管道问题等,模型会随时间漂移。因此,安装一个漂移监控系统有利于操作。主动预警机制确保一个运行良好的系统能够管理大量模型。
  3. 在设定部署目标的阶段,客户可能没有用于比较性能的基准数据。但是,一旦每日预测到位,更多的洞察力就会产生,从而导致一组更精确的目标。这最后一英里的连接是一个重要的环节,它导致从现场到产品管理/数据科学家的反馈循环。这通常会导致目标、再培训和度量的细化。

ML-Ops 与 Dev-Ops

Dev-Ops 致力于建立生产大规模软件解决方案的自动化管道。因为预期的 o/p 是已知的,所以基于规则的系统非常适合这个范例。

但是,由于预测解决方案的主观性质(即,这里没有放之四海而皆准的标准,即期望的准确性水平)。),因此为管道移植严格的基于规则的通过/失败方法可能不适用于 ML-Ops 中的所有级别。

典型的部署管道可能包括以下内容:

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

Airflow、Luigi 等是工作流创作工具的例子。它们标识了作业之间的依赖关系,并在出现故障时挂钩要采取的行动。调度通常包括设置 cron 作业——有许多类型的语法,有时当有复杂的调度时,创造性地组合它们。

*从培训、再培训到部署,能源预测是否有 100%CI/CD管道?*假设一个非常干净的数据管道,理论上是可以的。但大多数情况下,在培训过程中会涉及手动流程,例如:对于新客户,历史数据会更少,并且大多数特征是未知的。因此,训练者有意识地选择初始数据集。同样,在评分过程中,由于极端天气条件,某一天或一天中的某个时间的准确度误差飙升并不罕见,这并不意味着模型没有发挥作用。

只要有更多的数据可用,随着更复杂的机制的发展,就可以实现完整的 CI/CD。

结论

  1. 仅仅关注理论和技术,而没有对模型执行环境的理解将导致机器学习世界中的许多循环。
  2. 参与运营的团队需要具备基本的技术技能,并且应该能够有效地与客户端和数据科学家交流。
  3. 机器学习解决方案总是持续改进模式,因此有必要拥有用于部署的健壮的&高效的管道和用于监控的诊断工具
  4. 目标, 基于证据的 数据驱动的决策是长期客户满意度的关键。

组织数据科学项目的秘诀

原文:https://towardsdatascience.com/a-recipe-for-organising-data-science-projects-50a1cc539c69?source=collection_archive---------28-----------------------

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

罗马卡夫在 Unsplash 上拍摄的照片

了解如何创建结构化和可重复的数据科学项目

数据科学项目本质上是实验性和探索性的。在从事这类项目时,很容易以一大堆难以破译或复制的代码告终。

数据科学项目在这方面不同于传统的软件工程项目。然而,创建一个可靠的代码结构是可能的,它将确保您的项目及其结果对于您自己和其他人来说都是可重复的和可扩展的。

在下面的文章中,我将为您提供一个包括工具、流程和技术的方法,用于建立数据科学项目,它将为您带来以下好处:

  • 一致的项目结构,以便您的代码易于理解。
  • 版本控制,这样您就可以在不破坏核心项目的情况下进行跟踪和更改。
  • 一个隔离的虚拟环境,以便项目可以轻松地重现。
  • 道德和安全项目。

项目结构

大多数 web 和软件开发编程语言都带有预定义的标准代码结构。例如,我最近一直在学习 Bootstrap ,当我下载这个项目时,我会自动得到一些类似下图所示的框架代码,这给我留下了深刻的印象。

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

这意味着,不管您正在构建的项目的确切性质如何,一个外人看到以这种标准方式组织的代码时,会立即知道在哪里可以找到某些文件,并可以轻松地跟踪您的代码。它对协作和再现性有很大的帮助。

有一个为数据科学项目开发的工具,可以自动创建一个名为cookiecutter-data-science的标准项目结构。该工具可以通过 pip 安装。

pip install cookiecutter

要启动一个新项目,只需键入以下内容,没有必要先创建一个新目录,因为 cookiecutter 会为您完成这项工作。

cookiecutter https://github.com/drivendata/cookiecutter-data-science

该工具将带您通过一系列问题来设置您的项目。第一个将要求输入项目名称,该名称将是创建的目录的名称。

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

出现提示时继续回答问题。许多问题是可选的,你可以简单地点击与你的项目无关的回车键。

现在,您将拥有一个新目录,其名称与您为项目命名的名称相同。如果您导航到它,它将包含一个类似于此图的文件结构。项目结构包含一点 python 样板文件,但不限于 Python 项目,因为如果您使用不同的编程语言,它总是可以被删除。

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

Github 知识库

Github 是一个版本控制工具,它存储项目的远程版本,称为存储库。任何有权限的人都可以将这个存储库克隆到他们的本地机器上。在提交到主版本之前,可以在这里进行更改和测试。

版本控制确保可以安全地对项目进行更改,而不会破坏原始代码库。这有助于项目的协作,也确保您不会破坏自己的代码!

要在您的项目中使用 Github,一旦您有了帐户,您应该在您的 Github 主页上创建存储库。通过点击新建按钮并遵循以下说明。

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

在 cookiecutter 设置过程中,它会要求您提供一个远程存储库。如果您给出了您创建的资源库的名称,那么您的项目将被存储在 Github 上。

关于 Github 更详细的使用说明,请看我之前的文章这里

虚拟环境

您创建的每个项目都可能需要您正在使用的不同版本的编程语言和特定的库。虚拟环境在本地系统中创建一个隔离区域,包含项目的确切库和版本。

您或其他人可以很容易地复制这些环境,并且可以从任何位置创建和运行项目。它们是协作和可复制数据科学项目的重要组成部分。

创建虚拟环境有许多不同的工具。数据科学项目的热门选项包括 Conda environmentsVirtualenvPipenv

您选择的工具通常取决于个人偏好或特定的项目需求,例如与项目所需的其他工具的兼容性。我个人使用 Pipenv,因为我主要使用 Python。我将快速浏览一下如何使用 Pipenv 为项目创建虚拟环境。

Pipenv 需要通过自制软件安装,如下所示。

brew install pipenv

要使用特定版本的 python 创建一个新环境,请将cd放入您的项目目录,然后运行如下所示的命令。

mkdir pip-test
cd pip-test
pipenv --python 3.7

要激活环境运行pipenv-shell,您现在将进入一个名为“pip-test”的新环境。

如果我们检查目录的内容,我们会看到 Pipenv 创建了一个名为Pipfile的新文件。这是需求文件的 Pipenv 等价物。每次在环境中安装软件包时,软件包名称和版本都会添加到该文件中。然后,可以在另一个系统或计算机上使用 pipfile 来为您的项目构建精确的环境。

伦理学

道德和数据保护的主题在数据科学领域变得越来越重要。我们必须确保正在构建的数据和模型不包含不公平的偏见,因为这些模型正越来越多地涉及人们的日常生活。保护敏感的客户数据免受潜在的黑客攻击或泄露也很重要。

您可以在项目中使用一些常用工具和程序来采取一些措施保护数据并确保项目无偏见。

首先是gitignore.档。您将在 cookiecutter 项目中看到这个文件是自动生成的。这些文件是一种确保某些文件或目录被忽略且不提交到您的存储库中的方法。例如,您通常不希望您的数据或模型文件在线可用。通过将它们添加到这个文件中,Github 将会忽略它们。如果我将data/*添加到这个文件中,那么整个数据目录将不会被添加到远程存储库中。

第二个工具叫做 deon 。这使您可以轻松地向数据科学项目添加道德检查表。要使用该工具,只需运行pip install deon或者如果您在 Pipenv 环境中运行pipenv install deon

要添加清单,只需运行deon -o ETHICS.md。这将把清单作为一个名为 ETHICS.md 的文件添加到您的项目目录中。该文件如下所示,包含一个建议问题列表,用于在整个项目中审查,以确定它是否符合伦理考虑。

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

我在本文中给出的方法适用于大多数数据科学项目。当然,在某些特殊情况下,您需要进行更改或添加额外的步骤。然而,我发现,通过遵循这些步骤,我可以更容易地创建有组织的项目,这些项目可以被他人分享、理解和处理。

感谢阅读!

我每月都会发一份简讯,如果你想加入,请点击此链接注册。期待成为您学习旅程的一部分!

告诉我你想要什么:基于客户偏好和产品评论的推荐系统

原文:https://towardsdatascience.com/a-recommender-system-based-on-customer-preferences-and-product-reviews-3575992bb61?source=collection_archive---------31-----------------------

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

照片由晨酿Unsplash 拍摄

德克萨斯州奥斯汀市西湖高中。

如今,消费者面临着一个巨大的挑战,他们要从任何产品类别的众多选择中做出选择。我开发并测试了一个系统,该系统可以将购物者对产品特性的偏好与在线评论推荐相匹配。我还执行了功能级别的情感分析,以确保推荐的产品在首选功能方面具有较高的客户满意度。这种推荐系统与最常见的方法有很大的不同,最常见的方法是将产品(如电影)作为输入,并找到类似的产品作为推荐。它也不使用购物者的历史,因此避免了冷启动问题,也非常适合一次性购买。

作为一名越野赛跑运动员,我想为跑鞋建立一个推荐系统。我的推荐系统(【runningshoe4you.com】)对来自 18 家制造商的 505 款跑鞋进行了 10 万次评论,与综合评分最高的跑鞋相比,它找到了更符合消费者理想偏好的跑鞋,而无需阅读大量的产品评论。我为这个推荐系统编写的 Python 代码可以从我的一个 GitHub 仓库获得:https://github.com/JoshB02/recommender-system-tools

对于消费者来说,如果不花费大量的时间和精力来评估众多的备选方案,就很难找到符合其偏好的合适产品。奇怪的是,Amazon.com 网站给用户增加了阅读评论的负担,一次一个产品。例如,通过关键字“跑鞋”进行搜索会产生许多页面的结果,在第一页上就显示了 68 种产品。用户必须点击一个产品,并阅读该产品的评论;对于另一个产品的评论,用户必须点击第二个产品,并重复这个乏味的过程。我确信亚马逊已经发现这种展示产品信息的方式可以使其利润最大化,但是我觉得这占用了我们过多的时间。

为了让它变得简单一点,亚马逊确实提供了一组按钮,代表它从词频分析中找到的评论关键词或短语。图 1 显示了某双跑鞋的关键字或主题按钮。如果我们点击一个按钮,比如说,完美匹配,亚马逊会显示所有包含该关键词的评论。虽然这种方法很有用,因为它允许购物者根据她在产品中寻找的东西来关注评论,但它仍然需要她阅读许多评论,每个产品一次一个功能。这个过程可能会令人沮丧。

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

图 1:亚马逊网站上一双鞋评论的关键词按钮(来源:Amazon.com)

提取用户评论中提到的产品特征

我用了名词(如舒适)、动词(如舒适)、形容词(如舒适)和副词(如舒适)从评论中提取产品特征。

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

我将产品评论集转换成二进制值(0 或 1)的矩阵,这是基于它们是否包含对这些特性或相关词的提及,如表 1 所示。

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

表 1:使用特征的产品评论的向量表示

从上表中可以看出,每个评论都可以表示为一个特征向量,其中 1 (0)表示该特征或相关词在该评论中(未)被提及。原始评论数据对于进行情感分析仍然是有价值的,因为所有与情感相关的信息都将在上述步骤中丢失。作为二进制表示的替代,我们也可以使用词频-逆文档频率( tf - idf )来表示评论向量。

获得关于期望特征的用户输入

有两种可能的方法可以在不侵犯用户隐私的情况下获得用户的输入。首先,我可以让用户从列表中选择她喜欢的产品特性。这将提供期望的特征向量。

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

然而,如果我只考虑用户已经明确指定的特性,那么这些推荐会更有意义。

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

图 2:购物者选择的具有三个特征的特征空间

有时,购物者可能不确定她喜欢的功能,但可以指出她可能听说过或感兴趣的产品。在这种情况下,我们可以使用以下公式来确定客户评论中哪些功能与该产品密切相关:

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

如果关联值大于 1,则关系显著,我们可以推断,当人们写产品 A 时,他们将其与特征 f 相关联(反之亦然)。1 以上的关联值越大,关系越强。因此,当购物者表示对产品感兴趣时,将具有高关联值的特征作为她可能感兴趣的特征集是合理的。

获得偏好和评论之间的匹配分数

有多种方法可以获得评论和所需特征向量之间的匹配分数。余弦相似性是最常见的方法,在这种情况下,余弦相似性是同一空间中期望的特征向量和评论向量之间的角度的余弦。设 D 是由用户选择的或者从与所选产品的高关联值推断的特征集合。

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

一个产品和一组期望的特征的平均余弦值向我们展示了购物者在产品中寻找的东西和评论中提到的特征之间的匹配。如果分数接近 0,则匹配度低,而分数接近 1 表示强匹配。如果总共有 N 个评论,那么对于给定的一组特征,将获得 N 个余弦分数,并计算每个产品的平均值。

余弦相似度中要求精确单词匹配的替代方法是单词嵌入。虽然原则上更好,但是对于单词嵌入,我面临着推荐系统不能很好地区分不同特征的问题。例如,虽然缓冲和舒适是跑鞋的两个不同特征,但标准的单词嵌入是基于新闻和其他主题,其中缓冲和舒适很可能彼此非常接近地出现。因此,在单词嵌入方法中,缓冲和舒适被视为相似的单词,这导致了较差的推荐。我在创业的时候写过一篇关于这个话题的文章:https://medium . com/swlh/word-embeddings-vs-bag-of-words-The-curious-case-of-recommenders-systems-6ac 1604d 4424

特征级情感分析

虽然相似性分析显示了关注推荐系统的用户认为重要的相同特征的评论,但是它不能区分正面和负面的情感。考虑两个简短的评论:

点评(一):“这鞋一点都不舒服,但是很耐穿”。

评论(二):“如此令人惊讶的舒适的鞋子,加上我也喜欢的支持。”

如果购物者将舒适度指定为重要特征,则两条评论的相似性得分会更高;然而,与第一次评论相关的产品不应该被推荐,假设类似的观点在产品的其他评论中得到回应。因此,除了计算相似性得分之外,还需要进行情感分析。

虽然一个产品的总体情感分数可能是有用的,但我们需要知道用户对产品的某个特定特性的感受。我们可以使用的一个简单假设是,客户将在特征词周围的词窗口中表达她对特征的情感。例如,在简短评论“这些鞋子具有卓越的耐用性”中,卓越的一词抓住了关于特征耐用性的情感。因此,从一篇评论中,如果我们提取一个窗口,比如说,在特征词的右边和左边都有三个词(当可用时),我们可以将这个词窗口通过情感分析器。例如,窗口大小为 3,排除像 athebe 这样的停用词,我们将从上面两个简短评论中获得以下内容:

来自评论(一):鞋子一点也不舒服

从审查(二):如此令人惊讶的舒适的鞋子,加上也

这些评论的提取部分现在可以通过情感分析器发送,产生的情感分数可以归因于特征舒适度

虽然所有的情感分析量表都包含负值,但用户更熟悉亚马逊的 1-5 评级量表。我使用 Python 中的 VADER 情感分析器,它有[-1,+1]的标度。为了给出亚马逊量表上的情感评分,我运行了一个线性回归:亚马逊评分=C+a* VADER+误差,其中 C 是一个常数,而 a 是 VADER 评分的系数。根据我收集的数据,我得到 C = 3.66 和 a = 1.36,调整后的 R 平方为 42.2%。均方根误差(RMSE)为 0.228,相当不错。因此,我的推荐系统不会显示 VADER 的情感评分,而是显示亚马逊对每个产品特性的预测评分,评分范围为[1,5]。

提出建议

对于每件产品,我计算了购物者选择的特征的相似性得分和情感得分的加权和。由于 VADER 的量表是[-1,+1],这种相似性和情感分数的增加不会对量表造成问题。推荐的产品是加权分数最高的产品。

数据采集和预处理

我用 Selenium 用 Python 写了一个刮刀,从亚马逊产品评论页面和其他网站上刮了超过 100k 条跑鞋评论。大量文本的一个常见问题是语料库包含大量单词。为了减少这些词汇,我有选择地删除了停用词,同时保留了否定停用词,因为它们颠倒了情感的极性。为了进一步减少总字数,我使用了词汇化。此外,我转换了所有的词类(例如,舒服,舒服,等等。)和同义词转化为相应的名词(comfort)。然而,出于情感分析的目的,我保留了原始的评论集。

对于购物者指定的每个组合,我的推荐系统计算(I)特征向量与每个评论向量 rid 的余弦相似性,(ii)每只鞋的平均余弦相似性,计算为一只鞋的所有评论的平均值,以及(iii)对于每个选择的特征,每只鞋的平均亚马逊调整情感分数。

作为一个例子,考虑一个用户告诉系统,一双跑鞋的三个特征——舒适支撑耐穿——对她来说很重要。对于这三个特征,来自我的系统的三个推荐显示在表 2 中,包括匹配分数(在 0 和 1 之间),亚马逊为每个特征调整的情绪,以及平均特征情绪。为了评估我的建议,我考虑了 Amazon.com 评价最高的三款跑鞋。如表 3 所示,这些鞋子的匹配分数(平均值= 0.20)明显低于我的系统推荐的分数(平均值= 0.52)。类似地,评分最高的鞋子的每个特征的情感评分都低于我的推荐。更重要的是,在我的推荐中,讨论这三个偏好特征的评论的百分比明显更高(我们的推荐平均为 50.1%,而评分最高的鞋子为 14.5%)。不同的顾客可能出于各种原因喜欢一种产品。因此,一个总体评价很高的产品仅仅意味着很多顾客在产品中找到了喜欢的东西。然而,这并不一定意味着产品非常适合购物者的特定偏好。

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

表 2:特性舒适性支撑性耐久性的四项建议

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

表 3:使用亚马逊三个最高综合评分推荐的鞋子

相似的功能,更低的价格?

尽管大牌品牌的吸引力显而易见,但我的推荐系统可以找到价格低于顶级品牌、但具有相似特征的产品,并且可能对这些特征有更积极的看法。例如,如果用户指定一种产品,系统计算该产品和十二个特征中的每一个之间的关联值。然后,它选择三个关联度最高的功能,并推荐,比如说,三个价格较低的产品,但由于与更贵的产品具有相同的功能而受到评论者的称赞。下面显示了用户指定零售价格标签为$240 的水野彩香波预言 8 的情况下的结果(表 4)。

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

表 4:与购物者指定的产品相关的特征

我的系统发现与该产品关联最大的三个特征是坐垫稳定性外观。基于这些特征,系统建议的三个备选产品的价格明显较低(120 美元至 150 美元),而匹配得分则高得多,特征情感得分也是如此(表 5)。

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

表 5:三款价格较低、功能匹配较好的推荐产品

外卖

虽然电子商务使提供无限种类的产品成为可能,但其成功的最大障碍是购物者在搜索、发现和评估大量不熟悉的选择时所付出的大量时间和精力。我的方法是通过匹配购物者对产品的需求和之前顾客对其购买的描述来推荐产品。结果,消费者只能选择几个她真正看重的产品特征。

同样,我为这个项目写的 Python 代码可以在:https://github.com/JoshB02/recommender-system-tools获得

代理驱动的探索中的好奇心

原文:https://towardsdatascience.com/a-reinforcement-learning-approach-towards-sentient-ai-96bea67b5de5?source=collection_archive---------63-----------------------

通过揭开认知的秘密走向人工通用智能之路

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

来源:https://unsplash.com/

最近,我在听一些与人工智能相关的讲座,并偶然看到了 GOTO Copenhagen 会议,会上 Unity Technologies 的人工智能和人工智能副总裁 Danny Lange 讨论了智能在生物进化和学习中的作用。我发现他的演讲非常有趣,我想与你分享我的一些直觉。

像 Siri 和 Alexa 这样的代理真的有智能吗?

今天存在的智能体不能真正被归类为智能体。例如,Siri 和 Alexa 等个人助理使用一些机器学习来进行语音识别和其他一些活动,但它们基本上是硬编码的软件,是由人为人设计的。

几年前,亚马逊为他们的 Alexa 项目配备了大约 10,000 名员工,所以很多后端实际上是由人来运行的。看起来好像是计算机在执行某些任务,但实际上是人在执行这些任务,这意味着它非常依赖于人来完成。甚至亚马逊和网飞的预测也只是基于聪明人挑选各种商品的建议的算法。欺诈检测、股票交易和脸书馈送都是人们创造的智能算法,但它们本身并不真正智能。

那么什么是真正的智慧呢

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

来源:https://unsplash.com/

人类通常被认为是智能的缩影,但机器最终会超越人类。超级计算机的处理能力和内存已经超过人类,人类的内存相对于计算机真的很差。那么,如果这些极其聪明的个人助理如 Alexa 甚至人形机器人如 Sophia 都不能被归类为具有智能,那么是什么造就了智能呢?

字典对智力的定义大致为:

“获取知识和技能的能力”

人类所知的唯一真正的智慧是生物系统。动物和人类都有智力。大自然赋予了生命智慧,但是为什么人类真的有智慧,或者有智慧的目的是什么。它基本上是基于几个原则,其中之一是熵。

所以,对于一个生物有机体来说,为了维持自身,它需要消耗能量来维持其复杂的结构。在这个世界上有这种持续的能量流动,一个生物吃东西来消耗能量和维持秩序,而这些能量又会被另一个生物吃掉。

另一个原则是所有生物都需要繁殖和变得丰富,最重要的是应该了解物理学,特别是惯性和重力。例如,人类需要意识到走路时不会摔倒。我们需要智慧,这是实践这些原则的持续需要。因此,人类基本上可以被视为作用于环境并改变环境以造福自身的主体。

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

来源:https://unsplash.com/

大自然发明了大脑,大脑从根本上来说只是基础设施,通过大脑,它通过化学机制、细胞结构、使用化学机制相互交流的多细胞生物、控制肌肉和提供嗅觉、触觉、味觉、听觉和视觉的感觉器官的能力来实现智能。

像视觉这样的东西在很久以前就出现了,从感光细胞到眼睛的进化,可能仅仅经历了 35 万年。因此,大自然不断进化这些东西,使其变得更有效率,这就是智能的来源,而当前的人工智能系统远远不具备上述智能能力。

大自然的学习方法——强化

本文提出了一个在机器学习代理中开发这些系统的框架。该框架建立在神经网络和强化学习(RL)的基础上,但不使用任何标准的 RL 方法。该系统展示了生物系统中存在的智能形式,并使用不同于标准的学习方法来密切模拟现实世界中的学习过程。拟议系统的一部分将类似于世界级 AlphaGo Zero 和 AlphaZero 中使用的系统,这种系统能够在没有人类输入的情况下在大约三天内学会围棋(而象棋只需四个小时)。

众所周知,智能存在于人类(和其他动物)身上,它基于神经网络,因此要发明人工智能,你必须求助于自然。具有空间环境、物理引擎、重力、惯性、碰撞等的 3D 引擎是一个受控的封闭生态系统,将非常类似于真实世界。所以,把游戏引擎想象成人工智能开发的生物穹顶。

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

来源:https://unsplash.com/

像 Unity 这样的公司已经建立了一个名为 ML agents 的开源框架,在这个框架中,人们可以尝试所有这些概念,如了解物理,导航以解决问题,并取得一些成就。围绕视觉理解,在机器学习和人工智能方面有很多研究,比如第一人称射击游戏,其中有一个机器人试图真正擅长射击。在机器人学习如何行走的运动控制方面也有很多研究,在认知挑战方面,如 DeepMind 的 AlphaGo,这是很了不起的。然而,它们都是真正有限的。像 Unity 正在使用的生态系统有各种各样的工具和现有资产,比迄今为止使用的要复杂得多。

DeepMind 的联合创始人兼首席执行官戴密斯·哈萨比斯说:

“作为一名前视频游戏设计师,我非常高兴能与 Unity 合作,为开发和测试解决现实世界问题所需的智能灵活算法创造虚拟环境。”

视频游戏实际上比其他任何东西都更能促进人工智能的发展,因为它非常接近真实世界,而真实世界在自然界已经存在了大约 5 亿年,环境具备所有的基本要素,因此它不会因为对人工智能的发展有任何贡献而被抛弃。

代理驱动的探索

使用外在和内在奖励的代理驱动的探索在人工智能社区中产生了很多谈论,它离人工通用智能(AGI)更近了一步。

外在奖励是指从环境中获取、实现或收集某些东西。它出现在各种游戏中,代理人必须收集点数或金币。

它是特定于环境的,它与获得“富有”这一外在奖励的想法相比较。内在奖励指的是好奇心、耐心或不耐烦、快乐、韧性、爱、同理心等。这些是非常重要的,因为所有的人类都是基于这些内在的奖赏而生活,这些奖赏是自然专门为代理人开发的。所有的人和动物都有内在的奖励,这是它们赖以生存的基础。它可以和外在奖励相比,就像变得“快乐”和变得“富有”一样。

标准的强化学习有一定的限制,在那里,非常不可能发生的荒谬的不可能场景发生了,然后更不可能的事情也发生了,所以所有这些不可能的场景聚集在一起,形成了一个不可思议的不可能场景,称为稀疏回报空间。

假设一个代理人处于这种极不可能的场景中。一个代理进入一个房子,房子有许多房间,在一个随机的房间里,一个按钮出现。当代理按下按钮时,一个金字塔将出现在另一个房间中。还有一些静态金字塔来忽悠代理。代理人必须去推倒金字塔,拿到金字塔顶上的金盒子。现在代理必须完成所有这些场景。

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

来源:https://gotocph.com

使用标准的强化学习算法,随机探索,它不会学习它,因为它不会在这个随机的事件链上绊倒。

因此,我们需要其他东西来帮助代理理解这个复杂的场景,并在这个环境中实现它的目标。

关键成分——好奇心

但是大自然解决了这个问题,因为人类可以学习这种不可能的场景及其结果。这个问题的解决方案是增加探索的策略,偏向代理人而不是随机性,考虑内在的回报。这就是好奇心内在回报的来源。

对新奇事物的追求在数学上可以定义如下:

○观察值 xtxt+1

动作,使得 xt 转换到 xt+1

○嵌入! (x)

○预测 p((xt+1) | xt,at )

奖励rt =log p()(XT+1)| XT,at

○训练到最大 rt

○代理现在倾向于预测误差高的转换

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

来源:https://gotocph.com

所以通常当一个机器学习模型被建立时,主要的焦点是最小化误差,以便预测变得尽可能好。

也就是说,现在具有高预测误差的转换是受欢迎的,并且代理不确定它是否做了什么,因此它做了(或者出于好奇)。

所以,在这个只有外在奖励的场景中,代理人在做随机探索,它没有发现太多东西。当内在奖励时,好奇心只给予代理人,它还没有解决问题,但它从一个房间到另一个房间,在看到静态金字塔时撞倒它们,以知道如果它撞倒金字塔会发生什么。代理因此更具探索性,它不断地寻找它所知最少的东西。

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

来源:https://gotocph.com

现在代理人被给予了好奇心的内在奖励和外在奖励,也就是同时保持好奇心和变得富有。经过训练后,可以观察到代理更有方向性,它会寻找并找到按钮,它不会被所有其他金字塔愚弄,它只会打翻金色金字塔并解决问题。

很多人已经预测,强化学习有各种各样的限制,就像无法解决的稀疏问题,所以很明显,人类将进入下一个人工智能冬天。但是,像上面这样的问题是相当复杂的,它正在由某些公司实施。因此,系统需要查看整个目录,挑选客户从未见过的商品,并尝试购买,而不是随机挑选商品展示给用户。也就是说,它首先从最不可能的产品开始,然后通过好奇而不是随机地尽可能多地了解用户。

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

来源:https://unsplash.com/

好奇心一直是许多科技发现和人类发展进步背后的主要因素,甚至可能成为真正智能机器的核心原则。

参考资料:

https://gotocph . com/2018/sessions/571/on-the-road-to-artificial-general-intelligence

哪个更重要?在你用随机森林做决定之前要小心

原文:https://towardsdatascience.com/a-relook-on-random-forest-and-feature-importance-2467dfab5cca?source=collection_archive---------8-----------------------

再看特征重要性和随机森林

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

无论你是谁,是一名刚刚完成他/她的第一门机器学习课程的学生,还是一名经验丰富的数据科学家,或者基本上是当今任何从事技术工作的人,你都必须听说过 Random Forest。随机森林是一种集合树模型,主要用于分类。它出现于 90 年代,至今仍是许多行业中最常用、最稳定、最精确的模型之一。

然而,今天我们不会关注随机森林本身。相反,我们应该重新审视一下特征重要性,或者可变重要性,不管你喜欢怎么称呼它。我们都知道,大多数随机森林实现(例如 s klearn,也称为 Sci-Kit Learn )都有内置的可用特性重要性,这种特性重要性最早出现在 Leo Breiman 在 2001 年的论文“随机森林”中,该论文首次恰当地介绍了随机森林。也就是说,将所有节点的加权杂质减少相加,并对所有树进行平均。这种方法被称为 MDI 或平均减少杂质。

1.基尼系数和排列重要性

MDI 中的杂质实际上是一个函数,当我们使用一个众所周知的杂质函数 Gini index 时,该度量就变成了 Gini importance,内置在 Sklearn 的 RandomForestClassifier 中。

除了 Gini 重要性或 MDI,还有另一种评估特征重要性的方法,即随机置换袋外样本中的特征值。这被称为平均降低精度,MDA,也称为排列重要性。已经有关于评估特征重要性的这两种不同方法的比较的研究:

我将使用一个非常简单的展示来比较这两种方法,使用 python 中的 sklearn 包中的随机森林分类器和 Iris 数据集,以及rfpip包(用于计算排列重要性)。

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

使用 sklearn 的两种方法的比较

对于这样一个简单的数据集,这两种方法给出了不同的结果,这再明显不过了。此外,如果您自己尝试多次(您可以在页面底部找到我的代码),您将会看到这些结果实际上每次都有所不同。这是因为这两种方法不仅都使用了某种类型的随机抽样,而且都来自于一个具有随机内在特性的随机森林模型。

您应该注意的另一件事是运行时。如前所述,与排列重要性相比,内置的基尼重要性具有几乎实时的运行时间。但是在我们的例子中,由于 Iris 的大小,差异并不是很大:它只有 150 个观察值,只有 4 个特征。如果我们在更大的数据集上进行比较:

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

使用较大数据集的运行时比较

现在你一定在想,我有这些优点和缺点,我应该用哪一个呢?嗯,也许有第三条路比这两条都好?

2.空气(实际杂质减少)的重要性

在上面的比较中,我们知道,与排列重要性相比,基尼系数的重要性以惊人的速度增长。如果我们能在基尼系数 1 上做一点小小的改变,这样我们不仅能得到更快的结果,而且偏差也更小,会怎么样呢? Stefano Nembrini 在他的 2018 论文中介绍了这样的方式:

在常规 RF 中,在每个树节点处,从𝕆≡{1,…,p}⁠.采样 mtry 分裂候选变量相反,我们从 1 到 2 p 采样,即变量从𝕆∪ℙ⁠采样,而ℙ≡{p+1,…,2p}⁠.如果选择的变量索引为 j∈𝕆⁠,那么 Xi=j 通常用于拆分。如果 j∈ℙ⁠,变量πXi = j p,即具有重新排序的样本 ID 的原始变量,用于分割。如果是 j∈𝕆⁠,这种分裂导致的杂质减少通常会导致 Xi 的重要性变化,而如果是 j∈ℙ⁠.,则杂质减少请注意,不会重复执行该过程。

最后,在整个森林生长之后,变量 Xi 的估计去偏置杂质重要性计算如下:

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

我们将这种新的 VIM 称为实际杂质减少(空气),以避免与其他 VIM 产生误解。

可悲的是,自从 AIR 被引入才一年,并没有很多研究关注这种新方法的正确性和准确性。此外,AIR 目前仅在 R 库 Ranger 中可用,这是一个因其在 R 上快速实现随机森林而闻名的库。当分配新的 Ranger 对象时,您可以将参数“importance”指定为“infinity _ corrected”以使用 AIR 重要性。

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

Ranger ®中可用的三种不同方法的条形图

这里的运行时间是在一定重要性方法下拟合随机森林模型所花费的时间。看起来三种方法的性能相似,主要是因为我们使用的数据集很小。如果我们把它换成我们之前用 5000 个观察值和 500 个特征建立的数据集,我们仍然可以看到运行时间上的巨大差距:

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

5000 * 500 数据集上三种不同方法的条形图,此处仅显示前 10 个特征

3.鸣人?博鲁塔!

Boruta 也是 R 上的一个库,专注于使用置换随机值来选择特征。它将所有特征分为三类:拒绝、尝试和确认。希望感谢 丹尼尔·霍莫拉 ,这个特性选择库在 python 中可用。它速度更快,并且有更多的自定义设置。

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

经过 8 次迭代后,Boruta 选择了所有 4 个“重要”的特性

与 R 上的原始版本相比,python 上的 Boruta 有一些令人兴奋的有趣的新参数,包括我最喜欢的一个, perc ,它为功能选择设置了阈值的百分位数,如果感觉太苛刻的话。将此值设置为较低的值允许选择更多的功能,但也会导致较高的错误率。

4.Shap,在 Shapley 值中

我知道你可能在博弈论讲座中听过这个名字很多次,在一些专注于数据科学的网站上也试图介绍这个包。是的,这个包是用博弈论的方法编写的,是的,它是一个强大而流行的工具,但是我不打算解释关于博弈论和算法本身的事实。我将用一个简单的例子来说明它能做什么。

现在,假设我们想看看数据的第一次观察如何影响预测:

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

虹膜的首次观察

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

单一观察值的解释

我们可以看到花瓣长度为 1.4 厘米和花瓣宽度为 0.2 厘米是第一次预测为 1 的主要“原因”。

如果我们稍微移动一下代码,我们还可以看到数据集中每个观察的效果:

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

所有观察结果的解释

Shap 的可视化不仅丰富多彩,更好看,而且是交互式的,这意味着如果你将鼠标移到它上面,你可以看到每个观察的信息。然而,正如你们中的一些人可能已经发现的那样,Shap 与多类别分类斗争。上面的 X 轴是按原始样本排序的,应与 Iris 一样,保持第 1 类 50、第 2 类 50 和第 3 类 50 的顺序。

好了,最后但同样重要的是,回到特性重要性。使用 shap 值,我们可以解释特性如何影响模型的输出。因此,我们可以预期 shap 值是特征重要性的度量:

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

每个特征的平均绝对形状值的条形图

几乎和我们之前谈过的方法一样的趋势,是吗?然而,无论您为同一个随机森林模型运行多少次代码,您都会得到相同的结果:Shap 值为要素提供了一致的重要性评估。

结论

我们已经讨论了使用随机森林模型评估要素重要性的所有不同方法。哪个最好?谁也说不准。我们只有数学证据证明哪一个更有偏见。老实说,你可以接受上面为 Iris 数据集介绍的任何特征重要性,因为这个问题没有正确的答案。毕竟,机器学习和数据科学都与解释有关。无论你使用什么工具,只要它有意义,并且你能让数据故事流动,使用它绝对没有错。下面是我做的比较所有这些方法的表格(运行时间使用之前生成的 5000*500 数据集计算):

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

  • : AIR 仅在 R 上可用,AIR 运行时与 Gini 运行时在 R 上几乎相同

最后但同样重要的是, LIME 也是用于特性重要性的非常流行的包之一。希望我将来会介绍石灰,并添加所有这些工具之间的比较。

点击此处查看来自我的 Github 的所有源代码。

用 Python 和 Plotly 重新制作真实气泡图

原文:https://towardsdatascience.com/a-remake-of-the-factfulness-bubble-chart-with-python-and-plotly-cd40ff7b3011?source=collection_archive---------20-----------------------

可视化

让我们用基于数据的世界观更新我们的知识

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

图片来源: Gapminder

去年,我的一个最好的朋友送给我一本书,并附上一张纸条:“我希望这将是你对世界的理解的一个修正,也是对你的全球焦虑的一个补救”。这本书有一个醒目的橙色封面,标题是:“真实性:我们对世界错误的十个理由——以及为什么事情比你想象的更好”,作者是上图中气泡图背后的先生汉斯·罗斯林,以及其他合著者。

这本书改变了我看待世界的方式,并为我提供了正确解读我所收到的关于我们这个世界的信息的工具。这里,最热烈的掌声送给封面中的气泡图(出现在第一页):

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

从一本已经写好的书上重新做一个图表似乎有点多余,但是…

我并不希望有一天每个人都会读这本书,而是决定采取行动,在不同的媒介上传播真实,因为一位智者曾对我说:

宇宙为行动喝彩,而不是一厢情愿。

使用 Gapminder公开数据中的公开数据,我将展示如何制作这个气泡图。Python 和交互式可视化库 Plotly 是这次翻拍的最佳工具。

这篇文章的重点是传播事实和创造互动的视觉效果。如果你想了解数据加载、清理和格式化的适度但必要的步骤,我鼓励你在这里查看代码,在这里查看源数据

让我们从气泡图的元素开始:

  • 每个泡泡代表一个国家
  • 颜色是一个区域
  • 泡泡的大小显示了这个国家的人口

我们将使用以下数据框,重新创建地块:

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

以下是代表世界四个地区的颜色:

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

使用上面的颜色编码,让我们重新制作气泡图:

最新的世界图片

  • y 轴上以年为单位的寿命
  • x 轴是经通货膨胀调整的人均国内生产总值(PPP ),即收入

你可以将鼠标悬停在图表上,查看国名以及一个国家的财富和健康状况的确切数字!

我们的世界不再划分为“发达”与“发展中”或“富裕”与“贫穷”[根据你过时的世界观插入一对对比]。现在,世界各国根据世界银行认可的四种收入水平进行分类。

最重要的是,大多数国家处于中等水平(2 级和 3 级),平均预期寿命为 73 岁!

如果你想知道从 19 世纪到 2018 年,我们可爱的世界是如何在收入水平和预期寿命方面取得长足进步的:

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

**加分:**汉斯·罗斯林讲解各国 200 年动画泡泡图:

恭喜你!你用基于事实和数据的观点更新了你对世界的认识,谢谢你和我一起踏上了这段旅程😊。如果你想跟上我们世界的统计数据,那就继续使用 Gapminder 工具

对于评论或建设性的反馈,您可以通过回复、 TwitterLinkedin 联系我!

来源:

[## Gapminder 工具

每个人都能理解的动画全球统计数据

www.gapminder.org](https://www.gapminder.org/tools/# s t a t e state statetime$value=2018;;&chart-type=bubbles) [## ✨推出 Plotly 快递✨

Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的包装器,公开了一个简单的…

medium.com](https://medium.com/plotly/introducing-plotly-express-808df010143d)

生成对抗网络研究综述

原文:https://towardsdatascience.com/a-review-of-generative-adversarial-networks-9af21e94bda4?source=collection_archive---------68-----------------------

甘一家是如何改变机器学习的工作方式的?

深度学习的历史已经显示出有点不寻常。许多实践,比如 80 年代发明的卷积神经网络,在 20 年后才卷土重来。虽然大多数方法都卷土重来,但生成对抗网络是过去十年中深度学习领域最具创新性的技术之一。虽然具有行为良好的梯度的传播和丢弃算法的判别网络显示出非常成功,但是生成网络的情况就不一样了。在最大似然估计期间,深度生成网络在近似难以处理的概率计算方面存在问题。此外,它不能在生成上下文中利用线性单位的优势。甘斯来协助这个领域解决这两个问题,同时将一个生成性和一个歧视性的网络结合在一起。

gan 最初是由蒙特利尔大学的 Goodfellow 等人[1]提出的。 基本框架包含一个对抗对手的生成器,而鉴别器则学习分辨一个样本是属于数据分布还是来自生成网络。这个想法是让这两个网络在相互竞争的同时变得更好。

最直接的建模是将鉴别器和发生器作为多层神经网络。生成器学习从潜在空间到数据分布的映射,趋向于变得类似于地面数据分布。另一方面,鉴别器试图区分真实的数据分布和生成器生成的数据。生成网络的目标是欺骗鉴别器,使其认为产生的新数据来自真实的数据分布;这样,它增加了鉴别器的错误率。

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

图 1:GAN 的构建模块(https://MC . ai/deep-convolutionary-generative-adversarial-networks DCG ans/)

我们应该强调,GAN 的作用不是复制训练中使用的数据,而是产生新的数据。我们可以将其描述为两人游戏,这两个网络彼此对立,这意味着最终目标是实现一种均衡,在这种均衡中,这些经过训练的网络对彼此具有最佳反应。*此时,他们无法再提高,训练停止。然而,这种平衡很难达到,甚至难以维持,这是 GANs 的第一个问题。*另一个问题是,没有办法验证生成器是否已经像其他深度学习技术一样,学会了在保留的数据集中产生类似于真实生活数据分布的分布。

在原始论文中,实验表明,数据量和网络深度对更好的性能起着巨大的作用。当数据点是图像时,这意味着数据量应该与像素数成指数关系。考虑到图像有数百/数千个像素,这意味着在现有的计算能力和数据还无法实现的网络中可以实现更好的结果。

GANs 的应用非常广泛,从艺术、时尚、广告、科学到视频游戏。然而,这些网络也被用于恶意目的,例如使用 GANs 生成的合成图像创建虚假的社交媒体档案。我们可以看到,它在计算机视觉领域的应用更加广泛。

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

图 GANs 自原始论文以来的路线图,受[9]启发

图 1 给出了从原始文件开始的 GANs 路线图。由于篇幅所限,我将简单列出所提到的方法以及它们所解决的问题——许多论文在培训过程中进行的修改都集中在原来的工作上。

深度卷积 gan(DC gan)[2]具有更好的性能,因为当用于图像时,它不是用多层感知器来定义生成器(G)和鉴别器(D ),而是用 CNN 来定义。它没有汇集图层,因此为了增加空间维度,它使用了反卷积。对 G 和 D 中除 D 的最后一层和 G 的第一层之外的所有层的批次进行归一化,以便不会丢失关于数据分布的正确平均值的信息。

训练设置的改变是由 ImprovedGANs [3]提出的,与小批量鉴别、虚拟批量标准化和特征匹配有关。鉴于原始 GANs 的分辨率较低,LAPGAN [4]在拉普拉斯金字塔中使用 CNN 生成了分辨率更高的图像。渐进 GANs (PGGAN) [5]还提出了一种基于渐进神经网络的训练修改,通过渐进增加新层,从低到高分辨率增加鉴别器和生成器。

图像到图像的转换传统上使用包含对齐对的训练集来学习输出和输入图像之间的映射。CycleGANs [6]使用对抗性损失将图像从源域 X 映射到目标域 Y,缺少对。此外,他们将这种损失与实现循环恒定性的逆映射相结合。

原始甘的另一个问题是模式崩溃,这意味着它们倾向于产生相似的样本,即使在不同的数据集上训练。包装工用他们所谓的包装来处理这个问题。主要的变化发生在判别网络中,使得网络能够基于来自同一类的多个样本,来自真实的和生成的数据分布,来做出决策。

自我注意力生成对抗网络(SAGAN) [8]提出使用具有注意力的远程依赖性模型来生成图像。它使用 G 和 D 的频谱归一化,并证明改善训练过程。

使用 GANs 的另一种不同方式是在单一自然图像上训练生成器,使用 FC GANs 的金字塔,每个学习图像的不同尺度的分布。

GANs 中有待解决的一个问题是,它们假设生成的样本具有不同的生成参数,这意味着它们不能直接产生离散数据。另一个公开的问题是如何测量一个训练有素的生成网络的不确定性。

  1. I. Goodfellow、J. Pouget-Abadie、M. Mirza、B. Xu、D. Warde-Farley、S. Ozair、a .库维尔和 Y. Bengio,《神经信息处理系统进展》,第 2672-2680 页,2014 年。
  2. A.拉德福德,l .梅斯和 s .钦塔拉,“利用深度卷积生成对抗网络的无监督表示学习”,arXiv 预印本 arXiv:1511.06434,2015 年。
  3. T.Salimans,I. Goodfellow,W. Zaremba,V. Cheung,a,和 X. Chen,“训练 gans 的改进技术”,载于《神经信息处理系统进展》,第 2234-2242 页,2016 年。
  4. E.L. Denton,S. Chintala,R. Fergus 等人,“使用拉普拉斯金字塔对抗网络的深度生成图像模型”,载于《神经信息处理系统进展》,第 1486–1494 页,2015 年。
  5. T.Karras、T. Aila、S. Laine 和 J. Lehtinen,“为提高质量、稳定性和变化性而逐步种植甘蔗”,arXiv 预印本 arXiv:1710.10196,2017 年。
  6. J.-Y. Zhu,T. Park,P. Isola 和 A. A. Efros,“使用循环一致的对抗网络进行不成对的图像到图像翻译”,载于 IEEE 计算机视觉国际会议论文集,第 2223-2232 页,2017 年。
  7. Z.林,A. Khetan,G. Fanti 和 S. Oh,“Pacgan:两个样本在生成性对抗网络中的力量”,载于《神经信息处理系统进展》,第 1498-1507 页,2018 年。
  8. H.张,I .古德菲勒,d .,a .奥登纳,“自我注意生成性对抗网络”,arXiv 预印本 arXiv:1805.08318,2018。
  9. J.桂,孙志军,温永义,陶,叶,“生成性对抗网络:算法,理论与应用”arXiv 预印本 arXiv:2001.06937,2020 .

IBM 高级机器学习和信号处理述评

原文:https://towardsdatascience.com/a-review-of-ibms-advanced-machine-learning-and-signal-processing-certification-371bd937bb76?source=collection_archive---------24-----------------------

Coursera 上的高级机器学习和信号处理课程的全面可视化指南

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

沙哈达特·拉赫曼在 Unsplash 上拍摄的照片

T 他的评论不仅旨在向您提供我对这门课程的看法,还旨在让您深入了解课程所涵盖的主题,并教授一些关键概念。

高级机器学习和信号处理课程由 IBM 开发,可在 Coursera 上获得。它可以作为单独的课程,也可以作为由四部分组成的大规模开放在线课程(MOOC)的一部分,即高级数据科学专业

可扩展数据科学基础重点介绍了云中 Apache Spark 的基础知识,并介绍了 IBM Watson Studio (IBM 的云服务)。相比之下,这门课程明显更深入,侧重于更高级的机器学习概念和信号处理。

该课程由两位 IBM 数据科学家讲授,分别是罗密欧·肯兹勒尼古拉·曼切夫。我发现他们两个都是优秀的导师。

第一周

第一周从 ML 线性代数的概述开始。它非常简单,涵盖了 ML 中使用的不同数据对象以及对这些对象的数学运算。这里实际上有一些非常有用的知识片段,例如(1)一个向量必须只包含一种数据类型,而一个元组可以包含多种数据类型。(2)张量可以作为任意 N 维空间的通称:

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

标量>矢量>矩阵>张量

高维向量空间是第一课之后的自然进展。在这里,罗密欧描述了几个有用的定义和概念,并触及了高维数据背后的直觉。我们将在本课程的后面部分更深入地探讨这些概念。

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

投影到 2D 平面上的 3D 数据(左)和投影到 3D 超级平面上的 4D 数据(右)——第三周会有更多的介绍

我们还讨论了有监督的和无监督的机器学习之间的区别。简而言之就是—

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

监督学习:机器学习,其中输出标签、标志或值已被分配给每个样本。这是算法的目标,并指导学习过程。例子包括-

  • 分类-目标值是离散的
  • 回归-目标值是连续的

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

无监督学习:不存在输出标签、标志或值的机器学习。这意味着算法需要在数据中找到模式,并输出一些有助于我们理解这些模式的东西。例子包括-

  • 聚类-样本被分成不同的聚类/类别
  • 维数减少-减少了特征的数量,同时最大限度地减少了数据丢失

最后,罗密欧谈到了 ML 管道,它是你的数据处理步骤的“流程”。例如,对于简单的多类分类,您可以使用以下管道。

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

这里一个特别有用的概念是数据管道的模块化。通过将该过程的每个步骤分割成独立的部分,我们能够快速切换不同的预处理方法、ML 算法或其他训练参数。

有了 Spark pipeline 对象,完整的集成流程将拥有 fitevaluatescore 功能。这使得不同模型之间的快速原型和比较成为可能。这意味着我们可以用更少的时间建立一个更好的模型。

本周的代码非常多,我认为这是非常好的,因为它是从上一门课开始的。编程任务只是检查您的环境设置是否正确,不幸的是,我认为这错过了复习本周所涉及的关键编码部分的机会。

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

绿色变色龙Unsplash 上拍摄的照片

第二周

我们这周讨论了很多。涵盖的主题总结如下:

  • 线性回归
  • 批量梯度下降
  • 拆分(训练集、验证集和测试集)
  • 过度装配和装配不足
  • 估价
  • 逻辑回归
  • 朴素贝叶斯
  • 支持向量机
  • 交叉验证
  • 超参数调谐
  • 集成学习(决策树、随机森林、梯度推进等)
  • 正规化

这似乎很多。是很多。

这真的让我惊讶,这个星期包括了多少。仅仅是关于朴素贝叶斯的那一节,如果研究到一个合理的深度就可以轻易地耗费许多许多小时(贝叶斯统计是一个 非常 深的兔子洞)。

尽管如此,这一周教授的主题范围很广,深度也很深。一些讲座深入许多算法背后的数学和直觉。而其他人展示了如何用 Apache SparkML 应用算法,这真的很酷。

作为一个例子,我们用 Spark 构建了一个梯度提升树分类器,如下所示:

  • 首先我们导入必要的模块*(假设我们已经导入了我们的训练数据* df ,它被存储为一个熊猫数据帧)
from pyspark.ml.feature import StringIndexer, VectorAssembler,
                               Normalizer
from pyspark.ml.linalg import Vectors
from pyspark.ml.classification import GBTClassifier
  • 利用我们在第一周学到的知识,我们初始化数据管道的每个组件:
# create unique index for each unique string (our target classes)
indexer = StringIndexer(inputCol='class', outputCol='label')# convert our multiple dataframe input columns to a vector
vectorAssembler = VectorAssembler(inputCols=['x', 'y', 'z'],
                                  outputCol='features')# normalize our input values
normalizer = Normalizer(inputCol='features', outputCol='features_norm', p=1.0)

…包括分类器:

gbt = GBTClassifier(labelCol='label', featuresCol='features',
                    maxIter=10)  # this will run for 10 iterations
  • 创建每个组件后,我们将它们放入一个 Spark 管道对象中:
pipeline = Pipeline(stages=[indexer, vectorAssembler, normalizer,
                            gbt])

现在我们已经构建了管道,我们只需输入pipeline.fit(df_train) 来训练我们的模型。

在 IBM Watson Studio 中使用 Spark 实现这一点意味着我们可以轻松扩展。在这种情况下,它不是必需的,但是对于大型数据集和更复杂的模型,它非常有用。

这周有几个小测验,大部分都很短,但还是不错的。编程任务非常简单,在到达顶点项目之前通常都是如此。

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

Norbert LevajsicsUnsplash 上拍摄的照片

第三周

本周我们关注无监督机器学习。特别是聚类主成分分析 (PCA)。

聚类部分非常直观。总体而言,聚类是一种非常简单的算法。但是我相信课程的这一部分提供的解释和例子非常令人难忘,而且非常容易理解。

PCA 部分更有挑战性。涵盖以下内容:

  • 降维
  • PCA(当然)
  • 协方差和相关矩阵
  • 特征向量和特征值
  • 数据投影

PCA 用于降维,我们试图减少数据集中的维数(特征),同时保留尽可能多的信息。

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

3D 数据被投影到 2D 平面上

通过将 3D 空间中的每个点投影到 2D 平面上,我们可以轻松地将数据集从 3D 缩减到 2D(如上所示)。

在高层次上,PCA 做同样的事情,但是试图尽可能地保持数据点之间的距离。

这种尽可能多地保留信息(距离)的行为在分类中至关重要。因为正是这些距离允许我们将数据点分成不同的类别。

例如,让我们从两个不同的方向看一个 3D 图:

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

如果我们去除两幅图中的颜色差异,我们仍然能够很容易地区分左边图像中的两个独立的集群。然而,在正确的图像中,我们不会。

现在想象我们把这些点投射到一个平行于我们视线的表面上。聚集左边的投影点很容易,右边的就不可能了。

通过将点投影到使点之间的方差最大化的表面上,PCA 有效地优化了我们左边的场景。

总的来说,这一周非常有趣,每个概念都非常直观,这很棒!像每周一样,有测验和一个编程作业。再说一次,这个任务很简单。

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

张秀坤·施罗德在 Unsplash 上拍摄的照片

第四周

这就是本课程“信号处理”部分的内容。虽然在很大程度上是数据科学或机器学习,但我发现这一周绝对令人着迷。

傅里叶变换

我们从傅立叶变换(FT)开始,它允许我们将复杂信号(时域)分解为构成信号的频率(频域)。

这取决于你的背景,可能有也可能没有任何意义,所以简而言之。

噪音由振动组成。最简单的振动由重复的上下运动组成,产生正弦曲线(或正弦波)。

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

y 轴代表波的振幅,x 轴代表时间。一次完整的上下运动的长度称为波长。

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

如果我们合并两个波长,它们会产生一个新的波,这个新的波是这些波的振幅相加,这种合并被称为叠加。

现在考虑下面的波:

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

每个波都是一个简单的正弦曲线,但它们组合在一起就形成了一个复杂得多的模式:

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

傅立叶变换允许我们输入复合波信号,并输出每个组成正弦波的频率和振幅。

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

查看波形有两种方式。在时域(左),或者在频域(右)。

时间域是你已经看到的,它是波形。x 轴上有时间,y 轴上有振幅

相反,频域显示了构成波的组成频率。x 轴上有频率,y 轴上有振幅

傅立叶变换在这两幅图之间转换(逆傅立叶变换涵盖了频域到时域转换)。

周摘要

金融时报引人入胜,但不是本周的唯一焦点。它分为两个主题,这两个主题都包括以下子主题:

傅立叶变换

  • 信号分解、时域和频域
  • 信号产生和相移
  • FT 背后的数学和直觉
  • 离散快速傅立叶变换

小波

  • 连续小波变换
  • 缩放和平移
  • 机器学习中的小波

小波和 FT 一样有趣。我发现自己很容易参与到这个星期的活动中,这是由于所涵盖的主题和教学标准的混合。我相信这在很大程度上是因为尼古拉对材料的了解。

编程作业也不是特别具有挑战性,有点填鸭式。但这是我唯一的抱怨,这一周真的很吸引人,教得很好,并在最后的讲座中很好地联系到机器学习。

结论

我发现这门课非常有益。由于该课程仅在 IBM Watson Studio 上进行,因此还有一层额外的用途。这是对 IBM 云服务的完美介绍。当然,这通过增加曝光率为 IBM 带来了好处,但对于任何数据专业人员来说,这也是一项无价的额外技能。

课程的技术性更强的方面非常好。材料的范围很广,大部分主题都有合理的深度。

与任何 MOOC 一样,我认为重要的是要注意到,要真正加深你的理解,最好是密切关注所教的内容。然后,去找更多的材料,进一步研究。

最后,试着学以致用,写/说你学到的东西。如果你能应用并解释你所学到的东西,你会理解得更多,从而从课程中获得更多。

编程作业并不特别具有挑战性。在斯坦福的机器学习课程中,我经常会花几个小时完成每项作业。相比之下,通过这门课程,我通常可以在 10-20 分钟内完成编程作业。

然而 ,这是由顶点工程保存的,是全专精的一部分。这引出了我的最后一点:

整体明显大于部分之和。

我认为,要从本课程中获得最大的利益,最好是完成完全专业化。一旦完成一到三门课程,最后的顶点项目是真正巩固所学的一切。

我希望这篇评论对你有所帮助,非常感谢你读到这里!如果你对课程有任何问题,请在下面告诉我!

谢谢,

如果您有兴趣了解 IBM 的可伸缩数据科学基础,我在这里写了另一篇评论!

[## 对 IBM 可伸缩数据科学基础的回顾

我的想法是,在 IBM 的高级数据中,对可伸缩数据科学基础中的关键概念进行分解…

towardsdatascience.com](/a-summary-of-the-advanced-data-science-with-ibm-specialization-1-4-5caf48c011df)

综合表格数据工具和模型综述

原文:https://towardsdatascience.com/a-review-of-synthetic-tabular-data-tools-and-models-d83b232aae25?source=collection_archive---------38-----------------------

正在彻底改变我们共享数据方式的匿名化方法

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

米卡·鲍梅斯特的图片 @mbaumi 。https://unsplash.com/photos/Wpnoqo2plFA

数据隐私的重要性

我们生活在一个数据驱动的时代,大数据、数据挖掘和人工智能(以及其他时髦词汇)正在彻底改变我们从数据中获取价值的方式。挑战在于,私营公司和公共实体都没有办法在内部或外部轻松共享这些数据。主要障碍是:合规法律对数据滥用的担忧患者/客户隐私以及无法安全传输数据。如果没有这些限制,数据科学家、开发运营团队、研究小组和其他数据专业人员可以提供更高效的问题解决方案。

传统的数据匿名方法:数据屏蔽

在机器学习流行之前,匿名化数据的原始方法通常以牺牲数据效用为代价来产生匿名化的数据。统计属性经常被部分或完全破坏,匿名方法通常也很薄弱,容易被逆向工程破坏,从而暴露 PII(个人身份信息)。

代替

数据中的真实值被替换为不同的“真实”值。例如,用从外部姓名列表中随机选择的姓名替换一列中的所有真实姓名。在某些情况下,替换可能涉及用随机编码的字符串替换 PII,只有原始数据管理员才能将其匹配回原始记录。例如,将“John Smith”替换为“R7JxvOAjtT”。

Pro: 对于替换值,任何人都不可能知道真正的值是什么,因为原始值已经完全从数据集中删除了。

Con: 需要一个可访问的替代“真实”数据列表来执行替换。这可能需要购买精心策划的数据集,如假姓名、电话号码、地址等,这可能很昂贵。

**反对:逆向工程。**参见下面的案例研究。

随机化算法“洗牌”

旨在随机排列同一列中的数据顺序。与用来自外部源的相似值替换值的替换不同,混排可以被认为是内部替换的一种形式,它只替换同一列中的值。

Pro: 与其他数据屏蔽方法结合使用时可以有效。例如,在供应商名称和合同价值的给定数据集中,简单地打乱供应商名称是无效的,因为任何具有行业特定知识的人都可以拼凑出合同规模和供应商的可能组合。如果供应商名称被掩盖被打乱,那么几乎不可能找出供应商。

**弊:**依赖与其他有效的掩蔽方法一起使用会破坏它的使用。

**弊:逆向工程。**当单独使用时,具有数据领域知识的攻击者可以简单地交换列值以获得原始值。

指零

简单地将机密数据替换为“空”值,如“NA”、“null”、“Missing”等。

Pro: 跨不同列实施的简单解决方案。

**反对意见:**很明显,数据被修改过,并不完全是原始的。还让用户确切地知道哪些单元丢失,如果不使用其他屏蔽方法,这使得有针对性的逆向工程攻击更容易。

**弊:**空值会使数据集难以分析,因为空的纯数字列会变成文本或字符串。

删除

从数据集中删除 PII 列。

Pro: 快速实现。

**反对:**对于应该删除哪些列,需要一定程度的主观性。定义哪些列被认为是 PII 并不总是那么简单,因为攻击者可能使用几个非 PII 列的组合来推断 PII。

缺点:删除几列可能会严重影响屏蔽数据集的效用。

掩饰

用类似“X”的替代符号模糊部分数据值。例如,信用卡号码 XXX — XXXX — XXXX — 9823。屏蔽和置零的主要区别在于,屏蔽保留了原始数据的一般格式。例如,我仍然可以看到信用卡号码是由 4 个数字“XXXX”组成的,即使我不知道它们的值。

Pro: 隐藏敏感数据,无需完全删除或使用置零。

**弊:**可能会遇到与零化相同的数据分析问题,因为替代符号会降低数据的效用。

摄动

推荐阅读:https://pdfs . semantic scholar . org/f541/758 a 9179998 a1 b21d 28 D1 feb 90428 dafad 90 . pdf

数据扰动是一种隐私保护方法,最初是为电子健康记录设计的[1]。目标是使用假数据或重用同一数据集中的数据,将“噪声”注入数据。噪音意味着你引入了关于数据集中真实值的不确定性。不确定性=数据屏蔽中似是而非的可否认性因为攻击者无法知道他看到的是否是真实的数据值。有两种扰动方法。 1) 分布方法 —用仍然允许数据集保持相似统计属性的假值替换数据中的值。可以通过替换同一分布样本或分布本身的值来实现这一点。 2) 值失真 —使用乘法或加法或您选择的其他随机过程添加噪声。例如,将 1-5 之间的随机数添加到人的年龄中,或者将列表中的每个工资随机更改为真实值的+/- 10%,这样真实工资不会被披露,但趋势仍然可以观察到。

Pro: 高度灵活的解决方案,允许以无限多种方式向数据添加噪声,同时保持统计属性。

**反对:逆向工程。**参见下面的案例研究。

传统方法导致的数据泄漏:案例研究

Netflix 奖

2006 年,网飞发起了“Netflix 奖”,这是一项设计算法来预测顾客对电影评价的在线竞赛。网飞提供了一个由 48 万用户为 17k 部电影制作的 1 亿收视率数据集。网飞对数据集进行了匿名化处理,用替换法将用户名替换成编码字符串,并用虚假评分扰乱一些评分。2008 年,德克萨斯大学奥斯汀分校的两名学生发表了“大型稀疏数据集的稳健去匿名化”一文,详细介绍了针对高维微观数据的一类新的统计去匿名化攻击。通过结合网飞的数据和 IMBD 的数据,学生们能够揭示谁是用户。在数据泄露的例子中,Netflix 奖现在无处不在。

斯威尼对州长维尔德[3]

推荐阅读:https://dataprivacylab . org/projects/identificability/paper 1 . pdf

1997 年,马萨诸塞州团体保险委员会公布了医院就诊数据,目的是改善医疗保健和控制成本。这篇文章引起了 Latanya Sweeney 的注意,她当时是麻省理工学院研究计算披露的研究生。时任马萨诸塞州州长的威廉·韦尔德向公众保证,PII 等名字已经从数据中删除。Sweeney 知道 Weld 州长住在剑桥,一个只有 7 个邮政编码的小镇,他有一种直觉,医院的数据可以很容易地追溯到对目标只有基本了解的个人。花 20 美元从市里买了一份选民名单,包括:姓名、地址、邮政编码、出生日期和性别。Sweeney 发现只有少数人知道 Weld 州长公开的出生日期,其中只有一个人的邮政编码与 Weld 居住的城镇相匹配。斯威尼把他自己的诊断和处方清单寄给了州长的办公室。#野蛮人。2000 年,Sweeney 发表了另一篇论文[4],指出只需要 3 条信息:邮政编码、出生日期和性别就可以识别 87%的美国人。

匿名数据的现代方法:差分隐私

推荐阅读:【https://arxiv.org/pdf/1911.12704.pdf】T4

今天,最新和最流行的数据匿名形式之一是差分隐私,它本质上是一种更加形式化和参数化的扰动形式[5]。具体来说,就是的分配方式。差分隐私提供了一个数学框架来量化必须注入数据集的最小噪声量,以确保数据泄漏不超过某个限制“ε”。

创建一个私人系统(一个可以匿名化你的数据的系统)的过程包括思考你的最终目标,然后逆向工作。您首先要考虑您希望共享的特定功能/数据列。然后,你决定一个正式的隐私系统,这是一套数学标准,当满足时,意味着你的数据集不能泄漏超过极限ε的数据。然后你选择你的噪声注入方法。噪声注入的方法是任意的,有许多方法和算法可以使用。重要的是,无论您选择哪种方法,您都可以将它参数化,以便它可以用来证明它满足您在隐私系统中指定的条件。当这些条件得到满足时,该系统被称为正式私有。

“差异”一词在哪里起作用?

差分指的是这样一个事实,即对于给定的将噪声注入数据集的计算任务“T ”,有许多算法可以实现给定ε的期望噪声。因为有许多不同的方式来实现 epsilon 隐私,我们说数据是不同的隐私。因此,**差分隐私是一个定义,不是一种算法。**因此,有可能创建一个正式的私有系统(满足您的隐私系统的条件),但不是差别私有,并且只有一种方式满足您的系统的噪音标准。选择使用差分隐私还是正式的非差分隐私系统取决于使用案例。此外,也可以选择使用非形式化的“特定”噪声注入,但存在创建匿名化较差的数据的风险,这些数据很容易被攻击者(例如 Netflix Prize)进行逆向工程。

为什么有人会选择特别的“非形式化”数据隐私?

差分隐私设置可能很复杂,也很及时。正如在匿名化水平和数据效用之间存在权衡一样,在隐私系统的努力和复杂性之间也存在权衡。差分隐私的最大问题是,当ε很小时(少量数据泄漏),为‘T’找到精确的(很好地保持统计特性)差分隐私算法变得越来越困难。在这种情况下,有人可能会选择一个正式的无差别的私有系统。如果无法找到一个单一的算法来满足一个非差异私有系统,那么您可能会默认一个特定的、非形式化的系统作为最后的手段。

可以说,一个正式的隐私系统的最大好处之一是,它作为一种质量控制的形式,因为该系统及其标准是有文件证明的。这在医疗保健、金融和银行等隐私敏感行业非常重要。对于许多公司机构来说,除非有明确的理由、合理的理论和可追溯的实施,以经受住行业和政府审计的严格性,否则什么都不能实施。坦率地说,就今天的隐私要求而言,网飞在 12 年前实施的特设隐私系统是可笑的。然而,它是一个重要的提醒,提醒我们隐私系统已经发展到了什么程度。

差异隐私解决了这样一个悖论:在学习关于一个群体的有用信息的同时,却对一个个体一无所知[5]

差分隐私工具箱

DP-SYN

https://github . com/usnistgov/privaceengcollabspace/tree/master/tools/de-identificati on/Differential-Privacy-Synthetic-Data-Challenge-Algorithms/DP syn

论文:https://github . com/usnistgov/privaceengcollabspace/blob/master/tools/de-identificati on/Differential-Privacy-Synthetic-Data-Challenge-Algorithms/DP syn/document/algorithm % 20 description . pdf

DP-field groupshttps://github . com/gardn 999/privaceengcollabspace/tree/master/tools/de-identificati on/Differential-Privacy-Synthetic-Data-Challenge-Algorithms/DP field groups

论文:https://github . com/gardn 999/privaceengcollabspace/blob/master/tools/de-identificati on/Differential-Privacy-Synthetic-Data-Challenge-Algorithms/DPFieldGroups/gardn 999 _ nistdp 3 _ writeup _ and _ Privacy _ proof . pdf

基于图形模型的评估

https://github.com/ryan112358/private-pgm

论文:https://arxiv.org/abs/1901.09136

DP-SGD

https://github.com/tensorflow/privacy

论文:https://arxiv.org/abs/1607.00133

古普特https://github.com/prashmohan/GUPT

论文:https://www.cs.umd.edu/~elaine/docs/gupt.pdf

ARX 数据匿名工具

https://arx.deidentifier.org

差分私有凸优化基准——各种差分私有凸优化算法的集合

https://github.com/sunblaze-ucb/dpml-benchmark

  • 近似极小值扰动

论文:http://www.uvm.edu/~jnear/papers/TPDPCO.pdf

  • 私有随机梯度下降

论文:https://arxiv.org/abs/1405.7085

论文:https://arxiv.org/pdf/1607.00133.pdf

  • 基于私有凸扰动的随机梯度下降

论文:https://arxiv.org/pdf/1606.04722.pdf

  • 二等兵弗兰克-沃尔夫

论文:https://arxiv.org/pdf/1411.5417.pdf

二重唱

https://github.com/uvm-plaid/duet

论文:https://arxiv.org/abs/1909.02481

埃克泰罗

https://github.com/ektelo/ektelo

论文:https://dl.acm.org/citation.cfm?id=3196921

隐私保护应用

https://github . com/us dot-its-JPO-data-portal/privacy-protection-application

教师集体的私人聚集https://github.com/tensorflow/privacy/tree/master/research

论文:【https://arxiv.org/abs/1610.05755】T42

论文:https://arxiv.org/abs/1802.08908

DP comp——基于网络的工具,旨在帮助从业者和研究人员评估基于 DPBench 的最新差分私有算法的准确性

https://www.dpcomp.org

【https://github.com/dpcomp-org/dpcomp_core#dpbench

论文:https://people.cs.umass.edu/~dzhang/dpcomp_demo.pdf

DPBench —隐私算法标准化评估框架

论文:https://arxiv.org/abs/1512.04817

Gretel —使用神经网络创建差分私有数据的包

https://github.com/gretelai/gretel-synthetics

https://medium . com/Gretel-ai/using-generative-differential-private-models-to-build-privacy-enhanced-synthetic-datasets-c 0633856184

推荐阅读:

https://towards data science . com/understanding-differential-privacy-85ce 191 e 198 a

https://digitalcommons.ilr.cornell.edu/ldi/49/

https://www . science mag . org/news/2019/01/can-set-equations-keep-us-census-data-private

https://www . ijstr . org/final-print/mar 2017/A-Review-Of-Synthetic-Data-Generation-Methods-For-Privacy-Preserving-Data-publishing . pdf

MWEMhttps://arxiv.org/abs/1012.4763

双重查询https://arxiv.org/abs/1402.1526

HDMMhttps://arxiv.org/abs/1808.03537

远离匿名方法:合成数据

随着机器学习模型变得更加复杂,关于数据匿名化的想法也发生了变化。研究小组没有将复杂的算法应用于数据集,而是尝试着教导模型识别数据集内的模式,然后根据模型所学生成“综合”数据。

决策树贝叶斯网络通过对表格数据中的离散变量建模,提供了一种新的匿名化数据的方法,并且效果良好。随后 copulas 用于建模非线性相关连续变量。使用 copulas 的一个好处是能够对各种分布进行建模,例如单变量数据(高斯、贝塔、伽马、高斯 KDE、截断高斯)双变量数据 (Clayton、Frank、Gumbel、Ali–Mikhail–Haq、Joe)和多变量数据 (Guassian、D-Vine、C-Vine、R-Vine)。

不要脸的塞:https://medium . com/@ Timothy pillow/introduction-to-copulas-ad 1 a3 b 83 a 297

合成数据和匿名数据有什么区别?

推荐阅读:https://www-cdn . law . Stanford . edu/WP-content/uploads/2019/01/bello vin _ 2019 01 29-1 . pdf

包括形式化隐私系统在内的传统匿名方法可以被认为是扭曲净化技术,旨在将扭曲和不确定性直接应用于原始数据集。在某种意义上,你可以说你“将匿名化应用到衣服本身”。

合成数据的关键区别在于,结果是由原始数据集间接生成的,因为它是“学习”分布的结果。因此,尽管合成数据具有与原始数据集相似的属性,但是可以将其视为与原始数据不同的**。**

合成数据的一个问题是,如果模型很好地学习了联合分布,则*由于合成数据由从模型学习的分布中随机采样的组成,因此合成数据集包含值的组合的可能性非常小,这些值完全可能对应于:与原始数据集相同的行,或者更可能对应于:可以在原始数据集中找到的行内的部分值。如果这些值对应于任何高风险 PII 数据,如邮政编码、出生日期或性别的真实组合,这尤其是个问题。因此,将合成数据与差分隐私相结合可能会两全其美。*

关于命名的快速警告

术语“合成数据”在差分隐私中被随意使用。常见术语,如“差分隐私合成数据”或“差分隐私生成的合成数据”是不明确的,因为它要么意味着 1)合成数据是使用“不同布”的方法生成的,并使用差分隐私进一步净化或 2) 差分隐私已用于创建对原始数据唯一的匿名化数据集,因此被假定为“合成的”。不幸的是,后一个定义是最常用的,我认为它是最模糊的。我个人认为,如果数据是“相同的布料”,它就没有被合成;已经被扭曲/消毒了。无论如何,当你看到有差别的私有数据时,要记住一点:仅仅因为它是合成的并不意味着它是有差别的私有的,仅仅因为它是有差别的私有的并不意味着数据最初是使用“不同布料”的方法合成的。

综合数据工具箱

决策树

CART(分类和回归树)—离散变量

https://github.com/ColleenBobbie/Cancer-Prediction

论文:https://www . SCB . se/content assets/ca 21 efb 41 fee 47d 293 bbee 5b f 7 be 7 FB 3/using-cart-to-generate-partial-synthetic-public-use-microdata . pdf

SDT(空间分解树)—空间数据

论文:https://arxiv.org/abs/1103.5170

隐私树—空间数据

论文:https://arxiv.org/abs/1601.03229

贝叶斯网络

CLBN

论文:【https://ieeexplore.ieee.org/document/1054142

PrivBN(通过贝叶斯网络发布私人数据)

论文:http://dimacs.rutgers.edu/~graham/pubs/papers/PrivBayes.pdf

数据合成器

https://github.com/DataResponsibly/DataSynthesizer

论文:https://faculty . Washington . edu/bill Howe/publications/pdf/ping 17 data synthesizer . pdf

连系

SDV-Copulas(综合数据仓库)

https://github.com/sdv-dev/Copulas

SDV——建模和采样关系数据库

https://github.com/sdv-dev/SDV

论文:https://ieeexplore.ieee.org/document/7796926

合成数据的最新方法:GANs

推荐阅读:https://towardsdatascience . com/review-of-gans-for-tabular-data-a30a 2199342

生成性对抗网络(GANs)由两个在迭代循环中相互对抗的模型组成。一个模型扮演“发生器”,另一个扮演“鉴别器”。与使用 GANs 生成深度赝品的方式类似,它们也可以用于生成与原始数据非常相似的合成表格数据。除了使用应用于神经网络的权重和过滤器来添加噪声之外,将噪声添加到数据集的相同基础也适用于 gan。用于图像的 GANs 和用于合成数据的 GANs 之间的另一个区别是,用于图像的 GANs 通常使用卷积神经网络(CNN),因为生成/检测伪图像的环境要求模型迭代图像的层,而一层不影响下一层的生成。例如,如果鉴别器使用边缘检测滤波器,那么您不希望边缘滤波器的检测能力基于应用于图像的先前滤波器而改变[6]。本质上,你不希望过滤器有记忆。

用于合成表格数据的 GAN 通常将使用递归神经网络(RNN) 作为架构,因为您可以实现长短期记忆(LSTM)。LSTM 网络和 CNN 之间的一个关键区别是,LSTM 能够为网络增加内存,从而可以学习的长期依赖性,当您希望 GAN 能够识别数据集内的相关属性时,这一点尤为重要。

GAN 工具箱

梅德根

https://github.com/mp2893/medgan

论文:https://arxiv.org/abs/1806.06397

相关论文:https://arxiv.org/abs/1703.06490

维根

https://github.com/akashgit/VEEGAN

论文:https://arxiv.org/abs/1705.07761

TableGAN

https://github.com/mahmoodm2/tableGAN

论文:http://www.vldb.org/pvldb/vol11/p1071-park.pdf

埃尔根

论文:https://arxiv.org/abs/1709.01648

肉酱

论文:https://openreview.net/pdf?id=S1zk9iRqF7

相关论文:https://arxiv.org/pdf/1906.09338.pdf

DP-WGAN

https://github . com/nesl/NIST _ differential _ privacy _ synthetic _ data _ challenge

论文:https://github . com/nesl/NIST _ differential _ privacy _ synthetic _ data _ challenge/blob/master/reports/UCLANESL _ solution _ privacy _ proof . pdf

相关论文:https://papers . nips . cc/Paper/7159-improved-training-of-wasser stein-gans . pdf

DP-GAN(张炘炀、纪守灵、)

https://github.com/alps-lab/dpgan

论文:【https://arxiv.org/pdf/1801.01594.pdf

【DP-GAN(李阳谢,林凯翔,,,)

https://github.com/illidanlab/dpgan

论文:https://arxiv.org/pdf/1802.06739.pdf

TGAN

https://github.com/sdv-dev/TGAN

论文:https://arxiv.org/abs/1811.11264

CTGAN

https://github.com/sdv-dev/CTGAN

论文:https://arxiv.org/abs/1907.00503

合成数据的未来?

到目前为止,我们已经看到,机器学习在从数据中学习方面非常有效,并且能够复制合成数据,这些数据:

-保持与原始数据相同的统计分布

-了解不同列之间的相关性

-提供出色的数据匿名功能

-可缩放至任何尺寸

-可以无限次取样

与数据监管服务和使用传统方法泄露数据时的法律诉讼成本相比,生成合成数据极具成本效益。正在进行越来越多的研究来比较对原始数据集和合成数据集进行的数据分析的质量。此外,一些研究人员对合成数据如此有信心,以至于“科学家可以像使用控制数据一样使用合成数据”。

随着数据隐私越来越受到公众的重视,这是一个可能会以指数速度增长的研究领域。

51%的高级企业受访者表示,部门之间缺乏数据共享是数据战略中的一个关键问题。【7】

消费者数据显示…

86%的人希望对公司掌握的数据行使更大的控制权

76%的人担心分享数据会让他们成为营销活动的目标

34%的人提供了伪造的个人信息,以避免泄露个人信息 [8]

数据屏蔽市场预计将以 14.8%的复合年增长率增长(CAGR),到 2022 年价值将达到 7.67 亿美元 [9]

全球隐私管理软件市场预计将增长 33.1%(CAGR)。【10】

请随时给我发消息,我会把它们添加到列表中。

[1]D . v .,Kumar N . k .,& R.Lakshmi Tulasi,D. (2018)。基于综合数据扰动的云增量数据集隐私保护技术。国际工程与技术杂志,7(3.34),331–334。http://dx.doi.org/10.14419/ijet.v7i3.34.19219

[2] A. Narayanan 和 V. Shmatikov,“大型稀疏数据集的稳健去匿名化”, 2008 年 IEEE 安全和隐私研讨会(sp 2008) ,加利福尼亚州奥克兰,2008 年,第 111–125 页。https://ieeexplore.ieee.org/document/4531148

[3] Barth-Jones,Daniel,“威廉·韦尔德州长医疗信息的‘重新识别’:对过去和现在的健康数据识别风险和隐私保护的关键重新检查”( 2012 年 7 月)。http://dx.doi.org/10.2139/ssrn.2076397

[4] L. Sweeney,简单的人口统计数据通常可以唯一地识别人。卡内基梅隆大学,数据隐私工作文件 3。匹兹堡 2000。https://dataprivacylab . org/projects/identificability/paper 1 . pdf

[5]辛西娅·德沃克和亚伦·罗斯。2014.差分隐私的算法基础。找到了。趋势理论。计算机。Sci。9,3–4(2014 年 8 月),211–407。https://doi.org/10.1561/0400000042

[6] Bellovin,Steven M .和 Dutta,Preetam K .和 Reitinger,Nathan,《隐私和合成数据集》(2018 年 8 月 20 日)。斯坦福技术法律评论,即将出版。http://dx.doi.org/10.2139/ssrn.3255766

[7]大卫·罗杰斯,唐·塞克斯顿。大数据时代的营销投资回报率:2012 年 BRITE/尼亚马转型营销研究。哥伦比亚商学院。2012.https://www 8 . gsb . Columbia . edu/global brands/sites/global brands/files/images/2012-BRITE-尼亚马-营销-投资回报-研究. pdf

[8]马修·金特和大卫·罗杰斯。数据共享的未来是什么?消费者心态和品牌的力量。哥伦比亚商学院。2015 年 10 月https://www8 . gsb . Columbia . edu/global brands/sites/global brands/files/images/The _ Future _ of _ Data _ Sharing _ Columbia-Aimia _ December _ 2015 . pdf

[9]市场与市场。按数据屏蔽类型(静态和动态)、组件(软件和服务)、部署类型、组织规模、业务职能(财务、营销和销售、运营和法律)、垂直市场和地区划分的数据屏蔽市场—到 2022 年的全球预测。2017 年 12 月https://www . marketsandmarkets . com/Market-Reports/data-masking-Market-24977919 . html

[10]市场观察。CAGR 占 33.1%,到 2025 年隐私管理软件市场规模将达到 32.9 亿美元。2020 年 4 月 6 日。https://www . market watch . com/press-release/at-331-cagr-privacy-management-software-market-size-set-to-register-32.9 亿美元-by-2025-2020-04-06

多臂 Bandit 算法路线图

原文:https://towardsdatascience.com/a-roadmap-to-multi-arm-bandit-algorithms-a5a074d41a24?source=collection_archive---------33-----------------------

最近一直在读 Tor Lattimore 和 Csaba Szepesvári 的 Bandit Algorithms,并在一个读书会上讨论。我想,在思考或描述强盗问题时,最好退后一步,在一个非常高的层次上总结一些人们可能会问的主要问题!

如果你还不熟悉 bandit 算法,不用担心!我希望在我的小组通过 Bandit 算法文本进行研究时,能对它们做一个很好的记录(真的很好!).但是现在,让我做一个简短而甜蜜的总结:

Bandit 算法是一种可以在不确定环境中执行的学习算法。具体来说,他们的名字来源于老虎机的想法。它可能有许多手臂,拉一只手臂可能会给你奖励。其思想是,通过平衡探索和利用,bandit 算法可以理解每只手臂的潜在奖励分布,允许学习者利用并获得可能的最佳累积奖励。

那么,他们为什么被称为土匪呢?因为他们拿走你所有的钱(或者说,老虎机确实 lol)。

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

正如我们将从我提出并强调的一些问题中看到的,bandit 算法为许多学习问题提供了一个非常通用的公式,只要我们保留某些关键假设(例如今天选择一个动作不会改变明天可用的动作)。对于更复杂的学习问题,强化学习就变得必要了!

我们将在本帖中考虑的一些问题包括:

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

事不宜迟,让我们开始吧!

行为空间

你的环境是什么样的,你的学习者需要什么样的行动空间来与环境互动?

无限对有限

首先要区分的是无限和有限动作空间之间的区别。有限动作空间很好理解。这类似于每次“选择 k 个分支中的一个”,很可能是大多数人第一次想象 bandit 算法与他们的环境交互的方式。

相比之下,无限的行动空间也是可能的。你可能会想“但是怎么做呢?”因为这几乎是不可能的。但事实上,如果我们的空间有限,这是很有可能的。我的意思是,想象你只有一个动作,但是你可以用从 0 到 1 的一系列值来选择它。现在你的空间是无限的!零到一之间的任何数字都是可能的(也许是我们施加在手臂上的力的大小)。关键是这里有一些约束使得问题成为可能,比如奖励结构上的李普希茨条件,使得最优行动不能隐藏在任意小的空间中。

单一动作对组合动作

你的土匪和它的环境互动时,是只允许拉一只胳膊(玩一个动作)还是可以同时玩多个?这就是单一作用空间和组合作用空间的区别!如果你有一个环境,让你的学习者可以同时拉多个手臂(同时玩多个动作),那么你就有了一个组合动作空间。

想象一下,你有一个图,你的学习者想要从节点 S 到节点 t。每一轮,学习者有机会选择它将包括在从 S 到 t 的路径中的边。然后,整个图中的每条边将以该边唯一的概率被丢弃。如果你的学习者的路径完全完好无损,那么当它从 S 导航到 t 时,它会得到奖励。否则,它不会得到任何奖励。这种边的子选择是组合动作空间的一个例子!

总而言之:

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

问题结构

处理强盗问题的另一个基本问题是你的问题/环境是否有结构。我的意思可以简单地表述为:选择一个动作会显示出你没有玩过的动作的任何信息吗?如果是,问题有结构!否则,你有一个无组织的土匪问题。

一个非结构化的土匪问题并不是没有希望的(事实上,这似乎很常见)。这只是意味着,如果我有一个双臂强盗,我不能通过玩手臂 1 来学习任何关于手臂 2 的东西。我可能知道他们都是通过高斯分布产生奖励,但是这并没有给我任何联系。

相比之下,我们可以有一个双臂土匪,双臂产生的回报与伯努利分布,有一个单一的参数。我的意思是说,臂 1 由𝜃θ参数化,臂 2 由 1−𝜃1−θ.参数化只有一个参数需要学习,这是整个问题的基础,通过弹奏第一只手臂,我获得了关于另一只手臂的信息!

外信息

你的学生可以利用任何额外的信息吗?这可以极大地提高算法的性能(通常是以好的方式)。

例如,如果你有一个上下文,你的学习者可以通过上下文强盗算法来利用它。假设你有一个双臂土匪,但手臂在一周的不同天表现不同(但在一周的相同天表现相同)。如果你用一个普通的 bandit 算法来解决这个问题,回报将会非常不稳定,并且会损害性能。然而,如果你在行动决策过程中使用上下文(一周中的几天),那么你的学习者应该表现得更好!

再一次,想象你的 bandit 算法正试图学习一个流行的搜索引擎的广告投放。它可以只从动作集中选择一个广告并显示给用户,但这可能会导致整体表现不佳。相反,如果有一个向量表示使用搜索引擎的用户的一些信息,也许我们可以将用户上下文向量合并到我们的 bandit 算法学习过程中!

奖励机制

土匪问题如何产生奖励?它们是随机的,并且来自同一个分布吗?或者,也许,环境是敌对的,奖励被选择为最坏的情况,给定了关于 bandit 算法如何学习的知识。

随机的

在随机奖励生成设置下,每个动作对应一个 IID 奖励。也就是说,每个动作都有一个基础分布,当选择一个动作时,它会从中进行采样。它永远不会改变,因此学习者只需要探索手臂,直到它能够正确地限制奖励产生分布的形状。

非平稳的

从技术上讲,奖励分布可以是非平稳的,但学习算法将为此付出代价。鉴于如何回报将是不稳定的某种规则,分析可以考虑这将如何影响整体表现。这可以被看作是对随机设置的放松,但这是有代价的。

对手的

在对抗的环境中,所有的假设都被抛弃了。奖励是以对抗的方式选择的,旨在选择最差的结果,让学习者失去兴趣。幸运的是,在这样的环境中,学习者仍然可以做很多事情(随机化是关键)。我希望在另一个帖子中更详细地谈论这一点!

总结一下:

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

学习者反馈

我们在这里要强调的最后一个问题是,强盗式学习者收到的反馈的性质。为了使一个问题成为强盗问题,学习者需要在每一轮/每一时间步结束时收到一个奖励信号。但是学习者收到了多少反馈呢?

土匪反馈

Bandit feedback 是一个术语,指的是只从学习者选择的行为中获得奖励信息。如果手臂一被使用,只有手臂一的奖赏被观察;其他的手臂,虽然可以玩,但不能玩,所以学习者不能获得关于它们或它们的奖励的信息。

这是传统的强盗设定,例如,当环境是随机的时,这很有意义。在组合设置中,非常有趣的是,bandit 反馈只为子动作的组合提供了一个信号。也就是说,学习者不会立即看到每个子动作提供了什么,而是看到了累积的信号。

全面反馈

另一方面,学习者可以观察到每一步的所有行动回报。这在对抗环境中非常有用,并且允许开发一些有趣的算法。在随机环境中,这没有任何意义,因为这样一来,学习者就永远不需要探索了。他们会简单地根据有界观测值选择最佳臂,然后在每个时间步更新边界。这会使随机问题变得非常琐碎。

部分反馈/半土匪反馈

可以把这个反馈场景看作是 bandit 和 full feedback 之间的中间地带。它在组合设置中最有意义,指的是观察到累积奖励信号的情况,但在组合空间中选择的每个子动作的子分量信号也是如此。

如果一个人正在对上班所花费的时间进行建模,这可能很有意义。如果我今天走了一条小路,并且知道这样做需要大约 5 分钟,那么当我明天开车去上班时,我可以应用那个子信息。

部分监控

在不是每一轮都收到反馈的情况下,我们处于 bandit 算法之外。然而,如果你感兴趣,我鼓励你研究一下部分监控

以下是这些设置的汇总图:

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

包扎

所以,这就是我目前总结的在处理多臂土匪和土匪问题时要考虑的一些关键问题。我做得怎么样?我错过了什么关键问题吗?让我知道!

销售仪表板告诉你人们最喜欢为 2019 年圣诞节买什么

原文:https://towardsdatascience.com/a-sales-dashboard-tells-you-what-people-like-most-to-buy-for-christmas-2019-5412987ab928?source=collection_archive---------40-----------------------

圣诞节刚刚过去。今年圣诞节你收到了什么礼物,送了什么礼物?你是否好奇 2019 年圣诞节最畅销的商品是什么,人们最想要的礼物是什么?这些问题的答案都在我下面做的圣诞销售仪表盘里。让我们来看看。

这个圣诞仪表板是我用互联网上的数据制作的在线销售仪表板。

我们先来看左边的两张图表。下面的柱状图展示的是每一类产品的销售额,上面的折线图展示的是某一类产品的年销售额。注意,左边的两个图表是联动的,即如果你在下面的柱状图中点击不同的产品类别,上面的折线图中就会显示出对应产品类别的年销量。

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

中间酷炫的 3D 地球地图显示了圣诞节订购商品的物流路线,流线的粗细对应着商品的销量。我们还可以定制流线的样式。

仪表盘右上角是一个字云图,显示了人们最想要的圣诞礼物类别。字体越大,这类礼物越受欢迎。

最后,让我们看看右下角的实时销售图表。该图表可以连接到数据库系统,以更新实时销售数据。并且通过上面的水球图,可以实时观察产品的仓库库存。当存储容量低于警戒线时,会显示红色警告,并弹出一个框通知您:缺货。

现在,我相信你们都知道什么是最受欢迎的圣诞产品类别。这个圣诞销售仪表板上的数据可能不准确,但您仍然可以从数据可视化的实现和销售仪表板的设计中学习。如果你有兴趣,我很乐意和你分享制作这个圣诞仪表盘的方法和技巧。以下是具体制作过程。

步骤 1:选择工具并准备数据

首先,我们需要选择一个合适的数据可视化工具或 BI 工具来设计很酷的仪表盘。如果你有很强的技术功底,也可以用 Python 或者 r 之类的编程语言,我做这个圣诞仪表盘用的工具是 FineReport 。可以从官网下载其个人版免费使用。

N OTE: FineReport 是我工作的数据研究所开发的一款 BI 报告工具。个人使用完全免费。你可以下载它来练习制作图表、报告和仪表板。

圣诞节仪表盘中的数据来自统计公司。并将数据存储在 Excel 文件中。接下来,我们需要将数据导入 FineReport。

步骤 2:导入数据

下载 FineReport 后,将 Excel 文件放在计算机上的“Reportlets”文件夹中。或者您可以使用自己的数据并将 FineReport 直接连接到您的数据库。

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

第三步:图表链接

要实现数据的联动,可以选择一个数据库来连接数据。

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

而要实现图表联动,使用简单的 SQL 语句作为条件。

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

第四步:设计布局

准备好数据后,开始布局。我选择绝对布局的类型。点击“body”,可以设置其属性。

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

步骤 5:插入图表

我们只需要拖放来插入图表。对于图表的选择,可以参考本文 数据可视化中前 16 种图表类型

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

总体布局如下。

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

然后为图表设置数据。依次选择图表所需的数据。

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

对于链接效果,我们之前已经设置了简单的 SQL 语句。现在我们为需要链接的图表设置参数。

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

第六步:实时显示数据

右下方的实时销售图表可以实时更新销售数据。这种效果是 FineReport 的免费插件直接实现的。

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

对了,雪花的效果是用 JS 实现的。你可以自己做。

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

终于

嗯,这些是制作圣诞仪表盘的主要步骤。如果你对操作还有疑问,还有两个更详细的指南供你参考: 制作销售仪表盘的分步指南新手如何打造一个很棒的仪表盘

您可能也会对…感兴趣

让你的数据报告脱颖而出的指南

动态图表:让你的数据动起来

新手如何设计酷炫的数据可视化?

2019 年你不能错过的 9 款数据可视化工具

用于自动化结构化数据准备的可扩展预测引擎

原文:https://towardsdatascience.com/a-scalable-prediction-engine-for-automating-structured-data-prep-dc95154109d8?source=collection_archive---------25-----------------------

活动讲座

Ihab 易勒雅斯| TMLS2019

来自多伦多机器学习峰会的演讲:【https://torontomachinelearning.com/

关于演讲者

伊哈布·易勒雅斯是滑铁卢大学的计算机科学教授,也是 Tamr |https://cs.uwaterloo.ca/~ilyas/的联合创始人

关于谈话

“数据科学家花费大量时间准备、清理和转换原始数据,然后才有机会将这些数据提供给他们精心制作的模型。

尽管努力建立稳健的预测和分类模型,但数据错误仍然是低质量结果的主要原因。这种大规模的劳动密集型数据清理工作仍然是数据科学自动端到端人工智能管道的主要障碍。

在本次演讲中,我将重点讨论作为推理问题的数据准备和清理,这可以通过利用 ML 中的现代抽象来实现自动化

我将描述 HoloClean 框架,这是一个用于结构化数据的可伸缩预测引擎。该框架有多个成功的概念证明,包括清理普查数据、市场研究数据和保险记录。多个商业企业的试点显示,在将源(训练)数据提供给下游分析之前,这些数据的质量有了显著提高。

HoloClean 构建了两个主要的概率模型:一个数据生成模型(描述数据的预期外观);以及一个实现模型(描述错误如何被引入到预期的干净数据中)。该框架使用少量学习、数据扩充和自我监督来学习这些模型的参数,并使用它们来预测错误及其可能的修复。"

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

YouTube

朱莉娅语言快速浏览

原文:https://towardsdatascience.com/a-scenic-look-at-the-julia-language-e8ba53dea5bd?source=collection_archive---------44-----------------------

体验朱莉娅,而不必做任何困难的事情

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

钱德勒·陈在 Unsplash 上的照片

介绍

Julia 是一种新的多用途编程语言,旨在通过提供易用性速度来解决“两种语言问题”。

2010 年代开发的另外两种最受欢迎的新语言,Go 和 Rust,看起来都像是经过清理的 C 或 C++。相比之下,Julia 看起来像 Python 或 Matlab,只是稍微有点变化。这就是为什么 Julia 在科学家和学者中引起了很大的兴趣,他们通常更喜欢更容易开发和理解的语言。然而,随着 Julia 的库的成熟,Julia 在数据科学社区中获得了一些人气,尤其是在深度学习方面。

朱莉娅越来越受欢迎

如今,Julia 的下载量超过 100 万次,年增长率为 161%。包括亚马逊、苹果、迪士尼、脸书、福特、谷歌、IBM、微软、NASA、甲骨文和优步在内的大公司都是 Julia 的用户、合作伙伴或者正在雇佣 Julia 程序员。

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

纽约美联储银行的经济学家已经采用茱莉亚作为模型。他们报告说,有了 Julia,他们估算模型的速度比 T8 快了 10 倍,代码行数减少了一半,节省了时间,提高了可读性,减少了错误

用他们的话说:

“我们希望用我们的模型解决困难的问题——从理解金融市场发展到对家庭异质性建模——只有当我们接近编程的前沿时,我们才能做到这一点。”

一粒盐

虽然朱莉娅很令人兴奋,但重要的是不要轻信所有关于朱莉娅的炒作(T21)。处于编程的前沿并不总是一件好事。因为它太新了,所以 Julia 的代码库可能会有所欠缺。许多 Julia 库仍在更新和扩展,每隔几个月就有新的特性添加到语言中。随着旧功能的贬值,这可能会带来一些成长的烦恼。

是时候让朱莉娅成为你的主要语言了吗?也许吧。这取决于你需要从你的编程语言中得到什么。如果你需要更广泛使用的东西,Julia 可能不是最好的选择。但是,不管它是否应该是你的主要语言,朱莉娅是值得调查的。

茱莉亚代码的风景照

接下来的部分包含解决不同领域问题的 Julia 代码片段。这些代码的目的是以简单易懂的方式展示日常编程在 Julia 中的样子。

数学和统计学

基础数学:

**# Polynomial function. Evaluating p(1) returns 9* p(x) = x^2 + 2x + 6# Make a (2,2) matrix of 1s
A = fill(1, 2, 2)# Matrix vector multiplication
x = rand(2)
y = A * x# Elementwise multiplication
B = A .* 5# Square every element of an array
B = B .^ 2*

从分布中随机抽取样本:

*using Distributions*# Take 100 samples from a normal distribution* dist = Normal(0, 1)
x = rand(dist, 100)* 

求矩阵的特征值:

*using LinearAlgebraA = rand(10, 10)
evals = eigvals(A)*

文件 IO 和字符串

读入文件并列出单词列表:

*fstream = open("my_file_name.ext")
lines = readlines(fstream)
split_space(x) = split(x, " ")
words = map(split_space, lines)
all_words = reduce(append!, words)*

在目录中查找.txt文件:

*current_directory = @__DIR__
files = readdir(current_directory)
is_txt(x) = endswith(x, ".txt")
txt_files = filter(is_txt, files)*

数据结构

创建最大堆并获得最大值:

*using DataStructuresdata = rand(100)
heap = BinaryMaxHeap(data)
max_val = top(heap)*

机器学习

制作并训练一个密集的神经网络。(感谢吉米·罗耶更新了代码)

*using Flux
using Flux: msemodel = Chain(
    Dense(2,100, relu),
    Dropout(.5),
    Dense(100, 100, relu),
    Dropout(.5),
    Dense(100, 1, relu),
    softmax
)# Random points in the plane
X = rand(2, 1000)# Label where points are within the unit circle or not
Y = sum(X .^ 2, dims=1) .< 1println("Example data")
for index in 1:10
    println("x1, x2, y = ", X[1, index], ", ", X[2, index], ", ", Y[index])
end# Mean squared error loss function
loss(x, y) = mse(model(x), y)# Format data and extract trainable parameters
data = [(X, Y)]
ps = Flux.params(model)# Train with stochastic gradient descent
optimizer = Descent(0.01)for epoch in 1:300
    Flux.train!(loss, ps, data, optimizer)
end*

结论

我已经用 Julia 写了一年多的代码,对这门语言非常感兴趣。虽然它要像 Python 一样成熟还有很长的路要走,但我相信它会成为科学计算和数据科学的顶级语言之一。

* [## 已经会 Python 了怎么学 Julia

跳到好的方面

towardsdatascience.com](/how-to-learn-julia-when-you-already-know-python-641ed02b3fa7) [## Julia 如何利用多重调度击败 Python

亲自看

medium.com](https://medium.com/swlh/how-julia-uses-multiple-dispatch-to-beat-python-8fab888bb4d8)*

寻找有效的元学习:哺乳动物、爬行动物和相关物种

原文:https://towardsdatascience.com/a-search-for-efficient-meta-learning-mamls-reptiles-and-related-species-e47b8fc454f2?source=collection_archive---------20-----------------------

一个经常被抱怨的事实是,现代机器学习的能力往往是狭窄和脆弱的:虽然给定的技术可以应用于许多任务,但个人学习的模型只专注于一个,并且需要大量数据来获得这种专业能力。

元学习提出:有没有一种方法可以跨任务训练一个模型,使特定新任务的获取更快、数据效率更高,而不是在每个新任务上从头开始?元学习和相关的少量学习学科的方法有许多形式——从学习任务不可知的嵌入空间到递归网络,递归网络顺序传递训练数据并在它们的状态进化权重中编码学习算法——但可以说这些方法中最直观的是 MAML:模型不可知的元学习。

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

[题外话:这篇博客文章将假设一定量的元学习背景,主要围绕学习不是发生在单一任务上,而是发生在任务分布上的想法。如果你对这种想法或元学习作为一个概念有点不确定,我推荐你阅读我之前关于元学习的文章,然后回到这篇文章,它更详细地研究了 MAML 和相关方法。]

MAML 的前提是:如果我们想要一个初始模型,它可以适应从一些任务分布中抽取的新任务,给定每个新任务上的少量数据点,我们应该将我们的模型构造成直接针对那个目标进行优化。具体而言,MAML 执行以下一系列步骤:

  1. 定义一些组初始参数 : θ
  2. 从任务分布中抽取一个任务t对来自 t 的训练批次数据进行 k(一般为< 10)步梯度下降,初始化参数值为θ。在 k 步的末尾,你得到了参数ϕ.
  3. 从任务 t 在参数值ϕ评估你在测试批次上的损失,然后计算该损失相对于我们初始参数θ的导数。也就是说,计算我们如何修改我们的跨任务网络初始化,以在对新任务进行少量优化步骤后导致更好的损失。这种导数,通过学习过程本身传播回起始权重的值,与我们通常在梯度下降中采用的导数非常明显不同,我们很快会深入研究。
  4. 使用该梯度向量来更新我们的θ初始化参数,丢弃为该特定任务学习的ϕ,并使用新的采样任务再次开始该过程,用我们最近更新的θ值初始化我们的网络。

根据这种方法,一个合理的问题是:

这和训练一个平均来说对所有任务都有效的参数向量是一回事吗?

我将对这种方法使用的简写是联合训练,在这种方法中,我们只是从不同的任务中抽取交替的批次,并对每个批次进行正常的梯度下降。我不清楚 MAML 是否真的胜过联合训练的实证答案,但是从概念上来说,MAML 试图做的事情有微妙的不同,而且,以我的经验来看,解开这种差异的项目很有价值,不仅有助于更清楚地了解 MAML 本身,还有后来提出的对它的修改。

什么样的初始化是好的?

MAML 学习一个好的跨任务初始化的目标提出了一个显而易见的问题:不同的参数初始化有哪些不同的方式使变得好?它们可能会以哪些方式影响最终损失值?更简单地说,对于某些任务分配,是什么使一个初始化比另一个更好?

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

因为,有时候,最开始并不是参数开始的最佳位置

首先,让我们想象一下我们在一个新任务上根本不优化的情况。在这种情况下,我们的“最终”参数值ϕ和初始θ值没有区别。θ的变化意味着ϕ的等价变化,因为它们是相同的值。

当我们真正开始对任务采取优化步骤,并学习不同于θ的特定任务ϕ时,事情就变得更有趣了。

就像上面一样,你的元学习θ的好处只是它在任务中具有低损失,因此从那里采取的优化步骤获得了领先,因为从那个低损失值开始。一般来说,优化会使你的损失相对于你的起点更好,所以有一个较低的损失初始化提供了一个较低的最终损失的粗略上限,可以使你学到的最终ϕ更好。

然而,让我们想象另一种情况,出于某种原因,我们只能在初始化值θ之间进行选择,这些值在您绘制的新任务中具有相同的损失值。在这个世界上,我们不能通过降低初始参数的损失来降低优化后的损失,因为我们已经人为地移除了那个杠杆。在这种情况下,一个初始化比另一个初始化更好的其他方式有哪些?

为了形象化,让我们想象一个简单的例子,其中我们所有的等效损耗点都在理论最小值周围的 2D 圆内。想象一下,一个点位于一个高原上,当你向最小值的方向移动时,它停留在一个高损耗处,直到它在最后一刻下降。另一个点位于向下朝向最小值的缓坡顶部。即使这些点以相同的(相对较高的)损失开始,渐变山顶上的点显然更好,至少在使用梯度下降作为优化策略的情况下,因为梯度下降将很容易沿着从起点到最小损失点的倾斜路径进行。另一方面,高原上的点不会给梯度下降提供任何初始工作,因此寻找最小值会更加困难。

因此,这是两个粗略的概念,在这两个概念中,初始化可能是“好的”:

  1. 他们可以自己有低损失在期待跨任务
  2. 他们可以通过更好的方式进行定位,以促进任务中后续的损失减少步骤

这显然是一个粗略的概念分类,我当然不会说这完全抓住了参数和损失之间的关系,但我确实认为这是一个有用的二分法

在高层次上,MAML 的希望是,因为它计算的导数说明了初始值的变化如何通过梯度下降传播以影响最终值——简而言之,因为它通过 SGD 本身反向传播*——它可以(理论上)找到根据标准(1)和标准(2)都是好的初始化。*

联合训练没有每任务优化的内部循环,不能显式地考虑这种优化的效果,由于在没有进一步优化的情况下,每个采样任务的损失较低,联合训练只会倾向于找到好的初始化。

为什么我们会关心这种区别呢?一个原因是,很难找到一组参数可以很好地“平均”解决所有任务;它可能只需要在一个参数向量中捕获太多的信息。然而,考虑到在整个任务分布中学习到的任何参数都必须在分布中不同任务的性能之间进行权衡,如果我们能够找到能够在新任务中有效学习的参数,我们将有望从给定少量特定任务示例的固有均值回归中恢复过来。

在实践中,对于任何给定的算法或任务集,这两个标准实际上不是非此即彼的二分法,而是一种混合物——算法可能更多地依赖于一种方法或另一种方法来驱动其性能,并且可能在不同的任务中不同程度地依赖于每一种方法。我见过的大多数经验评估都没有很好地区分它们的性能提升是来自低损失初始化还是容易优化的初始化。公平地说,这种概念上的区别可能太混乱,很难映射到一个清晰的实验度量上;我当然没试过。

但是,在缺乏良好的实证测试的情况下,很难知道:也许从易于优化的初始化中可以获得巨大的收益,MAML 在寻找这种初始化方面具有理论优势,或者也许它们只是理论上的边缘情况,没有真正的实际价值,元学习通常只是通过找到平均良好的参数而成功。我认为我们还没有十分肯定地回答这个问题。但是记住 MAML 的理论价值命题很大程度上依赖于找到好的初始化的希望是有用的,因为低损失和每任务优化的容易。

打破链条

让我们仔细看看 MAML 用来优化的导数。用话说,MAML 的目标是:

我如何修改我的初始化参数(θ)以减少参数(ϕ)的损失,我在应用每任务梯度下降到θ的几个步骤后达到?

从数学上来说,看起来是这样的:

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

来源:具有隐式梯度的元学习(Rajeswaran 等人)。我们在这里列出的方程的最终量,是用我们在多个步骤后达到的参数计算的损失的导数,相对于你的初始θ

让我们更仔细地看看这两个组成部分。

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

Alg(θ)这里是对初始θ参数应用优化算法(本例中为 SGD 的 k 步)后得到的值。ϕ和 Alg(θ)是一个意思;后者只是强调了一个事实,即你的终点(ϕ)是你起点 *(θ),*的函数,而到达终点的算法是梯度下降。等式的这一部分与你执行另一步正常梯度下降是一样的:评估你在任务 i 中损失的梯度,无论你最终得到什么参数(在这种情况下,ϕ,也称为 Alg(θ))。所以,导数的这一部分简单明了。

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

这就是事情变得棘手的地方。通常情况下,计算梯度所依据的权重与将要更新的权重相同。但在这种情况下,我们在最终权重ϕ计算单任务损失梯度,但随后想要更新我们的初始权重θ。这些是任务之间的权重,是我们在每个新任务开始时开始优化的共享初始化。这些是我们最终想要在元学习循环中学习的权重,所以我们需要一个梯度。这意味着,我们不仅仅需要相对于ϕ的损失梯度,还需要更深一层,相对于θ。这就是为什么 MAML 算法可以优化一组参数,以支持有效的学习过程,,而不仅仅是性能更好的固定参数点。

这种二级衍生是MAML 不同于简单联合训练的最显著方式。

这个“更深一层”要求我们使用链式法则。为了在这里使用链式法则,我们需要将ϕ的损失梯度乘以ϕ的参数值相对于θ的梯度。换句话说,为了知道如何操纵θ来影响我们在ϕ的损失,我们需要:

  1. 知道改变ϕ的方向,以降低损失
  2. 知道改变θ的方向,以便在特定方向上移动优化后的值ϕ

直观地说,该导数的目标是捕捉多步梯度下降过程的动态,并对θ的变化进行优先排序,这将有效地通过该过程传播影响。在不知道(2)的情况下,如果你只是天真地对θ应用和对ϕ一样的变化,你可能最终不能有效地减少损失,因为从新θ开始的学习过程可能不会导致ϕ值朝着你想要的方向移动。

我们从初始化θ到ϕ的方法是通过对新采样任务的 k 个批次执行梯度下降。

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

捕捉基本梯度下降中参数更新过程的方程。最终的 phi 值取决于损耗相对于在沿着链的每个中间参数值处计算的参数的导数(由下标为 0-k 的θ表示)

为了确定θ的偏移如何传播到最终ϕ的变化,您需要捕捉在这个链中的每个点计算的梯度将如何响应计算它们的参数点的值的变化。如果我们改变θ,我们会得到不同的参数初始值(显然),但我们也会计算出不同于之前的梯度。这是二阶导数,测量θ的变化如何影响在该θ值下计算的矢量值损失梯度。计算完整的 MAML 导数需要计算在更新的 k 步骤中使用的 k 导数的的二阶导数。

这带来了一些问题。首先,二阶导数的计算和存储成本很高,因为默认情况下它们是 n 参数平方的矩阵。此外,它要求我们记录在 k 次更新中遇到的不同权重向量,因为我们需要在梯度计算步骤中使用它们来计算每个位置的二阶导数。这意味着,对于一个 N 参数模型——在现代模型中,N 可以非常大——一个 k 步元学习模型将需要访问 kN 内存,以存储内部循环中的那些中间参数矩阵。

这种与 MAML 的天真实现相关联的强烈的存储器需求给了研究人员有意义的激励,以搜索捕捉完全实现的梯度的一些元素的有效近似,但是具有较低的计算需求。这种冲动是 MAML 变体的动机,我们将在这篇文章的剩余部分进行探索。

一阶 MAML

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

事实证明很难有元算法的好图片,所以,这里是科学家认为所有当前哺乳动物的第一个祖先看起来像什么的渲染图,一个一阶哺乳动物,如果你愿意的话…

这里要解决的问题是:如何计算导数来告诉你对初始值的改变如何影响最终损失值?你是如何做到这一点的呢?

解决问题最简单的方法是…让我们试着忽略这个问题,看看这会给我们带来多大的损失。务实的本能,即使不是最令人满意的。这是一阶 MAML(或 FOMAML)采取的策略。

在数学上,不是实际估计上述参数间导数矩阵(参数向量ϕ相对于初始参数向量θ的导数,这需要缓存中间 SGD 步骤),而是 FOMAML 假设导数只是一个单位矩阵。换句话说,这意味着对初始参数的单位变化对应于梯度下降后参数值的单位变化的假设进行编码。

从概念上讲,如果这个假设成立,这将意味着初始化值的差异不会导致不同的优化路径,它们只会导致固定优化路径的移动(因为,如果您将路径想象为不变的和刚性的,当您移动起点时,终点也会移动相同的量)。

通过假设相对于ϕ的梯度是一个单位矩阵,你失去了捕捉初始化可能改变你的优化路径的方式的能力,而不仅仅是移动它,但是,从积极的一面来看,链式法则中难以计算的部分消失了,我们相对于θ的更新就变成了我们在ϕ.得到的损失梯度

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

θ按绿色箭头的方向更新,这是在ϕ计算的测试集损耗的梯度

FOMAML 获得更好损失值的策略是根据在ϕ对测试集计算的损失梯度来更新θ。有趣的是,考虑到这与简单地执行联合训练(最基本的多任务方法,混合来自不同任务的批量数据,并对每个数据采取一个正常的一阶梯度步骤)既不同又相似。

最大的相似之处在于,用于更新θ的步骤本质上与您在普通梯度下降中使用的步骤完全相同:在单个点计算的单个一阶梯度。

第一个区别是,在 FOMAML 中,我们使用一个单独的每任务测试集来计算梯度,这在 k 步训练中没有使用。然而,我并不认为这是一个有意义的区别:在只有小 k 步训练的情况下,从训练集中采样的新批次重复这 k 步训练中看到的示例的可能性非常低,这将使从相同基础分布中采样的训练集和测试集在数据点对模型的新颖性方面基本相等。

第二个区别是,我们采取梯度下降的几个步骤,然后在这些步骤之后根据梯度来更新我们的参数,而不是根据梯度来更新我们的参数向量。这是一个差异,但至少对我来说,我们应该预期的含义是什么还不清楚:在优化链中的几个步骤之后计算的梯度似乎并不比之前计算的梯度本质上更有信息量。**

冷血的单纯

全 MAML 和一阶 MAML 展示了光谱的两端:一端是概念上合理的方法,具有强烈的内存和计算要求,另一端是简化,降低计算负担,但代价是一组非常有限的假设。

在这种背景下,OpenAI 的爬虫方法出现了,作为这两种对立选择的中间点:一种启发式方法,它添加了比单个梯度步骤捕获的更多的信息,但以一种回避 MAML 的明确形式主义的方式这样做。(题外话:不,作者没有解释为什么这种方法被称为爬行动物,除了它为现有的 MAML 方法提供了一种替代方案的明显背景之外)。

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

“真的吗?以我命名的机器学习模型?”

正如机器学习中的许多事情一样,我发现爬行动物最容易首先作为算法来解释,然后再用数学形式主义的语言来解释。

就像在 MAML 一样,这个问题被构造为对任务分布的少量学习:每次任务被采样,我们对来自该任务的批数据执行 k 步梯度下降,其中 k 变化,但通常小于 10。

对于每个任务,爬虫取ϕ,即在任务上 k 步后达到的参数,并计算对初始参数θ的更新,作为在这 k 次更新中参数空间的总移动,或(ϕ-θ)。这相当于采取多个梯度下降步骤,在步骤 0 开始的位置和步骤 k 结束的位置之间画一条线,然后使用该向量作为θ的更新方向。有趣的是,如果 k=1,这和联合训练是一样的:由于单个梯度步长的起点和终点之间的线和步长本身是一样的,而θ只会被拉向任务在该点的损失的一阶导数的方向。

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

θ根据绿色箭头更新:指向 k 步优化解决方案的向量

当我们采取多步梯度下降时,事情变得更加有趣。现在,我们获得了关于损失面的更多信息,因为我们汇总了在多个不同点做出的损失估计。这为我们提供了类似于通过计算显式二阶导数获得的信息——如果多个梯度都通过向同一方向前进而相互加强,这意味着梯度值在该点没有太大变化,我们的聚合向量将更强烈地指向该方向。

这里要注意的是,这个公式打破了干净的 MAML 链规则推导:我们不直接计算最终的测试集损失导数,并乘以一个参数到参数,就像我们以前做的那样。这纯粹是一种启发性的说法,即“向从几个步骤的任务训练中产生的全局参数移动”。但是,在直观的层面上,因为我们在多个步骤上聚合梯度,所以当初始化在“易于优化”的位置时,我们给予单任务损失梯度更大的权重,因为这些位置更有可能在一行中有多个梯度都指向相同的方向,这将加在一起。如果初始化是在一个给定的任务中,由于多个步骤中的噪声、冲突梯度而难以优化的地方,则单个步骤的梯度将会抵消。如果你眯着眼睛,你可以看到这在概念上相当于根据一个项来更新θ,该项通过θ对ϕ的影响量来缩放ϕ的损耗,因为如果θ位于更嘈杂的梯度处,对θ所做的任何改变都可能导致优化路径找到有意义的不同ϕ值,其中你上次计算的梯度可能不再适用。

所有这一切都表明:这绝对是一种启发,你应该把我的这个框架作为一种可能的解释,而不需要任何具体的实证检验。

作者还认为,这种方法具有找到θ初始化的效果,即在参数空间中期望接近每个任务的最佳参数。他们在这里的主张是基于将 k 个步骤后达到的参数视为最佳参数的良好近似。这让我觉得不是很有说服力:在梯度下降的一个步骤和带你找到一个任务的最优解的整个优化过程之间,有一个非常有意义的质的区别。即使爬行动物采取 k 个步骤,该 k 通常相当小,因此看起来每个任务上达成的解决方案在质量上更类似于单步更新的结果,而不是最佳参数配置。

隐式 MAML

正如我几次提到的,完全计算最终参数ϕ相对于初始参数θ的导数是一件痛苦的事情。为了能够通过多步计算过程传播导数,您需要存储 k 步中每一步的中间参数。当我们谈论百万参数神经网络时,必须为每个元更新步骤在内存中存储整个网络的多个副本是一个有意义的障碍,特别是当 k 步内部优化循环中的 k 上升时。

其中,FOMAML 假设一个世界中的导数是微不足道的,而爬行动物构建了一个启发式算法,该算法无需直接计算梯度信息的各个方面,隐式 MAML 或 iMAML 构建了一个近似导数,该近似导数在分析上比爬行动物的更有根据,但比 FOMAML 的梯度只是恒等式的假设允许更大程度的表达。

iMAML 将问题框定为:

最优单任务参数ϕ*相对于θ的导数是多少?

如果你使用这种新的框架,一些量在分析上变得更简单,更容易处理。但是,乍一看,这似乎是一个注定要失败的努力:你的损失空间中的最小损失点就是它所在的位置,而不管你在哪里初始化你的参数。那么,你的θ初始化参数怎么可能影响最小损失点的位置,使得计算该点相对于它们的导数成为可能呢?

隐式 MAML 的作者引入了一个修正来解决这个问题:一个正则化,根据解与初始值的距离来惩罚解。当您在单个任务的更新中远离初始值时,距离的平方损失最终会超过较低损失的好处,并且您会达到最小损失的平衡点。因此,在这个修改的目标下,不同的初始点将在不同的地方定位该平方距离损失的中心,并且因此导致混合损失的不同最小损失点,该混合*损失包括真实的潜在损失和距离损失**。*这在初始参数值和空间的最小损耗点(在混合损耗下)之间建立了关系,使得讨论最小损耗参数相对于θ的导数变得有意义。

起初,这个修改的目标看起来像是一个纯粹任意的改变,以使导数被很好地定义(在某种程度上这是真的),但当我们记住元学习试图解决在每个新任务的几步学习设置中表现良好的初始化时,这似乎更合理。所以,如果你的问题的定义意味着你在一个新的任务上只是采取了一些学习步骤,那意味着你将永远没有机会远离你的初始化。在这种情况下,优先考虑附近解决方案的修改目标似乎更像是一个合理的近似,而不是纯粹出于数学上的权宜之计。

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

由θ和当前参数值之间的平方范数正则化的正常损耗

足够方便的是,目标的最优参数相对于θ的梯度具有封闭形式的解析解,并且该封闭形式的解可以使用共轭梯度有效地计算,而不需要存储计算全导数所需的中间优化参数值的链。我不打算深入共轭梯度如何工作的细节,以及为什么它会更有效,因为那将是它自己的独立博客帖子,但我强烈推荐这本写得很好,容易理解的教程,如果有人想了解更多。

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

Alg*的导数——对应于正则化目标的最优值的参数——相对于初始参数。这就是我们用作参数对参数的导数,乘以ϕ的损失得到我们的 MAML 式更新

因此,如果我们假设在 k 个步骤之后我们得到的参数足够接近于我们的正则化目标下的最优*,那么最优参数值相对于θ的导数将是我们实际得到的参数的导数的非常好的近似。有了这个近似的分量,我们就可以把它和易于计算的ϕ损耗梯度结合起来,并把它们插入到更新规则中。*

的确,除非我们的正则项如此强大,以至于我们在几步之后淹没了实际损失的影响,否则我们很可能不会实际到达最小损失点:k 通常很小,因此ϕ只是在最小值(有希望的)方向上梯度下降几步的结果。但是假设总是要求有一点点错误,以使你的计算更好,这一点在实践中似乎很有可能成立。

将这种方法与 MAML 和一阶 MAML 放在一起是有用的。在原始的 MAML 中,ϕ相对于θ的梯度就是字面上的量,完全和适当地计算,痛苦的内存需求和所有。在一阶 MAML 中,我们假设初始参数的变化导致最终值的不断变化,并且基本上放弃了捕捉 k 步学习过程的动态如何可能取决于您的起点。在隐式 MAML 中,我们允许θ的实际值影响参数间梯度,但仅通过考虑由θ引起的(正则化的)理论最优值,而不是我们从θ到ϕ所采用的经验 SGD 路径。因此,这介于两者之间:一个简化的假设,但仍能捕捉我们初始参数周围的损失情况的特征。

所有的简化都有其简单的方式

下图试图将这些不同的方法结合在一起,并直观地展示它们之间的区别。单个小箭头表示特定任务中特定批次的损耗梯度。绿色表示使用哪个梯度或梯度组合来更新初始参数θ。

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

联合训练使用在初始化时计算的损失来更新,因为联合训练只使用每个任务的单个批次。MAML 的各种变体都以虚线箭头梯度开始,这是在 k 个更新步骤后达到的参数ϕ处计算的损耗。一阶 MAML 直接使用该损失作为初始化的更新向量。MAML 取该向量,并将其乘以ϕ相对于θ的(矩阵)梯度。iMAML 将其乘以修改的目标最优参数相对于θ的梯度。爬虫将所有单个 k 更新相加,然后缩小该向量,并使用它来更新θ。

在联合训练中,在更新参数之前,每个任务只运行一个批次,因此它们本质上只使用来自第一个(也是唯一的)批次的梯度进行更新。在 MAML 的变体中,我们采取多个更新步骤,并且在乘以最终参数相对于初始参数的梯度的某个版本之后,来自这些批次中的最后一个批次的梯度被用于更新θ。

结论

除了脆弱性之外,对现代机器学习的另一个广泛批评是它倾向于给自己讲一般的故事:为其方法为什么应该有效提出理论上的理由,观察实证性能增益,并假设后者验证了前者的理论主张。

本着这种精神,用一些基础的经验问题来平衡这篇主要是概念性和理论性的文章似乎是有用的,有助于思考哪些概念性的主张得到了最多的支持。

利用二阶信息的算法真的比类似 FOMAML 的联合训练算法更好吗?

据我所知,是的,但这种差异在 k 值较小时更明显,有点矛盾地表明,大部分值在θ中,在任务中的损失较低,使用多步信息更有利于获得低损失。当 k 较大时,您可能能够更有效地“弥补”在优化方面的不足。在较大的 k 值下,MAML、伊玛目和爬行动物在测试任务中仍然表现出色,但没有那么显著。

更有原则的 iMAML 是否胜过更具启发性的爬行动物?
我……不确定。这方面的实证结果很少,而且似乎没有定论。看看 iMAML 论文中报道的那些,iMAML 在 Omniglot 上的表现比爬虫好(在 Omniglot 上,每个任务对来自不同字母表的字母进行分类),但是在 mini ImageNet 上在它的误差范围内

这里的部分问题是——因为原始 MAML 本身的计算非常昂贵——我们主要是在现有模型已经表现很好的简单任务上进行测试,并关注 97 %- 99%之间的准确性差异。我希望看到更多在没有元方法的情况下确实难以学习的评估任务,但显然这将带来很高的计算成本。

元学习有一个崇高的理想——学会如何学习,如何适应一项看不见的任务。而且它确实比更简单的联合训练方式要好。但重要的是,不要过于陷入元学习为自己创造的大框架中,而是要试图识别更简单和更复杂方法之间的实际机械区别,并严格评估我们对它们所增加的价值的推理是否符合现实。

我还有一些未解决的问题:

  • 是否存在一个 k 值,使得福马尔和 MAML 收敛到等价的性能?测试的 k 值 1 和 5 比你实际使用的要低得多,即使对于非常数据有效的微调也是如此,而且不清楚元优化方法是否仍然能在那些更现实的领域中提供价值
  • 相对于仅仅找到一个一般的好的起点,元学习在多大程度上实际上优化了更有效和高效的几步更新?我希望看到更多的度量标准(或指出现有的)通过实际描述更新路径来分割这种差异,并实际定性地检查 MAML 与联合训练方法所学到的东西。

基于半监督嵌入的模糊聚类

原文:https://towardsdatascience.com/a-semi-supervised-embedding-based-fuzzy-clustering-b2023c0fde7c?source=collection_archive---------22-----------------------

维基百科名人页面的自动标记

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

图像来源

聚类 是将群体或数据点分成若干组,使得同一组中的数据点更加相似的任务。而另一方面, 模糊聚类 是一种聚类形式,其中每个数据点可以属于多个聚类。 半监督学习 是一类机器学习,我们通过显示少量已标记数据,让机器学习或决定大量未标记数据。

既然我们已经完成了所有术语的定义,让我们来讨论一些现实生活中的场景,并进入这篇博客的主题。

通常情况下,我们对自己想要的集群有一个想法。例如,如果我们对城市进行分组,我们希望看到更多的城市被分组在一起,而不是城市郊区或城镇。类似地,如果我们对人进行聚类,我们希望看到来自相似背景/领域/爱好的人被分组在一起。

这篇博客的主要思想是通过向我们的算法展示一些我们希望我们的聚类是什么样子的例子,来定义一种创建模糊聚类的新方法。在这个博客中,我们将把维基百科名人分为 5 个组/群。更多细节,这个名人数据集是如何创建的可以在这里找到。但是,这并不重要,因为我已经提供了数据的子集和所需的代码,供您尝试和使用这个概念。最重要的是,这种技术非常通用,它可以很容易地应用于许多用例,比如 plug & play。

问题陈述

我们有一个维基百科名人数据集(包含所有过去或现在有维基页面的名人)。我们想自动将这些人分成 5 组。

  1. 艺术家 :所有演员、音乐家、电影制作人、艺术创作人、画家等
  2. 运动员:任何运动项目的运动员
  3. 科学家/研究人员 :任何背景的科学家,如物理学家、化学家、生物学家、历史学家、计算机科学家等
  4. 领导人/政治家:任何国家或地区的领导人/政治家
  5. 其他影响者 :哲学家、教师、医生、企业家、技术人员等

值得注意的一点是,有些人可能属于多个类别,正如我们所知,许多运动员后来进入政界或在职业生涯中表演等。因此,我们想要实现的是模糊分组/聚类,而不是硬聚类。

对数据的研究

在设计策略或算法之前,我们先看一次数据。

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

数据集快照

数据集由两列组成,标题和内容。标题是这个维基百科页面的人的名字,内容是关于他们童年、职业、成就等的页面内容(大文本)。

维基百科大约有 598 万页面,其中有 105 万页面是关于人的。所以,我们的数据集由 105 万个名人的维基百科页面组成。

可能有许多现在或过去的运动员、艺术家、领导人等等,人们可能不知道。这种算法的美妙之处在于,它能以适当的概率自动为它们找到正确的聚类。

设计战略

步骤 1:创建一个小标签数据

第一步将是利用半监督学习的好处,或者简单地说,利用我们拥有的少量信息。 我们会列出每个组的一些知名人士,并获取他们的维基百科页面。这个列表可能是你的选择,可能因人而异。让我们看看我列出的不同类别的人。

艺人 :莱昂纳多·迪卡普里奥,阿米特巴·巴强,盖尔·加朵,艾德·希兰

运动员 :安德烈·阿加西、玛丽亚·莎拉波娃、萨钦·滕杜尔卡尔、莱昂内尔·梅西

科学家/研究人员 :阿尔伯特·爱因斯坦、艾萨克·牛顿、德米特里·门捷列夫、查尔斯·达尔文

领导人/政治家 :巴拉克·奥巴马、纳伦德拉·莫迪、弗拉基米尔·普京

:史蒂夫·乔布斯、拉里·佩奇、比尔·盖茨、艾伦·格林斯潘、萨尔·汗、杰弗里·辛顿

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

艺人

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

运动员

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

科学家/研究人员

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

领导人/政治家

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

其他影响者

这个列表就像我们创建的 21 个人的小标签数据。训练集看起来像

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

21 人的培训组

步骤 2:为有限的标记数据生成嵌入

我们现在有 21 个维基百科页面的语料库。我们可以把每一页称为语料库的一个文档。我们将生成每个文档的嵌入。一个 嵌入 是一个相对低维的空间,你可以将高维向量平移到其中。嵌入使得在大量输入上进行机器学习变得更加容易,比如表示单词的稀疏向量。它可以是任何长度。在这项工作中,我使用了 100 维嵌入。不同长度绝对可以玩。我使用 NMF (非负矩阵分解)来生成这些嵌入。

非负矩阵分解

非负矩阵因式分解 (NMF 或 NNMF)是一种算法,其中矩阵 V 被因式分解成(通常)两个矩阵 W 和 H,其性质是所有三个矩阵都没有负元素。

矩阵 V 被分解成两个矩阵 WH 的乘积

V = W.H

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

矩阵 V 分解成 W & H 矩阵

在上面的例子中,矩阵 V 的维数是 4 * 6。我们可以把它看作一个有 4 个文档和 6 个单词的语料库。单元格 Aᵢⱼ的每个条目是单词 Wⱼ在文档 Dᵢ.中出现的次数我们将文档的特征维度从 6 降低到 2。因此,矩阵 W 的维数为 4 * 2,矩阵 H 的维数为 2 6。*

从另一个角度来看,在新的映射中,每个文档由两个潜在特征表示,即矩阵 w。矩阵中某个单元的值越高,该文档与潜在特征的关联程度越高。矩阵 H 定义了每个单词属于这些潜在特征的程度。

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

直观矩阵分解

我们可以用矩阵 W 作为嵌入或降维矩阵。降维使得对大量输入进行机器学习变得更加容易,比如表示单词的稀疏向量。在 python 中,我们可以简单地使用 sklearn 提供的 NMF 包。

使用 NMF 创建 V 矩阵并将其分解为 W 和 H

结果,我们把 Vᵀᴿᴬᴵᴺ分解成了 Wᵀᴿᴬᴵᴺ和 Hᵀᴿᴬᴵᴺ

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

Wᵀᴿᴬᴵᴺ矩阵

步骤 3:创建组嵌入

我们有 5 个群体:艺术家、运动员、科学家、政治家和领导人。我们从每个组中挑选了一些人,并创建了 21 个包含训练集的记录。我们将使用在 Wᵀᴿᴬᴵᴺ为每个组学习的嵌入的平均值,并将其称为组/簇嵌入。

例如,艺术家嵌入将作为:

Artistsᵉᵐᵇᵉᵈᵈᶦⁿᵍ =平均水平(莱昂纳多·dicaprioᵉᵐᵇᵉᵈᵈᶦⁿᵍ,阿米塔布·bachchanᵉᵐᵇᵉᵈᵈᶦⁿᵍ,加尔·gadotᵉᵐᵇᵉᵈᵈᶦⁿᵍ,埃德·sheeranᵉᵐᵇᵉᵈᵈᶦⁿᵍ)

生成集群嵌入的代码

步骤 4:为整个语料库生成嵌入

测试集包含除了 21 个名人页面之外的所有剩余的 105 万个名人页面,我们已经将其作为标记的训练数据。现在,对于每个文档,我们需要生成一个嵌入,并且潜在特征需要与训练集的潜在特征相同。也就是说,我们需要产生 Vᵀᴱˢᵀ、Wᵀᴱˢᵀ和 Hᵀᴱˢᵀ.

让我们一个一个地看每个矩阵

  1. Vᵀᴱˢᵀ :通过计算单词‘w’在文档中出现的次数,我们可以很容易地生成 Vᵀᴱˢᵀ。只是我们需要小心,我们只采用我们在训练数据中看到的单词,并以相同的顺序忽略新单词。
  2. Hᵀᴱˢᵀ :矩阵 Hᵀᴱˢᵀ代表每个单词属于潜在特征的多少。因此它和 Hᵀᴿᴬᴵᴺ.是一样的即 Hᵀᴱˢᵀ = Hᵀᴿᴬᴵᴺ
  3. Wᵀᴱˢᵀ: 这是主要的也是唯一剩下的让我们去寻找的母体。我们将使用矩阵代数来找到它。让我们看看如何-

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

计算 Wᵀᴱˢᵀ的矩阵代数

在代码中,我们不需要接受 inverse 和 all,因为包为我们做了这些,没有隐式地指定它。

计算 Wᵀᴱˢᵀ的代码

步骤 5:分配聚类概率

最后一步是分配每个维基百科名人聚类分数,并将其转换为概率。为此,我们使用聚类嵌入对页面嵌入进行余弦相似度计算,然后归一化得分以获得概率。

例如,如果我们必须给演员汤姆·汉克斯分配聚类分数,过程将是:

分数计算

艺术家=余弦 _sim(汤姆·汉克斯 ᵉᵐᵇᵉᵈᵈᶦⁿᵍArtistsᵉᵐᵇᵉᵈᵈᶦⁿᵍ) = 0.68

SportsPerson = cosine_sim(汤姆·汉克斯 ᵉᵐᵇᵉᵈᵈᶦⁿᵍsportspersonsᵉᵐᵇᵉᵈᵈᶦⁿᵍ)= 0.04

科学家=余弦 _sim(汤姆·汉克斯 ᵉᵐᵇᵉᵈᵈᶦⁿᵍscientistsᵉᵐᵇᵉᵈᵈᶦⁿᵍ)= 0.1

政客=余弦 _sim(汤姆·汉克斯 ᵉᵐᵇᵉᵈᵈᶦⁿᵍpoliticiansᵉᵐᵇᵉᵈᵈᶦⁿᵍ)= 0.01

影响者=余弦 _sim(汤姆·汉克斯 ᵉᵐᵇᵉᵈᵈᶦⁿᵍinfluencersᵉᵐᵇᵉᵈᵈᶦⁿᵍ)= 0.1

余弦相似度是一个总是在 0 到 1 之间的数字。0 表示没有相似性,1 表示完全相似

分数对概率的标准化

艺人概率= 0.68/(0.68+0.04+0.1+0.01+0.1)~ 0.72

运动员概率= 0.04/(0.68+0.04+0.1+0.01+0.1)~ 0.05

科学家概率= 0.1/(0.68+0.04+0.1+0.01+0.1)~ 0.11

政治家概率= 0.01/(0.68+0.04+0.1+0.01+0.1)~0.01

影响者概率= 0.1/(0.68+0.04+0.1+0.01+0.1)~ 0.11

概率加起来是 1。汤姆·汉克斯是一名艺术家,有 72%的机会被分配到艺术家群体。我们对所有的名人维基页面都这样做,并得到聚类概率。

用于分配聚类概率的代码

看看一些名人的这些概率。概率被转换成下面的百分比。

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

一些名人的百分比聚类概率。

结束注释

我们设计了一种非常新颖和有效的基于半监督嵌入的模糊聚类技术。这对于许多用例来说是相当普遍的。我们使用先验知识给集群一个形状和一个启动。

可以通过以下方式进一步改善结果:

  1. 使用提供的初始标记数据。我们可以提供更多高质量的数据来改善最终结果。
  2. 播放或交叉验证正确的嵌入长度。
  3. 设计一个更具创新性的策略来发现集群嵌入,而不仅仅是简单的平均。

如果任务是分别标记每个运动项目的运动员,那么你的种子数据和算法会有什么变化?请评论你的想法。所有的代码和一小部分维基百科名人数据集可以在这里找到。

我的 Youtube 频道更多内容:

** [## 阿布舍克·蒙戈利

嗨,伙计们,欢迎来到频道。该频道旨在涵盖各种主题,从机器学习,数据科学…

www.youtube.com](https://www.youtube.com/channel/UCg0PxC9ThQrbD9nM_FU1vWA)

关于作者-:

Abhishek Mungoli 是一位经验丰富的数据科学家,拥有 ML 领域的经验和计算机科学背景,跨越多个领域并具有解决问题的思维方式。擅长各种机器学习和零售业特有的优化问题。热衷于大规模实现机器学习模型,并通过博客、讲座、聚会和论文等方式分享知识。

我的动机总是把最困难的事情简化成最简单的版本。我喜欢解决问题、数据科学、产品开发和扩展解决方案。我喜欢在闲暇时间探索新的地方和健身。在 Linkedininsta gram关注我,查看我以前的帖子。我欢迎反馈和建设性的批评。我的一些博客-****

一个闪亮的手动推断统计程序

原文:https://towardsdatascience.com/a-shiny-app-for-inferential-statistics-by-hand-a607bed39e7d?source=collection_archive---------43-----------------------

关于如何构建置信区间和手动对 3 个主要参数进行假设检验的指南

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

推断统计学的闪亮应用:假设检验和置信区间

统计学分为四个主要分支:

  • 描述统计学
  • 推论统计
  • 预测分析
  • 探索性分析

描述性统计提供了数据的概要;它有助于以简洁的方式解释数据,而不会丢失太多信息。数据可以用数字或图形来概括。参见手工描述性统计或 R 中的以了解更多关于这一统计分支的信息。

预测分析的分支旨在根据一个或几个自变量预测一个因变量。根据要预测的数据类型,它通常包括回归或分类等方法。

探索性分析侧重于使用图形方法来深入研究数据,并确定数据集中不同变量之间存在的关系。因此,它们更类似于数据可视化。

推断统计学使用从总体中随机抽取的数据样本进行推断,即得出关于总体的结论(参见总体和样本的差异)。换句话说,来自样本的信息用于对总体中感兴趣的参数进行归纳。推断统计学中的两个主要工具是置信区间和假设检验。这里有一个闪亮的应用程序,可以帮助你使用这两个工具:

这个闪亮的应用程序专注于置信区间和假设检验:

  • 1 和 2 表示(非配对和配对样本)
  • 1 和 2 的比例
  • 1 和 2 差异

以下是完整的代码,如果你想加强它(见一个例子,如何使用这个应用程序后,嵌入式代码):

请注意,如果应用程序已达到每月使用限额,链接可能会失效。如果是这种情况,请稍后再试。

这个 app 怎么用?

请遵循以下步骤:

  1. 通过此链接打开应用程序
  2. 选择您想要进行推断的参数(即平均值、比例或方差)
  3. 在样本中写入您的数据。观察值由逗号分隔,小数是一个点
  4. 设置零假设和替代假设
  5. 选择显著性水平(大多数情况下α=0.05)

在结果面板中(根据屏幕大小位于右侧或下方),您将看到:

  • 用一些适当的描述性统计数据概括一下你的样本
  • 置信区间
  • 假设检验
  • 解读
  • 以及假设检验的说明

还提供了达到最终结果的所有公式、步骤和计算。

我希望你会发现这个应用程序有助于进行推断统计,尤其是手动置信区间和假设检验。

和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。

相关文章:

原载于 2020 年 1 月 15 日 https://statsandr.com

从 Google BigQuery 分析公共数据的简短指南

原文:https://towardsdatascience.com/a-short-guide-to-analyze-public-data-from-google-bigquery-667126efbe24?source=collection_archive---------28-----------------------

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

图片来源:凯文·Ku 摄于 Pexels

这里有一个如何使用 Google BigQuery 分析大数据集的指南。

互联网上有大量的数据集需要分析,但却没有足够的磁盘空间来存储它们。如果您像我一样是数据科学的新手,那么您很有可能遇到过这个错误“您已经用完了磁盘空间”,而您的代码运行在一个 10 GB 的 CSV 文件上,该文件被压缩在您的磁盘上的某个地方,并因缺少足够的空间而喘不过气来。

欢迎来到云的世界。这对我简直是一个启示。我用谷歌大查询开始了这个伟大的旅程。它肯定不是唯一的,当然也不是最便宜的。但是,谷歌允许你至少在一年内免费使用它的服务,直到一个固定的期限。

这篇文章假设读者对 SQL 有基本的了解,因为它是与数据库通信的最有效的方式。如果你想学习 SQL 或 SQLite,考虑参加 Datacamp 或 Coursera 的在线课程,一旦你对它有点熟悉了,练习是关键。

在接下来的段落中,我们将一步一步地介绍使用 Google BigQuery 的过程,并在此过程中制作出一份精美的分析报告。请注意,BigQuery 的范围相当广泛,但我将从它最基本的用途开始,即访问公共数据集并在 R 上查询它(无需下载到我的磁盘上)。

什么是 BigQuery?正是谷歌的“企业数据仓库让你能够利用谷歌基础设施的处理能力运行超快的 SQL 查询。因此,当您运行大数据分析时,您的磁盘可以呼吸。

要开始使用 BigQuery,您可以上传自己的数据集,或者访问他们的一个公开可访问的数据集。这个库不是很大,但是足够好让你开始练习你的动作。

第一步。首先在谷歌云上登录或创建一个账户。当你登录时,你会看到一个显示你使用谷歌云服务的仪表盘。在左侧面板中,浏览主页–>大数据–>大查询。

第二步。进入 BigQuery 页面后,创建一个新项目并将数据集存储在该项目中,这样就可以跟踪所有的查询和数据集。好处是 BigQuery 存储了您过去对一个项目的所有查询,因此您可以在将来的任何时候重新运行它们。节省了大量时间。有 20 个免费项目的报价。所以,放轻松。

要创建一个新项目,请在上面的蓝色面板中,Google Cloud Platform 旁边,单击 new project。给它一个名字,BigQuery 会自动给它分配一个项目 ID。我们以后需要这个身份证。项目创建后,您将在上面的蓝色面板中看到它。我的项目名为“选举数据”。

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

我的谷歌大查询项目的快照

第三步。我们现在可以开始探索数据集库了。在左侧面板中,单击添加数据–>浏览公共数据集。数据集根据它们所属的广泛主题进行分类。你挑吧。或者,有一个选项也可以添加位于“Resources ”-> big query-public-data 下面的左侧面板中的数据集。滚动浏览数据集,并单击您想要分析的数据集。我选择了“谷歌政治广告”进行分析。

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

我的谷歌大查询项目的快照

第四步。你已经完成一半了。我们现在将从探索主面板上的数据集开始。顾名思义,Schema 对列定义进行布局。详细信息部分显示选定数据集下相关表中的大小、类型和公共列。我的数据集是六个表的集合,可以在查询时轻松地处理它们。最后一部分“预览”给出了所选表格前几行的简要预览。

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

我的谷歌大查询项目的快照

第五步:从这里开始,我们可以选择两种方式进行。首先,在 BigQuery 控制台中运行查询并保存结果。其次,将这个 BigQuery 设置与您选择的 IDE 链接起来,就像您在 Python、R 或任何其他选择的语言中处理 SQL 一样。我选择了 R-studio。

步骤 6:要在 R-studio 中处理 BigQuery 数据集,将项目 ID 存储在一个变量中,然后按如下方式进行。这里,get_table 中的一个项目是一个大文件夹,所有公共数据集都存储在这个文件夹中。“数据集”是您选择用于分析的数据集的名称,“表”是主数据集中选择的表。运行此区块以访问数据集。

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

我的 R Studio 项目的快照

第 7 步:这是第一个查询。FROM here 显示了从所选的查询数据集访问的最终表的名称,在这里它用“.”链接到主数据集。这里是您的项目 ID,useLegacySQL = TRUE 允许我们使用遗留 SQL 命令进行查询。

该查询计算表中的行数,即 56,987。

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

我的 R Studio 项目的快照

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

我的 R Studio 项目的快照

BigQuery 对一个人可以查询和访问的数据量施加了每日限制。不过,在疯狂使用查询之前熟悉一下自己是个好主意。

该查询显示了表中的所有列和十行。

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

我的 R Studio 项目的快照

所以,就这样了。我希望它很容易理解和使用。让我知道您在探索 BigQuery 时想到了什么,或者您对其他类似平台的体验如何。我还在下决心。🙂

数据可视化简史

原文:https://towardsdatascience.com/a-short-history-of-data-visualisation-de2f81ed0b23?source=collection_archive---------9-----------------------

简要介绍一些将数字转化为美丽图片的主要创新和创新者

借助现代技术,可视化数据变得前所未有的简单。只需点击几下鼠标,就可以或多或少地将一个巨大的原始数字表变成一个视觉上吸引人且易于理解的图表。图表数据为理解和表达你的观点提供了一条高速捷径。

今天的许多可视化技术是在工业革命期间发明的,该领域在 19 世纪中期取得了长足的进步。对于 200 年前的人来说,今天看起来简单明了的东西,比如条形图或折线图,可能会很陌生。在本文中,我们来看看数据图形化表示方面的一些主要创新者以及他们的一些著名作品。

地图制作者

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

托勒密的世界地图——来源:维基百科

可以说,第一次数据可视化是在制图学领域。地图最初用于导航、土地所有权和一般人类好奇心的目的,已经以某种形式存在了至少一万年。在古代,从目击者的叙述(和相当数量的猜测)中整理出来的关于世界的信息会被刻在石头或泥土上。几个世纪以来,指南针(公元前 200 年)和六分仪(1731 年)等仪器允许更精确的测量和越来越精确的地图,印刷机使它们能够大规模生产。

1569 年,佛兰德制图家杰拉杜斯·麦卡托的《世界地图》标志着我们如何在一张平面纸上描绘球形地球表面的重大发展。

在他的墨卡托投影中,当地的地理被保留下来,当看着罗盘时,地图上的直线被转换成恒定方位的线,这使得它成为海上导航的理想选择。事实证明,它很受欢迎,原始版本被印刷了数百份,并且仍然是我们今天看到的最常见的世界地图投影。

威廉·普莱费尔

威廉·普莱费尔的简历相当不拘一格。在一个曲折的职业生涯中,这在今天是不可想象的,他涉足间谍活动、工程(就像因蒸汽机而出名的詹姆斯·瓦特的私人助理)、制图、会计、发明、金属加工、投资经纪、经济学、翻译、宣传、土地投机、银行、勒索和新闻。在法国大革命期间,他为英国政府充当间谍,经营伪造货币的业务以瓦解法国货币,并参与攻占巴士底狱。他是一个有点无赖和无赖的人,在几次失败的生意后,他也进了债务人监狱。然而,他的永久遗产是在统计学领域,他设计的图表形成了今天数据可视化的核心。

在 Playfair 的时代,数据通常显示在枯燥的表格中,很少考虑对它们的解释。如果你想理解某件事,没有直观的捷径,只有在数字中来回钻研、记忆、复制和比较数字的艰苦工作。

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

来源:维基百科

然后,在 1765 年,上面这张来自约瑟夫·普利斯特列的时间表出现了,显示了不同的古典政治家和哲学家的重叠的一生。Priestley 并不只是列出姓名、出生年份和死亡年份,而是将它们标在时间线上,这样就能立即看出哪些历史人物是同时代的。这些时间线被证明是成功的,并直接激发了 Playfair 发明条形图,首次出现在他的商业和政治地图集。

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

威廉·普莱费尔——商业和政治图集——来源

这张图表显示了苏格兰与欧洲和新大陆各地区的贸易差额。通过这种方式呈现数据,很容易发现苏格兰与爱尔兰的紧密经济联系及其与俄罗斯的贸易不平衡。

对英国来说,他有更多的可用数据,并能够制作时间序列图表,显示贸易平衡如何随着时间的推移而变化。这些图表被巧妙地、煞费苦心地刻在金属印刷板上,在用纸压之前,先把墨水涂在凹槽里,然后复制出来。有人认为,在早期的复制中,Playfair 可能亲自给图表上色。这些天我们过得很轻松!

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

威廉·普莱费尔——商业和政治图集——来源

15 年后,他又开始了这项工作,这次用的是有时会引起争议的饼状图和各种创造性的组合。令人惊讶的是,两百多年后,一个人的想法仍然在最先进的数据可视化软件中占据了图表选项的大部分。

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

威廉·普莱费尔——土耳其帝国在亚洲、非洲和欧洲的比例——来源

查尔斯·约瑟夫·密纳德

几十年后,出现了一位法国土木工程师,他在结合统计学和制图学领域方面做出了重大创新。

1845 年,他绘制了第戎(以芥末闻名)和法国东部米卢斯周围地区的“流动地图”,展示了从穿过该地区的道路上收集的交通数据。在穿越该地区的新铁路线铺设之前,这份文件被分发给数十名利益相关者。也许是这些地图的结果,现代铁路网大致沿着较低的暗线穿过多尔、贝桑松和贝尔福特。

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

Charles Joseph Minard —第戎和米卢斯之间的道路交通— 来源

然而,他最著名的是对拿破仑 1812 年灾难性入侵俄罗斯的描绘。他下面的流程图生动地描绘了拿破仑的军队在往返莫斯科的途中,从将近 50 万到几乎为零的消耗。这是这场运动失败及其人员伤亡的鲜明例证。这些类型的图表现在通常被称为“桑基图表”。

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

查理·约瑟夫·密纳德——拿破仑的俄国战役地图——来源

弗洛伦斯·南丁格尔

现代护理的创始人,也是一个天才的数学家,是统计学的图形表示的先驱。基于 Playfair 的想法,她将图表融入到她的许多出版物中,并被认为是极区图或“花花公子”的发明者。

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

*“东部军队死亡原因图”——*来源:维基百科

该图表描述了克里米亚战争中不同月份的不同死亡原因,每个楔形区的面积代表了统计数据的大小。这种类型的图表非常适合周期性数据,尽管在这种情况下,南丁格尔提供了她所涵盖的两年的单独图表。

南丁格尔对克里米亚、印度和英国的卫生条件进行了多次研究,并使用如上图表游说改革。她的工作对 1875 年的公共健康法案产生了巨大的影响,该法案被一些人认为将英国人的预期寿命延长了 20 年。

弗朗西斯·高尔顿

散点图是双变量分析的支柱,没有人可以自称是发明者。然而有一个人很接近,那就是维多利亚时代的统计学家弗朗西斯·高尔顿。作为一名多产的作家和科学家,他对统计学领域的贡献是巨大的,尽管现在由于他与优生学的联系而有些争议。

在分析两个变量之间的关系时,高尔顿设计了一种图形技术,将每个组合的频率绘制在一个网格上。在这个网格上,等高线被覆盖,显示数据的密度。对于两个相关的、正态分布的变量,这些等高线应形成一个椭圆,其长轴充当一种形式的线性回归。

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

成年孩子的身高与他们父母的平均身高的比较。来源:http://Euclid . psych . yorku . ca/SCS/Gallery/images/Galton-corr . jpg

信息时代

在二十世纪上半叶,事情进展得相当缓慢,但后来出现了计算机。1981 年,Xerox 8100 Star 推出了第一个商业图形用户界面(GUI ),并随之推出了电子表格等应用程序,这些应用程序能够从信息表中自动生成图形。曾经需要几个小时仔细蚀刻或绘制的东西,现在只需点击几下鼠标就可以完成,同时编辑、格式化和更新也更加容易。从那时起,各种各样的制图技术和风格就出现了,无数的软件包提供了一系列呈现数据的方法。

荣誉奖

**Charles Dupin:**1826 年,他绘制了已知最早的克洛普图,标出了全法的文盲率。

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

查理斯·杜平— 法兰西大众教育学院,1826 年

约翰·斯诺:使用点状地图绘制了 1854 年布罗德街霍乱爆发的地图,显示疾病是通过被污染的水传播的,而不是之前认为的空气。

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

1854 年伦敦爆发的聚集性霍乱病例

玛丽·埃莉诺·斯皮尔:1952 年,在美国公务员系统担任图形分析师后,她在自己的书《图表统计》中提出了方框图。

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

方框图的描述。(不是矛的原创)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值