KDNuggets 博客中文翻译(六十七)

原文:KDNuggets

协议:CC BY-NC-SA 4.0

从头构建人工神经网络:第二部分

原文:www.kdnuggets.com/2020/03/build-artificial-neural-network-scratch-part-2.html

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

来源


我们的前三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. 谷歌网络安全证书 - 快速进入网络安全职业轨道。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. 谷歌数据分析专业证书 - 提升你的数据分析技能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. 谷歌 IT 支持专业证书 - 支持组织的 IT 需求


在我之前的文章中,从头构建人工神经网络(ANN):第一部分,我们开始讨论什么是人工神经网络;我们看到如何用 Python 从头创建一个简单的神经网络,具有一个输入层和一个输出层。这样的神经网络被称为感知器。然而,现实世界的神经网络能够执行复杂任务,如图像分类和股票市场分析,除了输入层和输出层,还包含多个隐藏层。

在上一篇文章中,我们总结了感知器能够找到线性决策边界。我们使用感知器预测一个人是否患糖尿病,使用的是一个虚拟数据集。然而,感知器无法找到非线性决策边界。

在本文中,我们将开发一个具有一个输入层、一个隐藏层和一个输出层的神经网络。我们将看到我们开发的神经网络将能够找到非线性边界。

扫描二维码关注公众号,回复: 17463030 查看本文章

生成数据集

让我们开始生成一个可以玩耍的数据集。幸运的是,scikit-learn 提供了一些有用的数据集生成器,因此我们不需要自己编写代码。我们将使用 make_moons 函数。

from sklearn import datasets
np.random.seed(0)
feature_set, labels = datasets.make_moons(300, noise=0.20)
plt.figure(figsize=(10,7))
plt.scatter(feature_set[:,0], feature_set[:,1], c=labels, cmap=plt.cm.Spectral)

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

我们生成的数据集有两个类别,以红色和蓝色点绘制。你可以将蓝色点视为男性患者,红色点视为女性患者,x 轴和 y 轴表示医疗测量。

我们的目标是训练一个机器学习分类器,该分类器根据 xy 坐标预测正确的类别(男性或女性)。请注意,数据是非线性可分的,我们无法绘制一条直线将两个类别分开。这意味着线性分类器,例如没有隐藏层的 ANN 或者逻辑回归,将无法拟合数据,除非你手动工程化对给定数据集有效的非线性特征(例如多项式)。

单隐藏层神经网络

这是我们的简单网络:

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

我们有两个输入:x1x2。有一个隐藏层,包含 3 个单元(节点):h1, h2h3。最后,有两个输出:y1y2。连接它们的箭头是权重。共有两个权重矩阵:wuw 权重连接输入层和隐藏层。u 权重连接隐藏层和输出层。我们使用了字母 wu,以便更容易跟踪计算。你还可以看到,我们将输出 y1y2 与目标 t1t2 进行比较。

在进行计算之前,我们需要引入最后一个字母。让 a 代表激活之前的线性组合。因此,我们有:

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

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

由于我们无法穷举所有激活函数和所有损失函数,我们将专注于两种最常见的:sigmoid 激活函数和 L2-norm 损失。有了这些新信息和新符号,输出 y 等于激活的线性组合。

因此,对于输出层,我们有:

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

而对于隐藏层:

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

我们将分别考察输出层和隐藏层的反向传播,因为方法有所不同。

我想提醒你:

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

sigmoid 函数是:

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

其导数是:

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

输出层的反向传播

为了得到更新规则:

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

我们必须计算

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

让我们考虑单个权重 uij。损失函数关于 uij 的偏导数等于:

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

其中 i 对应于前一层(本次变换的输入层),j 对应于下一层(变换的输出层)。偏导数的计算是简单地按照链式法则进行的。

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

按照 L2-norm 损失的导数。

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

按照 sigmoid 导数进行。

最后,第三个偏导数只是以下的导数:

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

所以,

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

替换上述表达式中的偏导数,我们得到:

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

因此,输出层单个权重的更新规则为:

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

5. 隐藏层的反向传播

类似于输出层的反向传播,单个权重的更新规则,wij 将依赖于:

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

按照链式法则。利用目前我们为使用 sigmoid 激活函数和线性模型变换得到的结果,我们得到:

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

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

反向传播的实际问题来源于术语

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

这是因为没有“隐藏”的目标。你可以参考下面对权重 w11 的解决方案。在进行计算时,建议查看上面显示的神经网络图。

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

从这里,我们可以计算

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

这正是我们想要的。最终的表达式是:

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

这个方程的广义形式是:

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

反向传播的广义化

使用输出层和隐藏层的反向传播结果,我们可以将它们合并为一个公式,总结反向传播,考虑 L2 范数损失和 sigmoid 激活。

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

对于隐藏层

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

带有一个隐藏层的神经网络代码

现在让我们从头开始在 Python 中实现刚才讨论的神经网络。我们将再次尝试分类我们上面创建的非线性数据。

我们从定义一些用于梯度下降的有用变量和参数开始,比如训练数据集的大小、输入层和输出层的维度。

num_examples = len(X) # training set size
nn_input_dim = 2 # input layer dimensionality
nn_output_dim = 2 # output layer dimensionality

同时定义梯度下降的参数。

epsilon = 0.01 # learning rate for gradient descent
reg_lambda = 0.01 # regularization strength

首先,让我们实现上述定义的损失函数。我们用它来评估模型的表现:

# Helper function to evaluate the total loss on the dataset
def calculate_loss(model, X, y):
    num_examples = len(X)  # training set size
    W1, b1, W2, b2 = model['W1'], model['b1'], model['W2'], model['b2']
    # Forward propagation to calculate our predictions
    z1 = X.dot(W1) + b1
    a1 = np.tanh(z1)
    z2 = a1.dot(W2) + b2
    exp_scores = np.exp(z2)
    probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
    # Calculating the loss
    corect_logprobs = -np.log(probs[range(num_examples), y])
    data_loss = np.sum(corect_logprobs)
    # Add regulatization term to loss (optional)
    data_loss += Config.reg_lambda / 2 * (np.sum(np.square(W1)) + np.sum(np.square(W2)))
    return 1\. / num_examples * data_loss

我们还实现了一个辅助函数来计算网络的输出。它执行前向传播并返回概率最高的类别。

def predict(model, x):
    W1, b1, W2, b2 = model['W1'], model['b1'], model['W2'], model['b2']
    # Forward propagation
    z1 = x.dot(W1) + b1
    a1 = np.tanh(z1)
    z2 = a1.dot(W2) + b2
    exp_scores = np.exp(z2)
    probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
    return np.argmax(probs, axis=1)

最后,这里是训练我们神经网络的函数。它实现了使用上述反向传播导数的批量梯度下降。

这个函数学习神经网络的参数并返回模型。

nn_hdim: 隐藏层中节点的数量

num_passes: 梯度下降训练数据的遍历次数

print_loss: 如果为 True,每 1000 次迭代打印一次损失

def build_model(X, y, nn_hdim, num_passes=20000, print_loss=False):
    # Initialize the parameters to random values. We need to learn these.
    num_examples = len(X)
    np.random.seed(0)
    W1 = np.random.randn(Config.nn_input_dim, nn_hdim) / np.sqrt(Config.nn_input_dim)
    b1 = np.zeros((1, nn_hdim))
    W2 = np.random.randn(nn_hdim, Config.nn_output_dim) / np.sqrt(nn_hdim)
    b2 = np.zeros((1, Config.nn_output_dim))# This is what we return at the end
    model = {
    
    }# Gradient descent. For each batch...
    for i in range(0, num_passes):# Forward propagation
        z1 = X.dot(W1) + b1
        a1 = np.tanh(z1)
        z2 = a1.dot(W2) + b2
        exp_scores = np.exp(z2)
        probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)# Backpropagation
        delta3 = probs
        delta3[range(num_examples), y] -= 1
        dW2 = (a1.T).dot(delta3)
        db2 = np.sum(delta3, axis=0, keepdims=True)
        delta2 = delta3.dot(W2.T) * (1 - np.power(a1, 2))
        dW1 = np.dot(X.T, delta2)
        db1 = np.sum(delta2, axis=0)# Add regularization terms (b1 and b2 don't have regularization terms)
        dW2 += Config.reg_lambda * W2
        dW1 += Config.reg_lambda * W1# Gradient descent parameter update
        W1 += -Config.epsilon * dW1
        b1 += -Config.epsilon * db1
        W2 += -Config.epsilon * dW2
        b2 += -Config.epsilon * db2# Assign new parameters to the model
        model = {
    
    'W1': W1, 'b1': b1, 'W2': W2, 'b2': b2}# Optionally print the loss.
        # This is expensive because it uses the whole dataset, so we don't want to do it too often.
        if print_loss and i % 1000 == 0:
            print("Loss after iteration %i: %f" % (i, calculate_loss(model, X, y)))return model

最后是主要方法:

def main():
    X, y = generate_data()
    model = build_model(X, y, 3, print_loss=True)
    visualize(X, y, model)

每 1000 次迭代后打印损失:

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

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

当隐藏层节点数量为 3 时的分类

现在让我们了解一下隐藏层大小的变化如何影响结果。

hidden_layer_dimensions = [1, 2, 3, 4, 5, 20, 50] 
for i, nn_hdim in enumerate(hidden_layer_dimensions): 
    plt.subplot(5, 2, i+1)
    plt.title('Hidden Layer size %d' % nn_hdim)
    model = build_model(X, y,nn_hdim, 20000, print_loss=False)
    plot_decision_boundary(lambda x:predict(model,x), X, y) 
    plt.show()

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

我们可以看到,低维度的隐藏层很好地捕捉了数据的一般趋势。较高的维度容易导致过拟合。它们是在“记忆”数据,而不是拟合一般的形状。

如果我们在单独的测试集上评估我们的模型,较小隐藏层大小的模型由于更好的泛化能力可能会表现得更好。我们可以通过更强的正则化来对抗过拟合,但选择合适的隐藏层大小是更“经济”的解决方案。

你可以在这个 GitHub 仓库中获取完整的代码。

nageshsinghc4/人工神经网络从零开始-python

结论

所以在这篇文章中,我们看到如何从数学上推导出一个具有一个隐藏层的神经网络,并且我们还用 NumPy 从零开始创建了一个具有 1 个隐藏层的神经网络。

好了,这就结束了关于从零开始构建人工神经网络的两篇文章系列**。** 希望你们喜欢阅读,欢迎在评论区分享你的评论/想法/反馈。

简介:Nagesh Singh Chauhan 是 CirrusLabs 的大数据开发人员。他在电信、分析、销售、数据科学等各个领域拥有超过 4 年的工作经验,并在各种大数据组件方面具有专业知识。

原文。 经授权转载。

相关:

  • 从零开始构建人工神经网络:第一部分

  • 只有 NumPy:从头理解和创建神经网络的计算图

  • 如何将图片转换为数字

更多相关主题

使用 PyCaret 2.0 构建你自己的 AutoML

原文:www.kdnuggets.com/2020/08/build-automl-pycaret.html

评论

Moez Ali,PyCaret 的创始人和作者

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

PyCaret — 一个开源的低代码 Python 机器学习库

PyCaret 2.0

上周我们宣布了 PyCaret 2.0,这是一个开源的低代码 Python 机器学习库,自动化机器学习工作流。它是一个端到端的机器学习和模型管理工具,加快了机器学习实验周期,并帮助数据科学家提高效率和生产力。

在这篇文章中,我们展示了一个逐步教程,讲解如何在 Power BI 中使用 PyCaret 构建自动化机器学习解决方案,从而让数据科学家和分析师可以在他们的仪表板上添加机器学习层,而无需额外的许可或软件成本。PyCaret 是一个开源的免费使用的 Python 库,提供了多种在 Power BI 中工作的功能。

在本文结束时,你将学会如何在 Power BI 中实现以下内容:

  • 设置 Python conda 环境并安装 pycaret==2.0。

  • 将新创建的 conda 环境与 Power BI 连接起来。

  • 在 Power BI 中构建你的第一个 AutoML 解决方案,并在仪表板上展示性能指标。

  • 在 Power BI 中生产化/部署你的 AutoML 解决方案。

Microsoft Power BI

Power BI 是一个商业分析解决方案,让你能够可视化数据并在组织内部共享见解,或将其嵌入到应用程序或网站中。在本教程中,我们将通过将 PyCaret 库导入 Power BI 来使用 Power BI Desktop 进行机器学习。

什么是自动化机器学习?

自动化机器学习(AutoML)是自动化机器学习中耗时的迭代任务的过程。它允许数据科学家和分析师高效地构建机器学习模型,同时保持模型质量。任何 AutoML 解决方案的最终目标是根据某些性能标准确定最佳模型。

传统的机器学习模型开发过程资源消耗大,需要大量领域知识和时间来生成和比较多个模型。使用自动化机器学习,你可以更轻松、高效地加快获得生产就绪的机器学习模型的时间。

PyCaret 是如何工作的?

PyCaret 是一个用于监督学习和无监督学习的工作流自动化工具。它分为六个模块,每个模块都有一组函数,用于执行特定操作。每个函数接收输入并返回输出,在大多数情况下是一个训练好的机器学习模型。第二版发布时可用的模块有:

PyCaret 中的所有模块支持数据准备(超过 25 种基本预处理技术,配有大量未训练的模型以及对自定义模型的支持,自动超参数调优,模型分析和可解释性,自动模型选择,实验记录和简单的云部署选项)。

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

https://www.pycaret.org/guide

要了解更多关于 PyCaret 的信息,点击这里 阅读我们的官方发布公告。

如果你想开始学习 Python,点击这里 查看示例笔记本的图库。

“PyCaret 通过提供免费的开源低代码机器学习解决方案,正在推动机器学习和高级分析的普及,适用于业务分析师、领域专家、普通数据科学家以及经验丰富的数据科学家。”

开始之前

如果你是第一次使用 Python,安装 Anaconda Distribution 是开始的最简单方式。 点击这里 下载包含 Python 3.7 或更高版本的 Anaconda Distribution。

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

www.anaconda.com/products/individual

设置环境

在我们开始使用 PyCaret 在 Power BI 中的机器学习功能之前,需要创建一个虚拟环境并安装 pycaret。这是一个三步过程:

步骤 1 — 创建 anaconda 环境

从开始菜单中打开 Anaconda Prompt 并执行以下代码:

conda create --name **myenv** python=3.7

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

Anaconda Prompt — 创建环境

步骤 2 — 安装 PyCaret

在 Anaconda Prompt 中执行以下代码:

pip install **pycaret==2.0**

安装可能需要 15–20 分钟。如果你遇到安装问题,请查看我们的 GitHub 页面以获取已知问题和解决方案。

步骤 3 — 在 Power BI 中设置 Python 目录

创建的虚拟环境必须与 Power BI 关联。这可以通过 Power BI Desktop 中的全局设置完成(文件 → 选项 → 全局 → Python 脚本)。Anaconda 环境默认安装在:

C:\Users\***username***\AppData\Local\Continuum\anaconda3\envs\myenv

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

文件 → 选项 → 全局 → Python 脚本

??? 开始吧

设定业务背景

一家保险公司希望通过更好地预测患者费用来改善现金流预测,使用住院时的基本人口统计数据和患者健康风险指标。

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

(数据源)

目标

训练和选择最佳性能的回归模型,该模型根据数据集中其他变量(即年龄、性别、BMI、子女数、吸烟者和地区)预测患者费用。

??? 步骤 1 — 加载数据集

你可以直接从我们的 GitHub 上加载数据集,方法是:Power BI Desktop → 获取数据 → Web

数据集链接:raw.githubusercontent.com/pycaret/pycaret/master/datasets/insurance.csv

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

Power BI Desktop → 获取数据 → Web

在 Power Query 中创建一个重复的数据集:

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

Power Query → 创建一个重复的数据集

??? 步骤 2— 运行 AutoML 作为 Python 脚本

在 Power Query 中运行以下代码(转换 → 运行 Python 脚本):

**# import regression module**
from pycaret.regression import ***# init setup**
reg1 = setup(data=dataset, target = 'charges', silent = True, html = False)**# compare models**
best_model = compare_models()**# finalize best model** best = finalize_model(best_model)**# save best model**
save_model(best, 'c:/users/moezs/best-model-power')**# return the performance metrics df** dataset = pull()

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

Power Query 中的脚本

前两行代码用于导入相关模块并初始化设置函数。设置函数执行机器学习中所需的几个重要步骤,例如清理缺失值(如果有)、将数据拆分为训练集和测试集、设置交叉验证策略、定义指标、执行特定算法的转换等。

训练多个模型、比较和评估性能指标的魔法函数是compare_models。它根据可以在 compare_models 中定义的‘sort’参数返回最佳模型。默认情况下,它对回归用例使用‘R2’,对分类用例使用‘Accuracy’。

剩下的几行代码用于最终确定通过 compare_models 返回的最佳模型,并将其保存为本地目录中的 pickle 文件。最后一行返回包含训练模型及其性能指标详细信息的数据框。

输出:

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

Python 脚本的输出

仅用几行代码我们就训练了超过 20 个模型,表格展示了基于 10 折交叉验证的性能指标。

表现最佳的模型梯度提升回归器将与整个转换管道一起作为 pickle 文件保存在你的本地目录中。此文件稍后可以用来对新的数据集生成预测(见下方步骤 3)。

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

转换管道和模型保存为 pickle 文件

PyCaret 基于模块化自动化的理念。因此,如果你有更多的资源和时间用于训练,你可以扩展脚本以进行超参数调整、集成和其他可用建模技术。请参见以下示例:

**# import regression module**
from pycaret.regression import ***# init setup**
reg1 = setup(data=dataset, target = 'charges', silent = True, html = False)**# compare models**
top5 = compare_models(n_select = 5)
results = pull()**# tune top5 models** tuned_top5 = [tune_model(i) for i in top5]**# select best model** best = automl()**# save best model**
save_model(best, 'c:/users/moezs/best-model-power')**# return the performance metrics df** dataset = results

我们现在返回了前 5 个模型,而不是仅返回表现最好的一个模型。然后,我们创建了一个列表推导(循环)来调整前候选模型的超参数,最后automl 函数选择了表现最好的单一模型,该模型然后被保存为 pickle 文件(注意,我们这次没有使用finalize_model,因为 automl 函数返回的是最终模型)。

示例仪表板

示例仪表板已创建。PBIX 文件已上传到这里

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

使用 PyCaret AutoML 结果创建的仪表板

??? 步骤 3 — 部署模型以生成预测

一旦我们将最终模型保存为 pickle 文件,我们可以使用它对新的数据集进行费用预测。

加载新数据集

为了演示目的,我们将再次加载相同的数据集并从数据集中删除‘charges’列。请在 Power Query 中执行以下 Python 脚本以获取预测:

**# load functions from regression module**
from pycaret.regression import load_model, predict_model**# load model in a variable** model = load_model(‘c:/users/moezs/best-model-powerbi’)**# predict charges** dataset = predict_model(model, data=dataset)

输出:

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

predict_model 函数在 Power Query 中的输出

在 Power BI 服务上部署

当你将包含 Python 脚本的 Power BI 报告发布到服务时,这些脚本也会在通过本地数据网关刷新数据时执行。

为了实现这一点,你必须确保安装了包含依赖 Python 包的 Python 运行时在托管个人网关的机器上。请注意,共享的本地数据网关不支持 Python 脚本执行。点击这里以了解更多信息。

本教程中使用的 PBIX 文件已上传到这个 GitHub 仓库:github.com/pycaret/pycaret-powerbi-automl

如果你想了解更多关于 PyCaret 2.0 的信息,请阅读这个公告

如果你之前使用过 PyCaret,你可能会对当前版本的发行说明感兴趣。

使用这个轻量级的工作流自动化库在 Python 中,你可以实现无数目标。如果你觉得这个很有用,请不要忘记在我们的 GitHub 仓库上给我们⭐️。

想了解更多 PyCaret 信息,请关注我们的LinkedInYoutube

你可能也感兴趣:

在 Power BI 中使用 PyCaret 进行机器学习

在 Power BI 中使用 PyCaret 构建你的第一个异常检测器

如何在 Power BI 中使用 PyCaret 实现聚类

在 Power BI 中使用 PyCaret 进行主题建模

重要链接

博客

PyCaret 2.0 的发布说明

用户指南 / 文档

Github

Stackoverflow

安装 PyCaret

Notebook 教程

在 PyCaret 中贡献

想了解特定模块?

点击下面的链接查看文档和工作示例。

分类

回归

聚类

异常检测

自然语言处理

关联规则挖掘

简介: Moez Ali 是一名数据科学家,同时也是 PyCaret 的创始人和作者。

原文。经许可转载。

相关:

  • Github 是你将来需要的最佳 AutoML

  • 你不知道的 PyCaret 的 5 件事

  • 使用 Docker 容器将机器学习管道部署到云端


我们的前 3 门课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. 谷歌网络安全证书 - 快速进入网络安全职业轨道。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. 谷歌数据分析专业证书 - 提升你的数据分析水平

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 工作


更多相关内容

如何在数据科学领域建立职业生涯

原文:www.kdnuggets.com/2022/02/build-career-data-science.html

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

图片来源:Lukas from Pexels

成功的职业生涯带来了许多好处和改变生活的机会。不幸的是,我们生活在一个由金钱和社会地位驱动的社会中。提升职业阶梯被认为能改善生活质量。它提供了安全感和成就感。人们能够将自己的生活从零起点转变为辉煌的职业生涯。


我们的三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. Google 网络安全证书 - 快速进入网络安全领域的职业生涯。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. Google 数据分析专业证书 - 提升你的数据分析能力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. Google IT 支持专业证书 - 支持你所在组织的 IT


如果你是一名数据科学家,并且将 2022 年的目标设定为提升和发展你的职业生涯,你来对地方了。

什么是数据科学家?

数据科学家是被雇佣来分析和解读复杂数据的人。他们是数学家、计算机科学家和擅长发现趋势的人的结合体。能够解读大数据集、分析和解释这些分析,允许公司将这些结果应用于其短期和长期业务目标。

成为数据科学家需要哪些技能?

软技能非常重要,对职业发展至关重要。然而,要成为数据科学家,你需要具备硬技能,如分析、数据可视化、机器学习、统计学等。与解决问题、积极自我驱动的学习者以及批判性思维者等软技能结合,将帮助你在成为成功的数据科学家方面脱颖而出。

科技世界发展如此迅速,阻碍你在这一领域发展的唯一因素就是证明你具备这些硬技能的资格证书。

数据科学角色

在你匆忙选择任何资格或课程之前,了解数据科学行业中有各种角色,而不仅仅是数据科学家,是很有必要的。以下是数据科学中最常见的职业列表。

1. 数据科学家

让我们先解决最明显的一个,以免混淆。数据科学家从各种来源提取、分析和解释大量数据。他们将理解业务的需求,并利用数据来提出假设、分析数据并探索不同的模式,以符合业务议程。

他们还使用算法方法、人工智能、机器学习和统计工具进一步分析数据,使其对业务有用。商业分析也在数据科学家的角色中得以实施,向公司展示数据如何在未来证明对公司产生影响或带来好处。

2. 高级数据科学家

高级数据科学家利用数据来指导和塑造公司,以便预测业务的未来需求。这可能包括指导、建议并雇佣初级员工,以将他们引导到公司目标的方向。除了管理数据团队,他们还分析数据以解决复杂的业务问题,并推动新标准的开发,从原型设计到生产。

高级数据科学家所需的硬技能类似于数据科学家,但在每个方面,如机器学习、SQL 和不同的编程语言上有更多的经验。他们还将具备卓越的人际交往和沟通技能,因为他们的角色涉及管理和指导高技能员工。对于依赖数据的公司来说,高级数据科学家就像船长一样。没有他们的专业知识、经验和知识,团队其他成员难以满足业务的当前和未来需求。

3. 商业智能分析师

商业智能分析师的角色是识别潜在的改进机会,发现趋势,并通过利用数据帮助业务增长。他们可以识别潜在的问题并提出解决方案,帮助公司更清晰地了解自身情况。他们的角色完全旨在提高效率、生产力、推动销售以及实现业务的短期和长期目标。

4. 数据挖掘工程师

数据挖掘是从大型数据集中提取、筛选和识别模式的过程,这些模式可以改善业务系统和操作。数据挖掘工程师建立和管理存储和分析数据的基础设施。他们的工作可能包括构建数据仓库和组织数据,使其对其他团队成员可访问。数据挖掘工程师任务的关键缩写是 ETL:提取、转换和加载。

他们将具备硬技能,如机器学习、统计学、数据库系统,以及他们列表中的首要技能 SQL,这在存储和访问数据方面被广泛使用。

5. 数据架构师

数据架构师创建蓝图,这些蓝图用于数据管理系统以集中、整合、管理、维护和保护数据源,无论是内部的还是外部的。数据架构师与用户、开发人员和系统设计师紧密合作,使员工能够在指定的位置访问特定和关键的信息。

职业市场

随着技术的不断提升和科技与大数据领域的职位空缺达到数百万,根据glassdoor,数据科学家是美国第二最佳的职业。来自各个行业的公司,如时尚、社交媒体和金融,正在利用数据科学家的技能来保持领先地位,降低成本和公司面临的潜在威胁。企业在做出明智决策和有效规划时严重依赖数据,因此数据科学家的需求将始终存在。

成为数据科学家之前你应该知道的

成为数据科学家具有挑战性,这包括繁重的工作量、持续的学习,以及一些日子里无法理解数据为何出错或代码为何无法按预期工作。任何具有巨大好处的事物都很少会轻松获得。

成为数据科学家的要求很高,但一旦你完成了适当的教育,你将能够获得这些好处。随着数据成为各个领域的重要元素,数据科学技能在这些领域之间变得更加可转移。通过适当的培训和资格认证,你可以在职业生涯开始时为政治公司担任数据科学家,而几年后为大型金融科技公司工作。

成为数据科学家使你能够在工作中转移,同时带上你的硬技能,并学习新的技能。

Nisha Arya 是一名数据科学家和自由职业技术写作人员。她特别感兴趣于提供数据科学职业建议或教程和理论知识。她也希望探索人工智能如何或能够对人类寿命产生益处。她是一位热心的学习者,寻求拓宽她的技术知识和写作技能,同时帮助指导他人。

更多相关话题

使用 Python 和 NLTK 构建你的第一个聊天机器人

原文:www.kdnuggets.com/2019/05/build-chatbot-python-nltk.html

评论外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传来源:octodev.net/most-advanced-chatbot-apps-powered-by-artificial-intellect/

聊天机器人(也称为对话机器人闲聊机器人机器人IM 机器人互动代理人工对话实体)是一个计算机程序或一个人工智能,通过听觉或文本方法进行对话。这些程序通常被设计为模拟人类在对话中的行为,从而通过图灵测试。聊天机器人通常用于对话系统中,具有多种实际用途,包括客户服务或信息获取。一些聊天机器人使用复杂的自然语言处理系统,但许多简单的系统则扫描输入中的关键词,然后从数据库中提取具有最匹配关键词或最相似措辞模式的回复。”

— 来源 维基百科

聊天机器人并不是很新,其中之一是 ELIZA,它在 1960 年代初期创建,值得探索。为了成功构建一个对话引擎,它应当考虑以下事项:

  1. 了解目标受众

  2. 了解交流的自然语言。

  3. 了解用户的意图或愿望

  4. 提供可以回答用户的问题的响应

今天我们将学习如何使用 Python 的 NLTK 库创建一个简单的聊天助手或聊天机器人。

NLTK 有一个模块,nltk.chat,它通过提供一个通用框架来简化这些引擎的构建。

在这个博客中,我使用了来自 nltk.chat.util 的两个导入:

聊天:这是一个包含聊天机器人所使用的所有逻辑的类。

反射:这是一个包含一组输入值及其对应输出值的词典。它是一个可选的词典,你可以使用它。你也可以创建自己的词典,格式如下,并在代码中使用。如果你查看 nltk.chat.util,你会看到它的值如下:

reflections = {
    
    
  "i am"       : "you are",
  "i was"      : "you were",
  "i"          : "you",
  "i'm"        : "you are",
  "i'd"        : "you would",
  "i've"       : "you have",
  "i'll"       : "you will",
  "my"         : "your",
  "you are"    : "I am",
  "you were"   : "I was",
  "you've"     : "I have",
  "you'll"     : "I will",
  "your"       : "my",
  "yours"      : "mine",
  "you"        : "me",
  "me"         : "you"
}

你也可以创建你自己的反射词典,格式与上面相同,并在代码中使用它。以下是一个示例:

my_dummy_reflections= {
    
    
    "go"     : "gone",
    "hello"    : "hey there"
}

并将其用作:


 chat = Chat(pairs, my_dummy_reflections)

使用上述 Python 的 NLTK 库概念,让我们构建一个简单的聊天机器人,而不使用任何机器学习或深度学习算法。因此,显然我们的聊天机器人将是一个体面的,但不是智能的。

源代码:

from nltk.chat.util import Chat, reflections

pairs = [
    [
        r"my name is (.*)",
        ["Hello %1, How are you today ?",]
    ],
     [
        r"what is your name ?",
        ["My name is Chatty and I'm a chatbot ?",]
    ],
    [
        r"how are you ?",
        ["I'm doing good\nHow about You ?",]
    ],
    [
        r"sorry (.*)",
        ["Its alright","Its OK, never mind",]
    ],
    [
        r"i'm (.*) doing good",
        ["Nice to hear that","Alright :)",]
    ],
    [
        r"hi|hey|hello",
        ["Hello", "Hey there",]
    ],
    [
        r"(.*) age?",
        ["I'm a computer program dude\nSeriously you are asking me this?",]

    ],
    [
        r"what (.*) want ?",
        ["Make me an offer I can't refuse",]

    ],
    [
        r"(.*) created ?",
        ["Nagesh created me using Python's NLTK library ","top secret ;)",]
    ],
    [
        r"(.*) (location|city) ?",
        ['Chennai, Tamil Nadu',]
    ],
    [
        r"how is weather in (.*)?",
        ["Weather in %1 is awesome like always","Too hot man here in %1","Too cold man here in %1","Never even heard about %1"]
    ],
    [
        r"i work in (.*)?",
        ["%1 is an Amazing company, I have heard about it. But they are in huge loss these days.",]
    ]

[
        r"(.*)raining in (.*)",
        ["No rain since last week here in %2","Damn its raining too much here in %2"]
    ],
    [
        r"how (.*) health(.*)",
        ["I'm a computer program, so I'm always healthy ",]
    ],
    [
        r"(.*) (sports|game) ?",
        ["I'm a very big fan of Football",]
    ],
    [
        r"who (.*) sportsperson ?",
        ["Messy","Ronaldo","Roony"]
],
    [
        r"who (.*) (moviestar|actor)?",
        ["Brad Pitt"]
],
    [
        r"quit",
        ["BBye take care. See you soon :) ","It was nice talking to you. See you soon :)"]

],
]

def chatty():
    print("Hi, I'm Chatty and I chat alot ;)\nPlease type lowercase English language to start a conversation. Type quit to leave ") #default message at the start
    chat = Chat(pairs, reflections)
    chat.converse()

if __name__ == "__main__":
    chatty()

代码非常简单,但我们还是来理解一下。

一旦调用函数 chatty(),将显示默认消息:

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

接下来,我创建了一个包含pairs(包含问题和答案集合的元组列表)和reflections(如上所述)的 Chat 类实例。

下一步是触发对话:


chat.converse()

一个简单的对话:

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

正如你所见,我们只是将可能的问题和答案硬编码到列表 pairs 中。

让我们更多地与 Chatty 互动:

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

nltk.chat 聊天机器人基于问题中存在的关键字的正则表达式工作。所以你可以添加任何数量的按正确格式编写的问题,以避免你的聊天机器人在确定正则表达式时感到困惑。

在这篇博客中,我用简单的步骤解释了如何使用 NLTK 构建自己的聊天机器人,当然它不是一个智能聊天机器人。

希望大家喜欢阅读。

快乐学习!!!

如有疑问/建议,请通过LinkedIn与我联系。

**简介: 纳吉什·辛格·乔汉**是 CirrusLabs 的一名大数据开发人员。他在电信、分析、销售、数据科学等多个领域拥有超过 4 年的工作经验,并在各种大数据组件方面有专长。

原文。已获得许可重新发布。

相关:

  • 如果聊天机器人要成功,它们需要这个

  • 认识 Lucy:创建聊天机器人原型

  • 机器如何理解我们的语言:自然语言处理简介


我们的前三个课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. Google 网络安全证书 - 快速进入网络安全职业生涯。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. Google 数据分析专业证书 - 提升你的数据分析水平

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. Google IT 支持专业证书 - 支持你的组织的 IT 需求


更多相关内容

使用这些课程构建一个类似 ChatGPT 的聊天机器人

原文:www.kdnuggets.com/2023/05/build-chatgptlike-chatbot-courses.html

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

图片由firmufilms提供,来自Freepik

新的技术进步总是引人注目。数据科学及其应用多年来一直是关注的焦点。2023 年开始时,随着OpenAI发布基于 AI 的聊天机器人 ChatGPT,开局强劲。ChatGPT 的发布引起了轰动,每个人以不同的方式使用它,挑战 AI 和聊天机器人的极限。它甚至促使其他公司,如 Notion,构建更好的聊天机器人,以挑战和超越 ChatGPT。

不仅仅是公司,许多数据科学家,无论是新手还是专家,也尝试构建自己的 ChatGPT 版本,以获得更多关于构建基于 AI 的聊天机器人的知识和经验,或挑战并提升他们的技能。你阅读这篇文章意味着你也考虑过制作一个类似 ChatGPT 的聊天机器人,或者只是对构建这样的工具所需的条件感到好奇。

本文将回顾构建你自己版本的 ChatGPT 所需的知识。但在我们深入讨论开发聊天机器人所需的技术知识之前,让我们简单谈谈构建聊天机器人所需的条件。

由于我们考虑构建一个类似 ChatGPT 的聊天机器人,即一个基于网页的聊天机器人,我们在设计和构建聊天机器人时需要考虑两个部分。前端(聊天机器人的外观),即用户将与之互动的部分,以及聊天机器人的核心(后端),即我们所称的聊天机器人的“大脑”。

让我们深入探讨一些能够提供构建外观良好且功能强大的 AI 聊天机器人所需知识的课程。然后,我们为每个元素建议一个课程,以便为你构建 ChatGPT 提供所有必要的工具。

外观

首先,我们将从构建聊天机器人外观所需的内容开始;你的聊天机器人外观越具有创意,用户体验就会越好。那么,你需要知道什么才能为聊天机器人设计一个好的界面呢?

UI 设计

一个网页的外观有两个方面:总体美学和设计的直观性。在我们的案例中,网页(聊天机器人)的感觉就是 UI(用户界面)设计。

当你构建聊天机器人时,了解用户界面设计的基本原理是至关重要的。这门课程由加州艺术学院提供,将帮助你理解 UI 设计的基础。

UX 设计

美观的设计和色彩很好,但如果导航困难,那么外观就显得无关紧要。这时候了解用户体验(UX)的基础知识就显得非常重要。UX 是设计易于导航和使用的应用程序的艺术,从而为使用该应用程序的任何人提供更好的体验。例如,如果我们想构建一个好的聊天机器人,它必须既美观又易于使用且直观。CalArts 还提供了一个课程,帮助你获得制作具有良好 UX 的聊天机器人所需的知识。

HTML & CSS

由于我们尝试构建一个基于网络的聊天机器人,我们需要了解如何构建网页应用程序。这意味着我们需要知道一些 HTML 和 CSS。当然,如今,我们可以使用许多服务来帮助开发网页,而无需编写 HTML 或 CSS。

但了解这些知识将让你对你构建的内容和细节有更多的控制。这个来自CodeAcademy的课程将帮助你学习 HTML 和 CSS 的基础知识。或者你可以查看这个来自 Coursera 的指导项目,你可以在 2 小时内完成。

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

作者提供的图像

大脑

既然我们设计好了聊天机器人的外观,接下来就让我们来构建它的“大脑”。我们想要建立一个基于人工智能的聊天机器人,因此必须掌握数据科学、编程和人工智能的基础知识。我们可以将 ChatGPT 的“大脑”分为两个部分:数据科学基础和聊天机器人的核心。现在让我们详细了解一下这两个部分。

数据科学基础

编程与数学

数据科学及其所有应用基于一些数学知识(概率论和线性代数)和编程。然而,如果你已经知道数据科学的基础知识,你可以跳过这一步,直接进入聊天机器人的核心部分。

如果 ChatGPT 让你对开始数据科学应用之旅感到好奇,这门由哈佛大学提供的课程将帮助你通过提供所需的数学和编程知识,帮助你入门构建聊天机器人!

机器学习

一旦你对编写代码感到舒适,并且掌握了一些数学知识,我们就可以进入任何数据科学应用程序的基础构建模块之一:机器学习。机器学习是一系列算法和技术,用于使计算机更智能。你可以使用这门来自斯坦福大学的课程来学习机器学习的基础知识。

聊天机器人的核心

聊天机器人是一类数据科学,特别是自然语言处理,旨在创建一个供用户对话的系统。我们可以根据其主要功能将聊天机器人分类为三类:

  1. 简单的 NLP 聊天机器人。

  2. 基于影响的聊天机器人

  3. 基于智能的聊天机器人

第一种类型是与用户进行简单对话的基础聊天机器人;第二种类型通常用于处理用户的问题,这些通常是大多数网站上的支持机器人。最后,第三种类型则模拟和预测用户可能如何与用户界面互动。仔细观察 ChatGPT,我们会发现它是这三种类型的混合体。要构建一个基于 AI 的聊天机器人,我们需要了解自然语言处理(NLP)、AI 的基础知识以及构建聊天机器人的基本原理。

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

图片由 macrovector 提供,来源于 Freepik

自然语言处理

这门 Udemy 的课程将帮助你掌握 NLP,它的含义、基本原理及其各种应用,包括聊天机器人。

聊天机器人基础

掌握 NLP 的基础知识是构建聊天机器人的第一步。一旦你了解了基础知识,我们就可以深入探讨如何设计和构建聊天机器人,主要使用这门课程

人工智能

为了让你的聊天机器人显得真实并与用户进行引人入胜的对话,聊天机器人需要具备智能或类似人类智能。为此,我们将使用 AI。因此,我们需要学习如何将 AI 技术应用于我们的聊天机器人。这门来自 DeepLearning.AI 的课程涵盖了 AI 的基础知识以及如何利用它来构建聊天机器人。

结论

ChatGPT 最近成为了媒体关注的焦点,原因非常充分。它清楚地证明了技术的强大潜力。它证明了我们可以设计出优秀的工具,使我们的生活更轻松,同时也激励我们变得更好。

ChatGPT 激发了许多人,无论是技术领域还是其他领域的好奇心,想要了解这样的工具是如何构建的。虽然有些人可能觉得开发这样的工具很复杂,但构建聊天机器人的核心要素比看起来更简单。

本文讨论了构建类似 ChatGPT 的聊天机器人所需了解的内容。因此,下次你有一个空闲的周末时,可以尝试构建一个聊天机器人;也许你的聊天机器人将成为与 ChatGPT 竞争的成果!

Sara Metwalli 是庆应大学的博士候选人,研究测试和调试量子电路的方法。我是 IBM 的研究实习生和 Qiskit 促进者,致力于构建更具量子前景的未来。我还在 Medium、Built-in、She Can Code 和 KDN 撰写有关编程、数据科学和技术话题的文章。我也是 Woman Who Code Python 国际章节的负责人,一个铁路迷、旅行者和摄影爱好者。

更多相关话题

如何在 Airflow 上构建 DAG 工厂

原文:www.kdnuggets.com/2021/03/build-dag-factory-airflow.html

评论

Axel Furlan,数据工程师

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

图片由Chris Ried提供,来自Unsplash


我们的前三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. 谷歌网络安全证书 - 快速进入网络安全职业生涯

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. 谷歌数据分析专业证书 - 提升你的数据分析能力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. 谷歌 IT 支持专业证书 - 在 IT 领域支持你的组织


为什么选择 DAG 工厂?

让我们看一个有 2 个任务的简单 DAG……

在 Airflow 中执行 2 个简单的 Python 脚本需要这么多的样板代码,难道不奇怪吗?无论你编写多少 DAG,你几乎都会发现自己在不同的 DAG 中编写几乎相同的变量,只是有细微的变化。

请记住,在编码中,通常编写一段可以后续调用的代码,而不是每次需要该过程时都编写相同的代码是更好的。这被称为DRY

如果你许多 DAG 共享相似的值,例如电子邮件地址开始日期调度间隔重试次数等,那么拥有一段代码来完成这些值可能更好。这就是我们尝试通过工厂类实现的目标。

使用 Airflow 上的 DAG 工厂,我们可以将创建 DAG 所需的行数减少一半

让我们看一下以下示例

在这里,我们需要一个简单的 DAG,它会先打印今天的日期,然后打印“hi”。

这就是它在 Airflow 上的样子:

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

注意我们减少了多少冗余。我们没有指定使用了什么操作符、任务的 ID、调度间隔、DAG 的创建者或创建时间。

我们还可以看到,我们使用字典指定了任务和依赖关系,这最终转化为正确的任务依赖关系 ???

让我们看一个稍微复杂的示例:

在这个 DAG 中,我指定了 2 个我希望覆盖默认值的参数。它们是 DAG 的所有者及其重试次数。我还在get_airflow_dag()方法中指定了希望调度为每日执行。

这个 DAG 有 3 个任务。say_bye()print_date() 都依赖于 say_hi()。让我们看看在 Airflow 中是如何表现的。

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

现在,让我们来看看如何构建 DAG 工厂 ???

如何编码?

说实话,这很简单。我们首先创建一个类,该类将包含我们创建 DAG 及其任务所需的所有方法。

以下是 DAG 工厂的完整代码。

我们将要调用的主要方法以获取一个完全可用的 DAG 是 get_airflow_dag()

该方法将接收 2 个必填参数:DAG 的名称和它应该运行的任务。其余参数是可选的,因为我们可以在函数的实现中设置默认值。在实现时,可以根据你的用例将任何这些可选参数设置为必填参数,例如,可能会有用将 cron (schedule_interval) 设置为必填参数,或者甚至是 DAG 的所有者。

default_args 参数将是一个字典,用于保存任何你可能想要覆盖的键值对。如果未指定,将使用默认的 default_args。

在我们的例子中,默认值为:

DEFAULT_ARGS = {
    
    
'owner': 'Data Engineer',
'depends_on_past': False,
'start_date': datetime(2021, 1, 1),
'email': ['[email protected]'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}

另外 3 个参数是用于描述 DAG 的主要参数。还有更多选项,可以自由指定更多。

get_airflow_dag() 将运行 create_dag() 以创建 DAG 对象并返回它。add_tasks_to_dag() 稍微复杂一些,因为我们希望让用户容易指定创建任务依赖关系的方式,而无需编写 Operators

在我们的例子中,我们总是为任务使用 PythonOperator,因此我们认为将其作为规范是合理的。

这个实现旨在简化数据工程师的工作,因此我们避免设置额外的内容,比如任务的名称,我们仅假设它与函数名称相同——因此我们使用了一点 反射 来搞清楚。

for func in tasks:
    task_id = func.__name__
    task = PythonOperator(
        task_id=task_id,
        python_callable=func,
        dag=dag
    )
    aux_dict[task_id] = taskfor func, dependencies in tasks.items():
    task_id = func.__name__
    for dep in dependencies:
        aux_dict[dep.__name__] >> aux_dict[task_id]

该函数首先创建一个辅助字典,以保存任务名称:任务对象的键值对。这是为了只拥有一组任务对象,并在以后用于设置依赖关系。然后,对于原始提供的任务字典中的每个键,使用辅助字典设置依赖关系。

在此操作完成后,DAG 对象准备好被返回并供团队使用 ???。

懂了!

文件中有一个小技巧,以便 Airflow 能够识别我们返回的是一个有效的 DAG。

当 Airflow 启动时,所谓的 DagBag 过程会解析所有文件以寻找 DAG。当前实现的工作方式大致如下:

  • DagBag 生成不同的进程,这些进程会检查 dag 文件夹中的文件。

  • 名为 process_file 的函数 这里 会为每个文件运行,以确定是否存在 DAG。

  • 代码运行 might_contain_dag,根据文件中是否同时包含 “dag” 和 “airflow” 来返回 True。实现 见这里

这就是为什么 get_airflow_dag 函数是这样命名的,以便在文件中包含两个关键字,从而确保文件被正确解析。

这是一件很难找到的事情,我花了很多小时试图弄清楚为什么我的 DAG 工厂不工作。关于如何以非传统方式创建 DAG 的文档不多,因此这是你在做类似事情时必须考虑的一个大坑。

结论

这篇简单的文章旨在解释如何通过在 Airflow 上利用 工厂模式 来简化数据工程师的工作。

希望你喜欢!可以点击我的个人资料,查看其他有用的 Airflow 和数据工程文章!

简历: Axel Furlan 是来自阿根廷的数据工程师和软件工程专业的学生。Axel 起初是数据科学家,然后将软件工程与数据结合起来,爱上了这个角色的多样性。他写作的目的是为了让其他数据工程师的生活更轻松。

原文。经允许转载。

相关:

  • 2021 年数据科学学习路线图

  • 成为数据工程师所需的 9 项技能

  • 使用 NumPy 和 Pandas 在更大的图上加速机器学习

更多相关话题

如何构建数据科学赋能团队:完整指南

原文:www.kdnuggets.com/2022/10/build-data-science-enablement-team-complete-guide.html

数据科学赋能团队(DSET)促进开发者和数据科学家的协作。在这篇博客中,我们将讨论什么是数据科学赋能团队,如何建立 DSET,以及如何与数据科学家合作。

数据科学家是具有卓越跨学科知识的专家。他们坚持为机器智能确定最佳培训方法。最近,成功的商业巨头们讨论了开发团队和数据科学家之间的有效协作。这确保了数据科学模型在应用中的可行性。


我们的三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. Google 网络安全证书 - 快速进入网络安全职业的快车道。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. Google 数据分析专业证书 - 提升你的数据分析能力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. Google IT 支持专业证书 - 支持你的组织在 IT 领域


成立数据科学赋能团队(DSET)的公司能够获得更快的开发周期的竞争优势。

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

Freepik

让我们深入了解数据科学赋能团队(DSET)是什么。

关于数据科学赋能团队(DSET)你需要知道的

一般而言,赋能团队是一个卓越中心,旨在鼓励团队间的协作。就数据科学赋能团队而言,它特别旨在提高开发团队和数据科学团队之间的沟通。

两个团队在工作环境中的差异导致了更长的开发周期。然而,在 DSET 设置中,数据科学团队成员能够意识到他们的模型是如何被使用的。这使他们在未来的项目中能够更加高效,同时保持开发的视角。

数据科学赋能团队(DSET)让每个人都能从彼此的学习中受益,包括优化工作流程的新方法和获得更高效率。

如何建立数据科学赋能团队(DSET)

下一步是在你的组织中建立 DSET。别担心,这不需要你安排或投资额外的资源,只需在开发人员和数据科学家之间架起一座桥梁即可。

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

Freepik

如果你是开发人员,你不必担心建立数据科学赋能团队,因为开发是所有项目的核心。你需要做的就是支持数据科学家并将他们的模型付诸实践。

此外,与 DSET 合作可以让你向数据科学家展示数据开发项目的范围,并增加他们的知识,例如教他们使用点对点编码、GitHub 等。因此,开发团队和数据科学家可以通过遵循敏捷和安全的开发流程,顺畅地共同构建模型和应用。

开发团队与数据科学家之间的有效合作

数据科学赋能团队是组织从他们拥有的数据中获取更多价值的一种方式。数据科学是一个不断发展的领域,具有很大的增长潜力。数据科学赋能团队负责确保数据科学家配备了完成工作的必要工具和资源。

DSET 主要是一组人员,大多是开发人员,他们与数据科学家合作,从数据中提取洞察,然后帮助他们基于这些洞察做出决策。

数据科学家需要帮助以便能够有效地完成工作。数据科学赋能团队可以通过从数据中提取洞察,然后基于这些洞察提供建议来提供这种帮助。

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

Freepik

那么,数据科学家为什么需要帮助呢?一位数据科学家是拥有统计学、机器学习和其他定量领域专业知识的人。他们利用这些技能分析大量数据,并找到公司可以使用的洞察。

数据科学赋能团队由来自市场营销、销售、产品开发等各个部门的人组成。他们负责提供必要的工具和资源,以帮助数据科学家更高效地完成工作。

在与数据科学家合作时需要考虑几个关键点:

  • 与数据科学家频繁合作,打破信息孤岛

  • 在每一步都寻求帮助,以确保模型的准确性

  • 将进展分阶段展示给你的合作科学家,并保持项目无误

你是否对建立数据科学赋能团队感到兴奋?

不再等待,用创新的方法展示数据科学和机器学习的力量。通过高效的合作优化模型部署,在现代商业世界中竞争。

Ayesha SaleemData Science Dojo 的数字内容作家。Ayesha 热衷于通过有意义的内容写作、文案写作、电子邮件营销、SEO 写作、社交媒体营销和创意写作来重新塑造品牌。

了解更多信息

如何建立数据科学投资组合

原文:www.kdnuggets.com/2018/07/build-data-science-portfolio.html

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

作者:Michael Galarnyk,数据科学家

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

投资组合是一种展示你是数据科学领域独角兽的方式。


我们的前三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. Google 网络安全证书 - 快速进入网络安全职业道路

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. Google 数据分析专业证书 - 提升你的数据分析能力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. Google IT 支持专业证书 - 支持你所在组织的 IT


如何在数据科学领域找到工作? 知道足够的统计学、机器学习、编程等技能以获得工作是困难的。最近我发现,很多人可能 具备了获得工作的必要技能,但没有投资组合。尽管简历很重要,但拥有数据科学技能的公开证据的投资组合可以对你的求职前景产生奇妙的影响。即使你有推荐,能够展示你的能力而不仅仅是告诉潜在雇主你能做些什么也是重要的。本文将包含链接,介绍各种数据科学专业人士(数据科学经理、数据科学家、社交媒体达人或这些的组合)及其他人谈论投资组合应包含的内容以及如何引起注意。好了,我们开始吧!

投资组合的重要性

除了通过制作投资组合来学习的好处外,投资组合还很重要,因为它可以帮助你获得就业机会。本文的目的在于将投资组合定义为你数据科学技能的公开证据。这个定义来源于David Robinson,他是 DataCamp 的首席数据科学家,在接受Marissa Gemma采访时提到的,他被问到如何找到第一份行业工作时说,

对我来说,最有效的策略是进行公开工作。我在博士后期写博客和做了大量的开源开发,这些工作帮助提供了我数据科学技能的公开证据。但我获得的第一个行业职位的方式是公开工作的一个特别值得注意的例子。在我的博士期间,我是编程网站 Stack Overflow 的活跃回答者,公司的一位工程师看到我的一个回答(一个解释贝塔分布直观的回答)。他对这个回答印象深刻,于是通过[Twitter]联系了我,经过几次面试后,我被录用了

你可能会认为这是一种偶然事件,但你会发现你越活跃,发生这种事情的机会就越大。从David 的博客文章中,

你做的公开工作越多,发生这种意外事件的机会就越高:有人注意到你的工作并将你引向一个工作机会,或者有人在面试你时听说了你做过的工作。

人们常常忘记,软件工程师和数据科学家也会在谷歌上搜索他们的问题。如果这些人通过阅读你的公开工作来解决了他们的问题,他们可能会对你有更好的看法并联系你。

应对经验要求的作品集

即使是入门级职位,大多数公司也希望拥有至少有一点实际经验的人。你可能见过如下的表情包。

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

问题是,如果你需要经验才能获得第一份工作,那么你怎么获得经验?如果有答案,那就是项目。项目可能是工作经验的最佳替代品,或者正如Will Stanton所说,

如果你没有数据科学家的任何经验,那么你绝对必须做独立项目。

事实上,当Jonathan Nolis面试候选人时,他希望听到你最近遇到的一个问题/项目的描述。

我想了解他们最近做的一个项目。我会问他们项目是如何开始的,如何确定值得投入时间和精力,他们的过程以及他们的结果。我还会问他们从项目中学到了什么。我从这个问题的回答中获益良多:如果他们能讲述一个故事,问题如何与更大的背景相关,以及他们如何解决困难的工作。

如果你没有一些与数据科学相关的工作经验,最佳选择是谈论你曾经做过的数据科学项目。

应包括在作品集中的项目类型

数据科学是一个非常广泛的领域,很难知道招聘经理希望看到什么样的项目。 William Chen,Quora 的数据科学经理,在 Kaggle 的 CareerCon 2018 上分享了他的想法(视频)。

我喜欢那些展示出他们对数据有深入兴趣的项目,超越了家庭作业的范围。任何探索有趣数据集并找到有趣结果的课程期末项目……投入精力在撰写报告上……我真的很喜欢看到那些很好的报告,其中人们发现了有趣且新颖的东西……有一些可视化并分享他们的工作。

很多人认识到创建项目的价值,但许多人会想知道从哪里获得有趣的数据集以及如何处理这些数据。 Jason Goodman,Airbnb 的数据科学家,写了一篇文章 关于构建数据作品集项目的建议,在文章中他讨论了许多不同的项目想法,并给出了关于应该使用哪些数据集的好建议。他还赞同了威廉(William)的一个观点,即处理有趣的数据。

我发现最好的作品集项目更多地涉及处理有趣的数据,而不是做复杂的建模。很多人使用财务信息或 Twitter 数据进行项目;这些数据可以工作,但本身并不特别有趣,因此你面临的挑战更大。

文章中的另一个观点是,网络爬取是获取有趣数据的好方法。如果你有兴趣学习如何通过 Python 进行网络爬取以构建自己的数据集,你可以查看我的文章 这里。如果你来自学术界,重要的是要注意你的论文可以作为一个项目(一个非常大的项目)。你可以在 这里 听到 William Chen 谈论这个话题。

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

Traffic Cruising Data Science for Social Good Project (github.com/uwescience/TrafficCruising-DSSG2017)。这是一个我个人觉得有趣的项目示例,但外面还有很多有趣的项目。致谢 (Orysya StusBrett BejcekMichael VlahAnamol Pundle)

不应包括在作品集中的项目类型

我发现一个非常常见的建议(在这篇博客文章中出现了多次)是你的作品集中不要包含常见的项目。

杰雷米·哈里斯《成为数据科学家最容易失败的四种方式》中说,

很难想到比在你的个人项目中展示你在琐碎的概念验证数据集上做的工作更快地让你的简历被放入“绝对不行”堆的方式。

当你感到困惑时,这里有一些项目,它们对你造成的伤害大于帮助:

下图展示了泰坦尼克号 (A)、MNIST (B) 和鸢尾花 © 数据集的部分分类示例。没有很多方法可以利用这些数据集让你在其他申请者中脱颖而出。确保列出新颖的项目。

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

泰坦尼克号 (A)、MNIST (B) 和鸢尾花 © 分类

作品集是迭代的

法维奥·瓦兹克斯有一篇优秀的文章,讲述了他如何获得数据科学家的工作。当然,他的一个建议是拥有一个作品集。

拥有一个作品集。如果你在寻找一个严肃的付费数据科学工作,做一些实际数据的项目。如果可以的话,把它们发布到 GitHub 上。除了 Kaggle 比赛外,找到你喜欢的东西或你想解决的问题,并利用你的知识来做这些事情。

另一个有趣的发现是,在求职过程中,你必须不断改进。

我申请了差不多 125 个工作(真的,也许你申请了更多),只收到大约 25 到 30 个回复。有些回复只是:谢谢,但不行。我得到过将近 15 次面试。我从每一次中学到了很多。变得更好。我不得不面对许多拒绝,这实际上是我没准备好的。但我喜欢接受面试的过程(老实说,并不是所有的面试)。我学习了很多,每天编程,阅读了许多文章和帖子。这些都帮助了我很多。

随着你学习的深入和自我提升,你的作品集也应该进行更新。这种观点在许多其他建议文章中都有提到。正如杰森·古德曼所说,

当你公开发布一个项目时,它并没有完成。不要害怕在项目发布后继续添加或编辑它们!

这条建议在你寻找工作时尤其重要。很多成功人士的故事,例如 凯利·彭,她是 Airbnb 的数据科学家,她真的坚持不懈,不断工作和提升自己。在 她的一篇博客文章中,她详细介绍了她申请和面试过的很多地方。

申请数量:475

电话面试次数:50

完成的数据科学家庭挑战:9

现场面试次数:8

录用:2

花费时间:6 个月

她显然申请了很多工作并坚持不懈。在她的文章中,她甚至提到你需要从面试经验中不断学习。

记下你被问到的所有面试问题,特别是那些你未能回答的问题。你可以再次失败,但不要在同一个地方失败。你应该始终学习和提升自己。

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

如果你还没有获得面试机会,请申请更多的工作并继续寻找学习和提升的方法。

将作品集整合到 1 页简历中

人们找到你作品集的一个方式通常是通过你的简历,因此值得一提。数据科学简历是专注于你的技术技能的地方。你的简历是一个简洁展示你的资格和适合特定角色的机会。招聘人员和招聘经理会非常快速地浏览简历,你只有短时间来留下印象。改善简历可以增加获得面试的机会。你必须确保简历中的每一行和每一部分都很重要。

威廉·陈,来自 Quora 的数据科学经理,提供了9 个制作数据科学简历的技巧请注意下面简要总结中的要点,项目和作品集是第 6、7、8 点,甚至可以说是第 9 点

1. 长度:保持简洁,最多一页。这可以让你在快速浏览时产生最大影响。建议使用简单的单列简历,因为它容易浏览。

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

视频中使用的简历示例(latex: github.com/sb2nov/resume

2. 目标:不要包含一个。它们不能帮助你与其他人区分开来。它们占用了更重要的内容(技能、项目、经验等)的空间。求职信非常可选,除非你真的个性化它。

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

目标陈述不能帮助你与其他人区分开来。许多目标陈述说的非常相似。

3. 课程:列出相关课程,这些课程与职位描述相关。

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

各种简历中展示的相关课程示例。

4. 技能:不要对你的技能给出数值评级。如果你想对自己的技能进行评分,请使用“熟练”或“了解”等词汇。你甚至可以完全省略评估。

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

不要对你的技能给出数值评级。

5. 技能:列出职位描述中提到的技术技能。你列出技能的顺序可以暗示你最擅长的领域。

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

如何在简历上列出你的技能的示例

6. 项目:不要列出常见的项目或作业。它们在区分你和其他申请者方面帮助不大。列出新颖的项目。

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

7. 项目:展示结果并包含链接。如果你参与了 Kaggle 竞赛,请标明百分位排名,因为这有助于阅读你简历的人了解你在竞赛中的位置。在项目部分,总是可以加入写作和论文的链接,这样可以让招聘经理或招聘人员深入了解(偏向真实世界中的复杂问题,你可以从中学到新东西)。

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

好的项目部分示例

注意在上述一个项目部分中,有一个额外的博客链接,让招聘人员或招聘经理了解更多。这是从简历中链接到你作品集各个部分的一种方式。

8. 作品集:完善你的在线存在。最基本的是 LinkedIn 个人资料。这有点像一个扩展的简历。GitHub 和 Kaggle 个人资料可以帮助展示你的工作。填写每个个人资料,并包括其他网站的链接。填写你的 GitHub 仓库的描述。包括你知识分享个人资料/博客的链接(Medium、Quora)。数据科学特别注重知识分享和向他人传达数据的意义。你不必全部完成,但选择几个去做(稍后会详细说明)。

9. 经验:根据工作量身定制你的经验。经验是你简历的核心,但如果你没有工作经验该怎么办?专注于独立项目,如毕业设计、独立研究、论文工作或 Kaggle 竞赛。如果你没有工作经验,这些可以作为替代。避免在简历上放置不相关的经验。

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

如果你想了解数据科学经理如何审查作品集和简历,这里有 Kaggle’s CareerCon 2018 的链接(视频审查的简历)。

社交媒体的重要性

这与“投资组合的重要性”部分非常相似,只是分成了子部分。拥有 Github 页面、Kaggle 个人资料、Stack Overflow 等可以支持你的简历。拥有完善的在线个人资料对招聘经理来说是一个良好的信号。

正如 David Robinson 所说,

通常,当我评估候选人时,我很高兴看到他们公开分享的内容,即使它不是完善或完成的。分享任何东西几乎总是比什么都不分享要好。

数据科学家喜欢查看公开工作的原因是正如 Will Stanton 所说,

数据科学家使用这些工具来分享他们的工作并找到问题的答案。如果你使用这些工具,那么你就是在向数据科学家表明你是他们中的一员,即使你从未作为数据科学家工作过。

数据科学很大程度上是关于沟通和呈现数据,因此拥有这些在线个人资料是很好的。除了这些平台帮助提供宝贵的经验之外,它们还可以帮助你被注意到并引导人们找到你的简历。人们可以通过各种渠道(LinkedIn、GitHub、Twitter、Kaggle、Medium、Stack Overflow、Tableau Public、Quora、YouTube 等)在线找到你的简历。你还会发现不同类型的社交媒体相互关联。

Github

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

Jennifer BryanYuan (Terry) Tang 的 Github 个人资料

Github 个人资料是你作为一个合格数据科学家的强有力信号。在简历的项目部分,人们通常会留下指向他们 GitHub 的链接,那里存储了他们项目的代码。你也可以在上面添加写作和 Markdown。GitHub 让人们看到你构建了什么以及如何构建它。在一些公司中,招聘经理会查看申请者的 GitHub。这是向雇主展示你不是假冒伪劣的一种方式。如果你花时间完善你的 GitHub 个人资料,你将比其他人更容易被评估。

值得一提的是,你需要有某种 README.md 文件,其中包含对你项目的描述,因为数据科学很大程度上是关于沟通结果。确保 README.md 文件清楚地描述了你的项目是什么、做了什么以及如何运行你的代码。

Kaggle

参与 Kaggle 比赛、创建内核和参与讨论是展示数据科学家能力的一些方式。重要的是要强调 Kaggle 不像行业项目,正如科琳·法雷利在这个quora 问题中提到的那样。Kaggle 比赛负责提出任务,为你获取数据,并将其清理成某种可用的形式。它的作用是给你提供分析数据和提出模型的练习。瑞莎玛·谢赫有一篇文章参加 Kaggle 还是不参加,在文章中她谈到了 Kaggle 比赛的价值。她的文章中提到,

的确,参加一次 Kaggle 比赛并不足以使一个人成为数据科学家。也不是上一次课程、参加一次会议教程、分析一个数据集或阅读一本数据科学书籍就能成为数据科学家。参与比赛可以增加你的经验,并丰富你的作品集。这只是对其他项目的补充,而不是检验一个人数据科学技能的唯一标准。

同样,有充分的理由说明Kaggle 大师继续参与 Kaggle 比赛

Linkedin

与简历不同的是,简历受长度限制,而 LinkedIn 个人资料允许你更详细地描述你的项目和工作经验。Udacity 提供了一份制作良好 LinkedIn 个人资料的指南。LinkedIn 的一个重要部分是他们的搜索工具,为了让你出现在搜索结果中,你必须在个人资料中包含相关关键词。招聘人员经常在 LinkedIn 上搜索人才。LinkedIn 允许你查看哪些公司搜索了你以及谁查看了你的个人资料。

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

检查你的搜索者工作在哪里以及有多少人查看了你的个人资料。

除了公司找到你并向你发送关于你可用性的消息外,LinkedIn 还有许多功能,例如请求推荐信杰森·古德曼在他的文章申请数据科学职位的建议中利用 LinkedIn 间接请求推荐信。

我从未、从未、从未在没有介绍的情况下申请过任何公司……一旦我对某家公司感兴趣,我会使用 LinkedIn 寻找该公司的第一度或第二度关系。我会联系那个关系,询问他们关于在公司的经历,如果可能的话,是否能把我引荐给数据科学团队的某个人。我总是尽可能进行面对面的会谈(喝咖啡或吃午餐),而不是打电话。顺便说一下,Trey Causey 最近写了 一篇很棒的文章 ,介绍了如何请求这种类型的会谈。我从不直接要求工作,但他们通常会要求我的简历,并提出将我作为内部推荐人,或者把我介绍给招聘经理。如果他们似乎不愿意这样做……我会感谢他们的时间,然后继续前进。

注意他并没有立即要求推荐。虽然申请公司时常见的建议是获取推荐,但非常重要的一点是,你仍然需要一个作品集、经验或某种证明你能胜任工作的证据。Jason 甚至在那篇文章和 他写的其他文章 中提到作品集的重要性。

Aman Dalmia 通过 在多家 AI 公司和初创企业面试中学到的东西 学到了类似的东西。

网络不是向人们发送信息让他们为你推荐工作当我刚开始的时候,我经常犯这个错误,直到我偶然发现了 这篇文章 ,作者是 Mark Meloon在这篇文章中,他谈到了通过首先提供帮助来建立真正的*人际关系的重要性。

他说的另一个观点是 LinkedIn 对于发布你的内容/作品集非常有用。

网络中的另一个重要步骤是发布你的内容。例如,如果你擅长某件事,写博客并在 Facebook 和 LinkedIn 上分享这些博客*。*这不仅能帮助别人,也能帮助你

Medium 和/或其他博客平台

拥有某种形式的博客可能非常有利。很多数据科学工作涉及沟通和展示数据。写博客是练习这项技能的方式,并展示你可以做到这一点。写关于项目或数据科学主题的文章,让你与社区分享,同时鼓励你写出你的工作过程和想法。这在面试时是一项有用的技能。

正如 David Robinson 所说,

博客是你练习相关技能的机会

  • 数据清理:与各种数据集一起工作的一个好处是,你会学会接受数据“原封不动”,无论它是以*期刊文章的补充文件还是电影剧本的形式出现。

  • 统计:处理不熟悉的数据让你能够将统计方法付诸实践,而写作传达和教授概念有助于构建你自己的理解*

  • 机器学习:使用预测算法一次和在各种问题上使用它之间有很大的区别,同时了解你为什么会选择一个而不是另一个*

  • 可视化:拥有观众对你的图表有鼓励作用,这会促使你开始打磨图表并建立个人风格*

  • 沟通:你在写作中获得经验,并练习构建数据驱动的论点。这可能是博客最相关的技能,因为在其他地方很难实践,而这是任何数据科学职业的核心部分*

通过写博客,你可以练习将发现传达给他人。这也是一种自我宣传的方式。关于使用 Scrapy 构建你自己的数据集的博客,以及具有讽刺意味的使用 Conda 管理 Python 环境博客,教会了我很多,也给我带来了许多我通常无法获得的机会。我发现的一个主要好处是,通过别人对我的项目提出批评和改进建议(通过博客的评论区),使得面试官不会成为第一个指出这些缺陷的人。更明显的好处是,通过写博客,你倾向于阅读更多的数据科学/机器学习博客帖子,从而学到更多。

至于选择哪个平台来写博客,我推荐使用 Medium。Manali Shinde在她的博客文章如何从零开始构建数据科学作品集中指出了她选择 Medium 的原因。

我曾考虑在 WordPress 或 Squarespace 等平台上创建自己的网站。虽然这些平台非常适合托管自己的作品集,但我想要一个可以获得一些曝光的地方,并且有一个很好的标签系统以接触更广泛的受众。幸运的是,Medium 如我们所知,提供了这些选项(而且它也是免费的)。

如果你不知道写什么,我建议你查看David Robinson 的建议

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

twitter.com/drob

Twitter

在 Twitter 上活跃是识别和与领域内人士互动的绝佳方式。你还可以在 Twitter 上推广你的博客,让你的作品集更加显眼。在 Twitter 上有很多互动机会。正如Reshama Shaikh在她著名的博客文章“如何获得我的第一份数据科学工作?”中所说,

大卫·罗宾逊慷慨地提供转发你的第一篇数据科学帖子。拥有 20K+粉丝,这个提议是无法拒绝的。

Twitter 不仅仅可以用于自我推广。Data Science Renee有一篇帖子“如何利用 Twitter 学习数据科学(或其他任何东西)”,其中对如何利用 Twitter 学习技能非常有见地。她文章中的另一个收获是,Twitter 上的存在如何帮助她建立网络并获得机会。

我曾被邀请参加播客和博客的采访(其中一些很快就会出现),提供合同工作,并提供了一个我不幸无法参加但很高兴被考虑的会议的免费入场券。行业中的“名人”现在也来找我合作。

Tableau Public

并非所有的数据科学工作都使用 Tableau 或其他 BI 工具。然而,如果你申请的是使用这些工具的工作,重要的是要知道有些网站可以让你公开展示仪表板。例如,如果你说你在学习或掌握 Tableau,可以在Tableau Public上放几个仪表板。虽然很多公司可能会允许你在工作中学习 Tableau,但有公开的 Tableau 技能证据会有所帮助。如果你想查看 Tableau Public 档案的好例子,请查看Orysya Stus’Brit Cava’s档案。

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

结论

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

记住,作品集是一个过程。继续改进。

拥有一份强大的简历一直以来都是求职者向潜在雇主展示技能的主要工具。如今,有多种方式来展示你的技能并找到工作。公开证据的作品集是一种获取通常无法获得的机会的方法。重要的是要强调作品集是一个迭代的过程。随着知识的增长,作品集应随着时间的推移进行更新。永远不要停止学习或成长。即使是这篇博客文章也会随着反馈和知识的增加而更新。如果你需要面试建议/指南,可以查看Brandon Rohrer 的数据科学面试生存建议Sadat 的面试指南Springboard 的建议。如果你对教程有任何问题或想法,可以在下面的评论区或通过Twitter联系我。

个人简介: Michael Galarnyk 是一名数据科学家和企业培训师。他目前在 Scripps 转化研究所工作。你可以在 Twitter (twitter.com/GalarnykMichael)、Medium (medium.com/@GalarnykMichael) 和 GitHub (github.com/mGalarnyk)上找到他。

原文。经许可转载。

相关:

  • 大数据和数据科学中的 5 条职业路径解析

  • 2018 年能让你被聘用的 5 个数据科学项目

  • 解释正态分布的 68-95-99.7 规则

更多相关话题

如何从零开始构建数据科学项目

原文:www.kdnuggets.com/2018/12/build-data-science-project-from-scratch.html

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

Jekaterina Kokatjuhha 提供,Zalando 的研究工程师。

有许多关于数据科学和机器学习的在线课程,将指导你学习理论,并提供一些代码示例和非常干净的数据分析。


我们的前三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. Google 网络安全证书 - 快速开启网络安全职业生涯。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. Google 数据分析专业证书 - 提升你的数据分析能力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. Google IT 支持专业证书 - 支持你的组织 IT


然而,为了开始实践数据科学,最好还是挑战一个现实中的问题。深入挖掘数据以获得更深刻的见解。利用额外的数据源进行特征工程,并构建独立的机器学习管道。

本博客文章将指导你从零开始构建数据科学项目的主要步骤。它基于一个真实的问题——柏林租房价格的主要驱动因素是什么?它将提供对此情况的分析,并突出新手在机器学习中常犯的错误。

下面是将详细讨论的步骤:

  • 寻找一个主题

  • 从网络中提取数据并清理

  • 获取更深入的见解

  • 使用外部 API 进行特征工程

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

寻找一个主题

通过分析数据可以解决许多问题,但最好还是找到一个你感兴趣并能激励你的问题。在寻找主题时,你应该重点关注你的偏好和兴趣。

例如,如果你对医疗系统感兴趣,可以从多个角度挑战相关数据。“探索 ChestXray14 数据集:问题” 是如何质疑医疗数据质量的一个例子。另一个例子——如果你对音乐感兴趣,可以尝试 根据音频预测歌曲的风格

然而,我建议不仅要专注于自己的兴趣,还要听听你周围的人在谈论什么。他们有什么困扰?他们在抱怨什么?这可能是数据科学项目的另一个好来源。如果人们仍在抱怨,这可能意味着第一次没有妥善解决问题。因此,如果你用数据来挑战它,你可以提供更好的解决方案,并对这个话题的认知产生影响。

这可能听起来有点抽象,因此让我们来看看我是如何产生分析柏林租金价格的想法的。

“如果我知道这里的租金如此高,我会争取更高的薪水。”

这是我从最近搬到柏林工作的人员那里听到的事情之一。大多数新来者抱怨说,他们没想到柏林会如此昂贵,而且没有关于公寓可能价格范围的统计数据。如果他们事先知道这些,他们本可以在求职过程中要求更高的薪水,或者考虑其他选项。

我在谷歌上搜索,检查了几个租赁公寓网站,并询问了几个人,但找不到任何可信的当前市场价格统计数据或可视化图表。这就是我产生这个分析想法的原因。

我想收集数据,构建一个互动仪表板,你可以选择不同的选项,比如在柏林米特区的一间带阳台和配备厨房的 40 平方米的公寓,它会显示价格范围。仅此一项就能帮助人们了解柏林的公寓价格。此外,通过应用机器学习,我将能够识别租金价格的驱动因素,并实践不同的机器学习算法。

从网上提取数据并进行清理

获取数据

现在你对数据科学项目有了一个想法,你可以开始寻找数据。有很多令人惊叹的数据仓库,如KaggleUCI ML Repositorydataset search engine和包含数据集的网站。或者,你可以使用网页抓取

但要小心——旧数据无处不在。当我搜索柏林租金价格信息时,我发现了许多可视化图表它们要么是过时的,要么没有指定年份。

对于一些统计数据,他们甚至注明这个价格只适用于 50 平方米的两居室公寓,没有家具。但如果我在寻找一间带家具厨房的小公寓呢?

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

旧数据无处不在。

由于我只能找到旧数据,我决定网页抓取提供租赁公寓的网站。网页抓取是一种通过自动化过程从网站提取数据的技术。

我的网页抓取博客文章详细讲解了网页抓取的陷阱和设计模式。

主要发现如下:

  • 在抓取之前,检查是否有公开的 API 可用

  • 要善良!不要通过每秒发送数百个请求来过载网站

  • 保存提取发生的日期。将解释为什么这很重要。

数据清理

一旦开始获取数据,非常重要的一点是尽早查看数据,以便发现任何可能的问题。

在网页抓取租赁数据时,我包括了一些小检查,比如所有特征的缺失值数量。网站管理员可能会更改网站的 HTML,这可能会导致我的程序无法再获取数据。

一旦我确保了网页抓取的所有技术方面都得到覆盖,我认为数据几乎是理想的。然而,由于一些不太明显的重复数据,我最终花了大约一周的时间来清理数据。

一旦开始获取数据,非常重要的一点是尽早查看数据,以便发现任何可能的问题。例如,如果你进行网页抓取,可能会遗漏一些重要字段。如果在将数据保存到文件时使用逗号分隔符,而某个字段也包含逗号,你可能会得到分隔不好的文件。

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

幻觉 vs 现实

重复数据的来源有几个:

  • 因为在线时间较长而重复的公寓

  • 中介输入了错误的信息,例如租金或公寓的楼层。他们会在一段时间后纠正这些错误,或者发布一则完全新的广告,其中包含修正后的值和额外的描述修改

  • 同一公寓的价格在一个月后有所变化(上涨或下降)

虽然第一种情况的重复项可以通过其 ID 轻松识别,但第二种情况的重复项则非常复杂。原因是中介可能会稍微更改描述,修改错误的价格,并将其作为新广告发布,这样 ID 也会变为新的。

我不得不提出许多基于逻辑的规则来筛选广告的旧版本。一旦我能够识别出这些公寓是实际的重复项但有些许修改,我可以按提取日期排序,将最新的一个视为最近的。

此外,一些中介在一个月后会对同一公寓的价格进行调整。我被告知,如果没有人想要这个公寓,价格会下降。相反,如果有很多人申请,中介会提高价格。这些听起来是合理的解释。

获取更深层次的见解

现在一切准备就绪,我们可以开始分析数据。我知道数据科学家们喜欢使用 seaborn 和 ggplot2,以及许多静态可视化图,从中可以得出一些见解。

然而,互动仪表板可以帮助你和其他利益相关者发现有用的见解。许多很棒的易用工具可以实现这一点,比如TableauMicrostrategy

我花了不到 30 分钟创建了一个互动仪表板,可以选择所有重要的组件,并查看价格如何变化。

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

柏林租赁价格的互动仪表板:可以选择所有可能的配置并查看相应的价格分布。(数据日期:2017/18 冬季)

一个相当简单的仪表板已经可以为新来者提供有关柏林价格的见解,并可能成为租赁公寓网站的良好用户驱动

从这些数据可视化中,你可以看到 2.5 房间的价格分布落在 2 房间公寓的分布范围内。原因在于大多数 2.5 房间的公寓不位于市中心,这当然会降低价格。

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

柏林的价格分布和公寓数量。

这些数据是在 2017/18 冬季收集的,未来也会变得过时。然而,我的观点是,租赁网站可以频繁更新他们的统计数据和可视化,以提供更多的透明度。

使用外部 APIs 进行特征工程

可视化有助于识别重要的属性或“特征”,这些特征可以被机器学习算法使用。如果你使用的特征非常无信息,任何算法都会产生糟糕的预测。拥有非常强的特征,即使是一个非常简单的算法也可以产生相当不错的结果。

在租赁价格项目中,价格是一个连续变量,因此这是一个典型的回归问题。根据所有提取的信息,我收集了以下特征,以便能够预测租赁价格。

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

这些是用于预测租赁公寓价格的主要特征。

然而,有一个特征是有问题的,即地址。共有 6.6K 个公寓和大约 4.4K 个不同粒度的唯一地址。大约有 200 个唯一邮政编码可以转换为虚拟变量,但这样会丢失特定位置的非常宝贵的信息。

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

地址的不同粒度:街道和门牌号,街道和隐藏的门牌号,以及仅有邮政编码。

当你收到一个新地址时,你会怎么做?

你可以用谷歌查找它的位置或如何到达那里。

通过使用外部 API,并结合给定的四个附加特性,可以计算出公寓的地址:

  1. 从 S-Bahn Friedrichstrasse(中央车站)乘火车的时间

  2. 驾车到 U-Bahn Stadtmitte(市中心)的距离

  3. 步行到最近地铁站的时间

  4. 公寓周围一公里内的地铁站数量

这四个特性显著提升了性能。

个人简介Jekaterina Kokatjuhha是 Zalando 的研究工程师,专注于可扩展的机器学习用于欺诈预测。

原文。经许可转载。

资源:

相关:

相关话题更多

学习构建一个端到端的数据科学项目

原文:www.kdnuggets.com/2020/11/build-data-science-project.html

评论

Mathang Peddi,数据科学和机器学习爱好者

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


我们的前三个课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. Google 网络安全证书 - 快速进入网络安全职业的捷径。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. Google 数据分析专业证书 - 提升你的数据分析技能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. Google IT 支持专业证书 - 支持您组织的 IT 需求


数据科学家是所有统计学家中最优秀的程序员,也是所有程序员中最优秀的统计学家。

每个数据科学家都需要一个有效的策略来解决数据科学问题。

数据科学职位在全国范围内是独特的,因此我们可以尝试根据职位名称、公司和地理位置等预测数据科学职位的薪资。这里我构建了一个项目,任何用户都可以输入信息,它会将薪资范围拆分开来,因此,如果有人在谈判薪资时,这将是一个相当不错的工具。

数据科学工作流程

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

业务理解

这个阶段很重要,因为它有助于明确客户的目标。任何项目的成功取决于提问的质量。如果你正确理解了业务需求,那么这将帮助你收集正确的数据。提出正确的问题将帮助你缩小数据获取的范围。

分析方法

在这个阶段,一旦业务问题被明确陈述,数据科学家可以定义解决问题的分析方法。此步骤包括从统计和机器学习技术的角度解释问题,这一点很重要,因为它有助于确定解决问题所需的趋势类型,以最有效的方式解决问题。如果问题是确定某事的概率,则可能需要使用预测模型;如果问题是展示关系,则可能需要描述性方法;如果我们的目标是计数,那么统计分析是解决它的最佳方法。对于每种方法,我们可以使用不同的算法。

数据要求

我们找出初始数据收集所需的数据内容、格式和来源,并在我们选择的方法的算法中使用这些数据。

数据揭示影响,通过数据,你可以为你的决策带来更多的科学性。

数据收集

我们识别与问题领域相关的可用数据资源。为了获取数据,我们可以对相关网站进行网页抓取,或者使用包含现成数据集的存储库。如果你想从任何网站或存储库收集数据,可以使用 Pandas 库,这是一个非常有用的工具,用于下载、转换和修改数据集。

为此,我已经调整了网络爬虫,以从 glassdoor.com 上抓取 1000 条职位发布信息。每个职位的信息包括:职位名称、薪资估算、职位描述、评分、公司、地点、公司总部、公司规模、公司成立日期、所有权类型、行业、部门、收入、竞争对手。这些都是确定数据科学领域从业人员薪资的各种属性。

要查看 Web Scraper 文章,请点击这里

要查看 Web Scraper 的 Github 代码,请点击这里

你可以没有信息的数据,但你不能没有数据的信息。

数据理解

数据科学家会尝试更多地了解以前收集的数据。我们需要检查每个数据的类型,并学习更多关于属性及其名称的知识。

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

有些薪资数据包含 -1,因此这些值对我们不太重要,可以将其移除。由于薪资估算列目前是字符串格式,所以我们需要将 -1 以字符串格式呈现。

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

现在我们可以看到,行数已经减少到 742。我们观察到大多数变量是分类变量而非数值变量。这个数据集包含 2 个数值变量和 12 个分类变量。但实际上,我们的依赖变量,薪资估算,必须是数值型的。因此,我们需要将其转换为数值变量。

数据准备

数据可以是任何格式。为了进行分析,你需要将数据转换为特定的格式。数据科学家必须为建模准备数据,这是最关键的步骤之一,因为模型必须干净且不包含任何错误或空值。

在现实世界中,数据科学家花费 80% 的时间清理数据,只花费 20% 的时间提供见解和结论。

这是一个相当繁琐的过程,所以你应该做好准备。

在抓取数据后,我需要清理数据,以便它可以用于我们的模型。我进行了一些更改并创建了新的变量。

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

当我们在左括号处分割时,发生的情况是,所有行的‘(’左侧和右侧部分进入两个不同的列表。这就是为什么我们需要包括 [0] 来获取薪资。获得薪资后,将‘K’,‘$’替换为空字符串。在一些条目中,薪资被标记为‘雇主提供’和‘按小时计算’,这些是不一致的,需要处理。

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

现在我们不应使用雇主提供的或按小时计算的薪资。所以我们返回包含每个条目最小和最大薪资的两个列表。这成为我们最终的因变量(用于预测一个人的平均薪资)。

探索性数据分析

EDA 在这一阶段扮演着非常重要的角色,因为清理数据的总结有助于识别数据的结构、异常值、异常现象和模式。这些见解可以帮助我们构建模型。然而,我将详细讨论 EDA 并在我的 Medium 个人资料中找到它。

模型构建

数据科学家有机会了解他的工作是否准备好提交,或是否需要审查。建模专注于开发描述性或预测性的模型。所以在这里,我们执行预测建模,这是一个利用数据挖掘和概率来预测结果的过程。对于预测建模,数据科学家使用一个训练集,这是一组已知结果的历史数据。这一步可以重复多次,直到模型理解问题和答案。

如果我们有分类数据,则需要创建虚拟变量,所以我将分类变量转换为虚拟变量。我还将数据分成训练集和测试集,测试集大小为 20%。我尝试了三种不同的模型,并使用平均绝对误差进行了评估。我选择 MAE,因为它相对容易解释,而且异常值对这种类型的模型没有特别大的影响。

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

转换后,我们的数据集的列数从 14 增加到了 178!!

我已经实现了三种不同的模型:

  • 多重线性回归——模型的基准

  • Lasso 回归——由于来自许多分类变量的数据稀疏,我认为像 lasso 这样的正规化回归会有效。

  • 随机森林——同样,由于数据的稀疏性,我认为这会是一个很好的选择。

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

现在开始时,它稍微有点差。所以我们尝试找到 alpha 的最佳值,使得误差最小。

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

在这里我也选择了 i/10,但误差仍然很高,所以我减少了 alpha 的值。

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

在绘制图表并检查 alpha 值后,我们发现 alpha 值为 0.13 可以得到最佳的误差项。现在我们的误差从 21.09 降低到 19.25(这意味着 19.25K 美元)。我们还可以通过调整 GridSearch 来改进模型。

GridSearch 是进行超参数调优的过程,以确定给定模型的最佳值。GridSearchCV 基本上就是将所有你想要的参数输入,然后它会运行所有模型,并筛选出结果最佳的模型。

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

我们还可以使用支持向量回归、XGBoost 或其他任何模型。

随机森林回归是一种基于树的决策过程,并且我们的数据集中有很多 0 和 1,所以我们期望它是一个更好的模型。这就是为什么我在这里选择了随机森林回归。

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

因此,我们现在获得的误差值比之前的更小,所以随机森林模型比之前的模型更好。我将随机森林模型与线性回归模型结合起来进行预测。所以我取了两者的平均值,即对每个模型给予了 50% 的权重。

大多数情况下,结合不同的模型进行预测更为有效,因为这样可以提高我们的准确性。这些类型的模型被称为集成模型,并且被广泛使用。误差可能会增加也可能不会,因为某一个模型可能会过拟合。

调优后的随机森林模型在这里表现最佳,因为与 Lasso 和线性回归相比,它的误差最小。因此,我们不仅可以取两者的平均值,还可以将 90% 的随机森林模型与 10% 的其他模型合并,测试准确性/性能。通常,这些类型的集成模型对于分类问题更好。

项目不应仅仅是尝试所有模型,而应选择最有效的模型,并能够讲述为什么选择这些特定模型的理由。通常,Lasso 回归应比线性回归效果更好,因为它具有归一化效果,而我们有稀疏矩阵,但在这里 Lasso 的表现却不如线性回归。因此,这取决于具体的模型,我们不能一概而论。

模型评估

数据科学家可以通过两种方式评估模型:Hold-Out 和交叉验证。在 Hold-Out 方法中,数据集被分为三个子集:训练集、用于评估训练阶段模型表现的验证集和用于测试模型未来可能表现的测试集。在大多数情况下,训练:验证:测试集的比例为 3:1:1,这意味着 60% 的数据用于训练集,20% 的数据用于验证集,20% 的数据用于测试集。

模型部署

所以我创建了一个基础网页,使其易于理解。给定员工和公司信息,该模型可以预测员工的预期薪资。

我已使用 flask 在 Heroku 部署了我的机器学习模型。我使用线性回归训练了模型(因为它易于理解),但你也可以使用任何其他机器学习模型,甚至可以使用集成模型,因为它们提供了良好的准确性。

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

在部署模型后,我尝试预测一位机器学习工程师的薪资,其中公司的评级为 4,公司成立 39 年前。根据我的模型,员工的预期薪资为 117.31K 美元。

在本文中,我没有详细讨论所有内容。但你可以随时参考我的GitHub 仓库来获取整个项目。我的结论是,你不应期待一个完美的模型,而是期望一个你今天可以在自己的公司/项目中使用的工具!

对于Ken Jee在数据科学领域的出色贡献和项目,表示由衷的感谢。

“目标是将数据转化为信息,再将信息转化为洞察。”–Carly Fiorina

原文。已获许可转载。

相关:

更多相关话题

如何使用 Python 构建数据库

原文:www.kdnuggets.com/2021/09/build-database-using-python.html

评论

作者 Irfan Alghani Khalid,计算机科学学生

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

Taylor Vick 摄影,刊登于 Unsplash

介绍

SQLAlchemy 是一个 Python 库,用于在不使用 SQL 语言本身的情况下实现 SQL 数据库。换句话说,你只需使用 Python 语言来实现你的数据库。

Flask-SQLAlchemy 是一个用于在 Flask 项目中连接 SQLAlchemy 库的库,它使得你的数据库实现比以往任何时候都要容易。本文将向你展示如何使用 Flask-SQLAlchemy 库构建你的数据库。

不再赘述,我们开始吧!

数据库

在进入实现之前,让我先解释一下什么是数据库。数据库是一个数据集合,这些数据彼此集成,我们可以通过计算机来访问它。

在数据科学中,你可能会以类似电子表格的形式插入和分析数据。在软件开发领域,这略有不同。我们来看看这个电子表格。

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

这张图片由作者拍摄。

在电子表格中,我们可以看到有两列。分别是书籍标题和作者姓名。如果你查看作者列,你会发现一些值重复了几次。这种情况我们称为冗余。

将整个数据集作为一个表格使用并不是最佳实践,特别是对于那些想要建立网站或应用程序的人来说。相反,我们需要将表格分开,这个过程叫做规范化。

总结来说,规范化过程将把数据集分成几个表格,每个表格都有其唯一的标识符,我们将这些标识符称为主键。如果我们分开上述数据集,它将会像这样:

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

这张图片由作者拍摄。

从上面可以看出,数据集已经分成了两个表格。分别是书籍表和作者表。作者的姓名在作者表中。因此,我们不能像在电子表格中那样直接访问姓名。

要检索作者的姓名,我们必须通过从作者表中获取 id 来连接书籍表和作者表。我们将作者的 id 视为书籍表的外键。

这可能很复杂,但如果你开始为应用程序实现数据库,它将提高你应用程序的性能。

实现

安装库

在我们进入实现之前,首先需要做的是在计算机上安装库。为此,我们可以使用 pip。下面是安装库的语法:

要加载库,我们可以调用以下语法:

正如你从库的名称中知道的那样,我们还需要加载 Flask 库。

启动数据库引擎

加载库后,下一步是设置我们的 SQLAlchemy 对象和数据库路径。默认情况下,SQLAlchemy 附带 SQLite 软件。

SQLite 是一种数据库管理系统,我们可以在其中构建和分析我们建立的数据库。你可以使用其他 DBMS,如 MySQL、PostgreSQL 或任何你喜欢的 DBMS。要设置我们的数据库,请添加以下代码行:

这段代码将初始化 Flask 和 SQLAlchemy 对象,并设置一个包含数据库路径的参数。在这种情况下,数据库路径是 sqlite:///C:\sqlite\library.db。

实现数据库

在我们设置好对象和参数之后,我们可以开始实现数据库。让我们回顾一下我们之前的数据库表:

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

这张图片由作者拍摄。

从上面可以看出,有两个表。每个表将有它的类,我们可以在其中初始化列名和表之间的关系。我们将继承一个名为 Model 的类来实现我们的表。根据上面的图示,代码如下:

插入值

创建类之后,我们可以构建我们的数据库。要构建数据库,你可以访问终端并运行以下命令:

现在让我们尝试在表中插入值。以这个示例为例,让我们输入之前电子表格中的数据。你可以按照以下代码插入值:

查询表格

在你向表中插入值之后,现在让我们运行查询以查看数据是否存在。以下是执行此操作的代码:

正如你从上面看到的,我们的提交成功了。虽然这仍然是一个介绍,但我希望你能掌握这个概念并在更大的项目中实现它。

附加内容:SQL 查询

除了 Flask-SQLAlchemy 库外,我还将演示如何使用原生 SQLite 访问数据库。我们这样做是为了确保我们的数据库已经创建。要访问 SQLite,你可以打开终端并编写以下脚本:

**sqlite3**

之后,它将显示类似这样的 SQLite 界面:

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

这张图片由作者拍摄。

在下一步中,你可以使用 .open 命令打开数据库,并像这样添加数据库路径:

**.open absolute//path//to//your//database.db**

为了确保我们已打开数据库,请在终端中输入 .tables,如下所示:

**.tables**

它将生成如下结果:

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

这张图片由作者拍摄。

很好,成功了。现在让我们尝试使用 SQL 语言查询我们的数据库:

**SELECT * FROM books**

这是结果:

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

图片由作者拍摄。

现在让我们尝试将两个表合并为一个。你可以在终端中输入这行代码:

**SELECT Book.title, Author.name FROM Book
INNER JOIN Author ON Book.author_id = Author.id;**

结果如下:

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

图片由作者拍摄。

最后的评论

做得好!现在你已经使用 Flask-SQLAlchemy 库实现了你的数据库。我希望这篇文章对你在项目中实现数据库有所帮助,特别是当你想使用 Flask 构建网页应用时。

如果你对我的文章感兴趣,可以在 Medium 上关注我,也可以订阅我的通讯。如果你有任何问题或只是想打个招呼,也可以在 LinkedIn 上关注我。

感谢阅读我的文章!

简介: Irfan Alghani Khalid 是 IPB 大学的计算机科学学生,感兴趣于数据科学、机器学习和开源。

原文。转载已获许可。

相关内容:

  • 如何用几行代码和 Flash 构建图像分类器

  • 原生 Python 中的简单 SQL

  • 如何查询你的 Pandas 数据框


我们的三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. Google 网络安全证书 - 快速进入网络安全职业。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. Google 数据分析专业证书 - 提升你的数据分析技能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. Google IT 支持专业证书 - 在 IT 方面支持你的组织


更多相关主题

构建和部署你的第一个机器学习 web 应用

原文:www.kdnuggets.com/2020/05/build-deploy-machine-learning-web-app.html

评论

Moez Ali 贡献,PyCaret 的创始人和作者

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

在我们的 上一篇文章 中,我们展示了如何使用 PyCaret 在 Power BI 中训练和部署机器学习模型。如果你之前没有听说过 PyCaret,请阅读我们的 公告 以快速入门。

在本教程中,我们将使用 PyCaret 开发一个 机器学习管道,包括预处理转换和回归模型,以根据年龄、BMI、吸烟状态等人口统计数据和基本患者健康风险指标预测住院费用。

??? 在本教程中你将学到什么

  • 什么是部署,我们为什么要部署机器学习模型。

  • 使用 PyCaret 开发机器学习管道并训练模型。

  • 使用一个名为‘Flask’的 Python 框架构建一个简单的 web 应用。

  • 在‘Heroku’上部署 web 应用,并查看你的模型运行效果。

??? 本教程中我们将使用哪些工具?

PyCaret

PyCaret 是一个开源、低代码的 Python 机器学习库,用于训练和部署生产中的机器学习管道和模型。PyCaret 可以通过 pip 轻松安装。

# for Jupyter notebook on your local computer
pip install **pycaret**# for azure notebooks and google colab
!pip install **pycaret**

Flask

Flask 是一个允许你构建 web 应用的框架。一个 web 应用可以是商业网站、博客、电子商务系统,或是一个使用训练模型从实时数据中生成预测的应用。如果你还没有安装 Flask,可以使用 pip 进行安装。

# install flask
pip install **Flask**

GitHub

GitHub 是一个基于云的服务,用于托管、管理和控制代码。想象一下你在一个大型团队中工作,多人(有时是数百人)在进行更改。PyCaret 本身就是一个开源项目的例子,数百名社区开发者持续为源代码做出贡献。如果你以前没有使用过 GitHub,你可以 注册 一个免费的账户。

Heroku

Heroku 是一个平台即服务(PaaS),它基于托管容器系统提供 Web 应用程序的部署,集成了数据服务和强大的生态系统。简单来说,这将允许你将应用程序从本地计算机转移到云端,以便任何人都可以通过 Web URL 访问。在本教程中,我们选择 Heroku 进行部署,因为它提供免费资源小时,当你注册新账户时可以获得。

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

机器学习工作流程(从训练到 PaaS 部署)

为什么要部署机器学习模型?

机器学习模型的部署是将模型投入生产的过程,在此过程中,Web 应用程序、企业软件和 API 可以通过提供新数据点并生成预测来使用已训练的模型。

通常,机器学习模型的建立是为了预测结果(例如,分类中的二元值,即 1 或 0,回归中的连续值,聚类中的标签等)。生成预测的方式有两种: (i) 批量预测;和 (ii) 实时预测。在我们的上一教程中,我们展示了如何在 Power BI 中部署机器学习模型并进行批量预测。在本教程中,我们将学习如何部署机器学习模型以进行实时预测。

商业问题

一家保险公司希望通过在住院时使用人口统计和基本患者健康风险指标来更好地预测患者费用,从而改善其现金流预测。

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

(数据源)

目标

建立一个 Web 应用程序,在其中输入患者的人口统计和健康信息,以预测费用。

任务

  • 训练和验证模型,并开发一个机器学习管道用于部署。

  • 使用输入表单构建一个基本的 HTML 前端,输入独立变量(年龄、性别、BMI、子女数量、吸烟者、地区)。

  • 使用 Flask 框架构建 Web 应用程序的后端。

  • 在 Heroku 上部署 Web 应用程序。部署完成后,它将变得公开可用,并可以通过 Web URL 进行访问。

??? 任务 1 — 模型训练和验证

训练和模型验证在集成开发环境(IDE)或 Notebook 中进行,可以是在本地计算机上或在云端。在本教程中,我们将使用 Jupyter Notebook 中的 PyCaret 来开发机器学习管道并训练回归模型。如果你之前没有使用过 PyCaret,请点击这里 了解更多关于 PyCaret 的信息,或查看我们网站上的入门教程

在本教程中,我们进行了两个实验。第一个实验使用 PyCaret 中的默认预处理设置(缺失值填补、分类编码等)。第二个实验有一些额外的预处理任务,如缩放和标准化、自动特征工程以及将连续数据分箱。请参阅第二个实验的设置示例:

# Experiment No. 2from **pycaret.regression** import *****r2 = **setup**(data, target = 'charges', session_id = 123,
           normalize = True,
           polynomial_features = True, trigonometry_features = True,
           feature_interaction=True, 
           bin_numeric_features= ['age', 'bmi'])

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

两个实验的信息网格比较

只需几行代码,神奇就会发生。注意在实验 2中,变换后的数据集具有 62 个用于训练的特征,而这些特征仅源于原始数据集中的 7 个特征。所有的新特征都是 PyCaret 中变换和自动特征工程的结果。

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

数据集在变换后的列

模型训练和验证的示例代码在 PyCaret 中:

# Model Training and Validation 
lr = **create_model**('lr')

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

线性回归模型的 10 折交叉验证

注意变换和自动特征工程的影响。R2 增加了 10%,且付出了很小的努力。我们可以比较两个实验的残差图,观察变换和特征工程对模型异方差性的影响。

# plot residuals of trained model **plot_model**(lr, plot = 'residuals')

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

线性回归模型的残差图

机器学习是一个迭代过程。迭代次数和使用的技术取决于任务的关键程度以及预测错误的影响。机器学习模型在医院 ICU 中实时预测患者结果的严重性和影响远大于预测客户流失的模型。

在本教程中,我们仅进行了两次迭代,第二次实验中的线性回归模型将用于部署。然而,在这一阶段,模型仍然只是 Notebook 中的一个对象。要将其保存为可以转移到其他应用程序并被其使用的文件,请运行以下代码:

# save transformation pipeline and model 
**save_model**(lr, model_name = 'c:/*username*/ins/deployment_28042020')

当你在 PyCaret 中保存模型时,会创建基于 setup() 函数中定义的配置的整个转换管道。所有的相互依赖关系都会自动协调。请参见存储在 ‘deployment_28042020’ 变量中的管道和模型:

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

使用 PyCaret 创建的管道

我们已经完成了训练和选择用于部署的模型的第一个任务。最终的机器学习管道和线性回归模型现在保存在本地驱动器中,位置由 save_model() 函数定义。(在此示例中:c:/username/ins/deployment_28042020.pkl)。

??? 任务 2 — 构建网页应用程序

现在我们的机器学习管道和模型已经准备好,我们将开始构建一个可以连接到这些管道并实时生成新数据预测的网页应用程序。该应用程序有两个部分:

  • 前端(使用 HTML 设计)

  • 后端(使用 Flask 在 Python 中开发)

网页应用程序的前端

通常,网页应用程序的前端是使用 HTML 构建的,这不是本文的重点。我们使用了一个简单的 HTML 模板和一个 CSS 样式表来设计输入表单。下面是我们网页应用程序前端页面的 HTML 代码片段。

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

home.html 文件中的代码片段

你不需要成为 HTML 专家来构建简单的应用程序。有许多免费的平台提供 HTML 和 CSS 模板,并且可以通过拖放界面快速构建美观的 HTML 页面。

CSS 样式表

CSS(也称为层叠样式表)描述了 HTML 元素如何在屏幕上显示。它是一种有效控制应用程序布局的方式。样式表包含背景颜色、字体大小和颜色、边距等信息。它们被保存在外部的 .css 文件中,并通过包含 1 行代码与 HTML 关联。

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

home.html 文件中的代码片段

网页应用程序的后端

网页应用程序的后端是使用 Flask 框架开发的。对于初学者来说,可以直观地将 Flask 视为一个可以像其他 Python 库一样导入的库。请参见我们用 Flask 框架在 Python 中编写的后端示例代码片段。

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

app.py 文件中的代码片段

如果你还记得上面第 1 步,我们已经完成了线性回归模型的确定,该模型在 62 个特征上进行了训练,这些特征由 PyCaret 自动工程化。然而,我们的网页应用程序的前端有一个输入表单,只收集六个特征,即年龄、性别、bmi、孩子数量、吸烟者、区域。

我们如何在实时中将新数据点的 6 个特征转换为模型训练时的 62 个特征?随着模型训练过程中应用的转换序列,编码变得越来越复杂且耗时。

在 PyCaret 中,所有的转换,如类别编码、缩放、缺失值填充、特征工程甚至特征选择,都会在生成预测之前实时自动执行。

想象一下你为了将所有转换严格按顺序应用到模型预测之前需要写多少代码。在实践中,当你想到机器学习时,你应该考虑整个 ML 管道,而不仅仅是模型。

Testing App

在我们将应用程序发布到 Heroku 之前的最后一步是本地测试 Web 应用程序。打开 Anaconda Prompt,导航到你计算机上保存 ‘app.py’ 的文件夹。使用以下代码运行 Python 文件:

python **app.py**

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

执行 app.py 时 Anaconda Prompt 中的输出

执行后,将 URL 复制到浏览器中,它应该会打开一个托管在你本地机器 (127.0.0.1) 上的 Web 应用程序。尝试输入测试值,查看预测功能是否正常工作。在下面的示例中,预期的账单金额为 19 岁女性吸烟者且无子女的西南部地区为 $20,900。

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

在本地机器上打开的 Web 应用程序

恭喜!你现在已经构建了你的第一个机器学习应用程序。现在是时候将这个应用程序从本地机器迁移到云端,以便其他人可以通过 Web URL 使用它。

??? 任务 3 — 在 Heroku 上部署 Web 应用

现在模型已经训练完成,机器学习管道也准备好了,应用程序已经在本地机器上测试过,我们准备开始在 Heroku 上部署。将应用程序源代码上传到 Heroku 有几种方法。最简单的方法是将 GitHub 仓库链接到你的 Heroku 账户。

如果你想跟着操作,可以从 GitHub 上叉取这个 仓库。如果你不知道如何叉取仓库,请 阅读这个 官方 GitHub 教程。

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

www.github.com/pycaret/deployment-heroku

现在你对上面展示的仓库中的所有文件都很熟悉了,除了两个文件,即 ‘requirements.txt’ 和 ‘Procfile’。

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

requirements.txt

requirements.txt’ 文件是一个文本文件,包含执行应用程序所需的 Python 包的名称。如果这些包在应用程序运行的环境中没有安装,应用程序将会失败。

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

Procfile

Procfile 只是提供启动指令的代码行,告诉 web 服务器在有人登录应用程序时应该首先执行哪个文件。在这个例子中,我们的应用程序文件名是 ‘app.py’,应用程序的名称也是 ‘app’。(因此是 app:app)

一旦所有文件上传到 GitHub 仓库,我们现在可以开始在 Heroku 上进行部署。请按照以下步骤操作:

步骤 1 — 在 heroku.com 上注册并点击 ‘创建新应用程序’

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

Heroku 仪表盘

步骤 2 — 输入应用程序名称和区域

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

Heroku — 创建新应用程序

步骤 3 — 连接到托管代码的 GitHub 仓库

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

Heroku — 连接到 GitHub

步骤 4 — 部署分支

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

Heroku — 部署分支

步骤 5 — 等待 5–10 分钟,成功

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

Heroku — 成功部署

应用程序已发布到网址:pycaret-insurance.herokuapp.com/

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

pycaret-insurance.herokuapp.com/

在结束教程之前还有最后一件事要查看。

到目前为止,我们已经构建并部署了一个与我们的机器学习管道配合使用的 web 应用程序。现在,假设你已经有了一个企业应用程序,你希望将模型的预测集成进去。你需要的是一个可以通过 API 调用输入数据点并返回预测的 web 服务。为此,我们在我们的 ‘app.py’ 文件中创建了 predict_api 函数。请查看代码片段:

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

app.py 文件中的代码片段(web 应用程序的后端)

以下是如何使用 requests 库在 Python 中使用此网络服务:

import **requests**url = 'https://pycaret-insurance.herokuapp.com/predict_api'pred = **requests.post(**url,json={
    
    'age':55, 'sex':'male', 'bmi':59, 'children':1, 'smoker':'male', 'region':'northwest'})**print**(pred.json())

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

向发布的网络服务发送请求以在笔记本中生成预测

下一个教程

在下一个教程中,我们将深入探讨如何使用 Docker 容器部署机器学习管道。我们将演示如何在 Linux 上轻松部署和运行容器化的机器学习应用程序。

关注我们的 LinkedIn 并订阅我们的 YouTube 频道以了解更多有关 PyCaret 的信息。

重要链接

想了解特定模块的内容?

自 1.0.0 版首次发布以来,PyCaret 提供了以下可用模块。点击下面的链接查看文档和 Python 中的工作示例。

另见:

PyCaret 入门教程(Notebook 版):

开发管道中有哪些?

我们正在积极改进 PyCaret。未来的发展计划包括一个新的时间序列预测模块,与TensorFlow的集成,以及 PyCaret 可扩展性的重大改进。如果您想分享反馈并帮助我们进一步改进,可以在网站上填写此表单或在我们的GitHubLinkedIn页面留言。

您想要贡献吗?

PyCaret 是一个开源项目。欢迎大家贡献。如果您想贡献,请随时处理开放问题。我们接受带有单元测试的开发分支上的拉取请求。

如果您喜欢 PyCaret,请在我们的GitHub 仓库上给我们⭐️。

Medium: medium.com/@moez_62905/

LinkedIn: www.linkedin.com/in/profile-moez/

Twitter: twitter.com/moezpycaretorg1

个人简介: Moez Ali 是数据科学家,也是 PyCaret 的创始人和作者。

原文。经许可转载。

相关:

  • 宣布 PyCaret 1.0.0

  • 在 Power BI 中使用 PyCaret 进行机器学习

  • 使用 pdpipe 构建 Pandas 管道


我们的前三大课程推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 1. 谷歌网络安全证书 - 快速进入网络安全职业。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2. 谷歌数据分析专业证书 - 提升您的数据分析技能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 3. 谷歌 IT 支持专业证书 - 支持您的组织 IT 需求


更多相关话题

猜你喜欢

转载自blog.csdn.net/wizardforcel/article/details/143459421