TowardsDataScience 博客中文翻译 2019(三百三十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

Conv 网络-影像分类张量流 Keras 示例

原文:https://towardsdatascience.com/machine-learning-image-classification-kaggle-competition-aerial-cactus-identification-3f720aa9e51c?source=collection_archive---------12-----------------------

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

Photo by David Sola on Unsplash

Kaggle 是一家公司,其商业模式是让来自世界各地的数据科学家竞争,为给定的问题建立最佳性能模型。换句话说,为了收费,Kaggle 为希望使用众包来解决数据问题的企业举办比赛。

在 Kaggle 比赛中,你会得到一套训练装备和一套测试装备。提供了测试集的功能,但隐藏了标签。目标是训练训练集,并使用它来预测测试集的目标标签。预测结果存储在提交文件中,并上传到 Kaggle 进行评估。参赛者可以看到他们的模型如何与其他竞争者相抗衡,并相应地调整他们的模型。当比赛结束时,第三套,其特征和标签的参赛者从来没有接触过,被用来确定赢家。通常情况下,这将惩罚那些模型倾向于过度拟合(即高方差)的团队。

有一个著名的例子,网飞提供了 100 万美元的奖金,但最终获胜的模型对他们来说太复杂了,无法投入生产。除此之外,Kaggle 的竞赛已经产生了一些好的结果。例如,保险公司好事达(Allstate)发布了一项挑战,在给定驾驶员属性的情况下,该模型近似于车祸的概率。202 名竞争者最终将好事达的模式提高了 271%。

在接下来的文章中,我们将通过一个 kaggle 竞赛来确定一个给定的图像是否包含一个 仙人掌。 比赛可以在这里找到

密码

在机器学习中,每当你在处理图像时,你应该自动思考卷积神经网络。幸运的是,Keras,一个运行在 Tensorflow 之上的高级 API,抽象出了构建神经网络的大量复杂性。

import cv2
import os
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from keras.models import Sequential
from keras.layers import Flatten, Conv2D, MaxPool2D, Activation, Dense, Dropout
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator

如果你想继续,继续从 Kaggle 下载训练和测试集,并将它们复制/解压缩到你的工作目录中。

train_directory = 'train'
test_directory = 'test'

此外,我们得到一个文件,其中包含每个图像的 id,以及它是否由仙人掌组成。

df = pd.read_csv('train.csv')
df.head()

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

让我们看看我们在做什么。

img = cv2.imread('train/0004be2cfeaba1c0361d39e2b000257b.jpg')
plt.imshow(img)

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

每个图像的高度和宽度分别为 32 像素和 32 像素。第三维度是指色彩。值 1 意味着它是灰度图像,其中每个像素的亮度范围从 0 到 255。值为 3 意味着它是一个 RGB 图像。在 RGB 图像中,每个像素都有红色、绿色和蓝色属性,每个属性的范围从 0 到 255。

img.shape

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

Keras ImageDataGenerator 对象可用于应用数据扩充。执行数据扩充是正则化的一种形式,使我们的模型能够更好地泛化。在训练阶段,根据提供给 ImageDataGenerator 的参数随机调整每批新数据。

train_datagen = ImageDataGenerator(
    rescale=1./255,
    validation_split=0.15,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True
)

让我们仔细分析一下这些论点的含义。

  • 重新缩放:重新缩放像素,使其亮度范围从 0 到 1
  • validation_split :为验证而留出的图像部分
  • shear_range :在固定方向随机移动每个点
  • zoom_range :随机放大图片内部。如果你传递一个浮点数,那么[lower, upper] = [1-zoom_range, 1+zoom_range]
  • horizontal _ flip:随机水平翻转图像

通常情况下,您将要处理的图像要么放在具有各自类名的文件夹中,要么放在 CSV 或 JSON 文件中的一个文件夹中,该文件将每个图像映射到其标签。例如,在第一个场景中,所有包含仙人掌的图像都放在名为 cactus 的目录中,所有不包含仙人掌的图像都放在名为 no_cactus 的单独目录中。在这种情况下,我们会在图像旁边看到一个 CSV。我们可以使用flow_from_dataframe方法将每个图像与其标签关联起来。

df['has_cactus'] = df['has_cactus'].astype(str)train_generator = train_datagen.flow_from_dataframe(
    df,
    directory = train_directory,
    subset = 'training',
    x_col = 'id',
    y_col = 'has_cactus',
    target_size = (32,32),
    class_mode = 'binary'
)
val_generator = train_datagen.flow_from_dataframe(
    df,
    directory = train_directory,
    subset = 'validation',
    x_col = 'id',
    y_col = 'has_cactus',
    target_size = (32,32),
    class_mode = 'binary'
)

接下来,我们可以着手构建我们的模型。我们网络的最后一层只有一个神经元,因为我们正在执行二元分类。在隐藏层中使用卷积和最大池来尝试和学习底层模式(例如,仙人掌看起来像什么)。

model = Sequential()model.add(Conv2D(32, (3,3) ,activation = 'relu', input_shape = (32,32,3)))
model.add(Conv2D(32, (3,3), activation = 'relu'))
model.add(MaxPool2D(2,2))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPool2D(2,2))
model.add(Conv2D(128, (3,3), activation='relu'))
model.add(MaxPool2D(2,2))model.add(Flatten())
model.add(Dense(512, activation = 'relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation = 'sigmoid'))

我们使用binary_crossentropy作为我们的损失函数,因为它是一个二进制分类问题,我们基于准确度来测量我们的模型的性能,并且我们使用Adam来最小化损失函数。

model.compile(
    loss = 'binary_crossentropy',
    optimizer = Adam(), 
    metrics = ['accuracy']
)

在机器学习的背景下,每个训练步骤我们都会计算梯度。如果我们使用小批量梯度下降,那么在一个步骤中, x 个例子被处理,其中 x 等于批量大小。例如,如果您有 2,000 个图像,并且批次大小为 10,则一个时期由 2,000 个图像/ (10 个图像/步骤)= 200 个步骤组成。

通常,我们会将批量大小作为参数传递给 fit 函数。然而,由于 Keras 数据发生器意味着无限循环,Keras 无法确定一个时期何时开始,另一个时期何时开始。因此,我们使用steps_per_epochvalidation_steps,它们简单地等于ceil(num_samples / batch_size)

history = model.fit_generator(
    train_generator,
    steps_per_epoch = 2000,
    epochs = 10,
    validation_data = val_generator,
    validation_steps = 64
)

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

我们加载测试样本,确保标准化数据,使每个像素的亮度范围从 0 到 1。然后,我们使用我们的模型来预测图像是否包含仙人掌。

ids = []
X_test = []for image in os.listdir(test_directory):
    ids.append(image.split('.')[0])
    path = os.path.join(test_directory, image)
    X_test.append(cv2.imread(path))

X_test = np.array(X_test)
X_test = X_test.astype('float32') / 255 predictions = model.predict(X_test)

最后,我们创建提交文件。

submission = pd.read_csv('sample_submission.csv')
submission['has_cactus'] = predictions
submission['id'] = idssubmission.head(10)

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

我们将 index 设置为 false,否则,它将为每一行添加一个索引作为第一列。

submission.to_csv('submission.csv', index = False)

能源领域的机器学习

原文:https://towardsdatascience.com/machine-learning-in-energy-c729c1af55c8?source=collection_archive---------14-----------------------

能源专家指南

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

在文章结束时,你将能够回答下列问题:

  • 什么是机器学习?
  • 为什么机器学习现在这么火?
  • 什么是驾驶性能?
  • 有哪些挑战?
  • 今天的机器学习和能源是怎么回事?
  • 能源和机器学习的未来会怎样?

词汇表

人工智能=感知环境并采取行动实现目标的机器。

机器学习=人工智能的一个分支,赋予计算机从数据中学习高维模式的能力。

深度学习=一系列机器学习模型,使用多层神经网络来逼近函数。

什么是机器学习?

*下一万家创业公司的商业计划书很容易预测:*取 X 加 AI —凯文·凯利

机器学习是自科学方法以来,我们在如何做工程方面取得的最大进步——Steve juventson

炒作已经正式见顶——深度学习正处于膨胀的预期的顶峰。

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

2018 年 Gartner 炒作周期

深度学习是现代机器学习炒作的基础。深度学习使用复杂的多层神经网络从大型数据集学习模式。这是机器学习的初级智能——模式识别。

机器学习已经在一系列困难问题上超越了先前的技术水平。它正在影响每个行业——这种能力源于神经网络从我们使用和学习的原始高维数据(如图像或文本)中学习的能力。

那么我们今天在哪里?目前,机器学习在计算机视觉和语言处理方面形成了突破性表现的核心部分。任务对象识别、图像分类、语音识别和语言翻译的最新技术都是由深度学习驱动的。

谷歌、亚马逊和脸书都拥有世界级的人工智能实验室,他们的大部分业务已经被机器学习所改变。机器学习的潜力在数字化程度较低的行业(如医疗保健、能源或教育)中更具潜力。

机器学习对人工智能

到目前为止,机器学习提供了狭义的人工智能(AI)。这些系统的能力通常是超人的,足以证明围绕机器学习的宣传是正确的。典型地,该任务涉及使用高维数据(即图像)的感知。这是机器学习的主要贡献——能够从原始的高维数据中创造商业价值。

这种狭隘的智能与许多人工智能研究人员的目标形成了鲜明对比——通用人工智能,即一台机器可以执行一台机器可以完成的各种任务。虽然几乎可以肯定,机器学习将成为通用人工智能的一部分,但要提供一台可以执行各种任务的智能机器,还需要更多的东西。

机器学习和人工智能不应该互换使用。机器学习只是更广泛的人工智能领域的一个子集。AI 包含多种不同的方法,超出了本文的范围。

机器学习经常与人工智能混淆的一个原因是现代机器学习的表现如何——一些研究人员甚至认为这是我们解决一般智能问题所需的全部。具体需要什么还不清楚,但我们离提供一般情报还有许多突破。狭义的超人类机器智能已经在这里了。

机器学习的三个分支

为了学习这些模式,机器学习利用三种不同的学习信号,这将机器学习分成三个分支。

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

第一个是监督学习,机器使用带标签的训练数据来学习如何预测看不见的数据的标签。例子包括时间序列预测、计算机视觉和语言翻译。监督学习是为什么脸书可以分辨出你的照片中是你的哪个朋友,或者为什么谷歌可以翻译你智能手机上照片的文本。

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

ImageNet 上计算机视觉的最新进展基准— 人工智能的恶意使用:预测、预防和缓解

第二个是无监督学习,机器能够在没有标签监督的情况下生成新数据。示例包括艺术风格转换和生成逼真的人脸。

生成对抗网络(GANs)学习使用两个竞争的神经网络来生成逼真的图像。一个网络生成图像(生成器),第二个网络必须决定图像是真是假。这种对抗性学习是可以有效的。

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

右边的所有图像都是机器生成的— Karras et。al (2019)一种基于风格的生成式对抗网络生成器架构(NVIDIA)

对抗性学习也可以用在我们机器学习的最后一个分支——强化学习。在强化学习中,机器在标量奖励信号的监督下学习选择动作。强化学习适用于各种带有奖励信号的决策问题,如成本或碳排放。

现代强化学习皇冠上的明珠是 2016 年 AlphaGo 战胜 Lee Sedol。围棋是人工智能在棋盘游戏中面临的最后一个巨大挑战——创造一台超人围棋计算机被认为是十年之后的事情。AlphaGo 使用深度神经网络从高维棋盘状态映射到最佳下一步棋。

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

李·塞多尔最终以 4 比 1 输给了 AlphaGo — AlphaGo 影片

AlphaGo 与 1996 年战胜 Garay Kasparov 解决国际象棋问题的计算机“深蓝”形成鲜明对比。深蓝的所有智能都源自一个程序员和国际象棋大师团队,他们手工将棋步输入机器。这与 AlphaGo 使用的监督形成了对比——通过在围棋比赛中玩自己来学习。

deep mind(alpha go 背后的伦敦实验室)随后推出了 AlphaZero,它以 100 比 0 击败了之前的版本。这个版本从不依赖于人类专家行动的数据集,完全从对抗性的自我游戏中学习。

为什么机器学习现在这么火?

这三个分支中的每一个都正在经历一个巨大的表现期、研究活动期和宣传期。所有这些改进的基础是深度学习——使用多层神经网络作为复杂函数逼近器。

这些人工神经网络的灵感来自于我们大脑中的生物神经网络。机器使用的人工神经网络要简单得多——但它们正在推动现代机器学习的性能。

神经网络就像任何其他功能一样,它接受一些输入并产生一个输出。将高维数据样本降维是机器学习的基本过程。例子包括从卫星图像预测太阳能发电,或从电网数据调度电池。

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

神经网络是通用的。如果神经网络只适用于计算机视觉,这仍然是一件大事。然而,神经网络正在向多个方向拓展。神经网络的这种普遍性使它们能够在广泛的问题上达到最先进水平,也使机器学习能够应用于广泛的行业。

神经网络的原子单元是感知器——一个简单的模型,它结合来自其他感知器的输入,通过非线性函数(如 sigmoid 或整流器)挤压它,并将输出发送给子感知器。这方面的数学问题超出了本文的范围——关键的要点是,将这些感知机堆叠到许多层中,可以让神经网络从大量数据中学习复杂的功能。

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

机器学习不仅仅是深度神经网络——像逻辑回归和随机森林这样的算法适用于许多商业问题。经典机器学习的问题是,它没有从海量数据中受益。因为神经网络的容量可以通过增加深度来增加,所以神经网络能够突破经典机器学习模型的限制。

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

深度神经网络能够从海量数据中学习— 改编自《AI 是新电》(吴恩达)

选择图层是为了利用原始数据中的结构。三个常见层完全连接,卷积和递归。

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

Deep mind Atari 作品2015中使用的深度卷积神经网络

卷积层受到我们自己的视觉皮层的启发,是现代计算机视觉的动力。它们允许机器看到。它们可以用来对图像内容进行分类,识别人脸并为图像创建标题。

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

一个展开的递归神经网络— colah 的博客

递归层处理输入并生成序列输出,为现代自然语言处理提供动力。递归网络允许机器理解数据中的时间结构,例如句子中的单词。

看到和理解语言的能力不仅能提高性能,还能让机器学习一般化。视觉和语言理解是低级技能,基本上用于人类生活的每个领域。掌握这些低级技能意味着机器可以在一系列行业中发挥作用。能量也不例外。

是什么驱动了现代机器学习的性能?

现代深度学习的性能是由两个过程的交互作用驱动的——数据可用性的增加和用大量数据训练大型模型的能力。

互联网和生成原始数据(传感器、图像和文本)的设备的兴起导致了对海量数据集的监管。这些海量数据集是深度神经网络的食物——没有数据,模型就无法学习。

训练大型模型的能力依赖于访问云中专门硬件的能力。在 21 世纪初,研究人员重新利用为视频游戏设计的硬件(图形处理器,或 GPU)来训练神经网络。这导致训练时间大幅加快,这很重要——我们对机器学习的所有理解都是经验性的(通过实验学习)。

第二个硬件趋势是云计算。云提供了在完全可变成本基础上进行计算的途径。亚马逊网络服务等平台允许按需访问大量支持 GPU 的计算能力,同时提供廉价的数据存储。这种对计算能力的获取在大型科技公司内部和小型公司中都有效。它使资产负债表受益于将资本支出(建设数据中心)转变为运营支出。

推动现代机器学习的最后一个趋势是获取算法和工具。几乎所有机器学习的相关文献都可以在 arXiv 这样的网站上免费获得。还可以在 GitHub 上访问机器学习工具的高质量实现。这种开放趋势与能源行业的付费墙和授权软件形成了鲜明的对比。

挑战

机器学习面临着广泛的挑战。检查所有这些问题超出了本文的范围——诸如可解释性、工人置换和滥用强大的狭义人工智能等问题是重要的问题,也是许多研究的焦点。将我们今天拥有的强大、狭隘的机器智能扩展为通用的人工智能,还有许多工作要做。相反,我们将专注于使用机器学习解决能源问题的具体挑战。

主要挑战是获取数据。能源行业仍处于数字化过程中——我在能源领域的所有工作都涉及建立基本的数据收集基础设施。我们已经看到了大量数据对机器学习的重要性——缺乏历史数据可能会阻碍许多能源和机器学习项目。

有远见的能源公司知道数据只能收集一次。它不仅仅是一个本地历史学家记录来自现场控制系统的数据。21 世纪能源公司拥有从传感器级数据到会计数据的一切数据,可供全球范围内需要这些数据的员工和机器接近实时地使用。

大型有趣数据集的管理是能源公司可以建立的少数可防御优势之一(另一个是品牌)。这些数据集很有价值,不仅因为我们今天可以如何使用它们,还因为明天可以产生的洞察力。

当考虑将机器学习应用于能源问题时,首先也是最重要的考虑因素是数据集。其实很多机器学习项目的第一步都是一样的——开始收集数据。用于监督机器学习的数据集有两个部分-特征(如图像或原始文本)和目标(您想要预测的内容)。用于强化学习的数据集是一个模拟器——学习算法可以与之交互的东西。

机器学习在能源领域的一些潜在应用包括(但不限于):

  • 预测性维护
  • 客户细分
  • 流失预测和最小化

现在,我们将深入探讨当今机器学习在能源领域的一些应用细节。

时间数列预测法

能源的经济和环境影响取决于使用时间。预测一直是能源领域的一项重要实践——可变风能和太阳能的增加使用使得预测更有价值。DeepMind 声称,通过提前 36 小时预测,能源价值提高了 20 %。更好的预测可以增加可再生能源的价值,减少对备用化石燃料的需求。

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

特别令人兴奋的是使用卫星图像和深度卷积神经网络预测风力或太阳能的能力——参见杰克·凯利和丹·特拉弗斯在开放气候修复的工作。

控制

复杂能源系统的最优控制是困难的。强化学习是一个决策框架,可以应用于许多能源控制问题,奖励信号的可用性,模拟器

更好地控制我们的能源系统将使我们能够降低成本,减少环境影响和提高安全性。

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

DeepMind 的数据中心优化是能源和机器学习最著名的例子。该算法使用数千个传感器在五分钟的基础上做出决策。这些传感器将数据输入深度神经网络,该网络预测不同的行动组合将如何影响未来的冷却发电效率。

这听起来像是 DQN 的一种形式——一种强化学习算法,可以预测每个可能行为的未来回报。

神经网络在云上执行计算,在本地控制系统进行安全验证之前,将建议的行动发送回数据中心。

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

数据中心的性能使用每吨冷却能量输入(kW/tonC)来衡量,并随着数据的增加而提高,在九个月内从最初的 12%提高到 30%。

关键要点

我们刚刚旋风般地介绍了机器学习。关键要点是:

  • 机器学习是正在工作的人工智能的子集
  • 机器学习有三大分支——监督学习、非监督学习和强化学习
  • 深度学习正在推动现代机器学习
  • 视觉卷积,序列递归
  • 性能由数据、云计算和算法的可用性驱动

更多技术和非技术机器学习资源,请查看 ml-resources 。对于强化学习资源,请查看 rl-resources

感谢阅读!

原载于 2019 年 4 月 25 日https://adgefficiency.com

金融中的机器学习:为什么你不应该用 LSTM 的来预测股市

原文:https://towardsdatascience.com/machine-learning-in-finance-why-you-should-not-use-lstms-to-predict-the-stock-market-3f7239b9832c?source=collection_archive---------14-----------------------

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

Photo by Markus Winkler on Unsplash

最近,机器学习有了很大的发展和兴趣,最有希望的成果是语音和图像识别。本文分析了一种深度学习方法——长短期记忆神经网络(LSTM 神经网络)在以标准普尔 500 为代表的美国股票市场上的应用效果。这篇论文表明,虽然这种技术在语音识别等其他领域可能取得了很好的成功,但在应用于金融数据时却表现不佳。事实上,它们的特点是高信噪比,这使得机器学习模型很难找到模式并预测未来的价格。

这篇研究文章的结构如下。第一部分介绍了 LSTM 和为什么他们可能适用于金融时间序列。第二节分析了 LSTM 应用于标准普尔 500 的性能。第三部分总结。

1.什么是 LSTM?

长短期记忆(LSTM)神经网络是一种特殊类型的深度学习模型。特别是,它是一种可以学习数据长期相关性的递归神经网络,因此通常用于时间序列预测。

图 1 显示了 LSTM 层的架构。

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

Figure 1 Architecture LSTM layer

如图所示,它由一个重复的核心模块组成。这种结构使得 LSTM 能够学习长期依赖性。第一 LSTM 块采用网络的初始状态和序列 X(1)的第一时间步长,并计算第一输出 h(1)和更新的小区状态 c(1)。在时间步长 t,该模块获取网络的当前状态(c(t 1),h(t 1))和序列 X(t)的下一个时间步长,并计算输出 ht 和更新的单元状态 ct。

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

Figure 2 Architecture LSTM block

图 2 显示了 LSTM 模块的架构,它由 4 个主要组件组成:

  • 输入门:控制单元状态更新的级别
  • 遗忘门:控制电池状态复位的电平
  • 候选单元格:添加单元格状态信息
  • 输出门:控制添加到隐藏门的单元状态的级别。

为了学习建模任务的特征并能够预测,需要训练 LSTM。该过程包括通过一些优化算法最小化目标函数(通常为 RMSE)来计算 LSTM 的权重和偏差。一旦模型在初始训练数据集上得到训练,并在验证集上得到验证,它就会在真正的样本外测试中得到测试。这确保了模型确实学习了有用的特征,并且它不会在训练集上过度拟合,对新数据的预测能力较差。下一节分析应用于标准普尔 500 的 LSTM 的性能。

2.绩效 LSTM 应用于美国股票市场

使用的数据集由美国股票市场的每日收盘价格组成,以标准普尔 500 为代表,从 1950 年 1 月 3 日到 2019 年 1 月 4 日,共 17,364 次观察。数据分为 60%用于训练,20%用于验证,20%用于测试。

图 3 显示了用于对数级分析的数据。

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

Figure 3 S&P 500 close prices (log scale)

在我们的分析中,我们训练了由 1 个隐藏层、20 个神经元和 20 个值的时间序列长度组成的 LSTM 神经网络。我们尝试了神经网络参数和架构的不同组合,发现了类似的结果。

图 4 显示了实际价格与训练有素的 LSTM 预测的第二天价格的比较。

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

Figure 4 LSTM predicted vs actual price for the S&P 500 (log scale)

从图中可以看出,预测值与实际价格非常接近,因此无法正确看到潜在的实际价格。因此,看起来 LSTM 在预测所考虑的时间序列的下一个值方面做得很好。

表 1 报告了预测第二天价格的 LSTM 准确度的性能统计。

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

Table 1 LSTM prediction accuracy stats

该数据证实了我们从图 4 中看到的情况。RMSE 中的低值和 R2 中的适当值表明,LSTM 可能擅长预测所考虑的时间序列的下一个值。

图 5 显示了从 2018 年 8 月 13 日到 2019 年 1 月 4 日,100 个实际价格与预测价格相比的样本。

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

Figure 5 LSTM predicted vs S&P 500 price for 100 days

这个数字让我们得出了不同的结论。总的来说,LSTM 似乎可以有效地预测第二天的值,但实际上,第二天的预测值与前一天的实际值非常接近。这可以从图 6 中进一步看出,该图显示实际价格比预测价格滞后 1 天。

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

Figure 6 LSTM predicted vs 1-day lagged S&P 500 price for 100 days

如图所示,2 系列几乎相同,证实了我们之前的结论。

这些结果表明,LSTM 无法预测股票市场第二天的价值。事实上,该模型能够做出的最佳猜测是一个与当天价格几乎相同的值。

3.结论

诚然,新的机器学习算法,尤其是深度学习,在不同领域都相当成功,但它们无法预测美国股市。如前面的分析所示,LSTM 只是使用非常接近前一天收盘价的值作为第二天的预测值。这是一个没有预测能力的模型所期望的。

这也突显出,尽管一些机器学习技术可能在金融领域有用,但量化对冲基金必须另辟蹊径,想出能够为客户带来阿尔法的策略。

如果您想了解我们投资产品的更多信息,请发送电子邮件至info@blueskycapitalmanagement.com或填写我们的信息请求表格。

最初发表于 蓝天资本

放弃

本文旨在学术和教育目的,而不是投资建议。我们提供的或来自我们网站的信息不应替代投资专业人士的建议。本文讨论的假设模型并不反映测试期间存在的任何实际产品或策略的投资业绩,也不能保证如果存在这种产品或策略,它会表现出类似的业绩特征。投资任何产品或策略的决定不应基于本文包含的信息或结论。这既不是出售要约,也不是购买证券权益的邀约。

JavaScript 中的机器学习

原文:https://towardsdatascience.com/machine-learning-in-javascript-b8b0f9f149aa?source=collection_archive---------7-----------------------

是不是更容易?难?还是单纯的好玩?

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

Picture on Unsplash by Luca Bravo

如果你以前尝试过机器学习,你可能会认为这篇文章的标题中有一个巨大的错别字,我打算用 Python 或 R 来代替 JavaScript。

如果你是一名 JavaScript 开发人员,你可能知道自从 NodeJS 创建以来,在 JavaScript 中几乎任何事情都是可能的。您可以使用 React 和 Vue 构建用户界面,使用 Node/Express 构建所有“服务器端”内容,使用 D3 构建数据可视化(Python 和 R 主导的另一个领域)。

在这篇文章中,我将向你展示如何用 JavaScript 执行机器学习!我们将从定义什么是机器学习开始,快速介绍 TensorFlow 和 TensorFlow.js,然后使用 React 和 ML5.js 构建一个非常简单的图像分类应用程序!

机器学习?那是什么?

除非你一直生活在一块石头下面,否则你很可能听说过机器学习(ML)和人工智能(AI)之类的词。即使你不是一个非常注重科学的人,你也可能在电视和互联网上看到过那些微软的广告,在那里人们谈论微软正在做的所有令人惊奇的事情。

事实是,几乎每个人在一生中的某个时刻都使用过机器学习和人工智能。划掉那个,每个人在生活中每天都在使用 ML 和 AI。从要求 Siri 和 Alexa 播放一些歌曲到使用手机上的导航应用程序来获得最快的上班路线,这都是 ML 和 AI。

但是我们如何定义这两个术语呢?让我们集中讨论 ML,因为它是本文的主题。用最简单的话说,机器学习就是:

一个研究领域,它允许计算机系统在没有给它任何具体指令的情况下做某事。

作为一名开发人员,你要以一种特殊的方式编写代码。您的客户或经理告诉您他们想要的输出是什么,您尝试编写一些代码来获得该输出。但是在机器学习中,你只知道需要解决的问题!你“教”你的计算机一些东西,然后坐下来,看看你从系统中得到什么惊人的结果!

要回答的问题是:我们如何进行机器学习?Python 程序员使用类似scikit-learn和谷歌令人惊叹的TensorFlow这样的包来执行机器学习。但是去年(2018 年),谷歌发布了 JavaScript 版本的 TensorFlow,优雅地叫做TensorFlow.js

但是为什么要用 JavaScript 做机器学习呢?首先,Python 的机器学习方式要求开发人员将机器学习代码保存在服务器上,然后使用 JavaScript 允许用户在客户端访问模型。这里我们遇到了一个潜在的问题。如果你的机器学习模型太受欢迎,很多用户都想访问它,那么你的服务器很有可能会崩溃!

但是如果我们使用机器学习,我们不仅为机器学习代码和用户界面代码保留了 JavaScript 环境,模型也将保留在客户端本身!还有,机器学习模型大多被金融公司使用。所以客户端 ML 模型意味着你的数据是私有的。

我们写点代码吧!

现在,您已经对 ML 有了一些基本的了解,并且知道了为什么用 JavaScript 来实现 ML 是一个好主意。但是 ML 是那些你可以通过尝试更好理解的东西之一。如果你想了解更多关于机器学习的内容,可以看看我不久前写的另一篇文章:

[## React Native 深度学习

围绕着人工智能(AI)这样的话题,人们总是非常兴奋。当有人提到…

medium.com](https://medium.com/@geekyants/deep-learning-with-react-native-65fae456839d)

在本节中,我们将使用 React 构建一个机器学习应用程序,它可以执行一些非常好的图像分类。

**侧栏:**机器学习过程包括两个步骤:训练和测试。训练包括向模型提供大量数据,然后模型将处理这些数据并识别不同的模式,然后模型将使用这些数据进行未来预测。

由于我们正在构建一个图像分类模型,因此在我们能够做出任何预测之前,我们需要将数以千计的图像发送到该模型进行处理。图像需要以某种方式相互关联,老实说,我没有那么多图片(我是一个害羞的人)。还有,JavaScript 的机器学习对我来说还是新鲜的。所以作为一个捷径,我将使用一个预先训练好的模型。

在我们开始编码之前,请确保您的系统上安装了以下内容:

  1. 节点 —我们将需要它来安装不同的软件包
  2. 代码编辑器——任何好的编辑器都可以。我个人喜欢用 VSCode

接下来是构建一个样板 React 应用程序。为此,请打开命令终端并运行以下命令:

$ npx create-react-app ml-in-js

该命令将创建一个名为ml-in-js的文件夹,并在您的系统中构建一个启动应用程序。接下来,回到命令终端,运行以下命令:

$ cd ml-in-js
$ npm run start

第一个命令非常简单。真正的奇迹发生在第二部。npm run start命令创建系统的本地开发级别,并在浏览器上自动打开,如下所示:

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

这个入门应用根本不知道什么是机器学习或者 Tensorflow。要解决这个问题,我们需要安装 Tensorflow.js 包。对于 Python 开发人员来说,您需要在您的系统上执行一次pip install tensorflow,并且可以在任何地方和项目中自由使用这个包。但是对于 JavaScript,你需要为每个项目运行npm install命令。

但我们不会在应用程序中安装 Tensorflow.js (TFJS)库,而是安装另一个名为 ML5.js 的库。这个库就像是 TFJS 的一个更好的版本,使我们在客户端进行机器学习变得更加容易。所以让我们像这样安装这个库:

$ npm install --save ml5

如果您想确保库安装成功,请转到src文件夹中的App.js文件,并编写以下代码:

import React, {Component} from 'react';
import * as ml5 from 'ml5';export default class App extends Component {
  render() {
    return (
      <div>
        <h1>{ml5.version}</h1>
      </div>
    )
  }
}

如果你回到浏览器,你会看到一个大大的 0.4.1 印在屏幕上。根据 ML5.js 的最新版本,这个数字可能会有所不同。只要您看到屏幕上打印的数字,您就可以放心,您的 ML5 库已成功安装。

至此,我们完成了安装部分。现在,我们需要创建一个函数,它可以接收图像,并使用预先训练好的模型对其进行分类。为此,在App组件中编写以下代码:

classifyImage = async () => {
  const classifier = await ml5.imageClassifier('MobileNet')
  this.setState({ready: true})
  const image = document.getElementById("image")
  classifier.predict(image, 1, (err, results) => {
    this.setState({
      predictionLabel: results[0].label,
      predictionConfidence: results[0].confidence,
      predicted: true
    })
  })
}

这里我们有一个名为classifyImage的异步函数。在这个函数中,我们首先通过加载MobileNet数据作为训练集来定义我们的图像分类器。一旦这个分类器准备好了,我们将ready状态设置为true。然后,我们选择用户插入的image并将其传递给分类器,运行predict函数。我们将最高预测的标签和置信度保存在state对象中。

我们的整个 App.js 文件将如下所示:

测试模型的时间到了。为此,我将给出下面的应用程序图像:

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

当我按下Classify按钮时,应用程序运行classifyImage功能,一段时间后您会得到以下结果:

The app is 63.99456858634949% sure that this is bucket

不是我所期待的。造成这种不正确结果的原因有很多。其中最重要的是,MobileNet 不是对该图像进行分类的合适数据集。

让我们试试其他图像。也许是一种动物:

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

Pic on Unsplash by Joséphine Menge

再次点击Classify按钮,我得到🤞:

The app is 90.23570418357849% sure that this is Border collie

哇!90%的信心,图像有边境牧羊犬,这是一种狗!

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

包扎

如果你一直坚持到现在,那么你已经用 JavaScript 做了一些机器学习!来吧,拍拍自己的背!

但是你和我离成为 ML 专家还有很长的路要走。在本文中,我们做了机器学习的测试部分,并使用了预训练的模型。真正的乐趣始于你获取自己的原始数据,并试图用它来训练你的数据。

这就是我现在要努力去做的。所以祝我好运吧!如果我成功了,我会写下一篇关于它的文章。

一如既往的感谢大家阅读我的长文。JavaScript 的机器学习我还是新手。因此,如果你认为我在这篇文章中犯了什么错误,或者我本可以做些不同的事情,那么请对此发表评论。

你可以在这里查看 React 应用的完整源代码:

[## rajatk16/ml-in-js

这个项目是用 Create React App 引导的。在项目目录中,您可以运行:在…中运行应用程序

github.com](https://github.com/rajatk16/ml-in-js)

制造业中的机器学习

原文:https://towardsdatascience.com/machine-learning-in-manufacturing-17c95290b1f6?source=collection_archive---------27-----------------------

供应链革命的案例研究

机器学习是技术领域的话题,但在大众意识中,它是一个如此广泛而又缺乏理解的概念,以至于它经常被解释为类似于魔法的东西。

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

source: pixabay.com

人们通常理解机器学习实际上意味着什么,但事实是,它在各个学科的应用实际上如许多人预测的那样广泛。

机器学习可以产生重大影响的一个领域是制造业。

让我们更仔细地看一下。

在现有原则的基础上

当亨利·福特引进装配线时,这是一场彻底改变制造业世界的革命。

它可以被合理地看作是****劳动过程自动化的第一步**,并且一直沿用至今。**

虽然福特的原则在当今几乎每一个生产过程中都在发挥作用,但它并没有一成不变。

其他公司已经磨练和完善了这项技术,以保持自己的竞争力。

丰田就是这种情况,在 20 世纪 70 年代,他们发现自己在效率方面落后于通用汽车。他们发明了众所周知的丰田制造技术。

虽然其 DNA 直接植根于装配线,但他们通过确定制造过程中最常见的七种浪费并将其作为简化流程的传奇,将精益制造的理念向前推进了几步。

它成为了一种非常有效的模式,以至于几年后,丰田会将这些原则传授给通用汽车,作为交换,通用汽车会帮助他们适应美国市场。

虽然竞争驱动市场,但通常可以确定完成任务的最佳方式,并且最佳公司将相互学习以开发自己的流程**。**

从最纯粹的意义上来说,制造业的成功是进化的,基于这样一种理念:创造最高效开发流程的公司将会繁荣,落后的公司将会灭亡。

机器学习似乎就是这种情况。

革命性的质量控制

装配线的建立是基于这样一个前提,即一个较大的执行重复性任务的雇员组比一个较小的多学科雇员组能获得更高的效率。

有些任务天生就比其他任务复杂。缺陷被丰田认定为汽车制造过程中的关键浪费之一。

机器学习可以在这方面有所帮助。

通过了解导致缺陷的潜在问题并识别这些缺陷的潜在风险因素,他们可以显著地减少浪费并加快生产进度**。**

钢铁生产部门的案例研究进一步支持了这种观点。

这并不是说机器学习算法将取代人类,而是说人类在这个过程中需要扮演的角色正在变得不同**。**

通过创建一个由数据工程师、领域专家和工厂经理组成的紧密核心,这项研究展示了机器学习可以制造更安全、缺陷更少、对消费者风险更低的产品的显著效果。

福布斯发现,机器学习实际上可以将缺陷检测率提高 90%。

长期以来,机器一直被用来识别肉眼无法察觉的风险,比如基于重量或形状的风险。

人类通常更善于识别颜色、裂缝、光泽和其他可能表明质量控制问题的问题。但是机器学习识别这些视觉线索的能力已经开始超过人类所能完成的。

这项研究可能是制造业中关于机器学习的最重要的发现,也是一项可能将行业改变到与丰田制造技术的引入相匹配的水平的研究。

预测性地识别问题

最大限度地减少缺陷的存在会对最大限度地减少未来的维护需求(或防止将客户置于风险之中)产生重大影响,但即使是最好的产品最终也会出故障。

这不仅仅是产品从装配线上下线的情况,也是最初制造它们的机器的情况。

在过去,维护设备是一个非常耗时的过程。设备必须从生产线上取下,由工人或机器仔细评估,以发现问题并紧固。

维护是必要的,值得花时间去做,因为装配线上的设备故障会造成更大的损失。

机器学习可以通过更好地确定设备何时应该退出生产进行维护来减少浪费。

●如果您过早对设备进行维护**,您会浪费不必要浪费的宝贵资源。**

●如果你执行太晚**,你可能会看到装配线流程的全面崩溃。**

机器学习可以确定维护设备的理想时间**,创造一个更安全、更高效的环境。**

工厂之外的机器学习

装配线流程和丰田制造技术都是为了提高生产要素或工厂的效率,但这并不是效率可以带来好处的唯一环节。

存储和交付产品的过程本身造成了低效率,这种低效率对底线的影响不亚于装配线上的问题。

幸运的是,机器学习算法可以有益于库存优化和供应链优化的双重需求**。**

对于一家从事制造业的公司来说,储存库存是最高的成本之一,占总成本的 20-30%。

库存就是在你需要生产多少之间找到一个平衡:有足够的库存让你的所有客户都能得到他们需要的东西,同时减少花费昂贵的费用储存积压的货物。

但决定需求的数据量太大,人类分析师无法处理。

人工智能可以更准确地解析这些信息,由于机器学习,它可以考虑更复杂的模式,以找到供需之间的完美平衡。

提高整个供应链的效率

机器学习通过以下方式帮助制造商:

●预测他们需要多少** 和什么类型的产品**

●确定何时需要****

●了解将产品运送到目的地的最有效的运输路线

●更准确地预测可能导致供应链放缓的复杂情况

效率不仅适用于生产,也适用于在最短的时间内获得你需要的产品并把你生产的产品送到消费者手中的过程。

有了机器学习,整个供应链改善

[1] P.Chojecki,人工智能如何改变世界 (2019),走向数据科学

[2] R .金达尔,汽车生产线终极指南 (2018),邦蒂有限责任公司

[3] J.Sutter 丰田如何培训通用 (2019),创新企业有限公司

[4]未知,钢铁制造中的产品质量预测与优化,Rapidminer

[5] L .哥伦布,2018 年机器学习变革制造业的 10 种方式 (2018),福布斯

[6] P. Trujillo,持有库存的实际成本 (2015),Wasp 条形码技术公司

[7] L. Ampil,数据科学产品管理基础:Ml 工作流程 (2019),走向数据科学

用通俗易懂的语言描述机器学习

原文:https://towardsdatascience.com/machine-learning-in-plain-language-817c88a92dbb?source=collection_archive---------33-----------------------

初学者机器学习的简明介绍。

就像生物一样,机器也可以学习做事。在这种情况下,机器是学生,而世界或另一个存在——无论是自然的还是人工的——是老师

根据 Tom Mitchell 1997 年的有影响力的书机器学习,机器学习有三个主要部分:

  • 需要学习的任务。
  • 学习任务的观察。
  • 任务进展如何。

要学习的任务包括预测知识或行动。这些任务执行得有多好是由预测知识的准确性和行动产生的奖惩决定的。

根据 Mitchell 的说法,当作为学生的机器通过观察更多的世界而更好地完成任务时,机器学习就会发生。

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

Artificial Intelligence & AI & Machine Learning by www.vpnsrus.com is licensed under the Attribution 2.0 Generic (CC BY 2.0)

学习类型

学生可以根据观察到的世界预测新知识。这可能包括对事物进行分类或评估,或者理解行动可能产生的好的或坏的结果。

学习预测知识

知识包括对世界当前状态的描述和基于该状态的预测知识。状态可以包括多条信息。例如,在电子邮件上注明包括发件人的电子邮件地址和电子邮件的正文。预测的知识将包括基于状态的电子邮件是否是垃圾邮件。

学生可以根据世界或老师给出的完整例子来预测知识。完整的例子是那些包括前因后果知识的例子。结果知识跟随先前知识。例如,电子邮件文本的后续知识(先行知识)可能是它被分类为垃圾邮件或不是垃圾邮件。使用这些完整的例子,学生发现模式或一般关系,称为假设,可以用来估计未来的后续知识,只有先行知识。这种学习形式被称为监督学习

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

Image via https://pxhere.com/en/photo/1575601 is licensed under the CC0 1.0 Universal (CC0 1.0)
Public Domain Dedication

学生也可以在没有包含结果性知识的例子的情况下预测知识。在这种情况下,学生在观察中发现模式和共性,可以用来估计随后的知识。这叫做无监督学习。例如,学生可以有一组对象照片,并根据照片中的共同特征(或状态)将该组对象分类为不同类型的对象。但是类别事先并不知道。这个例子是一个叫做聚类的无监督学习的例子。

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

Polaroids by Louise McLaren is licensed under the Attribution 2.0 Generic (CC BY 2.0)

学习行动

学生也可以根据可能得到的奖励或惩罚来采取行动。行动任务是通过所谓的强化学习来学习的。这包括学习状态(可能是目标)的可取性,以及可能导致状态被实现的行动。学生学习一个策略——在某些状态(即情况)下要做的动作。

例如,一个学生可以在迷宫中导航,到达终点的奖励与超时的惩罚。学生通过从一个位置移动到另一个位置来行动——从一个状态到另一个状态。期望的最终目标或状态是走出迷宫并获得奖励。

老师给予奖励或惩罚,他可以是另一个存在,也可以是外部世界本身。众生可以发奖;外部世界会带来惩罚,比如下雨或其他自然灾害。学生们学会寻找奖励,避免惩罚,不管它们来自何方。

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

The hedge maze at Traquair House by marsroverdriver is licensed under the Creative Commons Attribution-Share Alike 2.0 Generic license.

推理和知识结构

这三种学习形式从具体的例子中建立更多的一般知识——归纳推理的一种形式。概括储存在记忆中,并在新的情况下用于预测新的知识或行动——一种演绎推理的形式。它们包含两部分知识:前件和后件。例如,来自强化学习的策略具有作为当前情况的前因和作为要做什么的后果。

实践中的机器学习:算法

我们可以通过用机器学习算法给它们编程来制造学习机器——一系列接收输入并产生输出的指令。例如,监督学习算法将数据作为输入,并输出前件和后件知识之间的关系。这些算法可以从简单的指令系列到更复杂的甚至模仿大脑的指令系列——这些算法被称为神经网络

学习是人工智能的一部分

为了有效地发挥作用,学生需要将预测知识和行动结合起来。例如,监督学习可以用于识别国际象棋中的情况——在人工智能中称为状态——如处于“检查”状态。但是强化学习被用来找出在那种状态下最有效的行动来获得奖励——在这种情况下,就是赢得游戏。

已经制造出具有人工智能的机器来处理这些形式的学习,但是还没有一种机器能与人类的能力相匹敌。

三步线性回归

原文:https://towardsdatascience.com/machine-learning-in-python-numpy-part-2-linear-regression-in-3-steps-cad77bd92717?source=collection_archive---------26-----------------------

引入梯度下降

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

Photo by Charlie Foster on Unsplash

动机

我们在本系列的第一部分中的 9 步 中演示了如何使用 Python NumPy 构建神经网络,但是对于初学者来说可能太难理解了。在这种情况下,我们将使用 NumPy 库来实现最简单的机器学习模型之一的线性回归**。最好对微积分和 Python 语法有基本的了解(但不是必须的,因为你可以随时学习)。**

代码在GitHub上有。最初发布于edenau . github . io**

1.初始化

第一步。导入 NumPy。说真的。

2.生成数据

我们为标量输入X及其对应的高斯noise生成一万个点,这样对于一些固定的斜率w_true=7.6和截距b_true=-3.3,我们可以通过下面的线性关系生成yw_trueb_true的值完全是任意的。

y = w_true * X + b_true + noise

添加零均值高斯噪声使我们的数据更加真实。

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

Data points (blue) and linear relationship without noise (red)

3.梯度下降

实际上,我们不知道线性函数参数wb的值,这就是梯度下降的由来。我们将误差函数e定义为某些(w,b)的实际y和预测y=wx+b之间的平方差的和。****

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

该误差函数惩罚实际值和预测值y之间的不匹配。使用平方差代替绝对差||.||,这样我们可以解析地计算 ∂e/∂w∂e/∂b ,这留给读者作为练习。 这些渐变分别代表了 ***w*** ***b*** 增加的方向。 因此,如果我们想 减少 的误差e,我们应该通过去导数的 负方向 来更新参数。这可以表示为

w ← w - learning_rate * ∂e/∂w
b ← b - learning_rate * ∂e/∂b
# The key is the minus signs

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

Photo by Bernard Hermant on Unsplash

如果我们迭代地进行这些更新,直到(w,b)收敛,我们将得到一组最佳的参数,可以表示Xy之间的线性关系。

外卖

这是在 3 步 中使用 NumPy 库的线性回归算法的最小实现。如果你想测试你对线性回归的理解,以下是你可能想尝试的事情:

  • 使用其他库实现线性回归(在 GitHub上)
  • 训练测试数据集拆分
  • 多输入特征
  • 非高斯分布噪声
  • 不同的误差函数

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

Photo by Ameen Fahmy on Unsplash

代码可在 Github 上获得。编码快乐!

相关文章

感谢您的阅读!如果您对机器学习或 Python 感兴趣,请查看以下文章:

** [## 我希望我能早点知道的 5 个 Python 特性

超越 lambda、map 和 filter 的 Python 技巧

towardsdatascience.com](/5-python-features-i-wish-i-had-known-earlier-bc16e4a13bf4) [## 使用交互式地图和动画可视化伦敦的自行车移动性

探索 Python 中的数据可视化工具

towardsdatascience.com](/visualizing-bike-mobility-in-london-using-interactive-maps-for-absolute-beginners-3b9f55ccb59) [## Python NumPy 中的机器学习(第 1 部分):9 步神经网络

通过编码理解神经网络

towardsdatascience.com](/machine-learning-in-python-numpy-neural-network-in-9-steps-eafd0db25906)

最初发表于edenau . github . io**

现实生活中的机器学习

原文:https://towardsdatascience.com/machine-learning-in-real-life-eebcb08f099c?source=collection_archive---------13-----------------------

为现实世界的商业案例开发一个模型到底是什么样的

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

Photo by Ben White on Unsplash

你曾经参加过纸牌游戏比赛吗?如果你正在学习,或者已经学习了机器学习,很有可能在某个时候你会进入其中。这绝对是将你的建模技能付诸实践的好方法,我在学习的时候花了相当多的时间在 Kaggle 上。

如果你以前参加过机器学习竞赛,那么你的工作流程可能看起来有点像我的工作流程:

  1. 下载一些数据(可能是一个或几个 CSV 文件)。
  2. 或许做一点清理,或者数据集可能已经足够干净了。
  3. 执行一些预处理,例如将分类数据转换为数字数据。
  4. 通过各种合适的模型运行数据,直到找到最佳模型。
  5. 花很长时间在超参数调整、特征工程和模型选择上,因为一个很小的改进可能意味着你在排行榜上上升几个名次。
  6. 结束了

然而,如果你正在为一个真实世界的商业应用开发一个机器学习模型,这个过程看起来会非常不同。我第一次在业务场景中部署模型时,这些差异非常令人惊讶,特别是在工作流的某些阶段花费了多少时间。在下面的帖子中,我想描述在商业环境中开发模型的过程,详细讨论这些差异,并解释它们存在的原因。

在商业案例中,工作流将有更多的步骤,可能看起来有点像这样。

  1. 将业务问题转化为数据问题。
  2. 考虑机器学习模型如何连接到现有的技术栈。
  3. 花费大量时间提取、转换和清理数据。
  4. 花大量时间进行探索性分析、预处理和特征提取。
  5. 建立模型。
  6. 选择能够以最少的工程工作量集成到现有技术体系中的最佳模型。
  7. 考虑到商业价值,优化模型,直到它“足够好”。
  8. 部署模型。
  9. 在生产中监控模型。
  10. 必要时再培训。
  11. 构建版本 2。
  12. 继续,直到模型不再有商业用途。

在这篇文章的剩余部分,我将会更详细地介绍每一个步骤。

你需要把一个商业问题转化成一个数据问题

在 Kaggle 竞赛中,要解决的问题将在前面明确定义。例如,在一个名为“ Severstal:钢缺陷检测的最新比赛中,你得到了一些经过策划的数据,问题以数据问题的形式清楚地陈述出来。

如今,谢韦尔钢铁公司使用来自高频摄像机的图像来驱动缺陷检测算法。在这场比赛中,你将通过定位和分类钢板表面缺陷来帮助工程师改进算法。

在真实的业务问题中,不太可能要求您构建特定类型的模型。更有可能是团队或产品经理带着业务问题来找你。这可能看起来像这样,有时问题甚至可能没有被很好地定义。

客户服务团队希望减少企业回复客户电子邮件、实时聊天和电话的时间,以便为客户创造更好的体验并提高客户满意度。

根据这个业务请求,在开始构建实际的模型之前,您需要与团队一起规划和设计这个问题的最佳解决方案。

数据不会是干净的

您处理的数据几乎肯定不是干净的。通常会有丢失的值需要处理。日期格式可能不正确。值中可能有错别字、不正确的数据和异常值。在实际构建模型之前,可能会花费大量时间来删除错误数据、异常值和处理缺失值。

你可能不得不从不同的来源获取数据

同样,您需要的所有数据可能都不是来自一个简单的来源。对于数据科学项目,您可能需要从以下任意组合中获取数据:SQL 查询(有时跨多个数据库)、第三方系统、web 抓取、API 或来自合作伙伴的数据。与数据清理类似,这部分通常是项目中非常耗时的部分。

特征选择非常重要

一般来说,在机器学习比赛中,你有一个给定的数据集,其中包含有限数量的变量,可以在你的模型中使用。特征选择和工程仍然是必要的,但是首先你可以选择的变量数量有限。在处理现实世界的问题时,你很可能会接触到大量的变量。作为一名数据科学家,您必须选择可能会产生解决问题的好模型的数据点。因此,您需要结合使用探索性数据分析、直觉和领域知识来选择构建模型所需的正确数据。

建立模型是这个过程中最小的部分

花了这么多时间来选择、提取和清理数据,相比之下,你实际花在构建模型上的时间将会非常少。特别是对于模型的版本 1,您可能想要使用模型作为基线测试,那么您可能在第一个实例中只花费少量的时间在模型选择和调整上。一旦商业价值被证明,你就可以投入更多的时间来优化模型。

您将花费比您想象的更少的时间来调整模型

在 Kaggle 比赛中,花费数周时间来调整模型以获得模型分数的微小提高并不罕见。因为这个小小的改进可能会让你在排行榜上上升不少。例如,在当前的 Severstal 比赛中,排行榜上位置 1 和位置 2 之间的分数差目前仅为 0.002。花时间稍微提高你的分数肯定是值得的,因为这可能会让你获得最高奖项。

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

Kaggle.com

在商业中,你花在调整模型上的时间是一种成本。公司必须根据你完成这项任务的天数或周数支付你的工资。与任何事情一样,这种投资需要有商业价值形式的回报。一个模型的业务用例不太可能提供足够的价值来证明花费几天来提高一个 0.002 增量的模型的准确性是合理的。实际上,您将调整模型,直到它“足够好”而不是“最好”。

你不一定要用最好的模型

这让我想到了我的下一个观点,即你不会总是使用最好的模型或最新的深度学习方法。通常情况下,您将能够通过更简单的模型(如线性回归)交付更多的业务价值。这需要更少的时间(因此构建成本更低)并且更容易解释。

您的模型必须连接到某种端点,比如网站。此端点的现有技术体系将对您将部署的模型类型有很大影响。数据科学家和软件工程师经常会在最小化两端的工程工作上达成妥协。如果您有一个新模型,这将意味着对现有部署流程或大量工程工作的更改,那么您必须有一个非常好的业务案例来部署它。

工作不止于此

一旦投入生产,就需要对模型进行监控,以确保它像在培训和验证期间一样运行良好,并检查模型是否退化。由于多种原因,模型的性能通常会随着时间的推移而降低。这是因为数据会随着时间的推移而变化,例如客户行为的变化,因此您的模型可能会在新数据上表现不佳。出于这个原因,模型也需要定期重新培训,以保持业务绩效。

此外,大多数企业将有一个部署机器学习模型的测试和学习周期。因此,您的第一个模型通常是版本 1,以形成性能基线。之后,您将对模型进行改进,可能会更改特性或调整模型,以部署更好的版本并根据原始模型进行测试。

这两个过程可能会一直持续下去,直到该模型的业务案例不再存在。

结论

这篇文章的部分灵感来自 Chip Huyen 的这条推文。

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

机器学习角色很难招聘的部分原因是,我在这里讨论的许多在商业中部署机器学习的现实并没有在这些课程中教授。这就是为什么我如此热衷于实践优先的学习方法,也是为什么我认为工业实习、实习和初级数据科学角色如此重要。

然而,随着该领域技术的快速发展,隧道尽头有了光明,这有助于数据清理和模型部署等流程的自动化。然而,我们仍有一段路要走,因此,对于数据科学家来说,除了典型的数据科学家技能组合之外,开发软件工程技能、提高沟通技能以及拥有弹性和坚持不懈的心态仍然至关重要。

感谢阅读!

雪花中的机器学习

原文:https://towardsdatascience.com/machine-learning-in-snowflake-fdcff3bdc1a7?source=collection_archive---------6-----------------------

更新:截止 2021 年年中,这篇文章现在已经 2.5 岁左右了!在这段时间里,Snowflake 有了很大的发展,包括推出了 Snowpark ,这是将繁重的定制处理移入其引擎的最佳方式。
所以,如果你是从搜索引擎登陆到这里的,那是因为历史受欢迎程度比内容的有用性更高😁
如果你对一个有趣的实验感兴趣,这个实验采用基于集合的方法来研究最大似然算法,请继续读下去,希望你会喜欢这篇文章。
但是如果你正在寻找在生产中在雪花引擎中实际运行机器学习训练算法的最佳方式,有许多官方雪花合作伙伴已经修改了他们的产品,通过 Snowpark 推动处理。

如果你在雪花做机器学习,你需要有一个计划来操作它!自这篇文章以来,另一件事发生了变化,那就是我已经启动了一个名为 Omnata 的初创公司,它允许你 1)将你的 CRM 直接连接到 Snowflake 以获取实时的上下文数据,以及 2)将数据从 Snowflake 推送至你的 SaaS 应用。一定要来看看我们!

雪花目前正在全球掀起波澜,因为它是为云从零开始构建的令人兴奋的新数据仓库。

它已经拥有数量惊人的传统统计类型的聚合分析函数,但是即将发布的Javascript 存储过程允许您将其高效、灵活的分布式计算引擎用于 SQL 方言之外的更一般的任务。

我认为 ML 工作负载将是路测该特性的一个很好的方式,事实证明它真的很擅长!

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

我们应该吗?

数据库引擎是训练模型的好地方吗?

在数据库内处理和属于外部世界的计算之间有一条不断变化的界线。

随着 20 世纪 90 年代“数据挖掘”一词的流行,DBMS 供应商在其 SQL 方言中增加了统计建模功能,例如 IBM 推出了“智能挖掘器”,Oracle 推出了“ Oracle 数据挖掘”。

然后按照。随着 com 的繁荣,数据集增长到我们开始称之为“大”的程度,Hadoop 作为一种扩展处理的方式越来越受欢迎,随后是 Spark。数据挖掘工作负载已经转移到传统数据库管理系统之外。

但是就在许多人宣称 SQL 已死的时候,2010 年 Hive 发布了,突然间这些大量的数据又被称为数据仓库。快进到 2019 年,现在所有主要的云供应商都在其对象存储中的结构化和半结构化数据上提供了某种形式的 SQL 接口。

2018 年年中,谷歌宣布了 BigQueryML 的测试版,现在我们又回来使用 SQL 作为机器学习的抽象,尽管是在更大的数据集上,处理能力更强(也更有弹性)。截至 2019 年 2 月,BigQueryML 仍处于测试阶段,它目前相当基础,仅限于线性回归和逻辑回归。

只要算法能够适当地伸缩,就有很多很好的理由将您的数据仓库引擎用于 ML:

  • 简单性—无需管理另一个计算平台、在系统间集成以及提取/分析/加载数据
  • 安全性—数据保存在安全的地方,无需在外部系统中配置雪花凭据,也无需担心数据拷贝的最终位置
  • 性能——一个好的数据仓库引擎将维护大量用于优化查询的元数据,这些元数据可以在 ML 过程中重用,从而使其比通用计算平台更具优势

在雪花中

因此,让我们看看我们是否可以仅使用雪花引擎来实现一个适度、最小但合法的机器学习算法。

决策树可用于通过将数据集分解成越来越小的子集来构建回归或分类模型,这些子集被组织成一棵树。

为了最大限度地减少我需要实现的逻辑量,我将使用 ID3 算法进行一个回归树练习,主要是为了在构建树时可以重用 Snowflake 现有的标准差函数。

雪花并不像 Spark 那样是一个通用的集群计算框架,但是它非常擅长并行分析查询。

出于这个原因,也因为 javascript 是单线程的,我的目标是将尽可能多的计算交给查询引擎,让存储过程执行更多的协调任务。

场景

我选择了华盛顿特区的自行车共享数据集,使用每小时一次的频率。

我们可以把它存储在一个像这样的表中:

create table bikes_hours(instant numeric, dteday date, season numeric, yr numeric, mnth numeric, hr numeric, holiday numeric, weekday numeric, workingday numeric, weathersit numeric, temp numeric, atemp numeric, hum numeric, windspeed numeric, casual numeric, registered numeric, cnt numeric)

并使用 SnowSql 命令行工具上传 csv 文件。

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

Here’s the example data set in a Snowflake table

培养

首先,我们将创建一个表来存储我们的训练跑步和完成的模型,这只是在我们证明概念时的一些简单的事情:

create or replace sequence ml_model_runs_sequence start = 1 increment = 1;create or replace table ml_model_runs(run_id integer,
                                      table_name varchar(256),
                                      algorithm varchar(100),
                                      training_parameters variant,
                                      start_time timestamp, 
                                      end_time timestamp,
                                      model_object variant);

现在在 javascript 存储过程中实现 ID3 决策树算法。数学上,它看起来像这样:

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

我们在每个分支点应用该公式,以便选择下一个要拆分属性。

我不是一个沉迷于复杂性的人,这只是一种正式的说法,即我们将根据最好地“分组”其子代中的值(即具有最相似的值)的属性进行拆分。为此,我们将比较父母和子女之间的标准偏差(一个群体的成员与平均值的差异程度)。

我们的存储过程将接受四个参数:一个表名、一个目标变量(包含我们要预测的值的列的名称)、在树中用作属性的列的名称以及训练参数。

从树的顶部(根节点)开始,我们将在每个分支点运行两个查询。

第一个查询给了我们:

1)从该节点向下的所有目标值的标准偏差,因为我们将挑选减少该值最多的分支
2)从该节点向下的所有目标值的平均值,因为当我们到达叶子时,最终平均值被用作预测值
3)变异系数,当它变得太小时可以用于停止构建
4)从该节点向下的目标值的数量, 当它变得太小时,可用于停止构建
5)对于下面的每个潜在分支(来自剩余列的列表),中值。 如果选择了该属性,这将用于拆分数据。

在树的顶部,它看起来像这样:

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

但是随着树变得越来越宽,它开始看起来像这样:

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

heavily abbreviated

第二个查询有两个部分:

  • 一个子查询,用于测量每个子分支下目标的标准偏差(每个子分支乘以其相对于整体的大小)
  • 计算标准偏差减少的封闭查询,从最高到最低排序,以便我们可以轻松选择最大值

这两个查询都使用 WHERE 子句向下筛选到它们在树中的位置。

复杂的地方在于,我们不仅将分支选择卸载给雪花,还要求它使用 UNION 语句计算当前深度的每个分支。这使我们不必遍历整个树。

在树的顶部,有一个要计算的树分割和 5 个要评估的可能属性,查询如下所示:

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

在底部,当它评估每个分支的每个可能的分割时,它看起来像这样:

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

even more heavily abbreviated

在可用属性的总数(9)中,使用配置参数,我将它限制为一次评估其中的 5 个。

在第一次拆分时,第二个查询的查询计划如下所示(拆分每列所依据的值由第一个查询提供):

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

当您深入到一定深度时,查询计划开始看起来像这样:

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

内联发布所有这些的完整代码有点长,这里有一个链接

在运行之前,我们将选择变量。这不是一个如何进行数据科学的练习,所以我将只挑选一些看起来有用的。

首先,让我们向数据集添加一个分数列:

alter table bikes_hours add column score numeric

然后,使用雪花的样本函数,将源表拆分为 training (90%):

create temporary table bikes_hours_training as
select * from bikes_hours sample (90)

…剩下的 10%用于测试(10%):

create temporary table bikes_hours_testing as
select * from bikes_hours where instant not in (select instant from bikes_hours_training)

现在我们调用 decision_tree_train proc 来预测‘休闲’列(每小时休闲乘客的数量),使用其中的 9 列。

call decision_tree_train('bikes_hours_training', 'CASUAL', 'season,hr,weekday,workingday,temp,atemp,weathersit,hum,holiday');

ml_model_runs 表中的结果模型如下所示:

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

下面是模型对象的一个片段:

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

得分

为了生成对数据库记录的预测,我们需要一种方法来使用列中的值向下导航树。

最初我认为一个用户定义的表函数(UDTF)将会是完美的(代码这里,因为它应该利用你从雪花引擎得到的并行性。我构建了一个深入模型(作为一个 javascript 对象)直到到达叶子的模型。实际上,UDF 时间限制(大约一分钟?)似乎堆积在桌子上,我经常撞到它。

然后我发现决策树可以很容易地转换成庞大的 CASE 语句,并作为普通的 SQL 运行。所以我编写了一个存储过程(代码,这里是)来生成 case 语句,并对选择的表执行更新查询,将预测值放入其中一列。

所以我们运行它,传入决策树 json 对象和要放入分数的列的名称:

call decision_tree_score('bikes_hours_testing',(select model_object from ml_model_runs where run_id=1),'SCORE');

评价

评估模型的常用方法是均方根误差。我们可以在雪花中这样做:

select sqrt(sum(square(casual-score))/count(*) ) from bikes_hours_testing

结果是 25.49340847

考虑到值的范围从 0 到 367,这还不算太尴尬。

表演

培养

Snowflake 的一大优点是查询性能反馈内置在产品中。因此,在运行我的训练程序后,我只需切换到历史选项卡来查看个人资料。

我使用了 9 个属性,但是将培训限制为:

  • 一次最多比较 5 个属性
  • 变异系数下限为 10

这就产生了一棵有 33 片叶子的二叉树。

总的来说,在一个中型集群上训练需要 128 秒。

在根节点处,第一次查询(每个深度处每个节点的摘要)耗时约 200ms,在最终深度 10 处逐渐增加到 10 秒。

第二个查询(评估每个深度的每个节点的分支分裂候选)从 1.3 秒开始,在深度为 7 时逐渐增加到 23.8 秒,然后在最终深度为 10 时缩回到 14.8 秒(这是因为分支终止,所以树不会一直向下散开)。

得分

当然,得分几乎是瞬间的。将 CASE 语句传递给 Snowflake 查询引擎(即使是这么大的引擎)是一个很好的优化。

结论

这是一个有趣的练习,也是测试新存储过程特性的好方法。但最重要的是,它有效!

在这个实验的开始,我不确定它是否会表现得很好,但是到最后,我对结果感到非常兴奋。

接下来呢?

对这个基本实现有许多改进,包括不同的分裂方法(gini,entropy)以及对分类值的更好支持(而不仅仅是在中间值上分裂)。

但更重要的是,决策树构建形成了结构化数据最流行的 ML 算法(random forests,XGBoost)的基础,因此这种方法没有理由不能进一步扩展。

可能让数据科学家完全在雪花内部赢得 Kaggle 竞赛的其他难题是:

特征工程

雪花在这里也应该出类拔萃。用现有的函数库构建像 hot encoding 这样的函数应该很简单,并且已经支持值的分桶。

抽样

对于像构建随机森林这样的任务,数据集的随机采样变得非常重要。雪花似乎有很大的灵活性与内置的采样方法-另一个优点。

航空业的机器学习:下一步

原文:https://towardsdatascience.com/machine-learning-in-the-airline-industry-the-next-step-f6e64080abf2?source=collection_archive---------12-----------------------

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

Photo by Ross Parmly on Unsplash

这篇文章谈到了航空公司利用人工智能提高利润的机会

“必要性是创新之母”这句话可以很好地描述航空业的重大变化。在过去的 20 年里,航空公司的运营为世界提供了无数创新的想法,这些想法可以应用于大多数面向消费者的行业。其中一些想法包括动态定价、收入管理系统、优化成本的运营计划。像动态定价这样的概念在 10 到 15 年前是不可想象的。它引入了不同的顾客为同一产品支付不同的价格,而同时所有顾客都能获利的理念。

这种创新背后的必要性是,航空公司是整个旅行和旅游链中最令人苦恼的行业之一。这个行业的参与者的利润率非常低。因此,对他们来说,制定策略来赚取最大利润,同时帮助他们赢得价格战变得非常重要。

根据麦肯锡的一份报告,特别是旅游公司和航空公司,如果他们有强大的数据战略,获得客户的可能性增加 23 倍,保持客户的可能性增加 6 倍,盈利的可能性增加 19 倍。

在这篇文章中,我将讨论一些这样的策略,它们可以利用航空公司收集的大量数据来提高他们的底线。

中断和恢复

航空公司拥有大量关于航班延误的历史数据,可以很容易地从各种其他门户网站获取天气数据。结合这两组数据源可以帮助公司更好地计划即将到来的延误(如果有的话),即飞行中的出发或到达。

得益于此类信息的一个例子是,爱尔兰西部的风暴预计将在一两天内穿过英国,根据其强度,可能会扰乱世界上最繁忙的机场之一伦敦希思罗机场的航班时刻表。航空公司可以提前一两天通知乘客由于风暴即将到来的延误,以便乘客可以根据他们的旅行目的做出必要的安排。主管可能会提前重新安排会议,从而避免失去商业机会,或者游客可能会推迟预订目的地的酒店。结果是顾客非常满意,并因此获得了回头客。

以上是使用天气数据做好准备以防中断的一个例子。这也可以通过结合其他数据源来实现,如旅行目的地的动荡、旅行日期和时间。从而提供增强的客户体验。

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

Image by Author

重新安排机会

一项研究表明,获得一个新客户的成本是留住一个客户的成本的 7 倍。此外,该行业面临巨大的竞争,每个玩家都在惨淡的利润率上生存。因此,对于航空公司来说,在价格是大多数客户转换服务提供商的最重要参数的市场中,减少客户流失是非常重要的。

目前,对于提前预订航班以节省一些额外费用的客户来说,取消或重新安排航班的费用相当高。提前 30 天预订其航班的用户比预订接近出发日期的用户更有可能在接近旅行日期时重新安排航班。大多数提前预订的用户都希望通过提前预订来利用低成本优势。目前,改期的价格几乎等于用户最初购买机票的价格(参考文献 1)。下图就是一个这样的例子)。这阻碍了用户在行程有任何变化的情况下重新安排航班。

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

相反,航空公司可以保持较低的重新安排费用,从而抓住机会并在客户服务上获得高分。其工作方式是,重新安排费用而不是一个固定的数额应该是可变的,并与空缺席位被另一个客户填补的概率成比例。这可以通过使用诸如目的地的消费者需求、航班过去的预订趋势、航班中的空位数量、航班的始发地、目的地城市即将发生的事件等参数来容易地预测。

空位被另一个乘客占据的高概率会导致相同的座位被高价卖给新的乘客,因为航班需求高且更接近旅行日期。现有乘客为另一个航班的新座位支付少量费用,因为它更接近旅行日期。该航空公司从这两个客户那里获得收入。在一个票价占运营收入 75%的行业中,额外门票的销售对总收入贡献巨大。此外,它为航空公司和客户带来了双赢的局面。

无障碍程序

客户在机场办理登机手续和退房手续所花费的时间增加了旅行时间,有时可能会超过旅行时间。航空公司可以通过提供平稳过渡和减少在始发地和目的地机场的等待时间来大幅改善客户体验。

例如,使用面部识别的人工智能技术可以通过比较护照上的照片和客户的实际图像来帮助简化登记过程。该数据还可以与托运行李相关联,从而使在目的地机场领取行李变得更加简单。这也消除了顾客在结账时拿错行李的可能性。如果行李中有任何违禁物品,它还可以通过将行李映射到客户来提高机场的安全性。

由于便利是当今世界的王道,由人工智能(AI)驱动的智能礼宾服务已成为增强客户体验的必要条件。目前,只有当传单到达航空公司柜台时,才是追踪该传单登机的时候。在智能系统的帮助下,航空公司甚至可以在乘客到达机场登机之前就成为乘客旅程的一部分。传单可以在登机牌领取柜台或安检柜台收到关于排队的动态更新。如果愿意,客户还可以在最后一刻检查并更改航班。其中的一部分可能是-

托运和购买额外行李限额

在飞机上点一份特别餐

如果到达机场有延误,通知航空公司

正在检查登机门号码

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

Image by Author

根据个人选择量身定制

对于一家航空公司来说,顾客之旅不应该随着旅客到达目的地而结束。旅行结束后还会继续。根据一项研究,90%的旅行者在一个或另一个社交媒体平台上发布他们的旅行经历。这为航空公司提供了一个分析其品牌忠诚度的好机会。从社交媒体平台收集的数据的情感分析可以帮助航空公司改善他们的整体客户体验。

更进一步,对客户体验的实时分析有助于航空公司即时改进服务。例如,如果客户对其第一段旅程的整体旅行体验不满意,可以通过为其下一次转机航班提供免费的商务舱升级来获得补偿。这种补充将需要实时收集数据,并向传单提供定制的包。

同样,实时行李跟踪服务也很有帮助,可以让乘客知道他们的行李是否放错了地方或延误了。这些数据策略将对航空公司建立客户忠诚度和提高整体品牌价值大有帮助。

云中的机器学习:与 Jupyter、Spark 和 Dask 合作的最简单方法

原文:https://towardsdatascience.com/machine-learning-in-the-cloud-easiest-way-to-work-collaboratively-with-jupyter-spark-and-dask-12c6baca5177?source=collection_archive---------28-----------------------

昨天,我和一个朋友谈论数据科学和机器学习的环境变化有多快。他是一所商学院的院长,教授 MBA 学生数据和分析长达 20 年,见证了所有的起起落落。纵观历史,在经历了许多繁荣和失败之后,我们已经为机器学习度过了许多冬天。在他的职业生涯中,还没有人对他感兴趣。

那么,为什么它现在这么热:首先,计算机的力量——云计算和虚拟机使我们能够在比过去更短的时间内处理任何数据。第二,随着数字革命——互联网进入日常生活——可用于处理的数据量。第三,现在已经足够成熟——不像过去的大肆宣传时代,我们已经看到巨大的发展证明了可行性。

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

Photo Credit: Unsplash, by @ mimithian

机器学习(Machine learning)专注于开发计算机程序来访问数据并利用数据进行自我学习,它需要大量的计算能力。随着云计算的广泛采用,高性能虚拟机(VM)无需巨额资本成本即可获得,机器学习变得如此强大。

云平台上越来越多的机器学习工具表明,机器学习和云计算是相互依存的。随着新工具进入市场,在数据科学项目(包括代码、可视化和 Jupyter 笔记本)上共享和协作变得更加容易和高效。

像现收现付这样的支付模式以及随需求增长而扩展的可用性,使得启动机器学习工作负载变得如此容易。此外,由于云平台中可用的功能和工具,您不需要总是拥有博士学位或高级技能。当我在从事一个加密项目时,我们使用市场上可用的 Cloudinary 和 Google AI 工具轻松实现了一个欺诈检测算法。

机器学习和 Jupyter 笔记本

作为一名机器学习程序员,人工智能开发人员,或者更广义的数据科学家,Jupyter 笔记本已经成为我们工作中不可或缺的一部分。很容易看出为什么;Jupyter 笔记本允许数据科学家在简洁易用的界面中编写代码并立即执行。

Jupyter 笔记本提供更多。数据分析师发现 Jupyter 笔记本不仅是编写和执行代码的简单工具,也是可视化和解释性文本的简单工具。非典型的 Jupyter 笔记本可以用于“数据清理和转换、数值模拟、统计建模、机器学习等等”

同时,作为数据科学家的优秀原型工具,Jupyter 笔记本也面临一些挑战。

本地机器上的 Jupyter 笔记本

在典型情况下,Jupyter 笔记本将在用户的本地机器上运行,因此依赖于计算机的 CPU(或 GPU)规格。对于基本的数据科学任务,这不是问题,因为电脑可以管理处理需求。然而,如果科学家将执行涉及机器学习的高级操作,则需要更强大的系统,这些系统可随时通过云服务获得。

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

Photo Credit: Unsplash, by @ clintadair

分享 Jupyter 笔记本的问题

在团队项目中与其他团队成员共享 Jupyter 笔记本是一项同样具有挑战性的任务,尤其是当所有团队成员都不熟悉 GitHub 时 GitHub 是最常见的解决方案。当团队决定通过 GitHub 共享工作时,所有团队成员都需要将他们笔记本的最新版本提交给 GitHub。如果团队成员不熟悉 GitHub,这一要求和其他要求使得他们很难共享 Jupyter 笔记本。此外,GitHub 不允许其他用户使用共享链接查看和编辑 Jupyter 笔记本。这是云计算解决方案的一个可能特性。

在谷歌云平台(GCP)、微软 Azure 和亚马逊网络服务(AWS)等云平台上运行 Jupyter 笔记本成为数据科学家的常用解决方案。它解决了与团队成员共享 Jupyter 笔记本的主要问题,通过将笔记本托管在云上,提供了充足的计算能力选择。然而,与 GitHub 的情况一样,数据科学项目中的所有团队成员都必须熟悉所选择的云平台。这就需要一种解决方案来处理 DevOps,让数据科学家专注于数据科学。

进入土星云,这是一种基于云的服务,允许数据科学家发布代码、笔记本和其他形式的内容,与同事和队友分享。

是什么让 土星云 如此特别?

土星云是数据科学家在云上托管 Jupyter 笔记本并与团队成员共享的绝佳选择。它是首选,原因有三:

首先,在土星云上发布和分享笔记本比在 AWS 和 GCP 这样的普通云服务上更容易,这些云服务不是专门为数据科学家设计的。借助土星云,数据科学家可以在 GCP、Azure 或 EC3 上运行虚拟机(VM ),完成设置这些系统的复杂过程。它去掉了 DevOps,让数据科学家专注于编写代码来分析数据。Saturn cloud 允许数据科学团队指定合适的标准化环境,只需点击一下鼠标即可与 Jupyter、Spark 和 Dask 一起使用。

其次,土星云消除了基础数据科学项目使用 GitHub 共享笔记本的需求。借助基于云的工具,数据科学家可以通过链接与团队成员共享项目。通过该链接,团队成员可以查看和编辑 Jupyter 笔记本或通过该链接共享的代码。

第三,Saturn cloud 有一个自动化版本控制的特性,确保团队成员提交笔记本的最新版本。当使用像 S3 这样的版本化数据存储时,土星云在管理代码版本的同时管理数据版本,因此科学总是可重复的。

此外,土星云允许用户在任何云平台上运行自己的虚拟机(VM ),无论是 CGP、Azure 还是 EC3,从而为用户提供了灵活性和对成本的严格控制。用户可以从一个供应商迁移到另一个供应商。借助特殊的成本控制,如支出警报和支出限制,Saturn Cloud 可帮助您在您为自己和团队指定的云成本限额内运行。

如何在土星云中共享 Jupyter 笔记本?

开始使用 Saturn Cloud 很容易,大约需要 15 分钟来完成设置并运行第一个虚拟机。这本入门指南中详细说明的步骤包括首先注册土星云平台,然后在土星云上旋转你的第一台 Jupyter 笔记本。接下来是对您的笔记本进行设置和优化,当然还有发布笔记本以与团队成员共享。

在这篇文章中,Anne Bonner 生动地描述了如何在 Saturn Cloud 上注册,如何在平台上创建和发布 Jupyter 笔记,并提供了有用的提示和插图。Lukas Frei 还解释了如何在土星云上发布 Jupyter 笔记本。这里是一个 Jupyter 笔记本,他分享了在土星云上看到的纽约老鼠。你会注意到,一个人可以通过链接访问和编辑土星云上的笔记本,而不需要精通 GitHub、CGP、AWS 和其他类似的云平台。

Unity 中的机器学习

原文:https://towardsdatascience.com/machine-learning-in-unity-b87318a2fd16?source=collection_archive---------20-----------------------

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

你对强化学习或机器学习感兴趣,并对构建定制环境感兴趣?然后,我认为 Unity 的 ML-Agents 框架是适合你的工具。在过去的一年里,它已经成为一个相当稳定和广泛的实验平台。

机器学习很好玩!

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

Machine Learning is fun!

Unity3D 是什么?

Unity 是一个游戏引擎,试图将 3D 和 2D 游戏开发民主化。这是一个非常强大的工具,它允许你为许多平台(从 PC 到移动到控制台)创建具有尖端图形的复杂游戏。在过去的几年里,引擎的能力不断增长,增长到了难以跟踪的程度。但是现在,你不用担心这个。当使用 ML-Agents 时,我们可以忽略许多这些特性而不会感觉不好。

由于开发定制引擎是一项非常昂贵的工作,难怪许多游戏工作室都在使用 Unity 开发他们的游戏,如 Cuphead、Gwent、Monument Valley 和等等

为什么要把 Unity 和机器学习结合起来?

在我看来,Unity 在机器学习上投入巨资是一个非常明智的想法。作为一个游戏引擎,它已经提供了你构建环境所需的所有工具。此外,游戏中的人工智能大多使用寻路和决策树等技术,这些技术无法像机器学习那样动态适应玩家的行为。Unity 正在设想一个 NPC 不再被严格硬编码的未来。

想看视频吗?看看这个:

从哪里开始?

如果你认为:“好吧,你得到了我。这听起来很有趣,但我该从哪里开始呢?”。这是我们现在要解决的问题。如前所述,统一是一种野兽,它可以在一开始非常势不可挡。在进入机器学习之前,我建议先学习基础知识。这方面有很多不错的教程系列,像这个一个

在学习 Unity 的基础知识时,您需要记住以下几个提示:

  • 不要为灯光、着色器和图形而烦恼。让你的场景看起来很棒,感觉很真实,对于机器学习来说不是必须的。人工智能不在乎环境是否美丽。
  • 关注逻辑和脚本。你将在这里呆很长时间。好消息是:这并不复杂。Unity 为你做了大部分工作。

当你掌握了基础知识,你就可以开始机器学习了。你可以在这里找到 ML-Agents 工具包。如果您仍然对发动机的许多方面感到困惑,请不要担心。这是意料之中的!!

ML 代理——一些提示

首先文档是你最好的朋友。请务必仔细阅读,细节决定成败。本文的目标不是一步一步的分解。但是我想给你一些建议,在开始之前我会很感激的。

  • 先看看例子。我的意思是真的检查他们。查看代码,尝试理解每一个细节。您可以在这里找到许多最佳实践,它可以帮助您构建自己的环境。
  • 开始尽可能简单。如果你觉得:“哦这个环境太轻松了,真没意思”。完美,只有这样你的环境才足够简单。当你的特工训练成功后,你可以随时增加复杂性。但是它减少了你犯错的机会。强化学习中的小错误会导致灾难。
  • 工作认真。在编程中,我们习惯于先按 play,再修复错误。对于机器学习来说,这是一个坏主意,因为迭代时间取决于训练时间。训练时间从几个小时到几天不等。
  • 与人工输入一起工作,直到一切正常。通过使用所谓的“玩家大脑”,你可以控制代理。它允许更快的测试和迭代,并且您可以在培训代理之前确保您的环境的基础是稳固的。
  • 如果一切正常,切换到独立版本。在使用您的输入测试所有核心功能后,您可以切换到实际培训。首先在编辑器中这样做。如果一切似乎都很好,切换到一个独立的版本。编辑器有很多开销,不必要地减缓了你的训练时间。
  • 人类示范是你的朋友。当我开始的时候,我高估了代理人的能力。看似简单的环境可能极具挑战性。记录你的游戏可以极大地加快学习过程。用它!
  • 奖励塑形危险,适量使用。很多时候,奖励都是在一个关卡结束才给的。因此,要获得任何奖励都需要一系列复杂的步骤。当你看着代理人努力获得任何奖励时,即使经过几个小时的培训,给予一些中介奖励也是非常诱人的。这很容易导致剥削或者以你可能不喜欢的方式塑造游戏。在你塑造奖励之前,试着利用好奇心或人类示范。

我希望这有所帮助!如果你感兴趣的话,我正在经营一个 youtube 频道,里面有关于强化学习的内容。查看 这里

亚马逊 SageMaker 和 Terraform 的机器学习基础设施——欺诈检测案例

原文:https://towardsdatascience.com/machine-learning-infrastructure-with-amazon-sagemaker-and-terraform-a-case-of-fraud-detection-ab6896144781?source=collection_archive---------11-----------------------

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

Image by krzysztof-m from Pixabay

想到机器学习和它的“深度”孩子,深度学习,人们会立即想象出一个只有通过巨大的计算能力才能解决的复杂网络。大数据的出现,特别是云机器学习平台,极大地简化了更广泛人群对这些计算能力的访问。

一个云机器学习平台提供了一个完全托管的基础设施,它可以自动扩展,与最新的数据技术集成,并配备了许多内置算法。这使得任何开发人员和数据科学家都能够快速构建和部署模型,而无需担心底层复杂的基础设施。

亚马逊 SageMaker亚马逊 Web Services (AWS) 提供的云端机器学习平台。

AWS 解决方案构建团队分享了许多基于亚马逊 SageMaker 构建的不同解决方案,涵盖了电信预测分析或预测性列车设备维护等主题。

在这篇文章中,我将以 信用卡欺诈检测解决方案 为例,解释如何使用 Terraform 建立支持基础设施,同时将解决方案分解成更小的块。

这篇文章的目标读者是对学习支持机器学习的云基础设施和快速浏览机器学习工作流程感兴趣的读者。

免责声明 :我不自称任何机器学习方面的专业知识。这篇文章中所有的机器学习工作都来自 AWS 网站。我主要关注云基础设施和开发运维。我确实有数据分析的背景,使用过 R 进行金融预测和风险管理计算,但这不是这里的主要目的。

A.介绍

这个解决方案的目标是预测给定的信用卡交易是否是欺诈性的。

这是一个二元(是/否)分类,通常需要逻辑回归算法,在 Amazon SageMaker 的上下文中,该算法相当于带有二元分类器预测器类型的内置线性学习器算法。

本文的完整项目托管在 Github 上。

B.解决方案概述

该解决方案有 3 个主要部分:

  1. 基于示例信用卡交易数据集训练模型。
  2. 将模型存储在可访问的界面中。
  3. 使用该模型来预测生成的交易是否是欺诈性的。

这些是典型的机器学习过程,看起来像这样:

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

Source: https://hackernoon.com/a-brief-overview-of-automatic-machine-learning-solutions-automl-2826c7807a2a

C.实施演练

让我们根据以上 3 个部分来实现。

1.基于示例信用卡交易数据集训练模型。

要训练模型,需要以下组件:

。信用卡交易数据集,其中欺诈交易已经被识别(也称为标记)。

。存储为 Docker 映像的机器学习算法(对于外行来说相当于 CD-ROM)。

。一个服务器,带有预加载的机器学习库,供数据科学家准备、可视化和增强训练数据,然后设置算法的参数(通俗地说;机器学习中的超参数说话)。

四世服务器使用特定算法训练模型,这本质上是机器学习的“学习”部分,也是需要最多计算能力的部分。

亚马逊 SageMaker 提供 iiiiiiv 作为托管服务,而 i 取自公共数据源。

1a。基础设施

这是它开始变得技术性的地方。如果对基础设施不感兴趣,可以跳过这个。

就这部分解决方案的基础设施而言,我们只需要设置 iii (称为 notebook 实例),其中包含了所有必要的库和一个Jupyter notebook,基本上就是数据科学家的工具代码(cum 文档)。位于源代码库中source/notebooks/sagemaker_fraud_detection.ipynbJupyter 笔记本,包括使用 Amazon SageMaker 的库检索 ii (算法)和交付 iv (训练实例)的代码。

在 AWS 世界中,一个实例通常是指一个服务器,它可以是一个虚拟机或一个容器。

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

如上所述,笔记本实例需要一些支持资源,包括:

  • 笔记本实例的 IAM 角色和策略:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/iam_sagemaker.tf

  • 用于存放 Jupyter 笔记本的 S3 桶:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/s3_lambda.tf

  • 用于存储训练数据以及生成的模型数据的 S3 存储桶:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/s3_sagemaker.tf

  • SageMaker 笔记本实例:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/sagemaker.tf

1b。笔记本实例初始化脚本

为了让 notebook 实例获得位于我们源代码中的 Jupyter 笔记本,我们必须添加一个 init 脚本,从上面的AWS _ S3 _ bucket . fraud _ detection _ function _ bucket(我们使用 aws_s3_bucket_object 上传)下载笔记本。这是使用笔记本实例的生命周期配置完成的:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/sagemaker.tf

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

sagemaker_instance_init.sh

1c。培训用 Jupyter 笔记本逻辑

以下是 Jupyter 笔记本中的主要步骤:

I .下载样本数据并提取特征和标签(欺诈/非欺诈)。

二。将 n 维数组转换为 RecordIO 格式(一种高效的数据格式)。

import sagemaker.amazon.common as smac
buf = io.BytesIO()
smac.write_numpy_to_dense_tensor(buf, features, labels)

。将记录数据存储到 S3 桶中。

bucket = "fraud-detection-end-to-end-demo"
prefix = 'linear-learner'
key = 'recordio-pb-data'boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'train', key)).upload_fileobj(buf)

。为线性学习算法检索 Docker 图像。

container = get_image_uri(boto3.Session().region_name, 'linear-learner')

v 。使用所需的实例类型和实例数量创建一个训练作业,更改算法的(超级)参数,并使用之前上传到 S3 的训练数据开始训练。您可以看到,建立一个服务器集群来训练一个模型是多么简单,并且只需为训练花费的时间付费,这是一个主要的成本节约。

import sagemaker
s3_train_data = 's3://{}/{}/train/{}'.format(bucket, prefix, key)
output_location = 's3://{}/{}/output'.format(bucket, prefix)linear = sagemaker.estimator.Estimator(container,                                              
                                 get_execution_role(),                                       
                                 train_instance_count=1,                                       
                                 train_instance_type='ml.c4.xlarge',                                       
                                 output_path=output_location,                                       
                                 sagemaker_session=session)linear.set_hyperparameters(feature_dim=features.shape[1],                                              
                           predictor_type='binary_classifier',                           
                           mini_batch_size=200)linear.fit({'train': s3_train_data})

完整代码:https://github . com/q tangs/TF-fraud-detection-using-machine-learning/blob/master/source/notebooks/sage maker _ fraud _ detection . ipynb

2.将模型存储在可访问的界面中。

要存储模型并将其呈现给外部世界以便以后进行预测,需要以下组件:

。模型数据

二世。其他模型元数据(容器、培训作业等)

。端点(接口)配置

。实际端点(按需运行预测的一组服务器)

Amazon Sagemaker 托管 iiiiiiv ,而 i (模型数据)存储在 S3,正如我们在前面的代码(output_location)中看到的。 iii (型号规格)均在调用linear.fit(...)结束时创建。

端点配置( iii )和实际端点( iv )由 Jupyter 笔记本的这一部分创建:

linear_predictor = linear.deploy(initial_instance_count=1,                                 
                           endpoint_name="fraud-detection-endpoint",                                 
                           instance_type='ml.m4.xlarge')

完整代码:https://github . com/q tangs/TF-fraud-detection-using-machine-learning/blob/master/source/notebooks/sage maker _ fraud _ detection . ipynb

3.使用该模型来预测生成的交易是否是欺诈性的。

有了创建的端点,我们现在可以在任何生成的事务上使用它。

为了模拟即将进行预测的事务,我们需要:

  • 创建一个 CloudWatch 事件,每 1 分钟触发一次 Lambda 函数。
  • AWS Lambda 函数是使用代码库中位于source/fraud_detection/index.py的代码创建的。它遵循以下步骤:随机选择预定义的欺诈或非欺诈交易,将交易发送到端点以获得欺诈预测,在进行一些小的处理后,将结果发送到 Kinesis Data Firehose。
  • 将流式结果存储到 S3 的 Kinesis 数据消防软管。
  • 最后,S3 桶。

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

如上所述,带有蓝色 Terraform 徽标的资源是必需的:

  • 云观察事件:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/cloudwatch_event.tf

  • Lambda 预测函数的 IAM 角色和策略:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/iam_lambda.tf

  • 用于存储函数代码的 S3 存储桶,取自我们代码库中的source/fraud_detection/index.py

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/s3_lambda.tf

  • 处理新事务的 Lambda 函数:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/lambda.tf

  • 用于 Kinesis 数据消防软管的 IAM 角色和策略:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/iam_kinesis.tf

  • 存储来自 Kinesis 数据消防软管的已处理事务的 S3 存储桶:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/s3_kinesis.tf

  • 最后,Kinesis 数据消防软管:

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

Complete code: https://github.com/qtangs/tf-fraud-detection-using-machine-learning/blob/master/terraform/kinesis.tf

D.部署

Terraform 代码位于terraform文件夹中(原始云信息可在cloudformation中找到)。

在运行terraform apply之前,需要进行一些设置:

。将terraform_backend.tf.template复制到terraform_backend.tf并相应修改数值。您需要手动创建一个 S3 存储桶或使用现有的存储桶来存储 Terraform 状态文件。

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

terraform_backend.tf.template

对 Terraform 状态使用远程后端是一个很好的实践。即使像这样简单的场景也应该这样做。

。将terraform.tfvars.template复制到terraform.tfvars,并相应修改数值。您不需要创建此处指定的任何存储桶;它们是由terraform apply创造的。

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

terraform.tfvars.template

iii 。一旦创建了以上文件,只需运行以下 terraform 命令。记住确保所有命令返回 ok,并在应用前查看地形图。

# Set default AWS profile,
# use 'set' instead of 'export' for Windows.
export AWS_PROFILE=<your desired profile>terraform init
terraform validate
terraform plan -out=tfplan
terraform apply --auto-approve tfplan

Terraform 平面图的输出应该如下所示:

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

terraform apply的结果:

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

最终手动步骤

一旦所有的 Terraform 资源都设置好了,你需要按照 AWS 站点记录的这些手动步骤:

运行笔记本

  1. 导航到亚马逊 SageMaker 控制台
  2. 在导航窗格中,选择笔记本实例
  3. 选择frauddetectionnotebook instance
  4. 笔记本实例应该已经在运行。
  5. 选择打开 Jupyter
  6. 在 Jupyter 笔记本界面,打开sagemaker_fraud_detection.ipynb文件。
  7. 单元格下拉菜单中,选择运行全部运行文件。

启用云观察事件规则

  1. 导航到 AWS Lambda 控制台
  2. 在导航窗格中,选择功能
  3. 选择fraud_detection_event_processor λ功能。
  4. 设计器选项卡的图中,选择 CloudWatch 事件
  5. CloudWatch 事件选项卡中,选择*<stackname>*-ScheduleRule-*<id>*
  6. 选择动作动作>动作启用
  7. 选择启用

验证 Lambda 函数正在处理事务

  1. 导航到AWSλ控制台
  2. 在导航窗格中,选择功能
  3. 选择fraud_detection_event_processor λ功能。
  4. 选择监控并验证调用图显示活动。
  5. 几分钟后,检查已处理事务的结果亚马逊 S3 桶。

E.清除

完成实验后,只需执行以下操作即可删除所有资源并节省成本。再次提醒,记得在应用之前检查地形图。

terraform plan -destroy -out=tfplan
terraform apply tfplan

您应该能够看到如下输出:

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

F.摘要

亚马逊 SageMaker 是一个强大的平台,我们刚刚触及它的表面。

感谢 AWS Solution Builders 团队,我们有许多关于如何利用 Amazon SageMaker 的精彩例子。

与此同时,Terraform 简化了企业的基础设施设置,开发运维及持续交付变得越来越重要。

在未来的帖子中,我将研究 AWS 团队提供的更复杂的示例,并探索如何设计 Terraform 基础设施,以适应机器学习设置中的 CI/CD 管道。

感谢您的阅读。请在下面评论分享你的想法。

本文的完整项目托管在 Github 上。

黑盒与白盒模型

原文:https://towardsdatascience.com/machine-learning-interpretability-techniques-662c723454f3?source=collection_archive---------4-----------------------

大多数机器学习系统需要能够向利益相关者解释为什么做出某些预测。在选择合适的机器学习模型时,我们通常会在准确性和可解释性之间进行权衡:

  • 精确和“黑箱”:
    神经网络、梯度推进模型或复杂集成等黑箱模型通常可以提供很高的精确度。这些模型的内部工作更难理解,它们不能提供对模型预测中每个特征的重要性的估计,也不容易理解不同特征如何相互作用。
  • 较弱的“白盒”:
    另一方面,线性回归和决策树等较简单的模型提供的预测能力较低,并且不总是能够模拟数据集的内在复杂性(即特征相互作用)。然而,它们更容易解释和诠释。

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

Image from Applied.AI

准确性与可解释性的权衡基于一个重要的假设,即*‘可解释性是模型的固有属性’*。然而,我坚信,通过正确的“可解释性技术”,任何机器学习模型都可以变得更具可解释性,尽管有些模型的复杂性和成本要高于其他模型。**

在这篇博文中,我将讨论一些可用于解释机器学习模型的不同技术。这篇博文的结构和内容高度基于 H20.ai 关于机器学习可解释性的小册子。如果你想了解更多,我强烈推荐大家阅读帕特里克·霍尔的 H20.ai 小册子或其他材料!

模型属性

模型的可解释程度通常与响应函数的两个属性有关。模型的响应函数 f(x) 定义了模型的输入(特征 x )和输出(目标 f(x) )之间的输入输出关系。根据机器学习模型,该函数具有以下特征:

  • 线性:在线性响应函数中,特征和目标之间的关联表现为线性。如果一个特性线性变化,我们也期望目标以相似的速率线性变化。
  • 单调性:在单调响应函数中,特征和目标之间的关系在特征上总是在一个方向上(增加或减少)。更重要的是,这种关系适用于整个特征域,并且独立于其他特征变量。

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

An example of a simple linear and monotic response function (1 input variable x, 1 response variable y)

线性和单调函数的例子是例如线性回归模型,而例如随机森林和神经网络是展示高度非线性和非单调响应函数的模型的例子。

由 Patrick Hall 制作的下一张幻灯片说明了为什么在需要清晰简单的模型解释时,白盒模型(具有线性和单调函数)通常是首选。顶部的图显示,随着年龄的增长,购买次数也在增加。响应函数在全局水平上具有线性和单调的关系,容易被所有利益相关者解释。

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

然而,由于白盒模型的线性和单调约束,错过了趋势的很大一部分。通过探索更复杂的机器学习模型,有可能更好地拟合观察到的数据,尽管响应函数在局部水平上只是线性和单调的。为了解释模型的行为,有必要在本地级别研究模型。

模型可解释性的范围,即在全球或地方一级,与模型的复杂性有内在联系。线性模型在整个特征空间表现出相同的行为(如顶部图所示),因此它们是全局可解释的。输入和输出之间的关系通常受限于复杂性和局部解释(即,为什么一个模型在某个数据点做出某个预测?)默认为全局解释。

对于更复杂的模型,模型的全局行为更难定义,需要对响应函数的小区域进行局部解释。这些小区域更有可能表现为线性和单调的,从而实现更准确的解释。

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

ML libraries (e.g. sk-learn) allow quick comparisons between different classifiers. When the dataset is limited in size and dimensionality, it is possible to interpret the results. In most real-life problems this is not the case anymore.

在这篇博文的剩余部分,我将关注两个模型无关的技术,它们提供了全局和局部的解释。这些技术可以应用于任何机器学习算法,并且它们通过分析机器学习模型的响应函数来实现可解释性。

可解释性技术

代理模型

代理模型是(通常更简单的)模型,用于解释更复杂的模型。线性模型和决策树模型由于其简单的解释而经常被使用。创建代理模型是为了表示复杂模型(响应函数)的决策过程,并且是基于输入和模型预测而不是输入和目标训练的模型。代理模型在非线性和非单调模型之上提供了一层全局可解释性,但不应完全依赖它们。代理模型不能完美地表示潜在的响应函数,也不能捕捉复杂的特征关系。它们主要作为一个模型的“全局总结”。以下步骤说明了如何为任何黑盒模型构建代理模型。

  1. 训练一个黑盒模型。
  2. 评估数据集上的黑盒模型。
  3. 选择一个可解释的代理模型(通常是线性模型或决策树)。
  4. 对数据集及其预测训练可解释的模型。
  5. 确定代理模型误差度量并解释代理模型。

石灰

LIME 背后的一般思想与代理模型相同。然而,LIME 并不构建代表整个数据集的全局代理模型,而仅构建解释局部区域预测的局部代理模型(线性模型)。关于 LIME 更深入的解释可以在这篇关于 LIME 的博文中找到。
LIME 提供了一种直观的方式来解释给定数据点的模型预测。

以下步骤说明了如何为任何黑盒模型构建 LIME 模型。

  1. 训练一个黑盒模型。
  2. 感兴趣的局部区域的样本点。可以从数据集中检索点,也可以生成人工点。
  3. 根据新样本与感兴趣区域的接近程度对其进行加权。将加权的、可解释的(替代)模型拟合到有变化的数据集上。
  4. 解释本地代理模型。

结论

有几种不同的技术可以用来提高机器学习模型的可解释性。尽管随着该领域的发展,这些技术变得越来越强大,但始终比较不同的技术是很重要的。我没有讨论的一个技巧是 Shapley 值。看看 Christoph Molnar 关于“可解释机器学习”的书,了解更多关于这方面(以及其他)的技术!

如果你对机器学习的可解释性有任何问题,我很乐意在评论中阅读。如果你想收到我博客上的更新,请在 MediumTwitter 上关注我!

机器学习:介绍、巨大的失败和希望

原文:https://towardsdatascience.com/machine-learning-introduction-monumental-failure-and-hope-65a8c6098a92?source=collection_archive---------17-----------------------

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

Photo by Ahmed Hasan on Unsplash

什么是机器学习?

维基百科告诉我们,机器学习是“计算机科学的一个领域,它赋予计算机无需明确编程就能学习的能力”它接着说,“机器学习探索研究和构建可以从数据中学习并对数据进行预测的算法——这种算法通过进行数据驱动的预测或决策,通过从样本输入建立模型,克服了严格静态的程序指令。”

从输入中学习

在没有明确编程的情况下从输入中学习意味着什么?让我们考虑一个经典的机器学习问题:垃圾邮件过滤。

想象一下,我们对机器学习一无所知,但我们的任务是确定一封电子邮件是否包含垃圾邮件。我们如何做到这一点?以下是我的一些想法:

  • 分析 IP 地址。根据 IP 地址,我们通常可以确定发件人的位置,垃圾邮件可能更多地来自离收件人不近的位置。
  • 看邮件的正文。有提到尼日利亚王子的吗?
  • 寻找不常见的电子邮件地址模式。例如,电子邮件地址的末尾是否有大量的数字?

这些只是一些想法,但希望你还能想到更多。

现在想象我们有一个黑匣子,如果给它大量垃圾邮件和非垃圾邮件的例子,它可以从这些例子中学习垃圾邮件的样子。我们将称之为黑盒机器学习。通常我们提供给它的数据被称为特性

想要一个更直观的从输入中学习的例子吗?看看这个程序使用机器学习来学习如何玩 Flappy Bird。

为什么是机器学习?

看完上面的垃圾邮件例子后,你可能会想:为什么我们需要机器学习来检测垃圾邮件?似乎人类或基于规则的程序可以很好地完成这项任务。以下是一些好处:

  • 刻度。与人类相比,扩展机器学习算法要容易得多。一台机器可以在一分钟内分析数千封(如果不是更多)邮件中的垃圾邮件。
  • 成本。虽然开发机器学习的前期成本较高,但如果你成功开发了一种有效的算法,则终生成本会显著降低。
  • 健壮。机器学习的好处之一是它可以更容易地适应新趋势。如果您开发了数千行规则来检测垃圾邮件,然后发布了一种新的垃圾邮件(可能是一封说您中了彩票的电子邮件),则很难在不违反先前规则的情况下更新您的规则。使用机器学习算法,你需要的只是新趋势的数据,然后重新训练你的算法——它会根据趋势进行调整。
  • 聪明。人类和基于规则的程序经常会努力开发方法来检测具有挑战性的案例。例如,为垃圾邮件中可能存在的所有基于文本的模式编写规则是很困难的。随着更复杂的模型(如深度学习)的出现,通常模型可以更好地捕捉模式。

机器学习问题的类型

现在我们已经有了什么是机器学习以及为什么它会有价值的基础,让我们看看机器学习可以解决的一些类型的问题。

有监督的机器学习问题是那些你已经标注了数据的问题。带标签的数据意味着你用数据给算法解,这些解叫做标签。例如,对于垃圾邮件分类,标签可能是“垃圾邮件”或“非垃圾邮件”线性回归被认为是解决监督问题的算法。

无监督机器学习则相反。它没有任何标签。这些算法通常没有标签那么强大,但当获取标签数据非常昂贵或不可能时,它们会非常有价值。一个例子是聚类

回归问题是一类你试图预测一个实数的问题。例如,线性回归输出一个实数,可以用来预测房价。

分类问题是你要预测其类别标签的问题。例如,垃圾邮件预测是一个分类问题,因为您想知道您的输入是属于两类之一:“垃圾邮件”还是“非垃圾邮件”。逻辑回归是一种用于分类的算法。

排名问题在电子商务中非常普遍。这些模型试图根据项目对用户的价值进行排序。比如网飞的电影推荐。一个示例模型是协同过滤

强化学习是指在一个环境中,有一个代理人开始执行行动并获得行动奖励。这里的模型学习采取最佳行动以获得最大回报。flappy bird 视频就是强化学习的一个例子。一个示例模型是深度 Q 网络

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

Photo by Nathan Dumlao on Unsplash

未能交付

也许我最喜欢维基百科页面上关于机器学习的部分是,“截至 2016 年,机器学习是一个时髦词,根据 Gartner 2016 年的炒作周期,处于膨胀预期的顶峰。有效的机器学习是困难的,因为发现模式是困难的,并且通常没有足够的训练数据可用;因此,机器学习程序经常无法交付

以下是我对机器学习问题为何无法传递价值的一些思考。

没有明确的问题需要解决。

该公司的一名高管听说机器学习是下一件大事,所以他们聘请了一个数据科学团队。不幸的是,对于要解决什么问题没有一个清晰的想法,所以团队纠结了一年。

标记数据对于构建机器学习模型可能极其重要,但也可能极其昂贵。

首先,你经常需要大量的数据。 Google 发现,对于表示学习,性能会根据训练数据量以对数方式增长:

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

其次,您需要获得代表您试图解决的问题的完整分布的数据。例如,对于我们的垃圾邮件分类问题,我们可能想要收集哪些类型的电子邮件?如果我们只有来自美国 IP 地址的邮件会怎么样?

最后,光是标记数据就很费时,而且要花很多钱。如果你还没有垃圾邮件分类的数据,谁来给数百万封邮件贴上垃圾邮件或者不是垃圾邮件的标签呢?

数据可能会很乱

现实世界中的数据通常有错误、异常值、缺失数据和噪声。如何处理这些会极大地影响模型的结果,并且需要时间和经验来做好。

特色工程

一旦有了数据和标注,决定如何在模型中表示数据可能会非常具有挑战性。例如,对于垃圾邮件分类,你会给它输入原始文本吗?IP 地址的来源呢?时间戳呢?从数据中创建的特征通常比选择的算法更重要。

你的模型可能无法概括

在所有这些之后,您可能仍然会得到一个过于简单而无效(欠拟合)或者过于复杂而不能很好地概括(过拟合)的模型。你必须开发一个恰到好处的模型。😃

评价非同小可

假设我们开发了一个垃圾邮件分类的机器学习模型。我们如何评价?我们更关心精度还是召回?我们如何将科学指标与业务指标联系起来?大多数新数据科学家习惯于处理评估指标已经确定的问题。在行业中,确定您想要优化什么,以及设计一个算法来适当地最大化(或最小化)该指标,可能是非常具有挑战性的。

投入生产可能会很困难

您有一个内置 Python 的漂亮模型,却发现您不知道如何将它投入生产。后端是 Java,模型必须在 5 毫秒内运行。你没有 Java 经验,不确定如何加速你的模型。通常,公司试图通过让工程师将科学家的代码转化为产品来解决这个问题,但这种移交方法可能会由于过程中的信息丢失而导致严重的延迟甚至错误。

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

Photo by bruce mars on Unsplash

希望

虽然许多机器学习计划确实失败了,但也有许多获得了成功,并经营着一些世界上最有价值的公司。像谷歌、脸书、亚马逊、Airbnb 和网飞这样的公司都已经找到了利用机器学习的成功方法,并获得了巨大的回报。

谷歌首席执行官桑德尔·皮帅最近甚至说“从移动优先的世界到人工智能优先的世界有一个重要的转变”

马克·库班说,“人工智能、深度学习、机器学习——不管你在做什么,如果你不懂,就去学。因为否则你会在三年内变成恐龙。”

最后,哈佛商业评论发现

在使用数据驱动的决策方面,行业排名前三分之一的公司比其竞争对手的生产率和利润平均高出 5%和 6%

我希望这篇文章已经很好地向您介绍了机器学习的世界、一些挑战以及它为什么如此有价值。现在取决于你在你的公司执行机器学习并释放潜在价值。如果你正在寻找一些关于如何开始的想法,看看我的另一篇文章:

[## 兑现人工智能的承诺

为了你的创业

towardsdatascience.com](/delivering-on-the-promise-of-artificial-intelligence-f6424a75d61c)

这篇文章也可以在这里找到

初学者机器学习入门

原文:https://towardsdatascience.com/machine-learning-intuition-for-beginners-ba07a640d928?source=collection_archive---------18-----------------------

“追求数据科学的简单性。真正的创造力不会让事情变得更复杂。相反,它会简化它们。”
达米安·杜菲语重心长

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

我们想通过广告来提高产品的销量。所以,让我们看看我们的广告渠道:电视、广播、社交媒体、报纸等。
因此,广告预算(Y)被称为因变量或反应,电视(X1)、广播(X2)、社交媒体(X3)、报纸(X4)被称为自变量或预测因素。

预言;预测;预告

关系:- Y = f (X) + e 是我们真实的观测值。 f 是将输入变量(X)最佳映射到输出变量(Y)的目标函数。
我们对 Y 的预测将取决于 y(y=f(X))、*** 的精度,而后者又取决于另外两个量:**可约误差**和**不可约误差**。一般来说, ***f 想成为f 的完美估计量,但可约误差以不精确的形式存在。这个误差是可以减少的,因为我们可以通过使用最合适的统计学习方法来提高 f*** 的精度。然而,即使有可能为 ***f、*** 形成完美的估计量,使得 ***y=f(X) ,我们的预测仍然会有一些误差,称为不可约误差。这个误差的存在是因为 y 也是 e、 的一个函数,它不能由 X 预测。我们不测量它们,因此, f 不能用它们进行预测。

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

我们的主要焦点应该是如何减少可约误差。预测问题就像:给定这个人的特征,你会把他归入哪一类?这个问题是关于当你已经给定了输入变量 X 时,如何预测 Y。

推理

当我们想了解反应(Y)和预测因素(X)之间的关系时,就称为推论。我们不能把 f` 当作一个黑盒,因为我们想知道它的确切形式。我们希望了解预测因素和反应之间存在的关系,无论是正相关还是负相关。
这将回答诸如“哪种媒体对销售贡献最大?”等等。这些问题的要点是单个输入变量(X)对输出变量(Y) 的影响有多大。

线性模型将帮助我们进行简单和可解释的推断,但可能不会像其他一些统计方法那样产生准确的预测。

参数模型

它是一个分布族,可以很容易地用有限数量的参数来定义。在这种模型中,您知道哪个模型适合您的数据。
举例:- yi=β0+β1xi+ei 是线性回归。
它与您“假设”的数据遵循的特定概率分布相关联。这种方法将估计 f 的问题减少到几组参数。
参数模型示例:-线性回归、逻辑回归和 SVM。
唯一的缺点就是我们选择的模型可能和 f 的真未知形式不匹配。如果选择的模型离真实的 f、 太远,那么我们从那个模型得到的估计就会很差。
为了解决这个问题,我们可以为 f. 选择一些可以适应多种不同功能形式的灵活模型

非参数模型

它基于无分布或者具有指定的分布,但是分布的参数未指定。这些数据会告诉你‘回归’应该是什么样子。
Y =f(X)+e, 其中 f() 可以是任意函数。
数据会告诉你函数会是什么样子。在训练模型 之前,我们不推测任何关于我们试图学习的 f 的函数形式的假设。 模型将由数据决定。参数模型的示例:- KNN、决策树和 RBF 核 SVM。
唯一的缺点是,我们需要非常大量的观测数据来获得对真 f. 的准确估计,这导致模型的复杂性和灵活性增加。

限制性与灵活性方法

如果我们主要对推理感兴趣,那么我们应该选择限制性模型。这是因为它的简单性和可解释性。
举例:线性回归有助于我们理解 YX1,X2 的关系,…Xp。 假设,我们没有选择一个更简单、限制性更强的模型,而是选择了一个像 KNN 那样复杂、灵活的模型。我们将无法理解个体预测因子是如何与反应变量相关联的。当我们只对预测感兴趣而对可解释性不感兴趣时,我们应该使用灵活的模型。
例子:预测股票价格。
此外,由于在高度灵活的方法中过度拟合,有时我们可能使用不太灵活的方法获得更准确的预测。

监督与非监督学习

如果给定了响应( Y )变量,则采用监督学习方法。在学习中,我们使用标注有正确答案的数据来训练机器。
监督学习分为两部分:回归或分类。有定量反应的问题称为回归问题,有定性反应的问题称为分类问题。定量反应意味着真实值,如身高、价格等。定性意味着绝对。
例子:-线性回归、逻辑回归、KNN 等。

如果没有给出响应( Y )变量,则采用无监督学习方法。我们希望了解数据的底层结构,而不需要提供任何明确的标签。
它有聚类,帮助我们进行细分。

均方误差

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

它是使用训练数据 ie 计算的。用于拟合模型。我们应该不是真的对 f(xi) = Yi*** 感兴趣;相反我们想知道 ***f(x0) 是否约等于y0;* 其中 (x0,y0) 是一个看不见的测试观测。
随着模型灵活性的增加,模型可能会产生较小的训练 MSE,但由于过度拟合,可能会导致较大的测试 MSE。这是因为我们的统计学习方法过于努力地在训练数据中寻找模式,这导致它拾取随机噪声,而不是未知函数 f 的真实属性。*

偏差-方差权衡

这个期望测试 MSE 是f ( x0)****f ( x0)的方差和误差的方差 (e)之和。****

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

这个等式告诉我们要降低偏差和方差。
方差指的是 f*** 变化的量,如果我们使用一个看不见的训练数据集来估计的话。这是一种通过拟合高度灵活的模型来学习随机事物的趋势,这些模型过于接近地学习数据中的误差/噪声。导致**过拟合。**由于训练数据符合统计学习方法,不同的训练数据集会产生不同的 ***f。f*** 应该变化不大,理想情况下。但是具有高方差的方法将随着训练数据的改变而保持改变 ***f 。一般来说,灵活的方法更倾向于较高的方差。
偏差是该方法由于没有考虑数据中的所有信息而不断学习错误的东西的倾向。它很少关注训练数据,并且过于简化模型。这导致
装配不足。如果我们用一个非常简单的模型来近似一个非常复杂的问题,会导致偏差。
参数或线性机器学习算法往往偏高但方差低,非参数算法偏低但方差高。
理想的拟合应该是捕捉数据集中的规律性,足以能够推广到来自同一来源的看不见的数据点。不幸的是,在实践中,同时做到这两点几乎是不可能的。因此,我们在游戏中有一个权衡。

如果你想在 5 分钟内看懂统计。

了解 Python 中的特征工程。

感谢阅读! 这里也可以给支持:https😕/buymeacoffee.com/divadugar

机器学习是零和游戏!

原文:https://towardsdatascience.com/machine-learning-is-a-zero-sum-game-7498614c9ac3?source=collection_archive---------28-----------------------

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

ML 不同于工业化、电力和 IT

我预测,10 年后,只有今天投资机器学习的公司才会存在。那些观望的人会被他们的竞争对手吃掉。

机器学习(ML)革命不同于以往的任何革命;工业革命,电力或信息技术革命。

我们称之为工业化的时代,围绕着从手工生产方式向机械自动化的转变而发展。第二次工业革命发生在大约一百年后,当时我们开始通过大坝发电获得更可靠的能源。第三次大革命是通过从 20 世纪 90 年代一直到今天的 IT 繁荣形式的自动化。

在前三次革命中,不适应工业化、电力或 IT 的公司最终会消亡。但是那些成功的公司并没有获得无限的竞争优势。革命性的步骤是巨大的,但它们并没有带来永久的竞争优势。每个人都从中受益,每个人都可以从零开始,很快赶上来。举例来说,你今天可以开一家制鞋厂,而老厂商不会有竞争优势,因为它们已经用了一百年的电了。

ML 中的先行者获得了不公平的优势

机器学习不同于以往的革命,因为它非常依赖你收集的历史数据。

拥有最多数据的公司将能够创造不公平的竞争优势!想象一下,例如,一家制造公司可以更好地采购 5%的原材料,减少 2%的损耗,提高 10%的能源效率,减少 7%的人为错误,等等。企业的利润越薄,在该行业进行 ML 的可能性就越大。他们根据历史数据优化得越多,失败者就越难赶上。

那些更早开始收集数据并利用这些数据进一步改进其 ML 模型的公司将获得永久的不公平优势。不可能用更少的数据竞争,也不可能迎头赶上或从头开始。数据不是新的黄金,数据是你的克星——它会让你的竞争对手无法接近你。

这在 B2B 中尤其如此,在 B2B 中,客户数据依赖于与其他企业的协议。这一小小的竞争优势将帮助你赢得客户,帮助你增加数据并进一步改进你的 ML 模型。

企业是有优势的,但前提是要觉醒

世界上的企业巨头拥有先发优势,因为他们已经掌握了关于客户的最多数据。当一个商业垂直领域的第一个巨头意识到 ML 的可能性时,其余的巨头将会被迅速吃掉,而且比过去 20 年中的速度要快得多。沉睡的企业不会有第二次机会。

该醒醒了。你和我的大部分工作最终将被取代,政府有可能因此而监管数据,但政府行动缓慢,现在采取行动的政府将比其他政府至少拥有 20 多年的优势。这是一个零和游戏:你想成为 0 还是 1?

这篇文章的灵感来自 Andreessen Horowitz 播客上的一次讨论。对于原始来源和整个讨论,请在苹果播客收听。

最初发表于T5【https://blog.valohai.com】

SparkML 与 AWS SageMaker 中的机器学习(kmeans 聚类)——我的两分钱

原文:https://towardsdatascience.com/machine-learning-kmeans-clustering-in-sparkml-vs-aws-sagemaker-my-two-cents-3310693c00bb?source=collection_archive---------21-----------------------

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

机器学习,即从数据中学习的能力,一直是大数据最成功和最具颠覆性的用例之一。在数据和分析领域,人们可以使用无数的工具集来承担不同性质和复杂性的机器学习任务。

然而,当一个人在大规模数据上操作时,R 和 Python 等常用语言中的传统机器学习库(如 pandas、scikit-learn)通常会有所不足,因为这些库原本在单个机器上运行,其中要分析的数据应该在内存中(虽然有一些方法,如核外学习,可用于绕过这一点,但它有自己的一套警告)。因此,对于真正的大规模机器学习来说,分布式训练和推理管道变得至关重要。这本身不是一个简单的任务,但是框架和库的可用性极大地促进了这个过程。像 Mahout(运行在旧的 MapReduce 上)和 SparkMLLIB (Spark 基于 RDD 的机器学习库)这样的库是这一类别中的第一批玩家,从那以后我们看到了许多其他类似的出现。这一趋势有如下几个方面:

1.Spark 的机器学习库(SparkML)已经成熟,现在支持通用的数据框架/数据集 API,并覆盖了许多算法和功能工程转换
2。与 Spark 无缝协作的库的可用性,例如 Sparkling Water、DeepLearning4J、XgBoost4J、Stanford Core NLP Wrapper for Spark,因为 Spark 是领先的分布式计算框架
3。深度学习库如 TensorFlow 与其他分布式计算框架如 Apache Beam 的集成和兼容性(如 TensorFlow Transform,在 Google 云平台中得到很好的支持)
4 .云本机机器学习框架和库的可用性,例如 AWS 的 SageMaker

在所有这些趋势中,核心驱动力一直是支持和普及可扩展的机器学习,以便组织可以更加专注于实际工作,而不是陷入如何在引擎盖下运行的底层复杂性。

在 SparkML 和 SageMaker 上使用 kmeans

最近,我有机会在一个无监督的机器学习任务环境中使用 SparkML 和 AWS SageMaker,其核心目标是分析海量数据以执行聚类。鉴于机器学习问题的性质,kmeans(一种广泛使用的基于划分的聚类算法)被认为是合适的。

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

kmeans in action (source: https://commons.wikimedia.org/wiki/File:K-means_convergence.gif)

SparkMLSageMaker 都提供了 kmeans 算法,使用这两种算法的体验有很大的不同,有很多注意事项,因此这篇文章重点关注这一点。如果您打算使用 kmeans 算法(或者其他算法),并且您需要在 SparkML 和 AWS SageMaker 之间做出设计决策,这篇文章也可能在这方面对您有所帮助。

距质心的距离度量:

假设聚类主要是一种无监督的机器学习活动,其中训练实例的真实标签事先不可用,应用聚类算法得到的主要见解是聚类标签与训练实例的关联,即训练实例被分组为聚类,其中启发是聚类中的实例彼此相似,而不是不同聚类中的实例。SparkML 和 SageMaker kmeans 都在运行 kmeans 算法时提供聚类标签。然而,一个显著的区别是离质心的距离,即特定实例离聚类中心有多远。这种洞察力对于检测内聚性和潜在的离群值非常有用。
在这种情况下,除了聚类标签之外,SageMaker 还方便地为每个训练实例提供距质心的距离。

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

An example of how distance from centroid insight is made available against each training instance in SageMaker

这大大减少了将输出与输入相关联的预处理步骤。
然而,在 SparkML 的情况下,它不是作为输出提供给每个训练实例的。相反,它是作为模型的一个属性提供的。例如,对于虹膜数据,如果使用 4 个特征执行聚类,并且 k=3,则作为训练模型的属性可访问的聚类中心(或质心)将是大小为 3 的数组(相当于聚类的数量),其中每个元素将是 4 个浮点数的数组(对应于 4 维特征空间中的 4 个坐标)。

这就需要额外的预处理步骤来将输出与输入相关联。

确定最佳聚类数:

k 均值要求在运行算法之前提供聚类数(指定为 k)。虽然手头问题的领域知识通常有助于构思聚类的数量,但是我们数据科学家采用数据驱动的方法来确定 k 的正确值。在这种情况下使用肘形曲线和剪影方法等方法。我们采用肘曲线法来确定 k 的最佳数量,这涉及使用不同的 k 值在数据集上多次运行 kmeans 算法,并基于评估度量来确定拟合优度。Spark ML 在设定的误差平方和(WSSSE)内使用。对于 k 的每个值,使用该度量,然后绘制成图。基于此,曲线上发生弯曲的点(从统计角度来说,梯度变小的地方)通常是正确的 k 值。直观地说,这意味着进一步增加 k 值不会导致度量的显著降低。

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

An example of Elbow curve plotted using matplotlib after running kmeans algorithm for a range of k values (on x-axis) and distortion/cost (on y-axis)

在 SparkML 中使用肘曲线方法非常简单,因为需要指定范围,只需在这些值上训练模型。运行 Spark 的同一个集群用来运行 kmeans 的不同 k 值的多次运行,并且不需要额外的开销。我们使用一个 r 5.12 x 大型实例和大约 35 万个实例以及不同数量的特性(从 4 到 100)进行了测试,每次运行大约需要一分钟。

from pyspark.ml.clustering import KMeans
import numpy as np
cost = np.zeros(50)for k in range(3,50):
   kmeans = KMeans().setK(k).setSeed(1).setFeaturesCol("scaled_features")
   model = kmeans.fit(spark_dataframe)
   cost[k] = model.computeCost(spark_dataframe)

如果使用 Python,可以通过 matplotlib 绘制它。

然而,在 SageMaker 中做同样的事情有它自己的一套注意事项。SageMaker 中的机器学习管道可以形象地表示如下:

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

Machine Learning workflow using SageMaker (source: https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-hosting.html)

在 SageMaker 的情况下,为每个训练或推理作业启动实例,也就是说,如果您想要运行一个具有一组特定超参数(如 k=10)的模型(如 kmeans ),那么您将需要运行一个训练作业来启动一个实例(或多个实例,如果您指定了多个实例)。该训练实例将生成一个名为“模型”的工件,该工件将被存储在一个 S3 存储桶位置(可配置)。仅仅通过运行训练作业并不能得到推论,即集群标签。相反,培训工作的输出是一个模型工件。

为了通过 SageMaker 获得实际的推理,需要运行两种形式的推理作业:
部署一个端点— 推理是通过以 API 调用的形式将测试数据(或无监督算法情况下的训练数据)发送到端点来获得的。SageMaker SDK 对这一点进行了重要的抽象。此外,相同的端点可用于从 SageMaker 生态系统中获取推理,如果有下游应用程序希望以接近实时的方式获取推理,该端点尤其有用

批量转换作业— 如果没有这样的要求来提供一个端点以便于生成如上所述的洞察,那么用户可以使用批量转换作业功能来启动一个实例,下载位于 S3 上的训练数据(这里可以有两种模式,即文件或管道。当使用文件模式时,数据在训练实例上下载,而当使用管道模式时,如果算法支持,则数据是“流”的),生成推理,然后存储回 S3(格式可以是 CSV、JSON 或 recordIO,具体取决于所使用的算法)。

因此,简而言之,使用肘曲线这样的方法将需要相当于你想要的“k”范围的训练实例。由于成本与每次实例启动相关联,因此这是需要小心的事情。此外,每个实例类型都有一个启动时间(可以从 1 分钟到 7 分钟不等,甚至更长),因此仅运行肘形曲线在这方面也会花费大量时间。

Kmeans 参数的默认值:

SparkML 和 SageMaker 中 kmeans 的默认值大不相同。虽然一个好习惯是彻底检查默认值是什么,并根据要求设置它们,但我已经看到人们只是依赖默认值并运行算法。特别是在 SparkML kmeans 的情况下,默认值为:

距离度量:欧几里德
init 方法:kmeans||(这是 kmeans++的增强形式,解决了初始质心初始化的方式)
Init 步骤:2

而在 SageMaker 中:
距离度量:msd(均方距离)
初始化方法:随机
历元(相当于 SparkML 中的初始化步骤):1

在这些差异中,init 方法参数尤其重要,因为与随机方法相比,使用 kmeans++已经证明可以提供更好的结果。

此外,根据我们的分析,通过 SparkML 或 SageMaker 运行 kmeans 时获得的集群的组成有很大不同。因此,如果您在管道中使用这些技术堆栈,这是需要考虑的事情。

简而言之,如果想要加速大规模执行分布式机器学习,这两种方法都是强有力的选择。SageMaker 是一个完整的生态系统,提供了许多其他功能,如笔记本、模型注册等,大大简化了端到端的流程;如果使用 SparkML,这将需要定制的实现。有趣的是,像 Databricks 这样的供应商推出了提供类似功能的 MLFlow 框架,这是社区对这一领域的强烈关注的另一个标志。

如果你有兴趣提升自己在这些技术方面的技能,一定要看看我的关于 Spark 的最畅销课程和我的关于大数据分析的书

机器学习:从企业中吸取的教训

原文:https://towardsdatascience.com/machine-learning-lessons-learned-from-the-enterprise-d8588f3d3060?source=collection_archive---------15-----------------------

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

Photo by IBM

训练机器学习(ML)模型的纯学术练习与构建真实企业问题的端到端数据科学解决方案之间存在巨大差异。这篇文章总结了我们的团队在与来自不同行业的数十家企业客户打交道的两年中所学到的经验,这些行业包括制造、金融服务、零售、娱乐和医疗保健等。企业面临的最常见的 ML 问题是什么?训练一个 ML 模型之外还有什么?如何解决数据准备?如何扩展到大型数据集?为什么特征工程如此重要?如何在生产中从一个模型变成一个完全有能力的系统?如果每个数据科学工具都是开源的,我还需要一个数据科学平台吗?这些是将要解决的一些问题,通过具体的行业示例揭示了一些挑战、陷阱和最佳实践。

0。ML 不仅仅是训练模特

我意识到这是一个普遍的误解。当我采访有抱负的数据科学家时,我通常会问:

“假设给你一个具有某些特征的数据集,目标是预测某个变量,你会怎么做?”

令我沮丧的是,他们的回答通常是这样的:

“我会将数据集分成训练/测试,运行逻辑回归、随机森林、SVM、深度学习、XGBoost……(以及其他一些闻所未闻的算法),然后计算精度、召回率、F1 分数……(以及其他一些闻所未闻的指标),最终选择最佳模型”。

但是,我问他们:

“你看过数据了吗?如果你有缺失值怎么办?如果你有错误的值/坏的数据怎么办?你如何映射你的分类变量?你是怎么做特征工程的?”

这篇文章中,我回顾了成功创建端到端机器学习系统所需的七个步骤,包括数据收集、数据监管、数据探索、特征提取、模型训练、评估、部署。

1。给我一些数据!

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

作为数据科学家,数据显然是我们的主要资源。但有时,即使是获取数据也很困难,数据科学团队可能需要几周甚至几个月的时间才能获得正确的数据资产。一些挑战包括:

  • **访问:**大多数企业数据都非常敏感,尤其是在涉及政府、医疗保健和金融行业时。就共享数据资产而言,保密协议(NDA)是标准程序。
  • **数据分散:**数据分散在组织内的不同单位,需要得到不同方面的批准,这种情况并不少见。
  • **专业知识:**访问数据通常是不够的,因为可能有太多的来源,只有的主题专家 (SME)知道如何浏览数据湖,并为数据科学团队提供正确的数据资产。中小型企业也可能成为数据科学项目的瓶颈,因为他们通常忙于核心企业运营。
  • 隐私: 混淆匿名已经成为它们自己的研究领域,并且在处理敏感数据时必不可少。
  • **标签:**拥有基础事实或标签通常是有帮助的,因为它允许应用广泛的监督学习算法。然而,在某些情况下,标记数据可能过于昂贵,或者由于法律限制,标签可能不可用。像聚类这样的无监督方法在这些情况下很有用。
  • **数据生成器:**当数据或标签不可用时,另一种方法是模拟它们。在实现数据生成器时,了解一些关于数据模式、数字变量的概率分布和名义变量的类别分布的信息是很有用的。如果数据是非结构化的, Tumblr 是标签图片的绝佳来源,而 Twitter 可能是自由文本的绝佳来源。Kaggle 还提供许多领域和行业的各种数据集和解决方案。

2。大数据往往没那么大

这是一个有争议的问题,尤其是在过去十年大数据供应商大肆宣传,强调可扩展性和性能的必要性之后。尽管如此,我们需要区分原始数据(即所有可能与手头问题相关或不相关的部分)和特征集(即 ML 算法的输入矩阵)。从原始数据到特性集的过程称为数据准备,通常包括:

  1. 丢弃无效/不完整/脏的数据,根据我们的经验,这些数据可能多达记录的一半。
  2. 聚合一个或多个数据集,包括连接和组聚合器等操作。
  3. 特征选择/提取,例如,移除可能不相关的特征,如唯一 ID,并应用其他维度缩减技术,如主成分分析 (PCA)。
  4. 使用稀疏数据表示或特征散列来减少具有许多零值的数据集的内存占用。

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

在所有的数据准备步骤完成后,不难意识到最终的特征集——将是机器学习模型的输入——将会小得多;而且,内存框架如 Rscikit-learn 足以训练模型的情况并不少见。在特征集非常庞大的情况下,像 Apache Spark 这样的大数据工具会派上用场,但它们可能只有有限的算法集可用。

3.你这肮脏的数据!

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

Data are often dirty

是的,我最好告诉你一些你不知道的事情,但是我怎么强调都不为过。数据是脏的。在我们的大多数项目中,客户都自豪而兴奋地谈论他们的数据湖,他们的数据湖有多美,以及他们迫不及待地想从中获得多少见解。所以,作为数据科学家,这变成了我们的大脑图像:

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

尽管如此,当他们真正分享他们的数据时,它实际上看起来更像这样:

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

这就是像 Apache Spark 这样的可扩展框架至关重要的地方,因为所有的数据监管转换都需要在整个原始数据上执行。一些典型的策展任务是:

  • **异常值检测:**负年龄、浮点邮政编码或信用评分为零只是无效数据的几个例子。不更正这些值可能会在训练模型时引入高偏差。
  • **缺失/不正确的值插补:**解决不正确/缺失值的明显方法是简单地丢弃它们。另一种方法是插补,即用相应属性的平均值中值模式替换缺失/错误值。另一种选择是插值,即建立一个模型来预测缺失值的属性。最后,领域知识也可以用于插补。假设我们正在处理患者的数据,并且有一个属性表明患者是否患有癌症。如果缺少这样的信息,可以查看预约数据集,并找出患者是否与肿瘤学家有任何预约。
  • **虚拟编码和特征散列:**这有助于将分类数据转化为数字,尤其是对于基于系数的算法。假设有一个属性 state 表示美国的州(例如 FLCAAZ )。映射 FL 到 1, CA 到 2, AZ 到 3 引入了一个感测顺序和幅度,意味着 AZ 将大于 FL ,CA 将是 FL 的两倍。一次性编码— 也称为虚拟编码— 通过将一个分类列映射到多个二进制列来解决这个问题,每个二进制列对应一个类别值。
  • **缩放:**当特征处于不同的缩放比例时,基于系数的算法会出现偏差。比方说年龄在【0,100】以内以年为单位,而薪水在【0,100,000】以内以美元为单位。优化算法可以向薪金、分配更多的权重,因为它具有更高的绝对幅度。因此,标准化通常是可取的,常见的方法包括 z 评分标准化(当数据正常时)和最小-最大特征缩放。
  • **宁滨:将一个实值列映射到不同的类别会很有用,例如,将一个回归问题转化为一个分类问题。假设您对预测以分钟为单位的航班到达延迟感兴趣。另一种方法是预测航班是提前准时还是晚点为每个类别定义范围。

4.这都是关于特征工程的

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

简而言之,特征是 ML 算法将要学习的特征。正如预期的那样,噪声或不相关的特征会影响模型的质量,因此拥有良好的特征至关重要。特征工程的一些策略是:

  • 定义你想预测什么。每个实例代表什么?一个顾客?一笔交易?一个病人?一张票?确保功能集的每一行都对应于一个实例。
  • 避免唯一的 id。它们不仅在大多数情况下不相关,而且会导致严重的过拟合*,尤其是在应用 XGBoost 等算法时。*
  • 利用领域知识衍生出有助于衡量成功/失败的新特性。医院就诊可能是患者风险的一个指标;过去个月对外交易总额可能是欺诈的指标;要求贷款金额年收入的比例可能是信用风险的一个指标。**
  • 使用自然语言处理技术从非结构化自由文本中获取特征。例如 LDA、TF-IDF、 word2vecdoc2vec
  • 如果有非常多的特征,使用降维,例如 PCA 和 t 分布随机邻居嵌入 (t-SNE)。

5.异常检测无处不在

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

Photo by feature.fm.

如果我要在企业中挑选一个最常见的 ML 用例,那就是异常检测。无论我们指的是欺诈检测、生产测试、客户流失、患者风险、客户违约、系统崩溃预测、*等。,问题永远是:*我们能大海捞针吗?这引出了我们的下一个话题,与不平衡数据集有关。

一些常见的异常检测算法有:

  1. 自动编码器
  2. 单类分类算法,如单类 SVM
  3. 置信区间
  4. 聚类
  5. 分类使用过采样欠采样。

6.数据经常是不平衡的

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

Unbalanced data

假设您有一个带有标签的信用卡交易的数据集。其中 0.1%的交易被证明是欺诈性的,而 99.9%的交易是正常的。如果我们创造一个模型,说没有欺诈,猜猜会发生什么?该模型将在 99.9%的情况下给出正确答案,因此其准确性将为 99.9%!这种常见的精度谬误可以通过考虑精度召回等不同的度量来避免。这些是根据真阳性* (TP) 、真阴性 (TN) 、假阳性 (FP) 假阴性 (FN)来定义的:*

TP =正确预测为阳性实例总数**

TN =正确预测为阴性的实例总数

FP =被错误地预测为阳性的实例总数

FN =被错误预测为实例总数****

在一个典型的异常检测场景中,我们的目标是最大限度地减少假阴性——例如,忽略欺诈性交易,没有识别出有缺陷的芯片,或者将生病的病人诊断为健康的——同时不招致大量的假阳性

精度= TP/(TP+FP)

召回= TP/(TP+FN)

注意精确惩罚 FP,而回忆惩罚 FN。从不预测欺诈的模型将具有零召回率和未定义的精确度。相反,总是预测欺诈的模型将具有 100%的召回率,但精确度非常低,这是由于大量的假阳性。

我强烈反对在异常检测中使用接收器工作特性 (ROC)曲线。这是因为 ROC 曲线所依赖的假阳性率 (FPR)严重偏向于数据集中的阴性实例数量(即 FP+TN),导致即使存在大量 FP,FPR 也可能很小。

FPR = FP/(FP + TN)

相反,错误发现率 (FDR)有助于更好地理解 FP 在异常检测模型中的影响:

FDR = 1 -精度= FP/(TP+FP)

7。不要预测。告诉我为什么!

我遇到过几个项目,它们的目标不是创建一个实时预测的模型,而是解释一个假设或分析哪些因素解释了某种行为——鉴于大多数机器学习算法是基于相关性而不是因果关系,这一点要持保留态度。一些例子是:

  • 哪些因素使病人陷入高风险?
  • 哪种药物对验血结果的影响最大?
  • 哪些保险计划参数值使利润最大化?
  • 客户的哪些特征使他更容易拖欠?
  • 搅拌者的特征是什么?

**解决这些问题的一种方法是计算特征重要性,特征重要性由算法给出,如随机森林决策树XGBoost。此外,诸如莱姆或 SHAP 等算法有助于解释模型和预测,即使它们来自神经网络或其他“黑箱”模型。

8.调整你的超参数

机器学习算法既有参数又有超参数。它们的不同之处在于,前者是由算法直接估计的——例如,回归的系数或神经网络的权重——而后者不是并且需要由用户设置——例如,随机森林中的树的数量,神经网络中的正则化方法,或者支持向量机(SVM)分类器的函数。

为您的 ML 模型设置正确的超参数值可以产生巨大的差异。例如,SVM 的线性核无法对不可线性分离的数据进行分类。如果最大深度或分割数量设置得太高,基于树的分类器可能会过拟合,或者如果最大特征数量设置得太低,基于树的分类器可能会欠拟合。

寻找超参数的最佳值是一个非常复杂的优化问题。一些提示是:

  1. 了解超参数的优先级。在随机森林中,树的数量和最大深度可能是最相关的,而对于深度学习,学习速率层数可能是优先的。
  2. **使用一种搜索策略: 网格搜索随机搜索 后者优先。
  3. 使用 交叉验证 :设置一个单独的测试集,将剩余的数据分成 k 个折叠,迭代 k 次,每个折叠用于验证(即调整超参数),剩余的用于训练。最后,计算所有折叠的平均质量度量。

9.深度学习:灵丹妙药?

在过去几年中,深度学习已经成为研究和行业发展的巨大焦点。诸如 TensorFlowKerasCaffe 等框架现在能够通过高级 API 快速实现复杂的神经网络。应用不计其数,包括计算机视觉、聊天机器人、自动驾驶汽车、机器翻译,甚至游戏——击败了世界上最顶尖的围棋人类棋手和最顶尖的国际象棋计算机!

深度学习背后的一个主要前提是它能够随着数据量的增加而持续学习,这在大数据时代尤其有用(见下图)。这与硬件(即 GPU)的最新发展相结合,允许执行大型深度学习作业,这在过去由于资源限制而被禁止。

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

Picture by machinelearningmastery.com

那么……这是否意味着 DL 永远是解决任何机器学习问题的方法?不完全是。原因如下:

简单

神经网络模型的结果非常依赖于网络的结构和超参数。在大多数情况下,您需要一些网络架构方面的专业知识来正确地调整模型。在这方面也有一个重要的试错成分。

可解释性

**正如我们前面看到的,许多用例不仅需要预测,还需要解释预测背后的原因:为什么贷款被拒绝?为什么保险价格会上涨?虽然基于树和基于系数的算法直接考虑到了可解释性,但神经网络并非如此。在这篇文章中,介绍了一些解释深度学习模型的技术。

质量

根据我们的经验,对于大多数结构化数据集,神经网络模型的质量不一定比随机森林和 XGBoost 好。当涉及到非结构化数据时,即图像、文本或音频时,DL 实际上表现出色。底线:不要用猎枪打死一只苍蝇。像 Random Forest 和 XGBoost 这样的 ML 算法对于大多数结构化的监督问题来说已经足够了,并且更容易调整、运行和解释。让 DL 在非结构化数据问题或者强化学习中自己说话。

10。不要让数据泄露

在做一个预测航班到达延误的项目时,我意识到当我使用数据集中所有可用的特征时,我的模型突然达到了 99%的准确率。我悲哀地意识到我在用出发延迟作为到达延迟的预测器。这是一个典型的数据泄漏的例子,当用于创建模型的任何特征在预测时不可用或未知时,就会发生这种情况。小心,伙计们!

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

Photo by the Kini group.

11.开源给了我一切。为什么我需要一个平台?

构建机器学习模型从未如此简单。几行 R 或 Python 代码就足够了,网上有很多资源和教程甚至可以训练一个复杂的神经网络。现在,对于数据准备,Apache Spark 非常有用,甚至可以扩展到大型数据集。最后,像 dockerplumbr 这样的工具通过 HTTP 请求简化了机器学习模型的部署。因此,看起来人们可以完全使用开源栈来构建一个端到端的 ML 系统。对吗?

嗯,对于构建概念证明来说,这可能是真的。一个正在写论文的研究生肯定会受到开源软件的保护。然而,对于企业来说,情况有所不同。

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

不要误解我。我本人是开源的忠实粉丝,有许多奇妙的工具,但同时,也有相当多的差距。以下是企业选择数据科学平台的一些原因:

****a .开源集成:几分钟启动运行,支持多种环境,透明版本更新。

****b .协作:轻松共享数据集、数据连接、代码、模型、环境、部署。

****c .治理和安全:不仅针对数据,还针对所有分析资产。

d .模型管理、部署和再培训。

****f .模型偏差:检测并纠正因性别或年龄而产生偏差的模型。

****e .辅助数据管理:解决数据科学中最棘手任务的可视化工具。

****g . GPU:深度学习框架(如 TensorFlow)的最佳性能的即时供应和配置。

****h .无代码建模:针对统计人员、主题专家,甚至不编码但想可视化建模的高管。

寻找数据科学平台?考虑免费试用沃森工作室

关于作者

scar D. Lara Yejas 是高级数据科学家,也是 IBM 机器学习中心的创始成员之一。他与世界上一些最大的企业密切合作,将 ML 应用于他们的特定用例,包括医疗保健、金融、制造、政府和零售。他还为 IBM 大数据产品组合做出了贡献,特别是在大规模机器学习领域,是 Apache Spark 和 Apache SystemML 的贡献者。

scar 拥有南佛罗里达大学的计算机科学和工程博士学位。他是《人类活动识别:使用可穿戴传感器和智能手机》一书的作者,并发表了大量关于大数据、机器学习、以人为中心的传感和组合优化的研究/技术论文。

机器学习:林肯领先于他的时代

原文:https://towardsdatascience.com/machine-learning-lincoln-was-ahead-of-his-time-134fcd7f0590?source=collection_archive---------39-----------------------

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

Photo by Jp Valery on Unsplash

在第 45 届总统任期内,有很多关于什么是总统语言的讨论。但它并不总是“假新闻、“憎恨者和失败者、“科菲”美国有着悠久的总统语言遗产,机器学习可以帮助我们获得对这个非常具有历史意义的话题的新见解。

在过去的一个月左右的时间里,我一直在做一个项目,目的是利用数据科学来学习总统语言。在我到目前为止的探索中,我比较并跟踪了单词的用法,创建了总统的聚类,按总统对演讲摘录进行了分类,并根据上下文生成了缺失的单词。在这篇文章中,我想分享我根据单词选择对总统进行分类的发现。

我的完整数据集包括所有 44 位美国总统的所有官方演讲。总的来说,在 223 年的 945 次演讲中有将近 350 万个单词。(数据来源于弗吉尼亚大学米勒中心语法实验室的总统演讲语料库和总统演讲网站。)

我组织了一个数据框架,其中有 44 行,每行包含一个字符串,包含了每位总统所有演讲中的所有单词。由于聚类是一种无监督的学习方法,所以我剥离了标签的数据。从这一点出发,我对数据应用 CountVectorizer,对其进行缩放,然后将其输入 k-means 聚类模型。对于聚类模型,我选择 k=5 个聚类,这产生了最好的轮廓分数

结果令人兴奋!该模型按时间顺序将总统分组。这一发现非同寻常,因为该模型的唯一输入是每位总统演讲中使用的词汇,而不是任何关于日期的信息。

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

在分类时间线中,每个分类都由单词选择最相关的总统组成,用不同的颜色表示。在左边,紫色集群包含开国元勋,在右边,蓝色集群包含现代总统。绿色聚类大致从一战到二战,橙色聚类包含从二战到几十年前的总统。红色星团的时间跨度最长,超过 100 年。

随着时间的推移,集群几乎完全不间断地运行——只有一个主要的例外:林肯。当他的绿色方块在红色的海洋中脱颖而出时,聚类模型断言林肯的用词选择使他从他那个时代的其他总统中脱颖而出。

林肯发表了一些美国最令人难忘的演讲,甚至机器学习也同意林肯走在了他的时代的前面!

要了解更多关于机器学习和总统语言的见解,请访问我的 GitHub 页面:

[## ebpalmer 17/capstone-总统语言

机器学习和总统语言:(1)用可视化和假设得出关于单词使用的结论…

github.com](https://github.com/ebpalmer17/capstone-presidential-language)

机器学习:让二进制注释不那么无聊

原文:https://towardsdatascience.com/machine-learning-making-binary-annotations-a-little-less-boring-51537497af3b?source=collection_archive---------39-----------------------

概观

对于一个大学项目,我正在开发一个基于 Spotify API 的音乐推荐分类器。广大的想法是根据用户个人喜欢或不喜欢的歌曲,根据歌曲的音乐成分(速度、调性、工具性等等),向用户推荐新的音乐。

数据集的准备通常是任何机器学习项目中最耗时的部分。这通常包括收集数据、清理数据、可选地标记数据、特征提取、将数据分成测试和训练数据。在本帖中,我们将讨论标签部分。

什么是标注(注解)?

标记或注释是评估单个数据点并为机器学习模型学习提供基础事实的行为。它主要用于监督机器学习应用。如果你有一个动物图片的数据集,你想让你的模型学会识别猫。然后你必须给所有的图片贴上相应的动物标签。如果只有两个可用的类,它被称为二元分类。例如,如果您有一个垃圾邮件过滤器模型,并且您想要决定它是垃圾邮件(1)还是垃圾邮件(0)。

永远不要低估正确标注数据集的重要性。**如果你为你的机器学习算法提供的基本事实是错误的,你不能指望该算法胜过人类注释者。**因此,您在注释过程早期犯的错误将会在以后的模型评估中被发现。

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

Annotation of a email dataset, weather it’s spam or not (ham)

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

Image labeling of a cute cat 😄

在我的例子中,我必须给我的数据集贴上标签,决定我是喜欢这首歌(1)还是不喜欢这首歌(0)。因此,我的数据集将由不同的特征(能量、可跳舞性等)组成。)和我手动赋给数据集的标签 (liked={True,False})

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

The first 5 rows of my dataset containing the different features

应用程序

现在,为了让这个无聊的任务变得有趣一点,我开发了一个用于二进制分类的 android 应用程序。原因是我无法激励自己坐下来给最近听的歌曲贴上标签。有了这个应用程序,当我有一些空闲时间可以消磨的时候,比如我在排队,或者在公共交通工具上,我就可以给一些歌曲贴上标签。这不仅让它变得更有趣,而且效率更高,我能够在更短的时间内标记更大的数据集。

偷窃

那么它是如何工作的呢?首先,你必须用你的 Spotify 账户登录,然后应用程序会调出你最近听过的 30 首歌曲,并以卡片形式显示出来。从这一点来看,它与 Tinder非常相似如果你向左刷卡,你不喜欢这首歌,如果你向右刷卡,你喜欢它。如果你按下该卡,它将在你的手机上启动 Spotify 并播放歌曲(仅在安装了 Spotify 的情况下有效)。我提供这个功能是因为我总是忘记这首歌听起来是什么样的,所以我可以很快地检查一下。

此外,您还有一个概览,在这里您可以看到您滑动的歌曲,并通过点击相应的歌曲来更改歌曲的当前状态(喜欢或不喜欢)。

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

Swipe screen (LEFT) and the overview screen (RIGHT)

还有一个屏幕,你可以选择你的 Spotify 播放列表。向左滑动的歌曲将自动添加到您的播放列表中。我删除了这个功能,因为我不确定我是否想在应用程序中使用这个功能。现在它真正关注的是标签。

Spotify API

我使用 Spotify API,因为我认为他们对不同歌曲的音频分析非常准确,还因为我每天都使用 Spotify,觉得用它来玩真的很有趣。稍后在我的机器学习项目中,我将使用另一个名为 MusicBrainz 的音乐数据库。但是我会在另一篇文章中讨论这个问题。

要使用我的应用程序,你需要一个 Spotify 账户来登录,因为我们不能对 API 进行未授权的调用。此外,如果我们不能从你的帐户中取出你最后听的歌曲来滑动,这就没有意义了。

我认为这个 API 使用起来非常简单有趣。你真的可以摆弄数据库和音乐。

为了试验一下,我在我的应用程序中添加了一些额外的特性。如果您向右或向左推送,您可以自动将它们添加到播放列表(左)或资料库中您喜欢的歌曲(右)。因此,该应用程序还可以用来快速将歌曲添加到播放列表中,甚至通过概览屏幕删除它们。你可以在下面找到关于 Spotify API 的更多信息

[## 主页|面向开发者的 Spotify

音乐,遇见代码。简单和高级应用程序的强大 API、SDK 和小部件。

developer.spotify.com](https://developer.spotify.com/)

作为后端的 Firebase

现在,如果你刷一首歌,数据去了哪里?我使用 firebase 作为应用程序的后端,因为它非常简单,并且不需要很多时间来建立数据库。

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

A snippet of the firebase database structure I’m using

如果你不知道 Firebase 实时数据库,它基本上是一个 NoSQL 云数据库。数据存储为 JSON,并实时同步到每个连接的客户端。目前,我只保存最相关的数据,即 Spotify 曲目 ID、我是否喜欢它、我滑动歌曲的时间以及一些附加信息,如名称和在应用程序中显示的图像。否则,我不得不再次调用 Spotify API,我认为这样做会更有办法。

摘要

对我来说,这是一个有趣的小项目,让我更熟悉 Spotify API,我后来在我的机器学习项目中使用了它。

该应用程序可以进一步开发,使通用标签或二进制分类成为可能。目前,用例非常具体和狭窄。

此外,该应用程序可以开发成类似于 Spotify 播放列表添加应用程序的东西,在那里您可以操作您的播放列表,并快速将最近收听的歌曲添加到播放列表中。

这篇文章介绍了我在 Spotify API 上的标签应用。在下一篇博文中,我们将讨论技术问题,我将向您详细展示我是如何开发该应用程序的,以及应该避免的陷阱。

我没有在 Appstore 或其他地方发布应用程序,因为我认为对公众来说,用例太窄了。如果你有任何可以让更多人从中受益的用例的想法,我会考虑发表它。所以,如果你有任何想法让我知道。

此外,如果你愿意通过提供你自己的标记数据集来帮助我改进我的机器学习模型,并在应用程序完成后尽快获得个性化推荐。请与我联系,我很乐意向你发送申请,这样你就可以开始刷卡!

如果你想创建自己的分类应用,我的项目在我的 Github 上是公开的。放心用吧!

[## hyferion/SpotifyRecLabelingAndroid

这个应用程序是基于机器学习的应用程序的一部分,用于歌曲的分类和制作…

github.com](https://github.com/Hyferion/SpotifyRecLabelingAndroid)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值