主要内容来自:
https://www.cnblogs.com/wkang/p/10380500.html
引言
机器学习是朝着更高的易用性、更低的技术门槛、更敏捷的开发成本的方向去发展,且AutoML或者AutoDL的发展无疑是最好的证明。因此花费一些时间学习了解了AutoML领域的一些知识,并对AutoML中的技术方案进行归纳整理。
众所周知,一个完整的机器学习项目可概括为如下四个步骤。
其中,特征工程(提取)往往是决定模型性能的最关键一步。而往往机器学习中最耗时的部分也正是特性工程和超参数调优。因此,许多模型由于时间限制而过早地从实验阶段转移到生产阶段从而导致并不是最优的。
自动化机器学习(AutoML)框架旨在减少算法工程师们的负担,以便于他们可以在特征工程和超参数调优上花更少的时间,而在模型设计上花更多的时间进行尝试。
自动化特征工程工具包
自动化特征工程旨在通过从数据集中自动创建候选特征,且从中选择若干最佳特征进行训练的一种方式。自动化特征工程解决了特征构造的问题,但同时也产生了另一个问题:在数据量一定的前提下,由于产生过多的特征,往往需要进行相应的特征选择以避免模型性能的降低。事实上,要保证模型性能,其所需的数据量级需要随着特征的数量呈指数级增长。
常见工具包:
1、Featuretools
Featuretools使用一种称为深度特征合成(Deep Feature Synthesis,DFS)的算法,该算法遍历通过关系数据库的模式描述的关系路径。当DFS遍历这些路径时,它通过应用于数据的操作(包括和、平均值和计数)生成综合特征。例如,对来自给定字段client_id的事务列表应用sum操作,并将这些事务聚合到一个列中。尽管这是一个深度操作,但该算法可以遍历更深层的特征。Featuretools最大的优点是其可靠性和处理信息泄漏的能力,同时可以用来对时间序列数据进行处理。
正如Featuretools中实现的那样,自动化特征工程甚至允许像我这样的域新手从一组相关数据表中创建数千个相关特性。我们需要知道的是我们表的基本结构以及它们之间的关系。
2、Boruta
Boruta主要是用来进行特征选择。所以严格意义上,Boruta并不是我们所需要的自动化特征工程包。
Boruta-py是brouta特征约简策略的一种实现,在该策略中,问题以一种完全相关的方式构建,算法保留对模型有显著贡献的所有特征。这与许多特征约简算法所应用的最小最优特征集相反。boruta方法通过创建由目标特征的随机重排序值组成的合成特征来确定特征的重要性,然后在原始特征集的基础上训练一个简单的基于树的分类器,在这个分类器中,目标特征被合成特征所替代。所有特性的性能差异用于计算相对重要性。
Boruta函数通过循环的方式评价各变量的重要性,在每一轮迭代中,对原始变量和影子变量进行重要性比较。如果原始变量的重要性显著高于影子变量的重要性,则认为该原始变量是重要的;如果原始变量的重要性明显低于影子变量的重要性,则认为该原始变量是不重要的。其中,原始变量就是我们输入的要进行特征选择的变量;影子变量就是根据原始变量生成的变量
生成规则是:
先向原始变量中加入随机干扰项,这样得到的是扩展后的变量
从扩展后的变量中进行抽样,得到影子变量
3、tsfresh
tsfresh是基于可伸缩假设检验的时间序列特征提取工具。该包包含多种特征提取方法和鲁棒特征选择算法。
tsfresh可以自动地从时间序列中提取100多个特征。这些特征描述了时间序列的基本特征,如峰值数量、平均值或最大值,或更复杂的特征,如时间反转对称性统计量等。
这组特征可以用来在时间序列上构建统计或机器学习模型,例如在回归或分类任务中使用。
时间序列通常包含噪声、冗余或无关信息。因此,大部分提取出来的特征对当前的机器学习任务没有用处。为了避免提取不相关的特性,tsfresh包有一个内置的过滤过程。这个过滤过程评估每个特征对于手头的回归或分类任务的解释能力和重要性。它建立在完善的假设检验理论的基础上,采用了多种检验方法。
需要注意的是,在使用tsfresh提取特征时,需要提前把结构进行转换,一般上需转换为(None,2)的结构,例如下图所示:
网友评论