You could do standard matrix factorization but in the sparse case you would have to go through all zero entries explicitly. In other words you couldn't exploit sparsity. Also, it would require to change the code: the current code ignores the zeros, since it treats them as missing values.

Also note that we decided to have two classes: one for factorization and one for imputation. In the first, transform is used to get the low rank representation of the data. In the second, transform is used for imputation. For the imputation class, it could make sense to have an estimator constructor parameter (a matrix factorizer estimator that can handle missing values).