我试图通过(X - means) / variance
对每一行进行规范化矩阵。
由于我是用 来实现的MapReduce
,我首先计算每列的均值和标准方差,然后map
每行计算:
matrix.map(lambda X: (X - means) / variance)
但我想忽略每一行中的第一个元素X
,这是我的目标列,只包含 1 和 0。
我怎样才能做到这一点?
如果A
是一个 numpy 形状数组,(m, n + 1)
并且您还有数组mu
和s2
形状(n,)
,其中包含除第一列之外的每一列的均值和方差,您可以按如下方式进行归一化:
A[:, 1:] = (A[:, 1:] - mu) / s2
要了解 wat 继续,您需要了解广播的工作原理。由于A[:, 1:]
有 shape(m, n)
和mu
和s2
shape (n,)
,最后两个在它们的形状前加上 1 以匹配第一个的尺寸,因此它们被视为(1, n)
数组,并且在算术运算期间,它们的第一行也是唯一一行中的值被广播到所有行。
如果您还没有这样做,您的均值和方差数组可以有效地计算为
mu = (A[:, 1:].mean(axis=0)
s2 = A[:, 1:].var(axis=0)
对于您可能希望使用np.std
squared 来利用ddof
参数的方差,请参阅文档。
另外,归一化通常是除以标准差,而不是方差。