Загальний підхід до вибору оптимального ядра (або типу ядра, або параметрів ядра) у будь-якому методі на основі ядра є перехресною валідацією. Дивіться тут для обговорення вибору ядра для векторів підтримки: Як вибрати ядро для SVM?
Ідея перехресної перевірки полягає в тому, що ми залишаємо деякі "тестові" дані, запускаємо наш алгоритм, щоб відповідати моделі на інші "навчальні" дані, а потім перевіряємо, наскільки добре отримана модель описує дані тесту (і наскільки велика помилка є). Це повторюється для різних залишених даних, усереднюються помилки, утворюючи середню перекреслену помилку, а потім можна порівняти різні алгоритми, щоб вибрати один, який дасть найменшу помилку. У SVM можна використовувати, наприклад, точність класифікації (або пов'язані з нею заходи) як міру продуктивності моделі. Тоді слід вибрати ядро, яке дає найкращу класифікацію тестових даних.
Тоді виникає питання: який показник продуктивності моделі можна використовувати в kPCA? Якщо ви хочете досягти "хорошого розділення даних" (імовірно, хорошого розділення класів), то ви можете якось виміряти це на даних тренувань і використовувати це, щоб знайти найкраще ядро. Однак слід зазначити, що PCA / KPCA не призначені для отримання хорошого розділення даних (вони не приймають клас етикетки до уваги на всіх ). Отже, загалом кажучи, хотілося б іншого, не пов'язаного з класом, показника продуктивності моделі.
У стандартній PCA можна використовувати помилку відновлення як показник продуктивності тестового набору. У PCA ядра також можна обчислити помилку відновлення, але проблема полягає в тому, що вона не порівнянна між різними ядрами: помилка відновлення - це відстань, виміряна в цільовому просторі функції; а різні ядра відповідають різним цільовим просторам ... Отже, у нас проблема.
Один із способів вирішити цю проблему - якось обчислити помилку відновлення у вихідному просторі, а не в цільовому просторі. Очевидно, що залишена тестова точка даних живе у вихідному просторі. Але його реконструкція kPCA живе в [низькомірному підпросторі] цільового простору. Однак можна знайти точку ("попереднє зображення") в початковому просторі, яка буде відображена якнайближче до цієї точки відновлення, а потім виміряти відстань між тестовою точкою та цим попереднім зображенням як помилка відновлення.
Я не дам тут усіх формул, а натомість посилаюсь на деякі документи і вставте сюди лише кілька фігур.
Ідея "попереднього зображення" в kPCA, очевидно, була представлена в цій роботі:
- Mika, S., Schölkopf, B., Smola, AJ, Müller, KR, Scholz, M., & Rätsch, G. (1998). Ядро PCA та знешкодження у просторах функцій . В НІПС (т. 11, с. 536-542).
Міка та ін. не роблять перехресну перевірку, але їм потрібні попередні зображення для знемахування, див. цей малюнок:
Позначені (товсті) точки є попередніми зображеннями проекцій kPCA (тестування та навчання тут немає). Пошук цих попередніх зображень не є тривіальним завданням: потрібно використовувати градієнтне спускання, а функція втрати залежатиме від ядра.
І ось недавній документ, який використовував попередні зображення для цілей перехресної перевірки та вибору ядра / гіперпараметра:
Це їх алгоритм:
Ось декілька результатів (які, на мою думку, є досить зрозумілими):