2015-02-09 194 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

相关问题