德国科学家在2015年时,在NIPS会议上发表了关于“自动机器学习框架”的方法(参考2),并开源了一个叫做auto-sklearn的项目(参考1)。在2020年,他们又对这个auto-sklearn框架进行了优化(参考3)。
初步看来,auto-sklearn能自动选择sklearn中不同模型,并最终找出最优的ensemble多模型集成学习方案。
参考4中给出了安装方法,需要python3.6以上的版本。
sudo apt-get install build-essential swig python3-dev
pip3 install auto-sklearn
auto-sklearn依赖swig,所以要先安装swig,这是个多语言编程兼容的库。
conda install gxx_linux-64 gcc_linux-64 swig
参考4中还给出了使用docker等进行安装的更多安装方式,这里不再赘述。
下面给出一个简单的示例代码(来源于auto-sklearn源码中的example,简单修改并增加注释),代码含义及关键参数解释见注释。
# step-01: 导入第三方库
import sklearn.datasets
import sklearn.metrics
import autosklearn.classification
# step-02: 使用sklearn加载breast_cancer数据集
X, y = sklearn.datasets.load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=1)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
# (426, 30) (143, 30) (426,) (143,)
# step-03: 训练模型
automl = autosklearn.classification.AutoSklearnClassifier(
time_left_for_this_task=120, # 寻找合适模型的总时间(按秒计算)
per_run_time_limit=30, # 留给每个模型运行、调优的时间(按秒计算)
tmp_folder='tmp/autosklearn_classification_example_tmp', # 配置文件、log文件存储路径
)
automl.fit(X_train, y_train, dataset_name='breast_cancer')
# step-04: 最终给出的ensemble模型的细节
print(automl.show_models())
# step-05: Accuracy
predictions = automl.predict(X_test)
print("Accuracy score:", sklearn.metrics.accuracy_score(y_test, predictions))
上面第4步这里给出出了最终ensemble的模型,包括extra_tree,mlp,random_forest,gradient_boosting,以及他们的参数细节,看上去还是挺复杂的。最终在测试集上的准确率为 0.951048951048951。
可使用joblib对auto-sklearn给出的ensemble模型做持久化,示例代码如下:
import joblib as jl
jl.dump(automl, 'automl.jl')
m2 = jl.load('automl.jl')
predictions = m2.predict(X_test)
print("Accuracy score:", sklearn.metrics.accuracy_score(y_test, predictions))
auto-sklearn项目描述和官网上给出的tutorial都比较少,查了不少参考资料后,发现的好资料如下:
api文档:https://automl.github.io/auto-sklearn/master/index.html
原理:两篇文章,参考2,参考3
样例代码:https://github.com/automl/auto-sklearn/tree/master/examples
本文给出了安装、使用auto-sklearn的简单案例,以及更多有价值的参考资料。
机器学习的实际应用过程中,会花掉大量时间做模型选择,参数调优,多模型集成学习ensemble。
auto-sklearn能把上面提到这些比较耗时的体力活都自动做完,这也是它最大的优势。
当然,从笔者的实验看来,auto-sklearn最终得到的模型,持久化后size都比较大,哪怕只在简单数据集上进行训练。