Разреженный PCA — это алгоритм поиска разреженной декомпозиции (компоненты имеют ограничение разреженности) для плотных данных.
Если вы хотите использовать обычный PCA для разреженных данных, вам следует использовать sklearn.decomposition.RandomizedPCA
, который реализует масштабируемый приближенный метод, который работает как с разреженными, так и с плотными данными.
IIRC sklearn.decomposition.PCA
в настоящее время работает только с плотными данными. Поддержка разреженных данных может быть добавлена в будущем путем делегирования вычислений SVD в матрице разреженных данных, например, arpack.
Изменить: как отмечено в комментариях, разреженный ввод для RandomizedPCA
устарел: вместо этого вы должны использовать sklearn.decomposition.TruncatedSVD
, который делает именно то, что RandomizedPCA
раньше делал с разреженными данными, но в первую очередь не должен был называться PCA.< /удалить>
Для пояснения: PCA математически определяется как центрирование данных (удаление среднего значения для каждого признака) и последующее применение усеченного SVD к центрированным данным.
Поскольку центрирование данных разрушило бы разреженность и привело бы к плотному представлению, которое часто больше не помещается в памяти, обычно выполняется прямое усечение SVD на разреженных данных (без центрирования). Это похоже на PCA, но это не совсем то же самое. Это реализовано в scikit-learn как sklearn.decomposition.TruncatedSVD
.
Изменить (март 2019 г.). В настоящее время ведется работа по реализации PCA для разреженных данных с неявным центрированием: https://github.com/scikit-learn/scikit-learn/pull/12841
person
ogrisel
schedule
21.08.2012