gnuplotプロット例 : 最小二乗法の可視化的説明
データプロットを関数(ax + b)でフィッティング 始めに 最小二乗法を用いた数値解析によるフィッティングを可視化してみることにしました。 実験で得られた測定データ、表計算や解析ソフトでは簡単に近似曲線と関数が得ることが出来ます。こういうのは実際どういった処理で求めているのかを意識することは無いかも知れません。ただあまりブラックボックスな技術にばかり頼りっきりでもしょうがないので、ちょっと試しに可視化してみることにしました。 用いるデータ さて、用いたデータプロットは以下のようになっています。これを 関数 f(x) = ax + b でフィッティング、つまり最適解となる変数a, bを求めます。 用いるデータプロット ここでは最小二乗法については説明しませんが、手順としてはまず適当にaとbをそれぞれある値に決めます。そこで定まった関数とデータプロットの各点との差を求めます。ここで差は二乗してデータプロット全ての点のそれを合計します(便宜上sumと置く)。そうするとa, b, sumのワンセットが得られます。あとはこれをa, bの値をそれぞれ変化させて、どのパラメーターを取ればsumが最小となるかを求めてそれを解とします。 可視化してみる 解だけ求めるなら計算してsumが最小となる点を抽出すればいいのですが、その過程を可視化するためにもう少し準備をします。 まず計算により得られるデータセットは以下の3列からなります。 a1, b1, sum1 a2, b2, sum2 a3, b3, sum3 a4, b4, sum4 ︙ なので、aをx、bをy、sumをzとして三次元プロットをしてみます。計算過程を動画にすると以下のようになります(左側がデータプロットと関数の二次元プロット、右側が三次元プロット)。左側のグラフではデータプロットの各点と関数との差を矢印で図示するようにしています。 (Youtubeにアップロードした動画、処理にはPythonによるプログラミングも併用) この動画では大雑把にaとbの範囲を設定して計算しているので、どこが最小なのかはいまいち分かり難くなっています。これは、データプロットから大きく外れたときのsumの値がかなり大きくなるので、全部一つの三次元プロットにしてしま