【问题标题】:how can I normalize n different set of data using a provided method which can only normalize a set of data如何使用提供的只能规范化一组数据的方法来规范化 n 组不同的数据
【发布时间】:2018-05-05 06:10:50
【问题描述】:

我有 n 组不断变化的数据,我想使用 running mean method 规范化每组数据,因为每组都有自己的均值和标准,我必须保留 n 个不同的模块来帮助我计算它。我不知道如何维护 n 个不同的 Scaler,我刚刚被告知我不能多次导入它并重命名它以获得不同的。但我不知道该怎么做。

如果需要,我的running mean方法Scaler列举如下,

class Scaler(object):
""" Generate scale and offset based on running mean and stddev along axis=0

    offset = running mean
    scale = 1 / (stddev + 0.1) / 3 (i.e. 3x stddev = +/- 1.0)
"""

def __init__(self, obs_dim):
    """
    Args:
        obs_dim: dimension of axis=1
    """
    self.vars = np.zeros(obs_dim)
    self.means = np.zeros(obs_dim)
    self.m = 0
    self.n = 0
    self.first_pass = True

def update(self, x):
    """ Update running mean and variance (this is an exact method)
    Args:
        x: NumPy array, shape = (N, obs_dim)
    """
    if self.first_pass:
        self.means = np.mean(x, axis=0)
        self.vars = np.var(x, axis=0)
        self.m = x.shape[0]
        self.first_pass = False
    else:
        n = x.shape[0]
        new_data_var = np.var(x, axis=0)
        new_data_mean = np.mean(x, axis=0)
        new_data_mean_sq = np.square(new_data_mean)
        new_means = ((self.means * self.m) + (new_data_mean * n)) / (self.m + n)
        self.vars = (((self.m * (self.vars + np.square(self.means))) +
                      (n * (new_data_var + new_data_mean_sq))) / (self.m + n) -
                     np.square(new_means))
        self.vars = np.maximum(0.0, self.vars)  # occasionally goes negative, clip
        self.means = new_means
        self.m += n

def get(self):
    """ returns 2-tuple: (scale, offset) """
    return 1/(np.sqrt(self.vars) + 0.1)/3, self.means

感谢您的建议!

【问题讨论】:

    标签: python numpy machine-learning deep-learning


    【解决方案1】:

    创建一个标量实例数组。如果每个数据集有不同的obs_dim,您可以使用[Scalar(obs_dim) for obs_dim in obs_dims]。如果您有一个obs_dim,请使用[Scalar(obs_dim) for i in range(N)],其中N 是数据集的数量。然后,您可以通过数组中的索引来引用其中的每一个。

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 1970-01-01
      • 2020-07-31
      • 2016-07-23
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      相关资源
      最近更新 更多