最近在看AutoML,业界在 automl 上的进展还是很不错的,个人比较看好这个方向,所以做了一些了解:
github上的开源项目也是有不少的,我所看到的包括:
上述开源项目中,我主要看了auto_sklearn,对他的架构设计,算法设计还是很感兴趣的,论文在这边Efficient and Robust Automated Machine Learning:
meta-learning
常规 ML framework 如下图灰色部分:导入数据-数据清洗-特征工程-分类器-输出预测值
Bayesian optimizer
build-ensemble
通常我们在参数尝试的时候都是依赖如下:
Bayesian optimizer在实际被应用的过程中使用的较多,是实现自动参数选择的核心,让我们来仔细看下,伪代码:
上述代码实现,非常简单,完整代码自取GP_Bayes_Optimizaion
init:
init_xs = np.random.uniform(bound_dict.get("x", [0, 0])[0],bound_dict.get("x", [1, 1])[1],size=self.init_point_number)
init_ys = np.random.uniform(bound_dict.get("y", [0, 0])[0], bound_dict.get("y", [1, 1])[1],size=self.init_point_number)
init_points = zip(init_xs, init_ys)
init_labels = map(self.target_loss_function, init_xs)
train_features = np.asarray(list(init_points))
train_negative_loss = np.asarray(list(init_labels))
current_max_negative_loss = max(train_negative_loss)
Acquision function computes the max value
x_tries = np.random.uniform(bounds[:, 0], bounds[:, 1], size=(100000, bounds.shape[0]))
mean, std = gp.predict(x_tries, return_std=True)
acquisition_fucntion_values = self.Acquision_function(mean, std)
x_max = x_tries[np.argmax(acquisition_fucntion_values)]
max_acquision_fucntion_value = max(acquisition_fucntion_values)
x_max = np.clip(x_max, bounds[:, 0], bounds[:, 1])
因为我写的是简单的高斯过程这种形式,很多人对高斯过程为什么能拟合出方差均值不清楚,我手写了一些推导过程高斯过程回归。
Bayesian optimizer来解决这类问题,有很多的优点的:
>>> 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))
欢迎大家关注我的个人bolg,知乎,更多代码内容欢迎follow我的个人Github,如果有任何算法、代码疑问都欢迎通过邮箱发消息给我。