TowardsDataScience 博客中文翻译 2020(五百三十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

从头开始实现 XGBoost

原文:https://towardsdatascience.com/implementing-xgboost-from-scratch-6b7f2eb593c?source=collection_archive---------18-----------------------

使用 numpy 实现一个最流行的机器学习模型的逐步指南

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

安妮·斯普拉特在 Unsplash 上的照片

XGBoost 是一个优化的分布式梯度增强库,旨在高效、灵活和可移植。

它已经被用于几乎每一个机器学习黑客马拉松,并且通常是选择模型时的首选。

但是理解它实际上是如何工作的总是困难的部分。起初,复杂的数学很难理解,所以我决定使用 Numpy 编写 XGBoost 的代码。这将有助于以简单的方式理解它。

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

照片由布鲁斯·马尔斯Unsplash 拍摄

这是通过临时代码理解 XGBoost 的另一种方法。下面的代码是一个使用 numpy 开发的简单 XGBoost 模型。这段代码的主要目的是揭示 XGBoost 背后的数学原理。

导入基本库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

numpy——实现 xgboost
Pandas 背后的数学运算——将列表值转换为 data frame
Matplotlib——绘制最终输出以可视化结果

样本数据:

考虑以下数据,其中工作年限是预测变量,工资是目标。

year = [5,7,12,23,25,28,29,34,35,40]
salary = [82,80,103,118,172,127,204,189,99,166]

需要记住的几件重要事情:

使用回归树作为基础学习器,我们可以创建一个模型来预测工资。

为了简单起见,我们可以选择平方损失作为损失函数,我们的目标是最小化平方误差。

作为第一步,模型应该用函数 F0(x)初始化。F0(x)应该是使函数 F 在平均值处最小化的损失函数或 MSE(均方误差)最小化的函数

如果我们取 MAE,函数会在中间值最小化

数据构建

df = pd.DataFrame(columns=['Years','Salary'])
df.Years = year
df.Salary = salary
df.head()

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

上述代码片段的输出

几件更重要的事情:

残差是 y 和 f0 之差,即(y-f0)

我们可以使用 F0(x)的残差来创建 h1(x)。h1(x)将是一棵回归树,它将尝试减少上一步的残差。h1(x)的输出不会是 y 的预测;相反,它将有助于预测将降低残差的连续函数 F1(x)。

加法模型 h1(x)计算树的每个叶子处的残差(y-F0)的平均值。

分割完成后,计算上半部分和下半部分的平均值,我选择了一个随机分割点。

模型构建:

for i in range(2):
    f = df.Salary.mean()
    if(i>0):
        df['f'+str(i)] = df['f'+str(i-1)] + df['h'+str(i)]
    else:
        df['f'+str(i)] = f
    df['y-f'+str(i)] = df.Salary - df['f'+str(i)]
    splitIndex = np.random.randint(0,df.shape[0]-1)
    a= []
    h_upper = df['y-f'+str(i)][0:splitIndex].mean()
    h_bottom = df['y-f'+str(i)][splitIndex:].mean()
    for j in range(splitIndex):
        a.append(h_upper)
    for j in range(df.shape[0]-splitIndex):
        a.append(h_bottom)
    df['h'+str(i+1)] = a

df.head()

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

2 次迭代后的输出

如果我们继续迭代 100 次,我们可以看到 MSE(Fi)的损失大幅下降

for i in range(100):
    f = df.Salary.mean()
    if(i>0):
        df['f'+str(i)] = df['f'+str(i-1)] + df['h'+str(i)]
    else:
        df['f'+str(i)] = f
    df['y-f'+str(i)] = df.Salary - df['f'+str(i)]
    splitIndex = np.random.randint(0,df.shape[0]-1)
    a= []
    h_upper = df['y-f'+str(i)][0:splitIndex].mean()
    h_bottom = df['y-f'+str(i)][splitIndex:].mean()
    for j in range(splitIndex):
        a.append(h_upper)
    for j in range(df.shape[0]-splitIndex):
        a.append(h_bottom)
    df['h'+str(i+1)] = a

df.head()

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

100 次迭代后的输出

我们可以看到,随着迭代次数的增加,损失在减少,模型在适应数据集

可视化结果:

plt.figure(figsize=(15,10))
plt.scatter(df.Years,df.Salary)
plt.plot(df.Years,df.f1,label = 'f1')
plt.plot(df.Years,df.f10,label = 'f10')
plt.plot(df.Years,df.f99,label = 'f99')
plt.legend()

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

上述代码片段的绘图

蓝线表示 1 次迭代后的输出,可以理解为随机。当我们到达第 100 次迭代时,模型适应数据,损失减少,从而使输出接近实际点。

代码可以在我的 github 回购上找到:【https://github.com/Sid11/XGBoost-Using-Numpy/】T2

希望你喜欢!

在 PyTorch 中实现 Yann LeCun 的 LeNet-5

原文:https://towardsdatascience.com/implementing-yann-lecuns-lenet-5-in-pytorch-5e05a0911320?source=collection_archive---------3-----------------------

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

安妮·尼加德在 Unsplash 上拍摄的照片

最近,我看了由 Dataiku 制作的数据科学先锋电影,其中几位数据科学家讲述了他们的工作以及他们如何在日常工作中应用数据科学。在其中一次会谈中,他们提到了 Yann LeCun 的卷积神经网络架构(也称为 LeNet-5) 如何被美国邮政局用于自动识别手写的邮政编码。该架构的另一个现实应用是识别银行系统写在支票上的数字。指出 LeNet-5 论文发表于 1998 年是有意义的。这就是为什么在转向更复杂、更现代的架构之前,理解 CNN 如何工作是一个很好的起点的原因之一。

在本文中,我简要描述了该架构,并展示了如何在 PyTorch 中实现 LeNet-5。本文假设对卷积神经网络的基础有一个大致的了解,包括卷积层、池层、全连接层等概念。

理论介绍

LeNet-5 是一个 7 层卷积神经网络,针对大小为 32 x 32 像素的灰度图像进行训练。

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

来源:基于梯度的学习应用于文档识别

为了解码上面的图像,我给出了作者使用的命名约定:

  • Cx —卷积层,
  • Sx —子采样(池化)层,
  • Fx —全连接层,
  • x-层的索引。

鉴于现代标准,LeNet-5 相对简单,因此我们可以分别研究每一层,以便更好地理解该架构。然而,在继续之前,提醒一下计算卷积层输出大小的公式也是有意义的。

公式如下所示:

,其中 W 是输入的高度/宽度(正常情况下图像是正方形,所以不需要区分两者), F 是滤镜/内核大小, P 是填充, S 是步幅。

看到上面的架构模式和公式后,我们可以检查 LeNet-5 的每一层。

  1. 第 1 层(C1) :第一个卷积层,有 6 个大小为 5×5 的核,步长为 1。给定输入大小(32×32×1),该层的输出大小为 28×28×6。
  2. 第 2 层(S2) :具有 6 个大小为 2×2 的内核和步长为 2 的子采样/池层。原始架构中的子采样层比传统使用的最大/平均池层要复杂一些。我将引用[1]:“S2 单位的四个输入相加,然后乘以一个可训练的系数,并加到一个可训练的偏差。结果通过一个 s 形函数传递。。作为非重叠感受野的结果,该层的输入大小减半(14×14×6)。
  3. 第三层(C3): 第二个卷积层,配置与第一个相同,不过这次有 16 个滤波器。该层的输出为 10×10×16。
  4. 第四层(S4): 第二个汇集层。逻辑与前一个相同,但这一次该层有 16 个过滤器。该层的输出大小为 5×5×16。
  5. 第 5 层(C5): 最后一个卷积层,120 个 5×5 核。假设该层的输入大小为 5×5×16,内核大小为 5×5,则输出为 1×1×120。因此,层 S4 和 C5 是完全连接的。这也是为什么在 LeNet-5 的一些实现中,实际上使用全连接层而不是卷积层作为第五层。将这一层保持为卷积层的原因是,如果网络的输入大于[1]中使用的输入(初始输入,在这种情况下为 32×32),这一层将不是全连接层,因为每个内核的输出将不是 1×1。
  6. 第 6 层(F6): 第一个全连接层,接受 120 个单元的输入并返回 84 个单元。在最初的论文中,作者使用了一个定制的激活函数——tanh 激活函数的变体。关于详细的解释,请参考[1]中的附录 A。
  7. 第 7 层(F7): 最后一个密集层,输出 10 个单位。在[1]中,作者使用欧几里德径向基函数神经元作为该层的激活函数。

有关架构背后的推理和一些选择(如非标准激活函数)的更多详细信息,请参考[1]。

PyTorch 实现

我现在将展示如何在 PyTorch 中实现 LeNet-5(做了一些小的简化)。为了保持 LeNet-5 最初应用的精神,我们将在 MNIST 数据集上训练网络。我们从导入所有需要的库开始。

此外,我们检查 GPU 是否可用,并相应地设置DEVICE变量。在下一步中,我们设置一些参数(如随机种子、学习速率、批量大小、时期数等。),我们将在稍后设置神经网络时使用它。

下一步,我们在 PyTorch 中定义一些用于训练神经网络的辅助函数。由于在大多数情况下,总体思想非常相似,因此您可以根据自己的需要稍微修改这些函数,并将其用于训练各种网络。我们从负责培训部分的功能开始:

我将快速描述一下在train函数中发生了什么。对于每批观察,我们执行以下步骤:

  1. 执行正向传递-使用当前权重获取批次的预测
  2. 计算损失函数的值
  3. 执行反向传递,其中权重根据损失进行调整。这是“学习”的一步。

请注意,在训练阶段,模型处于训练模式(model.train()),我们还需要将每批的梯度归零。此外,我们计算训练步骤中的跑步损失。

然后,我们定义负责验证的函数。

验证功能与训练功能非常相似,不同之处在于缺少实际的学习步骤(反向传递)。请注意,我们需要说明我们仅使用模型进行评估— model.eval()。我们不需要担心梯度,因为在下一个函数中,您将看到我们在验证步骤中禁用了它们。最后,我们在训练循环中将它们结合在一起:

在训练循环中,对于每个时期,我们运行trainvalidate函数,后者与torch.no_grad()一起运行,以便不更新权重并节省一些计算时间。除了用于训练的损失函数之外,我们还使用定制的get_accuracy函数计算训练和验证步骤的模型精度。我们将使用的数据集是平衡的,因此使用准确性作为衡量标准没有问题。为了简洁起见,我在这里没有包括所有的助手函数,你可以在 GitHub 上找到get_accuracyplot_losses的定义。

定义了助手函数之后,是时候准备数据了。由于 MNIST 数据集的普及(如果你不熟悉它,你可以在这里阅读一些背景),它很容易作为torchvision内的数据集之一。

在上面的代码片段中,我们首先定义了一组要应用于源图像的变换。我们首先将图像的大小调整为 32×32(LeNet-5 的输入大小),然后将它们转换为张量。transforms.ToTensor()自动将图像缩放至[0,1]范围。我们也可以对图像应用某种填充,而不是调整图像的大小。在最简单的情况下,我们只需在原始图像的两边添加两个零。

第二步是定义数据集。对于训练对象,我们指定了download=True,以便下载数据集。在定义数据集时,我们还指出了先前定义的转换以及特定对象是否将用于训练。

最后,我们通过提供数据集、批量大小和在每个时期混洗数据集的愿望来实例化DataLoaders。为了验证,这没有区别,所以我们把它设置为False

下面你可以看到来自训练集的 50 张图片的预览。

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

最后,是时候定义 LeNet-5 架构了。

从上面的类定义中,您可以看到与原始网络相比的一些简化:

  • 使用常规 tanh 激活功能,而不是[1]中描述的自定义功能。
  • 使用普通的池层而不是原始架构中使用的更复杂的对等层,
  • 用 softmax 函数替换输出图层中的欧氏径向基函数激活。

定义了类之后,我们需要实例化模型(并将其发送到正确的设备)、优化器(本例中为 ADAM)和损失函数(交叉熵)。最后两个不同于最初在[1]中使用的方法。

一切就绪后,我们可以通过运行以下命令来训练网络:

model, optimizer, _ = training_loop(model, criterion, optimizer, train_loader, valid_loader, N_EPOCHS, DEVICE)

什么会产生以下输出:

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

训练损失趋于平稳,而验证损失有时表现出小的起伏(增加的值)。总的来说,我相信表现可以用中规中矩来形容。最好的结果(在验证集上)是在第 11 个时期获得的。

为了评估我们模型的预测,我们可以运行下面的代码,该代码显示一组来自验证集的数字,以及预测的标签和网络分配给该标签的概率(换句话说,网络在预测中的可信度)。

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

从上面的图片中我们可以看到,网络几乎总是确定这个标签,唯一的疑问出现在数字 3(第二行,右起第三个)中,而它只有 54%的把握是 3。这很可能是因为这个数字确实类似于 8。

作为最后一步,我们运行以下命令来删除下载的数据集:

!rm -r mnist_data

结论

在本文中,我描述了 LeNet-5 的架构,并展示了如何实现它,以及如何使用著名的 MNIST 数据集对它进行训练。由于这是最早的 CNN 架构之一,它相对简单易懂,这使得它成为学习卷积神经网络的良好开端。

为了进一步提高网络的性能,尝试一些数据扩充可能是值得的。为此,我们可以对图像应用旋转或剪切(使用torchvision.transforms)等变换,以创建更加多样化的数据集。我们还应该注意,并不是所有的变换都适用于数字识别的情况。这种不正确变换的一个例子是翻转图像以创建镜像反射。

你可以在我的 GitHub 上找到本文使用的代码。一如既往,我们欢迎任何建设性的反馈。你可以在推特或评论中联系我。

参考文献

[1] Y. LeCun、L. Bottou、Y. Bengio 和 P. Haffner。基于梯度的学习在文档识别中的应用。IEEE 会议录,1998 年 11 月。—此处可用

R 中的隐含波动率—正确评估期权风险

原文:https://towardsdatascience.com/implied-volatility-in-r-assess-options-risk-correctly-70fe36843474?source=collection_archive---------4-----------------------

使用免费提供的数据和 R 来计算和可视化隐含波动率表面,以提高您对期权的风险评估

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

Unsplash 上由 Ishant Mishra 拍摄的照片

来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

放弃

本文不提供投资建议,其中的任何内容都不应被理解为投资建议。它为那些不需要建议就能做出投资决定的个人提供信息和教育。

本文包含的信息不是也不应被解读为购买或出售任何证券的要约或建议,或征求购买或出售任何证券的要约或建议。它不是,也不应该被视为使用任何特定投资策略的建议。

最近像 Robinhood 这样的低收费或免费经纪公司的兴起,导致交易期权合约的散户投资者大幅增加。这些金融工具本身比它们的基础股票风险更高,并且这种风险不能通过仅仅使用期权的价格直接测量。因此,必须使用不同的方法来充分评估风险。一个这样的措施是隐含波动率表面。

在本文中,我将描述使用免费提供的数据和 r 获得股票期权的当前隐含波动率表面的过程。结果可用于比较不同股票的风险,并为期权合约定价。我还将演示我们如何创建一个交互式的波动率表面图表,用于即时分析或在仪表板中显示它。

1.介绍

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

苹果股票的隐含波动率表面(图片由作者提供)

在我们经历必要的步骤来获得和绘制如上图所示的隐含波动率表面之前,我们需要先回答几个问题:

  • 什么是隐含波动率,为什么它很重要?
  • 隐含波动率是如何计算的?
  • 什么是波动表面?

注: 如果你已经熟悉隐含波动率曲面和期权定价的概念,可以跳到第 2 节。下一节将介绍一些关键概念、符号和代码片段,它们将贯穿本文的其余部分。然而,完整的代码可以在文章的结尾找到。

什么是隐含波动率,为什么它很重要?

根据维基百科,隐含波动率定义如下:

期权合约的隐含波动率 ( IV )是基础工具的波动率的值,当输入期权定价模型时,将返回等于所述期权的当前市场价格的理论值。

简单来说,IV 是基于股票当前交易期权价格的股票价格预期未来波动的度量。通常用百分比值来表示股票的预期年标准差范围。

例如,如果苹果(AAPL)目前的交易价格为 119.02,IV 为 25%,这将意味着,预计从现在起一年内,其股价以 68%的概率(对应于正态分布的 1 个标准差)介于 89.27(119.02 *(1-0.25))和 148.78 (119.02 * (1 + 0.25))之间。

那么为什么隐含波动率很重要呢?IV 让我们了解市场参与者如何评估股票价格的不确定性。因此,它是一只股票总体潜在风险的良好指标,也是预期交易范围的预测指标。此外,股票的 IV 允许我们用目前在市场上看不到的参数化期权定价。最后,IV 可用于评估不同股票期权之间的相对价值。由于期权的价格取决于标的的价格,因此不适合比较不同股票的期权。这就是为什么期权价格也经常以波动性而不是价格来报价。

隐含波动率是如何计算的?

隐含波动率一般是通过求解期权定价模型的逆定价公式来计算的。这意味着,不是使用定价模型来计算期权的价格,而是在市场上观察到的价格被用作输入,输出是波动率。

最著名的期权定价模型是广义布莱克-斯科尔斯-默顿模型。虽然这一模型多年来受到了相当多的批评,但由于其简单性和封闭形式的解决方案,它在实践中被广泛使用,我们将在本文中通篇使用它。

欧式看涨期权和看跌期权的封闭解是:

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

欧式看涨和看跌期权的封闭解

在哪里

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

d1 和 d2 的公式(图片由作者提供)

  • s 是当前的股票价格
  • x 是期权执行价格
  • σ是隐含波动率
  • b 是广义持有成本参数(包括例如无风险利率、股息收益率,如果适用)
  • t 是以年为单位的成熟时间
  • N(x)是累积正态分布函数

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

累积正态分布函数(图片由作者提供)

这在 r 中很容易实现。

虽然定价模型为我们提供了一个封闭形式的解决方案,但用于获得 IV 的反向定价模型没有这样的解决方案。因此,我们需要使用优化器来计算 IV。为此,我们在 R 中实现一个目标函数,然后使用优化函数来获得 IV。

让我们通过使用一些真实世界的数据来检查我们的实现是否有效。我们将以苹果公司(AAPL)为例。我们可以从雅虎财经获得我们需要的所有数据,股票数据在这里是,最新的期权价格在这里可以找到。下面是我们将在示例中使用的数据截图。

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

AAPL 股票的样本数据(截图来自雅虎财经)

从截图中我们可以看到,目前的股价(10 月 16 日)是 119.02,列表中的第一个执行价格是 125,期权价格(我们用的是要价)是 3.55,到期时间是 28 天,显示的 IV 是 45.12%。我们自己计算 IV 所缺少的就是无风险利率。作为近似值,我们将采用 3 个月美国国债利率,目前为 0.11%(你可以在这里找到数据)。

将这些值代入我们的优化函数会产生以下结果:

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

隐含波动率计算的样本结果(图片由作者提供)

我们的优化产生了 45.11%的 IV,而雅虎财经显示的 IV 为 45.12%。相当不错的搭配(而且好像雅虎财经也在用广义布莱克·斯科尔斯模型)。

注: 你大概已经意识到我们在优化中把股息率 q 设为 0,得到了和雅虎财经一样的结果。当检查苹果的股息率时,可以看到它不是 0。这表明雅虎财经提供的数据可能不完全准确。因此,我们将坚持我们自己的计算。

看着上面的样本数据,你可能已经观察到隐含波动率随着执行价格以及选择不同的到期日而变化。这一观察最终将我们引向隐含波动率表面。

什么是波动表面?

Black Scholes Merton 原始模型的一个主要缺点是,它假设执行价格的波动是恒定的。然而,在实践中,可以观察到不同履约价格的不同波动性。这就是所谓的波动微笑。不同到期日的期权也是如此。因此,隐含波动率沿两个维度变化,即执行价格和到期时间。由于行权价格取决于标的股价,因此不适合跨不同股票进行比较。使用期权货币来代替执行价格。这就是买入期权的股价/执行价和卖出期权的执行价/股价的比值。

这就产生了波动率表面,这是准确定价期权和评估股票价格的潜在不确定性所必需的。

在这个相当长的介绍之后,我们将最后看看如何从实际市场数据中获得隐含波动率表面,并在不同股票之间进行比较。

2.数据

与历史股票数据不同,历史期权链不是那么容易得到的(尤其不是免费的)。然而,由于我们最关心的是用于定价和风险评估的隐含波动率表面的当前状态,所以当前数据也可以。

如简介部分所示,雅虎财经涵盖了我们,例如,你可以在这里找到苹果目前的期权链。为了加载 R 中的数据,我们可以使用 quantmod 包中的 getOptionChain 函数,或者自己抓取。我决定采用后者,因为 getOptionChain 函数没有返回 yahoo finance 提供的 IV 列,我想将这些值与我自己计算的值进行比较。此外,练习网络抓取总是好的!

下面的代码使用 quantmod 包来获取一般的股票信息,使用 rvest 包来抓取期权链。为了避免不可靠的数据点,我们删除了股票上个交易日的最后 5 分钟内没有交易的期权(因为我们将使用股票收盘价来计算 IV ),并设定了资金边界(在 0.85 和 1.15 之间)和到期时间(在 7 天和 6 个月之间)。

这给了我们两个数据框架,一个是看涨期权,一个是看跌期权。

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

AAPL 看涨和看跌期权的数据框(图片由作者提供)

3.隐含波动率计算

接下来我们自己根据给定的数据计算隐含波动率。你可能会问自己,如果我们可以从雅虎财经获得数据,我们为什么要这样做。我们这样做的原因如下:

  • 我们希望能够自己进行这种计算,这样我们就可以在没有 IV 可用的情况下对选项使用相同的方法
  • 如介绍中所述,数据计算似乎没有使用股息率

我们将继续以苹果为例,使用引言中描述的方法计算 IV,而不使用股息率。提醒一下,这是我们将要使用的代码。

作为检查,我们可以绘制通过我们的计算获得的 IV 和来自 yahoo finance 的数据之间的差异。

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

AAPL 电话的计算 IV 与雅虎财经的价值的比较(图片由作者提供)

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

AAPL 看跌期权的计算 IV 与雅虎财经的价值比较(图片由作者提供)

我们可以观察到隐含波动率之间的绝对差异很小,并且随着到期时间的推移而减小。这是由于前面提到的事实,即我们基于收盘价计算 IV,而最后交易的期权价格基于略有不同的股票价格。这种效应在成熟前的时间越短越强。

在这个例子中,我们没有包括股息收益率。但是,展望未来,我们将包括它。幸运的是,可以使用 quantmod 包中的 getQuote 函数轻松获得数据。我们现在可以重新运行 IV 计算,并使用 reshape2 包中的 acast 函数来创建买入和卖出的 IV 网格。

检查生成的网格会发现,由于没有针对所有履约/到期日的期权价格,我们有相当多的 NAs:

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

AAPL 看涨期权的波动率网格(图片由作者提供)

为了填补缺失值,我们需要对曲面进行插值。

4.曲面插值

为了执行插值,我们将使用 akima 包中的 interp 函数。它实现了不规则数据的网格二元插值,基本上正是我们需要的。

为了获得完整的表面,我们需要采取的步骤如下:

  1. 获取每个缺失值的坐标
  2. 在缺失值周围获取一个最大尺寸为 11x11 的网格
  3. 使用此格网通过线性或样条插值对缺失值进行插值
  4. 用插值替换缺失的值

下面是一个代码示例,对缺失的调用值做了进一步的解释。

现在我们有了苹果股票看涨期权的完整隐含波动率表面!我们可以使用 plotly 包在一个漂亮的交互式图表中绘制我们的结果。

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

苹果股票的隐含波动率表面(图片由作者提供)

我们可以使用相同的代码来获得其他股票的表面,例如特斯拉。

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

特斯拉股票的隐含波动率表面(图片由作者提供)

我们可以立即看到这两只股票之间的差异,特斯拉本来就比苹果更不稳定,这表现在波动性表面。简单地看期权价格不会显示这一点,因为它们取决于基础股票价格,并且不可能在不同股票之间进行比较。

5.结论

在本文中,我详细介绍了使用免费提供的数据和 r 来获得股票期权的当前隐含波动率表面的过程。这可以用来比较不同股票和定价期权合约的风险。使用 plotly ,我们可以创建一个交互式的波动率表面图表,用于即时分析或在仪表板中显示。

请务必让我知道,如果你有任何反馈或建议,以改善我在这篇文章中所描述的!

完整代码

使用 skiprows、skipfooter、usecols、index_col 和 header 选项将 CSV 文件导入为 Pandas DataFrame

原文:https://towardsdatascience.com/import-csv-files-as-pandas-dataframe-with-skiprows-skipfooter-usecols-index-col-and-header-fbf67a2f92a?source=collection_archive---------18-----------------------

学习使用 read_csv 函数及其提供的一些非常有用的参数

来源:作者

CSV 文件是一种非常常见和流行的数据存储格式。数据科学家几乎定期处理 CSV 文件。Pandas 不仅可以选择将数据集导入为常规的 Pandas 数据帧,还可以选择在导入时清理和调整数据帧。在这里,我想讨论其中的几个选项:

使用 read_csv 方法将 pandas 和数据集作为数据帧导入:

import pandas as pddf = pd.read_csv(‘olympics.csv’)
df.head()

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

来源:作者

在本教程中,我使用了数据集“olympics.csv”。请 c 点击此处 为数据集。

df.head()只给出数据帧的前五行,因此我们可以看到数据帧的一些属性。df.tail()返回数据帧的最后五行。也可以指定行数。像 df.head(8)将返回前 8 行。您可以使用数据帧长度范围内的任何数字。可以用同样的方式在 df.tail()中指定行数。

df.tail()

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

来源:作者,数据框的最后五行

看数据集。在顶部,有一个不必要的行。这不是标题。有一个名为 skiprows 的选项可以去掉不必要的行。

df1 = pd.read_csv(‘olympics.csv’, skiprows = 1)
df1.head()

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

来源:作者,在 skiprows 中使用 read_csv

这里 skiprows = 1,意味着删除一行。默认情况下,它将从顶部删除一行。您可以使用 skiprows 删除 2、3、4 或任意数量的行。但是您可能不想从顶部删除所有行。比如你可能想删除第一行,第三行,第四行。在这种情况下,您可以在列表中指定行。

df2 = pd.read_csv(‘olympics.csv’, skiprows = [0, 2, 3])

有时在 CSV 文件中,没有标题,只有值。但默认情况下,熊猫以第一行为表头。为了避免这种情况,我们可以使用“header = None”。在这个数据集中,有一个头。但是为了这个例子,让我们假设没有标题。

df3 = pd.read_csv(‘olympics.csv’, header = None)df3.head()

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

来源:作者,使用 read_csv,标题=无

看,熊猫在顶部多加了一行标签来增加标题。它没有将原始数据集中的任何一行作为标题。但是,在这个数据集中,有一个标题。第二行,这意味着行索引 1 是一个标题。让我们通过添加 header = 1 将第二行的第一行指定为标题。

df4 = pd.read_csv(‘olympics.csv’, header = 1)df4.head()

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

来源:作者,使用 header=1 的 read_csv

在此数据框架中,默认索引列是一个通用序列。有一个有意义的索引是有用的。导入时,您可以将索引设置为您想要的任何列。我选择第一列的国名。所以列索引为零。请记住,索引列被视为一个列。

df5 = pd.read_csv(‘olympics.csv’, index_col = 0, skiprows = 1)df5.head()

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

来源:作者,将 read_csv 与 skiprows 和 index_col 一起使用

有时数据集的所有列对于分析来说可能不是必需的。尤其是当数据集太大时,呈现一部分总是有意义的。不然就变得太难理解了。这里有一种导入几列的方法。

df6 = pd.read_csv(‘olympics.csv’, skiprows = 1, usecols = [‘Unnamed: 0′,’№ Summer’, ‘№ Winter’, ‘№ Games’], index_col = 0)df6.head()

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

来源:作者、使用 skiprows 的 read_csv、使用列和 index_col

让我们再次回到 skiprows。使用“for 循环”可以跳过任何范围的行。这个选项有时非常有用。我在这里使用了一个简单的 for 循环。

df7 = pd.read_csv(‘olympics.csv’, skip_blank_lines = False, skiprows = [i for i in range(2, 5)] )df7.head()

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

来源:作者,read_csv 的使用,其中 skiprows 采用 for 循环

另一个非常动态的想法是定义一个函数,并使用该函数跳过或保留您需要的行。对于这个例子,我在这里定义了一个简单的函数。仅返回偶数索引行的函数。然后,在 skiprows 中使用它来跳过偶数索引行。

def even_rows(index):
    if index%2 == 0:
        return True
    return Falsedf8 = pd.read_csv(‘olympics.csv’, skiprows = lambda x: even_rows(x) )df8.head()

最后,我应该谈谈 skipfooter。Skipfooter 从数据帧的底部跳过行。在这里,我对 skipfooter 使用值 3。因此,它将从页脚跳过三行。

df10 = pd.read_csv(‘olympics.csv’, header = 1, skipfooter = 3)df10.tail()

这就是我想分享的关于使用熊猫图书馆在笔记本中导入 CSV 文件的全部内容。我希望它有帮助。

将 HTML 表格轻松导入 Google Sheets。

原文:https://towardsdatascience.com/import-html-tables-into-google-sheets-effortlessly-f471eae58ac9?source=collection_archive---------1-----------------------

了解如何使用 Google Sheets 中的IMPORTHTML功能,从网站导入表格和列表。

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

马库斯·斯皮斯克Unsplash 上拍摄的原始照片

“从互联网上获取信息就像从消防水管里喝水一样.”— 米切尔·卡普尔

互联网上充斥着大量数据。然而,以正确的格式获取数据才是真正的大事。将数据转换成适合分析的格式需要一定的清理和过滤。上周,我在维基百科上偶然发现了一些非常好的表格数据集。和往常一样,我把数据复制粘贴到 excel 表格上。在大多数情况下,它工作得很好,但是典型的复制-粘贴方法很少失败:

  • 当表格通常很长并且遍布整个网页时
  • 当数据不是静态的,也就是说,它定期更新。因此,每次原始数据集发生变化时,我都必须再次获取数据集。

对于这种情况,简单的复制粘贴是不够的。抓取是另一个选择,但是我在寻找一个快速简单并且不需要太多代码的东西。就在那时,我在 Google Sheets 中发现了一个叫做**IMPORTHTML**, 的便利功能,它非常适合从 HTML 页面的表格或列表中导入数据。在本文中,我将描述将表格(和列表)提取到 google sheets 的端到端过程。

在提取或导入尚未由您管理的数据之前,请确保您拥有必要的权限。此外,这种方法只有在数据公开的情况下才有效,这意味着不应该有授权等要求。

这篇文章是寻找好数据集的完整系列文章的一部分。以下是该系列中包含的所有文章:

第 1 部分 : 为数据分析任务获取数据集—高级谷歌搜索

第二部分 : 为数据分析任务寻找数据集的有用站点

第 3 部分 : 为深度学习项目创建定制图像数据集

第 4 部分 : 毫不费力地将 HTML 表格导入 Google Sheets

第 5 部分 : 使用 Camelot,从 pdf 中提取表格数据变得很容易。

第六部分 : 从 XML 文件中提取信息到熊猫数据框架

第 7 部分 : 5 个真实世界数据集,用于磨练您的探索性数据分析技能

句法

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

作者图片

在使用函数之前,我们先快速了解一下IMPORTHTML函数的语法。IMPORTHTML函数接受三个不同的参数,编写如下:

IMPORTHTML(**URL**, query, index)

因素

  • URL :指表格所在页面的 URL。不要忘记添加协议(例如 http://).) ,并确保 URL 在引号内。
  • 查询:查询可以是表格,也可以是项目列表。例如,如果您想要导入一个表,请在引号中提到,否则请提到一个列表
  • **索引:**指表格在网页上的位置,从 1 开始。

用法:导入表格

现在让我们看看如何快速无缝地将维基百科文章中引用的 HTML 表格导入到 Google sheet 中。页面标题为: 网飞原创电影列表 ,包含美国全球点播互联网流媒体提供商发行的各类电影和节目信息。

第一步:复制网址

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

图片来源:维基百科

第 2 步:选择要导入的表

假设我们想要导入所有的故事片,这是页面上的第一个表。

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

图片来源:维基百科

第三步:在谷歌表单中添加公式

创建一个新的 Google 工作表,或者在现有的工作表中创建一个新的标签。在指定 URL、查询和索引号的单元格中输入以下公式。

*=IMPORTHTML("https://en.wikipedia.org/wiki/List_of_Netflix_original_films_(2012%E2%80%932019)","table",1)*

瞧啊。整个表格被提取并填充到电子表格中。以下是你在谷歌表单中看到的内容:

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

作者图片

让我们结合以上三个步骤,看看下面的端到端演示:

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

作者图片

您可以用同样的方式导入列表。唯一的变化是用函数参数中的列表替换单词 table。

定制输出:使用查询功能

您可以做很多事情来定制导入的数据。这可以通过结合使用[**Query**](https://support.google.com/docs/answer/3093343?hl=en-GB) 函数和IMPORTHTML.函数来实现。**Query**函数跨数据运行谷歌可视化 API 查询。让我们来看看实现这一点的一些方法:

限制导入列的数量

假设您不想导入所有的列,而是选择几列。您可以传递所需列的索引。例如,如果我们只需要前三列,我们的函数如下:

=query(IMPORTHTML("https://en.wikipedia.org/wiki/List_of_Netflix_original_films","table",1),"Select Col1,Col2,Col3")

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

作者图片

看看我们是如何用query函数包围IMPORTHTML函数并指定列索引的。

基于列筛选数据

另一种情况是当我们想要一些特定的数据时,即只关于喜剧类型的数据。这可以很容易地做到,如下所示:

=query(IMPORTHTML("https://en.wikipedia.org/wiki/List_of_Netflix_original_films","table",1),"Select * where Col2='Comedy'")

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

作者图片

查看QUERY功能的官方文档,了解使用它的其他方法。

结论

在本文中,我们看到了IMPORTHTML函数的强大功能,以及如何使用它将来自网站、博客和其他 HTML 源的表格和列表直接导入 google 电子表格。从那里,您可以对数据集执行几个分析任务,并从中获取有意义的信息。您还可以提取数据并与他人共享,这样他们也可以利用这些数据。

数据可视化的重要性——Anscombe 的四重奏。

原文:https://towardsdatascience.com/importance-of-data-visualization-anscombes-quartet-way-a325148b9fd2?source=collection_archive---------15-----------------------

进入现实世界

四个数据集欺骗了线性回归模型。

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

作者图片

安斯科姆的四重奏由四个数据集组成,它们具有几乎相同的简单描述性统计,然而具有非常不同的分布,并且在绘制时显得非常不同。
—维基百科

Anscombe 的四重奏可以定义为一组四个数据集,它们在简单的描述统计学中几乎相同,但是数据集中有一些特性,如果建立的话会欺骗回归模型**。它们具有非常不同的分布,并且在散点图上绘制时呈现不同的。**

它是由统计学家 Francis Anscombe 在 1973 年构建的,用以说明在分析和建模之前绘制图表重要性,以及其他观测对统计特性的影响。这四个数据集图具有几乎相同的统计观察值,提供相同的统计信息,包括所有四个数据集中所有 x,y 点的方差均值

这告诉我们,在应用各种算法来构建模型之前,可视化数据的重要性,这表明必须绘制数据特征,以便查看样本的分布,这可以帮助您识别数据中存在的各种异常,如异常值、数据的多样性、数据的线性可分性等。此外,线性回归只能被视为适合具有线性关系的数据,不能处理任何其他类型的数据集。这四个图可以定义如下:

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

作者图片

所有这四个数据集的统计信息大致相似,可以计算如下:

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

作者图片

当这些模型绘制在散点图上时,所有数据集都会生成不同类型的图,任何回归算法都无法对其进行解释,这些算法会被这些特性所迷惑,如下所示:

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

作者图片

这四个数据集可以描述为:

  1. 数据集 1: 这个非常符合线性回归模型。
  2. 数据集 2:无法很好地拟合数据的线性回归模型,因为数据是非线性的。
  3. 数据集 3: 显示了数据集中涉及的异常值,这些异常值不能用线性回归模型处理
  4. 数据集 4: 显示数据集中涉及的异常值,这些异常值不能用线性回归模型处理

结论:

我们已经描述了四个数据集,这四个数据集旨在描述数据可视化的重要性,以及任何回归算法如何被数据可视化所欺骗。因此,在对数据集中的所有重要特征实施任何机器学习算法之前,必须将其可视化,这将有助于建立良好的拟合模型。

感谢阅读。你可以在这里找到我的其他机器学习相关的帖子

希望这篇帖子有用。我感谢反馈和建设性的批评。如果你想谈论这篇文章或其他相关话题,你可以在这里或在 LinkedIn 给我发短信。

[## 线性回归中的假设你可能不知道。

模型应该符合这些假设,以产生与数据的最佳线性回归拟合。

towardsdatascience.com](/assumptions-in-linear-regression-528bb7b0495d) [## 机器学习中最常见的损失函数

每个机器学习工程师都应该了解机器学习中这些常见的损失函数,以及何时使用…

towardsdatascience.com](/most-common-loss-functions-in-machine-learning-c7212a99dae0)

软件设计在数据科学中的重要性

原文:https://towardsdatascience.com/importance-of-software-design-in-data-science-249ef7fbafc?source=collection_archive---------51-----------------------

意见

为什么不应该忽视数据科学和机器学习中的软件设计和开发原则

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

evUnsplash 上的照片

更新,2021 年 2 月 26 日:我会继续在帖子底部添加链接,以证明我的观点,这篇博文看起来可能像一篇观点文章,但它不是。当涉及到生产中的数据科学时,软件设计是一个事实。

背景

大家都把 R、Python、统计学、数据分析、机器学习的需求作为求职数据科学家的首要技能。我学过很多入门和高级的数据科学和机器学习课程。是的,你需要知道如何编码,但没人谈论的是“软件设计原则”。

软件设计和开发

我们要在任何数据科学或机器学习项目中写代码。生产环境需要大量代码。人们不能认为“加入几个 for 循环,创建一些变量,写一个列表理解”就是数据科学中编码的终结。数据科学中的大多数课程都是一样的,它们侧重于基本的 Python,并以列表理解结束。我们需要知道一般的软件设计原则,还需要了解我们正在使用的编程语言的不同特性。你可以创建一个工具,你可以分析一些东西,单个源代码文件可以是 100-500 行代码(或者更多)。你不能仅仅用基本变量和循环把这么多行代码拼凑在一起。实际上你可以,但这不会对所有人都有好处:对你、你的团队和你的组织(这反而会是一场噩梦)。这就是像面向对象编程这样的设计的用武之地。我每天都读书,到目前为止,唯一写过这方面文章的人是丽贝卡·维克里:

[## 如何免费学习数据科学

一个完整的学习路径,包括不花你一分钱的资源

towardsdatascience.com](/how-to-learn-data-science-for-free-eda10f04d083)

这就是为什么我们也需要理解生成器和上下文管理器。随着数据科学和机器学习变得自动化,焦点转向云,我们甚至可能不需要知道编程语言(再过 15 年)。但是现在,我认为一个人需要知道基本的软件设计原则。您可以从一些资源开始:

[## 大 O 批注|面试蛋糕

最后简单解释一下大 O 记数法。我会向你展示你在技术面试中所需要的一切…

www.interviewcake.com](https://www.interviewcake.com/article/python/big-o-notation-time-and-space-complexity) [## 面向对象编程

编辑描述

en.wikipedia.org](https://en.wikipedia.org/wiki/Object-oriented_programming) [## 过程程序设计

过程化编程是一种编程范式,源于结构化编程,基于…

en.wikipedia.org](https://en.wikipedia.org/wiki/Procedural_programming)

生产软件

然后就是数据科学行业的现实工作。一个很好的例子就是生产中的机器学习。是的,我们知道模型,知道如何在我们的机器和云上运行它们,知道如何让它们在黑客马拉松中更有效,这很好。但是生产环境是完全不同的。如果你是一名软件开发人员,那么你应该知道我在说什么:分段故障、崩溃、集成问题、版本控制问题等等。幸运的是,有几个人讨论过这个问题,我甚至看到了 Luigi Patruno 的博客:

[## 为什么我开始生产 MLinProduction - ML

有没有发现自己在开始前应该多读一本书或者多上几门在线课程…

mlinproduction.com](https://mlinproduction.com/why-i-started-mlinproduction/)

结论

是的,更大的图景是关于数据的。我们能从中得到什么,以及我们如何向利益相关者展示我们的见解,并告诉决策者从数据中能获得什么样的商业价值。所以你需要首先关注这一点。完成这些之后,不要忘记编码部分,它是产生所有这些结果的部分。它经常被忽视,但却是重要的一部分。您的预测和您的数据一样好,运行这些预测的软件和您对软件设计和开发的理解一样好。你不需要像软件开发人员一样掌握它,但你肯定需要知道基础知识。

**2020 年 11 月 12 日更新:**我刚刚发现了丽贝卡·维克里的一个帖子,她在里面详细讲述了软件工程原理。比我写的还要好。在这里找到它:

[## 大多数数据科学课程不会教给你的基本技能

…以及如何学习它们

towardsdatascience.com](/the-essential-skills-most-data-science-courses-wont-teach-you-5ceb0c4d17ce)

**2021 年 2 月 26 日更新:**找到了软件工程(我称之为软件设计)在数据科学中真正重要的另一个证据。弗拉基米尔·伊格洛维科夫:

[## 《分析印度》杂志采访完整版:机器学习掌握之路…

本文是对 analyticsindiamag.com 的采访全文。从 2002 年到 2004 年,我在俄罗斯服役…

ternaus.blog](https://ternaus.blog/interview/2020/08/27/interview-to-analyticsindia-full-version.html)

**2021 年 3 月 12 日更新:**这是 Kurtis Pykes 关于软件工程实践对数据科学有多重要的另一个观点:

[## 数据科学家应该知道软件工程的最佳实践

成为不可或缺的数据科学家

towardsdatascience.com](/data-scientist-should-know-software-engineering-best-practices-f964ec44cada)

使用表格数据进行预测建模时的重要考虑事项

原文:https://towardsdatascience.com/important-considerations-to-make-while-predictive-modeling-17aac6b188d9?source=collection_archive---------36-----------------------

我对 Coursera.org“如何赢得顶级 Kagglers 的数据科学竞赛”的笔记

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

https://www.kaggle.com/progression

总的来说,我觉得这门课很有帮助,也很有见地,4.79/5。有许多我以前没有考虑过的想法,所以我在这里贴了一些我的笔记。很有可能,你已经看到了这些想法的大部分,所以我将试着把重点放在最有趣的。这是课程的链接

火车运行公司

  1. 数据探索清单
  2. 验证
  3. 目标泄漏
  4. 度量和损失函数
  5. 指标优化
  6. 表示编码
  7. 编码提示
  8. 高级特征工程
  9. 群策群力
  10. 堆叠网
  11. 创建一套多样化的模型
  12. 元学习和堆叠技巧
  13. XG boost 中基于文本的功能
  14. 序列特征提取(XGBoost)
  15. 半监督&伪标签
  16. 我的看法

数据探索清单

  1. 检查缺失值和异常值
  2. 检查分类变量的唯一计数
  3. 分割出数据类型,即数值型、分类型
  4. 创建“大于”列级比较矩阵
  5. 寻找相关变量的聚类
  6. 创建图以找到强大的功能交互

步骤 1、2、3 是几乎每个数据探索管道的一部分。步骤 4、5、6 涉及绘制和比较特征,即,使用 pd.crosstab、相关矩阵或聚合数据。

确认

K-Fold 验证可以说是建模过程中最重要的步骤。出折叠(OOF)样本的预测用于评估模型的平均性能。这也用于超参数调整和模型性能比较。有趣的是,跨 K 个折叠的性能变化也可用于诊断目的,即检查每个折叠中预测的波动性。

目标泄漏

目标泄漏是一个负载话题。基本上,我们不希望模型从生产环境中不可用的信息中学习。索引功能或索引功能的组合可能会导致目标泄漏。更一般地说,目标漏损可以是导致良好模型性能和低附加值的任何东西。

度量和损失函数

这里总结了常见的损失函数和指标。

  1. MAE——平均绝对误差——当数据集包含大多数数据集不常见的异常值时,优于 MSE
  2. RMSLE——均方根对数误差——倾向于过度预测,而不是不足预测
  3. MAPE-平均绝对百分比误差-对较大目标值的误差惩罚较少
  4. MSPE —均方百分比误差
  5. AUC——曲线下面积——估计高于随机的模型准确度百分比
  6. 混淆矩阵-分类器如何在类之间分配预测
  7. Weight Cohen’s Kappa —使用误差矩阵和混淆矩阵来估计(加权误差)除以加权基线,以估计分类器性能。评分者同意系数。

度量优化

  1. MAPE 和 MSPE 可通过样本权重或重采样进行优化,即 MAPE 的 1/y_i/sum(1/y_i)
  2. 在分类模型中,模型的输出概率可能与目标变量的分布不匹配。概率可以用模型叠加来校准。校准可以用目标的分类概率和滚动平均值的 CDF 来可视化。
  3. 当期望的度量在验证数据集上变得更差时,可以利用早期停止来停止训练。

平均编码

均值编码是一个潜在的强大工具,但它也很有可能增加偏差。可以通过使用 K 倍插补、留一插补、平滑平均编码和扩展平均编码来减轻偏倚。这些策略的一些示例代码可以在我的 GitHub 这里找到。

K 倍 CV 均值编码策略可总结如下:

  1. 分离训练和测试装置
  2. 分裂训练→ K 折叠训练和 OOF 验证,
  3. 对 K-fold 训练进行均值编码,然后将值映射到 OOF 验证
  4. 组合来自 OOF 数据集的均值编码,然后追加到训练数据集
  5. 估计整个训练的编码,然后映射到测试集

分类变量之间的相互作用也可以进行均值编码。显然,从 XGBoost 中挖掘特性交互是可能的,这里是链接。通过计算两个要素在随机森林中同时出现的次数,您可以创建自己的函数来实现这一点。

编码技巧

  1. 使用宏加速编码和编辑
  2. 尝试各种理论,并试图理解为什么一个理论行得通/行不通
  3. 建立一个快速基线模型,并专注于功能开发
  4. 修复模型的随机种子
  5. 将验证训练/测试分割保存在单独的文件中
  6. 把预测建模想象成一个难题
  7. 寻找团队成员,整合结果并分享见解
  8. 将所有不同的模型保存在不同的文件中

高级特征工程

  1. 计算分类组中的最小值、最大值、平均值和标准值(类似于平均值编码)
  2. 最近邻统计,N 个最近邻的平均值:平均目标变量,聚类中的平均距离,到分类值的平均距离
  3. 矩阵分解/降维/t-SNE

整体策略

集成策略使用几个模型的输出到单个预测模型中,通常可以改善结果。

  • 加权平均
  • 制袋材料
  • 加权推进
  • 梯度推进
  • 堆垛

将模型输出一起平均可以降低任何一个模型中的噪声。可以使用 K 倍 CV 来调整集合权重。权重也可以针对特定类别或目标类进行调整。

Bagging: 创建同一模型的不同版本,并将结果平均在一起。通过改变随机种子、模型参数、行选择和/或列选择来创建不同的模型。

Boosting: 通过一个接一个地顺序训练 ML 模型,将许多弱学习器转换为强估计器,其中每个模型被建立以校正前一个模型的错误。在梯度增强决策树(即 XGBoost)中,梯度和 Hessian 矩阵用于确定哪些特征值得分裂。下面是一些关于 XGBoost 如何工作的有用链接:简明解释文档原始论文

下面是 boosting 算法的简短总结:第一次迭代根据目标的平均值计算误差,其中平均值是预测堆栈中的第一个模型。所有后续模型通过学习速率η*来缩放。模型估计器的数量应该与学习率成反比。

Scikit-learn 有一个为定制模型 sk learn . ensemble . adaboostclassifier 创建增强解决方案的实现。

**堆叠:**将一组不同的模型组合到另一个模型中,即随机森林、线性模型等。这个过程需要减少目标泄漏。第一组模型的输出不应用于训练第二层第一层以前已经“看到”的数据。对于各种情况,有各种不同的堆叠策略。

以下是本课程第四周的摘录:

a)简单维持方案

  1. 将列车数据分为三部分:partA、partB 和 partC。
  2. 在 partA 上拟合 N 个不同的模型,分别为 partB、partC、test_data 获得元特征 partB_meta、partC_meta 和 test_meta。
  3. 元模型拟合到零件 B_meta,同时在零件 C_meta 上验证其超参数。
  4. 元模型被验证后,将其拟合到[零件 b _ 元,零件 c _ 元]并预测测试 _ 元。

b)具有 OOF 元功能的元维持方案

  1. 将训练数据分成 K 份。遍历每个褶皱:在除当前褶皱之外的所有褶皱上重新训练 N 个不同的模型,预测当前褶皱。在这个步骤之后,对于 train_data 中的每个对象,我们将有 N 个元特征(也称为非折叠预测,OOF )。让我们称它们为 train_meta。
  2. 模型拟合到全列车数据,并对测试数据进行预测。我们姑且称这些特性为test_meta。
  3. 将 train_meta 拆分成两部分:train_metaA 和 train_metaB。将元模型拟合到 train_metaA,同时在 train_metaB 上验证其超参数。
  4. 元模型被验证后,将其拟合到 train_meta 并预测 test_meta。

具有 OOF 元特征的元文件夹方案

  1. 使用 b.1b.2. 获取 OOF 预测 train_meta 并测试元特性 test_meta
  2. 使用 train_meta 上的 KFold 方案来验证元模型的超参数。一种常见的做法是将此 KFold 的种子固定为与用于获得 OOF 预测的 KFold 的种子相同。
  3. 元模型被验证后,将其拟合到 train_meta 并预测 test_meta。

d)具有 OOF 元功能的维持方案

  1. 将训练数据分成两部分:部分 a 和部分 b。
  2. 将 partA 拆分成 K 个折叠。遍历每个折叠:在除当前折叠之外的所有折叠上重新训练 N 个不同的模型,预测当前折叠。在这个步骤之后,对于 partA 中的每个对象,我们将有 N 个元特征(也称为折叠外预测,OOF )。让我们称它们为 partA_meta。
  3. 模型拟合到整个 partA,并预测 partB 和 test_data,分别得到 partB_meta 和 test_meta。
  4. 元模型拟合到零件 A_meta,使用零件 B_meta 验证其超参数。
  5. 元模型通过验证后,基本上执行 2。第三。而不用把 train_data 分成几个部分,然后训练一个元模型。也就是说,首先使用模型获得 train_data 的出叠预测 train_meta 。然后在 train_data 上训练模型,预测 test_data,得到 test_meta。在 train_meta 上训练元模型并预测 test_meta。

e)具有 OOF 元特征的 k 文件夹方案

  1. 为了验证模型,我们基本上做 d.1 — d.4 ,但是我们使用具有 M 个折叠的 k 折叠策略将训练数据分成部分 partA 和 partB M 次。
  2. 元模型通过验证后,执行 d.5.

f)时间序列中的 k 折叠方案

在时间序列任务中,我们通常需要预测一段固定的时间。如日、周、月或持续时间为 T 的任意时段。

  1. 将列车数据分割成持续时间为 T 的数据块。选择第一个 M 块。
  2. 在这些 M 个块上拟合 N 个不同的模型,并对块 M+1 进行预测。然后将这些模型拟合到第一个 M+1 组块上,并预测组块 M+2 等等,直到你到达终点。之后,使用所有训练数据来拟合模型并获得测试预测。现在,我们将拥有从编号 M+1 开始的组块的元特征,以及用于测试的元特征
  3. 现在我们可以从第一个 K 个组块[ M+1 个M+2 个,…, M+K 来拟合 2 级模型,并在组块 M+K+1 上验证它们。本质上,我们又回到了第一步。用较少的块和元特征代替特征。

g)数据量有限的时间序列中的 k 折叠方案

我们可能经常遇到这样的情况,方案 f) 不适用,尤其是在数据量有限的情况下。例如,当我们只有 2014 年、2015 年、2016 年的数据,而我们需要预测 2017 年全年的数据。在这种情况下,scheme c) 可能会有所帮助,但是有一个限制:KFold 拆分应该在时间部分完成。例如,对于有几年数据的情况,我们将每年视为一个文件夹。

  1. 将训练数据集分成两部分 A & B,测试数据 C
  2. 在 A 上训练多个学习者,输出对 B 和 C 预测
  3. 使用先前模型的堆叠预测,在 B 上定型新模型
  4. 时间元素应该在 A B 和 C 上单调增加

StackNet

  1. 多层元学习者可以堆叠在一起
  2. K-fold 训练,生成每个 K-Fold 的预测,以便创建数据集 B,可以以这种方式创建多个层
  3. 每个图层都可以使用任何先前图层/模型的输出,甚至可以使用输入数据集
  4. 创建数据集 C 有两个选项 1)模型可以使用整个训练数据进行训练,然后创建测试集的预测 2)每个 k-fold 模型的每个模型将在测试数据集上进行预测,将对这些模型取平均值

创建一套多样化的模型

  1. 创建一组多样化的模型
  2. 2-3 个梯度提升树(在不同深度调整)
  3. 2–3 个神经网络(不同的架构)
  4. 1 棵额外的树/随机森林
  5. 1–2k 邻居模型
  6. 1 因式分解机(所有成对交互)
  7. 用于回归的 RBF SVM
  8. 创建一组多样化的数据管道
  9. 使用不同的样本
  10. 使用不同的编码
  11. 对数值变量使用不同的预处理
  12. 使用不同的交互变量

元学习和堆叠技巧

  1. 具有较低深度/较高正则化约束元模型
  2. 使用具有布雷柯蒂斯距离的 KNN
  3. 考虑通过交叉验证强力寻找线性权重
  4. 第二级特征应包括新信息,即元模型输出之间的成对差异、平均编码特征的 KNN 平均距离、分类组内的平均模型预测
  5. 交叉验证中的高 K 值可能导致目标泄漏,请检查测试性能
  6. 最终层可以用线性模型来训练,而不用 CV,因为它不会引入太多偏差

XGBoost 中基于文本的功能

  1. XGBoost 可用于大型 N 元语法特征的特征选择
  2. 可以在多个文本字段之间创建文本相似性特征,即搜索查询、标题、描述:比较(查询、标题)(查询、描述)、查找匹配单词的数量、TFIDF 表示之间的余弦距离、平均单词之间的距离 2vec、Levenstien 距离

序列特征提取

  1. 滑动窗口上熵的分布统计
  2. 具有特征选择的 n 元文法
  3. 特定关键字功能
  4. 总序列长度、子序列长度
  5. 树模型特征选择和转换
  6. 非负矩阵分解(用于计数数据)
  7. 移除罕见的一次性编码功能
  8. L1 正则化的线性/SVM 模型
  9. 基于 OOF 中最容易出错的数据点创建新要素
  10. 对目标变量分布使用替换抽样
  11. 多个(20)样本横截面的平均模型结果

半监督和伪标记

可以使用伪标记方法将测试集包含到训练中(数据越多越好)。使用预测类别(半监督)或从类别分布中随机分配类别。测试集预测也是通过交叉验证计算的。

我的看法

对这些概念进行编码是相当容易的,但是对它们进行灵活编码以测试多个假设是困难的。在 2020 年,在表格数据竞赛中获得大师级地位是非常困难的。获得金牌需要达到排行榜上的前 0.2%。我目前在所有 Kaggle 竞争者中排名 4400,仅获得 2 枚铜牌。通常,有成千上万的竞争者可以使用相似的方法或策略。对于前 10%的人来说,总体策略可能是相似的,但分数可能会随着功能开发、强力超参数调整和随机种子的微小变化而大幅变化。拥有灵活的工作流程非常重要。这些竞赛的最低计算门槛在过去几年里已经大大提高了。为了具有竞争力,您需要高端规格,即 32GB+ RAM、6 核+和 2080 TI GPU+。我认为做一些表格数据竞赛来提高你的预测建模技能是值得的。

数据科学家的重要 GIT 命令

原文:https://towardsdatascience.com/important-git-commands-for-data-scientist-fb4e79041d18?source=collection_archive---------29-----------------------

了解数据科学家的重要版本控制基础知识

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

照片由扬西·敏Unsplash 上拍摄

作为一家商业公司的数据科学家,我们可以独立工作,也可以与团队合作。这是不可避免的,因为很多作品有团队在后面解决会更好。

数据科学团队合作通常会出现问题,主要是历史工作流和编程代码冲突。这就是为什么我们需要一个版本控制来让团队之间有更好的协作。

现在,什么是版本控制?版本控制是一个管理源代码、文件和目录变更的概念。一个流行的版本控制系统是 GIT

虽然软件工程师经常使用版本控制,但数据科学家需要在某种程度上了解版本控制。事实上,协作是数据科学家使用版本控制的主要卖点。没有它,我们的工作就会一团糟。

出于上述原因,我想展示 Git 中的几个重要术语和命令,每个人都应该知道。

Git

就像我上面提到的,Git 是一个免费和开源的分布式版本控制系统。Git 被世界上许多公司使用,并被认为是日常编程生活中的一个主要部分。

为了准备这篇文章,我们需要两件东西:

  • Git 安装在你本地的这里
  • Github 中创建账户

你可能想知道为什么我们会使用 GitHub 这是因为我们需要 workplace 来展示 Git 在协作环境中是如何工作的,GitHub 为我们提供了这一点。

现在,让我们尝试几个可以用 Git 执行的命令。

储存库

在你的 GitHub 账户中,你会发现一个按钮来创建一个新的存储库,它会显示一些类似下图的表单。

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

虽然,什么是储存库

当我们使用 Git 管理我们的项目时,Git 会管理两件事情:

  • 您的文件(脚本、模型等。)和目录,以及
  • Git 信息来维护您的项目随时间的历史变化。

当我们把上面的两部分结合起来,我们就有了我们所说的存储库或回购。

现在,让我们尝试在 GitHub 中创建自己的存储库,看起来应该是这样的。

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

在一个新的回购之后,我们将尝试利用 Git 命令让您尝试这一次。

GIT 命令

在开始之前,让我们尝试在您的本地驱动器上创建一个新文件夹。你想去哪里都可以。然后在新文件夹里面,尽量有你想要的任何文件;对我来说,这是一个 jupyter 笔记本。

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

之后,尝试右键单击新文件夹并选择“Git Bash Here”

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

会出现一个命令提示符,这是您第一次使用,可能需要您输入凭证信息。只要按照步骤,我们就可以开始了。

1.Git 初始化

每个英雄都有开始,Git 也是。当您在本地使用 Git 进行版本控制时,您需要首先设置环境。

Git init 就是用来做这个的。尝试在您的命令提示符下运行git init,其中的目录位于您想要的文件夹中。应该有一个类似这样的消息。

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

现在,我们已经在本地文件夹中设置了环境或 repo,准备接受任何 git 命令。

2.Git 状态

我们要做的下一步是检查我们的 git 环境状态。这里的状态是指检查暂存区中是否有文件。

那么,什么是集结地呢?这基本上是一个区域,在对文件进行任何更改之前,您可以在这里放置或跟踪文件。如果您要发送、删除或添加任何新文件,这是文件排序的位置。这被称为集结地,因为过了这个区域,它将是永久的。

要尝试这个命令,我们可以在命令提示符下运行git status。它应该显示类似这样的内容。

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

使用这个命令,可以显示我们文件的状态。我们只有未跟踪的文件,这意味着该文件尚未添加到临时区域。那么,下一步该怎么办呢?我们需要将这些文件添加到暂存区。

3。Git 添加

正如您在上面看到的,我们通过运行git add命令将文件添加到暂存区。具体来说,我们需要键入git add <filename>,其中<filename>是您想要添加到暂存区的文件的名称。

手动添加每个文件名会很麻烦。想象一下,如果本地文件夹中有一千个文件,输入每个文件需要多长时间。在这种情况下,我们可以通过在命令提示符下运行git add .将文件夹中的所有文件添加到暂存区。

当您将每个文件添加到暂存区时,尝试再次运行git status。应该是这样的。

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

文件夹中的每个文件现在都在临时区域中。

4.Git 提交

当我们已经将所有文件放在临时区域中时,如果我们想要临时区域文件是我们想要的,我们需要提交。

如果您确定,那么我们需要运行git commit命令。完整的命令是git commit -m "<your comment>",其中<您的注释>是您的日志消息或一些让您记住的简单注释。

让我们试着跑一下git commit。完成后,它应该是这样的。

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

在我的文件夹中,有两个文件,所以这就是为什么有两个文件提交。

5。Git 日志

如果您需要查看您在回购中所做的每一次提交,我们可以运行git log。它可以显示您的存储库的提交历史。作为作者,应该有重要的信息,提交键、提交日期和日志消息。

6。Git 推送

当您在 GitHub 中创建一个新的 repo 时,您会看到一系列类似这样的消息。

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

您可以从头到尾运行这个命令,但是现在唯一重要的部分是了解什么是git push

这个git push命令将您的回购从本地放到 Git Hub 的在线回购中。它就是喜欢这个名字,推回购。

在这一步,我将跳过运行git branch -M main命令,因为我们现在不需要它。

你需要首先运行的是git remote add origin <your git domain>,其中<你的 git 域名>是你的 git 回购的地址。

因此,我们在上面的命令中使用变量 object are 创建了一个名为“origin”的变量。

当您创建了‘origin’变量后,我们需要将本地回购推送到‘origin’回购。我们接下来需要做的是运行git push -u origin master。这个命令会将我们的本地 repo(称为 master)推到“原点”完成后,它应该是这样的。

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

你的 GitHub repo 应该是这样的。

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

我们知道已经使用 Git 跟踪了我们文件和数据的历史版本,并且历史也存储在 GitHub 的本地 repo 中。

结论

Git 对数据科学家很重要,因为数据科学团队合作通常会出现问题;主要是历史工作流程和编程代码冲突。Git 可以帮助我们解决这些问题。

在本文中,我向您介绍了基本的 Git 命令,它们是:

  1. Git 初始化
  2. Git 状态
  3. Git 添加
  4. Git 提交
  5. Git 日志
  6. Git 推送

希望有帮助!

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

重要信息熊猫系列和数据框架方法

原文:https://towardsdatascience.com/important-information-pandas-series-and-data-frame-methods-41bb6687d91d?source=collection_archive---------42-----------------------

你需要知道的一些最有用的方法

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

尼克·希利尔在 Unsplash 上的照片

无论您是刚刚学习数据科学,还是拥有多年使用 Python 作为主要编程语言经验的专业人士,Pandas 模块都将是您的主要武器。我们使用 Pandas 的主要原因之一是因为这个库拥有称为系列和数据框的对象。我将使用 seaborn 模块中的 mpg 数据集示例来解释整篇文章。

import pandas as pd
import seaborn as sns
import numpy as np#Load the mpg dataset
mpg = sns.load_dataset('mpg')

这就是系列的样子,一个很好的变量/列/特征;取决于你喜欢怎么称呼他们。

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

系列对象的示例

这是一个数据框,一个由许多系列组合成一个对象的数据集。

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

数据框对象的示例

只要看一下对象,我们就知道系列和数据框是我们分析数据的地方。这就是这两个对象对数据科学家的重要性。因此,我想介绍这些对象的一些重要方法,以获得在您的数据科学日常工作中肯定会有帮助的信息。

我喜欢数列和数据框方法的原因是我能多快地获得我需要的信息。这里有几个我觉得知道很重要的方法。

1.DataFrame.info

。info 方法是针对数据框对象的方法。它会给你下图所示的所有重要信息。

mpg.info()

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

只用一行字,我就能一次获得大量信息。这些信息是数据的总数有多少列列名有多少数据不为空数据类型,以及内存使用量

2.Series.describe 或 DataFrame.describe

。描述方法既可以在序列对象中实现,也可以在数据框对象中实现。让我们看看通过使用。描述方法。

mpg.describe()

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

从上图中,我们可以看到我们得到的所有数值数据的基本统计;也就是计数均值标准差最小值25%分位数50%分位数(中位数)75%分位数,以及最大值

如果我们想得到非数值型数据的基本统计数据呢?我们也可以这样做。

#Input exclude parameter as 'number' to exclude all the numerical columnsmpg.describe(exclude = 'number')

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

在这种情况下,我们排除所有的数字列(数字包括布尔列),并以非数字列结束。我们可以看到,这些信息包括 CountUnique (唯一值的个数)、 Top (最频繁的值)、以及 Freq (最频繁的值)。

的。描述方法也存在于系列对象中;更具体地说。描述方法输出的数据框对象是系列对象的统称。

mpg['mpg'].describe()

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

这是我们使用。通过列基本统计的系列对象描述方法。

3.Series.agg 或 DataFrame.agg

如果我们只需要一个特定的统计数据,并希望将它包含在一个地方,该怎么办?这是我们使用。agg 方法。此方法用于将许多统计数据聚合到一个系列或数据框对象中。我们就举个例子试试吧。

mpg.agg('mean')#we could also use function here, e.g. Numpy
#mpg.agg(np.mean)

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

。agg 方法接受函数和/或字符串作为参数输入。在上面的图片中,我们从所有的数字列中得到一系列的平均值。

现在,如果我们想要不止一种类型的信息,我们可以做到这一点。我在下面的例子中展示了它。

mpg.agg(['mean', 'std'])

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

代替字符串或函数,我们用一个包含所有我们想要的信息的列表对象来输入参数。这一次,我们得到了一个数据框对象,其中包含了我们需要的所有信息。

系列也有。我们可以使用的 agg 方法。

mpg['mpg'].agg(['mean', 'std'])

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

结果将是我们在列表对象中包含的基本统计数据的一个数字或一系列对象。

4.数据框架

该方法用于获得数值列之间的相关性矩阵。如果你想了解更多,你可以在这里阅读我关于相关性的文章

[## 关联需要什么

以及在我们的分析中如何解释它

towardsdatascience.com](/what-it-takes-to-be-correlated-ce41ad0d8d7f)

让我们用一个例子来试试这个方法。

mpg.corr()

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

默认情况下,相关性方法会计算数值列之间的皮尔逊相关性。我们可以将参数更改为我们自己定义的 Spearman 相关性Kendall 相关性可调用函数

5.DataFrame.groupby

该方法根据分类列的类别对所有数字列进行分组。输出是一个 groupby 对象。下面我们通过一个例子来试试。例如,我想按来源对 mpg 数据进行分组。

mpg_groupby_origin = mpg.groupby('origin')#Groupby object have many method similar to the series or dataframe; for example .meanmpg_groupby_origin.mean()

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

从上面的代码中,我们得到了所有数字列的平均值,但是是按照原点的类别分组的。我们也可以使用。groupby 对象的 agg 方法。

# .T is a method to transpose the DataFrame
mpg_groupby_origin.agg(['mean', 'std']).T

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

的。agg 方法类似于我们上面使用的方法。我们输入参数或者是一个字符串/函数,或者是以字符串/函数为值的列表对象。

结论

我试图解释熊猫系列和 DataFrame 对象的一些信息方法。这些包括:

  • 。信息
  • 。形容
  • 。集料
  • 。corr
  • 。分组依据

希望有帮助!

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

如果您没有订阅为中等会员,请考虑通过我的介绍订阅。

数据工程熊猫简明指南—第 1 部分

原文:https://towardsdatascience.com/important-pandas-libraries-for-data-engineering-684cef05e5c?source=collection_archive---------32-----------------------

数据工程数据科学的一个方面,侧重于数据采集分析来源的实际应用。他们建立的管道对数据科学家转换数据非常有用。他们需要了解无数的技术,并为这项工作选择合适的工具。

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

癌症患者的数据图表

内容:

  1. 进口
  2. 出口
  3. 看法
  4. 索引
  5. 子集化
  6. 提取行和列
  7. 取代
  8. 添加/删除
  9. 排序和重命名
  10. 结合
  11. 聚集

导入:

导入 pandas 库以将 CSV 文件或 XLSX 格式的文件转换为 dataframe。

import pandas as pd
import numy as npcancer_df = pd.read_excel("cancer_patient_data_sets.xlsx")
cancer_df = pd.read_csv("cancer_patient_data_sets.csv")

要成功运行以上代码行,请确保将文件上传到 Google Colab 的content文件夹中,或者当您在 Jupyter Notebook 中工作时上传到您的本地文件夹中。你也可以从 S3 或谷歌硬盘上读取文件。

谷歌驱动:

I)将您的 google drive 安装到 colab

from google.colab import drive 
drive.mount('/content/gdrive')

ii)现在,您将在左侧窗格(文件浏览器)中看到您的 Google Drive 文件。右键单击需要导入的文件,选择复制路径。然后在 pandas 中照常导入,使用这个复制的路径。

import pandas as pd 
cancer_df = pd.read_csv('gdrive/My Drive/cancer_patient_data_sets.csv')

AWS S3:现在熊猫可以处理 AWS S3 网址了。简单地做

import pandas as pd
import s3fs

cancer_df = pd.read_csv('s3://bucket-name/file_name.csv')

**构建数据框架:**如果你有数据,想构建一个数据框架,你可以这么做。

sample_df = pd.DataFrame([[1,'Bob','M','31','Builder'],
                  [2,'Sally','F','29','Baker'],
                  [3,'Scott','M','28','Candle Stick Maker']], 
columns=['id','name','gender','age','occupation'])

导出:

您可以通过以下代码行将最终输出保存为 CSV 或 EXCEL 格式

output_df.to_csv('saved_patients.csv', index=False)
output_df.to_excel('saved_patients.xlsx', index=False)

查看:

显示数据帧顶部或底部的几条记录

sample_df.head(5)
sample_df.tail(5)

索引:

索引您的数据帧:

  • 仅索引数据帧中的一个列:
sample_df = sample_df.set_index('id')
sample_df
  • 对数据帧中的多列进行索引:
sample_df = sample_df.set_index(['id','age'])
sample_df
  • 要重置数据帧中的索引:
sample_df.reset_index(inplace = True)
sample_df

子集化:

  • 要从现有数据框架中选择有限数量的列并将其存储在新数据框架中:
df = sample_df[['age', 'name', 'occupation']]
df
  • 要对行进行子集划分并考虑所有列:
#Select first 3 rows :
df[0:3]*# Select first 5 rows (rows 0, 1, 2, 3, 4)* df[:5]*# Select the last element in the list
# (the slice starts at the last element, and ends at the end of the list)* df[-1:]
  • 使用loc方法从我们的数据帧中选择行和列:这个命令通过行和列的标签选择数据。
*# Select all columns for specific rows of index values 0 and 2 where no specific column in the dataframe has any index*data = pd.read_csv("nba.csv")
df = data.loc[[0, 2], :]*# Select all columns for a specific row or multiple rows where a column is set as an index* data = pd.read_csv("nba.csv", index="name")
df **=** data.loc[["Avery Bradley"]] 
OR 
df **=** data.loc[["Avery Bradley", "R.J. Hunter"]]# *Select specific rows and specific columns*data = pd.read_csv("nba.csv", index="name")
df = [["Avery Bradley", "R.J. Hunter"],["Team", "Number", "Position"]]*# Select only one or multiple specific row/rows and multiple columns after resetting index*data.reset_index(inplace = True)
df = data.loc[0, ['Name', 'Number', 'Age', 'Position']] 
OR
df = data.loc[[0,5], ['Name', 'Number', 'Age', 'Position']]
  • 使用iloc方法从我们的数据帧中提取行和列的子集:这个命令允许我们按位置检索行和列。
# *Slice certain number of rows and columns*
df = sample_df.iloc[0:3, 1:4]

*# Select the value of second row and third column* df = sample_df.iloc[2, 3]*# Select all rows and selected columns* df = sample_df.iloc [:, [1, 2]]# *Select certain range of rows and all columns*
df = sample_df.iloc[[0, 2]]
  • 要根据标准选择数据帧:
# Select dataframe where the value of a column is given
df[df.year == 2002]# Select dataframe on multiple conditions
df[(df.year >= 1980) & (df.year <= 1985)]ORdf = df[(df.year >= 2000) & (df.gender == 'M')]
  • 使用isin命令:Pandas isin() 方法有助于选择特定列中具有特定值或多个值的行。
new = sample_df["gender"].isin(["M"])
sample_df[new]ORfilter1 **=** sample_df["gender"].isin(["M"])
filter2 **=** sample_df["occupation"].isin(["Baker", "Builder"])# displaying data with both filter applied and mandatory
sample_df[filter1 & filter2]
  • 要选择数据帧中包含空值的行:
*# To select just the rows with NaN values, we can use the 'any()' method* sample_df[pd.isnull(sample_df).any(axis=1)]
  • 使用 lookup()函数:lookup()函数为 DataFrame 返回基于标签的“花式索引”函数:

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

更换:

替换数据帧中的值:

  • 函数mask()用于替换标准数据框中的所有值
# replace all the values greater than 10 with -25
df.mask(df > 10, **-**25)# replace the Na values with 1000
df.mask(df.isna(), 1000))
  • 使用where()函数根据一个或多个特定标准过滤数据集
filter **=** sample_df["gender"]**==**"M"
data.where(filter, inplace **=** True)ORfilter1 **=** sample_df["gender"]**==**"M"
filter2 **=** sample_df["age"]>24
sample_df.where(filter1 & filter2, inplace **=** True)

提取行或列:

  • 使用get()函数从数据帧中提取一列或多列
sample_df.get("occupation")ORsample_df.get(["name", "age", "occupation"])
  • 使用pop()功能删除一列或多列
# Remove one column from the original dataframe
popped_col **=** sample_df.pop("occupation")
sample_df# make a copy of the data frame and insert the popped column at the end of the other data frame
new **=** sample_df.copy()
popped_col **=** new.pop("name")
# creating new col and passing popped col
new["New Col"]**=** popped_col
new

添加/删除:

删除列:

del sample_df['column_name']
  • 使用drop()功能删除一行或多行或多列
df = data.drop('column_1', axis=1)# Delete multiple columns from the dataframe
df = data.drop(["column_1", "column_2", "column_3"], axis=1)# Delete multiple rows from the dataframe
data = df.drop([0,1], axis=0)
data# drop rows where age is less than 25
df_filtered **=** df[df['Age'] >**=** 25]# drop rows with null values
df **=** df.dropna(how **=** 'all')
  • 向现有数据框架添加新列或新行
# Add a new column in the existing dataframe by providing the values manually in a list format
sample_df['salary'] = [250000, 150000, 100000]
sample_df# Add a new column by performing simple calculation on any other existing column
sample_df['new_col'] = sample_df['salary']*2
sample_df# Add a new column having same constant values
sample_df['new'] = 'y'
sample_df
OR
sample_df['new'] = sample_df.apply(lambda x: 'y', axis=1)# Insert a new row in an existing dataframe:
sample_df.loc[3] = [4, 'Mike', 26, 'Delivery boy']
sample_dfOR

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

在现有数据框架中插入新行

排序和重命名:

按行和列对数据帧进行排序:

# use sort_index() to sort by row index or names
sample_df = sample_df.set_index('name')
sample_df.sort_index(inplace**=**True)# sort on multiple columns by descending order
sort_by_age_occ **=** sample_df.sort_values(by = ['age','occupation'], ascending = False)# sort a column in ascending order
a **=** sample_df.sort_values(by **=**'age', ascending **=** True)

重命名数据帧中的列:

sample_df.rename(columns **=** {'occupation':'Occupation', 'age':'Age', 'name':'Name'}, inplace **=** True)

结合:

有各种类型的连接:

  • 一对一连接:例如当连接索引上的两个对象时(必须包含唯一值)。
  • 多对一连接:例如,将一个索引(唯一的)连接到不同数据框架中的一个或多个列。
  • 多对多联接:联接列上的列。
  • 使用 merge()连接两个数据帧
'''
 There are 3 dataframes (df1, df2, df3) having similar column names - 'id', 'Feature1', 'Feature2'. You can merge 2 dataframes on a specific column.
'''
df_merge = pd.merge(df1, df2, on='id') # Combine two dataframes which will contain all the records
df_outer = pd.merge(df1, df2, on='id', how='outer')# Combine two dataframes which will contain only the common records between the them
df_inner = pd.merge(df1, df2, on='id', how='inner')# Combine two dataframes which will contain the common records between the them along with all the records of first dataframe
df_left = pd.merge(df1, df2, on='id', how='left')# Combine two dataframes which will contain the common records between the them along with all the records of second dataframe
df_right = pd.merge(df1, df2, on='id', how='right')#Combine two dataframes on the records present in the index column
df_index = pd.merge(df1, df2, right_index=True, left_index=True)  df_index
  • 使用 concat()连接相似列名的两个数据帧

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

我们也可以使用append()通过使用result = df1.append(df2)得到上面的结果

  • 使用 concat()连接不同列名和不同行的两个数据帧

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

聚合:

可以将 max()、min()、mean()、first()、last()等函数快速应用于 GroupBy 对象,以获得数据帧中每个组的汇总统计信息。

如果你喜欢这篇文章,你可能也会喜欢下一篇文章,它将更加关注一些重要的函数以及它们在数据工程中的用途。

感谢阅读。😃希望你能像我准备这篇文章时一样喜欢它…

每个数据科学家都必须知道的机器学习的重要主题

原文:https://towardsdatascience.com/important-topics-in-machine-learning-that-every-data-scientist-must-know-9e387d880b3a?source=collection_archive---------61-----------------------

评估机器学习的基础

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

图片作者:特里斯特·约瑟夫

机器学习(ML)是“人工智能的一种应用,它为系统提供了自动学习和根据经验改进的能力,而无需显式编程。”ML 算法用于在数据中寻找产生洞察力的模式,并帮助做出数据驱动的决策和预测。这些类型的算法每天都在医疗诊断、股票交易、交通运输、法律事务等领域被用来做出关键决策。所以可以看出数据科学家为什么把 ML 放在这么高的基座上;它为高优先级决策提供了一个媒介,可以在没有人工干预的情况下实时指导更好的业务和智能行动。

现在,人工智能模型不一定像人类那样“学习”。相反,这些算法使用计算方法来直接从数据中理解信息,而不依赖于预先确定的方程作为模型。为此,使算法确定数据中的模式并开发目标函数,该目标函数最佳地将输入变量 x 映射到目标变量 y 。这里必须注意,目标函数的真实形式通常是未知的。如果函数是已知的,那么就不需要 ML。

因此,其思想是通过对样本数据进行合理的推断来确定该目标函数的最佳估计,然后针对当前情况应用和优化适当的 ML 技术。不同的情况要求对被估计函数的形式作出不同的假设。此外,不同的最大似然算法对函数的形状做出不同的假设,因此,它应该如何被优化。可以理解的是,人们很容易被 ML 的学习内容所淹没。因此,在这篇文章中,我讨论了每个数据科学家都应该知道的两个重要的 ML 主题。

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

图片作者:特里斯特·约瑟夫

  1. 学习的类型

最大似然算法通常分为监督的非监督的,这广义上指的是数据集是否被标记。监督 ML 算法通过使用标签化的例子来预测未来的结果,将过去学到的知识应用到新的数据中。本质上,对于这些类型的问题,正确的答案是已知的,并且基于预测的输出是否正确来判断估计模型的性能。相比之下,无监督 ML 算法指的是当用于训练模型的信息既没有被分类也没有被标记时开发的算法。这些算法试图通过提取样本中的特征和模式来理解数据。

现在半监督学习确实存在,它采取了监督和非监督学习之间的中间地带。也就是说,数据的一小部分可能被标记,而其余部分没有被标记。

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

图片作者:特里斯特·约瑟夫

当给定的任务是分类或回归问题时,监督学习是有用的。分类问题指的是根据模型开发的特定标准将观察结果或输入数据分组到离散的“类”中。一个典型的例子是预测一封电子邮件是垃圾邮件还是非垃圾邮件。该模型将在包含垃圾邮件和非垃圾邮件的数据集上开发和训练,其中每个观察都被适当地标记。

另一方面,回归问题是指接受一组输入数据并确定一个连续量作为输出的过程。一个常见的例子是根据个人的教育水平、性别和总工作时间来预测个人的收入。

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

图片作者:特里斯特·约瑟夫

当特定问题的答案或多或少未知时,无监督学习是最合适的。这些算法主要用于聚类异常检测,因为有可能在不确切知道观察指的是什么的情况下检测整个观察的相似性。例如,人们可以观察各种花的颜色、大小和形状,然后粗略地将它们分成几组,而不必真正知道每种花的种类。此外,假设一家信用卡公司正在监控消费者行为。通过监控交易发生的地点,有可能发现欺诈性交易。例如,假设在纽约经常使用信用卡。如果在某一天,该卡在纽约、洛杉矶和香港使用,那么它可能被认为是一种异常,系统应该向相关方发出警报。

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

图片作者:特里斯特·约瑟夫

  1. 模型拟合

拟合模型是指让算法确定预测值和结果之间的关系,以便可以预测未来值。回想一下,模型是使用训练数据开发的,训练数据是精确反映总体的理想的大型随机样本。这一必要的行动伴随着一些非常不可取的风险。完全精确的模型很难估计,因为样本数据会受到随机噪声的影响。这种随机噪声,以及研究人员做出的大量假设,有可能导致 ML 模型学习数据中的虚假模式。如果试图通过做很少的假设来应对这种风险,就会导致模型无法从数据中获取足够的信息。这些问题被称为过拟合和欠拟合,目标是确定简单性和复杂性之间的适当组合。

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

图片作者:特里斯特·约瑟夫

过度拟合发生在模型从训练数据中学习“太多”时,包括随机噪声。然后,模型能够确定数据中非常复杂的模式,但这会对新数据的性能产生负面影响。训练数据中拾取的噪声不适用于新的或看不见的数据,并且该模型不能概括所发现的模式。某些最大似然模型比其他模型更容易过度拟合,这些模型包括非线性和非参数模型。对于这些类型的模型,可以通过改变模型本身来克服过度拟合。考虑一个非线性方程的 4 次幂。一旦仍然产生可接受的结果,可以通过将模型的幂降低到可能的 3 次方来降低过拟合。或者,可以通过对模型参数应用交叉验证或正则化来限制过拟合。

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

图片作者:特里斯特·约瑟夫

另一方面,欠拟合发生在模型无法从训练数据中学习到足够多的信息时。然后,模型就无法确定数据中合适的模式,这会对新数据的性能产生负面影响。由于所知甚少,该模型无法对看不见的数据应用太多,也无法对手头的研究问题进行概括观察。通常,欠拟合是由于模型设定错误造成的,可以通过使用更合适的 ML 算法来解决。例如,如果用一个线性方程来估计一个非线性问题,就会出现欠拟合。虽然这是真的,但欠拟合也可以通过交叉验证和参数正则化来纠正。

交叉验证是一种用于评估模型拟合度的技术,通过在样本数据集的不同子集上训练几个模型,然后在训练集的互补子集上评估它们。

规则化指的是向模型参数添加信息的过程,以应对模型性能不佳的问题。这可以通过指定参数遵循特定分布来实现,例如正态分布对均匀分布;或者通过给出参数必须落入的值的范围。

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

图片作者:特里斯特·约瑟夫

机器学习模型非常强大,但强大的能力也意味着巨大的责任。开发最合适的 ML 模型要求研究者充分理解手头的问题以及在给定的情况下什么技术是合适的。理解一个问题是被监督的还是未被监督的将提供一些关于将使用什么类型的 ML 算法的洞察力;而了解模型拟合度可以防止部署时模型性能不佳。快乐造型!

参考文献:

expert system . com/Machine-learning-definition/#:~:text = Machine % 20 learning % 20 is % 20 an % 20 application,use % 20it % 20 learn % 20 for % 20 them self。

mathworks . com/discovery/Machine-learning . html #:~:text = Machine % 20 learning % 20 algorithms % 20 use % 20 computational,specialized % 20 form % 20 of % 20 Machine % 20 learning。

NVIDIA . com/blog/2018/08/02/supervised-unsupervised-learning/#:~:text = In % 20a % 20 supervised % 20 learning % 20 model,and % 20 patterns % 20 on % 20 its % 20 own。

machine learning mastery . com/how-machine-learning-algorithms-work/

其他有用的素材:

simpli learn . com/机器学习对数据科学家的重要性-文章

towards data science . com/important-topics-in-machine-learning-you-need-to-know-21 ad 02 cc 6 be 5

machine learning mastery . com/class ification-vs-regression-in-machine-learning/#:~:text = A % 20 regression % 20 problem % 20 requires % 20 the,called % 20a % 20 multi variable % 20 regression % 20 problem。

scikit-learn.org/stable/modules/cross_validation.html

nintyzeros.com/2020/03/regularization-machine-learning.html

导入错误:没有名为“XYZ”的模块

原文:https://towardsdatascience.com/importerror-no-module-named-xyz-45e4a5339e1b?source=collection_archive---------8-----------------------

Jupyter 笔记本找不到你已经安装的软件包?让我们解决问题。

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

UnsplashNeONBRAND 拍摄的照片

如果你像我一样使用 Python 处理数据,那么你应该对标题中的错误信息再熟悉不过了。对你来说,这可能是最容易解决的问题之一。

我一直是这么想的,直到我在我的 Jupyter 笔记本上看到这条错误信息,它几乎让我发疯。

在这篇文章中,我将与你分享我遇到的问题和解决方法。希望能帮你在遇到同样的问题时节省一些时间。

模块导入问题

错误信息是找不到模块,所以我试着通过 pip installeasy_installconda install 安装软件包,并重启 Jupyter 笔记本几次。

该包仍然无法导入笔记本。

为了确保我已经安装了这个包,我还通过在终端中键入“ python ”并导入这个包来检查我的 python 环境。这样做没有错误,这表明软件包安装正确。

因此,我很确定只有我的 Jupyter 笔记本有问题。

我想更好地框架如下问题。

为什么我不能导入已经安装在我的 Jupyter 笔记本上的 Python 包?

检查

要检查的是 Jupyter 笔记本使用的是哪种 python。因此,在 Jupyter 笔记本中键入下面的命令来提取可执行路径。

import sys
sys.path

这是我得到的,

'/Users/yufeng/anaconda3/envs/py33/lib/python36.zip',
 '/Users/yufeng/anaconda3/envs/py33/lib/python3.6',
 '/Users/yufeng/anaconda3/envs/py33/lib/python3.6/lib-dynload',
 '/Users/yufeng/anaconda3/envs/py33/lib/python3.6/site-packages',
 '/Users/yufeng/anaconda3/envs/py33/lib/python3.6/site-packages/aeosa',
 '/Users/yufeng/anaconda3/envs/py33/lib/python3.6/site-packages/IPython/extensions',
 '/Users/yufeng/.ipython'

然而,如果我在系统的 Python 中键入相同的命令,我会得到以下结果,

'/Users/yufeng/anaconda3/lib/python37.zip', '/Users/yufeng/anaconda3/lib/python3.7', '/Users/yufeng/anaconda3/lib/python3.7/lib-dynload', '/Users/yufeng/anaconda3/lib/python3.7/site-packages'

到现在为止,我们可以看到 Jupyter 笔记本系统默认 Python 在 Python 环境上的区别。所有的包安装都通过 pip 安装conda 安装定向到系统默认的Python/3.7 和而不是py33 和笔记本所使用的环境。

解决方案

从头开始重新构建整个环境肯定是可行的,但是最简单的解决方案是将目标包安装到 Jupyter 笔记本的正确环境中。

在我的例子中,如上所示,Jupyter Notebook 中的可执行 python 是

/Users/yufeng/anaconda3/envs/py33/lib/python3.6

所以,我用它自己的 pip 重新安装包。通常自己的 pip 安装在同一个根目录下名为 /bin/ 的文件夹中。

/Users/yufeng/anaconda3/envs/py33/bin/python -m pip install plotly

在那之后,我能够成功地在我的 Jupyter 笔记本中导入新包(“plotyly”,可以更改为您的目标包名称)。

就是这样,简单又有用的一招。

通过分享这个经验,祝你不要像我一样在问题上浪费很多时间。

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

斯科特·沃曼在 Unsplash 上拍摄的照片

将数据导入 Google Colab——干净利落的方式

原文:https://towardsdatascience.com/importing-data-to-google-colab-the-clean-way-5ceef9e9e3c8?source=collection_archive---------0-----------------------

因为干净的代码很重要!

在这篇文章中,我将介绍:

  • Google Colab 简介
  • 2 种常用的“快速而肮脏”的方法将数据上传到 Colab
  • 2 种自动化的“干净”方法将数据上传到 Colab

Google Colab 是什么?

现在还很难相信,但这是真的。我们可以在 Google Colab 上免费运行重型数据科学笔记本**。**

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

Google Colabs

Colab 是一项云服务,这意味着谷歌的服务器将运行笔记本电脑,而不是你自己的本地电脑。

也许更令人惊讶的是,****它背后的硬件相当不错!****

Colab 是完美的新笔记本解决方案吗?

Google Colab 有一个大问题,以前经常讨论,那就是你数据的存储。笔记本电脑,例如 Jupyter 笔记本电脑,通常使用存储在本地计算机上的数据文件。这通常使用简单的 read_csv 语句或类似语句来完成。

云的本地不是你的本地。

但是谷歌合作实验室正在云中运行。云的本地不是你的本地。因此 read_csv 语句将在 Google 端搜索文件,而不是在您端。然后它就找不到了。

如何将您的数据输入 Colab——手动方式?

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

乌云因为手动上传不是最好的做法!由 LoboStudio HamburgUnsplash 上拍摄的照片

为了将您的数据输入到您的 Colab 笔记本中,我首先讨论两种最常见的方法,以及它们的优缺点。之后,我讨论了两个备选解决方案,它们可能更合适,尤其是当您的代码必须易于工业化时。

手动方法 1 —使用 files.upload()将数据上传到 Colab

  1. 直接在 Colab 笔记本中使用 files.upload() 会给你一个传统的上传按钮,允许你将文件从你的计算机移动到 Colab 环境中。

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

直接在 Colab 笔记本中使用 files.upload()会给您一个传统的上传按钮,允许您将文件移动到 Colab 环境中

2.然后你用木卫一。StringIO()和 pd.read_csv 一起将上传的文件读入数据帧

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

然后你用木卫一。StringIO 与 pd.read_csv 一起将上传的文件读入数据帧

使用 files.upload()将数据上传到 Colab 的优势: 这是所有方法中最简单的方法,尽管它需要几行代码。

使用 files.upload()上传数据到 Colab 的缺点: 对于大文件,上传可能需要一段时间。然后每当笔记本电脑重新启动时(例如,如果它失败或其他原因…),必须手动重新上传。这不是最好的解决方案,因为首先我们的代码在重启时不会自动重新执行,其次在笔记本出现故障的情况下需要繁琐的手动操作。****

手动方法 2——将 Google Drive 安装到 Colab 上

在开始使用笔记本电脑之前,请将您的数据上传到 Google Drive。然后将 Google Drive 安装到 Colab 环境中:这意味着 Colab 笔记本现在可以访问 Google Drive 中的文件。

  1. 使用 drive.mount()挂载您的驱动器

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

2.直接访问 Google Drive 中的任何内容

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

把你的 Google Drive 挂载到 Colab 上的优势: 这也是相当容易的。Google Drive 非常用户友好,对大多数人来说,将你的数据上传到 Google Drive 没有问题。此外,上传完成后,重启笔记本时不需要手动重新加载。所以比方法 1 好。

将你的 Google Drive 挂载到 Colab 上的缺点: 我从这种方法中看到的主要缺点主要是公司/工业使用。只要您在从事相对较小的项目,这种方法就很棒。但是如果访问管理和安全处于危险之中,你会发现这种方法很难产业化。****

此外,您可能不希望处于 100%谷歌的环境中,因为多云解决方案让您更加独立于不同的云供应商。

干净利落的方式—使用外部数据存储

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

干净的数据存储是最佳实践!Em bé khóc nhè 在 Unsplash 上拍摄的照片

如果您的项目很小,并且您知道它将永远只是一个笔记本,那么以前的方法是可以接受的。但是对于任何未来可能会变得更大的项目,将数据存储从您的笔记本电脑中分离出来是朝着更好的架构迈出的良好一步。

如果你想在你的 Google Colab 笔记本上建立一个更干净的数据存储架构,尝试一个合适的数据存储解决方案。

Python 中有许多与数据存储连接的可能性。我在这里提出两个解决方案: AWS S3 用于文件存储SQL 用于关系数据库存储:

清洁方法 1 —连接一个 AWS S3 桶

S3 是 AWS 的文件存储,其优势在于与之前描述的向 Google Colab 输入数据的方式非常相似。如果你不熟悉 AWS S3,不要犹豫,看看这里

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

亚马逊 S3 是 AWS 简单存储服务——一种易于使用的云中文件存储

从 Python 访问 S3 文件存储是非常干净的代码,并且非常高效。添加认证是可能的。

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

Pandas 允许使用 s3fs 直接从 s3 读取数据

配合 Colab 使用 S3 的优势:
S3 作为一种数据存储解决方案受到软件社区的重视,而 Google Drive 虽然更受个人用户的青睐,但被许多开发者青睐只是为了与其他 Google 服务的集成。

因此,这种方法改善了你的代码和架构!

将 S3 与 Colab 一起使用的缺点: 要应用这种方法,您将需要使用 AWS。这很容易,但在某些情况下(如公司政策),这可能仍然是一个缺点。此外,每次加载数据都需要时间。这可能比从 Google Drive 加载要长,因为数据源是独立的。

清理方法 2 —将 SQL 数据库连接到 Colab

如果您的数据已经存在于 MySQL 或其他关系数据库中,那么将您的 Colab 笔记本直接插入数据库也是一个不错的解决方案。

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

SQLAlchemy 是一个包,它允许您将 SQL 查询发送到您的关系数据库,这将允许在这个单独的 SQL 环境中拥有组织良好的数据,同时仅将您的 Python 操作保存在您的 Colab 笔记本中。

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

将 SQL 数据库连接到 Colab 的优点: 当您开始使用更重要的应用程序,并且希望在开发过程中已经有了良好的数据存储时,这是一个好主意。

将 SQL 数据库连接到 Colab 的缺点:
将关系型数据存储用于非结构化数据是不可能的,但是非关系型数据库可能是这种情况下的答案。在数据量非常大的情况下,更严重的问题可能是查询执行时间。管理数据库也是一种负担(如果您没有数据库或者如果您不能轻松地共享访问权限)。

结论

谷歌 Colab 笔记本电脑很棒,但要将数据输入和输出可能是一场真正的斗争。

谷歌 Colab 笔记本电脑很棒,但要将数据输入和输出可能是一场真正的斗争。

手动上传导入数据或者挂载 Google Drive 都是好用但是产业化难度大。像 AWS S3 或关系数据库这样的选择会让你的系统更少手工操作,因此更好。

2 个手动方法非常适合小型短期项目,当项目需要一个干净的数据存储时,应该使用带有外部存储的两个方法。

在为时已晚之前,仔细考虑你的架构!

每种方法都有其优点和缺点,只有您才能决定哪种方法适合您的使用情况。无论您使用何种存储,但请务必在为时已晚之前全面考虑您的架构!

我希望这篇文章能帮助你构建你的项目。敬请期待更多内容,感谢您的阅读!

使用 Amazon EMR 上的 Apache Hive 导入 DynamoDB 数据

原文:https://towardsdatascience.com/importing-dynamodb-data-using-apache-hive-on-amazon-emr-651d468898c6?source=collection_archive---------28-----------------------

使用 Amazon EMR 和 Hive,您可以快速高效地处理大量数据

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

照片由科林斯·莱苏里Unsplash 拍摄

本文描述了将数据导入 AWS DynamoDB 数据库的多种方法之一。这里解释的选项使用 Amazon EMR 和 Hive。使用 Amazon EMR 和 Hive,您可以快速有效地处理大量数据,例如将数据从 Amazon S3 导入 DynamoDB 表。

这个例子实现了什么?

  1. 每天,一个外部数据源都会向 S3·巴特发送一个包含大约 1000 条记录的 csv 文件。
  2. 将 csv 对象放入 S3 存储桶时将被触发的 lambda 函数。
  3. Lambda 函数将启动 EMR 作业,步骤包括:
  • 创建一个引用 DynamoDB 中存储的数据的配置单元表。
  • 创建一个引用亚马逊 S3 的位置的配置单元表。
  • 将数据从 S3 表加载到 DynamoDB 表。

下图显示了该流程的架构。

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

先决条件

  • 对云形成的基本了解。
  • 对电子病历的基本理解。
  • 设置 AWS 帐户。
  • 安装无服务器框架

现在,我们开始吧

在开始之前,安装 无服务器框架 。打开一个终端,输入npm install -g serverless

项目目录下有一个yml文件(serverless.yml))。让我们开始在模板文件中定义一组对象,如下所示:

S3 水桶

有两个 S3 桶, LogBucket 用于 EMR 日志, S3BucketCsvimport 用于存储 csv 文件。

DynamoDB 表

从 S3 加载 csv 数据的 DynamoDB 表。

λ函数配置

serverless.yml添加 lambda 功能配置。它将由 S3 新创建的对象事件触发,lambda 函数将启动一个 EMR 作业流来处理数据导入。

IAM 角色

我们还需要为 lambda 函数创建 IAM 角色,这样我们的 lambda 函数就有权限启动 EMR 作业流。

添加 lambda 函数

让我们添加一个 lambda 函数来创建一个 AWS EMR 集群,并添加步骤细节,如配置单元脚本的位置、参数等。我们可以为 EMR 使用 boto3 库,以便创建一个集群,并从 lambda 函数动态提交作业。

配置单元脚本

Ad 最后…让我们添加 Hive 脚本。

第一步。创建配置单元和 S3 之间的映射

我们将创建一个映射到 csv 数据文件的外部配置单元表。

第二步。正在创建配置单元和 DynamoDB 之间的映射

在配置单元和 DynamoDB 中的 Features 表之间建立映射。

第三步。用 S3 的数据加载表

将当前日期添加为分区,并在 S3 加载包含 csv 数据的表。

第四步。从亚马逊 S3 导入一个表格到 DynamoDB

使用下面的配置单元脚本将数据从亚马逊 S3 写到 DynamoDB。

请注意,DynamoDB 表上的 Amazon EMR 操作算作读/写操作,并且受表的调配吞吐量设置的限制。更多详情请访问电子病历文件

现在让我们部署服务并进行测试!

$sls deploy --stage dev

在脚本部署后,将一个 csv 文件复制到带有created_date={CURRENT_DATE}前缀的 S3 存储桶,例如

$aws s3 cp csv/contacts.csv s3://myemr.csv.import.dev/uploads/created_date=2020-02-03/contacts.csv

然后,我们可以转到 AWS EMR 控制台,检查 EMR 步骤的进度。

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

完成所有步骤需要几分钟时间,运行上述步骤后,群集将自动终止。

接下来,我们可以转到 AWS DynamoDB 控制台,验证数据是否已经加载到 DynamoDB 中:

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

最终,导入过程花费了大约 6 分钟的时间,将 1000 条总共 76kb 的记录加载到 DynamoDB 表中,写入容量单位为 10,没有启用自动缩放。

大概就这些,感谢阅读!

希望你觉得这篇文章有用,你可以在我的 GitHub repo 中找到完整的项目。

大数据世界中数据最小化原则的引入

原文:https://towardsdatascience.com/imports-of-the-data-minimization-principle-in-the-big-data-world-9b2c85e1c14e?source=collection_archive---------36-----------------------

不合规的代价很大

大数据时代,数据的价值与日俱增。随着数据环境每天每秒都在扩大;并且数据变得无处不在并且更容易收集,个人数据被大量挖掘和存储,以便在位置跟踪、医疗保健、预测性警务、预测性司法、欺诈检测、广告、媒体和娱乐的应用中被重新利用。但是,与此同时,它也引发了一些与大数据效应相关的新问题,,例如。数据和隐私泄露等。

这样的新问题可以用一些问题来举例:如果你不做危险的工作,你的雇主应该询问你的血型吗?当你接受医疗服务时,医生应该询问你的宗教信仰或种族吗?如果你申请的不是体力工作,招聘人员可以询问你健康状况的细节吗?

在处理数据海洋中类似的问题时,数据最小化原则可以帮助你脱颖而出。作为核心隐私原则和标准程序,数据最小化原则实际上是作为减轻数据海啸风险的解决方案而出现的。因此,在我们现在生活的大数据世界中,该原则的重要性正随着热情而增强。

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

摄影:卢卡斯·布拉塞克/Unsplash

大数据!什么是?

“大数据”不是我讨论的主要内容。然而,为了澄清上下文,可以在一个简短的对话中进行。这个术语基本上是指包括政府和企业在内的组织结合不同的数字数据集,然后使用统计学和其他数据挖掘技术从中提取隐藏的信息和令人惊讶的相关性的新方法。

大数据实际上是一种方法论,涉及基于人工智能和机器学习技术的新分析技术,其目标是找到揭示新见解或真理的“小模式”或“隐藏的相关性”。此外,大数据现在因其“4v 特征”而更为人所知,即*。数量、准确性、速度、多样性(数据融合)和机器学习。*

为了说明问题,大数据中的“大”不一定是数据库的大小,而是大量的数据源,它是大的(混合数据,参见 Steward 等人的)。2019),因为大量的实时数据是通过随机采样、处理和产生的各种来源存储的,以数据融合的方式创建完整的自动化见解。

大数据的来源就在我们身边,大致可以分为业务数据、人的数据和来自物联网的机器数据。令人惊讶的是,当大数据应用于法律环境时,它引发了严重的深层次问题,并引发了关于其偏见、不透明和歧视性影响的严重辩论。

数据最小化原理是什么?

数据最小化原则是数据保护的一般原则之一,理想情况下,这意味着收集的数据量应该是开展业务所需的最小数据量。

该原则主要假设将个人资料的收集和保留限制在与实现特定目的直接相关和必要的范围内;也就是说,组织应该尽可能只收集和保留最少量的数据。

例如,如果是医疗服务,性别可能比宗教或种族更相关。 申请办公室工作的人不应该被问及健康状况的细节。

在个人数据保护的背景下,应优先考虑采用数据最小化政策,而不是“保存一切”的方法,不必要的数据将被丢弃,同时仅保留相关和必要的数据。此外,这些数据只应根据法律或法规的需要或要求保留。

将该原则纳入法律文书:

作为欧盟数据保护价值观之一,数据最小化在 2018 年《一般数据保护条例(GDPR)》第 5、25、47、89 条中进行了实例化。在欧盟数据保护法的七项基本数据保护原则中,这些原则是体现监管框架精神的法律的核心[GDPR,第 2 章,第 5 (1)条]。

根据该法规,个人数据应“充分、相关,并限于”与处理这些数据的“目的”相关的“必要”范围内(数据最小化)。研究者不应该收集对特定研究问题没有价值的信息。该原则是法律的核心,体现了监管框架的精神。

在建立电子邮件订阅列表时,收集除姓名和电子邮件之外的任何信息(如出生日期、宗教信仰等)。),可能不符合 GDPR 。可能需要来自 有害作业 的员工的血型明细。但是,由雇主掌握其余劳动力的这种数据可能是不相关的和多余的。

根据《GDPR 》,如果认为个人资料不完整或不足以达到处理的目的,则该资料是“不充分的”;并且考虑到上下文和性质,个人有权完成该数据(纠正权;例如第 16 条,GDPR)。然而,如果新的目的与旧的目的不矛盾,甚至进一步的处理也是允许的。

个人也有权让您删除对您的目的不必要的任何数据(擦除权或被遗忘权)。因此,在违反数据最小化原则的情况下,个人也将有权删除(例如)。第 17 条,GDPR)。在违约情况下,个人可以采取法律行动。

GDPR 还规定了数据最小化原则的例外情况,允许出于“统计目的”更长时间地保留个人数据。那些不再需要保留的数据将被删除。这一义务使数据最小化的原则更加有力。

数据最小化原则也纳入了 2018 年加州消费者隐私法(CCPA),以及其他法规,如 1988 年(澳大利亚)隐私法。事实上,第一个监管问题涉及个人数据保护和消费者保护;然后是确保消费者法律在大数据技术上的应用。

不合规后果:

在欧洲,违反基本数据保护原则可能导致巨额罚款,最高可达 2,000 万€,或全球年营业额的 4%,以较高者为准(GDPR 第 83(5)(a)条)。因此,该原则或多或少是严格的,这取决于数据处理权限可能带来的后果。

此后,原则要求,存储的每一个数据都需要通过一系列目标进行过滤。如果数据不符合任何预期目的,那么数据应该被丢弃。

在土耳其,一家银行因违反数据最小化原则而面临制裁,因为该银行向民事法院提供了其客户六个月的账户对账单,而法院只要求提供最近三个月的对账单。一所意大利学校因非法数据处理而被罚款(根据该原则),也就是说,因在没有充分法律依据的情况下,通过在大门张贴来传播学生(未成年人)的个人数据。

作为 2018 年 3 月 GDP 下的第一个案件,丹麦数据保护局对出租车公司 Taxa 罚款 120 万克朗(18 万美元),用于保存与约 900 万次单独出租车乘坐有关的个人数据,超过了合法的两年保留政策。当局还应检查数据保留政策是否制定得当并得到认真遵守。

在法国,今年 8 月,一家在线零售商“Spartoo”因违反数据最小化原则而被罚款 250,000 欧元,其中,对客户服务员工接听的电话进行完整和永久记录被认为是过度的。

在线卖家记录和保存通过电话下单时交流的客户银行详细信息也“对于预期目的而言是不必要的”。甚至,在打击欺诈的背景下,除了要求提供身份证之外,收集客户的健康卡副本被认为是过度和不相关的,因为健康卡副本包含的数据比身份证多。

少即是多,有时:

虽然数据最小化方法据称对大数据分析有严重影响,但它有许多好处。它基本上降低了成本,防止数据泄露造成灾难性后果,并受到刑事过失的指控。事实上,持有不必要的数据对你来说弊大于利。

当仅存储必要的数据时,数据丢失和计算机黑客攻击的风险也被最小化。因此,数据分类、在处理、保留和访问方面拥有清晰和合理的数据策略(通过设计或默认)以及定期审查数据可以将 venture 从数据爆炸中解救出来。

该原则还建议个人采用 DIY(自己动手)方法来保护其个人数据,方法是通过数据匿名化(在不可能的情况下)或假名化,或者通过使用加密技术、管理 cookies 的浏览器插件或块跟踪,以及其他用于最小化数据收集的工具,尽管也存在重新识别匿名个人数据的风险。从今以后,现在可以有把握地认为,这一原则对公司和个人都有利。

需要提供的“更少的数据”也可以使在线交易变得更加容易、快捷和用户友好。值得注意的是,隐私政策因此在商业网站上迅速扩大,成为包括数据最小化方法在内的公平做法,以通知用户有关其个人数据的收集和使用,即使没有任何全面的法律来规范隐私政策的实质内容。

这就是为什么;不可否认的是,在这种情况下,数据最小化原则限制了作为合法处理个人数据的基础的充分性要求,也是民主社会中必要和相称的组成部分。

本月关于 AI/ML 的令人印象深刻的中型文章

原文:https://towardsdatascience.com/impressive-medium-articles-on-ai-ml-this-month-2adfba75fb24?source=collection_archive---------46-----------------------

随着十月即将结束,这里有一些你不应该错过的与人工智能和机器学习相关的顶级文章。

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

Unsplash 上由 Varun Gaba 拍摄的照片

10 月一直是 2020 年最短的月份之一;不管怎样,人工智能和机器学习领域已经有了很多发展,让媒体作家们忙得不可开交。

以下是这几个月推荐的文章;所有这些文章肯定会吸引人工智能爱好者和机器学习实践者。

如果你遇到任何人工智能/人工智能相关的文章,希望我阅读并包含在我的每周/每月文章报道中,请随时在文章的评论部分给我加标签,我会做一个评论。或者在LinkedIn上连接并发送文章链接。

下面是对预期结果的快速总结。一定要检查每一篇文章。

  • Awais Bajwa 提供了关于中国如何利用人工智能应对当代最糟糕的疫情的见解。
  • Andre Ye 描述了研究人员在开发算法和机器学习模型时采用的一种方法,这些算法和模型可以模仿人类用来学习的过程。
  • 在阅读了妮可·詹韦·比尔兹的文章后,准备好停止使用“人工智能”这个术语。
  • 丹·麦卡里 写了一篇短文,重点介绍了最近购买英伟达 的好处。
  • 道格拉斯·拉什科夫 提供了他的著作《 团队人类 》中的摘录,其中他谈到了人类与技术之间似乎是依赖性适应的逆转。

成功人工智能的关键?持续的人类干预。作者道格拉斯·拉什科夫

道格拉斯·拉什科夫(Douglas Rushkoff)提供了他的书“ Team Human ”中的摘录,他在书中谈到了人类和技术之间的依赖适应的逆转。

根据道格拉斯的说法,接受任何解决问题的技术方案作为默认方案,开启了一个世界,在这个世界里,我们试图让人类的行为和偏好符合算法。反过来,我们也接近了优化技术以满足人类需求的最初前提。

在当今世界,我们将任何技术失败都归咎于人为错误,而不是系统故障,这似乎很奇怪,道格拉斯正确地指出,人类现在已经适应了技术,而不是相反。

如果整本书与道格拉斯在这篇文章中介绍的一样,那么《人类团队》似乎是一个大开眼界的故事,我们都需要意识到,软件和硬件可能不是大多数人类问题的绝对答案。

中国如何利用人工智能对抗新冠肺炎作者阿瓦斯·巴杰瓦

Awais 简要探讨了中国政府机构为遏制 Covid19 的传播而招募的人工智能应用和技术,同时为其公民维持一种正常运作的社会形式。

在处理个人隐私时,中国使用大规模监控系统一直是一个有争议的话题。

Awais 探讨了曾经不受欢迎的公民治理和监控方法的好处,这是中国处理新冠肺炎危机优于全球某些国家的原因,尽管最初报道的新冠肺炎病例来自中国。

人工智能技术、大数据和机器人在有效应对新冠肺炎病毒在中国的传播方面发挥了更大的作用。Awais 提到利用各种形式的基于人工智能的技术,如面部识别,面具检测和热量读取,以监测,警告和通知市民在他们当地附近的所有新冠肺炎相关病例。

阅读这篇文章时,我惊讶于阿里巴巴和腾讯等大型科技公司与其他小型创业公司合作,提供开源工具和研究成果,帮助新冠肺炎应用程序和解决方案的快速发展。其中一些解决方案被公共部门使用,如医疗保健和警察机构。

** [## 中国如何利用人工智能对抗新冠肺炎

深度学习的最新研究,包括计算机视觉和自然语言处理(NLP),使人工智能提供了…

medium.com。](https://medium.com/datadriveninvestor/how-china-used-artificial-intelligence-to-combat-covid-19-f5ebc1ef93d)**

深度学习迫切需要的人类大脑:零起点学习指南作者安德烈·叶

向对探索未开发的研究领域感兴趣的机器学习从业者推荐 read】

Andre Ye 的文章描述了研究人员在开发算法和机器学习模型时采用的方法,这些算法和模型可以模拟人类用来学习的过程。

更具体地说,安德烈在本文中描述的技术旨在以某种方式复制人类幼儿所拥有的理解和学习能力的有效衍生。

这篇信息丰富的描述性文章是对正在进行的研究的世界的一个可访问的介绍,这些研究还没有发展成成熟的可应用的技术。

也就是说,Andre 提出和描述的方法可能是机器学习中尚未发现的未来发展起源的一个窗口。

零拍学习技巧对我来说一直是个谜。尽管如此,Andre 还是展示了相关研究论文的关键要点,并通过简单易懂的例子将直觉归纳到技术范式中。

** [## 深度学习迫切需要的人类大脑:零射击学习指南

以及令人尴尬的简单 ZSL 算法

medium.com](https://medium.com/@andre_ye/what-the-human-brain-has-that-deep-learning-desperately-needs-a-guide-to-zero-shot-learning-2e296741ce51)**

我们能消灭“人工智能”这个术语吗?由妮可·珍妮薇买单

一篇深入探讨被广泛滥用的术语“人工智能”呈现给不知情观众的隐藏期望和虚假现实的文章。

Nicole 提供了人工智能作为学习和研究领域的初始信息。

涵盖人工智能的历史将提到该领域经历的以往人工智能冬天。妮可也暗示了第三次人工智能冬天的可能性和重现的可能性。

在文章中,Nicole 暂时离开了人工智能这个术语,转而使用一个更容易接受的术语:机器学习。

在这篇文章中提到了 ML 专长,但是 Nicole 很快解释了机器学习的缺点,包括婴儿拥有的更广泛的学习能力。婴儿的学习能力是我们今天使用的机器学习技术目前无法实现的壮举。

读完这篇文章后,你可能会羞于使用人工智能这个术语,Nicole 对这个术语可能造成的误导提出了一些很好的观点。

尽管唱反调,我还是要说,人工智能这个术语给人工智能领域带来了耳目,这导致了更多的金融投资和对该领域的兴趣。

人工智能一词可以被视为我们用来娱乐每个人的吉祥物,而真正的工作和进展正在后台进行。

阅读这篇文章并分享你的想法。

** [## 我们能消灭“人工智能”这个术语吗?

我们正在加深数据科学的可信度危机

medium.com](https://medium.com/better-programming/kill-artificial-intelligence-7bc02f85ea70)**

英伟达收购 ARM 对 Graph Technologies 的影响

Dan McCreary 写了一篇短文,重点讲述了最近由 NVIDIA 收购 Arm Holding 的好处。

NVIDIA 是大多数机器学习从业者熟悉的公司,另一方面,Arm 可能不那么知名,但 Dan 在这篇文章中做了很好的工作,简要介绍了 Arm 和该公司的目的。

大多数机器学习实践者并不完全关心 GPU 的硬件细节。无论如何,Dan 提供了深度学习领域中 GPU 应用的相关性和影响的简要历史。

Dan 阐述了 GPU 对图像数据处理加速的影响,包括当前硬件在处理稀疏矩阵方面的局限性。

丹在他的文章中提到,英伟达收购 Arm 的原因是,英伟达正在为开发硬件奠定基础,这些硬件可以处理人工智能等领域使用的更复杂的数据表示格式。

本文是广大机器学习从业者的必读之作。Dan 为 ML 工程师日常使用的硬件的未来状态提供了重要的见解和信息。

非常适合阅读:

  • 机器学习从业者
  • 硬件架构师

** [## 英伟达收购 ARM 对 Graph Technologies 的影响

在本文中,我们将关注 NVIDIA 最近以 400 亿美元收购 Arm Holdings。然后我们会看…

medium.com](https://medium.com/@dmccreary/the-impact-of-nvidia-acquisition-of-arm-on-graph-technologies-76449c8b45f9)**

我希望这篇文章对你有用。

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 邮件列表 获取每周简讯
  2. 跟着我上
  3. 通过 LinkedIn 联系我

本月关于 AI/ML 的令人印象深刻的中型文章

原文:https://towardsdatascience.com/impressive-medium-articles-on-ai-ml-this-month-48e6d119bbfc?source=collection_archive---------31-----------------------

随着九月即将结束,这里有一些你不应该错过的与人工智能和机器学习相关的顶级文章。

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

Unsplash 上由 Varun Gaba 拍摄的照片

九月的最后一天就要到了,就像任何其他月份一样,有大量关于人工智能和人工智能主题的高质量文章。

在这篇文章中,你会发现一个中型文章的策展,这些文章有令人印象深刻的内容和关键要点,机器学习从业者和人工智能爱好者将会欣赏。

如果你遇到任何 AI/ML 相关的文章,想让我阅读并包含在我的每周/每月文章报道中,请随时在文章的评论部分给我加标签,我会做一个评论。或者在LinkedIn上连接并发送文章链接

人工智能解释大爆炸前发生的事情柯克·奥密特

GPT-3 赫然解释了一切的起源

柯克·奥密特的文章是他自己和 GPT-3 的对话,被称为*‘智慧存在’。*

对话的内容是围绕大爆炸的起源和其他相关的话题,如时间,空间和宇宙。

我真的以为会很无聊,或者至少会对对话中“明智的存在”的输出留下一点印象。

读完对话和文章的全部内容后,我不得不承认来自“智慧生物”的回应感觉几乎像人类,并且超出了我最初的预期。这些回答被很好地组织在一起,并具有某种形式的逻辑,以及在回答超出人类想象范围的问题时尽可能多的逻辑。

我从这篇文章中得到的关键是,GPT 3 语言模型显然非常健壮,能够模仿创造性。它还能够利用来自其训练数据的相关文本源来提供一些适当的响应。

尽管应该指出,GPT-3 的反应实际上并不是唯一的,也不是推理的产物。反正现在不会。

非常适合阅读:

  • AI 爱好者

[## 人工智能解释了大爆炸之前发生的事情

下面是我与 OpenAI 的 GPT-3 的语言模型的对话。我给了 GPT-3“智慧生物”的角色所有的…

medium.com](https://medium.com/ai-in-plain-english/artificial-intelligence-explains-what-happened-before-the-big-bang-e4a9e7fefbab)

T4Claire d . Costa 人工智能为谷歌产品提供动力

简要了解人工智能在几款谷歌产品中是如何被利用的

根据 Claire D. Costa 的说法,谷歌声称其旗舰搜索引擎和其他广泛使用的产品的大部分进步都源于采用基于人工智能的技术和技巧。

带着“将人工智能的好处带给每个人”的首要目标,克莱尔的文章简要探讨了谷歌投资人工智能的最初驱动力。

Claire 文章的主要内容探索了 12 个具有某种形式的嵌入式人工智能的谷歌知名产品。文章中包含的产品从硬件到软件都有,每个产品都以一个类似于简介的形式呈现,包括发布日期、开发语言、访问 URL 等等。

这篇文章简要介绍了人工智能在谷歌的几个产品中是如何被利用的。

每个产品的描述都是用通俗易懂的语言编写的,这使得大多数读者都可以轻松地阅读本文的内容。

适合阅读:

  • 技术专家

[## 人工智能为谷歌产品提供动力

看看 AI 是如何深度融入谷歌产品的

towardsdatascience.com](/artificial-intelligence-powering-google-products-18e191da88d0)

为什么我要从 Ken Jee 开始数据科学

数据科学运动,邀请您参加

Ken Jee 是数据科学社区中杰出的 YouTuber ,他发起了一场运动,专注于在数据科学从业者中发展和保持势头。

在您的数据科学学术或专业旅程中,您有时可能会遇到知识积累停滞或缺乏灵感的时期。这种学习和进步停滞不前的感觉促使 Ken 重新审视数据科学的基础主题。

通过接受问责制和一致性的概念,Ken 发起了一场名为#66DaysOfData 的互联网运动。

根据 Ken 的说法,#66DaysOfData 是一项养成习惯和激发灵感的运动,参与者每天至少花五分钟学习数据科学相关主题。鼓励参与者在 LinkedIn、Twitter 等平台上分享他们的学习成果。

对于数据科学从业者来说,这是一个加入数据科学社区的机会,共同努力在社区和个人中激发灵感和推动动力。

以下链接提供了更多信息:

这篇文章很适合阅读:

  • 数据科学从业者
  • 数据科学专业的学生

[## 为什么我要重新开始数据科学?

介绍#66DaysOfData

towardsdatascience.com](/why-im-starting-data-science-over-21bec8036ce9)

如何联系到某方公司?罗马 Orac

从理论上讲,在 LinkedIn 上的自我推销可以让你在 FANG 公司找到一份工作。

Roman Orac 写了一篇短文,描述了他与一位方(脸书、亚马逊、、谷歌)招聘人员就一个可能的工作机会进行对话的行为。

在媒体上写作是在特定领域建立个人品牌的一种行之有效的方式,看起来罗曼一直在媒体上写技术文章。罗曼认为,在介质上书写是他接触方招募人员的最初原因。

通过与招聘人员的直接联系,在最初的电子邮件通信后,Roman 发现一个简单的 LinkedIn 搜索已经导致他的个人资料显示在搜索结果中。

罗曼将他的崛起归功于在 LinkedIn 搜索结果页面上输入“数据科学”和“编程”等术语时的排名,这一切都归功于他之前在 LinkedIn 上发布的自我宣传文章。

通过在 LinkedIn 上的自我宣传,Roman 获得了很高的互动、联系和个人资料浏览量,这可能导致 Roman LinkedIn 个人资料在搜索“数据科学”时显示出来。

虽然 Romans 的文章是基于一种理论,但自我推销的社交媒体平台已经证明可以提供开发者和机器学习从业者获得新工作角色和机会所需的曝光率。

非常适合阅读:

  • 机器学习从业者
  • 数据科学家

[## 一个方公司怎么联系?

最近一家方公司的招聘人员联系了我。为什么是现在而不是以前?关于如何提高的一些建议…

towardsdatascience.com](/how-to-get-contacted-by-a-fang-company-21711c197f80)

作为一名数据科学家,我在 6 个月里学到了什么 妮可·珍妮薇比尔

从作为专业数据科学家的经历中获得的经验教训。

六个月是很短的时间,但在机器学习行业,对于一个人来说,获得如何拥有成功的机器学习生涯的宝贵知识是绰绰有余的。

Nicole Janeway Bills 与 Medium 读者分享了她作为数据科学家的六个月经验。

在这篇文章中,Nicole 谈到了通过阅读研究论文、探索 Github 资源库、听播客和理解机器学习领域的硬件组件所学到的经验。

其中一个让我印象深刻的关键点是 Nicole 通过研究数据科学报告的 Github 问题产生新想法的非正统方法。

除了产生想法之外,Nicole 还分享了探索 Github 问题的额外好处,包括了解软件包的弱点,在承诺在项目中使用软件包之前评估软件包开发者社区的活动水平。

Nicole 谈到了数据科学家需要识别特定行为的社会科学线索,这些线索在探索与人类或基于人类的活动相关的数据时可能不明显。

对人类行为引起的外部因果关系和相关性的理解可以为开发机器学习解决方案的独特方法提供直觉。

强烈推荐用于:

  • 数据科学家

[## 作为一名数据科学家,我在 6 个月里学到了什么

我找到了我梦寐以求的工作。以下是一些关键要点。

towardsdatascience.com](/6-months-data-science-e875e69aab0a)

我希望这篇文章对你有用。

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 邮箱列表 获取每周简讯
  2. 跟我上
  3. 通过 LinkedIn 联系我
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值