GAIN: Missing Data Imputation using Generative Adversarial Nets(基于对抗生成网络实现缺失数据插补)
缺失数据插补算法问题背景
缺失数据
缺失数据是一个普遍的问题。数据可能会因为没有被收集、记录而丢失。比方说在医疗领域,有的数据会被认为没必要或不重要而遗弃,有的会意外地没有被记录,还有的由于获取成本高(困难、危险)而不全。缺失数据通常可基于似然性划分为三种类型:
MCAR完全随机缺失: 数据缺失的原因与数据无关在所有情况下丢失的概率都相同。e.g. 一个耗尽电量的体重秤在所有情况下缺失概率都一样。
MAR随机缺失:数据缺失仅在观察到的数据定义的组内相同。e.g. 当把体重秤放在软表面会比硬表面有更多缺失,但能假设放置在某种硬度表面情况的缺失概率一样。
MNAR非随机:数据缺失的概率由于未知的原因而不同。e.g. 体重秤的机械结构可能会随着时间的推移而磨损,随着时间的推移产生更多的缺失数据,但我们可能没有注意到这一点。
在GAIN这篇文章里,主要是针对MCAR数据提出填补算法。
插补算法
插补算法能基于观察或测量到的数据估计丢失的数值。插补算法有被应用在图像隐藏/含混(image concealment)、数据压缩、异常检测等领域。目前的插补算法可大致分为判别模型或生成模型 ,它们分别有多种实现方法:
- **Discriminative Model判别模型:**基于条件概率分布(conditional probability distribution),
P
(
C
∣
X
)
P(C|X)
P(C∣X). e.g. Logistic Regression
-
MICE, Multiple Imputation by Chained Equations (链式方程的多重插补)]:通过一系列迭代的预测模型来“填充”(插补)数据集中的缺失数据。在每次迭代中,将使用数据集中的其他变量来估算数据集中的每个指定的变量,这些迭代持续运行,直到满足收敛为止。
-
MissForest:利用随机森林来填补缺失值的非参数方法,可以适用于任何类型的数据(连续、离散)。首先,使用中值插补填充缺失值。然后,将缺失值标记为“预测”,将其他值标记为训练行,将它们输入到随机森林模型中,该模型被训练用于预测,在这种情况下,是基于Score的Age。然后填充为该行生成的预测以生成转换后的数据集。
-
matrix completion:矩阵补全可以通过矩阵分解(matrix factorization)将一个含缺失值的矩阵 X X X分解为两个(或多个)矩阵,然后这些分解后的矩阵相乘就可以得到原矩阵的近似 X ′ X' X′,我们用这个近似矩阵 X ′ X' X′ 的值来填补原矩阵 X X X 的缺失部分。
-
- Generative Model生成模型: 基于联合特征和类概率分布(joint features and class probability distribution),
P
(
C
,
X
)
P(C,X)
P(C,X) . e.g. Naïve Bayes.
-
Expectation Maximization(EM算法):首先根据己经给出的观测数据,估计出模型参数的值;然后再依据上一步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前己经观测到的数据重新再对参数值进行估计,然后反复迭代,直至最后收敛,迭代结束。
-
Deep Learning:
- Denoising AutoEncoders (DAE) :DAE以一定概率把输入层节点的值置为0,从而得到含有噪音的模型输入
x
~
\tilde{x}
x~。这和dropout很类似,不同的是dropout是隐含层中的神经元置为0。以这丢失的数据
x
~
\tilde{x}
x~去计算
y
y
y,计算
z
z
z,并将
z
z
z与原始
x
x
x做误差迭代,这样,网络就学习了这个缺失的数据。
- Generative Adversarial Nets (GAN)
- Denoising AutoEncoders (DAE) :DAE以一定概率把输入层节点的值置为0,从而得到含有噪音的模型输入
x
~
\tilde{x}
x~。这和dropout很类似,不同的是dropout是隐含层中的神经元置为0。以这丢失的数据
x
~
\tilde{x}
x~去计算
y
y
y,计算
z
z
z,并将
z
z
z与原始
x
x
x做误差迭代,这样,网络就学习了这个缺失的数据。
-
Generative Model的局限
这里主要探讨了生成模型的局限。
- EM算法:当数据集包含混合的分类变量和连续变量时,对基础分布做出假设并且无法很好地概括。
- DAE: 在训练期间需要完整的数据,然而获得完整的数据集是不可能的。虽然有的DAE 使用不完整的数据集,但是它仅利用了已观察到的值来学习数据表征。
概括GAIN的创新点和组成
- 创新点:可以使用不完整的数据成功进行插补
- 组成:
- 生成器:通过最大化判别器的错误率,尽可能准确地插补缺失值。
- 判别器:通过训练来最小化分类loss,尽可能区分已观测部分(observed components)和插补部分(imputed components)。
问题公式化表述
首先考虑问题发生在一个d维空间(d-dimensional space):
χ
=
χ
1
×
⋯
×
χ
d
\chi = \chi_{1} \times \dots \times \chi_{d}
χ=χ1×⋯×χd
假设一个随机变量(random variable)是这个数据向量(data vector):
X
=
(
X
1
,
…
,
X
d
)
X = (X_{1} , \dots , X_{d})
X=(X1,…,Xd)
再假设一个由0、1构成的随机变量作为掩码向量(mask vector):
M
=
(
M
1
,
…
,
X
d
)
M = (M_{1} , \dots , X_{d})
M=(M1,…,Xd)
对于
i
∈
{
1
,
…
,
d
}
i \in \left \{ 1,\dots ,d \right \}
i∈{1,…,d},定义一个新的空间,它由一个新的随机变量
X
~
=
(
X
~
1
,
…
,
X
~
d
)
\tilde{X} = \left ( \tilde{X}_{1} , \dots , \tilde{X}_{d} \right )
X~=(X~1,…,X~d)构成,
X
~
i
\tilde{X}_{i}
X~i是仅保留原数据向量里的未缺失数据,
∗
*
∗则指代未观测到的数据:
X
~
=
{
X
~
i
,
if
M
i
=
1
∗
,
otherwise
\tilde{X}=\begin{cases} & \tilde{X}_{i}, \text{ if } M_{i}=1 \\ & *, \text{ otherwise } \end{cases}\\
X~={X~i, if Mi=1∗, otherwise
(小写字母指代随机变量的实例化e.g.
x
~
i
\tilde{x}_{i}
x~i,
1
1
1代表有多个1的向量)
GAIN架构
源数据
生成器
X ˉ = G ( X ~ , M , ( 1 − M ) ⊙ Z ) \bar{X}=G(\tilde{X}, M,(1-M) \odot Z) Xˉ=G(X~,M,(1−M)⊙Z)