sklearn.neighbors.KDTree

class sklearn.neighbors.KDTree(X, leaf_size=40, metric='minkowski', **kwargs)

KDTree para problemas rápidos de N puntos generalizados

Más información en el Manual de usuario.

Parámetros
Xarray-like de forma (n_samples, n_features)

n_samples es el número de puntos del conjunto de datos, y n_features es la dimensión del espacio de parámetros. Nota: si X es un arreglo de dobles contiguo a C, los datos no se copiarán. En caso contrario, se realizará una copia interna.

leaf_sizepositive int, default=40

Número de puntos en los que se cambia a fuerza bruta. Cambiar el tamaño de las hojas no afectará a los resultados de una consulta, pero puede afectar significativamente a la velocidad de una consulta y a la memoria necesaria para almacenar el árbol construido. La cantidad de memoria necesaria para almacenar el árbol es aproximadamente n_samples / leaf_size. Para un leaf_size especificado, se garantiza que un nodo hoja satisface leaf_size <= n_points <= 2 * leaf_size, excepto en el caso de que n_samples < leaf_size.

metricstr o DistanceMetric object

la métrica de distancia a utilizar para el árbol. Default=”minkowski” con p=2 (es decir, una métrica euclidiana). Ver la documentación de la clase DistanceMetric para una lista de métricas disponibles. kd_tree.valid_metrics da una lista de las métricas que son válidas para KDTree.

Las palabras clave adicionales se pasan a la clase de métrica de distancia.
Nota: Las funciones invocables en el parámetro métrico NO son compatibles con KDTree
y el Árbol de Bolas. La sobrecarga de las llamadas a las funciones dará lugar a un rendimiento muy pobre.
Atributos
datavista de la memoria

Datos del entrenamiento

Ejemplos

Consulta de los vecinos más cercanos (k-nearest neighbors)

>>> import numpy as np
>>> rng = np.random.RandomState(0)
>>> X = rng.random_sample((10, 3))  # 10 points in 3 dimensions
>>> tree = KDTree(X, leaf_size=2)              
>>> dist, ind = tree.query(X[:1], k=3)                
>>> print(ind)  # indices of 3 closest neighbors
[0 3 1]
>>> print(dist)  # distances to 3 closest neighbors
[ 0.          0.19662693  0.29473397]

Pickle y Unpickle un árbol. Ten en cuenta que el estado del árbol se guarda en la operación de pickle: el árbol no necesita ser reconstruido al unpickling.

>>> import numpy as np
>>> import pickle
>>> rng = np.random.RandomState(0)
>>> X = rng.random_sample((10, 3))  # 10 points in 3 dimensions
>>> tree = KDTree(X, leaf_size=2)        
>>> s = pickle.dumps(tree)                     
>>> tree_copy = pickle.loads(s)                
>>> dist, ind = tree_copy.query(X[:1], k=3)     
>>> print(ind)  # indices of 3 closest neighbors
[0 3 1]
>>> print(dist)  # distances to 3 closest neighbors
[ 0.          0.19662693  0.29473397]

Búsqueda de vecinos en un radio determinado

>>> import numpy as np
>>> rng = np.random.RandomState(0)
>>> X = rng.random_sample((10, 3))  # 10 points in 3 dimensions
>>> tree = KDTree(X, leaf_size=2)     
>>> print(tree.query_radius(X[:1], r=0.3, count_only=True))
3
>>> ind = tree.query_radius(X[:1], r=0.3)  
>>> print(ind)  # indices of neighbors within distance 0.3
[3 0 1]

Calcular una estimación de la densidad del núcleo gaussiano:

>>> import numpy as np
>>> rng = np.random.RandomState(42)
>>> X = rng.random_sample((100, 3))
>>> tree = KDTree(X)                
>>> tree.kernel_density(X[:3], h=0.1, kernel='gaussian')
array([ 6.94114649,  7.83281226,  7.2071716 ])

Calcula una función de autocorrelación de dos puntos

>>> import numpy as np
>>> rng = np.random.RandomState(0)
>>> X = rng.random_sample((30, 3))
>>> r = np.linspace(0, 1, 5)
>>> tree = KDTree(X)                
>>> tree.two_point_correlation(X, r)
array([ 30,  62, 278, 580, 820])

Métodos

get_arrays(self)

Obtener datos y arreglos de nodos.

get_n_calls(self)

Obtiene el número de llamadas.

get_tree_stats(self)

Obtiene el estado del árbol.

kernel_density(self, X, h[, kernel, atol, …])

Calcula la estimación de la densidad del núcleo en los puntos X con el núcleo dado, utilizando la métrica de distancia especificada en la creación del árbol.

query(X[, k, return_distance, dualtree, …])

consulta el árbol para los k vecinos más cercanos

query_radius(X, r[, return_distance, …])

consulta el árbol en busca de vecinos en un radio r

reset_n_calls(self)

Restablece el número de llamadas a 0.

two_point_correlation(X, r[, dualtree])

Calcula la función de correlación de dos puntos

get_arrays(self)

Obtener datos y arreglos de nodos.

Devuelve
arrays: tupla de arreglo

Arreglos para almacenar datos de árboles, índices, datos de nodos y límites de nodos.

get_n_calls(self)

Obtiene el número de llamadas.

Devuelve
n_calls: int

número de llamadas de cálculo de la distancia

get_tree_stats(self)

Obtiene el estado del árbol.

Devuelve
tree_stats: tupla de int

(número de recortes, número de hojas, número de divisiones)

kernel_density(self, X, h, kernel='gaussian', atol=0, rtol=1E-8, breadth_first=True, return_log=False)

Calcula la estimación de la densidad del núcleo en los puntos X con el núcleo dado, utilizando la métrica de distancia especificada en la creación del árbol.

Parámetros
Xarray-like de forma (n_samples, n_features)

Un arreglo de puntos a consultar. La última dimensión debe corresponder con la dimensión de los datos de entrenamiento.

hfloat

el ancho de banda del núcleo

kernelstr, default=»gaussian»

especifica el núcleo a utilizar. Las opciones son - “gaussian” - “tophat” - “epanechnikov” - “exponential” - “linear” - “cosine” Por defecto es kernel = “gaussian”

atol, rtolfloat, default=0, 1e-8

Especifica la tolerancia relativa y absoluta deseada del resultado. Si el resultado verdadero es K_true, entonces el resultado devuelto K_ret satisface abs(K_true - K_ret) < atol + rtol * K_ret El valor predeterminado es cero (es decir, precisión de máquina) para ambos.

breadth_firstbool, default=False

Si es True, utiliza una búsqueda de tipo breadth-first. Si es False (predeterminado) utiliza una búsqueda de profundidad. La búsqueda en profundidad es generalmente más rápida para los nñucleos compactos y/o las tolerancias altas.

return_logbool, default=False

Devuelve el logaritmo del resultado. Esto puede ser más preciso que devolver el propio resultado para los núcleos estrechos.

Devuelve
densityndarray de forma X.forma[:-1]

El arreglo de evaluaciones de densidad (logarítmica)

query(X, k=1, return_distance=True, dualtree=False, breadth_first=False)

consulta el árbol para los k vecinos más cercanos

Parámetros
Xarray-like de forma (n_samples, n_features)

Un arreglo de puntos a consultar

kint, default=1

El número de vecinos más cercanos a devolver

return_distancebool, default=True

si es True, devuelve una tupla (d, i) de distancias e índices si es False, devuelve el arreglo i

dualtreebool, default=False

si es True, utiliza el formalismo de árbol dual para la consulta: se construye un árbol para los puntos de la consulta, y el par de árboles se utiliza para buscar eficientemente en este espacio. Esto puede conducir a un mejor rendimiento a medida que el número de puntos crece.

breadth_firstbool, default=False

si es True, se consultan los nodos de una manera breadth-first. En caso contrario, consulta los nodos en profundidad.

sort_resultsbool, default=True

si es True, entonces las distancias y los índices de cada punto se ordenan al regresar, de manera que la primera columna contiene los puntos más cercanos. En caso contrario, los vecinos se devuelven en un orden arbitrario.

Devuelve
isi return_distance == False
(d,i)si return_distance == True
dndarray de forma X.forma[:-1] + (k,), dtype=double

Cada entrada da la lista de distancias a los vecinos del punto correspondiente.

indarray de forma X.forma[:-1] + (k,), dtype=int

Cada entrada da la lista de índices de los vecinos del punto correspondiente.

query_radius(X, r, return_distance=False, count_only=False, sort_results=False)

consulta el árbol en busca de vecinos en un radio r

Parámetros
Xarray-like de forma (n_samples, n_features)

Un arreglo de puntos a consultar

rdistancia dentro de la cual se devuelven los vecinos

r puede ser un valor único, o un arreglo de valores de forma x.shape[:-1] si se desean diferentes radios para cada punto.

return_distancebool, default=False

si es True, devuelve las distancias a los vecinos de cada punto si es False, devuelve sólo los vecinos. Ten en cuenta que, a diferencia del método query(), establecer return_distance=True aquí aumenta el tiempo de cálculo. No es necesario calcular explícitamente todas las distancias para return_distance=False. Los resultados no están ordenados por defecto: ver la palabra clave sort_results.

count_onlybool, default=False

si es True, devuelve sólo el recuento de puntos dentro de la distancia r si es False, devuelve los índices de todos los puntos dentro de la distancia r Si return_distance==True, establecer count_only=True dará lugar a un error.

sort_resultsbool, default=False

si es True, las distancias e índices serán ordenados antes de ser devueltos. Si es False, los resultados no se ordenarán. Si return_distance == False, al establecer sort_results = True se producirá un error.

Devuelve
countsi count_only == True
indsi count_only == False y return_distance == False
(ind, dist)si count_only == False y return_distance == True
countndarray de forma X.forma[:-1], dtype=int

Cada entrada da el número de vecinos a una distancia r del punto correspondiente.

indndarray de forma X.forma[:-1], dtype=object

Cada elemento es un arreglo de enteros de numpy que lista los índices de los vecinos del punto correspondiente. Ten en cuenta que, a diferencia de los resultados de una consulta k-neighbors, los vecinos devueltos no están ordenados por distancia de forma predeterminada.

distndarray de forma X.forma[:-1], dtype=object

Cada elemento es un arreglo doble de numpy que lista las distancias correspondientes a los índices en i.

reset_n_calls(self)

Restablece el número de llamadas a 0.

two_point_correlation(X, r, dualtree=False)

Calcula la función de correlación de dos puntos

Parámetros
Xarray-like de forma (n_samples, n_features)

Un arreglo de puntos a consultar. La última dimensión debe corresponder con la dimensión de los datos de entrenamiento.

rarray-like

Un arreglo unidimensional de distancias

dualtreebool, default=False

Si es True, utiliza un algoritmo de doble árbol. En caso contrario, utilice un algoritmo de árbol único. Los algoritmos de árbol dual pueden tener un mejor escalado para N grandes.

Devuelve
countsndarray

counts[i] contiene el número de pares de puntos con distancia menor o igual a r[i]