TowardsDataScience 博客中文翻译 2020(三百八十六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

日冕时代的预测

原文:https://towardsdatascience.com/forecasts-in-the-time-of-corona-5541bc1df8f7?source=collection_archive---------44-----------------------

现在,我们比以往任何时候都更需要谨慎地创建和使用预测

在此次危机期间,我作为一名数据科学家在旅游业工作,经常被问到如何利用数据来预测旅游业何时会恢复某种健康。我的回答都归结为:“伙计,现在我几乎不能给你一个今天下午会发生什么的准确预测”。但这让我想到:目前我们应该如何进行预测?到底什么是预测?

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

Tardis:终极预测机器(照片由查理·西曼Unsplash 上拍摄)

什么是预测?

预测的根本问题是我们实际上无法预测未来。当我们说我们要“预测”某事时,我们实际上是在说我们要做三件事情中的一件(或多件):

时间序列投影

在这里,我们将重点放在我们试图预测的指标的历史上,并假设历史上的模式将持续到未来。因此,如果我们预测冰淇淋销售,我们将只查看以前的冰淇淋销售数据,并假设夏季和周末的高峰将持续下去。

一旦我们做出了这个假设,我们需要做的就是建立准确描述历史(或“时间序列”)的模型,然后用这些模型预测未来。ARIMA 等车型就属于这一类。

系统模型化

在这里,我们使用对其影响最大的各种因素的数据或与之相关的数据,建立一个感兴趣的度量模型。在这种情况下,我们的冰淇淋预测将涉及了解冰淇淋销售与温度、降雨量、工作日、学校假期等之间的关系。这里的一个关键点是,您需要确信已经捕获了影响预测指标的所有关键因素,并对这些因素本身有一个良好的预测。因此,如果你有一个坏天气预报,这将损害你的能力,建立一个良好的冰淇淋销售预测。

天气预报和对体育赛事和选举的预测就是这种预测的好例子。

情况分析

在这里,我们不试图从数据中推测趋势或关系,而是想象会发生什么,然后看看在我们感兴趣的各种系统/过程中会发生什么。你可能在想“等等,这只是猜测?”是的,确实如此。但这也是吸引力所在:你不会用看似精确的数字来哄骗人们产生一种虚假的安全感,在猜测千载难逢的场景可能会如何发展方面,人类的想象力比任何机器都做得更好。

这是一个简单的方法,但比你想象的更常见。养老金、投资和抵押贷款提供商做了很多这样的事情,银行的压力测试本质上是一种悲观的情景分析。很明显,在一切都失控之前,这些往往更有用,但在危机当中,当人们不确定事情将如何发展时,这些可能会有用。

为什么预测这么难?

要进行预测,你需要对两件事有信心:

  1. 你很好地掌握了影响结果的主要因素,即统计术语中的低随机不确定性。
  2. 没有任何重大的不可预测的事件会突然发生并把事情弄糟,即低认知不确定性

你们中目光更敏锐的人可能已经发现了第二点的一个问题:如果上述重大事件是不可预测的,我们怎么知道它们不足以左右结果?让我们通过一个例子更深入地探讨这一点。

想象一下,一个为英国政府工作的预测者,被旅游部长委派预测明年每月将有多少国际游客到达英国。看着数据,他们心里想:“嗯,这看起来非常规律和稳定,这应该不会太难”,然后使用季节性 ARIMA 模型建立一个预测,如下图所示。它们包括一些很好的、清晰的 95%预测区间,这样旅游部长就能感觉到这个预测有多少不确定性。

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

对英国游客数量的糟糕预测

他们表现如何?虽然我没有英国游客数量的最新数据,但根据波士顿咨询集团在此有益总结的行业数据,在撰写本文时,机票数量几乎为零,因此我们可以假设所有游客都在做类似的事情。总的来说,不太好。

发生了什么事?嗯,有人可能会说没有什么真正出错:有一个 95%的下限预测区间,我们超过了它,但我们应该预计 20 分之一的时间,所以,有什么大惊小怪的?这个推理的问题是,我们不仅仅是超出了下限一点点。我们撞穿了它,直到撞到地面才停下来。使用预测区间的正态分布假设,这种事件的概率为 0.000002%,即我们应该每 500 万年才观察到一次这样的事件!

相反,问题在于预测区间只是一个关于随机不确定性的陈述,基于算法在它被训练的数据中观察到的东西。换句话说,预测区间本身只是不确定性的预测*,因此只显示了现实世界不确定性的最小界限。*

公平地说,认知的不确定性是不可量化的(如果它是可量化的,它将是任意的),并且很难在图表上显示出来。预测者本可以做的一件事是,在预测的同时,考虑 2001 年和 2008 年的危机是如何影响旅游人数的。这清楚地表明,他们只是提供了一个“正常年份”的预测,而在现实世界中,任何事情都可能发生。马后炮是一件奇妙的事情。

预测通常是错误的,相应地计划

正如我们所看到的,无论你正在看什么样的预测,大多数时候都会有一点点错误,有时还会有很多错误。正因为如此,始终知道你可以接受多少误差,以及当误差超过这些界限时你会怎么做是至关重要的。

因此,任何预测者工作的最重要的部分是理解一个人预测的客户或系统对什么样的错误最敏感。如果你要预测库存,是库存过多还是缺货成本更高?如果你预测要设定一个目标,如果目标经常被超过或经常被错过会更好吗?预测者可能犯的一个常见错误是花费数小时研究不同的预测技术和模型,但只花几分钟去理解不可避免的误差将如何影响他们为之建立预测的系统或客户。

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

一个好的预测者不仅仅是最小化错误,他们还会选择正确的错误来最小化

幸运的是,当决定被恰当地框定时,这种想法会自然而然地来到我们身边。我敢打赌,上次你办派对时,买的食物和饮料比你最终需要的还多。这远非不理性,而是因为过度预测的成本很低(多余的可以廉价储存),而预测不足的成本很高(还有什么比没有酒喝的派对更让人难过的吗?).

适应,不要预测

正如你可能已经收集到的,基于数据的预测在未来几个月不会有太大帮助,因为我们有大量的随机和认知的不确定性。我们不知道人们在接下来的几个月里会如何或是否想去旅行。即使我们开始理解这一点,任何基于这一理解的预测都有被不可预测事件粉碎的高风险,如第二波浪潮、政治决策、经济影响(如果没有航空公司就不能飞行),或者更乐观地说,新的治疗方法或疫苗。

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

你得等等,老朋友(图片由帖木儿 MUnsplash 上拍摄)

那么如果我们不能预测,我们能做什么呢?最有效的方法将是以下方法的组合:

使用情景分析概述几种可能的结果,并描绘它们如何影响你感兴趣的内容。请注意,这并不一定是花哨的,在许多行业和领域中,有许多已经开发出来的现成产品可以使用。在这样做的时候,基于你所拥有的信息,选择一个“最有可能”的场景,然后围绕这个场景设计计划是很有诱惑力的。但这又落入了预测陷阱:你现在拥有的信息明天可能就无关紧要了。

清楚地评估客户、系统或您正在做出的决策对风险的**敏感度,并将这些敏感度与可能的情景进行比较。请注意,无论哪种情况发生,你都应该努力做出最大化你实现目标的能力的决策,即使在每个特定的情况下都不是最优的*。你的风险承受能力在这里也发挥了作用;你可能准备好接受一个在某些情况下冒着破产风险的决定,如果在其他情况下会有很大的回报。*****

最后,给定的环境可能会继续快速演变,探索如何提高自己的能力以变得灵活和响应将使你更有效地应对这种变化,并减少对场景分析中固有的猜测的依赖。

那么什么时候才是回归预测的合适时机呢?嗯,如果可能的话,你可能不想。预测是一件不确定的事情,你的决策依据越少,你的决策就越稳健。这并不意味着你不应该再次启动 ARIMA 模型或查看天气预报,许多决定需要对未来将要发生的事情有一些看法,但这确实意味着你应该永远记住:如果这真的是错的,我该怎么办?如果有,我该如何快速适应?

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

你觉得幸运吗?(照片由马库斯·斯皮斯克Unsplash 上拍摄)

从一个重要的意义上来说,预测现在比以往任何时候都更像是在股市上挑选赢家:有很大程度的随机性,很少有人能做好,而且很难区分有才华的人和仅仅是幸运的人。但是,我们可以使用优秀基金经理管理投资组合的相同工具和方法:了解他们的风险承受能力,选择能够承受一系列结果的多样化等策略,并确保他们能够灵活地转移资金以利用机会。当然,永远不要忘记古老的投资格言:过去的表现并不能保证未来的结果。

基于 FgSegNet 的前景图像分割

原文:https://towardsdatascience.com/foreground-image-segmentation-with-fgsegnet-9ecbe3d194ab?source=collection_archive---------21-----------------------

具有类似自动编码器结构的多尺度 CNN

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

FgSegNet 的架构图;它使用三个 CNN 模型和一个 TCNN。[1]

介绍

一个有待解决的棘手问题是前景图像分割(从不同的角度来看),即*(或*)。这个任务听起来可能很琐碎:创建一个二进制蒙版,其中只有移动/重要对象的像素被标记。然而,当现实世界的可变性被引入到图片中时,这可能变得特别困难(没有双关语)。例如, 一个真正鲁棒的图像分割模型必须考虑以下所有 😗*

  • (背景)景色的微妙变化
  • 忽略移动的树木、树叶、雪、雨、阴影等。
  • 处理光线不好的情况
  • 处理相机抖动和/或运动
  • 摄像机视野内模糊区域的伪装物体
  • 这个清单还在继续……

完成这项任务的最初几个方法之一(在当时)是相当健壮的,本质上是统计学。具体来说,它涉及使用多个高斯模型来映射输入**的每个像素的每个颜色值(即 RGB)的分布。如果像素的颜色值在特定帧中与其高斯分布不匹配,则可以确定该像素持有前景对象。然而,这种方法仍然很容易受到上述挑战的影响,但在当时(1999 年)[2]仍然是鲁棒图像分割的一个突破。**

快进到最近的时代,现在我们有足够的计算能力和数据让卷积神经网络(CNN)和其他复杂的模型相当精确地运行,更不用说简单的前馈网络了。不出所料, 现在比以往 有更多基于深度学习的背景减法。

我们来看看 前景分割网络 ,或者 FgSegNet ,这是一种最近提出的、性能最好的神经网络架构,它使用多个 CNN 和一个转置 CNN (TCNN)来实现背景减法。[1]

理论

CNN 和 TCNNs

FgSegNet 在其架构内使用 3 个卷积神经网络(CNN)和一个转置 CNN (TCNN)。具体来说,该架构为其每个 CNN 使用一个预训练的 VGG-16 模型。****

综上所述,CNN 广泛用于图像特征提取,因此在图像分类中工作良好。卷积层如何在 CNN 内工作的前提是通过内核**(具有初始化的但可改变的值/权重的小 2D 矩阵),其跟踪图像输入并聚集内核值和相应输入像素值之间的乘积。换句话说,内核 在运行时会对输入 进行卷积,这就是 CNN 中的 C。卷积层在实际应用中更容易理解,所以这里有一张内核操作的 GIF 图片。**

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

CNN 内核的例子。蓝绿色是完整的输出,蓝色是图像输入,阴影/轮廓是内核。内核将其相对于输入的每个值相乘,然后相加,产生一个像素作为输出。[3]

那么什么是转置 CNN 呢?把它想成是 CNN 应该做的完全相反的事情。CNN 自然产生的输出通常小于其输入;这与 TCNNs 相反,,因为它的内核执行与 CNN相反的操作。****

根据上面的架构图, FgSegNet 首先将输入馈入三个 CNN,连接三个输出,并将其作为输入馈入 TCNN。最终输出是二进制掩码。

为什么是“类自动编码器”?

论文称 FgSegNet 为“编解码型网络模型”,这是名副其实的。首先,架构类似于自动编码器的架构:输入首先被漏斗化/瓶颈化成一个更小的特征图(编码),然后在模型的后半部分结束时被扩展回其原始形状(解码)。CNN 本质上也是编码器,因为它们通过内核操作提取特征。也就是说,tcnn(与 CNN 相反)将是解码器也是事实。

我推测,在前景提取等任务中使用编码器的目的是精确定位图像帧中容易发生变化的“重要”特征,用通俗的话来说,就是使用压缩信息输出带有 TCNN 的遮罩**。让 3 个不同形状的 CNN 并行工作也支持这一概念,并且允许该模型更加通用于不同大小的前景对象。**

表演

数据集

前景提取器模型的一个突出数据集是 CDnet2014 数据集CDnet2014 包括模型的 11 种不同挑战场景(即恶劣天气、相机抖动、夜间视频等。),每个场景包含 4 到 6 个视频序列。数据集包括地面真实图像/遮罩,标记每一帧的所有前景对象和阴影。 FgSegNet 在多个图像数据集上进行测试,其中一个是 CDnet2014。

模型实现

FgSegNet 是使用 Keras 和 Tensorflow 框架构建的。它的所有层(除了最后一层)都使用 ReLU 激活层,而 VGG-16 CNN 的多个池层被替换为 dropout 层。除了辍学,该模型利用 L2 权重正则化。RMSProp 被用作具有学习率降低器的优化器,当验证损失停止改善 6 个时期时,学习率降低器被激活。 最后,该模型允许选择用 50 或 200 帧图像进行训练。

要了解更多关于模型实现的信息,请点击这里阅读其论文。

估价

FgSegNet 是 CDnet2014 数据集评估期间表现最好的模型之一。当用 200 帧训练时,达到的平均 F 分数是 0.9734(分数范围从 0[差]到 1[最好]),用 50 帧训练时是 0.9545。下面是一个场景分类的例子,以及由模型生成的基本事实和掩码。

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

(a)是原始图像。(b)是基本事实。©由 FgsegNet 生成。[1]

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

图像行从上到下依次显示原始图像、地面实况和模型生成的遮罩。[1]

正如你所看到的,模型生成的遮罩非常令人印象深刻**,尤其是对于跟随基线的三个类。**

在左侧,您可以找到模型意外执行的一些实例。然而,即使对人类来说,分割这些样本看起来也很麻烦。

总的来说,FgSegNet 给人印象非常深刻,是一个很好的前景提取任务。

如果你想看看,这里是 github 对 FgSegNet 源代码的回购:

** [## lim-anggun/FgSegNet

这个库包含以下论文的源代码和训练集:“前景分割使用…

github.com](https://github.com/lim-anggun/FgSegNet)

参考

[1] L. Ang Lim 和 H. Yalim Keles,使用三重卷积神经网络进行多尺度特征编码的前景分割 (2018),arXiv-1801。

[2] C. Stauffer 和 W. E. L. Grimson,用于实时跟踪的自适应背景混合模型 (1999),IEEE 计算机学会会议。

[3] V. Dumoulin 和 F. Visin,深度学习卷积算法指南 (2016),arXiv-1603。**

犯罪和事故现场的法医分析

原文:https://towardsdatascience.com/forensic-analysis-of-crime-and-accident-scene-34febf84a938?source=collection_archive---------48-----------------------

随机森林分类器的性能

机器学习解决多类分类问题

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

作者图片

机器学习算法通常假设对象数量大致相似的类别。然而,在现实生活中,数据分布大多是倾斜的,一些类出现的频率比其他类高得多。因此,当面对这种不平衡时,我们必须设计一个智能系统,能够克服这种偏见。

这里,我们将处理一个多类问题,数据取自 UCI ML 库,如下所示。

url = ("https://archive.ics.uci.edu/ml/machine-learning-"
"databases/glass/glass.data")
df = pd.read_csv(url, header=None)
df.columns = ['Id', 'RI', 'Na', 'Mg', 'Al', 'Si','K', 'Ca', 'Ba', 'Fe', 'type']
df.set_index('Id', inplace=True)
print('Data loading:')
df.head()

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

在这里,我们把具有不同化学成分特征和不同类型的玻璃归为多类。该问题提出了各种玻璃的化学成分,其目的是确定玻璃的用途。

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

探索性分析

类可视化

figure, ax = plt.subplots(1,1, figsize=(10,5))
sns.countplot(x = 'type', data=df)
ax.set_xticklabels( ('building_windows_float_processed', 'building_windows_non_float_processed','vehicle_windows_float_processed','containers',  'tableware', 'headlamps'), rotation = 90 ) plt.show()# summarize the class distribution
target = df.values[:,-1]
counter = Counter(df['type'])
for k,v in counter.items():
per = v / len(df) * 100
print('Class=%d, Count=%d, Percentage=%.3f%%' % (k, v, per))

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

我们可以观察到数据有些不平衡。每个等级从人口最多的 76 到人口最少的 9。平均统计数据可能主要由人口最多的类的值决定,没有理由期望其他类的成员具有相似的属性值。激进行为对于区分不同的类来说是一件好事,但它也意味着进行预测的方法必须能够追踪不同类之间相当复杂的边界。

箱形图

让我们来看看标准化数据的箱线图。我们使用平均值和标准差对数据进行了标准化。偏差。

X = df[['RI', 'Na', 'Mg', 'Al', 'Si','K', 'Ca', 'Ba', 'Fe']]
X_norm = (X - X.mean())/X.std()
boxplot = X_norm.boxplot(column= ['RI', 'Na', 'Mg', 'Al', 'Si',
'K', 'Ca', 'Ba', 'Fe'])
plt.xlabel("Attribute Index")
plt.ylabel(("Quartile Ranges"))
plt.show()

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

这里可以观察到大量的异常值。我们有一个多层次的分类问题。更有甚者,数据有些不平衡。

平行坐标图

我们将使用标准化数据绘制平行坐标图,以保持比例一致。而且,因为并行坐标图计算的动态特性在显示中起着很大的作用。

X_norm = pd.concat([X_norm, df['type']], axis=1)
pd.plotting.parallel_coordinates(X_norm, 'type')
plt.show()

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

绿色和蓝色的线条很好地组合在一起,并在许多属性上与其他类很好地分开。此外,绿线位于几个属性的数据边缘,换句话说,就是这些属性的异常值。中间的蓝色线条也聚集在一起,但其值处于中间范围。

预测能力评分(PPS)

PPS 在数据中发现更多模式,并检测线性或非线性关系。分数范围从-1 到 1,表示是否存在强线性关系。PPS 使用交叉验证的决策树,并计算合适的评估指标。要了解更多,请访问这里

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

非线性关系由“0”值标识。目标不包括在相关图中,因为问题的目标具有几个离散值中的一个。

从探索性分析中,我们很好地理解了这个问题的权衡,导致了对什么算法将给出最佳性能的一些猜测。这里,数据量很小,考虑到不平衡数据集涉及多个类,问题有点复杂。

我们可能需要一个基于非线性树的算法来针对这个用例。我们将尝试决策树(DT ),它通过在某个值重复分割特征,将特征空间分割成许多更小的区域。为此,DT 使用一个贪婪算法和一些启发式算法来寻找一个分裂,使子节点的组合杂质最小化。在 DT 下的许多算法中,我们将在这里尝试随机森林。

具有 OOB 误差的随机森林

随机森林使用树,根据事例是高于还是低于所选特征变量的所选阈值,将数据分成组(重复)。输入异常值没有额外的影响。输出异常值将影响它们所在叶节点的估计值,但不会影响任何其他叶节点的值。输出异常值对随机森林有“隔离”效果。埃文·埃尔格

由于不平衡的类,我们选择分层抽样在列车测试分裂。

X = df.drop(columns = ['type'], axis=1)
y = df['type']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, stratify=y, random_state=123)miss_class_error = []
nTreeList = range(50, 2000, 50)
for iTrees in nTreeList:
depth = None
max_feat = 4 
rfc = RandomForestClassifier(n_estimators=iTrees, max_depth =depth, max_features=max_feat, oob_score=True,n_jobs = -1, random_state=123)
print('RandomForest model fit:')
rfc.fit(X_train, y_train)

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

我们想要评估我们的训练集中的观察值的数量对某些度量(准确性、F1 等)的影响。).

学习曲线

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

它实际上是可视化我们的模型在训练和交叉验证过程中的性能(例如,准确性、召回率),因为训练集中的观察次数增加了。我们在 100 个不同的训练集大小(从 1%的观察值到 100%的观察值)下绘制了拟合分类器的准确度。交叉验证模型的准确度分数越来越高,这告诉我们,我们可能会从额外的观察中受益。这是一个缓慢的过程。

准确(性)

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

混淆矩阵

cm = confusion_matrix(y_test, prediction)
pd.DataFrame(cm)
plt.figure(figsize=(10,6))
print('')
print("Confusion Matrix plot")
sns.heatmap(cm.T, square=True, annot=True, fmt='d', cbar=False)
plt.xlabel('true label')
plt.ylabel('predicted label');

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

分类报告

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

接收机工作特性(ROC)

以下代码摘自 sklearn 指南:

我们将使用一对所有的方法,这种方法在标签方面具有独特的优势。

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

特征重要性

feature_importance = rfc.feature_importances_
# normalize by max importance
feature_importance = feature_importance / feature_importance.max()#plot variable importance
idxSorted = numpy.argsort(feature_importance)
barPos = numpy.arange(idxSorted.shape[0]) + .5
plt.barh(barPos, feature_importance[idxSorted], align='center')
plt.yticks(barPos, variable_names[idxSorted])
plt.xlabel('Variable Importance')
plt.show()

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

总的来说,我们可以看到我们的模型在给定数据集的情况下为眼镜的分类提供了很好的洞察力。

超参数值的影响

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

这表明,训练大规模森林的计算成本可能没有太大价值。因此,我们可以用更少的树重新训练出模型来评估性能。

结论

用相同的数据集与其他模型进行比较总是明智的。然而,多标签分类在最近几年已经成为一个非常重要的范例。随着 ML 算法的进步,在 RandomForest 的最新版本中,不需要交叉验证或单独的测试集来获得测试集误差的无偏估计。它是在运行期间内部估计的。每个树都是使用来自原始数据的不同引导样本构建的。大约三分之一的情况被排除在引导样本之外,并且不用于第 k 棵树的构造。此外,使用随机平均梯度(SAG)求解器来训练逻辑回归模型进行比较也是一个好主意。

我这里可以到达

参考:

  1. https://www . stat . Berkeley . edu/~ brei man/random forests/cc _ home . htm
  2. 鲍尔斯博士(2015 年)。Python 中的机器学习:预测分析的基本技术。约翰·威利的儿子们。

注意:这里描述的程序是实验性的,在用于任何商业目的时都应谨慎使用。所有此类使用风险自负。

异常检测的 ML 和精确召回曲线的重要性

原文:https://towardsdatascience.com/forensic-analytics-application-of-machine-learning-to-anomaly-detection-ccd7bef58097?source=collection_archive---------39-----------------------

使用机器学习的欺诈检测

处理不平衡数据集以检测欺诈概率

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

作者图片

https://sarit-maitra.medium.com/membership

F 在电子商务、医疗保健、支付和银行系统等许多不同领域都可以看到欺诈行为。财务欺诈对投资者、监管者、审计师和公众都有重要影响。数据挖掘在检测在线交易中的金融欺诈中起着重要的作用。然而,数据挖掘变得具有挑战性,因为正常和欺诈行为的特征不断变化,并且欺诈数据集高度扭曲。

在这里,我们有银行支付的数据集如下。显示交易欺诈性(1)还是有效(0)的目标变量。

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

该数据集包含了有关数字金融欺诈风险上升的信息,强调了获取此类数据的难度。它对预测欺诈构成的技术挑战是 600 万行数据中正负类之间的高度不平衡分布。为了更好地理解金融交易数据集,让我们按特性统计不同值的数量。

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

正如我们在下图和 outlier_fraction 中看到的,数据是不平衡的。

ax = (df['fraud'].value_counts()*100.0 /len(df)).plot(kind='bar', stacked = True, rot = 0)
ax.yaxis.set_major_formatter(mtick.PercentFormatter())
ax.set_ylabel('Frequency Percentage')
ax.set_xlabel('Class')
ax.set_title('Frequency Percentage by Class')
totals = [] for i in ax.patches:
 totals.append(i.get_width())total = sum(totals) for i in ax.patches:
 ax.text(i.get_x()+.15, i.get_height()-3.5, \
 str(round((i.get_height()/total), 1))+'%', color='black', weight = 'bold')

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

数据预处理:

只有一个唯一的邮政编码值,因此我们将删除它们。

print("Unique zipCodeOri values: ",df.zipcodeOri.nunique())
print("Unique zipMerchant values: ",df.zipMerchant.nunique())

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

# dropping zipcodeori and zipMerchant 
reducedDF = df.drop(['zipcodeOri','zipMerchant'],axis=1)# changing object dtype to categorical for easing the transformation process
categorical = reducedDF.select_dtypes(include= ['object']).columns
for col in categorical:
reducedDF[col] = reducedDF[col].astype('category')# categorical values to numeric values
reducedDF[categorical] = reducedDF[categorical].apply(lambda x: x.cat.codes)
reducedDF.head()

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

可以注意到,为了计算容易,这里避免了一位热编码;但是,通常最好将这些类别值转换为虚拟值,因为它们在大小上没有关系(即客户 1 不大于客户 2)。

创建特征矩阵 X 和标签数组 y

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

让我们重新调整特征矩阵,使均值为零,标准差为一。

featuresToScale = X.columns
sX = pp.StandardScaler(copy=True)
X.loc[:,featuresToScale] = sX.fit_transform(X[featuresToScale])

特征的相关性:

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

模型准备:

现在数据准备好了,就来准备模型吧。我们需要将数据分为训练集和测试集,选择一个成本函数。

选择成本函数:

在训练之前,我们需要将误差率的成本函数应用于算法。该算法将通过从训练示例中学习来尝试最小化该成本函数。我们将使用二元分类对数损失,这将计算真实标签和基于模型的预测之间的交叉熵。

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

这里, n 是观察次数; m 是类标签的个数; log 是自然对数;如果观察值 i 在类 j 中则 1 否则01;并且是观测值 i 在类 j 中的预测概率。

该模型将为每笔交易生成欺诈概率。欺诈概率越接近真实标签,对数损失函数的值越低。ML 的目标是尽量减少测井损失。

featuresToScale = X.columns
sX = pp.StandardScaler(copy=True)
X.loc[:,featuresToScale] = sX.fit_transform(X[featuresToScale])# Define resampling method and split into train and test
method = SMOTE(kind='borderline1')
trainX, testX, trainY, testY = train_test_split(X,y, test_size = 0.2, random_state = 42, stratify=y)# Apply resampling to the training data only
X_resampled, y_resampled = method.fit_sample(trainX, np.ravel(trainY))

安装灯 GBM:

model = LGBMClassifier().fit(X_resampled, y_resampled)# Get model performance metrics
predicted = model.predict(testX)
print(classification_report(np.ravel(testY), predicted))probabilities = model.fit(trainX,
                          np.ravel(trainY)).predict_proba(testX)
print('AUPRC = {}'.format(average_precision_score(testY, \
probabilities[:, 1])))# Probabilities for the positive outcome only
lgb_probs = probabilities[:, 1]# Precision-recall AUC
precision, recall, _ = precision_recall_curve(np.ravel(testY), lgb_probs)
auc_score = auc(recall, precision)
print('LightGBM PR AUC: %.3f' % auc_score)average_precision = average_precision_score(testY, lgb_probs)plt.figure(figsize=(10,6))
# calculate the no skill line as the proportion of the positive class
no_skill = len(y[y==1]) / len(y)# plot the no skill precision-recall curve
plt.plot([0, 1], [no_skill, no_skill], linestyle='--', label='No Skill')# plot the model precision-recall curve
plt.plot(recall, precision, marker='.', label='LightGBM')
plt.fill_between(recall, precision, step='post', alpha=0.3, color='k')# axis labels
plt.xlabel('Recall')
plt.ylabel('Precision')plt.legend()
plt.title('Precision-Recall curve: Average Precision = {0:0.2f}'.format(average_precision))

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

灵敏度、特异性、精确度、F1 和 MCC:

敏感性和特异性通常被认为是混淆矩阵的特征。

  • 敏感度或召回率是指检测到的欺诈行为将产生阳性测试结果的可能性(真阳性率)。

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

我们在这里看到,公式不包含 FP 和 TN;因此,敏感性可能导致有偏差的结果,特别是对于我们的不平衡类用例。

因此,当分类器在 10 个交易中有 8 个报告肯定有可能欺诈时,灵敏度为 0.8 (80%)。它代表了我们的分类器检测欺诈的能力;低敏感度分类器不能识别许多欺诈交易,而高敏感度分类器在结果为否定时有助于排除交易。因此,我们看到,灵敏度是假阴性率的补充(即假阴性率加上灵敏度= 100%)。

  • 特异性是指欺诈性交易在非欺诈性交易中测试结果为阴性的可能性(真-负比率)。

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

因此,当分类器在 10 个无欺诈交易中的 8 个中报告否定时,特异性为 0.8 (80%)。特异性代表我们的分类器正确识别欺诈交易的程度,因为特异性高的分类器的假阳性率低。具有低特异性的分类器将许多真实的交易信号化为欺诈性的。它是假阳性率的补充。然而,这里我们也看到,公式不包含 FN 和 TP;对于不平衡的类,特异性也可能给我们有偏见的结果。

  • 精确度也称为阳性预测值。

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

这里,公式也不包含 FN 和 TN,同样,精度可能会对我们的不平衡类给出有偏差的结果。它给出了所有预测欺诈中正确预测欺诈的百分比。

  • F1 分数结合了召回率和精确度,与上述 3 个指标相比,呈现了一个更平衡的视图,但在该场景中可能会给出有偏差的结果,因为它不包括 TN。

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

  • 马修斯相关系数(MCC)在其公式中考虑了混淆矩阵的所有单元。然而,我们没有在这项工作中试验 MCC,尽管一些报告表明 MCC 易于解释,并且对预测目标的变化也是稳健的。

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

在我们的案例研究中,欺诈占总案例的 1.2%。欺诈检测可能无法通过获得高准确率来实现。因此,我们将考虑其他性能指标,特别是灵敏度、精确召回曲线下面积(AURPC)和 F1 分数。

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

准确率代表两个类别中正确分类的观察值的百分比:

百分比精度= (T P +T N / T N +F N +T P +F P) * 100

灵敏度,即真阳性率(TPR)和回忆,代表了被正确分类为阳性的阳性的比例。这些参数至关重要,我们认为这些参数与精确度一起是一种性能指标。

灵敏度= T P / T P +F N

然而,单独的灵敏度也有误导性,因为它允许忽略大量的假阳性。我们的目标是在这两个参数之间找到平衡。我们需要获得高欺诈检测率(灵敏度),以及尽可能高的准确性。为了解决这个问题,我们考虑了像 AUPRC 和 F1 分数这样的权衡措施。

精确度-召回曲线:

对于我们不平衡的数据集,更好的评估结果的方法是使用精度和召回率。精度-召回曲线显示了精度(结果相关性的度量)和召回(返回多少相关结果的度量)之间的权衡。我们已经讨论了精确度、召回率和 F1 分数。

  • 高精度意味着,在我们所有的积极预测中,许多是真正的积极预测。
  • 高召回率意味着模型已经捕获了大部分的实际阳性(换句话说,它具有低的假阴性率)

最优解需要高精度和高召回率。因此,我们在这里看到的是精度和召回之间的权衡。这通常由算法设置的阈值来确定,以将阳性病例与阴性病例分开。为了评估精度-召回曲线,我们需要计算平均精度,即在每个阈值达到的精度的加权平均值。平均精度越高,解决方案越好。

print("Classification Report for LightGBM: \n", classification_report(testY, predicted))print("Confusion Matrix of LightGBM: \n", confusion_matrix(testY, predicted))

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

鉴于我们的金融交易数据集高度不平衡,使用混淆矩阵将没有意义。考虑到这种不平衡的阶级问题,混淆矩阵在捕捉这种次优结果方面表现不佳。

拟合逻辑回归模型:

# fit Logistic Regression model
logreg.fit(trainX, trainY)
log_pred = logreg.predict_proba(testX)
log_probs = y_pred[:, 1]# calculate the precision-recall auc
precision, recall, _ = precision_recall_curve(testY, log_probs)
auc_score = auc(recall, precision)
print('LogReg PRAUC: %.3f' % auc_score)log_probabilities = logreg.fit(trainX, trainY).predict_proba(testX)
avg_prec = average_precision_score(testY, log_probabilities[:, 1])plt.figure(figsize=(10,6))
# calculate the no skill line as the proportion of the positive class
no_skill = len(y[y==1]) / len(y)
# plot the no skill precision-recall curve
plt.plot([0, 1], [no_skill, no_skill], linestyle='--', label='No Skill')
# plot the model precision-recall curve
plt.plot(recall, precision, marker='.', label='LogisticRegression')
plt.fill_between(recall, precision, step='post', alpha=0.3, color='k')plt.xlabel('Recall')
plt.ylabel('Precision')
plt.legend()
plt.title('Precision-Recall curve: Average Precision = {0:0.2f}'.format(avg_prec))

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

LightGBM 和 Logistic 回归的集成

堆叠概括提供了一种利用异质分类方法集合的集体辨别能力的机制。这包括使用顶级分类模型,该模型能够从基础级模型的预测(和分类偏差)中学习,以实现更大的分类能力。考虑到 XGBoost 和 LightGBM 来自同一个家族,我们将选择 LightGBM 和 Logistic 回归模型用于集成方法。

kfold = model_selection.KFold(n_splits=10, shuffle=True, random_state=42)# create the sub models
estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))model2 = LGBMClassifier()
estimators.append(('lgb', model2))# create the ensemble model
ensemble = VotingClassifier(estimators)
= model_selection.cross_val_score(ensemble, trainX, trainY, cv=kfold)print(results.mean())

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

这种性能比逻辑回归好不了多少,但远不如前两种模型。因此,我们将拒绝这一点。

使用无监督的 LightGBM 模型,我们实现了 0.90 的平均精度。我们将尝试安装自动编码器,以检查无监督模型是否带来更好的准确性。

自动编码器:

这里,我们将通过对欺诈案例的数量进行过采样来调整我们的训练集。我们希望将更多欺诈案例添加到我们的数据集中,以便我们训练的自动编码器能够更容易地将有效交易与欺诈交易分开。

oversample_multiplier = 100
trainX_original = trainX.copy()
trainY_original = trainY.copy()
testX_original = testX.copy()
testY_original = testY.copy()trainX_oversampled = trainX.copy()
trainY_oversampled = trainY.copy()trainX_oversampled = trainX_oversampled.append( \[trainX_oversampled[trainY==1]]*oversample_multiplier, ignore_index=False)
trainY_oversampled = trainY_oversampled.append( \[trainY_oversampled[trainY==1]]*oversample_multiplier, ignore_index=False)trainX = trainX_oversampled.copy()
trainY = trainY_oversampled.copy()model = Sequential()
model.add(Dense(units=20, activation='linear', 
activity_regularizer=regularizers.l1(10e-5), input_dim=7,name='hidden_layer'))model.add(Dropout(0.02))
model.add(Dense(units=1, activation='linear'))
model.compile(optimizer='adam',loss='mean_squared_error',metrics=['accuracy'])num_epochs = 5
batch_size = 32history = model.fit(x=trainX, y=trainY,epochs=num_epochs,
batch_size=batch_size,shuffle=True,validation_split=0.20,verbose=1)
predictions = model.predict(testX, verbose=1)
anomalyScoresAE = anomalyScores(testX, predictions)
preds, average_precision = plotResults(testY, anomalyScoresAE, True)

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

基于精度-召回曲线的测试的平均精度是 0.40,这是数据的最差表示。我们可以尝试将监督和非监督结合起来,创建一个半监督模型来检查性能。然而,由于我们现有的数据是有标记的,无监督算法可能会带来更好的结果。

精确召回曲线的阈值:

fscore = (2 * precision * recall) / (precision + recall)
ix = argmax(fscore)
print('Best Threshold=%f, F-Score=%.3f' % (thresholds[ix], fscore[ix]))no_skill = len(testY[testY==1]) / len(testY)
plt.plot([0,1], [no_skill,no_skill], linestyle='--', label='No Skill')
plt.plot(recall, precision, marker='.', label='LightGBM')
plt.scatter(recall[ix], precision[ix], s=(10*2)**2, marker='s', color='black', label='Best')plt.xlabel('Recall')
plt.ylabel('Precision')
plt.legend()
plt.show()

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

可以进一步调整该图以获得最佳性能;然而,在这里,最佳 F1 分数被标注为阈值 0.74。

生产管道:

一旦我们确定了用于生产的模型,让我们设计一个简单的管道,对新的传入数据执行三个简单的步骤:加载数据,缩放特征,并使用我们已经训练并选择用于生产的 LightGBM 模型生成预测:

*# Pipeline for New Data*# first, import new data into a data frame called ‘newData’
# Scale all the variables to a range of 0 to 1
newData.loc[:, featuresToScale] = sX.transform(newData[featuresToScale])# third, predict using LightGBM
lgb.predict(newData, num_iteration=lgb.best_iteration)

关键要点

一个欺诈检测系统应该具有下面提到的一些属性,以使现实世界的商业意义。

  1. 该系统应该能够处理偏斜分布,因为所有交易中只有一小部分是欺诈性的。为了克服这一点,需要将训练集分成分布不那么偏斜的部分。
  2. 系统应该能够处理噪声,即数据中的错误。无论训练有多广泛,数据中的噪声都会限制归纳的准确性。
  3. 如果使用重采样技术,应该小心使用;它们不应该作为独立的解决方案使用,而必须与问题的返工相结合,以达到特定的目标
  4. 系统应该能够适应新类型数据。欺诈者总是不断改变他们的行为,因此,过一段时间后,成功的欺诈技术会降低效率。
  5. 良好的度量对于检查分类器性能至关重要。偏斜分布的总体高分并不意味着系统能够捕捉所有欺诈交易。
  6. 该系统还应考虑到检测欺诈交易的成本和阻止欺诈交易的相关成本。欺诈检测系统之上的决策层可能有助于降低成本。分类器和决策规则必须相对于最小化成本来设置。

结论:

随着时间的推移,解决方案将需要重新培训,因为欺诈的模式总是在变化。此外,我们可以试验其他 ML 算法,它们的性能与梯度提升一样好,并且可以将它们包括在集成中,以提高整体欺诈检测性能。通过足够的迭代,通常有可能找到一个适当的机器学习模型,在偏差与方差以及精度与召回之间取得正确的平衡。此外,可解释性对于机器学习的现实应用非常重要。我们将为下一次讨论保留可解释性。

如果不进行全面调查,永远无法确认财务欺诈,欺诈检测方法的进步可能会发出危险信号,警告利益相关方欺诈的可能性。

我可以到达 这里

忘记学习事实,专注于学习如何做人

原文:https://towardsdatascience.com/forget-about-learning-facts-focus-on-learning-how-to-be-human-e60916232bea?source=collection_archive---------33-----------------------

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

亚历山大·奈特Unsplash 上拍照

人工智能如何改变我们使用信息的方式。

在工业革命的早期,对于大多数人来说,能够制作和执行体力劳动是赚钱的关键。在工厂工作 8 小时,在建筑工地工作,或者——如果你够幸运并且负担得起的话——为一份需要更多脑力而不是体力的工作而学习。随着机器的兴起,越来越多的艰苦体力劳动由早期的机器人完成。组装汽车或搬运重物被机器取代,我们慢慢进入了一个更加以知识为基础的经济。人工智能的兴起现在正在重复这一过程,但现在这项技术正在智力基础上更多地帮助我们。

从苦力到脑力

我是一个 80 后(更准确地说是 80 后),对我来说,我被告知记住信息是成功的关键。90 年代我在学校的时候,在接下来的几年里,我们没有谷歌、必应或任何其他形式的数字搜索引擎。我们被教导要记住尽可能多的信息,因为如果没有这些常识,你对工作社区的价值就会降低。我们正在过渡到一个知识时代,而不是启动工业革命的艰苦体力劳动时代。你可以看到这种转变,因为人们毕业的年龄越来越大,继续上大学的雄心也在迅速增长。我们现在有工具来部分自动化艰苦的体力工作,所以现在每个人都想通过使用他们的大脑来赚钱。公司为聪明人付了很多钱。

“我们是以信息为导向的,你的学位将是伟大事业的保证。”

所以我接受教育的目标是尽可能多的学习,尽可能的得到最高分,在任何类型的测试中达到最高分。当然,我们慢慢有了像早期的谷歌和类似的搜索引擎这样的工具,但这仅仅是为了查找你必须记住的信息。软技能是一个没有人听说过的词,更不用说将其作为你未来工作的一项资产了。我们是信息驱动的,你的学位将是伟大事业的保证。没有人想学习成为一名木匠、瓦工或擦窗工。我们被告知“努力学习,你会有所成就的”。软技能工作是为那些想成为心理学家或社会工作者的人保留的。

你的知识不在你的脑袋里,而是在你的指尖

人工智能如何改变我们从事体力工作的方式,同时满足我们对信息的持久需求?首先,人工智能擅长帮助我们做体力活。一个现实生活中的例子是连接到虚拟现实设备和手持控制器的机器人手臂,以执行精确的工作。通过深度学习,它能够学习不同的任务,如装沙拉或叠毛巾,只需对信息进行微小的调整。没有“仅仅会叠毛巾”——作为一个单一的任务——它可以学习新的技术并扩展它的一系列动作。在某种程度上类似于我们人类,能够像我们一样学习新的物理技术。

现在,我们正在进入一个机器覆盖物理部分的时代,这意味着人类可以更加专注于知识。但是,身处 2020 年的我们,还需要我们大脑中所有的精确知识、事实和细节吗?我个人很怀疑。我们觉得有必要存储所有这些信息,并根据你拥有多少事实知识来确定你有多“聪明”,这可能仍然是一种自我或声望的事情,但这仍然值得吗?如今,你可以在 Google Home 或 Siri 上问任何维基百科上有价值的问题,并在 2 秒内得到答案,这比我解锁手机主屏幕和打开谷歌还快。当然,手头有知识会派上用场,但在大多数情况下已经不再需要了。事实上,我们大多数人不是一直带着 4G 手机甚至 Siri 吗?事实上,所有的答案不都在我们的指尖或牛仔裤的口袋里吗?我们真的应该用我们(不断发展的)手机、平板电脑、智能扬声器等现成的琐碎信息来加重我们大脑的负担吗?

忘记琐碎的事实,专注于做人

我们现在正在应对如此多的现代挑战,这些挑战不需要太多的“顶级知识”,而是需要更多的理解和执行让我们与众不同的东西。我们人类是世界上最有创造力的生物(或者至少有足够的创造力让我们认为自己是)。我们也有强大的道德指南针,这是人工智能所缺乏的东西你可以在我以前的一篇文章中读到。我们不应该再想去回忆西尔斯大厦有多高,或者哪位将军在 1729 年的一场战斗中骑着白马。这是我们在几秒钟内从我们的人工大脑(谷歌、Siri、Alexa 等)接收到的信息类型。)如果你愿意的话。

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

图片 1 :来自品牌人性化论文 (2018)的人类与机器人

我们确实需要投资于人工智能(还)无法从我们手中接管的事物。理解人类情感、处理道德问题、发挥创造力、管理工具和人员。我们在 2018 年发表的品牌人性化论文 Jonathan Flores 和我自己做了一个“机器人 vs 人类”的概述(图 1)。它显示了两者的优势和弱点,并显示了机器人和人类在不同领域的优势。机器人可以防止错误,运行重复性任务,全天候工作,并存储难以置信的大量信息和数据。那么,为什么我们还想用我们有限的大脑来储存信息呢?我们将做人工智能能做的事情,只是数量少得多,而且有丢失数据的风险。更确切地说,我们会关注机器人缺少我们所拥有的东西的领域。如果我们专注于更软的技能,我们实际上可以拥有 AI/Robots/ML 或任何你更喜欢的工具来做它最擅长的事情:成为一台机器,使用数据和体力来支持我们的日常生活。让我们——人类——专注于我们最擅长的事情,那就是创造性和人性。

你怎么想呢?

我们需要继续专注于在大脑中存储知识和事实,还是应该利用人工智能来为我们记住非关键信息?

忘了 Python 吧。学习 COBOL,成为危机英雄

原文:https://towardsdatascience.com/forget-about-python-learn-cobol-and-become-a-crisis-hero-7f15e75ff377?source=collection_archive---------1-----------------------

意见

为什么编程恐龙是现在最受欢迎的语言

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

仍然有一些恐龙存在——而且需求量很大。乌曼诺德Unsplash 上拍摄的照片

目前仍在市场上销售的最古老的编程语言是什么?Python 三十多岁了。c 快五十岁了。Fortran 已经 60 年代了。而且还在用!

还有另一种计算机语言恐龙被广泛使用。一个你可能从未听说过的故事。遇见六十多岁的 COBOL。

80%的个人交易和 95%的 T4 提款机都使用 COBOL,它是货币的编程语言。超过 2000 亿行 COBOL 今天仍在使用,所有这些都需要维护。

现在比以往任何时候都多。随着失业索赔的激增,古老的——基于 COBOL 语言的——社会保障系统超负荷运转。所以管理者愿意做任何事情来得到 COBOL 程序员。

因此,如果你想获得一些大的薪水,并做一些事情来帮助那些受这场危机影响的人,COBOL 是一条出路。

为什么没人知道 COBOL 了…

首先,因为 COBOL——通用面向业务的语言——是面向业务人员的语言,而不是面向程序员的语言。它的设计是为了让一个没有代码知识的商人明白发生了什么。这意味着代码背后的程序员的福祉不是优先考虑的。

COBOL 有许多语法上的奇怪之处,这使得它适合商业,但不适合铁杆书呆子。比如它没有任何函数或子程序,而是有分部、章节、段落和语句。非常令 20 世纪 70 年代的系统编程先驱们厌恶。

“使用 COBOL 语言会使大脑瘫痪;因此,其教学应被视为刑事犯罪。”埃德格·w·迪杰斯特拉

但那时已经太晚了。银行和官僚机构的核心代码已经建立。

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

许多银行和联邦机构仍然使用 COBOL。马库斯·伦克在 Unsplash 上的照片

…为什么它仍然无处不在

考虑到 COBOL 奇怪的结构,你可能会认为它是由不知道计算机代码是什么的人编写的。远非如此。围绕着传奇人物格蕾丝·赫柏的一个了不起的团队使它的发展成为可能。

与五十年代的编程语言相比,COBOL 是一场革命。它易于使用和理解,可移植,独立于机器,并且能够改变。所有这些只需要很小一部分成本。这是一种直接来自未来的语言。

所以它被到处采用:银行,保险,联邦政府机构,你能想到的。到 1970 年,几乎没有一个系统不是用 COBOL 编写的。

矛盾的是,事实上是新语言的出现——如 Fortran & co——巩固了 COBOL 的遗产。商业计算机语言在 80 年代被宣布死亡,这一趋势发展如此之快,以至于新程序员甚至懒得学习它。因此,虽然有足够多的老程序员来维护现有的代码,但却没有足够多的合格人员来将代码转换成更新的语言。

快进到 2020 年:虽然代码维护人员几十年来在保持联邦系统坚如磐石方面做了令人难以置信的工作,但没有人预料到需求会如此激增。突然间,我们需要更多的实践平台来应对这场危机。

[## 重温你的 COBOL:为什么一门 60 年前的语言突然大受欢迎?-堆栈溢出博客

突然变得紧张的失业系统通常运行在一种有 60 年历史的编程语言 COBOL 上。所以,你怎么能…

stackoverflow.blog](https://stackoverflow.blog/2020/04/20/brush-up-your-cobol-why-is-a-60-year-old-language-suddenly-in-demand/?utm_source=Iterable&utm_medium=email&utm_campaign=the_overflow_newsletter)

需求极高

“我们全国各地的许多劳工部仍在使用 COBOL 系统。你知道非常非常古老的技术。[……]我们的劳工部已经认识到这是一个问题,并启动了现代化,不幸的是,这需要时间。这种(病毒)干扰,他们不得不停止过渡到一个更强大的系统。所以他们在用非常旧的东西做手术。”——劳拉·凯利,堪萨斯州州长

随着失业率一飞冲天,几个州的州长正在争相寻求帮助。突然间,他们需要升级系统,而在正常情况下,这些系统需要数年时间才能实现现代化。突然间,一切都失控了。

新泽西州州长甚至在电视上露面来传播这个消息。IBM 一直试图通过发布 COBOL 程序员的呼叫来提供帮助,但是搜索仍然很困难。

现在非常需要知道如何编码的人。具体来说就是懂 COBOL 的人。

不性感,但值得

这不是你的酷屁股热新编程语言。这甚至不是 Python——阅读我文章的人都知道我对后者又爱又恨。这不是一些性感的数据科学,或怪异的人工智能,或两者兼而有之。

如果你选择使用 COBOL,你很可能是在做维护工作。你在吸收几十年前的商业逻辑,而不是开发前沿算法。你在计算机科学的石器时代工作,使用的技术看起来仍然像是为那些过时的打孔机卡设计的。

但是现在你不能做任何更重要的事情。数百万人已经失业。尽管许多州已经重新开放,但经济反弹不太可能。

这意味着我们将会看到另外几百万人失业。很多很多人将需要这些国家福利来维持生活。而目前的情况——有些人已经给他们的办公室打了上百次电话——不仅仅是绝望。

所以如果你能帮忙的话,你应该去做。COBOL 并不性感——但是,让我们面对现实吧,帮助人类是性感的。从这个意义上说:快乐编码!

[## 大型机:从初学者到专家的完整 COBOL 课程

这门 Udemy 课程并不是完全免费的,但至少从 175 美元降到了 10 美元左右。如果您想建立自己的 Corona 编程技能,不妨一试。

www.udemy.com](https://www.udemy.com/course/mainframe-the-complete-cobol-course-from-beginner-to-expert/)

厌倦了被告知新冠肺炎方向每两天改变?

原文:https://towardsdatascience.com/forget-daily-statistics-of-the-coronavirus-7e9bbb7349bd?source=collection_archive---------30-----------------------

忘记每日统计,遵循正确的 KPI!

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

索菲·戴尔在 Unsplash 上的照片

我们[和媒体!]过于看重日常数字。
对于大多数国家来说,病例统计遵循一个周模式,在周末达到最低点。

用过去 7 天的滚动平均值代替每日数据及其解释会带来一些决定性的优势:

  • 清晰的趋势而不是摇摆不定、令人困惑的模式。
  • 减少 60%的误解(即草率的结论)。

让我们放大意大利数据来更好地理解这种效果:

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

[疫情爆发以来新增确诊新冠肺炎病例(>每百万人口 5 例)。每日统计(蓝线)与连续 7 天平均值(绿线)

图表显示:

  • 每日确诊病例 ( 蓝线)。
  • 确诊病例的滚动 7 天平均值(绿线)。这是按照当天和过去 6 天的平均值计算的。
  • 周末(灰色阴影区域)。

在每个图表中,两个指标中的一个用粗线突出显示。现在让我们添加箭头来表示观察到的方向变化:

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

[疫情爆发以来新增确诊新冠肺炎病例(>每百万人口 5 例)。每日统计数据(蓝线)与 7 天滚动平均值(绿线)。箭头表示指标的方向性变化。

在左侧,每次我们观察到一个微逆趋势时,我们都会看到一个红色箭头,即每日数据的方向变化与主趋势相反。9 次我们得到了一个“错误信号”(或者说“曲解”)。

在右边,我们没有一个错误的信号!单一方向变化对应于宏观趋势在三月底的正确突破——由绿色箭头指示。****

现在我们很容易意识到,意大利已经连续 4 周呈持续下降趋势。

我们所认定的“错误信号”就是我们一开始所说的“误解”或“草率结论”。我们在计算中使用的确切定义是:

如果在不到 5 天的时间内恢复方向,则方向变化被视为“对数字的误解”。

回到整体数据集。

我们使用了来自 JHU 的数据,并分析了 117 个国家从 2020 年 4 月 20 日到 2020 年 4 月 20 日的病毒单独爆发(>每百万人口 5 例)的数据。这些国家的误解平均减少了 60% 。对许多国家来说,降幅甚至更高。这些国家的例子包括:

美国:73%;意大利:95%,德国:91%,西班牙:83%

让我们快速看一下这些国家:

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

自疫情爆发以来新增确诊新冠肺炎病例(>每百万人口 5 例)。每日统计(蓝线)与连续 7 天平均值(绿线)

O 很明显,7 天的滚动平均值(绿线)再次比每日数据平滑。但更重要的是——滚动平均值改变方向的次数要少得多

死亡人数

针对确诊病例显示的效果也适用于死亡病例。在该指标上应用滚动平均,我们会获得相同的优势。

是什么导致了周线模式?

这种模式(主要是每周一次)可能有不同的原因:

  • 周六和/或周日测试较少
  • 周末进行测试的记录延迟

即使“季节性”的原因是另一个,通过取 7 天平均值来平滑数据会使结果更加稳定。

预言

数据中季节性模式的存在也应纳入预测模型。季节性效应的调整使得预测更加准确并且其可信度(或置信度)区间更窄。

已经有很多非常好的预测模型,例如

2020 年 3 月 30 日,帝国理工学院,评估 11 个欧洲国家的新冠肺炎感染人数和非药物干预的影响

这项研究考察了各国采取的不同干预措施:禁止活动、关闭学校、封锁等。,其影响通过减少再现数 R0 (或 Rt)来衡量。非常有趣的阅读!

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

照片由诺亚·西利曼Unsplash 上拍摄

最终注释

普通人每隔几天就会看到新冠肺炎数字改变方向,这并没有什么好处。相反,它制造了更多不必要的恐慌和不确定性。

毕竟,这些方向的快速转变与成功实施的干预(如“呆在家里”)无关,而往往是周末的产物。因此,同样:

使用滚动 7 天平均线!

想看看自己国家的数据吗?

几周前,我开发了一个微型网络应用程序来可视化冠状病毒病例统计。现在我添加了 7 天滚动平均值,所以如果你想查看你所在国家或美国各州的数据,请点击以下链接:

T3【https://go.aws/2xsdb7q】T5

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

Web App截图,可在https://go.aws/2xsdb7q访问。该应用程序显示了 历史每日病例数据加上来自 JHU 数据集的所有国家 加上美国各州和中国各省

而如果你想自己(用 R 或者 Python)创建这样一个 app 的话,查看我更多的技术 101 篇: R 版 Python 版

忘记锚盒与 FCOS 的争论:完全卷积的一阶段目标检测

原文:https://towardsdatascience.com/forget-the-hassles-of-anchor-boxes-with-fcos-fully-convolutional-one-stage-object-detection-fc0e25622e1c?source=collection_archive---------11-----------------------

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

信用: FCOS

本文详细解释了一种新的目标检测技术,该技术在 ICCV 19 年发表的论文 FCOS :全卷积一阶段目标检测中提出。我决定总结这篇论文,因为它提出了一种非常直观和简单的技术来解决对象检测问题。留下来了解它是如何工作的。

内容

  1. 基于锚的检测器
  2. FCOS 提出的想法
  3. 多级检测
  4. FCOS 的中心
  5. 基于锚的检测器的实验和比较
  6. 结论

基于锚的检测器

我们现在使用的每一种著名的物体检测方法(Fast-RCNN,YOLOv3,SSD,RetinaNet 等。)使用锚点。这些主播基本都是预定义的训练样本。它们有不同的比例,以方便不同种类的对象及其比例。然而,正如你从它们的定义中清楚理解的那样,使用锚涉及到许多超参数。例如,图像的每个部分的锚的数量、框的尺寸的比例、图像应该被分成的部分的数量。最重要的是,这些超参数影响最终结果,即使是最微小的变化。此外,哪个边界框被认为是负样本还是正样本由另一个称为并集上的交集(IoU)的超参数决定。IoU 值极大地改变了哪些盒子将被考虑。下面是一个简单的图像,描述了在 Yolov3 中锚定框的使用:

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

我们一直在使用这种方法,原因只有一个,那就是延续以前方法使用的理念。第一个物体检测器从经典计算机视觉的早期检测模型中借用了滑动窗口的概念。但是,既然我们拥有多个 GPU 的计算能力,就没有必要使用滑动窗口了。

FCOS:提议的想法

这就引出了一个问题,为什么还要使用锚点,为什么不像分割那样执行对象检测,即像素方式。这正是本文所要提出的。到目前为止,通过使用滑动窗口方法,在图像的逐像素值和检测的对象之间没有直接的联系。现在让我们正式看看这种方法是如何工作的。

Fᵢ 为总跨度 s 的骨干 CNNI层的 Fᵢ⁰ 特征图。此外,我们将图像的地面实况包围盒定义为 Bᵢ = ( x⁰ᵢ,y⁰ᵢ,x ᵢ,y ᵢ,cᵢ ) ∈ R₄ × {1,2 … C} 。这里是 C 是班级人数。这里 (x⁰ᵢ,y⁰ᵢ)****(xᵢ,y ᵢ) 分别表示左上角右下角。对于特征图上的每个位置 (x,y) ,我们可以将其指向原始图像中的一个像素。这与我们在语义分割中所做的事情类似(尽管不完全相同)。我们将特征图上的 (x,y) 映射到感受野中心附近的点 (floor(s/2) + xs,floor(s/2) + ys) 。我鼓励用户使用大小为(8,8)的示例图像和大小为(4,4)的特征图来真正理解这种映射。在这种映射的帮助下,我们能够将图像中的每个像素作为训练样本进行关联。这意味着,每个位置 (x,y) 可以是正样本或负样本之一,这取决于以下条件:它落在地面真实(GT from now)边界框中,并且为该位置计算的类标签是该 GT 边界框的类标签。

现在我们知道了 GT 边界框中的一个点,我们需要评估这个框的尺寸。这是通过对四个值 (l、t、r*、b*)的回归来完成的。**它们被定义为:

l * =x-x⁰ᵢ;t * =y-y⁰ᵢ;r * = x⁰ᵢ-x;b = y⁰ᵢ-y*

最后,正如您将看到的,这些值的基于回归的计算是整个检测算法的损失函数的一部分。

现在,因为没有锚点,所以不需要计算锚点和 GT 边界框之间的 IoU 来获得可以训练回归器的正样本。相反,给出正样本的每个位置(通过在 GT 框内并具有正确的类)可以是边界框尺寸回归的一部分。这是 FCOS 比基于锚的检测器工作得更好的可能原因之一,即使在使用更少数量的参数之后。

对于特征图中的每个位置,我们计算分类分数,对于每个正样本位置,我们进行回归。因此,总损失函数变为:

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

信用: FCOS

对于本文, λ 的值取为 1。

RHS 的第一部分是位置分类 (x,y) 。RetinaNet 中使用的标准焦点 loos 也在这里使用。RHS 的第二部分是回归包围盒。对于不是正样本的位置,它等于零。

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

信用: FCOS

用 FCOS 进行多层预测

多级预测基本上意味着使用不同级别的特征图进行对象检测。这类似于 RetinaNet 中使用的 FPNs(特征金字塔网络)的概念。探测器头应用于几个级别的特征图,P3,P4,P5,P6,P7 如上图所示。这有助于我们检测图像中不同大小的对象。这有助于解决重叠 GT 边界框的问题。如果两个不同大小的边界框相互重叠会怎样。这是用多级预测来处理的。与基于锚的检测器不同,基于锚的检测器将不同大小的锚框分配给不同的特征级别,从而在不同的级别分离不同大小的重叠 GT 边界框,像 FCOS 这样的无锚检测器通过在不同的特征地图级别限制回归来实现这一点。它们为所有要素级别(P3 至 P7)定义了一个值 mᵢ,该值设置为 0、64、128、256、512 和无穷大,P2 为 0,因此没有要素级别。基本上是特征级别 I 需要回归的最大距离。例如,特征级别 P7 需要回归其中 max(l,r,t*,b*) < infinity** 但是大于下一个 m 的值,即 512 的盒子。同样,它也适用于其他功能级别。此外,如果一个位置即使在多级检测后仍被分配给一个以上的 GT 箱,它将被自动分配给两个 GT 箱中较小的一个。

FCOS 的中心

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

信用: FCOS

除了两个传统的探测头,分类和回归,FCOS 建议使用第三个头,称为中心头。顾名思义,它是对为其回归的边界框内的正样本位置的中心性的度量。这是为了提高无锚检测器的性能,并使它们与基于锚的检测器不相上下。从经验上来说,我们发现,就特征在盒内的位置而言,具有偏斜特征位置的低级回归盒会妨碍整体结果。因此,上面的项是使用 BCE 损失对每个回归的盒子进行计算的,因为它的范围是从 0 到 1。这个损失被加到上面讨论的最终损失函数中。测试时,在对推断出的边界框进行排名之前,将该值乘以分类分数以获得最终分数。

实验和与基于锚的最新技术的比较

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

信用: FCOS

上表显示了与 RetinaNet 的比较,retina net 是一个最先进的基于锚点的模型。具有多级预测和中心分支的原始实现在其他参数方面优于 RetinaNet,例如。两种型号的 nms 阈值设置相同。上表中提到的“改进”是在最初提交后增加的。它们包括以下内容:将中心性分支移动到回归分支而不是分类分支,控制采样,这基本上是添加基于超参数的去除坏样本以及中心性分支。其他补充请点击这个链接。

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

信用: FCOS

上表很有趣,因为它强调了中心性分支带来的改进。基于锚的模型采用 IoU 阈值,同时对正负锚盒进行分类。中心性分支有助于消除这些超短波。

需要注意的非常重要的一点是,重要的超参数如学习率、NMS 抑制阈值等。直接取自 RetinaNet。通过专门针对无锚模型进行更好的超参数调整,有可能获得更好的结果。

结论

FCOS 是一个伟大的想法,使对象检测问题更简单,更快。这是对远离基于锚的滑动窗口的目标检测思想的鼓励。这可以在解决这个棘手的计算机视觉问题上带来巨大的成果。

这就是所有的乡亲😃

你可以在我的Github上看更多深度学习相关的东西,关注我的Linkedin

我之前的一些文章:

[## 关于 Auto-Deeplab 你需要知道的一切:谷歌关于细分的最新消息

搜索图像分割模型

towardsdatascience.com](/everything-you-need-to-know-about-auto-deeplab-googles-latest-on-segmentation-181425d17cd5) [## 关于 MobileNetV3 及其与以前版本的比较,您需要了解的一切

论文综述:寻找 MobilenetV3,ICCV 19

towardsdatascience.com](/everything-you-need-to-know-about-mobilenetv3-and-its-comparison-with-previous-versions-a5d5e5a6eeaa) [## 使用辅助旋转损耗的自监督 GANs

弥合有监督和无监督图像生成之间的差距

towardsdatascience.com](/self-supervised-gans-using-auxiliary-rotation-loss-60d8a929b556) [## 使用专门为其制作的损失来处理类不平衡数据

通过添加大约 10 行代码,在严重的类不平衡数据上获得超过 4%的准确性提升。

towardsdatascience.com](/handling-class-imbalanced-data-using-a-loss-specifically-made-for-it-6e58fd65ffab)

从计算机视觉到深度学习:工业应用中的人工智能创新之路

原文:https://towardsdatascience.com/form-computer-vision-to-deep-learning-the-ai-path-to-innovation-in-industrial-applications-b132eef8803a?source=collection_archive---------49-----------------------

机器视觉如何演变成深度学习来提供一双额外的眼睛

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

图片由 Flickr 提供

在让制造工厂在面对间歇性人类劳动力的情况下提高产量的竞赛中,制造商正在考虑如何为他们的摄像机配备人工智能,以使人类检查员能够立即发现有缺陷的产品并纠正问题。

虽然机器视觉已经存在了 60 多年,但最近深度学习的流行已经使这种有时被误解的技术引起了全球主要制造商的注意。作为一家深度学习软件公司的首席执行官,我已经看到深度学习是机器视觉的自然下一步,并有可能推动制造商的创新。

深度学习与机器视觉有何不同,制造商如何利用相机技术的这种自然演变来应对现实世界的需求?

机器视觉:当简单太简单的时候

在 20 世纪 60 年代,几组科学家,其中许多在波士顿地区,着手解决“机器视觉问题”该方法简单而强大:科学家提出了一个框架,其中机器视觉系统由两个步骤来表征。

首先,科学家决定哪些简单的特征——图像中的边缘、曲线、色块、角落和其他突出的关键点——对图像来说是重要的。第二,他们设计了一个分类器,通常手动调整几个“阈值”(例如,多少“红色”和“曲率”将一个对象分类为“红苹果”),自动衡量这些特征并决定它们属于哪个对象。虽然这种方法远非人类视觉能力的完整表征,但它简单有效,足以在 50 年内保持不变。

在这种原始形式下,它支持大量现实世界的应用,并成为制造应用的重要组成部分,从那以后一直为质量控制部署提供动力。

在视觉检查示例中,可以部署机器视觉系统来搜索产品图像中的缺陷。第一步通常是通过计算对比度、边缘、颜色和其他特征对产品图像进行采样,因为它们可能指示了物体中的缺陷。第二步,质量检查员将手动调整分类器,以确定产品是否有足够的“可疑特征”来最终确定损坏。

这种方法在某些情况下简单而强大,但在许多其他情况下却非常无效,因为它在好的产品属性和缺陷之间的差异是高度定性的、微妙的和可变的情况下失败了。然而,这就是我们生活的世界的本质。

机器视觉的答案是:创建更多的功能和阈值,稳步攀升到更高的复杂性,使这些系统变得极其复杂,即使是最有经验的工程师和操作员也难以调整。

深度学习之路:将智能从人类转移到软件

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

神经网络——以及它们的子类,深度学习,就在这里。图片由 Piqsel 提供

在 80 年代,当机器视觉风靡一时时,一小群对弥合生物系统和机器之间的差距感兴趣的科学家开始尝试模仿大脑视觉系统中的神经元及其架构。目标是更好地理解我们如何感知,并在此过程中,设计出“看”得更好的机器。

在那些年里,今天的深度学习模型的前身被开发出来。关键是:自组织。重要的是,这些模型和后来的深度学习表兄弟不依赖于传统机器视觉的两个手动调整的步骤。相反,他们将寻找(学习)这些特征和阈值的负担从科学家转移到深度学习模型。科学家们仍然需要开动脑筋,设计出能够直接从数据中进行广义学习的方程,但现在只需要做一次。

这确实是深度学习的关键 : 我们不需要为每种情况手工制作一个机器视觉模型,而是设计一个可以直接从数据中学习几乎任何东西的学习机器,无论是对水果、飞机还是机器中的产品进行分类。

深度检测:将人工智能的能力和灵活性带到每一台制造相机上

在机器视觉主导的质量控制领域,深度学习代表着一种至关重要的创新,特别是在需要用更少的人完成越来越多的工作的时候。

随着机器能够以每分钟轻松超过 60 件的速度生产极其多变、不断变化的产品,深度学习正在改变机器视觉的格局,特别是结合了边缘学习(或直接在相机/机器中学习的能力)的产品。

今天,在机器的边缘节点上运行的深度学习使数十台摄像机能够在不断引入新项目的可变生产环境中学习新的项目类型和缺陷,并且新的、以前未见过的缺陷出现在生产线上。机器视觉无法完成这项任务——有太多专门的、手动调整的功能和阈值,每个产品都有自己非常复杂的要求。深度学习降低了优化质量检测的成本和时间,使其在技术和经济上对所有类型的制造商都可行。

深度学习是一种范式转换技术,它通过将智能从工程师和质量检查员转移到一个在计算边缘持续运行的软件,在需要的速度、延迟和成本方面为工业 4.0 革命开辟了一条清晰的道路,从而使高效实现 100%检查成为可能。

虽然机器视觉已经达到了目的,但深度学习相机将为这个从未如此需要突破的领域带来创新。

Python 中的格式函数

原文:https://towardsdatascience.com/format-function-in-python-98ed34e0a70e?source=collection_archive---------5-----------------------

Python 的 string 类别的 str.format() 技术允许您尝试进行变量替换和数据格式化。这使您能够通过点数据格式以所需的间隔连接字符串的各个部分。

本文可以引导您了解 Python 中格式化程序的一些常见用法,这可能有助于您的代码和程序对用户友好。

1)单一格式化程序:

格式化程序的工作方式是将一个或多个替换字段或占位符(由一对方括号 “{}” )固定成一个字符串,并调用 str.format()技术。您将把希望与字符串连接的值传递给 format()方法。运行程序后,该值将打印在占位符{}所在的位置。单格式器可以定义为只有一个占位符的格式器。在下面的例子中,你可以看到 print 语句中 format 的实现。

print("{} is a good option for beginners in python".format("Research Papers"))**OUTPUT:** Research Papers is a good option for beginners in python

除了在 print 语句中直接使用它之外,我们还可以对变量使用 format()

my_string = "{} is a good option for beginners in python"print(my_string.format("Research Papers"))**OUTPUT:** Research Papers is a good option for beginners in python

2)多重格式化程序:

比方说,如果一个句子中需要另一个变量替换,可以通过在需要替换的地方添加第二个花括号并将第二个值传递给 format()来实现。然后 Python 会用输入中传递的值替换占位符。

my_string = "{} is a good option for beginners in {}"
print(my_string.format("Research Papers","Machine Learning"))**OUTPUT:** Research Papers is a good option for beginners in Machine Learning

我们可以在给定变量中添加任意数量的占位符或花括号,并为格式()添加相同数量的输入。

my_string = "{} is an {} option for {} in {}"
print(my_string.format("Research Papers","excellent","experienced","Machine Learning"))**OUTPUT:** Research Papers is an excellent option for experienced in Machine Learning

3)使用位置和关键字参数的格式化程序:

当占位符为空{}时,Python 解释器将通过 str.format()按顺序替换这些值。

str.format()方法中存在的值主要是 tuple(“tuple 是一系列不可变的 Python 对象”)数据类型,tuple 中包含的每个单独的项通常由其索引号引用,索引号从零开始。然后,这些索引号被传递到原始字符串中的花括号中。

您可以使用花括号中的位置参数或索引号,以便将特定值从格式()中获取到变量中:

my_string = "{0} is a good option for beginners in {1}"
print(my_string.format("Research Papers","Machine Learning"))**OUTPUT:**
Research Papers is a good option for beginners in Machine Learningmy_string = "{1} is a good option for beginners in {0}"
print(my_string.format("Research Papers","Machine Learning"))**OUTPUT:**
Machine Learning is a good option for beginners in Research Papers

关键字参数通过调用花括号内的变量名来帮助调用 format()中的变量:

my_string = "{0} is a good option for beginners in {domain}"
print(my_string.format("Research Papers",domain = "Machine Learning"))**OUTPUT:** Research Papers is a good option for beginners in Machine Learning

我们可以同时使用关键字和位置参数:

my_string = "{domain} is a good option for beginners in {0}"
print(my_string.format("Research Papers",domain = "Artificial Intelligence"))**OUTPUT:**Artificial Intelligence is a good option for beginners in Research Papers

4)型号规格:

通过使用格式代码语法,可以在语法的花括号中包含更多的参数。在此语法中,无论 field_name 在哪里,它都会指定参数或关键字对 str.format()技术的指示符,而 conversion 是指数据类型的转换代码。一些转换类型包括:

s-字符串

d —十进制整数(以 10 为基数)

f——浮动

c-字符

b —二进制

o-八进制

x—16 进制,9 后面有小写字母

e —指数符号

my_string = "The Temperature in {0} today is {1:d} degrees outside!"
print(my_string.format("Research Papers",22))**OUTPUT:** The Temperature in Vizag today is 22 degrees outside!

确保使用正确的转换。如果您使用不同的转换代码,将会出现以下错误:

my_string = "The Temperature in {0} today is {1:d} degrees outside!"
print(my_string.format("Vizag",22.025))--------------------------------------------------------------------ValueError                                Traceback (most recent call last)  in () **      1** my_string = "The Temperature in {0} today is {1:d} degrees outside!" ----> 2 print(my_string.format("Vizag",22.025))  ValueError: Unknown format code 'd' for object of type 'float'

您甚至可以限制浮点整数中的小数位数:

my_string = "The Temperature in {0} today is {1:f} degrees outside!"
print(my_string.format("Vizag",22.025))**OUTPUT:**
The Temperature in Vizag today is 22.025000 degrees outside!my_string = "The Temperature in {0:20} today is {1:.2f} degrees outside!"
print(my_string.format("Vizag",22))**OUTPUT:** The Temperature in Vizag today is 22.02 degrees outside!

5)使用格式化程序的间距和对齐:

我们可以使用 format()将空格或对齐方式应用到占位符的右侧、左侧或两侧。对齐代码是:

< : left-align text

^ : center text

:右对齐

my_string = "The Temperature in {0:20} today is {1:d} degrees outside!"
print(my_string.format("Vizag",22))**OUTPUT:** The Temperature in Vizag                today is 22 degrees outside!my_string = "The Temperature in {0} today is {1:20} degrees outside!"
print(my_string.format("Vizag",22))**OUTPUT:** The Temperature in Vizag today is                   22 degrees outside!

我们可以看到字符串是左对齐的,数字是右对齐的。通过使用 format(),我们可以对它们进行如下修改:

my_string = "The Temperature in {0:>20} today is {1:d} degrees outside!"
print(my_string.format("Vizag",22))**OUTPUT:** The Temperature in                Vizag today is 22 degrees outside!my_string = "The Temperature in {0:<20} today is {1:d} degrees outside!"
print(my_string.format("Vizag",22))**OUTPUT:** The Temperature in Vizag                today is 22 degrees outside!my_string = "The Temperature in {0:^20} today is {1:d} degrees outside!"
print(my_string.format("Vizag",22))**OUTPUT:** The Temperature in        Vizag         today is 22 degrees outside!

6)整理资料:

我们倾向于在 Excel 表中组织数据,我们可以用各种方法调整列的大小,但是我们如何在程序中应用同样的东西,一列中的值以指数方式递增,一列中的项目进入另一列,或者最终用户可能会发现很难理解哪个值属于哪个列。

for i in range(4,15):
   print(i,i*i,i*i*i)**OUTPUT:** 4 16 64
 5 25 125
 6 36 216
 7 49 343
 8 64 512
 9 81 729
 10 100 1000
 11 121 1331
 12 144 1728
 13 169 2197
 14 196 2744

在这里,我们可以使用 format()来定义每一列之间的间距,以便最终用户可以轻松地区分不同列的值。

for i in range(4,15):
    print("{:6d} {:6d} {:6d}".format(i,i*i,i*i*i))**OUTPUT:** 4     16     64
      5     25    125
      6     36    216
      7     49    343
      8     64    512
      9     81    729
     10    100   1000
     11    121   1331
     12    144   1728
     13    169   2197
     14    196   2744

总结:

从上面的使用中,我们可以说,用于变量替换的格式化程序是连接字符串、转换值、组织值和数据的有效方法。格式化程序代表了一种简单但非描述性的方式,用于将变量替换传递到字符串中,并有助于创建某些可理解且用户友好的输出。

谢谢

用 Python 格式化字符串

原文:https://towardsdatascience.com/formatting-strings-in-python-6e014bdd1663?source=collection_archive---------30-----------------------

如何在 Python 中使用 format()方法和 f 字符串

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

凯文·Ku 在 Unsplash 上的照片

介绍

python 中有多种格式化字符串的方法。我们将讨论 format()方法和 f 字符串,以创建以下内容:

我们将使用 first_name、last_name 和 age 变量来创建一个字符串,该字符串包含某人的名字、姓氏和年龄,格式如下:

‘名字姓氏年龄岁’

一个例句是:“约翰·多伊今年 43 岁”。

使用 format()方法

实现这一点的一种方法是使用 format 方法。format()方法是一个字符串方法。一旦你从一个字符串中调用它,它会用括号中传递的变量值替换字符串中所有的花括号,按照它们被传递的顺序。因此,花括号充当变量的占位符。

例如,要使用上述示例的 format 方法,我们将使用以下代码:

first_name = 'John'
last_name = 'Doe'
age = 43sentence = '{} {} is {} years old'.format(first_name, last_name, age)print(sentence)
# 'John Doe is 43 years old'

**注意:**format 方法将按照变量在括号中出现的顺序用变量的值替换花括号。

如果我们不想担心以正确的顺序传递变量,我们可以在每个花括号中使用键,然后为该特定键分配变量:

first_name = 'John'
last_name = 'Doe'
age = 43sentence = '{first} {last} is {age_yrs} years old'.format(last=last_name, age_yrs=age, first=first_name)print(sentence)
# 'John Doe is 43 years old'

注意,如果我们为每个占位符使用特定的键,变量就不必以正确的顺序传递。

虽然 format()方法完成了这项工作,但是还有一种更好的格式化字符串的方法,那就是使用 f 字符串。

[## Python 中的循环

如何在 python 中使用 enumerate()函数

towardsdatascience.com](/looping-in-python-5289a99a116e)

f 弦

f 字符串是 Python 3.6 及更高版本中格式化字符串的一种新方法。对于大多数人来说,它们是格式化字符串的首选方式,因为它们易于阅读,因此更加直观。

f’{var_1} {var_2}是{var_3}岁’

要指定我们想要使用 f 字符串,或者格式化字符串,我们只需在字符串前面放一个 f。然后,我们可以直接将变量添加到我们的花括号中,在我们希望它们出现的位置。因此,我们不需要像使用 format 方法那样在字符串末尾使用任何方法或传递任何变量。这是一种更直观的格式化字符串的方式,因为我们不必确保所有的变量都与占位符的顺序相同,也不必确保它们被添加到正确的位置。

因此,为了用 f 字符串完成上述任务,我们将使用以下代码:

first_name = 'John'
last_name = 'Doe'
age = 43sentence = f'{first_name} {last_name} is {age} years old'print(sentence)
# 'John Doe is 43 years old'

与 format 方法类似,我们也可以在 f 字符串中运行方法或函数。例如,如果我们希望名字大写,姓氏小写,我们可以在 f 字符串中使用相应的字符串方法:

first_name = 'John'
last_name = 'Doe'
age = 43sentence = f'{first_name.upper()} {last_name.lower()} is {age} years old'print(sentence)
# 'JOHN doe is 43 years old'

如果你喜欢阅读这样的故事,并想支持我成为一名作家,考虑注册成为一名媒体会员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你用我的 链接 注册,我会赚一小笔佣金。

[## 通过我的推荐链接加入媒体——卢艾·马塔尔卡

阅读卢艾·马塔尔卡的每一个故事(以及媒体上成千上万的其他作家)。您的会员费直接支持…

lmatalka90.medium.com](https://lmatalka90.medium.com/membership)

结论

在本教程中,我们快速了解了在 python 中格式化字符串的方法。我们首先看了 format()方法,然后看了更优雅和直观的 f 字符串。然后我们看到了如何在 f 字符串中使用方法或函数。

一级方程式大奖赛分析

原文:https://towardsdatascience.com/formula-1-grand-prix-analysis-d05d73b1e79c?source=collection_archive---------15-----------------------

一级方程式数据集的数据分析(1950-2017 年)

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

来源:|驱动|工作室代理

从我还是个孩子的时候起,ormula 1 就一直是我最喜欢的运动。极高的精确度、高准确度和优秀的团队是一个团队参与并赢得大奖赛的关键要素。当任何人决定独自行动时,团队要么失去位置,要么直接退出竞争。所有主要车队,如法拉利、迈凯轮、红牛、雷诺和许多其他车队都在争夺世界冠军。作为数据科学爱好者和 Formula1 的超级粉丝,我和 Vineet Viswakumar 决定分析我们从 Kaggle 获取的 Formula1 数据集,该数据集为我们提供了开放数据集,为我们提供了许多数据属性,如 Formula1 车手、比赛、圈速、赛季数据、进站状态和其他相关属性。

资料来源: GIPHY

TL;我们决定用各种可视化工具分析这个数据集,比如 Tableau、plotly、matplotlib、seaborn 和其他各种工具。事实证明,仪表板看起来非常有前途,并打开了分析这个巨大平台的潜力,这个平台对数据科学世界开放,可以分析历史和结果,并应用现代技术和方法,如机器学习、强化学习、ARIMA 建模和许多其他技术。

这是初步分析,以 Tableau 交互式仪表盘的形式呈现这个庞大的数据集:

甘特图:

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

线条图

甘特图描述了这一时期(1950 年至 2017 年)大奖赛的历史。这张图表很好地描述了 1950 年至 2017 年期间大奖赛的发生情况。

离散折线图:

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

折线图

线形图描述了一年中从一月到十二月所有大奖赛的分布情况。

符号映射:

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

符号地图

符号地图描绘了分布在世界各地的赛道。这显示了这一魅力事件在世界范围内的传播,其中突出显示的颜色表示赛道的位置。

圆形视图:

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

圆形图表

圆形图用各种颜色描述 F1 车手的国籍。除了是竞争最激烈的运动,这项运动也同样受到不同人群的喜爱。这些是参加大奖赛的车手的不同国籍。

气泡图:

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

泡泡图

气泡图描述了 F1 参赛车手的回合数,其中气泡的大小与各自车手在相应大奖赛中的回合数成正比。

堆积条形图:

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

堆积条形图

描述 F1 大奖赛参赛车手比赛状态的堆积条形图。这包括参加了世界各地组织的各种大奖赛的各个车手的各种状态。

查看分析 GitHub 的完整代码:

[## Gandalf 1819/配方 1

点击此处查看 Tableau 交互式仪表盘上的完整分析…

github.com](https://github.com/gandalf1819/Formula1)

点击此处查看互动画面仪表盘:

[## Tableau 公共

编辑描述

public.tableau.com](https://public.tableau.com/profile/chinmaynw#!/vizhome/Formula1Analysis/Sheet1)

我们将添加进一步的分析和更直观的图表来显示这一时期的趋势,以丰富结果并利用数据科学界的各种工具和方法获得有意义的见解!欢迎对改进分析提出任何建议或改进,我们希望听到您对这一主题的想法。虽然这仍然是一项由热爱运动动力和能量的选定爱好者追随的运动,但我们建议每个人都尝试一下!

正如 Formula1 的标语所说:“工程精神错乱!—从技术角度来看,现在是我们遵循相同思维模式的时候了!

一级方程式仪表盘:

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

一级方程式大奖赛仪表板

来源:吉菲

参考资料:

[1]https://www.kaggle.com/cjgdev/formula-1-race-data-19502017

一级方程式赛车预测

原文:https://towardsdatascience.com/formula-1-race-predictor-5d4bfae887da?source=collection_archive---------6-----------------------

预测下一届 F1 大奖赛冠军的机器学习方法

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

Unsplash 提供

当我还是个孩子的时候,我大部分时间都和我的祖父母在一起。我的祖父是一个超级 F1 迷,所以每当大奖赛开始时,我们都会一起坐在沙发上,对着电视欢呼尖叫,直到比赛结束。

多年后,我仍然对这项令人难以置信的运动充满热情,所以我认为预测某个车手赢得大奖赛的可能性并将其与博彩公司的赔率进行比较会很有趣。该项目将分为三个部分:

  • 数据收集
  • 数据分析
  • ML 建模

1。数据收集

在第一部分中,我将解释我是如何收集所有的数据以及数据背后的决策过程。

数据帧 _1:比赛

对于我的数据挖掘,我找到了两个很好的来源:Ergast F1 数据库和官方的一级方程式网站;它们基本上有相同的数据,但我使用了两者以获得更高的准确性和完整性。

我的第一个 dataframe 包含了从 1950 年到 2019 年所有锦标赛和比赛的信息,包括它们的位置和维基百科页面的链接。

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

数据帧 _2:结果

对于我的第二个数据帧,我遍历了每一年和每一轮的比赛文件,以查询 Ergast API 并获得关于所有车手成绩的信息。我包括了一些特征,如每位车手的发车位置和完赛位置,他们的车队,以及其他不太相关的变量,如出生日期、国籍和完赛状态,我将在后面探讨这些特征,以检查车手的年龄和他们的表现之间是否存在相关性,在他们的祖国比赛是否会有任何心理影响,或者一些车手是否比其他人更容易发生车祸。

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

数据帧 _3:驾驶员排名

在锦标赛中,积分是根据车手和车队完成比赛的位置来决定的。只有前 10 名车手获得积分,获胜者将获得 25 分。 Ergast API 提供冠军赛中每个车手和车队的积分、获胜次数和名次。因为积分是在比赛后授予的,所以我必须创建一个查找函数来转移同一锦标赛中以前比赛的积分。

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

DataFrame_4:构造函数排名

车队总冠军是在 1958 年首次颁发的,所以没有那一年之前的数据。数据挖掘过程与车手积分榜相同,最终在比赛前应用相同的查找功能来获取数据。

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

DataFrame_5:合格

获得合格时间数据是最棘手的部分,主要是因为 Ergast 数据存储库中的数据有一些漏洞,也因为合格规则在这些年里变化很大。自 2006 年以来,排位赛在周六下午举行,采用三阶段“淘汰赛”制度,赛车试图创造自己的最快圈速。过去,资格认证只包括一次或两次会议,导致我的数据框中缺少数据。我决定只考虑每位车手的最佳排位赛时间,不管那一年举行了多少场排位赛。最佳排位赛时间反映在发车位置上,所以我稍后会计算第一辆符合条件的赛车和其他赛车之间的累计时间差异,希望这可以让我知道一辆赛车比其他赛车快多少。

由于 Ergast API 有一些缺失的数据,我不得不使用 BeautifulSoup 抓取官方 F1 网站并为每条赛道添加在发车区页面中找到的表格。

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

DataFrame_6:天气

f1 中的天气对轮胎的选择、车手的表现以及车队的整体策略都有着重要的影响。我决定遍历 races_df 中附加的每个比赛的维基百科链接,并抓取天气预报。由于 wikipedia 页面没有一致的 html 结构,我需要查看一些不同的表,即使在这一点上,我仍然有许多丢失的值。但是,我注意到我可以在不同语言的相应页面中找到剩余的信息。然后,我使用 selenium 点击每个链接的意大利语页面,并添加缺失的天气数据。最终,我创建了一本字典来对天气预报进行分类,并绘制出我的结果。

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

2.数据分析

第一届世界车手锦标赛于 1950 年在英国银石赛道举行,只有 7 场比赛。几年来,每个赛季的大奖赛次数各不相同,最近几个赛季平均有 19 场比赛。比赛的地点也随着时间的推移而变化,这取决于赛道的适用性和其他财务原因。目前,只有意大利和英国大奖赛是自 1950 年以来唯一没有错过一个赛季的赛事。

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

历年来最受欢迎的电路

渐渐地,越来越多的非欧洲赛道被添加到 F1 锦标赛的合适主办城市名单中。这张地图显示了自赛季开始以来举行的所有大奖赛的地点。

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

自 1950 年以来的大奖赛地点

杆位有多重要?

在资格赛阶段,车手们试图在赛道上创造自己的最快时间,发车位置由车手的最佳单圈成绩决定,最快的是杆位。在杆位起步在超车更加困难的赛道上是至关重要的,除此之外,还有一个优势是可以在前方几米的正常赛道上起步,这条赛道通常更干净,抓地力更强。下图显示了在一些最受欢迎的赛道上以杆位起跑和赢得比赛之间的关系。

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

P1-Q1 相关

赛车在你的祖国有什么影响?

在你的祖国比赛的优势可以归因于支持者对车手的心理影响,以及在熟悉的情况下在家附近驾驶。条形图显示了这些年来登上领奖台的一些车手的国籍,以及他们在所有赛道比赛中获胜的百分比。尽管没有显示出明显的差异,但我们可以注意到,甚至心理因素也在赢得比赛的可能性中发挥了作用。

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

按国籍划分的获奖者

最危险的电路

近年来,一些电路布局已经过重新设计,以满足更严格的安全要求。目前,大多数赛道都是专门为比赛建造的,以避免长而快的直道或危险的弯道。然而,一些比赛仍然在街道赛道上举行,如摩纳哥大奖赛,尽管不符合最新的严格措施,但仍主要因其名气和历史而被使用。下面的树形图按照事故或碰撞的数量显示了一些最受欢迎的赛道。

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

事故最多的危险线路

哪些车队出现了更多的汽车故障?

条形图显示了在过去几个赛季中参加比赛的车队在这些年中经历了最多的汽车问题,包括发动机故障、刹车、悬挂或传动系统问题。

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

团队见证的汽车问题比率

谁更容易撞车?

一级方程式赛车的最高时速可达 375 公里(233 英里/小时),因此撞车事故最终会终止车手的比赛。下面的图表显示了过去两个赛季中参加比赛的一些车手的撞车率。

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

2018 年至 2019 年驾驶员的车祸率

从快 40 岁的人到青少年明星

在世界锦标赛的最初几年,大多数领先的车手都在 40 多岁:尼诺·法里纳在 43 岁时赢得了第一个世界冠军,而 Luigi Fagioli 在 1952 年创造了 F1 历史上年龄最大的冠军纪录,当时他 53 岁,在未来几年里不太可能被超越。然而,他们被新一代取代只是时间问题。从 20 世纪 60 年代到 1993 年,平均年龄约为 32 岁,而在最近几个赛季,只有少数车手年龄超过 30 岁。

下面的散点图显示了第一个赛季获胜车手的年龄,显示了一条向下倾斜的趋势线。

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

获胜车手的年龄

3.机器学习建模

这最后一节将讨论以下主题:我用来评估最佳模型的指标,合并数据的过程,以及最终使用神经网络的机器学习建模

成功指标

  • 精准评分—2019 赛季正确预测赢家的百分比
  • 赔率对比 —我的模型能战胜赔率吗?

数据准备

收集完所有数据后,我最终得到了六个不同的数据帧,我必须使用公共键将它们合并在一起。我的最终数据框架包括从 1983 年到 2019 年的比赛、结果、天气、车手和车队排名以及排位赛时间的信息。

我还计算了车手的年龄和排位赛时间的累计差异,这样我就可以知道每场比赛中第一辆赛车比其他赛车快多少。最后,我将赛道、国籍和车队变量虚拟化,去掉那些不太重要的变量。

回归还是分类问题?

由于我想预测 2019 年每场比赛的第一名,所以我可以将目标变量视为回归或分类。

当评估一个回归的精度分数时,我将我的预测结果按升序排序,并将最低值映射为比赛的获胜者。最终,我计算实际值和预测值(映射 1 和 0)之间的精度分数,并在 2019 年的每场比赛中重复,直到我获得该赛季正确预测的比赛的百分比。

这是 2019 年任何一场比赛的评分函数中的 prediction_df 的样子。实际领奖台映射为 0 和 1(获胜者),排序后的预测结果也是如此。在这种情况下,模型错误地预测 Bottas 是比赛的获胜者,因此模型的得分等于 0。

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

分类问题中,目标在建模之前被映射为 0 和 1(赢家),因此,当我查看预测值时,根据预测的概率,我可能有多个赢家或根本没有赢家。因为我的算法不够智能,无法理解每场比赛我只需要一个获胜者,所以我创建了一个不同的分类得分函数,对每位车手赢得比赛的概率进行排名。我将概率从最高到最低排序,并将概率最高的车手作为比赛的获胜者。

在这种情况下,即使马克斯·维斯塔潘只有 0.35 的获胜概率,因为这是那场比赛中获胜的最高概率,该函数也会正确地将他映射为获胜者。

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

ML 建模

由于我的自定义评分功能需要在评估之前对模型进行拟合,所以我必须对不同的模型进行手动网格搜索,最终将分数和参数添加到字典中。

我尝试使用逻辑和线性回归、随机森林、支持向量机和神经网络来解决回归和分类问题。

训练-测试分割:训练集包含从 1983 年到 2018 年(含)的所有比赛。测试集由 2019 赛季的所有 21 场比赛组成。

回归

分类

调查的结果

在花了几天时间运行所有的网格搜索后,神经网络和 SVM 的分类似乎返回了最高分,正确预测了 2019 年 62%的比赛的获胜者,这对应于 13/21 的比赛。

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

ML 模型比较

我还使用 2018 年和 2017 年两季作为测试集,以检查模型是否仍然表现良好。神经网络在这两年都比 SVM 分类器返回了更高的分数,所以我决定选择具有以下参数的神经网络分类器。

  • hidden _ layer _ size =(75,25,50,10)
  • 激活=身份
  • 求解器= lbfgs
  • 阿尔法= 0.01623776739188721

考虑到特征重要性根据线性回归,在预测获胜者时,网格位置似乎起着最重要的作用,还有其他特征,如比赛前的车队或积分。

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

根据线性回归的特征重要性

查看过去几年的结果,我注意到算法总是错误地预测一些赛道的获胜者,可能是因为发生了更多的事故或超载。最难预测的赛道是阿尔伯特公园、巴库、斯帕、蒙扎和霍根海姆环。

算法能战胜几率吗?

在将所有我预测的获胜者聚集在一起后,我决定查看由 SkySport 发布的 2019 赛季比赛的赔率,并发现如果我在这些比赛上下注,我会赢得的奖励。

下表显示了根据 SkySport 在“赔率最大”下最有可能赢得比赛的车手,而“车手预测”是由神经网络预测的获胜者。红色的驱动程序名称表示错误的预测,因此与“实际”驱动程序列不同。以绿色突出显示的行表明算法预测的驱动因素结果是正确的,与赔率预测相反;然而,红色的突出显示表明,我可能应该在赔率最大的赔率上下赌注。最后两列显示了赔率奖励和利润,如果我一直在每场比赛中投资 100€,最终利润为 4,255.00€。

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

赔率比较

结束想法

我希望你喜欢我的帖子!欢迎在下面评论我可能错过的任何东西。所有代码都可以在我的 GitHub 中找到:

[## veronicanigro/Formula_1

在 GitHub 上创建一个帐户,为 veronicanigro/Formula_1 开发做出贡献。

github.com](https://github.com/veronicanigro/Formula_1)

领英:【https://www.linkedin.com/in/veronica-nigro/

公式一:提取和分析历史结果

原文:https://towardsdatascience.com/formula-one-extracting-and-analysing-historical-results-19c950cda1d1?source=collection_archive---------18-----------------------

《美汤熊猫》F1 赛季的网页抓取与数据分析

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

资料来源:Unsplash.com

数据无处不在

作为一名数据科学家,有时你手头没有你需要的数据,或者没有现成的渠道向你提供你需要的数据。在其他时候,您可能只是对探索一个没有全新数据集的领域感兴趣。幸运的是,互联网上有一个星系间的数据海洋(如果你还不知道的话),几乎可以分析任何主题,Python 拥有为你选择的项目收集和格式化数据所需的所有工具。

对我来说,我将在这里探索的主题,以及在未来的一些帖子中,是一级方程式赛车的历史成绩。对于外行人来说,F1 是世界上的精英赛车运动,在这里,像埃尔顿·赛纳和迈克尔·舒马赫这样的传奇人物在车轮战中与他们时速 200 英里的骏马搏斗!

对我来说幸运的是,F1 官方网站包含了从 1950 年至今 F1 锦标赛的存档数据。比赛结果,排位赛时间,冠军位置和许多其他结果都在档案中(见下文),很容易浏览网站找到你感兴趣的任何信息。

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

来源:formula1.com 网页截图

在我让你对所有这些 F1 的东西兴奋起来之前,让我们用 Python 从档案中提取一些信息,并用熊猫来显示它。

美味的汤

B eautiful Soup 是一个很棒的包,用于将组成网页的 HTML 数据解析成更可读和可用的格式。我使用 Beautiful Soup、urllib 和 Pandas 从 F1 档案中抓取数据,并以数据帧的形式呈现出来。如果我们追溯到 1950 年左右,一些历史数据会有点稀疏,所以现在我打算从 1990 年开始,也就是说,从现代 F1 和综合数据开始。

从一些简单的事情开始,我决定从 1990 年开始收集所有的冠军排名并绘制结果。首先我用 urllib.request.urlopen() 打开了包含 1990 年车手总冠军成绩的网页(可以导航到相关网页复制链接)。然后我使用带有’ table '参数的 find_all() 方法来搜索网页中包含的表格(这里只有一个)。最后,我使用 Pandas 方法 read_html() 将数据转换成 DataFrame。这是一个非常有用的方法,任何人都可以从网页上抓取数据进行后续分析,因为它使立即开始使用 Pandas 功能变得简单。

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

来源:为本帖制作的情节(恰兰·库尼)

好了,我成功地从一个网站上提取了一些数据,虽然我们可以看到埃尔顿·赛纳击败阿兰·普罗斯特获得了 1990 年 F1 世界冠军,但这里没有什么特别有趣的东西!

我认为从每场比赛中提取结果并建立自己的冠军表来显示所有结果,然后绘制车手在一年中的进步,这可能会更有趣,而不是像上面那样获取最终的冠军排名。在此之前,我想看看每场比赛的数据是如何存储在网页上的,所以我导航到 20 世纪 90 年代比赛结果页面这里

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

来源:formula1.com 网页截图

您可以从上面的截图中看到,1990 年的第一场比赛是在美国,我用这场比赛来查看比赛结果格式,使用了与上一个例子类似的代码。

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

得到的数据帧包含一些有用的列、一些不太有用的列以及一些不可读的列。为了构建我自己的冠军表,我现在只需要“Driver”、“Car”、“No”和“PTS”列。与其手动点击网页来提取数据或找到所有比赛结果的链接,不如使用网络爬虫来自动完成这一过程。

搜索链接

为了做到这一点,我必须搜索 1990 年比赛结果网页(上面截图中的页面)中的所有链接,并根据特定条件仅提取我想要保留的链接。我想对比赛 URL 列表应用一些条件,因为我不想要网页中经常包含的无关信息或重复链接。为了找出使用哪些条件,我查看了网页的源文件(ctrl + u ),发现每个比赛结果链接都包含年份和字符串“race-result”——红色箭头指向下面的这些内容。这将允许我反复搜索链接,只保留那些符合这些条件的链接。

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

来源:formula1.com 网页截图

为了提取所有比赛结果,我创建了一个函数,它将相关年份作为参数,并返回一个 URL 列表。当 URL 满足条件(“1990”和“race-result”)并且还没有包含在列表中时,它们被添加到列表中。注意:“a”标签——如 soup.find_all(‘a’) —是链接,告诉浏览器呈现另一个网页的链接。

它返回一个 URL 列表,每个 URL 对应一组比赛结果。然后,我可以使用这个列表将每场比赛的结果反复加载到一个数据帧中,并将本赛季的所有结果合并到一个包含所有分类车手和所有积分的数据帧中。

在第一次迭代中,在将比赛结果加载到数据帧中之后,我创建了一个新的数据帧来存储整个赛季的结果,其中包含第一场比赛中分类的车手和车号( season_results_df = pd)。DataFrame(df[[‘驾驶员’,‘汽车’]],columns=[‘驾驶员’,‘汽车’],index=df.index) 。对于随后的每一次迭代,如果以前没有分类,我会在数据帧中添加新的驱动因素(下面的第 25-26 行)。然后从每场比赛中提取每位车手的积分,并添加到 season_results_df 数据帧中(见下文第 28-30 行)。最后,我对数据帧进行了格式化,按驱动程序编号(“否”)排序,用零填充任何 NAN 值,并通过应用 lambda 和 map 函数将汽车制造商的名称重新格式化为三个字母的版本。

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

如您所见,它返回了一个数据帧,其中包含了每位车手在每场比赛中的得分。请注意,数据帧目前是根据车手编号排序的(普罗斯特作为卫冕世界冠军排名第一)。我本可以增加一个“总计”栏,把每个车手在整个赛季的积分加起来,但那会给我提供和开始时差不多的信息。

我n 取而代之,我决定创建一个数据框架,使用熊猫中可用的 cumsum() 方法跟踪每个车手在赛季中的累积积分。我还重新排列了数据框,显示了从塞纳开始的最终冠军位置。我用累积成绩绘制自己的冠军表的原因之一是为了更容易看到竞争是否在整个赛季中波动。为了整理图形图例,我将驾驶员姓名转换为他们姓氏的前三个字母。

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

现在,我可以看到整个赛季积分的积累,以及今年澳大利亚站最后一场比赛的结果,显示出最终的积分榜。然而,从数据图表中很难得到赛季进展的总体感觉,所以我也绘制了数据。

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

来源:为本帖制作的情节(恰兰·库尼)

现在,你不用太费力就可以看出,在 1990 年,只有两位车手争夺冠军(塞纳和普罗斯特),而普罗斯特确实在赛季中期领先塞纳,之后领先优势再次扩大。从这一点上也可以清楚地看到,总得分由相对较少的车手决定,在 36 名车手中,只有 9 名车手得分超过 10 分。从累积图中我还注意到了让·阿莱西(金牌)的形态。他在赛季开始时状态很好,在前 4 场比赛中获得了 13 分,但在赛季余下的比赛中表现平平。

你可能已经注意到,与我在上面绘制的最终冠军排名相比,一些车手的最终分数有所不同。这是我没有预料到的事情,所以我不得不做一些调查,看看到底发生了什么。原来,1990 年 F1 采用了“最佳 1 1 名”的规则,即根据车手在 16 场比赛中的最佳 11 名成绩的累积来确定冠军排名。由于这个原因,我决定使用这个公式来查看数据,并创建了下面的函数来计算基于最好的 11 个的累积分数。

best_11_cumsum() 函数只是计算前 11 场比赛的累积分数。从第 12 场比赛开始,它会检查该场比赛的得分是否大于前 11 场最佳得分的最小值。如果评估结果为真,则删除之前的最小值,添加新的分数,并计算修订后的累积分数。

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

你现在可以看到,积分分数与上面的最终冠军排名相匹配,从下面的图中可以看出,“最佳 11”评分系统的整体效果是最小的。唯一真正的影响之一是,它使小尼尔森·皮奎特的最终分数减少了一分,这使他从第三名直接与加赫特·贝加并列。

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

形式是短暂的,但它仍然可以被分析。我想看看整个赛季的表现波动,特别是塞纳和普罗斯特争夺冠军的表现。绘制滚动平均值是跟踪数据点的基本方法,我决定使用 3 场比赛的滚动平均值来观察车手的表现如何不同。

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

来源:为本帖制作的情节(恰兰·库尼)

这个情节乍一看有点嘈杂,但它确实表明了两个冠军争夺者之间的势头有一些相当大的转变。你可以看到普罗斯特的状态达到顶峰,塞纳的状态达到最低点,反之亦然。普罗斯特的状态达到顶峰,随后他取得了冠军的领先地位,这似乎表明他势不可挡。当然,这并没有持续多久,普罗斯特的死亡恰好与塞纳的状态明显复苏相吻合,最终锁定了冠军。

你可能已经从数据图表中注意到,1990 年大奖赛冠军获得了 9 个积分。当我在 90 年代后期开始观看 F1 比赛时,车手赢得了 10 分,现在是 25 分(尽管积分结构有所改变——我猜这是我的专业知识)。我经常想知道这些分数差异是否真的改变了谁在冠军争夺战中胜出。我在 1990 年用一个简单的 if 语句做了一个快速测试: if pts ==9: pts = 10 。无论如何,这不是一个问题,因为那一年塞纳会得到 6 分,普罗斯特 5 分,一切都会保持不变。

接下来去哪里?

W 我在这里展示的是一个相当基本的网络抓取介绍和一个 F1 赛季的一些探索性数据分析,但还有更多的事情可以做。我可以看看车手和车队的形式是如何随着赛季甚至几十年的变化而变化的。我可以试着从排位赛时间中获取一些信息,来判断不同时代谁是最快的车手。我可以将不同的积分系统映射到不同的赛季,看看它们实际上是如何影响最终结果的,我也许可以看看更长期的影响,比如在不同的时代系列赛的竞争有多激烈。我甚至可以考虑建立一个预测性的机器学习模型,也许可以使用排位赛时间和以前的比赛结果来预测比赛结果。

你甚至可能想自己尝试一下这些东西。

我在这篇文章中使用的所有代码都可以在 Jupyter 笔记本中找到。

数据科学基金会

原文:https://towardsdatascience.com/foundation-for-data-science-81199daf3acf?source=collection_archive---------46-----------------------

入门

获取关于数据的一切的简单解释

数据科学是一个迅速发展的领域,最初是基于统计学。在过去的几十年里,由于数据和计算资源的数量呈指数级增长,以及对更深入理解它的需求,它变得更加广泛。人工智能和机器学习在许多方面都非常接近 DS,但最重要的是,它们的目标是让机器理解和操作数据,基本上使人类目前使用计算机所做的事情更加自动化。

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

弗兰基·查马基Unsplash 上拍摄的照片

我认为将数据科学描述为几乎所有研究和实践领域的共同基础是公平的,这些领域起源于数字计算机的发展,以及大多数依赖事实数据及其分析来取得进展的经验领域。然而,由于 DS 已经发展到不仅仅是统计,而没有完善基础理论,交流思想和在重要项目上合作变得更加困难。在这篇文章中,我想通过以简单的方式定义核心概念来填补空白,并使用它们来描述最常见的数据类型。

什么是数据

—任何信息的任何给定表示。文本、数字、图形、声音或任何其他形式。它来自于测量、成像、挖掘、描述以及许多其他方式。重要的是要了解它是如何收集的,以及该方法的局限性,记住它不是对现实的完整描述。然而,数据是我们可以讨论和分析的一切。

在一个非常基本的层面上,根据我们目前对物理学的理解,所有的数据都可以被分割成某种独立的对象。在许多情况下,连续表示法作为近似值仍然很有用,但是它们也可能被视为抽象或数学对象。有些数据,比如艺术,根本无法用正式语言来描述。

虽然任何数据都可以表示为某种对象,但有时它可以更好地描述为对象之间的关系。这种类型的数据通常包含有关相关对象标识符的信息,通常还附带有连接描述或在它们之间发送信息的编码器/解码器功能。

有时数据来源是随机的,就像掷硬币的结果一样。它通常由一组可能的状态来表示,例如(头像;tails) ,再加上代表我们对系统在观察过程中有多大可能最终处于其中一种状态的信念的数值,比如*(0.5;0.5)* 为公平币。在大多数情况下,由于缺乏知识,概率变量实际上代表了我们的近似值。例如,如果你有足够的数据、施加的力、空气条件和其他细节,你实际上可以准确地预测硬币会落在哪一边。然而,对于本质上看似随机的量子粒子来说,情况似乎并非如此,但我们稍后将回到这一点。

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

爱德华多·苏亚雷斯在 Unsplash 上拍摄的照片

理解概率对于理解存储在数据中的信息通常是如何量化的很重要。想象一下扔一次硬币,不看。为了让您知道结果,其他人必须向您发送的最少数据量是多少?正面/反面、1/0 或其他表示形式。这是背后的基本思想,表示为*,通常用来度量。你至少需要获得 1 比特的信息才能知道结果。例如,在英语中,你需要更多的信息来描述一个单词,因为有数百万个可能的单词和它们的形式,而不仅仅是两种可能的结果。有趣的是,随着句子中每个后续单词的出现,随着概念变得越来越清晰,大多数单词出现的概率越来越接近于零,而剩下的单词越来越少,并且每个后续单词实际上传达的信息越来越少。*

另一个基于熵的重要概念是互信息,记为 I 。简而言之,它是衡量两个数据之间有多少共同信息,或者一个数据告诉我们多少关于另一个数据的信息。在上面的英语句子的例子中,每个单词都和它的邻居有交互信息,平均来说,每个新单词增加的信息都比之前的单词少。此外,这也解释了为什么尽管语言能够构建任意长的序列,但句子很少超过 10-50 个单词。

怎么处理它

通常原始数据太重而没有意义,我们需要对其执行操作来提取有趣的信息。在实践中,我们使用许多不同的转换:排序、过滤、清理、计数、查询、合并、推断、重构、建模、可视化、搜索、映射、近似、压缩、修剪、粗粒度化等等。

所有这些操作的共同点是,如果我们考虑所有输入数据,包括过程中使用的函数,输出将包含相同或更少量的信息。此外,如果我们放弃产生与所提供的输入无关的输出的操作,如数学常数函数,我们将剩下可能实际上帮助我们有意义地将数据转换成其他表示并找到相关信息的操作。由于我们的目标通常是将大量数据简化为可解释的表示,我建议将这种类型的操作称为简化,并表示为 ~ > 。从数学角度来说:

*对于某个数据 A 那一个操作被定义为,A ~>B是有效的 还原if***B = f(A)**其中运算符 f B) > 0

许多这样的操作都有自己的名字,就像上面的例子一样,但并不是每一个都有,即使是有名字的操作,不同类型或不同数据实例之间的实际计算也可能不同。此外,这种符号迫使我们考虑所有用于产生输出的数据,如函数或模型的参数、数据库的内部工作方式、关于这些数字来源的领域的隐式或显式知识,以及许多其他潜在的方面。

约简的例子:( 2 + 2) ~ > 4 、⠀ sin(π) ~ > 0 、⠀“我走了”~ >“我走了”、⠀数据库(查询)~ >结果、⠀模型(输入)~ >输出、⠀(有缺失值的表∪函数来填充它们)~ >(完整的表)、⠀(量子态ψ= ax**

转向实际的数据表示

现在,我们可以回顾一些我们可能会用到的实际案例,从更直观的案例开始,逐渐转向复杂的现实问题。

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

汉娜·赖特在 Unsplash 上的照片

让我们从你现在正在读的东西开始——书面的自然语言。我在上面的例子中提到了一点,但是这种类型的数据非常丰富,由相对较小的字母组成。一些语言实际上有成百上千的基本符号,如埃及象形文字或一些东方书写系统,它们通常在图形上与这些字符的含义相似。除了打字语言之外,还有可能与书面语几乎一对一对应或差异很大的口语变体、手语(通常包含与口语相同的信息,但表达方式非常不同)、盲文和许多其他例子。一种常见的简化方法是摘要,其中一些数据加上语言知识可以简化为一种更短的形式。

有一种语言特别突出,并在全世界范围内被广泛使用,那就是数学。对于我们自己或在计算机的帮助下进行的计算的定义,它是特别正式、简洁和方便的。

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

Alexander SinnUnsplash 上拍摄

数字计算机中的基本数据表示——位和字节 (=8 位)通常用 1 和 0 来表示。布尔值真/假值仅为 1/0,整数直接转换为二进制数字系统,并增加一位表示符号,浮点数是指数和分数的组合,二者相乘产生存储值。字符串可能用 ASCII 或 Unicode 等不同编码表示,但都只是整数和指定字符之间的映射。数组向量张量等通常只是同类型值的集合。根据编程语言和库的不同,这些表示也可能有内置的函数/缩减,或者组合成更复杂的结构。

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

马库斯·斯皮斯克在 Unsplash 上的照片

编程语言中的代码本身就是一个被翻译成机器代码的字符串,是处理器中整数和指定操作之间的映射。这些映射通常被称为指令集架构或只是计算机架构,其中最受欢迎的是大多用于台式机和服务器的 x86,以及大多打包在移动设备中的 ARM。有趣的是,最近 ARM 也进入了笔记本电脑和服务器市场。

将高级代码转换成低级指令的程序,通常被称为编译器解释器,它们本身曾经是直接用这些指令编写的,但现代版本是用旧版本编译的。重要的是要注意,在这个过程中,许多信息,如变量的名称和注释,通常会丢失,而源代码与编译器相结合,被简化为一系列特定的机器指令。

除了上面描述的代码和基本类型,计算机通常还存储其他数据,如文本、表格、图像、声音、视频和许多其他以不同方式编码的形式。所有的数据都按照某种文件系统分割成文件,这样人们就可以浏览并理解它们。这对于数量相对较少、整体结构不太完整的数据非常有效。

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

来自 Pixabay

然而,将数千、数百万甚至数十亿的条目作为文件来处理几乎是不可能的。这就是我们需要数据库的地方。一般来说,数据库是存储数据的表、数据编码器/解码器、可以添加新条目或对现有条目执行不同缩减的查询引擎,以及用于访问控制、迁移、复制和其他目的的大量辅助工具的集合。

数据库之间的区别在于它们对单个对象和它们之间的关系的重视程度。在一个极端,我们有 SQL 数据库,它们实现了结构化查询语言,非常适合具有大量关系的数据,在另一个极端,我们有 NoSQL 数据库,比如键值和文档存储,它们擅长处理大量独立的条目。在中间的某个地方,我们有图形数据库,它将数据表示为对象的节点和关系的边。虽然图形数据库还不是很受欢迎,但我相信它们的灵活性、直观性和更好地表示混乱的真实世界数据的能力最终会使它们至少像 SQL 和 NoSQL 的竞争对手一样受欢迎。

一台计算机可以存储高达数十万亿字节,每秒钟可以执行高达数十万亿次最简单的操作。这听起来可能很多,但这样的性能要归功于成千上万的内核,实际上它需要工作负载的并行化。例如,如果你想得到 sin(x ) ,在你完成平方 x 之前,你不能开始计算 sin() 。但是,如果您需要类似于 (ab) + (cd)* 的东西,您可以在不同的内核上同时执行乘法,然后在其中一个内核上对结果求和。*

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

来自 Pixabay

但是如果你不想建造一台超级计算机来扩大规模,或者你想远程连接计算机,你需要网络。除了硬件之外,您还需要像 TCP 和 HTTP 这样的协议来对传输的数据进行公共表示。有了它,你就可以用数字电脑把各种东西连上互联网,甚至是你的衣服和家具,这种现象通常被称为物联网。

然而,仅仅来回发送原始数据可能会对您的安全造成危险。几十年前,只有政府、银行和少数其他实体需要保护他们的数据,但如今,随着你周围的所有环境都在收集数字数据并受其控制,我们需要加密来确保我们能够控制对这些信息的读取和编辑。粗略地说,加密的工作原理是将数据转换成无法识别的表示形式,同时使用数字密钥保存完整的信息。这些密钥是编码和解码算法工作所需的输入,通过控制谁拥有这些密钥,就可以控制谁拥有访问权。

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

照片由思想目录Unsplash 上拍摄

一个特别有趣的数据结构,基于数据库、互联网和加密的混合物,是 T4 区块链 T5。它背后的基本思想是创建一个数据库,任何人都可以按照一致同意的程序添加新的数据块,并通过加密防止编辑或删除等操作。最受欢迎的应用是加密货币,如比特币和以太坊,但还有更多。然而,它的名字有点误导,因为在实践中很难将所有数据存储在单个链上,并且扩展需要一些分支来处理成千上万的用户。由于现实世界的解决方案已经更接近于类似于“块树”的东西,我相信将核心思想概括为类似于“块图”的东西是有益的,使其更具可扩展性,并适用于更广泛的问题集。

描述某个对象行为的更一般的表示概念被称为模型。它可以像单个变量的线性函数一样简单,就像在固定速度参数 v 和给定时间 t : d=vt ,下行驶的总距离 d 一样,也可以像具有数十亿个参数的人工神经网络一样复杂,用于处理任意长系列的输入。有些数据模型定义了它们在数据库中应该如何表示,有些模型描述了事物应该如何分类、估值、生成、决策,还有许多其他类型的模型。*

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

来自 Pixabay

机器学习模型,如回归、决策树或神经网络,特别有用,因为它们不需要人类对我们想要建模的东西做出精确的说明,而是可以从提供的例子中“学习”它的表示。通过调整参数,以提高它们模拟给定数据的能力,模型可以自动完成任何数据处理任务,有时它们在重要问题上胜过人类。然而,它们的有效性直接取决于这些例子包含多少关于感兴趣的对象的信息,以及它们的架构与对象的内部工作有多相似。

另一类重要的模型是物理模型。它们是对我们所拥有的真实世界最准确和详细的描述。其中,你可以找到像水、电和计算机如何工作、引力和行星如何围绕恒星形成这样的常见事物的模型,一直到暗物质、暗能量和其他几乎不为人知的事物。

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

来自 Pixabay

其中最基本和被广泛接受的是量子物理模型。它们大多描述了我们观察到的最小粒子的行为,但这些数据也与我们对黑洞的理解以及宇宙如何发展成我们所看到的样子有着深刻的联系。还有一些模型寻求更小的基本对象,如弦理论,以及许多更高层次的抽象概念,如电路或内燃机。

量子粒子有很多令人费解的性质,但其中最违反直觉的是叠加纠缠。第一个意思是一个粒子可以处于不同状态的混合状态,根据某种概率分布,在测量后会在其中一种状态下被看到。第二个意思是,你可以把多个粒子联系起来,把它们的状态联系起来,这种联系不会因为距离而中断,并且有即时的效果。这种怪异的行为是有问题的,因为在经典的数字计算机上很难建模和理解,但它导致了利用它们的量子计算机的发明。

量子计算机中数据的基本单位——量子比特,代表一个量子比特。目前,我们知道这种计算机可以比经典计算机更快地执行某些操作,但我们没有一个理论来描述所有这些操作,这些计算机仍然非常罕见和昂贵。另一个重要区别的例子是:对于经典数据,您总是可以在副本上应用缩减,并在保持原始数据完整的情况下获得结果,但它并不总是适用于量子数据。

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

来自 Pixabay

所有可观测的物质都是由量子粒子构成的,包括生命体。虽然从物理和化学的角度来看,它的大部分相对简单,但有些部分非常复杂,即使经过几十年的研究也很难理解。DNA 可能是最有趣的生化结构,因为几乎所有关于单个细胞如何行为和构建像我们这样的大型生物的数据都存储在其中。人们通常认为 DNA 只是一长串编码一些蛋白质的静态数据,但它也对环境的变化做出动态反应,这些机制背后的所有复杂性和可能性仍然知之甚少。此外,它被许多其他生化机械以许多方式与之相互作用,在这种规模下,甚至一些量子效应也是完全可以想象的。

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

Robina WeermeijerUnsplash 上拍摄的照片

在我们周围和体内,有数不清的细菌种类和细胞类型。但是有一种特别的类型因其数据处理能力而特别有趣——神经元*。它们可以相互之间以及与数米之外的其他细胞形成数千个连接,以电和化学形式接收、携带和发送信号。身体中神经元最集中的部分——大脑,有着极其复杂和相互关联的结构,我们仍然几乎不了解。大脑的一个大问题是,我们不知道信号中有多少是不必要的噪音,有多少是有意随机的。我并不认为这种规模的量子效应,但强化学习的探索-开发困境以及机器学习模型训练中噪声的有效性表明,一些随机性可能是一种进化的特征,而不是一个问题。***

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

来自 Pixabay

神经元和一堆其他细胞一起可以构成一个人类,而一堆人类可以构成一个社会*。在这些尺度下,量子效应不再是问题,但收集数据和对人类进行操作会有很多伦理和其他方面的问题。此外,由于互联网和数字设备,与几千公里外的人联系变得容易多了。然而,这些设备也可以用来收集我们可能不想分享的关于我们生活的各种信息,尤其是当我们不知道谁会看到这些信息时。总的来说,理解社会和政治从来没有像今天这样重要,因为我们可以跨越国界和全球团结起来,而且还因为我们有足够的核武器来摧毁所有文明,杀死几乎所有人,使整个地球无法居住。***

总之,不可能对数据的所有类型、表示和操作进行计数。物理学家每天都在发现关于宇宙的新事实,生物学家——新的生命物种,工程师——新的工具,心理学家——我们头脑中的新维度,其他人以各种形式收集新知识。然而,在计算机的帮助下,我们可以在这些成堆的数据中找到新的见解,这些数据反过来可以用来给我们生活的许多方面带来积极的变化。

基础统计术语解码

原文:https://towardsdatascience.com/foundation-statistics-terms-decoded-f1def3721c1e?source=collection_archive---------65-----------------------

统计学初学者!请继续阅读,了解一些重要的基本术语及其含义。

用 VS 风格解释,先左后右!

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

相信我!你可以!

任何决定开始精通统计学习方法(SLM)的漫长而艰难的旅程的人都面临着对一些非常基本的术语的公开的技术解释。这篇文章旨在通过用简单的英语解释一些基础术语来揭穿统计学很难的流行神话。

举例来说,如果我们想根据不同的参数,如阅读等级(D)、每句话字数(D)、阅读时间(D)等,来确定一个中型故事(I)的成功与否。(一中文末参考)

  1. 因变量(响应变量)与独立变量(预测变量)

故事成功的概率是因变量或反应,用于预测的变量(标记为 D)是自变量或预测因子。

2。预测 VS 推理方法

如果我想使用一种只关注最佳输出预测的方法,而不考虑因变量和自变量之间的关系,我们将选择一种预测方法(一般来说,像决策树一样复杂且不易解释)。但是,如果目标也是理解反应和预测之间关系的本质,那么我们将使用一种推断方法(像线性回归一样容易理解)。

3。参数与非参数方法

参数方法是一种两步方法。首先,我们假设自变量的性质和形状,假设它本质上是线性的。

成功概率= a+ b(阅读成绩水平)+ c(每句话字数)+………+n(读取时间)

第二步是使用 OLS(普通最小二乘法)等技术预测系数(a 到 n)。这种基于简化模型的方法本质上是参数化的。

然而,在非参数方法中,我们不对自变量的函数形式做任何明确的假设。这种方法比参数方法有更大的优势,因为通过避免任何假设,它们有可能精确地拟合更大范围的独立变量的可能形状。

4。监督与非监督学习方法

我们正在讨论的问题是,一个媒体故事的成功与上述预测因素之间的关系,这有助于我们确定这个故事是否成功。为了开发这个模型,我们必须访问适当的训练数据,其中我们有一堆已经发布的故事的成功结果来训练模型,然后该模型将预测未来故事的成功。这是一种监督学习方法。

然而,如果我们遇到一个问题,比如说,确定特朗普是否会喜欢他遇到的下一个国家元首(他从未见过)。现在,我们没有任何可用的过去的数据,所以我们不能训练一个模型。在这里,我们将部署一个能够自我学习的模型,并在每次新的会议中变得智能。随着时间的推移,这类模型需要定期反馈才能成为可靠的预测器。这是一种无监督的学习方法。

最后但绝对不是最不重要的,

5。回归与分类

变量可以定性或定量(也称为分类)。定量变量采用数值,如每句话字数、阅读文章的时间等。然而,分类变量在 K 个不同的类或类别中取值,如对像标题中的句子格这样的变量取 Yes 和 No。

简单地说,我们把有定量反应的问题称为回归问题,而那些涉及分类反应的问题通常称为分类问题。

我参考了下面的媒介故事来了解媒介故事成功的预测因素。这是一本好书。

[## 是什么让一篇文章在媒介上流行?我们分析了 10,000 多个数据点来寻找答案

在过去的几年里,Medium 已经迅速成为我最喜欢的出版和阅读的地方。这是一个民主的天堂…

medium.com](https://medium.com/the-mission/after-10-000-data-points-we-figured-out-how-to-write-a-perfect-medium-post-58c41c314f6a)

感谢您的阅读:)观看这个空间,了解更多关于统计、数据分析和机器学习的信息!

气候变化统计分析的基础——概率分布

原文:https://towardsdatascience.com/foundations-for-the-statistical-analysis-of-climate-change-probability-distributions-158845c6feaf?source=collection_archive---------32-----------------------

数据分布的描述统计

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

威廉·博森在 Unsplash 上的照片

为了更好地理解本文的数据集和其他基本统计数据,可以考虑在这里阅读该系列的第一部分: 气候变化统计分析的基础

我在之前的一篇文章中简要地提到了核密度估计(kde)的主题。在这里,我将扩展 KDEs 并介绍概率密度函数、概率质量函数和累积分布函数。我将再次使用 Python 编程语言进行演示。

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

让我们再快速看一下我们的数据。日期列中的值对应于年和月,而 Monthly_Anom 列中的值是每月的温度异常。在这里阅读更多关于为什么全球气温显示为异常的信息。

连续分布

下面是我们数据的分布图。异常范围从低于全球平均值约 1.5 度到高于全球平均值 1 度,平均值为-0.093。

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

持续分发— PDF

我们的数据分布是一个连续分布,因为温度是一个连续变量(身高、体重和距离也是)。我们可以观测到 0.1 度,0.008 度,0.98600093828209 度等等,但是连续变量的精确值只能估计到给定的精度。

概率密度函数PDF ,是一种估计数据集中特定范围内随机值出现概率的参数方法。因为数值不可能精确,你要问自己*变量 X 落在 0.3 到 0.4 之间的概率是多少?*通过问这个问题,你在寻找一个值出现的相对可能性,而不是绝对可能性,对于连续变量,绝对可能性是 0,因为它们是无限的。要计算特定范围内给定值的概率,您需要计算曲线下的面积,即 AUC。AUC 将在下一篇文章中讨论。

为了可视化连续变量的分布,您可以使用 Seaborn 库的 distplot() 来显示直方图(条形)和内核密度估计(红线),并可以选择绘制概率密度函数(黑线)。

kde 是一种估计随机变量中某个值的概率的非参数方法。KDEs 在分布中的每个单独点绘制一条曲线,然后作为平滑密度估计添加到分布图中,从而得到平滑线。当分布是正态或接近正态时,使用的将是高斯核,尽管如果分布不是正态的,也将使用其他核。

直方图将数据分成多个条块,并对每个条块内的每个数据点进行计数。Seaborn 的 distplot()直观地显示了数据中的条柱数量,尽管您可以指定您希望直方图中的条柱有多粗糙。您可以通过归一化计数来确定落入每个条柱中的点的百分比。请记住,y 轴反映的是频率,KDE 下的总概率等于 1。根据已指定的箱数,可视化可能会发生变化,解释可能会有所不同。

在上面的图中,PDF 显示为黑线。首先,我们假设我们的数据在可视化直方图后是正常的,尽管分布可能是双峰的、指数的等等,所以你的 PDF 可能不是正常的。正态分布的概率密度函数是通过取变量的两个参数,平均值和标准差来计算的。一旦拟合到图,您就可以评估 PDF 估计随机变量的概率有多好。对于我们的数据,PDF 做得相当好,尽管在 0.6 标记附近有一个轻微的概率凸起和一个轻微的负偏度,这在 PDF 中没有考虑。

离散分布

当变量是分类的,并且值可以假设为一个有限的、可数的数时,就有了一个**离散分布。**任何一个结果的概率都等于 1。例如,在标准骰子(未加权)上掷出任意数字的概率为 1/6,总概率等于 1。

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

离散分布— PMF

一个概率质量函数,或 PMF ,显示一个离散随机变量的概率。每个值的概率之和为 1。分类变量可以用 PMF 来描述,因为分布中有有限数量的无序值。

这张图表来自 2015 年的排放数据集,展示了每个行业中工厂对这份特定温室气体报告的贡献百分比。y 轴显示每个行业中工厂的频率,以样本的分数表示。

累积分布函数

正如我们之前在连续变量和 PDF 中看到的,给定月份的温度异常为精确值的概率为 0,y 轴展示了值的密度,但没有展示实际的概率。

一个累积分布函数,或 CDF ,计算变量 X 小于或等于值 X 的概率,给定月份全球气温异常为 0 度或以下的概率是多少?

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

从名称推断,CDF 给出了 PDF 下概率的累积和。对于我们的例子,小于或等于 0 度的概率的累积和看起来大约是 0.75。我们可以有把握地假设,任何给定月份的温度异常在大约 75%的时间里都是 0 度或更低。

了解数据的分布和描述性统计数据至关重要,尤其是在研究全球气候变化时。了解变量中某个值的可能性有多大的基础知识,将有助于您识别某些趋势何时是预期的或远离基础,更容易捕捉错误或意识到意外何时发生。

赶上下面的第一卷,并留意未来关于更多描述性统计、预测、机器学习等的文章!

[## 气候变化统计分析的基础

量化全球变暖的环境和经济影响的基础

towardsdatascience.com](/climate-change-analysis-series-volume-1-48708a938fcc)

概率基础

原文:https://towardsdatascience.com/foundations-of-probability-7a792e7eea5?source=collection_archive---------19-----------------------

Python 中的适马代数、测度论和幂集

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

安德里亚·皮亚卡迪奥在像素上拍摄的照片

西格玛代数被认为是概率论公理基础的一部分。卡塞拉和伯杰的统计推断简要介绍了这个话题。对西格玛代数的需求源于与定义概率相关的技术困难。那么 sigma 代数到底是什么?

什么是适马代数?

简单来说, X 上的 sigma 是包括空集和 X 本身在内的 X 子集的集合。换句话说,sigma 是 X 的幂集。西格玛代数也称为 Borel 场。其正式定义如下:

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

第一个性质表明空集总是在 sigma 代数中。此外,由于空集的补集也在样本空间 S 中,第一和第二个陈述暗示样本空间总是在 Borel 域中(或 sigma 代数的一部分)。最后两个语句是可数交集和并集的条件。

与测度论有什么联系?

Borel 空间是测度论的一个基本对象。它由一个集合及其对应的 sigma 代数组成。具体来说:

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

让我们看一个小例子。考虑以下集合:

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

给定 X ,Borel 场是 2 = 8 个集合的集合,也称为幂集:

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

幂集与描述二项式幂的代数展开的二项式定理密切相关,如下所示:

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

我们可以使用二项式公式对此进行扩展:

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

其中二项式系数为:

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

X 的幂集中子集的个数由二项式系数 *C(n,k)*的个数给出

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

任何集合的幂集是包含空集和该集合中元素的组合的集合,从 1 到原始集合的大小:

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

python 中幂集的实现

现在我们将讨论如何使用 python 中的实现来生成幂集。首先,让我们从 itertools 导入组合和链:

from itertools import combinations, chain

接下来,让我们初始化一个包含空元组的元组:

powerset = ((),)

现在,让我们定义一个函数,它接受一个参数输入集,并使用链和组合方法来生成幂集:

def powerset(input_set):size = len(input_set)
    combs = (combinations(input_set, k) for k in range(1, size+1))

    return chain(empty_powerset, *combs)

如果我们用之前指定的集合调用函数:

print(tuple(powerset({10, 20, 30})))

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

事实证明,与我们上面的例子不同,对于不可数集合,sigma 代数是必要的。西格玛代数是必要的,以便我们能够考虑实际事件的实数子集。换句话说,在可数并集和可数交集的条件下,集合需要被很好地定义,才能被赋予概率。

给定我们对 Borel 空间的基本理解,让我们继续定义概率函数。

概率公理(Kolmogorov 公理)

给定样本空间 S 和相关联的西格玛代数 B,,概率函数是满足以下条件的具有域 B 的函数 P :

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

满足以上陈述的任何函数 P 都是候选概率函数。因为可以定义许多满足概率公理的概率函数,所以概率论关心的是理解哪些函数反映了在特定实验中可能观察到的情况。

需要考虑的最后一件有趣的事情是:

巴拿赫-塔尔斯基悖论说明了在缺少西格玛代数的情况下出现的矛盾。它声明如下:

给定两个实心 3D 球,一个小,一个大,任何一个球都可以重新组合成另一个。这也被称为豌豆和太阳悖论,即一颗豌豆可以重新组合成太阳,反之亦然。这意味着,如果你在三维空间中处理实数(例如,体积比),你将很难定义事件的概率,因为你可以重新排列空间来改变体积。如果你的概率取决于体积,通过改变集合的体积,你也将改变概率。这意味着没有一个事件可以被赋予单一的概率。这需要 sigma 代数,它允许我们定义可测量的集合和概率。

在人工智能竞赛中领先的四大人工智能公司。

原文:https://towardsdatascience.com/four-ai-companies-on-the-bleeding-edge-of-artificial-general-intelligence-b17227a0b64a?source=collection_archive---------13-----------------------

人工通用智能

下面让我们来看看走在 AGI 前列的四家公司。

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

尼斯·姆舒蒂在 Unsplash 上的照片

一种人工智能已经接管了世界,但不是以末日杀手终结者机器人、反乌托邦未来那种方式。在 21 世纪,人工智能被用于增强商业、教育、建筑、医疗保健、交通等行业。它被用来拯救生命,创造下一代技术,主要是为了让我们的生活更美好。人工智能的应用似乎是无穷无尽的。尽管看起来人工智能是一种领先于我们时代的未来科幻技术,但它不会停留在个性化你的社交媒体体验或自动化单调的任务上。如果你认为这是人工智能革命的顶峰,请再想想,因为你今天看到的人工智能只是冰山一角。

窄 AI vs 强 AI

在我们开始之前,这里有一个关于人工智能的速成班,简单地定义为机器思考和学习的能力。今天使用的人工智能被称为狭义人工智能,狭义的意思是,它只能按照编程完成特定的任务,除此之外什么也做不了。AI 的下一个“级别”是强 AI 或者本文标题中使用的术语——人工通用智能。强人工智能是一个假设的机器大脑,它具有执行任务和理解语音的智能能力,其认知水平与人脑相同。换句话说,一个机器人可以像我们一样感受事物,恋爱,并基本上做我们人类每天可以做的事情,这对一个狭隘的人工智能系统来说几乎是不可能的。

在 AGI 的投资

这个假想的 AGI 是不朽的,可能会改变历史的进程。这就是为什么投资者向公司投入数百万美元,专家们努力工作,希望将这种虚构的技术变成现实。根据 Mind Commerce 的一份报告,预计到 2023 年,AGI 的投资将达到 500 亿美元。

说到投资,有很多科技公司都有一群专家在研究这项技术。IBM 和百度等大型科技公司可能正在人工智能领域实现飞跃。然而,有四家著名的公司领先于人工智能的终点线。奖品不是金杯,而是人工智能的圣杯——超级智能。

以下是对它们的简要介绍。

4 家人工智能公司

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

照片由卡莱斯·拉巴达Unsplash 上拍摄

1.开放 AI

始于 : 2015
驻于:加州三藩市
使命:确保人工通用智能造福全人类
目标:率先创造 AGI,不是为了利润的支配,而是为了社会的安全,为了平等地分配给世界。
创始人:埃隆·马斯克、山姆·奥特曼等人。
投资方:微软——10 亿美元
近期成就:创造了 Open AI Five ,一个由 5 个 AI 机器人组成的团队击败了世界 Dota 2 冠军和一个能够解魔方的机器人手
AGI方法论:更大的神经网络模型

[## OpenAI

OpenAI 是一家人工智能研究公司,发现并制定安全人工智能的道路。

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

2.深度思维

始于 : 2010
基于:伦敦
任务:研究并构建安全的人工智能系统,学习如何解决问题并推进所有人的科学发现。
目标:通过融合机器学习和系统神经科学的新技术来构建强大的通用学习算法,从而实现“解决智能”。
【创始人】:戴密斯·哈萨比斯
投资人 : Founders Fund 和 Horizons Ventures
近期成就 : AlphaGo ,2016 年在围棋比赛中击败人类最优秀棋手的 AI 系统。
方法论 AGI :神经科学——更深入地观察人类大脑,并从中汲取灵感,创造复杂的算法。

[## deep mind——如果解决一个问题可以解开成千上万个问题的答案,会怎么样?

人工智能可能是人类最有用的发明之一。我们研究和建立安全的人工智能系统…

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

3.谷歌大脑

开始于 : 2011
总部位于:加州山景
任务:让机器变得智能,改善人们的生活
目标:创造一个拥有人类小孩智力的 A.I。
创始人:吴恩达和杰夫·迪恩
投资人:隶属母公司谷歌
近期成果:发明变形金刚(一种用于自然语言处理的神经网络) TensorFlow
方法论到 AGI :监督学习,以及其他神经网络结构。

[## 大脑团队——谷歌研究

关于团队研究,自由谷歌大脑团队成员制定自己的研究议程,团队作为一个整体…

谷歌研究](https://research.google/teams/brain/)

4.脸书人工智能研究所

始于 : 2013
基于 : —
任务:推进人工智能
目标:创造类人人工智能
创始人 : Yann LeCun 、深度学习先锋
投资方:母公司
方法论到 AGI :无监督和自我监督学习。

[## 艾

我们将人们与他们关心的事物联系起来,为新的、有意义的体验提供动力,并推进…

ai.facebook.com](https://ai.facebook.com/)

展望未来

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

吉列尔莫·费拉在 Unsplash 上拍摄的照片

人工智能肯定会给我们的社会带来混乱。它对我们世界的影响将跨越每一个行业,我们必须为这一天的到来做好准备。尽管 AGI 似乎被描绘成危险和暴力的,但真正的危险来自我们。

我们,人类,是不完美的,我们往往不知道我们行为的后果。只要看看我们是如何应对气候变化的生存风险的,世界上许多地方已经遭受了它,但我们仍然无动于衷。对于 AGI 这种有能力终结人类的技术,我们是在扮演上帝的角色,我们必须非常小心我们的行动。T2 的风险是巨大的,我们的比赛岌岌可危。

为了确保这项技术将被用于好的方面,而不是以任何方式被滥用,必须制定适当的规则来确保 AGI 系统 100%安全,并且有意识的 AGI 自己将具有人文主义价值观,如诚信和道德,以防止他们伤害人类。

只要参与推进 AGI 进程的人是负责任的,并且意识到 AGI 的危险,安全高效的 AGI 体系就能建立起来。

行动计划

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

照片由伊森·道Unsplash 上拍摄

既然你已经意识到了 AGI 将会带来的影响,试着去了解人工智能,并想办法把它应用到你的生活中。拥有将人工智能应用到现实世界的技能和能力将至关重要,无论你只是一名大学生还是一家大型零售公司的首席执行官。

如果你是人工智能的爱好者,你可以从学习人工智能流行的编程语言开始。我建议从 Python 开始,因为你可以继续学习 PyTorch 这是一个流行的机器学习框架,或者你可以学习 TensorFlow 的 JavaScript,也是一个机器学习库。

如果你是一名业务经理,你希望看到人工智能改变你的公司,那么开始投资人工智能,聘请机器学习工程师或数据科学家。在您的业务中使用人工智能,您可以增加销售额,增强客户体验,自动化流程,进行预测分析,检测欺诈,等等。

如果你是一个梦想改变世界的年轻人,目标是成为一名企业家,我敦促你从人工智能开始。找到你的激情或者一个你想解决的问题,尝试把 AI 的元素加入其中。比如你梦想设计一个新的服装品牌,为什么不让 AI 替你设计呢?或者,如果你想帮助找到大脑疾病或癌症的治疗方法,请使用人工智能来找到新的治疗方法。

总而言之,人工智能不是也不应该局限于富人,而是所有人都可以体验并参与这场让世界变得更美好的革命。不要害怕实验和使用人工智能来实现不可能的事情。

感谢您的阅读,我希望您已经了解了什么是人工智能,以及哪些公司正在引领它成为现实。

以下是美国人工智能研究人员兼作家埃利泽·尤德考斯基(Eliezer Yudkowsky)的一段话:

“任何可以产生比人类更聪明的智能的东西——以人工智能、脑机接口或基于神经科学的人类智能增强的形式——都毫无疑问地成为最能改变世界的东西。其他的甚至都不在一个联盟里。”—

查看这些文章,了解更多关于人工智能和机器学习的信息!

[## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 机器学习的未来

与杰夫·迪恩一起展望曼梯·里的未来

towardsdatascience.com](/the-future-of-machine-learning-ce0a9dc18cb8)

如果您对学习数据科学感兴趣,请查看“超学习”数据科学系列!

[## 如何“超级学习”数据科学—第 1 部分

这是一个简短的指南,基于《超学习》一书,应用于数据科学

medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

其他联系方式:

注意安全!

四种常见类型的神经网络层

原文:https://towardsdatascience.com/four-common-types-of-neural-network-layers-c0d3bb2a966c?source=collection_archive---------9-----------------------

(以及何时使用它们)

神经网络 (NN)是当今许多机器学习(ML)模型的支柱,松散地模仿人脑的神经元,从输入数据中识别模式。因此,多年来已经设计了许多类型的神经网络拓扑,使用不同类型的神经网络层来构建。

有了今天大量的 ML 框架和工具,任何有一点 ML 知识的人都可以很容易地用不同类型的神经网络拓扑建立一个模型。在大多数情况下,这都是关于了解每种类型的神经网络擅长解决什么问题,并优化它们的超参数配置。

四种最常见的神经网络层是全连接卷积反卷积递归、,下面你会发现它们是什么以及如何使用它们。

全连接层

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

图像由感知实验室

全连接层将一层中的每个神经元连接到下一层中的每个神经元。全连接层存在于从标准神经网络到卷积神经网络 (CNN)的所有不同类型的神经网络中。

随着输入的增长,完全连接的层在计算上可能变得昂贵,导致要执行的矢量运算的组合爆炸,以及潜在的较差的可扩展性。因此,它们通常用于神经网络中的特定目的,例如对图像数据进行分类。

用例

  • 使用全连接神经网络的实验或学习 ML。
  • 为计算机视觉对图像进行分类。

通常与全连接层相关的超参数

  • 激活功能
  • 神经元数量
  • 拒绝传统社会的人

卷积层

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

图像由感知实验室

卷积层是 CNN 中一种重要的层类型。它最常见的用途是检测图像中的特征,其中它使用一个过滤器来扫描图像,一次扫描几个像素,并输出一个特征图,对发现的每个特征进行分类。

过滤器(有时称为内核)是一组与输入相乘的 n 维权重,其中过滤器的维度与输入的维度相匹配(例如,当处理 2D 图像时是两个维度)。过滤器描述了给定的像素模式表示特征的概率。因此,滤波器权重的数量(即,滤波器的大小)小于输入,并且由层的卷积过程执行的乘法是在匹配滤波器大小的图像“小块”上执行的。

在整个图像上从左到右和从上到下系统地重复乘法以检测特征。滤波器在下一次迭代中移动的像素数称为步幅可以在输入图像周围添加填充,以确保滤波器总是适合给定步幅的图像的总边界。

用例

  • 用于图像识别和分类的图像分析。

通常与卷积层相关的超参数

  • 维度
  • 补丁大小
  • 进展
  • 要生成的要素地图的数量
  • 填充策略
  • 激活功能
  • 拒绝传统社会的人
  • 联营

去卷积层

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

图像由感知实验室

反卷积图层是一种转置卷积过程,可有效地将数据向上采样至更高的分辨率。这可以包括从卷积层生成的图像数据和/或特征图,或者其他类型的数据。对于图像数据,通过去卷积输出的上采样分辨率可以与原始输入图像相同,也可以不同。

常见用例

  • 向上采样图像

通常与反褶积层相关的超参数

  • 维度
  • 进展
  • 要生成的要素地图的数量
  • 填充策略
  • 激活功能
  • 拒绝传统社会的人

循环层

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

图像由感知实验室

一个循环层包括一个“循环”能力,使得它的输入既包括要分析的数据,也包括由该层执行的先前计算的输出。递归层形成了递归神经网络(RNNs)的基础,有效地为它们提供了内存(即,在迭代过程中保持状态),而它们的递归性质使 RNNs 适用于涉及自然语言和时间序列等顺序数据的情况。它们对于将输入映射到不同类型和维度的输出也很有用。

常见用例

  • 将情绪分为积极情绪和消极情绪。
  • 生成图像内容的文本描述。
  • 将文本段落翻译成另一种语言。

通常与重现层相关的超参数

  • 维度
  • 递归神经网络类型( LSTMGRU ,或标准 RNN 层)
  • 返回序列
  • 拒绝传统社会的人

结论

当谈到机器学习时,神经网络是当前最先进的,有许多拓扑和层类型可供选择。每种类型的神经网络都擅长解决特定领域的问题,每种神经网络都通过优化这些解决方案的超参数进行调整。此外,ML 从业者现在可以访问许多 ML 框架和工具,这使得实现围绕神经网络拓扑结构构建的 ML 模型比以往任何时候都更容易。

要了解更多信息,请查看我的机器学习手册,它提供了关于神经网络和 ML 其他方面的更多细节。

四种有趣的方式帮助您在研发中保持高效

原文:https://towardsdatascience.com/four-fun-ways-to-help-you-stay-productive-in-r-4e9912c2363b?source=collection_archive---------61-----------------------

这四个想法将帮助你,如果你被困在等待长脚本完成

许多 R 程序员会证明他们坐在电脑前盯着 R 控制台,等待长脚本运行的情况。有时是因为他们担心某件事会失败,有时是因为他们在祈祷脚本会毫无错误地运行。

但是,如果您的脚本需要很长时间,您可能会变得非常低效。在您等待的同时,您可能正在编写其他 R 代码。在你的电脑上做一些其他的事情,或者甚至做一些完全不同的事情,比如去健身房,看书,或者学习一些新的东西。

这里有四个想法可以帮助你。

1.在你等待的时候写更多的 R 代码

许多 R 程序员——尤其是初学者——不知道如何在活动会话之外运行他们的代码,所以他们最终会在活动会话中运行他们的脚本,并等待它完成,然后才能进行更多的编码。

从 RStudio 1.2 开始,您可以利用作业功能。作业允许您在 rstu 迪奥内部的独立 R 会话中运行脚本。这将释放您的控制台,以便您可以继续处理其他代码,但也允许您在脚本运行时查看其进度。

要将脚本作为本地作业运行,请查找一个小下拉菜单,您可以在其中看到按钮,然后选择“源为本地作业”。脚本运行时,您可以使用“作业”窗口中显示的绿色条来监视其进度,如果您用代码节(至少有三个尾随破折号的注释)对脚本进行注释,则“作业”窗口会在脚本中显示注释,以便您可以准确地看到脚本的位置。

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

RStudio 迪奥 1.2+中的“作业”窗口

2.在你等待的时候,学习一些新的事实

wikifacts包是一个简单的包,显示从维基百科主页随机选择的事实。您可以使用install.packages("wikifacts")从 CRAN 直接安装。

如果您偶尔将wikifacts中的命令插入到您的脚本中,您可以在等待脚本执行时阅读一些有趣的琐事。

对于随机事实,您只需要使用wiki_randomfact(),对于特定类型的事实,您可以使用wiki_didyouknow()wiki_onthisday()wiki_inthenews()

事实将从今天的维基百科主页中提取出来,或者如果你愿意,你可以在上面的函数中指定前一个主页的日期作为参数。

wikifacts如果你真的想提升你的输出,你也可以很容易地进入其他有趣的显示工具,比如cowsay

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

通过管道将 wikifacts 连接到 cowsay

3.多任务处理时获得通知

如果在脚本执行时你在 R 之外工作,你可以使用beepr包,当你的脚本完成或者某些部分完成时,你就可以播放噪声。在您安装并加载软件包之后,您可以使用beep()功能来播放一组简短的提示。例如,如果你像我一样是一个最终幻想迷,你会喜欢beep("fanfare")

此外,beep_on_error()功能允许你指定一个表达式来测试,如果测试失败,你选择的声音将被播放。如果你在脚本中加入测试,这非常方便。

4.当您离开电脑时获得通知

当你设置了一个很长的脚本来运行,然后离开你的计算机去做别的事情,然后当你在几个小时后回来时,你发现它在五分钟后因为一些愚蠢的错误而失败了,这是多么令人沮丧。听起来熟悉吗?

有许多电子邮件包可以在你的脚本中发生事情时给你发送电子邮件,但我真的很喜欢textme包,它给你发送一条你选择的消息。

textme目前在 CRAN 上不可用,但是您可以使用devtools::install_github("richpauloo/textme")从 Github 安装它。您可以在这里找到完整的说明,但基本上主要步骤如下:

  1. 在这里建立一个twilio账户,验证自己并建立一个项目——一个试用账户就可以了。
  2. 获取您的试用电话号码、SID 和令牌。
  3. 使用tm_configure()功能输入您的凭证和您想要发送短信的目的地电话号码,即您的号码。
  4. 使用textme()功能发送所需信息(如textme("Awesome, your script just completed successfully!"))。

下面是一个我如何使用textme来提醒我出错的例子:

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

左边的短信是由右边的代码发送的

编码时,你还用什么有趣的事情来帮助你避免浪费时间?

最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn Twitter上找我。也可以看看我在drkeithmcnulty.com的博客。

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

图片由simpleprogrammer.com提供

整合了数据科学和人种学的四个创新项目

原文:https://towardsdatascience.com/four-innovative-projects-that-integrated-data-science-and-ethnography-3f469f804616?source=collection_archive---------44-----------------------

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

图片来自 DarkoStojanovic

在之前的文章中,我已经讨论了整合数据科学人种学的价值。在 LinkedIn 上,人们评论说他们对此很感兴趣,希望听到更多关于潜在方法的细节。我回答说,“我发现解释如何进行将两者实际结合起来的研究,通过例子比抽象地演示更容易,因为如何做的细节会根据每个项目的具体需求而变化。”

在本文中,我打算这样做:分析四个在某种程度上整合了数据科学和人种学的创新项目。我希望这些能激发你的创造力,帮助你思考如何在你正在做的项目中创造性地组合它们。

简介:

1.没有展示模型:使用人种学设计机器学习软件(https://ethno-data.com/show-rate-predictor/)

2.网络敏感性研究:使用机器学习将民族志调查的范围扩大到更大的人群(https://ethno-data.com/masters-practicum-summary/)

3.脸书新闻反馈民间理论:使用人种学来了解用户如何理解他们遇到的机器学习系统并对其做出反应,以及这如何反过来塑造有问题的机器学习算法的发展(https://dl.acm.org/doi/10.1145/2858036.2858494)

4.事物民族志:使用机器学习将物体的交互纳入民族志研究(https://dl.acm.org/doi/10.1145/2901790.2901905https://www . semantic scholar . org/paper/Things-Making-Things % 3A-An-Ethnography-of-of-the-Giaccardi-Speed/2 db 5 feac 9cc 743767 FD 23 aeded 3 aa 555 EC 8683 a 4?p2df

项目 1:没有展示模型

纽约市一家医院系统的医疗诊所要求我使用机器学习来建立一个节目速率预测器,以便为改进其调度实践提供信息。在最初的构建阶段,我使用人种学来更深入地理解诊所面临的调度问题,并确定适当的界面设计。

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

图片来自 NASA

通过人种学调查,我发现了日程安排者在安排约会时问的最重要的问题。这个问题是,“在某一天被安排去看医生的人中,有多少人会真的出现?”然后我建立了一个机器学习模型来回答这个问题。我的人种学调查为我提供了数据科学项目的设计要求。

此外,我用我的人种学调查来设计界面。我观察了调度程序如何与他们当前的调度软件交互,这让我知道什么样的可视化对我的应用程序有用或没用。

该项目举例说明了人种学在确定机器学习算法需求的机器学习项目的开发阶段以及在向用户传达算法并评估其成功性的前端是如何有所帮助的。

作为一名民族志学者和数据科学家,我能够将我的民族志见解无缝地转化为机器学习建模和 API 规范,并且还进行了后续的民族志调查,以确保我构建的内容能够满足他们的需求。

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

图片来自 Kon Karampelas

项目 2:网络敏感性研究

我和 Indicia Consulting 一起进行了这个项目。它的目标是探索个人能量消耗和他们与新技术的关系之间的潜在联系。这是一个使用人种学来探索和确定少数人的潜在社会和文化模式,然后使用数据科学来分析大量人口中的这些模式的例子。

我们通过观察和采访大约 30 名参与者开始了这个项目,但随着研究的进展,我们需要开发一种可扩展的方法来分析整个社区、县甚至州的模式。

人种学是深入探索一种现象和发展初始模式的伟大工具,但它是资源密集型的,因此很难在一大群人身上进行。分析成千上万的人是不实际的。另一方面,数据科学可以很容易地测试在较小的人种学研究中发现的整个群体模式的有效性,但因为它通常缺乏人种学的粒度,所以经常会错过复杂的模式。

人种学在确定已实现的机器学习模型及其产生的见解是否有实际意义方面也非常有用。这形成了一种迭代反馈循环,其中数据科学扩大了人种学的见解,而人种学将数据科学模型置于上下文中。

因此,人种学和数据科学很好地覆盖了彼此的弱点,形成了一个伟大的方法论组合,用于以深入理解客户、用户、同事或其他用户为中心的项目。

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

图片来自 Pixabay

项目 3:脸书新闻和民间理论

在他们的研究中,Motahhare Eslami 和她的研究团队进行了一项民族志调查,研究不同的脸书用户如何看待脸书新闻订阅如何选择哪些帖子/故事出现在他们的订阅顶部。他们分析了几种不同的“民间理论”或日常生活中人们的工作理论,作为机器学习系统选择头条新闻的标准。

用户对整个系统工作的看法会影响他们对新闻反馈的反应。例如,相信算法会优先考虑他们过去喜欢的朋友的帖子的用户通常会有意喜欢他们最亲密的朋友和家人的帖子,以便他们可以看到更多他们的帖子。

用户对 Newsfeed 算法如何工作的观点会影响他们对它的反应,这反过来会影响算法学习的数据,从而影响算法的发展。这创建了一个循环反馈回路,随着时间的推移,它会影响机器学习算法系统的开发。

他们的研究例证了理解人们如何思考、响应以及更广泛地与基于机器学习的软件系统相关的重要性。对人们与这种系统的互动进行民族志研究是发展这种理解的重要途径。

在某种程度上,许多机器学习算法在本质上是非常社会化的:它们——或者至少是它们所在的整体软件系统——往往基于人类如何与它们交互而成功或失败。在这种情况下,无论机器学习算法在技术上多么强大,如果潜在用户不能积极有效地与之相关,那么它就会失败。

对机器学习软件系统的“社会生活”(我的意思是它们如何成为个人生活的一部分,或者在某些情况下未能成为个人生活的一部分)的民族志有助于理解算法是如何开发或学习的,并确定它们是否成功实现了我们希望它们做的事情。这种人种学不仅需要人种学方法方面的深入专业知识,还需要深入了解机器学习算法如何工作,进而了解社会行为可能如何影响他们的内部发展。

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

项目 4:事物民族志

Elise Giaccardi 和她的研究团队一直在开拓利用数据科学和机器学习来理解事物并将其观点纳入民族志。随着物联网(IOT)的发展,她认为来自物体传感器的数据可以通过帮助描述这些物体如何相互关联,为人类如何与环境相关的民族志提供新的见解。她称这种的东西为民族志

这种实验方法举例说明了在民族志中使用机器学习算法作为社会过程/互动的一种方式。这可能是在人种学研究中分析这些 IOT 物品在日常生活中的社会角色的一种创新方法。如果说 Eslami 的工作举例说明了一种将民族志分析移植到机器学习算法的设计周期中的方法,那么 Giaccardi 的研究则说明了一种将数据科学和机器学习分析融入民族志的方法。

结论

这里有四个创新项目的例子,涉及整合数据科学和人种学,以满足各自的目标。我不打算这些是如何整合这些方法的完整或详尽的说明,而是作为思考的食粮,以激发进一步的创造性思考如何连接它们。

对于那些当他们听到整合数据科学和人种学的想法时,会问合理的问题,“有趣,但实际上会是什么样子?”这里有四个例子来展示它的样子。希望它们有助于发展你自己的想法,如何将它们结合到你正在做的任何项目中,即使它的细节完全不同。

您可以在这里找到原文:https://ethno-data . com/projects-integrating-data-science-and-ethnography/。有关该网站和其他文章的更多信息,请访问https://ethno-data.com/

也感谢《数据科学》杂志发表这篇文章。关于他们工作的更多细节,见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值