Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Generación de código para buscador de vecino más cercano

Las funciones de objeto y de los objetos de buscador de vecino más cercanos y, admiten la generación de código.knnsearchrangesearchExhaustiveSearcherKDTreeSearcher En este ejemplo se muestra cómo generar código para buscar el vecino más cercano mediante un objeto buscador exhaustivo en la línea de comandos. En el ejemplo se muestran dos formas diferentes de generar código, en función de la forma en que se usa el objeto: cargar el objeto mediante una función de punto de entrada y pasar un objeto constante de tiempo de compilación al código generado.loadCompactModel

Tren exhaustivo vecino más cercano Searcher

Cargue el conjunto de datos de iris de Fisher.

load fisheriris

Quite cinco iris aleatoriamente de los datos del predictor para usarlos como conjunto de consultas.

rng('default');             % For reproducibility n = size(meas,1);           % Sample size qIdx = randsample(n,5);     % Indices of query data X = meas(~ismember(1:n,qIdx),:); Y = meas(qIdx,:);

Prepare un buscador de vecinos exhaustivo más cercano utilizando los datos de entrenamiento. Especifique los argumentos de par nombre-valor para utilizar la distancia Minkowski con un exponente de 1 para encontrar el vecino más cercano.'Distance''P'

Mdl = ExhaustiveSearcher(X,'Distance','minkowski','P',1);

Busque el índice de los datos de entrenamiento () que es el vecino más cercano de cada punto de la consulta Data ().XY

Idx = knnsearch(Mdl,Y);

Generar código usando ysaveCompactModelloadCompactModel

Genere código que cargue un buscador exhaustivo, tome los datos de consulta como un argumento de entrada y, a continuación, encuentre el vecino más cercano.

Guarde el buscador exhaustivo en un archivo usando.saveCompactModel

saveCompactModel(Mdl,'searcherModel')

guarda el modelo en el archivo binario de MATLAB searcherModel. MAT como una matriz de estructura en la carpeta actual.saveCompactModel

Defina la función de punto de entrada que toma los datos de consulta como un argumento de entrada.myknnsearch1 Dentro de la función, cargue el objeto buscador utilizando y, a continuación, pase el modelo cargado a.loadCompactModelknnsearch

type myknnsearch1.m % Display contents of myknnsearch1.m file
function idx = myknnsearch1(Y) %#codegen Mdl = loadCompactModel('searcherModel'); idx = knnsearch(Mdl,Y); end 

Si pulsa el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abre la carpeta de ejemplo.Note: Esta carpeta incluye los archivos de función de punto de entrada, y.myknnsearch1.mmyknnsearch2.mmyknnsearch3.m

Genere código para usar.myknnsearch1codegen Especifique el tipo de datos y la dimensión del argumento de entrada mediante el uso de modo que el código generado acepte una matriz de tamaño variable.coder.typeof

codegen myknnsearch1 -args {coder.typeof(Y,[Inf,4],[1,0])}
 

Para obtener un ejemplo de generación de código más detallado que usa y, vea.saveCompactModelloadCompactModelGeneración de código para la predicción del modelo de aprendizaje automático en la línea de comandos Para obtener más información sobre cómo especificar argumentos de tamaño variable, vea.Especifique argumentos de tamaño variable para la generación de código

Pase la consulta Data () para verificar que y el archivo MEX devuelven los mismos índices.Ymyknnsearch1

myIdx1 = myknnsearch1(Y); myIdx1_mex = myknnsearch1_mex(Y);

Compare y utilice.myIdx1myIdx1_mexisequal

verifyMEX1 = isequal(Idx,myIdx1,myIdx1_mex)
verifyMEX1 = logical
   1

Devuelve Logical 1 () si todas las entradas son iguales.isequaltrue Esta comparación confirma que y el archivo MEX devuelven los mismos resultados.myknnsearch1

Generar código con objeto de modelo plegado constante

Los objetos de buscador de vecinos más cercanos pueden ser un argumento de entrada de una función que defina para la generación de código. La opción de aceptar un objeto buscador constante de tiempo de compilación.-argscodegen

Defina la función de punto de entrada que toma un modelo de buscador exhaustivo y los datos de consulta como argumentos de entrada en lugar de cargar el modelo en la función.myknnsearch2

type myknnsearch2.m % Display contents of myknnsearch2.m file
function idx = myknnsearch2(Mdl,Y) %#codegen idx = knnsearch(Mdl,Y); end 

Para generar código que toma el objeto de modelo, así como los datos de consulta, designe el objeto de modelo como una constante de tiempo de compilación mediante el uso e incluir el objeto de modelo plegado constante en el valor de.coder.Constant-argscodegen

codegen myknnsearch2 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0])}

El flujo de trabajo de generación de código con un objeto de modelo plegado constante sigue flujo de trabajo de generación de código general. Para obtener más información, consulteFlujo de trabajo de generación de código general.

Compruebe que y el archivo MEX devuelven los mismos resultados.myknnsearch2

myIdx2 = myknnsearch2(Mdl,Y); myIdx2_mex = myknnsearch2_mex(Mdl,Y); verifyMEX2 = isequal(Idx,myIdx2,myIdx2_mex)
verifyMEX2 = logical
   1

Generar código con argumentos de par nombre-valor

Defina la función de punto de entrada que toma un objeto de modelo, datos de consulta y argumentos de par nombre-valor.myknnsearch3 Puede permitir argumentos opcionales de nombre-valor especificando como un argumento de entrada.varargin Para obtener más información, consulte.Code Generation for Variable Length Argument Lists (MATLAB Coder)

type myknnsearch3.m % Display contents of myknnsearch3.m file
function idx = myknnsearch3(Mdl,Y,varargin) %#codegen idx = knnsearch(Mdl,Y,varargin{:}); end 

Para generar código que permita un exponente definido por el usuario para la distancia Minkowski, incluya en el valor de.{coder.Constant('P'),0}-argscodegen Usar porque el nombre de un argumento de par nombre-valor debe ser una constante de tiempo de compilación.coder.Constant

codegen myknnsearch3 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0]),coder.Constant('P'),0}

Compruebe que y el archivo MEX devuelven los mismos resultados.myknnsearch3

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 = logical
   1

Consulte también

| | | | | |

Temas relacionados