版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Forlogen/article/details/89534235
论文地址:https://arxiv.org/abs/1806.02920
论文GitHub:https://github.com/jsyoon0823/GAIN
收录:ICML2018
总览
这篇论文中作者提出了一种使用GAN填补缺失值的新框架GAIN,基本原理和标准的GAN相似,不同的在于根据具体问题所做的架构方面的改变。在GAIN中主要包括以下三个部分:
- Generator,G:它用来观察真实数据的每一部分,然后根据观察的结果填补缺失数据的部分,输出一个填补后完整的向量
- Discriminator,D:它接受一个完整的向量,来判别哪一部分数据是真实观察到的,哪一部分是被填补的
- Hint Vector,hint:它揭示了原始数据中缺失部分的某些信息,让D更加关注它所提示的部分,同时也逼迫G生成更加接近真实的数据用来填补
当然实现的细节并不是这么简单,具体细节正文中会介绍。最后作者通过在多个数据集上进行实验,证明了GAIN的性能比之前各种填补算法都要好。
背景
在实际的问题中,数据的缺失是一个很普遍的现象,有时因为数据本身就很难获得,有时是因为各种原因而造成了数据的丢失。作者的关注领域主要是医疗数据,此外也提出了数据填充算法同样也可以用在其他的方面,比如图像含混、数据压缩等等。
缺失的数据可以分为以下的三大类:
- MCAR:数据的缺失完全是随机的,它不依赖于任何的变量
- MAR:数据的缺失不完全是随机的,仅依赖于可以观察到的变量
- MNAR:数据的缺失不是随机的,它依赖于目前可以观察到的变量,同样也依赖于未观察的变量,我们无法通过可以观察到的变量来掌握数据的情况
本文作者主要是针对MCAR这种情况提出新的填补算法,并与在这种背景下的其他先进的填补算法进行了比较。
同时填补算法也可以分为判别式和生成式两种:
- generative methods:这些方法主要依赖于EM算法和深度学习,如DAE、GAN等
- discriminative methods:如MICE、MissForest、matrix completion等
但是目前的生成式填补算法存在着一些缺点,它们是以一种基于对数据分布的先验假设的方法,当数据中含有混合类别和连续变量时,它的泛化能力就会很差。DAE在一定程度上解决了这个问题,但是它在训练的过程中需要完成的数据集,在很多情况下,缺失的数据部分在一定程度上反映了完整数据集的内在结构信息,所以获取到完成的数据集是不太可能的。DAE的另一种方法允许使用不完整的数据集进行训练,但是它只能根据观察到的部分来表示数据。而使用DCGANs来完成图像填补的算法,同样需要完整的数据集来训练判别器。
本文作者提出的GAIN是GAN的一个泛化版本,它基本上采用了GAN的架构,在数据集不完整的情况下,它也可以很好的处理数据的填补。在GAIN中,生成器的目标是精确的填补缺失的数据,判别器的目标是准确的分辨数据是填补的还是真实的。所以判别器要最小化分类误差率,而生成器要最大化判别器的分类误差率,这样两者就处在了一种相互对抗的过程中。同时为了使这个对抗过程得到更加理想的结果,还为判别器提供了关于数据的部分信息的hints,逼迫生成器生成的样本接近于真实的数据分布。
问题的公式化表示
首先给出GAIN的架构图
为了方便公式的推导,先做以下的规定:
-
χ:χ=χ1×…×χd,表示一个d维的空间
-
X:X=X1×…×Xd,表示取自
χ空间中的一个随机变量,将其称为数据向量
-
P(X): 表示X的数据分布
-
M:M={M1…Md},表示取值{0,1}的随机变量,将其称为掩模向量,,它反映了哪些变量是观察数据,哪些是填补的
-
χi~:
χi~=χi∪{∗},
i=1,2,…,d,
χi~表示对于每一维定义的新空间,其中
∗表示不在
χ任何一维空间
χi中的数据
-
χ~:
χ~=χ1~×…×χd~,表示新生成的d维空间
-
X~:X~=X1~×…×Xd~,表示取样自
χ~的一个随机变量,它的取值规定如下:
Xi~={Xi,∗,if Mi = 1otherwise
可以从
X~复原
M
-
x~i,i=1,2,...,n:表示
X~空间中的第
i个数据
-
mi,i=1,2,...,n:表示从
X~复原
M的元素
-
D:
D={x~i,mi},i=1,2,...,n,表示要使用的数据集
我们的目标就是根据上面定义的内容填充
x~i缺失的部分,通常使用条件概率
P=(X∣X~=x~i)来填补D中缺失的值。这里是尝试找到数据分布模型,而不仅仅是求期望。通过多次的填补,我们就可以把握数据内在的不确定性。
GAIN
这部分通过由GANs驱动的模拟
P=(X∣X~=x~i)的方法来阐述GAIN的思路。
Generator
G将
X~、
M和
Z做为输入,输出
Xˉ,
Z是一个d维的噪声,独立于所有的变量。
定义两个随机变量:
Xˉ=G(X~,M,(1−M)⊙Z)X^=M⊙X~+(1−M)Xˉ
Xˉ:指的是填补值的向量,不含已观察到的数据部分,这里需要注意的是,G会为每一部分都输出一个值,即使有些部分不是缺失的。
X^:指的是填补后完整的数据向量,它观察
X~局部的信息,然后用
Xˉ中的估算值代替对应位置的
∗得到。
使用
(1−M)⊙Z代替
Z,是为了使得让噪声数据的维度匹配目标分布,即告诉
Z在
X~中哪些部分是需要使用噪声进行填充的。
Discriminator
和标准的GAN一样,判别器被用来作为一个对抗者训练G。不同之处在于标准的GAN中,生成器生成结果要么全是真实的,要么全是假的,判别器给出的结果也只有真假两个选择。但是在GAIN中,生成器给出的结果有些部分是真实的,有些部分是生成的;判别器也不是识别整个向量的真假,而是试图判别哪些部分是真的,哪些是生成的。这就相当于预测
M中
m的值。
D(X^)中的第
i个成分表示的是
X^的第
i个成分是观察数据的概率
Hint
这是一种提示机制,强化了G和D的对抗过程。它是一个随机变量
H,从
H中取值,
H和
H都是用户自己定义的。
H中的元素
h依赖于分布
H∣M=m,将其输入到D中。基于条件
X^=x^和
H=h,此时
D(x^,h)中第
i个部分就反映了它是真实数据的概率。
H定义的不同,那么给D的提示信息就不同,从而可以训练出具有多个分布的G,根据D的结果来选择最优的那一个。
目标
通过最大化正确预测M的概率来训练D,通过最小化D能正确预测M的概率来训练G。所以类似于GAN,定义如下的评估函数:
V(D,G)=EX^,M,H[MTlogD(X^,H)+(1−M)Tlog(1−D(X^,H))]
因此GAIN的目标就是
GminDmaxV(D,G),然后使用交叉熵来定义损失函数,如下所示
L(a,b)=i=1∑d[ailog(bi)+(1−ai)log(1−bi)]
其中
ai表示D预测结果矩阵中的元素,
bi表示对应于
ai的
M中的元素。
令
M^=D(X^,H),则目标就转换成了D能否正确预测
M的函数
GminDmaxE[L(M,M^)]
GAIN算法
首先给出算法描述的伪代码:
这里G和D都是全连接的神经网络,迭代的解决
GminDmaxV(D,G)这个最大最小优化问题。
-
判别器D的训练过程:
固定一个G和小批次的大小
kD,首先从数据集中抽样
kD个样本
(x~(j),m(j)),从
Z和
B中抽样
kD个样本
z(j)和
b(j),然后根据公式计算
x^(j)和
h(j)。根据数学推理知道,当G固定时,D的唯一输出是对应于每个样本的
bi=0的部分,因此我们只训练D来给出
bi=0部分的输出。
定义关于D的损失函数:
LD(m,m^,b)=i:bi=0∑[milog(mi^)+(1−mi)log(1−mi^)]
D根据以下的准则来训练:
Dminj=1∑kDLD(m(j),m^(j),b(j))
-
生成器G的训练过程:
使用最近更新过的D,以小批量
kG进行训练。G实际上输出的是一个包含所有数据的向量,因此在G的训练过程中,我们不仅要使缺失地方
(mj=0)填补的值成功的骗过D,还要保证真实被观察的数据(
mj=1)的输出也要接近真实值。
为此我们需要定义两个损失函数如下所示:
LG(m,m^,b)=−i:bi=0∑(1−milog(mi^))
它用来评估填补的质量,它的值越小,表示
mi=0被D判别为
mi=1的概率越接近1。
LM(x,x′)=i=1∑dmiLM(xi,xi′)
其中
LM(x,x′)={(xi′−xi)2,−xilog(xi′),if xi is continuousif xi is binary
它表示重建误差,用来评估真实观察值经过G的输出与真实值的差距。它的值越小,说明重构后的值越接近真实值。
因此我们可以使用一个完整的损失函数评估训练过程:
Gminj=1∑kGLG(m(j),m^(j),b(j))+αLM(x~(j),x^(j))
α这里是一个超参数。
实验评估
作者通过与其他的填补算法进行对比,比较它们的效果。每个实验做10次,同时使用5折交叉验证,使用RMSE(均方根误差RMSE是观测值与真值偏差的平方与观测次数n比值的平方根,值越小越好)和AUROC(ROC曲线下的面积,值越大表示效果越好)来评估结果的优劣。
数据的缺失标准是20%。
实验1
验证GAIN中每一部分对于整体的重要性,通过每次去掉
LG、
LM、
H中的一个来和完整的GAIN进行比较,在6个不同的数据集上进行实验,结果如下
从图中我们可以看出完整的GAIN相比于缺少某一部分的GAIN的效果在每一个数据集上都好的多。
实验2
通过在5个不同的数据集上实验,比较GAIN和其他5个填补算法的效果,结果如下:
GAIN效果明显好于其他算法。
实验3
通过调整数据的缺失率、样本的数量、特征的维度来对比GAIN和MissForest、Auto-encoder的效果,结果如下
从第一个图中可以看到,GAIN在各种缺失比例的条件下,效果都优于其他两种算法。在第二个图中可以看出,随着样本数的增加,GAIN的RMSE迅速下降,并小于其他的两种算法,并且当样本数很多时,它的RMSE也是最小的。从第三个图中看出,随着特征维度的变化,GAIN的效果好于其他两种算法,特别是当特征维度很小时,MissForest和Auto-encoder显得难以处理。
实验4
评估在计算后预测的准确性方面。为了达到这个目的,使用了AUROC作为性能指标。为了公平对待所有方法,我们在所有情况下使用相同的预测模型(逻辑回归)。结果如下
从中我们可以看出,在4个数据集上实验,GAIN和其他的算法相比并没有太大的提升,这可能是填补精度虽然提升了,但是对于预测精度的帮助不大,因为可以80%被观察的数据已有足够的信息来做预测。
而且在不同的缺失率的情况下,GAIN的效果更好,可能是因为当缺失的数据多时,填补的数据对于真实数据的反映对于预测起到了重要的作用。
实验5
填补模型的相似性在于它能够保持特征-标签关系的值。通过测量填补后对特征-标签关系的影响,可以评估填补模型的同质性。作者使用不同的填补算法,从完整的信用数据集中执行Logistic Regression,得到参数
w;再从不完整的同样的数据集上执行Logistic Regression,得到参数
w^,比较
w和
w^。
作者使用了
∣∣w−w^∣∣1和
∣∣w−w^∣∣2来做评估。这些量越小,说明该算法较好地考虑了特征与标签之间的关系。结果如下
从中可以看出GAIN的效果明显好于其他的算法。
总结
作何所提出的新的框架GAIN在缺失数据填补方面有很大的提高,同样也可以将其用在推荐系统、主动感知等其他方面。