Main Content

平滑化スプライン

平滑化スプラインについて

データにノイズが含まれている場合は、平滑化スプラインを使用して近似する必要がある場合もあります。または、データのフィルター処理と平滑化で説明されているいずれかの平滑化法を使用できます。

平滑化スプライン s は、指定された "平滑化パラメーター" p と指定された重み wi に対して構築されます。平滑化スプラインは次を最小化します。

piwi(yis(xi))2+(1p)(d2sdx2)2dx

重みが指定されない場合、すべてのデータ点について 1 と仮定されます。

p は 0 と 1 の間で定義されます。p = 0 の場合は、最小二乗直線近似によるデータの近似が生成され、p = 1 の場合は 3 次スプライン内挿が生成されます。平滑化パラメーターを指定しない場合、"関心のある範囲" で自動的に選択されます。p の関心のある範囲は多くの場合、1/(1+h3/6) 付近です。ここで、h はデータ点の平均間隔であり、通常はパラメーターの許容範囲よりもはるかに小さくなります。平滑化スプラインには関連する平滑化パラメーターがあるため、その意味でこれらの近似はパラメトリックと見なせる場合があります。ただし、平滑化スプラインは、3 次スプライン内挿または形状維持内挿のように区分的多項式でもあり、このガイドではノンパラメトリック近似タイプと見なします。

メモ:

平滑化スプライン アルゴリズムは関数 csaps に基づいています。

ファイル carbon12alpha.mat の核反応データを 3 つの平滑化スプライン近似と共にここに示します。既定の平滑化パラメーター (p = 0.99) で最も滑らかな曲線が生成されます。3 次スプライン曲線 (p = 1) はすべてのデータ点を通過しますが、あまり滑らかではありません。3 番目の曲線 (p = 0.95) はマージンが広いためデータを外れており、p の "関心のある範囲" が非常に小さいことを示しています。

平滑化スプライン近似の対話的な選択

  1. MATLAB® コマンド ラインでデータを読み込みます。

    load carbon12alpha
  2. 曲線フィッター アプリを開きます。

    curveFitter

    または、[アプリ] タブの [数学、統計および最適化] グループで [曲線フィッター] をクリックします。

  3. [曲線フィッター] タブの [データ] セクションで [データの選択] をクリックします。[近似データの選択] ダイアログ ボックスで、[X データ] の値として angle[Y データ] の値として counts を選択します。詳細は、曲線フィッター アプリで近似するデータの選択を参照してください。

  4. [曲線フィッター] タブの [近似タイプ] セクションで、矢印をクリックしてギャラリーを開き、[平滑化] グループの [平滑化スプライン] をクリックします。

  5. [近似オプション] ペインで、[平滑化パラメーター] 値を指定できます。

    Fit Options pane for smoothing spline fit

    [平滑化パラメーター] の既定値は 1 に近くなっています。アプリはデータに適した既定値の選択を試みます。[平滑化パラメーター] の値は、次のいずれかの方法で変更できます。

    • データから離れたより滑らかな近似にするには、プロットの表示が必要な滑らかさになるまで、[<滑らかにする] ボタンを繰り返し押します。

    • データに近いより粗い近似にするには、満足のいくプロットになるまで、[粗くする>] ボタンを押します。

    • または、平滑化パラメーターに 0 から 1 までの任意の値を指定します。値が 0 の場合は線形多項式近似 (データの最小二乗直線近似) が生成され、1 の場合はすべてのデータ点を通過する区分的 3 次多項式近似 (3 次スプライン内挿) が生成されます。carbon12alpha データセットの場合は、[平滑化パラメーター] の値として 10.95 を試します。

    • [既定の設定] をクリックすると初期値に戻ります。

関数 fit を使用した平滑化スプライン モデルによる近似

この例では、関数 fit を使用して平滑化スプライン モデルによりデータを近似する方法を示します。

平滑化スプライン モデルによる近似

関数 fit の呼び出し時に 'smoothingspline' を指定することで、データを読み込んで、平滑化スプライン モデルにより近似します。

load enso
f = fit(month,pressure,'smoothingspline');
plot(f,month,pressure)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent data, fitted curve.

計算された平滑化パラメーターの表示

計算された平滑化パラメーターを表示するには、モデルを再度作成し、3 番目の出力引数を使用します。平滑化パラメーターは、out 構造体の値 p です。既定値はデータセットによって異なります。

[f,gof,out] = fit(month,pressure,'smoothingspline');

out.p
ans = 0.9000

'SmoothingParam' を使用した平滑化パラメーターの指定

'SmoothingParam' オプションを使用して新しい近似の平滑化パラメーターを指定します。その値は 0 と 1 の間でなければなりません。

f = fit(month,pressure,'smoothingspline','SmoothingParam',0.07);
plot(f,month,pressure)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent data, fitted curve.

fitoptions を使用した平滑化パラメーターの指定

または、fitoptions を使用して、近似する前に平滑化パラメーターを指定します。

options = fitoptions('Method','Smooth','SmoothingParam',0.07);
[f,gof,out] = fit(month,pressure,'smooth',options);
out.p
ans = 0.0700

'smoothingspline' の代わりに 3 次平滑化スプライン関数 csaps または他のスプライン関数を使用して、作成できる内容をより細かく制御することができます。スプライン近似の概要を参照してください。

曲線フィッターによる 3 次スプライン近似と平滑化スプライン近似の比較

この例では、曲線フィッター アプリを使用して 3 次スプライン内挿近似と平滑化スプライン近似を比較します。

  1. データ x とデータ y を作成します。

    x = (4*pi)*[0 1 rand(1,25)]; 
    y = sin(x) + .2*(rand(size(x))-.5);
    

  2. 曲線フィッター アプリを開きます。

    curveFitter

    または、[アプリ] タブの [数学、統計および最適化] グループで [曲線フィッター] をクリックします。

  3. [曲線フィッター] タブの [データ] セクションで [データの選択] をクリックします。[近似データの選択] ダイアログ ボックスで、[X データ] の値として x[Y データ] の値として y を選択します。

  4. [曲線フィッター] タブの [近似タイプ] セクションで、矢印をクリックしてギャラリーを開き、[内挿] グループの [内挿] をクリックします。

  5. [近似オプション] ペインで、[メソッド]Cubic spline を指定します。曲線フィッター アプリにより、3 次スプライン内挿が当てはめられ、プロットされます。

    Fit Options pane for cubic spline interpolant fit

  6. 近似の名前を変更します。[近似テーブル] ペインで、[近似名] の値をダブルクリックして CubicSplineFit と入力します。

  7. [結果] ペインを表示します。[内挿] 近似では、RMSE などの適合度の統計量は定義されません。それらの値は NaN となります。

    Results pane for cubic spline interpolant fit

    3 次スプライン内挿は、区分的多項式として定義され、結果は係数の構造体 (p) になります。構造体に含まれる "区分" の数は、近似されるデータ点の数より 1 少なくなります。多項式の次数が 3 であるため各区分の係数の数は 4 です。CubicSplineFit.p と入力して近似をワークスペースにエクスポートすると、係数構造体 p を検証できます。この係数構造体については、pp 型スプラインの作成と操作を参照してください。

  8. 別の近似を作成して比較します。[近似テーブル] タブで既存の近似 CubicSplineFit を右クリックし、["CubicSplineFit" を複製] を選択します。新しい近似の名前を SmoothingSplineFit に変更します。

  9. [曲線フィッター] タブの [近似タイプ] セクションで [平滑化スプライン] 近似を選択します。

    Fit Options pane for smoothing spline fit

    [近似オプション] ペインの [平滑化パラメーター] は、滑らかさのレベルを定義します。[平滑化パラメーター] は、データセットに応じてアプリが計算します。このデータセットの場合、既定の [平滑化パラメーター] は 1 に近くなっています。これは、平滑化スプラインがほぼ 3 次スプラインとなり、各データ点を通過する状態に非常に近くなることを示しています。

    [平滑化パラメーター] に範囲 [0 1] 内の非負のスカラーを指定することで、滑らかさのレベルを変更できます。[平滑化パラメーター] に 0 を指定すると、線形多項式近似が作成されます。[平滑化パラメーター] に 1 を指定すると、すべてのデータ点を通過する区分的 3 次多項式近似が作成されます。

  10. [結果] ペインで平滑化スプライン近似の数値結果を確認します。

    Results pane for smoothing spline fit

  11. 作成した 2 つの近似 (3 次スプライン内挿近似と平滑化スプライン近似) のプロットを比較します。この 2 つの近似は、内側の点については類似していますが、端点では大きなずれが生じます。

メモ

結果はランダムな開始点に依存するため、ここに示した結果と異なる場合があります。

参考

アプリ

関数

関連するトピック