つまり、私はa = [2 7 4 9 2 4 999]
そして、マトリックスから999を削除したいと思います(これは明らかな外れ値です)。
このような値を削除する一般的な方法はありますか?私はベクトルのセットを持っていますが、それらのすべてがそのような極端な値を持っているわけではありません。prctile(a、99.5)は、極端な(または極端でない)場合でも、ベクトル内の最大数を出力します。
つまり、私はa = [2 7 4 9 2 4 999]
そして、マトリックスから999を削除したいと思います(これは明らかな外れ値です)。
このような値を削除する一般的な方法はありますか?私はベクトルのセットを持っていますが、それらのすべてがそのような極端な値を持っているわけではありません。prctile(a、99.5)は、極端な(または極端でない)場合でも、ベクトル内の最大数を出力します。
これを行うにはいくつかの方法がありますが、最初に「極端」とは何かを定義する必要がありますか?それはあるしきい値を超えていますか?いくつかの標準偏差を超えていますか?または、n
これらの極端なイベントが正確にあり、それらの値が大きいことがわかっている場合残りの部分よりも、最後の要素を使用sort
および削除できます。n
たとえばa(a>threshold)=[]
、定義のようなしきい値を処理し、の平均を超える標準偏差a(a>mean(a)+n*std(a))=[]
である値を破棄します。n
a
まったく異なるアプローチは、の中央値を使用することa
です。ベクトルが言及したとおりに短い場合は、中央値を調べて、その値のある係数を超える値をしきい値設定することができますa(a>n*median(a))=[]
。
最後に、これらのスパイクを処理するためのアプローチを評価する方法は、データのヒストグラムを取得し、そこから作業することです...
私は2つ考えることができます:
mean +/- (n * standard deviation)
どちらの場合も、nはユーザーが選択する必要があります。
信号をフィルタリングします。
%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]
ます。