使用Python进行高斯过程回归中培训数据集的数据增强



我正在处理Scikit-Learn的高斯过程回归问题。为了执行预测,我有一个数据集,该数据集包含3D坐标中传感器的10个不同位置:例如,

sensor1坐标:

[[  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 ]]

我用一项离开技术执行GPR,因此在每次运行中,我都使用9个3D坐标。训练我的模型并在1个坐标上进行测试。然后我更改置换率。

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

  1. 在Python中有什么方法可以为我的数据做吗?
  2. 是否有任何限制适用于我上述数据的增强。我可以为特定的3D坐标添加多少噪声。?
  3. 添加的新噪声数据,例如对于列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

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

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

这应确保所得噪声数据的标准偏差小于0.2的阈值。

最新更新