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=∣∣xi∣∣0, 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=1∑Mα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~ik∗exp(a(WhlQZil,WhlKZkl))A~ij∗exp(a(WhlQZil,WhlKZjl))
a
(
⋅
∣
⋅
)
a(·|·)
a(⋅∣⋅)是计算相似度的函数,可用inner product(内积)代替。
如果将上面定义的 α i j h \alpha^h_{ij} αijh带入到核心公式中,那么求得的就是基于局部注意力生成的特征;否则就是基于全局注意力生成的特征。
而这篇文章中利用RL所做的,就是对interaction layer的构造就行搜索和优化。
上图所示,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=AUCt−AUCt−1
在经过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)=−∣D∣1(xi,yi)∈D∑(yilog(yi^)+(1−yi)log(1−yi^))
其中
β
\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∣1≤i≤M,1≤h≤H,1≤l≤n}
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ˉ(Xi−1)),
E
k
(
X
i
)
E_k(X_i)
Ek(Xi)是第k次交叉验证的结果,
E
ˉ
(
X
i
−
1
)
\bar{E}(X_{i-1})
Eˉ(Xi−1)是从上一步表格所得到的平均性能。 这种奖励公式促使代理惩罚出现在任何折叠中的较差结果,而不是简单地查看平均表现;论文中描述,这种reward function能够提升训练过程的稳定性,尤其是早期的训练阶段。
核心的模型框架如下:
上图清晰可见模型的组成。
关于论文中着重强调的,模型中的策略网络解决了表格数据的排列不变特性和变长特性
对于排列不变特性的问题,该模型中使用Attention Encoder来解决。
对于变成特性,我觉得主要有两个变长:
- 数据的样本数量不固定(不同数据集的数据量不同)
- 特征数量不固定(不同数据集的特征数不同,以及特征生成会改变特征数量)
该论文的解决办法是,将输入层设为全连接层,每次只输入一个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
,就是优化的特征
论文中使用的主体方法如下:
主要分为三个部分:
- 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
从上述生成的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,...,h∣x∣}的和作为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=−x∑r=1∑∣x∣logPψ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′=hr∈Hx∑(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外面套上一层强化学习;
- 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