Python异常值剔除:如何移除绿色点区域上方的蓝色异常点?
针对xy相关场景的异常点过滤思路

可尝试的实现方案
- 局部加权回归残差过滤:基于x和y的相关关系拟合LOWESS/LOESS局部回归模型,得到每个蓝色点的y预测值,计算真实y和预测值的残差,对残差使用四分位距规则过滤:残差大于`Q3+1.5倍四分位距的点即为待移除的上方异常蓝色点。相比全局残差法该方案对非线性相关的局部异常点识别精度更高,完全适配当前场景中y值远高于局部趋势的异常点识别需求。
- 分箱阈值过滤:将x轴按等宽或等样本量切分为多个区间箱,每个箱内单独统计对应绿色点的y值分布,将同箱内蓝色点y值超过绿色点95分位值的点直接移除。该方案实现逻辑简单,在x轴分布均匀的场景下稳定性极强。
- 加权异常检测算法:使用孤立森林或DBSCAN算法进行离群点识别时,调高y轴特征的权重,放大异常点y值偏高的特征差异,提升目标异常点的识别精准度。
参考实现代码(Python)
import numpy as np import statsmodels.api as sm # 输入数据:blue_points为蓝色点数组,x_blue = blue_points[:,0], y_blue=blue_points[:,1] # 拟合局部加权回归模型 lowess_fit = sm.nonparametric.lowess(y_blue, x_blue, frac=0.3) y_pred = lowess_fit[:, 1] # 计算残差并计算过滤阈值 residual = y_blue - y_pred q1, q3 = np.percentile(residual, [25, 75]) iqr = q3 - q1 upper_limit = q3 + 1.5 * iqr # 过滤后保留的蓝色点 filtered_blue_points = blue_points[residual < upper_limit]
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐

