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 satisfaceleaf_size <= n_points <= 2 * leaf_size
, excepto en el caso de quen_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]