def outlier_processing(intervals):
"""Outlier processing"""
left = [x[0] for x in intervals]
right = [x[1] for x in intervals]
# Compute Q(0.25), Q(0.75) and IQR for left-ends
lq25, lq75 = np.percentile(left, [25, 75])
liqr = lq75 - lq25
# Compute Q(0.25), Q(0.75) and IQR for right-ends
rq25, rq75 = np.percentile(right, [25, 75])
riqr = rq75 - rq25
# Outlier processing for Left and Right bounds
left_filtered = [x for x in intervals if (lq25 - 1.5 * liqr) <= x[0] <= (lq75 + 1.5 * liqr)]
right_filtered = [x for x in left_filtered if (rq25 - 1.5 * riqr) <= x[1] <= (rq75 + 1.5 * riqr)]
# Compute Q(0.25), Q(0.75) and IQR for interval length
len_values = [x[1] - x[0] for x in right_filtered]
lenq25, lenq75 = np.percentile(len_values, [25, 75])
leniqr = lenq75 - lenq25
# Outlier processing for interval length
len_filtered = [x if (lenq25 - 1.5 * leniqr) <= x <= (lenq75 + 1.5 * leniqr) else None for x in len_values]
selectors = [x is not None for x in len_filtered]
filtered_intervals = list(itertools.compress(right_filtered, selectors))
return filtered_intervals
评论列表
文章目录