使用 TPOT 实现机器学习自动化
目录
实时 Notebook
您可以在 实时会话中 运行此 Notebook 或 在 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 |
集群信息
LocalCluster
554e7aff
Dashboard: http://127.0.0.1:8787/status | Worker 4 |
总线程数 4 | 总内存: 6.78 GiB |
状态: 运行中 | 使用进程: True |
调度器信息
Scheduler
Scheduler-21db5fb4-9a69-4b11-a57a-880ad23c4052
Comm: tcp://127.0.0.1:40911 | Worker 4 |
Dashboard: http://127.0.0.1:8787/status | 总线程数 4 |
启动时间: 刚刚 | 总内存: 6.78 GiB |
Worker
Worker: 0
Comm: tcp://127.0.0.1:34711 | 总线程数 1 |
Dashboard: http://127.0.0.1:42307/status | 内存: 1.70 GiB |
Nanny: tcp://127.0.0.1:43647 | |
本地目录: /home/runner/work/dask-examples/dask-examples/machine-learning/dask-worker-space/worker-m8hopet5 |
Worker: 1
Comm: tcp://127.0.0.1:46865 | 总线程数 1 |
Dashboard: http://127.0.0.1:38167/status | 内存: 1.70 GiB |
Nanny: tcp://127.0.0.1:42469 | |
本地目录: /home/runner/work/dask-examples/dask-examples/machine-learning/dask-worker-space/worker-1d4jm_9g |
Worker: 2
Comm: tcp://127.0.0.1:39607 | 总线程数 1 |
Dashboard: http://127.0.0.1:46559/status | 内存: 1.70 GiB |
Nanny: tcp://127.0.0.1:34247 | |
本地目录: /home/runner/work/dask-examples/dask-examples/machine-learning/dask-worker-space/worker-_ojdgmeq |
Worker: 3
Comm: tcp://127.0.0.1:37721 | 总线程数 1 |
Dashboard: http://127.0.0.1:37659/status | 内存: 1.70 GiB |
Nanny: tcp://127.0.0.1:44933 | |
本地目录: /home/runner/work/dask-examples/dask-examples/machine-learning/dask-worker-space/worker-nlky1gwa |
创建数据¶
我们将使用 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)