【发布时间】:2023-01-19 02:54:21
【问题描述】:
我正在尝试找出我为自己理解该主题而创建的数据集中的异常值。它是一个简单的 python 列表。但我无法获得理想的结果。我正在使用谷歌协作。我使用的概念是,在正态分布中,在第三个标准偏差之后,大多数异常值都存在。
代码如下:
df2=[12,13,14,15,10,12,14,15,1007,12,14,17,18,1005,14,15,16,17,13,14,1100,12,13,14,15]
outliers=[]
def detect_outliers(data):
threshold = 3 ## threshold is till 3rd standard deviation
mean = np.mean(data)
standard_deviation = np.std(data)
for i in data:
z_score = (i-mean)/standard_deviation
if np.abs(z_score)>threshold:
outliers.append(i)
return outliers
detect_outliers(df2)
我得到空列表形式的输出。 []
【问题讨论】:
-
(i-mean)/standard_deviation 都没有超过 3,所以你得到一个空的离群值列表是有道理的。如果您删除 1 或 2 个大值(超过 1000),那么您将得到孤立的大值,这些值可以通过您的方法识别为离群值
-
其他示例,您可以将值池中的值数量增加到 10 左右,并仅保留 2 或 3 个非常大的值,以便平均值更侧重于池而不是极值。使用此集合,您将检测极值作为异常值。最后,我将绘制
df2与abs(i-mean)/standard_deviation的对比图,以便您可以图形化地了解正在发生的事情 -
有效。实际上,我只是随机取了这些数字,我认为由于与列表中的其他数字相比存在 3 个大数字,所以它可能会显示所有三个数字。
-
还要小心处理异常值。离群值不一定是荒谬的值,它们只能反映特定的分布(例如对数正态分布)。您通常需要一个理由来称异常值为“荒谬的值”(例如设备错误、欺诈、训练不足)
-
嘿,你能帮我解决另一个与 anaconda 相关的问题吗
标签: statistics outliers