主要内容

KNN 搜索

使用搜索器对象查找 k 最近邻

自 R2023b 起

  • KNN Search Block Icon

库:
Statistics and Machine Learning Toolbox / Neighborhood Searcher

描述

KNN Search 模块使用最近邻搜索器对象(ExhaustiveSearcherKDTreeSearcher)在数据中查找一个查询点的最近邻。

通过指定包含某经过训练的搜索器对象的工作区变量的名称,将包含观测数据的该对象导入模块中。输入端口 x 接收一个查询点,输出端口 Idx 返回数据中 k 最近邻点的索引。可选输出端口 D 返回查询点和最近邻点之间的距离。

示例

端口

输入

全部展开

查询点,指定为行向量。x 的列数必须与选择最近邻搜索器指定的 searcher 对象中的预测变量数相同。x 的列的顺序必须与 searcher 对象中列的顺序相同。

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

输出

全部展开

数据中最近邻的索引,以数值行向量或 1×1 元胞数组形式返回。

  • 如果您未在“模块参数”对话框的主要选项卡上选择包括结值,则模块返回一个 1×k 数值行向量,其中 k 是搜索的最近邻的数量。该行向量的每列都包含数据中一个最近邻点的索引,按到查询点 x 的距离升序排序。

  • 如果您在“模块参数”对话框的主要选项卡上选择包括结值,则模块返回一个 1×1 元胞数组作为可变大小信号,其中包含一个数值行向量,其元素是数据中到查询点 x 最近的观测值的至少 k 个索引。向量的列按到查询点的距离升序排序。

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

最近邻到查询点的距离,以数值行向量或 1×1 元胞数组形式返回。

  • 如果您未在“模块参数”对话框的主要选项卡上选择包括结值,则模块返回一个 1×k 数值行向量,其中 k 是搜索的最近邻的数量。根据距离度量,行向量的每列都包含数据中的一个最近邻到查询点 x 的距离。行向量的列按到查询点的距离升序排序。

  • 如果您在“模块参数”对话框的常设选项卡上选择包括结值,则模块返回一个 1×1 元胞数组作为可变大小信号,其中包含一个数值行向量,其元素是数据中到查询点 x 最近的观测值的至少 k 个距离。向量的列按到查询点的距离升序排序。

依赖关系

要启用此端口,请在 KNN Search 模块中选择添加最近邻距离的输出端口

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

参数

全部展开

主要

指定包含 ExhaustiveSearcherKDTreeSearcher 对象的工作区变量的名称。

注意

软件对您可以在“模块参数”对话框中指定的所有参数使用默认设置。对话框中的参数会覆盖搜索器对象的参数。

编程用法

模块参数NeighborhoodSearcher
类型:工作区变量
值:ExhaustiveSearcher 对象 | KDTreeSearcher 对象
默认值"searcher"

选中该复选框可将第二个输出端口 D 包含在 KNN Search 模块中。

编程用法

模块参数ShowOutputDistances
类型:字符向量
值:"off" | "on"
默认值"off"

指定要在数据中查找的查询点的最近邻的数量。

编程用法

模块参数NumNeighbors
类型:正整数
值:single | double
默认值1

如果您未在“模块参数”对话框的主要选项卡上选择包括结值,则模块会在与查询点距离相同的观测值中选择具有最小索引的观测值。

如果您选择包括结值,则:

  • 模块输出包括距离等于输出参量中第 k 个最小距离的所有最近邻。如果五个以上最近邻的距离与第 k 个最小距离相等,则模块输出仅包括前五个具有最小索引值的最近邻。

  • IdxD 模块输出是 1×1 元胞数组,其中每个元胞分别包含一个由至少 k 个索引和距离组成的向量。向量中的列按照到查询点的距离升序排序。

编程用法

模块参数IncludeTies
类型:字符向量
值:"off" | "on"
默认值"off"

指定用于查找数据中查询点的最近邻的距离度量。

对于 ExhaustiveSearcherKDTreeSearcher 对象,该模块都支持以下距离度量。

描述
"chebychev"切比雪夫距离(最大坐标差)
"cityblock"城市街区距离
"euclidean"欧几里德距离
"minkowski"闵可夫斯基距离。默认指数是 2。您可以在“模块参数”对话框中指定不同指数。

对于 ExhaustiveSearcher 对象,该模块还支持以下距离度量。

描述
"correlation"1 减去观测值(视为值序列)之间的样本线性相关系数
"cosine"1 减去观测值(视为行向量)之间夹角的余弦值
"hamming"汉明距离,即相异坐标所占的百分比
"jaccard"1 减去杰卡德系数,即非零相异坐标所占的百分比
"mahalanobis"马氏距离,使用正定协方差矩阵计算。默认情况下,该模块基于 searcher 对象中的数据计算协方差矩阵。您可以在“模块参数”对话框中指定自定义的协方差矩阵。
"seuclidean"标准化的欧几里德距离。查询点 x 和数据之间的每个坐标差通过除以根据数据计算的标准差的对应元素来缩放。您可以在“模块参数”对话框中指定不同缩放方法。
"spearman"1 减去样本观测值(视为值序列)之间的斯皮尔曼秩相关

注意

  • 距离度量设置将覆盖指定的 Distance 对象的 searcher 属性。

  • KNN Search 模块不支持 "fasteuclidean""fastseuclidean" 距离度量(请参阅距离度量)。

编程用法

模块参数DistanceMetric
类型:字符向量
值:"euclidean" | "chebychev" | "cityblock" | "minkowski" | "correlation" | "cosine" | "hamming" | "jaccard" | "mahalanobis" | "seuclidean" | "spearman"
默认值"euclidean"

默认情况下,该模块基于 searcher 对象中的数据计算协方差矩阵。您可以通过选择自定义并在自定义矩阵框中输入正定矩阵来指定自定义协方差矩阵。

注意

此设置将覆盖指定的 searcher 对象的 DistParameter 属性。

编程用法

模块参数CovarianceMatrix
类型:正定矩阵
值:"Computed using data in searcher" | "Customized"
默认值"Computed using data in searcher"

依赖关系

要启用此参数,请将距离度量设置为 "mahalanobis"

默认情况下,该模块基于 searcher 对象中的数据计算尺度参数值。您可以通过选择自定义并在自定义尺度文本框中输入非负数值行向量来指定自定义尺度参数值。行向量的列数必须与 searcher 对象中预测变量的列数相同。当模块计算标准化的欧几里德距离时,数据的每个坐标由 Scale 的对应元素缩放,查询点也是如此。

注意

此设置将覆盖指定的 searcher 对象的 DistParameter 属性。

编程用法

模块参数Scale
类型:非负数值行向量
值:"Standard deviation of data in searcher" | "Customized"
默认值"Standard deviation of data in searcher"

依赖关系

要启用此参数,请将距离度量设置为 "seuclidean"

指定闵可夫斯基距离度量的指数。对于默认情形 P = 2,闵可夫斯基距离即欧几里德距离。对于特例 P = 1,闵可夫斯基距离即城市街区距离。对于特例 P = ∞,闵可夫斯基距离即切比雪夫距离。

注意

此设置将覆盖指定的 searcher 对象的 DistParameter 属性。

编程用法

模块参数MinkExp
类型:正整数
值:positive integer
默认值2

依赖关系

要启用此参数,请将距离度量设置为 "minkowski"

数据类型

定点运算参数

指定定点运算的舍入模式。有关详细信息,请参阅舍入模式 (Fixed-Point Designer)

模块参数始终舍入到最邻近的可表示值。要控制模块参数的舍入方法,请使用 MATLAB® 舍入函数在封装字段中输入表达式。

编程用法

模块参数:RndMeth
类型:字符向量
值:"Ceiling" | "Convergent" | "Floor" | "Nearest" | "Round" | "Simplest" | "Zero"
默认值"Floor"

指定对溢出是进行饱和处理还是绕回处理。

操作基本原理对溢出的影响示例

选中此复选框 (on)。

您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。

将溢出饱和处理为数据类型能够表示的最小值或最大值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。如果选中此复选框,模块输出将在达到 127 时饱和。类似地,模块输出将在达到最小输出值 -128 时饱和。

清除此复选框 (off)。

您想优化所生成代码的效率。

您希望避免过度地指定信号超出范围时模块的处理方式。有关详细信息,请参阅信号范围错误故障排除 (Simulink)

溢出将绕回到数据类型可以表示的合适值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。在该复选框处于清除状态时,软件会将导致溢出的值解释为 int8,这可能产生意外结果。例如,以 int8 表示的模块结果 130(二进制 1000 0010)为 -126。

编程用法

模块参数:SaturateOnIntegerOverflow
类型:字符向量
值:"off" | "on"
默认值"off"

选择此参数可防止定点工具覆盖您对模块指定的数据类型。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)

编程用法

模块参数:LockScale
类型:字符向量
值:"off" | "on"
默认值"off"

数据类型

Idx 输出指定数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType

点击显示数据类型助手按钮 以显示数据类型助手,这有助于您设置数据类型属性。有关详细信息,请参阅使用数据类型助手指定数据类型 (Simulink)

编程用法

模块参数IndicesDataTypeStr
类型:字符向量
"Inherit: auto" | "double" | "single" | "half" | "int8" | "uint8" | "int16" | "uint16" | "int32" | "uint32" | "int64" | "uint64" | "fixdt(1,16,0)" | "fixdt(1,16,2^0,0)" | "<data type expression>"
默认值"Inherit: auto"

指定 Simulink® 检查的 Idx 输出范围的最小值。

Simulink 使用最小值执行下列操作:

注意

索引数据类型最小值参数不会对实际 Idx 输出信号进行饱和处理或截断。为此,请改用 Saturation (Simulink) 模块。

编程用法

模块参数IndicesOutMin
类型:标量
"[]" | 标量
默认值"[]"

指定 Simulink 检查的 Idx 输出范围的最大值。

Simulink 使用最大值执行下列操作:

注意

索引数据类型最大值参数不会对实际 Idx 输出信号进行饱和处理或截断。为此,请改用 Saturation (Simulink) 模块。

编程用法

模块参数IndicesOutMax
类型:标量
"[]" | 标量
默认值"[]"

指定距离 (D) 输出的数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType

点击显示数据类型助手按钮 以显示数据类型助手,这有助于您设置数据类型属性。有关详细信息,请参阅使用数据类型助手指定数据类型 (Simulink)

编程用法

模块参数DistanceDataTypeStr
类型:字符向量
"Inherit: auto" | "double" | "single" | "half" | "int8" | "uint8" | "int16" | "uint16" | "int32" | "uint32" | "int64" | "uint64" | "fixdt(1,16,0)" | "fixdt(1,16,2^0,0)" | "<data type expression>"
默认值"Inherit: auto"

注意

斯皮尔曼距离度量不支持定点数据类型。

依赖关系

要启用此参数,请在“模块参数”对话框的主要选项卡上选择添加最近邻距离的输出端口

指定 Simulink 检查的距离 (D) 输出范围的最小值。

Simulink 使用最小值执行下列操作:

注意

距离数据类型最小值参数不会对实际 D 输出信号进行饱和处理或截断。为此,请改用 Saturation (Simulink) 模块。

编程用法

模块参数DistanceOutMin
类型:标量
"[]" | 标量
默认值"[]"

依赖关系

要启用此参数,请在“模块参数”对话框的主要选项卡上选择添加最近邻距离的输出端口

指定 Simulink 检查的距离 (D) 输出范围的最大值。

Simulink 使用最大值执行下列操作:

注意

距离数据类型最大值参数不会对实际 D 输出信号进行饱和处理或截断。为此,请改用 Saturation (Simulink) 模块。

编程用法

模块参数DistanceOutMax
类型:标量
"[]" | 标量
默认值"[]"

依赖关系

要启用此参数,请在“模块参数”对话框的主要选项卡上选择添加最近邻距离的输出端口

模块特性

数据类型

Boolean | double | enumerated | fixed point | half | integer | single

直接馈通

多维信号

可变大小信号

过零检测

详细信息

全部展开

替代功能

您可以将 MATLAB Function 模块与最近邻搜索器对象(ExhaustiveSearcherKDTreeSearcher)的 knnsearch 对象函数结合使用。有关示例,请参阅Predict Class Labels Using MATLAB Function Block

在决定是使用 Statistics and Machine Learning Toolbox™ 库中的 KNN Search 模块还是使用具有 knnsearch 函数的 MATLAB Function 模块时,请考虑以下几点:

  • 如果使用 Statistics and Machine Learning Toolbox 库模块,可以使用定点工具 (Fixed-Point Designer)将浮点模型转换为定点。

  • 必须为具有 knnsearch 函数的 MATLAB Function 模块启用对可变大小数组的支持。

扩展功能

全部展开

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

版本历史记录

在 R2023b 中推出