matriz escasa svd en python

¿Alguien sabe cómo realizar la operación de svd en una matriz dispersa en python? Parece que no hay tal funcionalidad en scipy.sparse.linalg.

Puedes usar la biblioteca de Divisi para lograr esto; desde la página de inicio:

  • Es una biblioteca escrita en Python, que utiliza una biblioteca C (SVDLIBC) para realizar la operación SVD dispersa utilizando el algoritmo de Lanczos. Otros cálculos matemáticos son realizados por NumPy.

¡Suena como sparsesvd es lo que estás buscando! SVDLIBC se envuelve de manera eficiente en Python (no se hacen copias de datos adicionales en la RAM).

Simplemente ejecute “easy_install sparsesvd” para instalar.

Puede probar scipy.sparse.linalg.svd , aunque la documentación sigue siendo un trabajo en progreso y, por lo tanto, bastante lacónica.

Un ejemplo simple usando python-recsys library:

from recsys.algorithm.factorize import SVD svd = SVD() svd.load_data(dataset) svd.compute(k=100, mean_center=True) ITEMID1 = 1 # Toy Story svd.similar(ITEMID1) # Returns: # [(1, 1.0), # Toy Story # (3114, 0.87060391051018071), # Toy Story 2 # (2355, 0.67706936677315799), # A bug's life # (588, 0.5807351496754426), # Aladdin # (595, 0.46031829709743477), # Beauty and the Beast # (1907, 0.44589398718134365), # Mulan # (364, 0.42908159895574161), # The Lion King # (2081, 0.42566581277820803), # The Little Mermaid # (3396, 0.42474056361935913), # The Muppet Movie # (2761, 0.40439361857585354)] # The Iron Giant ITEMID2 = 2355 # A bug's life svd.similarity(ITEMID1, ITEMID2) # 0.67706936677315799