K 最近邻 (k-NN) 算法 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

K 最近邻 (k-NN) 算法

Amazon SageMaker k 最近邻 (k-nn) 算法是一种基于索引的算法。它使用非参数化方法来进行分类或回归。对于分类问题,算法查询最接近采样点的 k 个点,并返回其分类最常用的标签作为预测标签。对于回归问题,算法查询最接近采样点的 k 个点,并返回其特征值的平均值作为预测值。

使用 k-NN 算法的训练过程有三个步骤:采样、维度缩减和索引构建。采样过程可减少初始数据集的大小,这样可放到内存中。对于维度缩减,算法将减少数据的特征维度,以便减少 k-NN 模型占用的内存和降低推理延迟。我们提供了两种维度缩减方法:随机投影和快速 Johnson-Lindenstrauss 变换。通常情况下,您可以对高维 (d > 1000) 数据集使用维度缩减,以避免“诅咒维度”,后者会损害随着维度增加而变得稀疏的数据的统计分析。k-NN 训练的主要目标是构建索引。该索引能够有效地查找尚未确定其值或分类标签的点与用于推理的 k 个最近点之间的距离。

k-NN 算法的输入/输出接口

SageMaker k-nn 支持训练和测试数据通道。

  • 对要采样并构建到 k-NN 索引中的数据使用训练通道

  • 使用测试通道可以向日志文件发送分数。分数按照每个小批量一行的方式列出:分数的 classifier 代表准确率,regressor 代表均方误差。

对于训练输入,k-NN 支持 text/csvapplication/x-recordio-protobuf 数据格式。对于输入类型 text/csv,第一个 label_size 列解释为相应行的标签向量。您可以使用文件模式或管道模式,针对格式为 recordIO-wrapped-protobufCSV 的数据训练模型。

对于推理输入,k-NN 支持 application/jsonapplication/x-recordio-protobuftext/csv 数据格式。text/csv 格式接受 label_size 和编码参数。它假设 a label_size 为 0,编码为 UTF -8。

对于推理输出,k-NN 支持 application/jsonapplication/x-recordio-protobuf 数据格式。这两种数据格式还支持详细输出模式。在详细输出模式下,为搜索结果API提供从小到大排序的距离矢量以及标签矢量中的相应元素。

对于批量变换,k-NN 支持对输入和输出使用 application/jsonlines 数据格式。示例输入如下所示:

content-type: application/jsonlines {"features": [1.5, 16.0, 14.0, 23.0]} {"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}

示例输出如下所示:

accept: application/jsonlines {"predicted_label": 0.0} {"predicted_label": 2.0}

有关输入和输出文件格式的更多信息,请参阅k-NN 训练输入的数据格式(对于训练)、k-NN 请求和响应格式(对于推理)和k-NN 示例笔记本

k-NN 示例笔记本

有关使用 k SageMaker 最近邻算法根据地质和森林服务数据预测荒野覆盖类型的示例笔记本,请参阅 K-Nearest Ne igh bor Covertype。

使用 Jupyter 笔记本实例在中运行示例。 SageMaker要了解如何在中创建和打开 Jupyter 笔记本实例 SageMaker,请参阅。Amazon SageMaker 笔记本实例创建并打开笔记本实例后,选择 “SageMaker 示例” 选项卡以查看所有 SageMaker 示例笔记本的列表。在 Amazon 算法简介 部分中查找 K 最近邻笔记本。要打开笔记本,请单击使用 选项卡,然后选择创建副本

EC2k-nn 算法的实例推荐

我们建议在CPU实例(例如 ml.m5.2xlarge)或实例上进行训练。GPUk-nn 算法支持 P2、P3、g4dn 和 G5 GPU 实例系列进行训练和推理。

来自的推理请求的平均延迟CPUs通常比来自的请求低,GPUs因为使用GPU硬件时会对 CPU-to-GPU通信产生负担。但是,对于较大的批次,GPUs通常具有更高的吞吐量。