autofe论文小结

AutoFE论文小结

AFGSL

这篇文章主要是将Automatic Feature Generation的过程用图的结构来展现,最终目标是利用RL来构建出一个最优的神经网络框架。文章中提出了一个interaction layer的概念,分为Local interaction Layer和Global interaction Layer。

文章对数据的处理流程如下:

在Input Layer 和 Embedding Layer,有如下操作

  • 将连续特征进行离散化,转变为类别特征的形式
  • 将所有的特征进行one-hot 或 multi-hot,得到 x i x_i xi, X = [ x 1 , x 2 , . . . , x M ] X = [x_1, x_2, ..., x_M] X=[x1,x2,...,xM]
  • 为了避免维度爆炸,对上述生成的 X X X进行embedding操作,得到 E = [ e 1 , e 2 , . . . , e M ] E = [e_1, e_2, ..., e_M] E=[e1,e2,...,eM] e i = 1 r Q i x i e_i = \frac{1}{r}Q_i x_i ei=r1Qixi r = ∣ ∣ x i ∣ ∣ 0 r = ||x_i||_0 r=∣∣xi0 Q i Q_i Qi是embedding matrix

在Interaction Layer,有如下操作

  • 根据特征之间的关系,初始化邻接矩阵A(!!文章中并没有说如何初始化的,我也没有找到这篇论文的源代码,因此这个操作我就始终不理解怎么实现的
  • 为了可微,将离散的 A i j A_{ij} Aij变为连续的 A i j A_{ij} Aij: A ~ i j = σ ( β i j / τ ) \tilde{A}_{ij} = \sigma (\beta_{ij} / \tau) A~ij=σ(βij/τ),其中 τ \tau τ是temperature coefficient, β \beta β是structure parameters,一个M*M的矩阵。(这 τ \tau τ到底是什么,原文中也没有详细解释,应该是引用的某一篇文章中的方法)
  • 得到了优化后的邻接矩阵,就可以输入进图神经网络。

interaction layer进行特征迭代的核心公式如下:
h e a d h = ∑ j = 1 M α i j h W h l V Z j l head_h = \sum_{j=1}^M \alpha_{ij}^h W_{hl}^V Z_j^l headh=j=1MαijhWhlVZjl

Z l + 1 = c o n c a t ( h e a d 1 , . . . , h e a d H ) Z^{l+1} = concat(head_1, ..., head_H) Zl+1=concat(head1,...,headH)

其中 Z j l Z_j^l Zjl是图神经网络中第 l l l层生成的第 j j j个特征,这样就可以由特征 Z l Z^l Zl过渡到 Z l + 1 Z^{l+1} Zl+1,原文中并没有提及 Z l Z^l Zl的规模,我估计shape应该是[M, H],其中M是上面求和提到的,H是一共有H个头(这个shape有待确认

上式中的$ \alpha_{ij}^h$的表达式如下:
α i j h = A ~ i j ∗ e x p ( a ( W h l Q Z i l , W h l K Z j l ) ) ∑ k = 1 M A ~ i k ∗ e x p ( a ( W h l Q Z i l , W h l K Z k l ) ) \alpha^h_{ij} = \frac{\tilde{A}_{ij} * exp(a(W_{hl}^Q Z_i^l, W_{hl}^K Z_j^l))}{\sum_{k=1}^M \tilde{A}_{ik} * exp(a(W_{hl}^Q Z_i^l, W_{hl}^K Z_k^l))} αijh=k=1MA~ikexp(a(WhlQZil,WhlKZkl))A~ijexp(a(WhlQZil,WhlKZjl))
a ( ⋅ ∣ ⋅ ) a(·|·) a()是计算相似度的函数,可用inner product(内积)代替。

如果将上面定义的 α i j h \alpha^h_{ij} αijh带入到核心公式中,那么求得的就是基于局部注意力生成的特征;否则就是基于全局注意力生成的特征。

而这篇文章中利用RL所做的,就是对interaction layer的构造就行搜索和优化。

overall framework of AFGSL

上图所示,RL所做的,就是进行Network Construction,利用Q-learning

  • State:当前的网络结构
  • action: 添加interaction layer,是添加global interaction layer还是local interaction layer
  • Reward : r t = A U C t − A U C t − 1 r_t = AUC_t - AUC_{t-1} rt=AUCtAUCt1

在经过RL反复的构建Network之后,得到一个最优的模型,利用这个模型来进行Network Estimation

在分类任务中,损失函数为
L ( D ∣ β , W ) = − 1 ∣ D ∣ ∑ ( x i , y i ) ∈ D ( y i l o g ( y i ^ ) + ( 1 − y i ) l o g ( 1 − y i ^ ) ) L(D|\beta, W) = -\frac{1}{|D|}\sum_{(x_i, y_i)\in D}(y_i log(\hat{y_i}) + (1-y_i) log(1 - \hat{y_i})) L(Dβ,W)=D1(xi,yi)D(yilog(yi^)+(1yi)log(1yi^))
其中 β \beta β是结构参数,一个M*M的矩阵,W是模型参数,包含的如下:

{ Q i , W h l Q , W h l K , W h l V , w , b ∣ 1 ≤ i ≤ M , 1 ≤ h ≤ H , 1 ≤ l ≤ n Q_i, W_{hl}^Q, W_{hl}^K, W_{hl}^V, w, b| 1 \leq i \leq M , 1 \leq h \leq H, 1 \leq l \leq n Qi,WhlQ,WhlK,WhlV,w,b∣1iM,1hH,1ln}

FETCH

这篇论文主要是搭建了一个AutoFE的框架:FETCH,并且在后续的实验中还验证了该模型的可移植性。其代码开源了<liyaooi/FETCH: An automated feature engineering framework ‘FETCH’ accepted in ICLR 2023. (github.com)>

本文使用的模型是 强化学习和Attention;

强化学习的相关内容如下:

  • FE Action Space

    • 一元运算符:abs,square,inverse,log,sqrt,power3
    • 二元运算符:加减乘除
    • 交叉组合运算:对两个类别特征进行cross-product运算,就是矢量积运算,生成新的特征
    • 装箱操作:将数值特征离散化,转变为类别特征
  • State

将tabular数据简单的转化之后(LabelEncoder等),就变成了状态输入到模型中。

  • The agent and policy network
  • The environment

环境 ξ \xi ξ包含了带有预配置超参数的机器学习算法L和评估指标E

  • Reward Function

使用一个标准化的带有交叉验证的策略来提高reward估计的精度;以前的工作都是直接利用k折交叉验证的均值作为reward的定义,但是这会极大的造成训练的不稳定性,尤其是一开始的阶段,因为求均值的操作会损失一些必要的信息。因此本篇论文中的reward function定义如下:
R ( X i ) = E ˉ ( X i ) + E d i f f ( X i ) R(X_i) = \bar{E}(X_i) + E_{diff}(X_i) R(Xi)=Eˉ(Xi)+Ediff(Xi)
其中 E ˉ \bar{E} Eˉ代表k折交叉验证的平均性能, E d i f f ( X i ) = ∑ k m i n ( 0 , E k ( X i ) − E ˉ ( X i − 1 ) ) E_{diff}(X_i) = \sum_k min(0, E_k(X_i) - \bar{E}(X_{i-1})) Ediff(Xi)=kmin(0,Ek(Xi)Eˉ(Xi1)), E k ( X i ) E_k(X_i) Ek(Xi)是第k次交叉验证的结果, E ˉ ( X i − 1 ) \bar{E}(X_{i-1}) Eˉ(Xi1)是从上一步表格所得到的平均性能。 这种奖励公式促使代理惩罚出现在任何折叠中的较差结果,而不是简单地查看平均表现;论文中描述,这种reward function能够提升训练过程的稳定性,尤其是早期的训练阶段。

核心的模型框架如下

Fetch

上图清晰可见模型的组成。

关于论文中着重强调的,模型中的策略网络解决了表格数据的排列不变特性和变长特性

对于排列不变特性的问题,该模型中使用Attention Encoder来解决。

对于变成特性,我觉得主要有两个变长:

  1. 数据的样本数量不固定(不同数据集的数据量不同)
  2. 特征数量不固定(不同数据集的特征数不同,以及特征生成会改变特征数量)

该论文的解决办法是,将输入层设为全连接层,每次只输入一个feature,限制feature的sample大小(全连接层的节点个数),这样即便样本数不同,都可以输入进网络;利用Attention的特性,可以记住前面输入的所有feature,这样将所有的feature反复输入,就可以得到每个feature较优的transformation action。从源码来看,输入层的规模是train_data.shape[0],应该是原始样本数量,或者规定的一个样本数量

对于文中提到的可移植性,实验中采用的方法就是利用已经训练好的模型,将Attention Encoder部分的参数移植到新的模型上,从而提高新模型的性能和收敛速度。

本文中还有一个操作我觉得非常不错,将binary operation和raw feature进行组合,从而转变成unary operation,这样binary operation和unary operation就可以同等的地位放置在softmax层(位于输出层的softmax层的每一个节点都是一个Action)

DIFER

这篇文章主要是提出了一种新的feature generation方法,利用parse tree来表示生成的特征,其中叶节点代表特征,非叶节点代表transformation,因为transformation包含了两种:一元运算符和二元运算符。一元运算符只有一个叶节点,二元运算符有两个叶节点。

parse tree进行Post-order traversal遍历,得到Equvialent Travseral String

然后本文就是对上述得到的String做优化,优化后的string,再转化为parse tree,就是优化的特征

parse tree

论文中使用的主体方法如下:

main-body

主要分为三个部分:

  • Population Initialization

对特征进行采样,生成候选特征 F k T F_k^T FkT,对这些特征进行Feature Evaluation,得到< F c a n d , S c a n d F_{cand}, S_{cand} Fcand,Scand>,其中 S c a n d S_{cand} Scand是每一个特征所包含的score,类似于feature importance

  • Feature Evolution

这是模型的核心部分,主要分为Encoder, Predictor, Decoder

kernel

从上述生成的d个特征中,选出d/2的特征进行Feature Optimization,另外d/2的特征进行Feature Exploration;

对于Feature Optimization,,就是利用选定的特征,以及一些operators,随机的生成一棵parse tree,然后将这棵tree遍历生成的string输入到feature optimizer,该optimizer包括了encoder,predictor,decoder。上图(a)就是feature optimizer的整个过程:先对string进行encoder,生成embeddings,然后利用predictor对该embeddings进行简单的预测,得到loss,来优化该embeddings,最后利用decoder输出一个优化后的string。

Encoder:将LSTM作为Encoder,将 H x H_x Hx = { h 1 , h 2 , . . . , h ∣ x ∣ h_1, h_2, ..., h_{|x|} h1,h2,...,hx}的和作为embedding

Predictor:使用5层MLP

Decoder:使用带有注意力机制的LSTM作为Decoder,将 e x e_x ex作为初始输入,将上述的 h i h_i hi作为每一个timestamp作为输入

关键在于如何训练一个较好的Encoder,Predictor,以及Decoder;训练的过程如上图(b):
利用一开始的< F c a n d , S c a n d F_{cand}, S_{cand} Fcand,Scand>来作为输入和输出,构建上述(b)所示的模型,以及构建了如下两个损失函数来更新模型:
L p p = ∑ x ( s x − ψ p ( ψ e ( x ) ) ) 2 L_{pp} = \sum_x (s_x - \psi_p(\psi_e(x)))^2 Lpp=x(sxψp(ψe(x)))2

L r e c = − ∑ x ∑ r = 1 ∣ x ∣ l o g P ψ d ( x r ∣ ψ e ( x ) ) L_{rec} = -\sum_x \sum_{r=1}^{|x|} log P_{\psi_d}(x_r|\psi_e(x)) Lrec=xr=1xlogPψd(xrψe(x))

L = λ L p p + L r e c L = \lambda L_{pp} + L_{rec} L=λLpp+Lrec

在Predictor的Feature Optimization部分,优化公式如下:
e x ′ = ∑ h r ∈ H x ( h r + η ∂ ψ p ∂ h r ) e_{x'} = \sum_{h_r \in H_x} (h_r + \eta \frac{\partial \psi_p}{\partial h_r}) ex=hrHx(hr+ηhrψp)

  • Feature Selection

对于上述生成的特征,按照Score进行降序排序,将特征逐个添加到原始数据中,直到Performance不再增加,就停止。

Toward Efficient Automated Feature Engineering

这篇论文主要是优化了AutoFE的效率,从以下两个方向来优化特征评估的过程:
(1):减少用来评估的样本大小

(2):用来评估的候选特征数量

对于(1),使用MinHash算法来压缩样本数量,将样本数从M维压缩到d维

对于(2),使用一个预训练的二分类器,输入包含很多特征的数据集,输出这个数据集对应的performance,然后将某一个特征给删去,继续输入这个二分类器,输出一个performance,比较前后的performance,来决定这个candidated feature是否是值得保留的特征。

上面是该论文使用的核心模型,对于AutoFE的模型,该文章使用RNN来进行feature generation。

RNN

在RNN外面套上一层强化学习;

  • Environment

环境就是生成的特征空间的子空间

  • Agent

有N个原始特征,就定义N个agents来生成特征

  • State Space

状态空间就是已经选定的特征,这些特征包括原始的特征和新生成的特征,RNN的每一个时间步的输入就是St

  • Action

将feature transformation 定义为action,将RNN的隐藏状态Ht定义为各个action的概率,然后取最大的那一个作为当前状态的action

  • Transition

转化过程:在状态St时,从各自的特征子空间采样特征,之后施加action,一旦生成的特征是合格的,那么就将特征添加到各自的特征子空间来构建一个新的特征。如果特征不合格,就继续生成特征

  • Evaluation Task

评估任务旨在检测生成的以及选择的特征的有效性;

有两种评估任务的类型:利用快速的二进制分类器来减少特征大小的预评估,以及下游的正式评估,用以评估和选择特征。

  • Reward

将在评估任务中获取的performance gain作为reward

St时,从各自的特征子空间采样特征,之后施加action,一旦生成的特征是合格的,那么就将特征添加到各自的特征子空间来构建一个新的特征。如果特征不合格,就继续生成特征

  • Evaluation Task

评估任务旨在检测生成的以及选择的特征的有效性;

有两种评估任务的类型:利用快速的二进制分类器来减少特征大小的预评估,以及下游的正式评估,用以评估和选择特征。

  • Reward

将在评估任务中获取的performance gain作为reward

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值