SciPy - Interpolasi

Dalam bab ini, kita akan membahas bagaimana interpolasi membantu dalam SciPy.

Apa itu Interpolasi?

Interpolasi adalah proses menemukan nilai antara dua titik pada garis atau kurva. Untuk membantu kita mengingat apa artinya, kita harus memikirkan bagian pertama dari kata, 'inter,' sebagai arti 'enter,' yang mengingatkan kita untuk melihat 'ke dalam' data yang semula kita miliki. Alat ini, interpolasi, tidak hanya berguna dalam statistik, tetapi juga berguna dalam sains, bisnis, atau ketika ada kebutuhan untuk memprediksi nilai yang termasuk dalam dua titik data yang ada.

Mari kita buat beberapa data dan lihat bagaimana interpolasi ini dapat dilakukan menggunakan scipy.interpolate paket.

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x = np.linspace(0, 4, 12)
y = np.cos(x**2/3+4)
print x,y

Program di atas akan menghasilkan keluaran sebagai berikut.

(
   array([0.,  0.36363636,  0.72727273,  1.09090909,  1.45454545, 1.81818182, 
          2.18181818,  2.54545455,  2.90909091,  3.27272727,  3.63636364,  4.]),
            
   array([-0.65364362,  -0.61966189,  -0.51077021,  -0.31047698,  -0.00715476,
           0.37976236,   0.76715099,   0.99239518,   0.85886263,   0.27994201,
          -0.52586509,  -0.99582185])
)

Sekarang, kami memiliki dua array. Dengan asumsi dua larik tersebut sebagai dua dimensi dari titik-titik dalam ruang, mari kita plot menggunakan program berikut dan melihat tampilannya.

plt.plot(x, y,’o’)
plt.show()

Program di atas akan menghasilkan keluaran sebagai berikut.

Interpolasi 1-D

Kelas interp1d di scipy.interpolate adalah metode yang mudah untuk membuat fungsi berdasarkan titik data tetap, yang dapat dievaluasi di mana saja dalam domain yang ditentukan oleh data yang diberikan menggunakan interpolasi linier.

Dengan menggunakan data di atas, mari kita buat fungsi interpolasi dan gambar grafik interpolasi baru.

f1 = interp1d(x, y,kind = 'linear')

f2 = interp1d(x, y, kind = 'cubic')

Menggunakan fungsi interp1d, kami membuat dua fungsi f1 dan f2. Fungsi-fungsi ini, untuk masukan yang diberikan x mengembalikan y. Jenis variabel ketiga mewakili jenis teknik interpolasi. 'Linear', 'Nearest', 'Zero', 'Slinear', 'Quadratic', 'Cubic' adalah beberapa teknik interpolasi.

Sekarang, mari kita buat masukan baru yang lebih panjang untuk melihat perbedaan yang jelas dari interpolasi. Kami akan menggunakan fungsi yang sama dari data lama pada data baru.

xnew = np.linspace(0, 4,30)

plt.plot(x, y, 'o', xnew, f(xnew), '-', xnew, f2(xnew), '--')

plt.legend(['data', 'linear', 'cubic','nearest'], loc = 'best')

plt.show()

Program di atas akan menghasilkan keluaran sebagai berikut.

Splines

Untuk menggambar kurva halus melalui titik data, perancang pernah menggunakan potongan tipis kayu, karet keras, logam atau plastik yang fleksibel yang disebut splines mekanis. Untuk menggunakan spline mekanis, pin ditempatkan pada titik-titik yang dipilih dengan cermat di sepanjang kurva dalam desain, dan kemudian spline dibengkokkan, sehingga menyentuh setiap pin ini.

Jelas, dengan konstruksi ini, spline menginterpolasi kurva pada pin ini. Ini dapat digunakan untuk mereproduksi kurva di gambar lain. Titik-titik di mana pin berada disebut simpul. Kita dapat mengubah bentuk kurva yang ditentukan oleh spline dengan menyesuaikan lokasi simpul.

Spline Univariat

Spline pemulusan satu dimensi cocok dengan kumpulan titik data tertentu. Kelas UnivariateSpline di scipy.interpolate adalah metode yang mudah digunakan untuk membuat fungsi, berdasarkan kelas poin data tetap - scipy.interpolate.UnivariateSpline (x, y, w = None, bbox = [None, None], k = 3, s = Tidak ada, ext = 0, check_finite = False).

Parameters - Berikut adalah parameter dari Univariate Spline.

  • Ini cocok dengan spline y = spl (x) derajat k ke data x, y yang tersedia.

  • 'w' - Menentukan bobot untuk pemasangan spline. Harus positif. Jika tidak ada (default), semua bobot sama.

  • 's' - Menentukan jumlah simpul dengan menentukan kondisi penghalusan.

  • 'k' - Derajat spline penghalusan. Harus <= 5. Default adalah k = 3, spline kubik.

  • Ext - Mengontrol mode ekstrapolasi untuk elemen yang tidak dalam interval yang ditentukan oleh urutan simpul.

    • jika ext = 0 atau 'extrapolate', mengembalikan nilai yang diekstrapolasi.

    • jika ext = 1 atau 'nol', mengembalikan 0

    • jika ext = 2 atau 'raise', memunculkan ValueError

    • jika ext = 3 dari 'const', mengembalikan nilai batas.

  • check_finite - Apakah akan memeriksa bahwa array input hanya berisi angka terbatas.

Mari kita perhatikan contoh berikut.

import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
x = np.linspace(-3, 3, 50)
y = np.exp(-x**2) + 0.1 * np.random.randn(50)
plt.plot(x, y, 'ro', ms = 5)
plt.show()

Gunakan nilai default untuk parameter penghalusan.

spl = UnivariateSpline(x, y)
xs = np.linspace(-3, 3, 1000)
plt.plot(xs, spl(xs), 'g', lw = 3)
plt.show()

Ubah jumlah smoothing secara manual.

spl.set_smoothing_factor(0.5)
plt.plot(xs, spl(xs), 'b', lw = 3)
plt.show()