(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
何が起こっているのかを理解するには、放送がどのように機能するかを理解する必要があります。A[:, 1:]
has shape(m, n)
およびshapemu
であるため、これらの最後の 2 つは、最初の次元と一致するように shape の前に 1 が追加されているため、配列として扱われ、算術演算中に最初で唯一の行の値がすべての行にブロードキャストされます。s2
(n,)
(1, n)
まだ行っていない場合は、平均配列と分散配列を次のように効率的に計算できます。
mu = (A[:, 1:].mean(axis=0)
s2 = A[:, 1:].var(axis=0)
引数を利用するためnp.std
に二乗を使用したい分散については、 docsを参照してください。ddof
別の注意として、正規化は通常、分散ではなく標準偏差で割って行われます。