文献阅读—GAIN:Missing Data Imputation using Generative Adversarial Nets

文章提出了一种填补缺失数据的算法—GAIN。生成器G观测一些真实数据,并用真实数据预测确实数据,输出完整的数据;判别器D试图去判断完整的数据中,哪些是观测到的真实值,哪些是填补的值。给D提供一些额外的提示信息,保证G可以学习期望的分布。提示向量向D透露了原始数据的部分信息。在多个数据集上测试了算法,算法效果较好。

一.引言

1.缺失数据可以分成三类:

        MCAR:完全随机缺失,数据的缺失不依赖于任何不完全变量和完全变量。

        MAR:随机缺失,数据的缺失不是完全随机的,依赖于其他完全变量。

        MNAR:完全非随机缺失,数据的缺失不依俩于不完全变量自身。

文章数据是基于MCAR的。

2.比较先进的填补方法:MICE、MissForest、matrix completion、Expectation Maximization、DAE 、GAN等。

        但是现有的方法存在各种缺陷。(Garc´ıa-Laencina et al., 2010)的方法加设了一个分布,但数据类型是混合型、连续变量时不适用。(Vincent et al., 2008)的DAE算法,实践效果好,但训练过程需要完整数据。(Gondara &Wang,2017)的DAE算法不需要完整数据,但它只能利用观察到的部分去学习数据的表示。

        论文提出了GAIN算法,它是GAN算法的推广。核心就是对抗,生成器要使判别器的误判率最大,判别器要使分类误差最小。

二、问题描述

 \chi = \chi _{1}\times \chi _{2}\times ...\times \chi _{d}  —  d维空间

X = (X_{1},...,X_{d})  —  数据向量(取值于\chi的随机向量)

### 缺失值填补方法 处理数据集中缺失值的一种常见策略是通过派生变量来进行填充。这种方法不仅能够保留更多的样本量,还能提供关于缺失模式的信息。常见的派生缺失值填补技术包括均值/中位数/众数替换、K近邻插补以及基于模型的预测。 #### 均值/中位数/众数替换 对于数值型特征,可以采用该列中的平均值或中位数来替代缺失值;而对于分类特征,则通常使用最频繁出现的类别即众数进行填充[^1]。 ```python import pandas as pd from sklearn.impute import SimpleImputer # 创建一个简单的DataFrame用于演示 data = {'Age': [25, None, 30], 'City': ['New York', 'Los Angeles', None]} df = pd.DataFrame(data) # 使用SimpleImputer类实现均值和众数填充 age_imputer = SimpleImputer(strategy='mean') city_imputer = SimpleImputer(strategy='most_frequent') df['Age'] = age_imputer.fit_transform(df[['Age']]) df['City'] = city_imputer.fit_transform(df[['City']]) print(df) ``` #### K近邻(KNN) 插补法 此方法利用距离度量找到最近邻居并据此估计缺失值。它适用于具有多个输入特性的复杂情况,在保持原始分布的同时有效地填补空缺位置。 ```python from sklearn.impute import KNNImputer knn_imputer = KNNImputer(n_neighbors=2) imputed_data_knn = knn_imputer.fit_transform([[None, 2], [1, 3], [4, None]]) print(imputed_data_knn) ``` #### 基于模型的预测 当存在较强的相关关系时,可以通过构建回归或其他类型的机器学习模型来预测缺失的数据点。这需要先分离含有完整记录的部分作为训练集,并以此为基础建立预测器去推断其他部分未知的位置。 ```python from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer from sklearn.linear_model import BayesianRidge iterative_imputer = IterativeImputer(estimator=BayesianRidge(), max_iter=10, random_state=0) X_full = iterative_imputer.fit_transform(X_incomplete) ``` 以上几种方式都是有效的派生缺失值填补手段,具体选择取决于实际应用场景下的需求与特性分析结果。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值