TowardsDataScience 博客中文翻译 2016~2018(二百六十七)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

结构化深度学习

原文:https://towardsdatascience.com/structured-deep-learning-b8ca4138b848?source=collection_archive---------1-----------------------

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

  • 快的
  • 不需要领域知识
  • 高性能

这个博客将主要关注深度学习的一个不太广为人知的应用领域,结构化数据。

在机器学习/深度学习或任何类型的预测建模任务中,数据先于算法/方法。这就是为什么机器学习在某些任务之前需要大量的特征工程,如图像分类、NLP 和许多其他“不寻常”的数据,这些数据不能直接输入到逻辑回归或随机森林模型中。相反,这些类型的任务通过深度学习可以很好地完成,而不需要任何讨厌和耗时的功能工程。大多数情况下,这些特性需要领域知识、创造力和大量的反复试验。当然,领域专业知识和巧妙的功能工程仍然非常有价值,但我将在这篇文章中提到的技术足以让你在没有任何相关知识的情况下,在 Kaggle 比赛(http://blog . ka ggle . com/2016/01/22/rossmann-store-sales-winners-interview-3-place-cheng-GUI/)中获得前三名。

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

Fig 1. a cute dog and an angry cat (labeled by me)

由于特征生成的复杂性质和能力(例如 CNN 的卷积层),深度学习被大量应用于各种图像、文本和音频数据问题。毫无疑问,这些对于人工智能的发展来说是非常重要的问题,并且一定有一个非常好的理由来解释为什么每年这个领域的顶级研究人员都要比上一年更好地对猫、狗和船进行分类。但这些很少是我们在工业上看到的情况。公司使用涉及结构化数据集的数据库,这些领域影响着日常生活。

让我们来定义结构化数据,以便在本文的其余部分更加清晰。在这里,您可以将行视为收集的单个数据点或观察值,将列视为表示每个观察值的单个属性的字段。例如,来自在线零售店的数据可能包含客户销售的行和购买的商品、数量、价格、时间戳等列。

下面我们有在线卖家数据,行是每个独特的销售,列描述了特定的销售。

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

Fig 2. pandas dataframe an example to structured data

让我们谈谈如何利用神经网络来完成结构化数据任务。实际上,在理论层面上,创建一个具有任何所需架构的全连接网络,然后使用“行”作为输入是非常简单的。在几次点积和反向传播之后,给定损失函数,我们将最终得到一个训练好的网络,然后可以用来进行预测。

尽管这看起来非常简单,但当涉及到结构化数据时,人们更喜欢基于树的方法而不是神经网络是有主要原因的。这可以从算法的角度来理解,通过探索算法实际上是如何看待和处理我们的数据的。

结构化数据和非结构化数据的主要区别在于,对于非结构化数据,即使它“不常见”,我们也经常用单个单元处理单个实体,如像素、体素、音频、雷达反向散射、传感器测量值等等。相反,对于结构化数据,我们经常需要处理两个主要组下的许多不同类型的数据;数字和分类。分类数据需要在训练之前进行处理,因为大多数算法和神经网络还不能直接处理它们。

有各种选项可用于编码变量,如标签/数字编码和一键编码。但是这些技术在记忆和分类级别的真实表示方面是有问题的。前一个属性可能更明显,可以用一个例子来说明。

假设我们将星期几信息作为一列。如果我们对这个变量进行一次性编码或任意标记编码,我们将分别假设等级之间的距离/差异相等且任意。

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

Fig 3. one-hot encoding and label encoding

但是这两种方法都假设每一对日子之间的差异是相等的,但是实际上我们很容易知道这不是真的,我们的算法也应该如此!

“神经网络的连续性限制了它们对分类变量的适用性。因此,天真地将
神经网络应用于用整数
表示类别变量的结构化数据并不奏效”[1]

树算法不需要对分类变量的连续性的任何假设,因为它们可以根据需要通过分裂来找到状态,但是对于神经网络来说,情况并非如此。实体嵌入来帮忙了。实体嵌入用于将离散值映射到多维空间,其中具有相似函数输出的值彼此更接近。您可能会想到,如果我们在一个国家中嵌入州来解决销售问题,在这个投影空间中,销售方面的类似州会更加接近。

因为我们不想在我们的分类变量的层次之间做任意的假设,我们将在欧几里得空间中学习每一个的更好的表示。该表示将等于独热编码数据和可学习权重的点积。

嵌入在 NLP 中被广泛使用,因为每个单词都被表示为一个向量。两个著名的嵌入例子是 Gloveword2vec 。我们可以从图 4 [2]中看到嵌入是多么强大。你可以下载这些向量,并根据你的目标使用它们,这实际上是非常酷的想法。

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

Fig 4. Word2Vec from tensorflow tutorials

即使嵌入可以以监督或无监督的方式应用于不同的上下文,我们的主要目标是理解如何对分类变量进行这些投影。

实体嵌入

即使实体嵌入有不同的名称,它们与我们在单词嵌入中看到的用例没有太大的不同。毕竟,我们唯一关心的是对我们的分组数据有更高维的向量表示;这可能是单词、星期几、国家和许多你能想象的其他东西。这种从单词嵌入到元(在我们的例子中是分类)数据嵌入的交易使 Yoshua Bengio 等人在 2015 年凭借一种简单的自动化方法赢得了 Kaggle 竞赛(https://www . ka ggle . com/c/pkdd-15-predict-taxi-service-trajectory-I),这不是获胜解决方案的常见情况。

“为了处理由客户 ID、出租车 ID、日期和时间信息组成的离散元数据,我们通过模型共同学习这些信息的嵌入。这是受神经语言建模方法[2]的启发,其中每个单词都映射到一个固定大小的向量空间(该向量称为单词的嵌入)。”[3]

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

Fig 5. Taxi Metadata embeddings visualization with t-SNE 2D projections

我们将逐步探索如何在神经网络中学习这些特征。定义一个完全连接的神经网络,分离数值和分类变量。

对于每个分类变量:

  1. 初始化一个随机嵌入矩阵为 m×d。

m: 分类变量的唯一级别数(星期一,星期二,…)

D: 表示所需的维度,一个可以在 1 和 m-1 之间的超参数(如果为 1,则为标签编码,如果为 m,则为一键编码)

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

Fig 6. Embedding Matrix

2.然后,对于通过神经网络的每次前向传递,我们从嵌入矩阵中查找给定的级别(例如“dow”的星期一),这将给我们一个向量 1 x D。

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

Fig 7, Embedding Vector after lookup

3.将这个 1 x D 向量附加到我们的输入向量(数值向量)上。把这个过程想象成扩充一个矩阵,我们为每个类别添加一个嵌入向量,通过查找每个特定的行来嵌入。

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

Fig 8. After adding embedding vectors

4.在进行反向传播的同时,我们也以梯度的方式更新这些嵌入向量,这最小化了我们的损失函数。

通常输入不会更新,但是对于嵌入矩阵,我们有一个特例,我们允许我们的梯度一路流回这些映射的特征,从而优化它们。

我们可以认为这是一个过程,它允许我们的分类嵌入在每次迭代中得到更好的表现。

**注意:**经验法则是保留基数不太高的类别。就像如果一个变量在 90%的观察中有独特的水平,那么它就不是一个非常有预测性的变量,我们很可能会把它去掉。

好消息

我们可以在我们最喜欢的框架(最好是一个动态框架)中很好地实现上述架构,方法是通过查找并在嵌入向量中允许 requires_grad=True 并学习它们。但所有这些步骤和更多步骤都已经在 Fast.ai 中完成了。除了简化结构化深度学习,这个库还提供了许多最先进的功能,如差异学习率、SGDR、循环学习率、学习率查找器等。这些都是我们想要利用的东西。你可以从这些非常酷的博客文章中进一步了解这些话题:

https://medium . com/@ bushaev/improving-the-way-we-work-with-learning-rate-5e 99554 f163 b

https://medium . com/@ surmenok/estimating-optimal-learning-rate-for-a-deep-neural-network-ce32f 2556 ce 0

https://medium . com/@ markkhoffmann/exploring-random-gradient-descent-with-restructs-sgdr-fa 206 c 38 a 74 e

[## 传送进来

学习率(LR)是需要调整的最重要的超参数之一,是更快、更有效地学习的关键

传送进来](http://teleported.in/posts/cyclic-learning-rate/)

用 Fast.ai 走一遍

在这一部分中,我们将看看如何绕过上述所有步骤,建立一个对结构化数据更有效的神经网络。

为此,我们来看看一场活跃的 Kaggle 竞赛https://www . ka ggle . com/c/mercari-price-suggestion-challenge/。在这个挑战中,我们试图预测一个在线卖家出售的物品的价格。这是一个非常适合实体嵌入的例子,因为数据大多是相对较高基数(不太多)的分类数据,没有太多其他数据。

数据:

大约 140 万行

  • item_condition_id :项目的条件(基数:5)
  • **类别名称:**类别名称(基数:1287)
  • 品牌名称:品牌名称(基数:4809)
  • **运费:**运费是否包含在价格中(基数 2)

**重要提示:**在本例中,我不会使用验证集,因为我已经找到了最佳模型参数,但是您应该始终使用验证集进行超参数调整。

第一步:

将缺失值填充为一个级别,因为缺失本身就是一个重要的信息。

train.category_name = train.category_name.fillna('missing').astype('category')
train.brand_name = train.brand_name.fillna('missing').astype('category')
train.item_condition_id = train.item_condition_id.astype('category')test.category_name = test.category_name.fillna('missing').astype('category')
test.brand_name = test.brand_name.fillna('missing').astype('category')
test.item_condition_id = test.item_condition_id.astype('category')

第二步:

预处理数据,对数字列进行缩放,因为神经网络喜欢标准化数据,或者换句话说,喜欢同等缩放的数据。如果不缩放数据,网络可能会过分强调某个特征,因为它完全是关于点积和梯度的。如果我们通过训练统计来扩展训练和测试,那会更好,但是这不会有太大影响。想想每个像素除以 255,同样的逻辑。

我结合了训练和测试数据,因为我们希望相同级别有相同的编码。

combined_x, combined_y, nas, _ = proc_df(combined, 'price', do_scale=True)

第三步:

创建模型数据对象。Path 是 Fast.ai 存储模型和激活的地方。

path = '../data/'
md = ColumnarModelData.from_data_frame(path, test_idx, combined_x, combined_y, cat_flds=cats, bs= 128

第四步:

决定 D(嵌入的维数)。cat_sz 是每个分类列的元组列表(col_name,cardinality + 1)。

# We said that D (dimension of embedding) is an hyperparameter
# But here is Jeremy Howard's rule of thumb
emb_szs = [(c, min(50, (c+1)//2)) for _,c in cat_sz]# [(6, 3), (1312, 50), (5291, 50), (3, 2)]

第五步:

创建一个学习者,这是 Fast.ai 库的核心对象。

# params: embedding sizes, number of numerical cols, embedding dropout, output, layer sizes, layer dropouts
m = md.get_learner(emb_szs, len(combined_x.columns)-len(cats),
                   0.04, 1, [1000,500], [0.001,0.01], y_range=y_range)

第六步:

这一部分在我之前提到的其他帖子中有更详细的解释。

充分利用 Fast.ai joy。

我们选择的学习速度是从损失开始增加之前的某个点开始的…

# find best lr
m.lr_find()# find best lr
m.sched.plot()

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

Fig 9. learning rate loss plot

合适的

we can see that with just 3 epochs we have
lr = 0.0001
m.fit(lr, 3, metrics=[lrmse])

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

更适合

m.fit(lr, 3, metrics=[lrmse], cycle_len=1)

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

还有一些…

m.fit(lr, 2, metrics=[lrmse], cycle_len=1)

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

所以,这些简单而有效的步骤可以让你在几分钟内达到 10%,而不需要任何进一步的努力。如果你真的想力争上游,我建议你利用 item_description 列,使它成为多个分类变量。然后把工作留给实体嵌入,当然不要忘记栈和系综:)

这是我的第一篇博文,希望你喜欢!我必须承认这东西有点上瘾,所以我可能会很快回来…

感谢你为我鼓掌:)

我现在是 USF 的一名研究生,攻读分析硕士学位。我已经应用机器学习 3 年了,目前正在用 Fast.ai 练习深度学习。

领英:https://www.linkedin.com/in/kerem-turgutlu-12906b65/en

参考文献:

[1]郭城,菲利克斯·伯克哈恩(2016 年 4 月 22 日)分类变量的实体嵌入。从 https://arxiv.org/abs/1604.06737 的T2 取回。

[2] TensorFlow 教程:【https://www.tensorflow.org/tutorials/word2vec

【3】yo shua beng io 等人工神经网络应用于出租车目的地预测。检索自https://arxiv.org/pdf/1508.00021.pdf

构建 ML 项目,使其能够成长

原文:https://towardsdatascience.com/structuring-ml-projects-so-they-can-grow-b63e89c8be8f?source=collection_archive---------18-----------------------

我从事过许多大大小小的数据科学和机器学习项目。从只需要几个笔记本的项目到成长为数万行代码的项目。

我发现,开始一个项目时,假设它会增长,这总是一件好事。

只需要在开始时付出少量额外的努力,就能够保持长期的生产力。

使用 git 管理代码是必须的。管理数据的方法也是必须的,但是什么是最好的方法还没有定论。

在这里,我将展示一个我最近开源的名为 lazydata 的库,它是专门为不断增长的 ML 项目管理数据而构建的。

传统的数据管理方式

如果您正在进行一个机器学习项目,您将不可避免地使用各种版本的数据集(原始的、以各种方式处理的、训练/开发分割的、增强的),并将尝试不同的模型(基线、不同的参数、架构、算法)。

你还需要将这些内容从你的本地电脑转移到云端,并与你的队友和未来的自己分享。

要管理这种激增的数据和模型文件,传统上有两种选择:手动文件管理和存储它得到的一切。

下表总结了不同的方法及其最大的风险。

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

Comparison of data management approaches

懒散的数据方式

lazydata 的核心概念是,嗯,懒惰。假设随着项目的发展,你将会产生大量的文件,而你只需要其中的一小部分。

能够回到你几个月前生产的那个模型总是好的。

但是,这并不意味着每个想要查看您的项目的人都需要下载整个历史,他们很可能只想要一小部分。

启用 lazydata 只需几行代码

那么如何使用 lazydata 呢?首先,安装它(这需要 Python 3.5+):

$ pip install lazydata

然后转到您的项目根目录并键入:

$ lazydata init

这将创建一个新的文件lazydata.yml,其中将包含您的跟踪数据文件的列表。

接下来,您可以在代码中使用 lazydata 来跟踪数据文件:

**# my_script.py****from lazydata import track** 
import pandas as pddf = pd.read_csv(**track("data/my_big_table.csv")**)print("Data shape:" + df.shape)

当您第一次运行这个脚本时,lazydata 将开始跟踪您的文件。

跟踪包括:

  • ~/.lazydata中创建文件的副本——这是您的本地缓存,保存您的文件版本,以便您可以在需要时返回并将其推送到云。
  • 将数据文件的唯一引用(SHA256)添加到lazydata.yml。您将这个 yml 文件添加到 git 中,以跟踪您在这个特定提交中拥有的数据文件。这使您能够在以后需要时进行取证,并像跟踪代码一样跟踪您的数据文件。

你完了!如果您更改了数据文件,将会记录一个新的版本,您可以像往常一样继续工作。

若要与您的队友共享您的数据文件,或者只是备份数据文件,请将遥控器添加到您的项目并推送您的文件:

$ lazydata add-remote s3://mybucket
$ lazydata push

一旦你的队友下载了最新的代码,他们也会得到lazydata.yml文件。然后,他们可以使用您设置的 S3 遥控器和 SHA256 唯一引用通过lazydata pull提取文件。

或者,他们可以简单地运行您的脚本来延迟下载丢失的文件:

$ python my_script.py
## lazydata: Downloading tracked file my_big_table.csv ...
## Data shape: (10000,100)

就是这样!现在,您可以将您的 S3 视为所有数据文件的永久存档,而不必担心您的合作者将不得不下载他们不需要的任何文件。

在上面的例子中,我们将 lazydata 应用于数据输入,但是您也可以在数据输出上使用track(),例如在您刚刚保存的模型权重文件上——它以完全相同的方式工作。

这种惰性语义使您能够两全其美:存储所有内容,同时随着项目的增长,保持对数据文件的管理和组织。

要了解更多关于库的信息,请访问 GitHub 页面:

[## rstojnic/lazydata

lazy data:Python 项目的可伸缩数据依赖——rstojnic/lazy data

github.com](https://github.com/rstojnic/lazydata)

构建你的机器学习项目的 22 个智慧金块

原文:https://towardsdatascience.com/structuring-your-machine-learning-project-course-summary-in-1-picture-and-22-nuggets-of-wisdom-95b051a6c9dd?source=collection_archive---------6-----------------------

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

完成一个机器学习项目很难。这个总结可以帮助你构建你的机器学习项目。

他的帖子研究了 Coursera 深度学习专业化的第三个课程。它给出了关键概念的图形概述,并用一句话概括了每堂课。

为什么是这个总结?我确信所学到的经验教训对所有机器学习从业者都是有帮助的。在阅读完讲座后,我相信读者会从紧凑的讲座摘要和对材料的概述中受益。如果这个帖子激发了你的好奇心,请鼓励注册并亲自探索这个课程。

所以,事不宜迟,让我们进入知识的世界吧。

快速迭代

在其核心,每个机器学习项目都是关于有一个想法,实施,然后评估它。你越早重复这些步骤,你就能越早达到你的目标。这种结构与 Eric Ries 的精益创业精神产生了共鸣,即“建立、衡量和学习”,这在全世界的创业公司、组织和企业中非常流行。

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

The tools to iterate quickly over new ML ideas

在这个过程的每一点上,你都必须做出重要的决定。你应该收集更多的数据吗?你应该减少偏差或方差吗?你应该如何比较不同的算法?该课程提供了选择最有效的前进步骤的建议。上图总结了这个关键概念,以及对每个迭代步骤的建议。

接下来,您可以在第三个 Coursera 深度学习专业化课程中找到每个讲座视频的一句话摘要。瞧,你的 22 条智慧。

讲座摘要

  1. 为什么选择 ML 策略——机器学习策略对于快速迭代想法和高效达成项目结果非常有用。
  2. 正交化-指的是挑选参数进行调整的概念,这些参数仅调整机器学习模型的一个结果,例如,正则化是减少方差的旋钮。
  3. 单个数字评估指标—选择一个评估指标,例如 f1 分数,立即判断多个模型的性能。
  4. 满足和优化指标-机器学习模型通常有一个要优化的指标,例如实现最大的准确性,以及应该保持的某些约束,例如在不到 1 秒的时间内计算预测或将模型放入本地内存。在这种情况下,准确性是优化指标,预测时间和内存使用是令人满意的指标。
  5. 培训/开发/测试集分布——确保开发和测试集来自同一个分布,并且它们准确地代表团队试图优化的目标。
  6. 开发和测试集的大小——考虑到您的训练集以百万计,对训练集使用尽可能多的数据,对开发和测试集使用 1%/1%的数据。
  7. 何时改变开发/测试集和度量——如果您发现您的评估度量的等级不再准确地反映您的模型的性能,请考虑重新陈述优化度量,例如,通过添加加权项来严重惩罚您的分类器对真正重要的示例的错误分类。
  8. 为什么是人类水平的性能?—贝叶斯误差是分类器可以实现的最佳性能,根据定义,它优于人类水平的性能。贝叶斯和人为误差是评估训练数据是否存在偏差的重要指标。
  9. 可避免的偏差——描述训练集错误和人类水平的表现之间的差距。
  10. 了解人的水平性能-如果一组专家能够达到 0.7%的错误率,而一个人达到 1%的错误率,则选择 0.7%作为最佳人的水平性能,选择< 0.7%的值作为贝叶斯误差来测试模型性能。
  11. 超越人类水平的性能-如果你的算法超越人类水平的性能,那么判断可避免的偏差就变得非常困难,因为你通常不知道贝叶斯误差有多小。
  12. 提高模型性能-评估贝叶斯误差和训练集误差之间的差异,以估计可避免的偏差水平。通过比较训练和偏差设定误差来估计方差。尝试不同的技巧来对抗任何形式的错误。
  13. 进行错误分析——分析 100 个错误分类的例子,并根据错误分类的原因对它们进行分组。为了改进您的模型,训练您的网络来消除它错误分类某一类型输入的原因可能是有意义的,例如,向它提供更多模糊的图片。
  14. 清理错误标记的数据——神经网络在处理随机错误分类方面相当稳定,如果您消除了开发集中的错误分类,也消除了测试集中的错误分类。
  15. 快速构建你的第一个系统,然后迭代——快速原型化第一个版本的分类器,然后按照战略方针迭代改进它。
  16. 在不同的发行版上进行训练和测试-如果训练集中的数据来自混合数据源,请使用您想要优化的数据创建开发和测试集,例如,如果您想要对手机中的运动鞋图像进行分类,请使用仅包含手机中的运动鞋照片的开发和测试集,但可以随意使用增强的运动鞋 web 图像来训练网络。
  17. 数据不匹配的偏差和差异—当您的开发和测试集来自不同的数据分布时,创建一个与训练集具有相同数据分布的训练开发集。这一步有助于您检查是否存在方差、偏差或数据不匹配问题。
  18. 解决数据不匹配的问题——如果您有数据不匹配的问题,请执行手动错误分析,并了解训练集和开发/测试集之间的差异。请注意创建人工训练数据,因为可能会出现这样的情况:您只合成了所有可用噪声的一小部分。
  19. 迁移学习-如果您有另一个分类器可以受益的较低级别的特征,请使用迁移学习,并切断现有神经网络的最后一层,然后针对新任务训练网络。
  20. 多任务学习-使用单个神经网络来检测图像中的多个类别,例如自动驾驶汽车的交通灯和行人。同样,当神经网络识别对多种分类任务有帮助的较低级别的特征时,并且如果您具有平均分布的类数据,这也是有用的。
  21. 什么是端到端深度学习——不是使用许多不同的步骤和手动特征工程来生成预测,而是使用一个神经网络来找出底层模式。
  22. 是否使用端到端深度学习——端到端深度学习有一些优势,比如让网络自己找出重要的特征,也有一些劣势,比如需要大量的数据,所以它的使用真的必须根据你正在解决的任务或功能的复杂程度来逐个判断。

感谢你阅读这篇文章,我希望它能帮助你回顾你的课程经历。所有功劳属于 deeplearning.ai ,Coursera 和吴恩达。如果我错过了一个重要的话题,请随时在下面的评论区添加。

如果你对 Coursera 深度学习专业化和机器学习的更多更新感兴趣,请查看我之前的两篇 帖子,在 medium 上关注我,如果你有任何其他问题,请随时在 LinkedIn 上给我发消息。

斯图尔特·威茨曼靴子、名牌包和带面具的套装

原文:https://towardsdatascience.com/stuart-weitzman-boots-designer-bags-and-outfits-with-mask-r-cnn-92a267a02819?source=collection_archive---------8-----------------------

我最近和一些人聊天,讨论如何为深度学习管道建立多阶段模型。具体的问题是如何将图像中的对象与已知的对象数据库进行相似性比较,以便进行匹配。这个问题与吴恩达在深度学习课程中为面部识别铺设的管道非常相似。他的方法是有两个模型,第一阶段和第二阶段。第一阶段可以是对象检测模型以定位到图像中的面部,然后第二阶段模型可以基于定位的面部进行面部相似性比较。分两个阶段构建管道是有用的,因为它让第二阶段模型处理更少的任意噪声,因此它可以专注于与您关心的任何对象进行比较。

在我的第一篇媒体文章中,我讲述了我是如何为游戏《彩虹六号围攻》构建一个面部识别管道的。然而在这篇文章中,我想建立一个多类图像分割模型,作为第一阶段模型的例子。我的理由是,有时检测对象的边界框是好的,但是在逐像素级别分割图像应该给第二阶段提供更清晰的输入,因为第二阶段模型将很少或没有背景需要处理。

正如标题所暗示的,这篇文章的主题是一个多类图像分割模型,我定制了这个模型来检测衣服。

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

除了作为引子的对话,我认为这将是一个很好的练习,因为很难找到关于如何做多类图像分割项目的教程。对于这个项目,我将使用 Matterport 的 Mask R-CNN,这是 Mask R-CNN 的 Keras 实现,它执行得很好。将来用原始的 Tensorflow 实现来做可能也不错,但我想尽快完成这个原型。(我说的快速是指我决定在周六晚上 10 点做这件事,收集数据,对其进行注释,并在凌晨 4 点之前对其进行训练,上床睡觉,然后第二天写这篇博客 XD)

掩模 R-CNN 的简要背景

对于许多任务来说,重要的是不仅要知道存在对象以及它在图像中的位置(对象检测),而且要知道给定图像中的哪些像素对应于该对象(图像分割)。掩模 R-CNN 是对先前的对象检测架构 R-CNN 和更快的 R-CNN 的修改,以服务于此目的。执行图像分割的能力是通过在现有网络架构上添加一个完全卷积的网络分支来实现的。因此,当主分支生成边界框并识别对象的类别时,从主分支获得特征的完全卷积分支生成图像遮罩。

我看到的另一个帖子是来自( here )的,其中我学到了很多关于掩模 R-CNN 和图像分割的知识。最后,如果你真的想看,你可以看看原版的 R-CNN 报道,它值得一读(这里)。

采集数据并标注

虽然我选择了帖子的主题,但我对设计师品牌的衣服了解相对较少。然而,我的一个好朋友喜欢斯图尔特·威茨曼的靴子,所以我想我可以用它来帮助缩小这个项目的图像范围。我在谷歌上做了一些快速搜索,调出了相关图片,收集了大约 130 张模特的图片,其中大部分都穿着斯图尔特·威茨曼的靴子,但我想说,这个数据集是关于那些看起来相当时尚的人的。

对于我的注释,我使用了 VGG 图像注释器,这是一个很好的接口,用于牛津大学的对象检测或图像分割注释。

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

screenshot of the VGG annotator

对我来说,这里的主要变化是通过使用注释器中的区域属性来确保每个多边形区域都标记有一个类名。我添加了一个名为“name”的字段,稍后我可以在输出 JSON 文件中引用它,这样模型就会知道每个多边形区域的底层类。

在我的三节课中,我使用了靴子(包括鞋子和凉鞋,如下图所示),包(大多数是不同尺寸的手提包,也有购物袋和一两个背包),最后,我最麻烦的类别是“顶级”。我最初打算做大便,外套,裤子等。但是那会大大增加这个注释过程,所以我把其中的大部分压缩到一个“顶级”类别,决定不注释裤子。如果我决定建立一个更强大的模型,所有这些都可以调整。

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

When I remembered that I had included this picture I immediately regretted it because of the amount of annotation. It also shows how my class system is probably not ideal… I have to label a one piece outfit as a “top” but don’t include jeans/pants so the system seems a bit convoluted…

使用 VGG 注释器,我生成了 json 文件,其中包含了模型的所有多边形分割区域以及多边形的相关名称。

代码和培训的修改

这部分实际上对我来说很好,因为它迫使我挖掘 Matterport 代码来尝试并找出如何修改它来实现多类分段。

查看我的 fashion.py 文件中的所有代码,我在这里只展示一些片段。

第一次修改发生在第 46 行。

NUM_CLASSES = 1 + 3  # Background + bag +top +boots

而不是基本的:

NUM_CLASSES = 1 + 1  # Background + single_class

在 load_balloon 函数中的第 70 行(在后面我应该修改了这些函数名,因为它们不是描述性的)

self.add_class("fashion", 1, "top") #adjusted here
self.add_class("fashion", 2, "boots") #adjusted here
self.add_class("fashion", 3, "bag") #adjusted here

我查看了为 coco 数据集生成后端数据集的方式,发现所需的信息是数据集/模型名称,在本例中为“时尚”,然后添加了类别号和相关联的标签映射供模型使用。

因此,现在数据集和模型在物理上能够接受多个类,我必须确保在加载图像时记录类信息。

为此,我插入了几行代码(94–102)来为给定的图像生成到区域多边形的标签映射。

class_names_str  = [r['region_attributes']['name'] for r in a['regions'].values()]
class_name_nums = []
for i in  class_names_str:
    if i == 'top':
        class_name_nums.append(1)
    if i == 'boots':
        class_name_nums.append(2)
    if i == 'bag':
        class_name_nums.append(3)

这个部分只是从 json 文件的 region_attributes 部分获取给定图像的区域名称,然后遍历它以创建一个输出列表,该列表将字符串转换为与上面的类标签映射相匹配的数字 1、2 和 3。

接下来在第 119 行,我在 add_image 调用中添加了一个新字段,这样我就可以存储给定图像的类列表,然后在脚本稍后生成掩码时提取该列表。

class_list = np.array(class_name_nums)

对我来说,最有趣的部分是认识到 load_mask 函数通过生成一个全 1 的 numpy 数组来处理类标记,其思想是它只是进行单个类分类,这在大多数自定义数据集训练中是常见的。所以我在这里要做的就是引用我附加到 load_mask 函数引用的图像上的 class_lists(第 143 行)。

在这种情况下,return 函数返回一组表示该图像中要分割的 N 个多边形的图像遮罩,加上我的添加,它现在返回一个长度也为 N 的多边形类的数值数组。

class_array = info['class_list']
return mask.astype(np.bool), class_array

一旦这些细节得到解决,我就能够使用 coco challenge 的预训练权重来训练 Mask R-CNN 模型。我让模型在 Nvidia 1080 GPU 上训练了 20 个时期,在那里它调整了图像的大小,使长边为 1024 像素,我通过 GPU 一次输入 2 幅图像,但没有对我可以处理多少图像进行大量实验。

关于建立更强模型的当前结果和想法

鉴于我使用的数据集只有 100 张训练图像,另外还有 20-30 张用于评估,结果实际上相当不错。鉴于这是一个比我在使用 Mask R-CNN 之前完成的单个类自定义分段任务更难的任务,我感到惊喜。

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

Shows original and the predicted image masks

显然还有很大的提升空间。该模型在外套和服装的边缘等领域仍不确定。很大程度上可能是因为我不一致的标签/在如何处理不是靴子和包的衣服项目上糟糕的职业选择。

如果我要改进这个快速原型,有两个方面需要下大力气。首先是定义我们到底想用这个模型做什么。例如,如果第二阶段模型/多个第一阶段模型能够辨别不同类型的服装,则第一阶段模型实际上可能不需要辨别这些服装。这意味着你可以使用一个单一的分类模型,用一个普通的类别“衣服”或者类似的东西。如果我们反其道而行之,增加更多的粒度,那么从长远来看,这将只需要经过深思熟虑的类。这将意味着我们必须弄清楚如何处理不同的事情,比如一个人穿着外套和衬衫,即使我们只有衬衫的一部分,我们也要给外套和衬衫贴标签吗?还是大多被高筒靴遮挡的裤子?这些都是需要根据手头的任务/问题进行检查的领域。

第二个需要改进的地方是收集更多的图像。这个模型只训练了 100 张图像,模型有很多不确定性,例如它不总是包括外套或其他衣服的边缘。这看起来像是不包括他们的模型,因为鉴于其有限的暴露,它仍然是不确定的。这部分性能应该有所提高。

还没完!提取衣物

正如我在开始时所说的,目标不仅仅是分割图像中的服装,而是将其用作第一阶段的模型,以帮助减少后续模型用作输入的噪声。

Mask R-CNN 模型的输出是具有许多不同数据字段的结果数组。

我发现对此有用的是“ROI ”,它包含对象的边界框坐标,“masks”是每个预测遮罩的二进制数组。

因此,要分离出这些衣服,我所要做的就是使用二进制图像蒙版只显示特定的衣服,然后使用“roi”字段中的边界框来裁剪图像,只显示特定的衣服。结果是一个相当接近的裁剪图像,而不是原来的嘈杂的衣服!我参考了 Brad Sliz 2017 年的一篇帖子,从中获得了如何隔离面具的灵感。

请参见下面的输入阶段:

首先是原图。

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

接下来生成分段掩码。该模型标识了一个“top”、一个“bag”和两个“boots”类的实例。

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

predicted image segmentation and classifications

最后,通过使用分割多边形作为遮罩,我们可以隔离衣服。本质上,掩模通过将 RGB 阵列的 3 个维度中的每一个乘以二进制图像掩模来工作。这意味着不在蒙版中的所有区域变为 0,蒙版中的区域保持不变。这是它的原始输出…但是我不喜欢黑色背景。

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

我很快地拼凑了一些代码,只是将数组中值为 0 的纯黑色替换为值为 255 的白色。然而,这也扰乱了黑色衣服的其他部分的颜色…所以它不太理想,但为了演示的目的,我会调整它。

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

Brute force changing values of 0 to 255 causes odd outlines and such.

所以现在我们可以生成这些裁剪过的图像,这些图像只分离出衣服,你可以用它来做很多事情!例如,您可以查看在线商店中与用户提交的照片最匹配的商品,或者使用经过清理的图像为一件衣服生成标签,使其可被搜索。这两种方法的想法都是,第二级模型需要处理的输入噪声更少,因此会更好。

如果你去建立一个相似性模型,它没有首先将输入本地化,那么你可以让两个模特穿着相同的上衣,但是如果他们的肤色不同,那么相似性模型将需要能够解释额外的变化。相反,如果你使用像这样的分割模型作为第一阶段,那么模型的肤色并不重要,因为你现在只需要比较上衣。

最终想法

这个快速项目是一个例子,说明如何建立一个自定义的多类图像分割模型,然后展示如何使用该模型来帮助其他模型做得更好。如上所述,我认为根据使用情况,这种类型的模型可以在广泛的情况下有所帮助,在这些情况下,能够定位到图像中的特定对象/区域而不是通过网络提供原始图像通常是有用的。

我也很高兴,因为我以前没有训练过多类分割网络。主要是因为我使用了大多数对象检测/分割模型来为第二阶段网络清理数据,而不是训练它们在粒度级别上进行分类。部分原因是重新训练第二阶段模型并使第一阶段模型保持良好和灵活更容易。例如,一家公司建造了一个人工智能迎宾器,并使用对象检测模型来识别走进大厅的员工,并为他们开门。这在技术上是可行的。但从长远来看,这是不方便的,因为每次你为公司增加新员工(或有人离开)时,你都必须重新培训检测机。但更容易的是让检测器保持一般化,只做面部,在后端,你可以建立一个第二阶段的网络,像一个暹罗网络,它擅长区分人,从第一阶段的对象检测器中提取特征,并将其与你的员工进行匹配。这也解决了如何增加或减少雇员的问题,因为您只需要对您维护的雇员数据集进行适当的修改。

github repo 哪里有培训和测评代码

Scikit-Learn 上决策树和集成的研究

原文:https://towardsdatascience.com/study-of-decision-trees-and-ensembles-on-scikit-learn-e713a8e532b8?source=collection_archive---------6-----------------------

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

现在科技界最热门的话题之一是机器学习领域。应用范围包括算法金融、图像识别、基因组测序和物联网的最新发展。

考虑到这一点,监督学习算法的一个常见分支包括决策树,以及它们的集成(随机森林和梯度提升树)。在下面的链接中,我分析了 Python 在 Kaggle 的 Titanic 数据集上对这些分类器的 scikit-learn 实现。

链接:https://www . ka ggle . com/creepykoala/titanic/study-of-tree-and-forest-algorithms/notebook

愚蠢的张量流技巧

原文:https://towardsdatascience.com/stupid-tensorflow-tricks-3a837194b7a0?source=collection_archive---------2-----------------------

对一个老(汤姆逊)问题的新看法

谷歌的机器智能库 TensorFlow (TF),已经成为深度学习的代名词。尽管名字如此,深度学习只涉及几件简单的事情,复杂性来自于将这些简单的事情重复数百万次(具体来说,它是数百万个初等函数的组合)。要“解决”TF 中的一个问题,你需要找到某个函数的最小值。难的是 反推 需要这个庞大函数的导数。这是 TF 的优势所在,因为它消除了算法微分的苦差事,并自动将计算转移到 GPU。这可以让你做出惊人的事情,比如写莎士比亚或者画猫。然而在实践中,该框架可以解决任何可微最小化问题。我想看看我能把这个想法推进到什么程度。

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

Electrostatic charge configuration for N=625 in equilibrium. Global minima? Probably not.

汤姆逊问题是一个经典的物理学问题,“单位球面上的 N 个正电荷的什么构型使能量最小?”。每对电荷的势能是 1/r ,所以我们试图最小化的函数是所有电荷的成对总和。

看起来很简单,对吧?对于 N 的低值,是。 N=2 将两个电荷放置在球体的两极对立处, N=3 将三个电荷放置在赤道上的同心环中, N=4 给出一个四面体。较大的 N 值,尤其是当 N 为质数时,打破这些好看的几何描述。 N=11 将电荷置于完全打破对称性的配置中——当电荷处于平衡状态时,它们的分布方式是一边比另一边多;它有净偶极矩!

在 TF 中解决这个问题出奇的容易。我们将输入变量设置为在单位球面上进行归一化,计算对称距离矩阵,并提取所有唯一的成对距离。势能是所有这些 1/r 距离的总和,所以我们用它作为目标函数。

运行模型和保存配置需要更多的工作。该项目的细节存储在这个 github repo 中。

我们的模型效果如何?对于 N 的任何值,我们可以在几秒钟内收敛到稳定的解能量最小值,并且我们可以通过降低学习速率在几分钟内将其改进到完全浮点精度。随着 N 变大,我们发现越来越多的解是稳定的(梯度为零),但不是全局最小值。我们可以将这些解决方案与发布在维基百科上的解决方案进行比较,维基百科列出了 470 种配置。对于 N 的低值,找到的第一个解是已知的最佳解。大约在 *N > 30,*这一过程会变慢,并且需要更长的时间才能找到已知解。这些“几乎”解在能量上非常接近全局解,但成为未经加工的钻石——这是一种罕见的特殊配置,使其区别于无数其他解决方案。

TensorFlow 在 GPU 上的计算在这里表现令人钦佩。使用大值 *N=2000,*我的GTX-980 G PU 每秒计算 38 次迭代而我可怜的 8 核 CPU 每秒只能计算 3.6 次迭代。这是令人印象深刻的 10 倍加速!

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

Minimal energy for N=100 charges, prettified.

即使我们知道这可能不是整体的最小值,视觉化的组态也能说明规则性和明显的对称性。在 python 绘图库 matplotlib 中这样做,真的是把它推到了绝对的极限!虽然 3D 可视化不是我的强项,但我发现你可以通过以正弦和余弦控制的速率旋转相机角度来获得不错的结果。

对我来说,这是一个有趣的项目;这是一个清晰而简单的过程,通过有形的回报可以获得新的知识。这就是低垂的果实的缩影。有多少其他简单的项目可以用算法差异和 GPU 加速来加速?

我们还可以用 TensorFlow 做什么?

留下评论或链接到其他一些愚蠢的 TensorFlow 技巧。

风格分析:中本聪

原文:https://towardsdatascience.com/stylometric-analysis-satoshi-nakamoto-294926cdf995?source=collection_archive---------2-----------------------

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

摘要:

N 自然语言处理工具被应用于中本聪的比特币纸张,将其与众多加密货币相关的纸张进行比较,试图识别未知的中本聪的真实身份。论文分为两个部分;第一部分是对所生成的语言特征和语料库中每个文档的 n 元语法的风格计量分析,该语料库由中本聪研究所列出的相关文献组成,并使用语言特征的机器学习模型来预测中本聪的比特币论文和他的个人电子邮件文本上的一个/多个作者。第二部分是语义相似度分析,使用 spaCy 和 gensim 中的内置函数,根据语义相似度比较语料库中每个文档的内容。这两部分的结果表明语料库中哪些作者在语言和语义上与中本聪相似。

1 个问题陈述

B 对于那些对当前货币体系持怀疑态度的人来说,itcoin 是一种长期存在的点对点数字加密货币,目前的货币体系受到中央银行和商业银行等第三方的严重控制。比特币受到世界的关注不仅仅是因为加密货币本身,还因为比特币背后的一种算法,这种算法被称为区块链。被称为比特币和区块链创始人的中本聪的真实身份一直是比特币社区成员激烈争论的话题。由于中本聪和参与这个比特币项目前期的人只是通过邮件互动,没有人见过他本人,也没有人和他进行过真人互动;因此,他的身份至今不明。出于隐私考虑,中本聪拒绝向公众透露自己的身份,留下了一些评论;其中一篇文章名为“比特币:一个点对点电子现金系统”,描述了比特币如何使用区块链工作,另一篇是 Satoshi 和参与比特币早期阶段的人之间的一些电子邮件往来。

本文试图回答一个关于中本聪的问题,“谁在语言和语义上与中本聪相似?”本文对中本聪研究所、比特币论文和 Satoshi 的电子邮件往来中列出的相关文献进行了风格计量和语义相似性分析,以找出谁在语言和文本上与中本聪相似。风格计量分析是一种语言风格分析,用于根据语言特征暗示一篇文章是否属于某个作者。语义相似性分析是一种用来表明一个文本的内容或意义是否与另一个文本的内容相似的分析。

中本聪的真实身份对比特币社区很重要。众所周知,Satoshi 拥有大约 100 万个比特币,占比特币总供应量的 7%。他对比特币的经济影响最大;如果他决定向市场出售他的一些比特币,市场将通过可能贬值所有现有的比特币来应对这一变化。此外,表明中本聪的真实身份可以为区块链带来许多升级,并可以在金融以外的领域引入区块链的新应用。

2 数据

使用名为 Article 的 python 模块收集数据。使用该模块收集了中本聪研究所仅以 HTML 格式列出的文献。所收集文献的作者在比特币社区中被认为是中本聪的可能候选人,如哈尔·芬尼、伊恩·格里格、尼克·萨伯、蒂莫西·c·梅和戴伟。总共收集了 29 份文件,包括 6 份哈尔·芬尼文本、2 份伊恩·格里格文本、16 份尼克·萨伯文本、2 份蒂莫西·c·梅文本、1 份戴伟文本和 2 份中本聪文本,其中一份是比特币论文,另一份是他与他人的电子邮件交换文本。数据中除中本聪之外的每个作者的文本都被合并到一个文本文件中。训练语料库包含除中本聪之外的每个作者的单个组合文本,而测试语料库包含两个单独的中本聪的文本。

3 方法论

T 词形分析有三个组成部分,语言特征、分类算法和 n 元语法。总共生成了 10 个语言特征,并用于在语料库中作者之间进行比较。这些特性是使用 sent_tokenize 函数和 nltk 模块中内置的停用词生成的。表 1 提供了这些特性的描述。诸如支持向量机、随机森林和高斯朴素贝叶斯的分类算法被用于分类作为训练语料库的作者之一的中本聪的比特币论文和他的电子邮件往来。这些算法是用除中本聪以外的作者的特性训练的,并且都是使用 scikit-learn 模块在 python 中实现的。

此外,使用 nltk 模块产生了语料库中每个文档的 n 元语法,其中 n 是从 1 到 4。每个文档中的标记都使用 nltk 进行了词汇化。WordNetLemmatizer,以防止同一单词由于复数而被计为另一个单词。首先,1-gram,称为 uni-gram,是用和不用停用词生成的。之后,二元模型、三元模型和四元模型被创建、比较和分析,以观察中本聪是否按顺序重复某个单词模式,以及其他作者是否在他们的作品中使用相同的模式。

语义相似性分析是使用 spaCy 中计算语义相似性的内置函数和 python 中实现的 gensim 来完成的。在太空中。similarity()方法用于将一个文档的内容与另一个文档的内容进行比较,并使用 0 到 1 之间的数字来确定相似性,其中 0 表示这两个文档彼此不相关,1 表示这两个文档的内容相同。使用了 spacy.load('en_core_web_lg '),它由在普通爬行上用 GloVe 和 1.1m 密钥训练的 300 维单词向量和 1.1m 唯一向量(300 维)组成。在 gensim 中,相似性。MatrixSimilarity()用于使用-1 和 1 之间的数字来计算余弦相似度,其中数字越接近 1,两个文档在内容方面就越相似。

4 个结果

根据表 3 中的分类算法,他们都预测 Nick Szabo 与撰写比特币论文的 Satoshi 在语言上相似,Ian Grigg 与交换电子邮件的 Satoshi 在语言上相似。在表 4 中,在 Satoshi 的电子邮件交流中有两个单字,(’ would ‘,31)和(’ one ',29)。Hal Finney 用了 28 次 would,Nick Szabo 用了 199 次 one。伊恩·格里格和尼克·萨博常用一个词“契约”。

从 spaCy(表 5)来看,戴伟与比特币论文的相似度最高,哈尔·芬尼与 Satoshi 的电子邮件往来的相似度最高。从 gensim(表 6)来看,Timothy C. May 与比特币论文的相似度最高,Ian Grigg 与 Satoshi 的电子邮件往来的相似度最高。一个不寻常的结果是,Ian Grigg 与 Satoshi 的电子邮件往来的相似性得分为 0.99996(表中四舍五入为 1.0)。

5 结论

根据测试结果,写比特币论文的聪可能不是那个互通电子邮件的聪。中本聪可能不止一个人;中本聪是参与创造比特币和区块链的计算机科学家和密码学家团队的化名。尼克·萨伯(Nick Szabo)和伊恩·格里格(Ian Grigg)分别是比特币论文和电子邮件文本中与中本聪语言相似的两位作者。此外,就语义相似性而言,戴伟和蒂莫西·c·梅是比特币论文的两个潜在候选人。哈尔·芬尼和伊恩·格里格是 Satoshi 电子邮件交流的两个可能的候选人。由于哈尔·芬尼曾通过电子邮件与中本聪互动是众所周知的事实,哈尔·芬尼不应被列入交换电子邮件的聪的可能候选人名单;伊恩·格里格在语言和语义上与中本聪相似。因此,中本聪的可能候选人是尼克·萨博、伊恩·格里格、戴伟和蒂莫西·梅。

6 讨论

中本聪(atoshi Nakamoto)在整篇比特币论文中反复使用了“工作证明”这个短语,尼克·萨伯(Nick Szabo)是训练语料库的唯一一位作者,他在名为 Bit gold 的博客文章中使用了完全相同的短语。它支持了一个理论,即尼克·萨博在语言风格方面非常接近于佐藤。使用 sklearn 上的多维标度、MDS,在二维空间中可视化语料库的每个作者的文档距离。在图 1 中,Ian Grigg 和 Nick Szabo 之间的距离最短,这表明 Ian Grigg 和 Nick Szabo 彼此关系密切,这可能不是巧合。戴伟和蒂莫西·c·梅与尼克·萨博和伊恩·格里格相距甚远,这可能表明,与尼克·萨博和伊恩·格里格相比,戴伟和蒂莫西·c·梅不是中本聪的有力候选人。

7 未来的工作

仅用由 10 个特征组成的 5 个数据点训练的分类算法令人担忧。在理想的数据科学世界中,机器学习模型需要用更大的训练样本进行交叉验证训练。除了 n-grams 的绝对频率之外,还可以将 n-grams 的相对频率添加到研究中。此外,如果可能的话,可以将自称为中本聪的克雷格·史蒂夫·赖特添加为训练语料库的作者之一,因为算法和语义相似性允许将他与当前训练语料库的作者进行比较。看看他是否会超过尼克·萨博和伊恩·格里格,这两个人是中本聪的两个最强有力的候选人,这将是很有趣的。

[## 修订版 ANLY580 最终版 PAPER.pdf

编辑描述

https://drive . Google . com/file/d/1t 3 itw 4kl-qky 1 zy 3 fpm 1 ytz 799hz lops/view?usp =共享](https://drive.google.com/file/d/1T3ITw4KL-QKy1zY3fpM1yTZ799HZLoPS/view?usp=sharing)

附:我刚刚意识到我不能在这里插入表格,所以我在 Google Drive 上分享了这篇论文。

托词:谁是最好的?

原文:https://towardsdatascience.com/subterfuge-whos-the-best-7269bef45358?source=collection_archive---------6-----------------------

使用残差,经验和评级,看看谁打败了正常

我之前写过游戏次数和每周游戏次数如何与玩家的等级相关。你可以在这里阅读相关内容。数据中有一些噪音,但我的总体假设是正确的:你玩得越多,你就越好。

排行榜,你可以很容易地看到谁排名第一。截至 2017 年 4 月 1 日,Dane69 以 1797 的评分蝉联冠军。你可以说他/她拥有最好的头衔,这是没有错的。对于这篇文章,我想要一个更加细致入微的外观。我的问题是:

对于他们的经验水平来说,谁是最好的诡计玩家?

为了确定这一点,我使用了一种叫做残差的统计方法。简而言之,残差是实际值与由模型计算的预测值之间的距离。残差用于确定任何模型的拟合优度。更多信息,我喜欢汗学院的残差解释发现这里

在这篇文章中,我决定使用游戏的等级作为每个玩家的经验等级。例如,我(用户名:Baer)玩了 35 个分级游戏,分级为 1264。为了简单起见,我使用了一个线性模型,这将在下面进一步讨论。

可视化残差

下图类似于我的上一篇文章,但是做了一些美学上的改变来突出残差。

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

图表上的注释:

  • 距离线性模型最远的距离(即每个经验水平的最大残值)用红色表示在上方,蓝色表示在下方。颜色越深,距离越大。
  • 线性模型(中间浅蓝色的直线)代表已评价的游戏和预期评价之间的关系。未来的分析将受益于一个更细致的模型。
  • 我为 0 以上的红色残差和 0 以下的蓝色残差添加了一个线性模型。看着图的最右边,我们可以看到线性模型最终失败了。大约 75 场比赛后,没有人击败模型(即没有红点)。
  • 埃坎是所有球员中正剩余价值最大的。这意味着他/她已经大大超出了他/她的期望值。虽然有更高的评级,但没有一个玩家比 ekan 更远离他们经验水平的期望值。
  • Baer(我)刚好在中间。在我的辩护中,我在我的最后一场比赛中由于缺乏互联网连接而自动辞职,并受到了很大的收视率打击。
  • 我不想包括谁的名字有最大的低于标准的剩余。为他/她辩护的是,在大约 80 场比赛中,他们评级的期望值非常高。然而,他们的名义评级也是所有球员中最低的。我想他们已经输了很多次了。(我从数据集中删除了一个评分低于 600 的观察值。有人创建了一个帐户来测试他们可以获得多低的评级)。

西蒙·杰克逊博士关于残差的非常容易理解的帖子在这里找到是这篇帖子的一个很好的指南。

结论

没有一个模型是完美的,但它们都可以提供一定的洞察力。同样,我们可以看到经验确实会导致更高的评级。然而,顶部较平的红线表明你可以很快达到上限。蓝线的斜率几乎与模型的斜率相匹配。即使你已经跌到谷底,你也可以变得更好!

尽管如此,一个更灵活的模型可以解释图表右侧实际评分的下降。很明显,在玩了 40 个左右的分级游戏后,线性模型无法解释这种关系。我计划继续学习如何使用更复杂的模型计算残差。

恭喜伊坎!保持胜利(除非我们在同一场比赛中比赛)。

这篇文章的代码可以在我的 GitHub repo 找到这里

成功的管理不是机器学习的问题…

原文:https://towardsdatascience.com/successful-management-isnt-a-question-of-machine-learning-but-of-people-taking-the-right-5654f06d51ee?source=collection_archive---------11-----------------------

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

在春季学期的最后几周,学生们不是唯一期待夏天的人。一个星期二的早上,当我聚精会神地听小组报告时,我不禁想,那天下午我会不会去网球场。上午课间休息时,我接到一个朋友打来的电话,邀请我去玩,我评估了一下天气状况:晴朗、炎热、有风,还有点潮湿。在过去的 14 次我考虑参加比赛时,条件并不完全相同。在其他条件相同的情况下,你能预测那天下午我是否在球场上吗?

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

Written, Frank and Hall, 2010

成功的管理不是机器学习的问题,而是人们在其工作环境中做出正确决策的问题。探索这种背景可以帮助您了解您所面临的挑战的性质——您是在完美信息的确定性环境中工作,还是在有缺失信息的随机环境中工作?你能假设手头的数据包含期望的结果(监督学习)或不包含(非监督学习)吗?你必须处理哪种数据(定性的、定量的、离散的、连续的、名义的、顺序的… …)?你愿意花多少时间去寻找答案,你期待的答案有多好(置信区间)?业务分析是学习理解要解决的问题的本质,然后使用适当的方法将数据转化为个人和集体的行动。

决策树可用于使用分类或连续数据直观地表示监督学习环境。决策树是使用估计值和概率来改进管理决策的预测模型。当正确使用时(无论是否依赖软件…),决策树允许管理者利用对问题的观察(用分支表示)得出关于要采取的适当行动的结论(用树叶表示)。在上面的网球问题中,可以使用一个简单的决策树来有效地预测我那天下午的行为。

决策树在减少监督学习环境中行动过程的不确定性方面非常有用。把问题想成“二十问”的游戏。我有一个秘密(在什么情况下我会打网球)——你可以使用数据来制定问题,可以用是或不是来回答(我在什么时候打网球了?).选择每个封闭式问题,尽可能深入了解我的行为(当我打网球时)。问题的排序被称为决策表,每个答案的值就是信息增益。在上面的案例中,两个问题足以预测我的行为,包括今天和未来。

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

此处提供的数据最初是由 Written、Frank 和 Hall 作为练习提供的。使用具有分类属性(热、温和、凉爽;等等。).决策列表从识别变量(outlook)开始,当已知变量时,将产生最大数量的正确答案。下一步是确定变量,因为 outlook 的值将提供最大的信息增益(湿度)。有了第二个问题(变量),我们有了答案——是的,那天下午我在打网球,因为天气晴朗而潮湿。

改善管理决策是商业分析研究所的核心和灵魂。在我们位于巴约纳的暑期学校,以及我们在欧洲的大师班,我们让数据科学为您和您的组织服务。该研究所专注于管理者数据科学的五个应用:在数字时代工作、数据驱动的决策、机器学习、社区管理和可视通信。数据驱动的决策会对你未来的工作和职业生涯产生影响。提高做出正确决策的能力只需点击一下鼠标。

Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com 商业分析学院的负责人。 他的 LinkedIn 简介可以在www.linkedin.com/in/leeschlenker.你可以在https://twitter.com/DSign4Analytics关注我们

【我】撰写,即 Frank E .和 Hal,M. (2010),数据挖掘:实用的机器学习工具和技术,第三版,Elsevier

数独和尽力而为

原文:https://towardsdatascience.com/sudoku-and-doing-your-best-work-44b9f906e9f9?source=collection_archive---------2-----------------------

我们的很多生活,无论是工作生活还是个人生活,都是在做重复的、没有创造性的事情。这些任务中有许多是令人愉快的:它们包括像园艺或烘焙这样的爱好,我们出于难以表达的原因而喜欢这些爱好。但是,它们也包括我们不想做的事情,比如洗衣服或洗碗。

虽然我们不能简单地给机器人编程来完成上面列出的任务,但有很多重复性的任务,尤其是那些不涉及操纵物理对象的任务,我们可以做到。比如像 Wolfram Alpha 这样的科学软件包可以自动求解大部分微分方程,这样人类就不用再手动求解了。

鉴于这些软件包的存在,如果一个数学家根据他用手快速求解微分方程的能力来衡量自己的素质,我们会觉得很奇怪,因为计算机求解微分方程的速度要快得多。只有当他把时间花在数学系,而不是冒险去学习计算机科学时,这才有意义——他可能不知道微分方程可以用计算机求解,因此可能会把手动求解视为对时间的有效利用。

这正是人们解数独谜题时发生的事情。数独是一个基本上重复的任务,可以根据简单的规则用计算机程序解决。数独仍然是世界上最受欢迎的益智游戏之一,而且大多数玩数独的人并不认为这是一项可以用算法来描述的任务,这一事实很好地说明了将活动生产力相混淆是多么容易, 它应该让我们所有人清醒过来,审视我们工作的哪些方面只是让自己习惯于遵循一套明确规定的规则,并不断提高效率——换句话说,就是做相当于“擅长解决数独”的事情——而我们应该学习如何做相当于让计算机处理这项工作的事情。

为什么我一直在想这个

在过去的几个月里,我一直在完成设计非常好的 Udacity 人工智能纳米学位的项目,该项目通过让你将经典的人工智能技术应用于实际问题并通过自己编码来学习算法,来教授这些技术。

第一个问题是写一个解决数独难题的算法。鉴于这种纳米程度的“经典人工智能”倾向,解决方案是而不是简单地建立一个神经网络,它看到一堆正面和负面的例子,并通过调整其权重来迭代学习如何解决难题,和/或使用强化学习算法,该算法惩罚将数字放在违反规则的地方的代理,并在它正确解决难题时奖励它。不,数独很简单,我们可以“教”计算机如何玩数独,通过明确地告诉它在棋盘上看到的数字该做什么。这是一个有趣的练习——我发现弄清楚你将如何告诉计算机解决数独比自己解决它们更有价值。

下面是解决方案的概要。我会注意到,这个解决方案和 Udacity 解决方案紧跟彼得·诺维格的经典文章解决每一个数独难题

如何解决每一个数独

首先定义一个数据结构来跟踪棋盘上已经有的数字。这个数据结构还应该跟踪空单元格的所有“候选”数字——也就是说,那些单元格中可能包含的数字。

然后,反复遵循几个步骤来解决这个难题,直到它被解决:

  • 第一步:“淘汰”。使用数独规则从空单元格中排除候选数字。例如,如果某一行中有一个 9,则使用此规则从该行的其他单元格中排除 9 作为候选单元格。
  • 一旦我们在一个单元格中只剩下一个数字,继续“消除”策略,从棋盘上的其他单元格中消除该数字。据我所知,这在经典人工智能中被称为“约束传播”。
  • 如果有必要,使用高级技术来“消除”数字,例如下面描述的“裸体双胞胎”技术:

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

An illustration of the Naked Twins strategy. Credit Ronald Eddings

理论上,人类可以做到这一切。然而,如果他们遇到了障碍——没有更多的数字可以很容易地从细胞中消除。然后呢?

计算机可以很容易地解决这个问题——不仅仅是通过尝试所有可能的板组合,直到找到一个有效的组合。他们可以简单地做以下事情:假设有两个单元格,单元格 1 和单元格 2,给定所有关于棋盘的信息,我们知道单元格 1 包含 5,单元格 2 包含 6,反之亦然。但是,我们没有信息告诉我们哪个是哪个。在这里,一个人被卡住了,但计算机可以简单地尝试第一种可能性,在单元格 1 中放一个 5,在单元格 2 中放一个 6,然后尝试继续遍历整个棋盘,直到谜题被解决,或者直到它找到一个没有可能值的单元格——如果发生这种情况,它知道它在“岔路口”的最初选择是错误的,6 应该在单元格 1 中,5 应该在单元格 2 中。这可以使用一种称为“深度优先搜索”的经典算法来实现。

事实上,项目的最后一步是让我们的程序解决一个数独游戏,这个游戏既需要搜索来解决,也需要额外的约束,即除了行、列和九个“子块”之外,数字 1-9 不能在每个主对角线上重复*😗

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

A diagonal Sudoku that would be extremely difficult for a human to solve. Go ahead, try it.

(理论上,人类也可以做到这一点,但这需要大量的擦除工作,而且擦除工作很麻烦。)

所以,数独完全可以用一种算法来描述——(我的 GitHub 中解决谜题的代码包含在这里的)。那么,人们真的会做这些事情,这真是太不可思议了!毕竟,人们通过各种方式跟踪信息,并采用与上述类似的策略(通常不太复杂)来解决这些问题。

简单地说:许多被认为类似数独的“益智”游戏本质上是算法,但不是全部。例如,单词搜索谜题是算法上的:你可以很容易地给计算机编程,在一个字母网格中搜索一组特定的单词。相比之下,填字游戏是有创造性的,不仅需要了解自然语言的微妙之处,还需要了解填字游戏所处的社会和文化背景。

尽你所能

我曾经写过关于许多白领工作——甚至是“感觉富有成效”的工作——本质上是组织性的。有些工作,比如写更新状态的邮件,是非重复性的,特别是在大型组织中,是有用的,并且需要技巧。但其中的大部分,就像咨询或金融领域许多基于电子表格的分析一样,只是重复。

此外,大部分白领工作将最终被取代——这并不是说这些工作将完全消失,但是将会有一些工具建立起来,例如,以更少的人工方式在 Excel 中进行大量的人工分析,这样我们将需要更少的人来完成同样多的工作。这对整个社会来说当然是一件好事——但从目前正在努力在这些工作中脱颖而出的人们的角度来看,这是一件令人不快的事情。我认为问题的根源是,从事这些工作的大多数人并不认为他们所做的事情是从根本上的算法——他们相当于一遍又一遍地做数独,而有人可能会出现并简单地为你编写一个数独程序。

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

The problem.

所以,我认为人们把数独之类的东西视为令人愉快的活动,这实际上是个问题。将精神刺激与实际上需要批判性思维、创造力和反思的事情混为一谈,不仅会混淆忙碌和生产力,导致糟糕的时间管理,还会导致糟糕的职业选择,让你寻找“感觉”自己“做了很多工作”的工作,而不是专注于寻找“增加了很多价值”的工作。

这里最直接的教训是:如果你在做这种重复性的工作:走出去(如果你想进入数据科学,参加梅蒂斯的沉浸式项目可能是一个很好的方式)——“机器人”——或者至少知道如何教它们(即编程)的人——正在找你。然而,第一步是要认识到,做相当于“一遍又一遍地做数独”的事情,虽然可能会让你很忙,但实际上并没有什么成效。

更一般地说:不要停止玩数独。总是寻找方法来自动化工作和生活中重复的、有组织的任务。做到这一点,利用你节省下来的时间来培养你的创造性、创新性和更人性化的一面——这是你最终需要做的最有价值和最有回报的工作。

对斯里兰卡政府停车场系统的建议…

原文:https://towardsdatascience.com/suggestion-for-sri-lankan-government-car-parking-system-5c3219b6312?source=collection_archive---------21-----------------------

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

在斯里兰卡的城市中,由于车辆数量和车辆尺寸的持续增长,停车是一个更加棘手的问题。停车不仅是斯里兰卡的一个大问题,也是世界各地的一个大问题。我们知道,每天有一辆 百万辆 烧机油。因此,我想在这篇文章中给斯里兰卡 政府 一个建议。这是我在 Medium 的第 11 篇文章。

如今,斯里兰卡城市的停车场有摄像头,他们可以观察车辆数量并计算时间。相机消耗更多的电能,因此我建议用传感器来解决这个问题。在这里我们将看到如何实现这个问题。

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

这里我想用 蓝牙信标 。蓝牙信标会发射 5 年的蓝牙电波。蓝牙信标是低能耗设备。我们想造一个装置来接收蓝牙电波。该设备将计算蓝牙连接的时间和离信标的距离。在停车场,我们希望为每个信标设置不同的频率,因为我们应该知道汽车的确切位置。为了防止信号干扰,蓝牙信标的蓝牙波将在特定区域受到控制。通过计算至少三个蓝牙信标的距离,可以找到汽车的位置,这就是为什么我们应该使用不同频率的蓝牙信标。通过画三个半径与计算的距离相对应的圆,并使用圆的公共交点(三角测量),我们建立的设备将找到汽车的位置。下图描述了 三角测量

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

当汽车要停车时,我们制造的接收蓝牙电波的装置应该与汽车连接。有些停车系统有不同的设施,例如有些停车场有电梯。如果你使用这些设施,而不是传统的,你应该支付额外的停车费。有人不会支付额外的费用,他们只支付停车费。通过三角测量法,没有人能逃避支付额外的设施使用费。停车的人通过 NFC (近场通信)支付。

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

这里有一个问题,那就是每辆车都应该安装接收蓝牙电波的设备,但是斯里兰卡政府可以安装这个系统。这种更 消耗能源 的问题不仅在斯而且在很多国家都存在。所以那些政府可以像这样改变系统。

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

感谢您阅读至此。如果你喜欢这篇文章,请分享、评论并发表👏几次(最多 50 次)。。。也许会对某个人有帮助。

关注我的Twitter和 Medium 如果你将来对这些更深入、更翔实的文章感兴趣的话!

用 SQL 汇总数据

原文:https://towardsdatascience.com/summarising-data-with-sql-3d7d9dea0016?source=collection_archive---------18-----------------------

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

SQL 不仅可用于将数据从数据库传输到建模环境。了解有关如何现场分析您的数据以确定最有用的信息的更多信息

在我们之前从真正的数据科学角度对 SQL 进行分析的中,我们探讨了如何使用 SQL 来了解数据集在缺失方面的质量,以了解哪些表和字段值得迁移到建模首选环境中。在这一期中,我们将看到一个经典的工具,用于理解不同变量的基本性质,以及如何在 SQL 中获得这些变量。

约翰·图基重新激活了探索性数据分析的实践,并通过他的同名著作大量推广了这个短语本身。Tukey 提出的最简单也是最有用的工具之一是五个数摘要。考虑到它的有用性,R 使用一个简单的命令就可以从任何数据集——five num()——中获得这个摘要,这个数据集在 base R 中。

这非常简单地由变量的最小值、最大值、中间值、第一个四分位数和第三个四分位数组成。假设最大值和最小值一直是标准的集合,并且不需要使用复杂的统计分布或矩阵代数来准备任何值,那么可以认为这种汇总应该很容易从任何 SQL 实现中获得。

然而,就在 21 世纪初,这实际上还是一个相当繁琐的问题。值得庆幸的是,尽管许多东西,比如流行音乐,从那以后已经明显恶化了(在克林顿执政期间,我达到了有资格开车的年龄,这与流行音乐对我来说听起来最好的时期密切相关),但从那以后,标准 SQL 和最大的实现都引入了有用的新特性。

ANSI SQL 2003 版中添加的窗口函数提供了一系列有用的选项。其中,PERCENTILE_CONT 和 PERCENTILE_DISC 使得获得完整的五个数摘要集比以前简单得多。

这些函数的基本语法是:

PERCENTILE_DISC(int) WITHIN GROUP (ORDER BY numeric)
OVER (PARTITION BY variable)

当目的是将数据集划分为由数据集中的分类变量定义的子集时,这些函数通常是供某些人使用的。五个数摘要的概念中隐含的意思是,至少在第一遍中,我们希望对整个数据集运行它。为此,我们只需将 OVER 子句留空,例如,“OVER (PARTITION BY variable)”就变成了“OVER()”。

因此,获取任何单个数值变量的第一个四分位数、中值和第三个四分位数的完整查询如下所示:

SELECT DISTINCT
  PERCENTILE_DISC(25) WITHIN GROUP (ORDER BY numeric)
  OVER () as Q1_Var
, PERCENTILE_DISC(50) WITHIN GROUP (ORDER BY numeric)
  OVER () as median_var
, PERCENTILE_DISC(75) WITHIN GROUP (ORDER BY numeric)
  OVER () as Q3_var
FROM db.tbl

该查询显然返回三个值—最大值和最小值,缺少五个数字汇总中最基本的一个。但是,由于百分比值不是聚合函数,如果我们简单地将 min(var)和/或 max(var)添加到 Select 语句中,SQL 将抛出语法错误。

相反,我们需要使用一个公共表表达式创建第二个表,该表可以包含标量形式的聚合值,并将这两个表连接在一起。假设我们将单行连接在一起,我们可以做一个完整的笛卡尔连接,并且只期望返回一行。

WITH extreme_table (var_min,var_max)AS (SELECT
    min(var)
  , max(var)
  FROM table) SELECT DISTINCT
  var_min
, PERCENTILE_DISC(25) WITHIN GROUP (ORDER BY numeric)
  OVER () as Q1_Var
, PERCENTILE_DISC(50) WITHIN GROUP (ORDER BY numeric)
  OVER () as median_var
, PERCENTILE_DISC(75) WITHIN GROUP (ORDER BY numeric)
  OVER () as Q3_var
, var_maxFROM db.table JOIN extreme_table on 1=1

该查询返回单行的五个值,表示五个数字的汇总。但是,我们在上面提到过,SQL 百分位函数更频繁地与分区变量一起使用,以应用于包含特定分类变量的子集的数据集,对于通常与 Group By 变量一起使用的更多运行的 mill 聚合函数 min()和 max()也是如此。

直觉上,许多分析师也想将五个数字的汇总应用于不同的数据子集。扩展上面的查询,通过在 extreme_table 的 Group By 子句和 select 子句中添加分类变量,并在 category 上连接之前添加 PARTITION 子句,可以直接实现这一点。结果将如下。

WITH extreme_table (var_min,var_max,category)AS(SELECT
    min(var)
  , max(var)
  , category FROM table
  GROUP BY category)SELECT DISTINCT
  var_min
, PERCENTILE_DISC(25) WITHIN GROUP (ORDER BY numeric)
  OVER (PARTITION BY category) as Q1_Var
, PERCENTILE_DISC(50) WITHIN GROUP (ORDER BY numeric)
  OVER (PARTITION BY category) as median_var
, PERCENTILE_DISC(75) WITHIN GROUP (ORDER BY numeric)
  OVER (PARTITION BY category) as Q3_var
, var_max
, table.categoryFROM db.table JOIN extreme_table on extreme_table.category=table.category

从五个数字汇总中获得的通常分析是一种偏斜感——通过查看中位数在第一和第三四分位数中的位置,以及最小值和最大值与这些四分位数的关系。显然,在数据的分类子集上获得相同的数据是非常有用的,因为它不仅允许您比较数据的位置(中位数),还允许您比较每个类别的分布形状,以了解每个类别如何集中其基础数据。

罗伯特·德格拉夫是《进展中的书’【懒惰的数据科学家】 的作者,可通过 LeanPub 在推特上关注他:https://twitter.com/RobertdeGraaf2

总结灾难中的推文

原文:https://towardsdatascience.com/summarizing-tweets-in-a-disaster-e6b355a41732?source=collection_archive---------6-----------------------

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

Map of the Nepal’s second earthquake’s intensity, credit: https://www.washingtonpost.com/graphics/world/nepal-earthquake/

2015 年 4 月 25 日,就在中午之前,尼泊尔经历了一场矩震级 7.8 的地震。地震席卷了加德满都山谷,一系列余震夷平了整个村庄。

地震发生后,来自世界各地的志愿者在指导紧急行动中发挥了重要作用,他们使用卫星图像来确定整个地区基础设施的破坏情况。

然而,尼泊尔地面上的人们也在 twitter 上产生了大量可能对救援行动有用的信息,尽管不那么直接。从 4 月 25 日到 5 月 28 日,有 33610 条推特被尼泊尔人转发。这些推文充满了有用的信息,但 33,610 条推文对于救援行动来说太多了,难以梳理。

这是这个项目的动机:

我能从大量的推文中提取出有用的简短摘要吗?这些摘要可能对地面救援行动有用。

内容:

0.获取推文

  1. 使用内容词和 tf-idf 分数查找所有有用的推文
  2. 挑选最好的推文做一个简短的总结
  3. 结论

0.获取推文

链接至代码

我从“ Twitter 作为生命线:危机相关消息的 NLP 的人类注释 Twitter 语料库”获得我的推文;该项目从危机中提取了数千条推文,并将其分为 8 个不同的类别(例如,“流离失所者和疏散”,或“同情和情感支持”)。

然而,由于救援队无法标记推文,我只使用推文本身的数据集,而不是标签。

Twitter 的政策规定,只能保存推文 id,而不是推文本身——这样,如果用户删除了他们的推文,那么它们就不会存储在其他地方。因此,我不得不使用 twitter 的 API 从这个语料库中获取 tweet 内容。这需要我注册一个应用程序:

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

I am now an app developer!

然后我用 Twython 下载了这些推文,然后就上路了!

1.提取情景推文

链接到代码

很明显,并不是所有的推文对救援队都同样有用。举个例子,

@Gurmeetramrahim: #MSGHelpEarthquakeVictims Shocked!!!hearing earthquake in Nepal n some parts of India. I pray to GOD to save His child‰

不包含对救援队有用的信息,尤其是与以下信息相比:

MEA opens 24 hour Control Room for queries regarding the Nepal #Earthquake.
Numbers:
+91 11 2301 2113
+91 11 2301 4104
+91 11 2301 7905

有用的推文被归类为情景推文,可能包含状态更新,或即时有用的信息(如附近医院的号码)。

非情境推文包含(例如)情绪、观点或事件分析。这些并不能立即帮助救援工作。

在我开始总结推文之前,我需要把情景推文和非情景推文分开。我用两种方法做到了这一点:我首先手动分离推文的特征(1.1-内容词),这些特征有助于推文的有用性。然后,我使用了一个名为 tf-idf (1.2)的文档分析工具来寻找对这个特定事件和这组推文有意义的词。

1.1.实词

在他们 2015 年的论文中。al 确定了在灾难中提供重要信息的三类术语:数字名词主要动词。属于这些类别的词被称为实词。我发现这太笼统,无法区分推文,于是自己定义了两个类别:

  1. 数字(如伤亡人数、重要电话号码)
  2. 实体(如地点、日期、事件、组织等。)

SpaCy (一个自然语言处理库,自动从文本中分析提取信息)是一个非常有用的识别实词的工具;当 SpaCy 文本进行标记时,它会向标记添加许多附加信息,例如它是否是实体(如果是,它是什么类型的实体),它的词性是什么(即它是名词吗?一个动词?一个数字?),甚至是令牌的情绪。

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

SpaCy’s awesome entity recognizer

我使用 SpaCy 来标记推文。这意味着将推文分解成它们的组成部分(主要是单词,但也包括标点和数字),并将这些组成部分转化为**符号。**例如,

: Over 110 killed in earthquake: Nepal Home Ministry (PTI)

成为

[:, Over, 110, killed, in, earthquake, :, Nepal, Home, Ministry, (, PTI, )]

SpaCy 的强大之处在于这些令牌充满了附加信息;例如,我可以找出所有这些标记的词性:

[u'PUNCT', u'ADP', u'NUM', u'VERB', u'ADP', u'NOUN', u'PUNCT', u'PROPN', u'PROPN', u'PROPN', u'PUNCT', u'PROPN', u'PUNCT']

令牌的另一个非常有用的属性是它的实体类型;SpaCy 可以告诉我Kathmandu是一个城市,或者25 April是一个日期。如果实体类型(token.ent_type_)是:

  1. NORP:国籍、宗教或政治团体
  2. FACILITY:建筑、机场、高速公路、桥梁等。
  3. ORG:公司、机关、机构等。
  4. GPE:国家、城市、州。
  5. 非 GPE 地区,山脉,水体。
  6. EVENT:命名飓风、战役、战争、体育赛事等。
  7. 绝对或相对的日期或时期。
  8. TIME:小于一天的时间。

如果单词的词性(token.pos_)将它们标记为数字,或者如果它们是关键词列表中的一个(例如‘杀死’,‘受伤’,‘伤害’),我也会包含这些单词。

这种分类大体上允许我开始整理我的推文;情景推文包含的内容词较多,非情景推文包含的内容词较少。举个例子,

@timesofindia: #Earthquake | Helpline numbers of the Indian Embassy in Nepal:\r+9779581107021\r\r+9779851135141'

是一条非常有用的推文,正如所料,提取了许多内容词:

[the, Indian, Embassy, Nepal, 977, 9581107021, 977, 9851135141]

另一方面,

Pray for #Nepal where a powerful earthquake has struck. May the Almighty grant them ease to face this calamity with utmost s‰Û_

包含的情景信息很少,从中提取的唯一内容词是[Nepal]

1.2.tf-idf 分数

实词的一个缺点是它们不能捕捉到关于单词本身的任何信息。例如,对于这场灾难,单词Nepal将是一个强有力的指标,表明一条推文是否是情境性的,但它现在与任何其他内容单词的权重没有任何不同。

可以使用术语频率—逆文档频率 (tf-idf)得分来引入这种加权。

尽管 tf-idf 的名称很长,但其背后的逻辑却很简单:

在文档主体中出现频率相当高的单词可能更重要,但是如果它们出现得太频繁,那么它们就太笼统而没有帮助。

基本上,我想给“尼泊尔”这个词打高分(它应该在许多推文中出现一次),而不是“the”(它应该在许多推文中出现多次)。

数学上,某个单词 t 的 tf-idf 分数可以描述为

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

其中 c 是单词 t 在文档中出现的平均次数,N 是文档总数, n 是单词 t 出现的文档数。

Textacy ,一个建立在 SpaCy 之上的库,让我给推文中的单词分配 tf-idf 分数变得超级简单:

WORD:morning -- tf-idf SCORE:6.45446604904
WORD:bishnu -- tf-idf SCORE:8.06390396147
WORD:nagarkot -- tf-idf SCORE:12.2359876248
WORD:search -- tf-idf SCORE:6.35915586923
WORD:kathmandu -- tf-idf SCORE:5.27350744616

现在,如果我只选择有很多内容词的推文,或者甚至只选择有很多 tf-idf 分数高的内容词的推文,我仍然会有太多的推文供救援队实际使用。

我想做的是找到一个简短的推文摘要,但它也包含了尽可能多的 tf-idf 得分最高的词。

2.基于内容词的推文摘要

为了生成对救援队有用的东西,我需要生成一些简短的东西(因此可以快速阅读)。它还需要包含对救援队有用的信息——因此摘要需要充满具有高 tf-idf 分数的内容词。

我可以很容易地将它定义为一个带约束条件的方程:

**等式:**最大化我的摘要中内容词的总分。

约束 1: 摘要必须短于 150 字。

约束 2: 如果我选择一个内容词出现在我的摘要中,那么我必须选择一些包含该内容词的 tweet 出现在我的摘要中。

约束 3: 如果我选择某条推文放在我的摘要中,那么这条推文中的所有内容词都必须包含在内。

我需要在约束条件下解方程。我求解的变量(一个实词是否在摘要里)是**整数。**具体来说,选择是二进制的——如果包含该单词,选择 1;如果不包含,选择 0。

这种用整数变量来求解受一些约束的一些方程(最大化内容词的得分)的方法被称为整数线性规划 (ILP)。

使用 ILP,我可以从数学上定义我上面写的最大化

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

其中 x 和 y 是 1 和 0 的数组,取决于是否选择了 tweet i 和内容词 j ,Score( j )是内容词 j 的 tf-idf 分数。约束条件定义如下

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

See my jupyter notebook for more info on what these mean

使用 pymathproj 来优化这个 ILP 问题产生了以下总结:

1\. TV: 2 dead, 100 injured in Bangladesh from Nepal quake: DHAKA, Bangladesh (AP) ‰ÛÓ A TV r...
-------------
2\. : Earthquake helpline at the Indian Embassy in Kathmandu-+977 98511 07021, +977 98511 35141
-------------
3\. +91 11 2301 7905om no for Nepal #earthquake +91 11 2301 2113
-------------
4\. Tremors felt in West Bengal after 7.9 Magnitude Earthquake in Nepal 
-------------
5\. This mobile App may help these people to predict this powerfull M7.9 earthquake 
-------------
6\. 5.00 earthquake occured 31km NNW of Nagarkot, Nepal at 09:30 UTC! #earthquake #Nagarkot 
-------------
7\. Earthquake in bihar up punjab haryana delhi ncr and nepal 
-------------
8\. : Whole Himalayan region is becoming non stable. Two yrs back Uttrakhand, then Kashmir now Nepal n north east. Even Tibet is‰Û_
-------------
9\. WellingtonHere Nepal's Home Ministry Says at Least 71 People Killed in the Earthquake: Nepal'...  WellingtonHere
-------------
10\. 934s of major earthquake-s in Nepal:
-------------
11\. Historic Dharahara tower collapses in Kathmandu after quake | Latest News &amp; Updates at Daily...
-------------
12\. Powerful quake near Nepal capital causes widespread damage, avalanche near Everest base camp

将此与随机推文进行比较:

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

A comparison of the tweets selected by COWTS to a random selection from the database.

肯定有一些噪音,但并不坏!摘要尤其擅长提供位置信息,例如描述震中在哪里以及哪些区域受到地震影响。

3.结论

如果我再次做这个项目,我会使用一个 twitter 特有的 标记器。SpaCy 的 tokenizer 实际上在标记数据方面相当糟糕,因为所有的缩写和 twitter 专用术语。我还会对数据进行更多的清理,因为拼写错误和缩写也可能会损害记号赋予器的性能。

总的来说,用除了单词嵌入之外的方法来比较和量化文本数据是很棒的。此外,这种方法的速度让我相信它可以由救援队实施;特别是,如果使用更小的推文子集(例如,每日推文,而不是覆盖整个事件的推文),这将非常有用!

3.1 进一步阅读

这个项目涉及实施各种不同的文件;这里有一些很酷的论文,可以进一步探索灾难中的 twitter 摘要:

Twitter 作为生命线:危机相关消息的自然语言处理的人类注释 Twitter 语料库

自然语言处理拯救?在大规模突发事件中提取“情境感知”推文

总结危机场景中的情景推文(本帖实质上实现了本文)

更新—使用 NLTK 的 twitter 标记器

链接到代码

我用 NLTK 代替 spaCy 重复了这个练习。这允许我使用 NLTK 的 twitter 特定标记器对 tweets 进行标记,产生以下摘要(与 spaCy 输出相比):

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

NDRF: India’s Natural Disaster Response Force

因为内容词的定义不同,所以很难定量地比较这两个输出,但是值得注意的是 NLTK 的实体识别系统(我用的是斯坦福的 NER)明显比 spaCy 的慢。

我(试图)在第 2 部分中使用这些精选的 tweets 建立一个抽象的总结:

[## 总结灾难中的推文(第二部分)

现在是 2015 年 5 月,救援队正在努力重建 4 月地震(及其余震)后的尼泊尔。可以…

medium.com](https://medium.com/towards-data-science/summarizing-tweets-in-a-disaster-part-ii-67db021d378d)

总结灾难中的推文(第二部分)

原文:https://towardsdatascience.com/summarizing-tweets-in-a-disaster-part-ii-67db021d378d?source=collection_archive---------7-----------------------

现在是 2015 年 5 月,救援队正在努力重建 4 月地震(及其余震)后的尼泊尔。这些努力能得到 twitter 的帮助吗?

在之前的帖子中,我构建了一个推文摘要器,它收集了 4 月 25 日至 5 月 28 日之间的所有推文,并选择了对救援队最有用的推文摘要:

[## 总结灾难中的推文

在危机中使用数据科学帮助救援团队

medium.com](https://medium.com/towards-data-science/summarizing-tweets-in-a-disaster-e6b355a41732)

现在,我想更进一步:不仅仅是选择最好的推文,我能生成我自己的句子,有效地总结推文中所有有用的信息吗?

:本帖本质上是本文的一个实现;如果你对这个主题感兴趣,它绝对值得一读!

内容:

  1. 制作文字图表
    我已经使用内容文字推文摘要生成了最佳推文的摘要(在之前的帖子中)。我将使用这些推文,并考虑它们包含的所有可能的单词路径(使用单词图)。
  2. 调查信息含量和语言质量
    然后,我将通过定义一些新的指标来选择最佳的单词路径:信息含量和语言质量。
  3. 生成抽象摘要 最后,我将使用这些最佳单词路径来生成推文的抽象摘要。

我做了两次这个练习,使用了 spaCyNLTK 作为标记器(并使用了它们各自从内容词 tweet 摘要中选择的 tweet)。

链接到空间NLTK 的笔记本。

1.制作单词图表

为了生成我自己的句子,我将选择最好的推文,并考虑其中包含的所有可能的单词路径。

这到底是什么意思?

为了理解什么是单词路径,我首先要考虑一个单词图。单词图是句子的图形表示,节点表示单词,边表示单词之间的连接。例如,句子“7.9 级地震后加德满都历史性的 dharara 塔倒塌”可以用下面的单词 graph 来表示:

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

当添加多个句子时,单词图变得强大。比如,我加了一句话:“建于 1832 年的达卡纳尔塔在加德满都地震中倒塌”:

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

Credit to Rudra et al for this figure. Bigrams rather than words are used at the nodes, but the principle is otherwise the same.

现在,我可以通过这个图表找到与原始输入句子不同的单词路径,例如“1832 年建造的 dharara 塔在加德满都 7.9 级地震后倒塌”。我已经能够从两个输入的句子中提取一些信息,来制作我自己的。

抽象摘要的目标本质上是这样做的:生成我自己的单词路径,以便从 tweets 中分离出最好的信息。

以我自己的推文为例,我可以使用二元模型从它们生成一个单词图,然后我可以用它来生成所有可能的价值路径。许多单词路径会产生无意义的句子,例如

[Nepal quake - Buildings collapse in Delhi for queries regarding tragic Earthquake Rocks Nepal victims']

所以我希望得到有用的字路径,这也有意义

2。信息量和语言质量

为了获得有用的有意义的单词路径,我将测量两个指标:信息量和语言质量。

2.1.信息量

信息含量实际上意味着这条推文在我拥有的推文语料库中的代表性。幸运的是,有一种简单的方法可以量化这一点。当我为上一篇文章的摘要选择推文时,我生成了一个叫做 tf-idf 术语矩阵的东西。这是一个矩阵,包含了所有推文的所有词汇:

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

每一列代表一个单词。如果row [i]中的一条 tweet 包含由column [j]表示的单词,那么矩阵元素[i][j]将包含该单词的 tf-idf 得分。否则,它将包含一个 0。

因此,我可以通过计算每一列的平均值来生成一个向量,该向量近似表示推文的主体:

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

An array of height 1 with a length equal to the total vocabulary size of all the tweets, populated by the column mean of each value for all the tweets.

我可以为每个单词路径生成一个类似的行,并比较这个平均向量和单词路径向量之间的差异。我这样做是为了找到它们的余弦相似度,它测量两个向量之间的余弦角(越小越相似)。

2.2.语言质量

因为许多单词路径是无意义的,所以选择有意义的语法正确的句子很重要。我该怎么做?

一种方法是看看我选择的单词路径中的单词序列出现在“正确英语”中的可能性有多大。我可以通过分析“正确英语”的文本,并测量不同单词序列出现的频率来做到这一点。然后,我可以将它与我的单词路径进行比较;如果一个单词路径充满了频繁出现的单词序列,那么它在语言学上更有可能是正确的,所以我会给它更高的分数。

长度为 n 的单词序列被称为 n-gram,因此这种语言质量的方法被称为 n-gram 语言模型。

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

The probability being found by a trigram

三元模型(n = 3 时的 n 元模型)计算上面的等式:考虑到在它之前出现的两个单词,单词路径中的下一个单词是它所在的单词的概率是多少,其中该概率与英语语料库进行比较。

幸运的是,有一个名为 kenlm 的工具包,它就是为做这件事而设计的(这里的是一个很棒的帖子,它详细介绍了如何从 n 元语法中提取语言质量)。

使用 kenlm,我使用了当代美国英语语料库(COCA) 作为我的“正确英语”参考,并对单词路径的语言质量进行了评分。

3.生成抽象的摘要

就像在第 1 部分中一样,我使用这些组件生成一个整数线性问题,这个问题是可以解决的。考虑到所有的单词路径,我想选择具有最高信息量分数和最高语言质量的单词路径,这些路径也包含最多的内容单词。

数学上,我可以这样写

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

其中,LQ 是语言质量,I 是第 i 单词路径的信息含量,服从以下约束:

  1. 我的总结必须少于 150 字
  2. 如果选择了内容词,还必须选择包含该内容词的词路径
  3. 如果选择了单词路径,则必须选择该单词路径中的所有内容单词。

我也可以用数学来描述它

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

For more information on exactly how I programmed these, check out the NLTK and spaCy Jupyter notebooks.

然后我使用 pymathprog ,和整数规划模块,来求解这些方程(通过最大化第一个方程,服从第二个三个方程的约束)。

这为空间产生了以下结果:

**spaCY:**
--------------
 valanche sweeps everest base camp , 34 minute of major earthquake 
--------------
: mea control room no for nepal 25/04/2015 07:13 utc , april 25,nepalquake kathmanduquake
--------------
 high alert after 7.9 magnitude earthquake perso _thquake 
--------------
earthquake m7.5 strike 89 km nw of 4.5 + 91 11 2301 7905
--------------
thr r safe . apr 25 14:14 at 7.7 richter scale , via
--------------
sad day for the last 1 hour(s ) .   associatedpress associated press news
--------------
: whole himalayan region be up and lalitpur make kathmandu 's 19th century nine - witness
--------------
: 09771 4261945/ 4261790 emergency helpline number in 80 year - typical indian
--------------
 9779851135141 square   afganistan bhutan emb 
--------------
building collapse , 400 people kill in kathmandu-+977 98511 07021 , 9851135141
--------------
 nepal n north east . kathmandu contact mr. adhikari 00977 - cnn

对于 NLTK:

--------------
: LATEST Nepal's Kantipur TV shows at Ahmedabad from Kathmandu RestlessEarth GeographyNow
--------------
MEA opens 24hr Control Room in Nepal 20 00 29 UTC quake
--------------
: EarthquakeInNepal Helpline Numbers of Lamjung , Purvanchal & Kochi too !
--------------
: Warning India Bangladesh Pakistan Afganistan Bhutan Nepal Earthquake Rocks Nepal BBC
--------------
Dharahara also called Bhimsen Tower , 2 at 09:30 UTC , 9851135141
--------------
( Houston _0998 ) Avalanche Sweeps Everest in Nepal - New York Times
--------------
Kathmandu's Darbar Square after 7.9 magnitude in Tibet Nepalquake Embedded image permalink
--------------
5.00 earthquake Kathmandu Ambulance and 11 2301 2113 011 2301 4104 011 2301 7905
--------------
Update on 4/25 / 2015 06:37 UTC , Katmandu - Fox News
--------------
: 09771 4261945 / 15 @ 9:30 : Nepal AssociatedPress Associated Press news
--------------
Bravo Google You are faster than 300 people within 100km . 9 - France 24
--------------
: Patan Durbar Square after 7.7 quake : 079-2325190 0/902 / 9779851135 141

这些都不太好,比起抽象的摘要,tweet 摘要绝对是捕捉最好的有用 tweet 的更好的方法。有些单词路径确实有意义,但绝大多数没有意义。

4.结论

这是对自然语言处理的一次有趣的入侵。特别是,看到数据科学如何应用于机器学习和神经网络之外,并使用另一种优化方法( ILP )真是太棒了。

探索不同的 NLP 技术也很棒,比如单词图和 n-gram。

我怀疑这种方法失败的原因是因为选择的推文太不一样了;word graph 擅长获取相似的 tweets,然后找到一个单词路径,只从中提取有用的信息。自从我考茨选择的推文开始,推文就已经是摘要了。

如果我再试一次,我会使用更广泛的推文,尝试并利用这一点。

2017 年与开放和可重复研究相关的活动总结

原文:https://towardsdatascience.com/summary-of-2017-activities-related-to-open-and-reproducible-research-e2033946207b?source=collection_archive---------12-----------------------

去年对于 cTuning foundationdivideti来说是非常紧张的一年——我们继续与 AI、ML 和系统社区密切合作,以自动化实验,同时基于我们的长期愿景提高结果的可重复性和可重用性。

首先,在 ACMCGO 2018PPoPP 2018年会上,我们有机会应用新的 ACM 工件审查和标记政策(该政策是我们一年前作为新的 ACM 再现性工作组的一部分,基于我们之前的工件评估经验而共同制定的)。好消息是,我们又有了一个创纪录的提交数量:近一半被接受的论文提交了工件进行验证,总数达到 30 个!我们还从 EasyChair 切换到 HotCRP 用于工件提交和评估,因为最后一个在评估期间提供了作者和评审者之间更方便和匿名的通信机制,以持续解决问题!这也促使我们在未来的会议上取消工件评估期间的“技术澄清”会议,因为我们的评审员已经在评估期间与作者进行了沟通!

我们还注意到,我们几年前准备的试图统一 CGO、PPoPP 和 PACT AE 的工件附录模板现在被用于其他会议,包括超级计算(参见这篇SC’17 论文中的工件描述,它将用于 SC’18 的集群竞赛)!作为 ACM 试点项目的一部分,我们计划与集群同事合作,以自动化工件评估并引入工作流框架来将这些工件转换为我们的集体知识格式(参见 SC’16 论文CGO’17 文章,工件和工作流以 CK 格式共享)。

最后,我们从过去的 CGO/PPoPP’17 中获得了社区对我们的开放工件评估的非常积极的反馈,我们考虑在未来更多地使用它(参见我们的动机):

与此同时,我们注意到“可用工件”和“可重用工件”徽章的新策略有几个模糊之处。

在与我们的 ACM 同事协商后,我们更新了http://cTuning.org/ae/reviewing.html的“可用工件”徽章的审核标准:

与本文相关的作者创作的工件只有被放置在公共可访问的档案库中,如芝诺多菲格舍得律阿德斯,才能获得 ACM“可用工件”徽章。DOI 将被分配给他们的工件,并且必须在工件附录中提供!作者也可以通过 ACM DL 共享他们的工件——在这种情况下,他们应该联系 AE 主席以获得 DOI(不像上面的库,还没有自动化)。

“工件可重用”徽章的标准变得更加模糊,特别是对于系统研究,在系统研究中,实验工作流经常涉及非常复杂和不断变化的算法/软件/硬件堆栈。许多作者认为,让他们的工件公开一个 ReadME,几个特别的脚本来构建和运行实验,以及一个 Docker 映像就足以获得“工件可重用”的徽章。

每年,我们都看到我们的评估人员承受着各种各样的负担和痛苦,他们要弄清楚如何处理大量临时的、不可移植的、经常失败的脚本、不统一的数据格式和临时验证。这就是为什么我们认为必须使用某种通用的工作流框架,结合跨平台的包管理器和通用的 API,以使工件易于重用、可移植和可定制(参见集体知识spackeasybuild 等)。).这样的自动化和统一有助于使工件评估在更长的时间内是可持续的,特别是当提交更多工件的时候。

然而,由于我们不想强加我们的观点,并且还没有设法得出令人满意的结论,我们在 CGO/PPoPP’18 的开放工件评估讨论会上开始讨论这些问题。我们还在 CNRS 2017 年的演讲“支持开放和可复制的计算机系统研究:好的、坏的和丑陋的”中描述了其中一些问题和可能的解决方案。

与此同时,我们继续与 ACMRaspberry Pi foundationthe community 合作,使用我们的开源集体知识平台改善自动化和实验众包,并通过公共 Python API 和 JSON 元信息将工件和工作流作为可移植、可定制和可重用的组件进行共享。

您可以在我们最近基于 CK 的交互式可复制文章“多目标自动调整和机器学习技术协作研究的集体知识工作流中看到这种“即插即用”工件和工作流的实际例子。它展示了我们的长期教育计划,教导学生如何以协作和可复制的方式,为自我优化的计算机系统进行软件和硬件堆栈的基准测试和共同设计。它通过 GitHubFigShare 将所有工作流、工件和结果共享为可移植、可定制和可重用的 CK 组件,让社区验证、重用、改进和构建它们,同时通过我们的公共 CK 库进行众包实验。此外,我们希望研究人员在反馈指导的编译和自动调优过程中,快速重用和比较特定平台和编译器上常见基准和数据集的共享性能结果,而不是花费大量精力重新构建和重新运行此类实验!

我们也非常高兴能与一流大学联盟(康乃尔、华府、多伦多、EPFL、剑桥)和强大的顾问委员会(http://cKnowledge.org/request)在集体知识平台的基础上组织第一届 ACM 请求锦标赛。这一新颖的竞赛系列专注于在速度、准确性、功耗和成本方面,针对 AI、ML、深度学习和其他新兴工作负载,对整个应用/软件/硬件堆栈进行可重复和 Pareto 高效的共同设计和优化。更重要的是,越来越多的参与者将继续改进通用的和基于 CK 的优化工作流,并共享在从物联网到 HPC 的不同模型、数据集和平台上优化的可移植和可定制的 AI/ML 模块。基准测试结果和获胜的软件/硬件/型号配置将在公共交互式仪表板上显示,并根据特定类别(例如嵌入式与服务器)进行分组。得益于通用的 CK 框架,它们还可以被复制、重用、改进和比较。我们的最终目标是将所有获奖算法和相关工件作为“即插即用”CK 组件与通用 API 共享,让社区立即验证、定制、重用和构建它们,从而消除技术转移差距,实现开放系统/人工智能/人工智能研究!

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

Collective Knowledge approach to enable efficient and intelligent computer systems

ReQuEST 的第一版将主要作为我们的方法、框架和知识库的测试平台,因此我们决定将提交内容仅限于图像分类的深度学习算法。它将与 ASP los ’ 18-ACM 编程语言和操作系统的体系结构支持会议同期举行,这是一个跨计算机体系结构和硬件、编程语言和编译器、操作系统和网络的多学科系统研究的主要论坛。帕累托效率或原始提交的作者将被邀请在相关的 ACM 研讨会上介绍他们的发现。在锦标赛结束时,我们将向我们的顾问委员会提供一份报告,介绍锦标赛的结果、问题、可能的解决方案和后续步骤。

您可以在以下文档中找到有关请求长期愿景的更多详细信息:

我们期待在 2018 年与大家合作,实现研究和实验的自动化,提高已发布结果的可重复性,为人工智能和其他新兴工作负载开发高效的系统,加速人工智能/人工智能/系统研究,在人工智能方面取得突破,并使智能系统无处不在!

杂项资源(2017 年)

事件

主动权

仓库

工具

文章

点击查看所有相关资源

Google Deepmind 对 PixelRNN 的总结

原文:https://towardsdatascience.com/summary-of-pixelrnn-by-google-deepmind-7-min-read-938d9871d6d9?source=collection_archive---------4-----------------------

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

Figure 1: Completion of masked image

简介:

自然图像的分布建模是无监督学习中的一个核心问题,它在图像去模糊、图像压缩、文本到图像的转换等方面都有应用。图 1 显示了如何使用 pixelRNN 模型来完成图像。

变分自动编码器、GANs 和自回归模型是三种可用的图像生成方法。这篇文章关注自回归,特别是 pixelRNN。

为什么是 RNN?

在图像中,通常一个像素依赖于所有先前预测的像素,这导致像素之间产生长程相关性。因为 RNNs 已被证明在具有长范围相关性的时间序列预测中是有效的。因此,RNN 用于生成图像中的像素。

在本文中,像素生成的顺序是由作者确定的——从上到下和从左到右(图 2)。(注意:可以有许多可以预测像素的序列,但是需要预先选择其中的一个。)

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

Equation 1: Probability of predicting an image

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

Figure 2

在等式 1 中,p( x )表示预测图像的概率( x ),其等于给定所有先前预测的像素的条件概率 x i 的乘积。

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

Equation 2

等式 2 表示在给定先前生成的像素的情况下预测像素 x i 的 R、G、B 值的概率。在像素 x i 的预测中,包括先前预测像素的 R、G、B 值。在 x i,G 的预测中,预测值 x i,R 也与先前生成的像素的 R,G,B 值一起被包括。

图像生成中的 LSTM 图层:

LSTM 层以前已经用于图像生成。他们逐个像素地训练图像。考虑到图像数据集中的像素数量,训练 LSTM 需要大量的时间。

隐藏状态(I,j)=隐藏状态(i-1,j),隐藏状态(I,j-1),p(i,j)

像素(I,j)的隐藏状态取决于像素(I,j-1)和像素(i-1,j)的隐藏状态。因此,除非计算出先前像素的隐藏状态,否则无法计算像素(I,j)的隐藏状态。因此,在计算隐藏状态时不可能有并行化,因此也不会节省训练时间。

作者引入了两种类型的 LSTM 层来克服上述问题:行 LSTM 和对角 LSTM

排 LSTM:

隐藏状态(I,j) =隐藏状态(i-1,j-1),隐藏状态(i-1,j+1),隐藏状态(i-1,j),p(i,j)

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

Figure 3: Computing hidden state of red pixel; blue pixels are part of the triangular context

如图 3 所示,一个像素的隐藏状态直接取决于它上面 3 个像素的隐藏状态。这 3 个像素又分别直接依赖于其他 3 个像素。因此,像素的隐藏状态具有三角形上下文(图 3)。这个三角形上下文可以被视为用于预测像素值的“历史”。

如图 3 所示,在红色像素之前预测的几个像素不包括在三角形上下文中。因此,用于计算红色像素值的“历史”不包括所有先前生成的像素。这可以被称为“上下文丢失”。像素的隐藏状态取决于它上面的 3 个像素,而不取决于它所在行中的任何像素。因此,可以并行计算同一行中所有像素的隐藏状态。

因此,行 LSTM 解决了如在 LSTM 中的高训练时间的问题,但是产生了用于计算像素的隐藏状态的不完整“上下文”的问题。

对角线 BLSTM:

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

Figure 4: Computing hidden state of red pixel; blue pixels are part of the context

对角 BLSTM 的引入是为了解决行 LSTM 中“上下文”不完整的问题。在对角线 BLSTM 中,像素(I,j)的隐藏状态取决于像素(I,j-1)和像素(i-1,j)。由于双向 LSTM 覆盖了前向和后向相关性,所有先前生成的像素都包括在用于预测像素值的“上下文”/“历史”中。

像素 CNN:

行和对角线 LSTM 层覆盖图像中的长程相关性。由于 LSTM 层的复杂性质,学习长程相关性需要计算成本。标准卷积层可以捕捉一个有界感受域,并同时计算所有像素位置的特征。保持图像的空间信息很重要;PixelCNN 中不使用池层。为了避免在像素预测中使用未来上下文(未来像素),在 PixelCNN 中使用了遮罩。

掩蔽卷积:

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

Figure 5: Value of pixel xi depend on values of previous pixels

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

Figure 6: Mask to zero out the future pixel values.

将所有不可用于模型的像素值清零。
像素 x i 只取决于像素 x *1…xI 1,*因此我们必须确保它不会访问后续像素:x i+1。。x n^2

作者在论文中使用了两种类型的掩码,即掩码 A 和掩码 b。

面具 B:

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

Figure 7: Mask B

如前所述,保留空间信息对于精确预测像素值非常重要,因此 PixelCNN 中不使用池层。因此,在网络中不会发生图像的上采样或下采样。因此,在整个网络中,图像必须具有 R、G、B 值,在本文中,掩码 B 用于此目的。

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

Figure 8: Convolution without using mask B

如图所示,如果在卷积期间不使用掩码 B,则输出特征图中的通道数与输入不同。

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

Figure 9: Convolution with using mask B

使用屏蔽 B(图 7),卷积的输出也将 R、G、B 通道作为输入。

盲点问题:

PixelCNN 减少了行 LSTM 和对角线 BLSTM 中所需的计算成本,但是存在盲点问题。盲点问题基本上不包括用于计算像素隐藏状态的上下文/历史中的所有先前像素。我们稍后将深入探讨盲点问题。

使用 PixelRNN 的图像完成:

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

SegNet 概述:一种用于图像分割的深度卷积编解码器架构

原文:https://towardsdatascience.com/summary-of-segnet-a-deep-convolutional-encoder-decoder-architecture-for-image-segmentation-75b2805d86f5?source=collection_archive---------1-----------------------

论文发表者:Vijay Badrinarayanan、Alex Kendall、Roberto Cipolla 在 CVPR 第 15 届年会上发表

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

Some videos I used to play around with SegNet

欲了解更多关于复制这一点的信息,请访问我的回购 这里

TLDR:

  • 使用一种新颖的技术来对编码器输出进行上采样,该技术涉及存储池层中使用的最大池索引。这提供了相当好的性能和空间效率
  • 仅具有前向连接和不可训练层的 VGG16 用作编码器。这导致参数非常少。

问题

  • 语义逐像素标记,即将图像的每个像素标记为属于图像中所示的某个类别(树、道路、天空等)。

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

Fig 1: Segmentation of a road scene imagess

一些应用包括自动驾驶、场景理解等。直接采用分类网络进行逐像素分割会产生较差的结果,这主要是因为最大池子采样会降低特征图分辨率,从而降低输出分辨率。即使外推至原始分辨率,也会产生有损图像。

SegNet —挑战

  • 在道路场景数据集上训练,因此,类表示宏观对象,因此期望分割是平滑的
  • 边界信息对于像道路标记和其他小物体这样的物体是至关重要的。(边界划定
  • 主要用例将是嵌入式系统,因此它必须计算高效

SegNet-架构

编码器-解码器对用于为不同分辨率的分类创建特征图。

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

Fig 2: Nut-shell architecture

编码器

  • 13 个 VGG16 Conv 层
  • 没有完全连接,这将参数从 134 米减少到 14.7 米
  • 良好的初始权重是可用的,因此这些层是不可训练的

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

Fig 3: Encoder architecture

每个编码器如图 3 所示。新颖性在于二次采样阶段,最大池用于实现图像中小空间位移的平移不变性,将其与二次采样相结合,导致每个像素管理一个更大的输入图像上下文(空间窗口)。这些方法实现了更好的分类精度,但是减小了特征图的大小,这导致了具有模糊边界的有损图像表示,这对于分割目的来说是不理想的。希望输出图像分辨率与输入图像相同,为了实现这一点,SegNet 在其解码器中进行上采样,为此它需要存储一些信息。在子采样之前,需要捕获并存储编码器特征图中的边界信息。为了有效地利用该空间,SegNet 只存储最大汇集索引,即每个汇集窗口中最大特征值的位置是为每个编码器映射存储的。2x2 的每个窗口只需要 2 位,精度略有损失,但是折衷

优势

  • 改进的边界划分
  • 参数数量较少

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

Fig 4: Upsamplig in SegNet

这种形式的上采样可以结合到任何编码器-解码器架构中

解码器

  • 对于 13 个编码器中的每一个,都有一个相应的解码器,该解码器使用存储的最大池索引对特征图进行上采样
  • 生成更高分辨率的稀疏特征地图
  • 稀疏地图通过可训练滤波器组生成密集特征地图
  • 最后一个解码器连接到对每个像素进行分类的 softmax 分类器

SegNet 论文将其技术与其他几种解码器进行了比较,如图 5 所示。

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

Fig 5: Several decoders compared

最初发布于say tosid . github . io

强化学习中的表格方法综述

原文:https://towardsdatascience.com/summary-of-tabular-methods-in-reinforcement-learning-39d653e904af?source=collection_archive---------7-----------------------

强化学习中不同列表方法的比较

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

更新:学习和练习强化学习的最好方式是去 http://rl-lab.com

介绍

表格方法指的是这样的问题,其中状态和动作空间足够小,以至于近似值函数可以表示为数组和表格。

问题是

强化学习的目的是找到以下方程的解,称为贝尔曼方程:

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

我们解贝尔曼方程的意思是找到使状态价值函数最大化的最优策略。

由于很难得到解析解,我们使用迭代方法来计算最优策略。最佳状态和动作值函数表示如下:

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

动态规划

动态规划是一种方法,其中通过将周围状态的值作为输入来计算状态下的每个值(不管这些值是否准确)。一旦计算了一个状态的值,我们就转移到另一个状态,并重复相同的过程(考虑在先前状态中计算的任何新值)。

这个过程重复足够多次,直到每个状态的变化小于我们定义的某个极限。

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

更多关于 DP 学习的内容可以在文章《强化学习中的动态编程,简易方法》中找到

赞成的意见

DP 是有效的,在大多数情况下,它能在多项式时间内找到最优策略。

DP 保证找到最优策略。

骗局

DP 不适合处理有数百万或更多状态的大问题。

DP 需要转移概率矩阵的知识,然而这对于许多问题来说是不现实的要求。

蒙特卡洛

在蒙特卡罗(MC)中,我们玩游戏的一集,在各种状态中逐一移动,直到结束,记录我们遇到的状态、动作和奖励,然后计算我们经过的每个状态的 V(s)和 Q(s)。我们通过播放更多的剧集来重复这个过程,在每一集之后,我们得到状态、动作和奖励,并且我们对发现的 V(s)和 Q(s)的值进行平均。

MC 预测算法包括播放尽可能多的剧集,并在每集之后计算我们已经经过的状态的值,然后将这些结果与这些状态的当前值进行平均。

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

保单首次就诊 MC 控制旨在找到最佳保单。它会播放剧集,但会跟踪每个状态下使用的每个动作。这样,就有可能知道什么动作产生了最佳 Q 值。
最后,将具有最大 Q 值的行动添加到最佳策略中。

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

蒙特卡罗的详细解释可以在文章《强化学习中的蒙特卡罗,简易方法》中找到

赞成的意见

MC 可以用来直接从与环境的交互中学习最优行为。它不需要环境动力学的模型。

MC 可用于模拟或样本模型。

MC 可用于聚焦于一个特别感兴趣的区域,并且被准确地评估,而不必评估状态集的其余部分。

骗局

MC 只适用于偶发(终止)环境。它不适用于没有终止状态的环境。

MC 必须有一个完整的情节,它没有引导,这意味着它没有给出其他状态的估计。

MC 必须等到一集结束才知道回归。对于长时间发作的问题,这将变得太慢。

时间差异

TD 可以看作是 DP 和 MC 方法的融合。它播放剧集但不必等到结尾才知道回报。它根据对其他状态的估计来计算当前状态的值。
TD(0)是指只向前看一步的事实,然后计算当前状态值。

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

为了找到最优策略,TD 提供了不同的方法,其中之一是 SARSA。
SARSA 包括对状态 S 采取行动 A,注意奖励和下一个状态 S’,然后从状态 S’中选择行动 A’,然后使用所有这些信息更新 Q(S,A),然后移动到 S’并执行之前选择的行动 A’。

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

Q-learning 是寻找最优策略的另一种方法。
像 SARSA 一样,它对状态 S 采取行动 A,注意奖励和下一个状态 S’,然后与 SARSA 不同,它选择状态 S’中的最大 Q 值,然后使用所有这些信息来更新 Q(S,A),然后移动到 S’并执行ε贪婪行动,这不一定导致采取在状态 S’中具有最大 Q 值的行动。

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

双 Q 学习是一种解决 Q 学习中特定问题的算法,特别是当 Q 学习可以基于一些积极的奖励被诱骗采取坏的行动,而这个行动的预期奖励肯定是负的。
它通过维护两个 Q 值列表来做到这一点,每个列表从另一个列表更新自身。简而言之,它在一个列表中找到最大化 Q 值的动作,但是它不是使用这个 Q 值,而是使用这个动作从另一个列表中获得 Q 值。

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

要了解更多关于 TD 学习的细节,请查看文章“ TD 在强化学习中,简单的方法”。

关于双 Q 学习的更多细节可以在“双 Q-学习简单方法”中找到

赞成的意见

TD 不需要像 DP 中那样知道转移概率矩阵。

TD 不需要等到剧集结束才知道回报,它增量更新状态值和动作值。

骗局

SARSA 可能会陷入局部最小值。

Q-Learning 在一些随机环境中表现不佳。

参考

算法取自萨顿和巴尔托。强化学习:导论。

知识图嵌入的翻译模型综述

原文:https://towardsdatascience.com/summary-of-translate-model-for-knowledge-graph-embedding-29042be64273?source=collection_archive---------3-----------------------

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

本文旨在对知识图嵌入/知识表示的翻译模型做一个简要的总结。可以从TensorFlow-TransX找到开源 tensor flow 代码。

知识表示的一些背景

通常,我们用一个三元组(头、关系、尾)来表示一个知识。在这里,头和尾是实体。比如,(天空树,地点,东京)。我们可以用独热向量来表示这些知识。但是实体和关系太多,维度太大。并且如果两个实体或关系是接近的,则单热点向量不能捕获相似性。受 Wrod2Vec 模型的启发,我们想用分布式表示来表示实体和关系。

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

下游任务中的应用

以防万一,如果你不熟悉知识图,我会介绍一些知识图可以做的应用。

链接预测

链路预测通常是指预测一个与另一个给定实体有特定关系的实体的任务,即预测给定(r,t)或给定(h, r)t,前者表示为(?,r,t),后者表示为(h,r,?)。例如,(?, DirectorOf,Psycho)是预测电影的导演,而(Venom, DirectorOf,?)相当于预测那个特定的人导演的电影。这本质上是一个知识图完成任务。

推荐系统

推荐系统向用户提供关于他们可能希望购买或检查的项目的建议。在不同的推荐策略中,协同过滤技术取得了显著的成功。然而,并不总是工作得很好,因为用户-项目交互可能非常稀疏。在这种情况下,结合用户-项目交互和用户或项目的辅助信息的混合推荐系统通常可以实现更好的性能。

知识图也被用来提高协同过滤的质量。具体来说,他们使用存储在 KG 中的三种类型的信息,包括结构知识(三重事实)、文本知识(例如,一本书或一部电影的文本摘要)和视觉知识(例如,一本书的封面或一部电影的海报图像),来导出项目的语义表示。为了对结构知识建模,应用典型的知识图嵌入技术,即 TransR,其学习每个项目的结构表示。对于其他两种类型的信息,堆叠去噪自动编码器和堆叠卷积自动编码器分别用于提取项目的文本表示和视觉表示。

知识图嵌入还有一些应用,比如实体解析、关系抽取、问题回答等。你可以从这篇论文中找到更多信息:知识图嵌入:方法和应用调查(2017)。

迷睡

标题:TranslatingEmbeddings 用于多关系数据建模(2013)

这是翻译模型系列的第一部作品。该模型的基本思想是使首向量和关系向量之和尽可能接近尾向量。这里我们用 L1 或 L2 范数来衡量他们有多接近。

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

损失函数是负抽样的最大利润。

L(y,y’) = max(0,margin -y + y ')

y是阳性样本的分数,y'是阴性样本的分数。最小化这个损失函数分数。两个分数之差和 margin 一样大就够了(我们设置这个值,通常是 1)。

因为我们用距离来表示分数,所以我们在等式上加一个减号,用于知识表示的损失函数是:

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

d 是:

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

这是 L1 或 L2 的标准。至于如何得到负样本就是用三元组中的随机实体替换头实体或尾实体。

参见代码:

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

使用embedding_lookup得到头部、关系、尾部的向量,并计算(头部、关系)和尾部之间的距离。

但是这个模型只能处理一对一的关系,不适合一对多/多对一的关系,比如有两个知识,(skytree, location, tokyo)(gundam, location, tokyo)。训练后,‘天空树’实体向量将与‘高达’实体向量非常接近。但是他们在现实中并没有这样的相似性。

转运

标题:在 H 超平面上转换嵌入知识图(2014)

TransH 的目标是处理一对多/多对一/多对多的关系,并且不增加模式复杂度和训练难度。

基本思想是将关系解释为超平面上的平移操作。每个关系有两个向量,超平面的范数向量 (Wr),以及超平面上的平移向量(dr)。

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

我们将每个头向量(h)和尾向量(t)投影到超平面,并得到新的向量(h⊥和 t⊥).在这个超平面中存在一个关系(d_r ),我们可以像 TransE 模型一样训练它。

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

分数函数:

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

如何计算超平面中的投影:

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

其中 w_r 的范数被限制为 1。

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

h⊥ 是 h 在超平面中的投影, wrT 是 h 在 wr 中的投影。这意味着我们将头尾向量分解成两部分。

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

损失函数和训练方法与 TransE 相同。

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

我们将头/尾向量分解成两部分,并且仅使用一部分(h⊥或 t⊥)来训练模型。这样可以避免模型训练时两个实体(头部或尾部)靠得太近,处理好一对多/多对一/多对多的关系。

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

代码与 TransE 模型几乎相同。唯一的区别是计算投影向量的步骤。在这一步之前,我们应该将 w_r 归一化为长度 1。

TransR

题目:知识图完成的学习实体和关系嵌入(2015)

TransE 和 trans 模型都假设实体和关系是语义空间中的向量,因此相似的实体在同一个实体空间中会彼此靠近。

然而,每个实体可以有许多方面,不同的关系关注实体的不同方面。比如(location, contains, location)的关系是‘包含’,而(person, born, date)的关系是‘出生’。这两种关系非常不同。

为了解决这个问题,我们让 TransR 在两个不同的空间中建模实体和关系,即实体空间多重关系空间(特定于关系的实体空间),并在相应的关系空间中执行翻译,因此命名为 TrandR。

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

TransR 的基本思想如图 1 所示。对于每个三元组(h,r,t),实体空间中的实体首先用操作 Mr 作为 hr 和 tr 投影到 r-关系空间中,然后 hr + r ≈ tr。损失函数和训练方法同 TransE。 ht 是实体嵌入, r 是关系嵌入。

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

特定于关系的投影可以使实际保持关系的头/尾实体(表示为彩色圆)彼此靠近,并且远离那些不保持关系的头/尾实体(表示为彩色三角形)。

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

得分函数和目标函数与 TransE 相同。

TransR 有一个变种模型,叫做 CTransR,C 的意思是集群。首尾相连的实体通常表现出不同的模式。仅构建单个关系向量来执行从头到尾实体的所有翻译是不够的。比如三联(location, contains, location)有国家-城市、国家-大学、洲-国家等多种模式。为了解决这个问题,CTransR 将不同的头尾实体对聚类成组,并为每个组学习不同的关系向量。

构造 CtransR 的过程是,对于一个特定的关系 r,将训练数据中的所有实体对 (h,t) 聚类成多组,期望每组中的实体对表现出相似的 r 关系。我们使用向量偏移量( h-t )来表示实体对 (h,t) 。我们从 TransE 得到 ht 。之后,我们分别学习每个聚类的独立关系向量 r_c 和每个关系的矩阵 Mr。

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

当我们创建负样本时,我们只替换头部或尾部,而不替换关系。这样我们就分别得到了正样本和负样本的两个变换矩阵。除了我们先用矩阵变换变换实体向量,然后计算 L2 范数,其余的代码与 TransE 基本相同。

TransD

标题:通过 D 动态映射矩阵嵌入知识图(2015)

TransR 也有其不足之处。

  • 首先,头部和尾部使用相同的变换矩阵将它们自己投影到超平面,但是头部和尾部通常是不同的实体,例如,(Bill Gates, founder, Microsoft)。‘比尔盖茨’是一个人,而‘微软’是一家公司,这是两个不同的范畴。所以应该用不同的方式改造。
  • 第二,这个投影与实体和关系有关,但投影矩阵只由关系决定。
  • 最后,TransR 的参数个数比 TransE 和 TransH 的大。由于复杂性,TransR/CTransR 很难应用于大规模知识图上。

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

TransD 使用两个向量来表示每个实体和关系。第一个向量表示实体或关系的含义,另一个向量(称为投影向量)将用于构建映射矩阵。

两个映射矩阵定义如下:

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

其中映射矩阵由实体和关系定义, I 是单位矩阵。该等式意味着我们使用生成的矩阵(通过 r 和 h 向量)来修改单位矩阵。投射和训练与 TransR 相同。

TransE 是 TransD 的一个特例,当向量的维数满足 m=n 且所有投影向量都设置为零时。

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

代码结构可能与其他模型类似。我们可以看到每个实体和关系都由两个向量表示。但是该代码没有实现实体空间的维度与关系空间的维度不同的情况。

模型摘要

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

利润损失适用于所有型号。所有这些模型都是基于 TransE 的,使用头部向量和关系向量的和来预测尾部向量。这些模型的不同之处在于它们使用不同的方式来表示实体/关系向量。

评估结果

这是数据集 FB15k 和 WN18 中各种方法的结果。

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

你可以找到更多关于数据集和代码的细节, thunlp/KB2E 用 C++实现,TensorFlow 版本, TensorFlow-TransX

最后的

每个型号都有自己的招数,这里就不多说了。

正如我在模型总结部分所说。这些模型的基本思想是相同的,都是利用头部向量和关系向量的和来预测尾部向量。向量的和就是信息的积累。但是实体和关系可能比这更复杂。寻找一种更有效的方法来表示知识可能是一个具有挑战性的研究课题。

查看我的其他帖子 中等 一分类查看
GitHub:
bramble Xu LinkedIn:徐亮 博客:bramble Xu

周日早晨的洞察力:卡西尼号的灭亡和人工智能的兴起

原文:https://towardsdatascience.com/sunday-morning-insight-the-demise-of-cassini-and-the-rise-of-artificial-inteiligence-c924c654bec6?source=collection_archive---------8-----------------------

在过去的几周内,发生了两件与整个人工智能叙事相关的事件:卡西尼号坠入土星号取消了会议注册,时间之长前所未闻。

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

通常,人工智能叙事围绕着一个因素,然后解释为什么这个领域不能继续下去,因为这个因素不是新的,不再是好的,不是什么……这种叙事是由科技评论推出的,当时它提到人工智能可能会停滞不前,因为“神经网络”已经有三十年或更长的历史了。是的,神经网络已经存在了很长时间,没有人工智能不会停滞不前,因为它实际上取决于几个因素,而不是一个。

这是其中一个因素的故事。

这在很大程度上要归功于太空探索,不,我们不是在谈论令人敬畏的深空 1 号宇宙飞船[1],尽管它很像那艘宇宙飞船,但这个故事也始于 JPL。

当丹·戈尔丁成为美国国家航空航天局局长时,他对新的太空任务施加了一系列的限制,使得整个美国国家航空航天局在设计成本较低的太空任务时更快地整合更新、更好的技术。事实上,卡西尼号被视为任务的未来规避者。从 JPL 网站上讲述的故事中,在“更快、更好、更便宜”的口号下,我们可以读到:

由于没有找到大幅削减成本的方法,JPL 面临着灭亡。美国宇航局的预算将不会支持足够的卡西尼规模的任务,以保持实验室的运作。

在那之前,太空任务中的绝大多数相机都使用 CCD 设备。虽然这项技术提供了高质量的图像,但它很脆弱。首先,它需要冷却以获得良好的信噪比。这种冷却反过来意味着成像仪需要更多的电力来运行,并可能在发射阶段更系统地出现故障。这也是一种基于行的设计,意味着你可能会一次丢失一整行像素。简而言之,它很脆弱,更重要的是,这项技术使传感器变得更重,这是太空探索中的一个大罪。

然后是埃里克·福萨姆。这是你可以在的维基百科条目上读到的内容:

….仪器的目标之一是使星际航天器上的电荷耦合器件(CCD)照相机系统小型化。作为回应,Fossum 发明了一种新的 CMOS 有源像素传感器 (APS),采用像素内电荷转移片上相机技术,现在只称为 CMOS 图像传感器或 CIS【5】【6】(没有像素内电荷转移的有源像素传感器在更早以前就有描述,由 Noble 于 1968 年提出。作为戈尔丁尽可能将空间技术转移到公共部门的指示的一部分,Fossum 领导了 CMOS APS 的开发以及随后向美国工业的技术转移,包括伊士曼柯达公司、贝尔实验室、国家半导体公司和其他公司。尽管根深蒂固的 CCD 制造商最初持怀疑态度,但 CMOS 图像传感器技术现已用于几乎所有的手机相机、许多医疗应用,如胶囊内窥镜和牙科 x 射线系统、科学成像、汽车安全系统、DSLR 数码相机和许多其他应用。

由于 CMOS 依赖于计算芯片中使用的相同工艺,它的规模很大,变得非常便宜。事实上, 大规模的 图像和视频数据集的创建是由 YouTube、Google、Flickr 和 Yahoo!InstaGram,然后是脸书和大多数其他互联网公司,由于 CMOS 在消费成像领域的到来,首先是在相机领域,然后是在智能手机领域,而变得独一无二:

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

这些数据集的规模使得能够训练玩具模型之外的非常大的神经网络。基于神经网络和大型数据集的新算法开发将错误率降至这样一个水平,即大型互联网公司很快就可以开始对自 21 世纪初以来在其服务器上收集的数据使用这些技术。

2017 年 9 月 14 日,卡西尼正在下载其最后一张基于 CCD 的图像,NIPS(最知名的 ML/DL/AI 会议之一)的所有注册在会议前三个月售罄:这是一个专家会议闻所未闻的壮举。会议将在离 JPL 不远的长滩举行,不知何故,启动这一切的传感器就诞生在这里。

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

还有一件事: Eric Fossum 正在构建QIS,下一代成像传感器【3】将产生 更多 像素……

这个故事最初是在 Nuit Blanche 上播出的。

笔记。

[1] 约翰·加勒特在 JPL 口齿不清的故事

[2]如今每个人都在使用的 TRL 标度(第一次用法语翻译是在 Nuit Blanche 号卫星上)就是在那个时候诞生的,这样美国宇航局就可以评估哪些技术可以更快地整合到太空任务中。

[3]查看我们关于 QIS 和压缩传感的讨论

超级简单的机器学习—多元线性回归第 1 部分

原文:https://towardsdatascience.com/super-simple-machine-learning-by-me-multiple-linear-regression-part-1-447800e8b624?source=collection_archive---------3-----------------------

在这篇超长的文章中,我简要描述了多元线性回归的工作原理以及你需要注意的标准。所以给自己找些水和零食,因为这需要一段时间。

大部分的基本概念都包含在我的简单线性回归帖子中,这些帖子可以在 她的 e 中找到。我曾打算在一篇帖子中快速涵盖 MLR,但实在有太多的事情要解决。叹气。

多元线性回归是简单的线性回归,但是有更多的关系(更多的 x。更多前任。哈哈。)

这就像当你的姐姐有了一个婴儿,他曾经是房子里所有噪音的唯一贡献者,但后来她又有了两个,现在这三个都是噪音的贡献者。

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

成为

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

A multiple linear regression with 2 more variables, making that 3 babies in total. Too many babies.

多元线性回归解释了一个连续因变量 ( y )和两个或多个自变量 ( x 1, x 2, x 3…等)之间的关系。

请注意,它显示的是连续的因变量。由于 ybetabeta 1 x 1、 beta 2 x 2 之和,因此得到的 y 将是一个数字,一个连续的变量,而不是一个“是”、“否”的答案(分类)。

例如,使用线性回归,我将试图找出产生了多少分贝的噪音,而不是噪音是否有(噪音|无)。

为了找到分类变量(例如“或“”、“ 1 或“ 0 ”),将使用逻辑回归。我下次会谈到这一点。

让我们从数据开始

到处都可以找到测试代码的数据集。

sklearn 有玩具数据集用于不同类型的算法(回归、分类等),非常适合实践。Kaggle 还有现实生活中的数据集

请注意,在野外,当您遇到数据集时,它将是一个丑陋的 AF。它会有丢失的值、错误的条目、格式错误的列、不相关的变量……甚至在清理之后,可能你的 p 值看起来很糟糕,你的 R 平方太低。你需要选择好的特征,尝试不同的算法,调整你的超参数,添加时间延迟,转换列的数据…

在现实生活中,运行一个模型并不是那么简单,这就是为什么人们做这件事会得到很多报酬,这样他们就可以资助他们的头皮治疗,以从压力引起的脱发中恢复过来。

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

Exploring a dataset is like surfing along the coast of Cinnabar Island… you’ll find MissingNo(s). badum tss

分类变量>>>连续变量

由于回归方程的性质,你的 x 变量也必须是连续的。因此,你需要把你的分类变量变成连续变量。

连续变量简单来说就是流水号。分类变量是类别。

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

当你的分类变量在第一次连续出现时,会有点混乱。

例如,如果有一列邮政编码或电话号码会怎么样?

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

Continuous at first glance, but actually categorical.

每个邮政编码代表一个唯一的地址,每个电话号码只是一个唯一的联系号码。增加/减少这个数字没有任何意义——它们只是没有内在数值的标识符,因此,被认为是分类的

分类变量也被称为离散定性变量。有 3 种类型:

  • 标称:2 种以上。例如颜色
  • 二分的:两种类型,例如是或否
  • 顺序:多于两种类型,但有一个等级/顺序,例如低于平均值、平均值、高于平均值

我们该拿他们怎么办?

有几种方法将分类数据转换成可用于回归的连续变量

标签编码器:

对于二分变量

对于二分变量的简单解决方案是将其转换为二进制——“1”表示“是”,“0”表示“否”,反之亦然。您的标签应该从 0 开始。

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

名义变量和序数变量稍微麻烦一点。

对于名义变量

假设你有三种不同的颜色:红色、蓝色和灰色。按照上面的概念,你把红色标为 0,蓝色标为 1,灰色标为 2。

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

这样做的问题是,它意味着灰色比红色和蓝色更高级,蓝色比红色更高级,如果你认为所有三种颜色都具有相同的“价值”,这些颜色中没有一种比另一种更高级。

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

Reckless labelling can lead to disastrous consequences (The Office S3 E1)

对于序数变量

带标签的“排名”对顺序变量更有效,因为它们确实有排名,并且应该被赋予不同的权重。

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

当面对不应有不同权重的标称变量时,首选一个热编码

一个热编码/创建虚拟变量:

为了不给处于相同竞争环境的类别任何不相等的值,我们使用一个热编码。这是通过创建虚拟变量来实现的,这意味着创建更多的“x”s。这些将是假的/虚拟的变量,因为它们是实际变量的占位符,并且是由您自己创建的。

很简单。对于变量所在的每一层,只需为每一层创建一个新的 x。

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

easy peasy

等等……格雷呢?

如果你的变量只能是 3 种颜色,那么你只能使用 2 个虚拟变量。灰色成为参照类别,在你的 X (蓝色)和 X (红色)都为 0 的情况下,则默认变量为灰色。

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

您选择排除哪个变量并将其用作参考类别有关系吗?

不会。但最佳实践是使用最常出现的类别(例如,如果数据集的 70%是灰色的,那么灰色将是参考类别)。

合并级别:

回到邮政编码这一栏,假设您有 500 行客户,它们都有自己唯一的邮政编码。对 500 个不同的邮政编码进行热编码有意义吗?

这将向您的数据集中添加 500 列,使您的模型变得混乱,并使您患上偏头痛。

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

这也是毫无意义的,因为每个邮政编码都是唯一的。它没有给你的模型增加洞察力,因为你如何使用这样的信息来预测新数据的结果?如果您需要预测居住在邮政编码 323348 的人的收入水平,如果您的数据集中没有这样的邮政编码,您的模型将如何处理呢?它从来没有见过这个邮政编码,也不能告诉你任何关于它的信息。

所能做的转换成你可以用来对未来数据进行分类的东西,比如按照它们的区域对这些邮政编码进行分组(这些数据不在数据集中,但需要来自领域知识或研究)。

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

what is this, tables for ants?! Apologies for the tiny font.

所以你得到的不是 500 不同的邮政编码,而是 4 个地区,北部、南部、东部或西部(或者根据你想要得到的具体程度,它可以是实际的地区,如后港、义顺、贝多克、果园等。这些是新加坡的地区名称)。

这意味着如果新的数据出现在你需要预测结果的地方,你可以根据新的邮政编码属于哪个区域来预测 y

有意义的标签:

有一点要时刻牢记,不要盲目贴标签。

它必须有意义。

例如,在对序数变量(有秩的分类变量)进行编码时,必须确保秩值对应于每个秩的实际显著性(也可以看作是它与因变量的关系)。

例如,如果你正在出售一栋房子,而 y = 价格,而 x 变量之一是公寓所在的楼层,如果楼层随着楼层的升高而涨价,则将楼层编码为整数是有意义的:

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

Encoding it this way is appropriate to show its relationship with the Y variable (price)

然而,如果该值没有相应地增加,也许一个热编码和合并级别会更合适:

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

或者

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

或者如果你不知道这是什么关系:

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

One hot encode everything!!! There are packages that can do this for you, don’t worry.

永远确保无论你如何转换你的分类变量,确保你回头看它,问自己“这有意义吗?”

有时没有正确的答案,所以问题就变成了“这样做是否让更有意义?”

可能会变成,“但是什么有意义?”并引出“什么是意义?”变成了“是什么?”然后进入一周的存在主义虚无主义。

底线是:了解你的数据

特征选择

变量过多可能会导致模型变得不准确,尤其是当某些变量对结果没有影响或对其他变量有显著影响时。

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

Variables that have no significant effect or high collinearity can ruin the model

让我们以三个婴儿的尖叫为例。如果我要对我的回归方程建模,以找出基于这 4 个变量产生的噪音分贝数=婴儿 1、婴儿 2、婴儿 3、灯(开或关),这将不是一个好的模型。这是因为我的蜘蛛感官告诉我,灯不应该产生噪声,因此灯和噪声之间的任何可能的相关性都是虚假和不准确的。

功能选择的基本步骤:使用您的常识和/或商业感觉

选择要素的另一种方法是使用 p 值。正如我们上一次讨论时,p 值告诉您变量的统计显著性。移除具有高 p 值变量会导致您的精确度/R 平方增加,甚至其他变量的 p 值也会增加——这是一个好迹象。

这种省略变量的行为是逐步回归的一部分。有三种方法可以做到这一点:

  • 正向选择:从 0 开始。反复运行模型,尝试每个变量。找到给出最佳指标的变量(例如 p 值、调整后的 R 平方、SSE、准确度百分比),并坚持使用它。使用选择的变量再次运行模型,每次尝试剩余变量中的一个,并坚持使用最佳变量。重复该过程,直到添加不再改善模型。

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

  • 逆向淘汰:从所有变量开始。多次尝试模型,每次排除一个变量。当遗漏变量时,移除使模型改进最多的变量。在不移除变量的情况下重复该过程,直到您所判断的指标不再提高。

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

  • 双向淘汰:进行正向选择,但在某些阶段也进行反向淘汰。因此,你可以在一个阶段,你已经添加了 X1,X2,X5 和 X8,然后做消除 X2。这是一个很好的例子

一些了不起的人创造了 R 和 Python 包,它们自动完成这些过程,根据特定的度量标准(如调整后的 R 平方或 AIC 或 p 值)选择“最佳模型”。这里的 都是我找到的 的一些

**注意:**逐步回归是一种快速获得更好评分模型的方法,尤其是在运行简单模型时。它被广泛使用,但是 也被广泛批评 不准确。我一直被教导使用逐步,所以我很想听听你的意见。

逐步回归的替代方法是 LASSO(最小绝对收缩和选择算子)方法,我将在下一次介绍。或者你可以在这里读到它。

相关性和共线性

检查共线性有助于通过与另一个变量有显著关系来消除扭曲数据的变量。

变量之间的相关性描述了两个变量之间的关系。如果它们是极相关,那么它们就是共线

自相关 发生在一个变量的数据影响到同一个变量的另一个实例(同一列,不同行)时。只有当数据集中很少或没有自相关,并且每个实例相互独立时,线性回归才有效。如果实例是自相关的,那么您的残差不是相互独立的,并且将显示一个模式。这通常发生在时间序列数据集中,所以当我介绍时间序列回归时,我会更详细地介绍。

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

In stock market data, based on prices at a certain time, you can roughly guess what the prices will be in the future following that, showing the dependancy of the future instance on the previous one.

当回归模型中的两个或多个预测值( x 变量)中度或高度相关时(不同列),存在多重共线性。当我们的一个预测者能够强有力地预测另一个预测者或者彼此之间有怪异的关系(可能是 x 2 = x 3 或者x2 = 2(x3)+x4),那么你的回归方程将会变得一团糟。

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

Multicollinearity: One x variable = Orange colour, Other x variable = number of oranges. They would be highly correlated as the number of oranges affects the orange-ness of the juice. Orange you pleased with this simple analogy?

为什么多重共线性是回归的一个问题?嗯,回归方程是代表预测值和因变量影响的最佳拟合线,而不包括一个预测值对另一个的影响。

预测值之间的高度共线性(相关性为 1.00)将影响您的系数和准确性,以及降低 SSE(误差平方和-您需要通过回归最小化的东西)的能力。

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

Example of a correlation plot taken from https://www.mathworks.com/help/econ/corrplot.html comparing 5 variables with each other

检测共线性的最简单的方法是用图表示出来,或者查看相关矩阵来检查成对的相关性(两个变量之间的相关性)。

如果你有两个高度相关的变量,你最好的办法就是去掉其中一个。

共线性正在影响你的回归生活的 4 大迹象——你会被第 3 个震惊!

  1. 当你的系数( bx 中的 b )为时,但你从常识和商业知识中知道该变量的作用应该是正的。或当系数过小时对于一个应该有更大影响的变量
  2. 当你用那个 x 变量运行一个模型,而你不用那个 x 变量运行另一个模型,这些模型的系数完全不同
  3. 当每个单独斜坡的t-测试不显著,但总的F-测试显著时。这是因为多重共线性导致一些变量看起来没有用,因此降低了 t-stat,但对总体来看的 F-统计量没有影响。
  4. 当你的 VIF 偏离图表是 5 或更多

VIF 是什么国家?!

VIF:差异通货膨胀系数

VIF 是从模型中导出的系数的方差被共线性夸大了多少的度量。它有助于检测仅通过目测两两相关图无法发现的多重共线性,甚至可以检测 3 个或更多变量之间的密切关系。

它是通过[所有系数的方差]除以[当一个变量是模型中唯一的变量时,该变量的系数的方差]的比率来计算的。

VIF = 1:预测值和其他变量之间没有相关性

VIF = 4:可疑,需要调查

VIF = 5-10:“休斯顿,我们有一个问题。”调查一下或者放弃这个变量。

[**Finding VIF in Python:**](https://etav.github.io/python/vif_factor_python.html)**from** **statsmodels.stats.outliers_influence** **import** variance_inflation_factory, X = dmatrices('y ~ x1 + x2', dataset, return_type='dataframe')vif_df = pd.Dataframe()
vif_df["vif"] = [variance_inflation_factor(X.values, i) **for** i **in** range(X.shape[1])]vif_df["features"] = X.columns
print(vif_df)[Finding VIF in R](http://minato.sip21c.org/msb/man/VIF.html)

 reg <- lm(y ~ x1+x2,x3, data=dataset)
 summary(reg)

 VIF(lm(x1 ~ x2+x3, data=dataset))
 VIF(lm(x2 ~ x1+x3, data=dataset))
 VIF(lm(x3 ~ x2+x1, data=dataset))

调整后的 R 平方

我们在上一篇文章中学习了 R 的平方。概括地说,它衡量回归线与实际结果的吻合程度**。让我们潜入更深的地方。**

它的公式是:

R 平方=解释偏差/总偏差

解释方差 = 回归平方和(SSR) 【不要与 RSS(残差平方和)混淆,RSS 也称为 SSE】

总平方和(SST) = SSR + SSE(误差平方和)

你可以把它看成 SSE 是“无法解释的变异”。记住 SSE 是你的实际值( y )和你的预测值( y-hat )之间的误差

总变差 = SST(总平方和)。每个变量与该变量总体平均值之间的平均平方差(y- ybar)。

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

SOS.

所以 R 平方基本上是这样的:

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

http://blog.minitab.com/blog/statistics-and-quality-data-analysis/r-squared-sometimes-a-square-is-just-a-square

现在这一点已经清楚了,让我们来看看调整后的 R 平方。

为什么要调整?

因为您的分子是方差之和,所以添加更多的预测值( x 变量)将总是增加的 R 平方,从而随着预测值的增加而变得不准确。

另一方面,调整的 R 平方说明了预测器数量的增加。

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

https://www.graphpad.com/guides/prism/7/curve-fitting/index.htm?reg_interpreting_the_adjusted_r2.htm

  • n 指的是数据点的数量(例如数据集中的行数)
  • k 指 x 个变量的个数

由于等式的性质,调整后的 R 平方应始终低于或等于 R 平方。

如何评价什么好什么不好?

使用调整后的 R 平方的一个好方法是用不同的变量对模型进行几次迭代(例如进行逐步回归)。你可以看到调整后的 R 平方是如何增加的,当增加更多变量时,可能会在减少之前达到一个最佳点。然后你应该把它保持在那些给你最佳调整 R 平方的变量上。

任何能够显著预测结果变量,从而提高您的准确性的变量,都将导致更高的调整后 R 平方。

那都是乡亲们!暂时如此。

喘口气。祝贺你到达这篇文章的结尾!

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

Take this cute photo - of a sleeping cat that I pet-sit — as your reward.

下一篇文章将介绍使用 gretl 和 python 的实际建模,以及更多检查准确性的方法。

下次见!

超级简单机器学习—简单线性回归第 1 部分【概念和 R】

原文:https://towardsdatascience.com/super-simple-machine-learning-by-me-simple-linear-regression-part-1-concept-and-r-4b5b39bbdb5d?source=collection_archive---------4-----------------------

在我们开始之前…一句咆哮:

我不擅长统计学。

我可能不应该在网上写这个,它将被永远记录下来,并可能在我职业生涯的某个时候被用来反对我,但我很诚实,也很愚蠢,所以我会说出来:

我对统计一窍不通。

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

When you’re trying to figure out the volume of a cone, simple formulae and basic trigonometry. What, were you expecting an unrelated meme joke?

我知道你在想什么。

“没关系,每个人都有自己的长处和短处,而数据不是你的强项”

嗯,是的,但是……出于某种原因,我决定从事数据分析工作。

过去很艰难,现在仍然很艰难;我记得在一堂分析课结束后,大家都离开了,我坐在大学教室里,盯着我的笔记本电脑屏幕,试图忍住眼泪,因为我不知道这该死的课是关于什么的。

最终,我确实想出了足够的方法来应付,但是如果我不理解模型,那么和模型打交道就没有任何意义。因此,我做了大量的阅读,一篇接一篇的文章,回顾基本的统计理论,观看教程等等。

我必须说,我非常感激我可以访问万维网,那里的资源是无穷无尽的。这有助于我的教育不依赖于一个为了完成博士学业而不得不教一门课,但没有任何教学技能而只是朗读幻灯片的人。

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

Meme made from a comic by Allie Brosh. Check out her amazing stuff @ http://hyperboleandahalf.blogspot.sg/

在互联网上,我开始学习概念,用不同的方式解释,最后终于有了‘T4’的时刻。

也就是说,这里是我选择的一些向自己解释基本机器学习模型的方法。对我来说,我学习的最好方法是当我试图向别人解释的时候。

如果我的解释不正确,请随时告诉我。我不会生气的,我保证!

简单线性回归

简单线性回归模型是如此简单,以至于许多人认为它不值得被归类为“机器学习”。这很简单,只是统计建模。然而,为了这个系列的目的,我将把它归类为机器学习,因为它是一个时髦词,因此会让我听起来超级酷。

简单的线性回归模型允许你预测事情。多酷啊。基于已知的因素,你可以告诉你所有的朋友,即使某件事没有发生,你也有 87%的把握它会发生。Wooo好神奇

第一步

让我们回到简单的数学。 快克 MAF

你如何划清界限?

除了用尺子,哈哈好吧,爸爸的笑话放在一边,如果你想用微积分在图上做,它是

y = ax + b

  • y 是结果。就像统计学试卷上的分数。
  • x 是变量。喜欢流泪的数量。
  • a 是一个有待确定的值。它被称为系数,类似于 x 变化时 y 的变化幅度。
  • b 是一个待定的常数。它被称为截距,因为当 x 为 0 时,y=b

简单的线性回归遵循这样一个假设,即利用迄今为止找到的所有数据,你可以画一条线[y = ax + b]来确定这些点的趋势,然后计算出在 x 为任意值时 y 为多少。

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

看得出来,眼泪越多,考试分数也越高。这是你应该注意到的第一个趋势。

你的任务是:

我)找一个

ii)查找 b

iii)??

四)利润

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

It could look something like this

它是如何工作的

回归模型找到最佳拟合线的一种方法是使用最小平方标准(最小误差平方和)。[Actual y] -[Predicted y]是误差,求平方,使差值成为绝对值,然后求和。😄)。

因此,回归模型有时被称为普通最小二乘回归。

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

在最小化所有讨厌的误差平方和(SSE)后,你会得到一条很好的拟合线,你可以在这条线上进行预测。

“这有什么好奇怪的?”你可能会沮丧地大喊大叫。

这个模型很棒,因为找到最佳拟合线不是一件容易的事情。

简而言之,不要尝试每一条可以想到的线,然后计算误差平方和,一遍又一遍地重复,直到找到最小的一条线,结果却不是最小的,因为你永远不会知道…

别那样做,你这个笨蛋。

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

This is the moment you admit that the robot is smarter than you

这个模型,以及你喜欢的统计软件,不管是 R、python 还是 gretl,都会为你做所有的事情。你甚至不用去想它背后的数学。

换句话说,简单的线性回归模型找到了在做预测时搞砸最少的那条线。

它为你找到了 a 和 b 的值,所以当你想知道多少眼泪能让你在考试中得 90 分时,你会知道并能朝着那个方向努力。

在 R 中做行为

关于 R 的伟大之处在于,已经有一些包和函数将所有复杂的数学编程到其中,你所要做的就是输入输入。

对于简单的线性回归,您只需要:

型号< - lm(y ~ x,data=your_data_source)

然后你可以做一个
总结(示范)

来看看你的 a(系数)和 b(截距)是什么样子的。

在这里查看这个教程

注意事项

然而,就像其他不好玩的事情一样,有很多 T2 规则要遵守。

  1. x 和 y 应该是线性关系。如果在某个时候流了太多的眼泪,导致眼睛疼痛,导致你在纸上做得更差(但愿不会如此),那么图表将如下所示:

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

也就是说,你妈妈会打你的屁股,所以把眼泪擦掉,孩子。但这也意味着任何用直线做出的预测都是错误的。

这个时候,转换(我会在另一篇文章中详细阐述)就派上用场了,把皱眉变成一条线。

2.为了使用一个回归模型,你应该有至少 20 个数据点来使它准确。这是为了确保您的样本大小足够大,可以作为预测的基础。

就像我不能确定 chokers 是否会重新成为一种潮流,直到我看到大约 23 个易受影响的青少年(当然,在个别场合,同龄人的压力会扭曲观察结果)穿上它。

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

These things!!! I don’t understand them!!! You can get one at https://www.fashionnova.com/products/throwback-choker I guess, but I’ll judge you for it

3.实现模型后,检查残差(实际预测的误差)是否是随机的。如果他们在做一些有趣的事情,并显示出清晰的趋势,这意味着你的模型显然没有抓住趋势。

它只有一项任务。一份工作!!

是一篇非常好的文章,它解释了当一个简单的线性回归做得好或不好时检查你的残差图。

坚持学习!

这仅仅是机器学习的表面(我不知道它是否被认为是机器学习),如果你对它感兴趣,我建议你多读一些。我遗漏了许多方程和统计摘要,需要查看它们来确定我在这篇文章中没有提到的模型的准确性,所以请记住,这只是线性回归模型的基本思想。

期待第 2 部分,它将解释回归模型背后的数学,你应该注意什么参数,如何在我的新朋友 Python 中编写这些代码,并解释为什么我在这篇文章中给出的例子(眼泪与考试分数)是一个可怕的例子。

链接什么的

其他值得一读的网站:

[## 线性回归简介

编辑描述

onlinestatbook.com](http://onlinestatbook.com/2/regression/intro.html) [## 线性回归的假设-统计解决方案

首先,线性回归需要自变量和因变量之间的关系是线性的。这是…

www.statisticssolutions.com](http://www.statisticssolutions.com/assumptions-of-linear-regression/)

通过 R 上的编码学习:

[## 简单线性回归

统计学中最常用的技术之一是线性回归,在这种方法中,我们研究潜在的…

www.r-bloggers.com](https://www.r-bloggers.com/simple-linear-regression-2/)

Udemy 有一个非常好的课程,涵盖了 Python & R 上的机器学习,他们解释了每个模型,并为不同的模型编写了代码,包括一个简单的线性回归模型:

[## 机器学习 A-Z:数据科学中的 Python & R 实践

向两位数据科学专家学习用 Python 和 R 创建机器学习算法。包括代码模板。

www.udemy.com](https://www.udemy.com/machinelearning/)

如果你想从一个更统计的角度来看,Coursera 上也有一个约翰·霍普斯金回归模型课程:

[## 回归模型| Coursera

关于本课程:线性模型,顾名思义,使用…

www.coursera.org](https://www.coursera.org/learn/regression-models/)

希望这对你有所帮助,或者至少引起你的兴趣!

如果你发现任何错误和误解,请在下面留下评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值