2

是否有一种 numpy 方法来确定导致高方差的数组中的值?

考虑一组数字

array([164, 202, 164, 164, 164, 166], dtype=uint16)

快速扫描显示,202 会导致高方差,如果我从列表中删除,则会大大降低方差

>>> np.var(np.array([164, 202, 164, 164, 164, 166]))
196.88888888888886

从上面的列表中删除 202 将大大减少方差

>>> np.var(np.array([164, 164, 164, 164, 166]))
0.64000000000000012

但是,如何确定违规值?

4

1 回答 1

5

假设这是您的数据:

In [19]: import numpy as np
In [167]: x = np.array([164, 202, 164, 164, 164, 166], dtype=np.uint16)

这是一个布尔数组,指示其中的哪些值x与平均值相差超过 1 个标准差:

In [170]: abs(x-x.mean()) > x.std()
Out[170]: array([False,  True, False, False, False, False], dtype=bool)

我们可以使用布尔数组作为所谓的“花式索引”来检索与平均值相差超过 1 个标准差的值:

In [171]: x[abs(x-x.mean()) > x.std()]
Out[171]: array([202], dtype=uint16)

或者,反转不等式以获取删除了“异常值”的数据:

In [172]: x[abs(x-x.mean()) <= x.std()]
Out[172]: array([164, 164, 164, 164, 166], dtype=uint16)
于 2013-08-17T10:45:41.870 回答