所以说,我有一个= [2 7 4 9 2 4 999]
我想从矩阵中移除999(这是一个明显的异常值)。
是否有常规方法来删除这样的值?我有一组向量,并非所有向量都有这样的极值。 prctile(a,99.5)将输出向量中最大的数字,无论它是多么极端(或非极端)。
答案 0 :(得分:11)
有几种方法可以做到这一点,但首先你必须定义什么是“极端”?它是否高于某个阈值?高于某些标准偏差?
或者,如果您知道这些极端事件的确切n
且其值大于其他事件,则可以使用sort
并删除最后n
个元素。等...
例如,a(a>threshold)=[]
会处理类似定义的阈值,而a(a>mean(a)+n*std(a))=[]
会处理丢弃n
标准偏差高于a
平均值的值。
一种完全不同的方法是使用a
的中位数,如果向量与您提到的一样短,您想要查看中值,然后您可以将任何高于该值的某个因子的阈值阈值a(a>n*median(a))=[]
。
最后,评估处理这些峰值的方法的一种方法是采用数据的直方图,并从那里开始工作......
答案 1 :(得分:2)
我能想到两个:
mean +/- (n * standard deviation)
在这两种情况下,n必须由用户选择。
答案 2 :(得分:1)
过滤你的信号。
%choose the value
N = 10;
filtered = filter(ones(1,N)/N, 1, signal);
找到噪音
noise = signal - filtered;
删除嘈杂的元素
THRESH = 50;
signal = signal(abs(noise) < THRESH);
它优于mean+-n*stddev
方法,因为它会查找本地更改,因此它不会因缓慢变化的信号[1 2 3 ... 998 998]
而失败。