我正在尝试使用 sklearn MiniBatchKMeans 来聚类一个相当大的数据集(150k 样本和 150k 特征)。我认为我可以使用来自 dask_ml 的增量来使事情变得更快,以将我的数据分成块。这是我在虚拟数据集上的代码片段:
from dask_ml.datasets import make_blobs
from dask_ml.wrappers import Incremental
from sklearn.cluster import MiniBatchKMeans
import dask.array as da
import dask
dataset = da.random.random((150000, 150000), chunks = (1000, 1000))
kmeans = MiniBatchKMeans(n_clusters = 3)
inc = Incremental(kmeans).fit(dataset)
predicted_labels = inc.predict(dataset).compute()
print(predicted_labels)
该进程在 compute() 步骤中被终止。我不认为在 150k 点上运行 compute() 会如此密集。它因这个奇怪的错误而失败:
ValueError: X has 150000 features, but MiniBatchKMeans is expecting 1000
features as input.
我不明白 MiniBatchKMeans 功能的大小与标签上的 compute() 有什么关系
编辑 在第一个答案之后,我想澄清一下我在标签(而不是数据集!)上使用了 compute(),因为我需要它们来进行一些绘图操作。这些值需要在 RAM 上才能被 matplotlib 函数使用。
(150k, ) 的数组应该能够舒适地安装在 RAM 上,我不确定它为什么会失败!