交互式 Notebook

您可以在 交互式会话 中运行此 notebook Binder,或在 Github 上查看

奇异值分解

本 notebook 介绍了用于奇异值分解的 da.linalg.svd 算法

启动 Dask Client 以查看仪表板

启动 Dask Client 是可选的。它将提供一个仪表板,有助于了解计算过程。

仪表板链接将在您创建 client 后显示。我们建议您在一侧屏幕打开仪表板,同时在另一侧使用 notebook。这可能需要一些精力来排列窗口,但同时查看两者对于学习非常有帮助。

[1]:
from dask.distributed import Client, progress
client = Client(processes=False, threads_per_worker=4,
                n_workers=1, memory_limit='2GB')
client
[1]:

Client

Client-8ad1cc86-0de1-11ed-a4f6-000d3a8f7959

连接方法: Cluster 对象 集群类型: distributed.LocalCluster
仪表板: http://10.1.1.64:8787/status

集群信息

计算高瘦矩阵的 SVD

对于许多应用,提供的矩阵行数远多于列数。在这种情况下,可以使用专门的算法。

[2]:
import dask.array as da

X = da.random.random((200000, 100), chunks=(10000, 100)).persist()
[3]:
import dask

u, s, v = da.linalg.svd(X)
dask.visualize(u, s, v)
[3]:
../_images/machine-learning_svd_5_0.png
[4]:
v.compute()
[4]:
array([[ 0.09994831,  0.10007229,  0.09997617, ...,  0.09995264,
         0.09995591,  0.09984163],
       [ 0.05585195, -0.06184545, -0.04747733, ..., -0.06275421,
        -0.2061527 ,  0.18218227],
       [ 0.01277435,  0.00484692, -0.04387551, ...,  0.00444605,
         0.12143905, -0.06438531],
       ...,
       [ 0.02933106,  0.00834248,  0.0103009 , ..., -0.06069817,
         0.01291796,  0.12832988],
       [ 0.0901224 , -0.00492353, -0.00470015, ...,  0.14196305,
        -0.09734339, -0.05803211],
       [ 0.16619815,  0.14906927, -0.18081339, ..., -0.1346468 ,
         0.12524437,  0.01322112]])

使用近似算法计算一般非瘦矩阵的 SVD

当列中也有许多分块时,我们使用近似随机算法来仅收集少数奇异值和向量。

[5]:
import dask.array as da

X = da.random.random((10000, 10000), chunks=(2000, 2000)).persist()
[6]:
import dask

u, s, v = da.linalg.svd_compressed(X, k=5)
dask.visualize(u, s, v)
[6]:
../_images/machine-learning_svd_9_0.png
[7]:
v.compute()
[7]:
array([[ 0.00997573,  0.01011564,  0.00997098, ...,  0.00998413,
         0.00994515,  0.0099736 ],
       [-0.00048293,  0.00247921, -0.00527027, ..., -0.00606932,
        -0.01272348,  0.00818248],
       [ 0.00145378, -0.00278148,  0.01078658, ..., -0.00428512,
        -0.00213905, -0.00738961],
       [-0.00984979, -0.00230993, -0.00277437, ...,  0.0056367 ,
        -0.00199535, -0.01409744],
       [-0.00210629, -0.00320545, -0.00190336, ...,  0.01871436,
        -0.01494592, -0.00274385]])