【问题标题】:How to ignore high deviations in a list如何忽略列表中的高偏差
【发布时间】:2020-01-25 08:26:53
【问题描述】:

[2.1, 2.01, 6, 2.2, 1.9][2, 7.1, 7.2, 6.9] 之类的列表 numpy(或其他库)中是否有一个函数可以删除与其他数字偏差超过 5% 的数字。在这些情况下,它将是 6 和 2。

列表大小不固定。也不是数字范围。

谢谢

【问题讨论】:

  • 你可以自己编写这个函数,但你需要清楚你想要的参考号。因为在第二个列表中,您也可以说 7.1、7.2 和 6.9 与 2 不同,应该被忽略。如何选择该参考?
  • deviate more than 5% from the other numbers 猜测你的意思是一些统计数据,作为标准。只需自己做,计算标准并删除那些高于标准乘以某个值或类似的启发式的值。 SO中有很多异常值去除的例子。
  • 不知道他们被称为异常值。谢谢@yatu

标签: python numpy math data-science standard-deviation


【解决方案1】:

尝试使用scipy.stats.zscore

from scipy.stats import zscore
a = np.array([2.1, 2.01, 6, 2.2, 1.9])
print(a[np.abs(zscore(a)) < max(a) / 5])

输出:

[ 2.1   2.01  2.2   1.9 ]

【讨论】:

    【解决方案2】:
    import numpy
    data = [2.1, 2.01, 6, 2.2, 1.9]
    
    elements = numpy.array(data)
    
    mean = numpy.mean(elements, axis=0)
    sd = numpy.std(elements, axis=0)
    final_list = [x for x in data if (x > mean - 1 * sd)]
    final_list = [x for x in final_list if (x < mean + 1 * sd)]
    print(final_list)
    
    [2.1, 2.01, 2.2, 1.9]
    

    来源:https://www.kdnuggets.com/2017/02/removing-outliers-standard-deviation-python.html

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 1970-01-01
      • 2015-03-05
      • 2016-02-11
      • 2020-09-22
      • 1970-01-01
      • 2020-10-08
      • 2022-11-17
      • 2012-12-03
      相关资源
      最近更新 更多