使用投票分类器

实时笔记本

你可以在 live session Binder 中运行此笔记本,或查看 Github 上的内容。

使用投票分类器

一个 投票分类器 模型将多个不同的模型(即子估计器)组合成一个单一模型,该模型(理想情况下)比任何单独的模型都要强大。

Dask 提供了在集群中不同机器上训练单个子估计器的软件。这使得用户能够并行训练比单台机器上可能的更多的模型。请注意,只有当用户拥有一个资源多于单台机器的分布式集群时,他们才会观察到这种好处(因为 sklearn 已经允许用户在单台机器的核心上并行训练)。

以下是如何在 dask 中(使用本地集群)部署投票分类器模型的示例。

Dask 标志

[ ]:
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import SGDClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC

import sklearn.datasets

我们创建一个合成数据集(包含1000行和20列),可以将其提供给投票分类器模型。

[ ]:
X, y = sklearn.datasets.make_classification(n_samples=1_000, n_features=20)

我们将 VotingClassifier 指定为一个 (名称, 子估计器) 元组的列表。在数据上拟合 VotingClassifier 会依次拟合每个子估计器。我们将 n_jobs 参数设置为 -1,这指示 sklearn 使用所有可用的核心(注意我们没有使用 dask)。

[ ]:
classifiers = [
    ('sgd', SGDClassifier(max_iter=1000)),
    ('logisticregression', LogisticRegression()),
    ('svc', SVC(gamma='auto')),
]
clf = VotingClassifier(classifiers, n_jobs=-1)

我们调用分类器的 fit 方法来训练分类器。

[ ]:
%time clf.fit(X, y)

创建一个 Dask 客户端 可以通过仪表板提供性能和进度指标。由于 Client 没有给出参数,其输出指的是一个 本地集群 (而不是分布式集群)。

我们可以通过点击运行单元格后的链接来查看仪表板。

[ ]:
import joblib
from distributed import Client

client = Client()
client

要训练投票分类器,我们调用分类器的 fit 方法,但在 joblib 的 parallel_backend 上下文管理器中进行。这会将子估计器的训练分布到集群中。

[ ]:
%%time
with joblib.parallel_backend("dask"):
    clf.fit(X, y)

print(clf)

注意,我们看不到使用dask的优势,因为我们使用的是本地集群而不是分布式集群,而且sklearn已经在使用我电脑的所有核心。如果我们使用的是分布式集群,dask将使我们能够利用多台机器并在它们之间训练子估计器。