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: los vecinos más cercanos utilizan datos de entradak

Descripción

ejemplo

Idx = knnsearch(X,Y) busca el vecino más cercano 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 para 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 en las sintaxis anteriores. contiene las distancias entre cada observación y las observaciones más cercanas correspondientes.DDYX

Ejemplos

contraer todo

Encontrar los pacientes en el conjunto de datos que más se asemejan 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

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

Idx = knnsearch(X,Y);

Encuentra a los pacientes más cercanos en edad y peso a los que están en.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 un entre y los puntos de consulta utilizando las métricas de distancia de 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 vecinas más cercanas. Graficar los datos de entrenamiento. Trace los puntos de consulta con el marcador X. Use círculos para denotar los vecinos más cercanos de Minkowski. Usa pentagramas para denotar a los vecinos más cercanos de Chebychev.

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 corresponden a las observaciones y las columnas corresponden a las variables.X

Tipos de datos: single | double

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

Tipos de datos: single | double

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.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 bloque de la ciudad.knnsearch(X,Y,'K',10,'IncludeTies',true,'Distance','cityblock')

Número de vecinos más cercanos para buscar en 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

Marque para incluir a todos los vecinos más cercanos que tengan la misma distancia de los puntos de consulta, especificados como el par separado por comas que consta de y () o ().'IncludeTies'false0true1

Si es así, 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 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 las matrices son por celda, de forma 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 en contiene los índices de los vecinos más cercanos que corresponden 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 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 a 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 sólo es válido cuando la métrica de distancia es una de las cuatro métricas indicadas anteriormente.'kdtree'

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

Ejemplo: 'NSMethod','exhaustive'

Los usos métricos de distancia, especificados 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 y la matriz de consulta se escala dividiendo por el elemento correspondiente de la desviación estándar calculada desde.XYX Para especificar otro escalado, use el argumento de par nombre-valor.'Scale'
'cityblock'Distancia de bloque de ciudad.
'chebychev'Chebychev distancia (diferencia máxima de coordenadas).
'minkowski'Distancia Minkowski. El exponente predeterminado es 2. Para especificar un exponente diferente, utilice el argumento de par nombre-valor.'P'
'mahalanobis'Distancia de 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 (tratadas como vectores).
'correlation'Uno menos la correlación lineal de muestra entre las observaciones (tratadas como secuencias de valores).
'spearman'Uno menos la correlación de rango de Spearman de 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:

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

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

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

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

Ejemplo: 'Distance','chebychev'

Exponente de la métrica de distancia Minkowski, especificada como el par separado por comas que consta de un escalar positivo.'P' Este argumento sólo es válido si es.'Distance''minkowski'

Ejemplo: 'P',4

Tipos de datos: single | double

Matriz de covarianza para la métrica de distancia de Mahalanobis, especificada como el par separado por comas que consta de una matriz definida positiva.'Cov' Este argumento sólo es válido cuando 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. tiene una longitud igual al número de columnas en.'Scale''Scale'X Cuando se 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 sólo 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 un entero positivo.K'BucketSize' Este argumento sólo 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 cualquiera () o ().'SortIndices'true1false0

Para un rendimiento más rápido, puede establecer cuando se cumplen los siguientes pasos: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 sin ningún orden en particular.knnsearch Cuando es, la función organiza los índices de vecino más cercano en orden ascendente por distancia.SortIndicestrue

es de forma predeterminada.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, donde es el número de filas 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 se especifica, se trata de una matriz-por-celda que Cell () contiene un vector de al menos índices de las observaciones más cercanas en el punto de consulta.'IncludeTies',trueIdxm1jIdx{j}kXY(j,:)

Si es así, organiza los índices en orden ascendente por distancia.SortIndicestrueknnsearch

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

  • Si no especifica (de forma predeterminada), entonces es una matriz numérica, donde es el número de filas 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 se especifica, se trata de una matriz-por-celda que Cell () contiene un vector de al menos las distancias de las observaciones más cercanas en el punto de consulta.'IncludeTies',trueDm1jD{j}kXY(j,:)

Si es así, organiza las distancias en orden ascendente.SortIndicestrueknnsearch

Sugerencias

  • Para un entero positivo fijo, busca los puntos que son los más cercanos a cada punto.kknnsearchkXY Para buscar 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 vecino más cercano y búsqueda de RADIUSk

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 equivalen a los resultados obtenidos mediante la realización de una búsqueda a 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.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