自动机器学习AutoML)是将机器学习应用于现实问题的端到端流程自动化的过程。工作中刚好有用到auto-sklearn相关技术,记录一下代码阅读笔记。

auto-sklearn 简要介绍

如下是一个最简单的例子,fit中包括了数据预处理,特征变换,模型选择,超参调优等流程。用户不用关心中间的实现过程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import autosklearn.classification
import sklearn.model_selection
import sklearn.datasets
import sklearn.metrics
X, y = sklearn.datasets.load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = \
        sklearn.model_selection.train_test_split(X, y, random_state=1)
automl = autosklearn.classification.AutoSklearnClassifier()
automl.fit(X_train, y_train)
y_hat = automl.predict(X_test)
print("Accuracy score", sklearn.metrics.accuracy_score(y_test, y_hat))

MVn3l9.png

Estimator

这是最主要的基类,在此基础上衍生了AutoSklearnClassifierAutoSklearnRegressor,根据具体场景选择分类还是回归

有几个比较重要的入参:

  1. n_jobs 指定 并发的job个数

主体流程:

  1. 判断并发job个数,默认为单任务运行
  2. build_automl初始化automl类,每个进程初始化一个
  3. 在本进程运行一个,在n-1个其他进程上运行其他的任务

BaseAutoML

作为classifier和regressor的共同基类,子类在此基础上重写fit函数。

classifier.fit: 根据y向量判断问题类型,如果是多label分类问题,衡量指标为f1_macro,否则是accuracy

Regressor.fit: 衡量指标(metrics) r2

AutoMl.fit主要逻辑:

  1. 入参检查,其中resampling_strategy默认为 holdout-iterative-fit
  2. do_dummy_prediction 构造一个预测函数,用来debug
  3. Create_search_space(重点) 根据配置(所包含的estimator, preprocessor)创建一个搜索空间,以classifier为例,这里返回了生成的 SimpleClassificationPipeline,这个类是实现分类task的整个pipeline