假设我有原始数据C.我将C分成100列,分别叫A1,A2,... A100。我想根据一个A阵列训练100个k-means模型。
如果我使用dask-ml,可以dask-ml避免从硬盘读取原始数据C 100次吗?
更新(尝试测试延迟想法):
from dask_ml.cluster import PartialMiniBatchKMeans
from dask_ml.datasets import make_classification
from dask.delayed import delayed
from dask import compute
import numpy as np
X, y = make_classification(n_samples=1000, chunks=500)
N = 2
est = [PartialMiniBatchKMeans(n_clusters=2) for i in range(N)]
d_est = [delayed(est[i].fit(X)) for i in range(N)]
com = compute(*d_est)
#[d.compute() for d in d_est]
np.set_printoptions(formatter={'float': lambda x: "{0:0.2f}".format(x)})
for i, c in enumerate(com):
print("---- model #%d ----" % i)
for cen in c.cluster_centers_:
print(cen)
结果:
---- model #0 ----
[1.05 0.01 0.12 0.06 -0.65 0.06 -0.80 -0.04 -0.10 0.08 0.09 -0.04 -0.08
0.13 -0.06 -0.07 0.06 0.60 0.13 0.02]
[-1.29 -0.11 -0.13 -0.02 0.80 -0.02 0.98 -0.05 0.21 -0.06 -0.15 0.11 0.03
-0.07 0.16 0.14 -0.11 -0.73 -0.04 0.00]
---- model #1 ----
[0.95 -0.03 -0.01 0.09 -0.46 0.07 -0.69 0.03 -0.06 -0.06 -0.07 0.04 -0.04
0.10 0.01 0.02 -0.15 0.71 0.03 -0.01]
[-1.36 -0.06 0.03 -0.07 0.66 -0.04 0.98 -0.16 0.18 0.13 0.07 0.01 -0.02
-0.04 0.08 0.01 0.19 -1.02 0.10 0.04]
当我在完全相同的数据上同时训练两个模型时,两个延迟的minibatch kmeans模型不会给出相同的质心。
仍然没有证明dask-ml是否可以避免读取数据100次...可能dask只是滚动不同的随机数来初始化两个模型。