TowardsDataScience 博客中文翻译 2016~2018(一百九十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

UI 测试的元编程:抽象组合契约

原文:https://towardsdatascience.com/metaprogramming-for-ui-testing-pbt-abstract-compositional-contracting-ad0bc816e503?source=collection_archive---------16-----------------------

正如在之前的博客中提到的,我们已经实现了能够在 TornadoFX 应用程序中检测 UI 组件。

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

Input Detection accomplished. Still buggy but accomplished.

由于我们正在重构并将代码库转移到 Gradle,为测试存根的生成做准备,我需要思考那些可以在没有智能的情况下生成,但可以提供足够信息使其值得分析的测试。我和比我聪明得多的人(有过跨多个框架编写测试的经验)参加了一个芝加哥 KUG 会议,讨论是否有可能创建 UI 基于属性的测试(PBT)。

有哪些类型的 UI 测试?

让我们来看一个表单,在这个表单中,我们正在编辑从人员表中选择的人员:

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

让我们从为这个视图编写测试的角度来考虑这些特征:

  • 接近度&渲染视图的排序 —视图如何相对于彼此进行渲染?它们呈现的顺序是什么?车主field坐在textfield的左边吗?形式above就是button
  • QA 测试 —在运行时探索环境,四处点击等。我输入一些信息,然后点击“保存”。
  • 与视图相关的模型属性——当时间表模型的状态变脏时,是否启用“保存”button?父组件是否反映了对实例的特定子集所做的更改?如果我把约翰·希尔换成无名氏,约翰·希尔就不在另一个View里了吗?

我们如何在不关心模型、改变视图和增加不属于视图的组合动作的情况下,将这些属性定义为可测试的东西?

我们需要将我们对视图的关注提升到一个更高的抽象层次,这样我们就可以将想法归纳为一组规则,或者属性,来描述视图如何在应用程序中协同工作。

什么是基于属性的测试(PBT)?

基于属性的测试可以定义为满足一组属性的测试,与我们定义的特定输入或边缘情况相反。测试让我们努力思考,PBT 让我们更加努力思考。它不能替代基于单元的测试,但是更加努力地思考目标(而不是实现)可以帮助我们编写更强大的测试并降低成本。这意味着更高质量的产品和更少的维护。

PBT 最优雅的例子之一可以通过交换性来检验。

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

Commutative Properties

向左,我们发现加法运算是可交换的,而减法运算不是。

在数学中,我们可以概括说,如果改变输入的顺序不改变输出,二元运算是可交换的。

同样,我们可以尝试描述通用属性来帮助我们编写 UI 测试。

为什么我要为用户界面创建 PBT?

有很多方法可以创建视图并测试它们。许多人对这些测试应该如何设计和编写非常固执己见,但是这些测试对于算法、数据处理和 API 来说更容易编写。你投入一些资源,你期望一定的产出。但是,如果视图没有被形式化,我们如何描述我们对视图的期望呢?作为一个在我的职业生涯中花了一部分时间做 UI 开发人员的人,我避免尝试编写这样的测试,其他人也和我分享了类似的观点。

如果程序能够为特定的应用程序形式化关于一组检测到的视图的属性,那么元编程只能编写 UI 测试。

这是我们想出的主意。

抽象 UI 树收缩

当我们查看契约测试时,我们正在测试一个流程和另一个流程之间的通信行为。我们正在检查模式、实现的状态以及由消费者契约触发的生产者契约中调用的行为。

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

这是一种常见的微服务之间的测试和不同 API 之间的通信。我们不关心业务逻辑,也不关心预期调用的结果。我们只关心另一份合同的预期通知已经发出。

让我们从上到下看一个应用程序。在这里,我们有一个登录屏幕,正确的凭证提供了对我们可能能够使用的网格选项工作台的访问。选择一个datagrid项会让位于一个平铺图形用户界面,在这个界面中,我们可以将平铺图形和图像拖放到一个预定义的布局上。

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

我们可以使用drawer来访问图标。单击瓷砖将显示瓷砖的属性。我们还能够导航回工作台。

之前,我们解析了 Kotlin 语言的抽象语法树 (AST)来概括语言组件,并递归和不可识别地检测 UI 输入。

我们不关心与应用程序相关的业务逻辑,也不关心我们在应用程序中创建和使用的模型。为我们的组件 映射一个组合抽象可以帮助定义我们认为应用程序中作为单个关注点的动作周围的属性:

  • 特定视图在什么上下文中?
  • 视图由哪些节点组成?
  • 在这些节点中,哪些节点有输入?这些输入是布尔型还是多输入型?
  • 那些节点有指向其他节点的指针吗?

创建这个组合的“线框”映射可以帮助我们创建一组自定义的属性,我们可以根据这些属性进行测试。

此时,我们已经有能力检测 UI 控件。我们可以修改我们的扫描视图并注入事件订阅,这些事件订阅将监听任何编程输入并将节点分配给状态。

现在我们有了一组抽象的属性来描述我们的 UI,我们在容器中运行的客户端版本和我们的服务器程序之间创建契约接口,并通过套接字促进通信。

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

为可能的输入组合创建排列应该不难。**每次触发控制事件时,我们可以对状态应用二元运算,并可以对这些节点运行状态检查。**如果任何财产被侵犯,那么合同就被破坏。

反过来,当且仅当 状态的二元运算在单个节点 上适当改变时,UI 被称为“工作中” 整体结果存在于先前由其代表性组合图定义的应用程序属性的范围内。

我们能在 PBT 上使用机器学习吗?

在我看来,数据科学是好奇的,而不是固执己见的。我们可以从收集自愿数据开始,例如:

  • 哪些测试失败了
  • 通过什么测试
  • 跟踪测试结果和应用程序崩溃之间的相关性

我不能说我知道我们会发现什么,但我们会让分析检测那些有趣的数据趋势。

一旦用元编程实现了 PBT,下一阶段的重点是让这个应用程序对更广泛的受众和更多的框架可用。敬请期待!

使用细胞神经网络、迁移学习和数据增强的转移检测

原文:https://towardsdatascience.com/metastasis-detection-using-cnns-transfer-learning-and-data-augmentation-684761347b59?source=collection_archive---------17-----------------------

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

Photo by Lurm on Unsplash

本项目的目标是使用 Kaggle 上托管的 PatchCamelyon 数据集【1】在淋巴结的组织病理学图像上检测癌症转移。

对疾病进展的正确诊断对于选择最合适的治疗方案至关重要,这就是为什么医生依赖于可能存在转移的活检组织的组织病理学图像。在这个项目中,我们将训练一个模型来自动检测恶性肿瘤的证据,以帮助医生做出更好的决定,并有望为癌症患者提供更好的护理。

这里介绍的步骤也可以为任何一般的图像分类问题提供一个强有力的基础:

数据

该数据集是一组 96×96 的图像,其中如果在图像的 32×32 中心部分有恶性肿瘤的证据,则每个图像被标记为 1,否则被标记为 0。

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

Examples from the training set

增大

为了减少过度拟合并增加模型的泛化能力,我们使用数据扩充,这是应用于图像的随机扰动序列,保留了标签信息。用这些扰动进行训练也使模型对噪声更鲁棒,并增加其对平移和旋转的不变性。

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

Random Augmentations applied to the same input image

模型

我们使用在 ImageNet 上预先训练的 NasNet mobile(参见迁移学习),因为它速度快,因此可以在 6 小时的时间限制内完全在 Kaggle 内核上训练。

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

培养

我们使用训练集的一小部分作为验证,然后使用模型检查点 Keras 回调来保存最佳权重,并在我们对排行榜数据进行预测之前加载它们。

预测和后处理

对于测试集的每个图像,我们平均原始图像的预测和水平/垂直翻转版本的预测。

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

Leaderboard Result

这种方法获得了 0.9709AUC 分数,与最先进的 0.963数字病理学旋转等变 CNNs 相当。

可以在 Kaggle 上在线运行模型:https://www . ka ggle . com/cvx tz/CNN-starter-nasnet-mobile-0-9709-lb

github Repo:https://github . com/CVxTz/恶性肿瘤 _ 检测/tree/master/code

[1]https://github.com/basveeling/pcam

METIS 简介

原文:https://towardsdatascience.com/metis-introduction-5e772c8affad?source=collection_archive---------12-----------------------

Metis 的第一周主要关注 Python 库“pandas”的使用,这是数据科学家创建、清理和分析数据框的首选工具。作为一个 python 初学者,pandas 文档很难掌握。我发现自己不断地交叉引用课堂上的材料,以找出如何编写多行代码。

在我们的第一个项目中, *Benson,*我们研究了纽约市 MTA 十字转门的数据,并得出结论来帮助一个假想的客户。在我们集思广益的那一天,我的团队特别饿,我们开始改善煎饼车的业务,这是纽约街头的一个新的快餐车业务!

本森项目

这个项目的第一步是读入数据。我们通过 MTA 数据网站的一系列链接迭代了 pd.read_csv 命令。

这是导入时数据的格式:

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

经过一些数据清理(去掉列名,去掉极值,将 dataframe 转换成时间序列),我们决定了我们真正感兴趣的时间段。

由于 Crepe Cart 是一种主要在早餐、午餐和晚餐时间针对忙碌工作人员的食品服务,我们决定查看工作日早餐从[7AM-12PM]、晚餐从[3PM-8PM]的进出数据,以及午餐从早餐到午餐的[11AM-4PM]数据和出口的组合。我们在午餐时使用早餐出口数据的原因是,我们假设在清晨离开十字转门的人在附近的办公室工作,并且在午餐时间仍会在该区域。

然后,我们找到了每个时间段按流量(入口+出口)排名的前 10 个站点。

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

Average daily total for each station for each time period.

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

Top 10 B/L/D visualized

找到这些群体后,我们开始想办法量化可丽饼销量。我们最终假设转换率为 0.2%——因此,每 500 人经过一个车站,我们的煎饼车就会卖出 1 个煎饼。如果一个站点在不同的时间段排名发生变化(如下所示),我们必须决定是否值得花费时间/成本将快餐车迁移到一个更拥挤的位置。为此,我们假设在曼哈顿的交通条件下,每英里行驶时间为 10 分钟。

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

Example of station changing ranking

考虑到这些因素,我们计算了绉纱的销售额。

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

值得注意的是,尽管 B 路线在午餐时间有更多的可丽饼销售,从 34-Penn 到 34-Herald,如果可丽饼车有 3 辆食品卡车,那么它们的旅行就没有意义。相反,他们可以在 34 街和 34 街分别停一辆车。第四辆卡车会走 e 路。

最后的想法

本森项目很好地介绍了 Metis 的工作情况。这既紧张又费时,但我们在一周的下午有很多时间来合作和研究它。由于我们只有一周的时间来完成,我们无法将大量数据纳入我们的分析中。如果有更多的时间,我们可以查看交通的季节性变化、公交/拼车数据,以获得更全面的交通状况,以及每个车站附近竞争餐馆的密度。

分类中的度量和随机过程

原文:https://towardsdatascience.com/metrics-random-processes-in-classification-fd5bafa79505?source=collection_archive---------2-----------------------

在他的书《机器学习》的介绍中,Tom Mitchell 教授学习定义如下:

对于某类任务 T性能测量 P ,如果由 P 测量的计算机程序在 T 任务中的性能随着经验 E 而提高,则称该计算机程序从经验 E 中学习

事实上,只有通过预定义的性能指标或指标进行评估时,我们才能谈论算法学习。当执行分类任务时,选择正确的指标可能比调整模型参数更重要。为了说明这一点,我们将回顾现有的最常见的指标,并展示它们的优缺点,然后集中讨论具有潜在随机过程的分类任务的特殊情况,在这种情况下,通常的分类指标都不起作用,并提出一种替代方案。

准确(性)

准确度分数(通常写成 ACC )是人们能想到的最直接的度量标准。它只是简单地计算我们在预测总数中预测正确类别的次数。更正式的说法是:

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

Notations : p_i is the i-th prediction, y_i the i-th target and N the sample size.

就像任何指标一样,这一指标也有其利弊。从好的方面来说,这很容易理解和解释,因为具有 80%的准确性简单地表明有 80%的机会在看不见的数据上预测正确的类别——当然,前提是我们的模型不会过度拟合和概括得很好。然而,当数据集中的类分布是不平衡的,例如当负目标(0)比正目标(1)多得多时,该度量变得无用。事实上,如果 95%的目标是否定的,那么一个总是预测(0)的非常简单(和糟糕)的模型将实现 95%的准确度分数,尽管完全没有用。在这些情况下——这是相当常见的——其他指标如混淆矩阵就派上用场了。

混淆矩阵

混淆矩阵试图比简单的准确度分数更详细地描述分类器的性能。它可以表示为一个计数表,在给定真实值为正或为负的情况下,计数正预测值和负预测值的数量。例如,如果我们要为之前的坏分类器计算一个混淆矩阵,它看起来像这样:

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

Notations : T/F for True/False, P/N for Positive/Negative

这里我们选择了 2000 的假设样本量。我们可以看到,数据是高度不平衡的,只有 5%的阳性,95%的阴性(0+1900)/2000),并且分类器总是预测一个负值(“预测值”的“阳性”行为空)。但是,尽管允许我们快速浏览预测的分布,在这种状态下,混淆矩阵并没有真正给我们更多的洞察力。另一种方法是用每一列的总和除以每一列的总和,得到所谓的 T2 归一化混淆矩阵:

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

Normalized confusion matrix. Notation : R for rate.

由于这种标准化,对角线上的每个成为预测正确类别的经验条件概率。当以真类为正的条件时,这种概率称为真正率或灵敏度,否则称为真负率或特异性**。因为这些比率不依赖于类别分布,所以使用混淆矩阵通常比依赖准确度得分更可取。在训练过程中,可以将灵敏度和特异性最大化,以收敛到完美分类器——其混淆矩阵等于同一性,因为它只预测实际上是正确类别的类别。在我们的例子中,我们立即看到了一些错误,因为敏感度为零,因此我们可以得出结论,我们注定是坏的分类器确实是坏的(哈利路亚!).**

ROC / AUC

一般来说,为了对样本进行分类,分类器会计算一个介于零和一之间的真实值——或者任何其他可以映射到[0,1]的区间——然后通过使用内部判别 阈值(通常默认设置为 50%)来映射该值,高于该阈值时,它会预测正的和反的。这样一个阈值的选择会极大地影响前面指标显示的结果。事实上,如果我们的模型高度偏向负值,即如果它预测的值分布非常接近零,使用 50%或更高的阈值可能会导致它总是预测负值,而选择更低的阈值可能会导致更多的正值,因此可能会更好地反映分类器的性能。

考虑所有可能阈值的一种方法是依靠 ROC 曲线AUC 分数。ROC 曲线是坐标为**(灵敏度,1-特异性)**或(TPR,FPR)的点的集合,其中每个点对应于相同分类器的性能,但具有不同的阈值。可以看出,对于足够大的数据集,尽管有鉴别阈值,但完全随机的分类器总是将其坐标放在对角线[(0,0),(1,1)]上,也称为无鉴别线。此外,如果一个点在这条线以上的半平面中,那么下面的不等式成立:

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

换句话说,混淆矩阵对角线上的每个概率都大于 50%,这意味着我们有超过 50%的机会正确预测每个类别,在这种情况下,我们说我们的分类器表现比随机猜测更好。同样的推理也适用于比随机猜测更差的线下点。然而,如果一个分类器总是在所有阈值的非歧视线以下,简单地翻转它的预测就可以使它在线以上,因此是一个可接受的模型。

当阈值为 T=0 时,所有分类器系统地预测阳性,因此它们都位于 ROC 空间中的(1,1)处。相反,当 T = 1 时,发生相反的事情,并且所有分类器都在(0,0)处。为了说明这一点,这里有两个很好的 ROC 曲线的例子:

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

但是我们如何使用这个度量来比较模型呢?当给定一组分类器时,在每个给定的特异性值,最好的分类器必须具有最好的灵敏度。因此,选择最佳模型的近似方法是保留 ROC 曲线严格高于所有其他模型的模型。不幸的是,这只有在几条曲线之间有明确的顺序时才能实现。为了解决这个问题,我们可以求助于一个更具聚合性的指标,即 AUC 得分

对于每条 ROC 曲线,曲线下有一个相关的面积或 AUC 得分。该 AUC 直接依赖于 ROC 曲线,但具有一些额外的优点,第一个优点是它允许我们使用真实值客观地比较分类器,而不是依赖于图形的视觉解释。此外,可以表明 AUC 等于分类器对随机选择的正实例的排序高于随机选择的负实例的概率。考虑到这一点,我们看到 AUC 是用于二元分类任务的比任何以前的度量更强大的工具,因为它对不平衡数据集是稳定的,易于解释并且客观地对分类器的性能进行排序。

这些指标中的任何一个(尤其是 AUC)在任何确定性场景中都会发挥很好的作用,比如找出某物是否是热狗。在这些情况下,目标值是一组预测值的确定性函数,并且可以尝试按照通常的例程直接处理分类任务来估计该函数。但是在随机场景中,目标除了确定性函数之外还具有随机不可预测成分,预测类别只是估计概率的一个代理,也是估计概率的结果。例如,如果我们试图预测一次公平的掷硬币的结果,对于一个足够大的数据集,没有一个模型可以达到超过 50%的准确率,无论它有多精确。在这种情况下,潜在的目标和我们唯一希望做的事情是评估过程的概率,并找到最佳模型,即预测总是 50%。

不幸的是到目前为止,我们所看到的指标并没有表达出我们在寻找这些概率方面有多好

事实上,对于公平的掷硬币和足够大的数据集,除了不能实现大于 50%的准确度之外,所有的 ROC 曲线都将在非歧视线上,并且 AUC 分数将总是 50%。这并没有给我们更多关于分类器发生了什么的信息,因此需要一个新的度量标准。在许多情况下,基础过程是随机的,例如:

  • 预测量子力学实验的结果,例如,电子的自旋是向上还是向下。
  • 预测扑克游戏中看不见的牌。
  • 预测一个学生是否会在一项特定的任务中取得成功(我们在 Kwyk 做的事情)

在所有这些情况下,使用简单的分类标准会阻止我们在建模方面前进。那么我们应该使用什么度量标准呢?因为我们想要一个度量来告诉我们在预测每个类的连续概率方面有多好,所以我们将关注一个回归度量****MSE

均方误差

均方差或 MSE 是预测值和实际值之间的平方差的平均值。它可以正式写成:

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

Notations : p_i is the i-th prediction, y_i the i-th target and N the sample size.

在二元分类的情况下,其中 y 是离散变量(0 或 1)p是成功的预测概率,它也被称为 Brier score

为了公平起见,如果我们选择使用的模型总是对所有样本预测相同的概率,快速查看 MSE 配置文件可以让我们找到最佳模型:

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

MSE values for a fair coin toss when the predicted probability varies from 0 to 1.

这是一个开始,但是我们看到当模型是最优时,MSE 不为零。事实上,总是预测 50%是我们可以选择的模拟公平抛硬币的最佳模型,因为潜在的过程是 a 伯努利 B(0.5)。但是因为最小均方差是 0.25,我们可以认为还有一个更好的模型,均方差是 0.25。这里,p=0.5 时剩余的 MSE 对应于任务中的固有随机性。事实上,当一个过程具有不确定性时,由于我们试图预测的数据中的不确定性,MSE 中总是存在不可避免的误差。现在让我们注意 0.25 正好是 a B(0.5)的方差,它是我们过程的分布。

使用 MSE 实际上允许我们在一组分类器之间进行区分,并确定最佳选项,但是我们仍然没有一个度量标准来告诉我们离完美模型还有多远。这是使用任何先前度量的确定性任务的情况:对于完美模型来说,准确度分数是 100%,混淆矩阵等于同一性,并且 ROC 曲线是 AUC = 1 的平方。在任何情况下,我们都看到,由于我们感兴趣的随机过程的本质,MSE 不可能为零,但我们也知道一种将随机观察结果与其潜在概率联系起来的方法,这就是大数定律(LLN)

事实上,如果预测的概率有任何意义,并且如果我们为每个预测的概率建立一个组,其中我们收集所有相应的目标,对于一个足够大的组,目标的平均值应该收敛到预测的概率。这是朝着期望的度量迈出的又一步,因为我们可以查看每组中平均目标和预测概率之间的差异,我们的分类器越好,这些差异就应该收敛到零。但是当该过程具有连续分布时,这些组的大小将几乎不会增长,并且 LLN 将无法生效。这个问题的一个解决方案是将不同的预测概率一起分组到 K 个组的每一个 n_k 元素中,并将组内平均成功率(目标的平均值)与组的平均概率进行比较。

让我们看看当我们进行这样的分组时 MSE 会发生什么,这里 BS 代表 Brier Score :

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

Source : “Two Extra Components in the Brier Score Decomposition”

上述计算表明 Brier 分数/MSE 是 5 项相互作用的结果:

  • 不确定性 (UNC):不确定性显示了在我们的任务中固有的随机性。例如,如果我们预测的目标总是 0 或 1,UNC 就是 0,因为在要预测的数据中没有任何不确定性。相反,对于一个完全随机的实验,比如之前的公平抛硬币,不确定性是最大的,等于 0.25。
  • 可靠性 (REL):可靠性项衡量每组中的平均预测与组中的平均成功率之间的偏差(差异)。这告诉我们,我们的模型是否预测“好”的概率。模型越精确,这一项越趋向于零,如果每个组只有一个目标,我们有 REL=MSE。

注意:REL 术语通常可以使用校准方法来“强制执行”。

  • Resolution(RES):Resolution 项通过计算组内平均成功率与全局成功率的差异来衡量分组的质量。该值不能强制执行,但理想情况下,我们希望它尽可能高。高分辨率意味着分组可以很好地区分病例,当每组只有 1 个目标值时,分辨率最高,分辨率=UNC。
  • 仓内方差 (WBV):这是预测的平均组内方差。当不同的概率组合在一起时,该值会增加,否则会减少。当 REL 减小时,它通常增加,因为对于较大的组,平均预测概率向平均成功率收敛,通过 LLN 减小 REL,,但是因为不同的预测概率混合在一起,所以 WBV 增加。
  • 仓内协方差 (WBC):这是另一个仅由于将不同概率混合在一起而产生的术语。它是预测值和目标值之间的组内协方差,因此显示了两者的联合可变性。这也是唯一一个既可以肯定也可以否定的术语。我们希望它尽可能为正,以补偿当更大的概率值与更大的目标值相关联时发生的 WBV,反之亦然。

注意:WBV 和白细胞都为零,每个组只有一个目标。

为了可视化 MSE 分解,我们可以为 n_k = 1 到 100 个元素的 K 个组绘制公平抛硬币示例的每个项:

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

Simple case of an MSE decomposition for different groupings

正如公式中的意图,MSE 不依赖于分组,因此它仅在模型(预测概率)改变时改变。首先,WBV 和 WBC 项为零,因为只预测了一个概率,因此既没有方差也没有协方差。我们可以注意到 UNC 平台为 0.25,这代表了我们试图预测的数据的非常高(实际上是最大)的不确定性。当 n_k = 1 时,RES 自然最大并等于 UNC,但是当我们将越来越多的不同目标组合在一起时,RES 降低到零。最后但并非最不重要的是,对于最优模型,REL 的行为与预期一样,因为它在每个分组中都是最小值,并且由于大数定律,对于较大的分组,它收敛到零。

现在很明显,在原始的 MSE 度量中发生了很多事情。诚然,当试图评估具有内在随机性的任务的模型时,MSE 本身就足够好了,但分解 MSE=REL-RES+WBV-WBC+UNC 提供了更多关于该模型实际上有多好的预测概率的洞察力,这要归功于 REL 项。但是为了使 REL 能够提供信息,分组应该足够大,以便 LLN 能够生效。同时,太大的分组会使指标产生偏差,因为组内预测的概率会偏离平均值,组内成功率也会偏离平均值。

为了找到最佳分组,我们可以将目标定为最小化 REL + WBV,因为第一项希望组尽可能大,而第二项惩罚太大的组。

通过注意到当平均成功率不同于平均概率时,REL 增长,可以找到这个优化问题的近似解决方案。对于足够大的组,该误差与 1/sqrt(n_k) 的数量级相同。类似地,假设我们从对预测进行排序开始,然后将它们分组到区间中,知道如果区间收敛到单个点,WBV 将减小,我们可以最小化区间长度以最小化 WBV。我们还注意到,假设我们假设预测是均匀分布的,区间长度是N _ k/N——这是一个很大的假设,但这里只是寻找一个近似解。为了补偿优化目标中任何缺失的系数,我们最小化这两项的线性组合:

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

因此,我们找到了一个依赖于一些参数的近似解决方案,让我们改变这些参数,看看这在一些真实数据上看起来如何。

Kwyk 我们提供在线数学练习,让学生做这些练习,然后利用收集到的数据来预测学生在未来的练习中是否会成功,以校准其复杂性。我们用于此任务的分类器预测每个用户在每次练习中的概率,分布如下:

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

Histogram of the predicted probabilities of our classifier

使用这些概率,我们可以为不同的组大小绘制目标函数的演化图,并查看最小值出现的位置:

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

我们看到最佳分组确实符合我们的手工解决方案。我们还可以看到,经验最佳值大致在 N^(2/3) 附近,我们建议将此作为最佳团队规模的经验法则。

结论

总之,我们看到通常的分类标准在随机环境中是没有用的。在这些情况下,我们必须依赖回归度量,并直接评估我们的分类器预测“好”概率的能力。解决这个问题的一个方法是使用 MSE 并观察算法的表现。但是 MSE 是许多术语之间复杂相互作用的结果,每个术语都有特定的含义和目的。在随机设置中,MSE 中最有趣的部分是 REL,但这是假设我们之前已经对预测进行了分组。分组可以用几种方法进行,其中一些方法信息不够丰富。为了解决这个问题,我们必须使组足够大,以使 REL 由于 LLN 而收敛,但又足够小,以避免混合太多不同的预测概率。为此,我们提出了一个经验法则,它包括对概率进行排序,然后将 n_k = N^(2/3 个元素分组,并在此基础上使用 REL 度量来评估模型。

奖金: 我们的模型在预测学生成绩方面表现如何?

这里是我们在 Kwyk 的数据中看到的所有指标。我们已经在 500,000 个样本上训练了我们的分类器,并以 66.30%的全局成功率(目标平均值)预测了 500,000 个不同的样本。这些指标是:

  • 准确度分数(阈值 50%) = 75.34%
  • 混淆矩阵(阈值 50%):

该模型似乎随机预测了负面影响

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

  • 混淆矩阵(阈值 60%):

现在看起来没问题了…

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

  • ROC 曲线和 AUC:

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

这意味着我们的模型有 79%的机会对随机选择的正面实例评分高于随机选择的负面实例。

  • MSE : 0.168(低值,但这并不能让我们对模型有所了解)

使用我们的经验法则,对于 n_k = N^(2/3 的组) :

  • UNC : 0.223(任务非常不确定,最大 UNC 为 0.25)
  • REL : 0.0002(这个模型相当精确)
  • RES : 0.054(知道 maxRES = UNC,分组就很好了)
  • (WBV,WBC) : (0.00001,0.00003)这些值非常低,表明分组概率非常相似。

作者:Hicham EL BOUKKOURI

评估您的机器学习算法的指标

原文:https://towardsdatascience.com/metrics-to-evaluate-your-machine-learning-algorithm-f10ba6e38234?source=collection_archive---------0-----------------------

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

评估你的机器学习算法是任何项目的重要组成部分。当使用度量标准 评估时,您的模型可能会给你满意的结果,比如 accuracy_score ,但当使用其他度量标准(如 【对数损失】 或任何其他此类度量标准)评估时,您的模型可能会给出糟糕的结果。大多数情况下,我们使用分类准确度来衡量模型的性能,但是这不足以真正判断我们的模型。在本帖中,我们将介绍不同类型的评估指标。

分类准确度

对数损失

混淆矩阵

曲线下面积

F1 分数

绝对平均误差

均方误差

分类精度

当我们使用术语“准确性”时,分类准确性就是我们通常所指的。它是正确预测数与输入样本总数的比率。

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

只有当属于每个类的样本数量相等时,它才能很好地工作。

例如,考虑在我们的训练集中有 98%的 A 类样本和 2%的 B 类样本。那么我们的模型通过简单预测属于 a 类的每一个训练样本,就可以轻松得到 98%的训练准确率

当同一个模型在一个测试集上用 60%的 A 类样本和 40%的 B 类样本进行测试时,那么**测试精度会下降到 60%。**分类精度很高,但给我们达到高精度的错觉。

当小类样本的错误分类成本非常高时,真正的问题就出现了。如果我们处理一种罕见但致命的疾病,未能诊断出患者疾病的成本远远高于将健康人送去进行更多测试的成本。

对数损耗

对数损失或对数损失通过惩罚错误的分类来起作用。它适用于多类分类。处理对数损失时,分类器必须为所有样本的每个类别分配概率。假设有属于 M 个类别的 N 个样本,则对数损失计算如下:

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

在哪里,

y_ij,表示样本 I 是否属于类 j

p_ij 表示样本 I 属于类 j 的概率

对数损失没有上限,它存在于范围[0,∞)内。对数损失越接近 0 表示精度越高,而如果对数损失远离 0 则表示精度越低。

总的来说,最小化日志损失为分类器提供了更高的准确性。

混淆矩阵

顾名思义,混淆矩阵为我们提供了一个矩阵作为输出,并描述了模型的完整性能。

假设我们有一个二元分类问题。我们有一些样本属于两类:是或否。此外,我们有自己的分类器,它预测给定输入样本的类别。在 165 个样本上测试我们的模型,我们得到以下结果。

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

Confusion Matrix

有 4 个重要术语:

  • 真阳性:我们预测为是,实际输出也为是的情况。
  • 真否定:我们预测 NO 而实际输出 NO 的情况
  • 误报:我们预测的是而实际输出是没有的情况
  • 假阴性:我们预测为否而实际输出为是的情况。

矩阵的精度可以通过取**“主对角线”**上的值的平均值来计算,即

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

混淆矩阵构成了其他度量类型的基础。

曲线下面积

曲线下面积(AUC) 是最广泛使用的评估指标之一。它用于二分类问题。分类器的 AUC 等于分类器将随机选择的正例排序高于随机选择的负例的概率。在定义 AUC 之前,让我们理解两个基本术语:

  • 真阳性率(灵敏度):真阳性率定义为 TP/ (FN+TP) 。真阳性率对应于所有阳性数据点中被正确认为是阳性的阳性数据点的比例。

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

  • 真阴性率(特异性):真阴性率定义为 TN / (FP+TN) 。假阳性率对应于所有阴性数据点中被正确认为是阴性的阴性数据点的比例。

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

  • 假阳性率:假阳性率定义为 FP / (FP+TN) 。假阳性率对应于阴性数据点相对于所有阴性数据点被错误地认为是阳性的比例。

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

假阳性率真阳性率都在**【0,1】范围内。 FPRTPR 都是在不同的阈值下计算的,例如(0.00,0.02,0.04,…)。1.00)并绘制图表。 AUC【0,1】**中不同点的假阳性率对真阳性率的曲线下面积。

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

显然, AUC 的范围为[0,1]。值越大,我们模型的性能越好。

F1 得分

F1 分数用于衡量测试的准确性

F1 分数是精确度和召回率之间的调和平均值。F1 分数的范围是[0,1]。它告诉您您的分类器有多精确(它正确分类了多少个实例),以及它有多健壮(它不会遗漏大量实例)。

高精度但低召回,给你一个非常准确的,但它错过了大量的实例,难以分类。F1 分数越大,我们模型的性能越好。数学上,它可以表示为:

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

F1 Score

F1 评分试图在精确度和召回率之间找到平衡。

  • **精度:**是正确的阳性结果数除以分类器预测的阳性结果数。

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

Precision

  • **回忆:**是正确阳性结果数除以 所有 相关样本数(本应鉴定为阳性的所有样本)。

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

Recall

平均绝对误差

平均绝对误差是原始值和预测值之差的平均值。它为我们提供了预测与实际产出的差距。然而,它们不能给我们任何关于误差方向的概念,即我们是低估了数据还是高估了数据。数学上,它表示为:

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

均方误差

均方误差(MSE)非常类似于平均绝对误差,唯一的区别是 MSE 取原始值和预测值之差的平方的平均值。MSE 的优点是更容易计算梯度,而平均绝对误差需要复杂的线性编程工具来计算梯度。由于我们取误差的平方,较大误差的影响变得比较小误差更明显,因此模型现在可以更多地关注较大误差。

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

Mean Squared Error

就是这样。

感谢阅读。对于任何建议或疑问,请在下面留下您的评论。

编辑

正如许多人指出的那样,一些术语中几乎没有错误。我想,我应该在发表这篇文章之前仔细阅读它。干杯!

参考文献

[## 理解对数损耗

对数损失,或简称为对数损失,是一种分类损失函数,常用作 kaggle…

www.exegetic.biz](http://www.exegetic.biz/blog/2015/12/making-sense-logarithmic-loss/) [## 混淆矩阵术语简单指南

混淆矩阵是一个表格,通常用于描述分类模型的性能(或…

www.dataschool.io](http://www.dataschool.io/simple-guide-to-confusion-matrix-terminology/) [## API 参考-sci kit-了解 0.19.1 文档

这是 scikit-learn 的类和函数引用。请参阅完整的用户指南了解更多详情,因为…

scikit-learn.org](http://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics) [## 如何解读 F-measure 值?

我想知道如何解释 f 值的差异。我知道 f-measure 是一个平衡均值…

stats.stackexchange.com](https://stats.stackexchange.com/questions/49226/how-to-interpret-f-measure-values) [## AUC 代表什么,是什么?

到处寻找,也没能找到 AUC,如与预测相关的,代表什么或意味着什么。

stats.stackexchange.com](https://stats.stackexchange.com/questions/132777/what-does-auc-stand-for-and-what-is-it)

如果你喜欢这篇文章,请点击👏图标来支持它。这将有助于其他媒体用户找到它。分享一下,让别人也能看。

2015 年大都市家庭装修支出趋势分析和 2017 年预测

原文:https://towardsdatascience.com/metropolitan-trends-analysis-for-home-improvement-spending-in-2015-and-projection-for-2017-ca2a8609ceba?source=collection_archive---------21-----------------------

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

Python 中的熊猫和 Plotly & Seaborn 中的图形分析

数据集:来自哈佛大学住房研究联合中心。我在之前发表在数据科学的文章中使用了相同数据集的子集。

该数据集中感兴趣的特征:

  • 25 个美国大都市地区
  • 收入中位数:2015 年
  • 房屋价值中位数:2015 年
  • 可自由支配的”(厨房、浴室、房间扩建和外部附件)、“替换”(外部、内部、系统和设备)和“其他”(灾难修复、地段或庭院的改善)家居装修支出类别
  • 2015 年家装总支出
  • 2017 年预计实际年度百分比变化

我的分析的要点:

  • 交互式图表,以便更仔细地查看这些数字
  • 可自由支配支出和替代支出呈现负相关
  • 房屋价值中值和收入中值(显然)高度相关
  • 每位业主的平均支出(房屋装修)和房屋价值中值并不能说明全部情况
  • 2015 年家装支出趋势和 2017 年预测
  • 相关矩阵
  • 附 Jupyter 笔记本在最后看到的原始工作

让我们现在开始深入分析。下面是各种特性的相关矩阵表。有趣的是,中值收入和重置类支出百分比之间呈负相关,而中值收入和可自由支配的家庭装修支出呈正相关。这是否意味着随着收入的增加,越来越多的人喜欢改造他们的厨房/浴室/或者增加一个房间/户外设施?或者替换类别上的项目不需要更改?还是随着收入的增加,房主喜欢让他们的房子现代化?有趣的假设,但我没有分析足够的数据来得出任何结论。

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

下图显示了相关性的强度。一些负相关让我感到惊讶。例如,房屋价值中位数和重置类支出。这将是一个有趣的调查,如果花在美化厨房或/和增加更多的房间等内部装饰上的支出会推动房屋价值的上升。这超出了我在这篇文章中的分析范围。

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

第一张图显示了可自由支配支出百分比与替代支出百分比之间明显的负相关关系。可自由支配的支出包括厨房、浴室和户外露台等,而替代支出包括屋顶、窗户和绝缘等项目。从图表来看,房主似乎可以负担得起/选择在其中一个类别上花费,而不是两个都花。

一些大都市地区比其他地区更贵/更值钱。很明显,中等收入水平较高的城市拥有更昂贵的住房。

既然我们刚刚讨论了房屋价值和收入的中位数,那么看看在同一个大都市地区,每位房主在房屋装修上的平均支出会很有意思。从图中可以看出,平均每位业主的支出看起来更低。

上图没有非常清晰地显示出每位车主的平均支出。所以我把它画在下面:

2015 年的家装支出和 2017 年的预测在所有 25 个大都市地区几乎完全重叠。这对企业来说既是好消息也是坏消息。这是一个好消息,因为市场看起来很稳定,没有任何冲击和投机,但另一方面,这也意味着市场额外增长或井喷式增长的可能性较小。

上图迫使我在下图中画出预计的实际年度百分比变化。威斯康星州密尔沃基市和密苏里州堪萨斯市预计增长率最高,而德克萨斯州休斯顿市和佛罗里达州迈阿密市预计增长率为负值。

我的 Jupyter 笔记本展示了数据集和原始作品。

使用 Jupyter 笔记本的 ESP 上的 MicroPython

原文:https://towardsdatascience.com/micropython-on-esp-using-jupyter-6f366ff5ed9?source=collection_archive---------3-----------------------

让我们使用 Jupyter 笔记本在 ESP 上玩 MicroPython,以便从传感器获取数据并在物理世界中采取行动。

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

1.介绍

在之前的一篇文章中,我们探讨了如何使用 Jupyter 笔记本控制 Raspberry Pi:使用 Jupyter 笔记本进行物理计算

这是一次很棒的体验,一旦项目运行良好,我就想,“在 ESP8266 上(甚至在 ESP32 上)使用 MicroPython 测试 Jupyter Notebook 怎么样?”。

众所周知,Jupyter Notebook 是一个开源的 web 应用程序,允许您创建和共享包含实时代码、等式、可视化和叙述性文本的文档。用途包括数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。对于“更多”,我们还探讨了“物理计算”。

到目前为止,在我的项目中,我主要使用由 Arduino IDE 使用其 C/C++类型语言编程的 ESP8266–01、8266–12E(node MCU)和 ESP32 来探索物联网和物理计算项目。但是另一个用于编程这些设备的伟大工具是 MicroPython:

MicroPython 是 Python 3 编程语言的一个精简而高效的实现,它包括 Python 标准库的一个小子集,并针对在微控制器和受限环境中运行进行了优化。它的目标是尽可能与普通 Python 兼容,以允许您轻松地将代码从桌面转移到微控制器或嵌入式系统。

此外,我认为使用 Jupyter Notebook 对使用 MicroPython 的 ESP 设备进行编程是一个很好的工具,可以向孩子们教授物理计算,还可以帮助科学家在获取数据时快速进入真实世界玩传感器。

这是我们将在本教程中尝试完成的任务:

  • 输出数字信号以打开/关闭 LED
  • 从按钮读取数字输入
  • 输出 PWM 信号以使 LED 变暗
  • 使用 PWM 输出控制伺服电机位置
  • 读取模拟信号(使用 LDR 的亮度)
  • 读取温度阀 1 线(DS18B20)
  • 读取温度和湿度(DHT22)
  • 通过 I2C 总线使用有机发光二极管显示数据。

2.安装 MicroPython

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

对于一个新的 NodeMCU(或 ESP32),要做的第一件事是擦除其内存中加载的内容,“刷新”一个新的固件,这将是 MicroPython 解释器。

A.获取新固件:

进入网站: MicroPython 下载并为您的设备下载相应的固件:

例如,对于 ESP8266,最新版本为:

esp8266-20180511-v1.9.4.bin (Latest 01Jun18)

(你可以在这里找到如何安装固件的细节)

理想的情况是创建一个目录,您将在其中使用 MicroPython。例如,对于 mac,从您的根目录开始:

cd Documents
mkdir MicroPython
cd MicroPython

B.将下载的 ESP8266 固件移动到这个最近创建的目录中。

此时:使用串行 USB 电缆将 NodeMCU 或 ESP32 连接到您的 PC。

C.使用以下命令检查您的设备正在使用的串行端口:

ls /dev/tty.*

就我而言,我得到了:

/dev/tty.SLAB_USBtoUART

D.安装 esptool (用于刷新/擦除设备固件的工具)

pip install esptool

E.擦除 NodeMCU 闪存:

esptool.py --port /dev/tty.SLAB_USBtoUART erase_flash

F.刷新新固件:

esptool.py --port /dev/tty.SLAB_USBtoUART --baud 460800 write_flash --flash_size=detect 0 esp8266-20180511-v1.9.4.bin

安装固件后,您可以在终端上使用命令“Screen”玩 REPL*:

screen  /dev/tty.SLAB_USBtoUART 115200
>>> print (‘hello ESP8266’)
>>> hello ESP8266

如果你在 REPL,使用:

[Ctrl+C]来中断 pgm 和

[Ctrl+A] [K] [Y]退出并返回终端。

  • REPL 代表“读取评估打印循环”,是您可以在 ESP8266 上访问的交互式 MicroPython 提示符的名称。你可以在这里了解更多关于 REPL 的信息。

3.安装 Jupyter MicroPython 内核

为了通过串行 REPL 与 MicroPython ESP8266 或 ESP32 交互,我们需要安装一个特定的 Jupyter 内核。

这只需要做一次。

Jupyter 文档网站,我们可以列出所有“社区维护的内核”。在那里,我们将被送到:

Jupyter MicroPython 内核

一旦我们在机器上安装了 Python 3(在我的例子中是 Mac),使用 shell 命令(即在命令行上)将存储库克隆到一个目录中:

git clone https://github.com/goatchurchprime/jupyter_micropython_kernel.git

接下来,使用 shell 命令将库(在可编辑模式下)安装到 Python3 中:

pip install -e jupyter_micropython_kernel

这将在 python/中创建一个指向该目录的小文件…/site-packages 目录,并使它能够在以后得到改进时“git update”这个库。

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

这里可能会出错,如果您安装了大量不同版本的 python,您可能需要“pip3”或“sudo pip”。

使用 shell 命令将内核安装到 Jupyter 中:

python -m jupyter_micropython_kernel.install

这将创建一个小文件”。local/share/jupyter/kernels/micropython/kernel . JSON ”, jupyter 用它来引用它的内核。

要找出您的 kernelspecs 存储在哪里,您可以键入:

jupyter kernelspec list

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

终端 PrintScreen 显示了我在机器上安装的内核列表。注意,在我的例子中,我使用 PIP3 命令安装了 MicroPython 内核,因此,这个内核与其他内核不在同一个目录中(当我试图使用 PIP 安装我的内核时,出现了一个错误)。

现在运行 Jupyter 笔记本:

jupyter notebook

在笔记本中单击右上角的“新建”按钮,您应该会看到列出的内核显示名称:“MicroPython — USB”。

在第一个单元格中,您需要定义将要使用的端口和波特率(115200 就可以了):

%serialconnect to --port=/dev/tty.SLAB_USBtoUART --baud=115200

作为响应,单元格将返回:

Connecting to --port=/dev/tty.SLAB_USBtoUART --baud=115200
Ready.

就是这样!当“Ready”出现时,您应该能够通过运行单元来执行 MicroPython 命令。

让我们试试:

print ('hello esp8266')

您应该会在储存格的输出上收到 ESP8266 的回应:

hello esp8266

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

4.LED 闪烁

像往常一样,让我们开始我们的物理计算之旅,“闪烁的 LED”。

低于 NodeMCU 的典型引脚排列(ESP8266–12E 1.0 版):

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

可用管脚有:0、1、2、3、4、5、12、13、14、15、16,对应的是 ESP8266 芯片的实际 GPIO 管脚数。请注意,许多最终用户板使用自己的专用引脚编号(例如标记为 D0、D1 等)。

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

在 NodeMCU 引脚 0 (D3)上安装一个 LED 并测试它,打开和关闭它:

# import library to deal with pins:
from machine import Pin# define pin 0 as output
led = Pin(0, Pin.OUT)# define value of "led" as "1" or "True" to turn on the LED
led.value(1)# define value of "led" as "0" or "False" to turn off the LED
led.value(0)# also you can use .on() or .off methods to control the pin:
led.on()
led.off()

现在,让我们导入一个时间库并使 LED 闪烁:

from time import sleepfor i in range(5):
    led.on()
    sleep(0.5)
    led.off()
    sleep(0.5)

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

5:输入数字信号

你可以在 NodeMCU 上读取的简单传感器数据可以通过一个按钮获得。

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

让我们如图所示,在 13 号插脚(D7)和 GND 之间安装一个按钮。

我们按钮的连接方式是,引脚 13 的正常状态为“高”(因此我们将使用一个内部上拉电阻来保证这种状态)。按下时,引脚 13 将为“低”。

# define pin 13 as an input and activate an internal Pull-up resistor:button = Pin(13, Pin.IN, Pin.PULL_UP)# Read button state:
print(button.value())

当运行上述单元时(不按按钮),结果将是:

1

按下按钮,再次运行电池:

# Read button state:
print(button.value())

现在的结果是:

0

请注意,停止按下按钮不会将“单元格值”返回到“1”。若要查看“^ 1”,您必须再次运行该单元格。

现在让我们做一个小程序,仅当按钮被按下时才打开 LED:

print (button.value())
if button.value() == 0:
    led.on()
else:
    led.off()

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

6.脉宽调制

除引脚(16)外,所有引脚都可以使能 PWM。所有通道都有一个单一的频率,范围在 1 到 1000 之间(以 Hz 为单位)。占空比介于 0 和 1023 之间,包括 0 和 1023。

开始调用适当的库:

from machine import Pin, PWM

有几个命令可用:

pwm0 = PWM(Pin(0))      # create PWM object from a pin
pwm0.freq()             # get current frequency
pwm0.freq(1000)         # set frequency
pwm0.duty()             # get current duty cycle
pwm0.duty(200)          # set duty cycle
pwm0.deinit()           # turn off PWM on the pin

或者您可以设置立即配置 pin:

pwm2 = PWM(Pin(2), freq=500, duty=512)

让我们将连接到引脚 0 的 LED 从关闭调光到打开:

from machine import Pin, PWM
pwm0 = PWM(Pin(0), freq=1000, duty=0)
for i in range (0,1023,20):
    pwm0.duty(i)
    sleep(0.1)
    pwm0.duty(0)
    pwm0.deinit()

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

控制一个伺服电机怎么样?

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

让我们在 NodeMCU 上安装一个小的爱好伺服,如图所示。请注意,我将伺服 VCC 连接到 NodeMCU +3.3V。这对于本教程来说是可以的,但在实际项目中,您必须将伺服 VCC 连接到外部+5V 电源(不要忘记将 GNDs 连接到 NodeMCU GND)。

伺服数据引脚将连接到 NodeMCU 引脚 14 (D5)。

伺服系统通常以 50Hz 的频率工作,然后在大约 40 和 115 之间的占空比将它们分别从 0 度定位到 180 度。占空比 77 会将伺服定位在其中心值(90 度)。

servo = PWM(Pin(14), freq=50)

在不同位置测试伺服系统:

# Minimum position (angle 0)
servo.duty(40)# Maximun position (angle 180)
servo.duty(40)# center position (angle 90)
servo.duty(40)

您也可以创建一个简单的交换程序来测试您的伺服:

# swipping servo
step = 2
for i in range (40, 115, step):
    servo.duty(i)
    sleep (0.1)
    step = -1*stepfor i in range (115, 40, step):
    servo.duty(i)
    sleep (0.1)
    servo.duty(77)

结果下方:

我在这里不使用声纳,所以我将留给你开发一个代码来使用它。很简单 alheady!试试看!

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

7.模拟输入(测量亮度)

ESP8266 有一个引脚 A0,可用于读取模拟电压并将其转换为数字值。您可以使用以下公式构建这样一个 ADC 引脚对象:

from machine import ADC
adc = ADC(0)

接下来,您可以使用以下公式读取 A0 引脚的值:

adc.read()

例如,模拟引脚可以用来读取作为分压器的电位计的变量值。这可以被解释为用于调暗 LED 或将伺服移动到特定位置的输出。你可以根据我们目前了解到的情况来尝试一下。

另一个有用的例子是使用 LDR(“光敏电阻”)从模拟传感器捕获数据,如温度(LM35)、紫外线(UV)辐射或光度。

当光度增加时,LDR 会减小其电阻。因此,您可以用 LDR 和电阻创建一个分压器,如图所示。

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

直接读取电阻上的模拟电压,我们将获得与亮度成正比的信号。

让传感器暴露在光线下,读取 ADC 值。

现在,盖住传感器,得到一个较低的值。

就我而言:

  • 最大亮度==> adc 值> 850
  • 最小亮度==> adc 值< 40

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

8. Controlling 1-Wire Devices

The 1-wire bus is a serial bus that uses just a single wire for communication (in addition to wires for ground and power). The DS18B20 temperature sensor is a very popular 1-wire device, and here we show how to use the “onewire” module to read from such a device.

For the following code to work you need to have at least one DS18B20 temperature sensor with its data line connected to GPIO 2 (D4).

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

You must also power the sensors and connect a 4.7k Ohm resistor between the data pin and the power pin as shown in the diagram.

Import the libraries:

import onewire, ds18x20

Define which pin the 1-wire device will be connected. In our case ==>引脚 2 (D4)

dat = Pin(2)

创建单线对象:

ds = ds18x20.DS18X20(onewire.OneWire(dat))

扫描总线上的设备。请记住,同一总线上可以连接多个设备。

sensors = ds.scan()
print('found devices:', sensors)

“传感器”是一个数组,包含所有相连的单线传感器的地址。我们将使用“sensors[0]”来指向我们的传感器。

请注意,您必须执行 convert_temp() 函数来启动温度读数,然后等待至少 750 毫秒再读取数值(不要忘记导入时间库)。要读取该值,请使用:ds . read _ temp(sensors[0]):

ds.convert_temp()
time.sleep_ms(750)
print(ds.read_temp(sensors[0]))

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

9.使用 DHT 传感器读取温度和湿度

DHT(数字湿度和温度)传感器是低成本的数字传感器,配有电容式湿度传感器和热敏电阻来测量周围的空气。它们具有一个处理模数转换的芯片,并仅使用一根数据线提供数字接口。新型传感器还提供了 I2C 接口。

DHT11(蓝色)和 DHT22(白色)传感器提供相同的数字接口,但 DHT22 需要一个单独的对象,因为它有更复杂的计算。DHT22 的湿度和温度读数都有 1 位小数分辨率。DHT11 有两者的整数。自定义协议用于从传感器获取测量值。有效载荷由湿度值、温度值和校验和组成。

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

如图所示连接 DHT22。数据引脚将连接到 NodeMCU 引脚 12 (D6)。

要使用 DHT 接口,请构造引用其数据 pin 的对象。开始呼叫图书馆:

from dht import DHT22

定义适当的 pin 并构造对象:

data = DHT22(Pin(12))

获取温度和湿度值:

data.measure()
temp = data.temperature()
hum = data.humidity()print('Temp: {}oC'.format(temp))
print('Hum:  {}%'.format(hum))

为了获得最准确的结果,DHT11 每秒最多只能调用一次,DHT22 每两秒调用一次。传感器精度会随着时间的推移而降低。每个传感器支持不同的工作范围。详情请参考产品数据表。

DHT22 传感器现在以 AM2302 的名称出售,在其他方面是相同的。

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

10.I2C——使用有机发光二极管显示器

I2C 是用于设备间通信的双线协议。在物理层,它由两条线路组成:

  • SCL 和 SDA,分别是时钟和数据线。

I2C 对象是附加到特定总线上创建的。它们可以在创建时初始化,也可以在以后初始化。

首先,让我们导入库:

from machine import I2C

考虑引脚 4 (SDA)和引脚 5 (SCL)上的器件,让我们创建一个 i2c 对象:

i2c = I2C(scl=Pin(5), sda=Pin(4))

现在,你应该扫描 I2C 总线上的最终设备。下面的函数将完成这项工作,返回连接设备的数量及其地址:

def scanI2c():
    print('Scan i2c bus...')
    devices = i2c.scan() if len(devices) == 0:
        print("No i2c device !")
    else:
        print('i2c devices found:',len(devices)) for device in devices:
        print("Decimal address: ",device," | Hexa address: ",hex(device))

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

让我们在节点 MCU 上安装一个 I2C·有机发光二极管显示器,如图所示。显示器是固态硬盘 1306 (128 x 64)。

运行扫描功能:

scanI2c()

我们将得到的结果是,在地址 0x3c 找到了 1 个设备。

该地址将用于创建 oled 对象,如下所示:

import ssd1306
i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c, 0x3c)

管理显示的一些方法:

poweroff(), turns off the screen. Convenient for battery operation.contrast(), to adjust the contrastinvert(), invert the colors of the screen (finally white and black!)show(), to refresh the viewfill(), to fill the screen in black (1) or white (0)pixel(), to turn on a particular pixelscroll(), scroll the screen.text(), to display on text at the indicated x, y positionDraw lines hline(), vline() or any line line()Draw a rect rect rectangle() or rectangle filled fill_rect()

让我们测试一下我们的展示:

oled.fill(0)
oled.text("Hello esp8266", 0, 0)
oled.show()

现在,让我们在 put 有机发光二极管上显示 DHT22 传感器数据:

data.measure()
temp = data.temperature()
hum = data.humidity()oled.fill(0)
oled.text("Temp:  " + str(temp) + "oC", 0, 0)
oled.text("Hum:   " + str(hum) + "%",0, 16)
oled.show()

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

11.更进一步

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

本文为您提供了构建一个更健壮的项目的一些细节,使用 MicroPython 作为编程语言,使用 Jupyter Notebook 作为快速开发和分析的工具。

当然,如果您想在独立于您的 PC 和 Jupyter 的 NodeMCU 上运行用 MicroPython 编写的程序,您必须在任何文本编辑器中将您的代码保存为“main.py”文件,并使用 Adafruit 开发的实用程序:" Ampy "将其下载到您的设备上,以便通过串行连接与 MicroPython 板进行交互。

Ampy 是一个简单的命令行工具,通过串行连接在 MicroPython 板上操作文件和运行代码。使用 ampy,您可以将文件从您的计算机发送到 MicroPython 板的文件系统,将文件从板下载到您的计算机,甚至将 Python 脚本发送到板来执行。

安装:

sudo pip3 install adafruit-ampy

Ampy 通过其串行连接与 MicroPython 板通信。您需要连接您的主板,并安装任何驱动程序来访问它的串行端口。然后,例如,要列出板上的文件,运行如下命令:

ampy --port /dev/tty.SLAB_USBtoUART ls

为了方便起见,您可以设置一个 AMPY_PORT 环境变量,如果未指定 PORT 参数,将使用该变量。例如在 Linux 或 OSX 上:

export AMPY_PORT=/dev/tty.SLAB_USBtoUART

因此,从现在开始,您可以简化命令:

列出内部节点 MCU 文件:

ampy ls

您可以使用以下命令读取安装在 nodeMCU 上的文件:

ampy get boot.py

一旦使用文本编辑器(例如 nano)创建了一个文件,就可以使用以下命令将其安装到 NodeMCU 上:

ampy put main.py

现在,当您按下 NodeMcu 上的“Reset”按钮时,首先运行的程序是“main.py”。

对于 Windows,请参见此处的 Adafruit 说明

12.结论

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

一如既往,我希望这个项目可以帮助其他人找到进入令人兴奋的电子世界的方法!

详情和最终代码请访问我的 GitHub 存管: Pyhon4DS/Micropython

更多项目,请访问我的博客:【MJRoBot.org

来自世界南部的 Saludos!

我的下一篇文章再见!

谢谢你,

马塞洛

微软 Azure 机器学习

原文:https://towardsdatascience.com/microsoft-azure-machine-learning-336f83b0f27b?source=collection_archive---------3-----------------------

什么是机器学习?

我先说什么是机器学习。这就是这个世界,在这个世界里,我们有人类和电脑。我们人类从过去的经验中学习,而计算机通过遵循我们编程的指令来学习。问题是我们能让计算机从过去的经验中学习吗?

答案是肯定的,但这种体验有一个名字,叫做数据,因此计算机从以前的数据中学习,这就是机器学习。

机器学习模型分为两大类:有监督的和无监督的。在监督学习中,用大量数据“训练”模型,然后使用算法从未来输入中预测结果。大多数监督学习模型使用回归算法从一组连续的可能结果中计算出一个结果(例如,您的测试分数),或者使用分类算法从一组有限的可能结果中计算出一个结果的概率(例如,电子邮件是垃圾邮件或者信用卡交易是欺诈性的概率)。在无监督学习中,计算机不是经过训练的,而是呈现给它一组数据,并要求它找出其中的关系。K-Means 聚类是一种常见的无监督学习算法。关于其工作原理的详细解释,请参见 https://blog . intercom . io/machine-learning-way-easy than-it-looks/。

https://how-old.net/#的提供了一个很好的机器学习的例子。该网站由微软创建,使用先进的图像识别技术来分析你上传的照片,然后使用 ML 模型来“预测”照片中人的年龄。

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

Azure 机器学习是一种基于云的预测分析服务,为所有技能水平的数据科学家提供简化的体验。它伴随着 Azure Machine Learning Studio(ML Studio),这是一个基于浏览器的工具,为构建机器学习模型提供了一个易于使用的拖放界面。它带有一个节省时间的实验库,并具有由微软业务(如 Bing)在现实世界中开发和测试的一流算法。它对 R 和 Python 的内置支持意味着您可以构建定制脚本来定制您的模型。一旦您在 ML Studio 中构建并训练了您的模型,您就可以很容易地将它公开为一个 Web 服务,可以从各种编程语言中使用,或者通过将它放在 Cortana Intelligence Gallery 中与社区共享。

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

ML Studio 通过提供一个拖放模型来简化机器学习,您可以在该模型中构建工作流。使用 ML Studio 和它为工作流建模提供的各种模块,您通常可以不用编写一行代码就可以构建复杂的模型。但是,它允许您在工作流中的任何地方插入 R 和 Python 代码,为您可以建模的内容提供了无限的灵活性。

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

ML 从数据开始,数据可以来自多种来源。数据在使用之前通常需要被“清理”, ML Studio 包含了帮助清理的模块。(清理的示例包括删除丢失数据的行、用算法替换丢失的数据、删除重复的行以及删除包含“异常值”的行在实践中,清理数据可能非常耗时,通常会消耗构建模型所需时间的 50%。)一旦数据准备好了,你就选择一个算法,通过允许它迭代数据并在其中找到模式来“训练”模型。之后是对模型的评分和评估,这将告诉你模型预测结果的能力。所有这些都是在 ML Studio 中可视化执行的。一旦模型准备就绪,只需点击几个按钮就可以将其部署为 Web 服务,这样就可以从客户端应用程序调用它。

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

ML Studio 提供了机器学习中使用的 25 种经典算法的固定实现。它将它们分为四类。

异常检测是对数据集中不符合预期模式的项目、事件或观察结果或其他项目的识别。一个典型的例子是检查代表银行交易的数据集,并检测该组中潜在的欺诈交易。

回归算法寻求建立和量化变量之间的关系。通过在因变量和一个或多个自变量之间建立关系,回归分析能够在给定一组输入的情况下以可量化的准确度预测因变量的值。一个很好的例子可以在https://how-old.net/#看到,这个网站让你上传一张照片,然后以不可思议的准确度猜测你的年龄。该网站使用 Azure 机器学习,并将经典回归与高级图像识别相结合。

分类算法的目的是基于由已经被分类(分配到一个类别)的观察值组成的训练数据来识别观察值所属的类别。一个很好的例子是确定一封电子邮件属于“垃圾邮件”还是“非垃圾邮件”。

聚类寻求以这样的方式对一组对象进行分组,即同一组(称为聚类)中的对象彼此之间比其他组(聚类)中的对象更相似。

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

Azure ML 备忘单可以帮助你为一个模型选择正确的算法,即使你不是一个训练有素的数据科学家。例如,如果您想要使用一组输入值来预测一组连续值的输出值(例如,一个人的年龄),请使用线性回归。但是,如果您对输出的分布更感兴趣,可以使用快速森林分位数回归。使用后者的一个例子是使用生长图表来评估儿童发育。"艾比的身高占她同龄孩子身高的 10% . "相比之下,分类算法用于从一组离散的值中预测值,例如,将电子邮件分类为垃圾邮件或不是垃圾邮件。链接到备忘单http://aka.ms/MLCheatSheet

一旦部署为 Web 服务,模型就可以通过 HTTP 与简单的 REST 调用一起使用。这使得开发人员能够构建从 ML 中获取智能的“智能应用程序”。在下一个实验中,学生将构建和训练一个 ML 模型,将其部署为 Web 服务,然后编写一个使用它的客户端应用程序。

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

关于 Azure 机器学习的好书——点击这里获得你的免费书籍

在微软 Azure 机器学习工作室这里创建一个免费账户。

感谢我学习机器学习的 Udacity:)

如果你喜欢你所读的,一定要💚作为一名作家,这意味着整个世界

谢谢你,

阿德什·沙阿

在 Kaggle 上使用 Music21 和 Word2Vec 提取 MIDI 音乐数据

原文:https://towardsdatascience.com/midi-music-data-extraction-using-music21-and-word2vec-on-kaggle-cb383261cd4e?source=collection_archive---------5-----------------------

Kaggle 是一个面向数据科学家和机器学习者的社区网站,它提供了几个功能来支持他们的工作和研究。其中一个功能是脚本和笔记本的在线编辑器,他们称之为“内核”。用户可以在线创建和编辑内核,分享关于机器学习算法或 Python 数据结构等主题的知识。

我在那里看了看,看我是否能找到任何与音乐或 MIDI 文件相关的东西,但是我什么也没找到。几乎没有数据库和内核,大多数都集中在分析音乐推荐和偏好上。

这样我决定在那里创建一个新的内核来学习更多关于 MIDI 文件的知识,并通过和声序列来玩 Word2Vec 。在这篇文章中,我将从高层次上描述我所取得的一些成果。你可以在 我的 Kaggle 内核链接上找到所有代码。

主要目标:计算机辅助音乐分析

有一次,我在读关于使用神经网络生成音乐的文章,想起了另一篇关于可解释的人工智能的文章。由于神经网络有“隐藏层”,因此更难理解为什么机器“选择”使用特定的结构来创作音乐。

然后我想,与其让机器做所有的事情,我们可以用电脑来帮助学音乐的学生更好地理解音乐作品。当然,很多人都有同样的想法。例如,在 Youtube 上你可以找到几个节目视频,显示音乐中正在播放的和弦。

我的想法是创建一个内核,在那里你可以选择一组 MIDI 音乐,分析它们,并提取专注于这些作品的知识。这样我就可以回答诸如“贝多芬在这里会用哪个和弦?”或者“Sega Genesis Sonic 游戏上用得比较多的是哪些调号?”

什么是“MIDI”和“Music21”

通常当我们谈论音乐文件时,我们会想到像 MP3 扩展名这样的文件扩展名,这是数字音频的一种音频编码格式。因为它们代表了要听的音乐的音频最终格式,像“音符”或“和弦”这样的概念变得难以想象。

另一种表现音乐的方式是 MIDI 文件。**它们是一种非常简洁的方式来表现不同乐器上使用的一系列音符。**如今,从你最喜欢的艺术家那里下载一个 MIDI 文件并开始演奏是相当容易的,可以将钢琴独奏转换成吉他独奏,或者分离出你喜欢的低音部分。

根据压缩配置,通常 MIDI 文件小于 20kb,而 MP3 文件可以超过 4mb。此外,MIDI 文件描述了作品中的所有音符,因此我们可以使用任何 MIDI 编辑器轻松检查音乐结构。最后,在提取任何相关信息后,我们可以从 MIDI 文件导出一个通用的音频文件,并对其应用其他的音频处理技术,将两者的优点结合起来。

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

A MIDI file about Sonic’s famous Green Hill theme opened on MuseScore, you can easily see all notes and each instrument used there. It starts with a piano arpeggio and Synths starting playing on the second measure.

有几个库可以通过编程来操作 MIDI 文件。Music21 就是其中之一。引用他们网站的定义:

Music 21 是一个基于 Python 的计算机辅助音乐学工具包。

人们使用 music21 来回答使用计算机的音乐学问题,研究大型音乐数据集,生成音乐范例,教授音乐理论基础,编辑乐谱,研究音乐和大脑,以及作曲(包括算法和直接作曲)。

我选择在这个项目中使用它是因为:

  • 它使用 Python 代码
  • 它看起来非常健壮,从 2006 年到现在,一直有人在研究它的代码
  • 它很好地支持 MIDI 文件
  • 它有基于音符序列的音乐分析方法
  • 它可以很容易地画出情节和乐谱

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

With 4 Python lines you can render things like this using Music21, pretty cool!

使用音乐提取音符 21

Music21 使从 MIDI 文件中提取音符变得容易。您可以从每种乐器中获取所有音符,并随心所欲地处理它们。我用了一个 Sonic 的 Green Hill MIDI 文件来制作接下来的图片:

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

On my Kaggle Kernel I got all notes (excluding drums) and plotted them using a scatter plot. Compare the blue points with the piano instrument from the previous MuseScore picture and try to discover which color represents each instrument there.

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

Music21 also provides some plot methods for examples like those ones. The first one shows which notes are more frequently used while the second one shows when they are played, which is useful to detect key signature changes (which doesn’t happen in this case).

这个库提供了很多处理音符序列的方法,在这个项目中我主要使用了一个分析键签名的方法和一个从音符组合中获取和弦的方法。例如,音符序列[C,E,G]将从 c 大调音阶中产生第一个和弦。

使用 Music 减少谐波 21

一首音乐可能有数百个音符,这使得分析它变得更加困难。我们可以根据它的和声来简化它,使它更容易理解,同时丢失一些细节,如旋律。[来自维基百科](https://en.wikipedia.org/wiki/Reduction_(music%29):

在音乐中,简化是对现有乐谱或作品的改编或转录,其中复杂性降低以使分析、演奏或练习更容易或更清晰;可以减少声部的数量或者简化节奏,例如通过使用音块和弦。

考虑到被分析的小节的上下文、音乐的当前调号和当前小节的音符集,手动操作有几种方法。在这个项目中,我遵循了以下步骤:

  • 找到音乐调号
  • 对于每个小节,合计每个音符被按下的时间,并选择 4 个最频繁的音符
  • 使用 Music21 根据调号找到和弦及其函数
  • 简化和弦名称以避免类似“bII#86#6#5”的名称,即使这意味着丢失和弦信息

考虑到巴赫的 c 大调前奏曲,我用我的方法得到了下面的序列:

['I', 'ii42', 'vii53', 'I', 'vi6', 'ii42', 'V6', 'i42', ...]

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

A piano sheet showing the first four measures from Bach`s Prelude. I highlighted the first one measure and the notes which are used there. There are only C, E and G notes, so we have a C-major chord. Since the Prelude is in C-major key, the chord is a “I” as my method found. You can find more details here.

使用 Music21 和 Word2Vec 进行谐波分析

我的方法并不完美,猜错了几个和弦,但现在我们可以用每小节一根弦来描述巴赫的前奏和声。因为前奏有 32 个小节,最后我们得到一个 32 个词的列表来描述它的和声进行。

如果我们能得到所有巴赫的作品,并做同样的事情,我们会以一系列的和声序列结束,我们可以分析并发现一些有趣的关系,比如巴赫会在作品中用另一个和弦替换哪个和弦。

Word2Vec 是一种处理文本的技术,引用本文中的一段话:

Word2Vec 背后的想法非常简单。我们假设一个词的意思可以通过它的同伴来推断。这类似于一句谚语,“让我看看你的朋友,我就能知道你是谁。

如果你有两个单词有非常相似的邻居(意思是:使用它的上下文大致相同),那么这些单词可能在意思上非常相似,或者至少是相关的。例如,震惊惊骇、惊讶这些词通常用在类似的上下文中。

在我的 Kaggle 内核中,我从 Sega Genesis games 下载了 450 个 Sonic MIDI 文件,并为每个文件生成了一个谐波减少序列。然后我训练了一个 word2vec 模型来提取更多关于和弦使用的信息。

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

Key Signature histograms from Sonic games. A-minor dominates and Sonic 3 has the most diverse plot. Sonic 3 is also the game with more different composers (Six, including Michael Jackson) while other games track were composed by a single person.

有了训练好的模型,我能够回答几个仅基于声音成分的问题,一些例子:

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

In music theory, chord substitution is the technique of using a chord in place of another in a sequence of chords, or a chord progression. A good way to replace chords is to choose chords which share notes. In this picture is showed an A-minor chord (blue) and a B-minor chord (red). Since they don’t share any note, they aren’t a common chord substitution pair. My model gave “0.50” of similarity score for those chords.

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

In this picture, A-minor chord specific notes are in red while F-major specific notes are in blue. Since they share 2/3 of their notes (purple), they can be used more easily on substitutions. My model’s output when comparing those chords is “0.80”. When comparing an enharmonic chord it gives “0.95”.

最后,我使用我的模型创建了一个比较几种音乐的方法。word2vec 训练模型将每个谐波减少序列转换为数字向量,我们使用余弦相似度对它们进行比较。我选择了这个绿山 MIDI 文件作为基础,并与所有可用版本进行了比较:

  • 翡翠山主题(索尼克 2)——最相似的版本得分 0.990
  • 水城主题(索尼克 3)——最相似的版本得分 0.991
  • 桑多波利斯(Sonic & Knuckles)——最相似的版本得分为 0.963

那么我们可以说,与绿山主题相比,桑多波利斯主题具有最不同的和声结构。

The desert has no green grass, so it makes sense, right? 😛

最终考虑

我希望你喜欢这篇文章,并了解更多的音乐理论和声波主题。

关于 word2vec 的使用,我需要找到一种好的方法来衡量模型的准确性,但我之前基于音乐理论演示的测试给出了不错的结果。其他方法也有很大的改进空间,当我有更多的空闲时间时,我有几个想法可以更多地利用这些数据。如有问题或反馈,请评论。再见!

迈克·特劳特将在休赛期得到一份终身合同…但是他应该接受吗?

原文:https://towardsdatascience.com/mike-trout-is-going-to-be-offered-a-lifetime-contract-this-offseason-but-should-he-take-it-190555642395?source=collection_archive---------6-----------------------

预测 MLB 未来的薪水能帮助特劳特做决定吗?

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

2 time AL-MVP Mike Trout

1984 年,魔术师约翰逊为洛杉矶湖人队签下了历史上最赚钱的合同之一:25 年,2500 万美元。本质上,湖人给他提供了有史以来第一份“终身合同”,以显示他们对他的忠诚,并确保他们会锁定他的剩余职业生涯。显然,魔术师不会在他 2009 年结束的合同结束时一直打球(他在 1996 年退役),但在 1984 年,人们不可能想到有人会签下 2500 万美元的合同。

快进到 2018 年,我们认为如果一名运动员签了一份 2500 万美元的合同,那他就弄错了。合同似乎每年都在突破极限,看不到尽头。像斯蒂芬·库里(Steph Curry)和拉塞尔·威斯布鲁克(Russel Westbrook)这样的 NBA 明星每年赚 4000 万美元,MLB 投手扎克·格雷因克(Zach Greinke)和克莱顿·克肖(Clayton Kershaw)每年赚 3000 多万美元,甚至 NFL 也开始向四分卫和外接手发放 2500 万美元的薪水。

因此,当你有一个像迈克·特劳特这样的全宇宙棒球运动员接近自由球员,在过去 150 年里以超过所有人的水平打球,那将是一笔巨大的支票。特劳特已经是 MLB 最高位置的球员,预计在 2020 年前每年可以赚 3225 万美元。似乎这还不够,棒球专家们期待他将成为体育史上第一个签署 4 亿美元总价值合同的球员。

为了留住这一代最伟大的球员,他目前的球队洛杉矶天使队决定向他提供一份终身合同,在可预见的未来锁定他。天使们可以为他提供大量不同的选择,但如果你是迈克·特劳特,你会如何谈判这笔交易?签下合同锁定未来 20 年的职业生涯有意义吗,还是应该看看自由代理能带来什么?

我决定看看历史上 MLB 的最高工资,以预测未来几年 MLB 的工资会是什么样子,以及在自由球员时代,特劳特应该如何评价自己。

对于那些对时间序列分析更感兴趣的人来说,这个项目的代码可以在 https://github.com/anchorP34/MLB-Salary-Predictions 的查看。像往常一样,留下你对这个主题的其他想法或你感兴趣的其他分析的评论。

职业运动员赚的钱多得离谱,但情况并不总是如此。1930 年,贝比·鲁斯是第一个收入超过美国总统的职业运动员。所以当我们回顾 MLB 每年最高工资的历史时,我们真的没有看到财富的大幅增长,直到大约 80 年代和 90 年代

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

Information provided by https://sabr.org/research/mlbs-annual-salary-leaders-1874-2012

由于预测 2020 年的工资不会受到 19 世纪和 20 世纪初工资的影响,我决定将分析缩减到二战后(1945 年至 2018 年)。

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

对于任何类型的预测/预测问题,尝试找出任何使预测更容易计算的转换都是重要的一步。从上面的图表中我们可以看出,随着年龄的增长,工资呈指数增长趋势。因此,取指数函数(自然对数)的倒数将得到一个更线性的函数。

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

这更容易处理。有了线性线,我们可以采用指数平滑预测模型来预测转换后的数据,从而在模型中给出更准确的预测。

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

Time series analysis using different methods and forecasts

从表面上看,这些模型似乎非常符合这一趋势。然而,告诉某人 2020 年最高工资的自然对数将大约是 17.5 对任何人都没有帮助。因此,我们需要将数据“反转换”回其原始形式,并将模型从自然对数转换回指数形式。

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

1990 was a good year to test a CAGR model since that is where salaries really started to explode

从图中可以看出,霍尔特指数模型比简单指数模型更激进一些,后者似乎认为工资会趋于平稳。我提出的另一个预测是 1990 年至 2018 年的 CAGR(复合年增长率),这只是该时间段工资的平均复合增长率。CAGR 模型比霍尔特指数预测的斜率更陡,所以我决定使用霍尔特指数模型来预测未来的工资,因为它是其他模型之间的一个很好的分割。

根据 Holt 模型,当 Mike Trout 成为 2021 赛季的自由球员时,MLB 的预测最高工资将为 42,752,450.05 美元/年。

就特劳特谈判他的薪水而言,这意味着什么?首先,2021 年的预测工资比他现在的工资高出大约 1000 万美元。如果天使们给特劳特加薪,我会建议至少给提供预计的 2021 年的*。这一年他将能够在自由球员中检验他的价值,所以他们也可以提前几年。每个职业中的每个人都想得到自己的价值,所以从天使的角度来看,在他成为自由球员时支付最高工资将证明适当的忠诚水平。*

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

然而,从特劳特的角度来看,如果他现在就拿这笔钱,而不是等到自由球员时代,会有什么不同吗?很难说在好莱坞生活同时拿着 8 位数的薪水是不可能被击败的,但是特劳特来自东北部,为什么像费城费城人队这样的球队不会为像他这样的球员支付那么多呢?等到自由球员时代或者现在签约,在经济上有很大的不同吗?

计算方法是,从休赛期开始,到 2031 赛季,也就是他 40 岁结束这一年,现值年金为 42,752,450.05 美元。我使用了 3%的贴现率来补偿通货膨胀,因为今天的 100 美元在十年后会超过 100 美元。这就是左侧图表中的终身交易 PV。

没有终身的 PV 涉及到迈克特劳特坚持己见,等待他的合同到期,直到他成为自由球员。那就是取他现在合同的现值,然后取 2021 年到 2031 年的 42,752,450.05 美元的贴现年金。

迈克,现在不要拿钱!

除了因为接受终身合约而没有获得 1000 万美元的加薪而损失一些钱之外,特劳特还将在 13 年内损失 1600 万美元的机会成本。与不签终身合同的 4.38 亿美元现值相比,这仅仅是他终身总工资的 4%左右的增长。在最初几年,是的,1.04 亿美元与 1.2 亿美元相比是一个很大的差异,但 4.38 亿美元到 4.54 亿美元你可以选择你和你的家人将在哪里度过你的余生?**

这甚至不是一个讨论迈克,等着看你能在自由市场赚多少钱。

深度学习的里程碑

原文:https://towardsdatascience.com/milestones-of-deep-learning-1aaa9aef5b18?source=collection_archive---------3-----------------------

深度学习到现在已经有十年左右了。自问世以来,深度学习因其成功而风靡全球(见我的文章“什么是深度学习?“关于深度学习如何通过人工智能进化,以及机器学习)。以下是这些年来深度学习的一些更重要的成就。

Alex net——2012 年

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

The AlexNet Architecture (Image from the research paper: “ImageNet Classification with Deep Convolutional Neural Networks”)

  • 证明了卷积神经网络确实有效。AlexNet 及其由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey E. Hinton 撰写的研究论文“使用深度卷积神经网络进行 ImageNet 分类”通常被认为是将深度学习引入主流的原因。
  • 以 15.4%的错误率获得 2012 年 ILSVRC (ImageNet 大规模视觉识别挑战赛)冠军。(作为参考,ILSVRC 第二好的条目有 26.2%的错误率)。
  • 8 层:5 层卷积,3 层全连接。
  • 将 ReLU 用于非线性函数,而不是之前使用的传统双曲正切函数。
  • 介绍了漏失层的使用,以及克服过拟合的数据扩充。

研究论文:“使用深度卷积神经网络的图像网络分类”——Alex Krizhevsky、Ilya Sutskever、Geoffrey E. Hinton

ZF 网— 2013

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

The ZF Net Architecture (Image from the research paper: “Visualizing and Understanding Convolutional Networks”)

  • ILSVRC 2013 的冠军,错误率 11.2%。
  • 类似于 AlexNet 架构,通过一些调整和微调来提高性能。
  • 介绍了解卷积网络(又名 DeConvNet),这是一种观察 CNN 内部工作的可视化技术。

研究论文:“可视化和理解卷积网络”——马修·d·泽勒,罗布·弗格斯

VGG 网— 2014

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

The VGG Net Architecture (Image from the Keras Blog: https://blog.keras.io)

  • 获得 ILSVRC 2014“分类+本地化”类别(非总赢家),错误率 7.3%。
  • VGG 架构很好地处理了图像分类和定位。
  • 19 层网络,带 3x3 过滤器。(与 AlexNet 的 11x11 滤镜和 ZF Net 的 7x7 滤镜相比)。
  • 证明了简单的深层结构适用于分层特征提取。

研究论文:“用于大规模图像识别的深度卷积网络”——卡伦·西蒙扬,安德鲁·齐塞曼

谷歌网— 2014/2015

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

The GoogLeNet Architecture (Image from the research paper: “Going Deeper with Convolutions”)

  • ILSVRC 2014 的冠军,错误率 6.7%。
  • 介绍了 Inception 模块,它强调 CNN 的各层并不总是必须按顺序堆叠。

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

The Inception Module (Image from the research paper: “Going Deeper with Convolutions”)

  • 22 块层(单独考虑时超过 100 层)。
  • 没有完全连接的层。
  • 证明优化的非顺序结构可能比顺序结构工作得更好。

研究论文:“深入了解卷积”——Christian Szegedy、、Jia、Pierre Sermanet、Scott Reed、Dragomir Anguelov、Dumitru Erhan、Vincent Vanhoucke、Andrew Rabinovich、Google Inc .、北卡罗来纳大学教堂山分校、密歇根大学安娜堡分校、Magic Leap Inc .

微软 ResNet — 2015

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

The ResNet Architecture (Image from the research paper: “Deep Residual Learning for Image Recognition”)

  • 赢得了 ILSVRC 2015。
  • ResNet 的错误率为 3.6%,比人类的准确率更高(据说典型人类的错误率约为 5-10%)。
  • 超深(引用论文作者)架构,152 层。
  • 引入了残差块,以减少过拟合。

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

The Residual Block (Image from the research paper: “Deep Residual Learning for Image Recognition”)

研究论文:“深度残差学习在图像识别中的应用”,,,,任,,微软研究院

随着深度学习模型开始超越人类的能力,我们可以肯定地看到更多有趣的深度学习模型,以及未来几年的成就。

深度学习只是 CNN 吗?

现在,回头看看我们上面的列表,你可能会想知道“深度学习”是否只是卷积神经网络。

不完全是。

实际上,以下所有模型都被认为是深度学习。

  • 卷积神经网络
  • 深层玻尔兹曼机器
  • 深度信念网络
  • 堆叠自动编码器

但是,在深度学习领域,CNN 是最“定义”的,并且解决了更多相关的问题空间,至少目前是这样。但是,请记住,CNN 并不是深度学习的全貌。

我错过了深度学习的什么里程碑吗?请在下面添加您的评论,不要忘记喜欢这篇文章。

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

如果你想了解更多关于深度学习的知识,可以看看我的书Build Deep:Deep Learning 初学者指南 ,这本书现在已经在亚马逊上出售了。

也可以看看我的博客,感兴趣的代码,亲身体验深度学习。

另请参见:

什么是深度学习? —深度学习是如何产生的,以及它与机器学习和人工智能的关系(是的,它们的意思略有不同)。

相关链接:

你需要了解的 9 篇深度学习论文——这篇文章激发了我写这篇文章的灵感。

原载于 2017 年 7 月 31 日www.codesofinterest.com

思维编码

原文:https://towardsdatascience.com/mind-coding-99acd368d36d?source=collection_archive---------6-----------------------

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

神经健康的简单步骤

重新编码你自己的神经瘤照顾你的神经瘤中,我讨论了这样一个观点,即思维是我们自己头骨中庞大的、有生命的、复杂的湿技术系统的自然属性;我们的神经瘤,值得我们亲自关心和关注。

它是由数万亿个脉冲和通信分子产生的,这些分子在多个相互连接的反馈回路中工作。

但是,尽管如此,我们在很大程度上忽略了它。我们在一系列不断变化的注意力状态中度过每一天,让它看不见,被我们的情感所吸引。

就像太阳一样,除非是大热天,否则还是看不见的好。

这种不可见性是由于微调。经过数百万年的进化,神经瘤完美地适应了我们的环境。它特别善于发现差异,忽略相同之处。正因为如此,重新编码只是改变我们的环境来上传新的代码。

我们的环境就是我们自己,如果我们身体上发生变化(做和想不同的事情),神经瘤就会改变自己,改变形状,同时改变我们是谁。

为什么要重新编码?

让我们讨论自由意志。这里我想把有意识的选择和强迫都包括进去。

本杰明·里贝特的传统实验表明,当被要求做出选择时,我们对选择的意识比大脑中的行动落后一秒钟。其中的含义,并非没有争议,是选择首先是潜意识的,而“我选择行动”的意识是后来的描述:选择是潜意识的。

我们可能都多少意识到我们没有意识到很多事情

好吧,如果你没有意识到这一点,你可能在别人身上也意识到了。因此,你可以推断出你自己缺乏意识。

那些试图影响我们的人已经知道,从人类有史以来,甚至可能更早,我们就有有限的心理防火墙。我们真的不需要科学。但是这些天来,科学正在帮助我们很好地分析偏见、启动、推动等等。

这对于那些对操纵感兴趣的人来说是有益且有利可图的,对于那些想要辩护的人来说也应该是同样的兴趣。

当心,因为除非你花时间掌握你的防御,否则其他人会为了他们自己的目的操纵你的思想形态。

你的神经系统中保留的模式,你的信仰、习惯和嗜好,都是物质的东西。它们被写在神经元和它们的连接中,作为真正的代码通道。这种对心理的物理本质的理解有助于我们理解为什么不学习无用的想法或习惯如此困难。

如果我是无意识的,这有什么意义?

我们都是无意识的,有意识的。我们都是,一直处于流动的交换中。

意识最大的美和便利就是从那个观察的位置来看我们自己,并进行批判性的评论。

对许多人来说,这种评论本身就带有负面情绪和习惯性。这可能是个问题。但这是一个可以通过认知行为疗法来解决的问题,例如,这种疗法明确寻求提高自我意识和解决习惯问题。

有意识的意识会阻碍我们无意识的选择并说不!

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

Is it a no?

不!是对冲动、信念、习惯和情感的强有力的逻辑阻挡。

通过变得更有自我意识;通过练习和探索我们自己的行为和信念的根源,通过理解记忆、情感和信念以及它们之间的相互联系,我们可以训练自己更有能力去注意一个选择,在注意中更好地理解它,在理解中更有能力说“不!”。

当“不!”完成了它的工作,意识可以进一步帮助,通过重新编码那些路径,通过清除我们在社会、他人、我们的环境的影响下允许刻在我们自己头脑中的代码。

为了知道我们受到了潜意识的影响,我们必须首先能够注意到选择并怀疑这种影响,然后停止自己,然后重新评估。考虑到我们可能会与自己的情绪冲动作斗争,我们可能会考虑建立一个赢得比赛的能力。

情感至上

你的神经瘤不断沐浴在来自环境的情感信号中。当我说情绪时,我指的是生化物质。这些是调节我们感觉的分子,包括酶和激素,它们构成了我们最古老的电路。

情绪进化成了让我们去关注其他事情的信号。

情绪不是感觉,这些是我们根据上下文赋予情绪的单独标签。例如,恐惧,或担忧,或内疚,或羞耻,都可能有类似的激素含量。这种情绪的描述和体验取决于我们是否受到攻击,或者担心如果我们被发现做了坏事,我们可能会受到攻击。

不幸的是,感觉是如此强大,以至于我们经常忘记它们是其他事情的信号,而是将我们的全部注意力转移到感觉本身上。

在重新编码之前,让我们先看看一些简单的情感描述。

以下是你可能已经感受到的一些事情的例子(感谢一本很棒的书,安吉拉·阿克曼和贝卡·帕格里西的《情感辞典:性格表达作家指南》):

  1. 自信——对自己的能力或品质的自信。
  2. 不确定性——不确定的状态。
  3. 好奇心——学习或寻求任何知识的欲望,求知欲。
  4. 冷漠——冷漠或不感兴趣的状态。
  5. 骄傲——一种适当的自尊和满足感,源于自己或他人的成就,或源于财产或关系的品质。
  6. 羞辱——一种感觉被贬低、羞辱或没有价值的状态。自尊心受挫。
  7. 平和——一种没有焦虑的平静状态。
  8. 不知所措——被感情或环境所征服。
  9. 渴望——对即将到来的事情的热情。
  10. 蔑视——缺乏尊重或无视。
  11. 幸福——一种健康的状态;快乐的满足感。
  12. 怨恨——对某个行为、言语或人的愤怒,感觉受到了伤害或侮辱。

这些只是其中的几个。每个都有以下特点:

  1. 身体化学,我们“感觉到它们”。
  2. 信仰,我们相信它们,这是基于;
  3. 回忆,我们记得导致它们的事件,并且倾向于重复那些已经发生了很多次的故事。
  4. 一种延伸的身心反应,一种完整的神经状态。

这些感觉中的每一种都可能是一种强烈的体验,例如怨恨是什么样的?

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

Contempt

也许头脑中会充满对目标不友好的想法,对不公平或缺乏正义的挫折感,幻想另一个人会垮台,喜怒无常,想独处,专注于一个人或一种情况而损害其他关系,试图通过考虑把其他人带进来而创造一种愤怒的暴民心态。

也许身体会被神经瘤调整,以表现出双臂交叉的怨恨,与他人的物理距离,双手握成拳头,僵硬的姿势,颈部和肩部紧张,不同意地摇头,但什么也不说,走出房间,怒气冲冲,跺着脚上楼,用不必要的力量关门,指指点点和戳空气以示强调。

也许有一张紧闭的嘴,皱眉,抱怨,粗鲁,撅嘴,骂人,音量或强度上升的声音,争吵,低声咕哝或诅咒,扭曲的嘴,酸溜溜的表情,露出牙齿的卷曲嘴唇,轮廓分明的下巴,尖酸的语气,嘲笑别人,在别人背后说话,说闲话,不友善的微笑。

可能会有一个眯着眼睛的平板表情,看过去而不是看他们,一个艰难的表情。

它可能包括拒绝被善意或体贴收买,回避问题的根源,忽视和解的努力,贬低他人的地位或成就,出于受委屈的感觉而破坏他人的项目。

(感谢安吉拉·阿克曼和贝卡·普利西,链接:http://writershelpingwriters . net/the-emotion-thesaurus-a-writers-guide-to-character-expression)。

认出来了吗?

入围的 12 种感觉中的每一种都可以用同样的细节来描述,你会认出它们。然而,没有一点研究和讨论,我们让自己在这些国家的摆布。我们从一个流向另一个,受到我们自己的思想或环境接下来发生的任何刺激的冲击。

是时候收回一些控制权了。防止营销机构操纵我们账户的钱和屏幕上的数据。是时候插入一些防火墙和保护措施了。

回到思维编码

环境是我们神经代码的基础。因为我们总是在当下,环境描述了我们此时此刻所处的物理状态。

这就是为什么正念,它给我们一种方法,让我们更好地适应情感,进入情感背后的物质世界,它是如此有帮助,就像一扇门,通向一个被保护的,或更有选择的心灵。

你可以阅读重新编码你的神经瘤来了解它是如何工作的。下面是一些练习的方法。

1.休息一会儿

当然,你可以去度假,去一个远离通常的环境触发因素的地方。我们都知道这一招,它或多或少有用,取决于你在家庭中的角色。

家庭仍然可以成为感情的主要触发因素,至少你不在工作,新的地点和分散注意力的经历会及时诱导平静。

走开。为了让逃离变得有力量,在你离开之前注意你的状态(写在日记里)。等到你恢复了平静(再写一遍)。注意“远离它”的练习带来的不同。这是滑雪假期的正常冥想。

2.远离技术人员!

远离你的社交媒体。离开你的收件箱。

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

Walk or cake?

此刻,你可以通过掌控自己来练习“远离它”。如果你“感觉”太多,无法做到,那就离开屏幕 10 分钟或更长时间。把电话留下。不能?上瘾了?

剧烈运动或改变地点的结合会改变浸泡在你的神经细胞中的化学物质。通常这意味着你回来的时候更加敏锐和冷静。你需要以足够快的速度行走或奔跑,以分散注意力,或者有意识地沿着你的路线专注于小说。

有目的地做,每天做几次,每小时做一次。制定一个常规。记下你之前和之后的感受,并记录下不同之处。你将学习如何通过选择创造不同的精神状态。

3.健身拳击

每天一到两次,进行剧烈运动。你喜欢什么都可以,跑步,健走,拳击,骑自行车,旋转。注意任何健康警告,如果你增加血流量,呼吸频率,并从事一些强烈的身体活动,它会推动情绪化学物质并将其清除,同时增加我们从中自然获得的积极激素,并以氧合血的形式增加神经细胞的能量。

期待你的眼睛闪闪发光,你的妙语连珠,一两个笑话出现,让自己和你的处境不那么严肃;足够变得更好。为了让它变得有意识,在日记中写下你以前的样子,花时间注意你现在的样子。通过这种方式,你可以学习如何轻松地产生特定的精神状态。

警觉、放松和准备就绪是正常的状态。去更精确的?只是需要多长时间才能获得收益?如果你以不同的方式尝试事情,例如改变强度、时间、频率,有或没有同伴,会发生什么?在你自己身上实验,一点机器学习,直到你得到它。

4.打开你的意识

为了让你的注意力集中到现在,做几次深呼吸就可以让你意识到现在。

在呼气时,注意如果你的眼睛是静止的,并且你注意周边视觉,你能看到什么。

然后再加上你周边听觉能听到的。

除此之外,还要感受你身体的四周,它的位置,它的重量,任何不适,还有你的呼吸。

只是保持正常呼吸一会儿,尽可能多地用眼睛、耳朵、感觉去注意,保持静止但全神贯注。通常你会发现,只需一点点练习,这将平静内心的声音和感觉,并产生一种通常称为“集中”的状态。

5.像这样引导

如果你是一个领导者,如果你带头鼓励/允许良好的神经习惯,你会从你的团队中获得更多的闪光点和生产力。允许散步,允许技术休息时间,谈论情绪过载,练习自我学习,发展自我意识、掌控力和灵活性,并与团队分享你的经验作为一项关键的软技能。

科学表明,在办公桌前坐两组,每组 5 个小时,中间有短暂的午餐休息时间,这意味着比同样时间有规律的休息所做的事情要少得多。

6.指压

你应该试试指压按摩。我不确定指压按摩期间我的神经瘤会发生什么。这是一个奇怪而神秘的地方,从那里我慢慢地出现并改变了(以一种好的方式)。我只能推荐这段经历,让你们自己记下来。我还在研究这个状态是什么。

明白了吗?

我们经常做的许多事情,已经被社会所接受,比如购买食物,可以用心去做。这意味着选择关注行为的物理性。

通过关注你在活动之前和之后的状态,关注你在活动期间的身体状态——你的呼吸和运动,或者你的外部环境,或者两者兼而有之。

所有这些都很容易做到,每天都是如此,我们已经这样做了,部分是因为我们知道我们需要这样做,而且这样做很有效。在你的日常练习中加入有意识的注意,你会很快建立起一种自我意识,知道你如何改变状态,以及你能为自己做些什么来达到更好的状态。

认为精神状态是一个非常强大的工具。一个人工智能编码员会给他们的眼睛牙齿来生成。就像 SWOT 分析,或者思维导图。

想象一下,如果你掌握了成功所需的五种最强大的精神状态。有了这些工具,你能在生活中取得什么成就?

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

Somewhat happy robot

然后你甚至可以选择一件家务,知道以某种方式做,会让你心情非常好。

但也许让编码人员将这些状态写入他们的机器学习更容易。然后,你可以在你最新的人工智能中购买一个好的记忆(对你停车的地方),或者一种信心。当然,这不需要你的努力,只需要一些现金。

围绕我们的思维和行为习惯的自律总是有用的。它把一些人标记出来。在一个智能工具将我们的影响扩大到更广的世界里,这甚至更为重要。

像所有的工具一样,纵观历史,智能工具将彻底改变我们的生活。了解我们自己是我们能够保持控制的唯一有意义的方式,而不是奴役其他人,甚至最终奴役人工智能本身。

我很好奇会不会有人专门用 AI/ML 来反思人类的心理健康。如果你是我喜欢聊天的人,请保持联系。

尼克·梅休总经理 www.alembicstrategy.com

用 R 挖掘 Google 档案搜索数据

原文:https://towardsdatascience.com/mining-google-archive-search-data-with-r-51f4f76c2d21?source=collection_archive---------9-----------------------

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

从你的在线行为中学习

认领你的谷歌数据相对容易。以下是申请谷歌关于你的所有数据的步骤。免责声明——自 2018 年 8 月 7 日起,此处的所有链接和代码都可以使用,但是 Google 对其代码或 URL 的任何修改都可能导致它们停止工作。

1)登录您的 Google 帐户,然后点击隐私。您也可以使用下面的链接。

在这里,您可以找到与您帐户的安全和隐私设置相关的所有信息。如果这是你第一次查看谷歌的隐私设置,这可能会让人不知所措。这有点像所有安全/隐私相关事务的谷歌中心。

  • https://myaccount.google.com/privacy

[## 登录— Google 帐户

编辑描述

myaccount.google.com](https://myaccount.google.com/privacy)

2)找到下载您的数据档案的链接或访问下面的链接。

数据存档的链接可以在你的谷歌账户的隐私设置中找到。

  • 【https://takeout.google.com/settings/takeout

[## 登录— Google 帐户

编辑描述

takeout.google.com](https://takeout.google.com/settings/takeout)

现在,您应该会看到如何开始下载内容的说明。

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

3)从存档页面—选择所有 Google 产品,为您的数据创建完整的存档。

确保选择所有产品,以便您拥有完整的数据存档。下面的图片只展示了 4 种产品,在我写这篇文章的时候大约有 50 种不同的产品。

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

4)选择产品后,选择存档文件类型(。zip)。

您还必须选择存档大小。在这种情况下,让我们选择最大归档大小,以确保您的所有帐户数据都在其中。

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

5)默认的归档交付方式是通过电子邮件。现在,只要等到你收到谷歌发来的邮件,里面有下载数据的链接。

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

几分钟后(取决于谷歌掌握了你多少数据),会有一封带有下载数据链接的电子邮件。你也可以去管理档案并从那里下载数据。

请记住,在谷歌禁用该链接之前,您只有有限的时间来下载您的数据,并且您必须提出新的请求。

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

数据准备——提取谷歌搜索信息

解压缩归档文件后,名为📁外卖应该显示所有选定的谷歌产品的数据。接下来我们将挖掘 Google 搜索数据,因此我们需要找到相关的文件夹/文件。搜索数据以 html 文件的形式出现,位于搜索文件夹内的我的活动文件夹中。这个文件被命名为MyActivity.html。 记下文件的位置(路径),因为我们稍后会用到它。

  • 📁外卖 MyActivity.html➔我的活动➔搜索➔

分析工具包:需要 R 包

检查、安装和加载所需的 R 包

[## 哈德利/rvest

R 的简单网页抓取

github.com](https://github.com/hadley/rvest)

帮助您从网页上抓取信息。它旨在与 magrittr 合作,使表达常见的 web 抓取任务变得容易,其灵感来自于像 beautiful soup 这样的库。

[## juliasilge/tidytext

tidy Text——使用 dplyr、ggplot2 和其他 tidy 工具进行文本挖掘…

github.com](https://github.com/juliasilge/tidytext)

提供函数和支持数据集,允许文本与 tidy 格式相互转换,并在 tidy 工具和现有文本挖掘包之间无缝切换。

[## tidyverse/lubridate

lubridate——让在 R 中处理日期变得简单一点

github.com](https://github.com/tidyverse/lubridate)

Lubridate 使 R 用日期时间做的事情变得更容易,并使 R 做不到的事情成为可能。

[## ifellows/wordcloud

这是一个 R 包,可以创建漂亮的单词云,可视化文档之间的差异和相似之处,并且…

github.com](https://github.com/ifellows/wordcloud)

创建漂亮的文字云的功能,可视化文档之间的差异和相似性,并避免在散点图中过度绘制文本。

[## tidyverse/tidyverse

从 tidyverse 轻松安装和加载软件包

github.com](https://github.com/tidyverse/tidyverse)

tidyverse 是一组协调工作的包,因为它们共享公共的数据表示和 API 设计。

代码

数据准备:提取搜索数据

使用 rvest 包,我们可以读取包含相关搜索数据的 html 文档。通过利用正则表达式(regex),我们可以从 HTML 文档中提取相关信息。

从 Html 数据中提取时间戳

从 Html 数据中提取文本

从数据中提取搜索类型

现在让我们使用从 html 文件中提取的数据创建一个 DataFrame。

数据检查

数据分析:可视化谷歌搜索

谷歌搜索者每年的数量

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

每月谷歌搜索量

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

每小时谷歌搜索量

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

每个工作日的谷歌搜索量

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

每个工作日/小时的谷歌搜索量

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

我们可以按年份和星期几对搜索数据进行分组,以可视化整体趋势

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

来自谷歌搜索数据的词云

首先,我们需要提取文本并使用正则表达式对其进行清理

我们会想在常用的 stops_words (ei)中添加相关的单词。我,是,是)。在下面的代码中,我添加了与我的工作/学校相关的单词,因为这些单词很可能会出现得更频繁。现在我们还需要为单词云中出现的单词的最小频率和最大数量设置一个阈值。

最后,使用创建的包含单词计数的数据帧,我们生成一个单词云。

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

通过访问和了解谷歌等公司从我们的个人账户中维护的数据,我们可以更好地了解如何管理我们经常访问的所有网站的隐私设置,以及检测我们在使用这些服务时的行为模式。我们越能理解,就能越好地保护我们的隐私。

你可以在这里找到完整的脚本 谷歌笔记本。rmd

挖掘 HEP-Inspire 数据库

原文:https://towardsdatascience.com/mining-the-hep-inspire-database-77a68950ef59?source=collection_archive---------5-----------------------

世界上哪些国家对高能物理和数学的研究贡献最大?

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

Researchers with a Bachelor’s degree from the given country per million inhabitants (from HEP-Inspire database)

在我之前的职业生涯中,我曾在欧洲各地的物理系呆过很长时间。我发现令人震惊的是这些环境似乎享有巨大的文化多样性。大多数情况下,50%到 70%的员工和研究人员来自主办国,而其他职位则由来自世界各地的优秀人才担任。在移居者中,代表最多的国籍是人口众多的大国……加上意大利人。我经常碰到一个笑话,说世界上没有一个高能物理系里没有一个意大利人。有时候,我想,那个人就是我。

这件事引发了我的好奇心,我想量化每个国家向科学界提供研究人员的能力和趋势。显而易见,我应该从 HEP-Inspire 开始搜索,也就是说,这个平台承载了世界上每天产生的大部分高能物理学、宇宙学、天体物理学和数学物理学的文章。

HEP-Inspire 提供了一个大型数据库,其中有研究人员的姓名、统计数据和 bios,任何人都可以访问(我将引用一些用斜体表示的文件)。在该平台注册的 11.5 万名研究人员中,每个人都可以自由分享自己的教育背景信息,包括本科、博士、博士后和教师职位的情况。

我已经开始了我的分析,从 HepNames 数据集中解析每个研究者的标识符,以及他或她获得 UG 和 PHD 的位置。我必须面对的第一个问题是,数据库中的位置存储为大学名称(*【a】字段)和标识符(【z】*字段),而不是国家,例如:

<子场码= “">华沙 u .</子场码= "”>UG
<子场码= " s ">1980
<子场码="t "****

为了绕过这个问题,我检查了第二个名为 Institutions 的数据集,其中包含所有机构的名称、地址和来源国。从这个文件中,我构建了一个字典,以国家名称作为键,以机构代码列表作为值。将机构代码与每个研究人员的“ z ”值进行匹配,我最终成功地获得了两本以国家为关键字、以该国家的 UG/PHD 头衔数为值的字典。这些字典和所有代码都可以在我的 GitHub repo 上找到。

事实证明,这些数据有时是不完整的、非结构化的或者包含错别字。然而,该算法能够识别数据库中 95%的机构和 98%的研究人员。

考虑到结果,我首先感兴趣的是研究每个国家在培养研究人员方面的潜力,这些研究人员在高度理论化、有时甚至是推测性的领域工作,例如高能物理。以欧洲为例,我的结果显示在本文顶部的地图中。按人口单位计算,为科学界提供本科生的能力最强的国家是希腊,每百万人中超过 130 人,其次是英国、瑞士,是的……意大利。与预期相比,表现不佳的国家是法国、荷兰和北欧国家。进一步的见解来自下一批:

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

Researchers with a Bachelor’s degree from the given country per million inhabitants

在数据集中,不到 12%的研究人员分享了他们的 UG 背景信息,28%的研究人员分享了他们的博士背景信息。不得不做出的主要假设是,所有国家的研究人员都有可能分享他们的教育背景信息,这可能有利于内部竞争激烈的国家。

我关心的第二个方面是了解一个国家从邻国进口/向邻国出口博士生的可能性有多大。为了评估这一点,我选择了欧洲 14 个国家的样本,并绘制了每个国家的 UG/PHD 头衔在样本中所占的百分比,对人口进行了标准化。

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

In the graph, France accounts for 7% of PHDs in the sample and for 3% of UGs (per million inhabitants)

该图显示了一个众所周知的趋势。瑞士、德国、英国、瑞典、法国和荷兰等高密度经济体倾向于从意大利、希腊、爱尔兰、匈牙利和葡萄牙的研究团队中招聘博士,这些国家高密度的物理学学士提高了候选人的质量和学术潜力。

在这篇文章的结尾,我想分享一下世界上的情况。下面的柱状图包含了一些有代表性的国家。如果你的国家没有出现在那里,你可以在这里看看整套

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

失踪的移民发生了什么,他们是谁

原文:https://towardsdatascience.com/missing-migrants-24254bc82474?source=collection_archive---------6-----------------------

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

2013 年,至少有 368 人死于意大利海岸的两起沉船事故。这使人们更加意识到包括难民在内的移民的死亡,他们通过各种不同的、往往是危险的路线,从未到达目的地。

这篇文章关注的是死亡记录,另一部分是那些从未被发现的人,那些没有记录但可能还活着的人。

完整的连续互动版可以在这里找到。我用 Carto 和 odyssey.js 用 IOM 从 2014 年到 2017 年收集的数据来可视化移民(尤其是难民)。我发现 odyssey.js 作为一个带有地图缩放的讲故事工具很直观,但是,与工作文件相比,它的导出可能会在几帧中丢失一些数据点。

这是我关于数据科学和视觉故事的# 100 天项目的第 39 天。感谢阅读。欢迎新主题的建议和反馈。

密西西比州:2014 年牙科阿片类药物的中心

原文:https://towardsdatascience.com/mississippi-dental-opioid-epicenter-of-2014-ab4d7f68fa49?source=collection_archive---------5-----------------------

美国牙科协会呼吁其成员帮助对抗阿片类药物的流行。虽然牙医开出一小部分阿片类药物,但总体而言,在美国,他们是 10 岁至 19 岁患者的主要处方者。对于 127,338 名牙医中的每一名,医疗保险中心医疗补助服务(CMS)公共数据集包括他们的书面处方中阿片类药物的百分比。

2014 年,处方由 Medicare 部分承保的牙医的阿片类药物处方率中位数为 16.8% 。这些牙医在 2014 年共开出 1,110,725 张阿片类药物处方,占 Medicare 部分承保的所有阿片类药物处方的 1.4%

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

每个州都有牙医阿片类药物处方率的分布。这些是按照各州中值从最低(图表顶部)到最高(图表底部)的顺序绘制的。对于 20 个州,中位数是零或实际上是零,因为几乎所有的牙医都有极低的阿片类药物处方率,只有少数例外。

沿着图表往下看,在宾夕法尼亚州,离群值看起来开始占上风。从那里开始,接近图表的底部,异常值接管。密西西比州发生了什么,导致它不幸成为这场竞争的赢家,牙医阿片类药物处方率中位数为34.2%;多两倍那个,全国范围内?落后于其他州牙科监管机构,密西西比州牙科检查委员会最近通过了一项法规,要求该州的牙医在密西西比州处方监控计划(PMP)注册,医生长期以来一直被要求参与该计划。

mississpi刚刚提出了针对阿片类药物处方者的更新法规,该法规适用于医疗专业人员,不包括牙医。这些法规将要求医疗服务提供者在开阿片类药物处方之前,通过PMP 检查记录。从理论上讲,这一额外的步骤将使临床医生能够发现可能会购买多种止痛药处方的患者。

来自 2013 年的 CMS 数据显示,虽然外科医生和疼痛专家的比例较高,但家庭诊所和执业护士开出的阿片类药物处方总数最高。因为有如此多的初级保健医生,他们是阿片类药物处方的巨大来源。

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

States ordered bottom to top by OD death rate and medical specialties ranked left to right by opioid prescription rate.

2014 年的数据显示了类似的模式。除去外科、肿瘤和疼痛专家,以及阿片类药物处方率中位数为 0.0%的专家后,上面的热图显示了其他有趣的趋势。不仅牙医的阿片类药物处方率中值相对较高,而且各州的处方率也各不相同。作为对比,看看急诊医学专家(热图中最右边的一栏)。他们的平均比率高于牙医,但在他们的专业中,各州之间是相似的。

像急诊医学一样,一些初级保健专业(执业护士、全科医生、内科医生、家庭医生)在各州之间差异很小。其他专业(家庭医学、整骨操作医学、医师助理),如牙医,在各州的比率差异很大。这是农村还是城市供应商的问题?我将寻找与 CMS 数据结合的其他数据类型,这可能对此有所帮助。

用于数据操作和数据可视化的代码可以在 my GitHub 中找到。

感谢您的阅读。

我欢迎反馈——您可以“鼓掌”表示赞同,或者如果您有具体的回应或问题,请在此给我发消息。我也有兴趣听听你想在未来的帖子中涉及哪些主题。

阅读更多关于我的作品【jenny-listman.netlify.com】。欢迎随时通过 Twitter@ jblistmanLinkedIn联系我。

注意事项:

  1. 医疗保险 D 部分索赔数据来自:https://data . CMS . gov/Medicare-Claims/Medicare-Part-D-阿片类药物-处方医生-Summary-File-201/e4ka-3n CX/data
  2. 2014 年各州用药过量死亡率(每 100,000 名居民的年龄调整死亡率)数据来自:https://www.cdc.gov/drugoverdose/data/statedeaths.html
  3. 使用 R 中的工具处理和绘制数据
  4. 牙医不包括被列为口腔外科的专家(仅牙医),其阿片类药物处方率是牙医的两倍。与口腔外科牙科专家比例较高的州相比,在口腔外科牙科专家较少的州,被列为牙医的从业者可能会进行更多的外科手术,如拔除智齿。否则,这些牙医将会开出更多的鸦片制剂。然而,我的分析显示,州牙医阿片类药物处方率的中位数与州口腔外科牙科专家与牙医的比率之间没有相关性。

麻省理工 6。S094:自动驾驶汽车的深度学习 2018 讲座 1 笔记

原文:https://towardsdatascience.com/mit-6-s094-deep-learning-for-self-driving-cars-2018-lecture-1-notes-807be1a50893?source=collection_archive---------1-----------------------

你可以在 Twitter @bhutanisanyam1 上找到我,在 Linkedin 上联系我这里
T5 这里和这里是我学习自动驾驶汽车的两篇文章

如果你想阅读更多的教程/笔记,请查看这篇文章

你可以在这里找到降价文件

这些是麻省理工学院第六学期第一课的笔记。S094:自动驾驶汽车的深度学习课程(2018),由莱克斯·弗里德曼教授

第二讲的笔记可以在这里找到
第三讲的笔记可以在这里找到
第四讲的笔记可以在这里找到
第五讲的笔记可以在这里找到

所有图片均来自讲座幻灯片。

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

深度学习:由于研究和 GPU 能力的进步,近年来对人工智能技术很有效的一套技术。SDC 是可以利用这些的系统。

教官们正在研发能够理解车内外环境的汽车。

竞赛:

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

  • DeepTraffic:深度强化学习竞赛,代码在浏览器中运行。2.0 版现在允许多代理培训。

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

  • SegFuse:动态驾驶场景分割比赛。给定原始视频,视频中汽车的运动学(运动)。训练集给了我们地面真实标签、像素级标签、场景分割和光流。目标:在基于图像的分割中表现得比现有技术更好。需求:机器人需要解释、理解和跟踪场景的细节。

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

  • 深度碰撞:目标:使用深度 RL 避免高速碰撞避免。训练:1000 次跑步,训练一个汽车模型以 30 英里每小时以上的速度行驶,并由单目摄像机输入。

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

  • DeepTesla:使用大规模网络来训练端到端转向,使用单目视频作为训练的输入。

为什么是自动驾驶汽车?

目标:将数据驱动学习方法应用于自动驾驶汽车。

这是个人机器人的最大整合。

  • 范围广:道路上有大量的车辆。
  • 深刻:汽车和人之间的亲密关系。将你的生命托付给机器人,将控制权“转移”给汽车。该系统的生命临界性质是深刻的,将真正考验该系统的极限。

自主车辆:它是个人机器人,而不是感知控制。在某些情况下,这些系统需要人类通过控制转移来提供帮助。一个真正的感知系统具有与人类同等的动态本质,可能还需要几十年的时间。

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

认知负荷:一个完全连接的 CNN 接收原始 3D 输入,以分析认知负荷、身体姿势估计和驾驶员的睡意。

辩君:完全自主需要在某些领域达到人类的智能水平。

以人为中心的人工智能方法

建议:在每个算法的设计中考虑人的存在。

  • 感知控制可以处理 90%的情况。
  • 人为控制:在 10%的情况下占主导地位。

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

为什么要深度学习?

深度学习在处理大量数据时表现非常好。由于人类生活直接依赖于机器,因此需要从真实世界数据中学习的技术。

  • 感知/控制侧
  • 以人为本的协作和互动。

什么是深度学习?

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

人工智能:完成复杂目标的能力。

理解/推理:将复杂信息转化为简单有用信息的能力。

深度学习(表示学习或特征学习)能够获取没有任何意义的原始信息,并能够构建分层表示,以允许产生洞察力。

人工智能中最有能力的一个分支,能够从数据中推导出结构,从而获得洞察力。

表征学习

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

  • 代表性很重要。地球中心对太阳中心。

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

  • 笛卡尔坐标与极坐标区分圆和三角形

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

  • 使用一个 1 层隐藏神经网络来分离蓝色和红色曲线。使用深度学习来实现函数的学习(使用原始输入来生成输出)
  • 深度学习随着更多的数据而改进。
  • 对边缘案例的概括是深度学习的主要挑战。

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

神经网络。

灵感大致来自人类生物神经元。

  • 人类神经网络:1000 亿个神经元,1000 万亿个突触

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

  • 最先进的 ResNet-52: 6 千万个突触。
  • 差别是 7 个数量级的差别。
  • 差异:
  1. 人类神经没有堆叠,神经是堆叠的。
  2. 无订单与有订单
  3. 同步学习与异步学习
  4. 未知学习 Vs 反向投影
  5. 较慢的处理与较快的处理
  6. 功耗更低,效率更低

相似性:两者都是大规模的分布式计算。

一个基本的神经元是简单的,连接单元允许更复杂的用例。

神经元:

  1. 神经元由一组带权重的边的输入组成
  2. 权重成倍增加
  3. 增加了一个偏差
  4. 非线性函数确定神经网络是否被激活。

神经网络的组合:

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

  1. 前馈神经网络:成功的计算机视觉。
  2. 轮回 NN:反馈到自身,有记忆。在时间序列相关数据方面取得成功,与人类非常相似(因此更难训练)。

普遍性:多个神经网络可以学习仅用一个隐藏网络层来逼近任何函数*

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

*给出好的算法。

局限性:不在于网络的力量,而在于方法。

数字图书馆的类别

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

  1. 监督学习:需要人工标注数据。
  2. 增强监督学习:人类+机器方法。
  3. 半监督的
  4. 无监督学习:机器输入。
  5. 强化学习:机器输入。

当前正在使用:1,2

未来和更好的类别:3,4,5。

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

DL 影响空间:

  1. 定义和解决一个特殊的问题。例如:波士顿房价估计。
  2. 通用智能(或者差不多):强化和无监督学习。

监督学习

训练阶段:1。输入数据 2。标签 3。数据训练

测试阶段:1。新数据 2。输入到学习系统 3。出产量

学问

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

  • 正向传递:输入数据被送入神经网络,并生成预测。
  • 反向传播:测量与预期输出的偏差并计算误差,根据误差的大小调整用于预测值的参数(超参数)。

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

我们能做什么 DL?

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

  1. 一对一映射。
  2. 一对多
  3. 多对多。
  4. 异步多对多。

术语:

  • DL = NN(深度学习=神经网络)。
  • DL 是 ML(机器学习)的子集。
  • MLP:多层感知器。
  • DNN:深度神经网络。
  • RNN:循环神经网络。
  • LSTM:长期短期记忆。
  • CNN:卷积神经网络。
  • DBN:深度信仰网络。

神经网络操作:

  • 盘旋
  • 联营
  • 激活功能
  • 反向传播

激活功能

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

  1. 乙状结肠。缺点:渐变消失,不是零中心
  2. 坦。缺点:渐变消失。
  3. 雷鲁。缺点:不以零为中心

消失梯度:当神经网络的输出或梯度非常低,导致学习缓慢。

反向传播

神经网络的学习过程。目标:更新权重和偏差以减少损失函数。

子任务:

  1. 向前传递以计算网络输出和错误。
  2. 向后传递以计算梯度。
  3. 从权重中减去权重梯度的一部分。

因为这个过程是模块化的,所以它是可并行的。

学问

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

学习是一个优化的过程。

目标:通过更新权重和偏差来最小化损失函数。

使用的技术:小批量梯度下降和随机梯度下降。

学习挑战

  • 损失函数是高度非线性的。

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

  • 消失渐变。

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

  • Dying ReLU:对于 0 个输入,导数= 0。

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

  • 鞍点。

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

  • 过度拟合:神经网络学习训练数据,但未能很好地推广到现实世界的数据。检测者:低训练误差但高测试误差。

正规化:

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

有助于归纳的技巧。

  • 创建验证集:训练数据的子集
  • 早期停止:保存一个检查点并评估神经网络在测试数据上的表现。

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

Dropout:随机删除一些节点(以及传入和传出节点)

  • 用保持一个节点的概率§表示
  • 输入节点 p 应该高得多。

目标:帮助更好地概括。

正则化权重惩罚:

  • L2 惩罚:被惩罚的平方重量:
  1. 保持较小的权重,除非误差导数很高。
  2. 防止拟合采样误差。
  3. 更平滑的模型。
  4. 对于两个相似的输入,权重被分配。

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

  • L1 处罚:处罚绝对重量:
  1. 允许重量保持较大。

神经网络游乐场:玩技术和练习

深度学习突破

什么变了?

  1. 计算能力增强。
  2. 可用的大型有序数据集。
  3. GPU 利用中的算法与研究。
  4. 软件和基础设施。
  5. 财政支持。

DL 很难

人类比较:

  1. 人类视觉:发展了 5.4 亿年的数据。
  2. 两足运动:230,000,000 年的数据。
  3. 抽象思维:10 万年的数据。

神经网络:

  1. 给像素数据增加失真,导致不正确的预测。
  2. 视觉问题:照明度,姿势,遮挡,类内变异。

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

物体识别/分类:

目标:输入图像并预测输出

ImageNet:1400 多万个类别,21.8 万多个类别

竞赛:ILSVRC:

AlexNet (2012)在准确性方面有了显著的提升。

Resnet (2015):人类水平的表现被打败了。

微妙的例子:DL 离“人类概括能力”还很远

相同的架构,许多应用程序:我们可以改变预测层,根据需要对尽可能多的类进行预测。

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

  • 图像分类。
  • 图像字幕。
  • 对象定位。
  • 图像分割。

FCNN:

每个像素被分配一个类,它输入一个图像并产生另一个图像作为输出。

目标:图像到图像的映射。

使用案例:

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

  • 像素级全场景分割。

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

  • 色彩映射。

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

  • 物体检测。
  • 背景去除。
  • Pix2PixHD:从语义标签地图生成高分辨率的照片级逼真图像。
  • RNN:处理序列

使用案例:

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

  • 手写生成
  • 图像标题生成。
  • 视频描述生成。
  • 注意力转向建模。
  • 有选择地注意绘画。

重大突破

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

  • 乒乓对乒乓(2012):迈向 AGI 的一步。
  • AlphaGo (2016):从人类专家游戏中学到的
  • AlphaGo Zero (2017):击败 AlphaGo 和 Co,它在没有任何数据的情况下被训练!(它是通过与自己对抗练习而学会的)。
  • DeepStack (2017):首次击败职业扑克玩家(在单挑扑克中)

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

当前的缺点

  • 定义好的奖励函数是困难的。(Coast Runner 的例子),结果可能会令人惊讶。
  • 缺乏鲁棒性:向像素添加噪声会导致错误的预测。

当前的挑战:

  • 迁移学习:适用于密切相关的领域。挑战:跨领域迁移学习缺失。理性:对理性的理解或获得理解的能力
  • 需要大量的数据。
  • 需要带注释的数据。
  • 不完全自动化:超参数调整
  • 奖励:定义一个好的奖励函数是困难的。
  • 透明性:神经网络大多是黑盒(即使在我们将引擎盖下的过程可视化之后)。
  • 边缘案例:DL 不擅长处理边缘案例。(特别是涉及到自动驾驶的时候)。

回复:为什么是 DL?

将技术有效地应用于现实世界的问题是一个机会。(而 DL 在这些方面是最有效的)。

你可以在 Twitter @bhutanisanyam1 上找到我,在 Linkedin 上联系我这里
这里这里是我学习自动驾驶汽车的两篇文章

订阅我的时事通讯,获取深度学习、计算机视觉文章的每周精选列表

减轻预测正义中的算法偏差:人工智能公平性的 4 个设计原则

原文:https://towardsdatascience.com/mitigating-algorithmic-bias-in-predictive-justice-ux-design-principles-for-ai-fairness-machine-learning-d2227ce28099?source=collection_archive---------7-----------------------

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

算法正被用于给罪犯定罪和决定监禁时间。我们需要确保它们是公平的。

当网飞得到一个电影推荐错误时,你可能会认为这没什么大不了的。同样,当你最喜欢的运动鞋没有被列入亚马逊的推荐商品清单,这可能不是世界末日。但是,当一种算法给你分配一个从 1 到 500 的威胁分数来决定你的监禁时间时,你可能会对预测分析的这种使用产生一些担忧。

人工智能(AI)现在几乎已经渗透到我们生活的方方面面。自然,机器预测不可能总是 100%准确。但是当人工智能在高风险环境中实施时,错误的成本会急剧增加。这可能包括推荐新的癌症治疗方法的药物,或者帮助法官评估嫌疑人再次犯罪可能性的刑事司法。事实上,近年来人工智能最有争议的用途之一是预测性警务

对于普通观众来说,预测性警务方法最广为人知的可能是 2002 年由汤姆·克鲁斯主演的科幻电影《T2》中的《少数派报告》。这部电影根据菲利普·K·蒂克的短篇小说改编,展现了一个犯罪可以被预测和预防的未来景象。这听起来像是一个牵强的乌托邦场景。然而,预测正义今天已经存在。基于先进的机器学习系统,出现了一波为法院提供预测服务的新公司;例如,以风险评估算法的形式,评估罪犯再次犯罪的可能性,以帮助法官做出决策。

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

机器能识别未来的罪犯吗?

美国的刑期越来越多地基于有偏见的人工智能预测。例如,在 2013 年被捕后,Eric Loomis 被判处六年监禁,部分原因是基于一个不透明的算法预测,即他会犯下更多罪行。Eric Loomis 的案件中使用的专有软件背后的公司equivant(前身为 Northpointe)声称提供了被告的 360 度视角,以便为司法决策提供详细的算法协助。

这家公司是美国预测司法领域的众多参与者之一。电子隐私信息中心最近的一份报告发现,算法越来越多地在法庭上被用于“设定保释金,决定判决,甚至有助于判定有罪或无罪”。这种在法庭上向更多机器智能的转变,允许人工智能增强人类的判断,对整个司法系统来说可能是极其有益的。

然而, ProPublica 的一份调查报告发现,这些算法往往会强化执法数据中的种族偏见。算法评估倾向于错误地将黑人被告标记为未来的罪犯,其比率几乎是白人被告的两倍。此外,依赖这些风险评估的法官通常不明白分数是如何计算出来的。

这是有问题的,因为机器学习模型只与它们在上接受训练的数据一样可靠。如果基础数据存在任何形式的偏差,那么结构性不平等和不公平的偏差不仅会被复制,还会被放大。在这方面,AI 工程师必须特别警惕他们的盲点和隐含假设;重要的不仅仅是机器学习技术的选择,还有所有关于为人工智能模型寻找、组织和标记训练数据的小决定

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

有偏见的数据反馈有偏见的算法

即使很小的不规则和偏差也会在最终的风险评估中产生可测量的差异。关键问题是,像种族偏见和结构性歧视这样的问题在我们周围的世界里根深蒂固。

例如,有证据表明,尽管吸毒率相似,但美国黑人因涉毒指控被捕的比例是白人的四倍。即使工程师忠实地收集这些数据,并用它训练机器学习模型,人工智能仍然会将嵌入偏差作为模型的一部分。

系统性的不平等模式无处不在。如果你看看 2014/2015 年票房最高的电影,你会发现无论是在屏幕时间还是说话时间方面,女性角色都远远不足。新的机器学习模型可以量化这些不平等,但是关于工程师如何主动减轻这些不平等,还有很多未决问题。

谷歌近期快,画! " 实验生动地展示了解决偏见问题的重要性。这个实验邀请了全世界的互联网用户参与一个有趣的绘画游戏。在每一轮游戏中,用户都被要求在 20 秒内画出一个物体。然后,人工智能系统会试图猜测他们的图画描绘了什么。来自 100 个国家的 2000 多万人参加了这个游戏,产生了超过 20 亿张各种各样的图画,包括猫、椅子、明信片、蝴蝶、天际线等等。

但是,当研究人员检查数据集中的的图样时,他们意识到他们面对的是强烈的文化偏见。大量早期用户画出看起来像匡威运动鞋的鞋子。这使得模特选择了运动鞋的典型视觉属性作为“应该是什么样子的原型。因此,看起来不像运动鞋的鞋子,比如高跟鞋、芭蕾舞鞋或木屐,都不被认为是鞋子。

此外,最近的研究表明,如果不加检查,机器学习模型将学习过时的性别刻板印象,例如“医生是男性,“接待员是女性。以类似的方式,根据过去美国总统的图像训练的人工智能模型已经被证明能够预测出只有男性候选人可能赢得总统竞选

早在 2016 年,我就为 TechCrunch 写过一篇文章,在文章中我解释了机器学习系统只能使用历史数据来对未来做出预测。这就是为什么在用过去(男性)总统的图像训练之后,根据过去美国总统的图像训练的神经网络预测唐纳德·特朗普将赢得即将到来的美国大选。因为数据集中没有女性总统,人工智能无法推断出性别不是该模型的相关特征。实际上,如果这个特定的人工智能要选举下一任总统,它会投票给特朗普。

这些推论产生了越来越确定的推荐系统,它倾向于强化现有的信念和实践,类似于我们社交媒体反馈中的回音壁。我们在日常生活中越依赖个性化算法,它们就越会塑造我们看到的东西、我们阅读的内容、我们与谁交谈以及我们的生活方式。通过坚持不懈地关注现状,对要读的书、要看的电影和要结识的人的新建议会给我们带来更多以前让我们高兴的东西。

当你的过去明确地决定了你的未来,通过自发性、开放的思想和实验的个人发展变得更加困难。这样,算法决定论的概念呼应了温斯顿·邱吉尔曾经对建筑说过的话:我们塑造我们的算法;此后,他们塑造了我们。

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

人工智能中的公平设计

2018 年 10 月,国际数据保护和隐私专员会议发布了人工智能道德和保护宣言,这是迈向一套人工智能国际治理原则的第一步。该宣言指出“人工智能中使用数据可能导致的非法偏见或歧视应当减少和减轻”。

这一概念的内在含义是,人工智能需要在一套更广泛的伦理和法律标准上进行评估;不仅仅是基于分类准确度混淆矩阵。扩展这一论点,我提出以下用于预测正义的人工智能公平原则:

1.表现

为了防止不公平的偏见,所有受试者都应该有平等的机会在数据中得到体现。有时,这意味着未被充分代表的人群需要被仔细地添加到任何训练数据集中。有时这也意味着有偏见的机器学习模型需要在不同的数据源上进行大量的重新训练。在谷歌快,画的情况下!实验中,工程团队不得不有意寻找其他鞋类的额外训练示例,如高跟鞋和 crocs 鞋,以弥补代表性的差距。此外,最近的研究提供了新的算法技术来衡量虚假陈述并帮助减轻机器学习中不必要的偏见

2.保护

机器学习系统需要避免对个人的不公正影响,特别是与社会和身体脆弱性以及其他敏感属性相关的影响。这些因素可能包括种族、民族、性别、国籍、性取向、宗教和政治信仰。一个算法的整体公平性必须通过它如何影响受其影响的最弱势人群来判断。

然而,简单地从机器学习模型中省略敏感变量并不能解决问题,因为有各种各样的混杂因素可能与它们相关。关于刑事司法,研究显示,从犯罪历史数据中忽略种族仍然会导致种族差异的预测。相反,有早期证据表明,种族差异和其他敏感信息可以通过使用辅助机器学习算法从数据集中删除。希望在未来,这种方法可以帮助工程师建立一个“种族中立的”人工智能系统来预测累犯。

3.管理工作

算法公平不仅仅意味着没有不公平;它代表了在机器学习系统的设计中不断争取公平的积极责任。在这方面,管理精神只能由一个挑战彼此隐含假设的多元化团队来承担。

例如,在常规的无意识偏见消除练习中,团队可以培养对观点多样性的欣赏。包括 ProPublicaPrivacy International 在内的几个非政府组织也开始倡导在构建大规模人工智能模型的公司中进行多元化管理。因此,只有通过创造包容的文化,公司才能为团队创造合适的条件来解决机器学习中的不公平偏见。

4.真实性

最后的原则不仅指训练数据的真实性,还指人工智能预测的真实性,因为它们被用来为人类决策提供信息。例如,尽管不断努力限制潜在的有害或滥用应用,但令人遗憾的是,机器学习在过去一直被用来通过深度伪造来扭曲现实。在这种情况下,对人工智能的普遍滥用可能会帮助恶意行为者生成虚假视频,其中人们说着他们以前从未说过的话,或者真实生活中从未发生过的场景的虚假图像。在极端情况下,这可能会导致一个世界,法官不再能够确定任何描述的媒体或证据是否符合真相。因此,这导致一些媒体专家得出结论,AI 最大的受害者不会是乔布斯,而是最终彻底消除对你所见所闻的信任。“幸运的是,人工智能研究人员已经在研究有效且可扩展的对策来检测各种形式的操纵媒体。

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

反对机器偏见的机器

这四个原则可以帮助开始一场关于人工智能公平的对话,特别是在用于预测正义时。公平永远不是机器学习的默认。因此,工程师需要采取主动措施来改变这种默认。如果我们不积极地设计人工智能的公平性,我们就有延续有害偏见和刻板印象的风险。

然而,人工智能最令人印象深刻的事情之一是,算法也可以有效地用于测量和减轻不公平的偏见。展望未来,机器学习工程师有望进一步开发这些技术;扩展它们以有意义地帮助人类决策者进行不带偏见的预测。

本文中表达的观点是我自己的观点,基于我之前在牛津大学的研究。它们不以任何方式代表谷歌的观点。

作者简介: 维亚切斯拉夫·波隆斯基 博士是 UX 谷歌研究员。此前,他是牛津大学的研究员,研究复杂的社会网络和集体行为。他拥有计算社会科学博士学位,之前曾就读于哈佛大学、牛津大学和伦敦政治经济学院。他积极参与了 世界经济论坛 专家网 WEF 全球塑造者 社团。2018 年,《福布斯》杂志将他的工作和研究登上了面向欧洲的 《福布斯 30 Under 30 榜单。他写的是社会学、网络科学和技术的交集。

本文的早期版本出现在 世界经济论坛议程 作为全球未来理事会 2018**WEF 年会的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值