El enfoque general para seleccionar un núcleo óptimo (ya sea el tipo de núcleo o los parámetros del núcleo) en cualquier método basado en el núcleo es la validación cruzada. Vea aquí la discusión sobre la selección de kernel para máquinas de vectores de soporte: ¿Cómo seleccionar kernel para SVM?
La idea detrás de la validación cruzada es que omitimos algunos datos de "prueba", ejecutamos nuestro algoritmo para ajustar el modelo a los datos restantes de "entrenamiento" y luego verificamos qué tan bien el modelo resultante describe los datos de prueba (y qué tan grande es el error es). Esto se repite para diferentes datos omitidos, los errores se promedian para formar un error de validación cruzada promedio, y luego se pueden comparar diferentes algoritmos para elegir uno que produzca el error más bajo. En SVM se puede usar, por ejemplo, la precisión de clasificación (o medidas relacionadas) como la medida del rendimiento del modelo. Luego, se seleccionaría un núcleo que produzca la mejor clasificación de los datos de prueba.
La pregunta es: ¿qué medida del rendimiento del modelo se puede usar en kPCA? Si desea lograr una "buena separación de datos" (presumiblemente una buena separación de clases), puede medirla de alguna manera en los datos de capacitación y usarla para encontrar el mejor núcleo. Nótese, sin embargo, que la ACP / KPCA no están diseñados para producir una buena separación de datos (no aceptan etiquetas de clase en cuenta en absoluto ). En términos generales, uno querría otra medida del rendimiento del modelo, no relacionada con la clase.
En PCA estándar, se puede usar el error de reconstrucción como la medida de rendimiento en el conjunto de prueba. En el PCA del núcleo también se puede calcular el error de reconstrucción, pero el problema es que no es comparable entre los diferentes núcleos: el error de reconstrucción es la distancia medida en el espacio de la característica objetivo; y diferentes núcleos corresponden a diferentes espacios de destino ... Entonces tenemos un problema.
Una forma de abordar este problema es calcular de alguna manera el error de reconstrucción en el espacio original, no en el espacio objetivo. Obviamente, el punto de datos de prueba omitido vive en el espacio original. Pero su reconstrucción kPCA vive en el [subespacio de baja dimensión] del espacio objetivo. Sin embargo, lo que se puede hacer es encontrar un punto ("imagen previa") en el espacio original que se mapearía lo más cerca posible de este punto de reconstrucción, y luego medir la distancia entre el punto de prueba y esta imagen previa como error de reconstrucción.
No daré todas las fórmulas aquí, sino que lo remitiré a algunos documentos y solo insertaré aquí varias figuras.
La idea de "preimagen" en kPCA aparentemente se introdujo en este documento:
- Mika, S., Schölkopf, B., Smola, AJ, Müller, KR, Scholz, M. y Rätsch, G. (1998). Kernel PCA y eliminación de ruido en espacios de características . En NIPS (Vol. 11, pp. 536-542).
Mika y col. no realizan validación cruzada, pero necesitan preimágenes para fines de eliminación de ruido, consulte esta figura:
Los puntos desnudos (gruesos) son imágenes previas de las proyecciones de kPCA (no hay prueba ni capacitación aquí). No es una tarea trivial encontrar estas imágenes previas: uno necesita usar el descenso de gradiente, y la función de pérdida dependerá del núcleo.
Y aquí hay un artículo muy reciente que utilizó imágenes previas para fines de validación cruzada y selección de kernel / hyperparameter:
Este es su algoritmo:
Y aquí hay algunos resultados (que creo que se explican por sí mismos):