Для вибору оптимальної кількості прихованих факторів при негативній матричній факторизації використовуйте перехресну перевірку.
Як ви писали, мета NMF - знайти низькі розміри W і H з усіма негативними елементами, мінімізуючи помилку відновлення ∥V−WH∥2 . Уявіть, що ми залишаємо один елемент V , наприклад Vab , і виконуємо NMF отриманої матриці з однією відсутнім осередком. Це означає, що знаходять W і H мінімізуючи помилку відновлення для всіх відсутніх комірок:
∑ij≠ab(Vij−[WH]ij)2.
Після цього ми можемо передбачити лівий елемент Vab , обчисливши [WH]ab і обчислити помилку передбачення
eab=(Vab−[WH]ab)2.
Можна повторити цю процедуру, виключаючи по черзі всі елементи
Vab , і підсумовувати помилки передбачення для всіх
a і
b . Це призведе до загального значення PRESS (передбачувана залишкова сума квадратів)
E(k)=∑abeab що буде залежати від
k . Сподіваємось, функція
E(k) матиме мінімум, який можна використовувати як "оптимальний"
k .
Зауважте, що це може бути обчислювально дорогим, оскільки NMF повинен бути повторений для кожного випущеного значення, а також може бути складним у програмі (залежно від того, наскільки легко виконати NMF з відсутніми значеннями). У PCA можна обійти це, залишивши повні рядки V (що значно прискорює обчислення), дивіться мою відповідь у розділі Як виконати перехресну перевірку для PCA для визначення кількості основних компонентів? , але це неможливо тут.
Звичайно, тут застосовуються всі звичні принципи перехресної перевірки, тож ви можете залишити безліч осередків одночасно (замість лише однієї) та / або повторити процедуру лише для деяких випадкових комірок замість того, щоб перекидатись на всі комірки. Обидва підходи можуть допомогти прискорити процес.
Редагувати (березень 2019 р.): Дивіться це дуже приємне ілюстроване написання @AlexWilliams : http://alexhwilliams.info/itsneuronalblog/2018/02/26/crossval . Алекс використовує https://github.com/kimjingu/nonnegfac-python для NMF з відсутніми значеннями.