31 votos

¿Por qué alguien utilizaría KNN para la regresión?

Según tengo entendido, sólo podemos construir una función de regresión que se encuentre dentro del intervalo de los datos de entrenamiento.

Por ejemplo (sólo es necesario uno de los paneles): enter image description here

¿Cómo podría predecir el futuro utilizando un regresor KNN? De nuevo, parece que sólo se aproxima a una función que se encuentra dentro del intervalo de los datos de entrenamiento.

Mi pregunta: ¿Cuáles son las ventajas de utilizar un regresor KNN? Entiendo que es una herramienta muy poderosa para la clasificación, pero parece que tendría un mal desempeño en un escenario de regresión.

22voto

Ben Puntos 239

Los métodos locales como K-NN tienen sentido en algunas situaciones.

Un ejemplo que hice en el trabajo escolar tenía que ver con la predicción de la resistencia a la compresión de varias mezclas de ingredientes de cemento. Todos estos ingredientes eran relativamente poco volátiles con respecto a la respuesta o entre sí y KNN hizo predicciones fiables en él. En otras palabras, ninguna de las variables independientes tenía una varianza desproporcionadamente grande para conferir al modelo, ya sea individualmente o posiblemente por interacción mutua.

Tómese esto con un grano de sal porque no conozco una técnica de investigación de datos que demuestre esto de forma concluyente pero intuitivamente parece razonable que si sus características tienen algún grado proporcional de varianzas, no sé qué proporción, podría tener un candidato a KNN. Ciertamente, me gustaría saber si hay algunos estudios y técnicas resultantes desarrolladas a este efecto.

Si se piensa en ello desde una perspectiva de dominio generalizado, hay una amplia clase de aplicaciones en las que "recetas" similares dan resultados similares. Esto parece describir la situación de la predicción de los resultados de la mezcla de cemento. Yo diría que si tienes datos que se comportan de acuerdo con esta descripción y además tu medida de distancia también es natural para el dominio en cuestión y, por último, que tienes suficientes datos, me imagino que deberías obtener resultados útiles de KNN u otro método local.

También se obtiene la ventaja de un sesgo extremadamente bajo cuando se utilizan métodos locales. A veces, los modelos aditivos generalizados (GAM) equilibran el sesgo y la varianza ajustando cada variable individual mediante KNN de forma que:

$$\hat{y}=f_1(x_1) + f_2(x_2) + \dots + f_n(x_n) + \epsilon$$

La parte aditiva (los símbolos más) protegen contra la alta varianza mientras que el uso de KNN en lugar de $f_n(x_n)$ protege contra un alto sesgo.

Yo no descartaría a KNN tan rápidamente. Tiene su lugar.

8voto

testestt Puntos 16

No me gusta decirlo, pero en realidad la respuesta corta es que "predecir el futuro" no es realmente posible ni con un knn ni con ningún otro clasificador o regresor existente actualmente.

Claro que puedes extrapolar la línea de una regresión lineal o el hiperplano de una SVM, pero al final no sabes cuál será el futuro, por lo que sabemos, la línea podría ser sólo una pequeña parte de una realidad curvilínea. Esto se hace evidente cuando se observan los métodos bayesianos, como los procesos gaussianos, por ejemplo, se nota una gran incertidumbre en la distribución predictiva, tan pronto como se sale del "dominio de entrada conocido".

Por supuesto, se puede intentar generalizar lo que ha ocurrido hoy a lo que probablemente ocurra mañana, lo que puede hacerse fácilmente con un regresor knn (por ejemplo, las cifras de clientes del año pasado durante la época navideña pueden dar una buena pista sobre las cifras de este año). Seguro que otros métodos pueden incorporar tendencias y demás, pero al final puedes ver lo bien que funciona cuando se trata del mercado de valores o de predicciones meteorológicas a largo plazo.

2voto

MattSayar Puntos 723

Primero un ejemplo para "¿Cómo podría predecir el futuro utilizando un regresor KNN?".

Problema: predecir las horas de luz solar mañana $sun_{t+1}$ de $sun_t .. sun_{t-6}$ en la última semana.
Datos de entrenamiento: $sun_t$ (en una ciudad) en los últimos 10 años, 3650 números.

Denote $week_t \equiv sun_t .. sun_{t-6}$ y $tomorrow( week_t )) \equiv sun_{t+1} $ .

Método: poner el 3650-impar $week_t$ curvas en un árbol k-d con k=7.
Dado un nuevo $week$ Busca sus, digamos, 10 semanas de vecindad más cercana
con su $tomorrow_0 .. tomorrow_9$ y calcular
$\qquad predict( week ) \equiv $ media ponderada de $tomorrow_0 .. tomorrow_9$

Afinar los pesos, ver por ejemplo interpolación-idw-distancia-inversa-con-python ,
y la métrica de distancia para el "vecino más cercano" en 7d.

"¿Cuáles son las ventajas de utilizar un regresor KNN?"
A los buenos comentarios de los demás Yo añadiría que es fácil de codificar y entender, y escalable a grandes datos.
Desventajas: sensible a los datos y a la puesta a punto, no mucho comprensión de .


(Larga nota a pie de página sobre la terminología:
"regresión" se utiliza como una palabra elegante para "ajustar un modelo a los datos".
Lo más habitual es ajustar los datos $X$ a un objetivo $Y$ con un modelo lineal:
$\qquad Y_t = b_0 X_t + b_1 X_{t-1} + ... $
También es común predecir el precio de las acciones de mañana $Y_{t+1}$ de los precios de la última semana o del último año:
$\qquad Y_{t+1} = a_0 Y_t + a_1 Y_{t-1} + ... $
Los pronosticadores llaman a esto un ARMA, Modelo autorregresivo de media móvil o Modelo autorregresivo . Ver también Análisis de regresión .

Así que su primera línea "sólo podemos construir una función de regresión que se encuentre dentro del intervalo de los datos de entrenamiento" parece referirse a la confusa palabra "regresión").

2voto

Kavon Farvardin Puntos 782

De Introducción al aprendizaje estadístico , sección 3.5:

En una situación de la vida real en la que se desconoce la verdadera relación, se podría llegar a la conclusión de que se debería favorecer el KNN frente a la regresión lineal porque, en el peor de los casos, será ligeramente inferior a la regresión lineal si la verdadera relación es lineal, y puede dar resultados sustancialmente mejores si la verdadera relación es no lineal.

Pero hay limitaciones (no del libro de texto, sólo lo que concluí):

  1. un número suficiente de observaciones por predictor.
  2. el número de predictores no debe ser demasiado grande.

2voto

Hangyu Tian señala que la regresión k-NN no funcionará bien cuando no haya suficientes datos y que métodos como la regresión lineal, que hacen suposiciones más fuertes, pueden superar a la k-NN. Sin embargo, lo sorprendente de k-NN es que se pueden codificar todo tipo de supuestos interesantes utilizando diferentes pesos. Por ejemplo, si se normalizan los datos y se utiliza $k(x, x')=x \cdot x'$ como el peso entre $x$ y $x'$ para todos $x, x'$ en sus datos, ¡eso sí que se aproximará a una regresión lineal a la vieja usanza! Por supuesto, sería innecesariamente lento en comparación con otros métodos de regresión lineal, pero la cuestión es que en realidad tiene mucha flexibilidad. Como referencia, esto se llama el núcleo lineal.

He jugado con el cuaderno que ha generado las fotos que has adjuntado. No veo mucha razón para hacer la regresión k-NN con pesos uniformes o de distancia como muestra ese ejemplo. Así que lo cambié para usar pesos RBF. Esto significa que será como scipy.interpolate.Rbf excepto que sólo estamos mirando a los vecinos más cercanos. Obviamente, mirar a los k vecinos más cercanos no mejora la precisión, pero puede ser esencial para el rendimiento cuando se tiene un gran conjunto de datos. También he aumentado el número de vecinos a 10. Además, creo que deberías comparar con la función verdadera en lugar de con los datos ruidosos. Nuestro objetivo es aproximar la función verdadera e ignorar todo el ruido. Además, para tener una línea de base que comparó con CubicSpline. También estoy usando 80 ejemplos en lugar de sólo 40. He jugado con diferentes límites en el eje del tiempo porque eso afecta a la densidad, que es un factor importante para el rendimiento de cualquier método k-NN. La interpolación k-NN funciona bastante bien aunque cambie los límites del eje. Normalmente se acerca más a la función original que los datos originales. Así que yo que este ejemplo en particular sólo necesitaba un poco de trabajo en él. De todos modos, la razón en general para el uso de k-NN nada es que es más rápido que mirar a todo el conjunto de datos. Así que la regresión basada en k-NN será más escalable que un proceso gaussiano. También es muy simple, intuitivo y predecible. Puedes ver en la imagen adjunta que el spline cúbico muestra un comportamiento extraño en ciertas áreas. Las redes neuronales también son relativamente impredecibles. Otra gran diferencia entre la interpolación k-NN y los métodos como el spline cúbico es que la interpolación k-NN no trata de ajustarse a los datos perfectamente porque sabemos que los datos tienen ruido. enter image description here enter image description here

También podemos ver que k-NN mejora con más datos. Mientras tanto, el spline cúbico empieza a actuar como un loco y los procesos gaussianos empiezan a ser demasiado lentos.

Aquí utilizamos el doble de datos. enter image description here

Creo que la moraleja de la historia es que k-NN puede hacer cosas muy diferentes dependiendo de cómo defina sus distancias y pesos. En realidad, incluso se podría utilizar k-NN con kernel polinómico para interpolar polinomios como hicimos con el spline cúbico. O como la función subyacente aquí es el pecado tendría más sentido utilizar el kernel periódico. Para más información vea el libro de cocina del kernel https://www.cs.toronto.edu/~duvenaud/cookbook/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X