少样本数值型数据集 | 数据增强

对于小样本数字型数据集,数据增强的有效方法主要集中在创造新的样本、调整现有样本的特征、或者通过生成模型来模拟真实分布。下面是个人搜集到的方法及部分代码。希望对大家的科研 / 工作有所帮助!

1. 噪声注入 (Noise Injection)

  • 方法:在原始数据上添加少量的随机噪声,生成新的样本。噪声可以是高斯噪声、均匀分布噪声或其他分布的噪声。
  • 实现:对于每个特征,可以加上一个服从小均值和小方差的正态分布噪声,如 X_augmented = X + N(0, 0.01).
  • noise_factor  可以设定在 0.01 到 0.05 之间。具体值应取决于数据的特性和任务要求。较小的值如 0.01 代表非常轻微的扰动,适合对特征要求比较严格的任务;如果数据对小幅变化有一定的容忍度,可以尝试较大值如 0.05。
  • 优势:通过增加少量噪声,可以增强模型的鲁棒性,同时不破坏数据的结构和分布。
  • import numpy as np
    
    def add_noise(X, noise_factor=0.01):
        noise = noise_factor * np.random.normal(loc=0.0, scale=1.0, size=X.shape)
        X_noisy = X + noise
        return X_noisy
    
    # 应用噪声注入
    X_noisy = add_noise(X_train, noise_factor=0.05)

2. SMOTE (Synthetic Minority Over-sampling Technique)

  • 方法:SMOTE是一种通过插值生成新样本的技术,通常用于解决类别不平衡问题。但在回归问题中,它可以通过在原始样本之间生成新样本来扩充数据集。
  • 实现:通过在原有数据点之间插值生成新的数据。例如,对于两个样本X1X2,生成新样本X_new = X1 + alpha * (X2 - X1),其中alpha是随机值。
  • 优势:能够保持数据的局部分布,特别适合少数类样本的增强。

3. 特征扰动 (Feature Perturbation)

  • 方法:对某些特征进行随机的小幅度扰动,以产生新的数据点。扰动可以通过比例缩放、随机删除部分特征、或者打乱特征顺序等方式完成。
  • 实现
    • 对于数值特征,采用X_augmented = X * (1 + delta),其中delta是随机值,如在[-0.05, 0.05]范围内。
    • 可以随机移除一些特征或对某些特征进行值的交换。
  • 优势:生成的样本保持了数据的原始特性,并通过轻微扰动增加了数据的多样性。

4. 对比度增强 (Contrastive Learning Data Augmentation)

  • 方法:对比学习方法通过创建相似但不同的数据点,训练模型能够更好地区分正样本和负样本。
  • 实现
    • 创建两组数据集,分别添加不同类型的扰动,鼓励模型学习区分细微差别。
    • 比如通过缩放、添加不同的噪声等生成增强数据。
  • 优势:通过对比学习,模型能够在更具挑战性的情况下提升特征的鉴别能力。

5. 生成对抗网络 (GANs)

  • 方法:使用生成对抗网络来生成新的数据样本。GAN可以通过学习数据分布,生成与原始数据分布相似的新样本。
  • 实现
    • 训练GAN模型,生成与原始数据分布类似的样本。
    • 这种方法特别适用于小样本场景,因为GAN可以生成无限量的新样本。
  • 优势:GAN能够捕捉数据的复杂分布结构,有效扩展数据集。

6. 自回归模型 (Autoencoders)

  • 方法:使用自动编码器(Autoencoder)生成增强数据。自动编码器通过压缩和重建数据,可以生成新的、相似的数据样本。
  • 实现
    • 训练一个自编码器,将原始数据压缩为潜在空间表示,再通过解码器生成新的样本。
    • 对潜在空间进行少量扰动,解码后可以生成新数据。
  • 优势:自动编码器在重建数据的同时,可以捕获数据的结构和特征,从而生成合理的新样本。

7. 线性插值 (Linear Interpolation)

  • 方法:在线性空间中通过插值生成新样本,适用于回归问题。
  • 实现
    • 选择两个相似的数据点X1X2,生成新样本X_new = lambda * X1 + (1 - lambda) * X2,其中lambda是随机值,通常在[0,1]之间。
  • 优势:插值生成的新样本是原始样本的线性组合,保持数据特性的同时增加样本量。

8. 特征缩放与归一化 (Feature Scaling and Normalization)

  • 方法:对数据进行缩放和归一化,可以帮助增强模型的泛化能力。
  • 实现:对原始数据的特征进行不同的缩放变换(例如Min-Max ScalingZ-score Normalization),并生成新的增强数据。
  • 优势:这种方法有助于减少由于数据量小带来的不均匀性,同时提高模型在小样本数据集上的表现。

9. 伪标签 (Pseudo-Labeling)

  • 方法:在有少量标签数据的情况下,使用模型预测无标签数据的标签,并将这些伪标签数据加入到训练集中。
  • 实现:通过初始模型对无标签数据进行预测,筛选出置信度较高的样本,加入到训练集中进行增强。
  • 优势:这种半监督学习方法可以有效利用少量有标签数据,扩大数据集规模。
  • import numpy as np
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.model_selection import train_test_split
    
    # 初始模型训练
    def train_initial_model(X, y):
        model = RandomForestRegressor(n_estimators=100)
        model.fit(X, y)
        return model
    
    # 为无标签数据生成伪标签
    def generate_pseudo_labels(model, X_unlabeled, threshold=0.9):
        predictions = model.predict(X_unlabeled)
        # 这里可以根据某种置信度度量来筛选伪标签,这里假设使用直接的预测值筛选
        high_confidence_idx = np.abs(predictions) > threshold
        pseudo_labels = predictions[high_confidence_idx]
        X_high_confidence = X_unlabeled[high_confidence_idx]
        return X_high_confidence, pseudo_labels
    
    # 伪标签训练
    def train_with_pseudo_labels(X_train, y_train, X_unlabeled):
        # 初步模型
        model = train_initial_model(X_train, y_train)
        
        # 生成伪标签
        X_pseudo, y_pseudo = generate_pseudo_labels(model, X_unlabeled)
        
        # 合并真实和伪标签数据
        X_combined = np.vstack((X_train, X_pseudo))
        y_combined = np.concatenate((y_train, y_pseudo))
        
        # 重新训练模型
        final_model = RandomForestRegressor(n_estimators=100)
        final_model.fit(X_combined, y_combined)
        
        return final_model
    
    # 假设你有无标签数据
    X_unlabeled = np.random.rand(100, X_train.shape[1])
    
    # 使用伪标签技术增强数据
    final_model = train_with_pseudo_labels(X_train, y_train, X_unlabeled)

10. 特征交互与组合 (Feature Interaction and Synthesis)

  • 方法:通过组合现有特征来生成新的特征,这在小样本数据集上能够显著提高模型的表现。
  • 实现
    • 进行特征交叉、特征多项式扩展(如X^2, X1*X2),或者构造新的统计特征(如均值、方差等)。
  • 优势:生成的新特征能够为模型提供更多的信息,从而提高模型的拟合能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值