Main Content

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.

knnsearch

Buscar vecinos más cercanos utilizando datos de entradak

Descripción

ejemplo

Idx = knnsearch(X,Y) busca el vecino más cercano en para cada punto de consulta y devuelve los índices de los vecinos más cercanos en , un vector de columna. tiene el mismo número de filas que .XYIdxIdxY

Idx = knnsearch(X,Y,Name,Value) devuelve con opciones adicionales especificadas mediante uno o varios argumentos de par nombre-valor.Idx Por ejemplo, puede especificar el número de vecinos más cercanos que se va a buscar y la métrica de distancia utilizada en la búsqueda.

ejemplo

[Idx,D] = knnsearch(___) además devuelve la matriz, utilizando cualquiera de los argumentos de entrada de las sintaxis anteriores. contiene las distancias entre cada observación y las correspondientes observaciones más cercanas en .DDYX

Ejemplos

contraer todo

Encuentre a los pacientes en el conjunto de datos que más se asemejen a los pacientes en , según la edad y el peso.hospitalY

Cargue el conjunto de datos.hospital

load hospital; X = [hospital.Age hospital.Weight]; Y = [20 162; 30 169; 40 168; 50 170; 60 171];   % New patients

Realice un entre y para encontrar índices de los vecinos más cercanos.knnsearchXY

Idx = knnsearch(X,Y);

Encuentre a los pacientes más cercanos en edad y peso a los de .XY

X(Idx,:)
ans = 5×2

    25   171
    25   171
    39   164
    49   170
    50   172

Encuentra los 10 vecinos más cercanos en cada punto en , primero usando la métrica de distancia Minkowski y luego usando la métrica de distancia Chebychev.XY

Cargue el conjunto de datos de iris de Fisher.

load fisheriris X = meas(:,3:4);    % Measurements of original flowers Y = [5 1.45;6 2;2.75 .75];  % New flower data

Realice puntos de consulta entre y los puntos de consulta mediante las métricas de distancia Minkowski y Chebychev.knnsearchXY

[mIdx,mD] = knnsearch(X,Y,'K',10,'Distance','minkowski','P',5); [cIdx,cD] = knnsearch(X,Y,'K',10,'Distance','chebychev');

Visualice los resultados de las dos búsquedas de vecino sin vecinos más cercanos. Trazar los datos de entrenamiento. Trazar los puntos de consulta con el marcador X. Utilice círculos para denotar los vecinos más cercanos de Minkowski. Utilice pentagramas para denotar el Chebychev vecinos más cercanos.

gscatter(X(:,1),X(:,2),species) line(Y(:,1),Y(:,2),'Marker','x','Color','k',...    'Markersize',10,'Linewidth',2,'Linestyle','none') line(X(mIdx,1),X(mIdx,2),'Color',[.5 .5 .5],'Marker','o',...    'Linestyle','none','Markersize',10) line(X(cIdx,1),X(cIdx,2),'Color',[.5 .5 .5],'Marker','p',...    'Linestyle','none','Markersize',10) legend('setosa','versicolor','virginica','query point',... 'minkowski','chebychev','Location','best')

Argumentos de entrada

contraer todo

Datos de entrada, especificados como una matriz numérica. Las filas de corresponden a observaciones y las columnas corresponden a variables.X

Tipos de datos: single | double

Puntos de consulta, especificados como una matriz numérica. Las filas de corresponden a observaciones y las columnas corresponden a variables. debe tener el mismo número de columnas que .YYX

Tipos de datos: single | double

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: busca 10 vecinos más cercanos, incluidos los lazos y el uso de la distancia de la manzana de la ciudad.knnsearch(X,Y,'K',10,'IncludeTies',true,'Distance','cityblock')

Número de vecinos más cercanos para buscar para cada punto en , especificado como el par separado por comas que consta de y un entero positivo.XY'K'

Ejemplo: 'K',10

Tipos de datos: single | double

Marcar para incluir todos los vecinos más cercanos que tengan la misma distancia desde los puntos de consulta, especificado según el par separado por comas que consta de y ( ) o ( ).'IncludeTies'false0true1

Si es , elige la observación con el índice más pequeño entre las observaciones que tienen la misma distancia desde un punto de consulta.'IncludeTies'falseknnsearch

Si es , entonces:'IncludeTies'true

  • incluye a todos los vecinos más cercanos cuyas distancias son iguales a la distancia más pequeña en los argumentos de salida.knnsearchk Para especificar , utilice el argumento de par nombre-valor.k'K'

  • y son matrices -por- de celda de tal manera que cada celda contiene un vector de al menos índices y distancias, respectivamente.IdxDm1k Cada vector en contiene distancias dispuestas en orden ascendente.D Cada fila contiene los índices de los vecinos más cercanos correspondientes a las distancias en .IdxD

Ejemplo: 'IncludeTies',true

Método de búsqueda de vecino más cercano, especificado como el par separado por comas que consta de y uno de estos valores.'NSMethod'

  • : crea y utiliza un árbol d para encontrar los vecinos más cercanos. es el valor predeterminado cuando el número de columnas en es menor o igual que 10, no es disperso y la métrica de distancia es , , , o .'kdtree'K'kdtree'XX'euclidean''cityblock''chebychev''minkowski' De lo contrario, el valor predeterminado es .'exhaustive'

    El valor solo es válido cuando la métrica de distancia es una de las cuatro métricas mencionadas anteriormente.'kdtree'

  • : utiliza el algoritmo de búsqueda exhaustivo calculando los valores de distancia de todos los puntos de cada punto en .'exhaustive'XY

Ejemplo: 'NSMethod','exhaustive'

Utiliza la métrica de distancia, especificada como el par separado por comas que consta de y uno de los valores de esta tabla o un identificador de función.knnsearch'Distance'

ValorDescripción
'euclidean'Distancia euclidiana.
'seuclidean'Distancia euclidiana estandarizada. Cada diferencia de coordenadas entre las filas de la matriz de consulta y la matriz de consulta se escala dividiendo por el elemento correspondiente de la desviación estándar calculada desde .XYX Para especificar otra escala, utilice el argumento par nombre-valor.'Scale'
'cityblock'Distancia del bloque de la ciudad.
'chebychev'Distancia de Chebychev (diferencia máxima de coordenadas).
'minkowski'Distancia de Minkowski. El exponente predeterminado es 2. Para especificar un exponente diferente, utilice el argumento de par nombre-valor.'P'
'mahalanobis'Distancia Mahalanobis, calculada utilizando una matriz de covarianza definida positiva. Para cambiar el valor de la matriz de covarianza, utilice el argumento de par nombre-valor.'Cov'
'cosine'Uno menos el coseno del ángulo incluido entre las observaciones (tratados como vectores).
'correlation'Uno menos la correlación lineal de la muestra entre observaciones (tratadas como secuencias de valores).
'spearman'Uno menos la correlación de rango de Spearman de la muestra entre las observaciones (tratadas como secuencias de valores).
'hamming'Distancia de hamming, que es el porcentaje de coordenadas que difieren.
'jaccard'Uno menos el coeficiente Jaccard, que es el porcentaje de coordenadas distintas de cero que difieren.

También puede especificar un identificador de función para una métrica de distancia personalizada mediante (por ejemplo, ).@@distfun Una función de distancia personalizada debe:

  • Tenga el formulario .function D2 = distfun(ZI,ZJ)

  • Tome como argumentos:

    • Un vector 1 por- que contiene una sola fila desde o hacia los puntos de consulta.nZIXY

    • Un M2-por- matriz que contiene varias filas de o .nZJXY

  • Devolver un M2-por-1 vector de distancias, cuyo ésimo elemento es la distancia entre las observaciones y .D2jZIZJ(j,:)

Para obtener más información, consulte .Métricas de distancia

Ejemplo: 'Distance','chebychev'

Exponente para la métrica de distancia Minkowski, especificada como el par separado por comas que consta de un escalar positivo.'P'

Este argumento solo es válido si es .'Distance''minkowski'

Ejemplo: 'P',3

Tipos de datos: single | double

Matriz de covarianza para la métrica de distancia Mahalanobis, especificada como el par separado por comas que consta de y una matriz definida positiva.'Cov'

Este argumento solo es válido si es .'Distance''mahalanobis'

Ejemplo: 'Cov',eye(4)

Tipos de datos: single | double

Valor de parámetro de escala para la métrica de distancia euclidiana estandarizada, especificada como el par separado por comas que consta de un vector numérico no negativo y un vector numérico no negativo. tiene una longitud igual al número de columnas en .'Scale''Scale'X Cuando calcula la distancia euclidiana estandarizada, cada coordenada de se escala por el elemento correspondiente de , como es cada punto de consulta.knnsearchX'Scale' Este argumento solo es válido cuando es .'Distance''seuclidean'

Ejemplo: 'Scale',quantile(X,0.75) - quantile(X,0.25)

Tipos de datos: single | double

Número máximo de puntos de datos en el nodo hoja del árbol d, especificado como el par separado por comas que consta de y un entero positivo.K'BucketSize' Este argumento solo es válido cuando es .NSMethod'kdtree'

Ejemplo: 'BucketSize',20

Tipos de datos: single | double

Marcar para ordenar los índices devueltos según la distancia, especificado como el par separado por comas que consta de y ya sea ( ) o ( ).'SortIndices'true1false0

Para un rendimiento más rápido, puede establecer cuando se cumple lo siguiente:SortIndicesfalse

  • contiene muchas observaciones que tienen muchos vecinos más cercanos en .YX

  • Es.NSMethod'kdtree'

  • Es.IncludeTiesfalse

En este caso, devuelve los índices de los vecinos más cercanos en ningún orden en particular.knnsearch Cuando es , la función organiza los índices vecinos más cercanos en orden ascendente por distancia.SortIndicestrue

es por defecto.SortIndicestrue Cuando es o es , la función siempre ordena los índices.NSMethod'exhaustive'IncludeTiestrue

Ejemplo: 'SortIndices',false

Tipos de datos: logical

Argumentos de salida

contraer todo

Los índices de datos de entrada de los vecinos más cercanos, devueltos como una matriz numérica o matriz de celdas de vectores numéricos.

  • Si no especifica (de forma predeterminada), entonces es una matriz numérica -por-, donde está el número de filas en y es el número de vecinos más cercanos buscados. indica que es una de las observaciones más cercanas al punto de consulta.IncludeTiesfalseIdxmkmYkIdx(j,i)X(Idx(j,i),:)kXY(j,:)

  • Si especifica , entonces es una matriz de celdas -por- de forma que la celda ( ) contenga un vector de al menos índices de las observaciones más cercanas en el punto de consulta.'IncludeTies',trueIdxm1jIdx{j}kXY(j,:)

Si es , a continuación, organiza los índices en orden ascendente por distancia.SortIndicestrueknnsearch

Distancias de los vecinos más cercanos a los puntos de consulta, devueltas como una matriz numérica o matriz de celdas de vectores numéricos.

  • Si no especifica (de forma predeterminada), entonces es una matriz numérica -por-, donde está el número de filas en y es el número de vecinos más cercanos buscados. es la distancia entre y con respecto a la métrica de distancia.IncludeTiesfalseDmkmYkD(j,i)X(Idx(j,i),:)Y(j,:)

  • Si especifica , entonces es una matriz de celdas -por- de forma que la celda ( ) contenga un vector de al menos distancias de las observaciones más cercanas en el punto de consulta.'IncludeTies',trueDm1jD{j}kXY(j,:)

Si es , a continuación, organiza las distancias en orden ascendente.SortIndicestrueknnsearch

Sugerencias

  • Para un entero positivo fijo, busca los puntos que están más cerca de cada punto en .kknnsearchkXY Para encontrar todos los puntos dentro de una distancia fija de cada punto en , utilice .XYrangesearch

  • no guarda un objeto de búsqueda.knnsearch Para crear un objeto de búsqueda, utilice .createns

Algoritmos

Para obtener información sobre un algoritmo de búsqueda específico, consulte .-Búsqueda de vecinos más cercano y búsqueda de radiok

Funcionalidad alternativa

Si establece el argumento de par nombre-valor de la función en el valor adecuado (para un algoritmo de búsqueda exhaustivo o para un algoritmo de árbol d), los resultados de la búsqueda son equivalentes a los resultados obtenidos mediante la realización de una búsqueda de distancia mediante la función de objeto.knnsearch'NSMethod''exhaustive''kdtree'Kknnsearch A diferencia de la función, la función de objeto requiere un objeto de modelo o uno.knnsearchknnsearchExhaustiveSearcherKDTreeSearcher

Referencias

[1] Friedman, J. H., J. Bentely, and R. A. Finkel. “An Algorithm for Finding Best Matches in Logarithmic Expected Time.” ACM Transactions on Mathematical Software 3, no. 3 (1977): 209–226.

Capacidades ampliadas

Introducido en R2010a