Якщо розмірність ваших зразків менша за розмірність векторного простору, можуть виникати сингулярні матриці. Якщо у вас менше зразків, ніж (коли - ваша розмірність), така ситуація навіть обов'язково виникне: проби охоплюють щонайменше мірну гіперплану. З огляду на такий невеликий зразок, ви, очевидно, не можете обчислити дисперсію в ортогональному просторі.d+1dk+1d
Ось чому зазвичай не використовувати буквальний PCA, а замість цього виконувати сингулярне розкладання значення , яке можна використовувати для обчислення псевдоінверсії матриці. Якщо матриця є зворотною, псевдоінверс буде оберненим.
Однак, якщо ви бачите неперевернуті матриці, велика ймовірність, що ваша відстань від кластера буде безглуздою, якщо вектор знаходиться поза гіперпланом, кластер відкидається, оскільки ви не знаєте дисперсії в ортогональному просторі (ви можете думати про ця дисперсія як 0!) SVD може обчислити псевдоінверс, але "відхилення" все одно не визначатимуться вашими даними.
У цьому випадку вам, мабуть, слід було б спочатку зробити глобальне зменшення розмірності. Збільшення розміру вибірки допоможе лише тоді, коли ви насправді маєте не надмірні розміри: незалежно від того, скільки зразків ви отримаєте з розподілів з , матриця завжди буде незворотною, і ви не зможете судити про відхилення щодо стандартного відхилення (яке дорівнює 0).y=xx−y
Крім того, залежно від способу обчислення матриці коваріації, ви можете зіткнутися з числовими проблемами через катастрофічне скасування. Найпростіший спосіб вирішення - це завжди спочатку центрировать дані, щоб отримати нульове значення.