TowardsDataScience 博客中文翻译 2020(四百九十二)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何不跑出跑道:种植种子的简单方法

原文:https://towardsdatascience.com/how-to-not-run-out-of-runway-the-simple-way-to-plan-your-seed-ef2f2c79548?source=collection_archive---------61-----------------------

到处都有很多创业建议。我给大家讲一个经常被忽略的非常实用的——如何规划自己的早期成长。种子期通常致力于寻找你的产品与市场的契合度,也就是说,你开始时没有或只有很少的产品,到最后应该会有一个明显的持续增长的用户群。我将告诉你如何规划这个成长阶段,一旦你这样做了,你就会有一个清晰的种子时间表:

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

经典种子期的三个步骤:寻找 PMF、早期成长和筹资。图片作者。

虽然存在差异,但当你有早期牵引力时,通过增长率ARR 或潜在货币化用户群进行评估,首轮融资被广泛筹集。

  • 什么是好的用户群?一个可能或正在产生约 100 万美元收入的项目。
  • 为什么是 100 万美元?因为你的 A 轮会在 1000 万美元估值附近,而 x10 一般是这个阶段使用的倍数。有许多变化,但很少数量级的变化。
  • 什么是好的增长率?保罗·格拉厄姆说 5%-7% w/w 大卫萨克斯说每月 15%-20%(稍微慢一点)。你可以很容易地在 Twitter 和 VC 博客/播客上找到上述数字的 100 个其他基准——但除非你打算投资,否则花这么多时间是没有用的,只是用这些数字作为指南,然后尽你所能。

综合起来,所有这些数字意味着你的种子成长计划应该是这样的:你筹集了足够 X 个月的资金,比如 18 个月。就在这笔钱用完之前,你最好开始筹集 100 万美元左右的首轮资金。也许你想要一个 3 个月的缓冲期,以防万一你错过了你的成长目标。以 5% w/w 的增长率,需要多长时间才能制造出 100 万美元的 ARR?你应该在播种后的第 12 个月开始吗?还是第三个月?你还有多长时间到达 PMF?如果你错过了增长的起点几个月,你现在需要增长多快才能赶上?这意味着你每周需要带来多少用户?这个简单的互动模型将回答所有这些问题。(这个在 grid.is 上,让电子表格互动。我和他们没有关系,我只是喜欢这个工具)。

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

网格模型。是我们用来规划我们的成长。我们用 getradical.co 来谈论工作。图片作者。

要使用它,你填写你的目标结束日期(3 个月前你用完现金,所以你需要提高你的下一轮)。输入你将从第一次发布中获得的初始用户数量(可能是你的等待列表中的用户或主要的第一次推送——比如 100 个左右)。然后,设定你的目标用户数量,以及你预测的每周流失率。只有这样,才可以开始玩“场地开始”游戏。如果给自己 4 个月的成长时间会怎么样?这是一个现实的增长率吗?还是你需要达到罕见的 10%以上的 w/w 增长率?10 个月怎么样?你还有 10+3 个月的时间吗?或者你应该从今天就开始实现每周目标吗?

您可以找到一个表格,为您提供准确的每周增长目标,您可以打印出来并与您的团队分享。你可以填写你每周实际实现了多少,以及你是领先还是落后于目标。正如保罗·格拉厄姆所说,专注于这一点将会引导你走向成功,或者给你的创业带来更好的想法。

专注于达到一个增长率会把创业的繁杂问题简化成一个单一的问题。——p·格雷厄姆

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

底部的表格是你每周的目标。图片作者。

这是一个基本的模式,你可以去想象和添加更多的选项——按照有机和付费增长,按照渠道,或者增加不同的收入;你可以很容易地对一些低的和有上限的病毒率建模(例如,每个人可能以 15%的概率导致 3 个以上的人)。请随意联系我,让 Excel 来完成这些,我特别想知道这是否改变了你对种子期的计划。以上截图来自互动模式

如何(不)赢得纸牌游戏比赛

原文:https://towardsdatascience.com/how-to-not-win-a-kaggle-competition-e83dcffab637?source=collection_archive---------13-----------------------

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

古伊列梅·斯特卡内拉在 Unsplash 上的照片

要是赢和输一样简单就好了

什么是卡格尔?

你有没有想过当一名医生会是什么样子?有机会探索这种可能性而不付诸实践?如果是这样,你并不孤单。然而,鉴于现代医学的复杂性以及所涉及的法律和责任的细微差别,成为一名医生有一个“试用期”是极不可能的,甚至是不可能的。对于数据科学来说,情况并非如此。

Kaggle 是一个平台,任何对数据分析和数据科学感兴趣的人都可以通过它来探索精选的数据集并解决非常具体的问题。如果您对开发模型来解决分类任务、回归任务和图像识别感兴趣,Kaggle 拥有数据集和支持小组,可以让任何人学习如何使用数据。如果您对数据可视化或探索性数据分析更感兴趣,也有专门用于这方面的数据集。Kaggle 还提供了许多其他任何人都会喜欢的功能。最感兴趣的一个特性是 Kaggle 竞赛。

由不同公司赞助的每场比赛都有一个数据集,其中有一组可用的变量和一个你想要预测的特定变量。通常有一个与竞争相关的指标,竞争的目标是优化该指标。竞赛的获胜者通常会获得奖品,通常包括奖金,但不排除与竞赛发起人合作的机会。

每个参与者部署一个策略,希望赢得比赛。但是,总有明确果断的策略。

我们将讨论最常被用来赢()的常规策略,并讨论为什么这种策略从来不会产生胜利的结果。

典型的赢(输)策略

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

照片由JESHOOTS.COMUnsplash 上拍摄

参与者为赢得胜利而采取的典型策略包括两个基本概念:开发数据科学管道和尽可能实现最佳优化指标。这两个概念都是赢得 Kaggle 竞赛所必需的。然而,过度关注这两个概念通常是参与者失败的原因。

让我们首先检查实现最佳优化指标的可能性。随着 Kaggle 比赛的进行,开发了两个记分牌。这是每个人首先使用的初始记分牌,通常在比赛中会提供两个数据集。一个数据集用于培训您的数据科学管道,另一个数据集用于测试您的数据科学管道。您测试流程的数据集将提交给最初的委员会筛选,他们将测量您的预测或预测子集的准确性,并将其作为您在竞争中的初始得分。当比赛结束时,会显示第二个记分牌,并对来自测试数据集的全套预测进行评分,该分数是决定谁赢谁输的决定性分数。

不幸的是,大多数人专注于在第一轮获得高分,希望在最后一轮获得高分。这是大多数没有获胜的原因。数据科学中有一个概念叫做过拟合。过度拟合是指在数据集上训练并优化该数据集上的指标。即使您没有在将用于评分流程的数据集上训练您的数据科学流程,您仍然可以通过对预测执行最终调整来使您的数据科学流程过拟合,以便在第一个板上为您自己创造更好的分数。如果这是唯一要担心的板,那么也许该技术将是使用的技术。然而,鉴于第二板,情况并非如此。那些为第一轮做出的“优化的、高性能的”预测通常在最后一轮中表现不佳。这是大多数人犯的第一个错误。

大多数人犯的第二个错误是假设只有一种方法来创建一个高性能的数据科学管道,并且可能只需要一个参与者来创建这样一个管道。“条条大路通罗马”这句话在这里很适用。

从概念上讲,这两种策略都很重要,也很有必要。然而,仅仅关注这些,并不能让你前进并取得胜利。

制胜之道

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

照片由 NeONBRANDUnsplash 上拍摄

制定成功战略的方法涉及制定失败战略的两个基本概念:开发数据科学管道和尽可能获得最高分。这两者的区别在于你如何对待这两个基本概念。

当试图获得尽可能好的分数时,你必须期望你的数据科学过程是高效的,并且能够很好地概括。为了确保泛化,必须将训练数据集分成两个不同的数据集。您必须有一个验证数据集,验证您的数据科学管道,并有一个初始培训数据集的子集来培训您的数据科学流程。这两者都是必需的。那么,目标不是在第一个记分牌上取得最好的成绩。记分牌更像是一个标尺,用来确定你的验证方案的有效性。您的目标应该是查看您的验证指标执行得如何,并确保与培训指标一起改进。

同样,在开发您的数据科学管道时,大多数人专注于独立完成,并且认为他们的方式是唯一的方式。事实并非如此!!

赢得 Kaggle 竞赛需要合作。

在 Kaggle 上,你可以创建小组,你可以与其他人合作,结合你的数据科学管道来取得胜利。大多数获胜者以团队形式联合在一起。协作和团队合作是取胜的必要因素。

总之,要强调几点,要赢得 kaggle 竞赛,您必须有一个适当的验证方案并进行协作。

如果这篇文章引起了你的共鸣,请到我的主页订阅我的时事通讯。

[## 主页

在这里,您将找到有关 Edward Turner 所做工作的信息,以及…

ed-特纳. github.io](https://ed-turner.github.io/)

如果你对我的更多文章感兴趣,请点击下面的链接

[## 埃德·特纳-中等

阅读艾德·特纳在媒体上的作品。作为佛罗里达州坦帕市的一名高级数据科学家,我热衷于…

medium.com](https://medium.com/@edward.turnerr)

如何获取和分析 Fitbit 睡眠评分

原文:https://towardsdatascience.com/how-to-obtain-and-analyse-fitbit-sleep-scores-a739d7c8df85?source=collection_archive---------7-----------------------

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

凯利·西克玛在 Unsplash 上的照片

准备用于机器学习模型的 Fitbit 睡眠数据并了解睡眠评分的工作原理

智能手表和其他可穿戴设备在过去几年里越来越受欢迎,并催生了“量化自我”的文化现象。Apple Watch 或 Fitbit 等设备让任何人都有可能轻松地自我跟踪,从而以某种方式量化他们的生活。流行的自我量化包括消耗的卡路里,白天走的步数或睡眠质量。

在本文中,我将使用使用 Fitbit 大约一年的真实生活数据,重点关注后者,即睡眠质量。Fitbit 为用户提供了一个睡眠评分,这应该是衡量睡眠质量的一个指标。我将使用 Python 训练和测试不同的机器学习模型,试图尽可能准确地预测 Fitbit 睡眠分数,同时解释不同的指标,如 REM 睡眠分钟数,如何影响分数。

这篇文章的结构如下:

  1. Fitbit 睡眠评分简介
  2. 从 Fitbit 获取睡眠数据
  3. 数据清理和准备
  4. 探索性数据分析
  5. 将数据分为训练集、验证集和测试集
  6. 扩展功能和定义性能指标
  7. 使用套索回归的特征选择
  8. 多元线性回归
  9. 随机森林回归量
  10. 极端梯度推进回归器
  11. 交叉验证
  12. 超参数调谐
  13. 最终模型评估
  14. 结论意见

因为涉及的内容很多,所以我把这篇文章分成三部分。第 1 部分包括第 1 点到第 4 点,重点是获取睡眠数据、预处理和可视化。第 2 部分涵盖了第 5 点至第 10 点,即基于第 1 部分的预处理数据实际构建机器学习模型。第 3 部分涵盖了剩下的部分,全部是关于改进第 2 部分的模型,以获得最准确的预测。

Fitbit 睡眠评分到底是多少?

Fitbit 睡眠评分最好通过一个例子来描述,所以这里有两个应用程序提供给用户的截图:

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

Fitbit 提供的睡眠统计数据

在 Fitbit 应用程序中,用户会得到一个睡眠分数,在这种情况下为 78 分,这是一个睡眠窗口中睡眠阶段的图形表示,这些睡眠阶段的具体细分为分钟和百分比,以及估计的氧气变化。

这本身似乎相当简单明了。Fitbit 只是有一些算法,他们插入相关的睡眠统计数据,如快速眼动睡眠的分钟数,并给出睡眠分数。

对于任何一个有 Fitbit 的人来说,如果他曾经试图理解他们睡眠分数的模式,很明显这远非一目了然。下面的截图会让你明白困惑是从哪里来的:

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

Fitbit 提供更多睡眠统计数据

将这些睡眠统计数据与最初的数据进行比较,我们可以得出以下结论:

  • 睡眠时间比一小时长
  • 快速眼动睡眠的时间几乎是一样的
  • 深度睡眠的时间更长

基于这些观察,人们会认为第二次睡眠得分会比第一次高,但实际上是一样的。这是怎么回事?不同的统计数据在睡眠分数的计算中起什么作用?只看提供的睡眠统计数据,有可能自己预测睡眠分数吗?

本文回答了所有这些问题,并详细介绍了一个机器学习项目。我希望你喜欢它!

从 Fitbit 获取睡眠数据

Fitbit 允许用户通过他们的在线仪表盘导出 CSV 文件形式的睡眠数据。这个过程需要一些手工劳动,因为 Fitbit 一次最多只能导出 31 天的数据。几分钟后,我得到了所有的数据,并迅速将它们合并成一个 CSV 文件。

有一个问题。手动导出的 CSV 文件包括所有睡眠统计数据(睡眠分钟数、清醒分钟数、自由睡眠分钟数等)。)但不包括实际的睡眠分数。搞什么鬼?!

经过一番挖掘,我发现还有另一个名为“终身导出”的导出选项,它可以导出 Fitbit 从你开始佩戴他们的手表以来收集到的所有数据。在下载之前,你必须从 Fitbit 请求这个导出,一旦获得批准,你就可以下载一个包含各种不同文件的 zip 文件夹。该 zip 文件夹中包含一个 CSV 文件,其中包含额外的睡眠统计数据,包括睡眠评分。

我将包含睡眠统计数据的 csv 文件保存为 sleep_stats.csv,将包含睡眠分数的 CSV 文件保存为 sleep_score.csv。

数据清理和准备

本节解释了如何从 CSV 文件获取可用于机器学习模型的数据帧。在这个过程中,我遇到了一些将数据导入 Python 时可能出现的常见问题,我解释了如何处理这些问题,以便最终得到一个经过整齐预处理的数据集。

导入所有相关的库后(参见完整笔记本中的库),第一步是使用 pd.read_csv()函数将 CSV 文件中的睡眠数据导入 Python:

我只导入 sleep_score.csv 的前两列,因为它们包含日期和实际睡眠分数,所有其他相关数据都可以在 sleep_stats.csv 中找到。让我们来看看 sleep_stats_data 中的前五行:

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

这是第一个常见问题:由于 CSV 文件的结构方式,列名位于第一行。有一种方法可以解决这个问题:

使用。info()函数我们可以获得数据帧中数据的高级摘要,在我们的例子中,它看起来像这样:

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

这里,我们遇到了第二个常见问题:最后三列中有 NaN 值(缺失数据)。上面的信息摘要告诉我们有 322 个条目(行),但是最后三行的非空计数是 287,这表明了这一点。让我们使用下面的代码来看看包含缺失数据的行:

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

如果我们查看“入睡时间”或“开始和结束时间”一栏,就会清楚地看到这些行指的是 Fitbit 记录的午睡。小睡时间太短,Fitbit 无法可靠地测量重要的睡眠统计数据,因此我们将从数据集中删除所有这些行:

在上面的数据摘要中,我们还遇到了第三个常见问题,它与第一个问题相关:所有列的数据类型都是“object ”,但索引为 2 到 8 的列显然应该是数值型的,即数据类型要么是“int ”,要么是“float”。这些列的数据类型为“object”的原因很可能是因为列标题最初放在第一行,从而导致整个列被归类为“object”。让我们将这些列转换为数据类型“float”:

现在让我们看看前几行和 sleep_score_data 的摘要:

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

这个数据框架看起来好多了,列标题被自动识别,没有丢失值。

出于进一步分析的目的,我想将两个数据帧合并成一个,这意味着我想将它们合并。为了确保睡眠分数最终出现在对应睡眠统计数据的行中,我需要一个在两个数据帧中都相同的列,它将被用作合并的列。

在我们的例子中,两个数据帧都有一个带有某种时间戳的列。睡眠统计数据帧具有开始和结束时间,睡眠分数数据帧具有时间戳。因为睡眠分数总是在醒来后提供,所以睡眠统计数据帧中相关的日期是结束时间,我们可以去掉开始时间。但是还有一个问题:睡眠统计数据帧中结束时间的格式不同于睡眠分数数据帧中时间戳的格式。如果我们试图合并这些列上的数据帧,这些行将不会匹配。我的解决方案是在两个数据帧中创建一个只包含日期的“Date”列,合并这些列上的数据帧,删除多余的列,并在合并后删除一个包含缺失值的行。以下代码实现了这一点:

生成的组合数据帧如下所示:

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

合并和预处理的数据

我删除了所有与日期相关的列,因为这不是时间序列分析,我们不需要未来的日期。Fitbit 应用程序没有提供醒来的次数,因为我想只使用应用程序中提供的数据来预测睡眠分数,所以我也放弃了它。

有了经过组合和预处理的数据框架,我们可以继续进行一些探索性的数据分析。

探索性数据分析

在这一节中,我将使用可视化来提供对底层数据的更好理解。这些初步的见解将成为以后分析的基础。

首先让我们来看看睡眠分数的分布:

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

睡眠得分的分布向左倾斜,这是有道理的,因为由于多种原因,如熬夜或不得不早起,晚上睡不好比晚上睡得特别好更容易发生。此外,平均睡眠分数已经相对较高,为 82 分(满分为 100 分),因此不太可能(基本上不可能)出现许多远高于平均值的异常值。

让我们也来看看每个特征与睡眠分数的关系,以了解哪些特征可能是重要的,以及它们与睡眠分数的关系。我已经定义了一个函数,它将一个数据帧作为输入,该数据帧包含最后一列中的目标变量以及整个绘图中包含的列数。列的数量决定了每行有多少支线剧情。下面是函数:

使用 sleep_data 数据帧和 num_cols=3 作为输入来调用此函数会产生以下图形:

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

单独来看,睡眠分钟数和快速眼动睡眠分钟数似乎与睡眠得分有最强的正相关。一般来说,这是有道理的,因为当考虑睡眠质量和睡眠分数时,更多的睡眠时间应该是一件积极的事情。快速眼动睡眠时间延长也是如此。

为了完整地描述不同特征和睡眠评分之间的关系,我们来看看相关矩阵:

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

事实上,睡眠分数与快速眼动睡眠分钟数相关性最高,紧随其后的是睡眠分钟数。另一个需要注意的重要事情是,许多特性是高度相关的。这是有道理的,因为更多的睡眠时间应该导致更多的时间花在睡眠的各个阶段,并且这些特征将会一起移动。虽然这可能是此处包含的要素的性质不可避免的副产品,但它可能会导致多重共线性问题。稍后将详细介绍。

第二部分基于预处理数据和探索性数据分析的见解,建立了两个不同的预测睡眠分数的机器学习模型。第 2 部分可以在这里找到:

[## 使用机器学习来预测 Fitbit 睡眠分数

随机森林、极端梯度推进以及它们在预测 Fitbit 睡眠分数时的表现

medium.com](https://medium.com/@bennerjonas10/using-machine-learning-to-predict-fitbit-sleep-scores-496a7d9ec48)

如何用 Python 函数获得你最喜欢的球员的 NBA 统计数据

原文:https://towardsdatascience.com/how-to-obtain-nba-statistics-for-your-favorite-players-with-a-python-function-8947516af286?source=collection_archive---------18-----------------------

直接从命令行查询 70 年的 NBA 统计数据

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

TJ·德拉戈塔在 Unsplash 上的照片

介绍

本文将向您展示部署 Python 函数来模拟一项任务的方法之一,这项任务就像搜索您喜爱的篮球运动员在给定 NBA 赛季的统计数据一样简单。

作为一个 NBA 篮球迷,我经常在网上查找某个特定球员的表现,并想知道我是否可以尝试使用 Python 复制这个过程,简单地从笔记本电脑的命令行启动搜索并获得结果,而不需要实际打开浏览器并上网。

让 Python 为您进行 web 搜索对于许多不同类型的应用程序来说是非常强大的,我希望这个简单的例子能够让它变得有用,并启发您将这些概念应用到自己的个人项目中。

步骤 1:确定你的统计网站

在篮球分析社区的例子中,BasketballReference.com是一座数据的金矿,因为它拥有对许多篮球分析项目有用的各种相关游戏内统计数据。我将使用这个网站来收集相关数据。

特别是对于 NBA 的统计数据,该网站有一个“每场比赛”部分,人们可以在这里获得任何相关类别的每场比赛表现统计数据,包括参加任何给定赛季的大约 500 名 NBA 球员。

我们的目标是编译和执行一个 Python 程序,它可以返回任何球员在任何给定赛季的每场比赛的完整统计数据。该网站从 20 世纪 50 年代开始记录每场比赛的统计数据,所以给你大约 70(!)年的数据,你可以搜索。

第二步:编写 Python 函数

现在让我们来看一下实现这一点所需的函数代码,并一步一步地分解它。

  1. 导入相关的包:作为第一步,您需要导入相关的 Python 包并定义指向在线数据源的 url 变量。您还应该导入熊猫包(" import pandas as pd "),因为您稍后会需要它。
import requests
from bs4 import BeautifulSoup
import pandas as pd

2。定义功能并获取用户输入

你用 def 关键字定义函数,给它一个有代表性的名字,比如get _ NBA _ stats;该函数不接受任何参数,而是让用户通过两个输入命令来定义它们,其中程序提示输入年份和球员姓名,以返回每场比赛的统计数据。

def get_NBA_stats():year=input("Which NBA season are you interested in?: ")
player=input("For which player do you want to get stats?: ")

3。抓取并保存数据

然后,您需要用 request.get 方法获取相关的 url 内容。请注意变量是如何用于将搜索指向季统计数据所在的网页的。然后,您可以用*提取它的文本。text 方法,*最后把它解析成一个 Beatiful Soup 对象。

url = '[https://www.basketball-reference.com/leagues/NBA_{}_per_game.html'.format(year)](https://www.basketball-reference.com/leagues/NBA_{}_per_game.html'.format(year))

r = requests.get(url)
r_html = r.text
soup = BeautifulSoup(r_html,'html.parser')

为了在 BasketballReference 网页的 HTML 中定位包含球员数据集的表格,您可以检查页面的代码(这可以通过在 Google Chrome 上单击 Ctrl + Shift + I 来完成),并看到您感兴趣的表格元素有一个与 full_table 相等的,您可以使用该类通过 soup.find_all 命令将表格内容存储到 table 变量中。

然后,您可以使用 soup.find 来定位页面中的元素,其中等于 table_head ,因为该类存储我们的玩家数据集的列名。您可以将它们保存在一个名为 *head,*的变量中,然后该变量用于提取和清理最终数据集的相关列名,例如每个球员的姓名、每场比赛的得分、每场比赛的篮板数等…如下图所示。

table=soup.find_all(class_="full_table")

""" Extracting List of column names"""
head=soup.find(class_="thead")
column_names_raw=[head.text for item in head][0]
    column_names_polished=column_names_raw.replace("\n",",").split(",")[2:-1]print(column_names_polished)['Player',
 'Pos',
 'Age',
 'Tm',
 'G',
 'GS',
 'MP',
 'FG',
 'FGA',
 'FG%',
 '3P',
 '3PA',
 '3P%',
 '2P',
 '2PA',
 '2P%',
 'eFG%',
 'FT',
 'FTA',
 'FT%',
 'ORB',
 'DRB',
 'TRB',
 'AST',
 'STL',
 'BLK',
 'TOV',
 'PF',
 'PTS']

然后,您可以遍历整个元素,对于每一行数据(与单个玩家相关并由 td HTML 标签标识),您可以提取所有玩家的统计数据,并将它们存储到一个名为 players 的列表中。一旦完成,你所要做的就是将所有玩家的信息存储到一个熊猫数据框中,该数据框采用先前定义的列名,你可以将玩家的全名设置为索引。

**注意:**获得一个给定赛季的球员的完整名单对于完成手头的特定任务来说不是必要的,我只是展示如何这样做,因为通常最好的做法是存储所有潜在有用的数据(例如,如果以后你想将单个球员的表现与其同行进行比较,拥有 NBA 球员的完整样本将是有益的)。

"""Extracting full list of player_data"""
players=[]

    for i in range(len(table)):

        player_=[]

        for td in table[i].find_all("td"):
            player_.append(td.text)

        players.append(player_)df=pd.DataFrame(players, columns=column_names_polished).set_index("Player")#cleaning the player's name from occasional special characters
df.index=df.index.str.replace('*', '')

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

NBA 2019-2020 赛季球员场均数据

4。通过返回您请求的玩家统计数据来关闭该功能

然后你可以通过显示我们请求的玩家的全部统计数据来结束这个函数,玩家的名字是你在函数体开始时指定的,并将其打印到屏幕上。

print(df.loc[player])if __name__ == "__main__":
    get_NBA_stats()

步骤 3:从命令行启动并执行函数

您的功能现在已经设置好了!你现在所要做的就是保存 python 文件(我把我的文件命名为 NBA_per_game.py )并在任何你想要的时候执行这个文件,对于任何你想要的球员和年份组合,直接从你的 PC 命令行执行。

请记住将文件保存在一个可以从命令行轻松访问的目录中,以便在心跳中启动程序。

我把我的保存在我的桌面上,这样就很容易访问,然后在下面的视频中记录了几个执行过程。

从命令行调用这个函数来获得迈克尔·乔丹(1998 年)和比尔·拉塞尔(60 年代的统计数据!)

后续步骤

您的功能已正式设置好,并可立即运行。如果你发现自己在一遍又一遍地搜索这类信息,这是一个非常好的解决方案,它显示了网络抓取对于加速甚至是最简单的任务是多么有帮助。

我是网络抓取软件包的忠实粉丝,也曾将它们用于其他目的,例如使用 API s 提取金融股票数据

希望下次你想浏览一些 NBA 的统计数据时,你会发现这很有用(也许在准备你的梦幻篮球阵容时!).

访问我的免费数据科学资源清单 这里

[## 通过我的推荐链接加入 Medium-Edoardo Romani

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

edo-romani1.medium.com](https://edo-romani1.medium.com/membership)

如何开源你的第一个 Python 包

原文:https://towardsdatascience.com/how-to-open-source-your-first-python-package-e717444e1da0?source=collection_archive---------16-----------------------

Python 打包的初学者友好分步指南

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

开源软件的世界很棒!照片由克拉克·蒂布斯Unsplash 上拍摄

为什么是 Python 包?

Python 是一种直观的通用语言,具有易于理解的语法。它使得原型开发、web 开发、数据科学等等比其他任何编程语言都要简单得多。这要归功于它庞大的支持性社区和众多的软件库。

你有没有发现自己在不同的项目中多次编写相同的代码行?或者,您可能已经编写了一些有用的库,希望其他人也能使用?或者,你只是对 Python 打包或者对 Python 社区有贡献感兴趣?

在本文中,我们将创建一个小的包,然后将其上传到 Python 包索引(PyPi) ,这样任何人都可以使用pip install下载并使用您的代码作为软件库。

当我用 Python 构建我的第一个包时,我发现这个过程有些乏味。这促使我写了这篇文章,这篇文章将带你了解如何构建一个 Python 包的基础知识,并与世界其他地方分享。

要求

如果你有一个 GitHub 帐户并且安装了 Python,你可以跳到项目概述。

Git 储存库

要成为开源社区的一员,您必须在版本控制托管服务上公开托管一个项目。最常见的选择是使用 Git 存储库主机,它保存项目的虚拟存储。它允许您协调程序员之间的工作,并保存您的代码版本,您可以在需要时访问这些版本。使用最多的托管服务是 GitHub 。如果您还没有帐户,第一步是在这里创建一个权限

计算机编程语言

我们将使用 Python 3。Python 3.5 的任何版本都可以用于该项目。如果你没有 Python,可以从 python.org 的下载页面下载。我将在 Windows 上使用 Python 3.7,但这个项目使用什么版本或操作系统并不重要。如果你是 Python 的新手,我可以建议你做一些教程的练习。

集成驱动电子设备

集成开发环境(IDE)是一个源代码编辑器,为您提供调试和自动化工具。只要你喜欢,用什么代码编辑器或者 IDE 都没关系。我将亲自使用一个叫做 Visual Studio Code 的轻便而强大的代码编辑器。

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

准备深潜!由 Max DuzijUnsplash 上拍摄的照片

项目概述

现在让我们构建一个简单的处理质数的包。如果您已经有了一些代码想要使用,在将您的代码组织成与项目相似之后,可以随意跳过这一部分。

你要做的第一件事是为你的库取一个合适的名字。因为我们的图书馆处理质数,所以我选了primelib

下面是项目结构的样子。你可以和我一起创建文件,或者直接下载 GitHub 上的整个库。

primelib/
    primelib/
        __init__.py
        prime_numbers.py
    tests/
        test_prime.py
    .gitignore
    LICENSE
    README.md
    setup.py

这可能看起来像很多文件,但不要担心,我们将一个接一个地制作和解释它们。

逐步构建项目

启动并克隆 GitHub 存储库

首先要做的是在 GitHub 中启动一个存储库。登录 GitHub,点击绿色的“新建按钮。您应该会看到一个标题为“创建新存储库”的页面。选择自述文件 Python 时,请填写下面的空白处。gitignore 文件和 MIT 许可证。当你准备好了,点击创建库*。*

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

一旦在 GitHub 上创建了存储库,就必须在本地计算机上克隆它。为此,你应该在你的机器上安装 Git 和终端。在 Windows 中,我推荐使用新的 Windows 终端,尽管你肯定可以使用命令提示符。打开一个终端,通过运行git --version确保 git 安装正确。然后使用cd将你的项目存储到你想存储的地方。终于可以跑git clone https://github.com/YOUR-USERNAME/primelib.git了。点击绿色的“代码”按钮时提供链接。

现在,您应该已经将项目复制到您的计算机上了。在您喜欢的代码编辑器中随意打开primelib文件夹。您应该具有以下结构。

*.gitignore
LICENSE
README.md*
  • 的。gitignore file 使您能够在跟踪和上传代码到存储库时忽略一些文件。
  • 许可证文件只是一个包含项目许可证的. txt 文件。您可以在这里找到您的需求,尽管 MIT 许可证对于几个项目来说是一个很好的默认选择。
  • README.md 文件是一个包含项目描述的 Markdown 格式文件。您可以为您的库将提供的模块和函数编写文档。

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

我们都爱 Python。克里斯·里德在 Unsplash 拍摄的照片

Python 代码

primelib/文件夹中,你现在可以添加一个名为primelib的新文件夹,它将包含你所有的代码。在这个新文件夹中,创建两个名为prime_numbers.py__init__.py的 Python 文件(带有两个前导下划线和两个尾随下划线)。

*primelib/
    __init__.py
    prime_numbers.py
.gitignore
LICENSE
README.md*

让我们从包含我们将使用的 Python 代码的prime_numbers.py开始。您可以将这段代码复制并粘贴到您的prime_numbers.py文件中。

Python 代码包含两个函数:

  • _divides是私有函数,因此以前导下划线开头。它被下一个函数is_prime使用,当且仅当div除以n时返回True
  • is_prime检查一个数n是否有一个不同于 1 和它自身的除数,如果有,它返回True

__init__.py文件是将 primelib 转换成一个包所必需的。它将是您的 Python 解释器在运行import primelibfrom primelib import ...时执行的文件。要使用命令primelib.is_prime(n)从库中直接访问函数is_prime,必须在__init__.py文件中写入以下内容:

试验

好了,现在是时候创建一些测试来确保我们的函数按预期工作了。现在,您可以在项目目录中创建一个tests文件夹,并在其中添加一个test_prime.py文件。

*primelib/
    __init__.py
    prime_numbers.py
tests/
    test_prime.py
.gitignore
LICENSE
README.md*

您可以简单地复制以下测试。

然后就可以用 Python 标准库的一部分 Pytest了,所以 Python 自带的,不用安装。Pytest 会自动检查你在任何test_*.py文件中的断言语句。在您的终端中,您可以运行以下命令。

*python -m pytest*

现在您应该看到您的两个测试成功通过了。这意味着您已经准备好构建包并与社区共享您的库。

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

是时候建造你的图书馆了。照片由马特·阿特兹Unsplash 上拍摄

建造图书馆

我们将使用三个库setuptoolswheeltwine。确保它们在您的环境中可用。

*pip install --upgrade setuptools wheel twine*

构建包需要最后一个文件。您必须在目录的根目录下添加一个setup.py文件。这告诉setuptools如何实际构建这个包。让我们添加最后一个文件来获得最终的树结构。

*primelib/
    primelib/
        __init__.py
        prime_numbers.py
    tests/
        test_prime.py
    .gitignore
    LICENSE
    README.md
    setup.py*

这里是setup.py文件。您可以复制并粘贴它,同时用您的名字替换您的-USERNAME 以使库名唯一。

三个强制参数是名称*、版本。您现在可以用下面的代码构建这个库。*

*python setup.py sdist bdist_wheel*

这将在dist/目录中生成分发档案。现在你可以在你的本地环境中安装这个库,执行python setup.py install。可以尝试在 Python shell 中导入primelib

*python
>>> import primelib
>>> primelib.is_prime(13)
True*

上传到 PyPi

现在您有了一个工作库,您可以将它上传到 Python 包索引(PyPi)上,以便与 Python 社区共享。出于本教程的目的,我们将使用 TestPyPi ,它的工作方式与 PyPi 完全一样,但它是为测试包而设计的,以便尽可能保持真实服务器的干净。

首先你必须在 TestPypi注册一个账户并验证你的电子邮件。最后,您可以使用下面的代码将您的包作为归档文件上传。

*python -m twine upload **--**repository**-**url https:**//**test**.**pypi**.**org**/**legacy**/** dist**/****

就这么定了!您的包现在可供社区使用。如果它被上传到 PyPi 上,你可以直接用pip install primelib安装包,但是因为它现在在 TestPyPi 上,你可以用下面的代码安装包:

*pip install **--**index**-**url https:**//**test**.**pypi**.**org**/**simple**/** primelib-YOUR-USERNAME*

如果你遇到任何关于打包的问题,请参考 Python 打包教程

您的库现在可以在 Python 环境中使用了。我强烈推荐使用virtualenv来管理不同的环境。

结论

恭喜你。你已经学会了如何创建一个 Python 包来包装你的一些代码,然后如何与社区共享你的库,这样任何人都可以使用你的作品。

我希望您现在已经准备好为 Python 社区做出贡献,并与世界其他地方分享您的伟大代码!

如果你有兴趣继续深入,我推荐这些重要但更高级的主题:

如何最佳地操作人工智能是一个视角问题

原文:https://towardsdatascience.com/how-to-operate-an-ai-optimally-is-a-matter-of-perspective-d1d1d28f74ec?source=collection_archive---------53-----------------------

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

不是每个问题都可以用数学和算法来回答。当谈到人工智能的可操作性时,视角很重要,每个利益相关者衡量成功的方式都不同。接下来,是时候让领导层站出来,做出高层决策了。(来源:Shutterstock)

当你将人工智能引入企业时,数学是简单的部分。它很简单,因为它可以用普遍接受的标准客观地判定。但是许多重要的决定不属于这一类。当要做出这样的决定时,争论就开始了:十几个利益相关者带来了尽可能多的意见,每个都有合理的论据支持。为了防止不必要的混乱,现在是领导必须站出来的时候了,这些问题迟早会不可避免地成为高层决策。

一个人工智能项目要取得成功,数学、经济学、战略和心理学都必须考虑在内。为了说明这是如何实现的,在本帖中,我们将看看机器学习在德国汽车保险领域的应用。

想象一个被训练来验证汽车保险索赔的机器学习系统。汽车保险的运作方式因国家而异。在德国,索赔通常附有认证专家的损坏评估,或维修店的报价或发票。基于这些文件,机器学习系统将索赔分为两类:要么它建议直接支付,要么如果发票似乎部分或完全不合理,技术上不正确,或在任何其他方面有问题,它会将案件发送给人类主题专家进行进一步调查。

正如安盛和 Controlexpert 在一份联合声明中对德国汽车保险业务的重量级人物报告的那样,完全合法的索赔比例约为 40% [1]。因此,一个能够让人类专家专注于剩余 60%的相关案例的人工智能,有望节省大量时间和金钱。为了充分实现这一优势,必须对系统进行配置,以最好地满足用户的需求。

这就是问题的开始。对用户来说什么是最好的?

人们可能会想,在高度数学化和定量化的机器学习世界中,肯定有这种单一的神奇度量可以用来找到最佳配置。没有。

但在我们看到为什么之前,让我们先从简单的开始,看看能客观地说什么。

如何量化分类器性能

当然,有客观的方法来评估机器学习模型的性能。事实上,像我们的声明分类器这样的系统是一个特别简单的情况,即所谓的二元分类器。二进制,因为它回答非此即彼的问题,有两种可能的结果:是或否,零或一,砰-上或砰-下。或者,在我们的具体场景中:保险索赔看起来可疑吗?

使用历史案例数据训练分类器。为了评估它在新的、未知的情况下的性能,你拿出一部分所述数据,并且不使用它进行训练。相反,一旦模型被定型,您就可以用它来测试模型。从模型的角度来看,这些数据是未知的,就像全新的数据一样,但是你,测试者,知道每个样本在过去是如何被人类专家决定的,所以你知道它应该如何被分类。

有了这些知识,您可以将分类器的测试集结果分成四类。

1.如果分类器建议对该索赔进行进一步调查,并且根据记录,该索赔确实令人反感,那么您就有了一个真阳性(TP)
2。如果分类器建议直接支付索赔,并且根据记录该索赔是罚款的,则您有一个真负数(TN)
3。如果分类器建议调查,但记录显示索赔是罚款,那么这是一个假阳性(FP)
4。如果分类器建议直接支付,但记录显示索赔是不良的,那么这是一个假阴性(FN)

这四类中的数字通常以二乘二矩阵的形式表示,即所谓的 混淆矩阵 :

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

虽然混淆矩阵由 TP、FP、FN、TN 四个数字组成,但实际上只有两个数字是独立的。这是因为数据本身,或者更具体地说是测试集,有一定数量的 P 个实际上为正的样本和一定数量的 N 个实际上为负的样本。所以,不管分类器工作的有多好,最后我们总会有 TP + FN = P 和 TN + FP = N,两个含有四个未知数的方程留给我们两个自由度。参数化这些自由度的一种常见方式(但不是唯一的方式)是通过真阳性率(TPR)假阳性率(FPR)

数学上,它们被定义为

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

从这些定义出发,你可以很容易地用很少的代数说服自己,TPR 和 FPR 足以确定所有四个 TP、FP、FN 和 TN,注意

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

然而,在现实中,一个案件很难 100%清楚。相反,决策是在或多或少的自信下做出的,这取决于证据——但也取决于个体决策者的个人倾向(理解为:偏见)。

想象一下,我们的分类任务将不得不由人类专家而不是人工智能来完成。此外,假设有两个求职者。一方面,有极端怀疑的主题专家。对她来说,任何要求都是无可置疑的。尽管案件细节,她只是标记每一个索赔进行进一步调查。有趣的是,甚至不需要考虑一秒钟的证据,她就可以肯定一定比例的案例是正确的:她正确地建议对每一个不合理的主张进行调查。然而,与此同时,她错误地推荐每一个正确的主张进行更仔细的检查。

第二个候选人与她完全相反。他对索赔者的信任是无限的。因此,他建议每一项索赔都进行直接赔付。这位专家也有一些成功可以展示,因为他正确地对待每一个合理的主张——但错误地对待每一个不合理的主张。

在这些虚构人物所代表的两个极端立场之间,人们可以想象出一系列或多或少严格的决策者。为了表示这个光谱,我们可以引入一个“严格参数”p,更正式的名称是鉴别阈值,其值可以在 0%和 100%之间选择。如果给定案例数据,索赔有 70%的可能性是可疑的,那么如果 p < 70%,则严格程度为 p 的专家将建议进一步调查,如果 p > =70%,则直接赔付。

这正是我们的分类器在内部工作的方式。它计算一个概率,并根据一个配置参数 p(鉴别阈值)将其转换成一个二进制判决。

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

**图一。**蓝色曲线代表的分类器优于绿色曲线代表的分类器。(来源:作者)

因此,TPR 和 FPR 以及混淆矩阵中的所有四个数字都依赖于阈值。TPR 和 FPR 如何随着阈值的变化而变化可以通过查看 ROC 曲线来理解。通过将 0%和 100%之间的所有 p 值的点(FPR§,TPR§)标绘到 FPR-TPR 坐标系中,可以获得该曲线。

ROC 曲线可用于比较两个分类器。一般来说,对于每个 FPR,如果一个分类器的 TPR 大于另一个分类器,那么这个分类器就比另一个好。在 ROC 图中,上级分类器的 ROC 曲线处处都在另一个分类器的 ROC 曲线上方(见图 1)。

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

**图二。**两个(或多个)模型可以组合成一条 ROC 曲线,对应于它们各自的 ROC 曲线的凸包。(来源:作者)

所以你可以系统地比较各种模型,直到找到 ROC 曲线最好的那个。结果可能是,最佳曲线不是来自单个分类器,而是来自两个或几个不同分类器的组合。重要的是,最后你总会有一条单一的最佳 ROC 曲线。(在分类器组合的情况下,该曲线是每个单独分类器的 ROC 曲线的上凸包[3],见图 2。)

此时,我们仍处于一个简单的世界。您可以客观地选择 ROC 曲线击败竞争对手的模型,并且您确定您将最佳球员带到了赛场。

不幸的是,选择了最佳分类器之后,您还远远没有完成。你还是要选择曲线上最好的。那么问题是:哪个阈值最适合用户?

最佳精确度

(在本文的剩余部分,我们将展示一个训练好的二元分类模型的 ROC 曲线和其他特征。该模型仅被理解为一个示例——它是而不是在实际保险数据上训练的,而是在“成人”数据集上训练的[4]。)

乍一看,寻找最佳阈值似乎是一项微不足道的任务。追求最大的准确性,即尽可能多的预测是正确的。每一个其他的选择都会导致更多的错误。当然,我们希望避免这种情况,对吗?

准确性正式定义为所有预测中正确预测的比率,即

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

**图三。**在我们的例子中,可能的最佳精度是 85%。(来源:作者)

当我们计算本例中 ROC 曲线上每个点的 ACC 时,我们发现最大准确度为 85%(见图 3 和图 4)。那是我们能做的最好的吗?

有可能是这样,但只是在一种特殊的情况下,也就是说,当两种错误,假阳性和假阴性,从用户的商业角度来看是同样痛苦的。然而,在大多数情况下,这两种错误有着明显不同的影响,正如我们将看到的,我们的汽车保险索赔例子也不例外。

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

图 4。沿着我们示例的 ROC 曲线的准确性、成本和完全混淆矩阵。CST 已被重新调整以增强可视化,因此最大可能成本为 1。(来源:作者)

成本最优

错误决策造成的损失并不总是容易量化。权衡假阳性和假阴性是一个经典的难题:判一个无辜的人入狱(假阳性)比让一个杀人犯逍遥法外(假阴性)更糟糕吗?差多少?

幸运的是,在商业世界里,事情并没有那么戏剧化,只要付出一些努力,错误决策造成的损失就可以用金钱来量化。这让我们想到了成本估算。为了给假阳性和假阴性这两种可能的错误定价,我们必须检查在每种错误的情况下到底发生了什么。

在假阳性的情况下,完全正确的账单被不必要地发送给专家,然后专家花费一些宝贵的时间试图在没有错误的地方找到错误。为了简化计算,我们假设这个过程花费他 12 分钟,他的劳动总成本是每小时 100 €。那么,每个假阳性浪费 20 €。

在假阴性的情况下,支付带有不合理项目的发票。这意味着,保险公司不必要地损失了所述项目的相应货币价值。不合理索赔的平均值可以从历史案例数据中计算出来,这些数据已经过人类主题专家的检查和纠正。让我们假设,每箱是 100 €。

当然,这是成本估算的一种过于简化的表示,但它足以理解这一思想:最终,您将获得每种错误类型的明确的货币价值。在我们的例子中,它看起来像这样:

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

或者,换句话说,根据 TPR 和 FPR:

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

由于 FP 和 FN(或者等效地,TPR 和 FPR)取决于我们的阈值参数 p 的值,我们可以将成本绘制为 p 的函数,即 CST§。在同一张图中标出成本和精确度是有启发性的。为此,我们显示成本不是绝对值,而是最大可能成本的百分比(见图 5)。

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

**图 5。**准确度和成本相对于辨别阈值作图。作为参考,完整的混淆矩阵显示在右下角。(来源:作者)

具有最佳成本的操作点也可以从 ROC 曲线几何地确定。从上述将 CST 与 TPR 和 FPR 联系起来的等式中,我们注意到

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

**图六。**我们示例中的 ROC 曲线(蓝色)有几条等性能线(黄色),每条线对应一个固定成本。从左上到右下,成本垂直于等性能线增加。(来源:作者)

这意味着等价点排列在具有 0.2⋅(N/P).斜率的直线上这些线被称为等性能线【3】。成本随着错误率的增加而增加,也就是在 ROC 图右下角的方向。因此,在 ROC 曲线与最高等性能线相切的地方,成本最低(见图 6)。

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

**图 7。**精度最优和成本最优之间的成本差异会导致大量浪费。(来源:作者)

我们发现,在 76%的准确率水平下,最优成本为 29%。相比之下,最大准确率 85%水平的成本是 40%。因此,准确率提高 9 个百分点,每个案例的成本就会增加 11 个百分点(见图 7)。以高得多的最佳精度有效地操作系统会毁掉您客户的钱!

准确性(以及 F1 或 Matthews 相关系数等替代分数)本身没有价值。只有在与实际成本相联系时,基于彻底的成本估算,这些指标才有意义。

战略决策

既然已经找到了对应于最优成本的阈值,您是否应该相应地配置 AI?这取决于这样的配置如何适应用户更广泛的策略。例如,考虑经营保险业务的两家公司的不同观点。

第一家公司是传统的保险公司。他们从人工智能中获得的潜在好处是提高了索赔验证流程的成本效益。第二家公司是一家服务公司,向保险公司提供主题专业知识。

许多德国保险公司已将其各种损害类型的专业知识外包给专业公司,如 CarExpert、ControlExpert、Dekra、Eucon 和其他公司[5],并向他们支付费用以确定不合理的索赔。乍一看,专业公司似乎也可以简单地应用人工智能来最大化成本效率。然而,他们受到一个额外的约束:他们的客户不关心专家提供者端的不必要的工作(由误报导致),但他们非常关心由于未被发现的不合理索赔(由误报导致)而造成的金钱损失。根据上面定义的指标,保险公司根据 TPR 来衡量提供商的服务质量,除了非常高的价值之外,不愿意接受任何东西。正如我们在上面看到的,最优成本的 TPR 大约是 90%。从保险公司的角度来看,这个值是不可接受的,因为它意味着 10%的不合理索赔没有被注意到。

因此,供应商必须在成本效率和提供足够高的 TPR 之间取得平衡,而不是简单地以最佳成本运营。这给他们留下了两个基本选择。他们可以优先考虑降低运营成本,同时降低服务价格,以在 TPR 较低的情况下保持市场吸引力。或者,他们可以故意将产品质量置于价格之上,例如,以维持高质量服务的声誉,并以长期客户满意度为目标。如果他们选择后者,机器学习解决方案必须在非常高的 TPR 下运行(见图 8)。通过这种方式,提供商可以从适度的自动化率中获益,同时保持非常低的错误率,接近人类水平的性能。

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

**图 8。**优先考虑 TPR 减少了假阴性,但同时也损失了金钱和准确性。(来源:作者)

不利的一面是,与以最佳成本运行相比,以高 TPR 运行会导致每箱成本增加和准确度降低。实际上,所有这种准确性损失都可以归因于误报,遵循的逻辑是,只要找到大多数不合理的主张,人类专家做更多的工作是可以接受的。

不可能从数学上证明哪个选择是正确的。如何在市场中定位自己是一个超越任何公式的决定。困难不止于此。需要考虑的其他因素还有很多,例如公司战略、合规和监管问题、政治和道德考量等等。所有这些点的共同点是它们很难量化——如果有的话。单靠数学无法解决这些困难,在这种复杂的情况下,需要强大而聪明的领导才能找到正确的方法。这是经验丰富的高管(以及他们身边的顾问)能够大放异彩的时刻。

结论

现实并不像 Kaggle 竞赛那样清晰,人工智能在现实世界应用中的表现也不能简单地自动评分。这个问题在战略和人的层面上的成功是无法用公式计算的。从这个意义上说,AI 与商业运营的任何其他重大变革没有什么不同。在现实世界中实施人工智能是一个涉及众多利益相关者的过程,他们根据非常不同的指标评估解决方案的成败,这些指标通常无法用数学方法形式化。例如,由不满意的员工或客户造成的间接成本可能会延迟数月或数年才显现出来,从而使相关风险难以量化。由于这些原因,技术性能指标通常在变更管理过程中扮演重要但最终是次要的角色。

参考

[1] 团队力量,C€-简介 2019 ,第 21 页,2020 年 5 月 30 日检索

[2] T. Fawcett,ROC 分析介绍 (2006),模式识别字母27 ,861–874 页

[3] F. Provost 和 T. Fawcett,不精确环境的稳健分类 (2001),机器学习42 ,第 203–231 页(也可在 arχiv 上找到)

[4] 成人数据集 (1996),通过 Dua,d .和 Graff,C. (2019), UCI 机器学习知识库提供

[5]k . Braun worth,Wertorientiertes prozess management von Dienstleistungsprozessen(2009 年),博士论文,第二节。B1–8

原载于 2020 年 6 月 6 日https://consilica . de

在 5 分钟内编排 Jupyter 笔记本

原文:https://towardsdatascience.com/how-to-orcestrate-jupyter-notebooks-752aa8081208?source=collection_archive---------31-----------------------

用 Bayesnote 替代笔记本用户的气流

Jupyter notebook 是数据科学家中最受欢迎的交互式开发环境。虽然有一次性任务,例如 Jupyter 笔记本电脑就足够了的数据探索,但许多数据科学家很难维护他们长期运行的数据管道,以刷新报告、仪表板和机器学习模型。他们的解决方案非常有限:

  1. 克朗。这是最古老和最常用的解决方案。数据科学家在服务器上设置 cron 时间表,以触发笔记本电脑按照固定的时间表运行,例如每天早上 5 点。Cron 不足以完成这样的任务。

然而,随着数据团队开始编写更多的 cron 作业,不断增长的数量和复杂性变得难以管理。特别是,管理作业之间的依赖关系非常困难。其次,故障处理和警报必须由作业来管理,因此作业或随叫随到的工程师必须处理重试和上游故障,这很麻烦。最后,对于回顾团队来说,必须手动筛选日志来检查某一天的工作执行情况,这是一个时间陷阱。由于这些挑战,数据编排解决方案应运而生。(由阿斯塔西亚·迈尔斯

2.气流 ,及其竞争对手(路易吉达格斯特 )。这种解决方案解决了 cron、处理故障以及用户定义的任务的依赖性等问题。下面的代码是一个 bash 任务,打印 Airflow 官方教程提供的数据。

t1 = BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag,
)

Airflow 及其竞争对手的目标用户主要是数据工程师或 ETL 工程师,他们可能习惯也可能不习惯对实际执行的代码进行强制抽象(例如“print_date”)。一方面,这种抽象对于实现 Airflow 及其竞争对手的设计目标,减少维护数据管道的成本和麻烦是必不可少的。另一方面,这种抽象或“外部代码”本身会引发新的问题:数据科学家需要付出学习成本,他们不得不在调试中的精确问题上花费更多时间。

  1. Argo 和其他基于 Kubernetes 的解决方案。Argo 及其竞争对手在 Kubernetes 上编排 Docker 容器,而不是编排通常是 python 函数的气流任务。它们解决了维护数据管道和环境的问题,而不用担心从本地开发环境转移到生产环境时会丢失一些系统级的依赖。然而,即使有像 AWS 这样的云平台的帮助,运营 Kubernetes 集群也是昂贵且耗时的。对于大多数公司来说,雇佣一个有经验的 Kubernetes 工程师是不可行的。有针对 docker 的学习曲线:如何启动/停止 docker 容器,将 shells 附加到正在运行的容器,重置 root 密码,构建、推送和维护 docker 映像。

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

照片由蒂姆·阿特伯里Unsplash 拍摄

工作流编排考虑的基本设计考虑是由这样的系统解决的问题必须比产生的问题大得多。否则,它只会帮助数据科学家简单地将他们修复 cron 问题的时间转移到修复工作流编排系统的问题上。

为了实现这个目标,这种系统必须做出比上述当前解决方案弱得多的假设。这就是我们开发 Bayesnote 的原因。我们做一个最弱的假设:即使数据团队仅由一名数据科学家组成,他们也可以在 5 分钟内开始在不同的集群上编排笔记本电脑。那儿有

  1. 没有学习曲线。不需要学习抽象概念,也不需要 docker/Kubernetes 知识。
  2. 无运营成本。没有额外的数据库安装,没有端口打开。它可以毫无困难地将自己安装到集群中。

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

Bayesnote

主持人:

  1. 添加要用来运行笔记本的主机。确保 Jupyter 笔记本已经安装。

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

2.一键打开远程笔记本,浏览器会在随机端口打开 Jupyter 笔记本。

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

3.写你的代码。print("Hello bayesnote")

流程:

  1. 创建一个新流程。在next中添加 depdency。

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

2.启动 a 流程。

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

3.点击显示查看笔记本。浏览器将打开一个新的选项卡来显示输出笔记本。

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

就是这样。

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

输出笔记本

我全职从事这个项目。让我知道你的想法。欢迎提问、评论、功能请求和拉动请求。

该项目正在快速增加新功能:https://github.com/Bayesnote/Bayesnote

如何组织机器学习团队取得成功

原文:https://towardsdatascience.com/how-to-organise-your-machine-learning-teams-for-success-199f544afd20?source=collection_archive---------21-----------------------

优步、Linkedin 和 AirBnb 探索将机器学习融入组织的三种组织形式

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

职能团队组织、中央团队组织还是混合团队组织?图片由作者提供。

优步、LinkedIn 和 Airbnb 都是大规模机器学习的成功故事,不是因为它们产生了很酷的研究或有很多人才,而是因为它们实际上成功地将数据转化为金钱和很多钱。

这三家公司都花了数年时间探索组织机器学习工作的不同方式。

我想分享我从他们的努力中获得的关键见解,这样你就不必花费数年来探索不同的模式。

组织机器学习工作的三种方式

组织机器学习工作的方式实际上只有三种,这三种方式各有优缺点,要么让你的机器学习工程师失业,要么让他们成为你最有价值的资产。

因此,让我们来看看三种不同的方式:功能上的 —在一个大型机器学习或数据科学或分析功能中,分散的 —在一个产品/工程团队中,或者两者的混合形式

功能上有组织的机器学习工作可能涉及一个拥有十几名数据科学家的分析部门,或者几个生产 API 的机器学习团队。分散化机器学习工作可能会将机器学习工程师直接整合到产品工程团队中,也可能会将一个机器学习团队与其产品团队一起置于一个单一的产品经理之下。

公司通常从集中的、功能性的方法开始,并且经常失败。有些人设法过渡到分散或混合模式,有些人干脆停止亏损,少数幸运儿坚持下去。

所以让我们从一个工作功能模型的例子开始吧!

AirBnB &优步的功能数据科学团队

尽管许多公司都放弃了功能性的中央模型,但优步公司在多年的机器学习后仍然采用了这种模型。所以我发现看一看它们非常有用。

优步有一大批机器学习工程师、数据科学家等。艾尔。他们在只有机器学习工程师和数据科学家的大型团队环境中,从功能上组织它们的一部分。如果产品工程团队需要他们不能做的事情,这需要机器学习/数据科学专业知识,产品工程团队可以与专家机器学习者和数据科学家合作一段固定的时间,例如三个月。

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

两个功能组织单元(工程和机器学习)之间的协作,例如基于项目的协作。图片由作者提供。

这个模型有一堆关键优势,首先,它最大限度地减少了公司中数据科学/机器学习功能的空闲时间。这反过来意味着公司可以非常早地启动这样的功能。例如,Airbnb 聘请了一名数据科学家作为其第八名工程师,并在此后相当长的一段时间内使用中央模型来分配工作。

第二,它最大化了跨职能部门的知识共享,从而允许开发知识深度、设定标准、创建共享技术堆栈。所有这些都使评估功能需求的时间最小化。

因此,选择采用这种组织形式的公司旨在通过采用共享的技术堆栈、定期研讨会和跨职能部门的大量知识共享工具来释放这些优势,并由一个中央产品经理跨职能部门分配工作量。他们在与工程团队的合作上有明确的界限,比如“3 个月的项目”,如果合理的话,他们会移交代码、所有权和专业知识,以免产生耦合。

LinkedIn 的去中心化方法

LinkedIn 公司也是从一个中心模式开始的,这是一个我称之为“数据科学家”的职能团队,目的是通过为其他团队开发酷的东西来“创造伟大的东西”。

但他们很快意识到这在 LinkedIn 不起作用。引用前 Linkedin 的 DJ Patil 的话:“那些家伙(数据科学家)提出伟大的想法,展示数字,然后被告知这不在[产品团队]的路线图上……

他们会设计一个“推荐引擎”的原型,展示大量的数据,但无法让一个工程团队合作并为其构建一个前端。解决办法?他们转向了一个分散的模式,一个全栈团队。他们把他们变成了一个完整的产品团队,然后创建了 PYMK,他查看了我的个人资料、技能和职业探索。该团队包括设计、网络、产品营销、工程,PYMK 功能成为 Linkedin 团队有史以来最成功的产品之一,将 LinkedIn 的北极星指标提升了 50%。

“矛盾的是,建立一个数据团队的结果是,你会看到公司的各个部门都在生产数据产品。当公司看到数据可以创造什么,当它看到数据的力量,你会看到数据产品无处不在。这就是你知道自己何时赢了的方法。”()

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

强大的全栈去中心化团队,将机器学习工程师整合到需要他们的团队中。图片由作者提供。

Spotify 从一开始就采用了这种模式,将机器学习工程师整合到产品团队中。在 Spotify Weekly 工作的机器学习工程师坐在同样的单位里,也创建了前端,使他们在这个产品上完全授权。

这种模式的第一个优势是产品所有权的集中。这导致了快速的循环时间。将一个新的机器学习想法投入生产所花的时间与添加一个新的下拉选项所花的时间一样长。无需整合不同团队的路线图。这当然释放了机器学习的真正潜力,因为它真的是唯一允许实验的东西,而这在协作环境中几乎是不可能的。

有没有尝试过说服另一个团队构建一个前端特性,这样你就可以运行一个“实验”,并有可能再次杀死前端特性?

第二个优势是产品知识的集中。机器学习者和前端开发人员参与所有的团队活动,并获得他们需要的所有知识,以高速交付正确的东西。

优步的混合模型及其研究

优步虽然是一个工作职能部门的好例子,但实际上是一个混合模型。但优步认识到,团队中的机器学习工程师、从事项目工作的专家机器学习工程师和数据科学家,以及旨在提供公司相关研究的研究团队之间需要明确的区分。

混合模型的优势从单个模型的优势中显而易见。它具有所有的优势,但在组织和沟通方面增加了很多开销。因此,它最适合工程方面的大型功能或异构需求。

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

混合全栈团队、项目专家协作和研究团队的混合模型。图片由作者提供。

如果一家公司有 1-2 个产品团队有很多机器学习需求,20 个其他团队有一些需求,那么混合模式可能是有意义的。

致力于混合模式的公司试图通过开发通用的机器学习框架来减轻可能的弱点,比如优步与 Ludwig 一起开发的框架。像 Spotify 一样聚合技术,将所有机器学习的努力集中在 TFX 和 Kubeflow 管道上。

不要利用弱点

人工智能、机器学习、数据科学都是热门的新趋势,但最终唯一重要的是将这些新东西转化为商业价值。

Airbnb 是深度数据驱动的,并且总是试图最大化他们数据的商业价值。Airbnb 也认识到了职能数据科学组织的弱点。他们意识到,一个核心职能部门既缺乏产品专业知识,也缺乏产品工程团队的工程技能。因此,他们为他们的数据科学家创造了一种教育形式,使他们能够培养这两种技能。

为你的公司选择错误的模式,你的努力将浪费金钱,并最终关闭努力。选择正确的模型,释放模型的优势,而不是迎合它的弱点,你将能够将机器学习和数据科学深入整合到公司中,远远超出分析功能。

进一步阅读

在写这篇文章时,我参考了上述公司提供的一堆不同的文章和文件。我会试着把它们都列在这里,这样你就可以深入了解这些公司的个人经历。

对如何建立伟大的数据公司、伟大的数据密集型产品、成为伟大的数据团队感兴趣,还是对如何利用开源构建伟大的东西感兴趣?然后考虑加入我的 免费简讯《三个数据点周四》 。它已经成为数据初创企业、风投和数据领导者值得信赖的资源。

如何组织机器学习项目

原文:https://towardsdatascience.com/how-to-organize-machine-learning-projects-babd04f7a679?source=collection_archive---------29-----------------------

Python,Git,Anaconda,Code,没有 Jupyter 笔记本

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

图片作者。子图片都是由作者或允许(见个人链接后)。

这篇文章描述了组织机器学习项目的最佳实践,我在攻读机器学习博士学位期间发现这些实践非常有效。

Python

Python 是一种很棒的机器学习语言。Python 包含了一系列对 ML 非常有用的库:

  • numpy : n 维数组和数值计算。对数据处理有用。
  • 熊猫:数据分析库。pandas 数据帧本质上是用描述性字符串作为行和列标签的 numpy 数组。它们可以被排序、过滤、分组、连接等。对数据处理有用。
  • PyTorch :构建神经网络。包括许多预训练的模型和干净的计算机视觉数据集。PyTorch 是我最喜欢的神经网络库,因为它鼓励使用面向对象的编程(模型是一个类,数据集是一个类,等等。),用 PyTorch 写代码很快,PyTorch 默认支持急切执行,所以可以和 Python 调试器一起使用。
  • tensor flow:py torch 的替代品,在业界更受欢迎。几年前,我使用 TensorFlow,但在改用 PyTorch 后,我再也没有回头。我发现 PyTorch 更适合做研究。如果你想使用 TensorFlow,并且你想要一个更高级别的接口,你可以使用 Keras
  • 这是一个很好的库,用于回归、支持向量机、k 近邻、随机森林、计算接收器工作特性下的面积、计算混淆矩阵等。
  • matplotlib 和 seaborn :制作可爱的可视化效果!我将在后面的章节中介绍这些库。

Git

Git 版本控制对于保持机器学习项目的有序非常有用。

Git 是一个工具,可以用来跟踪您对代码所做的所有更改。Git“存储库”是包含代码文件的目录。Git 使用节省空间的技术,因此它不会存储代码的多个副本,而是存储旧文件和新文件之间的相对变化。Git 有助于保持您的代码文件目录整洁有序,因为只有最新版本“明显”存在(尽管您可以随时轻松访问任何版本的代码)。您可以选择何时标记已经发生的更改,使用“提交”将特定的代码更改与您提供的书面描述捆绑在一起。Git 存储库也使得代码共享和协作变得容易。总的来说,与在“myscript_v1.py”、“dataprocessing_v56.py”、“utils_73.py”等下保存一百万个不同版本的代码相比,Git 是保留旧代码功能的更好的解决方案。

Git 版本控制可以通过 GitHub、GitLab 和 Bitbucket 获得。我最常使用 GitHub。一旦你设置好 GitHub 并习惯了使用它,建立一个新的资源库大约需要 2 分钟。

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

Octocat,允许在博客帖子中使用 GitHub 徽标和用法

以下是在您的机器上安装 GitHub 的步骤:

  1. 安装 Git:【https://git-scm.com/downloads】T2
  2. 制作 GitHub 账号【www.github.com
  3. 通过 SSH 密钥将您的 GitHub 帐户与您的机器连接起来。这一步使您能够将代码从您的机器推送到 GitHub 的云存储中。参见生成新的 SSH 密钥向您的 GitHub 帐户添加新的 SSH 密钥
  4. 在 GitHub 上创建一个新的资源库,方法是在您的个人资料的“资源库”部分点击绿色的“新建”按钮。
  5. 使您的计算机能够推送至该存储库(请注意,在您创建存储库之后,GitHub 会立即为您提供这些说明以及存储库的正确 URL 以下命令只是一个示例):
echo "# pytorch-computer-vision" >> README.md 
git init 
git add README.md 
git commit -m "first commit" 
git branch -M master 
git remote add origin https://github.com/rachellea/pytorch-computer-vision.git 
git push -u origin master

假设您现在已经更改了 myeditedscript.py .中的一些代码,以“提交”到存储库(即记录该更改):

git add myeditedscript.py 
git commit -m 'added super useful functionality' 
git push origin master

蟒蛇

Anaconda 是一个包管理器。它允许创建不同的计算环境,这些计算环境可能包含不同的 Python 版本和/或不同的包和/或不同的包版本。当您处理多个具有冲突依赖关系的项目时,Anaconda 尤其有用。

Anaconda 很容易使用。步骤:

首先,安装 Anaconda:https://docs.anaconda.com/anaconda/install/

接下来,创造一个环境。我发现以项目命名环境很有用。例如,如果项目是关于胸部 x 光分类使用神经网络,环境可以被称为 chestxraynn:

conda create --name chestxraynn python=3.5

请注意,您不希望在环境名称两边加上引号,否则引号字符本身将成为环境名称的一部分。此外,您可以选择任何想要的 Python 版本。它不一定是 Python 3.5。

一旦创建了环境,就该激活环境了。“激活”仅仅意味着你将被“放入环境中”,这样你就可以使用安装在环境中的所有软件。

要在 Windows 上激活环境,请运行以下命令:

activate chestxraynn

在 Linux 或 macOS 上,

source activate chestxraynn

您可以使用“conda install”命令在环境内部安装软件包。

例如,安装 matplotlib 的 conda 命令是:

conda install -c conda-forge matplotlib

你可以谷歌“conda install packagename”来找到告诉你运行什么 conda 命令来安装该软件包的页面。从技术上讲,在 conda 环境中,你也可以使用 pip 安装包,但是这会导致问题,所以如果可能的话应该避免。

Anaconda 将负责确保环境中所有内容的版本都是兼容的。更多命令见 Conda 备忘单

也可以从别人放在一起的文件中创建一个 conda 环境。在 GitHub 库https://github.com/rachellea/pytorch-computer-vision中,有一个名为 tutorial_environment.yml 的文件,这个文件指定了运行教程代码所需的依赖关系。要基于该文件创建 conda 环境,您只需在 Anaconda 提示符下运行以下命令:

conda env create -f tutorial_environment.yml

组织你的代码:类和函数

代码组织非常重要。在过去的不同时期,我遇到过研究代码被数千行代码塞进一个模块,没有文档,重复的代码块到处复制粘贴,一些代码块没有解释就被注释掉,还有奇怪的变量名。代码不会运行,即使运行了,也可能是不正确的。

我也遇到了许多优秀的代码——例如,我在 PyTorch 实现中看到的所有代码都是有组织的,并且有良好的文档记录。

从长远来看,如果你为自己的项目编写高质量的代码,将会节省你很多时间。高质量代码的一个方面是它在模块中的组织。

建议:

  • 使用面向对象的编程。我强烈推荐 PyTorch 作为机器学习框架,因为它有助于在任何事情上使用面向对象编程。模型就是一个类。数据集是一个类。等等。
  • 使用函数。如果你写的东西不能很好地作为一个类,那么就把代码组织成函数。功能是可重用的。全局命名空间中的代码块是不可重用的。

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

有组织代码的示意图。图片作者。

组织你的代码:目录

使用多个模块来组织代码,并将这些模块组织到目录中。

我喜欢的一个简单的示例组织展示在我为这篇文章和其他相关文章整理的 GitHub 库中:【https://github.com/rachellea/pytorch-computer-vision

整体组织如下:

  • 一个用于训练/评估/测试循环的模块(src/run_experiment.py)
  • 一个用于计算绩效指标的模块(src/evaluate.py)
  • 一个(或多个)数据处理模块:(load_dataset/custom_pascal.py 和 load_dataset/custom_tiny.py)
  • 模型的一个(或多个)模块:models/custom_models_base.py

以下是存储库的整体组织结构:

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

组织py torch-计算机视觉。图片作者。

请注意,虽然这个存储库中存储了一个数据集(这些 png 位于“train”、“val”和“test”目录中),但一般来说,将数据集放入存储库并不是一个好主意。这个存储库中有一个数据集的唯一原因是因为它是一个很小的假数据集,是为了举例而创建的。除非您的数据非常小,否则不应该放在存储库中。

导入

请注意,您需要一个名为 init 的空文件。py,以便模块可以从这些目录中导入文件。

下面是如何让一个名为 awesomecode.py 的模块导入一个名为 helpercode.py 的模块,这是基于它们相对于彼此所处的目录:

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

作者图片

文档

写很多文档是有好处的。评论一切。用 docstrings 记录所有的函数、方法和类。有时候,在编写函数之前对它进行文档化是很有帮助的。如果文档有时比代码长也没关系。“过于清晰”总比不够清晰好。

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

作者图片

上图是一个简单的函数 rand_rotate(),它随机旋转一个代表 CT 体积的 3D numpy 数组。可以通过指定是一个 3D numpy 数组来改进 docstring。这些注释很有帮助,因为它们解释了为什么指示所执行旋转的向量使用(k-1)-这是因为 chosen _ k 是 1、2 或 3,但 Python 是零索引的。像这样简单的注释可以防止以后混淆。

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

作者图片

上图显示了我的数据处理教程 代码中的一些文档。

文档将确保当你回顾旧代码时,你能很快记住它做了什么。当你看到一些看起来很奇怪的东西并本能地改变它时,文档将防止你意外地破坏你自己的代码——如果它旁边有一个注释解释为什么奇怪的东西是必要的,你就不去管它。文档也能让其他人使用你的代码。

命名变量

总是使用描述性的变量名。“volumetric_attn_gr_truth”是比“truth”更好的变量名(什么 truth?),而且比“gt”或“g”好得多。如果你的变量有很长的名字也没关系。他们不应该有单字母的名字。

即使你正在对行和列进行迭代,也要使用“row”和“col”作为你的变量名,而不是“I”和“j”。我曾经花了一整天的时间寻找一个非常奇怪的 bug,结果发现它是由于错误地迭代了一个 2D 数组引起的,因为我在数百行代码中的一行代码中调换了“I”和“j”。那是我最后一次使用单字母变量名。

单元测试

很多人声称他们没有时间为他们的代码编写测试,因为“这只是为了研究。”我认为测试研究代码甚至更重要,因为研究的全部意义在于你不知道什么是“正确的答案”——如果你不知道你的代码产生的答案是否正确,你怎么知道你是否得到了正确的答案?

每次我花一天时间为我的代码编写单元测试时,我都会发现错误——有些很小,有些更严重。如果你写单元测试,你捕捉你代码中的错误。如果你为别人的代码编写单元测试,你也会在他们的代码中发现错误。

除了促进代码的正确性,单元测试还有助于执行良好的代码组织,通过阻止你编写一次做太多事情的“神函数”。God 函数通常是测试的噩梦,应该被分解成更小、更易管理的函数。

至少,对代码中最关键的部分进行单元测试是个好主意,比如复杂的数据处理或者模型中奇怪的张量重排。确保你的代码是正确的从来都不是浪费时间。

你可以在这里看到一个非常简单的单元测试的例子。这些单元测试包括出于演示目的对一些内置 PyTorch 函数的测试。

用可视化检查代码

特别是在计算机视觉中,使用可视化来执行健全性检查是非常有用的。

matplotlib 非常适合查看图像、分割图、带边框的图像等。以下是通过将 matplotlib 的 imshow()函数应用于输入图像而生成的可视化示例:

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

matplotlib imshow 生成的示例图像,来自图像演示。Matplotlib 使用一个 BSD 许可证,这是一个许可的自由软件许可证。

seaborn 专为统计数据可视化而设计。它非常适合制作热图和制作复杂的性能指标可视化。以下是一些在 seaborn 中用大约一行代码就可以绘制出的图形示例:

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

分别由seaborn group violin plotsseaborn group box plotsseaborn heatmap 制作的示例图像。seaborn 使用一个 BSD 许可证,这是一个许可的自由软件许可证。

matplotlib 和 seaborn 都可以用于创建可视化效果,即时显示输入数据是否合理,基础事实是否合理,数据处理是否没有意外出错,模型的输出是否有意义,等等。

演示 0:单元测试和可视化

教程存储库中,Demo-0-Unit-Tests-and-visualization . py将运行 src/unit_tests.py 中的单元测试,然后将运行 PASCAL VOC 2012 数据集图像和分段基础事实的可视化。

为了运行演示的可视化部分,将 Demo-0-Unit-Tests-and-visualization . py 中的路径更改为您的计算机上的路径,您可以在该路径中存储 PASCAL VOC 2012 数据集,并取消注释路径下的行以下载数据集。一旦数据集被下载,您就可以运行可视化。进行可视化的代码在load _ dataset/custom _ Pascal . py中。此刻,在演示文件中,images_to_visualize 的总数被设置为 3;如果您想要可视化更多的图像,您可以进一步增加该数字,例如增加到 100。

这是可视化效果的样子:

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

图片作者。原帕斯卡 VOC 2012 年飞机验证集图像。

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

图片作者。PASCAL VOC 2012 验证集已重新采样为 320 x 320 像素的飞机图像。图像重采样使用 torch . nn . functional . interpolate(mode = ’ bicubic '),而分割基本事实重采样使用 PIL 调整大小(重采样=PIL。Image.NEAREST)即最近邻重采样。

从这些图像中,我们可以推断出一些有用的东西:

  • 输入图像和地面实况分割之间的映射是正确的。
  • 用于定义逐像素分割基础事实的整数和标签描述字符串之间的映射是正确的。例如,1 正确映射到“飞机”
  • 重采样步骤不会“破坏”输入图像或分割基础事实,也不会导致它们严重错位。

终端中的可视化

如果您处于“非交互式环境”(即没有图形用户界面的终端),那么您需要关闭交互式绘图并保存您的图形,以便您可以在其他地方打开它们:

import seaborn 
import matplotlib 
matplotlib.use('agg') 
import matplotlib.pyplot as plt 
plt.ioff() #seaborn figure: 
heatmap = seaborn.heatmap(some_dataframe, cmap = 'Blues', square=True, center=0)
heatmap.get_figure().savefig('Descriptive_Figure_Name.png',bbox_inches='tight') 
plt.close() #matplotlib figure: 
plt.imshow(chest_x_ray,cmap='gray')
plt.savefig('Other_Descriptive_Figure_Name.png') 
plt.close()

Python 调试器

Python 调试器是一个非常有用的工具,因为它允许你在程序崩溃的地方检查状态中的一切,并在程序崩溃的地方运行代码片段,这样你就可以尝试可能的解决方案。使用 Python 调试器比使用 print 语句进行调试要高效得多,它将为您节省大量时间。Python 调试器也可以与 PyTorch 一起使用;您可以检查张量、梯度、测井数据帧等。

要使用 Python 调试器在终端中交互式运行脚本,请使用以下命令:

python -m pdb myscript.py

您将看到一个(Pdb)提示符出现。键入“c”继续。(这只是一个单独的小写字母 c,表示继续)。

要退出 Python 调试器,请使用‘q’(这是一个单独的小写字母 q,表示退出)。您可能需要使用 q 两次才能完全退出。

如果你想在程序的某个特定点停止,那么你可以在相关模块中导入 pdb,然后在你想停止的特定点放置“pdb . set _ trace()”。或者,如果你不想麻烦导入 pdb,你可以只在你想停止的地方写“assert False ”,这将保证程序在你想它死的地方死亡(尽管这不是使用 Python 调试器的正式方式)。

不要用 Jupyter 笔记本

鉴于前面的所有章节,我现在必须推荐永远不要使用 jupyter 笔记本进行机器学习项目,或者实际上进行任何需要花费你几天以上时间的编码项目。

为什么?

  1. 笔记本鼓励你在全局名称空间中保存所有的东西,这产生了一个巨大的模块,它做所有的事情,没有函数,没有类,也没有任何结构。
  2. 笔记本使得重用你的代码更加困难。功能可重复使用;“单元格 5、10 和 13 中的代码”不可重复使用。
  3. 笔记本使单元测试变得困难。函数和方法可以进行单元测试。“单元格 5、10 和 13 中的代码”不能进行单元测试。
  4. 你的代码越有组织(比如,越细分成类和函数),笔记本的交互性就越差——而交互性是人们喜欢笔记本的主要原因。笔记本吸引人的交互性本质上与高度结构化、组织良好的代码相反。
  5. 笔记本很难正确使用 Git 版本控制。笔记本只是大量的 JSON 文件,所以正确地合并它们或者用它们做拉请求基本上是不可能的。
  6. 笔记本使与其他人合作变得困难。您必须“轮流”在笔记本上工作(而不是像“常规代码”那样从同一个回购中推/拉)。
  7. 笔记本有一个非线性的工作流程,这与可复制的研究完全相反。你不必“以特定的顺序运行单元格”来复制别人的工作。

笔记本有什么用?一些可能可接受的用例是初始数据可视化、家庭作业、“演示风格”软件和交互式演示。(然而,我认为所有这些都可以不使用 jupyter 笔记本来完成。)

我不是现存的唯一一个认为机器学习项目最好避免使用 jupyter 笔记本的人。如需进一步阅读/参考,请参见 Daoud Clarke 的为什么我不用 Jupyter 笔记本,你也不应该用;【jupyter 笔记本烂的 5 个理由亚历山大穆勒著;克里斯蒂娜·杨的《T4》和《笔记本反模式》。

目标

两个有用的目标是:

  1. 编写正确易懂的代码。如果你的代码是正确的,你的模型更有可能产生好的结果,你的研究结论将是正确的,并且你将创造一些实际有用的东西。
  2. 确保任何人都可以通过在终端中运行一个命令(例如“python main.py”)来复制您所做的一切,例如您的模型、结果、图形。这将有助于他人建立在你的工作之上,也将有助于“未来的你”建立在你自己的工作之上。

总结

  • Python 是一种优秀的机器学习语言
  • Git 版本控制有助于跟踪不同版本的代码。它可以通过 GitHub 获得。
  • Anaconda 是一个包管理器,可以创建不同的环境,其中可能包含不同的 Python 版本和/或包。当处理多个具有冲突依赖关系的项目时,这很有用。
  • 将代码组织成模块中的类和函数。在 Git 存储库中以分层目录结构组织模块。
  • 用注释和文档字符串记录您的代码
  • 使用描述性的变量名。不要使用单字母的变量名。
  • 编写单元测试,尤其是对于数据处理和模型中最复杂或最关键的部分。
  • 使用 matplotlib 和 seaborn 可视化工具可视化您的数据集、模型输出和模型性能
  • 使用 Python 调试器进行快速、高效的调试
  • 不要将 jupyter 笔记本用于机器学习项目

机器学习快乐!

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

维基百科的微笑猫,知识共享许可

原载于 2020 年 9 月 22 日【http://glassboxmedicine.com】

如何用 Github 组织你的数据科学文章

原文:https://towardsdatascience.com/how-to-organize-your-data-science-articles-with-github-b5b9427dad37?source=collection_archive---------20-----------------------

被新信息淹没?现在,您可以轻松地跟踪文章并为其创建自定义注释

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

下一个网页中检索

动机

在数据科学领域,每天都有大量的论文和文章发表。许多像 Medium 这样的网站都有一个高效的推荐系统,可以很好地推荐那些我们无法抗拒点击的文章。一篇接一篇的文章似乎都很有用。所以我们继续阅读,要么关闭标签,要么保存文章以备将来参考。既然我们每天都会碰到很多文章,那我们一定是被新的信息所告知,对吗?不完全如此。

质量比数量更重要。一个本垒打比两个双打好得多。—史蒂夫·乔布斯

我们吸收新知识的最好方式是使用它。无论我们读了多少技术文章,如果我们不应用新知识,我们将几乎什么都不会保留。我们现在可能会记住一些东西,但一周后就会忘记。但是仔细想想。在快节奏、超负荷的社会,我们阅读一篇文章的常用策略是什么?

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

我的文章堆在我的 Instapaper 文件夹里

当我们阅读一篇有用的文章时,我们通常不会马上尝试代码、探索工具和深入概念,而是保存它。要么是因为我们正在使用手机阅读文章,要么是因为我们想在需要时试用代码和工具。当我们回顾我们保存的大量文章时,我们会不知所措,并发现浏览这些文章以找到一篇对我们当前项目有用的文章非常耗时。那么什么是解决方案呢?

现有工具的问题

有很多工具可以让我们保存你的文章,并对它们进行分类。但是使用这些工具保存文章有几个缺点:

  • 我们只是保存这些文章,因为它们很有趣,但不太确定如何以及何时应用它们
  • 我们需要重读某一特定类别中的文章,以找到包含我们要寻找的信息的文章,而这些信息可能是一些很小的东西,比如代码片段
  • 如果我们对文章有一些问题或意见,我们要么回到文章的网站,要么在网上发布问题,这很费时间,等等

好消息是,我们不需要花太多时间来组织你的文章!有了 Github,并在平台的使用上稍加改动,我们可以高效地组织文章。

欢迎来到 Github 及其问题选项卡

Github 是一个轻量级平台,它将开发者聚集在一起,发现、共享代码并构建更好的软件。Github 有一个 Issues 选项卡,允许用户请求关于现有代码的问题。我们将把这个选项卡用于另一个目的:组织和总结我们的文章。大概是这样的:

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

探索这个仓库这里。这就是为什么您应该开始使用和贡献这个库的原因:

  • 整理你的文章,以便很容易找到你的文章以备将来参考
  • 不看整篇文章,快速复习文章重点
  • 总结的艺术将帮助你更好地保留和理解信息
  • 通过看别人喜欢的文章来节省阅读低质量文章的时间
  • 对问题评论区的文章提问或发表意见

我是 Github 的新手。我还能用吗?

是的,当然!这个存储库的构建使得任何人都可以轻松开始。每当您找到一篇想要保存的有趣文章时,请单击左上角“代码”旁边的“问题”按钮,然后单击右上角的“新问题”。

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

将显示一个模板。你需要做的就是填写模板。想象一下,就像你的笔记本一样,你想快速保存一篇文章的基本信息,这样你就可以很容易地在将来快速保留这些信息,或者让其他人看到并知道这篇文章的内容。

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

模板

以下是该模板中各部分的简要描述:

  • TL;博士——论文的简短摘要。
  • 文章链接。
  • 作者
  • 关键要点——文章中你觉得有用的部分。
  • 有用的代码片段——您希望保存以备后用的有用代码
  • 有用的工具 —你想尝试或整合到你的工作流程中的有用工具
  • 评论/问题 —您对文章的想法或问题。
  • 图像(可选)—为您提供文章内容的直观描述

这是点击“提交新问题”后模板的外观

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

Github 链接

请随意跳过任何与您正在寻找的内容无关的部分。记住,把这个当成自己的文件夹。把你认为对自己回顾会有用的东西写下来就行了!如果一篇文章有很多条信息,有些你已经知道了,懒得写在模板里。写下你想写的任何东西。写点东西总比一路放弃好。

最后但同样重要的是,使用标签相应地标记文章的类别。

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

您也可以使用评论部分作为讨论、评论、提问或对文章给出反馈的地方。

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

结论

花在组织上的每一分钟,都是一小时的收获。—本杰明·富兰克林

在这个信息超载的社会,我们不需要成为那些被新信息淹没而一路放弃的人。我们只需要改变我们的方法,这样我们就可以更有效地做我们经常做的事情。开始使用这个存储库来组织和保留更多信息。我希望通过这个平台,我们可以一起建立一个社区,在那里每个人都渴望学习和分享有用的知识。

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedInTwitter 上和我联系。

如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:

[## 如何用 Ngrok 用 3 行代码分享你的 Jupyter 笔记本

想象一下,让你的朋友在远程机器上使用你的本地 Jupyter 笔记本

towardsdatascience.com](/how-to-share-your-jupyter-notebook-in-3-lines-of-code-with-ngrok-bfe1495a9c0c) [## 如何使用 HyperDash 远程监控和记录您的机器学习实验

培训需要很长时间才能完成,但你需要去洗手间休息一下…

towardsdatascience.com](/how-to-monitor-and-log-your-machine-learning-experiment-remotely-with-hyperdash-aa7106b15509) [## 当生活不给你喘息的机会,如何学习数据科学

我努力为数据科学贡献时间。但是发现新的策略使我能够提高我的学习速度和…

towardsdatascience.com](/how-to-learn-data-science-when-life-does-not-give-you-a-break-a26a6ea328fd) [## 使用 Python 最大化您的生产力

你创建了一个待办事项清单来提高效率,但最终却把时间浪费在了不重要的任务上。如果你能创造…

towardsdatascience.com](/maximize-your-productivity-with-python-6110004b45f7)

如何克服编码障碍

原文:https://towardsdatascience.com/how-to-overcome-coders-block-51ece9dafe00?source=collection_archive---------8-----------------------

当你害怕你的游戏机时

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

游戏机可能会令人生畏。Patrick Amoy 在 Unsplash 上拍摄的照片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 H 你有没有觉得自己完全被堵住了?你曾经盯着你的空白屏幕几个小时,不能记下任何东西吗?欢迎加入俱乐部。

当我走进房间时,你正在滔滔不绝地谈论你的计算机科学作业。你的桌子上堆满了脚本和条款清单。你的电脑屏幕是一个黑色的大空间,除了左上角闪烁的白色指针。整个房间似乎都在尖叫着说出你的绝望。

“一切都好吗,”

不——我计算机科学课的作业快把我逼疯了。明天就要交了,而我连一行代码都没写!

“你现在已经做了多长时间了,”

“三个小时,”

好了,该休息了。“你想喝杯茶吗?”

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

编码很难。一杯热饮料会有帮助。 Goran IvosUnsplash 上拍摄的照片

是的,但是——”

之后你就可以回去完成你的任务了。

你跟着我下楼,我打开水壶。一旦我们的茶倒了,我们回到你的房间。

只是——我什么也不懂。我坐在那里,想了又想,就是做不到。

有什么问题?“你知道你应该做什么吗,”

原则上,是的。但是我不知道如何告诉电脑它应该做什么。“我该怎么开始呢,”

你害怕游戏机。

呃。“是的,我想是的,”

这就像作家的块。有时当你写作时,你会在一张白纸前坐几个小时,一个字也记不住。在某些时候,你会害怕那张纸,因为你已经看了很久了。

同样的情况也发生在编码器的区块。你盯着你的控制台,什么也做不了,直到控制台吓到你。

是的,听起来很熟悉。

一段复杂的代码由许多简单的子程序组成

让我们一步一步来。我们将从编写一个 Hello-World 程序开始。

“但这很简单,我们五周前就这么做了,”

这正是我们再次这么做的原因。很简单,所以你不会被屏蔽。

好吧,等等……

你打开一个新的文本文件。

在打印 Hello-World-message 之前,我必须包含一些包吗?

你当然知道。“Hello-World-message 是什么样的对象?”

一根绳子?啊,等等!我需要包含字符串包…好的,知道了。

好了,现在输入信息并执行。

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

从简单的事情开始。你总是可以呆会儿……安妮·斯普拉特在 Unsplash 上拍摄的照片

“耶,它起作用了!”

太好了!在你的作业中,你还必须在屏幕上打印一些东西。“先写那部分怎么样,”

好吧,但那更复杂,”

我们将一步一步地做它。你需要打印什么?

一些变量的值。但我还没算过。“那我怎么能把它们打印出来呢,”

你现在可以放入虚拟值。请务必留下评论来标记这些假人。通过这种方式,我们会记得以后用实际价值来替换它们。

好吧,等等……我想我已经做到了。

让我们检查一下!请执行程序。

哎呀,输出没有我们预期的那样。让我们来解决这些问题吧。

“但我看不出代码中有任何错误!”

“你在那里打了一个小错字……”

该死的。好了,现在它正常工作了。

厉害!“现在我们还需要做什么,”

计算变量的值。

“好吧,就这么办!”

半小时后,程序启动并运行。

永远不要忘记进行测试和调试

哇,谢谢你!你救了我的命。

嗯,基本上是你自己写的代码。我只是给了你一些指导。顺便说一下,你可以删除 Hello-World 程序。

哦,当然,我忘了那部分。但是说真的——我在那里坐了几个小时。然后你进来,几分钟就解决了。“你是个天才,”

好吧,花几个小时解决一个问题通常不是办法。

当我开始写代码的时候,我经常太害羞而不敢向别人寻求帮助,因为我觉得这样会显得很愚蠢。所以我会在屏幕前坐几个小时,无法解决问题,越来越焦虑。

当我最终去寻求帮助时,问题通常是一个小小的打字错误或另一个小错误。

“这就教会了你遇到困难时要寻求帮助,”

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

是的,你应该经常寻求帮助。不要等几个小时才问。设法在合理的时间内解决这个问题。如果这段时间过去了,却没有取得很大进展,那就去问。

就我而言,我已经解决了问题,但我无法告诉电脑该怎么做。

既然如此,那就做点傻事吧。没有什么是完全没有意义的,而是非常简单的——比如 Hello-World 程序。你知道如何让计算机做事情。但是某种程度的复杂性在开始时可能会令人生畏。

您可以使用这个简单的代码来构建您的程序。“从最简单的部分开始,然后再进行最难的部分,”

[## 在编码器的块上

编码很难。有时候感觉你一点进步都没有。尼尔·科斯拉有一些振奋人心的话给那些与编码障碍作斗争的人。

medium.com](https://medium.com/@nealkhosla/on-coders-block-72125ff9f50f)

所以下次我不知道如何开始的时候,我会做一些真正简单的事情——即使它看起来与手头的任务无关。然后先做我任务中最简单的部分。

没错。如果你在写代码之前已经思考这个问题几个小时了,休息一下吧!喝杯茶或咖啡,或者散散步。毕竟,在经历了数小时的编码阻塞后,你不太可能会有所收获。

天哪,我想我需要把这些都贴在海报上。“非常感谢!”

不客气!如果你下一个任务有问题,请告诉我。

如何无痛分析你的时间序列

原文:https://towardsdatascience.com/how-to-painlessly-analyze-your-time-series-f52dab7ea80d?source=collection_archive---------14-----------------------

MPA 简介:矩阵概要 API

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

图片来源: Needpix

我们被时间序列数据包围着。从财务到物联网再到营销,许多组织都产生了数千个这样的指标,并挖掘它们来揭示业务关键型洞察力。一个站点可靠性工程师可能会监控来自服务器群的成千上万的时间序列流,以期检测异常事件并防止灾难性故障。或者,实体零售商可能关心识别顾客客流量的模式,并利用它们来指导库存决策。

识别异常事件(或“不一致”)和重复模式(“主题”)是两个基本的时间序列任务。但是如何开始呢?对于这两个问题,有几十种方法,每一种都有独特的优点和缺点。

此外,众所周知,时间序列数据很难分析,数据科学社区的爆炸式增长导致了对更多“黑盒”自动化解决方案的需求,这些解决方案可以由具有广泛技术背景的开发人员利用。

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

如何在单一图片中分析你的时间序列(图片来源:Matrix Profile Foundation)

我们在矩阵档案基金会相信有一个简单的答案。虽然没有免费的午餐,但 Matrix Profile(加州大学河滨分校基奥研究小组开发的一套数据结构&相关算法)是一个强大的工具,可以帮助解决异常检测和模体发现的双重问题。Matrix Profile 是健壮的、可扩展的,并且在很大程度上是无参数的:我们已经看到它适用于广泛的指标,包括网站用户数据、订单量和其他业务关键型应用程序。

正如我们将在下面详细介绍的那样,Matrix Profile Foundation 已经在三种最常见的数据科学语言(Python、R 和 Golang)中实现了 Matrix Profile,作为一种易于使用的 API,适用于时间序列新手和专家。

那么什么是矩阵轮廓呢?

Matrix Profile 的基本原理很简单:如果我将数据的一部分沿着时间序列的其余部分滑动,它在每个新位置的重叠程度如何?更具体地说,我们可以评估一个子序列和相同长度的每个可能的时间序列片段之间的欧几里德距离,建立所谓的片段的“距离轮廓”

如果子序列在数据中重复自身,将至少有一个完全匹配,并且最小欧几里德距离将为零(或者在存在噪声的情况下接近零)。相反,如果子序列是高度独特的(假设它包含一个重要的离群值),匹配将很差,所有重叠分数将很高。注意,数据的类型是不相关的:我们只关注一般的模式守恒。

然后我们在时间序列上滑动每一个可能的片段,建立一个距离轮廓的集合。通过对所有距离剖面的每个时间步长取最小值,我们可以构建最终的矩阵剖面。请注意,矩阵轮廓值范围的两端都是有用的。高值表示不寻常的模式或异常事件;相比之下,低值突出了可重复的主题,并为您感兴趣的时间序列提供了有价值的见解。

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

图片来源:矩阵简介基金会

对于那些感兴趣的人来说,我们的联合创始人之一的这篇文章提供了一个关于 Matrix 简介的更深入的讨论。

尽管 Matrix Profile 可以改变时间序列分析的游戏规则,但利用它来产生洞察力是一个多步骤的计算过程,其中每一步都需要一定程度的领域经验。然而,我们认为,数据科学中最强有力的突破发生在复杂系统变得可访问的时候。当谈到 Matrix Profile 时,可访问性有三个方面:“开箱即用”的工作实现,对核心概念的温和介绍,这自然会导致更深入的探索,以及多语言可访问性。

今天,我们很自豪地推出 Matrix Profile API (MPA),这是一个用 R、Python 和 Golang 编写的通用代码库,实现了所有这三个目标。

MPA:工作原理

使用矩阵配置文件包括三个步骤。

首先,你计算矩阵轮廓本身。然而,这并不是结束:您需要通过利用您已经创建的矩阵档案来发现一些东西。你想找到重复的模式吗?或者发现异常事件?最后,将你的发现可视化是至关重要的,因为时间序列分析极大地受益于某种程度的可视化检查。

通常,你需要通读几页文档(学术的和技术的)来弄清楚如何执行这三个步骤。如果您是一名事先了解矩阵概况的专家,这可能不是一个挑战,但我们已经看到许多用户只是想通过突破方法来分析他们的数据,以达到一个基本的起点。代码可以简单地利用一些合理的默认值来产生一个合理的输出吗?

为了与这种自然的计算流程并行,MPA 由三个核心组件组成:

1.计算(计算矩阵轮廓)

2。发现(评估 MP 的主题、不一致等)

3.可视化(通过基本情节显示结果)

这三个功能被打包成一个叫做分析的高级功能。这是一个用户友好的界面,使对 Matrix Profile 的内部工作一无所知的人能够快速利用它来获取自己的数据。随着用户对 MPA 的体验和直觉越来越多,他们可以很容易地深入到三个核心组件中的任何一个,以获得更多的功能。

MPA:一个玩具例子

作为一个例子,我们将使用 MPA 的 Python 风格来分析如下所示的合成时间序列:

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

图片来源:矩阵简介基金会

目测表明,既有模式,也有不一致。然而,一个直接的问题是你选择的子序列长度将会改变你的基序的数量和位置!指数 0-500 之间是否只有两个正弦图案,还是每个周期都是该图案的一个实例?让我们看看 MPA 如何应对这一挑战:

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

图片来源:矩阵简介基金会

因为我们没有指定任何关于我们的子序列长度的信息,所以“分析”从利用一种称为泛矩阵谱(或 PMP)的强大计算开始,以产生帮助我们评估不同子序列长度的见解。我们将在后面的帖子中讨论 PMP 的细节(或者你可以阅读相关的论文),但简单地说,它是对所有可能的子序列长度的全局计算浓缩成一个单一的视觉摘要。X 轴是矩阵轮廓的索引,Y 轴是相应的子序列长度。阴影越暗,该点的欧几里德距离越低。我们可以使用三角形的“峰”来寻找在合成时间序列中视觉呈现的 6 个“大”主题。

PMP 很好,但是我们承诺了一种简单的方式来理解你的时间序列。为了促进这一点,“分析”将结合 PMP 与引擎盖下的算法,从所有可能的窗口大小中选择合理的主题和不一致。由“分析”创建的附加图形显示了前三个基序和前三个 discords,以及相应的窗口大小和在矩阵轮廓中的位置(以及,通过扩展,您的时间序列)。

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

图片来源:矩阵简介基金会

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

图片来源:矩阵简介基金会

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

图片来源:矩阵简介基金会

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

图片来源:矩阵简介基金会

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

图片来源:矩阵简介基金会

毫不奇怪,这是来自默认设置的大量信息。我们的目标是这个核心函数调用可以作为您未来许多分析的起点。例如,PMP 表明在我们的时间序列中有一个长度约为 175 的保守基序。尝试对该子序列长度调用“analyze ”,看看会发生什么!

收尾

我们希望 MPA 能够让你更无痛的分析你的时间序列!欲了解更多信息,请访问我们的网站GitHub repos ,或在 Twitter 上关注我们。如果你觉得代码有用,请在我们的 GitHub repos 上打星号!MPF 还开设了一个 Discord 频道,您可以通过该频道与 Matrix 档案的其他用户交流并提出问题。快乐的时间系列狩猎!

致谢

感谢 Tyler Marrs、Frankie Cancino、Francisco Bischoff、Austin Ouyang 和杰克·格林审阅本文并协助其创作。最重要的是,感谢埃蒙·基奥、阿卜杜拉·穆恩和他们众多的研究生,感谢他们创建了 Matrix 档案并继续推动其发展。

补充

1.矩阵概况研究论文可在埃蒙·基奥的 UCR 网页上找到:

https://www.cs.ucr.edu/~eamonn/MatrixProfile.html

2.矩阵轮廓算法的 Python 实现可在此处找到:

https://github.com/matrix-profile-foundation/matrixprofile

3.矩阵分析算法其余实现可在此处找到:

https://github.com/matrix-profile-foundation/tsmp

4.矩阵轮廓算法的 Golang 实现可在此处找到:

https://github . com/matrix-profile-foundation/go-matrix profile

如何用 Python 熊猫解析 JSON 数据?

原文:https://towardsdatascience.com/how-to-parse-json-data-with-python-pandas-f84fbd0b1025?source=collection_archive---------0-----------------------

使用 Pandas 读取 JSON 数据并将其规范化为平面表的一行程序。

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

来源:作者图片

如果您正在从事与数据相关的工作,无论是数据工程、数据分析,甚至是数据科学,您肯定会遇到 JSONs。

JSON (JavaScript Object Notation)是在 web 上交换数据最常用的数据格式之一。像 MongoDB 这样基于 NoSQL 的数据库以这种格式存储数据。尽管这种格式很适合存储数据,但需要将其转换成表格形式以便进一步分析。

在这个故事中,我们将看到解析 JSON 数据并将其转换成表格形式是多么容易。您可以从下面提到的 GitHub 资源库下载示例数据。此外,请查看笔记本,了解有关所用数据和 API 的更多详细信息。

[## ankitgoel 1602/数据科学

此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…

github.com](https://github.com/ankitgoel1602/data-science/tree/master/json-data)

数据细节

我将使用我在处理机器学习聚类问题时生成的数据。不必担心这些数据没有意义,因为它们仅用于演示目的。我将使用两种不同的 JSON

  1. 没有嵌套列表/字典的简单 JSON。

这已经是扁平化的 JSON,只需要最少的处理。

Sample Record:
{
    "Scaler": "Standard",
    "family_min_samples_percentage": 5,
    "original_number_of_clusters": 4,
    "eps_value": 0.1,
    "min_samples": 5,
    "number_of_clusters": 9,
    "number_of_noise_samples": 72,
    "adjusted_rand_index": 0.001,
    "adjusted_mutual_info_score": 0.009,
    "homogeneity_score": 0.330,
    "completeness_score": 0.999,
    "v_measure_score": 0.497,
    "fowlkes_mallows_score": 0.0282,
    "silhouette_coefficient": 0.653,
    "calinski_harabasz_score": 10.81,
    "davies_bouldin_score": 1.70
}

2.带有嵌套列表/字典的 JSON。

这可能看起来有点复杂,一般来说,需要你写一个扁平化的脚本。稍后,我们将看到如何用一行代码将它转换成 DataFrame。

Sample Record:
{
  'Scaler': 'Standard',
  'family_min_samples_percentage': 5,
  'original_number_of_clusters': 4,
  'Results': 
  [
      {
        'eps_value': 0.1,
        'min_samples': 5,
        'number_of_clusters': 9,
        'number_of_noise_samples': 72,
        'scores': 
            {
             'adjusted_rand_index': 0.001,
             'adjusted_mutual_info_score': 0.009,
             'homogeneity_score': 0.331,
             'completeness_score': 0.999,
             'v_measure_score': 0.497,
             'fowlkes_mallows_score': 0.028,
             'silhouette_coefficient': 0.653,
             'calinski_harabasz_score': 10.81,
             'davies_bouldin_score': 1.70
            }
      },
      {
        'eps_value': 0.1,
        'min_samples': 10,
        'number_of_clusters': 6,
        'number_of_noise_samples': 89,
        'scores': 
            {
             'adjusted_rand_index': 0.001,
             'adjusted_mutual_info_score': 0.008,
             'homogeneity_score': 0.294,
             'completeness_score': 0.999,
             'v_measure_score': 0.455,
             'fowlkes_mallows_score': 0.026,
             'silhouette_coefficient': 0.561,
             'calinski_harabasz_score': 12.528,
             'davies_bouldin_score': 1.760
            }
      }
  ]
}

熊猫阅读 _json()

Pandas 的这个 API 有助于读取 JSON 数据,对于已经扁平化的数据非常有用,就像我们在示例 1 中看到的那样。你可以从这里下载 JSON。

# Reading JSON
pd.read_json('level_1.json')

只是看了 JSON 就把它转换成了下面的平面表。

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

作者使用 read_json()展平数据

当 JSON 数据是半结构化的,即包含嵌套的列表或字典时,就像我们在示例 2 中看到的那样,这样做效果不好。

# Example 2 JSON
pd.read_json('multiple_levels.json')

在阅读了这个 JSON 之后,我们可以在下面看到我们的嵌套列表被放在一个单独的列“Results”中。在下一节中,我们将了解如何扁平化这些数据。

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

来源:作者图片

熊猫 json_normalize()

这个 API 主要用于将半结构化的 JSON 数据转换成平面表或数据帧。你可以从这里下载 JSON 的例子。

# load data using Python JSON module
with open('multiple_levels.json','r') as f:
    data = json.loads(f.read())# Normalizing data
multiple_level_data = pd.json_normalize(data, record_path =['Results'], meta =['original_number_of_clusters','Scaler','family_min_samples_percentage'], meta_prefix='config_params_', record_prefix='dbscan_')# Saving to CSV format
multiple_level_data.to_csv('multiplelevel_normalized_data.csv', index=False)

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

作者使用 json_normalize()平面化数据

现在,让我们来理解我在这里使用的将 JSON 转换成平面表的一个神奇的代码行。这个 API 提供了不同的参数,你可以在这里阅读更多关于它们的信息。这里我们使用了-

  • 记录路径
  • 记录前缀
  • 自指的
  • 元前缀

让我们一个一个地看一遍。

**记录 _ 路径 **

这是我们想要展平的嵌套数组或列表的路径。在我们的例子中,“结果”有多个包含算法超参数和度量分数的嵌套字典。

记录 _ 前缀

默认情况下,json_normalize 会根据父数据为嵌套字典添加一个前缀(字符串),就像我们的示例中 davies_bouldin_score 转换为 scores.davies_bouldin_score 一样。对于嵌套列表,我们可以使用 record_prefix 添加到扁平数据中。在我们的示例中,“结果”列表中的每个值都与 DBSCAN 算法相关,因此我们可以追加相同的值(dbscan_)。这将把 scores.davies_bouldin_score 转换为 db scan _ scores . Davies _ boul din _ score。

该参数有助于将每个记录的元数据添加到结果表中。此处,元数据将位于记录路径之外,即 Scaler、original_number_of_clusters 或 family_min_samples_percentage。

元 _ 前缀

与 record_prefix 类似,meta_prefix 会将字符串附加到定义为“meta”一部分的元数据中。在我们的例子中,所有的元数据都与 ML 问题的配置参数相关,因此我们在每个元数据后面附加了‘config _ params _’。

我希望这篇文章能在您下次处理 JSON 数据时有所帮助。我过去常常编写 python 脚本来扁平化数据,或者使用各种包来解决问题,而现在只需要 10 秒钟。如果你对数据科学感兴趣,或者想了解一些很酷的 python 库,那么看看我的另一个博客- 今天就开始你的数据科学之旅

注意安全!!!继续学习!!!

如何通过 Azure 数据科学家助理测试

原文:https://towardsdatascience.com/how-to-pass-the-azure-data-scientist-associate-test-ad794794c646?source=collection_archive---------15-----------------------

我花了 50 个小时来学习,我做到了

本文涵盖了最新的考试大纲。我在 2020 年 6 月 13 日参加了考试

在本指南中,我将解释 Azure Data Scientist Associate 的理念、考试内容、准备工作以及课程结束后带走的一些钥匙。

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

我的图像

为了拿到证书,我花了大约 50 个小时从几乎零知识开始学习 Azure。关于我的背景,我作为一名数据科学家工作了 2 年,现在我是一名全职数据工程师,有 3 年多的经验。我在这两方面都很熟悉,从为大规模数据建立基础设施,到为生产构建和部署实时模型。我认为这是帮助我通过考试的优势之一。

微软 Azure DP-100 考试是什么?

在讨论细节之前,我想回顾一下微软 Azure DP-100。“在 Azure 上设计和实施数据科学解决方案”(或 DP-100) 是获得 Azure 数据科学家助理资格的考试。本课程以微软为基础,测试你在数据科学和机器学习方面的知识,在 Azure 上实现和运行机器学习工作负载。考试中测试了 4 项技能

  • 设置 Azure 机器学习工作场所(30–35%)。
  • 运行实验和训练模型(25–30%)。
  • 优化和管理模型(20–25%)。
  • 部署和消费模型(20–25%)。

更多细节,考试 55 题(其中 10 题无法复习)。这些问题分为 5 种不同的类型

  • 多项选择单项答案
  • 多重选择多重答案
  • 按正确的顺序排列
  • 基于情景的问题
  • 通过填写空白处来完成代码

哦,我差点忘了说,考试需要 180 分钟,可以在家参加。

我该如何准备?

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

照片由里沙布·阿加瓦尔上拍摄

我所有的学习资源都是微软免费提供的。当我第一次注册免费账户时,微软给了我 30 天 200 美元的信用额度。那足够为考试练习了,实际上我花了大约 50 美元。

由于对 Azure 知之甚少,我决定跟随微软在 github 上提供的 DP-100 实验室(https://GitHub . com/Microsoft learning/DP 100/tree/master/labdocs)。我花了大约 20 个小时完成实验室。该实验室分为 10 个模块,但我可以说它涵盖了两个主要工具

  • Azure Machine Learning Designer,这是一个拖放工具,可以用来构建、测试和部署预测分析解决方案。
  • 使用Azure Machine Learning SDKfor Python 来构建、运行和部署带有 Azure Machine Learning services 的机器学习工作流。您可以使用 SDK 在任何 Python 环境中与服务进行交互。

在进行实验时,您需要注意理解每一行代码。有很多*【填码】*题,所以你要记住。考试的时候我很纠结,因为大部分答案都有些雷同。

其余时间,我通过阅读和跟随官方文档(https://docs . Microsoft . com/en-us/Azure/Machine-Learning/overview-what-is-Azure-ml)来尝试了解 Azure 机器学习工作室。我只是在查找代码中的一个 bug 时找到了文档。幸运的是,它确实对我的考试有帮助,大多数问题都来自文档。文件涵盖了工作室的各个方面,不包括实验室。例如,使用 PyTorch 或时间序列预测进行模型训练,甚至是数据存储的用户权限。

总的来说,更新的考试很短,主要涵盖了 Azure Machine Learning Studio。根据我的记忆,大约有 3-5 个问题需要数据科学知识,如调整参数或选择正确的参数。虽然,这是数据科学的基础知识。

这就是我为准备考试所做的。我并不是说我的方法是正确的,但是如果你没有找到任何材料或者其他方法不起作用,请随意使用我的方法。

考完试带走钥匙

在我看来,Azure 数据科学家助理对于那些拥有数据科学知识或者至少训练过几个预测分析模型的人来说是有用的。

通过研究,我们了解了训练模型、构建实验管道以及将模型高效部署到生产中的整个过程。在我看来,这不仅对 Azure 平台有好处,而且有助于你了解真实世界的流程,即使是在其他平台上。

我希望这个指南对那些即将参加考试的人有所帮助,并有望成为他们的信心助推器

祝你好运!

如何通过脸书数据科学面试

原文:https://towardsdatascience.com/how-to-pass-the-facebook-data-science-interview-3f2615c17012?source=collection_archive---------5-----------------------

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

赢得面试的 4 个技巧

本周早些时候,我完成了作为脸书数据科学家的第一年绩效总结周期(PSC)。我们利用 PSCs 来收集关于我们的影响力、技能和发展领域的反馈,我再次发现,最重要的技能与面试过程中测试的技能相同——正如您可能希望的那样!

这些技巧也不是脸书面试所独有的。我所有的数据科学面试都集中在同一套简短的技能上,以评估我推动影响的能力。

因此,我认为与其他正在寻找数据科学工作的人分享这些技能会很有用。

当然,我不能分享我在脸书面试时收到的确切问题,反正它们现在已经改变了。但是技巧本身并不保密,短短一年肯定也没变。

所以没有特别的顺序,他们在这里。

1.流畅的 SQL

如果你一直在工作中编写 SQL,你会发现基础知识涵盖了你在实践中要处理的 90%的问题。

最重要的概念是各种类型的JOIN语句是如何工作的。例如,您肯定需要理解这样一个事实,即INNER JOIN将删除没有出现在两个表中的记录,而LEFT JOIN将保留出现在左表中的所有记录。

中情局分析师吉姆·哈尔珀特解释 SQL 连接

您还需要习惯使用WHERE子句过滤数据,使用sum之类的函数使用GROUP BY子句聚合数据。

因此,这实际上是实现 90%的方法所需要的全部:主 SQL 连接、过滤器和聚集。

但是剩下的 10%让我在面试中更容易通过 SQL 测试。

SQL 基础知识将帮助您完成 90%的工作,但最后 10%是您需要通过的

这 10%包括理解较少使用的技术,比如像这样的子查询。

在我的 SQL 编码测试中,我使用了几个更“高级”的概念,包括窗口函数、命名子查询、self JOIN和 join 的ON子句中的条件。

使用更高级的 SQL 特性可能会使您更容易解决 SQL 问题。

2.概率论

我从未经历过评估我的直觉概率的面试,但我的现场展示了一个相当深入的案例研究。

幸运的是,我没有被要求写下任何公式,因为大学毕业后我已经把它们都忘了。

但我确实需要对我所学的关键概念有很强的理解:像中心极限定理、事件的独立性,以及选择合理的概率空间来建模问题的能力。

练习解释概率的关键概念,比如中心极限定理,不要使用任何技术词汇

我还被要求评估概率模型的输出,并根据这些输出提供业务建议。

数据科学家 Pam Halpert 评估了她同事的机器学习模型

最终,我能够给出一个明智的建议,因为我对这些概念建立了一种实用的直觉,即使我不记得量化模型拟合度的确切公式。

你不用任何技术词汇解释技术概念的能力是通过面试技术部分的关键技能。

3.沟通

在我看来,沟通技能比 SQL 或概率论等技术技能更重要。

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

用幻灯片演示死亡

就像技术技能一样,沟通不是你在使用手机屏幕前一周就能提升的。

但是你可以在面试前做一些简单的事情,这些事情将会对获得工作机会产生巨大的影响。

  1. **练习讲述你的“故事”😗*你工作经历背后的历史,你申请这家公司的原因,以及你最引以为豪的项目。每个面试官都会要求你讲述你的故事来介绍你自己,所以有一个清晰易懂的故事会给你留下深刻的第一印象。
  2. **写下你从沟通中学到的经验:**对我来说,那就是讨论一种叫做“直接沟通”的表达方式,这是我在当时的工作中学到的。它只是意味着“从结论开始”,并且它通常比以您的方法或模型参数开始更有效。
  3. **了解你在沟通中看重什么:**你最认同哪种风格?你认为什么最有效?有个例子可以说说。对我来说,这是有逻辑的组织和术语自由。

对一般的面试问题有一个排练好的答案会对你的面试结果产生最大的影响。

4.分析判断

大多数公司向数据科学家候选人提出的标准面试问题之一是:“你将如何衡量 X ”?

脸书以间接的方式问了这个问题,但回答这个问题仍然需要同样的两个技巧:

  1. 能够解释你如何权衡不同方法之间的权衡。所有的决策都有权衡,选择一个度量标准也不例外。在选择 KPI 或成功指标时,明确列出权衡,同时用可靠的判断进行权衡尤为关键。
  2. 理解测量对业务的价值,而不仅仅是它可能有多“准确”。有些模型相当不准确,但非常有价值(例如,预测用户是否会关注他们新闻订阅中的帖子)。了解您的工作如何影响业务是您分析判断的最重要部分。

想想你将如何评估你的商业模型的价值,而不仅仅是它与数据的吻合程度

正是由于这四项技能,我才得以在一年多前获得了脸书的工作机会。它们当然不容易开发:我在各种分析工作中工作了近四年,才提高到让我得到这份工作的水平。

但我不认为发展这些技能需要我有任何特殊的天赋或才华。我确信任何花时间提高这四项技能的人都能在数据科学领域找到工作。

感谢阅读!如果您觉得这很有帮助,我写的是关于数据科学和 Medium 编程的文章,所以请关注我,获取更多类似本文的文章。

[## 如何在科技初创公司找到一份数据科学的工作

帮助你获得更多面试机会的三步系统

towardsdatascience.com](/how-find-a-job-at-a-tech-start-up-bde5ae7f1b9c)

如何通过 Tableau 桌面专家认证考试

原文:https://towardsdatascience.com/how-to-pass-the-tableau-desktop-specialist-certification-exam-bccb85b8e000?source=collection_archive---------5-----------------------

我的成功秘诀和诀窍

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

照片由 PexelsLukas 拍摄

注:更新以反映截至 2021 年的新版考试。

我最近以 97%的成绩通过了 Tableau 桌面专家认证考试。不,我不是超级用户——我只在工作中使用 Tableau 几个月来创建一些仪表板。所以如果我能做到,你也能!这是我准备和参加考试的经验,我希望它也能帮助你成功。

什么是 Tableau 桌面专家认证?

Tableau 桌面专家认证测试基础产品知识。这是 Tableau 提供的最简单的认证级别,没有有效期,不像更高级的认证只有两三年的有效期。

考试时长 60 分钟,有 45 道选择题(40 道有分数,5 道无分数)。你需要在 1000 分中获得 750 分以上才能通过,所有的问题都是基于知识的(以前有使用 Tableau 的动手问题,但那些已经被删除了)。它是受监督的,不能访问互联网或 Tableau 应用程序。

考试通常花费 100 美元。一旦付费,以后最多可以安排 6 个月。我建议你提前安排考试,因为考试时间很快就会满。如果需要,您可以在考试前 24 小时免费重新安排考试时间。忠诚者考试服务(LES)管理考试,所以你需要创建一个 LES 帐户来注册。

建议的培训是 Tableau 的 Desktop I: Fundamentals 课程,该课程可通过其电子学习平台获得(下面将详细介绍)。也建议有 3 个月以上的产品经验,尽管在我看来,只要你对考试准备指南中的所有主题感到满意,你就可以参加。

你为什么要获得认证?

无论您是业务分析师、数据分析师、求职者还是学生,获得认证都是展示您精通 Tableau(一种广泛用于数据可视化和商业智能的工具)的绝佳方式。

更重要的是,为这个考试而学习让你对 Tableau 有一个全面的了解。我可以自信地说,准备这次考试加强了我的 Tableau 知识,使我现在能够更轻松地创建 vizzes。

我是怎么备考的?

1.备考指南(免费)

这份官方文件包括考试信息、测试技能和一些样题。我把测得的技能作为我需要学习的所有课题的清单。

2. Tableau 电子教学(120 美元/年)

Tableau 电子学习有自定进度的学习模块,每个主题都有一个演示和互动活动。这是我用来学习的主要资源。然而,我发现建议的桌面 I:基础课程涵盖了考试准备指南上列出的大部分但不是全部技能。以下技能实际上在桌面 II:中级课程中——数据连接(添加连接、混合或联合)、创建集合、添加上下文过滤器、使用 bin 和直方图以及添加参数。因此,我也参加了中级课程来完善我的理解——尽管如果你愿意,你可以只参加相关的模块。我建议您在观看演示时做笔记,捕捉重要的概念,例如离散字段和连续字段之间的区别。我还发现重做练习对复习很有帮助。

电子学习费用为 10 美元/用户/月,按年计费。您还需要个人或专业 Tableau 桌面许可证来访问。twbx 活动文件。如果你是一名在职的专业人士,询问你的雇主是否能支付你的培训、平台和认证费用是值得的。如果你是学生,那么你很幸运——你可以用一个有效的大学电子邮件获得一年的免费使用 Tableau 电子学习和桌面的机会。

3.LearningTableau.com 小测验(免费)

Lukas Halim 的这个网站提供免费的实践测验。我做了所有三个专家测验和一个挑战的认证助理测验(如果您不能完成所有 CA 测验,请不要担心,因为它们是下一级认证的内容)。还有 Tableau 专家实践考试,象征性收费。

您可能会发现有用的其他资源

  • Tableau 的培训视频 (免费)——Tableau 提供大量培训视频,每个主题都有练习和解决方案练习册。除了 Tableau 准备和发布到 Tableau 服务器/ Tableau Online 之外,Creator 部分下的大多数主题都与本次考试相关。这里有一点需要注意的是,内容相当深入,而且没有描述技能水平,所以你可以跳过考试准备指南中没有提到的更复杂的主题(例如,立方体分析、空间文件)。
  • Udemy 上的 Tableau 课程**(20-200 美元):Udemy 上有大量由独立讲师教授的 Tableau 课程,这可能是 Tableau 电子教学的一种更便宜的替代方式。我没有上过这些课程,但许多课程都有很好的评价和认证成功案例。**

如何在考试当天取得成功?

考试前

  • 查看考试设置文档以确保您的计算机、网络、网络摄像头和麦克风(仅限计算机麦克风,不允许使用耳机)以及物理环境配置正确
  • 独自呆在一个安静、光线充足的房间里,没有任何笔记、书写材料和手机
  • 准备好政府颁发的带照片的身份证
  • 确保关闭所有应用程序,并断开所有 VPN 连接
  • 确保您只使用一个电脑屏幕(没有外部或双显示器)
  • 隐藏计算机上的任务栏,因为它可能会覆盖虚拟环境中的任务栏,而您将需要它来访问应用程序

开始考试

  • 登录您的 LES 帐户,点击“参加考试”按钮
  • 您将首先通过 Zoom 连接到您的监考人,在那里您将被要求进行屏幕共享并共享您的视频。监考人将与您一起检查所有设置,要求您打开任务管理器以确保您没有运行其他应用程序,并要求您出示您的政府 ID 并提供您房间的 360 度视图。这可能需要 15-30 分钟,不计入 60 分钟的考试时间。一旦您通过所有检查,他们将启动虚拟桌面。
  • 一旦您正式开始考试,计时器将增加 5 分钟,以便您阅读说明并熟悉考试功能(例如,如何标记问题,计时器在哪里)。你可以快速浏览这个,直接进入第一个问题。

考试提示

  • 连接到监考老师后,将视频面板最小化以进行缩放,这样就不会分散您的注意力或覆盖屏幕的任何部分。
  • 有些问题允许您勾选多个框,因此请确保您的答案涵盖了所有解决方案。
  • 如果时间允许,仔细检查你的工作。我在大约 45 分钟内完成了我的考试,并用剩下的 15 分钟检查了一遍。

我的考试经历和结果

总的来说,我觉得考试非常简单。一旦您提交了您的考试,您将立即收到您的结果。您的认证和详细分数也将发送到您的电子邮件中。

我最大的建议是彻底熟悉考试准备指南中的所有主题,因为这是一个多项选择考试,无法访问 Tableau 平台、互联网或任何其他外部应用程序。知道如何在心中达到某种类型的视觉化的步骤是及时完成考试的关键。这不仅有助于你通过考试,还能让你更高效、更有效地使用 Tableau,从而在工作中获得回报。

我希望这篇文章对你有所帮助,祝你考试和 Tableau 之旅好运!

如何窥视黑盒模型内部——理解部分依赖图

原文:https://towardsdatascience.com/how-to-peek-inside-a-black-box-model-understand-partial-dependence-plots-17d1b673aafc?source=collection_archive---------34-----------------------

使用部分相关图揭示目标特性对黑盒模型的影响。

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

作者拍摄的照片

在这篇文章中,我们将学习一个工具来揭示黑盒模型的工作机制。但是在我们开始之前,让我们谈点别的。

浣熊是一种非常有趣的动物,喜欢在进食前清洗食物,如下图所示:

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

让我们洗一些棉花糖(GIF 来自 Giphy

这种行为在我们看来可能是正常的,因为卫生问题。但是这对可爱的小浣熊有关系吗?

事实并非如此。为了解开这个神秘的行为,研究人员研究了浣熊的神经纤维和大脑皮层,最终得出了一个可能的解释。浣熊的前爪上有非常敏感的神经群。通过弄湿它们的爪子,它们能够获得更多关于将要吃什么的感官信息。

黑箱模型

现在,让我们回到我们的主题。什么是黑盒模型。在计算机科学中,黑盒模型是一个系统,可以根据其输入和输出来查看,而无需了解其内部工作原理。

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

我们的小科学故事中的浣熊是一个黑箱模型,输入包括食物和水,输出是它们良好的进食习惯。仅从我们的观察来看,我们无法理解他们为什么那样做。因此,我们的好奇心可能会驱使我们进一步探索。除了情感上的自我实现,揭开黑匣子确实有实用价值。

例如,在像航空航天这样的任务关键型行业中,即使黑盒模型可以为我们提供更高的准确性,采用这种解决方案也是值得怀疑的,因为我们不了解它是如何工作的以及会受到什么影响。因此,如果我们能有一些工具来揭示这个神秘的工厂就更好了。其中一个有用的工具叫做部分依赖图(PDP)。

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

GIF 来自 Giphy

并行分布处理

部分相关图(PDP)显示了模型预测如何部分依赖于感兴趣的输入变量值。

通俗地说,就是剧情。从该图中,它将帮助我们了解一个或两个输入特征如何影响模型预测结果。

你可能会问为什么有一两个特征?因为我们生活在一个三维世界中。我们很难想象更高的维度。

原则上,我们将检查给定训练模型的特征集对预测结果的边际效应。下面的公式明确说明了我们将如何实现这一目标:

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

左手边的功能 f 称为部分功能。在右侧,它将对感兴趣的特征 Xs 保持不变,并对数据集中其他特征 Xc 的所有其他组合进行平均预测。

例如,给定以下数据集:

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

虚拟房屋特征表(图片由作者提供)

如果我们要检查街道值的边际效应,我们将在日期集中取唯一的街道值 A、B 和 C,并分别替换每个样本的街道值。然后,我们可以使用新生成的数据样本来计算模型的平均预测值:

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

替换每个样本的街道值(图片由作者提供)

获取每个街道价值的平均预测价格后,我们将能够绘制一个街道价值与平均预测价格的关系图:

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

街道虚拟 PDP(图片由作者提供)

从该图中,我们知道该模型通常预测街道 A 上的房屋价值较高,而街道 B 上的房屋价值较低。

实施

在理解了 PDP 的整体概念之后,我们将通过一个真实的例子来更深入地探讨这个问题。

以下是 2017 年世界幸福得分的数据集快照。

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

来自数据集的样本(图片由作者提供)

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

特写(图片由作者提供)

据此,我建立了一个简单的关于快乐的回归模型。选择 7 个特征对进行评分。模型训练过程的细节可以在下面的笔记本中找到。

2017 年幸福值 XGBoost 回归模型

由于我们使用的是 XGBoost,这是一种集成方法,会产生一个黑盒模型,因此我们可以使用 PDP 来探索和了解每个功能在这个复杂的工厂中是如何发挥作用的。代码可以在下面的笔记本中找到:

为了更好地说明,我使用 Plotly 重新创建了这个图表。代码可以在这里找到供你参考。

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

带有 Plotly 的 PDP(图片由作者提供)

在分析 PDP 之前,我们需要考虑三个预防措施。

第一个特征关联。通过使用 PDP,我们假设了目标特性和其余特性之间的独立性。如果存在相关性,替换目标特征值可能会导致其不具有任何实用价值的情况。例如,健康。预期寿命与经济高度相关。GDP.per.Captita ,通过改变经济的数值。健康。预期寿命应该相应地改变。然而,当我们检查这两个值的部分相关性时,我们通过修正另一个值来创建在现实生活中不太可能存在的数据点。因此,重要的是要记住这样一个假设,即目标特性应该独立于其他特性。

第二个数据分配。您可能会注意到,在 x 轴上,我显示了来自样本数据集的目标特征值的分布。由于我们是从这些值计算部分相关性,不考虑数据分布的分析可能是危险的。在无数据区,我们可能高估了目标特征的影响。

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

反乌托邦的分布。x 轴上的残差可以帮助识别无数据区域(图片由作者提供)

第三个,还有一个诡雷我们需要关心,隐藏的异质效果。由于部分相关性是一个平均估计值,因此得到的值可能无法代表给定目标特征的实际边际效应。例如,如下所示:

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

作者图片

一半的分数高于平均水平,一半低于平均水平。然而,由此产生的部分依赖性却讲述了另一个故事。为了解决这个问题,我们可以使用其他工具,如个人条件期望(ICE)图来提供模型的粗略视图。

考虑到这些,我们可以从模型中提取一些有用的信息。一般来说,家庭自由反面乌托邦。残差对从模型中得出的幸福分数有正面影响。尽管经济不景气。人均 GDP 和健康。预期寿命也可能有潜在的积极影响,它们高度相关,在进一步的研究之前,我们不能相信这一点。

总结

总之,PDP 是一种模型不可知的方法,有助于理解目标特性如何影响任何派生的模型。它直观且易于实施,但确实有一些限制:

  • 一个图(线图或热图图)中只能检查一到两个要素。
  • 目标特征应该独立于其他特征。
  • 在分析影响时,需要考虑数据分布。
  • 情节中可能隐藏着不同的影响,并可能导致错误的结论。

希望这篇帖子有所帮助,帮助你打开神秘世界的大门。敬请期待,再见~

GIF 来自 Giphy

如何高效地对 Twitter 中的流行语进行网络分析?

原文:https://towardsdatascience.com/how-to-perform-a-network-analysis-for-buzzwords-in-twitter-efficiently-ebf8e139037d?source=collection_archive---------45-----------------------

数据收集、预处理、分析、可视化和交互的一站式解决方案。

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

作者截图

需求

Twitter 拥有大量活跃的用户,并一直以数据可访问性著称。利用 twitter 上的数据分析热点趋势已经是一种成熟的方法。

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

作者截图来自谷歌学术

但是,以前,如果我们要进行这种分析,我们需要完成以下步骤:

  • 数据收集;
  • 一系列数据预处理;
  • 关键词提取;
  • 网络绘图;

对于那些有足够编码技能的人来说,这似乎不是一个很大的挑战。然而,对于编程背景差的社会科学家来说,这可能是一个难以逾越的障碍。

幸运的是,一种新工具将有助于克服这一障碍。

下面的介绍将解释这个新工具如何高效地一站式完成上述一系列操作。

让我们开始吧。

演示

首先,请访问这个链接

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

作者截图来自 InfraNodus 主页

正如你在这里看到的,这个工具叫做“InfraNodus”注册后,你可以进入几种不同的功能。

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

作者截图自 InfraNodus

现在让我们点击按钮“Twitter 情绪分析”,它在上图中被圈起来。

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

作者截图来自 InfraNodus

这里会提示您输入一个查询词。比如你对 Luckin coffee 最近的丑闻感兴趣,可以输入“Luckin”。

单击“go ”,请注意加载可能需要几秒钟时间。

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

作者截图来自 InfraNodus

然后绘图完成并呈现。

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

作者截图来自 InfraNodus

在这个图中,每个节点代表一个关键词,两个节点之间的线表示这两个词出现在同一个 tweet 中。

由于过滤机制,图中没有显示每个单词。

正如我们所看到的,不同的颜色代表不同的主题,这些主题在右边的对话框中被分类。

例如,第一个类是黄色的集群,包含关键字“咖啡”、“股票”和“贷款”。

这个剧情的一大亮点就是动态性。

假设您对关键词“欺诈”感兴趣,请点击它。

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

作者截图自 InfraNodus

你会注意到“欺诈”会自动出现在右上角的搜索框中,这意味着你刚刚执行了一次相关性过滤。

现在,您可以看到一些与“欺诈”高度相关的关键词

事实上,“首席运营官”和“调查”显然是高度相关的。

现在点击上面图左上角标有红色的按钮。

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

作者截图来自 InfraNodus

而所有包含“调查”的推文都在这里。

你可以继续潜心分析,比如继续查看关于调查的推文。

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

作者截图来自 InfraNodus

只要点击它,

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

作者截图自 InfraNodus

现在原始推文中只剩下一条相关推文。这样,当你试图理解热点问题时,你可以轻松地瞄准特定的单词来找出主题及其关联。

点击上面带红圈的部分,可以很容易地将 InfraNodus 分析结果导出为 png 格式,或者 gexf 格式。Png 文件可以直接显示,而对于 gexf 格式,我们可以在 Gephi 中得到进一步的分析和高质量的绘图。

到目前为止,InfraNodus 帮助我们做了很多工作。正如我们在开头提到的,有四个基本过程。

  • 数据收集;
  • 一系列数据预处理;
  • 关键词提取;
  • 网络绘图;

我们完成了第一、三、四项。此外,还增加了动态交互。

但是,数据预处理怎么样呢?

放轻松,别担心。

我们点击了下图中红色标记的按钮,以了解我们可以在设置中做些什么。

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

作者截图来自 InfraNodus

请向下滚动。

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

作者截图来自 InfraNodus

在这里你可以预处理文本。比如什么程度的距离算是“同现词”特别是下面有停用词设置。您可以过滤掉不想在结果中出现的单词。

所以,我说它是一站式的分析工具,是不是有点夸张?

延长

我们在本教程中只尝试了 Twitter 分析功能。

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

作者截图自 InfraNodus

其他部分呢?在我应用到不同领域之后,也是行得通的,无论是新闻,谷歌搜索词汇,甚至是维基百科分析。

当我们有更多的时间时,我们可以进一步解释。

发布说明

InfraNodus 在 Github 上为公众提供了一个免费开源版本。这里是链接。

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

作者截图来自 InfraNodus 的 Github 页面

然而,这个免费版本必须在本地计算机上构建和运行。需要特殊的编码技能。

如果你想立即使用它,你可以付费订阅。目前的订阅费是每月 9 欧元。

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

作者截图来自 InfraNodus

我们之前提到过,这个软件主要是赋能社科研究者,所以订阅的方式相对更实用。

摘要

最后,如果你想对社交媒体 Twitter 上的特定话题进行词汇共现分析,InfraNodus 可以帮助你一站式完成,为你的研究赋能。

思考问题:

Twitter 的分析仅限于关键词共现吗?能不能分析一下作者,hashtag,甚至几个不同元素的综合评论?

欢迎大家自行尝试,然后将结果反馈给社区。让我们互相学习。

相关博客

如果你对这篇博客文章感兴趣,你可能也想看看下面几篇:

承认

我要感谢我以前的本科生 Shelly Yin 帮我把中文原版翻译成英文。

以下是她的信息:

  • NYU 数据科学校友
  • 天津师范大学管理信息系统校友

如何手动执行一个样本 t 检验,并在一个均值上进行 R:检验

原文:https://towardsdatascience.com/how-to-perform-a-one-sample-t-test-by-hand-and-in-r-test-on-one-mean-70f867c4aa1?source=collection_archive---------18-----------------------

一个样本 t 检验用于确定测量变量的平均值是否不同于规定值。

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

照片由 Helloquence

介绍

答在写了一篇关于学生对两个样本(独立和配对样本)进行 t 检验的文章后,我认为是时候详细解释如何手工和以 r

单样本 t 检验是推断统计学的重要组成部分(可能是学生学习的第一个统计检验之一)。提醒一下,与描述性统计不同,推断统计是统计学的一个分支,旨在根据一个或两个总体的子集(或两个)得出关于该总体的结论(称为样本)。换句话说,我们首先从总体中随机收集一组观察值,然后计算一些测量值,以便将通过样本发现的信息推广到总体。

在这种情况下,单样本 t 检验用于确定测量变量的平均值是否不同于指定值(例如信念或理论预期)。它的工作原理如下:如果样本的均值与指定值(零假设下的值)相差太远,则认为总体的均值与期望的不同。相反,如果样本的均值接近规定值,我们就不能拒绝总体均值等于期望值的假设。

像学生对两个样本的 t 检验和 ANOVA (对 3 个或 3 个以上样本)一样,单样本 t 检验也有不同的版本。幸运的是,这个测试只有两个不同的版本(学生对两个样本的 t 检验有 5 个版本!).一个样本 t 检验的两个版本的区别在于,当总体的方差(不是样本的方差!)是已知的,当总体的方差未知时使用另一个版本。

在本文中,我将首先一步一步地详细说明如何手工执行单样本 t-test 的两个版本。为了说明和方便起见,将对一小组观察值进行分析。然后,我将展示如何用完全相同的数据在 R 中执行这个测试,以便验证手工发现的结果。还将介绍假设检验背后的推理、p 值和结果的解释以及该检验的假设。

请注意,本文的目的是展示如何手动和在 R 中计算单样本 t 检验,因此我们避免测试假设,并假设所有假设都满足本练习。为了完整起见,我们仍然提到假设以及如何测试它们。感兴趣的读者可以看看文章的结尾,了解更多关于这些假设的信息。

无效假设和替代假设

在开始手动计算单样本 t 检验之前,让我们回顾一下该检验的无效假设和替代假设:

  • H0: μ=μ0
  • H1:μ≦μ0

其中μ是总体平均值,μ0 是总体平均值的已知值或假设值

这是在一般情况下,我们只想确定总体平均值与假设值相比是否不同(就因变量而言)。在这个意义上,我们没有关于总体均值大于或小于假设值的先验信念。这种类型的测试被称为双边或双边测试。

如果我们对总体均值大于或小于假设值有一些先验信念,单样本 t 检验也允许检验以下假设:

  • H0: μ=μ0
  • H1: μ>μ0

或者

  • H0: μ=μ0
  • H1: μ

In the first case, we want to test if the population mean is significantly larger than the hypothesized value, while in the latter case, we want to test if the population mean is significantly smaller than the hypothesized value. This type of test is referred as a 单边或单边测试。

假设检验

在统计学中,许多统计检验是以假设检验的形式进行的。假设检验用于根据手头的数据(即样本)确定某个信念是否为真(似是而非)。大多数假设检验可以归结为以下 4 个步骤: 1

  1. 陈述无效假设和替代假设。
  2. 计算测试统计量,表示为 t-stat。计算检验统计量的公式在不同版本的单样本 t 检验中有所不同,但它们具有相同的结构。请参见下面的场景 1 和场景 2,了解不同的公式。
  3. 给定测试的理论统计分布、分布参数和显著性水平α,找出临界值。对于一个样本 t-检验的两个版本,它要么是正态分布,要么是学生的 t 分布( t 表示学生分布, z 表示正态分布)。
  4. 通过比较 t-stat(在步骤 2 中找到)得出结论。)与临界值(在步骤中找到。3).如果 t-stat 位于拒绝区域(由临界值和测试方向决定),我们拒绝零假设,否则我们不拒绝零假设。这两个选项(拒绝或不拒绝零假设)是仅有的两个可能的解决方案,我们从不“接受”一个假设。总是根据最初的问题来解释决定也是一个好的做法。

一个样本 t 检验的两个版本

一个样本的 t 检验有两个版本,取决于总体的方差(不是样本的方差!)已知或未知。这个标准相当简单,我们要么知道总体的方差,要么不知道。无法计算总体的方差,因为如果您可以计算总体的方差,这意味着您拥有整个总体的数据,那么就没有必要再进行假设检验了…

所以总体的方差要么在语句中给出(在那种情况下使用它们),要么没有关于方差的信息,在那种情况下,假设方差是未知的。实际上,总体的方差大部分时间是未知的。然而,在假设检验的 4 个步骤之后的下一节中,我们仍然说明了如何手工和在 R 中进行这两个版本的检验。

如何手工计算单样本 t 检验?

请注意,这些数据是人为的,并不代表任何真实的变量。此外,提醒可能满足也可能不满足假设。本文的重点是详细说明如何手工和在 R 中计算不同版本的测试,所以所有的假设都被假定为满足。此外,假设所有测试的显著性水平α=5%。

如果你对手工应用这些测试感兴趣,而不需要自己做计算,这里有一个闪亮的应用程序可以帮你做。你只需要输入数据,并通过侧边栏菜单选择合适的测试版本。还有一个图形表示,帮助您可视化测试统计和拒绝区域。希望你会觉得有用!

场景 1:总体方差已知

对于第一个场景,假设下面的数据。此外,假设总体方差等于 1,并且我们想要测试总体均值是否不同于 0。

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

所以我们有:

  • 5 次观察:n=5
  • 样本的平均值:0.56
  • 总体方差:1
  • μ0=0

按照假设检验的 4 个步骤,我们有:

  1. H0:μ=0,H1:μ≠0。(≠因为要检验总体均值是否不同于 0,所以在检验中不强加方向。)
  2. 测试统计:

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

  1. 临界值:z(α/2)= z(0.025)= 1.96(如果你很难找到临界值,请参见如何阅读统计表的指南)
  2. 结论:因此,拒绝区域从∞到-1.96 和从 1.96 到+∞。检验统计量在拒绝区域之外,所以我们不拒绝零假设 H0。就最初的问题而言:在 5%的显著性水平上,我们不排斥总体均值等于 0 的假设,或者数据中没有足够的证据可以得出总体均值不同于 0 的结论。

情景 2:总体的方差未知

对于第二种情况,假设下面的数据。此外,假设总体中的方差是未知的,并且我们想要测试总体均值是否大于 5。

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

所以我们有:

  • 5 次观察:n=5
  • 样本的平均值:6.8
  • 样本的标准偏差:s=0.825
  • μ0=5

按照假设检验的 4 个步骤,我们有:

  1. H0:μ=5,H1:μ>5。(>因为我们要检验总体均值是否大于 5。)
  2. 测试统计:

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

  1. 临界值:t(α,n1)= t(0.05,4)=2.132(如果您很难找到临界值,请参见关于如何阅读统计表的指南
  2. 结论:拒绝区域因此从 2.132 到+∞。检验统计量位于拒绝区域内,因此我们拒绝零假设 H0。就最初的问题而言:在 5%的显著性水平上,我们得出总体均值大于 5 的结论。

这就总结了如何手工执行一个样本 t-检验的两个版本。在接下来的小节中,我们将详细介绍如何在 r 中执行完全相同的测试。

临界值的不同基础分布

您可能已经注意到,根据总体方差是已知还是未知,用于查找临界值的基本概率分布是不同的。

方差已知时(情景 1)的底层概率分布是正态分布,方差未知时(情景 2)的概率分布是学生的 t 分布。这种差异的部分原因是,当总体的方差未知时,数据中存在更多的“不确定性”,因此我们需要使用学生的 t 分布,而不是正态分布。

注意,当样本量较大时(通常是当 n > 30 时),学生的 t 分布趋于正态分布。方差已知时使用正态分布,方差未知时使用学生 t 分布,这也适用于两个样本的 t 检验

如何计算 R 中的单样本 t 检验?

在 R 中进行 t-tests 之前,一个好的实践是借助于箱线图(或者密度图,或者最终两者)来可视化数据。箱线图给出了关于样本位置的第一个指示,并且因此给出了关于零假设是否可能被拒绝的第一个指示。然而,即使箱线图或密度图能很好地显示样本的分布,只有可靠的统计测试才能证实我们的第一印象。

在数据可视化之后,我们在 R 中复制手工发现的结果。我们将看到,对于具有已知总体方差的 t-test 版本,R 中没有内置的默认函数(至少就我所知,如果我错了,请不要犹豫让我知道)。在这种情况下,编写一个函数来手动复制结果。

请注意,我们对两个场景使用了相同的数据、相同的假设和相同的问题,以便于比较手工测试和 r。

场景 1:总体方差已知

对于第一个场景,假设下面的数据。此外,假设总体方差等于 1,并且我们想要测试总体均值是否不同于 0。

dat1 <- data.frame(
  value = c(0.9, -0.8, 1.3, -0.3, 1.7)
)dat1##   value
## 1   0.9
## 2  -0.8
## 3   1.3
## 4  -0.3
## 5   1.7library(ggplot2)ggplot(dat1) +
  aes(y = value) +
  geom_boxplot() +
  theme_minimal()

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

注意,如果你想用 [{ggplot2}](https://www.statsandr.com/blog/graphics-in-r-with-ggplot2/)画一个方框图而不自己写代码,你可以使用[{esquisse}](https://www.statsandr.com/blog/rstudio-addins-or-how-to-make-your-coding-life-easier/#esquisse) RStudio addin 。如果你喜欢默认图形,使用boxplot()功能:

boxplot(dat1$value)

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

箱线图表明样本的分布并不远离 0(假设值),因此我们倾向于认为我们将无法拒绝总体均值等于 0 的零假设。然而,只有正式的统计测试才能证实这一观点。

由于 R 中没有使用已知总体方差来执行 t 检验的函数,因此这里有一个函数,其参数接受样本(x)、总体方差(V)、零假设下的均值(m0,默认为0)、显著性水平(alpha,默认为0.05)和备选项(alternative"two.sided"(默认)、"less""greater"):

t.test2 <- function(x, V, m0 = 0, alpha = 0.05, alternative = "two.sided") {
  M <- mean(x)
  n <- length(x)
  sigma <- sqrt(V)
  S <- sqrt(V / n)
  statistic <- (M - m0) / S
  p <- if (alternative == "two.sided") {
    2 * pnorm(abs(statistic), lower.tail = FALSE)
  } else if (alternative == "less") {
    pnorm(statistic, lower.tail = TRUE)
  } else {
    pnorm(statistic, lower.tail = FALSE)
  }
  LCL <- (M - S * qnorm(1 - alpha / 2))
  UCL <- (M + S * qnorm(1 - alpha / 2))
  value <- list(mean = M, m0 = m0, sigma = sigma, statistic = statistic, p.value = p, LCL = LCL, UCL = UCL, alternative = alternative)
  # print(sprintf("P-value = %g",p))
  # print(sprintf("Lower %.2f%% Confidence Limit = %g",
  #               alpha, LCL))
  # print(sprintf("Upper %.2f%% Confidence Limit = %g",
  #               alpha, UCL))
  return(value)
}test <- t.test2(dat1$value,
  V = 1
)
test## $mean
## [1] 0.56
## 
## $m0
## [1] 0
## 
## $sigma
## [1] 1
## 
## $statistic
## [1] 1.252198
## 
## $p.value
## [1] 0.2104977
## 
## $LCL
## [1] -0.3165225
## 
## $UCL
## [1] 1.436523
## 
## $alternative
## [1] "two.sided"

上面的输出概括了执行测试所需的所有信息:测试统计量、 p 值、使用的备选项、样本均值、假设值和总体方差(将 R 中找到的这些结果与手工找到的结果进行比较)。

可以照常提取 p 值:

test$p.value## [1] 0.2104977

p-值为 0.21,因此在 5%的显著性水平上,我们不拒绝零假设。数据中没有足够的证据来否定总体均值等于 0 的假设。这个结果证实了我们手工发现的东西。

如果你对p-价值的概念不熟悉,我邀请你阅读我关于p-价值和显著性水平α 的笔记。

总结一下那篇文章中所说的关于p-值和显著性水平α:

  • 如果 p 值小于预定的显著性水平α(通常为 5%),那么如果 p 值<为 0.05,我们拒绝零假设
  • 如果 p 值大于或等于预定的显著性水平α(通常为 5%),那么如果 p 值≥ 0.05,我们不拒绝零假设

这毫无例外地适用于所有的统计测试。当然,无效假设和替代假设会随着测试的不同而变化。

情景 2:总体的方差未知

对于第二种情况,假设下面的数据。此外,假设总体中的方差是未知的,并且我们想要测试总体均值是否大于 5。

dat2 <- data.frame(
  value = c(7.9, 5.8, 6.3, 7.3, 6.7)
)dat2##   value
## 1   7.9
## 2   5.8
## 3   6.3
## 4   7.3
## 5   6.7ggplot(dat2) +
  aes(y = value) +
  geom_boxplot() +
  theme_minimal()

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

与前面的场景不同,这个盒子与假设值 5 相差甚远。从这个箱线图中,我们可以预期该检验会拒绝总体均值等于 5 的零假设。尽管如此,只有正式的统计测试才能证实这一预期。

R 里面有一个函数,简单来说就是t.test()函数。这个版本的测试实际上是一个样本的“标准”t 检验。请注意,在我们的例子中,替代假设是 H1:μ > 5,因此我们需要将参数mu = 5alternative = "greater"添加到函数中,因为默认参数是mu = 0和双边测试:

test <- t.test(dat2$value,
  mu = 5,
  alternative = "greater"
)test## 
##  One Sample t-test
## 
## data:  dat2$value
## t = 4.8809, df = 4, p-value = 0.004078
## alternative hypothesis: true mean is greater than 5
## 95 percent confidence interval:
##  6.013814      Inf
## sample estimates:
## mean of x 
##       6.8

上面的输出概括了执行测试所需的所有信息:测试的名称、测试统计、自由度、 p 值、使用的替代值、假设值和样本均值(将 R 中的结果与手工得到的结果进行比较)。

可以照常提取p-值:

test$p.value## [1] 0.004077555

p 值为 0.004,因此在 5%的显著性水平上,我们拒绝零假设。

与第一种情况不同,这种情况下的 p 值低于 5%,因此我们拒绝零假设。在 5%的显著性水平上,我们可以得出总体均值显著大于 5 的结论。这个结果证实了我们手工发现的东西。

置信区间

注意,置信区间可以用$conf.int提取:

test$conf.int## [1] 6.013814      Inf
## attr(,"conf.level")
## [1] 0.95

可以看到总体均值的 95%置信区间为[6.01;∞],意味着在显著性水平α=5%时,只要假设值μ0 低于 6.01,我们就拒绝零假设,否则不能拒绝零假设。

假设

对于许多统计测试,为了能够解释结果,需要满足一些假设。当一个或几个假设不满足时,尽管技术上可以进行这些测试,但解释结果是不正确的。以下是单样本 t 检验的假设以及如何检验它们:

  • 从总人口中有代表性的和随机选择的部分收集的数据应该是相互独立的。
  • 因变量(即测量变量)必须是连续的。
  • 正态性:在小样本情况下(通常为 n < 30), observations should follow a 正态分布 )。正态性假设可以通过直方图和 QQ 图进行直观测试,和/或通过夏皮罗-维尔克或科尔莫戈罗夫-斯米尔诺夫测试等正态性测试进行正式测试(参见更多关于正态性假设以及如何测试的信息这里)。可以对观察值应用一些变换,例如取对数、平方根或 Box-Cox 变换,以变换数据,使其更好地符合正态分布。对于大样本量(n ≥ 30),不需要数据的正态性(这是一个常见的误解!).根据中心极限定理,即使数据不是正态分布,大样本的样本均值通常也是正态分布的近似值。

感谢阅读。我希望这篇文章能帮助你理解不同版本的样本 t-test 是如何工作的,以及如何在 r 中手动执行它们。如果你感兴趣,这里有一个闪亮的应用程序可以轻松地手动执行这些测试(你只需要输入你的数据,并通过侧边栏菜单选择合适的测试版本)。此外,如果你想知道如何计算学生的 t 检验,请阅读这篇文章,但这次是针对两个样本——为了比较两个相依或独立的组——或者如果你想使用方差分析比较 3 个或更多组,请阅读这篇文章

和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。

相关文章:

  1. 这至少是关于参数假设检验的情况。参数测试意味着它是基于理论统计分布,这取决于一些定义的参数。在单样本 t-检验的情况下,它是基于具有单个参数的学生 t 分布、自由度(df = n1,其中 n 是样本大小)或正态分布。

原载于 2020 年 3 月 9 日【https://statsandr.com】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值