*注意)この「べじぱみゅの学習メモ」のカテゴリー記事は、ワタクシ自身がこれまでに勉強したいろいろな項目について、テキストにあんまり書いてない内容などを勝手に妄想したメモです。
ワタクシ自身の備忘録のために書いており「初学者にわかりやすく説明する」というものではございません。
導入なしに唐突に話が始まり、おそらく意味不明な文章かもしれません。
しかし、せっかく考えたことなので、記事の内容がもし誰か1人でもお役に立てれば幸いです。


基本は「平均化」

以前「補間」の話をしました。このときのスプライン補間では、すべてのデータ点をきっちり通るような補間曲線を引いてくれます。

実際に科学技術の現場で遭遇するデータは基本的に「実験データ」です。実験データはふつうノイズを含んでおり、上記のような「すべてのデータ点をきっちり通る」曲線を引くことにあまり意味はないです。
「きっちり」よりむしろ「だいたい」の曲線のほうが正当だったりします。

というわけで、実験で得た生データをそのまま用いるより、まず「スムージング」の処理をかけてその後の作業に移ることをお勧めします。

ノイズを除去する基本は「平均化」です。
多数の測定データの平均を取ることで、ノイズをある程度打ち消すことができます。


元データ


例えばこんな感じで、バラつきを含む実験データを取得したとき、そのn番目のデータynについて、両サイド2点ずつ計5点との平均

単純平均

をとり、ynとこれを置き換えることで「スムージング」が実行できます。

単純5点平均グラフ

こんな感じ。たしかに「スムージング」されています。

ただ、この方法はちょっと理屈の点から粗すぎます。
ふつうに平均値を取る、ということはynに両サイド2点が同じだけ影響していることになってしまいます。ちょっと周りの影響を過大評価しすぎです。
そこで、この5点に「重み」をつけて平均化することを考えます。もちろんynにはyn自身が最も影響し、その両サイドの点は「ちょっとだけ」影響する、と考えます。


5点を取り入れるSavitzky-Golay 法

いろいろな方法があるのですが、ここでは有名でかつ使い勝手のいい「Savitzky-Golay法」のひとつを紹介します。
5点での近似-模式図


こんな感じで、ある点と、その両サイド2点を含む5点を2次関数

回帰する2次式
で近似(回帰)します。ここでxは「xnからの距離」とします。つまり回帰した結果の定数項a0の値を、スムージングしたynとして置き換えるのです。

こうすると、回帰の二次関数と実際のデータ点との偏差の二乗は

5点採用の場合の誤差2乗和

こうなります。これを係数a0, a1, a2を変化させて最小化します。
※実はa1の結果はa0に影響しないので、以下a0, a2についてのみ記載します。

5点採用-a2偏微分
5点採用-a0偏微分

これを両方満たすようにします。
《二番目の式》×17-《一番目の式》×5より

5点採用-結果

こうなります。データ点ynの値をこれで置き換えればいいのです。もちろんynが最も大きく影響し、その両サイドがそれより少しだけ小さく影響し、さらにその両サイドはほんの少し影響する、という状態になっています。

この作業をすべてのデータ点について行えば「スムージング」ができます。

SG5グラフ

こんな感じ。


7点・9点で取り入れるSavitzky-Golay 法

さっきは5点でのスムージングを紹介しました。同じように、7点でやると偏差の二乗和は

7点採用の場合の誤差2乗和

こうなります。これを最小化する条件は

7点採用-a2偏微分
7点採用-a0偏微分

《二番目の式》×7-《一番目の式》より

7点採用-結果

9点のときは、偏差二乗和が

9点採用の場合の誤差2乗和

こうなり、これを最小化する条件は

9点採用-a2偏微分
9点採用-a0偏微分

《二番目の式》×59-《一番目の式》×5より


9点採用-結果

こんなノリでいけます。

SG7グラフ
SG9グラフ

それぞれこんな感じ。5点に比べ7,9点のほうがより「スムーズ度合い」が増しています。
点をたくさん取り入れたほうがよりスムーズになりますが、どこまで取り入れるかは難しいところです。5点や9点がよく用いられているようです。
また、5点などの小数の点によるスムージングを複数回やるのもよい、とされています。

たとえば今回のケース、5点スムージングを10回やるとこんな感じ。

SG5-10回グラフ

どの方式が最適なのかはケースバイケースなので、いろいろ試してみましょう。



はっぴぃ理系らいふ、いぇい
ヽ(・ε・)人(・ε・)ノ キミモナカマニナロウゼ
   

【文責 べじぱみゅ】