Если размерность ваших выборок меньше размерности векторного пространства, могут возникнуть сингулярные матрицы. Если у вас меньше выборок, чем (когда - ваша размерность), такая ситуация даже обязательно возникнет: выборок охватывает не более мерной гиперплоскости. Учитывая такую небольшую выборку, вы, очевидно, не можете вычислить дисперсию в ортогональном пространстве.d+1dk+1d
Вот почему обычно не использовать буквальный PCA, а вместо этого выполнять разложение по сингулярным значениям , которое можно использовать для вычисления псевдообратной матрицы. Если матрица обратима, псевдообратная обратная будет.
Однако, если вы видите необратимые матрицы, есть вероятность, что ваше расстояние от кластера будет бессмысленным, если вектор находится за пределами гиперплоскости, которую повторяет кластер, потому что вы не знаете дисперсию в ортогональном пространстве (вы можете думать о эта дисперсия равна 0!) SVD может вычислить псевдообратное значение, но «дисперсии» все равно не будут определяться вашими данными.
В этом случае вам, вероятно, следовало сначала сделать глобальное уменьшение размерности. Увеличение размера выборки поможет только тогда, когда у вас действительно есть не избыточные измерения: независимо от того, сколько выборок вы берете из распределений с , матрица всегда будет необратимой, и вы не сможете судить об отклонении относительно стандартного отклонения (которое равно 0).y=xx−y
Кроме того, в зависимости от того, как вы вычисляете ковариационную матрицу, вы можете столкнуться с числовыми проблемами из-за катастрофической отмены. Самый простой обходной путь - сначала всегда центрировать данные, чтобы получить нулевое среднее.