Qingfeng 数学モデリング - フィッティング アルゴリズム

フィッティングアルゴリズム

コンセプト

前の章で説明したように、補間アルゴリズムを使用すると、指定されたサンプル ポイントを通る特定の曲線を計算し、必要な値を計算できます。しかし、いくつかの問題もあります。第一に、サンプル点が多すぎると、多項式の次数が高くなりすぎて、ルンゲ現象が発生します。第二に、ルンゲ現象を回避するために、分割の考え方を通じてフィッティング曲線が得られますが、これは曲線関数が非常に複雑になります。

上記の問題に対応して、フィッティング問題では、曲線が特定の点を通過する必要はありません。フィッティング問題の目的は関数 (曲線) を見つけることです。関数は、曲線が特定の基準の下で (つまり、誤差が十分に小さい限り) すべてのデータ ポイントに最も近くなるように、できるだけ単純に設定されます。 、(最小損失関数)、これがフィッティングの考え方です。

フィッティング曲線を決定する

データのセット [x,y] が与えられた場合、y と x の間のフィッティング曲線を見つけます。

画像-20230811201338259

このデータセットに対応する画像を matlab 上に描画します

plot(x,y,'o');

画像-20230811205402341

サンプル点に近づくように曲線をフィッティングします。ここでは単純なフィッティング曲線 y=kx+b を使用します。ここで問題となるのは、k と b がどのような値をとるとき、サンプル点がフィッティング曲線に最も近くなるかということです。

最小二乗法の幾何学的解釈

画像-20230811210132216

  • 最初の定義には絶対値があり、その後の導出は容易ではないため、計算はより複雑になります。したがって、私たちはよく 2 番目の定義を使用します。これはまさに最小二乗法の考え方です。
  • また、サンプル点と近似曲線の間の距離の 3 乗計算では負の値が得られ、距離が打ち消されるため、3 次乗も使用しません。
  • また、4 乗を使用することはありませんが、4 乗を使用する場合、外れ値が曲線から遠くに現れると、フィッティング曲線に大きな影響を与えます。

画像-20230811210708976

最小二乗法を解く

画像-20230811210825318

最終的に落ち着いた 2 つの公式: k </sup> と b<sup>の導出公式

  • この式は、k と b の導関数を導出し、係数を分離することによって得られます。

Matlab は最小二乗法を解きます

画像-20230811211416247

式に基づいてコードを取得するのは難しくありません

plot(x,y,'o');
xlabel("x");
ylabel("y");
n=size(x,1);%% 数据的个数
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x));
b=(sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x));
hold on;%% 写上这句后续可以继续在之前的图形上画图形
grid on;%% 图形显示网格线
f=@(x) k*x+b; %% f=kx+b是匿名函数,该函数图形不需要另外传参数也能形成图形
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','location','southeast');
  1. f 関数は匿名関数であり、関数グラフは追加のパラメーターを渡さずにグラフを形成できます。Matlab でグラフィックスを描画するには、パラメーターを渡す必要があります。たとえば、通常の状況では、f 関数はパラメータを渡す必要があります。

無名関数の基本的な使い方

handle = @(arglist) anonymous_function
  • ここで、ハンドルは無名関数を呼び出すときに使用される名前です。

  • arglist は、匿名関数の入力パラメータであり、カンマで区切って 1 つまたは複数指定できます。

  • anonymous_function は無名関数の式です。

  • 入力パラメータと式の間にはスペースが必要であることに注意してください。

  1. fplot を使用すると、無名単項関数のグラフを描画できます。

基本的な使い方

fplot(f,xinterval) 
  • 無名関数 f を指定された間隔 xinterval でプロットします。xinterval = [xmin xmax] はドメインの範囲を表します

画像-20230811214612764

フィッティングの品質を評価する方法

画像-20230811214710021

  • SST、SSE、SSR によれば、次のことが証明できます。
  1. SST=SSE+SSR
  2. 適合度: 0<=1-SSE/SST<=1; SSE 誤差の二乗和が小さいほど、適合度 R 2は 1 に近づきます。誤差が小さいほど、適合度が高くなります。
  3. 注: 適合度 R 2は、適合関数が線形関数である場合にのみ使用できます。適合関数が他の関数の場合は、二乗誤差の合計を確認するだけです。SSE が小さいほど、適合度は高くなります。
  4. 線形関数とは、パラメータが 1 乗のみで表示され、他のパラメータで乗算または除算することができず、パラメータが複合関数の形式で表示されない関数を指します。このパラメータは独立変数 x を参照しません。たとえば、y=kx+b の場合、このパラメータは独立変数 x および従属変数 y とは異なるパラメータ k および b を指します。

画像-20230811221145242

適合度を計算するコード

plot(x,y,'o');
xlabel("x");
ylabel("y");
n=size(x,1);%% 数据的个数
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x));
b=(sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x));
hold on;%% 写上这句后续可以继续在之前的图形上画图形
grid on;%% 图形显示网格线
f=@(x) k*x+b; %% f=kx+b是匿名函数,该函数图形不需要另外传参数也能形成图形
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','location','southeast');
y_hat=k*x+b;
SSR=sum((y_hat-mean(y)).^2); % 回归平方和
SSE=sum((y-y_hat).^2); % 误差平方和
SST=sum((y-mean(y)).^2); % 总体平方和
disp(SST-SSE-SSR);
R_2=SSR/SST; % 拟合优度
disp(R_2);

画像-20230811222406484

  • SST-SSE-SSR の結果が 0 にならないのは、MATLAB の浮動小数点数演算がある程度不正確であるためですが、結果は 5.6843 ^-14と非常に小さい、つまり非常に近い結果になっています。 to 0
    [外部リンク画像転送中…(img-WkmLP3WM-1692188156893)]

  • SST-SSE-SSR の結果が 0 にならないのは、MATLAB の浮動小数点数演算がある程度不正確であるためですが、結果は 5.6843 ^-14と非常に小さい、つまり非常に近い結果になります。 0にします。

  • 適合度は 0.9635 で、1 に非常に近く、適合関数の適合度が良好であることを示しています。

おすすめ

転載: blog.csdn.net/m0_71841506/article/details/132327028