gpt4 book ai didi

python - 具有较小数据集的异常值检测方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:00 25 4
gpt4 key购买 nike

我有一个 python 函数,它将较小图像列表 boxes(表示为数组)和整个图像 img 作为参数并找到异常值。异常值将明显比列表中的其他图像更亮或更暗,但更常见的情况是更暗。

def find_outliers(boxes, img):
means = [np.mean(box['src']) for box in boxes]
asc = sorted(means)
q1, q3 = np.percentile(asc, [25,75])
iqr = q3 - q1
lower = q1 - (1.5 * iqr)
upper = q3 + (1.5 * iqr)

# print('thresholds:', lower, upper)
return list(filter(lambda x: np.mean(x['src']) < lower or np.mean(x['src']) > upper, boxes))

这种方法允许我根据图像创建阈值,而不是提出硬性值,这在我的情况下是理想的。如果我继续这种方法,我需要解决 3 个问题。

  1. 有时较亮/较暗的图像数量超过正常图像。这些图像具有极端值,这会使我的离群值方法产生偏差,认为它们是正常的。
  2. 有时 boxes 的数量非常少(3 或 4)。这使得该方法很难找到足够的下限和上限。
  3. 下限和上限可以为负,但我的所有值都将大于或等于 0。

是否有更适合此类问题的统计方法?有没有其他方法可以根据图像建立阈值?

注意:我也尝试过标准偏差离群值方法,但这种方法不适合这种情况。

最佳答案

我们不是在框列表中寻找异常值,而是计算相对于整个图像的下边界和上边界,并且平均灰度值超出这些边界的任何框都被视为异常值:

def find_outliers(boxes, img):
q1, q3 = np.percentile(img, [25,75])
iqr = q3 - q1
lower = q1 - (1.5 * iqr)
upper = q3 + (1.5 * iqr)

# print('thresholds:', lower, upper)
return list(filter(lambda x: np.mean(x['src']) < lower or np.mean(x['src']) > upper, boxes))

关于python - 具有较小数据集的异常值检测方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com