使用python在高斯过程回归中训练数据集的数据增强

Posted

技术标签:

【中文标题】使用python在高斯过程回归中训练数据集的数据增强【英文标题】:Data augmentation for training dataset in gaussian process regression with python 【发布时间】:2018-08-05 03:15:58 【问题描述】:

我正在使用 scikit-learn 解决高斯过程回归问题。为了执行预测,我有一个数据集,其中包含传感器在 3D 坐标中的 10 个不同位置:例如

传感器 1 坐标:

[[  30.1678 -173.569   725.724 ]
 [  29.9895 -173.34    725.76  ]
 [  29.9411 -173.111   725.768 ]
 [  29.9306 -173.016   725.98  ]
 [  29.6754 -172.621   725.795 ]
 [  29.5277 -172.274   725.903 ]
 [  29.585  -171.978   726.111 ]
 [  29.4114 -171.507   726.188 ]
 [  29.3951 -170.947   726.173 ]
 [  29.3577 -170.196   726.384 ]]

我使用 Leave One Out 技术执行 GPR,因此在每次运行中我使用 9 个 3D 坐标。训练我的模型并在 1 个坐标上对其进行测试。然后我改变排列并继续。

为了防止过拟合问题,我想使用数据增强来扩大(或添加噪声)我的训练数据。不幸的是,我见过的大多数数据增强技术都用于图像(随机旋转、裁剪、翻转等)。我的问题是:

    有没有什么方法可以在 python 中处理我的数据以及如何处理? 是否有任何限制适用于我的上述数据的扩充。我可以为特定的 3D 坐标添加多少噪音? 要添加的新噪声数据,例如对于列 x 应介于最小 (29.585) 和最大 (30.1678) 值之间。我对么?或者也可以按行完成?

编辑

所以,我手动生成了噪音。

def use_data_augmentation(self, data):
   sizeOfData= 1000
        
   # Add noise to column x
   # Find min/max of each individual col
   noiseColXMin = np.min(data[:, 0])
   noiseColXMax = np.max(data[:, 0])

   # Generate random number between min/max
   addNoiseToColX = self.create_random_floats(noiseColXMin, noiseColXMax, sizeOfData)

   # Add noise to column y
   ...
   # Add noise to column z
   ...

   # Convert three 1D arrays to one 3D array
   addInputNoiseTotal = np.array([addNoiseToColX, addNoiseToColY, addNoiseToColZ]).T
   print('addInputNoiseTotal :\n', addInputNoiseTotal,
      '\nSDX:', np.std(addInputNoiseTotal[:, 0]),
      '\nSDY:', np.std(addInputNoiseTotal[:, 1]),
      '\nSDZ:', np.std(addInputNoiseTotal[:, 2]))

def create_random_floats(low, high, size):
   return [random.uniform(low, high) for _ in range(size)]

我现在的问题是:如果我通过random.uniform(low, high, size) 在最小值/最大值之间生成浮点数,那么噪声数据的标准偏差有时会大于0.81.0。因此 GPR 预测的 RMS 更差。如何设置限制,以使生成的浮点数的 SD 不能大于例如0.2?

【问题讨论】:

没人知道吗? 【参考方案1】:

鉴于两个独立随机变量之和的方差是它们的方差之和,您可以计算数据集的方差,并使用统一方差的事实随机变量等于(high - low)**2 / 12,标准差为方差的平方根,选择满足条件的highlow

np.sqrt(np.var(dataset) + (high - low)**2 / 12) <= 0.2

这应该确保生成的噪声数据的标准偏差小于或等于您的阈值0.2

【讨论】:

以上是关于使用python在高斯过程回归中训练数据集的数据增强的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn python 中使用高斯过程回归时出错

scikit-learn 中的多输出高斯过程回归

我们可以在 python 中使用逻辑回归预测数据集的未来值吗?

多元回归:理解机器学习

如何在大型数据集上执行克里金(高斯过程回归)?

Python数据挖掘—回归—KNN