Auto-Sklearn-代码样例

万壑松风知客来,摇扇抚琴待留声

说明:本文将给出使用 Auto-Sklearn 的代码样例,目的在于从简单代码理解问题更快。

1. 简介

使用几组代码样例来记录 Auto-Sklearn 的使用方法,当然几组代码的不同之处在于参数的改变,通过改变参数再组合得到功能不同的 Auto-Sklearn 模型。

关于 Auto-Sklearn 的使用简介可以参考这篇文章,关于 Auto-Sklearn 的相关参数说明可以参考另一篇文章。回归问题为样例,当然这与分类问题十分的相似,不同点可能是参数:误差函数不同、函数调用对象不同、基础机器学习模型不同等几个点,不过这对整体理解基本上没有影响。

2. 代码样例

使用默认参数,直接调用接口:

任务:使用默认参数调用回归接口,默认整体框架运行一个小时,在每个尝试的机器学习模型上限制运行十分钟。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# ! /usr/bin/env python

import autosklearn.regression
import sklearn.model_selection
from sklearn.metrics import mean_squared_error as mse
import pandas as pd
import numpy as np
import warnings

warnings.filterwarnings("ignore", "Mean of empty slice")

df = pd.read_csv('./data.csv')
df_X = df.iloc[:,:-1]
df_y = df.iloc[:,-1]
train_X, test_X, train_y, test_y = sklearn.model_selection.train_test_split(df_X, df_y)

# Auto-Sklearn核心调用API
automl = autosklearn.regression.AutoSklearnRegressor()
automl.fit(train_X, train_y)
pred_y = automl.predict(test_X)
print('预测数据集的 MSE:'.format(mse(test_y, pred_y)))

设置运行时长、并行运行数、集成模型内存,修改误差衡量函数:

任务:设置框架整体运行时间限制 24 个小时、单个模型运行时间限制 1 个小时,设置多核并行数 4 和集成模型内存 3G。默认回归误差衡量为 R2,这里修改为 MSE (必须使用 autosklearn 的 MSE)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# ! /usr/bin/env python

import autosklearn.regression
from autosklearn.metrics import mean_squared_error
import sklearn.model_selection
from sklearn.metrics import mean_squared_error as mse
import pandas as pd
import numpy as np
import warnings

warnings.filterwarnings("ignore", "Mean of empty slice")

df = pd.read_csv('./data.csv')
df_X = df.iloc[:,:-1]
df_y = df.iloc[:,-1]
train_X, test_X, train_y, test_y = sklearn.model_selection.train_test_split(df_X, df_y)

init_param = {'time_left_for_this_task':86400,'per_run_time_limit':3600,'ensemble_memory_limit':3072, 'n_jobs':4}

# Auto-Sklearn核心调用API
automl = autosklearn.regression.AutoSklearnRegressor(**init_param)
# 修改误差衡量函数
automl.fit(train_X, train_y, metric=mean_squared_error)
pred_y = automl.predict(test_X)
print('预测数据集的 MSE:'.format(mse(test_y, pred_y))

设置重采样方式为交叉验证,并输出配置文件夹:

任务:设置参数交叉验证,输出存储配置输出和日志文件文件夹、存储可选测试集预测文件夹到指定位置并不删除。强调注意使用 refit 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# ! /usr/bin/env python

import autosklearn.regression
import sklearn.model_selection
from sklearn.metrics import mean_squared_error as mse
import pandas as pd
import numpy as np
import warnings

warnings.filterwarnings("ignore", "Mean of empty slice")

df = pd.read_csv('./data.csv')
df_X = df.iloc[:,:-1]
df_y = df.iloc[:,-1]
train_X, test_X, train_y, test_y = sklearn.model_selection.train_test_split(df_X, df_y)

init_param = {'resampling_strategy':'cv', 'resampling_strategy_arguments':{'folds':3}, 'tmp_folder':'/home/autosklearn/autosklearn_regression_example_tmp', 'output_folder':'/home/autosklearn/autosklearn_regression_example_out', 'delete_tmp_folder_after_terminate':False, 'delete_output_folder_after_terminate':False}

# Auto-Sklearn核心调用API
automl = autosklearn.regression.AutoSklearnRegressor(**init_param)
automl.fit(train_X, train_y)
# 交叉验证后需要refit
automl.refit(train_X, train_y)
pred_y = automl.predict(test_X)
print('预测数据集的 MSE:'.format(mse(test_y, pred_y))

3. 结语

三个样例代码内容,只是为了展示部分参数不同的情况下如何使用 Auto-Sklearn ,本文仅作为参考更多参数的使用可以自己尝试。并且 Auto-Sklearn 也有一部分自身的函数,可以通过训练出来的对象查看某些属性结果,这个可以从官网了解更多。

后续如果有相关内容将进行补充和说明。。。