K 最近邻 (k-NN) 算法 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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 和编码参数。它采用值为 0 的 label_size 和 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 示例笔记本

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

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

k-NN 算法的 EC2 实例建议

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

来自 CPU 的推理请求通常具有比来自 GPU 的请求更低的平均延迟,因为当您使用 GPU 硬件时存在 CPU 到 GPU 的通信负担。但是,对于更大的批处理,GPU 通常具有更高的吞吐量。