Aprendizaje automático de Python (2) ingeniería de funciones, algoritmo de vecino más cercano K, flujo de trabajo KNN, implementación de scikit-learn del algoritmo de vecino más cercano K, selección de valor K, cálculo de distancia, árbol KD

ingeniería de funciones

Convierta características en datos que las máquinas puedan reconocer fácilmente y convierta características a un lenguaje que las máquinas puedan leer y cuantificar fácilmente.

Mín-Máx normalizado

Asigne los datos originales a
X ′ = x − minmax − min X'= \frac{x-min}{max-min} entre [0,1]X=máx .minXminuto
Pero la normalización tiene desventajas. Por ejemplo, si hay un error de valor, afectará el valor general y la normalización no puede resolver este valor atípico. Por lo tanto, la normalización solo es adecuada para escenarios tradicionales de datos pequeños precisos.

Estandarización

Transforme los datos a una media de 0 y una desviación estándar de 1 transformando los datos originales. Es decir, los datos obedecen a la distribución normal.
X ′ = x − media σ X'=\frac{x-media}{\sigma}X=pagXyo y _

Algoritmo de vecino más cercano K (K-Vecino más cercano)

definición

Si la mayoría de las k muestras más similares en el espacio de características (es decir, los vecinos más cercanos en el espacio de características) de una muestra pertenecen a una determinada categoría, la muestra también pertenece a esta categoría.

idea

La esencia de tomar a los vecinos más cercanos es que los que están cerca del bermellón son rojos y los que están cerca de la tinta son negros Por ejemplo, puede predecir quién entregará comida en el área a través de los residentes que lo rodean. Entonces es necesario usar la distancia euclidiana para calcular la distancia al vecino y encontrar el vecino más cercano (k=1).
Problema: si solo hay uno, los datos no son lo suficientemente precisos, la interferencia por ruido es demasiado fuerte y si hay un error en los datos, estará completamente sesgado.
Solución: para encontrar k vecinos, escriba su propio código para implementar knn. El algoritmo knn también se puede utilizar para la antiescalada de fuentes cargadas dinámicamente.

Comprender los K-vecinos más cercanos

Se sabe que "Wolf Warrior", "Operation Red Sea" y "Mission: Impossible 6" son películas de acción, mientras que "Predecessor 3", "Chun Jiao and Zhi Ming" y "Titanic" son películas románticas. Cada fila (una película) es una muestra de datos, y las características se enumeran como la cantidad de peleas y la cantidad de besos. Según la cantidad de peleas y la cantidad de besos, se distinguen las películas románticas y las películas de acción. Si hay una nueva película como "La sirena", las personas pueden clasificar la película según su propia experiencia, y la máquina también puede dominar una regla de clasificación para clasificar automáticamente la nueva película.
inserte la descripción de la imagen aquí
Organice los datos en la figura y dibuje un diagrama de dispersión de la siguiente manera:
inserte la descripción de la imagen aquí

A partir de los resultados del análisis, se puede ver que hay muchas escenas de lucha en las películas de acción. Según los datos de la película "Sirena", la posición del círculo rojo en la imagen se puede juzgar aproximadamente. Ahora es necesario determinar a qué punto de muestra está más cerca el círculo rojo. Si está más cerca de "Chunjiao y Zhiming", puede clasificarse como una película de romance, y si está más cerca de "Operación Mar Rojo", puede clasificarse como una película de acción.
La línea recta entre dos puntos es la más cercana.
inserte la descripción de la imagen aquí
Cuando se trata de la distancia entre dos puntos en el aprendizaje automático, generalmente se refiere a la distancia euclidiana. La fórmula de la distancia euclidiana bidimensional es la siguiente: d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2
}d12=( X1X2)2+( y1y2)2
Es imposible decir que solo hay dos. Cada característica representa una dimensión. La misma razón es que el tridimensional Nuestra fórmula de distancia es la siguiente: D 12 = (x 1 − x 2) 2 + (y 1 − y 2) 2 + (z 1 − z 2) 2 d_ {12} = \ sqrt {(x_1-x_2)^2 + (y_1-y2) ^2+(z_1-z_2)^ 2
}d12=( X1X2)2+( y1y2)2+( z1z2)2
Si es tetradimensional o superior, la fórmula de la distancia euclidiana N-dimensional se resume de la siguiente manera:
d 12 = ∑ k = 1 n ( xi − yi ) 2 d_{12} = \sqrt{\sum_{k=1}^n(x_i-y_i)^2}d12=k = 1n( Xyoyyo)2
Calcule con precisión la distancia, tome dos puntos (Sirena, Misión: Imposible 6) como ejemplo para resolver,

# 美人鱼:5  29
# 碟中谍6: 105 31
np.sqrt((105-5)**2+(31-29)**2)  # 100.0199980003999

inserte la descripción de la imagen aquí
Si desea calcular la distancia más corta, debe calcular la distancia entre "Sirena" y cada punto característico. A partir de los resultados del cálculo, se puede ver que la película más cercana a "Mermaid" es "Predecessor 3". Si se juzga desde un solo punto característico, el resultado puede ser inexacto. En este momento, es necesario seleccionar más (valor K) valores propios cercanos para la comparación. Si K = 3, seleccione los 3 más cercanos, y los valores propios seleccionados son "Predecesor 3", "Chunjiao y Zhiming" y "Titanic". Si elige K = 4, habrá 3 películas de amor y 1 película de acción. En este momento, seleccione el modo y clasifique los datos en la función con la mayor cantidad de ocurrencias.
No es confiable juzgar el tipo solo por la distancia de un punto característico. Como se muestra en la figura a continuación,
inserte la descripción de la imagen aquí
xiaoming se encuentra en realidad en el distrito de Erqi, pero la distancia al estudiante B es la más cercana. Este es un problema de clasificación. En el algoritmo del vecino más cercano K, el radio se usa para dibujar un círculo, pero no se puede decir que xiaoming se encuentra en el distrito de Central Plains, y el problema de clasificación no se puede considerar como un promedio. Si elige cinco estudiantes para calcular y calcula la distancia a cada estudiante por separado, debe elegir la categoría con el número mayoritario, para que pueda determinar de manera más confiable el área donde se encuentra xiaoming. Xiaoming es el más cercano a los estudiantes C y D, y los estudiantes E y F están más lejos, por lo que puede juzgar con precisión en qué área se encuentra xiaoming.

Flujo de trabajo KNN

  • Calcular la distancia entre el objeto a clasificar y otros objetos;
  • Cuente los vecinos K más cercanos;
  • Para los K vecinos más cercanos, a qué categoría pertenecen más, el objeto a clasificar pertenece a qué categoría.
    Según el proceso, use numpy y pandas para implementar el algoritmo.
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
    Para realizarlo mediante la programación, es necesario utilizar ideas de programación orientada a objetos, que pueden realizar el paso de parámetros dinámicos, la herencia, etc., evitando la aceptación y llamadas repetidas entre funciones, y los atributos de instancia se pueden usar en todos los métodos de instancia. Primero encapsule una clase y luego defina un método main(), cree una instancia y llame al método en el método del programa principal.
    Después de leer los datos en el método main(), no todos los datos pueden pasarse para su procesamiento, pero los datos deben dividirse en funciones inicializadas, funciones de entrenamiento: número de peleas, número de besos; objetivo de entrenamiento: tipo de película; datos de predicción; clase de creación de instancias, funciones de entrenamiento de entrada, datos objetivo y valor K.
    Para pasar los datos obtenidos a la clase, cree un método de inicialización en la clase para inicializar la propiedad.
    Cree un método de predicción para predecir a qué categoría pertenece la película "Sirena", calcule la distancia euclidiana entre los datos predichos y los datos reales, obtenga los valores K superiores con la distancia más pequeña y realice estadísticas sobre la clasificación de los puntos K. En este momento, las estadísticas son los resultados obtenidos cuando k es un valor determinado. Si desea probar más de uno, puede realizar un recorrido de bucle. Lo mejor es tomar un número impar para k.

resumen

  1. Calcular la distancia euclidiana
  2. Tome los k vecinos más cercanos
  3. Usar el mecanismo de transmisión de numpy y pandas es más eficiente que el bucle de python
  4. Seleccionar datos.
      1. df.loc[etiqueta de fila, etiqueta de columna], seleccionar datos por etiqueta
    • 2.df.iloc[tabla de filas, subíndice de columna], seleccionar datos por subíndice/índice
  5. Un vecino no es confiable y es necesario seleccionar varios vecinos, y se calcula la categoría, no la media.

Introducción a la API del algoritmo del vecino más cercano K

Introducción a las herramientas de scikit-learn

scikit-learn es una herramienta de aprendizaje automático basada en el lenguaje Python. Documentación de referencia: http://scikitlearn.com.cn

  • El lenguaje Python es una herramienta simple y eficiente de extracción y análisis de datos.
  • Scikit-learn incluye implementaciones de muchos algoritmos de aprendizaje automático conocidos
  • Scikit-learn tiene documentación completa, fácil de usar y rica API

instalación de scikit-learn

pip3 install scikit-learn

Nota: para instalar scikit-learn, debe instalar numpy, Scipy y otras bibliotecas por adelantado

scikit-learn implementa el algoritmo del vecino más cercano K: problema de clasificación

Desde el módulo de vecinos del paquete sklearn, llame al clasificador KNeighborsClassifier utilizado, n_neighbors es el valor K especificado,

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto')
n_neighbors:查询默认使用的邻居数(默认为 5) 
weights:默认为 “uniform” 表示为每个近邻分配同一权重;
可指定为 “distance” 表示分配权重与查询点的距离成反比;同时还可以自定义权重。

inserte la descripción de la imagen aquí

Se puede ver en el título que 1-, -2 son de la misma categoría, que es la categoría 0; 2, 3 son de la misma categoría, que es la categoría 1. La característica entrante 1 selecciona 2 vecinos, no solo se encontrarán los 2 más cercanos a 1, sino también el -1 más cercano a 1. En este momento, -1 y 2 tienen el mismo peso. Entrene el modelo de acuerdo con los datos y resultados de características existentes, y use pesos = 'distancia' para aumentar el peso de acuerdo con la distancia.

Un ejemplo de implementación de la clasificación de películas

inserte la descripción de la imagen aquí

scikit-learn implementa el algoritmo del vecino más cercano K – resumen

  • Cree datos de características y datos de destino
  • Cree un clasificador con k vecinos más cercanos (dos parámetros: n_neighbors, pesos)
  • Usar ajuste para entrenar
  • datos de pronóstico

Selección del valor K

Si el valor de K es relativamente pequeño, significa que el objeto no clasificado está muy cerca de sus vecinos. Un problema que surge de esta manera es que si el punto vecino es un punto de ruido, la clasificación de objetos no clasificados también producirá errores, por lo que la clasificación KNN producirá sobreajuste. Para predecir la categoría a través de los datos de entrada, los datos de entrada deben estar cerca del ejemplo de entrenamiento para producir resultados. Si solo se toma un ejemplo (el valor de k es demasiado pequeño), es como practicar solo un tipo de pregunta todos los días. Cuando encuentre tipos de preguntas complejos durante el examen, se sentirá perdido. Solo recordará las plantillas que ha entrenado. Si sobreentrena un tipo de pregunta, se producirá un ajuste excesivo.
Si el valor de K es relativamente grande, significa que los puntos que están demasiado lejos también afectarán la clasificación de los objetos desconocidos. Aunque la ventaja de esta situación es una gran robustez, la desventaja también es obvia. Se verá afectado por el balance de la muestra y causará un desajuste, es decir, los objetos no clasificados no se clasificarán realmente. El valor de k es demasiado grande y la capacidad de resistir los riesgos es relativamente fuerte. Por ejemplo, cuando se prepara para un examen, puede leer todo tipo de preguntas (todo incluido), y cualquier película que ingrese verá otras similares. Los puntos de conocimiento del examen son de la escuela secundaria. Al prepararme para el examen, revisé el contenido de la escuela primaria, secundaria, preparatoria y universidad.
Use valores N K para probar de pequeño a grande, y seleccione el valor K con el mejor resultado. Las pruebas artificiales una por una serán engorrosas y se puede usar la validación cruzada. La idea de la validación cruzada es usar la mayoría de las muestras en el conjunto de muestras como conjunto de entrenamiento, y la pequeña parte restante de las muestras se usa para la predicción para verificar la precisión del modelo de clasificación. Por lo tanto, en el algoritmo KNN, generalmente seleccionamos el valor K en un rango más pequeño y, al mismo tiempo, el que tiene la mayor precisión en el conjunto de verificación finalmente se determina como el valor K.

calculo de distancia

  • Distancia euclidiana (distancia euclidiana)
  • distancia entre manhattan
  • distancia minkowski
  • distancia Chebyshev
  • distancia del coseno

distancia euclidiana

La distancia euclidiana representa la derivación de la distancia entre dos puntos. Por ejemplo, en el aula 408, un estudiante va al aula 508 de al lado. No puede pasar directamente según la distancia. La fórmula de la distancia euclidiana bidimensional es la siguiente:
}d12=( X1X2)2+( y1y2)2
La fórmula de la distancia euclidiana tridimensional derivada es la siguiente:
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2}d12=( X1X2)2+( y1y2)2+( z1z2)2
La fórmula inductiva de la distancia euclidiana N-dimensional es la siguiente:
d 12 = ∑ k = 1 n ( xi − yi ) 2 d_{12} = \sqrt{\sum_{k=1}^n(x_i-y_i)^2}d12=k = 1n( Xyoyyo)2

  • Cuando se trata del número raíz, involucrará números de coma flotante e incluso infinitos decimales de bucle infinito. Las funciones en el aprendizaje automático son generalmente de gran latitud (más allá de las 3 dimensiones), y cuando hay decimales involucrados, habrá errores, el consumo de memoria será grande y la computadora funcionará muy lentamente. Para resolver este problema, intente realizar cálculos con números enteros e introduzca la distancia de Manhattan.

distancia entre manhattan

A menudo se usa en el espacio geométrico. Por ejemplo, el estudiante a está en 408 y el estudiante b está en 512. De a a b, la cuadrícula en el medio es una pared. Es imposible tomar la línea verde de a para atravesar la pared. El objetivo final es hacer que la distancia sea la más corta. Puedes subir desde el punto a, la distancia es y 2 y_2y2 y 1 y_1 y1La diferencia, y luego caminar horizontalmente, la distancia es x 2 x_2X2y x 1 x_1X1diferencia para llegar al destino final. Encuentra la distancia entre dos puntos sumando las dos distancias.
Como se puede ver en la siguiente figura, no importa cómo camine a lo largo de la cuadrícula, la distancia entre dos puntos es cierta.
inserte la descripción de la imagen aquí

Plano bidimensional dos puntos a ( x 1 , y 1 ) a(x_1,y_1)un ( x1,y1) dadob ( x 2 , y 2 ) b(x_2,y_2)b ( x2,y2) entre las distancias de Manhattan:
d 12 = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d_{12}=| x_1-x_2 | +\mid y_1-y_2 \midd12=x1X2+y1y2
espacio n-dimensional puntoa ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n})un ( x11,X12,... ,X1 norte) dadob ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n})b ( x21,X22,... ,X2 norte) Distancia Manhattan:
d 12 = ∑ k = 1 n ( x 1 k − x 2 k ) d_{12} = {\sum_{k=1}^n(x_{1k}-x_{2k})}d12=k = 1n( X1k _X2k _)

  • La distancia de Manhattan también se conoce como geometría de taxi.Conducir en la ciudad no puede atravesar paredes, sino que solo puede seguir la ruta alrededor de la casa. Los cálculos de números enteros en grandes dimensiones solo utilizan operaciones de suma y resta, evitando el cálculo de decimales (para que no haya infinitos decimales periódicos, ni números irracionales), la velocidad de cálculo es relativamente rápida y el error es muy pequeño.

distancia Chebyshev

En el ajedrez, el rey puede ir recto, horizontal o diagonalmente, por lo que el rey puede moverse a cualquiera de los 8 cuadrados adyacentes dando un paso. Rey de celosía ( x 1 , y 1 ) (x_1,y_1)( X1,y1) a la cuadrícula( x 2 , y 2 ) (x_2,y_2)( X2,y2) ¿ Cuál es el número mínimo de pasos necesarios? Esta distancia se llama distancia de Chebyshev.
inserte la descripción de la imagen aquí
En la figura de arriba, podemos ver la distancia de 2A a 5C, puede ser de 2A a 2C (2 pasos), luego de 2C a 5C (3 pasos), o de 2A a 4C (2 pasos), y luego de 4C a 5C (1 paso). El número de pasos dados por el segundo tipo es solo el valor máximo de las dos partes del número de pasos dados en el primero.
Plano bidimensional dos puntosa ( x 1 , x 2 ) a(x_1,x_2)un ( x1,X2) dadob ( x 2 , y 2 ) b(x_2,y_2)b ( x2,y2) entre distancias Chebyshev:
d 12 = max ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) d_{12}=max(| x_1-x_2 | ,\mid y_1-y_2 \mid)d12=máximo x ( x1X2,y1y2)
espacio n-dimensional puntoa ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n})un ( x11,X12,... ,X1 norte) dadob ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n})b ( x21,X22,... ,X2 norte) Distancia de Chebyshev:
d 12 = max ( ∣ x 1 i − x 2 i ∣ ) d_{12}=max(| x_{1i}-x_{2i} | )d12=máximo x ( x1 yoX2 yo)

distancia minkowski

La distancia de estilo mínimo es un tipo de distancia entre ciudades y es una expresión general de múltiples fórmulas de medición de distancia. La distancia de Minkowski es un índice de paso, al cambiar los parámetros para reemplazar la forma límite,
dos variables n-dimensionales a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n})un ( x11,X12,... ,X1 norte) dadob ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n})b ( x21,X22,... ,X2 norte) La distancia de Minkowski de ) se define como:
d 12 = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ pp d_{12} = \sqrt[p]{\sum_{k=1}^n|x_{1k}-x_{2k}|^p}d12=pagk = 1nx1k _X2k _pag
donde p es un parámetro variable:

  • cuando p = 1 p = 1pag=Cuando 1 no existe el signo raíz, que es la distancia Manhattan;
  • cuando p = 2 p=2pag=2 es la distancia euclidiana;
  • Este p → ∞ p\to \inftypag , tome el valor máximo del límite e ignore el valor mínimo, que es la distancia de Chebyshev

distancia del coseno

La distancia del coseno en realidad calcula el ángulo entre dos vectores y calcula la diferencia entre ellos en la dirección, y no es sensible a los valores absolutos. La función sen es la razón del lado opuesto a la hipotenusa, y la función cos es la razón del lado adyacente a la hipotenusa, y se deriva la fórmula del coseno del ángulo entre los dos vectores. El coseno del ángulo incluido varía de -1 a 1, y cuanto mayor sea el coseno, menor será el ángulo incluido del vector.
Vector A en espacio bidimensional ( x 1 , y 1 ) A(x_1,y_1)un ( x1,y1) y el vectorB ( x 2 , y 2 ) B(x_2,y_2)segundo _ _2,y2) Fórmula del coseno de :
cos θ = x 1 x 2 + y 1 y 2 x 1 2 + y 1 2 x 2 2 + y 2 2 cosθ=\frac{x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}}cos θ=X12+y12 X22+y22 X1X2+y1y2
Dos puntos muestrales n-dimensionales a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n})un ( x11,X12,... ,X1 norte) dadob ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n})b ( x21,X22,... ,X2 norte) es:
cos θ = a ⋅ segundo ∣ a ∣ ∣ segundo ∣ cosθ=\frac{a \cdot b}{|a||b|}cos θ=un ∣∣ segundo asegundo
即: cos ( θ ) = ∑ k = 1 nx 1 kx 2 k ∑ k = 1 nx 1 k 2 ∑ k = 1 nx 2 k 2 cos(θ)=\frac{\sum_{k=1}^nx_{1k}x_{2k}}{\sqrt{\sum_{k=1}^nx_{1k}^2}\ sqrt{\sum_{k=1}^nx_{2k}^2}}porque ( θ )=k = 1nX1k _2 k = 1nX2k _2 k = 1nX1k _X2k _

  • La distancia del coseno también se llama similitud del coseno, que puede juzgar la correlación entre dos artículos.
    Por ejemplo, 3 personas van al supermercado a comprar artículos. Se expresa en una tabla, 1 se compra y 0 no se compra.
personal del artículo a b C d mi
A 1 1 0 0 1
B 0 1 1 0 0
C 1 0 0 0 1

La similitud entre A y B: cos ( θ ) = 1 ∗ 0 + 1 ∗ 1 + 0 ∗ 1 + 0 ∗ 0 + 1 ∗ 0 1 2 + 1 2 + 0 2 + 0 2 + 1 2 0 2 + 1 2 + 1 2 + 0 2 + 0 2 = 1 6 = 0.408 co s(θ)=\frac{ 1*0+1*1+0*1+0*0+1*0}{\sqrt{1^2+1^2+0^2+0^2+1^2}\sqrt{0^2+1^2+1^2+0^2+0^2}}=\frac{1}{\sqrt{6}}=0,408porque ( θ )=12 +12 +02 +02 +12 02 +12 +12 +02 +02 1 0 + 1 1 + 0 1 + 0 0 + 1 0=6 1=0.408

La similitud entre A y C: cos ( θ ) = 1 ∗ 1 + 1 ∗ 0 + 0 ∗ 0 + 0 ∗ 0 + 1 ∗ 1 1 2 + 1 2 + 0 2 + 0 2 + 1 2 1 2 + 0 2 + 0 2 + 0 2 + 1 2 = 2 6 = 0.816 co s(θ)=\frac{ 1*1+1*0+0*0+0*0+1*1}{\sqrt{1^2+1^2+0^2+0^2+1^2}\sqrt{1^2+0^2+0^2+0^2+1^2}}=\frac{2}{\sqrt{6}}=0,816porque ( θ )=12 +12 +02 +02 +12 12 +02 +02 +02 +12 1 1 + 1 0 + 0 0 + 0 0 + 1 1=6 2=0.816

La similitud entre B y C: cos ( θ ) = 0 ∗ 1 + 1 ∗ 0 + 1 ∗ 0 + 0 ∗ 0 + 0 ∗ 1 0 2 + 1 2 + 1 2 + 0 2 + 0 2 1 2 + 0 2 + 0 2 + 0 2 + 1 2 = 0 4 = 0 cos(θ )=\frac{0*1+ 1*0+1*0+0*0+0*1}{\sqrt{0^2+1^2+1^2+0^2+0^2}\sqrt{1^2+0^2+0^2+0^2+1^2}}=\frac{0}{\sqrt{4}}=0porque ( θ )=02 +12 +12 +02 +02 12 +02 +02 +02 +12 0 1 + 1 0 + 1 0 + 0 0 + 0 1=4 0=0

Se puede ver que la similitud entre A y C es alta, y C, que tiene una gran similitud con A, puede recomendarse de acuerdo con los artículos comprados por el usuario A.

árbol KD

Si desea predecir la categoría de datos con ubicación, encuentre los k vecinos más cercanos, calcule la distancia entre este punto y todos los vecinos, ordénelos, encuentre el k más cercano para tomar el modo y divídalos en la mayoría de las categorías. Para el caso de datos relativamente pequeños, la velocidad de cálculo es relativamente rápida. Si desea entrenar un modelo de datos, la cantidad de datos debe ser grande y luego calcular la distancia entre los datos predichos y cada vecino uno por uno. La cantidad de cálculo será particularmente grande y puede usar el árbol KD para la optimización.

El proceso de cálculo de KNN consiste en calcular la distancia entre un gran número de puntos de muestra. Para reducir el número de cálculos de distancia y mejorar la eficiencia de búsqueda de KNN, se propone un árbol KD (abreviatura de K-Dimensional). El árbol KD es una estructura de datos que divide los puntos de datos en un espacio K-dimensional. En la construcción del árbol KD, cada nodo es un árbol binario de puntos de valor k-dimensionales. Dado que es un árbol binario, puede utilizar las operaciones de adición, eliminación, modificación y consulta del árbol binario, lo que mejora en gran medida la eficiencia de la búsqueda.

  • Ejemplo 1: Hay un conjunto de datos {(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}, construya un árbol kd.
    inserte la descripción de la imagen aquí
    Los seis puntos de datos son puntos bidimensionales, presentados en ejes de coordenadas bidimensionales, y la división del árbol kd:
  • 1. Use la mediana del eje x1 como estándar de segmentación, 2, 4, 5, 7, 8, 9, ordene los números de menor a mayor, si el número es par, seleccione los dos puntos en el medio y súmelos para encontrar la mediana, (5+7)/2=6,
    • 1. (5,4) es tan cercano como (7,2) a 6, tome cualquier punto como (7,2) como el nodo raíz
    • 2. Haga una línea perpendicular al eje x1 a través de (7,2) y divida la pantalla bidimensional en partes izquierda y derecha
  • 2. Divide el área izquierda con el eje x2, encuentra la mediana y haz una línea vertical de x2,
    • 1. Hay 3 puntos en el área izquierda, los valores de x2 son 3, 4, 7 respectivamente, y el punto mediano es (5,4),
    • 2. Haga una línea perpendicular a x2 a través de (5,4), divida el área izquierda en partes superior e inferior,
    • 3. Divida el área inferior con el eje x1. Excepto por los puntos que se han convertido en nodos, solo quedan (2,3) puntos en el área inferior. Haga una línea vertical a x1 a través de (2,3).
    • 4. Divida el área superior con el eje x1. Excepto por los puntos que se han convertido en nodos, solo quedan (4,7) puntos en el área superior. Haga una línea vertical hasta x1 a través de (4,7).
    • 5. Los puntos colocados en el árbol binario son pequeños a la izquierda y grandes a la derecha, así que coloque (2,3) puntos a la izquierda y (4,7) puntos a la derecha
  • 3. Divide el área derecha con el eje x2, encuentra la mediana y haz una línea vertical de x2
    • 1. Solo quedan (8,1) y (9,6), por lo que la distancia entre la mediana y los dos puntos es la misma, y ​​se selecciona aleatoriamente un punto como nodo, como (9,6)
    • 2. Haga una línea vertical al eje x2 a través de (9,6), divida el área derecha en partes superior e inferior, y la parte superior no tiene puntos
    • 3. Encuentre la mediana de (8,1) en la segunda mitad, solo hay un punto, este punto es la mediana, y dibuje una línea vertical al eje x1 que pase por este punto, el último nodo obtenido es (8,1)
      inserte la descripción de la imagen aquí
  • Ejemplo 2, hay un punto objetivo (3,4.5), ¿cómo buscar el vecino más cercano del punto objetivo en el conjunto de datos?
    inserte la descripción de la imagen aquí
    Si calcula la distancia de cada punto, debe calcular 6 veces. Si la cantidad de datos es grande, la cantidad de cálculo aumentará. El cálculo con kd tree en sí mismo es un proceso recursivo y repetitivo.
  • 1. A juzgar por el nodo raíz (7,2), el número en el eje x1 del punto (3,4.5) es 3, 3 es menor que 7, y el lado izquierdo es un número más pequeño, y se encuentra el punto (5,4).El número en la dimensión x2 es 4, y 4.5 es mayor que 4. Buscará la dirección correcta (número más grande), encontrará el punto (4,7), y el vecino temporal más cercano es (4,7).
  • 2. Dibuje un círculo con (3,4.5) como el centro y la distancia al punto (4,7) como el radio, y obtenga un círculo azul. Obviamente (4,7) no es el vecino más cercano del punto (3,4.5). En este momento, el algoritmo necesita retroceder, tomar el punto objetivo como el centro del círculo y usar el punto adyacente temporal como el radio para hacer un círculo. El radio entre los dos puntos es 2.69
  • 3. Regrese al nodo anterior (5,4), haga un círculo con el punto objetivo como centro y el punto adyacente temporal (5,4) como radio, y el radio entre los dos puntos es 2.06
  • 4. Continúe retrocediendo hasta (2,3), tome el punto objetivo como el centro del círculo y tome el punto adyacente temporal (2,3) como el radio para hacer un círculo. El radio entre los dos puntos es 1,8 y (2,3) es el punto vecino más cercano. En este momento, no es necesario calcular la distancia desde (7,2), (9,6) y (8,1), lo que reduce la cantidad de cálculo
    .

Adquisición de conjuntos de datos

Para probar algunos algoritmos, si no está en un entorno real y carece de datos de ingeniería de características, al aprender estos modelos, puede aprender de los datos que se han procesado.

obtener función

Interfaz para obtener datos

sklearn.datasets 加载获取流行数据集
datasets.load_***() 获取小规模数据集,数据包含在datasets里
datasets.fetch_***(data_home=None) 获取大规模数据集,需要从网络上下载,
函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

inserte la descripción de la imagen aquí

conjunto de retorno

load 和 fetch 返回的数据类型(字典格式)
data:特征数据数组
target:标签数组
DESCR:数据描述
feature_names:特征名
target_names:标签名

inserte la descripción de la imagen aquí

segmentación de datos

Se necesita parte de los datos para entrenar el modelo, y parte de los nuevos datos se necesita para evaluar la calidad del modelo. Cuando los dos conjuntos de datos se superponen, el resultado será falso. Por lo tanto, los datos se dividen en conjunto de entrenamiento, conjunto de prueba y conjunto de verificación, y los datos se dividen en conjunto de entrenamiento y conjunto de prueba antes del ajuste de parámetros. El método de segmentación de datos: método de configuración, dividir los datos directamente por 28 o 37; validación cruzada de K-fold, dividir el conjunto de datos en 10 partes, usar 1 parte como conjunto de prueba a su vez, y las otras como conjunto de entrenamiento, y obtener el promedio de los resultados de 10 veces; el método de autoayuda, el conjunto de entrenamiento se extrae aleatoriamente con reemplazo. El más utilizado es el método de retención.

dejar de lado el método api

Realice con un programa, divida el conjunto de datos en 3 partes y 7 partes, use los datos seleccionados de numpy y pandas para hacerlo, encuentre la longitud total de los datos y luego córtelos, y use sklearn para hacer la división de prueba del conjunto de entrenamiento.

sklearn.model_selection.train_test_split(arrays,*options)
x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return 训练特征值,测试特征值,训练目标值,测试目标值

inserte la descripción de la imagen aquí
Los algoritmos y modelos son aleatorios. Cuando el mismo algoritmo y el mismo conjunto de datos se ejecutan varias veces, los resultados serán diferentes. Los resultados del mismo código y el mismo modelo entrenado por diferentes personas serán diferentes. La segmentación de datos también es aleatoria y el parámetro random_state se puede usar para garantizar que los resultados de cada entrenamiento sean los mismos.
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/hwwaizs/article/details/131843096
Recomendado
Clasificación