5.6-DAE实现
解决问题:
- 随机缺失(实验室指标未检测)
- 系统性噪声(设备测量误差)
- 类别不平衡(健康/患病人群比例悬殊)
思路:引入可控噪声 → 重建原始数据
实现步骤
(1) 数据预处理
# 预处理流程:
# a. 缺失值填充:对连续变量用中位数填补,类别变量新增"None"类别
# b. 归一化:连续变量缩放到[0,1],类别变量做one-hot编码
(2) 噪声注入
def add_noise(clean_data):# 随机掩码(模拟数据缺失)mask_prob = 0.3 # 30%的数据点被随机遮蔽mask = torch.rand(clean_data.shape) < mask_probnoisy_data = clean_data.clone()noisy_data[mask] = 0 # 用0填充被遮蔽区域# 添加高斯噪声(模拟测量误差)noise = torch.randn_like(clean_data) * 0.1noisy_data += noisereturn noisy_data
(3)forward函数
class DAE(nn.Module):def __init__(self, input_dim=256, hidden_dim=64):super().__init__()# 编码器self.encoder = nn.Sequential(nn.Linear(input_dim, 128),nn.ReLU(),nn.Linear(128, hidden_dim) # 潜在特征维度)# 解码器self.decoder = nn.Sequential(nn.Linear(hidden_dim, 128),nn.ReLU(),nn.Linear(128, input_dim),nn.Sigmoid() # 输出归一化到[0,1])def forward(self, x):corrupted_x = add_noise(x) # 注入噪声z = self.encoder(corrupted_x)recon_x = self.decoder(z)return recon_x