使用 TPOT 实现机器学习自动化

实时 Notebook

您可以在 实时会话中 运行此 Notebook Binder在 Github 上 查看。

使用 TPOT 实现机器学习自动化

此示例展示了如何将 TPOT 与 Dask 一起使用。

TPOT 是一个自动化机器学习库。它评估许多 scikit-learn 管道和超参数组合,以找到一个适用于您数据的模型。评估所有这些计算的成本很高,但适合并行化。TPOT 可以使用 Dask 在机器集群上分发这些计算。

可以在 dask examples binder 上交互式运行此 notebook。以下视频展示了此 notebook 在集群上的一个更大版本。

[1]:
from IPython.display import YouTubeVideo

YouTubeVideo("uyx9nBuOYQQ")
[1]:
[2]:
import tpot
from tpot import TPOTClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
/usr/share/miniconda3/envs/dask-examples/lib/python3.9/site-packages/tpot/builtins/__init__.py:36: UserWarning: Warning: optional dependency `torch` is not available. - skipping import of NN models.
  warnings.warn("Warning: optional dependency `torch` is not available. - skipping import of NN models.")

设置 Dask

我们首先启动一个 Dask 客户端,以便访问 Dask dashboard,它将提供进度和性能指标。

运行单元格后,点击 dashboard 链接即可查看 dashboard。

[3]:
from dask.distributed import Client
client = Client(n_workers=4, threads_per_worker=1)
client
[3]:

客户端

Client-9d3a3f10-0de1-11ed-a59a-000d3a8f7959

连接方法: Cluster 对象 集群类型: distributed.LocalCluster
Dashboard: http://127.0.0.1:8787/status

集群信息

创建数据

我们将使用 digits 数据集。为了确保示例快速运行,我们将训练数据集做得相对较小。

[4]:
digits = load_digits()

X_train, X_test, y_train, y_test = train_test_split(
    digits.data,
    digits.target,
    train_size=0.05,
    test_size=0.95,
)

这些只是小的内存中的 NumPy 数组。此示例不适用于大于内存的 Dask 数组。

使用 Dask

TPOT 遵循 scikit-learn API;我们指定一个带有少量超参数的 TPOTClassifier,然后在一些数据上对其进行拟合。默认情况下,TPOT 在您的单台机器上训练。为了确保使用您的集群,请指定 use_dask 关键字。

[5]:
# scale up: Increase the TPOT parameters like population_size, generations
tp = TPOTClassifier(
    generations=2,
    population_size=10,
    cv=2,
    n_jobs=-1,
    random_state=0,
    verbosity=0,
    config_dict=tpot.config.classifier_config_dict_light,
    use_dask=True,
)
[6]:
tp.fit(X_train, y_train)
[6]:
TPOTClassifier(config_dict={'sklearn.cluster.FeatureAgglomeration': {'affinity': ['euclidean',
                                                                                  'l1',
                                                                                  'l2',
                                                                                  'manhattan',
                                                                                  'cosine'],
                                                                     'linkage': ['ward',
                                                                                 'complete',
                                                                                 'average']},
                            'sklearn.decomposition.PCA': {'iterated_power': range(1, 11),
                                                          'svd_solver': ['randomized']},
                            'sklearn.feature_selection.SelectFwe': {'alpha': array([0.   , 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007...
                                                                          'max']},
                            'sklearn.preprocessing.RobustScaler': {},
                            'sklearn.preprocessing.StandardScaler': {},
                            'sklearn.tree.DecisionTreeClassifier': {'criterion': ['gini',
                                                                                  'entropy'],
                                                                    'max_depth': range(1, 11),
                                                                    'min_samples_leaf': range(1, 21),
                                                                    'min_samples_split': range(2, 21)},
                            'tpot.builtins.ZeroCount': {}},
               cv=2, generations=2, n_jobs=-1, population_size=10,
               random_state=0, use_dask=True)

了解更多

有关使用 Dask 和 TPOT 的更多信息,请参阅 Dask-MLTPOT 文档。