Al hacer kNN, debe tener en cuenta una cosa, a saber, que no es un algoritmo estrictamente derivado matemáticamente, sino un simple clasificador / regresor basado en una intuición: la función subyacente no cambia mucho cuando los argumentos no cambian mucho. O en otras palabras, la función subyacente es localmente casi constante. Con este supuesto, puede estimar el valor de la función subyacente en cualquier punto dado, por una media (posiblemente ponderada) de los valores de los k puntos más cercanos.
Teniendo esto en cuenta, puede darse cuenta de que no hay un imperativo claro sobre qué hacer cuando no hay un ganador claro en la votación por mayoría. Siempre puede usar una k impar, o usar una ponderación inyectiva.
En el caso de que los vecinos 3 a 5 estén a la misma distancia del punto de interés, puede usar solo dos o usar los 5. Nuevamente, tenga en cuenta que kNN no es un algoritmo derivado de un análisis matemático complejo, sino solo un intuición simple Depende de usted cómo quiere lidiar con esos casos especiales.
1El | El | x-yEl | El |2
También ha habido un buen artículo de Samory Kpotufe y Abdeslam Boularias este año sobre NIPS tocando el tema de encontrar la ponderación correcta. Su intuición general es que la función subyacente varía de manera diferente en diferentes direcciones (es decir, sus diferentes derivadas parciales son de diferente magnitud), por lo tanto, sería aconsejable cambiar en algún sentido las métricas / ponderaciones de acuerdo con esta intuición. Afirman que este truco generalmente mejora el rendimiento de kNN y la regresión del núcleo, y creo que incluso tienen algunos resultados teóricos para respaldar esta afirmación (aunque no estoy seguro de qué afirman realmente esos resultados teóricos, no tuve tiempo para ir a través de todo el documento todavía). El documento se puede descargar de forma gratuita desde sus sitios o después de buscar en Google "Gradient Weights ayuda a los regresores no paramétricos".
Ahora, probablemente querrá saber cómo puede encontrar la k, la métrica, la ponderación y la acción correctas para realizar cuando hay sorteos, etc. Lo triste es que, básicamente, es difícil llegar a los hiperparámetros correctos después de pensarlo profundamente, probablemente necesitará probar diferentes grupos de hiperparámetros y ver cuáles funcionan bien en algún conjunto de validación. Si tiene algunos recursos computacionales y desea llegar automáticamente a los parámetros correctos en un buen conjunto de hiperparámetros, existe una idea reciente (que me gusta mucho) de utilizar procesos gaussianos para la optimización sin derivaciones en ese entorno.
Permítanme explicarlo: encontrar el conjunto de hiperparámetros (es decir, que minimizan el error en los datos de validación) puede verse como un problema de optimización. Desafortunadamente, en esta configuración no podemos obtener el gradiente de la función que intentamos optimizar (que es lo que generalmente queremos hacer, realizar el descenso del gradiente o algunos métodos más avanzados). Los procesos gaussianos se pueden utilizar en esta configuración, para encontrar conjuntos de hiperparámetros, que tienen grandes posibilidades, de desempeñarse mejor que los mejores que hemos encontrado hasta el momento. Por lo tanto, puede ejecutar el algoritmo de forma iterativa con algún conjunto de hiperparámetros, luego preguntar en el proceso gaussiano cuáles serían los mejores para probar a continuación, probar esos, y así sucesivamente.
Para más detalles, busque el documento "Optimización práctica bayesiana de algoritmos de aprendizaje automático" de Jasper Snoek, Hugo Larochelle y Ryan P Adams (que también se puede encontrar en sus sitios web o en Google).