Automated Machine Learning (AutoML)

Automated Machine Learning (AutoML)_第1张图片
数据是这个时代的核心,基于数据所构建的模型和决策为工业自动化贡献了很多,也已经改变了很多企业的商业模式、产品等,改变了世界也收益颇丰。这也是时下大数据、人工智能炒作得如此火爆,甚至一些机器人智能威胁论也层出不穷。但实际上机器学习、深度学习和深度强化学习的能力实在很有限的,近日来在NLP任务中大杀四方的BERT就被开始质疑是否真的学习到了推理能力,是否只是依靠大量数据集本身特点,如一些线索词来进行工作,而一旦加入干扰和对抗,效果就与盲猜无异。不说废话了,这也是需要人的原因,多少人工才能创造多少智能。

为什么需要AutoML?

  1. 通常情况下,如果想要从数据中建立合理有效的机器学习模型应用,需要一个合理的模型构建,然后不断训练的过程。其关键步骤有数据清洗、特征预处理、算法选择和搭建、调参等等,这是一项繁复的工作,需要大量的时间,那么这一步骤是否可以Auto?即我们只需要输入数据集,中间步骤通通自动化,就能得到好的结果呢?-----------AutoML。。。如果有了AutoML,便可以从这个繁琐的任务中解脱出来,轻快又省力,并且可以专注于更多的创造性任务,为创造更多的价值。
  2. 深度学习任务中,神经网络架构十分重要,架构不对怎么跑数据效果都不好,怎么找到更好的架构?但通过对大量不同模型的训练搜索,将会带来极大的时间开销,而且训练没有统一的目标函数,这也是AutoML需要解决的挑战。

过去几年在AutoML上的研究无不是从机器学习步骤中的某些环节进行优化,特征工程(feature engineering),元学习(meta-learning),神经网络架构搜索(architecture search),组合模型选择(Combined Model Selection),超参优化(Hyperparameter optimization)

特征工程(feature engineering)
传统的特征选择往往会用类似于过滤法、包裹法等,目前主要有一些方法是:

  • paper:Feature selection as a one-player game,以强化学习方法训练一个Agent学习到最优特征。其中奖励以泛化错误来进行设置,以最小化模型的泛化误差。
  • paper:Explorekit: Automatic feature generation and selection,结合多个特征以生成新的特征。
  • paper:Autolearnautomated feature generation and selection,基于回归的自动特征选择。该方法会先对原始特征进行滤波并丢弃信息增益小的特征,然后基于特征相关性再次过滤以省略一些依赖对。最后根据岭回归从剩下的特征中生成新的特征,具有最高信息增益和稳定性的特征便是想要寻找到的特征。

元学习(meta-learning)
字面上就是学会如何学习,重点是对学习本身的理解和适应,而不是为了某个特定的任务。它能够评估自己的学习方法,并根据特定的学习任务对自己的学习方法进行调整。

  • paper大集合:https://github.com/floodsung/Meta-Learning-Papers

Automated Machine Learning (AutoML)_第2张图片
神经网络架构搜索(architecture search)
如何学习到更好的神经网络架构?即生成更深或更宽的网络架构。

  • Learning Transferable Architectures for Scalable Image Recognition,https://arxiv.org/pdf/1707.07012.pdf
    用积木组合的方法,并大获成功。

  • Progressive Neural Architecture Search,https://arxiv.org/pdf/1712.00559.pdf
    基于序列模型的优化(SMBO),先各模块按照复杂性递增的顺序排序,从简单的做起,再逐一测试搜索结构。实验证明这样并不会缩小搜索空间,取得了不错的效果。

  • Efficient Neural Architecture Search via Parameter Sharing,https://arxiv.org/pdf/1802.03268.pdf
    ENAS算法强制将所有模型的权重共享,而非从零开始训练模型到收敛,所有曾经探索过的模块都将使用这些学习过的共享权重。所以每次训练新模型是都进行迁移学习,收敛速度也更快。

超参优化(Hyperparameter optimization)
有做过实际项目的人应该都清楚,对于超参的选择是非常重要的“撞大运”游戏,所以也被戏称为“深度学习调参师”,有时候一个细微的参数差值就能改变所有,所有,所有。
一般常规做超参搜索主要有1.网格搜索,尝试所有的参数选择;2.贝叶斯优化,在函数方程不知的情况下,根据采样点来预估函数的最大值;3.随机搜索,简单的对参数设定固定次数的随机搜索要比网格更加有效;4.基于梯度,计算相对于超参的梯度,然后使用梯度下降来优化超参。

  • 算法包括:贝叶斯,Hyperopt(TPE 高斯混合模型算法);SMAC(回归随机森林,随机森林被用来模拟超参数的高斯分布损失);Spearmint。输入不同的超参数为,以损失函数为准确率,调优器会在随机选择一些值的基础上,利用贪心算法去寻优。

Automated Machine Learning (AutoML)_第3张图片
流程优化(Pipeline Optimization)
组合更好的组合上述的各个模块?目前已经有集成好了的几个平台:

  • Auto-sklearn:它是基于贝叶斯的集成方法,主要是利用贝叶斯进行优化迭代地(其实很穷举)增强预处理和模型超参数。https://github.com/automl/auto-sklearn/
  • Tree-based Pipeline Optimization Tool (TPOT):基于遗传规划优化的方法,首先生成树然后再交叉繁衍优胜劣汰直到收敛。https://github.com/EpistasisLab/tpot
  • auto_ml:引入深度学习进行分析学习特征,内含多种模型,最后使用梯度提升树。https://github.com/ClimbsRocks/auto_ml
  • ATM:https://github.com/HDI-Project/ATM
#以auto_ml例子为例
#首先需要pip install auto_ml

from auto_ml import Predictor
from auto_ml.utils import get_boston_dataset #boston数据集
from auto_ml.utils_models import load_ml_model

# 载入数据
df_train,df_test = get_boston_dataset()

# 需要表述数据中哪个属性为output,以及数据特性
# 如 Examplesinclude ['nlp', 'date', 'categorical', 'ignore']
column_descriptions= {
'MEDV': 'output' ,
'CHAS': 'categorical'
}

#建立回归模型
ml_predictor =Predictor(type_of_estimator='regressor',column_descriptions=column_descriptions)
ml_predictor.train(df_train)

# 对模型的测试评分
test_score =ml_predictor.score(df_test, df_test.MEDV)

#保存模型和重载模型
file_name =ml_predictor.save()
trained_model =load_ml_model(file_name)

#利用模型进行预测
predictions =trained_model.predict(df_test)
print(predictions)
#如果使用tpot
from tpot import TPOTClassifier
form sklearn.datasets import loard_digits
from sklearn.model_selection import train_test_split

#载入并切分数据集
digits=load_digits()
X_train,X_test,y_train,y_test=train_test_split(digits.data,digits.target,train_size=0.75,test_size=0.25)

tpot=TPOTClassifier(generation=5,population_size=50,verbosity=2,n_jobs=-1)

topt.fit(X_train,y_train)
print(tpot.score(X_test,y_test))

#导出
tpot.export('topt_minist_pipeline.py')

你可能感兴趣的:(机器学习,数据挖掘)