7

おそらく、配列をz 正規化するときに何か間違ったことをしているのでしょう。誰かがこれを見て、何が起こっているのかを提案できますか?

Rで:

> data <- c(2.02, 2.33, 2.99, 6.85, 9.20, 8.80, 7.50, 6.00, 5.85, 3.85, 4.85, 3.85, 2.22, 1.45, 1.34)
> data.mean <- mean(data)
> data.sd <- sqrt(var(data))
> data.norm <- (data - data.mean) / data.sd
> print(data.norm)
 [1] -0.9796808 -0.8622706 -0.6123005  0.8496459  1.7396910  1.5881940  1.0958286  0.5277147  0.4709033 -0.2865819
[11]  0.0921607 -0.2865819 -0.9039323 -1.1955641 -1.2372258

Python で numpy を使用する場合:

>>> import string
>>> import numpy as np
>>> from scipy.stats import norm
>>> data = np.array([np.array([2.02, 2.33, 2.99, 6.85, 9.20, 8.80, 7.50, 6.00, 5.85, 3.85, 4.85, 3.85, 2.22, 1.45, 1.34])])
>>> data -= np.split(np.mean(data, axis=1), data.shape[0])
>>> data *= np.split(1.0/data.std(axis=1), data.shape[0])
>>> print data

[[-1.01406602 -0.89253491 -0.63379126  0.87946705  1.80075126  1.64393692
   1.13429034  0.54623659  0.48743122 -0.29664045  0.09539539 -0.29664045
  -0.93565885 -1.23752644 -1.28065039]]

私はnumpy間違って使用していますか?

4

3 に答える 3

17

異なる結果が得られる理由は、標準偏差/分散の計算方法に関係しています。R は denominator を使用して計算しますN-1が、numpy は denominator を使用して計算しますN。を使用して R の結果に等しい numpy の結果を取得できます。これにより、分散を計算するときにdata.std(ddof=1)numpy に分母として使用するように指示されます。N-1

于 2012-06-28T01:42:09.120 に答える
9

あなたの NumPy の結果は正しいと思います。ただし、より簡単な方法で正規化を行います。

>>> data = np.array([2.02, 2.33, 2.99, 6.85, 9.20, 8.80, 7.50, 6.00, 5.85, 3.85, 4.85, 3.85, 2.22, 1.45, 1.34])
>>> data -= data.mean()
>>> data /= data.std()
>>> data
array([-1.01406602, -0.89253491, -0.63379126,  0.87946705,  1.80075126,
        1.64393692,  1.13429034,  0.54623659,  0.48743122, -0.29664045,
        0.09539539, -0.29664045, -0.93565885, -1.23752644, -1.28065039])

2 つの結果の違いは正規化にありますr。R の結果として:

>>> r / data
array([ 0.96609173,  0.96609173,  0.96609173,  0.96609179,  0.96609179, 0.96609181,  0.9660918 ,  0.96609181,
        0.96609179,  0.96609179,        0.9660918 ,  0.96609179,  0.96609175,  0.96609176,  0.96609177])

したがって、2 つの結果はほとんど単純に比例します。したがって、R と Python で得られた標準偏差を比較することができます。

PS : 考えてみると、NumPy と R の分散は同じように定義されていない可能性があります。N要素の場合、一部のツールは、分散を計算するときにN-1ではなく で正規化します。Nこれを確認することをお勧めします。

PPS :不一致の理由は次のとおりです: 因子の違いは、2 つの異なる正規化規則に起因します: 観察された因子は、単純に sqrt(14/15) = 0.9660917… (データには 15 要素があるため) です。したがって、R で Python と同じ結果を得るには、R の結果をこの係数で割る必要があります。

于 2012-06-28T01:31:49.347 に答える