1

我试图通过(X - means) / variance对每一行进行规范化矩阵。

由于我是用 来实现的MapReduce,我首先计算每列的均值和标准方差,然后map每行计算:

   matrix.map(lambda X: (X - means) / variance)

但我想忽略每一行中的第一个元素X,这是我的目标列,只包含 1 和 0。

我怎样才能做到这一点?

4

1 回答 1

2

如果A是一个 numpy 形状数组,(m, n + 1)并且您还有数组mus2形状(n,),其中包含除第一列之外的每一列的均值和方差,您可以按如下方式进行归一化:

A[:, 1:] = (A[:, 1:] - mu) / s2

要了解 wat 继续,您需要了解广播的工作原理。由于A[:, 1:]有 shape(m, n)mus2shape (n,),最后两个在它们的形状前加上 1 以匹配第一个的尺寸,因此它们被视为(1, n)数组,并且在算术运算期间,它们的第一行也是唯一一行中的值被广播到所有行。

如果您还没有这样做,您的均值和方差数组可以有效地计算为

mu = (A[:, 1:].mean(axis=0)
s2 = A[:, 1:].var(axis=0)

对于您可能希望使用np.stdsquared 来利用ddof参数的方差,请参阅文档

另外,归一化通常是除以标准差,而不是方差。

于 2012-12-24T15:08:40.130 回答