曲線あてはめ

曲線あてはめ（きょくせんあてはめ）またはカーブフィッティング（英: curve fitting）は、実験的に得られたデータまたは制約条件に最もよく当てはまるような曲線を求めること。最良あてはめ、曲線回帰とも。一般に内挿や回帰分析を用いる。場合によっては外挿も用いる。回帰分析で曲線を求める場合、その曲線はデータ点を必ず通るわけではなく、曲線とデータ点群の距離が最小になるようにする。曲線あてはめによって得られた曲線を、近似曲線という。特に回帰分析を用いた場合には回帰曲線という。現実の実験データは直線的ではないことが多いため散布図、近似曲線を求める必要性は高い。 我々が考えるべき問題は、実験データを実験を説明する「説明変数」と「目的変数」に分類した上で、説明変数 x {\displaystyle {\textbf {x}}} と、目的変数yの関係 y = g ( x ) {\displaystyle y=g({\textbf {x}})} を求めることである。説明変数としては測定条件を考えることが多く、目的変数としては、測定値を考えることが多い。説明変数、目的変数共にベクトル量である可能性があるが、測定値のほうは、多変数関数の微分が、値域側の成分に関して独立であることからスカラー量としても一般性を失わない。一方、多変数関数の微分は、定義域側の成分については独立でないため、一般論を述べる上ではベクトル量としておかなければならない。以下、測定条件は、k次元ベクトルの形で与えられているとする。成分で表記すると x = ( x 1 ⋮ x k ) {\displaystyle {\textbf {x}}=\left({\begin{matrix}x_{1}\\\vdots \\x_{k}\\\end{matrix}}\right)} となる。 実験データは、説明変数に関するデータ x 1 , ⋯ , x n {\displaystyle {\textbf {x}}_{1},\cdots ,{\textbf {x}}_{n}} と目的変数に関するデータ y 1 , ⋯ , y n {\displaystyle y_{1},\cdots ,y_{n}} の組、 ( y 1 , x 1 ) , ⋯ , ( y n , x n ) {\displaystyle (y_{1},{\textbf {x}}_{1}),\cdots ,(y_{n},{\textbf {x}}_{n})} の形で得られる。また、j番目の測定条件 x i {\displaystyle {\textbf {x}}_{i}} の第i成分を x i j {\displaystyle x_{ij}} で表すものとする。 我々が考えるべき問題は、適当な α {\displaystyle \alpha } 個のパラメータ a 1 , ⋯ , a α {\displaystyle a_{1},\cdots ,a_{\alpha }} と、k+ α {\displaystyle \alpha } 変数の関数 f ( x , a ) {\displaystyle f({\textbf {x}},{\textbf {a}})} を考え、 a {\displaystyle {\textbf {a}}} の値を調整し S ( a ) = ∑ j = 1 n | y i − f ( x j , a ) | 2 {\displaystyle S({\textbf {a}})=\sum _{j=1}^{n}|y_{i}-f({\textbf {x}}_{j},{\textbf {a}})|^{2}} 　・・・・　(1-1) を最小とするような、 a {\displaystyle {\textbf {a}}} を求める問題に帰着される。このSの平方根 S {\displaystyle {\sqrt {S}}} のことを、「関数当てはめ時の誤差」という。ここで a = ( a 1 ⋮ a α ) {\displaystyle {\textbf {a}}=\left({\begin{matrix}a_{1}\\\vdots \\a_{\alpha }\\\end{matrix}}\right)} のことを、フィッティングパラメータと言う。また、関数Sを考えるときには ( y 1 , x 1 ) , ⋯ , ( y n , x n ) {\displaystyle (y_{1},{\textbf {x}}_{1}),\cdots ,(y_{n},{\textbf {x}}_{n})} は、もはや定数ベクトルでしかないことに注意されたい。飽くまで関数Sの変数は a 1 , ⋯ a α {\displaystyle a_{1},\cdots a_{\alpha }} である。 なお、Sを定義するにあたり、各データに対して、適当な定数（正または0） w 1 , ⋯ , w n {\displaystyle w_{1},\cdots ,w_{n}} によって重みを付け、 S ( a ) = ∑ j = 1 n w j | y i − f ( x j , a ) | 2 {\displaystyle S({\textbf {a}})=\sum _{j=1}^{n}w_{j}|y_{i}-f({\textbf {x}}_{j},{\textbf {a}})|^{2}} 　・・・・　(1-1') のようにすることもある。この方法によって、y方向に誤差（Yエラーバー）がある場合や、「測定回数の異なるデータの平均」の比較が可能であるが、x方向にも誤差（Xエラーバー）がある場合には、対応できない。x方向にも誤差がある場合には、デミングの方法を用いる。なお、(1-1)は「(1-1')において、全てのデータの重みづけが等しい状況」を意味することに注意されたい。 我々が考えるべき問題は、(1-1)あるいは(1-1')の関数Sの極値問題に他ならない。一般に、極値問題は解を持たない可能性があり、また、解が存在したとして、重解の可能性もあるが、一般論として、以下の定理が知られている。 「もしも、 a 0 {\displaystyle {\textbf {a}}_{0}} で、Sが極値をとるとすると、 g r a d S ( a 0 ) = 0 {\displaystyle {\rm {grad}}S({\textbf {a}}_{0})={\textbf {0}}} である。」 この定理は、最適なフィッティングパラメータに対する必要条件を与える。極小値を与えるような a {\displaystyle {\textbf {a}}} の十分条件としては、 「Sの a {\displaystyle {\textbf {a}}} におけるヘッセ行列が正定値(正値, 正定符号)となること」 がある。極小値が仮に存在したとして、それらが必ずしも最小であるとは限らない。例えば、最適な a {\displaystyle {\textbf {a}}} が無限遠に存在する可能性もある。 (1-1)のSを最小とするようなフッティングパラメータ a 0 {\displaystyle {\textbf {a}}_{0}} が得られた場合には、以下の g ( x ) {\displaystyle g({\textbf {x}})} を、最適関数（xがスカラーの場合には、最適曲線）という。 g ( x ) = f ( x , a 0 ) {\displaystyle g({\textbf {x}})=f({\textbf {x}},{\textbf {a}}_{0})} (1-2) このgは、説明変数 x {\displaystyle {\textbf {x}}} と目的変数yの間に1つの関数関係を与えている。つまり、このgは、 x {\displaystyle {\textbf {x}}} とyの関数であり、フィッティングパラメータは定数ベクトルと考える。 一般には、「必ず ( y , x ) = ( 0 , 0 ) {\displaystyle (y,{\textbf {x}})=(0,{\textbf {0}})} を通る」といった付帯条件が付いている場合がある。このような場合には、ラグランジュの未定乗数法が最適なフィッティングパラメータを探る上で手掛かりを与える。 なお、付帯条件のある場合、ない場合共に、実際の数値計算では、Levenberg-Marquardt algorithm（レーベンバーグ・マルカート法）が用いられることが多い。 まず、次のような1次多項式を考える。 y = a x + b {\displaystyle y=ax+b\;} これは、傾斜 a の直線である。一般に、このような直線はx座標の異なる2点によって一意に定まる。したがって1次多項式は、x座標の異なるデータ点がちょうど2個ある場合に、正確にそれらを通る直線となる。最小二乗法を使う場合には、データ点が何個あっても、最適な直線が一意に定まる。ただし、最適な直線とは、残差平方和が最小というだけで、そのデータの素性を最もよく表しているとは限らない。 次数を上げて2次多項式にすると、次のような式になる。 y = a x 2 + b x + c {\displaystyle y=ax^{2}+bx+c\;} この場合、x座標の異なる任意の3点に当てはめることができる。 さらに次数を上げて3次多項式にすると、次のような式になる。 y = a x 3 + b x 2 + c x + d {\displaystyle y=ax^{3}+bx^{2}+cx+d\;} この場合、x座標の異なる任意の4点に当てはめることができる。 より一般化すれば、4つの「制約」を正確に満足する、と言える。制約は点だけでなく、角度や曲率（接する円の半径の逆数）などもある。角度や曲率の制約は曲線の端に設定することが多く、それを端末条件 (end condition) と呼ぶ。多項式曲線を連結したスプライン曲線が滑らかな曲線となるには、連結する両方の多項式曲線で端末条件を同一にする必要がある。より高次の制約として、例えば「曲率の変化率」といった制約を与えることもある。これは例えば、クローバー型インターチェンジで通行する自動車にかかる力を決め、制限速度を決定するのに役立つ。 また、1次多項式は1つの点と角度の制約に当てはめることができ、3次多項式は2つの点と1つの角度、1つの曲率の制約に当てはめることができる。他にも様々な制約の組み合わせで各種次数の多項式を当てはめることができる。 n + 1 個より多い制約があるときでも（n は多項式の次数）、それらを満足する多項式曲線を描くことができる場合がある。例えば3つの点が同一直線上に並ぶような配置であれば、1次多項式を正確にあてはめることができる。しかし、このような配置は例外的であって稀である。通常は全制約を正確に満足することは期待できない。よって、一般には近似度を評価する方法を必要とすることになる。最小二乗法は最も一般的な方法である。 ここで、なぜ近似ではなく多項式の次数を高くして正確に当てはめようとしないのかという疑問が生じる。それには、以下のような理由がある。 正確な一致が存在するとしても、それを計算できるとは限らない。使用しているアルゴリズムによっては計算が発散してしまって解を求められなかったり、非常に時間がかかることがある。 データそのものに誤差がある場合、各点を正確に通る曲線よりも近似的な曲線の方が好ましい場合がある。 ルンゲ現象が起きやすい。n次多項式曲線の変曲点の数は最大 n-2 である。したがって、一般に次数が低いほうが曲線はより滑らかになる。次数が高くても滑らかな曲線にすることは可能だが、次数が低い方が簡単である。 ここまで、多項式の次数が制約数より少ない場合を述べてきたが、逆に多項式の次数が制約数より大きい場合はどうなるだろうか。上述の高次多項式の問題が全て生じることになるだけでなく、解が一意に定まらないという問題も生じる。そこから1つの曲線を選択するのはソフトウェアや人間の役割となる。このため、近似でよい場合は次数をなるべく低く設定するのが一般に最善とされている。 場合によっては、円錐曲線（円、楕円、放物線、双曲線など）や三角関数（サイン、コサインなど）の曲線を使うこともある。例えば、空気抵抗を無視すると、重力の影響下にある物体の軌跡は放物線を描く。したがって、そのような物体の観測結果に放物線を当てはめることは意味がある。潮の干満は正弦波のパターンを描くので、干満に関するデータには正弦曲線を当てはめることができる。あるいは、より正確には月と太陽の影響を考慮して、2種類の正弦曲線の合成を当てはめることもある。 代数的なデータ解析においては、曲線とデータ点のY軸方向の距離を最小化するような曲線を求める。しかし、グラフィックスや画像の分野では、幾何学的な曲線あてはめ、すなわち曲線とデータ点の直交する距離が最小になるような曲線を求める（あるいは、X軸とY軸の両方で曲線とデータ点の距離を最小化する）方が見た目がよい。しかし、幾何学的曲線あてはめは非線形かつ反復的な計算を必要とするため、あまり使われない。 Coope は、2次元のデータ点群に視覚的に最もうまくあてはまる円を求める問題を考えた。その手法は非線形な問題を数値解析的な反復なしに線形な問題にみごとに変換でき、従来の技法よりも劇的に性能を向上させることができる。 上述の技法は非線形なステップを1つ追加することで楕円に一般化でき、高速に様々な向きと離心率の楕円を見付けることができる。 以上、2次元の曲線を論じてきたが、同じことは3次元空間における曲面にも適用できる。通常、u と v という2つの方向を表すパラメータに沿った曲線の網で定義されるパッチ（あて布）を並べたものが曲面となる。 R言語のような統計パッケージ、GNU Scientific Library や SciPy のような数値解析ソフトウェアには、曲線あてはめ用コマンドがある。また、曲線あてはめ専用のプログラムとして、TableCurve、Fityk などがある。詳しくは外部リンクを参照。