奇异值分解
内容
实时笔记本
你可以在 live session 中运行此笔记本,或查看 on Github。
奇异值分解¶
本笔记本介绍了 da.linalg.svd
算法,用于奇异值分解。
启动 Dask 客户端以使用仪表板¶
启动 Dask 客户端是可选的。它将提供一个仪表板,这对于深入了解计算非常有用。
当你在下方创建客户端后,仪表板的链接将会变得可见。我们建议在使用笔记本的另一侧屏幕上打开它。虽然安排窗口可能需要一些努力,但在学习时同时看到两者非常有用。
[ ]:
from dask.distributed import Client, progress
client = Client(processes=False, threads_per_worker=4,
n_workers=1, memory_limit='2GB')
client
计算高瘦矩阵的奇异值分解¶
对于许多应用来说,提供的矩阵有比列更多的行。在这种情况下,可以使用专门的算法。
[ ]:
import dask.array as da
X = da.random.random((200000, 100), chunks=(10000, 100)).persist()
[ ]:
import dask
u, s, v = da.linalg.svd(X)
dask.visualize(u, s, v)
[ ]:
v.compute()
使用近似算法计算一般非瘦矩阵的SVD¶
当列中也有很多块时,我们使用一种近似的随机算法来仅收集少数奇异值和向量。
[ ]:
import dask.array as da
X = da.random.random((10000, 10000), chunks=(2000, 2000)).persist()
[ ]:
import dask
u, s, v = da.linalg.svd_compressed(X, k=5)
dask.visualize(u, s, v)
[ ]:
v.compute()