OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

曲面フィット

  • すぐに回答を!
  • 質問No.161297
  • 閲覧数526
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 0% (0/16)

こんにちは、早速ですが
2つの入力変数(X1とX2)と1つの出力変数(Y)があり、
このデータを3D散布図に描くと曲面展開できそうな
(ねじれた平面?)形になりました。
が、カーブフィットの方法がわかりません。
簡単な2Dのフィッティングは最小二乗など使って
何度かやったことあるんですけど
独立変数が複数になるとさっぱりわからなくなりました。
どなたかご教授ください。
またこのようなフィッティングが簡単にできる
おすすめのグラフソフトなどあれば教えてください。
よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル14

ベストアンサー率 57% (1014/1775)

モデルがデータに合わない場合、手っ取り早いのはモデルを多項式として、その次数を上げていくことです。この場合まずは双2次式かな?つまり
f(X1,X2) = α(X2) X1^2 + β(X2) X1 + γ(X2)
α(X2) = A X2^2 + B X2 + C
β(X2) = D X2^2 + E X2 + F
γ(X2) = G X2^2 + H X2 + I
の9パラメータのモデルですね。パラメータA,B,C,....,Iについてfは1次式ですから、線形最小二乗法が使えます。
これでダメなら双3次式。
がんばろー!
補足コメント
pickelman

お礼率 0% (0/16)

度々ありがとうございます。
やはり多項式で次数を増やしていくのが手っ取り早いんですね。
双3次式まで計算したらかなり良い結果が得られました。
いろいろ教えていただいてありがとうございました。
投稿日時 - 2001-11-09 15:19:42
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1

最小二乗法をご存知とします。 適当なほうてい式が存在するとして.適当な初期値を決定します。 それぞれの定数を少し動かした時の残差を計算します。 時間がかかって良いのであれば.残さの最も少ない場合を選んで.このあたいにたいして.それぞれの定数を少し動かした時の残差を計算します。 残さが十分少なくなった時に.打ち切ります。 時間をかけない(計算回数を少なくする方法には.いろいろありますが.言 ...続きを読む
最小二乗法をご存知とします。
適当なほうてい式が存在するとして.適当な初期値を決定します。

それぞれの定数を少し動かした時の残差を計算します。
時間がかかって良いのであれば.残さの最も少ない場合を選んで.このあたいにたいして.それぞれの定数を少し動かした時の残差を計算します。

残さが十分少なくなった時に.打ち切ります。
時間をかけない(計算回数を少なくする方法には.いろいろありますが.言葉で説明できません。)
私の場合には.ベーシック(言語ソフト)で画面に表示させながら.手作業で変数を適当にいじって残差が少なくなるようにしました。この方法は.各種方法によって選られた最適解が理論上取りうる値を逸脱する場合に確実に収束させる方法です。ただ.それが必ずしも最適解ではないのです。

  • 回答No.2
レベル14

ベストアンサー率 57% (1014/1775)

当て嵌めたいモデルをf(X1,X2)とします。ねじれた平面だったらたとえば f(X1,X2) = AX1X2 + BX1 + CX2 + D のような格好になるでしょうか。で、最小二乗法でA,B,C,Dを決めてやればよい。 データがN個あるとして、それを<X1[j],X2[j],Y[j]> (j=1,2,....,N)とします。そうすると、残差を ε[j] = f(X1[j],X2[j ...続きを読む
当て嵌めたいモデルをf(X1,X2)とします。ねじれた平面だったらたとえば
f(X1,X2) = AX1X2 + BX1 + CX2 + D
のような格好になるでしょうか。で、最小二乗法でA,B,C,Dを決めてやればよい。
データがN個あるとして、それを<X1[j],X2[j],Y[j]> (j=1,2,....,N)とします。そうすると、残差を
ε[j] = f(X1[j],X2[j]) - Y[j]
と定義して、残差二乗和
S = Σ(ε[j])^2 (Σはj=1,2,...,Nについての和)
を最小化したい。ですから連立方程式
∂S/∂A = 0
∂S/∂B = 0
∂S/∂C = 0
∂S/∂D = 0
を解く。
∂S/∂A = 2Σ(X1[j] X2[j](AX1[j]X2[j] + BX1[j] + CX2[j] + D - Y[j]))
∂S/∂B = 2Σ(X1[j] (AX1[j]X2[j] + BX1[j] + CX2[j] + D - Y[j]))
∂S/∂C = 2Σ(X2[j] (AX1[j]X2[j] + BX1[j] + CX2[j] + D - Y[j]))
∂S/∂D = 2Σ(AX1[j]X2[j] + BX1[j] + CX2[j] + D - Y[j])
ですから、A,B,C,Dを変数とする連立一次方程式です。

モデルfがもっと他の関数の場合でも同じ要領ですが、モデルがややこしい式だと、解くべき連立方程式が一次方程式にならない場合があります。
そのときには、モデルの表し方を工夫して一次方程式になるように持ってくるか、あるいは「非線形最小二乗法」という繰り返し計算を用います。
補足コメント
pickelman

お礼率 0% (0/16)

ご回答ありがとうございます。

>当て嵌めたいモデルをf(X1,X2)とします。ねじれた平面だったらたとえば
>f(X1,X2) = AX1X2 + BX1 + CX2 + D
>のような格好になるでしょうか。

そうですね、この関数はねじれた平面ですよね。
この場合たとえばX2を固定するとF(X1,Y)は1次式になりまして、
つまり直線の角度をちょっとずつ変えてできた平面ってことですよね?
でも実際には…
仮に下敷きのようなものの両端を両手で持って
グィっと捻じ曲げてみたらこんな風にはなりませんよね。(なんかわかりずらい?)
あらゆるX2においてF(X1,Y)は曲線になるはずなんですよ。
しかもX2によって曲率が異なる。
こういう場合はもっと複雑な関数を定義しないといけないのでしょうか?
この関数のモデルが知りたい! です。

ちなみに
f(X1,X2) = AX1X2 + BX1 + CX2 + D
でフィッティングしたら残さ二乗が14835になっちゃいました。(ioi)
投稿日時 - 2001-11-06 17:20:15
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ