并行元估计器
目录
并行元估计器¶
dask-ml 提供了一些元估计器,可以并行化和扩展 scikit-learn 本身可能不具备并行化的某些任务。例如,ParallelPostFit
将并行化 predict
、predict_proba
和 transform
方法,使其能够处理大型(可能大于内存)数据集。
并行预测和转换¶
wrappers.ParallelPostFit
是一个元估计器,用于并行化预测和转换等拟合后任务。它可以包装任何 scikit-learn 估计器,以提供并行的 predict
、predict_proba
和 transform
方法。
警告
ParallelPostFit
**不会**并行化训练步骤。底层估计器的 .fit
方法会正常调用。
由于只包装了 predict
、predict_proba
和 transform
方法,因此 wrappers.ParallelPostFit
最适用于训练数据集相对较小(适合单台机器内存)而预测或转换必须在更大的数据集(可能大于单台机器内存)上完成的情况。
In [1]: from sklearn.ensemble import GradientBoostingClassifier
In [2]: import sklearn.datasets
In [3]: import dask_ml.datasets
In [4]: from dask_ml.wrappers import ParallelPostFit
在此示例中,我们将创建一个包含 1,000 个样本的小型训练数据集
In [5]: X, y = sklearn.datasets.make_classification(n_samples=1000,
...: random_state=0)
...:
训练与直接调用 estimator.fit(X, y)
完全相同。除了复制学习到的属性外,这就是 ParallelPostFit
所做的全部工作。
In [6]: clf = ParallelPostFit(estimator=GradientBoostingClassifier())
In [7]: clf.fit(X, y)
Out[7]: ParallelPostFit(estimator=GradientBoostingClassifier())
此类对于预测或转换大型数据集非常有用。我们将创建一个更大的 dask 数组 X_big
,每个块包含 10,000 个样本。
In [8]: X_big, _ = dask_ml.datasets.make_classification(n_samples=100000,
...: chunks=10000,
...: random_state=0)
...:
In [9]: clf.predict(X_big)
Out[9]: dask.array<_predict, shape=(100000,), dtype=int64, chunksize=(10000,), chunktype=numpy.ndarray>
这返回了一个 dask.array
。与任何 dask 数组一样,实际的 compute
将导致调度器并行计算任务。如果您已连接到 dask.distributed.Client
,计算将在您的机器集群中并行进行。
In [10]: clf.predict_proba(X_big).compute()[:10]
Out[10]:
array([[0.29480178, 0.70519822],
[0.00464304, 0.99535696],
[0.00902734, 0.99097266],
[0.01299259, 0.98700741],
[0.94285054, 0.05714946],
[0.70641268, 0.29358732],
[0.94880928, 0.05119072],
[0.0203811 , 0.9796189 ],
[0.02708978, 0.97291022],
[0.95614693, 0.04385307]])
有关此方法如何针对支持向量分类器进行扩展的示例,请参阅并行化预测。
与 dask-ml 中其他估计器的比较¶
dask-ml
重新实现了 scikit-learn 中的一些估计器,例如 dask_ml.cluster.KMeans
,或者 dask_ml.preprocessing.QuantileTransformer
。这就引出了一个问题:我应该使用重新实现的 dask-ml 版本,还是应该将 scikit-learn 版本包装在元估计器中?这因估计器而异,取决于您对近似解决方案的容忍度以及训练数据的大小。一般来说,如果您的训练数据很小,将 scikit-learn 版本包装在 dask-ml
元估计器中即可。