例: データ平滑化
movavg、expsmooth、
medsmooth関数を使用して、移動平均、指数平滑法、または中央値フィルタを実行します。これらの関数は、データセット内の各点をその点自体とその近傍点によって平均化し、データ内の不規則性を取り除くことによって、データを平滑化します。
移動平均
時間が t = 0, 1, 2, . . . , n - 2 の場合、t における平滑化値は、時間 t までのすべての観測値の平均になります。n 個の観測値を取得した後からは、時間 t における平滑値は時間 t における観測値とそれ以前の n - 1 個の観測値の平均になります。
1.
sin関数を使用して、減衰正弦信号を定義します。
2.
rnd関数を使用して、一様であるがランダムな成分を追加して信号にノイズを含めます。
3. movavg 関数を呼び出して、それぞれ幅 2、10、20 のウィンドウを使用してデータを平滑化します。
幅が大きなウィンドウでは時間のずれが生じます。
指数平均
ステップ関数を使用して、movavg と expsmooth の違いを示します。指数データ平均は次のように計算されます。
ここで、t = 1, . . . , last(x)
時間 t における平滑化されたエントリは、現在の観測値と前の平滑化された観測値の、重み α を付けた平均です。
1. ステップ関数を定義してプロットします。
| |
| t が負の場合に関数をゼロに設定するため 0.3 が追加されています。 |
| |
| 幅 1.0 のパルスを取得するため 1 ではなく 0.7 が使用されています。 |
2. 幅 4 のウィンドウを使用して、このステップ関数に movavg 関数を適用します。
このステップ関数に movavg 関数を適用すると、n=4 のサンプルで 1-to-0 に遷移するように平滑化が行われます。
3. 0.5 の重みを使用して、このステップ関数に expsmooth 関数を適用します。
このステップ関数に expsmooth 関数を適用すると 10 個のサンプルで曲線状に 1-to-0 に遷移するように平滑化が行われます。
expsmooth は movavg と同じ方法で市場トレンドの予測に利用できますが、実際に多くの専門家が採用しているのは、同じ生データに対して異なる重みを付けで実行した 2 つの指数平滑化の差などのように、これとは異なるインジケータです。
中央値フィルタ
中央値フィルタでは、入力の各要素が、その要素とその n-1 個 (信号の両端付近では n-1 個未満) の近傍点の中央値に置き換えられます。この方法は、エッジを残したままノイズを減らして平滑化する場合に適しています。
この関数はピクセルごとに並べ替えを行うので、大きな行列の場合には時間がかかります。中央値フィルタでは、ノイズが除去されるだけでなく、鋭く小さな過渡信号が除去される傾向があります。
1. 指数信号を定義してプロットします。
2.
whiten関数を使用してランダム白色ノイズを追加することで、信号の質を低下させます。
3. medsmooth 関数を使用して中央値フィルタを適用し、フィルタされた信号をプロットします。
フィルタ後の信号は滑らかになりました。
フィルタの長さを変更して、ノイズ信号に対する影響を調べます。実際には、中央値フィルタの長さは信号の長さよりも小さくする必要があります。