補間とは何ですか? Python はデータ補間を実装します

データ補間は、既知のデータ ポイント間の関係を利用して、限られたデータ ポイントのセットが与えられた場合に、新しいデータ ポイントの値を推定する方法です。これは、データの欠損、データの平滑化、または連続関数の作成の場合によく使用されます。

一般的なデータ補間方法には、線形補間、多項式補間、スプライン補間などが含まれます。

  1. 線形補間: 線形補間は、2 つの既知のデータ ポイント間の直線に基づいて新しいデータ ポイントの値を推定するという基本的な考え方を持つ単純な補間方法です。具体的には、指定された 2 つのデータ点( x 1 , y 1 ) (x_1, y_1)について( ×1y1)( x 2 , y 2 ) (x_2, y_2)( ×2y2) 、線形補間では、次の式を使用して、これら 2 つのデータ ポイント間の新しいデータ ポイントのyyy
    y = y 1 + ( x − x 1 ) y 2 − y 1 x 2 − x 1 y = y_1 + (x - x_1) \frac{y_2 - y_1}{x_2 - x_1}y=y1+( ×バツ1)バツ2×1y2y1

  2. 多項式補間: 多項式補間は、指定されたデータ ポイントを通過し、新しいデータ ポイントの値を補間する多項式関数を構築します。最も一般的に使用される多項式補間方法は、ラグランジュ補間とニュートン補間です。これらの方法では、係数を適切に選択することで、多項式が既知のデータ点と正確に一致します。

  3. スプライン補間: スプライン補間は、複数の低次多項式を使用して特定のデータ ポイント間の曲線を近似する、より複雑な補間方法です。スプライン補間は区分関数の概念に基づいており、補間区間を複数の小さなセグメントに分割し、各小さなセグメントの補間に低次の多項式を使用します。一般的なスプライン補間方法には、線形スプライン補間、二次スプライン補間、三次スプライン補間などがあります。

適切な内挿方法を選択するには、データ特性、精度要件、計算効率などの要素を考慮する必要があります。さらに、補間方法はデータ内のノイズに敏感な場合があり、オーバーフィッティングまたは非滑らかな補間結果により、より大きな誤差が生じる可能性があることに注意してください。したがって、特定のアプリケーションでは、問題の要件とデータの特性に基づいて適切な補間方法を選択する必要があります。

Pythonの実装

Python では、SciPy ライブラリを使用してさまざまな補間メソッドを実装できます。3 つの一般的な補間方法のサンプル コードを以下に示します。

  1. 線形補間:
import numpy as np
from scipy import interpolate

# 训练数据
x_train = np.array([1, 2, 3, 4, 5])
y_train = np.array([4, 6, 7, 8, 10])

# 构造线性插值函数
linear_interp_func = interpolate.interp1d(x_train, y_train, kind='linear')

# 插值
x_test = np.array([1.5, 2.5, 3.5, 4.5])
y_test = linear_interp_func(x_test)

print(y_test)

上記のコードを実行すると、線形補間によって取得された新しいデータ ポイントが出力されます[5., 6.5, 7.5, 9.]

上記のコードでは、interpolate.interp1d関数は線形補間関数を構築しますlinear_interp_func。この関数の入力は x_train および y_train のトレーニング データ ポイントであり、出力は新しい補間データ ポイントです。の値は、引数としてlinear_interp_func関数を呼び出すことで推定できます。x_testy_test

  1. 多項式補間:
import numpy as np
from scipy import interpolate

# 训练数据
x_train = np.array([1, 2, 3, 4, 5])
y_train = np.array([4, 6, 7, 8, 10])

# 构造多项式插值函数
poly_interp_func = interpolate.interp1d(x_train, y_train, kind='quadratic')

# 插值
x_test = np.array([1.5, 2.5, 3.5, 4.5])
y_test = poly_interp_func(x_test)

print(y_test)

上記のコードを実行すると、多項式補間によって取得された新しいデータ ポイントが出力されます[5.5, 6.25, 7.75, 9.75]

上記のコードでは、interpolate.interp1d関数は 2 次多項式内挿関数を構築しますpoly_interp_func。この関数の入力は x_train および y_train のトレーニング データ ポイントであり、出力は新しい内挿データ ポイントです。の値は、引数としてpoly_interp_func関数を呼び出すことで推定できます。x_testy_test

  1. スプライン補間:
import numpy as np
from scipy import interpolate

# 训练数据
x_train = np.array([1, 2, 3, 4, 5])
y_train = np.array([4, 6, 7, 8, 10])

# 构造样条插值函数
spline_interp_func = interpolate.interp1d(x_train, y_train, kind='cubic')

# 插值
x_test = np.array([1.5, 2.5, 3.5, 4.5])
y_test = spline_interp_func(x_test)

print(y_test)

上記のコードを実行すると、スプライン補間によって取得された新しいデータ ポイントが出力されます[5.25, 6.875, 8.125, 9.375]

上記のコードでは、interpolate.interp1d関数は 3 次スプライン補間関数を構築しますspline_interp_func。この関数の入力は x_train および y_train のトレーニング データ ポイントであり、出力は新しい補間データ ポイントです。の値は、引数としてspline_interp_func関数を呼び出すことで推定できます。x_testy_test

実際のアプリケーションでは、より正確な結果を得るために、問題の要件とデータの特性に基づいて適切な内挿方法を選択する必要があることに注意してください。

おすすめ

転載: blog.csdn.net/weixin_45277161/article/details/133065668