Як вибрати ядро ​​для PCA ядра?


13

Які способи вибрати, яке ядро ​​призведе до гарного поділу даних у кінцевому виведенні даних за допомогою PCA ядра (аналіз основних компонентів), і які способи оптимізації параметрів ядра?

Якщо можливо, умови Лаймана були б дуже вдячні, і посилання на документи, що пояснюють такі методи, також були б непоганими.


1
Коли ви говорите "добре розділення даних", що саме ви маєте на увазі? Яке застосування PCA ядра у вас є на увазі? Якщо це має щось спільне з "розділенням даних", то, можливо, ви повинні використовувати якусь методику класифікації (наприклад, векторну машину підтримки ядра) замість kPCA? Крім усього цього, гарне запитання, +1. Я не маю досвіду з вибором ядра, тому не можу вам тут допомогти.
амеба

@amoeba Це використовується для зменшення нелінійного розмірності. Мої знання щодо векторів підтримки трохи обмежені, тому що я ніколи не брав жодних курсів CS; Я магістр і навчаюсь через онлайн-документи. Під «хорошим розділенням даних» я маю на увазі те, що показано наведеними прикладами у цій роботі . Я працюю з Matlab, і мій PCA-код ядра працює і працює для простих, полі, радіальних і сигмоподібних ядер, але було б корисно знати, коли використовувати для досягнення найкращих результатів.
Цибуля

Я думаю, що найкращим (єдиним?) Способом вибору ядра є використання перехресної перевірки, дивіться тут: Як вибрати ядро ​​для SVM? Для використання крос-валідації потрібно мати лише показник продуктивності для вашого КПК. Розмежування класів може бути гідною мірою, якщо ви цього хочете, але зауважте, що PCA / kPCA зовсім не розроблений для того, щоб привести до хорошого розділення класів; це просто максимізація відзнятої дисперсії.
амеба

Я почитав і, можливо, зможу відповісти на ваше запитання. Але це може зайняти у мене деякий час (дні).
амеба

@amoeba Максимізація дисперсії має для мене сенс зараз, коли ви це згадуєте. Я сам розглядаю перехресну валідацію, але було б чудово, якби ви могли трохи поглянути на це, якщо зможете знайти час! Дякую.
Цибуля

Відповіді:


8

Загальний підхід до вибору оптимального ядра (або типу ядра, або параметрів ядра) у будь-якому методі на основі ядра є перехресною валідацією. Дивіться тут для обговорення вибору ядра для векторів підтримки: Як вибрати ядро ​​для SVM?

Ідея перехресної перевірки полягає в тому, що ми залишаємо деякі "тестові" дані, запускаємо наш алгоритм, щоб відповідати моделі на інші "навчальні" дані, а потім перевіряємо, наскільки добре отримана модель описує дані тесту (і наскільки велика помилка є). Це повторюється для різних залишених даних, усереднюються помилки, утворюючи середню перекреслену помилку, а потім можна порівняти різні алгоритми, щоб вибрати один, який дасть найменшу помилку. У SVM можна використовувати, наприклад, точність класифікації (або пов'язані з нею заходи) як міру продуктивності моделі. Тоді слід вибрати ядро, яке дає найкращу класифікацію тестових даних.

Тоді виникає питання: який показник продуктивності моделі можна використовувати в kPCA? Якщо ви хочете досягти "хорошого розділення даних" (імовірно, хорошого розділення класів), то ви можете якось виміряти це на даних тренувань і використовувати це, щоб знайти найкраще ядро. Однак слід зазначити, що PCA / KPCA не призначені для отримання хорошого розділення даних (вони не приймають клас етикетки до уваги на всіх ). Отже, загалом кажучи, хотілося б іншого, не пов'язаного з класом, показника продуктивності моделі.

У стандартній PCA можна використовувати помилку відновлення як показник продуктивності тестового набору. У PCA ядра також можна обчислити помилку відновлення, але проблема полягає в тому, що вона не порівнянна між різними ядрами: помилка відновлення - це відстань, виміряна в цільовому просторі функції; а різні ядра відповідають різним цільовим просторам ... Отже, у нас проблема.

Один із способів вирішити цю проблему - якось обчислити помилку відновлення у вихідному просторі, а не в цільовому просторі. Очевидно, що залишена тестова точка даних живе у вихідному просторі. Але його реконструкція kPCA живе в [низькомірному підпросторі] цільового простору. Однак можна знайти точку ("попереднє зображення") в початковому просторі, яка буде відображена якнайближче до цієї точки відновлення, а потім виміряти відстань між тестовою точкою та цим попереднім зображенням як помилка відновлення.

Я не дам тут усіх формул, а натомість посилаюсь на деякі документи і вставте сюди лише кілька фігур.

Ідея "попереднього зображення" в kPCA, очевидно, була представлена ​​в цій роботі:

Міка та ін. не роблять перехресну перевірку, але їм потрібні попередні зображення для знемахування, див. цей малюнок:

kPCA знеструмлення від Mika et al.

Позначені (товсті) точки є попередніми зображеннями проекцій kPCA (тестування та навчання тут немає). Пошук цих попередніх зображень не є тривіальним завданням: потрібно використовувати градієнтне спускання, а функція втрати залежатиме від ядра.

І ось недавній документ, який використовував попередні зображення для цілей перехресної перевірки та вибору ядра / гіперпараметра:

Це їх алгоритм:

Алам і Фукумізу

Ось декілька результатів (які, на мою думку, є досить зрозумілими):

Алам і Фукумізу


1
(+1) Може бути корисним зауважити, що це попереднє зображення - це набір засобів Фреше / Каршера точок, присвоєних даному кластеру, не те, що обов'язково допомагає у чомусь.
Дугал

@Dougal: Нічого, дякую, я взагалі не знав цього терміна. Але я не впевнений, що розумію. Розглянемо перший малюнок, який я розмістив тут (від Міка та ін.): Кожна 2d точка відображається в 1-мірний простір ядра ПК який потім відображається назад до 2-го попереднього зображення . Коли ви говорите, що попереднє зображення - це "набір засобів Frechet / Karcher від точок, присвоєних даному кластеру", що ви розумієте під кластером, і чому існує набір? x y y z zxxyyzz
амеба

З другої думки, я думаю, я раніше не приділяв достатньої уваги; мій коментар стосується k-засобів ядра, а не kPCA. Зображення, безумовно, пов'язане з цією концепцією, але зовсім не те саме. Вибачте за шум. :)
Дугал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.