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_prob
    noisy_data = clean_data.clone()
    noisy_data[mask] = 0  # 用0填充被遮蔽区域
    
    # 添加高斯噪声(模拟测量误差)
    noise = torch.randn_like(clean_data) * 0.1
    noisy_data += noise
    
    return 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值