10

私が遭遇したいくつかの関連する質問(thisthisthisthisなど)がありますが、それらはすべて既知の曲線にデータを適合させることを扱っています。与えられたデータを未知の曲線に適合させる方法はありますか?つまり、いくつかのデータが与えられると、アルゴリズムは1つの関数または関数の合計である近似を与えます。私はCでプログラミングしていますが、gslパッケージを使用してこれを行う方法がまったくわかりません。私は(理想的には)Cを介してパイプできるものなら何でも使用できます。しかし、私がどの方向を見るべきかについての助けは大いにありがたいです。

編集:これは基本的に私が収集した実験(物理)データであるため、データには加法ガウス分布ノイズによって変更された傾向があります。一般的に傾向は非線形であるため、線形回帰フィッティング法は不適切だと思います。順序付けに関しては、データは時間順に並べられているため、曲線は必然的にその順序でフィットする必要があります。

4

3 に答える 3

9

数値解析の分野で、多項式補間を探しているかもしれません。

多項式補間(一連の点(x、y)が与えられた場合)では、これらの点に適合する最適な多項式を見つけようとしています。これを行う1つの方法は、プログラミングがかなり簡単なニュートン補間を使用することです。

詳細な数値解析と内挿の分野は広く研究されており、多項式の誤差にいくつかの素晴らしい上限を得ることができるかもしれません。

ただし、データに最適な多項式を探しているため、関数は実際には多項式ではないことに注意してください。最初のトレーニングセットから離れたときのエラーのスケールが爆発します。


また、データセットは有限であり、データに(正確にまたはほぼ)適合することができる関数の数は無限(実際には列挙できない無限大)であることに注意してください。そのため、これらのうちどれが最適であるかは、あなたに固有である可能性があります。実際に達成しようとしています。

データに適合するモデルを探している場合は、線形回帰と多項式補間がスケールの両端にあることに注意してください。多項式補間はモデルに過剰適合している可能性がありますが、線形回帰はモデルに適合していない可能性があります。使用するのはケース固有であり、アプリケーションごとに異なります。


単純な多項式補間の

データとして持っているとしましょう(0,1),(1,2),(3,10)

ニュートン法を使用して得られる表1は次のとおりです。

0  | 1 |                 |
1  | 2 | (2-1)/(1-0)=1   |
3  | 9 | (10-2)/(3-1)=4  | (4-1)/(3-0)=1

ここで、取得する多項式は、最後の要素で終わる「対角線」です。

1 + 1*(x-0) + 1*(x-0)(x-1) = 1 + x + x^2 - x = x^2 +1 

(そしてそれは私たちが使用したデータに完全に適合しています)


(1)テーブルは再帰的に作成されます。最初の2列はx、y値であり、次の各列は前の列に基づいています。一度取得すると、実装は非常に簡単です。完全な説明は、ニュートン補間のwikipediaページにあります。

于 2013-01-01T14:03:59.220 に答える
4

高速フーリエ変換を使用して、データを周波数領域に変換することをお勧めします。

変換(振幅と位相および周波数のセット)の結果により、最もねじれたデータのセットでさえ、次の形式のいくつかの関数(高調波)で表すことができます。

r * cos(f * t - p)

ここで、rは高調波振幅、fは周波数、pは位相です。

最後に、不明なデータ曲線はすべての高調波の合計です。

私はこれをRで行いました(いくつかの例があります)が、Cにはそれを管理するのに十分なツールがあると思います。CとRをパイプすることも可能ですが、それについてはあまり知りません。これは役立つかもしれません。

この方法は、次のような複雑さがあるため、大量のデータに非常に適しています。

1)高速フーリエ変換(FTT)= O(n log n)でデータを分解します

2)結果のコンポーネントを使用して関数を作成= O(n)

于 2013-01-01T14:19:05.207 に答える
4

もう1つの方法は、線形回帰を使用することですが、多次元です。

ここでの秘訣は、余分な次元を人為的に生成することです。これを行うには、元のデータセットにいくつかの関数を含めるだけです。一般的な使用法は、データに一致する多項式を生成することです。したがって、ここではf(x) = x^i、すべての関数を意味しますi < k(ここkで、取得する多項式の次数は次のとおりです)。

たとえば、あなたと(0,2),(2,3)一緒のデータセットは追加の2次元を取得し、データセットは次のようになります。k = 3(0,2,4,8),(2,3,9,27)

線形回帰アルゴリズムは、予測されたモデル(p(x)の値)と比較して、データ内の各ポイントのエラーを最小化しa_0,a_1,...,a_kた多項式の値を見つけます。p(x) = a_0 + a_1*x + ... + a_k * x^k

ここで、問題は、次元を増やし始めると、(1次元線形回帰の)過適合から過適合(k==n効果的に多項式補間が得られる)に移行していることです。

k最適な値を「選択」するには、相互検証kを使用し、相互検証に応じてエラーを最小化するものを選択します。

このプロセスは完全に自動化できることに注意してください。必要なのはk、目的の範囲1のすべての値を繰り返しチェックkし、交差検定に従ってエラーが最小化されたモデルを選択することだけです。


(1)範囲は [1,n]-おそらく時間がかかりすぎるでしょうが、私は行くか、[1,sqrt(n)]あるいは-さえするかもしれません[1,log(n)]が、それはただの予感です。

于 2013-01-01T15:24:24.447 に答える