polyfitのnを求める関数はありますか?
Show older comments
polyfitを使って近似曲線を描こうとしているのですが,最適なnの決定方法はありますか?
curvefitting ToolBoxは持っていないのでpolyfit関数で行おうと思っています.
https://jp.mathworks.com/help/matlab/ref/polyfit.html を参考にやってみているのですが,どの手法もプロットの結果を見て次元数を決めているように見えます.
1つのデータの処理であればこの手法でできているのですが,各ファイルごとにxとyのデータが入っており,ファイルごとに近似曲線を求めたいので1つ1つプロットの結果をみてnのパラメータを決めるのは現実的ではないと考ええたため,質問させていただきました.
よろしくお願いいたします.
3 Comments
Shunichi Kusano
on 3 Mar 2020
答えは私もわかりませんので、コメントという形で参考になりそうな視点をいくつか書いてみます。
前提としてnを大きくするほど、データにフィットしますが、過適合ということになります。一般的には許容できる誤差を決めておいて、それを満たす最小のnが取られるケースが多いんじゃないかと推測します。フィッティングの目的は、任意のxを与えたときのyの予測なので、許容できる誤差はそのまま、目標とする予測精度、とも言い換えられます。
ただし、具体的にデータが表している現象を定式化できるのであれば、それがnの答えになるかと思います。例えば放物運動ならn=2と自動的に決まりますよね。逆にこのときにいくら誤差が大きいからといってn>2としてしまうとアウトです。
また、同じ現象を表すデータのフィッティングであれば、ファイルごとにnの値や係数が変わるのもちょっと変かなと思いますので、そのあたりも制約条件になりえるかもしれませんね。
統計の専門家ではありませんので、あくまで参考程度ということでお願いいたします。
Kenta
on 3 Mar 2020
こんにちは、私からもコメントという形で感じたことを述べさせてください。不勉強のため間違いがあれば申し訳ございません。
nを決めるアルゴリズム/手法を議論するまえに、Iwakamiさまがお持ちの、xとyの関係に関する仮説を考える必要があると思います。
例えば、モデル式/理論式にて、yはxの2乗スケールで増加するならnは2であるべきでしょうし、そもそもxとyという本来は一致すべき値を解析するのであればnは1などの小さめの値になるかと思います。
また、x=∞や0のときのことも参考になると思います。xが大きくなればyがある一定に収束するのであれば、単調増加(減少)する関数でフィッティングするのは最適ではないかもしれません。例えば、十分長い斜面を自転車で下っても空気抵抗などである値に収束するはずです。逆に、x=0付近ではある値になるべきであればその値で補正したのちにnの値を考えても良いと思います。
さらに、xが☆%増加したらyが△%増加するということが仮説にあるのなら、logスケールでのフィッティングをするのかもしれません。詳しくは、例えば(https://atarimae.biz/archives/13161)が参考になると思います。
以上、こちらも感想程度、ということで思っていただけると幸いです。よろしくお願いいたします。
Hiroyuki Hishida
on 4 Mar 2020
これまでにでているコメントにプラスしてですが、(もっともシンプルであろう)一次式で近似してはいけない理由がないので、(まずは)一次式で近似すると言い切るのも一つの手かもしれません。
Answers (1)
Yumi Iwakami
on 4 Mar 2020
0 votes
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!