¿Cómo elegir un kernel para kernel PCA?

12

¿Cuáles son las formas de elegir qué núcleo daría lugar a una buena separación de datos en la salida de datos final por el núcleo PCA (análisis de componentes principales), y cuáles son las formas de optimizar los parámetros del núcleo?

Los términos simples, si es posible, serían muy apreciados, y los enlaces a documentos que explican tales métodos también serían buenos.

Cebollín
fuente
1
Cuando dices "buena separación de datos", ¿a qué te refieres exactamente? ¿Qué aplicación de kernel PCA tienes en mente? Si tiene algo que ver con la "separación de datos", entonces ¿deberías estar usando alguna técnica de clasificación (como la máquina de vectores de soporte del núcleo) en lugar de kPCA? Aparte de todo eso, buena pregunta, +1. No tengo experiencia con la elección del núcleo, así que no puedo ayudarlo aquí.
ameba dice Reinstate Monica
@amoeba Se debe utilizar para la reducción de dimensionalidad no lineal. Mi conocimiento sobre vectores de soporte es un poco limitado porque nunca he tomado ningún curso de CS; Soy estudiante universitario y he estado aprendiendo a través de documentos en línea. Por "buena separación de datos" me refiero a lo que se muestra en los ejemplos trazados en este documento . Estoy trabajando con Matlab y mi código PCA de kernel está en funcionamiento para kernels simples, poli, radiales y sigmoides, pero sería útil saber cuándo usar cuál para obtener los mejores resultados.
Cebollino
Creo que la mejor (¿solo?) Forma de seleccionar un núcleo es usar validación cruzada, vea aquí: ¿Cómo seleccionar el núcleo para SVM? Solo necesita tener una medida de rendimiento para su kPCA para usar la validación cruzada. Separación de clases puede ser una medida decente si eso es lo que está después, pero tenga en cuenta que la ACP / KPCA no está diseñado en absoluto para dar lugar a una separación de clases bien; simplemente está maximizando la varianza capturada.
ameba dice Reinstate Monica
Leí un poco y podría responder tu pregunta después de todo. Pero podría llevarme algo de tiempo (días).
ameba dice Reinstate Monica
@amoeba Maximizar la variación tiene sentido para mí ahora que lo mencionas. Yo mismo investigaré la validación cruzada, ¡pero sería genial si pudieras investigar un poco también si puedes encontrar el tiempo! Gracias.
Cebollino

Respuestas:

7

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 y col. no realizan validación cruzada, pero necesitan preimágenes para fines de eliminación de ruido, consulte esta figura:

kPCA que elimina el ruido de Mika et al.

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:

Alam y Fukumizu

Y aquí hay algunos resultados (que creo que se explican por sí mismos):

Alam y Fukumizu

ameba dice reinstalar Monica
fuente
1
(+1) Puede ser útil notar que esta imagen previa es el conjunto de medios de Fréchet / Karcher de los puntos asignados a un grupo dado, no que eso necesariamente ayude con algo.
Dougal
@Dougal: wow, gracias, no estaba al tanto de este término. Pero no estoy seguro de entender. Considere la primera Figura que publiqué aquí (de Mika et al.): Cada punto 2d se asigna al espacio de PC de núcleo unidimensional que luego se asigna nuevamente a la imagen previa 2d . Cuando dice que la imagen previa es el "conjunto de medios de Frechet / Karcher de los puntos asignados a un grupo dado", ¿qué quiere decir con grupo y por qué hay un conjunto? x y y z zxxyyzz
ameba dice Reinstate Monica
Pensándolo bien, supongo que no presté suficiente atención antes; mi comentario se aplica al kernel k-means, no kPCA. La preimagen definitivamente está relacionada con ese concepto, pero no es lo mismo en absoluto. Perdón por el ruido. :)
Dougal