对象的功能knnsearch
和rangesearch
最近的邻居搜索器对象,令人疲惫的
和kdtreesearcher.
,支金宝app持代码生成。这个例子展示了如何在命令行中使用穷举搜索器对象生成查找最近邻居的代码。该示例显示了生成代码的两种不同方法,具体取决于您使用对象的方式:通过使用加载对象loadLearnerForCoder
在一个入口点函数中,并将编译时常量对象传递给生成的代码。
装载Fisher的Iris数据集。
负载fisheriris
从预测数据中随机移除五个虹膜作为查询集。
RNG('默认');重复性的%1) n =大小(量;%样本大小qIdx = randsample (n, 5);%查询数据索引X =量(~ ismember (1: n, qIdx):);: Y =量(qIdx);
使用训练数据准备一个详尽的最近邻居搜索器。指定'距离'
和“P”
名称-值对参数使用指数为1的Minkowski距离来寻找最近的邻居。
mdl = utefiveSearcher(X,'距离',闵可夫斯基的,“P”,1);
查找培训数据的索引(X
),即查询数据中每个点的最近邻居(Y
).
idx = knnsearch(mdl,y);
saveLearnerForCoder
和loadLearnerForCoder
生成加载穷举搜索器的代码,将查询数据作为输入参数,然后查找最近的邻居。
使用穷举搜索器将详尽的搜索器保存到文件中saveLearnerForCoder
.
saveLearnerForCoder (Mdl'Sexchermodel')
saveLearnerForCoder
将模型保存到MATLAB二进制文件Sexchermodel.mat.
作为当前文件夹中的结构数组。
定义入口点函数myknnsearch1
将查询数据视为输入参数。在函数中,使用函数加载搜索器对象loadLearnerForCoder
,然后将加载的模型传递给knnsearch
.
类型Myknnsearch1.M.%显示myknnsearch1的内容。m文件
function idx = myknnsearch1(Y) %#codegen Mdl = loadLearnerForCoder('searcherModel');idx = knnsearch (Mdl Y);结束
注意:如果单击此页面的右上角的按钮,请在MATLAB®中打开此示例,然后Matlab®打开示例文件夹。此文件夹包含入口点函数文件,Myknnsearch1.M.
,myknnsearch2.m.
, 和myknnsearch3.m
.
生成的代码myknnsearch1
通过使用codegen
(MATLAB编码器).通过使用指定输入参数的数据类型和维度Coder.typeof.
(MATLAB编码器)因此,生成的代码接受可变大小的数组。
codegenmyknnsearch1arg游戏{coder.typeof (Y,[正无穷,4],[1,0])}
代码生成成功。
获取使用saveLearnerForCoder
和loadLearnerForCoder
,请参阅命令行机器学习模型预测的代码生成.有关指定可变大小参数的详细信息,请参见为代码生成指定可变大小的参数.
传递查询数据(Y
)来验证myknnsearch1
MEX文件返回相同的索引。
myidx1 = myknnsearch1(y);myidx1_mex = myknnsearch1_mex(y);
比较myIdx1
和myIdx1_mex
通过使用isequal
.
验证evex1 = isequal(idx,myidx1,myidx1_mex)
verifyMEX1 =逻辑1
isequal
返回逻辑1(真的
),如果所有输入都相等。这个比较证实了myknnsearch1
MEX文件返回相同的结果。
最近的邻居搜索器对象可以是您为代码生成而定义的函数的输入参数。的arg游戏
选择codegen
(MATLAB编码器)接受编译时常量搜索器对象。
定义入口点函数myknnsearch2
将详尽的搜索器模型和查询数据作为输入参数,而不是在函数中加载模型。
类型myknnsearch2.m.%显示myknnsearch2.m文件的内容
函数IDX = myknnsearch2(mdl,y)%#codegen idx = knnsearch(mdl,y);结束
要生成接受模型对象和查询数据的代码,可以使用编码器.Constant.
(MATLAB编码器)并将常数折叠模型对象包含在arg游戏
的价值codegen
.
codegenmyknnsearch2arg游戏{编码器.Constant(MDL),Coder.typeof(y,[Inf,4],[1,0])}
代码生成成功。
具有固定折叠模型对象的代码生成工作流遵循一般的代码生成工作流。有关详细信息,请参见通用代码生成工作流.
验证myknnsearch2
MEX文件返回相同的结果。
myidx2 = myknnsearch2(mdl,y);myidx2_mex = myknnsearch2_mex(mdl,y);验证ex2 = isequal(idx,myidx2,myidx2_mex)
verifyMEX2 =逻辑1
定义入口点函数myknnsearch3
采用模型对象,查询数据和名称值对参数。通过指定,您可以允许可选的名称值参数变长度输入宗量作为输入参数。有关详细信息,请参见可变长度参数列表的代码生成(MATLAB编码器).
类型myknnsearch3.m%显示myknnsearch3的内容。m文件
函数IDX = myknnsearch3(MDL,Y,varargin)%#codegen idx = knnsearch(mdl,y,varargin {:});结束
要生成允许用户定义的闵可夫斯基距离指数的代码,请包含{coder.constant('p'),0}
在里面arg游戏
的价值codegen
.使用编码器.Constant.
(MATLAB编码器)因为名称 - 值对参数的名称必须是编译时常量。
codegenmyknnsearch3arg游戏{coder.Constant (Mdl)、coder.typeof (Y,[正无穷,4],[1,0]),coder.Constant(“P”),0}
代码生成成功。
验证myknnsearch3
MEX文件返回相同的结果。
newIdx = knnsearch (Mdl Y“P”2);myIdx3 = myknnsearch3 (Mdl Y“P”2);myIdx3_mex = myknnsearch3_mex (Mdl Y“P”2);verifymex3 = isequal(newidx,myidx3,myidx3_mex)
verifyMEX3 =逻辑1
令人疲惫的
|kdtreesearcher.
|knnsearch
|loadLearnerForCoder
|rangesearch
|saveLearnerForCoder
|codegen
(MATLAB编码器)