J'ai été de comparer la performance de plusieurs APC implémentations de Python et R, et a remarqué un comportement intéressant:
Alors qu'il semble impossible de calculer le PCA d'une matrice creuse en Python (la seule approche serait scikit-learn TruncatedSVD, mais il ne prend pas en charge la moyenne de centrage doivent être équivalent à une covariance solution pour cancer de la prostate.
Leur argumentation est, qu'il détruirait la rareté des biens de la matrice. D'autres implémentations comme Facebook PCA de l'algorithme ou de la PCA/randomPCA méthode dans scikit learn ne prennent pas en charge matrices creuses pour des raisons similaires.
Alors que tout cela fait sens pour moi, plusieurs packages R, comme irlba, rsvd, etc., sont capables de gérer les matrices creuses (par exemple, généré avec rsparsematrix
), et permettent même de spécifique center=True
arguments.
Ma question est, comment R gère en interne, comme cela semble être beaucoup plus efficace que le comparable Python de mise en œuvre. Ne R toujours maintenir la densité en faisant Absolue de mise à l'Échelle au lieu (ce qui serait théoriquement de fausser les résultats, mais, au moins, maintenir sparsity)? Ou est-il de toute façon dans laquelle la moyenne peuvent être stockées de façon explicite pour les valeurs égales à zéro, et ne sont stockées qu'une seule fois (au lieu de pour chaque valeur séparément)?
Pour se mettre en garde: Comment R en interne stocker des matrices avec une moyenne de centrage sans explosion de l'utilisation de la RAM. Espère que c'est assez concis....