2015-02-09 195 views
3

我有一個大小矩陣(61964,25)。下面是一個示例:如何計算一個數字與平均值有多少個標準偏差?

array([[ 1., 0., 0., 4., 0., 1., 0., 0., 0., 0., 3., 
      0., 2., 1., 0., 0., 3., 0., 3., 0., 14., 0., 
      2., 0., 4.], 
     [ 0., 0., 0., 1., 2., 0., 0., 0., 0., 0., 1., 
      0., 2., 0., 0., 0., 0., 0., 0., 0., 5., 0., 
      0., 0., 1.]]) 

Scikit學習提供了提供了一個有用的功能,我們的數據是正態分佈:

from sklearn import preprocessing 

X_2 = preprocessing.scale(X[:, :3]) 

我的問題,然而,就是我有一個行的基礎上工作 - 它不僅包含25個觀察值 - 所以正態分佈不適用於此。解決方案是使用t分佈,但我怎麼能在Python中做到這一點?

通常情況下,值從0到20,例如20。當我看到異常高的數字時,我會過濾掉整行。下面的柱狀圖顯示我的實際分佈是​​什麼樣子:

enter image description here

+0

的Python 3.4有一個新的模塊[統計] [1],這將達到目的爲你: [1 ]:https://docs.python.org/3/library/statistics.html – 2015-02-09 12:01:05

回答

3

scipy.stats具有的功能zscore它允許你計算值多少標準偏差是平均值(通常refered到作爲標準分以上或Z得分)。

如果arr是從你的問題的例子陣列,那麼你就可以計算出跨越25每行的Z評分如下:

>>> import scipy.stats as stats 
>>> stats.zscore(arr, axis=1) 
array([[-0.18017365, -0.52666143, -0.52666143, 0.8592897 , -0.52666143, 
     -0.18017365, -0.52666143, -0.52666143, -0.52666143, -0.52666143, 
     0.51280192, -0.52666143, 0.16631414, -0.18017365, -0.52666143, 
     -0.52666143, 0.51280192, -0.52666143, 0.51280192, -0.52666143, 
     4.32416754, -0.52666143, 0.16631414, -0.52666143, 0.8592897 ], 
     [-0.43643578, -0.43643578, -0.43643578, 0.47280543, 1.38204664, 
     -0.43643578, -0.43643578, -0.43643578, -0.43643578, -0.43643578, 
     0.47280543, -0.43643578, 1.38204664, -0.43643578, -0.43643578, 
     -0.43643578, -0.43643578, -0.43643578, -0.43643578, -0.43643578, 
     4.10977027, -0.43643578, -0.43643578, -0.43643578, 0.47280543]]) 

此計算使用人口均值和標準差爲每一行。使用樣本方差而不是(如t-統計),另外指定ddof=1

stats.zscore(arr, axis=1, ddof=1) 
+0

嗨,非常感謝您的回覆!我不知道這個功能!順便說一句,你確定我應該使用'ddof = 1'嗎?另外,爲什麼我會得到扭曲的結果;實際上,積極的一面呢?有任何想法嗎?是否因爲初始表中有很多零?我怎樣才能避免這種情況? – user706838 2015-02-09 16:22:26

+0

我也更新了我原來的問題,請看看:) – user706838 2015-02-09 16:47:12

+0

如果你想糾正樣本偏差,只使用'ddof = 1' - zscore默認使用'ddof = 0'(即總體SD)。關於你的編輯,我不知道我在編輯時是否按照你想要做的那樣去做......你想過濾出具有異常高值的行嗎? – 2015-02-09 22:31:50

相關問題