我试图自动检测x,y散点图中的某个数据点。我有成千上万个这样的方法,所以我需要实现一种在准确性和灵敏度之间进行良好权衡的方法。从视觉上看,我可以看到我的“异常”数据点,但我非常努力地在统计上拾取它们。
这是我的x,y数据的典型散点图(请在此处找到附加的xy数据:https://onlinetextsharing.com/untitled-722):
Scatterplot
我最感兴趣的是识别具有正偏差的数据点,即下面用红色圈出的数据点:
Outliers
用蓝色圈起来的可能是“异常的”,但我知道它们可能离主集群太近了,无法清楚地(和/或统计学上)被选为异常。负偏差(即用绿色圈出的)也可以标记为异常,但我对它们不太感兴趣。
我试图实现的是像下面的图表(altough任何其他方法都是非常受欢迎的)。基本上,我想拟合一条穿过主集群的曲线,并隔离主集群中的数据点。最后,我可以把那些落在这些假设边界之外的标记为潜在的异常。请注意,边界(如红色阴影区域所示)不需要沿曲线等距沿着,它们可以随点的扩展程度而变化,如果这有意义的话。
Theoretical Example
我在这个论坛上找到了一些想法(即Confidence interval for LOWESS in Python),但我不确定这些是否适用于我的数据。这就是我所追求的:
Example来自:https://github.com/cerlymarco/tsmoothie
任何帮助是感激不尽。提前感谢!
1条答案
按热度按时间xpcnnkqh1#
如果没有一些代码,除了一般性的建议,几乎没有什么可以说的(我把这作为一个答案,而不是一个评论,由于格式)
您可以使用polyfit()将曲线拟合到分散的数据。
一旦你有了曲线,你就可以使用距离的不等式(使用阈值)来确定离群值。
这里也有两个类似的查询在Mathworks论坛,可能是有用的:
curve fitting to a scatter plot 1curve fitting to a scatter plot 2