4

つまり、私はa = [2 7 4 9 2 4 999]

そして、マトリックスから999を削除したいと思います(これは明らかな外れ値です)。

このような値を削除する一般的な方法はありますか?私はベクトルのセットを持っていますが、それらのすべてがそのような極端な値を持っているわけではありません。prctile(a、99.5)は、極端な(または極端でない)場合でも、ベクトル内の最大数を出力します。

4

3 に答える 3

11

これを行うにはいくつかの方法がありますが、最初に「極端」とは何かを定義する必要がありますか?それはあるしきい値を超えていますか?いくつかの標準偏差を超えていますか?または、nこれらの極端なイベントが正確にあり、それらの値が大きいことがわかっている場合残りの部分よりも、最後の要素を使用sortおよび削除できます。n

たとえばa(a>threshold)=[]、定義のようなしきい値を処理し、の平均を超える標準偏差a(a>mean(a)+n*std(a))=[]である値を破棄します。na

まったく異なるアプローチは、の中央値を使用することaです。ベクトルが言及したとおりに短い場合は、中央値を調べて、その値のある係数を超える値をしきい値設定することができますa(a>n*median(a))=[]

最後に、これらのスパイクを処理するためのアプローチを評価する方法は、データのヒストグラムを取得し、そこから作業することです...

于 2013-03-12T23:31:36.097 に答える
2

私は2つ考えることができます:

  • 行列を並べ替えて、上下からn要素を削除します。
  • 平均と標準偏差を計算し、範囲外のすべての値を破棄します。 mean +/- (n * standard deviation)

どちらの場合も、nはユーザーが選択する必要があります。

于 2013-03-12T23:28:12.903 に答える
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]ます。

于 2013-03-12T23:44:25.847 に答える