Diego: Data in, IntElliGence Out.
一个支持快速搭建自动学习任务的框架。只需要创建自动学习研究(Study),同时生成相关子实验(Trials),然后运行,便能的得到一个机器学习模型。采用Scikit-learn式的API进行实现, 参考glossary,使用贝叶斯优化和遗传算法进行自动机器学习。
思路来源: Fast.ai和MicroSoft nni..
- 创建分类器的Study和Trials。
- AutoML 分类器,支持scikit-learn api。支持导出模型后直接使用。
- 采用贝叶斯优化和遗传算法进行超参数优化
- 支持分桶算法和LUS抽样方法进行预处理
- 支持scikit-learn api分类器的自定义分类器进行参数搜索和超参优化
需要先安装swig,部分依赖C/C++的接口编译。推荐使用 conda 安装
conda install --yes pip gcc swig libgcc=5.2.0
# Mac OS 用户需要安装open MP
# brew install libomp
pip install diego
安装好之后,开始6行代码解决一个分类问题吧。
参考MicroSoft nni,定义Study
和Trial
。
每次的任务认为是一个Study
,每个 Study 由多个Trial
构成。
建议先创建 Study,再从 Study 中生成 Trial:
from diego.study import create_study
import sklearn.datasets
digits = sklearn.datasets.load_digits()
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(digits.data, digits.target,train_size=0.75, test_size=0.25)
s = create_study(X_train, y_train)
# can use default trials in Study
# or generate one
# s.generate_trials(mode='fast')
s.optimize(X_test, y_test)
# all_trials = s.get_all_trials()
# for t in all_trials:
# print(t.__dict__)
# print(t.clf.score(X_test, y_test))
ideas for releases in the future
- 回归。
- add documents.
- 不同类型的Trial。TPE, BayesOpt, RandomSearch
- 自定义的Trial。Trials by custom Classifier (like sklearn, xgboost, lightgbm)
- 模型保存。model persistence
- 模型输出。model output
- basic Classifier
- add preprocessor
- add FeatureTools for automated feature engineering
Study:
Trial:
由于在并行化的时候,n_jobs>1可能会卡住。在scikit-learn中,同样可能出现类似的问题
在Python3.4+中,一种解决方案是,直接配置multiprocessing
使用forkserver
或 spawn
来启动进程池管理 (而不是默认的fork
)。例如直接在代码中全局启用forkserver
模式。
import multiprocessing
# other imports, custom code, load data, define model...
if __name__ == '__main__':
multiprocessing.set_start_method('forkserver')
# call scikit-learn utils with n_jobs > 1 here
更多设置可以参考multiprocessing document
对于每次的Study,数据的存储和参数,以及模型是额外存在Storage
对象的,保证了Study只控制trials,同时每个Trial完成后更新在storage中的结果,同时更新最好的结果。
在创建Study
的时候,需要指定优化的方向 maximize
或者 minimize
。同时在创建Trials
的时候,指定优化的指标。默认是 maximize accuracy
。
- H2O.ai
- hyperopt
- mlbox
- pybrain
1.tpot
- ms nni