用python进行高斯过程回归训练数据集的数据增强

时间:2018-02-25 15:54:10

标签: python machine-learning

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

Sensor1 coords:
[[  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个coord上进行测试。然后我改变排列继续。

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

  1. 是否有任何方法可以在python中为我的数据做些什么?
  2. 根据扩大上述数据是否有任何限制。我可以为特定的3D坐标添加多少噪音。?
  3. 要添加的新噪音数据,例如对于列x,应该在最小(29.585)和最大(30.1678)值之间。我对么?或者也可以按行进行吗?
  4. 谢谢!

    修改

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

     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.8 or 1.0。因此,GPR预测的RMS更差。如何设置限制,以便生成的浮点数的SD不能比例如0.2

1 个答案:

答案 0 :(得分:0)

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

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

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